diff --git a/LICENSE.md b/LICENSE.md index ed5bc6e8..da8a376d 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License -Copyright (c) 2015-2025 [EPAM Systems, Inc.](https://www.epam.com/) +Copyright (c) 2015-2026 [EPAM Systems, Inc.](https://www.epam.com/) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 57842b69..82683fa8 100644 --- a/README.md +++ b/README.md @@ -39,10 +39,10 @@ is to reference a CDN version: - + - - + +
@@ -70,4 +70,4 @@ for submitting pull requests. [MIT](LICENSE.md) -Copyright (c) 2015–2025 [EPAM Systems, Inc.](https://www.epam.com/) +Copyright (c) 2015–2026 [EPAM Systems, Inc.](https://www.epam.com/) diff --git a/package.json b/package.json index ed37a164..fe25bb56 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "miew-monorepo", - "version": "0.11.0", + "version": "0.12.0", "license": "MIT", "private": true, "workspaces": [ diff --git a/packages/miew-app/CHANGELOG.md b/packages/miew-app/CHANGELOG.md index 71000ce9..1c8f1330 100644 --- a/packages/miew-app/CHANGELOG.md +++ b/packages/miew-app/CHANGELOG.md @@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +## [0.12.0] - 2026-06-09 + +### Changed + +- Replaced the custom Miew viewer implementation with the `miew-react` wrapper component. +- Migrated Redux state management from plain Redux to Redux Toolkit. +- Removed the non-serializable Miew instance from the Redux store; components now access it + through React context instead. +- Upgraded to React 19. + +### Fixed + +- Restored the "Fork me on GitHub" ribbon in the application header. + +### Internal + +- Moved test files next to the source files they cover. +- Updated third-party dependencies. + ## [0.11.0] - 2024-08-26 ### Added @@ -16,5 +35,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. [`miew-app`]: https://github.com/epam/miew/tree/main/packages/miew-app -[Unreleased]: https://github.com/epam/miew/compare/v0.11.0...HEAD +[Unreleased]: https://github.com/epam/miew/compare/v0.12.0...HEAD +[0.12.0]: https://github.com/epam/miew/compare/v0.11.0...v0.12.0 [0.11.0]: https://github.com/epam/miew/compare/v0.9.0...v0.11.0 diff --git a/packages/miew-app/README.md b/packages/miew-app/README.md index c3c97a3f..272f7186 100644 --- a/packages/miew-app/README.md +++ b/packages/miew-app/README.md @@ -18,4 +18,4 @@ Please read [CONTRIBUTING.md](../../CONTRIBUTING.md) for details on our code of [MIT](../../LICENSE.md) -Copyright (c) 2015–2025 [EPAM Systems, Inc.](https://www.epam.com/) +Copyright (c) 2015–2026 [EPAM Systems, Inc.](https://www.epam.com/) diff --git a/packages/miew-app/package.json b/packages/miew-app/package.json index 6e1f9a1b..3dd58245 100644 --- a/packages/miew-app/package.json +++ b/packages/miew-app/package.json @@ -1,6 +1,6 @@ { "name": "miew-app", - "version": "0.11.0", + "version": "0.12.0", "description": "React application demonstrating capabilities of Miew library", "author": "EPAM Systems, Inc.", "private": true, diff --git a/packages/miew-app/src/components/menu/panelslist/panels/AboutPanel/AboutPanel.jsx b/packages/miew-app/src/components/menu/panelslist/panels/AboutPanel/AboutPanel.jsx index d8063c23..14ae4b09 100644 --- a/packages/miew-app/src/components/menu/panelslist/panels/AboutPanel/AboutPanel.jsx +++ b/packages/miew-app/src/components/menu/panelslist/panels/AboutPanel/AboutPanel.jsx @@ -19,7 +19,7 @@ const AboutPanel = () => {

Miew – 3D Molecular Viewer

{version}

-

Copyright © 2015–2025 EPAM Systems, Inc.

+

Copyright © 2015–2026 EPAM Systems, Inc.

https://epa.ms/miew

diff --git a/packages/miew-app/src/components/menu/terminal/Terminal.jsx b/packages/miew-app/src/components/menu/terminal/Terminal.jsx index b43b50cc..1b721041 100644 --- a/packages/miew-app/src/components/menu/terminal/Terminal.jsx +++ b/packages/miew-app/src/components/menu/terminal/Terminal.jsx @@ -32,7 +32,7 @@ function Terminal({ isTerminalVisible }) { } const terminalConfig = { - greetings: 'Miew - 3D Molecular Viewer\nCopyright © 2015-2025 EPAM Systems, Inc.\n', + greetings: 'Miew - 3D Molecular Viewer\nCopyright © 2015-2026 EPAM Systems, Inc.\n', prompt: 'miew> ', name: 'miew', scrollOnEcho: true, diff --git a/packages/miew-react/CHANGELOG.md b/packages/miew-react/CHANGELOG.md index 5da1f0d8..29618ec7 100644 --- a/packages/miew-react/CHANGELOG.md +++ b/packages/miew-react/CHANGELOG.md @@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +## [0.12.0] - 2026-06-09 + +### Added + +- The `Viewer` component now accepts `className`, `style`, `id`, `title`, event handlers, + `data-*` and `aria-*` attributes, and other standard HTML `
` props, making it easy + to style and integrate the viewer into any layout. +- Added comprehensive prop validation and error handling to the `Viewer` component. + +### Changed + +- Upgraded the React peer dependency to version 19. + +### Internal + +- Updated third-party dependencies. + ## [0.11.0] - 2024-08-26 ### Added @@ -15,5 +32,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. as a separate [miew-react](https://www.npmjs.com/package/miew-react) package on npm. [`miew-react`]: https://github.com/epam/miew/tree/main/packages/miew-react -[Unreleased]: https://github.com/epam/miew/compare/v0.11.0...HEAD +[Unreleased]: https://github.com/epam/miew/compare/v0.12.0...HEAD +[0.12.0]: https://github.com/epam/miew/compare/v0.11.0...v0.12.0 [0.11.0]: https://github.com/epam/miew/compare/v0.9.0...v0.11.0 diff --git a/packages/miew-react/LICENSE.md b/packages/miew-react/LICENSE.md index ed5bc6e8..da8a376d 100644 --- a/packages/miew-react/LICENSE.md +++ b/packages/miew-react/LICENSE.md @@ -1,6 +1,6 @@ The MIT License -Copyright (c) 2015-2025 [EPAM Systems, Inc.](https://www.epam.com/) +Copyright (c) 2015-2026 [EPAM Systems, Inc.](https://www.epam.com/) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/miew-react/README.md b/packages/miew-react/README.md index ec758164..f3fa90f9 100644 --- a/packages/miew-react/README.md +++ b/packages/miew-react/README.md @@ -71,4 +71,4 @@ Please read [CONTRIBUTING.md](../../CONTRIBUTING.md) for details on our code of [MIT](LICENSE.md) -Copyright (c) 2015–2025 [EPAM Systems, Inc.](https://www.epam.com/) +Copyright (c) 2015–2026 [EPAM Systems, Inc.](https://www.epam.com/) diff --git a/packages/miew-react/package.json b/packages/miew-react/package.json index 245d6cab..f347893f 100644 --- a/packages/miew-react/package.json +++ b/packages/miew-react/package.json @@ -1,13 +1,13 @@ { "name": "miew-react", - "version": "0.11.0", + "version": "0.12.0", "description": "Miew - 3D Molecular Viewer (React component)", "author": "EPAM Systems, Inc.", "homepage": "https://github.com/epam/miew#readme", "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/epam/miew.git", + "url": "git+https://github.com/epam/miew.git", "directory": "packages/miew-react" }, "bugs": { diff --git a/packages/miew/CHANGELOG.md b/packages/miew/CHANGELOG.md index c63c30f1..a2db9e96 100644 --- a/packages/miew/CHANGELOG.md +++ b/packages/miew/CHANGELOG.md @@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +## [0.12.0] - 2026-06-09 + +### Changed + +- Upgraded the WebGL renderer to WebGL 2.0, replacing deprecated extension APIs with built-in + WebGL 2.0 equivalents. This may affect applications that rely on the specific WebGL 1.0 + extension behavior. +- Updated shaders to GLSL 3.0, restoring ambient occlusion, shadows, electron density, + sprite-based rendering modes, and other visual effects that had regressed with the + newer Three.js renderer. + +### Fixed + +- Fixed an always-false condition check in the component edit mode. + +### Internal + +- Updated third-party dependencies. + ## [0.11.1] - 2025-10-14 ### Fixed @@ -648,7 +667,8 @@ in [0.7.7+hotfix] and later releases. - Update dependencies to the latest supported versions. - Move the project to GitHub. -[Unreleased]: https://github.com/epam/miew/compare/v0.11.1...HEAD +[Unreleased]: https://github.com/epam/miew/compare/v0.12.0...HEAD +[0.12.0]: https://github.com/epam/miew/compare/v0.11.1...v0.12.0 [0.11.1]: https://github.com/epam/miew/compare/v0.11.0...v0.11.1 [0.11.0]: https://github.com/epam/miew/compare/v0.9.0...v0.11.0 [0.10.0]: https://github.com/epam/miew/compare/v0.9.0...v0.10.0 diff --git a/packages/miew/LICENSE.md b/packages/miew/LICENSE.md index ed5bc6e8..da8a376d 100644 --- a/packages/miew/LICENSE.md +++ b/packages/miew/LICENSE.md @@ -1,6 +1,6 @@ The MIT License -Copyright (c) 2015-2025 [EPAM Systems, Inc.](https://www.epam.com/) +Copyright (c) 2015-2026 [EPAM Systems, Inc.](https://www.epam.com/) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/miew/README.md b/packages/miew/README.md index a5fcfc49..4f73a736 100644 --- a/packages/miew/README.md +++ b/packages/miew/README.md @@ -30,10 +30,10 @@ or built with a bundler of your choice. For more details refer to: - + - - + +
@@ -116,4 +116,4 @@ Please read [CONTRIBUTING.md](../../CONTRIBUTING.md) for details on our code of [MIT](LICENSE.md) -Copyright (c) 2015–2025 [EPAM Systems, Inc.](https://www.epam.com/) +Copyright (c) 2015–2026 [EPAM Systems, Inc.](https://www.epam.com/) diff --git a/packages/miew/demo/menu.html b/packages/miew/demo/menu.html index f27fe17c..eb17de69 100644 --- a/packages/miew/demo/menu.html +++ b/packages/miew/demo/menu.html @@ -396,7 +396,7 @@

-

Copyright © 2015–2025 EPAM Systems, Inc.

+

Copyright © 2015–2026 EPAM Systems, Inc.

https://epa.ms/miew


diff --git a/packages/miew/demo/scripts/ui/Menu.js b/packages/miew/demo/scripts/ui/Menu.js index 1c050e95..4f2c18d0 100644 --- a/packages/miew/demo/scripts/ui/Menu.js +++ b/packages/miew/demo/scripts/ui/Menu.js @@ -137,7 +137,7 @@ Menu.prototype._initializeTerminal = function () { } }, { - greetings: 'Miew - 3D Molecular Viewer\nCopyright © 2015-2025 EPAM Systems, Inc.\n', + greetings: 'Miew - 3D Molecular Viewer\nCopyright © 2015-2026 EPAM Systems, Inc.\n', prompt: 'miew> ', name: 'miew', scrollOnEcho: true, diff --git a/packages/miew/dist/Miew.css b/packages/miew/dist/Miew.css index 84f89740..1748e745 100644 --- a/packages/miew/dist/Miew.css +++ b/packages/miew/dist/Miew.css @@ -72,7 +72,7 @@ right: 10px; border-radius: 4px; color: silver; - background-color: rgba(64, 64, 64, 0.75); + background-color: rgb(64, 64, 64, 0.75); display: flex; align-items: left; justify-content: left; diff --git a/packages/miew/dist/Miew.js b/packages/miew/dist/Miew.js index 8f3b416d..8f4c4b1b 100644 --- a/packages/miew/dist/Miew.js +++ b/packages/miew/dist/Miew.js @@ -1,4 +1,4 @@ -/*! Miew - 3D Molecular Viewer v0.11.1 Copyright (c) 2015-2025 EPAM Systems, Inc. */ +/*! Miew - 3D Molecular Viewer v0.12.0 Copyright (c) 2015-2026 EPAM Systems, Inc. */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("lodash"), require("three")); @@ -12,8 +12,8 @@ return /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ -/***/ 89: -/***/ ((module) => { +/***/ 89 +(module) { /* eslint-disable */ // DO NOT EDIT! Automatically generated from .jison @@ -360,7 +360,8 @@ var parser = function () { switch (yystate) { case 1: return $$[$0 - 1]; - break; + // removed by dead control flow + case 3: this.$ = yy.miew.reset(false); yy.ClearContext(); @@ -2590,248 +2591,329 @@ var parser = function () { break; case 1: return ''; - break; + // removed by dead control flow + case 2: return ''; - break; + // removed by dead control flow + case 3: return 42; - break; + // removed by dead control flow + case 4: return 35; - break; + // removed by dead control flow + case 5: return 77; - break; + // removed by dead control flow + case 6: return 78; - break; + // removed by dead control flow + case 7: return 78; - break; + // removed by dead control flow + case 8: return 8; - break; + // removed by dead control flow + case 9: return 6; - break; + // removed by dead control flow + case 10: return 82; - break; + // removed by dead control flow + case 11: return 7; - break; + // removed by dead control flow + case 12: return 9; - break; + // removed by dead control flow + case 13: return 59; - break; + // removed by dead control flow + case 14: return 13; - break; + // removed by dead control flow + case 15: return 15; - break; + // removed by dead control flow + case 16: return 17; - break; + // removed by dead control flow + case 17: return 18; - break; + // removed by dead control flow + case 18: return 19; - break; + // removed by dead control flow + case 19: return 20; - break; + // removed by dead control flow + case 20: return 11; - break; + // removed by dead control flow + case 21: return 62; - break; + // removed by dead control flow + case 22: return 64; - break; + // removed by dead control flow + case 23: return 23; - break; + // removed by dead control flow + case 24: return 25; - break; + // removed by dead control flow + case 25: return 26; - break; + // removed by dead control flow + case 26: return 27; - break; + // removed by dead control flow + case 27: return 30; - break; + // removed by dead control flow + case 28: return 34; - break; + // removed by dead control flow + case 29: return 33; - break; + // removed by dead control flow + case 30: return 65; - break; + // removed by dead control flow + case 31: return 66; - break; + // removed by dead control flow + case 32: return 37; - break; + // removed by dead control flow + case 33: return 41; - break; + // removed by dead control flow + case 34: return 43; - break; + // removed by dead control flow + case 35: return 52; - break; + // removed by dead control flow + case 36: return 54; - break; + // removed by dead control flow + case 37: return 55; - break; + // removed by dead control flow + case 38: return 46; - break; + // removed by dead control flow + case 39: return 48; - break; + // removed by dead control flow + case 40: return 45; - break; + // removed by dead control flow + case 41: return 49; - break; + // removed by dead control flow + case 42: return 56; - break; + // removed by dead control flow + case 43: return 58; - break; + // removed by dead control flow + case 44: return 44; - break; + // removed by dead control flow + case 45: return 83; - break; + // removed by dead control flow + case 46: return 84; - break; + // removed by dead control flow + case 47: return 85; - break; + // removed by dead control flow + case 48: return 86; - break; + // removed by dead control flow + case 49: return 87; - break; + // removed by dead control flow + case 50: return 88; - break; + // removed by dead control flow + case 51: return 89; - break; + // removed by dead control flow + case 52: return 90; - break; + // removed by dead control flow + case 53: return 91; - break; + // removed by dead control flow + case 54: return 92; - break; + // removed by dead control flow + case 55: return 93; - break; + // removed by dead control flow + case 56: return 94; - break; + // removed by dead control flow + case 57: return 95; - break; + // removed by dead control flow + case 58: return 70; - break; + // removed by dead control flow + case 59: return 70; - break; + // removed by dead control flow + case 60: return 72; - break; + // removed by dead control flow + case 61: return 72; - break; + // removed by dead control flow + case 62: return 74; - break; + // removed by dead control flow + case 63: return 74; - break; + // removed by dead control flow + case 64: return 74; - break; + // removed by dead control flow + case 65: return 31; - break; + // removed by dead control flow + case 66: return 36; - break; + // removed by dead control flow + case 67: return 96; - break; + // removed by dead control flow + case 68: return 97; - break; + // removed by dead control flow + case 69: return 98; - break; + // removed by dead control flow + case 70: return 99; - break; + // removed by dead control flow + case 71: yy_.yytext = yy.utils.unquoteString(yy_.yytext); return 14; - break; + // removed by dead control flow + case 72: return 38; - break; + // removed by dead control flow + case 73: return 5; - break; + // removed by dead control flow + case 74: return 101; - break; + // removed by dead control flow + case 75: return 103; - break; + // removed by dead control flow + case 76: return '\\'; - break; + // removed by dead control flow + case 77: return 28; - break; + // removed by dead control flow + case 78: return 61; - break; + // removed by dead control flow + case 79: return 29; - break; + // removed by dead control flow + case 80: return 57; - break; + // removed by dead control flow + case 81: return 71; - break; + // removed by dead control flow + } }, rules: [/^(?:\s+)/i, /^(?:[#].*)/i, /^(?:\/\/.*)/i, /^(?:([_A-Z0-9\/\+]+==))/i, /^(?:-?[0-9]+(\.[0-9]+)?\b)/i, /^(?:0[xX][0-9A-F]+\b)/i, /^(?:false\b)/i, /^(?:true\b)/i, /^(?:all\b)/i, /^(?:reset\b)/i, /^(?:clear\b)/i, /^(?:build\b)/i, /^(?:help\b)/i, /^(?:load\b)/i, /^(?:get\b)/i, /^(?:set\b)/i, /^(?:set_save\b)/i, /^(?:set_restore\b)/i, /^(?:set_reset\b)/i, /^(?:preset\b)/i, /^(?:motm\b)/i, /^(?:add\b)/i, /^(?:rep\b)/i, /^(?:remove\b)/i, /^(?:hide\b)/i, /^(?:show\b)/i, /^(?:list\b)/i, /^(?:select\b)/i, /^(?:within\b)/i, /^(?:selector\b)/i, /^(?:mode\b)/i, /^(?:color\b)/i, /^(?:material\b)/i, /^(?:view\b)/i, /^(?:unit\b)/i, /^(?:line\b)/i, /^(?:listobj\b)/i, /^(?:removeobj\b)/i, /^(?:rotate\b)/i, /^(?:translate\b)/i, /^(?:scale\b)/i, /^(?:center\b)/i, /^(?:url\b)/i, /^(?:screenshot\b)/i, /^(?:dssp\b)/i, /^(?:file_list\b)/i, /^(?:file_register\b)/i, /^(?:file_delete\b)/i, /^(?:preset_add\b)/i, /^(?:preset_delete\b)/i, /^(?:preset_update\b)/i, /^(?:preset_rename\b)/i, /^(?:preset_open\b)/i, /^(?:create_scenario\b)/i, /^(?:reset_scenario\b)/i, /^(?:delete_scenario\b)/i, /^(?:add_scenario_item\b)/i, /^(?:list_scenario\b)/i, /^(?:s\b)/i, /^(?:mt\b)/i, /^(?:m\b)/i, /^(?:c\b)/i, /^(?:x\b)/i, /^(?:y\b)/i, /^(?:z\b)/i, /^(?:as\b)/i, /^(?:of\b)/i, /^(?:pdb\b)/i, /^(?:delay\b)/i, /^(?:prst\b)/i, /^(?:desc\b)/i, /^(?:((?:"(?:\\.|[^\\"])*"|'(?:\\.|[^\\'])*')))/i, /^(?:([_A-Z0-9]+))/i, /^(?:$)/i, /^(?:\.)/i, /^(?:\/)/i, /^(?:\\)/i, /^(?:-e\b)/i, /^(?:-f\b)/i, /^(?:-s\b)/i, /^(?:-v\b)/i, /^(?:=)/i], @@ -2856,10 +2938,10 @@ module.exports = { parser: parser }; -/***/ }), +/***/ }, -/***/ 99: -/***/ ((module) => { +/***/ 99 +(module) { /* eslint-disable */ // DO NOT EDIT! Automatically generated from .jison @@ -3011,7 +3093,8 @@ var parser = function () { switch (yystate) { case 1: return $$[$0 - 1]; - break; + // removed by dead control flow + case 3: this.$ = yy.keyword('or')($$[$0 - 2], $$[$0]); break; @@ -3601,65 +3684,85 @@ var parser = function () { break; case 1: return 20; - break; + // removed by dead control flow + case 2: return 7; - break; + // removed by dead control flow + case 3: return 8; - break; + // removed by dead control flow + case 4: return 9; - break; + // removed by dead control flow + case 5: return 12; - break; + // removed by dead control flow + case 6: return 16; - break; + // removed by dead control flow + case 7: return 14; - break; + // removed by dead control flow + case 8: return 10; - break; + // removed by dead control flow + case 9: return 11; - break; + // removed by dead control flow + case 10: return 19; - break; + // removed by dead control flow + case 11: return 21; - break; + // removed by dead control flow + case 12: return '<='; - break; + // removed by dead control flow + case 13: return '>='; - break; + // removed by dead control flow + case 14: return '<'; - break; + // removed by dead control flow + case 15: return '>'; - break; + // removed by dead control flow + case 16: yy_.yytext = yy_.yytext.substr(1, yy_.yyleng - 2); return 24; - break; + // removed by dead control flow + case 17: return 13; - break; + // removed by dead control flow + case 18: return 23; - break; + // removed by dead control flow + case 19: return 5; - break; + // removed by dead control flow + case 20: return 'INVALID'; - break; + // removed by dead control flow + } }, rules: [/^(?:\s+)/i, /^(?:(-?(?:[1-9][0-9]+|[0-9]))\b)/i, /^(?:OR\b)/i, /^(?:AND\b)/i, /^(?:NOT\b)/i, /^(?:((ALL|NONE|HETATM|PROTEIN|BASIC|ACIDIC|CHARGED|POLAR|NONPOLAR|AROMATIC|NUCLEIC|PURINE|PYRIMIDINE|WATER|POLARH|NONPOLARH))\b)/i, /^(?:((NAME|ELEM|TYPE|RESIDUE|ICODE|CHAIN|ALTLOC))\b)/i, /^(?:((SERIAL|SEQUENCE|RESIDX))\b)/i, /^(?:\()/i, /^(?:\))/i, /^(?:,)/i, /^(?::)/i, /^(?:<=)/i, /^(?:>=)/i, /^(?:<)/i, /^(?:>)/i, /^(?:((?:"(?:\\.|[^\\"])*"|'(?:\\.|[^\\'])*')))/i, /^(?:(@[_A-Z0-9]+))/i, /^(?:([_A-Z0-9]+))/i, /^(?:$)/i, /^(?:.)/i], @@ -3684,10 +3787,10 @@ module.exports = { parser: parser }; -/***/ }), +/***/ }, -/***/ 690: -/***/ (function(__unused_webpack_module, exports) { +/***/ 690 +(__unused_webpack_module, exports) { /* Smooth.js version 0.1.7 @@ -4081,16 +4184,17 @@ Licensed under MIT license (see "Smooth.js MIT license.txt") ( true && exports !== null ? exports : window).Smooth = Smooth; }).call(this); -/***/ }), +/***/ }, -/***/ 660: -/***/ (function(module, exports) { +/***/ 660 +(module, exports) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!function (r, t) { if (true) !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (t), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else {} + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // removed by dead control flow +{} }(this, function (r) { "use strict"; @@ -4731,23 +4835,23 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ r.encode = Q, r.decode = Y, r.traverse = K, r.fetch = $, r.fetchReduced = _, r.version = er, r.fetchUrl = or, r.fetchReducedUrl = ar, r.encodeMsgpack = o, r.encodeMmtf = R, r.decodeMsgpack = H, r.decodeMmtf = X; }); -/***/ }), +/***/ }, -/***/ 535: -/***/ ((module) => { +/***/ 535 +(module) { "use strict"; module.exports = __WEBPACK_EXTERNAL_MODULE__535__; -/***/ }), +/***/ }, -/***/ 698: -/***/ ((module) => { +/***/ 698 +(module) { "use strict"; module.exports = __WEBPACK_EXTERNAL_MODULE__698__; -/***/ }) +/***/ } /******/ }); /************************************************************************/ @@ -4807,7 +4911,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__698__; /******/ /************************************************************************/ var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be in strict mode. +// This entry needs to be wrapped in an IIFE because it needs to be in strict mode. (() => { "use strict"; @@ -4821,7 +4925,7 @@ var external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_ = _ var external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_default = /*#__PURE__*/__webpack_require__.n(external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_); // EXTERNAL MODULE: external {"module":"three","commonjs":"three","commonjs2":"three","amd":"three","root":"THREE"} var external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_ = __webpack_require__(698); -;// CONCATENATED MODULE: ../../node_modules/spin.js/spin.js +;// ../../node_modules/spin.js/spin.js var __assign = undefined && undefined.__assign || function () { __assign = Object.assign || function (t) { for (var s, i = 1, n = arguments.length; i < n; i++) { @@ -4992,7 +5096,7 @@ function convertOffset(x, y, degrees) { var cos = Math.cos(radians); return [Math.round((x * cos + y * sin) * 1000) / 1000, Math.round((-x * sin + y * cos) * 1000) / 1000]; } -;// CONCATENATED MODULE: ./src/Timer.js +;// ./src/Timer.js //---------------------------------------------------------------------------- // Timer @@ -5031,7 +5135,7 @@ Timer.now = function () { const p = typeof window !== 'undefined' && window.performance; return p && p.now ? p.now.bind(p) : Date.now; }(); -;// CONCATENATED MODULE: ./src/gfx/Stats.js +;// ./src/gfx/Stats.js const { now @@ -5084,7 +5188,7 @@ class Stats { } } /* harmony default export */ const gfx_Stats = (Stats); -;// CONCATENATED MODULE: ./src/utils/EventDispatcher.js +;// ./src/utils/EventDispatcher.js /** * This class introduces the simplest event system. */ @@ -5157,7 +5261,7 @@ EventDispatcher.prototype.dispatchEvent = function (event) { }); }; /* harmony default export */ const utils_EventDispatcher = (EventDispatcher); -;// CONCATENATED MODULE: ./src/utils/logger.js +;// ./src/utils/logger.js /** * This module contains class for logging. * Returns an instance of a logger that have already been created. @@ -5307,7 +5411,7 @@ Logger.prototype._message = function (priority, message) { }); }; /* harmony default export */ const logger = (new Logger()); -;// CONCATENATED MODULE: ./src/utils.js +;// ./src/utils.js const browserType = { @@ -5388,7 +5492,7 @@ function resolveURL(str) { return new URL(str, window.location).href; } return new URL(str).href; - } catch (error) { + } catch { // IE 11 has a URL object with no constructor available so just try a different approach instead } } @@ -5515,16 +5619,13 @@ function DebugTracer(namespace) { let indent = 0; const methods = Object.keys(namespace); function wrap(method_, name_) { - return function () { + return function (...args) { const spaces = DebugTracer.spaces.substr(0, indent * 2); if (enabled) { logger.debug(`${spaces + name_} {`); } indent++; - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - const result = method_.apply(this, args); // eslint-disable-line no-invalid-this + const result = method_.apply(this, args); indent--; if (enabled) { logger.debug(`${spaces}} // ${name_}`); @@ -5565,7 +5666,7 @@ function allocateTyped(TypedArrayName, size) { //---------------------------------------------------------------------------- // Float array conversion -function bytesToBase64( /** ArrayBuffer */buffer) { +function bytesToBase64(/** ArrayBuffer */buffer) { const bytes = new Uint8Array(buffer); let binary = ''; for (let i = 0; i < bytes.byteLength; i++) { @@ -5573,7 +5674,7 @@ function bytesToBase64( /** ArrayBuffer */buffer) { } return window.btoa(binary); } -function bytesFromBase64( /** string */str) { +function bytesFromBase64(/** string */str) { const binary = window.atob(str); const bytes = new Uint8Array(binary.length); for (let i = 0; i < bytes.length; ++i) { @@ -5581,10 +5682,10 @@ function bytesFromBase64( /** string */str) { } return bytes.buffer; } -function arrayToBase64( /** number[] */array, /** function */TypedArrayClass) { +function arrayToBase64(/** number[] */array, /** function */TypedArrayClass) { return bytesToBase64(new TypedArrayClass(array).buffer); } -function arrayFromBase64( /** string */str, /** function */TypedArrayClass) { +function arrayFromBase64(/** string */str, /** function */TypedArrayClass) { return Array.prototype.slice.call(new TypedArrayClass(bytesFromBase64(str))); } @@ -5839,7 +5940,7 @@ function mergeTypedArraysUnsafe(array) { concatTypedArraysUnsafe, mergeTypedArraysUnsafe }); -;// CONCATENATED MODULE: ./src/utils/JobHandle.js +;// ./src/utils/JobHandle.js class JobHandle extends utils_EventDispatcher { constructor() { @@ -5865,7 +5966,7 @@ class JobHandle extends utils_EventDispatcher { }); } } -;// CONCATENATED MODULE: ./src/settings.js +;// ./src/settings.js @@ -6800,7 +6901,7 @@ utils.deriveClass(Settings, utils_EventDispatcher, { } }); /* harmony default export */ const settings = (new Settings()); -;// CONCATENATED MODULE: ./src/options.js +;// ./src/options.js @@ -7228,7 +7329,7 @@ function toScript(opts) { toURL, toScript }); -;// CONCATENATED MODULE: ./src/chem/Atom.js +;// ./src/chem/Atom.js /** * Atom measurements. * @@ -7328,7 +7429,7 @@ class Atom { }; } /* harmony default export */ const chem_Atom = (Atom); -;// CONCATENATED MODULE: ./src/chem/Element.js +;// ./src/chem/Element.js class Element { constructor(number, name, fullName, weight, radius, radiusBonding, hValency) { this.number = number; @@ -7340,39 +7441,32 @@ class Element { this.hydrogenValency = hValency; } static Constants = { - /* eslint-disable no-magic-numbers */ U1: 1, Lead: 2, U2: 3, Wing: 4, U18: 18 - /* eslint-enable no-magic-numbers */ }; - static Role = (() => ({ - /* eslint-disable no-magic-numbers */ + static Role = { N: Element.Constants.U1, CA: Element.Constants.Lead, C: Element.Constants.U2, O: Element.Constants.Wing, SG: Element.Constants.U18 - /* eslint-enable no-magic-numbers */ - }))(); + }; // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py. - static ByAtomicNumber = (() => [/* eslint-disable no-magic-numbers */ - null, new Element(1, 'H', 'Hydrogen', 1.008, 1.2, 0.23, [1]), new Element(2, 'HE', 'Helium', 4.003, 1.4, 0.93, [0]), new Element(3, 'LI', 'Lithium', 6.941, 1.82, 0.68, [1]), new Element(4, 'BE', 'Beryllium', 9.012, 1.7, 0.35, [2]), new Element(5, 'B', 'Boron', 10.81, 2.08, 0.83, [3]), new Element(6, 'C', 'Carbon', 12.011, 1.95, 0.68, [4]), new Element(7, 'N', 'Nitrogen', 14.007, 1.85, 0.68, [3, 5]), new Element(8, 'O', 'Oxygen', 15.999, 1.7, 0.68, [2, 4]), new Element(9, 'F', 'Fluorine', 18.998, 1.73, 0.64, [1]), new Element(10, 'NE', 'Neon', 20.18, 1.54, 1.12, [0]), new Element(11, 'NA', 'Sodium', 22.99, 2.27, 0.97, [1]), new Element(12, 'MG', 'Magnesium', 24.305, 1.73, 1.1, [2]), new Element(13, 'AL', 'Aluminum', 26.981, 2.05, 1.35, [3]), new Element(14, 'SI', 'Silicon', 28.086, 2.1, 1.2, [4]), new Element(15, 'P', 'Phosphorus', 30.974, 2.08, 0.75, [3, 5]), new Element(16, 'S', 'Sulfur', 32.07, 2, 1.02, [2, 4, 6]), new Element(17, 'CL', 'Chlorine', 35.453, 1.97, 0.99, [1, 3, 5, 7]), new Element(18, 'AR', 'Argon', 39.948, 1.88, 1.57, [0]), new Element(19, 'K', 'Potassium', 39.1, 2.75, 1.33, [1]), new Element(20, 'CA', 'Calcium', 40.08, 1.973, 0.99, [2]), new Element(21, 'SC', 'Scandium', 44.956, 1.7, 1.44, [0]), new Element(22, 'TI', 'Titanium', 47.88, 1.7, 1.47, [0]), new Element(23, 'V', 'Vanadium', 50.941, 1.7, 1.33, [0]), new Element(24, 'CR', 'Chromium', 52, 1.7, 1.35, [0]), new Element(25, 'MN', 'Manganese', 54.938, 1.7, 1.35, [0]), new Element(26, 'FE', 'Iron', 55.847, 1.7, 1.34, [0]), new Element(27, 'CO', 'Cobalt', 58.93, 1.7, 1.33, [0]), new Element(28, 'NI', 'Nickel', 58.69, 1.63, 1.5, [0]), new Element(29, 'CU', 'Copper', 63.55, 1.4, 1.52, [0]), new Element(30, 'ZN', 'Zinc', 65.39, 1.39, 1.45, [0]), new Element(31, 'GA', 'Gallium', 69.72, 1.87, 1.22, [3]), new Element(32, 'GE', 'Germanium', 72.61, 1.7, 1.17, [4]), new Element(33, 'AS', 'Arsenic', 74.92, 1.85, 1.21, [3, 5]), new Element(34, 'SE', 'Selenium', 78.96, 1.9, 1.22, [2, 4, 6]), new Element(35, 'BR', 'Bromine', 79.9, 2.1, 1.21, [1, 3, 5, 7]), new Element(36, 'KR', 'Krypton', 83.8, 2.02, 1.91, [0]), new Element(37, 'RB', 'Rubidium', 85.47, 1.7, 1.47, [1]), new Element(38, 'SR', 'Strontium', 87.62, 1.7, 1.12, [2]), new Element(39, 'Y', 'Yttrium', 88.91, 1.7, 1.78, [0]), new Element(40, 'ZR', 'Zirconium', 91.22, 1.7, 1.56, [0]), new Element(41, 'NB', 'Niobium', 92.91, 1.7, 1.48, [0]), new Element(42, 'MO', 'Molybdenum', 95.94, 1.7, 1.47, [0]), new Element(43, 'TC', 'Technetium', 98.91, 1.7, 1.35, [0]), new Element(44, 'RU', 'Ruthenium', 101.07, 1.7, 1.4, [0]), new Element(45, 'RH', 'Rhodium', 102.91, 1.7, 1.45, [0]), new Element(46, 'PD', 'Palladium', 106.42, 1.63, 1.5, [0]), new Element(47, 'AG', 'Silver', 107.87, 1.72, 1.59, [0]), new Element(48, 'CD', 'Cadmium', 112.41, 1.58, 1.69, [0]), new Element(49, 'IN', 'Indium', 114.82, 1.93, 1.63, [3]), new Element(50, 'SN', 'Tin', 118.71, 2.17, 1.46, [2, 4]), new Element(51, 'SB', 'Antimony', 121.75, 2.2, 1.46, [3, 5]), new Element(52, 'TE', 'Tellurium', 127.6, 2.06, 1.47, [2, 4, 6]), new Element(53, 'I', 'Iodine', 126.91, 2.15, 1.4, [1, 3, 5, 7]), new Element(54, 'XE', 'Xenon', 131.29, 2.16, 1.98, [0]), new Element(55, 'CS', 'Cesium', 132.91, 1.7, 1.67, [1]), new Element(56, 'BA', 'Barium', 137.33, 1.7, 1.34, [2]), new Element(57, 'LA', 'Lanthanum', 138.91, 1.7, 1.87, [0]), new Element(58, 'CE', 'Cerium', 140.12, 1.7, 1.83, [0]), new Element(59, 'PR', 'Praseodymium', 140.91, 1.7, 1.82, [0]), new Element(60, 'ND', 'Neodymium', 144.24, 1.7, 1.81, [0]), new Element(61, 'PM', 'Promethium', 144.9, 1.7, 1.8, [0]), new Element(62, 'SM', 'Samarium', 150.36, 1.7, 1.8, [0]), new Element(63, 'EU', 'Europium', 151.96, 1.7, 1.99, [0]), new Element(64, 'GD', 'Gadolinium', 157.25, 1.7, 1.79, [0]), new Element(65, 'TB', 'Terbium', 158.93, 1.7, 1.76, [0]), new Element(66, 'DY', 'Dysprosium', 162.5, 1.7, 1.75, [0]), new Element(67, 'HO', 'Holmium', 164.93, 1.7, 1.74, [0]), new Element(68, 'ER', 'Erbium', 167.26, 1.7, 1.73, [0]), new Element(69, 'TM', 'Thulium', 168.93, 1.7, 1.72, [0]), new Element(70, 'YB', 'Ytterbium', 173.04, 1.7, 1.94, [0]), new Element(71, 'LU', 'Lutetium', 174.97, 1.7, 1.72, [0]), new Element(72, 'HF', 'Hafnium', 178.49, 1.7, 1.57, [0]), new Element(73, 'TA', 'Tantalum', 180.95, 1.7, 1.43, [0]), new Element(74, 'W', 'Tungsten', 183.85, 1.7, 1.37, [0]), new Element(75, 'RE', 'Rhenium', 186.21, 1.7, 1.35, [0]), new Element(76, 'OS', 'Osmium', 190.2, 1.7, 1.37, [0]), new Element(77, 'IR', 'Iridium', 192.22, 1.7, 1.32, [0]), new Element(78, 'PT', 'Platinum', 195.08, 1.72, 1.5, [0]), new Element(79, 'AU', 'Gold', 196.97, 1.66, 1.5, [0]), new Element(80, 'HG', 'Mercury', 200.59, 1.55, 1.7, [0]), new Element(81, 'TL', 'Thallium', 204.38, 1.96, 1.55, [1, 3]), new Element(82, 'PB', 'Lead', 207.2, 2.02, 1.54, [2, 4]), new Element(83, 'BI', 'Bismuth', 208.98, 1.7, 1.54, [3, 5]), new Element(84, 'PO', 'Polonium', 210, 1.7, 1.68, [2, 4, 6]), new Element(85, 'AT', 'Astatine', 210, 1.7, 1.7, [1, 3, 5, 7]), new Element(86, 'RN', 'Radon', 222, 1.7, 2.4, [0]), new Element(87, 'FR', 'Francium', 223, 1.7, 2, [1]), new Element(88, 'RA', 'Radium', 226.03, 1.7, 1.9, [2]), new Element(89, 'AC', 'Actinium', 227.03, 1.7, 1.88, [0]), new Element(90, 'TH', 'Thorium', 232.04, 1.7, 1.79, [0]), new Element(91, 'PA', 'Protactinium', 231.04, 1.7, 1.61, [0]), new Element(92, 'U', 'Uranium', 238.03, 1.86, 1.58, [0]), new Element(93, 'NP', 'Neptunium', 237.05, 1.7, 1.55, [0]), new Element(94, 'PU', 'Plutonium', 239.1, 1.7, 1.53, [0]), new Element(95, 'AM', 'Americium', 243.1, 1.7, 1.51, [0]), new Element(96, 'CM', 'Curium', 247.1, 1.7, 1.5, [0]), new Element(97, 'BK', 'Berkelium', 247.1, 1.7, 1.5, [0]), new Element(98, 'CF', 'Californium', 252.1, 1.7, 1.5, [0]), new Element(99, 'ES', 'Einsteinium', 252.1, 1.7, 1.5, [0]), new Element(100, 'FM', 'Fermium', 257.1, 1.7, 1.5, [0]), new Element(101, 'MD', 'Mendelevium', 256.1, 1.7, 1.5, [0]), new Element(102, 'NO', 'Nobelium', 259.1, 1.7, 1.5, [0]), new Element(103, 'LR', 'Lawrencium', 260.1, 1.7, 1.5, [0]), new Element(104, 'RF', 'Rutherfordium', 261, 1.7, 1.6, [0]), new Element(105, 'DB', 'Dubnium', 262, 1.7, 1.6, [0]), new Element(106, 'SG', 'Seaborgium', 263, 1.7, 1.6, [0]), new Element(107, 'BH', 'Bohrium', 262, 1.7, 1.6, [0]), new Element(108, 'HS', 'Hassium', 265, 1.7, 1.6, [0]), new Element(109, 'MT', 'Meitnerium', 268, 1.7, 1.6, [0]) - /* eslint-enable no-magic-numbers */])(); + static ByAtomicNumber = [null, new Element(1, 'H', 'Hydrogen', 1.008, 1.2, 0.23, [1]), new Element(2, 'HE', 'Helium', 4.003, 1.4, 0.93, [0]), new Element(3, 'LI', 'Lithium', 6.941, 1.82, 0.68, [1]), new Element(4, 'BE', 'Beryllium', 9.012, 1.7, 0.35, [2]), new Element(5, 'B', 'Boron', 10.81, 2.08, 0.83, [3]), new Element(6, 'C', 'Carbon', 12.011, 1.95, 0.68, [4]), new Element(7, 'N', 'Nitrogen', 14.007, 1.85, 0.68, [3, 5]), new Element(8, 'O', 'Oxygen', 15.999, 1.7, 0.68, [2, 4]), new Element(9, 'F', 'Fluorine', 18.998, 1.73, 0.64, [1]), new Element(10, 'NE', 'Neon', 20.18, 1.54, 1.12, [0]), new Element(11, 'NA', 'Sodium', 22.99, 2.27, 0.97, [1]), new Element(12, 'MG', 'Magnesium', 24.305, 1.73, 1.1, [2]), new Element(13, 'AL', 'Aluminum', 26.981, 2.05, 1.35, [3]), new Element(14, 'SI', 'Silicon', 28.086, 2.1, 1.2, [4]), new Element(15, 'P', 'Phosphorus', 30.974, 2.08, 0.75, [3, 5]), new Element(16, 'S', 'Sulfur', 32.07, 2, 1.02, [2, 4, 6]), new Element(17, 'CL', 'Chlorine', 35.453, 1.97, 0.99, [1, 3, 5, 7]), new Element(18, 'AR', 'Argon', 39.948, 1.88, 1.57, [0]), new Element(19, 'K', 'Potassium', 39.1, 2.75, 1.33, [1]), new Element(20, 'CA', 'Calcium', 40.08, 1.973, 0.99, [2]), new Element(21, 'SC', 'Scandium', 44.956, 1.7, 1.44, [0]), new Element(22, 'TI', 'Titanium', 47.88, 1.7, 1.47, [0]), new Element(23, 'V', 'Vanadium', 50.941, 1.7, 1.33, [0]), new Element(24, 'CR', 'Chromium', 52, 1.7, 1.35, [0]), new Element(25, 'MN', 'Manganese', 54.938, 1.7, 1.35, [0]), new Element(26, 'FE', 'Iron', 55.847, 1.7, 1.34, [0]), new Element(27, 'CO', 'Cobalt', 58.93, 1.7, 1.33, [0]), new Element(28, 'NI', 'Nickel', 58.69, 1.63, 1.5, [0]), new Element(29, 'CU', 'Copper', 63.55, 1.4, 1.52, [0]), new Element(30, 'ZN', 'Zinc', 65.39, 1.39, 1.45, [0]), new Element(31, 'GA', 'Gallium', 69.72, 1.87, 1.22, [3]), new Element(32, 'GE', 'Germanium', 72.61, 1.7, 1.17, [4]), new Element(33, 'AS', 'Arsenic', 74.92, 1.85, 1.21, [3, 5]), new Element(34, 'SE', 'Selenium', 78.96, 1.9, 1.22, [2, 4, 6]), new Element(35, 'BR', 'Bromine', 79.9, 2.1, 1.21, [1, 3, 5, 7]), new Element(36, 'KR', 'Krypton', 83.8, 2.02, 1.91, [0]), new Element(37, 'RB', 'Rubidium', 85.47, 1.7, 1.47, [1]), new Element(38, 'SR', 'Strontium', 87.62, 1.7, 1.12, [2]), new Element(39, 'Y', 'Yttrium', 88.91, 1.7, 1.78, [0]), new Element(40, 'ZR', 'Zirconium', 91.22, 1.7, 1.56, [0]), new Element(41, 'NB', 'Niobium', 92.91, 1.7, 1.48, [0]), new Element(42, 'MO', 'Molybdenum', 95.94, 1.7, 1.47, [0]), new Element(43, 'TC', 'Technetium', 98.91, 1.7, 1.35, [0]), new Element(44, 'RU', 'Ruthenium', 101.07, 1.7, 1.4, [0]), new Element(45, 'RH', 'Rhodium', 102.91, 1.7, 1.45, [0]), new Element(46, 'PD', 'Palladium', 106.42, 1.63, 1.5, [0]), new Element(47, 'AG', 'Silver', 107.87, 1.72, 1.59, [0]), new Element(48, 'CD', 'Cadmium', 112.41, 1.58, 1.69, [0]), new Element(49, 'IN', 'Indium', 114.82, 1.93, 1.63, [3]), new Element(50, 'SN', 'Tin', 118.71, 2.17, 1.46, [2, 4]), new Element(51, 'SB', 'Antimony', 121.75, 2.2, 1.46, [3, 5]), new Element(52, 'TE', 'Tellurium', 127.6, 2.06, 1.47, [2, 4, 6]), new Element(53, 'I', 'Iodine', 126.91, 2.15, 1.4, [1, 3, 5, 7]), new Element(54, 'XE', 'Xenon', 131.29, 2.16, 1.98, [0]), new Element(55, 'CS', 'Cesium', 132.91, 1.7, 1.67, [1]), new Element(56, 'BA', 'Barium', 137.33, 1.7, 1.34, [2]), new Element(57, 'LA', 'Lanthanum', 138.91, 1.7, 1.87, [0]), new Element(58, 'CE', 'Cerium', 140.12, 1.7, 1.83, [0]), new Element(59, 'PR', 'Praseodymium', 140.91, 1.7, 1.82, [0]), new Element(60, 'ND', 'Neodymium', 144.24, 1.7, 1.81, [0]), new Element(61, 'PM', 'Promethium', 144.9, 1.7, 1.8, [0]), new Element(62, 'SM', 'Samarium', 150.36, 1.7, 1.8, [0]), new Element(63, 'EU', 'Europium', 151.96, 1.7, 1.99, [0]), new Element(64, 'GD', 'Gadolinium', 157.25, 1.7, 1.79, [0]), new Element(65, 'TB', 'Terbium', 158.93, 1.7, 1.76, [0]), new Element(66, 'DY', 'Dysprosium', 162.5, 1.7, 1.75, [0]), new Element(67, 'HO', 'Holmium', 164.93, 1.7, 1.74, [0]), new Element(68, 'ER', 'Erbium', 167.26, 1.7, 1.73, [0]), new Element(69, 'TM', 'Thulium', 168.93, 1.7, 1.72, [0]), new Element(70, 'YB', 'Ytterbium', 173.04, 1.7, 1.94, [0]), new Element(71, 'LU', 'Lutetium', 174.97, 1.7, 1.72, [0]), new Element(72, 'HF', 'Hafnium', 178.49, 1.7, 1.57, [0]), new Element(73, 'TA', 'Tantalum', 180.95, 1.7, 1.43, [0]), new Element(74, 'W', 'Tungsten', 183.85, 1.7, 1.37, [0]), new Element(75, 'RE', 'Rhenium', 186.21, 1.7, 1.35, [0]), new Element(76, 'OS', 'Osmium', 190.2, 1.7, 1.37, [0]), new Element(77, 'IR', 'Iridium', 192.22, 1.7, 1.32, [0]), new Element(78, 'PT', 'Platinum', 195.08, 1.72, 1.5, [0]), new Element(79, 'AU', 'Gold', 196.97, 1.66, 1.5, [0]), new Element(80, 'HG', 'Mercury', 200.59, 1.55, 1.7, [0]), new Element(81, 'TL', 'Thallium', 204.38, 1.96, 1.55, [1, 3]), new Element(82, 'PB', 'Lead', 207.2, 2.02, 1.54, [2, 4]), new Element(83, 'BI', 'Bismuth', 208.98, 1.7, 1.54, [3, 5]), new Element(84, 'PO', 'Polonium', 210, 1.7, 1.68, [2, 4, 6]), new Element(85, 'AT', 'Astatine', 210, 1.7, 1.7, [1, 3, 5, 7]), new Element(86, 'RN', 'Radon', 222, 1.7, 2.4, [0]), new Element(87, 'FR', 'Francium', 223, 1.7, 2, [1]), new Element(88, 'RA', 'Radium', 226.03, 1.7, 1.9, [2]), new Element(89, 'AC', 'Actinium', 227.03, 1.7, 1.88, [0]), new Element(90, 'TH', 'Thorium', 232.04, 1.7, 1.79, [0]), new Element(91, 'PA', 'Protactinium', 231.04, 1.7, 1.61, [0]), new Element(92, 'U', 'Uranium', 238.03, 1.86, 1.58, [0]), new Element(93, 'NP', 'Neptunium', 237.05, 1.7, 1.55, [0]), new Element(94, 'PU', 'Plutonium', 239.1, 1.7, 1.53, [0]), new Element(95, 'AM', 'Americium', 243.1, 1.7, 1.51, [0]), new Element(96, 'CM', 'Curium', 247.1, 1.7, 1.5, [0]), new Element(97, 'BK', 'Berkelium', 247.1, 1.7, 1.5, [0]), new Element(98, 'CF', 'Californium', 252.1, 1.7, 1.5, [0]), new Element(99, 'ES', 'Einsteinium', 252.1, 1.7, 1.5, [0]), new Element(100, 'FM', 'Fermium', 257.1, 1.7, 1.5, [0]), new Element(101, 'MD', 'Mendelevium', 256.1, 1.7, 1.5, [0]), new Element(102, 'NO', 'Nobelium', 259.1, 1.7, 1.5, [0]), new Element(103, 'LR', 'Lawrencium', 260.1, 1.7, 1.5, [0]), new Element(104, 'RF', 'Rutherfordium', 261, 1.7, 1.6, [0]), new Element(105, 'DB', 'Dubnium', 262, 1.7, 1.6, [0]), new Element(106, 'SG', 'Seaborgium', 263, 1.7, 1.6, [0]), new Element(107, 'BH', 'Bohrium', 262, 1.7, 1.6, [0]), new Element(108, 'HS', 'Hassium', 265, 1.7, 1.6, [0]), new Element(109, 'MT', 'Meitnerium', 268, 1.7, 1.6, [0])]; // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py. - static ByName = (() => ({ + static ByName = { // Duplicate atomic numbers (isotopes) - /* eslint-disable no-magic-numbers */ + D: new Element(1, 'D', 'Deuterium', 2.014, 1.2, 0.23, [1]), T: new Element(1, 'T', 'Tritium', 3.016, 1.2, 0.23, [1]) - /* eslint-enable no-magic-numbers */ // All regular elements will be added later, automatically - }))(); + }; } (function () { const byAtomicNumber = Element.ByAtomicNumber; @@ -7394,7 +7488,7 @@ Element.getByName = function (element) { return type; }; /* harmony default export */ const chem_Element = (Element); -;// CONCATENATED MODULE: ./src/chem/Bond.js +;// ./src/chem/Bond.js const cBondTypes = { /** Was generated manually */ UNKNOWN: 0, @@ -7569,11 +7663,11 @@ class Bond { firstV.normalize(); return this._fixDir(secondPos, firstV, posGetter); } - static BondType = (() => cBondTypes)(); + static BondType = cBondTypes; } Bond.prototype.BondType = cBondTypes; /* harmony default export */ const chem_Bond = (Bond); -;// CONCATENATED MODULE: ./src/chem/Residue.js +;// ./src/chem/Residue.js @@ -7844,7 +7938,7 @@ class Residue { } } /* harmony default export */ const chem_Residue = (Residue); -;// CONCATENATED MODULE: ./src/chem/ResidueType.js +;// ./src/chem/ResidueType.js /** * Residue type. * @@ -7869,8 +7963,7 @@ class ResidueType { } // DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py. - static StandardTypes = (() => ({ - /* eslint-disable no-magic-numbers */ + static StandardTypes = { ALA: new ResidueType('ALA', 'Alanine', 'A'), ARG: new ResidueType('ARG', 'Arginine', 'R'), ASN: new ResidueType('ASN', 'Asparagine', 'N'), @@ -7917,8 +8010,7 @@ class ResidueType { DOD: new ResidueType('DOD', 'Water', ''), UNK: new ResidueType('UNK', 'Unknown', ''), UNL: new ResidueType('UNL', 'Unknown Ligand', '') - /* eslint-enable no-magic-numbers */ - }))(); + }; /** * Enumeration of residue flag values. @@ -8014,7 +8106,7 @@ function _addParam(param, list) { } _addParam('hydrophobicity', hydro); /* harmony default export */ const chem_ResidueType = (ResidueType); -;// CONCATENATED MODULE: ./src/chem/Chain.js +;// ./src/chem/Chain.js @@ -8183,7 +8275,7 @@ class Chain { } } /* harmony default export */ const chem_Chain = (Chain); -;// CONCATENATED MODULE: ./src/chem/StructuralElement.js +;// ./src/chem/StructuralElement.js /** An element of protein secondary structure. */ @@ -8315,7 +8407,7 @@ StructuralElement.genericByType = { [StructuralElementType.HELIX]: StructuralElementGeneric.HELIX }; /* harmony default export */ const chem_StructuralElement = (StructuralElement); -;// CONCATENATED MODULE: ./src/chem/Helix.js +;// ./src/chem/Helix.js const Helix_StructuralElementType = chem_StructuralElement.Type; const typeByPDBHelixClass = { @@ -8367,7 +8459,7 @@ class Helix extends chem_StructuralElement { } } /* harmony default export */ const chem_Helix = (Helix); -;// CONCATENATED MODULE: ./src/chem/Strand.js +;// ./src/chem/Strand.js /** @@ -8441,7 +8533,7 @@ class Strand extends chem_StructuralElement { } } /* harmony default export */ const chem_Strand = (Strand); -;// CONCATENATED MODULE: ./src/chem/Sheet.js +;// ./src/chem/Sheet.js /** @@ -8488,7 +8580,7 @@ class Sheet { } } /* harmony default export */ const chem_Sheet = (Sheet); -;// CONCATENATED MODULE: ./src/chem/SGroup.js +;// ./src/chem/SGroup.js /** @@ -8547,7 +8639,7 @@ class SGroup { /* harmony default export */ const chem_SGroup = (SGroup); // EXTERNAL MODULE: ./src/utils/SelectionParser.js var SelectionParser = __webpack_require__(99); -;// CONCATENATED MODULE: ./src/chem/selectors/selectArgs.js +;// ./src/chem/selectors/selectArgs.js //---------------------------------------------------------------------------- @@ -8678,7 +8770,7 @@ class ValueList extends List { } } -;// CONCATENATED MODULE: ./src/chem/selectors/selectorsBase.js +;// ./src/chem/selectors/selectorsBase.js /** Base class for atom selectors. */ @@ -8731,7 +8823,7 @@ class AllSelector extends Selector { AllSelector.prototype.name = 'All'; AllSelector.prototype.keyword = 'all'; -;// CONCATENATED MODULE: ./src/chem/selectors/selectOps.js +;// ./src/chem/selectors/selectOps.js //---------------------------------------------------------------------------- @@ -8769,7 +8861,7 @@ class InfixOperator extends Selector { } InfixOperator.prototype.priority = 1000; -;// CONCATENATED MODULE: ./src/chem/selectors.js +;// ./src/chem/selectors.js @@ -8786,12 +8878,7 @@ function defineSelector(name, SelectorClass) { const keyword = name.toLowerCase(); SelectorClass.prototype.keyword = keyword; SelectorClass.prototype.name = name; - const factory = function () { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - return new SelectorClass(...args); - }; + const factory = (...args) => new SelectorClass(...args); factory.SelectorClass = SelectorClass; keywords[keyword] = factory; return SelectorClass; @@ -8955,7 +9042,7 @@ SelectionParser.parser.yy = selectors; SelectionParser.parser.yy.parseError = SelectionParser.parser.parseError; // workaround for incorrect JISON parser generator for AMD module /* harmony default export */ const chem_selectors = (selectors); -;// CONCATENATED MODULE: ./src/chem/BiologicalUnit.js +;// ./src/chem/BiologicalUnit.js @@ -9028,7 +9115,7 @@ class BiologicalUnit { finalize() {} } /* harmony default export */ const chem_BiologicalUnit = (BiologicalUnit); -;// CONCATENATED MODULE: ./src/chem/Assembly.js +;// ./src/chem/Assembly.js @@ -9094,7 +9181,7 @@ class Assembly extends chem_BiologicalUnit { } } /* harmony default export */ const chem_Assembly = (Assembly); -;// CONCATENATED MODULE: ./src/chem/Component.js +;// ./src/chem/Component.js /** * This class represents connected component as a part of a complex. * WARNING! The whole component entity is build under the assumption that residues @@ -9244,7 +9331,7 @@ class Component { } } /* harmony default export */ const chem_Component = (Component); -;// CONCATENATED MODULE: ./src/chem/AtomPairs.js +;// ./src/chem/AtomPairs.js const cMaxPairsForHashCode = 32; const cHashTableSize = 1024 * 1024; @@ -9315,7 +9402,7 @@ class AtomPairs { } } /* harmony default export */ const chem_AtomPairs = (AtomPairs); -;// CONCATENATED MODULE: ./src/chem/AutoBond.js +;// ./src/chem/AutoBond.js const cProfileBondBuilder = false; @@ -9497,7 +9584,7 @@ class AutoBond { } } /* harmony default export */ const chem_AutoBond = (AutoBond); -;// CONCATENATED MODULE: ./src/chem/AromaticLoopsMarker.js +;// ./src/chem/AromaticLoopsMarker.js @@ -9729,7 +9816,7 @@ class AromaticLoopsMarker { } } /* harmony default export */ const chem_AromaticLoopsMarker = (AromaticLoopsMarker); -;// CONCATENATED MODULE: ./src/chem/VoxelWorld.js +;// ./src/chem/VoxelWorld.js @@ -9843,8 +9930,8 @@ class VoxelWorld { * @param {Vector3} point - a point in 3D * @returns {number} - index of voxel */ - static _zero = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(0, 0, 0))(); - static _voxel = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3())(); + static _zero = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(0, 0, 0); + static _voxel = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(); _findVoxel(point) { const zero = VoxelWorld._zero; const voxel = VoxelWorld._voxel; @@ -9873,9 +9960,9 @@ class VoxelWorld { * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside */ - static _xRange = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector2())(); - static _yRange = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector2())(); - static _zRange = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector2())(); + static _xRange = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector2(); + static _yRange = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector2(); + static _zRange = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector2(); _forEachVoxelWithinRadius(center, radius, process) { const xRange = VoxelWorld._xRange; const yRange = VoxelWorld._yRange; @@ -9931,7 +10018,7 @@ class VoxelWorld { * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside */ - static _vCenter = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3())(); + static _vCenter = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(); _forEachVoxelWithinRadiusSimple(center, radius, process) { const xRange = VoxelWorld._xRange; const yRange = VoxelWorld._yRange; @@ -10100,7 +10187,7 @@ class VoxelWorld { } } /* harmony default export */ const chem_VoxelWorld = (VoxelWorld); -;// CONCATENATED MODULE: ./src/chem/HBondInfo.js +;// ./src/chem/HBondInfo.js const MINIMAL_DISTANCE = 0.5; @@ -10334,7 +10421,7 @@ class HBondInfo { return result; } } -;// CONCATENATED MODULE: ./src/chem/SecondaryStructureMap.js +;// ./src/chem/SecondaryStructureMap.js const BridgeType = Object.freeze({ @@ -10761,7 +10848,7 @@ class SecondaryStructureMap { } } SecondaryStructureMap.StructureType = StructureType; -;// CONCATENATED MODULE: ./src/chem/Complex.js +;// ./src/chem/Complex.js @@ -11004,17 +11091,13 @@ class Complex { return this._residueTypes[name] || null; } getUnifiedSerial(chain, serial, iCode) { - /* eslint-disable no-magic-numbers */ const maxSerial = 65536; const chainShift = maxSerial * 256; - /* eslint-enable no-magic-numbers */ return serial + iCode * maxSerial + chain * chainShift; } splitUnifiedSerial(uniSerial) { - /* eslint-disable no-magic-numbers */ const maxSerial = 65536; const chainShift = maxSerial * 256; - /* eslint-enable no-magic-numbers */ const chainId = Math.floor(uniSerial / chainShift); const remnant = uniSerial - chainId * chainShift; const insCode = Math.floor(remnant / maxSerial); @@ -11414,7 +11497,7 @@ class Complex { try { this._voxelWorld = new chem_VoxelWorld(this.getDefaultBoundaries().boundingBox, new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(VOXEL_SIZE, VOXEL_SIZE, VOXEL_SIZE)); this._voxelWorld.addAtoms(this); - } catch (e) { + } catch { logger.warn('Unable to create voxel world'); this._voxelWorld = null; } @@ -11578,7 +11661,7 @@ class Complex { Complex.prototype.id = 'Complex'; Complex.prototype.name = ''; /* harmony default export */ const chem_Complex = (Complex); -;// CONCATENATED MODULE: ./src/chem/Volume.js +;// ./src/chem/Volume.js function pow2ceil(v) { @@ -11829,7 +11912,7 @@ class Volume { } } } - const texture = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.DataTexture(data, width, height, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LuminanceFormat, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.UnsignedByteType, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.UVMapping, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.ClampToEdgeWrapping, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.ClampToEdgeWrapping, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter); + const texture = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.DataTexture(data, width, height, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.RedFormat, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.UnsignedByteType, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.UVMapping, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.ClampToEdgeWrapping, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.ClampToEdgeWrapping, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter); texture.needsUpdate = true; return texture; } @@ -11858,7 +11941,7 @@ class Volume { } Volume.prototype.id = 'Volume'; /* harmony default export */ const chem_Volume = (Volume); -;// CONCATENATED MODULE: ./src/chem/Molecule.js +;// ./src/chem/Molecule.js /** * Residue Molecule. * @@ -11897,7 +11980,7 @@ class Molecule { } } /* harmony default export */ const chem_Molecule = (Molecule); -;// CONCATENATED MODULE: ./src/chem.js +;// ./src/chem.js @@ -11932,7 +12015,7 @@ class Molecule { selectors: chem_selectors, Molecule: chem_Molecule }); -;// CONCATENATED MODULE: ./src/gfx/CSS2DObject.js +;// ./src/gfx/CSS2DObject.js /** * @author mrdoob / http://mrdoob.com/ */ @@ -11982,7 +12065,7 @@ class CSS2DObject extends external_module_three_commonjs_three_commonjs2_three_a } } /* harmony default export */ const gfx_CSS2DObject = (CSS2DObject); -;// CONCATENATED MODULE: ./src/gfx/RCGroup.js +;// ./src/gfx/RCGroup.js class RCGroup extends external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Group { raycast(raycaster, intersects) { @@ -12043,14 +12126,13 @@ class RCGroup extends external_module_three_commonjs_three_commonjs2_three_amd_t } } /* harmony default export */ const gfx_RCGroup = (RCGroup); -;// CONCATENATED MODULE: ./src/gfx/shaders/ScreenQuad.vert -const ScreenQuad_namespaceObject = "uniform mat4 projectionMatrix;\r\nuniform mat4 modelViewMatrix;\r\n\r\nattribute vec2 uv;\r\nattribute vec3 position;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n vUv = uv;\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/ScreenQuadFromTex.frag -const ScreenQuadFromTex_namespaceObject = "precision highp float;\r\n\r\nvarying vec2 vUv;\r\nuniform sampler2D srcTex;\r\nuniform float opacity;\r\n\r\nvoid main() {\r\n vec4 color = texture2D(srcTex, vUv);\r\n gl_FragColor = vec4(color.xyz, color.a * opacity);\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/ScreenQuadFromTexWithDistortion.frag -const ScreenQuadFromTexWithDistortion_namespaceObject = "precision highp float;\r\n\r\nvarying vec2 vUv;\r\nuniform sampler2D srcTex;\r\nuniform float coef;\r\n\r\nvoid main() {\r\n vec2 uv = vUv * 2.0 - 1.0;\r\n float r2 = dot(uv, uv);\r\n vec2 tc = uv * (1.0 + coef * r2);\r\n if (!all(lessThan(abs(tc), vec2(1.0))))\r\n discard;\r\n tc = 0.5 * (tc + 1.0);\r\n gl_FragColor = texture2D(srcTex, tc);\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/gfxutils.js -/* eslint-disable no-magic-numbers */ +;// ./src/gfx/shaders/ScreenQuad.vert +const ScreenQuad_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nuniform mat4 projectionMatrix;\r\nuniform mat4 modelViewMatrix;\r\n\r\nattribute vec2 uv;\r\nattribute vec3 position;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n vUv = uv;\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\r\n}\r\n"; +;// ./src/gfx/shaders/ScreenQuadFromTex.frag +const ScreenQuadFromTex_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\nvarying vec2 vUv;\r\nuniform sampler2D srcTex;\r\nuniform float opacity;\r\n\r\nvoid main() {\r\n vec4 color = texture2D(srcTex, vUv);\r\n gl_FragColor = vec4(color.xyz, color.a * opacity);\r\n}\r\n"; +;// ./src/gfx/shaders/ScreenQuadFromTexWithDistortion.frag +const ScreenQuadFromTexWithDistortion_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\nvarying vec2 vUv;\r\nuniform sampler2D srcTex;\r\nuniform float coef;\r\n\r\nvoid main() {\r\n vec2 uv = vUv * 2.0 - 1.0;\r\n float r2 = dot(uv, uv);\r\n vec2 tc = uv * (1.0 + coef * r2);\r\n if (!all(lessThan(abs(tc), vec2(1.0))))\r\n discard;\r\n tc = 0.5 * (tc + 1.0);\r\n gl_FragColor = texture2D(srcTex, tc);\r\n}\r\n"; +;// ./src/gfx/gfxutils.js @@ -12470,7 +12552,7 @@ external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Insta getMiddlePoint, LAYERS }); -;// CONCATENATED MODULE: ./src/Visual.js +;// ./src/Visual.js const _defaultBoundaries = { @@ -12496,7 +12578,7 @@ class Visual extends gfxutils.RCGroup { } } /* harmony default export */ const src_Visual = (Visual); -;// CONCATENATED MODULE: ./src/utils/EntityList.js +;// ./src/utils/EntityList.js function _ensureArray(x) { if (x === null || x === undefined || Array.isArray(x)) { return x; @@ -12515,9 +12597,7 @@ class EntityList { * By default, a single `.id` property is used. * @see EntityList#register */ - constructor() { - let entities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - let indices = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ['id']; + constructor(entities = [], indices = ['id']) { this._list = []; this._dict = {}; this._indices = [...indices]; @@ -12684,7 +12764,7 @@ class EntityList { } } /* harmony default export */ const utils_EntityList = (EntityList); -;// CONCATENATED MODULE: ./src/utils/makeContextDependent.js +;// ./src/utils/makeContextDependent.js function makeContextDependent(prototype) { @@ -12702,14 +12782,14 @@ function makeContextDependent(prototype) { }); } /* harmony default export */ const utils_makeContextDependent = (makeContextDependent); -;// CONCATENATED MODULE: ./src/gfx/geometries/SphereCollisionGeo.js +;// ./src/gfx/geometries/SphereCollisionGeo.js class CollisionSphere { constructor(position, radius) { this._position = position; this._radius = radius; } - static _sphere = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Sphere())(); + static _sphere = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Sphere(); raycast(raycaster) { const sphere = CollisionSphere._sphere; sphere.set(this._position, this._radius); @@ -12724,10 +12804,7 @@ class CollisionSphere { } } const SphereCollisionGeo = base => class extends base { - constructor(count) { - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } + constructor(count, ...args) { super(...args); this._objects = new Array(count); this.boundingSphere = null; @@ -12783,7 +12860,7 @@ const SphereCollisionGeo = base => class extends base { } }; /* harmony default export */ const geometries_SphereCollisionGeo = (SphereCollisionGeo); -;// CONCATENATED MODULE: ./src/gfx/geometries/InstancedSpheresGeometry.js +;// ./src/gfx/geometries/InstancedSpheresGeometry.js @@ -12808,7 +12885,7 @@ function setArrayXYZW(arr, idx, x, y, z, w) { class InstancedSpheresGeometry extends geometries_SphereCollisionGeo(external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.InstancedBufferGeometry) { constructor(spheresCount, sphereComplexity, useZSprites) { super(spheresCount); - this._sphGeometry = useZSprites ? new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.PlaneGeometry(2, 2, 1, 1) : new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.SphereBufferGeometry(1, sphereComplexity * 2, sphereComplexity, 0, Math.PI * 2, 0, Math.PI); + this._sphGeometry = useZSprites ? new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.PlaneGeometry(2, 2, 1, 1) : new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.SphereGeometry(1, sphereComplexity * 2, sphereComplexity, 0, Math.PI * 2, 0, Math.PI); this._init(spheresCount, this._sphGeometry); } setItem(itemIdx, itemPos, itemRad) { @@ -12859,7 +12936,7 @@ class InstancedSpheresGeometry extends geometries_SphereCollisionGeo(external_mo } } /* harmony default export */ const geometries_InstancedSpheresGeometry = (InstancedSpheresGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/ChunkedObjectsGeometry.js +;// ./src/gfx/geometries/ChunkedObjectsGeometry.js @@ -12983,7 +13060,7 @@ class ChunkedObjectsGeometry extends external_module_three_commonjs_three_common } } /* harmony default export */ const geometries_ChunkedObjectsGeometry = (ChunkedObjectsGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/SimpleSpheresGeometry.js +;// ./src/gfx/geometries/SimpleSpheresGeometry.js @@ -12991,7 +13068,7 @@ class ChunkedObjectsGeometry extends external_module_three_commonjs_three_common const SimpleSpheresGeometry_VEC_SIZE = 3; class SimpleSpheresGeometry extends geometries_SphereCollisionGeo(geometries_ChunkedObjectsGeometry) { constructor(spheresCount, sphereComplexity) { - const sphGeometry = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.SphereBufferGeometry(1, sphereComplexity * 2, sphereComplexity, 0, Math.PI * 2, 0, Math.PI); + const sphGeometry = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.SphereGeometry(1, sphereComplexity * 2, sphereComplexity, 0, Math.PI * 2, 0, Math.PI); super(spheresCount, sphGeometry, spheresCount); const normals = this._normals; const geoNormals = sphGeometry.attributes.normal.array; @@ -13017,7 +13094,7 @@ class SimpleSpheresGeometry extends geometries_SphereCollisionGeo(geometries_Chu } } /* harmony default export */ const geometries_SimpleSpheresGeometry = (SimpleSpheresGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/Simple2CCylindersGeometry.js +;// ./src/gfx/geometries/Simple2CCylindersGeometry.js @@ -13080,7 +13157,7 @@ class Simple2CCylindersGeometry extends geometries_ChunkedObjectsGeometry { } } /* harmony default export */ const geometries_Simple2CCylindersGeometry = (Simple2CCylindersGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/CylinderBufferGeometry.js +;// ./src/gfx/geometries/CylinderBufferGeometry.js const MAX_POINTS_COUNT_16BIT = 65536; @@ -13104,13 +13181,9 @@ class CylinderBufferGeometry extends external_module_three_commonjs_three_common const vertexCount = (heightSegments + 1) * radialSegments + hasTop * (radialSegments + 1) + hasBottom * (radialSegments + 1); const facesCount = (2 * heightSegments + hasTop + hasBottom) * radialSegments; const heightHalf = height / 2; - - /* eslint-disable no-magic-numbers */ const positions = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3); const normals = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3); const indices = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Uint16BufferAttribute(utils.allocateTyped(Uint16Array, facesCount * PTS_PER_TRIANGLE), 1); - /* eslint-enable no-magic-numbers */ - const uvs = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 2), 2); console.assert(vertexCount < MAX_POINTS_COUNT_16BIT, 'DEBUG: Cylinder Geometry has too many vertices (65536 max).'); let currVtxIdx = 0; @@ -13200,7 +13273,7 @@ class CylinderBufferGeometry extends external_module_three_commonjs_three_common } } /* harmony default export */ const geometries_CylinderBufferGeometry = (CylinderBufferGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/Instanced2CCylindersGeometry.js +;// ./src/gfx/geometries/Instanced2CCylindersGeometry.js @@ -13387,7 +13460,7 @@ class Instanced2CCylindersGeometry extends external_module_three_commonjs_three_ } } /* harmony default export */ const geometries_Instanced2CCylindersGeometry = (Instanced2CCylindersGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/ExtrudedObjectsGeometry.js +;// ./src/gfx/geometries/ExtrudedObjectsGeometry.js @@ -13440,9 +13513,7 @@ class ExtrudedObjectsGeometry extends geometries_ChunkedObjectsGeometry { tmpShape[i] = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(); } } - setItem(itemIdx, matrices) { - let hasSlope = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - let hasCut = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + setItem(itemIdx, matrices, hasSlope = false, hasCut = false) { const ptsCount = this._chunkGeo._positions.length; const ringsCount = this._ringsCount; const chunkStartIdx = ptsCount * this._ringsCount * itemIdx * ExtrudedObjectsGeometry_VEC_SIZE; @@ -13560,7 +13631,7 @@ class ExtrudedObjectsGeometry extends geometries_ChunkedObjectsGeometry { } } /* harmony default export */ const geometries_ExtrudedObjectsGeometry = (ExtrudedObjectsGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/ThickLinesGeometry.js +;// ./src/gfx/geometries/ThickLinesGeometry.js @@ -13708,7 +13779,7 @@ class ThickLinesGeometry extends external_module_three_commonjs_three_commonjs2_ } } /* harmony default export */ const geometries_ThickLinesGeometry = (ThickLinesGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/LinesGeometry.js +;// ./src/gfx/geometries/LinesGeometry.js @@ -13765,7 +13836,7 @@ class LinesGeometry extends geometries_ThickLinesGeometry { } } /* harmony default export */ const geometries_LinesGeometry = (LinesGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/CylinderCollisionGeo.js +;// ./src/gfx/geometries/CylinderCollisionGeo.js @@ -13808,7 +13879,7 @@ class CylinderCollisionGeo extends geometries_ChunkedObjectsGeometry { } } /* harmony default export */ const geometries_CylinderCollisionGeo = (CylinderCollisionGeo); -;// CONCATENATED MODULE: ./src/gfx/geometries/ChunkedLinesGeometry.js +;// ./src/gfx/geometries/ChunkedLinesGeometry.js const COLLISION_RAD = 0.1; @@ -13914,7 +13985,7 @@ class ChunkedLinesGeometry extends geometries_LinesGeometry { } } /* harmony default export */ const geometries_ChunkedLinesGeometry = (ChunkedLinesGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/TwoColorLinesGeometry.js +;// ./src/gfx/geometries/TwoColorLinesGeometry.js @@ -13962,7 +14033,7 @@ class TwoColorLinesGeometry extends geometries_LinesGeometry { // (???)parent = LinesGeometry.prototype; /* harmony default export */ const geometries_TwoColorLinesGeometry = (TwoColorLinesGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/CrossGeometry.js +;// ./src/gfx/geometries/CrossGeometry.js @@ -13990,7 +14061,7 @@ class CrossGeometry extends geometries_SphereCollisionGeo(geometries_ChunkedLine } } /* harmony default export */ const geometries_CrossGeometry = (CrossGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/IsoSurfaceGeometry.js +;// ./src/gfx/geometries/IsoSurfaceGeometry.js const POS_RAD_SIZE = 4; @@ -14043,7 +14114,7 @@ class IsoSurfaceGeometry extends external_module_three_commonjs_three_commonjs2_ } } /* harmony default export */ const geometries_IsoSurfaceGeometry = (IsoSurfaceGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/IsoSurfaceMarchCube.js +;// ./src/gfx/geometries/IsoSurfaceMarchCube.js /** @@ -14076,13 +14147,9 @@ class IsoSurfaceMarchCube { this.pointsValuesLinear = null; } } - -/* eslint-disable no-magic-numbers */ IsoSurfaceMarchCube.prototype.striIndicesMarchCube = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1, 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1, 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1, 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1, 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1, 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1, 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1, 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1, 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1, 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1, 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1, 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1, 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1, 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1, 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1, 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1, 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1, 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1, 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1, 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1, 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1, 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1, 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1, 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1, 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1, 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1, 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1, 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1, 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1, 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1, 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1, 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1, 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1, 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1, 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1, 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1, 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1, 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1, 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1, 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1, 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1, 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1, 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1, 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1, 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1, 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1, 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1, 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1, 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1, 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1, 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1, 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1, 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1, 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1, 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1, 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1, 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1, 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1, 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1, 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1, 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1, 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1, 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1, 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1, 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1, 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1, 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1, 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1, 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1, 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1, 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1, 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1, 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1, 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1, 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1, 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1, 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1, 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1, 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1, 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1, 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1, 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1, 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1, 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1, 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1, 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1, 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1, 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1, 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1, 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1, 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1, 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1, 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1, 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1, 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1, 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1, 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1, 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1, 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1, 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1, 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1, 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1, 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1, 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1, 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1, 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1, 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1, 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1, 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1, 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1, 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1, 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1, 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1, 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1, 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1, 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1, 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1, 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1, 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1, 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1, 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1, 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1, 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1, 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1, 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1, 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1, 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1, 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1, 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1, 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1, 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1, 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1, 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1, 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1, 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1, 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1, 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1, 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1, 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1, 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1, 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1, 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1, 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1, 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1, 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1, 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1, 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1, 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1, 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1, 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1, 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1, 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1, 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; -/* eslint-enable no-magic-numbers */ - /* harmony default export */ const geometries_IsoSurfaceMarchCube = (IsoSurfaceMarchCube); -;// CONCATENATED MODULE: ./src/gfx/geometries/IsoSurface.js +;// ./src/gfx/geometries/IsoSurface.js @@ -14200,12 +14267,12 @@ class IsoSurface { vertex.lerpVectors(p1, p2, mu); normal.lerpVectors(n1, n2, mu); } - static _triTable = (() => geometries_IsoSurfaceMarchCube.prototype.striIndicesMarchCube)(); + static _triTable = geometries_IsoSurfaceMarchCube.prototype.striIndicesMarchCube; static _arrSize = 12; static _firstIndices = [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3]; static _secondIndices = [1, 2, 3, 0, 5, 6, 7, 4, 4, 5, 6, 7]; - static _vertexList = (() => createArray(IsoSurface._arrSize))(); - static _normalList = (() => createArray(IsoSurface._arrSize))(); + static _vertexList = createArray(IsoSurface._arrSize); + static _normalList = createArray(IsoSurface._arrSize); _polygonize(grid, isoLevel, triangles) { const { cubeIndex @@ -14302,8 +14369,6 @@ class IsoSurface { for (let y = 0; y < ySize - step; y += step) { let idx = vol.getDirectIdx(0, y, z); for (let x = 0; x < xSize - step; x += step, idx += stepX) { - /* eslint-disable no-multi-spaces */ - /* eslint-disable computed-property-spacing */ gcVal[0] = volData[idx]; gcVal[1] = volData[idx + stepX]; gcVal[3] = volData[idx + stepY]; @@ -14312,8 +14377,6 @@ class IsoSurface { gcVal[5] = volData[idx + stepX + stepZ]; gcVal[7] = volData[idx + stepY + stepZ]; gcVal[6] = volData[idx + stepX + stepY + stepZ]; - /* eslint-enable no-multi-spaces */ - /* eslint-enable computed-property-spacing */ // Determine the index into the edge table which // tells us which vertices are inside of the surface @@ -14594,7 +14657,7 @@ class IsoSurface { } } /* harmony default export */ const geometries_IsoSurface = (IsoSurface); -;// CONCATENATED MODULE: ./src/gfx/geometries/VolumeSurfaceGeometry.js +;// ./src/gfx/geometries/VolumeSurfaceGeometry.js @@ -14701,7 +14764,7 @@ class VolumeSurfaceGeometry extends geometries_IsoSurfaceGeometry { } } /* harmony default export */ const geometries_VolumeSurfaceGeometry = (VolumeSurfaceGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/QuickSurfGeometry.js +;// ./src/gfx/geometries/QuickSurfGeometry.js const { @@ -14834,7 +14897,7 @@ class QuickSurfGeometry extends geometries_VolumeSurfaceGeometry { } } /* harmony default export */ const geometries_QuickSurfGeometry = (QuickSurfGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/ContactSurface.js +;// ./src/gfx/geometries/ContactSurface.js @@ -15377,7 +15440,7 @@ function ContactSurface(packedArrays, boundaries, params, _indexList) { }; } /* harmony default export */ const geometries_ContactSurface = (ContactSurface); -;// CONCATENATED MODULE: ./src/gfx/geometries/ContactSurfaceGeometry.js +;// ./src/gfx/geometries/ContactSurfaceGeometry.js @@ -15406,7 +15469,7 @@ class ContactSurfaceGeometry extends geometries_VolumeSurfaceGeometry { } } /* harmony default export */ const geometries_ContactSurfaceGeometry = (ContactSurfaceGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/IsoSurfaceAtomColored.js +;// ./src/gfx/geometries/IsoSurfaceAtomColored.js /** @@ -15428,7 +15491,7 @@ class IsoSurfaceAtomColored { } } /* harmony default export */ const geometries_IsoSurfaceAtomColored = (IsoSurfaceAtomColored); -;// CONCATENATED MODULE: ./src/gfx/geometries/IsosurfaceBuildNormals.js +;// ./src/gfx/geometries/IsosurfaceBuildNormals.js @@ -15765,7 +15828,7 @@ class IsosurfaceBuildNormals { } } /* harmony default export */ const geometries_IsosurfaceBuildNormals = (IsosurfaceBuildNormals); -;// CONCATENATED MODULE: ./src/gfx/geometries/IsoSurfaceGeo.js +;// ./src/gfx/geometries/IsoSurfaceGeo.js /** @@ -15810,7 +15873,7 @@ class IsoSurfaceGeo { } } /* harmony default export */ const geometries_IsoSurfaceGeo = (IsoSurfaceGeo); -;// CONCATENATED MODULE: ./src/gfx/geometries/SSIsosurfaceGeometry.js +;// ./src/gfx/geometries/SSIsosurfaceGeometry.js @@ -16201,10 +16264,7 @@ class SSIsosurfaceGeometry extends geometries_IsoSurfaceGeometry { return numIntersectedCells; } getType(letter) { - /* eslint-disable no-magic-numbers */ const atomT = [0, 0, 1, 1, 2, 6, 3, 6, 4, 6, 5, 6, 6, 0, 7, 3, 8, 2, 9, 6, 10, 6, 11, 6, 12, 6, 13, 6, 14, 6, 15, 4, 16, 5, 17, 6, 18, 6, 19, 6, 20, 6, 21, 6, 22, 6, 23, 6, 24, 6, 25, 6, 26, 6, 27, 6, 28, 6, 29, 6, 30, 6, 31, 6, 32, 6, 33, 6, 34, 6, 35, 6, 36, 6, 37, 6, 38, 6, 39, 6, 40, 6, 41, 6, 42, 6, 43, 6, 44, 6, 45, 6, 46, 6, 47, 6, 48, 6, 49, 6, 50, 6, 51, 6, 52, 6, 53, 6, 54, 6, 55, 6, 56, 6, 57, 6, 58, 6, 59, 6, 60, 6, 61, 6, 62, 6, 63, 6, 64, 6, 65, 6, 66, 6, 67, 6, 68, 6, 69, 6, 70, 6, 71, 6, 72, 6, 73, 6, 74, 6, 75, 6, 76, 6, 77, 6, 78, 6, 79, 6, 80, 6, 81, 6, 82, 6, 83, 6, 84, 6, 85, 6, 86, 6, 87, 6, 88, 6, 89, 6, 90, 6, 91, 6, 92, 6, 93, 6, 94, 6, 95, 6, 96, 6, 97, 6, 98, 6, 99, 6, 100, 6, 101, 6, 102, 6, 103, 6, 104, 6, 105, 6, 106, 6, 107, 6, 108, 6, 109, 6]; - /* eslint-enable no-magic-numbers */ - if (letter < 1 || letter > atomT.length / 2 || Object.keys(SSIsosurfaceGeometry_Element.ByAtomicNumber).length * 2 !== atomT.length) { throw new Error('atomT.length should be equal Element.ByAtomicNumber.length * 2'); } @@ -16227,10 +16287,7 @@ class SSIsosurfaceGeometry extends geometries_IsoSurfaceGeometry { const side3 = side2 * side; const vCorner = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(); const vDif = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(); - /* eslint-disable no-magic-numbers */ const aLot = +1.0e12; - /* eslint-enable no-magic-numbers */ - for (let i = 0; i < side3; i++) { corners[i] = aLot; // to large value } @@ -16589,7 +16646,7 @@ class SSIsosurfaceGeometry extends geometries_IsoSurfaceGeometry { // All code below must be erased from every device and each developer's memory /* harmony default export */ const geometries_SSIsosurfaceGeometry = (SSIsosurfaceGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/LabelsGeometry.js +;// ./src/gfx/geometries/LabelsGeometry.js function createLabel(fieldTxt, className) { @@ -16685,7 +16742,7 @@ class LabelsGeometry extends utils_EventDispatcher { } } /* harmony default export */ const geometries_LabelsGeometry = (LabelsGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/geometries.js +;// ./src/gfx/geometries/geometries.js @@ -16712,11 +16769,11 @@ class LabelsGeometry extends utils_EventDispatcher { SSIsosurfaceGeometry: geometries_SSIsosurfaceGeometry, LabelsGeometry: geometries_LabelsGeometry }); -;// CONCATENATED MODULE: ./src/gfx/shaders/Uber.vert -const Uber_namespaceObject = "float INSTANCED_SPRITE_OVERSCALE = 1.3;\r\n\r\nattribute vec3 normal;\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n varying vec3 viewNormal;\r\n#endif\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n varying vec3 vNormal;\r\n#endif\r\n\r\n#ifdef THICK_LINE\r\n attribute vec4 position; // W contains vert pos or neg offset\r\n#else\r\n attribute vec3 position;\r\n#endif\r\n\r\nvarying vec3 vWorldPosition;\r\nvarying vec3 vViewPosition;\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n attribute float alphaColor;\r\n varying float alphaCol;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\r\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\r\n\t\tvarying vec3 vDirectionalShadowNormal[ NUM_DIR_LIGHTS ];\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n attribute vec3 color;\r\n varying vec3 vColor;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n attribute vec3 color2;\r\n varying vec3 vColor2;\r\n attribute vec2 uv;\r\n #ifndef CYLINDER_SPRITE\r\n varying vec2 vUv;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_POS\r\n attribute vec4 offset;\r\n #ifdef SPHERE_SPRITE\r\n varying vec4 instOffset;\r\n varying vec4 spritePosEye;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n attribute vec4 matVector1;\r\n attribute vec4 matVector2;\r\n attribute vec4 matVector3;\r\n attribute vec4 invmatVector1;\r\n attribute vec4 invmatVector2;\r\n attribute vec4 invmatVector3;\r\n\r\n #ifdef CYLINDER_SPRITE\r\n varying vec4 matVec1;\r\n varying vec4 matVec2;\r\n varying vec4 matVec3;\r\n varying vec4 invmatVec1;\r\n varying vec4 invmatVec2;\r\n varying vec4 invmatVec3;\r\n varying vec4 spritePosEye;\r\n #endif\r\n#endif\r\n\r\nuniform mat4 modelViewMatrix; // optional\r\nuniform mat4 projectionMatrix; // optional\r\nuniform mat3 normalMatrix; // optional\r\nuniform mat4 modelMatrix; // optional\r\n\r\n#ifdef DASHED_LINE\r\n attribute float lineDistance;\r\n varying float vLineDistance;\r\n#endif\r\n\r\n#ifdef THICK_LINE\r\n attribute vec3 direction;\r\n uniform mat4 projMatrixInv;\r\n uniform vec2 viewport;\r\n uniform float lineWidth;\r\n\r\n vec4 transform(vec4 coord){\r\n return projectionMatrix * modelViewMatrix * coord;\r\n }\r\n\r\n vec2 project(vec4 device){\r\n vec3 device_normal = device.xyz/device.w;\r\n vec2 clip_pos = (device_normal*0.5+0.5).xy;\r\n return clip_pos * viewport;\r\n }\r\n\r\n vec4 unproject(vec2 screen, float z, float w){\r\n vec2 clip_pos = screen/viewport;\r\n vec2 device_normal = clip_pos*2.0-1.0;\r\n return vec4(device_normal*w, z, w);\r\n }\r\n#endif\r\n\r\n\r\n/////////////////////////////////////////// Main ///////////////////////////////////////////////\r\nvoid main() {\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n alphaCol = alphaColor;\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n vec3 objectNormal = vec3(\r\n dot(normal, matVector1.xyz),\r\n dot(normal, matVector2.xyz),\r\n dot(normal, matVector3.xyz));\r\n#else\r\n vec3 objectNormal = vec3( normal );\r\n#endif\r\n\r\nvec3 transformedNormal = normalMatrix * objectNormal;\r\n\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n vNormal = normalize(transformedNormal);\r\n#endif\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n viewNormal = normalize(mat3(modelViewMatrix)*objectNormal);\r\n#endif\r\n\r\n vec4 localPos = vec4(position.xyz, 1.0);\r\n vec4 worldPos = modelMatrix * localPos;\r\n vec4 mvPosition = modelViewMatrix * localPos;\r\n\r\n// make thick line offset\r\n#ifdef THICK_LINE\r\n // get screen pos\r\n vec4 dPos = transform(vec4(position.xyz, 1.0));\r\n vec2 sPos = project(dPos);\r\n // move pos forward\r\n vec3 position2 = position.xyz + direction.xyz * 0.5;\r\n // get screen offset pos\r\n vec4 dPos2 = transform(vec4(position2.xyz, 1.0));\r\n vec2 sPos2 = project(dPos2);\r\n // screen line direction\r\n vec2 sDir = normalize(sPos2 - sPos);\r\n // vertex offset (orthogonal to line direction)\r\n vec2 offset1 = vec2(-sDir.y, sDir.x);\r\n // move screen vertex\r\n vec2 newPos = sPos + offset1 * position.w * lineWidth;\r\n // get moved pos in view space\r\n vec4 dNewPos = unproject(newPos, dPos.z, dPos.w);\r\n mvPosition.xyz = (projMatrixInv * dNewPos).xyz;\r\n#endif // THICK_LINE\r\n\r\n#ifdef INSTANCED_POS\r\n #ifdef SPHERE_SPRITE\r\n instOffset = offset;\r\n\r\n vec4 posEye = modelViewMatrix * vec4( offset.xyz, 1.0 );\r\n float scale = length(modelViewMatrix[0]);\r\n mvPosition = posEye + vec4( position.xyz * offset.w * scale * INSTANCED_SPRITE_OVERSCALE, 0.0 );\r\n posEye.w = offset.w * scale;\r\n\r\n spritePosEye = posEye;\r\n #else\r\n localPos = vec4( offset.xyz + position.xyz * offset.w, 1.0 );\r\n worldPos = modelMatrix * localPos;\r\n mvPosition = modelViewMatrix * localPos;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n #ifdef CYLINDER_SPRITE\r\n matVec1 = matVector1;\r\n matVec2 = matVector2;\r\n matVec3 = matVector3;\r\n invmatVec1 = invmatVector1;\r\n invmatVec2 = invmatVector2;\r\n invmatVec3 = invmatVector3;\r\n\r\n // calculate eye coords of cylinder endpoints\r\n vec4 v = vec4(0, -0.5, 0, 1);\r\n vec4 p1 = modelViewMatrix * vec4(dot(v, matVector1), dot(v, matVector2), dot(v, matVector3), 1.0);\r\n v.y = 0.5;\r\n vec4 p2 = modelViewMatrix * vec4(dot(v, matVector1), dot(v, matVector2), dot(v, matVector3), 1.0);\r\n\r\n // sprite is placed at the center of cylinder\r\n vec4 posEye;\r\n posEye.xyz = mix(p1.xyz, p2.xyz, 0.5);\r\n posEye.w = 1.0;\r\n spritePosEye = posEye;\r\n\r\n // cylinder radius in eye space\r\n float rad = length(modelViewMatrix[0]) * length(vec3(matVector1.x, matVector2.x, matVector3.x));\r\n vec2 spriteSize;\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // In ortho projection we skip z coordinate\r\n // basic sprite size at screen plane (covers only cylinder axis)\r\n vec2 spriteSizeScreen = abs(p2.xy - p1.xy);\r\n\r\n spriteSize = vec2(1.0, 1.0) * INSTANCED_SPRITE_OVERSCALE * (spriteSizeScreen + 2.0 * rad);\r\n #else\r\n // basic sprite size at screen plane (covers only cylinder axis)\r\n vec2 spriteSizeScreen = abs(p2.xy / p2.z - p1.xy / p1.z);\r\n\r\n // full sprite size in eye coords\r\n float minZ = min(abs(p1.z), abs(p2.z));\r\n spriteSize = vec2(1.0, 1.0) * INSTANCED_SPRITE_OVERSCALE * abs(posEye.z) * (spriteSizeScreen + 2.0 * rad / minZ);\r\n #endif\r\n\r\n mvPosition = posEye + vec4( position.xy * 0.5 * spriteSize, 0, 0 );\r\n #else\r\n localPos = vec4(dot(localPos, matVector1), dot(localPos, matVector2), dot(localPos, matVector3), 1.0);\r\n worldPos = modelMatrix * localPos;\r\n mvPosition = modelViewMatrix * localPos;\r\n #endif\r\n#endif\r\n\r\n gl_Position = projectionMatrix * mvPosition;\r\n\r\n vWorldPosition = worldPos.xyz;\r\n vViewPosition = - mvPosition.xyz;\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t vec4 worldPosition;\r\n\t // see THREE.WebGLProgram.unrollLoops\r\n\t #pragma unroll_loop_start\r\n\t for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * vec4(vWorldPosition, 1.0);\r\n vDirectionalShadowNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(objectNormal, 0.0))).xyz;\r\n\t }\r\n\t #pragma unroll_loop_end\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n vColor = color.xyz;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n vColor2 = color2;\r\n #ifndef CYLINDER_SPRITE\r\n vUv = uv;\r\n #endif\r\n#endif\r\n\r\n#ifdef DASHED_LINE\r\n vLineDistance = lineDistance;\r\n#endif\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/Uber.frag -const gfx_shaders_Uber_namespaceObject = "#if defined (NORMALS_TO_G_BUFFER)\r\n #define fragColor gl_FragData[0]\r\n#else\r\n #define fragColor gl_FragColor\r\n#endif\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n varying float alphaCol;\r\n#endif\r\n\r\n#ifdef COLOR_FROM_POS\r\n uniform mat4 world2colorMatrix;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\r\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ]; //only for sprites\r\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\r\n\t\tvarying vec3 vDirectionalShadowNormal[ NUM_DIR_LIGHTS ];\r\n vec4 vDirLightWorldCoord[ NUM_DIR_LIGHTS ];\r\n vec3 vDirLightWorldNormal[ NUM_DIR_LIGHTS ];\r\n\r\n #ifdef SHADOWMAP_PCF_RAND\r\n // We use 4 instead uniform variable or define because this value is used in for(... i < value; ...) with\r\n // unroll_loop and unroll_loop has pattern:\r\n // /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g\r\n uniform vec2 samplesKernel[4]; // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n uniform sampler2D noiseTex;\r\n uniform vec2 noiseTexelSize;\r\n uniform vec2 srcTexelSize;\r\n uniform mat4 projectionMatrix;\r\n #endif\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n varying vec3 vColor;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n varying vec3 vColor2;\r\n #ifndef CYLINDER_SPRITE\r\n varying vec2 vUv;\r\n #endif\r\n#endif\r\n\r\nuniform vec3 diffuse;\r\nuniform vec3 emissive;\r\nuniform vec3 specular;\r\nuniform float shininess;\r\nuniform vec3 fixedColor;\r\nuniform float opacity;\r\nuniform float zClipValue;\r\nuniform float clipPlaneValue;\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n varying vec3 viewNormal;\r\n#endif\r\n\r\n#define RECIPROCAL_PI 0.31830988618\r\n#define saturate(a) clamp( a, 0.0, 1.0 )\r\n\r\n#ifdef USE_FOG\r\n uniform vec3 fogColor;\r\n uniform float fogAlpha;\r\n uniform float fogNear;\r\n uniform float fogFar;\r\n#endif\r\n\r\nvarying vec3 vWorldPosition; // world position of the pixel (invalid when INSTANCED_SPRITE is defined)\r\nvarying vec3 vViewPosition;\r\n\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n varying vec3 vNormal;\r\n#endif\r\n\r\n/////////////////////////////////////////// ZSprites ////////////////////////////////////////////////\r\n#if defined (SPHERE_SPRITE) || defined (CYLINDER_SPRITE)\r\n uniform float nearPlaneValue;\r\n#endif\r\n\r\n#ifdef SPHERE_SPRITE\r\n varying vec4 spritePosEye;\r\n#endif\r\n\r\n#if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n uniform float zOffset;\r\n\r\n #if !defined(USE_LIGHTS) || !defined(SHADOWMAP) || !defined(SHADOWMAP_PCF_RAND) || !(NUM_DIR_LIGHTS > 0)\r\n uniform mat4 projectionMatrix;\r\n #endif\r\n\r\n float calcDepthForSprites(vec4 pixelPosEye, float zOffset, mat4 projMatrix) {\r\n vec4 pixelPosScreen = projMatrix * pixelPosEye;\r\n return 0.5 * (pixelPosScreen.z / pixelPosScreen.w + 1.0) + zOffset;\r\n }\r\n#endif\r\n\r\n#ifdef SPHERE_SPRITE\r\n varying vec4 instOffset;\r\n uniform mat4 modelMatrix;\r\n uniform mat4 modelViewMatrix;\r\n uniform mat4 invModelViewMatrix;\r\n uniform mat3 normalMatrix;\r\n\r\n\r\n bool intersect_ray_sphere(in vec3 origin, in vec3 ray, out vec3 point, out float frontFaced) {\r\n\r\n // intersect XZ-projected ray with circle\r\n float a = dot(ray, ray);\r\n float b = dot(ray, origin);\r\n float c = dot(origin, origin) - 1.0;\r\n float det = b * b - a * c;\r\n if (det < 0.0) return false;\r\n float t1 = (-b - sqrt(det)) / a;\r\n float t2 = (-b + sqrt(det)) / a;\r\n\r\n // calculate both intersection points\r\n vec3 p1 = origin + ray * t1;\r\n vec3 p2 = origin + ray * t2;\r\n\r\n // choose nearest point inside frustum\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // orthografic camera is used for dirLight sources. So in it for all spheres the point with smaller 't' is visible\r\n // t1 is always smaller than t2 (from calculations)\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n #else\r\n // for perspective camera first intersection can be in front of near plane. If not intersection is p1 else - p2\r\n // t* = 0.0 corresponds to point of intersection near plane by the ray from camera to curPixel\r\n if (t1 >= 0.0) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (t2 >= 0.0) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #endif\r\n\r\n return false;\r\n }\r\n\r\n bool get_sphere_point(in vec3 pixelPosEye, out vec3 point, out float frontFaced) {\r\n vec3 origin, ray;\r\n\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // transform vector from sprite center to curPixel into sphere local coords\r\n origin = pixelPosEye.xyz - spritePosEye.xyz;\r\n origin = (invModelViewMatrix * vec4(origin, 0.0)).xyz / instOffset.w;\r\n\r\n // transform camera orientation vector into sphere local coords\r\n ray = (invModelViewMatrix * vec4(0.0, 0.0, -1.0, 0.0)).xyz;\r\n #else\r\n // find point of intersection near plane by the ray from camera to curPixel\r\n vec4 v = vec4(-(nearPlaneValue / pixelPosEye.z) * pixelPosEye, 1.0);\r\n\r\n // transform intersection point into sphere local coords\r\n v = invModelViewMatrix * v;\r\n origin = (v.xyz - instOffset.xyz) / instOffset.w;\r\n\r\n // transform vector from camera pos to curPixel into sphere local coords\r\n ray = (invModelViewMatrix * vec4(pixelPosEye, 0.0)).xyz;\r\n #endif\r\n ray = normalize(ray);\r\n\r\n return intersect_ray_sphere(origin, ray, point, frontFaced);\r\n }\r\n#endif\r\n\r\n#ifdef CYLINDER_SPRITE\r\n varying vec4 matVec1;\r\n varying vec4 matVec2;\r\n varying vec4 matVec3;\r\n varying vec4 invmatVec1;\r\n varying vec4 invmatVec2;\r\n varying vec4 invmatVec3;\r\n\r\n uniform mat4 modelMatrix;\r\n uniform mat4 modelViewMatrix;\r\n uniform mat4 invModelViewMatrix;\r\n uniform mat3 normalMatrix;\r\n\r\n varying vec4 spritePosEye;\r\n\r\n bool intersect_ray_cylinder(in vec3 origin, in vec3 ray, out vec3 point, out float frontFaced) {\r\n\r\n // intersect XZ-projected ray with circle\r\n float a = dot(ray.xz, ray.xz);\r\n float b = dot(ray.xz, origin.xz);\r\n float c = dot(origin.xz, origin.xz) - 1.0;\r\n float det = b * b - a * c;\r\n if (det < 0.0) return false;\r\n float t1 = (-b - sqrt(det)) / a;\r\n float t2 = (-b + sqrt(det)) / a;\r\n\r\n // calculate both intersection points\r\n vec3 p1 = origin + ray * t1;\r\n vec3 p2 = origin + ray * t2;\r\n\r\n float halfHeight = 0.5;\r\n\r\n // choose nearest point\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // orthografic camera is used for dirLight sources. So in it for all cylinders the point with smaller 't' is visible\r\n // if it is not outside of cylinnder (t1 is always smaller than t2).\r\n if (p1.y >= -halfHeight && p1.y <= halfHeight) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (p2.y >= -halfHeight && p2.y <= halfHeight) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #else\r\n // for perspective camera first intersection can be in front of near plane. If not intersection is p1 else - p2\r\n // t* = 0.0 corresponds to point of intersection near plane by the ray from camera to curPixel\r\n if (t1 >= 0.0 && p1.y >= -halfHeight && p1.y <= halfHeight) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (t2 >= 0.0 && p2.y >= -halfHeight && p2.y <= halfHeight) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #endif\r\n\r\n return false;\r\n }\r\n\r\n bool get_cylinder_point(in vec3 pixelPosEye, out vec3 point, out float frontFaced) {\r\n vec3 origin, ray;\r\n vec4 v;\r\n\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // transform vector from sprite center to curPixel into cylinder local coords\r\n v = invModelViewMatrix * vec4(pixelPosEye.xyz - spritePosEye.xyz, 0.0);\r\n origin = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n\r\n // transform camera orientation vector into cylinder local coords\r\n v = invModelViewMatrix * vec4(0.0, 0.0, -1.0, 0.0);\r\n ray = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n #else\r\n // find point of intersection near plane by the ray from camera to curPixel\r\n v = vec4(-(nearPlaneValue / pixelPosEye.z) * pixelPosEye, 1.0);\r\n\r\n // transform intersection point into cylinder local coords\r\n v = invModelViewMatrix * v;\r\n origin = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n\r\n // transform vector from camera pos to curPixel into cylinder local coords\r\n v = invModelViewMatrix * vec4(pixelPosEye, 0.0);\r\n ray = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n #endif\r\n ray = normalize(ray);\r\n\r\n return intersect_ray_cylinder(origin, ray, point, frontFaced);\r\n }\r\n#endif\r\n\r\n///////////////////////////////////// Pack and unpack ///////////////////////////////////////////////\r\nconst float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1)\r\nconst float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1)\r\n\r\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\r\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\r\n\r\n\r\nconst float ShiftRight8 = 1. / 256.;\r\n\r\nvec4 packDepthToRGBA( const in float v ) {\r\n vec4 r = vec4( fract( v * PackFactors ), v );\r\n r.yzw -= r.xyz * ShiftRight8; // tidy overflow\r\n return r * PackUpscale;\r\n}\r\n\r\nfloat unpackRGBAToDepth( const in vec4 v ) {\r\n return dot( v, UnpackFactors );\r\n}\r\n\r\n////////////////////////////////////////// All Lighting /////////////////////////////////////////////////\r\n#ifdef TOON_SHADING\r\n #define LOW_TOON_BORDER 0.0\r\n #define MEDIUM_TOON_BORDER 0.7\r\n #define HIGH_TOON_BORDER 1.0\r\n\r\n #define MEDIUM_TOON_RANGE 0.5\r\n #define HIGH_TOON_RANGE 0.95\r\n#endif\r\n#if defined(USE_LIGHTS) && NUM_DIR_LIGHTS > 0\r\n struct ReflectedLight {\r\n vec3 directDiffuse;\r\n vec3 directSpecular;\r\n vec3 indirectDiffuse;\r\n };\r\n\r\n struct BlinnPhongMaterial {\r\n vec3 diffuseColor;\r\n vec3 specularColor;\r\n float specularShininess;\r\n };\r\n\r\n struct GeometricContext {\r\n vec3 normal;\r\n vec3 viewDir;\r\n };\r\n\r\n struct DirectionalLight {\r\n vec3 direction;\r\n vec3 color;\r\n };\r\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\r\n\r\n struct DirectionalLightShadow {\r\n vec2 shadowMapSize;\r\n float shadowBias;\r\n float shadowRadius;\r\n };\r\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHTS ];\r\n\r\n uniform vec3 ambientLightColor;\r\n\r\n /////////////////////////////////////////// Shadowmap ////////////////////////////////////////////////\r\n\r\n #if defined(SHADOWMAP)\r\n \tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\r\n \t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\r\n \t}\r\n\r\n float getShadow( sampler2D shadowMap, DirectionalLightShadow dirLight, vec4 shadowCoord, vec3 vViewPosition, vec3 vNormal ) {\r\n \t float shadow = 0.0;\r\n\r\n // When shadows for sprites will appear use here for them normals as it done for G-buffer\r\n shadowCoord.xyz += dirLight.shadowBias * vNormal;\r\n shadowCoord.xyz /= shadowCoord.w;\r\n\r\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\r\n bool inFrustum = all( inFrustumVec );\r\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\r\n bool frustumTest = all( frustumTestVec );\r\n\r\n if ( frustumTest ) {\r\n #ifdef SHADOWMAP_BASIC\r\n \t shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\r\n \t#endif\r\n\r\n \t#ifdef SHADOWMAP_PCF_SHARP\r\n \t vec2 texelSize = vec2( 1.0 ) / dirLight.shadowMapSize;\r\n\r\n float dx0 = - texelSize.x * dirLight.shadowRadius;\r\n float dy0 = - texelSize.y * dirLight.shadowRadius;\r\n float dx1 = + texelSize.x * dirLight.shadowRadius;\r\n float dy1 = + texelSize.y * dirLight.shadowRadius;\r\n\r\n shadow = (\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\r\n ) * ( 1.0 / 9.0 );\r\n #endif\r\n\r\n #ifdef SHADOWMAP_PCF_RAND\r\n vec2 texelSize = vec2( 1.0 ) / dirLight.shadowMapSize;\r\n\r\n vec4 vUv = ((projectionMatrix * vec4(vViewPosition, 1.0)) + 1.0) / 2.0;\r\n vec2 vUvNoise = vUv.xy / srcTexelSize * noiseTexelSize;\r\n\r\n vec2 noiseVec = normalize(texture2D(noiseTex, vUvNoise).rg);\r\n mat2 mNoise = mat2(noiseVec.x, noiseVec.y, -noiseVec.y, noiseVec.x);\r\n\r\n vec2 offset;\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < 4; i ++ ) { // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n offset = mNoise * ( normalize( samplesKernel[ i ]) * texelSize * dirLight.shadowRadius );\r\n shadow += texture2DCompare( shadowMap, shadowCoord.xy + offset, shadowCoord.z );\r\n }\r\n #pragma unroll_loop_end\r\n shadow /= float( 4 ); // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n #endif\r\n }\r\n return shadow;//(shadow != 1.0) ? 0.5 : 1.0;//vec4(shadow, shadow, shadow, 1.0);\r\n }\r\n #endif\r\n\r\n /////////////////////////////////////////// Lighting /////////////////////////////////////////////////\r\n\r\n vec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\r\n return RECIPROCAL_PI * diffuseColor;\r\n } // validated\r\n\r\n vec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\r\n // Original approximation by Christophe Schlick '94\r\n //;float fresnel = pow( 1.0 - dotLH, 5.0 );\r\n // Optimized variant (presented by Epic at SIGGRAPH '13)\r\n float fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\r\n return ( 1.0 - specularColor ) * fresnel + specularColor;\r\n } // validated\r\n\r\n float G_BlinnPhong_Implicit( /* const in float dotNL, const in float dotNV */ ) {\r\n // geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v)\r\n return 0.25;\r\n }\r\n\r\n float D_BlinnPhong( const in float shininess, const in float dotNH ) {\r\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\r\n }\r\n\r\n vec3 BRDF_Specular_BlinnPhong( const in DirectionalLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\r\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\r\n float dotNH = saturate(dot( geometry.normal, halfDir ));\r\n float dotLH = saturate(dot( incidentLight.direction, halfDir ));\r\n\r\n vec3 F = F_Schlick( specularColor, dotLH );\r\n float G = G_BlinnPhong_Implicit( /* dotNL, dotNV */ );\r\n float D = D_BlinnPhong( shininess, dotNH );\r\n\r\n return F * ( G * D );\r\n } // validated\r\n\r\n void RE_Direct_BlinnPhong( const in DirectionalLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight, float penumbra ) {\r\n\r\n float dotNL = saturate( dot( geometry.normal, directLight.direction ));\r\n #ifdef TOON_SHADING\r\n if(dotNL < MEDIUM_TOON_RANGE){\r\n dotNL = LOW_TOON_BORDER;\r\n }\r\n else if(dotNL < HIGH_TOON_RANGE){\r\n dotNL = MEDIUM_TOON_BORDER;\r\n }\r\n else{\r\n dotNL = HIGH_TOON_BORDER;\r\n }\r\n #endif\r\n\r\n vec3 irradiance = dotNL * directLight.color;\r\n reflectedLight.directDiffuse += penumbra * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\r\n reflectedLight.directSpecular += penumbra * irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess );\r\n }\r\n\r\n void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\r\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\r\n }\r\n\r\n vec3 calcLighting(const in GeometricContext geometry, const in BlinnPhongMaterial material, vec3 vViewPosition) {\r\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ));\r\n vec3 irradiance = ambientLightColor;\r\n\r\n float shadowMask = 1.0;\r\n // see THREE.WebGLProgram.unrollLoops\r\n \t#pragma unroll_loop_start\r\n \t for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n \t #ifdef SHADOWMAP\r\n \t shadowMask = getShadow( directionalShadowMap[ i ], directionalLightShadows[ i ], vDirLightWorldCoord[ i ], vViewPosition, vDirLightWorldNormal[ i ] );\r\n #endif\r\n\r\n \t\t if ( shadowMask > 0.0 ) RE_Direct_BlinnPhong( directionalLights[ i ], geometry, material, reflectedLight, shadowMask );\r\n \t\t}\r\n \t\t#pragma unroll_loop_end\r\n\r\n RE_IndirectDiffuse_BlinnPhong(irradiance, material, reflectedLight);\r\n\r\n return saturate(reflectedLight.indirectDiffuse + reflectedLight.directDiffuse + reflectedLight.directSpecular);\r\n }\r\n#endif\r\n\r\n/////////////////////////////////////////// Dashed Line ///////////////////////////////////////////////\r\n#ifdef DASHED_LINE\r\n uniform float dashedLineSize;\r\n uniform float dashedLinePeriod;\r\n varying float vLineDistance;\r\n#endif\r\n\r\n/////////////////////////////////////////// Main ///////////////////////////////////////////////\r\nvoid main() {\r\n\r\n#ifdef CLIP_PLANE\r\n if (vViewPosition.z < clipPlaneValue) discard;\r\n#endif\r\n\r\n#ifdef ZCLIP\r\n if (vViewPosition.z < zClipValue) discard;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = vDirectionalShadowCoord[ i ];\r\n vDirLightWorldNormal[ i ] = vDirectionalShadowNormal[ i ];\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n#endif\r\n\r\n vec4 pixelPosWorld = vec4(vWorldPosition, 1.0);\r\n vec4 pixelPosEye;\r\n\r\n#ifdef SPHERE_SPRITE\r\n\r\n vec3 viewNormalSprites;\r\n float frontFaced = 1.0;\r\n vec3 normal;\r\n\r\n/* quick-and-dirty method\r\n normal.xy = ' + INSTANCED_SPRITE_OVERSCALE + ' * (2.0 * vUv - 1.0);\r\n float r2 = dot(normal.xy, normal.xy);\r\n if (r2 > 1.0) discard;\r\n float normalZ = sqrt(1.0 - r2);\r\n normal.z = normalZ;\r\n normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\r\n pixelPosEye = vec4(spritePosEye.xyz, 1.0);\r\n pixelPosEye.z += spritePosEye.w * normalZ;\r\n*/\r\n\r\n // ray-trace sphere surface\r\n {\r\n vec3 p;\r\n if (!get_sphere_point(-vViewPosition, p, frontFaced)) discard;\r\n vec4 v = vec4(instOffset.xyz + p * instOffset.w, 1.0);\r\n pixelPosWorld = modelMatrix * v;\r\n pixelPosEye = modelViewMatrix * v;\r\n normal = normalize(normalMatrix * p);\r\n #ifdef NORMALS_TO_G_BUFFER\r\n viewNormalSprites = normalize(mat3(modelViewMatrix)*p);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = directionalShadowMatrix[ i ] * pixelPosWorld;\r\n vDirLightWorldNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(p, 0.0))).xyz;\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n #endif\r\n }\r\n#endif\r\n\r\n#ifdef CYLINDER_SPRITE\r\n vec3 normal;\r\n vec3 viewNormalSprites;\r\n float frontFaced = 1.0;\r\n float cylinderY = 0.0;\r\n\r\n // ray-trace cylinder surface\r\n {\r\n vec3 p;\r\n if (!get_cylinder_point(-vViewPosition, p, frontFaced)) discard;\r\n\r\n cylinderY = 0.5 * (p.y + 1.0);\r\n\r\n vec4 v = vec4(p, 1.0);\r\n v = vec4(dot(v, matVec1), dot(v, matVec2), dot(v, matVec3), 1.0);\r\n pixelPosWorld = modelMatrix * v;\r\n pixelPosEye = modelViewMatrix * v;\r\n\r\n vec3 localNormal = normalize(vec3(p.x, 0.0, p.z));\r\n normal = vec3(\r\n dot(localNormal, matVec1.xyz),\r\n dot(localNormal, matVec2.xyz),\r\n dot(localNormal, matVec3.xyz));\r\n #ifdef NORMALS_TO_G_BUFFER\r\n viewNormalSprites = normalize(mat3(modelViewMatrix)*normal);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = directionalShadowMatrix[ i ] * pixelPosWorld;\r\n vDirLightWorldNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(normal, 0.0))).xyz;\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n #endif\r\n\r\n normal = normalize(normalMatrix * normal);\r\n }\r\n#endif\r\n\r\n #ifdef ATTR_COLOR\r\n vec3 vertexColor = vColor;\r\n #else\r\n vec3 vertexColor = vec3(1.0, 1.0, 1.0);\r\n #endif\r\n\r\n #ifdef ATTR_COLOR2\r\n #ifdef CYLINDER_SPRITE\r\n float colorCoef = cylinderY; // cylinder parameter is calculated from ray-tracing\r\n #else\r\n float colorCoef = vUv.y; // cylinder parameter is interpolated as tex coord\r\n #endif\r\n // choose either color or color2\r\n vertexColor = mix(vColor2, vColor, step(0.5, colorCoef));\r\n #endif\r\n\r\n // negative red component is a special condition\r\n if (vertexColor.x < 0.0) discard;\r\n\r\n #ifdef DASHED_LINE\r\n if ( mod( vLineDistance, dashedLinePeriod ) > dashedLineSize ) discard;\r\n #endif\r\n\r\n // transparency prepass writes only z, so we don't need to calc the color\r\n #ifdef PREPASS_TRANSP\r\n fragColor = vec4(1.0, 1.0, 1.0, 1.0);\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepthEXT = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n #endif\r\n return;\r\n #endif\r\n\r\n float totalOpacity = opacity;\r\n\r\n #ifdef ATTR_ALPHA_COLOR\r\n totalOpacity *= alphaCol;\r\n #endif\r\n\r\n // discard fully transparent pixels\r\n if (totalOpacity == 0.0) discard;\r\n\r\n #ifdef FAKE_OPACITY\r\n // discard pixels in checker pattern\r\n vec2 dm_coord = floor(gl_FragCoord.xy);\r\n dm_coord = fract(dm_coord * 0.5);\r\n if (totalOpacity < 1.0 && (dm_coord.x < 0.5 ^^ dm_coord.y < 0.5)) discard;\r\n vec4 diffuseColor = vec4(diffuse, 1.0);\r\n #else\r\n vec4 diffuseColor = vec4(diffuse, totalOpacity);\r\n #endif\r\n\r\n float flipNormal;\r\n #if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n flipNormal = 1.0;\r\n #ifdef DOUBLE_SIDED\r\n flipNormal = float( gl_FrontFacing );\r\n #endif\r\n vec3 normal = normalize( vNormal ) * flipNormal;\r\n #endif\r\n\r\n diffuseColor.rgb *= vertexColor;\r\n\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepthEXT = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n #endif\r\n\r\n #ifdef NORMALS_TO_G_BUFFER\r\n #if defined (SPHERE_SPRITE) || defined (CYLINDER_SPRITE)\r\n vec3 viewNormaInColor = viewNormalSprites;\r\n #else\r\n vec3 viewNormaInColor = viewNormal;\r\n float frontFaced = float( gl_FrontFacing );\r\n #endif\r\n // [-1, 1] -> [0, 1]\r\n viewNormaInColor = 0.5 * viewNormaInColor + 0.5;\r\n gl_FragData[1] = vec4(viewNormaInColor, frontFaced);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && NUM_DIR_LIGHTS > 0\r\n vec3 viewDir;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n viewDir = -pixelPosEye.xyz;\r\n #else\r\n viewDir = vViewPosition;\r\n #endif\r\n GeometricContext geometry = GeometricContext(normal, normalize( viewDir ));\r\n BlinnPhongMaterial material = BlinnPhongMaterial(diffuseColor.rgb, specular, shininess);\r\n vec3 outgoingLight = calcLighting(geometry, material, viewDir);\r\n #else\r\n vec3 outgoingLight = diffuseColor.rgb;\r\n #endif\r\n\r\n #ifdef COLOR_FROM_DEPTH\r\n float depth = 0.0;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepthEXT = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n depth = gl_FragDepthEXT;\r\n #else\r\n depth = gl_FragCoord.z;\r\n #endif\r\n fragColor = packDepthToRGBA(depth);\r\n return;\r\n #endif\r\n\r\n #ifdef COLOR_FROM_POS\r\n fragColor = world2colorMatrix * pixelPosWorld;\r\n #else\r\n #ifdef OVERRIDE_COLOR\r\n fragColor = vec4(fixedColor, diffuseColor.a);\r\n #else\r\n fragColor = vec4(outgoingLight, diffuseColor.a);//vec4(vNormal, 1.0);\r\n #endif\r\n\r\n #ifdef USE_FOG\r\n float viewDistance;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n viewDistance = abs(pixelPosEye.z);\r\n #else\r\n viewDistance = vViewPosition.z;\r\n #endif\r\n float fogFactor = smoothstep( fogNear, fogFar, viewDistance) * fogAlpha;\r\n #ifdef FOG_TRANSPARENT\r\n fragColor.a = fragColor.a * (1.0 - fogFactor);\r\n #else\r\n fragColor.rgb = mix( fragColor.rgb, fogColor, fogFactor );\r\n #endif\r\n #endif\r\n\r\n #endif\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/capabilities.js +;// ./src/gfx/shaders/Uber.vert +const Uber_namespaceObject = "/*\r\n * GLSL Version: ES 3.00 (WebGL 2.0 compatible)\r\n * No #version directive in this file (injected by Three.js).\r\n * Use GLSL3 semantics (`in`/`out`).\r\n * Set `glslVersion: THREE.GLSL3` in ShaderMaterial/RawShaderMaterial.\r\n */\r\n\r\nfloat INSTANCED_SPRITE_OVERSCALE = 1.3;\r\n\r\nin vec3 normal;\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n out vec3 viewNormal;\r\n#endif\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n out vec3 vNormal;\r\n#endif\r\n\r\n#ifdef THICK_LINE\r\n in vec4 position; // W contains vert pos or neg offset\r\n#else\r\n in vec3 position;\r\n#endif\r\n\r\nout vec3 vWorldPosition;\r\nout vec3 vViewPosition;\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n in float alphaColor;\r\n out float alphaCol;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\r\n\t\tout vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\r\n\t\tout vec3 vDirectionalShadowNormal[ NUM_DIR_LIGHTS ];\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n in vec3 color;\r\n out vec3 vColor;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n in vec3 color2;\r\n out vec3 vColor2;\r\n in vec2 uv;\r\n #ifndef CYLINDER_SPRITE\r\n out vec2 vUv;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_POS\r\n in vec4 offset;\r\n #ifdef SPHERE_SPRITE\r\n out vec4 instOffset;\r\n out vec4 spritePosEye;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n in vec4 matVector1;\r\n in vec4 matVector2;\r\n in vec4 matVector3;\r\n in vec4 invmatVector1;\r\n in vec4 invmatVector2;\r\n in vec4 invmatVector3;\r\n\r\n #ifdef CYLINDER_SPRITE\r\n out vec4 matVec1;\r\n out vec4 matVec2;\r\n out vec4 matVec3;\r\n out vec4 invmatVec1;\r\n out vec4 invmatVec2;\r\n out vec4 invmatVec3;\r\n out vec4 spritePosEye;\r\n #endif\r\n#endif\r\n\r\nuniform mat4 modelViewMatrix; // optional\r\nuniform mat4 projectionMatrix; // optional\r\nuniform mat3 normalMatrix; // optional\r\nuniform mat4 modelMatrix; // optional\r\n\r\n#ifdef DASHED_LINE\r\n in float lineDistance;\r\n out float vLineDistance;\r\n#endif\r\n\r\n#ifdef THICK_LINE\r\n in vec3 direction;\r\n uniform mat4 projMatrixInv;\r\n uniform vec2 viewport;\r\n uniform float lineWidth;\r\n\r\n vec4 transform(vec4 coord){\r\n return projectionMatrix * modelViewMatrix * coord;\r\n }\r\n\r\n vec2 project(vec4 device){\r\n vec3 device_normal = device.xyz/device.w;\r\n vec2 clip_pos = (device_normal*0.5+0.5).xy;\r\n return clip_pos * viewport;\r\n }\r\n\r\n vec4 unproject(vec2 screen, float z, float w){\r\n vec2 clip_pos = screen/viewport;\r\n vec2 device_normal = clip_pos*2.0-1.0;\r\n return vec4(device_normal*w, z, w);\r\n }\r\n#endif\r\n\r\n\r\n/////////////////////////////////////////// Main ///////////////////////////////////////////////\r\nvoid main() {\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n alphaCol = alphaColor;\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n vec3 objectNormal = vec3(\r\n dot(normal, matVector1.xyz),\r\n dot(normal, matVector2.xyz),\r\n dot(normal, matVector3.xyz));\r\n#else\r\n vec3 objectNormal = vec3( normal );\r\n#endif\r\n\r\nvec3 transformedNormal = normalMatrix * objectNormal;\r\n\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n vNormal = normalize(transformedNormal);\r\n#endif\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n viewNormal = normalize(mat3(modelViewMatrix)*objectNormal);\r\n#endif\r\n\r\n vec4 localPos = vec4(position.xyz, 1.0);\r\n vec4 worldPos = modelMatrix * localPos;\r\n vec4 mvPosition = modelViewMatrix * localPos;\r\n\r\n// make thick line offset\r\n#ifdef THICK_LINE\r\n // get screen pos\r\n vec4 dPos = transform(vec4(position.xyz, 1.0));\r\n vec2 sPos = project(dPos);\r\n // move pos forward\r\n vec3 position2 = position.xyz + direction.xyz * 0.5;\r\n // get screen offset pos\r\n vec4 dPos2 = transform(vec4(position2.xyz, 1.0));\r\n vec2 sPos2 = project(dPos2);\r\n // screen line direction\r\n vec2 sDir = normalize(sPos2 - sPos);\r\n // vertex offset (orthogonal to line direction)\r\n vec2 offset1 = vec2(-sDir.y, sDir.x);\r\n // move screen vertex\r\n vec2 newPos = sPos + offset1 * position.w * lineWidth;\r\n // get moved pos in view space\r\n vec4 dNewPos = unproject(newPos, dPos.z, dPos.w);\r\n mvPosition.xyz = (projMatrixInv * dNewPos).xyz;\r\n#endif // THICK_LINE\r\n\r\n#ifdef INSTANCED_POS\r\n #ifdef SPHERE_SPRITE\r\n instOffset = offset;\r\n\r\n vec4 posEye = modelViewMatrix * vec4( offset.xyz, 1.0 );\r\n float scale = length(modelViewMatrix[0]);\r\n mvPosition = posEye + vec4( position.xyz * offset.w * scale * INSTANCED_SPRITE_OVERSCALE, 0.0 );\r\n posEye.w = offset.w * scale;\r\n\r\n spritePosEye = posEye;\r\n #else\r\n localPos = vec4( offset.xyz + position.xyz * offset.w, 1.0 );\r\n worldPos = modelMatrix * localPos;\r\n mvPosition = modelViewMatrix * localPos;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n #ifdef CYLINDER_SPRITE\r\n matVec1 = matVector1;\r\n matVec2 = matVector2;\r\n matVec3 = matVector3;\r\n invmatVec1 = invmatVector1;\r\n invmatVec2 = invmatVector2;\r\n invmatVec3 = invmatVector3;\r\n\r\n // calculate eye coords of cylinder endpoints\r\n vec4 v = vec4(0, -0.5, 0, 1);\r\n vec4 p1 = modelViewMatrix * vec4(dot(v, matVector1), dot(v, matVector2), dot(v, matVector3), 1.0);\r\n v.y = 0.5;\r\n vec4 p2 = modelViewMatrix * vec4(dot(v, matVector1), dot(v, matVector2), dot(v, matVector3), 1.0);\r\n\r\n // sprite is placed at the center of cylinder\r\n vec4 posEye;\r\n posEye.xyz = mix(p1.xyz, p2.xyz, 0.5);\r\n posEye.w = 1.0;\r\n spritePosEye = posEye;\r\n\r\n // cylinder radius in eye space\r\n float rad = length(modelViewMatrix[0]) * length(vec3(matVector1.x, matVector2.x, matVector3.x));\r\n vec2 spriteSize;\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // In ortho projection we skip z coordinate\r\n // basic sprite size at screen plane (covers only cylinder axis)\r\n vec2 spriteSizeScreen = abs(p2.xy - p1.xy);\r\n\r\n spriteSize = vec2(1.0, 1.0) * INSTANCED_SPRITE_OVERSCALE * (spriteSizeScreen + 2.0 * rad);\r\n #else\r\n // basic sprite size at screen plane (covers only cylinder axis)\r\n vec2 spriteSizeScreen = abs(p2.xy / p2.z - p1.xy / p1.z);\r\n\r\n // full sprite size in eye coords\r\n float minZ = min(abs(p1.z), abs(p2.z));\r\n spriteSize = vec2(1.0, 1.0) * INSTANCED_SPRITE_OVERSCALE * abs(posEye.z) * (spriteSizeScreen + 2.0 * rad / minZ);\r\n #endif\r\n\r\n mvPosition = posEye + vec4( position.xy * 0.5 * spriteSize, 0, 0 );\r\n #else\r\n localPos = vec4(dot(localPos, matVector1), dot(localPos, matVector2), dot(localPos, matVector3), 1.0);\r\n worldPos = modelMatrix * localPos;\r\n mvPosition = modelViewMatrix * localPos;\r\n #endif\r\n#endif\r\n\r\n gl_Position = projectionMatrix * mvPosition;\r\n\r\n vWorldPosition = worldPos.xyz;\r\n vViewPosition = - mvPosition.xyz;\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t vec4 worldPosition;\r\n\t // see THREE.WebGLProgram.unrollLoops\r\n\t #pragma unroll_loop_start\r\n\t for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * vec4(vWorldPosition, 1.0);\r\n vDirectionalShadowNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(objectNormal, 0.0))).xyz;\r\n\t }\r\n\t #pragma unroll_loop_end\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n vColor = color.xyz;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n vColor2 = color2;\r\n #ifndef CYLINDER_SPRITE\r\n vUv = uv;\r\n #endif\r\n#endif\r\n\r\n#ifdef DASHED_LINE\r\n vLineDistance = lineDistance;\r\n#endif\r\n}\r\n"; +;// ./src/gfx/shaders/Uber.frag +const gfx_shaders_Uber_namespaceObject = "/*\r\n * GLSL Version: ES 3.00 (WebGL 2.0 compatible)\r\n * No #version directive in this file (injected by Three.js).\r\n * Use GLSL3 semantics (`in`/`out`, `layout(location=...)`, `texture`).\r\n * Set `glslVersion: THREE.GLSL3` in ShaderMaterial/RawShaderMaterial.\r\n */\r\n\r\n#if defined (NORMALS_TO_G_BUFFER)\r\n layout(location = 0) out vec4 fragColor;\r\n layout(location = 1) out vec4 fragNormal;\r\n#else\r\n out vec4 fragColor;\r\n#endif\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n in float alphaCol;\r\n#endif\r\n\r\n#ifdef COLOR_FROM_POS\r\n uniform mat4 world2colorMatrix;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\r\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ]; //only for sprites\r\n\t\tin vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\r\n\t\tin vec3 vDirectionalShadowNormal[ NUM_DIR_LIGHTS ];\r\n vec4 vDirLightWorldCoord[ NUM_DIR_LIGHTS ];\r\n vec3 vDirLightWorldNormal[ NUM_DIR_LIGHTS ];\r\n\r\n #ifdef SHADOWMAP_PCF_RAND\r\n // We use 4 instead uniform variable or define because this value is used in for(... i < value; ...) with\r\n // unroll_loop and unroll_loop has pattern:\r\n // /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g\r\n uniform vec2 samplesKernel[4]; // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n uniform sampler2D noiseTex;\r\n uniform vec2 noiseTexelSize;\r\n uniform vec2 srcTexelSize;\r\n uniform mat4 projectionMatrix;\r\n #endif\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n in vec3 vColor;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n in vec3 vColor2;\r\n #ifndef CYLINDER_SPRITE\r\n in vec2 vUv;\r\n #endif\r\n#endif\r\n\r\nuniform vec3 diffuse;\r\nuniform vec3 emissive;\r\nuniform vec3 specular;\r\nuniform float shininess;\r\nuniform vec3 fixedColor;\r\nuniform float opacity;\r\nuniform float zClipValue;\r\nuniform float clipPlaneValue;\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n in vec3 viewNormal;\r\n#endif\r\n\r\n#define RECIPROCAL_PI 0.31830988618\r\n#define saturate(a) clamp( a, 0.0, 1.0 )\r\n\r\n#ifdef USE_FOG\r\n uniform vec3 fogColor;\r\n uniform float fogAlpha;\r\n uniform float fogNear;\r\n uniform float fogFar;\r\n#endif\r\n\r\nin vec3 vWorldPosition; // world position of the pixel (invalid when INSTANCED_SPRITE is defined)\r\nin vec3 vViewPosition;\r\n\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n in vec3 vNormal;\r\n#endif\r\n\r\n/////////////////////////////////////////// ZSprites ////////////////////////////////////////////////\r\n#if defined (SPHERE_SPRITE) || defined (CYLINDER_SPRITE)\r\n uniform float nearPlaneValue;\r\n#endif\r\n\r\n#ifdef SPHERE_SPRITE\r\n in vec4 spritePosEye;\r\n#endif\r\n\r\n#if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n uniform float zOffset;\r\n\r\n #if !defined(USE_LIGHTS) || !defined(SHADOWMAP) || !defined(SHADOWMAP_PCF_RAND) || !(NUM_DIR_LIGHTS > 0)\r\n uniform mat4 projectionMatrix;\r\n #endif\r\n\r\n float calcDepthForSprites(vec4 pixelPosEye, float zOffset, mat4 projMatrix) {\r\n vec4 pixelPosScreen = projMatrix * pixelPosEye;\r\n return 0.5 * (pixelPosScreen.z / pixelPosScreen.w + 1.0) + zOffset;\r\n }\r\n#endif\r\n\r\n#ifdef SPHERE_SPRITE\r\n in vec4 instOffset;\r\n uniform mat4 modelMatrix;\r\n uniform mat4 modelViewMatrix;\r\n uniform mat4 invModelViewMatrix;\r\n uniform mat3 normalMatrix;\r\n\r\n\r\n bool intersect_ray_sphere(in vec3 origin, in vec3 ray, out vec3 point, out float frontFaced) {\r\n\r\n // intersect XZ-projected ray with circle\r\n float a = dot(ray, ray);\r\n float b = dot(ray, origin);\r\n float c = dot(origin, origin) - 1.0;\r\n float det = b * b - a * c;\r\n if (det < 0.0) return false;\r\n float t1 = (-b - sqrt(det)) / a;\r\n float t2 = (-b + sqrt(det)) / a;\r\n\r\n // calculate both intersection points\r\n vec3 p1 = origin + ray * t1;\r\n vec3 p2 = origin + ray * t2;\r\n\r\n // choose nearest point inside frustum\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // orthografic camera is used for dirLight sources. So in it for all spheres the point with smaller 't' is visible\r\n // t1 is always smaller than t2 (from calculations)\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n #else\r\n // for perspective camera first intersection can be in front of near plane. If not intersection is p1 else - p2\r\n // t* = 0.0 corresponds to point of intersection near plane by the ray from camera to curPixel\r\n if (t1 >= 0.0) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (t2 >= 0.0) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #endif\r\n\r\n return false;\r\n }\r\n\r\n bool get_sphere_point(in vec3 pixelPosEye, out vec3 point, out float frontFaced) {\r\n vec3 origin, ray;\r\n\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // transform vector from sprite center to curPixel into sphere local coords\r\n origin = pixelPosEye.xyz - spritePosEye.xyz;\r\n origin = (invModelViewMatrix * vec4(origin, 0.0)).xyz / instOffset.w;\r\n\r\n // transform camera orientation vector into sphere local coords\r\n ray = (invModelViewMatrix * vec4(0.0, 0.0, -1.0, 0.0)).xyz;\r\n #else\r\n // find point of intersection near plane by the ray from camera to curPixel\r\n vec4 v = vec4(-(nearPlaneValue / pixelPosEye.z) * pixelPosEye, 1.0);\r\n\r\n // transform intersection point into sphere local coords\r\n v = invModelViewMatrix * v;\r\n origin = (v.xyz - instOffset.xyz) / instOffset.w;\r\n\r\n // transform vector from camera pos to curPixel into sphere local coords\r\n ray = (invModelViewMatrix * vec4(pixelPosEye, 0.0)).xyz;\r\n #endif\r\n ray = normalize(ray);\r\n\r\n return intersect_ray_sphere(origin, ray, point, frontFaced);\r\n }\r\n#endif\r\n\r\n#ifdef CYLINDER_SPRITE\r\n in vec4 matVec1;\r\n in vec4 matVec2;\r\n in vec4 matVec3;\r\n in vec4 invmatVec1;\r\n in vec4 invmatVec2;\r\n in vec4 invmatVec3;\r\n\r\n uniform mat4 modelMatrix;\r\n uniform mat4 modelViewMatrix;\r\n uniform mat4 invModelViewMatrix;\r\n uniform mat3 normalMatrix;\r\n\r\n in vec4 spritePosEye;\r\n\r\n bool intersect_ray_cylinder(in vec3 origin, in vec3 ray, out vec3 point, out float frontFaced) {\r\n\r\n // intersect XZ-projected ray with circle\r\n float a = dot(ray.xz, ray.xz);\r\n float b = dot(ray.xz, origin.xz);\r\n float c = dot(origin.xz, origin.xz) - 1.0;\r\n float det = b * b - a * c;\r\n if (det < 0.0) return false;\r\n float t1 = (-b - sqrt(det)) / a;\r\n float t2 = (-b + sqrt(det)) / a;\r\n\r\n // calculate both intersection points\r\n vec3 p1 = origin + ray * t1;\r\n vec3 p2 = origin + ray * t2;\r\n\r\n float halfHeight = 0.5;\r\n\r\n // choose nearest point\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // orthografic camera is used for dirLight sources. So in it for all cylinders the point with smaller 't' is visible\r\n // if it is not outside of cylinnder (t1 is always smaller than t2).\r\n if (p1.y >= -halfHeight && p1.y <= halfHeight) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (p2.y >= -halfHeight && p2.y <= halfHeight) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #else\r\n // for perspective camera first intersection can be in front of near plane. If not intersection is p1 else - p2\r\n // t* = 0.0 corresponds to point of intersection near plane by the ray from camera to curPixel\r\n if (t1 >= 0.0 && p1.y >= -halfHeight && p1.y <= halfHeight) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (t2 >= 0.0 && p2.y >= -halfHeight && p2.y <= halfHeight) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #endif\r\n\r\n return false;\r\n }\r\n\r\n bool get_cylinder_point(in vec3 pixelPosEye, out vec3 point, out float frontFaced) {\r\n vec3 origin, ray;\r\n vec4 v;\r\n\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // transform vector from sprite center to curPixel into cylinder local coords\r\n v = invModelViewMatrix * vec4(pixelPosEye.xyz - spritePosEye.xyz, 0.0);\r\n origin = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n\r\n // transform camera orientation vector into cylinder local coords\r\n v = invModelViewMatrix * vec4(0.0, 0.0, -1.0, 0.0);\r\n ray = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n #else\r\n // find point of intersection near plane by the ray from camera to curPixel\r\n v = vec4(-(nearPlaneValue / pixelPosEye.z) * pixelPosEye, 1.0);\r\n\r\n // transform intersection point into cylinder local coords\r\n v = invModelViewMatrix * v;\r\n origin = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n\r\n // transform vector from camera pos to curPixel into cylinder local coords\r\n v = invModelViewMatrix * vec4(pixelPosEye, 0.0);\r\n ray = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n #endif\r\n ray = normalize(ray);\r\n\r\n return intersect_ray_cylinder(origin, ray, point, frontFaced);\r\n }\r\n#endif\r\n\r\n///////////////////////////////////// Pack and unpack ///////////////////////////////////////////////\r\nconst float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1)\r\nconst float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1)\r\n\r\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\r\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\r\n\r\n\r\nconst float ShiftRight8 = 1. / 256.;\r\n\r\nvec4 packDepthToRGBA( const in float v ) {\r\n vec4 r = vec4( fract( v * PackFactors ), v );\r\n r.yzw -= r.xyz * ShiftRight8; // tidy overflow\r\n return r * PackUpscale;\r\n}\r\n\r\nfloat unpackRGBAToDepth( const in vec4 v ) {\r\n return dot( v, UnpackFactors );\r\n}\r\n\r\n////////////////////////////////////////// All Lighting /////////////////////////////////////////////////\r\n#ifdef TOON_SHADING\r\n #define LOW_TOON_BORDER 0.0\r\n #define MEDIUM_TOON_BORDER 0.7\r\n #define HIGH_TOON_BORDER 1.0\r\n\r\n #define MEDIUM_TOON_RANGE 0.5\r\n #define HIGH_TOON_RANGE 0.95\r\n#endif\r\n#if defined(USE_LIGHTS) && NUM_DIR_LIGHTS > 0\r\n struct ReflectedLight {\r\n vec3 directDiffuse;\r\n vec3 directSpecular;\r\n vec3 indirectDiffuse;\r\n };\r\n\r\n struct BlinnPhongMaterial {\r\n vec3 diffuseColor;\r\n vec3 specularColor;\r\n float specularShininess;\r\n };\r\n\r\n struct GeometricContext {\r\n vec3 normal;\r\n vec3 viewDir;\r\n };\r\n\r\n struct DirectionalLight {\r\n vec3 direction;\r\n vec3 color;\r\n };\r\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\r\n\r\n struct DirectionalLightShadow {\r\n vec2 shadowMapSize;\r\n float shadowBias;\r\n float shadowRadius;\r\n };\r\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHTS ];\r\n\r\n uniform vec3 ambientLightColor;\r\n\r\n /////////////////////////////////////////// Shadowmap ////////////////////////////////////////////////\r\n\r\n #if defined(SHADOWMAP)\r\n \tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\r\n \t\treturn step( compare, unpackRGBAToDepth( texture( depths, uv ) ) );\r\n \t}\r\n\r\n float getShadow( sampler2D shadowMap, DirectionalLightShadow dirLight, vec4 shadowCoord, vec3 vViewPosition, vec3 vNormal ) {\r\n \t float shadow = 0.0;\r\n\r\n // When shadows for sprites will appear use here for them normals as it done for G-buffer\r\n shadowCoord.xyz += dirLight.shadowBias * vNormal;\r\n shadowCoord.xyz /= shadowCoord.w;\r\n\r\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\r\n bool inFrustum = all( inFrustumVec );\r\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\r\n bool frustumTest = all( frustumTestVec );\r\n\r\n if ( frustumTest ) {\r\n #ifdef SHADOWMAP_BASIC\r\n \t shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\r\n \t#endif\r\n\r\n \t#ifdef SHADOWMAP_PCF_SHARP\r\n \t vec2 texelSize = vec2( 1.0 ) / dirLight.shadowMapSize;\r\n\r\n float dx0 = - texelSize.x * dirLight.shadowRadius;\r\n float dy0 = - texelSize.y * dirLight.shadowRadius;\r\n float dx1 = + texelSize.x * dirLight.shadowRadius;\r\n float dy1 = + texelSize.y * dirLight.shadowRadius;\r\n\r\n shadow = (\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\r\n ) * ( 1.0 / 9.0 );\r\n #endif\r\n\r\n #ifdef SHADOWMAP_PCF_RAND\r\n vec2 texelSize = vec2( 1.0 ) / dirLight.shadowMapSize;\r\n\r\n vec4 vUv = ((projectionMatrix * vec4(vViewPosition, 1.0)) + 1.0) / 2.0;\r\n vec2 vUvNoise = vUv.xy / srcTexelSize * noiseTexelSize;\r\n\r\n vec2 noiseVec = normalize(texture(noiseTex, vUvNoise).rg);\r\n mat2 mNoise = mat2(noiseVec.x, noiseVec.y, -noiseVec.y, noiseVec.x);\r\n\r\n vec2 offset;\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < 4; i ++ ) { // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n offset = mNoise * ( normalize( samplesKernel[ i ]) * texelSize * dirLight.shadowRadius );\r\n shadow += texture2DCompare( shadowMap, shadowCoord.xy + offset, shadowCoord.z );\r\n }\r\n #pragma unroll_loop_end\r\n shadow /= float( 4 ); // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n #endif\r\n }\r\n return shadow;//(shadow != 1.0) ? 0.5 : 1.0;//vec4(shadow, shadow, shadow, 1.0);\r\n }\r\n #endif\r\n\r\n /////////////////////////////////////////// Lighting /////////////////////////////////////////////////\r\n\r\n vec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\r\n return RECIPROCAL_PI * diffuseColor;\r\n } // validated\r\n\r\n vec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\r\n // Original approximation by Christophe Schlick '94\r\n //;float fresnel = pow( 1.0 - dotLH, 5.0 );\r\n // Optimized variant (presented by Epic at SIGGRAPH '13)\r\n float fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\r\n return ( 1.0 - specularColor ) * fresnel + specularColor;\r\n } // validated\r\n\r\n float G_BlinnPhong_Implicit( /* const in float dotNL, const in float dotNV */ ) {\r\n // geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v)\r\n return 0.25;\r\n }\r\n\r\n float D_BlinnPhong( const in float shininess, const in float dotNH ) {\r\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\r\n }\r\n\r\n vec3 BRDF_Specular_BlinnPhong( const in DirectionalLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\r\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\r\n float dotNH = saturate(dot( geometry.normal, halfDir ));\r\n float dotLH = saturate(dot( incidentLight.direction, halfDir ));\r\n\r\n vec3 F = F_Schlick( specularColor, dotLH );\r\n float G = G_BlinnPhong_Implicit( /* dotNL, dotNV */ );\r\n float D = D_BlinnPhong( shininess, dotNH );\r\n\r\n return F * ( G * D );\r\n } // validated\r\n\r\n void RE_Direct_BlinnPhong( const in DirectionalLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight, float penumbra ) {\r\n\r\n float dotNL = saturate( dot( geometry.normal, directLight.direction ));\r\n #ifdef TOON_SHADING\r\n if(dotNL < MEDIUM_TOON_RANGE){\r\n dotNL = LOW_TOON_BORDER;\r\n }\r\n else if(dotNL < HIGH_TOON_RANGE){\r\n dotNL = MEDIUM_TOON_BORDER;\r\n }\r\n else{\r\n dotNL = HIGH_TOON_BORDER;\r\n }\r\n #endif\r\n\r\n vec3 irradiance = dotNL * directLight.color;\r\n reflectedLight.directDiffuse += penumbra * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\r\n reflectedLight.directSpecular += penumbra * irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess );\r\n }\r\n\r\n void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\r\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\r\n }\r\n\r\n vec3 calcLighting(const in GeometricContext geometry, const in BlinnPhongMaterial material, vec3 vViewPosition) {\r\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ));\r\n vec3 irradiance = ambientLightColor;\r\n\r\n float shadowMask = 1.0;\r\n // see THREE.WebGLProgram.unrollLoops\r\n \t#pragma unroll_loop_start\r\n \t for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n \t #ifdef SHADOWMAP\r\n \t shadowMask = getShadow( directionalShadowMap[ i ], directionalLightShadows[ i ], vDirLightWorldCoord[ i ], vViewPosition, vDirLightWorldNormal[ i ] );\r\n #endif\r\n\r\n \t\t if ( shadowMask > 0.0 ) RE_Direct_BlinnPhong( directionalLights[ i ], geometry, material, reflectedLight, shadowMask );\r\n \t\t}\r\n \t\t#pragma unroll_loop_end\r\n\r\n RE_IndirectDiffuse_BlinnPhong(irradiance, material, reflectedLight);\r\n\r\n return saturate(reflectedLight.indirectDiffuse + reflectedLight.directDiffuse + reflectedLight.directSpecular);\r\n }\r\n#endif\r\n\r\n/////////////////////////////////////////// Dashed Line ///////////////////////////////////////////////\r\n#ifdef DASHED_LINE\r\n uniform float dashedLineSize;\r\n uniform float dashedLinePeriod;\r\n in float vLineDistance;\r\n#endif\r\n\r\n/////////////////////////////////////////// Main ///////////////////////////////////////////////\r\nvoid main() {\r\n\r\n#ifdef CLIP_PLANE\r\n if (vViewPosition.z < clipPlaneValue) discard;\r\n#endif\r\n\r\n#ifdef ZCLIP\r\n if (vViewPosition.z < zClipValue) discard;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = vDirectionalShadowCoord[ i ];\r\n vDirLightWorldNormal[ i ] = vDirectionalShadowNormal[ i ];\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n#endif\r\n\r\n vec4 pixelPosWorld = vec4(vWorldPosition, 1.0);\r\n vec4 pixelPosEye;\r\n\r\n#ifdef SPHERE_SPRITE\r\n\r\n vec3 viewNormalSprites;\r\n float frontFaced = 1.0;\r\n vec3 normal;\r\n\r\n/* quick-and-dirty method\r\n normal.xy = ' + INSTANCED_SPRITE_OVERSCALE + ' * (2.0 * vUv - 1.0);\r\n float r2 = dot(normal.xy, normal.xy);\r\n if (r2 > 1.0) discard;\r\n float normalZ = sqrt(1.0 - r2);\r\n normal.z = normalZ;\r\n normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\r\n pixelPosEye = vec4(spritePosEye.xyz, 1.0);\r\n pixelPosEye.z += spritePosEye.w * normalZ;\r\n*/\r\n\r\n // ray-trace sphere surface\r\n {\r\n vec3 p;\r\n if (!get_sphere_point(-vViewPosition, p, frontFaced)) discard;\r\n vec4 v = vec4(instOffset.xyz + p * instOffset.w, 1.0);\r\n pixelPosWorld = modelMatrix * v;\r\n pixelPosEye = modelViewMatrix * v;\r\n normal = normalize(normalMatrix * p);\r\n #ifdef NORMALS_TO_G_BUFFER\r\n viewNormalSprites = normalize(mat3(modelViewMatrix)*p);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = directionalShadowMatrix[ i ] * pixelPosWorld;\r\n vDirLightWorldNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(p, 0.0))).xyz;\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n #endif\r\n }\r\n#endif\r\n\r\n#ifdef CYLINDER_SPRITE\r\n vec3 normal;\r\n vec3 viewNormalSprites;\r\n float frontFaced = 1.0;\r\n float cylinderY = 0.0;\r\n\r\n // ray-trace cylinder surface\r\n {\r\n vec3 p;\r\n if (!get_cylinder_point(-vViewPosition, p, frontFaced)) discard;\r\n\r\n cylinderY = 0.5 * (p.y + 1.0);\r\n\r\n vec4 v = vec4(p, 1.0);\r\n v = vec4(dot(v, matVec1), dot(v, matVec2), dot(v, matVec3), 1.0);\r\n pixelPosWorld = modelMatrix * v;\r\n pixelPosEye = modelViewMatrix * v;\r\n\r\n vec3 localNormal = normalize(vec3(p.x, 0.0, p.z));\r\n normal = vec3(\r\n dot(localNormal, matVec1.xyz),\r\n dot(localNormal, matVec2.xyz),\r\n dot(localNormal, matVec3.xyz));\r\n #ifdef NORMALS_TO_G_BUFFER\r\n viewNormalSprites = normalize(mat3(modelViewMatrix)*normal);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = directionalShadowMatrix[ i ] * pixelPosWorld;\r\n vDirLightWorldNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(normal, 0.0))).xyz;\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n #endif\r\n\r\n normal = normalize(normalMatrix * normal);\r\n }\r\n#endif\r\n\r\n #ifdef ATTR_COLOR\r\n vec3 vertexColor = vColor;\r\n #else\r\n vec3 vertexColor = vec3(1.0, 1.0, 1.0);\r\n #endif\r\n\r\n #ifdef ATTR_COLOR2\r\n #ifdef CYLINDER_SPRITE\r\n float colorCoef = cylinderY; // cylinder parameter is calculated from ray-tracing\r\n #else\r\n float colorCoef = vUv.y; // cylinder parameter is interpolated as tex coord\r\n #endif\r\n // choose either color or color2\r\n vertexColor = mix(vColor2, vColor, step(0.5, colorCoef));\r\n #endif\r\n\r\n // negative red component is a special condition\r\n if (vertexColor.x < 0.0) discard;\r\n\r\n #ifdef DASHED_LINE\r\n if ( mod( vLineDistance, dashedLinePeriod ) > dashedLineSize ) discard;\r\n #endif\r\n\r\n // transparency prepass writes only z, so we don't need to calc the color\r\n #ifdef PREPASS_TRANSP\r\n fragColor = vec4(1.0, 1.0, 1.0, 1.0);\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepth = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n #endif\r\n return;\r\n #endif\r\n\r\n float totalOpacity = opacity;\r\n\r\n #ifdef ATTR_ALPHA_COLOR\r\n totalOpacity *= alphaCol;\r\n #endif\r\n\r\n // discard fully transparent pixels\r\n if (totalOpacity == 0.0) discard;\r\n\r\n #ifdef FAKE_OPACITY\r\n // discard pixels in checker pattern\r\n vec2 dm_coord = floor(gl_FragCoord.xy);\r\n dm_coord = fract(dm_coord * 0.5);\r\n if (totalOpacity < 1.0 && (dm_coord.x < 0.5 ^^ dm_coord.y < 0.5)) discard;\r\n vec4 diffuseColor = vec4(diffuse, 1.0);\r\n #else\r\n vec4 diffuseColor = vec4(diffuse, totalOpacity);\r\n #endif\r\n\r\n float flipNormal;\r\n #if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n flipNormal = 1.0;\r\n #ifdef DOUBLE_SIDED\r\n flipNormal = float( gl_FrontFacing );\r\n #endif\r\n vec3 normal = normalize( vNormal ) * flipNormal;\r\n #endif\r\n\r\n diffuseColor.rgb *= vertexColor;\r\n\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepth = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n #endif\r\n\r\n #ifdef NORMALS_TO_G_BUFFER\r\n #if defined (SPHERE_SPRITE) || defined (CYLINDER_SPRITE)\r\n vec3 viewNormaInColor = viewNormalSprites;\r\n #else\r\n vec3 viewNormaInColor = viewNormal;\r\n float frontFaced = float( gl_FrontFacing );\r\n #endif\r\n // [-1, 1] -> [0, 1]\r\n viewNormaInColor = 0.5 * viewNormaInColor + 0.5;\r\n fragNormal = vec4(viewNormaInColor, frontFaced);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && NUM_DIR_LIGHTS > 0\r\n vec3 viewDir;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n viewDir = -pixelPosEye.xyz;\r\n #else\r\n viewDir = vViewPosition;\r\n #endif\r\n GeometricContext geometry = GeometricContext(normal, normalize( viewDir ));\r\n BlinnPhongMaterial material = BlinnPhongMaterial(diffuseColor.rgb, specular, shininess);\r\n vec3 outgoingLight = calcLighting(geometry, material, viewDir);\r\n #else\r\n vec3 outgoingLight = diffuseColor.rgb;\r\n #endif\r\n\r\n #ifdef COLOR_FROM_DEPTH\r\n float depth = 0.0;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepth = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n depth = gl_FragDepth;\r\n #else\r\n depth = gl_FragCoord.z;\r\n #endif\r\n fragColor = packDepthToRGBA(depth);\r\n return;\r\n #endif\r\n\r\n #ifdef COLOR_FROM_POS\r\n fragColor = world2colorMatrix * pixelPosWorld;\r\n #else\r\n #ifdef OVERRIDE_COLOR\r\n fragColor = vec4(fixedColor, diffuseColor.a);\r\n #else\r\n fragColor = vec4(outgoingLight, diffuseColor.a);//vec4(vNormal, 1.0);\r\n #endif\r\n\r\n #ifdef USE_FOG\r\n float viewDistance;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n viewDistance = abs(pixelPosEye.z);\r\n #else\r\n viewDistance = vViewPosition.z;\r\n #endif\r\n float fogFactor = smoothstep( fogNear, fogFar, viewDistance) * fogAlpha;\r\n #ifdef FOG_TRANSPARENT\r\n fragColor.a = fragColor.a * (1.0 - fogFactor);\r\n #else\r\n fragColor.rgb = mix( fragColor.rgb, fogColor, fogFactor );\r\n #endif\r\n #endif\r\n\r\n #endif\r\n}\r\n"; +;// ./src/gfx/capabilities.js /* harmony default export */ const capabilities = ({ precision: 'mediump', /** @@ -16727,7 +16784,7 @@ const gfx_shaders_Uber_namespaceObject = "#if defined (NORMALS_TO_G_BUFFER)\r\n this.precision = renderer.capabilities.getMaxPrecision('highp'); } }); -;// CONCATENATED MODULE: ./src/gfx/noiseTexture.js +;// ./src/gfx/noiseTexture.js const noiseWidth = 4; const noiseHeight = 4; @@ -16744,9 +16801,7 @@ noiseTexture.needsUpdate = true; noiseHeight, noiseTexture }); -;// CONCATENATED MODULE: ./src/gfx/shaders/UberMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/UberMaterial.js @@ -16956,9 +17011,10 @@ class UberMaterial extends external_module_three_commonjs_three_commonjs2_three_ // set default values super.setValues({ - uniforms: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.UniformsUtils.clone(defaultUniforms), + glslVersion: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.GLSL3, vertexShader: this.precisionString() + Uber_namespaceObject, fragmentShader: this.precisionString() + gfx_shaders_Uber_namespaceObject, + uniforms: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.UniformsUtils.clone(defaultUniforms), lights: true, fog: true, side: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.DoubleSide @@ -17144,12 +17200,12 @@ class UberMaterial extends external_module_three_commonjs_three_commonjs2_three_ } UberMaterial.prototype.uberOptions = uberOptions; /* harmony default export */ const shaders_UberMaterial = (UberMaterial); -;// CONCATENATED MODULE: ./src/gfx/meshes/UberObject.js +;// ./src/gfx/meshes/UberObject.js /* harmony default export */ function UberObject(SuperClass) { class NewObjectType extends SuperClass { - constructor() { - super(...arguments); + constructor(...rest) { + super(...rest); this.onBeforeRender = NewObjectType.prototype.onBeforeRender; } onBeforeRender(renderer, scene, camera, geometry, material, group) { @@ -17171,13 +17227,13 @@ UberMaterial.prototype.uberOptions = uberOptions; } return NewObjectType; } -;// CONCATENATED MODULE: ./src/gfx/meshes/ZSpriteMesh.js +;// ./src/gfx/meshes/ZSpriteMesh.js const Mesh = UberObject(external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Mesh); class ZSpriteMesh extends Mesh { - constructor() { - super(...arguments); + constructor(...rest) { + super(...rest); this.castShadow = true; this.receiveShadow = true; } @@ -17201,7 +17257,7 @@ class ZSpriteMesh extends Mesh { } } /* harmony default export */ const meshes_ZSpriteMesh = (ZSpriteMesh); -;// CONCATENATED MODULE: ./src/gfx/meshes/ZClippedMesh.js +;// ./src/gfx/meshes/ZClippedMesh.js const ZClippedMesh_Mesh = UberObject(external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Mesh); @@ -17211,9 +17267,9 @@ class ZClippedMesh extends ZClippedMesh_Mesh { this.castShadow = true; this.receiveShadow = true; } - static _mvLength = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3())(); - static _center = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3())(); - static _modelView = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Matrix4())(); + static _mvLength = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(); + static _center = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(); + static _modelView = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Matrix4(); _onBeforeRender(renderer, scene, camera) { ZClippedMesh_Mesh.prototype._onBeforeRender.call(this, renderer, scene, camera); const geo = this.geometry; @@ -17235,7 +17291,7 @@ class ZClippedMesh extends ZClippedMesh_Mesh { } } /* harmony default export */ const meshes_ZClippedMesh = (ZClippedMesh); -;// CONCATENATED MODULE: ./src/gfx/meshes/TextMesh.js +;// ./src/gfx/meshes/TextMesh.js @@ -17297,7 +17353,7 @@ class TextMesh extends external_module_three_commonjs_three_commonjs2_three_amd_ } } /* harmony default export */ const meshes_TextMesh = (TextMesh); -;// CONCATENATED MODULE: ./src/gfx/meshes/SimpleMesh.js +;// ./src/gfx/meshes/SimpleMesh.js const SimpleMesh_Mesh = UberObject(external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Mesh); @@ -17309,7 +17365,7 @@ class SimpleMesh extends SimpleMesh_Mesh { } } /* harmony default export */ const meshes_SimpleMesh = (SimpleMesh); -;// CONCATENATED MODULE: ./src/gfx/meshes/ThickLineMesh.js +;// ./src/gfx/meshes/ThickLineMesh.js const ThickLineMesh_Mesh = UberObject(external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Mesh); @@ -17328,19 +17384,19 @@ class ThickLineMesh extends ThickLineMesh_Mesh { } } /* harmony default export */ const meshes_ThickLineMesh = (ThickLineMesh); -;// CONCATENATED MODULE: ./src/gfx/meshes/InstancedMesh.js +;// ./src/gfx/meshes/InstancedMesh.js const InstancedMesh_Mesh = UberObject(external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Mesh); class InstancedMesh extends InstancedMesh_Mesh { - constructor() { - super(...arguments); + constructor(...rest) { + super(...rest); this.castShadow = true; this.receiveShadow = true; } } /* harmony default export */ const meshes_InstancedMesh = (InstancedMesh); -;// CONCATENATED MODULE: ./src/gfx/meshes/meshes.js +;// ./src/gfx/meshes/meshes.js @@ -17359,7 +17415,7 @@ class InstancedMesh extends InstancedMesh_Mesh { ThickLineMesh: meshes_ThickLineMesh, Instanced: meshes_InstancedMesh }); -;// CONCATENATED MODULE: ./src/gfx/meshes/MeshCreator.js +;// ./src/gfx/meshes/MeshCreator.js @@ -17482,12 +17538,12 @@ class MeshCreator { } } /* harmony default export */ const meshes_MeshCreator = (MeshCreator); -;// CONCATENATED MODULE: ./src/gfx/meshes/TransformGroup.js +;// ./src/gfx/meshes/TransformGroup.js class TransformGroup extends external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Object3D { - static _inverseMatrix = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Matrix4())(); - static _ray = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Ray())(); + static _inverseMatrix = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Matrix4(); + static _ray = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Ray(); constructor(geometry, geoParams, material, transforms) { super(); this._geometry = geometry; @@ -17557,7 +17613,7 @@ class TransformGroup extends external_module_three_commonjs_three_commonjs2_thre } } /* harmony default export */ const meshes_TransformGroup = (TransformGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/ChemGroup.js +;// ./src/gfx/modes/groups/ChemGroup.js function wrapper(Name, args) { @@ -17616,7 +17672,7 @@ class ChemGroup extends gfx_RCGroup { } } /* harmony default export */ const groups_ChemGroup = (ChemGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AtomsGroup.js +;// ./src/gfx/modes/groups/AtomsGroup.js class AtomsGroup extends groups_ChemGroup { raycast(raycaster, intersects) { @@ -17654,7 +17710,7 @@ class AtomsGroup extends groups_ChemGroup { } } /* harmony default export */ const groups_AtomsGroup = (AtomsGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AtomsSphereGroup.js +;// ./src/gfx/modes/groups/AtomsSphereGroup.js class AtomsSphereGroup extends groups_AtomsGroup { _makeGeoArgs() { @@ -17698,7 +17754,7 @@ class AtomsSphereGroup extends groups_AtomsGroup { } } /* harmony default export */ const groups_AtomsSphereGroup = (AtomsSphereGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AtomsSurfaceGroup.js +;// ./src/gfx/modes/groups/AtomsSurfaceGroup.js class AtomsSurfaceGroup extends groups_AtomsSphereGroup { _makeGeoArgs() { @@ -17717,7 +17773,7 @@ class AtomsSurfaceGroup extends groups_AtomsSphereGroup { } } /* harmony default export */ const groups_AtomsSurfaceGroup = (AtomsSurfaceGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AtomsSASSESGroupStub.js +;// ./src/gfx/modes/groups/AtomsSASSESGroupStub.js /* This is a stub class keep it until SAS/SES is refactored */ @@ -17740,7 +17796,7 @@ class AtomsSASSESGroupStub extends groups_AtomsSphereGroup { } } /* harmony default export */ const groups_AtomsSASSESGroupStub = (AtomsSASSESGroupStub); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AtomsTextGroup.js +;// ./src/gfx/modes/groups/AtomsTextGroup.js function adjustColor(color) { @@ -17884,7 +17940,7 @@ class AtomsTextGroup extends groups_AtomsGroup { } } /* harmony default export */ const groups_AtomsTextGroup = (AtomsTextGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AromaticGroup.js +;// ./src/gfx/modes/groups/AromaticGroup.js function _slerp(omega, v1, v2, t) { @@ -17946,7 +18002,7 @@ class AromaticGroup extends groups_AtomsGroup { } } /* harmony default export */ const groups_AromaticGroup = (AromaticGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AromaticTorusGroup.js +;// ./src/gfx/modes/groups/AromaticTorusGroup.js @@ -17988,7 +18044,7 @@ class AromaticTorusGroup extends groups_AromaticGroup { } } /* harmony default export */ const groups_AromaticTorusGroup = (AromaticTorusGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AromaticLinesGroup.js +;// ./src/gfx/modes/groups/AromaticLinesGroup.js class AromaticLinesGroup extends groups_AromaticGroup { _build() { @@ -18011,7 +18067,7 @@ class AromaticLinesGroup extends groups_AromaticGroup { } } /* harmony default export */ const groups_AromaticLinesGroup = (AromaticLinesGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/ResiduesGroup.js +;// ./src/gfx/modes/groups/ResiduesGroup.js class ResiduesGroup extends groups_ChemGroup { raycast(raycaster, intersects) { @@ -18049,7 +18105,7 @@ class ResiduesGroup extends groups_ChemGroup { } } /* harmony default export */ const groups_ResiduesGroup = (ResiduesGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/NucleicItemGroup.js +;// ./src/gfx/modes/groups/NucleicItemGroup.js class NucleicItemGroup extends groups_ResiduesGroup { raycast(raycaster, intersects) { @@ -18125,7 +18181,7 @@ class NucleicItemGroup extends groups_ResiduesGroup { } } /* harmony default export */ const groups_NucleicItemGroup = (NucleicItemGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/NucleicCylindersGroup.js +;// ./src/gfx/modes/groups/NucleicCylindersGroup.js class NucleicCylindersGroup extends groups_NucleicItemGroup { _makeGeoArgs() { @@ -18138,7 +18194,7 @@ class NucleicCylindersGroup extends groups_NucleicItemGroup { } } /* harmony default export */ const groups_NucleicCylindersGroup = (NucleicCylindersGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/NucleicSpheresGroup.js +;// ./src/gfx/modes/groups/NucleicSpheresGroup.js class NucleicSpheresGroup extends groups_NucleicItemGroup { _makeGeoArgs() { @@ -18157,7 +18213,7 @@ class NucleicSpheresGroup extends groups_NucleicItemGroup { /* harmony default export */ const groups_NucleicSpheresGroup = (NucleicSpheresGroup); // EXTERNAL MODULE: ./vendor/js/Smooth.js var Smooth = __webpack_require__(690); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/CartoonHelper.js +;// ./src/gfx/modes/groups/CartoonHelper.js @@ -18333,7 +18389,7 @@ class CartoonHelper { } } /* harmony default export */ const groups_CartoonHelper = (CartoonHelper); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/ResiduesSubseqGroup.js +;// ./src/gfx/modes/groups/ResiduesSubseqGroup.js @@ -18395,9 +18451,7 @@ class ResiduesSubseqGroup extends groups_ResiduesGroup { const geo = this._geo; let chunkIdx = 0; const chunkIdc = []; - _loopThrough(this._selection.subdivs, residues, this._segmentsHeight, tension, mode, function (currRes, mtc) { - let hasSlope = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - let hasCut = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + _loopThrough(this._selection.subdivs, residues, this._segmentsHeight, tension, mode, (currRes, mtc, hasSlope = false, hasCut = false) => { const color = colorer.getResidueColor(currRes, parent); chunkIdc[chunkIdx] = currRes._index; geo.setItem(chunkIdx, mtc, hasSlope, hasCut); @@ -18430,7 +18484,7 @@ class ResiduesSubseqGroup extends groups_ResiduesGroup { } } /* harmony default export */ const groups_ResiduesSubseqGroup = (ResiduesSubseqGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/ResiduesTraceGroup.js +;// ./src/gfx/modes/groups/ResiduesTraceGroup.js class ResiduesTraceGroup extends groups_ChemGroup { _makeGeoArgs() { @@ -18554,7 +18608,7 @@ class ResiduesTraceGroup extends groups_ChemGroup { } } /* harmony default export */ const groups_ResiduesTraceGroup = (ResiduesTraceGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/BondsGroup.js +;// ./src/gfx/modes/groups/BondsGroup.js function getCylinderCount(bondOrder) { @@ -18623,7 +18677,7 @@ class BondsGroup extends groups_ChemGroup { } } /* harmony default export */ const groups_BondsGroup = (BondsGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/BondsCylinderGroup.js +;// ./src/gfx/modes/groups/BondsCylinderGroup.js class BondsCylinderGroup extends groups_BondsGroup { @@ -18715,7 +18769,7 @@ class BondsCylinderGroup extends groups_BondsGroup { } } /* harmony default export */ const groups_BondsCylinderGroup = (BondsCylinderGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/BondsLinesGroup.js +;// ./src/gfx/modes/groups/BondsLinesGroup.js const STEP_SIZE = 0.15; @@ -18826,7 +18880,7 @@ class BondsLinesGroup extends groups_BondsGroup { } } /* harmony default export */ const groups_BondsLinesGroup = (BondsLinesGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/groups.js +;// ./src/gfx/modes/groups/groups.js @@ -18853,7 +18907,7 @@ class BondsLinesGroup extends groups_BondsGroup { BondsCylinderGroup: groups_BondsCylinderGroup, BondsLinesGroup: groups_BondsLinesGroup }); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/AtomsProcessor.js +;// ./src/gfx/modes/processors/AtomsProcessor.js class AtomsProcessor extends gfx_RCGroup { constructor(AtomsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) { @@ -18907,7 +18961,7 @@ class AtomsProcessor extends gfx_RCGroup { } } /* harmony default export */ const processors_AtomsProcessor = (AtomsProcessor); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/OrphanAtomsProcessor.js +;// ./src/gfx/modes/processors/OrphanAtomsProcessor.js class OrphanAtomsProcessor extends processors_AtomsProcessor { _checkAtom(atom, mask) { @@ -18926,7 +18980,7 @@ class OrphanAtomsProcessor extends processors_AtomsProcessor { } } /* harmony default export */ const processors_OrphanAtomsProcessor = (OrphanAtomsProcessor); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/ResiduesProcessor.js +;// ./src/gfx/modes/processors/ResiduesProcessor.js class ResiduesProcessor extends gfx_RCGroup { constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) { @@ -18978,7 +19032,7 @@ class ResiduesProcessor extends gfx_RCGroup { } } /* harmony default export */ const processors_ResiduesProcessor = (ResiduesProcessor); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/NucleicProcessor.js +;// ./src/gfx/modes/processors/NucleicProcessor.js class NucleicProcessor extends processors_ResiduesProcessor { _checkResidue(residue, mask) { @@ -18986,7 +19040,7 @@ class NucleicProcessor extends processors_ResiduesProcessor { } } /* harmony default export */ const processors_NucleicProcessor = (NucleicProcessor); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/SubseqsProcessor.js +;// ./src/gfx/modes/processors/SubseqsProcessor.js class SubseqsProcessor extends gfx_RCGroup { constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) { @@ -19040,7 +19094,7 @@ class SubseqsProcessor extends gfx_RCGroup { } } /* harmony default export */ const processors_SubseqsProcessor = (SubseqsProcessor); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/BondsProcessor.js +;// ./src/gfx/modes/processors/BondsProcessor.js class BondsProcessor extends gfx_RCGroup { constructor(BondsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) { @@ -19092,7 +19146,7 @@ class BondsProcessor extends gfx_RCGroup { } } /* harmony default export */ const processors_BondsProcessor = (BondsProcessor); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/AromaticProcessor.js +;// ./src/gfx/modes/processors/AromaticProcessor.js class AromaticProcessor extends gfx_RCGroup { constructor(AromaticGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) { @@ -19152,7 +19206,7 @@ class AromaticProcessor extends gfx_RCGroup { } } /* harmony default export */ const processors_AromaticProcessor = (AromaticProcessor); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/processors.js +;// ./src/gfx/modes/processors/processors.js @@ -19169,7 +19223,7 @@ class AromaticProcessor extends gfx_RCGroup { Bonds: processors_BondsProcessor, Aromatic: processors_AromaticProcessor }); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/GroupsFactory.js +;// ./src/gfx/modes/groups/GroupsFactory.js @@ -19237,7 +19291,7 @@ class GroupsFactory { } } /* harmony default export */ const groups_GroupsFactory = (GroupsFactory); -;// CONCATENATED MODULE: ./src/gfx/modes/Mode.js +;// ./src/gfx/modes/Mode.js @@ -19319,7 +19373,7 @@ Mode.prototype.id = '__'; */ Mode.prototype.depGroups = []; /* harmony default export */ const modes_Mode = (Mode); -;// CONCATENATED MODULE: ./src/gfx/modes/LinesMode.js +;// ./src/gfx/modes/LinesMode.js function getRenderParams() { return { @@ -19357,8 +19411,7 @@ LinesMode.prototype.name = 'Lines'; LinesMode.prototype.shortName = 'Lines'; LinesMode.prototype.depGroups = ['ALoopsLines', 'BondsLines', 'OrphanedAtomsCrosses']; /* harmony default export */ const modes_LinesMode = (LinesMode); -;// CONCATENATED MODULE: ./src/gfx/modes/LicoriceMode.js -/* eslint-disable no-magic-numbers */ +;// ./src/gfx/modes/LicoriceMode.js class LicoriceMode extends modes_Mode { static id = 'LC'; @@ -19386,8 +19439,7 @@ LicoriceMode.prototype.name = 'Licorice'; LicoriceMode.prototype.shortName = 'Licorice'; LicoriceMode.prototype.depGroups = ['AtomsSpheres', 'BondsCylinders', 'ALoopsTorus']; /* harmony default export */ const modes_LicoriceMode = (LicoriceMode); -;// CONCATENATED MODULE: ./src/gfx/modes/BallsAndSticksMode.js -/* eslint-disable no-magic-numbers */ +;// ./src/gfx/modes/BallsAndSticksMode.js class BallsAndSticksMode extends modes_Mode { static id = 'BS'; @@ -19415,7 +19467,7 @@ BallsAndSticksMode.prototype.name = 'Balls and Sticks'; BallsAndSticksMode.prototype.shortName = 'Balls'; BallsAndSticksMode.prototype.depGroups = ['AtomsSpheres', 'BondsCylinders', 'ALoopsTorus']; /* harmony default export */ const modes_BallsAndSticksMode = (BallsAndSticksMode); -;// CONCATENATED MODULE: ./src/gfx/modes/VanDerWaalsMode.js +;// ./src/gfx/modes/VanDerWaalsMode.js class VanDerWaalsMode extends modes_Mode { static id = 'VW'; @@ -19428,7 +19480,7 @@ VanDerWaalsMode.prototype.name = 'Van der Waals'; VanDerWaalsMode.prototype.shortName = 'VDW'; VanDerWaalsMode.prototype.depGroups = ['AtomsSpheres']; /* harmony default export */ const modes_VanDerWaalsMode = (VanDerWaalsMode); -;// CONCATENATED MODULE: ./src/gfx/modes/TraceMode.js +;// ./src/gfx/modes/TraceMode.js class TraceMode extends modes_Mode { static id = 'TR'; @@ -19441,7 +19493,7 @@ TraceMode.prototype.name = 'Trace'; TraceMode.prototype.shortName = 'Trace'; TraceMode.prototype.depGroups = ['TraceChains']; /* harmony default export */ const modes_TraceMode = (TraceMode); -;// CONCATENATED MODULE: ./src/gfx/modes/TubeMode.js +;// ./src/gfx/modes/TubeMode.js class TubeMode extends modes_Mode { @@ -19466,7 +19518,7 @@ TubeMode.prototype.name = 'Tube'; TubeMode.prototype.shortName = 'Tube'; TubeMode.prototype.depGroups = ['CartoonChains']; /* harmony default export */ const modes_TubeMode = (TubeMode); -;// CONCATENATED MODULE: ./src/gfx/modes/CartoonMode.js +;// ./src/gfx/modes/CartoonMode.js class CartoonMode extends modes_Mode { @@ -19549,7 +19601,7 @@ CartoonMode.prototype.name = 'Cartoon'; CartoonMode.prototype.shortName = 'Cartoon'; CartoonMode.prototype.depGroups = ['CartoonChains', 'NucleicSpheres', 'NucleicCylinders']; /* harmony default export */ const modes_CartoonMode = (CartoonMode); -;// CONCATENATED MODULE: ./src/gfx/modes/SurfaceMode.js +;// ./src/gfx/modes/SurfaceMode.js const { @@ -19588,7 +19640,7 @@ class SurfaceMode extends modes_Mode { SurfaceMode.prototype.isSurface = true; SurfaceMode.prototype.surfaceNames = []; /* harmony default export */ const modes_SurfaceMode = (SurfaceMode); -;// CONCATENATED MODULE: ./src/gfx/modes/QuickSurfaceMode.js +;// ./src/gfx/modes/QuickSurfaceMode.js class QuickSurfaceMode extends modes_SurfaceMode { static id = 'QS'; @@ -19609,7 +19661,7 @@ QuickSurfaceMode.prototype.name = 'Quick Surface'; QuickSurfaceMode.prototype.shortName = 'Quick Surf'; QuickSurfaceMode.prototype.surfaceNames = ['QuickSurfGeo']; /* harmony default export */ const modes_QuickSurfaceMode = (QuickSurfaceMode); -;// CONCATENATED MODULE: ./src/gfx/modes/IsoSurfaceMode.js +;// ./src/gfx/modes/IsoSurfaceMode.js class IsoSurfaceMode extends modes_SurfaceMode { constructor(excludeProbe, opts) { @@ -19637,7 +19689,7 @@ IsoSurfaceMode.prototype.surfaceNames = ['SASSESSurfaceGeo']; IsoSurfaceMode.prototype._radScale = 1; IsoSurfaceMode.prototype._excludeProbe = false; /* harmony default export */ const modes_IsoSurfaceMode = (IsoSurfaceMode); -;// CONCATENATED MODULE: ./src/gfx/modes/IsoSurfaceSASMode.js +;// ./src/gfx/modes/IsoSurfaceSASMode.js class IsoSurfaceSASMode extends modes_IsoSurfaceMode { static id = 'SA'; @@ -19649,7 +19701,7 @@ IsoSurfaceSASMode.prototype.id = 'SA'; IsoSurfaceSASMode.prototype.name = 'Solvent Accessible Surface'; IsoSurfaceSASMode.prototype.shortName = 'SAS'; /* harmony default export */ const modes_IsoSurfaceSASMode = (IsoSurfaceSASMode); -;// CONCATENATED MODULE: ./src/gfx/modes/IsoSurfaceSESMode.js +;// ./src/gfx/modes/IsoSurfaceSESMode.js class IsoSurfaceSESMode extends modes_IsoSurfaceMode { static id = 'SE'; @@ -19661,7 +19713,7 @@ IsoSurfaceSESMode.prototype.id = 'SE'; IsoSurfaceSESMode.prototype.name = 'Solvent Excluded Surface'; IsoSurfaceSESMode.prototype.shortName = 'SES'; /* harmony default export */ const modes_IsoSurfaceSESMode = (IsoSurfaceSESMode); -;// CONCATENATED MODULE: ./src/gfx/modes/ContactSurfaceMode.js +;// ./src/gfx/modes/ContactSurfaceMode.js class ContactSurfaceMode extends modes_SurfaceMode { static id = 'CS'; @@ -19684,7 +19736,7 @@ ContactSurfaceMode.prototype.shortName = 'Contact Surf'; ContactSurfaceMode.prototype.isSurface = true; ContactSurfaceMode.prototype.surfaceNames = ['ContactSurfaceGeo']; /* harmony default export */ const modes_ContactSurfaceMode = (ContactSurfaceMode); -;// CONCATENATED MODULE: ./src/gfx/modes/TextMode.js +;// ./src/gfx/modes/TextMode.js class TextMode extends modes_Mode { @@ -19705,7 +19757,7 @@ TextMode.prototype.name = 'Text mode'; TextMode.prototype.shortName = 'Text'; TextMode.prototype.depGroups = ['TextLabelsGeo']; /* harmony default export */ const modes_TextMode = (TextMode); -;// CONCATENATED MODULE: ./src/gfx/modes.js +;// ./src/gfx/modes.js @@ -19721,7 +19773,7 @@ TextMode.prototype.depGroups = ['TextLabelsGeo']; const modes = new utils_EntityList([modes_LinesMode, modes_LicoriceMode, modes_BallsAndSticksMode, modes_VanDerWaalsMode, modes_TraceMode, modes_TubeMode, modes_CartoonMode, modes_QuickSurfaceMode, modes_IsoSurfaceSASMode, modes_IsoSurfaceSESMode, modes_ContactSurfaceMode, modes_TextMode]); /* harmony default export */ const gfx_modes = (modes); -;// CONCATENATED MODULE: ./src/gfx/palettes/Palette.js +;// ./src/gfx/palettes/Palette.js function clamp(x, a, b) { return x <= b ? x < 0 ? 0 : x : b; @@ -19744,13 +19796,11 @@ class Palette { this.name = name || 'Custom'; this.id = id || 'CP'; } - getElementColor(name) { - let asIs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + getElementColor(name, asIs = false) { const color = this.elementColors[name]; return color === undefined && !asIs ? this.defaultElementColor : color; } - getResidueColor(name) { - let asIs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + getResidueColor(name, asIs = false) { const color = this.residueColors[name]; return color === undefined && !asIs ? this.defaultResidueColor : color; } @@ -19759,8 +19809,7 @@ class Palette { chain = ((chain < 0 ? 0 : chain >= 256 ? chain - 256 : chain) & 0x1F) % this.chainColors.length; return this.chainColors[chain]; } - getSecondaryColor(type) { - let asIs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + getSecondaryColor(type, asIs = false) { const color = this.secondaryColors[type]; return color === undefined && !asIs ? this.defaultSecondaryColor : color; } @@ -19783,8 +19832,7 @@ class Palette { left = clamp(left, 0, count - 1); return lerpColor(gradient[left], gradient[right], index - left); } - getNamedColor(name) { - let asIs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + getNamedColor(name, asIs = false) { const color = this.namedColors[name]; return color === undefined && !asIs ? this.defaultNamedColor : color; } @@ -19807,8 +19855,6 @@ external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_default( ['indianred', 0xcd5c5c], ['lightcoral', 0xf08080], ['salmon', 0xfa8072], ['darksalmon', 0xe9967a], ['lightsalmon', 0xffa07a], ['crimson', 0xdc143c], ['red', 0xff0000], ['firebrick', 0xb22222], ['darkred', 0x8b0000], ['pink', 0xffc0cb], ['lightpink', 0xffb6c1], ['hotpink', 0xff69b4], ['deeppink', 0xff1493], ['mediumvioletred', 0xc71585], ['palevioletred', 0xdb7093], ['coral', 0xff7f50], ['tomato', 0xff6347], ['orangered', 0xff4500], ['darkorange', 0xff8c00], ['orange', 0xffa500], ['gold', 0xffd700], ['yellow', 0xffff00], ['lightyellow', 0xffffe0], ['lemonchiffon', 0xfffacd], ['lightgoldenrodyellow', 0xfafad2], ['papayawhip', 0xffefd5], ['moccasin', 0xffe4b5], ['peachpuff', 0xffdab9], ['palegoldenrod', 0xeee8aa], ['khaki', 0xf0e68c], ['darkkhaki', 0xbdb76b], ['lavender', 0xe6e6fa], ['thistle', 0xd8bfd8], ['plum', 0xdda0dd], ['violet', 0xee82ee], ['orchid', 0xda70d6], ['fuchsia', 0xff00ff], ['magenta', 0xff00ff], ['mediumorchid', 0xba55d3], ['mediumpurple', 0x9370db], ['rebeccapurple', 0x663399], ['blueviolet', 0x8a2be2], ['darkviolet', 0x9400d3], ['darkorchid', 0x9932cc], ['darkmagenta', 0x8b008b], ['purple', 0x800080], ['indigo', 0x4b0082], ['slateblue', 0x6a5acd], ['mediumslateblue', 0x7b68ee], ['darkslateblue', 0x483d8b], ['greenyellow', 0xadff2f], ['chartreuse', 0x7fff00], ['lawngreen', 0x7cfc00], ['lime', 0x00ff00], ['limegreen', 0x32cd32], ['palegreen', 0x98fb98], ['lightgreen', 0x90ee90], ['mediumspringgreen', 0x00fa9a], ['springgreen', 0x00ff7f], ['mediumseagreen', 0x3cb371], ['seagreen', 0x2e8b57], ['forestgreen', 0x228b22], ['green', 0x008000], ['darkgreen', 0x006400], ['yellowgreen', 0x9acd32], ['olivedrab', 0x6b8e23], ['olive', 0x808000], ['darkolivegreen', 0x556b2f], ['mediumaquamarine', 0x66cdaa], ['darkseagreen', 0x8fbc8f], ['lightseagreen', 0x20b2aa], ['darkcyan', 0x008b8b], ['teal', 0x008080], ['aqua', 0x00ffff], ['cyan', 0x00ffff], ['lightcyan', 0xe0ffff], ['paleturquoise', 0xafeeee], ['aquamarine', 0x7fffd4], ['turquoise', 0x40e0d0], ['mediumturquoise', 0x48d1cc], ['darkturquoise', 0x00ced1], ['cadetblue', 0x5f9ea0], ['steelblue', 0x4682b4], ['lightsteelblue', 0xb0c4de], ['powderblue', 0xb0e0e6], ['lightblue', 0xadd8e6], ['skyblue', 0x87ceeb], ['lightskyblue', 0x87cefa], ['deepskyblue', 0x00bfff], ['dodgerblue', 0x1e90ff], ['cornflowerblue', 0x6495ed], ['royalblue', 0x4169e1], ['blue', 0x0000ff], ['mediumblue', 0x0000cd], ['darkblue', 0x00008b], ['navy', 0x000080], ['midnightblue', 0x191970], ['cornsilk', 0xfff8dc], ['blanchedalmond', 0xffebcd], ['bisque', 0xffe4c4], ['navajowhite', 0xffdead], ['wheat', 0xf5deb3], ['burlywood', 0xdeb887], ['tan', 0xd2b48c], ['rosybrown', 0xbc8f8f], ['sandybrown', 0xf4a460], ['goldenrod', 0xdaa520], ['darkgoldenrod', 0xb8860b], ['peru', 0xcd853f], ['chocolate', 0xd2691e], ['saddlebrown', 0x8b4513], ['sienna', 0xa0522d], ['brown', 0xa52a2a], ['maroon', 0x800000], ['white', 0xffffff], ['snow', 0xfffafa], ['honeydew', 0xf0fff0], ['mintcream', 0xf5fffa], ['azure', 0xf0ffff], ['aliceblue', 0xf0f8ff], ['ghostwhite', 0xf8f8ff], ['whitesmoke', 0xf5f5f5], ['seashell', 0xfff5ee], ['beige', 0xf5f5dc], ['oldlace', 0xfdf5e6], ['floralwhite', 0xfffaf0], ['ivory', 0xfffff0], ['antiquewhite', 0xfaebd7], ['linen', 0xfaf0e6], ['lavenderblush', 0xfff0f5], ['mistyrose', 0xffe4e1], ['gainsboro', 0xdcdcdc], ['lightgray', 0xd3d3d3], ['silver', 0xc0c0c0], ['darkgray', 0xa9a9a9], ['gray', 0x808080], ['dimgray', 0x696969], ['lightslategray', 0x778899], ['slategray', 0x708090], ['darkslategray', 0x2f4f4f], ['black', 0x000000] /* eslint-enable no-multi-spaces */], namedColors: {}, - /* eslint-enable no-magic-numbers */ - gradients: { rainbow: [0x0000ff, // blue @@ -19869,13 +19915,12 @@ for (let i = 0, { namedColors[name] = value; } /* harmony default export */ const palettes_Palette = (Palette); -;// CONCATENATED MODULE: ./src/gfx/palettes/cpkPalette.js +;// ./src/gfx/palettes/cpkPalette.js const palette = new palettes_Palette('CPK', 'CP'); // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py. palette.elementColors = { - /* eslint-disable no-magic-numbers */ H: 0xFFFFFF, C: 0x202020, N: 0x2060FF, @@ -19890,15 +19935,13 @@ palette.elementColors = { CU: 0xD0D0D0, BR: 0x008800, I: 0x005500 - /* eslint-enable no-magic-numbers */ }; /* harmony default export */ const cpkPalette = (palette); -;// CONCATENATED MODULE: ./src/gfx/palettes/jmolPalette.js +;// ./src/gfx/palettes/jmolPalette.js const jmolPalette_palette = new palettes_Palette('Jmol', 'JM'); -jmolPalette_palette.colors = [/* eslint-disable no-magic-numbers */ -0x0000FF, +jmolPalette_palette.colors = [0x0000FF, // blue 0x0055FF, // @@ -19933,11 +19976,10 @@ jmolPalette_palette.colors = [/* eslint-disable no-magic-numbers */ 0xAB00FF, // 0x5500FF // -/* eslint-enable no-magic-numbers */]; +]; // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py. jmolPalette_palette.elementColors = { - /* eslint-disable no-magic-numbers */ H: 0xFFFFFF, D: 0xFFFFC0, T: 0xFFFFA0, @@ -20049,13 +20091,11 @@ jmolPalette_palette.elementColors = { BH: 0xE00038, HS: 0xE6002E, MT: 0xEB0026 - /* eslint-enable no-magic-numbers */ }; jmolPalette_palette.defaultResidueColor = 0xBEA06E; // DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py. jmolPalette_palette.residueColors = { - /* eslint-disable no-magic-numbers */ ALA: 0xC8C8C8, ARG: 0x145AFF, ASN: 0x00DCDC, @@ -20094,7 +20134,6 @@ jmolPalette_palette.residueColors = { '+I': 0x80FFFF, '+T': 0xA0FFA0, '+U': 0xFF8080 - /* eslint-enable no-magic-numbers */ }; jmolPalette_palette.chainColors = [ // ' '->0 'A'->1, 'B'->2 @@ -20166,12 +20205,11 @@ jmolPalette_palette.secondaryColors = { rna: 0xFD0162 }; /* harmony default export */ const jmolPalette = (jmolPalette_palette); -;// CONCATENATED MODULE: ./src/gfx/palettes/vmdPalette.js +;// ./src/gfx/palettes/vmdPalette.js const vmdPalette_palette = new palettes_Palette('VMD', 'VM'); -vmdPalette_palette.colors = [/* eslint-disable no-magic-numbers */ -0x0000FF, +vmdPalette_palette.colors = [0x0000FF, // blue 0xFF0000, // red @@ -20202,25 +20240,22 @@ vmdPalette_palette.colors = [/* eslint-disable no-magic-numbers */ 0x804D00, // ochre 0x8080C0 // ice blue -/* eslint-enable no-magic-numbers */]; +]; vmdPalette_palette.defaultElementColor = 0x804D00; // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py. vmdPalette_palette.elementColors = { - /* eslint-disable no-magic-numbers */ H: 0xFFFFFF, C: 0x40BFBF, N: 0x0000FF, O: 0xFF0000, P: 0x808033, S: 0xFFFF00 - /* eslint-enable no-magic-numbers */ }; vmdPalette_palette.defaultResidueColor = 0x40C0C0; // DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py. vmdPalette_palette.residueColors = { - /* eslint-disable no-magic-numbers */ ALA: 0x0000FF, ARG: 0xFFFFFF, ASN: 0x808033, @@ -20259,7 +20294,6 @@ vmdPalette_palette.residueColors = { WAT: 0x40C0C0, H2O: 0x40C0C0, HOH: 0x40C0C0 - /* eslint-enable no-magic-numbers */ }; vmdPalette_palette.chainColors = [0xFFFFFF].concat(vmdPalette_palette.colors); const vmdPalette_StructuralElementType = chem_StructuralElement.Type; @@ -20272,14 +20306,14 @@ vmdPalette_palette.secondaryColors = { [vmdPalette_StructuralElementType.TURN]: 0x40C0C0 }; /* harmony default export */ const vmdPalette = (vmdPalette_palette); -;// CONCATENATED MODULE: ./src/gfx/palettes.js +;// ./src/gfx/palettes.js const palettes = new utils_EntityList([cpkPalette, jmolPalette, vmdPalette]); /* harmony default export */ const gfx_palettes = (palettes); -;// CONCATENATED MODULE: ./src/gfx/colorers/Colorer.js +;// ./src/gfx/colorers/Colorer.js @@ -20338,7 +20372,7 @@ class Colorer { Colorer.prototype.id = '__'; /* harmony default export */ const colorers_Colorer = (Colorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/ElementColorer.js +;// ./src/gfx/colorers/ElementColorer.js /** @@ -20370,7 +20404,7 @@ ElementColorer.prototype.id = 'EL'; ElementColorer.prototype.name = 'Element'; ElementColorer.prototype.shortName = 'Element'; /* harmony default export */ const colorers_ElementColorer = (ElementColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/ResidueTypeColorer.js +;// ./src/gfx/colorers/ResidueTypeColorer.js /** @@ -20394,7 +20428,7 @@ ResidueTypeColorer.prototype.id = 'RT'; ResidueTypeColorer.prototype.name = 'Residue Type'; ResidueTypeColorer.prototype.shortName = 'Residue'; /* harmony default export */ const colorers_ResidueTypeColorer = (ResidueTypeColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/SequenceColorer.js +;// ./src/gfx/colorers/SequenceColorer.js class SequenceColorer extends colorers_Colorer { static id = 'SQ'; @@ -20415,7 +20449,7 @@ SequenceColorer.prototype.id = 'SQ'; SequenceColorer.prototype.name = 'Sequence'; SequenceColorer.prototype.shortName = 'Sequence'; /* harmony default export */ const colorers_SequenceColorer = (SequenceColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/ChainColorer.js +;// ./src/gfx/colorers/ChainColorer.js class ChainColorer extends colorers_Colorer { static id = 'CH'; @@ -20430,7 +20464,7 @@ ChainColorer.prototype.id = 'CH'; ChainColorer.prototype.name = 'Chain'; ChainColorer.prototype.shortName = 'Chain'; /* harmony default export */ const colorers_ChainColorer = (ChainColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/SecondaryStructureColorer.js +;// ./src/gfx/colorers/SecondaryStructureColorer.js class SecondaryStructureColorer extends colorers_Colorer { @@ -20460,7 +20494,7 @@ SecondaryStructureColorer.prototype.id = 'SS'; SecondaryStructureColorer.prototype.name = 'Secondary Structure'; SecondaryStructureColorer.prototype.shortName = 'Structure'; /* harmony default export */ const colorers_SecondaryStructureColorer = (SecondaryStructureColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/UniformColorer.js +;// ./src/gfx/colorers/UniformColorer.js class UniformColorer extends colorers_Colorer { static id = 'UN'; @@ -20475,7 +20509,7 @@ UniformColorer.prototype.id = 'UN'; UniformColorer.prototype.name = 'Uniform'; UniformColorer.prototype.shortName = 'Uniform'; /* harmony default export */ const colorers_UniformColorer = (UniformColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/ConditionalColorer.js +;// ./src/gfx/colorers/ConditionalColorer.js @@ -20514,7 +20548,7 @@ ConditionalColorer.prototype.id = 'CO'; ConditionalColorer.prototype.name = 'Conditional'; ConditionalColorer.prototype.shortName = 'Conditional'; /* harmony default export */ const colorers_ConditionalColorer = (ConditionalColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/ConformationColorer.js +;// ./src/gfx/colorers/ConformationColorer.js class ConformationColorer extends colorers_Colorer { static id = 'CF'; @@ -20529,7 +20563,7 @@ ConformationColorer.prototype.id = 'CF'; ConformationColorer.prototype.name = 'Conformation'; ConformationColorer.prototype.shortName = 'Conformation'; /* harmony default export */ const colorers_ConformationColorer = (ConformationColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/TemperatureColorer.js +;// ./src/gfx/colorers/TemperatureColorer.js /** @@ -20584,7 +20618,7 @@ TemperatureColorer.prototype.id = 'TM'; // [T]e[M]perature TemperatureColorer.prototype.name = 'Temperature'; TemperatureColorer.prototype.shortName = 'Temperature'; /* harmony default export */ const colorers_TemperatureColorer = (TemperatureColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/OccupancyColorer.js +;// ./src/gfx/colorers/OccupancyColorer.js /** @@ -20625,7 +20659,7 @@ OccupancyColorer.prototype.id = 'OC'; // [OC]cupancy OccupancyColorer.prototype.name = 'Occupancy'; OccupancyColorer.prototype.shortName = 'Occupancy'; /* harmony default export */ const colorers_OccupancyColorer = (OccupancyColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/HydrophobicityColorer.js +;// ./src/gfx/colorers/HydrophobicityColorer.js class HydrophobicityColorer extends colorers_Colorer { static id = 'HY'; @@ -20647,7 +20681,7 @@ HydrophobicityColorer.prototype.id = 'HY'; HydrophobicityColorer.prototype.name = 'Hydrophobicity'; HydrophobicityColorer.prototype.shortName = 'Hydrophobicity'; /* harmony default export */ const colorers_HydrophobicityColorer = (HydrophobicityColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/MoleculeColorer.js +;// ./src/gfx/colorers/MoleculeColorer.js class MoleculeColorer extends colorers_Colorer { static id = 'MO'; @@ -20667,7 +20701,7 @@ MoleculeColorer.prototype.id = 'MO'; MoleculeColorer.prototype.name = 'Molecule'; MoleculeColorer.prototype.shortName = 'Molecule'; /* harmony default export */ const colorers_MoleculeColorer = (MoleculeColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/CarbonColorer.js +;// ./src/gfx/colorers/CarbonColorer.js function scaleColor(c, factor) { @@ -20705,7 +20739,7 @@ CarbonColorer.prototype.id = 'CB'; CarbonColorer.prototype.name = 'Carbon'; CarbonColorer.prototype.shortName = 'Carbon'; /* harmony default export */ const colorers_CarbonColorer = (CarbonColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers.js +;// ./src/gfx/colorers.js @@ -20722,7 +20756,7 @@ CarbonColorer.prototype.shortName = 'Carbon'; const colorers = new utils_EntityList([colorers_ElementColorer, colorers_ResidueTypeColorer, colorers_SequenceColorer, colorers_ChainColorer, colorers_SecondaryStructureColorer, colorers_UniformColorer, colorers_ConditionalColorer, colorers_ConformationColorer, colorers_TemperatureColorer, colorers_OccupancyColorer, colorers_HydrophobicityColorer, colorers_MoleculeColorer, colorers_CarbonColorer]); /* harmony default export */ const gfx_colorers = (colorers); -;// CONCATENATED MODULE: ./src/gfx/materials.js +;// ./src/gfx/materials.js function neutralColor(intensity) { @@ -20883,7 +20917,7 @@ const materialList = [{ }]; const materials = new utils_EntityList(materialList); /* harmony default export */ const gfx_materials = (materials); -;// CONCATENATED MODULE: ./src/gfx/meshutils.js +;// ./src/gfx/meshutils.js /** * Utils functions which is worked with meshes * @@ -21085,7 +21119,7 @@ function countTriangles(group) { forEachMeshInGroup, countTriangles }); -;// CONCATENATED MODULE: ./src/gfx/Representation.js +;// ./src/gfx/Representation.js @@ -21266,7 +21300,7 @@ class Representation { } } /* harmony default export */ const gfx_Representation = (Representation); -;// CONCATENATED MODULE: ./src/ComplexVisualEdit.js +;// ./src/ComplexVisualEdit.js @@ -21586,7 +21620,7 @@ class ComplexFragmentEditor extends ComplexEditor { ComponentEditor: ComplexComponentEditor, FragmentEditor: ComplexFragmentEditor }); -;// CONCATENATED MODULE: ./src/ComplexVisual.js +;// ./src/ComplexVisual.js @@ -22184,7 +22218,8 @@ class ComplexVisual extends src_Visual { throw e; } } - if (false) {} + if (false) // removed by dead control flow +{} } hasGeometry = errorOccured || hasGeometry || gfxutils.groupHasGeometryToRender(repr.geo); if (repr.geo) { @@ -22342,9 +22377,7 @@ class ComplexVisual extends src_Visual { finalizeEdit() { this._editor = null; } - setMaterialValues(values) { - let needTraverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - let process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; + setMaterialValues(values, needTraverse = false, process = undefined) { for (let i = 0, n = this._reprList.length; i < n; ++i) { const rep = this._reprList[i]; rep.material.setValues(values); @@ -22402,21 +22435,19 @@ class ComplexVisual extends src_Visual { // 32 bits = 30 bits for reps + 1 for selection + 1 for selection expansion ComplexVisual.NUM_REPRESENTATION_BITS = 30; /* harmony default export */ const src_ComplexVisual = (ComplexVisual); -;// CONCATENATED MODULE: ./src/gfx/shaders/VolumeFaces.vert -const VolumeFaces_namespaceObject = "varying vec3 pos;\r\n\r\nvoid main() {\r\n // we're assuming local position is in [-0.5, 0.5]\r\n // we need to offset it to be represented in RGB\r\n pos = position.xyz + 0.5;\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n}"; -;// CONCATENATED MODULE: ./src/gfx/shaders/VolumeFaces.frag -const gfx_shaders_VolumeFaces_namespaceObject = "varying vec3 pos;\r\n\r\nvoid main() {\r\n gl_FragColor = vec4(pos, 0.5);\r\n}"; -;// CONCATENATED MODULE: ./src/gfx/shaders/Volume.vert -const shaders_Volume_namespaceObject = "varying vec4 screenSpacePos;\r\n\r\nvoid main() {\r\n screenSpacePos = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n gl_Position = screenSpacePos;\r\n}"; -;// CONCATENATED MODULE: ./src/gfx/shaders/Volume.frag -const src_gfx_shaders_Volume_namespaceObject = "uniform mat4 projectionMatrix;\r\n\r\n// 3D volume texture\r\nuniform vec3 volumeDim; // volume dimensions, pixels\r\nuniform sampler2D tileTex; // tiled texture containing all Z-slices of a 3D data\r\nuniform vec2 tileTexSize; // size of tiled texture, pixels\r\nuniform vec2 tileStride; // UV stride between slices in tile tex, pixels\r\n\r\nuniform vec3 boxAngles;//value of angles({x: alpha, y:beta, z:gamma}) types 1 - if angle is obtuse, 0 - if acute\r\nuniform vec3 delta; //Projection box delta's from non-orthogonal origin axes; {x: XY, y : XZ, z: YZ}\r\n\r\nuniform vec3 _isoLevel0;\r\nuniform float _flipV;\r\nuniform sampler2D _BFLeft;\r\nuniform sampler2D _BFRight;\r\nuniform sampler2D _FFLeft;\r\nuniform sampler2D _FFRight;\r\nuniform sampler2D _WFFLeft;\r\nuniform sampler2D _WFFRight;\r\n\r\nvarying vec4 screenSpacePos;\r\n\r\n#define NO_COLOR vec4(0., 0., 0., 0.)\r\n\r\nvec4 sample3DTexture(vec3 texCoord) {\r\n // a pair of Z slices is determined by nearest slice border\r\n float zSliceBorder = floor(texCoord.z * volumeDim.z + 0.5);\r\n float zSliceNumber1 = max(zSliceBorder - 1.0, 0.0);\r\n float zSliceNumber2 = min(zSliceBorder, volumeDim.z - 1.0);\r\n\r\n float rowTiles = floor(tileTexSize.x / tileStride.x);\r\n\r\n // calculate coords in tile texture for both slices\r\n vec2 tileOffset = vec2(mod(zSliceNumber1, rowTiles), floor(zSliceNumber1 / rowTiles));\r\n vec2 texCoordSlice1 = (texCoord.xy * volumeDim.xy + tileOffset * tileStride) / tileTexSize.xy;\r\n tileOffset = vec2(mod(zSliceNumber2, rowTiles), floor(zSliceNumber2 / rowTiles));\r\n vec2 texCoordSlice2 = (texCoord.xy * volumeDim.xy + tileOffset * tileStride) / tileTexSize.xy;\r\n\r\n // bilinear filtering\r\n vec4 colorSlice1 = texture2D(tileTex, texCoordSlice1);\r\n vec4 colorSlice2 = texture2D(tileTex, texCoordSlice2);\r\n float weightSlice2 = texCoord.z * volumeDim.z - (zSliceNumber1 + 0.5);\r\n return mix(colorSlice1, colorSlice2, weightSlice2);\r\n}\r\n\r\nvec4 sample3DTextureInclined(vec3 boxCoord) { // delta:{ x: XY, y : XZ, z: YZ }\r\n vec3 textCoord = boxCoord;\r\n vec2 currDelta = mix(boxCoord.zz, vec2(1., 1.) - boxCoord.zz, boxAngles.yx) * delta.yz;\r\n\r\n textCoord.y = (boxCoord.y - currDelta.y) / (1. - delta.z);\r\n if (textCoord.y < 0.0 || textCoord.y > 1.0)\r\n return NO_COLOR;\r\n\r\n currDelta.x += mix(textCoord.y, 1.0 - textCoord.y, boxAngles.z) * delta.x;\r\n\r\n textCoord.x = (boxCoord.x - currDelta.x) / (1. - delta.x - delta.y);\r\n if (textCoord.x < 0.0 || textCoord.x > 1.0)\r\n return NO_COLOR;\r\n\r\n return sample3DTexture(textCoord);\r\n}\r\n\r\nfloat CalcColor(vec3 iter, vec3 dir) {\r\n float d = 1. / 128.;\r\n vec3 dx = vec3(d, 0.0, 0.0);\r\n vec3 dy = vec3(0.0, d, 0.0);\r\n vec3 dz = vec3(0.0, 0.0, d);\r\n\r\n // #Opt: coordInc.x:(iter + dx).x > 1. ? 0.: sample3DTextureInclined(iter + dx).x,\r\n vec3 coordInc = mix(\r\n vec3(\r\n sample3DTextureInclined(iter + dx).x,\r\n sample3DTextureInclined(iter + dy).x,\r\n sample3DTextureInclined(iter + dz).x\r\n ),\r\n vec3(0. ,0. , 0.),\r\n vec3(floor((iter + dx).x), floor((iter + dy).y), floor((iter + dz).z))\r\n );\r\n\r\n // #Opt: coordDec.x:(iter - dx).x < 0. ? 0.: sample3DTextureInclined(iter - dx).x,\r\n vec3 coordDec = mix(\r\n vec3(0. ,0. , 0.),\r\n vec3(\r\n sample3DTextureInclined(iter - dx).x,\r\n sample3DTextureInclined(iter - dy).x,\r\n sample3DTextureInclined(iter - dz).x\r\n ),\r\n vec3(ceil((iter - dx).x), ceil((iter - dy).y), ceil((iter - dz).z))\r\n );\r\n\r\n vec3 N = normalize(coordInc - coordDec);\r\n float dif = max(0.0, dot(N, dir));\r\n return dif;\r\n}\r\n\r\nvec3 AccuracyIso(vec3 left, vec3 right, float volLeft, float threshold) {\r\n for (int i = 0; i < 5; i++) {\r\n vec3 iterator = 0.5 * (left + right);\r\n float vol = sample3DTextureInclined(iterator).r;\r\n if ((volLeft - threshold) * (vol - threshold) < 0.)\r\n right = iterator;\r\n else\r\n left = iterator;\r\n }\r\n return 0.5 * (left + right);\r\n}\r\n\r\nvec3 CorrectIso(vec3 left, vec3 right, float tr) {\r\n for (int j = 0; j < 5; j++) {\r\n vec3 iterator = 0.5 * (left + right);\r\n float vol = sample3DTextureInclined(iterator).r;\r\n if (vol < tr)\r\n right = iterator;\r\n else\r\n left = iterator;\r\n }\r\n return 0.5 * (left + right);\r\n}\r\n\r\nvec4 GetIso1(vec3 start, vec3 back, float molDist, vec3 dir, float tr, int count) {\r\n float vol, stepSize = (float(count) + 2.) / float(STEPS_COUNT);\r\n vec3 step = stepSize * dir, iterator = start, left, right;\r\n vec4 acc = NO_COLOR;\r\n\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n iterator = iterator + step;\r\n vol = sample3DTextureInclined(iterator).r;\r\n if (length(iterator - back) <= stepSize || (vol > tr))\r\n break;\r\n }\r\n\r\n if (vol > tr)\r\n acc = vec4(CorrectIso(iterator, iterator - step, tr).xyz, 1.);\r\n\r\n return acc;\r\n}\r\n\r\nfloat easeOut(float x0, float x1, float x) {\r\n float t = clamp((x - x0) / (x1 - x0), 0.0, 1.0);\r\n return 1.0 - (1.0 - t) * (1.0 - t);\r\n}\r\n\r\nfloat easeIn(float x0, float x1, float x) {\r\n float t = clamp((x - x0) / (x1 - x0), 0.0, 1.0);\r\n return t * t;\r\n}\r\n\r\nvec3 GetColSimple(float vol) {\r\n float t = easeOut(_isoLevel0.x, _isoLevel0.y, vol);\r\n float s = easeIn(_isoLevel0.y, _isoLevel0.z, vol);\r\n return vec3(0.5, 0.6, 0.7) * (1.0 - t) + 2.0 * vec3(s, 0, 0);\r\n}\r\n\r\nvec4 VolRender(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n vec4 acc = NO_COLOR, iso;\r\n vec3 iterator = start, sumColor = vec3(0., 0., 0.);\r\n float stepSize, alpha, sumAlpha = 0.0, vol, curStepSize, molD;\r\n vec3 step, col, colOld, right;\r\n float tr0 = _isoLevel0.x;\r\n float dif, r, kd, finish;\r\n int count = 0, stopMol = 0;\r\n\r\n for (int k = 0; k < 3; k++) {\r\n stepSize = (float(k) + 2.) / float(STEPS_COUNT);\r\n kd = 140. * tr0 * stepSize;\r\n r = 1. - kd;\r\n step = stepSize * dir;\r\n iso = GetIso1(iterator, back, molDist, dir, tr0, k);\r\n if (iso.a < 0.1 || length(iso.xyz - start) > molDist)\r\n break;\r\n iterator = iso.xyz;\r\n dif = 1.;// CalcColor(iterator, dir);\r\n colOld = GetColSimple(tr0);\r\n curStepSize = stepSize;\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n iterator = iterator + step;\r\n molD = length(iterator - start);\r\n vol = sample3DTextureInclined(iterator).r;\r\n finish = distance(iterator, back) - stepSize;\r\n if (finish < 0.0 || vol < tr0 || (sumAlpha > 0.97) || molD > molDist)\r\n break;\r\n alpha = (1. - r);\r\n col = GetColSimple(vol);\r\n vol = sample3DTextureInclined(iterator - 0.5 * step).r;\r\n vec3 colMid = GetColSimple(vol);\r\n sumColor += (1. - sumAlpha) * (colOld + 4.* colMid + col) * alpha / 6.;\r\n sumAlpha += (1. - sumAlpha) * alpha;// *(1. - 1.0*dif*dif);\r\n colOld = col;\r\n } // for i\r\n\r\n if (finish < 0.0 || sumAlpha > 0.97)\r\n break;\r\n\r\n if (molD > molDist) {\r\n curStepSize = stepSize - (molD - molDist);\r\n right = iterator - (molD - molDist) * dir;\r\n vol = sample3DTextureInclined(right).r;\r\n } else {\r\n vec3 left = iterator - step;\r\n right = CorrectIso(left, iterator, tr0);\r\n curStepSize = distance(left, right);\r\n vol = tr0;\r\n }\r\n\r\n alpha = (1. - r) * curStepSize / stepSize;\r\n dif = 1.;// CalcColor(right, dir);\r\n col = GetColSimple(vol);\r\n vol = sample3DTextureInclined(iterator - 0.5 * curStepSize / stepSize * step).r;\r\n vec3 colMid = GetColSimple(vol);\r\n sumColor += (1. - sumAlpha) * (colOld + 4. * colMid + col) * alpha / 6.;\r\n sumAlpha += (1. - sumAlpha) * alpha;// *(1. - 1.0*dif*dif);\r\n\r\n if (molD > molDist)\r\n break;\r\n } // for k\r\n acc.rgb = 1. * sumColor / sumAlpha;\r\n acc.a = sumAlpha;\r\n return acc;\r\n}\r\n\r\nvec4 VolRender1(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n float stepSize = 1.0 / float(STEPS_COUNT);\r\n float len = length(back - start);\r\n vec3 step = stepSize * dir;\r\n vec3 iterator = start;\r\n float acc = 0.0;\r\n\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n if (float(i) * stepSize > len)\r\n break;\r\n iterator = iterator + step;\r\n if (sample3DTextureInclined(iterator).r > _isoLevel0.x)\r\n acc += 10. * sample3DTextureInclined(iterator).r / float(STEPS_COUNT);\r\n }\r\n\r\n return vec4(1.,1.,1., acc);\r\n}\r\n\r\nvec4 IsoRender(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n vec4 tst = GetIso1(start, back, 2., dir, _isoLevel0.x, 0);\r\n vec4 col = NO_COLOR;\r\n\r\n if (length(tst.xyz - start) < molDist && tst.a > 0.1) {\r\n float dif = CalcColor(tst.xyz, dir);\r\n dif = 0.9 * dif * dif;\r\n col = vec4(dif, dif, dif, 1);\r\n }\r\n return col;\r\n}\r\n\r\nvec4 VolRender2(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n return sample3DTexture(start);\r\n}\r\n\r\nvoid main() {\r\n vec3 tc = screenSpacePos.xyz / screenSpacePos.w * 0.5 + 0.5;\r\n\r\n if (_flipV > 0.0) {\r\n tc.y = 1.0 - tc.y;\r\n }\r\n\r\n vec3 start;\r\n vec3 back;\r\n vec3 molBack;\r\n if (projectionMatrix[0][2] < 0.0) {\r\n start = texture2D(_FFLeft, tc.xy).xyz;\r\n back = texture2D(_BFLeft, tc.xy).xyz;\r\n molBack = texture2D(_WFFLeft, tc.xy).xyz;\r\n } else {\r\n start = texture2D(_FFRight, tc.xy).xyz;\r\n back = texture2D(_BFRight, tc.xy).xyz;\r\n molBack = texture2D(_WFFRight, tc.xy).xyz;\r\n }\r\n\r\n vec3 dir = normalize(back - start);\r\n\r\n float molDist = 2.0;\r\n if (length(molBack) > 0.001) {\r\n molDist = distance(start, molBack);\r\n }\r\n\r\n #ifdef ISO_MODE\r\n gl_FragColor = IsoRender(start, back, molDist, dir);\r\n #else\r\n gl_FragColor = VolRender(start, back, molDist, dir);\r\n #endif\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/VolumeFarPlane.vert -const VolumeFarPlane_namespaceObject = "varying vec4 volPos;\r\nuniform float aspectRatio;\r\nuniform float farZ;\r\nuniform float tanHalfFOV;\r\nuniform mat4 matWorld2Volume;\r\n\r\nvoid main() {\r\n // rescale plane to fill in the whole far plane area seen from camera\r\n vec3 pos = position.xyz;\r\n pos.x = pos.x * tanHalfFOV * farZ * aspectRatio;\r\n pos.y = pos.y * tanHalfFOV * farZ;\r\n // common transformation\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);\r\n // calc pos in volume CS\r\n volPos = matWorld2Volume * modelMatrix * vec4(pos, 1.0);\r\n // we're assuming local position is in [-0.5, 0.5]\r\n // we need to offset it to be represented in RGB\r\n volPos = volPos + 0.5;\r\n volPos.w = 0.5;\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/VolumeFarPlane.frag -const gfx_shaders_VolumeFarPlane_namespaceObject = "varying vec4 volPos;\r\n\r\nvoid main() {\r\n gl_FragColor = volPos;\r\n}"; -;// CONCATENATED MODULE: ./src/gfx/shaders/VolumeMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/VolumeFaces.vert +const VolumeFaces_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec3 pos;\r\n\r\nvoid main() {\r\n // we're assuming local position is in [-0.5, 0.5]\r\n // we need to offset it to be represented in RGB\r\n pos = position.xyz + 0.5;\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n}"; +;// ./src/gfx/shaders/VolumeFaces.frag +const gfx_shaders_VolumeFaces_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec3 pos;\r\n\r\nvoid main() {\r\n gl_FragColor = vec4(pos, 0.5);\r\n}"; +;// ./src/gfx/shaders/Volume.vert +const shaders_Volume_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec4 screenSpacePos;\r\n\r\nvoid main() {\r\n screenSpacePos = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n gl_Position = screenSpacePos;\r\n}"; +;// ./src/gfx/shaders/Volume.frag +const src_gfx_shaders_Volume_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nuniform mat4 projectionMatrix;\r\n\r\n// 3D volume texture\r\nuniform vec3 volumeDim; // volume dimensions, pixels\r\nuniform sampler2D tileTex; // tiled texture containing all Z-slices of a 3D data\r\nuniform vec2 tileTexSize; // size of tiled texture, pixels\r\nuniform vec2 tileStride; // UV stride between slices in tile tex, pixels\r\n\r\nuniform vec3 boxAngles;//value of angles({x: alpha, y:beta, z:gamma}) types 1 - if angle is obtuse, 0 - if acute\r\nuniform vec3 delta; //Projection box delta's from non-orthogonal origin axes; {x: XY, y : XZ, z: YZ}\r\n\r\nuniform vec3 _isoLevel0;\r\nuniform float _flipV;\r\nuniform sampler2D _BFLeft;\r\nuniform sampler2D _BFRight;\r\nuniform sampler2D _FFLeft;\r\nuniform sampler2D _FFRight;\r\nuniform sampler2D _WFFLeft;\r\nuniform sampler2D _WFFRight;\r\n\r\nvarying vec4 screenSpacePos;\r\n\r\n#define NO_COLOR vec4(0., 0., 0., 0.)\r\n\r\nvec4 sample3DTexture(vec3 texCoord) {\r\n // a pair of Z slices is determined by nearest slice border\r\n float zSliceBorder = floor(texCoord.z * volumeDim.z + 0.5);\r\n float zSliceNumber1 = max(zSliceBorder - 1.0, 0.0);\r\n float zSliceNumber2 = min(zSliceBorder, volumeDim.z - 1.0);\r\n\r\n float rowTiles = floor(tileTexSize.x / tileStride.x);\r\n\r\n // calculate coords in tile texture for both slices\r\n vec2 tileOffset = vec2(mod(zSliceNumber1, rowTiles), floor(zSliceNumber1 / rowTiles));\r\n vec2 texCoordSlice1 = (texCoord.xy * volumeDim.xy + tileOffset * tileStride) / tileTexSize.xy;\r\n tileOffset = vec2(mod(zSliceNumber2, rowTiles), floor(zSliceNumber2 / rowTiles));\r\n vec2 texCoordSlice2 = (texCoord.xy * volumeDim.xy + tileOffset * tileStride) / tileTexSize.xy;\r\n\r\n // bilinear filtering\r\n vec4 colorSlice1 = texture2D(tileTex, texCoordSlice1);\r\n vec4 colorSlice2 = texture2D(tileTex, texCoordSlice2);\r\n float weightSlice2 = texCoord.z * volumeDim.z - (zSliceNumber1 + 0.5);\r\n return mix(colorSlice1, colorSlice2, weightSlice2);\r\n}\r\n\r\nvec4 sample3DTextureInclined(vec3 boxCoord) { // delta:{ x: XY, y : XZ, z: YZ }\r\n vec3 textCoord = boxCoord;\r\n vec2 currDelta = mix(boxCoord.zz, vec2(1., 1.) - boxCoord.zz, boxAngles.yx) * delta.yz;\r\n\r\n textCoord.y = (boxCoord.y - currDelta.y) / (1. - delta.z);\r\n if (textCoord.y < 0.0 || textCoord.y > 1.0)\r\n return NO_COLOR;\r\n\r\n currDelta.x += mix(textCoord.y, 1.0 - textCoord.y, boxAngles.z) * delta.x;\r\n\r\n textCoord.x = (boxCoord.x - currDelta.x) / (1. - delta.x - delta.y);\r\n if (textCoord.x < 0.0 || textCoord.x > 1.0)\r\n return NO_COLOR;\r\n\r\n return sample3DTexture(textCoord);\r\n}\r\n\r\nfloat CalcColor(vec3 iter, vec3 dir) {\r\n float d = 1. / 128.;\r\n vec3 dx = vec3(d, 0.0, 0.0);\r\n vec3 dy = vec3(0.0, d, 0.0);\r\n vec3 dz = vec3(0.0, 0.0, d);\r\n\r\n // #Opt: coordInc.x:(iter + dx).x > 1. ? 0.: sample3DTextureInclined(iter + dx).x,\r\n vec3 coordInc = mix(\r\n vec3(\r\n sample3DTextureInclined(iter + dx).x,\r\n sample3DTextureInclined(iter + dy).x,\r\n sample3DTextureInclined(iter + dz).x\r\n ),\r\n vec3(0. ,0. , 0.),\r\n vec3(floor((iter + dx).x), floor((iter + dy).y), floor((iter + dz).z))\r\n );\r\n\r\n // #Opt: coordDec.x:(iter - dx).x < 0. ? 0.: sample3DTextureInclined(iter - dx).x,\r\n vec3 coordDec = mix(\r\n vec3(0. ,0. , 0.),\r\n vec3(\r\n sample3DTextureInclined(iter - dx).x,\r\n sample3DTextureInclined(iter - dy).x,\r\n sample3DTextureInclined(iter - dz).x\r\n ),\r\n vec3(ceil((iter - dx).x), ceil((iter - dy).y), ceil((iter - dz).z))\r\n );\r\n\r\n vec3 N = normalize(coordInc - coordDec);\r\n float dif = max(0.0, dot(N, dir));\r\n return dif;\r\n}\r\n\r\nvec3 AccuracyIso(vec3 left, vec3 right, float volLeft, float threshold) {\r\n for (int i = 0; i < 5; i++) {\r\n vec3 iterator = 0.5 * (left + right);\r\n float vol = sample3DTextureInclined(iterator).r;\r\n if ((volLeft - threshold) * (vol - threshold) < 0.)\r\n right = iterator;\r\n else\r\n left = iterator;\r\n }\r\n return 0.5 * (left + right);\r\n}\r\n\r\nvec3 CorrectIso(vec3 left, vec3 right, float tr) {\r\n for (int j = 0; j < 5; j++) {\r\n vec3 iterator = 0.5 * (left + right);\r\n float vol = sample3DTextureInclined(iterator).r;\r\n if (vol < tr)\r\n right = iterator;\r\n else\r\n left = iterator;\r\n }\r\n return 0.5 * (left + right);\r\n}\r\n\r\nvec4 GetIso1(vec3 start, vec3 back, float molDist, vec3 dir, float tr, int count) {\r\n float vol, stepSize = (float(count) + 2.) / float(STEPS_COUNT);\r\n vec3 step = stepSize * dir, iterator = start, left, right;\r\n vec4 acc = NO_COLOR;\r\n\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n iterator = iterator + step;\r\n vol = sample3DTextureInclined(iterator).r;\r\n if (length(iterator - back) <= stepSize || (vol > tr))\r\n break;\r\n }\r\n\r\n if (vol > tr)\r\n acc = vec4(CorrectIso(iterator, iterator - step, tr).xyz, 1.);\r\n\r\n return acc;\r\n}\r\n\r\nfloat easeOut(float x0, float x1, float x) {\r\n float t = clamp((x - x0) / (x1 - x0), 0.0, 1.0);\r\n return 1.0 - (1.0 - t) * (1.0 - t);\r\n}\r\n\r\nfloat easeIn(float x0, float x1, float x) {\r\n float t = clamp((x - x0) / (x1 - x0), 0.0, 1.0);\r\n return t * t;\r\n}\r\n\r\nvec3 GetColSimple(float vol) {\r\n float t = easeOut(_isoLevel0.x, _isoLevel0.y, vol);\r\n float s = easeIn(_isoLevel0.y, _isoLevel0.z, vol);\r\n return vec3(0.5, 0.6, 0.7) * (1.0 - t) + 2.0 * vec3(s, 0, 0);\r\n}\r\n\r\nvec4 VolRender(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n vec4 acc = NO_COLOR, iso;\r\n vec3 iterator = start, sumColor = vec3(0., 0., 0.);\r\n float stepSize, alpha, sumAlpha = 0.0, vol, curStepSize, molD;\r\n vec3 step, col, colOld, right;\r\n float tr0 = _isoLevel0.x;\r\n float dif, r, kd, finish;\r\n int count = 0, stopMol = 0;\r\n\r\n for (int k = 0; k < 3; k++) {\r\n stepSize = (float(k) + 2.) / float(STEPS_COUNT);\r\n kd = 140. * tr0 * stepSize;\r\n r = 1. - kd;\r\n step = stepSize * dir;\r\n iso = GetIso1(iterator, back, molDist, dir, tr0, k);\r\n if (iso.a < 0.1 || length(iso.xyz - start) > molDist)\r\n break;\r\n iterator = iso.xyz;\r\n dif = 1.;// CalcColor(iterator, dir);\r\n colOld = GetColSimple(tr0);\r\n curStepSize = stepSize;\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n iterator = iterator + step;\r\n molD = length(iterator - start);\r\n vol = sample3DTextureInclined(iterator).r;\r\n finish = distance(iterator, back) - stepSize;\r\n if (finish < 0.0 || vol < tr0 || (sumAlpha > 0.97) || molD > molDist)\r\n break;\r\n alpha = (1. - r);\r\n col = GetColSimple(vol);\r\n vol = sample3DTextureInclined(iterator - 0.5 * step).r;\r\n vec3 colMid = GetColSimple(vol);\r\n sumColor += (1. - sumAlpha) * (colOld + 4.* colMid + col) * alpha / 6.;\r\n sumAlpha += (1. - sumAlpha) * alpha;// *(1. - 1.0*dif*dif);\r\n colOld = col;\r\n } // for i\r\n\r\n if (finish < 0.0 || sumAlpha > 0.97)\r\n break;\r\n\r\n if (molD > molDist) {\r\n curStepSize = stepSize - (molD - molDist);\r\n right = iterator - (molD - molDist) * dir;\r\n vol = sample3DTextureInclined(right).r;\r\n } else {\r\n vec3 left = iterator - step;\r\n right = CorrectIso(left, iterator, tr0);\r\n curStepSize = distance(left, right);\r\n vol = tr0;\r\n }\r\n\r\n alpha = (1. - r) * curStepSize / stepSize;\r\n dif = 1.;// CalcColor(right, dir);\r\n col = GetColSimple(vol);\r\n vol = sample3DTextureInclined(iterator - 0.5 * curStepSize / stepSize * step).r;\r\n vec3 colMid = GetColSimple(vol);\r\n sumColor += (1. - sumAlpha) * (colOld + 4. * colMid + col) * alpha / 6.;\r\n sumAlpha += (1. - sumAlpha) * alpha;// *(1. - 1.0*dif*dif);\r\n\r\n if (molD > molDist)\r\n break;\r\n } // for k\r\n acc.rgb = 1. * sumColor / sumAlpha;\r\n acc.a = sumAlpha;\r\n return acc;\r\n}\r\n\r\nvec4 VolRender1(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n float stepSize = 1.0 / float(STEPS_COUNT);\r\n float len = length(back - start);\r\n vec3 step = stepSize * dir;\r\n vec3 iterator = start;\r\n float acc = 0.0;\r\n\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n if (float(i) * stepSize > len)\r\n break;\r\n iterator = iterator + step;\r\n if (sample3DTextureInclined(iterator).r > _isoLevel0.x)\r\n acc += 10. * sample3DTextureInclined(iterator).r / float(STEPS_COUNT);\r\n }\r\n\r\n return vec4(1.,1.,1., acc);\r\n}\r\n\r\nvec4 IsoRender(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n vec4 tst = GetIso1(start, back, 2., dir, _isoLevel0.x, 0);\r\n vec4 col = NO_COLOR;\r\n\r\n if (length(tst.xyz - start) < molDist && tst.a > 0.1) {\r\n float dif = CalcColor(tst.xyz, dir);\r\n dif = 0.9 * dif * dif;\r\n col = vec4(dif, dif, dif, 1);\r\n }\r\n return col;\r\n}\r\n\r\nvec4 VolRender2(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n return sample3DTexture(start);\r\n}\r\n\r\nvoid main() {\r\n vec3 tc = screenSpacePos.xyz / screenSpacePos.w * 0.5 + 0.5;\r\n\r\n if (_flipV > 0.0) {\r\n tc.y = 1.0 - tc.y;\r\n }\r\n\r\n vec3 start;\r\n vec3 back;\r\n vec3 molBack;\r\n if (projectionMatrix[0][2] < 0.0) {\r\n start = texture2D(_FFLeft, tc.xy).xyz;\r\n back = texture2D(_BFLeft, tc.xy).xyz;\r\n molBack = texture2D(_WFFLeft, tc.xy).xyz;\r\n } else {\r\n start = texture2D(_FFRight, tc.xy).xyz;\r\n back = texture2D(_BFRight, tc.xy).xyz;\r\n molBack = texture2D(_WFFRight, tc.xy).xyz;\r\n }\r\n\r\n vec3 dir = normalize(back - start);\r\n\r\n float molDist = 2.0;\r\n if (length(molBack) > 0.001) {\r\n molDist = distance(start, molBack);\r\n }\r\n\r\n #ifdef ISO_MODE\r\n gl_FragColor = IsoRender(start, back, molDist, dir);\r\n #else\r\n gl_FragColor = VolRender(start, back, molDist, dir);\r\n #endif\r\n}\r\n"; +;// ./src/gfx/shaders/VolumeFarPlane.vert +const VolumeFarPlane_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec4 volPos;\r\nuniform float aspectRatio;\r\nuniform float farZ;\r\nuniform float tanHalfFOV;\r\nuniform mat4 matWorld2Volume;\r\n\r\nvoid main() {\r\n // rescale plane to fill in the whole far plane area seen from camera\r\n vec3 pos = position.xyz;\r\n pos.x = pos.x * tanHalfFOV * farZ * aspectRatio;\r\n pos.y = pos.y * tanHalfFOV * farZ;\r\n // common transformation\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);\r\n // calc pos in volume CS\r\n volPos = matWorld2Volume * modelMatrix * vec4(pos, 1.0);\r\n // we're assuming local position is in [-0.5, 0.5]\r\n // we need to offset it to be represented in RGB\r\n volPos = volPos + 0.5;\r\n volPos.w = 0.5;\r\n}\r\n"; +;// ./src/gfx/shaders/VolumeFarPlane.frag +const gfx_shaders_VolumeFarPlane_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec4 volPos;\r\n\r\nvoid main() {\r\n gl_FragColor = volPos;\r\n}"; +;// ./src/gfx/shaders/VolumeMaterial.js @@ -22572,7 +22603,7 @@ class VolumeMaterial extends external_module_three_commonjs_three_commonjs2_thre FrontFacePosMaterial, VolumeMaterial }); -;// CONCATENATED MODULE: ./src/gfx/VolumeMesh.js +;// ./src/gfx/VolumeMesh.js @@ -22614,12 +22645,12 @@ class VolumeMesh extends external_module_three_commonjs_three_commonjs2_three_am geo.setAttribute('position', new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.BufferAttribute(new Float32Array(this.vertices.length * 3), 3)); this.name = 'VolumeMesh'; } - static _corners = (() => [ + static _corners = [ // x, y, z, edge1, edge2, edge3 - [-1, -1, -1, 0, 4, 8], [1, -1, -1, 0, 5, 9], [1, 1, -1, 1, 5, 10], [-1, 1, -1, 1, 4, 11], [-1, -1, 1, 2, 6, 8], [1, -1, 1, 2, 7, 9], [1, 1, 1, 3, 7, 10], [-1, 1, 1, 3, 6, 11]])(); - static _edges = (() => [ + [-1, -1, -1, 0, 4, 8], [1, -1, -1, 0, 5, 9], [1, 1, -1, 1, 5, 10], [-1, 1, -1, 1, 4, 11], [-1, -1, 1, 2, 6, 8], [1, -1, 1, 2, 7, 9], [1, 1, 1, 3, 7, 10], [-1, 1, 1, 3, 6, 11]]; + static _edges = [ // corner1, corner2, center_x, center_y, center_z - [0, 1, 0, -1, -1], [2, 3, 0, 1, -1], [4, 5, 0, -1, 1], [6, 7, 0, 1, 1], [0, 3, -1, 0, -1], [1, 2, 1, 0, -1], [4, 7, -1, 0, 1], [5, 6, 1, 0, 1], [0, 4, -1, -1, 0], [1, 5, 1, -1, 0], [2, 6, -1, 1, 0], [3, 7, 1, 1, 0]])(); + [0, 1, 0, -1, -1], [2, 3, 0, 1, -1], [4, 5, 0, -1, 1], [6, 7, 0, 1, 1], [0, 3, -1, 0, -1], [1, 2, 1, 0, -1], [4, 7, -1, 0, 1], [5, 6, 1, 0, 1], [0, 4, -1, -1, 0], [1, 5, 1, -1, 0], [2, 6, -1, 1, 0], [3, 7, 1, 1, 0]]; static _edgeIntersections = function () { const edgeIntersections = []; for (let j = 0; j < 12; ++j) { @@ -22897,11 +22928,11 @@ class VolumeMesh extends external_module_three_commonjs_three_commonjs2_three_am this.material.uniforms._isoLevel0.value.set(level(kSigma), level(kSigmaMed), level(kSigmaMax)); } static _nearClipPlaneOffset = 0.2; - static _pos = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3())(); - static _norm = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3())(); - static _norm4D = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector4())(); - static _matrixWorldToLocal = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Matrix4())(); - static _clipPlane = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Plane())(); + static _pos = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(); + static _norm = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(); + static _norm4D = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector4(); + static _matrixWorldToLocal = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Matrix4(); + static _clipPlane = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Plane(); rebuild(camera) { const nearClipPlaneOffset = VolumeMesh._nearClipPlaneOffset; const pos = VolumeMesh._pos; @@ -22934,7 +22965,7 @@ class VolumeMesh extends external_module_three_commonjs_three_commonjs2_three_am } } /* harmony default export */ const gfx_VolumeMesh = (VolumeMesh); -;// CONCATENATED MODULE: ./src/gfx/VolumeBounds.js +;// ./src/gfx/VolumeBounds.js function _flattenArray(input) { @@ -23011,7 +23042,7 @@ class VolumeBounds { } } /* harmony default export */ const gfx_VolumeBounds = (VolumeBounds); -;// CONCATENATED MODULE: ./src/gfx/VolumeFarPlane.js +;// ./src/gfx/VolumeFarPlane.js @@ -23077,7 +23108,7 @@ class VolumeFarPlane { } } /* harmony default export */ const gfx_VolumeFarPlane = (VolumeFarPlane); -;// CONCATENATED MODULE: ./src/VolumeVisual.js +;// ./src/VolumeVisual.js @@ -23113,7 +23144,7 @@ class VolumeVisual extends src_Visual { } } /* harmony default export */ const src_VolumeVisual = (VolumeVisual); -;// CONCATENATED MODULE: ./src/io/loaders/LoaderList.js +;// ./src/io/loaders/LoaderList.js /** @@ -23131,8 +23162,7 @@ class LoaderList extends utils_EntityList { * automatically register at creation time. * @see LoaderList#register */ - constructor() { - let someLoaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + constructor(someLoaders = []) { super(someLoaders, ['types']); } @@ -23154,7 +23184,7 @@ class LoaderList extends utils_EntityList { } } /* harmony default export */ const loaders_LoaderList = (LoaderList); -;// CONCATENATED MODULE: ./src/io/loaders/Loader.js +;// ./src/io/loaders/Loader.js class Loader extends utils_EventDispatcher { @@ -23179,7 +23209,7 @@ class Loader extends utils_EventDispatcher { } } utils_makeContextDependent(Loader.prototype); -;// CONCATENATED MODULE: ./src/io/loaders/FileLoader.js +;// ./src/io/loaders/FileLoader.js class FileLoader extends Loader { constructor(source, options) { @@ -23221,7 +23251,7 @@ class FileLoader extends Loader { } } FileLoader.types = ['file', 'blob']; -;// CONCATENATED MODULE: ./src/io/loaders/XHRLoader.js +;// ./src/io/loaders/XHRLoader.js @@ -23277,7 +23307,7 @@ class XHRLoader extends Loader { } } XHRLoader.types = ['url']; -;// CONCATENATED MODULE: ./src/io/loaders/ImmediateLoader.js +;// ./src/io/loaders/ImmediateLoader.js class ImmediateLoader extends Loader { load() { @@ -23293,7 +23323,7 @@ class ImmediateLoader extends Loader { } } ImmediateLoader.types = ['immediate']; -;// CONCATENATED MODULE: ./src/io/loaders.js +;// ./src/io/loaders.js @@ -23301,7 +23331,7 @@ ImmediateLoader.types = ['immediate']; /* harmony default export */ const loaders = (new loaders_LoaderList([ // note: order might be important FileLoader, XHRLoader, ImmediateLoader])); -;// CONCATENATED MODULE: ./src/io/parsers/ParserList.js +;// ./src/io/parsers/ParserList.js /** @@ -23319,8 +23349,7 @@ class ParserList extends utils_EntityList { * automatically register at creation time. * @see ParserList#register */ - constructor() { - let someParsers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + constructor(someParsers = []) { super(someParsers, ['formats', 'extensions']); } @@ -23347,7 +23376,7 @@ class ParserList extends utils_EntityList { } } /* harmony default export */ const parsers_ParserList = (ParserList); -;// CONCATENATED MODULE: ./src/io/parsers/Parser.js +;// ./src/io/parsers/Parser.js class Parser { constructor(data, options) { @@ -23383,7 +23412,7 @@ class Parser { } } utils_makeContextDependent(Parser.prototype); -;// CONCATENATED MODULE: ./src/io/parsers/pdb/Remark290.js +;// ./src/io/parsers/pdb/Remark290.js /** @@ -23433,7 +23462,7 @@ class Remark290 { } Remark290.prototype.id = 290; /* harmony default export */ const pdb_Remark290 = (Remark290); -;// CONCATENATED MODULE: ./src/io/parsers/pdb/Remark350.js +;// ./src/io/parsers/pdb/Remark350.js const { @@ -23507,7 +23536,7 @@ class Remark350 { } Remark350.prototype.id = 350; /* harmony default export */ const pdb_Remark350 = (Remark350); -;// CONCATENATED MODULE: ./src/io/parsers/PDBStream.js +;// ./src/io/parsers/PDBStream.js /** Helper class for stream-like reading input files. */ class PDBStream { /** @@ -23620,7 +23649,7 @@ class PDBStream { } } /* harmony default export */ const parsers_PDBStream = (PDBStream); -;// CONCATENATED MODULE: ./src/io/parsers/PDBParser.js +;// ./src/io/parsers/PDBParser.js @@ -23769,8 +23798,6 @@ class PDBParser extends Parser { if (this._modelId !== 1) { return; } - - /* eslint-disable no-magic-numbers */ const het = stream.readCharCode(1) === 0x48; // field names according to wwPDB Format @@ -23789,7 +23816,7 @@ class PDBParser extends Parser { const tempFactor = stream.readFloat(61, 66); const element = stream.readString(77, 78).trim() || nameToElement(name); const charge = stream.readInt(79, 80) || 0; - /* eslint-enable no-magic-numbers */ + // skip waters (there may be lots of them) if (this.settings.now.nowater) { if (resName === 'HOH' || resName === 'WAT') { @@ -23821,14 +23848,11 @@ class PDBParser extends Parser { this._modelId += 1; } _parseCONECT(stream) { - /* eslint-disable no-magic-numbers */ const serial0 = stream.readInt(7, 11); const serial1 = stream.readInt(12, 16); const serial2 = stream.readInt(17, 21); const serial3 = stream.readInt(22, 26); const serial4 = stream.readInt(27, 31); - /* eslint-enable no-magic-numbers */ - const complex = this._complex; // Keep bonds ordered by atom serial @@ -23846,11 +23870,9 @@ class PDBParser extends Parser { } } _parseCOMPND(stream) { - /* eslint-disable no-magic-numbers */ const str = stream.readString(11, 80); const tokenIdx = str.indexOf(':'); this._compndCurrToken = tokenIdx > 0 ? str.substring(0, tokenIdx).trim() : this._compndCurrToken; - /* eslint-enable no-magic-numbers */ // start reading new molecule if (this._compndCurrToken === 'MOL_ID') { @@ -23876,9 +23898,7 @@ class PDBParser extends Parser { } } _parseREMARK(stream) { - /* eslint-disable no-magic-numbers */ const remarkNum = stream.readInt(8, 10); - /* eslint-enable no-magic-numbers */ // create remark parser if needed let remark = this._remarks[remarkNum]; @@ -23895,18 +23915,14 @@ class PDBParser extends Parser { } } _parseHELIX(stream) { - /* eslint-disable no-magic-numbers */ const fields = [20, 22, 32, 34]; - /* eslint-enable no-magic-numbers */ this._parseSTRUCTURE(stream, fields, obj => { this._complex.addHelix(obj); this._complex.structures.push(obj); }); } _parseSHEET(stream) { - /* eslint-disable no-magic-numbers */ const fields = [22, 23, 33, 34]; - /* eslint-enable no-magic-numbers */ this._parseSTRUCTURE(stream, fields, obj => { this._complex.addSheet(obj); }); @@ -23918,7 +23934,7 @@ class PDBParser extends Parser { const endIndex = 3; // identify fields: debugging and stuff - /* eslint-disable no-magic-numbers */ + const codeOfS = 0x53; const serialNumber = stream.readInt(8, 10); const structureName = stream.readString(12, 14).trim(); // FIXME: LString(3) forbids trim() @@ -23928,7 +23944,7 @@ class PDBParser extends Parser { const shWidth = stream.readInt(15, 16); const shCur = stream.readInt(42, 45); const shPrev = stream.readInt(57, 60); - /* eslint-enable no-magic-numbers */ + // file fields const startChainID = stream.readString(pars[startId], pars[endId] + 1).charCodeAt(0); const endChainID = stream.readString(pars[endId], pars[endId] + 1).charCodeAt(0); @@ -23986,7 +24002,7 @@ class PDBParser extends Parser { const line = stream.readInt(9, 10) || 1; metadata.title[line - 1] = stream.readString(11, 80).trim(); } - static tagParsers = (() => ({ + static tagParsers = { HEADER: PDBParser.prototype._parseHEADER, 'TITLE ': PDBParser.prototype._parseTITLE, 'ATOM ': PDBParser.prototype._parseATOM, @@ -24008,7 +24024,7 @@ class PDBParser extends Parser { 'ATOM 7': PDBParser.prototype._parseATOM, 'ATOM 8': PDBParser.prototype._parseATOM, 'ATOM 9': PDBParser.prototype._parseATOM - }))(); + }; parseSync() { const stream = new parsers_PDBStream(this._data); const result = this._complex = new PDBParser_Complex(); @@ -24041,7 +24057,7 @@ class PDBParser extends Parser { PDBParser.formats = ['pdb']; PDBParser.extensions = ['.pdb', '.ent']; /* harmony default export */ const parsers_PDBParser = (PDBParser); -;// CONCATENATED MODULE: ./src/io/parsers/CMLParser.js +;// ./src/io/parsers/CMLParser.js @@ -24633,7 +24649,7 @@ CMLParser.extensions = ['.cml']; // EXTERNAL MODULE: ./vendor/js/mmtf.js var mmtf = __webpack_require__(660); var mmtf_default = /*#__PURE__*/__webpack_require__.n(mmtf); -;// CONCATENATED MODULE: ./src/io/parsers/MMTFParser.js +;// ./src/io/parsers/MMTFParser.js @@ -25061,7 +25077,7 @@ MMTFParser.formats = ['mmtf']; MMTFParser.extensions = ['.mmtf']; MMTFParser.binary = true; /* harmony default export */ const parsers_MMTFParser = (MMTFParser); -;// CONCATENATED MODULE: ./src/io/parsers/ParsingError.js +;// ./src/io/parsers/ParsingError.js class ParsingError extends Error { constructor(message, line, column) { super(`data:${line}:${column}: ${message}`); @@ -25074,7 +25090,7 @@ class ParsingError extends Error { } } /* harmony default export */ const parsers_ParsingError = (ParsingError); -;// CONCATENATED MODULE: ./src/io/parsers/readCIF.js +;// ./src/io/parsers/readCIF.js @@ -25349,7 +25365,7 @@ function readCIF(source) { } return result; } -;// CONCATENATED MODULE: ./src/io/parsers/CIFParser.js +;// ./src/io/parsers/CIFParser.js @@ -25843,7 +25859,7 @@ class CIFParser extends Parser { CIFParser.formats = ['cif', 'mmcif']; CIFParser.extensions = ['.cif', '.mmcif']; /* harmony default export */ const parsers_CIFParser = (CIFParser); -;// CONCATENATED MODULE: ./src/io/parsers/VolumeModel.js +;// ./src/io/parsers/VolumeModel.js @@ -25855,7 +25871,7 @@ const valueType = { }; class VolumeModel { _xyz2crs = []; - _origin = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(0, 0, 0))(); + _origin = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(0, 0, 0); constructor() { this._header = {}; this._boxSize = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(); @@ -25966,7 +25982,7 @@ class VolumeModel { } } /* harmony default export */ const parsers_VolumeModel = (VolumeModel); -;// CONCATENATED MODULE: ./src/io/parsers/CCP4Parser.js +;// ./src/io/parsers/CCP4Parser.js const CCP4Header = { @@ -26102,7 +26118,7 @@ CCP4Parser.formats = ['ccp4']; CCP4Parser.extensions = ['.ccp4', '.map', '.mrc']; CCP4Parser.binary = true; /* harmony default export */ const parsers_CCP4Parser = (CCP4Parser); -;// CONCATENATED MODULE: ./src/io/parsers/XYZParser.js +;// ./src/io/parsers/XYZParser.js @@ -26190,7 +26206,7 @@ class XYZParser extends Parser { static extensions = ['.xyz']; } /* harmony default export */ const parsers_XYZParser = (XYZParser); -;// CONCATENATED MODULE: ./src/io/parsers/PubChemParser.js +;// ./src/io/parsers/PubChemParser.js @@ -26263,7 +26279,7 @@ class PubChemParser extends Parser { PubChemParser.formats = ['pubchem', 'pubchem+json', 'pc']; PubChemParser.extensions = ['.json']; /* harmony default export */ const parsers_PubChemParser = (PubChemParser); -;// CONCATENATED MODULE: ./src/io/parsers/SDFStream.js +;// ./src/io/parsers/SDFStream.js class SDFStream { constructor(data) { @@ -26314,7 +26330,7 @@ class SDFStream { return this._currentStringIndx < this._strings.length - 2; } } -;// CONCATENATED MODULE: ./src/io/parsers/SDFParser.js +;// ./src/io/parsers/SDFParser.js @@ -26630,7 +26646,7 @@ class SDFParser extends Parser { } SDFParser.formats = ['mol', 'sdf']; SDFParser.extensions = ['.mol', '.sdf']; -;// CONCATENATED MODULE: ./src/io/parsers/DSN6Parser.js +;// ./src/io/parsers/DSN6Parser.js @@ -26774,7 +26790,7 @@ DSN6Parser.formats = ['dsn6']; DSN6Parser.extensions = ['.dsn6', '.omap']; DSN6Parser.binary = true; /* harmony default export */ const parsers_DSN6Parser = (DSN6Parser); -;// CONCATENATED MODULE: ./src/io/parsers/GROReader.js +;// ./src/io/parsers/GROReader.js /** @@ -26798,7 +26814,7 @@ class GROReader extends parsers_PDBStream { } } /* harmony default export */ const parsers_GROReader = (GROReader); -;// CONCATENATED MODULE: ./src/io/parsers/GROParser.js +;// ./src/io/parsers/GROParser.js @@ -27003,7 +27019,7 @@ class GROParser extends Parser { GROParser.formats = ['gro']; GROParser.extensions = ['.gro']; /* harmony default export */ const parsers_GROParser = (GROParser); -;// CONCATENATED MODULE: ./src/io/parsers/MOL2Parser.js +;// ./src/io/parsers/MOL2Parser.js @@ -27280,7 +27296,7 @@ class MOL2Parser extends Parser { MOL2Parser.formats = ['mol2']; MOL2Parser.extensions = ['.mol2', '.ml2', '.sy2']; /* harmony default export */ const parsers_MOL2Parser = (MOL2Parser); -;// CONCATENATED MODULE: ./src/io/parsers.js +;// ./src/io/parsers.js @@ -27296,7 +27312,7 @@ MOL2Parser.extensions = ['.mol2', '.ml2', '.sy2']; /* harmony default export */ const parsers = (new parsers_ParserList([ // note: order might be important parsers_PDBParser, parsers_CIFParser, parsers_MMTFParser, parsers_XYZParser, parsers_CMLParser, parsers_PubChemParser, SDFParser, parsers_CCP4Parser, parsers_DSN6Parser, parsers_GROParser, parsers_MOL2Parser])); -;// CONCATENATED MODULE: ./src/io/exporters/ExporterList.js +;// ./src/io/exporters/ExporterList.js /** @@ -27314,8 +27330,7 @@ class ExporterList extends utils_EntityList { * automatically register at creation time. * @see ExporterList#register */ - constructor() { - let someExporters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + constructor(someExporters = []) { super(someExporters, ['formats']); } @@ -27335,7 +27350,7 @@ class ExporterList extends utils_EntityList { } } /* harmony default export */ const exporters_ExporterList = (ExporterList); -;// CONCATENATED MODULE: ./src/io/exporters/Exporter.js +;// ./src/io/exporters/Exporter.js class Exporter { constructor(source, options) { @@ -27365,7 +27380,7 @@ class Exporter { } } utils_makeContextDependent(Exporter.prototype); -;// CONCATENATED MODULE: ./src/io/exporters/PDBResult.js +;// ./src/io/exporters/PDBResult.js class PDBResult { @@ -27546,7 +27561,7 @@ class PDBResult { } } } -;// CONCATENATED MODULE: ./src/io/exporters/PDBExporter.js +;// ./src/io/exporters/PDBExporter.js @@ -27793,7 +27808,7 @@ class PDBExporter extends Exporter { } PDBExporter.formats = ['pdb']; PDBExporter.SourceClass = chem_Complex; -;// CONCATENATED MODULE: ./src/io/exporters/fbx/FBXModel.js +;// ./src/io/exporters/fbx/FBXModel.js const FBX_POS_SIZE = 3; const FBX_NORM_SIZE = 3; @@ -27937,7 +27952,7 @@ class FBXModel { this.setColors(geo.colors, 0, geo.vertsCount, size.color); } } -;// CONCATENATED MODULE: ./src/io/exporters/fbx/FBXGeometry.js +;// ./src/io/exporters/fbx/FBXGeometry.js /** Base class for fbx geometry contains simply organized attributes: positions+normals+colors, indices. */ class FBXGeometry { /** @@ -27968,7 +27983,7 @@ class FBXGeometry { }; } } -;// CONCATENATED MODULE: ./src/io/exporters/fbx/FBX1CGeometry.js +;// ./src/io/exporters/fbx/FBX1CGeometry.js /** @@ -28012,7 +28027,7 @@ class FBX1CGeometry extends FBXGeometry { } } } -;// CONCATENATED MODULE: ./src/io/exporters/fbx/FBX2CCylinder.js +;// ./src/io/exporters/fbx/FBX2CCylinder.js /** @@ -28133,7 +28148,7 @@ class FBX2CCylinder extends FBXGeometry { } } } -;// CONCATENATED MODULE: ./src/io/exporters/fbx/FBXInfoExtractor.js +;// ./src/io/exporters/fbx/FBXInfoExtractor.js @@ -28491,7 +28506,7 @@ class FBXInfoExtractor { matrix.set(scale, 0, 0, x, 0, scale, 0, y, 0, 0, scale, z, 0, 0, 0, 1); } } -;// CONCATENATED MODULE: ./src/io/exporters/fbx/FBXResult.js +;// ./src/io/exporters/fbx/FBXResult.js // Forming default definitions block const defaultDefinitions = ` Definitions: { @@ -28660,7 +28675,7 @@ class FBXResult { const creator = `Miew FBX Exporter v${this._info.version}`; // Supposed to be an engine return `; FBX 6.1.0 project file -; Created by ${creator} Copyright (c) 2015-2024 EPAM Systems, Inc. +; Created by ${creator} Copyright (c) 2015-2026 EPAM Systems, Inc. ; For support please contact miew@epam.com ; ---------------------------------------------------- @@ -28949,7 +28964,7 @@ Connections: { }`; } } -;// CONCATENATED MODULE: ./src/io/exporters/FBXExporter.js +;// ./src/io/exporters/FBXExporter.js @@ -28980,12 +28995,12 @@ class FBXExporter extends Exporter { } FBXExporter.formats = ['fbx']; FBXExporter.SourceClass = src_ComplexVisual; -;// CONCATENATED MODULE: ./src/io/exporters.js +;// ./src/io/exporters.js /* harmony default export */ const exporters = (new exporters_ExporterList([PDBExporter, FBXExporter])); -;// CONCATENATED MODULE: ./src/io/io.js +;// ./src/io/io.js @@ -28994,7 +29009,7 @@ FBXExporter.SourceClass = src_ComplexVisual; parsers: parsers, exporters: exporters }); -;// CONCATENATED MODULE: ./src/gfx/CSS2DRenderer.js +;// ./src/gfx/CSS2DRenderer.js /** * @author mrdoob / http://mrdoob.com/ */ @@ -29095,19 +29110,19 @@ class CSS2DRenderer { } } /* harmony default export */ const gfx_CSS2DRenderer = (CSS2DRenderer); -;// CONCATENATED MODULE: ./src/utils/getTopWindow.js +;// ./src/utils/getTopWindow.js function getTopWindow() { // intercept the exception if we have cross-origin iframe try { if (window.top.location.href !== undefined) { return window.top; } - } catch (e) { + } catch { // provide fallback } return window; } -;// CONCATENATED MODULE: ./src/ui/ObjectControls.js +;// ./src/ui/ObjectControls.js @@ -29862,7 +29877,7 @@ ObjectControls.prototype.setPivot = function (newPivot) { }); }; /* harmony default export */ const ui_ObjectControls = (ObjectControls); -;// CONCATENATED MODULE: ./src/ui/Picker.js +;// ./src/ui/Picker.js @@ -30083,7 +30098,7 @@ Picker.prototype.dispose = function () { } }; /* harmony default export */ const ui_Picker = (Picker); -;// CONCATENATED MODULE: ./src/gfx/Axes.js +;// ./src/gfx/Axes.js class Axes { constructor(target, targetCamera) { @@ -30124,7 +30139,7 @@ class Axes { } } /* harmony default export */ const gfx_Axes = (Axes); -;// CONCATENATED MODULE: ./src/gfx/FrameInfo.js +;// ./src/gfx/FrameInfo.js const cDataOffset = 12; @@ -30411,7 +30426,7 @@ class FrameInfo { * Returns link to atom pos vector, clone it if needed */ - static _vec = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3())(); + static _vec = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.Vector3(); getAtomPos(atomIdx) { const vec = FrameInfo._vec; const self = this; @@ -30429,7 +30444,7 @@ class FrameInfo { } } /* harmony default export */ const gfx_FrameInfo = (FrameInfo); -;// CONCATENATED MODULE: ./src/gfx/objects/SceneObject.js +;// ./src/gfx/objects/SceneObject.js @@ -30504,7 +30519,7 @@ class SceneObject { */ SceneObject.prototype.type = '__'; /* harmony default export */ const objects_SceneObject = (SceneObject); -;// CONCATENATED MODULE: ./src/gfx/objects/LinesObj.js +;// ./src/gfx/objects/LinesObj.js @@ -30573,11 +30588,9 @@ class LinesObj extends objects_SceneObject { LinesObj.prototype.constructor = LinesObj; LinesObj.prototype.type = 'line'; /* harmony default export */ const objects_LinesObj = (LinesObj); -;// CONCATENATED MODULE: ./src/gfx/shaders/Outline.frag -const Outline_namespaceObject = "precision highp float;\r\n\r\nuniform sampler2D srcTex;\r\nuniform vec2 srcTexSize;\r\nuniform vec2 thickness;\r\nvarying vec2 vUv;\r\n\r\n#ifdef DEPTH_OUTLINE\r\n uniform sampler2D srcDepthTex; //depthTexture\r\n uniform vec3 color;\r\n uniform float threshold;\r\n#endif\r\n\r\nvoid main() {\r\n\r\n vec2 pixelSize = thickness / srcTexSize;\r\n\r\n #ifdef DEPTH_OUTLINE\r\n float c00 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,-pixelSize.y)).x;\r\n float c01 = texture2D(srcDepthTex, vUv + vec2(0,-pixelSize.y)).x;\r\n float c02 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,-pixelSize.y)).x;\r\n float c10 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,0)).x;\r\n float c12 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,0)).x;\r\n float c20 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,pixelSize.y)).x;\r\n float c21 = texture2D(srcDepthTex, vUv + vec2(0,pixelSize.y)).x;\r\n float c22 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,pixelSize.y)).x;\r\n\r\n float horizEdge = - c00 - 2.0 * c01 - c02 + c20 + 2.0 * c21 + c22;\r\n float vertEdge = - c00 - 2.0 * c10 - c20 + c02 + 2.0 * c12 + c22;\r\n\r\n float grad = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\r\n\r\n gl_FragColor = ( grad > threshold ) ? vec4(color.rgb, 1.0) : gl_FragColor = texture2D(srcTex, vUv);\r\n\r\n #else\r\n vec4 c00 = texture2D(srcTex, vUv + vec2(-pixelSize.x,-pixelSize.y));\r\n vec4 c01 = texture2D(srcTex, vUv + vec2(0,-pixelSize.y));\r\n vec4 c02 = texture2D(srcTex, vUv + vec2(pixelSize.x,-pixelSize.y));\r\n vec4 c10 = texture2D(srcTex, vUv + vec2(-pixelSize.x,0));\r\n vec4 c12 = texture2D(srcTex, vUv + vec2(pixelSize.x,0));\r\n vec4 c20 = texture2D(srcTex, vUv + vec2(-pixelSize.x,pixelSize.y));\r\n vec4 c21 = texture2D(srcTex, vUv + vec2(0,pixelSize.y));\r\n vec4 c22 = texture2D(srcTex, vUv + vec2(pixelSize.x,pixelSize.y));\r\n\r\n vec4 horizEdge = - c00 - 2.0 * c01 - c02 + c20 + 2.0 * c21 + c22;\r\n vec4 vertEdge = - c00 - 2.0 * c10 - c20 + c02 + 2.0 * c12 + c22;\r\n\r\n vec4 grad = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\r\n gl_FragColor = grad;\r\n #endif\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/OutlineMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/Outline.frag +const Outline_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\nuniform sampler2D srcTex;\r\nuniform vec2 srcTexSize;\r\nuniform vec2 thickness;\r\nvarying vec2 vUv;\r\n\r\n#ifdef DEPTH_OUTLINE\r\n uniform sampler2D srcDepthTex; //depthTexture\r\n uniform vec3 color;\r\n uniform float threshold;\r\n#endif\r\n\r\nvoid main() {\r\n\r\n vec2 pixelSize = thickness / srcTexSize;\r\n\r\n #ifdef DEPTH_OUTLINE\r\n float c00 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,-pixelSize.y)).x;\r\n float c01 = texture2D(srcDepthTex, vUv + vec2(0,-pixelSize.y)).x;\r\n float c02 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,-pixelSize.y)).x;\r\n float c10 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,0)).x;\r\n float c12 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,0)).x;\r\n float c20 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,pixelSize.y)).x;\r\n float c21 = texture2D(srcDepthTex, vUv + vec2(0,pixelSize.y)).x;\r\n float c22 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,pixelSize.y)).x;\r\n\r\n float horizEdge = - c00 - 2.0 * c01 - c02 + c20 + 2.0 * c21 + c22;\r\n float vertEdge = - c00 - 2.0 * c10 - c20 + c02 + 2.0 * c12 + c22;\r\n\r\n float grad = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\r\n\r\n gl_FragColor = ( grad > threshold ) ? vec4(color.rgb, 1.0) : gl_FragColor = texture2D(srcTex, vUv);\r\n\r\n #else\r\n vec4 c00 = texture2D(srcTex, vUv + vec2(-pixelSize.x,-pixelSize.y));\r\n vec4 c01 = texture2D(srcTex, vUv + vec2(0,-pixelSize.y));\r\n vec4 c02 = texture2D(srcTex, vUv + vec2(pixelSize.x,-pixelSize.y));\r\n vec4 c10 = texture2D(srcTex, vUv + vec2(-pixelSize.x,0));\r\n vec4 c12 = texture2D(srcTex, vUv + vec2(pixelSize.x,0));\r\n vec4 c20 = texture2D(srcTex, vUv + vec2(-pixelSize.x,pixelSize.y));\r\n vec4 c21 = texture2D(srcTex, vUv + vec2(0,pixelSize.y));\r\n vec4 c22 = texture2D(srcTex, vUv + vec2(pixelSize.x,pixelSize.y));\r\n\r\n vec4 horizEdge = - c00 - 2.0 * c01 - c02 + c20 + 2.0 * c21 + c22;\r\n vec4 vertEdge = - c00 - 2.0 * c10 - c20 + c02 + 2.0 * c12 + c22;\r\n\r\n vec4 grad = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\r\n gl_FragColor = grad;\r\n #endif\r\n}\r\n"; +;// ./src/gfx/shaders/OutlineMaterial.js @@ -30646,11 +30659,9 @@ class OutlineMaterial extends external_module_three_commonjs_three_commonjs2_thr } OutlineMaterial.prototype.depth = false; /* harmony default export */ const shaders_OutlineMaterial = (OutlineMaterial); -;// CONCATENATED MODULE: ./src/gfx/shaders/FXAA.frag -const FXAA_namespaceObject = "precision highp float;\r\n\r\n// edge end finding algorithm parameters\r\n#define FXAA_QUALITY_PS 8\r\n#define FXAA_QUALITY_P0 1.0\r\n#define FXAA_QUALITY_P1 1.5\r\n#define FXAA_QUALITY_P2 2.0\r\n#define FXAA_QUALITY_P3 2.0\r\n#define FXAA_QUALITY_P4 2.0\r\n#define FXAA_QUALITY_P5 2.0\r\n#define FXAA_QUALITY_P6 4.0\r\n#define FXAA_QUALITY_P7 12.0\r\n// constants\r\nfloat fxaaQualityEdgeThreshold = 0.125;\r\nfloat fxaaQualityEdgeThresholdMin = 0.0625;\r\nfloat fxaaQualitySubpix = 0.7; //0.65;\r\n// global params\r\nuniform sampler2D srcTex;\r\nuniform vec2 srcTexelSize;\r\nuniform vec3 bgColor;\r\n// from vs\r\nvarying vec2 vUv;\r\n//=====================================================================//\r\n// calc luminance from rgb\r\n//'float FxaaLuma(vec3 rgb) {return rgb.y * (0.587/0.299) + rgb.x; } // Lotte's idea about game luminance\r\nfloat FxaaLuma(vec3 rgb) {return dot(rgb, vec3(0.299, 0.587, 0.114)); } // real luminance calculation\r\n // for non-real scene rendering\r\n// texture sampling by pixel position(coords) and offset(in pixels)\r\n vec3 FxaaTex(sampler2D tex, vec2 pos, vec2 off, vec2 res ) {\r\n #ifdef BG_TRANSPARENT\r\n vec4 color = texture2D( tex, pos + off * res );\r\n return mix(color.rgb, bgColor, 1.0 - color.a);\r\n #else\r\n return texture2D( tex, pos + off * res ).xyz;\r\n #endif\r\n}\r\nvec3 FxaaTexTop(sampler2D tex, vec2 pos) {\r\n #ifdef BG_TRANSPARENT\r\n vec4 color = texture2D( tex, pos );\r\n return mix(color.rgb, bgColor, 1.0 - color.a);\r\n #else\r\n return texture2D( tex, pos).xyz;\r\n #endif\r\n}\r\nvec4 FxaaTexTopAlpha(sampler2D tex, vec2 pos) {\r\n return texture2D( tex, pos);\r\n}\r\n\r\n//=====================================================================//\r\nvoid main() {\r\n // renaming\r\n vec2 posM = vUv;\r\n // get luminance for neighbours\r\n float lumaS = FxaaLuma(FxaaTex(srcTex, posM, vec2( 0.0, 1.0 ), srcTexelSize));\r\n float lumaE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, 0.0 ), srcTexelSize));\r\n float lumaN = FxaaLuma(FxaaTex(srcTex, posM, vec2( 0.0, -1.0 ), srcTexelSize));\r\n float lumaW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, 0.0 ), srcTexelSize));\r\n float lumaM = FxaaLuma(FxaaTexTop(srcTex, posM));\r\n // find max and min luminance\r\n float rangeMax = max(max(lumaN, lumaW), max(lumaE, max(lumaS, lumaM)));\r\n float rangeMin = min(min(lumaN, lumaW), min(lumaE, min(lumaS, lumaM)));\r\n // calc maximum non-edge range\r\n float rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\r\n float range = rangeMax - rangeMin;\r\n float rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\r\n // exit when luma contrast is small (is not edge)\r\n if(range < rangeMaxClamped){\r\n gl_FragColor = FxaaTexTopAlpha(srcTex, posM);\r\n return;\r\n }\r\n float subpixRcpRange = 1.0/range;\r\n // note: the sampling coordinates can be calculated in vertex shader but the approach doesn't affect performance\r\n // visibly, thus we decided to leave calculation here for better readability.\r\n // calc other neighbours luminance\r\n float lumaNE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, -1.0 ), srcTexelSize));\r\n float lumaSW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, 1.0 ), srcTexelSize));\r\n float lumaSE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, 1.0 ), srcTexelSize));\r\n float lumaNW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, -1.0 ), srcTexelSize));\r\n/*--------------span calculation and subpix amount calulation-----------------*/\r\n float lumaNS = lumaN + lumaS;\r\n float lumaWE = lumaW + lumaE;\r\n float subpixNSWE = lumaNS + lumaWE;\r\n float edgeHorz1 = (-2.0 * lumaM) + lumaNS;\r\n float edgeVert1 = (-2.0 * lumaM) + lumaWE;\r\n/*--------------------------------------------------------------------------*/\r\n float lumaNESE = lumaNE + lumaSE;\r\n float lumaNWNE = lumaNW + lumaNE;\r\n float edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\r\n float edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\r\n/*--------------------------------------------------------------------------*/\r\n float lumaNWSW = lumaNW + lumaSW;\r\n float lumaSWSE = lumaSW + lumaSE;\r\n float edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\r\n float edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\r\n float edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\r\n float edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\r\n float edgeHorz = abs(edgeHorz3) + edgeHorz4;\r\n float edgeVert = abs(edgeVert3) + edgeVert4;\r\n/*--------------------subpix amount calulation------------------------------*/\r\n float subpixNWSWNESE = lumaNWSW + lumaNESE;\r\n float lengthSign = srcTexelSize.x;\r\n bool horzSpan = edgeHorz >= edgeVert;\r\n // debug code edge span visualization\r\n/*' if (horzSpan)\r\n gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);\r\n else\r\n gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\r\n return;*/\r\n float subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\r\n/*--------------------------------------------------------------------------*/\r\n if(!horzSpan) lumaN = lumaW;\r\n if(!horzSpan) lumaS = lumaE;\r\n if(horzSpan) lengthSign = srcTexelSize.y;\r\n float subpixB = (subpixA * (1.0/12.0)) - lumaM;\r\n/*--------------------------------------------------------------------------*/\r\n float gradientN = lumaN - lumaM;\r\n float gradientS = lumaS - lumaM;\r\n float lumaNN = lumaN + lumaM;\r\n float lumaSS = lumaS + lumaM;\r\n bool pairN = abs(gradientN) >= abs(gradientS);\r\n float gradient = max(abs(gradientN), abs(gradientS));\r\n if(pairN) lengthSign = -lengthSign;\r\n float subpixC = clamp(abs(subpixB) * subpixRcpRange, 0.0, 1.0);\r\n/*--------------------------------------------------------------------------*/\r\n vec2 posB;\r\n posB = posM;\r\n vec2 offNP;\r\n offNP.x = (!horzSpan) ? 0.0 : srcTexelSize.x;\r\n offNP.y = ( horzSpan) ? 0.0 : srcTexelSize.y;\r\n if(!horzSpan) posB.x += lengthSign * 0.5;\r\n if( horzSpan) posB.y += lengthSign * 0.5;\r\n/*--------------------------------------------------------------------------*/\r\n vec2 posN;\r\n posN = posB - offNP * FXAA_QUALITY_P0;\r\n vec2 posP;\r\n posP = posB + offNP * FXAA_QUALITY_P0;\r\n float subpixD = ((-2.0)*subpixC) + 3.0;\r\n float lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN));\r\n float subpixE = subpixC * subpixC;\r\n float lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP));\r\n/*--------------------------------------------------------------------------*/\r\n if(!pairN) lumaNN = lumaSS;\r\n float gradientScaled = gradient * 1.0/4.0;\r\n float lumaMM = lumaM - lumaNN * 0.5;\r\n float subpixF = subpixD * subpixE;\r\n bool lumaMLTZero = lumaMM < 0.0;\r\n/*---------------------looped edge-end search-------------------------------*/\r\n lumaEndN -= lumaNN * 0.5;\r\n lumaEndP -= lumaNN * 0.5;\r\n bool doneN = abs(lumaEndN) >= gradientScaled;\r\n bool doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P1;\r\n bool doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P1;\r\n/*--------------------------------------------------------------------------*/\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P2;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P2;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 3)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P3;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P3;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 4)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P4;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P4;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 5)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P5;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P5;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 6)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P6;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P6;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 7)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P7;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P7;\r\n/*--------------------------------------------------------------------------*/\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n/*----------------calculate subpix offset due to edge ends-------------------*/\r\n float dstN = posM.x - posN.x;\r\n float dstP = posP.x - posM.x;\r\n if(!horzSpan) dstN = posM.y - posN.y;\r\n if(!horzSpan) dstP = posP.y - posM.y;\r\n/*--------------------------------------------------------------------------*/\r\n bool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\r\n float spanLength = (dstP + dstN);\r\n bool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\r\n float spanLengthRcp = 1.0 / spanLength;\r\n/*--------------------------------------------------------------------------*/\r\n bool directionN = dstN < dstP;\r\n float dst = min(dstN, dstP);\r\n bool goodSpan = directionN ? goodSpanN : goodSpanP;\r\n float subpixG = subpixF * subpixF;\r\n float pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\r\n float subpixH = subpixG * fxaaQualitySubpix;\r\n/*-----------------calc texture offest using subpix-------------------------*/\r\n float pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\r\n float pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\r\n\r\n float offset = pixelOffsetSubpix * lengthSign;\r\n #ifdef BG_TRANSPARENT\r\n // get original texel\r\n vec4 rgbaA = FxaaTexTopAlpha(srcTex, posM);\r\n // calc step to blended texel\r\n vec2 step = sign((!horzSpan) ? vec2 (offset, 0.0) : vec2 (0.0, offset));\r\n // get neighboring texel\r\n vec4 rgbaB = FxaaTexTopAlpha(srcTex, posM + step * srcTexelSize);\r\n // calc blend factor from offset\r\n float f = (!horzSpan) ? offset / srcTexelSize.x : offset / srcTexelSize.y;\r\n f = abs(f);\r\n // calc alpha (special formula to emulate blending with bg)\r\n gl_FragColor.a = 1.0 - mix(1.0 - rgbaA.a, 1.0 - rgbaB.a, f);\r\n // calc color (special formula to emulate blending with bg)\r\n gl_FragColor.rgb = mix(rgbaA.rgb * rgbaA.a, rgbaB.rgb * rgbaB.a, f) / gl_FragColor.a;\r\n #else\r\n if(!horzSpan) {\r\n posM.x += offset;\r\n } else {\r\n posM.y += offset;\r\n }\r\n gl_FragColor = FxaaTexTopAlpha(srcTex, posM);\r\n #endif\r\n return;\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/FXAAMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/FXAA.frag +const FXAA_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\n// edge end finding algorithm parameters\r\n#define FXAA_QUALITY_PS 8\r\n#define FXAA_QUALITY_P0 1.0\r\n#define FXAA_QUALITY_P1 1.5\r\n#define FXAA_QUALITY_P2 2.0\r\n#define FXAA_QUALITY_P3 2.0\r\n#define FXAA_QUALITY_P4 2.0\r\n#define FXAA_QUALITY_P5 2.0\r\n#define FXAA_QUALITY_P6 4.0\r\n#define FXAA_QUALITY_P7 12.0\r\n// constants\r\nfloat fxaaQualityEdgeThreshold = 0.125;\r\nfloat fxaaQualityEdgeThresholdMin = 0.0625;\r\nfloat fxaaQualitySubpix = 0.7; //0.65;\r\n// global params\r\nuniform sampler2D srcTex;\r\nuniform vec2 srcTexelSize;\r\nuniform vec3 bgColor;\r\n// from vs\r\nvarying vec2 vUv;\r\n//=====================================================================//\r\n// calc luminance from rgb\r\n//'float FxaaLuma(vec3 rgb) {return rgb.y * (0.587/0.299) + rgb.x; } // Lotte's idea about game luminance\r\nfloat FxaaLuma(vec3 rgb) {return dot(rgb, vec3(0.299, 0.587, 0.114)); } // real luminance calculation\r\n // for non-real scene rendering\r\n// texture sampling by pixel position(coords) and offset(in pixels)\r\n vec3 FxaaTex(sampler2D tex, vec2 pos, vec2 off, vec2 res ) {\r\n #ifdef BG_TRANSPARENT\r\n vec4 color = texture2D( tex, pos + off * res );\r\n return mix(color.rgb, bgColor, 1.0 - color.a);\r\n #else\r\n return texture2D( tex, pos + off * res ).xyz;\r\n #endif\r\n}\r\nvec3 FxaaTexTop(sampler2D tex, vec2 pos) {\r\n #ifdef BG_TRANSPARENT\r\n vec4 color = texture2D( tex, pos );\r\n return mix(color.rgb, bgColor, 1.0 - color.a);\r\n #else\r\n return texture2D( tex, pos).xyz;\r\n #endif\r\n}\r\nvec4 FxaaTexTopAlpha(sampler2D tex, vec2 pos) {\r\n return texture2D( tex, pos);\r\n}\r\n\r\n//=====================================================================//\r\nvoid main() {\r\n // renaming\r\n vec2 posM = vUv;\r\n // get luminance for neighbours\r\n float lumaS = FxaaLuma(FxaaTex(srcTex, posM, vec2( 0.0, 1.0 ), srcTexelSize));\r\n float lumaE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, 0.0 ), srcTexelSize));\r\n float lumaN = FxaaLuma(FxaaTex(srcTex, posM, vec2( 0.0, -1.0 ), srcTexelSize));\r\n float lumaW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, 0.0 ), srcTexelSize));\r\n float lumaM = FxaaLuma(FxaaTexTop(srcTex, posM));\r\n // find max and min luminance\r\n float rangeMax = max(max(lumaN, lumaW), max(lumaE, max(lumaS, lumaM)));\r\n float rangeMin = min(min(lumaN, lumaW), min(lumaE, min(lumaS, lumaM)));\r\n // calc maximum non-edge range\r\n float rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\r\n float range = rangeMax - rangeMin;\r\n float rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\r\n // exit when luma contrast is small (is not edge)\r\n if(range < rangeMaxClamped){\r\n gl_FragColor = FxaaTexTopAlpha(srcTex, posM);\r\n return;\r\n }\r\n float subpixRcpRange = 1.0/range;\r\n // note: the sampling coordinates can be calculated in vertex shader but the approach doesn't affect performance\r\n // visibly, thus we decided to leave calculation here for better readability.\r\n // calc other neighbours luminance\r\n float lumaNE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, -1.0 ), srcTexelSize));\r\n float lumaSW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, 1.0 ), srcTexelSize));\r\n float lumaSE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, 1.0 ), srcTexelSize));\r\n float lumaNW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, -1.0 ), srcTexelSize));\r\n/*--------------span calculation and subpix amount calulation-----------------*/\r\n float lumaNS = lumaN + lumaS;\r\n float lumaWE = lumaW + lumaE;\r\n float subpixNSWE = lumaNS + lumaWE;\r\n float edgeHorz1 = (-2.0 * lumaM) + lumaNS;\r\n float edgeVert1 = (-2.0 * lumaM) + lumaWE;\r\n/*--------------------------------------------------------------------------*/\r\n float lumaNESE = lumaNE + lumaSE;\r\n float lumaNWNE = lumaNW + lumaNE;\r\n float edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\r\n float edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\r\n/*--------------------------------------------------------------------------*/\r\n float lumaNWSW = lumaNW + lumaSW;\r\n float lumaSWSE = lumaSW + lumaSE;\r\n float edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\r\n float edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\r\n float edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\r\n float edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\r\n float edgeHorz = abs(edgeHorz3) + edgeHorz4;\r\n float edgeVert = abs(edgeVert3) + edgeVert4;\r\n/*--------------------subpix amount calulation------------------------------*/\r\n float subpixNWSWNESE = lumaNWSW + lumaNESE;\r\n float lengthSign = srcTexelSize.x;\r\n bool horzSpan = edgeHorz >= edgeVert;\r\n // debug code edge span visualization\r\n/*' if (horzSpan)\r\n gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);\r\n else\r\n gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\r\n return;*/\r\n float subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\r\n/*--------------------------------------------------------------------------*/\r\n if(!horzSpan) lumaN = lumaW;\r\n if(!horzSpan) lumaS = lumaE;\r\n if(horzSpan) lengthSign = srcTexelSize.y;\r\n float subpixB = (subpixA * (1.0/12.0)) - lumaM;\r\n/*--------------------------------------------------------------------------*/\r\n float gradientN = lumaN - lumaM;\r\n float gradientS = lumaS - lumaM;\r\n float lumaNN = lumaN + lumaM;\r\n float lumaSS = lumaS + lumaM;\r\n bool pairN = abs(gradientN) >= abs(gradientS);\r\n float gradient = max(abs(gradientN), abs(gradientS));\r\n if(pairN) lengthSign = -lengthSign;\r\n float subpixC = clamp(abs(subpixB) * subpixRcpRange, 0.0, 1.0);\r\n/*--------------------------------------------------------------------------*/\r\n vec2 posB;\r\n posB = posM;\r\n vec2 offNP;\r\n offNP.x = (!horzSpan) ? 0.0 : srcTexelSize.x;\r\n offNP.y = ( horzSpan) ? 0.0 : srcTexelSize.y;\r\n if(!horzSpan) posB.x += lengthSign * 0.5;\r\n if( horzSpan) posB.y += lengthSign * 0.5;\r\n/*--------------------------------------------------------------------------*/\r\n vec2 posN;\r\n posN = posB - offNP * FXAA_QUALITY_P0;\r\n vec2 posP;\r\n posP = posB + offNP * FXAA_QUALITY_P0;\r\n float subpixD = ((-2.0)*subpixC) + 3.0;\r\n float lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN));\r\n float subpixE = subpixC * subpixC;\r\n float lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP));\r\n/*--------------------------------------------------------------------------*/\r\n if(!pairN) lumaNN = lumaSS;\r\n float gradientScaled = gradient * 1.0/4.0;\r\n float lumaMM = lumaM - lumaNN * 0.5;\r\n float subpixF = subpixD * subpixE;\r\n bool lumaMLTZero = lumaMM < 0.0;\r\n/*---------------------looped edge-end search-------------------------------*/\r\n lumaEndN -= lumaNN * 0.5;\r\n lumaEndP -= lumaNN * 0.5;\r\n bool doneN = abs(lumaEndN) >= gradientScaled;\r\n bool doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P1;\r\n bool doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P1;\r\n/*--------------------------------------------------------------------------*/\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P2;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P2;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 3)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P3;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P3;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 4)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P4;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P4;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 5)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P5;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P5;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 6)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P6;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P6;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 7)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P7;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P7;\r\n/*--------------------------------------------------------------------------*/\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n/*----------------calculate subpix offset due to edge ends-------------------*/\r\n float dstN = posM.x - posN.x;\r\n float dstP = posP.x - posM.x;\r\n if(!horzSpan) dstN = posM.y - posN.y;\r\n if(!horzSpan) dstP = posP.y - posM.y;\r\n/*--------------------------------------------------------------------------*/\r\n bool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\r\n float spanLength = (dstP + dstN);\r\n bool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\r\n float spanLengthRcp = 1.0 / spanLength;\r\n/*--------------------------------------------------------------------------*/\r\n bool directionN = dstN < dstP;\r\n float dst = min(dstN, dstP);\r\n bool goodSpan = directionN ? goodSpanN : goodSpanP;\r\n float subpixG = subpixF * subpixF;\r\n float pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\r\n float subpixH = subpixG * fxaaQualitySubpix;\r\n/*-----------------calc texture offest using subpix-------------------------*/\r\n float pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\r\n float pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\r\n\r\n float offset = pixelOffsetSubpix * lengthSign;\r\n #ifdef BG_TRANSPARENT\r\n // get original texel\r\n vec4 rgbaA = FxaaTexTopAlpha(srcTex, posM);\r\n // calc step to blended texel\r\n vec2 step = sign((!horzSpan) ? vec2 (offset, 0.0) : vec2 (0.0, offset));\r\n // get neighboring texel\r\n vec4 rgbaB = FxaaTexTopAlpha(srcTex, posM + step * srcTexelSize);\r\n // calc blend factor from offset\r\n float f = (!horzSpan) ? offset / srcTexelSize.x : offset / srcTexelSize.y;\r\n f = abs(f);\r\n // calc alpha (special formula to emulate blending with bg)\r\n gl_FragColor.a = 1.0 - mix(1.0 - rgbaA.a, 1.0 - rgbaB.a, f);\r\n // calc color (special formula to emulate blending with bg)\r\n gl_FragColor.rgb = mix(rgbaA.rgb * rgbaA.a, rgbaB.rgb * rgbaB.a, f) / gl_FragColor.a;\r\n #else\r\n if(!horzSpan) {\r\n posM.x += offset;\r\n } else {\r\n posM.y += offset;\r\n }\r\n gl_FragColor = FxaaTexTopAlpha(srcTex, posM);\r\n #endif\r\n return;\r\n}\r\n"; +;// ./src/gfx/shaders/FXAAMaterial.js @@ -30703,11 +30714,9 @@ class FXAAMaterial extends external_module_three_commonjs_three_commonjs2_three_ } FXAAMaterial.prototype.bgTransparent = false; /* harmony default export */ const shaders_FXAAMaterial = (FXAAMaterial); -;// CONCATENATED MODULE: ./src/gfx/shaders/AO.frag -const AO_namespaceObject = "precision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 32\r\nuniform vec3 samplesKernel[MAX_SAMPLES_COUNT];\r\nuniform sampler2D noiseTexture;\r\nuniform vec2 noiseTexelSize;\r\nuniform sampler2D diffuseTexture;\r\nuniform sampler2D depthTexture;\r\nuniform sampler2D normalTexture;\r\nuniform vec2 srcTexelSize;\r\nuniform vec2 camNearFar;\r\nuniform mat4 projMatrix;\r\n\r\nuniform float aspectRatio;\r\nuniform float tanHalfFOV;\r\n\r\nuniform float kernelRadius;\r\nuniform float depthThreshold;\r\nuniform float factor;\r\n\r\nvarying vec2 vUv;\r\n\r\nfloat CalcViewZ(vec2 screenPos)\r\n{\r\n float depth = texture2D(depthTexture, screenPos).x;\r\n // [0, 1]->[-1, 1]\r\n float clipedZ = 2.0 * depth - 1.0;\r\n // see THREE.js camera.makeFrustum for projection details\r\n return (-projMatrix[3][2] / (clipedZ + projMatrix[2][2]));\r\n}\r\n\r\nvec3 ViewPosFromDepth(vec2 screenPos)\r\n{\r\n vec3 viewPos;\r\n viewPos.z = CalcViewZ(screenPos);\r\n //[0, 1]->[-1, 1]\r\n vec2 projPos = 2.0 * screenPos - 1.0;\r\n // reconstruct viewposition in right-handed sc with z to viewer\r\n viewPos.xy = vec2(\r\n projPos.x * aspectRatio * tanHalfFOV * abs(viewPos.z),\r\n projPos.y * tanHalfFOV * abs(viewPos.z)\r\n );\r\n return viewPos;\r\n}\r\n\r\nvoid main() {\r\n vec3 viewPos = ViewPosFromDepth(vUv);\r\n // remap coordinates to prevent noise exture rescale\r\n vec2 vUvNoise = vUv / srcTexelSize * noiseTexelSize;\r\n vec4 normalData = texture2D(normalTexture, vUv);\r\n // return for background fragments (their normals are zero vectors)\r\n if (length(normalData.rgb) < EPSILON) {\r\n // 0.0 in alpha component means that it is background fragment\r\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\r\n return;\r\n }\r\n //[0, 1] -> [-1, 1]\r\n vec3 normal = (normalData.rgb * 2.0 - 1.0);\r\n // normalData.a store 1.0 if normal was build for frontfaced surface\r\n // and 0.0 in other case\r\n if (normalData.a < EPSILON) {\r\n normal *= -1.0;\r\n }\r\n // get random vector for sampling sphere rotation\r\n vec3 randN = texture2D(noiseTexture, vUvNoise).rgb * 2.0 - 1.0;\r\n randN = normalize(randN);\r\n // build TBN (randomly rotated around normal)\r\n vec3 tangent = normalize(randN - normal * dot(randN, normal));\r\n vec3 bitangent = cross(tangent, normal);\r\n mat3 TBN = mat3(tangent, bitangent, normal);\r\n // calc AO value\r\n float AO = 0.0;\r\n for (int i = 0 ; i < MAX_SAMPLES_COUNT ; i++) {\r\n // rotate sampling kernel around normal\r\n vec3 reflectedSample = TBN * samplesKernel[i];\r\n // get sample\r\n vec3 samplePos = viewPos + reflectedSample * kernelRadius;\r\n\r\n // project sample to screen to get sample's screen pos\r\n vec4 SampleScrPos = vec4(samplePos, 1.0);\r\n // eye -> clip\r\n SampleScrPos = projMatrix * SampleScrPos;\r\n // normalize\r\n SampleScrPos.xy /= SampleScrPos.w;\r\n //[-1, 1] -> [0, 1]\r\n SampleScrPos.xy = (SampleScrPos.xy + vec2(1.0)) * 0.5;\r\n\r\n // get view z for sample projected to the objct surface\r\n float sampleDepth = CalcViewZ(SampleScrPos.xy);\r\n // calc occlusion made by object surface at the sample\r\n AO += step(samplePos.z, sampleDepth);\r\n }\r\n // calc result AO-map color\r\n AO = 1.0 - max(0.0, AO / float(MAX_SAMPLES_COUNT) * factor);\r\n // write value to AO-map\r\n gl_FragColor = vec4(AO, AO, AO, 1.0);\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/AOMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/AO.frag +const AO_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 32\r\nuniform vec3 samplesKernel[MAX_SAMPLES_COUNT];\r\nuniform sampler2D noiseTexture;\r\nuniform vec2 noiseTexelSize;\r\nuniform sampler2D diffuseTexture;\r\nuniform sampler2D depthTexture;\r\nuniform sampler2D normalTexture;\r\nuniform vec2 srcTexelSize;\r\nuniform vec2 camNearFar;\r\nuniform mat4 projMatrix;\r\n\r\nuniform float aspectRatio;\r\nuniform float tanHalfFOV;\r\n\r\nuniform float kernelRadius;\r\nuniform float depthThreshold;\r\nuniform float factor;\r\n\r\nvarying vec2 vUv;\r\n\r\nfloat CalcViewZ(vec2 screenPos)\r\n{\r\n float depth = texture2D(depthTexture, screenPos).x;\r\n // [0, 1]->[-1, 1]\r\n float clipedZ = 2.0 * depth - 1.0;\r\n // see THREE.js camera.makeFrustum for projection details\r\n return (-projMatrix[3][2] / (clipedZ + projMatrix[2][2]));\r\n}\r\n\r\nvec3 ViewPosFromDepth(vec2 screenPos)\r\n{\r\n vec3 viewPos;\r\n viewPos.z = CalcViewZ(screenPos);\r\n //[0, 1]->[-1, 1]\r\n vec2 projPos = 2.0 * screenPos - 1.0;\r\n // reconstruct viewposition in right-handed sc with z to viewer\r\n viewPos.xy = vec2(\r\n projPos.x * aspectRatio * tanHalfFOV * abs(viewPos.z),\r\n projPos.y * tanHalfFOV * abs(viewPos.z)\r\n );\r\n return viewPos;\r\n}\r\n\r\nvoid main() {\r\n vec3 viewPos = ViewPosFromDepth(vUv);\r\n // remap coordinates to prevent noise exture rescale\r\n vec2 vUvNoise = vUv / srcTexelSize * noiseTexelSize;\r\n vec4 normalData = texture2D(normalTexture, vUv);\r\n // return for background fragments (their normals are zero vectors)\r\n if (length(normalData.rgb) < EPSILON) {\r\n // 0.0 in alpha component means that it is background fragment\r\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\r\n return;\r\n }\r\n //[0, 1] -> [-1, 1]\r\n vec3 normal = (normalData.rgb * 2.0 - 1.0);\r\n // normalData.a store 1.0 if normal was build for frontfaced surface\r\n // and 0.0 in other case\r\n if (normalData.a < EPSILON) {\r\n normal *= -1.0;\r\n }\r\n // get random vector for sampling sphere rotation\r\n vec3 randN = texture2D(noiseTexture, vUvNoise).rgb * 2.0 - 1.0;\r\n randN = normalize(randN);\r\n // build TBN (randomly rotated around normal)\r\n vec3 tangent = normalize(randN - normal * dot(randN, normal));\r\n vec3 bitangent = cross(tangent, normal);\r\n mat3 TBN = mat3(tangent, bitangent, normal);\r\n // calc AO value\r\n float AO = 0.0;\r\n for (int i = 0 ; i < MAX_SAMPLES_COUNT ; i++) {\r\n // rotate sampling kernel around normal\r\n vec3 reflectedSample = TBN * samplesKernel[i];\r\n // get sample\r\n vec3 samplePos = viewPos + reflectedSample * kernelRadius;\r\n\r\n // project sample to screen to get sample's screen pos\r\n vec4 SampleScrPos = vec4(samplePos, 1.0);\r\n // eye -> clip\r\n SampleScrPos = projMatrix * SampleScrPos;\r\n // normalize\r\n SampleScrPos.xy /= SampleScrPos.w;\r\n //[-1, 1] -> [0, 1]\r\n SampleScrPos.xy = (SampleScrPos.xy + vec2(1.0)) * 0.5;\r\n\r\n // get view z for sample projected to the objct surface\r\n float sampleDepth = CalcViewZ(SampleScrPos.xy);\r\n // calc occlusion made by object surface at the sample\r\n AO += step(samplePos.z, sampleDepth);\r\n }\r\n // calc result AO-map color\r\n AO = 1.0 - max(0.0, AO / float(MAX_SAMPLES_COUNT) * factor);\r\n // write value to AO-map\r\n gl_FragColor = vec4(AO, AO, AO, 1.0);\r\n}\r\n"; +;// ./src/gfx/shaders/AOMaterial.js @@ -30788,11 +30797,9 @@ class AOMaterial extends external_module_three_commonjs_three_commonjs2_three_am } } /* harmony default export */ const shaders_AOMaterial = (AOMaterial); -;// CONCATENATED MODULE: ./src/gfx/shaders/AOHorBlur.frag -const AOHorBlur_namespaceObject = "precision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 5\r\nuniform float samplesOffsets[MAX_SAMPLES_COUNT];\r\nuniform sampler2D aoMap;\r\nuniform sampler2D depthTexture;\r\nuniform vec2 srcTexelSize;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n float x = vUv.x;\r\n float y = vUv.y;\r\n vec4 res = vec4(0.0);\r\n res.a = texture2D(aoMap, vec2(x, y )).a;\r\n // return for background fragments (0.0 in alpha component means that it is background fragment)\r\n if (res.a < EPSILON) {\r\n gl_FragColor = res;\r\n return;\r\n }\r\n\r\n float pixelDepth = texture2D(depthTexture, vec2(x, y)).x;\r\n float weightSum = 0.0;\r\n for (int i = 0; i < MAX_SAMPLES_COUNT; ++i) {\r\n if (texture2D(aoMap, vec2(x + samplesOffsets[i] * srcTexelSize.x, y )).a < EPSILON) {\r\n continue;\r\n }\r\n vec2 samplePos = vec2(x + samplesOffsets[i] * srcTexelSize.x, y);\r\n float depth = texture2D(depthTexture, samplePos).x;\r\n float weight = (1.0 / (0.0001 + abs(depth - pixelDepth)));\r\n res.rgb += texture2D(aoMap, vec2(x + samplesOffsets[i] * srcTexelSize.x, y )).rgb * weight;\r\n weightSum += weight;\r\n }\r\n res.rgb = res.rgb / weightSum;\r\n gl_FragColor = res;\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/AOHorBlurMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/AOHorBlur.frag +const AOHorBlur_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 5\r\nuniform float samplesOffsets[MAX_SAMPLES_COUNT];\r\nuniform sampler2D aoMap;\r\nuniform sampler2D depthTexture;\r\nuniform vec2 srcTexelSize;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n float x = vUv.x;\r\n float y = vUv.y;\r\n vec4 res = vec4(0.0);\r\n res.a = texture2D(aoMap, vec2(x, y )).a;\r\n // return for background fragments (0.0 in alpha component means that it is background fragment)\r\n if (res.a < EPSILON) {\r\n gl_FragColor = res;\r\n return;\r\n }\r\n\r\n float pixelDepth = texture2D(depthTexture, vec2(x, y)).x;\r\n float weightSum = 0.0;\r\n for (int i = 0; i < MAX_SAMPLES_COUNT; ++i) {\r\n if (texture2D(aoMap, vec2(x + samplesOffsets[i] * srcTexelSize.x, y )).a < EPSILON) {\r\n continue;\r\n }\r\n vec2 samplePos = vec2(x + samplesOffsets[i] * srcTexelSize.x, y);\r\n float depth = texture2D(depthTexture, samplePos).x;\r\n float weight = (1.0 / (0.0001 + abs(depth - pixelDepth)));\r\n res.rgb += texture2D(aoMap, vec2(x + samplesOffsets[i] * srcTexelSize.x, y )).rgb * weight;\r\n weightSum += weight;\r\n }\r\n res.rgb = res.rgb / weightSum;\r\n gl_FragColor = res;\r\n}\r\n"; +;// ./src/gfx/shaders/AOHorBlurMaterial.js @@ -30830,11 +30837,9 @@ class AOHorBlurMaterial extends external_module_three_commonjs_three_commonjs2_t } } /* harmony default export */ const shaders_AOHorBlurMaterial = (AOHorBlurMaterial); -;// CONCATENATED MODULE: ./src/gfx/shaders/AOVertBlurWithBlend.frag -const AOVertBlurWithBlend_namespaceObject = "precision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 5\r\nuniform float samplesOffsets[MAX_SAMPLES_COUNT];\r\nuniform sampler2D diffuseTexture;\r\nuniform sampler2D aoMap;\r\nuniform sampler2D depthTexture;\r\nuniform vec2 srcTexelSize;\r\n\r\nuniform mat4 projMatrix;\r\nuniform float aspectRatio;\r\nuniform float tanHalfFOV;\r\n\r\n#ifdef USE_FOG\r\n uniform vec2 fogNearFar;\r\n uniform vec4 fogColor;\r\n#endif\r\nvarying vec2 vUv;\r\n\r\nfloat CalcViewZ(vec2 screenPos)\r\n{\r\n float depth = texture2D(depthTexture, screenPos).x;\r\n // [0, 1]->[-1, 1]\r\n float clipedZ = 2.0 * depth - 1.0;\r\n // see THREE.js camera.makeFrustum for projection details\r\n return (-projMatrix[3][2] / (clipedZ + projMatrix[2][2]));\r\n}\r\n\r\nvec3 ViewPosFromDepth(vec2 screenPos)\r\n{\r\n vec3 viewPos;\r\n viewPos.z = CalcViewZ(screenPos);\r\n //[0, 1]->[-1, 1]\r\n vec2 projPos = 2.0 * screenPos - 1.0;\r\n // reconstruct viewposition in right-handed sc with z to viewer\r\n viewPos.xy = vec2(\r\n projPos.x * aspectRatio * tanHalfFOV * abs(viewPos.z),\r\n projPos.y * tanHalfFOV * abs(viewPos.z)\r\n );\r\n return viewPos;\r\n}\r\n\r\nvoid main() {\r\n vec3 viewPos = ViewPosFromDepth(vUv);\r\n float x = vUv.x;\r\n float y = vUv.y;\r\n vec4 color = texture2D(diffuseTexture, vec2(x, y));\r\n vec4 res = vec4(0.0);\r\n res.a = texture2D(aoMap, vec2(x, y )).a;\r\n // return for background fragments (0.0 in alpha component means that it is background fragment)\r\n if (res.a < EPSILON) {\r\n gl_FragColor = color;\r\n return;\r\n }\r\n\r\n float pixelDepth = texture2D(depthTexture, vec2(x, y)).x;\r\n float weightSum = 0.0;\r\n for (int i = 0; i < MAX_SAMPLES_COUNT; ++i) {\r\n if (texture2D(aoMap, vec2(x, y + samplesOffsets[i] * srcTexelSize.y)).a < EPSILON) {\r\n continue;\r\n }\r\n vec2 samplePos = vec2(x, y + samplesOffsets[i] * srcTexelSize.y);\r\n float depth = texture2D(depthTexture, samplePos).x;\r\n float weight = (1.0 / (0.0001 + abs(depth - pixelDepth)));\r\n res.rgb += texture2D(aoMap, vec2(x, y + samplesOffsets[i] * srcTexelSize.y)).rgb * weight;\r\n weightSum += weight;\r\n }\r\n res.rgb /= weightSum;\r\n\r\n #if defined(USE_FOG) && !defined(FOG_TRANSPARENT)\r\n // Add fog to the result value\r\n // Proper way to get an image with fog and ao requires formula:\r\n // gl_FragColor = fragColor*AO*(1-fogFactor) + fogColor*fogFactor\r\n // But we have already fogged molecule to add AO too. Let's split the straight formula into our real steps!\r\n // We have: AO, fogFactor, fogColor,\r\n // color = fragColor*(1-fogFactor) + fogColor*fogFactor (it comes from diffuseTexture,\r\n // where molecule has been already drawn with fog)\r\n // Transform:\r\n // fragColor*AO*(1-fogFactor) + fogColor*fogFactor =\r\n // = [fragColor*(1-fogFactor) = color - fogColor*fogFactor] =\r\n // = (color - fogColor*fogFactor)*AO + fogColor*fogFactor =\r\n // = color*AO + fogColor*fogFactor*(1 - AO)\r\n // Result: gl_FragColor = color*AO + fogColor*fogFactor*(1 - AO)\r\n float fogFactor = smoothstep(fogNearFar.x, fogNearFar.y, - viewPos.z) * fogColor.a;\r\n gl_FragColor.rgb = color.rgb * res.rgb + fogColor.rgb * fogFactor *(vec3(1.0, 1.0, 1.0) - res.rgb);\r\n #else\r\n gl_FragColor.rgb = color.rgb * res.rgb;\r\n #endif\r\n gl_FragColor.a = color.a;\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/AOVertBlurWithBlendMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/AOVertBlurWithBlend.frag +const AOVertBlurWithBlend_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 5\r\nuniform float samplesOffsets[MAX_SAMPLES_COUNT];\r\nuniform sampler2D diffuseTexture;\r\nuniform sampler2D aoMap;\r\nuniform sampler2D depthTexture;\r\nuniform vec2 srcTexelSize;\r\n\r\nuniform mat4 projMatrix;\r\nuniform float aspectRatio;\r\nuniform float tanHalfFOV;\r\n\r\n#ifdef USE_FOG\r\n uniform vec2 fogNearFar;\r\n uniform vec4 fogColor;\r\n#endif\r\nvarying vec2 vUv;\r\n\r\nfloat CalcViewZ(vec2 screenPos)\r\n{\r\n float depth = texture2D(depthTexture, screenPos).x;\r\n // [0, 1]->[-1, 1]\r\n float clipedZ = 2.0 * depth - 1.0;\r\n // see THREE.js camera.makeFrustum for projection details\r\n return (-projMatrix[3][2] / (clipedZ + projMatrix[2][2]));\r\n}\r\n\r\nvec3 ViewPosFromDepth(vec2 screenPos)\r\n{\r\n vec3 viewPos;\r\n viewPos.z = CalcViewZ(screenPos);\r\n //[0, 1]->[-1, 1]\r\n vec2 projPos = 2.0 * screenPos - 1.0;\r\n // reconstruct viewposition in right-handed sc with z to viewer\r\n viewPos.xy = vec2(\r\n projPos.x * aspectRatio * tanHalfFOV * abs(viewPos.z),\r\n projPos.y * tanHalfFOV * abs(viewPos.z)\r\n );\r\n return viewPos;\r\n}\r\n\r\nvoid main() {\r\n vec3 viewPos = ViewPosFromDepth(vUv);\r\n float x = vUv.x;\r\n float y = vUv.y;\r\n vec4 color = texture2D(diffuseTexture, vec2(x, y));\r\n vec4 res = vec4(0.0);\r\n res.a = texture2D(aoMap, vec2(x, y )).a;\r\n // return for background fragments (0.0 in alpha component means that it is background fragment)\r\n if (res.a < EPSILON) {\r\n gl_FragColor = color;\r\n return;\r\n }\r\n\r\n float pixelDepth = texture2D(depthTexture, vec2(x, y)).x;\r\n float weightSum = 0.0;\r\n for (int i = 0; i < MAX_SAMPLES_COUNT; ++i) {\r\n if (texture2D(aoMap, vec2(x, y + samplesOffsets[i] * srcTexelSize.y)).a < EPSILON) {\r\n continue;\r\n }\r\n vec2 samplePos = vec2(x, y + samplesOffsets[i] * srcTexelSize.y);\r\n float depth = texture2D(depthTexture, samplePos).x;\r\n float weight = (1.0 / (0.0001 + abs(depth - pixelDepth)));\r\n res.rgb += texture2D(aoMap, vec2(x, y + samplesOffsets[i] * srcTexelSize.y)).rgb * weight;\r\n weightSum += weight;\r\n }\r\n res.rgb /= weightSum;\r\n\r\n #if defined(USE_FOG) && !defined(FOG_TRANSPARENT)\r\n // Add fog to the result value\r\n // Proper way to get an image with fog and ao requires formula:\r\n // gl_FragColor = fragColor*AO*(1-fogFactor) + fogColor*fogFactor\r\n // But we have already fogged molecule to add AO too. Let's split the straight formula into our real steps!\r\n // We have: AO, fogFactor, fogColor,\r\n // color = fragColor*(1-fogFactor) + fogColor*fogFactor (it comes from diffuseTexture,\r\n // where molecule has been already drawn with fog)\r\n // Transform:\r\n // fragColor*AO*(1-fogFactor) + fogColor*fogFactor =\r\n // = [fragColor*(1-fogFactor) = color - fogColor*fogFactor] =\r\n // = (color - fogColor*fogFactor)*AO + fogColor*fogFactor =\r\n // = color*AO + fogColor*fogFactor*(1 - AO)\r\n // Result: gl_FragColor = color*AO + fogColor*fogFactor*(1 - AO)\r\n float fogFactor = smoothstep(fogNearFar.x, fogNearFar.y, - viewPos.z) * fogColor.a;\r\n gl_FragColor.rgb = color.rgb * res.rgb + fogColor.rgb * fogFactor *(vec3(1.0, 1.0, 1.0) - res.rgb);\r\n #else\r\n gl_FragColor.rgb = color.rgb * res.rgb;\r\n #endif\r\n gl_FragColor.a = color.a;\r\n}\r\n"; +;// ./src/gfx/shaders/AOVertBlurWithBlendMaterial.js @@ -30916,11 +30921,9 @@ class AOVertBlurWithBlendMaterial extends external_module_three_commonjs_three_c AOVertBlurWithBlendMaterial.prototype.useFog = true; AOVertBlurWithBlendMaterial.prototype.fogTransparent = false; /* harmony default export */ const shaders_AOVertBlurWithBlendMaterial = (AOVertBlurWithBlendMaterial); -;// CONCATENATED MODULE: ./src/gfx/shaders/Anaglyph.frag -const Anaglyph_namespaceObject = "precision highp float;\r\n\r\nuniform sampler2D srcL;\r\nuniform sampler2D srcR;\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n vec4 l = texture2D(srcL, vUv);\r\n vec4 r = texture2D(srcR, vUv);\r\n gl_FragColor = vec4(l.r, r.g, r.b, 1.0);\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/AnaglyphMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/Anaglyph.frag +const Anaglyph_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\nuniform sampler2D srcL;\r\nuniform sampler2D srcR;\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n vec4 l = texture2D(srcL, vUv);\r\n vec4 r = texture2D(srcR, vUv);\r\n gl_FragColor = vec4(l.r, r.g, r.b, 1.0);\r\n}\r\n"; +;// ./src/gfx/shaders/AnaglyphMaterial.js @@ -30948,7 +30951,7 @@ class AnaglyphMaterial extends external_module_three_commonjs_three_commonjs2_th } } /* harmony default export */ const shaders_AnaglyphMaterial = (AnaglyphMaterial); -;// CONCATENATED MODULE: ./src/gfx/ViewInterpolator.js +;// ./src/gfx/ViewInterpolator.js class View { @@ -31030,7 +31033,7 @@ class ViewInterpolator { return new View(); } } -;// CONCATENATED MODULE: ./src/utils/Cookies.js +;// ./src/utils/Cookies.js const MAX_COOKIE_LEN = 4000; @@ -31139,7 +31142,7 @@ Cookies.prototype._exists = function (key) { return document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`)); }; /* harmony default export */ const utils_Cookies = (Cookies); -;// CONCATENATED MODULE: ./src/gfx/vr/createWebVRButton.js +;// ./src/gfx/vr/createWebVRButton.js /* * Toggling WebVR is done through button.click because of limitations on calling requestPresent in webVR: * VRDisplay::requestPresent should be called from user gesture: @@ -31153,7 +31156,7 @@ Cookies.prototype._exists = function (key) { button.style.width = '100px'; button.textContent = 'ENTER VR'; let currentSession = null; - function onSessionEnded( /* event */ + function onSessionEnded(/* event */ ) { currentSession.removeEventListener('end', onSessionEnded); button.textContent = 'ENTER VR'; @@ -31231,7 +31234,7 @@ Cookies.prototype._exists = function (key) { stylizeElement(message); return message; } -;// CONCATENATED MODULE: ./src/gfx/vr/WebVRPoC.js +;// ./src/gfx/vr/WebVRPoC.js @@ -31482,9 +31485,9 @@ class WebVRPoC { return gfx && gfx.renderer ? gfx.renderer.domElement : null; } } -;// CONCATENATED MODULE: ./src/gfx/shaders/ScreenQuadFromDistortionTex.frag -const ScreenQuadFromDistortionTex_namespaceObject = "precision highp float;\r\n\r\nvarying vec2 vUv;\r\nuniform sampler2D srcTex;\r\nuniform vec3 aberration;\r\n\r\nvoid main() {\r\n vec2 uv = vUv * 2.0 - 1.0;\r\n \r\n gl_FragColor.r = texture2D(srcTex, 0.5 * (uv * aberration[0] + 1.0)).r;\r\n gl_FragColor.g = texture2D(srcTex, 0.5 * (uv * aberration[1] + 1.0)).g;\r\n gl_FragColor.b = texture2D(srcTex, 0.5 * (uv * aberration[2] + 1.0)).b;\r\n gl_FragColor.a = 1.0;\r\n}"; -;// CONCATENATED MODULE: ./src/Miew.js +;// ./src/gfx/shaders/ScreenQuadFromDistortionTex.frag +const ScreenQuadFromDistortionTex_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\nvarying vec2 vUv;\r\nuniform sampler2D srcTex;\r\nuniform vec3 aberration;\r\n\r\nvoid main() {\r\n vec2 uv = vUv * 2.0 - 1.0;\r\n \r\n gl_FragColor.r = texture2D(srcTex, 0.5 * (uv * aberration[0] + 1.0)).r;\r\n gl_FragColor.g = texture2D(srcTex, 0.5 * (uv * aberration[1] + 1.0)).g;\r\n gl_FragColor.b = texture2D(srcTex, 0.5 * (uv * aberration[2] + 1.0)).b;\r\n gl_FragColor.a = 1.0;\r\n}"; +;// ./src/Miew.js /* global PACKAGE_VERSION:false */ @@ -31877,12 +31880,6 @@ Miew.prototype._requestAnimationFrame = function (callback) { } requestAnimationFrame(callback); }; -function arezSpritesSupported(context) { - return context.getExtension('EXT_frag_depth'); -} -function isAOSupported(context) { - return context.getExtension('WEBGL_depth_texture') && context.getExtension('WEBGL_draw_buffers'); -} /** * Initialize WebGL and set 3D scene up. @@ -31902,19 +31899,11 @@ Miew.prototype._initGfx = function () { webGLOptions.antialias = true; } gfx.renderer2d = new gfx_CSS2DRenderer(); - gfx.renderer = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.WebGL1Renderer(webGLOptions); + gfx.renderer = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.WebGLRenderer(webGLOptions); gfx.renderer.shadowMap.enabled = settings.now.shadow.on; gfx.renderer.shadowMap.autoUpdate = false; gfx.renderer.shadowMap.type = external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.PCFShadowMap; capabilities.init(gfx.renderer); - - // z-sprites and ambient occlusion possibility - if (!arezSpritesSupported(gfx.renderer.getContext())) { - settings.set('zSprites', false); - } - if (!isAOSupported(gfx.renderer.getContext())) { - settings.set('ao', false); - } gfx.renderer.autoClear = false; gfx.renderer.setPixelRatio(window.devicePixelRatio); gfx.renderer.setSize(gfx.width, gfx.height); @@ -31971,10 +31960,8 @@ Miew.prototype._initGfx = function () { format: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.RGBAFormat, depthBuffer: true }); - if (gfx.renderer.getContext().getExtension('WEBGL_depth_texture')) { - gfx.offscreenBuf.depthTexture = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.DepthTexture(); - gfx.offscreenBuf.depthTexture.type = external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.UnsignedShortType; - } + gfx.offscreenBuf.depthTexture = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.DepthTexture(); + gfx.offscreenBuf.depthTexture.type = external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.UnsignedShortType; gfx.offscreenBuf2 = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.WebGLRenderTarget(deviceWidth, deviceHeight, { minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, @@ -31997,35 +31984,31 @@ Miew.prototype._initGfx = function () { gfx.volFFTex = gfx.offscreenBuf4; gfx.volWFFTex = gfx.offscreenBuf; - // use float textures for volume rendering if possible - if (gfx.renderer.getContext().getExtension('OES_texture_float')) { - gfx.offscreenBuf5 = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.WebGLRenderTarget(deviceWidth, deviceHeight, { - minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, - magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, - format: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.RGBAFormat, - type: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.FloatType, - depthBuffer: false - }); - gfx.offscreenBuf6 = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.WebGLRenderTarget(deviceWidth, deviceHeight, { - minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, - magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, - format: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.RGBAFormat, - type: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.FloatType, - depthBuffer: false - }); - gfx.offscreenBuf7 = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.WebGLRenderTarget(deviceWidth, deviceHeight, { - minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, - magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, - format: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.RGBAFormat, - type: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.FloatType, - depthBuffer: true - }); - gfx.volBFTex = gfx.offscreenBuf5; - gfx.volFFTex = gfx.offscreenBuf6; - gfx.volWFFTex = gfx.offscreenBuf7; - } else { - this.logger.warn('Device doesn\'t support OES_texture_float extension'); - } + // use float textures for volume rendering (WebGL2 core feature) + gfx.offscreenBuf5 = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.WebGLRenderTarget(deviceWidth, deviceHeight, { + minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, + magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, + format: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.RGBAFormat, + type: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.FloatType, + depthBuffer: false + }); + gfx.offscreenBuf6 = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.WebGLRenderTarget(deviceWidth, deviceHeight, { + minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, + magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, + format: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.RGBAFormat, + type: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.FloatType, + depthBuffer: false + }); + gfx.offscreenBuf7 = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.WebGLRenderTarget(deviceWidth, deviceHeight, { + minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, + magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, + format: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.RGBAFormat, + type: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.FloatType, + depthBuffer: true + }); + gfx.volBFTex = gfx.offscreenBuf5; + gfx.volFFTex = gfx.offscreenBuf6; + gfx.volWFFTex = gfx.offscreenBuf7; gfx.stereoBufL = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.WebGLRenderTarget(deviceWidth, deviceHeight, { minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_.LinearFilter, @@ -32547,12 +32530,11 @@ Miew.prototype._setUberMaterialValues = function (values) { Miew.prototype._enableMRT = function (on, renderBuffer, textureBuffer) { const gfx = this._gfx; const gl = gfx.renderer.getContext(); - const ext = gl.getExtension('WEBGL_draw_buffers'); const { properties } = gfx.renderer; if (!on) { - ext.drawBuffersWEBGL([gl.COLOR_ATTACHMENT0, null]); + gl.drawBuffers([gl.COLOR_ATTACHMENT0, null]); return; } @@ -32571,10 +32553,10 @@ Miew.prototype._enableMRT = function (on, renderBuffer, textureBuffer) { fb.width = renderBuffer.width; fb.height = renderBuffer.height; gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tx, 0); - gl.framebufferTexture2D(gl.FRAMEBUFFER, ext.COLOR_ATTACHMENT1_WEBGL, gl.TEXTURE_2D, tx8, 0); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, tx8, 0); - // mapping textures - ext.drawBuffersWEBGL([gl.COLOR_ATTACHMENT0, ext.COLOR_ATTACHMENT1_WEBGL]); + // mapping textures (MRT is core feature in WebGL2) + gl.drawBuffers([gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]); }; Miew.prototype._renderScene = function () { return function (camera, distortion, target) { @@ -33407,7 +33389,7 @@ Miew.prototype._startAnimation = function (fileData) { self.logger.error(message); } }); - } catch (e) { + } catch { this.logger.error('Animation file does not fit to current complex!'); return; } @@ -33470,7 +33452,7 @@ Miew.prototype._continueAnimation = function () { self._refreshTitle(` Frame ${self._frameInfo._currFrame} of ${self._frameInfo._framesCount} time interval - ${self._frameInfo._timeStep}`); try { self._frameInfo.nextFrame(); - } catch (e) { + } catch { self.logger.error('Error during animation'); self._stopAnimation(); return; @@ -33974,7 +33956,7 @@ Miew.prototype._enterComponentEditMode = function () { editors.push(editor); } }); - if (editors === []) { + if (editors.length === 0) { return; } this._editors = editors; @@ -34831,9 +34813,7 @@ Miew.prototype._updateShadowmapMeshes = function (process) { } }); }; -Miew.prototype._updateMaterials = function (values) { - let needTraverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - let process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; +Miew.prototype._updateMaterials = function (values, needTraverse = false, process = undefined) { this._forEachComplexVisual(visual => visual.setMaterialValues(values, needTraverse, process)); for (let i = 0, n = this._objects.length; i < n; ++i) { const obj = this._objects[i]; @@ -34892,21 +34872,12 @@ Miew.prototype._initOnSettingsChanged = function () { this._onBgColorChanged(); }); on('ao', () => { - if (settings.now.ao && !isAOSupported(this._gfx.renderer.getContext())) { - this.logger.warn('Your device or browser does not support ao'); - settings.set('ao', false); - } else { - const values = { - normalsToGBuffer: settings.now.ao - }; - this._setUberMaterialValues(values); - } + const values = { + normalsToGBuffer: settings.now.ao + }; + this._setUberMaterialValues(values); }); on('zSprites', () => { - if (settings.now.zSprites && !arezSpritesSupported(this._gfx.renderer.getContext())) { - this.logger.warn('Your device or browser does not support zSprites'); - settings.set('zSprites', false); - } this.rebuildAll(); }); on('fogColor', () => { @@ -35404,7 +35375,7 @@ Miew.prototype.motm = function () { visual.resetReps(rep); }); }; -Miew.prototype.VERSION = true && "0.11.1" || 0; +Miew.prototype.VERSION = true && "0.12.0" || 0; // Uncomment this to get debug trace: // Miew.prototype.debugTracer = new utils.DebugTracer(Miew.prototype); @@ -35445,7 +35416,7 @@ external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_default( /* harmony default export */ const src_Miew = (Miew); // EXTERNAL MODULE: ./src/utils/MiewCLIParser.js var MiewCLIParser = __webpack_require__(89); -;// CONCATENATED MODULE: ./src/utils/MiewCLIHelp.js +;// ./src/utils/MiewCLIHelp.js const modeIdDesc = { @@ -35656,7 +35627,7 @@ const help = { } }; /* harmony default export */ const MiewCLIHelp = (help); -;// CONCATENATED MODULE: ./src/Miew-cli.js +;// ./src/Miew-cli.js @@ -35997,7 +35968,7 @@ src_Miew.prototype.callNextCmd = function () { MiewCLIParser.parser.yy = cliutils; // workaround for incorrect JISON parser generator for AMD module MiewCLIParser.parser.yy.parseError = MiewCLIParser.parser.parseError; -;// CONCATENATED MODULE: ./src/index.js +;// ./src/index.js /* harmony default export */ const src = (src_Miew); diff --git a/packages/miew/dist/Miew.js.map b/packages/miew/dist/Miew.js.map index e5715c83..c9a607be 100644 --- a/packages/miew/dist/Miew.js.map +++ b/packages/miew/dist/Miew.js.map @@ -1 +1 @@ -{"version":3,"file":"dist/Miew.js","mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIA,MAAM,GAAI,YAAU;EACxB,IAAIC,CAAC,GAAC,SAAAA,CAASC,CAAC,EAACC,CAAC,EAACF,CAAC,EAACG,CAAC,EAAC;MAAC,KAAIH,CAAC,GAACA,CAAC,IAAE,CAAC,CAAC,EAACG,CAAC,GAACF,CAAC,CAACG,MAAM,EAACD,CAAC,EAAE,EAACH,CAAC,CAACC,CAAC,CAACE,CAAC,CAAC,CAAC,GAACD,CAAC,CAAC;MAAC,OAAOF,CAAC;IAAA,CAAC;IAACK,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EA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EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,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AAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,CAAC,EAACtK,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAACrD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAACrD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACD,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACD,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACD,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACA;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC7D,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACS,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACJ,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,GAAG,EAACI;IAAI,CAAC,EAACrE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAACvE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC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C,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,CAAC,EAACjD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACI,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAACjD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAACrD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC1D,CAAC,CAAC0E,IAAI,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAAC1E,CAAC,CAAC0E,IAAI,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,CAAC,EAACrE,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACI,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,CAAC,EAACjD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GA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G;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACI,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,CAAC,EAACjD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACI,GAAG;MAAC,EAAE,EAACC,GAA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E,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,GAA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C,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;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;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAMpR,iBAAQ,GAAG;EACf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEqR,KAAK,EAAE;IACL;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFC,IAAI,EAAE,IAAI;MACVC,IAAI,EAAE,IAAI;MACVC,KAAK,EAAE,GAAG;MACVC,SAAS,EAAE,IAAI;MACfC,OAAO,EAAE,GAAG;MACZC,QAAQ,EAAE,IAAI;MACdC,cAAc,EAAE;QACdC,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE,CAAC;QACTC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT;IACF,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFN,cAAc,EAAE;QACdC,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE,CAAC;QACTC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT;IACF,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIE,EAAE,EAAE;MACFV,SAAS,EAAE,IAAI;MACfE,QAAQ,EAAE,IAAI;MACdS,QAAQ,EAAE,GAAG;MACbC,SAAS,EAAE,EAAE;MACbf,IAAI,EAAE,IAAI;MACVgB,SAAS,EAAE;IACb,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFhB,IAAI,EAAE,IAAI;MACVC,KAAK,EAAE,GAAG;MACVC,SAAS,EAAE,IAAI;MACfC,OAAO,EAAE,GAAG;MACZC,QAAQ,EAAE,IAAI;MACdC,cAAc,EAAE;QACdC,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE,CAAC;QACTC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT;IACF,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIO,EAAE,EAAE;MACFC,KAAK,EAAE,KAAK;MACZC,WAAW,EAAE,GAAG;MAChBC,MAAM,EAAE,EAAE;MACVC,SAAS,EAAE,KAAK;MAChBhB,cAAc,EAAE;QACdC,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE,EAAE;QACVC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT;IACF,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIY,EAAE,EAAE;MACFJ,KAAK,EAAE,KAAK;MACZC,WAAW,EAAE,GAAG;MAChBC,MAAM,EAAE,EAAE;MACVC,SAAS,EAAE,KAAK;MAChBhB,cAAc,EAAE;QACdC,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE,EAAE;QACVC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT;IACF,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIa,EAAE,EAAE;MACFC,QAAQ,EAAE,GAAG;MACbC,QAAQ,EAAE;QACRnB,IAAI,EAAE,GAAG;QACTC,GAAG,EAAE,GAAG;QACRC,MAAM,EAAE,GAAG;QACXC,IAAI,EAAE,GAAG;QACTC,KAAK,EAAE;MACT,CAAC;MACD9sB,KAAK,EAAE,GAAG;MACVytB,SAAS,EAAE,KAAK;MAChBK,WAAW,EAAE;QACXpB,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,GAAG;QACRC,MAAM,EAAE,CAAC;QACTC,IAAI,EAAE,GAAG;QACTC,KAAK,EAAE;MACT,CAAC;MACDU,MAAM,EAAE,EAAE;MACVF,KAAK,EAAE;IACT,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIS,EAAE,EAAE;MACFR,WAAW,EAAE,GAAG;MAChBK,QAAQ,EAAE,GAAG;MACbH,SAAS,EAAE,KAAK;MAChBO,cAAc,EAAE,EAAE;MAClBvB,cAAc,EAAE;QACdC,IAAI,EAAE,GAAG;QACTC,GAAG,EAAE,GAAG;QACRC,MAAM,EAAE,GAAG;QACXC,IAAI,EAAE,IAAI;QACVC,KAAK,EAAE;MACT,CAAC;MACDU,MAAM,EAAE,EAAE;MACVF,KAAK,EAAE;IACT,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACIW,EAAE,EAAE;MACFnT,MAAM,EAAE,IAAI;MACZ2R,cAAc,EAAE;QACdC,IAAI,EAAE,EAAE;QACRC,GAAG,EAAE,EAAE;QACPC,MAAM,EAAE,EAAE;QACVC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT;IACF,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIoB,EAAE,EAAE;MACFpT,MAAM,EAAE,IAAI;MACZqT,mBAAmB,EAAE,GAAG;MACxBC,OAAO,EAAE,CAAC,GAAG;MACb3B,cAAc,EAAE;QACdC,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE,EAAE;QACVC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT;IACF,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIuB,EAAE,EAAE;MACFvT,MAAM,EAAE,IAAI;MACZwT,KAAK,EAAE,IAAI;MACXC,EAAE,EAAE;QACFC,KAAK,EAAE;UACL3T,KAAK,EAAE,GAAG;UACV4T,KAAK,EAAE;QACT,CAAC;QACDC,MAAM,EAAE;UACN7T,KAAK,EAAE,GAAG;UACV4T,KAAK,EAAE;QACT;MACF,CAAC;MACDN,mBAAmB,EAAE,GAAG;MACxBC,OAAO,EAAE,CAAC,GAAG;MACb3B,cAAc,EAAE;QACdC,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE,EAAE;QACVC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT;IACF,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6B,EAAE,EAAE;MACFC,QAAQ,EAAE,4CAA4C;MACtDC,eAAe,EAAE,QAAQ;MACzBC,aAAa,EAAE,QAAQ;MACvBC,EAAE,EAAE,CAAC;MACLC,EAAE,EAAE,CAAC;MACLC,EAAE,EAAE,CAAC;MACLC,EAAE,EAAE,MAAM;MACVC,EAAE,EAAE,UAAU;MACdC,MAAM,EAAE;IACV,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFC,MAAM,EAAE,GAAG;MACXC,SAAS,EAAE,GAAG;MACdC,SAAS,EAAE,GAAG;MACdC,KAAK,EAAE,IAAI;MACXC,OAAO,EAAE,KAAK;MACdjD,cAAc,EAAE;QACdC,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE,CAAC;QACTC,IAAI,EAAE,CAAC;QACPC,KAAK,EAAE;MACT;IACF;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE6C,QAAQ,EAAE;IACR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFC,MAAM,EAAE,CAAC;IACX,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACF9U,KAAK,EAAE;IACT,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI+U,EAAE,EAAE;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AAI;EAEf;AACF;AACA;AACA;AACA;EACEC,IAAI,EAAE,IAAI;EACV;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE;IACP1S,EAAE,EAAE,KAAK;IACTtF,KAAK,EAAE,QAAQ;IACfiY,SAAS,EAAE,GAAG;IACdC,SAAS,EAAE;EACb,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,EAAE,EAAE,KAAK;EAET;AACF;AACA;AACA;AACA;AACA;AACA;EACE1X,MAAM,EAAE;IACN6E,EAAE,EAAE,KAAK;IACT7f,IAAI,EAAE,QAAQ;IACdqa,MAAM,EAAE;EACV,CAAC;EAED;AACF;AACA;AACA;AACA;EACEsY,YAAY,EAAE,GAAG;EAEjB;AACF;AACA;AACA;AACA;EACEC,MAAM,EAAE,EAAE;EAEV;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,CAAC;EAEV;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,qBAAqB,EAAE,IAAI;EAE3B;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,IAAI;EAEb;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,IAAI;EAEb;AACF;AACA;AACA;AACA;EACEC,IAAI,EAAE,MAAM;EAEZ;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,KAAK;EAEd;AACF;AACA;AACA;AACA;EACEC,QAAQ,EAAE,KAAK;EAEf;AACF;AACA;AACA;AACA;EACEC,UAAU,EAAE,IAAI;EAEhB;AACF;AACA;AACA;AACA;EACEC,MAAM,EAAE,MAAM;EAEd;AACF;AACA;AACA;AACA;EACEC,gBAAgB,EAAE,IAAI;EAEtB;AACF;AACA;AACA;AACA;EACEC,YAAY,EAAE,SAAS;EAEvB;AACF;AACA;AACA;AACA;EACEC,gBAAgB,EAAE,CAAC;EAEnBtS,KAAK,EAAE;IACLuS,OAAO,EAAE,GAAG;IACZvuB,IAAI,EAAE,QAAQ;IACdwuB,IAAI,EAAE,IAAI;IACVC,gBAAgB,EAAE,GAAG;IACrBC,UAAU,EAAE,GAAG;IACfC,YAAY,EAAE;EAChB,CAAC;EACDC,GAAG,EAA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,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAC/D;AACD;;AAEA,qEAAeP,mBAAmB;;ACxSH;AACyB;AACxB;AAEhC,MAAMQ,SAAS,GAAG,CAChB,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACpD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK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AAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EA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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA,MAAMC,oBAAoB,GAAG;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA,MAAMC,iBAAiB,GAAG;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA,MAAMC,cAAc,GAAG;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AAEW,MAAMC,SAAS,CAAC;EAC7BhxI,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACsnI,YAAY,GAAG,EAAE;IACtB,IAAI,CAACoF,KAAK,GAAG,IAAI;EACnB;EAEA9E,SAASA,CAACvxH,IAAI,EAAE;IACd,IAAI,CAACq2H,KAAK,GAAGr2H,IAAI;IACjB,IAAI,CAACixH,YAAY,CAACxuI,IAAI,CAAC,IAAI,CAACm4I,YAAY,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC3J,YAAY,CAACxuI,IAAI,CAAC,IAAI,CAACo4I,iBAAiB,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC5J,YAAY,CAACxuI,IAAI,CAAC,IAAI,CAACq4I,aAAa,CAAC96H,IAAI,CAAC6hH,MAAM,EAAE7hH,IAAI,CAACwW,SAAS,CAAC,CAAC;IACvE,IAAI,CAACy6G,YAAY,CAACxuI,IAAI,CAAC,IAAI,CAACs4I,eAAe,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC9J,YAAY,CAACxuI,IAAI,CAAC,IAAI,CAACu4I,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC3E,KAAK,GAAG,IAAI;IACjB,OAAO,IAAI,CAACpF,YAAY,CAACntI,IAAI,CAAC,EAAE,CAAC;EACnC;;EAEA;AACF;AACA;AACA;EACE82I,YAAYA,CAAA,EAAG;IACb,MAAMK,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAC/B,MAAMC,UAAU,GAAG,IAAI,CAAC,CAAC;IACzB,MAAM1oB,IAAI,GAAG,IAAIl1G,IAAI,CAAC,CAAC;IACvB,MAAM69H,gBAAgB,GAAG,IAAI;IAC7B,MAAMC,OAAO,GAAG,sBAAsB,IAAI,CAAC/E,KAAK,CAAC79H,OAAO,EAAE,CAAC,CAAC;;IAE5D,OAAO;AACX,eAAe4iI,OAAO;AACtB;AACA;AACA;AACA;AACA,sBAAsBH,gBAAgB;AACtC,gBAAgBC,UAAU;AAC1B;AACA,eAAeC,gBAAgB;AAC/B,YAAY3oB,IAAI,CAAC6oB,WAAW,CAAC,CAAC;AAC9B,aAAa7oB,IAAI,CAAC8oB,QAAQ,CAAC,CAAC,GAAG,CAAC;AAChC,WAAW9oB,IAAI,CAAC+oB,OAAO,CAAC,CAAC;AACzB,YAAY/oB,IAAI,CAACgpB,QAAQ,CAAC,CAAC;AAC3B,cAAchpB,IAAI,CAACipB,UAAU,CAAC,CAAC;AAC/B,cAAcjpB,IAAI,CAACkpB,UAAU,CAAC,CAAC;AAC/B,mBAAmBlpB,IAAI,CAACmpB,eAAe,CAAC,CAAC;AACzC;AACA,cAAcP,OAAO;AACrB;AACA;AACA;AACA;AACA,iBAAiB5oB,IAAI;AACrB,YAAY4oB,OAAO;AACnB,CAAC;EACC;;EAEA;AACF;AACA;AACA;EACEP,iBAAiBA,CAAA,EAAG;IAClB,OAAO;AACX;AACA;AACA;AACA,EAAEP,kBAAkB;AACpB,CAAC;EACC;;EAEA;AACF;AACA;AACA;AACA;EACE3C,OAAOA,CAAA,EAAG;IACR,MAAMiE,YAAY,GAAG,GAAG;IACxB,IAAIC,SAAS,GAAG,EAAE;IAClB,MAAM;MAAEha;IAAO,CAAC,GAAG,IAAI,CAACwU,KAAK;IAC7B,KAAK,IAAIh4I,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwjI,MAAM,CAACvrI,MAAM,EAAE,EAAE+H,CAAC,EAAE;MACtC,MAAMquH,KAAK,GAAGmV,MAAM,CAACxjI,CAAC,CAAC;MACvB,MAAMm6I,SAAS,GAAG9rB,KAAK,CAAC6rB,aAAa;MACrCsD,SAAS,IAAI;AACnB,mBAAmB,IAAI,CAACxF,KAAK,CAAC7xH,IAAI,IAAInmB,CAAC;AACvC,eAAeu9I,YAAY;AAC3B,MAAMrB,iBAAiB;AACvB,MAAM,IAAI,CAACuB,gBAAgB,CAACpvB,KAAK,CAACrlD,SAAS,EAAEqlD,KAAK,CAAC9jG,OAAO,CAAC;AAC3D,MAAM,IAAI,CAACmzH,YAAY,CAACrvB,KAAK,CAACnoD,OAAO,CAAC;AACtC,MAAM,IAAI,CAACy3E,WAAW,CAACtvB,KAAK,CAAChqD,MAAM,EAAE81E,SAAS,CAAC;AAC/C,MAAMgC,oBAAoB;AAC1B,MAAMC,iBAAiB;AACvB,IAAI;IACA;IACA,OAAOoB,SAAS;EAClB;;EAEA;AACF;AACA;EACEnE,UAAUA,CAAA,EAAG;IACX,MAAMuE,eAAe,GAAG,GAAG;IAC3B,IAAIC,YAAY,GAAG,EAAE;IACrB,MAAM;MAAE1lH;IAAU,CAAC,GAAG,IAAI,CAAC6/G,KAAK;IAChC,KAAK,IAAIh4I,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGm4B,SAAS,CAAClgC,MAAM,EAAE,EAAE+H,CAAC,EAAE;MACzC,MAAMN,QAAQ,GAAGy4B,SAAS,CAACn4B,CAAC,CAAC;MAC7B69I,YAAY,IAAI;AACtB,yBAAyB,IAAI,CAAC7F,KAAK,CAAC7xH,IAAI,IAAInmB,CAAC;AAC7C,eAAe49I,eAAe;AAC9B;AACA;AACA,MAAM,IAAI,CAACE,mBAAmB,CAACp+I,QAAQ,CAAC;AACxC,IAAI;IACA;IACA,OAAOm+I,YAAY;EACrB;;EAEA;AACF;AACA;EACEpB,aAAaA,CAAA,EAAG;IACd,OAAO;AACX;AACA;AACA;AACA;AACA,IAAI,IAAI,CAACnD,OAAO,CAAC,CAAC;AAClB,IAAI,IAAI,CAACD,UAAU,CAAC,CAAC;AACrB,IAAIgD,cAAc;AAClB;AACA,CAAC;EACC;;EAEA;AACF;AACA;EACEK,eAAeA,CAAA,EAAG;IAChB,IAAIqB,UAAU,GAAG,EAAE;IACnB,KAAK,IAAI/9I,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACg4I,KAAK,CAACxU,MAAM,CAACvrI,MAAM,EAAE,EAAE+H,CAAC,EAAE;MACjD+9I,UAAU,IAAI;AACpB,mBAAmB,IAAI,CAAC/F,KAAK,CAAC7xH,IAAI,IAAInmB,CAAC;AACvC,IAAI;IACA;IACA,IAAIq6G,YAAY,GAAG,EAAE;IACrB,KAAK,IAAIr6G,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACg4I,KAAK,CAAC7/G,SAAS,CAAClgC,MAAM,EAAE,EAAE+H,CAAC,EAAE;MACpDq6G,YAAY,IAAI;AACtB,yBAAyB,IAAI,CAAC29B,KAAK,CAAC7xH,IAAI,IAAInmB,CAAC;AAC7C,IAAI;IACA;IAEA,OAAO;AACX;AACA;AACA;AACA;AACA,IAAI+9I,UAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI1jC,YAAY;AAChB,EAAE;EACA;;EAEA;AACF;AACA;EACEsiC,iBAAiBA,CAAA,EAAG;IAClB,IAAIoB,UAAU,GAAG,EAAE;IACnB,MAAM;MAAE53H;IAAK,CAAC,GAAG,IAAI,CAAC6xH,KAAK;IAC3B,KAAK,IAAIh4I,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACg4I,KAAK,CAACxU,MAAM,CAACvrI,MAAM,EAAE,EAAE+H,CAAC,EAAE;MACjD+9I,UAAU,IAAI;AACpB,2BAA2B53H,IAAI,IAAInmB,CAAC,mBAAmB;IACnD;IAEA,IAAIq6G,YAAY,GAAG,EAAE;IACrB,KAAK,IAAIr6G,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACg4I,KAAK,CAAC7/G,SAAS,CAAClgC,MAAM,EAAE,EAAE+H,CAAC,EAAE;MACpDq6G,YAAY,IAAI;AACtB,8BAA8Bl0F,IAAI,IAAInmB,CAAC,sBAAsBmmB,IAAI,IAAInmB,CAAC,GAAG;IACrE;IAEA,OAAO;AACX;AACA;AACA;AACA;AACA,IAAI+9I,UAAU;AACd,IAAI1jC,YAAY;AAChB,EAAE;EACA;;EAEA;AACF;AACA;AACA;AACA;EACE2jC,mBAAmBA,CAACpxI,KAAK,EAAE;IACzB,MAAMjK,GAAG,GAAG,EAAE;IACd,KAAK,IAAI3C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4M,KAAK,CAAC3U,MAAM,EAAE,EAAE+H,CAAC,EAAE;MACrC2C,GAAG,CAAC3C,CAAC,CAAC,GAAG4M,KAAK,CAAC5M,CAAC,CAAC,CAACs0I,OAAO,CAAC,CAAC,CAAC;IAC9B;IACA,OAAO3xI,GAAG,CAAC8C,IAAI,CAAC,GAAG,CAAC;EACtB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEk4I,WAAWA,CAACM,UAAU,EAAE9D,SAAS,EAAE;IACjC,MAAM+D,uBAAuB,GAAG,CAAC;IACjC,MAAMC,wBAAwB,GAAG,GAAG;IACpC,MAAMC,qBAAqB,GAAG,EAAE;IAChC,MAAMC,SAAS,GAAG,IAAI,CAACL,mBAAmB,CAACC,UAAU,CAAC;IACtD;IACA;IACA,MAAMK,YAAY,GAAG,CAAC,GAAGh9I,KAAK,CAAC64I,SAAS,CAAC,CAACroI,IAAI,CAAC,CAAC,CAAC;IACjD,OAAO;AACX,yBAAyBosI,uBAAuB;AAChD,iBAAiBC,wBAAwB;AACzC,eAAeC,qBAAqB;AACpC;AACA;AACA,gBAAgBC,SAAS;AACzB,oBAAoBC,YAAY;AAChC,MAAM;EACJ;;EAEA;AACF;AACA;AACA;AACA;EACEZ,YAAYA,CAACa,WAAW,EAAE;IACxB,MAAMC,wBAAwB,GAAG,CAAC;IAClC,MAAMC,yBAAyB,GAAG,GAAG;IACrC,MAAMC,sBAAsB,GAAG,EAAE;IACjC,MAAMC,UAAU,GAAG,IAAI,CAACX,mBAAmB,CAACO,WAAW,CAAC;IACxD;IACA,OAAO;AACX,0BAA0BC,wBAAwB;AAClD,iBAAiBC,yBAAyB;AAC1C,eAAeC,sBAAsB;AACrC;AACA;AACA,iBAAiBC,UAAU;AAC3B,MAAM;EACJ;;EAEA;AACF;AACA;AACA;EACElB,gBAAgBA,CAACz0E,SAAS,EAAEz+C,OAAO,EAAE;IACnC,MAAMq0H,UAAU,GAAG,CAAC;IACpB,MAAMC,SAAS,GAAG,CAAC;IACnB,MAAMC,OAAO,GAAG,GAAG;IACnB,MAAMC,OAAO,GAAG,YAAY;IAC5B,MAAMC,eAAe,GAAG,GAAG;IAC3B,MAAMC,OAAO,GAAG,IAAI,CAACjB,mBAAmB,CAACh1E,SAAS,CAAC;IACnD;AACJ;AACA;IACI,OAAO,eAAe41E,UAAU;AACpC,iBAAiBC,SAAS;AAC1B,eAAeC,OAAO;AACtB,gBAAgBC,OAAO;AACvB,gBAAgBE,OAAO;AACvB,0BAA0B10H,OAAO;AACjC,uBAAuBy0H,eAAe,EAAE;EACtC;;EAEA;AACF;AACA;AACA;AACA;EACElB,mBAAmBA,CAACp+I,QAAQ,EAAE;IAC5B,OAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiDA,QAAQ,CAAC61F,OAAO;AACjE;AACA;AACA;AACA;AACA,kDAAkD71F,QAAQ,CAAC81F,QAAQ;AACnE;AACA,oDAAoD91F,QAAQ,CAAC+1F,SAAS;AACtE;AACA;AACA;AACA,4CAA4C/1F,QAAQ,CAAC61F,OAAO;AAC5D,6CAA6C71F,QAAQ,CAAC81F,QAAQ;AAC9D,4CAA4C91F,QAAQ,CAAC+1F,SAAS;AAC9D,0CAA0C/1F,QAAQ,CAACq1D,OAAO;AAC1D;AACA,MAAM;EACJ;AACF;;ACvckC;AACoB;AACd;AACQ;AAEjC,MAAMmqF,WAAW,SAAS1M,QAAQ,CAAC;EAChDlnI,WAAWA,CAAC8zD,MAAM,EAAE96D,OAAO,EAAE;IAC3B,KAAK,CAAC86D,MAAM,EAAE96D,OAAO,CAAC;IACtB;IACA,IAAI,CAACotD,KAAK,GAAG0N,MAAM;IACnB,IAAI,CAAC+/E,QAAQ,GAAG76I,OAAO,CAAC86I,WAAW,IAAI,iBAAiB;IACxD,IAAI,CAACC,UAAU,GAAG,IAAIjG,gBAAgB,CAAC,CAAC;EAC1C;;EAEA;AACF;AACA;EACE3G,UAAUA,CAAA,EAAG;IACX;IACA,MAAM3uH,MAAM,GAAG,IAAIw4H,SAAS,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC3vB,OAAO,EAAE;MACjB,OAAO,IAAI,CAAC+nB,OAAO;IACrB;IAEA,MAAM/yH,IAAI,GAAG,IAAI,CAAC09H,UAAU,CAACzjH,OAAO,CAAC,IAAI,CAAC81B,KAAK,CAAC;IAChD/vC,IAAI,CAACxH,OAAO,GAAG,IAAI,CAACglI,QAAQ;IAC5B,IAAI,CAACzK,OAAO,GAAG5wH,MAAM,CAACovH,SAAS,CAACvxH,IAAI,CAAC;IACrC,OAAO,IAAI,CAAC+yH,OAAO;EACrB;AACF;AAEAwK,WAAW,CAAClxB,OAAO,GAAG,CAAC,KAAK,CAAC;AAC7BkxB,WAAW,CAACjJ,WAAW,GAAG31B,iBAAa;;AChCa;AAEF;AACA;AAElD,gDAAe,IAAIgyB,sBAAY,CAAC,CAC9BkC,WAAW,EACX0K,WAAW,CACZ,CAAC;;ACR8B;AACA;AACI;AAEpC,yCAAe;EACbI,OAAO;EACPC,OAAO;EACPC,SAASA,EAAAA,SAAAA;AACX,CAAC;;ACRD;AACA;AACA;;AAE+B;AACS;AAExC,MAAMC,SAAS,GAAG,IAAIj/G,gFAAW,CAAC,CAAC;AAEnC,MAAMk/G,aAAa,CAAC;EAClBp0I,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACuhC,MAAM,GAAG,CAAC;IACf,IAAI,CAAC8yG,OAAO,GAAG,CAAC;IAChB,IAAI,CAACC,UAAU,GAAG,CAAC;IACnB,IAAI,CAACC,WAAW,GAAG,CAAC;IAEpB,IAAI,CAACC,OAAO,GAAG,IAAIt/G,kFAAa,CAAC,CAAC;IAClC,IAAI,CAACu/G,WAAW,GAAG,IAAIv/G,kFAAa,CAAC,CAAC;IACtC,IAAI,CAACw/G,iBAAiB,GAAG,IAAIx/G,kFAAa,CAAC,CAAC;IAE5C,IAAI,CAACy/G,WAAW,GAAGlkI,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;IAChD,IAAI,CAACikI,WAAW,CAAC/jI,KAAK,CAACgkI,QAAQ,GAAG,QAAQ;IAC1C,IAAI,CAACD,WAAW,CAAC/jI,KAAK,CAACT,QAAQ,GAAG,UAAU;IAC5C,IAAI,CAACwkI,WAAW,CAAC/jI,KAAK,CAACZ,GAAG,GAAG,GAAG;IAChC,IAAI,CAAC2kI,WAAW,CAAC/jI,KAAK,CAACd,MAAM,GAAG,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC6kI,WAAW,CAAC/jI,KAAK,CAACikI,aAAa,GAAG,MAAM;EAC/C;EAEAzrF,UAAUA,CAAA,EAAG;IACX,OAAO,IAAI,CAACurF,WAAW;EACzB;EAEAxiJ,KAAKA,CAAA,EAAG;IACN,MAAM2iJ,MAAM,GAAG,IAAI,CAAC1rF,UAAU,CAAC,CAAC;IAChC,OAAO0rF,MAAM,CAAC/jI,UAAU,EAAE;MACxB+jI,MAAM,CAAC5jI,WAAW,CAAC4jI,MAAM,CAAC/jI,UAAU,CAAC;IACvC;EACF;EAEAgkI,OAAOA,CAACzlI,KAAK,EAAEqC,MAAM,EAAE;IACrB,IAAI,CAAC4vB,MAAM,GAAGjyB,KAAK;IACnB,IAAI,CAAC+kI,OAAO,GAAG1iI,MAAM;IAErB,IAAI,CAAC2iI,UAAU,GAAG,IAAI,CAAC/yG,MAAM,GAAG,CAAC;IACjC,IAAI,CAACgzG,WAAW,GAAG,IAAI,CAACF,OAAO,GAAG,CAAC;IAEnC,IAAI,CAACM,WAAW,CAAC/jI,KAAK,CAACtB,KAAK,GAAG,GAAGA,KAAK,IAAI;IAC3C,IAAI,CAACqlI,WAAW,CAAC/jI,KAAK,CAACe,MAAM,GAAG,GAAGA,MAAM,IAAI;EAC/C;EAEAqjI,aAAaA,CAACl4H,MAAM,EAAEuxC,MAAM,EAAEwgC,KAAK,EAAE;IACnC,SAASomD,cAAcA,CAACv7I,CAAC,EAAE6N,CAAC,EAAEpF,CAAC,EAAE;MAC/BgyI,SAAS,CAACe,MAAM,CAACx7I,CAAC,CAAC;MACnBy6I,SAAS,CAACz6G,IAAI,CAACnyB,CAAC,EAAEpF,CAAC,CAAC;MACpB,OAAO,IAAIgyI,SAAS,CAACgB,YAAY,CAAC,CAAC,EAAE;IACvC;IAEA,SAASC,UAAUA,CAAC17I,CAAC,EAAE;MACrBy6I,SAAS,CAACe,MAAM,CAACx7I,CAAC,CAAC;MACnB,OAAO,IAAIy6I,SAAS,CAACgB,YAAY,CAAC,CAAC,EAAE;IACvC;IAEA,IAAIr4H,MAAM,YAAYmsC,eAAW,EAAE;MACjC,IAAI,CAACurF,OAAO,CAACa,qBAAqB,CAACv4H,MAAM,CAAC0uC,WAAW,CAAC;MAEtD,IAAI1uC,MAAM,CAAC0rE,QAAQ,KAAKr3E,SAAS,IAAI2L,MAAM,CAAC0rE,QAAQ,CAACptF,MAAM,KAAK+V,SAAS,EAAE;QACzE,MAAMmkI,WAAW,GAAG,IAAIpgH,kFAAa,CAACpY,MAAM,CAAC0rE,QAAQ,CAACptF,MAAM,CAACwH,CAAC,EAAEka,MAAM,CAAC0rE,QAAQ,CAACptF,MAAM,CAACiM,CAAC,EAAE,CAAC,CAAC;QAC5F,IAAI,CAACmtI,OAAO,CAAC3+I,GAAG,CAACy/I,WAAW,CAAChhH,cAAc,CAACxX,MAAM,CAAC0uC,WAAW,CAAC+pF,iBAAiB,CAAC,CAAC,CAAC,CAAC;MACtF;MAEA,IAAI,CAACf,OAAO,CAACltG,YAAY,CAAC,IAAI,CAACmtG,WAAW,CAAC;MAE3C,MAAMrkD,UAAU,GAAG,IAAI,CAACokD,OAAO,CAAC9rI,CAAC,GAAG,CAAC2lD,MAAM,CAACW,IAAI,GAAG,QAAQ,GAAG,SAAS;MACvE,MAAMl/C,MAAM,GAAG,KAAK,IAAIu+C,MAAM,CAACc,GAAG,GAAI,CAAC,IAAI,CAACqlF,OAAO,CAAC9rI,CAAE,CAAC,IAAI2lD,MAAM,CAACc,GAAG,GAAGd,MAAM,CAACW,IAAI,CAAC;MAEpF,MAAMpiD,OAAO,GAAGkQ,MAAM,CAACssC,UAAU,CAAC,CAAC;MACnC,IAAI,OAAOylC,KAAK,CAAC3nE,GAAG,KAAK,WAAW,EAAE;QACpCta,OAAO,CAACgE,KAAK,CAACnB,KAAK,GAAG2lI,UAAU,CAACt4H,MAAM,CAAC0rE,QAAQ,CAAC/4E,KAAK,CAAC;QACvD,IAAIqN,MAAM,CAAC0rE,QAAQ,CAAC52E,UAAU,KAAK,aAAa,EAAE;UAChDhF,OAAO,CAACgE,KAAK,CAACgB,UAAU,GAAGwjI,UAAU,CAACt4H,MAAM,CAAC0rE,QAAQ,CAAC52E,UAAU,CAAC;QACnE;MACF,CAAC,MAAM;QACL,MAAM4jI,SAAS,GAAGtgH,oFAAe,CAACugH,UAAU,CAAC,CAAC,IAAI,CAACjB,OAAO,CAAC9rI,CAAC,EAAEmmF,KAAK,CAAC3nE,GAAG,CAAC8nC,IAAI,EAAE6/B,KAAK,CAAC3nE,GAAG,CAACioC,GAAG,CAAC;QAC5FviD,OAAO,CAACgE,KAAK,CAACnB,KAAK,GAAGwlI,cAAc,CAACn4H,MAAM,CAAC0rE,QAAQ,CAAC/4E,KAAK,EAAEo/E,KAAK,CAAC3nE,GAAG,CAACzX,KAAK,EAAE+lI,SAAS,CAAC;QACvF,IAAI14H,MAAM,CAAC0rE,QAAQ,CAAC52E,UAAU,KAAK,aAAa,EAAE;UAChDhF,OAAO,CAACgE,KAAK,CAACgB,UAAU,GAAGqjI,cAAc,CAACn4H,MAAM,CAAC0rE,QAAQ,CAAC52E,UAAU,EAAEi9E,KAAK,CAAC3nE,GAAG,CAACzX,KAAK,EAAE+lI,SAAS,CAAC;QACnG;MACF;MAEA,IAAI,CAAChB,OAAO,CAACltG,YAAY,CAAC,IAAI,CAACotG,iBAAiB,CAAC;MAEjD,MAAM9jI,KAAK,GAAG,GAAGkM,MAAM,CAAC0rE,QAAQ,KAAK,CAAC,CAAC,GAAG1rE,MAAM,CAAC0rE,QAAQ,CAAC7kF,WAAW,GAAG,wBAAwB,aACnF,IAAI,CAAC6wI,OAAO,CAAC5xI,CAAC,GAAG,IAAI,CAAC0xI,UAAU,GAAG,IAAI,CAACA,UAAU,MAC7D,CAAC,IAAI,CAACE,OAAO,CAACntI,CAAC,GAAG,IAAI,CAACktI,WAAW,GAAG,IAAI,CAACA,WAAW,KAAK;MAC5D3nI,OAAO,CAACgE,KAAK,CAACw/E,UAAU,GAAGA,UAAU;MACrCxjF,OAAO,CAACgE,KAAK,CAAC8kI,eAAe,GAAG9kI,KAAK;MACrChE,OAAO,CAACgE,KAAK,CAAC+kI,YAAY,GAAG/kI,KAAK;MAClChE,OAAO,CAACgE,KAAK,CAACglI,UAAU,GAAGhlI,KAAK;MAChChE,OAAO,CAACgE,KAAK,CAACC,SAAS,GAAGD,KAAK;MAC/BhE,OAAO,CAACgE,KAAK,CAACd,MAAM,GAAG3b,MAAM,CAAC2b,MAAM,CAAC,CAACk5H,OAAO,CAAC,CAAC,CAAC;MAEhD,IAAIp8H,OAAO,CAACqE,UAAU,KAAK,IAAI,CAAC0jI,WAAW,EAAE;QAC3C,IAAI,CAACA,WAAW,CAAC1iI,WAAW,CAACrF,OAAO,CAAC;MACvC;IACF;IAEA,KAAK,IAAIlY,CAAC,GAAG,CAAC,EAAEhI,CAAC,GAAGowB,MAAM,CAACktC,QAAQ,CAACr9D,MAAM,EAAE+H,CAAC,GAAGhI,CAAC,EAAEgI,CAAC,EAAE,EAAE;MACtD,IAAI,CAACsgJ,aAAa,CAACl4H,MAAM,CAACktC,QAAQ,CAACt1D,CAAC,CAAC,EAAE25D,MAAM,EAAEwgC,KAAK,CAAC;IACvD;EACF;EAEAriC,MAAMA,CAACqiC,KAAK,EAAExgC,MAAM,EAAE;IACpBwgC,KAAK,CAACzjC,iBAAiB,CAAC,CAAC;IAEzB,IAAIiD,MAAM,CAACvuD,MAAM,KAAK,IAAI,EAAE;MAC1BuuD,MAAM,CAACjD,iBAAiB,CAAC,CAAC;IAC5B;IAEAiD,MAAM,CAACY,kBAAkB,CAAC/qD,IAAI,CAACmqD,MAAM,CAAC7C,WAAW,CAAC,CAACC,MAAM,CAAC,CAAC;IAE3D,IAAI,CAACgpF,WAAW,CAACvwI,IAAI,CAACmqD,MAAM,CAACY,kBAAkB,CAAC;IAChD,IAAI,CAACylF,iBAAiB,CAACxwI,IAAI,CAACmqD,MAAM,CAACmiC,gBAAgB,CAAC;IAEpD,IAAI,CAACwkD,aAAa,CAACnmD,KAAK,EAAExgC,MAAM,EAAEwgC,KAAK,CAAC;EAC1C;AACF;AACA,wDAAeulD,aAAa;;AC9Hb,SAASyB,YAAYA,CAAA,EAAG;EACrC;EACA,IAAI;IACF,IAAIhzI,MAAM,CAACmN,GAAG,CAACoI,QAAQ,CAACS,IAAI,KAAK1H,SAAS,EAAE;MAC1C,OAAOtO,MAAM,CAACmN,GAAG;IACnB;EACF,CAAC,CAAC,OAAOvK,CAAC,EAAE;IACV;EAAA;EAEF,OAAO5C,MAAM;AACf;;ACV+B;AACF;AACM;AACoB;AACN;AAEjD,MAAMizI,OAAO,GAAG,EAAE;AAClB,MAAMC,KAAK,GAAG,EAAE;AAChB,MAAMC,QAAQ,GAAG,EAAE;AACnB,MAAMC,OAAO,GAAG,EAAE;AAElB,MAAMC,KAAK,GAAG;EACZC,IAAI,EAAE,CAAC,CAAC;EAAEC,MAAM,EAAE,CAAC;EAAEC,SAAS,EAAE,CAAC;EAAEC,KAAK,EAAE,CAAC;EAAEC,eAAe,EAAE;AAChE,CAAC;;AAED;AACA,MAAMC,mBAAmB,GAAG,GAAG;AAE/B,MAAMtrF,UAAU,GAAG,IAAIh2B,qFAAgB,CAAC,CAAC;AACzC,MAAMwhH,OAAO,GAAG,IAAIxhH,kFAAa,CAAC,CAAC;;AAEnC;AACA,SAASyhH,aAAaA,CAACnwH,OAAO,EAAE6nC,MAAM,EAAE0kD,KAAK,EAAE/5G,OAAO,EAAE;EACtD,IAAI,CAACwtB,OAAO,GAAGA,OAAO;EACtB,CAAC,IAAI,CAAC1J,MAAM,CAAC,GAAG0J,OAAO;EACvB,IAAI,CAAC6nC,MAAM,GAAGA,MAAM;EACpB,IAAI,CAAC0kD,KAAK,GAAGA,KAAK;EAClB,IAAI,CAAC7nC,IAAI,GAAG,IAAIh2C,kFAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACtC,IAAI,CAACl8B,OAAO,GAAGA,OAAO;EAEtB,IAAI,CAAC49I,YAAY,GAAG;IAClB1rE,IAAI,EAAE,IAAIh2C,kFAAa,CAAC,CAAC;IACzB04B,KAAK,EAAE;EACT,CAAC;AACH;AAEA+oF,aAAa,CAACl+I,SAAS,CAACo+I,OAAO,GAAI,YAAY;EAC7C,MAAMh9I,CAAC,GAAG,IAAIq7B,kFAAa,CAAC,CAAC;EAC7B,MAAM3sB,CAAC,GAAG,IAAI2sB,qFAAgB,CAAC,CAAC;EAChC,MAAMnxB,CAAC,GAAG,IAAImxB,kFAAa,CAAC,CAAC;EAE7B,MAAMzyB,CAAC,GAAG,IAAIyyB,kFAAa,CAAC,CAAC;EAE7B,OAAO,UAAU4hH,IAAI,EAAE;IACrB,MAAMC,SAAS,GAAI,IAAI,CAAChkC,KAAK,CAACnwG,CAAC,KAAK,GAAG,IAAI,IAAI,CAACmwG,KAAK,CAAC1rG,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC0rG,KAAK,CAACrqG,CAAC,KAAK,GAAI;IAExFjG,CAAC,CAACyB,IAAI,CAAC,IAAI,CAAC4Y,MAAM,CAAC8qB,MAAM,CAAC;IAE1B,IAAImvG,SAAS,EAAE;MACbt0I,CAAC,CAACipD,QAAQ,CAACgrF,OAAO,CAACM,0BAA0B,CAACF,IAAI,CAAC,CAAC;IACtD,CAAC,MAAM;MACLr0I,CAAC,CAACipD,QAAQ,CAACgrF,OAAO,CAACviC,eAAe,CAAC,IAAI,CAACpB,KAAK,CAACnwG,CAAC,EAAE,IAAI,CAACmwG,KAAK,CAAC1rG,CAAC,EAAE,IAAI,CAAC0rG,KAAK,CAACrqG,CAAC,CAAC,CAAC;MAC7EjG,CAAC,CAACipD,QAAQ,CAACgrF,OAAO,CAACM,0BAA0B,CAACF,IAAI,CAAC,CAAC;MACpDr0I,CAAC,CAACipD,QAAQ,CAACgrF,OAAO,CAACviC,eAAe,CAAC,CAAC,IAAI,CAACpB,KAAK,CAACnwG,CAAC,EAAE,CAAC,IAAI,CAACmwG,KAAK,CAAC1rG,CAAC,EAAE,CAAC,IAAI,CAAC0rG,KAAK,CAACrqG,CAAC,CAAC,CAAC;IAClF;IAEAjG,CAAC,CAACkpD,SAAS,CAAC9xD,CAAC,EAAE0O,CAAC,EAAExE,CAAC,CAAC;;IAEpB;IACA,IAAI,CAACgzI,SAAS,EAAE;MACd,KAAK,IAAIriJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC8xB,OAAO,CAAC75B,MAAM,EAAE,EAAE+H,CAAC,EAAE;QAC5C,IAAI,CAAC8xB,OAAO,CAAC9xB,CAAC,CAAC,CAACyb,QAAQ,CAACjM,IAAI,CAACrK,CAAC,CAAC;MAClC;IACF;IAEA,KAAK,IAAIyO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACke,OAAO,CAAC75B,MAAM,EAAE,EAAE2b,CAAC,EAAE;MAC5C,IAAI,CAACke,OAAO,CAACle,CAAC,CAAC,CAAC4iD,UAAU,CAAChnD,IAAI,CAACqE,CAAC,CAAC;MAClC,IAAI,CAACie,OAAO,CAACle,CAAC,CAAC,CAACkrG,YAAY,CAAC,CAAC;IAChC;EACF,CAAC;AACH,CAAC,CAAC,CAAE;AAEJmjC,aAAa,CAACl+I,SAAS,CAACw+I,UAAU,GAAG,UAAUzwH,OAAO,EAAE;EACtD,IAAI,CAACA,OAAO,GAAGA,OAAO;EACtB,CAAC,IAAI,CAAC1J,MAAM,CAAC,GAAG0J,OAAO;AACzB,CAAC;AAEDmwH,aAAa,CAACl+I,SAAS,CAAC7D,MAAM,GAAI,YAAY;EAC5C,MAAMsiJ,GAAG,GAAG;IACVhsE,IAAI,EAAE,IAAIh2C,kFAAa,CAAC,CAAC;IACzB04B,KAAK,EAAE;EACT,CAAC;EAED,OAAO,UAAUkpF,IAAI,EAAEK,YAAY,EAAEC,WAAW,EAAEC,SAAS,EAAE;IAC3D,IAAI,CAACC,cAAc,CAACJ,GAAG,EAAEC,YAAY,EAAEC,WAAW,EAAEC,SAAS,CAAC;IAC9DP,IAAI,CAACS,gBAAgB,CAACL,GAAG,CAAChsE,IAAI,EAAEgsE,GAAG,CAACtpF,KAAK,CAAC;IAE1C,IAAIspF,GAAG,CAACtpF,KAAK,EAAE;MACb,IAAI,CAACipF,OAAO,CAACC,IAAI,CAAC;IACpB;IAEA,IAAI,CAACF,YAAY,GAAGM,GAAG;EACzB,CAAC;AACH,CAAC,CAAC,CAAE;AAEJP,aAAa,CAACl+I,SAAS,CAAC1D,SAAS,GAAI,YAAY;EAC/C,MAAM88C,GAAG,GAAG,IAAI3c,kFAAa,CAAC,CAAC;EAC/B,MAAM69E,KAAK,GAAG,IAAI79E,kFAAa,CAAC,CAAC;EAEjC,OAAO,UAAU3hB,KAAK,EAAE;IACtB;IACAs+B,GAAG,CAAC9+C,GAAG,CACLwgB,KAAK,CAAC3Q,CAAC,GAAG,IAAI,CAACyrD,MAAM,CAACmiC,gBAAgB,CAAC1jC,QAAQ,CAAC,CAAC,CAAC,EAClDv5C,KAAK,CAAClM,CAAC,GAAG,IAAI,CAACgnD,MAAM,CAACmiC,gBAAgB,CAAC1jC,QAAQ,CAAC,CAAC,CAAC,EAClD,CACF,CAAC;IACD,IAAIxW,IAAI,GAAGzE,GAAG,CAACllD,MAAM,CAAC,CAAC;IACvBklD,GAAG,CAAC7c,SAAS,CAAC,CAAC;;IAEf;IACA6c,GAAG,CAAC0iE,kBAAkB,CAACmiC,OAAO,CAACxyI,IAAI,CAAC,IAAI,CAAC4Y,MAAM,CAAC0uC,WAAW,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC;;IAEtE;IACAsnD,KAAK,CAAC7uG,IAAI,CAAC,IAAI,CAAC6uG,KAAK,CAAC;IACtB,IAAI,CAACj2F,MAAM,CAACizE,YAAY,CAACgjB,KAAK,CAAC;IAC/Bz8D,IAAI,IAAIzhD,IAAI,CAACuI,GAAG,CAAC21G,KAAK,CAACrqG,CAAC,GAAG,IAAI,CAAC2lD,MAAM,CAACl+C,QAAQ,CAACzH,CAAC,CAAC;;IAElD;IACA4tC,IAAI,IAAI,IAAI,CAACx5B,MAAM,CAAC0uC,WAAW,CAAC+pF,iBAAiB,CAAC,CAAC;;IAEnD;IACA;IACA,KAAK,IAAI7gJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC8xB,OAAO,CAAC75B,MAAM,EAAE,EAAE+H,CAAC,EAAE;MAC5C,IAAI,CAAC8xB,OAAO,CAAC9xB,CAAC,CAAC,CAAC8iJ,eAAe,CAAC3lG,GAAG,EAAEyE,IAAI,CAAC;IAC5C;EACF,CAAC;AACH,CAAC,CAAC,CAAE;AAEJqgG,aAAa,CAACl+I,SAAS,CAAC6a,MAAM,GAAI,YAAY;EAC5C,MAAM43D,IAAI,GAAG,IAAIh2C,kFAAa,CAAC,CAAC;EAEhC,OAAO,UAAUuiH,mBAAmB,EAAEC,aAAa,EAAE;IACnD,IAAIjiJ,QAAQ,CAAC2d,GAAG,CAACyU,YAAY,KAAK,GAAG,EAAE;MACrC;;MAEA;MACA,IAAIpyB,QAAQ,CAAC2d,GAAG,CAAC4U,qBAAqB,IAAI,IAAI,CAAC4uH,YAAY,CAAC1rE,IAAI,CAACv+E,MAAM,CAAC,CAAC,KAAK,GAAG,EAAE;QACjF;QACAu+E,IAAI,CAACn4E,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAACwhH,kBAAkB,CAACmiC,OAAO,CAACxyI,IAAI,CAAC,IAAI,CAAC4Y,MAAM,CAAC0uC,WAAW,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC;MACtF,CAAC,MAAM;QACL;QACAyf,IAAI,CAAChnE,IAAI,CAAC,IAAI,CAAC0yI,YAAY,CAAC1rE,IAAI,CAAC;MACnC;MAEA,IAAI,CAAC2rE,OAAO,CAAC3rF,UAAU,CAACqsF,gBAAgB,CAACrsE,IAAI,EAAEz1E,QAAQ,CAAC2d,GAAG,CAACyU,YAAY,GAAG4vH,mBAAmB,CAAC,CAAC;MAChG,OAAO,IAAI;IACb;IAEA,IAAI,IAAI,CAACz+I,OAAO,CAAC2+I,QAAQ,IAAI,IAAI,CAACf,YAAY,CAAChpF,KAAK,EAAE;MACpD;MACA,MAAMA,KAAK,GAAG,IAAI,CAACgpF,YAAY,CAAChpF,KAAK,GAAI,CAAC,GAAG,GAAG,IAAI,CAAC50D,OAAO,CAAC4+I,oBAAoB,MAAM,IAAI,GAAGF,aAAa,CAAE;MAE7G,IAAI7iJ,IAAI,CAACuI,GAAG,CAACwwD,KAAK,CAAC,IAAI,IAAI,CAAC50D,OAAO,CAAC6+I,iBAAiB,EAAE;QACrD,IAAI,CAACjB,YAAY,CAAChpF,KAAK,GAAG,GAAG;MAC/B,CAAC,MAAM;QACL,IAAI,CAACipF,OAAO,CAAC3rF,UAAU,CAACqsF,gBAAgB,CAAC,IAAI,CAACX,YAAY,CAAC1rE,IAAI,EAAEtd,KAAK,CAAC,CAAC;QACxE,OAAO,IAAI;MACb;IACF;IAEA,OAAO,KAAK;EACd,CAAC;AACH,CAAC,CAAC,CAAE;AAEJ+oF,aAAa,CAACl+I,SAAS,CAAC8X,IAAI,GAAG,YAAY;EACzC,IAAI,CAACqmI,YAAY,CAAChpF,KAAK,GAAG,GAAG;AAC/B,CAAC;;AAED;AACA+oF,aAAa,CAACl+I,SAAS,CAAC6+I,cAAc,GAAI,YAAY;EACpD,MAAMtiJ,MAAM,GAAG,IAAIkgC,kFAAa,CAAC,CAAC;EAElC,MAAMo7B,GAAG,GAAG,IAAIp7B,kFAAa,CAAC,CAAC;EAC/B,MAAM4iH,YAAY,GAAG,IAAI5iH,kFAAa,CAAC,CAAC;EAExC,MAAM6iH,iBAAiB,GAAG,IAAI7iH,kFAAa,CAAC,CAAC;EAC7C,MAAM8iH,uBAAuB,GAAG,IAAI9iH,kFAAa,CAAC,CAAC;EAEnD,MAAM+iH,aAAa,GAAG,IAAI/iH,kFAAa,CAAC,CAAC;EAEzC,MAAMgjH,UAAU,GAAG,IAAIhjH,kFAAa,CAAC,CAAC;EAEtC,OAAO,UAAUgiH,GAAG,EAAEiB,SAAS,EAAEC,QAAQ,EAAEf,SAAS,EAAE;IACpD,IAAIA,SAAS,EAAE;MACbH,GAAG,CAAChsE,IAAI,CAAChnE,IAAI,CAAC,IAAI,CAACgnE,IAAI,CAAC;MACxBgsE,GAAG,CAACtpF,KAAK,GAAG,IAAI,CAAC50D,OAAO,CAACq/I,gBAAgB,IAAID,QAAQ,CAAC/wI,CAAC,GAAG8wI,SAAS,CAAC9wI,CAAC,CAAC;;MAEtE;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IAMI,CAAC,MAAM;MACL6wI,UAAU,CAACt1E,UAAU,CAACw1E,QAAQ,EAAED,SAAS,CAAC;MAC1C,MAAMvqF,KAAK,GAAGsqF,UAAU,CAACvrJ,MAAM,CAAC,CAAC;MACjC,IAAIihE,KAAK,KAAK,GAAG,EAAE;QACjB;MACF;MAEA54D,MAAM,CAACkP,IAAI,CAAC,IAAI,CAAC6uG,KAAK,CAAC;MACvB,IAAI,CAACj2F,MAAM,CAACizE,YAAY,CAAC/6F,MAAM,CAAC;MAChCs7D,GAAG,CAACsS,UAAU,CAAC,IAAI,CAACvU,MAAM,CAACl+C,QAAQ,EAAEnb,MAAM,CAAC;MAC5C8iJ,YAAY,CAAC5zI,IAAI,CAACosD,GAAG,CAAC,CAACt7B,SAAS,CAAC,CAAC;MAElC+iH,iBAAiB,CAAC7zI,IAAI,CAAC,IAAI,CAACmqD,MAAM,CAACkC,EAAE,CAAC,CAACv7B,SAAS,CAAC,CAAC;MAClDgjH,uBAAuB,CAACljH,YAAY,CAACijH,iBAAiB,EAAED,YAAY,CAAC,CAAC9iH,SAAS,CAAC,CAAC;MAEjF+iH,iBAAiB,CAACO,SAAS,CAACJ,UAAU,CAAC7wI,CAAC,CAAC;MACzC2wI,uBAAuB,CAACM,SAAS,CAACJ,UAAU,CAACt1I,CAAC,CAAC;MAE/Cq1I,aAAa,CAAC/zI,IAAI,CAAC6zI,iBAAiB,CAACliJ,GAAG,CAACmiJ,uBAAuB,CAAC,CAAC;MAElEd,GAAG,CAAChsE,IAAI,CAACp2C,YAAY,CAACmjH,aAAa,EAAE3nF,GAAG,CAAC;MAEzC4mF,GAAG,CAACtpF,KAAK,GAAG,CAACA,KAAK,GAAG,IAAI,CAAC50D,OAAO,CAACu/I,YAAY;IAChD;IAEArB,GAAG,CAAChsE,IAAI,CAACqpC,kBAAkB,CAACmiC,OAAO,CAACxyI,IAAI,CAAC,IAAI,CAAC4Y,MAAM,CAAC0uC,WAAW,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC;;IAE3E;IACA,IAAIyrF,GAAG,CAACtpF,KAAK,GAAG,GAAG,EAAE;MACnBspF,GAAG,CAAChsE,IAAI,CAACjyC,MAAM,CAAC,CAAC;MACjBi+G,GAAG,CAACtpF,KAAK,GAAG,CAACspF,GAAG,CAACtpF,KAAK;IACxB;EACF,CAAC;AACH,CAAC,CAAC,CAAE;AAEJ,SAAS4qF,cAAcA,CAAC17H,MAAM,EAAE27H,WAAW,EAAEpqF,MAAM,EAAEp6C,UAAU,EAAE6+F,SAAS,EAAE;EAC1E19F,qBAAe,CAAC/c,IAAI,CAAC,IAAI,CAAC;EAC1B,MAAMV,IAAI,GAAG,IAAI;EAEjB,IAAI,CAACmlB,MAAM,GAAGA,MAAM;EACpB,IAAI,CAAC27H,WAAW,GAAGA,WAAW;EAC9B,IAAI,CAACpqF,MAAM,GAAGA,MAAM;EACpB,IAAI,CAACp6C,UAAU,GAAI,OAAOA,UAAU,KAAK,WAAW,GAAIA,UAAU,GAAGxD,QAAQ;EAC7E,IAAI,CAACqiG,SAAS,GAAGA,SAAS;;EAE1B;;EAEA,IAAI,CAAC14F,OAAO,GAAG,IAAI;EACnB,IAAI,CAACs+H,cAAc,GAAG,IAAI;EAE1B,IAAI,CAACC,MAAM,GAAG;IACZ1oI,IAAI,EAAE,CAAC;IAAED,GAAG,EAAE,CAAC;IAAEV,KAAK,EAAE,CAAC;IAAEqC,MAAM,EAAE;EACrC,CAAC;EAED,IAAI,CAAC3Y,OAAO,GAAG;IACbu/I,YAAY,EAAE1jJ,IAAI,CAACC,EAAE;IAAE;IACvBujJ,gBAAgB,EAAE,CAAC,GAAGxjJ,IAAI,CAACC,EAAE;IAAE;IAC/B6iJ,QAAQ,EAAE,IAAI;IACdC,oBAAoB,EAAE,GAAG;IACzBC,iBAAiB,EAAE;EACrB,CAAC;;EAED;;EAEA,IAAI,CAACe,MAAM,GAAG1C,KAAK,CAACC,IAAI;EAExB,IAAI,CAAC0C,aAAa,GAAG,IAAI3jH,kFAAa,CAAC,CAAC;EACxC,IAAI,CAAC4jH,YAAY,GAAG,IAAI5jH,kFAAa,CAAC,CAAC;EAEvC,IAAI,CAAC6jH,QAAQ,GAAG,IAAIpC,aAAa,CAAC,CAAC,IAAI,CAAC75H,MAAM,CAAC,EAAE,IAAI,CAACuxC,MAAM,EAAE,IAAIn5B,kFAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAACl8B,OAAO,CAAC;EACvG,IAAI,CAACggJ,OAAO,GAAG,IAAIrC,aAAa,CAAC,CAAC,IAAI,CAAC75H,MAAM,CAAC,EAAE,IAAI,CAACuxC,MAAM,EAAE,IAAIn5B,kFAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAACl8B,OAAO,CAAC;EACtG,IAAI,CAACigJ,YAAY,GAAG,IAAI,CAACF,QAAQ;EACjC,IAAI,CAACG,4BAA4B,GAAG,IAAI;EACxC,IAAI,CAACC,qBAAqB,GAAG,IAAI;EACjC,IAAI,CAACC,qBAAqB,GAAG,KAAK;EAElC,IAAI,CAACC,YAAY,GAAG,EAAE;EAEtB,IAAI,CAACC,MAAM,GAAG,IAAIxmI,KAAK,CAAC,CAAC;EACzB,IAAI,CAACwmI,MAAM,CAACnmI,KAAK,CAAC,CAAC;EACnB,IAAI,CAAComI,eAAe,GAAG,IAAI,CAACD,MAAM,CAACjmI,cAAc,CAAC,CAAC;;EAEnD;EACA,IAAI,CAACmmI,UAAU,GAAG,CAChB;IACEv1I,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,WAAW;IACjB2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAAC8hJ,SAAS,CAACh0I,CAAC,CAAC;IACnB;EACF,CAAC,EACD;IACExB,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,SAAS;IACf2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAAC+hJ,OAAO,CAACj0I,CAAC,CAAC;IACjB;EACF,CAAC,EACD;IACExB,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,WAAW;IACjB2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAACgiJ,SAAS,CAACl0I,CAAC,CAAC;IACnB;EACF,CAAC,EACD;IACExB,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,YAAY;IAClB2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAACiiJ,UAAU,CAACn0I,CAAC,CAAC;IACpB;EACF,CAAC,EACD;IACExB,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,gBAAgB;IACtB2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAACiiJ,UAAU,CAACn0I,CAAC,CAAC;IACpB;EACF,CAAC,EACD;IACExB,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,UAAU;IAChB2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAAC+hJ,OAAO,CAACj0I,CAAC,CAAC;IACjB;EACF,CAAC,EACD;IACExB,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,YAAY;IAClB2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAACkiJ,aAAa,CAACp0I,CAAC,CAAC;IACvB;EACF,CAAC,EACD;IACExB,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,UAAU;IAChB2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAACkiJ,aAAa,CAACp0I,CAAC,CAAC;IACvB;EACF,CAAC,EACD;IACExB,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,WAAW;IACjB2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAACmiJ,SAAS,CAACr0I,CAAC,CAAC;IACnB;EACF,CAAC,EACD;IACExB,GAAG,EAAEtM,IAAI,CAACoiJ,gBAAgB,CAAC,CAAC;IAC5B7kJ,IAAI,EAAE,SAAS;IACf2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAACqiJ,SAAS,CAACv0I,CAAC,CAAC;IACnB;EACF,CAAC,EACD;IACExB,GAAG,EAAEtM,IAAI,CAACoiJ,gBAAgB,CAAC,CAAC;IAC5B7kJ,IAAI,EAAE,OAAO;IACb2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAACqiJ,SAAS,CAACv0I,CAAC,CAAC;IACnB;EACF,CAAC,EACD;IACExB,GAAG,EAAEpB,MAAM;IACX3N,IAAI,EAAE,QAAQ;IACd2gB,OAAOA,CAAA,EAAG;MACRle,IAAI,CAACsiJ,YAAY,CAAC,CAAC;IACrB;EACF,CAAC,EACD;IACEh2I,GAAG,EAAEpB,MAAM;IACX3N,IAAI,EAAE,MAAM;IACZ2gB,OAAOA,CAAA,EAAG;MACRle,IAAI,CAACuiJ,SAAS,CAAC,CAAC;IAClB;EACF,CAAC,EACD;IACEj2I,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,aAAa;IACnB2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAACwiJ,WAAW,CAAC10I,CAAC,CAAC;IACrB;EACF,CAAC,CAAC;EAEJ,KAAK,IAAI/Q,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC8kJ,UAAU,CAAC7sJ,MAAM,EAAE+H,CAAC,EAAE,EAAE;IAC/C,MAAMhI,CAAC,GAAG,IAAI,CAAC8sJ,UAAU,CAAC9kJ,CAAC,CAAC;IAC5BhI,CAAC,CAACuX,GAAG,CAAC8J,gBAAgB,CAACrhB,CAAC,CAACwI,IAAI,EAAExI,CAAC,CAACmpB,OAAO,CAAC;EAC3C;EAEA,IAAI,CAACokI,YAAY,CAAC,CAAC;EAEnB,IAAI,CAACC,SAAS,CAAC,CAAC;;EAEhB;EACA,IAAI,CAAC5mI,MAAM,CAAC,CAAC;AACf;;AAEA;;AAEAklI,cAAc,CAAC//I,SAAS,GAAGlC,MAAM,CAACC,MAAM,CAAC4e,qBAAe,CAAC3c,SAAS,CAAC;AACnE+/I,cAAc,CAAC//I,SAAS,CAACuH,WAAW,GAAGw4I,cAAc;AAErDA,cAAc,CAAC//I,SAAS,CAACyhJ,SAAS,GAAG,YAAY;EAC/C,IAAI,CAACb,YAAY,CAACvD,OAAO,CAAC,GAAG,KAAK;EAClC,IAAI,CAACuD,YAAY,CAACtD,KAAK,CAAC,GAAG,KAAK;EAChC,IAAI,CAACsD,YAAY,CAACrD,QAAQ,CAAC,GAAG,KAAK;EACnC,IAAI,CAACqD,YAAY,CAACpD,OAAO,CAAC,GAAG,KAAK;AACpC,CAAC;AAEDuC,cAAc,CAAC//I,SAAS,CAAC0hJ,WAAW,GAAG,UAAU10I,CAAC,EAAE;EAClDA,CAAC,CAAC20I,eAAe,CAAC,CAAC;EACnB30I,CAAC,CAAC40I,cAAc,CAAC,CAAC;AACpB,CAAC;AAED7B,cAAc,CAAC//I,SAAS,CAACwhJ,YAAY,GAAG,YAAY;EAClD,IAAI,IAAI,CAAChmI,UAAU,KAAKxD,QAAQ,EAAE;IAChC,IAAI,CAACkoI,MAAM,CAAC1oI,IAAI,GAAG,CAAC;IACpB,IAAI,CAAC0oI,MAAM,CAAC3oI,GAAG,GAAG,CAAC;IACnB,IAAI,CAAC2oI,MAAM,CAACrpI,KAAK,GAAGzM,MAAM,CAACy3I,UAAU;IACrC,IAAI,CAAC3B,MAAM,CAAChnI,MAAM,GAAG9O,MAAM,CAAC03I,WAAW;EACzC,CAAC,MAAM;IACL,MAAM/mG,GAAG,GAAG,IAAI,CAACv/B,UAAU,CAACumI,qBAAqB,CAAC,CAAC;IACnD;IACA,MAAMj0I,CAAC,GAAG,IAAI,CAAC0N,UAAU,CAACwmI,aAAa,CAACC,eAAe;IACvD,IAAI,CAAC/B,MAAM,CAAC1oI,IAAI,GAAGujC,GAAG,CAACvjC,IAAI,GAAGpN,MAAM,CAAC83I,WAAW,GAAGp0I,CAAC,CAACq0I,UAAU;IAC/D,IAAI,CAACjC,MAAM,CAAC3oI,GAAG,GAAGwjC,GAAG,CAACxjC,GAAG,GAAGnN,MAAM,CAACg4I,WAAW,GAAGt0I,CAAC,CAACu0I,SAAS;IAC5D,IAAI,CAACnC,MAAM,CAACrpI,KAAK,GAAGkkC,GAAG,CAAClkC,KAAK;IAC7B,IAAI,CAACqpI,MAAM,CAAChnI,MAAM,GAAG6hC,GAAG,CAAC7hC,MAAM;EACjC;AACF,CAAC;AAED6mI,cAAc,CAAC//I,SAAS,CAAC4hB,MAAM,GAAG,UAAUA,MAAM,EAAE;EAClD,IAAI,CAACD,OAAO,GAAGC,MAAM;AACvB,CAAC;AAEDm+H,cAAc,CAAC//I,SAAS,CAACsiJ,aAAa,GAAG,UAAU1gI,MAAM,EAAE;EACzD,IAAI,CAACq+H,cAAc,GAAGr+H,MAAM;AAC9B,CAAC;AAEDm+H,cAAc,CAAC//I,SAAS,CAACuiJ,gBAAgB,GAAG,UAAUC,KAAK,EAAE;EAC3D,IAAI,CAAC9B,qBAAqB,GAAG8B,KAAK;AACpC,CAAC;AAEDzC,cAAc,CAAC//I,SAAS,CAACyiJ,uBAAuB,GAAG,UAAUD,KAAK,EAAE;EAClE,IAAI,CAAC/B,4BAA4B,GAAG+B,KAAK;AAC3C,CAAC;AAEDzC,cAAc,CAAC//I,SAAS,CAAC0iJ,gBAAgB,GAAG,UAAUpmI,EAAE,EAAE;EACxD,IAAI,CAACqkI,qBAAqB,GAAGrkI,EAAE;AACjC,CAAC;AAEDyjI,cAAc,CAAC//I,SAAS,CAAC2iJ,eAAe,GAAG,YAAY;EACrD,OAAO,CAAE,IAAI,CAACxC,MAAM,KAAK1C,KAAK,CAACE,MAAM,IAAM,IAAI,CAACwC,MAAM,KAAK1C,KAAK,CAACG,SAAU,KAC7D,IAAI,CAAC4C,YAAY,KAAK,IAAI,CAACD,OAAQ;AACnD,CAAC;;AAED;AACA;AACAR,cAAc,CAAC//I,SAAS,CAAC4iJ,sBAAsB,GAAG,UAAUpc,MAAM,EAAEqc,KAAK,EAAEC,KAAK,EAAE;EAChF,MAAMC,UAAU,GAAG3mJ,IAAI,CAACuM,GAAG,CAAC,IAAI,CAACu3I,MAAM,CAACrpI,KAAK,EAAE,IAAI,CAACqpI,MAAM,CAAChnI,MAAM,CAAC;EAElE,IAAI6pI,UAAU,KAAK,CAAC,EAAE;IACpBvc,MAAM,CAAClsI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB;EACF;EAEAksI,MAAM,CAAClsI,GAAG,CACP,CAACuoJ,KAAK,GAAG,IAAI,CAAC3C,MAAM,CAACrpI,KAAK,GAAG,GAAG,GAAG,IAAI,CAACqpI,MAAM,CAAC1oI,IAAI,IAAIurI,UAAU,EACjE,CAAC,GAAG,GAAG,IAAI,CAAC7C,MAAM,CAAChnI,MAAM,GAAG,IAAI,CAACgnI,MAAM,CAAC3oI,GAAG,GAAGurI,KAAK,IAAIC,UAC1D,CAAC;AACH,CAAC;;AAED;AACA;AACAhD,cAAc,CAAC//I,SAAS,CAACgjJ,sBAAsB,GAAG,UAAUxc,MAAM,EAAEqc,KAAK,EAAEC,KAAK,EAAE;EAChF,IAAI,IAAI,CAAC5C,MAAM,CAACrpI,KAAK,KAAK,CAAC,IAAI,IAAI,CAACqpI,MAAM,CAAChnI,MAAM,KAAK,CAAC,EAAE;IACvDstH,MAAM,CAAClsI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB;EACF;EAEAksI,MAAM,CAAClsI,GAAG,CACP,GAAG,IAAIuoJ,KAAK,GAAG,IAAI,CAAC3C,MAAM,CAACrpI,KAAK,GAAG,GAAG,GAAG,IAAI,CAACqpI,MAAM,CAAC1oI,IAAI,CAAC,GAAG,IAAI,CAAC0oI,MAAM,CAACrpI,KAAK,EAC9E,GAAG,IAAI,GAAG,GAAG,IAAI,CAACqpI,MAAM,CAAChnI,MAAM,GAAG,IAAI,CAACgnI,MAAM,CAAC3oI,GAAG,GAAGurI,KAAK,CAAC,GAAG,IAAI,CAAC5C,MAAM,CAAChnI,MAC5E,CAAC;AACH,CAAC;AAED6mI,cAAc,CAAC//I,SAAS,CAAC8X,IAAI,GAAG,YAAY;EAC1C,IAAI,CAACwoI,QAAQ,CAACxoI,IAAI,CAAC,CAAC;EACpB,IAAI,CAACyoI,OAAO,CAACzoI,IAAI,CAAC,CAAC;AACrB,CAAC;;AAED;AACAioI,cAAc,CAAC//I,SAAS,CAACijJ,aAAa,GAAI,YAAY;EACpD,MAAM5E,IAAI,GAAG,IAAI5hH,qFAAgB,CAAC,CAAC;EAEnC,OAAO,UAAUymH,UAAU,EAAE;IAC3B,IAAI,CAAC1C,YAAY,CAACrkJ,MAAM,CAACkiJ,IAAI,EAAE,IAAI,CAAC+B,aAAa,EAAE,IAAI,CAACC,YAAY,EAAE6C,UAAU,CAAC;IACjF,IAAI,CAAC1lI,aAAa,CAAC;MAAE/gB,IAAI,EAAE,QAAQ;MAAEuE,MAAM,EAAE,QAAQ;MAAEyxD,UAAU,EAAE4rF;IAAK,CAAC,CAAC;EAC5E,CAAC;AACH,CAAC,CAAC,CAAE;;AAEJ;AACA0B,cAAc,CAAC//I,SAAS,CAAC7D,MAAM,GAAG,UAAUkiJ,IAAI,EAAE;EAChD,IAAI,CAACh6H,MAAM,CAACouC,UAAU,CAACQ,QAAQ,CAACorF,IAAI,CAAC;EACrC,IAAI,CAAC7gI,aAAa,CAAC;IAAE/gB,IAAI,EAAE,QAAQ;IAAEuE,MAAM,EAAE,QAAQ;IAAEyxD,UAAU,EAAE4rF;EAAK,CAAC,CAAC;AAC5E,CAAC;;AAED;AACA0B,cAAc,CAAC//I,SAAS,CAACmjJ,cAAc,GAAG,YAAY;EACpD,OAAO,IAAI,CAAC9+H,MAAM,CAACouC,UAAU;AAC/B,CAAC;;AAED;AACAstF,cAAc,CAAC//I,SAAS,CAACojJ,cAAc,GAAG,UAAU/E,IAAI,EAAE;EACxD,IAAI,CAACh6H,MAAM,CAACouC,UAAU,CAAChnD,IAAI,CAAC4yI,IAAI,CAAC;AACnC,CAAC;;AAED;AACA0B,cAAc,CAAC//I,SAAS,CAAC1D,SAAS,GAAI,YAAY;EAChD,MAAMwe,KAAK,GAAG,IAAI2hB,kFAAa,CAAC,CAAC;EACjC,OAAO,YAAY;IACjB3hB,KAAK,CAACqvD,UAAU,CAAC,IAAI,CAACk2E,YAAY,EAAE,IAAI,CAACD,aAAa,CAAC;IACvD,IAAI,CAACI,YAAY,CAAClkJ,SAAS,CAACwe,KAAK,CAAC;IAClC,IAAI,CAAC0C,aAAa,CAAC;MAAE/gB,IAAI,EAAE,QAAQ;MAAEuE,MAAM,EAAE;IAAY,CAAC,CAAC;EAC7D,CAAC;AACH,CAAC,CAAC,CAAE;;AAEJ;AACA++I,cAAc,CAAC//I,SAAS,CAACqjJ,QAAQ,GAAG,YAAY;EAC9C,OAAO,IAAI,CAACh/H,MAAM,CAACroB,KAAK,CAACmO,CAAC;AAC5B,CAAC;;AAED;AACA41I,cAAc,CAAC//I,SAAS,CAACsjJ,QAAQ,GAAG,UAAUtnJ,KAAK,EAAE;EACnD,IAAI,CAACqoB,MAAM,CAACroB,KAAK,CAAC1B,GAAG,CAAC0B,KAAK,EAAEA,KAAK,EAAEA,KAAK,CAAC;AAC5C,CAAC;;AAED;AACA+jJ,cAAc,CAAC//I,SAAS,CAAChE,KAAK,GAAG,UAAUkwB,MAAM,EAAE;EACjD,IAAIA,MAAM,IAAI,CAAC,EAAE;IACf;EACF;EACA,IAAI,CAACo3H,QAAQ,CAAC,IAAI,CAACj/H,MAAM,CAACroB,KAAK,CAACmO,CAAC,GAAG+hB,MAAM,CAAC;EAC3C,IAAI,CAAC1O,aAAa,CAAC;IAAE/gB,IAAI,EAAE,QAAQ;IAAEuE,MAAM,EAAE,MAAM;IAAEkrB;EAAO,CAAC,CAAC;AAChE,CAAC;AAED6zH,cAAc,CAAC//I,SAAS,CAAC6a,MAAM,GAAI,YAAY;EAC7C,MAAMinF,KAAK,GAAG,IAAIrlE,kFAAa,CAAC,CAAC;EAEjC,OAAO,YAAY;IACjB,MAAM8mH,OAAO,GAAG,IAAI,CAAC1C,MAAM,CAACjmI,cAAc,CAAC,CAAC;IAC5C,MAAMokI,mBAAmB,GAAGuE,OAAO,GAAG,IAAI,CAACzC,eAAe;;IAE1D;IACA,IAAI,IAAI,CAACX,MAAM,KAAK1C,KAAK,CAACC,IAAI,EAAE;MAC9B,MAAMuB,aAAa,GAAGsE,OAAO,GAAG,IAAI,CAACC,kBAAkB;MACvD,IAAI,IAAI,CAAClD,QAAQ,CAACzlI,MAAM,CAACmkI,mBAAmB,EAAEC,aAAa,CAAC,IACvD,IAAI,CAACsB,OAAO,CAAC1lI,MAAM,CAACmkI,mBAAmB,EAAEC,aAAa,CAAC,EAAE;QAC5D,IAAI,CAACzhI,aAAa,CAAC;UAAE/gB,IAAI,EAAE,QAAQ;UAAEuE,MAAM,EAAE;QAAO,CAAC,CAAC;MACxD;IACF;;IAEA;IACA,IAAI,IAAI,CAAC2/I,qBAAqB,EAAE;MAC9B,MAAM8C,MAAM,GAAG/nJ,MAAM,CAAC,IAAI,CAACklJ,YAAY,CAACrD,QAAQ,CAAC,CAAC,GAAG7hJ,MAAM,CAAC,IAAI,CAACklJ,YAAY,CAACvD,OAAO,CAAC,CAAC;MACvF,MAAMqG,MAAM,GAAGhoJ,MAAM,CAAC,IAAI,CAACklJ,YAAY,CAACtD,KAAK,CAAC,CAAC,GAAG5hJ,MAAM,CAAC,IAAI,CAACklJ,YAAY,CAACpD,OAAO,CAAC,CAAC;MACpF,IAAIiG,MAAM,KAAK,GAAG,IAAIC,MAAM,KAAK,GAAG,EAAE;QACpC,MAAM5oI,KAAK,GAAGkkI,mBAAmB;;QAEjC;QACA,MAAM2E,MAAM,GAAG,IAAI,CAACtpC,SAAS,CAAC,CAAC;QAC/B,IAAIspC,MAAM,CAAC51H,OAAO,CAAC75B,MAAM,GAAG,CAAC,EAAE;UAC7B,IAAI,CAACqsJ,OAAO,CAAC/B,UAAU,CAACmF,MAAM,CAAC51H,OAAO,CAAC;UACvC,IAAI,CAACwyH,OAAO,CAACjmC,KAAK,GAAGqpC,MAAM,CAACrpC,KAAK;UAEjC,IAAI,MAAM,IAAIqpC,MAAM,EAAE;YACpB,IAAI,CAACpD,OAAO,CAAC9tE,IAAI,GAAGkxE,MAAM,CAAClxE,IAAI,CAACp3C,KAAK,CAAC,CAAC;UACzC,CAAC,MAAM;YACL,IAAI,CAACklH,OAAO,CAAC9tE,IAAI,CAACn4E,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;UAChC;UAEAwnG,KAAK,CAACxnG,GAAG,CAACwgB,KAAK,GAAG2oI,MAAM,EAAE3oI,KAAK,GAAG4oI,MAAM,CAAC;UACzC,IAAI,CAACnD,OAAO,CAACjkJ,SAAS,CAACwlG,KAAK,CAAC;UAC7B,IAAI,CAACtkF,aAAa,CAAC;YAAE/gB,IAAI,EAAE,QAAQ;YAAEuE,MAAM,EAAE;UAAY,CAAC,CAAC;QAC7D;MACF;IACF;IAEA,IAAI,CAAC8/I,eAAe,GAAGyC,OAAO;EAChC,CAAC;AACH,CAAC,CAAC,CAAE;AAEJxD,cAAc,CAAC//I,SAAS,CAACtG,KAAK,GAAG,YAAY;EAC3C,IAAI,CAACymJ,MAAM,GAAG1C,KAAK,CAACC,IAAI;EAExB,IAAI,CAACr5H,MAAM,CAACouC,UAAU,CAAChnD,IAAI,CAACgnD,UAAU,CAACn4D,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;;AAED;;AAEAylJ,cAAc,CAAC//I,SAAS,CAACghJ,SAAS,GAAG,UAAUvjI,KAAK,EAAE;EACpD,IAAI,IAAI,CAACkE,OAAO,KAAK,KAAK,IAAI,IAAI,CAACw+H,MAAM,KAAK1C,KAAK,CAACC,IAAI,EAAE;IACxD;EACF;EAEAjgI,KAAK,CAACmkI,cAAc,CAAC,CAAC;EACtBnkI,KAAK,CAACkkI,eAAe,CAAC,CAAC;EAEvB,IAAI,IAAI,CAACxB,MAAM,KAAK1C,KAAK,CAACC,IAAI,EAAE;IAC9B,IAAIjgI,KAAK,CAACmmI,MAAM,KAAK,CAAC,EAAE;MACtB,IAAI,CAACpD,YAAY,CAAC1oI,IAAI,CAAC,CAAC,CAAC,CAAC;;MAE1B,IAAI+rI,cAAc,GAAG,KAAK;MAE1B,IAAIpmI,KAAK,CAACqmI,MAAM,EAAE;QAChB,MAAMH,MAAM,GAAG,IAAI,CAACtpC,SAAS,CAAC,CAAC;QAC/BwpC,cAAc,GAAIF,MAAM,CAAC51H,OAAO,CAAC75B,MAAM,GAAG,CAAE;QAC5C,IAAI2vJ,cAAc,EAAE;UAClB,IAAI,CAACtD,OAAO,CAAC/B,UAAU,CAACmF,MAAM,CAAC51H,OAAO,CAAC;UACvC,IAAI,CAACwyH,OAAO,CAACjmC,KAAK,GAAGqpC,MAAM,CAACrpC,KAAK;UAEjC,IAAI,MAAM,IAAIqpC,MAAM,EAAE;YACpB,IAAI,CAACpD,OAAO,CAAC9tE,IAAI,GAAGkxE,MAAM,CAAClxE,IAAI,CAACp3C,KAAK,CAAC,CAAC;UACzC,CAAC,MAAM;YACL,IAAI,CAACklH,OAAO,CAAC9tE,IAAI,CAACn4E,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;UAChC;QACF;MACF;MAEA,IAAI,CAACkmJ,YAAY,GAAGqD,cAAc,GAAG,IAAI,CAACtD,OAAO,GAAG,IAAI,CAACD,QAAQ;MAEjE,IAAI,CAACH,MAAM,GAAI0D,cAAc,IAAIpmI,KAAK,CAACsmI,OAAO,IAAI,IAAI,CAACrD,qBAAqB,GAAIjD,KAAK,CAACG,SAAS,GAAGH,KAAK,CAACE,MAAM;IAChH,CAAC,MAAM,IAAIlgI,KAAK,CAACmmI,MAAM,KAAK,CAAC,EAAE;MAC7B,IAAI,CAACzD,MAAM,GAAG1C,KAAK,CAACK,eAAe;IACrC;EACF;EAEA,IAAI,IAAI,CAACqC,MAAM,KAAK1C,KAAK,CAACE,MAAM,EAAE;IAChC,IAAI,CAACiF,sBAAsB,CAAC,IAAI,CAACvC,YAAY,EAAE5iI,KAAK,CAAColI,KAAK,EAAEplI,KAAK,CAACqlI,KAAK,CAAC;IACxE,IAAI,CAAC1C,aAAa,CAAC30I,IAAI,CAAC,IAAI,CAAC40I,YAAY,CAAC;EAC5C;EAEA,IAAI,IAAI,CAACF,MAAM,KAAK1C,KAAK,CAACG,SAAS,IAAI,IAAI,CAACuC,MAAM,KAAK1C,KAAK,CAACK,eAAe,EAAE;IAC5E,IAAI,CAACkF,sBAAsB,CAAC,IAAI,CAAC3C,YAAY,EAAE5iI,KAAK,CAAColI,KAAK,EAAEplI,KAAK,CAACqlI,KAAK,CAAC;IACxE,IAAI,CAAC1C,aAAa,CAAC30I,IAAI,CAAC,IAAI,CAAC40I,YAAY,CAAC;EAC5C;AACF,CAAC;AAEDN,cAAc,CAAC//I,SAAS,CAACkhJ,SAAS,GAAG,UAAUzjI,KAAK,EAAE;EACpD,IAAI,IAAI,CAACkE,OAAO,KAAK,KAAK,IAAI,IAAI,CAACw+H,MAAM,KAAK1C,KAAK,CAACC,IAAI,EAAE;IACxD;EACF;EAEAjgI,KAAK,CAACmkI,cAAc,CAAC,CAAC;EACtBnkI,KAAK,CAACkkI,eAAe,CAAC,CAAC;EAEvB,QAAQ,IAAI,CAACxB,MAAM;IACjB,KAAK1C,KAAK,CAACE,MAAM;MACf,IAAI,CAACyC,aAAa,CAAC30I,IAAI,CAAC,IAAI,CAAC40I,YAAY,CAAC;MAC1C,IAAI,CAACuC,sBAAsB,CAAC,IAAI,CAACvC,YAAY,EAAE5iI,KAAK,CAAColI,KAAK,EAAEplI,KAAK,CAACqlI,KAAK,CAAC;MACxE,IAAI,CAACG,aAAa,CAAExlI,KAAK,CAACqmI,MAAM,IAAI,CAAC,IAAI,CAACrD,4BAA4B,IAAKhjI,KAAK,CAACumI,QAAQ,CAAC;MAC1F,IAAI,CAACR,kBAAkB,GAAG,IAAI,CAAC3C,MAAM,CAACjmI,cAAc,CAAC,CAAC;MACtD;IAEF,KAAK6iI,KAAK,CAACG,SAAS;MAClB,IAAI,CAACwC,aAAa,CAAC30I,IAAI,CAAC,IAAI,CAAC40I,YAAY,CAAC;MAC1C,IAAI,CAAC2C,sBAAsB,CAAC,IAAI,CAAC3C,YAAY,EAAE5iI,KAAK,CAAColI,KAAK,EAAEplI,KAAK,CAACqlI,KAAK,CAAC;MACxE,IAAI,CAACxmJ,SAAS,CAAC,CAAC;MAChB;IAEF,KAAKmhJ,KAAK,CAACK,eAAe;MACxB,IAAI,CAACsC,aAAa,CAAC30I,IAAI,CAAC,IAAI,CAAC40I,YAAY,CAAC;MAC1C,IAAI,CAAC2C,sBAAsB,CAAC,IAAI,CAAC3C,YAAY,EAAE5iI,KAAK,CAAColI,KAAK,EAAEplI,KAAK,CAACqlI,KAAK,CAAC;MACxE,IAAI,CAACmB,qBAAqB,CAAC,CAAC;MAC5B;IAEF;MAAS;EACX;AACF,CAAC;AAEDlE,cAAc,CAAC//I,SAAS,CAACmhJ,UAAU,GAAG,UAAU1jI,KAAK,EAAE;EACrD,IAAI,IAAI,CAACkE,OAAO,KAAK,KAAK,IAAI,CAAC3kB,QAAQ,CAAC2d,GAAG,CAAC6U,OAAO,IAAI,IAAI,CAAC2wH,MAAM,KAAK1C,KAAK,CAACC,IAAI,IAAIjgI,KAAK,CAACumI,QAAQ,EAAE;IACnG;EACF;EAEAvmI,KAAK,CAACmkI,cAAc,CAAC,CAAC;EAEtB,IAAI9mI,KAAK,GAAG,CAAC;EAEb,IAAI2C,KAAK,CAACymI,UAAU,EAAE;IACpB;IACAppI,KAAK,GAAG2C,KAAK,CAACymI,UAAU,GAAG,EAAE;EAC/B,CAAC,MAAM,IAAIzmI,KAAK,CAAC0mI,MAAM,EAAE;IACvB;IACArpI,KAAK,GAAG,CAAC2C,KAAK,CAAC0mI,MAAM,GAAG,CAAC;EAC3B;EAEA,IAAIj4H,MAAM,GAAG,GAAG,GAAGpR,KAAK,GAAG,IAAI;EAC/BoR,MAAM,GAAG9vB,IAAI,CAACsM,GAAG,CAACwjB,MAAM,EAAE,IAAI,CAAC;EAC/B,IAAI,CAAClwB,KAAK,CAACkwB,MAAM,CAAC;AACpB,CAAC;AAED6zH,cAAc,CAAC//I,SAAS,CAACihJ,OAAO,GAAG,UAAUxjI,KAAK,EAAE;EAClD,IAAI,IAAI,CAACkE,OAAO,KAAK,KAAK,IAAI,IAAI,CAACw+H,MAAM,KAAK1C,KAAK,CAACC,IAAI,EAAE;IACxD;EACF;EAEAjgI,KAAK,CAACmkI,cAAc,CAAC,CAAC;EACtBnkI,KAAK,CAACkkI,eAAe,CAAC,CAAC;EAEvB,IAAI,CAACxB,MAAM,GAAG1C,KAAK,CAACC,IAAI;EAExB,IAAI,IAAI,CAACmD,MAAM,CAACjmI,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC4oI,kBAAkB,GAAGzF,mBAAmB,EAAE;IAChF,IAAI,CAACyC,YAAY,CAAC1oI,IAAI,CAAC,CAAC;EAC1B;AACF,CAAC;AAEDioI,cAAc,CAAC//I,SAAS,CAACohJ,aAAa,GAAG,UAAU3jI,KAAK,EAAE;EACxD,IAAI,IAAI,CAACkE,OAAO,KAAK,KAAK,EAAE;IAC1B;EACF;EAEAlE,KAAK,CAACmkI,cAAc,CAAC,CAAC;EACtBnkI,KAAK,CAACkkI,eAAe,CAAC,CAAC;EAEvB,QAAQlkI,KAAK,CAAC2mI,OAAO,CAAClwJ,MAAM;IAC1B,KAAK,CAAC;MACJ,IAAI,CAACisJ,MAAM,GAAG1C,KAAK,CAACE,MAAM;MAC1B,IAAI,CAACiF,sBAAsB,CAAC,IAAI,CAACvC,YAAY,EAAE5iI,KAAK,CAAC2mI,OAAO,CAAC,CAAC,CAAC,CAACvB,KAAK,EAAEplI,KAAK,CAAC2mI,OAAO,CAAC,CAAC,CAAC,CAACtB,KAAK,CAAC;MAC9F,IAAI,CAAC1C,aAAa,CAAC30I,IAAI,CAAC,IAAI,CAAC40I,YAAY,CAAC;MAC1C;IAEF,KAAK,CAAC;MAAE;QACN;QACA,IAAI,CAACC,QAAQ,CAACxoI,IAAI,CAAC,CAAC;QACpB,IAAI,CAACyoI,OAAO,CAACzoI,IAAI,CAAC,CAAC;QAEnB,IAAI,CAACqoI,MAAM,GAAG1C,KAAK,CAACI,KAAK;QACzB,MAAM9yH,EAAE,GAAGtN,KAAK,CAAC2mI,OAAO,CAAC,CAAC,CAAC,CAACvB,KAAK,GAAGplI,KAAK,CAAC2mI,OAAO,CAAC,CAAC,CAAC,CAACvB,KAAK;QAC1D,MAAM73H,EAAE,GAAGvN,KAAK,CAAC2mI,OAAO,CAAC,CAAC,CAAC,CAACtB,KAAK,GAAGrlI,KAAK,CAAC2mI,OAAO,CAAC,CAAC,CAAC,CAACtB,KAAK;QAC1D,IAAI,CAACuB,iBAAiB,GAAG,IAAI,CAACC,mBAAmB,GAAGloJ,IAAI,CAAC+xC,IAAI,CAACpjB,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE,CAAC;QAChF,IAAI,CAACu5H,WAAW,GAAG,IAAI,CAAClgI,MAAM,CAACroB,KAAK,CAACmO,CAAC;QACtC;MACF;IAEA;MACE,IAAI,CAACg2I,MAAM,GAAG1C,KAAK,CAACC,IAAI;EAC5B;AACF,CAAC;AAEDqC,cAAc,CAAC//I,SAAS,CAACqhJ,SAAS,GAAG,UAAU5jI,KAAK,EAAE;EACpD,IAAI,IAAI,CAACkE,OAAO,KAAK,KAAK,IAAI,IAAI,CAACw+H,MAAM,KAAK1C,KAAK,CAACC,IAAI,EAAE;IACxD;EACF;EAEAjgI,KAAK,CAACmkI,cAAc,CAAC,CAAC;EACtBnkI,KAAK,CAACkkI,eAAe,CAAC,CAAC;EAEvB,QAAQ,IAAI,CAACxB,MAAM;IACjB,KAAK1C,KAAK,CAACE,MAAM;MACf,IAAI,CAACyC,aAAa,CAAC30I,IAAI,CAAC,IAAI,CAAC40I,YAAY,CAAC;MAC1C,IAAI,CAACuC,sBAAsB,CAAC,IAAI,CAACvC,YAAY,EAAE5iI,KAAK,CAAC2mI,OAAO,CAAC,CAAC,CAAC,CAACvB,KAAK,EAAEplI,KAAK,CAAC2mI,OAAO,CAAC,CAAC,CAAC,CAACtB,KAAK,CAAC;MAC9F,IAAI,CAACG,aAAa,CAAC,KAAK,CAAC;MAEzB,IAAI,CAACO,kBAAkB,GAAG,IAAI,CAAC3C,MAAM,CAACjmI,cAAc,CAAC,CAAC;MACtD;IAEF,KAAK6iI,KAAK,CAACI,KAAK;MACd,IAAI7gJ,QAAQ,CAAC2d,GAAG,CAAC6U,OAAO,EAAE;QACxB;QACA,MAAMzE,EAAE,GAAGtN,KAAK,CAAC2mI,OAAO,CAAC,CAAC,CAAC,CAACvB,KAAK,GAAGplI,KAAK,CAAC2mI,OAAO,CAAC,CAAC,CAAC,CAACvB,KAAK;QAC1D,MAAM73H,EAAE,GAAGvN,KAAK,CAAC2mI,OAAO,CAAC,CAAC,CAAC,CAACtB,KAAK,GAAGrlI,KAAK,CAAC2mI,OAAO,CAAC,CAAC,CAAC,CAACtB,KAAK;QAC1D,IAAI,CAACuB,iBAAiB,GAAGjoJ,IAAI,CAAC+xC,IAAI,CAACpjB,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE,CAAC;QACrD,MAAMw5H,QAAQ,GAAG,IAAI,CAACD,WAAW,GAAG,IAAI,CAACF,iBAAiB,GAAG,IAAI,CAACC,mBAAmB;QACrF,MAAMp4H,MAAM,GAAGs4H,QAAQ,GAAG,IAAI,CAACngI,MAAM,CAACroB,KAAK,CAACmO,CAAC;QAC7C,IAAI,CAACnO,KAAK,CAACkwB,MAAM,CAAC;MACpB;MACA;IAEF;EACF;AACF,CAAC;AAED6zH,cAAc,CAAC//I,SAAS,CAACuhJ,SAAS,GAAG,UAAU9jI,KAAK,EAAE;EACpD,IAAI,IAAI,CAACkE,OAAO,KAAK,KAAK,IAAI,IAAI,CAACs+H,cAAc,KAAK,KAAK,EAAE;IAC3D;EACF;EAEA,QAAQxiI,KAAK,CAACgnI,OAAO;IACnB,KAAKpH,OAAO;IACZ,KAAKC,KAAK;IACV,KAAKC,QAAQ;IACb,KAAKC,OAAO;MACV,IAAI,CAACoD,YAAY,CAACnjI,KAAK,CAACgnI,OAAO,CAAC,GAAIhnI,KAAK,CAAChhB,IAAI,KAAK,SAAU;MAC7DghB,KAAK,CAACmkI,cAAc,CAAC,CAAC;MACtBnkI,KAAK,CAACkkI,eAAe,CAAC,CAAC;MACvB;IACF;EACF;AACF,CAAC;AAED5B,cAAc,CAAC//I,SAAS,CAACshJ,gBAAgB,GAAG,YAAY;EACtD,OAAOlE,YAAY,CAAC,CAAC;AACvB,CAAC;AAED2C,cAAc,CAAC//I,SAAS,CAAC05D,OAAO,GAAG,YAAY;EAC7C,KAAK,IAAIz9D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC8kJ,UAAU,CAAC7sJ,MAAM,EAAE+H,CAAC,EAAE,EAAE;IAC/C,MAAMhI,CAAC,GAAG,IAAI,CAAC8sJ,UAAU,CAAC9kJ,CAAC,CAAC;IAC5BhI,CAAC,CAACuX,GAAG,CAAC2R,mBAAmB,CAAClpB,CAAC,CAACwI,IAAI,EAAExI,CAAC,CAACmpB,OAAO,CAAC;EAC9C;AACF,CAAC;AAED2iI,cAAc,CAAC//I,SAAS,CAACikJ,qBAAqB,GAAI,YAAY;EAC5D,MAAMnpI,KAAK,GAAG,IAAI2hB,kFAAa,CAAC,CAAC;EACjC,OAAO,YAAY;IACjB3hB,KAAK,CAACqvD,UAAU,CAAC,IAAI,CAACk2E,YAAY,EAAE,IAAI,CAACD,aAAa,CAAC;IACvD,IAAI,CAACsE,qBAAqB,CAAC1nJ,QAAQ,CAAC2d,GAAG,CAACsV,gBAAgB,GAAGnV,KAAK,CAAC3Q,CAAC,EAAEnN,QAAQ,CAAC2d,GAAG,CAACsV,gBAAgB,GAAGnV,KAAK,CAAClM,CAAC,EAAE,CAAC,CAAC;EACjH,CAAC;AACH,CAAC,CAAC,CAAE;;AAEJ;AACAmxI,cAAc,CAAC//I,SAAS,CAAC0kJ,qBAAqB,GAAG,UAAUv6I,CAAC,EAAEyE,CAAC,EAAEqB,CAAC,EAAE;EAClE,MAAM+9B,GAAG,GAAG,IAAI,CAACgyG,WAAW,CAACtoI,QAAQ;EACrCs2B,GAAG,CAACa,YAAY,CAAC,IAAI,CAACxqB,MAAM,CAAC0uC,WAAW,CAAC;EACzC/kB,GAAG,CAAC22G,IAAI,CAAC32G,GAAG,CAAC7jC,CAAC,GAAGA,CAAC,CAAC;EACnB6jC,GAAG,CAAC42G,IAAI,CAAC52G,GAAG,CAACp/B,CAAC,GAAGA,CAAC,CAAC;EACnBo/B,GAAG,CAAC62G,IAAI,CAAC72G,GAAG,CAAC/9B,CAAC,GAAGA,CAAC,CAAC;EACnB+9B,GAAG,CAACa,YAAY,CAACovG,OAAO,CAACxyI,IAAI,CAAC,IAAI,CAAC4Y,MAAM,CAAC0uC,WAAW,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC;EAEhE,IAAI,CAACx1C,aAAa,CAAC;IAAE/gB,IAAI,EAAE,QAAQ;IAAEuE,MAAM,EAAE;EAAiB,CAAC,CAAC;AAClE,CAAC;;AAED;AACA++I,cAAc,CAAC//I,SAAS,CAAC8kJ,cAAc,GAAG,UAAU36I,CAAC,EAAEyE,CAAC,EAAEqB,CAAC,EAAE;EAC3D,MAAM+9B,GAAG,GAAG,IAAI,CAACgyG,WAAW,CAACtoI,QAAQ;EACrCs2B,GAAG,CAAC22G,IAAI,CAAC32G,GAAG,CAAC7jC,CAAC,GAAGA,CAAC,CAAC;EACnB6jC,GAAG,CAAC42G,IAAI,CAAC52G,GAAG,CAACp/B,CAAC,GAAGA,CAAC,CAAC;EACnBo/B,GAAG,CAAC62G,IAAI,CAAC72G,GAAG,CAAC/9B,CAAC,GAAGA,CAAC,CAAC;EAEnB,IAAI,CAACuN,aAAa,CAAC;IAAE/gB,IAAI,EAAE,QAAQ;IAAEuE,MAAM,EAAE;EAAiB,CAAC,CAAC;AAClE,CAAC;;AAED;AACA++I,cAAc,CAAC//I,SAAS,CAAC+kJ,QAAQ,GAAG,UAAUC,QAAQ,EAAE;EACtD,IAAI,CAAChF,WAAW,CAACtoI,QAAQ,CAACjM,IAAI,CAACu5I,QAAQ,CAAC;EAExC,IAAI,CAACxnI,aAAa,CAAC;IAAE/gB,IAAI,EAAE,QAAQ;IAAEuE,MAAM,EAAE;EAAiB,CAAC,CAAC;AAClE,CAAC;AAED,wDAAe++I,cAAc;;ACx1BE;AACI;AACN;AAC0B;AAEvD,SAASkF,MAAMA,CAAC9uF,MAAM,EAAEP,MAAM,EAAEp6C,UAAU,EAAE;EAC1CmB,qBAAe,CAAC/c,IAAI,CAAC,IAAI,CAAC;EAC1B,MAAMV,IAAI,GAAG,IAAI;EAEjB,IAAI,CAACi3D,MAAM,GAAGA,MAAM;EACpB,IAAI,CAACP,MAAM,GAAGA,MAAM;EACpB,IAAI,CAACp6C,UAAU,GAAI,OAAOA,UAAU,KAAK,WAAW,GAAIA,UAAU,GAAGxD,QAAQ;EAC7E,IAAI,CAACkoI,MAAM,GAAG;IACZ1oI,IAAI,EAAE,CAAC;IAAED,GAAG,EAAE,CAAC;IAAEV,KAAK,EAAE,CAAC;IAAEqC,MAAM,EAAE;EACrC,CAAC;EACD,IAAI,CAACgsI,aAAa,GAAG,IAAIzoH,kFAAa,CAAC,CAAC,EAAE,CAAC,CAAC;EAC5C,IAAI,CAAC0oH,eAAe,GAAG,GAAG;EAC1B,IAAI,CAACC,mBAAmB,GAAG,CAAC,MAAM;EAClC,IAAI,CAACC,aAAa,GAAG,IAAI5oH,kFAAa,CAAC,CAAC,EAAE,CAAC,CAAC;EAC5C,IAAI,CAAC6oH,eAAe,GAAG,GAAG;EAE1B,IAAI,CAACzE,MAAM,GAAG,IAAIxmI,KAAK,CAAC,CAAC;EACzB,IAAI,CAACwmI,MAAM,CAACnmI,KAAK,CAAC,CAAC;EAEnB,IAAI,CAACqmI,UAAU,GAAG,CAChB;IACEv1I,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,WAAW;IACjB2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAAC8hJ,SAAS,CAACh0I,CAAC,CAAC;IACnB;EACF,CAAC,EACD;IACExB,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,SAAS;IACf2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAAC+hJ,OAAO,CAACj0I,CAAC,CAAC;IACjB;EACF,CAAC,EACD;IACExB,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,WAAW;IACjB2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAACgiJ,SAAS,CAACl0I,CAAC,CAAC;IACnB;EACF,CAAC,EACD;IACExB,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,YAAY;IAClB2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAACqmJ,UAAU,CAACv4I,CAAC,CAAC;IACpB;EACF,CAAC,EACD;IACExB,GAAG,EAAEtM,IAAI,CAACsc,UAAU;IACpB/e,IAAI,EAAE,UAAU;IAChB2gB,OAAOA,CAACpQ,CAAC,EAAE;MACT9N,IAAI,CAACsmJ,QAAQ,CAACx4I,CAAC,CAAC;IAClB;EACF,CAAC,EACD;IACExB,GAAG,EAAEpB,MAAM;IACX3N,IAAI,EAAE,QAAQ;IACd2gB,OAAOA,CAAA,EAAG;MACRle,IAAI,CAACsiJ,YAAY,CAAC,CAAC;IACrB;EACF,CAAC,CAAC;EAEJ,KAAK,IAAIvlJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC8kJ,UAAU,CAAC7sJ,MAAM,EAAE+H,CAAC,EAAE,EAAE;IAC/C,MAAMhI,CAAC,GAAG,IAAI,CAAC8sJ,UAAU,CAAC9kJ,CAAC,CAAC;IAC5BhI,CAAC,CAACuX,GAAG,CAAC8J,gBAAgB,CAACrhB,CAAC,CAACwI,IAAI,EAAExI,CAAC,CAACmpB,OAAO,CAAC;EAC3C;EAEA,IAAI,CAACokI,YAAY,CAAC,CAAC;AACrB;AAEAyD,MAAM,CAACjlJ,SAAS,GAAGlC,MAAM,CAACC,MAAM,CAAC4e,qBAAe,CAAC3c,SAAS,CAAC;AAC3DilJ,MAAM,CAACjlJ,SAAS,CAACuH,WAAW,GAAG09I,MAAM;AAErCA,MAAM,CAACjlJ,SAAS,CAACtG,KAAK,GAAG,YAAY;EACnC,IAAI,CAAC+rJ,MAAM,GAAG,CAAC,CAAC;EAChB,IAAI,CAACjoI,aAAa,CAAC;IAAE/gB,IAAI,EAAE,SAAS;IAAE+O,GAAG,EAAE,CAAC;EAAE,CAAC,CAAC;AAClD,CAAC;AAEDy5I,MAAM,CAACjlJ,SAAS,CAACwhJ,YAAY,GAAG,YAAY;EAC1C,IAAI,IAAI,CAAChmI,UAAU,KAAKxD,QAAQ,EAAE;IAChC,IAAI,CAACkoI,MAAM,CAAC1oI,IAAI,GAAG,CAAC;IACpB,IAAI,CAAC0oI,MAAM,CAAC3oI,GAAG,GAAG,CAAC;IACnB,IAAI,CAAC2oI,MAAM,CAACrpI,KAAK,GAAGzM,MAAM,CAACy3I,UAAU;IACrC,IAAI,CAAC3B,MAAM,CAAChnI,MAAM,GAAG9O,MAAM,CAAC03I,WAAW;EACzC,CAAC,MAAM;IACL,MAAM/mG,GAAG,GAAG,IAAI,CAACv/B,UAAU,CAACumI,qBAAqB,CAAC,CAAC;IACnD;IACA,MAAMj0I,CAAC,GAAG,IAAI,CAAC0N,UAAU,CAACwmI,aAAa,CAACC,eAAe;IACvD,IAAI,CAAC/B,MAAM,CAAC1oI,IAAI,GAAGujC,GAAG,CAACvjC,IAAI,GAAGpN,MAAM,CAAC83I,WAAW,GAAGp0I,CAAC,CAACq0I,UAAU;IAC/D,IAAI,CAACjC,MAAM,CAAC3oI,GAAG,GAAGwjC,GAAG,CAACxjC,GAAG,GAAGnN,MAAM,CAACg4I,WAAW,GAAGt0I,CAAC,CAACu0I,SAAS;IAC5D,IAAI,CAACnC,MAAM,CAACrpI,KAAK,GAAGkkC,GAAG,CAAClkC,KAAK;IAC7B,IAAI,CAACqpI,MAAM,CAAChnI,MAAM,GAAG6hC,GAAG,CAAC7hC,MAAM;EACjC;AACF,CAAC;AAED+rI,MAAM,CAACjlJ,SAAS,CAAC0lJ,UAAU,GAAG,UAAUC,SAAS,EAAE;EACjD,IAAI,CAAC,IAAI,CAACxvF,MAAM,EAAE;IAChB,IAAI,CAACsvF,MAAM,GAAG,CAAC,CAAC;IAChB,IAAI,CAACjoI,aAAa,CAAC;MAAE/gB,IAAI,EAAE,SAAS;MAAE+O,GAAG,EAAE,CAAC;IAAE,CAAC,CAAC;IAChD;EACF;EAEA,MAAM;IAAE2qD;EAAO,CAAC,GAAG,IAAI;EACvB,MAAMyvF,SAAS,GAAG,IAAInpH,oFAAe,CAAC,CAAC;EACvCmpH,SAAS,CAACtoF,GAAG,CAACG,MAAM,CAACm/E,qBAAqB,CAAC,IAAI,CAAChnF,MAAM,CAAC7C,WAAW,CAAC;EACnE6yF,SAAS,CAACtoF,GAAG,CAACnmD,SAAS,CAAC7c,GAAG,CAACqrJ,SAAS,CAACx7I,CAAC,EAAEw7I,SAAS,CAAC/2I,CAAC,EAAE,GAAG,CAAC,CAACi3I,SAAS,CAAC,IAAI,CAACjwF,MAAM,CAAC,CAACr6B,GAAG,CAACqqH,SAAS,CAACtoF,GAAG,CAACG,MAAM,CAAC,CAAClhC,SAAS,CAAC,CAAC;EAEvH,MAAMnO,SAAS,GAAIpxB,QAAQ,CAAC2d,GAAG,CAACwT,KAAK,CAACC,SAAS,IAAI,IAAI,CAACwjE,cAAc,GAAI,IAAI,CAACA,cAAc,GAAG9sE,QAAQ;EACxG,MAAMsxC,WAAW,GAAIp5D,QAAQ,CAAC2d,GAAG,CAAC8T,GAAG,IAAI,IAAI,CAACq3H,WAAW,GAAI,IAAI,CAACA,WAAW,GAAGhhI,QAAQ;EACxF,MAAMi3B,KAAK,GAAG6pG,SAAS,CAAC1vF,sBAAsB,CAACC,MAAM,EAAE,IAAI,CAACP,MAAM,EAAExnC,SAAS,EAAEgoC,WAAW,CAAC;EAC3F,IAAI,CAACra,KAAK,EAAE;IACV,IAAI,CAAC0pG,MAAM,GAAG,CAAC,CAAC;IAChB,IAAI,CAACjoI,aAAa,CAAC;MAAE/gB,IAAI,EAAE,SAAS;MAAE+O,GAAG,EAAE,CAAC;IAAE,CAAC,CAAC;IAChD;EACF;EAEA,IAAIi6I,MAAM,GAAG,CAAC,CAAC;EACf,IAAI1pG,KAAK,CAACrlB,OAAO,IAAIqlB,KAAK,CAAC5zB,IAAI,EAAE;IAC/B,MAAMuO,OAAO,GAAGqlB,KAAK,CAACrlB,OAAO,IAAIqlB,KAAK,CAAC5zB,IAAI,CAACuO,OAAO;IACnD,IAAI15B,QAAQ,CAAC2d,GAAG,CAAC+U,IAAI,KAAK,OAAO,EAAE;MACjC+1H,MAAM,GAAG;QAAEvoH,KAAK,EAAExG,OAAO,CAAC2H,QAAQ,CAAC;MAAE,CAAC;IACxC,CAAC,MAAM,IAAIrhC,QAAQ,CAAC2d,GAAG,CAAC+U,IAAI,KAAK,UAAU,EAAE;MAC3C+1H,MAAM,GAAG;QAAEl8F,QAAQ,EAAE7yB,OAAO,CAAC4H,WAAW,CAAC;MAAE,CAAC;IAC9C,CAAC,MAAM,IAAIyd,KAAK,CAACrlB,OAAO,IAAI15B,QAAQ,CAAC2d,GAAG,CAAC+U,IAAI,KAAK,SAAS,EAAE;MAC3D+1H,MAAM,GAAG;QAAE/uH;MAAQ,CAAC;IACtB,CAAC,MAAM,IAAIqlB,KAAK,CAAC5zB,IAAI,EAAE;MACrBs9H,MAAM,GAAG;QAAEt9H,IAAI,EAAE4zB,KAAK,CAAC5zB;MAAK,CAAC;IAC/B;EACF;EACA,IAAI,CAACs9H,MAAM,GAAGA,MAAM;EACpB,IAAI,CAACjoI,aAAa,CAAC;IAAE/gB,IAAI,EAAE,SAAS;IAAE+O,GAAG,EAAEi6I;EAAO,CAAC,CAAC;AACtD,CAAC;AAEDR,MAAM,CAACjlJ,SAAS,CAAC+lJ,kBAAkB,GAAG,UAAUlD,KAAK,EAAEC,KAAK,EAAE;EAC5D,OAAO,IAAIrmH,kFAAa,CACtB,CAAComH,KAAK,GAAG,IAAI,CAAC3C,MAAM,CAAC1oI,IAAI,IAAI,IAAI,CAAC0oI,MAAM,CAACrpI,KAAK,GAAG,CAAC,GAAG,CAAC,EACtD,EAAEisI,KAAK,GAAG,IAAI,CAAC5C,MAAM,CAAC3oI,GAAG,CAAC,GAAG,IAAI,CAAC2oI,MAAM,CAAChnI,MAAM,GAAG,CAAC,GAAG,CACxD,CAAC;AACH,CAAC;AAED+rI,MAAM,CAACjlJ,SAAS,CAACghJ,SAAS,GAAG,UAAUvjI,KAAK,EAAE;EAC5CA,KAAK,CAACmkI,cAAc,CAAC,CAAC;EACtBnkI,KAAK,CAACkkI,eAAe,CAAC,CAAC;EAEvB,IAAIlkI,KAAK,CAACmmI,MAAM,KAAK,CAAC,EAAE;IACtB,IAAI,CAACsB,aAAa,GAAG,IAAI,CAACa,kBAAkB,CAACtoI,KAAK,CAAColI,KAAK,EAAEplI,KAAK,CAACqlI,KAAK,CAAC;IACtE,IAAI,CAACqC,eAAe,GAAG,GAAG;IAC1B,IAAI,CAACG,eAAe,GAAG,IAAI,CAACzE,MAAM,CAACjmI,cAAc,CAAC,CAAC;EACrD;AACF,CAAC;AAEDqqI,MAAM,CAACjlJ,SAAS,CAACkhJ,SAAS,GAAG,UAAUzjI,KAAK,EAAE;EAC5CA,KAAK,CAACmkI,cAAc,CAAC,CAAC;EACtBnkI,KAAK,CAACkkI,eAAe,CAAC,CAAC;EAEvB,MAAM3zG,GAAG,GAAG,IAAI,CAAC+3G,kBAAkB,CAACtoI,KAAK,CAAColI,KAAK,EAAEplI,KAAK,CAACqlI,KAAK,CAAC;EAC7D,IAAI,CAACqC,eAAe,IAAIn3G,GAAG,CAACzS,GAAG,CAAC,IAAI,CAAC2pH,aAAa,CAAC,CAAChxJ,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED+wJ,MAAM,CAACjlJ,SAAS,CAACihJ,OAAO,GAAG,UAAUxjI,KAAK,EAAE;EAC1C,MAAMve,IAAI,GAAG,IAAI;EAEjBue,KAAK,CAACmkI,cAAc,CAAC,CAAC;EACtBnkI,KAAK,CAACkkI,eAAe,CAAC,CAAC;EAEvB,IAAIlkI,KAAK,CAACmmI,MAAM,KAAK,CAAC,EAAE;IACtB,IAAI,IAAI,CAACuB,eAAe,GAAG,IAAI,EAAE;MAC/B,MAAM5B,OAAO,GAAG,IAAI,CAAC1C,MAAM,CAACjmI,cAAc,CAAC,CAAC;MAC5C,MAAMorI,MAAM,GAAG,IAAI,CAACD,kBAAkB,CAACtoI,KAAK,CAAColI,KAAK,EAAEplI,KAAK,CAACqlI,KAAK,CAAC;MAEhE,MAAMmD,uBAAuB,GAAG1C,OAAO,GAAG,IAAI,CAAC6B,mBAAmB;MAClE,IAAIa,uBAAuB,GAAG,GAAG,EAAE;QACjC,MAAMC,SAAS,GAAG,IAAIzpH,kFAAa,CAAC,CAAC,CAAC0tC,UAAU,CAAC67E,MAAM,EAAE,IAAI,CAACX,aAAa,CAAC;QAC5E,IAAIa,SAAS,CAAChyJ,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE;UAC7B;UACA,IAAI,CAACspB,aAAa,CAAC;YAAE/gB,IAAI,EAAE,UAAU;YAAE+O,GAAG,EAAE,IAAI,CAACi6I;UAAO,CAAC,CAAC;UAE1D,IAAI,CAACJ,aAAa,GAAGW,MAAM;UAC3B,IAAI,CAACZ,mBAAmB,GAAG,CAAC,IAAI,CAAC,CAAC;UAClC;QACF;MACF;MAEArmC,UAAU,CAAC,MAAM;QACf7/G,IAAI,CAACwmJ,UAAU,CAACM,MAAM,CAAC;MACzB,CAAC,EAAE,CAAC,CAAC;MAEL,IAAI,CAACX,aAAa,GAAGW,MAAM;MAC3B,IAAI,CAACZ,mBAAmB,GAAG,IAAI,CAACE,eAAe;IACjD;EACF;AACF,CAAC;AAEDL,MAAM,CAACjlJ,SAAS,CAACulJ,UAAU,GAAG,UAAU9nI,KAAK,EAAE;EAC7CA,KAAK,CAACmkI,cAAc,CAAC,CAAC;EACtBnkI,KAAK,CAACkkI,eAAe,CAAC,CAAC;EAEvB,IAAIlkI,KAAK,CAAC2mI,OAAO,CAAClwJ,MAAM,KAAK,CAAC,EAAE;IAC9B,IAAI,CAACiyJ,iBAAiB,GAAG,IAAI,CAACJ,kBAAkB,CAACtoI,KAAK,CAAC2mI,OAAO,CAAC,CAAC,CAAC,CAACvB,KAAK,EAAEplI,KAAK,CAAC2mI,OAAO,CAAC,CAAC,CAAC,CAACtB,KAAK,CAAC;EAClG;AACF,CAAC;AAEDmC,MAAM,CAACjlJ,SAAS,CAACwlJ,QAAQ,GAAG,UAAU/nI,KAAK,EAAE;EAC3C,MAAMve,IAAI,GAAG,IAAI;EAEjBue,KAAK,CAACmkI,cAAc,CAAC,CAAC;EACtBnkI,KAAK,CAACkkI,eAAe,CAAC,CAAC;EAEvB,IAAIlkI,KAAK,CAAC2mI,OAAO,CAAClwJ,MAAM,KAAK,CAAC,IACrBupB,KAAK,CAAC2oI,cAAc,CAAClyJ,MAAM,KAAK,CAAC,EAAE;IAC1C,MAAM85C,GAAG,GAAG,IAAI,CAAC+3G,kBAAkB,CAACtoI,KAAK,CAAC2oI,cAAc,CAAC,CAAC,CAAC,CAACvD,KAAK,EAAEplI,KAAK,CAAC2oI,cAAc,CAAC,CAAC,CAAC,CAACtD,KAAK,CAAC;IACjG,MAAMjlG,IAAI,GAAG7P,GAAG,CAACzS,GAAG,CAAC,IAAI,CAAC4qH,iBAAiB,CAAC,CAACjyJ,MAAM,CAAC,CAAC;IACrD,IAAI2pD,IAAI,GAAG,IAAI,EAAE;MACfkhE,UAAU,CAAC,MAAM;QACf7/G,IAAI,CAACwmJ,UAAU,CAACxmJ,IAAI,CAACinJ,iBAAiB,CAAC;MACzC,CAAC,EAAE,CAAC,CAAC;IACP;EACF;AACF,CAAC;AAEDlB,MAAM,CAACjlJ,SAAS,CAAC05D,OAAO,GAAG,YAAY;EACrC,KAAK,IAAIz9D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC8kJ,UAAU,CAAC7sJ,MAAM,EAAE+H,CAAC,EAAE,EAAE;IAC/C,MAAMhI,CAAC,GAAG,IAAI,CAAC8sJ,UAAU,CAAC9kJ,CAAC,CAAC;IAC5BhI,CAAC,CAACuX,GAAG,CAAC2R,mBAAmB,CAAClpB,CAAC,CAACwI,IAAI,EAAExI,CAAC,CAACmpB,OAAO,CAAC;EAC9C;AACF,CAAC;AAED,gDAAe6nI,MAAM;;ACzOU;AAE/B,MAAMoB,IAAI,CAAC;EACT9+I,WAAWA,CAACsQ,MAAM,EAAEyuI,YAAY,EAAE;IAChC,IAAI,CAACC,OAAO,GAAG1uI,MAAM;IACrB,IAAI,CAAC2uI,aAAa,GAAGF,YAAY;IACjC,IAAI,CAACzyF,OAAO,GAAG,IAAIp3B,4FAAuB,CAAC6pH,YAAY,CAACjxF,GAAG,EAAEixF,YAAY,CAAClxF,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC;IACzF,IAAI,CAACqxF,OAAO,GAAG,IAAIhqH,qFAAgB,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC+2B,MAAM,GAAG,IAAI/2B,gFAAW,CAAC,CAAC;IAC/B,IAAI,CAAC+2B,MAAM,CAACp2D,GAAG,CAAC,IAAI,CAACqpJ,OAAO,CAAC;IAC7B,IAAI,CAACE,KAAK,GAAG,IAAIlqH,kFAAa,CAAC,CAAC;IAEhC,IAAI,CAAC65D,OAAO,CAAC,CAAC;EAChB;EAEAA,OAAOA,CAAA,EAAG;IACR,MAAM;MAAEjhC;IAAI,CAAC,GAAG,IAAI,CAACmxF,aAAa;IAClC,MAAM5wF,MAAM,GAAG,IAAI,CAAC/B,OAAO;IAC3B+B,MAAM,CAACR,MAAM,GAAG,IAAI,CAACoxF,aAAa,CAACpxF,MAAM;IACzCQ,MAAM,CAACV,aAAa,CAACG,GAAG,CAAC;IACzBO,MAAM,CAACI,gBAAgB,CAAC,GAAG,EAAEX,GAAG,CAAC;IACjCO,MAAM,CAACG,sBAAsB,CAAC,CAAC;IAE/B,IAAI,CAAC0wF,OAAO,CAACh0F,UAAU,CAAChnD,IAAI,CAAC,IAAI,CAAC86I,OAAO,CAAC9zF,UAAU,CAAC;EACvD;EAEAsB,MAAMA,CAACq8B,QAAQ,EAAE;IACf,IAAI,CAACkG,OAAO,CAAC,CAAC;IAEdlG,QAAQ,CAACl1C,OAAO,CAAC,IAAI,CAACyrG,KAAK,CAAC;IAC5B,MAAM9vI,KAAK,GAAG,IAAI,CAAC8vI,KAAK,CAAC9vI,KAAK,GAAG,IAAI;IACrC,MAAMqC,MAAM,GAAG,IAAI,CAACytI,KAAK,CAACztI,MAAM,GAAG,IAAI;IAEvC,MAAM;MAAE0tI;IAAU,CAAC,GAAGx2D,QAAQ;IAC9BA,QAAQ,CAACw2D,SAAS,GAAG,KAAK;IAC1Bx2D,QAAQ,CAACy2D,WAAW,CAAC,GAAG,EAAE,GAAG,EAAEhwI,KAAK,EAAEqC,MAAM,CAAC;IAC7Ck3E,QAAQ,CAACjzF,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;IAClCizF,QAAQ,CAACr8B,MAAM,CAAC,IAAI,CAACP,MAAM,EAAE,IAAI,CAACK,OAAO,CAAC;IAC1Cu8B,QAAQ,CAACy2D,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAACF,KAAK,CAAC9vI,KAAK,EAAE,IAAI,CAAC8vI,KAAK,CAACztI,MAAM,CAAC;IAC/Dk3E,QAAQ,CAACw2D,SAAS,GAAGA,SAAS;EAChC;AACF;AACA,+CAAeP,IAAI;;AC1CY;AAC8C;AAE7E,MAAMS,WAAW,GAAG,EAAE;AACtB,MAAMC,UAAU,GAAG,UAAU;AAC7B,MAAMC,WAAW,GAAG,CAAC;AACrB,MAAMC,SAAS,GAAG,UAAU;AAC5B,MAAMC,UAAU,GAAG,EAAE;AACrB,MAAMC,SAAS,GAAG,UAAU;AAC5B,MAAMC,UAAU,GAAG,EAAE;AACrB,MAAMC,UAAU,GAAG,UAAU;AAC7B,MAAMC,QAAQ,GAAG,UAAU;AAC3B,MAAMC,SAAS,GAAG,EAAE;AACpB,MAAMC,IAAI,GAAG,CAAC,IAAI,EAAE;AACpB,MAAMC,IAAI,GAAG,CAAC,IAAI,EAAE;AAEpB,MAAMC,SAAS,GAAG,CAAC;AACnB,MAAMC,SAAS,GAAG,CAAC;AACnB,MAAMC,QAAQ,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;AACpC,MAAMC,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAE1C,SAASC,gBAAgBA,CAACC,QAAQ,EAAElpH,OAAO,EAAE;EAC3C,MAAM2G,QAAQ,GAAG3G,OAAO,CAACoG,SAAS;EAClC,MAAM+iH,IAAI,GAAGxiH,QAAQ,CAACtxC,MAAM;EAC5B,MAAM+zJ,KAAK,GAAG,IAAI16I,UAAU,CAACy6I,IAAI,CAAC;EAElC,MAAMhrH,KAAK,GAAG6B,OAAO,CAACrB,MAAM;EAC5B,KAAK,IAAIvhC,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAG6rJ,QAAQ,CAAC7zJ,MAAM,EAAE+H,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;IAC/C,MAAMksB,IAAI,GAAG6U,KAAK,CAAC/gC,CAAC,CAAC;IACrBgsJ,KAAK,CAAC9/H,IAAI,CAACuO,OAAO,CAAC7a,MAAM,CAAC,GAAGksI,QAAQ,CAAC9rJ,CAAC,CAAC;EAC1C;EAEA,MAAMm5G,SAAS,GAAG,EAAE;EACpB,IAAI8yC,IAAI,GAAG,CAAC;EACZ,OAAOA,IAAI,GAAGF,IAAI,EAAE;IAClB,IAAIC,KAAK,CAACC,IAAI,CAAC,KAAK,CAAC,EAAE;MACrB,MAAMxtI,KAAK,GAAGwtI,IAAI;MAClB,MAAMrqJ,GAAG,GAAGoqJ,KAAK,CAACC,IAAI,CAAC;MACvB,OAAOA,IAAI,GAAGF,IAAI,GAAG,CAAC,IAAIC,KAAK,CAACC,IAAI,GAAG,CAAC,CAAC,KAAKrqJ,GAAG,IAC9C2nC,QAAQ,CAAC0iH,IAAI,CAAC,CAAC9mH,WAAW,CAACoE,QAAQ,CAAC0iH,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;QACjD,EAAEA,IAAI;MACR;MACA9yC,SAAS,CAAC/0G,IAAI,CAAC;QAAEqa,KAAK;QAAEZ,GAAG,EAAEouI,IAAI;QAAEzrJ,IAAI,EAAEmrJ,QAAQ,CAAC/pJ,GAAG,GAAG,CAAC;MAAE,CAAC,CAAC;IAC/D;IACA,EAAEqqJ,IAAI;EACR;EACA,OAAO9yC,SAAS;AAClB;AAEA,SAAS+yC,iBAAiBA,CAACC,MAAM,EAAE;EACjC,OAAOA,MAAM,IAAIZ,IAAI,GAAGY,MAAM,GAAGX,IAAI,GAAGW,MAAM;AAChD;AAEA,MAAMC,SAAS,CAAC;EACd9gJ,WAAWA,CAACs3B,OAAO,EAAEypH,OAAO,EAAEC,SAAS,EAAE;IACvC,IAAI,CAACvjH,QAAQ,GAAGnG,OAAO;IACvB,IAAI,CAACpB,UAAU,GAAG,IAAI;IACtB,IAAI,CAAC+qH,SAAS,GAAG,KAAK;IACtB,IAAI,CAACC,YAAY,GAAG;MAClB/tI,KAAK,EAAE,CAAC;MACRZ,GAAG,EAAE,CAAC;IACR,CAAC;IACD,IAAI,CAAC4uI,YAAY,GAAG,KAAK;IACzB,IAAI,CAACnlB,OAAO,GAAG,IAAI;IACnB,IAAI,CAAColB,aAAa,GAAG,IAAI;IACzB,IAAI,CAACC,UAAU,GAAGL,SAAS;IAC3B,IAAI,OAAOD,OAAO,KAAK,UAAU,EAAE;MACjC,IAAI,CAACO,oBAAoB,GAAG,CAAC;MAC7B,IAAI,CAACC,eAAe,GAAGR,OAAO;IAChC,CAAC,MAAM;MACL,IAAI,CAACS,eAAe,CAACT,OAAO,EAAE,IAAI,CAAC;IACrC;IACA,IAAI,CAAC5uJ,KAAK,CAAC,CAAC;IACZ,IAAI,CAACsvJ,QAAQ,CAAC,CAAC,CAAC;EAClB;EAEAC,cAAcA,CAACC,WAAW,EAAEC,SAAS,EAAE;IACrC,IAAID,WAAW,KAAKxwI,SAAS,IAAIwwI,WAAW,KAAK,IAAI,EAAE;MACrDA,WAAW,GAAG,CAAC;IACjB;IACA,IAAIC,SAAS,KAAKzwI,SAAS,IAAIywI,SAAS,KAAK,IAAI,EAAE;MACjDA,SAAS,GAAGD,WAAW,GAAG,IAAI,CAACL,oBAAoB;IACrD;IACA,IAAI,IAAI,CAACO,YAAY,KAAK1wI,SAAS,EAAE;MACnCywI,SAAS,GAAG/sJ,IAAI,CAACuM,GAAG,CAAC,IAAI,CAACygJ,YAAY,GAAG,CAAC,EAAED,SAAS,CAAC;IACxD;IACA,IAAI,IAAI,CAACL,eAAe,EAAE;MACxB,MAAM5pJ,IAAI,GAAG,IAAI;MACjB,MAAMmqJ,MAAM,GAAG,SAAAA,CAAUhjI,IAAI,EAAE;QAC7BnnB,IAAI,CAACspJ,SAAS,GAAG,KAAK;QACtB,IAAItpJ,IAAI,CAAC0pJ,UAAU,IAAI,OAAO1pJ,IAAI,CAAC0pJ,UAAU,CAACU,mBAAmB,KAAK,UAAU,EAAE;UAChFpqJ,IAAI,CAAC0pJ,UAAU,CAACU,mBAAmB,CAAC,CAAC;QACvC;QACApqJ,IAAI,CAACqkI,OAAO,GAAG;UACbl9G,IAAI;UACJtlB,KAAK,EAAE,OAAO;UACd2Z,KAAK,EAAEwuI,WAAW;UAClBpvI,GAAG,EAAEqvI;QACP,CAAC;QACD,IAAIjqJ,IAAI,CAACypJ,aAAa,KAAK,IAAI,EAAE;UAC/B,MAAM/vI,GAAG,GAAG1Z,IAAI,CAACypJ,aAAa;UAC9BzpJ,IAAI,CAACypJ,aAAa,GAAG,IAAI;UACzBzpJ,IAAI,CAAC8pJ,QAAQ,CAACpwI,GAAG,CAAC;QACpB;MACF,CAAC;MACD,MAAM2wI,MAAM,GAAG,SAAAA,CAAA,EAAY;QACzBrqJ,IAAI,CAACspJ,SAAS,GAAG,KAAK;QACtB,IAAItpJ,IAAI,CAAC0pJ,UAAU,IAAI,OAAO1pJ,IAAI,CAAC0pJ,UAAU,CAACY,OAAO,KAAK,UAAU,EAAE;UACpEtqJ,IAAI,CAAC0pJ,UAAU,CAACY,OAAO,CAAC,kBAAkB,CAAC;QAC7C;MACF,CAAC;MACD,IAAI,CAAC,IAAI,CAACjmB,OAAO,EAAE;QACjB,IAAI,CAACA,OAAO,GAAG,CAAC,CAAC;MACnB;MACA,IAAI,CAACA,OAAO,CAACxiI,KAAK,GAAG,aAAa;MAClC,IAAI,CAACynJ,SAAS,GAAG,IAAI;MACrB,IAAItpJ,IAAI,CAAC0pJ,UAAU,IAAI,OAAO1pJ,IAAI,CAAC0pJ,UAAU,CAACU,mBAAmB,KAAK,UAAU,EAAE;QAChFpqJ,IAAI,CAAC0pJ,UAAU,CAACU,mBAAmB,CAAC,CAAC;MACvC;MACA,IAAI,CAACR,eAAe,CAAC;QAAEpuI,KAAK,EAAEwuI,WAAW;QAAEpvI,GAAG,EAAEqvI,SAAS,GAAG;MAAE,CAAC,EAAEE,MAAM,EAAEE,MAAM,CAAC;IAClF;EACF;EAEAE,YAAYA,CAAA,EAAG;IACb,IAAI,IAAI,CAAClmB,OAAO,IAAI,IAAI,CAACA,OAAO,CAACxiI,KAAK,KAAK,OAAO,EAAE;MAClD,IAAI,CAAC0nJ,YAAY,GAAG;QAClB/tI,KAAK,EAAE,IAAI,CAAC6oH,OAAO,CAAC7oH,KAAK;QACzBZ,GAAG,EAAE,IAAI,CAACypH,OAAO,CAACzpH;MACpB,CAAC;MACD,IAAI,CAACivI,eAAe,CAAC,IAAI,CAACxlB,OAAO,CAACl9G,IAAI,EAAE,KAAK,CAAC;MAC9C,IAAIqjI,mBAAmB,GAAG,CAAC,IAAI,CAACnmB,OAAO,CAACzpH,GAAG,GAAG,CAAC,IAAI,IAAI,CAACsvI,YAAY;MACpE,IAAIM,mBAAmB,IAAI,IAAI,CAACN,YAAY,EAAE;QAC5CM,mBAAmB,GAAG,CAAC;MACzB;MACA,IAAI,CAACnmB,OAAO,GAAG;QACbxiI,KAAK,EAAE;MACT,CAAC;MACD,IAAI,CAACkoJ,cAAc,CAACS,mBAAmB,EAAEA,mBAAmB,GAAG,IAAI,CAACb,oBAAoB,CAAC;MACzF,IAAI,IAAI,CAACF,aAAa,KAAK,IAAI,EAAE;QAC/B,MAAM/vI,GAAG,GAAG,IAAI,CAAC+vI,aAAa;QAC9B,IAAI,CAACA,aAAa,GAAG,IAAI;QACzB,IAAI,CAACK,QAAQ,CAACpwI,GAAG,CAAC;MACpB;IACF;EACF;EAEAmwI,eAAeA,CAACY,WAAW,EAAE;IAC3B,MAAMC,QAAQ,GAAG,IAAI37I,QAAQ,CAAC07I,WAAW,CAAC;IAC1C,IAAIhnJ,MAAM,GAAG,CAAC;IACd,MAAMknJ,UAAU,GAAGD,QAAQ,CAAC/3I,SAAS,CAAClP,MAAM,EAAE,IAAI,CAAC;IACnDA,MAAM,IAAI,CAAC;IACX,MAAMmnJ,WAAW,GAAGF,QAAQ,CAAC/3I,SAAS,CAAClP,MAAM,EAAE,IAAI,CAAC;IACpD,IAAI,CAACymJ,YAAY,GAAGU,WAAW;IAC/B,IAAI,CAACrB,YAAY,CAAC3uI,GAAG,GAAG,IAAI,CAAC2uI,YAAY,CAAC3uI,GAAG,GAAG,CAAC,GAC7C1d,IAAI,CAACuM,GAAG,CAAC,IAAI,CAAC8/I,YAAY,CAAC3uI,GAAG,EAAEgwI,WAAW,GAAG,CAAC,CAAC,GAAGA,WAAW,GAAG,CAAC;IACtEnnJ,MAAM,IAAI,CAAC;IACX,IAAI,CAAConJ,WAAW,GAAGF,UAAU;IAC7B,MAAMG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IAC7B,IAAI,CAACnB,oBAAoB,GAAGzsJ,IAAI,CAAC8S,IAAI,CAAC86I,OAAO,IAAIH,UAAU,GAAG,CAAC,CAAC,CAAC;IACjE,MAAMI,kBAAkB,GAAG,IAAI,CAACxB,YAAY,CAAC3uI,GAAG,GAAG,IAAI,CAAC2uI,YAAY,CAAC/tI,KAAK,GAAG,CAAC;IAC9E,IAAImvI,UAAU,KAAK,IAAI,CAAC7kH,QAAQ,CAACxH,MAAM,CAACtpC,MAAM,IACzCy1J,WAAW,CAAC18I,UAAU,KAAK65I,WAAW,GAAGmD,kBAAkB,GAAGJ,UAAU,GAAG,CAAC,EAAE;MACjF,MAAM,IAAI7qJ,KAAK,CAAC,CAAC;IACnB;IACA,MAAM6/B,OAAO,GAAG,IAAI,CAACmG,QAAQ;IAC7B,IAAIklH,QAAQ,GAAGN,QAAQ,CAAC/3I,SAAS,CAAClP,MAAM,EAAE,IAAI,CAAC;IAC/C,IAAIwnJ,KAAK,GAAG,CAAC;IACb,OAAOD,QAAQ,GAAG,IAAI,IAAIC,KAAK,GAAGtC,SAAS,CAAC3zJ,MAAM,GAAG,CAAC,EAAE;MACtDg2J,QAAQ,IAAI,IAAI;MAChB,EAAEC,KAAK;IACT;IAEA,IAAI,CAACC,SAAS,GAAG,GAAGF,QAAQ,CAAChwJ,QAAQ,CAAC,CAAC,IAAI2tJ,SAAS,CAACsC,KAAK,CAAC,EAAE;IAC7DxnJ,MAAM,IAAI,CAAC;IACX,MAAMyyG,SAAS,GAAG,EAAE;IACpB,MAAMi1C,OAAO,GAAG,IAAIh8I,YAAY,CAAC47I,kBAAkB,GAAGJ,UAAU,GAAG,CAAC,CAAC;IACrE,IAAIS,QAAQ,GAAG,CAAC;IAChB,MAAMC,YAAY,GAAG,IAAIp8I,SAAS,CAAC07I,UAAU,CAAC;IAC9C,KAAK,IAAIh6I,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGo6I,kBAAkB,EAAE,EAAEp6I,CAAC,EAAE;MAC3C,KAAK,IAAI5T,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4tJ,UAAU,EAAE,EAAE5tJ,CAAC,EAAE;QACnC,MAAMuuJ,MAAM,GAAGZ,QAAQ,CAAC/3I,SAAS,CAAClP,MAAM,EAAE,IAAI,CAAC;QAC/CA,MAAM,IAAI,CAAC;QACX,MAAM8nJ,MAAM,GAAGb,QAAQ,CAAC/3I,SAAS,CAAClP,MAAM,EAAE,IAAI,CAAC;QAC/CA,MAAM,IAAI,CAAC;QACX,MAAM/D,GAAG,GAAG,CAAC6rJ,MAAM,GAAGnD,QAAQ,MAAMC,SAAS;QAC7C,MAAMp9I,CAAC,GAAGg+I,iBAAiB,CAAE,CAACsC,MAAM,GAAG1D,UAAU,MAAMC,WAAW,IAAK,CAAC,CAAC;QACzE,MAAMp4I,CAAC,GAAGu5I,iBAAiB,CAAC,CAAE,CAACsC,MAAM,GAAGxD,SAAS,KAAKC,UAAU,GAC3D,CAACsD,MAAM,GAAGrD,SAAS,MAAMC,UAAW,KAAK,CAAC,CAAC;QAChD,MAAMn3I,CAAC,GAAGk4I,iBAAiB,CAAC,CAACqC,MAAM,GAAGnD,UAAU,KAAK,CAAC,CAAC;QACvDkD,YAAY,CAACtuJ,CAAC,CAAC,GAAG,CAAC;QACnB,IAAI2C,GAAG,GAAG,CAAC,IAAIA,GAAG,GAAG,CAAC,EAAE;UACtB2rJ,YAAY,CAACtuJ,CAAC,CAAC,GAAGyrJ,SAAS;QAC7B,CAAC,MAAM,IAAI9oJ,GAAG,KAAK,CAAC,EAAE;UACpB2rJ,YAAY,CAACtuJ,CAAC,CAAC,GAAG0rJ,SAAS;QAC7B;QACA0C,OAAO,CAACC,QAAQ,EAAE,CAAC,GAAGngJ,CAAC,GAAG,GAAG;QAC7BkgJ,OAAO,CAACC,QAAQ,EAAE,CAAC,GAAG17I,CAAC,GAAG,GAAG;QAC7By7I,OAAO,CAACC,QAAQ,EAAE,CAAC,GAAGr6I,CAAC,GAAG,GAAG;MAC/B;MACAmlG,SAAS,CAAC/0G,IAAI,CAACynJ,gBAAgB,CAACyC,YAAY,EAAE1rH,OAAO,CAAC,CAAC;IACzD;IACA,IAAI,CAAC6rH,cAAc,GAAGt1C,SAAS;IAC/B,IAAI,CAACznD,KAAK,GAAG08F,OAAO;EACtB;EAEAM,SAASA,CAAA,EAAG;IACV,IAAI,CAAC3B,QAAQ,CAAC,CAAC,IAAI,CAAC4B,UAAU,GAAG,CAAC,IAAI,IAAI,CAACxB,YAAY,CAAC;EAC1D;EAEA9sD,gBAAgBA,CAAC9+F,OAAO,EAAE;IACxB,OAAOA,OAAO,YAAY23G,kCAAyB;EACrD;EAEA/Y,YAAYA,CAAC5+F,OAAO,EAAE2qB,IAAI,EAAE;IAC1B,OAAO3qB,OAAO,CAAC+iG,eAAe,CAAC,IAAI,CAACt7D,SAAS,CAAC9c,IAAI,CAACuO,OAAO,CAAC7a,MAAM,CAAC,EAAE,IAAI,CAACmpB,QAAQ,CAAC;EACpF;EAEAu7D,eAAeA,CAAC/iG,OAAO,EAAEk5B,OAAO,EAAE;IAChC,OAAOl5B,OAAO,CAAC+iG,eAAe,CAAC,IAAI,CAACt7D,SAAS,CAACvO,OAAO,CAAC7a,MAAM,CAAC,EAAE,IAAI,CAACmpB,QAAQ,CAAC;EAC/E;EAEA6lH,gBAAgBA,CAAA,EAAG;IACjB,IAAI5uJ,CAAC;IACL,MAAM6uJ,UAAU,GAAG,IAAI,CAAC7lH,SAAS;IACjC,IAAI/oC,CAAC,GAAG4uJ,UAAU,CAAC52J,MAAM;IACzB,KAAK+H,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;MACtB6uJ,UAAU,CAAC7uJ,CAAC,CAAC,CAACwhC,UAAU,GAAG,IAAI;IACjC;IACA,MAAMstH,GAAG,GAAG,IAAI,CAACL,cAAc,CAAC,IAAI,CAACE,UAAU,GAAG,IAAI,CAACnC,YAAY,CAAC/tI,KAAK,CAAC;IAC1E,KAAKze,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAG6uJ,GAAG,CAAC72J,MAAM,EAAE+H,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;MACtC,MAAM+uJ,MAAM,GAAGD,GAAG,CAAC9uJ,CAAC,CAAC;MACrB,MAAM;QAAEye,KAAK;QAAEZ;MAAI,CAAC,GAAGkxI,MAAM;MAC7B,MAAMC,IAAI,GAAG;QACX1/B,MAAM,EAAEu/B,UAAU,CAACpwI,KAAK,CAAC;QACzBixG,IAAI,EAAEm/B,UAAU,CAAChxI,GAAG,CAAC;QACrBrd,IAAI,EAAEuuJ,MAAM,CAACvuJ,IAAI;QACjBiqC,OAAO,EAAEskH,MAAM,CAACtkH;MAClB,CAAC;MACD,KAAK,IAAI72B,CAAC,GAAG6K,KAAK,EAAE7K,CAAC,IAAIiK,GAAG,EAAE,EAAEjK,CAAC,EAAE;QACjCi7I,UAAU,CAACj7I,CAAC,CAAC,CAAC4tB,UAAU,GAAGwtH,IAAI;MACjC;IACF;EACF;EAEAvxJ,KAAKA,CAAA,EAAG;IACN,MAAMwxJ,OAAO,GAAG,IAAI,CAAClmH,QAAQ,CAACC,SAAS;IACvC,MAAM/oC,CAAC,GAAGgvJ,OAAO,CAACh3J,MAAM;IACxB,IAAI,CAAC+wC,SAAS,GAAG,IAAI1nC,KAAK,CAACrB,CAAC,CAAC;IAC7B,MAAM4uJ,UAAU,GAAG,IAAI,CAAC7lH,SAAS;IACjC,MAAMkmH,MAAM,GAAG,SAAAA,CAAA,EAAY;MACzB,OAAO,IAAI,CAAC1tH,UAAU;IACxB,CAAC;IACD,KAAK,IAAIxhC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;MAC1B6uJ,UAAU,CAAC7uJ,CAAC,CAAC,GAAG;QACdk+B,KAAK,EAAE+wH,OAAO,CAACjvJ,CAAC,CAAC,CAACk+B,KAAK;QACvB+D,QAAQ,EAAEgtH,OAAO,CAACjvJ,CAAC,CAAC,CAACiiC,QAAQ;QAC7BJ,aAAa,EAAE,IAAI;QACnBE,WAAW,EAAE,IAAI;QACjBP,UAAU,EAAE,IAAI;QAChBe,YAAY,EAAE2sH;MAChB,CAAC;IACH;EACF;EAEAnC,QAAQA,CAACoC,QAAQ,EAAE;IACjB,IAAI,CAAC1C,YAAY,GAAG,KAAK;IACzB,IAAI0C,QAAQ,IAAI,IAAI,CAAC3C,YAAY,CAAC/tI,KAAK,IAAI0wI,QAAQ,IAAI,IAAI,CAAC3C,YAAY,CAAC3uI,GAAG,EAAE;MAC5E,IAAI,CAAC8wI,UAAU,GAAGQ,QAAQ;MAC1B,IAAI,CAACC,eAAe,GAAG,KAAK;MAC5B,IAAI,CAACR,gBAAgB,CAAC,CAAC;MACvB,IAAI,CAACnC,YAAY,GAAG,IAAI;IAC1B,CAAC,MAAM;MACL,IAAI,CAACC,aAAa,GAAGyC,QAAQ;MAC7B,IAAI,CAAC,IAAI,CAAC7nB,OAAO,EAAE;QACjB,IAAI,CAAC0lB,cAAc,CAACmC,QAAQ,CAAC;MAC/B,CAAC,MAAM;QACL,MAAMlsJ,IAAI,GAAG,IAAI;QACjB,QAAQ,IAAI,CAACqkI,OAAO,CAACxiI,KAAK;UACxB,KAAK,MAAM;YACT,IAAI,CAACkoJ,cAAc,CAACmC,QAAQ,CAAC;YAC7B;UACF,KAAK,OAAO;YACVlsJ,IAAI,CAACuqJ,YAAY,CAAC,CAAC;YACnB;UACF;YACE;QACJ;MACF;IACF;EACF;EAEA6B,aAAaA,CAAA,EAAG;IACd,IAAI,CAAC1C,UAAU,GAAG,IAAI;EACxB;;EAEA;AACF;AACA;;EAEE,OAAO2C,IAAI,UAAG,IAAI9uH,kFAAa,CAAC,CAAC;EAEjC/C,UAAUA,CAACy8C,OAAO,EAAE;IAClB,MAAMq1E,GAAG,GAAGnD,SAAS,CAACkD,IAAI;IAC1B,MAAMrsJ,IAAI,GAAG,IAAI;IACjB,MAAMmnB,IAAI,GAAGnnB,IAAI,CAACyuD,KAAK;IACvB,MAAM/0C,GAAG,GAAG,CAAC1Z,IAAI,CAAC6qJ,WAAW,IAAI7qJ,IAAI,CAAC0rJ,UAAU,GAAG1rJ,IAAI,CAACupJ,YAAY,CAAC/tI,KAAK,CAAC,GAAGy7D,OAAO,IAAI,CAAC;IAC1Fq1E,GAAG,CAAClxJ,GAAG,CAAC+rB,IAAI,CAACzN,GAAG,CAAC,EAAEyN,IAAI,CAACzN,GAAG,GAAG,CAAC,CAAC,EAAEyN,IAAI,CAACzN,GAAG,GAAG,CAAC,CAAC,CAAC;IAChD,OAAO4yI,GAAG;EACZ;EAEAlmH,WAAWA,CAAA,EAAG;IACZ,IAAI,IAAI,CAAC+lH,eAAe,EAAE;MACxB,OAAO,IAAI,CAACpmH,SAAS;IACvB;IACA,IAAI,CAACD,QAAQ,CAACa,aAAa,CAAC,IAAI,CAAC;IACjC,OAAO,IAAI,CAACZ,SAAS;EACvB;AACF;AACA,oDAAeojH,SAAS;;AC9TD;AACe;AACN;AACG;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMoD,WAAW,CAAC;EAChBlkJ,WAAWA,CAAC7K,MAAM,EAAEC,IAAI,EAAE;IACxB,IAAI,IAAI,CAAC4K,WAAW,KAAKkkJ,WAAW,EAAE;MACpC,MAAM,IAAIzsJ,KAAK,CAAC,qCAAqC,CAAC;IACxD;IACA;AACJ;AACA;AACA;IACI,IAAI,CAACtC,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,IAAI,GAAGc,uFAAO,CAACzD,KAAK,CAAConB,UAAU,CAACpkB,QAAQ,CAAC2d,GAAG,CAACoT,OAAO,CAAC,IAAI,CAACtxB,IAAI,CAAC,EAAE,IAAI,CAAC,EAAEE,IAAI,CAAC;IAClF,IAAI,CAAC27G,YAAY,GAAG,KAAK;IACzB,IAAI,CAAC1c,KAAK,GAAG,IAAI;IACjB,IAAI,CAACxgF,EAAE,GAAG,IAAI;EAChB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE8uF,QAAQA,CAAA,EAAG;IACT,MAAMnqF,MAAM,GAAG;MACbtjB,IAAI,EAAE,IAAI,CAACA,IAAI;MACfC,MAAM,EAAE,IAAI,CAACA;IACf,CAAC;IACD,MAAMmnB,IAAI,GAAG7pB,KAAK,CAAC0pB,WAAW,CAAC,IAAI,CAAC/mB,IAAI,EAAEK,QAAQ,CAAC2d,GAAG,CAACsN,KAAK,CAAC,IAAI,CAAC7M,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC3d,yFAAS,CAAComB,IAAI,CAAC,EAAE;MACpB9D,MAAM,CAACpjB,IAAI,GAAGknB,IAAI;IACpB;IACA,OAAO9D,MAAM;EACf;EAEA7lB,QAAQA,CAAA,EAAG;IACT,MAAMwxJ,SAAS,GAAG,KAAK,IAAI,CAACjvJ,IAAI,IAAI,IAAI,CAACC,MAAM,CAACgF,IAAI,CAAC,GAAG,CAAC,EAAE;IAC3D,MAAM4hB,OAAO,GAAGtpB,KAAK,CAACopB,0BAA0B,CAAC,IAAI,CAACzmB,IAAI,EAAEK,QAAQ,CAAC4Z,QAAQ,CAACmX,OAAO,CAAC,IAAI,CAACtxB,IAAI,CAAC,CAAC;IACjG,OAAOivJ,SAAS,GAAGpoI,OAAO;EAC5B;EAEAqoI,WAAWA,CAAA,EAAG;IACZ,OAAO,IAAI,CAAC/vD,KAAK;EACnB;EAEA/pD,OAAOA,CAAA,EAAG;IACR,IAAI,IAAI,CAAC+pD,KAAK,EAAE;MACdjgC,QAAQ,CAAChC,aAAa,CAAC,IAAI,CAACiiC,KAAK,CAAC;IACpC;EACF;AACF;;AAEA;AACA;AACA;AACA;AACA6vD,WAAW,CAACzrJ,SAAS,CAACvD,IAAI,GAAG,IAAI;AAEjC,0DAAegvJ,WAAW;;AC7EK;AACS;AACH;AACc;AACb;AACA;AAEtC,MAAMG,QAAQ,SAASH,mBAAW,CAAC;EACjClkJ,WAAWA,CAAC7K,MAAM,EAAEC,IAAI,EAAE;IACxB,KAAK,CAACD,MAAM,EAAEC,IAAI,CAAC;IACnB,IAAID,MAAM,CAACxI,MAAM,GAAG,CAAC,EAAE;MACrB,MAAM,IAAI8K,KAAK,CAAC,mDAAmD,CAAC;IACtE;IACA,CAAC,IAAI,CAAC6sJ,IAAI,EAAE,IAAI,CAACC,IAAI,CAAC,GAAGpvJ,MAAM;EACjC;EAEAqvJ,gBAAgBA,CAACltH,OAAO,EAAE3qB,MAAM,EAAE;IAChC,MAAM83I,GAAG,GAAG,gGAAgG;IAC5G,MAAM1lD,KAAK,GAAGznE,OAAO,CAAC+nB,iBAAiB,CAAC1yC,MAAM,CAAC;IAC/C,IAAI,CAACoyF,KAAK,EAAE;MACV,MAAM,IAAItnG,KAAK,CAACkV,MAAM,GAAG83I,GAAG,CAAC;IAC/B;IACA,OAAO1lD,KAAK;EACd;EAEAjxD,KAAKA,CAACxW,OAAO,EAAE;IACb,MAAM6gC,IAAI,GAAG,IAAIjjC,yFAAoB,CAAC,CAAC;IACvC,IAAI,CAACwvH,MAAM,GAAG,IAAI,CAACF,gBAAgB,CAACltH,OAAO,EAAE,IAAI,CAACgtH,IAAI,CAAC;IACvD,IAAI,CAACK,MAAM,GAAG,IAAI,CAACH,gBAAgB,CAACltH,OAAO,EAAE,IAAI,CAACitH,IAAI,CAAC;IAEvD,MAAM1pG,EAAE,GAAG,IAAI,CAAC6pG,MAAM,CAACv0I,QAAQ;IAC/B,MAAM2qC,EAAE,GAAG,IAAI,CAAC6pG,MAAM,CAACx0I,QAAQ;IAC/B,MAAM27D,QAAQ,GAAG,IAAIhlE,YAAY,CAAC,CAChC+zC,EAAE,CAACj4C,CAAC,EAAEi4C,EAAE,CAACxzC,CAAC,EAAEwzC,EAAE,CAACnyC,CAAC,EAChBoyC,EAAE,CAACl4C,CAAC,EAAEk4C,EAAE,CAACzzC,CAAC,EAAEyzC,EAAE,CAACpyC,CAAC,CACjB,CAAC;IAEFyvD,IAAI,CAACxnD,YAAY,CAAC,UAAU,EAAE,IAAIukB,0FAAqB,CAAC42C,QAAQ,EAAE,CAAC,CAAC,CAAC;IACrE3T,IAAI,CAAC5B,kBAAkB,CAAC,CAAC;IAEzB,IAAI,CAACquF,KAAK,GAAG,IAAI7zD,MAAM,CAAC9+B,IAAI,CAACkG,IAAI,EAAE,IAAIkzB,oBAAY,CAAC;MAClDp4B,MAAM,EAAE,KAAK;MACbD,aAAa,EAAE,IAAI;MACnBm5B,UAAU,EAAE,IAAI;MAChBE,cAAc,EAAE52F,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAAC+C;IAClC,CAAC,CAAC,CAAC;IACH,IAAI,CAACi+H,KAAK,CAACC,oBAAoB,CAAC,CAAC;IACjC,IAAI,CAACD,KAAK,CAACxwJ,QAAQ,CAAC++D,cAAc,CAAC;MACjCC,UAAU,EAAE,IAAIl+B,gFAAW,CAAC,IAAI,CAAC9/B,IAAI,CAACqa,KAAK,CAAC;MAC5Cg7E,cAAc,EAAE,IAAI,CAACr1F,IAAI,CAACqxB,QAAQ;MAClCikE,gBAAgB,EAAE,IAAI,CAACt1F,IAAI,CAACqxB,QAAQ,GAAG,IAAI,CAACrxB,IAAI,CAACsxB;IACnD,CAAC,CAAC;IACF,IAAI,CAACk+H,KAAK,CAACxwJ,QAAQ,CAACq6F,cAAc,CAAC,CAAC;IAEpC,IAAI,CAACm2D,KAAK,CAACh7F,OAAO,GAAG,UAAUk7F,UAAU,EAAEC,WAAW,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC1wD,KAAK,GAAG,IAAI,CAACuwD,KAAK;IACvB,MAAM7xD,UAAU,GAAGz7D,OAAO,CAACuP,aAAa,CAAC,CAAC;IAC1C,IAAIksD,UAAU,CAACpmG,MAAM,GAAG,CAAC,EAAE;MACzB,IAAI,CAAC0nG,KAAK,GAAG,IAAIn/D,gFAAW,CAAC,CAAC;MAC9B,IAAI,CAACm/D,KAAK,CAACx+F,GAAG,CAAC,IAAI,CAAC+uJ,KAAK,CAAC;MAC1Bl0C,SAAS,CAACnB,uBAAuB,CAAC,IAAI,CAAClb,KAAK,EAAEtB,UAAU,CAAC;IAC3D;EACF;EAEAz0D,aAAaA,CAACC,SAAS,EAAE;IACvB,IAAI,CAAC,IAAI,CAACmmH,MAAM,IAAI,CAAC,IAAI,CAACC,MAAM,IAAI,CAAC,IAAI,CAACC,KAAK,EAAE;MAC/C;IACF;IAEA,MAAMxzF,GAAG,GAAG,IAAI,CAACwzF,KAAK,CAAC1yF,QAAQ;IAC/Bd,GAAG,CAAC0a,QAAQ,CAAC,CAAC,CAAC,CAAC5nE,IAAI,CAACq6B,SAAS,CAACpM,UAAU,CAAC,IAAI,CAACuyH,MAAM,CAAC/nJ,KAAK,CAAC,CAAC;IAC7Dy0D,GAAG,CAAC0a,QAAQ,CAAC,CAAC,CAAC,CAAC5nE,IAAI,CAACq6B,SAAS,CAACpM,UAAU,CAAC,IAAI,CAACwyH,MAAM,CAAChoJ,KAAK,CAAC,CAAC;IAC7D,IAAI,CAACioJ,KAAK,CAACC,oBAAoB,CAAC,CAAC;IACjCzzF,GAAG,CAACoF,qBAAqB,CAAC,CAAC;IAE3BpF,GAAG,CAAC4zF,kBAAkB,GAAG,IAAI;EAC/B;AACF;AAEAX,QAAQ,CAAC5rJ,SAAS,CAACuH,WAAW,GAAGqkJ,QAAQ;AACzCA,QAAQ,CAAC5rJ,SAAS,CAACvD,IAAI,GAAG,MAAM;AAEhC,uDAAemvJ,QAAQ;;;;AClFvB;AACA;AAC+B;AACc;AACD;AAE5C,MAAMY,eAAe,SAAS/vH,4FAAuB,CAAC;EACpDl1B,WAAWA,CAAC7K,MAAM,EAAE;IAClB;IACA,KAAK,CAACA,MAAM,CAAC;IAEb,MAAMM,QAAQ,GAAG;MACfy3D,QAAQ,EAAE;QACRC,MAAM,EAAE;UAAEj4D,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAK,CAAC;QAClC+vI,WAAW,EAAE;UAAEhwJ,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAK,CAAC;QACvCgwI,UAAU,EAAE;UAAEjwJ,IAAI,EAAE,IAAI;UAAEigB,KAAK,EAAE,IAAI+f,kFAAa,CAAC,GAAG,EAAE,GAAG;QAAE,CAAC;QAC9DzlB,KAAK,EAAE;UAAEva,IAAI,EAAE,IAAI;UAAEigB,KAAK,EAAE;QAAK,CAAC;QAClCuS,SAAS,EAAE;UAAExyB,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAK,CAAC;QACrCs0C,OAAO,EAAE;UAAEv0D,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAI,CAAC;QAClCwS,SAAS,EAAE;UAAEzyB,IAAI,EAAE,IAAI;UAAEigB,KAAK,EAAE,IAAI+f,kFAAa,CAAC,CAAC,EAAE,CAAC;QAAE;MAC1D,CAAC;MACDk4B,YAAY;MACZG,cAAc;MACd5mC,WAAW,EAAE,IAAI;MACjB0mC,SAAS,EAAE,KAAK;MAChBrB,UAAU,EAAE;IACd,CAAC;IAED,IAAI,CAAC6G,SAAS,CAACp9D,QAAQ,CAAC;EAC1B;EAEAyO,IAAIA,CAAC4vD,MAAM,EAAE;IACX,KAAK,CAAC5vD,IAAI,CAAC4vD,MAAM,CAAC;IAClB,IAAI,CAAC/wC,KAAK,GAAG+wC,MAAM,CAAC/wC,KAAK;EAC3B;EAEA8vC,SAASA,CAAC98C,MAAM,EAAE;IAChB,IAAI,OAAOA,MAAM,KAAK,WAAW,EAAE;MACjC;IACF;;IAEA;IACA,KAAK,CAAC88C,SAAS,CAAC98C,MAAM,CAAC;IACvB,MAAM02E,OAAO,GAAG,CAAC,CAAC;IAElB,IAAI,IAAI,CAAC1pE,KAAK,EAAE;MACd0pE,OAAO,CAAC24D,aAAa,GAAG,CAAC;IAC3B;;IAEA;IACA,IAAI,CAAC34D,OAAO,GAAGA,OAAO;EACxB;AACF;AAEAw4D,eAAe,CAACxsJ,SAAS,CAACsqB,KAAK,GAAG,KAAK;AAEvC,8DAAekiI,eAAe;;;;ACxD9B;AACA;AAC+B;AACc;AACJ;AAEzC,MAAMI,YAAY,SAASnwH,4FAAuB,CAAC;EACjDl1B,WAAWA,CAAC7K,MAAM,EAAE;IAClB,KAAK,CAACA,MAAM,CAAC;;IAEb;IACA,IAAI,CAAC09D,SAAS,CAACx6D,IAAI,CAAC,IAAI,EAAE;MACxB60D,QAAQ,EAAE;QACRC,MAAM,EAAE;UAAEj4D,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAK,CAAC;QAClC61E,YAAY,EAAE;UAAE91F,IAAI,EAAE,IAAI;UAAEigB,KAAK,EAAE,IAAI+f,kFAAa,CAAC,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,KAAK;QAAE,CAAC;QAChFmhE,OAAO,EAAE;UAAEnhG,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE,IAAI+f,gFAAW,CAAC,QAAQ;QAAE;MACzD,CAAC;MACDk4B,YAAY;MACZG,cAAc;MACd5mC,WAAW,EAAE,KAAK;MAClB0mC,SAAS,EAAE,KAAK;MAChBrB,UAAU,EAAE;IACd,CAAC,CAAC;IAEF,IAAI,CAAC6G,SAAS,CAAC19D,MAAM,CAAC;EACxB;EAEA+O,IAAIA,CAAC4vD,MAAM,EAAE;IACX,KAAK,CAAC5vD,IAAI,CAAC4vD,MAAM,CAAC;IAClB,IAAI,CAAC/wC,KAAK,GAAG+wC,MAAM,CAAC/wC,KAAK;EAC3B;EAEA8vC,SAASA,CAAC98C,MAAM,EAAE;IAChB,IAAI,OAAOA,MAAM,KAAK,WAAW,EAAE;MACjC;IACF;;IAEA;IACA,KAAK,CAAC88C,SAAS,CAAC98C,MAAM,CAAC;IAEvB,MAAM02E,OAAO,GAAG,CAAC,CAAC;IAElB,IAAI,IAAI,CAAC64D,aAAa,EAAE;MACtB74D,OAAO,CAAC84D,cAAc,GAAG,CAAC;IAC5B;IACA;IACA,IAAI,CAAC94D,OAAO,GAAGA,OAAO;EACxB;AACF;AAEA44D,YAAY,CAAC5sJ,SAAS,CAAC6sJ,aAAa,GAAG,KAAK;AAE5C,2DAAeD,YAAY;;;;ACpD3B;AACA;AAC+B;AACc;AACN;AACH;AAEpC,MAAMx7D,wBAAc,GAAG;AACrB;AACA,IAAI30D,kFAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAC/C,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACjD,IAAIA,kFAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAC/C,IAAIA,kFAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACjD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACjD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACjD,IAAIA,kFAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAC/C,IAAIA,kFAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACjD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAC/C,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAC/C,IAAIA,kFAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAC/C,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAC/C,IAAIA,kFAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAC/C,IAAIA,kFAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACjD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAChD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACjD,IAAIA,kFAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAClD;AAED,MAAMswH,UAAU,SAAStwH,4FAAuB,CAAC;EAC/Cl1B,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;;IAEP;IACA,IAAI,CAAC6yD,SAAS,CAACx6D,IAAI,CAAC,IAAI,EAAE;MACxB60D,QAAQ,EAAE;QACRw8B,YAAY,EAAE;UAAEx0F,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAEy0E,gBAAK,CAACF;QAAa,CAAC;QACtDqB,cAAc,EAAE;UAAE71F,IAAI,EAAE,IAAI;UAAEigB,KAAK,EAAE,IAAI+f,kFAAa,CAAC,GAAG,GAAG00D,gBAAK,CAACZ,UAAU,EAAE,GAAG,GAAGY,gBAAK,CAACX,WAAW;QAAE,CAAC;QACzGw8D,cAAc,EAAE;UAAEvwJ,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAK,CAAC;QAC1CuwI,aAAa,EAAE;UAAExwJ,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAK,CAAC;QACzCwwI,YAAY,EAAE;UAAEzwJ,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAK,CAAC;QACxC61E,YAAY,EAAE;UAAE91F,IAAI,EAAE,IAAI;UAAEigB,KAAK,EAAE,IAAI+f,kFAAa,CAAC,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,KAAK;QAAE,CAAC;QAChF0wH,UAAU,EAAE;UAAE1wJ,IAAI,EAAE,IAAI;UAAEigB,KAAK,EAAE,IAAI+f,kFAAa,CAAC,GAAG,EAAE,IAAI;QAAE,CAAC;QAC/D2wH,UAAU,EAAE;UAAE3wJ,IAAI,EAAE,MAAM;UAAEigB,KAAK,EAAE,IAAI+f,kFAAa,CAAC;QAAE,CAAC;QACxDslF,WAAW,EAAE;UAAEtlH,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAI,CAAC;QACtCulG,UAAU,EAAE;UAAExlH,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAI,CAAC;QACrC01E,aAAa,EAAE;UAAE31F,IAAI,EAAE,KAAK;UAAEigB,KAAK,EAAE00E,wBAAcA;QAAC,CAAC;QACrDi8D,YAAY,EAAE;UAAE5wJ,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAI,CAAC;QACvC4wI,cAAc,EAAE;UAAE7wJ,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAI,CAAC;QACzCwP,MAAM,EAAE;UAAEzvB,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAI;MAClC,CAAC;MACDi4C,YAAY;MACZG,cAAc;MACd5mC,WAAW,EAAE,KAAK;MAClB0mC,SAAS,EAAE,KAAK;MAChBrB,UAAU,EAAE;IACd,CAAC,CAAC;EACJ;AACF;AAEA,yDAAew5F,UAAU;;;;AC1EzB;AACA;AAC+B;AACc;AACC;AAE9C,MAAMQ,cAAc,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAElD,MAAMC,iBAAiB,SAAS/wH,4FAAuB,CAAC;EACtDl1B,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;;IAEP;IACA,IAAI,CAAC6yD,SAAS,CAACx6D,IAAI,CAAC,IAAI,EAAE;MACxB60D,QAAQ,EAAE;QACRy4F,YAAY,EAAE;UAAEzwJ,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAK,CAAC;QACxC61E,YAAY,EAAE;UAAE91F,IAAI,EAAE,IAAI;UAAEigB,KAAK,EAAE,IAAI+f,kFAAa,CAAC,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,KAAK;QAAE,CAAC;QAChFgxH,KAAK,EAAE;UAAEhxJ,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAK,CAAC;QACjCgxI,cAAc,EAAE;UAAEjxJ,IAAI,EAAE,KAAK;UAAEigB,KAAK,EAAE6wI;QAAe;MACvD,CAAC;MACD54F,YAAY;MACZG,cAAc;MACd5mC,WAAW,EAAE,KAAK;MAClB0mC,SAAS,EAAE,KAAK;MAChBrB,UAAU,EAAE;IACd,CAAC,CAAC;EACJ;AACF;AAEA,gEAAei6F,iBAAiB;;;;AC7BhC;AACA;AAC+B;AACc;AACW;AAExD,MAAMD,yCAAc,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAElD,MAAMI,2BAA2B,SAASlxH,4FAAuB,CAAC;EAChEl1B,WAAWA,CAAC7K,MAAM,EAAE;IAClB,KAAK,CAACA,MAAM,CAAC;;IAEb;IACA,IAAI,CAAC09D,SAAS,CAACx6D,IAAI,CAAC,IAAI,EAAE;MACxB60D,QAAQ,EAAE;QACRu4F,cAAc,EAAE;UAAEvwJ,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAK,CAAC;QAC1CwwI,YAAY,EAAE;UAAEzwJ,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAK,CAAC;QACxC61E,YAAY,EAAE;UAAE91F,IAAI,EAAE,IAAI;UAAEigB,KAAK,EAAE,IAAI+f,kFAAa,CAAC,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG,KAAK;QAAE,CAAC;QAChFgxH,KAAK,EAAE;UAAEhxJ,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAK,CAAC;QACjCgxI,cAAc,EAAE;UAAEjxJ,IAAI,EAAE,KAAK;UAAEigB,KAAK,EAAE6wI,yCAAcA;QAAC,CAAC;QACtDH,UAAU,EAAE;UAAE3wJ,IAAI,EAAE,MAAM;UAAEigB,KAAK,EAAE,IAAI+f,kFAAa,CAAC;QAAE,CAAC;QACxDslF,WAAW,EAAE;UAAEtlH,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAI,CAAC;QACtCulG,UAAU,EAAE;UAAExlH,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAI,CAAC;QACrCkxI,UAAU,EAAE;UAAEnxJ,IAAI,EAAE,IAAI;UAAEigB,KAAK,EAAE,IAAI+f,kFAAa,CAAC,KAAK,EAAE,KAAK;QAAE,CAAC;QAClEvP,QAAQ,EAAE;UAAEzwB,IAAI,EAAE,IAAI;UAAEigB,KAAK,EAAE,IAAI+f,kFAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;QAAE;MACvE,CAAC;MACDk4B,YAAY;MACZG,cAAc;MACd5mC,WAAW,EAAE,KAAK;MAClB0mC,SAAS,EAAE,KAAK;MAChBrB,UAAU,EAAE;IACd,CAAC,CAAC;IAEF,IAAI,CAAC6G,SAAS,CAAC19D,MAAM,CAAC;EACxB;EAEA09D,SAASA,CAAC98C,MAAM,EAAE;IAChB,IAAI,OAAOA,MAAM,KAAK,WAAW,EAAE;MACjC;IACF;;IAEA;IACA,KAAK,CAAC88C,SAAS,CAAC98C,MAAM,CAAC;IAEvB,MAAM02E,OAAO,GAAG,CAAC,CAAC;IAElB,IAAI,IAAI,CAAC65D,MAAM,EAAE;MACf75D,OAAO,CAACI,OAAO,GAAG,CAAC;IACrB;IACA,IAAI,IAAI,CAACR,cAAc,EAAE;MACvBI,OAAO,CAAC2B,eAAe,GAAG,CAAC;IAC7B;IACA;IACA,IAAI,CAAC3B,OAAO,GAAGA,OAAO;EACxB;AACF;AAEA25D,2BAA2B,CAAC3tJ,SAAS,CAAC6tJ,MAAM,GAAG,IAAI;AACnDF,2BAA2B,CAAC3tJ,SAAS,CAAC4zF,cAAc,GAAG,KAAK;AAE5D,0EAAe+5D,2BAA2B;;;;AC5D1C;AACA;AAC+B;AACc;AACA;AAE7C,MAAMG,gBAAgB,SAASrxH,4FAAuB,CAAC;EACrDl1B,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IACP,MAAMvK,QAAQ,GAAG;MACfy3D,QAAQ,EAAE;QACRs5F,IAAI,EAAE;UAAEtxJ,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAK,CAAC;QAChCsxI,IAAI,EAAE;UAAEvxJ,IAAI,EAAE,GAAG;UAAEigB,KAAK,EAAE;QAAK;MACjC,CAAC;MACDi4C,YAAY;MACZG,cAAc;MACd5mC,WAAW,EAAE,KAAK;MAClB0mC,SAAS,EAAE,KAAK;MAChBrB,UAAU,EAAE;IACd,CAAC;IACD,IAAI,CAAC6G,SAAS,CAACp9D,QAAQ,CAAC;EAC1B;AACF;AAEA,+DAAe8wJ,gBAAgB;;ACxBA;AACI;AAEnC,MAAMG,IAAI,CAAC;EACT1mJ,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACmQ,QAAQ,GAAG,IAAI+kB,kFAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1C,IAAI,CAACzgC,KAAK,GAAG,CAAC;IACd,IAAI,CAACkyJ,WAAW,GAAG,IAAIzxH,qFAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACrD;EAEAniC,GAAGA,CAACod,QAAQ,EAAE1b,KAAK,EAAEkyJ,WAAW,EAAE;IAChC,IAAI,CAACx2I,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAAC1b,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACkyJ,WAAW,GAAGA,WAAW;EAChC;AACF;AAEA,MAAMC,eAAe,GAAG,GAAG,CAAC,CAAC;;AAEd,MAAMC,gBAAgB,CAAC;EACpCC,KAAKA,CAACC,SAAS,EAAEC,OAAO,EAAE;IACxB,IAAI,CAAC7yI,UAAU,GAAGhD,SAAS;IAC3B,IAAI,CAAC81I,QAAQ,GAAG91I,SAAS;IACzB,IAAI,CAAC+1I,SAAS,GAAG,KAAK;IAEtB,IAAI,CAACC,QAAQ,GAAGJ,SAAS;IACzB,IAAI,CAACK,QAAQ,GAAGJ,OAAO;IACvB,IAAI,CAACK,SAAS,GAAG,KAAK;EACxB;EAEAC,QAAQA,CAAA,EAAG;IACT,OAAO,IAAI,CAACD,SAAS;EACvB;EAEAE,UAAUA,CAAA,EAAG;IACX,OAAO,OAAO,IAAI,CAACpzI,UAAU,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC8yI,QAAQ,KAAK,WAAW;EACvF;EAEA9zI,KAAKA,CAAA,EAAG;IACN,IAAI,CAACgB,UAAU,GAAGR,IAAI,CAACP,GAAG,CAAC,CAAC;IAC5B,MAAMo0I,SAAS,GAAG/xJ,QAAQ,CAAC2d,GAAG,CAACoV,gBAAgB,GAAGo+H,eAAe,GAAG,IAAI,GAAG,CAAC;IAC5E,IAAI,CAACK,QAAQ,GAAG,IAAI,CAAC9yI,UAAU,GAAGqzI,SAAS;IAC3C,IAAI,CAACH,SAAS,GAAG,IAAI;EACvB;EAEAI,cAAcA,CAAA,EAAG;IACf,IAAI,OAAO,IAAI,CAACN,QAAQ,KAAK,WAAW,IAAI,OAAO,IAAI,CAACC,QAAQ,KAAK,WAAW,IAC3E,CAAC,IAAI,CAACC,SAAS,IAAI,CAAC,IAAI,CAACE,UAAU,CAAC,CAAC,EAAE;MAC1C,OAAO;QAAEG,OAAO,EAAE;MAAM,CAAC;IAC3B;IAEA,IAAIpzJ,IAAI,GAAG,IAAI,CAACqzJ,UAAU,CAAC,CAAC;IAC5B,MAAMlzI,IAAI,GAAGd,IAAI,CAACP,GAAG,CAAC,CAAC;IACvB,IAAIqB,IAAI,GAAG,IAAI,CAACwyI,QAAQ,EAAE;MACxB3yJ,IAAI,GAAG,IAAI,CAAC8yJ,QAAQ;MACpB,IAAI,CAACj1J,KAAK,CAAC,CAAC;MACZ,OAAO;QAAEu1J,OAAO,EAAE,IAAI;QAAEpzJ;MAAK,CAAC;IAChC;IAEA,MAAMqwB,MAAM,GAAG,CAAClQ,IAAI,GAAG,IAAI,CAACN,UAAU,KAAK,IAAI,CAAC8yI,QAAQ,GAAG,IAAI,CAAC9yI,UAAU,CAAC;IAC3E7f,IAAI,CAAC6b,QAAQ,CAACjM,IAAI,CAAC,IAAI,CAACijJ,QAAQ,CAACh3I,QAAQ,CAAC;IAC1C7b,IAAI,CAAC6b,QAAQ,CAACupB,IAAI,CAAC,IAAI,CAAC0tH,QAAQ,CAACj3I,QAAQ,EAAEwU,MAAM,CAAC;IAClDrwB,IAAI,CAACG,KAAK,GAAG,CAAC,CAAC,GAAGkwB,MAAM,IAAI,IAAI,CAACwiI,QAAQ,CAAC1yJ,KAAK,GAAGkwB,MAAM,GAAG,IAAI,CAACyiI,QAAQ,CAAC3yJ,KAAK;IAC9EH,IAAI,CAACqyJ,WAAW,CAACziJ,IAAI,CAAC,IAAI,CAACijJ,QAAQ,CAACR,WAAW,CAAC;IAChDryJ,IAAI,CAACqyJ,WAAW,CAACiB,KAAK,CAAC,IAAI,CAACR,QAAQ,CAACT,WAAW,EAAEhiI,MAAM,CAAC;IACzD,OAAO;MAAE+iI,OAAO,EAAE,IAAI;MAAEpzJ;IAAK,CAAC;EAChC;EAEAnC,KAAKA,CAAA,EAAG;IACN,IAAI,CAACgiB,UAAU,GAAG,IAAI,CAAC8yI,QAAQ,GAAG,CAAC;IACnC,IAAI,CAACI,SAAS,GAAG,KAAK;EACxB;EAEAQ,KAAKA,CAAA,EAAG;IACN,IAAI,CAAC,IAAI,CAACX,SAAS,EAAE;MACnB,IAAI,CAACJ,KAAK,CAAC,IAAI,CAACW,cAAc,CAAC,CAAC,CAACnzJ,IAAI,EAAE,IAAI,CAAC8yJ,QAAQ,CAAC;MACrD,IAAI,CAACF,SAAS,GAAG,IAAI;IACvB;EACF;EAEAY,MAAMA,CAAA,EAAG;IACP,IAAI,CAACZ,SAAS,GAAG,KAAK;EACxB;EAEAS,UAAUA,CAAA,EAAG;IACX,OAAO,IAAIjB,IAAI,CAAC,CAAC;EACnB;AACF;;ACvFuB;AACmC;AAE1D,MAAMqB,cAAc,GAAG,IAAI;AAC3B,MAAMC,YAAY,GAAG,KAAK;AAE1B,SAASC,YAAYA,CAACv9H,MAAM,EAAEw9H,QAAQ,EAAE;EACtC,MAAMx7J,CAAC,GAAGg+B,MAAM,CAAC/9B,MAAM;EACvB,MAAMsnG,MAAM,GAAG,EAAE;EACjB,KAAK,IAAI53F,CAAC,GAAG,CAAC,EAAE8rJ,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGz7J,CAAC,EAAE2P,CAAC,EAAE,EAAE8rJ,EAAE,IAAID,QAAQ,EAAE;IACnDj0D,MAAM,CAAC53F,CAAC,CAAC,GAAGquB,MAAM,CAACtyB,KAAK,CAAC+vJ,EAAE,EAAEA,EAAE,GAAGD,QAAQ,CAAC;EAC7C;EACA,OAAOj0D,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASm0D,OAAOA,CAAC7yI,OAAO,EAAEngB,IAAI,EAAE;EAC9B,IAAI,CAACmgB,OAAO,GAAGA,OAAO;EACtB,IAAI,CAACywD,KAAK,GAAG9vE,uFAAO,CAAC;IACnBmzB,IAAI,EAAE;EACR,CAAC,EAAEj0B,IAAI,CAAC;AACV;AAEAqgE,0BAAoB,CAAC2yF,OAAO,CAAC3vJ,SAAS,CAAC;;AAEvC;AACA;AACA;AACA;AACA2vJ,OAAO,CAAC3vJ,SAAS,CAAC4vJ,YAAY,GAAG,UAAUhyJ,GAAG,EAAE;EAC9C,MAAMiyJ,MAAM,GAAG,IAAI,CAACC,QAAQ,CAAClyJ,GAAG,CAAC;EACjC,IAAImyJ,MAAM,GAAG,IAAI,CAACC,gBAAgB,CAACH,MAAM,CAAC;EAC1C,IAAI,CAACE,MAAM,EAAE;IACX,IAAI,CAACE,mBAAmB,CAACryJ,GAAG,CAAC;IAC7B;EACF;EACA,IAAI,CAACqyJ,mBAAmB,CAACJ,MAAM,CAAC;EAChCE,MAAM,GAAG1xJ,QAAQ,CAAC0xJ,MAAM,EAAE,EAAE,CAAC;EAC7B,KAAK,IAAI9zJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8zJ,MAAM,EAAE,EAAE9zJ,CAAC,EAAE;IAC/B,IAAI,CAACg0J,mBAAmB,CAACryJ,GAAG,GAAG3B,CAAC,CAAC;EACnC;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA0zJ,OAAO,CAAC3vJ,SAAS,CAACkwJ,SAAS,GAAG,UAAUtyJ,GAAG,EAAE8e,KAAK,EAAE;EAClD,IAAI,CAACkzI,YAAY,CAAChyJ,GAAG,CAAC;EACtB8e,KAAK,GAAG4C,kBAAkB,CAAC5C,KAAK,CAAC;EACjC,MAAMY,MAAM,GAAGkyI,YAAY,CAAC9yI,KAAK,EAAE4yI,cAAc,GAAG1xJ,GAAG,CAAC1J,MAAM,GAAG,CAAC,CAAC;EACnE,MAAM67J,MAAM,GAAGzyI,MAAM,CAACppB,MAAM;EAC5B,IAAI67J,MAAM,KAAK,CAAC,EAAE;IAChB,IAAI,CAACI,gBAAgB,CAACvyJ,GAAG,EAAE8e,KAAK,CAAC;IACjC;EACF;EACA,MAAMmzI,MAAM,GAAG,IAAI,CAACC,QAAQ,CAAClyJ,GAAG,CAAC;EACjC,IAAI,CAACuyJ,gBAAgB,CAACN,MAAM,EAAEE,MAAM,CAAC71J,QAAQ,CAAC,CAAC,CAAC;EAChD,KAAK,IAAI+B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8zJ,MAAM,EAAE,EAAE9zJ,CAAC,EAAE;IAC/B,IAAI,CAACk0J,gBAAgB,CAACvyJ,GAAG,GAAG3B,CAAC,EAAEqhB,MAAM,CAACrhB,CAAC,CAAC,CAAC;EAC3C;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA0zJ,OAAO,CAAC3vJ,SAAS,CAACowJ,SAAS,GAAG,UAAUxyJ,GAAG,EAAE;EAC3C,MAAMiyJ,MAAM,GAAG,IAAI,CAACC,QAAQ,CAAClyJ,GAAG,CAAC;EACjC,IAAImyJ,MAAM,GAAG,IAAI,CAACC,gBAAgB,CAACH,MAAM,CAAC;EAC1C,IAAI,CAACE,MAAM,EAAE;IACX,OAAO,IAAI,CAACC,gBAAgB,CAACpyJ,GAAG,CAAC;EACnC;EACAmyJ,MAAM,GAAG1xJ,QAAQ,CAAC0xJ,MAAM,EAAE,EAAE,CAAC;EAC7B,MAAMrzI,KAAK,GAAG,EAAE;EAChB,KAAK,IAAIzgB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8zJ,MAAM,EAAE,EAAE9zJ,CAAC,EAAE;IAC/BygB,KAAK,CAACzgB,CAAC,CAAC,GAAG,IAAI,CAAC+zJ,gBAAgB,CAACpyJ,GAAG,GAAG3B,CAAC,CAAC;EAC3C;EACA,OAAOygB,KAAK,CAAChb,IAAI,CAAC,EAAE,CAAC;AACvB,CAAC;AAEDiuJ,OAAO,CAAC3vJ,SAAS,CAAC8vJ,QAAQ,GAAG,UAAUlyJ,GAAG,EAAE;EAC1C,OAAOA,GAAG,GAAG2xJ,YAAY;AAC3B,CAAC;AAEDI,OAAO,CAAC3vJ,SAAS,CAACiwJ,mBAAmB,GAAG,UAAUryJ,GAAG,EAAE;EACrDoa,QAAQ,CAACq4I,MAAM,GAAG,GAAGzyJ,GAAG,2CAA2C;AACrE,CAAC;AAED+xJ,OAAO,CAAC3vJ,SAAS,CAACswJ,kBAAkB,GAAG,YAAY;EACjD,MAAMC,KAAK,GAAG,IAAIr1I,IAAI,CAAC,CAAC;EACxB,MAAMs1I,gBAAgB,GAAG,EAAE;EAC3BD,KAAK,CAACE,WAAW,CAACF,KAAK,CAACtX,WAAW,CAAC,CAAC,GAAGuX,gBAAgB,CAAC;EACzD,OAAOD,KAAK;AACd,CAAC;AAEDZ,OAAO,CAAC3vJ,SAAS,CAACmwJ,gBAAgB,GAAG,UAAUvyJ,GAAG,EAAE8e,KAAK,EAAE;EACzD1E,QAAQ,CAACq4I,MAAM,GAAG,GAAGzyJ,GAAG,IAAI8e,KAAK,YACrB,IAAI,CAAC4zI,kBAAkB,CAAC,CAAC,CAACI,WAAW,CAAC,CAAC,SAC1C,IAAI,CAACnjF,KAAK,CAAC38C,IAAI,EAAE;AAC5B,CAAC;AAED++H,OAAO,CAAC3vJ,SAAS,CAACgwJ,gBAAgB,GAAG,UAAUpyJ,GAAG,EAAE;EAClD,MAAMoG,OAAO,GAAGgU,QAAQ,CAACq4I,MAAM,CAACzuJ,KAAK,CAAC,IAAI8e,MAAM,CAAC,WAAW9iB,GAAG,UAAU,CAAC,CAAC;EAC3E,OAAOoG,OAAO,GAAGwb,kBAAkB,CAACxb,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AACtD,CAAC;AAED2rJ,OAAO,CAAC3vJ,SAAS,CAAC2wJ,OAAO,GAAG,UAAU/yJ,GAAG,EAAE;EACzC,OAAOoa,QAAQ,CAACq4I,MAAM,CAACzuJ,KAAK,CAAC,IAAI8e,MAAM,CAAC,WAAW9iB,GAAG,UAAU,CAAC,CAAC;AACpE,CAAC;AAED,oDAAe+xJ,OAAO;;ACvHtB;AACA;AACA;AACA;AACA;AACA,6BAAe,SAAS,kBAACiB,QAAQ,EAAE;EACjC,SAASC,WAAWA,CAACjN,MAAM,EAAE;IAC3BA,MAAM,CAACzrI,KAAK,CAACoE,OAAO,GAAG,EAAE;IACzBqnI,MAAM,CAACzrI,KAAK,CAAC24I,MAAM,GAAG,SAAS;IAC/BlN,MAAM,CAACzrI,KAAK,CAACX,IAAI,GAAG,kBAAkB;IACtCosI,MAAM,CAACzrI,KAAK,CAACtB,KAAK,GAAG,OAAO;IAE5B+sI,MAAM,CAACznI,WAAW,GAAG,UAAU;IAE/B,IAAI40I,cAAc,GAAG,IAAI;IAEzB,SAASC,cAAcA,CAAA,CAAC;IAAA,EAAa;MACnCD,cAAc,CAAC5zI,mBAAmB,CAAC,KAAK,EAAE6zI,cAAc,CAAC;MACzDpN,MAAM,CAACznI,WAAW,GAAG,UAAU;MAC/B40I,cAAc,GAAG,IAAI;IACvB;IAEA,SAASE,gBAAgBA,CAACC,OAAO,EAAE;MACjCA,OAAO,CAAC57I,gBAAgB,CAAC,KAAK,EAAE07I,cAAc,CAAC;MAC/CJ,QAAQ,CAACO,IAAI,CAAC/gE,QAAQ,CAACghE,EAAE,CAACC,qBAAqB,CAAC,OAAO,CAAC;MACxDT,QAAQ,CAACO,IAAI,CAAC/gE,QAAQ,CAACghE,EAAE,CAACE,UAAU,CAACJ,OAAO,CAAC;MAC7CtN,MAAM,CAACznI,WAAW,GAAG,SAAS;MAC9B40I,cAAc,GAAGG,OAAO;IAC1B;IAEAtN,MAAM,CAAC2N,YAAY,GAAG,YAAY;MAAE3N,MAAM,CAACzrI,KAAK,CAAC64C,OAAO,GAAG,KAAK;IAAE,CAAC;IACnE4yF,MAAM,CAAC4N,YAAY,GAAG,YAAY;MAAE5N,MAAM,CAACzrI,KAAK,CAAC64C,OAAO,GAAG,KAAK;IAAE,CAAC;IAEnE4yF,MAAM,CAAC6N,OAAO,GAAG,YAAY;MAC3B,IAAIV,cAAc,KAAK,IAAI,EAAE;QAC3B;QACA;QACA;QACA;QACA;QACA;;QAEA,MAAMW,WAAW,GAAG;UAAEC,gBAAgB,EAAE,CAAC,aAAa,EAAE,eAAe;QAAE,CAAC;QAC1ErsI,SAAS,CAAC8rI,EAAE,CAACQ,cAAc,CAAC,cAAc,EAAEF,WAAW,CAAC,CAACG,IAAI,CAACZ,gBAAgB,CAAC;QAC/EL,QAAQ,CAACkB,sBAAsB,CAAC,CAAC;MACnC,CAAC,MAAM;QACLf,cAAc,CAACj3I,GAAG,CAAC,CAAC;MACtB;IACF,CAAC;EACH;EAEA,SAASi4I,iBAAiBA,CAACnO,MAAM,EAAE;IACjCA,MAAM,CAACzrI,KAAK,CAACoE,OAAO,GAAG,EAAE;IACzBqnI,MAAM,CAACzrI,KAAK,CAAC24I,MAAM,GAAG,MAAM;IAC5BlN,MAAM,CAACzrI,KAAK,CAACX,IAAI,GAAG,kBAAkB;IACtCosI,MAAM,CAACzrI,KAAK,CAACtB,KAAK,GAAG,OAAO;IAC5B+sI,MAAM,CAACznI,WAAW,GAAG,cAAc;IACnCynI,MAAM,CAAC2N,YAAY,GAAG,IAAI;IAC1B3N,MAAM,CAAC4N,YAAY,GAAG,IAAI;IAC1B5N,MAAM,CAAC6N,OAAO,GAAG,IAAI;EACvB;EAEA,SAASO,cAAcA,CAAC79I,OAAO,EAAE;IAC/BA,OAAO,CAACgE,KAAK,CAACT,QAAQ,GAAG,UAAU;IACnCvD,OAAO,CAACgE,KAAK,CAAC85I,MAAM,GAAG,MAAM;IAC7B99I,OAAO,CAACgE,KAAK,CAAC+5I,OAAO,GAAG,UAAU;IAClC/9I,OAAO,CAACgE,KAAK,CAACg6I,MAAM,GAAG,gBAAgB;IACvCh+I,OAAO,CAACgE,KAAK,CAACU,YAAY,GAAG,KAAK;IAClC1E,OAAO,CAACgE,KAAK,CAACgB,UAAU,GAAG,aAAa;IACxChF,OAAO,CAACgE,KAAK,CAACnB,KAAK,GAAG,MAAM;IAC5B7C,OAAO,CAACgE,KAAK,CAACi6I,IAAI,GAAG,wBAAwB;IAC7Cj+I,OAAO,CAACgE,KAAK,CAAC63E,SAAS,GAAG,QAAQ;IAClC77E,OAAO,CAACgE,KAAK,CAAC64C,OAAO,GAAG,KAAK;IAC7B78C,OAAO,CAACgE,KAAK,CAAC6W,OAAO,GAAG,MAAM;IAC9B7a,OAAO,CAACgE,KAAK,CAACd,MAAM,GAAG,KAAK;EAC9B;EAEA,IAAI,IAAI,IAAIiO,SAAS,EAAE;IACrB,MAAMs+H,MAAM,GAAG5rI,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC;IAC/C2rI,MAAM,CAACzrI,KAAK,CAACoE,OAAO,GAAG,MAAM;IAC7By1I,cAAc,CAACpO,MAAM,CAAC;IACtBt+H,SAAS,CAAC8rI,EAAE,CAACiB,kBAAkB,CAAC,cAAc,CAAC,CAACR,IAAI,CAAES,SAAS,IAC7DA,SAAS,GAAGzB,WAAW,CAACjN,MAAM,CAAC,GAAGmO,iBAAiB,CAACnO,MAAM,CAC3D,CAAC;IACF,OAAOA,MAAM;EACf;EACA,MAAMllI,OAAO,GAAG1G,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC;EAC3CyG,OAAO,CAAC0B,IAAI,GAAG,oBAAoB;EACnC1B,OAAO,CAACuH,SAAS,GAAG,qBAAqB;EACzCvH,OAAO,CAACvG,KAAK,CAACX,IAAI,GAAG,kBAAkB;EACvCkH,OAAO,CAACvG,KAAK,CAACtB,KAAK,GAAG,OAAO;EAC7B6H,OAAO,CAACvG,KAAK,CAACo6I,cAAc,GAAG,MAAM;EACrCP,cAAc,CAACtzI,OAAO,CAAC;EACvB,OAAOA,OAAO;AAChB;;AC9F+B;AACqB;AACjB;AACK;AACF;AACa;AAEpC,MAAM+zI,QAAQ,CAAC;EAC5BlrJ,WAAWA,CAACmrJ,QAAQ,EAAE;IACpB,IAAI,CAACC,WAAW,GAAG,IAAIl2H,4FAAuB,CAAC,CAAC;IAChD,IAAI,CAACm2H,OAAO,GAAG,IAAI;IACnB,IAAI,CAACC,SAAS,GAAGH,QAAQ;IAEzB,IAAI,CAACI,aAAa,GAAG,IAAIn3F,QAAQ,CAAC1K,OAAO,CAAC,CAAC;IAC3C,IAAI,CAAC8hG,KAAK,GAAG,IAAIp3F,QAAQ,CAAC1K,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC+hG,aAAa,GAAG,IAAIv2H,mFAAc,CAAC,CAAC;IACzC,IAAI,CAACs2H,KAAK,CAAC31J,GAAG,CAAC,IAAI,CAAC41J,aAAa,CAAC;IAElC,IAAI,CAACC,YAAY,GAAG,IAAI;IACxB,IAAI,CAACC,YAAY,GAAG,IAAI;IACxB,IAAI,CAACC,oBAAoB,GAAG,CAAC;IAC7B,IAAI,CAACC,SAAS,GAAG,CAAC;IAElB,IAAI,CAACjC,IAAI,GAAG,IAAI;EAClB;EAEAkC,yBAAyBA,CAAA,EAAG;IAC1B;IACA,IAAI,CAACD,SAAS,GAAG,IAAI,CAACH,YAAY,CAACv7I,QAAQ,CAAC8iB,UAAU,CAAC,IAAI,CAAC04H,YAAY,CAACx7I,QAAQ,CAAC;IAClFikD,QAAQ,CAACb,cAAc,CAAC,IAAI,CAACm4F,YAAY,CAACv7I,QAAQ,EAAE,IAAI,CAACw7I,YAAY,CAACx7I,QAAQ,EAAE,IAAI,CAACs7I,aAAa,CAACt7I,QAAQ,CAAC;IAC5G,IAAI,CAACs7I,aAAa,CAACh3J,KAAK,CAAC1B,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC04J,aAAa,CAACj4C,YAAY,CAAC,CAAC;IACjC,IAAI,CAACi4C,aAAa,CAACrgG,iBAAiB,CAAC,CAAC;IACtC;IACA,IAAI,CAACqgG,aAAa,CAACpgG,uBAAuB,CAAC,IAAI,CAACkgG,aAAa,CAAC;EAChE;EAEAQ,wBAAwBA,CAAA,EAAG;IACzB,IAAI,CAACnC,IAAI,CAAC/6D,KAAK,CAACxjC,uBAAuB,CAAC,IAAI,CAACkgG,aAAa,CAAC;EAC7D;EAEAS,eAAeA,CAAC91I,KAAK,EAAE;IACrB,IAAI,CAAC01I,oBAAoB,EAAE;IAC3B,IAAI,IAAI,CAACA,oBAAoB,KAAK,CAAC,EAAE;MACnC,IAAI,CAACE,yBAAyB,CAAC,CAAC;IAClC,CAAC,MAAM,IAAI,IAAI,CAACF,oBAAoB,KAAK,CAAC,EAAE;MAC1C11I,KAAK,CAAC5F,MAAM,CAAC+6C,uBAAuB,CAAC,IAAI,CAACkgG,aAAa,CAAC;IAC1D;EACF;EAEAU,aAAaA,CAAC/1I,KAAK,EAAE;IACnB,IAAI,CAAC01I,oBAAoB,EAAE;IAC3B,IAAI,IAAI,CAACA,oBAAoB,KAAK,CAAC,EAAE;MACnC,IAAI,CAACG,wBAAwB,CAAC,CAAC;MAC/B;MACA,MAAMG,iBAAiB,GAAGh2I,KAAK,CAAC5F,MAAM,KAAK,IAAI,CAACo7I,YAAY,GAAG,IAAI,CAACC,YAAY,GAAG,IAAI,CAACD,YAAY;MACpGQ,iBAAiB,CAAC7gG,uBAAuB,CAAC,IAAI,CAACkgG,aAAa,CAAC;IAC/D,CAAC,MAAM,IAAI,IAAI,CAACK,oBAAoB,KAAK,CAAC,EAAE;MAC1C,IAAI,CAAChC,IAAI,CAAC/6D,KAAK,CAACxjC,uBAAuB,CAAC,IAAI,CAACkgG,aAAa,CAAC;IAC7D;EACF;EAEAlxI,MAAMA,CAAC8xI,GAAG,EAAE;IACV,IAAI,CAACA,GAAG,EAAE;MACR30I,MAAM,CAACjB,IAAI,CAAC,wDAAwD,CAAC;MACrE;IACF;IACA,IAAI,CAACqzI,IAAI,GAAGuC,GAAG;IACf,MAAM;MAAEtjE,QAAQ;MAAEx6B;IAAO,CAAC,GAAG89F,GAAG;IAChC,IAAI,CAACtjE,QAAQ,EAAE;MACb,MAAM,IAAIpxF,KAAK,CAAC,0CAA0C,CAAC;IAC7D;IACA,IAAI,CAAC42D,MAAM,EAAE;MACX,MAAM,IAAI52D,KAAK,CAAC,wCAAwC,CAAC;IAC3D;;IAEA;IACAoxF,QAAQ,CAACghE,EAAE,CAACzvI,OAAO,GAAG,IAAI;IAC1B;IACA,IAAI,CAAC,IAAI,CAACixI,OAAO,EAAE;MACjB,IAAI,CAACA,OAAO,GAAGJ,iBAAiB,CAAC,IAAI,CAAC;MACtCx6I,QAAQ,CAACmO,IAAI,CAAC3M,WAAW,CAAC,IAAI,CAACo5I,OAAO,CAAC;IACzC,CAAC,MAAM;MACL,IAAI,CAACA,OAAO,CAACz6I,KAAK,CAACoE,OAAO,GAAG,OAAO;IACtC;IACA;IACA,IAAI,CAACo3I,QAAQ,GAAG32J,QAAQ,CAAC2d,GAAG,CAAC8T,GAAG;IAChCzxB,QAAQ,CAAC1C,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;IAE1B,IAAI,CAACs5J,qBAAqB,CAACF,GAAG,EAAEtjE,QAAQ,CAAC;IACzC,IAAI,CAACyjE,wBAAwB,CAAC,CAAC;;IAE/B;IACA,IAAI,IAAI,CAAChB,SAAS,EAAE;MAClB,IAAI,CAACA,SAAS,CAAC,IAAI,CAAC;IACtB;EACF;EAEAe,qBAAqBA,CAACF,GAAG,EAAEtjE,QAAQ,EAAE;IACnC;IACA,IAAI,CAACuiE,WAAW,CAAClnJ,IAAI,CAACioJ,GAAG,CAAC99F,MAAM,CAAC;IACjC;IACA89F,GAAG,CAACt9D,KAAK,CAACh5F,GAAG,CAAC,IAAI,CAAC21J,KAAK,CAAC;IACzB;IACAW,GAAG,CAACt9D,KAAK,CAACh5F,GAAG,CAAC,IAAI,CAAC01J,aAAa,CAAC;IACjC,IAAI,CAACA,aAAa,CAAC11J,GAAG,CAACs2J,GAAG,CAAC35F,IAAI,CAAC;IAEhC,IAAI,CAACk5F,YAAY,GAAG7iE,QAAQ,CAACghE,EAAE,CAAC0C,aAAa,CAAC,CAAC,CAAC;IAChD,IAAI,CAACZ,YAAY,GAAG9iE,QAAQ,CAACghE,EAAE,CAAC0C,aAAa,CAAC,CAAC,CAAC;IAChD,MAAMrzF,IAAI,GAAG,IAAI,CAACszF,qBAAqB,CAAC,CAAC;IACzC,IAAI,CAACd,YAAY,CAAC71J,GAAG,CAACqjE,IAAI,CAAC;IAC3B,IAAI,CAACyyF,YAAY,CAAC91J,GAAG,CAACqjE,IAAI,CAACplC,KAAK,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC03H,KAAK,CAAC31J,GAAG,CAAC,IAAI,CAAC61J,YAAY,CAAC;IACjC,IAAI,CAACF,KAAK,CAAC31J,GAAG,CAAC,IAAI,CAAC81J,YAAY,CAAC;EACnC;EAEAW,wBAAwBA,CAAA,EAAG;IACzB,IAAI,CAACZ,YAAY,CAAC39I,gBAAgB,CAAC,aAAa,EAAGmI,KAAK,IAAK;MAC3D,IAAI,CAAC81I,eAAe,CAAC91I,KAAK,CAAC;IAC7B,CAAC,CAAC;IACF,IAAI,CAACw1I,YAAY,CAAC39I,gBAAgB,CAAC,WAAW,EAAGmI,KAAK,IAAK;MACzD,IAAI,CAAC+1I,aAAa,CAAC/1I,KAAK,CAAC;IAC3B,CAAC,CAAC;IACF,IAAI,CAACy1I,YAAY,CAAC59I,gBAAgB,CAAC,aAAa,EAAGmI,KAAK,IAAK;MAC3D,IAAI,CAAC81I,eAAe,CAAC91I,KAAK,CAAC;IAC7B,CAAC,CAAC;IACF,IAAI,CAACy1I,YAAY,CAAC59I,gBAAgB,CAAC,WAAW,EAAGmI,KAAK,IAAK;MACzD,IAAI,CAAC+1I,aAAa,CAAC/1I,KAAK,CAAC;IAC3B,CAAC,CAAC;IAEF,IAAI,CAACw1I,YAAY,CAAC39I,gBAAgB,CAAC,cAAc,EAAGmI,KAAK,IAAK;MAC5D,IAAI,CAAC81I,eAAe,CAAC91I,KAAK,CAAC;IAC7B,CAAC,CAAC;IACF,IAAI,CAACw1I,YAAY,CAAC39I,gBAAgB,CAAC,YAAY,EAAGmI,KAAK,IAAK;MAC1D,IAAI,CAAC+1I,aAAa,CAAC/1I,KAAK,CAAC;IAC3B,CAAC,CAAC;IACF,IAAI,CAACy1I,YAAY,CAAC59I,gBAAgB,CAAC,cAAc,EAAGmI,KAAK,IAAK;MAC5D,IAAI,CAAC81I,eAAe,CAAC91I,KAAK,CAAC;IAC7B,CAAC,CAAC;IACF,IAAI,CAACy1I,YAAY,CAAC59I,gBAAgB,CAAC,YAAY,EAAGmI,KAAK,IAAK;MAC1D,IAAI,CAAC+1I,aAAa,CAAC/1I,KAAK,CAAC;IAC3B,CAAC,CAAC;EACJ;EAEAu2I,OAAOA,CAAA,EAAG;IACR,IAAI,CAAC,IAAI,CAAC7C,IAAI,EAAE;MACd;IACF;IACA,MAAM;MAAE/gE,QAAQ;MAAEx6B;IAAO,CAAC,GAAG,IAAI,CAACu7F,IAAI;IACtC,IAAI,CAAC/gE,QAAQ,EAAE;MACb,MAAM,IAAIpxF,KAAK,CAAC,0CAA0C,CAAC;IAC7D;;IAEA;IACAoxF,QAAQ,CAAC6jE,gBAAgB,CAAC,IAAI,CAAC;IAC/B,MAAM/C,OAAO,GAAG9gE,QAAQ,CAACghE,EAAE,CAAC8C,UAAU,CAAC,CAAC;IACxC,IAAIhD,OAAO,EAAE;MACXA,OAAO,CAACp3I,GAAG,CAAC,CAAC;IACf;IACAs2E,QAAQ,CAACghE,EAAE,CAACzvI,OAAO,GAAG,KAAK;IAC3B;IACA,IAAI,IAAI,CAACixI,OAAO,EAAE;MAChB,IAAI,CAACA,OAAO,CAACz6I,KAAK,CAACoE,OAAO,GAAG,MAAM;IACrC;IACA;IACAvf,QAAQ,CAAC1C,GAAG,CAAC,KAAK,EAAE,IAAI,CAACq5J,QAAQ,CAAC;IAElC,IAAI,CAACQ,uBAAuB,CAACv+F,MAAM,CAAC;;IAEpC;IACA,IAAI,IAAI,CAACi9F,SAAS,EAAE;MAClB,IAAI,CAACA,SAAS,CAAC,KAAK,CAAC;IACvB;EACF;EAEAsB,uBAAuBA,CAACv+F,MAAM,EAAE;IAC9B;IACA,IAAI,IAAI,CAAC+8F,WAAW,IAAI/8F,MAAM,EAAE;MAC9BA,MAAM,CAACnqD,IAAI,CAAC,IAAI,CAACknJ,WAAW,CAAC;IAC/B;IACA;IACA,MAAM54F,IAAI,GAAG,IAAI,CAAC+4F,aAAa,CAACvhG,QAAQ,CAAC,CAAC,CAAC;IAC3C,IAAIwI,IAAI,EAAE;MACR,IAAI,CAACo3F,IAAI,CAAC/6D,KAAK,CAACh5F,GAAG,CAAC28D,IAAI,CAAC;IAC3B;IACA,IAAI,CAAC+4F,aAAa,CAACzrJ,MAAM,CAACxM,MAAM,CAAC,IAAI,CAACi4J,aAAa,CAAC;IACpD,IAAI,IAAI,CAACC,KAAK,EAAE;MACd,IAAI,CAAC5B,IAAI,CAAC/6D,KAAK,CAACv7F,MAAM,CAAC,IAAI,CAACk4J,KAAK,CAAC;IACpC;IACA;IACA,IAAI,CAACD,aAAa,GAAG,IAAI;IACzB,IAAI,CAACC,KAAK,GAAG,IAAI;IACjB,IAAI,CAACC,aAAa,GAAG,IAAI;IACzB,IAAI,CAACD,KAAK,GAAG,IAAI;IACjB,IAAI,CAACE,YAAY,GAAG,IAAI;IACxB,IAAI,CAACC,YAAY,GAAG,IAAI;EAC1B;EAEAa,qBAAqBA,CAAA,EAAG;IACtB;IACA,MAAMt6F,QAAQ,GAAG,IAAIh9B,2FAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;IAC5D,MAAM9gC,QAAQ,GAAG,IAAIi3F,oBAAY,CAAC;MAAEp4B,MAAM,EAAE,KAAK;MAAED,aAAa,EAAE;IAAK,CAAC,CAAC;IACzE5+D,QAAQ,CAAC++D,cAAc,CAAC;MAAEC,UAAU,EAAE,IAAIl+B,gFAAW,CAAC,QAAQ;IAAE,CAAC,CAAC;IAClE9gC,QAAQ,CAACq6F,cAAc,CAAC,CAAC;IACzB,MAAMo+D,QAAQ,GAAG,IAAI33H,+EAAU,CAACg9B,QAAQ,EAAE99D,QAAQ,CAAC;IACnDy4J,QAAQ,CAACC,OAAO,CAAC,CAACj4J,IAAI,CAACC,EAAE,GAAG,CAAC,CAAC;IAC9B,OAAO+3J,QAAQ;EACjB;EAEAE,mBAAmBA,CAAA,EAAG;IACpB,IAAI,CAAC,IAAI,CAACrB,YAAY,IAAI,CAAC,IAAI,CAACC,YAAY,EAAE;MAC5C;IACF;IAEA,MAAMh0J,IAAI,GAAG,IAAI;IACjB;IACA,IAAIA,IAAI,CAACi0J,oBAAoB,KAAK,CAAC,EAAE;MACnC;MACAx3F,QAAQ,CAACb,cAAc,CAAC57D,IAAI,CAAC+zJ,YAAY,CAACv7I,QAAQ,EAAExY,IAAI,CAACg0J,YAAY,CAACx7I,QAAQ,EAAExY,IAAI,CAAC8zJ,aAAa,CAACt7I,QAAQ,CAAC;MAC5G;MACA,MAAMmmC,IAAI,GAAG3+C,IAAI,CAAC+zJ,YAAY,CAACv7I,QAAQ,CAAC8iB,UAAU,CAACt7B,IAAI,CAACg0J,YAAY,CAACx7I,QAAQ,CAAC;MAC9E,MAAM68I,MAAM,GAAG12G,IAAI,GAAG3+C,IAAI,CAACk0J,SAAS;MACpCl0J,IAAI,CAAC8zJ,aAAa,CAACh3J,KAAK,CAAC6/B,cAAc,CAAC04H,MAAM,CAAC;MAC/C;MACAr1J,IAAI,CAACk0J,SAAS,GAAGv1G,IAAI;IACvB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEi0G,sBAAsBA,CAAA,EAAG;IACvB,MAAM4B,GAAG,GAAG,IAAI,CAACvC,IAAI;IACrB,MAAM;MAAEv7F;IAAO,CAAC,GAAG89F,GAAG;;IAEtB;IACA,MAAMc,SAAS,GAAG,IAAI,CAAC1B,aAAa;IACpC0B,SAAS,CAACrlH,MAAM,CAAC+kB,QAAQ,CAAC,CAAC;IAC3BsgG,SAAS,CAAC98I,QAAQ,CAACpd,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;IAClCk6J,SAAS,CAACz5C,YAAY,CAAC,CAAC;;IAExB;IACAy5C,SAAS,CAACzhG,WAAW,CAAC+jC,gBAAgB,CAAClhC,MAAM,CAAC7C,WAAW,EAAEyhG,SAAS,CAACrlH,MAAM,CAAC;IAC5E;IACAukH,GAAG,CAACt9D,KAAK,CAACxjC,uBAAuB,CAAC4hG,SAAS,CAAC;IAC5C,IAAI,IAAI,CAAC3B,SAAS,EAAE;MAClB,IAAI,CAACA,SAAS,CAAC,IAAI,CAAC;IACtB;EACF;EAEA4B,SAASA,CAAA,EAAG;IACV,MAAMf,GAAG,GAAG,IAAI,CAACvC,IAAI;IACrB,OAAQuC,GAAG,IAAIA,GAAG,CAACtjE,QAAQ,GAAIsjE,GAAG,CAACtjE,QAAQ,CAAC50E,UAAU,GAAG,IAAI;EAC/D;AACF;;;;ACjQA;AACuB;AACQ;AACG;AACF;AACJ;AACc;AACV;AACE;AACR;AACI;AACc;AACP;AACK;AACjB;AACO;AACM;AACA;AACE;AACU;AACF;AACC;AAChB;AACH;AACQ;AACE;AACA;AACC;AACQ;AACK;AACM;AACN;AACJ;AACc;AACoB;AACtB;AACJ;AACJ;AACA;AAClB;AACE;AACQ;AACL;AAC0B;AACwB;AAC3C;AAEhD,MAAM;EACJwxB,SAAS;EACTvW,IAAI;EACJwG,OAAO;EACP8H,KAAK;EACLwrB,QAAQA,eAAAA;AACV,CAAC,GAAG8nB,IAAI;AAER,MAAMw8E,SAAS,GAAG;EAAEC,OAAO,EAAE,CAAC;EAAEC,SAAS,EAAE,CAAC;EAAEC,QAAQ,EAAE;AAAE,CAAC;AAE3D,MAAMC,gBAAgB,GAAG,gDAAgD;AACzE,MAAMC,gBAAgB,GAAG,gDAAgD;;AAEzE;AACA;AACAz4H,0FAAqB,CAAC9a,OAAO,GAAG,KAAK;AAErC,MAAM;EAAE1J,aAAaA,oBAAAA;AAAC,CAAC,GAAGje,KAAK;AAE/B,SAASo7J,cAAcA,CAAC3mI,GAAG,EAAElyB,MAAM,EAAEua,MAAM,EAAE;EAC3C2X,GAAG,CAAC8nC,IAAI,GAAGh6D,MAAM,GAAGua,MAAM,GAAG9Z,QAAQ,CAAC2d,GAAG,CAACoS,aAAa;EACvD0B,GAAG,CAACioC,GAAG,GAAGn6D,MAAM,GAAGua,MAAM,GAAG9Z,QAAQ,CAAC2d,GAAG,CAACqS,YAAY;AACvD;AAEA,SAASqoI,eAAeA,CAACzwI,QAAQ,EAAE;EACjC,MAAM6W,GAAG,GAAG7W,QAAQ,CAACC,WAAW,CAAC,GAAG,CAAC;EACrC,IAAI4W,GAAG,IAAI,CAAC,EAAE;IACZ7W,QAAQ,GAAGA,QAAQ,CAAC5hB,MAAM,CAAC,CAAC,EAAEy4B,GAAG,CAAC;EACpC;EACA,OAAO7W,QAAQ;AACjB;AAEA,SAAS0wI,gBAAgBA,CAACz2H,OAAO,EAAE;EACjC,IAAI02H,WAAW,GAAG,KAAK;EACvB12H,OAAO,CAAC4a,gBAAgB,CAAEC,SAAS,IAAK;IACtCA,SAAS,CAACpT,cAAc,CAAE5P,OAAO,IAAK;MACpC,IAAIA,OAAO,CAACwH,QAAQ,EAAE;QACpBq3H,WAAW,GAAG,IAAI;MACpB;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;EACF,OAAOA,WAAW;AACpB;AAEA,SAASC,cAAcA,CAAC12I,GAAG,EAAE9d,MAAM,EAAEy0J,OAAO,EAAE;EAC5C,MAAMC,aAAa,GAAG,GAAG;EACzB,IAAID,OAAO,KAAK/8I,SAAS,EAAE;IACzBoG,GAAG,CAACnB,KAAK,CAAC,GAAG3c,MAAM,OAAO5E,IAAI,CAACyN,KAAK,CAAC4rJ,OAAO,GAAGC,aAAa,CAAC,GAAG,CAAC;EACnE,CAAC,MAAM;IACL52I,GAAG,CAACnB,KAAK,CAAC,GAAG3c,MAAM,KAAK,CAAC;EAC3B;AACF;AAEA,SAAS20J,cAAcA,CAAA,EAAG;EACxB,OAAO34J,QAAQ,CAAC2d,GAAG,CAACwS,cAAc,GAAGnwB,QAAQ,CAAC2d,GAAG,CAACuS,QAAQ,GAAGlwB,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAACnU,KAAK;AACpF;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS4+I,IAAIA,CAACj5J,IAAI,EAAE;EAClBggB,qBAAe,CAAC/c,IAAI,CAAC,IAAI,CAAC;EAC1B,IAAI,CAAC2tE,KAAK,GAAG9vE,uFAAO,CAAC;IACnBo4J,cAAc,EAAE,UAAU;IAC1BC,UAAU,EAAE;EACd,CAAC,EAAEn5J,IAAI,CAAC;EACR;EACA,IAAI,CAACw0J,IAAI,GAAG,IAAI;EAChB;EACA,IAAI,CAAC4E,aAAa,GAAG,IAAI3H,gBAAgB,CAAC,CAAC;EAC3C;EACA,IAAI,CAAC4H,UAAU,GAAIr5J,IAAI,IAAIA,IAAI,CAAC63J,SAAS,IACpCx8I,QAAQ,CAACi+I,cAAc,CAAC,gBAAgB,CAAC,IACzCx4J,sFAAM,CAACua,QAAQ,CAACm+I,sBAAsB,CAAC,gBAAgB,CAAC,CAAC,IACzDn+I,QAAQ,CAACmO,IAAI;EAClB;EACA,IAAI,CAACiwI,cAAc,GAAG,IAAI,CAACJ,UAAU;;EAErC;EACA,IAAI,CAACK,QAAQ,GAAG,KAAK;EACrB;EACA,IAAI,CAACC,QAAQ,GAAG,KAAK;EACrB;EACA,IAAI,CAACC,SAAS,GAAG,KAAK;EACtB;EACA,IAAI,CAACC,WAAW,GAAG,IAAI;EACvB;EACA,IAAI,CAACC,eAAe,GAAG,IAAI;;EAE3B;EACA,IAAI,CAACz5J,QAAQ,GAAGA,QAAQ;EACxB,MAAM8hB,GAAG,GAAGC,MAAM;EAClBD,GAAG,CAACd,OAAO,GAAGihG,KAAK;EACnBngG,GAAG,CAACN,KAAK,GAAGygG,MAAK,GAAG,CAAO,GAAG,MAAM;EACpC;AACF;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAAClgG,MAAM,GAAGD,GAAG;EAEjB,IAAI,CAAC43I,QAAQ,GAAG,IAAI/G,aAAO,CAAC,IAAI,CAAC;EACjC,IAAI,CAACn1J,eAAe,CAAC,CAAC;EACtB,IAAImC,IAAI,IAAIA,IAAI,CAACK,QAAQ,EAAE;IACzB,IAAI,CAACA,QAAQ,CAAC1C,GAAG,CAACqC,IAAI,CAACK,QAAQ,CAAC;EAClC;;EAEA;EACA,IAAI,CAAC25J,QAAQ,GAAG,IAAI;EACpB;EACA,IAAI,CAACC,QAAQ,GAAG,EAAE;EAClB;AACF;AACA;EACE,IAAI,CAACC,aAAa,GAAG,IAAI;;EAEzB;EACA,IAAI,CAACC,QAAQ,GAAG,CAAC,CAAC;EAClB;EACA,IAAI,CAACC,cAAc,GAAG,IAAI;;EAE1B;EACA,IAAI,CAAC3jI,QAAQ,GAAG,EAAE;;EAElB;EACA,IAAI,CAAC4jI,aAAa,GAAG,IAAI;EAEzB,IAAI,CAACt9J,KAAK,CAAC,CAAC;EAEZ,IAAI,IAAI,CAAC+iH,KAAK,EAAE;IACd39F,GAAG,CAACnB,KAAK,CAAC,YAAY,IAAI,CAAC8+F,KAAK,CAACn/G,IAAI,CAAC8kB,IAAI,cAAc,IAAI,CAACq6F,KAAK,CAACj/G,OAAO,CAAC4kB,IAAI,WAAW,CAAC;EAC7F;EAEA,MAAMljB,IAAI,GAAG,IAAI;EACjB02J,IAAI,CAACqB,iBAAiB,CAAC1mJ,OAAO,CAAEshB,MAAM,IAAK;IACzCA,MAAM,CAACjyB,IAAI,CAACV,IAAI,CAAC;EACnB,CAAC,CAAC;EAEF,IAAI,CAACg4J,sBAAsB,CAAC,CAAC;AAC/B;AAEAtB,IAAI,CAAC51J,SAAS,GAAGlC,MAAM,CAACC,MAAM,CAAC4e,qBAAe,CAAC3c,SAAS,CAAC;AACzD41J,IAAI,CAAC51J,SAAS,CAACuH,WAAW,GAAGquJ,IAAI;AAEjCA,IAAI,CAAC51J,SAAS,CAACm3J,yBAAyB,GAAG,YAAY;EACrD,OAAO56C,iBAAa,CAACiB,uBAAuB;AAC9C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,SAAS45C,qBAAqBA,CAAC5C,SAAS,EAAErgJ,OAAO,EAAE;EACjD,MAAM9M,MAAM,GAAGmtJ,SAAS;EACxB,OAAOntJ,MAAM,CAACiR,UAAU,EAAE;IACxBjR,MAAM,CAACoR,WAAW,CAACpR,MAAM,CAACiR,UAAU,CAAC;EACvC;EACAjR,MAAM,CAACmS,WAAW,CAACrF,OAAO,CAAC;AAC7B;;AAEA;AACA;AACA;AACA;AACAyhJ,IAAI,CAAC51J,SAAS,CAACq3J,mBAAmB,GAAI,YAAY;EAChD,MAAMC,YAAY,GAAG,IAAI76H,kFAAa,CAAC,CAAC;EACxC,MAAMtlB,SAAS,GAAG,IAAIslB,kFAAa,CAAC,CAAC;EACrC,MAAM86H,GAAG,GAAG;IAAEh7J,MAAM,EAAE,IAAIkgC,kFAAa,CAAC,CAAC;IAAE+6H,QAAQ,EAAE,IAAI/6H,kFAAa,CAAC;EAAE,CAAC;EAE1E,OAAO,YAAY;IACjB,IAAI,CAAC00H,IAAI,CAAC/6D,KAAK,CAACzjC,iBAAiB,CAAC,CAAC;IACnC,KAAK,IAAI12D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACk1J,IAAI,CAAC/6D,KAAK,CAAC7kC,QAAQ,CAACr9D,MAAM,EAAE+H,CAAC,EAAE,EAAE;MACxD,IAAI,IAAI,CAACk1J,IAAI,CAAC/6D,KAAK,CAAC7kC,QAAQ,CAACt1D,CAAC,CAAC,CAACQ,IAAI,KAAK,kBAAkB,EAAE;QAC3D,MAAMg7J,KAAK,GAAG,IAAI,CAACtG,IAAI,CAAC/6D,KAAK,CAAC7kC,QAAQ,CAACt1D,CAAC,CAAC;QACzCq7J,YAAY,CAAC7rJ,IAAI,CAACgsJ,KAAK,CAAChgJ,MAAM,CAACm+C,MAAM,CAACY,kBAAkB,CAAC;QACzD,IAAI,CAACkhG,MAAM,CAACJ,YAAY,EAAEC,GAAG,CAAC;QAE9BpgJ,SAAS,CAACgzD,UAAU,CAACstF,KAAK,CAAC5/I,MAAM,CAACH,QAAQ,EAAE+/I,KAAK,CAAC//I,QAAQ,CAAC;QAC3D+/I,KAAK,CAAC//I,QAAQ,CAACyyD,UAAU,CAACotF,GAAG,CAACh7J,MAAM,EAAE4a,SAAS,CAAC;QAChDsgJ,KAAK,CAAC5/I,MAAM,CAACH,QAAQ,CAACjM,IAAI,CAAC8rJ,GAAG,CAACh7J,MAAM,CAAC;QAEtCk7J,KAAK,CAAChgJ,MAAM,CAACm0C,IAAI,GAAG,IAAI;QACxB6rG,KAAK,CAAChgJ,MAAM,CAACm+C,MAAM,CAACq8F,MAAM,GAAG,CAACsF,GAAG,CAACC,QAAQ,CAAC5oJ,CAAC;QAC5C6oJ,KAAK,CAAChgJ,MAAM,CAACm+C,MAAM,CAACr+C,GAAG,GAAGggJ,GAAG,CAACC,QAAQ,CAAC5oJ,CAAC;QACxC6oJ,KAAK,CAAChgJ,MAAM,CAACm+C,MAAM,CAACh8B,KAAK,GAAG29H,GAAG,CAACC,QAAQ,CAACrtJ,CAAC;QAC1CstJ,KAAK,CAAChgJ,MAAM,CAACm+C,MAAM,CAACp+C,IAAI,GAAG,CAAC+/I,GAAG,CAACC,QAAQ,CAACrtJ,CAAC;QAC1CstJ,KAAK,CAAChgJ,MAAM,CAACm+C,MAAM,CAACW,IAAI,GAAGp/C,SAAS,CAACjjB,MAAM,CAAC,CAAC,GAAGqjK,GAAG,CAACC,QAAQ,CAACvnJ,CAAC;QAC9DwnJ,KAAK,CAAChgJ,MAAM,CAACm+C,MAAM,CAACc,GAAG,GAAGv/C,SAAS,CAACjjB,MAAM,CAAC,CAAC,GAAGqjK,GAAG,CAACC,QAAQ,CAACvnJ,CAAC;QAE7DwnJ,KAAK,CAAChgJ,MAAM,CAACm+C,MAAM,CAACG,sBAAsB,CAAC,CAAC;MAC9C;IACF;EACF,CAAC;AACH,CAAC,CAAC,CAAE;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA6/F,IAAI,CAAC51J,SAAS,CAACwmC,IAAI,GAAG,YAAY;EAChC,MAAMguH,SAAS,GAAG,IAAI,CAACwB,UAAU;EACjC,MAAM5qG,IAAI,GAAGpxD,KAAK,CAACie,aAAa,CAAC,KAAK,EAAE;IAAE0/I,KAAK,EAAE;EAAc,CAAC,CAAC;EACjEP,qBAAqB,CAAC5C,SAAS,EAAEppG,IAAI,CAAC;EACtC,IAAI,CAAC4qG,UAAU,GAAG5qG,IAAI;EAEtB,MAAMwsG,IAAI,GAAG5/I,QAAQ,CAAC6/I,sBAAsB,CAAC,CAAC;EAC9CD,IAAI,CAACp+I,WAAW,CAAC,IAAI,CAACs+I,QAAQ,GAAG7/I,kBAAa,CAC5C,KAAK,EACL;IAAE0/I,KAAK,EAAE;EAAuB,CAAC,EACjC1/I,kBAAa,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,qBAAqB,CAC9C,CAAC,CAAC;EACF2/I,IAAI,CAACp+I,WAAW,CAAC,IAAI,CAACu+I,YAAY,GAAG9/I,kBAAa,CAChD,KAAK,EACL;IAAE0/I,KAAK,EAAE;EAAoB,CAAC,EAC9B1/I,kBAAa,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAC3B,CAAC,CAAC;EACFu8I,SAAS,CAACh7I,WAAW,CAACo+I,IAAI,CAAC;EAE3B,IAAI,IAAI,CAACzG,IAAI,KAAK,IAAI,EAAE;IAAE;IACxB,OAAO,IAAI;EACb;EAEA,MAAMjyJ,IAAI,GAAG,IAAI;EACjB,IAAI,CAAC84J,YAAY,CAAC,gCAAgC,CAAC;EACnD,IAAI;IACF,IAAI,CAACC,QAAQ,CAAC,CAAC;IAEf,IAAI,CAACC,cAAc,CAAC,CAAC;IACrB,IAAI,CAACvB,QAAQ,GAAG,IAAIh/I,OAAO,CAAC;MAC1B9U,KAAK,EAAE,EAAE;MACT3O,MAAM,EAAE,EAAE;MACV2iB,KAAK,EAAE,EAAE;MACTC,MAAM,EAAE,EAAE;MACVE,KAAK,EAAE,MAAM;MACbK,MAAM,EAAE;IACV,CAAC,CAAC;IAEF,MAAMQ,MAAM,GAAGulI,YAAY,CAAC,CAAC;IAC7BvlI,MAAM,CAACvC,gBAAgB,CAAC,SAAS,EAAGmI,KAAK,IAAK;MAC5Cve,IAAI,CAACi5J,UAAU,CAAC16I,KAAK,CAAC;IACxB,CAAC,CAAC;IAEF5F,MAAM,CAACvC,gBAAgB,CAAC,OAAO,EAAGmI,KAAK,IAAK;MAC1Cve,IAAI,CAACk5J,QAAQ,CAAC36I,KAAK,CAAC;IACtB,CAAC,CAAC;IAEF,IAAI,CAAC46I,eAAe,GAAG,IAAItY,iBAAc,CACvC,IAAI,CAACoR,IAAI,CAACp3F,IAAI,EACd,IAAI,CAACo3F,IAAI,CAAC72C,KAAK,EACf,IAAI,CAAC62C,IAAI,CAACv7F,MAAM,EAChB,IAAI,CAACu7F,IAAI,CAAC/gE,QAAQ,CAAC50E,UAAU,EAC7B,MAAMtc,IAAI,CAACo5J,UAAU,CAAC,CACxB,CAAC;IACD,IAAI,CAACD,eAAe,CAAC/iJ,gBAAgB,CAAC,QAAQ,EAAGtI,CAAC,IAAK;MACrD,IAAIhQ,QAAQ,CAAC2d,GAAG,CAAClD,MAAM,CAAC6E,EAAE,EAAE;QAC1Bpd,IAAI,CAACm4J,mBAAmB,CAAC,CAAC;MAC5B;MACA;MACA,QAAQrqJ,CAAC,CAAChM,MAAM;QACd,KAAK,QAAQ;UACX9B,IAAI,CAACse,aAAa,CAAC;YAAE/gB,IAAI,EAAE,QAAQ;YAAEg2D,UAAU,EAAEzlD,CAAC,CAACylD;UAAW,CAAC,CAAC;UAChE;QACF,KAAK,MAAM;UACTvzD,IAAI,CAACse,aAAa,CAAC;YAAE/gB,IAAI,EAAE,MAAM;YAAEyvB,MAAM,EAAElf,CAAC,CAACkf;UAAO,CAAC,CAAC;UACtD;QACF;UACEhtB,IAAI,CAACse,aAAa,CAAC;YAAE/gB,IAAI,EAAEuQ,CAAC,CAAChM;UAAO,CAAC,CAAC;MAC1C;MACA9B,IAAI,CAACse,aAAa,CAAC;QAAE/gB,IAAI,EAAE;MAAY,CAAC,CAAC;MACzCyC,IAAI,CAACs3J,WAAW,GAAG,IAAI;IACzB,CAAC,CAAC;IAEF,MAAM9C,GAAG,GAAG,IAAI,CAACvC,IAAI;IACrB,IAAI,CAACoH,OAAO,GAAG,IAAItT,SAAM,CAACyO,GAAG,CAAC35F,IAAI,EAAE25F,GAAG,CAAC99F,MAAM,EAAE89F,GAAG,CAACtjE,QAAQ,CAAC50E,UAAU,CAAC;IACxE,IAAI,CAAC+8I,OAAO,CAACjjJ,gBAAgB,CAAC,SAAS,EAAGmI,KAAK,IAAK;MAClDve,IAAI,CAACs5J,OAAO,CAAC/6I,KAAK,CAAC;IACrB,CAAC,CAAC;IACF,IAAI,CAAC86I,OAAO,CAACjjJ,gBAAgB,CAAC,UAAU,EAAGmI,KAAK,IAAK;MACnDve,IAAI,CAAC3C,MAAM,CAACkhB,KAAK,CAAC;IACpB,CAAC,CAAC;EACJ,CAAC,CAAC,OAAO1e,KAAK,EAAE;IACd,IAAIA,KAAK,CAACqjB,IAAI,KAAK,WAAW,IAAIrjB,KAAK,CAAC2f,OAAO,KAAK,+CAA+C,EAAE;MACnG,IAAI,CAACs5I,YAAY,CAAC,iCAAiC,CAAC;IACtD,CAAC,MAAM,IAAIj5J,KAAK,CAAC2f,OAAO,CAACkB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;MAC7C,IAAI,CAACo4I,YAAY,CAACj5J,KAAK,CAAC2f,OAAO,CAAC;IAClC,CAAC,MAAM;MACL,IAAI,CAACs5I,YAAY,CAAC,+BAA+B,CAAC;MAClD,MAAMj5J,KAAK;IACb;IACA,OAAO,KAAK;EACd;;EAEA;EACA,MAAM05J,IAAI,GAAG,IAAI,CAAClrF,KAAK,IAAI,IAAI,CAACA,KAAK,CAACrwE,IAAI;EAC1C,IAAIu7J,IAAI,EAAE;IACR,MAAMh8J,IAAI,GAAG,IAAI,CAAC8wE,KAAK,IAAI,IAAI,CAACA,KAAK,CAAC9wE,IAAI;IAC1C,IAAI,CAACS,IAAI,CAACu7J,IAAI,EAAE;MAAE1rC,QAAQ,EAAEtwH,IAAI;MAAEi8J,YAAY,EAAE;IAAK,CAAC,CAAC;EACzD;EAEA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA9C,IAAI,CAAC51J,SAAS,CAACymC,IAAI,GAAG,YAAY;EAChC,IAAI,CAACuxH,YAAY,CAAC,6BAA6B,CAAC;EAChD,IAAI,CAACpB,QAAQ,CAACrmJ,OAAO,CAAEooJ,GAAG,IAAK;IAC7BA,GAAG,CAAC/wI,MAAM,CAAC,CAAC;EACd,CAAC,CAAC;EACF,IAAI,CAACgvI,QAAQ,CAAC1iK,MAAM,GAAG,CAAC;EACxB,IAAI,CAAC0kK,IAAI,CAAC,CAAC;EACX,IAAI,CAACzH,IAAI,GAAG,IAAI;AAClB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACAyE,IAAI,CAAC51J,SAAS,CAACg4J,YAAY,GAAG,UAAUa,GAAG,EAAE;EAC3C,MAAM1kJ,OAAO,GAAG6D,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;EAC7C9D,OAAO,CAAC+D,YAAY,CAAC,OAAO,EAAE,cAAc,CAAC;EAC7C/D,OAAO,CAACqF,WAAW,CAACxB,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC,CAAC,CAACuB,WAAW,CAACxB,QAAQ,CAAC6I,cAAc,CAACg4I,GAAG,CAAC,CAAC;EAC1FzB,qBAAqB,CAAC,IAAI,CAACpB,UAAU,EAAE7hJ,OAAO,CAAC;AACjD,CAAC;;AAED;AACA;AACA;AACA;AACAyhJ,IAAI,CAAC51J,SAAS,CAAC84J,WAAW,GAAG,YAAY;EACvC1B,qBAAqB,CAAC,IAAI,CAACpB,UAAU,EAAE,IAAI,CAAC7E,IAAI,CAAC/gE,QAAQ,CAAC50E,UAAU,CAAC;AACvE,CAAC;AAEDo6I,IAAI,CAAC51J,SAAS,CAAC+4J,sBAAsB,GAAG,UAAUl8I,QAAQ,EAAE;EAC1D,MAAM;IAAEu0I;EAAG,CAAC,GAAG,IAAI,CAACD,IAAI,CAAC/gE,QAAQ;EACjC,IAAIghE,EAAE,IAAIA,EAAE,CAACzvI,OAAO,EAAE;IACpB,IAAI,CAACwvI,IAAI,CAAC/gE,QAAQ,CAAC6jE,gBAAgB,CAACp3I,QAAQ,CAAC;IAC7C;EACF;EACAm8I,qBAAqB,CAACn8I,QAAQ,CAAC;AACjC,CAAC;AAED,SAASo8I,oBAAoBA,CAACn8I,OAAO,EAAE;EACrC,OAAOA,OAAO,CAACo8I,YAAY,CAAC,gBAAgB,CAAC;AAC/C;AAEA,SAASC,aAAaA,CAACr8I,OAAO,EAAE;EAC9B,OAAQA,OAAO,CAACo8I,YAAY,CAAC,qBAAqB,CAAC,IAChDp8I,OAAO,CAACo8I,YAAY,CAAC,oBAAoB,CAAC;AAC/C;;AAEA;AACA;AACA;AACA;AACAtD,IAAI,CAAC51J,SAAS,CAACi4J,QAAQ,GAAG,YAAY;EACpC,MAAMvE,GAAG,GAAG;IACV78I,KAAK,EAAE,IAAI,CAACm/I,UAAU,CAACoD,WAAW;IAClClgJ,MAAM,EAAE,IAAI,CAAC88I,UAAU,CAACqD;EAC1B,CAAC;EAED,MAAMC,YAAY,GAAG;IAAEC,qBAAqB,EAAE,IAAI;IAAE35F,KAAK,EAAE,IAAI;IAAE45F,kBAAkB,EAAE;EAAM,CAAC;EAC5F,IAAIx8J,QAAQ,CAAC2d,GAAG,CAAC8R,SAAS,EAAE;IAC1B6sI,YAAY,CAAC7sI,SAAS,GAAG,IAAI;EAC/B;EAEAinI,GAAG,CAAC+F,UAAU,GAAG,IAAI9d,iBAAa,CAAC,CAAC;EAEpC+X,GAAG,CAACtjE,QAAQ,GAAG,IAAI3zD,yFAAoB,CAAC68H,YAAY,CAAC;EACrD5F,GAAG,CAACtjE,QAAQ,CAACupE,SAAS,CAACh4I,OAAO,GAAG3kB,QAAQ,CAAC2d,GAAG,CAAClD,MAAM,CAAC6E,EAAE;EACvDo3I,GAAG,CAACtjE,QAAQ,CAACupE,SAAS,CAACC,UAAU,GAAG,KAAK;EACzClG,GAAG,CAACtjE,QAAQ,CAACupE,SAAS,CAACl9J,IAAI,GAAGggC,uFAAkB;EAChD4zD,YAAY,CAAC7pD,IAAI,CAACktH,GAAG,CAACtjE,QAAQ,CAAC;;EAE/B;EACA,IAAI,CAAC6oE,oBAAoB,CAACvF,GAAG,CAACtjE,QAAQ,CAAC0pE,UAAU,CAAC,CAAC,CAAC,EAAE;IACpD98J,QAAQ,CAAC1C,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;EACjC;EACA,IAAI,CAAC6+J,aAAa,CAACzF,GAAG,CAACtjE,QAAQ,CAAC0pE,UAAU,CAAC,CAAC,CAAC,EAAE;IAC7C98J,QAAQ,CAAC1C,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;EAC3B;EAEAo5J,GAAG,CAACtjE,QAAQ,CAACw2D,SAAS,GAAG,KAAK;EAC9B8M,GAAG,CAACtjE,QAAQ,CAAC2pE,aAAa,CAAC3vJ,MAAM,CAAC4vJ,gBAAgB,CAAC;EACnDtG,GAAG,CAACtjE,QAAQ,CAACksD,OAAO,CAACoX,GAAG,CAAC78I,KAAK,EAAE68I,GAAG,CAACx6I,MAAM,CAAC;EAC3Cw6I,GAAG,CAACtjE,QAAQ,CAAC6pE,aAAa,CAACj9J,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAACnU,KAAK,EAAEtb,MAAM,CAAC,CAACsB,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAAC+C,WAAW,CAAC,CAAC;EACvFwlI,GAAG,CAACtjE,QAAQ,CAAC8pE,UAAU,CAAC,CAAC;EAEzBxG,GAAG,CAAC+F,UAAU,CAACnd,OAAO,CAACoX,GAAG,CAAC78I,KAAK,EAAE68I,GAAG,CAACx6I,MAAM,CAAC;EAE7Cw6I,GAAG,CAAC99F,MAAM,GAAG,IAAIn5B,4FAAuB,CACtCz/B,QAAQ,CAAC2d,GAAG,CAAC+R,MAAM,EACnBgnI,GAAG,CAAC78I,KAAK,GAAG68I,GAAG,CAACx6I,MAAM,EACtBlc,QAAQ,CAAC2d,GAAG,CAACgS,OAAO,EACpB3vB,QAAQ,CAAC2d,GAAG,CAACiS,MACf,CAAC;EACD8mI,GAAG,CAAC99F,MAAM,CAACV,aAAa,CAACl4D,QAAQ,CAAC2d,GAAG,CAAC+R,MAAM,CAAC;EAC7CgnI,GAAG,CAAC99F,MAAM,CAACl+C,QAAQ,CAACzH,CAAC,GAAGjT,QAAQ,CAAC2d,GAAG,CAACkS,WAAW;EAChD6mI,GAAG,CAAC99F,MAAM,CAACG,sBAAsB,CAAC,CAAC;EACnC29F,GAAG,CAAC99F,MAAM,CAACiE,MAAM,CAACv/D,GAAG,CAACqhE,QAAQ,CAAC3J,MAAM,CAAC/yC,OAAO,CAAC;EAC9Cy0I,GAAG,CAAC99F,MAAM,CAACiE,MAAM,CAACj4C,MAAM,CAAC+5C,QAAQ,CAAC3J,MAAM,CAACC,MAAM,CAAC;EAChDyhG,GAAG,CAAC99F,MAAM,CAACiE,MAAM,CAACj4C,MAAM,CAAC+5C,QAAQ,CAAC3J,MAAM,CAACI,cAAc,CAAC;EAExDshG,GAAG,CAACyG,SAAS,GAAG,IAAI19H,uFAAkB,CAAC,CAAC;EAExCi3H,GAAG,CAACt9D,KAAK,GAAG,IAAI35D,gFAAW,CAAC,CAAC;EAE7B,MAAMzlB,KAAK,GAAG2+I,cAAc,CAAC,CAAC;EAC9BjC,GAAG,CAACt9D,KAAK,CAAC3nE,GAAG,GAAG,IAAIgO,8EAAS,CAACzlB,KAAK,EAAEha,QAAQ,CAAC2d,GAAG,CAACgS,OAAO,EAAE3vB,QAAQ,CAAC2d,GAAG,CAACiS,MAAM,CAAC;EAE/E8mI,GAAG,CAAC35F,IAAI,GAAG,IAAI4B,QAAQ,CAAC1K,OAAO,CAAC,CAAC;EACjCyiG,GAAG,CAACt9D,KAAK,CAACh5F,GAAG,CAACs2J,GAAG,CAAC35F,IAAI,CAAC;EAEvB25F,GAAG,CAACp5C,KAAK,GAAG,IAAI3+C,QAAQ,CAAC1K,OAAO,CAAC,CAAC;EAClCyiG,GAAG,CAAC35F,IAAI,CAAC38D,GAAG,CAACs2J,GAAG,CAACp5C,KAAK,CAAC;EAEvBo5C,GAAG,CAAC2G,cAAc,GAAG,IAAI59H,gFAAW,CAAC,CAAC;EACtCi3H,GAAG,CAAC4G,aAAa,GAAG,IAAI79H,gFAAW,CAAC,CAAC;EACrCi3H,GAAG,CAAC4G,aAAa,CAACzhD,gBAAgB,GAAG,KAAK;EAC1C66C,GAAG,CAAC2G,cAAc,CAACj9J,GAAG,CAACs2J,GAAG,CAAC4G,aAAa,CAAC;EAEzC5G,GAAG,CAAC6G,cAAc,GAAG,IAAI99H,gFAAW,CAAC,CAAC;EACtCi3H,GAAG,CAAC6G,cAAc,CAAC1hD,gBAAgB,GAAG,KAAK;EAC3C66C,GAAG,CAAC4G,aAAa,CAACl9J,GAAG,CAACs2J,GAAG,CAAC6G,cAAc,CAAC;EAEzC,MAAMC,OAAO,GAAG,IAAI/9H,2FAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC;EAC1D+9H,OAAO,CAAC9iJ,QAAQ,CAACpd,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;EACjCkgK,OAAO,CAAC3gG,MAAM,CAACj4C,MAAM,CAAC+5C,QAAQ,CAAC3J,MAAM,CAACE,WAAW,CAAC;EAClDsoG,OAAO,CAAC/jE,UAAU,GAAG,IAAI;EACzB+jE,OAAO,CAAC/iJ,MAAM,CAACm0C,IAAI,GAAG,IAAI;EAC1B4uG,OAAO,CAAC/iJ,MAAM,CAACX,MAAM,GAAG9Z,QAAQ,CAAC2d,GAAG,CAAClD,MAAM,CAACX,MAAM;EAClD0jJ,OAAO,CAAC/iJ,MAAM,CAACm+C,MAAM,CAACiE,MAAM,CAACv/D,GAAG,CAACqhE,QAAQ,CAAC3J,MAAM,CAACM,SAAS,CAAC;EAE3D,MAAMooG,UAAU,GAAGhH,GAAG,CAACtjE,QAAQ,CAACuqE,aAAa,CAAC,CAAC;EAC/C,MAAMC,aAAa,GAAGx+J,IAAI,CAACsM,GAAG,CAACgrJ,GAAG,CAAC78I,KAAK,EAAE68I,GAAG,CAACx6I,MAAM,CAAC,GAAGwhJ,UAAU;EAClEF,OAAO,CAAC/iJ,MAAM,CAACojJ,OAAO,CAAChkJ,KAAK,GAAG+jJ,aAAa;EAC5CJ,OAAO,CAAC/iJ,MAAM,CAACojJ,OAAO,CAAC3hJ,MAAM,GAAG0hJ,aAAa;EAC7CJ,OAAO,CAAC3iJ,MAAM,CAACH,QAAQ,CAACpd,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;EAC1Co5J,GAAG,CAACt9D,KAAK,CAACh5F,GAAG,CAACo9J,OAAO,CAAC;EACtB9G,GAAG,CAACt9D,KAAK,CAACh5F,GAAG,CAACo9J,OAAO,CAAC3iJ,MAAM,CAAC;EAE7B,MAAMijJ,MAAM,GAAG,IAAIr+H,uFAAkB,CAAC,QAAQ,CAAC;EAC/Cq+H,MAAM,CAACjhG,MAAM,CAACj4C,MAAM,CAAC+5C,QAAQ,CAAC3J,MAAM,CAACE,WAAW,CAAC;EACjDwhG,GAAG,CAACt9D,KAAK,CAACh5F,GAAG,CAAC09J,MAAM,CAAC;;EAErB;EACApH,GAAG,CAACllI,IAAI,GAAG,IAAI63H,QAAI,CAACqN,GAAG,CAAC35F,IAAI,EAAE25F,GAAG,CAAC99F,MAAM,CAAC;EACzC,MAAMolG,WAAW,GAAGtH,GAAG,CAAC78I,KAAK,GAAG6jJ,UAAU;EAC1C,MAAMO,YAAY,GAAGvH,GAAG,CAACx6I,MAAM,GAAGwhJ,UAAU;EAE5ChH,GAAG,CAACwH,YAAY,GAAG,IAAIz+H,4FAAuB,CAC5Cu+H,WAAW,EACXC,YAAY,EACZ;IACEG,SAAS,EAAE3+H,uFAAkB;IAAE4+H,SAAS,EAAE5+H,wFAAmB;IAAEutF,MAAM,EAAEvtF,qFAAgB;IAAE6+H,WAAW,EAAE;EACxG,CACF,CAAC;EAED,IAAI5H,GAAG,CAACtjE,QAAQ,CAAC0pE,UAAU,CAAC,CAAC,CAACZ,YAAY,CAAC,qBAAqB,CAAC,EAAE;IACjExF,GAAG,CAACwH,YAAY,CAAChO,YAAY,GAAG,IAAIzwH,uFAAkB,CAAC,CAAC;IACxDi3H,GAAG,CAACwH,YAAY,CAAChO,YAAY,CAACzwJ,IAAI,GAAGggC,4FAAuB;EAC9D;EAEAi3H,GAAG,CAAC+H,aAAa,GAAG,IAAIh/H,4FAAuB,CAC7Cu+H,WAAW,EACXC,YAAY,EACZ;IACEG,SAAS,EAAE3+H,uFAAkB;IAAE4+H,SAAS,EAAE5+H,uFAAkB;IAAEutF,MAAM,EAAEvtF,qFAAgB;IAAE6+H,WAAW,EAAE;EACvG,CACF,CAAC;EAED5H,GAAG,CAACgI,aAAa,GAAG,IAAIj/H,4FAAuB,CAC7Cu+H,WAAW,EACXC,YAAY,EACZ;IACEG,SAAS,EAAE3+H,uFAAkB;IAAE4+H,SAAS,EAAE5+H,uFAAkB;IAAEutF,MAAM,EAAEvtF,qFAAgB;IAAE6+H,WAAW,EAAE;EACvG,CACF,CAAC;EAED5H,GAAG,CAACiI,aAAa,GAAG,IAAIl/H,4FAAuB,CAC7Cu+H,WAAW,EACXC,YAAY,EACZ;IACEG,SAAS,EAAE3+H,uFAAkB;IAAE4+H,SAAS,EAAE5+H,uFAAkB;IAAEutF,MAAM,EAAEvtF,qFAAgB;IAAE6+H,WAAW,EAAE;EACvG,CACF,CAAC;EAED5H,GAAG,CAACkI,QAAQ,GAAGlI,GAAG,CAACgI,aAAa;EAChChI,GAAG,CAACmI,QAAQ,GAAGnI,GAAG,CAACiI,aAAa;EAChCjI,GAAG,CAACoI,SAAS,GAAGpI,GAAG,CAACwH,YAAY;;EAEhC;EACA,IAAIxH,GAAG,CAACtjE,QAAQ,CAAC0pE,UAAU,CAAC,CAAC,CAACZ,YAAY,CAAC,mBAAmB,CAAC,EAAE;IAC/DxF,GAAG,CAACqI,aAAa,GAAG,IAAIt/H,4FAAuB,CAC7Cu+H,WAAW,EACXC,YAAY,EACZ;MACEG,SAAS,EAAE3+H,uFAAkB;MAC7B4+H,SAAS,EAAE5+H,uFAAkB;MAC7ButF,MAAM,EAAEvtF,qFAAgB;MACxBhgC,IAAI,EAAEggC,oFAAe;MACrB6+H,WAAW,EAAE;IACf,CACF,CAAC;IAED5H,GAAG,CAACuI,aAAa,GAAG,IAAIx/H,4FAAuB,CAC7Cu+H,WAAW,EACXC,YAAY,EACZ;MACEG,SAAS,EAAE3+H,uFAAkB;MAC7B4+H,SAAS,EAAE5+H,uFAAkB;MAC7ButF,MAAM,EAAEvtF,qFAAgB;MACxBhgC,IAAI,EAAEggC,oFAAe;MACrB6+H,WAAW,EAAE;IACf,CACF,CAAC;IAED5H,GAAG,CAACwI,aAAa,GAAG,IAAIz/H,4FAAuB,CAC7Cu+H,WAAW,EACXC,YAAY,EACZ;MACEG,SAAS,EAAE3+H,uFAAkB;MAC7B4+H,SAAS,EAAE5+H,uFAAkB;MAC7ButF,MAAM,EAAEvtF,qFAAgB;MACxBhgC,IAAI,EAAEggC,oFAAe;MACrB6+H,WAAW,EAAE;IACf,CACF,CAAC;IAED5H,GAAG,CAACkI,QAAQ,GAAGlI,GAAG,CAACqI,aAAa;IAChCrI,GAAG,CAACmI,QAAQ,GAAGnI,GAAG,CAACuI,aAAa;IAChCvI,GAAG,CAACoI,SAAS,GAAGpI,GAAG,CAACwI,aAAa;EACnC,CAAC,MAAM;IACL,IAAI,CAACn9I,MAAM,CAACjB,IAAI,CAAC,qDAAqD,CAAC;EACzE;EAEA41I,GAAG,CAACyI,UAAU,GAAG,IAAI1/H,4FAAuB,CAC1Cu+H,WAAW,EACXC,YAAY,EACZ;IACEG,SAAS,EAAE3+H,uFAAkB;IAAE4+H,SAAS,EAAE5+H,uFAAkB;IAAEutF,MAAM,EAAEvtF,qFAAgB;IAAE6+H,WAAW,EAAE;EACvG,CACF,CAAC;EAED5H,GAAG,CAAC0I,UAAU,GAAG,IAAI3/H,4FAAuB,CAC1Cu+H,WAAW,EACXC,YAAY,EACZ;IACEG,SAAS,EAAE3+H,uFAAkB;IAAE4+H,SAAS,EAAE5+H,uFAAkB;IAAEutF,MAAM,EAAEvtF,qFAAgB;IAAE6+H,WAAW,EAAE;EACvG,CACF,CAAC;EAED,IAAI,CAACnK,IAAI,GAAGuC,GAAG;EACf,IAAI,CAACoF,WAAW,CAAC,CAAC;EAElB,IAAI,CAACuD,WAAW,CAACr/J,QAAQ,CAAC2d,GAAG,CAACmV,MAAM,KAAK,OAAO,CAAC;EAEjD,IAAI,CAACkmI,UAAU,CAACx8I,WAAW,CAACk6I,GAAG,CAAC+F,UAAU,CAAC9oG,UAAU,CAAC,CAAC,CAAC;;EAExD;EACA,MAAM2rG,KAAK,GAAG,IAAI/gJ,SAAK,CAAC,CAAC;EACzB+gJ,KAAK,CAAC9gJ,UAAU,CAACrD,KAAK,CAACT,QAAQ,GAAG,UAAU;EAC5C4kJ,KAAK,CAAC9gJ,UAAU,CAACrD,KAAK,CAACyhB,KAAK,GAAG,GAAG;EAClC0iI,KAAK,CAAC9gJ,UAAU,CAACrD,KAAK,CAAC85I,MAAM,GAAG,GAAG;EACnC,IAAI,CAAC+D,UAAU,CAACx8I,WAAW,CAAC8iJ,KAAK,CAAC9gJ,UAAU,CAAC;EAC7C,IAAI,CAAC+gJ,IAAI,GAAGD,KAAK;EACjB,IAAI,CAACC,IAAI,CAAClgJ,IAAI,CAACrf,QAAQ,CAAC2d,GAAG,CAACuB,GAAG,CAAC;AAClC,CAAC;;AAED;AACA;AACA;AACA;AACA05I,IAAI,CAAC51J,SAAS,CAACk4J,cAAc,GAAG,YAAY;EAC1C,MAAMh5J,IAAI,GAAG,IAAI;EACjBkL,MAAM,CAACkL,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IACtCpW,IAAI,CAACs9J,SAAS,CAAC,CAAC;EAClB,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA5G,IAAI,CAAC51J,SAAS,CAACy8J,qBAAqB,GAAG,UAAUC,QAAQ,EAAE;EACzD,IAAI,CAACA,QAAQ,EAAE;IACb,OAAOtgK,IAAI,CAACugK,MAAM,CAAC,CAAC,CAACziK,QAAQ,CAAC,CAAC;EACjC;EAEA,IAAIkoB,IAAI,GAAGs6I,QAAQ;EACnB,IAAIE,MAAM,GAAG,CAAC;EACd,OAAO,IAAI,CAAC9F,QAAQ,CAAC72J,cAAc,CAACmiB,IAAI,CAAC,EAAE;IACzCA,IAAI,GAAG,GAAGs6I,QAAQ,KAAKE,MAAM,CAAC1iK,QAAQ,CAAC,CAAC,GAAG;IAC3C0iK,MAAM,EAAE;EACV;EAEA,OAAOx6I,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACAwzI,IAAI,CAAC51J,SAAS,CAAC68J,UAAU,GAAG,UAAUtiD,MAAM,EAAE;EAC5C,IAAI,CAACA,MAAM,EAAE;IACX,OAAO,IAAI;EACb;;EAEA;EACA,MAAMn4F,IAAI,GAAG,IAAI,CAACq6I,qBAAqB,CAACliD,MAAM,CAACn4F,IAAI,CAAC;EACpDm4F,MAAM,CAACn4F,IAAI,GAAGA,IAAI;EAElB,IAAI,CAAC00I,QAAQ,CAAC10I,IAAI,CAAC,GAAGm4F,MAAM;EAC5B,IAAI,CAAC42C,IAAI,CAAC72C,KAAK,CAACl9G,GAAG,CAACm9G,MAAM,CAAC;EAC3B,IAAIA,MAAM,CAACE,eAAe,EAAE;IAC1B,IAAI,CAAC02C,IAAI,CAACoJ,cAAc,CAACn9J,GAAG,CAACm9G,MAAM,CAACE,eAAe,CAAC,CAAC,CAAC;EACxD;EAEA,OAAOr4F,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACAwzI,IAAI,CAAC51J,SAAS,CAAC88J,aAAa,GAAG,UAAUviD,MAAM,EAAE;EAC/C,IAAIn4F,IAAI,GAAG,EAAE;EACb,IAAI5W,GAAG,GAAG,IAAI;EACd,IAAI+uG,MAAM,YAAY1+C,UAAM,EAAE;IAC5B,CAAC;MAAEz5C;IAAK,CAAC,GAAGm4F,MAAM;IAClB/uG,GAAG,GAAG+uG,MAAM;EACd,CAAC,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;IACrCn4F,IAAI,GAAGm4F,MAAM;IACb/uG,GAAG,GAAG,IAAI,CAACsrJ,QAAQ,CAAC10I,IAAI,CAAC;EAC3B;EAEA,IAAI,CAAC5W,GAAG,IAAI,CAAC,IAAI,CAACsrJ,QAAQ,CAAC72J,cAAc,CAACmiB,IAAI,CAAC,IAAI,IAAI,CAAC00I,QAAQ,CAAC10I,IAAI,CAAC,KAAK5W,GAAG,EAAE;IAC9E;EACF;EAEA,IAAI4W,IAAI,KAAK,IAAI,CAAC20I,cAAc,EAAE;IAChC,IAAI,CAACA,cAAc,GAAGr+I,SAAS;EACjC;EAEA,OAAO,IAAI,CAACo+I,QAAQ,CAAC10I,IAAI,CAAC;EAC1B5W,GAAG,CAACwwD,OAAO,CAAC,CAAC,CAAC,CAAC;;EAEf,IAAI,CAACw6F,WAAW,GAAG,IAAI;AACzB,CAAC;;AAED;AACA;AACA;AACA;AACAZ,IAAI,CAAC51J,SAAS,CAAC+8J,cAAc,GAAG,UAAUlgJ,QAAQ,EAAE;EAClD,KAAK,MAAMuF,IAAI,IAAI,IAAI,CAAC00I,QAAQ,EAAE;IAChC,IAAI,IAAI,CAACA,QAAQ,CAAC72J,cAAc,CAACmiB,IAAI,CAAC,EAAE;MACtCvF,QAAQ,CAAC,IAAI,CAACi6I,QAAQ,CAAC10I,IAAI,CAAC,CAAC;IAC/B;EACF;AACF,CAAC;;AAED;AACA;AACA;AACA;AACAwzI,IAAI,CAAC51J,SAAS,CAACg9J,kBAAkB,GAAG,YAAY;EAC9C,IAAI,CAAC,IAAI,CAAC7L,IAAI,IAAI,CAAC,IAAI,CAACA,IAAI,CAAC72C,KAAK,EAAE;IAClC;EACF;EAEA,KAAK,MAAMl4F,IAAI,IAAI,IAAI,CAAC00I,QAAQ,EAAE;IAChC,IAAI,IAAI,CAACA,QAAQ,CAAC72J,cAAc,CAACmiB,IAAI,CAAC,EAAE;MACtC,IAAI,CAAC00I,QAAQ,CAAC10I,IAAI,CAAC,CAAC45C,OAAO,CAAC,CAAC;IAC/B;EACF;EAEA,IAAI,CAAC86F,QAAQ,GAAG,CAAC,CAAC;AACpB,CAAC;;AAED;AACA;AACA;AACA;AACAlB,IAAI,CAAC51J,SAAS,CAACi9J,qBAAqB,GAAG,UAAUpgJ,QAAQ,EAAE;EACzD,IAAI,CAAC,IAAI,CAACs0I,IAAI,IAAI,CAAC,IAAI,CAACA,IAAI,CAAC72C,KAAK,EAAE;IAClC;EACF;EAEA,KAAK,MAAMl4F,IAAI,IAAI,IAAI,CAAC00I,QAAQ,EAAE;IAChC,IAAI,IAAI,CAACA,QAAQ,CAAC72J,cAAc,CAACmiB,IAAI,CAAC,IAC7B,IAAI,CAAC00I,QAAQ,CAAC10I,IAAI,CAAC,YAAYm6F,iBAAa,EAAE;MACrD1/F,QAAQ,CAAC,IAAI,CAACi6I,QAAQ,CAAC10I,IAAI,CAAC,CAAC;IAC/B;EACF;AACF,CAAC;;AAED;AACA;AACA;AACA;AACAwzI,IAAI,CAAC51J,SAAS,CAACk9J,iBAAiB,GAAG,UAAU96I,IAAI,EAAE;EACjDA,IAAI,GAAGA,IAAI,IAAI,IAAI,CAAC20I,cAAc;EAClC,IAAIoG,GAAG,GAAG,IAAI;EACd,IAAI/jC,KAAK,GAAG,IAAI;EAChB,IAAI,CAAC6jC,qBAAqB,CAAE1iD,MAAM,IAAK;IACrC4iD,GAAG,GAAG5iD,MAAM;IACZ,IAAIA,MAAM,CAACn4F,IAAI,KAAKA,IAAI,EAAE;MACxBg3G,KAAK,GAAG7e,MAAM;IAChB;EACF,CAAC,CAAC;EACF,OAAO6e,KAAK,IAAI+jC,GAAG;AACrB,CAAC;;AAED;AACA;AACA;AACA;AACAvH,IAAI,CAAC51J,SAAS,CAACo9J,gBAAgB,GAAG,YAAY;EAC5C,IAAID,GAAG,GAAG,IAAI;EACd,IAAI,CAACJ,cAAc,CAAExiD,MAAM,IAAK;IAC9B,IAAIA,MAAM,YAAY0N,gBAAY,EAAE;MAClCk1C,GAAG,GAAG5iD,MAAM;IACd;EACF,CAAC,CAAC;EACF,OAAO4iD,GAAG;AACZ,CAAC;;AAED;AACA;AACA;AACA;AACAvH,IAAI,CAAC51J,SAAS,CAACq9J,oBAAoB,GAAG,UAAUx+H,OAAO,EAAE;EACvD,IAAI,CAACA,OAAO,EAAE;IACZ,OAAO,IAAI;EACb;EAEA,IAAI2kB,KAAK,GAAG,IAAI;EAChB,IAAI,CAACy5G,qBAAqB,CAAE1iD,MAAM,IAAK;IACrC,IAAIA,MAAM,CAACz7E,UAAU,CAAC,CAAC,KAAKD,OAAO,EAAE;MACnC2kB,KAAK,GAAG+2D,MAAM;IAChB;EACF,CAAC,CAAC;EACF,OAAO/2D,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACAoyG,IAAI,CAAC51J,SAAS,CAACs9J,UAAU,GAAG,YAAY;EACtC,OAAOx/J,MAAM,CAACiQ,IAAI,CAAC,IAAI,CAAC+oJ,QAAQ,CAAC;AACnC,CAAC;;AAED;AACA;AACA;AACAlB,IAAI,CAAC51J,SAAS,CAACu9J,sBAAsB,GAAG,YAAY;EAClD,IAAIlxJ,KAAK,GAAG,CAAC;EACb,IAAI,CAAC4wJ,qBAAqB,CAAC,MAAM5wJ,KAAK,EAAE,CAAC;EACzC,OAAOA,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACAupJ,IAAI,CAAC51J,SAAS,CAACw9J,gBAAgB,GAAG,YAAY;EAC5C,OAAO,IAAI,CAACzG,cAAc;AAC5B,CAAC;;AAED;AACA;AACA;AACA;AACAnB,IAAI,CAAC51J,SAAS,CAACy9J,gBAAgB,GAAG,UAAUr7I,IAAI,EAAE;EAChD,IAAI,CAAC,IAAI,CAAC00I,QAAQ,CAAC10I,IAAI,CAAC,EAAE;IACxB;EACF;EAEA,IAAI,CAAC20I,cAAc,GAAG30I,IAAI;AAC5B,CAAC;;AAED;AACA;AACA;AACA;AACA;AACAwzI,IAAI,CAAC51J,SAAS,CAAC09J,GAAG,GAAG,YAAY;EAC/B,IAAI,CAAC,IAAI,CAACrH,QAAQ,EAAE;IAClB,IAAI,CAACA,QAAQ,GAAG,IAAI;IACpB,IAAI,IAAI,CAACC,QAAQ,EAAE;MACjB,IAAI,CAACA,QAAQ,GAAG,KAAK;MACrB;IACF;IAEA,IAAI,CAAC+B,eAAe,CAACz2I,MAAM,CAAC,IAAI,CAAC;IACjC,IAAI,CAACm0I,aAAa,CAAC1G,MAAM,CAAC,CAAC;IAE3B,IAAI,CAAC0J,sBAAsB,CAAC,MAAM,IAAI,CAAC4E,OAAO,CAAC,CAAC,CAAC;EACnD;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA/H,IAAI,CAAC51J,SAAS,CAAC44J,IAAI,GAAG,YAAY;EAChC,IAAI,IAAI,CAACvC,QAAQ,EAAE;IACjB,IAAI,CAACuH,qBAAqB,CAAC,CAAC;IAC5B,IAAI,CAACC,oBAAoB,CAAC,CAAC;IAC3B,IAAI,CAACxF,eAAe,CAACz2I,MAAM,CAAC,KAAK,CAAC;IAClC,IAAI,CAACm0I,aAAa,CAAC3G,KAAK,CAAC,CAAC;IAC1B,IAAI,CAACkH,QAAQ,GAAG,IAAI;EACtB;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACAV,IAAI,CAAC51J,SAAS,CAAC89J,aAAa,GAAG,UAAUn8I,OAAO,EAAE;EAChD,IAAI,CAAC80I,eAAe,GAAG90I,OAAO;EAC9B,IAAI,CAAC02I,eAAe,CAAC/V,aAAa,CAAC3gI,OAAO,CAAC;AAC7C,CAAC;;AAED;AACA;AACA;AACA;AACAi0I,IAAI,CAAC51J,SAAS,CAACw8J,SAAS,GAAG,YAAY;EACrC,MAAM9I,GAAG,GAAG,IAAI,CAACvC,IAAI;EACrB,IAAI,CAACuC,GAAG,EAAE;IACR;EACF;EAEA,IAAI,CAAC8C,WAAW,GAAG,IAAI;EAEvB9C,GAAG,CAAC78I,KAAK,GAAG,IAAI,CAACm/I,UAAU,CAACoD,WAAW;EACvC1F,GAAG,CAACx6I,MAAM,GAAG,IAAI,CAAC88I,UAAU,CAACqD,YAAY;EAEzC3F,GAAG,CAAC99F,MAAM,CAACR,MAAM,GAAGs+F,GAAG,CAAC78I,KAAK,GAAG68I,GAAG,CAACx6I,MAAM;EAC1Cw6I,GAAG,CAAC99F,MAAM,CAACV,aAAa,CAACl4D,QAAQ,CAAC2d,GAAG,CAAC+R,MAAM,CAAC;EAC7CgnI,GAAG,CAAC99F,MAAM,CAACG,sBAAsB,CAAC,CAAC;EAEnC29F,GAAG,CAACtjE,QAAQ,CAACksD,OAAO,CAACoX,GAAG,CAAC78I,KAAK,EAAE68I,GAAG,CAACx6I,MAAM,CAAC;EAC3Cw6I,GAAG,CAAC+F,UAAU,CAACnd,OAAO,CAACoX,GAAG,CAAC78I,KAAK,EAAE68I,GAAG,CAACx6I,MAAM,CAAC;EAE7C,IAAI,CAACsE,aAAa,CAAC;IAAE/gB,IAAI,EAAE;EAAS,CAAC,CAAC;AACxC,CAAC;AAEDm5J,IAAI,CAAC51J,SAAS,CAAC+9J,uBAAuB,GAAG,UAAUlnJ,KAAK,EAAEqC,MAAM,EAAE4W,MAAM,EAAE;EACxE,MAAM4jI,GAAG,GAAG,IAAI,CAACvC,IAAI;EACrBrhI,MAAM,GAAGA,MAAM,IAAI,MAAM;EACzB,MAAMkuI,UAAU,GAAIluI,MAAM,KAAK,MAAM,IAAIA,MAAM,KAAK,UAAW;EAC/D,MAAMmuI,KAAK,GAAGD,UAAU,GAAG,CAAC,GAAG,GAAG;EAClCtK,GAAG,CAACwH,YAAY,CAAC5e,OAAO,CAAC2hB,KAAK,GAAGpnJ,KAAK,EAAEqC,MAAM,CAAC;EAC/Cw6I,GAAG,CAAC+H,aAAa,CAACnf,OAAO,CAAC2hB,KAAK,GAAGpnJ,KAAK,EAAEqC,MAAM,CAAC;EAChDw6I,GAAG,CAACgI,aAAa,CAACpf,OAAO,CAAC2hB,KAAK,GAAGpnJ,KAAK,EAAEqC,MAAM,CAAC;EAChDw6I,GAAG,CAACiI,aAAa,CAACrf,OAAO,CAAC2hB,KAAK,GAAGpnJ,KAAK,EAAEqC,MAAM,CAAC;EAChD,IAAIw6I,GAAG,CAACqI,aAAa,EAAE;IACrBrI,GAAG,CAACqI,aAAa,CAACzf,OAAO,CAAC2hB,KAAK,GAAGpnJ,KAAK,EAAEqC,MAAM,CAAC;EAClD;EACA,IAAIw6I,GAAG,CAACuI,aAAa,EAAE;IACrBvI,GAAG,CAACuI,aAAa,CAAC3f,OAAO,CAAC2hB,KAAK,GAAGpnJ,KAAK,EAAEqC,MAAM,CAAC;EAClD;EACA,IAAIw6I,GAAG,CAACwI,aAAa,EAAE;IACrBxI,GAAG,CAACwI,aAAa,CAAC5f,OAAO,CAAC2hB,KAAK,GAAGpnJ,KAAK,EAAEqC,MAAM,CAAC;EAClD;EACA,IAAI8kJ,UAAU,EAAE;IACdtK,GAAG,CAACyI,UAAU,CAAC7f,OAAO,CAACzlI,KAAK,EAAEqC,MAAM,CAAC;IACrCw6I,GAAG,CAAC0I,UAAU,CAAC9f,OAAO,CAACzlI,KAAK,EAAEqC,MAAM,CAAC;EACvC;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA08I,IAAI,CAAC51J,SAAS,CAAC29J,OAAO,GAAG,YAAY;EACnC,IAAI,IAAI,CAACrH,QAAQ,EAAE;IACjB,IAAI,CAACD,QAAQ,GAAG,KAAK;IACrB,IAAI,CAACC,QAAQ,GAAG,KAAK;IACrB;EACF;EAEA,IAAI,CAACiG,IAAI,CAAC1hJ,MAAM,CAAC,CAAC;EAElB,IAAI,CAACk+I,sBAAsB,CAAC,MAAM,IAAI,CAAC4E,OAAO,CAAC,CAAC,CAAC;EAEjD,IAAI,CAACO,SAAS,CAAC,CAAC;EAChB,IAAI,IAAI,CAAC1H,WAAW,EAAE;IACpB,IAAI,CAAC2H,SAAS,CAAC,CAAC;IAChB,IAAI,CAAC3H,WAAW,GAAG,CAACx5J,QAAQ,CAAC2d,GAAG,CAACiU,aAAa,IAAI5xB,QAAQ,CAAC2d,GAAG,CAACmV,MAAM,KAAK,OAAO;EACnF;AACF,CAAC;AAED8lI,IAAI,CAAC51J,SAAS,CAACo+J,iBAAiB,GAAG,YAAY;EAC7C;EACA,IAAItnJ,MAAM,GAAG,CAAC;EACd,IAAI,CAACimJ,cAAc,CAAExiD,MAAM,IAAK;IAC9BzjG,MAAM,GAAG1a,IAAI,CAACsM,GAAG,CAACoO,MAAM,EAAEyjG,MAAM,CAACjsE,aAAa,CAAC,CAAC,CAACf,cAAc,CAACz2B,MAAM,CAAC;EACzE,CAAC,CAAC;EACF,OAAOA,MAAM,GAAG,IAAI,CAACuhJ,eAAe,CAAChV,QAAQ,CAAC,CAAC;AACjD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAuS,IAAI,CAAC51J,SAAS,CAAC03J,MAAM,GAAI,YAAY;EACnC,MAAM2G,oBAAoB,GAAG,IAAI5hI,iFAAY,CAAC,CAAC;EAC/C,MAAM6hI,iBAAiB,GAAG,IAAI7hI,+EAAU,CAAC,CAAC;EAC1C,MAAM8hI,KAAK,GAAG,IAAI9hI,+EAAU,CAAC,CAAC;EAE9B,MAAM+hI,UAAU,GAAG,IAAI/hI,kFAAa,CAAC,CAAC;EAEtC,MAAMgiI,OAAO,GAAG,CACd,IAAIhiI,kFAAa,CAAC,CAAC,EACnB,IAAIA,kFAAa,CAAC,CAAC,EACnB,IAAIA,kFAAa,CAAC,CAAC,EACnB,IAAIA,kFAAa,CAAC,CAAC,CACpB;EAED,OAAO,UAAU0S,MAAM,EAAEooH,GAAG,EAAE;IAC5BgH,KAAK,CAAC7wH,SAAS,CAAC,CAAC;IAEjB,IAAI,CAACqvH,cAAc,CAAExiD,MAAM,IAAK;MAC9B8jD,oBAAoB,CAAC5yJ,IAAI,CAAC8uG,MAAM,CAACjsE,aAAa,CAAC,CAAC,CAACf,cAAc,CAAC;MAChE8wH,oBAAoB,CAACxvH,YAAY,CAAC0rE,MAAM,CAACxnD,WAAW,CAAC,CAAClkB,YAAY,CAACM,MAAM,CAAC;MAC1EkvH,oBAAoB,CAAC11E,cAAc,CAAC21E,iBAAiB,CAAC;MACtDC,KAAK,CAACG,KAAK,CAACJ,iBAAiB,CAAC;IAChC,CAAC,CAAC;IACFC,KAAK,CAAC1wH,SAAS,CAAC0pH,GAAG,CAACh7J,MAAM,CAAC;IAE3BiiK,UAAU,CAAC/yJ,IAAI,CAAC0jC,MAAM,CAAC,CAAC6jB,MAAM,CAAC,CAAC;IAChCukG,GAAG,CAACh7J,MAAM,CAACsyC,YAAY,CAAC2vH,UAAU,CAAC;IAEnC,MAAM;MAAE71J;IAAI,CAAC,GAAG41J,KAAK;IACrB,MAAM;MAAE71J;IAAI,CAAC,GAAG61J,KAAK;IACrBE,OAAO,CAAC,CAAC,CAAC,CAACnkK,GAAG,CAACqO,GAAG,CAACwB,CAAC,EAAExB,GAAG,CAACiG,CAAC,EAAEjG,GAAG,CAACsH,CAAC,CAAC,CAAC,CAAC;IACrCwuJ,OAAO,CAAC,CAAC,CAAC,CAACnkK,GAAG,CAACoO,GAAG,CAACyB,CAAC,EAAExB,GAAG,CAACiG,CAAC,EAAEjG,GAAG,CAACsH,CAAC,CAAC,CAAC,CAAC;IACrCwuJ,OAAO,CAAC,CAAC,CAAC,CAACnkK,GAAG,CAACqO,GAAG,CAACwB,CAAC,EAAEzB,GAAG,CAACkG,CAAC,EAAEjG,GAAG,CAACsH,CAAC,CAAC,CAAC,CAAC;IACrCwuJ,OAAO,CAAC,CAAC,CAAC,CAACnkK,GAAG,CAACqO,GAAG,CAACwB,CAAC,EAAExB,GAAG,CAACiG,CAAC,EAAElG,GAAG,CAACuH,CAAC,CAAC,CAAC,CAAC;IACrC,KAAK,IAAIhU,CAAC,GAAG,CAAC,EAAEhI,CAAC,GAAGwqK,OAAO,CAACvqK,MAAM,EAAE+H,CAAC,GAAGhI,CAAC,EAAEgI,CAAC,EAAE,EAAE;MAC9CwiK,OAAO,CAACxiK,CAAC,CAAC,CAAC4yC,YAAY,CAAC2vH,UAAU,CAAC;IACrC;IAEAjH,GAAG,CAACC,QAAQ,CAACl9J,GAAG,CACd8B,IAAI,CAACuI,GAAG,CAAC85J,OAAO,CAAC,CAAC,CAAC,CAACt0J,CAAC,GAAGs0J,OAAO,CAAC,CAAC,CAAC,CAACt0J,CAAC,CAAC,EACrC/N,IAAI,CAACuI,GAAG,CAAC85J,OAAO,CAAC,CAAC,CAAC,CAAC7vJ,CAAC,GAAG6vJ,OAAO,CAAC,CAAC,CAAC,CAAC7vJ,CAAC,CAAC,EACrCxS,IAAI,CAACuI,GAAG,CAAC85J,OAAO,CAAC,CAAC,CAAC,CAACxuJ,CAAC,GAAGwuJ,OAAO,CAAC,CAAC,CAAC,CAACxuJ,CAAC,CACtC,CAAC,CAAC4rB,cAAc,CAAC,GAAG,CAAC;EACvB,CAAC;AACH,CAAC,CAAC,CAAE;AAEJ+5H,IAAI,CAAC51J,SAAS,CAAC2+J,UAAU,GAAG,YAAY;EACtC,MAAMjL,GAAG,GAAG,IAAI,CAACvC,IAAI;EAErB,IAAIn0J,QAAQ,CAAC2d,GAAG,CAAC8T,GAAG,EAAE;IACpB,IAAI,OAAOilI,GAAG,CAACt9D,KAAK,CAAC3nE,GAAG,KAAK,WAAW,IAAIilI,GAAG,CAACt9D,KAAK,CAAC3nE,GAAG,KAAK,IAAI,EAAE;MAClE,MAAMzX,KAAK,GAAG2+I,cAAc,CAAC,CAAC;MAC9BjC,GAAG,CAACt9D,KAAK,CAAC3nE,GAAG,GAAG,IAAIgO,8EAAS,CAACzlB,KAAK,CAAC;MACpC,IAAI,CAAC4nJ,sBAAsB,CAAC;QAAEnwI,GAAG,EAAEzxB,QAAQ,CAAC2d,GAAG,CAAC8T;MAAI,CAAC,CAAC;IACxD;IACA2mI,cAAc,CAAC1B,GAAG,CAACt9D,KAAK,CAAC3nE,GAAG,EAAEilI,GAAG,CAAC99F,MAAM,CAACl+C,QAAQ,CAACzH,CAAC,EAAE,IAAI,CAACmuJ,iBAAiB,CAAC,CAAC,CAAC;EAChF,CAAC,MAAM,IAAI1K,GAAG,CAACt9D,KAAK,CAAC3nE,GAAG,EAAE;IACxBilI,GAAG,CAACt9D,KAAK,CAAC3nE,GAAG,GAAG/V,SAAS;IACzB,IAAI,CAACkmJ,sBAAsB,CAAC;MAAEnwI,GAAG,EAAEzxB,QAAQ,CAAC2d,GAAG,CAAC8T;IAAI,CAAC,CAAC;EACxD;AACF,CAAC;AAEDmnI,IAAI,CAAC51J,SAAS,CAACk+J,SAAS,GAAG,YAAY;EACrC,IAAI,IAAI,CAACW,2BAA2B,KAAKnmJ,SAAS,IAAI,IAAI,CAACmmJ,2BAA2B,CAAC,CAAC,IAAI,CAAC,IAAI,CAACtI,SAAS,EAAE;IAC3G,IAAI,CAACuI,WAAW,CAAC,CAAC;EACpB;EAEA,IAAI,CAACzG,eAAe,CAACx9I,MAAM,CAAC,CAAC;EAE7B,IAAI,CAACoiJ,qBAAqB,CAAE1iD,MAAM,IAAK;IACrCA,MAAM,CAACz7E,UAAU,CAAC,CAAC,CAACjkB,MAAM,CAAC,CAAC;EAC9B,CAAC,CAAC;EAEF,IAAI7d,QAAQ,CAAC2d,GAAG,CAACmU,SAAS,IAAI,CAAC,IAAI,CAAC8nI,QAAQ,CAAC1iK,MAAM,IAAI,CAAC,IAAI,CAACqiK,SAAS,IAAI,IAAI,CAACwI,YAAY,CAAC,CAAC,EAAE;IAC7F,IAAI,CAACllK,OAAO,CAAC,CAAC;EAChB;EAEA,IAAI,CAAC,IAAI,CAAC+8J,QAAQ,CAAC1iK,MAAM,IAAI,CAAC,IAAI,CAACqiK,SAAS,IAAI,CAAC,IAAI,CAACwI,YAAY,CAAC,CAAC,EAAE;IACpE,IAAI,CAACC,WAAW,CAAC,CAAC;EACpB;EAEA,IAAI,CAACL,UAAU,CAAC,CAAC;EAEjB,IAAI,IAAI,CAACxN,IAAI,CAAC/gE,QAAQ,CAACghE,EAAE,CAACzvI,OAAO,EAAE;IACjC,IAAI,CAACs9I,KAAK,CAAC3K,mBAAmB,CAAC,CAAC;EAClC;AACF,CAAC;AAEDsB,IAAI,CAAC51J,SAAS,CAACm+J,SAAS,GAAG,YAAY;EACrC,MAAMzK,GAAG,GAAG,IAAI,CAACvC,IAAI;;EAErB;EACAuC,GAAG,CAACt9D,KAAK,CAACzjC,iBAAiB,CAAC,CAAC;EAC7B+gG,GAAG,CAAC99F,MAAM,CAACjD,iBAAiB,CAAC,CAAC;EAE9B,IAAI,CAACusG,qBAAqB,CAAC,IAAI,CAACd,iBAAiB,CAAC,CAAC,CAAC;EACpD,IAAI,CAACe,kBAAkB,CAAC,CAAC;EAEzBzL,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC,IAAI,CAAC;EAClC1L,GAAG,CAACtjE,QAAQ,CAACjzF,KAAK,CAAC,CAAC;EAEpB,IAAI,CAACkiK,YAAY,CAACriK,QAAQ,CAAC2d,GAAG,CAACmV,MAAM,CAAC;AACxC,CAAC;AAED8lI,IAAI,CAAC51J,SAAS,CAACq/J,YAAY,GAAI,YAAY;EACzC,MAAMC,YAAY,GAAG,IAAIxR,wBAAgB,CAAC,CAAC;EAC3C,MAAMyR,KAAK,GAAG,IAAI9iI,kFAAa,CAAC,CAAC;EAEjC,OAAO,UAAU3M,MAAM,EAAE;IACvB,MAAM4jI,GAAG,GAAG,IAAI,CAACvC,IAAI;IACrB,MAAM;MAAE/gE;IAAS,CAAC,GAAGsjE,GAAG;IAExBtjE,QAAQ,CAACl1C,OAAO,CAACqkH,KAAK,CAAC;IAEvB,IAAIzvI,MAAM,KAAK,MAAM,EAAE;MACrB4jI,GAAG,CAAC99F,MAAM,CAAC4pG,KAAK,GAAG9L,GAAG,CAAC99F,MAAM,CAACl+C,QAAQ,CAACzH,CAAC,CAAC,CAAC;MAC1CyjJ,GAAG,CAACyG,SAAS,CAAC/kG,MAAM,GAAG,GAAG;;MAE1B;MACA;MACA,IAAItlC,MAAM,KAAK,UAAU,EAAE;QACzB4jI,GAAG,CAACyG,SAAS,CAACt/I,MAAM,CAAC64I,GAAG,CAAC99F,MAAM,CAAC;MAClC,CAAC,MAAM;QACL89F,GAAG,CAACyG,SAAS,CAACxkG,eAAe,CAAC+9F,GAAG,CAAC99F,MAAM,EAAE54D,QAAQ,CAAC2d,GAAG,CAAC+R,MAAM,CAAC;MAChE;IACF;;IAEA;IACA,MAAMguI,UAAU,GAAGhH,GAAG,CAACtjE,QAAQ,CAACuqE,aAAa,CAAC,CAAC;IAC/C,IAAI,CAACoD,uBAAuB,CAACwB,KAAK,CAAC1oJ,KAAK,GAAG6jJ,UAAU,EAAE6E,KAAK,CAACrmJ,MAAM,GAAGwhJ,UAAU,EAAE5qI,MAAM,CAAC;IAEzF,IAAI,CAAC2vI,gBAAgB,CAAC,CAAC;IAEvB,QAAQ3vI,MAAM;MACZ,KAAK,OAAO;MACZ,KAAK,MAAM;QACT,IAAI,CAAC4vI,YAAY,CAAChM,GAAG,CAAC99F,MAAM,EAAE,KAAK,CAAC;QACpC;MACF,KAAK,QAAQ;MACb,KAAK,WAAW;QACdw6B,QAAQ,CAACuvE,cAAc,CAAC,IAAI,CAAC;QAE7BvvE,QAAQ,CAACwvE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAEL,KAAK,CAAC1oJ,KAAK,GAAG,CAAC,EAAE0oJ,KAAK,CAACrmJ,MAAM,CAAC;QACxDk3E,QAAQ,CAACy2D,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE0Y,KAAK,CAAC1oJ,KAAK,GAAG,CAAC,EAAE0oJ,KAAK,CAACrmJ,MAAM,CAAC;QACzD,IAAI,CAACwmJ,YAAY,CAAC,IAAI,CAACvO,IAAI,CAACgJ,SAAS,CAAC0F,OAAO,EAAE/vI,MAAM,KAAK,WAAW,CAAC;QAEtEsgE,QAAQ,CAACwvE,UAAU,CAACL,KAAK,CAAC1oJ,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE0oJ,KAAK,CAAC1oJ,KAAK,GAAG,CAAC,EAAE0oJ,KAAK,CAACrmJ,MAAM,CAAC;QACtEk3E,QAAQ,CAACy2D,WAAW,CAAC0Y,KAAK,CAAC1oJ,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE0oJ,KAAK,CAAC1oJ,KAAK,GAAG,CAAC,EAAE0oJ,KAAK,CAACrmJ,MAAM,CAAC;QACvE,IAAI,CAACwmJ,YAAY,CAAC,IAAI,CAACvO,IAAI,CAACgJ,SAAS,CAAC2F,OAAO,EAAEhwI,MAAM,KAAK,WAAW,CAAC;QAEtEsgE,QAAQ,CAACuvE,cAAc,CAAC,KAAK,CAAC;QAC9B;MACF,KAAK,UAAU;QACb,IAAI,CAACD,YAAY,CAAC,IAAI,CAACvO,IAAI,CAACgJ,SAAS,CAAC0F,OAAO,EAAE,KAAK,EAAEnM,GAAG,CAACyI,UAAU,CAAC;QACrE,IAAI,CAACuD,YAAY,CAAC,IAAI,CAACvO,IAAI,CAACgJ,SAAS,CAAC2F,OAAO,EAAE,KAAK,EAAEpM,GAAG,CAAC0I,UAAU,CAAC;QACrEhsE,QAAQ,CAACgvE,eAAe,CAAC,IAAI,CAAC;QAC9BE,YAAY,CAAC7qG,QAAQ,CAACs5F,IAAI,CAACrxI,KAAK,GAAGg3I,GAAG,CAACyI,UAAU,CAACzsG,OAAO;QACzD4vG,YAAY,CAAC7qG,QAAQ,CAACu5F,IAAI,CAACtxI,KAAK,GAAGg3I,GAAG,CAAC0I,UAAU,CAAC1sG,OAAO;QACzDgkG,GAAG,CAACtjE,QAAQ,CAACp8B,gBAAgB,CAACsrG,YAAY,CAAC;QAC3C;MACF;IACF;IAEA5L,GAAG,CAAC+F,UAAU,CAAC1lG,MAAM,CAAC2/F,GAAG,CAACt9D,KAAK,EAAEs9D,GAAG,CAAC99F,MAAM,CAAC;IAE5C,IAAI54D,QAAQ,CAAC2d,GAAG,CAAC6T,IAAI,IAAIklI,GAAG,CAACllI,IAAI,IAAI,CAACklI,GAAG,CAACtjE,QAAQ,CAACghE,EAAE,CAACzvI,OAAO,EAAE;MAC7D+xI,GAAG,CAACllI,IAAI,CAACulC,MAAM,CAACq8B,QAAQ,CAAC;IAC3B;EACF,CAAC;AACH,CAAC,CAAC,CAAE;AAEJwlE,IAAI,CAAC51J,SAAS,CAAC+/J,iBAAiB,GAAG,YAAY;EAC7C,MAAMrM,GAAG,GAAG,IAAI,CAACvC,IAAI;EACrB,MAAMn6I,KAAK,GAAG2+I,cAAc,CAAC,CAAC;EAC9B,IAAIjC,GAAG,EAAE;IACP,IAAIA,GAAG,CAACt9D,KAAK,CAAC3nE,GAAG,EAAE;MACjBilI,GAAG,CAACt9D,KAAK,CAAC3nE,GAAG,CAACzX,KAAK,CAAC1c,GAAG,CAAC0c,KAAK,CAAC;IAChC;IACA08I,GAAG,CAACtjE,QAAQ,CAAC6pE,aAAa,CAACj9J,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAACnU,KAAK,EAAEtb,MAAM,CAAC,CAACsB,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAAC+C,WAAW,CAAC,CAAC;EACzF;EACA,IAAI,CAACsoI,WAAW,GAAG,IAAI;AACzB,CAAC;AAEDZ,IAAI,CAAC51J,SAAS,CAACggK,kBAAkB,GAAG,YAAY;EAC9C,MAAMtM,GAAG,GAAG,IAAI,CAACvC,IAAI;EACrB,MAAMn6I,KAAK,GAAG2+I,cAAc,CAAC,CAAC;EAC9B,IAAIjC,GAAG,IAAIA,GAAG,CAACt9D,KAAK,CAAC3nE,GAAG,EAAE;IACxBilI,GAAG,CAACt9D,KAAK,CAAC3nE,GAAG,CAACzX,KAAK,CAAC1c,GAAG,CAAC0c,KAAK,CAAC;EAChC;EACA,IAAI,CAACw/I,WAAW,GAAG,IAAI;AACzB,CAAC;AAEDZ,IAAI,CAAC51J,SAAS,CAAC4+J,sBAAsB,GAAG,UAAUthJ,MAAM,EAAE;EACxD,IAAI,CAAC6zI,IAAI,CAACp3F,IAAI,CAAC9jD,QAAQ,CAAEzK,GAAG,IAAK;IAC/B,IAAI,CAACA,GAAG,YAAYixB,+EAAU,IAAIjxB,GAAG,YAAYixB,uFAAkB,IAAIjxB,GAAG,YAAYixB,+EAAU,KACzFjxB,GAAG,CAAC7P,QAAQ,YAAYi3F,oBAAY,EAAE;MAC3CpnF,GAAG,CAAC7P,QAAQ,CAACy+D,SAAS,CAAC98C,MAAM,CAAC;MAC9B9R,GAAG,CAAC7P,QAAQ,CAACs0D,WAAW,GAAG,IAAI;IACjC;EACF,CAAC,CAAC;AACJ,CAAC;AAED2lG,IAAI,CAAC51J,SAAS,CAACigK,UAAU,GAAG,UAAU3jJ,EAAE,EAAE4jJ,YAAY,EAAEC,aAAa,EAAE;EACrE,MAAMzM,GAAG,GAAG,IAAI,CAACvC,IAAI;EACrB,MAAMiP,EAAE,GAAG1M,GAAG,CAACtjE,QAAQ,CAAC0pE,UAAU,CAAC,CAAC;EACpC,MAAM90I,GAAG,GAAGo7I,EAAE,CAAClH,YAAY,CAAC,oBAAoB,CAAC;EACjD,MAAM;IAAEptJ;EAAW,CAAC,GAAG4nJ,GAAG,CAACtjE,QAAQ;EAEnC,IAAI,CAAC9zE,EAAE,EAAE;IACP0I,GAAG,CAACq7I,gBAAgB,CAAC,CAACD,EAAE,CAACE,iBAAiB,EAAE,IAAI,CAAC,CAAC;IAClD;EACF;;EAEA;EACA5M,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAACe,aAAa,CAAC;EAC3C,MAAMI,GAAG,GAAGz0J,UAAU,CAACzR,GAAG,CAAC8lK,aAAa,CAACzwG,OAAO,CAAC,CAAC8wG,cAAc;EAChEJ,EAAE,CAACK,WAAW,CAACL,EAAE,CAACM,UAAU,EAAEH,GAAG,CAAC;;EAElC;EACA7M,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAACc,YAAY,CAAC;EAC1C,MAAMS,EAAE,GAAG70J,UAAU,CAACzR,GAAG,CAAC6lK,YAAY,CAAC,CAACU,kBAAkB;EAC1D,MAAMv3E,EAAE,GAAGv9E,UAAU,CAACzR,GAAG,CAAC6lK,YAAY,CAACxwG,OAAO,CAAC,CAAC8wG,cAAc;;EAE9D;EACAJ,EAAE,CAACS,eAAe,CAACT,EAAE,CAACU,WAAW,EAAEH,EAAE,CAAC;EACtCA,EAAE,CAAC9pJ,KAAK,GAAGqpJ,YAAY,CAACrpJ,KAAK;EAC7B8pJ,EAAE,CAACznJ,MAAM,GAAGgnJ,YAAY,CAAChnJ,MAAM;EAC/BknJ,EAAE,CAACW,oBAAoB,CAACX,EAAE,CAACU,WAAW,EAAEV,EAAE,CAACE,iBAAiB,EAAEF,EAAE,CAACM,UAAU,EAAEr3E,EAAE,EAAE,CAAC,CAAC;EACnF+2E,EAAE,CAACW,oBAAoB,CAACX,EAAE,CAACU,WAAW,EAAE97I,GAAG,CAACg8I,uBAAuB,EAAEZ,EAAE,CAACM,UAAU,EAAEH,GAAG,EAAE,CAAC,CAAC;;EAE3F;EACAv7I,GAAG,CAACq7I,gBAAgB,CAAC,CAACD,EAAE,CAACE,iBAAiB,EAAEt7I,GAAG,CAACg8I,uBAAuB,CAAC,CAAC;AAC3E,CAAC;AAEDpL,IAAI,CAAC51J,SAAS,CAAC0/J,YAAY,GAAI,YAAY;EACzC,OAAO,UAAU9pG,MAAM,EAAEqrG,UAAU,EAAEppJ,MAAM,EAAE;IAC3CopJ,UAAU,GAAGA,UAAU,IAAI,KAAK;IAChCppJ,MAAM,GAAGA,MAAM,IAAI,IAAI;IAEvB,MAAM67I,GAAG,GAAG,IAAI,CAACvC,IAAI;;IAErB;IACAuC,GAAG,CAACtjE,QAAQ,CAAC6pE,aAAa,CAACj9J,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAACnU,KAAK,EAAEtb,MAAM,CAAC,CAACsB,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAAC+C,WAAW,CAAC,CAAC;IACvFwlI,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAACvnJ,MAAM,CAAC;IACpC67I,GAAG,CAACtjE,QAAQ,CAACjzF,KAAK,CAAC,CAAC;IACpB,IAAIu2J,GAAG,CAACtjE,QAAQ,CAACghE,EAAE,CAACzvI,OAAO,EAAE;MAC3B+xI,GAAG,CAACtjE,QAAQ,CAACr8B,MAAM,CAAC2/F,GAAG,CAACt9D,KAAK,EAAExgC,MAAM,CAAC;MACtC;IACF;;IAEA;IACA89F,GAAG,CAACtjE,QAAQ,CAAC6pE,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC;IACzCvG,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC1L,GAAG,CAACiI,aAAa,CAAC;IAC/CjI,GAAG,CAACtjE,QAAQ,CAAC8pE,UAAU,CAAC,CAAC;IAEzBxG,GAAG,CAACtjE,QAAQ,CAAC6pE,aAAa,CAACj9J,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAACnU,KAAK,EAAEtb,MAAM,CAAC,CAACsB,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAAC+C,WAAW,CAAC,CAAC;IACvFwlI,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC1L,GAAG,CAACwH,YAAY,CAAC;IAC9CxH,GAAG,CAACtjE,QAAQ,CAACjzF,KAAK,CAAC,CAAC;IAEpB,MAAM+jK,cAAc,GAAI,IAAI,CAAChE,iBAAiB,CAAC,CAAC,KAAK,IAAK;IAC1D,MAAMiE,YAAY,GAAG,IAAI,CAAC/D,gBAAgB,CAAC,CAAC;IAC5C,MAAMgE,IAAI,GAAGF,cAAc,IAAIlkK,QAAQ,CAAC2d,GAAG,CAACwU,EAAE;IAE9C,IAAIiyI,IAAI,EAAE;MACR,IAAI,CAACnB,UAAU,CAAC,IAAI,EAAEvM,GAAG,CAACwH,YAAY,EAAExH,GAAG,CAACiI,aAAa,CAAC;IAC5D;IAEA,IAAI3+J,QAAQ,CAAC2d,GAAG,CAACqV,YAAY,KAAK,SAAS,EAAE;MAC3C,IAAI,CAACqxI,8BAA8B,CAACzrG,MAAM,EAAE89F,GAAG,CAACwH,YAAY,CAAC;IAC/D,CAAC,MAAM,IAAIl+J,QAAQ,CAAC2d,GAAG,CAACqV,YAAY,KAAK,UAAU,EAAE;MACnD0jI,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC1L,GAAG,CAACwH,YAAY,CAAC;MAC9CxH,GAAG,CAACtjE,QAAQ,CAACr8B,MAAM,CAAC2/F,GAAG,CAACt9D,KAAK,EAAExgC,MAAM,CAAC;IACxC;IAEA,IAAIwrG,IAAI,EAAE;MACR,IAAI,CAACnB,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;IACpC;;IAEA;IACA;IACA,MAAMjxI,OAAO,GAAGkyI,cAAc,IAAIlkK,QAAQ,CAAC2d,GAAG,CAACqU,OAAO,CAAC1S,EAAE;IACzD,MAAMyS,IAAI,GAAGmyI,cAAc,IAAIlkK,QAAQ,CAAC2d,GAAG,CAACoU,IAAI;IAChD,MAAMs4F,MAAM,GAAI85C,YAAY,KAAK,IAAI,IAAMA,YAAY,CAACh6C,OAAO,CAAC,CAAC,CAACxrH,QAAQ,IAAI,IAAK;IACnF,IAAI2lK,SAAS,GAAIF,IAAI,IAAIpyI,OAAO,IAAIq4F,MAAM,IAAIt4F,IAAI,IAAIkyI,UAAU,GAAIvN,GAAG,CAAC+H,aAAa,GAAG5jJ,MAAM;IAC9F,IAAI0pJ,SAAS,GAAG7N,GAAG,CAACwH,YAAY;IAEhC,IAAIkG,IAAI,EAAE;MACR,IAAI,CAACI,UAAU,CACbD,SAAS,EACT7N,GAAG,CAACiI,aAAa,EACjBjI,GAAG,CAACwH,YAAY,CAAChO,YAAY,EAC7BoU,SAAS,EACT5N,GAAG,CAACgI,aAAa,EACjBhI,GAAG,CAAC+H,aACN,CAAC;MACD,IAAI,CAAC1sI,IAAI,IAAI,CAACkyI,UAAU,IAAI,CAAC55C,MAAM,IAAI,CAACr4F,OAAO,EAAE;QAC/CuyI,SAAS,GAAGD,SAAS;QACrBA,SAAS,GAAGzpJ,MAAM;QAClB67I,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAACkC,SAAS,CAAC;QACvC5N,GAAG,CAACtjE,QAAQ,CAACv7B,uBAAuB,CAAC0sG,SAAS,CAAC7xG,OAAO,EAAE,GAAG,CAAC;MAC9D;IACF,CAAC,MAAM;MACL;MACAgkG,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAACkC,SAAS,CAAC;MACvC5N,GAAG,CAACtjE,QAAQ,CAACv7B,uBAAuB,CAAC0sG,SAAS,CAAC7xG,OAAO,EAAE,GAAG,CAAC;IAC9D;;IAEA;IACA,IAAI1gC,OAAO,EAAE;MACXuyI,SAAS,GAAGD,SAAS;MACrBA,SAAS,GAAIj6C,MAAM,IAAIt4F,IAAI,IAAIkyI,UAAU,GAAIvN,GAAG,CAACgI,aAAa,GAAG7jJ,MAAM;MACvE,IAAI0pJ,SAAS,IAAI,IAAI,EAAE;QACrB,IAAI,CAACE,cAAc,CAAC7rG,MAAM,EAAE89F,GAAG,CAACwH,YAAY,EAAEqG,SAAS,EAAED,SAAS,CAAC;MACrE;IACF;;IAEA;IACA,IAAI,CAACI,gBAAgB,CAAC9rG,MAAM,EAAE89F,GAAG,CAACwH,YAAY,EAAEoG,SAAS,CAAC;IAE1D,IAAIj6C,MAAM,EAAE;MACV;MACA;MACAqsC,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC1L,GAAG,CAACwH,YAAY,CAAC;MAC9CxH,GAAG,CAACtjE,QAAQ,CAACv7B,uBAAuB,CAACysG,SAAS,CAAC5xG,OAAO,EAAE,GAAG,CAAC;MAC5D4xG,SAAS,GAAG5N,GAAG,CAACwH,YAAY;MAC5B,IAAI,CAACyG,aAAa,CAACR,YAAY,EAAEvrG,MAAM,EAAE0rG,SAAS,EAAE5N,GAAG,CAACkI,QAAQ,EAAElI,GAAG,CAACmI,QAAQ,EAAEnI,GAAG,CAACoI,SAAS,CAAC;;MAE9F;MACA,IAAI,CAAC/sI,IAAI,IAAI,CAACkyI,UAAU,EAAE;QACxBvN,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAACvnJ,MAAM,CAAC;QACpC67I,GAAG,CAACtjE,QAAQ,CAACv7B,uBAAuB,CAACysG,SAAS,CAAC5xG,OAAO,EAAE,GAAG,CAAC;MAC9D;IACF;IAEA6xG,SAAS,GAAGD,SAAS;IAErB,IAAIvyI,IAAI,EAAE;MACRuyI,SAAS,GAAGL,UAAU,GAAGvN,GAAG,CAACiI,aAAa,GAAG9jJ,MAAM;MACnD,IAAI,CAAC+pJ,YAAY,CAACL,SAAS,EAAED,SAAS,CAAC;MACvCC,SAAS,GAAGD,SAAS;IACvB;IAEA,IAAIL,UAAU,EAAE;MACdK,SAAS,GAAGzpJ,MAAM;MAClB,IAAI,CAACgqJ,kBAAkB,CAACN,SAAS,EAAED,SAAS,EAAE,IAAI,CAAC;IACrD;EACF,CAAC;AACH,CAAC,CAAC,CAAE;AAEJ1L,IAAI,CAAC51J,SAAS,CAAC6hK,kBAAkB,GAAI,YAAY;EAC/C,MAAMruG,MAAM,GAAG,IAAI/2B,gFAAW,CAAC,CAAC;EAChC,MAAMo3B,OAAO,GAAG,IAAIp3B,6FAAwB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC;EAE9E,MAAM42B,SAAS,GAAG,IAAI52B,4FAAuB,CAAC;IAC5Cg4B,QAAQ,EAAE;MACRC,MAAM,EAAE;QAAEj4D,IAAI,EAAE,GAAG;QAAEigB,KAAK,EAAE;MAAK,CAAC;MAClColJ,UAAU,EAAE;QAAErlK,IAAI,EAAE,KAAK;QAAEigB,KAAK,EAAE,IAAI+f,kFAAa,CAAC,GAAG;MAAE;IAC3D,CAAC;IACDk4B,YAAY,EAAE9C,0BAAsB;IACpCiD,cAAc,EAAE8/F,2CAA6B;IAC7C1mI,WAAW,EAAE,KAAK;IAClB0mC,SAAS,EAAE,KAAK;IAChBrB,UAAU,EAAE;EACd,CAAC,CAAC;EAEF,MAAMmoC,IAAI,GAAG//B,QAAQ,CAACD,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE1+D,QAAQ,CAAC2d,GAAG,CAACgD,KAAK,CAAC2S,YAAY,CAAC;EACjFkjC,MAAM,CAACp2D,GAAG,CAAC,IAAIk7F,MAAM,CAAC3kC,IAAI,CAAC+nC,IAAI,EAAEroC,SAAS,CAAC,CAAC;EAE5C,OAAO,UAAUkuG,SAAS,EAAEQ,YAAY,EAAEthG,IAAI,EAAE;IAC9C,IAAI,CAAC0wF,IAAI,CAAC/gE,QAAQ,CAACgvE,eAAe,CAAC2C,YAAY,CAAC;IAChD,IAAI,CAAC5Q,IAAI,CAAC/gE,QAAQ,CAACjzF,KAAK,CAAC,CAAC;IAE1B,IAAIsjE,IAAI,EAAE;MACRpN,SAAS,CAACoB,QAAQ,CAACC,MAAM,CAACh4C,KAAK,GAAG6kJ,SAAS,CAAC7xG,OAAO;MACnD2D,SAAS,CAACoB,QAAQ,CAACqtG,UAAU,CAACplJ,KAAK,CAACpiB,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC;MACzD,IAAI,CAAC62J,IAAI,CAAC/gE,QAAQ,CAACr8B,MAAM,CAACP,MAAM,EAAEK,OAAO,CAAC;IAC5C,CAAC,MAAM;MACL,IAAI,CAACs9F,IAAI,CAAC/gE,QAAQ,CAACr7B,qCAAqC,CAACwsG,SAAS,EAAEvkK,QAAQ,CAAC2d,GAAG,CAACgD,KAAK,CAAC2S,YAAY,CAAC;IACtG;EACF,CAAC;AACH,CAAC,CAAC,CAAE;AAEJslI,IAAI,CAAC51J,SAAS,CAACyhK,cAAc,GAAI,YAAY;EAC3C,MAAMO,gBAAgB,GAAG,IAAIxV,uBAAe,CAAC;IAAEliI,KAAK,EAAE;EAAK,CAAC,CAAC;EAE7D,OAAO,UAAUsrC,MAAM,EAAEqsG,cAAc,EAAEC,cAAc,EAAEH,YAAY,EAAE;IACrE,MAAM7iK,IAAI,GAAG,IAAI;IACjB,MAAMw0J,GAAG,GAAGx0J,IAAI,CAACiyJ,IAAI;;IAErB;IACA6Q,gBAAgB,CAACvtG,QAAQ,CAACC,MAAM,CAACh4C,KAAK,GAAGwlJ,cAAc,CAACxyG,OAAO;IAC/DsyG,gBAAgB,CAACvtG,QAAQ,CAACg4F,WAAW,CAAC/vI,KAAK,GAAGulJ,cAAc,CAAC/U,YAAY;IACzE8U,gBAAgB,CAACvtG,QAAQ,CAACi4F,UAAU,CAAChwI,KAAK,CAACpiB,GAAG,CAAC2nK,cAAc,CAACprJ,KAAK,EAAEorJ,cAAc,CAAC/oJ,MAAM,CAAC;IAC3F8oJ,gBAAgB,CAACvtG,QAAQ,CAACz9C,KAAK,CAAC0F,KAAK,GAAG,IAAI+f,gFAAW,CAACz/B,QAAQ,CAAC2d,GAAG,CAACqU,OAAO,CAAChY,KAAK,CAAC;IACnFgrJ,gBAAgB,CAACvtG,QAAQ,CAACxlC,SAAS,CAACvS,KAAK,GAAG1f,QAAQ,CAAC2d,GAAG,CAACqU,OAAO,CAACC,SAAS;IAC1E+yI,gBAAgB,CAACvtG,QAAQ,CAACvlC,SAAS,CAACxS,KAAK,GAAG,IAAI+f,kFAAa,CAC3Dz/B,QAAQ,CAAC2d,GAAG,CAACqU,OAAO,CAACE,SAAS,EAC9BlyB,QAAQ,CAAC2d,GAAG,CAACqU,OAAO,CAACE,SACvB,CAAC;IAEDwkI,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC2C,YAAY,CAAC;IAC1CrO,GAAG,CAACtjE,QAAQ,CAACp8B,gBAAgB,CAACguG,gBAAgB,CAAC;EACjD,CAAC;AACH,CAAC,CAAC,CAAE;AAEJpM,IAAI,CAAC51J,SAAS,CAACy/J,gBAAgB,GAAI,YAAY;EAC7C,MAAM1wC,IAAI,GAAG;IAAEqsC,SAAS,EAAE3+H,wFAAmB;IAAE4+H,SAAS,EAAE5+H,wFAAmB;IAAEutF,MAAM,EAAEvtF,qFAAgBy0D;EAAC,CAAC;EAEzG,OAAO,YAAY;IACjB,IAAI,CAACl0F,QAAQ,CAAC2d,GAAG,CAAClD,MAAM,CAAC6E,EAAE,EAAE;MAC3B;IACF;IAEA,MAAMo3I,GAAG,GAAG,IAAI,CAACvC,IAAI;IACrB,MAAMgR,mBAAmB,GAAGzO,GAAG,CAACtjE,QAAQ,CAACgyE,eAAe,CAAC,CAAC;IAC1D,MAAMC,cAAc,GAAG3O,GAAG,CAACtjE,QAAQ,CAACkyE,iBAAiB,CAAC,CAAC;IACvD,MAAMC,iBAAiB,GAAG7O,GAAG,CAACtjE,QAAQ,CAACoyE,oBAAoB,CAAC,CAAC;IAE7D,MAAMriB,MAAM,GAAGuT,GAAG,CAACtjE,QAAQ,CAACrvF,KAAK;;IAEjC;IACAo/I,MAAM,CAACsiB,WAAW,CAAChmI,qFAAgB,CAAC;IACpC0jH,MAAM,CAACwiB,OAAO,CAAC3rJ,KAAK,CAAC4rJ,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACzCziB,MAAM,CAACwiB,OAAO,CAACr4I,KAAK,CAACu4I,OAAO,CAAC,IAAI,CAAC;IAClC1iB,MAAM,CAACwf,cAAc,CAAC,KAAK,CAAC;IAE5B,KAAK,IAAI1jK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGy3J,GAAG,CAACt9D,KAAK,CAAC7kC,QAAQ,CAACr9D,MAAM,EAAE+H,CAAC,EAAE,EAAE;MAClD,IAAIy3J,GAAG,CAACt9D,KAAK,CAAC7kC,QAAQ,CAACt1D,CAAC,CAAC,CAACQ,IAAI,KAAK,kBAAkB,EAAE;QACrD,MAAMg7J,KAAK,GAAG/D,GAAG,CAACt9D,KAAK,CAAC7kC,QAAQ,CAACt1D,CAAC,CAAC;QAEnC,IAAIw7J,KAAK,CAAChgJ,MAAM,CAACqe,GAAG,IAAI,IAAI,EAAE;UAC5B2hI,KAAK,CAAChgJ,MAAM,CAACqe,GAAG,GAAG,IAAI2G,4FAAuB,CAACg7H,KAAK,CAAChgJ,MAAM,CAACojJ,OAAO,CAAChkJ,KAAK,EAAE4gJ,KAAK,CAAChgJ,MAAM,CAACojJ,OAAO,CAAC3hJ,MAAM,EAAE61G,IAAI,CAAC;UAC7G0oC,KAAK,CAAChgJ,MAAM,CAACm+C,MAAM,CAACG,sBAAsB,CAAC,CAAC;QAC9C;QACA0hG,KAAK,CAAChgJ,MAAM,CAACqrJ,cAAc,CAACrL,KAAK,CAAC;QAElC/D,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC3H,KAAK,CAAChgJ,MAAM,CAACqe,GAAG,CAAC;QAC9C49H,GAAG,CAACtjE,QAAQ,CAACjzF,KAAK,CAAC,CAAC;QAEpBu2J,GAAG,CAACtjE,QAAQ,CAACr8B,MAAM,CAAC2/F,GAAG,CAACt9D,KAAK,EAAEqhE,KAAK,CAAChgJ,MAAM,CAACm+C,MAAM,CAAC;MACrD;IACF;IACA89F,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC+C,mBAAmB,EAAEE,cAAc,EAAEE,iBAAiB,CAAC;EACtF,CAAC;AACH,CAAC,CAAC,CAAE;;AAEJ;AACA;AACA;AACA;AACA;AACA3M,IAAI,CAAC51J,SAAS,CAAC+iK,qBAAqB,GAAG,YAAY;EACjD,MAAMC,QAAQ,GAAG,IAAI,CAAC7R,IAAI,CAACoJ,cAAc;EAEzC,KAAK,IAAIt+J,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG+mK,QAAQ,CAACzxG,QAAQ,CAACr9D,MAAM,EAAE+H,CAAC,EAAE,EAAE;IACjD,MAAMgnK,aAAa,GAAGD,QAAQ,CAACzxG,QAAQ,CAACt1D,CAAC,CAAC;IAC1C,IAAIgnK,aAAa,CAAC1xG,QAAQ,CAACr9D,MAAM,GAAG,CAAC,EAAE;MACrC,OAAO,IAAI;IACb;EACF;EACA,OAAO,KAAK;AACd,CAAC;AAED0hK,IAAI,CAAC51J,SAAS,CAAC0hK,gBAAgB,GAAI,YAAY;EAC7C,MAAMM,gBAAgB,GAAG,IAAIxV,uBAAe,CAAC,CAAC;EAE9C,OAAO,UAAU52F,MAAM,EAAE2rG,SAAS,EAAEQ,YAAY,EAAE;IAChD,MAAM7iK,IAAI,GAAG,IAAI;IACjB,MAAMw0J,GAAG,GAAGx0J,IAAI,CAACiyJ,IAAI;;IAErB;IACAuC,GAAG,CAACtjE,QAAQ,CAAC6pE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;;IAEtC;IACAvG,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAACmC,SAAS,CAAC;IACvC7N,GAAG,CAACtjE,QAAQ,CAACjzF,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;IACtC,IAAI+B,IAAI,CAAC6jK,qBAAqB,CAAC,CAAC,EAAE;MAChCrP,GAAG,CAAC4G,aAAa,CAACnrH,MAAM,GAAGukH,GAAG,CAAC35F,IAAI,CAAC5qB,MAAM;MAC1CukH,GAAG,CAAC6G,cAAc,CAACprH,MAAM,GAAGukH,GAAG,CAACp5C,KAAK,CAACnrE,MAAM;MAC5CukH,GAAG,CAACtjE,QAAQ,CAACr8B,MAAM,CAAC2/F,GAAG,CAAC2G,cAAc,EAAEzkG,MAAM,CAAC;IACjD,CAAC,MAAM;MACL;MACA89F,GAAG,CAACtjE,QAAQ,CAACh9B,eAAe,CAAC,CAAC;IAChC;;IAEA;IACAsgG,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC2C,YAAY,CAAC;IAC1CrO,GAAG,CAACtjE,QAAQ,CAACv7B,uBAAuB,CAAC0sG,SAAS,CAAC7xG,OAAO,EAAE,GAAG,CAAC;;IAE5D;IACAsyG,gBAAgB,CAACvtG,QAAQ,CAACC,MAAM,CAACh4C,KAAK,GAAG6kJ,SAAS,CAAC7xG,OAAO;IAC1DsyG,gBAAgB,CAACvtG,QAAQ,CAACi4F,UAAU,CAAChwI,KAAK,CAACpiB,GAAG,CAACinK,SAAS,CAAC1qJ,KAAK,EAAE0qJ,SAAS,CAACroJ,MAAM,CAAC;IACjFw6I,GAAG,CAACtjE,QAAQ,CAACp8B,gBAAgB,CAACguG,gBAAgB,CAAC;EACjD,CAAC;AACH,CAAC,CAAC,CAAE;AAEJpM,IAAI,CAAC51J,SAAS,CAACkjK,4BAA4B,GAAG,UAAUC,YAAY,EAAE;EACpE,IAAI,CAACA,YAAY,EAAE;IACjB,OAAO,KAAK;EACd;EACA,MAAMzP,GAAG,GAAG,IAAI,CAACvC,IAAI;EACrB,MAAMiS,KAAK,GAAG1P,GAAG,CAACtjE,QAAQ,CAACgyE,eAAe,CAAC,CAAC;EAE5C1O,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC+D,YAAY,CAAC;EAC1C,MAAMrmJ,OAAO,GAAG42I,GAAG,CAACtjE,QAAQ,CAAC0pE,UAAU,CAAC,CAAC;EACzC,MAAM/5I,MAAM,GAAGjD,OAAO,CAACumJ,sBAAsB,CAACvmJ,OAAO,CAACgkJ,WAAW,CAAC;EAClEpN,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAACgE,KAAK,CAAC;EACnC,IAAIrjJ,MAAM,KAAKjD,OAAO,CAACwmJ,oBAAoB,EAAE;IAC3C;IACA,IAAI,CAACvkJ,MAAM,CAACjB,IAAI,CAAC,oDAAoD,CAAC;IACtE,OAAO,KAAK;EACd;EACA,OAAO,IAAI;AACb,CAAC;AAED83I,IAAI,CAAC51J,SAAS,CAAC2hK,aAAa,GAAI,YAAY;EAC1C,MAAM4B,WAAW,GAAG,IAAIjhD,sBAAc,CAACf,mBAAmB,CAAC,CAAC;EAC5D,MAAMiiD,WAAW,GAAG,IAAIlhD,sBAAc,CAACF,oBAAoB,CAAC,CAAC;EAC7D,MAAMqhD,aAAa,GAAG,IAAIhnI,kFAAa,CAAC,CAAC,CAACi/E,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;EACxE,MAAMgoD,cAAc,GAAG,IAAIjnI,kFAAa,CAAC,CAAC;EAE1C,IAAIknI,wBAAwB;EAE5B,OAAO,UAAUxC,YAAY,EAAEvrG,MAAM,EAAEguG,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAE;IACxE,MAAMrQ,GAAG,GAAG,IAAI,CAACvC,IAAI;IAErB,IAAI,OAAOwS,wBAAwB,KAAK,WAAW,EAAE;MACnDA,wBAAwB,GAAG,IAAI,CAACT,4BAA4B,CAACW,OAAO,CAAC;IACvE;IAEA,IAAI,CAACF,wBAAwB,EAAE;MAC7B;IACF;IAEA,MAAMljG,IAAI,GAAG0gG,YAAY,CAACh6C,OAAO,CAAC,CAAC;IAEnC1mD,IAAI,CAAC5mE,OAAO,CAAC65J,GAAG,CAAC99F,MAAM,CAAC;;IAExB;IACA;IACA89F,GAAG,CAACtjE,QAAQ,CAAC6pE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACtCvG,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAACyE,OAAO,CAAC;IACrCnQ,GAAG,CAACtjE,QAAQ,CAACjzF,KAAK,CAAC,CAAC;IACpBu2J,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC0E,OAAO,CAAC;IACrCpQ,GAAG,CAACtjE,QAAQ,CAACjzF,KAAK,CAAC,CAAC;IACpBu2J,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC2E,OAAO,CAAC;IACrCrQ,GAAG,CAACtjE,QAAQ,CAACjzF,KAAK,CAAC,CAAC;IAEpBu2J,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAACyE,OAAO,CAAC;IACrC;IACAjuG,MAAM,CAACiE,MAAM,CAACv/D,GAAG,CAACqhE,QAAQ,CAAC3J,MAAM,CAACI,cAAc,CAAC;IACjDshG,GAAG,CAACtjE,QAAQ,CAACr8B,MAAM,CAAC2/F,GAAG,CAACt9D,KAAK,EAAExgC,MAAM,CAAC;IAEtCA,MAAM,CAACiE,MAAM,CAACv/D,GAAG,CAACqhE,QAAQ,CAAC3J,MAAM,CAACC,MAAM,CAAC;IACzCyhG,GAAG,CAACt9D,KAAK,CAAC4tE,gBAAgB,GAAGT,WAAW;IACxC7P,GAAG,CAACtjE,QAAQ,CAACr8B,MAAM,CAAC2/F,GAAG,CAACt9D,KAAK,EAAExgC,MAAM,CAAC;IAEtC89F,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC0E,OAAO,CAAC;IACrCluG,MAAM,CAACiE,MAAM,CAACv/D,GAAG,CAACqhE,QAAQ,CAAC3J,MAAM,CAACC,MAAM,CAAC;IACzCyhG,GAAG,CAACt9D,KAAK,CAAC4tE,gBAAgB,GAAGR,WAAW;IACxC9P,GAAG,CAACtjE,QAAQ,CAACr8B,MAAM,CAAC2/F,GAAG,CAACt9D,KAAK,EAAExgC,MAAM,CAAC;IAEtC89F,GAAG,CAACt9D,KAAK,CAAC4tE,gBAAgB,GAAG,IAAI;IACjCpuG,MAAM,CAACiE,MAAM,CAACv/D,GAAG,CAACqhE,QAAQ,CAAC3J,MAAM,CAAC/yC,OAAO,CAAC;;IAE1C;IACAykJ,cAAc,CAACj4J,IAAI,CAACg1D,IAAI,CAAC1N,WAAW,CAAC,CAACC,MAAM,CAAC,CAAC;IAC9C4/B,oBAAY,CAAC5yF,SAAS,CAACyyF,WAAW,CAACV,iBAAiB,CAAC+E,gBAAgB,CAAC2sE,aAAa,EAAEC,cAAc,CAAC;IACpG9tG,MAAM,CAACiE,MAAM,CAACv/D,GAAG,CAACqhE,QAAQ,CAAC3J,MAAM,CAACK,mBAAmB,CAAC;IACtDqhG,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC2E,OAAO,CAAC;IACrCrQ,GAAG,CAACtjE,QAAQ,CAACr8B,MAAM,CAAC2/F,GAAG,CAACt9D,KAAK,EAAExgC,MAAM,CAAC;;IAEtC;IACA,MAAM8uD,EAAE,GAAGjkD,IAAI,CAAC9kE,QAAQ;IACxB+oH,EAAE,CAACjwD,QAAQ,CAACqsD,QAAQ,CAACpkG,KAAK,GAAGmnJ,OAAO,CAACn0G,OAAO;IAC5Cg1D,EAAE,CAACjwD,QAAQ,CAACusD,QAAQ,CAACtkG,KAAK,GAAGonJ,OAAO,CAACp0G,OAAO;IAC5Cg1D,EAAE,CAACjwD,QAAQ,CAACysD,SAAS,CAACxkG,KAAK,GAAGqnJ,OAAO,CAACr0G,OAAO;IAC7CkG,MAAM,CAACiE,MAAM,CAACv/D,GAAG,CAACqhE,QAAQ,CAAC3J,MAAM,CAACC,MAAM,CAAC;IACzCyhG,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAACwE,MAAM,CAAC;IACpClQ,GAAG,CAACtjE,QAAQ,CAACr8B,MAAM,CAAC2/F,GAAG,CAACt9D,KAAK,EAAExgC,MAAM,CAAC;IACtCA,MAAM,CAACiE,MAAM,CAACv/D,GAAG,CAACqhE,QAAQ,CAAC3J,MAAM,CAAC/yC,OAAO,CAAC;EAC5C,CAAC;AACH,CAAC,CAAC,CAAE;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA22I,IAAI,CAAC51J,SAAS,CAACqhK,8BAA8B,GAAI,YAAY;EAC3D,OAAO,UAAUzrG,MAAM,EAAEmsG,YAAY,EAAE;IACrC,MAAMrO,GAAG,GAAG,IAAI,CAACvC,IAAI;IACrBuC,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC2C,YAAY,CAAC;;IAE1C;IACAnsG,MAAM,CAACiE,MAAM,CAACv/D,GAAG,CAACqhE,QAAQ,CAAC3J,MAAM,CAAC/yC,OAAO,CAAC;IAC1Cy0I,GAAG,CAACtjE,QAAQ,CAACr8B,MAAM,CAAC2/F,GAAG,CAACt9D,KAAK,EAAExgC,MAAM,CAAC;;IAEtC;IACAA,MAAM,CAACiE,MAAM,CAACv/D,GAAG,CAACqhE,QAAQ,CAAC3J,MAAM,CAACG,mBAAmB,CAAC;IACtDuhG,GAAG,CAACtjE,QAAQ,CAAC0pE,UAAU,CAAC,CAAC,CAACmK,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACjEvQ,GAAG,CAACtjE,QAAQ,CAACr8B,MAAM,CAAC2/F,GAAG,CAACt9D,KAAK,EAAExgC,MAAM,CAAC;IACtC89F,GAAG,CAACtjE,QAAQ,CAAC0pE,UAAU,CAAC,CAAC,CAACmK,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;;IAE7D;IACAruG,MAAM,CAACiE,MAAM,CAACv/D,GAAG,CAACqhE,QAAQ,CAAC3J,MAAM,CAACE,WAAW,CAAC;IAC9CwhG,GAAG,CAACtjE,QAAQ,CAACr8B,MAAM,CAAC2/F,GAAG,CAACt9D,KAAK,EAAExgC,MAAM,CAAC;;IAEtC;IACAA,MAAM,CAACiE,MAAM,CAACv/D,GAAG,CAACqhE,QAAQ,CAAC3J,MAAM,CAAC/yC,OAAO,CAAC;EAC5C,CAAC;AACH,CAAC,CAAC,CAAE;AAEJ22I,IAAI,CAAC51J,SAAS,CAAC4hK,YAAY,GAAI,YAAY;EACzC,MAAMsC,aAAa,GAAG,IAAItX,oBAAY,CAAC,CAAC;EAExC,OAAO,UAAU2U,SAAS,EAAEQ,YAAY,EAAE;IACxC,IAAI,OAAOR,SAAS,KAAK,WAAW,IAAI,OAAOQ,YAAY,KAAK,WAAW,EAAE;MAC3E;IACF;IAEA,MAAMrO,GAAG,GAAG,IAAI,CAACvC,IAAI;;IAErB;IACAuC,GAAG,CAACtjE,QAAQ,CAAC6pE,aAAa,CAACj9J,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAACnU,KAAK,EAAEtb,MAAM,CAAC,CAACsB,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAAC+C,WAAW,CAAC,CAAC;IACvFwlI,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC2C,YAAY,CAAC;IAC1CrO,GAAG,CAACtjE,QAAQ,CAACjzF,KAAK,CAAC,CAAC;;IAEpB;IACA+mK,aAAa,CAACzvG,QAAQ,CAACC,MAAM,CAACh4C,KAAK,GAAG6kJ,SAAS,CAAC7xG,OAAO;IACvDw0G,aAAa,CAACzvG,QAAQ,CAAC89B,YAAY,CAAC71E,KAAK,CAACpiB,GAAG,CAAC,GAAG,GAAGinK,SAAS,CAAC1qJ,KAAK,EAAE,GAAG,GAAG0qJ,SAAS,CAACroJ,MAAM,CAAC;IAC5FgrJ,aAAa,CAACzvG,QAAQ,CAACmpC,OAAO,CAAClhF,KAAK,CAACpiB,GAAG,CAAC0C,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAACnU,KAAK,CAAC;IAE/D,IAAIktJ,aAAa,CAACrX,aAAa,KAAK7vJ,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAAC+C,WAAW,EAAE;MAC/Dg2I,aAAa,CAAC9pG,SAAS,CAAC;QAAEyyF,aAAa,EAAE7vJ,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAAC+C;MAAY,CAAC,CAAC;MACvEg2I,aAAa,CAACj0G,WAAW,GAAG,IAAI;IAClC;IACAyjG,GAAG,CAACtjE,QAAQ,CAACp8B,gBAAgB,CAACkwG,aAAa,CAAC;EAC9C,CAAC;AACH,CAAC,CAAC,CAAE;AAEJtO,IAAI,CAAC51J,SAAS,CAACwhK,UAAU,GAAI,YAAY;EACvC,MAAM2C,WAAW,GAAG,IAAIpX,kBAAU,CAAC,CAAC;EACpC,MAAMqX,gBAAgB,GAAG,IAAI5W,yBAAiB,CAAC,CAAC;EAChD,MAAM6W,iBAAiB,GAAG,IAAI1W,mCAA2B,CAAC,CAAC;EAE3D,MAAM2W,MAAM,GAAG,IAAI7nI,kFAAa,CAAC,CAAC;EAClC,OAAO,UAAUylI,cAAc,EAAEqC,YAAY,EAAEC,eAAe,EAAEzC,YAAY,EAAE0C,UAAU,EAAEC,WAAW,EAAE;IACrG,IAAI,CAACxC,cAAc,IAAI,CAACqC,YAAY,IAAI,CAACC,eAAe,IAAI,CAACzC,YAAY,IAAI,CAAC0C,UAAU,IAAI,CAACC,WAAW,EAAE;MACxG;IACF;IACA,MAAMhR,GAAG,GAAG,IAAI,CAACvC,IAAI;IACrB,MAAMlvC,UAAU,GAAG7lH,IAAI,CAACo5D,GAAG,CAAC/4B,oFAAe,CAACurF,OAAO,GAAG,GAAG,GAAG0rC,GAAG,CAAC99F,MAAM,CAACP,GAAG,CAAC;IAE3E8uG,WAAW,CAAC1vG,QAAQ,CAACu4F,cAAc,CAACtwI,KAAK,GAAGwlJ,cAAc,CAACxyG,OAAO;IAClEy0G,WAAW,CAAC1vG,QAAQ,CAACy4F,YAAY,CAACxwI,KAAK,GAAG8nJ,eAAe;IACzDL,WAAW,CAAC1vG,QAAQ,CAACw4F,aAAa,CAACvwI,KAAK,GAAG6nJ,YAAY,CAAC70G,OAAO;IAC/Dy0G,WAAW,CAAC1vG,QAAQ,CAAC89B,YAAY,CAAC71E,KAAK,CAACpiB,GAAG,CAAC,GAAG,GAAG4nK,cAAc,CAACrrJ,KAAK,EAAE,GAAG,GAAGqrJ,cAAc,CAAChpJ,MAAM,CAAC;IACpGirJ,WAAW,CAAC1vG,QAAQ,CAAC04F,UAAU,CAACzwI,KAAK,CAACpiB,GAAG,CAACo5J,GAAG,CAAC99F,MAAM,CAACW,IAAI,EAAEm9F,GAAG,CAAC99F,MAAM,CAACc,GAAG,CAAC;IAC1EytG,WAAW,CAAC1vG,QAAQ,CAAC24F,UAAU,CAAC1wI,KAAK,GAAGg3I,GAAG,CAAC99F,MAAM,CAACmiC,gBAAgB;IACnEosE,WAAW,CAAC1vG,QAAQ,CAACstD,WAAW,CAACrlG,KAAK,GAAGg3I,GAAG,CAAC99F,MAAM,CAACR,MAAM;IAC1D+uG,WAAW,CAAC1vG,QAAQ,CAACwtD,UAAU,CAACvlG,KAAK,GAAGulG,UAAU;IAClDyxC,GAAG,CAAC35F,IAAI,CAAC5qB,MAAM,CAACwnB,YAAY,CAAC2tG,MAAM,CAAC;IACpCH,WAAW,CAAC1vG,QAAQ,CAAC44F,YAAY,CAAC3wI,KAAK,GAAG1f,QAAQ,CAAC2d,GAAG,CAACgD,KAAK,CAACyS,gBAAgB,GAAGk0I,MAAM,CAACn6J,CAAC;IACxFg6J,WAAW,CAAC1vG,QAAQ,CAAC64F,cAAc,CAAC5wI,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC0hJ,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC5E+F,WAAW,CAAC1vG,QAAQ,CAACvoC,MAAM,CAACxP,KAAK,GAAG1f,QAAQ,CAAC2d,GAAG,CAACgD,KAAK,CAAC0S,UAAU;IACjE;IACAqjI,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAACsF,WAAW,CAAC;IACzChR,GAAG,CAACtjE,QAAQ,CAACp8B,gBAAgB,CAACmwG,WAAW,CAAC;IAE1CC,gBAAgB,CAAC3vG,QAAQ,CAACg5F,KAAK,CAAC/wI,KAAK,GAAGgoJ,WAAW,CAACh1G,OAAO;IAC3D00G,gBAAgB,CAAC3vG,QAAQ,CAAC89B,YAAY,CAAC71E,KAAK,CAACpiB,GAAG,CAAC,GAAG,GAAGoqK,WAAW,CAAC7tJ,KAAK,EAAE,GAAG,GAAG6tJ,WAAW,CAACxrJ,MAAM,CAAC;IACnGkrJ,gBAAgB,CAAC3vG,QAAQ,CAACy4F,YAAY,CAACxwI,KAAK,GAAG8nJ,eAAe;IAC9D9Q,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAACqF,UAAU,CAAC;IACxC/Q,GAAG,CAACtjE,QAAQ,CAACp8B,gBAAgB,CAACowG,gBAAgB,CAAC;IAE/CC,iBAAiB,CAAC5vG,QAAQ,CAACg5F,KAAK,CAAC/wI,KAAK,GAAG+nJ,UAAU,CAAC/0G,OAAO;IAC3D20G,iBAAiB,CAAC5vG,QAAQ,CAACu4F,cAAc,CAACtwI,KAAK,GAAGwlJ,cAAc,CAACxyG,OAAO;IACxE20G,iBAAiB,CAAC5vG,QAAQ,CAAC89B,YAAY,CAAC71E,KAAK,CAACpiB,GAAG,CAAC,GAAG,GAAGmqK,UAAU,CAAC5tJ,KAAK,EAAE,GAAG,GAAG4tJ,UAAU,CAACvrJ,MAAM,CAAC;IAClGmrJ,iBAAiB,CAAC5vG,QAAQ,CAACy4F,YAAY,CAACxwI,KAAK,GAAG8nJ,eAAe;IAC/DH,iBAAiB,CAAC5vG,QAAQ,CAAC24F,UAAU,CAAC1wI,KAAK,GAAGg3I,GAAG,CAAC99F,MAAM,CAACmiC,gBAAgB;IACzEssE,iBAAiB,CAAC5vG,QAAQ,CAACstD,WAAW,CAACrlG,KAAK,GAAGg3I,GAAG,CAAC99F,MAAM,CAACR,MAAM;IAChEivG,iBAAiB,CAAC5vG,QAAQ,CAACwtD,UAAU,CAACvlG,KAAK,GAAGulG,UAAU;IACxD,MAAM;MAAExzF;IAAI,CAAC,GAAGilI,GAAG,CAACt9D,KAAK;IACzB,IAAI3nE,GAAG,EAAE;MACP41I,iBAAiB,CAAC5vG,QAAQ,CAACm5F,UAAU,CAAClxI,KAAK,CAACpiB,GAAG,CAACm0B,GAAG,CAAC8nC,IAAI,EAAE9nC,GAAG,CAACioC,GAAG,CAAC;MAClE2tG,iBAAiB,CAAC5vG,QAAQ,CAACvnC,QAAQ,CAACxQ,KAAK,CAACpiB,GAAG,CAACm0B,GAAG,CAACzX,KAAK,CAAC9V,CAAC,EAAEutB,GAAG,CAACzX,KAAK,CAACzI,CAAC,EAAEkgB,GAAG,CAACzX,KAAK,CAAClI,CAAC,EAAE9R,QAAQ,CAAC2d,GAAG,CAACsS,QAAQ,CAAC;IAC7G;IACA,IAAKo3I,iBAAiB,CAACxW,MAAM,KAAK7wJ,QAAQ,CAAC2d,GAAG,CAAC8T,GAAG,IAC5C41I,iBAAiB,CAACzwE,cAAc,KAAK52F,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAAC+C,WAAY,EAAE;MACvEm2I,iBAAiB,CAACjqG,SAAS,CAAC;QAAEyzF,MAAM,EAAE7wJ,QAAQ,CAAC2d,GAAG,CAAC8T,GAAG;QAAEmlE,cAAc,EAAE52F,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAAC+C;MAAY,CAAC,CAAC;MACtGm2I,iBAAiB,CAACp0G,WAAW,GAAG,IAAI;IACtC;IACAyjG,GAAG,CAACtjE,QAAQ,CAACgvE,eAAe,CAAC2C,YAAY,CAAC;IAC1CrO,GAAG,CAACtjE,QAAQ,CAACp8B,gBAAgB,CAACqwG,iBAAiB,CAAC;EAClD,CAAC;AACH,CAAC,CAAC,CAAE;;AAEJ;AACA;AACA;AACA;AACAzO,IAAI,CAAC51J,SAAS,CAACtG,KAAK,GAAG,SAAU;AAAA,GAAgB;EAC/C,IAAI,IAAI,CAAC6+J,OAAO,EAAE;IAChB,IAAI,CAACA,OAAO,CAAC7+J,KAAK,CAAC,CAAC;EACtB;EACA,IAAI,CAACirK,SAAS,GAAG,IAAI;EAErB,IAAI,CAAC3H,kBAAkB,CAAC,CAAC;EAEzB,IAAI,CAAC4H,YAAY,CAAC/P,SAAS,CAACC,OAAO,CAAC;EAEpC,IAAI,CAAC+P,aAAa,CAAC,CAAC;EAEpB,IAAI,IAAI,CAAC1T,IAAI,EAAE;IACbx1F,QAAQ,CAACrC,SAAS,CAAC,IAAI,CAAC63F,IAAI,CAAC72C,KAAK,CAAC;IACnC,IAAI,CAAC62C,IAAI,CAACsI,UAAU,CAAC//J,KAAK,CAAC,CAAC;EAC9B;EAEA,IAAI,CAACorK,aAAa,CAAC,CAAC;AACtB,CAAC;AAEDlP,IAAI,CAAC51J,SAAS,CAAC+kK,WAAW,GAAG,YAAY;EACvC,IAAI,CAAC1M,eAAe,CAAC3+J,KAAK,CAAC,CAAC;EAC5B,IAAI,CAAC2+J,eAAe,CAAC9V,gBAAgB,CAAC,IAAI,CAAC;EAC3C,IAAI,CAAC8V,eAAe,CAAC5V,uBAAuB,CAAC,IAAI,CAAC;EAClD,IAAI,CAAC7oJ,SAAS,CAAC,CAAC;EAChB,IAAI,CAACorK,UAAU,CAAC,CAAC;EACjB,IAAI,CAAClrK,UAAU,CAAC,CAAC;AACnB,CAAC;AAED87J,IAAI,CAAC51J,SAAS,CAACilK,SAAS,GAAG,YAAY;EACrC;EACA,IAAI,IAAI,CAAC1M,OAAO,EAAE;IAChB,IAAI,CAACA,OAAO,CAAC7+J,KAAK,CAAC,CAAC;EACtB;EACA,IAAI,CAACkrK,YAAY,CAAC/P,SAAS,CAACC,OAAO,CAAC;EACpC,IAAI,CAACiQ,WAAW,CAAC,CAAC;;EAElB;EACA,IAAI,CAAC9H,qBAAqB,CAAE1iD,MAAM,IAAK;IACrCA,MAAM,CAACyD,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC9BzD,MAAM,CAACuD,wBAAwB,CAAC,CAAC;EACnC,CAAC,CAAC;AACJ,CAAC;AAED83C,IAAI,CAAC51J,SAAS,CAACklK,OAAO,GAAG,UAAUl7C,MAAM,EAAE;EACzC,MAAMm7C,WAAW,GAAG1nK,sFAAM,CAACi3J,EAAE,CAACjZ,SAAS,CAACv+H,IAAI,CAAC;IAAE8sG;EAAO,CAAC,CAAC,CAAC;EACzD,IAAI,CAACm7C,WAAW,EAAE;IAChB,IAAI,CAACpmJ,MAAM,CAAChgB,KAAK,CAAC,kDAAkD,CAAC;IACrE,OAAO6/G,OAAO,CAACz7G,MAAM,CAAC,IAAInE,KAAK,CAAC,kDAAkD,CAAC,CAAC;EACtF;EACA,IAAI,CAACwe,aAAa,CAAC;IAAE/gB,IAAI,EAAE;EAAY,CAAC,CAAC;EAEzC,IAAI,IAAI,CAACq6J,QAAQ,CAAC,IAAI,CAACC,cAAc,CAAC,YAAYx6C,iBAAa,EAAE;IAC/D,IAAIzgD,UAAU,GAAG,IAAI;IACrB,IAAIqpG,WAAW,CAACjzB,WAAW,KAAK31B,iBAAa,EAAE;MAC7CzgD,UAAU,GAAG,IAAI,CAACg7F,QAAQ,CAAC,IAAI,CAACC,cAAc,CAAC;IACjD,CAAC,MAAM,IAAIoO,WAAW,CAACjzB,WAAW,KAAK3sF,YAAO,EAAE;MAC9CuW,UAAU,GAAG,IAAI,CAACg7F,QAAQ,CAAC,IAAI,CAACC,cAAc,CAAC,CAAC/xH,QAAQ;IAC1D;IACA,MAAMogI,QAAQ,GAAG,IAAID,WAAW,CAACrpG,UAAU,EAAE;MAAEu/E,WAAW,EAAEua,IAAI,CAAC5tI;IAAQ,CAAC,CAAC;IAC3E,OAAOo9I,QAAQ,CAACz2B,MAAM,CAAC,CAAC,CAACkjB,IAAI,CAAExrI,IAAI,IAAKA,IAAI,CAAC;EAC/C;EACA,IAAI,IAAI,CAACywI,QAAQ,CAAC,IAAI,CAACC,cAAc,CAAC,YAAY9uC,gBAAY,EAAE;IAC9D,OAAOrJ,OAAO,CAACz7G,MAAM,CAAC,IAAInE,KAAK,CAAC,qDAAqD,CAAC,CAAC;EACzF;EACA,OAAO4/G,OAAO,CAACz7G,MAAM,CAAC,IAAInE,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC/D,CAAC;AAED,MAAMqmK,OAAO,GAAG,+CAA+C;AAC/D,MAAMC,SAAS,GAAG,+BAA+B;AACjD,MAAMC,WAAW,GAAG,wBAAwB;AAE5C,SAASC,qBAAqBA,CAACnqG,MAAM,EAAE1+D,IAAI,EAAE;EAC3C,IAAI,CAACc,0FAAU,CAAC49D,MAAM,CAAC,EAAE;IACvB,OAAOA,MAAM;EACf;;EAEA;EACA,MAAMoqG,YAAY,GAAGJ,OAAO,CAACrlJ,IAAI,CAACq7C,MAAM,CAAC;EACzC,IAAIoqG,YAAY,EAAE;IAChB,IAAI,GAAGz7C,MAAM,GAAG,KAAK,EAAE5uG,EAAE,CAAC,GAAGqqJ,YAAY;IAEzCz7C,MAAM,GAAGA,MAAM,CAAC3uH,WAAW,CAAC,CAAC;IAC7B+f,EAAE,GAAGA,EAAE,CAACxf,WAAW,CAAC,CAAC;IAErB,QAAQouH,MAAM;MACZ,KAAK,KAAK;QACR3uD,MAAM,GAAG,mCAAmCjgD,EAAE,MAAM;QACpD;MACF,KAAK,KAAK;QACRigD,MAAM,GAAG,mCAAmCjgD,EAAE,MAAM;QACpD;MACF,KAAK,MAAM;QACTigD,MAAM,GAAG,gDAAgDjgD,EAAE,CAAC/f,WAAW,CAAC,CAAC,OAAO;QAChF;MACF,KAAK,MAAM;QACTggE,MAAM,GAAG,gCAAgCjgD,EAAE,CAAC/f,WAAW,CAAC,CAAC,aAAa;QACtE;MACF;QACE,MAAM,IAAI2D,KAAK,CAAC,iCAAiC,CAAC;IACtD;IAEArC,IAAI,CAACowH,QAAQ,GAAG/C,MAAM;IACtBrtH,IAAI,CAACioB,QAAQ,GAAG,GAAGxJ,EAAE,IAAI4uG,MAAM,EAAE;IACjCrtH,IAAI,CAAC+oK,UAAU,GAAG,KAAK;IACvB,OAAOrqG,MAAM;EACf;;EAEA;EACA,MAAMsqG,cAAc,GAAGL,SAAS,CAACtlJ,IAAI,CAACq7C,MAAM,CAAC;EAC7C,IAAIsqG,cAAc,EAAE;IAClB,MAAMC,QAAQ,GAAGD,cAAc,CAAC,CAAC,CAAC,CAACtqK,WAAW,CAAC,CAAC;IAChDggE,MAAM,GAAG,2DAA2DuqG,QAAQ,sBAAsB;IAClGjpK,IAAI,CAACowH,QAAQ,GAAG,SAAS;IACzBpwH,IAAI,CAACioB,QAAQ,GAAG,GAAGghJ,QAAQ,OAAO;IAClCjpK,IAAI,CAAC+oK,UAAU,GAAG,KAAK;IACvB,OAAOrqG,MAAM;EACf;;EAEA;EACA,IAAI1+D,IAAI,CAAC+oK,UAAU,KAAK,KAAK,IAAI/oK,IAAI,CAAC+oK,UAAU,KAAKhtJ,SAAS,EAAE;IAC9D/b,IAAI,CAAC+oK,UAAU,GAAG,KAAK;;IAEvB;IACA,IAAI,CAACH,WAAW,CAACr+I,IAAI,CAACm0C,MAAM,CAAC,EAAE;MAC7BA,MAAM,GAAGrhE,KAAK,CAACkmB,UAAU,CAACm7C,MAAM,CAAC;IACnC;EACF;EAEA,OAAOA,MAAM;AACf;AAEA,SAASwqG,gBAAgBA,CAAClpK,IAAI,EAAE;EAC9B,IAAI;IAAEkmB;EAAO,CAAC,GAAGlmB,IAAI;;EAErB;EACA,IAAIA,IAAI,CAACowH,QAAQ,KAAKr0G,SAAS,EAAE;IAC/B,MAAMotJ,SAAS,GAAGroK,sFAAM,CAACi3J,EAAE,CAAClZ,OAAO,CAACt+H,IAAI,CAAC;MAAE8sG,MAAM,EAAErtH,IAAI,CAACowH;IAAS,CAAC,CAAC,CAAC;IACpE,IAAI+4C,SAAS,EAAE;MACbjjJ,MAAM,GAAGijJ,SAAS,CAACjjJ,MAAM,IAAI,KAAK;IACpC,CAAC,MAAM;MACL,MAAM,IAAI7jB,KAAK,CAAC,gDAAgD,CAAC;IACnE;EACF;;EAEA;EACA,IAAI6jB,MAAM,KAAKnK,SAAS,IAAI/b,IAAI,CAACopK,OAAO,KAAKrtJ,SAAS,EAAE;IACtD,MAAMotJ,SAAS,GAAGroK,sFAAM,CAACi3J,EAAE,CAAClZ,OAAO,CAACt+H,IAAI,CAAC;MAAE8H,GAAG,EAAEroB,IAAI,CAACopK;IAAQ,CAAC,CAAC,CAAC;IAChE,IAAID,SAAS,EAAE;MACbjjJ,MAAM,GAAGijJ,SAAS,CAACjjJ,MAAM,IAAI,KAAK;IACpC;EACF;;EAEA;EACA,IAAIlmB,IAAI,CAACopK,OAAO,KAAKrtJ,SAAS,IAAI/b,IAAI,CAACopK,OAAO,CAAC1qK,WAAW,CAAC,CAAC,KAAK,MAAM,EAAE;IACvEsB,IAAI,CAACkmB,MAAM,GAAG,IAAI;IAClBlmB,IAAI,CAACua,SAAS,GAAG,IAAI,CAAC,CAAC;EACzB;;EAEA;EACA,IAAI2L,MAAM,KAAKnK,SAAS,EAAE;IACxB,IAAI/b,IAAI,CAACkmB,MAAM,KAAKnK,SAAS,IAAI/b,IAAI,CAACkmB,MAAM,KAAKA,MAAM,EAAE;MACvDlmB,IAAI,CAACmgB,OAAO,CAACiC,MAAM,CAACjB,IAAI,CAAC,kCAAkC,CAAC;IAC9D;EACF;EAEAnhB,IAAI,CAACkmB,MAAM,GAAGA,MAAM,IAAI,KAAK;AAC/B;AAEA,SAASmjJ,UAAUA,CAAC3qG,MAAM,EAAE1+D,IAAI,EAAEg8J,GAAG,EAAE;EACrC,OAAO,IAAI/5C,OAAO,CAAGC,OAAO,IAAK;IAC/B,IAAI85C,GAAG,CAAC9wI,YAAY,CAAC,CAAC,EAAE;MACtB,MAAM,IAAI7oB,KAAK,CAAC,qBAAqB,CAAC;IACxC;IACA25J,GAAG,CAAC7wI,MAAM,CAAC;MAAErrB,IAAI,EAAE;IAAW,CAAC,CAAC;;IAEhC;IACA4+D,MAAM,GAAGmqG,qBAAqB,CAACnqG,MAAM,EAAE1+D,IAAI,CAAC;;IAE5C;IACA,MAAMspK,SAAS,GAAGxoK,sFAAM,CAACi3J,EAAE,CAACnZ,OAAO,CAACr+H,IAAI,CAAC;MAAEzgB,IAAI,EAAEE,IAAI,CAAC+oK,UAAU;MAAErqG;IAAO,CAAC,CAAC,CAAC;IAC5E,IAAI,CAAC4qG,SAAS,EAAE;MACd,MAAM,IAAIjnK,KAAK,CAACi2J,gBAAgB,CAAC;IACnC;;IAEA;IACA,MAAMrwI,QAAQ,GAAGjoB,IAAI,CAACioB,QAAQ,IAAIqhJ,SAAS,CAACh9C,WAAW,CAAC5tD,MAAM,CAAC;IAC/D,IAAIz2C,QAAQ,EAAE;MACZ,MAAM,CAACxC,IAAI,EAAE2jJ,OAAO,CAAC,GAAG/rK,KAAK,CAAC+qB,aAAa,CAACH,QAAQ,CAAC;MACrDnnB,0FAAU,CAACd,IAAI,EAAE;QAAEylB,IAAI;QAAE2jJ,OAAO;QAAEnhJ;MAAS,CAAC,CAAC;IAC/C;;IAEA;IACAihJ,gBAAgB,CAAClpK,IAAI,CAAC;;IAEtB;IACA;IACA;IACA,IAAIupK,UAAU,GAAGzoK,qFAAK,CAACd,IAAI,EAAE,mBAAmB,CAAC;IACjD,IAAI,CAACc,6FAAa,CAACyoK,UAAU,CAAC,EAAE;MAC9BA,UAAU,GAAG5nK,IAAI,CAACC,KAAK,CAAC2nK,UAAU,CAAC;MACnC,IAAIA,UAAU,IAAIA,UAAU,CAAClpK,QAAQ,EAAE;QACrC,MAAM+Q,IAAI,GAAG,CAAC,YAAY,CAAC;QAC3B,KAAK,IAAIotH,QAAQ,GAAG,CAAC,EAAEgrC,QAAQ,GAAGp4J,IAAI,CAAC7Z,MAAM,EAAEinI,QAAQ,GAAGgrC,QAAQ,EAAE,EAAEhrC,QAAQ,EAAE;UAC9E,MAAMv9H,GAAG,GAAGmQ,IAAI,CAACotH,QAAQ,CAAC;UAC1B,MAAMz+G,KAAK,GAAGjf,qFAAK,CAACyoK,UAAU,CAAClpK,QAAQ,EAAEY,GAAG,CAAC;UAC7C,IAAI,CAACH,6FAAa,CAACif,KAAK,CAAC,EAAE;YACzB1f,QAAQ,CAAC1C,GAAG,CAACsD,GAAG,EAAE8e,KAAK,CAAC;UAC1B;QACF;MACF;IACF;;IAEA;IACA,MAAM0pJ,MAAM,GAAG,IAAIH,SAAS,CAAC5qG,MAAM,EAAE1+D,IAAI,CAAC;IAC1CypK,MAAM,CAACtpJ,OAAO,GAAGngB,IAAI,CAACmgB,OAAO;IAC7B67I,GAAG,CAACrjJ,gBAAgB,CAAC,QAAQ,EAAE,MAAM8wJ,MAAM,CAACp9C,KAAK,CAAC,CAAC,CAAC;IAEpDo9C,MAAM,CAAC9wJ,gBAAgB,CAAC,UAAU,EAAGmI,KAAK,IAAK;MAC7C,IAAIA,KAAK,CAAC4oJ,gBAAgB,IAAI5oJ,KAAK,CAAC6oJ,KAAK,GAAG,CAAC,EAAE;QAC7C9Q,cAAc,CAAC4Q,MAAM,CAACrnJ,MAAM,EAAE,UAAU,EAAEtB,KAAK,CAAC8oJ,MAAM,GAAG9oJ,KAAK,CAAC6oJ,KAAK,CAAC;MACvE,CAAC,MAAM;QACL9Q,cAAc,CAAC4Q,MAAM,CAACrnJ,MAAM,EAAE,UAAU,CAAC;MAC3C;IACF,CAAC,CAAC;IAEFf,OAAO,CAAChC,IAAI,CAAC,OAAO,CAAC;IACrB,MAAMwqJ,OAAO,GAAGJ,MAAM,CAAClpK,IAAI,CAAC,CAAC,CAC1B20J,IAAI,CAAExrI,IAAI,IAAK;MACdrI,OAAO,CAACu3B,OAAO,CAAC,OAAO,CAAC;MACxB54C,IAAI,CAACmgB,OAAO,CAACiC,MAAM,CAACnB,IAAI,CAAC,mBAAmB,CAAC;MAC7C+6I,GAAG,CAAC7wI,MAAM,CAAC;QAAErrB,IAAI,EAAE,cAAc;QAAE4pB;MAAK,CAAC,CAAC;MAC1C,OAAOA,IAAI;IACb,CAAC,CAAC,CACDogJ,KAAK,CAAE1nK,KAAK,IAAK;MAChBif,OAAO,CAACu3B,OAAO,CAAC,OAAO,CAAC;MACxB54C,IAAI,CAACmgB,OAAO,CAACiC,MAAM,CAACpB,KAAK,CAAC5e,KAAK,CAAC2f,OAAO,CAAC;MACxC,IAAI3f,KAAK,CAACI,KAAK,EAAE;QACfxC,IAAI,CAACmgB,OAAO,CAACiC,MAAM,CAACpB,KAAK,CAAC5e,KAAK,CAACI,KAAK,CAAC;MACxC;MACAxC,IAAI,CAACmgB,OAAO,CAACiC,MAAM,CAAChgB,KAAK,CAAC,iBAAiB,CAAC;MAC5C45J,GAAG,CAAC7wI,MAAM,CAAC;QAAErrB,IAAI,EAAE,cAAc;QAAEsC;MAAM,CAAC,CAAC;MAC3C,MAAMA,KAAK;IACb,CAAC,CAAC;IACJ8/G,OAAO,CAAC2nD,OAAO,CAAC;EAClB,CAAE,CAAC;AACL;AAEA,SAASE,UAAUA,CAACrgJ,IAAI,EAAE1pB,IAAI,EAAEg8J,GAAG,EAAE;EACnC,IAAIA,GAAG,CAAC9wI,YAAY,CAAC,CAAC,EAAE;IACtB,OAAO+2F,OAAO,CAACz7G,MAAM,CAAC,IAAInE,KAAK,CAAC,qBAAqB,CAAC,CAAC;EACzD;EAEA25J,GAAG,CAAC7wI,MAAM,CAAC;IAAErrB,IAAI,EAAE;EAAU,CAAC,CAAC;EAE/B,MAAMqpK,SAAS,GAAGroK,sFAAM,CAACi3J,EAAE,CAAClZ,OAAO,CAACt+H,IAAI,CAAC;IAAE8sG,MAAM,EAAErtH,IAAI,CAACowH,QAAQ;IAAE/nG,GAAG,EAAEroB,IAAI,CAACopK,OAAO;IAAE1/I;EAAK,CAAC,CAAC,CAAC;EAC7F,IAAI,CAACy/I,SAAS,EAAE;IACd,OAAOlnD,OAAO,CAACz7G,MAAM,CAAC,IAAInE,KAAK,CAAC,gCAAgC,CAAC,CAAC;EACpE;EAEA,MAAMnL,MAAM,GAAG,IAAIiyK,SAAS,CAACz/I,IAAI,EAAE1pB,IAAI,CAAC;EACxC9I,MAAM,CAACipB,OAAO,GAAGngB,IAAI,CAACmgB,OAAO;EAC7B67I,GAAG,CAACrjJ,gBAAgB,CAAC,QAAQ,EAAE,MAAMzhB,MAAM,CAACm1H,KAAK,CAAC,CAAC,CAAC;EAEpDhrG,OAAO,CAAChC,IAAI,CAAC,OAAO,CAAC;EACrB,OAAOnoB,MAAM,CAAC0K,KAAK,CAAC,CAAC,CAClBszJ,IAAI,CAAE8U,OAAO,IAAK;IACjB3oJ,OAAO,CAACu3B,OAAO,CAAC,OAAO,CAAC;IACxBojH,GAAG,CAAC7wI,MAAM,CAAC;MAAErrB,IAAI,EAAE,aAAa;MAAE4pB,IAAI,EAAEsgJ;IAAQ,CAAC,CAAC;IAClD,OAAOA,OAAO;EAChB,CAAC,CAAC,CACDF,KAAK,CAAE1nK,KAAK,IAAK;IAChBif,OAAO,CAACu3B,OAAO,CAAC,OAAO,CAAC;IACxB54C,IAAI,CAACoC,KAAK,GAAGA,KAAK;IAClBpC,IAAI,CAACmgB,OAAO,CAACiC,MAAM,CAACpB,KAAK,CAAC5e,KAAK,CAAC2f,OAAO,CAAC;IACxC,IAAI3f,KAAK,CAACI,KAAK,EAAE;MACfxC,IAAI,CAACmgB,OAAO,CAACiC,MAAM,CAACpB,KAAK,CAAC5e,KAAK,CAACI,KAAK,CAAC;IACxC;IACAxC,IAAI,CAACmgB,OAAO,CAACiC,MAAM,CAAChgB,KAAK,CAAC,gBAAgB,CAAC;IAC3C45J,GAAG,CAAC7wI,MAAM,CAAC;MAAErrB,IAAI,EAAE,aAAa;MAAEsC;IAAM,CAAC,CAAC;IAC1C,MAAMA,KAAK;EACb,CAAC,CAAC;AACN;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA62J,IAAI,CAAC51J,SAAS,CAAC9C,IAAI,GAAG,UAAUm+D,MAAM,EAAE1+D,IAAI,EAAE;EAC5CA,IAAI,GAAGc,uFAAO,CAAC,CAAC,CAAC,EAAEd,IAAI,EAAE;IACvBmgB,OAAO,EAAE;EACX,CAAC,CAAC;;EAEF;EACA,IAAI,CAAC,IAAI,CAAC9f,QAAQ,CAAC2d,GAAG,CAAC4V,GAAG,CAACC,SAAS,EAAE;IACpC;IACA,IAAI,IAAI,CAAComI,QAAQ,CAAC1iK,MAAM,EAAE;MACxB,IAAI,CAAC0iK,QAAQ,CAACrmJ,OAAO,CAAEooJ,GAAG,IAAK;QAC7BA,GAAG,CAAC/wI,MAAM,CAAC,CAAC;MACd,CAAC,CAAC;MACF,IAAI,CAACgvI,QAAQ,CAAC1iK,MAAM,GAAG,CAAC;IAC1B;;IAEA;IACA,IAAI,CAACyI,IAAI,CAACua,SAAS,EAAE;MAAE;MACrB,IAAI,CAACxd,KAAK,CAAC,IAAI,CAAC;IAClB;EACF;EAEA,IAAI,CAACq8J,aAAa,CAACr8J,KAAK,CAAC,CAAC;EAE1B,IAAI,CAAC8jB,aAAa,CAAC;IAAE/gB,IAAI,EAAE,SAAS;IAAE8D,OAAO,EAAE5D,IAAI;IAAE0+D;EAAO,CAAC,CAAC;EAE9D,MAAMs9F,GAAG,GAAG,IAAIjxI,SAAS,CAAC,CAAC;EAC3B,IAAI,CAACkvI,QAAQ,CAACv2J,IAAI,CAACs4J,GAAG,CAAC;EACvBA,GAAG,CAACrjJ,gBAAgB,CAAC,cAAc,EAAGtI,CAAC,IAAK;IAC1C,IAAI,CAACwQ,aAAa,CAACxQ,CAAC,CAAC+a,UAAU,CAAC;EAClC,CAAC,CAAC;EAEF,IAAI,CAAC4uI,QAAQ,CAAC/+I,IAAI,CAAC,IAAI,CAACo+I,UAAU,CAAC;EAEnC,MAAM4Q,SAAS,GAAIC,QAAQ,IAAK;IAC9B,MAAMC,QAAQ,GAAG,IAAI,CAAClQ,QAAQ,CAACxkJ,OAAO,CAACumJ,GAAG,CAAC;IAC3C,IAAImO,QAAQ,KAAK,CAAC,CAAC,EAAE;MACnB,IAAI,CAAClQ,QAAQ,CAACrsH,MAAM,CAACu8H,QAAQ,EAAE,CAAC,CAAC;IACnC;IACA,IAAI,CAACnQ,QAAQ,CAAC7+I,IAAI,CAAC,CAAC;IACpB,IAAI,CAACivJ,aAAa,CAAC,CAAC;IACpBpO,GAAG,CAAC7wI,MAAM,CAAC;MAAErrB,IAAI,EAAE,aAAa;MAAEoqK;IAAS,CAAC,CAAC;IAC7C,OAAOA,QAAQ;EACjB,CAAC;EAED,OAAOb,UAAU,CAAC3qG,MAAM,EAAE1+D,IAAI,EAAEg8J,GAAG,CAAC,CACjC9G,IAAI,CAAExrI,IAAI,IAAKqgJ,UAAU,CAACrgJ,IAAI,EAAE1pB,IAAI,EAAEg8J,GAAG,CAAC,CAAC,CAC3C9G,IAAI,CAAExtI,MAAM,IAAK;IAChB,MAAMjC,IAAI,GAAG,IAAI,CAAC4kJ,OAAO,CAAC3iJ,MAAM,EAAE1nB,IAAI,CAAC;IACvC,OAAOiqK,SAAS,CAACxkJ,IAAI,CAAC;EACxB,CAAC,CAAC,CACDqkJ,KAAK,CAAEza,GAAG,IAAK;IACd,IAAI,CAACjtI,MAAM,CAAChgB,KAAK,CAAC,qBAAqB,CAAC;IACxC,IAAI,CAACggB,MAAM,CAACpB,KAAK,CAACquI,GAAG,CAAC;IACtB,MAAM4a,SAAS,CAAC5a,GAAG,CAAC;EACtB,CAAC,CAAC;AACN,CAAC;;AAED;AACA;AACA;AACA;AACA4J,IAAI,CAAC51J,SAAS,CAACinK,MAAM,GAAG,UAAU7kJ,IAAI,EAAE;EACtC,IAAI,CAAC06I,aAAa,CAAC16I,IAAI,IAAI,IAAI,CAACo7I,gBAAgB,CAAC,CAAC,CAAC;EACnD,IAAI,CAACwH,UAAU,CAAC,CAAC;EACjB,IAAIhoK,QAAQ,CAAC2d,GAAG,CAAClD,MAAM,CAAC6E,EAAE,EAAE;IAC1B,IAAI,CAAC+6I,mBAAmB,CAAC,CAAC;EAC5B;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACAzB,IAAI,CAAC51J,SAAS,CAACknK,eAAe,GAAG,UAAUC,QAAQ,EAAE;EACnD,IAAI,CAACC,cAAc,CAAC,CAAC;EACrB,MAAMloK,IAAI,GAAG,IAAI;EACjB,MAAMq7G,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC,CAAC;EACvC,IAAI3iD,MAAM,KAAK,IAAI,EAAE;IACnB,IAAI,CAACx7F,MAAM,CAAChgB,KAAK,CAAC,oDAAoD,CAAC;IACvE;EACF;EACA,IAAI;IACF,IAAI,CAACsoK,UAAU,GAAG,IAAIhf,aAAS,CAC7B9tC,MAAM,CAACz7E,UAAU,CAAC,CAAC,EACnBqoI,QAAQ,EACR;MACE7d,mBAAmBA,CAAA,EAAG;QACpBpqJ,IAAI,CAACse,aAAa,CAAC;UACjB/gB,IAAI,EAAE,sBAAsB;UAC5BsE,KAAK,EAAE;YACLumK,SAAS,EAAEpoK,IAAI,CAACqoK,YAAY;YAC5B/e,SAAS,EAAEtpJ,IAAI,CAACmoK,UAAU,GAAGnoK,IAAI,CAACmoK,UAAU,CAAC7e,SAAS,GAAG;UAC3D;QACF,CAAC,CAAC;MACJ,CAAC;MACDgB,OAAOA,CAAC9qI,OAAO,EAAE;QACfxf,IAAI,CAACkoK,cAAc,CAAC,CAAC;QACrBloK,IAAI,CAAC6f,MAAM,CAAChgB,KAAK,CAAC2f,OAAO,CAAC;MAC5B;IACF,CACF,CAAC;EACH,CAAC,CAAC,OAAO1R,CAAC,EAAE;IACV,IAAI,CAAC+R,MAAM,CAAChgB,KAAK,CAAC,iDAAiD,CAAC;IACpE;EACF;EACA,IAAI,CAACyoK,kBAAkB,CAAC,CAAC;AAC3B,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA5R,IAAI,CAAC51J,SAAS,CAACynK,eAAe,GAAG,YAAY;EAC3C,IAAI,IAAI,CAAC5Q,aAAa,KAAK,IAAI,EAAE;IAC/B;EACF;EACA,IAAI,CAAC0Q,YAAY,GAAG,KAAK;EACzBG,aAAa,CAAC,IAAI,CAAC7Q,aAAa,CAAC;EACjC,IAAI,CAACA,aAAa,GAAG,IAAI;EACzB,IAAI,IAAI,CAACwQ,UAAU,EAAE;IACnB,IAAI,CAAC7pJ,aAAa,CAAC;MACjB/gB,IAAI,EAAE,sBAAsB;MAC5BsE,KAAK,EAAE;QACLumK,SAAS,EAAE,IAAI,CAACC,YAAY;QAC5B/e,SAAS,EAAE,IAAI,CAAC6e,UAAU,CAAC7e;MAC7B;IACF,CAAC,CAAC;EACJ;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACAoN,IAAI,CAAC51J,SAAS,CAACwnK,kBAAkB,GAAG,YAAY;EAC9C,IAAI,CAACD,YAAY,GAAG,IAAI;EACxB,IAAII,YAAY,GAAG,IAAI,GAAG3qK,QAAQ,CAAC2d,GAAG,CAAC0U,MAAM;EAC7Cs4I,YAAY,GAAGjsK,MAAM,CAACyP,KAAK,CAACw8J,YAAY,CAAC,GAAG,CAAC,GAAGA,YAAY;EAC5D,MAAMzoK,IAAI,GAAG,IAAI;EACjB,MAAM;IAAEo7G;EAAM,CAAC,GAAGp7G,IAAI,CAACiyJ,IAAI;EAC3B,MAAM52C,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC,CAAC;EACvC,IAAI3iD,MAAM,EAAE;IACVA,MAAM,CAACwD,kBAAkB,CAAC,CAAC;IAC3BxD,MAAM,CAACuD,wBAAwB,CAAC,CAAC;IACjC,IAAI,CAACi6C,YAAY,CAAC5/I,KAAK,CAAC64C,OAAO,GAAG,GAAG;EACvC;EACA,IAAI,CAAC6lG,aAAa,GAAG+Q,WAAW,CAAC,MAAM;IACrC1oK,IAAI,CAACse,aAAa,CAAC;MACjB/gB,IAAI,EAAE,sBAAsB;MAC5BsE,KAAK,EAAE;QACLumK,SAAS,EAAEpoK,IAAI,CAACqoK,YAAY;QAC5B/e,SAAS,EAAEtpJ,IAAI,CAACmoK,UAAU,CAAC7e;MAC7B;IACF,CAAC,CAAC;IACF,IAAItpJ,IAAI,CAACmoK,UAAU,CAAC3e,YAAY,EAAE;MAChCpuC,KAAK,CAACz0E,aAAa,CAAC3mC,IAAI,CAACmoK,UAAU,CAAC;MACpCnoK,IAAI,CAAC2oK,kBAAkB,CAAC3oK,IAAI,CAACmoK,UAAU,CAAC;MACxCnoK,IAAI,CAAC6nK,aAAa,CAAC,UAAU7nK,IAAI,CAACmoK,UAAU,CAACzc,UAAU,OAAO1rJ,IAAI,CAACmoK,UAAU,CAACje,YAAY,oBACtElqJ,IAAI,CAACmoK,UAAU,CAACjd,SAAS,EAAE,CAAC;MAChD,IAAI;QACFlrJ,IAAI,CAACmoK,UAAU,CAAC1c,SAAS,CAAC,CAAC;MAC7B,CAAC,CAAC,OAAO39I,CAAC,EAAE;QACV9N,IAAI,CAAC6f,MAAM,CAAChgB,KAAK,CAAC,wBAAwB,CAAC;QAC3CG,IAAI,CAACkoK,cAAc,CAAC,CAAC;QACrB;MACF;MACAloK,IAAI,CAACs3J,WAAW,GAAG,IAAI;IACzB;EACF,CAAC,EAAEmR,YAAY,CAAC;AAClB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA/R,IAAI,CAAC51J,SAAS,CAAConK,cAAc,GAAG,YAAY;EAC1C,IAAI,IAAI,CAACvQ,aAAa,KAAK,IAAI,EAAE;IAC/B;EACF;EACA6Q,aAAa,CAAC,IAAI,CAAC7Q,aAAa,CAAC;EACjC,IAAI,CAACwQ,UAAU,CAAC/b,aAAa,CAAC,CAAC;EAC/B,IAAI,CAAC+b,UAAU,GAAG,IAAI;EACtB,IAAI,CAACxQ,aAAa,GAAG,IAAI;EACzB,IAAI,CAACr5I,aAAa,CAAC;IACjB/gB,IAAI,EAAE,sBAAsB;IAC5BsE,KAAK,EAAE;EACT,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA60J,IAAI,CAAC51J,SAAS,CAACgnK,OAAO,GAAG,UAAUlrG,UAAU,EAAEn/D,IAAI,EAAE;EACnD,MAAM+2J,GAAG,GAAG,IAAI,CAACvC,IAAI;EACrB,IAAI2W,UAAU,GAAG,IAAI;EAErB,IAAInrK,IAAI,CAACua,SAAS,EAAE;IAClB,IAAI,CAAC6vJ,aAAa,CAAC,CAAC;IACpB,IAAI,CAACG,eAAe,CAACprG,UAAU,CAAC;IAChC,OAAO,IAAI;EACb;EACA,IAAI,CAACsrG,cAAc,CAAC,CAAC;EACrB,IAAI,CAACzqK,IAAI,IAAI,CAACA,IAAI,CAAC+7J,YAAY,EAAE;IAC/B,IAAI,CAACnrF,KAAK,CAACt6C,IAAI,GAAG,IAAI;IACtB,IAAI,CAACs6C,KAAK,CAACn6C,QAAQ,GAAG,IAAI;EAC5B;EAEA,IAAI0oC,UAAU,CAAC1gD,EAAE,KAAK,SAAS,EAAE;IAC/B,MAAMyjB,OAAO,GAAGi9B,UAAU;;IAE1B;IACA,IAAIn/D,IAAI,CAACioB,QAAQ,EAAE;MACjBia,OAAO,CAACzc,IAAI,GAAGyc,OAAO,CAACzc,IAAI,IAAIizI,eAAe,CAAC14J,IAAI,CAACioB,QAAQ,CAAC,CAAChpB,WAAW,CAAC,CAAC;IAC7E,CAAC,MAAM,IAAIe,IAAI,CAACorK,aAAa,EAAE;MAC7BlpI,OAAO,CAACzc,IAAI,GAAGyc,OAAO,CAACzc,IAAI,IAAIizI,eAAe,CAAC14J,IAAI,CAACorK,aAAa,CAAC,CAACnsK,WAAW,CAAC,CAAC;IAClF,CAAC,MAAM;MACLijC,OAAO,CAACzc,IAAI,GAAG,WAAWzlB,IAAI,CAACowH,QAAQ,WAAW;IACpD;IAEA+6C,UAAU,GAAG,IAAI,CAACjL,UAAU,CAAC,IAAItgD,iBAAa,CAAC19E,OAAO,CAACzc,IAAI,EAAEyc,OAAO,CAAC,CAAC;IACtE,IAAI,CAACk4H,cAAc,GAAG+Q,UAAU;IAEhC,MAAM3qD,IAAI,GAAG,IAAI,CAACv/F,IAAI,CAAC,CAAC;IACxB,IAAI,CAACmB,MAAM,CAACnB,IAAI,CAAC,UAAUjhB,IAAI,CAACioB,QAAQ,KACtCu4F,IAAI,CAACngF,KAAK,WACVmgF,IAAI,CAAC/lF,KAAK,WACV+lF,IAAI,CAAC33E,QAAQ,cACb23E,IAAI,CAAC1uE,MAAM,WAAW,CAAC;IAEzB,IAAIhxC,0FAAU,CAAC,IAAI,CAAC8vE,KAAK,CAACt5C,IAAI,CAAC,EAAE;MAC/B4K,OAAO,CAAC4pB,cAAc,CAAC,IAAI,CAAC8kB,KAAK,CAACt5C,IAAI,CAAC;IACzC;IAEA,IAAIt3B,IAAI,CAAC6wB,MAAM,EAAE;MACf;IAAA,CACD,MAAM,IAAIxwB,QAAQ,CAAC2d,GAAG,CAAC4S,UAAU,EAAE;MAClC,QAAQ5wB,IAAI,CAACowH,QAAQ;QACnB,KAAK,KAAK;UACR,IAAI,CAACnzH,SAAS,CAAC,OAAO,CAAC;UACvB;QACF,KAAK,KAAK;QACV,KAAK,MAAM;QACX,KAAK,KAAK;UACR,IAAI07J,gBAAgB,CAACz2H,OAAO,CAAC,EAAE;YAC7B,IAAI,CAACjlC,SAAS,CAAC,OAAO,CAAC;UACzB,CAAC,MAAM;YACL,IAAI,CAACA,SAAS,CAAC,OAAO,CAAC;UACzB;UACA;QACF;UACE,IAAI,CAACA,SAAS,CAAC,SAAS,CAAC;UACzB;MACJ;IACF,CAAC,MAAM;MACL,IAAI,CAACA,SAAS,CAAC,SAAS,CAAC;IAC3B;EACF,CAAC,MAAM,IAAIkiE,UAAU,CAAC1gD,EAAE,KAAK,QAAQ,EAAE;IACrC,IAAI,CAAC4sJ,OAAO,CAAC,CAAC;IACdF,UAAU,GAAG,IAAI,CAACG,SAAS,CAACnsG,UAAU,CAAC;EACzC;EAEA43F,GAAG,CAAC99F,MAAM,CAACG,sBAAsB,CAAC,CAAC;EACnC,IAAI,CAAC4oG,UAAU,CAAC,CAAC;;EAEjB;EACAjL,GAAG,CAAC35F,IAAI,CAACvH,cAAc,CAAC,CAAC;EACzB,IAAI,CAACwyG,UAAU,CAAC,CAAC;;EAEjB;EACA,IAAI,CAAC3M,eAAe,CAAC/U,QAAQ,CAACtmJ,QAAQ,CAAC2d,GAAG,CAACmS,WAAW,GAAG,IAAI,CAACsxI,iBAAiB,CAAC,CAAC,CAAC;EAElF,IAAI,CAACyG,aAAa,CAAC,CAAC;EAEpB,IAAI7nK,QAAQ,CAAC2d,GAAG,CAAC2S,cAAc,EAAE;IAC/B,IAAI,CAAC46I,gBAAgB,CAAC,CAAC;EACzB;EAEA,IAAIlrK,QAAQ,CAAC2d,GAAG,CAAClD,MAAM,CAAC6E,EAAE,EAAE;IAC1B,IAAI,CAAC+6I,mBAAmB,CAAC,CAAC;EAC5B;EAEA,IAAI,IAAI,CAAC9pF,KAAK,CAAC1xE,IAAI,EAAE;IACnB,IAAI,CAACA,IAAI,CAAC,IAAI,CAAC0xE,KAAK,CAAC1xE,IAAI,CAAC;IAC1B,OAAO,IAAI,CAAC0xE,KAAK,CAAC1xE,IAAI;EACxB;EAEA,IAAI,CAACkrK,aAAa,CAAC,CAAC;EAEpB,OAAOe,UAAU;AACnB,CAAC;AAEDlS,IAAI,CAAC51J,SAAS,CAACgoK,OAAO,GAAG,YAAY;EACnC,IAAI,IAAI,CAACG,SAAS,EAAE;IAClB,IAAI,CAACA,SAAS,CAACn/C,KAAK,CAAC,CAAC;IACtB,IAAI,CAACm/C,SAAS,GAAG,IAAI;EACvB;;EAEA;EACA,IAAI,CAACrL,aAAa,CAAC,IAAI,CAACM,gBAAgB,CAAC,CAAC,CAAC;EAE3C,IAAI,CAAC5G,WAAW,GAAG,IAAI;AACzB,CAAC;AAEDZ,IAAI,CAAC51J,SAAS,CAACooK,MAAM,GAAG,UAAU/sG,MAAM,EAAE;EACxC,IAAI,CAAC2sG,OAAO,CAAC,CAAC;EAEd,MAAM/B,SAAS,GAAGxoK,sFAAM,CAACi3J,EAAE,CAACnZ,OAAO,CAACr+H,IAAI,CAAC;IAAEm+C;EAAO,CAAC,CAAC,CAAC;EACrD,IAAI,CAAC4qG,SAAS,EAAE;IACd,IAAI,CAAClnJ,MAAM,CAAChgB,KAAK,CAACk2J,gBAAgB,CAAC;IACnC,OAAOr2C,OAAO,CAACz7G,MAAM,CAAC,IAAInE,KAAK,CAACi2J,gBAAgB,CAAC,CAAC;EACpD;EAEA,MAAMmR,MAAM,GAAG,IAAI,CAAC+B,SAAS,GAAG,IAAIlC,SAAS,CAAC5qG,MAAM,EAAE;IAAEx4C,MAAM,EAAE;EAAK,CAAC,CAAC;EACvEujJ,MAAM,CAACtpJ,OAAO,GAAG,IAAI;EACrB,OAAOspJ,MAAM,CAAClpK,IAAI,CAAC,CAAC,CAAC20J,IAAI,CAAExrI,IAAI,IAAK;IAClC,MAAMy/I,SAAS,GAAGroK,sFAAM,CAACi3J,EAAE,CAAClZ,OAAO,CAACt+H,IAAI,CAAC;MAAE8sG,MAAM,EAAE;IAAO,CAAC,CAAC,CAAC;IAC7D,IAAI,CAAC87C,SAAS,EAAE;MACd,MAAM,IAAI9mK,KAAK,CAACk2J,gBAAgB,CAAC;IACnC;IACA,MAAMrhK,MAAM,GAAG,IAAIiyK,SAAS,CAACz/I,IAAI,CAAC;IAClCxyB,MAAM,CAACipB,OAAO,GAAG,IAAI;IACrB,OAAOjpB,MAAM,CAAC0K,KAAK,CAAC,CAAC,CAACszJ,IAAI,CAAE/1F,UAAU,IAAK;MACzC,IAAI,CAACmsG,SAAS,CAACnsG,UAAU,CAAC;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC,CAAC2qG,KAAK,CAAE1nK,KAAK,IAAK;IAClB,IAAI,CAACggB,MAAM,CAAChgB,KAAK,CAAC,wBAAwB,CAAC;IAC3C,IAAI,CAACggB,MAAM,CAACpB,KAAK,CAAC5e,KAAK,CAAC;EAC1B,CAAC,CAAC;AACJ,CAAC;AAED62J,IAAI,CAAC51J,SAAS,CAACioK,SAAS,GAAG,UAAUnsG,UAAU,EAAE;EAC/CA,UAAU,CAACv/B,SAAS,CAAC,CAAC;EAEtB,MAAM4kI,YAAY,GAAG,IAAIl5C,gBAAY,CAAC,QAAQ,EAAEnsD,UAAU,CAAC;EAC3DqlG,YAAY,CAACh6C,OAAO,CAAC,CAAC,CAACttD,MAAM,CAACv/D,GAAG,CAACqhE,QAAQ,CAAC3J,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC;EAC3D,MAAM61G,UAAU,GAAG,IAAI,CAACjL,UAAU,CAACsE,YAAY,CAAC;EAEhD,IAAI,CAAC3K,WAAW,GAAG,IAAI;EACvB,OAAOsR,UAAU;AACnB,CAAC;AAEDlS,IAAI,CAAC51J,SAAS,CAAC++J,YAAY,GAAG,YAAY;EACxC,IAAIzmD,YAAY,GAAG,KAAK;EACxB,IAAI,CAAC2kD,qBAAqB,CAAE1iD,MAAM,IAAK;IACrCjC,YAAY,GAAGA,YAAY,IAAIiC,MAAM,CAACjC,YAAY,CAAC,CAAC;EACtD,CAAC,CAAC;EACF,OAAOA,YAAY;AACrB,CAAC;AAEDs9C,IAAI,CAAC51J,SAAS,CAACqoK,eAAe,GAAG,YAAY;EAC3C,MAAMnpK,IAAI,GAAG,IAAI;EACjB,MAAMw0J,GAAG,GAAG,IAAI,CAACvC,IAAI;EACrB,IAAIl1J,CAAC;EACL,IAAIC,CAAC;;EAEL;EACA,MAAMosK,QAAQ,GAAG,EAAE;EACnB,KAAKrsK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGy3J,GAAG,CAACp5C,KAAK,CAAC/oD,QAAQ,CAACr9D,MAAM,EAAE,EAAE+H,CAAC,EAAE;IAC9C,MAAMmL,KAAK,GAAGssJ,GAAG,CAACp5C,KAAK,CAAC/oD,QAAQ,CAACt1D,CAAC,CAAC;IACnC,IAAI,EAAEmL,KAAK,YAAYy0D,UAAM,CAAC,EAAE;MAC9BysG,QAAQ,CAACjoK,IAAI,CAAC+G,KAAK,CAAC;IACtB;EACF;EACA,KAAKnL,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGqsK,QAAQ,CAACp0K,MAAM,EAAE,EAAE+H,CAAC,EAAE;IACpCqsK,QAAQ,CAACrsK,CAAC,CAAC,CAACoL,MAAM,CAACxM,MAAM,CAACytK,QAAQ,CAACrsK,CAAC,CAAC,CAAC;EACxC;EAEA8iH,UAAU,CAAC,MAAM;IACf,MAAMxpF,OAAO,GAAGr2B,IAAI,CAACk0B,QAAQ;IAC7B,KAAKn3B,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAGq5B,OAAO,CAACrhC,MAAM,EAAE+H,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;MAC1C,MAAMuP,GAAG,GAAG+pB,OAAO,CAACt5B,CAAC,CAAC;MACtB,IAAIuP,GAAG,CAAC8sG,YAAY,EAAE;QACpB9sG,GAAG,CAAC6pC,KAAK,CAAC,CAAC;MACb;MACA,IAAI7pC,GAAG,CAACmgJ,WAAW,CAAC,CAAC,EAAE;QACrB+H,GAAG,CAACp5C,KAAK,CAACl9G,GAAG,CAACoO,GAAG,CAACmgJ,WAAW,CAAC,CAAC,CAAC;MAClC;IACF;EACF,CAAC,EAAE,EAAE,CAAC;AACR,CAAC;AAEDiK,IAAI,CAAC51J,SAAS,CAAClE,UAAU,GAAG,UAAUysK,OAAO,EAAEnmJ,IAAI,EAAE;EACnD,MAAMm4F,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC96I,IAAI,CAAC;EAC3C,IAAI,CAACm4F,MAAM,EAAE;IACX,MAAM,IAAIv7G,KAAK,CAAC,gCAAgC,CAAC;EACnD;EAEA,SAASwpK,eAAeA,CAAA,EAAG;IACzB,MAAMv0I,IAAI,GAAGsmF,MAAM,GAAGA,MAAM,CAACz7E,UAAU,CAAC,CAAC,CAACypB,cAAc,CAAC,CAAC,GAAG,CAAC;IAC9D,MAAM9rD,IAAI,GAAGw3B,IAAI,GAAG,CAAC,GAAI,gBAAgBA,IAAI,EAAE,GAAI,iBAAiB;IACpE,OAAO,iBAAiBA,IAAI,KAAKx3B,IAAI,GAAG;EAC1C;EAEA,IAAI8rK,OAAO,KAAK7vJ,SAAS,EAAE;IACzB,OAAO8vJ,eAAe,CAAC,CAAC;EAC1B;EACA,IAAI/qK,0FAAU,CAAC8qK,OAAO,CAAC,EAAE;IACvBA,OAAO,GAAGnsK,IAAI,CAACsM,GAAG,CAACrK,QAAQ,CAACkqK,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;EAC9C;EACA,IAAIhuD,MAAM,CAACz7E,UAAU,CAAC,CAAC,CAAC2pB,cAAc,CAAC8/G,OAAO,CAAC,EAAE;IAC/C,IAAI,CAACxD,WAAW,CAAC,CAAC;IAClB,IAAI,CAAC0D,gBAAgB,CAAC,CAAC;EACzB;EACA,OAAOD,eAAe,CAAC,CAAC;AAC1B,CAAC;;AAED;AACA;AACA;AACA5S,IAAI,CAAC51J,SAAS,CAACnG,OAAO,GAAG,YAAY;EACnC,IAAI,IAAI,CAAC08J,SAAS,EAAE;IAClB,IAAI,CAACx3I,MAAM,CAACjB,IAAI,CAAC,mCAAmC,CAAC;IACrD;EACF;EACA,IAAI,CAACy4I,SAAS,GAAG,IAAI;EAErB,IAAI,CAAC/4I,aAAa,CAAC;IAAE/gB,IAAI,EAAE;EAAa,CAAC,CAAC;EAE1C,IAAI,CAAC4rK,eAAe,CAAC,CAAC;EAEtB,IAAI,CAAClX,IAAI,CAACsI,UAAU,CAAC//J,KAAK,CAAC,CAAC;EAE5B,MAAMgvK,cAAc,GAAG,EAAE;EACzB,IAAI,CAACzL,qBAAqB,CAAE1iD,MAAM,IAAK;IACrC,IAAIA,MAAM,CAACjC,YAAY,CAAC,CAAC,EAAE;MACzBowD,cAAc,CAACroK,IAAI,CAACk6G,MAAM,CAAC1gH,OAAO,CAAC,CAAC,CAACg4J,IAAI,CAAC,MAAM,IAAIjzC,OAAO,CAAGC,OAAO,IAAK;QACxEtE,MAAM,CAACuD,wBAAwB,CAAC,CAAC;QACjCe,OAAO,CAAC,CAAC;MACX,CAAE,CAAC,CAAC,CAAC;IACP;EACF,CAAC,CAAC;;EAEF;EACA,MAAM3/G,IAAI,GAAG,IAAI;EACjB,IAAI,CAACy3J,QAAQ,CAAC/+I,IAAI,CAAC,IAAI,CAACo+I,UAAU,CAAC;EACnCp3C,OAAO,CAAC7hD,GAAG,CAAC2rG,cAAc,CAAC,CAAC7W,IAAI,CAAC,MAAM;IACrC3yJ,IAAI,CAACy3J,QAAQ,CAAC7+I,IAAI,CAAC,CAAC;IAEpB5Y,IAAI,CAACs3J,WAAW,GAAG,IAAI;IAEvBt3J,IAAI,CAAC6nK,aAAa,CAAC,CAAC;IACpB,IAAI,CAACvpJ,aAAa,CAAC;MAAE/gB,IAAI,EAAE;IAAe,CAAC,CAAC;IAC5CyC,IAAI,CAACq3J,SAAS,GAAG,KAAK;EACxB,CAAC,CAAC;AACJ,CAAC;;AAED;AACAX,IAAI,CAAC51J,SAAS,CAAClG,UAAU,GAAG,YAAY;EACtC,IAAI,CAACmjK,qBAAqB,CAAE1iD,MAAM,IAAK;IACrCA,MAAM,CAAC2E,eAAe,CAAC,CAAC;EAC1B,CAAC,CAAC;AACJ,CAAC;AAED02C,IAAI,CAAC51J,SAAS,CAAC+mK,aAAa,GAAG,UAAU4B,QAAQ,EAAE;EACjD,IAAIr4C,KAAK;EACTq4C,QAAQ,GAAGA,QAAQ,KAAKjwJ,SAAS,GAAG,EAAE,GAAGiwJ,QAAQ;EACjD,MAAMpuD,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC,CAAC;EACvC,IAAI3iD,MAAM,EAAE;IACV+V,KAAK,GAAG/V,MAAM,CAACz7E,UAAU,CAAC,CAAC,CAAC1c,IAAI;IAChC,MAAM9mB,GAAG,GAAGi/G,MAAM,CAAC8C,MAAM,CAAC9C,MAAM,CAACh/G,UAAU,CAAC,CAAC,CAAC;IAC9C+0H,KAAK,IAAKh1H,GAAG,GAAG,MAAMA,GAAG,CAACgC,IAAI,CAAC8kB,IAAI,OAAO,GAAG,EAAG;EAClD,CAAC,MAAM;IACLkuG,KAAK,GAAGxyH,MAAM,CAACiQ,IAAI,CAAC,IAAI,CAAC+oJ,QAAQ,CAAC,CAAC5iK,MAAM,GAAG,CAAC,GAAG,SAAS,GAAG,SAAS;EACvE;EACAo8H,KAAK,IAAIq4C,QAAQ;EAEjB,IAAI,CAACnrJ,aAAa,CAAC;IAAE/gB,IAAI,EAAE,cAAc;IAAE4pB,IAAI,EAAEiqG;EAAM,CAAC,CAAC;AAC3D,CAAC;AAEDslC,IAAI,CAAC51J,SAAS,CAAC8kK,aAAa,GAAG,YAAY;EACzC,IAAI,CAACtO,WAAW,GAAG,IAAI;AACzB,CAAC;AAEDZ,IAAI,CAAC51J,SAAS,CAAC4oK,sBAAsB,GAAG,YAAY;EAClD,MAAMt3I,OAAO,GAAG,EAAE;EAElB,IAAI,CAAC2rI,qBAAqB,CAAE1iD,MAAM,IAAK;IACrC,IAAIA,MAAM,CAACwC,iBAAiB,CAAC,CAAC,KAAK,CAAC,EAAE;MACpC;IACF;IAEA,MAAMvhH,QAAQ,GAAG++G,MAAM,CAACoD,qBAAqB,CAAC,CAAC,IAAIpD,MAAM,CAACI,eAAe,CAAC,CAAC,CAAC;IAC5E,MAAMkuD,SAAS,GAAG7rK,QAAQ,CAAC2d,GAAG,CAAC8S,OAAO,CAACC,OAAO;IAC9C,MAAMpM,GAAG,GAAGi5F,MAAM,CAACl9G,MAAM,CAAC;MACxB7B,QAAQ;MACR8B,IAAI,EAAEurK,SAAS,CAAC,CAAC,CAAC,CAACvrK,IAAI,CAAC8d,EAAE;MAC1B5d,OAAO,EAAEqrK,SAAS,CAAC,CAAC,CAAC,CAACrrK,OAAO,CAAC4d,EAAE;MAChCzf,QAAQ,EAAEktK,SAAS,CAAC,CAAC,CAAC,CAACltK,QAAQ,CAACyf;IAClC,CAAC,CAAC;IACF,IAAI,CAACkG,GAAG,EAAE;MACR,IAAIi5F,MAAM,CAAC2C,QAAQ,CAAC,CAAC,KAAKX,iBAAa,CAACiB,uBAAuB,EAAE;QAC/D,IAAI,CAACz+F,MAAM,CAACjB,IAAI,CAAC,2CAA2Cy+F,iBAAa,CAACiB,uBAAuB,EAAE,CAAC;MACtG;MACA;IACF;IAEA,IAAI,CAAChgG,aAAa,CAAC;MAAE/gB,IAAI,EAAE,UAAU;MAAEyH,KAAK,EAAEod,GAAG,CAACpd,KAAK;MAAEke,IAAI,EAAEm4F,MAAM,CAACn4F;IAAK,CAAC,CAAC;IAC7Em4F,MAAM,CAACh/G,UAAU,CAAC+lB,GAAG,CAACpd,KAAK,CAAC;IAE5BotB,OAAO,CAACjxB,IAAI,CAACk6G,MAAM,CAACn4F,IAAI,CAAC;EAC3B,CAAC,CAAC;EAEF,IAAIkP,OAAO,CAACp9B,MAAM,GAAG,CAAC,EAAE;IACtB,IAAI,CAAC6qB,MAAM,CAAClB,MAAM,CAAC,oDAAoDyT,OAAO,CAAC5vB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;EAC9F;AACF,CAAC;;AAED;AACA;AACA;AACA;AACAk0J,IAAI,CAAC51J,SAAS,CAAC8oK,QAAQ,GAAG,UAAU71I,IAAI,EAAE;EACxCA,IAAI,GAAGA,IAAI,IAAK,IAAI,CAACs6C,KAAK,IAAI,IAAI,CAACA,KAAK,CAACt6C,IAAK,IAAI,EAAE;EACpD,IAAI,CAACgqI,qBAAqB,CAAE1iD,MAAM,IAAKA,MAAM,CAAC3gH,SAAS,CAACq5B,IAAI,CAAC,CAAC;AAChE,CAAC;;AAED;AACA;AACA;AACA;AACA2iI,IAAI,CAAC51J,SAAS,CAACtF,WAAW,GAAG,UAAU8yB,MAAM,EAAE;EAC7C,MAAM;IAAEC;EAAQ,CAAC,GAAGzwB,QAAQ,CAAC2d,GAAG;EAChC,MAAMouJ,QAAQ,GAAG,CACfv7I,MAAM,IAAIxwB,QAAQ,CAAC4Z,QAAQ,CAAC4W,MAAM,EAClCxwB,QAAQ,CAAC4Z,QAAQ,CAAC4W,MAAM,EACxB1vB,MAAM,CAACiQ,IAAI,CAAC0f,OAAO,CAAC,CAAC,CAAC,CAAC,CACxB;EACD,IAAIwF,IAAI,GAAG,IAAI;EACf,KAAK,IAAIh3B,CAAC,GAAG,CAAC,EAAE,CAACg3B,IAAI,IAAIh3B,CAAC,GAAG8sK,QAAQ,CAAC70K,MAAM,EAAE,EAAE+H,CAAC,EAAE;IACjDe,QAAQ,CAAC1C,GAAG,CAAC,QAAQ,EAAEyuK,QAAQ,CAAC9sK,CAAC,CAAC,CAAC;IACnCg3B,IAAI,GAAGxF,OAAO,CAACzwB,QAAQ,CAAC2d,GAAG,CAAC6S,MAAM,CAAC;IACnC,IAAI,CAACyF,IAAI,EAAE;MACT,IAAI,CAAClU,MAAM,CAACjB,IAAI,CAAC,mBAAmB9gB,QAAQ,CAAC2d,GAAG,CAAC6S,MAAM,GAAG,CAAC;IAC7D;EACF;EACA,IAAI,CAACs7I,QAAQ,CAAC71I,IAAI,CAAC;AACrB,CAAC;;AAED;AACA;AACA;AACA;AACA2iI,IAAI,CAAC51J,SAAS,CAACpG,SAAS,GAAG,UAAU4zB,MAAM,EAAE;EAC3C,MAAMyF,IAAI,GAAG,IAAI,CAACs6C,KAAK,IAAI,IAAI,CAACA,KAAK,CAACt6C,IAAI;EAC1C,IAAIA,IAAI,EAAE;IACR,IAAI,CAAC61I,QAAQ,CAAC71I,IAAI,CAAC;EACrB,CAAC,MAAM;IACL,IAAI,CAACv4B,WAAW,CAAC8yB,MAAM,CAAC;EAC1B;AACF,CAAC;;AAED;AACA;AACA;AACA;AACAooI,IAAI,CAAC51J,SAAS,CAACk9G,QAAQ,GAAG,UAAU96F,IAAI,EAAE;EACxC,MAAMm4F,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC96I,IAAI,CAAC;EAC3C,OAAOm4F,MAAM,GAAGA,MAAM,CAAC2C,QAAQ,CAAC,CAAC,GAAG,CAAC;AACvC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA04C,IAAI,CAAC51J,SAAS,CAACzE,UAAU,GAAG,UAAU2I,KAAK,EAAEke,IAAI,EAAE;EACjD,MAAMm4F,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC96I,IAAI,CAAC;EAC3C,MAAM4mJ,MAAM,GAAGzuD,MAAM,GAAGA,MAAM,CAACh/G,UAAU,CAAC2I,KAAK,CAAC,GAAG,CAAC,CAAC;EACrD,IAAIA,KAAK,IAAI8kK,MAAM,KAAK9kK,KAAK,EAAE;IAC7B,IAAI,CAAC6a,MAAM,CAACjB,IAAI,CAAC,kBAAkB5Z,KAAK,gDAAgD,CAAC;EAC3F;EACA,OAAO8kK,MAAM;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACApT,IAAI,CAAC51J,SAAS,CAAC1E,GAAG,GAAG,UAAU4I,KAAK,EAAE5I,GAAG,EAAE;EACzC,MAAMi/G,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC,EAAE,CAAC;EACzC,IAAI,CAAC3iD,MAAM,EAAE;IACX,OAAO,IAAI;EACb;EACA,MAAMj5F,GAAG,GAAGi5F,MAAM,CAACj/G,GAAG,CAAC4I,KAAK,EAAE5I,GAAG,CAAC;EAClC,IAAIgmB,GAAG,CAAC87F,MAAM,KAAK,SAAS,EAAE;IAC5B,IAAI,CAAC5/F,aAAa,CAAC;MAAE/gB,IAAI,EAAE,UAAU;MAAEyH,KAAK,EAAEod,GAAG,CAACpd,KAAK;MAAEke,IAAI,EAAEm4F,MAAM,CAACn4F;IAAK,CAAC,CAAC;EAC/E,CAAC,MAAM,IAAId,GAAG,CAAC87F,MAAM,KAAK,SAAS,EAAE;IACnC,IAAI,CAAC5/F,aAAa,CAAC;MAAE/gB,IAAI,EAAE,YAAY;MAAEyH,KAAK,EAAEod,GAAG,CAACpd,KAAK;MAAEke,IAAI,EAAEm4F,MAAM,CAACn4F;IAAK,CAAC,CAAC;EACjF;EACA,OAAOd,GAAG,CAAC67F,IAAI;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACAy4C,IAAI,CAAC51J,SAAS,CAACq9G,MAAM,GAAG,UAAUn5G,KAAK,EAAEke,IAAI,EAAE;EAC7C,MAAMm4F,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC96I,IAAI,CAAC;EAC3C,OAAOm4F,MAAM,GAAGA,MAAM,CAAC8C,MAAM,CAACn5G,KAAK,CAAC,GAAG,IAAI;AAC7C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA0xJ,IAAI,CAAC51J,SAAS,CAAC3C,MAAM,GAAG,UAAU/B,GAAG,EAAE8mB,IAAI,EAAE;EAC3C,MAAMm4F,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC96I,IAAI,CAAC;EAC3C,IAAI,CAACm4F,MAAM,EAAE;IACX,OAAO,CAAC,CAAC;EACX;EAEA,MAAMj5F,GAAG,GAAGi5F,MAAM,CAACl9G,MAAM,CAAC/B,GAAG,CAAC;EAC9B,IAAIgmB,GAAG,EAAE;IACP,IAAI,CAAC9D,aAAa,CAAC;MAAE/gB,IAAI,EAAE,UAAU;MAAEyH,KAAK,EAAEod,GAAG,CAACpd,KAAK;MAAEke;IAAK,CAAC,CAAC;IAChE,OAAOd,GAAG,CAACpd,KAAK;EAClB;EACA,OAAO,CAAC,CAAC;AACX,CAAC;;AAED;AACA;AACA;AACA;AACA0xJ,IAAI,CAAC51J,SAAS,CAACrF,SAAS,GAAG,UAAUuJ,KAAK,EAAEke,IAAI,EAAE;EAChD,MAAMm4F,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC96I,IAAI,CAAC;EAC3C,IAAI,CAACm4F,MAAM,EAAE;IACX;EACF;EAEAA,MAAM,CAAC5/G,SAAS,CAACuJ,KAAK,CAAC;EACvB,IAAI,CAACsZ,aAAa,CAAC;IAAE/gB,IAAI,EAAE,YAAY;IAAEyH,KAAK;IAAEke;EAAK,CAAC,CAAC;AACzD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACAwzI,IAAI,CAAC51J,SAAS,CAAClF,OAAO,GAAG,UAAUoJ,KAAK,EAAE25G,IAAI,EAAEz7F,IAAI,EAAE;EACpD,IAAI,CAACo0I,WAAW,GAAG,IAAI;EACvB,MAAMj8C,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC96I,IAAI,CAAC;EAC3C,OAAOm4F,MAAM,GAAGA,MAAM,CAACz/G,OAAO,CAACoJ,KAAK,EAAE25G,IAAI,CAAC,GAAG,IAAI;AACpD,CAAC;AAED+3C,IAAI,CAAC51J,SAAS,CAAC4kK,YAAY,GAAG,UAAUtnK,IAAI,EAAE;EAC5C,IAAI,CAAC2rK,SAAS,GAAG3rK,IAAI;EAErB,MAAM8tD,IAAI,GAAG,IAAI,CAAC0sG,QAAQ;EAC1B,IAAI1sG,IAAI,EAAE;IACRA,IAAI,CAACjzC,KAAK,CAAC64C,OAAO,GAAI1zD,IAAI,KAAKu3J,SAAS,CAACC,OAAO,GAAI,GAAG,GAAG,GAAG;IAE7D,IAAIx3J,IAAI,KAAKu3J,SAAS,CAACC,OAAO,EAAE;MAC9B,MAAMprJ,CAAC,GAAG0hD,IAAI,CAAC89G,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MAC3Cx/J,CAAC,CAACuc,SAAS,GAAI3oB,IAAI,KAAKu3J,SAAS,CAACE,SAAS,GAAI,qBAAqB,GAAG,oBAAoB;IAC7F;EACF;EAEA,IAAI,CAACv3I,aAAa,CAAC;IAAE/gB,IAAI,EAAE,iBAAiB;IAAE4pB,IAAI,EAAE/oB,IAAI,KAAKu3J,SAAS,CAACC;EAAQ,CAAC,CAAC;AACnF,CAAC;AAEDc,IAAI,CAAC51J,SAAS,CAACmpK,uBAAuB,GAAG,YAAY;EACnD,IAAI,IAAI,CAACF,SAAS,KAAKpU,SAAS,CAACC,OAAO,EAAE;IACxC;EACF;EAEA,MAAMsU,OAAO,GAAG,EAAE;EAClB,IAAI,CAACnM,qBAAqB,CAAE1iD,MAAM,IAAK;IACrC,MAAMoF,MAAM,GAAGpF,MAAM,CAACmF,kBAAkB,CAAC,CAAC;IAC1C,IAAIC,MAAM,EAAE;MACVypD,OAAO,CAAC/oK,IAAI,CAACs/G,MAAM,CAAC;IACtB;EACF,CAAC,CAAC;EAEF,IAAIypD,OAAO,KAAK,EAAE,EAAE;IAClB;EACF;EAEA,IAAI,CAACC,QAAQ,GAAGD,OAAO;EAEvB,IAAI,CAACrqJ,MAAM,CAACnB,IAAI,CAAC,2BAA2B,CAAC;EAC7C,IAAI,CAACgnJ,YAAY,CAAC/P,SAAS,CAACE,SAAS,CAAC;EACtC,IAAI,CAACsD,eAAe,CAAC3V,gBAAgB,CAAC,IAAI,CAAC;AAC7C,CAAC;AAEDkT,IAAI,CAAC51J,SAAS,CAACspK,mBAAmB,GAAG,YAAY;EAC/C,IAAI,IAAI,CAACL,SAAS,KAAKpU,SAAS,CAACE,SAAS,EAAE;IAC1C;EACF;EAEA,IAAI,CAACsD,eAAe,CAACvgJ,IAAI,CAAC,CAAC;EAC3B,IAAI,CAACugJ,eAAe,CAAC3V,gBAAgB,CAAC,KAAK,CAAC;EAE5C,KAAK,IAAIzmJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACotK,QAAQ,CAACn1K,MAAM,EAAE,EAAE+H,CAAC,EAAE;IAC7C,IAAI,CAACotK,QAAQ,CAACptK,CAAC,CAAC,CAACmG,KAAK,CAAC,CAAC;EAC1B;EACA,IAAI,CAACinK,QAAQ,GAAG,EAAE;EAElB,IAAI,CAACtqJ,MAAM,CAACnB,IAAI,CAAC,sCAAsC,CAAC;EACxD,IAAI,CAACgnJ,YAAY,CAAC/P,SAAS,CAACC,OAAO,CAAC;EAEpC,IAAI,CAACh7J,UAAU,CAAC,CAAC;AACnB,CAAC;AAED87J,IAAI,CAAC51J,SAAS,CAAC49J,qBAAqB,GAAG,YAAY;EACjD,IAAI,IAAI,CAACqL,SAAS,KAAKpU,SAAS,CAACE,SAAS,EAAE;IAC1C;EACF;EAEA,IAAI,CAACsD,eAAe,CAACvgJ,IAAI,CAAC,CAAC;EAC3B,IAAI,CAACugJ,eAAe,CAAC3V,gBAAgB,CAAC,KAAK,CAAC;EAE5C,KAAK,IAAIzmJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACotK,QAAQ,CAACn1K,MAAM,EAAE,EAAE+H,CAAC,EAAE;IAC7C,IAAI,CAACotK,QAAQ,CAACptK,CAAC,CAAC,CAACm+G,OAAO,CAAC,CAAC;EAC5B;EACA,IAAI,CAACivD,QAAQ,GAAG,EAAE;EAElB,IAAI,CAACtqJ,MAAM,CAACnB,IAAI,CAAC,wCAAwC,CAAC;EAC1D,IAAI,CAACgnJ,YAAY,CAAC/P,SAAS,CAACC,OAAO,CAAC;EAEpC,IAAI,CAAC0B,WAAW,GAAG,IAAI;EACvB,IAAI,CAAC18J,UAAU,CAAC,CAAC;AACnB,CAAC;AAED87J,IAAI,CAAC51J,SAAS,CAACupK,sBAAsB,GAAG,YAAY;EAClD,IAAI,IAAI,CAACN,SAAS,KAAKpU,SAAS,CAACC,OAAO,EAAE;IACxC;EACF;EAEA,MAAM0U,eAAe,GAAG,EAAE;EAC1B,IAAI,CAACvM,qBAAqB,CAAE1iD,MAAM,IAAK;IACrC,IAAIA,MAAM,YAAYgC,iBAAa,IAC1BhC,MAAM,CAACwC,iBAAiB,CAAC,CAAC,GAAG,CAAC,EAAE;MACvCysD,eAAe,CAACnpK,IAAI,CAACk6G,MAAM,CAAC;IAC9B;EACF,CAAC,CAAC;EAEF,IAAIivD,eAAe,CAACt1K,MAAM,KAAK,CAAC,EAAE;IAChC;IACA;IACA;EACF;EAEA,MAAMyrH,MAAM,GAAG6pD,eAAe,CAAC,CAAC,CAAC,CAAC5pD,iBAAiB,CAAC,CAAC;EACrD,IAAI,CAACD,MAAM,EAAE;IACX;EACF;EACA,IAAI,CAAC0pD,QAAQ,GAAG,CAAC1pD,MAAM,CAAC;EAExB,IAAI,CAAC5gG,MAAM,CAACnB,IAAI,CAAC,wCAAwC,CAAC;EAC1D,IAAI,CAACgnJ,YAAY,CAAC/P,SAAS,CAACG,QAAQ,CAAC;EACrC,IAAI,CAACqD,eAAe,CAAC9V,gBAAgB,CAAC,KAAK,CAAC;EAC5C,IAAI,CAAC8V,eAAe,CAAC5V,uBAAuB,CAAC9iC,MAAM,CAAC/D,qBAAqB,CAAC,CAAC,CAAC;EAE5E,IAAI,CAAC46C,WAAW,GAAG,IAAI;AACzB,CAAC;AAEDZ,IAAI,CAAC51J,SAAS,CAACypK,kBAAkB,GAAG,YAAY;EAC9C,IAAI,IAAI,CAACR,SAAS,KAAKpU,SAAS,CAACG,QAAQ,EAAE;IACzC;EACF;EAEA,IAAI,CAACqD,eAAe,CAACvgJ,IAAI,CAAC,CAAC;EAE3B,KAAK,IAAI7b,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACotK,QAAQ,CAACn1K,MAAM,EAAE,EAAE+H,CAAC,EAAE;IAC7C,IAAI,CAACotK,QAAQ,CAACptK,CAAC,CAAC,CAACmG,KAAK,CAAC,CAAC;EAC1B;EACA,IAAI,CAACinK,QAAQ,GAAG,EAAE;EAElB,IAAI,CAACtqJ,MAAM,CAACnB,IAAI,CAAC,qCAAqC,CAAC;EACvD,IAAI,CAACgnJ,YAAY,CAAC/P,SAAS,CAACC,OAAO,CAAC;EACpC,IAAI,CAACuD,eAAe,CAAC9V,gBAAgB,CAAC,IAAI,CAAC;EAC3C,IAAI,CAAC8V,eAAe,CAAC5V,uBAAuB,CAAC,IAAI,CAAC;EAElD,IAAI,CAAC3oJ,UAAU,CAAC,CAAC;AACnB,CAAC;AAED87J,IAAI,CAAC51J,SAAS,CAAC69J,oBAAoB,GAAG,YAAY;EAChD,IAAI,IAAI,CAACoL,SAAS,KAAKpU,SAAS,CAACG,QAAQ,EAAE;IACzC;EACF;EAEA,IAAI,CAACqD,eAAe,CAACvgJ,IAAI,CAAC,CAAC;EAE3B,KAAK,IAAI7b,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACotK,QAAQ,CAACn1K,MAAM,EAAE,EAAE+H,CAAC,EAAE;IAC7C,IAAI,CAACotK,QAAQ,CAACptK,CAAC,CAAC,CAACm+G,OAAO,CAAC,CAAC;EAC5B;EACA,IAAI,CAACivD,QAAQ,GAAG,EAAE;EAElB,IAAI,CAACtqJ,MAAM,CAACnB,IAAI,CAAC,uCAAuC,CAAC;EACzD,IAAI,CAACgnJ,YAAY,CAAC/P,SAAS,CAACC,OAAO,CAAC;EACpC,IAAI,CAACuD,eAAe,CAAC9V,gBAAgB,CAAC,IAAI,CAAC;EAC3C,IAAI,CAAC8V,eAAe,CAAC5V,uBAAuB,CAAC,IAAI,CAAC;EAElD,IAAI,CAAC+T,WAAW,GAAG,IAAI;AACzB,CAAC;AAEDZ,IAAI,CAAC51J,SAAS,CAACw4J,OAAO,GAAG,UAAU/6I,KAAK,EAAE;EACxC,IAAI,CAACzgB,QAAQ,CAAC2d,GAAG,CAAC8U,OAAO,EAAE;IACzB;IACA;EACF;EAEA,IAAI,IAAI,CAAConI,aAAa,KAAK,IAAI,EAAE;IAC/B;IACA;EACF;EAEA,IAAI,IAAI,CAACoS,SAAS,KAAKpU,SAAS,CAACG,QAAQ,EAAE;IACzC;IACA;EACF;EAEA,IAAI,IAAI,CAACqD,eAAe,CAAC1V,eAAe,CAAC,CAAC,EAAE;IAC1C;IACA;EACF;;EAEA;EACA,IAAI9jH,OAAO,GAAG,IAAI;EAClB,IAAIphB,KAAK,CAACjS,GAAG,CAAC2c,IAAI,EAAE;IAClB0W,OAAO,GAAGphB,KAAK,CAACjS,GAAG,CAAC2c,IAAI,CAACuO,OAAO,CAAC2H,QAAQ,CAAC,CAAC,CAACS,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC6lI,SAAS,GAAGlnJ,KAAK,CAACjS,GAAG,CAAC2c,IAAI;EACjC,CAAC,MAAM,IAAI1K,KAAK,CAACjS,GAAG,CAACkrB,OAAO,EAAE;IAC5BmI,OAAO,GAAGphB,KAAK,CAACjS,GAAG,CAACkrB,OAAO,CAAC2H,QAAQ,CAAC,CAAC,CAACS,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC6lI,SAAS,GAAGlnJ,KAAK,CAACjS,GAAG,CAACkrB,OAAO;EACpC,CAAC,MAAM,IAAIjZ,KAAK,CAACjS,GAAG,CAAC0xB,KAAK,EAAE;IAC1B2B,OAAO,GAAGphB,KAAK,CAACjS,GAAG,CAAC0xB,KAAK,CAAC4B,UAAU,CAAC,CAAC;IACtC,IAAI,CAAC6lI,SAAS,GAAGlnJ,KAAK,CAACjS,GAAG,CAAC0xB,KAAK;EAClC,CAAC,MAAM,IAAIzf,KAAK,CAACjS,GAAG,CAAC+9C,QAAQ,EAAE;IAC7B1qB,OAAO,GAAGphB,KAAK,CAACjS,GAAG,CAAC+9C,QAAQ,CAAC1qB,OAAO;IACpC,IAAI,CAAC8lI,SAAS,GAAGlnJ,KAAK,CAACjS,GAAG,CAAC+9C,QAAQ;EACrC,CAAC,MAAM;IACL,IAAI,CAACo7G,SAAS,GAAG,IAAI;EACvB;EAEA,SAAS+E,gBAAgBA,CAACnvD,MAAM,EAAE;IAChCA,MAAM,CAACyD,mBAAmB,CAACvgG,KAAK,CAACjS,GAAG,CAAC;IACrC+uG,MAAM,CAACuD,wBAAwB,CAAC,CAAC;EACnC;;EAEA;EACA,IAAIj/E,OAAO,EAAE;IACX,MAAM07E,MAAM,GAAG,IAAI,CAAC8iD,oBAAoB,CAACx+H,OAAO,CAAC;IACjD,IAAI07E,MAAM,EAAE;MACVmvD,gBAAgB,CAACnvD,MAAM,CAAC;MACxB,IAAI,CAACi8C,WAAW,GAAG,IAAI;IACzB;EACF,CAAC,MAAM;IACL,IAAI,CAACyG,qBAAqB,CAACyM,gBAAgB,CAAC;IAC5C,IAAI,CAAClT,WAAW,GAAG,IAAI;EACzB;EAEA,IAAI,CAACiS,gBAAgB,CAAC,CAAC;EACvB,IAAI,CAACjrJ,aAAa,CAACC,KAAK,CAAC;AAC3B,CAAC;AAEDm4I,IAAI,CAAC51J,SAAS,CAACm4J,UAAU,GAAG,UAAU16I,KAAK,EAAE;EAC3C,IAAI,CAAC,IAAI,CAAC44I,QAAQ,IAAI,CAAC,IAAI,CAACI,eAAe,EAAE;IAC3C;EACF;;EAEA;EACA,IAAIz5J,QAAQ,CAAC2d,GAAG,CAACgV,OAAO,EAAE;IACxB,QAAQlS,KAAK,CAAC4B,IAAI;MAChB,KAAK,MAAM;QACT,IAAI,CAAC8pJ,uBAAuB,CAAC,CAAC;QAC9B;MACF,KAAK,MAAM;QACT,IAAI,CAACI,sBAAsB,CAAC,CAAC;QAC7B;MACF,KAAK,MAAM;QACT,QAAQ,IAAI,CAACN,SAAS;UACpB,KAAKpU,SAAS,CAACE,SAAS;YACtB,IAAI,CAACuU,mBAAmB,CAAC,CAAC;YAC1B;UACF,KAAKzU,SAAS,CAACG,QAAQ;YACrB,IAAI,CAACyU,kBAAkB,CAAC,CAAC;YACzB;UACF;YACE;QACJ;QACA;MACF,KAAK,MAAM;QACT,QAAQ,IAAI,CAACR,SAAS;UACpB,KAAKpU,SAAS,CAACE,SAAS;YACtB,IAAI,CAAC6I,qBAAqB,CAAC,CAAC;YAC5B;UACF,KAAK/I,SAAS,CAACG,QAAQ;YACrB,IAAI,CAAC6I,oBAAoB,CAAC,CAAC;YAC3B;UACF;YACE;QACJ;QACA;MACF;IACF;EACF;;EAEA;EACA,QAAQpgJ,KAAK,CAAC4B,IAAI;IAChB,KAAK,WAAW;MACd,IAAI5B,KAAK,CAACqmI,MAAM,EAAE;QAChBrmI,KAAK,CAACmkI,cAAc,CAAC,CAAC;QACtBnkI,KAAK,CAACkkI,eAAe,CAAC,CAAC;QACvB,IAAI,CAACsb,qBAAqB,CAAE1iD,MAAM,IAAK;UACrCA,MAAM,CAAC4D,eAAe,CAAC,CAAC;UACxB5D,MAAM,CAACuD,wBAAwB,CAAC,CAAC;QACnC,CAAC,CAAC;QACF,IAAI,CAAC2qD,gBAAgB,CAAC,CAAC;QACvB,IAAI,CAACjS,WAAW,GAAG,IAAI;MACzB;MACA;IACF,KAAK,gBAAgB;MACnB,IAAI/4I,KAAK,CAACqmI,MAAM,EAAE;QAChBrmI,KAAK,CAACmkI,cAAc,CAAC,CAAC;QACtBnkI,KAAK,CAACkkI,eAAe,CAAC,CAAC;QACvB,IAAI,CAACsb,qBAAqB,CAAE1iD,MAAM,IAAK;UACrCA,MAAM,CAAC+D,eAAe,CAAC,CAAC;UACxB/D,MAAM,CAACuD,wBAAwB,CAAC,CAAC;QACnC,CAAC,CAAC;QACF,IAAI,CAAC2qD,gBAAgB,CAAC,CAAC;QACvB,IAAI,CAACjS,WAAW,GAAG,IAAI;MACzB;MACA;IACF;EACF;AACF,CAAC;AAEDZ,IAAI,CAAC51J,SAAS,CAACo4J,QAAQ,GAAG,UAAU36I,KAAK,EAAE;EACzC,IAAI,CAAC,IAAI,CAAC44I,QAAQ,IAAI,CAAC,IAAI,CAACI,eAAe,EAAE;IAC3C;EACF;EAEA,IAAIh5I,KAAK,CAAC4B,IAAI,KAAK,MAAM,EAAE;IACzB,IAAI,CAACupJ,sBAAsB,CAAC,CAAC;EAC/B;AACF,CAAC;AAEDhT,IAAI,CAAC51J,SAAS,CAACyoK,gBAAgB,GAAG,YAAY;EAC5C,MAAM7qJ,IAAI,GAAG,IAAI,CAACm6I,YAAY,CAACmR,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;EAC3D,IAAI/gJ,IAAI;EACR,IAAIuO,OAAO;EAEX,IAAIrqB,KAAK,GAAG,CAAC;EACb,IAAI,CAAC4wJ,qBAAqB,CAAE1iD,MAAM,IAAK;IACrCluG,KAAK,IAAIkuG,MAAM,CAACwC,iBAAiB,CAAC,CAAC;EACrC,CAAC,CAAC;EAEF,OAAOn/F,IAAI,CAACtF,UAAU,EAAE;IACtBsF,IAAI,CAACnF,WAAW,CAACmF,IAAI,CAACtF,UAAU,CAAC;EACnC;EAEA,IAAIjM,KAAK,KAAK,CAAC,EAAE;IACf,IAAI,CAAC0rJ,YAAY,CAAC5/I,KAAK,CAAC64C,OAAO,GAAG,GAAG;IACrC;EACF;EAEA,IAAI24G,SAAS,GAAG,GAAGnrK,MAAM,CAAC6N,KAAK,CAAC,QAAQA,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,WAAW;EACzE,IAAI,IAAI,CAACs4J,SAAS,KAAK,IAAI,EAAE;IAC3BgF,SAAS,IAAI,kBAAkB;EACjC;EACA,IAAIC,UAAU,GAAG,EAAE;EACnB,IAAIC,KAAK,GAAG,EAAE;EACd,IAAIC,SAAS,GAAG,EAAE;EAElB,IAAI,IAAI,CAACnF,SAAS,YAAYluI,SAAI,EAAE;IAClCtO,IAAI,GAAG,IAAI,CAACw8I,SAAS;IACrBjuI,OAAO,GAAGvO,IAAI,CAACuO,OAAO;IAEtBmzI,KAAK,GAAG1hJ,IAAI,CAAC/F,IAAI;IACjB,MAAMzC,QAAQ,GAAIwI,IAAI,CAACxI,QAAQ,KAAK,EAAE,GAAInhB,MAAM,CAACiT,YAAY,CAAC0W,IAAI,CAACxI,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;IACnFiqJ,UAAU,GAAG,GAAGzhJ,IAAI,CAAChU,OAAO,CAACikB,QAAQ,KAAKjQ,IAAI,CAAC0O,MAAM,GAAGlX,QAAQ;AACpE,QAAQ+W,OAAO,CAACqB,MAAM,CAACuH,KAAK,IAAI5I,OAAO,CAACyD,KAAK,CAACmF,KAAK,GAAG5I,OAAO,CAACuB,SAAS,GAAGvB,OAAO,CAAC4G,MAAM,CAAC9G,IAAI,CAAC,CAAC,GAAG;IAC9FozI,UAAU,IAAIC,KAAK;IAEnBC,SAAS,GAAG,WAAW3hJ,IAAI,CAACzQ,QAAQ,CAACvN,CAAC,CAAComI,OAAO,CAAC,CAAC,CAAC,CAACr2I,QAAQ,CAAC,CAAC;AAChE,OAAOiuB,IAAI,CAACzQ,QAAQ,CAAC9I,CAAC,CAAC2hI,OAAO,CAAC,CAAC,CAAC,CAACr2I,QAAQ,CAAC,CAAC;AAC5C,OAAOiuB,IAAI,CAACzQ,QAAQ,CAACzH,CAAC,CAACsgI,OAAO,CAAC,CAAC,CAAC,CAACr2I,QAAQ,CAAC,CAAC,GAAG;EAC7C,CAAC,MAAM,IAAI,IAAI,CAACyqK,SAAS,YAAY1nI,YAAO,EAAE;IAC5CvG,OAAO,GAAG,IAAI,CAACiuI,SAAS;IAExBiF,UAAU,GAAG,GAAGlzI,OAAO,CAACyD,KAAK,CAACwH,SAAS;AAC3C,QAAQjL,OAAO,CAACqB,MAAM,CAACuH,KAAK,IAAI5I,OAAO,CAACyD,KAAK,CAACmF,KAAK,GAAG5I,OAAO,CAACuB,SAAS,GAAGvB,OAAO,CAAC4G,MAAM,CAAC9G,IAAI,CAAC,CAAC,EAAE;EAC/F,CAAC,MAAM,IAAI,IAAI,CAACmuI,SAAS,YAAY5/H,UAAK,EAAE;IAC1C6kI,UAAU,GAAG,SAAS,IAAI,CAACjF,SAAS,CAACrlI,KAAK,EAAE;EAC9C,CAAC,MAAM,IAAI,IAAI,CAACqlI,SAAS,YAAYp0G,aAAQ,EAAE;IAC7Cq5G,UAAU,GAAG,YAAY,IAAI,CAACjF,SAAS,CAACrlI,KAAK,EAAE;EACjD;EAEA1hB,IAAI,CAACpE,WAAW,CAACxB,QAAQ,CAAC6I,cAAc,CAAC8oJ,SAAS,CAAC,CAAC;EAEpD,IAAIC,UAAU,KAAK,EAAE,EAAE;IACrBhsJ,IAAI,CAACpE,WAAW,CAACxB,QAAQ,CAACC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC9C2F,IAAI,CAACpE,WAAW,CAACxB,QAAQ,CAAC6I,cAAc,CAAC+oJ,UAAU,CAAC,CAAC;EACvD;EAEA,IAAIE,SAAS,KAAK,EAAE,EAAE;IACpBlsJ,IAAI,CAACpE,WAAW,CAACxB,QAAQ,CAACC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC9C2F,IAAI,CAACpE,WAAW,CAACxB,QAAQ,CAAC6I,cAAc,CAACipJ,SAAS,CAAC,CAAC;EACtD;EAEA,IAAI,CAAC/R,YAAY,CAAC5/I,KAAK,CAAC64C,OAAO,GAAG,GAAG;AACvC,CAAC;AAED4kG,IAAI,CAAC51J,SAAS,CAACs4J,UAAU,GAAG,YAAY;EACtC,IAAI,IAAI,CAAC+Q,QAAQ,EAAE;IACjB,IAAI1lB,MAAM,GAAG,IAAI;IACjB,KAAK,IAAI1nJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACotK,QAAQ,CAACn1K,MAAM,EAAE,EAAE+H,CAAC,EAAE;MAC7C,MAAM8tK,UAAU,GAAG,IAAI,CAACV,QAAQ,CAACptK,CAAC,CAAC,CAACo+G,SAAS,CAAC,CAAC;MAC/C,IAAI0vD,UAAU,CAACh8I,OAAO,CAAC75B,MAAM,GAAG,CAAC,EAAE;QACjC,IAAIyvJ,MAAM,EAAE;UACV;UACAA,MAAM,GAAG,IAAI;UACb;QACF;QACAA,MAAM,GAAGomB,UAAU;MACrB;IACF;IACA,IAAIpmB,MAAM,EAAE;MACV,OAAOA,MAAM;IACf;EACF;EAEA,OAAO;IACL51H,OAAO,EAAE,EAAE;IACXusF,KAAK,EAAE,IAAI79E,kFAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;EAClC,CAAC;AACH,CAAC;AAEDm5H,IAAI,CAAC51J,SAAS,CAACglK,UAAU,GAAI,YAAY;EACvC,MAAM33H,WAAW,GAAG,IAAI5Q,+EAAU,CAAC,CAAC;EACpC,MAAMlgC,MAAM,GAAG,IAAIkgC,kFAAa,CAAC,CAAC;EAElC,OAAO,YAAY;IACjB4Q,WAAW,CAACK,SAAS,CAAC,CAAC;IACvB,IAAI,CAACqvH,cAAc,CAAExiD,MAAM,IAAK;MAC9BltE,WAAW,CAACqxH,KAAK,CAACnkD,MAAM,CAACjsE,aAAa,CAAC,CAAC,CAACjB,WAAW,CAAC;IACvD,CAAC,CAAC;IAEFA,WAAW,CAACQ,SAAS,CAACtxC,MAAM,CAAC;IAC7B,IAAI,CAAC87J,eAAe,CAACtT,QAAQ,CAACxoJ,MAAM,CAACikC,MAAM,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAChjB,aAAa,CAAC;MAAE/gB,IAAI,EAAE;IAAY,CAAC,CAAC;EAC3C,CAAC;AACH,CAAC,CAAC,CAAE;AAEJm5J,IAAI,CAAC51J,SAAS,CAACgqK,eAAe,GAAI,YAAY;EAC5C,MAAMztK,MAAM,GAAG,IAAIkgC,kFAAa,CAAC,CAAC;EAElC,OAAO,UAAU/F,OAAO,EAAE;IACxB,MAAM6jF,MAAM,GAAG,IAAI,CAAC8iD,oBAAoB,CAAC3mI,OAAO,CAAC2H,QAAQ,CAAC,CAAC,CAACS,UAAU,CAAC,CAAC,CAAC;IACzE,IAAI,CAACy7E,MAAM,EAAE;MACX;IACF;IAEA,IAAI7jF,OAAO,CAACoH,aAAa,EAAE;MACzBvhC,MAAM,CAACkP,IAAI,CAACirB,OAAO,CAACoH,aAAa,CAAC;IACpC,CAAC,MAAM;MACL,IAAI3zB,CAAC,GAAG,CAAC;MACT,IAAIyE,CAAC,GAAG,CAAC;MACT,IAAIqB,CAAC,GAAG,CAAC;MACT,MAAMg6J,MAAM,GAAGvzI,OAAO,CAAC8G,MAAM,CAACtpC,MAAM;MACpC,KAAK,IAAI+H,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGguK,MAAM,EAAE,EAAEhuK,CAAC,EAAE;QAC/B,MAAMmF,CAAC,GAAGs1B,OAAO,CAAC8G,MAAM,CAACvhC,CAAC,CAAC,CAACyb,QAAQ;QACpCvN,CAAC,IAAI/I,CAAC,CAAC+I,CAAC,GAAG8/J,MAAM;QACjBr7J,CAAC,IAAIxN,CAAC,CAACwN,CAAC,GAAGq7J,MAAM;QACjBh6J,CAAC,IAAI7O,CAAC,CAAC6O,CAAC,GAAGg6J,MAAM;MACnB;MACA1tK,MAAM,CAACjC,GAAG,CAAC6P,CAAC,EAAEyE,CAAC,EAAEqB,CAAC,CAAC;IACrB;IACA1T,MAAM,CAACsyC,YAAY,CAAC0rE,MAAM,CAACprE,MAAM,CAAC,CAAC3O,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC63H,eAAe,CAACtT,QAAQ,CAACxoJ,MAAM,CAAC;IACrC,IAAI,CAACihB,aAAa,CAAC;MAAE/gB,IAAI,EAAE;IAAY,CAAC,CAAC;EAC3C,CAAC;AACH,CAAC,CAAC,CAAE;AAEJm5J,IAAI,CAAC51J,SAAS,CAACkqK,YAAY,GAAI,YAAY;EACzC,MAAM3tK,MAAM,GAAG,IAAIkgC,kFAAa,CAAC,CAAC;EAElC,OAAO,UAAUtU,IAAI,EAAE;IACrB,MAAMoyF,MAAM,GAAG,IAAI,CAAC8iD,oBAAoB,CAACl1I,IAAI,CAACuO,OAAO,CAAC2H,QAAQ,CAAC,CAAC,CAACS,UAAU,CAAC,CAAC,CAAC;IAC9E,IAAI,CAACy7E,MAAM,EAAE;MACX;IACF;IAEAh+G,MAAM,CAACkP,IAAI,CAAC0c,IAAI,CAACzQ,QAAQ,CAAC;IAC1Bnb,MAAM,CAACsyC,YAAY,CAAC0rE,MAAM,CAACprE,MAAM,CAAC,CAAC3O,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC63H,eAAe,CAACtT,QAAQ,CAACxoJ,MAAM,CAAC;IACrC,IAAI,CAACihB,aAAa,CAAC;MAAE/gB,IAAI,EAAE;IAAY,CAAC,CAAC;EAC3C,CAAC;AACH,CAAC,CAAC,CAAE;AAEJm5J,IAAI,CAAC51J,SAAS,CAACw+G,kBAAkB,GAAI,YAAY;EAC/C,MAAM2rD,eAAe,GAAG,IAAI1tI,kFAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;EAExD,OAAO,UAAUlgC,MAAM,EAAE0uC,YAAY,EAAEzvC,QAAQ,EAAE;IAC/Ce,MAAM,CAACjC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACzB,IAAI+R,KAAK,GAAG,CAAC;IAEb,IAAI,CAAC4wJ,qBAAqB,CAAE1iD,MAAM,IAAK;MACrC,IAAIA,MAAM,CAACiE,kBAAkB,CAAC2rD,eAAe,EAAEl/H,YAAY,EAAEzvC,QAAQ,IAAI++G,MAAM,CAACI,eAAe,CAAC,CAAC,CAAC,EAAE;QAClGp+G,MAAM,CAACa,GAAG,CAAC+sK,eAAe,CAAC;QAC3B99J,KAAK,EAAE;MACT;IACF,CAAC,CAAC;IACF,IAAIA,KAAK,KAAK,CAAC,EAAE;MACf,OAAO,KAAK;IACd;IACA9P,MAAM,CAAC4gD,YAAY,CAAC9wC,KAAK,CAAC;IAC1B9P,MAAM,CAACikC,MAAM,CAAC,CAAC;IACf,OAAO,IAAI;EACb,CAAC;AACH,CAAC,CAAC,CAAE;AAEJo1H,IAAI,CAAC51J,SAAS,CAACoqK,cAAc,GAAI,YAAY;EAC3C,MAAM3gI,OAAO,GAAG,IAAIhN,kFAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;EAEhD,SAAS4tI,uBAAuBA,CAACliJ,IAAI,EAAEszF,YAAY,EAAE;IACnD,OAAOtzF,IAAI,CAAC6O,IAAI,GAAI,CAAC,IAAIykF,YAAa;EACxC;EAEA,SAAS6uD,mBAAmBA,CAACniJ,IAAI,EAAE3sB,QAAQ,EAAE;IAC3C,OAAOA,QAAQ,CAACA,QAAQ,CAACyvC,YAAY,CAAC9iB,IAAI,CAAC;EAC7C;EAEA,OAAO,UAAU3sB,QAAQ,EAAE;IACzB,MAAMyvC,YAAY,GAAIzvC,QAAQ,GAAI8uK,mBAAmB,GAAGD,uBAAuB;IAE/E,IAAI,IAAI,CAAC7rD,kBAAkB,CAAC/0E,OAAO,EAAEwB,YAAY,EAAEzvC,QAAQ,CAAC,EAAE;MAC5D,IAAI,CAAC68J,eAAe,CAACtT,QAAQ,CAACt7G,OAAO,CAAC;MACtC,IAAI,CAACjsB,aAAa,CAAC;QAAE/gB,IAAI,EAAE;MAAY,CAAC,CAAC;IAC3C,CAAC,MAAM;MACL,IAAI,CAACsiB,MAAM,CAACjB,IAAI,CAAC,oDAAoD,CAAC;IACxE;EACF,CAAC;AACH,CAAC,CAAC,CAAE;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA83I,IAAI,CAAC51J,SAAS,CAACuqK,UAAU,GAAG,UAAU1zJ,KAAK,EAAEqC,MAAM,EAAE;EACnD,MAAMw6I,GAAG,GAAG,IAAI,CAACvC,IAAI;EACrB,MAAM6J,WAAW,GAAGtH,GAAG,CAACtjE,QAAQ,CAAC50E,UAAU,CAAC3E,KAAK;EACjD,MAAMokJ,YAAY,GAAGvH,GAAG,CAACtjE,QAAQ,CAAC50E,UAAU,CAACtC,MAAM;EAEnD,SAASsxJ,OAAOA,CAACn1G,GAAG,EAAE;IACpB,OAAOj5D,IAAI,CAACo5D,GAAG,CAAC/4B,oFAAe,CAACg5B,QAAQ,CAAC,GAAG,GAAGJ,GAAG,CAAC,CAAC;EACtD;EAEA,SAASo1G,OAAOA,CAACj1G,GAAG,EAAE;IACpB,OAAO/4B,oFAAe,CAAC64B,QAAQ,CAACl5D,IAAI,CAACm5D,IAAI,CAACC,GAAG,CAAC,CAAC,GAAG,GAAG;EACvD;EAEA,SAASk1G,UAAUA,CAAA,EAAG;IACpB,IAAIC,OAAO;IACX,MAAMC,WAAW,GAAG5wK,KAAK,CAACqrB,UAAU,CAAC,CAAC;IAEtC,IAAIulJ,WAAW,KAAK5wK,KAAK,CAACglB,WAAW,CAACE,MAAM,EAAE;MAC5C,MAAM2rJ,MAAM,GAAG7yJ,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC;MAC/C,MAAM6yJ,aAAa,GAAGD,MAAM,CAAC/Q,UAAU,CAAC,IAAI,CAAC;MAE7C+Q,MAAM,CAACh0J,KAAK,GAAGA,KAAK,KAAK6B,SAAS,GAAGsiJ,WAAW,GAAGnkJ,KAAK;MACxDg0J,MAAM,CAAC3xJ,MAAM,GAAGA,MAAM,KAAKR,SAAS,GAAGuiJ,YAAY,GAAG/hJ,MAAM;MAE5D4xJ,aAAa,CAACC,SAAS,CAACrX,GAAG,CAACtjE,QAAQ,CAAC50E,UAAU,EAAE,CAAC,EAAE,CAAC,EAAEqvJ,MAAM,CAACh0J,KAAK,EAAEg0J,MAAM,CAAC3xJ,MAAM,CAAC;MACnFyxJ,OAAO,GAAGE,MAAM,CAACG,SAAS,CAAC,WAAW,CAAC;IACzC,CAAC,MAAM;MACL;MACAL,OAAO,GAAGjX,GAAG,CAACtjE,QAAQ,CAAC50E,UAAU,CAACwvJ,SAAS,CAAC,WAAW,CAAC;IAC1D;IACA,OAAOL,OAAO;EAChB;EACAzxJ,MAAM,GAAGA,MAAM,IAAIrC,KAAK;EAExB,IAAIo0J,aAAa;EACjB,IAAKp0J,KAAK,KAAK6B,SAAS,IAAIQ,MAAM,KAAKR,SAAS,IAC1C7B,KAAK,KAAKmkJ,WAAW,IAAI9hJ,MAAM,KAAK+hJ,YAAa,EAAE;IACvD;IACA;IACA;IACAgQ,aAAa,GAAGP,UAAU,CAAC,CAAC;EAC9B,CAAC,MAAM;IACL,MAAM70G,cAAc,GAAG69F,GAAG,CAAC99F,MAAM,CAACR,MAAM;IACxC,MAAMU,WAAW,GAAG49F,GAAG,CAAC99F,MAAM,CAACP,GAAG;IAClC,MAAM61G,eAAe,GAAGV,OAAO,CAAC9W,GAAG,CAAC99F,MAAM,CAACP,GAAG,CAAC;;IAE/C;IACA,MAAM81G,kBAAkB,GAAG/uK,IAAI,CAACuM,GAAG,CAAC+qJ,GAAG,CAAC78I,KAAK,EAAE68I,GAAG,CAACx6I,MAAM,CAAC;IAC1D,MAAMkyJ,qBAAqB,GAAGF,eAAe,GAAGC,kBAAkB,GAAGzX,GAAG,CAACx6I,MAAM;;IAE/E;IACA,MAAMmyJ,UAAU,GAAGx0J,KAAK,GAAGqC,MAAM;IACjCw6I,GAAG,CAACtjE,QAAQ,CAAC2pE,aAAa,CAAC,CAAC,CAAC;IAC7BrG,GAAG,CAAC99F,MAAM,CAACR,MAAM,GAAGi2G,UAAU;IAC9B3X,GAAG,CAAC99F,MAAM,CAACP,GAAG,GAAGo1G,OAAO,CAACW,qBAAqB,GAAGhvK,IAAI,CAACuM,GAAG,CAAC0iK,UAAU,EAAE,GAAG,CAAC,CAAC;IAC3E3X,GAAG,CAAC99F,MAAM,CAACG,sBAAsB,CAAC,CAAC;;IAEnC;IACA29F,GAAG,CAACtjE,QAAQ,CAACk7E,oBAAoB,CAACz0J,KAAK,EAAEqC,MAAM,EAAE,CAAC,CAAC;;IAEnD;IACA,IAAI,CAACmmJ,YAAY,CAACriK,QAAQ,CAAC2d,GAAG,CAACmV,MAAM,CAAC;IACtCm7I,aAAa,GAAGP,UAAU,CAAC,CAAC;;IAE5B;IACAhX,GAAG,CAACtjE,QAAQ,CAAC2pE,aAAa,CAAC3vJ,MAAM,CAAC4vJ,gBAAgB,CAAC;IACnDtG,GAAG,CAAC99F,MAAM,CAACR,MAAM,GAAGS,cAAc;IAClC69F,GAAG,CAAC99F,MAAM,CAACP,GAAG,GAAGS,WAAW;IAC5B49F,GAAG,CAAC99F,MAAM,CAACG,sBAAsB,CAAC,CAAC;IACnC29F,GAAG,CAACtjE,QAAQ,CAACk7E,oBAAoB,CAAC5X,GAAG,CAAC78I,KAAK,EAAE68I,GAAG,CAACx6I,MAAM,EAAE9O,MAAM,CAAC4vJ,gBAAgB,CAAC;IACjF,IAAI,CAACxD,WAAW,GAAG,IAAI;EACzB;EAEA,OAAOyU,aAAa;AACtB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACArV,IAAI,CAAC51J,SAAS,CAAC/C,cAAc,GAAG,UAAU4oB,QAAQ,EAAEhP,KAAK,EAAEqC,MAAM,EAAE;EACjE,MAAMqyJ,GAAG,GAAG,IAAI,CAAChB,UAAU,CAAC1zJ,KAAK,EAAEqC,MAAM,CAAC;EAC1Clf,KAAK,CAAC2rB,YAAY,CAAC4lJ,GAAG,EAAE1lJ,QAAQ,CAAC;AACnC,CAAC;AAED+vI,IAAI,CAAC51J,SAAS,CAACwrK,IAAI,GAAG,UAAU7uK,IAAI,EAAE;EACpC,IAAI,CAACuoK,OAAO,CAACvoK,IAAI,CAACowH,QAAQ,CAAC,CAAC8kC,IAAI,CAAE4Z,UAAU,IAAK;IAC/C,MAAM5lJ,QAAQ,GAAG,IAAI,CAACixI,QAAQ,CAAC,IAAI,CAACC,cAAc,CAAC,CAAC/xH,QAAQ,CAAC5iB,IAAI;IACjEpoB,KAAK,CAACgsB,QAAQ,CAACylJ,UAAU,EAAE5lJ,QAAQ,EAAElpB,IAAI,CAACowH,QAAQ,CAAC;IACnD,IAAI,CAACg6C,aAAa,CAAC,CAAC;IACpB,IAAI,CAACvpJ,aAAa,CAAC;MAAE/gB,IAAI,EAAE;IAAgB,CAAC,CAAC;EAC/C,CAAC,CAAC,CAACgqK,KAAK,CAAE1nK,KAAK,IAAK;IAClB,IAAI,CAACggB,MAAM,CAAChgB,KAAK,CAAC,uBAAuB,CAAC;IAC1C,IAAI,CAACggB,MAAM,CAACpB,KAAK,CAAC5e,KAAK,CAAC;IACxB,IAAI,CAACgoK,aAAa,CAAC,CAAC;IACpB,IAAI,CAACvpJ,aAAa,CAAC;MAAE/gB,IAAI,EAAE,eAAe;MAAEsC;IAAM,CAAC,CAAC;EACtD,CAAC,CAAC;AACJ,CAAC;AAED62J,IAAI,CAAC51J,SAAS,CAACkoK,gBAAgB,GAAG,YAAY;EAC5C,MAAMwD,OAAO,GAAG,CACd,CAAC,MAAM,EAAE,GAAG,CAAC,EACb,CAAC,KAAK,EAAE,GAAG,CAAC,EACZ,CAAC,QAAQ,EAAE,IAAI,CAAC,EAChB,CAAC,MAAM,EAAE,IAAI,CAAC,EACd,CAAC,OAAO,EAAEhwK,MAAM,CAACyqF,SAAS,CAAC,CAC5B;EAED,IAAI5yE,SAAS,GAAG,CAAC;EACjB,IAAI,CAAC0pJ,qBAAqB,CAAE1iD,MAAM,IAAK;IACrChnG,SAAS,IAAIgnG,MAAM,CAACz7E,UAAU,CAAC,CAAC,CAACC,YAAY,CAAC,CAAC;EACjD,CAAC,CAAC;EAEF,IAAIxrB,SAAS,GAAG,CAAC,EAAE;IACjB,MAAMyH,WAAW,GAAG,IAAI,CAAC2wJ,SAAS,GAAG,IAAI,GAAGp4J,SAAS;IACrD;IACA,KAAK,IAAItX,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyvK,OAAO,CAACx3K,MAAM,EAAE,EAAE+H,CAAC,EAAE;MACvC,IAAI+e,WAAW,GAAG0wJ,OAAO,CAACzvK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAC/B,IAAI,CAAC2vK,qBAAqB,CAACF,OAAO,CAACzvK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC;MACF;IACF;EACF;AACF,CAAC;AAED25J,IAAI,CAAC51J,SAAS,CAAC4rK,qBAAqB,GAAG,UAAUv+I,UAAU,EAAE;EAC3D,IAAIA,UAAU,KAAKrwB,QAAQ,CAAC2d,GAAG,CAAC0S,UAAU,EAAE;IAC1C,IAAI,CAACtO,MAAM,CAAClB,MAAM,CAAC,6CAA6CwP,UAAU,yBAAyB,CAAC;EACtG;EACArwB,QAAQ,CAAC2d,GAAG,CAAC0S,UAAU,GAAGA,UAAU;AACtC,CAAC;;AAED;AACA;AACA;AACAuoI,IAAI,CAAC51J,SAAS,CAACzF,YAAY,GAAG,YAAY;EACxC,IAAI,CAACm8J,QAAQ,CAACxG,SAAS,CAAC,IAAI,CAAC3iF,KAAK,CAACsoF,cAAc,EAAEv3J,IAAI,CAAC+3H,SAAS,CAAC,IAAI,CAACr5H,QAAQ,CAAC00B,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAClG,CAAC;;AAED;AACA;AACA;AACAkkI,IAAI,CAAC51J,SAAS,CAACxF,eAAe,GAAG,YAAY;EAC3C,IAAI;IACF,MAAM61J,MAAM,GAAG,IAAI,CAACqG,QAAQ,CAACtG,SAAS,CAAC,IAAI,CAAC7iF,KAAK,CAACsoF,cAAc,CAAC;IACjE,MAAMpkI,KAAK,GAAG4+H,MAAM,GAAG/xJ,IAAI,CAACC,KAAK,CAAC8xJ,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,CAACrzJ,QAAQ,CAACw0B,UAAU,CAACC,KAAK,EAAE,IAAI,CAAC;EACvC,CAAC,CAAC,OAAOzkB,CAAC,EAAE;IACV,IAAI,CAAC+R,MAAM,CAAChgB,KAAK,CAAC,wBAAwBiO,CAAC,CAAC0R,OAAO,EAAE,CAAC;EACxD;AACF,CAAC;;AAED;AACA;AACA;AACAk3I,IAAI,CAAC51J,SAAS,CAACvF,aAAa,GAAG,YAAY;EACzC,IAAI,CAACuC,QAAQ,CAACtD,KAAK,CAAC,CAAC;AACvB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACAk8J,IAAI,CAAC51J,SAAS,CAAC6rK,UAAU,GAAG,UAAUlvK,IAAI,EAAE;EAC1C,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IAC5BA,IAAI,GAAGi5J,IAAI,CAACr1J,OAAO,CAACm0B,QAAQ,CAAC/3B,IAAI,CAAC;EACpC;EACA,IAAIA,IAAI,CAACs2B,IAAI,EAAE;IACb,IAAI,CAACs6C,KAAK,CAACt6C,IAAI,GAAG,IAAI;EACxB;EACAx1B,uFAAO,CAAC,IAAI,CAAC8vE,KAAK,EAAE5wE,IAAI,CAAC;EACzB,IAAIA,IAAI,CAACK,QAAQ,EAAE;IACjB,IAAI,CAAC1C,GAAG,CAACqC,IAAI,CAACK,QAAQ,CAAC;EACzB;EAEA,IAAI,CAACuwE,KAAK,CAACn6C,QAAQ,GAAGz2B,IAAI,CAACy2B,QAAQ;EACnC,IAAI,CAACyxI,aAAa,CAAC,CAAC;EAEpB,IAAIloK,IAAI,CAACO,IAAI,EAAE;IACb,IAAI,CAACA,IAAI,CAACP,IAAI,CAACO,IAAI,EAAE;MAAE6vH,QAAQ,EAAEpwH,IAAI,CAACF;IAAK,CAAC,CAAC;EAC/C;EAEA,IAAIE,IAAI,CAAC6wB,MAAM,EAAE;IACfxwB,QAAQ,CAAC2d,GAAG,CAAC6S,MAAM,GAAG7wB,IAAI,CAAC6wB,MAAM;EACnC;EAEA,IAAI7wB,IAAI,CAACs2B,IAAI,EAAE;IACb,IAAI,CAACr5B,SAAS,CAAC+C,IAAI,CAAC6wB,MAAM,CAAC;EAC7B;EAEA,IAAI,IAAI,CAAC+/C,KAAK,CAAC1xE,IAAI,EAAE;IACnB,IAAI,CAACA,IAAI,CAAC,IAAI,CAAC0xE,KAAK,CAAC1xE,IAAI,CAAC;IAC1B,OAAO,IAAI,CAAC0xE,KAAK,CAAC1xE,IAAI;EACxB;EAEA,MAAM0+G,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC,CAAC;EACvC,IAAI3iD,MAAM,EAAE;IACVA,MAAM,CAACz7E,UAAU,CAAC,CAAC,CAAC0pB,gBAAgB,CAAC,CAAC;IACtC,IAAI/qD,0FAAU,CAACd,IAAI,CAACs3B,IAAI,CAAC,EAAE;MACzBsmF,MAAM,CAACz7E,UAAU,CAAC,CAAC,CAAC2pB,cAAc,CAAC9rD,IAAI,CAACs3B,IAAI,CAAC;IAC/C;IACA,IAAI,CAACgxI,SAAS,CAAC,CAAC;IAChB,IAAI,CAACnrK,UAAU,CAAC,CAAC;EACnB;AACF,CAAC;AAED87J,IAAI,CAAC51J,SAAS,CAAC4d,IAAI,GAAG,UAAUwE,IAAI,EAAE;EACpC,MAAMm4F,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC96I,IAAI,CAAC;EAC3C,IAAI,CAACm4F,MAAM,EAAE;IACX,OAAO,CAAC,CAAC;EACX;EACA,MAAM17E,OAAO,GAAG07E,MAAM,CAACz7E,UAAU,CAAC,CAAC;EACnC,MAAM;IAAEknB;EAAS,CAAC,GAAGnnB,OAAO;EAC5B,OAAO;IACLzjB,EAAE,EAAE4qC,QAAQ,CAAC5qC,EAAE,IAAIyjB,OAAO,CAACzc,IAAI,IAAI,SAAS;IAC5CkuG,KAAK,EAAGtqE,QAAQ,CAACsqE,KAAK,IAAItqE,QAAQ,CAACsqE,KAAK,CAAC5uH,IAAI,CAAC,GAAG,CAAC,IAAK,cAAc;IACrEs7B,KAAK,EAAE6B,OAAO,CAACE,YAAY,CAAC,CAAC;IAC7B3H,KAAK,EAAEyH,OAAO,CAAC2oB,YAAY,CAAC,CAAC;IAC7BhiB,QAAQ,EAAE3G,OAAO,CAACwH,eAAe,CAAC,CAAC;IACnCoI,MAAM,EAAE5P,OAAO,CAACkoB,aAAa,CAAC;EAChC,CAAC;AACH,CAAC;;AAED;AACA;AACA;;AAEA6uG,IAAI,CAAC51J,SAAS,CAACxD,SAAS,GAAG,UAAUsvK,OAAO,EAAEC,MAAM,EAAE;EACpD,IAAIC,IAAI,GAAG,IAAI;EAEf,IAAIF,OAAO,CAACrvK,IAAI,KAAKk4J,gBAAW,CAAC30J,SAAS,CAACvD,IAAI,EAAE;IAC/CuvK,IAAI,GAAGrX,gBAAW;EACpB;EAEA,IAAIqX,IAAI,KAAK,IAAI,EAAE;IACjB,MAAM,IAAIhtK,KAAK,CAAC,+BAA+B8sK,OAAO,CAACrvK,IAAI,EAAE,CAAC;EAChE;EAEA,IAAI;IACF,MAAM62B,MAAM,GAAG,IAAI04I,IAAI,CAACF,OAAO,CAACpvK,MAAM,EAAEovK,OAAO,CAACnvK,IAAI,CAAC;IACrD,IAAI,CAACsvK,eAAe,CAAC34I,MAAM,CAAC;EAC9B,CAAC,CAAC,OAAOv0B,KAAK,EAAE;IACd,IAAI,CAACgtK,MAAM,EAAE;MACX,IAAI,CAAChtJ,MAAM,CAACpB,KAAK,CAAC,uCAAuC5e,KAAK,CAAC2f,OAAO,EAAE,CAAC;IAC3E,CAAC,MAAM;MACL,MAAM3f,KAAK;IACb;EACF;EACA,IAAI,CAACy3J,WAAW,GAAG,IAAI;AACzB,CAAC;AAEDZ,IAAI,CAAC51J,SAAS,CAACisK,eAAe,GAAG,UAAUC,WAAW,EAAE;EACtD,MAAM3xD,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC,CAAC;EACvC,IAAIgP,WAAW,CAAC72H,KAAK,IAAIklE,MAAM,EAAE;IAC/B2xD,WAAW,CAAC72H,KAAK,CAACklE,MAAM,CAACz7E,UAAU,CAAC,CAAC,CAAC;IACtC,IAAI,CAACqyH,IAAI,CAAC72C,KAAK,CAACl9G,GAAG,CAAC8uK,WAAW,CAACvgB,WAAW,CAAC,CAAC,CAAC;EAChD;EACA,MAAM59H,OAAO,GAAG,IAAI,CAACqF,QAAQ;EAC7BrF,OAAO,CAACA,OAAO,CAAC75B,MAAM,CAAC,GAAGg4K,WAAW;AACvC,CAAC;AAEDtW,IAAI,CAAC51J,SAAS,CAAC6nK,kBAAkB,GAAG,UAAU/hI,SAAS,EAAE;EACvD,MAAMqmI,IAAI,GAAG,IAAI,CAAC/4I,QAAQ;EAC1B,KAAK,IAAIn3B,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAGiwK,IAAI,CAACj4K,MAAM,EAAE+H,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;IAC3C,IAAIkwK,IAAI,CAAClwK,CAAC,CAAC,CAAC4pC,aAAa,EAAE;MACzBsmI,IAAI,CAAClwK,CAAC,CAAC,CAAC4pC,aAAa,CAACC,SAAS,CAAC;IAClC;EACF;AACF,CAAC;AAED8vH,IAAI,CAAC51J,SAAS,CAAC6kK,aAAa,GAAG,YAAY;EACzC,MAAMsH,IAAI,GAAG,IAAI,CAAC5+F,KAAK,CAACn6C,QAAQ;EAEhC,IAAI,CAACA,QAAQ,GAAG,EAAE;EAClB,IAAI+4I,IAAI,EAAE;IACR,KAAK,IAAIlwK,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAGiwK,IAAI,CAACj4K,MAAM,EAAE+H,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;MAC3C,IAAI,CAACO,SAAS,CAAC2vK,IAAI,CAAClwK,CAAC,CAAC,EAAE,KAAK,CAAC;IAChC;EACF;AACF,CAAC;AAED25J,IAAI,CAAC51J,SAAS,CAAClD,YAAY,GAAG,UAAUoH,KAAK,EAAE;EAC7C,MAAMsH,GAAG,GAAG,IAAI,CAAC4nB,QAAQ,CAAClvB,KAAK,CAAC;EAChC,IAAI,CAACsH,GAAG,EAAE;IACR,MAAM,IAAIxM,KAAK,CAAC,2BAA2BkF,KAAK,iBAAiB,CAAC;EACpE;EACAsH,GAAG,CAACqmC,OAAO,CAAC,CAAC;EACb,IAAI,CAACze,QAAQ,CAACmX,MAAM,CAACrmC,KAAK,EAAE,CAAC,CAAC;EAC9B,IAAI,CAACsyJ,WAAW,GAAG,IAAI;AACzB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAZ,IAAI,CAAC51J,SAAS,CAACjD,MAAM,GAAG,UAAUJ,IAAI,EAAE;EACtC,OAAO4D,OAAO,CAAC00B,KAAK,CAAC,IAAI,CAACm3I,QAAQ,CAAC3uK,0FAAU,CAACd,IAAI,EAAE;IAClD0vK,OAAO,EAAE,IAAI;IACbrvK,QAAQ,EAAE,KAAK;IACfnB,IAAI,EAAE;EACR,CAAC,CAAC,CAAC,CAAC;AACN,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA+5J,IAAI,CAAC51J,SAAS,CAACssK,SAAS,GAAG,UAAU3vK,IAAI,EAAE;EACzC,OAAO4D,OAAO,CAAC41B,QAAQ,CAAC,IAAI,CAACi2I,QAAQ,CAAC3uK,0FAAU,CAACd,IAAI,EAAE;IACrD0vK,OAAO,EAAE,IAAI;IACbrvK,QAAQ,EAAE,IAAI;IACdnB,IAAI,EAAE;EACR,CAAC,CAAC,CAAC,CAAC;AACN,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA+5J,IAAI,CAAC51J,SAAS,CAACusK,YAAY,GAAG,UAAU1yD,aAAa,EAAE2yD,mBAAmB,EAAE;EAC1E,MAAMrrE,GAAG,GAAG,CAAC,CAAC;EACd,IAAI+b,QAAQ,GAAG,CAAC;EAEhB,IAAIrD,aAAa,EAAE;IACjBqD,QAAQ,GAAGrD,aAAa,CAACqD,QAAQ,CAAC,CAAC;EACrC;EAEA,MAAMuvD,UAAU,GAAGzvK,QAAQ,CAAC4Z,QAAQ,CAAC6W,OAAO,CAACzwB,QAAQ,CAAC2d,GAAG,CAAC6S,MAAM,CAAC;EACjE,IAAIsrF,OAAO,GAAG0zD,mBAAmB;EACjC,IAAIC,UAAU,KAAK/zJ,SAAS,IAAI+zJ,UAAU,CAACv4K,MAAM,GAAGgpH,QAAQ,EAAE;IAC5DpE,OAAO,GAAG,KAAK;IACf3X,GAAG,CAAC3zE,MAAM,GAAG,OAAO;EACtB,CAAC,MAAM,IAAIxwB,QAAQ,CAAC2d,GAAG,CAAC6S,MAAM,KAAKxwB,QAAQ,CAAC4Z,QAAQ,CAAC4W,MAAM,EAAE;IAC3D2zE,GAAG,CAAC3zE,MAAM,GAAGxwB,QAAQ,CAAC2d,GAAG,CAAC6S,MAAM;EAClC;EAEA,MAAMk/I,QAAQ,GAAG,EAAE;EACnB,IAAIC,SAAS,GAAG,IAAI;EACpB,KAAK,IAAI1wK,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAGghH,QAAQ,EAAEjhH,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;IACxCywK,QAAQ,CAACzwK,CAAC,CAAC,GAAG49G,aAAa,CAACwD,MAAM,CAACphH,CAAC,CAAC,CAAC68G,OAAO,CAACA,OAAO,GAAG2zD,UAAU,CAACxwK,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7E,IAAI,CAACwB,yFAAS,CAACivK,QAAQ,CAACzwK,CAAC,CAAC,CAAC,EAAE;MAC3B0wK,SAAS,GAAG,KAAK;IACnB;EACF;EACA,IAAI,CAACA,SAAS,EAAE;IACdxrE,GAAG,CAACluE,IAAI,GAAGy5I,QAAQ;EACrB;EACA,OAAOvrE,GAAG;AACZ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAy0D,IAAI,CAAC51J,SAAS,CAACosK,QAAQ,GAAG,UAAUzvK,IAAI,EAAE;EACxC,MAAMoE,KAAK,GAAG,CAAC,CAAC;EAEhBpE,IAAI,GAAGc,0FAAU,CAACd,IAAI,EAAE;IACtB0vK,OAAO,EAAE,IAAI;IACbrvK,QAAQ,EAAE,KAAK;IACfnB,IAAI,EAAE;EACR,CAAC,CAAC;;EAEF;EACA,MAAM0+G,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC,CAAC;EACvC,IAAI3iD,MAAM,KAAK,IAAI,EAAE;IACnB,MAAM17E,OAAO,GAAG07E,MAAM,CAACz7E,UAAU,CAAC,CAAC;IACnC,MAAM;MAAEknB;IAAS,CAAC,GAAGnnB,OAAO;IAC5B,IAAImnB,QAAQ,CAAC5qC,EAAE,EAAE;MACf,MAAM4uG,MAAM,GAAGhkE,QAAQ,CAACgkE,MAAM,GAAG,GAAGhkE,QAAQ,CAACgkE,MAAM,GAAG,GAAG,EAAE;MAC3DjpH,KAAK,CAAC7D,IAAI,GAAG8sH,MAAM,GAAGhkE,QAAQ,CAAC5qC,EAAE;IACnC;IACA,MAAM6Y,IAAI,GAAG4K,OAAO,CAAC0pB,cAAc,CAAC,CAAC;IACrC,IAAIt0B,IAAI,KAAK,CAAC,EAAE;MACdlzB,KAAK,CAACkzB,IAAI,GAAGA,IAAI;IACnB;EACF;;EAEA;EACA,MAAM24I,QAAQ,GAAG,IAAI,CAACL,YAAY,CAAChyD,MAAM,EAAE59G,IAAI,CAAC0vK,OAAO,CAAC;EACxD,IAAIO,QAAQ,CAACp/I,MAAM,EAAE;IACnBzsB,KAAK,CAACysB,MAAM,GAAGo/I,QAAQ,CAACp/I,MAAM;EAChC;EAEA,IAAIo/I,QAAQ,CAAC35I,IAAI,EAAE;IACjBlyB,KAAK,CAACkyB,IAAI,GAAG25I,QAAQ,CAAC35I,IAAI;EAC5B;;EAEA;EACA,MAAMlF,OAAO,GAAG,IAAI,CAACqF,QAAQ;EAC7B,MAAMy5I,YAAY,GAAG,EAAE;EACvB,KAAK,IAAI5wK,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAG6xB,OAAO,CAAC75B,MAAM,EAAE+H,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;IAC9C4wK,YAAY,CAAC5wK,CAAC,CAAC,GAAG8xB,OAAO,CAAC9xB,CAAC,CAAC,CAACiuG,QAAQ,CAAC,CAAC;EACzC;EACA,IAAIn8E,OAAO,CAAC75B,MAAM,GAAG,CAAC,EAAE;IACtB6M,KAAK,CAACqyB,QAAQ,GAAGy5I,YAAY;EAC/B;;EAEA;EACA,IAAIlwK,IAAI,CAACd,IAAI,EAAE;IACbkF,KAAK,CAAClF,IAAI,GAAG,IAAI,CAACA,IAAI,CAAC,CAAC;EAC1B;;EAEA;EACA,IAAIc,IAAI,CAACK,QAAQ,EAAE;IACjB,MAAM6mB,IAAI,GAAG,IAAI,CAAC7mB,QAAQ,CAAC00B,QAAQ,CAAC,KAAK,CAAC;IAC1C,IAAI,CAACj0B,yFAAS,CAAComB,IAAI,CAAC,EAAE;MACpB9iB,KAAK,CAAC/D,QAAQ,GAAG6mB,IAAI;IACvB;EACF;EAEA,OAAO9iB,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA60J,IAAI,CAAC51J,SAAS,CAAC3F,GAAG,GAAG,UAAUoiB,KAAK,EAAEC,KAAK,EAAE;EAC3C,OAAO1f,QAAQ,CAAC3C,GAAG,CAACoiB,KAAK,EAAEC,KAAK,CAAC;AACnC,CAAC;AAEDk5I,IAAI,CAAC51J,SAAS,CAACk/J,qBAAqB,GAAG,UAAUpoJ,MAAM,EAAE;EACvD,MAAM86E,cAAc,GAAGx1F,IAAI,CAACsM,GAAG,CAC7B,IAAI,CAACyoJ,IAAI,CAACv7F,MAAM,CAACl+C,QAAQ,CAACzH,CAAC,GAAG6G,MAAM,GAAG9Z,QAAQ,CAAC2d,GAAG,CAACwT,KAAK,CAACE,eAAe,EACzErxB,QAAQ,CAAC2d,GAAG,CAACgS,OACf,CAAC;EAED,MAAMhwB,IAAI,GAAG;IAAEi1F;EAAe,CAAC;EAC/B,IAAI,CAACqrE,qBAAqB,CAAE1iD,MAAM,IAAK;IACrCA,MAAM,CAAC7/C,cAAc,CAAC/9D,IAAI,CAAC;EAC7B,CAAC,CAAC;EACF,KAAK,IAAIV,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAG,IAAI,CAACk3B,QAAQ,CAACl/B,MAAM,EAAE+H,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;IACpD,MAAMuP,GAAG,GAAG,IAAI,CAAC4nB,QAAQ,CAACn3B,CAAC,CAAC;IAC5B,IAAIuP,GAAG,CAAC2gJ,KAAK,EAAE;MACb3gJ,GAAG,CAAC2gJ,KAAK,CAACxwJ,QAAQ,CAAC++D,cAAc,CAAC/9D,IAAI,CAAC;IACzC;EACF;EACA,IAAI,IAAI,CAAC47J,OAAO,KAAK,IAAI,EAAE;IACzB,IAAI,CAACA,OAAO,CAAC3mE,cAAc,GAAGA,cAAc;EAC9C;AACF,CAAC;AAEDgkE,IAAI,CAAC51J,SAAS,CAACm/J,kBAAkB,GAAG,YAAY;EAC9C,IAAI,IAAI,CAAC5G,OAAO,KAAK,IAAI,EAAE;IACzB,IAAI,IAAI,CAACpH,IAAI,CAAC/6D,KAAK,CAAC3nE,GAAG,EAAE;MACvB,IAAI,CAAC8pI,OAAO,CAACzS,WAAW,GAAG,IAAI,CAACqL,IAAI,CAAC/6D,KAAK,CAAC3nE,GAAG,CAACioC,GAAG;IACpD,CAAC,MAAM;MACL,IAAI,CAAC6hG,OAAO,CAACzS,WAAW,GAAGptI,SAAS;IACtC;EACF;AACF,CAAC;AAEDk9I,IAAI,CAAC51J,SAAS,CAAC8sK,sBAAsB,GAAG,UAAUj1I,OAAO,EAAE;EACzD,IAAI,CAAColI,qBAAqB,CAAE1iD,MAAM,IAAK;IACrC,MAAMmE,QAAQ,GAAGnE,MAAM,CAACiC,SAAS;IACjC,KAAK,IAAIvgH,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAGwiH,QAAQ,CAACxqH,MAAM,EAAE+H,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;MAC/C,MAAM0iH,IAAI,GAAGD,QAAQ,CAACziH,CAAC,CAAC;MACxB47B,OAAO,CAAC8mF,IAAI,CAAChmD,GAAG,EAAEgmD,IAAI,CAAChjH,QAAQ,CAAC;IAClC;EACF,CAAC,CAAC;AACJ,CAAC;AAEDi6J,IAAI,CAAC51J,SAAS,CAAC+sK,gBAAgB,GAAG,UAAUzvJ,MAAM,EAA6C;EAAA,IAA3CwiG,YAAY,GAAAjgH,SAAA,CAAA3L,MAAA,QAAA2L,SAAA,QAAA6Y,SAAA,GAAA7Y,SAAA,MAAG,KAAK;EAAA,IAAEg4B,OAAO,GAAAh4B,SAAA,CAAA3L,MAAA,QAAA2L,SAAA,QAAA6Y,SAAA,GAAA7Y,SAAA,MAAG6Y,SAAS;EAC3F,IAAI,CAACukJ,qBAAqB,CAAE1iD,MAAM,IAAKA,MAAM,CAACsF,iBAAiB,CAACviG,MAAM,EAAEwiG,YAAY,EAAEjoF,OAAO,CAAC,CAAC;EAC/F,KAAK,IAAI57B,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAG,IAAI,CAACk3B,QAAQ,CAACl/B,MAAM,EAAE+H,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;IACpD,MAAMuP,GAAG,GAAG,IAAI,CAAC4nB,QAAQ,CAACn3B,CAAC,CAAC;IAC5B,IAAIuP,GAAG,CAAC2gJ,KAAK,EAAE;MACb3gJ,GAAG,CAAC2gJ,KAAK,CAACxwJ,QAAQ,CAACy+D,SAAS,CAAC98C,MAAM,CAAC;MACpC9R,GAAG,CAAC2gJ,KAAK,CAACxwJ,QAAQ,CAACs0D,WAAW,GAAG,IAAI;IACvC;EACF;AACF,CAAC;AAED2lG,IAAI,CAAC51J,SAAS,CAACgtK,gBAAgB,GAAG,YAAY;EAC5C,IAAI,CAAC/P,qBAAqB,CAAE1iD,MAAM,IAAK;IACrCA,MAAM,CAAC7/C,cAAc,CAAC;MACpBztC,QAAQ,EAAEjwB,QAAQ,CAAC2d,GAAG,CAACsS;IACzB,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC;AAED2oI,IAAI,CAAC51J,SAAS,CAACq8J,WAAW,GAAG,YAAY;EACvC;EACA,IAAIr/J,QAAQ,CAAC2d,GAAG,CAACmV,MAAM,KAAK,OAAO,EAAE;IACnC,IAAI,IAAI,CAACmvI,KAAK,EAAE;MACd,IAAI,CAACA,KAAK,CAACjL,OAAO,CAAC,CAAC;IACtB;IACA,IAAI,CAACiL,KAAK,GAAG,IAAI;IACjB;EACF;EACA;EACA,IAAI,CAAC,IAAI,CAACA,KAAK,EAAE;IACf,IAAI,CAACA,KAAK,GAAG,IAAIxM,QAAQ,CAAC,MAAM;MAC9B,IAAI,CAACsG,sBAAsB,CAAC,MAAM,IAAI,CAAC4E,OAAO,CAAC,CAAC,CAAC;MACjD,IAAI,CAACnH,WAAW,GAAG,IAAI;MACvB,IAAI,CAACgG,SAAS,CAAC,CAAC;IAClB,CAAC,CAAC;EACJ;EACA,IAAI,CAACyC,KAAK,CAACr9I,MAAM,CAAC,IAAI,CAACuvI,IAAI,CAAC;AAC9B,CAAC;AAEDyE,IAAI,CAAC51J,SAAS,CAACk3J,sBAAsB,GAAG,YAAY;EAClD,MAAM56I,EAAE,GAAGA,CAACutH,KAAK,EAAEhzB,IAAI,KAAK;IAC1BgzB,KAAK,GAAGpsI,yFAAS,CAACosI,KAAK,CAAC,GAAGA,KAAK,GAAG,CAACA,KAAK,CAAC;IAC1CA,KAAK,CAACt5H,OAAO,CAAE4iB,IAAI,IAAK;MACtB,IAAI,CAACn2B,QAAQ,CAACsY,gBAAgB,CAAC,UAAU6d,IAAI,EAAE,EAAE0jF,IAAI,CAAC;IACxD,CAAC,CAAC;EACJ,CAAC;EAEDv6F,EAAE,CAAC,gBAAgB,EAAE,MAAM;IACzB,MAAM+qG,MAAM,GAAG,IAAI,CAAC+1C,gBAAgB,CAAC,CAAC;IACtC,IAAI/1C,MAAM,KAAK,IAAI,EAAE;IAErBA,MAAM,CAACc,SAAS,CAACnrH,QAAQ,CAAC2d,GAAG,CAACsN,KAAK,CAACoD,EAAE,CAACI,KAAK,CAAC;IAC7C,IAAI,CAAC+qI,WAAW,GAAG,IAAI;EACzB,CAAC,CAAC;EAEFl6I,EAAE,CAAC,kBAAkB,EAAE,MAAM;IAC3B,MAAM+qG,MAAM,GAAG,IAAI,CAAC+1C,gBAAgB,CAAC,CAAC;IACtC,IAAI/1C,MAAM,KAAK,IAAI,EAAE;IAErBA,MAAM,CAACF,OAAO,CAAC,CAAC,CAACxrH,QAAQ,CAAC4mH,aAAa,CAAC,CAAC;IACzC,IAAI,CAACi0C,WAAW,GAAG,IAAI;EACzB,CAAC,CAAC;EAEFl6I,EAAE,CAAC,UAAU,EAAE,MAAM;IACnB,IAAI,CAACyjJ,iBAAiB,CAAC,CAAC;EAC1B,CAAC,CAAC;EAEFzjJ,EAAE,CAAC,IAAI,EAAE,MAAM;IACb,IAAItf,QAAQ,CAAC2d,GAAG,CAACwU,EAAE,IAAI,CAACgqI,aAAa,CAAC,IAAI,CAAChI,IAAI,CAAC/gE,QAAQ,CAAC0pE,UAAU,CAAC,CAAC,CAAC,EAAE;MACtE,IAAI,CAAC/6I,MAAM,CAACjB,IAAI,CAAC,4CAA4C,CAAC;MAC9D9gB,QAAQ,CAAC1C,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;IAC3B,CAAC,MAAM;MACL,MAAMgjB,MAAM,GAAG;QAAEu2E,gBAAgB,EAAE72F,QAAQ,CAAC2d,GAAG,CAACwU;MAAG,CAAC;MACpD,IAAI,CAACyvI,sBAAsB,CAACthJ,MAAM,CAAC;IACrC;EACF,CAAC,CAAC;EAEFhB,EAAE,CAAC,UAAU,EAAE,MAAM;IACnB,IAAItf,QAAQ,CAAC2d,GAAG,CAAC+T,QAAQ,IAAI,CAACuqI,oBAAoB,CAAC,IAAI,CAAC9H,IAAI,CAAC/gE,QAAQ,CAAC0pE,UAAU,CAAC,CAAC,CAAC,EAAE;MACnF,IAAI,CAAC/6I,MAAM,CAACjB,IAAI,CAAC,kDAAkD,CAAC;MACpE9gB,QAAQ,CAAC1C,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;IACjC;IACA,IAAI,CAACR,UAAU,CAAC,CAAC;EACnB,CAAC,CAAC;EAEFwiB,EAAE,CAAC,UAAU,EAAE,MAAM;IACnB,IAAI,CAAC0jJ,kBAAkB,CAAC,CAAC;EAC3B,CAAC,CAAC;EAEF1jJ,EAAE,CAAC,gBAAgB,EAAE,MAAM;IACzB,IAAI,CAAC0jJ,kBAAkB,CAAC,CAAC;EAC3B,CAAC,CAAC;EAEF1jJ,EAAE,CAAC,gBAAgB,EAAG2wJ,GAAG,IAAK;IAC5B,MAAMvZ,GAAG,GAAG,IAAI,CAACvC,IAAI;IACrB,IAAIuC,GAAG,EAAE;MACPA,GAAG,CAACtjE,QAAQ,CAAC6pE,aAAa,CAACj9J,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAACnU,KAAK,EAAEtb,MAAM,CAAC,CAACsB,QAAQ,CAAC2d,GAAG,CAACwQ,EAAE,CAAC+C,WAAW,CAAC,CAAC;IACzF;IACA;IACA,IAAI,CAAC6+I,gBAAgB,CAAC;MAAEn5E,cAAc,EAAEq5E,GAAG,CAACvwJ;IAAM,CAAC,CAAC;IACpD,IAAI,CAAC5iB,UAAU,CAAC,CAAC;EACnB,CAAC,CAAC;EAEFwiB,EAAE,CAAC,iBAAiB,EAAG2wJ,GAAG,IAAK;IAC7B;IACA,IAAI,CAACF,gBAAgB,CAAC;MAAE3+I,SAAS,EAAE6+I,GAAG,CAACvwJ;IAAM,CAAC,CAAC;IAC/C,IAAI,CAAC5iB,UAAU,CAAC,CAAC;EACnB,CAAC,CAAC;EAEFwiB,EAAE,CAAC,WAAW,EAAG2wJ,GAAG,IAAK;IACvB;IACA,MAAM3vJ,MAAM,GAAG;MAAEm9C,SAAS,EAAEwyG,GAAG,CAACvwJ,KAAK;MAAE62E,aAAa,EAAEv2F,QAAQ,CAAC2d,GAAG,CAAClD,MAAM,CAAChb;IAAK,CAAC;IAChF,MAAMi3J,GAAG,GAAG,IAAI,CAACvC,IAAI;IACrB,IAAIuC,GAAG,EAAE;MACPA,GAAG,CAACtjE,QAAQ,CAACupE,SAAS,CAACh4I,OAAO,GAAGurJ,OAAO,CAAC5vJ,MAAM,CAACm9C,SAAS,CAAC;IAC5D;IACA,IAAI,CAACsyG,gBAAgB,CAACzvJ,MAAM,EAAE,IAAI,CAAC;IACnC,IAAIA,MAAM,CAACm9C,SAAS,EAAE;MACpB,IAAI,CAAC48F,mBAAmB,CAAC,CAAC;MAC1B,IAAI,CAACyV,sBAAsB,CAAC70D,SAAS,CAACb,uBAAuB,CAAC;IAChE,CAAC,MAAM;MACL,IAAI,CAAC01D,sBAAsB,CAAC70D,SAAS,CAACV,uBAAuB,CAAC;IAChE;IACA,IAAI,CAACi/C,WAAW,GAAG,IAAI;EACzB,CAAC,CAAC;EAEFl6I,EAAE,CAAC,aAAa,EAAG2wJ,GAAG,IAAK;IACzB;IACA,IAAIjwK,QAAQ,CAAC2d,GAAG,CAAClD,MAAM,CAAC6E,EAAE,EAAE;MAC1B,IAAI,CAACywJ,gBAAgB,CAAC;QAAEx5E,aAAa,EAAE05E,GAAG,CAACvwJ;MAAM,CAAC,EAAE,IAAI,CAAC;MACzD,IAAI,CAAC85I,WAAW,GAAG,IAAI;IACzB;EACF,CAAC,CAAC;EAEFl6I,EAAE,CAAC,eAAe,EAAG2wJ,GAAG,IAAK;IAC3B,KAAK,IAAIhxK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACk1J,IAAI,CAAC/6D,KAAK,CAAC7kC,QAAQ,CAACr9D,MAAM,EAAE+H,CAAC,EAAE,EAAE;MACxD,IAAI,IAAI,CAACk1J,IAAI,CAAC/6D,KAAK,CAAC7kC,QAAQ,CAACt1D,CAAC,CAAC,CAACwb,MAAM,KAAKiB,SAAS,EAAE;QACpD,MAAM++I,KAAK,GAAG,IAAI,CAACtG,IAAI,CAAC/6D,KAAK,CAAC7kC,QAAQ,CAACt1D,CAAC,CAAC;QACzCw7J,KAAK,CAAChgJ,MAAM,CAACX,MAAM,GAAGm2J,GAAG,CAACvwJ,KAAK;QAC/B,IAAI,CAAC85I,WAAW,GAAG,IAAI;MACzB;IACF;EACF,CAAC,CAAC;EAEFl6I,EAAE,CAAC,KAAK,EAAE,MAAM;IACd,IAAI,CAACigJ,IAAI,CAAClgJ,IAAI,CAACrf,QAAQ,CAAC2d,GAAG,CAACuB,GAAG,CAAC;EAClC,CAAC,CAAC;EAEFI,EAAE,CAAC,CAAC,KAAK,EAAE,eAAe,EAAE,cAAc,CAAC,EAAE,MAAM;IACjD,IAAI,CAACqiJ,UAAU,CAAC,CAAC;IACjB,IAAI,CAACnI,WAAW,GAAG,IAAI;EACzB,CAAC,CAAC;EAEFl6I,EAAE,CAAC,UAAU,EAAE,MAAM;IACnB,MAAM;MAAE2Q;IAAS,CAAC,GAAGjwB,QAAQ,CAAC2d,GAAG;IACjC,IAAIsS,QAAQ,GAAG,CAAC,IAAIA,QAAQ,GAAG,CAAC,EAAE;MAChC,IAAI,CAAClO,MAAM,CAACjB,IAAI,CAAC,kCAAkC,CAAC;IACtD;IACA,IAAI,CAACkvJ,gBAAgB,CAAC,CAAC;IACvB,IAAI,CAACxW,WAAW,GAAG,IAAI;EACzB,CAAC,CAAC;EAEFl6I,EAAE,CAAC,gBAAgB,EAAG2wJ,GAAG,IAAK;IAC5B,IAAIA,GAAG,CAACvwJ,KAAK,IAAI,CAAC,IAAI,CAACivJ,SAAS,EAAE;MAChC,IAAI,CAAC5sJ,MAAM,CAACjB,IAAI,CAAC,uDAAuD,GACpE,mDAAmD,CAAC;IAC1D;EACF,CAAC,CAAC;EAEFxB,EAAE,CAAC,QAAQ,EAAE,MAAM;IACjB,IAAI,CAAC+/I,WAAW,CAACr/J,QAAQ,CAAC2d,GAAG,CAACmV,MAAM,KAAK,OAAO,CAAC;IACjD,IAAI,CAAC0mI,WAAW,GAAG,IAAI;EACzB,CAAC,CAAC;EAEFl6I,EAAE,CAAC,CAAC,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM;IACpC,IAAI,CAACxiB,UAAU,CAAC,CAAC;EACnB,CAAC,CAAC;EAEFwiB,EAAE,CAAC,YAAY,EAAE,MAAM;IACrB;IACA,IAAI,CAACxiB,UAAU,CAAC,CAAC;;IAEjB;IACA,MAAMutH,MAAM,GAAG,IAAI,CAAC+1C,gBAAgB,CAAC,CAAC;IACtC,IAAI/1C,MAAM,EAAE;MACVA,MAAM,CAACF,OAAO,CAAC,CAAC,CAACxrH,QAAQ,CAAC4mH,aAAa,CAAC,CAAC;MACzC,IAAI,CAACi0C,WAAW,GAAG,IAAI;IACzB;EACF,CAAC,CAAC;EAEFl6I,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EACtB,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,EAAE,MAAM;IAChF,IAAI,CAACk6I,WAAW,GAAG,IAAI;EACzB,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACAZ,IAAI,CAAC51J,SAAS,CAAC1F,GAAG,GAAG,UAAUoC,MAAM,EAAEggB,KAAK,EAAE;EAC5C1f,QAAQ,CAAC1C,GAAG,CAACoC,MAAM,EAAEggB,KAAK,CAAC;AAC7B,CAAC;;AAED;AACA;AACA;AACA;AACA;AACAk5I,IAAI,CAAC51J,SAAS,CAAC7E,MAAM,GAAG,UAAUmkH,UAAU,EAAEnhH,MAAM,EAAE;EACpD,MAAMo8G,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC,CAAC;EACvC,IAAI,CAAC3iD,MAAM,EAAE;IACX;EACF;EAEA,IAAI4yD,GAAG,GAAG7tD,UAAU;EACpB,IAAI7hH,0FAAU,CAAC6hH,UAAU,CAAC,EAAE;IAC1B6tD,GAAG,GAAGngI,cAAS,CAACzuC,KAAK,CAAC+gH,UAAU,CAAC,CAAC9jH,QAAQ;EAC5C;EAEA++G,MAAM,CAACp/G,MAAM,CAACgyK,GAAG,EAAEhvK,MAAM,CAAC;EAC1B,IAAI,CAACwmK,SAAS,GAAG,IAAI;EAErB,IAAI,CAAC8D,gBAAgB,CAAC,CAAC;EACvB,IAAI,CAACjS,WAAW,GAAG,IAAI;AACzB,CAAC;AAED,MAAM4W,YAAY,GAAG,GAAG;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACAxX,IAAI,CAAC51J,SAAS,CAACnE,IAAI,GAAG,UAAUyjH,UAAU,EAAE;EAC1C,MAAMpgH,IAAI,GAAG,IAAI;EACjB,MAAM;IAAEo7G;EAAM,CAAC,GAAG,IAAI,CAAC62C,IAAI;EAC3B,IAAI/4I,SAAS,GAAG,EAAE;EAClB,MAAMi1J,UAAU,GAAG,KAAK;EAExB,SAASt3J,MAAMA,CAAA,EAAG;IAChB,MAAMi4B,GAAG,GAAGssE,KAAK,CAAC5iG,QAAQ;IAC1B,MAAM1b,KAAK,GAAGkD,IAAI,CAACm5J,eAAe,CAAChV,QAAQ,CAAC,CAAC,GAAGrmJ,QAAQ,CAAC2d,GAAG,CAACmS,WAAW;IACxE,MAAMwgJ,KAAK,GAAG,IAAI7wI,gFAAW,CAAC,CAAC;IAC/B6wI,KAAK,CAACE,iBAAiB,CAACtuK,IAAI,CAACm5J,eAAe,CAAClV,cAAc,CAAC,CAAC,EAAEkqB,UAAU,CAAC;IAC1Ej1J,SAAS,GAAG,CACV41B,GAAG,CAAC7jC,CAAC,EAAE6jC,GAAG,CAACp/B,CAAC,EAAEo/B,GAAG,CAAC/9B,CAAC,EACnBjU,KAAK,EACLsxK,KAAK,CAACnjK,CAAC,EAAEmjK,KAAK,CAAC1+J,CAAC,EAAE0+J,KAAK,CAACr9J,CAAC,CAC1B;IACD,OAAOm9J,YAAY,GAAGpzK,KAAK,CAACipB,aAAa,CAAC7K,SAAS,EAAE/J,YAAY,CAAC;EACpE;EAEA,SAAS2H,MAAMA,CAAA,EAAG;IAChB;IACA,IAAIspG,UAAU,CAACprH,MAAM,KAAK,EAAE,EAAE;MAC5BorH,UAAU,GAAG,IAAIA,UAAU,EAAE;IAC/B;IAEA,MAAMlpG,OAAO,GAAGkpG,UAAU,CAAC,CAAC,CAAC;IAC7BlnG,SAAS,GAAGpe,KAAK,CAACmpB,eAAe,CAACm8F,UAAU,CAACt8G,MAAM,CAAC,CAAC,CAAC,EAAEqL,YAAY,CAAC;;IAErE;IACA,IAAI+H,OAAO,KAAKg3J,YAAY,EAAE;MAC5B,IAAIh3J,OAAO,KAAK,GAAG,EAAE;QACnB;QACAgC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG;MACrB,CAAC,MAAM;QACL;QACAlZ,IAAI,CAAC6f,MAAM,CAACjB,IAAI,CAAC,4CAA4C1H,OAAO,OAAOg3J,YAAY,WAAW,CAAC;QACnG;MACF;IACF;IAEA,MAAMzhK,YAAY,GAAGzM,IAAI,CAAC62J,aAAa;IACvC,MAAM0X,OAAO,GAAG9hK,YAAY,CAACujJ,UAAU,CAAC,CAAC;IACzCue,OAAO,CAAC/1J,QAAQ,CAACjM,IAAI,CAAC6uG,KAAK,CAAC5iG,QAAQ,CAAC;IACrC+1J,OAAO,CAACzxK,KAAK,GAAGkD,IAAI,CAACm5J,eAAe,CAAChV,QAAQ,CAAC,CAAC;IAC/CoqB,OAAO,CAACvf,WAAW,CAACziJ,IAAI,CAACvM,IAAI,CAACm5J,eAAe,CAAClV,cAAc,CAAC,CAAC,CAAC;IAE/D,MAAMuqB,OAAO,GAAG/hK,YAAY,CAACujJ,UAAU,CAAC,CAAC;IACzCwe,OAAO,CAACh2J,QAAQ,CAACpd,GAAG,CAAC8d,SAAS,CAAC,CAAC,CAAC,EAAEA,SAAS,CAAC,CAAC,CAAC,EAAEA,SAAS,CAAC,CAAC,CAAC,CAAC;;IAE9D;IACA;IACA,IAAIlZ,IAAI,CAACg+J,iBAAiB,CAAC,CAAC,EAAE;MAC5BwQ,OAAO,CAACh2J,QAAQ,CAAC6jB,GAAG,CAACr8B,IAAI,CAACg+J,iBAAiB,CAAC,CAAC,CAACxlJ,QAAQ,CAAC;IACzD;IAEAg2J,OAAO,CAAC1xK,KAAK,GAAGoc,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9Bs1J,OAAO,CAACxf,WAAW,CAACyf,YAAY,CAAC,IAAIlxI,gFAAW,CAACrkB,SAAS,CAAC,CAAC,CAAC,EAAEA,SAAS,CAAC,CAAC,CAAC,EAAEA,SAAS,CAAC,CAAC,CAAC,EAAEi1J,UAAU,CAAC,CAAC;IAEvG1hK,YAAY,CAAC0iJ,KAAK,CAACof,OAAO,EAAEC,OAAO,CAAC;EACtC;EAEA,IAAI,OAAOpuD,UAAU,KAAK,WAAW,EAAE;IACrC,OAAOvpG,MAAM,CAAC,CAAC;EACjB;EACAC,MAAM,CAAC,CAAC;EAER,OAAOspG,UAAU;AACnB,CAAC;;AAED;AACA;AACA;AACAs2C,IAAI,CAAC51J,SAAS,CAACg/J,WAAW,GAAG,YAAY;EACvC,MAAM9/J,IAAI,GAAG,IAAI;EACjB,MAAM;IAAEo7G;EAAM,CAAC,GAAG,IAAI,CAAC62C,IAAI;EAE3B,MAAMxlJ,YAAY,GAAG,IAAI,CAACoqJ,aAAa;EACvC,IAAI,CAACpqJ,YAAY,CAACmjJ,UAAU,CAAC,CAAC,EAAE;IAC9BnjJ,YAAY,CAAC+O,KAAK,CAAC,CAAC;EACtB;EAEA,IAAI,CAAC/O,YAAY,CAACkjJ,QAAQ,CAAC,CAAC,EAAE;IAC5B;EACF;EAEA,MAAMvtI,GAAG,GAAG3V,YAAY,CAACqjJ,cAAc,CAAC,CAAC;EACzC,IAAI1tI,GAAG,CAAC2tI,OAAO,EAAE;IACf,MAAMrpH,IAAI,GAAGtkB,GAAG,CAACzlB,IAAI;IACrBy+G,KAAK,CAAC5iG,QAAQ,CAACjM,IAAI,CAACm6B,IAAI,CAACluB,QAAQ,CAAC;IAClCxY,IAAI,CAACm5J,eAAe,CAAC/U,QAAQ,CAAC19G,IAAI,CAAC5pC,KAAK,GAAGgB,QAAQ,CAAC2d,GAAG,CAACmS,WAAW,CAAC;IACpE5tB,IAAI,CAACm5J,eAAe,CAACjV,cAAc,CAACx9G,IAAI,CAACsoH,WAAW,CAAC;IACrD,IAAI,CAAC1wI,aAAa,CAAC;MAAE/gB,IAAI,EAAE;IAAY,CAAC,CAAC;IACzCyC,IAAI,CAACs3J,WAAW,GAAG,IAAI;EACzB;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACAZ,IAAI,CAAC51J,SAAS,CAAC1D,SAAS,GAAG,UAAU6N,CAAC,EAAEyE,CAAC,EAAEqB,CAAC,EAAE;EAC5C,IAAI,CAACooJ,eAAe,CAACvT,cAAc,CAAC36I,CAAC,EAAEyE,CAAC,EAAEqB,CAAC,CAAC;EAC5C,IAAI,CAACuN,aAAa,CAAC;IAAE/gB,IAAI,EAAE;EAAY,CAAC,CAAC;EACzC,IAAI,CAAC+5J,WAAW,GAAG,IAAI;AACzB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACAZ,IAAI,CAAC51J,SAAS,CAAC7D,MAAM,GAAG,UAAUgO,CAAC,EAAEyE,CAAC,EAAEqB,CAAC,EAAE;EACzC,IAAI,CAACooJ,eAAe,CAACl8J,MAAM,CAAC,IAAIsgC,qFAAgB,CAAC,CAAC,CAACkxI,YAAY,CAAC,IAAIlxI,gFAAW,CAACtyB,CAAC,EAAEyE,CAAC,EAAEqB,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;EACjG,IAAI,CAACuN,aAAa,CAAC;IAAE/gB,IAAI,EAAE;EAAY,CAAC,CAAC;EACzC,IAAI,CAAC+5J,WAAW,GAAG,IAAI;AACzB,CAAC;;AAED;AACA;AACA;AACA;AACAZ,IAAI,CAAC51J,SAAS,CAAChE,KAAK,GAAG,UAAUkwB,MAAM,EAAE;EACvC,IAAIA,MAAM,IAAI,CAAC,EAAE;IACf,MAAM,IAAIxJ,UAAU,CAAC,mCAAmC,CAAC;EAC3D;EACA,IAAI,CAAC21I,eAAe,CAACr8J,KAAK,CAACkwB,MAAM,CAAC;EAClC,IAAI,CAAC1O,aAAa,CAAC;IAAE/gB,IAAI,EAAE;EAAY,CAAC,CAAC;EACzC,IAAI,CAAC+5J,WAAW,GAAG,IAAI;AACzB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACAZ,IAAI,CAAC51J,SAAS,CAACzD,MAAM,GAAG,UAAUf,QAAQ,EAAE;EAC1C;EACA,IAAIA,QAAQ,KAAKkd,SAAS,EAAE;IAC1B,IAAI,CAAC0xJ,cAAc,CAAC,CAAC;IACrB,IAAI,CAAC5T,WAAW,GAAG,IAAI;IACvB;EACF;EACA;EACA,IAAIh7J,QAAQ,CAACgQ,GAAG,KAAKkN,SAAS,KAAK,MAAM,IAAIld,QAAQ,CAACgQ,GAAG,IAAI,SAAS,IAAIhQ,QAAQ,CAACgQ,GAAG,CAAC,EAAE;IAAE;IACzF,IAAI,MAAM,IAAIhQ,QAAQ,CAACgQ,GAAG,EAAE;MAC1B,IAAI,CAAC0+J,YAAY,CAAC1uK,QAAQ,CAACgQ,GAAG,CAAC2c,IAAI,CAAC;IACtC,CAAC,MAAM;MACL,IAAI,CAAC6hJ,eAAe,CAACxuK,QAAQ,CAACgQ,GAAG,CAACkrB,OAAO,CAAC;IAC5C;IACA,IAAI,CAAC8/H,WAAW,GAAG,IAAI;IACvB;EACF;EACA;EACA,IAAIh7J,QAAQ,CAACgQ,GAAG,KAAKkN,SAAS,IAAIld,QAAQ,KAAK,EAAE,EAAE;IACjD,MAAM2xK,GAAG,GAAGngI,cAAS,CAACzuC,KAAK,CAAC/C,QAAQ,CAAC;IACrC,IAAI2xK,GAAG,CAACpuK,KAAK,KAAK2Z,SAAS,EAAE;MAC3B,IAAI,CAAC0xJ,cAAc,CAAC+C,GAAG,CAAC;MACxB,IAAI,CAAC3W,WAAW,GAAG,IAAI;MACvB;IACF;EACF;EACA;EACA,IAAI,CAACwO,UAAU,CAAC,CAAC;EACjB,IAAI,CAACxO,WAAW,GAAG,IAAI;AACzB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACAZ,IAAI,CAAC51J,SAAS,CAACvE,MAAM,GAAG,UAAUD,QAAQ,EAAEsb,MAAM,EAAE;EAClD,MAAMyjG,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC,CAAC;EACvC,IAAI,CAAC3iD,MAAM,EAAE;IACX,OAAOvtE,cAAS,CAAC4gI,IAAI,CAAC,CAAC;EACzB;EAEA,IAAIpyK,QAAQ,YAAYgD,MAAM,EAAE;IAC9BhD,QAAQ,GAAGwxC,cAAS,CAACzuC,KAAK,CAAC/C,QAAQ,CAAC;EACtC;EAEA,MAAM8lB,GAAG,GAAGi5F,MAAM,CAAC9+G,MAAM,CAACD,QAAQ,EAAEsb,MAAM,CAAC;EAC3C,IAAIwK,GAAG,EAAE;IACPi5F,MAAM,CAACuD,wBAAwB,CAAC,CAAC;IACjC,IAAI,CAAC04C,WAAW,GAAG,IAAI;EACzB;EACA,OAAOl1I,GAAG;AACZ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACAs0I,IAAI,CAAC51J,SAAS,CAAC6tK,SAAS,GAAG,UAAUC,YAAY,EAAEC,WAAW,EAAE;EAC9D,MAAMxzD,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC6Q,WAAW,CAAC;EAClD,IAAI,CAACxzD,MAAM,EAAE;IACX,OAAO,KAAK;EACd;EAEA,MAAMpyF,IAAI,GAAGoyF,MAAM,CAACz7E,UAAU,CAAC,CAAC,CAAC8nB,iBAAiB,CAACknH,YAAY,CAAC;EAChE,IAAI3lJ,IAAI,KAAK,IAAI,EAAE;IACjB,OAAO,KAAK;EACd;EAEA,MAAM6lB,GAAG,GAAG7lB,IAAI,CAACzQ,QAAQ,CAAC2jB,KAAK,CAAC,CAAC;EACjC;EACA;EACA,IAAI,CAAC81H,IAAI,CAAC72C,KAAK,CAAC5nD,0BAA0B,CAAC,CAAC;EAC5C,IAAI,CAACy+F,IAAI,CAACv7F,MAAM,CAAClD,0BAA0B,CAAC,CAAC;EAC7C,IAAI,CAACy+F,IAAI,CAAC72C,KAAK,CAAChjB,YAAY,CAACtpD,GAAG,CAAC;EACjCA,GAAG,CAACggI,OAAO,CAAC,IAAI,CAAC7c,IAAI,CAACv7F,MAAM,CAAC;EAE7B,OAAO;IACLzrD,CAAC,EAAE,CAAC6jC,GAAG,CAAC7jC,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,CAACgnJ,IAAI,CAACt6I,KAAK;IACxCjI,CAAC,EAAE,CAAC,GAAG,GAAGo/B,GAAG,CAACp/B,CAAC,IAAI,GAAG,GAAG,IAAI,CAACuiJ,IAAI,CAACj4I;EACrC,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA08I,IAAI,CAAC51J,SAAS,CAACjE,IAAI,GAAG,UAAUgyK,WAAW,EAAE;EAC3C,MAAMxzD,MAAM,GAAG,IAAI,CAAC2iD,iBAAiB,CAAC6Q,WAAW,CAAC;EAClD,IAAI,CAACxzD,MAAM,EAAE;IACX;EACF;EACAA,MAAM,CAACz7E,UAAU,CAAC,CAAC,CAAC/iC,IAAI,CAAC,CAAC;;EAE1B;EACAw+G,MAAM,CAACiC,SAAS,CAACjsG,OAAO,CAAEjV,GAAG,IAAK;IAChC,IAAIA,GAAG,CAACgC,IAAI,CAAC8d,EAAE,KAAK,IAAI,IAAI9f,GAAG,CAACkC,OAAO,CAAC4d,EAAE,KAAK,IAAI,EAAE;MACnD9f,GAAG,CAACg9G,YAAY,GAAG,IAAI;IACzB;EACF,CAAC,CAAC;AACJ,CAAC;AAEDs9C,IAAI,CAAC51J,SAAS,CAACiuK,SAAS,GAAG,YAAY;EACrC,MAAM/uK,IAAI,GAAG,IAAI;EAEjB,SAASgvK,eAAeA,CAAClkK,CAAC,EAAE;IAC1B,MAAMwlE,KAAK,GAAG,IAAI/yC,kFAAa,CAAC,CAAC;IACjC,MAAMgzC,KAAK,GAAG,IAAIhzC,kFAAa,CAAC,CAAC;IACjC,MAAMizC,KAAK,GAAG,IAAIjzC,kFAAa,CAAC,CAAC;IACjCzyB,CAAC,CAACmkK,YAAY,CAAC3+F,KAAK,EAAEC,KAAK,EAAEC,KAAK,CAAC;IACnCF,KAAK,CAACjzC,SAAS,CAAC,CAAC;IACjBkzC,KAAK,CAAClzC,SAAS,CAAC,CAAC;IACjBmzC,KAAK,CAACnzC,SAAS,CAAC,CAAC;IACjB,MAAM6xI,MAAM,GAAG,IAAI3xI,kFAAa,CAAC,CAAC;IAClC2xI,MAAM,CAACl6G,QAAQ,CAAC,CAAC;IACjBk6G,MAAM,CAACC,SAAS,CAAC7+F,KAAK,EAAEC,KAAK,EAAEC,KAAK,CAAC;IACrC,OAAO0+F,MAAM;EACf;EAEA,SAASE,aAAaA,CAACzvI,OAAO,EAAE;IAC9B,MAAM;MAAEk7B;IAAK,CAAC,GAAG76D,IAAI,CAACiyJ,IAAI;IAC1B,MAAM32D,GAAG,GAAG0zE,eAAe,CAACn0G,IAAI,CAAChH,WAAW,CAAC;IAC7C,MAAMyS,EAAE,GAAG,IAAI/oC,kFAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM6gB,OAAO,GAAG,IAAI7gB,kFAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7C,IAAI8xI,GAAG,GAAG,IAAI;IACd,IAAI7tF,EAAE,GAAG,IAAI;;IAEb;IACA7hD,OAAO,CAACG,WAAW,CAAE7W,IAAI,IAAK;MAC5B,IAAIA,IAAI,CAACuhB,UAAU,IAAIvhB,IAAI,CAACuhB,UAAU,CAACkpF,OAAO,EAAE;QAC9C27C,GAAG,GAAGpmJ,IAAI,CAACuhB,UAAU,CAACkpF,OAAO;QAC7BlyC,EAAE,GAAGv4D,IAAI,CAACzQ,QAAQ;QAClB8tD,EAAE,CAAClrE,GAAG,CAAComF,EAAE,CAACv2E,CAAC,EAAEu2E,EAAE,CAAC9xE,CAAC,EAAE8xE,EAAE,CAACzwE,CAAC,EAAE,GAAG,CAAC;QAC7Bu1D,EAAE,CAAC32B,YAAY,CAAC2rD,GAAG,CAAC;QACpB+zE,GAAG,CAACr2J,YAAY,CAAC,IAAI,EAAEstD,EAAE,CAACr7D,CAAC,CAACjQ,QAAQ,CAAC,CAAC,CAAC;QACvCq0K,GAAG,CAACr2J,YAAY,CAAC,IAAI,EAAEstD,EAAE,CAAC52D,CAAC,CAAC1U,QAAQ,CAAC,CAAC,CAAC;QACvCq0K,GAAG,CAACr2J,YAAY,CAAC,IAAI,EAAEstD,EAAE,CAACv1D,CAAC,CAAC/V,QAAQ,CAAC,CAAC,CAAC;QACvCq0K,GAAG,CAACC,eAAe,CAAC,IAAI,CAAC;QACzBD,GAAG,CAACC,eAAe,CAAC,IAAI,CAAC;MAC3B;IACF,CAAC,CAAC;IACF;IACA3vI,OAAO,CAACuoB,aAAa,CAAEqnH,MAAM,IAAK;MAChC,IAAIA,MAAM,CAAC/kI,UAAU,IAAI+kI,MAAM,CAAC/kI,UAAU,CAACkpF,OAAO,EAAE;QAClD27C,GAAG,GAAGE,MAAM,CAAC/kI,UAAU,CAACkpF,OAAO;QAC/BlyC,EAAE,GAAG+tF,MAAM,CAAC9kI,WAAW,CAAC,CAAC;QACzB67B,EAAE,CAAClrE,GAAG,CAAComF,EAAE,CAACv2E,CAAC,EAAEu2E,EAAE,CAAC9xE,CAAC,EAAE8xE,EAAE,CAACzwE,CAAC,EAAE,GAAG,CAAC;QAC7B,MAAMgmC,EAAE,GAAGw4H,MAAM,CAAC7kI,eAAe,CAAC,CAAC;QACnC,IAAIqM,EAAE,KAAK,IAAI,EAAE;UACfuvB,EAAE,CAAC32B,YAAY,CAAC2rD,GAAG,CAAC;QACtB,CAAC,MAAM;UACLl9C,OAAO,CAAChjD,GAAG,CAAC27C,EAAE,CAAC9rC,CAAC,EAAE8rC,EAAE,CAACrnC,CAAC,EAAEqnC,EAAE,CAAChmC,CAAC,EAAE,GAAG,CAAC;UAClCu1D,EAAE,CAACpoE,GAAG,CAACkgD,OAAO,CAAC;UACfkoB,EAAE,CAAC32B,YAAY,CAAC2rD,GAAG,CAAC,CAAC,CAAC;UACtBl9C,OAAO,CAAChjD,GAAG,CAAC27C,EAAE,CAAC9rC,CAAC,EAAE8rC,EAAE,CAACrnC,CAAC,EAAEqnC,EAAE,CAAChmC,CAAC,EAAE,GAAG,CAAC;UAClCqtC,OAAO,CAACzO,YAAY,CAAC2rD,GAAG,CAAC;UACzBh1B,EAAE,CAACjqC,GAAG,CAAC+hB,OAAO,CAAC;QACjB;QACAixH,GAAG,CAACr2J,YAAY,CAAC,GAAG,EAAEstD,EAAE,CAACr7D,CAAC,CAACjQ,QAAQ,CAAC,CAAC,CAAC;QACtCq0K,GAAG,CAACr2J,YAAY,CAAC,GAAG,EAAEstD,EAAE,CAAC52D,CAAC,CAAC1U,QAAQ,CAAC,CAAC,CAAC;QACtCq0K,GAAG,CAACr2J,YAAY,CAAC,GAAG,EAAEstD,EAAE,CAACv1D,CAAC,CAAC/V,QAAQ,CAAC,CAAC,CAAC;MACxC;IACF,CAAC,CAAC;EACJ;EAEA,MAAMqgH,MAAM,GAAGr7G,IAAI,CAACg+J,iBAAiB,CAAC,CAAC;EACvC,MAAMr+H,OAAO,GAAG07E,MAAM,GAAGA,MAAM,CAACz7E,UAAU,CAAC,CAAC,GAAG,IAAI;EACnD,IAAID,OAAO,IAAIA,OAAO,CAAC01F,WAAW,EAAE;IAClC+5C,aAAa,CAACzvI,OAAO,CAAC;;IAEtB;IACA,MAAM6vI,WAAW,GAAG,IAAIC,aAAa,CAAC,CAAC;IACvC,OAAOD,WAAW,CAACE,iBAAiB,CAAC/vI,OAAO,CAAC01F,WAAW,CAAC;EAC3D;EAEA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACAqhC,IAAI,CAAC51J,SAAS,CAAC7F,IAAI,GAAG,YAAY;EAChC6C,QAAQ,CAAC1C,GAAG,CAAC;IACX6yB,cAAc,EAAE,IAAI;IACpBD,QAAQ,EAAE,QAAQ;IAClB8B,OAAO,EAAE;MAAE1S,EAAE,EAAE,IAAI;MAAE2S,SAAS,EAAE;IAAK,CAAC;IACtC9D,EAAE,EAAE;MAAEnU,KAAK,EAAE;IAAS;EACxB,CAAC,CAAC;EAEF,IAAI,CAACimJ,qBAAqB,CAAE1iD,MAAM,IAAK;IACrC,MAAMj/G,GAAG,GAAG,EAAE;IACd,MAAMujC,OAAO,GAAG07E,MAAM,CAACz7E,UAAU,CAAC,CAAC;IACnC,MAAM1R,OAAO,GAAGynF,YAAQ,CAACx6G,GAAG,CAAC2C,QAAQ,CAAC2d,GAAG,CAACyS,OAAO,CAAC;IAClD,KAAK,IAAInxB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4iC,OAAO,CAACkoB,aAAa,CAAC,CAAC,EAAE9qD,CAAC,EAAE,EAAE;MAChD,MAAM4yK,YAAY,GAAGhwI,OAAO,CAAC2iB,OAAO,CAACvlD,CAAC,CAAC,CAACqjC,KAAK;MAC7C,MAAMwvI,aAAa,GAAG1hJ,OAAO,CAACqgF,aAAa,CAACohE,YAAY,CAAC;MACzDvzK,GAAG,CAACW,CAAC,CAAC,GAAG;QACPT,QAAQ,EAAE,SAASqzK,YAAY,EAAE;QACjCvxK,IAAI,EAAE,IAAI;QACVE,OAAO,EAAE,CAAC,IAAI,EAAE;UAAEwZ,KAAK,EAAE83J,aAAa;UAAE5iJ,MAAM,EAAE;QAAI,CAAC,CAAC;QACtDvwB,QAAQ,EAAE;MACZ,CAAC;IACH;IACA4+G,MAAM,CAAC3gH,SAAS,CAAC0B,GAAG,CAAC;EACvB,CAAC,CAAC;AACJ,CAAC;AAEDs6J,IAAI,CAAC51J,SAAS,CAACgoB,OAAO,GAAI,KAAsC,IAAI+mJ,QAAe,IAAK,CAAW;;AAEnG;AACA;;AAEAtxK,wFAAQ,CAACm4J,IAAI,EAAE,kBAAmB;EAChC5tI,OAAO,EAAE4tI,IAAI,CAAC51J,SAAS,CAACgoB,OAAO;EAE/BivI,iBAAiB,EAAE,EAAE;EAErB;EACA5+E,IAAI;EACJq8E,EAAE;EACFzsI,KAAK;EACL0D,QAAQ;EACRyI,SAAS;EACTygF,QAAQ;EACRt0G,OAAO;EACPvD,QAAQ;EACRhD,KAAK;EACL05J,GAAG,EAAE;IACHx7C,cAAcA,EAAAA,kBAAAA;EAChB,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE82D,UAAU,EAAE;IACVC,MAAM,EAAExxK,mFAAC;IACTyxK,KAAK,EAAEzyI,0EAAKA;EACd;AACF,CAAC,CAAC;AAEF,+CAAem5H,IAAI;;;;ACtqIoB;AACJ;AAEnC,MAAMuZ,UAAU,GAAG;EACjBC,KAAK,EAAE,CACL,yBAAyB,EACzB,gCAAgC,EAChC,qBAAqB,EACrB,wBAAwB,EACxB,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,6BAA6B,EAC7B,gCAAgC,EAChC,oBAAoB,CACrB;EACDlnJ,EAAE,EAAE;IACFknJ,KAAK,EAAE,CACL,qBAAqB,EACrB,2CAA2C,EAC3C,uCAAuC,EACvC,uCAAuC,EACvC,yCAAyC,EACzC,yCAAyC,EACzC,yCAAyC;EAE7C,CAAC;EACD/kJ,EAAE,EAAE;IACF+kJ,KAAK,EAAE,CACL,YAAY,EACZ,sCAAsC,EACtC,4CAA4C,EAC5C,sCAAsC,EACtC,uCAAuC,EACvC,4BAA4B,EAC5B,4CAA4C;EAEhD,CAAC;EACDpmJ,EAAE,EAAE;IACFomJ,KAAK,EAAE,CACL,UAAU,EACV,uCAAuC,EACvC,4BAA4B,EAC5B,yCAAyC,EACzC,yCAAyC,EACzC,6BAA6B;EAEjC,CAAC;EACDhmJ,EAAE,EAAE;IACFgmJ,KAAK,EAAE,CACL,aAAa,EACb,2CAA2C,EAC3C,uCAAuC,EACvC,yCAAyC,EACzC,yCAAyC,EACzC,yCAAyC;EAE7C,CAAC;EACDrmJ,EAAE,EAAE;IACFqmJ,KAAK,EAAE,CACL,kBAAkB,EAClB,iBAAiB;EAErB,CAAC;EACDnlJ,EAAE,EAAE;IACFmlJ,KAAK,EAAE,CACL,UAAU,EACV,yCAAyC;EAE7C,CAAC;EACDllJ,EAAE,EAAE;IACFklJ,KAAK,EAAE,CACL,SAAS,EACT,sCAAsC,EACtC,uCAAuC,EACvC,6BAA6B;EAEjC,CAAC;EACD/lJ,EAAE,EAAE;IACF+lJ,KAAK,EAAE,CACL,YAAY,EACZ,sCAAsC;EAE1C,CAAC;EACDzlJ,EAAE,EAAE;IACFylJ,KAAK,EAAE,CACL,kBAAkB,EAClB,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,sCAAsC;EAE1C,CAAC;EACD1lJ,EAAE,EAAE;IACF0lJ,KAAK,EAAE,CACL,6BAA6B,EAC7B,sCAAsC;EAE1C,CAAC;EACDzkJ,EAAE,EAAE;IACFykJ,KAAK,EAAE,CACL,cAAc,EACd,qEAAqE,EACrE,gEAAgE,EAChE,yEAAyE,EACzE,8DAA8D,EAC9D,4DAA4D,EAC5D,qCAAqC,EACrC,qCAAqC,EACrC,qCAAqC,EACrC,6CAA6C,EAC7C,iDAAiD,EACjD,6CAA6C,EAC7C,iDAAiD,EACjD,+CAA+C,EAC/C,6BAA6B;EAEjC;AACF,CAAC;AAED,MAAMC,SAAS,GAAG;EAChBD,KAAK,EAAE,CACL,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,4BAA4B,EAC5B,gCAAgC,EAChC,uCAAuC,EACvC,kBAAkB,CACnB;EACDtjJ,EAAE,EAAE;IACFsjJ,KAAK,EAAE,CACL,4CAA4C,EAC5C,YAAY,EACZ,+CAA+C,CAChD;IACDp4J,KAAK,EAAE;MACLo4J,KAAK,EAAEtxK,MAAM,CAACiQ,IAAI,CAAC8mG,YAAQ,CAACx6G,GAAG,CAAC2C,QAAQ,CAAC2d,GAAG,CAACyS,OAAO,CAAC,CAACghF,WAAW,CAAC,CAACxhG,IAAI,CAAC,CAAC,CAAClL,IAAI,CAAC,IAAI;IACrF;EACF;AACF,CAAC;AAED,MAAM4tK,YAAY,GAAG;EACnBF,KAAK,EAAE,CACL,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB;AAEpB,CAAC;AAED,MAAMG,UAAU,GAAG;EACjBH,KAAK,EAAE,CACL,iEAAiE,EACjE,oBAAoB,EACpB,2BAA2B,EAC3B,6CAA6C,EAC7C,8BAA8B,EAC9B,gDAAgD,EAChD,6BAA6B,EAC7B,sBAAsB,EACtB,2BAA2B,CAC5B;EACD9jK,CAAC,EAAE;IACD8jK,KAAK,EAAE;EACT,CAAC;EACDplK,CAAC,EAAEmlK,UAAU;EACbvrK,CAAC,EAAEyrK,SAAS;EACZl7I,EAAE,EAAEm7I;AACN,CAAC;AAED,MAAME,mBAAmB,GAAG;EAC1BJ,KAAK,EAAE,CACL,oDAAoD,EACpD,+CAA+C,EAC/C,0CAA0C,CAC3C;EACDnnJ,KAAK,EAAEknJ,UAAU;EACjBxjJ,QAAQ,EAAE0jJ;AACZ,CAAC;AAED,MAAMp1K,IAAI,GAAG;EACXm1K,KAAK,EAAE,CACL,uCAAuC,EACvC,wDAAwD,EACxD,qCAAqC,EACrC,kCAAkC,EAClC,mDAAmD,EACnD,qCAAqC,EACrC,6BAA6B,CAC9B;EACD11K,KAAK,EAAE;IACL01K,KAAK,EAAE,CACL,mDAAmD,EACnD,6CAA6C;EAEjD,CAAC;EACDlyK,IAAI,EAAE;IACJkyK,KAAK,EAAE,CACL,kDAAkD,EAClD,8CAA8C,CAC/C;IACDK,KAAK,EAAE;MACLL,KAAK,EAAE;IACT,CAAC;IACDjvJ,GAAG,EAAE;MACHivJ,KAAK,EAAE;IACT,CAAC;IACDtkK,CAAC,EAAE;MACDskK,KAAK,EAAE,CACL,6CAA6C,EAC7C,8CAA8C,EAC9C,yBAAyB;IAE7B;EACF,CAAC;EACDjyK,KAAK,EAAE;IACLiyK,KAAK,EAAE;EACT,CAAC;EACDhyK,GAAG,EAAE;IACHgyK,KAAK,EAAE,CACL,kCAAkC,EAClC,6CAA6C,EAC7C,qCAAqC,CACtC;IACDM,QAAQ,EAAE;MACRN,KAAK,EAAE;IACT,CAAC;IACDO,WAAW,EAAEJ;EACf,CAAC;EACDj0K,GAAG,EAAE;IACH8zK,KAAK,EAAE,CACL,8CAA8C,EAC9C,iDAAiD,EACjD,kDAAkD,CACnD;IACDM,QAAQ,EAAE;MACRN,KAAK,EAAE,CACL,4DAA4D,EAC5D,yBAAyB;IAE7B,CAAC;IACDQ,SAAS,EAAE;MACTR,KAAK,EAAE;IACT,CAAC;IACDO,WAAW,EAAEJ;EACf,CAAC;EACD10K,MAAM,EAAE;IACNu0K,KAAK,EAAE,CACL,iCAAiC,EACjC,wCAAwC,CACzC;IACDM,QAAQ,EAAE;MACRN,KAAK,EAAE,CACL,4DAA4D,EAC5D,yBAAyB;IAE7B,CAAC;IACDQ,SAAS,EAAE;MACTR,KAAK,EAAE;IACT;EACF,CAAC;EACD5zK,QAAQ,EAAE;IACR4zK,KAAK,EAAE,CACL,uBAAuB,EACvB,2DAA2D,CAC5D;IACDS,UAAU,EAAE;MACVT,KAAK,EAAE;IACT;EACF,CAAC;EACD9xK,IAAI,EAAE;IACJ8xK,KAAK,EAAE,CACL,yCAAyC,EACzC,sEAAsE,CACvE;IACDU,OAAO,EAAEX;EACX,CAAC;EACDn4J,KAAK,EAAE;IACLo4J,KAAK,EAAE,CACL,6CAA6C,EAC7C,+DAA+D,CAChE;IACDW,UAAU,EAAEV;EACd,CAAC;EACD1zK,QAAQ,EAAE;IACRyzK,KAAK,EAAE,CACL,wBAAwB,EACxB,2CAA2C,CAC5C;IACDY,WAAW,EAAEV;EACf,CAAC;EACDj6H,KAAK,EAAE;IACL+5H,KAAK,EAAE,gBAAgB;IACvBhyK,GAAG,EAAE;MACHgyK,KAAK,EAAE,WAAW;MAClBa,GAAG,EAAE;QACHb,KAAK,EAAE,CACL,SAAS,EACT,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB;MAExB;IACF,CAAC;IACDc,GAAG,EAAE;MACHd,KAAK,EAAE;IACT;EACF,CAAC;EACDp0K,IAAI,EAAE;IACJo0K,KAAK,EAAE,CACL,qCAAqC,EACrC,gEAAgE,EAChE,iDAAiD,EACjD,2CAA2C,EAC3C,6DAA6D;EAEjE,CAAC;EACDvxD,IAAI,EAAE;IACJuxD,KAAK,EAAE,CACL,+BAA+B,EAC/B,wCAAwC;EAE5C,CAAC;EACD/yJ,IAAI,EAAE;IACJ+yJ,KAAK,EAAE,CACL,+BAA+B,EAC/B,wCAAwC;EAE5C,CAAC;EACD/0K,GAAG,EAAE;IACH+0K,KAAK,EAAE,CACL,iBAAiB,EACjB,yBAAyB,EACzB,qEAAqE,CACtE;IACDe,SAAS,EAAEX;EACb,CAAC;EACDl1K,GAAG,EAAE;IACH80K,KAAK,EAAE,CACL,yBAAyB,EACzB,8BAA8B,EAC9B,qEAAqE,CACtE;IACDe,SAAS,EAAEX;EACb,CAAC;EACDY,QAAQ,EAAE;IACRhB,KAAK,EAAE,CACL,UAAU,EACV,iCAAiC;EAErC,CAAC;EACDiB,WAAW,EAAE;IACXjB,KAAK,EAAE,CACL,aAAa,EACb,qCAAqC;EAEzC,CAAC;EACDkB,SAAS,EAAE;IACTlB,KAAK,EAAE,CACL,WAAW,EACX,wCAAwC;EAE5C,CAAC;EACD5hJ,MAAM,EAAE;IACN4hJ,KAAK,EAAE,CACL,mBAAmB,EACnB,wDAAwD,CACzD;IACDmB,MAAM,EAAE;MACNnB,KAAK,EAAE,CACL,SAAS,EACT,MAAM,EACN,OAAO,EACP,OAAO;IAEX;EACF,CAAC;EACDn7I,IAAI,EAAE;IACJm7I,KAAK,EAAE,CACL,kBAAkB,EAClB,uFAAuF,EACvF,4DAA4D,EAC5D,0EAA0E;EAE9E,CAAC;EACDvzK,IAAI,EAAE;IACJuzK,KAAK,EAAE,CACL,uBAAuB,EACvB,oEAAoE,CACrE;IACDoB,YAAY,EAAE;MACZpB,KAAK,EAAE,CACL,0CAA0C;IAE9C;EACF,CAAC;EACDjzK,MAAM,EAAE;IACNizK,KAAK,EAAE,CACL,qDAAqD,EACrD,cAAc;EAElB,CAAC;EACDpzK,KAAK,EAAE;IACLozK,KAAK,EAAE,CACL,eAAe,EACf,aAAa;EAEjB,CAAC;EACDj0K,MAAM,EAAE;IACNi0K,KAAK,EAAE,CACL,+CAA+C,EAC/C,wDAAwD,EACxD,2DAA2D,EAC3D,gDAAgD;EAEpD,CAAC;EACD3zK,MAAM,EAAE;IACN2zK,KAAK,EAAE,CACL,2DAA2D,EAC3D,6BAA6B,EAC7B,8BAA8B,EAC9B,kDAAkD,EAClD,kCAAkC;EAEtC,CAAC;EACD1vJ,GAAG,EAAE;IACH0vJ,KAAK,EAAE,CACL,eAAe,EACf,0BAA0B,EAC1B,gDAAgD,EAChD,4CAA4C;EAEhD,CAAC;EACD7E,UAAU,EAAE;IACV6E,KAAK,EAAE,CACL,iCAAiC,EACjC,gCAAgC,EAChC,+BAA+B,EAC/B,0DAA0D;EAE9D,CAAC;EACDvtK,IAAI,EAAE;IACJutK,KAAK,EAAE,CACL,iEAAiE,EACjE,8CAA8C;EAElD,CAAC;EACDqB,SAAS,EAAE;IACTrB,KAAK,EAAE,CACL,gBAAgB,EAChB,kFAAkF;EAEtF,CAAC;EACDsB,OAAO,EAAE;IACPtB,KAAK,EAAE,CACL,SAAS,EACT,gDAAgD;EAEpD;AACF,CAAC;AAED,kDAAen1K,IAAI;;ACndI;AACG;AACkC;AAClB;AACN;AACR;AAE5B,MAAM;EACJo+E,IAAI,EAAE;IAAErrC,SAASA,oBAAAA;EAAC,CAAC;EACnB/kB,KAAK;EACL0D,QAAQ;EACRyI,SAAS;EACTygF,QAAQ;EACRt0G,OAAO;EACPvD,QAAQA,mBAAAA;AACV,CAAC,GAAG44J,QAAI;AAER,SAASgY,IAAIA,CAAA,EAAG,CAChB;AAEA,MAAMiD,IAAI,GAAI,YAAY;EACxB,MAAMrlK,GAAG,GAAG,IAAIoiK,IAAI,CAAC,CAAC;EACtB,OAAO,YAAY;IACjB,OAAOpiK,GAAG;EACZ,CAAC;AACH,CAAC,CAAC,CAAE;AAEJ,MAAMslK,iBAAiB,CAAC;EACtBvpK,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACwpK,iBAAiB,GAAG,CAAC,CAAC;IAC3B,IAAI,CAACC,gBAAgB,GAAG,CAAC,CAAC;EAC5B;EAEA32K,GAAGA,CAAC42K,KAAK,EAAE;IACT,OAAO,IAAI,CAACF,iBAAiB,CAACE,KAAK,CAAC,IAAI,IAAI,CAACD,gBAAgB,CAACC,KAAK,CAAC,IAAI,WAAW;EACrF;EAEA7zK,GAAGA,CAAC6zK,KAAK,EAAE/sK,KAAK,EAAE;IAChB,IAAI+sK,KAAK,KAAK,CAAC,CAAC,EAAE;MAChB,OAAO,iDAAiD;IAC1D;IAEA,IAAI/sK,KAAK,KAAKwU,SAAS,EAAE;MACvB,IAAI,CAAC,IAAI,CAACq4J,iBAAiB,CAAC9wK,cAAc,CAACgxK,KAAK,CAAC,EAAE;QACjD,IAAI,CAACF,iBAAiB,CAACE,KAAK,CAAC/2K,QAAQ,CAAC,CAAC,CAAC,GAAGgK,KAAK;QAChD,IAAI,CAAC8sK,gBAAgB,CAAC9sK,KAAK,CAAC,GAAG+sK,KAAK,CAAC/2K,QAAQ,CAAC,CAAC;MACjD,CAAC,MAAM;QACL,OAAO,wDAAwD;MACjE;IACF;IACA,OAAO,kBAAkB+2K,KAAK,qBAAqB;EACrD;EAEAp2K,MAAMA,CAACqJ,KAAK,EAAE;IACZ,IAAIA,KAAK,IAAI,IAAI,CAAC8sK,gBAAgB,CAAC/wK,cAAc,CAACiE,KAAK,CAAC,EAAE;MACxD,OAAO,IAAI,CAAC6sK,iBAAiB,CAAC,IAAI,CAACC,gBAAgB,CAAC9sK,KAAK,CAAC,CAAC;MAC3D,OAAO,IAAI,CAAC8sK,gBAAgB,CAAC9sK,KAAK,CAAC;IACrC;IAEA,MAAMgtK,UAAU,GAAGpzK,MAAM,CAACiQ,IAAI,CAAC,IAAI,CAACijK,gBAAgB,CAAC,CAACpkK,IAAI,CAAC,CAAC;IAC5D,KAAK,MAAM3Q,CAAC,IAAIi1K,UAAU,EAAE;MAC1B,IAAIA,UAAU,CAACjxK,cAAc,CAAChE,CAAC,CAAC,EAAE;QAChC,MAAMmf,EAAE,GAAG81J,UAAU,CAACj1K,CAAC,CAAC;QACxB,IAAImf,EAAE,GAAGlX,KAAK,EAAE;UACd,IAAI,CAAC8sK,gBAAgB,CAAC51J,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC41J,gBAAgB,CAAC51J,EAAE,CAAC;UACzD,IAAI,CAAC21J,iBAAiB,CAAC,IAAI,CAACC,gBAAgB,CAAC51J,EAAE,CAAC,CAAC,IAAI,CAAC;UACtD,OAAO,IAAI,CAAC41J,gBAAgB,CAAC51J,EAAE,CAAC;QAClC;MACF;IACF;EACF;EAEAje,KAAKA,CAAA,EAAG;IACN,IAAI,CAAC4zK,iBAAiB,GAAG,CAAC,CAAC;IAC3B,IAAI,CAACC,gBAAgB,GAAG,CAAC,CAAC;EAC5B;AACF;AAEA,MAAMG,sBAAsB,GAAG,IAAIL,iBAAiB,CAAC,CAAC;AAEtD,SAAS9yK,QAAQA,CAACJ,GAAG,EAAE;EACrB,MAAMmQ,IAAI,GAAG;IACXzC,CAAC,EAAE,UAAU;IACbtB,CAAC,EAAE,MAAM;IACTpG,CAAC,EAAE,SAAS;IACZuwB,EAAE,EAAE,UAAU;IACd72B,IAAI,EAAE,OAAO;IACb0Z,KAAK,EAAE,UAAU;IACjBxZ,OAAO,EAAE,UAAU;IACnBrC,MAAM,EAAE,UAAU;IAClBQ,QAAQ,EAAE,WAAW;IACrBH,QAAQ,EAAE;EACZ,CAAC;EACD,MAAM2lG,GAAG,GAAGpzF,IAAI,CAACnQ,GAAG,CAAC;EACrB,OAAOujG,GAAG,KAAKzoF,SAAS,GAAG9a,GAAG,GAAGujG,GAAG;AACtC;AAEA,MAAMiwE,QAAQ,CAAC;EACbp2K,IAAIA,CAACvB,IAAI,EAAE43K,MAAM,EAAEzzK,GAAG,EAAE;IACtB,IAAIg2H,GAAG,GAAG,EAAE;IACZ,IAAIn6H,IAAI,IAAI43K,MAAM,KAAK34J,SAAS,EAAE;MAChC,IAAI9a,GAAG,KAAK8a,SAAS,IAAI9a,GAAG,KAAK,IAAI,EAAE;QACrC,MAAMyO,KAAK,GAAG5S,IAAI,CAACyjH,QAAQ,CAAC,CAAC;QAE7B,KAAK,IAAIjhH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGoQ,KAAK,EAAEpQ,CAAC,EAAE,EAAE;UAC9B23H,GAAG,IAAI,IAAI,CAAC74H,OAAO,CAACtB,IAAI,EAAE43K,MAAM,EAAEp1K,CAAC,EAAE2B,GAAG,CAAC;QAC3C;MACF;IACF;IACA,OAAOg2H,GAAG;EACZ;EAEA74H,OAAOA,CAACtB,IAAI,EAAE43K,MAAM,EAAEv/I,QAAQ,EAAEl0B,GAAG,EAAE;IACnC,IAAIg2H,GAAG,GAAG,EAAE;IACZ,MAAMt4H,GAAG,GAAG7B,IAAI,CAAC4jH,MAAM,CAACvrF,QAAQ,CAAC;IACjC,IAAI,CAACx2B,GAAG,EAAE;MACRyjB,MAAM,CAACjB,IAAI,CAAC,OAAOgU,QAAQ,kBAAkB,CAAC;MAC9C,OAAO8hG,GAAG;IACZ;IACA,MAAM1vH,KAAK,GAAG4tB,QAAQ;IACtB,MAAMw/I,OAAO,GAAGD,MAAM,CAACh3K,GAAG,CAAC6J,KAAK,CAAC;IAEjC,MAAM;MAAE5G,IAAI;MAAEE;IAAQ,CAAC,GAAGlC,GAAG;IAC7B,MAAMi2K,YAAY,GAAGj2K,GAAG,CAAC88G,cAAc;IACvC,MAAMz8G,QAAQ,GAAGL,GAAG,CAAC+8G,cAAc;IAEnCub,GAAG,IAAI,IAAI1vH,KAAK,MAAM5G,IAAI,CAAC8kB,IAAI,GAAGkvJ,OAAO,KAAK,WAAW,GAAG,EAAE,GAAG,KAAKA,OAAO,EAAE,IAAI;IAEnF,IAAI1zK,GAAG,KAAK8a,SAAS,EAAE;MACrBk7G,GAAG,IAAI,oBAAoB29C,YAAY,KAAK;MAC5C39C,GAAG,IAAI,oBAAoBt2H,IAAI,CAAC8d,EAAE,MAAM9d,IAAI,CAAC8kB,IAAI,IAAI;MACrDwxG,GAAG,IAAI,oBAAoBp2H,OAAO,CAAC4d,EAAE,MAAM5d,OAAO,CAAC4kB,IAAI,IAAI;MAC3DwxG,GAAG,IAAI,oBAAoBj4H,QAAQ,CAACyf,EAAE,MAAMzf,QAAQ,CAACymB,IAAI,IAAI;IAC/D;IAEA,OAAOwxG,GAAG;EACZ;EAEA34H,YAAYA,CAACxB,IAAI,EAAEqjB,OAAO,EAAE;IAC1B,IAAI82G,GAAG,GAAG,EAAE;IAEZ,KAAK,MAAM7/H,CAAC,IAAI+oB,OAAO,EAAE;MACvB,IAAIA,OAAO,CAAC7c,cAAc,CAAClM,CAAC,CAAC,EAAE;QAC7B6/H,GAAG,IAAI,GAAG7/H,CAAC,OAAO+oB,OAAO,CAAC/oB,CAAC,CAAC,KAAK;MACnC;IACF;IAEA,OAAO6/H,GAAG;EACZ;EAEA/2H,QAAQA,CAACpD,IAAI,EAAE;IACb,MAAM0yK,IAAI,GAAG1yK,IAAI,CAAC25B,QAAQ;IAE1B,IAAI,CAAC+4I,IAAI,IAAI,CAAC5uK,KAAK,CAACsQ,OAAO,CAACs+J,IAAI,CAAC,IAAIA,IAAI,CAACj4K,MAAM,KAAK,CAAC,EAAE;MACtD,OAAO,mCAAmC;IAC5C;IAEA,MAAMs9K,OAAO,GAAG,EAAE;IAClB,KAAK,IAAIv1K,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAGiwK,IAAI,CAACj4K,MAAM,EAAE+H,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;MAC3Cu1K,OAAO,CAACv1K,CAAC,CAAC,GAAG,GAAGA,CAAC,KAAKkwK,IAAI,CAAClwK,CAAC,CAAC,CAAC/B,QAAQ,CAAC,CAAC,EAAE;IAC5C;IAEA,OAAOs3K,OAAO,CAAC9vK,IAAI,CAAC,IAAI,CAAC;EAC3B;EAEA+vK,WAAWA,CAACC,QAAQ,EAAE;IACpB,IAAIA,QAAQ,YAAYn0K,KAAK,EAAE;MAC7B,OAAOm0K,QAAQ,CAAChwK,IAAI,CAAC,IAAI,CAAC;IAC5B;IACA,OAAOgwK,QAAQ;EACjB;EAEAz3K,IAAIA,CAAC22B,IAAI,EAAE;IACT,IAAInzB,6FAAa,CAACmzB,IAAI,CAAC,EAAE;MACvB,OAAO,GAAG,IAAI,CAAC6gJ,WAAW,CAACb,WAAO,CAACxB,KAAK,CAAC,KAAK3xK,uFAAO,CAACA,wFAAQ,CAACA,sFAAM,CAACmzK,WAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAClvK,IAAI,CAAC,IAAI,CAAC,IAAI;IACpG;IAEA,MAAMkwK,QAAQ,GAAGn0K,qFAAK,CAACmzK,WAAO,EAAEhgJ,IAAI,CAAC;IACrC,OAAOnzB,6FAAa,CAACm0K,QAAQ,CAAC,GAAG,IAAI,CAAC33K,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,CAACw3K,WAAW,CAACG,QAAQ,CAACxC,KAAK,CAAC,IAAI;EACxF;EAEAlyK,IAAIA,CAACzD,IAAI,EAAEo6B,GAAG,EAAE;IACd,IAAIp6B,IAAI,KAAKif,SAAS,IAAImb,GAAG,KAAKnb,SAAS,IAAImb,GAAG,KAAK,IAAI,EAAE;MAC3D;IACF;IACAp6B,IAAI,CAACo4K,wBAAwB,CAAC,CAAC;IAC/B,MAAMhiC,MAAM,GAAGA,CAAA,KAAMp2I,IAAI,CAACq4K,0BAA0B,CAAC,CAAC;IACtDr4K,IAAI,CAACyD,IAAI,CAAC22B,GAAG,CAAC,CAACg+H,IAAI,CAAChiB,MAAM,EAAEA,MAAM,CAAC;EACrC;EAEAz0I,QAAQA,CAACwC,GAAG,EAAEi2B,GAAG,EAAEk+I,UAAU,EAAE;IAC7B,IAAIn0K,GAAG,KAAK8a,SAAS,IAAImb,GAAG,KAAKnb,SAAS,EAAE;MAC1C,IAAI1a,QAAQ,CAACJ,GAAG,CAAC,KAAK,UAAU,EAAE;QAChC,MAAM0jB,GAAG,GAAG0rB,kBAAS,CAACzuC,KAAK,CAACs1B,GAAG,CAAC;QAEhC,IAAIvS,GAAG,CAACviB,KAAK,KAAK2Z,SAAS,EAAE;UAC3B,MAAMs5J,MAAM,GAAG;YAAEtzJ,OAAO,EAAE4C,GAAG,CAACviB;UAAM,CAAC;UACrC,MAAMizK,MAAM;QACd;QAEA,IAAID,UAAU,KAAKr5J,SAAS,IAAIq5J,UAAU,EAAE;UAC1C,OAAOzwJ,GAAG,CAAC9lB,QAAQ;QACrB;QACA,OAAOq4B,GAAG;MACZ;MAEA,MAAMo+I,YAAY,GAAG;QACnBtmJ,QAAQ;QACR1D,KAAK;QACLmM,SAASA,oBAAAA;MACX,CAAC;MAED,IAAI89I,WAAW,GAAGt0K,GAAG;MACrB,IAAI+wG,IAAI;MACR,OAAOujE,WAAW,KAAKvjE,IAAI,EAAE;QAC3BA,IAAI,GAAGujE,WAAW;QAClBA,WAAW,GAAGl0K,QAAQ,CAAC2wG,IAAI,CAAC;MAC9B;MAEA,IAAIsjE,YAAY,CAACC,WAAW,CAAC,CAAC73K,GAAG,CAACw5B,GAAG,CAAC,KAAKnb,SAAS,EAAE;QACpD,MAAMu0B,GAAG,GAAG;UAAEvuB,OAAO,EAAE,GAAGmV,GAAG,sBAAsBq+I,WAAW;QAAG,CAAC;QAClE,MAAMjlI,GAAG;MACX;MACA,OAAOpZ,GAAG;IACZ;IACA,OAAOg9I,IAAI;EACb;EAEAz2K,aAAaA,CAACw2B,IAAI,EAAEiD,GAAG,EAAE;IACvB,IAAIjD,IAAI,KAAKlY,SAAS,EAAE;MACtB,IAAIy5J,MAAM,GAAG,CAAC,CAAC;MACf,MAAMp+I,OAAO,GAAGxzB,gBAAO,CAACyxB,QAAQ,CAAC,OAAOv0B,qFAAK,CAACT,iBAAQ,CAAC4Z,QAAQ,EAAEga,IAAI,CAAC,CAAC;MACvE,IAAImD,OAAO,KAAKrb,SAAS,EAAE;QACzB,MAAM05J,OAAO,GAAG;UAAE1zJ,OAAO,EAAE,GAAGkS,IAAI;QAAkB,CAAC;QACrD,MAAMwhJ,OAAO;MACf;MAEA,IAAI,CAACxhJ,IAAI,CAACyhJ,QAAQ,CAAC,QAAQ,CAAC,IAAIzhJ,IAAI,CAACyhJ,QAAQ,CAAC,YAAY,CAAC,IACtDzhJ,IAAI,CAACyhJ,QAAQ,CAAC,YAAY,CAAC,KAAK,OAAOx+I,GAAG,KAAK,QAAQ,EAAE;QAC5DA,GAAG,GAAGghF,iBAAQ,CAACx6G,GAAG,CAAC2C,iBAAQ,CAAC2d,GAAG,CAACyS,OAAO,CAAC,CAAC+gF,aAAa,CAACt6E,GAAG,CAAC;MAC7D;MAEA,IAAIjD,IAAI,CAACyhJ,QAAQ,CAAC,KAAK,CAAC,IAAIzhJ,IAAI,CAACyhJ,QAAQ,CAAC,KAAK,CAAC,EAAE;QAChD,IAAI,OAAOx+I,GAAG,KAAK,QAAQ,EAAE;UAC3B,MAAMh2B,GAAG,GAAGg3G,iBAAQ,CAACx6G,GAAG,CAAC2C,iBAAQ,CAAC2d,GAAG,CAACyS,OAAO,CAAC,CAAC+gF,aAAa,CAACt6E,GAAG,EAAE,IAAI,CAAC;UACvE,IAAIh2B,GAAG,KAAK6a,SAAS,EAAE;YACrBmb,GAAG,GAAG,KAAKh2B,GAAG,CAAC3D,QAAQ,CAAC,EAAE,CAAC,EAAE;UAC/B;QACF,CAAC,MAAM;UACL25B,GAAG,GAAG,KAAKA,GAAG,CAAC35B,QAAQ,CAAC,EAAE,CAAC,EAAE;QAC/B;MACF;MAEA,IAAI02B,IAAI,CAACyhJ,QAAQ,CAAC,WAAW,CAAC,EAAE;QAC9Bx+I,GAAG,GAAGA,GAAG,CAACrwB,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;MAClC;MAEA,IAAIqwB,GAAG,KAAKnb,SAAS,IAAIqb,OAAO,CAACF,GAAG,CAAC,KAAKA,GAAG,IAAIE,OAAO,CAACF,GAAG,CAAC,KAAMA,GAAG,GAAG,CAAE,EAAE;QAC3Es+I,MAAM,GAAG;UAAEzzJ,OAAO,EAAE,GAAGkS,IAAI,eAAe,OAAOnzB,qFAAK,CAACT,iBAAQ,CAAC4Z,QAAQ,EAAEga,IAAI,CAAC;QAAI,CAAC;QACpF,MAAMuhJ,MAAM;MACd;IACF;IACA,OAAOt+I,GAAG;EACZ;EAEA3uB,aAAaA,CAACwX,KAAK,EAAE;IACnB,OAAO1iB,KAAK,CAACkL,aAAa,CAACwX,KAAK,CAAC;EACnC;AACF;AACA;;AAEA,MAAM41J,aAAa,GAAG,IAAIlB,QAAQ,CAAC,CAAC;AAEpC,SAASzzK,gBAAgBA,CAACsD,CAAC,EAAE6N,CAAC,EAAE;EAC9B,MAAMtD,GAAG,GAAG,CAAC,CAAC;EACdA,GAAG,CAACvK,CAAC,CAAC,GAAG6N,CAAC;EACV,OAAOtD,GAAG;AACZ;AAEA,SAAStN,OAAOA,CAAC21B,GAAG,EAAE;EACpB,IAAIA,GAAG,YAAY,IAAI,CAACtsB,WAAW,EAAE;IACnC,OAAOssB,GAAG;EACZ;EACA,IAAIA,GAAG,YAAYt2B,KAAK,EAAE;IACxB,IAAI,CAAC+sC,OAAO,GAAGzW,GAAG,CAACl0B,KAAK,CAAC,CAAC,CAAC;EAC7B,CAAC,MAAM,IAAIk0B,GAAG,EAAE;IACd,IAAI,CAACyW,OAAO,GAAG,CAACzW,GAAG,CAAC;EACtB,CAAC,MAAM;IACL,IAAI,CAACyW,OAAO,GAAG,EAAE;EACnB;AACF;AAEApsC,OAAO,CAAC8B,SAAS,CAAC7B,MAAM,GAAG,UAAUue,KAAK,EAAE;EAC1C,MAAMY,MAAM,GAAG,IAAI,CAACgtB,OAAO;EAC3BhtB,MAAM,CAACA,MAAM,CAACppB,MAAM,CAAC,GAAGwoB,KAAK;EAC7B,OAAO,IAAI;AACb,CAAC;AAEDxe,OAAO,CAAC8B,SAAS,CAACnF,MAAM,GAAG,UAAU6hB,KAAK,EAAE;EAC1C,MAAMY,MAAM,GAAG,IAAI,CAACgtB,OAAO;EAC3B,MAAMpmC,KAAK,GAAGoZ,MAAM,CAAClL,OAAO,CAACsK,KAAK,CAAC;EACnC,IAAIxY,KAAK,IAAI,CAAC,EAAE;IACdoZ,MAAM,CAACitB,MAAM,CAACrmC,KAAK,EAAE,CAAC,CAAC;EACzB;EACA,OAAO,IAAI;AACb,CAAC;AAEDhG,OAAO,CAAC8B,SAAS,CAACpD,KAAK,GAAG,UAAU21K,QAAQ,EAAEC,GAAG,EAAE3+I,GAAG,EAAE;EACtD,MAAMvS,GAAG,GAAG,CAAC,CAAC;EAEd,MAAMtmB,IAAI,GAAG,IAAI,CAACsvC,OAAO;EACzB,KAAK,IAAIruC,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAGlB,IAAI,CAAC9G,MAAM,EAAE+H,CAAC,GAAGC,CAAC,EAAE,EAAED,CAAC,EAAE;IAC3CwB,qFAAK,CAAC6jB,GAAG,EAAEtmB,IAAI,CAACiB,CAAC,CAAC,CAACmf,EAAE,EAAEm3J,QAAQ,CAACn4K,aAAa,CAAC,GAAG4D,QAAQ,CAACw0K,GAAG,CAAC,IAAI3+I,GAAG,IAAI74B,IAAI,CAACiB,CAAC,CAAC,CAACmf,EAAE,EAAE,EAAEpgB,IAAI,CAACiB,CAAC,CAAC,CAAC4B,GAAG,CAAC,CAAC;EACtG;EAEA,OAAOyjB,GAAG;AACZ,CAAC;AAED,SAASljB,GAAGA,CAACirC,GAAG,EAAEopI,IAAI,EAAE;EACtB,IAAI,CAACr3J,EAAE,GAAGiuB,GAAG;EACb,IAAI,CAACxrC,GAAG,GAAG40K,IAAI;AACjB;AAEA,MAAMC,QAAQ,GAAG50K,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC;AAElC20K,QAAQ,CAACt0K,GAAG,GAAGA,GAAG;AAClBs0K,QAAQ,CAACx0K,OAAO,GAAGA,OAAO;AAE1Bw0K,QAAQ,CAACj5K,IAAI,GAAG,IAAI;AACpBi5K,QAAQ,CAAC34K,IAAI,GAAG,IAAI;AACpB24K,QAAQ,CAAC93K,eAAe,GAAGu2K,sBAAsB;AACjDuB,QAAQ,CAAC14K,KAAK,GAAGs4K,aAAa;AAE9BI,QAAQ,CAACj1K,CAAC,GAAGA,mFAAC;AACdi1K,QAAQ,CAAC/0K,gBAAgB,GAAGA,gBAAgB;AAC5C+0K,QAAQ,CAAC10K,QAAQ,GAAGA,QAAQ;AAC5B00K,QAAQ,CAACx3K,OAAO,GAAG8xC,kBAAS,CAAC9xC,OAAO;AACpCw3K,QAAQ,CAAC/4K,YAAY,GAAGqzC,kBAAS,CAACrzC,YAAY;AAE9C+4K,QAAQ,CAAC7B,IAAI,GAAGA,IAAI;AAEpB6B,QAAQ,CAACC,cAAc,GAAG,YAAY;EACpC,OAAO,IAAI,CAAC9B,IAAI;AAClB,CAAC;AAEDjb,QAAI,CAAC51J,SAAS,CAAC4yK,MAAM,GAAG,UAAUA,MAAM,EAAEC,cAAc,EAAEC,cAAc,EAAE;EACxEnC,oBAAS,CAACh4K,EAAE,CAACc,IAAI,GAAG,IAAI;EACxBk3K,oBAAS,CAACh4K,EAAE,CAACoB,IAAI,GAAG84K,cAAc;EAClClC,oBAAS,CAACh4K,EAAE,CAACoG,KAAK,GAAG+zK,cAAc;EACnC,IAAI,IAAI,CAACC,QAAQ,KAAKr6J,SAAS,EAAE;IAC/B,IAAI,CAACq6J,QAAQ,GAAG,EAAE;EACpB;EAEA,IAAI,IAAI,CAACC,eAAe,KAAKt6J,SAAS,EAAE;IACtC,IAAI,CAACs6J,eAAe,GAAG,KAAK;EAC9B;EAEA,IAAI,CAACD,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAAC90K,MAAM,CAAC20K,MAAM,CAAC7vK,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED6yJ,QAAI,CAAC51J,SAAS,CAAC6xK,wBAAwB,GAAG,YAAY;EACpD,IAAI,CAACmB,eAAe,GAAG,IAAI;AAC7B,CAAC;AAEDpd,QAAI,CAAC51J,SAAS,CAAC8xK,0BAA0B,GAAG,YAAY;EACtD,IAAI,CAACkB,eAAe,GAAG,KAAK;AAC9B,CAAC;AAEDpd,QAAI,CAAC51J,SAAS,CAAC6+J,2BAA2B,GAAG,YAAY;EACvD,OAAO,IAAI,CAACmU,eAAe,KAAKt6J,SAAS,IAC/B,CAAC,IAAI,CAACs6J,eAAe,IACrB,IAAI,CAACD,QAAQ,KAAKr6J,SAAS,IAC3B,IAAI,CAACq6J,QAAQ,CAAC7+K,MAAM,GAAG,CAAC;AACpC,CAAC;AAED0hK,QAAI,CAAC51J,SAAS,CAAC8+J,WAAW,GAAG,YAAY;EACvC,IAAI,IAAI,CAACD,2BAA2B,CAAC,CAAC,EAAE;IACtC,MAAM2T,GAAG,GAAG,IAAI,CAACO,QAAQ,CAACjxE,KAAK,CAAC,CAAC;IAEjC,MAAMxgF,GAAG,GAAG,CAAC,CAAC;IACdA,GAAG,CAAC2tI,OAAO,GAAG,KAAK;IACnB,IAAI;MACF0hB,oBAAS,CAACpyK,KAAK,CAACi0K,GAAG,CAAC;MACpBlxJ,GAAG,CAAC2tI,OAAO,GAAG,IAAI;IACpB,CAAC,CAAC,OAAOjiJ,CAAC,EAAE;MACVsU,GAAG,CAACviB,KAAK,GAAGiO,CAAC,CAAC0R,OAAO;MACrBiyJ,oBAAS,CAACh4K,EAAE,CAACoG,KAAK,CAACuiB,GAAG,CAACviB,KAAK,CAAC;MAC7B,IAAI,CAAC+yK,0BAA0B,CAAC,CAAC;IACnC;IACA,OAAOxwJ,GAAG;EACZ;EACA,OAAO,EAAE;AACX,CAAC;AAEDqvJ,oBAAS,CAACh4K,EAAE,GAAG+5K,QAAQ;AACvB;AACA/B,oBAAS,CAACh4K,EAAE,CAACgG,UAAU,GAAGgyK,oBAAS,CAAChyK,UAAU;;AC5YpB;AACN;AAEpB,0CAAei3J,QAAI","sources":["webpack://Miew/webpack/universalModuleDefinition","webpack://Miew/./src/utils/MiewCLIParser.js","webpack://Miew/./src/utils/SelectionParser.js","webpack://Miew/./vendor/js/Smooth.js","webpack://Miew/./vendor/js/mmtf.js","webpack://Miew/external umd {\"module\":\"lodash\",\"commonjs\":\"lodash\",\"commonjs2\":\"lodash\",\"amd\":\"lodash\",\"root\":\"_\"}","webpack://Miew/external umd {\"module\":\"three\",\"commonjs\":\"three\",\"commonjs2\":\"three\",\"amd\":\"three\",\"root\":\"THREE\"}","webpack://Miew/webpack/bootstrap","webpack://Miew/webpack/runtime/compat get default export","webpack://Miew/webpack/runtime/define property getters","webpack://Miew/webpack/runtime/hasOwnProperty shorthand","webpack://Miew/../../node_modules/spin.js/spin.js","webpack://Miew/./src/Timer.js","webpack://Miew/./src/gfx/Stats.js","webpack://Miew/./src/utils/EventDispatcher.js","webpack://Miew/./src/utils/logger.js","webpack://Miew/./src/utils.js","webpack://Miew/./src/utils/JobHandle.js","webpack://Miew/./src/settings.js","webpack://Miew/./src/options.js","webpack://Miew/./src/chem/Atom.js","webpack://Miew/./src/chem/Element.js","webpack://Miew/./src/chem/Bond.js","webpack://Miew/./src/chem/Residue.js","webpack://Miew/./src/chem/ResidueType.js","webpack://Miew/./src/chem/Chain.js","webpack://Miew/./src/chem/StructuralElement.js","webpack://Miew/./src/chem/Helix.js","webpack://Miew/./src/chem/Strand.js","webpack://Miew/./src/chem/Sheet.js","webpack://Miew/./src/chem/SGroup.js","webpack://Miew/./src/chem/selectors/selectArgs.js","webpack://Miew/./src/chem/selectors/selectorsBase.js","webpack://Miew/./src/chem/selectors/selectOps.js","webpack://Miew/./src/chem/selectors.js","webpack://Miew/./src/chem/BiologicalUnit.js","webpack://Miew/./src/chem/Assembly.js","webpack://Miew/./src/chem/Component.js","webpack://Miew/./src/chem/AtomPairs.js","webpack://Miew/./src/chem/AutoBond.js","webpack://Miew/./src/chem/AromaticLoopsMarker.js","webpack://Miew/./src/chem/VoxelWorld.js","webpack://Miew/./src/chem/HBondInfo.js","webpack://Miew/./src/chem/SecondaryStructureMap.js","webpack://Miew/./src/chem/Complex.js","webpack://Miew/./src/chem/Volume.js","webpack://Miew/./src/chem/Molecule.js","webpack://Miew/./src/chem.js","webpack://Miew/./src/gfx/CSS2DObject.js","webpack://Miew/./src/gfx/RCGroup.js","webpack://Miew/./src/gfx/gfxutils.js","webpack://Miew/./src/Visual.js","webpack://Miew/./src/utils/EntityList.js","webpack://Miew/./src/utils/makeContextDependent.js","webpack://Miew/./src/gfx/geometries/SphereCollisionGeo.js","webpack://Miew/./src/gfx/geometries/InstancedSpheresGeometry.js","webpack://Miew/./src/gfx/geometries/ChunkedObjectsGeometry.js","webpack://Miew/./src/gfx/geometries/SimpleSpheresGeometry.js","webpack://Miew/./src/gfx/geometries/Simple2CCylindersGeometry.js","webpack://Miew/./src/gfx/geometries/CylinderBufferGeometry.js","webpack://Miew/./src/gfx/geometries/Instanced2CCylindersGeometry.js","webpack://Miew/./src/gfx/geometries/ExtrudedObjectsGeometry.js","webpack://Miew/./src/gfx/geometries/ThickLinesGeometry.js","webpack://Miew/./src/gfx/geometries/LinesGeometry.js","webpack://Miew/./src/gfx/geometries/CylinderCollisionGeo.js","webpack://Miew/./src/gfx/geometries/ChunkedLinesGeometry.js","webpack://Miew/./src/gfx/geometries/TwoColorLinesGeometry.js","webpack://Miew/./src/gfx/geometries/CrossGeometry.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceMarchCube.js","webpack://Miew/./src/gfx/geometries/IsoSurface.js","webpack://Miew/./src/gfx/geometries/VolumeSurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/QuickSurfGeometry.js","webpack://Miew/./src/gfx/geometries/ContactSurface.js","webpack://Miew/./src/gfx/geometries/ContactSurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceAtomColored.js","webpack://Miew/./src/gfx/geometries/IsosurfaceBuildNormals.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceGeo.js","webpack://Miew/./src/gfx/geometries/SSIsosurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/LabelsGeometry.js","webpack://Miew/./src/gfx/geometries/geometries.js","webpack://Miew/./src/gfx/capabilities.js","webpack://Miew/./src/gfx/noiseTexture.js","webpack://Miew/./src/gfx/shaders/UberMaterial.js","webpack://Miew/./src/gfx/meshes/UberObject.js","webpack://Miew/./src/gfx/meshes/ZSpriteMesh.js","webpack://Miew/./src/gfx/meshes/ZClippedMesh.js","webpack://Miew/./src/gfx/meshes/TextMesh.js","webpack://Miew/./src/gfx/meshes/SimpleMesh.js","webpack://Miew/./src/gfx/meshes/ThickLineMesh.js","webpack://Miew/./src/gfx/meshes/InstancedMesh.js","webpack://Miew/./src/gfx/meshes/meshes.js","webpack://Miew/./src/gfx/meshes/MeshCreator.js","webpack://Miew/./src/gfx/meshes/TransformGroup.js","webpack://Miew/./src/gfx/modes/groups/ChemGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsSphereGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsSurfaceGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsSASSESGroupStub.js","webpack://Miew/./src/gfx/modes/groups/AtomsTextGroup.js","webpack://Miew/./src/gfx/modes/groups/AromaticGroup.js","webpack://Miew/./src/gfx/modes/groups/AromaticTorusGroup.js","webpack://Miew/./src/gfx/modes/groups/AromaticLinesGroup.js","webpack://Miew/./src/gfx/modes/groups/ResiduesGroup.js","webpack://Miew/./src/gfx/modes/groups/NucleicItemGroup.js","webpack://Miew/./src/gfx/modes/groups/NucleicCylindersGroup.js","webpack://Miew/./src/gfx/modes/groups/NucleicSpheresGroup.js","webpack://Miew/./src/gfx/modes/groups/CartoonHelper.js","webpack://Miew/./src/gfx/modes/groups/ResiduesSubseqGroup.js","webpack://Miew/./src/gfx/modes/groups/ResiduesTraceGroup.js","webpack://Miew/./src/gfx/modes/groups/BondsGroup.js","webpack://Miew/./src/gfx/modes/groups/BondsCylinderGroup.js","webpack://Miew/./src/gfx/modes/groups/BondsLinesGroup.js","webpack://Miew/./src/gfx/modes/groups/groups.js","webpack://Miew/./src/gfx/modes/processors/AtomsProcessor.js","webpack://Miew/./src/gfx/modes/processors/OrphanAtomsProcessor.js","webpack://Miew/./src/gfx/modes/processors/ResiduesProcessor.js","webpack://Miew/./src/gfx/modes/processors/NucleicProcessor.js","webpack://Miew/./src/gfx/modes/processors/SubseqsProcessor.js","webpack://Miew/./src/gfx/modes/processors/BondsProcessor.js","webpack://Miew/./src/gfx/modes/processors/AromaticProcessor.js","webpack://Miew/./src/gfx/modes/processors/processors.js","webpack://Miew/./src/gfx/modes/groups/GroupsFactory.js","webpack://Miew/./src/gfx/modes/Mode.js","webpack://Miew/./src/gfx/modes/LinesMode.js","webpack://Miew/./src/gfx/modes/LicoriceMode.js","webpack://Miew/./src/gfx/modes/BallsAndSticksMode.js","webpack://Miew/./src/gfx/modes/VanDerWaalsMode.js","webpack://Miew/./src/gfx/modes/TraceMode.js","webpack://Miew/./src/gfx/modes/TubeMode.js","webpack://Miew/./src/gfx/modes/CartoonMode.js","webpack://Miew/./src/gfx/modes/SurfaceMode.js","webpack://Miew/./src/gfx/modes/QuickSurfaceMode.js","webpack://Miew/./src/gfx/modes/IsoSurfaceMode.js","webpack://Miew/./src/gfx/modes/IsoSurfaceSASMode.js","webpack://Miew/./src/gfx/modes/IsoSurfaceSESMode.js","webpack://Miew/./src/gfx/modes/ContactSurfaceMode.js","webpack://Miew/./src/gfx/modes/TextMode.js","webpack://Miew/./src/gfx/modes.js","webpack://Miew/./src/gfx/palettes/Palette.js","webpack://Miew/./src/gfx/palettes/cpkPalette.js","webpack://Miew/./src/gfx/palettes/jmolPalette.js","webpack://Miew/./src/gfx/palettes/vmdPalette.js","webpack://Miew/./src/gfx/palettes.js","webpack://Miew/./src/gfx/colorers/Colorer.js","webpack://Miew/./src/gfx/colorers/ElementColorer.js","webpack://Miew/./src/gfx/colorers/ResidueTypeColorer.js","webpack://Miew/./src/gfx/colorers/SequenceColorer.js","webpack://Miew/./src/gfx/colorers/ChainColorer.js","webpack://Miew/./src/gfx/colorers/SecondaryStructureColorer.js","webpack://Miew/./src/gfx/colorers/UniformColorer.js","webpack://Miew/./src/gfx/colorers/ConditionalColorer.js","webpack://Miew/./src/gfx/colorers/ConformationColorer.js","webpack://Miew/./src/gfx/colorers/TemperatureColorer.js","webpack://Miew/./src/gfx/colorers/OccupancyColorer.js","webpack://Miew/./src/gfx/colorers/HydrophobicityColorer.js","webpack://Miew/./src/gfx/colorers/MoleculeColorer.js","webpack://Miew/./src/gfx/colorers/CarbonColorer.js","webpack://Miew/./src/gfx/colorers.js","webpack://Miew/./src/gfx/materials.js","webpack://Miew/./src/gfx/meshutils.js","webpack://Miew/./src/gfx/Representation.js","webpack://Miew/./src/ComplexVisualEdit.js","webpack://Miew/./src/ComplexVisual.js","webpack://Miew/./src/gfx/shaders/VolumeMaterial.js","webpack://Miew/./src/gfx/VolumeMesh.js","webpack://Miew/./src/gfx/VolumeBounds.js","webpack://Miew/./src/gfx/VolumeFarPlane.js","webpack://Miew/./src/VolumeVisual.js","webpack://Miew/./src/io/loaders/LoaderList.js","webpack://Miew/./src/io/loaders/Loader.js","webpack://Miew/./src/io/loaders/FileLoader.js","webpack://Miew/./src/io/loaders/XHRLoader.js","webpack://Miew/./src/io/loaders/ImmediateLoader.js","webpack://Miew/./src/io/loaders.js","webpack://Miew/./src/io/parsers/ParserList.js","webpack://Miew/./src/io/parsers/Parser.js","webpack://Miew/./src/io/parsers/pdb/Remark290.js","webpack://Miew/./src/io/parsers/pdb/Remark350.js","webpack://Miew/./src/io/parsers/PDBStream.js","webpack://Miew/./src/io/parsers/PDBParser.js","webpack://Miew/./src/io/parsers/CMLParser.js","webpack://Miew/./src/io/parsers/MMTFParser.js","webpack://Miew/./src/io/parsers/ParsingError.js","webpack://Miew/./src/io/parsers/readCIF.js","webpack://Miew/./src/io/parsers/CIFParser.js","webpack://Miew/./src/io/parsers/VolumeModel.js","webpack://Miew/./src/io/parsers/CCP4Parser.js","webpack://Miew/./src/io/parsers/XYZParser.js","webpack://Miew/./src/io/parsers/PubChemParser.js","webpack://Miew/./src/io/parsers/SDFStream.js","webpack://Miew/./src/io/parsers/SDFParser.js","webpack://Miew/./src/io/parsers/DSN6Parser.js","webpack://Miew/./src/io/parsers/GROReader.js","webpack://Miew/./src/io/parsers/GROParser.js","webpack://Miew/./src/io/parsers/MOL2Parser.js","webpack://Miew/./src/io/parsers.js","webpack://Miew/./src/io/exporters/ExporterList.js","webpack://Miew/./src/io/exporters/Exporter.js","webpack://Miew/./src/io/exporters/PDBResult.js","webpack://Miew/./src/io/exporters/PDBExporter.js","webpack://Miew/./src/io/exporters/fbx/FBXModel.js","webpack://Miew/./src/io/exporters/fbx/FBXGeometry.js","webpack://Miew/./src/io/exporters/fbx/FBX1CGeometry.js","webpack://Miew/./src/io/exporters/fbx/FBX2CCylinder.js","webpack://Miew/./src/io/exporters/fbx/FBXInfoExtractor.js","webpack://Miew/./src/io/exporters/fbx/FBXResult.js","webpack://Miew/./src/io/exporters/FBXExporter.js","webpack://Miew/./src/io/exporters.js","webpack://Miew/./src/io/io.js","webpack://Miew/./src/gfx/CSS2DRenderer.js","webpack://Miew/./src/utils/getTopWindow.js","webpack://Miew/./src/ui/ObjectControls.js","webpack://Miew/./src/ui/Picker.js","webpack://Miew/./src/gfx/Axes.js","webpack://Miew/./src/gfx/FrameInfo.js","webpack://Miew/./src/gfx/objects/SceneObject.js","webpack://Miew/./src/gfx/objects/LinesObj.js","webpack://Miew/./src/gfx/shaders/OutlineMaterial.js","webpack://Miew/./src/gfx/shaders/FXAAMaterial.js","webpack://Miew/./src/gfx/shaders/AOMaterial.js","webpack://Miew/./src/gfx/shaders/AOHorBlurMaterial.js","webpack://Miew/./src/gfx/shaders/AOVertBlurWithBlendMaterial.js","webpack://Miew/./src/gfx/shaders/AnaglyphMaterial.js","webpack://Miew/./src/gfx/ViewInterpolator.js","webpack://Miew/./src/utils/Cookies.js","webpack://Miew/./src/gfx/vr/createWebVRButton.js","webpack://Miew/./src/gfx/vr/WebVRPoC.js","webpack://Miew/./src/Miew.js","webpack://Miew/./src/utils/MiewCLIHelp.js","webpack://Miew/./src/Miew-cli.js","webpack://Miew/./src/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"lodash\"), require(\"three\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"lodash\", \"three\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Miew\"] = factory(require(\"lodash\"), require(\"three\"));\n\telse\n\t\troot[\"Miew\"] = factory(root[\"_\"], root[\"THREE\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE__535__, __WEBPACK_EXTERNAL_MODULE__698__) => {\nreturn ","/* eslint-disable */\r\n// DO NOT EDIT! Automatically generated from .jison\r\n/* parser generated by jison 0.4.18 */\r\n/*\r\n Returns a Parser object of the following structure:\r\n\r\n Parser: {\r\n yy: {}\r\n }\r\n\r\n Parser.prototype: {\r\n yy: {},\r\n trace: function(),\r\n symbols_: {associative list: name ==> number},\r\n terminals_: {associative list: number ==> name},\r\n productions_: [...],\r\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\r\n table: [...],\r\n defaultActions: {...},\r\n parseError: function(str, hash),\r\n parse: function(input),\r\n\r\n lexer: {\r\n EOF: 1,\r\n parseError: function(str, hash),\r\n setInput: function(input),\r\n input: function(),\r\n unput: function(str),\r\n more: function(),\r\n less: function(n),\r\n pastInput: function(),\r\n upcomingInput: function(),\r\n showPosition: function(),\r\n test_match: function(regex_match_array, rule_index),\r\n next: function(),\r\n lex: function(),\r\n begin: function(condition),\r\n popState: function(),\r\n _currentRules: function(),\r\n topState: function(),\r\n pushState: function(condition),\r\n\r\n options: {\r\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\r\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\r\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\r\n },\r\n\r\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\r\n rules: [...],\r\n conditions: {associative list: name ==> set},\r\n }\r\n }\r\n\r\n\r\n token location info (@$, _$, etc.): {\r\n first_line: n,\r\n last_line: n,\r\n first_column: n,\r\n last_column: n,\r\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\r\n }\r\n\r\n\r\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\r\n text: (matched text)\r\n token: (the produced terminal token, if any)\r\n line: (yylineno)\r\n }\r\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\r\n loc: (yylloc)\r\n expected: (string describing the set of expected tokens)\r\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\r\n }\r\n*/\r\nvar parser = (function(){\r\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,60],$V1=[1,62],$V2=[1,63],$V3=[1,65],$V4=[1,66],$V5=[1,67],$V6=[1,68],$V7=[1,69],$V8=[1,80],$V9=[1,72],$Va=[1,73],$Vb=[1,74],$Vc=[1,75],$Vd=[1,99],$Ve=[1,76],$Vf=[1,100],$Vg=[1,79],$Vh=[1,51],$Vi=[1,81],$Vj=[1,82],$Vk=[1,84],$Vl=[1,83],$Vm=[1,85],$Vn=[1,96],$Vo=[1,97],$Vp=[1,98],$Vq=[1,86],$Vr=[1,87],$Vs=[1,64],$Vt=[1,70],$Vu=[1,71],$Vv=[1,77],$Vw=[1,78],$Vx=[1,53],$Vy=[1,54],$Vz=[1,55],$VA=[1,61],$VB=[1,88],$VC=[1,89],$VD=[1,90],$VE=[1,91],$VF=[1,92],$VG=[1,93],$VH=[1,94],$VI=[1,95],$VJ=[1,101],$VK=[1,102],$VL=[1,103],$VM=[1,104],$VN=[1,105],$VO=[1,56],$VP=[1,57],$VQ=[1,58],$VR=[1,59],$VS=[1,115],$VT=[1,111],$VU=[1,114],$VV=[1,112],$VW=[1,113],$VX=[1,118],$VY=[1,117],$VZ=[1,134],$V_=[1,149],$V$=[1,150],$V01=[1,157],$V11=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],$V21=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,71,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],$V31=[5,6,7,9,13,15,17,18,19,20,23,25,26,27,30,33,34,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,82,83,84,85,86,87,88,89,90,91,92,93,94,95],$V41=[5,70,72],$V51=[5,74],$V61=[71,101];\r\nvar parser = {trace: function trace () { },\r\nyy: {},\r\nsymbols_: {\"error\":2,\"Program\":3,\"Command\":4,\"EOF\":5,\"RESET\":6,\"BUILD\":7,\"ALL\":8,\"HELP\":9,\"Path\":10,\"MOTM\":11,\"OneArgCommand\":12,\"GET\":13,\"STRING\":14,\"SET\":15,\"Value\":16,\"SET_SAVE\":17,\"SET_RESTORE\":18,\"SET_RESET\":19,\"PRESET\":20,\"AddRepresentation\":21,\"EditRepresentation\":22,\"REMOVE\":23,\"RepresentationReference\":24,\"HIDE\":25,\"SHOW\":26,\"LIST\":27,\"EXPAND_KEY\":28,\"SELECTOR_KEY\":29,\"SELECT\":30,\"AS\":31,\"WordAll\":32,\"SELECTOR\":33,\"WITHIN\":34,\"NUMBER\":35,\"OF\":36,\"MATERIAL\":37,\"IDENTIFIER\":38,\"ModeCMD\":39,\"ColorCMD\":40,\"VIEW\":41,\"BASE_64\":42,\"UNIT\":43,\"DSSP\":44,\"SCALE\":45,\"ROTATE\":46,\"AxesList\":47,\"TRANSLATE\":48,\"CENTER\":49,\"GetURLBranch\":50,\"Screenshot\":51,\"LINE\":52,\"ArgList\":53,\"LISTOBJ\":54,\"REMOVEOBJ\":55,\"URL\":56,\"VIEW_KEY\":57,\"SCREENSHOT\":58,\"LOAD\":59,\"Url\":60,\"FILE_KEY\":61,\"ADD\":62,\"Description\":63,\"REP\":64,\"MODE\":65,\"COLOR\":66,\"Descriptor\":67,\"RepresentationOwnProperty\":68,\"RepresentationOwnPropertyOpts\":69,\"DESC_KEY\":70,\"=\":71,\"DESC_KEY_OPTS\":72,\"AxesArg\":73,\"DESC_KEY_AXES\":74,\"Arg\":75,\"PathWoDescKey\":76,\"HEX\":77,\"BOOL\":78,\"Word\":79,\"CommandSetWoDESC_KEY\":80,\"DescKeys\":81,\"CLEAR\":82,\"FILE_LIST\":83,\"FILE_REGISTER\":84,\"FILE_DELETE\":85,\"PRESET_ADD\":86,\"PRESET_DELETE\":87,\"PRESET_UPDATE\":88,\"PRESET_RENAME\":89,\"PRESET_OPEN\":90,\"CREATE_SCENARIO\":91,\"RESET_SCENARIO\":92,\"DELETE_SCENARIO\":93,\"ADD_SCENARIO_ITEM\":94,\"LIST_SCENARIO\":95,\"PDB_KEY\":96,\"DELAY_KEY\":97,\"PRST_KEY\":98,\"DESCRIPTION_KEY\":99,\"CommandSet\":100,\".\":101,\"PresetPath\":102,\"/\":103,\"HexOrNumber\":104,\"$accept\":0,\"$end\":1},\r\nterminals_: {2:\"error\",5:\"EOF\",6:\"RESET\",7:\"BUILD\",8:\"ALL\",9:\"HELP\",11:\"MOTM\",13:\"GET\",14:\"STRING\",15:\"SET\",17:\"SET_SAVE\",18:\"SET_RESTORE\",19:\"SET_RESET\",20:\"PRESET\",23:\"REMOVE\",25:\"HIDE\",26:\"SHOW\",27:\"LIST\",28:\"EXPAND_KEY\",29:\"SELECTOR_KEY\",30:\"SELECT\",31:\"AS\",33:\"SELECTOR\",34:\"WITHIN\",35:\"NUMBER\",36:\"OF\",37:\"MATERIAL\",38:\"IDENTIFIER\",41:\"VIEW\",42:\"BASE_64\",43:\"UNIT\",44:\"DSSP\",45:\"SCALE\",46:\"ROTATE\",48:\"TRANSLATE\",49:\"CENTER\",52:\"LINE\",54:\"LISTOBJ\",55:\"REMOVEOBJ\",56:\"URL\",57:\"VIEW_KEY\",58:\"SCREENSHOT\",59:\"LOAD\",61:\"FILE_KEY\",62:\"ADD\",64:\"REP\",65:\"MODE\",66:\"COLOR\",70:\"DESC_KEY\",71:\"=\",72:\"DESC_KEY_OPTS\",74:\"DESC_KEY_AXES\",77:\"HEX\",78:\"BOOL\",82:\"CLEAR\",83:\"FILE_LIST\",84:\"FILE_REGISTER\",85:\"FILE_DELETE\",86:\"PRESET_ADD\",87:\"PRESET_DELETE\",88:\"PRESET_UPDATE\",89:\"PRESET_RENAME\",90:\"PRESET_OPEN\",91:\"CREATE_SCENARIO\",92:\"RESET_SCENARIO\",93:\"DELETE_SCENARIO\",94:\"ADD_SCENARIO_ITEM\",95:\"LIST_SCENARIO\",96:\"PDB_KEY\",97:\"DELAY_KEY\",98:\"PRST_KEY\",99:\"DESCRIPTION_KEY\",101:\".\",103:\"/\"},\r\nproductions_: [0,[3,2],[3,1],[4,1],[4,1],[4,2],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,3],[4,3],[4,1],[4,1],[4,1],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,2],[4,2],[4,1],[4,2],[4,2],[4,2],[4,4],[4,2],[4,6],[4,2],[4,1],[4,1],[4,1],[4,2],[4,2],[4,1],[4,2],[4,1],[4,2],[4,2],[4,2],[4,1],[4,2],[4,1],[4,1],[4,3],[4,3],[4,4],[4,4],[4,1],[4,2],[50,1],[50,2],[50,2],[50,3],[50,3],[51,1],[51,2],[51,3],[12,2],[12,2],[12,2],[21,1],[21,2],[21,2],[21,3],[22,2],[22,3],[39,2],[39,3],[40,2],[40,3],[24,1],[24,1],[63,1],[63,2],[63,3],[63,4],[67,1],[67,1],[67,2],[68,3],[69,3],[47,1],[47,2],[73,2],[53,1],[53,2],[75,3],[16,1],[16,1],[16,1],[16,1],[16,1],[79,1],[79,1],[32,1],[32,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[100,1],[100,1],[76,1],[76,3],[76,3],[10,1],[10,1],[10,3],[10,3],[10,3],[60,1],[102,1],[102,3],[104,1],[104,1]],\r\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\r\n/* this == yyval */\r\n\r\nvar $0 = $$.length - 1;\r\nswitch (yystate) {\r\ncase 1:\r\n return $$[$0-1]; \r\nbreak;\r\ncase 3:\r\nthis.$ = yy.miew.reset(false); yy.ClearContext(); yy.miew.resetReps(\"empty\");\r\nbreak;\r\ncase 4:\r\nthis.$ = yy.miew.rebuild();\r\nbreak;\r\ncase 5:\r\nthis.$ = yy.miew.rebuildAll(); yy.miew.rebuild();\r\nbreak;\r\ncase 6:\r\nthis.$ = yy.echo(yy.utils.help().toString());\r\nbreak;\r\ncase 7:\r\nthis.$ = yy.echo(yy.utils.help($$[$0]).toString());\r\nbreak;\r\ncase 8:\r\nthis.$ = yy.miew.motm();\r\nbreak;\r\ncase 10: case 11:\r\nthis.$ = yy.utils.propagateProp($$[$0]); yy.echo(yy.miew.get($$[$0]).toString());\r\nbreak;\r\ncase 12: case 13:\r\nthis.$ = yy.miew.set($$[$0-1], yy.utils.propagateProp($$[$0-1], $$[$0]));;\r\nbreak;\r\ncase 14:\r\nthis.$ = yy.miew.saveSettings();;\r\nbreak;\r\ncase 15:\r\nthis.$ = yy.miew.restoreSettings();;\r\nbreak;\r\ncase 16:\r\nthis.$ = yy.miew.resetSettings();;\r\nbreak;\r\ncase 17:\r\nthis.$ = yy.miew.resetReps();\r\nbreak;\r\ncase 18:\r\nthis.$ = yy.miew.applyPreset($$[$0]);\r\nbreak;\r\ncase 21:\r\nthis.$ = yy.miew.repRemove($$[$0]); yy.representations.remove($$[$0]);\r\nbreak;\r\ncase 22:\r\nthis.$ = yy.miew.repHide($$[$0]);\r\nbreak;\r\ncase 23:\r\nthis.$ = yy.miew.repHide($$[$0], false);\r\nbreak;\r\ncase 24:\r\nthis.$ = yy.echo(yy.utils.listRep(yy.miew, yy.representations, $$[$0], '-e'));\r\nbreak;\r\ncase 25:\r\nthis.$ = yy.echo(yy.utils.list(yy.miew, yy.representations));\r\nbreak;\r\ncase 26:\r\nthis.$ = yy.echo(yy.utils.list(yy.miew, yy.representations, $$[$0]));\r\nbreak;\r\ncase 27:\r\nthis.$ = yy.echo(yy.utils.listSelector(yy.miew, yy.Context));\r\nbreak;\r\ncase 28:\r\nthis.$ = yy.miew.select(yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0], true));\r\nbreak;\r\ncase 29:\r\nthis.$ = yy.Context[$$[$0].toLowerCase()] = yy.utils.checkArg($$[$0-3].toLowerCase(), $$[$0-2], true); yy.miew.select(yy.Context[$$[$0].toLowerCase()]);\r\nbreak;\r\ncase 30:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {selector : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0])});\r\nbreak;\r\ncase 31:\r\nthis.$ = yy.Context[$$[$0].toLowerCase()] = yy.miew.within(yy.utils.checkArg(\"select\", $$[$0-2], true), Number($$[$0-4]));\r\nbreak;\r\ncase 32:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {material : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 35:\r\nthis.$ = yy.echo(yy.miew.view());\r\nbreak;\r\ncase 36: case 37:\r\nthis.$ = yy.miew.view($$[$0]);\r\nbreak;\r\ncase 38:\r\nthis.$ = yy.echo(yy.miew.changeUnit());\r\nbreak;\r\ncase 39:\r\nthis.$ = yy.echo(yy.miew.changeUnit($$[$0]));\r\nbreak;\r\ncase 40:\r\nthis.$ = yy.miew.dssp();\r\nbreak;\r\ncase 41:\r\nthis.$ = yy.miew.scale($$[$0]);\r\nbreak;\r\ncase 42:\r\n for (var i = 0, n = $$[$0].length; i < n; i++) {yy.miew.rotate($$[$0][i]['x'] * Math.PI / 180.0, $$[$0][i]['y'] * Math.PI / 180.0, $$[$0][i]['z'] * Math.PI / 180.0)} \r\nbreak;\r\ncase 43:\r\n for (var i = 0, n = $$[$0].length; i < n; i++) {yy.miew.translate($$[$0][i]['x'] || 0, $$[$0][i]['y'] || 0, $$[$0][i]['z'] || 0)} \r\nbreak;\r\ncase 44:\r\nthis.$ = yy.miew.center();\r\nbreak;\r\ncase 45:\r\nthis.$ = yy.miew.center($$[$0]);\r\nbreak;\r\ncase 48: case 49:\r\nthis.$ = yy.miew.addObject({type: 'line', params: [$$[$0-1], $$[$0]]}, true);\r\nbreak;\r\ncase 50: case 51:\r\nthis.$ = yy.miew.addObject({type: 'line', params: [$$[$0-2], $$[$0-1]], opts:$$[$0].toJSO(yy.utils, 'objects', 'line')}, true);\r\nbreak;\r\ncase 52:\r\nthis.$ = yy.echo(yy.utils.listObjs(yy.miew));\r\nbreak;\r\ncase 53:\r\nthis.$ = yy.miew.removeObject($$[$0]);\r\nbreak;\r\ncase 54:\r\nthis.$ = yy.echo(yy.miew.getURL({view: false, settings: false}));\r\nbreak;\r\ncase 55:\r\nthis.$ = yy.echo(yy.miew.getURL({view: false, settings: true}));\r\nbreak;\r\ncase 56:\r\nthis.$ = yy.echo(yy.miew.getURL({view: true, settings: false}));\r\nbreak;\r\ncase 57: case 58:\r\nthis.$ = yy.echo(yy.miew.getURL({view: true, settings: true}));\r\nbreak;\r\ncase 59:\r\nthis.$ = yy.miew.screenshotSave();\r\nbreak;\r\ncase 60:\r\nthis.$ = yy.miew.screenshotSave('', Number($$[$0]));\r\nbreak;\r\ncase 61:\r\nthis.$ = yy.miew.screenshotSave('', Number($$[$0-1]), Number($$[$0]));\r\nbreak;\r\ncase 62: case 63: case 64:\r\nthis.$ = yy.utils.load(yy.miew, $$[$0]); yy.representations.clear();\r\nbreak;\r\ncase 65:\r\nthis.$ = yy.echo(yy.representations.add(yy.miew.repAdd()));\r\nbreak;\r\ncase 66:\r\nthis.$ = yy.echo(yy.representations.add($$[$0], yy.miew.repAdd()));\r\nbreak;\r\ncase 67:\r\nthis.$ = yy.echo(yy.representations.add(yy.miew.repAdd($$[$0])));\r\nbreak;\r\ncase 68:\r\nthis.$ = yy.echo(yy.representations.add($$[$0-1], yy.miew.repAdd($$[$0])));\r\nbreak;\r\ncase 69:\r\nthis.$ = yy.miew.rep($$[$0]); yy.miew.repCurrent($$[$0]);\r\nbreak;\r\ncase 70:\r\nthis.$ = yy.miew.rep($$[$0-1], $$[$0]); yy.miew.repCurrent($$[$0-1]);\r\nbreak;\r\ncase 71:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {mode : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 72:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {mode : new Array(yy.utils.checkArg($$[$0-2].toLowerCase(), $$[$0-1].toUpperCase()), $$[$0].toJSO(yy.utils, $$[$0-2], $$[$0-1].toUpperCase()))});\r\nbreak;\r\ncase 73:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {colorer : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 74:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {colorer : new Array(yy.utils.checkArg($$[$0-2].toLowerCase(), $$[$0-1].toUpperCase()), $$[$0].toJSO(yy.utils, $$[$0-2], $$[$0-1].toUpperCase()))});\r\nbreak;\r\ncase 75:\r\nthis.$ = Number(yy.representations.get($$[$0]));\r\nbreak;\r\ncase 76: case 92:\r\nthis.$ = Number($$[$0]);\r\nbreak;\r\ncase 77:\r\nthis.$ = $$[$0];\r\nbreak;\r\ncase 78:\r\nthis.$ = yy._.assign($$[$0-1], $$[$0]);\r\nbreak;\r\ncase 79:\r\nthis.$ = yy._.assign($$[$0-2], $$[$0-1], $$[$0]);\r\nbreak;\r\ncase 80:\r\nthis.$ = yy._.assign($$[$0-3], $$[$0-2], $$[$0-1], $$[$0]);\r\nbreak;\r\ncase 81: case 82:\r\nthis.$ = yy.CreateObjectPair($$[$0].key, $$[$0].val);\r\nbreak;\r\ncase 83:\r\nthis.$ = yy.CreateObjectPair($$[$0-1].key, new Array($$[$0-1].val, $$[$0].toJSO(yy.utils, $$[$0-1].key, $$[$0-1].val)));\r\nbreak;\r\ncase 84: case 85:\r\nthis.$ = Object.create({'key': yy.keyRemap($$[$0-2]), 'val': yy.utils.checkArg($$[$0-2], $$[$0])});\r\nbreak;\r\ncase 86:\r\nthis.$ = [$$[$0]];\r\nbreak;\r\ncase 87:\r\nthis.$ = $$[$0-1].concat($$[$0]);\r\nbreak;\r\ncase 88:\r\nthis.$ = yy.CreateObjectPair($$[$0-1].toLowerCase(), Number($$[$0]));\r\nbreak;\r\ncase 89:\r\nthis.$ = new yy.ArgList($$[$0]);\r\nbreak;\r\ncase 90:\r\nthis.$ = $$[$0-1].append($$[$0]);\r\nbreak;\r\ncase 91:\r\nthis.$ = new yy.Arg($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 93:\r\nthis.$ = parseInt($$[$0]);\r\nbreak;\r\ncase 94:\r\nthis.$ = JSON.parse($$[$0]);\r\nbreak;\r\ncase 95: case 96:\r\nthis.$ = String($$[$0]);\r\nbreak;\r\ncase 157: case 158: case 161: case 162: case 163:\r\nthis.$ = $$[$0-2] + $$[$0-1] + $$[$0] //cause of could be color word in path;\r\nbreak;\r\ncase 166:\r\nthis.$ = $$[$0-2] = $$[$0-2] + $$[$0-1] + $$[$0];\r\nbreak;\r\n}\r\n},\r\ntable: [{3:1,4:2,5:[1,3],6:[1,4],7:[1,5],9:[1,6],11:[1,7],12:8,13:[1,9],15:[1,10],17:[1,11],18:[1,12],19:[1,13],20:[1,14],21:15,22:16,23:[1,17],25:[1,18],26:[1,19],27:[1,20],30:[1,21],33:[1,22],34:[1,23],37:[1,24],39:25,40:26,41:[1,27],43:[1,28],44:[1,29],45:[1,30],46:[1,31],48:[1,32],49:[1,33],50:34,51:35,52:[1,36],54:[1,37],55:[1,38],56:[1,44],58:[1,45],59:[1,39],62:[1,40],64:[1,41],65:[1,42],66:[1,43]},{1:[3]},{5:[1,46]},{1:[2,2]},{5:[2,3]},{5:[2,4],8:[1,47]},{5:[2,6],6:$V0,7:$V1,9:$V2,10:48,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,8]},{5:[2,9]},{6:$V0,7:$V1,9:$V2,10:106,13:$V3,14:[1,107],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{6:$V0,7:$V1,9:$V2,10:108,13:$V3,14:[1,109],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,14]},{5:[2,15]},{5:[2,16]},{5:[2,17],14:$VS,16:110,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,19]},{5:[2,20]},{24:116,35:$VX,38:$VY},{24:119,35:$VX,38:$VY},{24:120,35:$VX,38:$VY},{5:[2,25],24:121,28:[1,122],29:[1,123],35:$VX,38:$VY},{14:[1,124]},{14:[1,125]},{35:[1,126]},{38:[1,127]},{5:[2,33]},{5:[2,34]},{5:[2,35],14:[1,128],42:[1,129]},{5:[2,38],35:[1,130]},{5:[2,40]},{35:[1,131]},{47:132,73:133,74:$VZ},{47:135,73:133,74:$VZ},{5:[2,44],14:[1,136]},{5:[2,46]},{5:[2,47]},{6:$V0,7:$V1,9:$V2,10:138,13:$V3,14:[1,137],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,52]},{35:[1,139]},{14:[1,143],38:[1,141],60:140,61:[1,142]},{5:[2,65],38:[1,144],63:145,67:146,68:147,69:148,70:$V_,72:$V$},{24:151,35:$VX,38:$VY},{38:[1,152]},{38:[1,153]},{5:[2,54],29:[1,154],57:[1,155]},{5:[2,59],35:[1,156]},{1:[2,1]},{5:[2,5]},{5:[2,7],101:$V01},o($V11,[2,159]),o($V11,[2,160]),o($V21,[2,97]),o($V21,[2,98]),o($V11,[2,147]),o($V11,[2,148]),o($V11,[2,149]),o($V11,[2,150]),o($V11,[2,151]),o($V11,[2,152]),o($V11,[2,153]),o($V21,[2,101]),o($V21,[2,102]),o($V21,[2,103]),o($V21,[2,104]),o($V21,[2,105]),o($V21,[2,106]),o($V21,[2,107]),o($V21,[2,108]),o($V21,[2,109]),o($V21,[2,110]),o($V21,[2,111]),o($V21,[2,112]),o($V21,[2,113]),o($V21,[2,114]),o($V21,[2,115]),o($V21,[2,116]),o($V21,[2,117]),o($V21,[2,118]),o($V21,[2,119]),o($V21,[2,120]),o($V21,[2,121]),o($V21,[2,122]),o($V21,[2,123]),o($V21,[2,124]),o($V21,[2,125]),o($V21,[2,126]),o($V21,[2,127]),o($V21,[2,128]),o($V21,[2,129]),o($V21,[2,130]),o($V21,[2,131]),o($V21,[2,132]),o($V21,[2,133]),o($V21,[2,134]),o($V21,[2,135]),o($V21,[2,136]),o($V21,[2,137]),o($V21,[2,138]),o($V21,[2,139]),o($V21,[2,140]),o($V21,[2,141]),o($V21,[2,142]),o($V21,[2,143]),o($V21,[2,144]),o($V21,[2,145]),o($V21,[2,146]),{5:[2,10],101:$V01},{5:[2,11]},{14:$VS,16:158,35:$VT,38:$VU,77:$VV,78:$VW,101:$V01},{14:$VS,16:159,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,18]},o($V31,[2,92]),o($V31,[2,93]),o($V31,[2,94]),o($V31,[2,95]),o($V31,[2,96]),{5:[2,21]},o($V41,[2,75]),o($V41,[2,76]),{5:[2,22]},{5:[2,23]},{5:[2,24]},{5:[2,26]},{5:[2,27]},{5:[2,28],31:[1,160]},{5:[2,30]},{36:[1,161]},{5:[2,32]},{5:[2,36]},{5:[2,37]},{5:[2,39]},{5:[2,41]},{5:[2,42],73:162,74:$VZ},o($V51,[2,86]),{35:[1,163]},{5:[2,43],73:162,74:$VZ},{5:[2,45]},{14:[1,164]},{6:$V0,7:$V1,9:$V2,10:165,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR,101:$V01},{5:[2,53]},{5:[2,62]},{5:[2,63]},{5:[2,64]},{5:[2,164]},{5:[2,66],63:166,67:146,68:147,69:148,70:$V_,72:$V$},{5:[2,67]},{5:[2,77],67:167,68:147,69:148,70:$V_,72:$V$},o($V41,[2,81]),o($V41,[2,82],{80:52,53:168,75:169,76:170,79:171,6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN}),{71:[1,172]},{71:[1,173]},{5:[2,69],63:174,67:146,68:147,69:148,70:$V_,72:$V$},{5:[2,71],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:175,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,73],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:176,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,55],57:[1,177]},{5:[2,56],29:[1,178]},{5:[2,60],35:[1,179]},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,35:[1,181],37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:180,80:52,81:182,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,12]},{5:[2,13]},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,32:183,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:184,80:52,81:185,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{14:[1,186]},o($V51,[2,87]),o($V51,[2,88]),{5:[2,48],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:187,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,49],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:188,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,101:$V01},{5:[2,68]},{5:[2,78],67:189,68:147,69:148,70:$V_,72:$V$},o($V41,[2,83],{80:52,76:170,79:171,75:190,6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN}),o($V31,[2,89]),{71:[1,191],101:[1,192]},o($V61,[2,156]),{14:$VS,16:193,35:$VT,38:$VU,77:$VV,78:$VW},{14:$VS,16:194,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,70]},{5:[2,72],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,74],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,57]},{5:[2,58]},{5:[2,61]},o($V11,[2,161]),o($V11,[2,162]),o($V11,[2,163]),{5:[2,29]},{5:[2,99]},{5:[2,100]},{31:[1,195]},{5:[2,50],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,51],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,79],67:196,68:147,69:148,70:$V_,72:$V$},o($V31,[2,90]),{14:$VS,16:197,35:$VT,38:$VU,77:$VV,78:$VW},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,35:[1,199],37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,79:198,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},o($V41,[2,84]),o($V31,[2,85]),{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,32:200,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:184,80:52,81:185,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,80]},o($V31,[2,91]),o($V61,[2,157]),o($V61,[2,158]),{5:[2,31]}],\r\ndefaultActions: {3:[2,2],4:[2,3],7:[2,8],8:[2,9],11:[2,14],12:[2,15],13:[2,16],15:[2,19],16:[2,20],25:[2,33],26:[2,34],29:[2,40],34:[2,46],35:[2,47],37:[2,52],46:[2,1],47:[2,5],107:[2,11],110:[2,18],116:[2,21],119:[2,22],120:[2,23],121:[2,24],122:[2,26],123:[2,27],125:[2,30],127:[2,32],128:[2,36],129:[2,37],130:[2,39],131:[2,41],136:[2,45],139:[2,53],140:[2,62],141:[2,63],142:[2,64],143:[2,164],145:[2,67],158:[2,12],159:[2,13],166:[2,68],174:[2,70],177:[2,57],178:[2,58],179:[2,61],183:[2,29],184:[2,99],185:[2,100],196:[2,80],200:[2,31]},\r\nparseError: function parseError (str, hash) {\r\n if (hash.recoverable) {\r\n this.trace(str);\r\n } else {\r\n var error = new Error(str);\r\n error.hash = hash;\r\n throw error;\r\n }\r\n},\r\nparse: function parse(input) {\r\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\r\n var args = lstack.slice.call(arguments, 1);\r\n var lexer = Object.create(this.lexer);\r\n var sharedState = { yy: {} };\r\n for (var k in this.yy) {\r\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\r\n sharedState.yy[k] = this.yy[k];\r\n }\r\n }\r\n lexer.setInput(input, sharedState.yy);\r\n sharedState.yy.lexer = lexer;\r\n sharedState.yy.parser = this;\r\n if (typeof lexer.yylloc == 'undefined') {\r\n lexer.yylloc = {};\r\n }\r\n var yyloc = lexer.yylloc;\r\n lstack.push(yyloc);\r\n var ranges = lexer.options && lexer.options.ranges;\r\n if (typeof sharedState.yy.parseError === 'function') {\r\n this.parseError = sharedState.yy.parseError;\r\n } else {\r\n this.parseError = Object.getPrototypeOf(this).parseError;\r\n }\r\n function popStack(n) {\r\n stack.length = stack.length - 2 * n;\r\n vstack.length = vstack.length - n;\r\n lstack.length = lstack.length - n;\r\n }\r\n function lex() {\r\n var token;\r\n token = tstack.pop() || lexer.lex() || EOF;\r\n if (typeof token !== 'number') {\r\n if (token instanceof Array) {\r\n tstack = token;\r\n token = tstack.pop();\r\n }\r\n token = self.symbols_[token] || token;\r\n }\r\n return token;\r\n }\r\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\r\n while (true) {\r\n state = stack[stack.length - 1];\r\n if (this.defaultActions[state]) {\r\n action = this.defaultActions[state];\r\n } else {\r\n if (symbol === null || typeof symbol == 'undefined') {\r\n symbol = lex();\r\n }\r\n action = table[state] && table[state][symbol];\r\n }\r\n if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n var errStr = '';\r\n expected = [];\r\n for (p in table[state]) {\r\n if (this.terminals_[p] && p > TERROR) {\r\n expected.push('\\'' + this.terminals_[p] + '\\'');\r\n }\r\n }\r\n if (lexer.showPosition) {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\r\n } else {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\r\n }\r\n this.parseError(errStr, {\r\n text: lexer.match,\r\n token: this.terminals_[symbol] || symbol,\r\n line: lexer.yylineno,\r\n loc: yyloc,\r\n expected: expected\r\n });\r\n }\r\n if (action[0] instanceof Array && action.length > 1) {\r\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\r\n }\r\n switch (action[0]) {\r\n case 1:\r\n stack.push(symbol);\r\n vstack.push(lexer.yytext);\r\n lstack.push(lexer.yylloc);\r\n stack.push(action[1]);\r\n symbol = null;\r\n if (!preErrorSymbol) {\r\n yyleng = lexer.yyleng;\r\n yytext = lexer.yytext;\r\n yylineno = lexer.yylineno;\r\n yyloc = lexer.yylloc;\r\n if (recovering > 0) {\r\n recovering--;\r\n }\r\n } else {\r\n symbol = preErrorSymbol;\r\n preErrorSymbol = null;\r\n }\r\n break;\r\n case 2:\r\n len = this.productions_[action[1]][1];\r\n yyval.$ = vstack[vstack.length - len];\r\n yyval._$ = {\r\n first_line: lstack[lstack.length - (len || 1)].first_line,\r\n last_line: lstack[lstack.length - 1].last_line,\r\n first_column: lstack[lstack.length - (len || 1)].first_column,\r\n last_column: lstack[lstack.length - 1].last_column\r\n };\r\n if (ranges) {\r\n yyval._$.range = [\r\n lstack[lstack.length - (len || 1)].range[0],\r\n lstack[lstack.length - 1].range[1]\r\n ];\r\n }\r\n r = this.performAction.apply(yyval, [\r\n yytext,\r\n yyleng,\r\n yylineno,\r\n sharedState.yy,\r\n action[1],\r\n vstack,\r\n lstack\r\n ].concat(args));\r\n if (typeof r !== 'undefined') {\r\n return r;\r\n }\r\n if (len) {\r\n stack = stack.slice(0, -1 * len * 2);\r\n vstack = vstack.slice(0, -1 * len);\r\n lstack = lstack.slice(0, -1 * len);\r\n }\r\n stack.push(this.productions_[action[1]][0]);\r\n vstack.push(yyval.$);\r\n lstack.push(yyval._$);\r\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\r\n stack.push(newState);\r\n break;\r\n case 3:\r\n return true;\r\n }\r\n }\r\n return true;\r\n}};\r\n\r\n\r\n/* generated by jison-lex 0.3.4 */\r\nvar lexer = (function(){\r\nvar lexer = ({\r\n\r\nEOF:1,\r\n\r\nparseError:function parseError(str, hash) {\r\n if (this.yy.parser) {\r\n this.yy.parser.parseError(str, hash);\r\n } else {\r\n throw new Error(str);\r\n }\r\n },\r\n\r\n// resets the lexer, sets new input\r\nsetInput:function (input, yy) {\r\n this.yy = yy || this.yy || {};\r\n this._input = input;\r\n this._more = this._backtrack = this.done = false;\r\n this.yylineno = this.yyleng = 0;\r\n this.yytext = this.matched = this.match = '';\r\n this.conditionStack = ['INITIAL'];\r\n this.yylloc = {\r\n first_line: 1,\r\n first_column: 0,\r\n last_line: 1,\r\n last_column: 0\r\n };\r\n if (this.options.ranges) {\r\n this.yylloc.range = [0,0];\r\n }\r\n this.offset = 0;\r\n return this;\r\n },\r\n\r\n// consumes and returns one char from the input\r\ninput:function () {\r\n var ch = this._input[0];\r\n this.yytext += ch;\r\n this.yyleng++;\r\n this.offset++;\r\n this.match += ch;\r\n this.matched += ch;\r\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno++;\r\n this.yylloc.last_line++;\r\n } else {\r\n this.yylloc.last_column++;\r\n }\r\n if (this.options.ranges) {\r\n this.yylloc.range[1]++;\r\n }\r\n\r\n this._input = this._input.slice(1);\r\n return ch;\r\n },\r\n\r\n// unshifts one char (or a string) into the input\r\nunput:function (ch) {\r\n var len = ch.length;\r\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\r\n\r\n this._input = ch + this._input;\r\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\r\n //this.yyleng -= len;\r\n this.offset -= len;\r\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\r\n this.match = this.match.substr(0, this.match.length - 1);\r\n this.matched = this.matched.substr(0, this.matched.length - 1);\r\n\r\n if (lines.length - 1) {\r\n this.yylineno -= lines.length - 1;\r\n }\r\n var r = this.yylloc.range;\r\n\r\n this.yylloc = {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.first_column,\r\n last_column: lines ?\r\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\r\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\r\n this.yylloc.first_column - len\r\n };\r\n\r\n if (this.options.ranges) {\r\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\r\n }\r\n this.yyleng = this.yytext.length;\r\n return this;\r\n },\r\n\r\n// When called from action, caches matched text and appends it on next action\r\nmore:function () {\r\n this._more = true;\r\n return this;\r\n },\r\n\r\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\r\nreject:function () {\r\n if (this.options.backtrack_lexer) {\r\n this._backtrack = true;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n\r\n }\r\n return this;\r\n },\r\n\r\n// retain first n characters of the match\r\nless:function (n) {\r\n this.unput(this.match.slice(n));\r\n },\r\n\r\n// displays already matched input, i.e. for error messages\r\npastInput:function () {\r\n var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays upcoming input, i.e. for error messages\r\nupcomingInput:function () {\r\n var next = this.match;\r\n if (next.length < 20) {\r\n next += this._input.substr(0, 20-next.length);\r\n }\r\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays the character position where the lexing error occurred, i.e. for error messages\r\nshowPosition:function () {\r\n var pre = this.pastInput();\r\n var c = new Array(pre.length + 1).join(\"-\");\r\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\r\n },\r\n\r\n// test the lexed token: return FALSE when not a match, otherwise return token\r\ntest_match:function(match, indexed_rule) {\r\n var token,\r\n lines,\r\n backup;\r\n\r\n if (this.options.backtrack_lexer) {\r\n // save context\r\n backup = {\r\n yylineno: this.yylineno,\r\n yylloc: {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.last_line,\r\n first_column: this.yylloc.first_column,\r\n last_column: this.yylloc.last_column\r\n },\r\n yytext: this.yytext,\r\n match: this.match,\r\n matches: this.matches,\r\n matched: this.matched,\r\n yyleng: this.yyleng,\r\n offset: this.offset,\r\n _more: this._more,\r\n _input: this._input,\r\n yy: this.yy,\r\n conditionStack: this.conditionStack.slice(0),\r\n done: this.done\r\n };\r\n if (this.options.ranges) {\r\n backup.yylloc.range = this.yylloc.range.slice(0);\r\n }\r\n }\r\n\r\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno += lines.length;\r\n }\r\n this.yylloc = {\r\n first_line: this.yylloc.last_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.last_column,\r\n last_column: lines ?\r\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\r\n this.yylloc.last_column + match[0].length\r\n };\r\n this.yytext += match[0];\r\n this.match += match[0];\r\n this.matches = match;\r\n this.yyleng = this.yytext.length;\r\n if (this.options.ranges) {\r\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\r\n }\r\n this._more = false;\r\n this._backtrack = false;\r\n this._input = this._input.slice(match[0].length);\r\n this.matched += match[0];\r\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\r\n if (this.done && this._input) {\r\n this.done = false;\r\n }\r\n if (token) {\r\n return token;\r\n } else if (this._backtrack) {\r\n // recover context\r\n for (var k in backup) {\r\n this[k] = backup[k];\r\n }\r\n return false; // rule action called reject() implying the next rule should be tested instead.\r\n }\r\n return false;\r\n },\r\n\r\n// return next match in input\r\nnext:function () {\r\n if (this.done) {\r\n return this.EOF;\r\n }\r\n if (!this._input) {\r\n this.done = true;\r\n }\r\n\r\n var token,\r\n match,\r\n tempMatch,\r\n index;\r\n if (!this._more) {\r\n this.yytext = '';\r\n this.match = '';\r\n }\r\n var rules = this._currentRules();\r\n for (var i = 0; i < rules.length; i++) {\r\n tempMatch = this._input.match(this.rules[rules[i]]);\r\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n match = tempMatch;\r\n index = i;\r\n if (this.options.backtrack_lexer) {\r\n token = this.test_match(tempMatch, rules[i]);\r\n if (token !== false) {\r\n return token;\r\n } else if (this._backtrack) {\r\n match = false;\r\n continue; // rule action called reject() implying a rule MISmatch.\r\n } else {\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n } else if (!this.options.flex) {\r\n break;\r\n }\r\n }\r\n }\r\n if (match) {\r\n token = this.test_match(match, rules[index]);\r\n if (token !== false) {\r\n return token;\r\n }\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n if (this._input === \"\") {\r\n return this.EOF;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n }\r\n },\r\n\r\n// return next match that has a token\r\nlex:function lex () {\r\n var r = this.next();\r\n if (r) {\r\n return r;\r\n } else {\r\n return this.lex();\r\n }\r\n },\r\n\r\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\r\nbegin:function begin (condition) {\r\n this.conditionStack.push(condition);\r\n },\r\n\r\n// pop the previously active lexer condition state off the condition stack\r\npopState:function popState () {\r\n var n = this.conditionStack.length - 1;\r\n if (n > 0) {\r\n return this.conditionStack.pop();\r\n } else {\r\n return this.conditionStack[0];\r\n }\r\n },\r\n\r\n// produce the lexer rule set which is active for the currently active lexer condition state\r\n_currentRules:function _currentRules () {\r\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\r\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\r\n } else {\r\n return this.conditions[\"INITIAL\"].rules;\r\n }\r\n },\r\n\r\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\r\ntopState:function topState (n) {\r\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\r\n if (n >= 0) {\r\n return this.conditionStack[n];\r\n } else {\r\n return \"INITIAL\";\r\n }\r\n },\r\n\r\n// alias for begin(condition)\r\npushState:function pushState (condition) {\r\n this.begin(condition);\r\n },\r\n\r\n// return the number of states currently on the stack\r\nstateStackSize:function stateStackSize() {\r\n return this.conditionStack.length;\r\n },\r\noptions: {\"case-insensitive\":true},\r\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\nvar YYSTATE=YY_START;\r\nswitch($avoiding_name_collisions) {\r\ncase 0:/* ignore whitespace */\r\nbreak;\r\ncase 1:return '';\r\nbreak;\r\ncase 2:return '';\r\nbreak;\r\ncase 3:return 42;\r\nbreak;\r\ncase 4:return 35;\r\nbreak;\r\ncase 5:return 77;\r\nbreak;\r\ncase 6:return 78;\r\nbreak;\r\ncase 7:return 78;\r\nbreak;\r\ncase 8:return 8;\r\nbreak;\r\ncase 9:return 6;\r\nbreak;\r\ncase 10:return 82;\r\nbreak;\r\ncase 11:return 7;\r\nbreak;\r\ncase 12:return 9;\r\nbreak;\r\ncase 13:return 59;\r\nbreak;\r\ncase 14:return 13\r\nbreak;\r\ncase 15:return 15\r\nbreak;\r\ncase 16:return 17\r\nbreak;\r\ncase 17:return 18\r\nbreak;\r\ncase 18:return 19\r\nbreak;\r\ncase 19:return 20\r\nbreak;\r\ncase 20:return 11\r\nbreak;\r\ncase 21:return 62\r\nbreak;\r\ncase 22:return 64\r\nbreak;\r\ncase 23:return 23\r\nbreak;\r\ncase 24:return 25\r\nbreak;\r\ncase 25:return 26\r\nbreak;\r\ncase 26:return 27\r\nbreak;\r\ncase 27:return 30\r\nbreak;\r\ncase 28:return 34\r\nbreak;\r\ncase 29:return 33\r\nbreak;\r\ncase 30:return 65\r\nbreak;\r\ncase 31:return 66\r\nbreak;\r\ncase 32:return 37\r\nbreak;\r\ncase 33:return 41\r\nbreak;\r\ncase 34:return 43\r\nbreak;\r\ncase 35:return 52\r\nbreak;\r\ncase 36:return 54\r\nbreak;\r\ncase 37:return 55\r\nbreak;\r\ncase 38:return 46\r\nbreak;\r\ncase 39:return 48\r\nbreak;\r\ncase 40:return 45\r\nbreak;\r\ncase 41:return 49\r\nbreak;\r\ncase 42:return 56\r\nbreak;\r\ncase 43:return 58;\r\nbreak;\r\ncase 44:return 44\r\nbreak;\r\ncase 45:return 83\r\nbreak;\r\ncase 46:return 84\r\nbreak;\r\ncase 47:return 85\r\nbreak;\r\ncase 48:return 86\r\nbreak;\r\ncase 49:return 87\r\nbreak;\r\ncase 50:return 88\r\nbreak;\r\ncase 51:return 89\r\nbreak;\r\ncase 52:return 90\r\nbreak;\r\ncase 53:return 91\r\nbreak;\r\ncase 54:return 92\r\nbreak;\r\ncase 55:return 93\r\nbreak;\r\ncase 56:return 94\r\nbreak;\r\ncase 57:return 95\r\nbreak;\r\ncase 58:return 70\r\nbreak;\r\ncase 59:return 70\r\nbreak;\r\ncase 60:return 72\r\nbreak;\r\ncase 61:return 72\r\nbreak;\r\ncase 62:return 74\r\nbreak;\r\ncase 63:return 74\r\nbreak;\r\ncase 64:return 74\r\nbreak;\r\ncase 65:return 31\r\nbreak;\r\ncase 66:return 36\r\nbreak;\r\ncase 67:return 96\r\nbreak;\r\ncase 68:return 97\r\nbreak;\r\ncase 69:return 98\r\nbreak;\r\ncase 70:return 99\r\nbreak;\r\ncase 71:yy_.yytext = yy.utils.unquoteString(yy_.yytext); return 14;\r\nbreak;\r\ncase 72:return 38;\r\nbreak;\r\ncase 73:return 5;\r\nbreak;\r\ncase 74:return 101;\r\nbreak;\r\ncase 75:return 103;\r\nbreak;\r\ncase 76:return '\\\\';\r\nbreak;\r\ncase 77:return 28\r\nbreak;\r\ncase 78:return 61\r\nbreak;\r\ncase 79:return 29\r\nbreak;\r\ncase 80:return 57\r\nbreak;\r\ncase 81:return 71\r\nbreak;\r\n}\r\n},\r\nrules: [/^(?:\\s+)/i,/^(?:[#].*)/i,/^(?:\\/\\/.*)/i,/^(?:([_A-Z0-9\\/\\+]+==))/i,/^(?:-?[0-9]+(\\.[0-9]+)?\\b)/i,/^(?:0[xX][0-9A-F]+\\b)/i,/^(?:false\\b)/i,/^(?:true\\b)/i,/^(?:all\\b)/i,/^(?:reset\\b)/i,/^(?:clear\\b)/i,/^(?:build\\b)/i,/^(?:help\\b)/i,/^(?:load\\b)/i,/^(?:get\\b)/i,/^(?:set\\b)/i,/^(?:set_save\\b)/i,/^(?:set_restore\\b)/i,/^(?:set_reset\\b)/i,/^(?:preset\\b)/i,/^(?:motm\\b)/i,/^(?:add\\b)/i,/^(?:rep\\b)/i,/^(?:remove\\b)/i,/^(?:hide\\b)/i,/^(?:show\\b)/i,/^(?:list\\b)/i,/^(?:select\\b)/i,/^(?:within\\b)/i,/^(?:selector\\b)/i,/^(?:mode\\b)/i,/^(?:color\\b)/i,/^(?:material\\b)/i,/^(?:view\\b)/i,/^(?:unit\\b)/i,/^(?:line\\b)/i,/^(?:listobj\\b)/i,/^(?:removeobj\\b)/i,/^(?:rotate\\b)/i,/^(?:translate\\b)/i,/^(?:scale\\b)/i,/^(?:center\\b)/i,/^(?:url\\b)/i,/^(?:screenshot\\b)/i,/^(?:dssp\\b)/i,/^(?:file_list\\b)/i,/^(?:file_register\\b)/i,/^(?:file_delete\\b)/i,/^(?:preset_add\\b)/i,/^(?:preset_delete\\b)/i,/^(?:preset_update\\b)/i,/^(?:preset_rename\\b)/i,/^(?:preset_open\\b)/i,/^(?:create_scenario\\b)/i,/^(?:reset_scenario\\b)/i,/^(?:delete_scenario\\b)/i,/^(?:add_scenario_item\\b)/i,/^(?:list_scenario\\b)/i,/^(?:s\\b)/i,/^(?:mt\\b)/i,/^(?:m\\b)/i,/^(?:c\\b)/i,/^(?:x\\b)/i,/^(?:y\\b)/i,/^(?:z\\b)/i,/^(?:as\\b)/i,/^(?:of\\b)/i,/^(?:pdb\\b)/i,/^(?:delay\\b)/i,/^(?:prst\\b)/i,/^(?:desc\\b)/i,/^(?:((?:\"(?:\\\\.|[^\\\\\"])*\"|'(?:\\\\.|[^\\\\'])*')))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:\\.)/i,/^(?:\\/)/i,/^(?:\\\\)/i,/^(?:-e\\b)/i,/^(?:-f\\b)/i,/^(?:-s\\b)/i,/^(?:-v\\b)/i,/^(?:=)/i],\r\nconditions: {\"INITIAL\":{\"rules\":[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,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,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81],\"inclusive\":true}}\r\n});\r\nreturn lexer;\r\n})();\r\nparser.lexer = lexer;\r\nfunction Parser () {\r\n this.yy = {};\r\n}\r\nParser.prototype = parser;parser.Parser = Parser;\r\nreturn new Parser;\r\n})();\r\n\r\nmodule.exports = {parser: parser};\r\n","/* eslint-disable */\r\n// DO NOT EDIT! Automatically generated from .jison\r\n/* parser generated by jison 0.4.18 */\r\n/*\r\n Returns a Parser object of the following structure:\r\n\r\n Parser: {\r\n yy: {}\r\n }\r\n\r\n Parser.prototype: {\r\n yy: {},\r\n trace: function(),\r\n symbols_: {associative list: name ==> number},\r\n terminals_: {associative list: number ==> name},\r\n productions_: [...],\r\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\r\n table: [...],\r\n defaultActions: {...},\r\n parseError: function(str, hash),\r\n parse: function(input),\r\n\r\n lexer: {\r\n EOF: 1,\r\n parseError: function(str, hash),\r\n setInput: function(input),\r\n input: function(),\r\n unput: function(str),\r\n more: function(),\r\n less: function(n),\r\n pastInput: function(),\r\n upcomingInput: function(),\r\n showPosition: function(),\r\n test_match: function(regex_match_array, rule_index),\r\n next: function(),\r\n lex: function(),\r\n begin: function(condition),\r\n popState: function(),\r\n _currentRules: function(),\r\n topState: function(),\r\n pushState: function(condition),\r\n\r\n options: {\r\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\r\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\r\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\r\n },\r\n\r\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\r\n rules: [...],\r\n conditions: {associative list: name ==> set},\r\n }\r\n }\r\n\r\n\r\n token location info (@$, _$, etc.): {\r\n first_line: n,\r\n last_line: n,\r\n first_column: n,\r\n last_column: n,\r\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\r\n }\r\n\r\n\r\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\r\n text: (matched text)\r\n token: (the produced terminal token, if any)\r\n line: (yylineno)\r\n }\r\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\r\n loc: (yylloc)\r\n expected: (string describing the set of expected tokens)\r\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\r\n }\r\n*/\r\nvar parser = (function(){\r\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,5],$V2=[1,6],$V3=[1,7],$V4=[1,8],$V5=[1,9],$V6=[1,11],$V7=[1,12],$V8=[5,7,8,11],$V9=[1,17],$Va=[1,22],$Vb=[1,20],$Vc=[1,21],$Vd=[5,7,8,11,19];\r\nvar parser = {trace: function trace() { },\r\nyy: {},\r\nsymbols_: {\"error\":2,\"Program\":3,\"Expression\":4,\"EOF\":5,\"Selector\":6,\"OR\":7,\"AND\":8,\"NOT\":9,\"(\":10,\")\":11,\"SELECTOR\":12,\"NAMED_SELECTOR\":13,\"SELECTOR_RANGED\":14,\"RangeList\":15,\"SELECTOR_NAMED\":16,\"NameList\":17,\"Range\":18,\",\":19,\"NUMBER\":20,\":\":21,\"Name\":22,\"IDENTIFIER\":23,\"STRING\":24,\"$accept\":0,\"$end\":1},\r\nterminals_: {2:\"error\",5:\"EOF\",7:\"OR\",8:\"AND\",9:\"NOT\",10:\"(\",11:\")\",12:\"SELECTOR\",13:\"NAMED_SELECTOR\",14:\"SELECTOR_RANGED\",16:\"SELECTOR_NAMED\",19:\",\",20:\"NUMBER\",21:\":\",23:\"IDENTIFIER\",24:\"STRING\"},\r\nproductions_: [0,[3,2],[4,1],[4,3],[4,3],[4,2],[4,3],[6,1],[6,1],[6,2],[6,2],[15,1],[15,3],[18,1],[18,3],[17,1],[17,3],[22,1],[22,1],[22,1]],\r\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\r\n/* this == yyval */\r\n\r\nvar $0 = $$.length - 1;\r\nswitch (yystate) {\r\ncase 1:\r\n return $$[$0-1]; \r\nbreak;\r\ncase 3:\r\nthis.$ = yy.keyword('or')($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 4:\r\nthis.$ = yy.keyword('and')($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 5:\r\nthis.$ = yy.keyword('not')($$[$0]);\r\nbreak;\r\ncase 6:\r\nthis.$ = $$[$0-1];\r\nbreak;\r\ncase 7:\r\nthis.$ = yy.keyword($$[$0])();\r\nbreak;\r\ncase 8:\r\nthis.$ = yy.GetSelector($$[$0].toLowerCase().slice(1, $$[$0].length));\r\nbreak;\r\ncase 9: case 10:\r\nthis.$ = yy.keyword($$[$0-1])($$[$0]);\r\nbreak;\r\ncase 11:\r\nthis.$ = new yy.RangeList($$[$0]);\r\nbreak;\r\ncase 12: case 16:\r\nthis.$ = $$[$0-2].append($$[$0]);\r\nbreak;\r\ncase 13:\r\nthis.$ = new yy.Range(Number($$[$0]));\r\nbreak;\r\ncase 14:\r\nthis.$ = new yy.Range(Number($$[$0-2]), Number($$[$0]));\r\nbreak;\r\ncase 15:\r\nthis.$ = new yy.ValueList($$[$0]);\r\nbreak;\r\n}\r\n},\r\ntable: [{3:1,4:2,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{1:[3]},{5:[1,10],7:$V6,8:$V7},o($V8,[2,2]),{4:13,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{4:14,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},o($V8,[2,7]),o($V8,[2,8]),{15:15,18:16,20:$V9},{17:18,20:$Va,22:19,23:$Vb,24:$Vc},{1:[2,1]},{4:23,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{4:24,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},o($V8,[2,5]),{7:$V6,8:$V7,11:[1,25]},o($V8,[2,9],{19:[1,26]}),o($Vd,[2,11]),o($Vd,[2,13],{21:[1,27]}),o($V8,[2,10],{19:[1,28]}),o($Vd,[2,15]),o($Vd,[2,17]),o($Vd,[2,18]),o($Vd,[2,19]),o([5,7,11],[2,3],{8:$V7}),o($V8,[2,4]),o($V8,[2,6]),{18:29,20:$V9},{20:[1,30]},{20:$Va,22:31,23:$Vb,24:$Vc},o($Vd,[2,12]),o($Vd,[2,14]),o($Vd,[2,16])],\r\ndefaultActions: {10:[2,1]},\r\nparseError: function parseError(str, hash) {\r\n if (hash.recoverable) {\r\n this.trace(str);\r\n } else {\r\n var error = new Error(str);\r\n error.hash = hash;\r\n throw error;\r\n }\r\n},\r\nparse: function parse(input) {\r\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\r\n var args = lstack.slice.call(arguments, 1);\r\n var lexer = Object.create(this.lexer);\r\n var sharedState = { yy: {} };\r\n for (var k in this.yy) {\r\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\r\n sharedState.yy[k] = this.yy[k];\r\n }\r\n }\r\n lexer.setInput(input, sharedState.yy);\r\n sharedState.yy.lexer = lexer;\r\n sharedState.yy.parser = this;\r\n if (typeof lexer.yylloc == 'undefined') {\r\n lexer.yylloc = {};\r\n }\r\n var yyloc = lexer.yylloc;\r\n lstack.push(yyloc);\r\n var ranges = lexer.options && lexer.options.ranges;\r\n if (typeof sharedState.yy.parseError === 'function') {\r\n this.parseError = sharedState.yy.parseError;\r\n } else {\r\n this.parseError = Object.getPrototypeOf(this).parseError;\r\n }\r\n function popStack(n) {\r\n stack.length = stack.length - 2 * n;\r\n vstack.length = vstack.length - n;\r\n lstack.length = lstack.length - n;\r\n }\r\n function lex() {\r\n var token;\r\n token = tstack.pop() || lexer.lex() || EOF;\r\n if (typeof token !== 'number') {\r\n if (token instanceof Array) {\r\n tstack = token;\r\n token = tstack.pop();\r\n }\r\n token = self.symbols_[token] || token;\r\n }\r\n return token;\r\n }\r\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\r\n while (true) {\r\n state = stack[stack.length - 1];\r\n if (this.defaultActions[state]) {\r\n action = this.defaultActions[state];\r\n } else {\r\n if (symbol === null || typeof symbol == 'undefined') {\r\n symbol = lex();\r\n }\r\n action = table[state] && table[state][symbol];\r\n }\r\n if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n var errStr = '';\r\n expected = [];\r\n for (p in table[state]) {\r\n if (this.terminals_[p] && p > TERROR) {\r\n expected.push('\\'' + this.terminals_[p] + '\\'');\r\n }\r\n }\r\n if (lexer.showPosition) {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\r\n } else {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\r\n }\r\n this.parseError(errStr, {\r\n text: lexer.match,\r\n token: this.terminals_[symbol] || symbol,\r\n line: lexer.yylineno,\r\n loc: yyloc,\r\n expected: expected\r\n });\r\n }\r\n if (action[0] instanceof Array && action.length > 1) {\r\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\r\n }\r\n switch (action[0]) {\r\n case 1:\r\n stack.push(symbol);\r\n vstack.push(lexer.yytext);\r\n lstack.push(lexer.yylloc);\r\n stack.push(action[1]);\r\n symbol = null;\r\n if (!preErrorSymbol) {\r\n yyleng = lexer.yyleng;\r\n yytext = lexer.yytext;\r\n yylineno = lexer.yylineno;\r\n yyloc = lexer.yylloc;\r\n if (recovering > 0) {\r\n recovering--;\r\n }\r\n } else {\r\n symbol = preErrorSymbol;\r\n preErrorSymbol = null;\r\n }\r\n break;\r\n case 2:\r\n len = this.productions_[action[1]][1];\r\n yyval.$ = vstack[vstack.length - len];\r\n yyval._$ = {\r\n first_line: lstack[lstack.length - (len || 1)].first_line,\r\n last_line: lstack[lstack.length - 1].last_line,\r\n first_column: lstack[lstack.length - (len || 1)].first_column,\r\n last_column: lstack[lstack.length - 1].last_column\r\n };\r\n if (ranges) {\r\n yyval._$.range = [\r\n lstack[lstack.length - (len || 1)].range[0],\r\n lstack[lstack.length - 1].range[1]\r\n ];\r\n }\r\n r = this.performAction.apply(yyval, [\r\n yytext,\r\n yyleng,\r\n yylineno,\r\n sharedState.yy,\r\n action[1],\r\n vstack,\r\n lstack\r\n ].concat(args));\r\n if (typeof r !== 'undefined') {\r\n return r;\r\n }\r\n if (len) {\r\n stack = stack.slice(0, -1 * len * 2);\r\n vstack = vstack.slice(0, -1 * len);\r\n lstack = lstack.slice(0, -1 * len);\r\n }\r\n stack.push(this.productions_[action[1]][0]);\r\n vstack.push(yyval.$);\r\n lstack.push(yyval._$);\r\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\r\n stack.push(newState);\r\n break;\r\n case 3:\r\n return true;\r\n }\r\n }\r\n return true;\r\n}};\r\n\r\n\r\n/* generated by jison-lex 0.3.4 */\r\nvar lexer = (function(){\r\nvar lexer = ({\r\n\r\nEOF:1,\r\n\r\nparseError:function parseError(str, hash) {\r\n if (this.yy.parser) {\r\n this.yy.parser.parseError(str, hash);\r\n } else {\r\n throw new Error(str);\r\n }\r\n },\r\n\r\n// resets the lexer, sets new input\r\nsetInput:function (input, yy) {\r\n this.yy = yy || this.yy || {};\r\n this._input = input;\r\n this._more = this._backtrack = this.done = false;\r\n this.yylineno = this.yyleng = 0;\r\n this.yytext = this.matched = this.match = '';\r\n this.conditionStack = ['INITIAL'];\r\n this.yylloc = {\r\n first_line: 1,\r\n first_column: 0,\r\n last_line: 1,\r\n last_column: 0\r\n };\r\n if (this.options.ranges) {\r\n this.yylloc.range = [0,0];\r\n }\r\n this.offset = 0;\r\n return this;\r\n },\r\n\r\n// consumes and returns one char from the input\r\ninput:function () {\r\n var ch = this._input[0];\r\n this.yytext += ch;\r\n this.yyleng++;\r\n this.offset++;\r\n this.match += ch;\r\n this.matched += ch;\r\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno++;\r\n this.yylloc.last_line++;\r\n } else {\r\n this.yylloc.last_column++;\r\n }\r\n if (this.options.ranges) {\r\n this.yylloc.range[1]++;\r\n }\r\n\r\n this._input = this._input.slice(1);\r\n return ch;\r\n },\r\n\r\n// unshifts one char (or a string) into the input\r\nunput:function (ch) {\r\n var len = ch.length;\r\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\r\n\r\n this._input = ch + this._input;\r\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\r\n //this.yyleng -= len;\r\n this.offset -= len;\r\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\r\n this.match = this.match.substr(0, this.match.length - 1);\r\n this.matched = this.matched.substr(0, this.matched.length - 1);\r\n\r\n if (lines.length - 1) {\r\n this.yylineno -= lines.length - 1;\r\n }\r\n var r = this.yylloc.range;\r\n\r\n this.yylloc = {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.first_column,\r\n last_column: lines ?\r\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\r\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\r\n this.yylloc.first_column - len\r\n };\r\n\r\n if (this.options.ranges) {\r\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\r\n }\r\n this.yyleng = this.yytext.length;\r\n return this;\r\n },\r\n\r\n// When called from action, caches matched text and appends it on next action\r\nmore:function () {\r\n this._more = true;\r\n return this;\r\n },\r\n\r\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\r\nreject:function () {\r\n if (this.options.backtrack_lexer) {\r\n this._backtrack = true;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n\r\n }\r\n return this;\r\n },\r\n\r\n// retain first n characters of the match\r\nless:function (n) {\r\n this.unput(this.match.slice(n));\r\n },\r\n\r\n// displays already matched input, i.e. for error messages\r\npastInput:function () {\r\n var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays upcoming input, i.e. for error messages\r\nupcomingInput:function () {\r\n var next = this.match;\r\n if (next.length < 20) {\r\n next += this._input.substr(0, 20-next.length);\r\n }\r\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays the character position where the lexing error occurred, i.e. for error messages\r\nshowPosition:function () {\r\n var pre = this.pastInput();\r\n var c = new Array(pre.length + 1).join(\"-\");\r\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\r\n },\r\n\r\n// test the lexed token: return FALSE when not a match, otherwise return token\r\ntest_match:function (match, indexed_rule) {\r\n var token,\r\n lines,\r\n backup;\r\n\r\n if (this.options.backtrack_lexer) {\r\n // save context\r\n backup = {\r\n yylineno: this.yylineno,\r\n yylloc: {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.last_line,\r\n first_column: this.yylloc.first_column,\r\n last_column: this.yylloc.last_column\r\n },\r\n yytext: this.yytext,\r\n match: this.match,\r\n matches: this.matches,\r\n matched: this.matched,\r\n yyleng: this.yyleng,\r\n offset: this.offset,\r\n _more: this._more,\r\n _input: this._input,\r\n yy: this.yy,\r\n conditionStack: this.conditionStack.slice(0),\r\n done: this.done\r\n };\r\n if (this.options.ranges) {\r\n backup.yylloc.range = this.yylloc.range.slice(0);\r\n }\r\n }\r\n\r\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno += lines.length;\r\n }\r\n this.yylloc = {\r\n first_line: this.yylloc.last_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.last_column,\r\n last_column: lines ?\r\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\r\n this.yylloc.last_column + match[0].length\r\n };\r\n this.yytext += match[0];\r\n this.match += match[0];\r\n this.matches = match;\r\n this.yyleng = this.yytext.length;\r\n if (this.options.ranges) {\r\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\r\n }\r\n this._more = false;\r\n this._backtrack = false;\r\n this._input = this._input.slice(match[0].length);\r\n this.matched += match[0];\r\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\r\n if (this.done && this._input) {\r\n this.done = false;\r\n }\r\n if (token) {\r\n return token;\r\n } else if (this._backtrack) {\r\n // recover context\r\n for (var k in backup) {\r\n this[k] = backup[k];\r\n }\r\n return false; // rule action called reject() implying the next rule should be tested instead.\r\n }\r\n return false;\r\n },\r\n\r\n// return next match in input\r\nnext:function () {\r\n if (this.done) {\r\n return this.EOF;\r\n }\r\n if (!this._input) {\r\n this.done = true;\r\n }\r\n\r\n var token,\r\n match,\r\n tempMatch,\r\n index;\r\n if (!this._more) {\r\n this.yytext = '';\r\n this.match = '';\r\n }\r\n var rules = this._currentRules();\r\n for (var i = 0; i < rules.length; i++) {\r\n tempMatch = this._input.match(this.rules[rules[i]]);\r\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n match = tempMatch;\r\n index = i;\r\n if (this.options.backtrack_lexer) {\r\n token = this.test_match(tempMatch, rules[i]);\r\n if (token !== false) {\r\n return token;\r\n } else if (this._backtrack) {\r\n match = false;\r\n continue; // rule action called reject() implying a rule MISmatch.\r\n } else {\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n } else if (!this.options.flex) {\r\n break;\r\n }\r\n }\r\n }\r\n if (match) {\r\n token = this.test_match(match, rules[index]);\r\n if (token !== false) {\r\n return token;\r\n }\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n if (this._input === \"\") {\r\n return this.EOF;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n }\r\n },\r\n\r\n// return next match that has a token\r\nlex:function lex() {\r\n var r = this.next();\r\n if (r) {\r\n return r;\r\n } else {\r\n return this.lex();\r\n }\r\n },\r\n\r\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\r\nbegin:function begin(condition) {\r\n this.conditionStack.push(condition);\r\n },\r\n\r\n// pop the previously active lexer condition state off the condition stack\r\npopState:function popState() {\r\n var n = this.conditionStack.length - 1;\r\n if (n > 0) {\r\n return this.conditionStack.pop();\r\n } else {\r\n return this.conditionStack[0];\r\n }\r\n },\r\n\r\n// produce the lexer rule set which is active for the currently active lexer condition state\r\n_currentRules:function _currentRules() {\r\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\r\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\r\n } else {\r\n return this.conditions[\"INITIAL\"].rules;\r\n }\r\n },\r\n\r\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\r\ntopState:function topState(n) {\r\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\r\n if (n >= 0) {\r\n return this.conditionStack[n];\r\n } else {\r\n return \"INITIAL\";\r\n }\r\n },\r\n\r\n// alias for begin(condition)\r\npushState:function pushState(condition) {\r\n this.begin(condition);\r\n },\r\n\r\n// return the number of states currently on the stack\r\nstateStackSize:function stateStackSize() {\r\n return this.conditionStack.length;\r\n },\r\noptions: {\"case-insensitive\":true},\r\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\nvar YYSTATE=YY_START;\r\nswitch($avoiding_name_collisions) {\r\ncase 0:/* skip whitespace */\r\nbreak;\r\ncase 1:return 20;\r\nbreak;\r\ncase 2:return 7;\r\nbreak;\r\ncase 3:return 8;\r\nbreak;\r\ncase 4:return 9;\r\nbreak;\r\ncase 5:return 12;\r\nbreak;\r\ncase 6:return 16;\r\nbreak;\r\ncase 7:return 14;\r\nbreak;\r\ncase 8:return 10;\r\nbreak;\r\ncase 9:return 11;\r\nbreak;\r\ncase 10:return 19;\r\nbreak;\r\ncase 11:return 21;\r\nbreak;\r\ncase 12:return '<=';\r\nbreak;\r\ncase 13:return '>=';\r\nbreak;\r\ncase 14:return '<';\r\nbreak;\r\ncase 15:return '>';\r\nbreak;\r\ncase 16:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 24;\r\nbreak;\r\ncase 17:return 13;\r\nbreak;\r\ncase 18:return 23;\r\nbreak;\r\ncase 19:return 5;\r\nbreak;\r\ncase 20:return 'INVALID';\r\nbreak;\r\n}\r\n},\r\nrules: [/^(?:\\s+)/i,/^(?:(-?(?:[1-9][0-9]+|[0-9]))\\b)/i,/^(?:OR\\b)/i,/^(?:AND\\b)/i,/^(?:NOT\\b)/i,/^(?:((ALL|NONE|HETATM|PROTEIN|BASIC|ACIDIC|CHARGED|POLAR|NONPOLAR|AROMATIC|NUCLEIC|PURINE|PYRIMIDINE|WATER|POLARH|NONPOLARH))\\b)/i,/^(?:((NAME|ELEM|TYPE|RESIDUE|ICODE|CHAIN|ALTLOC))\\b)/i,/^(?:((SERIAL|SEQUENCE|RESIDX))\\b)/i,/^(?:\\()/i,/^(?:\\))/i,/^(?:,)/i,/^(?::)/i,/^(?:<=)/i,/^(?:>=)/i,/^(?:<)/i,/^(?:>)/i,/^(?:((?:\"(?:\\\\.|[^\\\\\"])*\"|'(?:\\\\.|[^\\\\'])*')))/i,/^(?:(@[_A-Z0-9]+))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:.)/i],\r\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],\"inclusive\":true}}\r\n});\r\nreturn lexer;\r\n})();\r\nparser.lexer = lexer;\r\nfunction Parser () {\r\n this.yy = {};\r\n}\r\nParser.prototype = parser;parser.Parser = Parser;\r\nreturn new Parser;\r\n})();\r\n\r\nmodule.exports = {parser: parser};\r\n","\r\n/*\r\nSmooth.js version 0.1.7\r\n\r\nTurn arrays into smooth functions.\r\n\r\nCopyright 2012 Spencer Cohen\r\nLicensed under MIT license (see \"Smooth.js MIT license.txt\")\r\n*/\r\n\r\n/*Constants (these are accessible by Smooth.WHATEVER in user space)\r\n*/\r\n\r\n(function() {\r\n var AbstractInterpolator, CubicInterpolator, Enum, LinearInterpolator, NearestInterpolator, PI, SincFilterInterpolator, Smooth, clipClamp, clipMirror, clipPeriodic, defaultConfig, getColumn, getType, isValidNumber, k, makeLanczosWindow, makeScaledFunction, makeSincKernel, normalizeScaleTo, shallowCopy, sin, sinc, v, validateNumber, validateVector,\r\n __hasProp = Object.prototype.hasOwnProperty,\r\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; };\r\n\r\n Enum = {\r\n /*Interpolation methods\r\n */\r\n METHOD_NEAREST: 'nearest',\r\n METHOD_LINEAR: 'linear',\r\n METHOD_CUBIC: 'cubic',\r\n METHOD_LANCZOS: 'lanczos',\r\n METHOD_SINC: 'sinc',\r\n /*Input clipping modes\r\n */\r\n CLIP_CLAMP: 'clamp',\r\n CLIP_ZERO: 'zero',\r\n CLIP_PERIODIC: 'periodic',\r\n CLIP_MIRROR: 'mirror',\r\n /* Constants for control over the cubic interpolation tension\r\n */\r\n CUBIC_TENSION_DEFAULT: 0,\r\n CUBIC_TENSION_CATMULL_ROM: 0\r\n };\r\n\r\n defaultConfig = {\r\n method: Enum.METHOD_CUBIC,\r\n cubicTension: Enum.CUBIC_TENSION_DEFAULT,\r\n clip: Enum.CLIP_CLAMP,\r\n scaleTo: 0,\r\n sincFilterSize: 2,\r\n sincWindow: void 0\r\n };\r\n\r\n /*Index clipping functions\r\n */\r\n\r\n clipClamp = function(i, n) {\r\n return Math.max(0, Math.min(i, n - 1));\r\n };\r\n\r\n clipPeriodic = function(i, n) {\r\n i = i % n;\r\n if (i < 0) i += n;\r\n return i;\r\n };\r\n\r\n clipMirror = function(i, n) {\r\n var period;\r\n period = 2 * (n - 1);\r\n i = clipPeriodic(i, period);\r\n if (i > n - 1) i = period - i;\r\n return i;\r\n };\r\n\r\n /*\r\n Abstract scalar interpolation class which provides common functionality for all interpolators\r\n \r\n Subclasses must override interpolate().\r\n */\r\n\r\n AbstractInterpolator = (function() {\r\n\r\n function AbstractInterpolator(array, config) {\r\n this.array = array.slice(0);\r\n this.length = this.array.length;\r\n if (!(this.clipHelper = {\r\n clamp: this.clipHelperClamp,\r\n zero: this.clipHelperZero,\r\n periodic: this.clipHelperPeriodic,\r\n mirror: this.clipHelperMirror\r\n }[config.clip])) {\r\n throw \"Invalid clip: \" + config.clip;\r\n }\r\n }\r\n\r\n AbstractInterpolator.prototype.getClippedInput = function(i) {\r\n if ((0 <= i && i < this.length)) {\r\n return this.array[i];\r\n } else {\r\n return this.clipHelper(i);\r\n }\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperClamp = function(i) {\r\n return this.array[clipClamp(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperZero = function(i) {\r\n return 0;\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperPeriodic = function(i) {\r\n return this.array[clipPeriodic(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperMirror = function(i) {\r\n return this.array[clipMirror(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.interpolate = function(t) {\r\n throw 'Subclasses of AbstractInterpolator must override the interpolate() method.';\r\n };\r\n\r\n return AbstractInterpolator;\r\n\r\n })();\r\n\r\n NearestInterpolator = (function(_super) {\r\n\r\n __extends(NearestInterpolator, _super);\r\n\r\n function NearestInterpolator() {\r\n NearestInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n NearestInterpolator.prototype.interpolate = function(t) {\r\n return this.getClippedInput(Math.round(t));\r\n };\r\n\r\n return NearestInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n LinearInterpolator = (function(_super) {\r\n\r\n __extends(LinearInterpolator, _super);\r\n\r\n function LinearInterpolator() {\r\n LinearInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n LinearInterpolator.prototype.interpolate = function(t) {\r\n var k;\r\n k = Math.floor(t);\r\n t -= k;\r\n return (1 - t) * this.getClippedInput(k) + t * this.getClippedInput(k + 1);\r\n };\r\n\r\n return LinearInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n CubicInterpolator = (function(_super) {\r\n\r\n __extends(CubicInterpolator, _super);\r\n\r\n function CubicInterpolator(array, config) {\r\n this.tangentFactor = 1 - Math.max(-1, Math.min(1, config.cubicTension));\r\n CubicInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n CubicInterpolator.prototype.getTangent = function(k) {\r\n return this.tangentFactor * (this.getClippedInput(k + 1) - this.getClippedInput(k - 1)) / 2;\r\n };\r\n\r\n CubicInterpolator.prototype.interpolate = function(t) {\r\n var k, m, p, t2, t3;\r\n k = Math.floor(t);\r\n m = [this.getTangent(k), this.getTangent(k + 1)];\r\n p = [this.getClippedInput(k), this.getClippedInput(k + 1)];\r\n t -= k;\r\n t2 = t * t;\r\n t3 = t * t2;\r\n return (2 * t3 - 3 * t2 + 1) * p[0] + (t3 - 2 * t2 + t) * m[0] + (-2 * t3 + 3 * t2) * p[1] + (t3 - t2) * m[1];\r\n };\r\n\r\n return CubicInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n sin = Math.sin, PI = Math.PI;\r\n\r\n sinc = function(x) {\r\n if (x === 0) {\r\n return 1;\r\n } else {\r\n return sin(PI * x) / (PI * x);\r\n }\r\n };\r\n\r\n makeLanczosWindow = function(a) {\r\n return function(x) {\r\n return sinc(x / a);\r\n };\r\n };\r\n\r\n makeSincKernel = function(window) {\r\n return function(x) {\r\n return sinc(x) * window(x);\r\n };\r\n };\r\n\r\n SincFilterInterpolator = (function(_super) {\r\n\r\n __extends(SincFilterInterpolator, _super);\r\n\r\n function SincFilterInterpolator(array, config) {\r\n SincFilterInterpolator.__super__.constructor.apply(this, arguments);\r\n this.a = config.sincFilterSize;\r\n if (!config.sincWindow) throw 'No sincWindow provided';\r\n this.kernel = makeSincKernel(config.sincWindow);\r\n }\r\n\r\n SincFilterInterpolator.prototype.interpolate = function(t) {\r\n var k, n, sum, _ref, _ref2;\r\n k = Math.floor(t);\r\n sum = 0;\r\n for (n = _ref = k - this.a + 1, _ref2 = k + this.a; _ref <= _ref2 ? n <= _ref2 : n >= _ref2; _ref <= _ref2 ? n++ : n--) {\r\n sum += this.kernel(t - n) * this.getClippedInput(n);\r\n }\r\n return sum;\r\n };\r\n\r\n return SincFilterInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n getColumn = function(arr, i) {\r\n var row, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = arr.length; _i < _len; _i++) {\r\n row = arr[_i];\r\n _results.push(row[i]);\r\n }\r\n return _results;\r\n };\r\n\r\n makeScaledFunction = function(f, baseScale, scaleRange) {\r\n var scaleFactor, translation;\r\n if (scaleRange.join === '0,1') {\r\n return f;\r\n } else {\r\n scaleFactor = baseScale / (scaleRange[1] - scaleRange[0]);\r\n translation = scaleRange[0];\r\n return function(t) {\r\n return f(scaleFactor * (t - translation));\r\n };\r\n }\r\n };\r\n\r\n getType = function(x) {\r\n return Object.prototype.toString.call(x).slice('[object '.length, -1);\r\n };\r\n\r\n validateNumber = function(n) {\r\n if (isNaN(n)) throw 'NaN in Smooth() input';\r\n if (getType(n) !== 'Number') throw 'Non-number in Smooth() input';\r\n if (!isFinite(n)) throw 'Infinity in Smooth() input';\r\n };\r\n\r\n validateVector = function(v, dimension) {\r\n var n, _i, _len;\r\n if (getType(v) !== 'Array') throw 'Non-vector in Smooth() input';\r\n if (v.length !== dimension) throw 'Inconsistent dimension in Smooth() input';\r\n for (_i = 0, _len = v.length; _i < _len; _i++) {\r\n n = v[_i];\r\n validateNumber(n);\r\n }\r\n };\r\n\r\n isValidNumber = function(n) {\r\n return (getType(n) === 'Number') && isFinite(n) && !isNaN(n);\r\n };\r\n\r\n normalizeScaleTo = function(s) {\r\n var invalidErr;\r\n invalidErr = \"scaleTo param must be number or array of two numbers\";\r\n switch (getType(s)) {\r\n case 'Number':\r\n if (!isValidNumber(s)) throw invalidErr;\r\n s = [0, s];\r\n break;\r\n case 'Array':\r\n if (s.length !== 2) throw invalidErr;\r\n if (!(isValidNumber(s[0]) && isValidNumber(s[1]))) throw invalidErr;\r\n break;\r\n default:\r\n throw invalidErr;\r\n }\r\n return s;\r\n };\r\n\r\n shallowCopy = function(obj) {\r\n var copy, k, v;\r\n copy = {};\r\n for (k in obj) {\r\n if (!__hasProp.call(obj, k)) continue;\r\n v = obj[k];\r\n copy[k] = v;\r\n }\r\n return copy;\r\n };\r\n\r\n Smooth = function(arr, config) {\r\n var baseDomainEnd, dimension, i, interpolator, interpolatorClass, interpolators, k, n, properties, smoothFunc, v;\r\n if (config == null) config = {};\r\n properties = {};\r\n config = shallowCopy(config);\r\n properties.config = shallowCopy(config);\r\n if (config.scaleTo == null) config.scaleTo = config.period;\r\n if (config.sincFilterSize == null) {\r\n config.sincFilterSize = config.lanczosFilterSize;\r\n }\r\n for (k in defaultConfig) {\r\n if (!__hasProp.call(defaultConfig, k)) continue;\r\n v = defaultConfig[k];\r\n if (config[k] == null) config[k] = v;\r\n }\r\n if (!(interpolatorClass = {\r\n nearest: NearestInterpolator,\r\n linear: LinearInterpolator,\r\n cubic: CubicInterpolator,\r\n lanczos: SincFilterInterpolator,\r\n sinc: SincFilterInterpolator\r\n }[config.method])) {\r\n throw \"Invalid method: \" + config.method;\r\n }\r\n if (config.method === 'lanczos') {\r\n config.sincWindow = makeLanczosWindow(config.sincFilterSize);\r\n }\r\n if (arr.length < 2) throw 'Array must have at least two elements';\r\n properties.count = arr.length;\r\n smoothFunc = (function() {\r\n var _i, _j, _len, _len2;\r\n switch (getType(arr[0])) {\r\n case 'Number':\r\n properties.dimension = 'scalar';\r\n if (Smooth.deepValidation) {\r\n for (_i = 0, _len = arr.length; _i < _len; _i++) {\r\n n = arr[_i];\r\n validateNumber(n);\r\n }\r\n }\r\n interpolator = new interpolatorClass(arr, config);\r\n return function(t) {\r\n return interpolator.interpolate(t);\r\n };\r\n case 'Array':\r\n properties.dimension = dimension = arr[0].length;\r\n if (!dimension) throw 'Vectors must be non-empty';\r\n if (Smooth.deepValidation) {\r\n for (_j = 0, _len2 = arr.length; _j < _len2; _j++) {\r\n v = arr[_j];\r\n validateVector(v, dimension);\r\n }\r\n }\r\n interpolators = (function() {\r\n var _results;\r\n _results = [];\r\n for (i = 0; 0 <= dimension ? i < dimension : i > dimension; 0 <= dimension ? i++ : i--) {\r\n _results.push(new interpolatorClass(getColumn(arr, i), config));\r\n }\r\n return _results;\r\n })();\r\n return function(t) {\r\n var interpolator, _k, _len3, _results;\r\n _results = [];\r\n for (_k = 0, _len3 = interpolators.length; _k < _len3; _k++) {\r\n interpolator = interpolators[_k];\r\n _results.push(interpolator.interpolate(t));\r\n }\r\n return _results;\r\n };\r\n default:\r\n throw \"Invalid element type: \" + (getType(arr[0]));\r\n }\r\n })();\r\n if (config.clip === 'periodic') {\r\n baseDomainEnd = arr.length;\r\n } else {\r\n baseDomainEnd = arr.length - 1;\r\n }\r\n config.scaleTo || (config.scaleTo = baseDomainEnd);\r\n properties.domain = normalizeScaleTo(config.scaleTo);\r\n smoothFunc = makeScaledFunction(smoothFunc, baseDomainEnd, properties.domain);\r\n properties.domain.sort();\r\n /*copy properties\r\n */\r\n for (k in properties) {\r\n if (!__hasProp.call(properties, k)) continue;\r\n v = properties[k];\r\n smoothFunc[k] = v;\r\n }\r\n return smoothFunc;\r\n };\r\n\r\n for (k in Enum) {\r\n if (!__hasProp.call(Enum, k)) continue;\r\n v = Enum[k];\r\n Smooth[k] = v;\r\n }\r\n\r\n Smooth.deepValidation = true;\r\n\r\n (typeof exports !== \"undefined\" && exports !== null ? exports : window).Smooth = Smooth;\r\n\r\n}).call(this);\r\n","!function(r,t){if(\"function\"==typeof define&&define.amd)define([\"exports\"],t);else if(\"object\"==typeof exports&&\"undefined\"!=typeof module)t(exports);else t(r.MMTF=r.MMTF||{})}(this,function(r){\"use strict\";function t(r,t,n){for(var e=(r.byteLength,0),i=n.length;i>e;e++){var o=n.charCodeAt(e);if(128>o)r.setUint8(t++,o>>>0&127|0);else if(2048>o)r.setUint8(t++,o>>>6&31|192),r.setUint8(t++,o>>>0&63|128);else if(65536>o)r.setUint8(t++,o>>>12&15|224),r.setUint8(t++,o>>>6&63|128),r.setUint8(t++,o>>>0&63|128);else{if(!(1114112>o))throw new Error(\"bad codepoint \"+o);r.setUint8(t++,o>>>18&7|240),r.setUint8(t++,o>>>12&63|128),r.setUint8(t++,o>>>6&63|128),r.setUint8(t++,o>>>0&63|128)}}}function n(r){for(var t=0,n=0,e=r.length;e>n;n++){var i=r.charCodeAt(n);if(128>i)t+=1;else if(2048>i)t+=2;else if(65536>i)t+=3;else{if(!(1114112>i))throw new Error(\"bad codepoint \"+i);t+=4}}return t}function e(r,i,o){var a=typeof r;if(\"string\"===a){var u=n(r);if(32>u)return i.setUint8(o,160|u),t(i,o+1,r),1+u;if(256>u)return i.setUint8(o,217),i.setUint8(o+1,u),t(i,o+2,r),2+u;if(65536>u)return i.setUint8(o,218),i.setUint16(o+1,u),t(i,o+3,r),3+u;if(4294967296>u)return i.setUint8(o,219),i.setUint32(o+1,u),t(i,o+5,r),5+u}if(r instanceof Uint8Array){var u=r.byteLength,s=new Uint8Array(i.buffer);if(256>u)return i.setUint8(o,196),i.setUint8(o+1,u),s.set(r,o+2),2+u;if(65536>u)return i.setUint8(o,197),i.setUint16(o+1,u),s.set(r,o+3),3+u;if(4294967296>u)return i.setUint8(o,198),i.setUint32(o+1,u),s.set(r,o+5),5+u}if(\"number\"===a){if(!isFinite(r))throw new Error(\"Number not finite: \"+r);if(Math.floor(r)!==r)return i.setUint8(o,203),i.setFloat64(o+1,r),9;if(r>=0){if(128>r)return i.setUint8(o,r),1;if(256>r)return i.setUint8(o,204),i.setUint8(o+1,r),2;if(65536>r)return i.setUint8(o,205),i.setUint16(o+1,r),3;if(4294967296>r)return i.setUint8(o,206),i.setUint32(o+1,r),5;throw new Error(\"Number too big 0x\"+r.toString(16))}if(r>=-32)return i.setInt8(o,r),1;if(r>=-128)return i.setUint8(o,208),i.setInt8(o+1,r),2;if(r>=-32768)return i.setUint8(o,209),i.setInt16(o+1,r),3;if(r>=-2147483648)return i.setUint8(o,210),i.setInt32(o+1,r),5;throw new Error(\"Number too small -0x\"+(-r).toString(16).substr(1))}if(null===r)return i.setUint8(o,192),1;if(\"boolean\"===a)return i.setUint8(o,r?195:194),1;if(\"object\"===a){var u,f=0,c=Array.isArray(r);if(c)u=r.length;else{var d=Object.keys(r);u=d.length}var f;if(16>u?(i.setUint8(o,u|(c?144:128)),f=1):65536>u?(i.setUint8(o,c?220:222),i.setUint16(o+1,u),f=3):4294967296>u&&(i.setUint8(o,c?221:223),i.setUint32(o+1,u),f=5),c)for(var l=0;u>l;l++)f+=e(r[l],i,o+f);else for(var l=0;u>l;l++){var v=d[l];f+=e(v,i,o+f),f+=e(r[v],i,o+f)}return f}throw new Error(\"Unknown type \"+a)}function i(r){var t=typeof r;if(\"string\"===t){var e=n(r);if(32>e)return 1+e;if(256>e)return 2+e;if(65536>e)return 3+e;if(4294967296>e)return 5+e}if(r instanceof Uint8Array){var e=r.byteLength;if(256>e)return 2+e;if(65536>e)return 3+e;if(4294967296>e)return 5+e}if(\"number\"===t){if(Math.floor(r)!==r)return 9;if(r>=0){if(128>r)return 1;if(256>r)return 2;if(65536>r)return 3;if(4294967296>r)return 5;throw new Error(\"Number too big 0x\"+r.toString(16))}if(r>=-32)return 1;if(r>=-128)return 2;if(r>=-32768)return 3;if(r>=-2147483648)return 5;throw new Error(\"Number too small -0x\"+r.toString(16).substr(1))}if(\"boolean\"===t||null===r)return 1;if(\"object\"===t){var e,o=0;if(Array.isArray(r)){e=r.length;for(var a=0;e>a;a++)o+=i(r[a])}else{var u=Object.keys(r);e=u.length;for(var a=0;e>a;a++){var s=u[a];o+=i(s)+i(r[s])}}if(16>e)return 1+o;if(65536>e)return 3+o;if(4294967296>e)return 5+o;throw new Error(\"Array or object too long 0x\"+e.toString(16))}throw new Error(\"Unknown type \"+t)}function o(r){var t=new ArrayBuffer(i(r)),n=new DataView(t);return e(r,n,0),new Uint8Array(t)}function a(r,t,n){return t?new r(t.buffer,t.byteOffset,t.byteLength/(n||1)):void 0}function u(r){return a(DataView,r)}function s(r){return a(Uint8Array,r)}function f(r){return a(Int8Array,r)}function c(r){return a(Int32Array,r,4)}function d(r){return a(Float32Array,r,4)}function l(r,t){var n=r.length/2;t||(t=new Int16Array(n));for(var e=0,i=0;n>e;++e,i+=2)t[e]=r[i]<<8^r[i+1]<<0;return t}function v(r,t){var n=r.length;t||(t=new Uint8Array(2*n));for(var e=u(t),i=0;n>i;++i)e.setInt16(2*i,r[i]);return s(t)}function g(r,t){var n=r.length/4;t||(t=new Int32Array(n));for(var e=0,i=0;n>e;++e,i+=4)t[e]=r[i]<<24^r[i+1]<<16^r[i+2]<<8^r[i+3]<<0;return t}function L(r,t){var n=r.length;t||(t=new Uint8Array(4*n));for(var e=u(t),i=0;n>i;++i)e.setInt32(4*i,r[i]);return s(t)}function h(r,t){var n=r.length;t||(t=new Float32Array(n/4));for(var e=u(t),i=u(r),o=0,a=0,s=n/4;s>o;++o,a+=4)e.setFloat32(a,i.getFloat32(a),!0);return t}function y(r,t,n){var e=r.length,i=1/t;n||(n=new Float32Array(e));for(var o=0;e>o;++o)n[o]=r[o]*i;return n}function m(r,t,n){var e=r.length;n||(n=new Int32Array(e));for(var i=0;e>i;++i)n[i]=Math.round(r[i]*t);return n}function p(r,t){var n,e;if(!t){var i=0;for(n=0,e=r.length;e>n;n+=2)i+=r[n+1];t=new r.constructor(i)}var o=0;for(n=0,e=r.length;e>n;n+=2)for(var a=r[n],u=r[n+1],s=0;u>s;++s)t[o]=a,++o;return t}function U(r){if(0===r.length)return new Int32Array;var t,n,e=2;for(t=1,n=r.length;n>t;++t)r[t-1]!==r[t]&&(e+=2);var i=new Int32Array(e),o=0,a=1;for(t=1,n=r.length;n>t;++t)r[t-1]!==r[t]?(i[o]=r[t-1],i[o+1]=a,a=1,o+=2):++a;return i[o]=r[r.length-1],i[o+1]=a,i}function b(r,t){var n=r.length;t||(t=new r.constructor(n)),n&&(t[0]=r[0]);for(var e=1;n>e;++e)t[e]=r[e]+t[e-1];return t}function I(r,t){var n=r.length;t||(t=new r.constructor(n)),t[0]=r[0];for(var e=1;n>e;++e)t[e]=r[e]-r[e-1];return t}function w(r,t){var n,e,i=r instanceof Int8Array?127:32767,o=-i-1,a=r.length;if(!t){var u=0;for(n=0;a>n;++n)r[n]o&&++u;t=new Int32Array(u)}for(n=0,e=0;a>n;){for(var s=0;r[n]===i||r[n]===o;)s+=r[n],++n;s+=r[n],++n,t[e]=s,++e}return t}function C(r,t){var n,e=t?127:32767,i=-e-1,o=r.length,a=0;for(n=0;o>n;++n){var u=r[n];0===u?++a:a+=u===e||u===i?2:u>0?Math.ceil(u/e):Math.ceil(u/i)}var s=t?new Int8Array(a):new Int16Array(a),f=0;for(n=0;o>n;++n){var u=r[n];if(u>=0)for(;u>=e;)s[f]=e,++f,u-=e;else for(;i>=u;)s[f]=i,++f,u-=i;s[f]=u,++f}return s}function A(r,t){return b(p(r),t)}function x(r){return U(I(r))}function M(r,t,n){return y(p(r,c(n)),t,n)}function F(r,t){return U(m(r,t))}function S(r,t,n){return y(b(r,c(n)),t,n)}function E(r,t,n){return I(m(r,t),n)}function N(r,t,n){return y(w(r,c(n)),t,n)}function O(r,t,n){var e=w(r,c(n));return S(e,t,d(e))}function T(r,t,n){return C(E(r,t),n)}function k(r){var t=u(r),n=t.getInt32(0),e=t.getInt32(4),i=r.subarray(8,12),r=r.subarray(12);return[n,r,e,i]}function j(r,t,n,e){var i=new ArrayBuffer(12+e.byteLength),o=new Uint8Array(i),a=new DataView(i);return a.setInt32(0,r),a.setInt32(4,t),n&&o.set(n,8),o.set(e,12),o}function q(r){var t=r.length,n=s(r);return j(2,t,void 0,n)}function D(r){var t=r.length,n=L(r);return j(4,t,void 0,n)}function P(r,t){var n=r.length/t,e=L([t]),i=s(r);return j(5,n,e,i)}function z(r){var t=r.length,n=L(U(r));return j(6,t,void 0,n)}function B(r){var t=r.length,n=L(x(r));return j(8,t,void 0,n)}function V(r,t){var n=r.length,e=L([t]),i=L(F(r,t));return j(9,n,e,i)}function G(r,t){var n=r.length,e=L([t]),i=v(T(r,t));return j(10,n,e,i)}function R(r){var t={};return rr.forEach(function(n){void 0!==r[n]&&(t[n]=r[n])}),r.bondAtomList&&(t.bondAtomList=D(r.bondAtomList)),r.bondOrderList&&(t.bondOrderList=q(r.bondOrderList)),t.xCoordList=G(r.xCoordList,1e3),t.yCoordList=G(r.yCoordList,1e3),t.zCoordList=G(r.zCoordList,1e3),r.bFactorList&&(t.bFactorList=G(r.bFactorList,100)),r.atomIdList&&(t.atomIdList=B(r.atomIdList)),r.altLocList&&(t.altLocList=z(r.altLocList)),r.occupancyList&&(t.occupancyList=V(r.occupancyList,100)),t.groupIdList=B(r.groupIdList),t.groupTypeList=D(r.groupTypeList),r.secStructList&&(t.secStructList=q(r.secStructList,1)),r.insCodeList&&(t.insCodeList=z(r.insCodeList)),r.sequenceIndexList&&(t.sequenceIndexList=B(r.sequenceIndexList)),t.chainIdList=P(r.chainIdList,4),r.chainNameList&&(t.chainNameList=P(r.chainNameList,4)),t}function H(r){function t(r){for(var t={},n=0;r>n;n++){var e=o();t[e]=o()}return t}function n(t){var n=r.subarray(a,a+t);return a+=t,n}function e(t){var n=r.subarray(a,a+t);a+=t;var e=65535;if(t>e){for(var i=[],o=0;on;n++)t[n]=o();return t}function o(){var o,s,f=r[a];if(0===(128&f))return a++,f;if(128===(240&f))return s=15&f,a++,t(s);if(144===(240&f))return s=15&f,a++,i(s);if(160===(224&f))return s=31&f,a++,e(s);if(224===(224&f))return o=u.getInt8(a),a++,o;switch(f){case 192:return a++,null;case 194:return a++,!1;case 195:return a++,!0;case 196:return s=u.getUint8(a+1),a+=2,n(s);case 197:return s=u.getUint16(a+1),a+=3,n(s);case 198:return s=u.getUint32(a+1),a+=5,n(s);case 202:return o=u.getFloat32(a+1),a+=5,o;case 203:return o=u.getFloat64(a+1),a+=9,o;case 204:return o=r[a+1],a+=2,o;case 205:return o=u.getUint16(a+1),a+=3,o;case 206:return o=u.getUint32(a+1),a+=5,o;case 208:return o=u.getInt8(a+1),a+=2,o;case 209:return o=u.getInt16(a+1),a+=3,o;case 210:return o=u.getInt32(a+1),a+=5,o;case 217:return s=u.getUint8(a+1),a+=2,e(s);case 218:return s=u.getUint16(a+1),a+=3,e(s);case 219:return s=u.getUint32(a+1),a+=5,e(s);case 220:return s=u.getUint16(a+1),a+=3,i(s);case 221:return s=u.getUint32(a+1),a+=5,i(s);case 222:return s=u.getUint16(a+1),a+=3,t(s);case 223:return s=u.getUint32(a+1),a+=5,t(s)}throw new Error(\"Unknown type 0x\"+f.toString(16))}var a=0,u=new DataView(r.buffer);return o()}function W(r,t,n,e){switch(r){case 1:return h(t);case 2:return f(t);case 3:return l(t);case 4:return g(t);case 5:return s(t);case 6:return p(g(t),new Uint8Array(n));case 7:return p(g(t));case 8:return A(g(t));case 9:return M(g(t),g(e)[0]);case 10:return O(l(t),g(e)[0]);case 11:return y(l(t),g(e)[0]);case 12:return N(l(t),g(e)[0]);case 13:return N(f(t),g(e)[0]);case 14:return w(l(t));case 15:return w(f(t))}}function X(r,t){t=t||{};var n=t.ignoreFields,e={};return nr.forEach(function(t){var i=n?-1!==n.indexOf(t):!1,o=r[t];i||void 0===o||(o instanceof Uint8Array?e[t]=W.apply(null,k(o)):e[t]=o)}),e}function J(r){return String.fromCharCode.apply(null,r).replace(/\\0/g,\"\")}function K(r,t,n){n=n||{};var e,i,o,a,u,s,f=n.firstModelOnly,c=t.onModel,d=t.onChain,l=t.onGroup,v=t.onAtom,g=t.onBond,L=0,h=0,y=0,m=0,p=0,U=-1,b=r.chainNameList,I=r.secStructList,w=r.insCodeList,C=r.sequenceIndexList,A=r.atomIdList,x=r.bFactorList,M=r.altLocList,F=r.occupancyList,S=r.bondAtomList,E=r.bondOrderList;for(e=0,i=r.chainsPerModel.length;i>e&&!(f&&L>0);++e){var N=r.chainsPerModel[L];for(c&&c({chainCount:N,modelIndex:L}),o=0;N>o;++o){var O=r.groupsPerChain[h];if(d){var T=J(r.chainIdList.subarray(4*h,4*h+4)),k=null;b&&(k=J(b.subarray(4*h,4*h+4))),d({groupCount:O,chainIndex:h,modelIndex:L,chainId:T,chainName:k})}for(a=0;O>a;++a){var j=r.groupList[r.groupTypeList[y]],q=j.atomNameList.length;if(l){var D=null;I&&(D=I[y]);var P=null;r.insCodeList&&(P=String.fromCharCode(w[y]));var z=null;C&&(z=C[y]),l({atomCount:q,groupIndex:y,chainIndex:h,modelIndex:L,groupId:r.groupIdList[y],groupType:r.groupTypeList[y],groupName:j.groupName,singleLetterCode:j.singleLetterCode,chemCompType:j.chemCompType,secStruct:D,insCode:P,sequenceIndex:z})}for(u=0;q>u;++u){if(v){var B=null;A&&(B=A[m]);var V=null;x&&(V=x[m]);var G=null;M&&(G=String.fromCharCode(M[m]));var R=null;F&&(R=F[m]),v({atomIndex:m,groupIndex:y,chainIndex:h,modelIndex:L,atomId:B,element:j.elementList[u],atomName:j.atomNameList[u],formalCharge:j.formalChargeList[u],xCoord:r.xCoordList[m],yCoord:r.yCoordList[m],zCoord:r.zCoordList[m],bFactor:V,altLoc:G,occupancy:R})}m+=1}if(g){var H=j.bondAtomList;for(u=0,s=j.bondOrderList.length;s>u;++u)g({atomIndex1:m-q+H[2*u],atomIndex2:m-q+H[2*u+1],bondOrder:j.bondOrderList[u]})}y+=1}h+=1}if(p=U+1,U=m-1,g&&S)for(u=0,s=S.length;s>u;u+=2){var W=S[u],X=S[u+1];(W>=p&&U>=W||X>=p&&U>=X)&&g({atomIndex1:W,atomIndex2:X,bondOrder:E?E[u/2]:null})}L+=1}}function Q(r){return o(R(r))}function Y(r,t){r instanceof ArrayBuffer&&(r=new Uint8Array(r));var n;return n=r instanceof Uint8Array?H(r):r,X(n,t)}function Z(r,t,n,e){function i(){try{var r=Y(o.response);n(r)}catch(t){e(t)}}var o=new XMLHttpRequest;o.addEventListener(\"load\",i,!0),o.addEventListener(\"error\",e,!0),o.responseType=\"arraybuffer\",o.open(\"GET\",t+r.toUpperCase()),o.send()}function $(r,t,n){Z(r,or,t,n)}function _(r,t,n){Z(r,ar,t,n)}var rr=[\"mmtfVersion\",\"mmtfProducer\",\"unitCell\",\"spaceGroup\",\"structureId\",\"title\",\"depositionDate\",\"releaseDate\",\"experimentalMethods\",\"resolution\",\"rFree\",\"rWork\",\"bioAssemblyList\",\"ncsOperatorList\",\"entityList\",\"groupList\",\"numBonds\",\"numAtoms\",\"numGroups\",\"numChains\",\"numModels\",\"groupsPerChain\",\"chainsPerModel\"],tr=[\"xCoordList\",\"yCoordList\",\"zCoordList\",\"groupIdList\",\"groupTypeList\",\"chainIdList\",\"bFactorList\",\"atomIdList\",\"altLocList\",\"occupancyList\",\"secStructList\",\"insCodeList\",\"sequenceIndexList\",\"chainNameList\",\"bondAtomList\",\"bondOrderList\"],nr=rr.concat(tr),er=\"v1.1.0dev\",ir=\"//mmtf.rcsb.org/v1.0/\",or=ir+\"full/\",ar=ir+\"reduced/\";r.encode=Q,r.decode=Y,r.traverse=K,r.fetch=$,r.fetchReduced=_,r.version=er,r.fetchUrl=or,r.fetchReducedUrl=ar,r.encodeMsgpack=o,r.encodeMmtf=R,r.decodeMsgpack=H,r.decodeMmtf=X});","module.exports = __WEBPACK_EXTERNAL_MODULE__535__;","module.exports = __WEBPACK_EXTERNAL_MODULE__698__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar defaults = {\n lines: 12,\n length: 7,\n width: 5,\n radius: 10,\n scale: 1.0,\n corners: 1,\n color: '#000',\n fadeColor: 'transparent',\n animation: 'spinner-line-fade-default',\n rotate: 0,\n direction: 1,\n speed: 1,\n zIndex: 2e9,\n className: 'spinner',\n top: '50%',\n left: '50%',\n shadow: '0 0 1px transparent', // prevent aliased lines\n position: 'absolute',\n};\nvar Spinner = /** @class */ (function () {\n function Spinner(opts) {\n if (opts === void 0) { opts = {}; }\n this.opts = __assign(__assign({}, defaults), opts);\n }\n /**\n * Adds the spinner to the given target element. If this instance is already\n * spinning, it is automatically removed from its previous target by calling\n * stop() internally.\n */\n Spinner.prototype.spin = function (target) {\n this.stop();\n this.el = document.createElement('div');\n this.el.className = this.opts.className;\n this.el.setAttribute('role', 'progressbar');\n this.el.style.position = this.opts.position;\n this.el.style.width = \"0\";\n this.el.style.zIndex = this.opts.zIndex.toString();\n this.el.style.left = this.opts.left;\n this.el.style.top = this.opts.top;\n this.el.style.transform = \"scale(\".concat(this.opts.scale, \")\");\n if (target) {\n target.insertBefore(this.el, target.firstChild || null);\n }\n drawLines(this.el, this.opts);\n return this;\n };\n /**\n * Stops and removes the Spinner.\n * Stopped spinners may be reused by calling spin() again.\n */\n Spinner.prototype.stop = function () {\n if (this.el) {\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n this.el = undefined;\n }\n return this;\n };\n return Spinner;\n}());\nexport { Spinner };\n/**\n * Returns the line color from the given string or array.\n */\nfunction getColor(color, idx) {\n return typeof color == 'string' ? color : color[idx % color.length];\n}\n/**\n * Internal method that draws the individual lines.\n */\nfunction drawLines(el, opts) {\n var borderRadius = (Math.round(opts.corners * opts.width * 500) / 1000) + 'px';\n var shadow = 'none';\n if (opts.shadow === true) {\n shadow = '0 2px 4px #000'; // default shadow\n }\n else if (typeof opts.shadow === 'string') {\n shadow = opts.shadow;\n }\n var shadows = parseBoxShadow(shadow);\n for (var i = 0; i < opts.lines; i++) {\n var degrees = ~~(360 / opts.lines * i + opts.rotate);\n var backgroundLine = document.createElement('div');\n backgroundLine.style.position = 'absolute';\n backgroundLine.style.top = \"\".concat(-opts.width / 2, \"px\");\n backgroundLine.style.width = (opts.length + opts.width) + 'px';\n backgroundLine.style.height = opts.width + 'px';\n backgroundLine.style.background = getColor(opts.fadeColor, i);\n backgroundLine.style.borderRadius = borderRadius;\n backgroundLine.style.transformOrigin = 'left';\n backgroundLine.style.transform = \"rotate(\".concat(degrees, \"deg) translateX(\").concat(opts.radius, \"px)\");\n var delay = i * opts.direction / opts.lines / opts.speed;\n delay -= 1 / opts.speed; // so initial animation state will include trail\n var line = document.createElement('div');\n line.style.width = '100%';\n line.style.height = '100%';\n line.style.background = getColor(opts.color, i);\n line.style.borderRadius = borderRadius;\n line.style.boxShadow = normalizeShadow(shadows, degrees);\n line.style.animation = \"\".concat(1 / opts.speed, \"s linear \").concat(delay, \"s infinite \").concat(opts.animation);\n backgroundLine.appendChild(line);\n el.appendChild(backgroundLine);\n }\n}\nfunction parseBoxShadow(boxShadow) {\n var regex = /^\\s*([a-zA-Z]+\\s+)?(-?\\d+(\\.\\d+)?)([a-zA-Z]*)\\s+(-?\\d+(\\.\\d+)?)([a-zA-Z]*)(.*)$/;\n var shadows = [];\n for (var _i = 0, _a = boxShadow.split(','); _i < _a.length; _i++) {\n var shadow = _a[_i];\n var matches = shadow.match(regex);\n if (matches === null) {\n continue; // invalid syntax\n }\n var x = +matches[2];\n var y = +matches[5];\n var xUnits = matches[4];\n var yUnits = matches[7];\n if (x === 0 && !xUnits) {\n xUnits = yUnits;\n }\n if (y === 0 && !yUnits) {\n yUnits = xUnits;\n }\n if (xUnits !== yUnits) {\n continue; // units must match to use as coordinates\n }\n shadows.push({\n prefix: matches[1] || '', // could have value of 'inset' or undefined\n x: x,\n y: y,\n xUnits: xUnits,\n yUnits: yUnits,\n end: matches[8],\n });\n }\n return shadows;\n}\n/**\n * Modify box-shadow x/y offsets to counteract rotation\n */\nfunction normalizeShadow(shadows, degrees) {\n var normalized = [];\n for (var _i = 0, shadows_1 = shadows; _i < shadows_1.length; _i++) {\n var shadow = shadows_1[_i];\n var xy = convertOffset(shadow.x, shadow.y, degrees);\n normalized.push(shadow.prefix + xy[0] + shadow.xUnits + ' ' + xy[1] + shadow.yUnits + shadow.end);\n }\n return normalized.join(', ');\n}\nfunction convertOffset(x, y, degrees) {\n var radians = degrees * Math.PI / 180;\n var sin = Math.sin(radians);\n var cos = Math.cos(radians);\n return [\n Math.round((x * cos + y * sin) * 1000) / 1000,\n Math.round((-x * sin + y * cos) * 1000) / 1000,\n ];\n}\n","//----------------------------------------------------------------------------\r\n// Timer\r\n\r\nexport default class Timer {\r\n constructor() {\r\n this.startTime = 0;\r\n this.oldTime = 0;\r\n this.elapsedTime = 0;\r\n this.running = false;\r\n }\r\n\r\n start() {\r\n this.startTime = Timer.now();\r\n this.oldTime = this.startTime;\r\n this.running = true;\r\n }\r\n\r\n stop() {\r\n this.getElapsedTime();\r\n this.running = false;\r\n }\r\n\r\n getElapsedTime() {\r\n this.update();\r\n return this.elapsedTime;\r\n }\r\n\r\n update() {\r\n let delta = 0;\r\n if (this.running) {\r\n const newTime = Timer.now();\r\n delta = 0.001 * (newTime - this.oldTime);\r\n this.oldTime = newTime;\r\n this.elapsedTime += delta;\r\n }\r\n\r\n return delta;\r\n }\r\n}\r\n\r\nTimer.now = (function () {\r\n const p = typeof window !== 'undefined' && window.performance;\r\n return (p && p.now) ? p.now.bind(p) : Date.now;\r\n}());\r\n","import Timer from '../Timer';\r\n\r\nconst { now } = Timer;\r\n\r\nfunction createElement(tag, id, css) {\r\n const element = document.createElement(tag);\r\n element.id = id;\r\n element.style.cssText = css;\r\n return element;\r\n}\r\n\r\nclass Stats {\r\n constructor() {\r\n this.domElement = createElement('div', 'stats', 'padding:8px');\r\n this._text = createElement('p', 'fps', 'margin:0;color:silver;font-size:large');\r\n this.domElement.appendChild(this._text);\r\n\r\n this._startTime = now();\r\n this._prevTime = this._startTime;\r\n\r\n this._deltas = new Array(20);\r\n this._index = 0;\r\n this._total = 0.0;\r\n this._count = 0;\r\n }\r\n\r\n end() {\r\n const time = now();\r\n const delta = time - this._startTime;\r\n\r\n if (this._count < this._deltas.length) {\r\n this._count++;\r\n } else {\r\n this._total -= this._deltas[this._index];\r\n }\r\n this._total += delta;\r\n this._deltas[this._index] = delta;\r\n this._index = (this._index + 1) % this._deltas.length;\r\n\r\n this.ms = this._total / this._count;\r\n this.fps = 1000 / this.ms;\r\n\r\n if (time > this._prevTime + 1000) {\r\n this._text.textContent = this.fps.toPrecision(2);\r\n this._prevTime = time;\r\n }\r\n\r\n return time;\r\n }\r\n\r\n update() {\r\n this._startTime = this.end();\r\n }\r\n\r\n show(on) {\r\n if (on === undefined) {\r\n on = true;\r\n }\r\n this.domElement.style.display = on ? 'block' : 'none';\r\n }\r\n}\r\n\r\nexport default Stats;\r\n","/**\r\n * This class introduces the simplest event system.\r\n */\r\n\r\nimport _ from 'lodash';\r\n\r\nfunction isUndefOrEqual(param, value) {\r\n return !param || param === value;\r\n}\r\n\r\n/**\r\n * Creates empty dispatcher.\r\n *\r\n * @exports EventDispatcher\r\n * @constructor\r\n */\r\nfunction EventDispatcher() {\r\n this._handlers = {};\r\n}\r\n\r\n/**\r\n * Binds callback on specific event type. Optional `context` parameter\r\n * could be used as 'this' for the `callback`.\r\n * @param {string} type Event name.\r\n * @param {function} callback Callback function.\r\n * @param {Object} [context] 'This' object for the callback.\r\n */\r\nEventDispatcher.prototype.addEventListener = function (type, callback, context) {\r\n let handlers = this._handlers[type];\r\n\r\n if (!handlers) {\r\n this._handlers[type] = [];\r\n handlers = this._handlers[type];\r\n }\r\n\r\n const params = [callback, context];\r\n function _checkPar(par) {\r\n return par[0] === params[0] && par[1] === params[1];\r\n }\r\n\r\n if (_.find(handlers, _checkPar) === undefined) {\r\n handlers.push(params);\r\n }\r\n};\r\n\r\n/**\r\n * Removes a previously-bound callback function from an object.\r\n * If no `context` is specified, all versions of the `callback` with different\r\n * contexts will be removed.\r\n * If no `callback` is specified, all callbacks of the `type` will be removed.\r\n * If no `type` is specified, callbacks for all events will be removed.\r\n * @param {?string} [type] Event type.\r\n * @param {function} [callback] Callback function.\r\n * @param {Object} [context] 'This' object for the callback.\r\n */\r\nEventDispatcher.prototype.removeEventListener = function (type, callback, context) {\r\n const self = this;\r\n _.forEach(self._handlers, (handler, ev) => {\r\n _.remove(handler, (values) => isUndefOrEqual(type, ev)\r\n && isUndefOrEqual(callback, values[0])\r\n && isUndefOrEqual(context, values[1] || self));\r\n });\r\n\r\n this._handlers = _.omitBy(self._handlers, (handler) => handler.length === 0);\r\n};\r\n\r\n/**\r\n * Makes all the callbacks for the specific `event` to trigger.\r\n * @param {Object} event Event.\r\n * @param {string} event.type Type of the event.\r\n */\r\nEventDispatcher.prototype.dispatchEvent = function (event) {\r\n const self = this;\r\n\r\n _.forEach(this._handlers[event.type], (callback) => {\r\n const context = callback[1] || self;\r\n callback[0].apply(context, [event]);\r\n });\r\n};\r\n\r\nexport default EventDispatcher;\r\n","/**\r\n * This module contains class for logging.\r\n * Returns an instance of a logger that have already been created.\r\n * Allows users to log messages for five different levels,\r\n * enable console output and catch signal on each message.\r\n */\r\nimport _ from 'lodash';\r\nimport EventDispatcher from './EventDispatcher';\r\n\r\nconst priorities = {\r\n debug: 0,\r\n info: 1,\r\n report: 2,\r\n warn: 3,\r\n error: 4,\r\n};\r\n\r\n/**\r\n * Create new Logger.\r\n *\r\n * @exports Logger\r\n * @extends EventDispatcher\r\n * @constructor\r\n */\r\nfunction Logger() {\r\n EventDispatcher.call(this);\r\n /** Boolean flag that toggles output to browser console.\r\n * @type {boolean}\r\n */\r\n this.console = false;\r\n this._priority = priorities.warn;\r\n}\r\n\r\nLogger.prototype = Object.create(EventDispatcher.prototype);\r\nLogger.prototype.constructor = Logger;\r\n\r\n/**\r\n * Create new clean instance of the logger.\r\n * @returns {Logger}\r\n */\r\nLogger.prototype.instantiate = function () {\r\n return new Logger();\r\n};\r\n\r\nfunction verify(number) {\r\n if (!_.isNumber(number)) {\r\n throw new Error('Wrong log level specified!');\r\n }\r\n return number;\r\n}\r\n\r\n/**\r\n * @property {string} current threshold for signals and console output.\r\n * @name Logger#level\r\n */\r\nObject.defineProperty(Logger.prototype, 'level', {\r\n get() {\r\n return _.findKey(priorities, (value) => value === this._priority);\r\n },\r\n set(level) {\r\n this._priority = verify(priorities[level]);\r\n },\r\n});\r\n\r\n/**\r\n * Returns the list of all possible level values.\r\n * @returns {Array}\r\n */\r\nLogger.prototype.levels = function () {\r\n return Object.keys(priorities);\r\n};\r\n\r\n/**\r\n * Add new message with specified level.\r\n * @param {string} level - level of the message, must be one of the\r\n * {'debug' | 'info' | 'report' | 'warn' | 'error'}\r\n * @param {string} message\r\n */\r\nLogger.prototype.message = function (level, message) {\r\n const priority = verify(priorities[level]);\r\n this._message(priority, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('debug', ...);\r\n * @param message\r\n */\r\nLogger.prototype.debug = function (message) {\r\n this._message(priorities.debug, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('info', ...);\r\n * @param message\r\n */\r\nLogger.prototype.info = function (message) {\r\n this._message(priorities.info, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('report', ...);\r\n * @param message\r\n */\r\nLogger.prototype.report = function (message) {\r\n this._message(priorities.report, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('warn', ...);\r\n * @param message\r\n */\r\nLogger.prototype.warn = function (message) {\r\n this._message(priorities.warn, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('error', ...);\r\n * @param message\r\n */\r\nLogger.prototype.error = function (message) {\r\n this._message(priorities.error, message);\r\n};\r\n\r\n/**\r\n * Add new message with specified priority.\r\n * @param {number} priority - priority of the message\r\n * @param {string} message\r\n * @private\r\n */\r\nLogger.prototype._message = function (priority, message) {\r\n if (priority < this._priority) {\r\n return;\r\n }\r\n const level = _.findKey(priorities, (value) => value === priority);\r\n message = String(message);\r\n if (this.console) {\r\n const output = `miew:${level}: ${message}`;\r\n if (level === 'error') {\r\n console.error(output); // NOSONAR\r\n } else if (level === 'warn') {\r\n console.warn(output); // NOSONAR\r\n } else {\r\n console.log(output); // NOSONAR\r\n }\r\n }\r\n this.dispatchEvent({ type: 'message', level, message });\r\n};\r\n\r\nexport default new Logger();\r\n","import _ from 'lodash';\r\nimport logger from './utils/logger';\r\n\r\nconst browserType = {\r\n DEFAULT: 0,\r\n SAFARI: 1,\r\n};\r\n//----------------------------------------------------------------------------\r\n// Query string\r\n\r\n/**\r\n * Escape only dangerous chars in a query string component, use a plus instead of a space.\r\n *\r\n * [RFC 3986](https://tools.ietf.org/html/rfc3986) allows the following chars in the query (see 3.4):\r\n *\r\n * A-Z a-z 0-9 - _ . ~ ! $ & ' ( ) * + , ; = : @ / ?\r\n *\r\n * For query string elements we need to escape ampersand, equal sign, and plus,\r\n * but encodeURIComponent() function encodes anything except for the following:\r\n *\r\n * A-Z a-z 0-9 - _ . ~ ! ' ( ) *\r\n *\r\n * @param {string} text - key or value to encode\r\n * @param {string} excludeExp - regexp for symbols to exclude from encoding\r\n * @returns {string} encoded string\r\n */\r\nfunction encodeQueryComponent(text, excludeExp) {\r\n const encode = (code) => String.fromCharCode(parseInt(code.substr(1), 16));\r\n return encodeURIComponent(text).replace(excludeExp, encode).replace(/%20/g, '+');\r\n}\r\n\r\n/**\r\n * Unescape dangerous chars in a query string component.\r\n *\r\n * @param {string} text - encoded key or value\r\n * @returns {string} decoded string\r\n * @see {@link encodeQueryComponent}\r\n */\r\nfunction decodeQueryComponent(text) {\r\n return decodeURIComponent(text.replace(/\\+/g, ' '));\r\n}\r\n\r\n/**\r\n * Parse URL and extract an array of parameters.\r\n * @param {string?} url - URL or query string to parse\r\n * @returns {Array} array of (key, value) pairs.\r\n */\r\nfunction getUrlParameters(url) {\r\n url = url || window.location.search;\r\n\r\n const query = url.substring(url.indexOf('?') + 1);\r\n const search = /([^&=]+)=?([^&]*)/g;\r\n const result = [];\r\n let match;\r\n\r\n while ((match = search.exec(query)) !== null) { // eslint-disable-line no-cond-assign\r\n result.push([decodeQueryComponent(match[1]), decodeQueryComponent(match[2])]);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Parse URL and extract an array of parameters as a hash.\r\n * @param {string?} url - URL or query string to parse\r\n * @returns {Object}\r\n */\r\nfunction getUrlParametersAsDict(url) {\r\n const result = {};\r\n const a = getUrlParameters(url);\r\n for (let i = 0; i < a.length; ++i) {\r\n const [key, value] = a[i];\r\n result[key] = value;\r\n }\r\n return result;\r\n}\r\n\r\nfunction resolveURL(str) {\r\n if (typeof URL !== 'undefined') {\r\n try {\r\n if (typeof window !== 'undefined') {\r\n return new URL(str, window.location).href;\r\n }\r\n return new URL(str).href;\r\n } catch (error) {\r\n // IE 11 has a URL object with no constructor available so just try a different approach instead\r\n }\r\n }\r\n if (typeof document !== 'undefined') {\r\n const anchor = document.createElement('a');\r\n anchor.href = str;\r\n return anchor.href;\r\n }\r\n return str;\r\n}\r\n\r\n/**\r\n * Generates regular expression object that includes all symbols\r\n * listed in the argument\r\n * @param symbolStr {string} - String containing characters list.\r\n * @returns {RegExp} - Regular expression.\r\n */\r\nfunction generateRegExp(symbolStr) {\r\n const symbolList = [];\r\n\r\n for (let i = 0, n = symbolStr.length; i < n; ++i) {\r\n symbolList[symbolList.length] = symbolStr[i].charCodeAt(0).toString(16);\r\n }\r\n\r\n const listStr = symbolList.join('|');\r\n\r\n return new RegExp(`%(?:${listStr})`, 'gi');\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Create HTML element\r\n\r\nfunction createElement(tag, attrs, content) {\r\n const element = document.createElement(tag);\r\n let i;\r\n let n;\r\n if (attrs) {\r\n const keys = Object.keys(attrs);\r\n for (i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n element.setAttribute(key, attrs[key]);\r\n }\r\n }\r\n if (content) {\r\n if (!(content instanceof Array)) {\r\n content = [content];\r\n }\r\n for (i = 0, n = content.length; i < n; ++i) {\r\n const child = content[i];\r\n if (typeof child === 'string') {\r\n element.appendChild(document.createTextNode(child));\r\n } else if (child instanceof HTMLElement) {\r\n element.appendChild(child);\r\n }\r\n }\r\n }\r\n return element;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Easy inheritance\r\n\r\n/**\r\n * Derive the class from the base.\r\n * @param cls {function} - Class (constructor) to derive.\r\n * @param base {function} - Class (constructor) to derive from.\r\n * @param members {object=} - Optional instance members to add.\r\n * @param statics {object=} - Optional static class members to add.\r\n * @returns {function} Original class.\r\n */\r\nfunction deriveClass(cls, base, members, statics) {\r\n cls.prototype = _.assign(Object.create(base.prototype), { constructor: cls }, members);\r\n if (statics) {\r\n _.assign(cls, statics);\r\n }\r\n return cls;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Deep prototyping\r\n\r\nfunction deriveDeep(obj, needZeroOwnProperties) {\r\n let res = obj;\r\n let i;\r\n let n;\r\n if (obj instanceof Array) {\r\n res = new Array(obj.length);\r\n for (i = 0, n = obj.length; i < n; ++i) {\r\n res[i] = deriveDeep(obj[i]);\r\n }\r\n } else if (obj instanceof Object) {\r\n res = Object.create(obj);\r\n const keys = Object.keys(obj);\r\n for (i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n const value = obj[key];\r\n const copy = deriveDeep(value);\r\n if (copy !== value) {\r\n res[key] = copy;\r\n }\r\n }\r\n if (needZeroOwnProperties && Object.keys(res).length > 0) {\r\n res = Object.create(res);\r\n }\r\n }\r\n return res;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Colors\r\n\r\nfunction hexColor(color) {\r\n const hex = (`0000000${color.toString(16)}`).substr(-6);\r\n return `#${hex}`;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Debug tracing\r\n\r\nfunction DebugTracer(namespace) {\r\n let enabled = false;\r\n\r\n this.enable = function (on) {\r\n enabled = on;\r\n };\r\n\r\n let indent = 0;\r\n const methods = Object.keys(namespace);\r\n\r\n function wrap(method_, name_) {\r\n return function (...args) {\r\n const spaces = DebugTracer.spaces.substr(0, indent * 2);\r\n if (enabled) {\r\n logger.debug(`${spaces + name_} {`);\r\n }\r\n indent++;\r\n const result = method_.apply(this, args); // eslint-disable-line no-invalid-this\r\n indent--;\r\n if (enabled) {\r\n logger.debug(`${spaces}} // ${name_}`);\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n for (let i = 0, n = methods.length; i < n; ++i) {\r\n const name = methods[i];\r\n const method = namespace[name];\r\n if (method instanceof Function && name !== 'constructor') {\r\n namespace[name] = wrap(method, name);\r\n }\r\n }\r\n}\r\n\r\nDebugTracer.spaces = ' ';\r\n\r\nclass OutOfMemoryError extends Error {\r\n constructor(message) {\r\n super();\r\n this.name = 'OutOfMemoryError';\r\n this.message = message;\r\n }\r\n}\r\n\r\nfunction allocateTyped(TypedArrayName, size) {\r\n let result = null;\r\n try {\r\n result = new TypedArrayName(size);\r\n } catch (e) {\r\n if (e instanceof RangeError) {\r\n throw new OutOfMemoryError(e.message);\r\n } else {\r\n throw e;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Float array conversion\r\n\r\nfunction bytesToBase64(/** ArrayBuffer */ buffer) {\r\n const bytes = new Uint8Array(buffer);\r\n let binary = '';\r\n for (let i = 0; i < bytes.byteLength; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return window.btoa(binary);\r\n}\r\n\r\nfunction bytesFromBase64(/** string */ str) {\r\n const binary = window.atob(str);\r\n const bytes = new Uint8Array(binary.length);\r\n for (let i = 0; i < bytes.length; ++i) {\r\n bytes[i] = binary[i].charCodeAt(0);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\nfunction arrayToBase64(/** number[] */ array, /** function */ TypedArrayClass) {\r\n return bytesToBase64(new TypedArrayClass(array).buffer);\r\n}\r\n\r\nfunction arrayFromBase64(/** string */ str, /** function */ TypedArrayClass) {\r\n return Array.prototype.slice.call(new TypedArrayClass(bytesFromBase64(str)));\r\n}\r\n\r\n// NOTE: this is 1-level comparison\r\nfunction compareOptionsWithDefaults(opts, defOpts) {\r\n const optsStr = [];\r\n if (defOpts && opts) {\r\n const keys = Object.keys(opts);\r\n for (let p = 0; p < keys.length; ++p) {\r\n const key = keys[p];\r\n const value = opts[key];\r\n // TODO add processing for tree structure\r\n if (!(value instanceof Object) && typeof defOpts[key] !== 'undefined' && defOpts[key] !== value) {\r\n optsStr.push(`${key}:${value}`);\r\n }\r\n }\r\n if (optsStr.length > 0) {\r\n return `!${optsStr.join()}`;\r\n }\r\n }\r\n return '';\r\n}\r\n\r\nfunction isAlmostPlainObject(o) {\r\n if (_.isPlainObject(o)) {\r\n return true;\r\n }\r\n const proto = o && Object.getPrototypeOf(o);\r\n return !!proto && !proto.hasOwnProperty('constructor') && isAlmostPlainObject(proto);\r\n}\r\n\r\n/**\r\n * Build an object that contains properties (and subproperties) of `src` different from those\r\n * in `dst`. Objects are parsed recursively, other values (including arrays) are compared for\r\n * equality using `_.isEqual()`.\r\n * @param {!object} src - a new object to compare, may contain changed or new properties\r\n * @param {!object} dst - an old reference object\r\n */\r\nfunction objectsDiff(src, dst) {\r\n const diff = {};\r\n _.forIn(src, (srcValue, key) => {\r\n const dstValue = dst[key];\r\n if (isAlmostPlainObject(srcValue) && isAlmostPlainObject(dstValue)) {\r\n const deepDiff = objectsDiff(srcValue, dstValue);\r\n if (!_.isEmpty(deepDiff)) {\r\n diff[key] = deepDiff;\r\n }\r\n } else if (!_.isEqual(srcValue, dstValue)) {\r\n diff[key] = srcValue;\r\n }\r\n });\r\n return diff;\r\n}\r\n\r\nfunction forInRecursive(object, callback) {\r\n function iterateThrough(obj, prefix) {\r\n _.forIn(obj, (value, key) => {\r\n const newPref = prefix + (prefix.length > 0 ? '.' : '');\r\n if (value instanceof Object) {\r\n iterateThrough(value, newPref + key);\r\n } else if (value !== undefined) {\r\n callback(value, newPref + key);\r\n }\r\n });\r\n }\r\n iterateThrough(object, '');\r\n}\r\n\r\nfunction enquoteString(value) {\r\n if (_.isString(value)) {\r\n return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\r\n }\r\n return value;\r\n}\r\n\r\nfunction unquoteString(value) {\r\n if (!_.isString(value)) {\r\n return value;\r\n }\r\n if (value[0] === '\"' && value[value.length - 1] === '\"') {\r\n value = value.slice(1, value.length - 1);\r\n return value.replace(/\\\\\"/g, '\"');\r\n }\r\n if (value[0] === \"'\" && value[value.length - 1] === \"'\") {\r\n value = value.slice(1, value.length - 1);\r\n return value.replace(/\\\\'/g, \"'\");\r\n }\r\n throw new SyntaxError('Incorrect string format, can\\'t unqute it');\r\n}\r\n\r\nfunction getFileExtension(fileName) {\r\n return fileName.slice((Math.max(0, fileName.lastIndexOf('.')) || Infinity));\r\n}\r\n\r\nfunction splitFileName(fileName) {\r\n const ext = getFileExtension(fileName);\r\n const name = fileName.slice(0, fileName.length - ext.length);\r\n return [name, ext];\r\n}\r\n\r\nfunction dataUrlToBlob(url) {\r\n const parts = url.split(/[:;,]/);\r\n const partsCount = parts.length;\r\n if (partsCount >= 3 && parts[partsCount - 2] === 'base64') {\r\n return new Blob([bytesFromBase64(parts[partsCount - 1])]);\r\n }\r\n return null;\r\n}\r\n\r\nfunction getBrowser() {\r\n if (navigator.vendor && navigator.vendor.indexOf('Apple') > -1\r\n && navigator.userAgent\r\n && navigator.userAgent.indexOf('CriOS') === -1\r\n && navigator.userAgent.indexOf('FxiOS') === -1) {\r\n return browserType.SAFARI;\r\n }\r\n return browserType.DEFAULT;\r\n}\r\n\r\nfunction shotOpen(url) {\r\n if (typeof window !== 'undefined') {\r\n window.open().document.write(``);\r\n }\r\n}\r\n\r\nfunction shotDownload(dataUrl, filename) {\r\n if (!dataUrl || dataUrl.substr(0, 5) !== 'data:') {\r\n return;\r\n }\r\n if (!filename) {\r\n filename = ['screenshot-', +new Date(), '.png'].join('');\r\n }\r\n if (typeof window !== 'undefined' && window.navigator && window.navigator.msSaveBlob) {\r\n window.navigator.msSaveBlob(dataUrlToBlob(dataUrl), filename);\r\n } else if (typeof document !== 'undefined') {\r\n const link = document.createElement('a');\r\n link.download = filename;\r\n link.innerHTML = 'download';\r\n link.href = window.URL.createObjectURL(dataUrlToBlob(dataUrl));\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n}\r\n\r\nfunction download(data, filename, type) {\r\n const blobData = new Blob([data]);\r\n\r\n if (!filename) {\r\n filename = ['data', +new Date()].join('');\r\n }\r\n\r\n if (!type) {\r\n filename += blobData.type || '.bin';\r\n } else {\r\n filename += `.${type}`;\r\n }\r\n\r\n if (typeof window !== 'undefined' && window.navigator && window.navigator.msSaveBlob) {\r\n window.navigator.msSaveBlob(blobData, filename);\r\n } else if (typeof document !== 'undefined') {\r\n const link = document.createElement('a');\r\n link.download = filename;\r\n link.innerHTML = 'download';\r\n link.href = window.URL.createObjectURL(blobData);\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n}\r\n\r\nfunction copySubArrays(src, dst, indices, itemSize) {\r\n for (let i = 0, n = indices.length; i < n; ++i) {\r\n for (let j = 0; j < itemSize; ++j) {\r\n dst[i * itemSize + j] = src[indices[i] * itemSize + j];\r\n }\r\n }\r\n}\r\n\r\nfunction shallowCloneNode(node) {\r\n const newNode = node.cloneNode(true);\r\n newNode.worldPos = node.worldPos;\r\n // .style property is readonly, so \"newNode.style = node.style;\" won't work (and we don't need it, right?)\r\n return newNode;\r\n}\r\n\r\nconst unquotedStringRE = /^[a-zA-Z0-9_]*$/;\r\nconst enquoteHelper = ['\"', '', '\"'];\r\n\r\n// verify and correct if needed selctor identifier\r\nfunction correctSelectorIdentifier(value) {\r\n if (unquotedStringRE.test(value)) {\r\n return value;\r\n }\r\n // quote incorrect identifier\r\n enquoteHelper[1] = value;\r\n return enquoteHelper.join('');\r\n}\r\n\r\n/**\r\n * Concatenates two TypedArray. Doesn't check null refs o type equality\r\n * Attention! It must be use very rarely because requires memory reallocation every time. Use MergeTypedArraysUnsafe to\r\n * unite array of subarrays.\r\n * @param{TypedArray} first - destination array\r\n * @param{TypedArray} second - source array\r\n * @returns{TypedArray} resulting concatenated array\r\n */\r\nfunction concatTypedArraysUnsafe(first, second) {\r\n const result = new first.constructor(first.length + second.length);\r\n result.set(first);\r\n result.set(second, first.length);\r\n return result;\r\n}\r\n\r\n/**\r\n * Merges array of TypedArray into TypedArray. Doesn't check null refs o type equality\r\n * @param{array} array - source array of subarrays\r\n * @returns{TypedArray} resulting merged array\r\n */\r\nfunction mergeTypedArraysUnsafe(array) {\r\n if (array.length <= 0) {\r\n return null;\r\n }\r\n // count the size\r\n const size = array.reduce((acc, cur) => acc + cur.length, 0);\r\n // create combined array\r\n const result = new array[0].constructor(size);\r\n for (let i = 0, start = 0; i < array.length; i++) {\r\n const count = array[i].length;\r\n result.set(array[i], start);\r\n start += count;\r\n }\r\n return result;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Exports\r\n\r\nexport default {\r\n browserType,\r\n encodeQueryComponent,\r\n decodeQueryComponent,\r\n getUrlParameters,\r\n getUrlParametersAsDict,\r\n resolveURL,\r\n generateRegExp,\r\n createElement,\r\n deriveClass,\r\n deriveDeep,\r\n hexColor,\r\n DebugTracer,\r\n OutOfMemoryError,\r\n allocateTyped,\r\n bytesFromBase64,\r\n bytesToBase64,\r\n arrayFromBase64,\r\n arrayToBase64,\r\n compareOptionsWithDefaults,\r\n objectsDiff,\r\n forInRecursive,\r\n enquoteString,\r\n unquoteString,\r\n getBrowser,\r\n shotOpen,\r\n shotDownload,\r\n copySubArrays,\r\n shallowCloneNode,\r\n correctSelectorIdentifier,\r\n getFileExtension,\r\n splitFileName,\r\n download,\r\n concatTypedArraysUnsafe,\r\n mergeTypedArraysUnsafe,\r\n};\r\n","import EventDispatcher from './EventDispatcher';\r\n\r\nexport default class JobHandle extends EventDispatcher {\r\n constructor() {\r\n super();\r\n this._shouldCancel = false;\r\n }\r\n\r\n cancel() {\r\n this._shouldCancel = true;\r\n this.dispatchEvent({ type: 'cancel' });\r\n }\r\n\r\n shouldCancel() {\r\n return this._shouldCancel;\r\n }\r\n\r\n // slaves use this to notify master about their events\r\n // master routes these notifications to a single event slot\r\n notify(event) {\r\n this.dispatchEvent({ type: 'notification', slaveEvent: event });\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport utils from './utils';\r\nimport EventDispatcher from './utils/EventDispatcher';\r\n\r\nconst VERSION = 0;\r\n\r\n//----------------------------------------------------------------------------\r\n// DEFAULT SETTINGS\r\n//----------------------------------------------------------------------------\r\n\r\n/**\r\n * Polygonal complexity settings.\r\n *\r\n * @typedef PolyComplexity\r\n * @property {number} poor\r\n * @property {number} low\r\n * @property {number} medium\r\n * @property {number} high\r\n * @property {number} ultra\r\n */\r\n\r\n/**\r\n * @alias SettingsObject\r\n * @namespace\r\n */\r\nconst defaults = {\r\n /**\r\n * Default options for all available modes.\r\n * Use {@link Mode.id} as a dictionary key to access mode options.\r\n *\r\n * Usually you don't need to override these settings. You may specify mode options as a parameter during\r\n * {@link Mode} construction.\r\n *\r\n * @memberof SettingsObject#\r\n * @type {Object.}\r\n *\r\n * @property {LinesModeOptions} LN - Lines mode options.\r\n * @property {LicoriceModeOptions} LC - Licorice mode options.\r\n * @property {BallsAndSticksModeOptions} BS - Balls and Sticks mode options.\r\n * @property {VanDerWaalsModeOptions} VW - Van der Waals mode options.\r\n * @property {TraceModeOptions} TR - Trace mode options.\r\n * @property {TubeModeOptions} TU - Tube mode options.\r\n * @property {CartoonModeOptions} CA - Cartoon mode options.\r\n * @property {QuickSurfaceModeOptions} QS - Contact Surface mode options.\r\n * @property {IsoSurfaceSASModeOptions} SA - Solvent Accessible Surface mode options.\r\n * @property {IsoSurfaceSESModeOptions} SE - Solvent Excluded Surface mode options.\r\n * @property {ContactSurfaceModeOptions} CS - Contact Surface mode options.\r\n * @property {TextModeOptions} TX - Text mode options.\r\n * @property {VolumeDensityModeOptions} VD - Volume Density mode options.\r\n */\r\n modes: {\r\n //----------------------------------------------------------------------------\r\n // BALLS AND STICKS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Balls and Sticks mode options.\r\n *\r\n * @typedef BallsAndSticksModeOptions\r\n *\r\n * @property {number} atom - Sphere radius as a fraction of Van der Waals atom radius.\r\n * @property {number} bond - Cylinder radius in angstroms.\r\n * @property {number} space - Fraction of the space around one cylinder. Zero means that cylinder fills all\r\n * available space.\r\n * @property {boolean} multibond - Toggles rendering of multiple ordered bonds.\r\n * @property {number} aromrad - Minor radius of a torus for aromatic loops.\r\n * @property {boolean} showarom - Toggles rendering of aromatic loops.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n BS: {\r\n atom: 0.23,\r\n bond: 0.15,\r\n space: 0.5,\r\n multibond: true,\r\n aromrad: 0.1,\r\n showarom: true,\r\n polyComplexity: {\r\n poor: 3,\r\n low: 4,\r\n medium: 6,\r\n high: 12,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // VAN DER WAALS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Van der Waals mode options.\r\n *\r\n * @typedef VanDerWaalsModeOptions\r\n *\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n VW: {\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 8,\r\n high: 16,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // LINES\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Lines mode options.\r\n *\r\n * @typedef LinesModeOptions\r\n *\r\n * @property {boolean} multibond - Flag, that toggles rendering of multiple ordered bonds.\r\n * @property {boolean} showarom - Flag, that toggles rendering of aromatic loops.\r\n * @property {number} offsarom - Offset between bonds and aromatic cycle.\r\n * @property {number} chunkarom - Number of pieces in a-loop arc, corresponding to atom.\r\n * @property {number} atom - Collision radius for atoms picking.\r\n * @property {number} lineWidth - Line width in pixels (not used in thin lines).\r\n */\r\n LN: {\r\n multibond: true,\r\n showarom: true,\r\n offsarom: 0.2,\r\n chunkarom: 10,\r\n atom: 0.23,\r\n lineWidth: 2,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // LICORICE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Licorice mode options.\r\n *\r\n * @typedef LicoriceModeOptions\r\n *\r\n * @property {number} bond - Bond cylinder radius.\r\n * @property {number} space - Fraction of the space around one cylinder. Zero means that cylinder fills all\r\n * available space.\r\n * @property {boolean} multibond - Flag, that toggles rendering of multiple ordered bonds.\r\n * @property {number} aromrad - Minor radius of a torus for aromatic loops.\r\n * @property {boolean} showarom - Flag, that toggles rendering of aromatic loops.\r\n * @property {PolyComplexity} polyComplexity - Poly complexity values for render modes.\r\n */\r\n LC: {\r\n bond: 0.20,\r\n space: 0.0,\r\n multibond: true,\r\n aromrad: 0.1,\r\n showarom: true,\r\n polyComplexity: {\r\n poor: 3,\r\n low: 4,\r\n medium: 6,\r\n high: 12,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // SURFACE SAS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Solvent Accessible Surface mode options.\r\n *\r\n * @typedef IsoSurfaceSASModeOptions\r\n *\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {number} probeRadius - Radius of the probe.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n SA: {\r\n zClip: false,\r\n probeRadius: 1.5,\r\n subset: '',\r\n wireframe: false,\r\n polyComplexity: {\r\n poor: 6,\r\n low: 8,\r\n medium: 16,\r\n high: 30,\r\n ultra: 60,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // SURFACE SES\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Solvent Excluded Surface mode options.\r\n *\r\n * @typedef IsoSurfaceSESModeOptions\r\n *\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {number} probeRadius - Radius of the probe.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n SE: {\r\n zClip: false,\r\n probeRadius: 1.5,\r\n subset: '',\r\n wireframe: false,\r\n polyComplexity: {\r\n poor: 6,\r\n low: 8,\r\n medium: 16,\r\n high: 30,\r\n ultra: 60,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // QUICK SURFACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Quick Surface mode options.\r\n *\r\n * @typedef QuickSurfaceModeOptions\r\n *\r\n * @property {number} isoValue - Isovalue of the surface to extract.\r\n * @property {number} scale - Radius scale for the surface being built.\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} gaussLim - Gauss lim for coloring the bigger the value, the smoother our colors are.\r\n * @property {PolyComplexity} gridSpacing - Poly complexity values for render modes. In this case the value\r\n * corresponds to the grid density.\r\n */\r\n QS: {\r\n isoValue: 0.5,\r\n gaussLim: {\r\n poor: 1.5,\r\n low: 2.0,\r\n medium: 2.5,\r\n high: 3.0,\r\n ultra: 4.0,\r\n },\r\n scale: 1.0,\r\n wireframe: false,\r\n gridSpacing: {\r\n poor: 2,\r\n low: 1.5,\r\n medium: 1,\r\n high: 0.5,\r\n ultra: 0.25,\r\n },\r\n subset: '',\r\n zClip: false,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // CONTACT SURFACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Contact Surface mode options.\r\n *\r\n * @typedef ContactSurfaceModeOptions\r\n *\r\n * @property {number} isoValue - Isovalue of the surface to extract.\r\n * @property {number} probeRadius - Probe radius.\r\n * @property {number} probePositions\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Radius scale for the surface being built.\r\n * Poly complexity values for render modes. In this case the value corresponds to the grid density.\r\n */\r\n CS: {\r\n probeRadius: 1.4,\r\n isoValue: 1.5,\r\n wireframe: false,\r\n probePositions: 30,\r\n polyComplexity: {\r\n poor: 0.5,\r\n low: 1.0,\r\n medium: 1.5,\r\n high: 1.75,\r\n ultra: 2.0,\r\n },\r\n subset: '',\r\n zClip: false,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TRACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Trace mode options.\r\n *\r\n * @typedef TraceModeOptions\r\n *\r\n * @property {number} radius - Cylinder radius.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n TR: {\r\n radius: 0.30,\r\n polyComplexity: {\r\n poor: 12,\r\n low: 16,\r\n medium: 32,\r\n high: 64,\r\n ultra: 64,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TUBE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Tube mode options.\r\n *\r\n * @typedef TubeModeOptions\r\n *\r\n * @property {number} radius - Cylinder radius.\r\n * @property {number} tension - Tension for interpolation.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n * @property {number} heightSegmentsRatio - Poly complexity multiplier for height segments.\r\n */\r\n TU: {\r\n radius: 0.30,\r\n heightSegmentsRatio: 1.5,\r\n tension: -0.7,\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 10,\r\n high: 18,\r\n ultra: 34,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // CARTOON\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Cartoon mode options.\r\n *\r\n * @typedef CartoonModeOptions\r\n *\r\n * @property {number} radius - Standard tube radius.\r\n * @property {number} depth - Height of the secondary structure ribbon.\r\n * @property {number} tension - Tension for interpolation.\r\n * @proprety {object} ss - Secondary structure parameters.\r\n * @proprety {object} ss.helix - Options for helices render.\r\n * @proprety {number} ss.helix.width - Width of the secondary structure ribbon.\r\n * @proprety {number} ss.helix.arrow - Secondary structure's arrow width.\r\n * @proprety {object} ss.strand - Options for strands render.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n * polyComplexity must be even for producing symmetric arrows.\r\n * @property {number} heightSegmentsRatio - Poly complexity multiplier for height segments.\r\n */\r\n CA: {\r\n radius: 0.30,\r\n depth: 0.25,\r\n ss: {\r\n helix: {\r\n width: 1.0,\r\n arrow: 2.0,\r\n },\r\n strand: {\r\n width: 1.0,\r\n arrow: 2.0,\r\n },\r\n },\r\n heightSegmentsRatio: 1.5,\r\n tension: -0.7,\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 10,\r\n high: 18,\r\n ultra: 34,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TEXT\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Text mode options.\r\n *\r\n * @typedef TextModeOptions\r\n *\r\n * @property {string} template - Format string for building output text.\r\n * @property {string} horizontalAlign - Text alignment ('left', 'right', 'center').\r\n * @property {string} verticalAlign - Vertical text box alignment ('top', 'bottom', 'middle').\r\n * @property {number} dx - Text offset x in angstroms.\r\n * @property {number} dy - Text offset y in angstroms.\r\n * @property {number} dz - Text offset z in angstroms.\r\n * @property {string} fg - Color rule for foreground.\r\n * @property {string} bg - Color rule for background.\r\n * @property {boolean} showBg - Flag, that toggles background rendering.\r\n *\r\n */\r\n TX: {\r\n template: '{{Chain}}.{{Residue}}{{Sequence}}.{{Name}}',\r\n horizontalAlign: 'center',\r\n verticalAlign: 'middle',\r\n dx: 0,\r\n dy: 0,\r\n dz: 1,\r\n fg: 'none',\r\n bg: '0x202020',\r\n showBg: true,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // VOLUME DENSITY\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Volume density mode options.\r\n *\r\n * @typedef VolumeDensityModeOptions\r\n *\r\n * @property {number} kSigma - Noise threshold coefficient.\r\n * @property {boolean} frame - flag, that turns on box frame painting.\r\n * @property {boolean} isoMode - flag, that turns on IsoSurface mode instead of Volume Rendering.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n VD: {\r\n kSigma: 1.0,\r\n kSigmaMed: 2.0,\r\n kSigmaMax: 4.0,\r\n frame: true,\r\n isoMode: false,\r\n polyComplexity: {\r\n poor: 2,\r\n low: 3,\r\n medium: 4,\r\n high: 8,\r\n ultra: 10,\r\n },\r\n },\r\n },\r\n\r\n /**\r\n * Default options for all available colorers.\r\n * Use {@link Colorer.id} as a dictionary key to access colorer options.\r\n *\r\n * Usually you don't need to override these settings. You may specify colorer options as a parameter during\r\n * {@link Colorer} construction.\r\n *\r\n * Not all colorers have options.\r\n *\r\n * @memberof SettingsObject#\r\n * @type {Object.}\r\n *\r\n * @property {ElementColorerOptions} EL - Element colorer options.\r\n * @property {SequenceColorerOptions} SQ - Sequence colorer options.\r\n * @property {MoleculeColorerOptions} MO - Molecule colorer options.\r\n * @property {UniformColorerOptions} UN - Uniform colorer options.\r\n * @property {ConditionalColorerOptions} CO - Conditional colorer options.\r\n * @property {TemperatureColorerOptions} TM - Temperature colorer options.\r\n * @property {OccupancyColorerOptions} OC - Occupancy colorer options.\r\n * @property {HydrophobicityColorerOptions} HY - Hydrophobicity colorer options.\r\n */\r\n colorers: {\r\n /**\r\n * Element colorer options.\r\n *\r\n * @typedef ElementColorerOptions\r\n *\r\n * @property {number} carbon - Carbon color or -1 to use default.\r\n */\r\n EL: {\r\n carbon: -1,\r\n },\r\n\r\n /**\r\n * Uniform colorer options.\r\n *\r\n * @typedef UniformColorerOptions\r\n *\r\n * @property {number} color - Single color to paint with.\r\n */\r\n UN: {\r\n color: 0xFFFFFF,\r\n },\r\n\r\n /**\r\n * Conditional colorer options.\r\n *\r\n * @typedef ConditionalColorerOptions\r\n *\r\n * @property {string} subset - Selector string.\r\n * @property {number} color - Color of selected atoms.\r\n * @property {number} baseColor - Color of other atoms.\r\n */\r\n CO: {\r\n subset: 'charged',\r\n color: 0xFF0000,\r\n baseColor: 0xFFFFFF,\r\n },\r\n\r\n /**\r\n * Carbon colorer options.\r\n *\r\n * @typedef CarbonColorerOptions\r\n *\r\n * @property {number} color - Single color to paint carbons\r\n * @property {number} factor - Color factor for not carbon atoms.\r\n */\r\n CB: {\r\n color: 0x909090,\r\n factor: 0.6,\r\n },\r\n\r\n /**\r\n * Sequence colorer options.\r\n *\r\n * @typedef SequenceColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n SQ: {\r\n gradient: 'rainbow',\r\n },\r\n\r\n /**\r\n * Temperature colorer options.\r\n *\r\n * @typedef TemperatureColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n * @property {number} min - Minimal temperature.\r\n * @property {number} max - Maximal temperature.\r\n */\r\n TM: {\r\n gradient: 'temp',\r\n min: 5,\r\n max: 40,\r\n },\r\n\r\n /**\r\n * Occupancy colorer options.\r\n *\r\n * @typedef OccupancyColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n OC: {\r\n gradient: 'reds',\r\n },\r\n\r\n /**\r\n * Hydrophobicity colorer options.\r\n *\r\n * @typedef HydrophobicityColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n HY: {\r\n gradient: 'blue-red',\r\n },\r\n\r\n /**\r\n * Molecule colorer options.\r\n *\r\n * @typedef MoleculeColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n MO: {\r\n gradient: 'rainbow',\r\n },\r\n },\r\n\r\n /*\r\n * Use antialiasing in WebGL.\r\n * @type {boolean}\r\n */\r\n antialias: true,\r\n\r\n /*\r\n * Camera field of view in degrees.\r\n * @type {number}\r\n */\r\n camFov: 45.0,\r\n\r\n /*\r\n * Camera near plane distance.\r\n * @type {number}\r\n */\r\n camNear: 0.5,\r\n\r\n /*\r\n * Camera far plane distance.\r\n * @type {number}\r\n */\r\n camFar: 100.0,\r\n\r\n camDistance: 2.5,\r\n\r\n radiusToFit: 1.0,\r\n\r\n /**\r\n * @type {number}\r\n * @instance\r\n */\r\n fogNearFactor: 0.5, // [0, 1]\r\n\r\n /**\r\n * @type {number}\r\n * @instance\r\n */\r\n fogFarFactor: 1, // [0, 1]\r\n fogAlpha: 1.0,\r\n fogColor: 0x000000,\r\n fogColorEnable: false,\r\n\r\n /**\r\n * Palette used for molecule coloring.\r\n * @type {string}\r\n */\r\n palette: 'JM',\r\n\r\n /*\r\n * Geometry resolution.\r\n * @type {string}\r\n */\r\n resolution: 'medium',\r\n\r\n autoResolution: false/* true */,\r\n\r\n autoPreset: true,\r\n\r\n preset: 'default', // TODO: remove 'preset' from settings, implement autodetection\r\n\r\n presets: {\r\n // Default\r\n default: [{\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n empty: [],\r\n\r\n // Wireframe\r\n wire: [{\r\n mode: 'LN',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n // Small molecules\r\n small: [{\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n // Proteins, nucleic acids etc.\r\n macro: [{\r\n mode: 'CA',\r\n colorer: 'SS',\r\n selector: 'not hetatm',\r\n material: 'SF',\r\n }, {\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'hetatm and not water',\r\n material: 'SF',\r\n }],\r\n },\r\n\r\n objects: {\r\n line: {\r\n color: 0xFFFFFFFF,\r\n dashSize: 0.3,\r\n gapSize: 0.05,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n\r\n bg: {\r\n color: 0x202020,\r\n transparent: false,\r\n },\r\n\r\n draft: {\r\n clipPlane: false,\r\n clipPlaneFactor: 0.5,\r\n clipPlaneSpeed: 0.00003,\r\n },\r\n\r\n /*\r\n * Separate group for plugins.\r\n * Each plugin handles its field by itself.\r\n */\r\n plugins: {\r\n\r\n },\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n axes: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fog: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fps: true,\r\n\r\n /**\r\n * Switch using of z-sprites for sphere and cylinder geometry\r\n * @type {boolean}\r\n * @instance\r\n */\r\n zSprites: true,\r\n\r\n isoSurfaceFakeOpacity: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n suspendRender: true,\r\n\r\n nowater: false,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n autobuild: true,\r\n\r\n /**\r\n * Anti-aliasing.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fxaa: true,\r\n /**\r\n * Outline depths\r\n * @type {boolean}\r\n * @instance\r\n */\r\n outline: {\r\n on: false,\r\n color: 0x000000,\r\n threshold: 0.1,\r\n thickness: 1,\r\n },\r\n\r\n /**\r\n * Ambient Occlusion special effect.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n ao: false,\r\n\r\n /**\r\n * Shadows options.\r\n *\r\n * @property {boolean} shadowMap - enable/disable.\r\n * @property {string} basic/percentage-closer filtering/non-uniform randomizing pcf.\r\n * @property {number} radius for percentage-closer filtering.\r\n */\r\n shadow: {\r\n on: false,\r\n type: 'random'/* basic, pcf, random */,\r\n radius: 1.0,\r\n },\r\n\r\n /**\r\n * Auto-rotation with constant speed.\r\n * @type {number}\r\n * @instance\r\n */\r\n autoRotation: 0.0,\r\n\r\n /**\r\n * Set maximum fps for animation.\r\n * @type {number}\r\n * @instance\r\n */\r\n maxfps: 30,\r\n\r\n /**\r\n * Set fbx output precision.\r\n * @type {number}\r\n * @instance\r\n */\r\n fbxprec: 4,\r\n\r\n /**\r\n * Auto-rotation axis.\r\n *\r\n * - true: complex auto-rotation is about vertical axis\r\n * - false: rotation axis is defined by last user rotation\r\n *\r\n * @type {boolean}\r\n * @instance\r\n */\r\n autoRotationAxisFixed: true,\r\n\r\n /**\r\n * Enable zooming with mouse wheel or pinch gesture.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n zooming: true,\r\n\r\n /**\r\n * Enable picking atoms & residues with left mouse button or touch.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n picking: true,\r\n\r\n /**\r\n * Set picking mode ('atom', 'residue', 'chain', 'molecule').\r\n * @type {string}\r\n * @instance\r\n */\r\n pick: 'atom',\r\n\r\n /**\r\n * Make \"component\" and \"fragment\" editing modes available.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n editing: false,\r\n\r\n /**\r\n * Detect aromatic loops.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n aromatic: false,\r\n\r\n /**\r\n * Load only one biological unit from all those described in PDB file.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n singleUnit: true,\r\n\r\n /**\r\n * Set stereo mode ('NONE', 'SIMPLE', 'DISTORTED', 'ANAGLYPH', 'WEBVR').\r\n * @type {string}\r\n * @instance\r\n */\r\n stereo: 'NONE',\r\n\r\n /**\r\n * Enable smooth transition between views\r\n * @type {boolean}\r\n * @instance\r\n */\r\n interpolateViews: true,\r\n\r\n /**\r\n * Set transparency mode ('standard', 'prepass').\r\n * @type {string}\r\n * @instance\r\n */\r\n transparency: 'prepass',\r\n\r\n /**\r\n * Mouse translation speed.\r\n * @type {number}\r\n * @instance\r\n */\r\n translationSpeed: 2,\r\n\r\n debug: {\r\n example: 3.5,\r\n text: 'hello!',\r\n good: true,\r\n ssaoKernelRadius: 0.7,\r\n ssaoFactor: 0.7,\r\n stereoBarrel: 0.25,\r\n },\r\n use: {\r\n multiFile: false,\r\n },\r\n};\r\n\r\n//----------------------------------------------------------------------------\r\n// SETTINGS CLASS\r\n//----------------------------------------------------------------------------\r\n\r\nfunction Settings() {\r\n EventDispatcher.call(this);\r\n\r\n this.old = null;\r\n this.now = {};\r\n this._changed = {};\r\n\r\n this.reset();\r\n}\r\n\r\nutils.deriveClass(Settings, EventDispatcher, {\r\n defaults,\r\n\r\n set(path, value) {\r\n if (_.isString(path)) {\r\n const oldValue = _.get(this.now, path);\r\n if (oldValue !== value) {\r\n _.set(this.now, path, value);\r\n this._notifyChange(path, value);\r\n }\r\n } else {\r\n const diff = utils.objectsDiff(path, this.now);\r\n if (!_.isEmpty(diff)) {\r\n _.merge(this.now, diff);\r\n this._notifyChanges(diff);\r\n }\r\n }\r\n },\r\n\r\n get(path, defaultValue) {\r\n return _.get(this.now, path, defaultValue);\r\n },\r\n\r\n reset() {\r\n const diff = utils.objectsDiff(defaults, this.now);\r\n this.now = _.cloneDeep(defaults);\r\n this.old = null;\r\n this._notifyChanges(diff);\r\n this._changed = {};\r\n },\r\n\r\n checkpoint() {\r\n this.old = _.cloneDeep(this.now);\r\n this._changed = {};\r\n },\r\n\r\n _notifyChange(path, value) {\r\n this._changed[path] = true;\r\n this.dispatchEvent({ type: `change:${path}`, value });\r\n },\r\n\r\n _notifyChanges(diff) {\r\n utils.forInRecursive(diff, (deepValue, deepPath) => {\r\n this._notifyChange(deepPath, deepValue);\r\n });\r\n },\r\n\r\n changed() {\r\n if (!this.old) {\r\n return [];\r\n }\r\n const { old, now } = this;\r\n const keys = _.filter(Object.keys(this._changed), (key) => _.get(old, key) !== _.get(now, key));\r\n return keys;\r\n },\r\n\r\n applyDiffs(diffs) {\r\n if (diffs.hasOwnProperty('VERSION') && diffs.VERSION !== VERSION) {\r\n throw new Error('Settings version does not match!');\r\n }\r\n // VERSION shouldn't be presented inside settings structure\r\n delete diffs.VERSION;\r\n this.reset();\r\n this.set(diffs);\r\n },\r\n\r\n getDiffs(versioned) {\r\n const diffs = utils.objectsDiff(this.now, defaults);\r\n if (versioned) {\r\n diffs.VERSION = VERSION;\r\n }\r\n return diffs;\r\n },\r\n\r\n setPluginOpts(plugin, opts) {\r\n defaults.plugins[plugin] = _.cloneDeep(opts);\r\n this.now.plugins[plugin] = _.cloneDeep(opts);\r\n },\r\n});\r\n\r\nexport default new Settings();\r\n","import _ from 'lodash';\r\nimport settings from './settings';\r\nimport utils from './utils';\r\nimport logger from './utils/logger';\r\n\r\nlet repIndex = 0;\r\n\r\nfunction asBoolean(value) {\r\n return !(!value || value === '0' || (_.isString(value) && value.toLowerCase() === 'false'));\r\n}\r\n\r\nconst adapters = {\r\n string: String,\r\n number: Number,\r\n boolean: asBoolean,\r\n};\r\n\r\n// Level 1 assignment symbol\r\nconst cL1Ass = '=';\r\n\r\nconst cOptsSep = '!';\r\n// Level 2 (options) assignment symbol\r\nconst cL2Ass = ':';\r\n// Level 2 (options) separator symbol\r\nconst cLSep = ',';\r\n\r\nconst cCommonIgnoreSymbols = '$;@/?';\r\n/**\r\n * We may (and should) leave as is for better readability:\r\n *\r\n * $ , ; : @ / ?\r\n */\r\n/**\r\n * Generate regular expression for symbols excluded for first level encryption\r\n */\r\nfunction getLevel1ExcludedExpr() {\r\n const cLevel1Ignores = ':,';\r\n return utils.generateRegExp(cCommonIgnoreSymbols + cLevel1Ignores);\r\n}\r\n\r\n/**\r\n * Generate regular expression for symbols excluded for first level encryption\r\n * (options, etc, ..)\r\n */\r\nfunction getLevel2ExcludedExpr() {\r\n const cLevel2Ignores = ' ';\r\n return utils.generateRegExp(cCommonIgnoreSymbols + cLevel2Ignores);\r\n}\r\n\r\nconst cL1ExclExpr = getLevel1ExcludedExpr();\r\nfunction encodeQueryComponentL1(value) {\r\n return utils.encodeQueryComponent(value, cL1ExclExpr);\r\n}\r\n\r\nconst cL2ExclExpr = getLevel2ExcludedExpr();\r\nfunction encodeQueryComponentL2(value) {\r\n return utils.encodeQueryComponent(value, cL2ExclExpr);\r\n}\r\n\r\nfunction ensureRepList(opts) {\r\n let { reps } = opts;\r\n if (!reps) {\r\n const { presets } = settings.now;\r\n let preset = opts.preset || settings.now.preset;\r\n reps = presets[preset];\r\n if (!reps) {\r\n logger.warn(`Unknown preset \"${preset}\"`);\r\n [preset] = Object.keys(presets);\r\n reps = presets[preset]; // fall back to any preset\r\n }\r\n opts.preset = preset;\r\n opts.reps = utils.deriveDeep(reps, true);\r\n }\r\n}\r\n\r\nfunction ensureRepAssign(opts, prop, value) {\r\n ensureRepList(opts);\r\n const rep = opts.reps[repIndex];\r\n // prop specified twice therefore start new rep by cloning the current\r\n if (rep.hasOwnProperty(prop)) {\r\n repIndex = opts.reps.length;\r\n opts.reps[repIndex] = utils.deriveDeep(rep, true);\r\n }\r\n if (value !== undefined) {\r\n opts.reps[repIndex][prop] = value;\r\n }\r\n}\r\n\r\nfunction addObject(opts, params, options) {\r\n if (opts._objects === undefined) {\r\n opts._objects = [];\r\n }\r\n\r\n const [type, newOpts] = options;\r\n const newObj = {\r\n type,\r\n params,\r\n };\r\n\r\n if (newOpts !== undefined) {\r\n newObj.opts = newOpts;\r\n }\r\n\r\n opts._objects[opts._objects.length] = newObj;\r\n}\r\n\r\nfunction parseParams(str, params) {\r\n const sep = str.indexOf(',');\r\n if (sep >= 0) {\r\n params.push(str.substr(sep + 1).split(','));\r\n return str.substr(0, sep);\r\n }\r\n // keep this untouched if no params were extracted\r\n return str;\r\n}\r\n\r\nfunction extractArgs(input, defaultsDict, params) {\r\n if (input) {\r\n const bang = input.indexOf(cOptsSep);\r\n const inputVal = parseParams(input.substr(0, bang >= 0 ? bang : undefined), params);\r\n if (bang >= 0) {\r\n const args = input.substr(bang + 1).split(cLSep);\r\n input = inputVal;\r\n if (defaultsDict) {\r\n const defaults = defaultsDict[input];\r\n const opts = utils.deriveDeep(defaults, true);\r\n args.forEach((arg) => {\r\n const pair = arg.split(cL2Ass, 2);\r\n const key = decodeURIComponent(pair[0]);\r\n const value = decodeURIComponent(pair[1]);\r\n const adapter = adapters[typeof _.get(defaults, key)];\r\n if (adapter) {\r\n _.set(opts, key, adapter(value));\r\n } else {\r\n logger.warn(`Unknown argument \"${key}\" for option \"${input}\"`);\r\n }\r\n });\r\n if (Object.keys(opts).length > 0) {\r\n input = [input, opts];\r\n }\r\n }\r\n } else {\r\n input = inputVal;\r\n }\r\n }\r\n return input;\r\n}\r\n\r\nconst actions = {\r\n\r\n l: 'load',\r\n load: String,\r\n t: 'type',\r\n type: String,\r\n v: 'view',\r\n view: String,\r\n u: 'unit',\r\n unit: Number,\r\n menu: asBoolean,\r\n\r\n // Commands\r\n\r\n o: 'object',\r\n object(value, opts) {\r\n const params = [];\r\n let options = extractArgs(value, settings.defaults.objects, params);\r\n if (!Array.isArray(options)) {\r\n options = [options];\r\n }\r\n addObject(opts, params[0], options);\r\n },\r\n\r\n p: 'preset',\r\n preset(value, opts) {\r\n opts.preset = value;\r\n opts.reps = null;\r\n ensureRepList(opts);\r\n },\r\n\r\n r: 'rep',\r\n rep(value, opts) {\r\n ensureRepList(opts);\r\n repIndex = Number(value);\r\n // clamp the index to one greater than the last\r\n repIndex = repIndex <= opts.reps.length ? (repIndex < 0 ? 0 : repIndex) : opts.reps.length;\r\n // create a new rep if it is adjacent to the existing ones\r\n if (repIndex === opts.reps.length) {\r\n // if there is no rep to derive from, derive from the first rep of the default\r\n opts.reps[repIndex] = repIndex > 0 ? utils.deriveDeep(opts.reps[repIndex - 1], true)\r\n : utils.deriveDeep(settings.defaults.presets.default[0], true);\r\n }\r\n },\r\n\r\n s: 'select',\r\n select(value, opts) {\r\n ensureRepAssign(opts, 'selector', value);\r\n },\r\n\r\n m: 'mode',\r\n mode(value, opts) {\r\n ensureRepAssign(opts, 'mode', extractArgs(value, settings.defaults.modes));\r\n },\r\n\r\n c: 'color',\r\n color(value, opts) {\r\n ensureRepAssign(opts, 'colorer', extractArgs(value, settings.defaults.colorers));\r\n },\r\n\r\n mt: 'material',\r\n material(value, opts) {\r\n ensureRepAssign(opts, 'material', extractArgs(value, settings.defaults.materials));\r\n },\r\n\r\n dup(value, opts) {\r\n ensureRepList(opts);\r\n const { reps } = opts;\r\n const rep = reps[repIndex];\r\n repIndex = reps.length;\r\n reps[repIndex] = utils.deriveDeep(rep, true);\r\n },\r\n\r\n // Settings shortcuts\r\n\r\n ar: 'autoResolution',\r\n};\r\n\r\nfunction _fromArray(entries) {\r\n repIndex = 0;\r\n\r\n const opts = {};\r\n for (let i = 0, n = entries.length; i < n; ++i) {\r\n const /** string[] */ entry = entries[i];\r\n let /** string? */ key = entry[0];\r\n const /** string? */ value = entry[1];\r\n let /** function|string? */ action = actions[key];\r\n\r\n // unwind shortcuts and aliases\r\n while (_.isString(action)) {\r\n key = action;\r\n action = actions[key];\r\n }\r\n\r\n // either set a property or use specialized parser\r\n if (!action) {\r\n const adapter = adapters[typeof _.get(settings.defaults, key)];\r\n if (adapter) {\r\n _.set(opts, `settings.${key}`, adapter(value));\r\n } else {\r\n logger.warn(`Unknown option \"${key}\"`);\r\n }\r\n } else if (_.isFunction(action)) {\r\n const result = action(value, opts);\r\n if (result !== undefined) {\r\n opts[key] = result;\r\n }\r\n }\r\n }\r\n\r\n return opts;\r\n}\r\n\r\nfunction fromAttr(attr) {\r\n return _fromArray(utils.getUrlParameters(`?${attr || ''}`));\r\n}\r\n\r\nfunction fromURL(url) {\r\n return _fromArray(utils.getUrlParameters(url));\r\n}\r\n\r\nfunction _processOptsForURL(opts) {\r\n const str = [];\r\n let i = 0;\r\n utils.forInRecursive(opts, (value, key) => {\r\n str[i++] = encodeQueryComponentL2(key) + cL2Ass + encodeQueryComponentL2(value);\r\n });\r\n return str.join(cLSep);\r\n}\r\n\r\nfunction _processArgsForURL(args) {\r\n if (!_.isArray(args)) {\r\n return args;\r\n }\r\n if (args.length < 2) {\r\n return args[0];\r\n }\r\n return `${args[0]}${cOptsSep}${_processOptsForURL(args[1])}`;\r\n}\r\n\r\nfunction _processObjForURL(objOpts) {\r\n if (!objOpts || !objOpts.type) {\r\n return undefined;\r\n }\r\n let res = objOpts.type;\r\n if (_.isArray(objOpts.params) && objOpts.params.length > 0) {\r\n res += `,${objOpts.params.join(',')}`;\r\n }\r\n if (objOpts.opts) {\r\n res += cOptsSep + _processOptsForURL(objOpts.opts);\r\n }\r\n return res;\r\n}\r\n\r\nfunction toURL(opts) {\r\n const stringList = [];\r\n let idx = 0;\r\n\r\n function checkAndAdd(prefix, value) {\r\n if (value !== null && value !== undefined) {\r\n stringList[idx++] = encodeQueryComponentL1(prefix)\r\n + cL1Ass + encodeQueryComponentL1(value);\r\n }\r\n }\r\n\r\n function addReps(repList) {\r\n if (!repList) {\r\n return;\r\n }\r\n for (let i = 0, n = repList.length; i < n; ++i) {\r\n if (_.isEmpty(repList[i])) {\r\n continue;\r\n }\r\n checkAndAdd('r', i);\r\n checkAndAdd('s', repList[i].selector);\r\n checkAndAdd('m', _processArgsForURL(repList[i].mode));\r\n checkAndAdd('c', _processArgsForURL(repList[i].colorer));\r\n checkAndAdd('mt', _processArgsForURL(repList[i].material));\r\n }\r\n }\r\n\r\n function addObjects(objList) {\r\n if (!objList) {\r\n return;\r\n }\r\n for (let i = 0, n = objList.length; i < n; ++i) {\r\n checkAndAdd('o', _processObjForURL(objList[i]));\r\n }\r\n }\r\n\r\n checkAndAdd('l', opts.load);\r\n checkAndAdd('u', opts.unit);\r\n checkAndAdd('p', opts.preset);\r\n addReps(opts.reps);\r\n addObjects(opts._objects);\r\n\r\n checkAndAdd('v', opts.view);\r\n\r\n utils.forInRecursive(opts.settings, (value, key) => {\r\n // I heard these lines in the whispers of the Gods\r\n // Handle preset setting in reps\r\n if (key === 'preset') {\r\n return;\r\n }\r\n checkAndAdd(key, value);\r\n });\r\n\r\n let url = '';\r\n if (typeof window !== 'undefined') {\r\n const { location } = window;\r\n url = `${location.protocol}//${location.host}${location.pathname}`;\r\n }\r\n if (stringList.length > 0) {\r\n url += `?${stringList.join('&')}`;\r\n }\r\n\r\n return url;\r\n}\r\n\r\nfunction _processOptsForScript(opts) {\r\n const str = [];\r\n let i = 0;\r\n utils.forInRecursive(opts, (value, key) => {\r\n str[i++] = `${key}=${utils.enquoteString(value)}`;\r\n });\r\n return str.join(' ');\r\n}\r\n\r\nfunction _processArgsForScript(args) {\r\n if (!_.isArray(args)) {\r\n return args;\r\n }\r\n if (args.length < 2) {\r\n return args[0];\r\n }\r\n return `${args[0]} ${_processOptsForScript(args[1])}`;\r\n}\r\n\r\nfunction _processObjForScript(objOpts) {\r\n if (!objOpts || !objOpts.type) {\r\n return undefined;\r\n }\r\n let res = objOpts.type;\r\n if (_.isArray(objOpts.params) && objOpts.params.length > 0) {\r\n res += ` ${objOpts.params.map(utils.enquoteString).join(' ')}`;\r\n }\r\n if (objOpts.opts) {\r\n res += ` ${_processOptsForScript(objOpts.opts)}`;\r\n }\r\n return res;\r\n}\r\n\r\nfunction _processRepsForScript(rep, index) {\r\n const repString = [];\r\n let strIdx = 0;\r\n function localAdd(prefix, value) {\r\n if (value !== null && value !== undefined) {\r\n repString[strIdx++] = prefix + value;\r\n }\r\n }\r\n if (_.isEmpty(rep)) {\r\n return null;\r\n }\r\n localAdd('', index);\r\n localAdd('s=', utils.enquoteString(rep.selector));\r\n localAdd('m=', _processArgsForScript(rep.mode));\r\n localAdd('c=', _processArgsForScript(rep.colorer));\r\n localAdd('mt=', _processArgsForScript(rep.material));\r\n return repString.join(' ');\r\n}\r\n\r\nfunction toScript(opts) {\r\n const commandsList = [];\r\n let idx = 0;\r\n function checkAndAdd(command, value, saveQuotes) {\r\n if (value !== null && value !== undefined) {\r\n const quote = (typeof value === 'string' && saveQuotes) ? '\"' : '';\r\n commandsList[idx++] = `${command} ${quote}${value}${quote}`.trim();\r\n }\r\n }\r\n\r\n function addReps(repList) {\r\n if (!repList) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = repList.length; i < n; ++i) {\r\n checkAndAdd('rep', _processRepsForScript(repList[i], i));\r\n }\r\n }\r\n\r\n function addObjects(objList) {\r\n if (!objList) {\r\n return;\r\n }\r\n for (let i = 0, n = objList.length; i < n; ++i) {\r\n checkAndAdd('', _processObjForScript(objList[i]));\r\n }\r\n }\r\n\r\n checkAndAdd('set', 'autobuild false');\r\n checkAndAdd('load', opts.load, true);\r\n checkAndAdd('unit', opts.unit);\r\n checkAndAdd('preset', opts.preset);\r\n addReps(opts.reps);\r\n addObjects(opts._objects);\r\n\r\n utils.forInRecursive(opts.settings, (value, key) => {\r\n // I heard these lines in the whispers of the Gods\r\n // Handle preset setting in reps\r\n if (key === 'preset') {\r\n return;\r\n }\r\n checkAndAdd(`set ${key}`, value, true);\r\n });\r\n checkAndAdd('view', opts.view);\r\n checkAndAdd('set', 'autobuild true');\r\n return commandsList.join('\\n');\r\n}\r\n\r\nexport default {\r\n fromURL,\r\n fromAttr,\r\n adapters,\r\n toURL,\r\n toScript,\r\n};\r\n","/**\r\n * Atom measurements.\r\n *\r\n * @param {Residue} residue - (required) Residue containing the atom\r\n * @param {string} name - (required) Name, unique in the residue\r\n * @param {Element} type - (required) Chemical element reference\r\n * @param {THREE.Vector3} position - Registered coordinates\r\n *\r\n * @param {number} role - Role of atom inside monomer: Lead and wing are particularity interesting\r\n * @param {boolean} het - Non-standard residue indicator\r\n *\r\n * @param {number} serial - Serial number, unique in the model\r\n * @param {string} location - Alternative location indicator (usually space or A-Z)\r\n * @param {number} occupancy - Occupancy percentage, from 0 to 1\r\n * @param {number} temperature - Temperature\r\n * @param {number} charge - Charge\r\n *\r\n * @exports Atom\r\n * @constructor\r\n */\r\n\r\nclass Atom {\r\n constructor(residue, name, type, position, role, het, serial, location, occupancy, temperature, charge) {\r\n this.index = -1;\r\n this.residue = residue;\r\n this.name = name;\r\n this.element = type;\r\n this.position = position;\r\n this.role = role;\r\n this.mask = 1 | 0;\r\n\r\n this.het = het;\r\n\r\n this.serial = serial;\r\n this.location = (location || ' ').charCodeAt(0);\r\n this.occupancy = occupancy || 1;\r\n this.temperature = temperature;\r\n this.charge = charge;\r\n this.hydrogenCount = -1; // explicitly invalid\r\n this.radicalCount = 0;\r\n this.valence = -1; // explicitly invalid\r\n\r\n this.bonds = [];\r\n\r\n this.flags = 0x0000;\r\n if (type.name === 'H') {\r\n this.flags |= Atom.Flags.HYDROGEN;\r\n } else if (type.name === 'C') {\r\n this.flags |= Atom.Flags.CARBON;\r\n }\r\n }\r\n\r\n isHet() {\r\n return this.het;\r\n }\r\n\r\n isHydrogen() {\r\n return this.element.number === 1;\r\n }\r\n\r\n getVisualName() {\r\n const { name } = this;\r\n if (name.length > 0) {\r\n return name;\r\n }\r\n return this.element.name.trim();\r\n }\r\n\r\n forEachBond(process) {\r\n const { bonds } = this;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]);\r\n }\r\n }\r\n\r\n getFullName() {\r\n let name = '';\r\n if (this.residue !== null) {\r\n if (this.residue._chain !== null) {\r\n name += `${this.residue._chain.getName()}.`;\r\n }\r\n name += `${this.residue._sequence}.`;\r\n }\r\n name += this.name;\r\n return name;\r\n }\r\n\r\n /**\r\n * Enumeration of atom flag values.\r\n *\r\n * @enum {number}\r\n * @readonly\r\n */\r\n static Flags = {\r\n CARBON: 0x0001,\r\n // OXYGEN: 0x0002,\r\n // NITROGEN: 0x0004,\r\n HYDROGEN: 0x0008,\r\n /** Non-polar hydrogen (it is also a HYDROGEN) */\r\n NONPOLARH: 0x1008,\r\n };\r\n}\r\n\r\nexport default Atom;\r\n","class Element {\r\n constructor(number, name, fullName, weight, radius, radiusBonding, hValency) {\r\n this.number = number;\r\n this.name = name;\r\n this.fullName = fullName;\r\n this.weight = weight;\r\n this.radius = radius;\r\n this.radiusBonding = radiusBonding;\r\n this.hydrogenValency = hValency;\r\n }\r\n\r\n static Constants = {\r\n /* eslint-disable no-magic-numbers */\r\n U1: 1,\r\n Lead: 2,\r\n U2: 3,\r\n Wing: 4,\r\n U18: 18,\r\n /* eslint-enable no-magic-numbers */\r\n };\r\n\r\n static Role = {\r\n /* eslint-disable no-magic-numbers */\r\n N: Element.Constants.U1,\r\n CA: Element.Constants.Lead,\r\n C: Element.Constants.U2,\r\n O: Element.Constants.Wing,\r\n SG: Element.Constants.U18,\r\n /* eslint-enable no-magic-numbers */\r\n };\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\n static ByAtomicNumber = [\r\n /* eslint-disable no-magic-numbers */\r\n null,\r\n new Element(1, 'H', 'Hydrogen', 1.008, 1.2, 0.23, [1]),\r\n new Element(2, 'HE', 'Helium', 4.003, 1.4, 0.93, [0]),\r\n new Element(3, 'LI', 'Lithium', 6.941, 1.82, 0.68, [1]),\r\n new Element(4, 'BE', 'Beryllium', 9.012, 1.7, 0.35, [2]),\r\n new Element(5, 'B', 'Boron', 10.81, 2.08, 0.83, [3]),\r\n new Element(6, 'C', 'Carbon', 12.011, 1.95, 0.68, [4]),\r\n new Element(7, 'N', 'Nitrogen', 14.007, 1.85, 0.68, [3, 5]),\r\n new Element(8, 'O', 'Oxygen', 15.999, 1.7, 0.68, [2, 4]),\r\n new Element(9, 'F', 'Fluorine', 18.998, 1.73, 0.64, [1]),\r\n new Element(10, 'NE', 'Neon', 20.18, 1.54, 1.12, [0]),\r\n new Element(11, 'NA', 'Sodium', 22.99, 2.27, 0.97, [1]),\r\n new Element(12, 'MG', 'Magnesium', 24.305, 1.73, 1.1, [2]),\r\n new Element(13, 'AL', 'Aluminum', 26.981, 2.05, 1.35, [3]),\r\n new Element(14, 'SI', 'Silicon', 28.086, 2.1, 1.2, [4]),\r\n new Element(15, 'P', 'Phosphorus', 30.974, 2.08, 0.75, [3, 5]),\r\n new Element(16, 'S', 'Sulfur', 32.07, 2, 1.02, [2, 4, 6]),\r\n new Element(17, 'CL', 'Chlorine', 35.453, 1.97, 0.99, [1, 3, 5, 7]),\r\n new Element(18, 'AR', 'Argon', 39.948, 1.88, 1.57, [0]),\r\n new Element(19, 'K', 'Potassium', 39.1, 2.75, 1.33, [1]),\r\n new Element(20, 'CA', 'Calcium', 40.08, 1.973, 0.99, [2]),\r\n new Element(21, 'SC', 'Scandium', 44.956, 1.7, 1.44, [0]),\r\n new Element(22, 'TI', 'Titanium', 47.88, 1.7, 1.47, [0]),\r\n new Element(23, 'V', 'Vanadium', 50.941, 1.7, 1.33, [0]),\r\n new Element(24, 'CR', 'Chromium', 52, 1.7, 1.35, [0]),\r\n new Element(25, 'MN', 'Manganese', 54.938, 1.7, 1.35, [0]),\r\n new Element(26, 'FE', 'Iron', 55.847, 1.7, 1.34, [0]),\r\n new Element(27, 'CO', 'Cobalt', 58.93, 1.7, 1.33, [0]),\r\n new Element(28, 'NI', 'Nickel', 58.69, 1.63, 1.5, [0]),\r\n new Element(29, 'CU', 'Copper', 63.55, 1.4, 1.52, [0]),\r\n new Element(30, 'ZN', 'Zinc', 65.39, 1.39, 1.45, [0]),\r\n new Element(31, 'GA', 'Gallium', 69.72, 1.87, 1.22, [3]),\r\n new Element(32, 'GE', 'Germanium', 72.61, 1.7, 1.17, [4]),\r\n new Element(33, 'AS', 'Arsenic', 74.92, 1.85, 1.21, [3, 5]),\r\n new Element(34, 'SE', 'Selenium', 78.96, 1.9, 1.22, [2, 4, 6]),\r\n new Element(35, 'BR', 'Bromine', 79.9, 2.1, 1.21, [1, 3, 5, 7]),\r\n new Element(36, 'KR', 'Krypton', 83.8, 2.02, 1.91, [0]),\r\n new Element(37, 'RB', 'Rubidium', 85.47, 1.7, 1.47, [1]),\r\n new Element(38, 'SR', 'Strontium', 87.62, 1.7, 1.12, [2]),\r\n new Element(39, 'Y', 'Yttrium', 88.91, 1.7, 1.78, [0]),\r\n new Element(40, 'ZR', 'Zirconium', 91.22, 1.7, 1.56, [0]),\r\n new Element(41, 'NB', 'Niobium', 92.91, 1.7, 1.48, [0]),\r\n new Element(42, 'MO', 'Molybdenum', 95.94, 1.7, 1.47, [0]),\r\n new Element(43, 'TC', 'Technetium', 98.91, 1.7, 1.35, [0]),\r\n new Element(44, 'RU', 'Ruthenium', 101.07, 1.7, 1.4, [0]),\r\n new Element(45, 'RH', 'Rhodium', 102.91, 1.7, 1.45, [0]),\r\n new Element(46, 'PD', 'Palladium', 106.42, 1.63, 1.5, [0]),\r\n new Element(47, 'AG', 'Silver', 107.87, 1.72, 1.59, [0]),\r\n new Element(48, 'CD', 'Cadmium', 112.41, 1.58, 1.69, [0]),\r\n new Element(49, 'IN', 'Indium', 114.82, 1.93, 1.63, [3]),\r\n new Element(50, 'SN', 'Tin', 118.71, 2.17, 1.46, [2, 4]),\r\n new Element(51, 'SB', 'Antimony', 121.75, 2.2, 1.46, [3, 5]),\r\n new Element(52, 'TE', 'Tellurium', 127.6, 2.06, 1.47, [2, 4, 6]),\r\n new Element(53, 'I', 'Iodine', 126.91, 2.15, 1.4, [1, 3, 5, 7]),\r\n new Element(54, 'XE', 'Xenon', 131.29, 2.16, 1.98, [0]),\r\n new Element(55, 'CS', 'Cesium', 132.91, 1.7, 1.67, [1]),\r\n new Element(56, 'BA', 'Barium', 137.33, 1.7, 1.34, [2]),\r\n new Element(57, 'LA', 'Lanthanum', 138.91, 1.7, 1.87, [0]),\r\n new Element(58, 'CE', 'Cerium', 140.12, 1.7, 1.83, [0]),\r\n new Element(59, 'PR', 'Praseodymium', 140.91, 1.7, 1.82, [0]),\r\n new Element(60, 'ND', 'Neodymium', 144.24, 1.7, 1.81, [0]),\r\n new Element(61, 'PM', 'Promethium', 144.9, 1.7, 1.8, [0]),\r\n new Element(62, 'SM', 'Samarium', 150.36, 1.7, 1.8, [0]),\r\n new Element(63, 'EU', 'Europium', 151.96, 1.7, 1.99, [0]),\r\n new Element(64, 'GD', 'Gadolinium', 157.25, 1.7, 1.79, [0]),\r\n new Element(65, 'TB', 'Terbium', 158.93, 1.7, 1.76, [0]),\r\n new Element(66, 'DY', 'Dysprosium', 162.5, 1.7, 1.75, [0]),\r\n new Element(67, 'HO', 'Holmium', 164.93, 1.7, 1.74, [0]),\r\n new Element(68, 'ER', 'Erbium', 167.26, 1.7, 1.73, [0]),\r\n new Element(69, 'TM', 'Thulium', 168.93, 1.7, 1.72, [0]),\r\n new Element(70, 'YB', 'Ytterbium', 173.04, 1.7, 1.94, [0]),\r\n new Element(71, 'LU', 'Lutetium', 174.97, 1.7, 1.72, [0]),\r\n new Element(72, 'HF', 'Hafnium', 178.49, 1.7, 1.57, [0]),\r\n new Element(73, 'TA', 'Tantalum', 180.95, 1.7, 1.43, [0]),\r\n new Element(74, 'W', 'Tungsten', 183.85, 1.7, 1.37, [0]),\r\n new Element(75, 'RE', 'Rhenium', 186.21, 1.7, 1.35, [0]),\r\n new Element(76, 'OS', 'Osmium', 190.2, 1.7, 1.37, [0]),\r\n new Element(77, 'IR', 'Iridium', 192.22, 1.7, 1.32, [0]),\r\n new Element(78, 'PT', 'Platinum', 195.08, 1.72, 1.5, [0]),\r\n new Element(79, 'AU', 'Gold', 196.97, 1.66, 1.5, [0]),\r\n new Element(80, 'HG', 'Mercury', 200.59, 1.55, 1.7, [0]),\r\n new Element(81, 'TL', 'Thallium', 204.38, 1.96, 1.55, [1, 3]),\r\n new Element(82, 'PB', 'Lead', 207.2, 2.02, 1.54, [2, 4]),\r\n new Element(83, 'BI', 'Bismuth', 208.98, 1.7, 1.54, [3, 5]),\r\n new Element(84, 'PO', 'Polonium', 210, 1.7, 1.68, [2, 4, 6]),\r\n new Element(85, 'AT', 'Astatine', 210, 1.7, 1.7, [1, 3, 5, 7]),\r\n new Element(86, 'RN', 'Radon', 222, 1.7, 2.4, [0]),\r\n new Element(87, 'FR', 'Francium', 223, 1.7, 2, [1]),\r\n new Element(88, 'RA', 'Radium', 226.03, 1.7, 1.9, [2]),\r\n new Element(89, 'AC', 'Actinium', 227.03, 1.7, 1.88, [0]),\r\n new Element(90, 'TH', 'Thorium', 232.04, 1.7, 1.79, [0]),\r\n new Element(91, 'PA', 'Protactinium', 231.04, 1.7, 1.61, [0]),\r\n new Element(92, 'U', 'Uranium', 238.03, 1.86, 1.58, [0]),\r\n new Element(93, 'NP', 'Neptunium', 237.05, 1.7, 1.55, [0]),\r\n new Element(94, 'PU', 'Plutonium', 239.1, 1.7, 1.53, [0]),\r\n new Element(95, 'AM', 'Americium', 243.1, 1.7, 1.51, [0]),\r\n new Element(96, 'CM', 'Curium', 247.1, 1.7, 1.5, [0]),\r\n new Element(97, 'BK', 'Berkelium', 247.1, 1.7, 1.5, [0]),\r\n new Element(98, 'CF', 'Californium', 252.1, 1.7, 1.5, [0]),\r\n new Element(99, 'ES', 'Einsteinium', 252.1, 1.7, 1.5, [0]),\r\n new Element(100, 'FM', 'Fermium', 257.1, 1.7, 1.5, [0]),\r\n new Element(101, 'MD', 'Mendelevium', 256.1, 1.7, 1.5, [0]),\r\n new Element(102, 'NO', 'Nobelium', 259.1, 1.7, 1.5, [0]),\r\n new Element(103, 'LR', 'Lawrencium', 260.1, 1.7, 1.5, [0]),\r\n new Element(104, 'RF', 'Rutherfordium', 261, 1.7, 1.6, [0]),\r\n new Element(105, 'DB', 'Dubnium', 262, 1.7, 1.6, [0]),\r\n new Element(106, 'SG', 'Seaborgium', 263, 1.7, 1.6, [0]),\r\n new Element(107, 'BH', 'Bohrium', 262, 1.7, 1.6, [0]),\r\n new Element(108, 'HS', 'Hassium', 265, 1.7, 1.6, [0]),\r\n new Element(109, 'MT', 'Meitnerium', 268, 1.7, 1.6, [0]),\r\n /* eslint-enable no-magic-numbers */\r\n ];\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\n static ByName = {\r\n // Duplicate atomic numbers (isotopes)\r\n /* eslint-disable no-magic-numbers */\r\n D: new Element(1, 'D', 'Deuterium', 2.014, 1.2, 0.23, [1]),\r\n T: new Element(1, 'T', 'Tritium', 3.016, 1.2, 0.23, [1]),\r\n /* eslint-enable no-magic-numbers */\r\n\r\n // All regular elements will be added later, automatically\r\n };\r\n}\r\n\r\n(function () {\r\n const byAtomicNumber = Element.ByAtomicNumber;\r\n const byName = Element.ByName;\r\n for (let i = 0, n = byAtomicNumber.length; i < n; ++i) {\r\n const element = byAtomicNumber[i];\r\n if (element) {\r\n byName[element.name] = element;\r\n }\r\n }\r\n}());\r\n\r\n// find atom type by chemical element (or create if missing)\r\nElement.getByName = function (element) {\r\n let type = Element.ByName[element];\r\n if (!type) {\r\n type = Element.ByName[element] = new Element(0, element, 'Unknown', 0, 1.0, 0.01, [0]);\r\n }\r\n return type;\r\n};\r\n\r\nexport default Element;\r\n","const cBondTypes = {\r\n /** Was generated manually */\r\n UNKNOWN: 0,\r\n /** Simple covalent bond */\r\n COVALENT: 1,\r\n /** Aromatic bond */\r\n AROMATIC: 2,\r\n};\r\n\r\nfunction getAtomPos(atom) {\r\n return atom.position;\r\n}\r\n\r\n/**\r\n * Bond between atoms.\r\n *\r\n * @param {Atom} left - The first atom.\r\n * @param {Atom} right - The second atom.\r\n * @param {number} order - Order of current bond.\r\n * @param {number} type - Bond type.\r\n * @param {boolean} fixed - Indicator of a pre-specified connection (in contrast with guessed one).\r\n *\r\n * @exports Bond\r\n * @constructor\r\n */\r\nclass Bond {\r\n constructor(left, right, order, type, fixed) {\r\n this._left = left;\r\n this._right = right;\r\n this._fixed = fixed;\r\n this._index = -1;\r\n if (left > right) {\r\n throw new Error('In a bond atom indices must be in increasing order');\r\n }\r\n this._order = order;\r\n this._type = type;\r\n }\r\n\r\n getLeft() {\r\n return this._left;\r\n }\r\n\r\n getRight() {\r\n return this._right;\r\n }\r\n\r\n getOrder() {\r\n return this._order;\r\n }\r\n\r\n calcLength() {\r\n return this._left.position.distanceTo(this._right.position);\r\n }\r\n\r\n _forEachNeighbour(currAtom, process) {\r\n const { bonds } = currAtom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]._left !== currAtom ? bonds[i]._left : bonds[i]._right);\r\n }\r\n }\r\n\r\n forEachLevelOne(process) {\r\n const left = this._left;\r\n const right = this._right;\r\n this._forEachNeighbour(left, (atom) => {\r\n if (atom === right) {\r\n return;\r\n }\r\n process(atom);\r\n });\r\n this._forEachNeighbour(right, (atom) => {\r\n if (atom === left) {\r\n return;\r\n }\r\n process(atom);\r\n });\r\n }\r\n\r\n forEachLevelTwo(process) {\r\n // TODO refactor this piece of an art?\r\n const left = this._left;\r\n const right = this._right;\r\n const self = this;\r\n self._forEachNeighbour(left, (atom) => {\r\n if (atom === right) {\r\n return;\r\n }\r\n self._forEachNeighbour(atom, (l2Atom) => {\r\n if (l2Atom === left) {\r\n return;\r\n }\r\n process(l2Atom);\r\n });\r\n });\r\n self._forEachNeighbour(right, (atom) => {\r\n if (atom === left) {\r\n return;\r\n }\r\n self._forEachNeighbour(atom, (l2Atom) => {\r\n if (l2Atom === right) {\r\n return;\r\n }\r\n process(l2Atom);\r\n });\r\n });\r\n }\r\n\r\n _fixDir(refPoint, currDir, posGetter) {\r\n // count atoms to the right and to the left of the current plane\r\n let rightCount = 0;\r\n let leftCount = 0;\r\n const tmpVec = refPoint.clone();\r\n function checkDir(atom) {\r\n tmpVec.copy(posGetter(atom));\r\n tmpVec.sub(refPoint);\r\n const dotProd = currDir.dot(tmpVec);\r\n if (dotProd > 0) {\r\n ++rightCount;\r\n } else {\r\n ++leftCount;\r\n }\r\n }\r\n function checkCarbon(atom) {\r\n if (atom.element.name === 'C') {\r\n checkDir(atom);\r\n }\r\n }\r\n // count all atoms to the left and right of our plane, start from level 1 and carbons\r\n const stages = [\r\n [this.forEachLevelOne, checkCarbon],\r\n [this.forEachLevelOne, checkDir],\r\n [this.forEachLevelTwo, checkCarbon],\r\n [this.forEachLevelTwo, checkDir],\r\n ];\r\n\r\n for (let stageId = 0; stageId < stages.length; ++stageId) {\r\n stages[stageId][0].call(this, stages[stageId][1]);\r\n if (leftCount > rightCount) {\r\n return currDir.multiplyScalar(-1);\r\n }\r\n if (leftCount < rightCount) {\r\n return currDir;\r\n }\r\n }\r\n return currDir;\r\n }\r\n\r\n calcNormalDir(posGetter) {\r\n const left = this._left;\r\n const right = this._right;\r\n let first = left;\r\n let second = right;\r\n posGetter = posGetter === undefined ? getAtomPos : posGetter;\r\n if (left.bonds.length > right.bonds.length) {\r\n first = right;\r\n second = left;\r\n }\r\n let third = first;\r\n let maxNeibs = 0;\r\n const { bonds } = second;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n let another = bonds[i]._left;\r\n if (bonds[i]._left === second) {\r\n another = bonds[i]._right;\r\n }\r\n if (another.bonds.length > maxNeibs && another !== first) {\r\n third = another;\r\n maxNeibs = another.bonds.length;\r\n }\r\n }\r\n const secondPos = posGetter(second);\r\n const firstV = posGetter(first).clone().sub(secondPos);\r\n const secondV = posGetter(third).clone().sub(secondPos);\r\n secondV.crossVectors(firstV, secondV);\r\n if (secondV.lengthSq() < 0.0001) {\r\n secondV.set(0, 1, 0);\r\n }\r\n firstV.normalize();\r\n secondV.normalize();\r\n firstV.crossVectors(secondV, firstV);\r\n if (firstV.lengthSq() < 0.0001) {\r\n firstV.set(0, 1, 0);\r\n }\r\n firstV.normalize();\r\n return this._fixDir(secondPos, firstV, posGetter);\r\n }\r\n\r\n static BondType = cBondTypes;\r\n}\r\n\r\nBond.prototype.BondType = cBondTypes;\r\n\r\nexport default Bond;\r\n","import * as THREE from 'three';\r\nimport Atom from './Atom';\r\nimport Element from './Element';\r\n\r\nconst cNucleicControlNames = ['C3\\'', 'C3*', 'P', 'H5T', 'H3T'];\r\nconst cNucleicWing1Names = ['OP1', 'O1P'];\r\nconst cNucleicWing2Names = ['OP2', 'O2P'];\r\n\r\nconst cCylinderSource = ['C3\\'', 'C3*', 'C1', 'C1\\'', 'C1*', 'P'];\r\nconst cCylinderTarget = [{\r\n types: ['A', 'DA', 'G', 'DG'],\r\n atoms: ['N1'],\r\n}, {\r\n types: ['C', 'DC'],\r\n atoms: ['N3'],\r\n}, {\r\n types: ['T', 'DT', 'U', 'DU'],\r\n atoms: ['O4'],\r\n}];\r\n\r\n/**\r\n * Residue instance.\r\n *\r\n * @param {Chain} chain - Chain this residue belongs to.\r\n * @param {ResidueType} type - Generic residue instance type.\r\n * @param {number} sequence - Sequence ID.\r\n * @param {string} icode - One character insertion code (usually space or A-Z).\r\n *\r\n * @exports Residue\r\n * @constructor\r\n */\r\nclass Residue {\r\n constructor(chain, type, sequence, icode) {\r\n this._chain = chain;\r\n this._component = null;\r\n this._type = type;\r\n this._sequence = sequence;\r\n this._icode = icode;\r\n this._mask = 1 | 0;\r\n this._index = -1;\r\n\r\n this._atoms = [];\r\n this._secondary = null;\r\n this._firstAtom = null;\r\n this._leadAtom = null;\r\n this._wingAtom = null;\r\n this._lastAtom = null;\r\n this._controlPoint = null;\r\n this._midPoint = null;\r\n this._wingVector = null;\r\n this._cylinders = null;\r\n this._isValid = true;\r\n this._het = false;\r\n this._molecule = null;\r\n this.temperature = null;\r\n this.occupancy = null;\r\n }\r\n\r\n // Getters and setters\r\n getChain() {\r\n return this._chain;\r\n }\r\n\r\n getMolecule() {\r\n return this._molecule;\r\n }\r\n\r\n getType() {\r\n return this._type;\r\n }\r\n\r\n getSequence() {\r\n return this._sequence;\r\n }\r\n\r\n getSecondary() {\r\n return this._secondary;\r\n }\r\n\r\n getICode() {\r\n return this._icode;\r\n }\r\n\r\n // Other methods\r\n\r\n addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge) {\r\n const atom = new Atom(this, name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n const complex = this._chain.getComplex();\r\n complex.addAtom(atom);\r\n this._atoms.push(atom);\r\n this._het = this._het || het;\r\n return atom;\r\n }\r\n\r\n getAtomCount() {\r\n return this._atoms.length;\r\n }\r\n\r\n forEachAtom(process) {\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n if (process(atoms[i])) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n _findAtomByName(name) {\r\n let res = null;\r\n this.forEachAtom((atom) => {\r\n if (atom.name === name) {\r\n res = atom;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return res;\r\n }\r\n\r\n _findFirstAtomInList(names) {\r\n let res = null;\r\n for (let i = 0; i < names.length; ++i) {\r\n res = this._findAtomByName(names[i]);\r\n if (res !== null) {\r\n return res;\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n mask &= atoms[i].mask;\r\n }\r\n this._mask = mask;\r\n }\r\n\r\n getCylinderTargetList() {\r\n const type = this._type._name;\r\n for (let i = 0, n = cCylinderTarget.length; i < n; ++i) {\r\n for (let j = 0, m = cCylinderTarget[i].types.length; j < m; ++j) {\r\n if (type === cCylinderTarget[i].types[j]) {\r\n return cCylinderTarget[i].atoms;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _detectLeadWing(dst, next, getAtomPosition) {\r\n const leadAtom = this._findFirstAtomInList(cNucleicControlNames);\r\n let wingStart = this._findFirstAtomInList(cNucleicWing1Names);\r\n let wingEnd = this._findFirstAtomInList(cNucleicWing2Names);\r\n\r\n if (wingStart === null && next !== null) {\r\n wingStart = next._findFirstAtomInList(cNucleicWing1Names);\r\n }\r\n\r\n if (wingEnd === null && next !== null) {\r\n wingEnd = next._findFirstAtomInList(cNucleicWing2Names);\r\n }\r\n\r\n if (leadAtom === null || wingStart === null || wingEnd === null) {\r\n return;\r\n }\r\n\r\n dst._leadAtom = leadAtom;\r\n dst._controlPoint = getAtomPosition(leadAtom);\r\n dst._wingVector = getAtomPosition(wingEnd).clone().sub(getAtomPosition(wingStart));\r\n dst._isValid = true;\r\n\r\n const cylSource = this._findFirstAtomInList(cCylinderSource);\r\n const targetList = this.getCylinderTargetList();\r\n const cylTarget = targetList !== null ? this._findFirstAtomInList(targetList) : null;\r\n if (cylSource === null || cylTarget === null) {\r\n return;\r\n }\r\n dst._cylinders = [getAtomPosition(cylSource), getAtomPosition(cylTarget)];\r\n }\r\n\r\n calcWing(prevLeadPos, currLeadPos, prevWingPos, prevWing) {\r\n const vectorA = currLeadPos.clone().sub(prevLeadPos);\r\n const vectorB = prevLeadPos.clone().sub(prevWingPos);\r\n vectorB.crossVectors(vectorA, vectorB);\r\n vectorB.crossVectors(vectorA, vectorB).normalize();\r\n if (prevWing !== null && prevWing.length() > 0.0001) {\r\n const needToNegate = vectorB.length() > 0.0001 && Math.abs(prevWing.angleTo(vectorB)) > Math.PI / 2;\r\n if (needToNegate) {\r\n vectorB.negate();\r\n }\r\n }\r\n return vectorB;\r\n }\r\n\r\n _innerFinalize(prevRes, prev, nextRes, dst, chainAsNucleic, getAtomPosition) {\r\n const bFirstInChain = prev === null;\r\n\r\n const lp = getAtomPosition(this._leadAtom);\r\n const currLeadPos = new THREE.Vector3(lp.x, lp.y, lp.z);\r\n if (chainAsNucleic) {\r\n this._detectLeadWing(dst, nextRes, getAtomPosition);\r\n return;\r\n }\r\n\r\n if (bFirstInChain) { // for first one in chain\r\n dst._midPoint = getAtomPosition(this._firstAtom).clone();\r\n } else {\r\n const prevLeadPos = prev._controlPoint; // lead point of previous monomer\r\n dst._midPoint = prevLeadPos.clone().lerp(currLeadPos, 0.5);\r\n dst._wingVector = this.calcWing(prevLeadPos, currLeadPos, getAtomPosition(prevRes._wingAtom), prev._wingVector);\r\n }\r\n dst._controlPoint = currLeadPos;\r\n }\r\n\r\n _finalize2(prev, next, asNucleic) {\r\n // Should be called AFTER first finalize\r\n this._innerFinalize(prev, prev, next, this, asNucleic, (atom) => atom.position);\r\n }\r\n\r\n isConnected(anotherResidue) {\r\n if (this._chain !== anotherResidue._chain) {\r\n return false;\r\n }\r\n if (this === anotherResidue) {\r\n return true;\r\n }\r\n let res = false;\r\n this.forEachAtom((atom) => {\r\n const { bonds } = atom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n const bond = bonds[i];\r\n if (bond._left.residue === anotherResidue || bond._right.residue === anotherResidue) {\r\n res = true;\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n return res;\r\n }\r\n\r\n _finalize() {\r\n const self = this;\r\n [this._firstAtom] = this._atoms;\r\n this._lastAtom = this._atoms[this._atoms.length - 1];\r\n\r\n this._leadAtom = null;\r\n this._wingAtom = null;\r\n\r\n let tempCount = 0;\r\n let temperature = 0; // average temperature\r\n let occupCount = 0;\r\n let occupancy = 0; // average occupancy\r\n this.forEachAtom((a) => {\r\n if (self._leadAtom === null) {\r\n if (a.role === Element.Constants.Lead) {\r\n self._leadAtom = a;\r\n }\r\n }\r\n if (self._wingAtom === null) {\r\n if (a.role === Element.Constants.Wing) {\r\n self._wingAtom = a;\r\n }\r\n }\r\n if (a.temperature) {\r\n temperature += a.temperature;\r\n tempCount++;\r\n }\r\n if (a.occupancy) {\r\n occupancy += a.occupancy;\r\n occupCount++;\r\n }\r\n return (self._leadAtom !== null && self._wingAtom !== null);\r\n });\r\n\r\n if (tempCount > 0) {\r\n this.temperature = temperature / tempCount;\r\n }\r\n if (occupCount > 0) {\r\n this.occupancy = occupancy / occupCount;\r\n }\r\n\r\n // Still try to make monomer look valid\r\n if (this._leadAtom === null || this._wingAtom === null) {\r\n this._isValid = false;\r\n }\r\n if (this._leadAtom === null) {\r\n this._leadAtom = this._firstAtom;\r\n }\r\n if (this._wingAtom === null) {\r\n this._wingAtom = this._lastAtom;\r\n }\r\n }\r\n}\r\n\r\nexport default Residue;\r\n","/**\r\n * Residue type.\r\n *\r\n * Predefined acid or created with HET, HETNAM, etc.\r\n *\r\n * @param {string} name - Short name, either standard (ALA, MET, etc.) or non-standard one.\r\n * @param {string} fullName - Full residue name.\r\n * @param {string} letterCode - 1-letter symbol.\r\n *\r\n * @exports ResidueType\r\n * @constructor\r\n */\r\nclass ResidueType {\r\n constructor(name, fullName, letterCode) {\r\n this._name = name;\r\n this._fullName = fullName;\r\n this.letterCode = letterCode;\r\n this.flags = 0x0000;\r\n }\r\n\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\n static StandardTypes = {\r\n /* eslint-disable no-magic-numbers */\r\n ALA: new ResidueType('ALA', 'Alanine', 'A'),\r\n ARG: new ResidueType('ARG', 'Arginine', 'R'),\r\n ASN: new ResidueType('ASN', 'Asparagine', 'N'),\r\n ASP: new ResidueType('ASP', 'Aspartic Acid', 'D'),\r\n CYS: new ResidueType('CYS', 'Cysteine', 'C'),\r\n GLN: new ResidueType('GLN', 'Glutamine', 'Q'),\r\n GLU: new ResidueType('GLU', 'Glutamic Acid', 'E'),\r\n GLY: new ResidueType('GLY', 'Glycine', 'G'),\r\n HIS: new ResidueType('HIS', 'Histidine', 'H'),\r\n ILE: new ResidueType('ILE', 'Isoleucine', 'I'),\r\n LEU: new ResidueType('LEU', 'Leucine', 'L'),\r\n LYS: new ResidueType('LYS', 'Lysine', 'K'),\r\n MET: new ResidueType('MET', 'Methionine', 'M'),\r\n PHE: new ResidueType('PHE', 'Phenylalanine', 'F'),\r\n PRO: new ResidueType('PRO', 'Proline', 'P'),\r\n PYL: new ResidueType('PYL', 'Pyrrolysine', 'O'),\r\n SEC: new ResidueType('SEC', 'Selenocysteine', 'U'),\r\n SER: new ResidueType('SER', 'Serine', 'S'),\r\n THR: new ResidueType('THR', 'Threonine', 'T'),\r\n TRP: new ResidueType('TRP', 'Tryptophan', 'W'),\r\n TYR: new ResidueType('TYR', 'Tyrosine', 'Y'),\r\n VAL: new ResidueType('VAL', 'Valine', 'V'),\r\n A: new ResidueType('A', 'Adenine', 'A'),\r\n C: new ResidueType('C', 'Cytosine', 'C'),\r\n G: new ResidueType('G', 'Guanine', 'G'),\r\n I: new ResidueType('I', 'Inosine', 'I'),\r\n T: new ResidueType('T', 'Thymine', 'T'),\r\n U: new ResidueType('U', 'Uracil', 'U'),\r\n DA: new ResidueType('DA', 'Adenine', 'A'),\r\n DC: new ResidueType('DC', 'Cytosine', 'C'),\r\n DG: new ResidueType('DG', 'Guanine', 'G'),\r\n DI: new ResidueType('DI', 'Inosine', 'I'),\r\n DT: new ResidueType('DT', 'Thymine', 'T'),\r\n DU: new ResidueType('DU', 'Uracil', 'U'),\r\n '+A': new ResidueType('+A', 'Adenine', 'A'),\r\n '+C': new ResidueType('+C', 'Cytosine', 'C'),\r\n '+G': new ResidueType('+G', 'Guanine', 'G'),\r\n '+I': new ResidueType('+I', 'Inosine', 'I'),\r\n '+T': new ResidueType('+T', 'Thymine', 'T'),\r\n '+U': new ResidueType('+U', 'Uracil', 'U'),\r\n WAT: new ResidueType('WAT', 'Water', ''),\r\n H2O: new ResidueType('H2O', 'Water', ''),\r\n HOH: new ResidueType('HOH', 'Water', ''),\r\n DOD: new ResidueType('DOD', 'Water', ''),\r\n UNK: new ResidueType('UNK', 'Unknown', ''),\r\n UNL: new ResidueType('UNL', 'Unknown Ligand', ''),\r\n /* eslint-enable no-magic-numbers */\r\n };\r\n\r\n /**\r\n * Enumeration of residue flag values.\r\n *\r\n * @enum {number}\r\n * @readonly\r\n */\r\n static Flags = {\r\n // Amino acids\r\n /** Amino acid residue */\r\n PROTEIN: 0x0001,\r\n /** Basic amino acid residue */\r\n BASIC: 0x0002,\r\n /** Acidic amino acid residue */\r\n ACIDIC: 0x0004,\r\n /** Polar uncharged side chain amino acid residue */\r\n POLAR: 0x0008,\r\n /** Non-polar hydrophobic side chain amino acid residue */\r\n NONPOLAR: 0x0010,\r\n /** Aromatic amino acid residue */\r\n AROMATIC: 0x0020,\r\n\r\n // Nucleic acids\r\n\r\n /** Nucleic residue */\r\n NUCLEIC: 0x0100,\r\n /** Purine nucleic residue */\r\n PURINE: 0x0200,\r\n /** Pyrimidine nucleic residue */\r\n PYRIMIDINE: 0x0400,\r\n /** DNA */\r\n DNA: 0x0800,\r\n /** RNA */\r\n RNA: 0x1000,\r\n\r\n /** Water */\r\n WATER: 0x10000,\r\n };\r\n}\r\n\r\n// Flag combinations\r\nfunction _addFlag(flag, list) {\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n const res = ResidueType.StandardTypes[list[i]];\r\n if (res) {\r\n res.flags |= flag;\r\n }\r\n }\r\n}\r\n\r\nconst { Flags } = ResidueType;\r\n_addFlag(Flags.WATER, ['WAT', 'H2O', 'HOH', 'DOD']);\r\n\r\n_addFlag(Flags.PROTEIN, [\r\n 'ALA', 'ARG', 'ASN', 'ASP', 'CYS', 'GLY', 'GLU', 'GLN', 'HIS', 'ILE',\r\n 'LEU', 'LYS', 'MET', 'PHE', 'PRO', 'PYL', 'SEC', 'SER', 'THR', 'TRP',\r\n 'TYR', 'VAL',\r\n]);\r\n_addFlag(Flags.BASIC, ['ARG', 'HIS', 'LYS']);\r\n_addFlag(Flags.ACIDIC, ['ASP', 'GLU']);\r\n_addFlag(Flags.POLAR, ['ASN', 'CYS', 'GLN', 'SER', 'THR', 'TYR']);\r\n_addFlag(Flags.NONPOLAR, ['ALA', 'ILE', 'LEU', 'MET', 'PHE', 'PRO', 'TRP', 'VAL', 'GLY']);\r\n_addFlag(Flags.AROMATIC, ['PHE', 'TRP', 'TYR']);\r\n\r\n_addFlag(Flags.NUCLEIC, [\r\n 'A', 'G', 'I', 'DA', 'DG', 'DI', '+A', '+G', '+I',\r\n 'C', 'T', 'U', 'DC', 'DT', 'DU', '+C', '+T', '+U',\r\n]);\r\n_addFlag(Flags.PURINE, ['A', 'G', 'I', 'DA', 'DG', 'DI', '+A', '+G', '+I']);\r\n_addFlag(Flags.PYRIMIDINE, ['C', 'T', 'U', 'DC', 'DT', 'DU', '+C', '+T', '+U']);\r\n_addFlag(Flags.DNA, ['DA', 'DG', 'DI', 'DC', 'DT', 'DU']);\r\n_addFlag(Flags.RNA, ['A', 'G', 'I', 'C', 'T', 'U']);\r\n// Table of kdHydrophobicity\r\nconst hydro = {\r\n ILE: 4.5,\r\n VAL: 4.2,\r\n LEU: 3.8,\r\n PHE: 2.8,\r\n CYS: 2.5,\r\n MET: 1.9,\r\n ALA: 1.8,\r\n GLY: -0.4,\r\n THR: -0.7,\r\n SER: -0.8,\r\n TRP: -0.9,\r\n TYR: -1.3,\r\n PRO: -1.6,\r\n HIS: -3.2,\r\n GLU: -3.5,\r\n GLN: -3.5,\r\n ASP: -3.5,\r\n ASN: -3.5,\r\n LYS: -3.9,\r\n ARG: -4.5,\r\n};\r\n\r\nfunction _addParam(param, list) {\r\n const keys = Object.keys(list);\r\n for (let i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n const value = list[key];\r\n ResidueType.StandardTypes[key][param] = value;\r\n }\r\n}\r\n\r\n_addParam('hydrophobicity', hydro);\r\n\r\nexport default ResidueType;\r\n","import * as THREE from 'three';\r\nimport Residue from './Residue';\r\nimport ResidueType from './ResidueType';\r\n\r\n/**\r\n * Residues in chain are either amino acid either nucleic acid (and water)\r\n * There might be some modified/mutated residues, which type could not be determined by their name (nucleic or amino); In this\r\n * case firstly program definites the chain type (by well-known residues) and then definites modified/mutated residues\r\n */\r\nconst ChainType = {\r\n UNKNOWN: 0,\r\n PROTEIN: 1,\r\n NUCLEIC: 2,\r\n};\r\n\r\n/**\r\n * Residue chain.\r\n *\r\n * @param {Complex} complex - Molecular complex this chain belongs to.\r\n * @param {string} name - One character identifier (usually space, A-Z, 0-9, or a-z).\r\n *\r\n * @exports Chain\r\n * @constructor\r\n */\r\nclass Chain {\r\n constructor(complex, name) {\r\n this._complex = complex;\r\n this._name = name;\r\n this._mask = 1 | 0;\r\n this._index = -1;\r\n this._residues = [];\r\n\r\n this.minSequence = Number.POSITIVE_INFINITY;\r\n this.maxSequence = Number.NEGATIVE_INFINITY;\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getResidues() {\r\n return this._residues;\r\n }\r\n\r\n _determineType() {\r\n const residues = this._residues;\r\n\r\n const { PROTEIN, NUCLEIC } = ResidueType.Flags;\r\n\r\n this.type = ChainType.UNKNOWN;\r\n\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const { flags } = residues[i]._type;\r\n\r\n if ((flags & NUCLEIC) !== 0) {\r\n this.type = ChainType.NUCLEIC;\r\n break;\r\n } else if ((flags & PROTEIN) !== 0) {\r\n this.type = ChainType.PROTEIN;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Finds thre residue with specified sequence number and inserion code\r\n * @param {Number} seqNum sequence number\r\n * @param {string} iCode insertion code\r\n * @returns {*} Residue or null if not found\r\n */\r\n findResidue(seqNum, iCode) {\r\n const residues = this._residues;\r\n\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const res = residues[i];\r\n if (res._sequence === seqNum && res._icode === iCode) {\r\n return [res, i];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _finalize() {\r\n this._determineType();\r\n\r\n const residues = this._residues;\r\n\r\n let prev = null;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const next = (i + 1 < n) ? residues[i + 1] : null;\r\n const curr = residues[i];\r\n // TODO: skip invalid residues\r\n if (1 /* curr._isValid */) { // eslint-disable-line no-constant-condition\r\n curr._finalize2(prev, next, this.type === ChainType.NUCLEIC);\r\n prev = curr;\r\n }\r\n }\r\n\r\n // fix very first wing\r\n if (residues.length > 1 && residues[1]._wingVector) {\r\n const p = residues[1]._wingVector;\r\n residues[0]._wingVector = new THREE.Vector3(p.x, p.y, p.z);\r\n } else if (residues.length > 0) {\r\n residues[0]._wingVector = new THREE.Vector3(1, 0, 0);\r\n }\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const residues = this._residues;\r\n let prev = null;\r\n let prevData = null;\r\n const frameRes = frameData._residues;\r\n const n = residues.length;\r\n function getAtomPos(atom) {\r\n return frameData.getAtomPos(atom.index);\r\n }\r\n\r\n for (let i = 0; i < n; ++i) {\r\n const curr = residues[i];\r\n const currData = frameRes[curr._index];\r\n const nextRes = (i + 1 < n) ? residues[i + 1] : null;\r\n curr._innerFinalize(prev, prevData, nextRes, currData, this.type === ChainType.NUCLEIC, getAtomPos);\r\n prev = curr;\r\n prevData = currData;\r\n }\r\n\r\n frameRes[residues[0]._index]._wingVector = n > 1\r\n ? frameRes[residues[1]._index]._wingVector\r\n : new THREE.Vector3(1, 0, 0);\r\n }\r\n\r\n /**\r\n * Create a new residue.\r\n *\r\n * @param {string} name - Residue name.\r\n * @param {number} sequence - Residue sequence number.\r\n * @param {string} iCode - Insertion code.\r\n * @returns {Residue} - Newly created residue instance.\r\n */\r\n addResidue(name, sequence, iCode) {\r\n let type = this._complex.getResidueType(name);\r\n if (type === null) {\r\n type = this._complex.addResidueType(name);\r\n }\r\n const residue = new Residue(this, type, sequence, iCode);\r\n this._complex.addResidue(residue);\r\n this._residues.push(residue);\r\n\r\n if (type.flags & (ResidueType.Flags.NUCLEIC | ResidueType.Flags.PROTEIN)) {\r\n if (this.maxSequence < sequence) {\r\n this.maxSequence = sequence;\r\n }\r\n if (this.minSequence > sequence) {\r\n this.minSequence = sequence;\r\n }\r\n }\r\n\r\n return residue;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residues.length;\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n mask &= residues[i]._mask;\r\n }\r\n this._mask = mask;\r\n }\r\n}\r\n\r\nexport default Chain;\r\n","import Residue from './Residue';\r\n\r\n/** An element of protein secondary structure. */\r\nclass StructuralElement {\r\n /**\r\n * Create a secondary structural element of the specified type.\r\n *\r\n * @param {StructuralElement.Type} type Secondary structure type.\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n */\r\n constructor(type, init, term) {\r\n /**\r\n * Secondary structure type.\r\n * @type {StructuralElement.Type}\r\n */\r\n this.type = type;\r\n /**\r\n * Generic secondary structure type.\r\n * @type {StructuralElement.Generic}\r\n */\r\n this.generic = StructuralElement.genericByType[this.type] || 'loop';\r\n /**\r\n * Initial residue.\r\n * @type Residue\r\n */\r\n this.init = init;\r\n /**\r\n * Terminal residue.\r\n * @type Residue\r\n */\r\n this.term = term;\r\n }\r\n\r\n /**\r\n * An internal method for making a final pass over the complex to set all required references.\r\n *\r\n * **NOTE:** I'm sorry. It's a legacy code waiting for refactoring.\r\n * Just copying it as-is right now and hoping for the best.\r\n *\r\n * @param {object} serialAtomMap A dictionary of atoms\r\n * @param {object} residueHash A dictionary of hashed residues to check.\r\n * @param {Complex} complex The molecular complex this element belongs to.\r\n */\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n if (this.init instanceof Residue && this.term instanceof Residue) {\r\n return;\r\n }\r\n\r\n // Link all intermediate residues to this structural element\r\n const start = complex.splitUnifiedSerial(this.init);\r\n const end = complex.splitUnifiedSerial(this.term);\r\n for (let chainId = start.chain; chainId <= end.chain; chainId++) {\r\n for (let serialId = start.serial; serialId <= end.serial; serialId++) {\r\n for (let { iCode } = start; iCode <= end.iCode; iCode++) {\r\n const hashCode = complex.getUnifiedSerial(chainId, serialId, iCode);\r\n if (residueHash[hashCode]) {\r\n residueHash[hashCode]._secondary = this;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Replace unfined serials by objects\r\n this.init = residueHash[this.init];\r\n this.term = residueHash[this.term];\r\n }\r\n}\r\n\r\n/**\r\n * Specific type of a secondary structural element.\r\n * @enum {string}\r\n * @see StructuralElement.Generic\r\n */\r\nStructuralElement.Type = {\r\n /** A strand of a [beta-sheet](https://en.wikipedia.org/wiki/Beta_sheet). */\r\n STRAND: 'E',\r\n /** An isolated beta-bridge (too small for a beta-sheet). */\r\n BRIDGE: 'B',\r\n\r\n /** A [3/10 helix](https://en.wikipedia.org/wiki/310_helix) (hydrogen bonding is 3 residues apart). */\r\n HELIX_310: 'G',\r\n /** An [alpha-helix](https://en.wikipedia.org/wiki/Alpha_helix) (hydrogen bonding is 4 residues apart). */\r\n HELIX_ALPHA: 'H',\r\n /** A [pi-helix](https://en.wikipedia.org/wiki/Pi_helix) (hydrogen bonding is 5 residues apart). */\r\n HELIX_PI: 'I',\r\n /** A generic helix of unspecified bonding distance. */\r\n HELIX: 'X',\r\n\r\n /** An isolated 3/10-like helical turn. */\r\n TURN_310: '3',\r\n /** An isolated alpha-like helical turn. */\r\n TURN_ALPHA: '4',\r\n /** An isolated pi-like helical turn. */\r\n TURN_PI: '5',\r\n /** An isolated helical [turn](https://en.wikipedia.org/wiki/Turn_(biochemistry)) of unspecified bonding distance. */\r\n TURN: 'T',\r\n\r\n /** A bend (a region of high curvature). */\r\n BEND: 'S',\r\n /** Just a protein section with no particular conformation. */\r\n COIL: 'C',\r\n};\r\n\r\n/**\r\n * Generic type of a secondary structural element.\r\n * @enum {string}\r\n * @see StructuralElement.Type\r\n */\r\nStructuralElement.Generic = {\r\n /** A strand of a sheet. */\r\n STRAND: 'strand',\r\n /** A helix. */\r\n HELIX: 'helix',\r\n /** Just a protein section with no particular conformation. */\r\n LOOP: 'loop',\r\n};\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\nconst StructuralElementGeneric = StructuralElement.Generic;\r\n\r\n/**\r\n * A mapping from specific types to generic ones.\r\n * @type {Object}\r\n */\r\nStructuralElement.genericByType = {\r\n [StructuralElementType.STRAND]: StructuralElementGeneric.STRAND,\r\n [StructuralElementType.HELIX_310]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX_ALPHA]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX_PI]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX]: StructuralElementGeneric.HELIX,\r\n};\r\n\r\nexport default StructuralElement;\r\n","import StructuralElement from './StructuralElement';\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\nexport const typeByPDBHelixClass = {\r\n 1: StructuralElementType.HELIX_ALPHA,\r\n 3: StructuralElementType.HELIX_PI,\r\n 5: StructuralElementType.HELIX_310,\r\n};\r\n\r\n/**\r\n * Helical secondary structure of a protein.\r\n * @extends StructuralElement\r\n */\r\nclass Helix extends StructuralElement {\r\n /**\r\n * Create a helix.\r\n *\r\n * @param {number} helixClass A helix class according to the\r\n * [PDB Format](http://www.wwpdb.org/documentation/file-format-content/format33/sect5.html#HELIX).\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n * @param {number} serial Serial number of the helix (see PDB Format).\r\n * @param {string} name Helix identifier (see PDB Format).\r\n * @param {string} comment Comment about this helix (see PDB Format).\r\n * @param {number} length Length of this helix, in residues (see PDB Format).\r\n */\r\n constructor(helixClass, init, term, serial, name, comment, length) {\r\n super(typeByPDBHelixClass[helixClass] || StructuralElement.Type.HELIX, init, term);\r\n\r\n /**\r\n * Serial number of the helix (see PDB Format).\r\n * @type {number}\r\n */\r\n this.serial = serial;\r\n /**\r\n * Helix identifier (see PDB Format).\r\n * @type {string}\r\n */\r\n this.name = name;\r\n /**\r\n * Comment about this helix (see PDB Format).\r\n * @type {string}\r\n */\r\n this.comment = comment;\r\n /**\r\n * Length of this helix, in residues (see PDB Format).\r\n * @type {number}\r\n */\r\n this.length = length;\r\n }\r\n}\r\n\r\nexport default Helix;\r\n","import StructuralElement from './StructuralElement';\r\n\r\n/**\r\n * A single strand of a sheet in a protein secondary structure.\r\n * @extends StructuralElement\r\n */\r\nclass Strand extends StructuralElement {\r\n /**\r\n * Create a strand.\r\n *\r\n * @param {Sheet} sheet Parent sheet this strand belongs to.\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n * @param {number} sense Sense of strand with respect to previous strand in the sheet.\r\n * - 0 if the first strand,\r\n * - 1 if parallel, and\r\n * - -1 if anti-parallel.\r\n * @param {Atom} atomCur Atom in current strand (see PDB Format).\r\n * @param {Atom} atomPrev Atom in previous strand (see PDB Format).\r\n */\r\n constructor(sheet, init, term, sense, atomCur, atomPrev) {\r\n super(StructuralElement.Type.STRAND, init, term);\r\n\r\n /**\r\n * Parent sheet this strand belongs to.\r\n * @type {Sheet}\r\n */\r\n this.sheet = sheet;\r\n /**\r\n * Sense of strand with respect to previous strand in the sheet.\r\n * - 0 if the first strand,\r\n * - 1 if parallel, and\r\n * - -1 if anti-parallel.\r\n * @type {number}\r\n */\r\n this.sense = sense;\r\n /**\r\n * Atom in current strand (see PDB Format).\r\n * @type {Atom}\r\n */\r\n this.atomCur = atomCur;\r\n /**\r\n * Atom in previous strand (see PDB Format).\r\n * @type {Atom}\r\n */\r\n this.atomPrev = atomPrev;\r\n }\r\n\r\n /**\r\n * An internal method for making a final pass over the complex to set all required references.\r\n *\r\n * **NOTE:** I'm sorry. It's a legacy code waiting for refactoring.\r\n * Just copying it as-is right now and hoping for the best.\r\n *\r\n * @param {object} serialAtomMap A dictionary of atoms\r\n * @param {object} residueHash A dictionary of hashed residues to check.\r\n * @param {Complex} complex The molecular complex this element belongs to.\r\n *\r\n * @override\r\n */\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n super._finalize(serialAtomMap, residueHash, complex);\r\n\r\n let as = this.atomCur;\r\n if (as !== null && !Number.isNaN(as)) {\r\n this.atomCur = serialAtomMap[as];\r\n }\r\n as = this.atomPrev;\r\n if (as !== null && !Number.isNaN(as)) {\r\n this.atomPrev = serialAtomMap[as];\r\n }\r\n }\r\n}\r\n\r\nexport default Strand;\r\n","import Strand from './Strand';\r\n\r\n/**\r\n * Sheet secondary structure of a protein.\r\n *\r\n * @param {string} name -\r\n * @param {number} width -\r\n *\r\n * @exports Sheet\r\n * @constructor\r\n */\r\nclass Sheet {\r\n constructor(name, width) {\r\n this._name = name;\r\n this._width = width;\r\n\r\n this._strands = [];\r\n }\r\n\r\n // Getters and setters\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getWidth() {\r\n return this._width;\r\n }\r\n\r\n addStrand(strand) {\r\n this._strands.push(strand);\r\n this._width = this._strands.length;\r\n }\r\n\r\n addEmptyStrand() {\r\n this._strands.push(new Strand(null, null, null, null, null, null));\r\n }\r\n\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n const s = this._strands;\r\n for (let i = 0, n = s.length; i < n; ++i) {\r\n s[i]._finalize(serialAtomMap, residueHash, complex);\r\n }\r\n if (!this._width) {\r\n this._width = s.length;\r\n }\r\n if (s.length !== this._width) {\r\n throw new Error(`Sheet ${this._name} is inconsistent.`);\r\n }\r\n }\r\n}\r\n\r\nexport default Sheet;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Atom measurements.\r\n *\r\n * @param {string} id - SGroup id\r\n * @param {string} name - Name of the group\r\n * @param {THREE.Vector3} position - Registered coordinates\r\n * @param {array} atoms - Atoms group consists of\r\n * @param {object} saveNode - XML node from file for saving\r\n *\r\n * @exports SGroup\r\n * @constructor\r\n */\r\nclass SGroup {\r\n constructor(id, name, position, atoms, saveNode) {\r\n this._id = id;\r\n this._name = name;\r\n this._position = position || new THREE.Vector3();\r\n this._atoms = atoms || [];\r\n this._charge = 0; // default group charge\r\n this._repeat = 1; // how many times group repeated: always > 0\r\n this._center = null;\r\n this.xmlNodeRef = saveNode || null;\r\n }\r\n\r\n /**\r\n * Get atom full name.\r\n * @returns {string} Atom full name.\r\n */\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getPosition() {\r\n return this._position;\r\n }\r\n\r\n getCentralPoint() {\r\n return this._center;\r\n }\r\n\r\n _rebuildSGroupOnAtomChange() {\r\n const nLimon = 100000000;\r\n if (this._center === null) {\r\n return; // nothing to do if we are not relative\r\n }\r\n\r\n const bLow = new THREE.Vector3(nLimon, nLimon, nLimon);\r\n const bHight = new THREE.Vector3(-nLimon, -nLimon, -nLimon);\r\n for (let j = 0, n = this._atoms.length; j < n; j++) {\r\n const aPos = this._atoms[j].position;\r\n bLow.set(Math.min(bLow.x, aPos.x), Math.min(bLow.y, aPos.y), Math.min(bLow.z, aPos.z));\r\n bHight.set(Math.max(bHight.x, aPos.x), Math.max(bHight.y, aPos.y), Math.max(bHight.z, aPos.z));\r\n }\r\n this._center.addVectors(bLow, bHight);\r\n this._center.multiplyScalar(0.5);\r\n }\r\n}\r\n\r\nexport default SGroup;\r\n","import utils from '../../utils';\r\n\r\n//----------------------------------------------------------------------------\r\nclass Range {\r\n constructor(min, max) {\r\n this.min = min;\r\n this.max = typeof max === 'undefined' ? min : max;\r\n }\r\n\r\n includes(value) {\r\n return this.min <= value && value <= this.max;\r\n }\r\n\r\n toString() {\r\n const { min, max } = this;\r\n return min === max ? String(min) : [min, max].join(':');\r\n }\r\n\r\n toJSON() {\r\n return [this.min, this.max];\r\n }\r\n}\r\n\r\n// ////////////////////////////////////////////////////////////////////////////\r\n\r\nclass List {\r\n constructor(arg) {\r\n if (arg instanceof this.constructor) {\r\n // delegate construction to a different class\r\n // eslint-disable-next-line no-constructor-return\r\n return arg;\r\n }\r\n if (arg instanceof Array) {\r\n this._values = arg.slice(0);\r\n } else if (arg) {\r\n this._values = [arg];\r\n } else {\r\n this._values = [];\r\n }\r\n }\r\n\r\n append(value) {\r\n const values = this._values;\r\n values[values.length] = value;\r\n return this;\r\n }\r\n\r\n remove(value) {\r\n const values = this._values;\r\n const index = values.indexOf(value);\r\n if (index >= 0) {\r\n values.splice(index, 1);\r\n }\r\n return this;\r\n }\r\n\r\n toString() {\r\n return this._values.join(',');\r\n }\r\n\r\n toJSON() {\r\n const values = this._values;\r\n const result = [];\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n const value = values[i];\r\n result[i] = value.toJSON ? value.toJSON() : value;\r\n }\r\n return result;\r\n }\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n\r\nclass RangeList extends List {\r\n includes(value) {\r\n const list = this._values;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n if (list[i].includes(value)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n\r\nconst valuesArray = [];\r\n\r\nclass ValueList extends List {\r\n constructor(arg, upperOnly) {\r\n const list = super(arg);\r\n if (upperOnly) {\r\n this.upperOnly = true;\r\n const values = list._values;\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n const value = values[i];\r\n if (typeof value === 'string') {\r\n values[i] = value.toUpperCase();\r\n }\r\n }\r\n } else {\r\n this.upperOnly = false;\r\n }\r\n // return constructed object\r\n // eslint-disable-next-line no-constructor-return\r\n return list;\r\n }\r\n\r\n includes(value) {\r\n // we do not convert to upper case here for perfomance reasons\r\n // if list is upper case only, value must be converted before it is sent up to here\r\n return this._values.indexOf(value) !== -1;\r\n }\r\n\r\n toString() {\r\n // Quote values that are not correct identifiers\r\n const values = this._values;\r\n valuesArray.length = 0;\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n valuesArray[i] = utils.correctSelectorIdentifier(String(values[i]));\r\n }\r\n return valuesArray.join(',');\r\n }\r\n\r\n _validate(value) {\r\n return (this.upperOnly && typeof value === 'string') ? value.toUpperCase() : value;\r\n }\r\n\r\n append(value) {\r\n super.append(this._validate(value));\r\n return this;\r\n }\r\n\r\n remove(value) {\r\n super.remove(this._validate(value));\r\n return this;\r\n }\r\n}\r\n\r\nexport {\r\n Range,\r\n List,\r\n RangeList,\r\n ValueList,\r\n};\r\n","import { RangeList, ValueList } from './selectArgs';\r\n\r\n/** Base class for atom selectors. */\r\nclass Selector {\r\n toString() {\r\n return this.keyword;\r\n }\r\n\r\n toJSON() {\r\n return [this.name];\r\n }\r\n}\r\n\r\nSelector.prototype.name = 'Error';\r\nSelector.prototype.keyword = 'error';\r\n\r\n/** Base class for list-based atom selectors. */\r\nclass ListSelector extends Selector {\r\n constructor(list) {\r\n super();\r\n this.list = list;\r\n }\r\n\r\n toString() {\r\n return `${this.keyword} ${this.list}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.list.toJSON()];\r\n }\r\n}\r\n\r\nclass RangeListSelector extends ListSelector {\r\n constructor(arg) {\r\n super(new RangeList(arg));\r\n }\r\n}\r\n\r\nclass ValueListSelector extends ListSelector {\r\n constructor(arg, caseSensitive) {\r\n super(new ValueList(arg, !caseSensitive));\r\n }\r\n}\r\n\r\nclass NoneSelector extends Selector {\r\n includesAtom(_atom) {\r\n return false;\r\n }\r\n}\r\n\r\nNoneSelector.prototype.name = 'None';\r\nNoneSelector.prototype.keyword = 'none';\r\n\r\nclass AllSelector extends Selector {\r\n includesAtom(_atom) {\r\n return true;\r\n }\r\n}\r\n\r\nAllSelector.prototype.name = 'All';\r\nAllSelector.prototype.keyword = 'all';\r\n\r\nexport {\r\n Selector,\r\n ListSelector,\r\n RangeListSelector,\r\n ValueListSelector,\r\n NoneSelector,\r\n AllSelector,\r\n};\r\n","import { Selector, NoneSelector } from './selectorsBase';\r\n\r\n//----------------------------------------------------------------------------\r\n// Operators\r\n//----------------------------------------------------------------------------\r\nconst none = new NoneSelector();\r\n\r\nclass PrefixOperator extends Selector {\r\n constructor(rhs) {\r\n super();\r\n this.rhs = rhs || none;\r\n }\r\n\r\n toString() {\r\n const rhs = this.rhs.priority && this.rhs.priority > this.priority ? `(${this.rhs})` : this.rhs;\r\n return `${this.keyword} ${rhs}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.rhs.toJSON()];\r\n }\r\n}\r\n\r\nPrefixOperator.prototype.priority = 1;\r\n\r\nclass InfixOperator extends Selector {\r\n constructor(lhs, rhs) {\r\n super();\r\n this.lhs = lhs || none;\r\n this.rhs = rhs || none;\r\n }\r\n\r\n toString() {\r\n const lhs = this.lhs.priority && this.lhs.priority > this.priority ? `(${this.lhs})` : this.lhs;\r\n const rhs = this.rhs.priority && this.rhs.priority > this.priority ? `(${this.rhs})` : this.rhs;\r\n return `${lhs} ${this.keyword} ${rhs}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.lhs.toJSON(), this.rhs.toJSON()];\r\n }\r\n}\r\n\r\nInfixOperator.prototype.priority = 1000;\r\n\r\nexport { PrefixOperator, InfixOperator };\r\n","import Atom from './Atom';\r\nimport ResidueType from './ResidueType';\r\nimport { parser } from '../utils/SelectionParser';\r\nimport { Range, RangeList, ValueList } from './selectors/selectArgs';\r\nimport { PrefixOperator, InfixOperator } from './selectors/selectOps';\r\nimport {\r\n Selector,\r\n RangeListSelector,\r\n ValueListSelector,\r\n NoneSelector,\r\n AllSelector,\r\n} from './selectors/selectorsBase';\r\n\r\nconst keywords = {};\r\n\r\n//----------------------------------------------------------------------------\r\n// Named selectors\r\n//----------------------------------------------------------------------------\r\n\r\nfunction defineSelector(name, SelectorClass) {\r\n const keyword = name.toLowerCase();\r\n SelectorClass.prototype.keyword = keyword;\r\n SelectorClass.prototype.name = name;\r\n\r\n const factory = ((...args) => new SelectorClass(...args));\r\n factory.SelectorClass = SelectorClass;\r\n keywords[keyword] = factory;\r\n\r\n return SelectorClass;\r\n}\r\n\r\ndefineSelector('Serial', class SerialSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.serial);\r\n }\r\n});\r\n\r\ndefineSelector('Name', class NameSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.name);\r\n }\r\n});\r\n\r\ndefineSelector('AltLoc', class AltLocSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(String.fromCharCode(atom.location));\r\n }\r\n});\r\n\r\ndefineSelector('Elem', class ElemSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.element.name);\r\n }\r\n});\r\n\r\ndefineSelector('Residue', class ResidueSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._type._name);\r\n }\r\n});\r\n\r\ndefineSelector('Sequence', class SequenceSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._sequence);\r\n }\r\n});\r\n\r\ndefineSelector('ICode', class ICodeSelector extends ValueListSelector {\r\n constructor(arg) {\r\n super(arg, true);\r\n }\r\n\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._icode);\r\n }\r\n});\r\n\r\ndefineSelector('ResIdx', class ResIdxSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._index);\r\n }\r\n});\r\n\r\ndefineSelector('Chain', class ChainSelector extends ValueListSelector {\r\n constructor(arg) {\r\n super(arg, true);\r\n }\r\n\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._chain._name);\r\n }\r\n});\r\n\r\ndefineSelector('Hetatm', class HetatmSelector extends Selector {\r\n includesAtom(atom) {\r\n return atom.het;\r\n }\r\n});\r\n\r\ndefineSelector('PolarH', class PolarHSelector extends Selector {\r\n includesAtom(atom) {\r\n return (atom.flags & Atom.Flags.NONPOLARH) === Atom.Flags.HYDROGEN;\r\n }\r\n});\r\n\r\ndefineSelector('NonPolarH', class NonPolarHSelector extends Selector {\r\n includesAtom(atom) {\r\n return (atom.flags & Atom.Flags.NONPOLARH) === Atom.Flags.NONPOLARH;\r\n }\r\n});\r\n\r\ndefineSelector('All', AllSelector);\r\n\r\ndefineSelector('None', NoneSelector);\r\n\r\nconst NULL_SELECTOR = keywords.none();\r\n\r\n//----------------------------------------------------------------------------\r\n// Named operators\r\n//----------------------------------------------------------------------------\r\n\r\nfunction defineOperator(name, priority, OperatorClass) {\r\n OperatorClass.prototype.priority = priority;\r\n return defineSelector(name, OperatorClass);\r\n}\r\ndefineOperator('Not', 1, class NotOperator extends PrefixOperator {\r\n includesAtom(atom) {\r\n return !this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\ndefineOperator('And', 2, class AndOperator extends InfixOperator {\r\n includesAtom(atom) {\r\n return this.lhs.includesAtom(atom) && this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\ndefineOperator('Or', 3, class OrOperator extends InfixOperator {\r\n includesAtom(atom) {\r\n return this.lhs.includesAtom(atom) || this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\n//----------------------------------------------------------------------------\r\n// Flag selectors\r\n//----------------------------------------------------------------------------\r\n\r\nfunction byResidueTypeFlag(flag, name) {\r\n return defineSelector(name, class extends Selector {\r\n includesAtom(atom) {\r\n return (atom.residue._type.flags & flag) !== 0;\r\n }\r\n });\r\n}\r\n\r\nbyResidueTypeFlag(ResidueType.Flags.PROTEIN, 'Protein');\r\nbyResidueTypeFlag(ResidueType.Flags.BASIC, 'Basic');\r\nbyResidueTypeFlag(ResidueType.Flags.ACIDIC, 'Acidic');\r\nbyResidueTypeFlag(ResidueType.Flags.BASIC | ResidueType.Flags.ACIDIC, 'Charged');\r\nbyResidueTypeFlag(ResidueType.Flags.POLAR, 'Polar');\r\nbyResidueTypeFlag(ResidueType.Flags.NONPOLAR, 'NonPolar');\r\nbyResidueTypeFlag(ResidueType.Flags.AROMATIC, 'Aromatic');\r\nbyResidueTypeFlag(ResidueType.Flags.NUCLEIC, 'Nucleic');\r\nbyResidueTypeFlag(ResidueType.Flags.PURINE, 'Purine');\r\nbyResidueTypeFlag(ResidueType.Flags.PYRIMIDINE, 'Pyrimidine');\r\nbyResidueTypeFlag(ResidueType.Flags.WATER, 'Water');\r\n\r\n//----------------------------------------------------------------------------\r\nconst selectors = Object.create(keywords);\r\n\r\nselectors.Selector = Selector;\r\nselectors.RangeListSelector = RangeListSelector;\r\nselectors.ValueListSelector = ValueListSelector;\r\nselectors.Range = Range;\r\nselectors.RangeList = RangeList;\r\nselectors.ValueList = ValueList;\r\nselectors.PrefixOperator = PrefixOperator;\r\nselectors.InfixOperator = InfixOperator;\r\nselectors.Context = Object.create({});\r\n\r\nselectors.GetSelector = function (key) {\r\n if (!selectors.Context.hasOwnProperty(key)) {\r\n const exc = { message: `selector ${key} is not registered` };\r\n throw exc;\r\n }\r\n return selectors.Context[key] || NULL_SELECTOR;\r\n};\r\n\r\nselectors.ClearContext = function () {\r\n Object.keys(selectors.Context).forEach((k) => { delete selectors.Context[k]; });\r\n};\r\n\r\nselectors.keyword = function (key) {\r\n return keywords[key.toLowerCase()] || keywords.none;\r\n};\r\n\r\nselectors.parse = function (str) {\r\n const res = {};\r\n try {\r\n res.selector = parser.parse(str);\r\n } catch (e) {\r\n res.selector = NULL_SELECTOR;\r\n res.error = e.message;\r\n }\r\n return res;\r\n};\r\n\r\nparser.yy = selectors;\r\nparser.yy.parseError = parser.parseError; // workaround for incorrect JISON parser generator for AMD module\r\n\r\nexport default selectors;\r\n","import * as THREE from 'three';\r\nimport selectors from './selectors';\r\n\r\n/**\r\n * Basic biological unit class.\r\n *\r\n * @exports BiologicalUnit\r\n * @constructor\r\n */\r\nclass BiologicalUnit {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._selector = selectors.keyword('All')();\r\n this._boundaries = {\r\n boundingBox: new THREE.Box3(),\r\n boundingSphere: new THREE.Sphere(),\r\n };\r\n }\r\n\r\n computeBoundaries() {\r\n const atoms = this._complex._atoms;\r\n const n = atoms.length;\r\n const selector = this._selector;\r\n\r\n const { boundingBox } = this._boundaries;\r\n boundingBox.makeEmpty();\r\n if (n === 1) {\r\n boundingBox.expandByPoint(atoms[0].position);\r\n const bbc = new THREE.Vector3();\r\n boundingBox.getCenter(bbc);\r\n const s = 2 * atoms[0].element.radius;\r\n boundingBox.setFromCenterAndSize(bbc, new THREE.Vector3(s, s, s));\r\n } else {\r\n for (let i = 0; i < n; ++i) {\r\n if (selector.includesAtom(atoms[i])) {\r\n boundingBox.expandByPoint(atoms[i].position);\r\n }\r\n }\r\n }\r\n\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n if (n === 1) {\r\n this._boundaries.boundingSphere.set(center, atoms[0].element.radius);\r\n } else {\r\n for (let i = 0; i < n; ++i) {\r\n if (!selector.includesAtom(atoms[i])) {\r\n continue;\r\n }\r\n const pos = atoms[i].position;\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n this._boundaries.boundingSphere.set(center, Math.sqrt(radiusSquared));\r\n }\r\n }\r\n\r\n getTransforms() {\r\n return [];\r\n }\r\n\r\n getSelector() {\r\n return this._selector;\r\n }\r\n\r\n getBoundaries() {\r\n return this._boundaries;\r\n }\r\n\r\n finalize() {\r\n }\r\n}\r\n\r\nexport default BiologicalUnit;\r\n","import * as THREE from 'three';\r\nimport selectors from './selectors';\r\nimport BiologicalUnit from './BiologicalUnit';\r\n\r\n/**\r\n * Biological assembly.\r\n *\r\n * @exports Assembly\r\n * @constructor\r\n */\r\n\r\nclass Assembly extends BiologicalUnit {\r\n constructor(complex) {\r\n super(complex);\r\n this.chains = [];\r\n this.matrices = [];\r\n }\r\n\r\n computeBoundaries() {\r\n super.computeBoundaries();\r\n // fix up the boundaries\r\n const { matrices } = this;\r\n const oldCenter = this._boundaries.boundingSphere.center;\r\n const oldRad = this._boundaries.boundingSphere.radius;\r\n const boundingBox = this._boundaries.boundingBox = new THREE.Box3();\r\n boundingBox.makeEmpty();\r\n for (let i = 0, n = matrices.length; i < n; ++i) {\r\n boundingBox.expandByPoint(oldCenter.clone().applyMatrix4(matrices[i]));\r\n }\r\n\r\n const newRad = boundingBox.max.distanceTo(boundingBox.min) / 2 + oldRad;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n this._boundaries.boundingSphere = new THREE.Sphere().set(center, newRad);\r\n boundingBox.max.addScalar(oldRad);\r\n boundingBox.min.subScalar(oldRad);\r\n }\r\n\r\n /**\r\n * Mark a chain as belonging to this biological assembly.\r\n * @param {string} chain - chain identifier, usually a single letter\r\n */\r\n addChain(chain) {\r\n this.chains[this.chains.length] = chain;\r\n }\r\n\r\n /**\r\n * Add a transformation matrix.\r\n * @param {THREE.Matrix4} matrix - transformation matrix\r\n */\r\n addMatrix(matrix) {\r\n this.matrices[this.matrices.length] = matrix;\r\n }\r\n\r\n getTransforms() {\r\n return this.matrices;\r\n }\r\n\r\n finalize() {\r\n if (this.chains.length > 0) {\r\n this._selector = selectors.keyword('Chain')(this.chains);\r\n } else {\r\n this._selector = selectors.keyword('None')();\r\n }\r\n }\r\n}\r\n\r\nexport default Assembly;\r\n","/**\r\n * This class represents connected component as a part of a complex.\r\n * WARNING! The whole component entity is build under the assumption that residues\r\n * are placed in the chains and complex in ascending order of indices\r\n *\r\n * @param {Complex} complex - Molecular complex this chain belongs to.\r\n *\r\n * @exports Component\r\n * @constructor\r\n */\r\nclass Component {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._index = -1;\r\n this._residueIndices = [];\r\n this._cycles = [];\r\n this._subDivs = [];\r\n this._residueCount = 0;\r\n }\r\n\r\n getResidues() {\r\n return this._complex._residues;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residueCount;\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._complex._residues;\r\n const resIdc = this._residueIndices;\r\n for (let idIdc = 0, idCount = resIdc.length; idIdc < idCount; ++idIdc) {\r\n for (let idx = resIdc[idIdc].start, last = resIdc[idIdc].end; idx <= last; ++idx) {\r\n process(residues[idx]);\r\n }\r\n }\r\n }\r\n\r\n setSubDivs(subDivs) {\r\n this._subDivs = subDivs;\r\n let curr = 0;\r\n const resIdc = [];\r\n let resCnt = 0;\r\n for (let i = 0, n = subDivs.length; i < n; ++i) {\r\n if (i === n - 1 || subDivs[i].end + 1 !== subDivs[i + 1].start) {\r\n const { start } = subDivs[curr];\r\n const { end } = subDivs[i];\r\n resIdc[resIdc.length] = {\r\n start,\r\n end,\r\n };\r\n resCnt += end - start + 1;\r\n curr = i + 1;\r\n }\r\n }\r\n\r\n this._residueIndices = resIdc;\r\n this._residueCount = resCnt;\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n forEachBond(process) {\r\n const bonds = this._complex._bonds;\r\n\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n const bond = bonds[i];\r\n if (bond._left.residue._component === this) {\r\n process(bond);\r\n }\r\n }\r\n }\r\n\r\n update() {\r\n this.forEachCycle((cycle) => {\r\n cycle.update();\r\n });\r\n }\r\n\r\n forEachAtom(process) {\r\n this.forEachResidue((residue) => {\r\n residue.forEachAtom(process);\r\n });\r\n }\r\n\r\n addCycle(cycle) {\r\n this._cycles.push(cycle);\r\n }\r\n\r\n forEachCycle(process) {\r\n const cycles = this._cycles;\r\n for (let i = 0, n = cycles.length; i < n; ++i) {\r\n process(cycles[i]);\r\n }\r\n }\r\n\r\n markResidues() {\r\n const self = this;\r\n self.forEachResidue((residue) => {\r\n residue._component = self;\r\n });\r\n }\r\n\r\n _forEachSubChain(mask, process) {\r\n const residues = this._complex._residues;\r\n const subs = this._subDivs;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n for (let idx = subs[i].start, last = subs[i].end; idx <= last; ++idx) {\r\n const currRes = residues[idx];\r\n if (mask & currRes._mask && currRes._isValid) {\r\n let end = idx + 1;\r\n for (; end <= last; ++end) {\r\n const endRes = residues[end];\r\n if (!(mask & endRes._mask && endRes._isValid)) {\r\n break;\r\n }\r\n }\r\n process(i, idx, end - 1);\r\n idx = end;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getMaskedSequences(mask) {\r\n const subs = [];\r\n let idx = 0;\r\n this._forEachSubChain(mask, (_subIdx, start, end) => {\r\n subs[idx++] = { start, end };\r\n });\r\n\r\n return subs;\r\n }\r\n\r\n getMaskedSubdivSequences(mask) {\r\n const subs = [];\r\n let currIdx = -1;\r\n let lastSubIdx = -1;\r\n const subDivs = this._subDivs;\r\n\r\n this._forEachSubChain(mask, (subIdx, start, end) => {\r\n if (lastSubIdx !== subIdx) {\r\n ++currIdx;\r\n subs[currIdx] = {\r\n arr: [],\r\n boundaries: subDivs[subIdx],\r\n };\r\n lastSubIdx = subIdx;\r\n }\r\n subs[currIdx].arr[subs[currIdx].arr.length] = { start, end };\r\n });\r\n\r\n return subs;\r\n }\r\n}\r\n\r\nexport default Component;\r\n","import utils from '../utils';\r\n\r\nconst cMaxPairsForHashCode = 32;\r\nconst cHashTableSize = 1024 * 1024;\r\nconst cNumbersPerPair = 4;\r\nconst cMaxNeighbours = 14;\r\nconst cInvalidVal = -1;\r\n// 89237 is a large simple number, can be used for pseudo random hash code create\r\nconst cBigPrime = 89237;\r\n\r\nclass AtomPairs {\r\n constructor(maxPairsEstimate) {\r\n this.numPairs = 0;\r\n this.numMaxPairs = maxPairsEstimate;\r\n this.intBuffer = utils.allocateTyped(Int32Array, maxPairsEstimate * cNumbersPerPair);\r\n for (let i = 0; i < maxPairsEstimate * cNumbersPerPair; i++) {\r\n this.intBuffer[i] = cInvalidVal;\r\n }\r\n this.hashBuffer = utils.allocateTyped(Int32Array, cHashTableSize * cMaxPairsForHashCode);\r\n for (let i = 0; i < cHashTableSize * cMaxPairsForHashCode; i++) {\r\n this.hashBuffer[i] = cInvalidVal;\r\n }\r\n }\r\n\r\n /**\r\n * Destroy all pairs memory\r\n */\r\n destroy() {\r\n this.intBuffer = null;\r\n this.hashBuffer = null;\r\n }\r\n\r\n /**\r\n * Add pair of atoms to collection\r\n * @param {number} indexA - Index of the 1st vertex.\r\n * @param {number} indexB - Index of the 2nd vertex.\r\n */\r\n addPair(indexA, indexB) {\r\n const ia = (indexA < indexB) ? indexA : indexB;\r\n const ib = (indexA > indexB) ? indexA : indexB;\r\n const codeToAdd = ia + (ib << cMaxNeighbours);\r\n\r\n const hashCode = (ia + (ib * cBigPrime)) & (cHashTableSize - 1);\r\n let j = hashCode * cMaxPairsForHashCode;\r\n let apI = 0;\r\n for (; apI < cMaxPairsForHashCode; apI++) {\r\n const code = this.hashBuffer[j + apI];\r\n if (code === cInvalidVal) {\r\n break;\r\n }\r\n if (code === codeToAdd) {\r\n return false;\r\n }\r\n }\r\n // add this new hash code\r\n if (apI >= cMaxPairsForHashCode) {\r\n throw new Error('addPair: increase cMaxPairsForHashCode');\r\n }\r\n this.hashBuffer[j + apI] = codeToAdd;\r\n\r\n // actually add\r\n if (this.numPairs >= this.numMaxPairs) {\r\n throw new Error('addPair: increase num pairs');\r\n }\r\n j = this.numPairs * cNumbersPerPair;\r\n this.intBuffer[j] = ia;\r\n this.intBuffer[j + 1] = ib;\r\n this.intBuffer[j + 2] = codeToAdd;\r\n this.numPairs++;\r\n return true;\r\n }\r\n}\r\n\r\nexport default AtomPairs;\r\n","import AtomPairs from './AtomPairs';\r\nimport Bond from './Bond';\r\n\r\nconst cProfileBondBuilder = false;\r\nconst cEstBondsMultiplier = 4;\r\nconst cSpaceCode = 32;\r\nconst cBondTolerance = 0.45;\r\nconst cVMDTolerance = 0.6;\r\nconst cBondRadInJMOL = true;\r\nconst cEpsilon = 0.001;\r\n\r\n/**\r\n * Get radius used for building bonds.\r\n *\r\n * @param {Atom} atom - Atom object.\r\n * @returns {number} special value for bonding radius for this atom\r\n */\r\nfunction _getBondingRadius(atom) {\r\n const { element } = atom;\r\n if (element) {\r\n return element.radiusBonding;\r\n }\r\n throw new Error('_getBondingRadius: Logic error.');\r\n}\r\n\r\nfunction _isAtomEligible(atom) {\r\n // build for all non-hetatm and for hetatm without bonds\r\n return !atom.isHet() || (atom.bonds && atom.bonds.length === 0);\r\n}\r\n\r\n/**\r\n * Bond between atoms.\r\n *\r\n * @param {Complex} complex molecular complex\r\n\r\n * @exports AutoBond\r\n * @constructor\r\n */\r\nclass AutoBond {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._maxRad = 1.8;\r\n const bBox = this._complex.getDefaultBoundaries().boundingBox;\r\n this._vBoxMin = bBox.min.clone();\r\n this._vBoxMax = bBox.max.clone();\r\n\r\n this._pairCollection = null;\r\n }\r\n\r\n /**\r\n * Add existing pairs of connectors (from pdb file after its reading)\r\n * @returns {number} 0\r\n */\r\n _addExistingPairs() {\r\n const atoms = this._complex.getAtoms();\r\n const numAtoms = atoms.length;\r\n let aInd = 0;\r\n const collection = this._pairCollection;\r\n\r\n for (; aInd < numAtoms; aInd++) {\r\n const { bonds } = atoms[aInd];\r\n const numBondsForAtom = bonds.length;\r\n for (let bInd = 0; bInd < numBondsForAtom; bInd++) {\r\n const bond = bonds[bInd];\r\n const indTo = bond._left.index;\r\n if (indTo === aInd) {\r\n collection.addPair(aInd, bond._right.index);\r\n }\r\n } // for (b) all bonds in atom\r\n } // for (a)\r\n return 0;\r\n }\r\n\r\n _findPairs() {\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return;\r\n }\r\n\r\n const atoms = this._complex._atoms;\r\n const atomsNum = atoms.length;\r\n const self = this;\r\n\r\n let rA;\r\n let isHydrogenA;\r\n let posA;\r\n let locationA;\r\n let atomA;\r\n\r\n const processAtom = function (atomB) {\r\n if (isHydrogenA && atomB.isHydrogen()) {\r\n return;\r\n }\r\n\r\n const locationB = atomB.location;\r\n if ((locationA !== cSpaceCode)\r\n && (locationB !== cSpaceCode)\r\n && (locationA !== locationB)) {\r\n return;\r\n }\r\n\r\n const dist2 = posA.distanceToSquared(atomB.position);\r\n const rB = atomB.element.radiusBonding;\r\n const maxAcceptable = cBondRadInJMOL ? rA + rB + cBondTolerance : cVMDTolerance * (rA + rB);\r\n\r\n if (dist2 > (maxAcceptable * maxAcceptable)) {\r\n return;\r\n }\r\n\r\n if (dist2 < cEpsilon) {\r\n return;\r\n }\r\n\r\n self._pairCollection.addPair(atomA.index, atomB.index);\r\n };\r\n\r\n for (let i = 0; i < atomsNum; ++i) {\r\n atomA = atoms[i];\r\n if (!_isAtomEligible(atomA)) {\r\n continue;\r\n }\r\n\r\n rA = atomA.element.radiusBonding;\r\n isHydrogenA = atomA.isHydrogen();\r\n posA = atomA.position;\r\n locationA = atomA.location;\r\n\r\n vw.forEachAtomWithinRadius(posA, 2 * this._maxRad + cBondTolerance, processAtom);\r\n }\r\n }\r\n\r\n _addPairs() {\r\n const atoms = this._complex._atoms;\r\n\r\n for (let i = 0, k = 0; i < this._pairCollection.numPairs; i++, k += 4) {\r\n const iA = this._pairCollection.intBuffer[k];\r\n const iB = this._pairCollection.intBuffer[k + 1];\r\n this._addPair(atoms[iA], atoms[iB]);\r\n }\r\n }\r\n\r\n _addPair(atomA, atomB) {\r\n const bondsA = atomA.bonds;\r\n const indexA = atomA.index;\r\n const indexB = atomB.index;\r\n for (let j = 0, numBonds = bondsA.length; j < numBonds; ++j) {\r\n const bond = bondsA[j];\r\n if (bond._left.index === indexB || bond._right.index === indexB) {\r\n return;\r\n }\r\n }\r\n const left = indexA < indexB ? atomA : atomB;\r\n const right = indexA < indexB ? atomB : atomA;\r\n const newBond = this._complex.addBond(left, right, 0, Bond.BondType.UNKNOWN, false);\r\n bondsA.push(newBond);\r\n atomB.bonds.push(newBond);\r\n }\r\n\r\n build() {\r\n if (cProfileBondBuilder) {\r\n console.time('Bonds Builder');\r\n }\r\n this._buildInner();\r\n\r\n if (cProfileBondBuilder) {\r\n console.timeEnd('Bonds Builder');\r\n }\r\n }\r\n\r\n _buildInner() {\r\n const atoms = this._complex._atoms;\r\n if (atoms.length < 2) {\r\n return;\r\n }\r\n if (atoms[0].index < 0) {\r\n throw new Error('AutoBond: Atoms in complex were not indexed.');\r\n }\r\n\r\n this._calcBoundingBox();\r\n this._pairCollection = new AtomPairs(atoms.length * cEstBondsMultiplier);\r\n this._addExistingPairs();\r\n this._findPairs();\r\n this._addPairs();\r\n }\r\n\r\n _calcBoundingBox() {\r\n const atoms = this._complex._atoms;\r\n const nAtoms = atoms.length;\r\n let maxRad = _getBondingRadius(atoms[0]);\r\n for (let i = 1; i < nAtoms; ++i) {\r\n maxRad = Math.max(maxRad, _getBondingRadius(atoms[i]));\r\n }\r\n this._vBoxMax.addScalar(maxRad);\r\n this._vBoxMin.addScalar(-maxRad);\r\n this._maxRad = maxRad * 1.2;\r\n }\r\n\r\n destroy() {\r\n if (this._pairCollection) {\r\n this._pairCollection.destroy();\r\n }\r\n }\r\n}\r\n\r\nexport default AutoBond;\r\n","import * as THREE from 'three';\r\nimport Bond from './Bond';\r\nimport Element from './Element';\r\n\r\nconst cCrossThresh = 0.1;\r\nconst cAromaticType = Bond.BondType.AROMATIC;\r\nconst cAromaticAtoms = [\r\n Element.ByName.C.number,\r\n Element.ByName.N.number,\r\n // Element.ByName.O.number,\r\n // Element.ByName.S.number,\r\n];\r\n\r\n/** Conditions for bonds:\r\n * - Cross product with each subsequent bond to add is collinear and point to the same direction\r\n * - Each pair of a adjacent bonds belong to not more than one cycle\r\n * - If there is more than one candidates we try them in ascending order of angle values\r\n */\r\n\r\nconst _coDirVectors = (function () {\r\n const v1Tmp = new THREE.Vector3();\r\n const v2Tmp = new THREE.Vector3();\r\n const cp = new THREE.Vector3();\r\n return function (v1, v2) {\r\n v1Tmp.copy(v1).normalize();\r\n v2Tmp.copy(v2).normalize();\r\n cp.crossVectors(v1Tmp, v2Tmp);\r\n if (cp.length() > cCrossThresh) {\r\n return false;\r\n }\r\n // zero vector in out terms must be collinear to any\r\n return v1Tmp.dot(v2Tmp) >= 0;\r\n };\r\n}());\r\n\r\nfunction _insertAscending(arr, val) {\r\n let idx = 0;\r\n while (idx < arr.length && arr[idx] < val) {\r\n ++idx;\r\n }\r\n arr.splice(idx, 0, val);\r\n}\r\n\r\nfunction _anotherAtom(bond, currAtom) {\r\n return bond._left === currAtom ? bond._right : bond._left;\r\n}\r\n\r\nfunction _cosBetween(v1, v2) {\r\n const theta = v1.dot(v2) / (Math.sqrt(v1.lengthSq() * v2.lengthSq()));\r\n return THREE.MathUtils.clamp(theta, -1, 1);\r\n}\r\n\r\nfunction _markAromatic(bond) {\r\n bond._type = cAromaticType;\r\n}\r\n\r\nclass Cycle {\r\n constructor(atomsList) {\r\n this.atoms = atomsList;\r\n this.update();\r\n }\r\n\r\n update() {\r\n const { atoms } = this;\r\n const center = new THREE.Vector3();\r\n const nA = atoms.length;\r\n for (let j = 0; j < nA; ++j) {\r\n center.add(atoms[j].position);\r\n }\r\n center.multiplyScalar(1.0 / nA);\r\n this.center = center;\r\n this.radius = center.distanceTo(atoms[0].position.clone().lerp(atoms[1].position, 0.5));\r\n }\r\n\r\n forEachBond(process) {\r\n const { atoms } = this;\r\n const nA = atoms.length;\r\n let currAtom = atoms[0];\r\n let nextAtom;\r\n\r\n function checkBond(bond) {\r\n if (bond._left === nextAtom || bond._right === nextAtom) {\r\n process(bond);\r\n }\r\n }\r\n\r\n for (let i = 0; i < nA; ++i) {\r\n nextAtom = atoms[(i + 1) % nA];\r\n currAtom.forEachBond(checkBond);\r\n currAtom = nextAtom;\r\n }\r\n }\r\n}\r\n\r\nfunction _isAromatic(bond) {\r\n return bond._type === cAromaticType;\r\n}\r\n\r\nfunction _isPossibleAromatic(bond) {\r\n if (bond.type === cAromaticType) {\r\n return true;\r\n }\r\n const rightIdx = cAromaticAtoms.indexOf(bond._right.element.number);\r\n const leftIdx = cAromaticAtoms.indexOf(bond._left.element.number);\r\n return rightIdx !== -1 && leftIdx !== -1;\r\n}\r\n\r\nfunction _checkCycleSimple(cycle) {\r\n return cycle.length > 3;\r\n}\r\n\r\nfunction _checkCycleComplex(cycle) {\r\n console.assert(cycle.length > 2);\r\n return true;\r\n}\r\n\r\nclass AromaticLoopsMarker {\r\n constructor(complex) {\r\n this._complex = complex;\r\n const bondsData = new Array(complex._bonds.length);\r\n const bondMarks = new Array(complex._bonds.length);\r\n for (let i = 0, n = bondsData.length; i < n; ++i) {\r\n bondsData[i] = [];\r\n bondMarks[i] = false;\r\n }\r\n this._bondsData = bondsData;\r\n this._bondMarks = bondMarks;\r\n this._resetCycles();\r\n }\r\n\r\n _resetCycles() {\r\n this._cycles = [];\r\n this._currIdx = -1;\r\n }\r\n\r\n _haveSameCycle(bondsData, bond1, bond2) {\r\n const arr1 = bondsData[bond1._index];\r\n const arr2 = bondsData[bond2._index];\r\n const n1 = arr1.length;\r\n const n2 = arr2.length;\r\n let i1 = 0;\r\n let i2 = 0;\r\n while (i1 < n1 && i2 < n2) {\r\n if (arr1[i1] === arr2[i2]) {\r\n return true;\r\n }\r\n if (arr1[i1] > arr2[i2]) {\r\n ++i2;\r\n } else {\r\n ++i1;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n _tryBond(prevBond, currRight, currDir) {\r\n const bondsOrder = [];\r\n const bondsData = this._bondsData;\r\n const currLeft = _anotherAtom(prevBond, currRight);\r\n const currVec = currRight.position.clone().sub(currLeft.position);\r\n const startAtomRef = this._currStart;\r\n const self = this;\r\n const bondMarks = this._bondMarks;\r\n let checkAromatic = this._checkBond;\r\n bondMarks[prevBond._index] = true;\r\n checkAromatic = checkAromatic === undefined ? _isAromatic : checkAromatic;\r\n currRight.forEachBond((newBond) => {\r\n if (!checkAromatic(newBond)\r\n || newBond === prevBond\r\n || bondMarks[newBond._index]\r\n || self._haveSameCycle(bondsData, prevBond, newBond)) {\r\n return;\r\n }\r\n const anotherAtom = _anotherAtom(newBond, currRight);\r\n const anotherVec = anotherAtom.position.clone().sub(currRight.position);\r\n const val = anotherAtom === startAtomRef ? -2.0 : 1 - _cosBetween(currVec, anotherVec);\r\n const newDir = anotherVec.cross(currVec);\r\n if (!_coDirVectors(newDir, currDir)) {\r\n return;\r\n }\r\n let idx = 0;\r\n while (idx < bondsOrder.length && bondsOrder[idx].val < val) {\r\n ++idx;\r\n }\r\n bondsOrder.splice(idx, 0, { bond: newBond, val, dir: newDir });\r\n });\r\n\r\n for (let i = 0, n = bondsOrder.length; i < n; ++i) {\r\n const { bond } = bondsOrder[i];\r\n const newRight = bond._left === currRight ? bond._right : bond._left;\r\n if (newRight === startAtomRef) {\r\n ++this._currIdx;\r\n this._cycles.push([currRight]);\r\n bondMarks[prevBond._index] = false;\r\n return true;\r\n }\r\n if (this._tryBond(bond, newRight, bondsOrder[i].dir)) {\r\n _insertAscending(bondsData[bond._index], this._currIdx);\r\n this._cycles[this._currIdx].push(currRight);\r\n bondMarks[prevBond._index] = false;\r\n return true;\r\n }\r\n }\r\n bondMarks[prevBond._index] = false;\r\n return false;\r\n }\r\n\r\n _startCycle(bond) {\r\n // start from left to right\r\n this._currStart = bond._left;\r\n if (this._tryBond(bond, bond._right, new THREE.Vector3())) {\r\n _insertAscending(this._bondsData[bond._index], this._currIdx);\r\n this._cycles[this._currIdx].push(bond._left);\r\n }\r\n }\r\n\r\n _findLoops(checkBond, checkCycle) {\r\n this._checkBond = checkBond;\r\n const complex = this._complex;\r\n const self = this;\r\n\r\n complex.forEachComponent((component) => {\r\n self._resetCycles();\r\n component.forEachBond((bond) => {\r\n if (checkBond(bond)) {\r\n self._startCycle(bond);\r\n }\r\n });\r\n const cycles = self._cycles;\r\n for (let i = 0, n = cycles.length; i < n; ++i) {\r\n const cycle = cycles[i];\r\n if (!checkCycle(cycle)) {\r\n continue;\r\n }\r\n const newCycle = new Cycle(cycle);\r\n newCycle.forEachBond(_markAromatic);\r\n component.addCycle(newCycle);\r\n }\r\n });\r\n }\r\n\r\n markCycles() {\r\n this._findLoops(_isAromatic, _checkCycleSimple);\r\n }\r\n\r\n detectCycles() {\r\n this._findLoops(_isPossibleAromatic, _checkCycleComplex);\r\n }\r\n}\r\n\r\nexport default AromaticLoopsMarker;\r\n","import * as THREE from 'three';\r\nimport utils from '../utils';\r\n\r\n/**\r\n * Calculate min & max radius of a sphere slice between zMin & zMax\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {number} zMin - lower bound of the slice\r\n * @param {number} zMax - upper bound of the slice\r\n */\r\nfunction _getSphereSliceRadiusRange(center, radius, zMin, zMax) {\r\n const dzMin = zMin - center.z;\r\n const dzMax = zMax - center.z;\r\n const rzMin = Math.sqrt(Math.max(radius * radius - dzMin * dzMin, 0.0));\r\n const rzMax = Math.sqrt(Math.max(radius * radius - dzMax * dzMax, 0.0));\r\n\r\n const rMin = Math.min(rzMin, rzMax);\r\n let rMax;\r\n\r\n if (zMin <= center.z && zMax >= center.z) {\r\n // sphere's main diameter is inside slice\r\n rMax = radius;\r\n } else {\r\n rMax = Math.max(rzMin, rzMax);\r\n }\r\n\r\n return [rMin, rMax];\r\n}\r\n\r\n/**\r\n * Calculate min & max radius of a circle slice between yMin & yMax.\r\n *\r\n * To maintain analogy with _getSphereSliceRadiusRange we call radius what in fact is\r\n * half-width (along X axis) of the slice, i.e. 1D-sphere radius.\r\n *\r\n * @param {Vector3} center - center of the circle (z can be ignored)\r\n * @param {number} radius - circle radius\r\n * @param {number} yMin - lower bound of the slice\r\n * @param {number} yMax - upper bound of the slice\r\n * @returns {Array} - array of two numbers (min & max radius, or half-width)\r\n */\r\nfunction _getCircleSliceRadiusRange(center, radius, yMin, yMax) {\r\n const dyMin = yMin - center.y;\r\n const dyMax = yMax - center.y;\r\n const ryMin = Math.sqrt(Math.max(radius * radius - dyMin * dyMin, 0.0));\r\n const ryMax = Math.sqrt(Math.max(radius * radius - dyMax * dyMax, 0.0));\r\n\r\n const rMin = Math.min(ryMin, ryMax);\r\n let rMax;\r\n\r\n if (yMin <= center.y && yMax >= center.y) {\r\n // slice's main diameter is inside slice\r\n rMax = radius;\r\n } else {\r\n rMax = Math.max(ryMin, ryMax);\r\n }\r\n\r\n return [rMin, rMax];\r\n}\r\n\r\n/**\r\n * VoxelWorld constructor\r\n *\r\n * @param {Box3} box - bounding box of the volume to be partitioned\r\n * @param {Vector3} vCellSizeHint - target voxel size (actual voxel size may differ from this)\r\n */\r\nclass VoxelWorld {\r\n constructor(box, vCellSizeHint) {\r\n this._box = box.clone();\r\n const size = new THREE.Vector3();\r\n box.getSize(size);\r\n this._count = size.clone().divide(vCellSizeHint).floor().max(new THREE.Vector3(1, 1, 1));\r\n this._last = this._count.clone().subScalar(1);\r\n this._cellSize = size.clone().divide(this._count);\r\n this._cellInnerR = 0.5 * Math.min(Math.min(this._cellSize.x, this._cellSize.y), this._cellSize.z);\r\n this._cellOuterR = 0.5 * Math.sqrt(this._cellSize.dot(this._cellSize));\r\n\r\n // array of voxels, each element contains index of first atom in voxel\r\n const numVoxels = this._count.x * this._count.y * this._count.z;\r\n this._voxels = utils.allocateTyped(Int32Array, numVoxels);\r\n for (let i = 0; i < numVoxels; ++i) {\r\n this._voxels[i] = -1;\r\n }\r\n\r\n // array of atoms that stores multiple single-linked lists\r\n // two elements for each atom: Atom ref, index of next atom (in this array\r\n this._atoms = [];\r\n }\r\n\r\n /**\r\n * Add all atoms from a complex to voxel world\r\n *\r\n * @param {Complex} complex - complex\r\n */\r\n addAtoms(complex) {\r\n const self = this;\r\n\r\n let idx = this._atoms.length;\r\n\r\n // resize array of atoms\r\n this._atoms.length += 2 * complex.getAtomCount();\r\n\r\n complex.forEachAtom((atom) => {\r\n // find which voxel contains this atom\r\n const voxelIdx = self._findVoxel(atom.position);\r\n\r\n // push current atom to the head of voxel's atom list\r\n self._atoms[idx] = atom;\r\n self._atoms[idx + 1] = self._voxels[voxelIdx];\r\n self._voxels[voxelIdx] = idx;\r\n\r\n idx += 2;\r\n });\r\n }\r\n\r\n /**\r\n * Get voxel that contains specified 3D point (we use clamp at the edges)\r\n *\r\n * @param {Vector3} point - a point in 3D\r\n * @returns {number} - index of voxel\r\n */\r\n static _zero = new THREE.Vector3(0, 0, 0);\r\n\r\n static _voxel = new THREE.Vector3();\r\n\r\n _findVoxel(point) {\r\n const zero = VoxelWorld._zero;\r\n const voxel = VoxelWorld._voxel;\r\n voxel.copy(point)\r\n .sub(this._box.min)\r\n .divide(this._cellSize)\r\n .floor()\r\n .clamp(zero, this._last);\r\n return voxel.x + this._count.x * (voxel.y + this._count.y * voxel.z);\r\n }\r\n\r\n /**\r\n * Call a function for each atom in voxel\r\n *\r\n * @param {number} voxel - index of voxel\r\n * @param {function(Atom)} process - function to call\r\n */\r\n _forEachAtomInVoxel(voxel, process) {\r\n for (let i = this._voxels[voxel]; i >= 0; i = this._atoms[i + 1]) {\r\n process(this._atoms[i]);\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each voxel that is touched by given sphere. Callback also takes flag\r\n * isInside specifying whether voxel lies inside the sphere entirely.\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside\r\n */\r\n\r\n static _xRange = new THREE.Vector2();\r\n\r\n static _yRange = new THREE.Vector2();\r\n\r\n static _zRange = new THREE.Vector2();\r\n\r\n _forEachVoxelWithinRadius(center, radius, process) {\r\n const xRange = VoxelWorld._xRange;\r\n const yRange = VoxelWorld._yRange;\r\n const zRange = VoxelWorld._zRange;\r\n\r\n // switch to a faster method unless cell size is much smaller than sphere radius\r\n if (radius / this._cellInnerR < 10) {\r\n this._forEachVoxelWithinRadiusSimple(center, radius, process);\r\n return;\r\n }\r\n\r\n let rRangeXY;\r\n let rRangeX;\r\n let xVal;\r\n let yVal;\r\n let zVal;\r\n let isInsideX;\r\n let isInsideY;\r\n let isInsideZ;\r\n\r\n zRange.set(center.z - radius, center.z + radius);\r\n zRange.subScalar(this._box.min.z)\r\n .divideScalar(this._cellSize.z)\r\n .floor()\r\n .clampScalar(0, this._count.z - 1);\r\n\r\n for (let z = zRange.x; z <= zRange.y; ++z) {\r\n zVal = [this._box.min.z + z * this._cellSize.z,\r\n this._box.min.z + (z + 1) * this._cellSize.z];\r\n\r\n isInsideZ = (center.z - radius <= zVal[0]) && (zVal[1] <= center.z + radius);\r\n\r\n rRangeXY = _getSphereSliceRadiusRange(center, radius, zVal[0], zVal[1]);\r\n\r\n yRange.set(center.y - rRangeXY[1], center.y + rRangeXY[1]);\r\n yRange.subScalar(this._box.min.y)\r\n .divideScalar(this._cellSize.y)\r\n .floor()\r\n .clampScalar(0, this._count.y - 1);\r\n\r\n for (let y = yRange.x; y <= yRange.y; ++y) {\r\n yVal = [this._box.min.y + y * this._cellSize.y,\r\n this._box.min.y + (y + 1) * this._cellSize.y];\r\n\r\n isInsideY = (center.y - rRangeXY[0] <= yVal[0]) && (yVal[1] <= center.y + rRangeXY[0]);\r\n\r\n rRangeX = _getCircleSliceRadiusRange(center, rRangeXY[1], yVal[0], yVal[1]);\r\n\r\n xRange.set(center.x - rRangeX[1], center.x + rRangeX[1]);\r\n xRange.subScalar(this._box.min.x)\r\n .divideScalar(this._cellSize.x)\r\n .floor()\r\n .clampScalar(0, this._count.x - 1);\r\n\r\n for (let { x } = xRange; x <= xRange.y; ++x) {\r\n xVal = [this._box.min.x + x * this._cellSize.x,\r\n this._box.min.x + (x + 1) * this._cellSize.x];\r\n isInsideX = (center.x - rRangeX[0] <= xVal[0]) && (xVal[1] <= center.x + rRangeX[0]);\r\n\r\n process(x + this._count.x * (y + this._count.y * z), isInsideX && isInsideY && isInsideZ);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each voxel that is touched by given sphere. Callback also takes flag\r\n * isInside specifying whether voxel lies inside the sphere entirely.\r\n * This is a version of method that doesn't try to \"calculate\" what voxels fall inside radius\r\n * but instead just checks all voxels inside sphere's bounding box. This should be faster\r\n * unless cell size is much smaller than sphere radius.\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside\r\n */\r\n\r\n static _vCenter = new THREE.Vector3();\r\n\r\n _forEachVoxelWithinRadiusSimple(center, radius, process) {\r\n const xRange = VoxelWorld._xRange;\r\n const yRange = VoxelWorld._yRange;\r\n const zRange = VoxelWorld._zRange;\r\n const vCenter = VoxelWorld._vCenter;\r\n\r\n const distTouch2 = (radius + this._cellOuterR) * (radius + this._cellOuterR);\r\n let distInside2 = -1.0;\r\n if (radius > this._cellOuterR) {\r\n distInside2 = (radius - this._cellOuterR) * (radius - this._cellOuterR);\r\n }\r\n\r\n // calculate bounding box for the sphere\r\n xRange.set(center.x - radius, center.x + radius);\r\n xRange.subScalar(this._box.min.x)\r\n .divideScalar(this._cellSize.x)\r\n .floor();\r\n xRange.x = Math.min(Math.max(xRange.x, 0), this._count.x - 1);\r\n xRange.y = Math.min(Math.max(xRange.y, 0), this._count.x - 1);\r\n\r\n yRange.set(center.y - radius, center.y + radius);\r\n yRange.subScalar(this._box.min.y)\r\n .divideScalar(this._cellSize.y)\r\n .floor();\r\n yRange.x = Math.min(Math.max(yRange.x, 0), this._count.y - 1);\r\n yRange.y = Math.min(Math.max(yRange.y, 0), this._count.y - 1);\r\n\r\n zRange.set(center.z - radius, center.z + radius);\r\n zRange.subScalar(this._box.min.z)\r\n .divideScalar(this._cellSize.z)\r\n .floor();\r\n zRange.x = Math.min(Math.max(zRange.x, 0), this._count.z - 1);\r\n zRange.y = Math.min(Math.max(zRange.y, 0), this._count.z - 1);\r\n\r\n for (let z = zRange.x; z <= zRange.y; ++z) {\r\n const zVal = [this._box.min.z + z * this._cellSize.z,\r\n this._box.min.z + (z + 1) * this._cellSize.z];\r\n vCenter.z = 0.5 * (zVal[0] + zVal[1]);\r\n\r\n for (let y = yRange.x; y <= yRange.y; ++y) {\r\n const yVal = [this._box.min.y + y * this._cellSize.y,\r\n this._box.min.y + (y + 1) * this._cellSize.y];\r\n vCenter.y = 0.5 * (yVal[0] + yVal[1]);\r\n\r\n for (let { x } = xRange; x <= xRange.y; ++x) {\r\n const xVal = [this._box.min.x + x * this._cellSize.x,\r\n this._box.min.x + (x + 1) * this._cellSize.x];\r\n vCenter.x = 0.5 * (xVal[0] + xVal[1]);\r\n\r\n const d2 = center.distanceToSquared(vCenter);\r\n if (d2 <= distTouch2) {\r\n process(x + this._count.x * (y + this._count.y * z), d2 <= distInside2);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each atom within given sphere\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinRadius(center, radius, process) {\r\n const self = this;\r\n const r2 = radius * radius;\r\n\r\n self._forEachVoxelWithinRadius(center, radius, (voxel, isInside) => {\r\n if (isInside) {\r\n self._forEachAtomInVoxel(voxel, process);\r\n } else {\r\n self._forEachAtomInVoxel(voxel, (atom) => {\r\n if (center.distanceToSquared(atom.position) <= r2) {\r\n process(atom);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms defined by mask\r\n *\r\n * @param {Complex} complex - complex\r\n * @param {number} mask - bit mask\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinDistFromMasked(complex, mask, dist, process) {\r\n this._forEachAtomWithinDistFromGroup((atomProc) => {\r\n complex.forEachAtom((atom) => {\r\n if ((atom.mask & mask) !== 0) {\r\n atomProc(atom);\r\n }\r\n });\r\n }, dist, process);\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms defined by selector\r\n *\r\n * @param {Complex} complex - complex\r\n * @param {number} selector - selector\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinDistFromSelected(complex, selector, dist, process) {\r\n this._forEachAtomWithinDistFromGroup((atomProc) => {\r\n complex.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom)) {\r\n atomProc(atom);\r\n }\r\n });\r\n }, dist, process);\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms\r\n *\r\n * @param {function} forEachAtom - enumerator of atoms in the group\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n _forEachAtomWithinDistFromGroup(forEachAtom, dist, process) {\r\n const self = this;\r\n const r2 = dist * dist;\r\n\r\n const voxels = [];\r\n const atoms = [];\r\n let idx = 0;\r\n\r\n // build \"within radius\" atom list for each voxel\r\n forEachAtom((atom) => {\r\n self._forEachVoxelWithinRadius(atom.position, dist, (voxel, isInside) => {\r\n if (isInside) {\r\n // this voxel is inside circle -- no check will be required\r\n voxels[voxel] = -1;\r\n } else if (typeof voxels[voxel] === 'undefined') {\r\n // this voxel isn't covered yet -- start building list of atoms\r\n atoms.push(atom);\r\n atoms.push(-1);\r\n voxels[voxel] = idx;\r\n idx += 2;\r\n } else if (voxels[voxel] !== -1) {\r\n // this voxel has a list of atoms required for distance check -- add atom to the list\r\n atoms.push(atom);\r\n atoms.push(voxels[voxel]);\r\n voxels[voxel] = idx;\r\n idx += 2;\r\n }\r\n });\r\n });\r\n\r\n let voxel;\r\n\r\n const processIfWithin = function (atom) {\r\n if (typeof voxels[voxel] === 'undefined') {\r\n return;\r\n }\r\n\r\n idx = voxels[voxel];\r\n if (idx === -1) {\r\n // this voxel is fully covered\r\n process(atom);\r\n return;\r\n }\r\n\r\n // check distance to each atom within radius from this voxel\r\n for (; idx >= 0; idx = atoms[idx + 1]) {\r\n if (atom.position.distanceToSquared(atoms[idx].position) < r2) {\r\n process(atom);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n // for each marked voxel\r\n for (voxel in voxels) {\r\n if (voxels.hasOwnProperty(voxel)) {\r\n self._forEachAtomInVoxel(voxel, processIfWithin);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default VoxelWorld;\r\n","import ResidueType from './ResidueType';\r\nimport PairCollection from './AtomPairs';\r\n\r\nconst MINIMAL_DISTANCE = 0.5;\r\nconst MIN_HBOND_ENERGY = -9.9;\r\nconst MAX_HBOND_ENERGY = -0.5;\r\nconst COUPLING_CONSTANT = -27.888; // = -332 * 0.42 * 0.2\r\nconst MAX_COUPLING_DISTANCE = 5.0; // how far is the closest atom of a potential partner residue from CA atom\r\nconst MAX_RESIDUES_THRESHOLD = 1000;\r\n\r\nexport default class HBondInfo {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._hbonds = []; // array of bond info for each residue\r\n if (this._complex._residues.length > MAX_RESIDUES_THRESHOLD) {\r\n this._buildVW(); // optimized version using voxel grid\r\n } else {\r\n this._build(); // test all pairs of residues\r\n }\r\n }\r\n\r\n isBond(from, to) {\r\n if (this._hbonds[from]) {\r\n const [acc0, acc1] = this._hbonds[from].acceptor;\r\n if (acc0 && acc0.residue === to && acc0.energy < MAX_HBOND_ENERGY) {\r\n return true;\r\n }\r\n if (acc1 && acc1.residue === to && acc1.energy < MAX_HBOND_ENERGY) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n _build() {\r\n const self = this;\r\n\r\n for (let i = 0; i < this._complex._residues.length - 1; ++i) {\r\n const ri = this._complex._residues[i];\r\n if ((ri.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n let preri = null;\r\n if (i > 0 && (this._complex._residues[i - 1].getType().flags & ResidueType.Flags.PROTEIN)\r\n && ri._sequence === this._complex._residues[i - 1]._sequence + 1) {\r\n preri = this._complex._residues[i - 1];\r\n }\r\n\r\n for (let j = i + 1; j < this._complex._residues.length; ++j) {\r\n const rj = this._complex._residues[j];\r\n if ((rj.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n let prerj = null;\r\n if ((this._complex._residues[j - 1].getType().flags & ResidueType.Flags.PROTEIN)\r\n && rj._sequence === this._complex._residues[j - 1]._sequence + 1) {\r\n prerj = this._complex._residues[j - 1];\r\n }\r\n\r\n self._calcHBondEnergy(preri, ri, rj);\r\n if (j !== i + 1) {\r\n self._calcHBondEnergy(prerj, rj, ri);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _buildVW() {\r\n const self = this;\r\n const residues = this._complex._residues;\r\n let ri;\r\n let preri;\r\n\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return;\r\n }\r\n\r\n const pairs = new PairCollection(this._complex._residues.length * this._complex._residues.length / 2);\r\n\r\n function processAtom(atom) {\r\n const rj = atom.residue;\r\n\r\n if (rj._index === ri._index) {\r\n return;\r\n }\r\n\r\n if ((rj.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n return;\r\n }\r\n\r\n if (!pairs.addPair(ri._index, rj._index)) {\r\n // we've seen this pair\r\n return;\r\n }\r\n\r\n // get predecessor in chain\r\n let prerj = rj._index > 0 ? residues[rj._index - 1] : null;\r\n if (prerj\r\n && ((prerj.getType().flags & ResidueType.Flags.PROTEIN) === 0 || rj._sequence !== prerj._sequence + 1)) {\r\n prerj = null;\r\n }\r\n\r\n self._calcHBondEnergy(preri, ri, rj);\r\n if (rj._index !== ri._index + 1) {\r\n self._calcHBondEnergy(prerj, rj, ri);\r\n }\r\n }\r\n\r\n for (let i = 0; i < residues.length - 1; ++i) {\r\n ri = residues[i];\r\n if ((ri.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n preri = i > 0 ? residues[i - 1] : null;\r\n if (preri\r\n && ((preri.getType().flags & ResidueType.Flags.PROTEIN) === 0 || ri._sequence !== preri._sequence + 1)) {\r\n preri = null;\r\n }\r\n\r\n vw.forEachAtomWithinRadius(this._residueGetCAlpha(ri), MAX_COUPLING_DISTANCE, processAtom);\r\n }\r\n }\r\n\r\n _residueGetCAlpha(res) {\r\n for (let i = 0; i < res._atoms.length; ++i) {\r\n const { name } = res._atoms[i];\r\n if (name === 'CA'\r\n || name === 'C1') {\r\n return res._atoms[i].position;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _residueGetCO(res) {\r\n let c = null;\r\n let o = null;\r\n\r\n res.forEachAtom((a) => {\r\n if (a.name === 'C') {\r\n c = a.position;\r\n } else if (a.name === 'O') {\r\n o = a.position;\r\n }\r\n });\r\n\r\n return [c, o];\r\n }\r\n\r\n // TODO Support hydrogen defined in complex\r\n _residueGetNH(prev, res) {\r\n const [c, o] = this._residueGetCO(prev);\r\n\r\n let n;\r\n res.forEachAtom((a) => {\r\n if (a.name === 'N') {\r\n n = a.position;\r\n }\r\n });\r\n\r\n if (c && o && n) {\r\n // calculate hydrogen position\r\n const h = c.clone();\r\n h.sub(o);\r\n h.multiplyScalar(1.0 / h.length());\r\n h.add(n);\r\n\r\n return [n, h];\r\n }\r\n\r\n return [null, null];\r\n }\r\n\r\n _calcHBondEnergy(predonor, donor, acceptor) {\r\n let result = 0;\r\n\r\n if (predonor === null) {\r\n return result;\r\n }\r\n\r\n if (donor.getType().getName() !== 'PRO') {\r\n const [n, h] = this._residueGetNH(predonor, donor);\r\n const [c, o] = this._residueGetCO(acceptor);\r\n\r\n if (n === null || h === null || c === null || o === null) {\r\n return result;\r\n }\r\n\r\n const distanceHO = h.distanceTo(o);\r\n const distanceHC = h.distanceTo(c);\r\n const distanceNC = n.distanceTo(c);\r\n const distanceNO = n.distanceTo(o);\r\n\r\n if (distanceHO < MINIMAL_DISTANCE || distanceHC < MINIMAL_DISTANCE\r\n || distanceNC < MINIMAL_DISTANCE || distanceNO < MINIMAL_DISTANCE) {\r\n result = MIN_HBOND_ENERGY;\r\n } else {\r\n result = COUPLING_CONSTANT / distanceHO - COUPLING_CONSTANT / distanceHC\r\n + COUPLING_CONSTANT / distanceNC - COUPLING_CONSTANT / distanceNO;\r\n }\r\n\r\n // DSSP compatibility mode:\r\n result = Math.round(result * 1000) / 1000;\r\n\r\n if (result < MIN_HBOND_ENERGY) {\r\n result = MIN_HBOND_ENERGY;\r\n }\r\n }\r\n\r\n // update donor\r\n if (typeof this._hbonds[donor._index] === 'undefined') {\r\n this._hbonds[donor._index] = {\r\n donor: [],\r\n acceptor: [],\r\n };\r\n }\r\n const donorInfo = this._hbonds[donor._index];\r\n\r\n if (donorInfo.acceptor.length < 2) {\r\n donorInfo.acceptor.push({\r\n residue: acceptor._index,\r\n energy: result,\r\n });\r\n }\r\n\r\n if (donorInfo.acceptor.length > 1) {\r\n if (result < donorInfo.acceptor[0].energy) {\r\n donorInfo.acceptor[1].residue = donorInfo.acceptor[0].residue;\r\n donorInfo.acceptor[1].energy = donorInfo.acceptor[0].energy;\r\n donorInfo.acceptor[0].residue = acceptor._index;\r\n donorInfo.acceptor[0].energy = result;\r\n } else if (result < donorInfo.acceptor[1].energy) {\r\n donorInfo.acceptor[1].residue = acceptor._index;\r\n donorInfo.acceptor[1].energy = result;\r\n }\r\n }\r\n\r\n // update acceptor\r\n if (typeof this._hbonds[acceptor._index] === 'undefined') {\r\n this._hbonds[acceptor._index] = {\r\n donor: [],\r\n acceptor: [],\r\n };\r\n }\r\n const accInfo = this._hbonds[acceptor._index];\r\n\r\n if (accInfo.donor.length < 2) {\r\n accInfo.donor.push({\r\n residue: donor._index,\r\n energy: result,\r\n });\r\n }\r\n\r\n if (accInfo.donor.length > 1) {\r\n if (result < accInfo.donor[0].energy) {\r\n accInfo.donor[1].residue = accInfo.donor[0].residue;\r\n accInfo.donor[1].energy = accInfo.donor[0].energy;\r\n accInfo.donor[0].residue = donor._index;\r\n accInfo.donor[0].energy = result;\r\n } else if (result < accInfo.donor[1].energy) {\r\n accInfo.donor[1].residue = donor._index;\r\n accInfo.donor[1].energy = result;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import HBondInfo from './HBondInfo';\r\nimport ResidueType from './ResidueType';\r\n\r\nconst BridgeType = Object.freeze({\r\n NO_BRIDGE: 0,\r\n PARALLEL: 1,\r\n ANTI_PARALLEL: 2,\r\n});\r\n\r\nconst HelixFlag = Object.freeze({\r\n START: 1,\r\n MIDDLE: 2,\r\n END: 3,\r\n START_AND_END: 4,\r\n});\r\n\r\nconst StructureType = Object.freeze({\r\n STRAND: 'E',\r\n BRIDGE: 'B',\r\n HELIX_310: 'G',\r\n HELIX_ALPHA: 'H',\r\n HELIX_PI: 'I',\r\n TURN: 'T',\r\n BEND: 'S',\r\n LOOP: ' ',\r\n});\r\n\r\nexport default class SecondaryStructureMap {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._build();\r\n }\r\n\r\n _build() {\r\n const self = this;\r\n this._hbonds = new HBondInfo(this._complex);\r\n this._ss = []; // DSSP map by residue\r\n\r\n // auxilliary data\r\n this._sheet = [];\r\n this._betaPartners = [];\r\n this._bend = [];\r\n for (let i = 0; i < this._complex.getResidues().length; ++i) {\r\n this._betaPartners[i] = [];\r\n }\r\n this._helixFlags = [];\r\n this._helixFlags[3] = [];\r\n this._helixFlags[4] = [];\r\n this._helixFlags[5] = [];\r\n\r\n // calculate peptide chain lengths\r\n this._chainLengths = [];\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i].getResidues();\r\n let len = 0;\r\n for (; len < chain.length; ++len) {\r\n if ((chain[len].getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n break;\r\n }\r\n }\r\n this._chainLengths[i] = len;\r\n }\r\n\r\n this._buildBetaSheets();\r\n\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n self._buildAlphaHelices(this._complex._chains[i].getResidues(), this._chainLengths[i], false);\r\n }\r\n }\r\n\r\n _buildAlphaHelices(inResidues, chainLength, inPreferPiHelices) {\r\n // Helix and Turn\r\n for (let stride = 3; stride <= 5; ++stride) {\r\n if (inResidues.length < stride) {\r\n break;\r\n }\r\n\r\n for (let i = 0; i + stride < chainLength; ++i) {\r\n if (this._hbonds.isBond(inResidues[i + stride]._index, inResidues[i]._index)\r\n /* && NoChainBreak(res[i], res[i + stride]) */) {\r\n this._helixFlags[stride][inResidues[i + stride]._index] = HelixFlag.END;\r\n for (let j = i + 1; j < i + stride; ++j) {\r\n if (typeof this._helixFlags[stride][inResidues[j]._index] === 'undefined') {\r\n this._helixFlags[stride][inResidues[j]._index] = HelixFlag.MIDDLE;\r\n }\r\n }\r\n\r\n if (this._helixFlags[stride][inResidues[i]._index] === HelixFlag.END) {\r\n this._helixFlags[stride][inResidues[i]._index] = HelixFlag.START_AND_END;\r\n } else {\r\n this._helixFlags[stride][inResidues[i]._index] = HelixFlag.START;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 2; i < chainLength - 2; ++i) {\r\n const kappa = this._kappa(inResidues[i - 2], inResidues[i], inResidues[i + 2]);\r\n this._bend[inResidues[i]._index] = (kappa !== 360 && kappa > 70);\r\n }\r\n\r\n for (let i = 1; i + 4 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 4) && this._isHelixStart(inResidues[i - 1]._index, 4)) {\r\n for (let j = i; j <= i + 3; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_ALPHA;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 3 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 3) && this._isHelixStart(inResidues[i - 1]._index, 3)) {\r\n let empty = true;\r\n for (let j = i; empty && j <= i + 2; ++j) {\r\n empty = typeof this._ss[inResidues[j]._index] === 'undefined'\r\n || this._ss[inResidues[j]._index] === StructureType.HELIX_310;\r\n }\r\n if (empty) {\r\n for (let j = i; j <= i + 2; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_310;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 5 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 5) && this._isHelixStart(inResidues[i - 1]._index, 5)) {\r\n let empty = true;\r\n for (let j = i; empty && j <= i + 4; ++j) {\r\n empty = typeof this._ss[inResidues[j]._index] === 'undefined'\r\n || this._ss[inResidues[j]._index] === StructureType.HELIX_PI\r\n || (inPreferPiHelices && this._ss[inResidues[j]._index] === StructureType.HELIX_ALPHA);\r\n }\r\n if (empty) {\r\n for (let j = i; j <= i + 4; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_PI;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 1 < chainLength; ++i) {\r\n if (typeof this._ss[inResidues[i]._index] === 'undefined') {\r\n let isTurn = false;\r\n for (let stride = 3; stride <= 5 && !isTurn; ++stride) {\r\n for (let k = 1; k < stride && !isTurn; ++k) {\r\n isTurn = (i >= k) && this._isHelixStart(inResidues[i - k]._index, stride);\r\n }\r\n }\r\n\r\n if (isTurn) {\r\n this._ss[inResidues[i]._index] = StructureType.TURN;\r\n } else if (this._bend[inResidues[i]._index]) {\r\n this._ss[inResidues[i]._index] = StructureType.BEND;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _residueGetCAlpha(res) {\r\n for (let i = 0; i < res._atoms.length; ++i) {\r\n const { name } = res._atoms[i];\r\n if (name === 'CA'\r\n || name === 'C1') {\r\n return res._atoms[i].position;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _cosinusAngle(p1, p2, p3, p4) {\r\n const v12 = p1.clone().sub(p2);\r\n const v34 = p3.clone().sub(p4);\r\n\r\n let result = 0;\r\n\r\n const x = v12.dot(v12) * v34.dot(v34);\r\n if (x > 0) {\r\n result = v12.dot(v34) / Math.sqrt(x);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _kappa(prevPrev, res, nextNext) {\r\n const curCA = this._residueGetCAlpha(res);\r\n const ppCA = this._residueGetCAlpha(prevPrev);\r\n const nnCA = this._residueGetCAlpha(nextNext);\r\n if (curCA === null || ppCA === null || nnCA === null) {\r\n return 180;\r\n }\r\n\r\n const ckap = this._cosinusAngle(curCA, ppCA, nnCA, curCA);\r\n const skap = Math.sqrt(1 - ckap * ckap);\r\n return Math.atan2(skap, ckap) * 180 / Math.PI;\r\n }\r\n\r\n _isHelixStart(res, stride) {\r\n return (this._helixFlags[stride][res] === HelixFlag.START\r\n || this._helixFlags[stride][res] === HelixFlag.START_AND_END);\r\n }\r\n\r\n _buildBetaSheets() {\r\n // find bridges\r\n // check each chain against each other chain, and against itself\r\n const bridges = [];\r\n for (let a = 0; a < this._complex._chains.length; ++a) {\r\n const lenA = this._chainLengths[a];\r\n if (lenA <= 4) {\r\n continue;\r\n }\r\n\r\n const chainA = this._complex._chains[a].getResidues();\r\n\r\n for (let b = a; b < this._complex._chains.length; ++b) {\r\n const lenB = this._chainLengths[b];\r\n if (lenB <= 4) {\r\n continue;\r\n }\r\n\r\n const chainB = this._complex._chains[b].getResidues();\r\n\r\n for (let i = 1; i + 1 < lenA; ++i) {\r\n const ri = chainA[i];\r\n\r\n let j = 1;\r\n if (b === a) {\r\n j = i + 3; // check for self-bridges forward down the chain\r\n }\r\n\r\n for (; j + 1 < lenB; ++j) {\r\n const rj = chainB[j];\r\n\r\n const type = this._testBridge(chainA, i, chainB, j);\r\n if (type === BridgeType.NO_BRIDGE) {\r\n continue;\r\n }\r\n\r\n // there is a bridge, try to attach it to previously found sequence\r\n let found = false;\r\n for (const bridge of bridges) {\r\n if (type !== bridge.type || ri._index !== bridge.i[bridge.i.length - 1] + 1) {\r\n continue;\r\n }\r\n\r\n if (type === BridgeType.PARALLEL && bridge.j[bridge.j.length - 1] + 1 === rj._index) {\r\n bridge.i.push(ri._index);\r\n bridge.j.push(rj._index);\r\n found = true;\r\n break;\r\n }\r\n\r\n if (type === BridgeType.ANTI_PARALLEL && bridge.j[0] - 1 === rj._index) {\r\n bridge.i.push(ri._index);\r\n bridge.j.unshift(rj._index);\r\n found = true;\r\n break;\r\n }\r\n }\r\n\r\n // this bridge cannot be attached anywhere, start a new sequence\r\n if (!found) {\r\n bridges.push({\r\n type,\r\n i: [ri._index],\r\n chainI: ri.getChain()._index,\r\n j: [rj._index],\r\n chainJ: rj.getChain()._index,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // extend ladders\r\n bridges.sort((a, b) => {\r\n if (a.chainI < b.chainI || (a.chainI === b.chainI && a.i[0] < b.i[0])) {\r\n return -1;\r\n }\r\n return 1;\r\n });\r\n\r\n for (let i = 0; i < bridges.length; ++i) {\r\n for (let j = i + 1; j < bridges.length; ++j) {\r\n const ibi = bridges[i].i[0];\r\n const iei = bridges[i].i[bridges[i].i.length - 1];\r\n const jbi = bridges[i].j[0];\r\n const jei = bridges[i].j[bridges[i].j.length - 1];\r\n const ibj = bridges[j].i[0];\r\n const iej = bridges[j].i[bridges[j].i.length - 1];\r\n const jbj = bridges[j].j[0];\r\n const jej = bridges[j].j[bridges[j].j.length - 1];\r\n\r\n if (bridges[i].type !== bridges[j].type\r\n || this._hasChainBreak(Math.min(ibi, ibj), Math.max(iei, iej))\r\n || this._hasChainBreak(Math.min(jbi, jbj), Math.max(jei, jej))\r\n || ibj - iei >= 6 || (iei >= ibj && ibi <= iej)) {\r\n continue;\r\n }\r\n\r\n let bulge = false;\r\n if (bridges[i].type === BridgeType.PARALLEL) {\r\n bulge = ((jbj - jei < 6 && ibj - iei < 3) || (jbj - jei < 3));\r\n } else {\r\n bulge = ((jbi - jej < 6 && ibj - iei < 3) || (jbi - jej < 3));\r\n }\r\n\r\n if (bulge) {\r\n bridges[i].i = bridges[i].i.concat(bridges[j].i);\r\n if (bridges[i].type === BridgeType.PARALLEL) {\r\n bridges[i].j = bridges[i].j.concat(bridges[j].j);\r\n } else {\r\n bridges[i].j = bridges[j].j.concat(bridges[i].j);\r\n }\r\n bridges.splice(j--, 1);\r\n }\r\n }\r\n }\r\n\r\n // Sheet\r\n const ladderset = new Set();\r\n for (let i = 0; i < bridges.length; ++i) {\r\n ladderset.add(bridges[i]);\r\n }\r\n\r\n let sheet = 1;\r\n let ladder = 0;\r\n while (ladderset.size > 0) {\r\n let bridge = ladderset.values().next().value;\r\n ladderset.delete(bridge);\r\n\r\n const sheetset = new Set();\r\n sheetset.add(bridge);\r\n\r\n let toMove;\r\n do {\r\n toMove = new Set();\r\n for (const a of sheetset.values()) {\r\n for (const b of ladderset.values()) {\r\n if (this._areBridgesLinked(a, b)) {\r\n toMove.add(b);\r\n }\r\n }\r\n }\r\n for (bridge of toMove.values()) {\r\n sheetset.add(bridge);\r\n ladderset.delete(bridge);\r\n }\r\n } while (toMove.size > 0);\r\n\r\n for (bridge of sheetset.values()) {\r\n bridge.ladder = ladder;\r\n bridge.sheet = sheet;\r\n bridge.link = sheetset;\r\n ++ladder;\r\n }\r\n\r\n ++sheet;\r\n }\r\n\r\n for (let i = 0; i < bridges.length; ++i) {\r\n const bridge = bridges[i];\r\n\r\n // find out if any of the i and j set members already have\r\n // a bridge assigned, if so, we're assigning bridge 2\r\n\r\n let betai = 0;\r\n let betaj = 0;\r\n\r\n for (let l = 0; l < bridge.i.length; ++l) {\r\n if (this._betaPartners[bridge.i[l]][0]) {\r\n betai = 1;\r\n break;\r\n }\r\n }\r\n\r\n for (let l = 0; l < bridge.j.length; ++l) {\r\n if (this._betaPartners[bridge.j[l]][0]) {\r\n betaj = 1;\r\n break;\r\n }\r\n }\r\n\r\n let ss = StructureType.BRIDGE;\r\n if (bridge.i.length > 1) {\r\n ss = StructureType.STRAND;\r\n }\r\n\r\n if (bridge.type === BridgeType.PARALLEL) {\r\n let j = 0;\r\n for (let k = 0; k < bridge.i.length; ++k) {\r\n this._betaPartners[bridge.i[k]][betai] = {\r\n residue: bridge.j[j++],\r\n ladder: bridge.ladder,\r\n parallel: true,\r\n };\r\n }\r\n\r\n j = 0;\r\n for (let k = 0; k < bridge.j.length; ++k) {\r\n this._betaPartners[bridge.j[k]][betaj] = {\r\n residue: bridge.i[j++],\r\n ladder: bridge.ladder,\r\n parallel: true,\r\n };\r\n }\r\n } else {\r\n let j = bridge.j.length - 1;\r\n for (let k = 0; k < bridge.i.length; ++k) {\r\n this._betaPartners[bridge.i[k]][betai] = {\r\n residue: bridge.j[j--],\r\n ladder: bridge.ladder,\r\n parallel: false,\r\n };\r\n }\r\n\r\n j = bridge.i.length - 1;\r\n for (let k = 0; k < bridge.j.length; ++k) {\r\n this._betaPartners[bridge.j[k]][betaj] = {\r\n residue: bridge.i[j--],\r\n ladder: bridge.ladder,\r\n parallel: false,\r\n };\r\n }\r\n }\r\n\r\n for (let k = bridge.i[0]; k <= bridge.i[bridge.i.length - 1]; ++k) {\r\n if (this._ss[k] !== StructureType.STRAND) {\r\n this._ss[k] = ss;\r\n this._sheet[k] = bridge.sheet;\r\n }\r\n }\r\n\r\n for (let k = bridge.j[0]; k <= bridge.j[bridge.j.length - 1]; ++k) {\r\n if (this._ss[k] !== StructureType.STRAND) {\r\n this._ss[k] = ss;\r\n this._sheet[k] = bridge.sheet;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _testBridge(chainA, from, chainB, to) {\r\n let result = BridgeType.NO_BRIDGE;\r\n\r\n const a = chainA[from - 1]._index;\r\n const b = chainA[from]._index;\r\n const c = chainA[from + 1]._index;\r\n const d = chainB[to - 1]._index;\r\n const e = chainB[to]._index;\r\n const f = chainB[to + 1]._index;\r\n\r\n const isBond = this._hbonds.isBond.bind(this._hbonds);\r\n if ((isBond(c, e) && isBond(e, a)) || (isBond(f, b) && isBond(b, d))) {\r\n result = BridgeType.PARALLEL;\r\n } else if ((isBond(c, d) && isBond(f, a)) || (isBond(e, b) && isBond(b, e))) {\r\n result = BridgeType.ANTI_PARALLEL;\r\n }\r\n return result;\r\n }\r\n\r\n // return true if any of the residues in bridge a is identical to any of the residues in bridge b\r\n _areBridgesLinked(a, b) {\r\n const ai = new Set(a.i);\r\n const aj = new Set(a.j);\r\n\r\n for (const i of b.i) {\r\n if (ai.has(i) || aj.has(i)) {\r\n return true;\r\n }\r\n }\r\n\r\n for (const i of b.j) {\r\n if (ai.has(i) || aj.has(i)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _hasChainBreak(from, to) {\r\n for (let i = from + 1; i <= to; ++i) {\r\n if (this._complex._residues[i]._sequence !== this._complex._residues[i - 1]._sequence + 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nSecondaryStructureMap.StructureType = StructureType;\r\n","import * as THREE from 'three';\r\nimport logger from '../utils/logger';\r\nimport Atom from './Atom';\r\nimport Chain from './Chain';\r\nimport Helix from './Helix';\r\nimport Strand from './Strand';\r\nimport Sheet from './Sheet';\r\nimport Component from './Component';\r\nimport ResidueType from './ResidueType';\r\nimport Bond from './Bond';\r\nimport AutoBond from './AutoBond';\r\nimport AromaticLoopsMarker from './AromaticLoopsMarker';\r\nimport BiologicalUnit from './BiologicalUnit';\r\nimport selectors from './selectors';\r\nimport VoxelWorld from './VoxelWorld';\r\nimport SecondaryStructureMap from './SecondaryStructureMap';\r\nimport StructuralElement from './StructuralElement';\r\n\r\nconst VOXEL_SIZE = 5.0;\r\n\r\nconst { StructureType } = SecondaryStructureMap;\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\n// see http://www.wwpdb.org/documentation/file-format-content/format33/sect5.html#HELIX\r\nconst helixClassMap = {\r\n [StructureType.HELIX_ALPHA]: 1,\r\n [StructureType.HELIX_PI]: 3,\r\n [StructureType.HELIX_310]: 5,\r\n};\r\n\r\nconst loopMap = {\r\n [StructureType.BRIDGE]: StructuralElementType.BRIDGE,\r\n [StructureType.TURN]: StructuralElementType.TURN,\r\n [StructureType.BEND]: StructuralElementType.BEND,\r\n [StructureType.LOOP]: StructuralElementType.COIL,\r\n};\r\n\r\n/**\r\n * The entire complex of the molecules under study.\r\n *\r\n * @exports Complex\r\n * @constructor\r\n */\r\nclass Complex {\r\n constructor() {\r\n this._chains = [];\r\n this._components = [];\r\n this._helices = [];\r\n this._sheets = [];\r\n this.structures = [];\r\n\r\n this._residueTypes = Object.create(ResidueType.StandardTypes);\r\n this._atoms = [];\r\n this._residues = [];\r\n this._bonds = [];\r\n this._sgroups = [];\r\n this._molecules = [];\r\n this._maskNeedsUpdate = false;\r\n\r\n this.metadata = {};\r\n\r\n this.symmetry = [];\r\n this.units = [new BiologicalUnit(this)];\r\n this._currentUnit = 0; // default biological unit is the asymmetric unit\r\n }\r\n\r\n addAtom(atom) {\r\n const index = this._atoms.length;\r\n this._atoms.push(atom);\r\n return index;\r\n }\r\n\r\n addSheet(sheet) {\r\n const index = this._sheets.length;\r\n this._sheets.push(sheet);\r\n return index;\r\n }\r\n\r\n addHelix(helix) {\r\n const index = this._helices.length;\r\n this._helices.push(helix);\r\n return index;\r\n }\r\n\r\n getAtoms() {\r\n return this._atoms;\r\n }\r\n\r\n getBonds() {\r\n return this._bonds;\r\n }\r\n\r\n getAtomCount() {\r\n return this._atoms.length;\r\n }\r\n\r\n addResidue(residue) {\r\n const index = this._residues.length;\r\n this._residues.push(residue);\r\n return index;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n this.forEachChain((chain) => {\r\n chain.updateToFrame(frameData);\r\n });\r\n }\r\n\r\n addResidueType(resName) {\r\n const rt = this._residueTypes[resName] = new ResidueType(resName, 'Unknown', '');\r\n return rt;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residues.length;\r\n }\r\n\r\n getResidues() {\r\n return this._residues;\r\n }\r\n\r\n getSGroupCount() {\r\n return this._sgroups.length;\r\n }\r\n\r\n getSGroups() {\r\n return this._sgroups;\r\n }\r\n\r\n /*\r\n Extract atom by its fullname: #chainName#.#residueId#.#atomName#\r\n */\r\n getAtomByFullname(fullName) {\r\n const parts = fullName.split('.');\r\n if (parts.length !== 3) {\r\n return null;\r\n }\r\n\r\n const chainName = parts[0];\r\n const resId = parseInt(parts[1], 10);\r\n if (Number.isNaN(resId)) {\r\n return null;\r\n }\r\n const atomName = parts[2].toUpperCase();\r\n\r\n let currAtom = null;\r\n this.forEachChain((chain) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (chain._name.localeCompare(chainName) === 0) {\r\n chain.forEachResidue((residue) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (residue._sequence === resId) {\r\n residue.forEachAtom((atom) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (atomName.localeCompare(atom.name) === 0) {\r\n currAtom = atom;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n return currAtom;\r\n }\r\n\r\n /**\r\n * Create a new chain.\r\n *\r\n * @param {string} name - Chain name.\r\n * @returns {Chain} - Newly created chain.\r\n */\r\n addChain(name) {\r\n const result = new Chain(this, name);\r\n this._chains.push(result);\r\n return result;\r\n }\r\n\r\n getChain(name) {\r\n for (let i = 0, n = this._chains.length; i < n; ++i) {\r\n const chain = this._chains[i];\r\n if (chain.getName() === name) {\r\n return chain;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getChainCount() {\r\n return this._chains.length;\r\n }\r\n\r\n getMolecules() {\r\n return this._molecules;\r\n }\r\n\r\n getMoleculeCount() {\r\n return this._molecules.length;\r\n }\r\n\r\n forEachAtom(process) {\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n process(atoms[i]);\r\n }\r\n }\r\n\r\n forEachBond(process) {\r\n const bonds = this._bonds;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]);\r\n }\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n forEachChain(process) {\r\n const chains = this._chains;\r\n for (let i = 0, n = chains.length; i < n; ++i) {\r\n process(chains[i]);\r\n }\r\n }\r\n\r\n forEachMolecule(process) {\r\n const molecules = this._molecules;\r\n const n = molecules.length;\r\n for (let i = 0; i < n; ++i) {\r\n process(molecules[i]);\r\n }\r\n }\r\n\r\n forEachSGroup(process) {\r\n const groups = this._sgroups;\r\n for (let i = 0, n = groups.length; i < n; ++i) {\r\n process(groups[i]);\r\n }\r\n }\r\n\r\n forEachComponent(process) {\r\n const components = this._components;\r\n for (let i = 0, n = components.length; i < n; ++i) {\r\n process(components[i]);\r\n }\r\n }\r\n\r\n forEachVisibleComponent(process) {\r\n const components = this._components;\r\n for (let i = 0, n = components.length; i < n; ++i) {\r\n process(components[i]);\r\n }\r\n }\r\n\r\n addBond(left, right, order, type, fixed) {\r\n const bond = new Bond(left, right, order, type, fixed);\r\n this._bonds.push(bond);\r\n return bond;\r\n }\r\n\r\n getBondCount() {\r\n return this._bonds.length;\r\n }\r\n\r\n getResidueType(name) {\r\n return this._residueTypes[name] || null;\r\n }\r\n\r\n getUnifiedSerial(chain, serial, iCode) {\r\n /* eslint-disable no-magic-numbers */\r\n const maxSerial = 65536;\r\n const chainShift = maxSerial * 256;\r\n /* eslint-enable no-magic-numbers */\r\n return serial + iCode * maxSerial + chain * chainShift;\r\n }\r\n\r\n splitUnifiedSerial(uniSerial) {\r\n /* eslint-disable no-magic-numbers */\r\n const maxSerial = 65536;\r\n const chainShift = maxSerial * 256;\r\n /* eslint-enable no-magic-numbers */\r\n const chainId = Math.floor(uniSerial / chainShift);\r\n const remnant = uniSerial - chainId * chainShift;\r\n const insCode = Math.floor(remnant / maxSerial);\r\n const ser = remnant - insCode * maxSerial;\r\n return { chain: chainId, serial: ser, iCode: insCode };\r\n }\r\n\r\n _fillCmpEdit() {\r\n const self = this;\r\n const components = this._components;\r\n\r\n function addComp() {\r\n const comp = new Component(self);\r\n comp._index = components.length;\r\n components[comp._index] = comp;\r\n return comp;\r\n }\r\n\r\n this.forEachChain((chain) => {\r\n const residues = chain._residues;\r\n const resCount = residues.length;\r\n if (resCount < 1) {\r\n return;\r\n }\r\n let comp = addComp();\r\n let currStart = residues[0]._index;\r\n\r\n for (let i = 0; i < resCount; ++i) {\r\n const currRes = residues[i];\r\n currRes._component = comp;\r\n\r\n const nextRes = i === resCount - 1 ? null : residues[i + 1];\r\n if (!nextRes\r\n || !currRes.isConnected(nextRes)\r\n || currRes._index !== nextRes._index - 1) {\r\n // the last condition is broken and incorrect\r\n // the refactoring of the Component is required in order to fix this issue\r\n comp.setSubDivs([{\r\n start: currStart,\r\n end: currRes._index,\r\n }]);\r\n if (nextRes) {\r\n currStart = nextRes._index;\r\n comp = addComp();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n // This function was added in the moment of despair\r\n // It was the dark times for miew\r\n _fillCmpNoedit() {\r\n const comp = new Component(this);\r\n comp._index = 0;\r\n\r\n const residues = this._residues;\r\n const resCount = residues.length;\r\n if (resCount === 0) {\r\n return;\r\n }\r\n\r\n const currSubDivs = [];\r\n let currStart = 0;\r\n for (let i = 0; i < resCount; ++i) {\r\n const currRes = residues[i];\r\n currRes._component = comp;\r\n\r\n const nextRes = i === resCount - 1 ? null : residues[i + 1];\r\n if (!nextRes\r\n || !currRes.isConnected(nextRes)) {\r\n // wrap up this interval\r\n currSubDivs[currSubDivs.length] = {\r\n start: currStart,\r\n end: i,\r\n };\r\n if (nextRes) {\r\n currStart = i + 1;\r\n }\r\n }\r\n }\r\n\r\n comp.setSubDivs(currSubDivs);\r\n this._components[comp._index] = comp;\r\n }\r\n\r\n /**\r\n * Fill components information.\r\n * @param {boolean} enableEditing - Restructure Complex to enable per-component editing.\r\n */\r\n _fillComponents(enableEditing) {\r\n if (enableEditing) {\r\n this._fillCmpEdit();\r\n } else {\r\n this._fillCmpNoedit();\r\n }\r\n }\r\n\r\n getCurrentUnit() {\r\n return this._currentUnit;\r\n }\r\n\r\n getDefaultBoundaries() {\r\n return this.units[0].getBoundaries();\r\n }\r\n\r\n getBoundaries() {\r\n return this.units[this._currentUnit].getBoundaries();\r\n }\r\n\r\n getTransforms() {\r\n return this.units[this._currentUnit].getTransforms();\r\n }\r\n\r\n getSelector() {\r\n return this.units[this._currentUnit].getSelector();\r\n }\r\n\r\n resetCurrentUnit() {\r\n this._currentUnit = 0;\r\n this.setCurrentUnit(1);\r\n }\r\n\r\n setCurrentUnit(newUnit) {\r\n if (newUnit !== null && newUnit !== undefined\r\n && newUnit !== this._currentUnit\r\n && newUnit >= 0\r\n && newUnit < this.units.length) {\r\n this._currentUnit = newUnit;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n _computeBounds() {\r\n const { units } = this;\r\n for (let i = 0, n = units.length; i < n; ++i) {\r\n units[i].computeBoundaries();\r\n }\r\n }\r\n\r\n onAtomPositionChanged() {\r\n this.forEachChain((a) => {\r\n a._finalize();\r\n });\r\n this.forEachComponent((c) => {\r\n c.update();\r\n });\r\n // Update bounding sphere and box\r\n this._computeBounds();\r\n this._finalizeBonds();\r\n this.forEachSGroup((s) => {\r\n s._rebuildSGroupOnAtomChange();\r\n });\r\n }\r\n\r\n update() {\r\n if (this._maskNeedsUpdate) {\r\n this.updateStructuresMask();\r\n this._maskNeedsUpdate = false;\r\n }\r\n }\r\n\r\n _finalizeBonds() {\r\n const bonds = this.getBonds();\r\n const n = bonds.length;\r\n for (let i = 0; i < n; ++i) {\r\n bonds[i]._index = i;\r\n }\r\n }\r\n\r\n /**\r\n * Finalizes complex's inner data(i.e. after parsing).\r\n * @param {objects} opts - Build bonds automatically.\r\n * @param {boolean} opts.needAutoBonding - Build bonds automatically.\r\n * @param {boolean} opts.detectAromaticLoops - Find/mark aromatic loops.\r\n * @param {boolean} opts.enableEditing - Restructure Complex to enable per-component editing.\r\n * @param {Array} [opts.serialAtomMap] - Array of atoms ordered by their serials.\r\n */\r\n finalize(opts) {\r\n opts = opts || {};\r\n // Put bonds into atoms\r\n const bonds = this._bonds;\r\n let i;\r\n let n;\r\n // remove invalid bonds\r\n for (i = bonds.length - 1; i >= 0; i--) {\r\n const bond = bonds[i];\r\n if (bond._left === null || bond._right === null) {\r\n bonds.splice(i, 1);\r\n } else {\r\n bond._left.bonds.push(bond);\r\n bond._right.bonds.push(bond);\r\n }\r\n }\r\n\r\n const residues = this._residues;\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n residues[i]._finalize();\r\n }\r\n\r\n this.forEachChain((a) => {\r\n a._finalize();\r\n });\r\n\r\n // WARNING! this MUST be done BEFORE computeBounds is called\r\n const { units } = this;\r\n for (i = 0, n = units.length; i < n; ++i) {\r\n units[i].finalize();\r\n }\r\n // try setting first biomolecule by defaults\r\n this.setCurrentUnit(1);\r\n\r\n const residueHash = {};\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n const res = residues[i];\r\n // This code is extremely dangerous for non-PDB formats\r\n residueHash[this.getUnifiedSerial(\r\n res.getChain().getName().charCodeAt(0),\r\n res.getSequence(),\r\n res.getICode().charCodeAt(0),\r\n )] = res;\r\n }\r\n\r\n const { structures } = this;\r\n for (i = 0, n = structures.length; i < n; ++i) {\r\n structures[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n const helices = this._helices;\r\n for (i = 0, n = helices.length; i < n; ++i) {\r\n helices[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n const sheets = this._sheets;\r\n for (i = 0, n = sheets.length; i < n; ++i) {\r\n sheets[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n // Update bounding sphere and box\r\n this._computeBounds();\r\n\r\n const atoms = this._atoms;\r\n for (i = 0, n = atoms.length; i < n; ++i) {\r\n const currAtom = atoms[i];\r\n currAtom.index = i;\r\n }\r\n\r\n if (opts.needAutoBonding) {\r\n // Ignore errors during autobonding\r\n try {\r\n const autoConnector = new AutoBond(this);\r\n autoConnector.build();\r\n autoConnector.destroy();\r\n } catch (e) {\r\n console.warn('Autobonding failed:', e);\r\n }\r\n }\r\n\r\n const chains = this._chains;\r\n for (i = 0, n = chains.length; i < n; ++i) {\r\n chains[i]._index = i;\r\n }\r\n\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n residues[i]._index = i;\r\n }\r\n\r\n // mark non-polar hydrogens\r\n for (i = 0, n = atoms.length; i < n; ++i) {\r\n const atom = atoms[i];\r\n if (atom.flags & Atom.Flags.HYDROGEN && atom.bonds.length === 1) {\r\n const bond = atom.bonds[0];\r\n const other = (bond._left !== atom && bond._left) || bond._right;\r\n if (other.flags & Atom.Flags.CARBON) {\r\n atom.flags |= Atom.Flags.NONPOLARH;\r\n }\r\n }\r\n }\r\n\r\n this._finalizeBonds();\r\n this._fillComponents(opts.enableEditing);\r\n\r\n const marker = new AromaticLoopsMarker(this);\r\n marker.markCycles();\r\n if (opts.detectAromaticLoops) { // TODO remove this condition clause, it is for debug purposes only!\r\n marker.detectCycles(); // TODO add conditional detection\r\n }\r\n\r\n this._finalizeMolecules();\r\n }\r\n\r\n _finalizeMolecules() {\r\n // add reference to molecule into residue\r\n for (let i = 0; i < this._molecules.length; i++) {\r\n const molecule = this._molecules[i];\r\n const count = molecule.residues.length;\r\n for (let j = 0; j < count; j++) {\r\n const residue = molecule.residues[j];\r\n residue._molecule = molecule;\r\n }\r\n }\r\n }\r\n\r\n updateStructuresMask() {\r\n const updater = (structure) => structure.collectMask();\r\n this.forEachResidue(updater);\r\n this.forEachChain(updater);\r\n this.forEachMolecule(updater);\r\n }\r\n\r\n countAtomsByMask(mask) {\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if ((atom.mask & mask) !== 0) {\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n getNumAtomsBySelector(selector) {\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom)) {\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n resetAtomMask(mask) {\r\n this.forEachAtom((atom) => {\r\n atom.mask = mask;\r\n });\r\n }\r\n\r\n markAtoms(selector, mask) {\r\n const setMask = mask;\r\n const clearMask = ~setMask;\r\n let count = 0;\r\n const totalSelector = selectors.keyword('And')(selector, this.getSelector());\r\n\r\n this.forEachAtom((atom) => {\r\n if (totalSelector.includesAtom(atom)) {\r\n atom.mask |= setMask;\r\n count++;\r\n } else {\r\n atom.mask &= clearMask;\r\n }\r\n });\r\n this._maskNeedsUpdate = true;\r\n\r\n return count;\r\n }\r\n\r\n markAtomsAdditionally(selector, mask) {\r\n const setMask = mask;\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom) && (atom.mask & mask) !== mask) {\r\n atom.mask |= setMask;\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n clearAtomBits(mask) {\r\n const clearMask = ~mask;\r\n this.forEachAtom((atom) => {\r\n atom.mask &= clearMask;\r\n });\r\n const reseter = (a) => {\r\n a._mask &= clearMask;\r\n };\r\n this.forEachAtom(reseter);\r\n this.forEachResidue(reseter);\r\n this.forEachChain(reseter);\r\n this.forEachMolecule(reseter);\r\n }\r\n\r\n getAtomNames() {\r\n if (this.hasOwnProperty('_atomNames')) {\r\n return this._atomNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[atom.name] = 1;\r\n });\r\n this._atomNames = Object.keys(dict);\r\n\r\n return this._atomNames;\r\n }\r\n\r\n getElements() {\r\n if (this.hasOwnProperty('_elements')) {\r\n return this._elements;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[atom.element.name] = 1;\r\n });\r\n this._elements = Object.keys(dict);\r\n\r\n return this._elements;\r\n }\r\n\r\n getResidueNames() {\r\n if (this.hasOwnProperty('_residueNames')) {\r\n return this._residueNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachResidue((res) => {\r\n dict[res._type._name] = 1;\r\n });\r\n this._residueNames = Object.keys(dict);\r\n\r\n return this._residueNames;\r\n }\r\n\r\n getChainNames() {\r\n if (this.hasOwnProperty('_chainNames')) {\r\n return this._chainNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachChain((chain) => {\r\n dict[chain._name] = 1;\r\n });\r\n this._chainNames = Object.keys(dict);\r\n\r\n return this._chainNames;\r\n }\r\n\r\n getAltLocNames() {\r\n if (this.hasOwnProperty('_altlocNames')) {\r\n return this._altlocNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[String.fromCharCode(atom.location)] = 1;\r\n });\r\n this._altlocNames = Object.keys(dict);\r\n\r\n return this._altlocNames;\r\n }\r\n\r\n getVoxelWorld() {\r\n if (!this.hasOwnProperty('_voxelWorld')) {\r\n try {\r\n this._voxelWorld = new VoxelWorld(\r\n this.getDefaultBoundaries().boundingBox,\r\n new THREE.Vector3(VOXEL_SIZE, VOXEL_SIZE, VOXEL_SIZE),\r\n );\r\n this._voxelWorld.addAtoms(this);\r\n } catch (e) {\r\n logger.warn('Unable to create voxel world');\r\n this._voxelWorld = null;\r\n }\r\n }\r\n\r\n return this._voxelWorld;\r\n }\r\n\r\n /**\r\n * Simple function to make unified routine procedure without code duplication.\r\n * @param {Array} srcArray - Source chemical structure array (will be part of resulting chemical structure array).\r\n * @param {Array} dstArray - Resulting chemical structure array.\r\n * @param {number} param - Parameter for processor.\r\n * @param {function} functor - Processor for every element in array.\r\n */\r\n addElement(srcArray, dstArray, param, functor) {\r\n const { length } = srcArray;\r\n for (let i = 0; i < length; ++i) {\r\n const elem = srcArray[i];\r\n functor(elem, param);\r\n dstArray.push(elem);\r\n }\r\n }\r\n\r\n // this function joins multiple complexes into one (this)\r\n // atom, bond, ... objects are reused -- so input complexes are no longer valid\r\n joinComplexes(complexes) {\r\n // clear target complex\r\n this._chains = [];\r\n this._components = [];\r\n this._helices = [];\r\n this._sheets = [];\r\n this.structures = [];\r\n this._atoms = [];\r\n this._residues = [];\r\n this._bonds = [];\r\n this._sgroups = [];\r\n\r\n const self = this;\r\n let atomBias = 0;\r\n let bondBias = 0;\r\n let residueBias = 0;\r\n let chainBias = 0;\r\n let componentBias = 0;\r\n\r\n function processAtom(atom, bias) {\r\n atom.serial += bias;\r\n atom.index += bias;\r\n }\r\n\r\n function processBond(bond, bias) {\r\n bond._index += bias;\r\n }\r\n\r\n function processResidue(residue, bias) {\r\n residue._index += bias;\r\n }\r\n\r\n function processChain(chain, bias) {\r\n chain._complex = self;\r\n chain._index += bias;\r\n }\r\n\r\n function processComponent(component, bias) {\r\n component._complex = self;\r\n component._index += bias;\r\n }\r\n\r\n /**\r\n * Simple function to do nothing.\r\n */\r\n function doNothing() {\r\n }\r\n\r\n for (let i = 0; i < complexes.length; ++i) {\r\n const c = complexes[i];\r\n this.addElement(c._atoms, this._atoms, atomBias, processAtom);\r\n this.addElement(c._bonds, this._bonds, bondBias, processBond);\r\n this.addElement(c._residues, this._residues, residueBias, processResidue);\r\n this.addElement(c._chains, this._chains, chainBias, processChain);\r\n this.addElement(c._sheets, this._sheets, 0, doNothing);\r\n this.addElement(c._helices, this._helices, 0, doNothing);\r\n this.addElement(c._sgroups, this._sgroups, 0, doNothing);\r\n this.addElement(c._components, this._components, componentBias, processComponent);\r\n this.addElement(c.structures, this.structures, 0, doNothing);\r\n // merge residue types\r\n for (const rt in c._residueTypes) {\r\n if (c._residueTypes.hasOwnProperty(rt)) {\r\n this._residueTypes[rt] = c._residueTypes[rt];\r\n }\r\n }\r\n\r\n atomBias += c._atoms.length;\r\n bondBias += c._bonds.length;\r\n residueBias += c._residues.length;\r\n chainBias += c._chains.length;\r\n componentBias += c._components.length;\r\n }\r\n\r\n this._computeBounds();\r\n }\r\n\r\n /**\r\n * Replace secondary structure with calculated one.\r\n *\r\n * DSSP algorithm implementation is used.\r\n *\r\n * Kabsch W, Sander C. 1983. Dictionary of protein secondary structure: pattern recognition of hydrogen-bonded and\r\n * geometrical features. Biopolymers. 22(12):2577-2637. doi:10.1002/bip.360221211.\r\n */\r\n dssp() {\r\n const ssMap = new SecondaryStructureMap(this);\r\n\r\n const structures = this.structures = [];\r\n const helices = this._helices = [];\r\n const sheets = this._sheets = [];\r\n\r\n const getSheet = (index) => {\r\n let item = sheets[index];\r\n if (!item) {\r\n item = sheets[index] = new Sheet(String(index), 0);\r\n }\r\n return item;\r\n };\r\n\r\n let lastCode;\r\n let lastSheetIndex;\r\n let lastHelixIndex = 0;\r\n let curStructure = null;\r\n for (let i = 0, n = this._residues.length; i < n; ++i) {\r\n const curCode = ssMap._ss[i];\r\n const curResidue = this._residues[i];\r\n const curSheetIndex = ssMap._sheet[i];\r\n\r\n // expand the last structure\r\n if (curCode === lastCode && curSheetIndex === lastSheetIndex) {\r\n curResidue._secondary = curStructure;\r\n if (curStructure) {\r\n curStructure.term = curResidue;\r\n }\r\n if (curStructure instanceof Helix) {\r\n curStructure.length++;\r\n }\r\n continue;\r\n }\r\n\r\n // create a new structure\r\n const helixClass = helixClassMap[curCode];\r\n const loopType = loopMap[curCode];\r\n if (curCode === StructureType.STRAND) {\r\n const curSheet = getSheet(curSheetIndex);\r\n curStructure = new Strand(curSheet, curResidue, curResidue, 0, null, null);\r\n curSheet.addStrand(curStructure);\r\n } else if (helixClass !== undefined) {\r\n lastHelixIndex++;\r\n curStructure = new Helix(helixClass, curResidue, curResidue, lastHelixIndex, String(lastHelixIndex), '', 1);\r\n helices.push(curStructure);\r\n } else if (loopType !== undefined) {\r\n curStructure = new StructuralElement(loopType, curResidue, curResidue);\r\n } else {\r\n curStructure = null;\r\n }\r\n\r\n if (curStructure) {\r\n structures.push(curStructure);\r\n }\r\n\r\n curResidue._secondary = curStructure;\r\n\r\n lastCode = curCode;\r\n lastSheetIndex = curSheetIndex;\r\n }\r\n\r\n this._sheets = sheets.filter((_sheet) => true); // squeeze sheets array\r\n }\r\n}\r\n\r\nComplex.prototype.id = 'Complex';\r\nComplex.prototype.name = '';\r\n\r\nexport default Complex;\r\n","import * as THREE from 'three';\r\nimport utils from '../utils';\r\n\r\nfunction pow2ceil(v) {\r\n let p = 2;\r\n v = (v - 1) >> 1;\r\n while (v) {\r\n p <<= 1;\r\n v >>= 1;\r\n }\r\n return p;\r\n}\r\n\r\n/**\r\n * Volume constructor\r\n *\r\n * @param {Object} type - Float32Array, Int8Array, etc...\r\n * @param {Object|Array} dimensions - number of data points on each axis (x, y, z)\r\n * @param {Box3} box - bounding box defining data place in metric space,\r\n * it's corners correspond to extreme data points\r\n * @param {Number} vecSize - dimension of the field data point (1 = scalar, 3 = 3D vector)\r\n * @param {Object} data - typed array of the same type as specified by the 1st parameter,\r\n * layout: point by point along X,\r\n * row by row along Y,\r\n * plane by plane along Z\r\n * @param {Number} volumeInfo - volume info values to define threshold to filter the noise\r\n */\r\n\r\nclass Volume {\r\n constructor(type, dimensions, box, vecSize, data, volumeInfo) {\r\n this._box = box.clone();\r\n this._dimVec = Math.max(Math.floor(vecSize || 1), 1);\r\n this._volumeInfo = volumeInfo;\r\n\r\n if (dimensions instanceof Array) {\r\n [this._dimX, this._dimY, this._dimZ] = dimensions;\r\n } else {\r\n this._dimX = dimensions.x;\r\n this._dimY = dimensions.y;\r\n this._dimZ = dimensions.z;\r\n }\r\n this._dimX = Math.max(Math.floor(this._dimX), 1);\r\n this._dimY = Math.max(Math.floor(this._dimY), 1);\r\n this._dimZ = Math.max(Math.floor(this._dimZ), 1);\r\n\r\n this._rowElements = this._dimVec * this._dimX;\r\n this._planeElements = this._rowElements * this._dimY;\r\n this._totalElements = this._planeElements * this._dimZ;\r\n\r\n this._data = data || utils.allocateTyped(type, this._totalElements);\r\n\r\n // override getter/setter for vector fields\r\n switch (this._dimVec) {\r\n case 1:\r\n break;\r\n\r\n case 2:\r\n this.getValue = function (x, y, z) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n return [this._data[idx], this._data[idx + 1]];\r\n };\r\n\r\n this.setValue = function (x, y, z, a, b) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] = a;\r\n this._data[idx + 1] = b;\r\n };\r\n\r\n this.addValue = function (x, y, z, a, b) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] += a;\r\n this._data[idx + 1] += b;\r\n };\r\n break;\r\n\r\n case 3:\r\n this.getValue = function (x, y, z) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n return [this._data[idx], this._data[idx + 1], this._data[idx + 2]];\r\n };\r\n\r\n this.setValue = function (x, y, z, a, b, c) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] = a;\r\n this._data[idx + 1] = b;\r\n this._data[idx + 2] = c;\r\n };\r\n\r\n this.addValue = function (x, y, z, a, b, c) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] += a;\r\n this._data[idx + 1] += b;\r\n this._data[idx + 2] += c;\r\n };\r\n break;\r\n\r\n default:\r\n throw new Error('Volume: invalid vector dimension');\r\n }\r\n }\r\n\r\n // default getter assumes it's a scalar field\r\n getValue(x, y, z) {\r\n return this._data[x + y * this._rowElements + z * this._planeElements];\r\n }\r\n\r\n // default setter assumes it's a scalar field\r\n setValue(x, y, z, val) {\r\n this._data[x + y * this._rowElements + z * this._planeElements] = val;\r\n }\r\n\r\n // default adder assumes it's a scalar field\r\n addValue(x, y, z, val) {\r\n this._data[x + y * this._rowElements + z * this._planeElements] += val;\r\n }\r\n\r\n getDimensions() {\r\n return [this._dimX, this._dimY, this._dimZ];\r\n }\r\n\r\n getBox() {\r\n return this._box;\r\n }\r\n\r\n getVolumeInfo() {\r\n return this._volumeInfo;\r\n }\r\n\r\n getCellSize() {\r\n const boxSize = new THREE.Vector3();\r\n this._box.getSize(boxSize);\r\n const res = new THREE.Vector3();\r\n res.x = this._dimX > 1 ? boxSize.x / (this._dimX - 1) : 0;\r\n res.y = this._dimY > 1 ? boxSize.y / (this._dimY - 1) : 0;\r\n res.z = this._dimZ > 1 ? boxSize.z / (this._dimZ - 1) : 0;\r\n return res;\r\n }\r\n\r\n computeGradient() {\r\n if (this._dimVec !== 1) {\r\n // gradient can only be computed for scalar fields\r\n return null;\r\n }\r\n\r\n // create a 3D vector field of gradients\r\n const gradient = new Volume(Float32Array, [this._dimX, this._dimY, this._dimZ], this._box, 3);\r\n\r\n // calculate cell side lengths\r\n const vl = this.getCellSize();\r\n\r\n // gradient axis scaling values and averaging factors, to correctly\r\n // calculate the gradient for volumes with irregular cell spacing\r\n const vs = new THREE.Vector3(-0.5 / vl.x, -0.5 / vl.y, -0.5 / vl.z);\r\n\r\n // TODO Check for intended bug in VMD (min is zero)\r\n function clamp(val, min, max) {\r\n return Math.min(max, Math.max(min, val));\r\n }\r\n\r\n const xSize = this._dimX;\r\n const ySize = this._dimY;\r\n const zSize = this._dimZ;\r\n const volMap = this._data;\r\n\r\n function _voxelValue(x, y, z) {\r\n return volMap[z * xSize * ySize + y * xSize + x];\r\n }\r\n\r\n for (let zi = 0; zi < zSize; ++zi) {\r\n const zm = clamp(zi - 1, 0, zSize - 1);\r\n const zp = clamp(zi + 1, 0, zSize - 1);\r\n\r\n for (let yi = 0; yi < ySize; ++yi) {\r\n const ym = clamp(yi - 1, 0, ySize - 1);\r\n const yp = clamp(yi + 1, 0, ySize - 1);\r\n\r\n for (let xi = 0; xi < xSize; ++xi) {\r\n const xm = clamp(xi - 1, 0, xSize - 1);\r\n const xp = clamp(xi + 1, 0, xSize - 1);\r\n\r\n // Calculate the volume gradient at each grid cell.\r\n // Gradients are now stored unnormalized, since we need them in pure\r\n // form in order to draw field lines etc. Shading code will now have\r\n // to do renormalization for itself on-the-fly.\r\n\r\n // XXX this gradient is only correct for orthogonal grids, since\r\n // we're using the array index offsets rather to calculate the gradient\r\n // rather than voxel coordinate offsets. This will have to be\r\n // re-worked for non-orthogonal datasets.\r\n\r\n gradient.setValue(\r\n xi,\r\n yi,\r\n zi,\r\n (_voxelValue(xp, yi, zi) - _voxelValue(xm, yi, zi)) * vs.x,\r\n (_voxelValue(xi, yp, zi) - _voxelValue(xi, ym, zi)) * vs.y,\r\n (_voxelValue(xi, yi, zp) - _voxelValue(xi, yi, zm)) * vs.z,\r\n );\r\n }\r\n }\r\n }\r\n\r\n return gradient;\r\n }\r\n\r\n normalize() {\r\n const data = this._data;\r\n\r\n // get min/max\r\n let min = data[0];\r\n let max = data[0];\r\n for (let i = 1; i < data.length; ++i) {\r\n min = Math.min(min, data[i]);\r\n max = Math.max(max, data[i]);\r\n }\r\n\r\n const d = 1.0 / (max - min);\r\n if (d === 0) {\r\n return;\r\n }\r\n\r\n // normalize\r\n for (let i = 0; i < data.length; ++i) {\r\n data[i] = d * (data[i] - min);\r\n }\r\n }\r\n\r\n getTiledTextureStride() {\r\n return [this._dimX + 2, this._dimY + 2];\r\n }\r\n\r\n buildTiledTexture() {\r\n let tilesX = Math.ceil(Math.sqrt(this._dimZ * this._dimY / this._dimX));\r\n\r\n let width = tilesX * (this._dimX + 2) - 1;\r\n width = pow2ceil(width);\r\n tilesX = Math.floor(width / (this._dimX + 2));\r\n\r\n const tilesY = Math.ceil(this._dimZ / tilesX);\r\n let height = tilesY * (this._dimY + 2) - 1;\r\n height = pow2ceil(height);\r\n\r\n const data = new Uint8Array(width * height);\r\n\r\n let src;\r\n let dst;\r\n for (let tileRow = 0; tileRow < tilesY; ++tileRow) {\r\n // process each pixel row of this tile row\r\n for (let row = 0; row < this._dimY; ++row) {\r\n src = tileRow * tilesX * this._planeElements + row * this._rowElements;\r\n dst = width * (tileRow * (this._dimY + 2) + row);\r\n // copy a series of rows through several XY planes\r\n for (let t = 0; t < tilesX; ++t) {\r\n // copy one row of one XY plane\r\n for (let x = 0; x < this._dimX; ++x) {\r\n data[dst++] = 255.0 * this._data[src++];\r\n }\r\n\r\n // repeat last pixel of previous tile\r\n data[dst++] = 255.0 * this._data[src - 1];\r\n\r\n if (t < tilesX - 1) {\r\n // skip to the same row of next XY plane\r\n src += this._planeElements - this._rowElements;\r\n // repeat first pixel of next tile\r\n data[dst++] = 255.0 * this._data[src];\r\n }\r\n }\r\n }\r\n }\r\n\r\n // fill pixels between tile rows with copy of edge pixels\r\n for (let tileRow = 0; tileRow < tilesY; ++tileRow) {\r\n // copy last pixel row of this tile row to the following pixel row of the texture\r\n src = width * (tileRow * (this._dimY + 2) + this._dimY - 1);\r\n dst = src + width;\r\n for (let x = 0; x < width; ++x) {\r\n data[dst++] = data[src++];\r\n }\r\n if (tileRow < tilesY - 1) {\r\n // copy first pixel row of next tile row to the preceding pixel row of the texture\r\n src = width * (tileRow + 1) * (this._dimY + 2);\r\n dst = src - width;\r\n for (let x = 0; x < width; ++x) {\r\n data[dst++] = data[src++];\r\n }\r\n }\r\n }\r\n\r\n const texture = new THREE.DataTexture(\r\n data,\r\n width,\r\n height,\r\n THREE.LuminanceFormat,\r\n THREE.UnsignedByteType,\r\n THREE.UVMapping,\r\n THREE.ClampToEdgeWrapping,\r\n THREE.ClampToEdgeWrapping,\r\n THREE.LinearFilter,\r\n THREE.LinearFilter,\r\n );\r\n texture.needsUpdate = true;\r\n return texture;\r\n }\r\n\r\n /* ********************************************************************************\r\n *\r\n * Methods that provide direct access to internal array (for better performance)\r\n *\r\n ******************************************************************************** */\r\n\r\n getData() {\r\n return this._data;\r\n }\r\n\r\n getDirectIdx(x, y, z) {\r\n return x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n }\r\n\r\n getStrideX() {\r\n return this._dimVec;\r\n }\r\n\r\n getStrideY() {\r\n return this._rowElements;\r\n }\r\n\r\n getStrideZ() {\r\n return this._planeElements;\r\n }\r\n}\r\n\r\nVolume.prototype.id = 'Volume';\r\n\r\nexport default Volume;\r\n","/**\r\n * Residue Molecule.\r\n *\r\n * @param {Complex} complex - Molecular complex this Molecule belongs to.\r\n * @param {String} name - Molecule's name.\r\n * @param {Integer} index - Molecule's index in file.\r\n *\r\n * @exports Molecule\r\n * @constructor\r\n */\r\nclass Molecule {\r\n constructor(complex, name, index) {\r\n this.complex = complex;\r\n this.name = name || '';\r\n this.residues = [];\r\n this.mask = 1 | 0;\r\n this.index = index || -1; // start with 1\r\n }\r\n\r\n forEachResidue(process) {\r\n const { residues } = this;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const { residues } = this;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n mask &= residues[i]._mask;\r\n }\r\n this.mask = mask;\r\n }\r\n}\r\n\r\nexport default Molecule;\r\n","import Atom from './chem/Atom';\r\nimport Element from './chem/Element';\r\nimport Bond from './chem/Bond';\r\nimport Residue from './chem/Residue';\r\nimport ResidueType from './chem/ResidueType';\r\nimport Chain from './chem/Chain';\r\nimport Helix from './chem/Helix';\r\nimport Strand from './chem/Strand';\r\nimport Sheet from './chem/Sheet';\r\nimport SGroup from './chem/SGroup';\r\nimport Assembly from './chem/Assembly';\r\nimport Complex from './chem/Complex';\r\nimport Volume from './chem/Volume';\r\nimport VoxelWorld from './chem/VoxelWorld';\r\nimport selectors from './chem/selectors';\r\nimport Molecule from './chem/Molecule';\r\n\r\nexport default {\r\n Atom,\r\n Element,\r\n Bond,\r\n Residue,\r\n ResidueType,\r\n Chain,\r\n Helix,\r\n Strand,\r\n Sheet,\r\n SGroup,\r\n Assembly,\r\n Complex,\r\n Volume,\r\n VoxelWorld,\r\n selectors,\r\n Molecule,\r\n};\r\n","/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nimport * as THREE from 'three';\r\n\r\nclass CSS2DObject extends THREE.Object3D {\r\n constructor(element) {\r\n super();\r\n const self = this;\r\n this._element = element;\r\n this._element.style.position = 'absolute';\r\n this.addEventListener('removed', () => {\r\n if (self._element.parentNode !== null) {\r\n self._element.parentNode.removeChild(self._element);\r\n }\r\n });\r\n }\r\n\r\n getElement() {\r\n return this._element;\r\n }\r\n\r\n /**\r\n * Sets label transparency.\r\n *\r\n * @param {number} transp - in [0; 1] 1 means fully transparent\r\n */\r\n setTransparency(transp) {\r\n const el = this.getElement();\r\n if (el === null) {\r\n return;\r\n }\r\n if (transp === 1.0) {\r\n el.style.display = 'none';\r\n return;\r\n }\r\n el.style.display = 'inline';\r\n const op = 1.0 - transp;\r\n const top = op.toString();\r\n const op100 = op * 100;\r\n el.style.opacity = top;\r\n el.style.filter = `alpha(opacity=${op100})`; // IE fallback\r\n }\r\n\r\n clone() {\r\n const obj = new CSS2DObject(this._element);\r\n obj.copy(this);\r\n return obj;\r\n }\r\n}\r\n\r\nexport default CSS2DObject;\r\n","import * as THREE from 'three';\r\n\r\nclass RCGroup extends THREE.Group {\r\n raycast(raycaster, intersects) {\r\n if (!this.visible) {\r\n return;\r\n }\r\n\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n children[i].raycast(raycaster, intersects);\r\n }\r\n }\r\n\r\n enableSubset(mask, innerOnly) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].enableSubset) {\r\n children[i].enableSubset(mask, innerOnly);\r\n }\r\n }\r\n }\r\n\r\n disableSubset(mask, innerOnly) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].disableSubset) {\r\n children[i].disableSubset(mask, innerOnly);\r\n }\r\n }\r\n }\r\n\r\n isEmpty() {\r\n return this.children.length === 0;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].updateToFrame) {\r\n children[i].updateToFrame(frameData);\r\n }\r\n }\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n Array.prototype.push.apply(totalSubset, children[i].getSubset(mask, innerOnly));\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default RCGroup;\r\n","/* eslint-disable no-magic-numbers */\r\nimport * as THREE from 'three';\r\nimport logger from '../utils/logger';\r\nimport CSS2DObject from './CSS2DObject';\r\nimport RCGroup from './RCGroup';\r\nimport vertexScreenQuadShader from './shaders/ScreenQuad.vert';\r\nimport fragmentScreenQuadFromTex from './shaders/ScreenQuadFromTex.frag';\r\nimport fragmentScreenQuadFromTexWithDistortion from './shaders/ScreenQuadFromTexWithDistortion.frag';\r\n\r\nconst LAYERS = {\r\n DEFAULT: 0, VOLUME: 1, TRANSPARENT: 2, PREPASS_TRANSPARENT: 3, VOLUME_BFPLANE: 4, COLOR_FROM_POSITION: 5, SHADOWMAP: 6,\r\n};\r\n\r\nconst SELECTION_LAYERS = [ // These layers, that are used in the selection by ray casting\r\n LAYERS.DEFAULT, LAYERS.TRANSPARENT,\r\n];\r\n\r\nTHREE.Object3D.prototype.resetTransform = function () {\r\n this.position.set(0, 0, 0);\r\n this.quaternion.set(0, 0, 0, 1);\r\n this.scale.set(1, 1, 1);\r\n};\r\n\r\n// update world matrix of this object and all its ancestors\r\nTHREE.Object3D.prototype.updateMatrixWorldRecursive = function () {\r\n if (this.parent != null) {\r\n this.parent.updateMatrixWorldRecursive();\r\n }\r\n this.updateMatrixWorld();\r\n};\r\n// add object to parent, saving objects' world transform\r\nTHREE.Object3D.prototype.addSavingWorldTransform = (function () {\r\n const _worldMatrixInverse = new THREE.Matrix4();\r\n\r\n return function (object) {\r\n if (object instanceof THREE.Object3D) {\r\n _worldMatrixInverse.copy(this.matrixWorld).invert();\r\n _worldMatrixInverse.multiply(object.matrixWorld);\r\n object.matrix.copy(_worldMatrixInverse);\r\n object.matrix.decompose(object.position, object.quaternion, object.scale);\r\n this.add(object);\r\n }\r\n };\r\n}());\r\n\r\n// render a tiny transparent quad in the center of the screen\r\nTHREE.WebGLRenderer.prototype.renderDummyQuad = (function () {\r\n const _material = new THREE.MeshBasicMaterial({ transparent: true, opacity: 0.0, depthWrite: false });\r\n\r\n const _scene = new THREE.Scene();\r\n const _quad = new THREE.Mesh(new THREE.PlaneGeometry(0.01, 0.01), _material);\r\n _scene.add(_quad);\r\n\r\n const _camera = new THREE.OrthographicCamera(-0.5, 0.5, 0.5, -0.5, -10000, 10000);\r\n _camera.position.z = 100;\r\n\r\n return function () {\r\n this.render(_scene, _camera);\r\n };\r\n}());\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuad = (function () {\r\n const _scene = new THREE.Scene();\r\n const _quad = new THREE.Mesh(new THREE.PlaneGeometry(1.0, 1.0));\r\n _scene.add(_quad);\r\n\r\n const _camera = new THREE.OrthographicCamera(-0.5, 0.5, 0.5, -0.5, -10000, 10000);\r\n _camera.position.z = 100;\r\n\r\n return function (material) {\r\n _quad.material = material;\r\n this.render(_scene, _camera);\r\n };\r\n}());\r\n\r\nTHREE.Matrix4.prototype.isIdentity = (function () {\r\n const identity = new THREE.Matrix4();\r\n return function () {\r\n return identity.equals(this);\r\n };\r\n}());\r\n\r\nTHREE.Matrix4.prototype.applyToPointsArray = function (array, stride, w) {\r\n if (!array || !stride || stride < 3) {\r\n return array;\r\n }\r\n w = w || 0; // use point as normal by default\r\n const e = this.elements;\r\n for (let i = 0; i < array.length; i += stride) {\r\n const x = array[i];\r\n const y = array[i + 1];\r\n const z = array[i + 2];\r\n\r\n const persp = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\r\n\r\n array[i] = (e[0] * x + e[4] * y + e[8] * z + e[12] * w) * persp;\r\n array[i + 1] = (e[1] * x + e[5] * y + e[9] * z + e[13] * w) * persp;\r\n array[i + 2] = (e[2] * x + e[6] * y + e[10] * z + e[14] * w) * persp;\r\n }\r\n return array;\r\n};\r\n\r\nclass ScreenQuadMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n if (params.uniforms === undefined) {\r\n params.uniforms = {};\r\n }\r\n params.uniforms.srcTex = { type: 't', value: null };\r\n params.vertexShader = vertexScreenQuadShader;\r\n params.transparent = false;\r\n params.depthTest = false;\r\n params.depthWrite = false;\r\n super(params);\r\n }\r\n}\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuadFromTex = (function () {\r\n const _material = new ScreenQuadMaterial({\r\n uniforms: { opacity: { type: 'f', value: 1.0 } },\r\n fragmentShader: fragmentScreenQuadFromTex,\r\n transparent: true,\r\n });\r\n\r\n return function (srcTex, opacity) {\r\n _material.uniforms.srcTex.value = srcTex;\r\n _material.transparent = (opacity < 1.0);\r\n _material.uniforms.opacity.value = opacity;\r\n this.renderScreenQuad(_material);\r\n };\r\n}());\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuadFromTexWithDistortion = (function () {\r\n const _material = new ScreenQuadMaterial({\r\n uniforms: { coef: { type: 'f', value: 1.0 } },\r\n fragmentShader: fragmentScreenQuadFromTexWithDistortion,\r\n });\r\n\r\n return function (srcTex, coef) {\r\n _material.uniforms.srcTex.value = srcTex;\r\n _material.uniforms.coef.value = coef;\r\n this.renderScreenQuad(_material);\r\n };\r\n}());\r\n\r\n/**\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.PerspectiveCamera.prototype.setMinimalFov = function (angle) {\r\n if (this.aspect >= 1.0) {\r\n this.fov = angle;\r\n } else {\r\n this.fov = THREE.MathUtils.radToDeg(2 * Math.atan(Math.tan(THREE.MathUtils.degToRad(angle) * 0.5) / this.aspect));\r\n }\r\n};\r\n\r\n/**\r\n * @param {THREE.PerspectiveCamera} camera - Base camera for this stereo camera.\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.StereoCamera.prototype.updateHalfSized = function (camera, angle) {\r\n const originalAspect = camera.aspect;\r\n const originalFov = camera.fov;\r\n\r\n camera.aspect = originalAspect / 2.0;\r\n camera.setMinimalFov(angle);\r\n camera.updateProjectionMatrix();\r\n\r\n this.update(camera);\r\n\r\n camera.aspect = originalAspect;\r\n camera.fov = originalFov;\r\n camera.updateProjectionMatrix();\r\n};\r\n\r\n/**\r\n * @param {number} radius - Radius of bounding sphere in angstroms to fit on screen.\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.PerspectiveCamera.prototype.setDistanceToFit = function (radius, angle) {\r\n this.position.z = radius / Math.sin(0.5 * THREE.MathUtils.degToRad(angle));\r\n};\r\n\r\n/**\r\n * @param {RCGroup} gfxObj - All objects on scene.\r\n * @param {THREE.PerspectiveCamera} camera - Camera used for rendering.\r\n * @param {number} clipPlane - Distance to clip plane.\r\n * @param {number} fogFarPlane - Distance to fog far plane.\r\n */\r\nTHREE.Raycaster.prototype.intersectVisibleObject = function (gfxObj, camera, clipPlane, fogFarPlane) {\r\n const intersects = this.intersectObject(gfxObj, false);\r\n if (intersects.length === 0) {\r\n return null;\r\n }\r\n\r\n // find point closest to camera that doesn't get clipped by camera near plane or clipPlane (if it exists)\r\n const nearPlane = Math.min(camera.near, clipPlane);\r\n let i;\r\n let p = intersects[0];\r\n const v = new THREE.Vector3();\r\n for (i = 0; i < intersects.length; ++i) {\r\n p = intersects[i];\r\n v.copy(p.point);\r\n v.applyMatrix4(camera.matrixWorldInverse);\r\n if (v.z <= -nearPlane) {\r\n break;\r\n }\r\n }\r\n if (i === intersects.length) {\r\n return null;\r\n }\r\n\r\n // check that selected intersection point is not clipped by camera far plane or occluded by fog (if it exists)\r\n const farPlane = Math.min(camera.far, fogFarPlane);\r\n v.copy(p.point);\r\n v.applyMatrix4(camera.matrixWorldInverse);\r\n if (v.z <= -farPlane) {\r\n return null;\r\n }\r\n return p;\r\n};\r\n\r\nTHREE.Matrix4.prototype.extractScale = (function () {\r\n const _v = new THREE.Vector3();\r\n\r\n return function (scale) {\r\n if (scale === undefined) {\r\n logger.debug('extractScale(): new is too expensive operation to do it on-the-fly');\r\n scale = _v.clone();\r\n }\r\n\r\n const te = this.elements;\r\n scale.x = _v.set(te[0], te[1], te[2]).length();\r\n scale.y = _v.set(te[4], te[5], te[6]).length();\r\n scale.z = _v.set(te[8], te[9], te[10]).length();\r\n\r\n // if determine is negative, we need to invert one scale\r\n const det = this.determinant();\r\n if (det < 0) {\r\n scale.x = -scale.x;\r\n }\r\n return scale;\r\n };\r\n}());\r\n\r\nfunction _calcCylinderMatrix(posBegin, posEnd, radius) {\r\n const posCenter = posBegin.clone().lerp(posEnd, 0.5);\r\n const matScale = new THREE.Matrix4();\r\n matScale.makeScale(radius, posBegin.distanceTo(posEnd), radius);\r\n\r\n const matRotHalf = new THREE.Matrix4();\r\n matRotHalf.makeRotationX(Math.PI / 2);\r\n\r\n const matRotLook = new THREE.Matrix4();\r\n const vUp = new THREE.Vector3(0, 1, 0);\r\n matRotLook.lookAt(posCenter, posEnd, vUp);\r\n\r\n matRotLook.multiply(matRotHalf);\r\n matRotLook.multiply(matScale);\r\n matRotLook.setPosition(posCenter);\r\n return matRotLook;\r\n}\r\n\r\nfunction _calcChunkMatrix(eye, target, up, rad) {\r\n const matScale = new THREE.Matrix4();\r\n matScale.makeScale(rad.x, rad.y, 0);\r\n\r\n const matRotLook = new THREE.Matrix4();\r\n matRotLook.lookAt(eye, target, up);\r\n matRotLook.multiply(matScale);\r\n matRotLook.setPosition(eye);\r\n\r\n return matRotLook;\r\n}\r\n\r\nfunction _groupHasGeometryToRender(group) {\r\n let hasGeoms = false;\r\n group.traverse((node) => {\r\n if (node.hasOwnProperty('geometry') || node instanceof CSS2DObject) {\r\n hasGeoms = true;\r\n }\r\n });\r\n return hasGeoms;\r\n}\r\n\r\nfunction _buildDistorionMesh(widthSegments, heightSegements, coef) {\r\n // solve equation r_u = r_d * (1 + k * r_d^2)\r\n // for r_d using iterations\r\n // takes: r_u^2\r\n // returns: r_d / r_u factor that can be used to distort point coords\r\n function calcInverseBarrel(r2) {\r\n const epsilon = 1e-5;\r\n let prevR2 = 0.0;\r\n let curR2 = r2;\r\n let dr = 1.0;\r\n while (Math.abs(curR2 - prevR2) > epsilon) {\r\n dr = 1.0 + coef * curR2;\r\n prevR2 = curR2;\r\n curR2 = r2 / (dr * dr);\r\n }\r\n\r\n return 1.0 / dr;\r\n }\r\n\r\n const geo = new THREE.PlaneGeometry(2.0, 2.0, widthSegments, heightSegements);\r\n\r\n const pos = geo.getAttribute('position');\r\n for (let i = 0; i < pos.count; ++i) {\r\n const x = pos.array[3 * i];\r\n const y = pos.array[3 * i + 1];\r\n const c = calcInverseBarrel(x * x + y * y);\r\n pos.setXY(i, c * x, c * y);\r\n }\r\n\r\n return geo;\r\n}\r\n\r\nTHREE.BufferAttribute.prototype.copyAtList = function (attribute, indexList) {\r\n console.assert(\r\n this.itemSize === attribute.itemSize,\r\n 'DEBUG: BufferAttribute.copyAtList buffers have different item size.',\r\n );\r\n const { itemSize } = this;\r\n for (let i = 0, n = indexList.length; i < n; ++i) {\r\n for (let j = 0; j < itemSize; ++j) {\r\n this.array[i * itemSize + j] = attribute.array[indexList[i] * itemSize + j];\r\n }\r\n }\r\n return this;\r\n};\r\n\r\nfunction fillArray(array, value, startIndex, endIndex) {\r\n startIndex = (typeof startIndex !== 'undefined') ? startIndex : 0;\r\n endIndex = (typeof endIndex !== 'undefined') ? endIndex : array.length;\r\n for (let i = startIndex; i < endIndex; ++i) {\r\n array[i] = value;\r\n }\r\n}\r\n\r\n/** @param {THREE.Object3D} object - Parent object. */\r\nfunction removeChildren(object) {\r\n const { children } = object;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n child.parent = null;\r\n child.dispatchEvent({ type: 'removed' });\r\n }\r\n object.children = [];\r\n}\r\n\r\nfunction clearTree(object) {\r\n object.traverse((obj) => {\r\n if (obj instanceof THREE.Mesh || obj instanceof THREE.LineSegments || obj instanceof THREE.Line) {\r\n obj.geometry.dispose();\r\n }\r\n });\r\n removeChildren(object);\r\n}\r\n\r\nfunction destroyObject(object) {\r\n clearTree(object);\r\n if (object.parent) {\r\n object.parent.remove(object);\r\n } else {\r\n object.dispatchEvent({ type: 'removed' });\r\n }\r\n}\r\n\r\nfunction belongToSelectLayers(object) {\r\n for (let i = 0; i < SELECTION_LAYERS.length; i++) {\r\n if (((object.layers.mask >> SELECTION_LAYERS[i]) & 1) === 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction processObjRenderOrder(root, idMaterial) {\r\n // set renderOrder to 0 for Backdrop and to 1 in other cases to render Backdrop earlier all other materials\r\n const renderOrder = +(idMaterial !== 'BA');\r\n root.traverse((object) => {\r\n if (object.isGroup) {\r\n object.renderOrder = renderOrder;\r\n }\r\n });\r\n}\r\n\r\nfunction applySelectionMaterial(geo) {\r\n geo.traverse((node) => {\r\n if ('material' in node) {\r\n node.material = node.material.clone(true);\r\n // using z-offset to magically fix selection rendering artifact (on z-sprites)\r\n node.material.setValues({\r\n depthFunc: THREE.LessEqualDepth,\r\n overrideColor: true,\r\n fog: false,\r\n lights: false,\r\n shadowmap: false,\r\n });\r\n node.material.setUberOptions({ fixedColor: new THREE.Color(0xFFFF00), zOffset: -1e-6 });\r\n }\r\n });\r\n}\r\n\r\nfunction getMiddlePoint(point1, point2, optionalTarget) {\r\n const result = optionalTarget || new THREE.Vector3();\r\n\r\n result.set(0, 0, 0);\r\n result.addScaledVector(point1, 0.5);\r\n result.addScaledVector(point2, 0.5);\r\n\r\n return result;\r\n}\r\n\r\n// Monkey-patch for \"InstancedBufferGeometry.instanceCount becomes undefined after copy()\"\r\n// https://github.com/mrdoob/three.js/issues/22151\r\nconst _oldInstancedBufferGeometryCopy = THREE.InstancedBufferGeometry.prototype.copy;\r\n\r\nTHREE.InstancedBufferGeometry.prototype.copy = function (source) {\r\n _oldInstancedBufferGeometryCopy.call(this, source);\r\n if (this.instanceCount === undefined) {\r\n this.instanceCount = Infinity;\r\n }\r\n};\r\n\r\nexport default {\r\n calcCylinderMatrix: _calcCylinderMatrix,\r\n calcChunkMatrix: _calcChunkMatrix,\r\n groupHasGeometryToRender: _groupHasGeometryToRender,\r\n buildDistorionMesh: _buildDistorionMesh,\r\n RCGroup,\r\n fillArray,\r\n clearTree,\r\n destroyObject,\r\n belongToSelectLayers,\r\n processObjRenderOrder,\r\n applySelectionMaterial,\r\n getMiddlePoint,\r\n LAYERS,\r\n};\r\n","import * as THREE from 'three';\r\nimport gfxutils from './gfx/gfxutils';\r\n\r\nconst _defaultBoundaries = {\r\n boundingBox: new THREE.Box3(new THREE.Vector3(-1, -1, -1), new THREE.Vector3(1, 1, 1)),\r\n boundingSphere: new THREE.Sphere(new THREE.Vector3(0, 0, 0), 1),\r\n};\r\n\r\nclass Visual extends gfxutils.RCGroup {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this.name = name;\r\n this._dataSource = dataSource;\r\n }\r\n\r\n release() {\r\n if (this.parent) {\r\n this.parent.remove(this);\r\n }\r\n }\r\n\r\n getDataSource() {\r\n return this._dataSource;\r\n }\r\n\r\n getBoundaries() {\r\n return _defaultBoundaries;\r\n }\r\n}\r\n\r\nexport default Visual;\r\n","function _ensureArray(x) {\r\n if (x === null || x === undefined || Array.isArray(x)) {\r\n return x;\r\n }\r\n return [x];\r\n}\r\n\r\n/** An indexed list of objects or classes. */\r\nclass EntityList {\r\n /**\r\n * Create a list of objects.\r\n * The objects can be indexed by one or more properties for the later retrieval.\r\n *\r\n * @param {!Array=} entities A list of objects to automatically register at creation time.\r\n * @param {!Array=} indices A list of property names to use for case-insensitive indexing.\r\n * By default, a single `.id` property is used.\r\n * @see EntityList#register\r\n */\r\n constructor(entities = [], indices = ['id']) {\r\n this._list = [];\r\n this._dict = {};\r\n this._indices = [...indices];\r\n this._indices.forEach((index) => {\r\n this._dict[index] = {};\r\n });\r\n\r\n entities.forEach((entity) => this.register(entity));\r\n }\r\n\r\n /**\r\n * Add a value to the end of a list.\r\n * The list will contain only one copy of the value.\r\n *\r\n * @param {!Array} list An array.\r\n * @param {*} value A value to add.\r\n * @see EntityList.unregisterFromList\r\n * @see EntityList.registerInDict\r\n */\r\n static registerInList(list, value) {\r\n if (!list.includes(value)) {\r\n list.push(value);\r\n }\r\n }\r\n\r\n /**\r\n * Remove a value from a list if it is there.\r\n *\r\n * @param {!Array} list An array.\r\n * @param {*} value A value to remove.\r\n * @see EntityList.registerInList\r\n */\r\n static unregisterFromList(list, value) {\r\n const pos = list.indexOf(value);\r\n if (pos !== -1) {\r\n list.splice(pos, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Add a value to a dictionary.\r\n * The value may be stored under multiple different keys (aliases).\r\n * There might be multiples values stored under the same key.\r\n *\r\n * @param {!Object} dict A dictionary.\r\n * @param {!Array} keys An array of keys.\r\n * @param {*} value A value to add.\r\n * @see EntityList.unregisterFromDict\r\n * @see EntityList.registerInList\r\n */\r\n static registerInDict(dict, keys, value) {\r\n keys.forEach((key) => {\r\n key = key.toLowerCase();\r\n const list = dict[key] = dict[key] || [];\r\n if (!list.includes(value)) {\r\n list.push(value);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove a value from a dictionary.\r\n * The value may be stored under multiple different keys (aliases).\r\n * There might be multiples values stored under the same key.\r\n *\r\n * @param {!Object} dict A dictionary.\r\n * @param {!Array} keys An array of keys.\r\n * @param {*} value A value to add.\r\n * @see EntityList.registerInDict\r\n */\r\n static unregisterFromDict(dict, keys, value) {\r\n keys.forEach((key) => {\r\n key = key.toLowerCase();\r\n const list = dict[key];\r\n if (list) {\r\n const pos = list.indexOf(value);\r\n if (pos !== -1) {\r\n list.splice(pos, 1);\r\n }\r\n if (list.length === 0) {\r\n delete dict[key];\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Add an entity to this list.\r\n *\r\n * @param {!Object} entity An object or a class to register. The object must include all\r\n * properties specified as indices on construction.\r\n * @see EntityList#unregister\r\n */\r\n register(entity) {\r\n EntityList.registerInList(this._list, entity);\r\n this._indices.forEach((index) => {\r\n EntityList.registerInDict(this._dict[index], _ensureArray(entity[index]), entity);\r\n });\r\n }\r\n\r\n /**\r\n * Remove an entity from this list.\r\n *\r\n * @param {!Object} entity An object or a class to unregister. The object may be\r\n * missing from the list but it must include all properties specified as indices\r\n * on construction.\r\n * @see EntityList#register\r\n */\r\n unregister(entity) {\r\n EntityList.unregisterFromList(this._list, entity);\r\n this._indices.forEach((index) => {\r\n EntityList.unregisterFromDict(this._dict[index], _ensureArray(entity[index]), entity);\r\n });\r\n }\r\n\r\n /**\r\n * An ordered list of all registered entities.\r\n * It is a read-only copy, use {@link EntityList#register} and {@link EntityList#unregister}\r\n * to modify it.\r\n *\r\n * @type {!Array}\r\n */\r\n get all() {\r\n return [...this._list];\r\n }\r\n\r\n /**\r\n * The first registered entity.\r\n * Use it if you do not care which entity you are referring to.\r\n *\r\n * @type {Object=}\r\n */\r\n get first() {\r\n return this._list[0];\r\n }\r\n\r\n /**\r\n * Retrieve a list of keys for the index.\r\n *\r\n * @param {string=} index One of the indices specified during the list construction. If omitted,\r\n * the first of the indices is used.\r\n * @returns {!Array} An unordered list of keys in the index, i.e. particular property\r\n * values for all registered entities.\r\n */\r\n keys(index) {\r\n return Object.keys(this._dict[index || this._indices[0]]);\r\n }\r\n\r\n /**\r\n * Retrieve an entity by its key.\r\n *\r\n * @param {string} key A case-insensitive property value to look-up.\r\n * @param {string=} index One of the indices specified during the list construction. If omitted,\r\n * the first of the indices is used.\r\n * @returns {Object=} An object registered in the index under the key. If there are multiple\r\n * objects under the same key, the first one is returned.\r\n */\r\n get(key, index) {\r\n const dict = this._dict[index || this._indices[0]];\r\n if (dict) {\r\n const values = dict[key && key.toLowerCase()];\r\n return values && values.length > 0 ? values[0] : undefined;\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nexport default EntityList;\r\n","import settings from '../settings';\r\nimport logger from './logger';\r\n\r\nfunction makeContextDependent(prototype) {\r\n Object.defineProperties(prototype, {\r\n logger: {\r\n get() {\r\n return this.context && this.context.logger ? this.context.logger : logger;\r\n },\r\n },\r\n settings: {\r\n get() {\r\n return this.context && this.context.settings ? this.context.settings : settings;\r\n },\r\n },\r\n });\r\n}\r\n\r\nexport default makeContextDependent;\r\n","import * as THREE from 'three';\r\n\r\nclass CollisionSphere {\r\n constructor(position, radius) {\r\n this._position = position;\r\n this._radius = radius;\r\n }\r\n\r\n static _sphere = new THREE.Sphere();\r\n\r\n raycast(raycaster) {\r\n const sphere = CollisionSphere._sphere;\r\n sphere.set(this._position, this._radius);\r\n\r\n const p = new THREE.Vector3();\r\n if (raycaster.ray.intersectSphere(sphere, p)) {\r\n return {\r\n distance: raycaster.ray.origin.distanceTo(p),\r\n point: p,\r\n };\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nconst SphereCollisionGeo = (base) => class extends base {\r\n constructor(count, ...args) {\r\n super(...args);\r\n this._objects = new Array(count);\r\n this.boundingSphere = null;\r\n this.boundingBox = null;\r\n }\r\n\r\n setSphere(idx, position, radius) {\r\n this._objects[idx] = new CollisionSphere(position, radius);\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n // TODO raycast with bounding sphere? How to deal with updates?\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const inters = this._objects[i].raycast(raycaster);\r\n if (inters) {\r\n inters.chunkIdx = i;\r\n intersects.push(inters);\r\n }\r\n }\r\n }\r\n\r\n computeBoundingBox() {\r\n const objects = this._objects;\r\n let { boundingBox } = this;\r\n if (boundingBox === null) {\r\n this.boundingBox = boundingBox = new THREE.Box3();\r\n }\r\n boundingBox.makeEmpty();\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n boundingBox.expandByPoint(objects[i]._position);\r\n }\r\n }\r\n\r\n computeBoundingSphere() {\r\n this.computeBoundingBox();\r\n const objects = this._objects;\r\n const { boundingBox } = this;\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n const pos = objects[i]._position;\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n if (this.boundingSphere === null) {\r\n this.boundingSphere = new THREE.Sphere();\r\n }\r\n this.boundingSphere.set(center, Math.sqrt(radiusSquared));\r\n }\r\n};\r\nexport default SphereCollisionGeo;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst tmpColor = new THREE.Color();\r\n\r\nconst OFFSET_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst { copySubArrays } = utils;\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\nclass InstancedSpheresGeometry extends SphereCollisionGeo(THREE.InstancedBufferGeometry) {\r\n constructor(spheresCount, sphereComplexity, useZSprites) {\r\n super(spheresCount);\r\n this._sphGeometry = useZSprites ? new THREE.PlaneGeometry(2, 2, 1, 1)\r\n : new THREE.SphereBufferGeometry(1, sphereComplexity * 2, sphereComplexity, 0, Math.PI * 2, 0, Math.PI);\r\n this._init(spheresCount, this._sphGeometry);\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n setArrayXYZW(this._offsets, itemIdx * OFFSET_SIZE, itemPos.x, itemPos.y, itemPos.z, itemRad);\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n }\r\n\r\n setColor(itemIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n setArrayXYZ(this._colors, itemIdx * COLOR_SIZE, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('offset').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n alphaArr[chunkIndices[i]] = value;\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const geom = new THREE.InstancedBufferGeometry();\r\n this._init.call(geom, instanceCount, this._sphGeometry);\r\n\r\n copySubArrays(this._offsets, geom._offsets, chunkIndices, OFFSET_SIZE);\r\n copySubArrays(this._colors, geom._colors, chunkIndices, COLOR_SIZE);\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n _init(spheresCount, sphereGeo) {\r\n this.copy(sphereGeo);\r\n\r\n this._offsets = utils.allocateTyped(Float32Array, spheresCount * OFFSET_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, spheresCount * COLOR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, spheresCount);\r\n _.fill(alpha, 1.0);\r\n\r\n this.setAttribute('offset', new THREE.InstancedBufferAttribute(this._offsets, OFFSET_SIZE, false, 1));\r\n this.setAttribute('color', new THREE.InstancedBufferAttribute(this._colors, COLOR_SIZE, false, 1));\r\n this.setAttribute('alphaColor', new THREE.InstancedBufferAttribute(alpha, 1, false, 1));\r\n }\r\n}\r\nexport default InstancedSpheresGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_IDC_16BIT = 65535;\r\nconst VEC_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\n\r\n/**\r\n * This class represents geometry which consists of separate chunks.\r\n * Each chunk has same index and similar geometry with equal points and faces count.\r\n * Each chunk has by default only one color.\r\n * @constructor\r\n */\r\n\r\nclass ChunkedObjectsGeometry extends THREE.BufferGeometry {\r\n constructor(chunkGeo, chunksCount) {\r\n super();\r\n\r\n if (this.constructor === ChunkedObjectsGeometry) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n\r\n this._chunkGeo = chunkGeo;\r\n\r\n this._init(chunkGeo, chunksCount);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('position').needsUpdate = true;\r\n this.getAttribute('normal').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n const colors = this._colors;\r\n const chunkSize = this._chunkSize;\r\n for (let i = chunkIdx * chunkSize, end = i + chunkSize; i < end; ++i) {\r\n const idx = i * VEC_SIZE;\r\n colors[idx] = tmpColor.r;\r\n colors[idx + 1] = tmpColor.g;\r\n colors[idx + 2] = tmpColor.b;\r\n }\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n const chunkSize = this._chunkSize;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const left = chunkIndices[i] * chunkSize;\r\n _.fill(alphaArr, value, left, left + chunkSize);\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const inters = [];\r\n // use THREE.Mesh raycasting interface for the Geometry. The Mesh is\r\n // created with existed geometry and default material, so it doesn't slowdown.\r\n const mesh = new THREE.Mesh();\r\n mesh.geometry = this;\r\n mesh.raycast(raycaster, inters);\r\n\r\n const facesPerChunk = this._chunkGeo.index.count / 3;\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('faceIndex')) {\r\n continue;\r\n }\r\n inters[i].chunkIdx = Math.floor(inters[i].faceIndex / facesPerChunk);\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const geom = new THREE.BufferGeometry();\r\n this._init.call(geom, this._chunkGeo, instanceCount);\r\n\r\n const srcPos = this._positions;\r\n const srcNorm = this._normals;\r\n const srcColor = this._colors;\r\n\r\n const dstPos = geom._positions;\r\n const dstNorm = geom._normals;\r\n const dstColor = geom._colors;\r\n\r\n const chunkSize = this._chunkSize * VEC_SIZE;\r\n\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const dstPtOffset = i * chunkSize;\r\n const ptIdxBegin = chunkIndices[i] * chunkSize;\r\n const ptIdxEnd = ptIdxBegin + chunkSize;\r\n dstPos.set(srcPos.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n dstNorm.set(srcNorm.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n dstColor.set(srcColor.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n }\r\n\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n _init(chunkGeo, chunksCount) {\r\n const chunkSize = this._chunkSize = chunkGeo.attributes.position.count;\r\n const chunkIndex = chunkGeo.index.array;\r\n const chunkIndexSize = chunkIndex.length;\r\n const pointsCount = this._chunkSize * chunksCount;\r\n const use32bitIndex = pointsCount > MAX_IDC_16BIT;\r\n const indexSize = chunkIndexSize * chunksCount;\r\n const index = this._index = utils.allocateTyped(use32bitIndex ? Uint32Array : Uint16Array, indexSize);\r\n this._positions = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n this._normals = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, pointsCount);\r\n _.fill(alpha, 1.0);\r\n\r\n for (let i = 0; i < chunksCount; ++i) {\r\n const offset = i * chunkIndexSize;\r\n const posOffset = i * chunkSize;\r\n index.set(chunkIndex, offset);\r\n for (let j = 0; j < chunkIndexSize; ++j) {\r\n index[offset + j] += posOffset;\r\n }\r\n }\r\n\r\n this.setIndex(new THREE.BufferAttribute(this._index, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(this._positions, VEC_SIZE));\r\n this.setAttribute('normal', new THREE.BufferAttribute(this._normals, VEC_SIZE));\r\n this.setAttribute('color', new THREE.BufferAttribute(this._colors, VEC_SIZE));\r\n this.setAttribute('alphaColor', new THREE.BufferAttribute(alpha, 1));\r\n }\r\n}\r\nexport default ChunkedObjectsGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst VEC_SIZE = 3;\r\n\r\nclass SimpleSpheresGeometry extends SphereCollisionGeo(ChunkedObjectsGeometry) {\r\n constructor(spheresCount, sphereComplexity) {\r\n const sphGeometry = new THREE.SphereBufferGeometry(\r\n 1,\r\n sphereComplexity * 2,\r\n sphereComplexity,\r\n 0,\r\n Math.PI * 2,\r\n 0,\r\n Math.PI,\r\n );\r\n super(spheresCount, sphGeometry, spheresCount);\r\n\r\n const normals = this._normals;\r\n const geoNormals = sphGeometry.attributes.normal.array;\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._tmpPositions = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n for (let i = 0; i < spheresCount; ++i) {\r\n normals.set(geoNormals, chunkSize * VEC_SIZE * i);\r\n }\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n const tmpPos = this._tmpPositions;\r\n const chunkSize = this._chunkSize;\r\n const geoPos = this._chunkPos;\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n const idx = i * 3;\r\n tmpPos[idx] = itemPos.x + geoPos[idx] * itemRad;\r\n tmpPos[idx + 1] = itemPos.y + geoPos[idx + 1] * itemRad;\r\n tmpPos[idx + 2] = itemPos.z + geoPos[idx + 2] * itemRad;\r\n }\r\n\r\n this._positions.set(tmpPos, chunkSize * itemIdx * VEC_SIZE);\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n }\r\n}\r\nexport default SimpleSpheresGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst centerPos = new THREE.Vector3();\r\nconst tmpVector = new THREE.Vector3();\r\nconst normMtx = new THREE.Matrix3();\r\n\r\nclass Simple2CCylindersGeometry extends ChunkedObjectsGeometry {\r\n constructor(instanceCount, polyComplexity) {\r\n const cylGeometry = new THREE.CylinderGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, true);\r\n super(cylGeometry, 2 * instanceCount);\r\n\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._chunkNorms = this._chunkGeo.attributes.normal.array;\r\n this._tmpVector = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const chunkSize = this._chunkSize;\r\n const firstOffset = chunkSize * 2 * itemIdx * VEC_SIZE;\r\n const secondOffset = firstOffset + chunkSize * VEC_SIZE;\r\n\r\n const tmpArray = this._tmpVector;\r\n const geoPos = this._chunkPos;\r\n const geoNorm = this._chunkNorms;\r\n\r\n centerPos.lerpVectors(botPos, topPos, 0.5);\r\n const mtx1 = gfxutils.calcCylinderMatrix(botPos, centerPos, itemRad);\r\n normMtx.getNormalMatrix(mtx1);\r\n\r\n let idx;\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoPos, idx);\r\n tmpVector.applyMatrix4(mtx1);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._positions.set(tmpArray, firstOffset);\r\n\r\n // now shift center to get another part of the cylinder\r\n centerPos.sub(botPos);\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpArray[idx] += centerPos.x;\r\n tmpArray[idx + 1] += centerPos.y;\r\n tmpArray[idx + 2] += centerPos.z;\r\n }\r\n this._positions.set(tmpArray, secondOffset);\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoNorm, idx);\r\n tmpVector.applyMatrix3(normMtx);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._normals.set(tmpArray, firstOffset);\r\n this._normals.set(tmpArray, secondOffset);\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const first = 2 * itemIdx;\r\n super.setColor(first, colorVal1);\r\n\r\n const second = first + 1;\r\n super.setColor(second, colorVal2);\r\n }\r\n}\r\n\r\nexport default Simple2CCylindersGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_POINTS_COUNT_16BIT = 65536;\r\nconst PTS_PER_TRIANGLE = 3;\r\n\r\nclass CylinderBufferGeometry extends THREE.BufferGeometry {\r\n constructor(\r\n radiusTop,\r\n radiusBottom,\r\n height,\r\n radialSegments,\r\n heightSegments,\r\n openEnded,\r\n ) {\r\n super();\r\n\r\n const thetaStart = 0;\r\n const thetaLength = 2 * Math.PI;\r\n\r\n this.type = 'CylinderBufferGeometry';\r\n\r\n this.parameters = {\r\n radiusTop,\r\n radiusBottom,\r\n height,\r\n radialSegments,\r\n heightSegments,\r\n openEnded,\r\n };\r\n\r\n const hasTop = openEnded === false && radiusTop > 0;\r\n const hasBottom = openEnded === false && radiusBottom > 0;\r\n const vertexCount = (heightSegments + 1) * radialSegments\r\n + hasTop * (radialSegments + 1)\r\n + hasBottom * (radialSegments + 1);\r\n const facesCount = (2 * heightSegments + hasTop + hasBottom) * radialSegments;\r\n\r\n const heightHalf = height / 2;\r\n\r\n /* eslint-disable no-magic-numbers */\r\n const positions = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3);\r\n const normals = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3);\r\n const indices = new THREE.Uint16BufferAttribute(utils.allocateTyped(Uint16Array, facesCount * PTS_PER_TRIANGLE), 1);\r\n /* eslint-enable no-magic-numbers */\r\n\r\n const uvs = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 2), 2);\r\n console.assert(vertexCount < MAX_POINTS_COUNT_16BIT, 'DEBUG: Cylinder Geometry has too many vertices (65536 max).');\r\n\r\n let currVtxIdx = 0;\r\n let currFaceIdx = 0;\r\n const tanTheta = -(radiusBottom - radiusTop) / height;\r\n\r\n // setup cylinder data\r\n for (let y = 0; y <= heightSegments; y++) {\r\n // faces\r\n if (y !== heightSegments) {\r\n for (let i = 0; i < radialSegments; i++) {\r\n const v1 = currVtxIdx + i;\r\n const v2 = currVtxIdx + radialSegments + i;\r\n const v3 = currVtxIdx + radialSegments + ((i + 1) % radialSegments);\r\n const v4 = currVtxIdx + ((i + 1) % radialSegments);\r\n\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, v1, v4, v2);\r\n currFaceIdx++;\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, v2, v4, v3);\r\n currFaceIdx++;\r\n }\r\n }\r\n\r\n // vertices\r\n const v = y / heightSegments;\r\n const radius = v * (radiusBottom - radiusTop) + radiusTop;\r\n\r\n for (let x = 0; x < radialSegments; x++) {\r\n const u = x / radialSegments;\r\n\r\n const vx = radius * Math.sin(u * thetaLength + thetaStart);\r\n const vy = v * height - heightHalf;\r\n const vz = radius * Math.cos(u * thetaLength + thetaStart);\r\n\r\n const normal = new THREE.Vector3(\r\n vx,\r\n Math.sqrt(vx * vx + vz * vz) * tanTheta,\r\n vz,\r\n ).normalize();\r\n\r\n positions.setXYZ(currVtxIdx, vx, vy, vz);\r\n normals.setXYZ(currVtxIdx, normal.x, normal.y, normal.z);\r\n uvs.setXY(currVtxIdx, u, v);\r\n ++currVtxIdx;\r\n }\r\n }\r\n\r\n // top cap\r\n if (hasTop) {\r\n const startTIdx = currVtxIdx;\r\n const lastIdx = currVtxIdx + radialSegments;\r\n for (let fTIdx = 0; fTIdx < radialSegments; ++fTIdx) {\r\n const currSrcIdx = currVtxIdx - radialSegments;\r\n positions.setXYZ(\r\n currVtxIdx,\r\n positions.getX(currSrcIdx),\r\n positions.getY(currSrcIdx),\r\n positions.getZ(currSrcIdx),\r\n );\r\n normals.setXYZ(currVtxIdx, 0, 1, 0);\r\n uvs.setXY(currVtxIdx, 1, 1);\r\n\r\n const nextTVtx = startTIdx + ((fTIdx + 1) % radialSegments);\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, currVtxIdx, nextTVtx, lastIdx);\r\n currFaceIdx++;\r\n currVtxIdx++;\r\n }\r\n\r\n positions.setXYZ(currVtxIdx, 0, heightHalf, 0);\r\n normals.setXYZ(currVtxIdx, 0, 1, 0);\r\n uvs.setXY(currVtxIdx, 1, 1);\r\n ++currVtxIdx;\r\n }\r\n\r\n // bottom cap\r\n if (hasBottom) {\r\n const startBIdx = currVtxIdx;\r\n const lastBIdx = currVtxIdx + radialSegments;\r\n for (let fBIdx = 0; fBIdx < radialSegments; ++fBIdx) {\r\n const currSrcBIdx = fBIdx;\r\n positions.setXYZ(\r\n currVtxIdx,\r\n positions.getX(currSrcBIdx),\r\n positions.getY(currSrcBIdx),\r\n positions.getZ(currSrcBIdx),\r\n );\r\n normals.setXYZ(currVtxIdx, 0, -1, 0);\r\n uvs.setXY(currVtxIdx, 0, 0);\r\n\r\n const nextBVtx = startBIdx + ((fBIdx + 1) % radialSegments);\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, nextBVtx, currVtxIdx, lastBIdx);\r\n currFaceIdx++;\r\n currVtxIdx++;\r\n }\r\n\r\n positions.setXYZ(currVtxIdx, 0, -heightHalf, 0);\r\n normals.setXYZ(currVtxIdx, 0, -1, 0);\r\n uvs.setXY(currVtxIdx, 0, 0);\r\n }\r\n\r\n this.setIndex(indices);\r\n this.setAttribute('position', positions);\r\n this.setAttribute('normal', normals);\r\n this.setAttribute('uv', uvs);\r\n }\r\n\r\n clone() {\r\n const { parameters } = this;\r\n\r\n return new CylinderBufferGeometry(\r\n parameters.radiusTop,\r\n parameters.radiusBottom,\r\n parameters.height,\r\n parameters.radialSegments,\r\n parameters.heightSegments,\r\n parameters.openEnded,\r\n );\r\n }\r\n}\r\n\r\nexport default CylinderBufferGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\nimport CylinderBufferGeometry from './CylinderBufferGeometry';\r\n\r\nconst tmpColor = new THREE.Color();\r\nconst invMatrix = new THREE.Matrix4();\r\n\r\nconst OFFSET_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst { copySubArrays } = utils;\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\n\r\nfunction sortNumber(a, b) {\r\n return a - b;\r\n}\r\n\r\nfunction _prepareCylinderInfo(chunkIndices) {\r\n chunkIndices.sort(sortNumber);\r\n const chunksIdx = [];\r\n const cylinderInfo = [];\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const val = chunkIndices[i];\r\n const even = (val | 0) % 2 === 0;\r\n const newPar = {\r\n first: false,\r\n second: false,\r\n };\r\n if (even) {\r\n newPar.first = true;\r\n newPar.second = i + 1 < n && chunkIndices[i + 1] === chunkIndices[i] + 1;\r\n if (newPar.second) {\r\n ++i;\r\n }\r\n } else {\r\n newPar.second = true;\r\n }\r\n chunksIdx.push(Math.floor(val / 2));\r\n cylinderInfo.push(newPar);\r\n }\r\n return { indices: chunksIdx, cylinderInfo };\r\n}\r\n\r\nfunction _assignOpacity(cylinderInfo, color1, color2) {\r\n for (let i = 0, n = cylinderInfo.length; i < n; ++i) {\r\n const info = cylinderInfo[i];\r\n if (!info.first) {\r\n color1[COLOR_SIZE * i] = -0.5;\r\n }\r\n if (!info.second) {\r\n color2[COLOR_SIZE * i] = -0.5;\r\n }\r\n }\r\n}\r\nclass Instanced2CCylindersGeometry extends THREE.InstancedBufferGeometry {\r\n constructor(instanceCount, polyComplexity, useZSprites, openEnded) {\r\n super();\r\n this._useZSprites = useZSprites;\r\n this._cylGeometry = useZSprites ? new THREE.PlaneGeometry(2, 2, 1, 1)\r\n : new CylinderBufferGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, openEnded);\r\n this._init(instanceCount, this._cylGeometry, this._useZSprites);\r\n\r\n this._collisionGeo = new Simple2CCylindersGeometry(instanceCount, 3);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const matrix = gfxutils.calcCylinderMatrix(botPos, topPos, itemRad);\r\n let me = matrix.elements;\r\n const mtxOffset = itemIdx * OFFSET_SIZE;\r\n\r\n this._collisionGeo.setItem(itemIdx, botPos, topPos, itemRad);\r\n setArrayXYZW(this._matVector1, mtxOffset, me[0], me[4], me[8], me[12]);\r\n setArrayXYZW(this._matVector2, mtxOffset, me[1], me[5], me[9], me[13]);\r\n setArrayXYZW(this._matVector3, mtxOffset, me[2], me[6], me[10], me[14]);\r\n\r\n if (this._useZSprites) {\r\n invMatrix.copy(matrix).invert();\r\n me = invMatrix.elements;\r\n setArrayXYZW(this._invmatVector1, mtxOffset, me[0], me[4], me[8], me[12]);\r\n setArrayXYZW(this._invmatVector2, mtxOffset, me[1], me[5], me[9], me[13]);\r\n setArrayXYZW(this._invmatVector3, mtxOffset, me[2], me[6], me[10], me[14]);\r\n }\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const colorIdx = itemIdx * COLOR_SIZE;\r\n tmpColor.set(colorVal1);\r\n setArrayXYZ(this._color1, colorIdx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n tmpColor.set(colorVal2);\r\n setArrayXYZ(this._color2, colorIdx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n computeBoundingSphere() {\r\n this._collisionGeo.computeBoundingSphere();\r\n this.boundingSphere = this._collisionGeo.boundingSphere;\r\n }\r\n\r\n computeBoundingBox() {\r\n this._collisionGeo.computeBoundingBox();\r\n this.boundingBox = this._collisionGeo.boundingBox;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('matVector1').needsUpdate = true;\r\n this.getAttribute('matVector2').needsUpdate = true;\r\n this.getAttribute('matVector3').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n this.getAttribute('color2').needsUpdate = true;\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n if (this._useZSprites) {\r\n this.getAttribute('invmatVector1').needsUpdate = true;\r\n this.getAttribute('invmatVector2').needsUpdate = true;\r\n this.getAttribute('invmatVector3').needsUpdate = true;\r\n }\r\n\r\n this._collisionGeo.finishUpdate();\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n alphaArr[Math.floor(chunkIndices[i] / 2)] = value;\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const info = _prepareCylinderInfo(chunkIndices);\r\n const cylinderIndices = info.indices;\r\n const instanceCount = cylinderIndices.length;\r\n const geom = new THREE.InstancedBufferGeometry();\r\n this._init.call(geom, instanceCount, this._cylGeometry, this._useZSprites);\r\n\r\n copySubArrays(this._matVector1, geom._matVector1, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._matVector2, geom._matVector2, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._matVector3, geom._matVector3, cylinderIndices, OFFSET_SIZE);\r\n\r\n if (this._useZSprites) {\r\n copySubArrays(this._invmatVector1, geom._invmatVector1, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._invmatVector2, geom._invmatVector2, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._invmatVector3, geom._invmatVector3, cylinderIndices, OFFSET_SIZE);\r\n }\r\n\r\n copySubArrays(this._color1, geom._color1, cylinderIndices, COLOR_SIZE);\r\n copySubArrays(this._color2, geom._color2, cylinderIndices, COLOR_SIZE);\r\n _assignOpacity(info.cylinderInfo, geom._color1, geom._color2);\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n getGeoParams() {\r\n return this._cylGeometry.parameters;\r\n }\r\n\r\n _init(instanceCount, cylinderGeo, useZSprites) {\r\n this.copy(cylinderGeo);\r\n this._matVector1 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._matVector2 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._matVector3 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._color1 = utils.allocateTyped(Float32Array, instanceCount * COLOR_SIZE);\r\n this._color2 = utils.allocateTyped(Float32Array, instanceCount * COLOR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, instanceCount);\r\n _.fill(alpha, 1.0);\r\n\r\n this.setAttribute('matVector1', new THREE.InstancedBufferAttribute(this._matVector1, OFFSET_SIZE, false, 1));\r\n this.setAttribute('matVector2', new THREE.InstancedBufferAttribute(this._matVector2, OFFSET_SIZE, false, 1));\r\n this.setAttribute('matVector3', new THREE.InstancedBufferAttribute(this._matVector3, OFFSET_SIZE, false, 1));\r\n this.setAttribute('color', new THREE.InstancedBufferAttribute(this._color1, COLOR_SIZE, false, 1));\r\n this.setAttribute('color2', new THREE.InstancedBufferAttribute(this._color2, COLOR_SIZE, false, 1));\r\n\r\n this.setAttribute('alphaColor', new THREE.InstancedBufferAttribute(this._alpha, 1, false, 1));\r\n\r\n if (useZSprites) {\r\n this._invmatVector1 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._invmatVector2 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._invmatVector3 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n\r\n this.setAttribute(\r\n 'invmatVector1',\r\n new THREE.InstancedBufferAttribute(this._invmatVector1, OFFSET_SIZE, false, 1),\r\n );\r\n this.setAttribute(\r\n 'invmatVector2',\r\n new THREE.InstancedBufferAttribute(this._invmatVector2, OFFSET_SIZE, false, 1),\r\n );\r\n this.setAttribute(\r\n 'invmatVector3',\r\n new THREE.InstancedBufferAttribute(this._invmatVector3, OFFSET_SIZE, false, 1),\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport default Instanced2CCylindersGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst TRI_SIZE = 3;\r\nconst tmpPrev = new THREE.Vector3();\r\nconst tmpNext = new THREE.Vector3();\r\nconst tmpRes = new THREE.Vector3();\r\nconst simpleNormal = new THREE.Vector3(1.0, 0.0, 0.0);\r\nconst normalOnCut = new THREE.Vector3();\r\nconst nearRingPt = new THREE.Vector3();\r\n\r\nfunction _createExtrudedChunkGeometry(shape, ringsCount) {\r\n const geo = new THREE.BufferGeometry();\r\n const ptsCount = shape.length;\r\n const totalPts = ptsCount * ringsCount;\r\n const type = totalPts <= 65536 ? Uint16Array : Uint32Array;\r\n const facesPerChunk = (ringsCount - 1) * ptsCount * 2;\r\n const indices = new THREE.BufferAttribute(utils.allocateTyped(type, facesPerChunk * TRI_SIZE), 1);\r\n\r\n let currVtxIdx = 0;\r\n let currFaceIdx = 0;\r\n for (let y = 0; y < ringsCount; y++) {\r\n // faces\r\n if (y !== ringsCount - 1) {\r\n for (let i = 0; i < ptsCount; i++) {\r\n const v1 = currVtxIdx + i;\r\n const v2 = currVtxIdx + ptsCount + i;\r\n const v3 = currVtxIdx + ptsCount + ((i + 1) % ptsCount);\r\n const v4 = currVtxIdx + ((i + 1) % ptsCount);\r\n\r\n indices.setXYZ(currFaceIdx * TRI_SIZE, v1, v4, v2);\r\n currFaceIdx++;\r\n indices.setXYZ(currFaceIdx * TRI_SIZE, v2, v4, v3);\r\n currFaceIdx++;\r\n }\r\n }\r\n\r\n currVtxIdx += ptsCount;\r\n }\r\n\r\n geo.setIndex(indices);\r\n const pos = utils.allocateTyped(Float32Array, totalPts * VEC_SIZE);\r\n geo.setAttribute('position', new THREE.BufferAttribute(pos, VEC_SIZE));\r\n\r\n geo._positions = shape;\r\n\r\n return geo;\r\n}\r\n\r\nclass ExtrudedObjectsGeometry extends ChunkedObjectsGeometry {\r\n constructor(shape, ringsCount, chunksCount) {\r\n const chunkGeo = _createExtrudedChunkGeometry(shape, ringsCount);\r\n super(chunkGeo, chunksCount);\r\n this._ringsCount = ringsCount;\r\n\r\n const tmpShape = this._tmpShape = [];\r\n for (let i = 0; i < shape.length; ++i) {\r\n tmpShape[i] = new THREE.Vector3();\r\n }\r\n }\r\n\r\n setItem(itemIdx, matrices, hasSlope = false, hasCut = false) {\r\n const ptsCount = this._chunkGeo._positions.length;\r\n const ringsCount = this._ringsCount;\r\n const chunkStartIdx = ptsCount * this._ringsCount * itemIdx * VEC_SIZE;\r\n\r\n this._setPoints(matrices, ptsCount, ringsCount, chunkStartIdx);\r\n\r\n if (hasSlope) {\r\n this._setSlopeNormals(ptsCount, ringsCount, chunkStartIdx);\r\n } else {\r\n this._setBaseNormals(ptsCount, ringsCount, chunkStartIdx);\r\n }\r\n\r\n if (hasCut) {\r\n this._addCut(ptsCount, ringsCount, chunkStartIdx);\r\n }\r\n }\r\n\r\n _setPoints(matrices, ptsCount, ringsCount, chunkStartIdx) {\r\n const tmpShape = this._tmpShape;\r\n const positions = this._positions;\r\n const shape = this._chunkGeo._positions;\r\n\r\n for (let i = 0, vtxIdx = chunkStartIdx; i < ringsCount; ++i) {\r\n const mtx = matrices[i];\r\n\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpShape[j].copy(shape[j]).applyMatrix4(mtx).toArray(positions, vtxIdx);\r\n }\r\n }\r\n }\r\n\r\n _setBaseNormals(ptsCount, ringsCount, chunkStartIdx) {\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n for (let i = 0, vtxIdx = chunkStartIdx; i < ringsCount; ++i, vtxIdx += nPtsInRing) {\r\n this._countNormalsInRing(ptsCount, vtxIdx, false);\r\n }\r\n }\r\n\r\n _setSlopeNormals(ptsCount, ringsCount, chunkStartIdx) {\r\n const normals = this._normals;\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n let vtxIdx = chunkStartIdx;\r\n // First ring\r\n // In all cases, besides cut, second ring is coincident to first. So values of first ring's normals doesn't\r\n // matter (In the cut case special handler will be applied later and will set them to correct values)\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n simpleNormal.toArray(normals, vtxIdx);\r\n }\r\n // second ring\r\n // If it isn't first Item we take normals' values from the last ring of the previous item (these rings are coincident)\r\n // else we count normals' values based on next ring information\r\n if (vtxIdx - 2 * nPtsInRing > 0) {\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpRes.fromArray(normals, vtxIdx - 2 * nPtsInRing).toArray(normals, vtxIdx);\r\n }\r\n } else {\r\n this._countNormalsInRing(ptsCount, vtxIdx, true, +nPtsInRing);\r\n vtxIdx += nPtsInRing;\r\n }\r\n // other rings\r\n // we count normals' values based on previous ring information\r\n for (let i = 2; i < ringsCount; ++i, vtxIdx += nPtsInRing) {\r\n this._countNormalsInRing(ptsCount, vtxIdx, true, -nPtsInRing);\r\n }\r\n }\r\n\r\n // Counting normals:\r\n // - Slope\r\n // Radius changes throught part => normals aren't parallel with the plane contains section points\r\n // normal = vTangentInSectionPlane x vToSuchPointInPrevSection (all vectors are scaled for being 1 in length)\r\n // - No slope\r\n // Radius doesn't change throught part => normals are parallel with the plane contains section points\r\n // normal = vToPrevPointInSection + vToNextPointInSection (all vectors are scaled for being 1 in length)\r\n _countNormalsInRing(ptsCount, vtxIdx, isSlope, shiftToExtraPt) {\r\n const tmpShape = this._tmpShape;\r\n const normals = this._normals;\r\n\r\n tmpShape[0].fromArray(this._positions, vtxIdx);\r\n tmpShape[ptsCount - 1].fromArray(this._positions, vtxIdx + (ptsCount - 1) * VEC_SIZE);\r\n\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n if (j < ptsCount - 1) {\r\n tmpShape[j + 1].fromArray(this._positions, vtxIdx + VEC_SIZE);\r\n }\r\n\r\n if (isSlope) {\r\n nearRingPt.fromArray(this._positions, vtxIdx + shiftToExtraPt);\r\n\r\n tmpPrev.subVectors(tmpShape[(j + ptsCount - 1) % ptsCount], tmpShape[(j + 1) % ptsCount]).normalize();\r\n tmpNext.subVectors(tmpShape[j], nearRingPt).normalize();\r\n tmpRes.crossVectors(tmpNext, tmpPrev).normalize().toArray(normals, vtxIdx);\r\n } else {\r\n tmpPrev.subVectors(tmpShape[j], tmpShape[(j + ptsCount - 1) % ptsCount]).normalize();\r\n tmpNext.subVectors(tmpShape[j], tmpShape[(j + 1) % ptsCount]).normalize();\r\n tmpRes.addVectors(tmpPrev, tmpNext).normalize().toArray(normals, vtxIdx);\r\n }\r\n }\r\n }\r\n\r\n _addCut(ptsCount, ringsCount, chunkStartIdx) {\r\n // Nothing to do if item is flat or only line\r\n if (ptsCount < 3 || ringsCount < 2) {\r\n return;\r\n }\r\n const positions = this._positions;\r\n const normals = this._normals;\r\n const tmpShape = this._tmpShape;\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n // Normal to the cut plane is equal to cross product of two vectors which are lying in it\r\n tmpShape[0].fromArray(positions, chunkStartIdx);\r\n tmpShape[1].fromArray(positions, chunkStartIdx + VEC_SIZE);\r\n tmpShape[2].fromArray(positions, chunkStartIdx + 2 * VEC_SIZE);\r\n\r\n tmpPrev.subVectors(tmpShape[1], tmpShape[0]).normalize();\r\n tmpNext.subVectors(tmpShape[1], tmpShape[2]).normalize();\r\n normalOnCut.crossVectors(tmpPrev, tmpNext).normalize();\r\n\r\n let vtxIdx = chunkStartIdx;\r\n // First and second rings normals' values are equal to value of normal to the cutting plane\r\n for (let j = 0; j < ptsCount * 2; ++j, vtxIdx += VEC_SIZE) {\r\n normalOnCut.toArray(normals, vtxIdx);\r\n }\r\n if (ringsCount > 2) {\r\n // Third ring points are coincident to first ring points, but have different normals. It makes sharp angle near cut\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpRes.fromArray(positions, vtxIdx - nPtsInRing).toArray(positions, vtxIdx);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default ExtrudedObjectsGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_IDC_16BIT = 65535;\r\nconst VERTEX_PER_SEGMENT = 4;\r\nconst POS_SIZE = 4;\r\nconst DIR_SIZE = 3;\r\nconst COL_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\nconst direction = new THREE.Vector3();\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\n\r\nfunction getSubset(arr, startSegmentIdx, segmentsCount, elemSize) {\r\n const start = startSegmentIdx * VERTEX_PER_SEGMENT;\r\n const end = start + segmentsCount * VERTEX_PER_SEGMENT;\r\n return arr.subarray(start * elemSize, end * elemSize);\r\n}\r\n\r\n/**\r\n * This class represents lines geometry which consists of screen-aligned narrow quad of variable width.\r\n *\r\n * @constructor\r\n *\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n * collision geometry.\r\n */\r\n\r\nclass ThickLinesGeometry extends THREE.BufferGeometry {\r\n constructor(segmentsCount) {\r\n super();\r\n this._initVertices(segmentsCount);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('position').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n this.getAttribute('direction').needsUpdate = true;\r\n }\r\n\r\n setColor(segmentIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n let idx = segmentIdx * VERTEX_PER_SEGMENT * COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n setSegment(segmentIdx, pos1, pos2) {\r\n direction.subVectors(pos1, pos2);\r\n direction.normalize();\r\n const positions = this._positions;\r\n const directions = this._directions;\r\n let idx = segmentIdx * VERTEX_PER_SEGMENT * POS_SIZE;\r\n let dirIdx = segmentIdx * VERTEX_PER_SEGMENT * DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos1.x, pos1.y, pos1.z, 0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos1.x, pos1.y, pos1.z, -0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos2.x, pos2.y, pos2.z, 0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos2.x, pos2.y, pos2.z, -0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n }\r\n\r\n setOpacity(startSegIdx, endSegIdx, value) {\r\n const start = startSegIdx * VERTEX_PER_SEGMENT;\r\n const end = endSegIdx * VERTEX_PER_SEGMENT;\r\n _.fill(this.alpha, value, end, start);\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubsetSegments(startSegmentIdx, segmentsCount) {\r\n return [\r\n getSubset(this._positions, startSegmentIdx, segmentsCount, POS_SIZE),\r\n getSubset(this._directions, startSegmentIdx, segmentsCount, DIR_SIZE),\r\n ];\r\n }\r\n\r\n getSubsetColors(startSegmentIdx, segmentsCount) {\r\n return getSubset(this._colors, startSegmentIdx, segmentsCount, COL_SIZE);\r\n }\r\n\r\n getSubsetOpacities(startSegmentIdx, segmentsCount) {\r\n return getSubset(this._alpha, startSegmentIdx, segmentsCount, 1);\r\n }\r\n\r\n getNumVertexPerSegment() {\r\n return VERTEX_PER_SEGMENT;\r\n }\r\n\r\n getPositionSize() {\r\n return POS_SIZE;\r\n }\r\n\r\n setSegments(startSegmentIdx, positions) {\r\n const startPos = startSegmentIdx * VERTEX_PER_SEGMENT * POS_SIZE;\r\n if (positions instanceof Array && positions.length === 2) {\r\n this._positions.set(positions[0], startPos);\r\n const startDir = startSegmentIdx * VERTEX_PER_SEGMENT * DIR_SIZE;\r\n this._directions.set(positions[1], startDir); // dirs are geo part of vertex\r\n } else {\r\n this._positions.set(positions, startPos);\r\n }\r\n }\r\n\r\n setColors(startSegmentIdx, colors) {\r\n const start = startSegmentIdx * VERTEX_PER_SEGMENT * COL_SIZE;\r\n this._colors.set(colors, start);\r\n }\r\n\r\n _initVertices(segmentsCount) {\r\n this._buffersSize = segmentsCount * VERTEX_PER_SEGMENT;\r\n const pointsCount = this._buffersSize;\r\n const use32bitIndex = pointsCount > MAX_IDC_16BIT;\r\n this._index = utils.allocateTyped(use32bitIndex ? Uint32Array : Uint16Array, segmentsCount * 6);\r\n this._positions = utils.allocateTyped(Float32Array, pointsCount * POS_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, pointsCount * COL_SIZE);\r\n this._directions = utils.allocateTyped(Float32Array, pointsCount * DIR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, pointsCount);\r\n _.fill(alpha, 1.0);\r\n\r\n const index = this._index;\r\n let indexOffset = 0;\r\n let pointOffset = 0;\r\n for (let j = 0; j < segmentsCount; j++, indexOffset += 6, pointOffset += VERTEX_PER_SEGMENT) {\r\n index[indexOffset] = pointOffset;\r\n index[indexOffset + 1] = pointOffset + 1;\r\n index[indexOffset + 2] = pointOffset + 3;\r\n index[indexOffset + 3] = pointOffset;\r\n index[indexOffset + 4] = pointOffset + 2;\r\n index[indexOffset + 5] = pointOffset + 3;\r\n }\r\n this.setIndex(new THREE.BufferAttribute(this._index, 1));\r\n\r\n this.setAttribute('position', new THREE.BufferAttribute(this._positions, POS_SIZE));\r\n this.setAttribute('color', new THREE.BufferAttribute(this._colors, COL_SIZE));\r\n this.setAttribute('alphaColor', new THREE.BufferAttribute(alpha, 1));\r\n this.setAttribute('direction', new THREE.BufferAttribute(this._directions, DIR_SIZE));\r\n }\r\n}\r\n\r\nexport default ThickLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport BaseLinesGeometry from './ThickLinesGeometry';\r\n\r\n/**\r\n * This class represents geometry which consists lines. This can build bounding volumes\r\n * @constructor\r\n *\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n */\r\nclass LinesGeometry extends BaseLinesGeometry {\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n computeBoundingSphere() {\r\n const { boundingBox } = this;\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n if (boundingBox) {\r\n boundingBox.getCenter(center);\r\n }\r\n const positions = this._positions;\r\n const sphere = this.boundingSphere || new THREE.Sphere();\r\n const size = this._positions.length;\r\n const pos = new THREE.Vector3();\r\n const posSize = this.getPositionSize();\r\n for (let i = 0; i < size; i += posSize) {\r\n pos.set(positions[i], positions[i + 1], positions[i + 2]);\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n sphere.set(center, Math.sqrt(radiusSquared));\r\n this.boundingSphere = sphere;\r\n }\r\n\r\n computeBoundingBox() {\r\n const positions = this._positions;\r\n const box = new THREE.Box3();\r\n const size = this._positions.length;\r\n const tmpVec = new THREE.Vector3();\r\n const posSize = this.getPositionSize();\r\n for (let i = 0; i < size; i += posSize) {\r\n tmpVec.set(positions[i], positions[i + 1], positions[i + 2]);\r\n box.expandByPoint(tmpVec);\r\n }\r\n this.boundingBox = box;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n}\r\n\r\nexport default LinesGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst tmpVector = new THREE.Vector3();\r\nconst normMtx = new THREE.Matrix3();\r\n\r\nclass CylinderCollisionGeo extends ChunkedObjectsGeometry {\r\n constructor(instanceCount, polyComplexity) {\r\n const cylGeometry = new THREE.CylinderGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, true);\r\n super(cylGeometry, instanceCount);\r\n\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._chunkNorms = this._chunkGeo.attributes.normal.array;\r\n this._tmpVector = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const chunkSize = this._chunkSize;\r\n const itemOffset = chunkSize * itemIdx * VEC_SIZE;\r\n\r\n const tmpArray = this._tmpVector;\r\n const geoPos = this._chunkPos;\r\n const geoNorm = this._chunkNorms;\r\n\r\n const mtx1 = gfxutils.calcCylinderMatrix(botPos, topPos, itemRad);\r\n normMtx.getNormalMatrix(mtx1);\r\n let idx;\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoPos, idx);\r\n tmpVector.applyMatrix4(mtx1);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._positions.set(tmpArray, itemOffset);\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoNorm, idx);\r\n tmpVector.applyMatrix3(normMtx);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._normals.set(tmpArray, itemOffset);\r\n }\r\n}\r\nexport default CylinderCollisionGeo;\r\n","import LinesGeometry from './LinesGeometry';\r\nimport CylinderCollisionGeo from './CylinderCollisionGeo';\r\n\r\nconst COLLISION_RAD = 0.1;\r\n\r\n/**\r\n * This class represents geometry which consists of separate chunks.\r\n * Each chunk has same index and similar geometry with equal points and faces count.\r\n * Each chunk has by default only one color.\r\n * @constructor\r\n *\r\n * @param {number} chunksCount Total chunks count.\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n * @param {boolean} enableCollision Enable or disable collision where each segment is\r\n * a collidable cylinder.\r\n * collision geometry.\r\n */\r\nclass ChunkedLinesGeometry extends LinesGeometry {\r\n constructor(chunksCount, segmentsCount, enableCollision) {\r\n super(chunksCount * segmentsCount);\r\n this._init(segmentsCount);\r\n this._collisionGeo = enableCollision ? new CylinderCollisionGeo(chunksCount * segmentsCount, 3) : null;\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n computeBoundingSphere() {\r\n const collisionGeo = this._collisionGeo;\r\n if (collisionGeo) {\r\n collisionGeo.computeBoundingSphere();\r\n this.boundingSphere = collisionGeo.boundingSphere;\r\n return;\r\n }\r\n super.computeBoundingSphere();\r\n }\r\n\r\n computeBoundingBox() {\r\n const collisionGeo = this._collisionGeo;\r\n if (collisionGeo) {\r\n collisionGeo.computeBoundingBox();\r\n this.boundingBox = collisionGeo.boundingBox;\r\n return;\r\n }\r\n super.computeBoundingBox();\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const collisionGeo = this._collisionGeo;\r\n if (!collisionGeo) {\r\n return;\r\n }\r\n const segCount = this._chunkSize;\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n for (let i = 0, n = intersects.length; i < n; ++i) {\r\n let { chunkIdx } = intersects[i];\r\n if (chunkIdx === undefined) {\r\n continue;\r\n }\r\n chunkIdx = (chunkIdx / segCount) | 0;\r\n intersects[i].chunkIdx = chunkIdx;\r\n }\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n const chunkSize = this._chunkSize;\r\n for (let i = chunkIdx * chunkSize, end = i + chunkSize; i < end; ++i) {\r\n super.setColor(i, colorVal);\r\n }\r\n }\r\n\r\n setSegment(chunkIdx, segIdx, pos1, pos2) {\r\n const chunkSize = this._chunkSize;\r\n const idx = chunkIdx * chunkSize + segIdx;\r\n super.setSegment(idx, pos1, pos2);\r\n if (this._collisionGeo) {\r\n this._collisionGeo.setItem(chunkIdx * chunkSize + segIdx, pos1, pos2, COLLISION_RAD);\r\n }\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const chunkSize = this._chunkSize;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const left = chunkIndices[i] * chunkSize;\r\n super.setOpacity(left, left + chunkSize - 1, value);\r\n }\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const chunkSize = this._chunkSize;\r\n const subset = new ChunkedLinesGeometry(instanceCount, chunkSize, false);\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const dstPtOffset = i * chunkSize;\r\n const startSegIdx = chunkIndices[i] * chunkSize;\r\n subset.setSegments(dstPtOffset, this.getSubsetSegments(startSegIdx, chunkSize));\r\n subset.setColors(dstPtOffset, this.getSubsetColors(startSegIdx, chunkSize));\r\n }\r\n\r\n subset.boundingSphere = this.boundingSphere;\r\n subset.boundingBox = this.boundingBox;\r\n return [subset];\r\n }\r\n\r\n _init(chunkSize) {\r\n this._chunkSize = chunkSize;\r\n }\r\n}\r\n\r\nexport default ChunkedLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport LinesGeometry from './LinesGeometry';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\n\r\nconst COLLISION_RAD = 0.3;\r\nconst tmpVector = new THREE.Vector3();\r\n\r\nclass TwoColorLinesGeometry extends LinesGeometry {\r\n constructor(segmentsCount) {\r\n super(segmentsCount * 2);\r\n this._init(segmentsCount);\r\n this._collisionGeo = new Simple2CCylindersGeometry(segmentsCount, 3);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos) {\r\n this._collisionGeo.setItem(itemIdx, botPos, topPos, COLLISION_RAD);\r\n const offset = 2 * itemIdx;// there are two points per segment\r\n tmpVector.lerpVectors(botPos, topPos, 0.5);\r\n super.setSegment(offset, botPos, tmpVector);\r\n super.setSegment(offset + 1, tmpVector, topPos);\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const offset = 2 * itemIdx;// there are two points per segment\r\n super.setColor(offset, colorVal1);\r\n super.setColor(offset + 1, colorVal2);\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n if (this._collisionGeo) {\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n }\r\n }\r\n\r\n getSubset(segmentIndices) {\r\n const instanceCount = segmentIndices.length;\r\n const subset = new TwoColorLinesGeometry(instanceCount, false);\r\n for (let i = 0, n = instanceCount; i < n; ++i) {\r\n const startSegIdx = segmentIndices[i];\r\n subset.setSegments(i, this.getSubsetSegments(startSegIdx, 1));\r\n subset.setColors(i, this.getSubsetColors(startSegIdx, 1));\r\n }\r\n\r\n subset.boundingSphere = this.boundingSphere;\r\n subset.boundingBox = this.boundingBox;\r\n return [subset];\r\n }\r\n\r\n _init(segmentsCount) {\r\n this._segCounts = segmentsCount * 2;\r\n }\r\n}\r\n// (???)parent = LinesGeometry.prototype;\r\n\r\nexport default TwoColorLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport ChunkedLinesGeometry from './ChunkedLinesGeometry';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst vectors = [\r\n new THREE.Vector3(1, 0, 0),\r\n new THREE.Vector3(-1, 0, 0),\r\n new THREE.Vector3(0, 1, 0),\r\n new THREE.Vector3(0, -1, 0),\r\n new THREE.Vector3(0, 0, 1),\r\n new THREE.Vector3(0, 0, -1),\r\n];\r\nconst vecCount = vectors.length;\r\nconst tempPos1 = new THREE.Vector3();\r\nconst tempPos2 = new THREE.Vector3();\r\n\r\nclass CrossGeometry extends SphereCollisionGeo(ChunkedLinesGeometry) {\r\n constructor(chunksCount) {\r\n super(chunksCount, chunksCount, (vecCount / 2) | 0, false);\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n\r\n for (let i = 0; i < vecCount / 2; ++i) {\r\n const first = i * 2;\r\n tempPos1.x = itemPos.x + vectors[first].x * itemRad;\r\n tempPos1.y = itemPos.y + vectors[first].y * itemRad;\r\n tempPos1.z = itemPos.z + vectors[first].z * itemRad;\r\n const second = first + 1;\r\n tempPos2.x = itemPos.x + vectors[second].x * itemRad;\r\n tempPos2.y = itemPos.y + vectors[second].y * itemRad;\r\n tempPos2.z = itemPos.z + vectors[second].z * itemRad;\r\n this.setSegment(itemIdx, i, tempPos1, tempPos2);\r\n }\r\n }\r\n}\r\nexport default CrossGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst POS_RAD_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\n\r\n/**\r\n * This is a base class for isosurface algorithms.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\nclass IsoSurfaceGeometry extends THREE.BufferGeometry {\r\n constructor(spheresCount, opts) {\r\n super();\r\n\r\n this._opts = opts;\r\n this.zClip = this._opts.zClip;\r\n this._posRad = utils.allocateTyped(Float32Array, spheresCount * POS_RAD_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, spheresCount * COLOR_SIZE);\r\n }\r\n\r\n setItem(chunkIdx, pos, radius) {\r\n const posRad = this._posRad;\r\n let idx = POS_RAD_SIZE * chunkIdx;\r\n posRad[idx++] = pos.x;\r\n posRad[idx++] = pos.y;\r\n posRad[idx++] = pos.z;\r\n posRad[idx] = radius;\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n const colors = this._colors;\r\n let idx = COLOR_SIZE * chunkIdx;\r\n colors[idx++] = tmpColor.r;\r\n colors[idx++] = tmpColor.g;\r\n colors[idx] = tmpColor.b;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n finishUpdate() {\r\n this._build();\r\n }\r\n\r\n setOpacity() {\r\n // not implemented\r\n }\r\n\r\n raycast() {\r\n }\r\n\r\n getSubset() {\r\n return [];\r\n }\r\n}\r\nexport default IsoSurfaceGeometry;\r\n","import utils from '../../utils';\r\n\r\n/**\r\n * Class for marching cube\r\n * Stores 8 points and 8 float values are stored together in linear array\r\n * Int values for has intersection or not - in integer32 linear array\r\n * Int values for bits flags - in integer32 linear array\r\n *\r\n */\r\nclass IsoSurfaceMarchCube {\r\n constructor() {\r\n this.pointsValuesLinear = null;\r\n this.hasIntersection = null;\r\n this.bitsInside = null;\r\n }\r\n\r\n create(numCellsPerSide) {\r\n const vx7000000 = 0x7000000;\r\n const n3 = numCellsPerSide * numCellsPerSide * numCellsPerSide;\r\n if (n3 > vx7000000) {\r\n throw new Error('Too large cube dimension: lead to memory huge uasge');\r\n }\r\n this.pointsValuesLinear = utils.allocateTyped(Float32Array, (2 << (2 + 2)) * n3);\r\n this.hasIntersection = utils.allocateTyped(Int32Array, n3);\r\n this.bitsInside = utils.allocateTyped(Int32Array, n3);\r\n return 0;\r\n }\r\n\r\n destroy() {\r\n this.bitsInside = null;\r\n this.hasIntersection = null;\r\n this.pointsValuesLinear = null;\r\n }\r\n}\r\n\r\n/* eslint-disable no-magic-numbers */\r\nIsoSurfaceMarchCube.prototype.striIndicesMarchCube = [\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1,\r\n 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1,\r\n 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1,\r\n 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1,\r\n 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1,\r\n 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1,\r\n 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1,\r\n 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1,\r\n 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1,\r\n 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1,\r\n 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1,\r\n 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1,\r\n 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1,\r\n 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1,\r\n 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1,\r\n 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1,\r\n 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1,\r\n 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1,\r\n 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1,\r\n 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1,\r\n 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1,\r\n 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1,\r\n 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1,\r\n 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1,\r\n 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1,\r\n 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1,\r\n 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1,\r\n 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1,\r\n 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1,\r\n 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1,\r\n 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1,\r\n 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1,\r\n 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1,\r\n 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1,\r\n 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1,\r\n 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1,\r\n 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1,\r\n 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1,\r\n 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1,\r\n 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1,\r\n 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1,\r\n 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1,\r\n 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1,\r\n 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1,\r\n 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1,\r\n 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1,\r\n 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1,\r\n 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1,\r\n 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1,\r\n 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1,\r\n 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1,\r\n 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1,\r\n 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1,\r\n 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1,\r\n 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1,\r\n 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1,\r\n 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1,\r\n 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1,\r\n 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1,\r\n 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1,\r\n 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1,\r\n 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1,\r\n 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1,\r\n 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1,\r\n 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1,\r\n 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1,\r\n 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1,\r\n 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1,\r\n 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1,\r\n 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1,\r\n 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1,\r\n 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1,\r\n 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1,\r\n 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1,\r\n 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1,\r\n 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1,\r\n 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1,\r\n 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1,\r\n 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1,\r\n 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1,\r\n 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1,\r\n 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1,\r\n 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1,\r\n 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1,\r\n 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1,\r\n 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1,\r\n 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1,\r\n 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1,\r\n 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1,\r\n 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1,\r\n 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1,\r\n 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1,\r\n 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1,\r\n 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1,\r\n 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1,\r\n 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1,\r\n 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1,\r\n 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1,\r\n 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1,\r\n 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1,\r\n 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1,\r\n 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1,\r\n 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1,\r\n 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1,\r\n 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1,\r\n 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1,\r\n 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1,\r\n 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1,\r\n 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n];\r\n/* eslint-enable no-magic-numbers */\r\n\r\nexport default IsoSurfaceMarchCube;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceMarchCube from './IsoSurfaceMarchCube';\r\nimport utils from '../../utils';\r\n\r\nconst edgeTable = [\r\n 0x0, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c,\r\n 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,\r\n 0x190, 0x99, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c,\r\n 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,\r\n 0x230, 0x339, 0x33, 0x13a, 0x636, 0x73f, 0x435, 0x53c,\r\n 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,\r\n 0x3a0, 0x2a9, 0x1a3, 0xaa, 0x7a6, 0x6af, 0x5a5, 0x4ac,\r\n 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,\r\n 0x460, 0x569, 0x663, 0x76a, 0x66, 0x16f, 0x265, 0x36c,\r\n 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,\r\n 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff, 0x3f5, 0x2fc,\r\n 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,\r\n 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55, 0x15c,\r\n 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,\r\n 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc,\r\n 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,\r\n 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc,\r\n 0xcc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,\r\n 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c,\r\n 0x15c, 0x55, 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,\r\n 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc,\r\n 0x2fc, 0x3f5, 0xff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,\r\n 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c,\r\n 0x36c, 0x265, 0x16f, 0x66, 0x76a, 0x663, 0x569, 0x460,\r\n 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac,\r\n 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa, 0x1a3, 0x2a9, 0x3a0,\r\n 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c,\r\n 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33, 0x339, 0x230,\r\n 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c,\r\n 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99, 0x190,\r\n 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c,\r\n 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0];\r\n\r\nfunction _voxelGradientFast(v, point, grad) {\r\n const g = v.getValue(point.x, point.y, point.z);\r\n grad.set(g[0], g[1], g[2]);\r\n}\r\n\r\n// Helper class GridCell\r\nclass GridCell {\r\n constructor() {\r\n this._arrSize = 8;\r\n this.p = new Array(this._arrSize);\r\n this.g = new Array(this._arrSize);\r\n this.val = new Array(this._arrSize);\r\n for (let i = 0; i < this._arrSize; ++i) {\r\n this.p[i] = new THREE.Vector3();\r\n this.g[i] = new THREE.Vector3();\r\n }\r\n this.cubeIndex = 0;\r\n }\r\n}\r\n\r\n// Helper class Triangle\r\nclass Triangle {\r\n constructor() {\r\n this.a = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n\r\n this.b = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n\r\n this.c = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n }\r\n}\r\n\r\nfunction createArray(arrSize) {\r\n const arr = new Array(arrSize);\r\n for (let i = 0; i < arrSize; ++i) {\r\n arr[i] = new THREE.Vector3();\r\n }\r\n\r\n return arr;\r\n}\r\n\r\nclass IsoSurface {\r\n constructor() {\r\n this._numTriangles = 0;\r\n this._numVertices = 0;\r\n this._position = [];\r\n this._normals = [];\r\n this._colors = null;\r\n this._indices = [];\r\n this._volumetricData = null;\r\n this._xAxis = new THREE.Vector3();\r\n this._yAxis = new THREE.Vector3();\r\n this._zAxis = new THREE.Vector3();\r\n this._xDir = new THREE.Vector3();\r\n this._yDir = new THREE.Vector3();\r\n this._zDir = new THREE.Vector3();\r\n }\r\n\r\n _prepareAxesAndDirs() {\r\n const volData = this._volumetricData;\r\n\r\n const cellSize = volData.getCellSize();\r\n\r\n // calculate cell axes\r\n const xAxis = this._xAxis;\r\n const yAxis = this._yAxis;\r\n const zAxis = this._zAxis;\r\n const xDir = this._xDir;\r\n const yDir = this._yDir;\r\n const zDir = this._zDir;\r\n\r\n xAxis.set(cellSize.x, 0, 0);\r\n yAxis.set(0, cellSize.y, 0);\r\n zAxis.set(0, 0, cellSize.z);\r\n\r\n xDir.set(1, 0, 0);\r\n yDir.set(0, 1, 0);\r\n zDir.set(0, 0, 1);\r\n\r\n // flip normals if coordinate system is in the wrong handedness\r\n const tmp = new THREE.Vector3();\r\n tmp.crossVectors(xDir, yDir);\r\n if (tmp.dot(zDir) < 0) {\r\n xDir.negate();\r\n yDir.negate();\r\n zDir.negate();\r\n }\r\n\r\n // check that the grid is in the all-positive octant of the coordinate system\r\n if (xDir.x < 0 || xDir.y < 0 || xDir.z < 0\r\n || yDir.x < 0 || yDir.y < 0 || yDir.z < 0\r\n || zDir.x < 0 || zDir.y < 0 || zDir.z < 0) {\r\n return false;\r\n }\r\n\r\n // check that the grid is axis-aligned\r\n const notZero = (axe) => Math.abs(axe) > Number.EPSILON;\r\n return !(notZero(xAxis.y) || notZero(xAxis.z)\r\n || notZero(yAxis.x) || notZero(yAxis.z)\r\n || notZero(zAxis.x) || notZero(zAxis.y));\r\n }\r\n\r\n _vertexInterp(isoLevel, grid, ind1, ind2, vertex, normal) {\r\n const p1 = grid.p[ind1];\r\n const p2 = grid.p[ind2];\r\n const n1 = grid.g[ind1];\r\n const n2 = grid.g[ind2];\r\n const valP1 = grid.val[ind1];\r\n const valP2 = grid.val[ind2];\r\n const isoDiffP1 = isoLevel - valP1;\r\n const diffValP2P1 = valP2 - valP1;\r\n\r\n let mu = 0.0;\r\n\r\n if (Math.abs(diffValP2P1) > 0.0) {\r\n mu = isoDiffP1 / diffValP2P1;\r\n }\r\n mu = mu > 1.0 ? 1.0 : mu;\r\n vertex.lerpVectors(p1, p2, mu);\r\n normal.lerpVectors(n1, n2, mu);\r\n }\r\n\r\n static _triTable = IsoSurfaceMarchCube.prototype.striIndicesMarchCube;\r\n\r\n static _arrSize = 12;\r\n\r\n static _firstIndices = [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3];\r\n\r\n static _secondIndices = [1, 2, 3, 0, 5, 6, 7, 4, 4, 5, 6, 7];\r\n\r\n static _vertexList = createArray(IsoSurface._arrSize);\r\n\r\n static _normalList = createArray(IsoSurface._arrSize);\r\n\r\n _polygonize(grid, isoLevel, triangles) {\r\n const { cubeIndex } = grid;\r\n let i = 0;\r\n const arrSize = IsoSurface._arrSize;\r\n const firstIndices = IsoSurface._firstIndices;\r\n const secondIndices = IsoSurface._secondIndices;\r\n const vertexList = IsoSurface._vertexList;\r\n const normalList = IsoSurface._normalList;\r\n\r\n for (; i < arrSize; ++i) {\r\n if (edgeTable[cubeIndex] & (1 << i)) {\r\n this._vertexInterp(\r\n isoLevel,\r\n grid,\r\n firstIndices[i],\r\n secondIndices[i],\r\n vertexList[i],\r\n normalList[i],\r\n );\r\n }\r\n }\r\n\r\n let triCount = 0;\r\n const triTblIdx = cubeIndex * 16;\r\n const triTable = IsoSurface._triTable;\r\n\r\n for (i = 0; triTable[triTblIdx + i] !== -1; i += 3) {\r\n triangles[triCount].a.p.copy(vertexList[triTable[triTblIdx + i]]);\r\n triangles[triCount].a.n.copy(normalList[triTable[triTblIdx + i]]);\r\n\r\n triangles[triCount].b.p.copy(vertexList[triTable[triTblIdx + i + 1]]);\r\n triangles[triCount].b.n.copy(normalList[triTable[triTblIdx + i + 1]]);\r\n\r\n triangles[triCount].c.p.copy(vertexList[triTable[triTblIdx + i + 2]]);\r\n triangles[triCount].c.n.copy(normalList[triTable[triTblIdx + i + 2]]);\r\n ++triCount;\r\n }\r\n\r\n return triCount;\r\n }\r\n\r\n _doGridPosNorms(isoValue, step, appendSimple) {\r\n const vol = this._volumetricData;\r\n const volData = this._volumetricData.getData();\r\n const dim = vol.getDimensions();\r\n const xSize = dim[0];\r\n const ySize = dim[1];\r\n const zSize = dim[2];\r\n const stepX = step * vol.getStrideX();\r\n const stepY = step * vol.getStrideY();\r\n const stepZ = step * vol.getStrideZ();\r\n\r\n const gc = new GridCell();\r\n const gcVal = gc.val;\r\n const gcValSize = gc.val.length;\r\n const additions = [\r\n new THREE.Vector3(0, 0, 0), // 0\r\n new THREE.Vector3(step, 0, 0), // 1\r\n new THREE.Vector3(step, step, 0), // 2\r\n new THREE.Vector3(0, step, 0), // 3\r\n new THREE.Vector3(0, 0, step), // 4\r\n new THREE.Vector3(step, 0, step), // 5\r\n new THREE.Vector3(step, step, step), // 6\r\n new THREE.Vector3(0, step, step), // 7\r\n ];\r\n\r\n const tmpTriCount = 5;\r\n const triangles = new Array(tmpTriCount);\r\n for (let j = 0; j < tmpTriCount; ++j) {\r\n triangles[j] = new Triangle();\r\n }\r\n\r\n let appendVertex;\r\n const self = this;\r\n const positions = this._position;\r\n const normals = this._normals;\r\n if (appendSimple) {\r\n // Special case for axis-aligned grid with positive unit vector normals\r\n appendVertex = (function () {\r\n const axis = new THREE.Vector3(self._xAxis.x, self._yAxis.y, self._zAxis.z);\r\n return function (triVertex) {\r\n const vertex = triVertex.p.clone();\r\n vertex.multiply(axis);\r\n positions.push(vertex.add(self._origin));\r\n normals.push(triVertex.n.clone());\r\n };\r\n }());\r\n } else {\r\n appendVertex = (function () {\r\n const posMtx = new THREE.Matrix3();\r\n posMtx.set(\r\n self._xAxis.x,\r\n self._yAxis.x,\r\n self._zAxis.x,\r\n self._xAxis.y,\r\n self._yAxis.y,\r\n self._zAxis.y,\r\n self._xAxis.z,\r\n self._yAxis.z,\r\n self._zAxis.z,\r\n );\r\n const normMtx = new THREE.Matrix3();\r\n normMtx.set(\r\n self._xDir.x,\r\n self._yDir.x,\r\n self._zDir.x,\r\n self._xDir.y,\r\n self._yDir.y,\r\n self._zDir.y,\r\n self._xDir.z,\r\n self._yDir.z,\r\n self._zDir.z,\r\n );\r\n\r\n return function (triVertex) {\r\n positions.push(triVertex.p.clone().applyMatrix3(posMtx).add(self._origin));\r\n normals.push(triVertex.n.clone().applyMatrix3(normMtx));\r\n };\r\n }());\r\n }\r\n const indices = this._indices;\r\n\r\n let globTriCount = 0;\r\n\r\n for (let z = 0; z < (zSize - step); z += step) {\r\n for (let y = 0; y < (ySize - step); y += step) {\r\n let idx = vol.getDirectIdx(0, y, z);\r\n for (let x = 0; x < (xSize - step); x += step, idx += stepX) {\r\n /* eslint-disable no-multi-spaces */\r\n /* eslint-disable computed-property-spacing */\r\n gcVal[0] = volData[idx];\r\n gcVal[1] = volData[idx + stepX];\r\n gcVal[3] = volData[idx + stepY];\r\n gcVal[2] = volData[idx + stepX + stepY];\r\n gcVal[4] = volData[idx + stepZ];\r\n gcVal[5] = volData[idx + stepX + stepZ];\r\n gcVal[7] = volData[idx + stepY + stepZ];\r\n gcVal[6] = volData[idx + stepX + stepY + stepZ];\r\n /* eslint-enable no-multi-spaces */\r\n /* eslint-enable computed-property-spacing */\r\n\r\n // Determine the index into the edge table which\r\n // tells us which vertices are inside of the surface\r\n let cubeIndex = 0;\r\n let i = 0;\r\n for (; i < gcValSize; ++i) {\r\n if (gcVal[i] < isoValue) {\r\n cubeIndex |= (1 << i);\r\n }\r\n }\r\n\r\n if (edgeTable[cubeIndex] === 0) {\r\n continue;\r\n }\r\n\r\n gc.cubeIndex = cubeIndex;\r\n for (i = 0; i < gcValSize; ++i) {\r\n gc.p[i].set(x + additions[i].x, y + additions[i].y, z + additions[i].z);\r\n _voxelGradientFast(this._gradient, gc.p[i], gc.g[i]);\r\n }\r\n\r\n // calculate vertices and facets for this cube,\r\n // calculate normals by interpolating between the negated\r\n // normalized volume gradients for the 8 reference voxels\r\n const triCount = this._polygonize(gc, isoValue, triangles);\r\n globTriCount += triCount;\r\n\r\n // append triangles using different techniques\r\n for (i = 0; i < triCount; ++i) {\r\n indices.push(this._numTriangles * 3);\r\n indices.push(this._numTriangles * 3 + 1);\r\n indices.push(this._numTriangles * 3 + 2);\r\n ++this._numTriangles;\r\n\r\n appendVertex(triangles[i].a);\r\n appendVertex(triangles[i].b);\r\n appendVertex(triangles[i].c);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return globTriCount;\r\n }\r\n\r\n compute(volData, origin, isoValue, step) {\r\n this._volumetricData = volData;\r\n this._origin = origin;\r\n\r\n this._gradient = volData.computeGradient();\r\n\r\n this._doGridPosNorms(isoValue, step, this._prepareAxesAndDirs());\r\n }\r\n\r\n _remapIndices(vertexMap, idcCount) {\r\n const indices = this._indices;\r\n const newIndices = utils.allocateTyped(Uint32Array, idcCount);\r\n for (let i = 0; i < idcCount; ++i) {\r\n indices[i] = vertexMap[indices[i]];\r\n newIndices[i] = indices[i];\r\n }\r\n this._indices = newIndices;\r\n }\r\n\r\n _remapVertices(vertices, normals, count) {\r\n const newPositions = utils.allocateTyped(Float32Array, count * 3);\r\n const newNormals = utils.allocateTyped(Float32Array, count * 3);\r\n for (let i = 0; i < count; ++i) {\r\n const pos = vertices[i];\r\n newPositions[i * 3] = pos.x;\r\n newPositions[i * 3 + 1] = pos.y;\r\n newPositions[i * 3 + 2] = pos.z;\r\n const norm = normals[i].normalize();\r\n newNormals[i * 3] = norm.x;\r\n newNormals[i * 3 + 1] = norm.y;\r\n newNormals[i * 3 + 2] = norm.z;\r\n }\r\n this._position = newPositions;\r\n this._normals = newNormals;\r\n }\r\n\r\n vertexFusion(offset, len) {\r\n const faceVer = this._indices.length;\r\n const vertices = this._position;\r\n const normals = this._normals;\r\n const oldVerCount = vertices.length | 0;\r\n if (faceVer === 0 || oldVerCount === 0) {\r\n return;\r\n }\r\n const vMap = utils.allocateTyped(Uint32Array, oldVerCount);\r\n vMap[0] = 0;\r\n let newVer = 1;\r\n\r\n let i = 1;\r\n for (; i < oldVerCount; ++i) {\r\n const start = newVer - offset < 0 ? 0 : newVer - offset;\r\n const end = start + len > newVer ? newVer : start + len;\r\n let matchedIndex = -1;\r\n\r\n for (let j = start; j < end; ++j) {\r\n if (Math.abs(vertices[i] - vertices[j]) < Number.EPSILON) {\r\n matchedIndex = j;\r\n break;\r\n }\r\n }\r\n\r\n if (matchedIndex !== -1) {\r\n vMap[i] = matchedIndex;\r\n } else {\r\n vertices[newVer].copy(vertices[i]);\r\n normals[newVer].copy(normals[i]);\r\n vMap[i] = newVer;\r\n ++newVer;\r\n }\r\n }\r\n\r\n this._remapIndices(vMap, faceVer);\r\n this._remapVertices(vertices, normals, newVer);\r\n }\r\n\r\n // Assign per-vertex colors from a volumetric texture map (same dimensions as the original volumetric data).\r\n // Along with color dominating atom is determined for each vertex\r\n // and vertices with atom out of \"visible\" subset get filtered out.\r\n // XXX only handles orthogonal volumes currently\r\n setColorVolTex(colorMap, atomMap, atomWeightMap, visibilitySelector) {\r\n let i;\r\n let idx;\r\n const numVerts = this._position.length / 3;\r\n const vertices = this._position;\r\n const origin = this._origin;\r\n const dim = this._volumetricData.getDimensions();\r\n const xs = dim[0] - 1;\r\n const ys = dim[1] - 1;\r\n const zs = dim[2] - 1;\r\n\r\n const colorData = colorMap.getData();\r\n const strideX = colorMap.getStrideX();\r\n const strideY = colorMap.getStrideY();\r\n const strideZ = colorMap.getStrideZ();\r\n\r\n let atomWeightData;\r\n let atomStrideX;\r\n let atomStrideY;\r\n let atomStrideZ;\r\n\r\n if (visibilitySelector !== null) {\r\n atomWeightData = atomWeightMap.getData();\r\n atomStrideX = atomWeightMap.getStrideX();\r\n atomStrideY = atomWeightMap.getStrideY();\r\n atomStrideZ = atomWeightMap.getStrideZ();\r\n }\r\n\r\n const xInv = 1.0 / this._xAxis.x;\r\n const yInv = 1.0 / this._yAxis.y;\r\n const zInv = 1.0 / this._zAxis.z;\r\n\r\n let atomLookup = [];\r\n let atomWeights = [];\r\n const colors = utils.allocateTyped(Float32Array, numVerts * 3);\r\n\r\n function interp(mu, idx1, idx2, c) {\r\n c[0] = (1 - mu) * colorData[idx1] + mu * colorData[idx2];\r\n c[1] = (1 - mu) * colorData[idx1 + 1] + mu * colorData[idx2 + 1];\r\n c[2] = (1 - mu) * colorData[idx1 + 2] + mu * colorData[idx2 + 2];\r\n }\r\n\r\n function collectWeight(ai, coefX, coefY, coefZ) {\r\n const a = atomMap[ai]; // atomWeightMap is a scalar field, so index into atom map should be the same\r\n if (a != null) {\r\n atomLookup[a.index] = a;\r\n const w = coefX * coefY * coefZ * atomWeightData[ai];\r\n if (typeof atomWeights[a.index] === 'undefined') {\r\n atomWeights[a.index] = w;\r\n } else {\r\n atomWeights[a.index] += w;\r\n }\r\n }\r\n }\r\n\r\n const vMap = utils.allocateTyped(Int32Array, numVerts);\r\n let newVerCount = 0;\r\n\r\n for (i = 0; i < numVerts; i++) {\r\n const ind = i * 3;\r\n const vx = (vertices[ind] - origin.x) * xInv;\r\n const vy = (vertices[ind + 1] - origin.y) * yInv;\r\n const vz = (vertices[ind + 2] - origin.z) * zInv;\r\n const x = Math.min(Math.max(vx, 0), xs) | 0;\r\n const y = Math.min(Math.max(vy, 0), ys) | 0;\r\n const z = Math.min(Math.max(vz, 0), zs) | 0;\r\n\r\n const mux = (vx - x);\r\n const muy = (vy - y);\r\n const muz = (vz - z);\r\n\r\n if (visibilitySelector != null) {\r\n // collect atom weights\r\n atomLookup = [];\r\n atomWeights = [];\r\n idx = atomWeightMap.getDirectIdx(x, y, z);\r\n collectWeight(idx, 1 - mux, 1 - muy, 1 - muz);\r\n collectWeight(idx + atomStrideX, mux, 1 - muy, 1 - muz);\r\n collectWeight(idx + atomStrideY, 1 - mux, muy, 1 - muz);\r\n collectWeight(idx + atomStrideX + atomStrideY, mux, muy, 1 - muz);\r\n collectWeight(idx + atomStrideZ, 1 - mux, 1 - muy, muz);\r\n collectWeight(idx + atomStrideX + atomStrideZ, mux, 1 - muy, muz);\r\n collectWeight(idx + atomStrideY + atomStrideZ, 1 - mux, muy, muz);\r\n collectWeight(idx + atomStrideX + atomStrideY + atomStrideZ, mux, muy, muz);\r\n\r\n // find dominant atom\r\n let maxWeight = 0.0;\r\n let dominantIdx = -1;\r\n for (const atomIdx in atomWeights) {\r\n if (atomWeights[atomIdx] > maxWeight) {\r\n dominantIdx = atomIdx;\r\n maxWeight = atomWeights[atomIdx];\r\n }\r\n }\r\n\r\n if (dominantIdx < 0 || !visibilitySelector.includesAtom(atomLookup[dominantIdx])) {\r\n // this vertex doesn't belong to visible subset and will be skipped\r\n vMap[i] = -1;\r\n continue;\r\n }\r\n }\r\n\r\n vMap[i] = newVerCount++;\r\n\r\n // color tri-linear interpolation\r\n const dx = (x < xs) ? strideX : 0;\r\n const dy = (y < ys) ? strideY : 0;\r\n const dz = (z < zs) ? strideZ : 0;\r\n\r\n const c0 = [0, 0, 0];\r\n const c1 = [0, 0, 0];\r\n const c2 = [0, 0, 0];\r\n const c3 = [0, 0, 0];\r\n\r\n idx = colorMap.getDirectIdx(x, y, z);\r\n interp(mux, idx, idx + dx, c0);\r\n interp(mux, idx + dy, idx + dx + dy, c1);\r\n interp(mux, idx + dz, idx + dx + dz, c2);\r\n interp(mux, idx + dy + dz, idx + dx + dy + dz, c3);\r\n\r\n const cz0 = [0, 0, 0];\r\n cz0[0] = (1 - muy) * c0[0] + muy * c1[0];\r\n cz0[1] = (1 - muy) * c0[1] + muy * c1[1];\r\n cz0[2] = (1 - muy) * c0[2] + muy * c1[2];\r\n\r\n const cz1 = [0, 0, 0];\r\n cz1[0] = (1 - muy) * c2[0] + muy * c3[0];\r\n cz1[1] = (1 - muy) * c2[1] + muy * c3[1];\r\n cz1[2] = (1 - muy) * c2[2] + muy * c3[2];\r\n\r\n colors[ind] = (1 - muz) * cz0[0] + muz * cz1[0];\r\n colors[ind + 1] = (1 - muz) * cz0[1] + muz * cz1[1];\r\n colors[ind + 2] = (1 - muz) * cz0[2] + muz * cz1[2];\r\n }\r\n this._colors = colors;\r\n\r\n if (visibilitySelector != null) {\r\n // shift visible vertices towards beginning of array\r\n for (i = 0; i < numVerts; ++i) {\r\n const j = vMap[i];\r\n if (j < 0) {\r\n continue;\r\n }\r\n\r\n // assert: j <= i\r\n this._position[j * 3] = this._position[i * 3];\r\n this._position[j * 3 + 1] = this._position[i * 3 + 1];\r\n this._position[j * 3 + 2] = this._position[i * 3 + 2];\r\n this._normals[j * 3] = this._normals[i * 3];\r\n this._normals[j * 3 + 1] = this._normals[i * 3 + 1];\r\n this._normals[j * 3 + 2] = this._normals[i * 3 + 2];\r\n this._colors[j * 3] = this._colors[i * 3];\r\n this._colors[j * 3 + 1] = this._colors[i * 3 + 1];\r\n this._colors[j * 3 + 2] = this._colors[i * 3 + 2];\r\n }\r\n\r\n // rebuild index list\r\n const numTriangles = this._indices.length / 3;\r\n let newTriCount = 0;\r\n for (i = 0; i < numTriangles; ++i) {\r\n const i0 = vMap[this._indices[3 * i]];\r\n const i1 = vMap[this._indices[3 * i + 1]];\r\n const i2 = vMap[this._indices[3 * i + 2]];\r\n if (i0 >= 0 && i1 >= 0 && i2 >= 0) {\r\n this._indices[3 * newTriCount] = i0;\r\n this._indices[3 * newTriCount + 1] = i1;\r\n this._indices[3 * newTriCount + 2] = i2;\r\n ++newTriCount;\r\n }\r\n }\r\n\r\n // shrink arrays to data size\r\n this._position = new Float32Array(this._position.buffer.slice(0, newVerCount * 3 * 4));\r\n this._normals = new Float32Array(this._normals.buffer.slice(0, newVerCount * 3 * 4));\r\n this._colors = new Float32Array(this._colors.buffer.slice(0, newVerCount * 3 * 4));\r\n this._indices = new Uint32Array(this._indices.buffer.slice(0, newTriCount * 3 * 4));\r\n }\r\n }\r\n\r\n toMesh() {\r\n const geo = new THREE.BufferGeometry();\r\n geo.setIndex(new THREE.BufferAttribute(this._indices, 1));\r\n geo.setAttribute('position', new THREE.BufferAttribute(this._position, 3));\r\n geo.setAttribute('normal', new THREE.BufferAttribute(this._normals, 3));\r\n geo.setAttribute('color', new THREE.BufferAttribute(this._colors, 3));\r\n geo.computeBoundingSphere();\r\n return geo;\r\n }\r\n}\r\nexport default IsoSurface;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceGeometry from './IsoSurfaceGeometry';\r\nimport IsoSurface from './IsoSurface';\r\nimport utils from '../../utils';\r\n\r\n/**\r\n * This is a base class for volumetric maps based isosurface algorithms.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass VolumeSurfaceGeometry extends IsoSurfaceGeometry {\r\n _build() {\r\n const params = this._opts;\r\n this.numVoxels = [128, 128, 128];\r\n this.xAxis = new THREE.Vector3(1.0, 0.0, 0.0);\r\n this.yAxis = new THREE.Vector3(0.0, 1.0, 0.0);\r\n this.zAxis = new THREE.Vector3(0.0, 0.0, 1.0);\r\n\r\n this.origin = new THREE.Vector3(0.0, 0.0, 0.0);\r\n this._visibilitySelector = params.visibilitySelector;\r\n\r\n this._calcSurface(params);\r\n }\r\n\r\n _findMinMax(posRadArray) {\r\n const itemSize = 4;\r\n const itemsCount = posRadArray.length / itemSize;\r\n const maxPosRad = [posRadArray[0], posRadArray[1], posRadArray[2], posRadArray[3]];\r\n const minPosRad = [posRadArray[0], posRadArray[1], posRadArray[2], posRadArray[3]];\r\n for (let i = 1; i < itemsCount; ++i) {\r\n const ind = i * itemSize;\r\n\r\n for (let itemIdx = 0; itemIdx < itemSize; ++itemIdx) {\r\n const tmpVal = posRadArray[ind + itemIdx];\r\n maxPosRad[itemIdx] = Math.max(tmpVal, maxPosRad[itemIdx]);\r\n minPosRad[itemIdx] = Math.min(tmpVal, minPosRad[itemIdx]);\r\n }\r\n }\r\n return { maxPosRad, minPosRad };\r\n }\r\n\r\n _findNumVoxels(posRadArray, params) {\r\n const { numVoxels } = this;\r\n const minMaxValues = this._findMinMax(posRadArray);\r\n const minCoordRad = minMaxValues.minPosRad;\r\n const maxCoordRad = minMaxValues.maxPosRad;\r\n\r\n // minrad\r\n if (minCoordRad[3] > 4.0) {\r\n params.gridSpacing *= minCoordRad[3];\r\n }\r\n\r\n let gridPadding = params.radScale * maxCoordRad[3] * 1.7;\r\n let padRad = gridPadding;\r\n padRad = 0.65 * Math.sqrt(4.0 / 3.0 * Math.PI * padRad * padRad * padRad);\r\n gridPadding = Math.max(gridPadding, padRad);\r\n\r\n let i = 0;\r\n for (; i < 3; ++i) {\r\n minCoordRad[i] -= gridPadding;\r\n maxCoordRad[i] += gridPadding;\r\n }\r\n\r\n for (i = 0; i < 3; ++i) {\r\n numVoxels[i] = Math.ceil((maxCoordRad[i] - minCoordRad[i]) / params.gridSpacing);\r\n }\r\n this.xAxis.x = (numVoxels[0] - 1) * params.gridSpacing;\r\n this.yAxis.y = (numVoxels[1] - 1) * params.gridSpacing;\r\n this.zAxis.z = (numVoxels[2] - 1) * params.gridSpacing;\r\n\r\n [this.origin.x, this.origin.y, this.origin.z] = minCoordRad;\r\n\r\n return { bbox: minMaxValues, dim: numVoxels };\r\n }\r\n\r\n _makeSurface(surface, params) {\r\n const isoSurf = new IsoSurface();\r\n isoSurf.compute(surface.volMap, this.origin, params.isoValue, 1);\r\n isoSurf.vertexFusion(9, 9);// normalization is included\r\n\r\n if (isoSurf._numTriangles > 0) {\r\n isoSurf.setColorVolTex(surface.volTexMap, surface.atomMap, surface.atomWeightMap, this._visibilitySelector);\r\n this.setIndex(new THREE.BufferAttribute(isoSurf._indices, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(isoSurf._position, 3));\r\n this.setAttribute('normal', new THREE.BufferAttribute(isoSurf._normals, 3));\r\n this.setAttribute('color', new THREE.BufferAttribute(isoSurf._colors, 3));\r\n } else { // geometry should have at least empty position attributes to be processed in wireframe mode by three.js\r\n this.setAttribute('position', new THREE.BufferAttribute(utils.allocateTyped(Float32Array, 0), 3));\r\n }\r\n }\r\n\r\n _calcSurface(params) {\r\n const packedArrays = {\r\n posRad: this._posRad,\r\n colors: this._colors,\r\n atoms: this._opts.atoms,\r\n };\r\n\r\n if (packedArrays.posRad.length === 0) {\r\n return;\r\n }\r\n const boundaries = this._findNumVoxels(packedArrays.posRad, params);\r\n\r\n const box = new THREE.Box3(\r\n this.origin,\r\n new THREE.Vector3(this.xAxis.x, this.yAxis.y, this.zAxis.z).add(this.origin),\r\n );\r\n const surface = this._computeSurface(packedArrays, box, boundaries, params);\r\n\r\n this._makeSurface(surface, params);\r\n }\r\n}\r\n\r\nexport default VolumeSurfaceGeometry;\r\n","import VolumeSurfaceGeometry from './VolumeSurfaceGeometry';\r\nimport chem from '../../chem';\r\n\r\nconst { Volume } = chem;\r\n\r\n/**\r\n * This class implements 'quick' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass QuickSurfGeometry extends VolumeSurfaceGeometry {\r\n _computeSurface(packedArrays, box, boundaries, params) {\r\n // beware of shifting this multiple times!\r\n this._shiftByOrigin(packedArrays.posRad);\r\n\r\n const surface = {\r\n volMap: new Volume(Float32Array, this.numVoxels, box),\r\n volTexMap: new Volume(Float32Array, this.numVoxels, box, 3),\r\n };\r\n\r\n if (this._visibilitySelector != null) {\r\n surface.atomMap = [];\r\n surface.atomWeightMap = new Volume(Float32Array, this.numVoxels, box);\r\n }\r\n\r\n this.gaussdensity(surface, packedArrays, null, params);\r\n return surface;\r\n }\r\n\r\n gaussdensity(surface, packedArrays, atomicNum, params) {\r\n const numAtoms = packedArrays.posRad.length / 4;\r\n const { posRad, colors } = packedArrays;\r\n const { numVoxels } = this;\r\n const { radScale, gaussLim, gridSpacing } = params;\r\n const invIsoValue = 1.0 / params.isoValue;\r\n const invGridSpacing = 1.0 / gridSpacing;\r\n const maxVoxelX = numVoxels[0] - 1;\r\n const maxVoxelY = numVoxels[1] - 1;\r\n const maxVoxelZ = numVoxels[2] - 1;\r\n // TODO is densityMap and volTexMap initialized?\r\n\r\n const { volMap, volTexMap } = surface;\r\n const volData = volMap.getData();\r\n const strideX = volMap.getStrideX();\r\n\r\n const volTexData = volTexMap.getData();\r\n const texStrideX = volTexMap.getStrideX();\r\n\r\n let atomWeightData;\r\n if (this._visibilitySelector != null) {\r\n atomWeightData = surface.atomWeightMap.getData();\r\n }\r\n\r\n const { atomMap } = surface;\r\n\r\n for (let i = 0; i < numAtoms; ++i) {\r\n const ind = i * 4;\r\n const scaledRad = posRad[ind + 3] * radScale;\r\n const atomicNumFactor = atomicNum === null ? 1.0 : atomicNum[i];\r\n const radInv = 1 / (2 * scaledRad * scaledRad);\r\n let radLim = gaussLim * scaledRad;\r\n const radLim2 = radLim * radLim;\r\n radLim *= invGridSpacing;\r\n\r\n let tmp = posRad[ind] * invGridSpacing;\r\n const xMin = Math.max((tmp - radLim) | 0, 0);\r\n const xMax = Math.min((tmp + radLim) | 0, maxVoxelX);\r\n tmp = posRad[ind + 1] * invGridSpacing;\r\n const yMin = Math.max((tmp - radLim) | 0, 0);\r\n const yMax = Math.min((tmp + radLim) | 0, maxVoxelY);\r\n tmp = posRad[ind + 2] * invGridSpacing;\r\n const zMin = Math.max((tmp - radLim) | 0, 0);\r\n const zMax = Math.min((tmp + radLim) | 0, maxVoxelZ);\r\n\r\n let dz = zMin * gridSpacing - posRad[ind + 2];\r\n for (let z = zMin; z <= zMax; ++z, dz += gridSpacing) {\r\n let dy = yMin * gridSpacing - posRad[ind + 1];\r\n for (let y = yMin; y <= yMax; ++y, dy += gridSpacing) {\r\n const dy2dz2 = dy * dy + dz * dz;\r\n\r\n if (dy2dz2 >= radLim2) {\r\n continue;\r\n }\r\n\r\n let addr = volMap.getDirectIdx(xMin, y, z);\r\n let texAddr = volTexMap.getDirectIdx(xMin, y, z);\r\n let dx = xMin * gridSpacing - posRad[ind];\r\n for (let x = xMin; x <= xMax; ++x, dx += gridSpacing, addr += strideX, texAddr += texStrideX) {\r\n const r2 = dx * dx + dy2dz2;\r\n const expVal = -r2 * radInv;\r\n\r\n let density = Math.exp(expVal) * atomicNumFactor;\r\n\r\n // store most relevant atom (with highest density)\r\n if (this._visibilitySelector != null\r\n && density > atomWeightData[addr]) { // NOSONAR\r\n atomWeightData[addr] = density;\r\n // we use same index into atom map and atomWeightMap\r\n atomMap[addr] = packedArrays.atoms[i];\r\n }\r\n\r\n volData[addr] += density;\r\n\r\n // TODO check for volTexMap routine?\r\n density *= invIsoValue;\r\n const colInd = i * 3;\r\n volTexData[texAddr] += density * colors[colInd];\r\n volTexData[texAddr + 1] += density * colors[colInd + 1];\r\n volTexData[texAddr + 2] += density * colors[colInd + 2];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _shiftByOrigin(posRadArray) {\r\n const originX = this.origin.x;\r\n const originY = this.origin.y;\r\n const originZ = this.origin.z;\r\n\r\n const itemSize = 4;\r\n const itemsCount = posRadArray.length / itemSize;\r\n for (let i = 0; i < itemsCount; ++i) {\r\n const ind = i * itemSize;\r\n\r\n posRadArray[ind] -= originX;\r\n posRadArray[ind + 1] -= originY;\r\n posRadArray[ind + 2] -= originZ;\r\n }\r\n }\r\n}\r\n\r\nexport default QuickSurfGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\n/**\r\n * Modifed from SpatialHash\r\n *\r\n * Main differences are:\r\n * - Optimized grid size to ensure we only ever need to look +/-1 cell\r\n * - Aware of atomic radii and will only output atoms within rAtom + rExtra\r\n * (see withinRadii method)\r\n *\r\n * (Uses rounding rather than bitshifting as consequence of arbitrary grid size)\r\n * @class\r\n * @param {Float32Array} posRad - x, y, z coordinates and radiuses\r\n * @param {Float32Array} min - xyz min coordinates\r\n * @param {Float32Array} max - xyz max coordinates\r\n * @param {number} maxDistance - max distance\r\n */\r\nfunction AVHash(posRad, min, max, maxDistance) {\r\n const itemSize = 4;\r\n const nAtoms = posRad.length / itemSize;\r\n\r\n const minX = min[0];\r\n const minY = min[1];\r\n const minZ = min[2];\r\n\r\n const maxX = max[0];\r\n const maxY = max[1];\r\n const maxZ = max[2];\r\n\r\n function hashFunc(w, minW) {\r\n return Math.floor((w - minW) / maxDistance);\r\n }\r\n\r\n const iDim = hashFunc(maxX, minX) + 1;\r\n const jDim = hashFunc(maxY, minY) + 1;\r\n const kDim = hashFunc(maxZ, minZ) + 1;\r\n\r\n const nCells = iDim * jDim * kDim;\r\n\r\n const jkDim = jDim * kDim;\r\n\r\n /* Get cellID for cartesian x,y,z */\r\n const cellID = function (x, y, z) {\r\n return (((hashFunc(x, minX) * jDim) + hashFunc(y, minY)) * kDim) + hashFunc(z, minZ);\r\n };\r\n\r\n /* Initial building, could probably be optimized further */\r\n const preHash = [];\r\n let i;\r\n let cid;\r\n for (i = 0; i < nAtoms; i++) {\r\n const iIdx = itemSize * i;\r\n cid = cellID(posRad[iIdx], posRad[iIdx + 1], posRad[iIdx + 2]);\r\n\r\n if (preHash[cid] === undefined) {\r\n preHash[cid] = [i];\r\n } else {\r\n preHash[cid].push(i);\r\n }\r\n }\r\n\r\n const cellOffsets = utils.allocateTyped(Uint32Array, nCells);\r\n const cellLengths = utils.allocateTyped(Uint16Array, nCells);\r\n const data = utils.allocateTyped(Uint32Array, nAtoms);\r\n\r\n let offset = 0;\r\n let maxCellLength = 0;\r\n let j;\r\n for (i = 0; i < nCells; i++) {\r\n const start = cellOffsets[i] = offset;\r\n\r\n const subArray = preHash[i];\r\n\r\n if (subArray !== undefined) {\r\n for (j = 0; j < subArray.length; j++) {\r\n data[offset] = subArray[j];\r\n offset++;\r\n }\r\n }\r\n\r\n const cellLength = offset - start;\r\n cellLengths[i] = cellLength;\r\n\r\n if (cellLength > maxCellLength) {\r\n maxCellLength = cellLength;\r\n }\r\n }\r\n\r\n // Maximum number of neighbours we could ever produce (27 adjacent cells of equal population)\r\n this.neighbourListLength = (27 * maxCellLength) + 1;\r\n\r\n /**\r\n * Populate the supplied out array with atom indices that are within rAtom + rExtra\r\n * of x,y,z\r\n *\r\n * -1 in out array indicates the end of the list\r\n *\r\n * @param {number} x - x coordinate\r\n * @param {number} y - y coordinate\r\n * @param {number} z - z coordinate\r\n * @param {number} rExtra - additional radius\r\n * @param {Float32Array} out - pre-allocated output array\r\n * @return {undefined}\r\n */\r\n this.withinRadii = function (x, y, z, rExtra, out) {\r\n let outIdx = 0;\r\n\r\n const nearI = hashFunc(x, minX);\r\n const nearJ = hashFunc(y, minY);\r\n const nearK = hashFunc(z, minZ);\r\n\r\n const loI = Math.max(0, nearI - 1);\r\n const loJ = Math.max(0, nearJ - 1);\r\n const loK = Math.max(0, nearK - 1);\r\n\r\n const hiI = Math.min(iDim - 1, nearI + 1);\r\n const hiJ = Math.min(jDim - 1, nearJ + 1);\r\n const hiK = Math.min(kDim - 1, nearK + 1);\r\n\r\n for (i = loI; i <= hiI; ++i) {\r\n const iOffset = i * jkDim;\r\n\r\n for (j = loJ; j <= hiJ; ++j) {\r\n const jOffset = j * kDim;\r\n\r\n for (let k = loK; k <= hiK; ++k) {\r\n cid = iOffset + jOffset + k;\r\n\r\n const cellStart = cellOffsets[cid];\r\n const cellEnd = cellStart + cellLengths[cid];\r\n\r\n for (let dataIndex = cellStart; dataIndex < cellEnd; dataIndex++) {\r\n const atomIndex = data[dataIndex];\r\n const baseIndex = itemSize * atomIndex;\r\n const dx = posRad[baseIndex] - x;\r\n const dy = posRad[baseIndex + 1] - y;\r\n const dz = posRad[baseIndex + 2] - z;\r\n const rSum = posRad[baseIndex + 3] + rExtra;\r\n\r\n if ((dx * dx + dy * dy + dz * dz) <= (rSum * rSum)) {\r\n out[outIdx++] = data[dataIndex];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // Add terminator\r\n out[outIdx] = -1;\r\n };\r\n}\r\nfunction ContactSurface(packedArrays, boundaries, params, _indexList) {\r\n // Field generation method adapted from AstexViewer (Mike Hartshorn)\r\n // by Fred Ludlow.\r\n // Other parts based heavily on NGL (Alexander Rose) EDT Surface class\r\n //\r\n // Should work as a drop-in alternative to EDTSurface (though some of\r\n // the EDT paramters are not relevant in this method).\r\n\r\n const itemSize = 4;\r\n const { posRad, colors, atoms } = packedArrays;\r\n const nAtoms = posRad.length / itemSize;\r\n\r\n const { bbox } = boundaries;\r\n\r\n const min = bbox.minPosRad;\r\n const max = bbox.maxPosRad;\r\n\r\n let r2; // Atom positions, expanded radii (squared)\r\n let maxRadius;\r\n\r\n // Parameters\r\n let probeRadius;\r\n let scaleFactor;\r\n let probePositions;\r\n\r\n // Cache last value for obscured test\r\n let lastClip = -1;\r\n\r\n // Grid params\r\n let dim;\r\n let grid;\r\n let volTex;\r\n let weights;\r\n let weightsMap = null;\r\n let atomMap = null;\r\n let visibilitySelector = null;\r\n\r\n // grid indices -> xyz coords\r\n let gridx;\r\n let gridy;\r\n let gridz;\r\n\r\n // Lookup tables:\r\n let sinTable;\r\n let cosTable;\r\n\r\n // Spatial Hash\r\n let hash;\r\n\r\n // Neighbour array to be filled by hash\r\n let neighbours;\r\n\r\n // Vectors for Torus Projection\r\n const mid = new THREE.Vector3(0.0, 0.0, 0.0);\r\n const n1 = new THREE.Vector3(0.0, 0.0, 0.0);\r\n const n2 = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n let ngTorus;\r\n\r\n function uniformArray(TypeName, n, a) {\r\n const array = utils.allocateTyped(TypeName, n);\r\n for (let innI = 0; innI < n; ++innI) {\r\n array[innI] = a;\r\n }\r\n\r\n return array;\r\n }\r\n\r\n function fillGridDim(a, start, step) {\r\n for (let innI = 0; innI < a.length; innI++) {\r\n a[innI] = start + (step * innI);\r\n }\r\n }\r\n\r\n function initializeGrid() {\r\n ({ scaleFactor } = params);\r\n ({ dim } = boundaries);\r\n\r\n ngTorus = Math.min(5, 2 + Math.floor(probeRadius * scaleFactor));\r\n\r\n const gridSize = dim[0] * dim[1] * dim[2];\r\n grid = uniformArray(Float32Array, gridSize, -1001.0);\r\n volTex = utils.allocateTyped(Float32Array, gridSize * 3);\r\n weights = utils.allocateTyped(Float32Array, gridSize);\r\n if (visibilitySelector) {\r\n weightsMap = utils.allocateTyped(Float32Array, gridSize);\r\n atomMap = [];\r\n }\r\n\r\n gridx = utils.allocateTyped(Float32Array, dim[0]);\r\n gridy = utils.allocateTyped(Float32Array, dim[1]);\r\n gridz = utils.allocateTyped(Float32Array, dim[2]);\r\n\r\n fillGridDim(gridx, min[0], 1 / scaleFactor);\r\n fillGridDim(gridy, min[1], 1 / scaleFactor);\r\n fillGridDim(gridz, min[2], 1 / scaleFactor);\r\n }\r\n\r\n function initializeAngleTables() {\r\n let theta = 0.0;\r\n const step = 2 * Math.PI / probePositions;\r\n\r\n cosTable = utils.allocateTyped(Float32Array, probePositions);\r\n sinTable = utils.allocateTyped(Float32Array, probePositions);\r\n for (let innI = 0; innI < probePositions; innI++) {\r\n cosTable[innI] = Math.cos(theta);\r\n sinTable[innI] = Math.sin(theta);\r\n theta += step;\r\n }\r\n }\r\n\r\n function initializeHash() {\r\n hash = new AVHash(posRad, min, max, 2.01 * maxRadius);\r\n neighbours = new Int32Array(hash.neighbourListLength);\r\n }\r\n\r\n function init() {\r\n ({\r\n probeRadius,\r\n scaleFactor,\r\n probePositions,\r\n visibilitySelector,\r\n } = params);\r\n r2 = utils.allocateTyped(Float32Array, nAtoms);\r\n maxRadius = 0;\r\n for (let innI = 0; innI < nAtoms; ++innI) {\r\n const rExt = posRad[innI * itemSize + 3] += probeRadius;\r\n if (rExt > maxRadius) {\r\n maxRadius = rExt;\r\n }\r\n r2[innI] = rExt * rExt;\r\n }\r\n\r\n initializeGrid();\r\n initializeAngleTables();\r\n initializeHash();\r\n\r\n lastClip = -1;\r\n }\r\n\r\n function singleAtomObscures(ai, innX, innY, innZ) {\r\n const innCI = itemSize * ai;\r\n const ra2 = r2[ai];\r\n const dx = posRad[innCI] - innX;\r\n const dy = posRad[innCI + 1] - innY;\r\n const dz = posRad[innCI + 2] - innZ;\r\n const d2 = dx * dx + dy * dy + dz * dz;\r\n\r\n return d2 < ra2;\r\n }\r\n\r\n function obscured(innX, innY, innZ, a, b) {\r\n // Is the point at x,y,z obscured by any of the atoms\r\n // specifeid by indices in neighbours. Ignore indices\r\n // a and b (these are the relevant atoms in projectPoints/Torii)\r\n\r\n // Cache the last clipped atom (as very often the same one in\r\n // subsequent calls)\r\n let ai;\r\n\r\n if (lastClip !== -1) {\r\n ai = lastClip;\r\n if (ai !== a && ai !== b && singleAtomObscures(ai, innX, innY, innZ)) {\r\n return ai;\r\n }\r\n lastClip = -1;\r\n }\r\n\r\n let ni = 0;\r\n ai = neighbours[ni];\r\n while (ai >= 0) {\r\n if (ai !== a && ai !== b && singleAtomObscures(ai, innX, innY, innZ)) {\r\n lastClip = ai;\r\n return ai;\r\n }\r\n ai = neighbours[++ni];\r\n }\r\n\r\n lastClip = -1;\r\n\r\n return -1;\r\n }\r\n\r\n function projectPoints() {\r\n // For each atom:\r\n // Iterate over a subsection of the grid, for each point:\r\n // If current value < 0.0, unvisited, set positive\r\n //\r\n // In any case: Project this point onto surface of the atomic sphere\r\n // If this projected point is not obscured by any other atom\r\n // Calcualte delta distance and set grid value to minimum of\r\n // itself and delta\r\n\r\n // Should we alias frequently accessed closure constiables??\r\n // Assume JS engine capable of optimizing this\r\n // anyway...\r\n const maxRad = 4.0;\r\n const sigma = (maxRad) / 3;\r\n const sigma2Inv = 1 / (2 * sigma * sigma);\r\n\r\n for (let innI = 0; innI < nAtoms; innI++) {\r\n const innCI = itemSize * innI;\r\n const ax = posRad[innCI];\r\n const ay = posRad[innCI + 1];\r\n const az = posRad[innCI + 2];\r\n const ar = posRad[innCI + 3];\r\n const ar2 = r2[innI];\r\n\r\n hash.withinRadii(ax, ay, az, ar, neighbours);\r\n\r\n // Number of grid points, round this up...\r\n const ng = Math.ceil(ar * scaleFactor);\r\n\r\n // Center of the atom, mapped to grid points (take floor)\r\n const iax = Math.floor(scaleFactor * (ax - min[0]));\r\n const iay = Math.floor(scaleFactor * (ay - min[1]));\r\n const iaz = Math.floor(scaleFactor * (az - min[2]));\r\n\r\n // Extents of grid to consider for this atom\r\n const minx = Math.max(0, iax - ng);\r\n const miny = Math.max(0, iay - ng);\r\n const minz = Math.max(0, iaz - ng);\r\n\r\n // Add two to these points:\r\n // - iax are floor'd values so this ensures coverage\r\n // - these are loop limits (exclusive)\r\n const maxx = Math.min(dim[0], iax + ng + 2);\r\n const maxy = Math.min(dim[1], iay + ng + 2);\r\n const maxz = Math.min(dim[2], iaz + ng + 2);\r\n\r\n const colIdx = innI * 3;\r\n const cr = colors[colIdx];\r\n const cg = colors[colIdx + 1];\r\n const cb = colors[colIdx + 2];\r\n\r\n for (let iz = minz; iz < maxz; iz++) {\r\n const dz = gridz[iz] - az;\r\n const zOffset = dim[1] * dim[0] * iz;\r\n\r\n for (let iy = miny; iy < maxy; iy++) {\r\n const dy = gridy[iy] - ay;\r\n const dzy2 = dz * dz + dy * dy;\r\n const zyOffset = zOffset + dim[0] * iy;\r\n\r\n for (let ix = minx; ix < maxx; ix++) {\r\n const idx = ix + zyOffset;\r\n const dx = gridx[ix] - ax;\r\n const d2 = dzy2 + dx * dx;\r\n\r\n if (d2 < ar2) {\r\n const w = Math.exp(-d2 * sigma2Inv);\r\n const cIdx = idx * 3;\r\n volTex[cIdx] += cr * w;\r\n volTex[cIdx + 1] += cg * w;\r\n volTex[cIdx + 2] += cb * w;\r\n weights[idx] += w;\r\n if (visibilitySelector !== null && w > weightsMap[idx]) {\r\n weightsMap[idx] = w;\r\n atomMap[idx] = atoms[innI];\r\n }\r\n\r\n if (grid[idx] < 0.0) {\r\n // Unvisited, make positive\r\n grid[idx] = -grid[idx];\r\n }\r\n // Project on to the surface of the sphere\r\n // sp is the projected point ( dx, dy, dz ) * ( ra / d )\r\n const d = Math.sqrt(d2);\r\n const ap = ar / d;\r\n let spx = dx * ap;\r\n let spy = dy * ap;\r\n let spz = dz * ap;\r\n\r\n spx += ax;\r\n spy += ay;\r\n spz += az;\r\n\r\n if (obscured(spx, spy, spz, innI, -1) === -1) {\r\n const dd = ar - d;\r\n if (dd < grid[idx]) {\r\n grid[idx] = dd;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function normalToLine(out, p) {\r\n out.x = out.y = out.z = 1.0;\r\n if (p.x !== 0) {\r\n out.x = (p.y + p.z) / -p.x;\r\n } else if (p.y !== 0) {\r\n out.y = (p.x + p.z) / -p.y;\r\n } else if (p.z !== 0) {\r\n out.z = (p.x + p.y) / -p.z;\r\n }\r\n return out;\r\n }\r\n\r\n function projectTorus(a, b) {\r\n const aIdx = itemSize * a;\r\n const bIdx = itemSize * b;\r\n const xa = posRad[aIdx];\r\n const ya = posRad[aIdx + 1];\r\n const za = posRad[aIdx + 2];\r\n const r1 = posRad[aIdx + 3];\r\n let dx = mid.x = posRad[bIdx] - xa;\r\n let dy = mid.y = posRad[bIdx + 1] - ya;\r\n let dz = mid.z = posRad[bIdx + 2] - za;\r\n const innR2 = posRad[bIdx + 3];\r\n let d2 = dx * dx + dy * dy + dz * dz;\r\n\r\n // This check now redundant as already done in AVHash.withinRadii\r\n // if( d2 > (( r1 + r2 ) * ( r1 + r2 )) ){ return; }\r\n\r\n const d = Math.sqrt(d2);\r\n\r\n // Find angle between a->b vector and the circle\r\n // of their intersection by cosine rule\r\n const cosA = (r1 * r1 + d * d - innR2 * innR2) / (2.0 * r1 * d);\r\n\r\n // distance along a->b at intersection\r\n const dmp = r1 * cosA;\r\n\r\n mid.normalize();\r\n\r\n // Create normal to line\r\n normalToLine(n1, mid);\r\n n1.normalize();\r\n\r\n // Cross together for second normal vector\r\n n2.crossVectors(mid, n1);\r\n n2.normalize();\r\n\r\n // r is radius of circle of intersection\r\n const rInt = Math.sqrt(r1 * r1 - dmp * dmp);\r\n\r\n n1.multiplyScalar(rInt);\r\n n2.multiplyScalar(rInt);\r\n mid.multiplyScalar(dmp);\r\n\r\n mid.x += xa;\r\n mid.y += ya;\r\n mid.z += za;\r\n\r\n lastClip = -1;\r\n\r\n const ng = ngTorus;\r\n\r\n for (let innI = 0; innI < probePositions; innI++) {\r\n const cost = cosTable[innI];\r\n const sint = sinTable[innI];\r\n\r\n const px = mid.x + cost * n1.x + sint * n2.x;\r\n const py = mid.y + cost * n1.y + sint * n2.y;\r\n const pz = mid.z + cost * n1.z + sint * n2.z;\r\n\r\n if (obscured(px, py, pz, a, b) === -1) {\r\n // As above, iterate over our grid...\r\n // px, py, pz in grid coords\r\n const iax = Math.floor(scaleFactor * (px - min[0]));\r\n const iay = Math.floor(scaleFactor * (py - min[1]));\r\n const iaz = Math.floor(scaleFactor * (pz - min[2]));\r\n\r\n const minx = Math.max(0, iax - ng);\r\n const miny = Math.max(0, iay - ng);\r\n const minz = Math.max(0, iaz - ng);\r\n\r\n const maxx = Math.min(dim[0], iax + ng + 2);\r\n const maxy = Math.min(dim[1], iay + ng + 2);\r\n const maxz = Math.min(dim[2], iaz + ng + 2);\r\n\r\n for (let iz = minz; iz < maxz; iz++) {\r\n dz = pz - gridz[iz];\r\n const zOffset = dim[1] * dim[0] * iz;\r\n for (let iy = miny; iy < maxy; iy++) {\r\n dy = py - gridy[iy];\r\n const dzy2 = dz * dz + dy * dy;\r\n const zyOffset = zOffset + dim[0] * iy;\r\n for (let ix = minx; ix < maxx; ix++) {\r\n dx = px - gridx[ix];\r\n d2 = dzy2 + dx * dx;\r\n const idx = ix + zyOffset;\r\n const current = grid[idx];\r\n\r\n if (current > 0.0 && d2 < (current * current)) {\r\n grid[idx] = Math.sqrt(d2);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function projectTorii() {\r\n for (let innI = 0; innI < nAtoms; innI++) {\r\n const innIdx = itemSize * innI;\r\n hash.withinRadii(\r\n posRad[innIdx],\r\n posRad[innIdx + 1],\r\n posRad[innIdx + 2],\r\n posRad[innIdx + 3],\r\n neighbours,\r\n );\r\n let ia = 0;\r\n let ni = neighbours[ia];\r\n while (ni >= 0) {\r\n if (innI < ni) {\r\n projectTorus(innI, ni);\r\n }\r\n ni = neighbours[++ia];\r\n }\r\n }\r\n }\r\n\r\n function fixNegatives() {\r\n for (let innI = 0, n = grid.length; innI < n; innI++) {\r\n if (grid[innI] < 0) grid[innI] = 0;\r\n let w = weights[innI];\r\n if (w > 0) {\r\n w = 1 / w;\r\n const innInnI = innI * 3;\r\n volTex[innInnI] *= w;\r\n volTex[innInnI + 1] *= w;\r\n volTex[innInnI + 2] *= w;\r\n }\r\n }\r\n }\r\n\r\n function getVolume() {\r\n // Basic steps are:\r\n // 1) Initialize\r\n // 2) Project points\r\n // 3) Project torii\r\n console.time('ContactSurface.getVolume');\r\n\r\n console.time('ContactSurface.init');\r\n init();\r\n console.timeEnd('ContactSurface.init');\r\n\r\n console.time('ContactSurface.projectPoints');\r\n projectPoints();\r\n console.timeEnd('ContactSurface.projectPoints');\r\n\r\n console.time('ContactSurface.projectTorii');\r\n projectTorii();\r\n console.timeEnd('ContactSurface.projectTorii');\r\n fixNegatives();\r\n console.timeEnd('ContactSurface.getVolume');\r\n }\r\n\r\n this.build = function () {\r\n // type and cutoff left in for compatibility with EDTSurface.getSurface\r\n // function signature\r\n getVolume();\r\n this.volTexMap = volTex;\r\n this.weightsMap = weightsMap;\r\n this.atomMap = atomMap;\r\n this.volMap = grid;\r\n };\r\n}\r\nexport default ContactSurface;\r\n","import VolumeSurfaceGeometry from './VolumeSurfaceGeometry';\r\nimport ContactSurface from './ContactSurface';\r\nimport chem from '../../chem';\r\n\r\nconst { Volume } = chem;\r\n\r\n/**\r\n * This class implements 'contact' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass ContactSurfaceGeometry extends VolumeSurfaceGeometry {\r\n _computeSurface(packedArrays, box, boundaries, params) {\r\n const contactSurface = new ContactSurface(packedArrays, boundaries, params);\r\n contactSurface.build();\r\n\r\n const surface = {\r\n volMap: new Volume(Float32Array, this.numVoxels, box, 1, contactSurface.volMap),\r\n volTexMap: new Volume(Float32Array, this.numVoxels, box, 3, contactSurface.volTexMap),\r\n atomMap: contactSurface.atomMap,\r\n atomWeightMap: new Volume(Float32Array, this.numVoxels, box, 1, contactSurface.weightsMap),\r\n };\r\n return surface;\r\n }\r\n}\r\n\r\nexport default ContactSurfaceGeometry;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Class for colored atom. Need for atom structure clusterization\r\n *\r\n * @param {Vector3} vCenter Center of atom\r\n * @param {number} radiusAt Radius of atom\r\n */\r\nclass IsoSurfaceAtomColored {\r\n constructor(vCenter, radiusAt) {\r\n this.coord = new THREE.Vector3();\r\n this.coord.copy(vCenter);\r\n this.radius = radiusAt;\r\n this.colorX = 0.99999;\r\n this.colorY = 0.0;\r\n this.colorZ = 0.0;\r\n this.atomType = 0;\r\n this.srcAtom = null;\r\n }\r\n}\r\nexport default IsoSurfaceAtomColored;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\n// suppress some JSHint warnings\r\n/* jshint bitwise: false */\r\n\r\n/**\r\n * Build normals for isosurface, using atoms information\r\n *\r\n * @param {number} numAtoms - Number of atoms in molecule\r\n * @param {Element} atoms - Array of atoms\r\n * @param {Vector3} vBoxMin - Bounding box min\r\n * @param {Vector3} vBoxMax - Bounding box max\r\n * @param {number} probeRadius - Normals for output\r\n *\r\n */\r\nclass IsosurfaceBuildNormals {\r\n constructor(numAtoms, atoms, vBoxMin, vBoxMax, probeRadius) {\r\n this._numAtoms = numAtoms;\r\n this._atoms = atoms;\r\n this._vBoxMin = new THREE.Vector3();\r\n this._vBoxMax = new THREE.Vector3();\r\n this._vBoxMin.copy(vBoxMin);\r\n this._vBoxMax.copy(vBoxMax);\r\n this._probeRadius = probeRadius;\r\n\r\n this._atomsList = null;\r\n this._voxelList = null;\r\n }\r\n\r\n createVoxels() {\r\n let numAtomsRefs;\r\n let rad;\r\n const ATOM_VOXEL_REF_SCALE = 4.5;\r\n\r\n const numAtoms = this._numAtoms | 0;\r\n const atoms = this._atoms;\r\n const dx = this._vBoxMax.x - this._vBoxMin.x;\r\n const dy = this._vBoxMax.y - this._vBoxMin.y;\r\n const dz = this._vBoxMax.z - this._vBoxMin.z;\r\n let w = (dx < dy) ? dx : dy;\r\n w = (dz < w) ? dz : w;\r\n let maxRad = 0.0;\r\n let aveRad = 0.0;\r\n\r\n let i;\r\n for (i = 0; i < numAtoms; i++) {\r\n rad = (atoms[i].radius + this._probeRadius) * 2.0;\r\n maxRad = (rad > maxRad) ? rad : maxRad;\r\n aveRad += rad;\r\n }\r\n let numCells = Math.floor(w / maxRad);\r\n if (numCells < 2) {\r\n numCells = 2;\r\n }\r\n aveRad /= numAtoms;\r\n\r\n this._numCells = numCells;\r\n this._aveRad = aveRad;\r\n this._maxRad = maxRad;\r\n\r\n const side = numCells;\r\n const side2 = numCells * numCells;\r\n const side3 = numCells * numCells * numCells;\r\n\r\n const xScale = this._xScale = 1.0 / (this._vBoxMax.x - this._vBoxMin.x);\r\n const yScale = this._yScale = 1.0 / (this._vBoxMax.y - this._vBoxMin.y);\r\n const zScale = this._zScale = 1.0 / (this._vBoxMax.z - this._vBoxMin.z);\r\n\r\n // estimate number of individual atom refs in each voxel list\r\n let maxAtomsRefs = 0;\r\n\r\n const xNumVoxMult = xScale * numCells;\r\n const yNumVoxMult = yScale * numCells;\r\n const zNumVoxMult = zScale * numCells;\r\n\r\n for (i = 0; i < numAtoms; i++) {\r\n const radAffect = (atoms[i].radius + this._probeRadius) * ATOM_VOXEL_REF_SCALE;\r\n const diaAffect = radAffect * 2.0;\r\n let numVoxX = Math.floor(xNumVoxMult * diaAffect + 0.8);\r\n let numVoxY = Math.floor(yNumVoxMult * diaAffect + 0.8);\r\n let numVoxZ = Math.floor(zNumVoxMult * diaAffect + 0.8);\r\n // avoid case numVox? == 0\r\n // also use loop i <=\r\n numVoxX++;\r\n numVoxY++;\r\n numVoxZ++;\r\n maxAtomsRefs += numVoxX * numVoxY * numVoxZ;\r\n } // for (i)\r\n // maxAtomsRefs = numAtoms * MAX_ATOMS_IN_SINGLE_VOXEL;\r\n\r\n this._voxelList = utils.allocateTyped(Int32Array, side3);\r\n const atomsList = [];\r\n atomsList.length = maxAtomsRefs;\r\n if ((this._voxelList === null) || (atomsList === null)) {\r\n return 0 - 1;\r\n }\r\n // init voxel list\r\n for (i = 0; i < side3; i++) {\r\n this._voxelList[i] = -1;\r\n }\r\n numAtomsRefs = 0;\r\n\r\n // create voxel lists\r\n for (i = 0; i < numAtoms; i++) {\r\n // use multiplier 4 to locate this atom in different voxels\r\n rad = (atoms[i].radius + this._probeRadius) * ATOM_VOXEL_REF_SCALE;\r\n let xIndMin = Math.floor((atoms[i].coord.x - this._vBoxMin.x - rad) * numCells * xScale);\r\n let yIndMin = Math.floor((atoms[i].coord.y - this._vBoxMin.y - rad) * numCells * yScale);\r\n let zIndMin = Math.floor((atoms[i].coord.z - this._vBoxMin.z - rad) * numCells * zScale);\r\n let xIndMax = Math.floor((atoms[i].coord.x - this._vBoxMin.x + rad) * numCells * xScale);\r\n let yIndMax = Math.floor((atoms[i].coord.y - this._vBoxMin.y + rad) * numCells * yScale);\r\n let zIndMax = Math.floor((atoms[i].coord.z - this._vBoxMin.z + rad) * numCells * zScale);\r\n\r\n xIndMin = (xIndMin >= 0) ? xIndMin : 0;\r\n yIndMin = (yIndMin >= 0) ? yIndMin : 0;\r\n zIndMin = (zIndMin >= 0) ? zIndMin : 0;\r\n\r\n xIndMax = (xIndMax < numCells) ? xIndMax : (numCells - 1);\r\n yIndMax = (yIndMax < numCells) ? yIndMax : (numCells - 1);\r\n zIndMax = (zIndMax < numCells) ? zIndMax : (numCells - 1);\r\n\r\n for (let z = zIndMin; z <= zIndMax; z++) {\r\n for (let y = yIndMin; y <= yIndMax; y++) {\r\n for (let x = xIndMin; x <= xIndMax; x++) {\r\n // add atom with index \"i\" to this voxel list\r\n const indVoxel = x + y * side + z * side2;\r\n // assert indVoxel >= 0\r\n // assert indVoxel < side3\r\n\r\n // add first\r\n if (this._voxelList[indVoxel] < 0) {\r\n atomsList[numAtomsRefs * 2 + 0] = i;\r\n atomsList[numAtomsRefs * 2 + 1] = 0 - 1;\r\n this._voxelList[indVoxel] = numAtomsRefs;\r\n numAtomsRefs++;\r\n // assert numAtomsRefs < maxAtomsRefs - 1\r\n continue;\r\n }\r\n // insert into head of list\r\n const indexNext = this._voxelList[indVoxel];\r\n this._voxelList[indVoxel] = numAtomsRefs;\r\n atomsList[numAtomsRefs * 2 + 0] = i;\r\n atomsList[numAtomsRefs * 2 + 1] = indexNext;\r\n numAtomsRefs++;\r\n } // for (x)\r\n } // for (y)\r\n } // for (z)\r\n } // for (i)\r\n\r\n // convert Array to Int32Array\r\n this._atomsList = Int32Array.from(atomsList);\r\n\r\n return 0;\r\n }\r\n\r\n destroyVoxels() {\r\n this._atomsList = null;\r\n this._voxelList = null;\r\n\r\n this._atoms = null;\r\n this._vertices = null;\r\n this._vBoxMin = null;\r\n this._vBoxMax = null;\r\n }\r\n\r\n /**\r\n * Enumerate all atoms affecting specified point\r\n *\r\n * @param {Vector3} point - point in 3D\r\n * @param {func(atom)} process - function to call for each atom\r\n */\r\n forEachRelatedAtom(point, process) {\r\n // find corresponding voxel\r\n const xInd = Math.floor((point.x - this._vBoxMin.x) * this._numCells * this._xScale);\r\n const yInd = Math.floor((point.y - this._vBoxMin.y) * this._numCells * this._yScale);\r\n const zInd = Math.floor((point.z - this._vBoxMin.z) * this._numCells * this._zScale);\r\n const indVoxel = xInd + yInd * this._numCells + zInd * this._numCells * this._numCells;\r\n\r\n // run through atoms affecting this voxel\r\n const atoms = this._atoms;\r\n for (let ref = this._voxelList[indVoxel]; ref >= 0; ref = this._atomsList[ref * 2 + 1]) {\r\n const indexAtom = this._atomsList[ref * 2];\r\n process(atoms[indexAtom]);\r\n }\r\n }\r\n\r\n /**\r\n * Get atom closest to specified point\r\n *\r\n * @param {Vector3} point - point in 3D\r\n *\r\n * @returns {IsoSurfaceAtomColored} atom, or null if not found\r\n */\r\n getClosestAtom(point) {\r\n let closest = null;\r\n let minDist2 = Number.MAX_VALUE;\r\n\r\n this.forEachRelatedAtom(point, (atom) => {\r\n const dist2 = point.distanceToSquared(atom.coord);\r\n if (dist2 < minDist2) {\r\n minDist2 = dist2;\r\n closest = atom;\r\n }\r\n });\r\n\r\n return closest;\r\n }\r\n\r\n /**\r\n * Build normals for isosurface, using atoms information\r\n *\r\n * @param {number} numVertices - Number of vertices in final geometry (to render)\r\n * @param {Vector3} vertices - Geometry vertices (3d coordinates array)\r\n * @param {Vector3} normals - Normals for output\r\n *\r\n * @returns {number} 0, if success\r\n */\r\n buildNormals(numVertices, vertices, normals) {\r\n const self = this;\r\n let numCloseAtoms = 0;\r\n let vx = 0;\r\n let vy = 0;\r\n let vz = 0;\r\n let dist2;\r\n let vNormalX = 0;\r\n let vNormalY = 0;\r\n let vNormalZ = 0;\r\n let koef = 0;\r\n let w = 0;\r\n const r25 = 2.5;\r\n const r01 = 0.1;\r\n\r\n const maxRadAffect = this._aveRad * r25;\r\n const maxRadAffect2 = maxRadAffect * maxRadAffect;\r\n const expScale = -this._aveRad * r01;\r\n\r\n // some stats\r\n // numSlowAtoms = 0;\r\n\r\n const gatherNormals = function (atom) {\r\n const dx = vx - atom.coord.x;\r\n const dy = vy - atom.coord.y;\r\n const dz = vz - atom.coord.z;\r\n dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 > maxRadAffect2) {\r\n return;\r\n }\r\n\r\n // get weight for gaussian smoothing\r\n const rad = atom.radius + self._probeRadius;\r\n koef = dist2 - (rad * rad);\r\n if (koef < 0.0) {\r\n koef = -koef;\r\n }\r\n w = Math.exp(expScale * koef);\r\n\r\n vNormalX += dx * w;\r\n vNormalY += dy * w;\r\n vNormalZ += dz * w;\r\n numCloseAtoms++;\r\n };\r\n\r\n let maxClosedAtoms = 0;\r\n // process all vertices, one by one\r\n for (let i = 0; i < numVertices; i++) {\r\n vx = vertices[i].x;\r\n vy = vertices[i].y;\r\n vz = vertices[i].z;\r\n\r\n numCloseAtoms = 0;\r\n vNormalX = vNormalY = vNormalZ = 0.0;\r\n\r\n this.forEachRelatedAtom(vertices[i], gatherNormals);\r\n\r\n maxClosedAtoms = (numCloseAtoms > maxClosedAtoms) ? numCloseAtoms : maxClosedAtoms;\r\n\r\n // normalize vNormal\r\n dist2 = vNormalX * vNormalX + vNormalY * vNormalY + vNormalZ * vNormalZ;\r\n if (numCloseAtoms > 0) {\r\n koef = 1.0 / Math.sqrt(dist2);\r\n vNormalX *= koef;\r\n vNormalY *= koef;\r\n vNormalZ *= koef;\r\n }\r\n normals[i].x = vNormalX;\r\n normals[i].y = vNormalY;\r\n normals[i].z = vNormalZ;\r\n } // for (i) all vertices\r\n\r\n return 0;\r\n }\r\n\r\n /**\r\n * Build vertex colors for isosurface, using atoms information\r\n *\r\n * @param {number} numVertices - Number of vertices in final geometry (to render)\r\n * @param {Vector3} vertices - Geometry vertices (3d coordinates array)\r\n * @param {Vector3} colors - Colors for output\r\n * @param {number} radiusColorSmoothness - Radius of smoothness sphere\r\n *\r\n * @returns {number} 0, if success\r\n */\r\n buildColors(numVertices, vertices, colors, radiusColorSmoothness) {\r\n const self = this;\r\n let vx = 0.0;\r\n let vy = 0.0;\r\n let vz = 0.0;\r\n let koef = 0.0;\r\n let w = 0.0;\r\n const KOEF_ADD = 0.8;\r\n\r\n const maxRadAffect = radiusColorSmoothness;\r\n const maxRadAffect2 = maxRadAffect * maxRadAffect;\r\n\r\n let colorsClose = [];\r\n let weights = [];\r\n let weightsSum = 0;\r\n\r\n const gatherColors = function (atom) {\r\n const dx = vx - atom.coord.x;\r\n const dy = vy - atom.coord.y;\r\n const dz = vz - atom.coord.z;\r\n const dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 > maxRadAffect2) {\r\n return;\r\n }\r\n\r\n // get weight for gaussian smoothing\r\n const rad = atom.radius + self._probeRadius;\r\n koef = dist2 - (rad * rad);\r\n if (koef < 0.0) {\r\n koef = -koef;\r\n }\r\n w = 1.0 / (KOEF_ADD + koef);\r\n\r\n colorsClose.push([atom.colorX, atom.colorY, atom.colorZ]);\r\n weights.push(w); // save weights for use\r\n weightsSum += w; // calc sum of weights fo further normalization\r\n };\r\n\r\n // process all vertices, one by one\r\n for (let i = 0; i < numVertices; i++) {\r\n vx = vertices[i].x;\r\n vy = vertices[i].y;\r\n vz = vertices[i].z;\r\n\r\n colorsClose = [];\r\n weights = [];\r\n weightsSum = 0;\r\n\r\n this.forEachRelatedAtom(vertices[i], gatherColors);\r\n\r\n // normalized weighted sum of colors\r\n for (let j = 0; j < colorsClose.length; ++j) {\r\n const weightNormalized = weights[j] / weightsSum;\r\n colors[i].x += colorsClose[j][0] * weightNormalized;\r\n colors[i].y += colorsClose[j][1] * weightNormalized;\r\n colors[i].z += colorsClose[j][2] * weightNormalized;\r\n }\r\n } // for (i) all vertices\r\n return 0;\r\n }\r\n}\r\nexport default IsosurfaceBuildNormals;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Class for geometry (triangle mesh) representation\r\n *\r\n *\r\n * @param {number} maxNumVertices Maximum possible number of vertices in mesh\r\n * @param {number} maxNumTriangles Maximum possible number of triangles in mesh\r\n * @param {boolean} needVertexColors Obvious\r\n */\r\nclass IsoSurfaceGeo {\r\n constructor(maxNumVertices, maxNumTriangles, needVertexColors) {\r\n this._maxNumVertices = maxNumVertices;\r\n this._maxNumTriangles = maxNumTriangles;\r\n this._vertices = new Array(maxNumVertices);\r\n this._normals = new Array(maxNumVertices);\r\n this._colors = null;\r\n if (needVertexColors) {\r\n this._colors = new Array(maxNumVertices);\r\n }\r\n this._indices = new Array(maxNumTriangles * (1 + 2));\r\n this._numVertices = 0;\r\n this._numTriangles = 0;\r\n\r\n let i;\r\n for (i = 0; i < maxNumVertices; i++) {\r\n this._vertices[i] = new THREE.Vector3();\r\n this._normals[i] = new THREE.Vector3();\r\n }\r\n for (i = 0; i < maxNumTriangles * (1 + 2); i++) {\r\n this._indices[i] = -1;\r\n }\r\n if (needVertexColors) {\r\n for (i = 0; i < maxNumVertices; i++) {\r\n this._colors[i] = new THREE.Vector3();\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n this._vertices = null;\r\n this._normals = null;\r\n this._indices = null;\r\n }\r\n}\r\nexport default IsoSurfaceGeo;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceGeometry from './IsoSurfaceGeometry';\r\nimport IsoSurfaceAtomColored from './IsoSurfaceAtomColored';\r\nimport IsosurfaceBuildNormals from './IsosurfaceBuildNormals';\r\nimport IsoSurfaceMarchCube from './IsoSurfaceMarchCube';\r\nimport IsoSurfaceGeo from './IsoSurfaceGeo';\r\nimport chem from '../../chem';\r\nimport utils from '../../utils';\r\n\r\nconst COLOR_SIZE = 3;\r\nconst HASH_SIZE = 32768;\r\nconst { Element } = chem;\r\n\r\n/**\r\n * This class implements 'quick' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass SSIsosurfaceGeometry extends IsoSurfaceGeometry {\r\n _build() {\r\n // convert geoOut into arrays of positions, indices, normals\r\n this._innerBuild();\r\n const geoOut = this.getGeo();\r\n this.destroy();\r\n this._fromGeo(geoOut);\r\n }\r\n\r\n _fromGeo(geoOut) {\r\n let colors = null;\r\n const positions = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n const normals = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n if (geoOut._colors !== null) {\r\n colors = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n }\r\n const indices = utils.allocateTyped(Uint32Array, (1 + 2) * geoOut._numTriangles);\r\n\r\n for (let i = 0, j = 0; i < geoOut._numVertices; i++) {\r\n positions[j + 0] = (geoOut._vertices[i].x);\r\n positions[j + 1] = (geoOut._vertices[i].y);\r\n positions[j + 2] = (geoOut._vertices[i].z);\r\n normals[j + 0] = geoOut._normals[i].x;\r\n normals[j + 1] = geoOut._normals[i].y;\r\n normals[j + 2] = geoOut._normals[i].z;\r\n j += 3;\r\n }\r\n if (colors !== null) {\r\n for (let i = 0, j = 0; i < geoOut._numVertices; i++, j += 3) {\r\n colors[j + 0] = geoOut._colors[i].x;\r\n colors[j + 1] = geoOut._colors[i].y;\r\n colors[j + 2] = geoOut._colors[i].z;\r\n }\r\n }\r\n\r\n const numTri3 = geoOut._numTriangles * (1 + 2);\r\n for (let i = 0; i < numTri3; i++) {\r\n indices[i] = geoOut._indices[i];\r\n }\r\n\r\n this.setIndex(new THREE.BufferAttribute(indices, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(positions, 3));\r\n this.setAttribute('normal', new THREE.BufferAttribute(normals, 3));\r\n this.setAttribute('color', new THREE.BufferAttribute(colors, 3));\r\n this.computeBoundingBox();\r\n this.computeBoundingSphere();\r\n\r\n geoOut.destroy();\r\n }\r\n\r\n convertToAtomsColored(packedArrays, atomsColored) {\r\n const { atoms, colors } = packedArrays;\r\n for (let i = 0, numAtoms = atoms.length; i < numAtoms; i++) {\r\n const vCenter = atoms[i].position;\r\n const { radius } = atoms[i].element;\r\n atomsColored[i] = new IsoSurfaceAtomColored(vCenter, radius);\r\n const nm = atoms[i].element.number;\r\n atomsColored[i].atomType = this.getType(nm);\r\n let cIdx = COLOR_SIZE * i;\r\n atomsColored[i].colorX = colors[cIdx++];\r\n atomsColored[i].colorY = colors[cIdx++];\r\n atomsColored[i].colorZ = colors[cIdx];\r\n atomsColored[i].srcAtom = atoms[i];\r\n }\r\n }\r\n\r\n getGeo() {\r\n return this.geoOut;\r\n }\r\n\r\n destroy() {\r\n this.atoms = null;\r\n\r\n this.hashLines = null;\r\n this.hashEntries = null;\r\n }\r\n\r\n /**\r\n * Calculates bounding box for array with spheres (atoms)\r\n *\r\n * @param {Object} atoms Atoms array\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n */\r\n getBoundingBox(atoms, vBoxMin, vBoxMax) {\r\n const bigNum = 10000000.0;\r\n\r\n vBoxMin.x = vBoxMin.y = vBoxMin.z = bigNum;\r\n vBoxMax.x = vBoxMax.y = vBoxMax.z = 0 - bigNum;\r\n\r\n const probeRadius2 = this.probeRadius * this.atomRadiusScale;\r\n let radMax = 0.0;\r\n for (let i = 0, num = atoms.length; i < num; i++) {\r\n const vCenter = atoms[i].coord;\r\n const rad = atoms[i].radius + probeRadius2;\r\n radMax = (rad > radMax) ? rad : radMax;\r\n if (vCenter.x - rad < vBoxMin.x) {\r\n vBoxMin.x = vCenter.x - rad;\r\n }\r\n if (vCenter.y - rad < vBoxMin.y) {\r\n vBoxMin.y = vCenter.y - rad;\r\n }\r\n if (vCenter.z - rad < vBoxMin.z) {\r\n vBoxMin.z = vCenter.z - rad;\r\n }\r\n if (vCenter.x + rad > vBoxMax.x) {\r\n vBoxMax.x = vCenter.x + rad;\r\n }\r\n if (vCenter.y + rad > vBoxMax.y) {\r\n vBoxMax.y = vCenter.y + rad;\r\n }\r\n if (vCenter.z + rad > vBoxMax.z) {\r\n vBoxMax.z = vCenter.z + rad;\r\n }\r\n }\r\n vBoxMin.x -= radMax;\r\n vBoxMin.y -= radMax;\r\n vBoxMin.z -= radMax;\r\n vBoxMax.x += radMax;\r\n vBoxMax.y += radMax;\r\n vBoxMax.z += radMax;\r\n }\r\n\r\n /**\r\n * Calculate (x,y,z) cordinate of the cell corner point\r\n *\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n * @param {number} x Cell integer x coordinate\r\n * @param {number} y Cell integer y coordinate\r\n * @param {number} z Cell integer z coordinate\r\n * @param {number} numPoints NUm points in cell on side\r\n * @param {Vector3} vOut Output vector\r\n */\r\n getCornerCoord(vBoxMin, vBoxMax, x, y, z, numPoints, vOut) {\r\n const invNP = 1.0 / (numPoints - 1.0);\r\n const tx = x * invNP;\r\n const ty = y * invNP;\r\n const tz = z * invNP;\r\n\r\n vOut.x = vBoxMin.x * (1.0 - tx) + vBoxMax.x * tx;\r\n vOut.y = vBoxMin.y * (1.0 - ty) + vBoxMax.y * ty;\r\n vOut.z = vBoxMin.z * (1.0 - tz) + vBoxMax.z * tz;\r\n }\r\n\r\n /**\r\n * Calculate point of intersection of sphere surface\r\n * and cell edge, given by [indexA, indexB] line\r\n *\r\n * @param {number} indexA Cell vertex index in [0..11]\r\n * @param {number} indexB Cell vertex index in [0..11]\r\n * @param {array} sign Sign array for all 8 vertices\r\n * @param {object} cube Cube\r\n * @param {number} indexPointValue for value placement\r\n * @param {Vector3} vOut Point of intersection\r\n */\r\n buildEdgePoint(indexA, indexB, sign, cube, indexPointValue, vOut) {\r\n if (sign[indexA] ^ sign[indexB]) {\r\n const cTwentyFour = 24;\r\n const t = (0 - cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexA])\r\n / (cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexB]\r\n - cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexA]);\r\n const xa = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 0];\r\n const ya = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 1];\r\n const za = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 2];\r\n const xb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 0];\r\n const yb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 1];\r\n const zb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 2];\r\n\r\n vOut.x = xa * (1.0 - t) + xb * t;\r\n vOut.y = ya * (1.0 - t) + yb * t;\r\n vOut.z = za * (1.0 - t) + zb * t;\r\n }\r\n }\r\n\r\n /**\r\n * Check if triangle is visible (vertices are close to atoms included in visibility set)\r\n *\r\n * @param {Vector3} v0 Vertex #0\r\n * @param {Vector3} v1 Vertex #1\r\n * @param {Vector3} v2 Vertex #2\r\n * @returns {boolean} true if triangle is visible\r\n */\r\n isTriangleVisible(v0, v1, v2) {\r\n const a0 = this.voxelWorld.getClosestAtom(v0);\r\n const a1 = this.voxelWorld.getClosestAtom(v1);\r\n const a2 = this.voxelWorld.getClosestAtom(v2);\r\n if (a0 === null || a1 === null || a2 === null\r\n || a0.srcAtom === null || a1.srcAtom === null || a2.srcAtom === null) {\r\n return false;\r\n }\r\n\r\n return this.visibilitySelector.includesAtom(a0.srcAtom)\r\n && this.visibilitySelector.includesAtom(a1.srcAtom)\r\n && this.visibilitySelector.includesAtom(a2.srcAtom);\r\n }\r\n\r\n /**\r\n * Add triangle to result geometry\r\n *\r\n * @param {Vector3} v0 Vertex #0\r\n * @param {Vector3} v1 Vertex #1\r\n * @param {Vector3} v2 Vertex #2\r\n * @returns {boolean} false if no more triangles can be added\r\n */\r\n addTriangle(v0, v1, v2) {\r\n if (this.visibilitySelector && !this.isTriangleVisible(v0, v1, v2)) {\r\n return true;\r\n }\r\n\r\n const geo = this.geoOut;\r\n\r\n if (geo._numTriangles >= this.maxNumTriangles) {\r\n return false;\r\n }\r\n\r\n // Add vertex with optimize\r\n const indInGeo0 = this.addVertexToGeo(geo, v0);\r\n const indInGeo1 = this.addVertexToGeo(geo, v1);\r\n const indInGeo2 = this.addVertexToGeo(geo, v2);\r\n if ((indInGeo0 | indInGeo1 | indInGeo2) < 0) {\r\n return false;\r\n }\r\n\r\n const itr = 3 * geo._numTriangles;\r\n geo._indices[itr + 0] = indInGeo0;\r\n geo._indices[itr + 1] = indInGeo1;\r\n geo._indices[itr + 2] = indInGeo2;\r\n geo._numTriangles++;\r\n return true;\r\n }\r\n\r\n /**\r\n * Build result geometry (triangle mesh) from marching cube cells\r\n *\r\n * @param {number} meshRes Marchnig cube vertex count on each side\r\n * @param {Vector3} vBoxMin Bounding box point min\r\n * @param {Vector3} vBoxMax Bounding box point max\r\n * @param {number} corners float values array for each cube point\r\n * @param {Vector3} vCellStep vector to next cube cell diagonal point\r\n * @param {object} cube IsoSurfaceMarchCube object\r\n * @returns {number} 0, if success (<0) is error\r\n */\r\n buildGeoFromCorners(meshRes, vBoxMin, vBoxMax, corners, vCellStep, cube) {\r\n const arrSize = 12;\r\n const cNumVerts = 8;\r\n const numCells = meshRes - 1;\r\n const side = meshRes;\r\n const side2 = meshRes * meshRes;\r\n\r\n const vaEdges = new Array(arrSize);\r\n for (let i = 0; i < arrSize; i++) {\r\n vaEdges[i] = new THREE.Vector3();\r\n }\r\n const sign = [];\r\n for (let i = 0; i < cNumVerts; i++) {\r\n sign[i] = 1.0;\r\n }\r\n const vCorner = new THREE.Vector3();\r\n let indCell = 0;\r\n let indY = 0;\r\n for (let y = 0; y < numCells; y++, indY += side2) {\r\n let indZ = 0;\r\n for (let z = 0; z < numCells; z++, indZ += side) {\r\n for (let x = 0; x < numCells; x++) {\r\n if (!cube.hasIntersection[indCell]) {\r\n // next cell\r\n indCell++;\r\n continue;\r\n }\r\n const bitsInside = cube.bitsInside[indCell];\r\n\r\n this.getCornerCoord(vBoxMin, vBoxMax, x, y, z, meshRes, vCorner);\r\n\r\n const indPointValues = indCell * (2 << (2 + 2));\r\n for (let i = 0, j = 0; i < cNumVerts; i++) {\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.x;\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.y;\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.z;\r\n }\r\n\r\n cube.pointsValuesLinear[indPointValues + 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 2 * 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 5 * 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3] += vCellStep.x;\r\n\r\n cube.pointsValuesLinear[indPointValues + 2 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 3 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 7 * 3 + 2] += vCellStep.z;\r\n\r\n cube.pointsValuesLinear[indPointValues + 4 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 5 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 7 * 3 + 1] += vCellStep.y;\r\n\r\n // now current cell has intersections (from -x to +x) on some cube edges\r\n const indValues = indPointValues + 24;\r\n for (let i = 0; i < cNumVerts; ++i) {\r\n sign[i] = (cube.pointsValuesLinear[indValues + i] < 0.0) ? 1 : 0;\r\n }\r\n\r\n this.buildEdgePoint(0, 1, sign, cube, indPointValues, vaEdges[0]);\r\n this.buildEdgePoint(1, 2, sign, cube, indPointValues, vaEdges[1]);\r\n this.buildEdgePoint(2, 3, sign, cube, indPointValues, vaEdges[2]);\r\n this.buildEdgePoint(3, 0, sign, cube, indPointValues, vaEdges[3]);\r\n\r\n this.buildEdgePoint(4, 5, sign, cube, indPointValues, vaEdges[4]);\r\n this.buildEdgePoint(5, 6, sign, cube, indPointValues, vaEdges[5]);\r\n this.buildEdgePoint(6, 7, sign, cube, indPointValues, vaEdges[6]);\r\n this.buildEdgePoint(7, 4, sign, cube, indPointValues, vaEdges[7]);\r\n\r\n this.buildEdgePoint(0, 4, sign, cube, indPointValues, vaEdges[8]);\r\n this.buildEdgePoint(1, 5, sign, cube, indPointValues, vaEdges[9]);\r\n this.buildEdgePoint(2, 6, sign, cube, indPointValues, vaEdges[10]);\r\n this.buildEdgePoint(3, 7, sign, cube, indPointValues, vaEdges[11]);\r\n\r\n const offs = bitsInside * (2 << (1 + 2));\r\n for (let numTri = 0, indTri = 0; numTri < (2 + 2 + 2); numTri++, indTri += 3) {\r\n // s_triIndicesMarchCube is external array, defined in mold_ind.js\r\n const i0 = cube.striIndicesMarchCube[offs + indTri];\r\n if (i0 < 0) {\r\n break;\r\n }\r\n const i1 = cube.striIndicesMarchCube[offs + indTri + 1];\r\n const i2 = cube.striIndicesMarchCube[offs + indTri + 2];\r\n\r\n if (!this.addTriangle(vaEdges[i0], vaEdges[i1], vaEdges[i2])) {\r\n return 0 - 2;\r\n }\r\n } // for numTri\r\n\r\n // next cell (cube)\r\n indCell++;\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n return 0;\r\n }\r\n\r\n /**\r\n * Returns number of cell with intersection with at least one sphere.\r\n * Using this number, we can estimate required number of vertices\r\n * and triangles to build result mesh.\r\n *\r\n * @param {number} side Number of points in cube voxels\r\n * @param {number} numCells Number of cells in cube voxels (per direction)\r\n * @param {array} corners Array of float values for cube corner points\r\n * @param {object} cube IsoSurfaceMarchCube object\r\n * @returns {number} numIntersectedCells\r\n */\r\n getNumIntersectedCells(side, numCells, corners, cube) {\r\n const side2 = side * side;\r\n const cNumVerts = 8;\r\n let numIntersectedCells = 0;\r\n\r\n let indCell = 0;\r\n let indY = 0;\r\n for (let y = 0; y < numCells; y++, indY += side2) {\r\n let indZ = 0;\r\n for (let z = 0; z < numCells; z++, indZ += side) {\r\n for (let x = 0; x < numCells; x++) {\r\n const cubeValuesIndex = indCell * (2 << (2 + 2)) + 24;\r\n const indCorner = x + indZ + indY;\r\n\r\n cube.pointsValuesLinear[cubeValuesIndex] = corners[indCorner];\r\n cube.pointsValuesLinear[cubeValuesIndex + 1] = corners[indCorner + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 2] = corners[indCorner + side + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 3] = corners[indCorner + side];\r\n cube.pointsValuesLinear[cubeValuesIndex + 4] = corners[side2 + indCorner];\r\n cube.pointsValuesLinear[cubeValuesIndex + 5] = corners[side2 + indCorner + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 6] = corners[side2 + indCorner + side + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 7] = corners[side2 + indCorner + side];\r\n\r\n // check read exception\r\n // assert(side2 + indCorner + side + 1 < side3);\r\n\r\n // get bit flags inside\r\n let bitsInside = 0;\r\n for (let i = 0; i < cNumVerts; ++i) {\r\n if (cube.pointsValuesLinear[cubeValuesIndex + i] < 0.0) {\r\n bitsInside |= (1 << i);\r\n }\r\n }\r\n\r\n if ((bitsInside === 0) || (bitsInside === ((1 << cNumVerts) - 1))) {\r\n cube.hasIntersection[indCell] = false;\r\n } else {\r\n cube.hasIntersection[indCell] = true;\r\n numIntersectedCells++;\r\n }\r\n cube.bitsInside[indCell] = bitsInside;\r\n // next cell\r\n indCell++;\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n return numIntersectedCells;\r\n }\r\n\r\n getType(letter) {\r\n /* eslint-disable no-magic-numbers */\r\n const atomT = [0, 0, 1, 1, 2, 6, 3, 6, 4, 6, 5, 6, 6, 0, 7, 3, 8, 2, 9, 6, 10, 6, 11, 6, 12, 6, 13, 6, 14, 6, 15, 4,\r\n 16, 5, 17, 6, 18, 6, 19, 6, 20, 6, 21, 6, 22, 6, 23, 6, 24, 6, 25, 6, 26, 6, 27, 6, 28, 6, 29, 6, 30, 6, 31, 6,\r\n 32, 6, 33, 6, 34, 6, 35, 6, 36, 6, 37, 6, 38, 6, 39, 6, 40, 6, 41, 6, 42, 6, 43, 6, 44, 6, 45, 6, 46, 6, 47, 6,\r\n 48, 6, 49, 6, 50, 6, 51, 6, 52, 6, 53, 6, 54, 6, 55, 6, 56, 6, 57, 6, 58, 6, 59, 6, 60, 6, 61, 6, 62, 6, 63, 6,\r\n 64, 6, 65, 6, 66, 6, 67, 6, 68, 6, 69, 6, 70, 6, 71, 6, 72, 6, 73, 6, 74, 6, 75, 6, 76, 6, 77, 6, 78, 6, 79, 6,\r\n 80, 6, 81, 6, 82, 6, 83, 6, 84, 6, 85, 6, 86, 6, 87, 6, 88, 6, 89, 6, 90, 6, 91, 6, 92, 6, 93, 6, 94, 6, 95, 6,\r\n 96, 6, 97, 6, 98, 6, 99, 6, 100, 6, 101, 6, 102, 6, 103, 6, 104, 6, 105, 6, 106, 6, 107, 6, 108, 6, 109, 6];\r\n /* eslint-enable no-magic-numbers */\r\n\r\n if (letter < 1 || letter > atomT.length / 2\r\n || (Object.keys(Element.ByAtomicNumber).length * 2) !== atomT.length) {\r\n throw new Error('atomT.length should be equal Element.ByAtomicNumber.length * 2');\r\n }\r\n return atomT[letter * 2];\r\n }\r\n\r\n /**\r\n * Calculate values for marching cube grid points\r\n * positive values are outside sphere, negative - is inside\r\n *\r\n * @param {array} corners array of float values\r\n * @param {number} side Number of point in cube in 1 dimennsion\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n * @param {array} atoms Array of input atoms\r\n * @param {number} probeRad radius for atom probing\r\n */\r\n calculateGridCorners(corners, side, vBoxMin, vBoxMax, atoms, probeRad) {\r\n const side2 = side * side;\r\n const side3 = side2 * side;\r\n const vCorner = new THREE.Vector3();\r\n const vDif = new THREE.Vector3();\r\n /* eslint-disable no-magic-numbers */\r\n const aLot = +1.0e12;\r\n /* eslint-enable no-magic-numbers */\r\n\r\n for (let i = 0; i < side3; i++) {\r\n corners[i] = aLot; // to large value\r\n }\r\n\r\n const xScale = (side - 1) / (vBoxMax.x - vBoxMin.x);\r\n const yScale = (side - 1) / (vBoxMax.y - vBoxMin.y);\r\n const zScale = (side - 1) / (vBoxMax.z - vBoxMin.z);\r\n\r\n for (let s = 0, numAtoms = atoms.length; s < numAtoms; s++) {\r\n const atom = atoms[s];\r\n const radius = atom.radius + probeRad;\r\n\r\n const fx = ((atom.coord.x - radius) - vBoxMin.x) * xScale;\r\n const fy = ((atom.coord.y - radius) - vBoxMin.y) * yScale;\r\n const fz = ((atom.coord.z - radius) - vBoxMin.z) * zScale;\r\n\r\n const indXMin = Math.floor(fx);\r\n const indYMin = Math.floor(fy);\r\n const indZMin = Math.floor(fz);\r\n\r\n let indXMax = Math.floor(((atom.coord.x + radius) - vBoxMin.x) * xScale);\r\n let indYMax = Math.floor(((atom.coord.y + radius) - vBoxMin.y) * yScale);\r\n let indZMax = Math.floor(((atom.coord.z + radius) - vBoxMin.z) * zScale);\r\n\r\n indXMax++;\r\n indYMax++;\r\n indZMax++;\r\n indXMax = (indXMax <= (side - 1)) ? indXMax : (side - 1);\r\n indYMax = (indYMax <= (side - 1)) ? indYMax : (side - 1);\r\n indZMax = (indZMax <= (side - 1)) ? indZMax : (side - 1);\r\n\r\n for (let y = indYMin; y <= indYMax; y++) {\r\n const indY = y * side2;\r\n for (let z = indZMin; z <= indZMax; z++) {\r\n const indZ = z * side;\r\n for (let x = indXMin; x <= indXMax; x++) {\r\n const ind = indY + indZ + x;\r\n this.getCornerCoord(vBoxMin, vBoxMax, x, y, z, side, vCorner);\r\n vDif.x = vCorner.x - atom.coord.x;\r\n vDif.y = vCorner.y - atom.coord.y;\r\n vDif.z = vCorner.z - atom.coord.z;\r\n const distToSphere = Math.sqrt(vDif.x * vDif.x + vDif.y * vDif.y + vDif.z * vDif.z);\r\n // val: < 0, if inside sphere\r\n // val: > 0, if outside sphere\r\n const val = distToSphere - radius;\r\n if (val < corners[ind]) {\r\n corners[ind] = val;\r\n }\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n } // for (s)\r\n }\r\n\r\n /**\r\n * Create memory pool for vertex hash management\r\n *\r\n * @param {number} maxNumVertices Maximum possible number of vertices (that will be build)\r\n * @param {number} maxNumTriangles Maximum possible number of triangles (that will be build)\r\n * @returns {number} 0, if success. (<0) is non memory\r\n */\r\n createVertexHash(maxNumVertices, maxNumTriangles) {\r\n this.hashLines = utils.allocateTyped(Int32Array, HASH_SIZE * 2);\r\n if (this.hashLines === null) {\r\n return 0 - 1;\r\n }\r\n for (let i = 0, j = 0; i < HASH_SIZE; i++) {\r\n this.hashLines[j++] = 0; // num vertices in this hash line\r\n this.hashLines[j++] = 0 - 1; // index of the first entry\r\n }\r\n\r\n this.maxNumVertices = maxNumVertices;\r\n this.maxNumTriangles = maxNumTriangles;\r\n\r\n this.numHashEtriesAllocated = maxNumVertices;\r\n this.hashEntries = utils.allocateTyped(Int32Array, 2 * this.numHashEtriesAllocated);\r\n if (this.hashEntries === null) {\r\n return 0 - 1;\r\n }\r\n for (let i = 0, j = 0; i < this.numHashEtriesAllocated; i++) {\r\n this.hashEntries[j++] = 0 - 1; // index of vertex\r\n this.hashEntries[j++] = 0 - 1; // next hash entry index\r\n }\r\n this.numHashEntryIndex = 0;\r\n return 0;\r\n }\r\n\r\n /**\r\n * Allocate and return new hash entry. Just check possible amount.\r\n *\r\n * @returns {number} index of hash entry, that can be used for geometry add vertex functionality\r\n */\r\n getNewHashEntry() {\r\n if (this.numHashEntryIndex < this.numHashEtriesAllocated) {\r\n const i = this.numHashEntryIndex;\r\n this.numHashEntryIndex++;\r\n return i;\r\n }\r\n return 0 - 1;\r\n }\r\n\r\n /**\r\n * Add vertex to geometry structure\r\n * using vertex hash table to quickly check, is this vertex already exist in geometry\r\n *\r\n * @param {object} geoOut Geometry to build\r\n * @param {Vector3} vAdd Vertex to add\r\n * @returns {number} index of added (or existing) vertex in geometry.\r\n */\r\n addVertexToGeo(geoOut, vAdd) {\r\n let entry;\r\n const oneHynberes = 0.01;\r\n const n815851 = 815851;\r\n const n37633 = 37633;\r\n const n2453543 = 2453543;\r\n const r106 = 1.0e-6;\r\n\r\n const hashResolution = this.marCubeResoultion << 2;\r\n const v = new THREE.Vector3();\r\n const ix = Math.floor(hashResolution * (vAdd.x - this.vBoxMin.x) / (this.vBoxMax.x + oneHynberes - this.vBoxMin.x));\r\n const iy = Math.floor(hashResolution * (vAdd.y - this.vBoxMin.y) / (this.vBoxMax.y + oneHynberes - this.vBoxMin.y));\r\n const iz = Math.floor(hashResolution * (vAdd.z - this.vBoxMin.z) / (this.vBoxMax.z + oneHynberes - this.vBoxMin.z));\r\n let iHash = ix * n815851 + iz * n37633 + iy * n2453543;\r\n iHash &= (HASH_SIZE - 1);\r\n const hLineIndex = iHash + iHash;\r\n\r\n // search vertex via hash\r\n // search in hash list\r\n if (this.vBoxMin !== null && this.vBoxMax !== null) {\r\n for (entry = this.hashLines[hLineIndex + 1]; entry >= 0; entry = this.hashEntries[entry * 2 + 1]) {\r\n const ind = this.hashEntries[entry * 2 + 0]; // vertex index\r\n v.copy(geoOut._vertices[ind]);\r\n v.x -= vAdd.x;\r\n v.y -= vAdd.y;\r\n v.z -= vAdd.z;\r\n const dot2 = v.x * v.x + v.y * v.y + v.z * v.z;\r\n if (dot2 < r106) {\r\n return ind;\r\n } // if (found)\r\n } // for (entry)\r\n } // search\r\n\r\n // add new vertex to geometry\r\n if (geoOut._numVertices >= this.maxNumVertices) {\r\n return 0 - 1;\r\n }\r\n\r\n const iVertAdd = geoOut._numVertices;\r\n geoOut._vertices[iVertAdd].copy(vAdd);\r\n\r\n // add to hash\r\n if (this.vBoxMin !== null && this.vBoxMax !== null) {\r\n entry = this.getNewHashEntry();\r\n if (entry < 0) {\r\n return 0 - 1;\r\n }\r\n const entryFirst = this.hashLines[hLineIndex + 1];\r\n this.hashLines[hLineIndex + 1] = entry;\r\n this.hashEntries[entry * 2 + 0] = iVertAdd;\r\n this.hashEntries[entry * 2 + 1] = entryFirst;\r\n\r\n this.hashLines[hLineIndex + 0]++; // num vertices in line ++\r\n }\r\n geoOut._numVertices++;\r\n return iVertAdd;\r\n }\r\n\r\n /**\r\n *\r\n * @param {number} side some placeholder description\r\n * @param {number} probeSphereRadius some placeholder description\r\n * @param {object} vBoxMin some placeholder description\r\n * @param {object} vBoxMax some placeholder description\r\n * @param {object} geoOut some placeholder description\r\n * @param {object} corners some placeholder description\r\n * @returns {number} always 0\r\n */\r\n modifyExcludedFromGeo(\r\n side,\r\n probeSphereRadius,\r\n vBoxMin,\r\n vBoxMax,\r\n geoOut,\r\n corners,\r\n ) {\r\n let ind;\r\n let distToSphere;\r\n let distToBorder;\r\n const r11 = 1.1;\r\n\r\n function innerBlockWorkAround() {\r\n if (distToBorder > 0.0) {\r\n // point is inside probe sphere\r\n if (corners[ind] < 0.0) {\r\n corners[ind] = distToBorder; // was inside surface, now is oustide ( > 0)\r\n }\r\n if (distToBorder > corners[ind]) {\r\n corners[ind] = distToBorder; // find positive maximum\r\n }\r\n } else if (distToBorder > corners[ind]) { // point is outside sphere\r\n corners[ind] = distToBorder; // find negative maximum\r\n }\r\n }\r\n\r\n const side2 = side * side;\r\n const xScale = (side - 1) / (vBoxMax.x - vBoxMin.x);\r\n const yScale = (side - 1) / (vBoxMax.y - vBoxMin.y);\r\n const zScale = (side - 1) / (vBoxMax.z - vBoxMin.z);\r\n\r\n const probeSpRad2 = (probeSphereRadius * 2) * (probeSphereRadius * 2);\r\n const sideInv = 1.0 / (side - 1);\r\n\r\n for (let i = 0; i < geoOut._numVertices; i++) {\r\n const vCenter = geoOut._vertices[i];\r\n\r\n const radEst = probeSphereRadius * r11;\r\n\r\n let indXMin = Math.floor(((vCenter.x - radEst) - vBoxMin.x) * xScale);\r\n let indYMin = Math.floor(((vCenter.y - radEst) - vBoxMin.y) * yScale);\r\n let indZMin = Math.floor(((vCenter.z - radEst) - vBoxMin.z) * zScale);\r\n\r\n let indXMax = Math.floor(((vCenter.x + radEst) - vBoxMin.x) * xScale);\r\n let indYMax = Math.floor(((vCenter.y + radEst) - vBoxMin.y) * yScale);\r\n let indZMax = Math.floor(((vCenter.z + radEst) - vBoxMin.z) * zScale);\r\n\r\n indXMin = (indXMin >= 0) ? indXMin : 0;\r\n indYMin = (indYMin >= 0) ? indYMin : 0;\r\n indZMin = (indZMin >= 0) ? indZMin : 0;\r\n indXMax = (indXMax <= (side - 1)) ? indXMax : (side - 1);\r\n indYMax = (indYMax <= (side - 1)) ? indYMax : (side - 1);\r\n indZMax = (indZMax <= (side - 1)) ? indZMax : (side - 1);\r\n\r\n for (let iy = indYMin; iy <= indYMax; iy++) {\r\n const indY = iy * side2;\r\n for (let iz = indZMin; iz <= indZMax; iz++) {\r\n const indZ = iz * side;\r\n for (let ix = indXMin; ix <= indXMax; ix++) {\r\n ind = indY + indZ + ix;\r\n // getCornerCoord(vBoxMin, vBoxMax, ix, iy, iz, side, &vCorner);\r\n let t = ix * sideInv;\r\n const xCorner = vBoxMin.x * (1.0 - t) + vBoxMax.x * t;\r\n t = iy * sideInv;\r\n const yCorner = vBoxMin.y * (1.0 - t) + vBoxMax.y * t;\r\n t = iz * sideInv;\r\n const zCorner = vBoxMin.z * (1.0 - t) + vBoxMax.z * t;\r\n\r\n const dx = xCorner - vCenter.x;\r\n const dy = yCorner - vCenter.y;\r\n const dz = zCorner - vCenter.z;\r\n const dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 < probeSpRad2) {\r\n distToSphere = Math.sqrt(dist2);\r\n distToBorder = -(distToSphere - probeSphereRadius);\r\n innerBlockWorkAround();\r\n } // if (dist from corner point to sphere center more 2 radiuses)\r\n } // for (ix)\r\n } // for (iz)\r\n } // for (iy)\r\n } // for (i) all geo vertices\r\n return 0;\r\n }\r\n\r\n _innerBuild() {\r\n let ok;\r\n const expandFactor = 1.2;\r\n\r\n // performance test\r\n // this.performanceTest();\r\n\r\n // Create temporary atoms (but colored)\r\n const packedArrays = {\r\n posRad: this._posRad,\r\n colors: this._colors,\r\n atoms: this._opts.atoms,\r\n };\r\n this.complex = this._opts.parent;\r\n this.atoms = packedArrays.atoms;\r\n this.meshResolution = this._opts.gridSpacing;\r\n this.atomRadiusScale = this._opts.radScale;\r\n this.colorMode = this._opts.colorMode;\r\n this.probeRadius = this._opts.probeRadius;\r\n this.useVertexColors = true;\r\n this.excludeProbe = this._opts.excludeProbe;\r\n this.visibilitySelector = this._opts.visibilitySelector;\r\n\r\n this.geoOut = null;\r\n\r\n this.hashLines = null;\r\n this.hashEntries = null;\r\n this.numHashEtriesAllocated = 0;\r\n this.numHashEntryIndex = 0;\r\n this.maxNumVertices = 0;\r\n this.maxNumTriangles = 0;\r\n\r\n const atomsColored = new Array(this.atoms.length);\r\n this.convertToAtomsColored(packedArrays, atomsColored);\r\n\r\n // find bbox for spheres scene\r\n const vBoxMin = this.vBoxMin = new THREE.Vector3();\r\n const vBoxMax = this.vBoxMax = new THREE.Vector3();\r\n this.getBoundingBox(atomsColored, vBoxMin, vBoxMax);\r\n\r\n const marCubeResoultion = this.marCubeResoultion = this.meshResolution * (2 + 2);\r\n\r\n // build grid corners for Marching cube algorithm\r\n const side = marCubeResoultion;\r\n const side2 = side * side;\r\n const side3 = side2 * side;\r\n const corners = utils.allocateTyped(Float32Array, side3);\r\n const rProbeRadius = this.probeRadius * this.atomRadiusScale;\r\n\r\n this.calculateGridCorners(corners, side, vBoxMin, vBoxMax, atomsColored, rProbeRadius);\r\n\r\n const numCells = marCubeResoultion - 1;\r\n const cube = new IsoSurfaceMarchCube();\r\n ok = cube.create(numCells);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n // copy corners to cells\r\n const vCellStep = new THREE.Vector3();\r\n vCellStep.x = (vBoxMax.x - vBoxMin.x) / numCells;\r\n vCellStep.y = (vBoxMax.y - vBoxMin.y) / numCells;\r\n vCellStep.z = (vBoxMax.z - vBoxMin.z) / numCells;\r\n\r\n let numIntersectedCellsEstim = this.getNumIntersectedCells(side, numCells, corners, cube);\r\n let maxNumVertices = Math.floor(numIntersectedCellsEstim * expandFactor);\r\n let maxNumTriangles = Math.floor(numIntersectedCellsEstim * expandFactor * 2);\r\n\r\n this.geoOut = new IsoSurfaceGeo(maxNumVertices, maxNumTriangles, this.useVertexColors);\r\n\r\n ok = this.createVertexHash(maxNumVertices, maxNumTriangles);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n\r\n // build voxel world (used to check triangle-to-atom tie and to calculate normals and colors)\r\n let probeRadForNormalsColors = rProbeRadius;\r\n if (this.excludeProbe) {\r\n probeRadForNormalsColors = 0.01;\r\n }\r\n this.voxelWorld = new IsosurfaceBuildNormals(\r\n atomsColored.length,\r\n atomsColored,\r\n vBoxMin,\r\n vBoxMax,\r\n probeRadForNormalsColors,\r\n );\r\n this.voxelWorld.createVoxels();\r\n\r\n ok = this.buildGeoFromCorners(marCubeResoultion, vBoxMin, vBoxMax, corners, vCellStep, cube);\r\n if (this.excludeProbe) {\r\n // using 3d mesh (geoOut) as a surface points\r\n // move probe sphere and try to minimuze corners values\r\n this.modifyExcludedFromGeo(side, rProbeRadius, vBoxMin, vBoxMax, this.geoOut, corners);\r\n\r\n // delete old builded geo\r\n this.geoOut._vertices = null;\r\n this.geoOut._colors = null;\r\n this.geoOut._indices = null;\r\n this.geoOut._normals = null;\r\n this.geoOut._numVertices = 0;\r\n this.geoOut._numTriangles = 0;\r\n this.geoOut = null;\r\n\r\n // estimage geo vertices budget again\r\n numIntersectedCellsEstim = this.getNumIntersectedCells(side, numCells, corners, cube);\r\n maxNumVertices = Math.floor(numIntersectedCellsEstim * expandFactor);\r\n maxNumTriangles = Math.floor(numIntersectedCellsEstim * expandFactor * 2);\r\n\r\n // creates empty new geometry\r\n this.geoOut = new IsoSurfaceGeo(maxNumVertices, maxNumTriangles, this.useVertexColors);\r\n ok = this.createVertexHash(maxNumVertices, maxNumTriangles);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n // build vertices and triangles from corners values\r\n ok = this.buildGeoFromCorners(side, vBoxMin, vBoxMax, corners, vCellStep, cube);\r\n }\r\n\r\n // build vertex normals\r\n this.voxelWorld.buildNormals(this.geoOut._vertices.length, this.geoOut._vertices, this.geoOut._normals);\r\n // More value : more smooth color mixing\r\n // value about 0.7: very rough colors borders\r\n let radiusColorSmoothness = 6.5;\r\n if (this.excludeProbe) {\r\n radiusColorSmoothness -= 1.5;\r\n }\r\n if (this.useVertexColors) {\r\n this.voxelWorld.buildColors(\r\n this.geoOut._vertices.length,\r\n this.geoOut._vertices,\r\n this.geoOut._colors,\r\n radiusColorSmoothness,\r\n );\r\n }\r\n this.voxelWorld.destroyVoxels();\r\n this.voxelWorld = null;\r\n\r\n // remove objects\r\n cube.destroy();\r\n\r\n return ok;\r\n }\r\n}\r\n\r\n// All code below must be erased from every device and each developer's memory\r\n\r\nexport default SSIsosurfaceGeometry;\r\n","import * as THREE from 'three';\r\nimport EventDispatcher from '../../utils/EventDispatcher';\r\n\r\nfunction createLabel(fieldTxt, className) {\r\n const text = document.createElement('div');\r\n text.className = className;\r\n\r\n if (typeof fieldTxt === 'string') {\r\n const spanText = document.createElement('span');\r\n spanText.style.fontSize = '150%';\r\n const strings = fieldTxt.split('\\n');\r\n\r\n for (let i = 0, n = strings.length; i < n; ++i) {\r\n const spanNodeP = document.createElement('span');\r\n const spanNodeText = document.createTextNode(strings[i]);\r\n spanNodeP.appendChild(spanNodeText);\r\n spanText.appendChild(spanNodeP);\r\n if (i < n - 1) {\r\n spanText.appendChild(document.createElement('br'));\r\n }\r\n }\r\n\r\n text.appendChild(spanText);\r\n } else {\r\n text.appendChild(fieldTxt);\r\n }\r\n text.worldPos = new THREE.Vector3();\r\n return text;\r\n}\r\nclass LabelsGeometry extends EventDispatcher {\r\n constructor(instanceCount, opts) {\r\n super();\r\n this._opts = opts;\r\n this.items = [];\r\n this.needsUpdate = false;\r\n\r\n let xTranslation = -50;\r\n let yTranslation = -50;\r\n switch (opts.horizontalAlign) {\r\n case 'left':\r\n xTranslation = 0;\r\n break;\r\n case 'right':\r\n xTranslation = -100;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n switch (opts.verticalAlign) {\r\n case 'top':\r\n yTranslation = -100;\r\n break;\r\n case 'bottom':\r\n yTranslation = 0;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n const deltaPos = new THREE.Vector3(opts.dx || 0, opts.dy || 0, opts.dz || 0);\r\n this.userData = {\r\n translation: `translate(${xTranslation}%, ${yTranslation}%)`,\r\n offset: deltaPos,\r\n };\r\n }\r\n\r\n setItem(itemIdx, itemPos, fieldTxt) {\r\n const opts = this._opts;\r\n const text = this.items[itemIdx] || createLabel(fieldTxt, 'label');\r\n\r\n text.worldPos.copy(itemPos);\r\n text.style.textAlign = opts.horizontalAlign;\r\n text.style.verticalAlign = opts.verticalAlign;\r\n this.items[itemIdx] = text;\r\n }\r\n\r\n setColor(itemIdx, fColor, bColor) {\r\n const text = this.items[itemIdx];\r\n text.opts = {\r\n color: fColor,\r\n background: bColor,\r\n };\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.needsUpdate = true;\r\n this.dispatchEvent({ type: 'update' });\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n }\r\n\r\n // unimplemented functions\r\n raycast() {\r\n }\r\n\r\n setOpacity() {\r\n\r\n }\r\n\r\n getSubset() {\r\n return [];\r\n }\r\n}\r\n\r\nexport default LabelsGeometry;\r\n","import InstancedSpheresGeometry from './InstancedSpheresGeometry';\r\nimport SimpleSpheresGeometry from './SimpleSpheresGeometry';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\nimport Instanced2CCylindersGeometry from './Instanced2CCylindersGeometry';\r\nimport ExtrudedObjectsGeometry from './ExtrudedObjectsGeometry';\r\nimport ChunkedLinesGeometry from './ChunkedLinesGeometry';\r\nimport TwoColorLinesGeometry from './TwoColorLinesGeometry';\r\nimport CrossGeometry from './CrossGeometry';\r\nimport QuickSurfGeometry from './QuickSurfGeometry';\r\nimport ContactSurfaceGeometry from './ContactSurfaceGeometry';\r\nimport SSIsosurfaceGeometry from './SSIsosurfaceGeometry';\r\nimport LabelsGeometry from './LabelsGeometry';\r\n\r\nexport default {\r\n InstancedSpheresGeometry,\r\n SimpleSpheresGeometry,\r\n Simple2CCylindersGeometry,\r\n Instanced2CCylindersGeometry,\r\n ExtrudedObjectsGeometry,\r\n ChunkedLinesGeometry,\r\n TwoColorLinesGeometry,\r\n CrossGeometry,\r\n QuickSurfGeometry,\r\n ContactSurfaceGeometry,\r\n SSIsosurfaceGeometry,\r\n LabelsGeometry,\r\n};\r\n","export default {\r\n\r\n precision: 'mediump',\r\n\r\n /**\r\n *\r\n * @param {THREE.WebGLRenderer} renderer\r\n */\r\n init(renderer) {\r\n this.precision = renderer.capabilities.getMaxPrecision('highp');\r\n },\r\n};\r\n","import * as THREE from 'three';\r\n\r\nconst noiseWidth = 4;\r\nconst noiseHeight = 4;\r\nconst _noiseData = new Uint8Array([\r\n 24, 52, 0, 255, 254, 145, 0, 255, 122, 0, 0, 255, 7, 170, 0, 255,\r\n 34, 214, 0, 255, 173, 8, 0, 255, 86, 249, 0, 255, 160, 4, 0, 255,\r\n 226, 46, 0, 255, 224, 211, 0, 255, 3, 157, 0, 255, 174, 247, 0, 255,\r\n 12, 182, 0, 255, 220, 216, 0, 255, 1, 109, 0, 255, 253, 154, 0, 255,\r\n]);\r\nconst _noiseWrapS = THREE.RepeatWrapping;\r\nconst _noiseWrapT = THREE.RepeatWrapping;\r\nconst _noiseMinFilter = THREE.NearestFilter;\r\nconst _noiseMagFilter = THREE.NearestFilter;\r\nconst _noiseMapping = THREE.UVMapping;\r\nconst noiseTexture = new THREE.DataTexture(\r\n _noiseData,\r\n noiseWidth,\r\n noiseHeight,\r\n THREE.RGBAFormat,\r\n THREE.UnsignedByteType,\r\n _noiseMapping,\r\n _noiseWrapS,\r\n _noiseWrapT,\r\n _noiseMagFilter,\r\n _noiseMinFilter,\r\n 1,\r\n);\r\nnoiseTexture.needsUpdate = true;\r\n\r\nexport default {\r\n noiseWidth,\r\n noiseHeight,\r\n noiseTexture,\r\n};\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './Uber.vert';\r\nimport fragmentShader from './Uber.frag';\r\nimport capabilities from '../capabilities';\r\nimport noise from '../noiseTexture';\r\n\r\n// Length of _samplesKernel is used in Uber.frag\r\n// If you want to change length of _samplesKernel, please, remember change it in Uber.frag too.\r\n// You can easy find places for replace using word:_samplesKernel\r\nconst _samplesKernel = [\r\n new THREE.Vector2(-0.541978, 0.840393),\r\n new THREE.Vector2(0.125533, -0.992089),\r\n new THREE.Vector2(0.374329, 0.927296),\r\n new THREE.Vector2(-0.105475, 0.994422),\r\n];\r\n\r\nconst defaultUniforms = THREE.UniformsUtils.merge([\r\n\r\n THREE.UniformsLib.fog,\r\n THREE.UniformsLib.lights,\r\n\r\n {\r\n // are updated automatically by three.js (see THREE.ShaderLib.common)\r\n diffuse: { value: new THREE.Color(0xeeeeee) },\r\n opacity: { value: 1.0 },\r\n\r\n specular: { type: 'c', value: new THREE.Color(0x111111) },\r\n shininess: { type: 'f', value: 30 },\r\n fixedColor: { type: 'c', value: new THREE.Color(0xffffff) },\r\n zOffset: { type: 'f', value: 0.0 },\r\n zClipValue: { type: 'f', value: 0.0 },\r\n clipPlaneValue: { type: 'f', value: 0.0 },\r\n nearPlaneValue: { type: 'f', value: -0.5 },\r\n invModelViewMatrix: { type: '4fv', value: new THREE.Matrix4() },\r\n world2colorMatrix: { type: '4fv', value: new THREE.Matrix4() },\r\n dashedLineSize: { type: 'f', value: 0.1 },\r\n dashedLinePeriod: { type: 'f', value: 0.2 },\r\n projMatrixInv: { type: '4fv', value: new THREE.Matrix4() },\r\n viewport: { type: 'v2', value: new THREE.Vector2() },\r\n lineWidth: { type: 'f', value: 2.0 },\r\n // default value must be the same as settings\r\n fogAlpha: { type: 'f', value: 1.0 },\r\n samplesKernel: { type: 'v2v', value: null },\r\n noiseTex: { type: 't', value: null },\r\n noiseTexelSize: { type: 'v2', value: null },\r\n srcTexelSize: { type: 'v2', value: null },\r\n },\r\n\r\n]);\r\n\r\nconst uberOptionNames = [\r\n 'shininess',\r\n 'opacity',\r\n 'zOffset',\r\n 'diffuse',\r\n 'specular',\r\n 'fixedColor',\r\n 'zClipCoef',\r\n 'zClipValue',\r\n 'clipPlaneValue',\r\n 'world2colorMatrix',\r\n 'dashedLineSize',\r\n 'dashedLinePeriod',\r\n 'projMatrixInv',\r\n 'viewport',\r\n 'lineWidth',\r\n 'fogAlpha',\r\n 'samplesKernel',\r\n 'noiseTex',\r\n 'noiseTexelSize',\r\n 'srcTexelSize',\r\n];\r\n\r\n// properties that convert to uniforms\r\nconst uberOptions = {\r\n diffuse: new THREE.Color(0xffffff), // used in phong lighting\r\n specular: new THREE.Color(0x111111), // used in phong lighting\r\n shininess: 30, // used in phong lighting\r\n opacity: 1, // set mesh opacity\r\n fixedColor: new THREE.Color(0xffffff), // color to override (see OVERRIDE_COLOR)\r\n zOffset: 0.0, // used fo zsprites (see SPHERE_SPRITE CYLINDER_SPRITE)\r\n zClipCoef: 2.0, // use for Surfs clipping (mesh param, isn't used in shader) FIXME move to representation param\r\n zClipValue: 0.0, // value to clip Surfs in shader (see ZCLIP)\r\n clipPlaneValue: 0.0, // value to clip scene globally (see CLIPPLANE)\r\n world2colorMatrix: new THREE.Matrix4(),\r\n dashedLineSize: 0.1,\r\n dashedLinePeriod: 0.3,\r\n projMatrixInv: new THREE.Matrix4(),\r\n viewport: new THREE.Vector2(800, 600),\r\n lineWidth: 2.0,\r\n fogAlpha: 1.0,\r\n samplesKernel: _samplesKernel,\r\n noiseTex: noise.noiseTexture,\r\n noiseTexelSize: new THREE.Vector2(1.0 / noise.noiseWidth, 1.0 / noise.noiseHeight),\r\n srcTexelSize: new THREE.Vector2(1.0 / 800.0, 1.0 / 600.0),\r\n copy(source) {\r\n this.diffuse.copy(source.diffuse);\r\n this.specular.copy(source.specular);\r\n this.shininess = source.shininess;\r\n this.opacity = source.opacity;\r\n this.fixedColor.copy(source.fixedColor);\r\n this.zOffset = source.zOffset;\r\n this.zClipCoef = source.zClipCoef;\r\n this.zClipValue = source.zClipValue;\r\n this.clipPlaneValue = source.clipPlaneValue;\r\n this.world2colorMatrix.copy(source.world2colorMatrix);\r\n this.dashedLineSize = source.dashedLineSize;\r\n this.dashedLinePeriod = source.dashedLinePeriod;\r\n this.projMatrixInv = source.projMatrixInv;\r\n this.viewport = source.viewport;\r\n this.lineWidth = source.lineWidth; // used for thick lines only\r\n this.toonShading = source.toonShading;\r\n this.fogAlpha = source.fogAlpha;\r\n this.samplesKernel = source.samplesKernel;\r\n this.noiseTex = source.noiseTex;\r\n this.noiseTexelSize = source.noiseTexelSize;\r\n this.srcTexelSize = source.srcTexelSize;\r\n },\r\n};\r\n\r\nclass UberMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // add fog\r\n this.fog = true;\r\n // used for instanced geometry\r\n this.instancedPos = false;\r\n this.instancedMatrix = false;\r\n // atoms and links color\r\n this.attrColor = false;\r\n // second link color for cylinders\r\n this.attrColor2 = false;\r\n //\r\n this.attrAlphaColor = false;\r\n // overrides color for all vertices (used in selection)\r\n this.overrideColor = false;\r\n // zsrpites\r\n this.sphereSprite = false;\r\n this.cylinderSprite = false;\r\n // clip Surfs individually\r\n this.zClip = false;\r\n // clip scene with global clip plane\r\n this.clipPlane = false;\r\n // enable fake (chess-like) opacity\r\n this.fakeOpacity = false;\r\n // render only depth, don't take care about the pixel color (used for transparency depth prepass)\r\n this.prepassTransparancy = false;\r\n // used to render pixel positions\r\n this.colorFromPos = false;\r\n // used to render shadowmap\r\n this.shadowmap = false;\r\n // used to describe shadowmap type\r\n this.shadowmapType = 'random';\r\n // used to render pixel view deph\r\n this.colorFromDepth = false;\r\n // mark that rendering is for orthographic camera\r\n this.orthoCam = false;\r\n // used to render dashed line\r\n this.dashedLine = false;\r\n // mark as transparent\r\n this.transparent = true;\r\n // mark as thick lines\r\n this.thickLine = false;\r\n // makes fog begin transparency (required for transparent background)\r\n this.fogTransparent = false;\r\n // used to render surface normals to G buffer for ssao effect\r\n this.normalsToGBuffer = false;\r\n // used for toon material\r\n this.toonShading = false;\r\n\r\n // uber options of \"root\" materials are inherited from single uber-options object that resides in prototype\r\n this.uberOptions = Object.create(UberMaterial.prototype.uberOptions);\r\n\r\n // set default values\r\n super.setValues({\r\n uniforms: THREE.UniformsUtils.clone(defaultUniforms),\r\n vertexShader: this.precisionString() + vertexShader,\r\n fragmentShader: this.precisionString() + fragmentShader,\r\n lights: true,\r\n fog: true,\r\n side: THREE.DoubleSide,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n precisionString() {\r\n const { precision } = capabilities;\r\n const str = `precision ${precision} float;\\n`\r\n + `precision ${precision} int;\\n\\n`;\r\n return str;\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n\r\n this.fragmentShader = source.fragmentShader;\r\n this.vertexShader = source.vertexShader;\r\n\r\n this.uniforms = THREE.UniformsUtils.clone(source.uniforms);\r\n this.defines = { ...source.defines };\r\n this.extensions = source.extensions;\r\n\r\n this.fog = source.fog;\r\n this.instancedPos = source.instancedPos;\r\n this.instancedMatrix = source.instancedMatrix;\r\n this.attrColor = source.attrColor;\r\n this.attrColor2 = source.attrColor2;\r\n this.attrAlphaColor = source.attrAlphaColor;\r\n this.overrideColor = source.overrideColor;\r\n this.sphereSprite = source.sphereSprite;\r\n this.cylinderSprite = source.cylinderSprite;\r\n this.zClip = source.zClip;\r\n this.clipPlane = source.clipPlane;\r\n this.fakeOpacity = source.fakeOpacity;\r\n this.colorFromPos = source.colorFromPos;\r\n this.shadowmap = source.shadowmap;\r\n this.shadowmapType = source.shadowmapType;\r\n this.colorFromDepth = source.colorFromDepth;\r\n this.orthoCam = source.orthoCam;\r\n this.prepassTransparancy = source.prepassTransparancy;\r\n this.dashedLine = source.dashedLine;\r\n this.thickLine = source.thickLine;\r\n this.fogTransparent = source.fogTransparent;\r\n this.normalsToGBuffer = source.normalsToGBuffer;\r\n this.toonShading = source.toonShading;\r\n\r\n this.uberOptions.copy(source.uberOptions);\r\n\r\n return this;\r\n }\r\n\r\n // create copy of this material\r\n // its options are prototyped after this material's options\r\n createInstance() {\r\n const inst = new UberMaterial();\r\n inst.copy(this);\r\n inst.uberOptions = Object.create(this.uberOptions);\r\n return inst;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n const extensions = {};\r\n\r\n if (this.fog) {\r\n defines.USE_FOG = 1;\r\n }\r\n if (this.instancedPos) {\r\n defines.INSTANCED_POS = 1;\r\n }\r\n if (this.instancedMatrix) {\r\n defines.INSTANCED_MATRIX = 1;\r\n }\r\n if (this.attrColor) {\r\n defines.ATTR_COLOR = 1;\r\n }\r\n if (this.attrColor2) {\r\n defines.ATTR_COLOR2 = 1;\r\n }\r\n if (this.attrAlphaColor) {\r\n defines.ATTR_ALPHA_COLOR = 1;\r\n }\r\n if (this.overrideColor) {\r\n defines.OVERRIDE_COLOR = 1;\r\n }\r\n if (this.sphereSprite) {\r\n defines.SPHERE_SPRITE = 1;\r\n extensions.fragDepth = true;\r\n }\r\n if (this.cylinderSprite) {\r\n defines.CYLINDER_SPRITE = 1;\r\n extensions.fragDepth = true;\r\n }\r\n if (this.zClip) {\r\n defines.ZCLIP = 1;\r\n }\r\n if (this.clipPlane) {\r\n defines.CLIP_PLANE = 1;\r\n }\r\n if (this.fakeOpacity) {\r\n defines.FAKE_OPACITY = 1;\r\n }\r\n if (this.lights) {\r\n defines.USE_LIGHTS = 1;\r\n }\r\n if (this.colorFromPos) {\r\n defines.COLOR_FROM_POS = 1;\r\n }\r\n if (this.shadowmap) {\r\n defines.SHADOWMAP = 1;\r\n if (this.shadowmapType === 'pcf') {\r\n defines.SHADOWMAP_PCF_SHARP = 1;\r\n } else if (this.shadowmapType === 'random') {\r\n defines.SHADOWMAP_PCF_RAND = 1;\r\n } else {\r\n defines.SHADOWMAP_BASIC = 1;\r\n }\r\n }\r\n if (this.colorFromDepth) {\r\n defines.COLOR_FROM_DEPTH = 1;\r\n }\r\n if (this.orthoCam) {\r\n defines.ORTHOGRAPHIC_CAMERA = 1;\r\n }\r\n if (this.prepassTransparancy) {\r\n defines.PREPASS_TRANSP = 1;\r\n }\r\n if (this.dashedLine) {\r\n defines.DASHED_LINE = 1;\r\n }\r\n if (this.thickLine) {\r\n defines.THICK_LINE = 1;\r\n }\r\n if (this.fogTransparent) {\r\n defines.FOG_TRANSPARENT = 1;\r\n }\r\n if (this.normalsToGBuffer) {\r\n extensions.drawBuffers = true;\r\n defines.NORMALS_TO_G_BUFFER = 1;\r\n }\r\n if (this.toonShading) {\r\n defines.TOON_SHADING = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n this.extensions = extensions;\r\n }\r\n\r\n setUberOptions(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n for (const key in values) {\r\n if (!values.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n\r\n if (this.uberOptions[key] instanceof THREE.Color) {\r\n this.uberOptions[key] = values[key].clone();\r\n } else {\r\n this.uberOptions[key] = values[key];\r\n }\r\n }\r\n }\r\n\r\n clone(shallow) {\r\n if (!shallow) {\r\n return super.clone();\r\n }\r\n return this.createInstance();\r\n }\r\n\r\n updateUniforms() {\r\n const self = this;\r\n\r\n uberOptionNames.forEach((p) => {\r\n if (self.uniforms.hasOwnProperty(p)) {\r\n if (self.uberOptions[p] instanceof THREE.Color\r\n || self.uberOptions[p] instanceof THREE.Matrix4) {\r\n self.uniforms[p].value = self.uberOptions[p].clone();\r\n } else {\r\n self.uniforms[p].value = self.uberOptions[p];\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\nUberMaterial.prototype.uberOptions = uberOptions;\r\n\r\nexport default UberMaterial;\r\n","import UberMaterial from '../shaders/UberMaterial';\r\n\r\nexport default function (SuperClass) {\r\n class NewObjectType extends SuperClass {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.onBeforeRender = NewObjectType.prototype.onBeforeRender;\r\n }\r\n\r\n onBeforeRender(renderer, scene, camera, geometry, material, group) {\r\n this._onBeforeRender(renderer, scene, camera, geometry, material, group);\r\n this._update();\r\n }\r\n\r\n _onBeforeRender() {\r\n }\r\n\r\n _update() {\r\n const { material } = this;\r\n if (!material) {\r\n return;\r\n }\r\n\r\n if (material instanceof UberMaterial) {\r\n material.updateUniforms();\r\n }\r\n }\r\n }\r\n\r\n return NewObjectType;\r\n}\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass ZSpriteMesh extends Mesh {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n\r\n _onBeforeRender(renderer, scene, camera, _geometry, _material, _group) {\r\n Mesh.prototype._onBeforeRender.call(this, renderer, scene, camera);\r\n const { material } = this;\r\n if (!material) {\r\n return;\r\n }\r\n\r\n if (material.uniforms.invModelViewMatrix) {\r\n // NOTE: update of modelViewMatrix inside threejs is done after onBeforeRender call,\r\n // so we have to do it manually in that place\r\n this.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, this.matrixWorld);\r\n // get inverse matrix\r\n material.uniforms.invModelViewMatrix.value.copy(this.modelViewMatrix).invert();\r\n material.uniforms.nearPlaneValue.value = camera.near;\r\n material.uniformsNeedUpdate = true;\r\n }\r\n }\r\n}\r\n\r\nexport default ZSpriteMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass ZClippedMesh extends Mesh {\r\n constructor(geometry, material) {\r\n super(geometry, material);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n\r\n static _mvLength = new THREE.Vector3();\r\n\r\n static _center = new THREE.Vector3();\r\n\r\n static _modelView = new THREE.Matrix4();\r\n\r\n _onBeforeRender(renderer, scene, camera) {\r\n Mesh.prototype._onBeforeRender.call(this, renderer, scene, camera);\r\n\r\n const geo = this.geometry;\r\n const { material } = this;\r\n if (!geo.zClip || !material.uberOptions) {\r\n return;\r\n }\r\n\r\n const zClipCoef = 0.5;\r\n\r\n const modelView = ZClippedMesh._modelView;\r\n const mvLength = ZClippedMesh._mvLength;\r\n const center = ZClippedMesh._center;\r\n\r\n modelView.multiplyMatrices(this.matrixWorld, camera.matrixWorldInverse);\r\n const s = mvLength.setFromMatrixColumn(modelView, 0).length();\r\n center.copy(geo.boundingSphere.center);\r\n\r\n this.localToWorld(center);\r\n material.uberOptions.zClipValue = camera.position.z - center.z\r\n - s * (zClipCoef * geo.boundingSphere.radius);\r\n }\r\n}\r\n\r\nexport default ZClippedMesh;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport CSS2DObject from '../CSS2DObject';\r\nimport utils from '../../utils';\r\n\r\nclass TextMesh extends THREE.Group {\r\n constructor(geometry, _material) {\r\n super();\r\n this.geometry = geometry;\r\n\r\n const self = this;\r\n self.initialized = false;\r\n this.geometry.addEventListener('update', () => {\r\n self.update();\r\n });\r\n }\r\n\r\n init() {\r\n const { children } = this;\r\n for (let i = children.length - 1; i >= 0; --i) {\r\n this.remove(children[i]);\r\n }\r\n\r\n const { items, userData } = this.geometry;\r\n for (let i = 0, n = items.length; i < n; ++i) {\r\n const srcItem = items[i];\r\n if (!srcItem) {\r\n continue;\r\n }\r\n const item = utils.shallowCloneNode(srcItem);\r\n const label = new CSS2DObject(item);\r\n label.userData = _.clone(userData);\r\n const el = label.getElement();\r\n el.style.visibility = 'visible';\r\n label.source = srcItem;\r\n this.add(label);\r\n }\r\n this.initialized = true;\r\n }\r\n\r\n update() {\r\n const geo = this.geometry;\r\n if (!geo.needsUpdate) {\r\n return;\r\n }\r\n const { children } = this;\r\n if (!this.initialized) {\r\n this.init();\r\n }\r\n\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n const item = child.source;\r\n child.position.copy(item.worldPos);\r\n child.userData.color = item.opts.color;\r\n child.userData.background = item.opts.background;\r\n }\r\n }\r\n}\r\n\r\nexport default TextMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass SimpleMesh extends Mesh {\r\n constructor(geometry, material) {\r\n super(geometry, material);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n}\r\n\r\nexport default SimpleMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\nconst _viewport = new THREE.Vector2();\r\n\r\nclass ThickLineMesh extends Mesh {\r\n _onBeforeRender(renderer, scene, camera, _geometry, _material, _group) {\r\n const { material } = this;\r\n if (!material.uberOptions) {\r\n return;\r\n }\r\n\r\n material.uberOptions.projMatrixInv.copy(camera.projectionMatrix).invert();\r\n renderer.getSize(_viewport);\r\n material.uberOptions.viewport.set(_viewport.width, _viewport.height);\r\n }\r\n}\r\n\r\nexport default ThickLineMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass InstancedMesh extends Mesh {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n}\r\n\r\nexport default InstancedMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\nimport ZSpriteMesh from './ZSpriteMesh';\r\nimport ZClippedMesh from './ZClippedMesh';\r\nimport TextMesh from './TextMesh';\r\nimport SimpleMesh from './SimpleMesh';\r\nimport ThickLineMesh from './ThickLineMesh';\r\nimport InstancedMesh from './InstancedMesh';\r\n\r\nexport default {\r\n ZClipped: ZClippedMesh,\r\n ZSprite: ZSpriteMesh,\r\n Text: TextMesh,\r\n Line: UberObject(THREE.Line),\r\n LineSegments: UberObject(THREE.LineSegments),\r\n Mesh: SimpleMesh,\r\n ThickLineMesh,\r\n Instanced: InstancedMesh,\r\n};\r\n","import geometries from '../geometries/geometries';\r\nimport meshes from './meshes';\r\nimport ThickLinesGeometry from '../geometries/ThickLinesGeometry';\r\n\r\nfunction setMatParams(params, uniforms) {\r\n return function (material) {\r\n material.setValues(params);\r\n material.setUberOptions(uniforms);\r\n };\r\n}\r\n\r\nfunction _createInstancedCylinders(useZSprites, openEnded) {\r\n function Geometry(a, b) {\r\n return new geometries.Instanced2CCylindersGeometry(a, b, useZSprites, openEnded);\r\n }\r\n return {\r\n Geometry,\r\n Object: useZSprites ? meshes.ZSprite : meshes.Instanced,\r\n initMaterial: setMatParams({\r\n instancedMatrix: true,\r\n attrColor: true,\r\n attrColor2: true,\r\n attrAlphaColor: true,\r\n cylinderSprite: useZSprites,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createLineSegmentsGeoTriplet(geo, renderParams) {\r\n const thickLines = geo.prototype instanceof ThickLinesGeometry;\r\n const lineWidth = renderParams.lineWidth || 0;\r\n return {\r\n Geometry: geo,\r\n Object: thickLines ? meshes.ThickLineMesh : meshes.LineSegments,\r\n initMaterial: setMatParams({\r\n lights: false,\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n thickLine: thickLines,\r\n }, {\r\n lineWidth,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createSimpleGeoTriplet(geoClass) {\r\n return {\r\n Geometry: geoClass,\r\n Object: meshes.Mesh,\r\n initMaterial: setMatParams({\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createIsoSurfaceGeoTriplet(geoClass, caps, settings, renderParams) {\r\n const surfaceOpts = {\r\n wireframe: !!renderParams.wireframe,\r\n fakeOpacity: settings.now.isoSurfaceFakeOpacity,\r\n zClip: renderParams.zClip,\r\n };\r\n return {\r\n Geometry: geoClass,\r\n Object: meshes.ZClipped,\r\n initMaterial: setMatParams({\r\n attrColor: true,\r\n attrAlphaColor: false,\r\n wireframe: surfaceOpts.wireframe,\r\n fakeOpacity: surfaceOpts.fakeOpacity,\r\n zClip: surfaceOpts.zClip,\r\n }),\r\n };\r\n}\r\n\r\nclass MeshCreator {\r\n static createSpheres(caps, settings) {\r\n const useZSprites = settings.now.zSprites;\r\n function Geometry(a, b) {\r\n return new geometries.InstancedSpheresGeometry(a, b, useZSprites);\r\n }\r\n return {\r\n Geometry,\r\n Object: useZSprites ? meshes.ZSprite : meshes.Instanced,\r\n initMaterial: setMatParams({\r\n instancedPos: true,\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n sphereSprite: useZSprites,\r\n }),\r\n };\r\n }\r\n\r\n static create2CClosedCylinders(_caps, _settings) {\r\n return _createInstancedCylinders(false, false);\r\n }\r\n\r\n static create2CCylinders(caps, settings) {\r\n return _createInstancedCylinders(settings.now.zSprites, true);\r\n }\r\n\r\n static create2CLines(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.TwoColorLinesGeometry, renderParams);\r\n }\r\n\r\n static createCrosses(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.CrossGeometry, renderParams);\r\n }\r\n\r\n static createExtrudedChains(_caps, _settings) {\r\n return _createSimpleGeoTriplet(geometries.ExtrudedObjectsGeometry);\r\n }\r\n\r\n static createChunkedLines(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.ChunkedLinesGeometry, renderParams);\r\n }\r\n\r\n static createQuickSurface(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.QuickSurfGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createContactSurface(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.ContactSurfaceGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createSASSES(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.SSIsosurfaceGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createLabels(_caps, _settings) {\r\n return {\r\n Geometry: geometries.LabelsGeometry,\r\n Object: meshes.Text,\r\n initMaterial() {\r\n },\r\n };\r\n }\r\n}\r\n\r\nexport default MeshCreator;\r\n","import * as THREE from 'three';\r\nimport gfxutils from '../gfxutils';\r\n\r\nclass TransformGroup extends THREE.Object3D {\r\n static _inverseMatrix = new THREE.Matrix4();\r\n\r\n static _ray = new THREE.Ray();\r\n\r\n constructor(geometry, geoParams, material, transforms) {\r\n super();\r\n this._geometry = geometry;\r\n this._geoParams = geoParams;\r\n const mat = material.createInstance();\r\n geoParams.initMaterial(mat);\r\n this._material = mat;\r\n this._transforms = transforms.length > 0 ? transforms : [new THREE.Matrix4()];\r\n const meshes = this._createMeshes(geometry);\r\n for (let i = 0, n = meshes.length; i < n; ++i) {\r\n this.add(meshes[i]);\r\n }\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const ray = TransformGroup._ray;\r\n const inverseMatrix = TransformGroup._inverseMatrix;\r\n const { children } = this;\r\n ray.copy(raycaster.ray);\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n\r\n if (!gfxutils.belongToSelectLayers(child)) {\r\n continue;\r\n }\r\n\r\n child.updateMatrixWorld();\r\n const mtx = child.matrixWorld;\r\n inverseMatrix.copy(mtx).invert();\r\n raycaster.ray.copy(ray).applyMatrix4(inverseMatrix);\r\n const childIntersects = [];\r\n this._geometry.raycast(raycaster, childIntersects);\r\n\r\n for (let j = 0, ciCount = childIntersects.length; j < ciCount; ++j) {\r\n const inters = childIntersects[j];\r\n if (inters.point) {\r\n inters.point.applyMatrix4(mtx);\r\n inters.distance = ray.origin.distanceTo(inters.point);\r\n }\r\n inters.object = child;\r\n intersects[intersects.length] = inters;\r\n }\r\n }\r\n raycaster.ray.copy(ray);\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const geos = this._geometry.getSubset(chunkIndices);\r\n const subset = [];\r\n let subIdx = 0;\r\n\r\n for (let i = 0, n = geos.length; i < n; ++i) {\r\n const meshes = this._createMeshes(geos[i]);\r\n for (let j = 0, meshCnt = meshes.length; j < meshCnt; ++j) {\r\n subset[subIdx++] = meshes[j];\r\n }\r\n }\r\n\r\n return subset;\r\n }\r\n\r\n _createMeshes(geometry) {\r\n const transforms = this._transforms;\r\n const Mesh = this._geoParams.Object;\r\n const material = this._material;\r\n const meshes = [];\r\n for (let i = 0, n = transforms.length; i < n; ++i) {\r\n const mesh = new Mesh(geometry, material);\r\n mesh.applyMatrix4(transforms[i]);\r\n meshes[i] = mesh;\r\n }\r\n\r\n return meshes;\r\n }\r\n}\r\n\r\nexport default TransformGroup;\r\n","import RCGroup from '../../RCGroup';\r\nimport TransformGroup from '../../meshes/TransformGroup';\r\n\r\nfunction wrapper(Name, args) {\r\n const params = [Name].concat(args);\r\n return Name.bind(...params);\r\n}\r\n\r\nclass ChemGroup extends RCGroup {\r\n constructor(geoParams, selection, colorer, mode, transforms, polyComplexity, material) {\r\n super();\r\n if (this.constructor === ChemGroup) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n this._selection = selection;\r\n this._mode = mode;\r\n this._colorer = colorer;\r\n this._chunksIdc = selection.chunks;\r\n this._polyComplexity = polyComplexity;\r\n this._geo = new (wrapper(geoParams.Geometry, this._makeGeoArgs()))();\r\n this._mesh = new TransformGroup(this._geo, geoParams, material, transforms);\r\n this.add(this._mesh);\r\n this._build();\r\n }\r\n\r\n _makeGeoArgs() {\r\n throw new Error('ChemGroup subclass must override _makeGeoArgs() method');\r\n }\r\n\r\n /**\r\n * Builds subset geometry by ATOMS index list\r\n *\r\n * @param {Number} mask - Representation mask\r\n * @param {Boolean} innerOnly - if true returns inner bonds only - without halves\r\n * @returns {Array} Subset geometry\r\n */\r\n getSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : false;\r\n const chunksList = this._calcChunksList(mask, innerOnly);\r\n if (chunksList.length === 0) {\r\n return [];\r\n }\r\n return this._mesh.getSubset(chunksList);\r\n }\r\n\r\n _changeSubsetOpacity(mask, value, innerOnly) {\r\n const chunksList = this._calcChunksList(mask, innerOnly);\r\n if (chunksList.length === 0) {\r\n return;\r\n }\r\n this._geo.setOpacity(chunksList, value);\r\n }\r\n\r\n enableSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : true;\r\n this._changeSubsetOpacity(mask, 1.0, innerOnly);\r\n }\r\n\r\n disableSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : true;\r\n this._changeSubsetOpacity(mask, 0.0, innerOnly);\r\n }\r\n}\r\n\r\nexport default ChemGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass AtomsGroup extends ChemGroup {\r\n raycast(raycaster, intersects) {\r\n const { atoms } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const atomsIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const atomIdx = atomsIdc[inters[i].chunkIdx];\r\n if (atomIdx < atoms.length) {\r\n inters[i].atom = atoms[atomIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const { atoms } = this._selection;\r\n const atomsIdc = this._chunksIdc;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n if ((atom.mask & mask) !== 0) {\r\n chunksList.push(i);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default AtomsGroup;\r\n","import AtomsGroup from './AtomsGroup';\r\n\r\nclass AtomsSphereGroup extends AtomsGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length, this._polyComplexity];\r\n }\r\n\r\n _build() {\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n geo.setItem(i, atom.position, mode.calcAtomRadius(atom));\r\n geo.setColor(i, colorer.getAtomColor(atom, parent));\r\n }\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n geo.setItem(i, frameData.getAtomPos(atomsIdc[i]), mode.calcAtomRadius(atom));\r\n if (updateColor) {\r\n geo.setColor(i, frameData.getAtomColor(colorer, atom));\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default AtomsSphereGroup;\r\n","import AtomsSphereGroup from './AtomsSphereGroup';\r\n\r\nclass AtomsSurfaceGroup extends AtomsSphereGroup {\r\n _makeGeoArgs() {\r\n const selectedAtoms = [];\r\n const { atoms, chunks } = this._selection;\r\n const n = chunks.length;\r\n for (let i = 0; i < n; ++i) {\r\n selectedAtoms[i] = atoms[chunks[i]];\r\n }\r\n const opts = this._mode.getSurfaceOpts();\r\n opts.atoms = selectedAtoms;\r\n return [n, opts];\r\n }\r\n}\r\nexport default AtomsSurfaceGroup;\r\n","/* This is a stub class keep it until SAS/SES is refactored */\r\n\r\nimport AtomsSphereGroup from './AtomsSphereGroup';\r\n\r\nclass AtomsSASSESGroupStub extends AtomsSphereGroup {\r\n _makeGeoArgs() {\r\n const selectedAtoms = [];\r\n const { atoms, chunks } = this._selection;\r\n const n = chunks.length;\r\n for (let i = 0; i < n; ++i) {\r\n selectedAtoms[i] = atoms[chunks[i]];\r\n }\r\n const opts = this._mode.getSurfaceOpts();\r\n opts.atoms = selectedAtoms;\r\n opts.selection = this._selection;\r\n opts.colorMode = this._colorer;\r\n return [n, opts];\r\n }\r\n}\r\n\r\nexport default AtomsSASSESGroupStub;\r\n","import AtomsGroup from './AtomsGroup';\r\nimport utils from '../../../utils';\r\n\r\nfunction adjustColor(color) {\r\n let r = (color >> 16) & 255;\r\n let g = (color >> 8) & 255;\r\n let b = color & 255;\r\n\r\n if (0.2126 * r + 0.7152 * g + 0.0722 * b > 127) {\r\n r = r * 3 / 10;\r\n g = g * 3 / 10;\r\n b = b * 3 / 10;\r\n } else {\r\n r = 255 - ((255 - r) * 3 / 10);\r\n g = 255 - ((255 - g) * 3 / 10);\r\n b = 255 - ((255 - b) * 3 / 10);\r\n }\r\n\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\nfunction inverseColor(color) {\r\n const r = (color >> 16) & 255;\r\n const g = (color >> 8) & 255;\r\n const b = color & 255;\r\n\r\n return ((255 - r) << 16) | ((255 - g) << 8) | (255 - b);\r\n}\r\n\r\nfunction getAtomText(atom) {\r\n if (atom.name.getNode() !== null) {\r\n return atom.name.getNode();\r\n }\r\n\r\n return atom.getVisualName();\r\n}\r\n\r\nconst colorMappings = {\r\n none(c) {\r\n return c;\r\n },\r\n adjust: adjustColor,\r\n inverse: inverseColor,\r\n};\r\n\r\nfunction propagateColor(color, rule) {\r\n let result;\r\n if (colorMappings.hasOwnProperty(rule)) {\r\n result = utils.hexColor(colorMappings[rule](color));\r\n } else {\r\n const val = parseInt(rule, 16);\r\n if (!Number.isNaN(val) && rule.toLowerCase().startsWith('0x')) {\r\n result = utils.hexColor(val);\r\n } else {\r\n result = '#000000';\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nconst templateMappings = {\r\n serial(a) {\r\n return a.serial;\r\n },\r\n name(a) {\r\n return a.getVisualName();\r\n },\r\n elem(a) {\r\n return a.element.name;\r\n },\r\n residue(a) {\r\n return a.residue.getType().getName();\r\n },\r\n sequence(a) {\r\n return a.residue.getSequence();\r\n },\r\n chain(a) {\r\n return a.residue.getChain().getName();\r\n },\r\n hetatm(a) {\r\n return a.isHet();\r\n },\r\n water(a) {\r\n return a.residue.getType().getName() === 'HOH' || a.residue.getType().getName() === 'WAT';\r\n },\r\n};\r\n\r\nconst parseTemplate = function (atom, str) {\r\n return str.replace(/\\{\\{(\\s*\\w+\\s*)\\}\\}/g, (m) => {\r\n let key = m.replace(/\\s+/g, '');\r\n key = key.substring(2, key.length - 2).toLowerCase();\r\n\r\n if (templateMappings.hasOwnProperty(key)) {\r\n return templateMappings[key](atom);\r\n }\r\n return 'null';\r\n });\r\n};\r\n\r\nclass AtomsTextGroup extends AtomsGroup {\r\n _makeGeoArgs() {\r\n const opts = this._mode.getLabelOpts();\r\n return [this._selection.chunks.length, opts];\r\n }\r\n\r\n _build() {\r\n const opts = this._mode.getLabelOpts();\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms, parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n const text = opts.template ? parseTemplate(atom, opts.template) : getAtomText(atom);\r\n if (!text) {\r\n continue;\r\n }\r\n const color = colorer.getAtomColor(atom, parent);\r\n const fgColor = parseInt(propagateColor(color, opts.fg).substring(1), 16);\r\n const bgColor = opts.showBg ? parseInt(propagateColor(color, opts.bg).substring(1), 16) : 'transparent';\r\n geo.setItem(i, atom.position, text);\r\n geo.setColor(i, fgColor, bgColor);\r\n }\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const opts = this._mode.getLabelOpts();\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n const text = opts.template ? parseTemplate(atom, opts.template) : getAtomText(atom);\r\n if (!text) {\r\n continue;\r\n }\r\n const color = frameData.getAtomColor(colorer, atom);\r\n const fgColor = parseInt(propagateColor(color, opts.fg).substring(1), 16);\r\n const bgColor = opts.showBg ? parseInt(propagateColor(color, opts.bg).substring(1), 16) : 'transparent';\r\n geo.setItem(i, frameData.getAtomPos(atomsIdc[i]), text);\r\n if (updateColor) {\r\n geo.setColor(i, fgColor, bgColor);\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default AtomsTextGroup;\r\n","import * as THREE from 'three';\r\nimport AtomsGroup from './AtomsGroup';\r\n\r\nfunction _slerp(omega, v1, v2, t) {\r\n const oSin = Math.sin(omega);\r\n return v1.clone().multiplyScalar(Math.sin((1 - t) * omega) / oSin).addScaledVector(v2, Math.sin(t * omega) / oSin);\r\n}\r\n\r\nclass AromaticGroup extends AtomsGroup {\r\n _buildInner(radOffset, addChunk) {\r\n const chunksToIdx = this._selection.chunks;\r\n\r\n const prevVector = new THREE.Vector3();\r\n const currVector = new THREE.Vector3();\r\n const segmentsHeight = this._segmentsHeight;\r\n const leprStep = 1.0 / segmentsHeight;\r\n const colorer = this._colorer;\r\n\r\n const { cycles, parent } = this._selection;\r\n let chunkIdx = 0;\r\n let currAtomIdx = chunksToIdx[chunkIdx];\r\n\r\n for (let cIdx = 0, cCount = cycles.length; cIdx < cCount; ++cIdx) {\r\n const cycle = cycles[cIdx];\r\n const cycAtoms = cycle.atoms;\r\n const chunkPoints = [];\r\n const tmpDir = [];\r\n const { center } = cycle;\r\n const cycleRad = cycle.radius - radOffset;\r\n const n = cycAtoms.length;\r\n let i = 0;\r\n const prevPos = cycAtoms[n - 1].position;\r\n let currPos = cycAtoms[i].position;\r\n prevVector.subVectors(prevPos, center);\r\n currVector.subVectors(currPos, center);\r\n const upDir = currVector.clone().cross(prevVector).normalize();\r\n\r\n for (; i < n; ++i) {\r\n const omega = prevVector.angleTo(currVector);\r\n tmpDir[i] = _slerp(omega, prevVector, currVector, 0.5).normalize();\r\n currPos = cycAtoms[(i + 1) % n].position;\r\n prevVector.copy(currVector);\r\n currVector.subVectors(currPos, center);\r\n }\r\n\r\n for (i = 0; i < n; ++i) {\r\n if (cycAtoms[i].index !== currAtomIdx) {\r\n continue;\r\n }\r\n const start = tmpDir[i];\r\n const end = tmpDir[(i + 1) % n];\r\n const color = colorer.getAtomColor(cycAtoms[i], parent);\r\n const currAngle = start.angleTo(end);\r\n\r\n for (let j = 0; j <= segmentsHeight; ++j) {\r\n chunkPoints[j] = _slerp(currAngle, start, end, j * leprStep).multiplyScalar(cycleRad).add(center);\r\n }\r\n\r\n addChunk(chunkIdx++, color, chunkPoints, center, upDir);\r\n currAtomIdx = chunksToIdx[chunkIdx];\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default AromaticGroup;\r\n","import * as THREE from 'three';\r\nimport gfxutils from '../../gfxutils';\r\nimport AromaticGroup from './AromaticGroup';\r\n\r\nfunction _createShape(rad, parts) {\r\n const pts = [];\r\n for (let i = 0; i < parts; ++i) {\r\n const a = -2 * i / parts * Math.PI;\r\n pts.push(new THREE.Vector3(Math.cos(a) * rad, Math.sin(a) * rad, 0));\r\n }\r\n return pts;\r\n}\r\nconst { calcChunkMatrix } = gfxutils;\r\n\r\nclass AromaticTorusGroup extends AromaticGroup {\r\n _build() {\r\n const segmentsHeight = this._segmentsHeight;\r\n const torusRad = this._mode.getAromRadius();\r\n const radiusV = new THREE.Vector2(torusRad, torusRad);\r\n const radOffset = this._mode.calcStickRadius() + 2 * torusRad;\r\n const lookAtVector = new THREE.Vector3();\r\n const mtc = [];\r\n const geo = this._geo;\r\n this._buildInner(radOffset, (chunkIdx, color, points, center, upDir) => {\r\n for (let j = 0; j <= segmentsHeight; ++j) {\r\n const currPoint = points[j];\r\n const currDir = currPoint.clone().sub(center).cross(upDir);\r\n lookAtVector.addVectors(currPoint, currDir);\r\n mtc[j] = calcChunkMatrix(currPoint, lookAtVector, upDir, radiusV);\r\n }\r\n geo.setItem(chunkIdx, mtc);\r\n geo.setColor(chunkIdx, color);\r\n });\r\n geo.finalize();\r\n }\r\n\r\n _makeGeoArgs() {\r\n this._segmentsHeight = this._polyComplexity;\r\n return [_createShape(1.0, this._polyComplexity), this._segmentsHeight + 1, this._selection.chunks.length];\r\n }\r\n}\r\n\r\nexport default AromaticTorusGroup;\r\n","import AromaticGroup from './AromaticGroup';\r\n\r\nclass AromaticLinesGroup extends AromaticGroup {\r\n _build() {\r\n const geo = this._geo;\r\n const radOffset = this._mode.getAromaticOffset();\r\n this._buildInner(radOffset, (chunkIdx, color, points) => {\r\n let prevPt = points[0];// do not replace with start\r\n for (let j = 1; j <= this._segmentsHeight; ++j) {\r\n const currPoint = points[j];\r\n geo.setSegment(chunkIdx, j - 1, prevPt, currPoint);\r\n prevPt = currPoint;\r\n }\r\n geo.setColor(chunkIdx, color);\r\n });\r\n geo.finalize();\r\n }\r\n\r\n _makeGeoArgs() {\r\n this._segmentsHeight = this._mode.getAromaticArcChunks();\r\n return [this._selection.chunks.length, this._segmentsHeight, true];\r\n }\r\n}\r\n\r\nexport default AromaticLinesGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass ResiduesGroup extends ChemGroup {\r\n raycast(raycaster, intersects) {\r\n const { residues } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const resIdx = chunksIdc[inters[i].chunkIdx];\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const { residues } = this._selection;\r\n const resIdc = this._chunksIdc;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n if ((res._mask & mask) !== 0) {\r\n chunksList.push(i);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default ResiduesGroup;\r\n","import ResiduesGroup from './ResiduesGroup';\r\n\r\nclass NucleicItemGroup extends ResiduesGroup {\r\n raycast(raycaster, intersects) {\r\n const { residues } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const resIdx = chunksIdc[Math.floor(inters[i].chunkIdx / 2)];\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const stickRad = this._mode.calcStickRadius();\r\n let chunkIdx = 0;\r\n\r\n const resIdc = this._selection.chunks;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n const color = colorer.getResidueColor(res, parent);\r\n this._processItem(chunkIdx++, res._cylinders[0], res._cylinders[1], stickRad, color);\r\n }\r\n geo.finalize();\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n let chunkIdx = 0;\r\n const { residues } = this._selection;\r\n const resIdc = this._chunksIdc;\r\n\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n if ((res._mask & mask) !== 0) {\r\n chunksList[chunkIdx++] = 2 * i;\r\n chunksList[chunkIdx++] = 2 * i + 1;\r\n }\r\n }\r\n return chunksList;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const residues = frameData.getResidues();\r\n const { parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const stickRad = this._mode.calcStickRadius();\r\n let chunkIdx = 0;\r\n\r\n const resIdc = this._selection.chunks;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n const color = colorer.getResidueColor(res, parent);\r\n this._processItem(chunkIdx++, res._cylinders[0], res._cylinders[1], stickRad, color);\r\n }\r\n geo.finishUpdate();\r\n }\r\n}\r\n\r\nexport default NucleicItemGroup;\r\n","import NucleicItemGroup from './NucleicItemGroup';\r\n\r\nclass NucleicCylindersGroup extends NucleicItemGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length, this._polyComplexity];\r\n }\r\n\r\n _processItem(chunkIdx, cyl1, cyl2, stickRad, color) {\r\n const geo = this._geo;\r\n geo.setItem(chunkIdx, cyl1, cyl2, stickRad);\r\n geo.setColor(chunkIdx, color, color);\r\n }\r\n}\r\n\r\nexport default NucleicCylindersGroup;\r\n","import NucleicItemGroup from './NucleicItemGroup';\r\n\r\nclass NucleicSpheresGroup extends NucleicItemGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length * 2, this._polyComplexity];\r\n }\r\n\r\n _processItem(chunkIdx, cyl1, cyl2, stickRad, color) {\r\n const geo = this._geo;\r\n let idx = chunkIdx * 2;\r\n geo.setItem(idx, cyl1, stickRad);\r\n geo.setColor(idx, color);\r\n idx++;\r\n geo.setItem(idx, cyl2, stickRad);\r\n geo.setColor(idx, color);\r\n }\r\n}\r\n\r\nexport default NucleicSpheresGroup;\r\n","import * as THREE from 'three';\r\nimport { Smooth } from '../../../../vendor/js/Smooth';\r\nimport gfxutils from '../../gfxutils';\r\nimport chem from '../../../chem';\r\n\r\nconst { ResidueType } = chem;\r\n\r\nconst calcMatrix = gfxutils.calcChunkMatrix;\r\n\r\nfunction _buildStructureInterpolator(points, tension) {\r\n const path = Smooth(points, {\r\n method: Smooth.METHOD_CUBIC,\r\n clip: Smooth.CLIP_CLAMP,\r\n cubicTension: tension,\r\n scaleTo: 1,\r\n });\r\n\r\n return function (t, argTrans) {\r\n let transformT = argTrans;\r\n if (transformT === null) {\r\n // map our range to the [second .. last but one]\r\n transformT = function (tt) {\r\n return (tt * ((points.length - 1) - 2) + 1) / (points.length - 1);\r\n };\r\n }\r\n const newt = transformT(t);\r\n const ans = path(newt);\r\n return new THREE.Vector3(ans[0], ans[1], ans[2]);\r\n };\r\n}\r\n\r\nfunction _addPoints(centerPoints, topPoints, idx, residue) {\r\n if (!residue._isValid) {\r\n centerPoints[idx] = centerPoints[idx - 1];\r\n topPoints[idx] = topPoints[idx - 1];\r\n return;\r\n }\r\n const cp = residue._controlPoint;\r\n centerPoints[idx] = [cp.x, cp.y, cp.z];\r\n const tp = cp.clone().add(residue._wingVector);\r\n topPoints[idx] = [tp.x, tp.y, tp.z];\r\n}\r\n\r\nfunction _addPointsForLoneResidue(centerPoints, topPoints, idx, residue) {\r\n const nucleic = (residue._type.flags & ResidueType.Flags.NUCLEIC) !== 0;\r\n const nameFrom = nucleic ? 'C5\\'' : 'N';\r\n const nameTo = nucleic ? 'C3\\'' : 'C';\r\n\r\n let posFrom;\r\n let posTo;\r\n residue.forEachAtom((atom) => {\r\n const name = atom.getVisualName();\r\n if (!posFrom && name === nameFrom) {\r\n posFrom = atom.position;\r\n } else if (!posTo && name === nameTo) {\r\n posTo = atom.position;\r\n }\r\n });\r\n\r\n // provide a fallback for unknown residues\r\n if (!(posFrom && posTo)) {\r\n posFrom = residue._firstAtom.position;\r\n posTo = residue._lastAtom.position;\r\n }\r\n\r\n if (posFrom && posTo) {\r\n const shift = posTo.clone().sub(posFrom);\r\n\r\n const wing = residue._wingVector;\r\n const cp = residue._controlPoint;\r\n const tp = cp.clone().add(wing);\r\n\r\n const cpPrev = cp.clone().sub(shift);\r\n const tpPrev = cpPrev.clone().add(wing);\r\n centerPoints[idx] = [cpPrev.x, cpPrev.y, cpPrev.z];\r\n topPoints[idx] = [tpPrev.x, tpPrev.y, tpPrev.z];\r\n ++idx;\r\n centerPoints[idx] = [cpPrev.x, cpPrev.y, cpPrev.z];\r\n topPoints[idx] = [tpPrev.x, tpPrev.y, tpPrev.z];\r\n ++idx;\r\n\r\n centerPoints[idx] = [cp.x, cp.y, cp.z];\r\n topPoints[idx] = [tp.x, tp.y, tp.z];\r\n ++idx;\r\n\r\n const cpNext = cp.clone().add(shift);\r\n const tpNext = cpNext.clone().add(wing);\r\n centerPoints[idx] = [cpNext.x, cpNext.y, cpNext.z];\r\n topPoints[idx] = [tpNext.x, tpNext.y, tpNext.z];\r\n ++idx;\r\n centerPoints[idx] = [cpNext.x, cpNext.y, cpNext.z];\r\n topPoints[idx] = [tpNext.x, tpNext.y, tpNext.z];\r\n }\r\n}\r\n\r\nfunction _calcPoints(residues, firstIdx, lastIdx, boundaries) {\r\n const left = boundaries.start;\r\n const right = boundaries.end;\r\n function _prevIdx(idx) {\r\n return idx > left && residues[idx - 1]._isValid ? idx - 1 : idx;\r\n }\r\n function _nextIdx(idx) {\r\n return idx < right && residues[idx + 1]._isValid ? idx + 1 : idx;\r\n }\r\n\r\n const topPoints = [];\r\n const centerPoints = [];\r\n let arrIdx = 0;\r\n function _extrapolate2(currIdx, otherIdx) {\r\n const cp = residues[currIdx]._controlPoint.clone().lerp(residues[otherIdx]._controlPoint, -0.25);\r\n const tp = cp.clone().add(residues[currIdx]._wingVector);\r\n centerPoints[arrIdx] = [cp.x, cp.y, cp.z];\r\n topPoints[arrIdx++] = [tp.x, tp.y, tp.z];\r\n centerPoints[arrIdx] = [cp.x, cp.y, cp.z];\r\n topPoints[arrIdx++] = [tp.x, tp.y, tp.z];\r\n }\r\n\r\n // a single disconnected residue\r\n const prevIdx = _prevIdx(firstIdx);\r\n const nextIdx = _nextIdx(lastIdx);\r\n if (prevIdx === nextIdx) {\r\n _addPointsForLoneResidue(centerPoints, topPoints, arrIdx, residues[firstIdx]);\r\n return { centerPoints, topPoints };\r\n }\r\n\r\n // Two points (prev-prev and next-next) are added to support edge conditions for cubic splines, they are ignored\r\n // Another two (prev and next) were added to support the outside of the sub chain\r\n\r\n // prev and prev-prev\r\n if (firstIdx === prevIdx) {\r\n // do the extrapolation\r\n _extrapolate2(firstIdx, _nextIdx(firstIdx));\r\n } else {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[_prevIdx(prevIdx)]);\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[prevIdx]);\r\n }\r\n\r\n // main loop\r\n for (let idx = firstIdx; idx <= lastIdx; ++idx) {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[idx]);\r\n }\r\n\r\n // next and next-next\r\n if (nextIdx === _nextIdx(nextIdx)) {\r\n // do the extrapolation\r\n _extrapolate2(lastIdx, _prevIdx(lastIdx));\r\n } else {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[nextIdx]);\r\n _addPoints(centerPoints, topPoints, arrIdx, residues[_nextIdx(nextIdx)]);\r\n }\r\n return { centerPoints, topPoints };\r\n}\r\n\r\nclass CartoonHelper {\r\n constructor(residues, startIdx, endIdx, segmentsCount, tension, boundaries) {\r\n const pointsArrays = _calcPoints(residues, startIdx, endIdx, boundaries);\r\n this._topInterp = _buildStructureInterpolator(pointsArrays.topPoints, tension);\r\n this._centerInterp = _buildStructureInterpolator(pointsArrays.centerPoints, tension);\r\n\r\n this._shift = 0.5 / (endIdx - startIdx + 2);\r\n this._valueStep = (1.0 - 2 * this._shift) / (2 * (endIdx - startIdx + 1) * (segmentsCount - 1));\r\n this._segmentsCount = segmentsCount;\r\n }\r\n\r\n prepareMatrices(idx, firstRad, secondRad) {\r\n const mtcCount = this._segmentsCount;\r\n const outMtc = new Array(mtcCount);\r\n const currRad = new THREE.Vector2(0, 0);\r\n\r\n const topInterp = this._topInterp;\r\n const cenInterp = this._centerInterp;\r\n\r\n let currentValue = this._shift + this._valueStep * (mtcCount - 1) * idx;\r\n\r\n for (let mtxIdx = 0; mtxIdx < mtcCount; ++mtxIdx) {\r\n const lerpVal = Math.min(1.0, mtxIdx / (mtcCount - 1));\r\n currRad.lerpVectors(firstRad, secondRad, lerpVal);\r\n\r\n const currTop = topInterp(currentValue, null);\r\n const currCenter = cenInterp(currentValue, null);\r\n currentValue += this._valueStep;\r\n const nextCenter = cenInterp(currentValue, null);\r\n\r\n outMtc[mtxIdx] = calcMatrix(currCenter.clone(), nextCenter.clone(), currTop.clone().sub(currCenter), currRad);\r\n }\r\n\r\n return outMtc;\r\n }\r\n}\r\n\r\nexport default CartoonHelper;\r\n","import * as THREE from 'three';\r\nimport ResiduesGroup from './ResiduesGroup';\r\nimport CartoonHelper from './CartoonHelper';\r\n\r\nfunction _createShape(rad, parts) {\r\n const pts = [];\r\n\r\n for (let i = 0; i < parts; ++i) {\r\n // starts from pi/2 because it's important that points are lied on the angles of arrows (visual issues if not)\r\n const a = Math.PI / 2.0 - 2 * Math.PI * i / parts;\r\n\r\n pts.push(new THREE.Vector3(Math.cos(a) * rad, Math.sin(a) * rad, 0));\r\n }\r\n return pts;\r\n}\r\n\r\nfunction _loopThrough(subDiv, residues, segmentsHeight, tension, mode, callback) {\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n const { boundaries } = subDiv[subDivI];\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const idc = [subs[i].start, subs[i].end];\r\n const matrixHelper = new CartoonHelper(residues, idc[0], idc[1], segmentsHeight, tension, boundaries);\r\n let prevLast = null;\r\n const startIdx = subs[i].start * 2;\r\n const endIdx = subs[i].end * 2 + 1;\r\n let prevSecondRad = mode.getResidueRadius(residues[0], 0);\r\n for (let idx = startIdx; idx <= endIdx; ++idx) {\r\n const resIdx = (idx / 2 | 0);\r\n const currRes = residues[resIdx];\r\n const firstRad = mode.getResidueRadius(currRes, idx % 2);\r\n const secondRad = mode.getResidueRadius(currRes, 1 + (idx % 2));\r\n\r\n const mtc = matrixHelper.prepareMatrices(idx - idc[0] * 2, firstRad, secondRad);\r\n mtc.unshift(prevLast === null ? mtc[0] : prevLast);\r\n\r\n // Slope - radius is changed along this residue part\r\n const hasSlope = (firstRad.x !== secondRad.x) || (firstRad.y !== secondRad.y);\r\n // Cut - end radius of previous part not equal to start radius of this part. First section of this part lies in the orthogonal plane\r\n const hasCut = (firstRad.x !== prevSecondRad.x) || (firstRad.y !== prevSecondRad.y);\r\n\r\n callback(currRes, mtc, hasSlope, hasCut);\r\n\r\n prevLast = mtc[segmentsHeight];\r\n prevSecondRad = secondRad;\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass ResiduesSubseqGroup extends ResiduesGroup {\r\n _makeGeoArgs() {\r\n const cmpMultiplier = this._mode.getHeightSegmentsRatio();\r\n this._segmentsHeight = this._polyComplexity * cmpMultiplier | 0;\r\n return [_createShape(1.0, this._polyComplexity), this._segmentsHeight + 1, this._selection.chunks.length * 2];\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const tension = mode.getTension();\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const chunkIdc = [];\r\n _loopThrough(this._selection.subdivs, residues, this._segmentsHeight, tension, mode, (currRes, mtc, hasSlope = false, hasCut = false) => {\r\n const color = colorer.getResidueColor(currRes, parent);\r\n chunkIdc[chunkIdx] = currRes._index;\r\n geo.setItem(chunkIdx, mtc, hasSlope, hasCut);\r\n geo.setColor(chunkIdx++, color);\r\n });\r\n this._chunksIdc = chunkIdc;\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const { parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const tension = mode.getTension();\r\n const geo = this._geo;\r\n const frameRes = frameData.getResidues();\r\n let chunkIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n _loopThrough(this._selection.subdivs, frameRes, this._segmentsHeight, tension, mode, (currRes, mtc) => {\r\n geo.setItem(chunkIdx, mtc);\r\n if (updateColor) {\r\n geo.setColor(chunkIdx, colorer.getResidueColor(currRes, parent));\r\n }\r\n chunkIdx++;\r\n });\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default ResiduesSubseqGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass ResiduesTraceGroup extends ChemGroup {\r\n _makeGeoArgs() {\r\n const subDiv = this._selection.subdivs;\r\n let chunksCount = 0;\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n chunksCount += subs[i].end - subs[i].start;\r\n }\r\n }\r\n return [chunksCount, this._polyComplexity];\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const chunkIdc = [];\r\n const subDiv = this._selection.subdivs;\r\n const stickRad = mode.calcStickRadius();\r\n\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const startIdx = subs[i].start;\r\n const endIdx = subs[i].end;\r\n let prevRes = residues[startIdx];\r\n for (let idx = startIdx + 1; idx <= endIdx; ++idx) {\r\n const currRes = residues[idx];\r\n chunkIdc[chunkIdx] = { first: prevRes._index, second: currRes._index };\r\n geo.setItem(chunkIdx, prevRes._controlPoint, currRes._controlPoint, stickRad);\r\n geo.setColor(chunkIdx, colorer.getResidueColor(prevRes, parent), colorer.getResidueColor(currRes, parent));\r\n chunkIdx++;\r\n prevRes = currRes;\r\n }\r\n }\r\n }\r\n\r\n this._chunksIdc = chunkIdc;\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n\r\n const residues = frameData.getResidues();\r\n const { parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const subDiv = this._selection.subdivs;\r\n const stickRad = mode.calcStickRadius();\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const startIdx = subs[i].start;\r\n const endIdx = subs[i].end;\r\n let prevRes = residues[startIdx];\r\n for (let idx = startIdx + 1; idx <= endIdx; ++idx) {\r\n const currRes = residues[idx];\r\n geo.setItem(chunkIdx, prevRes._controlPoint, currRes._controlPoint, stickRad);\r\n if (updateColor) {\r\n geo.setColor(chunkIdx, colorer.getResidueColor(prevRes, parent), colorer.getResidueColor(currRes, parent));\r\n }\r\n chunkIdx++;\r\n prevRes = currRes;\r\n }\r\n }\r\n }\r\n\r\n geo.finalize();\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const inters = [];\r\n const { residues } = this._selection;\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksToIdx = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const { chunkIdx } = inters[i];\r\n const chunk = chunksToIdx[Math.floor(chunkIdx / 2)];\r\n const resIdx = chunkIdx % 2 === 0 ? chunk.first : chunk.second;\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const chunksToIdx = this._chunksIdc;\r\n const { residues } = this._selection;\r\n for (let i = 0, n = chunksToIdx.length; i < n; ++i) {\r\n const chunk = chunksToIdx[i];\r\n if (residues[chunk.first]._mask & mask) {\r\n chunksList.push(i * 2);\r\n }\r\n if (residues[chunk.second]._mask & mask) {\r\n chunksList.push(i * 2 + 1);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default ResiduesTraceGroup;\r\n","import ChemGroup from './ChemGroup';\r\nimport Bond from '../../../chem/Bond';\r\n\r\nfunction getCylinderCount(bondOrder) {\r\n return bondOrder < 2 ? 1 : bondOrder;\r\n}\r\n\r\nclass BondsGroup extends ChemGroup {\r\n _makeGeoArgs() {\r\n const drawMultiple = this._mode.drawMultiorderBonds();\r\n const showAromatic = this._mode.showAromaticLoops();\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n let bondsCount = 0;\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n bondsCount += this.getBondOrder(bonds[bondsIdc[i]], drawMultiple, showAromatic);\r\n }\r\n return [bondsCount, this._polyComplexity];\r\n }\r\n\r\n getBondOrder(bond, drawMultiple, showAromatic) {\r\n let bondOrder = 1;\r\n if (drawMultiple && (!showAromatic || bond._type !== Bond.BondType.AROMATIC)) {\r\n bondOrder = getCylinderCount(bond._order);\r\n }\r\n return bondOrder;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const { bonds } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const bondsIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const { chunkIdx } = inters[i];\r\n const bondIdx = bondsIdc[Math.floor(chunkIdx / 2)];\r\n if (bondIdx < bonds.length) {\r\n const bond = bonds[bondIdx];\r\n inters[i].atom = chunkIdx % 2 === 0 ? bond._left : bond._right;\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask, innerOnly) {\r\n const chunksList = [];\r\n const { bonds } = this._selection;\r\n const chunksToIdx = this._chunksIdc;\r\n for (let i = 0, n = chunksToIdx.length; i < n; ++i) {\r\n const bond = bonds[chunksToIdx[i]];\r\n if ((bond._left.mask & mask) && (!innerOnly || (bond._right.mask & mask))) {\r\n chunksList.push(2 * i);\r\n }\r\n if ((bond._right.mask & mask) && (!innerOnly || (bond._left.mask & mask))) {\r\n chunksList.push(2 * i + 1);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default BondsGroup;\r\n","import * as THREE from 'three';\r\nimport BondsGroup from './BondsGroup';\r\n\r\nclass BondsCylinderGroup extends BondsGroup {\r\n _build() {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const stickRad = mode.calcStickRadius();\r\n const emptyOffset = mode.calcSpaceFraction();\r\n let normDir;\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const chunksToIdx = [];\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = atom1.position;\r\n const a2Pos = atom2.position;\r\n normDir = bond.calcNormalDir();\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n const minRad = Math.min(mode.calcAtomRadius(atom1), mode.calcAtomRadius(atom2));\r\n const dist = 2 * minRad / order;\r\n const currStickRad = drawMultiple ? Math.min(stickRad, dist * 0.5 * (1.0 - emptyOffset)) : stickRad;\r\n\r\n for (let j = 0; j < order; ++j) {\r\n const scale = dist * (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n chunksToIdx[currBondIdx] = bond._index;\r\n leftPos.copy(a1Pos);\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.copy(a2Pos);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos, currStickRad);\r\n geo.setColor(currBondIdx++, colorer.getAtomColor(atom1, parent), colorer.getAtomColor(atom2, parent));\r\n }\r\n }\r\n\r\n geo.finalize();\r\n this._chunksIdc = chunksToIdx;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const stickRad = mode.calcStickRadius();\r\n const emptyOffset = mode.calcSpaceFraction();\r\n let normDir;\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = frameData.getAtomPos(atom1.index).clone();\r\n const a2Pos = frameData.getAtomPos(atom2.index);\r\n normDir = bond.calcNormalDir();\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n const minRad = Math.min(mode.calcAtomRadius(atom1), mode.calcAtomRadius(atom2));\r\n const dist = 2 * minRad / order;\r\n const currStickRad = drawMultiple ? Math.min(stickRad, dist * 0.5 * (1.0 - emptyOffset)) : stickRad;\r\n\r\n for (let j = 0; j < order; ++j) {\r\n const scale = dist * (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n leftPos.copy(a1Pos);\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.copy(a2Pos);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos, currStickRad);\r\n if (updateColor) {\r\n geo.setColor(currBondIdx, frameData.getAtomColor(colorer, atom1), frameData.getAtomColor(colorer, atom2));\r\n }\r\n currBondIdx++;\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default BondsCylinderGroup;\r\n","import * as THREE from 'three';\r\nimport BondsGroup from './BondsGroup';\r\n\r\nconst STEP_SIZE = 0.15;\r\n\r\nclass BondsLinesGroup extends BondsGroup {\r\n _build() {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const bondDir = new THREE.Vector3();\r\n\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const chunksToIdx = [];\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = atom1.position;\r\n const a2Pos = atom2.position;\r\n const a1Hangs = atom1.bonds.length === 1;\r\n const a2Hangs = atom2.bonds.length === 1;\r\n bondDir.subVectors(a2Pos, a1Pos);\r\n const len = bondDir.length();\r\n const normDir = bond.calcNormalDir();\r\n\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n\r\n for (let j = 0; j < order; ++j) {\r\n leftPos.copy(a1Pos);\r\n rightPos.copy(a2Pos);\r\n let scale = (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n chunksToIdx[currBondIdx] = bond._index;\r\n if (order === 2 && (!a1Hangs && !a2Hangs)) {\r\n scale -= 0.5;\r\n scale *= -1;\r\n }\r\n\r\n if (!a1Hangs && !a2Hangs && order > 1 && scale !== 0) {\r\n leftPos.lerpVectors(a1Pos, a2Pos, STEP_SIZE / (len));\r\n rightPos.lerpVectors(a1Pos, a2Pos, 1.0 - STEP_SIZE / (len));\r\n }\r\n\r\n scale *= STEP_SIZE;\r\n\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos);\r\n geo.setColor(currBondIdx++, colorer.getAtomColor(atom1, parent), colorer.getAtomColor(atom2, parent));\r\n }\r\n }\r\n geo.finalize();\r\n this._chunksIdc = chunksToIdx;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const bondDir = new THREE.Vector3();\r\n\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = frameData.getAtomPos(atom1.index).clone();\r\n const a2Pos = frameData.getAtomPos(atom2.index);\r\n const a1Hangs = atom1.bonds.length === 1;\r\n const a2Hangs = atom2.bonds.length === 1;\r\n bondDir.subVectors(a2Pos, a1Pos);\r\n const len = bondDir.length();\r\n const normDir = bond.calcNormalDir();\r\n\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n\r\n for (let j = 0; j < order; ++j) {\r\n leftPos.copy(a1Pos);\r\n rightPos.copy(a2Pos);\r\n let scale = (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n if (order === 2 && (!a1Hangs && !a2Hangs)) {\r\n scale -= 0.5;\r\n scale *= -1;\r\n }\r\n\r\n if (!a1Hangs && !a2Hangs && order > 1 && scale !== 0) {\r\n leftPos.lerpVectors(a1Pos, a2Pos, STEP_SIZE / (len));\r\n rightPos.lerpVectors(a1Pos, a2Pos, 1.0 - STEP_SIZE / (len));\r\n }\r\n\r\n scale *= STEP_SIZE;\r\n\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos);\r\n if (updateColor) {\r\n geo.setColor(currBondIdx, frameData.getAtomColor(colorer, atom1), frameData.getAtomColor(colorer, atom2));\r\n }\r\n currBondIdx++;\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default BondsLinesGroup;\r\n","import AtomsSphereGroup from './AtomsSphereGroup';\r\nimport AtomsSurfaceGroup from './AtomsSurfaceGroup';\r\nimport AtomsSASSESGroupStub from './AtomsSASSESGroupStub';\r\nimport AtomsTextGroup from './AtomsTextGroup';\r\nimport AromaticTorusGroup from './AromaticTorusGroup';\r\nimport AromaticLinesGroup from './AromaticLinesGroup';\r\nimport NucleicCylindersGroup from './NucleicCylindersGroup';\r\nimport NucleicSpheresGroup from './NucleicSpheresGroup';\r\nimport ResiduesSubseqGroup from './ResiduesSubseqGroup';\r\nimport ResiduesTraceGroup from './ResiduesTraceGroup';\r\nimport BondsCylinderGroup from './BondsCylinderGroup';\r\nimport BondsLinesGroup from './BondsLinesGroup';\r\n\r\nexport default {\r\n AtomsSphereGroup,\r\n AtomsSurfaceGroup,\r\n AtomsSASSESGroupStub,\r\n AtomsTextGroup,\r\n AromaticTorusGroup,\r\n AromaticLinesGroup,\r\n NucleicCylindersGroup,\r\n NucleicSpheresGroup,\r\n ResiduesSubseqGroup,\r\n ResiduesTraceGroup,\r\n BondsCylinderGroup,\r\n BondsLinesGroup,\r\n};\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass AtomsProcessor extends RCGroup {\r\n constructor(AtomsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n this._mode = mode;\r\n const atoms = complex.getAtoms();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const atomsIdc = [];\r\n let atomCount = 0;\r\n component.forEachAtom((atom) => {\r\n if (!self._checkAtom(atom, mask)) {\r\n return;\r\n }\r\n atomsIdc[atomCount++] = atom.index;\r\n });\r\n if (atomCount === 0) {\r\n return;\r\n }\r\n const atomsGroup = new AtomsGroup(geoParams, {\r\n atoms,\r\n chunks: atomsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n atomsGroup._component = component;\r\n self.add(atomsGroup);\r\n });\r\n }\r\n\r\n _checkAtom(atom, mask) {\r\n return atom.mask & mask;\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default AtomsProcessor;\r\n","import AtomsProcessor from './AtomsProcessor';\r\n\r\nclass OrphanAtomsProcessor extends AtomsProcessor {\r\n _checkAtom(atom, mask) {\r\n if (!(atom.mask & mask)) {\r\n return false;\r\n }\r\n\r\n const { bonds } = atom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n if ((bonds[i]._left.mask & mask) && (bonds[i]._right.mask & mask)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\nexport default OrphanAtomsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass ResiduesProcessor extends RCGroup {\r\n constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const residues = complex.getResidues();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n let chunksCount = 0;\r\n const resIdc = [];\r\n component.forEachResidue((residue) => {\r\n if (self._checkResidue(residue, mask)) {\r\n resIdc[chunksCount++] = residue._index;\r\n }\r\n });\r\n\r\n if (chunksCount === 0) {\r\n return;\r\n }\r\n const residuesGroup = new ResidueGroup(geoParams, {\r\n residues,\r\n chunks: resIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n residuesGroup._component = component;\r\n self.add(residuesGroup);\r\n });\r\n }\r\n\r\n checkResidue(residue, mask) {\r\n return residue._mask & mask;\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default ResiduesProcessor;\r\n","import ResidueProcessor from './ResiduesProcessor';\r\n\r\nclass NucleicProcessor extends ResidueProcessor {\r\n _checkResidue(residue, mask) {\r\n return mask & residue._mask && residue._cylinders !== null;\r\n }\r\n}\r\nexport default NucleicProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass SubseqsProcessor extends RCGroup {\r\n constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const residues = complex.getResidues();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const subDivs = component.getMaskedSubdivSequences(mask);\r\n\r\n let chunksCount = 0;\r\n const resIdc = [];\r\n for (let subDivI = 0, subDivN = subDivs.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDivs[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n for (let j = subs[i].start, jEnd = subs[i].end; j <= jEnd; ++j) {\r\n resIdc[chunksCount++] = residues[j]._index;\r\n }\r\n }\r\n }\r\n\r\n if (chunksCount === 0) {\r\n return;\r\n }\r\n const residuesGroup = new ResidueGroup(geoParams, {\r\n residues,\r\n chunks: resIdc,\r\n subdivs: subDivs,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n residuesGroup._component = component;\r\n self.add(residuesGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default SubseqsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass BondsProcessor extends RCGroup {\r\n constructor(BondsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const bonds = complex.getBonds();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const bondsIdc = [];\r\n let bondsCount = 0;\r\n component.forEachBond((bond) => {\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n if (!(atom1.mask & mask) || !(atom2.mask & mask)) {\r\n return;\r\n }\r\n bondsIdc[bondsCount++] = bond._index;\r\n });\r\n if (bondsCount === 0) {\r\n return;\r\n }\r\n const bondsGroup = new BondsGroup(geoParams, {\r\n bonds,\r\n chunks: bondsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n bondsGroup._component = component;\r\n self.add(bondsGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default BondsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass AromaticProcessor extends RCGroup {\r\n constructor(AromaticGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const atoms = complex.getAtoms();\r\n const transforms = complex.getTransforms();\r\n if (!mode.showAromaticLoops()) {\r\n return;\r\n }\r\n\r\n complex.forEachComponent((component) => {\r\n const atomsIdc = [];\r\n let chunksCount = 0;\r\n const cycles = [];\r\n let cycleIdx = 0;\r\n component.forEachCycle((cycle) => {\r\n const cycAtoms = cycle.atoms;\r\n let perCycle = 0;\r\n for (let i = 0, n = cycAtoms.length; i < n; ++i) {\r\n if ((cycAtoms[i].mask & mask) !== 0) {\r\n ++perCycle;\r\n atomsIdc[chunksCount++] = cycAtoms[i].index;\r\n }\r\n }\r\n if (perCycle > 0) {\r\n cycles[cycleIdx++] = cycle;\r\n }\r\n });\r\n\r\n const atomsGroup = new AromaticGroup(geoParams, {\r\n cycles,\r\n atoms,\r\n chunks: atomsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n atomsGroup._component = component;\r\n self.add(atomsGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default AromaticProcessor;\r\n","import AtomsProcessor from './AtomsProcessor';\r\nimport OrphanAtomsProcessor from './OrphanAtomsProcessor';\r\nimport ResiduesProcessor from './ResiduesProcessor';\r\nimport NucleicProcessor from './NucleicProcessor';\r\nimport SubseqsProcessor from './SubseqsProcessor';\r\nimport BondsProcessor from './BondsProcessor';\r\nimport AromaticProcessor from './AromaticProcessor';\r\n\r\nexport default {\r\n Atoms: AtomsProcessor,\r\n OrphanAtoms: OrphanAtomsProcessor,\r\n Residues: ResiduesProcessor,\r\n Nucleic: NucleicProcessor,\r\n Subseqs: SubseqsProcessor,\r\n Bonds: BondsProcessor,\r\n Aromatic: AromaticProcessor,\r\n};\r\n","import MeshCreator from '../../meshes/MeshCreator';\r\nimport groups from './groups';\r\nimport processors from '../processors/processors';\r\n\r\nfunction _bakeGroup(triplet, Processor, Group) {\r\n return function (complex, colorer, mode, polyComplexity, mask, material) {\r\n return new Processor(Group, triplet, complex, colorer, mode, polyComplexity, mask, material);\r\n };\r\n}\r\n\r\nclass GroupsFactory {\r\n static AtomsSpheres(caps, settings) {\r\n const gfxTriplet = MeshCreator.createSpheres(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSphereGroup);\r\n }\r\n\r\n static OrphanedAtomsCrosses(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createCrosses(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.OrphanAtoms, groups.AtomsSphereGroup);\r\n }\r\n\r\n static BondsCylinders(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Bonds, groups.BondsCylinderGroup);\r\n }\r\n\r\n static BondsLines(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.create2CLines(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Bonds, groups.BondsLinesGroup);\r\n }\r\n\r\n static CartoonChains(caps, settings) {\r\n const gfxTriplet = MeshCreator.createExtrudedChains(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Subseqs, groups.ResiduesSubseqGroup);\r\n }\r\n\r\n static TraceChains(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CClosedCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Subseqs, groups.ResiduesTraceGroup);\r\n }\r\n\r\n static NucleicSpheres(caps, settings) {\r\n const gfxTriplet = MeshCreator.createSpheres(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Nucleic, groups.NucleicSpheresGroup);\r\n }\r\n\r\n static NucleicCylinders(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Nucleic, groups.NucleicCylindersGroup);\r\n }\r\n\r\n static ALoopsTorus(caps, settings) {\r\n const gfxTriplet = MeshCreator.createExtrudedChains(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Aromatic, groups.AromaticTorusGroup);\r\n }\r\n\r\n static ALoopsLines(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createChunkedLines(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Aromatic, groups.AromaticLinesGroup);\r\n }\r\n\r\n static QuickSurfGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createQuickSurface(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSurfaceGroup);\r\n }\r\n\r\n static ContactSurfaceGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createContactSurface(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSurfaceGroup);\r\n }\r\n\r\n static SASSESSurfaceGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createSASSES(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSASSESGroupStub);\r\n }\r\n\r\n static TextLabelsGeo(caps, settings) {\r\n const gfxTriplet = MeshCreator.createLabels(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsTextGroup);\r\n }\r\n}\r\n\r\nexport default GroupsFactory;\r\n","import _ from 'lodash';\r\nimport makeContextDependent from '../../utils/makeContextDependent';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport factory from './groups/GroupsFactory';\r\n\r\n/**\r\n * Create new mode.\r\n *\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the mode after its creation.\r\n *\r\n * @exports Mode\r\n * @this Mode\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all available modes used for building and displaying molecule geometry.\r\n */\r\nclass Mode {\r\n constructor(opts) {\r\n if (this.constructor === Mode) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Mode options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.opts = _.merge(utils.deriveDeep(this.settings.now.modes[this.id], true), opts);\r\n }\r\n\r\n /**\r\n * Get mode identification, probably with options.\r\n * @returns {string|Array} Mode identifier string ({@link Mode#id}) or two-element array containing both mode\r\n * identifier and options ({@link Mode#opts}).\r\n * Options are returned if they were changed during or after the mode creation.\r\n */\r\n identify() {\r\n const diff = utils.objectsDiff(this.opts, this.settings.now.modes[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n return [this.id, diff];\r\n }\r\n return this.id;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const polyComplexity = this.opts.polyComplexity ? this.opts.polyComplexity[this.settings.now.resolution] : 0;\r\n const groupList = this.depGroups;\r\n const groupCount = groupList.length;\r\n const group = new gfxutils.RCGroup();\r\n const self = this;\r\n for (let i = 0; i < groupCount; ++i) {\r\n let currGroup = groupList[i];\r\n let renderParams = {};\r\n if (_.isArray(currGroup)) {\r\n renderParams = currGroup[1].call(this);\r\n [currGroup] = currGroup;\r\n }\r\n const Group = factory[currGroup](null, this.settings, renderParams);\r\n const newGroup = new Group(complex, colorer, self, polyComplexity, mask, material);\r\n if (newGroup.children.length > 0) {\r\n group.add(newGroup);\r\n }\r\n }\r\n return group;\r\n }\r\n}\r\n\r\nmakeContextDependent(Mode.prototype);\r\n\r\n/**\r\n* Mode identifier.\r\n* @type {string}\r\n*/\r\nMode.prototype.id = '__';\r\n\r\n/**\r\n * Mode geo groups.\r\n * @type {Array}\r\n */\r\nMode.prototype.depGroups = [];\r\n\r\nexport default Mode;\r\n","import Mode from './Mode';\r\n\r\nfunction getRenderParams() {\r\n return {\r\n lineWidth: this.opts.lineWidth,\r\n };\r\n}\r\n\r\nclass LinesMode extends Mode {\r\n static id = 'LN';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n this.depGroups = this.depGroups.slice(0); // clone depGroups to prevent prototype edits\r\n const groups = this.depGroups;\r\n for (let i = 0, n = groups.length; i < n; ++i) {\r\n groups[i] = [groups[i], getRenderParams];\r\n }\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n\r\n calcAtomRadius() {\r\n return this.opts.atom;\r\n }\r\n\r\n getAromaticOffset() {\r\n return this.opts.offsarom;\r\n }\r\n\r\n getAromaticArcChunks() {\r\n return this.opts.chunkarom;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n}\r\n\r\nLinesMode.prototype.id = 'LN';\r\nLinesMode.prototype.name = 'Lines';\r\nLinesMode.prototype.shortName = 'Lines';\r\nLinesMode.prototype.depGroups = [\r\n 'ALoopsLines',\r\n 'BondsLines',\r\n 'OrphanedAtomsCrosses',\r\n];\r\n\r\nexport default LinesMode;\r\n","/* eslint-disable no-magic-numbers */\r\nimport Mode from './Mode';\r\n\r\nclass LicoriceMode extends Mode {\r\n static id = 'LC';\r\n\r\n calcAtomRadius(_atom) {\r\n return this.opts.bond;\r\n }\r\n\r\n calcStickRadius() {\r\n return this.opts.bond;\r\n }\r\n\r\n calcSpaceFraction() {\r\n return this.opts.space;\r\n }\r\n\r\n getAromRadius() {\r\n return this.opts.aromrad;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n}\r\n\r\nLicoriceMode.prototype.id = 'LC';\r\nLicoriceMode.prototype.name = 'Licorice';\r\nLicoriceMode.prototype.shortName = 'Licorice';\r\nLicoriceMode.prototype.depGroups = [\r\n 'AtomsSpheres',\r\n 'BondsCylinders',\r\n 'ALoopsTorus',\r\n];\r\n\r\nexport default LicoriceMode;\r\n","/* eslint-disable no-magic-numbers */\r\nimport Mode from './Mode';\r\n\r\nclass BallsAndSticksMode extends Mode {\r\n static id = 'BS';\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius * this.opts.atom;\r\n }\r\n\r\n calcStickRadius() {\r\n return this.opts.bond;\r\n }\r\n\r\n getAromRadius() {\r\n return this.opts.aromrad;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n\r\n calcSpaceFraction() {\r\n return this.opts.space;\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n}\r\n\r\nBallsAndSticksMode.prototype.id = 'BS';\r\nBallsAndSticksMode.prototype.name = 'Balls and Sticks';\r\nBallsAndSticksMode.prototype.shortName = 'Balls';\r\nBallsAndSticksMode.prototype.depGroups = [\r\n 'AtomsSpheres',\r\n 'BondsCylinders',\r\n 'ALoopsTorus',\r\n];\r\n\r\nexport default BallsAndSticksMode;\r\n","import Mode from './Mode';\r\n\r\nclass VanDerWaalsMode extends Mode {\r\n static id = 'VW';\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n}\r\n\r\nVanDerWaalsMode.prototype.id = 'VW';\r\nVanDerWaalsMode.prototype.name = 'Van der Waals';\r\nVanDerWaalsMode.prototype.shortName = 'VDW';\r\nVanDerWaalsMode.prototype.depGroups = ['AtomsSpheres'];\r\n\r\nexport default VanDerWaalsMode;\r\n","import Mode from './Mode';\r\n\r\nclass TraceMode extends Mode {\r\n static id = 'TR';\r\n\r\n calcStickRadius() {\r\n return this.opts.radius;\r\n }\r\n}\r\n\r\nTraceMode.prototype.id = 'TR';\r\nTraceMode.prototype.name = 'Trace';\r\nTraceMode.prototype.shortName = 'Trace';\r\nTraceMode.prototype.depGroups = ['TraceChains'];\r\n\r\nexport default TraceMode;\r\n","import * as THREE from 'three';\r\nimport Mode from './Mode';\r\n\r\nclass TubeMode extends Mode {\r\n static id = 'TU';\r\n\r\n getResidueRadius(_residue) {\r\n return this.TUBE_RADIUS;\r\n }\r\n\r\n getHeightSegmentsRatio() {\r\n return this.opts.heightSegmentsRatio;\r\n }\r\n\r\n getTension() {\r\n return this.opts.tension;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const rad = this.opts.radius;\r\n this.TUBE_RADIUS = new THREE.Vector2(rad, rad);\r\n\r\n return Mode.prototype.buildGeometry.call(this, complex, colorer, mask, material);\r\n }\r\n}\r\n\r\nTubeMode.prototype.id = 'TU';\r\nTubeMode.prototype.name = 'Tube';\r\nTubeMode.prototype.shortName = 'Tube';\r\nTubeMode.prototype.depGroups = ['CartoonChains'];\r\n\r\nexport default TubeMode;\r\n","import * as THREE from 'three';\r\nimport Mode from './Mode';\r\n\r\nclass CartoonMode extends Mode {\r\n static id = 'CA';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n // cache for secondary structure options\r\n this.secCache = {};\r\n }\r\n\r\n getResidueStartRadius(residue) {\r\n const second = residue.getSecondary();\r\n if (!second || !second.generic) {\r\n return this.TUBE_RADIUS;\r\n }\r\n const secOpts = this.secCache[second.generic];\r\n if (!secOpts) {\r\n return this.TUBE_RADIUS;\r\n }\r\n if (second.term === residue) {\r\n return secOpts.start;\r\n }\r\n return secOpts.center;\r\n }\r\n\r\n getResidueEndRadius(residue) {\r\n const second = residue.getSecondary();\r\n if (second === null || !second.generic) {\r\n return this.TUBE_RADIUS;\r\n }\r\n const secOpts = this.secCache[second.generic];\r\n if (!secOpts) {\r\n return this.TUBE_RADIUS;\r\n }\r\n if (second.term === residue) {\r\n return this.ARROW_END;\r\n }\r\n return secOpts.center;\r\n }\r\n\r\n getResidueRadius(residue, val) {\r\n const startRad = this.getResidueStartRadius(residue);\r\n if (val === 0) {\r\n return startRad;\r\n }\r\n\r\n const endRad = this.getResidueEndRadius(residue);\r\n if (val === 2) {\r\n return endRad;\r\n }\r\n\r\n return startRad.clone().lerp(endRad, val / 2.0);\r\n }\r\n\r\n calcStickRadius(_res) {\r\n return this.opts.radius;\r\n }\r\n\r\n getHeightSegmentsRatio() {\r\n return this.opts.heightSegmentsRatio;\r\n }\r\n\r\n getTension() {\r\n return this.opts.tension;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const tubeRad = this.opts.radius;\r\n const secHeight = this.opts.depth;\r\n\r\n this.TUBE_RADIUS = new THREE.Vector2(tubeRad, tubeRad);\r\n this.ARROW_END = new THREE.Vector2(secHeight, tubeRad);\r\n const secCache = {};\r\n const secData = this.opts.ss;\r\n /* eslint-disable guard-for-in */\r\n for (const prop in secData) {\r\n secCache[prop] = {\r\n center: new THREE.Vector2(secHeight, secData[prop].width),\r\n start: new THREE.Vector2(secHeight, secData[prop].arrow),\r\n };\r\n }\r\n this.secCache = secCache;\r\n /* eslint-enable guard-for-in */\r\n\r\n return Mode.prototype.buildGeometry.call(this, complex, colorer, mask, material);\r\n }\r\n}\r\n\r\nCartoonMode.prototype.id = 'CA';\r\nCartoonMode.prototype.name = 'Cartoon';\r\nCartoonMode.prototype.shortName = 'Cartoon';\r\nCartoonMode.prototype.depGroups = [\r\n 'CartoonChains',\r\n 'NucleicSpheres',\r\n 'NucleicCylinders',\r\n];\r\n\r\nexport default CartoonMode;\r\n","import chem from '../../chem';\r\nimport Mode from './Mode';\r\n\r\nconst { selectors } = chem;\r\n\r\nfunction getRenderParams() {\r\n return {\r\n wireframe: this.opts.wireframe,\r\n zClip: this.opts.zClip,\r\n };\r\n}\r\n\r\nclass SurfaceMode extends Mode {\r\n constructor(opts) {\r\n super(opts);\r\n this.depGroups = this.depGroups.slice(0); // clone depGroups to prevent prototype edits\r\n const surfaces = this.surfaceNames;\r\n const groups = this.depGroups;\r\n for (let i = 0, n = surfaces.length; i < n; ++i) {\r\n groups[groups.length] = [surfaces[i], getRenderParams];\r\n }\r\n }\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n\r\n getVisibilitySelector() {\r\n let visibilitySelector = null;\r\n if (this.opts.subset !== '') {\r\n const res = selectors.parse(this.opts.subset);\r\n if (!res.error) {\r\n visibilitySelector = res.selector;\r\n }\r\n }\r\n return visibilitySelector;\r\n }\r\n}\r\n\r\nSurfaceMode.prototype.isSurface = true;\r\nSurfaceMode.prototype.surfaceNames = [];\r\n\r\nexport default SurfaceMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass QuickSurfaceMode extends SurfaceMode {\r\n static id = 'QS';\r\n\r\n getSurfaceOpts() {\r\n return {\r\n useBeads: false,\r\n isoValue: this.opts.isoValue,\r\n gaussLim: this.opts.gaussLim[this.settings.now.resolution],\r\n radScale: this.opts.scale,\r\n gridSpacing: this.opts.gridSpacing[this.settings.now.resolution],\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n };\r\n }\r\n}\r\n\r\nQuickSurfaceMode.prototype.id = 'QS';\r\nQuickSurfaceMode.prototype.name = 'Quick Surface';\r\nQuickSurfaceMode.prototype.shortName = 'Quick Surf';\r\nQuickSurfaceMode.prototype.surfaceNames = ['QuickSurfGeo'];\r\n\r\nexport default QuickSurfaceMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass IsoSurfaceMode extends SurfaceMode {\r\n constructor(excludeProbe, opts) {\r\n super(opts);\r\n this._excludeProbe = excludeProbe;\r\n }\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n\r\n getSurfaceOpts() {\r\n return {\r\n gridSpacing: this.opts.polyComplexity[this.settings.now.resolution],\r\n radScale: this._radScale,\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n probeRadius: this.opts.probeRadius,\r\n excludeProbe: this._excludeProbe,\r\n };\r\n }\r\n}\r\n\r\nIsoSurfaceMode.prototype.id = 'SU';\r\nIsoSurfaceMode.prototype.name = 'Surface';\r\nIsoSurfaceMode.prototype.shortName = 'Surface';\r\nIsoSurfaceMode.prototype.surfaceNames = ['SASSESSurfaceGeo'];\r\n\r\nIsoSurfaceMode.prototype._radScale = 1;\r\nIsoSurfaceMode.prototype._excludeProbe = false;\r\n\r\nexport default IsoSurfaceMode;\r\n","import IsoSurfaceMode from './IsoSurfaceMode';\r\n\r\nclass IsoSurfaceSASMode extends IsoSurfaceMode {\r\n static id = 'SA';\r\n\r\n constructor(opts) {\r\n super(false, opts);\r\n }\r\n}\r\n\r\nIsoSurfaceSASMode.prototype.id = 'SA';\r\nIsoSurfaceSASMode.prototype.name = 'Solvent Accessible Surface';\r\nIsoSurfaceSASMode.prototype.shortName = 'SAS';\r\n\r\nexport default IsoSurfaceSASMode;\r\n","import IsoSurfaceMode from './IsoSurfaceMode';\r\n\r\nclass IsoSurfaceSESMode extends IsoSurfaceMode {\r\n static id = 'SE';\r\n\r\n constructor(opts) {\r\n super(true, opts);\r\n }\r\n}\r\n\r\nIsoSurfaceSESMode.prototype.id = 'SE';\r\nIsoSurfaceSESMode.prototype.name = 'Solvent Excluded Surface';\r\nIsoSurfaceSESMode.prototype.shortName = 'SES';\r\n\r\nexport default IsoSurfaceSESMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass ContactSurfaceMode extends SurfaceMode {\r\n static id = 'CS';\r\n\r\n getSurfaceOpts() {\r\n return {\r\n probeRadius: this.opts.probeRadius,\r\n radScale: this.opts.polyComplexity[this.settings.now.resolution],\r\n scaleFactor: this.opts.polyComplexity[this.settings.now.resolution],\r\n gridSpacing: 1.0 / this.opts.polyComplexity[this.settings.now.resolution],\r\n isoValue: this.opts.isoValue,\r\n probePositions: this.opts.probePositions,\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n };\r\n }\r\n}\r\n\r\nContactSurfaceMode.prototype.id = 'CS';\r\nContactSurfaceMode.prototype.name = 'Contact Surface';\r\nContactSurfaceMode.prototype.shortName = 'Contact Surf';\r\nContactSurfaceMode.prototype.isSurface = true;\r\nContactSurfaceMode.prototype.surfaceNames = ['ContactSurfaceGeo'];\r\n\r\nexport default ContactSurfaceMode;\r\n","import _ from 'lodash';\r\nimport Mode from './Mode';\r\n\r\nclass TextMode extends Mode {\r\n static id = 'TX';\r\n\r\n getTemplateOptions() {\r\n return this.opts.template;\r\n }\r\n\r\n getLabelOpts() {\r\n return _.merge(this.opts, {\r\n colors: true,\r\n adjustColor: true,\r\n transparent: true,\r\n });\r\n }\r\n}\r\n\r\nTextMode.prototype.id = 'TX';\r\nTextMode.prototype.name = 'Text mode';\r\nTextMode.prototype.shortName = 'Text';\r\nTextMode.prototype.depGroups = ['TextLabelsGeo'];\r\n\r\nexport default TextMode;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport LinesMode from './modes/LinesMode';\r\nimport LicoriceMode from './modes/LicoriceMode';\r\nimport BallsAndSticksMode from './modes/BallsAndSticksMode';\r\nimport VanDerWaalsMode from './modes/VanDerWaalsMode';\r\nimport TraceMode from './modes/TraceMode';\r\nimport TubeMode from './modes/TubeMode';\r\nimport CartoonMode from './modes/CartoonMode';\r\nimport QuickSurfaceMode from './modes/QuickSurfaceMode';\r\nimport IsoSurfaceSASMode from './modes/IsoSurfaceSASMode';\r\nimport IsoSurfaceSESMode from './modes/IsoSurfaceSESMode';\r\nimport ContactSurfaceMode from './modes/ContactSurfaceMode';\r\nimport TextMode from './modes/TextMode';\r\n\r\nconst modes = new EntityList([\r\n LinesMode,\r\n LicoriceMode,\r\n BallsAndSticksMode,\r\n VanDerWaalsMode,\r\n TraceMode,\r\n TubeMode,\r\n CartoonMode,\r\n QuickSurfaceMode,\r\n IsoSurfaceSASMode,\r\n IsoSurfaceSESMode,\r\n ContactSurfaceMode,\r\n TextMode,\r\n]);\r\n\r\nexport default modes;\r\n","import _ from 'lodash';\r\n\r\nfunction clamp(x, a, b) {\r\n return x <= b ? x < 0 ? 0 : x : b;\r\n}\r\n\r\nfunction lerpColor(c1, c2, alpha) {\r\n const beta = 1 - alpha;\r\n const r1 = (c1 >> 16) & 0xff;\r\n const g1 = (c1 >> 8) & 0xff;\r\n const b1 = c1 & 0xff;\r\n const r2 = (c2 >> 16) & 0xff;\r\n const g2 = (c2 >> 8) & 0xff;\r\n const b2 = c2 & 0xff;\r\n const r = beta * r1 + alpha * r2;\r\n const g = beta * g1 + alpha * g2;\r\n const b = beta * b1 + alpha * b2;\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\nclass Palette {\r\n constructor(name, id) {\r\n this.name = name || 'Custom';\r\n this.id = id || 'CP';\r\n }\r\n\r\n getElementColor(name, asIs = false) {\r\n const color = this.elementColors[name];\r\n return color === undefined && !asIs ? this.defaultElementColor : color;\r\n }\r\n\r\n getResidueColor(name, asIs = false) {\r\n const color = this.residueColors[name];\r\n return color === undefined && !asIs ? this.defaultResidueColor : color;\r\n }\r\n\r\n getChainColor(name) {\r\n let chain = name.charCodeAt(0);\r\n chain = ((chain < 0 ? 0 : chain >= 256 ? chain - 256 : chain) & 0x1F)\r\n % this.chainColors.length;\r\n return this.chainColors[chain];\r\n }\r\n\r\n getSecondaryColor(type, asIs = false) {\r\n const color = this.secondaryColors[type];\r\n return color === undefined && !asIs ? this.defaultSecondaryColor : color;\r\n }\r\n\r\n getSequentialColor(index) {\r\n const { colors } = this;\r\n const len = colors.length;\r\n return index < 0 ? colors[(index % len) + len] : colors[index % len];\r\n }\r\n\r\n getGradientColor(value, gradientName) {\r\n const gradient = this.gradients[gradientName];\r\n if (!gradient) {\r\n return this.defaultNamedColor;\r\n }\r\n const count = gradient.length;\r\n const index = value * (count - 1);\r\n let left = Math.floor(index);\r\n const right = clamp(left + 1, 0, count - 1);\r\n left = clamp(left, 0, count - 1);\r\n return lerpColor(gradient[left], gradient[right], index - left);\r\n }\r\n\r\n getNamedColor(name, asIs = false) {\r\n const color = this.namedColors[name];\r\n return color === undefined && !asIs ? this.defaultNamedColor : color;\r\n }\r\n}\r\n\r\n_.assign(Palette.prototype, {\r\n colors: [0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0x808080],\r\n\r\n minRangeColor: 0x000000,\r\n midRangeColor: 0x7F7F7F,\r\n maxRangeColor: 0xFFFFFF,\r\n\r\n defaultElementColor: 0xFFFFFF,\r\n elementColors: {},\r\n\r\n defaultResidueColor: 0xFFFFFF,\r\n residueColors: {},\r\n\r\n chainColors: [0xFFFFFF],\r\n\r\n defaultSecondaryColor: 0xFFFFFF,\r\n secondaryColors: {},\r\n\r\n defaultGradientColor: 0x000000,\r\n\r\n defaultNamedColor: 0xFFFFFF,\r\n namedColorsArray: [\r\n /* eslint-disable no-multi-spaces */\r\n ['indianred', 0xcd5c5c],\r\n ['lightcoral', 0xf08080],\r\n ['salmon', 0xfa8072],\r\n ['darksalmon', 0xe9967a],\r\n ['lightsalmon', 0xffa07a],\r\n ['crimson', 0xdc143c],\r\n ['red', 0xff0000],\r\n ['firebrick', 0xb22222],\r\n ['darkred', 0x8b0000],\r\n ['pink', 0xffc0cb],\r\n ['lightpink', 0xffb6c1],\r\n ['hotpink', 0xff69b4],\r\n ['deeppink', 0xff1493],\r\n ['mediumvioletred', 0xc71585],\r\n ['palevioletred', 0xdb7093],\r\n ['coral', 0xff7f50],\r\n ['tomato', 0xff6347],\r\n ['orangered', 0xff4500],\r\n ['darkorange', 0xff8c00],\r\n ['orange', 0xffa500],\r\n ['gold', 0xffd700],\r\n ['yellow', 0xffff00],\r\n ['lightyellow', 0xffffe0],\r\n ['lemonchiffon', 0xfffacd],\r\n ['lightgoldenrodyellow', 0xfafad2],\r\n ['papayawhip', 0xffefd5],\r\n ['moccasin', 0xffe4b5],\r\n ['peachpuff', 0xffdab9],\r\n ['palegoldenrod', 0xeee8aa],\r\n ['khaki', 0xf0e68c],\r\n ['darkkhaki', 0xbdb76b],\r\n ['lavender', 0xe6e6fa],\r\n ['thistle', 0xd8bfd8],\r\n ['plum', 0xdda0dd],\r\n ['violet', 0xee82ee],\r\n ['orchid', 0xda70d6],\r\n ['fuchsia', 0xff00ff],\r\n ['magenta', 0xff00ff],\r\n ['mediumorchid', 0xba55d3],\r\n ['mediumpurple', 0x9370db],\r\n ['rebeccapurple', 0x663399],\r\n ['blueviolet', 0x8a2be2],\r\n ['darkviolet', 0x9400d3],\r\n ['darkorchid', 0x9932cc],\r\n ['darkmagenta', 0x8b008b],\r\n ['purple', 0x800080],\r\n ['indigo', 0x4b0082],\r\n ['slateblue', 0x6a5acd],\r\n ['mediumslateblue', 0x7b68ee],\r\n ['darkslateblue', 0x483d8b],\r\n ['greenyellow', 0xadff2f],\r\n ['chartreuse', 0x7fff00],\r\n ['lawngreen', 0x7cfc00],\r\n ['lime', 0x00ff00],\r\n ['limegreen', 0x32cd32],\r\n ['palegreen', 0x98fb98],\r\n ['lightgreen', 0x90ee90],\r\n ['mediumspringgreen', 0x00fa9a],\r\n ['springgreen', 0x00ff7f],\r\n ['mediumseagreen', 0x3cb371],\r\n ['seagreen', 0x2e8b57],\r\n ['forestgreen', 0x228b22],\r\n ['green', 0x008000],\r\n ['darkgreen', 0x006400],\r\n ['yellowgreen', 0x9acd32],\r\n ['olivedrab', 0x6b8e23],\r\n ['olive', 0x808000],\r\n ['darkolivegreen', 0x556b2f],\r\n ['mediumaquamarine', 0x66cdaa],\r\n ['darkseagreen', 0x8fbc8f],\r\n ['lightseagreen', 0x20b2aa],\r\n ['darkcyan', 0x008b8b],\r\n ['teal', 0x008080],\r\n ['aqua', 0x00ffff],\r\n ['cyan', 0x00ffff],\r\n ['lightcyan', 0xe0ffff],\r\n ['paleturquoise', 0xafeeee],\r\n ['aquamarine', 0x7fffd4],\r\n ['turquoise', 0x40e0d0],\r\n ['mediumturquoise', 0x48d1cc],\r\n ['darkturquoise', 0x00ced1],\r\n ['cadetblue', 0x5f9ea0],\r\n ['steelblue', 0x4682b4],\r\n ['lightsteelblue', 0xb0c4de],\r\n ['powderblue', 0xb0e0e6],\r\n ['lightblue', 0xadd8e6],\r\n ['skyblue', 0x87ceeb],\r\n ['lightskyblue', 0x87cefa],\r\n ['deepskyblue', 0x00bfff],\r\n ['dodgerblue', 0x1e90ff],\r\n ['cornflowerblue', 0x6495ed],\r\n ['royalblue', 0x4169e1],\r\n ['blue', 0x0000ff],\r\n ['mediumblue', 0x0000cd],\r\n ['darkblue', 0x00008b],\r\n ['navy', 0x000080],\r\n ['midnightblue', 0x191970],\r\n ['cornsilk', 0xfff8dc],\r\n ['blanchedalmond', 0xffebcd],\r\n ['bisque', 0xffe4c4],\r\n ['navajowhite', 0xffdead],\r\n ['wheat', 0xf5deb3],\r\n ['burlywood', 0xdeb887],\r\n ['tan', 0xd2b48c],\r\n ['rosybrown', 0xbc8f8f],\r\n ['sandybrown', 0xf4a460],\r\n ['goldenrod', 0xdaa520],\r\n ['darkgoldenrod', 0xb8860b],\r\n ['peru', 0xcd853f],\r\n ['chocolate', 0xd2691e],\r\n ['saddlebrown', 0x8b4513],\r\n ['sienna', 0xa0522d],\r\n ['brown', 0xa52a2a],\r\n ['maroon', 0x800000],\r\n ['white', 0xffffff],\r\n ['snow', 0xfffafa],\r\n ['honeydew', 0xf0fff0],\r\n ['mintcream', 0xf5fffa],\r\n ['azure', 0xf0ffff],\r\n ['aliceblue', 0xf0f8ff],\r\n ['ghostwhite', 0xf8f8ff],\r\n ['whitesmoke', 0xf5f5f5],\r\n ['seashell', 0xfff5ee],\r\n ['beige', 0xf5f5dc],\r\n ['oldlace', 0xfdf5e6],\r\n ['floralwhite', 0xfffaf0],\r\n ['ivory', 0xfffff0],\r\n ['antiquewhite', 0xfaebd7],\r\n ['linen', 0xfaf0e6],\r\n ['lavenderblush', 0xfff0f5],\r\n ['mistyrose', 0xffe4e1],\r\n ['gainsboro', 0xdcdcdc],\r\n ['lightgray', 0xd3d3d3],\r\n ['silver', 0xc0c0c0],\r\n ['darkgray', 0xa9a9a9],\r\n ['gray', 0x808080],\r\n ['dimgray', 0x696969],\r\n ['lightslategray', 0x778899],\r\n ['slategray', 0x708090],\r\n ['darkslategray', 0x2f4f4f],\r\n ['black', 0x000000],\r\n /* eslint-enable no-multi-spaces */\r\n ],\r\n\r\n namedColors: {},\r\n /* eslint-enable no-magic-numbers */\r\n\r\n gradients: {\r\n rainbow: [\r\n 0x0000ff, // blue\r\n 0x00ffff, // cyan\r\n 0x00ff00, // green\r\n 0xffff00, // yellow\r\n 0xff0000, // red\r\n ],\r\n temp: [\r\n 0x0000ff, // blue\r\n 0x007fff, // light-blue\r\n 0xffffff, // white\r\n 0xff7f00, // orange\r\n 0xff0000, // red\r\n ],\r\n hot: [\r\n 0xffffff, // white\r\n 0xff7f00, // orange\r\n 0xff0000, // red\r\n ],\r\n cold: [\r\n 0xffffff, // white\r\n 0x007fff, // light-blue\r\n 0x0000ff, // blue\r\n ],\r\n 'blue-red': [\r\n 0x0000ff, // blue\r\n 0xffffff, // white\r\n 0xff0000, // red\r\n ],\r\n reds: [\r\n 0xffffff, // white\r\n 0xff0000, // red\r\n ],\r\n blues: [\r\n 0xffffff, // white\r\n 0x0000ff, // blue\r\n ],\r\n },\r\n});\r\n\r\nconst { namedColorsArray, namedColors } = Palette.prototype;\r\n\r\nfor (let i = 0, { length } = namedColorsArray; i < length; ++i) {\r\n const [name, value] = namedColorsArray[i];\r\n namedColors[name] = value;\r\n}\r\n\r\nexport default Palette;\r\n","import Palette from './Palette';\r\n\r\nconst palette = new Palette('CPK', 'CP');\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n /* eslint-disable no-magic-numbers */\r\n H: 0xFFFFFF,\r\n C: 0x202020,\r\n N: 0x2060FF,\r\n O: 0xEE2010,\r\n F: 0x00FF00,\r\n P: 0x8020FF,\r\n S: 0xFFFF00,\r\n CL: 0x00BB00,\r\n FE: 0xD0D0D0,\r\n CO: 0xD0D0D0,\r\n NI: 0xD0D0D0,\r\n CU: 0xD0D0D0,\r\n BR: 0x008800,\r\n I: 0x005500,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\nexport default palette;\r\n","import Palette from './Palette';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst palette = new Palette('Jmol', 'JM');\r\n\r\npalette.colors = [\r\n /* eslint-disable no-magic-numbers */\r\n 0x0000FF, // blue\r\n 0x0055FF, //\r\n 0x00ABFF, //\r\n 0x00FFFF, // cyan\r\n 0x00FFAB, //\r\n 0x00FF55, //\r\n 0x00FF00, // green\r\n 0x55FF00, //\r\n 0xABFF00, //\r\n 0xFFFF00, // yellow\r\n 0xFFAB00, //\r\n 0xFF5500, //\r\n 0xFF0000, // red\r\n 0xFF0055, //\r\n 0xFF00AB, //\r\n 0xFF00FF, // magenta\r\n 0xAB00FF, //\r\n 0x5500FF, //\r\n /* eslint-enable no-magic-numbers */\r\n];\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n /* eslint-disable no-magic-numbers */\r\n H: 0xFFFFFF,\r\n D: 0xFFFFC0,\r\n T: 0xFFFFA0,\r\n HE: 0xD9FFFF,\r\n LI: 0xCC80FF,\r\n BE: 0xC2FF00,\r\n B: 0xFFB5B5,\r\n C: 0x909090,\r\n N: 0x3050F8,\r\n O: 0xFF0D0D,\r\n F: 0x90E050,\r\n NE: 0xB3E3F5,\r\n NA: 0xAB5CF2,\r\n MG: 0x8AFF00,\r\n AL: 0xBFA6A6,\r\n SI: 0xF0C8A0,\r\n P: 0xFF8000,\r\n S: 0xFFFF30,\r\n CL: 0x1FF01F,\r\n AR: 0x80D1E3,\r\n K: 0x8F40D4,\r\n CA: 0x3DFF00,\r\n SC: 0xE6E6E6,\r\n TI: 0xBFC2C7,\r\n V: 0xA6A6AB,\r\n CR: 0x8A99C7,\r\n MN: 0x9C7AC7,\r\n FE: 0xE06633,\r\n CO: 0xF090A0,\r\n NI: 0x50D050,\r\n CU: 0xC88033,\r\n ZN: 0x7D80B0,\r\n GA: 0xC28F8F,\r\n GE: 0x668F8F,\r\n AS: 0xBD80E3,\r\n SE: 0xFFA100,\r\n BR: 0xA62929,\r\n KR: 0x5CB8D1,\r\n RB: 0x702EB0,\r\n SR: 0x00FF00,\r\n Y: 0x94FFFF,\r\n ZR: 0x94E0E0,\r\n NB: 0x73C2C9,\r\n MO: 0x54B5B5,\r\n TC: 0x3B9E9E,\r\n RU: 0x248F8F,\r\n RH: 0x0A7D8C,\r\n PD: 0x006985,\r\n AG: 0xC0C0C0,\r\n CD: 0xFFD98F,\r\n IN: 0xA67573,\r\n SN: 0x668080,\r\n SB: 0x9E63B5,\r\n TE: 0xD47A00,\r\n I: 0x940094,\r\n XE: 0x429EB0,\r\n CS: 0x57178F,\r\n BA: 0x00C900,\r\n LA: 0x70D4FF,\r\n CE: 0xFFFFC7,\r\n PR: 0xD9FFC7,\r\n ND: 0xC7FFC7,\r\n PM: 0xA3FFC7,\r\n SM: 0x8FFFC7,\r\n EU: 0x61FFC7,\r\n GD: 0x45FFC7,\r\n TB: 0x30FFC7,\r\n DY: 0x1FFFC7,\r\n HO: 0x00FF9C,\r\n ER: 0x00E675,\r\n TM: 0x00D452,\r\n YB: 0x00BF38,\r\n LU: 0x00AB24,\r\n HF: 0x4DC2FF,\r\n TA: 0x4DA6FF,\r\n W: 0x2194D6,\r\n RE: 0x267DAB,\r\n OS: 0x266696,\r\n IR: 0x175487,\r\n PT: 0xD0D0E0,\r\n AU: 0xFFD123,\r\n HG: 0xB8B8D0,\r\n TL: 0xA6544D,\r\n PB: 0x575961,\r\n BI: 0x9E4FB5,\r\n PO: 0xAB5C00,\r\n AT: 0x754F45,\r\n RN: 0x428296,\r\n FR: 0x420066,\r\n RA: 0x007D00,\r\n AC: 0x70ABFA,\r\n TH: 0x00BAFF,\r\n PA: 0x00A1FF,\r\n U: 0x008FFF,\r\n NP: 0x0080FF,\r\n PU: 0x006BFF,\r\n AM: 0x545CF2,\r\n CM: 0x785CE3,\r\n BK: 0x8A4FE3,\r\n CF: 0xA136D4,\r\n ES: 0xB31FD4,\r\n FM: 0xB31FBA,\r\n MD: 0xB30DA6,\r\n NO: 0xBD0D87,\r\n LR: 0xC70066,\r\n RF: 0xCC0059,\r\n DB: 0xD1004F,\r\n SG: 0xD90045,\r\n BH: 0xE00038,\r\n HS: 0xE6002E,\r\n MT: 0xEB0026,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\npalette.defaultResidueColor = 0xBEA06E;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\npalette.residueColors = {\r\n /* eslint-disable no-magic-numbers */\r\n ALA: 0xC8C8C8,\r\n ARG: 0x145AFF,\r\n ASN: 0x00DCDC,\r\n ASP: 0xE60A0A,\r\n CYS: 0xE6E600,\r\n GLN: 0x00DCDC,\r\n GLU: 0xE60A0A,\r\n GLY: 0xEBEBEB,\r\n HIS: 0x8282D2,\r\n ILE: 0x0F820F,\r\n LEU: 0x0F820F,\r\n LYS: 0x145AFF,\r\n MET: 0xE6E600,\r\n PHE: 0x3232AA,\r\n PRO: 0xDC9682,\r\n SER: 0xFA9600,\r\n THR: 0xFA9600,\r\n TRP: 0xB45AB4,\r\n TYR: 0x3232AA,\r\n VAL: 0x0F820F,\r\n A: 0xA0A0FF,\r\n C: 0xFF8C4B,\r\n G: 0xFF7070,\r\n I: 0x80FFFF,\r\n T: 0xA0FFA0,\r\n U: 0xFF8080,\r\n DA: 0xA0A0FF,\r\n DC: 0xFF8C4B,\r\n DG: 0xFF7070,\r\n DI: 0x80FFFF,\r\n DT: 0xA0FFA0,\r\n DU: 0xFF8080,\r\n '+A': 0xA0A0FF,\r\n '+C': 0xFF8C4B,\r\n '+G': 0xFF7070,\r\n '+I': 0x80FFFF,\r\n '+T': 0xA0FFA0,\r\n '+U': 0xFF8080,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\npalette.chainColors = [\r\n // ' '->0 'A'->1, 'B'->2\r\n 0xFFffffff, // ' ' & '0' white\r\n //\r\n 0xFFC0D0FF, // skyblue\r\n 0xFFB0FFB0, // pastel green\r\n 0xFFFFC0C8, // pink\r\n 0xFFFFFF80, // pastel yellow\r\n 0xFFFFC0FF, // pastel magenta\r\n 0xFFB0F0F0, // pastel cyan\r\n 0xFFFFD070, // pastel gold\r\n 0xFFF08080, // lightcoral\r\n\r\n 0xFFF5DEB3, // wheat\r\n 0xFF00BFFF, // deepskyblue\r\n 0xFFCD5C5C, // indianred\r\n 0xFF66CDAA, // mediumaquamarine\r\n 0xFF9ACD32, // yellowgreen\r\n 0xFFEE82EE, // violet\r\n 0xFF00CED1, // darkturquoise\r\n 0xFF00FF7F, // springgreen\r\n 0xFF3CB371, // mediumseagreen\r\n\r\n 0xFF00008B, // darkblue\r\n 0xFFBDB76B, // darkkhaki\r\n 0xFF006400, // darkgreen\r\n 0xFF800000, // maroon\r\n 0xFF808000, // olive\r\n 0xFF800080, // purple\r\n 0xFF008080, // teal\r\n 0xFFB8860B, // darkgoldenrod\r\n 0xFFB22222, // firebrick\r\n];\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\npalette.secondaryColors = {\r\n [StructuralElementType.HELIX_ALPHA]: 0xFF0080,\r\n [StructuralElementType.HELIX_PI]: 0x600080,\r\n [StructuralElementType.HELIX_310]: 0xA00080,\r\n [StructuralElementType.STRAND]: 0xFFC800,\r\n [StructuralElementType.TURN]: 0x6080FF,\r\n dna: 0xAE00FE,\r\n rna: 0xFD0162,\r\n};\r\n\r\nexport default palette;\r\n","import Palette from './Palette';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst palette = new Palette('VMD', 'VM');\r\n\r\npalette.colors = [\r\n /* eslint-disable no-magic-numbers */\r\n 0x0000FF, // blue\r\n 0xFF0000, // red\r\n 0x606060, // gray\r\n 0xFF8000, // orange\r\n 0xFFFF00, // yellow\r\n 0x808033, // tan\r\n 0x999999, // silver\r\n 0x00FF00, // green\r\n 0xFFFFFF, // white\r\n 0xFF9999, // pink\r\n 0x40C0C0, // cyan\r\n 0xA600A6, // purple\r\n 0x80E666, // lime\r\n 0xE666B3, // mauve\r\n 0x804D00, // ochre\r\n 0x8080C0, // ice blue\r\n /* eslint-enable no-magic-numbers */\r\n];\r\n\r\npalette.defaultElementColor = 0x804D00;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n /* eslint-disable no-magic-numbers */\r\n H: 0xFFFFFF,\r\n C: 0x40BFBF,\r\n N: 0x0000FF,\r\n O: 0xFF0000,\r\n P: 0x808033,\r\n S: 0xFFFF00,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\npalette.defaultResidueColor = 0x40C0C0;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\npalette.residueColors = {\r\n /* eslint-disable no-magic-numbers */\r\n ALA: 0x0000FF,\r\n ARG: 0xFFFFFF,\r\n ASN: 0x808033,\r\n ASP: 0xFF0000,\r\n CYS: 0xFFFF00,\r\n GLN: 0xFF8000,\r\n GLU: 0xFF9999,\r\n GLY: 0xFFFFFF,\r\n HIS: 0x40C0C0,\r\n ILE: 0x00FF00,\r\n LEU: 0xFF9999,\r\n LYS: 0x40C0C0,\r\n MET: 0xFFFF00,\r\n PHE: 0xA600A6,\r\n PRO: 0x804C00,\r\n SER: 0xFFFF00,\r\n THR: 0xE666B3,\r\n TRP: 0x999999,\r\n TYR: 0x00FF00,\r\n VAL: 0x808033,\r\n A: 0x0000FF,\r\n C: 0xFF8000,\r\n G: 0xFFFF00,\r\n T: 0xA600A6,\r\n U: 0x00FF00,\r\n DA: 0x0000FF,\r\n DC: 0xFF8000,\r\n DG: 0xFFFF00,\r\n DT: 0xA600A6,\r\n DU: 0x00FF00,\r\n '+A': 0x0000FF,\r\n '+C': 0xFF8000,\r\n '+G': 0xFFFF00,\r\n '+T': 0xA600A6,\r\n '+U': 0x00FF00,\r\n WAT: 0x40C0C0,\r\n H2O: 0x40C0C0,\r\n HOH: 0x40C0C0,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\npalette.chainColors = [0xFFFFFF].concat(palette.colors);\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\npalette.secondaryColors = {\r\n [StructuralElementType.HELIX_ALPHA]: 0xA600A6,\r\n [StructuralElementType.HELIX_310]: 0x0000FF,\r\n [StructuralElementType.HELIX_PI]: 0xFF0000,\r\n [StructuralElementType.STRAND]: 0xFFFF00,\r\n [StructuralElementType.BRIDGE]: 0x808033,\r\n [StructuralElementType.TURN]: 0x40C0C0,\r\n};\r\n\r\nexport default palette;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport cpkPalette from './palettes/cpkPalette';\r\nimport jmolPalette from './palettes/jmolPalette';\r\nimport vmdPalette from './palettes/vmdPalette';\r\n\r\nconst palettes = new EntityList([\r\n cpkPalette,\r\n jmolPalette,\r\n vmdPalette,\r\n]);\r\n\r\nexport default palettes;\r\n","import _ from 'lodash';\r\nimport settings from '../../settings';\r\nimport utils from '../../utils';\r\nimport palettes from '../palettes';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the colorer after its creation.\r\n *\r\n * @exports Colorer\r\n * @this Colorer\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all available coloring algorithms used for building and displaying molecule geometry.\r\n */\r\nclass Colorer {\r\n constructor(opts) {\r\n if (this.constructor === Colorer) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Colorer options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.opts = _.merge(utils.deriveDeep(settings.now.colorers[this.id], true), opts);\r\n /**\r\n * Palette in use.\r\n * @type {Palette}\r\n */\r\n this.palette = palettes.first;\r\n }\r\n\r\n /**\r\n * Get Colorer identification, probably with options.\r\n * @returns {string|Array} Colorer identifier string ({@link Colorer#id}) or two-element array containing both colorer\r\n * identifier and options ({@link Colorer#opts}).\r\n * Options are returned if they were changed during or after colorer creation.\r\n */\r\n identify() {\r\n const diff = utils.objectsDiff(this.opts, settings.now.colorers[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n return [this.id, diff];\r\n }\r\n return this.id;\r\n }\r\n}\r\n\r\n/**\r\n * Colorer identifier.\r\n * @type {string}\r\n */\r\n\r\nColorer.prototype.id = '__';\r\n\r\nexport default Colorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Element\r\n *\r\n * @exports ElementColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Coloring algorithm based on chemical element.\r\n */\r\nclass ElementColorer extends Colorer {\r\n static id = 'EL';\r\n\r\n getAtomColor(atom, _complex) {\r\n const type = atom.element.name;\r\n if (type === 'C' && this.opts.carbon >= 0) {\r\n return this.opts.carbon;\r\n }\r\n return this.palette.getElementColor(type);\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.palette.defaultResidueColor;\r\n }\r\n}\r\n\r\nElementColorer.prototype.id = 'EL';\r\nElementColorer.prototype.name = 'Element';\r\nElementColorer.prototype.shortName = 'Element';\r\n\r\nexport default ElementColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Coloring algorithm based on residue type.\r\n *\r\n * @see ResidueType\r\n *\r\n * @exports ResidueTypeColorer\r\n * @constructor\r\n */\r\nclass ResidueTypeColorer extends Colorer {\r\n static id = 'RT';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n return this.palette.getResidueColor(residue._type._name);\r\n }\r\n}\r\n\r\nResidueTypeColorer.prototype.id = 'RT';\r\nResidueTypeColorer.prototype.name = 'Residue Type';\r\nResidueTypeColorer.prototype.shortName = 'Residue';\r\n\r\nexport default ResidueTypeColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass SequenceColorer extends Colorer {\r\n static id = 'SQ';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const chain = residue._chain;\r\n if (chain.minSequence === Number.POSITIVE_INFINITY && chain.maxSequence === Number.NEGATIVE_INFINITY) {\r\n return this.palette.defaultNamedColor;\r\n }\r\n const min = chain.minSequence;\r\n const max = chain.maxSequence > min ? chain.maxSequence : min + 1;\r\n return this.palette.getGradientColor((residue._sequence - min) / (max - min), this.opts.gradient);\r\n }\r\n}\r\n\r\nSequenceColorer.prototype.id = 'SQ';\r\nSequenceColorer.prototype.name = 'Sequence';\r\nSequenceColorer.prototype.shortName = 'Sequence';\r\n\r\nexport default SequenceColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass ChainColorer extends Colorer {\r\n static id = 'CH';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n return this.palette.getChainColor(residue.getChain()._name);\r\n }\r\n}\r\n\r\nChainColorer.prototype.id = 'CH';\r\nChainColorer.prototype.name = 'Chain';\r\nChainColorer.prototype.shortName = 'Chain';\r\n\r\nexport default ChainColorer;\r\n","import Colorer from './Colorer';\r\nimport ResidueType from '../../chem/ResidueType';\r\n\r\nclass SecondaryStructureColorer extends Colorer {\r\n static id = 'SS';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n if (residue._type.flags & ResidueType.Flags.DNA) {\r\n return this.palette.getSecondaryColor('dna');\r\n }\r\n if (residue._type.flags & ResidueType.Flags.RNA) {\r\n return this.palette.getSecondaryColor('rna');\r\n }\r\n const secondary = residue.getSecondary();\r\n if (secondary) {\r\n let color = this.palette.getSecondaryColor(secondary.type, true);\r\n if (color === undefined) {\r\n color = this.palette.getSecondaryColor(secondary.generic);\r\n }\r\n return color;\r\n }\r\n return this.palette.defaultSecondaryColor;\r\n }\r\n}\r\n\r\nSecondaryStructureColorer.prototype.id = 'SS';\r\nSecondaryStructureColorer.prototype.name = 'Secondary Structure';\r\nSecondaryStructureColorer.prototype.shortName = 'Structure';\r\n\r\nexport default SecondaryStructureColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass UniformColorer extends Colorer {\r\n static id = 'UN';\r\n\r\n getAtomColor(_atom, _complex) {\r\n return this.opts.color;\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nUniformColorer.prototype.id = 'UN';\r\nUniformColorer.prototype.name = 'Uniform';\r\nUniformColorer.prototype.shortName = 'Uniform';\r\n\r\nexport default UniformColorer;\r\n","import Colorer from './Colorer';\r\nimport selectors from '../../chem/selectors';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @exports ConditionalColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Bicolor coloring algorithm based on a selector string used as a condition.\r\n */\r\nclass ConditionalColorer extends Colorer {\r\n static id = 'CO';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n const parsed = selectors.parse(this.opts.subset);\r\n this._subsetCached = parsed.error ? selectors.none() : parsed.selector;\r\n }\r\n\r\n getAtomColor(atom, _complex) {\r\n return this._subsetCached.includesAtom(atom) ? this.opts.color : this.opts.baseColor;\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const subset = this._subsetCached;\r\n const atoms = residue._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n if (!subset.includesAtom(atoms[i])) {\r\n return this.opts.baseColor;\r\n }\r\n }\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nConditionalColorer.prototype.id = 'CO';\r\nConditionalColorer.prototype.name = 'Conditional';\r\nConditionalColorer.prototype.shortName = 'Conditional';\r\n\r\nexport default ConditionalColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass ConformationColorer extends Colorer {\r\n static id = 'CF';\r\n\r\n getAtomColor(atom, _complex) {\r\n return this.palette.getChainColor(String.fromCharCode(atom.location));\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.palette.defaultResidueColor;\r\n }\r\n}\r\n\r\nConformationColorer.prototype.id = 'CF';\r\nConformationColorer.prototype.name = 'Conformation';\r\nConformationColorer.prototype.shortName = 'Conformation';\r\n\r\nexport default ConformationColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Temperature\r\n *\r\n * @exports TemperatureColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Coloring algorithm based on temperature of chemical element.\r\n */\r\nclass TemperatureColorer extends Colorer {\r\n static id = 'TM';\r\n\r\n getAtomColor(atom, _complex) {\r\n const { opts } = this;\r\n let factor = 1;\r\n if (atom.temperature && opts) {\r\n if (opts.min === opts.max) {\r\n factor = atom.temperature > opts.max ? 1 : 0;\r\n } else {\r\n factor = (atom.temperature - opts.min) / (opts.max - opts.min);\r\n }\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const { opts } = this;\r\n if (!opts) {\r\n return this.palette.defaultGradientColor;\r\n }\r\n if (residue.temperature) {\r\n let factor = 0;\r\n if (opts.min === opts.max) {\r\n factor = residue.temperature > opts.max ? 1 : 0;\r\n } else {\r\n factor = (residue.temperature - opts.min) / (opts.max - opts.min);\r\n }\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n}\r\n\r\nTemperatureColorer.prototype.id = 'TM'; // [T]e[M]perature\r\nTemperatureColorer.prototype.name = 'Temperature';\r\nTemperatureColorer.prototype.shortName = 'Temperature';\r\n\r\nexport default TemperatureColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Occupancy\r\n *\r\n * @exports OccupancyColorer\r\n * @augments Occupancy\r\n * @constructor\r\n * @classdesc Coloring algorithm based on occupancy of chemical element.\r\n */\r\nclass OccupancyColorer extends Colorer {\r\n static id = 'OC';\r\n\r\n _getColorByOccupancy(occupancy, opts) {\r\n if (occupancy !== undefined) {\r\n const factor = 1 - occupancy;\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n\r\n getAtomColor(atom, _complex) {\r\n const { opts } = this;\r\n return this._getColorByOccupancy(atom.occupancy, opts);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const { opts } = this;\r\n return this._getColorByOccupancy(residue.occupancy, opts);\r\n }\r\n}\r\n\r\nOccupancyColorer.prototype.id = 'OC'; // [OC]cupancy\r\nOccupancyColorer.prototype.name = 'Occupancy';\r\nOccupancyColorer.prototype.shortName = 'Occupancy';\r\n\r\nexport default OccupancyColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass HydrophobicityColorer extends Colorer {\r\n static id = 'HY';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n let color = this.palette.defaultResidueColor;\r\n if (residue._type.hydrophobicity !== undefined) {\r\n // Kyte Doolitle hydro [-4.5,4.5]->[0.1]\r\n const min = -4.5;\r\n const max = 4.5;\r\n color = this.palette.getGradientColor((residue._type.hydrophobicity - min) / (max - min), this.opts.gradient);\r\n }\r\n return color;\r\n }\r\n}\r\n\r\nHydrophobicityColorer.prototype.id = 'HY';\r\nHydrophobicityColorer.prototype.name = 'Hydrophobicity';\r\nHydrophobicityColorer.prototype.shortName = 'Hydrophobicity';\r\n\r\nexport default HydrophobicityColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass MoleculeColorer extends Colorer {\r\n static id = 'MO';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const molecule = residue._molecule;\r\n const count = _complex.getMoleculeCount();\r\n if (count > 1) {\r\n return this.palette.getGradientColor((molecule.index - 1) / (count - 1), this.opts.gradient);\r\n }\r\n return this.palette.getGradientColor(0, this.opts.gradient);\r\n }\r\n}\r\n\r\nMoleculeColorer.prototype.id = 'MO';\r\nMoleculeColorer.prototype.name = 'Molecule';\r\nMoleculeColorer.prototype.shortName = 'Molecule';\r\n\r\nexport default MoleculeColorer;\r\n","import Colorer from './Colorer';\r\nimport Atom from '../../chem/Atom';\r\n\r\nfunction scaleColor(c, factor) {\r\n const r1 = (c >> 16) & 0xff;\r\n const g1 = (c >> 8) & 0xff;\r\n const b1 = c & 0xff;\r\n const r = factor * r1;\r\n const g = factor * g1;\r\n const b = factor * b1;\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @exports CarbonColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Bicolor coloring algorithm based on selection carbon atoms.\r\n */\r\nclass CarbonColorer extends Colorer {\r\n static id = 'CB';\r\n\r\n getAtomColor(atom, _complex) {\r\n const colorCarbon = this.opts.color;\r\n const colorNotCarbon = scaleColor(colorCarbon, this.opts.factor);\r\n return (atom.flags & Atom.Flags.CARBON) ? colorCarbon : colorNotCarbon;\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nCarbonColorer.prototype.id = 'CB';\r\nCarbonColorer.prototype.name = 'Carbon';\r\nCarbonColorer.prototype.shortName = 'Carbon';\r\n\r\nexport default CarbonColorer;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport ElementColorer from './colorers/ElementColorer';\r\nimport ResidueTypeColorer from './colorers/ResidueTypeColorer';\r\nimport SequenceColorer from './colorers/SequenceColorer';\r\nimport ChainColorer from './colorers/ChainColorer';\r\nimport SecondaryStructureColorer from './colorers/SecondaryStructureColorer';\r\nimport UniformColorer from './colorers/UniformColorer';\r\nimport ConditionalColorer from './colorers/ConditionalColorer';\r\nimport ConformationColorer from './colorers/ConformationColorer';\r\nimport TemperatureColorer from './colorers/TemperatureColorer';\r\nimport OccupancyColorer from './colorers/OccupancyColorer';\r\nimport HydrophobicityColorer from './colorers/HydrophobicityColorer';\r\nimport MoleculeColorer from './colorers/MoleculeColorer';\r\nimport CarbonColorer from './colorers/CarbonColorer';\r\n\r\nconst colorers = new EntityList([\r\n ElementColorer,\r\n ResidueTypeColorer,\r\n SequenceColorer,\r\n ChainColorer,\r\n SecondaryStructureColorer,\r\n UniformColorer,\r\n ConditionalColorer,\r\n ConformationColorer,\r\n TemperatureColorer,\r\n OccupancyColorer,\r\n HydrophobicityColorer,\r\n MoleculeColorer,\r\n CarbonColorer,\r\n]);\r\n\r\nexport default colorers;\r\n","import * as THREE from 'three';\r\nimport EntityList from '../utils/EntityList';\r\n\r\nfunction neutralColor(intensity) {\r\n return new THREE.Color(intensity, intensity, intensity);\r\n}\r\n\r\nconst materialList = [\r\n {\r\n id: 'DF',\r\n name: 'Diffuse',\r\n shortName: 'Diffuse',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'SF',\r\n name: 'Soft Plastic',\r\n shortName: 'Soft',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.1),\r\n shininess: 30,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'PL',\r\n name: 'Glossy Plastic',\r\n shortName: 'Glossy',\r\n uberOptions: {\r\n diffuse: neutralColor(0.56),\r\n specular: neutralColor(0.28),\r\n shininess: 100,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'ME',\r\n name: 'Metal',\r\n shortName: 'Metal',\r\n uberOptions: {\r\n diffuse: neutralColor(0.56),\r\n specular: neutralColor(0.55),\r\n shininess: 30,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'TR',\r\n name: 'Transparent',\r\n shortName: 'Transparent',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 0.5,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: true,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'GL',\r\n name: 'Glass',\r\n shortName: 'Glass',\r\n uberOptions: {\r\n diffuse: neutralColor(0.50),\r\n specular: neutralColor(0.65),\r\n shininess: 100,\r\n opacity: 0.5,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: true,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'BA',\r\n name: 'Backdrop',\r\n shortName: 'Backdrop',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: false,\r\n fog: false,\r\n depthWrite: false,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'TN',\r\n name: 'Toon',\r\n shortName: 'Toon',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: true,\r\n },\r\n }, {\r\n id: 'FL',\r\n name: 'Flat',\r\n shortName: 'Flat',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 0,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: false,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n },\r\n },\r\n];\r\n\r\nconst materials = new EntityList(materialList);\r\n\r\nexport default materials;\r\n","/**\r\n * Utils functions which is worked with meshes\r\n *\r\n * functions for doing something with all/specified meshes\r\n * functions for traversihg tree and create auxiliary meshes for transparency/shadowmaps...\r\n * functions for calculating data connected with meshes\r\n */\r\nimport * as THREE from 'three';\r\nimport UberMaterial from './shaders/UberMaterial';\r\nimport gfxutils from './gfxutils';\r\n\r\nfunction _gatherObjects(root, meshTypes) {\r\n const meshes = [];\r\n root.traverse((object) => {\r\n for (let i = 0; i < meshTypes.length; i++) {\r\n if (object instanceof meshTypes[i]) {\r\n meshes[meshes.length] = object;\r\n break;\r\n }\r\n }\r\n });\r\n return meshes;\r\n}\r\n\r\n// new mesh with the same geometry and specified material values and layer\r\nfunction createDerivativeMesh(mesh, values, layer) {\r\n const material = mesh.material.createInstance();\r\n material.setValues(values);\r\n\r\n const newMesh = new mesh.constructor(mesh.geometry, material);\r\n newMesh.material.needsUpdate = true;\r\n newMesh.applyMatrix4(mesh.matrix);\r\n newMesh.layers.set(layer);\r\n return newMesh;\r\n}\r\n\r\nfunction traverseMeshes(root, meshTypes, func) {\r\n const meshes = _gatherObjects(root, meshTypes);\r\n\r\n for (let i = 0, n = meshes.length; i < n; ++i) {\r\n const mesh = meshes[i];\r\n if (!mesh.parent) {\r\n continue;\r\n }\r\n func(mesh);\r\n }\r\n}\r\n\r\nfunction applyTransformsToMeshes(root, mtc) {\r\n const mtcCount = mtc.length;\r\n if (mtcCount < 1) {\r\n return;\r\n }\r\n\r\n const meshTypes = [THREE.Mesh, THREE.LineSegments, THREE.Line];\r\n traverseMeshes(root, meshTypes, (mesh) => {\r\n mesh.applyMatrix4(mtc[0]);\r\n for (let j = 1; j < mtcCount; ++j) {\r\n const newMesh = new mesh.constructor(mesh.geometry, mesh.material);\r\n mesh.parent.add(newMesh);\r\n newMesh.applyMatrix4(mtc[j]);\r\n }\r\n });\r\n}\r\n\r\nconst processTransparentMaterial = (function () {\r\n const matValues = {\r\n prepassTransparancy: true,\r\n fakeOpacity: false,\r\n transparent: false,\r\n colorFromDepth: false,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n mesh.material.setValues({ prepassTransparancy: false, fakeOpacity: false });\r\n mesh.material.needsUpdate = true;\r\n mesh.layers.set(gfxutils.LAYERS.TRANSPARENT);\r\n\r\n const prepassTranspMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.PREPASS_TRANSPARENT);\r\n mesh.parent.add(prepassTranspMesh);\r\n });\r\n };\r\n}());\r\n\r\nconst processColFromPosMaterial = (function () {\r\n const matValues = {\r\n colorFromPos: true,\r\n transparent: false,\r\n colorFromDepth: false,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n overrideColor: false,\r\n fogTransparent: false,\r\n attrColor: false,\r\n attrColor2: false,\r\n attrAlphaColor: false,\r\n fakeOpacity: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n const colFromPosMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.COLOR_FROM_POSITION);\r\n mesh.parent.add(colFromPosMesh);\r\n });\r\n };\r\n}());\r\n\r\nconst createShadowmapMaterial = (function () {\r\n const matValues = {\r\n colorFromDepth: true,\r\n orthoCam: true,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n if (!mesh.receiveShadow && mesh.material.shadowmap) { // remove shadow from non-receivers\r\n mesh.material.setValues({ shadowmap: false });\r\n }\r\n if (!mesh.material.lights) { // skip creating shadowmap meshes for materials without lighting\r\n return;\r\n }\r\n if (!mesh.castShadow) { // skip creating shadowmap meshes for non-casters\r\n return;\r\n }\r\n if (!gfxutils.belongToSelectLayers(mesh)) { // skip creating shadowmap meshes for selection layer\r\n return;\r\n }\r\n\r\n const shadowmapMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.SHADOWMAP);\r\n shadowmapMesh.isShadowmapMesh = true;\r\n mesh.parent.add(shadowmapMesh);\r\n });\r\n };\r\n}());\r\n\r\nfunction removeShadowmapMaterial(root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n if (mesh.isShadowmapMesh) {\r\n mesh.parent.remove(mesh);\r\n }\r\n });\r\n}\r\n\r\nfunction forEachMeshInGroup(group, process) {\r\n function processObj(object) {\r\n if (object instanceof THREE.Mesh) {\r\n process(object);\r\n }\r\n for (let i = 0, l = object.children.length; i < l; i++) {\r\n processObj(object.children[i]);\r\n }\r\n }\r\n processObj(group);\r\n}\r\n\r\nfunction _countMeshTriangles(mesh) {\r\n const geom = mesh.geometry;\r\n if (geom instanceof THREE.InstancedBufferGeometry) {\r\n const attribs = geom.attributes;\r\n for (const property in attribs) {\r\n if (attribs.hasOwnProperty(property) && attribs[property] instanceof THREE.InstancedBufferAttribute) {\r\n const currAttr = attribs[property];\r\n const indexSize = geom.index ? geom.index.array.length / 3 : 0;\r\n return indexSize * currAttr.array.length / currAttr.itemSize;\r\n }\r\n }\r\n return 0;\r\n }\r\n if (geom instanceof THREE.BufferGeometry) {\r\n return geom.index ? geom.index.array.length / 3 : 0;\r\n }\r\n return geom.faces ? geom.faces.length : 0;\r\n}\r\n\r\nfunction countTriangles(group) {\r\n let totalCount = 0;\r\n forEachMeshInGroup(group, (mesh) => {\r\n totalCount += _countMeshTriangles(mesh);\r\n });\r\n return totalCount;\r\n}\r\n\r\nexport default {\r\n applyTransformsToMeshes,\r\n processTransparentMaterial,\r\n processColFromPosMaterial,\r\n createShadowmapMaterial,\r\n removeShadowmapMaterial,\r\n forEachMeshInGroup,\r\n countTriangles,\r\n};\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport UberMaterial from './shaders/UberMaterial';\r\nimport gfxutils from './gfxutils';\r\nimport meshutils from './meshutils';\r\nimport settings from '../settings';\r\nimport materials from './materials';\r\nimport chem from '../chem';\r\n\r\nconst { selectors } = chem;\r\n\r\nclass Representation {\r\n constructor(index, mode, colorer, selector) {\r\n const startMaterialValues = {\r\n clipPlane: settings.now.draft.clipPlane,\r\n fogTransparent: settings.now.bg.transparent,\r\n shadowmap: settings.now.shadow.on,\r\n shadowmapType: settings.now.shadow.type,\r\n };\r\n this.index = index;\r\n this.mode = mode;\r\n this.colorer = colorer;\r\n this.selector = selector;\r\n this.selectorString = '';\r\n this.count = 0;\r\n this.material = new UberMaterial();\r\n this.material.setValues(startMaterialValues);\r\n this.material.setUberOptions({ fogAlpha: settings.now.fogAlpha });\r\n this.materialPreset = materials.first;\r\n this.needsRebuild = true;\r\n this.visible = true;\r\n\r\n // apply mode params & preset\r\n this.setMode(mode);\r\n }\r\n\r\n markAtoms(complex) {\r\n this.count = complex.markAtoms(this.selector, 1 << this.index);\r\n this.needsRebuild = true;\r\n return this.count;\r\n }\r\n\r\n unmarkAtoms(complex) {\r\n complex.clearAtomBits(1 << this.index);\r\n this.count = 0;\r\n }\r\n\r\n setMode(mode) {\r\n this.mode = mode;\r\n }\r\n\r\n setMaterialPreset(preset) {\r\n this.materialPreset = preset;\r\n this.material.setUberOptions(preset.uberOptions);\r\n this.material.setValues(preset.values);\r\n }\r\n\r\n reset() {\r\n this.geo = null;\r\n this.selectionGeo = null;\r\n }\r\n\r\n buildGeometry(complex) {\r\n this.reset();\r\n this.needsRebuild = false;\r\n\r\n if (settings.now.ao) {\r\n this.material.setValues({ normalsToGBuffer: settings.now.ao });\r\n }\r\n\r\n this.geo = this.mode.buildGeometry(complex, this.colorer, 1 << this.index, this.material);\r\n\r\n if (this.material.uberOptions.opacity < 0.99 && settings.now.transparency === 'prepass') {\r\n meshutils.processTransparentMaterial(this.geo, this.material);\r\n }\r\n this.geo.visible = this.visible;\r\n\r\n gfxutils.processObjRenderOrder(this.geo, this.materialPreset.id);\r\n meshutils.processColFromPosMaterial(this.geo, this.material);\r\n\r\n if (settings.now.shadow.on) {\r\n meshutils.createShadowmapMaterial(this.geo, this.material);\r\n }\r\n\r\n return this.geo;\r\n }\r\n\r\n buildSelectionGeometry(mask) {\r\n let sg = null;\r\n\r\n if (this.geo && ('getSubset' in this.geo)) {\r\n const meshes = this.geo.getSubset(mask);\r\n if (meshes && meshes.length > 0) {\r\n sg = new THREE.Group();\r\n sg.matrixAutoUpdate = false;\r\n sg.matrix = this.geo.matrix;\r\n\r\n for (let j = 0; j < meshes.length; j++) {\r\n const m = meshes[j];\r\n sg.add(m);\r\n }\r\n }\r\n }\r\n\r\n if (sg) {\r\n sg.visible = this.visible;\r\n }\r\n\r\n this.selectionGeo = sg;\r\n return this.selectionGeo;\r\n }\r\n\r\n /**\r\n * Create object that represents difference between current and another rep\r\n * anotherRep could be undefined. In this case everything is reported.\r\n */\r\n compare(repSettings) {\r\n const diff = {};\r\n\r\n const selStr = String(this.selector);\r\n if (!repSettings || selStr.valueOf() !== String(repSettings.selector).valueOf()) {\r\n diff.selector = selStr;\r\n }\r\n\r\n const modeDiff = this.mode.identify();\r\n if (!repSettings || Array.isArray(modeDiff) || modeDiff !== repSettings.mode) {\r\n diff.mode = modeDiff;\r\n }\r\n\r\n const colorerDiff = this.colorer.identify();\r\n if (!repSettings || Array.isArray(colorerDiff) || colorerDiff !== repSettings.colorer) {\r\n diff.colorer = colorerDiff;\r\n }\r\n\r\n if (!repSettings || this.materialPreset.id !== repSettings.material) {\r\n diff.material = this.materialPreset.id;\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n /**\r\n * Change representation. Write fields what was changed into new object, return it.\r\n */\r\n change(repSettings, complex, mode, color) {\r\n const diff = {};\r\n\r\n // modify selector\r\n if (repSettings.selector) {\r\n const newSelectorObject = selectors.parse(repSettings.selector).selector;\r\n const newSelector = String(newSelectorObject);\r\n if (this.selectorString !== newSelector) {\r\n diff.selector = newSelector;\r\n this.selectorString = newSelector;\r\n this.selector = newSelectorObject;\r\n this.markAtoms(complex);\r\n }\r\n }\r\n\r\n // modify mode\r\n if (repSettings.mode) {\r\n const newMode = repSettings.mode;\r\n if (!_.isEqual(this.mode.identify(), newMode)) {\r\n diff.mode = newMode;\r\n this.setMode(mode);\r\n }\r\n }\r\n\r\n // modify colorer\r\n if (repSettings.colorer) {\r\n const newColorer = repSettings.colorer;\r\n if (!_.isEqual(this.colorer.identify(), newColorer)) {\r\n diff.colorer = newColorer;\r\n this.colorer = color;\r\n }\r\n }\r\n\r\n // modify material\r\n if (repSettings.material) {\r\n const newMaterial = repSettings.material;\r\n if (!_.isEqual(this.materialPreset.id, newMaterial)) {\r\n diff.material = newMaterial;\r\n this.setMaterialPreset(materials.get(repSettings.material));\r\n }\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n show(visible) {\r\n this.visible = visible;\r\n if (this.geo) {\r\n this.geo.visible = visible;\r\n }\r\n if (this.selectionGeo) {\r\n this.selectionGeo.visible = visible;\r\n }\r\n }\r\n}\r\n\r\nexport default Representation;\r\n","import * as THREE from 'three';\r\nimport logger from './utils/logger';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport './gfx/modes';\r\n\r\nfunction _traverseComponentGroups(root, component, callback) {\r\n const { children } = root;\r\n if (!children) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n if (child._component === component) {\r\n callback(child);\r\n }\r\n if (child instanceof gfxutils.RCGroup) {\r\n _traverseComponentGroups(child, component, callback);\r\n }\r\n }\r\n}\r\n\r\nfunction ComplexEditor() {\r\n}\r\n\r\nclass ComplexComponentEditor extends ComplexEditor {\r\n constructor(complexVisual) {\r\n super();\r\n this._complexVisual = complexVisual;\r\n this._inProgress = false;\r\n }\r\n\r\n begin() {\r\n const complex = this._complexVisual.getComplex();\r\n\r\n // init component matrices\r\n this._componentTransforms = [];\r\n for (let i = 0; i < complex._components.length; ++i) {\r\n const component = complex._components[i];\r\n this._componentTransforms[component._index] = new THREE.Object3D();\r\n }\r\n\r\n this._inProgress = true;\r\n\r\n return true;\r\n }\r\n\r\n apply() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const complex = this._complexVisual.getComplex();\r\n\r\n for (let i = 0; i < complex._components.length; ++i) {\r\n this._bakeComponentTransform(complex._components[i]);\r\n }\r\n\r\n complex.onAtomPositionChanged();\r\n\r\n this._resetComponentTransform();\r\n\r\n this._complexVisual.finalizeEdit();\r\n }\r\n\r\n discard() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n this._resetComponentTransform();\r\n\r\n this._complexVisual.finalizeEdit();\r\n }\r\n\r\n getAltObj() {\r\n const res = {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n\r\n const visual = this._complexVisual;\r\n const component = visual.getSelectedComponent();\r\n\r\n if (component === null) {\r\n return res;\r\n }\r\n\r\n const selection = this._complexVisual.getSelectionGeo();\r\n const selectionMask = 1 << visual.getSelectionBit();\r\n let i;\r\n let j;\r\n let reprNode;\r\n let geo;\r\n\r\n // find all geo nodes for this component\r\n _traverseComponentGroups(visual, component, (child) => {\r\n res.objects.push(child);\r\n });\r\n\r\n // find all selection nodes for this component\r\n for (i = 0; i < selection.children.length; ++i) {\r\n reprNode = selection.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component') && geo._component === component) {\r\n res.objects.push(geo);\r\n }\r\n }\r\n }\r\n\r\n // add dummy object that stores component transformation\r\n res.objects.push(this._componentTransforms[component._index]);\r\n\r\n const bbmin = new THREE.Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n const bbmax = new THREE.Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n\r\n component.forEachResidue((residue) => {\r\n const atoms = residue._atoms;\r\n for (j = 0; j < atoms.length; ++j) {\r\n if (atoms[j].mask & selectionMask) {\r\n bbmin.min(atoms[j].position);\r\n bbmax.max(atoms[j].position);\r\n }\r\n }\r\n });\r\n\r\n res.pivot.lerpVectors(bbmin, bbmax, 0.5);\r\n return res;\r\n }\r\n\r\n _bakeComponentTransform(component) {\r\n const t = this._componentTransforms[component._index];\r\n if (t && (!(t.position.x === 0 && t.position.y === 0 && t.position.z === 0)\r\n || !(t.quaternion.x === 0 && t.quaternion.y === 0 && t.quaternion.z === 0 && t.quaternion.w === 1))) {\r\n t.updateMatrix();\r\n\r\n component.forEachResidue((residue) => {\r\n const atoms = residue._atoms;\r\n for (let j = 0; j < atoms.length; ++j) {\r\n atoms[j].position.applyMatrix4(t.matrix);\r\n }\r\n });\r\n }\r\n }\r\n\r\n _resetComponentTransform() {\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n let i;\r\n let j;\r\n let reprNode;\r\n let geo;\r\n\r\n for (i = 0; i < this._componentTransforms.length; ++i) {\r\n geo = this._componentTransforms[i];\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n\r\n // reset all geo nodes\r\n for (i = 0; i < visual.children.length; ++i) {\r\n reprNode = visual.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component')) {\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n }\r\n }\r\n\r\n // reset all selection nodes\r\n for (i = 0; i < selection.children.length; ++i) {\r\n reprNode = selection.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component')) {\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass ComplexFragmentEditor extends ComplexEditor {\r\n constructor(complexVisual) {\r\n super();\r\n this._complexVisual = complexVisual;\r\n this._inProgress = false;\r\n }\r\n\r\n begin() {\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n\r\n const atoms = this._getSelectionBorderAtoms();\r\n if (atoms.length < 1 || atoms.length > 2) {\r\n logger.error('Can only edit fragments with one or two bound atoms.');\r\n return false;\r\n }\r\n\r\n this._fragmentBoundAtoms = atoms;\r\n\r\n const selectionMask = 1 << visual.getSelectionBit();\r\n\r\n // hide selected fragment in main model\r\n visual.disableSubset(selectionMask, true);\r\n\r\n // hide selection geo in main model\r\n for (let k = 0; k < selection.children.length; ++k) {\r\n selection.children[k].visible = false;\r\n }\r\n\r\n // create visible fragment representation to rotate\r\n const pivotPos = atoms[0].position.clone();\r\n\r\n if (atoms.length === 2) {\r\n pivotPos.lerp(atoms[1].position, 0.5);\r\n }\r\n\r\n this._fragmentGeo = new THREE.Group();\r\n visual.add(this._fragmentGeo);\r\n this._fragmentGeo.position.copy(pivotPos);\r\n\r\n this._fragmentSelectionGeo = new THREE.Group();\r\n selection.add(this._fragmentSelectionGeo);\r\n this._fragmentSelectionGeo.position.copy(pivotPos);\r\n\r\n const offset = pivotPos.clone();\r\n offset.negate();\r\n\r\n for (let i = 0; i < visual.children.length; ++i) {\r\n const g = visual.children[i];\r\n if (!('getSubset' in g)) {\r\n continue;\r\n }\r\n\r\n const vg = new THREE.Group();\r\n this._fragmentGeo.add(vg);\r\n\r\n const sg = new THREE.Group();\r\n this._fragmentSelectionGeo.add(sg);\r\n\r\n const meshes = g.getSubset(selectionMask, true);\r\n for (let j = 0; j < meshes.length; j++) {\r\n const m = meshes[j];\r\n vg.add(m);\r\n m.position.copy(offset);\r\n }\r\n\r\n const smeshes = g.getSubset(selectionMask, true);\r\n for (let h = 0; h < smeshes.length; h++) {\r\n const sm = smeshes[h];\r\n sg.add(sm);\r\n sm.position.copy(offset);\r\n }\r\n }\r\n\r\n gfxutils.applySelectionMaterial(this._fragmentSelectionGeo);\r\n\r\n this._inProgress = true;\r\n return true;\r\n }\r\n\r\n apply() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const visual = this._complexVisual;\r\n const selectionBit = visual.getSelectionBit();\r\n\r\n const p = this._fragmentGeo.position;\r\n const m = this._fragmentGeo.matrix.clone();\r\n m.multiply(new THREE.Matrix4().makeTranslation(-p.x, -p.y, -p.z));\r\n\r\n this._bakeAtomTransform(m, 1 << selectionBit);\r\n\r\n // show selected fragment in main model\r\n visual.enableSubset(1 << selectionBit, true);\r\n\r\n visual.getComplex().onAtomPositionChanged();\r\n\r\n visual.finalizeEdit();\r\n }\r\n\r\n discard() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n\r\n this._fragmentGeo.parent.remove(this._fragmentGeo);\r\n\r\n // show selected fragment in main model\r\n visual.enableSubset(1 << visual.getSelectionBit(), true);\r\n\r\n // show selection geo in main model (+ remove fragment selection geo)\r\n for (let i = 0; i < selection.children.length; ++i) {\r\n const node = selection.children[i];\r\n if (node.visible) {\r\n selection.remove(node);\r\n } else {\r\n node.visible = true;\r\n }\r\n }\r\n\r\n visual.finalizeEdit();\r\n }\r\n\r\n isFreeRotationAllowed() {\r\n return (this._fragmentBoundAtoms.length < 2);\r\n }\r\n\r\n getAltObj() {\r\n const res = {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n\r\n res.objects.push(this._fragmentGeo, this._fragmentSelectionGeo);\r\n\r\n const boundAtoms = this._fragmentBoundAtoms;\r\n if (boundAtoms.length === 1) {\r\n if (boundAtoms[0].bonds.length === 1) {\r\n // single external bond allows rotation about bond axis\r\n const bond = boundAtoms[0].bonds[0];\r\n res.axis = new THREE.Vector3().subVectors(bond._right.position, bond._left.position);\r\n res.axis.normalize();\r\n res.axis.transformDirection(this._complexVisual.matrixWorld);\r\n }\r\n } else if (boundAtoms.length === 2) {\r\n // two bound atoms allow rotation only about axis running through their centers\r\n res.axis = new THREE.Vector3().subVectors(boundAtoms[1].position, boundAtoms[0].position);\r\n res.axis.normalize();\r\n res.axis.transformDirection(this._complexVisual.matrixWorld);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n _getSelectionBorderAtoms() {\r\n const complex = this._complexVisual.getComplex();\r\n\r\n const selectionMask = 1 << this._complexVisual.getSelectionBit();\r\n const atomHash = {};\r\n\r\n complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n atomHash[bond._left.index] = 1;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n atomHash[bond._right.index] = 1;\r\n }\r\n });\r\n\r\n const atoms = [];\r\n const keys = Object.keys(atomHash);\r\n for (let i = 0, n = keys.length; i < n; ++i) {\r\n const idx = keys[i];\r\n atoms.push(complex._atoms[idx]);\r\n }\r\n\r\n return atoms;\r\n }\r\n\r\n _bakeAtomTransform(matrix, mask) {\r\n this._complexVisual.getComplex().forEachAtom((atom) => {\r\n if (atom.mask & mask) {\r\n atom.position.applyMatrix4(matrix);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default {\r\n ComponentEditor: ComplexComponentEditor,\r\n FragmentEditor: ComplexFragmentEditor,\r\n};\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from './utils';\r\nimport logger from './utils/logger';\r\nimport chem from './chem';\r\nimport settings from './settings';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport modes from './gfx/modes';\r\nimport colorers from './gfx/colorers';\r\nimport palettes from './gfx/palettes';\r\nimport materials from './gfx/materials';\r\nimport Representation from './gfx/Representation';\r\nimport Visual from './Visual';\r\nimport ComplexVisualEdit from './ComplexVisualEdit';\r\nimport meshutils from './gfx/meshutils';\r\n\r\nconst { selectors } = chem;\r\n\r\nfunction lookupAndCreate(entityList, specs) {\r\n if (!Array.isArray(specs)) {\r\n specs = [specs];\r\n }\r\n const [id, opts] = specs;\r\n const Entity = entityList.get(id) || entityList.first;\r\n return new Entity(opts);\r\n}\r\n\r\nclass ComplexVisual extends Visual {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this._complex = dataSource;\r\n\r\n /** @type {Representation[]} */\r\n this._reprList = [];\r\n /** @type {?Representation} */\r\n this._repr = null;\r\n this._reprListChanged = true;\r\n\r\n this._selectionBit = 0;\r\n this._reprUsedBits = 0;\r\n this._selectionCount = 0;\r\n\r\n this._selectionGeometry = new THREE.Group();\r\n }\r\n\r\n getBoundaries() {\r\n return this._complex.getBoundaries();\r\n }\r\n\r\n release() {\r\n if (this._selectionGeometry.parent) {\r\n this._selectionGeometry.remove(this._selectionGeometry);\r\n }\r\n Visual.prototype.release.call(this);\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n getSelectionCount() {\r\n return this._selectionCount;\r\n }\r\n\r\n getSelectionGeo() {\r\n return this._selectionGeometry;\r\n }\r\n\r\n getSelectionBit() {\r\n return this._selectionBit;\r\n }\r\n\r\n getEditor() {\r\n return this._editor;\r\n }\r\n\r\n resetReps(reps) {\r\n // Create all necessary representations\r\n if (this._complex) {\r\n this._complex.clearAtomBits(~0);\r\n }\r\n this._reprListChanged = true;\r\n this._reprUsedBits = 0;\r\n this._reprList.length = reps.length;\r\n for (let i = 0, n = reps.length; i < n; ++i) {\r\n const rep = reps[i];\r\n\r\n let selector;\r\n let selectorString;\r\n if (typeof rep.selector === 'string') {\r\n selectorString = rep.selector;\r\n ({ selector } = selectors.parse(selectorString));\r\n } else if (typeof rep.selector === 'undefined') {\r\n selectorString = settings.now.presets.default[0].selector;\r\n ({ selector } = selectors.parse(selectorString));\r\n } else {\r\n ({ selector } = rep);\r\n selectorString = selector.toString();\r\n }\r\n const mode = lookupAndCreate(modes, rep.mode);\r\n const colorer = lookupAndCreate(colorers, rep.colorer);\r\n const material = materials.get(rep.material) || materials.first;\r\n\r\n this._reprList[i] = new Representation(i, mode, colorer, selector);\r\n this._reprList[i].setMaterialPreset(material);\r\n this._reprList[i].selectorString = selectorString;\r\n\r\n if (this._complex) {\r\n this._complex.markAtoms(selector, 1 << i);\r\n }\r\n\r\n this._reprUsedBits |= 1 << i;\r\n }\r\n this._repr = reps.length > 0 ? this._reprList[0] : null;\r\n\r\n this._selectionBit = reps.length;\r\n this._reprUsedBits |= 1 << this._selectionBit; // selection uses one bit\r\n this._selectionCount = 0;\r\n\r\n if (this._complex) {\r\n this._complex.update();\r\n }\r\n }\r\n\r\n /**\r\n * Get number of representations created so far.\r\n * @returns {number} Number of reps.\r\n */\r\n repCount() {\r\n return this._reprList.length;\r\n }\r\n\r\n /**\r\n * Get or set the current representation index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @returns {number} The current index.\r\n */\r\n repCurrent(index) {\r\n if (index >= 0 && index < this._reprList.length) {\r\n this._repr = this._reprList[index];\r\n } else {\r\n index = this._reprList.indexOf(this._repr);\r\n }\r\n return index;\r\n }\r\n\r\n /**\r\n * Get or set representation by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @param {object=} rep - Optional representation description.\r\n * @param {string=} rep.selector - Selector string.\r\n * @param {string=} rep.mode - Mode id.\r\n * @param {string=} rep.colorer - Colorer id.\r\n * @param {string=} rep.material - Material id.\r\n * @returns {Object} {desc, index, status} field desc contains rep description, index - index of correspondent rep,\r\n * status - one of three strings: 'created', 'changed', ''. 'created' means new rep was created during this function,\r\n * 'changed' - rep was changed during this function. '' - something else.\r\n */\r\n rep(index, rep) {\r\n // if index is missing then it is the current\r\n if (!rep && (index === undefined || index instanceof Object)) {\r\n rep = index;\r\n index = this.repCurrent();\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index > this._reprList.length) {\r\n logger.error(`Rep ${index} does not exist!`);\r\n return null;\r\n }\r\n\r\n // a special case of adding just after the end\r\n if (index === this._reprList.length) {\r\n const res = this.repAdd(rep);\r\n logger.warn(`Rep ${index} does not exist! New representation was created.`);\r\n return { desc: res.desc, index, status: 'created' };\r\n }\r\n\r\n // gather description\r\n const target = this._reprList[index];\r\n const desc = {\r\n selector: target.selectorString,\r\n mode: target.mode.identify(),\r\n colorer: target.colorer.identify(),\r\n material: target.materialPreset.id,\r\n };\r\n\r\n // modification is requested\r\n if (rep) {\r\n // modify\r\n const diff = target.change(\r\n rep,\r\n this._complex,\r\n lookupAndCreate(modes, rep.mode),\r\n lookupAndCreate(colorers, rep.colorer),\r\n );\r\n\r\n // something was changed\r\n if (!_.isEmpty(diff)) {\r\n target.needsRebuild = true;\r\n for (const key in diff) {\r\n if (diff.hasOwnProperty(key)) {\r\n desc[key] = diff[key];\r\n logger.debug(`rep[${index}].${key} changed to ${diff[key]}`);\r\n }\r\n }\r\n\r\n // safety trick: lower resolution for surface modes\r\n if (diff.mode && target.mode.isSurface\r\n && (settings.now.resolution === 'ultra' || settings.now.resolution === 'high')) {\r\n logger.report('Surface resolution was changed to \"medium\" to avoid hang-ups.');\r\n settings.set('resolution', 'medium');\r\n }\r\n return { desc, index, status: 'changed' };\r\n }\r\n }\r\n return { desc, index, status: '' };\r\n }\r\n\r\n /**\r\n * Get representation (not just description) by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @returns {?object} Representation.\r\n */\r\n repGet(index) {\r\n // if index is missing then it is the current\r\n if (index === undefined || index instanceof Object) {\r\n index = this.repCurrent();\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index >= this._reprList.length) {\r\n return null;\r\n }\r\n\r\n return this._reprList[index];\r\n }\r\n\r\n _getFreeReprIdx() {\r\n let bits = this._reprUsedBits;\r\n for (let i = 0; i <= ComplexVisual.NUM_REPRESENTATION_BITS; ++i, bits >>= 1) {\r\n if ((bits & 1) === 0) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * Add new representation.\r\n * @param {object=} rep - Representation description.\r\n * @returns {Object} {desc, index} field desc contains added rep description, index - index of this rep.\r\n */\r\n repAdd(rep) {\r\n if (this._reprList.length >= ComplexVisual.NUM_REPRESENTATION_BITS) {\r\n return null;\r\n }\r\n\r\n const newSelectionBit = this._getFreeReprIdx();\r\n if (newSelectionBit < 0) {\r\n return null; // no more slots for representations\r\n }\r\n\r\n const originalSelection = this.buildSelectorFromMask(1 << this._selectionBit);\r\n\r\n // Fill in default values\r\n const def = settings.now.presets.default[0];\r\n const desc = _.merge({\r\n selector: def.selector,\r\n mode: def.mode,\r\n colorer: def.colorer,\r\n material: def.material,\r\n }, rep);\r\n\r\n const selector = (typeof desc.selector === 'string') ? selectors.parse(desc.selector).selector : desc.selector;\r\n const target = new Representation(\r\n this._selectionBit,\r\n lookupAndCreate(modes, desc.mode),\r\n lookupAndCreate(colorers, desc.colorer),\r\n selector,\r\n );\r\n target.selectorString = selector.toString();\r\n target.setMaterialPreset(materials.get(desc.material));\r\n target.markAtoms(this._complex);\r\n this._reprList.push(target);\r\n\r\n // change selection bit\r\n this._selectionBit = newSelectionBit;\r\n this._reprUsedBits |= 1 << this._selectionBit;\r\n\r\n // restore selection using new selection bit\r\n this._complex.markAtoms(originalSelection, 1 << this._selectionBit);\r\n\r\n return { desc, index: this._reprList.length - 1 };\r\n }\r\n\r\n /**\r\n * Remove representation.\r\n * @param {number=} index - Zero-based representation index.\r\n */\r\n repRemove(index) {\r\n if (index === undefined) {\r\n index = this.repCurrent();\r\n }\r\n\r\n // catch out of bounds case\r\n let count = this._reprList.length;\r\n if (index < 0 || index >= count || count <= 1) { // do not allow to remove the single rep\r\n return;\r\n }\r\n\r\n const target = this._reprList[index];\r\n target.unmarkAtoms(this._complex);\r\n this._reprUsedBits &= ~(1 << target.index);\r\n\r\n this._reprList.splice(index, 1);\r\n\r\n // update current rep\r\n if (target === this._repr) {\r\n --count;\r\n index = index < count ? index : count - 1;\r\n this._repr = this._reprList[index];\r\n }\r\n this._reprListChanged = true;\r\n }\r\n\r\n /**\r\n * Hide representation.\r\n * @param {number} index - Zero-based representation index.\r\n * @param {boolean=} hide - Specify false to make rep visible, true to hide (by default).\r\n */\r\n repHide(index, hide) {\r\n if (hide === undefined) {\r\n hide = true;\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index >= this._reprList.length) {\r\n return;\r\n }\r\n\r\n const target = this._reprList[index];\r\n target.show(!hide);\r\n }\r\n\r\n /**\r\n * Select atoms with selector\r\n * @param {Selector} selector - selector\r\n * @param {boolean=} append - true to append selection atoms to current selection, false to rewrite selection\r\n */\r\n select(selector, append) {\r\n if (append) {\r\n this._selectionCount += this._complex.markAtomsAdditionally(selector, 1 << this._selectionBit);\r\n } else {\r\n this._selectionCount = this._complex.markAtoms(selector, 1 << this._selectionBit);\r\n }\r\n this._complex.updateStructuresMask();\r\n this.rebuildSelectionGeometry();\r\n }\r\n\r\n resetSelectionMask() {\r\n if (this._selectionCount !== 0) {\r\n this._selectionCount = 0;\r\n if (this._complex) {\r\n this._complex.clearAtomBits(1 << this._selectionBit);\r\n }\r\n }\r\n }\r\n\r\n updateSelectionMask(pickedObj) {\r\n const self = this;\r\n const { atom } = pickedObj;\r\n let { residue, chain, molecule } = pickedObj;\r\n const setMask = 1 << this._selectionBit;\r\n const clearMask = ~setMask;\r\n\r\n if (atom) {\r\n residue = atom.residue;\r\n chain = residue._chain;\r\n molecule = residue._molecule;\r\n\r\n if (atom.mask & setMask) {\r\n atom.mask &= clearMask;\r\n residue._mask &= clearMask;\r\n chain._mask &= clearMask;\r\n if (molecule) {\r\n molecule.mask &= clearMask;\r\n }\r\n this._selectionCount--;\r\n } else {\r\n atom.mask |= setMask;\r\n this._selectionCount++;\r\n\r\n // select residue if all atoms in it are selected\r\n residue.collectMask();\r\n // select chain and molecule if all residues in it are selected\r\n chain.collectMask();\r\n if (molecule) {\r\n molecule.collectMask();\r\n }\r\n }\r\n } else if (residue) {\r\n chain = residue._chain;\r\n molecule = residue._molecule;\r\n\r\n if (residue._mask & setMask) {\r\n residue._mask &= clearMask;\r\n chain._mask &= clearMask;\r\n residue.forEachAtom((a) => {\r\n if (a.mask & setMask) {\r\n a.mask &= clearMask;\r\n self._selectionCount--;\r\n }\r\n });\r\n } else {\r\n residue._mask |= setMask;\r\n residue.forEachAtom((a) => {\r\n if (!(a.mask & setMask)) {\r\n a.mask |= setMask;\r\n self._selectionCount++;\r\n }\r\n });\r\n\r\n // select chain and molecule if all residues in it are selected\r\n chain.collectMask();\r\n if (molecule) {\r\n molecule.collectMask();\r\n }\r\n }\r\n } else if (chain || molecule) {\r\n const obj = chain || molecule;\r\n if (obj._mask & setMask) {\r\n obj._mask &= clearMask;\r\n obj.forEachResidue((r) => {\r\n if (r._mask & setMask) {\r\n r._mask &= clearMask;\r\n r.forEachAtom((a) => {\r\n if (a.mask & setMask) {\r\n a.mask &= clearMask;\r\n self._selectionCount--;\r\n }\r\n });\r\n r._mask &= clearMask;\r\n }\r\n });\r\n } else {\r\n obj._mask |= setMask;\r\n obj.forEachResidue((r) => {\r\n if (!(r._mask & setMask)) {\r\n r._mask |= setMask;\r\n r.forEachAtom((a) => {\r\n if (!(a.mask & setMask)) {\r\n a.mask |= setMask;\r\n self._selectionCount++;\r\n }\r\n });\r\n const otherObj = chain ? r.getMolecule() : r.getChain();\r\n if (otherObj) {\r\n otherObj.collectMask();\r\n }\r\n }\r\n });\r\n }\r\n } else {\r\n this.resetSelectionMask();\r\n }\r\n }\r\n\r\n expandSelection() {\r\n const self = this;\r\n const selectionMask = 1 << this._selectionBit;\r\n const tmpMask = 1 << 31;\r\n\r\n // mark atoms to add\r\n this._complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n bond._right.mask |= tmpMask;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n bond._left.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // select marked atoms\r\n const deselectionMask = ~tmpMask;\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & tmpMask) {\r\n atom.mask = (atom.mask & deselectionMask) | selectionMask;\r\n ++self._selectionCount;\r\n }\r\n });\r\n\r\n this._complex.updateStructuresMask();\r\n }\r\n\r\n shrinkSelection() {\r\n const self = this;\r\n const selectionMask = 1 << this._selectionBit;\r\n const tmpMask = 1 << 31;\r\n\r\n // mark atoms neighbouring to unselected ones\r\n this._complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n bond._left.mask |= tmpMask;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n bond._right.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // mark hanging atoms\r\n this._complex.forEachAtom((atom) => {\r\n if ((atom.mask & selectionMask) && (atom.bonds.length === 1)) {\r\n atom.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // deselect marked atoms\r\n const deselectionMask = ~(selectionMask | tmpMask);\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & tmpMask) {\r\n atom.mask &= deselectionMask;\r\n --self._selectionCount;\r\n }\r\n });\r\n\r\n this._complex.updateStructuresMask();\r\n }\r\n\r\n getSelectedComponent() {\r\n const selectionMask = 1 << this._selectionBit;\r\n\r\n let component = null;\r\n let multiple = false;\r\n\r\n // find which component is selected (exclusively)\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & selectionMask) {\r\n if (component === null) {\r\n component = atom.residue._component;\r\n } else if (component !== atom.residue._component) {\r\n multiple = true;\r\n }\r\n }\r\n });\r\n\r\n return multiple ? null : component;\r\n }\r\n\r\n getSelectionCenter(center, includesAtom, selRule) {\r\n center.set(0.0, 0.0, 0.0);\r\n let count = 0;\r\n\r\n this._complex.forEachAtom((atom) => {\r\n if (includesAtom(atom, selRule)) {\r\n center.add(atom.position);\r\n count++;\r\n }\r\n });\r\n if (count === 0) {\r\n return false;\r\n }\r\n center.divideScalar(count);\r\n center.applyMatrix4(this.matrix);\r\n return true;\r\n }\r\n\r\n needsRebuild() {\r\n if (this._reprListChanged) {\r\n return true;\r\n }\r\n const reprList = this._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n if (repr.needsRebuild) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Rebuild molecule geometry asynchronously.\r\n */\r\n rebuild() {\r\n const self = this;\r\n\r\n // Destroy current geometry\r\n gfxutils.clearTree(this);\r\n\r\n return new Promise(((resolve) => {\r\n // Nothing to do?\r\n const complex = self._complex;\r\n if (!complex) {\r\n resolve();\r\n return;\r\n }\r\n\r\n let errorOccured = false;\r\n setTimeout(() => {\r\n console.time('build');\r\n const reprList = self._reprList;\r\n const palette = palettes.get(settings.now.palette) || palettes.first;\r\n let hasGeometry = false;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n repr.colorer.palette = palette;\r\n\r\n if (repr.needsRebuild) {\r\n repr.reset();\r\n\r\n try {\r\n repr.buildGeometry(complex);\r\n } catch (e) {\r\n if (e instanceof utils.OutOfMemoryError) {\r\n repr.needsRebuild = false;\r\n repr.reset();\r\n logger.error(`Not enough memory to build geometry for representation ${repr.index + 1}`);\r\n errorOccured = true;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n\r\n if (DEBUG && !errorOccured) {\r\n logger.debug(`Triangles count: ${meshutils.countTriangles(repr.geo)}`);\r\n }\r\n }\r\n\r\n hasGeometry = errorOccured || hasGeometry || gfxutils.groupHasGeometryToRender(repr.geo);\r\n\r\n if (repr.geo) {\r\n self.add(repr.geo);\r\n }\r\n }\r\n\r\n self._reprListChanged = false;\r\n\r\n console.timeEnd('build');\r\n resolve();\r\n }, 10);\r\n }));\r\n }\r\n\r\n setNeedsRebuild() {\r\n // invalidate all representations\r\n const reprList = this._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n reprList[i].needsRebuild = true;\r\n }\r\n }\r\n\r\n rebuildSelectionGeometry() {\r\n const mask = 1 << this._selectionBit;\r\n\r\n gfxutils.clearTree(this._selectionGeometry);\r\n\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const repr = this._reprList[i];\r\n const sg = repr.buildSelectionGeometry(mask);\r\n if (!sg) {\r\n continue;\r\n }\r\n\r\n this._selectionGeometry.add(sg);\r\n for (let j = 0; j < sg.children.length; j++) {\r\n const m = sg.children[j];\r\n\r\n // copy component transform (that's not applied yet)\r\n // TODO make this code obsolete, accessing editor is bad\r\n if (this._editor && this._editor._componentTransforms) {\r\n const t = this._editor._componentTransforms[m._component._index];\r\n if (t) {\r\n m.position.copy(t.position);\r\n m.quaternion.copy(t.quaternion);\r\n }\r\n }\r\n }\r\n\r\n gfxutils.applySelectionMaterial(sg);\r\n }\r\n }\r\n\r\n _buildSelectorFromSortedLists(atoms, residues, chains) {\r\n const complex = this._complex;\r\n\r\n function optimizeList(list) {\r\n const result = [];\r\n let k = 0;\r\n let first = NaN;\r\n let last = NaN;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n const value = list[i];\r\n if (value === last + 1) {\r\n last = value;\r\n } else {\r\n if (!Number.isNaN(first)) {\r\n result[k++] = new selectors.Range(first, last);\r\n }\r\n first = last = value;\r\n }\r\n }\r\n if (!Number.isNaN(first)) {\r\n result[k] = new selectors.Range(first, last);\r\n }\r\n return result;\r\n }\r\n\r\n let expression = null;\r\n if (chains.length === complex._chains.length) {\r\n expression = selectors.all();\r\n } else {\r\n let selector;\r\n if (chains.length > 0) {\r\n selector = selectors.chain(chains);\r\n expression = expression ? selectors.or(expression, selector) : selector;// NOSONAR\r\n }\r\n if (Object.keys(residues).length > 0) {\r\n for (const ch in residues) {\r\n if (residues.hasOwnProperty(ch)) {\r\n selector = selectors.and(\r\n selectors.chain(ch),\r\n selectors.residx(optimizeList(residues[ch])),\r\n );\r\n expression = expression ? selectors.or(expression, selector) : selector;\r\n }\r\n }\r\n }\r\n if (atoms.length > 0) {\r\n selector = selectors.serial(optimizeList(atoms));\r\n expression = expression ? selectors.or(expression, selector) : selector;\r\n }\r\n\r\n if (!expression) {\r\n expression = selectors.none();\r\n }\r\n }\r\n\r\n return expression;\r\n }\r\n\r\n buildSelectorFromMask(mask) {\r\n const complex = this._complex;\r\n const chains = [];\r\n const residues = {};\r\n const atoms = [];\r\n\r\n complex.forEachChain((chain) => {\r\n if (chain._mask & mask) {\r\n chains.push(chain._name);\r\n }\r\n });\r\n\r\n complex.forEachResidue((residue) => {\r\n if (residue._mask & mask && !(residue._chain._mask & mask)) {\r\n const c = residue._chain._name;\r\n if (!(c in residues)) {\r\n residues[c] = [residue._index];\r\n } else {\r\n residues[c].push(residue._index);\r\n }\r\n }\r\n });\r\n\r\n complex.forEachAtom((atom) => {\r\n if (atom.mask & mask && !(atom.residue._mask & mask)) {\r\n atoms.push(atom.serial);\r\n }\r\n });\r\n\r\n return this._buildSelectorFromSortedLists(atoms, residues, chains);\r\n }\r\n\r\n forSelectedResidues(process) {\r\n const selectionMask = 1 << this._selectionBit;\r\n this._complex.forEachResidue((residue) => {\r\n if (residue._mask & selectionMask) {\r\n process(residue);\r\n }\r\n });\r\n }\r\n\r\n beginComponentEdit() {\r\n if (this._editor) {\r\n return null;\r\n }\r\n\r\n const editor = new ComplexVisualEdit.ComponentEditor(this);\r\n if (!editor.begin()) {\r\n return null;\r\n }\r\n\r\n this._editor = editor;\r\n return editor;\r\n }\r\n\r\n beginFragmentEdit() {\r\n if (this._editor) {\r\n return null;\r\n }\r\n\r\n const editor = new ComplexVisualEdit.FragmentEditor(this);\r\n if (!editor.begin()) {\r\n return null;\r\n }\r\n\r\n this._editor = editor;\r\n return editor;\r\n }\r\n\r\n // should only be called by editors\r\n finalizeEdit() {\r\n this._editor = null;\r\n }\r\n\r\n setMaterialValues(values, needTraverse = false, process = undefined) {\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const rep = this._reprList[i];\r\n rep.material.setValues(values);\r\n if (needTraverse) {\r\n rep.geo.traverse((object) => {\r\n if (object instanceof THREE.Mesh) {\r\n object.material.setValues(values);\r\n\r\n if (process !== undefined) {\r\n process(object);\r\n }\r\n\r\n object.material.needsUpdate = true;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n setUberOptions(values) {\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const rep = this._reprList[i];\r\n rep.material.setUberOptions(values);\r\n }\r\n }\r\n\r\n /**\r\n * Build selector that contains all atoms within given distance from group of atoms\r\n * @param {Selector} selector - selector describing source group of atoms\r\n * @param {number} radius - distance\r\n * @returns {Selector} selector describing result group of atoms\r\n */\r\n within(selector, radius) {\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return false;\r\n }\r\n\r\n // mark atoms of the group as selected\r\n const selectionMask = 1 << this._selectionBit;\r\n this._complex.markAtoms(selector, selectionMask);\r\n\r\n // mark all atoms within distance as selected\r\n if (vw) {\r\n vw.forEachAtomWithinDistFromMasked(this._complex, selectionMask, Number(radius), (atom) => {\r\n atom.mask |= selectionMask;\r\n });\r\n }\r\n\r\n // update selection count\r\n this._selectionCount = this._complex.countAtomsByMask(selectionMask);\r\n\r\n // update secondary structure mask\r\n this._complex.updateStructuresMask();\r\n\r\n return this.buildSelectorFromMask(selectionMask);\r\n }\r\n}\r\n// 32 bits = 30 bits for reps + 1 for selection + 1 for selection expansion\r\nComplexVisual.NUM_REPRESENTATION_BITS = 30;\r\n\r\nexport default ComplexVisual;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexVolumeFaces from './VolumeFaces.vert';\r\nimport fragmentVolumeFaces from './VolumeFaces.frag';\r\nimport vertexVolume from './Volume.vert';\r\nimport fragmentVolume from './Volume.frag';\r\nimport vertexFarPlane from './VolumeFarPlane.vert';\r\nimport fragmentFarPlane from './VolumeFarPlane.frag';\r\nimport settings from '../../settings';\r\n\r\nconst volumeUniforms = THREE.UniformsUtils.merge([\r\n {\r\n volumeDim: { type: 'v3', value: new THREE.Vector3(512, 512, 512) },\r\n tileTex: { type: 't', value: null },\r\n tileTexSize: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n tileStride: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n\r\n boxAngles: { type: 'v3', value: new THREE.Vector3(1, 1, 1) },\r\n delta: { type: 'v3', value: new THREE.Vector3(0, 0, 0) },\r\n\r\n _isoLevel0: { type: 'v2', value: new THREE.Vector3(0.5, 0.75, 1.0) },\r\n _flipV: { type: 'f', value: 0.0 },\r\n _BFLeft: { type: 't', value: null },\r\n _BFRight: { type: 't', value: null },\r\n _FFLeft: { type: 't', value: null },\r\n _FFRight: { type: 't', value: null },\r\n _WFFLeft: { type: 't', value: null },\r\n _WFFRight: { type: 't', value: null },\r\n },\r\n]);\r\n\r\nfunction overrideUniforms(params, defUniforms) {\r\n const uniforms = THREE.UniformsUtils.clone(defUniforms);\r\n for (const p in params) {\r\n if (uniforms.hasOwnProperty(p)) {\r\n uniforms[p].value = params[p];\r\n }\r\n }\r\n return uniforms;\r\n}\r\n\r\nfunction facesPosMaterialParams(params, sideType) {\r\n return {\r\n uniforms: overrideUniforms(params, {}),\r\n vertexShader: vertexVolumeFaces,\r\n fragmentShader: fragmentVolumeFaces,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n side: sideType,\r\n };\r\n}\r\n\r\nclass BackFacePosMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const backFaceParams = facesPosMaterialParams(params, THREE.BackSide);\r\n super(backFaceParams);\r\n }\r\n}\r\n\r\nclass ShaderParams {\r\n constructor(params, uniforms, vertexShader, fragmentShader) {\r\n this.uniforms = overrideUniforms(params, uniforms);\r\n this.vertexShader = vertexShader;\r\n this.fragmentShader = fragmentShader;\r\n this.transparent = false;\r\n this.depthTest = false;\r\n this.depthWrite = false;\r\n this.side = THREE.FrontSide;\r\n }\r\n}\r\n\r\nclass BackFacePosMaterialFarPlane extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const matUniforms = THREE.UniformsUtils.merge([\r\n {\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n farZ: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n matWorld2Volume: { type: '4fv', value: new THREE.Matrix4() },\r\n },\r\n ]);\r\n\r\n const shaderParams = new ShaderParams(params, matUniforms, vertexFarPlane, fragmentFarPlane);\r\n super(shaderParams);\r\n }\r\n}\r\n\r\nclass FrontFacePosMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const frontFaceParams = facesPosMaterialParams(params, THREE.FrontSide);\r\n super(frontFaceParams);\r\n }\r\n}\r\n\r\nclass VolumeMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const shaderParams = new ShaderParams(params, volumeUniforms, vertexVolume, fragmentVolume);\r\n shaderParams.transparent = true;\r\n shaderParams.depthTest = true;\r\n\r\n super(shaderParams);\r\n this.updateDefines();\r\n }\r\n\r\n updateDefines() {\r\n this.defines = {\r\n ISO_MODE: settings.now.modes.VD.isoMode,\r\n STEPS_COUNT: settings.now.modes.VD.polyComplexity[settings.now.resolution] * 100,\r\n };\r\n this.needsUpdate = true;\r\n }\r\n}\r\n\r\nexport default {\r\n BackFacePosMaterial,\r\n BackFacePosMaterialFarPlane,\r\n FrontFacePosMaterial,\r\n VolumeMaterial,\r\n};\r\n","import * as THREE from 'three';\r\nimport VolumeMaterial from './shaders/VolumeMaterial';\r\nimport settings from '../settings';\r\n\r\nclass VolumeMesh extends THREE.Mesh {\r\n volumeInfo = {}; // data for noise filter\r\n\r\n constructor() {\r\n const geo = new THREE.BufferGeometry();\r\n super(geo);\r\n this.clipPlane = new THREE.Plane();\r\n const size = new THREE.Vector3(0.5, 0.5, 0.5);\r\n this.size = size;\r\n\r\n this.cullFlag = [\r\n true, true, true, true,\r\n true, true, true, true,\r\n false, false, false, false, false, false,\r\n ];\r\n\r\n this.faces = [\r\n { indices: [], norm: new THREE.Vector3(0, 0, -1) },\r\n { indices: [], norm: new THREE.Vector3(0, 0, 1) },\r\n { indices: [], norm: new THREE.Vector3(0, -1, 0) },\r\n { indices: [], norm: new THREE.Vector3(0, 1, 0) },\r\n { indices: [], norm: new THREE.Vector3(-1, 0, 0) },\r\n { indices: [], norm: new THREE.Vector3(1, 0, 0) },\r\n { indices: [], norm: new THREE.Vector3(0, 0, 0) },\r\n ];\r\n\r\n this.vertices = [\r\n new THREE.Vector3(-size.x, -size.y, -size.z),\r\n new THREE.Vector3(-size.x, size.y, -size.z),\r\n new THREE.Vector3(size.x, -size.y, -size.z),\r\n new THREE.Vector3(size.x, size.y, -size.z),\r\n new THREE.Vector3(-size.x, -size.y, size.z),\r\n new THREE.Vector3(-size.x, size.y, size.z),\r\n new THREE.Vector3(size.x, -size.y, size.z),\r\n new THREE.Vector3(size.x, size.y, size.z),\r\n new THREE.Vector3(0.0, 0.0, 0.0), // Placeholder for section\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n ];\r\n\r\n geo.setAttribute('position', new THREE.BufferAttribute(new Float32Array(this.vertices.length * 3), 3));\r\n\r\n this.name = 'VolumeMesh';\r\n }\r\n\r\n static _corners = [\r\n // x, y, z, edge1, edge2, edge3\r\n [-1, -1, -1, 0, 4, 8],\r\n [1, -1, -1, 0, 5, 9],\r\n [1, 1, -1, 1, 5, 10],\r\n [-1, 1, -1, 1, 4, 11],\r\n [-1, -1, 1, 2, 6, 8],\r\n [1, -1, 1, 2, 7, 9],\r\n [1, 1, 1, 3, 7, 10],\r\n [-1, 1, 1, 3, 6, 11],\r\n ];\r\n\r\n static _edges = [\r\n // corner1, corner2, center_x, center_y, center_z\r\n [0, 1, 0, -1, -1],\r\n [2, 3, 0, 1, -1],\r\n [4, 5, 0, -1, 1],\r\n [6, 7, 0, 1, 1],\r\n [0, 3, -1, 0, -1],\r\n [1, 2, 1, 0, -1],\r\n [4, 7, -1, 0, 1],\r\n [5, 6, 1, 0, 1],\r\n [0, 4, -1, -1, 0],\r\n [1, 5, 1, -1, 0],\r\n [2, 6, -1, 1, 0],\r\n [3, 7, 1, 1, 0],\r\n ];\r\n\r\n static _edgeIntersections = (function () {\r\n const edgeIntersections = [];\r\n for (let j = 0; j < 12; ++j) {\r\n edgeIntersections.push(new THREE.Vector3());\r\n }\r\n return edgeIntersections;\r\n }());\r\n\r\n _updateVertices() {\r\n // Algorithm:\r\n // 1. Get plane parameters\r\n // 2. Compute culling flags for all vertices\r\n // 3. If intersection occurs => compute from 3 to 6 intersection points\r\n const corners = VolumeMesh._corners;\r\n const edges = VolumeMesh._edges;\r\n const edgeIntersections = VolumeMesh._edgeIntersections;\r\n\r\n let i;\r\n\r\n const norm = this.clipPlane.normal;\r\n const D = this.clipPlane.constant;\r\n\r\n const vert = this.vertices;\r\n const { size } = this;\r\n\r\n const cornerMark = [0, 0, 0, 0, 0, 0, 0, 0];\r\n const edgeMark = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\r\n\r\n const curEdge = new THREE.Vector3();\r\n let curEdgeInter = null;\r\n\r\n function CheckX() {\r\n if (norm.x === 0) return 0;\r\n const x = -(norm.dot(curEdge) + D) / norm.x;\r\n if (-size.x <= x && x <= size.x) {\r\n curEdgeInter.set(x, curEdge.y, curEdge.z);\r\n if (x === size.x) return 2;\r\n if (x === -size.x) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n function CheckY() {\r\n if (norm.y === 0) return 0;\r\n const y = -(norm.dot(curEdge) + D) / norm.y;\r\n if (-size.y <= y && y <= size.y) {\r\n curEdgeInter.set(curEdge.x, y, curEdge.z);\r\n if (y === size.y) return 2;\r\n if (y === -size.y) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n function CheckZ() {\r\n if (norm.z === 0) return 0;\r\n const z = -(norm.dot(curEdge) + D) / norm.z;\r\n if (-size.z <= z && z <= size.z) {\r\n curEdgeInter.set(curEdge.x, curEdge.y, z);\r\n if (z === size.z) return 2;\r\n if (z === -size.z) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n // for each edge\r\n for (let curEdgeIdx = 0; curEdgeIdx < 12; ++curEdgeIdx) {\r\n const curEdgeSource = edges[curEdgeIdx];\r\n curEdgeInter = edgeIntersections[curEdgeIdx];\r\n\r\n curEdge.set(curEdgeSource[2], curEdgeSource[3], curEdgeSource[4]);\r\n curEdge.multiply(size);\r\n\r\n // calculate intersection point\r\n let flag = 0;\r\n if (curEdgeSource[2] === 0) flag = CheckX();\r\n if (curEdgeSource[3] === 0) flag = CheckY();\r\n if (curEdgeSource[4] === 0) flag = CheckZ();\r\n\r\n // mark corresponding corner (if plane cuts through one)\r\n if (flag === -2) {\r\n cornerMark[curEdgeSource[0]] = 1;\r\n } else if (flag === 2) {\r\n cornerMark[curEdgeSource[1]] = 1;\r\n } else if (flag === 0) {\r\n // edge is not intersected by the plane (doesn't produce a vertex)\r\n edgeMark[curEdgeIdx] = 0;\r\n }\r\n }\r\n\r\n const face = {\r\n indices: [],\r\n norm: norm.clone().negate(),\r\n };\r\n\r\n let nextVertex = 8;\r\n\r\n // for each marked corner\r\n for (i = 0; i < 8; ++i) {\r\n if (cornerMark[i] === 1) {\r\n // add corner as vertex to the face\r\n vert[nextVertex].set(corners[i][0], corners[i][1], corners[i][2]).multiply(size);\r\n face.indices.push(nextVertex++);\r\n // skip adjacent edges\r\n edgeMark[corners[i][3]] = 0;\r\n edgeMark[corners[i][4]] = 0;\r\n edgeMark[corners[i][5]] = 0;\r\n }\r\n }\r\n\r\n // for each edge that has internal intersection\r\n for (i = 0; i < 12; ++i) {\r\n if (edgeMark[i] === 1) {\r\n // add intersection point as vertex to the face\r\n vert[nextVertex].copy(edgeIntersections[i]);\r\n face.indices.push(nextVertex++);\r\n }\r\n }\r\n\r\n this.faces[6] = face;\r\n\r\n const diff = new THREE.Vector3();\r\n const coplanarPoint = new THREE.Vector3();\r\n this.clipPlane.coplanarPoint(coplanarPoint);\r\n for (i = 0; i < vert.length; ++i) {\r\n this.cullFlag[i] = false;\r\n if (i < 8) {\r\n // corners should be culled by clipping plane\r\n diff.subVectors(vert[i], coplanarPoint);\r\n this.cullFlag[i] = (norm.dot(diff) >= 0.0);\r\n } else if (i < 8 + face.indices.length) {\r\n // cross section vertices don't get culled\r\n this.cullFlag[i] = true;\r\n }\r\n }\r\n\r\n // write data to vertex buffer\r\n const positions = this.geometry.getAttribute('position');\r\n let idx = 0;\r\n for (i = 0; i < vert.length; ++i) {\r\n positions.array[idx++] = vert[i].x;\r\n positions.array[idx++] = vert[i].y;\r\n positions.array[idx++] = vert[i].z;\r\n }\r\n positions.needsUpdate = true;\r\n }\r\n\r\n _collectVertices(face, filter) {\r\n let i;\r\n const vert = this.vertices;\r\n face.indices = [];\r\n for (i = 0; i < vert.length; ++i) {\r\n if (this.cullFlag[i] && filter(vert[i])) {\r\n face.indices.push(i);\r\n }\r\n }\r\n }\r\n\r\n _sortIndices(face, right) {\r\n let i;\r\n let j;\r\n const vert = this.vertices;\r\n const angle = [];\r\n\r\n const dir = new THREE.Vector3();\r\n for (i = 1; i < face.indices.length; ++i) {\r\n dir.subVectors(vert[face.indices[i]], vert[face.indices[0]]);\r\n dir.normalize();\r\n dir.cross(right);\r\n dir.negate();\r\n angle[i] = face.norm.dot(dir);\r\n }\r\n\r\n // Exchange sort\r\n for (i = 1; i < face.indices.length - 1; ++i) {\r\n for (j = i + 1; j < face.indices.length; ++j) {\r\n if (angle[j] < angle[i]) {\r\n // swap\r\n let t = angle[i];\r\n angle[i] = angle[j];\r\n angle[j] = t;\r\n\r\n t = face.indices[i];\r\n face.indices[i] = face.indices[j];\r\n face.indices[j] = t;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _updateIndices() {\r\n // Algorithm:\r\n // 1. Get plane vertices (from 3 to 6 vertices)\r\n // 2. Get \"right\" vector in plane\r\n // 3. Sort vertices using Graham-like method\r\n // 4. Create indices\r\n\r\n let i;\r\n let faceIdx;\r\n let face;\r\n const vert = this.vertices;\r\n const { size } = this;\r\n\r\n this._collectVertices(this.faces[0], (vertex) => vertex.z === -size.z);\r\n this._collectVertices(this.faces[1], (vertex) => vertex.z === size.z);\r\n this._collectVertices(this.faces[2], (vertex) => vertex.y === -size.y);\r\n this._collectVertices(this.faces[3], (vertex) => vertex.y === size.y);\r\n this._collectVertices(this.faces[4], (vertex) => vertex.x === -size.x);\r\n this._collectVertices(this.faces[5], (vertex) => vertex.x === size.x);\r\n\r\n const vCenter = new THREE.Vector3();\r\n const vRight = new THREE.Vector3();\r\n const vDir = new THREE.Vector3();\r\n\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n\r\n if (face.indices.length === 0) continue;\r\n\r\n vCenter.set(0, 0, 0);\r\n for (i = 0; i < face.indices.length; ++i) {\r\n vCenter.add(vert[face.indices[i]]);\r\n }\r\n vCenter.multiplyScalar(1.0 / face.indices.length);\r\n vRight.subVectors(vert[face.indices[0]], vCenter);\r\n vRight.normalize();\r\n\r\n const rightProj = [];\r\n for (i = 0; i < face.indices.length; ++i) {\r\n vDir.subVectors(vert[face.indices[i]], vCenter);\r\n rightProj[i] = vDir.dot(vRight);\r\n }\r\n for (i = 1; i < face.indices.length; ++i) {\r\n if (rightProj[i] < rightProj[0]) {\r\n // swap\r\n let t = rightProj[0];\r\n rightProj[0] = rightProj[i];\r\n rightProj[i] = t;\r\n\r\n [t] = face.indices;\r\n face.indices[0] = face.indices[i];\r\n face.indices[i] = t;\r\n }\r\n }\r\n\r\n this._sortIndices(face, vRight);\r\n }\r\n\r\n let numIndices = 0;\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n if (face.indices.length >= 3) {\r\n numIndices += 3 * (face.indices.length - 2);\r\n }\r\n }\r\n let offset = 0;\r\n const indices = new Uint16Array(numIndices);\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n for (i = 0; i < face.indices.length - 2; ++i) {\r\n indices[offset] = face.indices[0]; // eslint-disable-line prefer-destructuring\r\n indices[offset + 1] = face.indices[i + 1];\r\n indices[offset + 2] = face.indices[i + 2];\r\n offset += 3;\r\n }\r\n }\r\n\r\n this.geometry.setIndex(new THREE.BufferAttribute(indices, 1));\r\n }\r\n\r\n setDataSource(dataSource) {\r\n const vm = new VolumeMaterial.VolumeMaterial();\r\n const dim = dataSource.getDimensions();\r\n const stride = dataSource.getTiledTextureStride();\r\n const texture = dataSource.buildTiledTexture();\r\n const bbox = dataSource.getBox();\r\n vm.uniforms.volumeDim.value.set(dim[0], dim[1], dim[2]);\r\n vm.uniforms.tileTex.value = texture;\r\n vm.uniforms.tileTexSize.value.set(texture.image.width, texture.image.height);\r\n vm.uniforms.tileStride.value.set(stride[0], stride[1]);\r\n Object.assign(this.volumeInfo, dataSource.getVolumeInfo());\r\n\r\n const volInfo = this.volumeInfo;\r\n vm.uniforms.delta.value.copy(volInfo.delta);\r\n vm.uniforms.boxAngles.value.set(volInfo.obtuseAngle[0], volInfo.obtuseAngle[1], volInfo.obtuseAngle[2]);\r\n\r\n this.material = vm;\r\n\r\n bbox.getSize(this.scale);\r\n bbox.getCenter(this.position);\r\n }\r\n\r\n _updateIsoLevel() {\r\n const { kSigma, kSigmaMed, kSigmaMax } = settings.now.modes.VD;\r\n const volInfo = this.volumeInfo;\r\n const mean = volInfo.dmean - volInfo.dmin;\r\n const span = volInfo.dmax - volInfo.dmin;\r\n const level = (k) => (mean + k * volInfo.sd) / span;\r\n this.material.uniforms._isoLevel0.value.set(level(kSigma), level(kSigmaMed), level(kSigmaMax));\r\n }\r\n\r\n static _nearClipPlaneOffset = 0.2;\r\n\r\n static _pos = new THREE.Vector3();\r\n\r\n static _norm = new THREE.Vector3();\r\n\r\n static _norm4D = new THREE.Vector4();\r\n\r\n static _matrixWorldToLocal = new THREE.Matrix4();\r\n\r\n static _clipPlane = new THREE.Plane();\r\n\r\n rebuild(camera) {\r\n const nearClipPlaneOffset = VolumeMesh._nearClipPlaneOffset;\r\n const pos = VolumeMesh._pos;\r\n const norm = VolumeMesh._norm;\r\n const norm4D = VolumeMesh._norm4D;\r\n const matrixWorldToLocal = VolumeMesh._matrixWorldToLocal;\r\n const clipPlane = VolumeMesh._clipPlane;\r\n\r\n this._updateIsoLevel();\r\n\r\n // get clip plane in local space\r\n camera.getWorldDirection(norm);\r\n camera.getWorldPosition(pos);\r\n pos.addScaledVector(norm, camera.near + nearClipPlaneOffset);\r\n\r\n // transform pos to local CS\r\n matrixWorldToLocal.copy(this.matrixWorld).invert();\r\n pos.applyMatrix4(matrixWorldToLocal);\r\n\r\n // transform norm to local CS\r\n norm4D.set(norm.x, norm.y, norm.z, 0.0); // NOTE: use homogeneous norm for proper transformation\r\n norm4D.applyMatrix4(matrixWorldToLocal);\r\n norm.copy(norm4D);\r\n norm.normalize();\r\n\r\n clipPlane.setFromNormalAndCoplanarPoint(norm, pos);\r\n\r\n if (!this.clipPlane.equals(clipPlane)) {\r\n this.clipPlane = clipPlane.clone();\r\n this._updateVertices();\r\n this._updateIndices();\r\n }\r\n }\r\n}\r\n\r\nexport default VolumeMesh;\r\n","import * as THREE from 'three';\r\nimport gfxutils from './gfxutils';\r\n\r\nfunction _flattenArray(input) {\r\n const n = input.length;\r\n const output = new Float32Array(n * 3);\r\n for (let i = 0; i < n; ++i) {\r\n const j = 3 * i;\r\n const v = input[i];\r\n output[j] = v.x;\r\n output[j + 1] = v.y;\r\n output[j + 2] = v.z;\r\n }\r\n return output;\r\n}\r\n\r\nclass VolumeBounds {\r\n static _projectionTable = { // corresponds between (origin axes and angles between them) and between saving vector coordinates\r\n XY: ['x', 2],\r\n XZ: ['y', 1],\r\n YZ: ['z', 0],\r\n };\r\n\r\n constructor(bBox, volInfo) {\r\n const { delta } = volInfo; // {x: XY, y : XZ, z: YZ}\r\n const { obtuseAngle } = volInfo; // 1 - obtuse, 0 - acute\r\n\r\n const bSize = new THREE.Vector3();\r\n bBox.getSize(bSize);\r\n bSize.multiplyScalar(0.5);\r\n\r\n const offsetVert = this._getBaseVertices(delta, obtuseAngle);\r\n\r\n const geometry = new THREE.BufferGeometry();\r\n const vertices = [];\r\n\r\n for (let i = 0; i < 4; i++) {\r\n vertices.push(offsetVert[i].clone().multiply(bSize));\r\n vertices.push(offsetVert[(i + 1) % 4].clone().multiply(bSize));\r\n }\r\n const translation = new THREE.Vector3(2 * bSize.x * (1 - delta.x - delta.y), 0, 0);\r\n for (let i = 0; i < 8; i++) {\r\n vertices.push(vertices[i].clone().add(translation));\r\n }\r\n for (let i = 0; i < 4; i++) {\r\n vertices.push(vertices[i * 2].clone());\r\n vertices.push(vertices[i * 2 + 8].clone());\r\n }\r\n const center = new THREE.Vector3();\r\n bBox.getCenter(center);\r\n vertices.forEach((vertex) => vertex.add(center)); // pivot shift\r\n\r\n const flatVertices = _flattenArray(vertices);\r\n geometry.setAttribute('position', new THREE.BufferAttribute(flatVertices, 3));\r\n\r\n this._lines = new THREE.LineSegments(geometry, new THREE.LineBasicMaterial({ color: 0xFFFFFF }));\r\n this._lines.layers.set(gfxutils.LAYERS.VOLUME);\r\n }\r\n\r\n // Set one edge (4 points) of frame, from which with parallel transfer the rest of the frame points can be obtained\r\n _getBaseVertices(delta, obtuseAngle) {\r\n const projTable = VolumeBounds._projectionTable;\r\n\r\n const proj = ((index, inv) => { // tricky function to take account of projections: their position(related to box) and sign\r\n const currDelta = delta[projTable[index][0]];\r\n const angleValue = -0.5 * (inv - 1) + inv * obtuseAngle[projTable[index][1]];// inv = 1: alpha; inv = -1: 1 - alpha\r\n return angleValue * currDelta;\r\n });\r\n\r\n const offsetVert = [\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', 1) + proj('XY', 1)), -1 + 2 * proj('YZ', 1), -1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', -1) + proj('XY', 1)), -1 + 2 * proj('YZ', -1), 1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', -1) + proj('XY', -1)), 1 - 2 * proj('YZ', 1), 1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', 1) + proj('XY', -1)), 1 - 2 * proj('YZ', -1), -1),\r\n ];\r\n\r\n return offsetVert;\r\n }\r\n\r\n getMesh() {\r\n return this._lines;\r\n }\r\n}\r\n\r\nexport default VolumeBounds;\r\n","import * as THREE from 'three';\r\nimport VolumeMaterial from './shaders/VolumeMaterial';\r\nimport meshes from './meshes/meshes';\r\nimport gfxutils from './gfxutils';\r\n\r\n// Thes geometric far plane is required for correct filling in the BFTexture in case, when far plane cuts the volume\r\n// cube. In cut place of cube there is no correct data in BFTexture and volume rendering integral is calculated\r\n// with errors.\r\n// Far plane cuts the cube in case of large volume scale (zoom), because farplane doesn't change\r\nclass VolumeFarPlane {\r\n // create plane with unit corners coords (for future rescale in vshader according to camera properties)\r\n constructor(volume, width, height) {\r\n const planeGeo = this._initPlaneGeo(width, height);\r\n\r\n const mat = new VolumeMaterial.BackFacePosMaterialFarPlane();\r\n this._plane = new meshes.Mesh(planeGeo, mat);\r\n this._plane.frustumCulled = false;\r\n this._plane.doubleSided = true;\r\n const matWorldToVolume = new THREE.Matrix4();\r\n\r\n this._plane._onBeforeRender = function (_renderer, _scene, camera, _geometry, _material, _group) {\r\n const { material } = this;\r\n if (!volume || !material) {\r\n return;\r\n }\r\n\r\n // count point in world at farplane place\r\n const planeCamPos = new THREE.Vector4(0, 0, -(camera.far - 0.1), 1);\r\n planeCamPos.applyMatrix4(camera.matrixWorld);\r\n\r\n // recalc matrices to make plane be placed as farplane in the World relative to camera\r\n this.matrix.identity();\r\n this.matrix.makeTranslation(planeCamPos.x, planeCamPos.y, planeCamPos.z);\r\n this.matrixWorld.copy(this.matrix);\r\n this.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, this.matrixWorld);\r\n this.normalMatrix.getNormalMatrix(this.modelViewMatrix);\r\n\r\n // build worldToVolume matrix to transform plane into volumeCS (volumeCS coords are written to BackFaceTexture)\r\n const volumeMatrix = volume.matrixWorld;\r\n matWorldToVolume.copy(volumeMatrix).invert();\r\n\r\n // update material props\r\n material.uniforms.aspectRatio.value = camera.aspect;\r\n material.uniforms.farZ.value = camera.far;\r\n material.uniforms.tanHalfFOV.value = Math.tan(THREE.MathUtils.DEG2RAD * 0.5 * camera.fov);\r\n material.uniforms.matWorld2Volume.value = matWorldToVolume;\r\n };\r\n\r\n // set it to special layer to draw only into BFTexture\r\n this._plane.layers.set(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n }\r\n\r\n _initPlaneGeo(width, height) {\r\n const planeGeo = new THREE.BufferGeometry();\r\n\r\n width = width || 1;\r\n height = height || 1;\r\n\r\n const vertices = new Float32Array([\r\n -0.5 * width, 0.5 * height, 0,\r\n 0.5 * width, 0.5 * height, 0,\r\n -0.5 * width, -0.5 * height, 0,\r\n 0.5 * width, -0.5 * height, 0,\r\n ]);\r\n\r\n planeGeo.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n planeGeo.setIndex([0, 2, 1, 2, 3, 1]);\r\n\r\n return planeGeo;\r\n }\r\n\r\n getMesh() {\r\n return this._plane;\r\n }\r\n}\r\n\r\nexport default VolumeFarPlane;\r\n","import * as THREE from 'three';\r\nimport VolumeMesh from './gfx/VolumeMesh';\r\nimport VolumeBounds from './gfx/VolumeBounds';\r\nimport VolumeFarPlane from './gfx/VolumeFarPlane';\r\nimport Visual from './Visual';\r\nimport settings from './settings';\r\n\r\nclass VolumeVisual extends Visual {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this._mesh = new VolumeMesh();\r\n this._mesh.setDataSource(dataSource);\r\n this.add(this._mesh);\r\n\r\n this._frame = new VolumeBounds(this.getBoundaries().boundingBox, this._mesh.volumeInfo);\r\n this.add(this._frame.getMesh());\r\n this.showFrame(settings.now.modes.VD.frame);\r\n\r\n this._farPlane = new VolumeFarPlane(this._mesh, 2, 2);\r\n this.add(this._farPlane.getMesh());\r\n }\r\n\r\n getBoundaries() {\r\n const box = this._dataSource.getBox();\r\n const sphere = new THREE.Sphere();\r\n box.getBoundingSphere(sphere);\r\n\r\n return {\r\n boundingBox: box,\r\n boundingSphere: sphere,\r\n };\r\n }\r\n\r\n getMesh() {\r\n return this._mesh;\r\n }\r\n\r\n showFrame(needShow) {\r\n this._frame.getMesh().material.visible = needShow;\r\n }\r\n}\r\n\r\nexport default VolumeVisual;\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available loaders.\r\n * @extends EntityList\r\n */\r\nclass LoaderList extends EntityList {\r\n /**\r\n * Create a list of loaders.\r\n * The loaders are indexed by supported source types (`.types` property of a Loader\r\n * subclass).\r\n * The loaders can be retrieved later by matching against specs (see {@link LoaderList#find}).\r\n *\r\n * @param {!Array=} someLoaders A list of {@link Loader} subclasses to\r\n * automatically register at creation time.\r\n * @see LoaderList#register\r\n */\r\n constructor(someLoaders = []) {\r\n super(someLoaders, ['types']);\r\n }\r\n\r\n /**\r\n * Find a suitable loader for a source type.\r\n *\r\n * @param {Object} specs Loader specifications.\r\n * @param {string=} specs.type Supported source type.\r\n * @param {*=} specs.source Source to load from.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.type) {\r\n list = this._dict.types[specs.type.toLowerCase()] || [];\r\n } else if (specs.source) {\r\n return this._list.filter((SomeLoader) => SomeLoader.canProbablyLoad && SomeLoader.canProbablyLoad(specs.source));\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default LoaderList;\r\n","import EventDispatcher from '../../utils/EventDispatcher';\r\nimport makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Loader extends EventDispatcher {\r\n constructor(source, options) {\r\n super();\r\n this._source = source;\r\n this._options = options || {};\r\n this._abort = false;\r\n this._agent = null;\r\n }\r\n\r\n load() {\r\n return Promise.reject(new Error('Loading from this source is not implemented'));\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n if (this._agent) {\r\n this._agent.abort();\r\n }\r\n }\r\n\r\n static extractName(_source) {\r\n return undefined;\r\n }\r\n}\r\n\r\nmakeContextDependent(Loader.prototype);\r\n","import Loader from './Loader';\r\n\r\nexport default class FileLoader extends Loader {\r\n constructor(source, options) {\r\n super(source, options);\r\n\r\n options = this._options;\r\n this._binary = options.binary === true;\r\n }\r\n\r\n load() {\r\n return new Promise((resolve, reject) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n\r\n const blob = this._source;\r\n const reader = this._agent = new FileReader();\r\n\r\n reader.addEventListener('load', () => {\r\n resolve(reader.result);\r\n });\r\n reader.addEventListener('error', () => {\r\n reject(reader.error);\r\n });\r\n reader.addEventListener('abort', () => {\r\n reject(new Error('Loading aborted'));\r\n });\r\n reader.addEventListener('progress', (event) => {\r\n this.dispatchEvent(event);\r\n });\r\n\r\n if (this._binary) {\r\n reader.readAsArrayBuffer(blob);\r\n } else {\r\n reader.readAsText(blob);\r\n }\r\n });\r\n }\r\n\r\n static canProbablyLoad(source) {\r\n return (File && source instanceof File) || (Blob && source instanceof Blob);\r\n }\r\n\r\n static extractName(source) {\r\n return source && source.name;\r\n }\r\n}\r\n\r\nFileLoader.types = ['file', 'blob'];\r\n","import _ from 'lodash';\r\nimport Loader from './Loader';\r\n\r\n// we don't need to detect all kinds of URLs, just the evident ones\r\nconst urlStartRegexp = /^(https?|ftp):\\/\\//i;\r\n\r\nexport default class XHRLoader extends Loader {\r\n constructor(source, options) {\r\n super(source, options);\r\n\r\n options = this._options;\r\n this._binary = (options.binary === true);\r\n }\r\n\r\n load() {\r\n return new Promise((resolve, reject) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n\r\n const url = this._source;\r\n const request = this._agent = new XMLHttpRequest();\r\n\r\n request.addEventListener('load', () => {\r\n if (request.status === 200) {\r\n resolve(request.response);\r\n } else {\r\n reject(new Error(`HTTP ${request.status} while fetching ${url}`));\r\n }\r\n });\r\n request.addEventListener('error', () => {\r\n reject(new Error('HTTP request failed'));\r\n });\r\n request.addEventListener('abort', () => {\r\n reject(new Error('Loading aborted'));\r\n });\r\n request.addEventListener('progress', (event) => {\r\n this.dispatchEvent(event);\r\n });\r\n\r\n request.open('GET', url);\r\n if (this._binary) {\r\n request.responseType = 'arraybuffer';\r\n } else {\r\n request.responseType = 'text';\r\n }\r\n request.send();\r\n });\r\n }\r\n\r\n static canProbablyLoad(source) {\r\n return _.isString(source) && urlStartRegexp.test(source);\r\n }\r\n\r\n static extractName(source) {\r\n if (source) {\r\n const last = (source.indexOf('?') + 1 || source.lastIndexOf('#') + 1 || source.length + 1) - 1;\r\n return source.slice(source.lastIndexOf('/', last) + 1, last);\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nXHRLoader.types = ['url'];\r\n","import Loader from './Loader';\r\n\r\nexport default class ImmediateLoader extends Loader {\r\n load() {\r\n return new Promise((resolve) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n resolve(this._source);\r\n });\r\n }\r\n\r\n static canProbablyLoad(_source) {\r\n return false;\r\n }\r\n}\r\n\r\nImmediateLoader.types = ['immediate'];\r\n","import LoaderList from './loaders/LoaderList';\r\n\r\nimport FileLoader from './loaders/FileLoader';\r\nimport XHRLoader from './loaders/XHRLoader';\r\nimport ImmediateLoader from './loaders/ImmediateLoader';\r\n\r\nexport default new LoaderList([\r\n // note: order might be important\r\n FileLoader,\r\n XHRLoader,\r\n ImmediateLoader,\r\n]);\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available parsers.\r\n * @extends EntityList\r\n */\r\nclass ParserList extends EntityList {\r\n /**\r\n * Create a list of parsers.\r\n * The parsers are indexed by supported data formats and file extensions (`.formats` and\r\n * `.extensions` properties of a Parser subclass).\r\n * The parsers can be retrieved later by matching against specs (see {@link ParsrerList#find}).\r\n *\r\n * @param {!Array=} someParsers A list of {@link Parser} subclasses to\r\n * automatically register at creation time.\r\n * @see ParserList#register\r\n */\r\n constructor(someParsers = []) {\r\n super(someParsers, ['formats', 'extensions']);\r\n }\r\n\r\n /**\r\n * Find a suitable parser for data.\r\n *\r\n * @param {Object} specs Parser specifications.\r\n * @param {string=} specs.format Supported data format.\r\n * @param {string=} specs.ext Supported filename extension.\r\n * @param {*=} specs.data Data to parse.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.format) {\r\n list = this._dict.formats[specs.format.toLowerCase()] || [];\r\n } else if (specs.ext) {\r\n list = this._dict.extensions[specs.ext.toLowerCase()] || [];\r\n }\r\n // autodetect only if no format is forced\r\n if (list.length === 0 && !specs.format && specs.data) {\r\n return this._list.filter((SomeParser) => SomeParser.canProbablyParse && SomeParser.canProbablyParse(specs.data));\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default ParserList;\r\n","import makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Parser {\r\n constructor(data, options) {\r\n this._data = data;\r\n this._options = options || {};\r\n this._abort = false;\r\n }\r\n\r\n parseSync() {\r\n throw new Error('Parsing this type of data is not implemented');\r\n }\r\n\r\n parse() {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n try {\r\n if (this._abort) {\r\n return reject(new Error('Parsing aborted'));\r\n }\r\n return resolve(this.parseSync());\r\n } catch (error) {\r\n return reject(error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // only for volume Parsers\r\n getModel() {\r\n this.model._parseHeader(this._data);\r\n return this.model;\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n }\r\n}\r\n\r\nmakeContextDependent(Parser.prototype);\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Parser helper for PDB tag \"REMARK 290\".\r\n *\r\n * @exports Remark290\r\n * @constructor\r\n */\r\nclass Remark290 {\r\n constructor() {\r\n /** @type {THREE.Matrix4[]} */\r\n this.matrices = [];\r\n\r\n /** @type {?THREE.Matrix4} */\r\n this._matrix = null;\r\n /** @type {number} */\r\n this._matrixIndex = -1;\r\n }\r\n\r\n /**\r\n * Parse a single line of a stream.\r\n * @param {PDBStream} stream - stream to parse\r\n */\r\n\r\n parse(stream) {\r\n /** @type {?THREE.Matrix4} */\r\n let matrix = this._matrix;\r\n\r\n if (stream.readString(12, 18) === ' SMTRY') {\r\n const matrixRow = stream.readCharCode(19) - 49; // convert '1', '2', or '3' -> 0, 1, or 2\r\n const matrixData = stream.readString(20, 80).trim().split(/\\s+/);\r\n const matrixIndex = parseInt(matrixData[0], 10);\r\n if (this._matrix === null || matrixIndex !== this._matrixIndex) {\r\n // TODO: assert(matrixIndex === this.matrices.length + 1);\r\n this._matrixIndex = matrixIndex;\r\n this._matrix = matrix = new THREE.Matrix4();\r\n this.matrices[this.matrices.length] = matrix;\r\n }\r\n\r\n const { elements } = matrix;\r\n elements[matrixRow] = parseFloat(matrixData[1]);\r\n elements[matrixRow + 4] = parseFloat(matrixData[2]);\r\n elements[matrixRow + 8] = parseFloat(matrixData[3]);\r\n elements[matrixRow + 12] = parseFloat(matrixData[4]);\r\n }\r\n }\r\n}\r\n\r\nRemark290.prototype.id = 290;\r\n\r\nexport default Remark290;\r\n","import * as THREE from 'three';\r\nimport chem from '../../../chem';\r\n\r\nconst { Assembly } = chem;\r\n\r\n/**\r\n * Parser helper for PDB tag \"REMARK 350\".\r\n *\r\n * @exports Remark350\r\n * @constructor\r\n */\r\nclass Remark350 {\r\n constructor(complex) {\r\n /** @type {Complex} */\r\n this._complex = complex;\r\n /** @type {Assembly[]} */\r\n this.assemblies = [];\r\n\r\n /** @type {?Assembly} */\r\n this._assembly = null;\r\n /** @type {?THREE.Matrix4} */\r\n this._matrix = null;\r\n /** @type {number} */\r\n this._matrixIndex = -1;\r\n }\r\n\r\n /**\r\n * Parse a single line of a stream.\r\n * @param {PDBStream} stream - stream to parse\r\n */\r\n\r\n parse(stream) {\r\n /** @type {?Assembly} */\r\n let assembly = this._assembly;\r\n /** @type {?THREE.Matrix4} */\r\n let matrix = this._matrix;\r\n\r\n if (assembly && stream.readString(12, 18) === ' BIOMT') {\r\n const matrixRow = stream.readCharCode(19) - 49; // convert '1', '2', or '3' -> 0, 1, or 2\r\n const matrixData = stream.readString(20, 80).trim().split(/\\s+/);\r\n const matrixIndex = parseInt(matrixData[0], 10);\r\n if (this._matrix === null || matrixIndex !== this._matrixIndex) {\r\n // TODO: assert(matrixIndex === assembly.matrices.length + 1);\r\n this._matrixIndex = matrixIndex;\r\n this._matrix = matrix = new THREE.Matrix4();\r\n assembly.addMatrix(matrix);\r\n }\r\n\r\n const { elements } = matrix;\r\n elements[matrixRow] = parseFloat(matrixData[1]);\r\n elements[matrixRow + 4] = parseFloat(matrixData[2]);\r\n elements[matrixRow + 8] = parseFloat(matrixData[3]);\r\n elements[matrixRow + 12] = parseFloat(matrixData[4]);\r\n } else if (assembly && stream.readString(35, 41) === 'CHAINS:') {\r\n const entries = stream.readString(42, 80).split(',');\r\n for (let i = 0, n = entries.length; i < n; ++i) {\r\n const chain = entries[i].trim();\r\n if (chain.length > 0) {\r\n assembly.addChain(chain);\r\n }\r\n }\r\n } else if (stream.readString(12, 23) === 'BIOMOLECULE:') {\r\n // assert molIndex === this.assemblies.length + 1\r\n this._matrix = null;\r\n this._matrixIndex = -1;\r\n this._assembly = assembly = new Assembly(this._complex);\r\n this.assemblies.push(assembly);\r\n }\r\n }\r\n}\r\n\r\nRemark350.prototype.id = 350;\r\n\r\nexport default Remark350;\r\n","/** Helper class for stream-like reading input files. */\r\nclass PDBStream {\r\n /**\r\n * Create a stream\r\n * @param {String} data Input data\r\n */\r\n constructor(data) {\r\n /** @type String */\r\n this._data = data; // Input file\r\n /** @type Number */\r\n this._start = 0; // Starting position of line\r\n /** @type Number */\r\n this._nextCR = -1; // Position of next CR (0x0D)\r\n /** @type Number */\r\n this._nextLF = -1; // Position of next LF (0x0A)\r\n /** @type Number */\r\n this._next = -1; // End position of line\r\n /** @type Number */\r\n this._end = data.length; // End of data\r\n\r\n this.next();\r\n }\r\n\r\n /**\r\n * Reading next line.\r\n * @returns {String} Next line in data (ending with LF or CR)\r\n */\r\n readLine() {\r\n return this._data.slice(this._start, this._next);\r\n }\r\n\r\n /**\r\n * Reading character from position.\r\n * @param {Number} pos - Position in current line.\r\n * @returns {String} Character from position\r\n */\r\n readChar(pos) {\r\n pos = this._start + pos - 1;\r\n return pos < this._next ? this._data[pos] : ' ';\r\n }\r\n\r\n /**\r\n * Reading character code from position.\r\n * @param {Number} pos - Position in current line.\r\n * @returns {Number} Character code from position\r\n */\r\n readCharCode(pos) {\r\n pos = this._start + pos - 1;\r\n return pos < this._next ? this._data.charCodeAt(pos) : 32;\r\n }\r\n\r\n /**\r\n * Reading string from begin to end points.\r\n * For a reason unknown, numbering assumed not to start from 0, but from 1.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {String} String from begin to end\r\n */\r\n readString(begin, end) {\r\n const from = this._start + begin - 1;\r\n const to = this._start + end;\r\n return this._data.slice(from, to < this._next ? to : this._next);\r\n }\r\n\r\n /**\r\n * Reading integer from begin to end points.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {Number} Integer from begin to end\r\n */\r\n readInt(begin, end) {\r\n return parseInt(this.readString(begin, end), 10);\r\n }\r\n\r\n /**\r\n * Reading float from begin to end points.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {Number} Float from begin to end\r\n */\r\n readFloat(begin, end) {\r\n return parseFloat(this.readString(begin, end));\r\n }\r\n\r\n /**\r\n * Checking for end of data.\r\n * @returns {boolean} True if data is ended, false otherwise\r\n */\r\n end() {\r\n return this._start >= this._end;\r\n }\r\n\r\n /**\r\n * Procedure to re-arrange current pointers in data.\r\n */\r\n next() {\r\n const start = this._next + 1;\r\n this._start = start < this._end ? start : this._end;\r\n\r\n // support CR, LF, CR+LF line endings\r\n // do not support LF+CR, CR+CR+LF, and other strange combinations\r\n\r\n if (this._start > this._nextCR) {\r\n this._nextCR = (this._data.indexOf('\\r', this._start) + 1 || this._end + 1) - 1;\r\n }\r\n if (this._start > this._nextLF) {\r\n this._nextLF = (this._data.indexOf('\\n', this._start) + 1 || this._end + 1) - 1;\r\n }\r\n this._next = this._nextCR + 1 < this._nextLF ? this._nextCR : this._nextLF;\r\n }\r\n}\r\n\r\nexport default PDBStream;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport Remark290 from './pdb/Remark290';\r\nimport Remark350 from './pdb/Remark350';\r\nimport PDBStream from './PDBStream';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst TAG_LENGTH = 6;\r\n\r\nfunction nameToElement(name) {\r\n // http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM\r\n //\r\n // http://www.cgl.ucsf.edu/chimera/docs/UsersGuide/tutorials/pdbintro.html#note1\r\n //\r\n // Atom names start with element symbols right-justified in columns 13-14\r\n // as permitted by the length of the name. For example, the symbol FE for\r\n // iron appears in columns 13-14, whereas the symbol C for carbon appears\r\n // in column 14 (see Misaligned Atom Names). If an atom name has four\r\n // characters, however, it must start in column 13 even if the element\r\n // symbol is a single character (for example, see Hydrogen Atoms).\r\n\r\n const veryLong = name.trim().length === 4;\r\n return name.slice(0, veryLong ? 1 : 2).trim();\r\n}\r\n\r\n// the most frequently used beginnings; although HEADER is mandatory, it is often missing in handmade files\r\nconst pdbStartRegexp = /^(HEADER\\s|COMPND\\s|REMARK\\s|ATOM {2}|HETATM|MODEL )/i;\r\n\r\nconst remarkParsers = {\r\n // NOTE: please forget the idea to build the method name in runtime, it can be obfuscated.\r\n 290: Remark290,\r\n 350: Remark350,\r\n};\r\n\r\nclass PDBParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._sheet = null;\r\n this._serialAtomMap = null;\r\n this._modelId = 1;\r\n this._compaundFound = false;\r\n this._biomoleculeFound = false;\r\n this._allowedChainsIDs = null;\r\n this._lastMolId = -1;\r\n\r\n this._remarks = {};\r\n this._remark = null;\r\n\r\n this._molecules = [];\r\n this._molecule = null;\r\n this._compndCurrToken = '';\r\n\r\n this._options.fileType = 'pdb';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && pdbStartRegexp.test(data);\r\n }\r\n\r\n _finalize() {\r\n this._fixBondsArray();\r\n this._fixChains();\r\n\r\n // keep crystallographic symmetry transformations\r\n const remark290 = this._remarks[290];\r\n this._complex.symmetry = _.isUndefined(remark290) ? [] : remark290.matrices;\r\n\r\n // add loaded biological assemblies\r\n const remark350 = this._remarks[350];\r\n this._complex.units = this._complex.units.concat(_.isUndefined(remark350) ? [] : remark350.assemblies);\r\n\r\n // add loaded macromolecules\r\n this._finalizeMolecules();\r\n\r\n // create secondary structure etc.\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n _finalizeMolecules() {\r\n // get chains from complex\r\n const chainDict = {};\r\n let i;\r\n const chains = this._complex._chains;\r\n for (i = 0; i < chains.length; ++i) {\r\n const chainObj = chains[i];\r\n const chainName = chainObj._name;\r\n chainDict[chainName] = chainObj;\r\n }\r\n\r\n // aggregate residues from chains\r\n for (i = 0; i < this._molecules.length; i++) {\r\n const m = this._molecules[i];\r\n let residues = [];\r\n for (let j = 0; j < m._chains.length; j++) {\r\n const name = m._chains[j];\r\n const chain = chainDict[name];\r\n residues = residues.concat(chain._residues.slice());\r\n }\r\n const molecule = new Molecule(this._complex, m._name, i + 1);\r\n molecule.residues = residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n _fixChains() {\r\n const idChainMap = {};\r\n const complex = this._complex;\r\n\r\n // prepare\r\n for (let i = 0; i < complex._chains.length; i++) {\r\n const chain = complex._chains[i];\r\n idChainMap[chain._name.charCodeAt(0)] = chain;\r\n }\r\n }\r\n\r\n // FIXME: This function is redundant, CONECT records always follow ATOM and HETATM. Build the map online.\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const complex = this._complex;\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, ni = atoms.length; i < ni; ++i) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n const bonds = complex._bonds;\r\n const { logger } = this;\r\n for (let j = 0, nj = bonds.length; j < nj; ++j) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n logger.debug('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _parseATOM(stream) {\r\n if (this._modelId !== 1) {\r\n return;\r\n }\r\n\r\n /* eslint-disable no-magic-numbers */\r\n const het = stream.readCharCode(1) === 0x48;\r\n\r\n // field names according to wwPDB Format\r\n // NOTE: Chimera allows (nonstandard) use of columns 6-11 for the integer atom serial number in ATOM records.\r\n const serial = het ? stream.readInt(7, 11) : stream.readInt(6, 11);\r\n let name = stream.readString(13, 16);\r\n const altLoc = stream.readChar(17);\r\n const resName = stream.readString(18, 20).trim();\r\n const chainID = stream.readChar(22);\r\n const resSeq = stream.readInt(23, 26);\r\n const iCode = stream.readChar(27);\r\n const x = stream.readFloat(31, 38);\r\n const y = stream.readFloat(39, 46);\r\n const z = stream.readFloat(47, 54);\r\n const occupancy = stream.readFloat(55, 60);\r\n const tempFactor = stream.readFloat(61, 66);\r\n const element = stream.readString(77, 78).trim() || nameToElement(name);\r\n const charge = stream.readInt(79, 80) || 0;\r\n /* eslint-enable no-magic-numbers */\r\n // skip waters (there may be lots of them)\r\n if (this.settings.now.nowater) {\r\n if (resName === 'HOH' || resName === 'WAT') {\r\n return;\r\n }\r\n }\r\n\r\n // PDB uses positional system for atom names. It helps derive element type from the name\r\n // but names may include extra spaces. From this point on we don't need those spaces anymore.\r\n name = name.trim();\r\n\r\n const type = Element.getByName(element);\r\n const role = Element.Role[name]; // FIXME: Maybe should use type as additional index (\" CA \" vs. \"CA \")\r\n\r\n // NOTE: Residues of a particular chain are not required to be listed next to each other.\r\n // https://github.com/biasmv/pv/commit/7319b898b7473ba380c26699e3b028b2b1a7e1a1\r\n let chain = this._chain;\r\n if (!chain || chain.getName() !== chainID) {\r\n this._chain = chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = null;\r\n }\r\n\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n this._residue = residue = chain.addResidue(resName, resSeq, iCode);\r\n }\r\n\r\n const xyz = new THREE.Vector3(x, y, z);\r\n residue.addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n _parseENDMDL() {\r\n this._modelId += 1;\r\n }\r\n\r\n _parseCONECT(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const serial0 = stream.readInt(7, 11);\r\n const serial1 = stream.readInt(12, 16);\r\n const serial2 = stream.readInt(17, 21);\r\n const serial3 = stream.readInt(22, 26);\r\n const serial4 = stream.readInt(27, 31);\r\n /* eslint-enable no-magic-numbers */\r\n\r\n const complex = this._complex;\r\n\r\n // Keep bonds ordered by atom serial\r\n if (serial1 && serial1 > serial0) {\r\n complex.addBond(serial0, serial1, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial2 && serial2 > serial0) {\r\n complex.addBond(serial0, serial2, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial3 && serial3 > serial0) {\r\n complex.addBond(serial0, serial3, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial4 && serial4 > serial0) {\r\n complex.addBond(serial0, serial4, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n }\r\n\r\n _parseCOMPND(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const str = stream.readString(11, 80);\r\n const tokenIdx = str.indexOf(':');\r\n this._compndCurrToken = tokenIdx > 0 ? str.substring(0, tokenIdx).trim() : this._compndCurrToken;\r\n /* eslint-enable no-magic-numbers */\r\n\r\n // start reading new molecule\r\n if (this._compndCurrToken === 'MOL_ID') {\r\n this._molecule = { _index: '', _chains: [] };\r\n this._molecule._index = parseInt(str.substring(tokenIdx + 1, str.indexOf(';')), 10);\r\n this._molecules.push(this._molecule);\r\n // parse molecule name\r\n } else if (this._compndCurrToken === 'MOLECULE' && this._molecule != null) {\r\n this._molecule._name = str.substring(tokenIdx + 1, str.indexOf(';')).trim();\r\n // parse molecule chains\r\n } else if (this._compndCurrToken === 'CHAIN' && this._molecule != null) {\r\n let chainStr = str.substring(tokenIdx + 1, 80).trim();\r\n const lastChar = chainStr[chainStr.length - 1];\r\n if (lastChar === ';' || lastChar === ',') {\r\n chainStr = chainStr.slice(0, -1);\r\n }\r\n chainStr = chainStr.replace(/\\s+/g, '');\r\n const chains = chainStr.split(',');\r\n this._molecule._chains = this._molecule._chains.concat(chains);\r\n }\r\n }\r\n\r\n _parseREMARK(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const remarkNum = stream.readInt(8, 10);\r\n /* eslint-enable no-magic-numbers */\r\n\r\n // create remark parser if needed\r\n let remark = this._remarks[remarkNum];\r\n if (_.isUndefined(remark)) {\r\n const RemarkParser = remarkParsers[remarkNum];\r\n if (_.isFunction(RemarkParser)) {\r\n this._remarks[remarkNum] = remark = new RemarkParser(this._complex);\r\n }\r\n }\r\n\r\n // delegate parsing\r\n if (!_.isUndefined(remark)) {\r\n remark.parse(stream);\r\n }\r\n }\r\n\r\n _parseHELIX(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const fields = [20, 22, 32, 34];\r\n /* eslint-enable no-magic-numbers */\r\n this._parseSTRUCTURE(stream, fields, (obj) => {\r\n this._complex.addHelix(obj);\r\n this._complex.structures.push(obj);\r\n });\r\n }\r\n\r\n _parseSHEET(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const fields = [22, 23, 33, 34];\r\n /* eslint-enable no-magic-numbers */\r\n this._parseSTRUCTURE(stream, fields, (obj) => {\r\n this._complex.addSheet(obj);\r\n });\r\n }\r\n\r\n _parseSTRUCTURE(stream, pars, adder) {\r\n const startId = 0;\r\n const startIndex = 1;\r\n const endId = 2;\r\n const endIndex = 3;\r\n\r\n // identify fields: debugging and stuff\r\n /* eslint-disable no-magic-numbers */\r\n const codeOfS = 0x53;\r\n const serialNumber = stream.readInt(8, 10);\r\n const structureName = stream.readString(12, 14).trim(); // FIXME: LString(3) forbids trim()\r\n const comment = stream.readString(41, 70).trim();\r\n const helLength = stream.readInt(72, 76);\r\n const helixClass = stream.readInt(39, 40);\r\n const shWidth = stream.readInt(15, 16);\r\n const shCur = stream.readInt(42, 45);\r\n const shPrev = stream.readInt(57, 60);\r\n /* eslint-enable no-magic-numbers */\r\n // file fields\r\n const startChainID = stream.readString(pars[startId], pars[endId] + 1).charCodeAt(0);\r\n const endChainID = stream.readString(pars[endId], pars[endId] + 1).charCodeAt(0);\r\n const startSequenceNumber = stream.readInt(pars[startIndex], pars[startIndex] + 3);\r\n let iCodeStr = stream.readString(pars[startIndex] + 4, pars[startIndex] + 4);\r\n let startICode = 0;\r\n\r\n if (iCodeStr.length > 0) {\r\n startICode = iCodeStr.charCodeAt(0);\r\n }\r\n const endSequenceNumber = stream.readInt(pars[endIndex], pars[endIndex] + 3);\r\n iCodeStr = stream.readString(pars[endIndex] + 4, pars[endIndex] + 4);\r\n let endICode = 0;\r\n if (iCodeStr.length > 0) {\r\n endICode = iCodeStr.charCodeAt(0);\r\n }\r\n\r\n let obj;\r\n let cs = this._sheet;\r\n if (stream.readCharCode(1) === codeOfS) {\r\n if (cs !== null && cs.getName() !== structureName) {\r\n cs = null;\r\n this._sheet = null;\r\n }\r\n if (cs === null) {\r\n this._sheet = obj = new Sheet(structureName, shWidth);\r\n adder(obj);\r\n } else {\r\n obj = cs;\r\n }\r\n const strand = new Strand(\r\n obj,\r\n this._complex.getUnifiedSerial(startChainID, startSequenceNumber, startICode),\r\n this._complex.getUnifiedSerial(endChainID, endSequenceNumber, endICode),\r\n helixClass,\r\n shCur,\r\n shPrev,\r\n );\r\n obj.addStrand(strand);\r\n this._complex.structures.push(strand);\r\n } else {\r\n obj = new Helix(\r\n helixClass,\r\n this._complex.getUnifiedSerial(startChainID, startSequenceNumber, startICode),\r\n this._complex.getUnifiedSerial(endChainID, endSequenceNumber, endICode),\r\n serialNumber,\r\n structureName,\r\n comment,\r\n helLength,\r\n );\r\n adder(obj);\r\n }\r\n }\r\n\r\n _parseHEADER(stream) {\r\n const { metadata } = this._complex;\r\n metadata.classification = stream.readString(11, 50).trim();\r\n metadata.date = stream.readString(51, 59).trim();\r\n\r\n const id = stream.readString(63, 66).trim();\r\n metadata.id = id;\r\n if (id) {\r\n this._complex.name = id;\r\n }\r\n metadata.format = 'pdb';\r\n }\r\n\r\n _parseTITLE(stream) {\r\n const { metadata } = this._complex;\r\n metadata.title = metadata.title || [];\r\n\r\n const line = stream.readInt(9, 10) || 1;\r\n metadata.title[line - 1] = stream.readString(11, 80).trim();\r\n }\r\n\r\n static tagParsers = {\r\n HEADER: PDBParser.prototype._parseHEADER,\r\n 'TITLE ': PDBParser.prototype._parseTITLE,\r\n 'ATOM ': PDBParser.prototype._parseATOM,\r\n HETATM: PDBParser.prototype._parseATOM,\r\n ENDMDL: PDBParser.prototype._parseENDMDL,\r\n CONECT: PDBParser.prototype._parseCONECT,\r\n COMPND: PDBParser.prototype._parseCOMPND,\r\n REMARK: PDBParser.prototype._parseREMARK,\r\n // 'SOURCE': PDBParser.prototype._parseSOURCE,\r\n 'HELIX ': PDBParser.prototype._parseHELIX,\r\n 'SHEET ': PDBParser.prototype._parseSHEET,\r\n\r\n // nonstandard extension to allow range 100,000 - 999,999\r\n 'ATOM 1': PDBParser.prototype._parseATOM,\r\n 'ATOM 2': PDBParser.prototype._parseATOM,\r\n 'ATOM 3': PDBParser.prototype._parseATOM,\r\n 'ATOM 4': PDBParser.prototype._parseATOM,\r\n 'ATOM 5': PDBParser.prototype._parseATOM,\r\n 'ATOM 6': PDBParser.prototype._parseATOM,\r\n 'ATOM 7': PDBParser.prototype._parseATOM,\r\n 'ATOM 8': PDBParser.prototype._parseATOM,\r\n 'ATOM 9': PDBParser.prototype._parseATOM,\r\n };\r\n\r\n parseSync() {\r\n const stream = new PDBStream(this._data);\r\n const result = this._complex = new Complex();\r\n\r\n // parse PDB line by line\r\n while (!stream.end()) {\r\n const tag = stream.readString(1, TAG_LENGTH);\r\n const func = PDBParser.tagParsers[tag];\r\n if (_.isFunction(func)) {\r\n func.call(this, stream);\r\n }\r\n stream.next();\r\n }\r\n\r\n // Resolve indices and serials to objects\r\n this._finalize();\r\n\r\n // cleanup\r\n this._serialAtomMap = null;\r\n this._sheet = null;\r\n this._residue = null;\r\n this._chain = null;\r\n this._complex = null;\r\n\r\n if (result.getAtomCount() === 0) {\r\n throw new Error('The data does not contain valid atoms');\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nPDBParser.formats = ['pdb'];\r\nPDBParser.extensions = ['.pdb', '.ent'];\r\n\r\nexport default PDBParser;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n SGroup,\r\n Bond,\r\n} = chem;\r\n\r\nconst cOrderCharCodes = {\r\n A: 0,\r\n S: 1,\r\n D: 2,\r\n T: 3,\r\n};\r\n\r\nconst cmlStartRegexp = /\\s*<\\?xml\\b[^?>]*\\?>\\s*<(?:cml|molecule)\\b/i;\r\n\r\nclass CMLParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._complex = null;\r\n this._residue = null;\r\n this._serialAtomMap = null;\r\n this._modelId = 1;\r\n this._lastMolId = -1;\r\n this._readOnlyOneMolecule = false;\r\n this._options.fileType = 'cml';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && cmlStartRegexp.test(data);\r\n }\r\n\r\n _rebuidBondIndexes(atoms, bonds) {\r\n const count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n const atomId = atoms[i].id;\r\n\r\n const countBonds = bonds.length;\r\n for (let j = 0; j < countBonds; j++) {\r\n const idxs = bonds[j].atomRefs2.split(' ');\r\n if (idxs[0] === atomId) {\r\n bonds[j].start = i;\r\n }\r\n\r\n if (idxs[1] === atomId) {\r\n bonds[j].end = i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _createSGroup(molecule, moleculeArr) {\r\n const newGroup = new SGroup(\r\n molecule.id,\r\n molecule.fieldData,\r\n new THREE.Vector3(parseFloat(molecule.x), parseFloat(molecule.y), 0),\r\n molecule.atomRefs,\r\n molecule,\r\n );\r\n if (molecule.placement === 'Relative') {\r\n newGroup._center = new THREE.Vector3(0, 0, 0);\r\n }\r\n if (molecule.fieldName === 'MDLBG_FRAGMENT_CHARGE') {\r\n newGroup._charge = parseInt(molecule.fieldData, 10) || 0;\r\n }\r\n if (molecule.fieldName === 'MDLBG_FRAGMENT_COEFFICIENT') {\r\n newGroup._repeat = parseInt(molecule.fieldData, 10) || 1;\r\n }\r\n moleculeArr.push(newGroup);\r\n }\r\n\r\n _extractSGroup(molecule, moleculeArr) {\r\n if (!Array.isArray(moleculeArr)) {\r\n moleculeArr = [];\r\n }\r\n\r\n if (molecule) {\r\n if (Array.isArray(molecule)) {\r\n const count = molecule.length;\r\n for (let i = 0; i < count; i++) {\r\n if (molecule[i].molecule) {\r\n moleculeArr = moleculeArr.concat(this._extractSGroup(molecule[i].molecule));\r\n }\r\n this._createSGroup(molecule[i], moleculeArr);\r\n }\r\n } else {\r\n if (molecule.molecule) {\r\n if (molecule.molecule) {\r\n moleculeArr = moleculeArr.concat(this._extractSGroup(molecule.molecule));\r\n }\r\n }\r\n this._createSGroup(molecule, moleculeArr);\r\n }\r\n }\r\n\r\n return moleculeArr;\r\n }\r\n\r\n _extractSGroups(molecule, atoms) {\r\n const moleculeArr = this._extractSGroup(molecule);\r\n\r\n const count = atoms.length;\r\n let i;\r\n let j;\r\n\r\n for (i = 0; i < count; i++) {\r\n const atomId = atoms[i].id;\r\n for (j = 0; j < moleculeArr.length; j++) {\r\n const firstAtomRef = moleculeArr[j]._atoms.split(' ')[0];\r\n if (firstAtomRef === atomId) {\r\n if (!atoms[i].sgroupRef) {\r\n atoms[i].sgroupRef = [];\r\n }\r\n atoms[i].sgroupRef.push(moleculeArr[j]);\r\n }\r\n }\r\n }\r\n // build sGroups centers\r\n let atomMap = {}; // sgrpmap cache\r\n let mapEntry = null;\r\n const nLimon = 100000000;\r\n const bLow = new THREE.Vector3(nLimon, nLimon, nLimon);\r\n const bHight = new THREE.Vector3(-nLimon, -nLimon, -nLimon);\r\n\r\n function cycleFuncInner(e) {\r\n mapEntry = atomMap[e];\r\n if (mapEntry) {\r\n moleculeArr[j]._atoms.push(mapEntry.a);\r\n }\r\n }\r\n\r\n function cycleFunc(e) {\r\n mapEntry = atomMap[e];\r\n if (mapEntry) {\r\n bLow.set(Math.min(bLow.x, mapEntry.x), Math.min(bLow.y, mapEntry.y), Math.min(bLow.z, mapEntry.z));\r\n bHight.set(Math.max(bHight.x, mapEntry.x), Math.max(bHight.y, mapEntry.y), Math.max(bHight.z, mapEntry.z));\r\n cycleFuncInner(e);\r\n }\r\n }\r\n\r\n for (i = 0; i < atoms.length; i++) {\r\n atomMap[atoms[i].id] = {};\r\n atomMap[atoms[i].id].x = atoms[i].x2;\r\n if (atoms[i].x3) {\r\n atomMap[atoms[i].id].x = atoms[i].x3;\r\n }\r\n atomMap[atoms[i].id].x = parseFloat(atomMap[atoms[i].id].x);\r\n atomMap[atoms[i].id].y = atoms[i].y2;\r\n if (atoms[i].y3) {\r\n atomMap[atoms[i].id].y = atoms[i].y3;\r\n }\r\n atomMap[atoms[i].id].y = parseFloat(atomMap[atoms[i].id].y);\r\n atomMap[atoms[i].id].z = '0.0';\r\n if (atoms[i].z3) {\r\n atomMap[atoms[i].id].z = atoms[i].z3;\r\n }\r\n atomMap[atoms[i].id].z = parseFloat(atomMap[atoms[i].id].z);\r\n atomMap[atoms[i].id].a = atoms[i];\r\n }\r\n\r\n let atomsRef;\r\n for (j = 0; j < moleculeArr.length; j++) {\r\n if (moleculeArr[j]._center !== null) {\r\n bLow.set(nLimon, nLimon, nLimon);\r\n bHight.set(-nLimon, -nLimon, -nLimon);\r\n atomsRef = moleculeArr[j]._atoms.split(' ');\r\n moleculeArr[j]._atoms = [];\r\n atomsRef.forEach(cycleFunc);\r\n\r\n moleculeArr[j]._center.addVectors(bLow, bHight);\r\n moleculeArr[j]._center.multiplyScalar(0.5);\r\n } else {\r\n atomsRef = moleculeArr[j]._atoms.split(' ');\r\n moleculeArr[j]._atoms = [];\r\n atomsRef.forEach(cycleFuncInner);\r\n }\r\n }\r\n atomMap = null;\r\n }\r\n\r\n _traverseData(dom) {\r\n function isArray(o) {\r\n return Object.prototype.toString.apply(o) === '[object Array]';\r\n }\r\n\r\n function parseNode(xmlNode, result) {\r\n if (xmlNode.nodeName === '#text' && xmlNode.nodeValue.trim() === '') {\r\n return;\r\n }\r\n\r\n const jsonNode = {};\r\n jsonNode.xmlNode = xmlNode;\r\n const existing = result[xmlNode.nodeName];\r\n if (existing) {\r\n if (!isArray(existing)) {\r\n result[xmlNode.nodeName] = [existing, jsonNode];\r\n } else {\r\n result[xmlNode.nodeName].push(jsonNode);\r\n }\r\n } else {\r\n result[xmlNode.nodeName] = jsonNode;\r\n }\r\n\r\n let length;\r\n let i;\r\n if (xmlNode.attributes) {\r\n ({ length } = xmlNode.attributes);\r\n for (i = 0; i < length; i++) {\r\n const attribute = xmlNode.attributes[i];\r\n jsonNode[attribute.nodeName] = attribute.nodeValue;\r\n }\r\n }\r\n\r\n ({ length } = xmlNode.childNodes);\r\n for (i = 0; i < length; i++) {\r\n parseNode(xmlNode.childNodes[i], jsonNode);\r\n }\r\n }\r\n\r\n const result = {};\r\n if (dom.childNodes.length) {\r\n parseNode(dom.childNodes[0], result);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _findSuitableMolecule(data, molSet) {\r\n for (const key in data) {\r\n if (key === 'xmlNode') {\r\n continue;\r\n } else if (key === 'molecule') {\r\n if (data.molecule) {\r\n if (data.molecule.atomArray && data.molecule.atomArray.atom) {\r\n molSet.push(data);\r\n }\r\n if (Array.isArray(data.molecule)) {\r\n for (let i = 0; i < data.molecule.length; i++) {\r\n if (data.molecule[i].atomArray && data.molecule[i].atomArray.atom) {\r\n molSet.push({ molecule: data.molecule[i] });\r\n }\r\n }\r\n }\r\n }\r\n } else if (data[key] && data[key] !== null && typeof (data[key]) === 'object') {\r\n this._findSuitableMolecule(data[key], molSet);\r\n }\r\n }\r\n }\r\n\r\n _selectComponents(text) {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(text, 'application/xml');\r\n const traversedData = this._traverseData(doc);\r\n let rawData;\r\n const self = this;\r\n\r\n function prepareComponentCompound(data) {\r\n let atoms = [];\r\n if (data.molecule && data.molecule.atomArray && data.molecule.atomArray.atom) {\r\n if (!Array.isArray(data.molecule.atomArray.atom)) {\r\n atoms.push(data.molecule.atomArray.atom);\r\n } else {\r\n atoms = data.molecule.atomArray.atom;\r\n }\r\n } else if (!data.molecule) {\r\n const ret = {};\r\n ret.atomLabels = null;\r\n ret.labelsCount = 1;\r\n return ret;\r\n }\r\n\r\n if (data.molecule.molecule) {\r\n self._extractSGroups(data.molecule.molecule, atoms);\r\n }\r\n\r\n let atom;\r\n let count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n atom = atoms[i];\r\n atom.edges = [];\r\n }\r\n\r\n let localBond = [];\r\n if (data.molecule.bondArray && data.molecule.bondArray.bond) {\r\n if (!Array.isArray(data.molecule.bondArray.bond)) {\r\n localBond.push(data.molecule.bondArray.bond);\r\n } else {\r\n localBond = data.molecule.bondArray.bond;\r\n }\r\n }\r\n let bond;\r\n count = localBond.length;\r\n self._rebuidBondIndexes(atoms, localBond);\r\n\r\n function addCurrBond(index) {\r\n bond = localBond[index];\r\n atom = atoms[bond.start];\r\n if (!atom) {\r\n return false;\r\n }\r\n atom.edges.push(bond.end);\r\n atom = atoms[bond.end];\r\n if (!atom) {\r\n return false;\r\n }\r\n atom.edges.push(bond.start);\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < count; i++) {\r\n if (!addCurrBond(i)) {\r\n // ignore invalid bond\r\n continue;\r\n }\r\n const orderAttr = bond.xmlNode.getAttribute('order');\r\n const tc = parseInt(orderAttr, 10);\r\n // the default bond order is unknown\r\n localBond[i].order = 0;\r\n localBond[i].type = Bond.BondType.UNKNOWN;\r\n if (tc > 1) {\r\n localBond[i].order = tc;\r\n } else {\r\n // another option - bond order is a string\r\n const order = cOrderCharCodes[orderAttr];\r\n if (order !== undefined) {\r\n localBond[i].order = order;\r\n if (orderAttr === 'A') {\r\n localBond[i].type = Bond.BondType.AROMATIC;\r\n }\r\n }\r\n }\r\n }\r\n\r\n count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n atom = atoms[i];\r\n atom.edges.sort();\r\n }\r\n\r\n const labels = self._breadWidthSearch(atoms, 0); // for now\r\n\r\n const retStruct = {};\r\n retStruct.atoms = atoms;\r\n retStruct.bonds = localBond;\r\n retStruct.labels = labels.atomLabels;\r\n retStruct.count = Math.min(1, labels.labelsCount); // for now\r\n retStruct.curr = -1;\r\n retStruct.originalCML = doc;\r\n\r\n return retStruct;\r\n }\r\n\r\n if (traversedData.cml) {\r\n rawData = traversedData.cml;\r\n } else {\r\n rawData = traversedData;\r\n }\r\n const retData = [];\r\n const filteredData = [];\r\n this._findSuitableMolecule(rawData, filteredData);\r\n if (this._readOnlyOneMolecule && filteredData.length > 1) {\r\n filteredData.splice(1, filteredData.length - 1);\r\n }\r\n filteredData.forEach((d) => {\r\n const rd = prepareComponentCompound(d);\r\n if (rd.atoms.length > 0) {\r\n retData.push(rd);\r\n }\r\n });\r\n return retData;\r\n }\r\n\r\n _packLabel(compId, molId) {\r\n const shift = 16;\r\n return (molId << shift) + compId;\r\n }\r\n\r\n _unpackLabel(l) {\r\n const shift = 16;\r\n const mask = (1 << shift) - 1;\r\n return { molId: l >>> shift, compId: l & mask };\r\n }\r\n\r\n _breadWidthSearch(atoms, molID) {\r\n const atomLabels = new Array(atoms.length);\r\n\r\n let id;\r\n for (id = 0; id < atomLabels.length; id++) {\r\n atomLabels[id] = this._packLabel(0, molID);\r\n }\r\n\r\n const breadthQueue = [];\r\n let componentID = 0;\r\n let labeledAtoms = atoms.length;\r\n\r\n while (labeledAtoms > 0) {\r\n componentID++;\r\n\r\n let startID = -1;\r\n for (id = 0; id < atomLabels.length; id++) {\r\n if (this._unpackLabel(atomLabels[id]).compId === 0) {\r\n startID = id;\r\n break;\r\n }\r\n }\r\n\r\n if (startID < 0) {\r\n break;\r\n }\r\n\r\n // Bread first search\r\n breadthQueue.push(atoms[startID]);\r\n atomLabels[startID] = this._packLabel(componentID, molID);\r\n labeledAtoms--;\r\n\r\n while (breadthQueue.length > 0) {\r\n const curr = breadthQueue.shift();\r\n if (!curr) {\r\n continue;\r\n }\r\n\r\n for (let i = 0; i < curr.edges.length; i++) {\r\n if (atomLabels[curr.edges[i]] !== componentID) {\r\n breadthQueue.push(atoms[curr.edges[i]]);\r\n atomLabels[curr.edges[i]] = componentID;\r\n labeledAtoms--;\r\n }\r\n }\r\n }\r\n }\r\n const ret = {};\r\n ret.atomLabels = atomLabels;\r\n ret.labelsCount = componentID;\r\n return ret;\r\n }\r\n\r\n _parseBond(eAtom, mainAtom, order, type) {\r\n if (eAtom >= 0) {\r\n const h = [Math.min(eAtom, mainAtom), Math.max(eAtom, mainAtom)];\r\n this._complex.addBond(h[0], h[1], order, type, true);\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const complex = this._complex;\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, ni = atoms.length; i < ni; ++i) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n const bonds = complex._bonds;\r\n const { logger } = this;\r\n for (let j = 0, nj = bonds.length; j < nj; ++j) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n logger.debug('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _parseSet(varData) {\r\n const complex = this._complex = new Complex();\r\n const data = varData;\r\n const currentLabel = data.curr;\r\n const { atoms, labels } = data;\r\n let atom = null;\r\n let i;\r\n let j;\r\n const count = atoms.length;\r\n\r\n function addFunc(a) {\r\n a.xmlNodeRef = atom;\r\n if (atom.x2) {\r\n atom.x3 = atom.x2;\r\n delete atom.x2;\r\n }\r\n if (atom.y2) {\r\n atom.y3 = atom.y2;\r\n delete atom.y2;\r\n }\r\n if (!(atom.z3)) {\r\n atom.z3 = '0.0';\r\n }\r\n atom.complexAtom = a;\r\n }\r\n\r\n let chains = {};\r\n // parse atoms in label order\r\n const reorder = [];\r\n for (i = 0; i < count; i++) {\r\n reorder.push(i);\r\n }\r\n reorder.sort((a, b) => labels[a] - labels[b]);\r\n for (i = 0; i < count; i++) {\r\n const atomCharge = 0;\r\n const lLabel = labels[reorder[i]];\r\n if (this._unpackLabel(lLabel).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[reorder[i]];\r\n const atomFullNameStruct = atom.elementType;\r\n\r\n if (atom.sgroupRef) {\r\n const countRef = atom.sgroupRef.length;\r\n for (let k = 0; k < countRef; ++k) {\r\n complex._sgroups.push(atom.sgroupRef[k]);\r\n }\r\n }\r\n\r\n if (atom.x3 || atom.x2) {\r\n const currAtomComp = this._unpackLabel(lLabel).compId;\r\n // use ' ' by default instead of synthetic creation of chain names\r\n const chainID = ' '; //= String.fromCharCode('A'.charCodeAt(0) + currAtomComp);\r\n const resSeq = currAtomComp;\r\n const iCode = ' ';\r\n let strLabel = currAtomComp.toString();\r\n if (strLabel.length === 1) {\r\n strLabel = `0${strLabel}`;\r\n }\r\n const resName = `N${strLabel}`;\r\n let chain = chains[chainID];\r\n if (!chain || chain.getName() !== chainID) {\r\n chains[chainID] = chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = null;\r\n }\r\n\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n this._residue = residue = chain.addResidue(resName, resSeq, iCode);\r\n }\r\n\r\n // _x, _y, _z, mname, mindex, atomNameFull, atomName, chainID, serial, isHet, atlLocInd, atomNameToTypeF\r\n let xyz = null;\r\n if (atom.x3) {\r\n xyz = new THREE.Vector3(parseFloat(atom.x3), parseFloat(atom.y3), parseFloat(atom.z3));\r\n } else if (atom.x2) {\r\n xyz = new THREE.Vector3(parseFloat(atom.x2), parseFloat(atom.y2), 0);\r\n }\r\n let element = Element.ByName[atom.elementType.toUpperCase()];\r\n if (!element) {\r\n element = (JSON.parse(JSON.stringify(Element.ByName[\r\n Object.keys(Element.ByName)[Object.keys(Element.ByName).length - 1]])));\r\n element.number += 1;\r\n element.name = atom.elementType.toUpperCase();\r\n element.fullName = 'Unknown';\r\n Element.ByName[atom.elementType.toUpperCase()] = element;\r\n }\r\n const atomSerial = parseInt(atom.id.replace(/[^0-9]/, ''), 10);\r\n const added = residue.addAtom(\r\n atomFullNameStruct,\r\n element,\r\n xyz,\r\n Element.Role.SG,\r\n true,\r\n atomSerial,\r\n ' ',\r\n 1.0,\r\n 0.0,\r\n atomCharge,\r\n );\r\n if (atom.hydrogenCount) {\r\n added.hydrogenCount = parseInt(atom.hydrogenCount, 10);\r\n }\r\n if (atom.mrvValence) {\r\n added.valence = parseInt(atom.mrvValence, 10);\r\n }\r\n addFunc(added);\r\n }\r\n }\r\n }\r\n chains = null;// NOSONAR\r\n for (i = 0; i < data.bonds.length; i++) {\r\n const cb = data.bonds[i];\r\n if (this._unpackLabel(labels[cb.start]).molId === this._unpackLabel(currentLabel).molId\r\n && this._unpackLabel(labels[cb.end]).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[cb.start];\r\n if (!atom || !(atoms[cb.end])) {\r\n continue; // skip invalid\r\n }\r\n this._parseBond(\r\n parseInt(atom.id.replace(/[^0-9]/, ''), 10),\r\n parseInt(atoms[cb.end].id.replace(/[^0-9]/, ''), 10),\r\n cb.order,\r\n cb.type,\r\n );\r\n }\r\n }\r\n\r\n for (i = 0; i < this._complex.getSGroupCount(); i++) {\r\n const sGrp = this._complex.getSGroups()[i];\r\n for (j = 0; j < sGrp._atoms.length; j++) {\r\n sGrp._atoms[j] = sGrp._atoms[j].complexAtom;\r\n }\r\n }\r\n for (i = 0; i < count; i++) {\r\n if (this._unpackLabel(labels[i]).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[i];\r\n atom.complexAtom = null;\r\n delete atom.complexAtom;\r\n }\r\n }\r\n this._complex.originalCML = data.originalCML;\r\n this._fixBondsArray();\r\n complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n this._serialAtomMap = null;\r\n this._complex = null;\r\n return complex;\r\n }\r\n\r\n parseSync() {\r\n const complexes = [];\r\n const self = this;\r\n const moleculaSet = this._selectComponents(this._data);\r\n moleculaSet.forEach((molSet) => {\r\n molSet.curr = 2;\r\n if (molSet.count === 0) {\r\n molSet.count = 1;\r\n }\r\n for (let i = 0; i < molSet.count; i++) {\r\n molSet.curr = (i + 1);\r\n complexes.push(self._parseSet(molSet, false));\r\n }\r\n });\r\n\r\n let totalAtomsParsed = 0;\r\n complexes.forEach((c) => {\r\n totalAtomsParsed += c.getAtomCount();\r\n });\r\n if (totalAtomsParsed <= 0) {\r\n throw new Error('The data does not contain valid atoms');\r\n }\r\n\r\n if (complexes.length > 1) {\r\n const joinedComplex = new Complex();\r\n joinedComplex.joinComplexes(complexes);\r\n joinedComplex.originalCML = complexes[0].originalCML;\r\n return joinedComplex;\r\n }\r\n if (complexes.length === 1) {\r\n return complexes[0];\r\n }\r\n return new Complex();\r\n }\r\n}\r\n\r\nCMLParser.formats = ['cml'];\r\nCMLParser.extensions = ['.cml'];\r\n\r\nexport default CMLParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport MMTF from '../../../vendor/js/mmtf';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst {\r\n Complex,\r\n Chain,\r\n Atom,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Bond,\r\n Assembly,\r\n Molecule,\r\n} = chem;\r\n\r\nclass ArrayComparator {\r\n constructor(original) {\r\n this._original = Array.from(original);\r\n this._original.sort();\r\n\r\n this._sum = 0;\r\n for (let i = 0; i < this._original.length; ++i) {\r\n this._sum += this._original[i];\r\n }\r\n }\r\n\r\n compare(candidate) {\r\n const len = candidate.length;\r\n if (len !== this._original.length) {\r\n return false;\r\n }\r\n\r\n let sum = 0;\r\n let i;\r\n for (i = 0; i < len; ++i) {\r\n sum += candidate[i];\r\n }\r\n\r\n if (sum !== this._sum) {\r\n return false;\r\n }\r\n\r\n const sorted = Array.from(candidate);\r\n sorted.sort();\r\n\r\n for (i = 0; i < len; ++i) {\r\n if (sorted[i] !== this._original[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nArrayComparator.prototype.constructor = ArrayComparator;\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\n// see https://github.com/rcsb/mmtf-javascript/blob/master/src/mmtf-traverse.js\r\nconst secStructToType = [\r\n StructuralElementType.HELIX_PI, // 0\r\n StructuralElementType.BEND, // 1\r\n StructuralElementType.HELIX_ALPHA, // 2\r\n StructuralElementType.STRAND, // 3\r\n StructuralElementType.HELIX_310, // 4\r\n StructuralElementType.BRIDGE, // 5\r\n StructuralElementType.TURN, // 6\r\n StructuralElementType.COIL, // 7\r\n];\r\n\r\nfunction getFirstByte(buf) {\r\n const bytes = new Uint8Array(buf, 0, 1);\r\n return bytes[0];\r\n}\r\n\r\nclass MMTFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'mmtf';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n // check if it's binary MessagePack format containing a map (dictionary)\r\n // see https://github.com/msgpack/msgpack/blob/master/spec.md\r\n return _.isArrayBuffer(data) && ((getFirstByte(data) | 1) === 0xDF);\r\n }\r\n\r\n _onModel(_modelData) {\r\n }\r\n\r\n _onChain(chainData) {\r\n if (chainData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n const chain = new Chain(this._complex, chainData.chainName);\r\n this._complex._chains[chainData.chainIndex] = chain;\r\n chain._index = chainData.chainIndex;\r\n }\r\n\r\n _onGroup(groupData) {\r\n if (groupData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n if (this.settings.now.nowater) {\r\n // skip water\r\n if (groupData.groupName === 'HOH' || groupData.groupName === 'WAT') {\r\n return;\r\n }\r\n }\r\n\r\n const chain = this._complex._chains[groupData.chainIndex];\r\n const icode = !groupData.insCode.charCodeAt(0) ? '' : groupData.insCode;\r\n const residue = chain.addResidue(groupData.groupName, groupData.groupId, icode);\r\n residue._index = groupData.groupIndex;\r\n\r\n this._updateSecStructure(this._complex, residue, groupData);\r\n }\r\n\r\n _onAtom(atomData) {\r\n if (atomData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n const altLoc = !atomData.altLoc.charCodeAt(0) ? '' : atomData.altLoc;\r\n const atom = new Atom(\r\n atomData.groupIndex, // we store residue index here to replace it later with actual reference\r\n atomData.atomName,\r\n Element.getByName(atomData.element.toUpperCase()),\r\n new THREE.Vector3(atomData.xCoord, atomData.yCoord, atomData.zCoord),\r\n Element.Role[atomData.atomName],\r\n false, // hetero atoms will be marked later\r\n atomData.atomId,\r\n altLoc,\r\n atomData.occupancy,\r\n atomData.bFactor,\r\n atomData.formalCharge,\r\n );\r\n\r\n this._complex._atoms[atomData.atomIndex] = atom;\r\n atom.index = atomData.atomIndex;\r\n\r\n this._serialAtomMap[atomData.atomId] = atom;\r\n }\r\n\r\n _onBond(bondData) {\r\n const right = Math.max(bondData.atomIndex1, bondData.atomIndex2);\r\n if (right >= this._complex._atoms.length) {\r\n return;\r\n }\r\n const left = Math.min(bondData.atomIndex1, bondData.atomIndex2);\r\n this._complex.addBond(\r\n this._complex._atoms[left],\r\n this._complex._atoms[right],\r\n bondData.bondOrder,\r\n Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n\r\n _updateSecStructure(complex, residue, groupData) {\r\n const helixClasses = [3, -1, 1, -1, 5];\r\n\r\n if (!_.isUndefined(groupData) && groupData.secStruct === this._ssType) {\r\n residue._secondary = this._ssStruct;\r\n if (this._ssStruct) {\r\n this._ssStruct.term = residue;\r\n }\r\n return;\r\n }\r\n\r\n if (!_.isUndefined(groupData)) {\r\n // start new secondary structure\r\n const type = secStructToType[groupData.secStruct];\r\n this._ssType = groupData.secStruct;\r\n this._ssStart = residue;\r\n\r\n let struct = null;\r\n switch (this._ssType) {\r\n case -1: // undefined\r\n case 7: // coil\r\n break;\r\n case 0: // pi helix\r\n case 2: // alpha helix\r\n case 4: // 3-10 helix\r\n struct = new Helix(helixClasses[this._ssType], residue, residue, 0, '', '', 0);\r\n complex._helices.push(struct);\r\n break;\r\n case 3: { // extended\r\n const sheet = new Sheet('', 0);\r\n complex._sheets.push(sheet);\r\n struct = new Strand(sheet, residue, residue, 0, null, null);\r\n break;\r\n }\r\n default:\r\n if (type !== undefined) {\r\n struct = new StructuralElement(type, residue, residue);\r\n }\r\n break;\r\n }\r\n\r\n this._ssStruct = struct;\r\n residue._secondary = struct;\r\n if (struct) {\r\n complex.structures.push(struct);\r\n }\r\n }\r\n }\r\n\r\n _updateMolecules(mmtfData) {\r\n const entities = mmtfData.entityList;\r\n if (!entities) {\r\n return;\r\n }\r\n\r\n const chainsInModel0 = mmtfData.chainsPerModel[0];\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const chains = entity.chainIndexList;\r\n let residues = [];\r\n for (let j = 0; j < chains.length; j++) {\r\n const chainIndex = chains[j];\r\n // skip chains in models other than the first one\r\n if (chainIndex >= chainsInModel0) {\r\n continue;\r\n }\r\n const chain = this._complex._chains[chainIndex];\r\n residues = residues.concat(chain._residues.slice());\r\n }\r\n const molecule = new Molecule(this._complex, entity.description, i + 1);\r\n molecule.residues = residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n // populate complex with chains, residues and atoms\r\n _traverse(mmtfData) {\r\n const self = this;\r\n\r\n // get metadata\r\n const { metadata } = this._complex;\r\n metadata.id = mmtfData.structureId;\r\n metadata.title = [];\r\n metadata.title[0] = mmtfData.title;\r\n metadata.date = mmtfData.releaseDate;\r\n metadata.format = 'mmtf';\r\n\r\n // create event callback functions\r\n const eventCallbacks = {\r\n onModel(modelData) {\r\n self._onModel(modelData);\r\n },\r\n onChain(chainData) {\r\n self._onChain(chainData);\r\n },\r\n onGroup(groupData) {\r\n self._onGroup(groupData);\r\n },\r\n onAtom(atomData) {\r\n self._onAtom(atomData);\r\n },\r\n onBond(bondData) {\r\n self._onBond(bondData);\r\n },\r\n };\r\n\r\n // temporary variables used during traversal to track secondary structures\r\n this._ssType = -1;\r\n this._ssStruct = null;\r\n this._ssStart = null;\r\n\r\n // traverse the structure and listen to the events\r\n MMTF.traverse(mmtfData, eventCallbacks);\r\n\r\n this._updateSecStructure(this._complex);\r\n this._updateMolecules(mmtfData);\r\n }\r\n\r\n // During traversal atoms and residues don't come sequentially\r\n // so a residue for certain atom can be unavailable. Thus we\r\n // store residue index in atom.\r\n // This function being called after traversal replaces the index\r\n // with actual reference, and also populates atom lists in residues.\r\n _linkAtomsToResidues() {\r\n for (let i = 0; i < this._complex._atoms.length; ++i) {\r\n const atom = this._complex._atoms[i];\r\n const residue = this._complex._residues[atom.residue];\r\n atom.residue = residue;\r\n residue._atoms.push(atom);\r\n }\r\n }\r\n\r\n _findSynonymousChains() {\r\n const named = {};\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i];\r\n const name = chain.getName();\r\n if (!named.hasOwnProperty(name)) {\r\n named[name] = [];\r\n }\r\n\r\n named[name].push(chain._index);\r\n }\r\n\r\n return named;\r\n }\r\n\r\n // NOTE: This function relies on original chain indices, so it must be called before any magic happens to chains.\r\n _parseAssemblyInfo(mmtfData) {\r\n let i;\r\n let j;\r\n let k;\r\n const assemblies = [];\r\n const { logger } = this;\r\n\r\n for (i = 0; i < mmtfData.bioAssemblyList.length; ++i) {\r\n const baInfo = mmtfData.bioAssemblyList[i];\r\n if (baInfo.transformList.length === 0) {\r\n continue;\r\n }\r\n\r\n const chains = baInfo.transformList[0].chainIndexList;\r\n const chainListCheck = new ArrayComparator(chains);\r\n\r\n // build list of chain names\r\n const chainNames = {};\r\n for (j = 0; j < chains.length; ++j) {\r\n chainNames[this._complex._chains[chains[j]].getName()] = 1;\r\n }\r\n\r\n // all chains with the same name should belong to assembly if one of them belongs\r\n const allChains = [];\r\n let name;\r\n for (name in chainNames) {\r\n if (chainNames.hasOwnProperty(name)) {\r\n // just concat arrays -- there should be no duplicates\r\n Array.prototype.push.apply(allChains, this._chainsByName[name]);\r\n }\r\n }\r\n if (!chainListCheck.compare(allChains)) {\r\n // assembly is missing some of the chains\r\n logger.debug('MMTF: Assembly is missing some of the synonymous chains. Skipping...');\r\n }\r\n\r\n const a = new Assembly(this._complex);\r\n\r\n // add chains to assembly\r\n for (name in chainNames) {\r\n if (chainNames.hasOwnProperty(name)) {\r\n a.addChain(name);\r\n }\r\n }\r\n\r\n // add unique matrices to assembly\r\n a.addMatrix(new THREE.Matrix4().fromArray(baInfo.transformList[0].matrix).transpose());\r\n for (j = 1; j < baInfo.transformList.length; ++j) {\r\n const transform = baInfo.transformList[j];\r\n\r\n if (!chainListCheck.compare(transform.chainIndexList)) {\r\n // list of chains for this transform doesn't match that for other transforms\r\n // this is illegal in our structure\r\n logger.debug('MMTF: Chain lists differ for different transforms in one assembly. Skipping...');\r\n continue;\r\n }\r\n\r\n const m = new THREE.Matrix4().fromArray(transform.matrix).transpose();\r\n\r\n // check if matrix is already in the list\r\n for (k = 0; k < a.matrices.length; ++k) {\r\n if (a.matrices[k].equals(m)) {\r\n break;\r\n }\r\n }\r\n\r\n if (k === a.matrices.length) {\r\n a.addMatrix(m);\r\n }\r\n }\r\n\r\n a.finalize();\r\n assemblies.push(a);\r\n }\r\n\r\n return assemblies;\r\n }\r\n\r\n // NOTE: This function relies on original chain indices, so it must be called before any magic happens to chains.\r\n _markHeteroAtoms(mmtfData) {\r\n const chainsInModel0 = mmtfData.chainsPerModel[0];\r\n for (let i = 0; i < mmtfData.entityList.length; ++i) {\r\n const entity = mmtfData.entityList[i];\r\n if (entity.type !== 'polymer') {\r\n for (let j = 0; j < entity.chainIndexList.length; ++j) {\r\n const chainIndex = entity.chainIndexList[j];\r\n // skip chains in models other than the first one\r\n if (chainIndex >= chainsInModel0) {\r\n continue;\r\n }\r\n const chain = this._complex._chains[chainIndex];\r\n for (let k = 0; k < chain._residues.length; ++k) {\r\n const res = chain._residues[k];\r\n for (let m = 0; m < res._atoms.length; ++m) {\r\n res._atoms[m].het = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // joins chains with the same name into single chain\r\n _joinSynonymousChains() {\r\n let i;\r\n let j;\r\n\r\n const primaryChainsArray = [];\r\n const primaryChainsHash = {};\r\n\r\n // join chains\r\n for (i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i];\r\n const name = chain.getName();\r\n if (!primaryChainsHash.hasOwnProperty(name)) {\r\n // new name -- this is a primary chain\r\n primaryChainsHash[name] = chain;\r\n chain._index = primaryChainsArray.length; // update index as this array will later replace original chain list\r\n primaryChainsArray.push(chain);\r\n continue;\r\n }\r\n\r\n // this chain should be joined with the primary chain of the same name\r\n const primary = primaryChainsHash[name];\r\n for (j = 0; j < chain._residues.length; ++j) {\r\n const residue = chain._residues[j];\r\n primary._residues.push(residue);\r\n residue._chain = primary;\r\n }\r\n }\r\n\r\n // replace chains list with one containing only primary chains\r\n // dropping references to all chains but primary\r\n this._complex._chains = primaryChainsArray;\r\n }\r\n\r\n parseSync() {\r\n const mmtfData = MMTF.decode(this._data);\r\n\r\n this._complex = new Complex();\r\n this._serialAtomMap = {}; // filled during traversal\r\n\r\n this._traverse(mmtfData);\r\n this._linkAtomsToResidues();\r\n this._markHeteroAtoms(mmtfData);\r\n this._chainsByName = this._findSynonymousChains();\r\n Array.prototype.push.apply(this._complex.units, this._parseAssemblyInfo(mmtfData));\r\n this._joinSynonymousChains();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n\r\n return this._complex;\r\n }\r\n}\r\n\r\nMMTFParser.formats = ['mmtf'];\r\nMMTFParser.extensions = ['.mmtf'];\r\nMMTFParser.binary = true;\r\n\r\nexport default MMTFParser;\r\n","class ParsingError extends Error {\r\n constructor(message, line, column) {\r\n super(`data:${line}:${column}: ${message}`);\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, ParsingError);\r\n }\r\n\r\n this.name = 'ParsingError';\r\n this.parseLine = line;\r\n this.parseColumn = column;\r\n }\r\n}\r\n\r\nexport default ParsingError;\r\n","import _ from 'lodash';\r\nimport ParsingError from './ParsingError';\r\n\r\n// Implemented and being tested against: https://www.iucr.org/resources/cif/spec/version1.1/cifsyntax\r\n\r\nfunction _isWhitespace(ch) {\r\n return ch === 32 || ch === 10 || ch === 13 || ch === 9;\r\n}\r\n\r\nfunction _inlineIndexOf(ch0, str, idx) {\r\n const len = str.length;\r\n let ch = -1;\r\n while (idx < len) {\r\n ch = str.charCodeAt(idx);\r\n if (ch === ch0 || ch === 10) {\r\n break;\r\n }\r\n ++idx;\r\n }\r\n return ch === ch0 ? idx : -1;\r\n}\r\n\r\nexport default function readCIF(source) {\r\n let i = 0;\r\n let j = 0;\r\n const n = source.length;\r\n let code = NaN;\r\n let newline = true;\r\n let line = 1;\r\n let column = 1;\r\n let begin;\r\n let state = 0; // 0 - start, 1 - block, 2 - item, 3 - loop, 4 - values, 5 - value\r\n const result = {};\r\n let block = {};\r\n let keys = [];\r\n let keysCount = 0;\r\n let key = '';\r\n let values = [];\r\n let valuesCount = 0;\r\n let value;\r\n\r\n function _parseValue() {\r\n let val;\r\n if ((code === 46 || code === 63) && (i + 1 >= n || _isWhitespace(source.charCodeAt(i + 1)))) { // '.' or '?' .....\r\n // it's a missing value\r\n ++column;\r\n ++i;\r\n return undefined;\r\n }\r\n if (newline && code === 59) { // ';' ......................................................................\r\n // parse multi-line string\r\n j = i;\r\n let lines = 0;\r\n do {\r\n j = _inlineIndexOf(10, source, j + 1); // '\\n'\r\n if (j === -1) {\r\n throw new ParsingError('Unterminated text block found', line, column);\r\n }\r\n ++lines;\r\n } while ((j + 1 < n && source.charCodeAt(j + 1) !== code) || j + 1 >= n);\r\n val = source.substring(i + 1, j).replace(/\\r/g, '');\r\n i = j + 2;\r\n line += lines;\r\n column = 1;\r\n newline = false;\r\n return val;\r\n }\r\n if (code === 39 || code === 34) { // ''' or '\"' ...........................................................\r\n // parse quoted string\r\n j = i;\r\n do {\r\n j = _inlineIndexOf(code, source, j + 1);\r\n if (j === -1) {\r\n throw new ParsingError('Unterminated quoted string found', line, column);\r\n }\r\n } while (j + 1 < n && !_isWhitespace(source.charCodeAt(j + 1)));\r\n val = source.substring(i + 1, j);\r\n column += j - i + 1;\r\n i = j + 1;\r\n return val;\r\n } // ......................................................................................................\r\n // parse until the first whitespace\r\n j = i;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n val = source.substring(i, j);\r\n column += j - i;\r\n i = j;\r\n // try to convert to a number\r\n const num = Number(val);\r\n if (!Number.isNaN(num)) {\r\n return num;\r\n }\r\n // or leave as an unquoted string\r\n return val;\r\n }\r\n\r\n function _storeKey(tag) {\r\n keys[keysCount++] = tag;\r\n }\r\n\r\n function _storeValue(val) {\r\n const keyIndex = valuesCount % keysCount;\r\n values[keyIndex].push(val);\r\n ++valuesCount;\r\n return val;\r\n }\r\n\r\n while (i <= n) {\r\n code = source.charCodeAt(i); // 'NaN' in place of ''\r\n if (code === 13) { // '\\r' .......................................................................................\r\n // just ignore\r\n } else if (code === 10) { // '\\n' ................................................................................\r\n // take note of new lines\r\n newline = true;\r\n ++line;\r\n column = 1;\r\n } else {\r\n // process inline characters\r\n if (code === 32 || code === 9) { // ' ' or '\\t' ................................................................\r\n // just ignore\r\n } else if (code === 35) { // '#' ...............................................................................\r\n // skip the comment until before the end of the line\r\n i = _inlineIndexOf(10, source, i + 1); // '\\n'\r\n if (i === -1) {\r\n break;\r\n } else {\r\n continue; // don't forget to process the new line\r\n }\r\n } else if (state === 0) { // start =============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n j = i + 5;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // add new data block\r\n result[source.substring(begin, i)] = block = {};\r\n state = 1; // block\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Data block name missing', line, column);\r\n }\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n break;\r\n } else { // ..................................................................................................\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n }\r\n } else if (state === 1) { // block =============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n state = 0; // start\r\n continue; // parse again in a different state\r\n } else if (code === 95) { // '_' .............................................................................\r\n j = i + 1;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // start new item\r\n key = source.substring(begin, i);\r\n state = 2; // item\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Tag name missing', line, column);\r\n }\r\n } else if ((code === 76 || code === 108) && source.substr(i + 1, 4).toLowerCase() === 'oop_') { // 'loop_' ...\r\n i += 5;\r\n column += 5;\r\n if (i < n && !_isWhitespace(source.charCodeAt(i))) {\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n } else {\r\n // start new loop\r\n keys = [];\r\n keysCount = 0;\r\n values = [];\r\n valuesCount = 0;\r\n state = 3; // loop\r\n continue; // don't forget to process the whitespace\r\n }\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n break;\r\n } else { // ..................................................................................................\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n }\r\n } else if (state === 2) { // item ==============================================================================\r\n if (Number.isNaN(code)) {\r\n break;\r\n }\r\n value = _parseValue();\r\n _.set(block, key, value);\r\n state = 1; // block\r\n continue;\r\n } else if (state === 3) { // loop ==============================================================================\r\n if (code === 95) { // '_' ....................................................................................\r\n j = i + 1;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // add new key\r\n _storeKey(source.substring(begin, i));\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Tag name missing', line, column);\r\n }\r\n } else { // ..................................................................................................\r\n if (keysCount > 0) {\r\n for (let keyIndex = 0; keyIndex < keysCount; ++keyIndex) {\r\n value = [];\r\n values[keyIndex] = value;\r\n _.set(block, keys[keyIndex], value);\r\n }\r\n state = 4;\r\n continue; // parse again in a different state\r\n }\r\n throw new ParsingError('Data tags are missing inside a loop', line, column);\r\n }\r\n } else if (state === 4) { // values ============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n state = 0; // start\r\n } else if (code === 95) { // '_' .............................................................................\r\n state = 1; // block\r\n } else if ((code === 76 || code === 108) && source.substr(i + 1, 4).toLowerCase() === 'oop_') { // 'loop_' ...\r\n state = 1; // block\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n state = 0;\r\n } else { // ..................................................................................................\r\n _storeValue(_parseValue());\r\n }\r\n continue; // parse again in a different state\r\n } else { // ====================================================================================================\r\n throw new ParsingError(`Unexpected internal state ${state}`, line, column);\r\n }\r\n\r\n newline = false;\r\n ++column;\r\n }\r\n ++i;\r\n }\r\n\r\n if (state === 2) { // item\r\n throw new ParsingError(`Unexpected end of file in state ${state}`, line, column);\r\n }\r\n\r\n return result;\r\n}\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\nimport readCIF from './readCIF';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Assembly,\r\n Molecule,\r\n} = chem;\r\n\r\nconst cRequiredAtomFields = [\r\n 'auth_seq_id',\r\n 'Cartn_x',\r\n 'Cartn_y',\r\n 'Cartn_z',\r\n 'label_atom_id',\r\n];\r\n\r\nconst cSecondaryCoding = {\r\n helx: 'helix',\r\n turn: 'turn',\r\n strn: 'strand',\r\n};\r\n\r\nfunction getTypeFromId(string) {\r\n const typeId = /[A-Za-z]+/.exec(string);\r\n if (!typeId) {\r\n return null;\r\n }\r\n\r\n return cSecondaryCoding[typeId[0].toLowerCase()];\r\n}\r\n\r\n/**\r\n * Make valid object an array\r\n * @param arrayLikeObject\r\n * @return {array, object} array or object\r\n */\r\nfunction arrize(arrayLikeObject) {\r\n if (arrayLikeObject === null || arrayLikeObject === undefined || _.isArray(arrayLikeObject)) {\r\n return arrayLikeObject;\r\n }\r\n return [arrayLikeObject];\r\n}\r\n\r\nfunction nameToElement(name) {\r\n // http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM\r\n //\r\n // http://www.cgl.ucsf.edu/chimera/docs/UsersGuide/tutorials/pdbintro.html#note1\r\n //\r\n // Atom names start with element symbols right-justified in columns 13-14\r\n // as permitted by the length of the name. For example, the symbol FE for\r\n // iron appears in columns 13-14, whereas the symbol C for carbon appears\r\n // in column 14 (see Misaligned Atom Names). If an atom name has four\r\n // characters, however, it must start in column 13 even if the element\r\n // symbol is a single character (for example, see Hydrogen Atoms).\r\n\r\n const veryLong = name.trim().length === 4;\r\n return name.slice(0, veryLong ? 1 : 2).trim();\r\n}\r\n\r\nclass AtomDataError extends Error {\r\n constructor(message) {\r\n super();\r\n this.name = 'AtomDataError';\r\n this.message = message;\r\n }\r\n}\r\n\r\nfunction _getOperations(operList) {\r\n if (!operList) {\r\n return null;\r\n }\r\n const idc = arrize(operList.id);\r\n const { matrix, vector } = operList;\r\n if (!idc || !matrix || !vector) {\r\n return null;\r\n }\r\n\r\n const ops = [];\r\n for (let i = 0, n = idc.length; i < n; ++i) {\r\n const mtx = new THREE.Matrix4();\r\n const { elements } = mtx;\r\n\r\n for (let row = 0; row < 3; ++row) {\r\n const matrixData = matrix[row + 1];\r\n elements[row] = arrize(matrixData[1])[i];\r\n elements[row + 4] = arrize(matrixData[2])[i];\r\n elements[row + 8] = arrize(matrixData[3])[i];\r\n elements[row + 12] = arrize(vector[row + 1])[i];\r\n }\r\n ops[idc[i]] = mtx;\r\n }\r\n return ops;\r\n}\r\n\r\nfunction _extractOperations(assemblyGen, opsDict) {\r\n assemblyGen = _.isString(assemblyGen) ? assemblyGen : `${assemblyGen}`;\r\n const l = assemblyGen.replace(/\\)\\s*\\(/g, '!').replace(/[()']/g, '');\r\n const groupStr = l.split('!');\r\n const gps = [];\r\n\r\n for (let grIdx = 0, grCount = groupStr.length; grIdx < grCount; ++grIdx) {\r\n const gr = groupStr[grIdx].split(',');\r\n const gp = [];\r\n let idx = 0;\r\n for (let i = 0, n = gr.length; i < n; ++i) {\r\n const s = gr[i];\r\n if (s.includes('-')) {\r\n const es = s.split('-');\r\n let j = parseInt(es[0], 10);\r\n const m = parseInt(es[1], 10);\r\n for (; j <= m; ++j) {\r\n gp[idx++] = opsDict[j];\r\n }\r\n } else {\r\n gp[idx++] = opsDict[s];\r\n }\r\n }\r\n gps.push(gp);\r\n }\r\n\r\n // traverse all groups from the end of array and make all mults\r\n const matrices = [];\r\n let cnt = 0;\r\n function traverse(level, mtx) {\r\n for (let ii = 0, nn = gps[level].length; ii < nn; ++ii) {\r\n const newMtx = mtx ? mtx.clone() : new THREE.Matrix4();\r\n newMtx.multiplyMatrices(gps[level][ii], newMtx);\r\n if (level === 0) {\r\n matrices[cnt++] = newMtx;\r\n } else {\r\n traverse(level - 1, newMtx);\r\n }\r\n }\r\n }\r\n traverse(gps.length - 1);\r\n return matrices;\r\n}\r\n\r\nclass CIFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this.asymDict = {};\r\n this.molecules = [];\r\n this._options.fileType = 'cif';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && /^\\s*data_/i.test(data);\r\n }\r\n\r\n parseSync() {\r\n this.logger.info('Parsing CIF file..');\r\n const data = readCIF(this._data);\r\n return this._toComplex(data);\r\n }\r\n\r\n /**\r\n * Convert intermediate structure into our valid Complex object\r\n * @param cifData intermediate CIF object\r\n * @returns {Complex} complex\r\n * @private\r\n */\r\n _toComplex(cifData) {\r\n const complex = new Complex();\r\n const complexData = cifData[Object.keys(cifData)[0]];\r\n this._extractAtoms(complex, complexData);\r\n this._extractSecondary(complex, complexData);\r\n this._extractAssemblies(complex, complexData);\r\n this._extractMolecules(complex, complexData);\r\n this._extractMetadata(complex, complexData);\r\n complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n });\r\n\r\n return complex;\r\n }\r\n\r\n /**\r\n * Extract metadata\r\n * @param complex structure to fill\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n\r\n _extractMetadata(complex, complexData) {\r\n const { metadata } = complex;\r\n metadata.id = complexData.entry.id;\r\n metadata.classification = complexData.struct_keywords.pdbx_keywords;\r\n const databaserev = complexData.database_PDB_rev;\r\n metadata.date = (databaserev && databaserev.date_original) ? databaserev.date_original : '';\r\n metadata.format = 'cif';\r\n metadata.title = [];\r\n metadata.title[0] = complexData.struct.title;\r\n }\r\n\r\n /**\r\n * Extract molecules information from CIF structure (should be called strictly after _extractAtoms)\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractMolecules(complex, complexData) {\r\n const molData = complexData.entity;\r\n const names = arrize(molData.pdbx_description);\r\n const count = names.length;\r\n let i;\r\n\r\n // molecules names from cif\r\n for (i = 0; i < count; i++) {\r\n if (this.molecules[i]) { // molecule was created during atoms processing\r\n this.molecules[i].name = names[i];\r\n } else { // molecule wasn't created, because there is no atom which is contained\r\n this.molecules[i] = { name: names[i], residues: [] };\r\n }\r\n }\r\n\r\n // reorganize molecules for complex and check chains\r\n const molecules = complex.getMolecules();\r\n for (i = 0; i < count; i++) {\r\n const molecule = this.molecules[i];\r\n molecules[i] = new Molecule(complex, molecule.name, i + 1);\r\n molecules[i].residues = molecule.residues;\r\n }\r\n }\r\n\r\n /**\r\n * Extract atom information from CIF structure and fill complex\r\n * @param {Complex} complex\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractAtoms(complex, complexData) {\r\n const atomData = complexData.atom_site;\r\n if (!atomData) {\r\n throw new AtomDataError('CIF parsing error: atom_site is not specified!');\r\n }\r\n\r\n for (let f = 0, n = cRequiredAtomFields.length; f < n; ++f) {\r\n if (!atomData[cRequiredAtomFields[f]]) {\r\n throw new AtomDataError(`CIF parsing error: requires field ${cRequiredAtomFields[f]} not found!`);\r\n }\r\n }\r\n\r\n const { asymDict } = this;\r\n // required fields\r\n const resIdc = arrize(atomData.auth_seq_id);\r\n const x = arrize(atomData.Cartn_x);\r\n const y = arrize(atomData.Cartn_y);\r\n const z = arrize(atomData.Cartn_z);\r\n const names = arrize(atomData.label_atom_id);\r\n const count = names.length;\r\n // optional fields\r\n const group = arrize(atomData.group_PDB) || [];\r\n const chainIdc = arrize(atomData.auth_asym_id) || [];\r\n const chainLabelIdc = arrize(atomData.label_asym_id) || [];\r\n const serials = arrize(atomData.id) || [];\r\n const iCodes = arrize(atomData.pdbx_PDB_ins_code) || [];\r\n const resNames = arrize(atomData.label_comp_id) || [];\r\n const elements = arrize(atomData.type_symbol) || [];\r\n const tempFactors = arrize(atomData.B_iso_or_equiv) || [];\r\n const occupancies = arrize(atomData.occupancy) || [];\r\n const charges = arrize(atomData.pdbx_formal_charge) || [];\r\n const altLocs = arrize(atomData.label_alt_id) || [];\r\n const models = arrize(atomData.pdbx_PDB_model_num) || [];\r\n const molecules = arrize(atomData.label_entity_id) || [];\r\n\r\n let chain = null;\r\n let residue = null;\r\n for (let i = 0; i < count; ++i) {\r\n const model = models[i] || 1;\r\n if (model !== 1) {\r\n continue;\r\n }\r\n const chainID = String(chainIdc[i] || ' ');\r\n\r\n if (!chain || chain.getName() !== chainID) {\r\n chain = complex.getChain(chainID) || complex.addChain(chainID);\r\n }\r\n asymDict[String(chainLabelIdc[i] || ' ')] = chainID;\r\n const resSeq = resIdc[i];\r\n const iCode = String(iCodes[i] || ' ');\r\n const resName = String(resNames[i] || '');\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n residue = chain.addResidue(resName, resSeq, iCode);\r\n\r\n // store residue in appropriate molecule\r\n const moleculeIdx = molecules[i] - 1;\r\n let entity = this.molecules[moleculeIdx];\r\n if (!entity) { // create new molecule if it hasn't been created\r\n this.molecules[moleculeIdx] = { name: '', residues: [] };\r\n entity = this.molecules[moleculeIdx];\r\n }\r\n entity.residues.push(residue);\r\n }\r\n\r\n const name = names[i];\r\n const element = elements[i] || nameToElement(name);\r\n const type = Element.getByName(element);\r\n const role = Element.Role[name.trim()];\r\n const xyz = new THREE.Vector3(x[i], y[i], z[i]);\r\n const het = group[i] === 'HETATM' || false;\r\n const serial = serials[i] || i;\r\n const tempFactor = tempFactors[i] || 0.0;\r\n const occupancy = occupancies[i] || 0.0;\r\n const altLoc = String(altLocs[i] || '');\r\n const charge = charges[i] || 0;\r\n\r\n residue.addAtom(\r\n name,\r\n type,\r\n xyz,\r\n role,\r\n het,\r\n serial,\r\n altLoc,\r\n occupancy,\r\n tempFactor,\r\n charge,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Extracts secondary structure information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex - complex to fill\r\n * @param complexData - CIF complex data\r\n * @private\r\n */\r\n _extractSecondary(complex, complexData) {\r\n if (complexData.struct_conf) {\r\n this._extractConfs(complex, complexData.struct_conf);\r\n }\r\n if (complexData.struct_sheet_range) {\r\n this._extractSheets(complex, complexData.struct_sheet_range);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts sheets information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex\r\n * @param sheetData\r\n * @private\r\n */\r\n _extractSheets(complex, sheetData) {\r\n const { asymDict } = this;\r\n if (!sheetData.sheet_id || !sheetData.id || !sheetData.beg_label_seq_id || !sheetData.end_label_seq_id\r\n || !sheetData.beg_label_asym_id) {\r\n return;\r\n }\r\n // Strand(sheet, start, end, sense, cur, prev)\r\n const sheets = complex._sheets;\r\n\r\n function getSheet(name) {\r\n const n = sheets.length;\r\n for (let i = 0; i < n; ++i) {\r\n if (sheets[i]._name === name) {\r\n return sheets[i];\r\n }\r\n }\r\n sheets[n] = new Sheet(name, 0);\r\n return sheets[n];\r\n }\r\n\r\n const sheetNames = arrize(sheetData.sheet_id);\r\n const strandNames = arrize(sheetData.id);\r\n const starts = arrize(sheetData.beg_auth_seq_id);\r\n const ends = arrize(sheetData.end_auth_seq_id);\r\n const chains = arrize(sheetData.beg_label_asym_id);\r\n const stICodes = arrize(sheetData.pdbx_beg_PDB_ins_code) || [];\r\n const endICodes = arrize(sheetData.pdbx_end_PDB_ins_code) || [];\r\n\r\n for (let i = 0, n = strandNames.length; i < n; ++i) {\r\n const chain = complex.getChain(asymDict[chains[i]]);\r\n const sheet = getSheet(sheetNames[i]);\r\n const startIdx = starts[i];\r\n const endIdx = ends[i];\r\n const startICode = stICodes[i] || ' ';\r\n const endICode = endICodes[i] || ' ';\r\n\r\n const start = chain.findResidue(startIdx, startICode);\r\n const end = chain.findResidue(endIdx, endICode);\r\n\r\n // TODO think about last condition\r\n if (!start || !end) {\r\n continue;\r\n }\r\n\r\n const strand = new Strand(sheet, start[0], end[0], 0, null, null);\r\n const residues = chain.getResidues();\r\n for (let r = start[1]; r <= end[1]; ++r) {\r\n residues[r]._secondary = strand;\r\n }\r\n sheet.addStrand(strand);\r\n complex.structures.push(strand);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts helix/turn/strand(?) information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex\r\n * @param helicesData\r\n * @private\r\n */\r\n _extractConfs(complex, helicesData) {\r\n const { asymDict } = this;\r\n if (!helicesData.conf_type_id || !helicesData.beg_label_seq_id || !helicesData.end_label_seq_id\r\n || !helicesData.beg_label_asym_id) {\r\n return;\r\n }\r\n\r\n const types = arrize(helicesData.conf_type_id);\r\n const starts = arrize(helicesData.beg_auth_seq_id);\r\n const stICodes = arrize(helicesData.pdbx_beg_PDB_ins_code) || [];\r\n const ends = arrize(helicesData.end_auth_seq_id);\r\n const endICodes = arrize(helicesData.pdbx_end_PDB_ins_code) || [];\r\n const comments = arrize(helicesData.details) || [];\r\n const lengths = arrize(helicesData.pdbx_PDB_helix_length) || [];\r\n const helixClasses = arrize(helicesData.pdbx_PDB_helix_class) || [];\r\n const names = arrize(helicesData.id) || [];\r\n const chains = arrize(helicesData.beg_label_asym_id);\r\n\r\n for (let i = 0, n = types.length; i < n; ++i) {\r\n const type = getTypeFromId(types[i]);\r\n if (!type) {\r\n continue;\r\n }\r\n const name = names[i] || types[i];\r\n const chain = complex.getChain(asymDict[chains[i]]);\r\n\r\n const startIdx = starts[i];\r\n const endIdx = ends[i];\r\n const startICode = stICodes[i] || ' ';\r\n const endICode = endICodes[i] || ' ';\r\n\r\n const start = chain.findResidue(startIdx, startICode);\r\n const end = chain.findResidue(endIdx, endICode);\r\n\r\n // TODO think about last condition\r\n if (!start || !end) {\r\n continue;\r\n }\r\n const comment = comments[i] || '';\r\n const length = lengths[i] || 0;\r\n const helixClass = helixClasses[i] || ' ';\r\n let struct;\r\n if (type === 'helix') {\r\n const idx = complex._helices.length;\r\n struct = new Helix(helixClass, start[0], end[0], idx, name, comment, length);\r\n complex.addHelix(struct);\r\n complex.structures.push(struct);\r\n } else if (type === 'turn') {\r\n struct = new StructuralElement(StructuralElement.Type.TURN, start[0], end[0]);\r\n complex.structures.push(struct);\r\n } else {\r\n struct = null;\r\n }\r\n if (!struct) {\r\n continue;\r\n }\r\n const residues = chain.getResidues();\r\n for (let r = start[1]; r <= end[1]; ++r) {\r\n residues[r]._secondary = struct;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Extract biological assemblies information from CIF structure and fill complex\r\n * @param {Complex} complex\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractAssemblies(complex, complexData) {\r\n const { asymDict } = this;\r\n const asmGen = complexData.pdbx_struct_assembly_gen;\r\n if (!asmGen) {\r\n return;\r\n }\r\n\r\n const asmIdx = arrize(asmGen.assembly_id);\r\n const asmOper = arrize(asmGen.oper_expression);\r\n const asmList = arrize(asmGen.asym_id_list);\r\n if (!asmIdx || !asmOper || !asmList) {\r\n return;\r\n }\r\n\r\n const operList = _getOperations(complexData.pdbx_struct_oper_list);\r\n if (!operList) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = asmIdx.length; i < n; ++i) {\r\n const asm = new Assembly(complex);\r\n const assemblyOps = _extractOperations(asmOper[i], operList);\r\n const entries = asmList[i].split(',');\r\n for (let ii = 0, nn = entries.length; ii < nn; ++ii) {\r\n const chain = entries[ii].trim();\r\n if (chain.length > 0) {\r\n asm.addChain(asymDict[chain]);\r\n }\r\n }\r\n asm.matrices = assemblyOps;\r\n complex.units.push(asm);\r\n }\r\n }\r\n}\r\n\r\nCIFParser.formats = ['cif', 'mmcif'];\r\nCIFParser.extensions = ['.cif', '.mmcif'];\r\n\r\nexport default CIFParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Volume from '../../chem/Volume';\r\n\r\nexport const valueType = {\r\n singular: 0,\r\n vector: 1,\r\n array: 2,\r\n buffer: 3,\r\n};\r\n\r\nclass VolumeModel {\r\n _xyz2crs = [];\r\n\r\n _origin = new THREE.Vector3(0, 0, 0);\r\n\r\n constructor() {\r\n this._header = {};\r\n this._boxSize = new THREE.Vector3();\r\n this._boxStart = new THREE.Vector3();\r\n this._header.delta = {};\r\n this._header.extent = [];\r\n this._header.nstart = [];\r\n this._header.grid = [];\r\n this._header.crs2xyz = [];\r\n this._header.cellDims = new THREE.Vector3();\r\n this._header.angles = [];\r\n this._header.origin = new THREE.Vector3(0, 0, 0);\r\n this._header.dmin = 0;\r\n this._header.dmean = 0;\r\n this._header.dmax = 0;\r\n }\r\n\r\n _typedCheck() {\r\n if (_.isTypedArray(this._buff)) {\r\n this._buff = this._buff.buffer;\r\n } else if (!_.isArrayBuffer(this._buff)) {\r\n throw new TypeError('Expected ArrayBuffer or TypedArray');\r\n }\r\n }\r\n\r\n _fillHeader(headerFormat, arrays) {\r\n for (const key in headerFormat) {\r\n if (headerFormat.hasOwnProperty(key)) {\r\n switch (headerFormat[key][0]) {\r\n case valueType.singular:\r\n this._header[key] = arrays[headerFormat[key][1]][headerFormat[key][2]];\r\n break;\r\n\r\n case valueType.array:\r\n this._parseArray(this._header[key], arrays[headerFormat[key][1]], headerFormat[key][2]);\r\n break;\r\n\r\n case valueType.vector:\r\n this._parseVector(this._header[key], arrays[headerFormat[key][1]], headerFormat[key][2]);\r\n break;\r\n\r\n case valueType.buffer:\r\n this._header[key] = new Uint8Array(\r\n arrays[headerFormat[key][1]],\r\n [headerFormat[key][2]] * 4,\r\n [headerFormat[key][3]] * 4,\r\n );\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _parseVector(vector, arr, pos) {\r\n [vector.x, vector.y, vector.z] = [arr[pos], arr[pos + 1], arr[pos + 2]];\r\n }\r\n\r\n _parseArray(vector, arr, pos) {\r\n vector[0] = arr[pos];\r\n vector[1] = arr[pos + 1];\r\n vector[2] = arr[pos + 2];\r\n }\r\n\r\n _parseHeader(_buffer) {}\r\n\r\n _setAxisIndices() {}\r\n\r\n _setOrigins() {}\r\n\r\n _getAxis() {\r\n const header = this._header;\r\n\r\n const xScale = header.cellDims.x / header.grid[0];\r\n const yScale = header.cellDims.y / header.grid[1];\r\n const zScale = header.cellDims.z / header.grid[2];\r\n\r\n const [alpha, beta, gamma] = header.angles;\r\n\r\n const z1 = Math.cos(beta);\r\n const z2 = (Math.cos(alpha) - Math.cos(beta)\r\n * Math.cos(gamma)) / Math.sin(gamma);\r\n const z3 = Math.sqrt(1.0 - z1 * z1 - z2 * z2);\r\n\r\n const xaxis = new THREE.Vector3(xScale, 0, 0);\r\n const yaxis = new THREE.Vector3(Math.cos(gamma) * yScale, Math.sin(gamma) * yScale, 0);\r\n const zaxis = new THREE.Vector3(z1 * zScale, z2 * zScale, z3 * zScale);\r\n\r\n return [xaxis, yaxis, zaxis];\r\n }\r\n\r\n _getXYZdim() {\r\n return [this._header.extent[this._xyz2crs[0]],\r\n this._header.extent[this._xyz2crs[1]],\r\n this._header.extent[this._xyz2crs[2]]];\r\n }\r\n\r\n _getVolumeInfo() {\r\n const volInfo = _.pick(this._header, ['dmean', 'dmin', 'dmax', 'sd', 'delta']);\r\n volInfo.obtuseAngle = this._header.angles.map((angle) => Number(angle >= (Math.PI / 2)));\r\n return volInfo;\r\n }\r\n\r\n _setBoxParams(xaxis, yaxis, zaxis) {\r\n // if axes are not orthogonal, the origins might not match with box coordinates - need to make shift\r\n let shiftX = 0;\r\n let shiftY = 0;\r\n const [alpha, beta, gamma] = this._header.angles;\r\n\r\n if (gamma >= Math.PI / 2) {\r\n shiftX += Math.abs(yaxis.x);\r\n }\r\n if (beta >= Math.PI / 2) {\r\n shiftX += Math.abs(zaxis.x);\r\n }\r\n if (alpha >= Math.PI / 2) {\r\n shiftY += Math.abs(zaxis.y);\r\n }\r\n\r\n this._boxStart = new THREE.Vector3(this._origin.x - shiftX, this._origin.y - shiftY, this._origin.z);\r\n this._boxSize = new THREE.Vector3(\r\n Math.abs(xaxis.x) + Math.abs(yaxis.x) + Math.abs(zaxis.x),\r\n Math.abs(yaxis.y) + Math.abs(zaxis.y),\r\n Math.abs(zaxis.z),\r\n );\r\n\r\n const delta = (axe, proj) => (Math.abs(axe[proj]) / this._boxSize[proj]);\r\n this._header.delta.x = delta(yaxis, 'x');\r\n this._header.delta.y = delta(zaxis, 'x');\r\n this._header.delta.z = delta(zaxis, 'y');\r\n }\r\n\r\n _getXYZbox() {\r\n return new THREE.Box3(this._boxStart.clone(), this._boxStart.clone().add(this._boxSize));\r\n }\r\n\r\n _toXYZData() {}\r\n\r\n parse(data) {\r\n this._parseHeader(data);\r\n this._setOrigins();\r\n return new Volume(Float32Array, this._getXYZdim(), this._getXYZbox(), 1, this._toXYZData(), this._getVolumeInfo());\r\n }\r\n}\r\n\r\nexport default VolumeModel;\r\n","import Parser from './Parser';\r\nimport VolumeModel, { valueType } from './VolumeModel';\r\n\r\nconst CCP4Header = {\r\n extent: [valueType.array, 'u32', 0],\r\n type: [valueType.singular, 'u32', 3],\r\n nstart: [valueType.array, 'i32', 4],\r\n grid: [valueType.array, 'u32', 7],\r\n cellDims: [valueType.vector, 'f32', 10],\r\n angles: [valueType.array, 'f32', 13],\r\n crs2xyz: [valueType.array, 'i32', 16],\r\n dmin: [valueType.singular, 'f32', 19],\r\n dmax: [valueType.singular, 'f32', 20],\r\n dmean: [valueType.singular, 'f32', 21],\r\n ispg: [valueType.singular, 'u32', 22],\r\n nsymbt: [valueType.singular, 'u32', 23],\r\n lksflg: [valueType.singular, 'u32', 24],\r\n customData: [valueType.buffer, 'buffer', 25, 9],\r\n origin: [valueType.vector, 'f32', 34],\r\n map: [valueType.buffer, 'buffer', 52, 1],\r\n machine: [valueType.singular, 'u32', 53],\r\n sd: [valueType.singular, 'f32', 54],\r\n nlabel: [valueType.singular, 'f32', 55],\r\n label: [valueType.buffer, 'buffer', 56, 200],\r\n};\r\n\r\nclass Ccp4Model extends VolumeModel {\r\n // read header (http://www.ccp4.ac.uk/html/maplib.html)\r\n _parseHeader(_buffer) {\r\n this._buff = _buffer;\r\n this._typedCheck();\r\n const arrays = {};\r\n arrays.u32 = new Uint32Array(this._buff, 0, 56);\r\n arrays.i32 = new Int32Array(this._buff, 0, 56);\r\n arrays.f32 = new Float32Array(this._buff, 0, 56);\r\n arrays.buffer = this._buff;\r\n const header = this._header;\r\n\r\n this._fillHeader(CCP4Header, arrays);\r\n\r\n // calculate non-orthogonal unit cell coordinates\r\n header.angles.forEach((angle, i, a) => { a[i] *= Math.PI / 180.0; });\r\n }\r\n\r\n _setAxisIndices() {\r\n const header = this._header;\r\n\r\n if (header.cellDims.x === 0.0 && header.cellDims.y === 0.0 && header.cellDims.z === 0.0) {\r\n header.cellDims.set(1.0, 1.0, 1.0);\r\n }\r\n // Apply header conversion\r\n // Mapping between CCP4 column, row, section and VMD x, y, z.\r\n const { crs2xyz } = this._header;\r\n if (crs2xyz[0] === 0 && crs2xyz[1] === 0 && crs2xyz[2] === 0) {\r\n crs2xyz[0] = 1;\r\n crs2xyz[1] = 2;\r\n crs2xyz[2] = 3;\r\n }\r\n\r\n const xyz2crs = this._xyz2crs;\r\n xyz2crs[crs2xyz[0] - 1] = 0; // column\r\n xyz2crs[crs2xyz[1] - 1] = 1; // row\r\n xyz2crs[crs2xyz[2] - 1] = 2; // section\r\n }\r\n\r\n _setOrigins() {\r\n const [xaxis, yaxis, zaxis] = this._getAxis();\r\n this._setAxisIndices();\r\n\r\n const header = this._header;\r\n const xyz2crs = this._xyz2crs;\r\n // Handle both MRC-2000 and older format maps\r\n if (header.origin.x === 0.0 && header.origin.y === 0.0 && header.origin.z === 0.0) {\r\n this._origin.addScaledVector(xaxis, header.nstart[xyz2crs[0]]);\r\n this._origin.addScaledVector(yaxis, header.nstart[xyz2crs[1]]);\r\n this._origin.addScaledVector(zaxis, header.nstart[xyz2crs[2]]);\r\n } else {\r\n this._origin = header.origin;\r\n // Use ORIGIN records rather than old n[xyz]start records\r\n // http://www2.mrc-lmb.cam.ac.uk/image2000.html\r\n // XXX the ORIGIN field is only used by the EM community, and\r\n // has undefined meaning for non-orthogonal maps and/or non-cubic voxels, etc.\r\n }\r\n xaxis.multiplyScalar(header.extent[xyz2crs[0]] - 1);\r\n yaxis.multiplyScalar(header.extent[xyz2crs[1]] - 1);\r\n zaxis.multiplyScalar(header.extent[xyz2crs[2]] - 1);\r\n\r\n if (header.type === 2) {\r\n this._data = new Float32Array(\r\n this._buff,\r\n 1024 + header.nsymbt,\r\n header.extent[0] * header.extent[1] * header.extent[2],\r\n );\r\n } else {\r\n throw new Error(`CCP4: Unsupported format ${header.type}`);\r\n }\r\n\r\n this._setBoxParams(xaxis, yaxis, zaxis);\r\n }\r\n\r\n _toXYZData() {\r\n const header = this._header;\r\n const data = this._data;\r\n const xyz2crs = this._xyz2crs;\r\n const xyzData = new Float32Array(data.length);\r\n\r\n const dim = this._getXYZdim();\r\n const xSize = dim[0];\r\n const ySize = dim[1];\r\n\r\n let crsIdx = 0;\r\n const coord = [];\r\n let x;\r\n let y;\r\n let z;\r\n for (coord[2] = 0; coord[2] < header.extent[2]; coord[2]++) { // Site\r\n for (coord[1] = 0; coord[1] < header.extent[1]; coord[1]++) { // Row\r\n for (coord[0] = 0; coord[0] < header.extent[0]; coord[0]++, crsIdx++) { // Column\r\n x = coord[xyz2crs[0]];\r\n y = coord[xyz2crs[1]];\r\n z = coord[xyz2crs[2]];\r\n xyzData[x + xSize * (y + ySize * z)] = data[crsIdx];\r\n }\r\n }\r\n }\r\n\r\n return xyzData;\r\n }\r\n}\r\n\r\nclass CCP4Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'ccp4';\r\n this.model = new Ccp4Model();\r\n }\r\n\r\n static canProbablyParse(_data) {\r\n return false; // Autodetection is not implemented yet\r\n }\r\n\r\n parseSync() {\r\n return this.model.parse(this._data);\r\n }\r\n}\r\n\r\nCCP4Parser.formats = ['ccp4'];\r\nCCP4Parser.extensions = ['.ccp4', '.map', '.mrc'];\r\nCCP4Parser.binary = true;\r\n\r\nexport default CCP4Parser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst { Complex, Element, Molecule } = chem;\r\n\r\nclass XYZParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._atomsInf = null;\r\n\r\n this._options.fileType = 'xyz';\r\n this._fileName = options.name;\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && /^\\s*\\d+ *\\n[^\\n]*\\n\\s*\\w{1,3}\\s+-?\\d/.test(data);\r\n }\r\n\r\n _parseToAtomsInf(source) {\r\n const endnAtoms = source.indexOf('\\n');\r\n const nAtoms = parseInt(source.substring(0, endnAtoms), 10);\r\n const endComment = source.indexOf('\\n', endnAtoms + 1);\r\n let comment = source.slice(endnAtoms + 1, endComment).trim();\r\n if (comment.length === 0) {\r\n comment = this._fileName;\r\n }\r\n\r\n const startAtomsInf = endComment + source.substring(endComment).search(/\\S/);\r\n this._atomsInf = source.substring(startAtomsInf).split(/[\\s,]*\\n[\\s,]*/);\r\n if (!Number.isNaN(nAtoms) && (this._atomsInf.length - 1 !== nAtoms)) {\r\n this._complex.error = {\r\n message: 'wrong number of atoms',\r\n };\r\n return;\r\n }\r\n\r\n this._complex.metadata.format = 'xyz';\r\n this._complex.name = comment;\r\n }\r\n\r\n _parseAtomsInf() {\r\n const het = true;\r\n const altLoc = ' ';\r\n const occupancy = 1;\r\n const tempFactor = 1;\r\n const charge = 0;\r\n\r\n const chain = this._complex.addChain('A');\r\n const residue = chain.addResidue('UNK', 1, ' ');\r\n\r\n for (let i = 0; i < this._atomsInf.length - 1; i++) {\r\n const words = this._atomsInf[i].split(/[\\s,]+/);\r\n\r\n if (words.length !== 4) {\r\n this._complex.error = {\r\n message: 'missed parameters',\r\n };\r\n break;\r\n }\r\n\r\n const serial = i + 1;\r\n const name = words[0];\r\n const xyz = new THREE.Vector3(parseFloat(words[1]), parseFloat(words[2]), parseFloat(words[3]));\r\n const type = Element.getByName(name);\r\n const role = undefined;\r\n\r\n residue.addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n const molecule = new Molecule(this._complex, this._complex.name, 1);\r\n molecule.residues = residue;\r\n this._complex._molecules[0] = molecule;\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n\r\n this._parseToAtomsInf(this._data);\r\n this._parseAtomsInf();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n\r\n this._complex = null;\r\n this._atomsInf = null;\r\n\r\n if (result.error) {\r\n throw new Error(result.error.message);\r\n }\r\n return result;\r\n }\r\n\r\n static formats = ['xyz'];\r\n\r\n static extensions = ['.xyz'];\r\n}\r\n\r\nexport default XYZParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst { Complex, Element } = chem;\r\n\r\nclass PubChemParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'pubchem+json';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && data[0] === '{';\r\n }\r\n\r\n parseSync() {\r\n this.logger.info('Parsing PubChem JSON file...');\r\n return this._toComplex(JSON.parse(this._data));\r\n }\r\n\r\n _toComplex(jsonData) {\r\n const complex = new Complex();\r\n const complexData = jsonData.PC_Compounds && jsonData.PC_Compounds[0];\r\n if (complexData) {\r\n this._extractAtoms(complex, complexData);\r\n complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n });\r\n }\r\n return complex;\r\n }\r\n\r\n _extractAtoms(complex, complexData) {\r\n let aids = complexData.atoms && complexData.atoms.aid;\r\n let elements = aids && complexData.atoms.element;\r\n if (!elements || aids.length !== elements.length) {\r\n throw new Error('Unable to parse atom elements');\r\n }\r\n elements = _.fromPairs(_.zip(aids, elements));\r\n const atoms = {};\r\n\r\n const coords = complexData.coords && complexData.coords[0];\r\n const model = coords && coords.conformers && coords.conformers[0];\r\n const xs = model && model.x;\r\n const ys = model && model.y;\r\n const zs = (model && model.z) || [];\r\n aids = coords && coords.aid;\r\n if (!aids || !xs || !ys) {\r\n throw new Error('Coordinates are not found in the file');\r\n }\r\n\r\n const chain = complex.addChain(' ');\r\n const residue = chain.addResidue('UNK', 1, ' ');\r\n\r\n for (let i = 0, n = aids.length; i < n; ++i) {\r\n const aid = aids[i];\r\n const element = Element.ByAtomicNumber[elements[aid]];\r\n const xyz = new THREE.Vector3(xs[i], ys[i], zs[i] || 0.0);\r\n atoms[aid] = residue.addAtom(element.name, element, xyz, undefined, true, aid, ' ', 1.0, 0.0, 0);\r\n }\r\n\r\n const aids1 = complexData.bonds && complexData.bonds.aid1;\r\n const aids2 = complexData.bonds && complexData.bonds.aid2;\r\n const orders = (complexData.bonds && complexData.bonds.order) || [];\r\n if (!aids1 || !aids2 || aids1.length !== aids2.length) {\r\n return;\r\n }\r\n\r\n for (let j = 0, m = aids1.length; j < m; ++j) {\r\n complex.addBond(atoms[aids1[j]], atoms[aids2[j]], orders[j] || 1, 0, true);\r\n }\r\n }\r\n}\r\n\r\nPubChemParser.formats = ['pubchem', 'pubchem+json', 'pc'];\r\nPubChemParser.extensions = ['.json'];\r\n\r\nexport default PubChemParser;\r\n","import _ from 'lodash';\r\n\r\nexport default class SDFStream {\r\n constructor(data) {\r\n this._strings = data.split(/\\r?\\n|\\r/);\r\n this._currentStart = 0;\r\n this._currentStringIndx = 0;\r\n }\r\n\r\n setStart(start) {\r\n if (start >= this._strings.length) {\r\n this._currentStart = this._strings.length - 1;\r\n this._currentStringIndx = this._strings.length - 1;\r\n } else {\r\n this._currentStart = start;\r\n this._currentStringIndx = start;\r\n }\r\n }\r\n\r\n getNextString() {\r\n return this._strings[++this._currentStringIndx];\r\n }\r\n\r\n getCurrentString() {\r\n return this._strings[this._currentStringIndx];\r\n }\r\n\r\n getStringFromStart(numb) {\r\n this._currentStringIndx = this._currentStart + numb;\r\n return this._strings[this._currentStart + numb];\r\n }\r\n\r\n findNextDataItem() {\r\n let curStr = this.getNextString();\r\n let res = false;\r\n while (!_.isUndefined(curStr) && curStr.trim() !== '$$$$') {\r\n if (curStr.match(/>\\s+<(.*)>/)) {\r\n res = true;\r\n break;\r\n }\r\n curStr = this.getNextString();\r\n }\r\n\r\n return res;\r\n }\r\n\r\n findNextCompoundStart() {\r\n let curStr = this.getCurrentString();\r\n while (!_.isUndefined(curStr) && curStr.trim() !== '$$$$') {\r\n curStr = this.getNextString();\r\n }\r\n this.setStart(++this._currentStringIndx);\r\n return this.probablyHaveDataToParse();\r\n }\r\n\r\n probablyHaveDataToParse() {\r\n return this._currentStringIndx < this._strings.length - 2;\r\n }\r\n}\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport SDFStream from './SDFStream';\r\nimport Assembly from '../../chem/Assembly';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst chargeMap = [0, 3, 2, 1, 0, -1, -2, -3];\r\nconst orderMap = [0, 1, 2, 3, 1, 1, 1, 2];\r\nconst typeMap = [\r\n Bond.BondType.UNKNOWN, // 0 - error\r\n Bond.BondType.COVALENT, // 1 - single\r\n Bond.BondType.COVALENT, // 2 - double\r\n Bond.BondType.COVALENT, // 3 - triple\r\n Bond.BondType.AROMATIC, // 4 - aromatic\r\n Bond.BondType.UNKNOWN, // 5 - single or double\r\n Bond.BondType.AROMATIC, // 6 - single or aromatic\r\n Bond.BondType.AROMATIC, // 7 - double or aromatic\r\n // 8 - any\r\n // 9 - coordination\r\n // 10 - hydrogen\r\n];\r\n\r\nconst sdfAndMolRegexp = /.*(M\\s\\sEND).*|.*(^$$$$).*|.*>\\s+<(.+)>.*/;\r\nconst sdfRegExp = /.*($$$$).*|.*>\\s+<(.+)>.*/;\r\n\r\nconst fileFormat = { SDF: 'sdf', MOL: 'mol' };\r\n\r\nconst possibleNameTags = ['PUBCHEM_IUPAC_TRADITIONAL_NAME', /PUBCHEM_(.+)_NAME/, /(.+)name/, /(.+)NAME/];\r\nconst possibleIDTags = ['PUBCHEM_COMPOUND_CID', 'id', 'ID', /.*CID/, /.*ID/, /.*id/];\r\nconst possibleTitleTags = ['msg', 'MSG', 'message', 'title', 'description', 'desc'];\r\nconst tagsNames = ['name', 'id', 'title'];\r\nconst tags = { name: possibleNameTags, id: possibleIDTags, title: possibleTitleTags };\r\n\r\nfunction buildChainID(index) {\r\n if (!index) {\r\n return 'A';\r\n }\r\n\r\n const codes = [];\r\n while (index) {\r\n codes.push(65 + (index % 26));\r\n index = Math.trunc(index / 26);\r\n }\r\n if (codes.length > 1) {\r\n codes.reverse();\r\n codes[0] -= 1;\r\n }\r\n\r\n return String.fromCharCode(...codes);\r\n}\r\n\r\nexport default class SDFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._format = 'sdf';\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._molecules = null;\r\n this._metadata = {};\r\n this._metadata.molecules = [];\r\n this._currentMolProps = {};\r\n this._compoundIndx = -1;\r\n this._assemblies = [];\r\n this._atomsParsed = 0;\r\n this._atomsIndexes = [];\r\n }\r\n\r\n canProbablyParse(data) {\r\n return _.isString(data) && sdfAndMolRegexp.test(data);\r\n }\r\n\r\n _parseHeader(stream) {\r\n const molecule = {};\r\n molecule.name = stream.getStringFromStart(0);\r\n const date = parseInt(stream.getStringFromStart(1).substr(10, 6).trim(), 10);\r\n molecule.date = date.toString() || '';\r\n molecule.title = stream.getStringFromStart(2);\r\n this._metadata.molecules.push(molecule);\r\n }\r\n\r\n _parseAtoms(stream, atomsNum) {\r\n let curStr;\r\n let serial = this._atomsParsed;\r\n\r\n // each molecule = chain\\residue\r\n const chainID = buildChainID(this._compoundIndx);\r\n const resName = 'UNK';\r\n const resSeq = 1;\r\n\r\n this._chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = this._chain.addResidue(resName, resSeq, ' ');\r\n\r\n for (let i = 0; i < atomsNum; i++) {\r\n curStr = stream.getNextString();\r\n serial++;\r\n const x = parseFloat(curStr.substr(0, 10));\r\n const y = parseFloat(curStr.substr(10, 10));\r\n const z = parseFloat(curStr.substr(20, 10));\r\n const charge = chargeMap[parseInt(curStr.substr(36, 3), 10)];\r\n const xyz = new THREE.Vector3(x, y, z);\r\n let name = curStr.substr(31, 3).trim().toUpperCase();\r\n const type = Element.getByName(name);\r\n if (!this._atomsIndexes[name]) {\r\n this._atomsIndexes[name] = 0;\r\n }\r\n this._atomsIndexes[name] += 1;\r\n name += this._atomsIndexes[name]; // every atom need to have unique name.\r\n\r\n this._residue.addAtom(name, type, xyz, undefined, true, serial, ' ', 1.0, 0.0, charge);\r\n }\r\n }\r\n\r\n _parseBonds(stream, bondsNum) {\r\n let curStr;\r\n\r\n for (let i = 0; i < bondsNum; i++) {\r\n curStr = stream.getNextString();\r\n let atom1 = parseInt(curStr.substr(0, 3), 10) + this._atomsParsed;\r\n let atom2 = parseInt(curStr.substr(3, 3), 10) + this._atomsParsed;\r\n const bondType = parseInt(curStr.substr(6, 3), 10);\r\n\r\n if (atom1 > atom2) {\r\n [atom1, atom2] = [atom2, atom1];\r\n }\r\n this._complex.addBond(\r\n atom1,\r\n atom2,\r\n orderMap[bondType] || 1,\r\n typeMap[bondType] || Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n }\r\n\r\n _parseMOL(stream) {\r\n this._compoundIndx++;\r\n\r\n this._parseHeader(stream);\r\n const countsLine = stream.getStringFromStart(3);\r\n const atomsNum = parseInt(countsLine.substr(0, 3), 10);\r\n const bondsNum = parseInt(countsLine.substr(3, 3), 10);\r\n this._parseAtoms(stream, atomsNum);\r\n this._parseBonds(stream, bondsNum);\r\n\r\n this._atomsParsed += atomsNum;\r\n\r\n this._metadata.molecules[this._compoundIndx]._residues = [];\r\n this._metadata.molecules[this._compoundIndx]._residues.push(this._residue);\r\n }\r\n\r\n _parseDataItem(stream) {\r\n const tag = stream.getCurrentString();\r\n\r\n let data = [];\r\n let curStr = stream.getNextString();\r\n\r\n // read data\r\n while (curStr.trim() !== '') {\r\n data.push(curStr);\r\n curStr = stream.getNextString();\r\n }\r\n if (data.length === 1) {\r\n [data] = data;\r\n }\r\n this._currentMolProps[tag.replace(/[<>]/g, '').trim()] = data;\r\n }\r\n\r\n _parseCompound(stream) {\r\n this._parseMOL(stream);\r\n\r\n // parse data items block\r\n if (this._format === fileFormat.SDF) {\r\n this._currentMolProps = {};\r\n while (stream.findNextDataItem()) {\r\n this._parseDataItem(stream);\r\n }\r\n if (Object.keys(this._currentMolProps).length !== 0) {\r\n const molecule = this._metadata.molecules[this._compoundIndx];\r\n molecule.props = this._currentMolProps;\r\n this._tryToUpdateMoleculeData(molecule);\r\n }\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap;\r\n const complex = this._complex;\r\n\r\n const bonds = complex._bonds;\r\n for (let j = 0; j < bonds.length; j++) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n console.log('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _buildAssemblies() {\r\n const chains = this._complex._chains;\r\n\r\n if (chains.length === 1) {\r\n return this._assemblies;\r\n }\r\n\r\n for (let i = 0; i < chains.length; i++) {\r\n const assembly = new Assembly(this._complex);\r\n const matrix = new THREE.Matrix4();\r\n assembly.addMatrix(matrix);\r\n assembly.addChain(chains[i]._name);\r\n this._assemblies.push(assembly);\r\n }\r\n\r\n return this._assemblies;\r\n }\r\n\r\n _buildMolecules() {\r\n this._complex._molecules = [];\r\n const { molecules } = this._metadata;\r\n for (let i = 0; i < molecules.length; i++) {\r\n const molecule = new Molecule(this._complex, molecules[i].name, i + 1);\r\n molecule.residues = molecules[i]._residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n\r\n return this._complex._molecules;\r\n }\r\n\r\n _searchTag(tag, props) {\r\n for (let i = 0; i < props.length; i++) {\r\n if ((tag instanceof RegExp && tag.test(props[i].tag)) || tag === props[i].tag) {\r\n return props[i].data;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n _tryToFind(tagsList, props) {\r\n for (let j = 0; j < tagsList.length; j++) {\r\n const res = this._searchTag(tagsList[j], props);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n _tryToUpdateMoleculeData(molecule) {\r\n let res = false;\r\n for (let i = 0; i < tagsNames.length; i++) {\r\n const tagPossibleNames = tags[tagsNames[i]];\r\n const data = this._tryToFind(tagPossibleNames, molecule.props);\r\n if (data) {\r\n molecule[tagsNames[i]] = data;\r\n res = true;\r\n }\r\n }\r\n\r\n molecule.name = molecule.name || molecule.id;\r\n if (molecule.name.match(/^\\d+$/)) {\r\n molecule.name = `CID: ${molecule.name}`;\r\n }\r\n\r\n return res;\r\n }\r\n\r\n _finalizeMetadata() {\r\n const { molecules } = this._metadata;\r\n const { metadata } = this._complex;\r\n const complex = this._complex;\r\n\r\n if (molecules.length === 1) {\r\n complex.name = molecules[0].name;\r\n metadata.title = molecules[0].title;\r\n metadata.date = molecules[0].date;\r\n metadata.properties = molecules[0].props;\r\n } else if (molecules.length > 1) {\r\n metadata.molecules = [];\r\n for (let i = 0; i < molecules.length; i++) {\r\n metadata.molecules.push({\r\n name: molecules[i].name, date: molecules[i].date, title: molecules[i].title, properties: molecules[i].props,\r\n });\r\n }\r\n }\r\n }\r\n\r\n _finalize() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const atoms = this._complex._atoms;\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n this._complex._finalizeBonds();\r\n this._fixBondsArray();\r\n this._finalizeMetadata();\r\n this._buildAssemblies();\r\n this._complex.units = this._complex.units.concat(this._assemblies);\r\n this._buildMolecules();\r\n this._complex.finalize({\r\n needAutoBonding: false, detectAromaticLoops: false, enableEditing: false, serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n defineFormat(data) {\r\n let format;\r\n if (sdfRegExp.test(data)) {\r\n format = fileFormat.SDF;\r\n } else {\r\n format = fileFormat.MOL;\r\n }\r\n\r\n return format;\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n const stream = new SDFStream(this._data);\r\n\r\n this._format = this.defineFormat(this._data);\r\n result.metadata.format = this._format;\r\n\r\n do {\r\n this._parseCompound(stream);\r\n } while (stream.findNextCompoundStart());\r\n\r\n this._finalize();\r\n\r\n return result;\r\n }\r\n}\r\n\r\nSDFParser.formats = ['mol', 'sdf'];\r\nSDFParser.extensions = ['.mol', '.sdf'];\r\n","import * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport VolumeModel, { valueType } from './VolumeModel';\r\n\r\n// http://www.uoxray.uoregon.edu/tnt/manual/node104.html\r\nconst DSN6Header = {\r\n nstart: [valueType.array, 'i16', 0],\r\n extent: [valueType.array, 'i16', 3],\r\n grid: [valueType.array, 'i16', 6],\r\n cellDims: [valueType.vector, 'i16', 9],\r\n angles: [valueType.array, 'i16', 12],\r\n div: [valueType.singular, 'i16', 15],\r\n adder: [valueType.singular, 'i16', 16],\r\n scaleFactor: [valueType.singular, 'i16', 17],\r\n};\r\n\r\nclass DSN6Model extends VolumeModel {\r\n _parseHeader(_buffer) {\r\n this._buff = _buffer;\r\n this._typedCheck();\r\n\r\n const arrays = {};\r\n arrays.i16 = new Int16Array(this._buff);\r\n\r\n // check and reverse if big endian\r\n if (arrays.i16[18] !== 100) {\r\n for (let i = 0, n = arrays.i16.length; i < n; ++i) {\r\n const val = arrays.i16[i];\r\n arrays.i16[i] = ((val & 0xff) << 8) | ((val >> 8) & 0xff);\r\n }\r\n }\r\n if (arrays.i16[18] !== 100) {\r\n throw new Error('DSN6: Incorrect format ');\r\n }\r\n\r\n const header = this._header;\r\n\r\n this._fillHeader(DSN6Header, arrays);\r\n header.cellDims.multiplyScalar(1.0 / header.scaleFactor);\r\n header.angles.forEach((angle, i, a) => { a[i] *= (Math.PI / 180.0) / header.scaleFactor; });\r\n header.div /= 100;\r\n }\r\n\r\n _setAxisIndices() {\r\n this._xyz2crs[0] = 0;\r\n this._xyz2crs[1] = 1;\r\n this._xyz2crs[2] = 2;\r\n }\r\n\r\n _setOrigins() {\r\n const header = this._header;\r\n const [xaxis, yaxis, zaxis] = this._getAxis();\r\n this._setAxisIndices();\r\n\r\n this._origin.addScaledVector(xaxis, header.nstart[0]);\r\n this._origin.addScaledVector(yaxis, header.nstart[1]);\r\n this._origin.addScaledVector(zaxis, header.nstart[2]);\r\n\r\n xaxis.multiplyScalar(header.extent[0]);\r\n yaxis.multiplyScalar(header.extent[1]);\r\n zaxis.multiplyScalar(header.extent[2]);\r\n\r\n this._setBoxParams(xaxis, yaxis, zaxis);\r\n }\r\n\r\n _pointCalculate(xyzData, byteBuffer, z, y, x, pos, i) {\r\n const header = this._header;\r\n\r\n if (x < header.extent[0] && y < header.extent[1] && z < header.extent[2]) {\r\n const idx = x + header.extent[0] * (y + header.extent[1] * z);\r\n xyzData[idx] = (byteBuffer[pos.counter] - header.adder) / header.div;\r\n ++pos.counter;\r\n } else {\r\n pos.counter += 8 - i;\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n _blockCalculate(xyzData, byteBuffer, zBlock, yBlock, xBlock, pos) {\r\n for (let k = 0; k < 8; ++k) {\r\n const z = 8 * zBlock + k;\r\n for (let j = 0; j < 8; ++j) {\r\n const y = 8 * yBlock + j;\r\n let inRange = true;\r\n let i = 0;\r\n while (inRange && i < 8) {\r\n const x = 8 * xBlock + i;\r\n inRange = this._pointCalculate(xyzData, byteBuffer, z, y, x, pos, i);\r\n i++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _toXYZData() {\r\n const header = this._header;\r\n const byteBuffer = new Uint8Array(this._buff);\r\n const xyzData = new Float32Array(header.extent[0] * header.extent[1] * header.extent[2]);\r\n\r\n const blocks = new THREE.Vector3(header.extent[0] / 8, header.extent[1] / 8, header.extent[2] / 8);\r\n\r\n const pos = {};\r\n pos.counter = 512;\r\n\r\n for (let zBlock = 0; zBlock < blocks.z; ++zBlock) {\r\n for (let yBlock = 0; yBlock < blocks.y; ++yBlock) {\r\n for (let xBlock = 0; xBlock < blocks.x; ++xBlock) {\r\n this._blockCalculate(xyzData, byteBuffer, zBlock, yBlock, xBlock, pos);\r\n }\r\n }\r\n }\r\n this._calculateInfoParams(xyzData);\r\n return xyzData;\r\n }\r\n\r\n _calculateInfoParams(xyzData) {\r\n this._header.dmean /= xyzData.length;\r\n let dispersion = 0;\r\n let minDensity = xyzData[0];\r\n let maxDensity = xyzData[0];\r\n for (let j = 0; j < xyzData.length; j++) {\r\n dispersion += (this._header.dmean - xyzData[j]) ** 2;\r\n\r\n if (xyzData[j] < minDensity) {\r\n minDensity = xyzData[j];\r\n }\r\n if (xyzData[j] > maxDensity) {\r\n maxDensity = xyzData[j];\r\n }\r\n }\r\n this._header.sd = Math.sqrt(dispersion / xyzData.length);\r\n this._header.dmax = maxDensity;\r\n this._header.dmin = minDensity;\r\n }\r\n}\r\n\r\nclass DSN6Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'dsn6';\r\n this.model = new DSN6Model();\r\n }\r\n\r\n static canParse(data, options) {\r\n if (!data) {\r\n return false;\r\n }\r\n return data instanceof ArrayBuffer && Parser.checkDataTypeOptions(options, 'dsn6');\r\n }\r\n\r\n static canProbablyParse(_data) {\r\n return false;\r\n }\r\n\r\n parseSync() {\r\n return this.model.parse(this._data);\r\n }\r\n}\r\n\r\nDSN6Parser.formats = ['dsn6'];\r\nDSN6Parser.extensions = ['.dsn6', '.omap'];\r\nDSN6Parser.binary = true;\r\n\r\nexport default DSN6Parser;\r\n","import PDBStream from './PDBStream';\r\n\r\n/**\r\n * Little helper class for GRO Parser usage.\r\n * @extends PDBStream\r\n */\r\nclass GROReader extends PDBStream {\r\n constructor(data) {\r\n super(data);\r\n /** @type Number */\r\n this._next = -1; // End position of line\r\n this.next();\r\n }\r\n\r\n /**\r\n * Getting end of string.\r\n * @returns {Number} Pointer to end of string\r\n */\r\n getNext() {\r\n return this._next;\r\n }\r\n}\r\n\r\nexport default GROReader;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport GROReader from './GROReader';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Molecule,\r\n} = chem;\r\n\r\n/**\r\n * Gromos87 file format parser.\r\n * @extends Parser\r\n */\r\nclass GROParser extends Parser {\r\n /**\r\n * Create parser for .gro file format\r\n *\r\n * @param {String} data Input file\r\n * @param {String} options Input options (optional field)\r\n */\r\n constructor(data, options) {\r\n super(data, options);\r\n /** @type Date */\r\n this._time = null; // Time in ps, optional field for animations\r\n /** @type Number */\r\n this._numAtoms = null; // Number of atoms in complex\r\n /** @type Number */\r\n this._residueNumber = null; // Number of exact residue\r\n /** @type String */\r\n this._residueName = ''; // Scientific name of exact residue\r\n /** @type String */\r\n this._atomName = ''; // Scientific name of exact atom\r\n /** @type Number */\r\n this._atomNumber = null; // Sorted number of exact atom\r\n /** @type Array */\r\n this._atomPosition = []; // Array which contains x, y, z position of exact atom\r\n /** @type Array */\r\n this._atomVelocity = []; // Array which contains x, y, z velocity of exact atom (optional)\r\n /** @type Complex */\r\n this._complex = null; // Complex structure for unified molecule representation\r\n /** @type Vector3 */\r\n this._molecules = []; // Molecules array\r\n /** @type Molecule */\r\n this._molecule = null; // Single molecule\r\n /** @type String */\r\n this._options.filetype = 'gro'; // Extension of data file.\r\n }\r\n\r\n /**\r\n * General check for possibility of parsing.\r\n * @param {String} data - Input file\r\n * @returns {boolean} true if this file is in ascii, false otherwise\r\n */\r\n canProbablyParse(data) {\r\n return _.isString(this._data) && /^\\s*[^\\n]*\\n\\s*\\d+ *\\n\\s*\\d+[^\\n\\d]{3}\\s*\\w+\\s*\\d+\\s*-?\\d/.test(data);\r\n }\r\n\r\n /**\r\n * Parsing title of molecule complex.\r\n * NOTE: that names are ESTIMATES, there is no strict rules in Gromos87 standard for first line in input file.\r\n * @param {GROReader} line - Line containing title and time.\r\n */\r\n _parseTitle(line) {\r\n const { metadata } = this._complex;\r\n metadata.id = line.readLine().trim();\r\n metadata.name = metadata.id.slice(metadata.id.lastIndexOf('\\\\') + 1, metadata.id.lastIndexOf('.'));\r\n metadata.format = 'gro';\r\n }\r\n\r\n /**\r\n * Parsing line containing number of atoms information.\r\n * @param {GROReader} line - Line containing number of atoms.\r\n */\r\n _parseNumberOfAtoms(line) {\r\n this._numAtoms = line.readInt(0, line.getNext());\r\n if (Number.isNaN(this._numAtoms)) {\r\n throw new Error('Line 2 is not representing atom number. Consider checking input file');\r\n }\r\n }\r\n\r\n /**\r\n * Parsing line containing information about residues, atoms etc. Also information about box vectors.\r\n * Format of atoms MUST (by Gromos87 standard) be this: (note that numbering starts not from 0, but from 1!)\r\n * ResidueNumber[1 - 5] ResidueName[6 - 10] AtomName[11 - 15] AtomNumber[16 - 20] Position[21 - 45] Velocity[46 - 69]\r\n * @param {GROReader} line - Line containing information about atom.\r\n */\r\n _parseAtom(line) {\r\n this._residueNumber = line.readInt(1, 5);\r\n this._residueName = line.readString(6, 10).trim();\r\n this._atomName = line.readString(11, 15).trim();\r\n this._atomNumber = line.readInt(16, 20);\r\n const positionX = line.readFloat(21, 28) * 10;\r\n const positionY = line.readFloat(29, 36) * 10;\r\n const positionZ = line.readFloat(37, 45) * 10;\r\n if (Number.isNaN(positionX) || Number.isNaN(positionY) || Number.isNaN(positionZ)) {\r\n this._complex.error = {\r\n message: `Atom position is invalid in \"${line.readLine()}\"`,\r\n };\r\n return;\r\n }\r\n /* const velocityX = line.readFloat(46, 53);\r\n const velocityY = line.readFloat(54, 61);\r\n const velocityZ = line.readFloat(62, 69); */\r\n /* Adding residue and atom to complex structure */\r\n const type = Element.getByName(this._atomName[0]); /* MAGIC 0. REASONS: This name is something like \"CA\", where\r\n C - is an element an A is something else. But what about Calcium? */\r\n if (type.fullName === 'Unknown') {\r\n this._complex.error = {\r\n message: `${this._atomName[0]} hasn't been recognised as an atom name.`,\r\n };\r\n return;\r\n }\r\n const role = Element.Role[this._atomName];\r\n /* Firstly, create a dummy chain */\r\n let chain = this._chain;\r\n if (!chain) {\r\n this._chain = chain = this._complex.addChain('A');\r\n }\r\n /* Secondly, add residue to that chain */\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== this._residueNumber) {\r\n this._residue = residue = chain.addResidue(this._residueName, this._residueNumber, ' ');\r\n }\r\n /* Lastly, add atom to that residue */\r\n this._atomPosition = new THREE.Vector3(positionX, positionY, positionZ);\r\n /* Adding default constants to correct atom addition process */\r\n const het = true;\r\n const altLoc = ' ';\r\n const occupancy = 1;\r\n const tempFactor = 1;\r\n const charge = 0;\r\n residue.addAtom(this._atomName, type, this._atomPosition, role, het, this._atomNumber, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n /**\r\n * Some finalizing procedures. In '.gro' file format there is only 1 chain and 1 molecule.\r\n */\r\n _finalize() {\r\n const molecule = new Molecule(this._complex, this._complex.metadata.name, 1);\r\n // aggregate residues from chain\r\n molecule.residues = this._chain._residues;\r\n molecule._chains = this._chain;\r\n this._complex._molecules[0] = molecule;\r\n this._molecules.push(molecule);\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n /**\r\n * Main parsing procedure.\r\n * @returns {Complex} Complex structure for visualizing.\r\n */\r\n parseSync() {\r\n /* Create \"Complex\" variable */\r\n const result = this._complex = new Complex();\r\n /* Parse input file line-by-line */\r\n const reader = new GROReader(this._data);\r\n let counter = 0; /* Simple counter regarding to format of .gro file */\r\n /* First two lines - technical information, other lines - Atoms */\r\n this._parseTitle(reader);\r\n reader.next();\r\n this._parseNumberOfAtoms(reader);\r\n reader.next();\r\n for (counter = 0; counter < this._numAtoms; ++counter) {\r\n if (!reader.end()) {\r\n this._parseAtom(reader);\r\n reader.next();\r\n } else break;\r\n }\r\n /* If number of atoms in second line is less then actual atoms in file */\r\n if (counter < this._numAtoms) {\r\n this._complex.error = {\r\n message: 'File ended unexpectedly.',\r\n };\r\n }\r\n /* Catch errors occurred in parsing process */\r\n if (result.error) {\r\n throw new Error(result.error.message);\r\n }\r\n\r\n /* Finalizing data */\r\n this._finalize();\r\n\r\n /* Cleaning up */\r\n this._atomPosition = null;\r\n this._complex = null;\r\n this._molecules = null;\r\n this._molecule = null;\r\n\r\n /* Return resulting Complex variable */\r\n return result;\r\n }\r\n}\r\n\r\nGROParser.formats = ['gro'];\r\nGROParser.extensions = ['.gro'];\r\n\r\nexport default GROParser;\r\n","import * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst orderMap = {\r\n un: 0,\r\n 1: 1,\r\n 2: 2,\r\n 3: 3,\r\n ar: 1,\r\n am: 1,\r\n nc: 0,\r\n du: 1,\r\n};\r\nconst typeMap = {\r\n un: Bond.BondType.UNKNOWN, // unknown (cannot be determined from the parameter tables)\r\n 1: Bond.BondType.COVALENT, // single\r\n 2: Bond.BondType.COVALENT, // double\r\n 3: Bond.BondType.COVALENT, // triple\r\n ar: Bond.BondType.AROMATIC, // aromatic\r\n am: Bond.BondType.COVALENT, // amide\r\n nc: Bond.BondType.UNKNOWN, // not connected\r\n du: Bond.BondType.COVALENT, // dummy\r\n};\r\n\r\nconst resNumberRegex = /\\d+$/;\r\nconst spacesRegex = /\\s+/;\r\n\r\nfunction splitToFields(str) {\r\n return str.trim().split(spacesRegex);\r\n}\r\n/* There is no jsdoc documentation because of eslint corrections:\r\n * not all Parser methods are implemented\r\n */\r\n\r\nclass MOL2Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._compoundIndx = -1;\r\n\r\n this._molecules = [];\r\n this._molecule = null;\r\n\r\n this._currPosIdx = 0;\r\n this._currStartIdx = 0;\r\n\r\n this._serialAtomMap = {};\r\n\r\n this._options.fileType = 'mol2';\r\n }\r\n\r\n _parseRawStrings(data) {\r\n return data.split(/\\r?\\n|\\r/);\r\n }\r\n\r\n _toStringFromStart(numb, MOL2Data) {\r\n const newPosIdx = this._currStartIdx + numb;\r\n this._currPosIdx = (newPosIdx < MOL2Data.length) ? newPosIdx : this._currStartIdx;\r\n }\r\n\r\n _toHeaderString(header, MOL2Data) {\r\n this._toStringFromStart(0, MOL2Data);\r\n while (this._currPosIdx < MOL2Data.length) {\r\n if (MOL2Data[this._currPosIdx].match(`@${header}`)) {\r\n return;\r\n }\r\n this._currPosIdx++;\r\n }\r\n this._toStringFromStart(0, MOL2Data);\r\n }\r\n\r\n _toStringFromHeader(header, numb, MOL2Data) {\r\n this._toHeaderString(header, MOL2Data);\r\n const newPosIdx = this._currPosIdx + numb;\r\n\r\n if (MOL2Data[this._currPosIdx].match(`@${header}`) && newPosIdx < MOL2Data.length) {\r\n this._currPosIdx = newPosIdx;\r\n }\r\n }\r\n\r\n _setStart(startPos, MOL2Data) {\r\n if (startPos >= MOL2Data.length) {\r\n this._currStartIdx = this._currPosIdx = MOL2Data.length - 1;\r\n } else {\r\n this._currStartIdx = this._currPosIdx = startPos;\r\n }\r\n }\r\n\r\n _probablyHaveDataToParse(MOL2Data) {\r\n return this._currPosIdx < MOL2Data.length - 2;\r\n }\r\n\r\n _findNextCompoundStart(MOL2Data) {\r\n while (this._currPosIdx < MOL2Data.length && MOL2Data[this._currPosIdx].trim() !== '@MOLECULE>') {\r\n this._currPosIdx++;\r\n }\r\n this._setStart(++this._currPosIdx, MOL2Data);\r\n return this._probablyHaveDataToParse(MOL2Data);\r\n }\r\n\r\n _parseMolecule(MOL2Data) {\r\n this._toHeaderString('MOLECULE', MOL2Data);\r\n\r\n const { metadata } = this._complex;\r\n metadata.name = MOL2Data[++this._currPosIdx];\r\n metadata.format = 'mol2';\r\n\r\n this._molecule = { _index: '', _chains: [] };\r\n this._molecule._index = this._compoundIndx + 1;\r\n this._molecules.push(this._molecule);\r\n }\r\n\r\n /* Atom format description:\r\n * atomId atomName x y z element [resSeq [resName [charge [statusBit]]]]\r\n * statusBits is the internal SYBYL status bits associated with the atom.\r\n * These should never be set by the user.\r\n * Source: http://chemyang.ccnu.edu.cn/ccb/server/AIMMS/mol2.pdf\r\n */\r\n _parseAtoms(atomsNum, MOL2Data) {\r\n this._toHeaderString('ATOM', MOL2Data);\r\n\r\n for (let i = 0; i < atomsNum; i++) {\r\n const parsedStr = splitToFields(MOL2Data[++this._currPosIdx]);\r\n\r\n if (parsedStr.length < 6) {\r\n throw new Error('MOL2 parsing error: Not enough information to create atom!');\r\n }\r\n const atomId = parseInt(parsedStr[0], 10);\r\n const atomName = parsedStr[1];\r\n\r\n const x = parseFloat(parsedStr[2]);\r\n const y = parseFloat(parsedStr[3]);\r\n const z = parseFloat(parsedStr[4]);\r\n\r\n const element = parsedStr[5].split('.')[0].toUpperCase();\r\n\r\n let charge = 0;\r\n if (parsedStr.length >= 9) {\r\n charge = parseFloat(parsedStr[8]) || 0.0;\r\n }\r\n\r\n let chain = this._chain;\r\n if (!chain) {\r\n // .mol2 may contain information about multiple molecules, but they can't be visualized\r\n // at the same time now. There is no need to create different chain IDs then.\r\n this._chain = chain = this._complex.getChain('A') || this._complex.addChain('A');\r\n this._residue = null;\r\n }\r\n if (!this._setResidue(parsedStr)) {\r\n continue;\r\n }\r\n\r\n // These fields are not listed in mol2 format. Set them default.\r\n // Atoms and het atoms doesn't differ in .mol2,\r\n // but het atoms have special residues. It can be used in next updates\r\n const het = false;\r\n const altLoc = ' ';\r\n const occupancy = 1.0;\r\n const tempFactor = 0.0;\r\n const type = Element.getByName(element);\r\n const role = Element.Role[atomName];\r\n\r\n const xyz = new THREE.Vector3(x, y, z);\r\n this._residue.addAtom(atomName, type, xyz, role, het, atomId, altLoc, occupancy, tempFactor, charge);\r\n }\r\n }\r\n\r\n _setResidue(parsedStr) {\r\n let resSeq = 1;\r\n let resName = 'UNK'; // The same meaning has '<0>' in some mol2 files\r\n\r\n if (parsedStr.length >= 7) {\r\n resSeq = parseInt(parsedStr[6], 10);\r\n }\r\n if (parsedStr.length >= 8 && parsedStr[7] !== '<0>') {\r\n resName = parsedStr[7].replace(resNumberRegex, '');\r\n }\r\n if (this.settings.now.nowater) {\r\n if (resName === 'HOH' || resName === 'WAT') {\r\n return false;\r\n }\r\n }\r\n const residue = this._residue;\r\n const chain = this._chain;\r\n if (!residue || residue.getSequence() !== resSeq) {\r\n this._residue = chain.addResidue(resName, resSeq, 'A');\r\n }\r\n return true;\r\n }\r\n\r\n /* Bond format description\r\n * bondId originAtomId targetAtomId bondType [statusBits]\r\n */\r\n _parseBonds(bondsNum, MOL2Data) {\r\n this._toHeaderString('BOND', MOL2Data);\r\n\r\n for (let i = 0; i < bondsNum; i++) {\r\n const parsedStr = splitToFields(MOL2Data[++this._currPosIdx]);\r\n\r\n if (parsedStr.length < 3) {\r\n throw new Error('MOL2 parsing error: Missing information about bonds!');\r\n }\r\n\r\n let originAtomId = parseInt(parsedStr[1], 10);\r\n let targetAtomId = parseInt(parsedStr[2], 10);\r\n const bondType = parsedStr[3];\r\n\r\n if (originAtomId > targetAtomId) {\r\n [originAtomId, targetAtomId] = [targetAtomId, originAtomId];\r\n }\r\n this._complex.addBond(\r\n originAtomId,\r\n targetAtomId,\r\n orderMap[bondType] || 0,\r\n typeMap[bondType] || Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n }\r\n\r\n _fixSerialAtoms() {\r\n const atoms = this._complex._atoms;\r\n for (let i = 0; i < atoms.length; i++) {\r\n const atom = atoms[i];\r\n this._serialAtomMap[atom.serial] = atom;\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap;\r\n const complex = this._complex;\r\n\r\n if (Object.keys(serialAtomMap).length === 0) {\r\n throw new Error('MOL2 parsing error: Missing atom information!');\r\n }\r\n\r\n const bonds = complex._bonds;\r\n for (let j = 0; j < bonds.length; j++) {\r\n const bond = bonds[j];\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _finalizeMolecules() {\r\n // Get chain from complex\r\n const chain = this._complex._chains[0];\r\n this._complex._molecules = [];\r\n\r\n // Aggregate residues from chains\r\n // (to be precise from the chain 'A')\r\n for (let i = 0; i < this._molecules.length; i++) {\r\n const currMolecule = this._molecules[i];\r\n const molResidues = chain._residues;\r\n const molecule = new Molecule(this._complex, currMolecule._name, i + 1);\r\n molecule.residues = molResidues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n _finalize() {\r\n this._complex._finalizeBonds();\r\n this._fixSerialAtoms();\r\n this._fixBondsArray();\r\n this._finalizeMolecules();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n _parseCompound(MOL2Data) {\r\n this._compoundIndx++;\r\n this._parseMolecule(MOL2Data);\r\n\r\n // Ignoring comments and everything before @MOLECULE block\r\n this._toStringFromHeader('MOLECULE', 2, MOL2Data);\r\n\r\n const parsedStr = MOL2Data[this._currPosIdx].trim().split(spacesRegex);\r\n const atomsNum = parsedStr[0];\r\n const bondsNum = parsedStr[1];\r\n\r\n this._parseAtoms(atomsNum, MOL2Data);\r\n this._parseBonds(bondsNum, MOL2Data);\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n const MOL2Data = this._parseRawStrings(this._data);\r\n do {\r\n this._parseCompound(MOL2Data);\r\n } while (this._findNextCompoundStart(MOL2Data));\r\n\r\n this._finalize();\r\n\r\n return result;\r\n }\r\n}\r\n\r\nMOL2Parser.formats = ['mol2'];\r\nMOL2Parser.extensions = ['.mol2', '.ml2', '.sy2'];\r\n\r\nexport default MOL2Parser;\r\n","import ParserList from './parsers/ParserList';\r\n\r\nimport PDBParser from './parsers/PDBParser';\r\nimport CMLParser from './parsers/CMLParser';\r\nimport MMTFParser from './parsers/MMTFParser';\r\nimport CIFParser from './parsers/CIFParser';\r\nimport CCP4Parser from './parsers/CCP4Parser';\r\nimport XYZParser from './parsers/XYZParser';\r\nimport PubChemParser from './parsers/PubChemParser';\r\nimport SDFParser from './parsers/SDFParser';\r\nimport DSN6Parser from './parsers/DSN6Parser';\r\nimport GROParser from './parsers/GROParser';\r\nimport MOL2Parser from './parsers/MOL2Parser';\r\n\r\nexport default new ParserList([\r\n // note: order might be important\r\n PDBParser,\r\n CIFParser,\r\n MMTFParser,\r\n XYZParser,\r\n CMLParser,\r\n PubChemParser,\r\n SDFParser,\r\n CCP4Parser,\r\n DSN6Parser,\r\n GROParser,\r\n MOL2Parser,\r\n]);\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available exporters.\r\n * @extends EntityList\r\n */\r\nclass ExporterList extends EntityList {\r\n /**\r\n * Create a list of exporters.\r\n * The exporters are indexed by supported data formats (`.formats` and\r\n * `.extensions` properties of a Exporter subclass).\r\n * The Exporters can be retrieved later by matching against specs (see {@link ExporterList#find}).\r\n *\r\n * @param {!Array=} someExporters A list of {@link Exporter} subclasses to\r\n * automatically register at creation time.\r\n * @see ExporterList#register\r\n */\r\n constructor(someExporters = []) {\r\n super(someExporters, ['formats']);\r\n }\r\n\r\n /**\r\n * Find a suitable exporter for data.\r\n *\r\n * @param {Object} specs Exporter specifications.\r\n * @param {string=} specs.format Supported data format.\r\n * @param {*=} specs.data Data to export.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.format) {\r\n list = this._dict.formats[specs.format.toLowerCase()] || [];\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default ExporterList;\r\n","import makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Exporter {\r\n constructor(source, options) {\r\n this._source = source;\r\n this._options = options || {};\r\n this._abort = false;\r\n }\r\n\r\n exportSync() {\r\n throw new Error('Exporting to this source is not implemented');\r\n }\r\n\r\n export() {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n try {\r\n if (this._abort) {\r\n return reject(new Error('Export aborted'));\r\n }\r\n return resolve(this.exportSync());\r\n } catch (error) {\r\n return reject(error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n }\r\n}\r\n\r\nmakeContextDependent(Exporter.prototype);\r\n","import _ from 'lodash';\r\nimport { Matrix4 } from 'three';\r\n\r\nexport default class PDBResult {\r\n constructor() {\r\n this._resultArray = [];\r\n this._currentStr = -1;\r\n this._tag = null;\r\n this._fixedNumeration = false;\r\n this._numeration = false;\r\n this._tagStrNum = 0;\r\n }\r\n\r\n getResult() {\r\n this.writeString('\\n', 81, 81);\r\n return this._resultArray.join('');\r\n }\r\n\r\n _currentStrLength() {\r\n const curStr = this._resultArray[this._currentStr];\r\n return curStr ? curStr.length : 0;\r\n }\r\n\r\n // numeration can be number or boolean\r\n // if numeration is number then just put this number to 8-10 pos in string\r\n // if numeration is boolean then increase number for all new strings\r\n newTag(tag, numeration) {\r\n if (!tag) {\r\n this._tag = null;\r\n } else {\r\n this._tag = tag;\r\n }\r\n if (!_.isUndefined(numeration)) {\r\n if (_.isNumber(numeration)) {\r\n this._tagStrNum = numeration;\r\n this._numeration = true;\r\n this._fixedNumeration = true;\r\n } else if (_.isBoolean(numeration)) {\r\n this._tagStrNum = 0;\r\n this._numeration = numeration;\r\n this._fixedNumeration = false;\r\n }\r\n } else {\r\n this._numeration = false;\r\n this._fixedNumeration = false;\r\n this._tagStrNum = 0;\r\n }\r\n }\r\n\r\n newString(tag) {\r\n this.writeString('\\n', 81, 81);\r\n this._currentStr++;\r\n this._resultArray.push('');\r\n\r\n if (tag) {\r\n this.writeString(tag, 1, 6);\r\n } else if (this._tag) {\r\n this.writeString(this._tag, 1, 6);\r\n }\r\n\r\n if (this._numeration) {\r\n if (!this._fixedNumeration) {\r\n this._tagStrNum++;\r\n }\r\n if (this._tagStrNum !== 1) {\r\n this.writeString(this._tagStrNum.toString(), 10, 8);\r\n }\r\n }\r\n }\r\n\r\n writeEntireString(string, maxStrPos, concat) {\r\n if (!maxStrPos) {\r\n maxStrPos = 81;\r\n }\r\n for (let j = 0; j < string.length; j++) {\r\n if (this._currentStrLength() === maxStrPos && j !== string.length - 1) {\r\n this.newString();\r\n if (concat) { // pretty hardcoddy\r\n this.writeString(concat.tag, concat.begin, concat.end);\r\n }\r\n }\r\n if (string[j] === '\\n') {\r\n this.newString();\r\n } else {\r\n this.writeString(string[j]);\r\n }\r\n }\r\n }\r\n\r\n writeString(string, begin, end) {\r\n let curStr = this._resultArray[this._currentStr];\r\n let str;\r\n\r\n const curStrLength = curStr ? curStr.length : 0;\r\n\r\n if (_.isUndefined(string)) {\r\n return;\r\n }\r\n\r\n if (!_.isNumber(begin)) {\r\n begin = curStrLength + 1;\r\n }\r\n\r\n if (!_.isNumber(end)) {\r\n end = curStrLength + string.length;\r\n }\r\n\r\n if (!_.isString(string)) {\r\n str = string.toString();\r\n } else {\r\n str = string;\r\n }\r\n\r\n const finish = begin < end ? end : begin;\r\n const start = begin < end ? begin : end;\r\n\r\n if (str.length > Math.abs(begin - end) + 1) {\r\n str = str.substr(0, Math.abs(begin - end + 1));\r\n }\r\n\r\n // spaces before start of new data\r\n if (start > curStrLength + 1) {\r\n this._resultArray[this._currentStr] += ' '.repeat(start - curStrLength - 1);\r\n } else if (start <= curStrLength) {\r\n const cStr = this._resultArray[this._currentStr];\r\n this._resultArray[this._currentStr] = cStr.slice(0, start - 1);\r\n }\r\n\r\n // if reverse order\r\n // reverse order of end and begin means that user wants to align text right\r\n if (end < begin) {\r\n const len = begin - end + 1;\r\n str = ' '.repeat(len - str.length) + str;\r\n }\r\n\r\n // some hardcode fix for space between string numeration and data\r\n // (see pdb file format description)\r\n if (start === 11 && this._numeration && this._tagStrNum !== 1) {\r\n str = ` ${str}`;\r\n }\r\n\r\n // append new data to string\r\n this._resultArray[this._currentStr] += str;\r\n curStr = this._resultArray[this._currentStr];\r\n\r\n if (finish > curStr.length) {\r\n this._resultArray[this._currentStr] += ' '.repeat(finish - curStr.length);\r\n }\r\n }\r\n\r\n writeBondsArray(bonds, atom) {\r\n const bondsArrays = this._getSubArrays(bonds, 4);\r\n\r\n for (let k = 0; k < bondsArrays.length; k++) {\r\n this.newString();\r\n this.writeString(atom.serial, 11, 7);\r\n\r\n for (let j = 0; j < bondsArrays[k].length; j++) {\r\n const serial = (bondsArrays[k][j]._left.serial === atom.serial)\r\n ? bondsArrays[k][j]._right.serial : bondsArrays[k][j]._left.serial;\r\n\r\n this.writeString(serial, 16 + 5 * j, 12 + 5 * j);\r\n }\r\n }\r\n }\r\n\r\n _getSubArrays(arr, subArraySize) {\r\n const subArrays = [];\r\n for (let i = 0; i < arr.length; i += subArraySize) {\r\n subArrays.push(arr.slice(i, i + subArraySize));\r\n }\r\n return subArrays;\r\n }\r\n\r\n // function for writing matrix in Remark290 and Remark350 tags\r\n // (see pdb file description)\r\n writeMatrix(matrix, matrixIndx, tag) {\r\n for (let j = 0; j < 3; j++) {\r\n this.newString();\r\n this.writeString(tag, 14, 18);\r\n this.writeString((j + 1).toString(), 19, 19);\r\n this.writeString(matrixIndx.toString(), 23, 20);\r\n for (let k = 0; k < 3; k++) {\r\n const numb = parseFloat(matrix.elements[j * 4 + k]).toFixed(6);\r\n this.writeString(numb.toString(), 33 + k * 10, 24 + k * 10);\r\n }\r\n\r\n const numb = parseFloat(matrix.elements[j * 4 + 3]).toFixed(5);\r\n this.writeString(numb.toString(), 68, 55);\r\n }\r\n }\r\n\r\n writeMatrices(matrices, string) {\r\n if (!matrices) {\r\n return;\r\n }\r\n const matrix = new Matrix4();\r\n for (let j = 0; j < matrices.length; j++) {\r\n matrix.copy(matrices[j]).transpose();\r\n this.writeMatrix(matrix, j + 1, string);\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport Complex from '../../chem/Complex';\r\nimport Exporter from './Exporter';\r\nimport PDBResult from './PDBResult';\r\nimport Assembly from '../../chem/Assembly';\r\nimport { typeByPDBHelixClass } from '../../chem/Helix';\r\n\r\nexport default class PDBExporter extends Exporter {\r\n constructor(source, options) {\r\n super(source, options);\r\n this._tags = ['HEADER', 'TITLE', 'COMPND', 'REMARK', 'HELIX', 'SHEET', 'ATOM and HETATM', 'CONECT'];\r\n this._result = null;\r\n this._tagExtractors = {\r\n HEADER: this._extractHEADER,\r\n TITLE: this._extractTITLE,\r\n 'ATOM and HETATM': this._extractATOM,\r\n CONECT: this._extractCONECT,\r\n COMPND: this._extractCOMPND,\r\n REMARK: this._extractREMARK,\r\n HELIX: this._extractHELIX,\r\n SHEET: this._extractSHEET,\r\n };\r\n this._stringForRemark350 = 'COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN\\n'\r\n + 'BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE\\n'\r\n + 'MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS\\n'\r\n + 'GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND\\n'\r\n + 'CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN.';\r\n\r\n this._stringForRemark290 = 'CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS\\n'\r\n + 'THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM\\n'\r\n + 'RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY\\n'\r\n + 'RELATED MOLECULES.';\r\n }\r\n\r\n exportSync() {\r\n const result = new PDBResult();\r\n if (!this._source) {\r\n return this._result;\r\n }\r\n\r\n for (let i = 0; i < this._tags.length; i++) {\r\n const tag = this._tags[i];\r\n const func = this._tagExtractors[tag];\r\n if (_.isFunction(func)) {\r\n func.call(this, result);\r\n }\r\n }\r\n\r\n this._result = result.getResult();\r\n\r\n return this._result;\r\n }\r\n\r\n _extractHEADER(result) {\r\n if (!this._source.metadata) {\r\n return;\r\n }\r\n const { metadata } = this._source;\r\n result.newTag('HEADER');\r\n result.newString();\r\n if (metadata.classification) {\r\n result.writeString(metadata.classification, 11, 50);\r\n }\r\n if (metadata.date) {\r\n result.writeString(metadata.date, 51, 59);\r\n }\r\n if (metadata.id) {\r\n result.writeString(metadata.id, 63, 66);\r\n }\r\n }\r\n\r\n _extractTITLE(result) {\r\n if (!this._source.metadata) {\r\n return;\r\n }\r\n const { metadata } = this._source;\r\n if (!metadata.title) {\r\n return;\r\n }\r\n result.newTag('TITLE', true);\r\n for (let i = 0; i < metadata.title.length; i++) {\r\n result.newString();\r\n result.writeString(metadata.title[i], 11, 80);\r\n }\r\n }\r\n\r\n _extractCONECT(result) {\r\n if (!this._source._atoms) {\r\n return;\r\n }\r\n\r\n const atoms = this._source._atoms;\r\n result.newTag('CONECT');\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const fixedBonds = atoms[i].bonds.filter((bond) => bond._fixed);\r\n if (fixedBonds.length !== 0) {\r\n result.writeBondsArray(fixedBonds.reverse(), atoms[i]);\r\n }\r\n }\r\n }\r\n\r\n _extractSHEET(result) {\r\n if (!this._source._sheets) {\r\n return;\r\n }\r\n\r\n result.newTag('SHEET');\r\n\r\n const sheets = this._source._sheets;\r\n for (let i = 0; i < sheets.length; i++) {\r\n if (sheets[i]._strands) {\r\n const strands = sheets[i]._strands;\r\n for (let j = 0; j < strands.length; j++) {\r\n result.newString();\r\n result.writeString(j + 1, 10, 8);\r\n result.writeString(sheets[i]._name, 14, 12);\r\n result.writeString(strands.length, 16, 15);\r\n result.writeString(strands[j].init._type._name, 18, 20);\r\n result.writeString(strands[j].init._chain._name, 22, 22);\r\n result.writeString(strands[j].init._sequence, 26, 23);\r\n result.writeString(strands[j].init._icode, 27, 27);\r\n result.writeString(strands[j].term._type._name, 29, 31);\r\n result.writeString(strands[j].init._chain._name, 33, 33);\r\n result.writeString(strands[j].term._sequence, 37, 34);\r\n result.writeString(strands[j].term._icode, 38, 38);\r\n result.writeString(strands[j].sense, 40, 39);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _extractHELIX(result) {\r\n if (!this._source._helices) {\r\n return;\r\n }\r\n\r\n result.newTag('HELIX');\r\n const helices = this._source._helices;\r\n for (let i = 0; i < helices.length; i++) {\r\n const helix = helices[i];\r\n const helixClass = _.invert(typeByPDBHelixClass);\r\n result.newString();\r\n result.writeString(helix.serial, 10, 8);\r\n result.writeString(helix.name, 14, 12);\r\n result.writeString(helix.init._type._name, 16, 18);\r\n result.writeString(helix.init._chain._name, 20, 20);\r\n result.writeString(helix.init._sequence, 25, 22);\r\n result.writeString(helix.init._icode, 26, 26);\r\n result.writeString(helix.term._type._name, 28, 30);\r\n result.writeString(helix.term._chain._name, 32, 32);\r\n result.writeString(helix.term._sequence, 37, 34);\r\n result.writeString(helix.term._icode, 38, 38);\r\n result.writeString(helixClass[helix.type], 40, 39);\r\n result.writeString(helix.comment, 41, 70);\r\n result.writeString(helix.length, 76, 72);\r\n }\r\n }\r\n\r\n _extractATOM(result) {\r\n if (!this._source._atoms) {\r\n return;\r\n }\r\n const atoms = this._source._atoms;\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const tag = atoms[i].het ? 'HETATM' : 'ATOM';\r\n result.newString(tag);\r\n const startIndx = (atoms[i].element.name.length > 1 || atoms[i].name.length > 3) ? 13 : 14;\r\n result.writeString(atoms[i].serial, 11, 7);\r\n result.writeString(atoms[i].name, startIndx, 16);\r\n result.writeString(String.fromCharCode(atoms[i].location), 17, 17);\r\n result.writeString(atoms[i].residue._type._name, 20, 18);\r\n result.writeString(atoms[i].residue._chain._name, 22, 22);\r\n result.writeString(atoms[i].residue._sequence, 26, 23);\r\n result.writeString(atoms[i].residue._icode, 27, 27);\r\n result.writeString(atoms[i].position.x.toFixed(3), 38, 31);\r\n result.writeString(atoms[i].position.y.toFixed(3), 46, 39);\r\n result.writeString(atoms[i].position.z.toFixed(3), 54, 47);\r\n result.writeString(atoms[i].occupancy.toFixed(2), 60, 55);\r\n result.writeString(atoms[i].temperature.toFixed(2), 66, 61);\r\n result.writeString(atoms[i].element.name, 78, 77);\r\n if (atoms[i].charge) {\r\n result.writeString(atoms[i].charge, 79, 80);\r\n }\r\n }\r\n }\r\n\r\n _extractCOMPND(result) {\r\n if (!this._source._molecules) {\r\n return;\r\n }\r\n const molecules = this._source._molecules;\r\n result.newTag('COMPND', true);\r\n\r\n for (let i = 0; i < molecules.length; i++) {\r\n const chains = this._getMoleculeChains(molecules[i]);\r\n result.newString();\r\n result.writeString(`MOL_ID: ${molecules[i].index};`, 11, 80);\r\n result.newString();\r\n result.writeString(`MOLECULE: ${molecules[i].name};`, 11, 80);\r\n result.newString();\r\n result.writeString('CHAIN: ', 11, 18);\r\n const chainsString = `${chains.join(', ')};`;\r\n result.writeEntireString(chainsString, 81);\r\n }\r\n }\r\n\r\n _extractREMARK(result) {\r\n this._Remark290(result);\r\n this._Remark350(result);\r\n }\r\n\r\n _Remark290(result) {\r\n if (!this._source.symmetry) {\r\n return;\r\n }\r\n\r\n if (this._source.symmetry.length !== 0) {\r\n const matrices = this._source.symmetry;\r\n result.newTag('REMARK', 290);\r\n result.newString();\r\n result.newString();\r\n result.writeEntireString(this._stringForRemark290);\r\n result.writeMatrices(matrices, 'SMTRY');\r\n result.newString();\r\n result.newString();\r\n result.writeString('REMARK: NULL', 11, 80);\r\n }\r\n }\r\n\r\n _Remark350(result) {\r\n if (!this._source.units) {\r\n return;\r\n }\r\n const { units } = this._source;\r\n let biomolIndx = 0;\r\n\r\n result.newTag('REMARK', 350);\r\n result.newString();\r\n result.newString();\r\n result.writeEntireString(this._stringForRemark350);\r\n\r\n const assemblies = units.filter((unit) => unit instanceof Assembly);\r\n\r\n for (let i = 0; i < assemblies.length; i++) {\r\n result.newString();\r\n result.newString();\r\n biomolIndx++;\r\n result.writeString(`BIOMOLECULE: ${biomolIndx}`, 11, 80);\r\n const chains = assemblies[i].chains.join(', ');\r\n result.newString();\r\n result.writeString('APPLY THE FOLLOWING TO CHAINS: ');\r\n result.writeEntireString(chains, 69, { tag: 'AND CHAINS: ', begin: 31, end: 42 });\r\n\r\n const { matrices } = assemblies[i];\r\n result.writeMatrices(matrices, 'BIOMT');\r\n }\r\n }\r\n\r\n _getMoleculeChains(molecule) {\r\n function getChainName(residue) {\r\n return residue._chain._name;\r\n }\r\n const chainNames = molecule.residues.map(getChainName);\r\n return chainNames.filter((item, pos) => chainNames.indexOf(item) === pos);\r\n }\r\n}\r\n\r\nPDBExporter.formats = ['pdb'];\r\nPDBExporter.SourceClass = Complex;\r\n","import * as THREE from 'three';\r\n\r\nconst FBX_POS_SIZE = 3;\r\nconst FBX_NORM_SIZE = 3;\r\nconst FBX_COL_SIZE = 4;\r\n\r\nfunction copyFbxPoint3(src, srcIdx, dst, dstIdx) {\r\n dst[dstIdx] = src[srcIdx];\r\n dst[dstIdx + 1] = src[srcIdx + 1];\r\n dst[dstIdx + 2] = src[srcIdx + 2];\r\n}\r\n\r\nfunction copyFbxPoint4(src, srcIdx, dst, dstIdx, value) {\r\n dst[dstIdx] = src[srcIdx];\r\n dst[dstIdx + 1] = src[srcIdx + 1];\r\n dst[dstIdx + 2] = src[srcIdx + 2];\r\n dst[dstIdx + 3] = value;\r\n}\r\n\r\nconst vector4 = new THREE.Vector4();\r\nfunction copyTransformedPoint3(src, srcIdx, dst, dstIdx, opts) {\r\n vector4.set(src[srcIdx], src[srcIdx + 1], src[srcIdx + 2], opts.w);\r\n vector4.applyMatrix4(opts.matrix);\r\n dst[dstIdx] = vector4.x;\r\n dst[dstIdx + 1] = vector4.y;\r\n dst[dstIdx + 2] = vector4.z;\r\n}\r\n\r\nfunction setSubArray(src, dst, count, copyFunctor, functorOpts) {\r\n if ((dst.array.length - dst.start) / dst.stride < count\r\n || (src.array.length - src.start) / src.stride < count) {\r\n return; // we've got no space\r\n }\r\n if (src.stride === dst.stride) { // stride is the same\r\n dst.array.set(src.array, dst.start);\r\n } else {\r\n let idx = dst.start;\r\n let arridx = src.start;\r\n for (let i = 0; i < count; ++i, idx += dst.stride, arridx += src.stride) {\r\n copyFunctor(src.array, arridx, dst.array, idx, functorOpts);\r\n }\r\n }\r\n}\r\n\r\nexport default class FBXModel {\r\n constructor() {\r\n this.positions = null;\r\n this.normals = null;\r\n this.colors = null;\r\n this.indices = null;\r\n this.lastPos = 0;\r\n this.lastNorm = 0;\r\n this.lastCol = 0;\r\n this.lastIdx = 0;\r\n }\r\n\r\n init(vertsCount, indsCount) {\r\n this.positions = new Float32Array(vertsCount * FBX_POS_SIZE);\r\n this.normals = new Float32Array(vertsCount * FBX_NORM_SIZE);\r\n this.colors = new Float32Array(vertsCount * FBX_COL_SIZE);\r\n this.indices = new Int32Array(indsCount);\r\n }\r\n\r\n setPositions(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.positions,\r\n start: this.lastPos,\r\n stride: FBX_POS_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint3);\r\n this.lastPos += count * FBX_POS_SIZE;\r\n }\r\n\r\n setTransformedPositions(array, start, count, stride, matrix) {\r\n let idx = this.lastPos;\r\n let arrIdx = start;\r\n const opts = { matrix, w: 1 };\r\n for (let i = 0; i < count; ++i, arrIdx += stride, idx += FBX_POS_SIZE) {\r\n copyTransformedPoint3(array, arrIdx, this.positions, idx, opts);\r\n }\r\n this.lastPos += count * FBX_POS_SIZE;\r\n }\r\n\r\n setNormals(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.normals,\r\n start: this.lastNorm,\r\n stride: FBX_NORM_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint3);\r\n this.lastNorm += count * FBX_NORM_SIZE;\r\n }\r\n\r\n setTransformedNormals(array, start, count, stride, matrix) {\r\n let idx = this.lastNorm;\r\n let arrIdx = start;\r\n const opts = { matrix, w: 0 };\r\n for (let i = 0; i < count; ++i, arrIdx += stride, idx += FBX_NORM_SIZE) {\r\n copyTransformedPoint3(array, arrIdx, this.normals, idx, opts);\r\n }\r\n this.lastNorm += count * FBX_NORM_SIZE;\r\n }\r\n\r\n setColors(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.colors,\r\n start: this.lastCol,\r\n stride: FBX_COL_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint4, 1);\r\n this.lastCol += count * FBX_COL_SIZE;\r\n }\r\n\r\n setIndices(array, start, count) {\r\n this.indices.set(array, this.lastIdx);\r\n this.lastIdx += count;\r\n }\r\n\r\n setShiftedIndices(array, count, shift) {\r\n const shifted = array.map((x) => x + shift);\r\n this.setIndices(shifted, 0, count);\r\n }\r\n\r\n getVerticesNumber() {\r\n return this.lastPos / FBX_POS_SIZE;\r\n }\r\n\r\n addInstance(matrix, geo) {\r\n // add indices at first to take old number of vertices for shift\r\n const currentCount = this.getVerticesNumber();\r\n this.setShiftedIndices(geo.indices, geo.indices.length, currentCount);\r\n // simply write vertices at empty space\r\n const size = geo.itemSize;\r\n this.setTransformedPositions(geo.positions, 0, geo.vertsCount, size.position, matrix);\r\n this.setTransformedNormals(geo.normals, 0, geo.vertsCount, size.normal, matrix);\r\n this.setColors(geo.colors, 0, geo.vertsCount, size.color);\r\n }\r\n}\r\n","/** Base class for fbx geometry contains simply organized attributes: positions+normals+colors, indices. */\r\nexport default class FBXGeometry {\r\n /**\r\n * Create a base geo with necessary members.\r\n */\r\n constructor() {\r\n this.positions = null;\r\n this.normals = null;\r\n this.colors = null;\r\n this.indices = null;\r\n this.vertsCount = 0;\r\n this.itemSize = null;\r\n }\r\n\r\n /**\r\n * Initialize base geo storing items info from attributes.\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n */\r\n init(geo, _info) {\r\n const { attributes } = geo;\r\n // save item size\r\n this.itemSize = {\r\n position: attributes.position.itemSize,\r\n normal: attributes.normal.itemSize,\r\n color: attributes.color.itemSize,\r\n };\r\n }\r\n}\r\n","import FBXGeometry from './FBXGeometry';\r\n\r\n/**\r\n * Fbx geometry, that copies positions+normals, indexes and creates colors filled with defined value.\r\n * @extends FBXGeometry\r\n */\r\nexport default class FBX1CGeometry extends FBXGeometry {\r\n /**\r\n * Initialize geo storing positions, normals, indices and create colors.\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n */\r\n init(geo, _info) {\r\n super.init(geo, _info);\r\n const {\r\n attributes: {\r\n position,\r\n normal,\r\n },\r\n index,\r\n } = geo;\r\n // copy vertices attributes\r\n this.vertsCount = position.count;\r\n this.positions = position.array;\r\n this.normals = normal.array;\r\n // create color array\r\n this.colors = new Float32Array(this.vertsCount * this.itemSize.color);\r\n // indices\r\n this.indices = index.array;\r\n }\r\n\r\n /**\r\n * Set defined color for all items in color attribute\r\n * @param {Object} color - THREE.Color.\r\n */\r\n setColors(color) {\r\n let offset = 0;\r\n for (let i = 0, l = this.colors.length, cl = this.itemSize.color; i < l; i += cl) {\r\n this.colors[offset++] = color.r;\r\n this.colors[offset++] = color.g;\r\n this.colors[offset++] = color.b;\r\n }\r\n }\r\n}\r\n","import FBXGeometry from './FBXGeometry';\r\n\r\n/**\r\n * Fbx geometry, that copies positions+normals, indexes from cylinder geometry and creates colors filled with two\r\n * defined values.\r\n * @extends FBXGeometry\r\n */\r\nexport default class FBX2CCylinder extends FBXGeometry {\r\n constructor() {\r\n super();\r\n this._cutRawStart = 0;\r\n this._cutRawEnd = 0;\r\n this._facesPerSlice = 0;\r\n }\r\n\r\n /**\r\n * Initialize geo by creating new attributes, because we extend number of vertices to make cylinder two-colored.\r\n * Indices remain the same. We process open- end close-ended cylinders and consider cylinders od 2 segments\r\n * in height ONLY.\r\n * NOTE: cylinder consists of 2 height segments and stores parts in the order: tube, topCap, bottomCap\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n * @param {Object} info - information needed for geo extend\r\n */\r\n init(geo, info) {\r\n super.init(geo, info);\r\n const {\r\n attributes: {\r\n position,\r\n },\r\n index,\r\n } = geo;\r\n // extend vertices arrays\r\n this.vertsCount = position.count + info.addPerCylinder;\r\n this._facesPerSlice = info.addPerCylinder;\r\n this.positions = new Float32Array(this.vertsCount * position.itemSize);\r\n this.normals = new Float32Array(this.vertsCount * this.itemSize.normal);\r\n this.colors = new Float32Array(this.vertsCount * this.itemSize.color);\r\n this._extendVertices(geo, info);\r\n // number of indices stays the same\r\n this.indices = new Uint32Array(index.count);\r\n this._extendIndices(geo, info);\r\n }\r\n\r\n /** Extend vertex attributes to have one more slice to make sharp middle startColor-endColor line. */\r\n _extendVertices(geo, info) {\r\n const { position } = geo.attributes;\r\n const { normal } = geo.attributes;\r\n const geoParams = geo.getGeoParams();\r\n const cutRaw = 1; // we expect cylinders of 2 segments in height => so half segment = 1\r\n this._cutRawStart = cutRaw * geoParams.radialSegments;\r\n this._cutRawEnd = this._cutRawStart + info.addPerCylinder;\r\n { // write first half of cylinder\r\n let temp = position.array.slice(0, this._cutRawEnd * position.itemSize);\r\n this.positions.set(temp, 0);\r\n temp = normal.array.slice(0, this._cutRawEnd * normal.itemSize);\r\n this.normals.set(temp, 0);\r\n }\r\n { // write second part of cylinder\r\n let temp = position.array.slice(this._cutRawStart * position.itemSize, position.array.length);\r\n this.positions.set(temp, this._cutRawEnd * position.itemSize);\r\n temp = normal.array.slice(this._cutRawStart * normal.itemSize, normal.array.length);\r\n this.normals.set(temp, this._cutRawEnd * normal.itemSize);\r\n }\r\n }\r\n\r\n /** Shift values of second part (+caps) indices by newly added vertices count. Number of faces remains the same. */\r\n _extendIndices(geo, info) {\r\n const { index } = geo;\r\n const indicesPerQuad = 6; // quad = 2 triangles => 6 indices\r\n const startToShift = info.addPerCylinder * indicesPerQuad;\r\n const shift = info.addPerCylinder;\r\n let shifted = index.array.slice(startToShift, index.count);\r\n shifted = shifted.map((x) => x + shift); // shift only the endings\r\n this.indices.set(index.array, 0);\r\n this.indices.set(shifted, startToShift);\r\n }\r\n\r\n /**\r\n * Set defined colors: (first part + bottom cap), (second part + top cap)\r\n * @param {number} start - start color index\r\n * @param {number} end - start color index\r\n * @param {array} array - array of colors\r\n * @param {array} color - color value components\r\n */\r\n _setColorRange(start, end, array, color) {\r\n const colorSize = color.length;\r\n for (let i = start; i < end; i += colorSize) {\r\n array.set(color, i);\r\n }\r\n }\r\n\r\n /**\r\n * Set defined colors: (first part + bottom cap), (second part + top cap)\r\n * @param {Object} color1 - THREE.Color.\r\n * @param {Object} color2 - THREE.Color.\r\n */\r\n setColors(color1, color2) {\r\n const colorSize = this.itemSize.color;\r\n const part1End = this._cutRawEnd * colorSize;\r\n const part2End = part1End * 2;\r\n this._setColorRange(0, part1End, this.colors, color1.toArray());\r\n this._setColorRange(part1End, part2End, this.colors, color2.toArray());\r\n if (part2End < this.colors.length) { // cylinder has caps, lets paint them\r\n const capSize = (this._facesPerSlice + 1) * colorSize;\r\n const cap1End = part2End + capSize;\r\n this._setColorRange(part2End, cap1End, this.colors, color2.toArray());\r\n const cap2End = cap1End + capSize; // should be equal to this.colors.length;\r\n this._setColorRange(cap1End, cap2End, this.colors, color1.toArray());\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\n\r\nimport utils from '../../../utils';\r\nimport gfxutils from '../../../gfx/gfxutils';\r\nimport logger from '../../../utils/logger';\r\n\r\nimport FBXModel from './FBXModel';\r\nimport ThickLineMesh from '../../../gfx/meshes/ThickLineMesh';\r\nimport ZSpriteMesh from '../../../gfx/meshes/ZSpriteMesh';\r\nimport InstancedSpheresGeometry from '../../../gfx/geometries/InstancedSpheresGeometry';\r\nimport Instanced2CCylindersGeometry from '../../../gfx/geometries/Instanced2CCylindersGeometry';\r\nimport FBX1CGeometry from './FBX1CGeometry';\r\nimport FBX2CCylinder from './FBX2CCylinder';\r\n\r\nexport default class FBXInfoExtractor {\r\n constructor() {\r\n this._materials = [];\r\n this._models = [];\r\n }\r\n\r\n process(data) {\r\n this._extractModelsAndMaterials(data);\r\n const models = this._flattenModels();\r\n\r\n return {\r\n name: data.name,\r\n models,\r\n materials: this._materials,\r\n };\r\n }\r\n\r\n /**\r\n * Extract fbx object information from ComplexVisual\r\n * @param {object} data - complexVisual to get geometry info from\r\n */\r\n _extractModelsAndMaterials(data) {\r\n const layersOfInterest = new THREE.Layers();\r\n layersOfInterest.set(gfxutils.LAYERS.DEFAULT);\r\n layersOfInterest.enable(gfxutils.LAYERS.TRANSPARENT);\r\n data.traverse((object) => {\r\n if (object instanceof THREE.Mesh && object.layers.test(layersOfInterest) && this.checkExportAbility(object)) {\r\n if (object.geometry.type === 'InstancedBufferGeometry') {\r\n this._collectInstancedGeoInfo(object);\r\n } else {\r\n this._collectGeoInfo(object);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Reworking indices buffer, see https://banexdevblog.wordpress.com/2014/06/23/a-quick-tutorial-about-the-fbx-ascii-format/\r\n * basically, every triangle in Miew has been represented hat way (e.g.) : 0,1,7, but we must (for FBX) rework that\r\n * into: 0,1,-8.\r\n * @param {array} indices - belongs to [0, maxVertIndex]\r\n */\r\n _reworkIndices(indices) {\r\n const faceSize = 3;\r\n for (let i = faceSize - 1; i < indices.length; i += faceSize) {\r\n indices[i] *= -1;\r\n indices[i]--;\r\n }\r\n }\r\n\r\n /**\r\n * Combine geometry from several models having the same material into one Model and finally prepare indices\r\n * @returns {array} models, combined by material id\r\n */\r\n _flattenModels() {\r\n let overallVertsCount = 0;\r\n function shift(x) {\r\n return x + overallVertsCount;\r\n }\r\n const combined = [];\r\n // flatten models geometry\r\n for (let i = 0, n = this._models.length; i < n; i++) {\r\n const models = this._models[i];\r\n let indices = [];\r\n let positions = [];\r\n let normals = [];\r\n let colors = [];\r\n // reorganize every attributes as array of arrays\r\n overallVertsCount = 0;\r\n for (let j = 0; j < models.length; j++) {\r\n const m = models[j];\r\n indices.push(m.indices.map(shift));\r\n overallVertsCount += m.getVerticesNumber();\r\n positions.push(m.positions);\r\n normals.push(m.normals);\r\n colors.push(m.colors);\r\n }\r\n // join all subarrays into one\r\n indices = utils.mergeTypedArraysUnsafe(indices);\r\n this._reworkIndices(indices);\r\n positions = utils.mergeTypedArraysUnsafe(positions);\r\n normals = utils.mergeTypedArraysUnsafe(normals);\r\n colors = utils.mergeTypedArraysUnsafe(colors);\r\n combined.push({\r\n indices,\r\n positions,\r\n normals,\r\n colors,\r\n verticesCount: overallVertsCount,\r\n });\r\n }\r\n return combined;\r\n }\r\n\r\n /**\r\n * Check ability to export the kind of mesh.\r\n * @param {object} mesh - given mesh to check\r\n * @returns {boolean} result of check\r\n */\r\n checkExportAbility(mesh) {\r\n // check mesh on not being empty\r\n if (mesh.geometry.attributes.position.count === 0) {\r\n return false;\r\n }\r\n // check type of mesh\r\n // if (mesh.geometry.isInstancedBufferGeometry && settings.now.zSprites) {\r\n if (mesh instanceof ZSpriteMesh) {\r\n logger.warn('Currently we cannot export \\'sprites\\' modes, like BS, WV, LC. Please turn of settings \\'zSprites\\' and try again');\r\n return false;\r\n }\r\n if (mesh instanceof ThickLineMesh) {\r\n logger.warn('Currently we cannot export Lines mode');\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Save geometry info from common mesh, like Surface or Cartoon\r\n */\r\n _collectGeoInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n normal,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const vertCount = position.count;\r\n model.init(vertCount, index.count);\r\n if (matrix.isIdentity()) {\r\n model.setPositions(position.array, 0, vertCount, position.itemSize);\r\n model.setNormals(normal.array, 0, vertCount, normal.itemSize);\r\n } else {\r\n model.setTransformedPositions(position.array, 0, vertCount, position.itemSize, matrix);\r\n model.setTransformedNormals(normal.array, 0, vertCount, normal.itemSize, matrix);\r\n }\r\n model.setColors(color.array, 0, vertCount, color.itemSize);\r\n model.setIndices(index.array, 0, index.count);\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Collect instanced spheres geometry and materials.\r\n * @param {object} mesh - mesh with instanced spheres info\r\n */\r\n _collectSpheresInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const instCount = mesh.geometry.instanceCount;\r\n const vertCount = position.count;\r\n const indsCount = index.count;\r\n model.init(instCount * vertCount, instCount * indsCount);\r\n const geo = new FBX1CGeometry();\r\n geo.init(mesh.geometry);\r\n const instMatrix = new THREE.Matrix4();\r\n const objMatrix = new THREE.Matrix4();\r\n const sphereColor = new THREE.Color();\r\n for (let instanceIndex = 0; instanceIndex < instCount; ++instanceIndex) {\r\n // update colors in geometry\r\n const colorIdx = instanceIndex * color.itemSize;\r\n sphereColor.fromArray(color.array, colorIdx);\r\n geo.setColors(sphereColor);\r\n // add instance to the model\r\n this._getSphereInstanceMatrix(mesh.geometry, instanceIndex, instMatrix);\r\n objMatrix.multiplyMatrices(matrix, instMatrix);\r\n model.addInstance(objMatrix, geo);\r\n }\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Getting all instanced cylinders from given mesh.\r\n * Divide cylinder (add additional vertexes) for prettiness therefore algorithm is a bit complicated\r\n * @param {object} mesh - given mesh with instanced cylinders\r\n */\r\n _collectCylindersInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n color2,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const instCount = mesh.geometry.instanceCount;\r\n const oneCCylinder = new FBX1CGeometry();\r\n oneCCylinder.init(mesh.geometry);\r\n const splittingInfo = this._gatherCylindersColoringInfo(mesh.geometry);\r\n let twoCCylinder = null;\r\n if (splittingInfo.needToSplit > 0) {\r\n twoCCylinder = new FBX2CCylinder();\r\n twoCCylinder.init(mesh.geometry, splittingInfo);\r\n }\r\n const additionalVertsCount = splittingInfo.addPerCylinder * splittingInfo.needToSplit;\r\n const vertCount = position.count;\r\n const indsCount = index.count;\r\n model.init(instCount * vertCount + additionalVertsCount, instCount * indsCount);\r\n const instMatrix = new THREE.Matrix4();\r\n const objMatrix = new THREE.Matrix4();\r\n const colorStart = new THREE.Color();\r\n const colorEnd = new THREE.Color();\r\n let geo = {};\r\n for (let instanceIndex = 0; instanceIndex < instCount; ++instanceIndex) {\r\n // update colors in geometry\r\n const colorIdx = instanceIndex * color.itemSize;\r\n if (splittingInfo.is2Colored[instanceIndex]) {\r\n // .color2 contains starting color, and .color contains starting color (see uber.frag ATTR_COLOR2)\r\n colorStart.fromArray(color2.array, colorIdx);\r\n colorEnd.fromArray(color.array, colorIdx);\r\n if (twoCCylinder) {\r\n twoCCylinder.setColors(colorStart, colorEnd);\r\n geo = twoCCylinder;\r\n }\r\n } else {\r\n // has one color per cylinder\r\n colorStart.fromArray(color.array, colorIdx);\r\n oneCCylinder.setColors(colorStart);\r\n geo = oneCCylinder;\r\n }\r\n // add instance to the model\r\n this._getCylinderInstanceMatrix(mesh.geometry, instanceIndex, instMatrix);\r\n objMatrix.multiplyMatrices(matrix, instMatrix);\r\n model.addInstance(objMatrix, geo);\r\n }\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Adding model to pool of models or extend existing ones\r\n * @param {object} model - model to add\r\n * @param {object} material - material to add\r\n */\r\n _addToPool(model, material) {\r\n const materialIdx = this._checkExistingMaterial(material);\r\n if (materialIdx < 0) { // new model-material pair\r\n this._models.push([model]);\r\n this._materials.push(material);\r\n } else { // add model to existing model-material pair\r\n const models = this._models[materialIdx];\r\n models.push(model);\r\n }\r\n }\r\n\r\n /**\r\n * Checking if given material already was registered in materials pool (no need to create new one)\r\n * @param {object} material - given material\r\n * @returns {number} number of model-material pair\r\n */\r\n _checkExistingMaterial(material) {\r\n return _.findIndex(this._materials, (m) => _.isEqual(m, material));\r\n }\r\n\r\n _gatherCylindersColoringInfo(geo) {\r\n const instCount = geo.instanceCount;\r\n const color1 = geo.attributes.color.array;\r\n const color2 = geo.attributes.color2.array;\r\n const stride = geo.attributes.color.itemSize;\r\n const is2Colored = new Array(instCount);\r\n // analyze color instance attributes\r\n let needToSplit = 0;\r\n let colIdx = 0;\r\n for (let i = 0; i < instCount; i++, colIdx += stride) {\r\n const differs = (Math.abs(color1[colIdx] - color2[colIdx]) > 0.0000001) // compare ending colors\r\n || (Math.abs(color1[colIdx + 1] - color2[colIdx + 1]) > 0.0000001)\r\n || (Math.abs(color1[colIdx + 2] - color2[colIdx + 2]) > 0.0000001);\r\n is2Colored[i] = differs;\r\n needToSplit += differs; // count number of 2-colored cylinders\r\n }\r\n // calc number of vertices to add into 2-colored\r\n const geoParams = geo.getGeoParams();\r\n const addPerCylinder = geoParams.radialSegments;\r\n return { is2Colored, needToSplit, addPerCylinder };\r\n }\r\n\r\n /**\r\n * Collect instanced models and materials.\r\n * @param {object} mesh - given mesh with instanced something (spheres or cylinders)\r\n */\r\n _collectInstancedGeoInfo(mesh) {\r\n if (mesh.geometry instanceof InstancedSpheresGeometry) {\r\n this._collectSpheresInfo(mesh);\r\n } else if (mesh.geometry instanceof Instanced2CCylindersGeometry) {\r\n this._collectCylindersInfo(mesh);\r\n }\r\n }\r\n\r\n /**\r\n * Collect Material info from given mesh.\r\n * @param {object} mesh - given mesh with material info\r\n * @returns {object} material\r\n */\r\n _collectMaterialInfo(mesh) {\r\n const { uberOptions } = mesh.material;\r\n return ({\r\n diffuse: uberOptions.diffuse.toArray(),\r\n opacity: uberOptions.opacity,\r\n shininess: uberOptions.shininess,\r\n specular: uberOptions.specular.toArray(),\r\n });\r\n }\r\n\r\n _getCylinderInstanceMatrix(geo, instIdx, matrix) {\r\n const matVector1 = geo.attributes.matVector1.array;\r\n const matVector2 = geo.attributes.matVector2.array;\r\n const matVector3 = geo.attributes.matVector3.array;\r\n const idxOffset = instIdx * 4; // used 4 because offset arrays are stored in quads\r\n matrix.set(\r\n matVector1[idxOffset],\r\n matVector1[idxOffset + 1],\r\n matVector1[idxOffset + 2],\r\n matVector1[idxOffset + 3],\r\n matVector2[idxOffset],\r\n matVector2[idxOffset + 1],\r\n matVector2[idxOffset + 2],\r\n matVector2[idxOffset + 3],\r\n matVector3[idxOffset],\r\n matVector3[idxOffset + 1],\r\n matVector3[idxOffset + 2],\r\n matVector3[idxOffset + 3],\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n );\r\n }\r\n\r\n _getSphereInstanceMatrix(geo, instIdx, matrix) {\r\n const { offset } = geo.attributes;\r\n const idx = instIdx * offset.itemSize;\r\n const x = offset.array[idx];\r\n const y = offset.array[idx + 1];\r\n const z = offset.array[idx + 2];\r\n const scale = offset.array[idx + 3];\r\n matrix.set(\r\n scale,\r\n 0,\r\n 0,\r\n x,\r\n 0,\r\n scale,\r\n 0,\r\n y,\r\n 0,\r\n 0,\r\n scale,\r\n z,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n );\r\n }\r\n}\r\n","// Forming default definitions block\r\nconst defaultDefinitions = `\r\nDefinitions: {\r\n Version: 100\r\n Count: 3\r\n ObjectType: \"Model\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Geometry\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Material\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Pose\" {\r\n Count: 1\r\n }\r\n ObjectType: \"GlobalSettings\" {\r\n Count: 1\r\n }\r\n} `;\r\n\r\n// Default model properties\r\nconst defaultProperties = `Properties60: {\r\n Property: \"QuaternionInterpolate\", \"bool\", \"\",0\r\n Property: \"Visibility\", \"Visibility\", \"A\",1\r\n Property: \"Lcl Translation\", \"Lcl Translation\", \"A\",0.000000000000000,0.000000000000000,-1789.238037109375000\r\n Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A\",0.000009334667643,-0.000000000000000,0.000000000000000\r\n Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A\",1.000000000000000,1.000000000000000,1.000000000000000\r\n Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\r\n Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\r\n Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationActive\", \"bool\", \"\",0\r\n Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationMinX\", \"bool\", \"\",0\r\n Property: \"TranslationMinY\", \"bool\", \"\",0\r\n Property: \"TranslationMinZ\", \"bool\", \"\",0\r\n Property: \"TranslationMaxX\", \"bool\", \"\",0\r\n Property: \"TranslationMaxY\", \"bool\", \"\",0\r\n Property: \"TranslationMaxZ\", \"bool\", \"\",0\r\n Property: \"RotationOrder\", \"enum\", \"\",0\r\n Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\r\n Property: \"AxisLen\", \"double\", \"\",10\r\n Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationActive\", \"bool\", \"\",0\r\n Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationMinX\", \"bool\", \"\",0\r\n Property: \"RotationMinY\", \"bool\", \"\",0\r\n Property: \"RotationMinZ\", \"bool\", \"\",0\r\n Property: \"RotationMaxX\", \"bool\", \"\",0\r\n Property: \"RotationMaxY\", \"bool\", \"\",0\r\n Property: \"RotationMaxZ\", \"bool\", \"\",0\r\n Property: \"RotationStiffnessX\", \"double\", \"\",0\r\n Property: \"RotationStiffnessY\", \"double\", \"\",0\r\n Property: \"RotationStiffnessZ\", \"double\", \"\",0\r\n Property: \"MinDampRangeX\", \"double\", \"\",0\r\n Property: \"MinDampRangeY\", \"double\", \"\",0\r\n Property: \"MinDampRangeZ\", \"double\", \"\",0\r\n Property: \"MaxDampRangeX\", \"double\", \"\",0\r\n Property: \"MaxDampRangeY\", \"double\", \"\",0\r\n Property: \"MaxDampRangeZ\", \"double\", \"\",0\r\n Property: \"MinDampStrengthX\", \"double\", \"\",0\r\n Property: \"MinDampStrengthY\", \"double\", \"\",0\r\n Property: \"MinDampStrengthZ\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthX\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthY\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthZ\", \"double\", \"\",0\r\n Property: \"PreferedAngleX\", \"double\", \"\",0\r\n Property: \"PreferedAngleY\", \"double\", \"\",0\r\n Property: \"PreferedAngleZ\", \"double\", \"\",0\r\n Property: \"InheritType\", \"enum\", \"\",0\r\n Property: \"ScalingActive\", \"bool\", \"\",0\r\n Property: \"ScalingMin\", \"Vector3D\", \"\",1,1,1\r\n Property: \"ScalingMax\", \"Vector3D\", \"\",1,1,1\r\n Property: \"ScalingMinX\", \"bool\", \"\",0\r\n Property: \"ScalingMinY\", \"bool\", \"\",0\r\n Property: \"ScalingMinZ\", \"bool\", \"\",0\r\n Property: \"ScalingMaxX\", \"bool\", \"\",0\r\n Property: \"ScalingMaxY\", \"bool\", \"\",0\r\n Property: \"ScalingMaxZ\", \"bool\", \"\",0\r\n Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\r\n Property: \"LookAtProperty\", \"object\", \"\"\r\n Property: \"UpVectorProperty\", \"object\", \"\"\r\n Property: \"Show\", \"bool\", \"\",1\r\n Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\r\n Property: \"DefaultAttributeIndex\", \"int\", \"\",0\r\n Property: \"Color\", \"Color\", \"A+\",0,0,0\r\n Property: \"Size\", \"double\", \"\",100\r\n Property: \"Look\", \"enum\", \"\",1\r\n }`;\r\n\r\n// Default materials layer\r\nconst defaultMaterialLayer = `\r\n LayerElementMaterial: 0 {\r\n Version: 101\r\n Name: \"\"\r\n MappingInformationType: \"AllSame\"\r\n ReferenceInformationType: \"Direct\"\r\n Materials: 0\r\n }`;\r\n\r\n// Default layers block\r\nconst defaultLayerBlock = `\r\n Layer: 0 {\r\n Version: 100\r\n LayerElement: {\r\n Type: \"LayerElementNormal\"\r\n TypedIndex: 0\r\n }\r\n LayerElement: {\r\n Type: \"LayerElementColor\"\r\n TypedIndex: 0\r\n }\r\n LayerElement: {\r\n Type: \"LayerElementMaterial\"\r\n TypedIndex: 0\r\n }\r\n }`;\r\n\r\n/**\r\n * globalSettings info in output file.\r\n */\r\nconst globalSettings = `GlobalSettings: {\r\n Version: 1000\r\n Properties60: {\r\n Property: \"UpAxis\", \"int\", \"\",1\r\n Property: \"UpAxisSign\", \"int\", \"\",1\r\n Property: \"FrontAxis\", \"int\", \"\",2\r\n Property: \"FrontAxisSign\", \"int\", \"\",1\r\n Property: \"CoordAxis\", \"int\", \"\",0\r\n Property: \"CoordAxisSign\", \"int\", \"\",1\r\n Property: \"UnitScaleFactor\", \"double\", \"\",1\r\n }\r\n }`;\r\n\r\nexport default class FBXResult {\r\n constructor() {\r\n this._resultArray = [];\r\n this._info = null;\r\n }\r\n\r\n getResult(info) {\r\n this._info = info;\r\n this._resultArray.push(this._writeHeader());\r\n this._resultArray.push(this._writeDefinitions());\r\n this._resultArray.push(this._writeObjects(info.models, info.materials));\r\n this._resultArray.push(this._writeRelations());\r\n this._resultArray.push(this._writeConnections()); // connections between models and materials)\r\n this._info = null;\r\n return this._resultArray.join('');\r\n }\r\n\r\n /**\r\n * Add FBXHeader info to output file.\r\n * Some fields are really confusing, but it seems that all listed fields are very informative\r\n */\r\n _writeHeader() {\r\n const FBXHeaderVersion = 1003; // 1003 is some number which appears to present in many 6.1 ASCII files\r\n const FBXVersion = 6100; // Mandatory and only supported version\r\n const date = new Date();\r\n const timeStampVersion = 1000;\r\n const creator = `Miew FBX Exporter v${this._info.version}`; // Supposed to be an engine\r\n\r\n return `; FBX 6.1.0 project file\r\n; Created by ${creator} Copyright (c) 2015-2024 EPAM Systems, Inc.\r\n; For support please contact miew@epam.com\r\n; ----------------------------------------------------\r\n\r\nFBXHeaderExtension: {\r\n FBXHeaderVersion: ${FBXHeaderVersion}\r\n FBXVersion: ${FBXVersion}\r\n CreationTimeStamp: {\r\n Version: ${timeStampVersion}\r\n Year: ${date.getFullYear()}\r\n Month: ${date.getMonth() + 1}\r\n Day: ${date.getDate()}\r\n Hour: ${date.getHours()}\r\n Minute: ${date.getMinutes()}\r\n Second: ${date.getSeconds()}\r\n Millisecond: ${date.getMilliseconds()}\r\n }\r\n Creator: \"${creator}\"\r\n OtherFlags: {\r\n FlagPLE: 0\r\n }\r\n}\r\nCreationTime: \"${date}\"\r\nCreator: \"${creator}\"\r\n`;\r\n }\r\n\r\n /**\r\n * Add Definitions info to output file.\r\n * Not exactly sure if this section is template section (as it is in 7.4+) or it should every time be like this\r\n */\r\n _writeDefinitions() {\r\n return `\r\n; Object definitions\r\n;------------------------------------------------------------------\r\n\r\n${defaultDefinitions}\r\n`;\r\n }\r\n\r\n /**\r\n * Adding gathered information about Models to resulting string.\r\n * Reminder - there may be more then 1 model in scene, but we must place materials after ALL models.\r\n * @returns {string} string containing all models (vertices, indices, colors, normals etc)\r\n */\r\n _models() {\r\n const modelVersion = 232;\r\n let allModels = '';\r\n const { models } = this._info;\r\n for (let i = 0; i < models.length; ++i) {\r\n const model = models[i];\r\n const vertCount = model.verticesCount;\r\n allModels += `\r\n Model: \"Model::${this._info.name}_${i}\", \"Mesh\" {\r\n Version: ${modelVersion}\r\n ${defaultProperties}\r\n ${this._verticesIndices(model.positions, model.indices)}\r\n ${this._normalLayer(model.normals)}\r\n ${this._colorLayer(model.colors, vertCount)}\r\n ${defaultMaterialLayer}\r\n ${defaultLayerBlock}\r\n }`;\r\n }\r\n return allModels;\r\n }\r\n\r\n /**\r\n * Add Material info to result\r\n */\r\n _materials() {\r\n const materialVersion = 102;\r\n let allMaterials = '';\r\n const { materials } = this._info;\r\n for (let i = 0; i < materials.length; ++i) {\r\n const material = materials[i];\r\n allMaterials += `\r\n Material: \"Material::${this._info.name}_${i}_default\", \"\" {\r\n Version: ${materialVersion}\r\n ShadingModel: \"lambert\"\r\n MultiLayer: 0\r\n ${this._materialProperties(material)}\r\n }`;\r\n }\r\n return allMaterials;\r\n }\r\n\r\n /**\r\n * Add Objects info to output file.\r\n */\r\n _writeObjects() {\r\n return `\r\n; Object properties\r\n;------------------------------------------------------------------\r\n\r\nObjects: {\r\n ${this._models()}\r\n ${this._materials()}\r\n ${globalSettings}\r\n}\r\n`;\r\n }\r\n\r\n /**\r\n * Add Relations info to output file.\r\n */\r\n _writeRelations() {\r\n let modelsList = '';\r\n for (let i = 0; i < this._info.models.length; ++i) {\r\n modelsList += `\r\n Model: \"Model::${this._info.name}_${i}\", \"Mesh\" {\r\n }`;\r\n }\r\n let materialList = '';\r\n for (let i = 0; i < this._info.materials.length; ++i) {\r\n materialList += `\r\n Material: \"Material::${this._info.name}_${i}_default\", \"\" {\r\n }`;\r\n }\r\n\r\n return `\r\n; Object relations\r\n;------------------------------------------------------------------\r\n\r\nRelations: {\r\n ${modelsList}\r\n Model: \"Model::Producer Perspective\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Top\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Bottom\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Front\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Back\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Right\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Left\", \"Camera\" {\r\n }\r\n Model: \"Model::Camera Switcher\", \"CameraSwitcher\" {\r\n }\r\n ${materialList}\r\n}`;\r\n }\r\n\r\n /**\r\n * Add Connections info to output file.\r\n */\r\n _writeConnections() {\r\n let modelsList = '';\r\n const { name } = this._info;\r\n for (let i = 0; i < this._info.models.length; ++i) {\r\n modelsList += `\r\n Connect: \"OO\", \"Model::${name}_${i}\", \"Model::Scene\"`;\r\n }\r\n\r\n let materialList = '';\r\n for (let i = 0; i < this._info.materials.length; ++i) {\r\n materialList += `\r\n Connect: \"OO\", \"Material::${name}_${i}_default\", \"Model::${name}_${i}\"`;\r\n }\r\n\r\n return `\r\n; Object connections\r\n;------------------------------------------------------------------\r\n\r\nConnections: {\r\n ${modelsList}\r\n ${materialList}\r\n}`;\r\n }\r\n\r\n /**\r\n * Write float array to string with limited precision\r\n * @param {Float32Array} array - array to be fixed\r\n * @returns {String} String with fixed floats\r\n */\r\n _floatArrayToString(array) {\r\n const str = [];\r\n for (let i = 0; i < array.length; ++i) {\r\n str[i] = array[i].toFixed(6);\r\n }\r\n return str.join(',');\r\n }\r\n\r\n /**\r\n * Adding color layer to resulting file\r\n * @param {Float32Array} colorArray attribute\r\n * @param {number} vertCount - number of vertices in the model\r\n * @returns {string} color layer info\r\n */\r\n _colorLayer(colorArray, vertCount) {\r\n const layerElementColorNumber = 0;\r\n const layerElementColorVersion = 101;\r\n const layerElementColorName = '';\r\n const colorsStr = this._floatArrayToString(colorArray);\r\n // Mapping Information type and Reference Information type are mandatory for our Miew! Must not be changed\r\n // As said [..Array(...)] - fastest and easiest way to produce [0, 1, .....] array\r\n const colorIndices = [...Array(vertCount).keys()];\r\n return `\r\n LayerElementColor: ${layerElementColorNumber} {\r\n Version: ${layerElementColorVersion}\r\n Name: \"${layerElementColorName}\"\r\n MappingInformationType: \"ByVertice\"\r\n ReferenceInformationType: \"Direct\"\r\n Colors: ${colorsStr}\r\n ColorIndex: ${colorIndices}\r\n }`;\r\n }\r\n\r\n /**\r\n * Adding normal layer to resulting file\r\n * @param {Float32Array} normalArray attribute\r\n * @returns {string} normal layer info\r\n */\r\n _normalLayer(normalArray) {\r\n const layerElementNormalNumber = 0;\r\n const layerElementNormalVersion = 101;\r\n const layerElementNormalName = '';\r\n const normalsStr = this._floatArrayToString(normalArray);\r\n // Mapping Information type and Reference Information type are mandatory for our Miew! Must not be changed\r\n return `\r\n LayerElementNormal: ${layerElementNormalNumber} {\r\n Version: ${layerElementNormalVersion}\r\n Name: \"${layerElementNormalName}\"\r\n MappingInformationType: \"ByVertice\"\r\n ReferenceInformationType: \"Direct\"\r\n Normals: ${normalsStr}\r\n }`;\r\n }\r\n\r\n /**\r\n * Adding vertices and indices to resulting string\r\n * @return {string} resulting string in FBX notation\r\n */\r\n _verticesIndices(positions, indices) {\r\n const multiLayer = 0;\r\n const multiTake = 1;\r\n const shading = 'Y';\r\n const culling = 'CullingOff';\r\n const geometryVersion = 124;\r\n const vertStr = this._floatArrayToString(positions);\r\n /* About _correctArrayNotation: Float32Arrays will contains only Float32 numbers, which implies that it will be floating points with 17 numbers after point.\r\n * We cannot (and it's logically incorrect) save all this information, so we convert this Float32Array into Array-like object with numbers with only 6 numbers after point\r\n * Reminder - this is big memory loss (as we must save at one moment two arrays with similar information) */\r\n return `MultiLayer: ${multiLayer}\r\n MultiTake: ${multiTake}\r\n Shading: ${shading}\r\n Culling: \"${culling}\"\r\n Vertices: ${vertStr}\r\n PolygonVertexIndex: ${indices}\r\n GeometryVersion: ${geometryVersion}`;\r\n }\r\n\r\n /**\r\n * Forming material properties block.\r\n * @param {Object} material - given material of model\r\n * @returns {String} material properties string\r\n */\r\n _materialProperties(material) {\r\n return `Properties60: {\r\n Property: \"ShadingModel\", \"KString\", \"\", \"Lambert\"\r\n Property: \"MultiLayer\", \"bool\", \"\",0\r\n Property: \"EmissiveColor\", \"ColorRGB\", \"\",0,0,0\r\n Property: \"EmissiveFactor\", \"double\", \"\",0.0000\r\n Property: \"AmbientColor\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"AmbientFactor\", \"double\", \"\",0.0000\r\n Property: \"DiffuseColor\", \"ColorRGB\", \"\",${material.diffuse}\r\n Property: \"DiffuseFactor\", \"double\", \"\",1.0000\r\n Property: \"Bump\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TransparentColor\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"TransparencyFactor\", \"double\", \"\",0.0000\r\n Property: \"SpecularColor\", \"ColorRGB\", \"\",${material.specular}\r\n Property: \"SpecularFactor\", \"double\", \"\",1.0000\r\n Property: \"ShininessExponent\", \"double\", \"\",${material.shininess}\r\n Property: \"ReflectionColor\", \"ColorRGB\", \"\",0,0,0\r\n Property: \"ReflectionFactor\", \"double\", \"\",1\r\n Property: \"Ambient\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"Diffuse\", \"ColorRGB\", \"\",${material.diffuse}\r\n Property: \"Specular\", \"ColorRGB\", \"\",${material.specular}\r\n Property: \"Shininess\", \"double\", \"\",${material.shininess}\r\n Property: \"Opacity\", \"double\", \"\",${material.opacity}\r\n Property: \"Reflectivity\", \"double\", \"\",0\r\n }`;\r\n }\r\n}\r\n","import Exporter from './Exporter';\r\nimport FBXInfoExtractor from './fbx/FBXInfoExtractor';\r\nimport FBXResult from './fbx/FBXResult';\r\nimport ComplexVisual from '../../ComplexVisual';\r\n\r\nexport default class FBXExporter extends Exporter {\r\n constructor(source, options) {\r\n super(source, options);\r\n // Data\r\n this._data = source;\r\n this._version = options.miewVersion || '0.0-UNSPECIFIED';\r\n this._extractor = new FBXInfoExtractor();\r\n }\r\n\r\n /**\r\n * Entry point to exporter.\r\n */\r\n exportSync() {\r\n // Creating mandatory blocks\r\n const result = new FBXResult();\r\n if (!this._source) {\r\n return this._result;\r\n }\r\n\r\n const info = this._extractor.process(this._data);\r\n info.version = this._version;\r\n this._result = result.getResult(info);\r\n return this._result;\r\n }\r\n}\r\n\r\nFBXExporter.formats = ['fbx'];\r\nFBXExporter.SourceClass = ComplexVisual;\r\n","import ExporterList from './exporters/ExporterList';\r\n\r\nimport PDBExporter from './exporters/PDBExporter';\r\nimport FBXExporter from './exporters/FBXExporter';\r\n\r\nexport default new ExporterList([\r\n PDBExporter,\r\n FBXExporter,\r\n]);\r\n","import loaders from './loaders';\r\nimport parsers from './parsers';\r\nimport exporters from './exporters';\r\n\r\nexport default {\r\n loaders,\r\n parsers,\r\n exporters,\r\n};\r\n","/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nimport * as THREE from 'three';\r\nimport CSS2DObject from './CSS2DObject';\r\n\r\nconst tempColor = new THREE.Color();\r\n\r\nclass CSS2DRenderer {\r\n constructor() {\r\n this._width = 0;\r\n this._height = 0;\r\n this._widthHalf = 0;\r\n this._heightHalf = 0;\r\n\r\n this._vector = new THREE.Vector3();\r\n this._viewMatrix = new THREE.Matrix4();\r\n this._projectionMatrix = new THREE.Matrix4();\r\n\r\n this._domElement = document.createElement('div');\r\n this._domElement.style.overflow = 'hidden';\r\n this._domElement.style.position = 'absolute';\r\n this._domElement.style.top = '0';\r\n this._domElement.style.zIndex = '0'; // start a new Stacking Context to enclose all z-ordered children\r\n this._domElement.style.pointerEvents = 'none';\r\n }\r\n\r\n getElement() {\r\n return this._domElement;\r\n }\r\n\r\n reset() {\r\n const myNode = this.getElement();\r\n while (myNode.firstChild) {\r\n myNode.removeChild(myNode.firstChild);\r\n }\r\n }\r\n\r\n setSize(width, height) {\r\n this._width = width;\r\n this._height = height;\r\n\r\n this._widthHalf = this._width / 2;\r\n this._heightHalf = this._height / 2;\r\n\r\n this._domElement.style.width = `${width}px`;\r\n this._domElement.style.height = `${height}px`;\r\n }\r\n\r\n _renderObject(object, camera, scene) {\r\n function lerpColorAsHex(a, b, t) {\r\n tempColor.setHex(a);\r\n tempColor.lerp(b, t);\r\n return `#${tempColor.getHexString()}`;\r\n }\r\n\r\n function colorAsHex(a) {\r\n tempColor.setHex(a);\r\n return `#${tempColor.getHexString()}`;\r\n }\r\n\r\n if (object instanceof CSS2DObject) {\r\n this._vector.setFromMatrixPosition(object.matrixWorld);\r\n\r\n if (object.userData !== undefined && object.userData.offset !== undefined) {\r\n const localOffset = new THREE.Vector3(object.userData.offset.x, object.userData.offset.y, 0);\r\n this._vector.add(localOffset.multiplyScalar(object.matrixWorld.getMaxScaleOnAxis()));\r\n }\r\n\r\n this._vector.applyMatrix4(this._viewMatrix);\r\n\r\n const visibility = this._vector.z > -camera.near ? 'hidden' : 'visible';\r\n const zIndex = 10000 * (camera.far - (-this._vector.z)) / (camera.far - camera.near);\r\n\r\n const element = object.getElement();\r\n if (typeof scene.fog === 'undefined') {\r\n element.style.color = colorAsHex(object.userData.color);\r\n if (object.userData.background !== 'transparent') {\r\n element.style.background = colorAsHex(object.userData.background);\r\n }\r\n } else {\r\n const fogFactor = THREE.MathUtils.smoothstep(-this._vector.z, scene.fog.near, scene.fog.far);\r\n element.style.color = lerpColorAsHex(object.userData.color, scene.fog.color, fogFactor);\r\n if (object.userData.background !== 'transparent') {\r\n element.style.background = lerpColorAsHex(object.userData.background, scene.fog.color, fogFactor);\r\n }\r\n }\r\n\r\n this._vector.applyMatrix4(this._projectionMatrix);\r\n\r\n const style = `${object.userData !== {} ? object.userData.translation : 'translate(-50%, -50%) '\r\n }translate(${this._vector.x * this._widthHalf + this._widthHalf}px,${\r\n -this._vector.y * this._heightHalf + this._heightHalf}px)`;\r\n element.style.visibility = visibility;\r\n element.style.WebkitTransform = style;\r\n element.style.MozTransform = style;\r\n element.style.oTransform = style;\r\n element.style.transform = style;\r\n element.style.zIndex = Number(zIndex).toFixed(0);\r\n\r\n if (element.parentNode !== this._domElement) {\r\n this._domElement.appendChild(element);\r\n }\r\n }\r\n\r\n for (let i = 0, l = object.children.length; i < l; i++) {\r\n this._renderObject(object.children[i], camera, scene);\r\n }\r\n }\r\n\r\n render(scene, camera) {\r\n scene.updateMatrixWorld();\r\n\r\n if (camera.parent === null) {\r\n camera.updateMatrixWorld();\r\n }\r\n\r\n camera.matrixWorldInverse.copy(camera.matrixWorld).invert();\r\n\r\n this._viewMatrix.copy(camera.matrixWorldInverse);\r\n this._projectionMatrix.copy(camera.projectionMatrix);\r\n\r\n this._renderObject(scene, camera, scene);\r\n }\r\n}\r\nexport default CSS2DRenderer;\r\n","export default function getTopWindow() {\r\n // intercept the exception if we have cross-origin iframe\r\n try {\r\n if (window.top.location.href !== undefined) {\r\n return window.top;\r\n }\r\n } catch (e) {\r\n // provide fallback\r\n }\r\n return window;\r\n}\r\n","import * as THREE from 'three';\r\nimport Timer from '../Timer';\r\nimport settings from '../settings';\r\nimport EventDispatcher from '../utils/EventDispatcher';\r\nimport getTopWindow from '../utils/getTopWindow';\r\n\r\nconst VK_LEFT = 37;\r\nconst VK_UP = 38;\r\nconst VK_RIGHT = 39;\r\nconst VK_DOWN = 40;\r\n\r\nconst STATE = {\r\n NONE: -1, ROTATE: 0, TRANSLATE: 1, SCALE: 2, TRANSLATE_PIVOT: 3,\r\n};\r\n\r\n// pausing for this amount of time before releasing mouse button prevents inertial rotation (seconds)\r\nconst FULL_STOP_THRESHOLD = 0.1;\r\n\r\nconst quaternion = new THREE.Quaternion();\r\nconst matrix4 = new THREE.Matrix4();\r\n\r\n// pivot -- local offset of the rotation pivot point\r\nfunction ObjectHandler(objects, camera, pivot, options) {\r\n this.objects = objects;\r\n [this.object] = objects;\r\n this.camera = camera;\r\n this.pivot = pivot;\r\n this.axis = new THREE.Vector3(0, 0, 1);\r\n this.options = options;\r\n\r\n this.lastRotation = {\r\n axis: new THREE.Vector3(),\r\n angle: 0.0,\r\n };\r\n}\r\n\r\nObjectHandler.prototype._rotate = (function () {\r\n const p = new THREE.Vector3();\r\n const q = new THREE.Quaternion();\r\n const s = new THREE.Vector3();\r\n\r\n const m = new THREE.Matrix4();\r\n\r\n return function (quat) {\r\n const zeroPivot = (this.pivot.x === 0.0 && this.pivot.y === 0.0 && this.pivot.z === 0.0);\r\n\r\n m.copy(this.object.matrix);\r\n\r\n if (zeroPivot) {\r\n m.multiply(matrix4.makeRotationFromQuaternion(quat));\r\n } else {\r\n m.multiply(matrix4.makeTranslation(this.pivot.x, this.pivot.y, this.pivot.z));\r\n m.multiply(matrix4.makeRotationFromQuaternion(quat));\r\n m.multiply(matrix4.makeTranslation(-this.pivot.x, -this.pivot.y, -this.pivot.z));\r\n }\r\n\r\n m.decompose(p, q, s);\r\n\r\n // update objects\r\n if (!zeroPivot) {\r\n for (let i = 0; i < this.objects.length; ++i) {\r\n this.objects[i].position.copy(p);\r\n }\r\n }\r\n\r\n for (let j = 0; j < this.objects.length; ++j) {\r\n this.objects[j].quaternion.copy(q);\r\n this.objects[j].updateMatrix();\r\n }\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.setObjects = function (objects) {\r\n this.objects = objects;\r\n [this.object] = objects;\r\n};\r\n\r\nObjectHandler.prototype.rotate = (function () {\r\n const rot = {\r\n axis: new THREE.Vector3(),\r\n angle: 0.0,\r\n };\r\n\r\n return function (quat, mousePrevPos, mouseCurPos, aboutAxis) {\r\n this.mouse2rotation(rot, mousePrevPos, mouseCurPos, aboutAxis);\r\n quat.setFromAxisAngle(rot.axis, rot.angle);\r\n\r\n if (rot.angle) {\r\n this._rotate(quat);\r\n }\r\n\r\n this.lastRotation = rot;\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.translate = (function () {\r\n const dir = new THREE.Vector3();\r\n const pivot = new THREE.Vector3();\r\n\r\n return function (delta) {\r\n // reverse-project viewport movement to view coords (compensate for screen aspect ratio)\r\n dir.set(\r\n delta.x / this.camera.projectionMatrix.elements[0],\r\n delta.y / this.camera.projectionMatrix.elements[5],\r\n 0,\r\n );\r\n let dist = dir.length();\r\n dir.normalize();\r\n\r\n // transform movement direction to object local coords\r\n dir.transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n // visible translate distance shouldn't depend on camera-to-object distance\r\n pivot.copy(this.pivot);\r\n this.object.localToWorld(pivot);\r\n dist *= Math.abs(pivot.z - this.camera.position.z);\r\n\r\n // visible translate distance shouldn't depend on object scale\r\n dist /= this.object.matrixWorld.getMaxScaleOnAxis();\r\n\r\n // all objects are translated similar to principal object\r\n // (we assume they all have identical pivot and scale)\r\n for (let i = 0; i < this.objects.length; ++i) {\r\n this.objects[i].translateOnAxis(dir, dist);\r\n }\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.update = (function () {\r\n const axis = new THREE.Vector3();\r\n\r\n return function (timeSinceLastUpdate, timeSinceMove) {\r\n if (settings.now.autoRotation !== 0.0) {\r\n // auto-rotation with constant speed\r\n\r\n // if rotation axis is fixed or hasn't been defined yet\r\n if (settings.now.autoRotationAxisFixed || this.lastRotation.axis.length() === 0.0) {\r\n // use Y-axis (transformed to local object coords)\r\n axis.set(0, 1, 0).transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n } else {\r\n // use axis defined by last user rotation\r\n axis.copy(this.lastRotation.axis);\r\n }\r\n\r\n this._rotate(quaternion.setFromAxisAngle(axis, settings.now.autoRotation * timeSinceLastUpdate));\r\n return true;\r\n }\r\n\r\n if (this.options.intertia && this.lastRotation.angle) {\r\n // inertial object rotation\r\n const angle = this.lastRotation.angle * ((1.0 - this.options.dynamicDampingFactor) ** (40.0 * timeSinceMove));\r\n\r\n if (Math.abs(angle) <= this.options.intertiaThreshold) {\r\n this.lastRotation.angle = 0.0;\r\n } else {\r\n this._rotate(quaternion.setFromAxisAngle(this.lastRotation.axis, angle));\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.stop = function () {\r\n this.lastRotation.angle = 0.0;\r\n};\r\n\r\n// calculate (axis, angle) pair from mouse/touch movement\r\nObjectHandler.prototype.mouse2rotation = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n const eye = new THREE.Vector3();\r\n const eyeDirection = new THREE.Vector3();\r\n\r\n const cameraUpDirection = new THREE.Vector3();\r\n const cameraSidewaysDirection = new THREE.Vector3();\r\n\r\n const moveDirection = new THREE.Vector3();\r\n\r\n const mouseDelta = new THREE.Vector2();\r\n\r\n return function (rot, mousePrev, mouseCur, aboutAxis) {\r\n if (aboutAxis) {\r\n rot.axis.copy(this.axis);\r\n rot.angle = this.options.axisRotateFactor * (mouseCur.y - mousePrev.y);\r\n\r\n /* cool method that allows rotation around Z axis to be \"tied\" to mouse cursor\r\n\r\n res.axis.copy(this.axis);\r\n\r\n var pivot = this.pivot.clone();\r\n this.object.localToWorld(pivot);\r\n pivot.project(this.camera);\r\n\r\n var v1 = new THREE.Vector3(mousePrev.x, mousePrev.y, this.camera.position.z);\r\n v1.sub(pivot);\r\n var v2 = new THREE.Vector3(mouseCur.x, mouseCur.y, this.camera.position.z);\r\n v2.sub(pivot);\r\n\r\n v1.sub(res.axis.clone().multiplyScalar(v1.dot(res.axis)));\r\n v2.sub(res.axis.clone().multiplyScalar(v2.dot(res.axis)));\r\n\r\n var abs = v1.length() * v2.length();\r\n if (abs > 0) {\r\n res.angle = res.axis.dot(v1.cross(v2)) / abs;\r\n }\r\n */\r\n } else {\r\n mouseDelta.subVectors(mouseCur, mousePrev);\r\n const angle = mouseDelta.length();\r\n if (angle === 0.0) {\r\n return;\r\n }\r\n\r\n center.copy(this.pivot);\r\n this.object.localToWorld(center);\r\n eye.subVectors(this.camera.position, center);\r\n eyeDirection.copy(eye).normalize();\r\n\r\n cameraUpDirection.copy(this.camera.up).normalize();\r\n cameraSidewaysDirection.crossVectors(cameraUpDirection, eyeDirection).normalize();\r\n\r\n cameraUpDirection.setLength(mouseDelta.y);\r\n cameraSidewaysDirection.setLength(mouseDelta.x);\r\n\r\n moveDirection.copy(cameraUpDirection.add(cameraSidewaysDirection));\r\n\r\n rot.axis.crossVectors(moveDirection, eye);\r\n\r\n rot.angle = -angle * this.options.rotateFactor;\r\n }\r\n\r\n rot.axis.transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n // make sure angle is always positive (thus 'axis' defines both axis and direction of rotation)\r\n if (rot.angle < 0.0) {\r\n rot.axis.negate();\r\n rot.angle = -rot.angle;\r\n }\r\n };\r\n}());\r\n\r\nfunction ObjectControls(object, objectPivot, camera, domElement, getAltObj) {\r\n EventDispatcher.call(this);\r\n const self = this;\r\n\r\n this.object = object;\r\n this.objectPivot = objectPivot;\r\n this.camera = camera;\r\n this.domElement = (typeof domElement !== 'undefined') ? domElement : document;\r\n this.getAltObj = getAltObj;\r\n\r\n // API\r\n\r\n this.enabled = true;\r\n this.hotkeysEnabled = true;\r\n\r\n this.screen = {\r\n left: 0, top: 0, width: 0, height: 0,\r\n };\r\n\r\n this.options = {\r\n rotateFactor: Math.PI, // full screen slide (along short side) would roughly mean 180 deg. rotation\r\n axisRotateFactor: 4 * Math.PI, // full screen slide (along short side) would roughly mean 720 deg. rotation\r\n intertia: true,\r\n dynamicDampingFactor: 0.1,\r\n intertiaThreshold: 1e-3,\r\n };\r\n\r\n // internals\r\n\r\n this._state = STATE.NONE;\r\n\r\n this._mousePrevPos = new THREE.Vector2();\r\n this._mouseCurPos = new THREE.Vector2();\r\n\r\n this._mainObj = new ObjectHandler([this.object], this.camera, new THREE.Vector3(0, 0, 0), this.options);\r\n this._altObj = new ObjectHandler([this.object], this.camera, new THREE.Vector3(0, 0, 0), this.options);\r\n this._affectedObj = this._mainObj;\r\n this._isAltObjFreeRotationAllowed = true;\r\n this._isTranslationAllowed = true;\r\n this._isKeysTranslatingObj = false;\r\n\r\n this._pressedKeys = [];\r\n\r\n this._clock = new Timer();\r\n this._clock.start();\r\n this._lastUpdateTime = this._clock.getElapsedTime();\r\n\r\n // events\r\n this._listeners = [\r\n {\r\n obj: self.domElement,\r\n type: 'mousedown',\r\n handler(e) {\r\n self.mousedown(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseup',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousemove',\r\n handler(e) {\r\n self.mousemove(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousewheel',\r\n handler(e) {\r\n self.mousewheel(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'DOMMouseScroll',\r\n handler(e) {\r\n self.mousewheel(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseout',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchstart',\r\n handler(e) {\r\n self.touchstartend(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchend',\r\n handler(e) {\r\n self.touchstartend(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchmove',\r\n handler(e) {\r\n self.touchmove(e);\r\n },\r\n },\r\n {\r\n obj: self.getKeyBindObject(),\r\n type: 'keydown',\r\n handler(e) {\r\n self.keydownup(e);\r\n },\r\n },\r\n {\r\n obj: self.getKeyBindObject(),\r\n type: 'keyup',\r\n handler(e) {\r\n self.keydownup(e);\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'resize',\r\n handler() {\r\n self.handleResize();\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'blur',\r\n handler() {\r\n self.resetKeys();\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'contextmenu',\r\n handler(e) {\r\n self.contextmenu(e);\r\n },\r\n }];\r\n\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.addEventListener(l.type, l.handler);\r\n }\r\n\r\n this.handleResize();\r\n\r\n this.resetKeys();\r\n\r\n // force an update at start\r\n this.update();\r\n}\r\n\r\n// methods\r\n\r\nObjectControls.prototype = Object.create(EventDispatcher.prototype);\r\nObjectControls.prototype.constructor = ObjectControls;\r\n\r\nObjectControls.prototype.resetKeys = function () {\r\n this._pressedKeys[VK_LEFT] = false;\r\n this._pressedKeys[VK_UP] = false;\r\n this._pressedKeys[VK_RIGHT] = false;\r\n this._pressedKeys[VK_DOWN] = false;\r\n};\r\n\r\nObjectControls.prototype.contextmenu = function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n};\r\n\r\nObjectControls.prototype.handleResize = function () {\r\n if (this.domElement === document) {\r\n this.screen.left = 0;\r\n this.screen.top = 0;\r\n this.screen.width = window.innerWidth;\r\n this.screen.height = window.innerHeight;\r\n } else {\r\n const box = this.domElement.getBoundingClientRect();\r\n // adjustments come from similar code in the jquery offset() function\r\n const d = this.domElement.ownerDocument.documentElement;\r\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\r\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\r\n this.screen.width = box.width;\r\n this.screen.height = box.height;\r\n }\r\n};\r\n\r\nObjectControls.prototype.enable = function (enable) {\r\n this.enabled = enable;\r\n};\r\n\r\nObjectControls.prototype.enableHotkeys = function (enable) {\r\n this.hotkeysEnabled = enable;\r\n};\r\n\r\nObjectControls.prototype.allowTranslation = function (allow) {\r\n this._isTranslationAllowed = allow;\r\n};\r\n\r\nObjectControls.prototype.allowAltObjFreeRotation = function (allow) {\r\n this._isAltObjFreeRotationAllowed = allow;\r\n};\r\n\r\nObjectControls.prototype.keysTranslateObj = function (on) {\r\n this._isKeysTranslatingObj = on;\r\n};\r\n\r\nObjectControls.prototype.isEditingAltObj = function () {\r\n return ((this._state === STATE.ROTATE) || (this._state === STATE.TRANSLATE))\r\n && (this._affectedObj === this._altObj);\r\n};\r\n\r\n// convert page coords of mouse/touch to uniform coords with smaller side being [-0.5, 0.5]\r\n// (uniform coords keep direct proportion with screen distance travelled by mouse regardless of screen aspect ratio)\r\nObjectControls.prototype.convertMouseToOnCircle = function (coords, pageX, pageY) {\r\n const screenSize = Math.min(this.screen.width, this.screen.height);\r\n\r\n if (screenSize === 0) {\r\n coords.set(0, 0);\r\n return;\r\n }\r\n\r\n coords.set(\r\n ((pageX - this.screen.width * 0.5 - this.screen.left) / screenSize),\r\n ((0.5 * this.screen.height + this.screen.top - pageY) / screenSize),\r\n );\r\n};\r\n\r\n// convert page coords of mouse/touch to viewport coords with both sides being [-1, 1]\r\n// (those are non-uniform coords affected by screen aspect ratio)\r\nObjectControls.prototype.convertMouseToViewport = function (coords, pageX, pageY) {\r\n if (this.screen.width === 0 || this.screen.height === 0) {\r\n coords.set(0, 0);\r\n return;\r\n }\r\n\r\n coords.set(\r\n (2.0 * (pageX - this.screen.width * 0.5 - this.screen.left) / this.screen.width),\r\n (2.0 * (0.5 * this.screen.height + this.screen.top - pageY) / this.screen.height),\r\n );\r\n};\r\n\r\nObjectControls.prototype.stop = function () {\r\n this._mainObj.stop();\r\n this._altObj.stop();\r\n};\r\n\r\n// rotate object based on latest mouse/touch movement\r\nObjectControls.prototype.rotateByMouse = (function () {\r\n const quat = new THREE.Quaternion();\r\n\r\n return function (aboutZAxis) {\r\n this._affectedObj.rotate(quat, this._mousePrevPos, this._mouseCurPos, aboutZAxis);\r\n this.dispatchEvent({ type: 'change', action: 'rotate', quaternion: quat });\r\n };\r\n}());\r\n\r\n// rotate object by specified quaternion\r\nObjectControls.prototype.rotate = function (quat) {\r\n this.object.quaternion.multiply(quat);\r\n this.dispatchEvent({ type: 'change', action: 'rotate', quaternion: quat });\r\n};\r\n\r\n// get object's orientation\r\nObjectControls.prototype.getOrientation = function () {\r\n return this.object.quaternion;\r\n};\r\n\r\n// set object's orientation\r\nObjectControls.prototype.setOrientation = function (quat) {\r\n this.object.quaternion.copy(quat);\r\n};\r\n\r\n// translate object based on latest mouse/touch movement\r\nObjectControls.prototype.translate = (function () {\r\n const delta = new THREE.Vector2();\r\n return function () {\r\n delta.subVectors(this._mouseCurPos, this._mousePrevPos);\r\n this._affectedObj.translate(delta);\r\n this.dispatchEvent({ type: 'change', action: 'translate' });\r\n };\r\n}());\r\n\r\n// get object scale\r\nObjectControls.prototype.getScale = function () {\r\n return this.object.scale.x;\r\n};\r\n\r\n// set uniform object scale\r\nObjectControls.prototype.setScale = function (scale) {\r\n this.object.scale.set(scale, scale, scale);\r\n};\r\n\r\n// scale object by factor (factor should be greater than zero)\r\nObjectControls.prototype.scale = function (factor) {\r\n if (factor <= 0) {\r\n return;\r\n }\r\n this.setScale(this.object.scale.x * factor);\r\n this.dispatchEvent({ type: 'change', action: 'zoom', factor });\r\n};\r\n\r\nObjectControls.prototype.update = (function () {\r\n const shift = new THREE.Vector2();\r\n\r\n return function () {\r\n const curTime = this._clock.getElapsedTime();\r\n const timeSinceLastUpdate = curTime - this._lastUpdateTime;\r\n\r\n // update object handler\r\n if (this._state === STATE.NONE) {\r\n const timeSinceMove = curTime - this._lastMouseMoveTime;\r\n if (this._mainObj.update(timeSinceLastUpdate, timeSinceMove)\r\n || this._altObj.update(timeSinceLastUpdate, timeSinceMove)) {\r\n this.dispatchEvent({ type: 'change', action: 'auto' });\r\n }\r\n }\r\n\r\n // apply arrow keys\r\n if (this._isKeysTranslatingObj) {\r\n const speedX = Number(this._pressedKeys[VK_RIGHT]) - Number(this._pressedKeys[VK_LEFT]);\r\n const speedY = Number(this._pressedKeys[VK_UP]) - Number(this._pressedKeys[VK_DOWN]);\r\n if (speedX !== 0.0 || speedY !== 0.0) {\r\n const delta = timeSinceLastUpdate;\r\n\r\n // update object translation\r\n const altObj = this.getAltObj();\r\n if (altObj.objects.length > 0) {\r\n this._altObj.setObjects(altObj.objects);\r\n this._altObj.pivot = altObj.pivot;\r\n\r\n if ('axis' in altObj) {\r\n this._altObj.axis = altObj.axis.clone();\r\n } else {\r\n this._altObj.axis.set(0, 0, 1);\r\n }\r\n\r\n shift.set(delta * speedX, delta * speedY);\r\n this._altObj.translate(shift);\r\n this.dispatchEvent({ type: 'change', action: 'translate' });\r\n }\r\n }\r\n }\r\n\r\n this._lastUpdateTime = curTime;\r\n };\r\n}());\r\n\r\nObjectControls.prototype.reset = function () {\r\n this._state = STATE.NONE;\r\n\r\n this.object.quaternion.copy(quaternion.set(0, 0, 0, 1));\r\n};\r\n\r\n// listeners\r\n\r\nObjectControls.prototype.mousedown = function (event) {\r\n if (this.enabled === false || this._state !== STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this._state === STATE.NONE) {\r\n if (event.button === 0) {\r\n this._affectedObj.stop(); // can edit only one object at a time\r\n\r\n let workWithAltObj = false;\r\n\r\n if (event.altKey) {\r\n const altObj = this.getAltObj();\r\n workWithAltObj = (altObj.objects.length > 0);\r\n if (workWithAltObj) {\r\n this._altObj.setObjects(altObj.objects);\r\n this._altObj.pivot = altObj.pivot;\r\n\r\n if ('axis' in altObj) {\r\n this._altObj.axis = altObj.axis.clone();\r\n } else {\r\n this._altObj.axis.set(0, 0, 1);\r\n }\r\n }\r\n }\r\n\r\n this._affectedObj = workWithAltObj ? this._altObj : this._mainObj;\r\n\r\n this._state = (workWithAltObj && event.ctrlKey && this._isTranslationAllowed) ? STATE.TRANSLATE : STATE.ROTATE;\r\n } else if (event.button === 2) {\r\n this._state = STATE.TRANSLATE_PIVOT;\r\n }\r\n }\r\n\r\n if (this._state === STATE.ROTATE) {\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.pageX, event.pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n }\r\n\r\n if (this._state === STATE.TRANSLATE || this._state === STATE.TRANSLATE_PIVOT) {\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n }\r\n};\r\n\r\nObjectControls.prototype.mousemove = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (this._state) {\r\n case STATE.ROTATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.pageX, event.pageY);\r\n this.rotateByMouse((event.altKey && !this._isAltObjFreeRotationAllowed) || event.shiftKey);\r\n this._lastMouseMoveTime = this._clock.getElapsedTime();\r\n break;\r\n\r\n case STATE.TRANSLATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this.translate();\r\n break;\r\n\r\n case STATE.TRANSLATE_PIVOT:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this.translatePivotByMouse();\r\n break;\r\n\r\n default: break;\r\n }\r\n};\r\n\r\nObjectControls.prototype.mousewheel = function (event) {\r\n if (this.enabled === false || !settings.now.zooming || this._state !== STATE.NONE || event.shiftKey) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n let delta = 0;\r\n\r\n if (event.wheelDelta) {\r\n // WebKit / Opera / Explorer 9\r\n delta = event.wheelDelta / 40;\r\n } else if (event.detail) {\r\n // Firefox\r\n delta = -event.detail / 3;\r\n }\r\n\r\n let factor = 1.0 + delta * 0.05;\r\n factor = Math.max(factor, 0.01);\r\n this.scale(factor);\r\n};\r\n\r\nObjectControls.prototype.mouseup = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this._state = STATE.NONE;\r\n\r\n if (this._clock.getElapsedTime() - this._lastMouseMoveTime > FULL_STOP_THRESHOLD) {\r\n this._affectedObj.stop();\r\n }\r\n};\r\n\r\nObjectControls.prototype.touchstartend = function (event) {\r\n if (this.enabled === false) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (event.touches.length) {\r\n case 1:\r\n this._state = STATE.ROTATE;\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.touches[0].pageX, event.touches[0].pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n break;\r\n\r\n case 2: {\r\n // prevent inertial rotation\r\n this._mainObj.stop();\r\n this._altObj.stop();\r\n\r\n this._state = STATE.SCALE;\r\n const dx = event.touches[0].pageX - event.touches[1].pageX;\r\n const dy = event.touches[0].pageY - event.touches[1].pageY;\r\n this._touchDistanceCur = this._touchDistanceStart = Math.sqrt(dx * dx + dy * dy);\r\n this._scaleStart = this.object.scale.x;\r\n break;\r\n }\r\n\r\n default:\r\n this._state = STATE.NONE;\r\n }\r\n};\r\n\r\nObjectControls.prototype.touchmove = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (this._state) {\r\n case STATE.ROTATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.touches[0].pageX, event.touches[0].pageY);\r\n this.rotateByMouse(false);\r\n\r\n this._lastMouseMoveTime = this._clock.getElapsedTime();\r\n break;\r\n\r\n case STATE.SCALE:\r\n if (settings.now.zooming) {\r\n // update scale\r\n const dx = event.touches[0].pageX - event.touches[1].pageX;\r\n const dy = event.touches[0].pageY - event.touches[1].pageY;\r\n this._touchDistanceCur = Math.sqrt(dx * dx + dy * dy);\r\n const newScale = this._scaleStart * this._touchDistanceCur / this._touchDistanceStart;\r\n const factor = newScale / this.object.scale.x;\r\n this.scale(factor);\r\n }\r\n break;\r\n\r\n default:\r\n }\r\n};\r\n\r\nObjectControls.prototype.keydownup = function (event) {\r\n if (this.enabled === false || this.hotkeysEnabled === false) {\r\n return;\r\n }\r\n\r\n switch (event.keyCode) {\r\n case VK_LEFT:\r\n case VK_UP:\r\n case VK_RIGHT:\r\n case VK_DOWN:\r\n this._pressedKeys[event.keyCode] = (event.type === 'keydown');\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n default:\r\n }\r\n};\r\n\r\nObjectControls.prototype.getKeyBindObject = function () {\r\n return getTopWindow();\r\n};\r\n\r\nObjectControls.prototype.dispose = function () {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.removeEventListener(l.type, l.handler);\r\n }\r\n};\r\n\r\nObjectControls.prototype.translatePivotByMouse = (function () {\r\n const delta = new THREE.Vector2();\r\n return function () {\r\n delta.subVectors(this._mouseCurPos, this._mousePrevPos);\r\n this.translatePivotInWorld(settings.now.translationSpeed * delta.x, settings.now.translationSpeed * delta.y, 0);\r\n };\r\n}());\r\n\r\n// Translate in WorldCS, translation is scaled with root scale matrix\r\nObjectControls.prototype.translatePivotInWorld = function (x, y, z) {\r\n const pos = this.objectPivot.position;\r\n pos.applyMatrix4(this.object.matrixWorld);\r\n pos.setX(pos.x + x);\r\n pos.setY(pos.y + y);\r\n pos.setZ(pos.z + z);\r\n pos.applyMatrix4(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\n// Translate in ModelCS, x, y, z are Ang\r\nObjectControls.prototype.translatePivot = function (x, y, z) {\r\n const pos = this.objectPivot.position;\r\n pos.setX(pos.x + x);\r\n pos.setY(pos.y + y);\r\n pos.setZ(pos.z + z);\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\n// Set pivot\r\nObjectControls.prototype.setPivot = function (newPivot) {\r\n this.objectPivot.position.copy(newPivot);\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\nexport default ObjectControls;\r\n","import * as THREE from 'three';\r\nimport settings from '../settings';\r\nimport Timer from '../Timer';\r\nimport EventDispatcher from '../utils/EventDispatcher';\r\n\r\nfunction Picker(gfxObj, camera, domElement) {\r\n EventDispatcher.call(this);\r\n const self = this;\r\n\r\n this.gfxObj = gfxObj;\r\n this.camera = camera;\r\n this.domElement = (typeof domElement !== 'undefined') ? domElement : document;\r\n this.screen = {\r\n left: 0, top: 0, width: 0, height: 0,\r\n };\r\n this._lastMousePos = new THREE.Vector2(0, 0);\r\n this._mouseTotalDist = 0.0;\r\n this._lastClickBeginTime = -1000.0;\r\n this._lastClickPos = new THREE.Vector2(0, 0);\r\n this._clickBeginTime = 0.0;\r\n\r\n this._clock = new Timer();\r\n this._clock.start();\r\n\r\n this._listeners = [\r\n {\r\n obj: self.domElement,\r\n type: 'mousedown',\r\n handler(e) {\r\n self.mousedown(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseup',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousemove',\r\n handler(e) {\r\n self.mousemove(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchstart',\r\n handler(e) {\r\n self.touchstart(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchend',\r\n handler(e) {\r\n self.touchend(e);\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'resize',\r\n handler() {\r\n self.handleResize();\r\n },\r\n }];\r\n\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.addEventListener(l.type, l.handler);\r\n }\r\n\r\n this.handleResize();\r\n}\r\n\r\nPicker.prototype = Object.create(EventDispatcher.prototype);\r\nPicker.prototype.constructor = Picker;\r\n\r\nPicker.prototype.reset = function () {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n};\r\n\r\nPicker.prototype.handleResize = function () {\r\n if (this.domElement === document) {\r\n this.screen.left = 0;\r\n this.screen.top = 0;\r\n this.screen.width = window.innerWidth;\r\n this.screen.height = window.innerHeight;\r\n } else {\r\n const box = this.domElement.getBoundingClientRect();\r\n // adjustments come from similar code in the jquery offset() function\r\n const d = this.domElement.ownerDocument.documentElement;\r\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\r\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\r\n this.screen.width = box.width;\r\n this.screen.height = box.height;\r\n }\r\n};\r\n\r\nPicker.prototype.pickObject = function (screenPos) {\r\n if (!this.gfxObj) {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n return;\r\n }\r\n\r\n const { gfxObj } = this;\r\n const rayCaster = new THREE.Raycaster();\r\n rayCaster.ray.origin.setFromMatrixPosition(this.camera.matrixWorld);\r\n rayCaster.ray.direction.set(screenPos.x, screenPos.y, 0.5).unproject(this.camera).sub(rayCaster.ray.origin).normalize();\r\n\r\n const clipPlane = (settings.now.draft.clipPlane && this.clipPlaneValue) ? this.clipPlaneValue : Infinity;\r\n const fogFarPlane = (settings.now.fog && this.fogFarValue) ? this.fogFarValue : Infinity;\r\n const point = rayCaster.intersectVisibleObject(gfxObj, this.camera, clipPlane, fogFarPlane);\r\n if (!point) {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n return;\r\n }\r\n\r\n let picked = {};\r\n if (point.residue || point.atom) {\r\n const residue = point.residue || point.atom.residue;\r\n if (settings.now.pick === 'chain') {\r\n picked = { chain: residue.getChain() };\r\n } else if (settings.now.pick === 'molecule') {\r\n picked = { molecule: residue.getMolecule() };\r\n } else if (point.residue || settings.now.pick === 'residue') {\r\n picked = { residue };\r\n } else if (point.atom) {\r\n picked = { atom: point.atom };\r\n }\r\n }\r\n this.picked = picked;\r\n this.dispatchEvent({ type: 'newpick', obj: picked });\r\n};\r\n\r\nPicker.prototype.getMouseInViewport = function (pageX, pageY) {\r\n return new THREE.Vector2(\r\n (pageX - this.screen.left) / this.screen.width * 2 - 1,\r\n -(pageY - this.screen.top) / this.screen.height * 2 + 1,\r\n );\r\n};\r\n\r\nPicker.prototype.mousedown = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.button === 0) {\r\n this._lastMousePos = this.getMouseInViewport(event.pageX, event.pageY);\r\n this._mouseTotalDist = 0.0;\r\n this._clickBeginTime = this._clock.getElapsedTime();\r\n }\r\n};\r\n\r\nPicker.prototype.mousemove = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const pos = this.getMouseInViewport(event.pageX, event.pageY);\r\n this._mouseTotalDist += pos.sub(this._lastMousePos).length();\r\n};\r\n\r\nPicker.prototype.mouseup = function (event) {\r\n const self = this;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.button === 0) {\r\n if (this._mouseTotalDist < 0.01) {\r\n const curTime = this._clock.getElapsedTime();\r\n const curPos = this.getMouseInViewport(event.pageX, event.pageY);\r\n\r\n const timeSinceLastClickBegin = curTime - this._lastClickBeginTime;\r\n if (timeSinceLastClickBegin < 0.7) {\r\n const clickDist = new THREE.Vector2().subVectors(curPos, this._lastClickPos);\r\n if (clickDist.length() < 0.01) {\r\n // it's a double click\r\n this.dispatchEvent({ type: 'dblclick', obj: this.picked });\r\n\r\n this._lastClickPos = curPos;\r\n this._lastClickBeginTime = -1000; // this click cannot serve as first click in double-click\r\n return;\r\n }\r\n }\r\n\r\n setTimeout(() => {\r\n self.pickObject(curPos);\r\n }, 0);\r\n\r\n this._lastClickPos = curPos;\r\n this._lastClickBeginTime = this._clickBeginTime;\r\n }\r\n }\r\n};\r\n\r\nPicker.prototype.touchstart = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.touches.length === 1) {\r\n this._lastTouchdownPos = this.getMouseInViewport(event.touches[0].pageX, event.touches[0].pageY);\r\n }\r\n};\r\n\r\nPicker.prototype.touchend = function (event) {\r\n const self = this;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.touches.length === 0\r\n && event.changedTouches.length === 1) {\r\n const pos = this.getMouseInViewport(event.changedTouches[0].pageX, event.changedTouches[0].pageY);\r\n const dist = pos.sub(this._lastTouchdownPos).length();\r\n if (dist < 0.01) {\r\n setTimeout(() => {\r\n self.pickObject(self._lastTouchdownPos);\r\n }, 0);\r\n }\r\n }\r\n};\r\n\r\nPicker.prototype.dispose = function () {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.removeEventListener(l.type, l.handler);\r\n }\r\n};\r\n\r\nexport default Picker;\r\n","import * as THREE from 'three';\r\n\r\nclass Axes {\r\n constructor(target, targetCamera) {\r\n this._target = target;\r\n this._targetCamera = targetCamera;\r\n this._camera = new THREE.PerspectiveCamera(targetCamera.fov, targetCamera.aspect, 1, 100);\r\n this._object = new THREE.AxesHelper(1);\r\n this._scene = new THREE.Scene();\r\n this._scene.add(this._object);\r\n this._full = new THREE.Vector2();\r\n\r\n this._update();\r\n }\r\n\r\n _update() {\r\n const { fov } = this._targetCamera;\r\n const camera = this._camera;\r\n camera.aspect = this._targetCamera.aspect;\r\n camera.setMinimalFov(fov);\r\n camera.setDistanceToFit(1.0, fov);\r\n camera.updateProjectionMatrix();\r\n\r\n this._object.quaternion.copy(this._target.quaternion);\r\n }\r\n\r\n render(renderer) {\r\n this._update();\r\n\r\n renderer.getSize(this._full);\r\n const width = this._full.width * 0.25;\r\n const height = this._full.height * 0.25;\r\n\r\n const { autoClear } = renderer;\r\n renderer.autoClear = false;\r\n renderer.setViewport(0.0, 0.0, width, height);\r\n renderer.clear(false, true, false);\r\n renderer.render(this._scene, this._camera);\r\n renderer.setViewport(0, 0, this._full.width, this._full.height);\r\n renderer.autoClear = autoClear;\r\n }\r\n}\r\nexport default Axes;\r\n","import * as THREE from 'three';\r\nimport SecondaryStructureColorer from './colorers/SecondaryStructureColorer';\r\n\r\nconst cDataOffset = 12;\r\nconst cFirstMask = 0x0FFFFF00;\r\nconst cFirstShift = 8;\r\nconst cSecMask1 = 0x000000FF;\r\nconst cSecShift1 = 12;\r\nconst cSecMask2 = 0xFFF00000;\r\nconst cSecShift2 = 20;\r\nconst cThirdMask = 0x000FFFFF;\r\nconst cStrMask = 0xF0000000;\r\nconst cStrShift = 28;\r\nconst c219 = 1 << 19;\r\nconst c220 = 1 << 20;\r\n\r\nconst cHelixIdx = 1;\r\nconst cSheetIdx = 2;\r\nconst secTypes = ['helix', 'strand'];\r\nconst cSecNames = ['fs', 'ps', 'ns', 'us'];\r\n\r\nfunction _createSecondary(strArray, complex) {\r\n const residues = complex._residues;\r\n const nRes = residues.length;\r\n const resid = new Uint8Array(nRes);\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, n = strArray.length; i < n; ++i) {\r\n const atom = atoms[i];\r\n resid[atom.residue._index] = strArray[i];\r\n }\r\n\r\n const secondary = [];\r\n let rIdx = 0;\r\n while (rIdx < nRes) {\r\n if (resid[rIdx] !== 0) {\r\n const start = rIdx;\r\n const val = resid[rIdx];\r\n while (rIdx < nRes - 1 && resid[rIdx + 1] === val\r\n && residues[rIdx].isConnected(residues[rIdx + 1])) {\r\n ++rIdx;\r\n }\r\n secondary.push({ start, end: rIdx, type: secTypes[val - 1] });\r\n }\r\n ++rIdx;\r\n }\r\n return secondary;\r\n}\r\n\r\nfunction fromUInt20ToInt20(uint20) {\r\n return uint20 >= c219 ? uint20 - c220 : uint20;\r\n}\r\n\r\nclass FrameInfo {\r\n constructor(complex, payload, callbacks) {\r\n this._complex = complex;\r\n this._secondary = null;\r\n this.isLoading = false;\r\n this._framesRange = {\r\n start: 0,\r\n end: -1,\r\n };\r\n this.frameIsReady = false;\r\n this._buffer = null;\r\n this._frameRequest = null;\r\n this._callbacks = callbacks;\r\n if (typeof payload === 'function') {\r\n this._framesRequestLength = 1;\r\n this._downloadDataFn = payload;\r\n } else {\r\n this.parseBinaryData(payload, true);\r\n }\r\n this.reset();\r\n this.setFrame(0);\r\n }\r\n\r\n _prepareBuffer(framesStart, framesEnd) {\r\n if (framesStart === undefined || framesStart === null) {\r\n framesStart = 0;\r\n }\r\n if (framesEnd === undefined || framesEnd === null) {\r\n framesEnd = framesStart + this._framesRequestLength;\r\n }\r\n if (this._framesCount !== undefined) {\r\n framesEnd = Math.min(this._framesCount - 1, framesEnd);\r\n }\r\n if (this._downloadDataFn) {\r\n const self = this;\r\n const onDone = function (data) {\r\n self.isLoading = false;\r\n if (self._callbacks && typeof self._callbacks.onLoadStatusChanged === 'function') {\r\n self._callbacks.onLoadStatusChanged();\r\n }\r\n self._buffer = {\r\n data,\r\n state: 'ready',\r\n start: framesStart,\r\n end: framesEnd,\r\n };\r\n if (self._frameRequest !== null) {\r\n const idx = self._frameRequest;\r\n self._frameRequest = null;\r\n self.setFrame(idx);\r\n }\r\n };\r\n const onFail = function () {\r\n self.isLoading = false;\r\n if (self._callbacks && typeof self._callbacks.onError === 'function') {\r\n self._callbacks.onError('Streaming failed');\r\n }\r\n };\r\n if (!this._buffer) {\r\n this._buffer = {};\r\n }\r\n this._buffer.state = 'downloading';\r\n this.isLoading = true;\r\n if (self._callbacks && typeof self._callbacks.onLoadStatusChanged === 'function') {\r\n self._callbacks.onLoadStatusChanged();\r\n }\r\n this._downloadDataFn({ start: framesStart, end: framesEnd + 1 }, onDone, onFail);\r\n }\r\n }\r\n\r\n _parseBuffer() {\r\n if (this._buffer && this._buffer.state === 'ready') {\r\n this._framesRange = {\r\n start: this._buffer.start,\r\n end: this._buffer.end,\r\n };\r\n this.parseBinaryData(this._buffer.data, false);\r\n let _bufferRequestStart = (this._buffer.end + 1) % this._framesCount;\r\n if (_bufferRequestStart >= this._framesCount) {\r\n _bufferRequestStart = 0;\r\n }\r\n this._buffer = {\r\n state: 'none',\r\n };\r\n this._prepareBuffer(_bufferRequestStart, _bufferRequestStart + this._framesRequestLength);\r\n if (this._frameRequest !== null) {\r\n const idx = this._frameRequest;\r\n this._frameRequest = null;\r\n this.setFrame(idx);\r\n }\r\n }\r\n }\r\n\r\n parseBinaryData(arrayBuffer) {\r\n const dataView = new DataView(arrayBuffer);\r\n let offset = 0;\r\n const atomsCount = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const framesCount = dataView.getUint32(offset, true);\r\n this._framesCount = framesCount;\r\n this._framesRange.end = this._framesRange.end > 0\r\n ? Math.min(this._framesRange.end, framesCount - 1) : framesCount - 1;\r\n offset += 4;\r\n this._atomsCount = atomsCount;\r\n const maxSize = 1024 * 1024; // 1 MB\r\n this._framesRequestLength = Math.ceil(maxSize / (atomsCount * 8));\r\n const chunkedFramesCount = this._framesRange.end - this._framesRange.start + 1;\r\n if (atomsCount !== this._complex._atoms.length\r\n || arrayBuffer.byteLength !== cDataOffset + chunkedFramesCount * atomsCount * 8) {\r\n throw new Error();\r\n }\r\n const complex = this._complex;\r\n let timeStep = dataView.getUint32(offset, true);\r\n let iName = 0;\r\n while (timeStep > 1000 && iName < cSecNames.length - 1) {\r\n timeStep /= 1000;\r\n ++iName;\r\n }\r\n\r\n this._timeStep = `${timeStep.toString()} ${cSecNames[iName]}`;\r\n offset += 4;\r\n const secondary = [];\r\n const posData = new Float32Array(chunkedFramesCount * atomsCount * 3);\r\n let coordIdx = 0;\r\n const secondaryArr = new Int8Array(atomsCount);\r\n for (let j = 0; j < chunkedFramesCount; ++j) {\r\n for (let i = 0; i < atomsCount; ++i) {\r\n const hiWord = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const loWord = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const str = (loWord & cStrMask) >>> cStrShift;\r\n const x = fromUInt20ToInt20(((loWord & cFirstMask) >>> cFirstShift) >> 0);\r\n const y = fromUInt20ToInt20((((loWord & cSecMask1) << cSecShift1)\r\n | ((hiWord & cSecMask2) >>> cSecShift2)) >> 0);\r\n const z = fromUInt20ToInt20((hiWord & cThirdMask) >> 0);\r\n secondaryArr[i] = 0;\r\n if (str > 0 && str < 4) {\r\n secondaryArr[i] = cHelixIdx;\r\n } else if (str === 4) {\r\n secondaryArr[i] = cSheetIdx;\r\n }\r\n posData[coordIdx++] = x / 100;\r\n posData[coordIdx++] = y / 100;\r\n posData[coordIdx++] = z / 100;\r\n }\r\n secondary.push(_createSecondary(secondaryArr, complex));\r\n }\r\n this._secondaryData = secondary;\r\n this._data = posData;\r\n }\r\n\r\n nextFrame() {\r\n this.setFrame((this._currFrame + 1) % this._framesCount);\r\n }\r\n\r\n needsColorUpdate(colorer) {\r\n return colorer instanceof SecondaryStructureColorer;\r\n }\r\n\r\n getAtomColor(colorer, atom) {\r\n return colorer.getResidueColor(this._residues[atom.residue._index], this._complex);\r\n }\r\n\r\n getResidueColor(colorer, residue) {\r\n return colorer.getResidueColor(this._residues[residue._index], this._complex);\r\n }\r\n\r\n _updateSecondary() {\r\n let i;\r\n const myResidues = this._residues;\r\n let n = myResidues.length;\r\n for (i = 0; i < n; ++i) {\r\n myResidues[i]._secondary = null;\r\n }\r\n const sec = this._secondaryData[this._currFrame - this._framesRange.start];\r\n for (i = 0, n = sec.length; i < n; ++i) {\r\n const oldSec = sec[i];\r\n const { start, end } = oldSec;\r\n const nSec = {\r\n _start: myResidues[start],\r\n _end: myResidues[end],\r\n type: oldSec.type,\r\n generic: oldSec.generic,\r\n };\r\n for (let j = start; j <= end; ++j) {\r\n myResidues[j]._secondary = nSec;\r\n }\r\n }\r\n }\r\n\r\n reset() {\r\n const compRes = this._complex._residues;\r\n const n = compRes.length;\r\n this._residues = new Array(n);\r\n const myResidues = this._residues;\r\n const getSec = function () {\r\n return this._secondary;\r\n };\r\n for (let i = 0; i < n; ++i) {\r\n myResidues[i] = {\r\n _type: compRes[i]._type,\r\n _isValid: compRes[i]._isValid,\r\n _controlPoint: null,\r\n _wingVector: null,\r\n _secondary: null,\r\n getSecondary: getSec,\r\n };\r\n }\r\n }\r\n\r\n setFrame(frameIdx) {\r\n this.frameIsReady = false;\r\n if (frameIdx >= this._framesRange.start && frameIdx <= this._framesRange.end) {\r\n this._currFrame = frameIdx;\r\n this._cachedResidues = false;\r\n this._updateSecondary();\r\n this.frameIsReady = true;\r\n } else {\r\n this._frameRequest = frameIdx;\r\n if (!this._buffer) {\r\n this._prepareBuffer(frameIdx);\r\n } else {\r\n const self = this;\r\n switch (this._buffer.state) {\r\n case 'none':\r\n this._prepareBuffer(frameIdx);\r\n break;\r\n case 'ready':\r\n self._parseBuffer();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n disableEvents() {\r\n this._callbacks = null;\r\n }\r\n\r\n /**\r\n * Returns link to atom pos vector, clone it if needed\r\n */\r\n\r\n static _vec = new THREE.Vector3();\r\n\r\n getAtomPos(atomIdx) {\r\n const vec = FrameInfo._vec;\r\n const self = this;\r\n const data = self._data;\r\n const idx = (self._atomsCount * (self._currFrame - self._framesRange.start) + atomIdx) * 3;\r\n vec.set(data[idx], data[idx + 1], data[idx + 2]);\r\n return vec;\r\n }\r\n\r\n getResidues() {\r\n if (this._cachedResidues) {\r\n return this._residues;\r\n }\r\n this._complex.updateToFrame(this);\r\n return this._residues;\r\n }\r\n}\r\nexport default FrameInfo;\r\n","import _ from 'lodash';\r\nimport settings from '../../settings';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\n\r\n/**\r\n * Create new scene object.\r\n *\r\n * @param {array=} params - Object required params.\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the colorer after its creation.\r\n *\r\n * @exports SceneObject\r\n * @this SceneObject\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all scene objects that are not reps.\r\n */\r\nclass SceneObject {\r\n constructor(params, opts) {\r\n if (this.constructor === SceneObject) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Object's options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.params = params;\r\n this.opts = _.merge(utils.deriveDeep(settings.now.objects[this.type], true), opts);\r\n this.needsRebuild = false;\r\n this._mesh = null;\r\n this.id = null;\r\n }\r\n\r\n /**\r\n * Get object identification, probably with options.\r\n * @returns {Object} field type contains type information, params - object's formal parameters,\r\n * opts - changed options\r\n * Options are returned if they were changed during or after object creation.\r\n */\r\n identify() {\r\n const result = {\r\n type: this.type,\r\n params: this.params,\r\n };\r\n const diff = utils.objectsDiff(this.opts, settings.now.modes[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n result.opts = diff;\r\n }\r\n return result;\r\n }\r\n\r\n toString() {\r\n const paramsStr = `o=${this.type},${this.params.join(',')}`;\r\n const optsStr = utils.compareOptionsWithDefaults(this.opts, settings.defaults.objects[this.type]);\r\n return paramsStr + optsStr;\r\n }\r\n\r\n getGeometry() {\r\n return this._mesh;\r\n }\r\n\r\n destroy() {\r\n if (this._mesh) {\r\n gfxutils.destroyObject(this._mesh);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Scene object identifier.\r\n * @type {string}\r\n */\r\nSceneObject.prototype.type = '__';\r\n\r\nexport default SceneObject;\r\n","import * as THREE from 'three';\r\nimport SceneObject from './SceneObject';\r\nimport meshutils from '../meshutils';\r\nimport UberMaterial from '../shaders/UberMaterial';\r\nimport meshes from '../meshes/meshes';\r\nimport settings from '../../settings';\r\n\r\nclass LinesObj extends SceneObject {\r\n constructor(params, opts) {\r\n super(params, opts);\r\n if (params.length < 2) {\r\n throw new Error('Wrong number of argumets on line object creation!');\r\n }\r\n [this._id1, this._id2] = params;\r\n }\r\n\r\n _getAtomFromName(complex, atomId) {\r\n const err = ' - Wrong atom format it must be \\'#CHAIN_NAME.#RESIDUE_NUMBER.#ATOM_NAME\\' (e.g. \\'A.38.CO1\\')';\r\n const atom1 = complex.getAtomByFullname(atomId);\r\n if (!atom1) {\r\n throw new Error(atomId + err);\r\n }\r\n return atom1;\r\n }\r\n\r\n build(complex) {\r\n const geom = new THREE.BufferGeometry();\r\n this._atom1 = this._getAtomFromName(complex, this._id1);\r\n this._atom2 = this._getAtomFromName(complex, this._id2);\r\n\r\n const p1 = this._atom1.position;\r\n const p2 = this._atom2.position;\r\n const vertices = new Float32Array([\r\n p1.x, p1.y, p1.z,\r\n p2.x, p2.y, p2.z,\r\n ]);\r\n\r\n geom.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n geom.computeBoundingBox();\r\n\r\n this._line = new meshes.Line(geom, new UberMaterial({\r\n lights: false,\r\n overrideColor: true,\r\n dashedLine: true,\r\n fogTransparent: settings.now.bg.transparent,\r\n }));\r\n this._line.computeLineDistances();\r\n this._line.material.setUberOptions({\r\n fixedColor: new THREE.Color(this.opts.color),\r\n dashedLineSize: this.opts.dashSize,\r\n dashedLinePeriod: this.opts.dashSize + this.opts.gapSize,\r\n });\r\n this._line.material.updateUniforms();\r\n\r\n this._line.raycast = function (_raycaster, _intersects) {};\r\n this._mesh = this._line;\r\n const transforms = complex.getTransforms();\r\n if (transforms.length > 0) {\r\n this._mesh = new THREE.Group();\r\n this._mesh.add(this._line);\r\n meshutils.applyTransformsToMeshes(this._mesh, transforms);\r\n }\r\n }\r\n\r\n updateToFrame(frameData) {\r\n if (!this._atom1 || !this._atom2 || !this._line) {\r\n return;\r\n }\r\n\r\n const geo = this._line.geometry;\r\n geo.vertices[0].copy(frameData.getAtomPos(this._atom1.index));\r\n geo.vertices[1].copy(frameData.getAtomPos(this._atom2.index));\r\n this._line.computeLineDistances();\r\n geo.computeBoundingSphere();\r\n\r\n geo.verticesNeedUpdate = true;\r\n }\r\n}\r\n\r\nLinesObj.prototype.constructor = LinesObj;\r\nLinesObj.prototype.type = 'line';\r\n\r\nexport default LinesObj;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './Outline.frag';\r\n\r\nclass OutlineMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n // add depth outline\r\n super(params);\r\n\r\n const settings = {\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n srcDepthTex: { type: 't', value: null },\r\n srcTexSize: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n color: { type: 'v3', value: null },\r\n threshold: { type: 'f', value: null },\r\n opacity: { type: 'f', value: 1.0 },\r\n thickness: { type: 'v2', value: new THREE.Vector2(1, 1) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: true,\r\n depthTest: false,\r\n depthWrite: false,\r\n };\r\n\r\n this.setValues(settings);\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n this.depth = source.depth;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n const defines = {};\r\n\r\n if (this.depth) {\r\n defines.DEPTH_OUTLINE = 1;\r\n }\r\n\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nOutlineMaterial.prototype.depth = false;\r\n\r\nexport default OutlineMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './FXAA.frag';\r\n\r\nclass FXAAMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n bgColor: { type: 'c', value: new THREE.Color(0xffffff) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n this.depth = source.depth;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n\r\n if (this.bgTransparent) {\r\n defines.BG_TRANSPARENT = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nFXAAMaterial.prototype.bgTransparent = false;\r\n\r\nexport default FXAAMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AO.frag';\r\nimport noise from '../noiseTexture';\r\n\r\nconst _samplesKernel = [\r\n // hemisphere samples adopted to sphere\r\n new THREE.Vector3(0.295184, 0.077723, 0.068429),\r\n new THREE.Vector3(-0.271976, -0.365221, 0.838363),\r\n new THREE.Vector3(0.547713, 0.467576, 0.488515),\r\n new THREE.Vector3(0.662808, -0.031733, 0.584758),\r\n new THREE.Vector3(-0.025717, 0.218955, 0.657094),\r\n new THREE.Vector3(-0.310153, -0.365223, 0.370701),\r\n new THREE.Vector3(-0.101407, -0.006313, 0.747665),\r\n new THREE.Vector3(-0.769138, 0.360399, 0.086847),\r\n new THREE.Vector3(-0.271988, -0.275140, 0.905353),\r\n new THREE.Vector3(0.096740, -0.566901, 0.700151),\r\n new THREE.Vector3(0.562872, -0.735136, 0.094647),\r\n new THREE.Vector3(0.379877, 0.359278, 0.190061),\r\n new THREE.Vector3(0.519064, -0.023055, 0.405068),\r\n new THREE.Vector3(-0.301036, 0.114696, 0.088885),\r\n new THREE.Vector3(-0.282922, 0.598305, 0.487214),\r\n new THREE.Vector3(-0.181859, 0.251670, 0.679702),\r\n new THREE.Vector3(-0.191463, -0.635818, 0.512919),\r\n new THREE.Vector3(-0.293655, 0.427423, 0.078921),\r\n new THREE.Vector3(-0.267983, 0.680534, 0.132880),\r\n new THREE.Vector3(0.139611, 0.319637, 0.477439),\r\n new THREE.Vector3(-0.352086, 0.311040, 0.653913),\r\n new THREE.Vector3(0.321032, 0.805279, 0.487345),\r\n new THREE.Vector3(0.073516, 0.820734, 0.414183),\r\n new THREE.Vector3(-0.155324, 0.589983, 0.411460),\r\n new THREE.Vector3(0.335976, 0.170782, 0.527627),\r\n new THREE.Vector3(0.463460, -0.355658, 0.167689),\r\n new THREE.Vector3(0.222654, 0.596550, 0.769406),\r\n new THREE.Vector3(0.922138, -0.042070, 0.147555),\r\n new THREE.Vector3(-0.727050, -0.329192, 0.369826),\r\n new THREE.Vector3(-0.090731, 0.533820, 0.463767),\r\n new THREE.Vector3(-0.323457, -0.876559, 0.238524),\r\n new THREE.Vector3(-0.663277, -0.372384, 0.342856),\r\n];\r\n\r\nclass AOMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n noiseTexture: { type: 't', value: noise.noiseTexture },\r\n noiseTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / noise.noiseWidth, 1.0 / noise.noiseHeight) },\r\n diffuseTexture: { type: 't', value: null },\r\n normalTexture: { type: 't', value: null },\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n camNearFar: { type: 'v2', value: new THREE.Vector2(1.0, 10.0) },\r\n projMatrix: { type: 'mat4', value: new THREE.Matrix4() },\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n samplesKernel: { type: 'v3v', value: _samplesKernel },\r\n kernelRadius: { type: 'f', value: 1.0 },\r\n depthThreshold: { type: 'f', value: 1.0 },\r\n factor: { type: 'f', value: 1.0 },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n }\r\n}\r\n\r\nexport default AOMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AOHorBlur.frag';\r\n\r\nconst _kernelOffsets = [-2.0, -1.0, 0.0, 1.0, 2.0];\r\n\r\nclass AOHorBlurMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n aoMap: { type: 't', value: null },\r\n samplesOffsets: { type: 'fv1', value: _kernelOffsets },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n }\r\n}\r\n\r\nexport default AOHorBlurMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AOVertBlurWithBlend.frag';\r\n\r\nconst _kernelOffsets = [-2.0, -1.0, 0.0, 1.0, 2.0];\r\n\r\nclass AOVertBlurWithBlendMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n diffuseTexture: { type: 't', value: null },\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n aoMap: { type: 't', value: null },\r\n samplesOffsets: { type: 'fv1', value: _kernelOffsets },\r\n projMatrix: { type: 'mat4', value: new THREE.Matrix4() },\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n fogNearFar: { type: 'v2', value: new THREE.Vector2(100.0, 100.0) },\r\n fogColor: { type: 'v4', value: new THREE.Vector4(0.0, 0.5, 0.0, 1.0) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n\r\n if (this.useFog) {\r\n defines.USE_FOG = 1;\r\n }\r\n if (this.fogTransparent) {\r\n defines.FOG_TRANSPARENT = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nAOVertBlurWithBlendMaterial.prototype.useFog = true;\r\nAOVertBlurWithBlendMaterial.prototype.fogTransparent = false;\r\n\r\nexport default AOVertBlurWithBlendMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './Anaglyph.frag';\r\n\r\nclass AnaglyphMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n const settings = {\r\n uniforms: {\r\n srcL: { type: 't', value: null },\r\n srcR: { type: 't', value: null },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n };\r\n this.setValues(settings);\r\n }\r\n}\r\n\r\nexport default AnaglyphMaterial;\r\n","import * as THREE from 'three';\r\nimport settings from '../settings';\r\n\r\nclass View {\r\n constructor() {\r\n this.position = new THREE.Vector3(0, 0, 0);\r\n this.scale = 1;\r\n this.orientation = new THREE.Quaternion(0, 0, 0, 1);\r\n }\r\n\r\n set(position, scale, orientation) {\r\n this.position = position;\r\n this.scale = scale;\r\n this.orientation = orientation;\r\n }\r\n}\r\n\r\nconst _transitionTime = 1.5; // in seconds\r\n\r\nexport default class ViewInterpolator {\r\n setup(startView, endView) {\r\n this._startTime = undefined;\r\n this._endTime = undefined;\r\n this._isPaused = false;\r\n\r\n this._srcView = startView;\r\n this._dstView = endView;\r\n this._isMoving = false;\r\n }\r\n\r\n isMoving() {\r\n return this._isMoving;\r\n }\r\n\r\n wasStarted() {\r\n return typeof this._startTime !== 'undefined' && typeof this._endTime !== 'undefined';\r\n }\r\n\r\n start() {\r\n this._startTime = Date.now();\r\n const transTime = settings.now.interpolateViews ? _transitionTime * 1000 : 0;\r\n this._endTime = this._startTime + transTime;\r\n this._isMoving = true;\r\n }\r\n\r\n getCurrentView() {\r\n if (typeof this._srcView === 'undefined' || typeof this._dstView === 'undefined'\r\n || !this._isMoving || !this.wasStarted()) {\r\n return { success: false };\r\n }\r\n\r\n let view = this.createView();\r\n const time = Date.now();\r\n if (time > this._endTime) {\r\n view = this._dstView;\r\n this.reset();\r\n return { success: true, view };\r\n }\r\n\r\n const factor = (time - this._startTime) / (this._endTime - this._startTime);\r\n view.position.copy(this._srcView.position);\r\n view.position.lerp(this._dstView.position, factor);\r\n view.scale = (1 - factor) * this._srcView.scale + factor * this._dstView.scale;\r\n view.orientation.copy(this._srcView.orientation);\r\n view.orientation.slerp(this._dstView.orientation, factor);\r\n return { success: true, view };\r\n }\r\n\r\n reset() {\r\n this._startTime = this._endTime = 0;\r\n this._isMoving = false;\r\n }\r\n\r\n pause() {\r\n if (!this._isPaused) {\r\n this.setup(this.getCurrentView().view, this._dstView);\r\n this._isPaused = true;\r\n }\r\n }\r\n\r\n resume() {\r\n this._isPaused = false;\r\n }\r\n\r\n createView() {\r\n return new View();\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport makeContextDependent from './makeContextDependent';\r\n\r\nconst MAX_COOKIE_LEN = 4000;\r\nconst COUNT_SUFFIX = 'Cnt';\r\n\r\nfunction _chunkString(string, chunkLen) {\r\n const l = string.length;\r\n const chunks = [];\r\n for (let c = 0, lc = 0; lc < l; c++, lc += chunkLen) {\r\n chunks[c] = string.slice(lc, lc + chunkLen);\r\n }\r\n return chunks;\r\n}\r\n\r\n/**\r\n * Create new context dependent Cookie holder object.\r\n * @param context\r\n * @param {Object} opts - options\r\n * @param {string} opts.path - cookie path\r\n * @constructor\r\n */\r\nfunction Cookies(context, opts) {\r\n this.context = context;\r\n this._opts = _.merge({\r\n path: '/',\r\n }, opts);\r\n}\r\n\r\nmakeContextDependent(Cookies.prototype);\r\n\r\n/**\r\n * Remove cookie by the name.\r\n * @param key\r\n */\r\nCookies.prototype.removeCookie = function (key) {\r\n const cntKey = this._toCount(key);\r\n let cntVal = this._getSimpleCookie(cntKey);\r\n if (!cntVal) {\r\n this._removeSimpleCookie(key);\r\n return;\r\n }\r\n this._removeSimpleCookie(cntKey);\r\n cntVal = parseInt(cntVal, 10);\r\n for (let i = 0; i < cntVal; ++i) {\r\n this._removeSimpleCookie(key + i);\r\n }\r\n};\r\n\r\n/**\r\n * Set new cookie value. Automatically splits\r\n * values that are too large into multiple cookies.\r\n * @param key\r\n * @param value\r\n */\r\nCookies.prototype.setCookie = function (key, value) {\r\n this.removeCookie(key);\r\n value = encodeURIComponent(value);\r\n const values = _chunkString(value, MAX_COOKIE_LEN - key.length - 1);\r\n const cntVal = values.length;\r\n if (cntVal === 1) {\r\n this._setSimpleCookie(key, value);\r\n return;\r\n }\r\n const cntKey = this._toCount(key);\r\n this._setSimpleCookie(cntKey, cntVal.toString());\r\n for (let i = 0; i < cntVal; ++i) {\r\n this._setSimpleCookie(key + i, values[i]);\r\n }\r\n};\r\n\r\n/**\r\n * Obtain the value of a compound cookie.\r\n * @param key\r\n */\r\nCookies.prototype.getCookie = function (key) {\r\n const cntKey = this._toCount(key);\r\n let cntVal = this._getSimpleCookie(cntKey);\r\n if (!cntVal) {\r\n return this._getSimpleCookie(key);\r\n }\r\n cntVal = parseInt(cntVal, 10);\r\n const value = [];\r\n for (let i = 0; i < cntVal; ++i) {\r\n value[i] = this._getSimpleCookie(key + i);\r\n }\r\n return value.join('');\r\n};\r\n\r\nCookies.prototype._toCount = function (key) {\r\n return key + COUNT_SUFFIX;\r\n};\r\n\r\nCookies.prototype._removeSimpleCookie = function (key) {\r\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;\r\n};\r\n\r\nCookies.prototype._getExpirationDate = function () {\r\n const today = new Date();\r\n const EXP_PERIOD_YEARS = 10;\r\n today.setFullYear(today.getFullYear() + EXP_PERIOD_YEARS);\r\n return today;\r\n};\r\n\r\nCookies.prototype._setSimpleCookie = function (key, value) {\r\n document.cookie = `${key}=${value\r\n };expires=${this._getExpirationDate().toUTCString()\r\n };path=${this._opts.path}`;\r\n};\r\n\r\nCookies.prototype._getSimpleCookie = function (key) {\r\n const matches = document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`));\r\n return matches ? decodeURIComponent(matches[1]) : '';\r\n};\r\n\r\nCookies.prototype._exists = function (key) {\r\n return document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`));\r\n};\r\n\r\nexport default Cookies;\r\n","/*\r\n * Toggling WebVR is done through button.click because of limitations on calling requestPresent in webVR:\r\n * VRDisplay::requestPresent should be called from user gesture:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestPresent\r\n */\r\nexport default function (webVRPoC) {\r\n function showEnterVR(button) {\r\n button.style.display = '';\r\n button.style.cursor = 'pointer';\r\n button.style.left = 'calc(50% - 50px)';\r\n button.style.width = '100px';\r\n\r\n button.textContent = 'ENTER VR';\r\n\r\n let currentSession = null;\r\n\r\n function onSessionEnded(/* event */) {\r\n currentSession.removeEventListener('end', onSessionEnded);\r\n button.textContent = 'ENTER VR';\r\n currentSession = null;\r\n }\r\n\r\n function onSessionStarted(session) {\r\n session.addEventListener('end', onSessionEnded);\r\n webVRPoC._gfx.renderer.xr.setReferenceSpaceType('local');\r\n webVRPoC._gfx.renderer.xr.setSession(session);\r\n button.textContent = 'EXIT VR';\r\n currentSession = session;\r\n }\r\n\r\n button.onmouseenter = function () { button.style.opacity = '1.0'; };\r\n button.onmouseleave = function () { button.style.opacity = '0.5'; };\r\n\r\n button.onclick = function () {\r\n if (currentSession === null) {\r\n // WebXR's requestReferenceSpace only works if the corresponding feature\r\n // was requested at session creation time. For simplicity, just ask for\r\n // the interesting ones as optional features, but be aware that the\r\n // requestReferenceSpace call will fail if it turns out to be unavailable.\r\n // ('local' is always available for immersive sessions and doesn't need to\r\n // be requested separately.)\r\n\r\n const sessionInit = { optionalFeatures: ['local-floor', 'bounded-floor'] };\r\n navigator.xr.requestSession('immersive-vr', sessionInit).then(onSessionStarted);\r\n webVRPoC.moveSceneBehindHeadset();\r\n } else {\r\n currentSession.end();\r\n }\r\n };\r\n }\r\n\r\n function showWebXRNotFound(button) {\r\n button.style.display = '';\r\n button.style.cursor = 'auto';\r\n button.style.left = 'calc(50% - 75px)';\r\n button.style.width = '150px';\r\n button.textContent = 'VR NOT FOUND';\r\n button.onmouseenter = null;\r\n button.onmouseleave = null;\r\n button.onclick = null;\r\n }\r\n\r\n function stylizeElement(element) {\r\n element.style.position = 'absolute';\r\n element.style.bottom = '20px';\r\n element.style.padding = '12px 6px';\r\n element.style.border = '1px solid #fff';\r\n element.style.borderRadius = '4px';\r\n element.style.background = 'transparent';\r\n element.style.color = '#fff';\r\n element.style.font = 'normal 13px sans-serif';\r\n element.style.textAlign = 'center';\r\n element.style.opacity = '0.5';\r\n element.style.outline = 'none';\r\n element.style.zIndex = '999';\r\n }\r\n\r\n if ('xr' in navigator) {\r\n const button = document.createElement('button');\r\n button.style.display = 'none';\r\n stylizeElement(button);\r\n navigator.xr.isSessionSupported('immersive-vr').then((supported) => (\r\n supported ? showEnterVR(button) : showWebXRNotFound(button)\r\n ));\r\n return button;\r\n }\r\n const message = document.createElement('a');\r\n message.href = 'https://webvr.info';\r\n message.innerHTML = 'WEBXR NOT SUPPORTED';\r\n message.style.left = 'calc(50% - 90px)';\r\n message.style.width = '180px';\r\n message.style.textDecoration = 'none';\r\n stylizeElement(message);\r\n return message;\r\n}\r\n","import * as THREE from 'three';\r\nimport createWebVRButton from './createWebVRButton';\r\nimport gfxutils from '../gfxutils';\r\nimport logger from '../../utils/logger';\r\nimport settings from '../../settings';\r\nimport UberMaterial from '../shaders/UberMaterial';\r\n\r\nexport default class WebVRPoC {\r\n constructor(onToggle) {\r\n this._mainCamera = new THREE.PerspectiveCamera();\r\n this._button = null;\r\n this._onToggle = onToggle;\r\n\r\n this._molContainer = new gfxutils.RCGroup();\r\n this._user = new gfxutils.RCGroup();\r\n this._scalingPivot = new THREE.Object3D();\r\n this._user.add(this._scalingPivot);\r\n\r\n this._controller1 = null;\r\n this._controller2 = null;\r\n this._pressedGripsCounter = 0;\r\n this._distance = 0;\r\n\r\n this._gfx = null;\r\n }\r\n\r\n startScalingByControllers() {\r\n // reset scale\r\n this._distance = this._controller1.position.distanceTo(this._controller2.position);\r\n gfxutils.getMiddlePoint(this._controller1.position, this._controller2.position, this._scalingPivot.position);\r\n this._scalingPivot.scale.set(1, 1, 1);\r\n this._scalingPivot.updateMatrix();\r\n this._scalingPivot.updateMatrixWorld();\r\n // link molecule to pivot\r\n this._scalingPivot.addSavingWorldTransform(this._molContainer);\r\n }\r\n\r\n stopScalingByControllers() {\r\n this._gfx.scene.addSavingWorldTransform(this._molContainer);\r\n }\r\n\r\n handleGripsDown(event) {\r\n this._pressedGripsCounter++;\r\n if (this._pressedGripsCounter === 2) {\r\n this.startScalingByControllers();\r\n } else if (this._pressedGripsCounter === 1) {\r\n event.target.addSavingWorldTransform(this._molContainer);\r\n }\r\n }\r\n\r\n handleGripsUp(event) {\r\n this._pressedGripsCounter--;\r\n if (this._pressedGripsCounter === 1) {\r\n this.stopScalingByControllers();\r\n // reattach molecule to other controller\r\n const anotherController = event.target === this._controller1 ? this._controller2 : this._controller1;\r\n anotherController.addSavingWorldTransform(this._molContainer);\r\n } else if (this._pressedGripsCounter === 0) {\r\n this._gfx.scene.addSavingWorldTransform(this._molContainer);\r\n }\r\n }\r\n\r\n enable(gfx) {\r\n if (!gfx) {\r\n logger.warn('WebVR couldn\\'t be enabled, because gfx is not defined');\r\n return;\r\n }\r\n this._gfx = gfx;\r\n const { renderer, camera } = gfx;\r\n if (!renderer) {\r\n throw new Error('No renderer is available to toggle WebVR');\r\n }\r\n if (!camera) {\r\n throw new Error('No camera is available to toggle WebVR');\r\n }\r\n\r\n // enable xr in renderer\r\n renderer.xr.enabled = true;\r\n // add button for turning vr mode\r\n if (!this._button) {\r\n this._button = createWebVRButton(this);\r\n document.body.appendChild(this._button);\r\n } else {\r\n this._button.style.display = 'block';\r\n }\r\n // store fog setting\r\n this._mainFog = settings.now.fog;\r\n settings.set('fog', false);\r\n\r\n this._plugVRNodesIntoScene(gfx, renderer);\r\n this._setControllersListeners();\r\n\r\n // make some Miew job\r\n if (this._onToggle) {\r\n this._onToggle(true);\r\n }\r\n }\r\n\r\n _plugVRNodesIntoScene(gfx, renderer) {\r\n // store common scene camera\r\n this._mainCamera.copy(gfx.camera);\r\n // add hierarchical structure for webVR into scene\r\n gfx.scene.add(this._user);\r\n // turn on webvr transformation\r\n gfx.scene.add(this._molContainer);\r\n this._molContainer.add(gfx.root);\r\n\r\n this._controller1 = renderer.xr.getController(0);\r\n this._controller2 = renderer.xr.getController(1);\r\n const mesh = this._createControllerMesh();\r\n this._controller1.add(mesh);\r\n this._controller2.add(mesh.clone());\r\n this._user.add(this._controller1);\r\n this._user.add(this._controller2);\r\n }\r\n\r\n _setControllersListeners() {\r\n this._controller1.addEventListener('selectstart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller1.addEventListener('selectend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n this._controller2.addEventListener('selectstart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller2.addEventListener('selectend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n\r\n this._controller1.addEventListener('squeezestart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller1.addEventListener('squeezeend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n this._controller2.addEventListener('squeezestart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller2.addEventListener('squeezeend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n }\r\n\r\n disable() {\r\n if (!this._gfx) {\r\n return;\r\n }\r\n const { renderer, camera } = this._gfx;\r\n if (!renderer) {\r\n throw new Error('No renderer is available to toggle WebVR');\r\n }\r\n\r\n // nullify webxr callback for animation frame\r\n renderer.setAnimationLoop(null);\r\n const session = renderer.xr.getSession();\r\n if (session) {\r\n session.end();\r\n }\r\n renderer.xr.enabled = false;\r\n // remove button of VR entering\r\n if (this._button) {\r\n this._button.style.display = 'none';\r\n }\r\n // restore fog param\r\n settings.set('fog', this._mainFog);\r\n\r\n this._unplugVRNodesFromScene(camera);\r\n\r\n // make some Miew job\r\n if (this._onToggle) {\r\n this._onToggle(false);\r\n }\r\n }\r\n\r\n _unplugVRNodesFromScene(camera) {\r\n // restore common camera\r\n if (this._mainCamera && camera) {\r\n camera.copy(this._mainCamera);\r\n }\r\n // turn off webvr transformation\r\n const root = this._molContainer.children[0];\r\n if (root) {\r\n this._gfx.scene.add(root);\r\n }\r\n this._molContainer.parent.remove(this._molContainer);\r\n if (this._user) {\r\n this._gfx.scene.remove(this._user);\r\n }\r\n // free scene nodes\r\n this._molContainer = null;\r\n this._user = null;\r\n this._scalingPivot = null;\r\n this._user = null;\r\n this._controller1 = null;\r\n this._controller2 = null;\r\n }\r\n\r\n _createControllerMesh() {\r\n // visualize controllers with cylinders\r\n const geometry = new THREE.CylinderGeometry(0.04, 0.04, 0.3);\r\n const material = new UberMaterial({ lights: false, overrideColor: true });\r\n material.setUberOptions({ fixedColor: new THREE.Color(0x4444ff) });\r\n material.updateUniforms();\r\n const cylinder = new THREE.Mesh(geometry, material);\r\n cylinder.rotateX(-Math.PI / 2);\r\n return cylinder;\r\n }\r\n\r\n updateMoleculeScale() {\r\n if (!this._controller1 || !this._controller2) {\r\n return;\r\n }\r\n\r\n const self = this;\r\n // update molecule scaling by controllers\r\n if (self._pressedGripsCounter === 2) {\r\n // recalc scaling pivot\r\n gfxutils.getMiddlePoint(self._controller1.position, self._controller2.position, self._scalingPivot.position);\r\n // recalc scaler\r\n const dist = self._controller1.position.distanceTo(self._controller2.position);\r\n const scaler = dist / self._distance;\r\n self._scalingPivot.scale.multiplyScalar(scaler);\r\n // save cur distance for next frame\r\n self._distance = dist;\r\n }\r\n }\r\n\r\n /**\r\n * Reposition molecule right before the camera.\r\n * @note The proper way is to initiate headset in the place of common Miew's camera.\r\n * But threejs limitations on setting new XRReferenceSpace enforce the molecule repositioning\r\n * Hope, something will change.\r\n */\r\n moveSceneBehindHeadset() {\r\n const gfx = this._gfx;\r\n const { camera } = gfx;\r\n\r\n // set container position in camera space\r\n const container = this._molContainer;\r\n container.matrix.identity();\r\n container.position.set(0, 0, -4.0);\r\n container.updateMatrix();\r\n\r\n // update container world matrix\r\n container.matrixWorld.multiplyMatrices(camera.matrixWorld, container.matrix);\r\n // readd to scene\r\n gfx.scene.addSavingWorldTransform(container);\r\n if (this._onToggle) {\r\n this._onToggle(true);\r\n }\r\n }\r\n\r\n getCanvas() {\r\n const gfx = this._gfx;\r\n return (gfx && gfx.renderer) ? gfx.renderer.domElement : null;\r\n }\r\n}\r\n","/* global PACKAGE_VERSION:false */\r\nimport _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport { Spinner } from 'spin.js';\r\nimport Stats from './gfx/Stats';\r\nimport utils from './utils';\r\nimport JobHandle from './utils/JobHandle';\r\nimport options from './options';\r\nimport settings from './settings';\r\nimport chem from './chem';\r\nimport Visual from './Visual';\r\nimport ComplexVisual from './ComplexVisual';\r\nimport Complex from './chem/Complex';\r\nimport VolumeVisual from './VolumeVisual';\r\nimport io from './io/io';\r\nimport modes from './gfx/modes';\r\nimport colorers from './gfx/colorers';\r\nimport palettes from './gfx/palettes';\r\nimport materials from './gfx/materials';\r\nimport Representation from './gfx/Representation';\r\nimport CSS2DRenderer from './gfx/CSS2DRenderer';\r\nimport ObjectControls from './ui/ObjectControls';\r\nimport Picker from './ui/Picker';\r\nimport Axes from './gfx/Axes';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport meshutils from './gfx/meshutils';\r\nimport FrameInfo from './gfx/FrameInfo';\r\nimport meshes from './gfx/meshes/meshes';\r\nimport LinesObject from './gfx/objects/LinesObj';\r\nimport UberMaterial from './gfx/shaders/UberMaterial';\r\nimport OutlineMaterial from './gfx/shaders/OutlineMaterial';\r\nimport FXAAMaterial from './gfx/shaders/FXAAMaterial';\r\nimport AOMaterial from './gfx/shaders/AOMaterial';\r\nimport AOHorBlurMaterial from './gfx/shaders/AOHorBlurMaterial';\r\nimport AOVertBlurWithBlendMaterial from './gfx/shaders/AOVertBlurWithBlendMaterial';\r\nimport AnaglyphMaterial from './gfx/shaders/AnaglyphMaterial';\r\nimport VolumeMaterial from './gfx/shaders/VolumeMaterial';\r\nimport ViewInterpolator from './gfx/ViewInterpolator';\r\nimport EventDispatcher from './utils/EventDispatcher';\r\nimport logger from './utils/logger';\r\nimport Cookies from './utils/Cookies';\r\nimport capabilities from './gfx/capabilities';\r\nimport WebVRPoC from './gfx/vr/WebVRPoC';\r\nimport vertexScreenQuadShader from './gfx/shaders/ScreenQuad.vert';\r\nimport fragmentScreenQuadFromDistTex from './gfx/shaders/ScreenQuadFromDistortionTex.frag';\r\nimport getTopWindow from './utils/getTopWindow';\r\n\r\nconst {\r\n selectors,\r\n Atom,\r\n Residue,\r\n Chain,\r\n Molecule,\r\n} = chem;\r\n\r\nconst EDIT_MODE = { COMPLEX: 0, COMPONENT: 1, FRAGMENT: 2 };\r\n\r\nconst LOADER_NOT_FOUND = 'Could not find suitable loader for this source';\r\nconst PARSER_NOT_FOUND = 'Could not find suitable parser for this source';\r\n\r\n// Color management changed a lot in threejs 152+ version.\r\n// To keep miew colors we disable the new color management system\r\nTHREE.ColorManagement.enabled = false;\r\n\r\nconst { createElement } = utils;\r\n\r\nfunction updateFogRange(fog, center, radius) {\r\n fog.near = center - radius * settings.now.fogNearFactor;\r\n fog.far = center + radius * settings.now.fogFarFactor;\r\n}\r\n\r\nfunction removeExtension(fileName) {\r\n const dot = fileName.lastIndexOf('.');\r\n if (dot >= 0) {\r\n fileName = fileName.substr(0, dot);\r\n }\r\n return fileName;\r\n}\r\n\r\nfunction hasValidResidues(complex) {\r\n let hasValidRes = false;\r\n complex.forEachComponent((component) => {\r\n component.forEachResidue((residue) => {\r\n if (residue._isValid) {\r\n hasValidRes = true;\r\n }\r\n });\r\n });\r\n return hasValidRes;\r\n}\r\n\r\nfunction reportProgress(log, action, percent) {\r\n const TOTAL_PERCENT = 100;\r\n if (percent !== undefined) {\r\n log.debug(`${action}... ${Math.floor(percent * TOTAL_PERCENT)}%`);\r\n } else {\r\n log.debug(`${action}...`);\r\n }\r\n}\r\n\r\nfunction chooseFogColor() {\r\n return settings.now.fogColorEnable ? settings.now.fogColor : settings.now.bg.color;\r\n}\r\n\r\n// ////////////////////////////////////////////////////////////////////////////\r\n\r\n/**\r\n * Main 3D Molecular Viewer class.\r\n *\r\n * @param {object} opts - Viewer options.\r\n * @param {HTMLElement=} opts.container - DOM element that serves as a viewer container.\r\n * @param {object=} opts.settings - An object with properties to override default settings.\r\n * @param {string=} opts.settingsCookie='settings' - The name of the cookie to save current settings to.\r\n * @param {string=} opts.cookiePath='/' - The path option for cookies. Defaults to root.\r\n *\r\n * @exports Miew\r\n * @constructor\r\n */\r\nfunction Miew(opts) {\r\n EventDispatcher.call(this);\r\n this._opts = _.merge({\r\n settingsCookie: 'settings',\r\n cookiePath: '/',\r\n }, opts);\r\n /** @type {?object} */\r\n this._gfx = null;\r\n /** @type {ViewInterpolator} */\r\n this._interpolator = new ViewInterpolator();\r\n /** @type {HTMLElement} */\r\n this._container = (opts && opts.container)\r\n || document.getElementById('miew-container')\r\n || _.head(document.getElementsByClassName('miew-container'))\r\n || document.body;\r\n /** @type {HTMLElement} */\r\n this._containerRoot = this._container;\r\n\r\n /** @type {boolean} */\r\n this._running = false;\r\n /** @type {boolean} */\r\n this._halting = false;\r\n /** @type {boolean} */\r\n this._building = false;\r\n /** @type {boolean} */\r\n this._needRender = true;\r\n /** @type {boolean} */\r\n this._hotKeysEnabled = true;\r\n\r\n /** @type {Settings} */\r\n this.settings = settings;\r\n const log = logger;\r\n log.console = DEBUG;\r\n log.level = DEBUG ? 'debug' : 'info';\r\n /**\r\n * @type {Logger}\r\n * @example\r\n * miew.logger.addEventListener('message', function _onLogMessage(evt) {\r\n * console.log(evt.message);\r\n * });\r\n */\r\n this.logger = log;\r\n\r\n this._cookies = new Cookies(this);\r\n this.restoreSettings();\r\n if (opts && opts.settings) {\r\n this.settings.set(opts.settings);\r\n }\r\n\r\n /** @type {?Spinner} */\r\n this._spinner = null;\r\n /** @type {JobHandle[]} */\r\n this._loading = [];\r\n /** @type {?number}\r\n * @deprecated until Animation system refactoring\r\n */\r\n this._animInterval = null;\r\n\r\n /** @type {object} */\r\n this._visuals = {};\r\n /** @type {?string} */\r\n this._curVisualName = null;\r\n\r\n /** @type {array} */\r\n this._objects = [];\r\n\r\n /** @type {object} */\r\n this._sourceWindow = null;\r\n\r\n this.reset();\r\n\r\n if (this._repr) {\r\n log.debug(`Selected ${this._repr.mode.name} mode with ${this._repr.colorer.name} colorer.`);\r\n }\r\n\r\n const self = this;\r\n Miew.registeredPlugins.forEach((plugin) => {\r\n plugin.call(self);\r\n });\r\n\r\n this._initOnSettingsChanged();\r\n}\r\n\r\nMiew.prototype = Object.create(EventDispatcher.prototype);\r\nMiew.prototype.constructor = Miew;\r\n\r\nMiew.prototype.getMaxRepresentationCount = function () {\r\n return ComplexVisual.NUM_REPRESENTATION_BITS;\r\n};\r\n\r\n/**\r\n * Replace viewer container contents with a DOM element.\r\n * @param {HTMLElement} container - parent container.\r\n * @param {HTMLElement} element - DOM element to show.\r\n * @private\r\n */\r\nfunction _setContainerContents(container, element) {\r\n const parent = container;\r\n while (parent.firstChild) {\r\n parent.removeChild(parent.firstChild);\r\n }\r\n parent.appendChild(element);\r\n}\r\n\r\n/**\r\n * Update Shadow Camera target position and frustum.\r\n * @private\r\n */\r\nMiew.prototype._updateShadowCamera = (function () {\r\n const shadowMatrix = new THREE.Matrix4();\r\n const direction = new THREE.Vector3();\r\n const OBB = { center: new THREE.Vector3(), halfSize: new THREE.Vector3() };\r\n\r\n return function () {\r\n this._gfx.scene.updateMatrixWorld();\r\n for (let i = 0; i < this._gfx.scene.children.length; i++) {\r\n if (this._gfx.scene.children[i].type === 'DirectionalLight') {\r\n const light = this._gfx.scene.children[i];\r\n shadowMatrix.copy(light.shadow.camera.matrixWorldInverse);\r\n this.getOBB(shadowMatrix, OBB);\r\n\r\n direction.subVectors(light.target.position, light.position);\r\n light.position.subVectors(OBB.center, direction);\r\n light.target.position.copy(OBB.center);\r\n\r\n light.shadow.bias = 0.09;\r\n light.shadow.camera.bottom = -OBB.halfSize.y;\r\n light.shadow.camera.top = OBB.halfSize.y;\r\n light.shadow.camera.right = OBB.halfSize.x;\r\n light.shadow.camera.left = -OBB.halfSize.x;\r\n light.shadow.camera.near = direction.length() - OBB.halfSize.z;\r\n light.shadow.camera.far = direction.length() + OBB.halfSize.z;\r\n\r\n light.shadow.camera.updateProjectionMatrix();\r\n }\r\n }\r\n };\r\n}());\r\n\r\n/**\r\n * Initialize the viewer.\r\n * @returns {boolean} true on success.\r\n * @throws Forwards exception raised during initialization.\r\n * @see Miew#term\r\n */\r\nMiew.prototype.init = function () {\r\n const container = this._container;\r\n const elem = utils.createElement('div', { class: 'miew-canvas' });\r\n _setContainerContents(container, elem);\r\n this._container = elem;\r\n\r\n const frag = document.createDocumentFragment();\r\n frag.appendChild(this._msgMode = createElement(\r\n 'div',\r\n { class: 'mode-message overlay' },\r\n createElement('p', {}, 'COMPONENT EDIT MODE'),\r\n ));\r\n frag.appendChild(this._msgAtomInfo = createElement(\r\n 'div',\r\n { class: 'atom-info overlay' },\r\n createElement('p', {}, ''),\r\n ));\r\n container.appendChild(frag);\r\n\r\n if (this._gfx !== null) { // block double init\r\n return true;\r\n }\r\n\r\n const self = this;\r\n this._showMessage('Viewer is being initialized...');\r\n try {\r\n this._initGfx();\r\n\r\n this._initListeners();\r\n this._spinner = new Spinner({\r\n lines: 13,\r\n length: 28,\r\n width: 14,\r\n radius: 42,\r\n color: '#fff',\r\n zIndex: 700,\r\n });\r\n\r\n const target = getTopWindow();\r\n target.addEventListener('keydown', (event) => {\r\n self._onKeyDown(event);\r\n });\r\n\r\n target.addEventListener('keyup', (event) => {\r\n self._onKeyUp(event);\r\n });\r\n\r\n this._objectControls = new ObjectControls(\r\n this._gfx.root,\r\n this._gfx.pivot,\r\n this._gfx.camera,\r\n this._gfx.renderer.domElement,\r\n () => self._getAltObj(),\r\n );\r\n this._objectControls.addEventListener('change', (e) => {\r\n if (settings.now.shadow.on) {\r\n self._updateShadowCamera();\r\n }\r\n // route rotate, zoom, translate and translatePivot events to the external API\r\n switch (e.action) {\r\n case 'rotate':\r\n self.dispatchEvent({ type: 'rotate', quaternion: e.quaternion });\r\n break;\r\n case 'zoom':\r\n self.dispatchEvent({ type: 'zoom', factor: e.factor });\r\n break;\r\n default:\r\n self.dispatchEvent({ type: e.action });\r\n }\r\n self.dispatchEvent({ type: 'transform' });\r\n self._needRender = true;\r\n });\r\n\r\n const gfx = this._gfx;\r\n this._picker = new Picker(gfx.root, gfx.camera, gfx.renderer.domElement);\r\n this._picker.addEventListener('newpick', (event) => {\r\n self._onPick(event);\r\n });\r\n this._picker.addEventListener('dblclick', (event) => {\r\n self.center(event);\r\n });\r\n } catch (error) {\r\n if (error.name === 'TypeError' && error.message === 'Cannot read property \\'getExtension\\' of null') {\r\n this._showMessage('Could not create WebGL context.');\r\n } else if (error.message.search(/webgl/i) > 1) {\r\n this._showMessage(error.message);\r\n } else {\r\n this._showMessage('Viewer initialization failed.');\r\n throw error;\r\n }\r\n return false;\r\n }\r\n\r\n // automatically load default file\r\n const file = this._opts && this._opts.load;\r\n if (file) {\r\n const type = this._opts && this._opts.type;\r\n this.load(file, { fileType: type, keepRepsInfo: true });\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Terminate the viewer completely.\r\n * @see Miew#init\r\n */\r\nMiew.prototype.term = function () {\r\n this._showMessage('Viewer has been terminated.');\r\n this._loading.forEach((job) => {\r\n job.cancel();\r\n });\r\n this._loading.length = 0;\r\n this.halt();\r\n this._gfx = null;\r\n};\r\n\r\n/**\r\n * Display message inside the viewer container, hiding WebGL canvas.\r\n * @param {string} msg - Message to show.\r\n * @private\r\n */\r\nMiew.prototype._showMessage = function (msg) {\r\n const element = document.createElement('div');\r\n element.setAttribute('class', 'miew-message');\r\n element.appendChild(document.createElement('p')).appendChild(document.createTextNode(msg));\r\n _setContainerContents(this._container, element);\r\n};\r\n\r\n/**\r\n * Display WebGL canvas inside the viewer container, hiding any message shown.\r\n * @private\r\n */\r\nMiew.prototype._showCanvas = function () {\r\n _setContainerContents(this._container, this._gfx.renderer.domElement);\r\n};\r\n\r\nMiew.prototype._requestAnimationFrame = function (callback) {\r\n const { xr } = this._gfx.renderer;\r\n if (xr && xr.enabled) {\r\n this._gfx.renderer.setAnimationLoop(callback);\r\n return;\r\n }\r\n requestAnimationFrame(callback);\r\n};\r\n\r\nfunction arezSpritesSupported(context) {\r\n return context.getExtension('EXT_frag_depth');\r\n}\r\n\r\nfunction isAOSupported(context) {\r\n return (context.getExtension('WEBGL_depth_texture')\r\n && context.getExtension('WEBGL_draw_buffers'));\r\n}\r\n\r\n/**\r\n * Initialize WebGL and set 3D scene up.\r\n * @private\r\n */\r\nMiew.prototype._initGfx = function () {\r\n const gfx = {\r\n width: this._container.clientWidth,\r\n height: this._container.clientHeight,\r\n };\r\n\r\n const webGLOptions = { preserveDrawingBuffer: true, alpha: true, premultipliedAlpha: false };\r\n if (settings.now.antialias) {\r\n webGLOptions.antialias = true;\r\n }\r\n\r\n gfx.renderer2d = new CSS2DRenderer();\r\n\r\n gfx.renderer = new THREE.WebGL1Renderer(webGLOptions);\r\n gfx.renderer.shadowMap.enabled = settings.now.shadow.on;\r\n gfx.renderer.shadowMap.autoUpdate = false;\r\n gfx.renderer.shadowMap.type = THREE.PCFShadowMap;\r\n capabilities.init(gfx.renderer);\r\n\r\n // z-sprites and ambient occlusion possibility\r\n if (!arezSpritesSupported(gfx.renderer.getContext())) {\r\n settings.set('zSprites', false);\r\n }\r\n if (!isAOSupported(gfx.renderer.getContext())) {\r\n settings.set('ao', false);\r\n }\r\n\r\n gfx.renderer.autoClear = false;\r\n gfx.renderer.setPixelRatio(window.devicePixelRatio);\r\n gfx.renderer.setSize(gfx.width, gfx.height);\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.clearColor();\r\n\r\n gfx.renderer2d.setSize(gfx.width, gfx.height);\r\n\r\n gfx.camera = new THREE.PerspectiveCamera(\r\n settings.now.camFov,\r\n gfx.width / gfx.height,\r\n settings.now.camNear,\r\n settings.now.camFar,\r\n );\r\n gfx.camera.setMinimalFov(settings.now.camFov);\r\n gfx.camera.position.z = settings.now.camDistance;\r\n gfx.camera.updateProjectionMatrix();\r\n gfx.camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n gfx.camera.layers.enable(gfxutils.LAYERS.VOLUME);\r\n gfx.camera.layers.enable(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n\r\n gfx.stereoCam = new THREE.StereoCamera();\r\n\r\n gfx.scene = new THREE.Scene();\r\n\r\n const color = chooseFogColor();\r\n gfx.scene.fog = new THREE.Fog(color, settings.now.camNear, settings.now.camFar);\r\n\r\n gfx.root = new gfxutils.RCGroup();\r\n gfx.scene.add(gfx.root);\r\n\r\n gfx.pivot = new gfxutils.RCGroup();\r\n gfx.root.add(gfx.pivot);\r\n\r\n gfx.selectionScene = new THREE.Scene();\r\n gfx.selectionRoot = new THREE.Group();\r\n gfx.selectionRoot.matrixAutoUpdate = false;\r\n gfx.selectionScene.add(gfx.selectionRoot);\r\n\r\n gfx.selectionPivot = new THREE.Group();\r\n gfx.selectionPivot.matrixAutoUpdate = false;\r\n gfx.selectionRoot.add(gfx.selectionPivot);\r\n\r\n const light12 = new THREE.DirectionalLight(0xffffff, 0.45);\r\n light12.position.set(0, 0.414, 1);\r\n light12.layers.enable(gfxutils.LAYERS.TRANSPARENT);\r\n light12.castShadow = true;\r\n light12.shadow.bias = 0.09;\r\n light12.shadow.radius = settings.now.shadow.radius;\r\n light12.shadow.camera.layers.set(gfxutils.LAYERS.SHADOWMAP);\r\n\r\n const pixelRatio = gfx.renderer.getPixelRatio();\r\n const shadowMapSize = Math.max(gfx.width, gfx.height) * pixelRatio;\r\n light12.shadow.mapSize.width = shadowMapSize;\r\n light12.shadow.mapSize.height = shadowMapSize;\r\n light12.target.position.set(0.0, 0.0, 0.0);\r\n gfx.scene.add(light12);\r\n gfx.scene.add(light12.target);\r\n\r\n const light3 = new THREE.AmbientLight(0x666666);\r\n light3.layers.enable(gfxutils.LAYERS.TRANSPARENT);\r\n gfx.scene.add(light3);\r\n\r\n // add axes\r\n gfx.axes = new Axes(gfx.root, gfx.camera);\r\n const deviceWidth = gfx.width * pixelRatio;\r\n const deviceHeight = gfx.height * pixelRatio;\r\n\r\n gfx.offscreenBuf = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat, depthBuffer: true,\r\n },\r\n );\r\n\r\n if (gfx.renderer.getContext().getExtension('WEBGL_depth_texture')) {\r\n gfx.offscreenBuf.depthTexture = new THREE.DepthTexture();\r\n gfx.offscreenBuf.depthTexture.type = THREE.UnsignedShortType;\r\n }\r\n\r\n gfx.offscreenBuf2 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf3 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf4 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.volBFTex = gfx.offscreenBuf3;\r\n gfx.volFFTex = gfx.offscreenBuf4;\r\n gfx.volWFFTex = gfx.offscreenBuf;\r\n\r\n // use float textures for volume rendering if possible\r\n if (gfx.renderer.getContext().getExtension('OES_texture_float')) {\r\n gfx.offscreenBuf5 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf6 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf7 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: true,\r\n },\r\n );\r\n\r\n gfx.volBFTex = gfx.offscreenBuf5;\r\n gfx.volFFTex = gfx.offscreenBuf6;\r\n gfx.volWFFTex = gfx.offscreenBuf7;\r\n } else {\r\n this.logger.warn('Device doesn\\'t support OES_texture_float extension');\r\n }\r\n\r\n gfx.stereoBufL = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.stereoBufR = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n this._gfx = gfx;\r\n this._showCanvas();\r\n\r\n this._embedWebXR(settings.now.stereo === 'WEBVR');\r\n\r\n this._container.appendChild(gfx.renderer2d.getElement());\r\n\r\n // add FPS counter\r\n const stats = new Stats();\r\n stats.domElement.style.position = 'absolute';\r\n stats.domElement.style.right = '0';\r\n stats.domElement.style.bottom = '0';\r\n this._container.appendChild(stats.domElement);\r\n this._fps = stats;\r\n this._fps.show(settings.now.fps);\r\n};\r\n\r\n/**\r\n * Setup event listeners.\r\n * @private\r\n */\r\nMiew.prototype._initListeners = function () {\r\n const self = this;\r\n window.addEventListener('resize', () => {\r\n self._onResize();\r\n });\r\n};\r\n\r\n/**\r\n * Try to add numbers to the base name to make it unique among visuals\r\n * @private\r\n */\r\nMiew.prototype._makeUniqueVisualName = function (baseName) {\r\n if (!baseName) {\r\n return Math.random().toString();\r\n }\r\n\r\n let name = baseName;\r\n let suffix = 1;\r\n while (this._visuals.hasOwnProperty(name)) {\r\n name = `${baseName} (${suffix.toString()})`;\r\n suffix++;\r\n }\r\n\r\n return name;\r\n};\r\n\r\n/**\r\n * Add visual to the viewer\r\n * @private\r\n */\r\nMiew.prototype._addVisual = function (visual) {\r\n if (!visual) {\r\n return null;\r\n }\r\n\r\n // change visual name in order to make it unique\r\n const name = this._makeUniqueVisualName(visual.name);\r\n visual.name = name;\r\n\r\n this._visuals[name] = visual;\r\n this._gfx.pivot.add(visual);\r\n if (visual.getSelectionGeo) {\r\n this._gfx.selectionPivot.add(visual.getSelectionGeo());\r\n }\r\n\r\n return name;\r\n};\r\n\r\n/**\r\n * Remove visual from the viewer\r\n * @private\r\n */\r\nMiew.prototype._removeVisual = function (visual) {\r\n let name = '';\r\n let obj = null;\r\n if (visual instanceof Visual) {\r\n ({ name } = visual);\r\n obj = visual;\r\n } else if (typeof visual === 'string') {\r\n name = visual;\r\n obj = this._visuals[name];\r\n }\r\n\r\n if (!obj || !this._visuals.hasOwnProperty(name) || this._visuals[name] !== obj) {\r\n return;\r\n }\r\n\r\n if (name === this._curVisualName) {\r\n this._curVisualName = undefined;\r\n }\r\n\r\n delete this._visuals[name];\r\n obj.release(); // removes nodes from scene\r\n\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Call specified function for each Visual\r\n * @private\r\n */\r\nMiew.prototype._forEachVisual = function (callback) {\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)) {\r\n callback(this._visuals[name]);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Release (destroy) all visuals in the scene\r\n * @private\r\n */\r\nMiew.prototype._releaseAllVisuals = function () {\r\n if (!this._gfx || !this._gfx.pivot) {\r\n return;\r\n }\r\n\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)) {\r\n this._visuals[name].release();\r\n }\r\n }\r\n\r\n this._visuals = {};\r\n};\r\n\r\n/**\r\n * Call specified function for each ComplexVisual\r\n * @private\r\n */\r\nMiew.prototype._forEachComplexVisual = function (callback) {\r\n if (!this._gfx || !this._gfx.pivot) {\r\n return;\r\n }\r\n\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)\r\n && this._visuals[name] instanceof ComplexVisual) {\r\n callback(this._visuals[name]);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Returns ComplexVisual with specified name, or current (if not found), or any, or null\r\n * @private\r\n */\r\nMiew.prototype._getComplexVisual = function (name) {\r\n name = name || this._curVisualName;\r\n let any = null;\r\n let named = null;\r\n this._forEachComplexVisual((visual) => {\r\n any = visual;\r\n if (visual.name === name) {\r\n named = visual;\r\n }\r\n });\r\n return named || any;\r\n};\r\n\r\n/**\r\n * Returns first found VolumeVisual (no more than one should be present actually)\r\n * @private\r\n */\r\nMiew.prototype._getVolumeVisual = function () {\r\n let any = null;\r\n this._forEachVisual((visual) => {\r\n if (visual instanceof VolumeVisual) {\r\n any = visual;\r\n }\r\n });\r\n return any;\r\n};\r\n\r\n/**\r\n * Returns ComplexVisual corresponding to specified complex\r\n * @private\r\n */\r\nMiew.prototype._getVisualForComplex = function (complex) {\r\n if (!complex) {\r\n return null;\r\n }\r\n\r\n let found = null;\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getComplex() === complex) {\r\n found = visual;\r\n }\r\n });\r\n return found;\r\n};\r\n\r\n/*\r\n * Get a list of names of visuals currently shown by the viewer\r\n */\r\nMiew.prototype.getVisuals = function () {\r\n return Object.keys(this._visuals);\r\n};\r\n\r\n/*\r\n * Get complex visuals count\r\n */\r\nMiew.prototype.getComplexVisualsCount = function () {\r\n let count = 0;\r\n this._forEachComplexVisual(() => count++);\r\n return count;\r\n};\r\n\r\n/*\r\n * Get current visual\r\n */\r\nMiew.prototype.getCurrentVisual = function () {\r\n return this._curVisualName;\r\n};\r\n\r\n/*\r\n * Set current visual.\r\n * All further operations will be performed on this visual (complex) if not stated otherwise.\r\n */\r\nMiew.prototype.setCurrentVisual = function (name) {\r\n if (!this._visuals[name]) {\r\n return;\r\n }\r\n\r\n this._curVisualName = name;\r\n};\r\n\r\n/**\r\n * Run the viewer, start processing update/render frames periodically.\r\n * Has no effect if already running.\r\n * @see Miew#halt\r\n */\r\nMiew.prototype.run = function () {\r\n if (!this._running) {\r\n this._running = true;\r\n if (this._halting) {\r\n this._halting = false;\r\n return;\r\n }\r\n\r\n this._objectControls.enable(true);\r\n this._interpolator.resume();\r\n\r\n this._requestAnimationFrame(() => this._onTick());\r\n }\r\n};\r\n\r\n/**\r\n * Request the viewer to stop.\r\n * Will be processed during the next frame.\r\n * @see Miew#run\r\n */\r\nMiew.prototype.halt = function () {\r\n if (this._running) {\r\n this._discardComponentEdit();\r\n this._discardFragmentEdit();\r\n this._objectControls.enable(false);\r\n this._interpolator.pause();\r\n this._halting = true;\r\n }\r\n};\r\n\r\n/**\r\n * Request the viewer to start / stop responsing\r\n * on hot keys.\r\n * @param enabled - start (true) or stop (false) response on hot keys.\r\n */\r\nMiew.prototype.enableHotKeys = function (enabled) {\r\n this._hotKeysEnabled = enabled;\r\n this._objectControls.enableHotkeys(enabled);\r\n};\r\n\r\n/**\r\n * Callback which processes window resize.\r\n * @private\r\n */\r\nMiew.prototype._onResize = function () {\r\n const gfx = this._gfx;\r\n if (!gfx) {\r\n return;\r\n }\r\n\r\n this._needRender = true;\r\n\r\n gfx.width = this._container.clientWidth;\r\n gfx.height = this._container.clientHeight;\r\n\r\n gfx.camera.aspect = gfx.width / gfx.height;\r\n gfx.camera.setMinimalFov(settings.now.camFov);\r\n gfx.camera.updateProjectionMatrix();\r\n\r\n gfx.renderer.setSize(gfx.width, gfx.height);\r\n gfx.renderer2d.setSize(gfx.width, gfx.height);\r\n\r\n this.dispatchEvent({ type: 'resize' });\r\n};\r\n\r\nMiew.prototype._resizeOffscreenBuffers = function (width, height, stereo) {\r\n const gfx = this._gfx;\r\n stereo = stereo || 'NONE';\r\n const isAnaglyph = (stereo === 'NONE' || stereo === 'ANAGLYPH');\r\n const multi = isAnaglyph ? 1 : 0.5;\r\n gfx.offscreenBuf.setSize(multi * width, height);\r\n gfx.offscreenBuf2.setSize(multi * width, height);\r\n gfx.offscreenBuf3.setSize(multi * width, height);\r\n gfx.offscreenBuf4.setSize(multi * width, height);\r\n if (gfx.offscreenBuf5) {\r\n gfx.offscreenBuf5.setSize(multi * width, height);\r\n }\r\n if (gfx.offscreenBuf6) {\r\n gfx.offscreenBuf6.setSize(multi * width, height);\r\n }\r\n if (gfx.offscreenBuf7) {\r\n gfx.offscreenBuf7.setSize(multi * width, height);\r\n }\r\n if (isAnaglyph) {\r\n gfx.stereoBufL.setSize(width, height);\r\n gfx.stereoBufR.setSize(width, height);\r\n }\r\n};\r\n\r\n/**\r\n * Callback which processes update/render frames.\r\n * @private\r\n */\r\nMiew.prototype._onTick = function () {\r\n if (this._halting) {\r\n this._running = false;\r\n this._halting = false;\r\n return;\r\n }\r\n\r\n this._fps.update();\r\n\r\n this._requestAnimationFrame(() => this._onTick());\r\n\r\n this._onUpdate();\r\n if (this._needRender) {\r\n this._onRender();\r\n this._needRender = !settings.now.suspendRender || settings.now.stereo === 'WEBVR';\r\n }\r\n};\r\n\r\nMiew.prototype._getBSphereRadius = function () {\r\n // calculate radius that would include all visuals\r\n let radius = 0;\r\n this._forEachVisual((visual) => {\r\n radius = Math.max(radius, visual.getBoundaries().boundingSphere.radius);\r\n });\r\n return radius * this._objectControls.getScale();\r\n};\r\n\r\n/**\r\n * Calculate bounding box that would include all visuals and being axis aligned in world defined by\r\n * transformation matrix: matrix\r\n * @param {Matrix4} matrix - transformation matrix.\r\n * @param {object} OBB - calculating bounding box.\r\n * @param {Vector3} OBB.center - OBB center.\r\n * @param {Vector3} OBB.halfSize - half magnitude of OBB sizes.\r\n */\r\nMiew.prototype.getOBB = (function () {\r\n const _bSphereForOneVisual = new THREE.Sphere();\r\n const _bBoxForOneVisual = new THREE.Box3();\r\n const _bBox = new THREE.Box3();\r\n\r\n const _invMatrix = new THREE.Matrix4();\r\n\r\n const _points = [\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n ];\r\n\r\n return function (matrix, OBB) {\r\n _bBox.makeEmpty();\r\n\r\n this._forEachVisual((visual) => {\r\n _bSphereForOneVisual.copy(visual.getBoundaries().boundingSphere);\r\n _bSphereForOneVisual.applyMatrix4(visual.matrixWorld).applyMatrix4(matrix);\r\n _bSphereForOneVisual.getBoundingBox(_bBoxForOneVisual);\r\n _bBox.union(_bBoxForOneVisual);\r\n });\r\n _bBox.getCenter(OBB.center);\r\n\r\n _invMatrix.copy(matrix).invert();\r\n OBB.center.applyMatrix4(_invMatrix);\r\n\r\n const { min } = _bBox;\r\n const { max } = _bBox;\r\n _points[0].set(min.x, min.y, min.z); // 000\r\n _points[1].set(max.x, min.y, min.z); // 100\r\n _points[2].set(min.x, max.y, min.z); // 010\r\n _points[3].set(min.x, min.y, max.z); // 001\r\n for (let i = 0, l = _points.length; i < l; i++) {\r\n _points[i].applyMatrix4(_invMatrix);\r\n }\r\n\r\n OBB.halfSize.set(\r\n Math.abs(_points[0].x - _points[1].x),\r\n Math.abs(_points[0].y - _points[2].y),\r\n Math.abs(_points[0].z - _points[3].z),\r\n ).multiplyScalar(0.5);\r\n };\r\n}());\r\n\r\nMiew.prototype._updateFog = function () {\r\n const gfx = this._gfx;\r\n\r\n if (settings.now.fog) {\r\n if (typeof gfx.scene.fog === 'undefined' || gfx.scene.fog === null) {\r\n const color = chooseFogColor();\r\n gfx.scene.fog = new THREE.Fog(color);\r\n this._setUberMaterialValues({ fog: settings.now.fog });\r\n }\r\n updateFogRange(gfx.scene.fog, gfx.camera.position.z, this._getBSphereRadius());\r\n } else if (gfx.scene.fog) {\r\n gfx.scene.fog = undefined;\r\n this._setUberMaterialValues({ fog: settings.now.fog });\r\n }\r\n};\r\n\r\nMiew.prototype._onUpdate = function () {\r\n if (this.isScriptingCommandAvailable !== undefined && this.isScriptingCommandAvailable() && !this._building) {\r\n this.callNextCmd();\r\n }\r\n\r\n this._objectControls.update();\r\n\r\n this._forEachComplexVisual((visual) => {\r\n visual.getComplex().update();\r\n });\r\n\r\n if (settings.now.autobuild && !this._loading.length && !this._building && this._needRebuild()) {\r\n this.rebuild();\r\n }\r\n\r\n if (!this._loading.length && !this._building && !this._needRebuild()) {\r\n this._updateView();\r\n }\r\n\r\n this._updateFog();\r\n\r\n if (this._gfx.renderer.xr.enabled) {\r\n this.webVR.updateMoleculeScale();\r\n }\r\n};\r\n\r\nMiew.prototype._onRender = function () {\r\n const gfx = this._gfx;\r\n\r\n // update all matrices\r\n gfx.scene.updateMatrixWorld();\r\n gfx.camera.updateMatrixWorld();\r\n\r\n this._clipPlaneUpdateValue(this._getBSphereRadius());\r\n this._fogFarUpdateValue();\r\n\r\n gfx.renderer.setRenderTarget(null);\r\n gfx.renderer.clear();\r\n\r\n this._renderFrame(settings.now.stereo);\r\n};\r\n\r\nMiew.prototype._renderFrame = (function () {\r\n const _anaglyphMat = new AnaglyphMaterial();\r\n const _size = new THREE.Vector2();\r\n\r\n return function (stereo) {\r\n const gfx = this._gfx;\r\n const { renderer } = gfx;\r\n\r\n renderer.getSize(_size);\r\n\r\n if (stereo !== 'NONE') {\r\n gfx.camera.focus = gfx.camera.position.z; // set focus to the center of the object\r\n gfx.stereoCam.aspect = 1.0;\r\n\r\n // in anaglyph mode we render full-size image for each eye\r\n // while in other stereo modes only half-size (two images on the screen)\r\n if (stereo === 'ANAGLYPH') {\r\n gfx.stereoCam.update(gfx.camera);\r\n } else {\r\n gfx.stereoCam.updateHalfSized(gfx.camera, settings.now.camFov);\r\n }\r\n }\r\n\r\n // resize offscreen buffers to match the target\r\n const pixelRatio = gfx.renderer.getPixelRatio();\r\n this._resizeOffscreenBuffers(_size.width * pixelRatio, _size.height * pixelRatio, stereo);\r\n\r\n this._renderShadowMap();\r\n\r\n switch (stereo) {\r\n case 'WEBVR':\r\n case 'NONE':\r\n this._renderScene(gfx.camera, false);\r\n break;\r\n case 'SIMPLE':\r\n case 'DISTORTED':\r\n renderer.setScissorTest(true);\r\n\r\n renderer.setScissor(0, 0, _size.width / 2, _size.height);\r\n renderer.setViewport(0, 0, _size.width / 2, _size.height);\r\n this._renderScene(this._gfx.stereoCam.cameraL, stereo === 'DISTORTED');\r\n\r\n renderer.setScissor(_size.width / 2, 0, _size.width / 2, _size.height);\r\n renderer.setViewport(_size.width / 2, 0, _size.width / 2, _size.height);\r\n this._renderScene(this._gfx.stereoCam.cameraR, stereo === 'DISTORTED');\r\n\r\n renderer.setScissorTest(false);\r\n break;\r\n case 'ANAGLYPH':\r\n this._renderScene(this._gfx.stereoCam.cameraL, false, gfx.stereoBufL);\r\n this._renderScene(this._gfx.stereoCam.cameraR, false, gfx.stereoBufR);\r\n renderer.setRenderTarget(null);\r\n _anaglyphMat.uniforms.srcL.value = gfx.stereoBufL.texture;\r\n _anaglyphMat.uniforms.srcR.value = gfx.stereoBufR.texture;\r\n gfx.renderer.renderScreenQuad(_anaglyphMat);\r\n break;\r\n default:\r\n }\r\n\r\n gfx.renderer2d.render(gfx.scene, gfx.camera);\r\n\r\n if (settings.now.axes && gfx.axes && !gfx.renderer.xr.enabled) {\r\n gfx.axes.render(renderer);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._onBgColorChanged = function () {\r\n const gfx = this._gfx;\r\n const color = chooseFogColor();\r\n if (gfx) {\r\n if (gfx.scene.fog) {\r\n gfx.scene.fog.color.set(color);\r\n }\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._onFogColorChanged = function () {\r\n const gfx = this._gfx;\r\n const color = chooseFogColor();\r\n if (gfx && gfx.scene.fog) {\r\n gfx.scene.fog.color.set(color);\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._setUberMaterialValues = function (values) {\r\n this._gfx.root.traverse((obj) => {\r\n if ((obj instanceof THREE.Mesh || obj instanceof THREE.LineSegments || obj instanceof THREE.Line)\r\n && obj.material instanceof UberMaterial) {\r\n obj.material.setValues(values);\r\n obj.material.needsUpdate = true;\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype._enableMRT = function (on, renderBuffer, textureBuffer) {\r\n const gfx = this._gfx;\r\n const gl = gfx.renderer.getContext();\r\n const ext = gl.getExtension('WEBGL_draw_buffers');\r\n const { properties } = gfx.renderer;\r\n\r\n if (!on) {\r\n ext.drawBuffersWEBGL([gl.COLOR_ATTACHMENT0, null]);\r\n return;\r\n }\r\n\r\n // take extra texture from Texture Buffer\r\n gfx.renderer.setRenderTarget(textureBuffer);\r\n const tx8 = properties.get(textureBuffer.texture).__webglTexture;\r\n gl.bindTexture(gl.TEXTURE_2D, tx8);\r\n\r\n // take texture and framebuffer from renderbuffer\r\n gfx.renderer.setRenderTarget(renderBuffer);\r\n const fb = properties.get(renderBuffer).__webglFramebuffer;\r\n const tx = properties.get(renderBuffer.texture).__webglTexture;\r\n\r\n // set framebuffer\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb);\r\n fb.width = renderBuffer.width;\r\n fb.height = renderBuffer.height;\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tx, 0);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, ext.COLOR_ATTACHMENT1_WEBGL, gl.TEXTURE_2D, tx8, 0);\r\n\r\n // mapping textures\r\n ext.drawBuffersWEBGL([gl.COLOR_ATTACHMENT0, ext.COLOR_ATTACHMENT1_WEBGL]);\r\n};\r\n\r\nMiew.prototype._renderScene = (function () {\r\n return function (camera, distortion, target) {\r\n distortion = distortion || false;\r\n target = target || null;\r\n\r\n const gfx = this._gfx;\r\n\r\n // render to offscreen buffer\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(target);\r\n gfx.renderer.clear();\r\n if (gfx.renderer.xr.enabled) {\r\n gfx.renderer.render(gfx.scene, camera);\r\n return;\r\n }\r\n\r\n // clean buffer for normals texture\r\n gfx.renderer.setClearColor(0x000000, 0.0);\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf4);\r\n gfx.renderer.clearColor();\r\n\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.clear();\r\n\r\n const bHaveComplexes = (this._getComplexVisual() !== null);\r\n const volumeVisual = this._getVolumeVisual();\r\n const ssao = bHaveComplexes && settings.now.ao;\r\n\r\n if (ssao) {\r\n this._enableMRT(true, gfx.offscreenBuf, gfx.offscreenBuf4);\r\n }\r\n\r\n if (settings.now.transparency === 'prepass') {\r\n this._renderWithPrepassTransparency(camera, gfx.offscreenBuf);\r\n } else if (settings.now.transparency === 'standard') {\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.render(gfx.scene, camera);\r\n }\r\n\r\n if (ssao) {\r\n this._enableMRT(false, null, null);\r\n }\r\n\r\n // when fxaa we should get resulting image in temp off-screen buff2 for further postprocessing with fxaa filter\r\n // otherwise we render to canvas\r\n const outline = bHaveComplexes && settings.now.outline.on;\r\n const fxaa = bHaveComplexes && settings.now.fxaa;\r\n const volume = (volumeVisual !== null) && (volumeVisual.getMesh().material != null);\r\n let dstBuffer = (ssao || outline || volume || fxaa || distortion) ? gfx.offscreenBuf2 : target;\r\n let srcBuffer = gfx.offscreenBuf;\r\n\r\n if (ssao) {\r\n this._performAO(\r\n srcBuffer,\r\n gfx.offscreenBuf4,\r\n gfx.offscreenBuf.depthTexture,\r\n dstBuffer,\r\n gfx.offscreenBuf3,\r\n gfx.offscreenBuf2,\r\n );\r\n if (!fxaa && !distortion && !volume && !outline) {\r\n srcBuffer = dstBuffer;\r\n dstBuffer = target;\r\n gfx.renderer.setRenderTarget(dstBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 1.0);\r\n }\r\n } else {\r\n // just copy color buffer to dst buffer\r\n gfx.renderer.setRenderTarget(dstBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 1.0);\r\n }\r\n\r\n // outline\r\n if (outline) {\r\n srcBuffer = dstBuffer;\r\n dstBuffer = (volume || fxaa || distortion) ? gfx.offscreenBuf3 : target;\r\n if (srcBuffer != null) {\r\n this._renderOutline(camera, gfx.offscreenBuf, srcBuffer, dstBuffer);\r\n }\r\n }\r\n\r\n // render selected part with outline material\r\n this._renderSelection(camera, gfx.offscreenBuf, dstBuffer);\r\n\r\n if (volume) {\r\n // copy current picture to the buffer that retains depth-data of the original molecule render\r\n // so that volume renderer could use depth-test\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.renderScreenQuadFromTex(dstBuffer.texture, 1.0);\r\n dstBuffer = gfx.offscreenBuf;\r\n this._renderVolume(volumeVisual, camera, dstBuffer, gfx.volBFTex, gfx.volFFTex, gfx.volWFFTex);\r\n\r\n // if this is the last stage -- copy image to target\r\n if (!fxaa && !distortion) {\r\n gfx.renderer.setRenderTarget(target);\r\n gfx.renderer.renderScreenQuadFromTex(dstBuffer.texture, 1.0);\r\n }\r\n }\r\n\r\n srcBuffer = dstBuffer;\r\n\r\n if (fxaa) {\r\n dstBuffer = distortion ? gfx.offscreenBuf4 : target;\r\n this._performFXAA(srcBuffer, dstBuffer);\r\n srcBuffer = dstBuffer;\r\n }\r\n\r\n if (distortion) {\r\n dstBuffer = target;\r\n this._performDistortion(srcBuffer, dstBuffer, true);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._performDistortion = (function () {\r\n const _scene = new THREE.Scene();\r\n const _camera = new THREE.OrthographicCamera(-1.0, 1.0, 1.0, -1.0, -500, 1000);\r\n\r\n const _material = new THREE.RawShaderMaterial({\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n aberration: { type: 'fv3', value: new THREE.Vector3(1.0) },\r\n },\r\n vertexShader: vertexScreenQuadShader,\r\n fragmentShader: fragmentScreenQuadFromDistTex,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n const _geo = gfxutils.buildDistorionMesh(10, 10, settings.now.debug.stereoBarrel);\r\n _scene.add(new meshes.Mesh(_geo, _material));\r\n\r\n return function (srcBuffer, targetBuffer, mesh) {\r\n this._gfx.renderer.setRenderTarget(targetBuffer);\r\n this._gfx.renderer.clear();\r\n\r\n if (mesh) {\r\n _material.uniforms.srcTex.value = srcBuffer.texture;\r\n _material.uniforms.aberration.value.set(0.995, 1.0, 1.01);\r\n this._gfx.renderer.render(_scene, _camera);\r\n } else {\r\n this._gfx.renderer.renderScreenQuadFromTexWithDistortion(srcBuffer, settings.now.debug.stereoBarrel);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._renderOutline = (function () {\r\n const _outlineMaterial = new OutlineMaterial({ depth: true });\r\n\r\n return function (camera, srcDepthBuffer, srcColorBuffer, targetBuffer) {\r\n const self = this;\r\n const gfx = self._gfx;\r\n\r\n // apply Sobel filter -- draw outline\r\n _outlineMaterial.uniforms.srcTex.value = srcColorBuffer.texture;\r\n _outlineMaterial.uniforms.srcDepthTex.value = srcDepthBuffer.depthTexture;\r\n _outlineMaterial.uniforms.srcTexSize.value.set(srcDepthBuffer.width, srcDepthBuffer.height);\r\n _outlineMaterial.uniforms.color.value = new THREE.Color(settings.now.outline.color);\r\n _outlineMaterial.uniforms.threshold.value = settings.now.outline.threshold;\r\n _outlineMaterial.uniforms.thickness.value = new THREE.Vector2(\r\n settings.now.outline.thickness,\r\n settings.now.outline.thickness,\r\n );\r\n\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuad(_outlineMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._renderShadowMap = (function () {\r\n const pars = { minFilter: THREE.NearestFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat };\r\n\r\n return function () {\r\n if (!settings.now.shadow.on) {\r\n return;\r\n }\r\n\r\n const gfx = this._gfx;\r\n const currentRenderTarget = gfx.renderer.getRenderTarget();\r\n const activeCubeFace = gfx.renderer.getActiveCubeFace();\r\n const activeMipmapLevel = gfx.renderer.getActiveMipmapLevel();\r\n\r\n const _state = gfx.renderer.state;\r\n\r\n // Set GL state for depth map.\r\n _state.setBlending(THREE.NoBlending);\r\n _state.buffers.color.setClear(1, 1, 1, 1);\r\n _state.buffers.depth.setTest(true);\r\n _state.setScissorTest(false);\r\n\r\n for (let i = 0; i < gfx.scene.children.length; i++) {\r\n if (gfx.scene.children[i].type === 'DirectionalLight') {\r\n const light = gfx.scene.children[i];\r\n\r\n if (light.shadow.map == null) {\r\n light.shadow.map = new THREE.WebGLRenderTarget(light.shadow.mapSize.width, light.shadow.mapSize.height, pars);\r\n light.shadow.camera.updateProjectionMatrix();\r\n }\r\n light.shadow.updateMatrices(light);\r\n\r\n gfx.renderer.setRenderTarget(light.shadow.map);\r\n gfx.renderer.clear();\r\n\r\n gfx.renderer.render(gfx.scene, light.shadow.camera);\r\n }\r\n }\r\n gfx.renderer.setRenderTarget(currentRenderTarget, activeCubeFace, activeMipmapLevel);\r\n };\r\n}());\r\n\r\n/**\r\n * Check if there is selection which must be rendered or not.\r\n * @private\r\n * @returns {boolean} true on existing selection to render\r\n */\r\nMiew.prototype._hasSelectionToRender = function () {\r\n const selPivot = this._gfx.selectionPivot;\r\n\r\n for (let i = 0; i < selPivot.children.length; i++) {\r\n const selPivotChild = selPivot.children[i];\r\n if (selPivotChild.children.length > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nMiew.prototype._renderSelection = (function () {\r\n const _outlineMaterial = new OutlineMaterial();\r\n\r\n return function (camera, srcBuffer, targetBuffer) {\r\n const self = this;\r\n const gfx = self._gfx;\r\n\r\n // clear offscreen buffer (leave z-buffer intact)\r\n gfx.renderer.setClearColor('black', 0);\r\n\r\n // render selection to offscreen buffer\r\n gfx.renderer.setRenderTarget(srcBuffer);\r\n gfx.renderer.clear(true, false, false);\r\n if (self._hasSelectionToRender()) {\r\n gfx.selectionRoot.matrix = gfx.root.matrix;\r\n gfx.selectionPivot.matrix = gfx.pivot.matrix;\r\n gfx.renderer.render(gfx.selectionScene, camera);\r\n } else {\r\n // just render something to force \"target clear\" operation to finish\r\n gfx.renderer.renderDummyQuad();\r\n }\r\n\r\n // overlay to screen\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 0.6);\r\n\r\n // apply Sobel filter -- draw outline\r\n _outlineMaterial.uniforms.srcTex.value = srcBuffer.texture;\r\n _outlineMaterial.uniforms.srcTexSize.value.set(srcBuffer.width, srcBuffer.height);\r\n gfx.renderer.renderScreenQuad(_outlineMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._checkVolumeRenderingSupport = function (renderTarget) {\r\n if (!renderTarget) {\r\n return false;\r\n }\r\n const gfx = this._gfx;\r\n const oldRT = gfx.renderer.getRenderTarget();\r\n\r\n gfx.renderer.setRenderTarget(renderTarget);\r\n const context = gfx.renderer.getContext();\r\n const result = context.checkFramebufferStatus(context.FRAMEBUFFER);\r\n gfx.renderer.setRenderTarget(oldRT);\r\n if (result !== context.FRAMEBUFFER_COMPLETE) {\r\n // floatFrameBufferWarning = ;\r\n this.logger.warn('Device doesn\\'t support electron density rendering');\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nMiew.prototype._renderVolume = (function () {\r\n const volumeBFMat = new VolumeMaterial.BackFacePosMaterial();\r\n const volumeFFMat = new VolumeMaterial.FrontFacePosMaterial();\r\n const cubeOffsetMat = new THREE.Matrix4().makeTranslation(0.5, 0.5, 0.5);\r\n const world2colorMat = new THREE.Matrix4();\r\n\r\n let volumeRenderingSupported;\r\n\r\n return function (volumeVisual, camera, dstBuf, tmpBuf1, tmpBuf2, tmpBuf3) {\r\n const gfx = this._gfx;\r\n\r\n if (typeof volumeRenderingSupported === 'undefined') {\r\n volumeRenderingSupported = this._checkVolumeRenderingSupport(tmpBuf1);\r\n }\r\n\r\n if (!volumeRenderingSupported) {\r\n return;\r\n }\r\n\r\n const mesh = volumeVisual.getMesh();\r\n\r\n mesh.rebuild(gfx.camera);\r\n\r\n // use main camera to prepare special textures to be used by volumetric rendering\r\n // these textures have the size of the window and are stored in offscreen buffers\r\n gfx.renderer.setClearColor('black', 0);\r\n gfx.renderer.setRenderTarget(tmpBuf1);\r\n gfx.renderer.clear();\r\n gfx.renderer.setRenderTarget(tmpBuf2);\r\n gfx.renderer.clear();\r\n gfx.renderer.setRenderTarget(tmpBuf3);\r\n gfx.renderer.clear();\r\n\r\n gfx.renderer.setRenderTarget(tmpBuf1);\r\n // draw plane with its own material, because it differs slightly from volumeBFMat\r\n camera.layers.set(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.scene.overrideMaterial = volumeBFMat;\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n gfx.renderer.setRenderTarget(tmpBuf2);\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.scene.overrideMaterial = volumeFFMat;\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n gfx.scene.overrideMaterial = null;\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n\r\n // prepare texture that contains molecule positions\r\n world2colorMat.copy(mesh.matrixWorld).invert();\r\n UberMaterial.prototype.uberOptions.world2colorMatrix.multiplyMatrices(cubeOffsetMat, world2colorMat);\r\n camera.layers.set(gfxutils.LAYERS.COLOR_FROM_POSITION);\r\n gfx.renderer.setRenderTarget(tmpBuf3);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // render volume\r\n const vm = mesh.material;\r\n vm.uniforms._BFRight.value = tmpBuf1.texture;\r\n vm.uniforms._FFRight.value = tmpBuf2.texture;\r\n vm.uniforms._WFFRight.value = tmpBuf3.texture;\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.renderer.setRenderTarget(dstBuf);\r\n gfx.renderer.render(gfx.scene, camera);\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n };\r\n}());\r\n\r\n/* Render scene with 'ZPrepass transparency Effect'\r\n * Idea: transparent objects are rendered in two passes. The first one writes result only into depth buffer.\r\n * The second pass reads depth buffer and writes only to color buffer. The method results in\r\n * correct image of front part of the semi-transparent objects, but we can see only front transparent objects\r\n * and opaque objects inside, there is no transparent objects inside.\r\n * Notes: 1. Opaque objects should be rendered strictly before semi-transparent ones.\r\n * 2. Realization doesn't use camera layers because scene traversing is used for material changes and\r\n * we can use it to select needed meshes and don't complicate meshes builders with layers\r\n */\r\nMiew.prototype._renderWithPrepassTransparency = (function () {\r\n return function (camera, targetBuffer) {\r\n const gfx = this._gfx;\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n\r\n // opaque objects\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // transparent objects z prepass\r\n camera.layers.set(gfxutils.LAYERS.PREPASS_TRANSPARENT);\r\n gfx.renderer.getContext().colorMask(false, false, false, false); // don't update color buffer\r\n gfx.renderer.render(gfx.scene, camera);\r\n gfx.renderer.getContext().colorMask(true, true, true, true); // update color buffer\r\n\r\n // transparent objects color pass\r\n camera.layers.set(gfxutils.LAYERS.TRANSPARENT);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // restore default layer\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n };\r\n}());\r\n\r\nMiew.prototype._performFXAA = (function () {\r\n const _fxaaMaterial = new FXAAMaterial();\r\n\r\n return function (srcBuffer, targetBuffer) {\r\n if (typeof srcBuffer === 'undefined' || typeof targetBuffer === 'undefined') {\r\n return;\r\n }\r\n\r\n const gfx = this._gfx;\r\n\r\n // clear canvas\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.clear();\r\n\r\n // do fxaa processing of offscreen buff2\r\n _fxaaMaterial.uniforms.srcTex.value = srcBuffer.texture;\r\n _fxaaMaterial.uniforms.srcTexelSize.value.set(1.0 / srcBuffer.width, 1.0 / srcBuffer.height);\r\n _fxaaMaterial.uniforms.bgColor.value.set(settings.now.bg.color);\r\n\r\n if (_fxaaMaterial.bgTransparent !== settings.now.bg.transparent) {\r\n _fxaaMaterial.setValues({ bgTransparent: settings.now.bg.transparent });\r\n _fxaaMaterial.needsUpdate = true;\r\n }\r\n gfx.renderer.renderScreenQuad(_fxaaMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._performAO = (function () {\r\n const _aoMaterial = new AOMaterial();\r\n const _horBlurMaterial = new AOHorBlurMaterial();\r\n const _vertBlurMaterial = new AOVertBlurWithBlendMaterial();\r\n\r\n const _scale = new THREE.Vector3();\r\n return function (srcColorBuffer, normalBuffer, srcDepthTexture, targetBuffer, tempBuffer, tempBuffer1) {\r\n if (!srcColorBuffer || !normalBuffer || !srcDepthTexture || !targetBuffer || !tempBuffer || !tempBuffer1) {\r\n return;\r\n }\r\n const gfx = this._gfx;\r\n const tanHalfFOV = Math.tan(THREE.MathUtils.DEG2RAD * 0.5 * gfx.camera.fov);\r\n\r\n _aoMaterial.uniforms.diffuseTexture.value = srcColorBuffer.texture;\r\n _aoMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n _aoMaterial.uniforms.normalTexture.value = normalBuffer.texture;\r\n _aoMaterial.uniforms.srcTexelSize.value.set(1.0 / srcColorBuffer.width, 1.0 / srcColorBuffer.height);\r\n _aoMaterial.uniforms.camNearFar.value.set(gfx.camera.near, gfx.camera.far);\r\n _aoMaterial.uniforms.projMatrix.value = gfx.camera.projectionMatrix;\r\n _aoMaterial.uniforms.aspectRatio.value = gfx.camera.aspect;\r\n _aoMaterial.uniforms.tanHalfFOV.value = tanHalfFOV;\r\n gfx.root.matrix.extractScale(_scale);\r\n _aoMaterial.uniforms.kernelRadius.value = settings.now.debug.ssaoKernelRadius * _scale.x;\r\n _aoMaterial.uniforms.depthThreshold.value = 2.0 * this._getBSphereRadius(); // diameter\r\n _aoMaterial.uniforms.factor.value = settings.now.debug.ssaoFactor;\r\n // N: should be tempBuffer1 for proper use of buffers (see buffers using outside the function)\r\n gfx.renderer.setRenderTarget(tempBuffer1);\r\n gfx.renderer.renderScreenQuad(_aoMaterial);\r\n\r\n _horBlurMaterial.uniforms.aoMap.value = tempBuffer1.texture;\r\n _horBlurMaterial.uniforms.srcTexelSize.value.set(1.0 / tempBuffer1.width, 1.0 / tempBuffer1.height);\r\n _horBlurMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n gfx.renderer.setRenderTarget(tempBuffer);\r\n gfx.renderer.renderScreenQuad(_horBlurMaterial);\r\n\r\n _vertBlurMaterial.uniforms.aoMap.value = tempBuffer.texture;\r\n _vertBlurMaterial.uniforms.diffuseTexture.value = srcColorBuffer.texture;\r\n _vertBlurMaterial.uniforms.srcTexelSize.value.set(1.0 / tempBuffer.width, 1.0 / tempBuffer.height);\r\n _vertBlurMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n _vertBlurMaterial.uniforms.projMatrix.value = gfx.camera.projectionMatrix;\r\n _vertBlurMaterial.uniforms.aspectRatio.value = gfx.camera.aspect;\r\n _vertBlurMaterial.uniforms.tanHalfFOV.value = tanHalfFOV;\r\n const { fog } = gfx.scene;\r\n if (fog) {\r\n _vertBlurMaterial.uniforms.fogNearFar.value.set(fog.near, fog.far);\r\n _vertBlurMaterial.uniforms.fogColor.value.set(fog.color.r, fog.color.g, fog.color.b, settings.now.fogAlpha);\r\n }\r\n if ((_vertBlurMaterial.useFog !== settings.now.fog)\r\n || (_vertBlurMaterial.fogTransparent !== settings.now.bg.transparent)) {\r\n _vertBlurMaterial.setValues({ useFog: settings.now.fog, fogTransparent: settings.now.bg.transparent });\r\n _vertBlurMaterial.needsUpdate = true;\r\n }\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuad(_vertBlurMaterial);\r\n };\r\n}());\r\n\r\n/**\r\n * Reset the viewer, unload molecules.\r\n * @param {boolean=} keepReps - Keep representations while resetting viewer state.\r\n */\r\nMiew.prototype.reset = function (/* keepReps */) {\r\n if (this._picker) {\r\n this._picker.reset();\r\n }\r\n this._lastPick = null;\r\n\r\n this._releaseAllVisuals();\r\n\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this._resetObjects();\r\n\r\n if (this._gfx) {\r\n gfxutils.clearTree(this._gfx.pivot);\r\n this._gfx.renderer2d.reset();\r\n }\r\n\r\n this.setNeedRender();\r\n};\r\n\r\nMiew.prototype._resetScene = function () {\r\n this._objectControls.reset();\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n this.resetReps();\r\n this.resetPivot();\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype.resetView = function () {\r\n // reset controls\r\n if (this._picker) {\r\n this._picker.reset();\r\n }\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._resetScene();\r\n\r\n // reset selection\r\n this._forEachComplexVisual((visual) => {\r\n visual.updateSelectionMask({});\r\n visual.rebuildSelectionGeometry();\r\n });\r\n};\r\n\r\nMiew.prototype._export = function (format) {\r\n const TheExporter = _.head(io.exporters.find({ format }));\r\n if (!TheExporter) {\r\n this.logger.error('Could not find suitable exporter for this source');\r\n return Promise.reject(new Error('Could not find suitable exporter for this source'));\r\n }\r\n this.dispatchEvent({ type: 'exporting' });\r\n\r\n if (this._visuals[this._curVisualName] instanceof ComplexVisual) {\r\n let dataSource = null;\r\n if (TheExporter.SourceClass === ComplexVisual) {\r\n dataSource = this._visuals[this._curVisualName];\r\n } else if (TheExporter.SourceClass === Complex) {\r\n dataSource = this._visuals[this._curVisualName]._complex;\r\n }\r\n const exporter = new TheExporter(dataSource, { miewVersion: Miew.VERSION });\r\n return exporter.export().then((data) => data);\r\n }\r\n if (this._visuals[this._curVisualName] instanceof VolumeVisual) {\r\n return Promise.reject(new Error('Sorry, exporter for volume data not implemented yet'));\r\n }\r\n return Promise.reject(new Error('Unexpected format of data'));\r\n};\r\n\r\nconst rePdbId = /^(?:(pdb|cif|ccp4|dsn6):\\s*)?(\\d[a-z\\d]{3})$/i;\r\nconst rePubchem = /^(?:pc|pubchem):\\s*([a-z]+)$/i;\r\nconst reUrlScheme = /^([a-z][a-z\\d\\-+.]*):/i;\r\n\r\nfunction resolveSourceShortcut(source, opts) {\r\n if (!_.isString(source)) {\r\n return source;\r\n }\r\n\r\n // e.g. \"cif:1CRN\"\r\n const matchesPdbId = rePdbId.exec(source);\r\n if (matchesPdbId) {\r\n let [, format = 'pdb', id] = matchesPdbId;\r\n\r\n format = format.toLowerCase();\r\n id = id.toUpperCase();\r\n\r\n switch (format) {\r\n case 'pdb':\r\n source = `https://files.rcsb.org/download/${id}.pdb`;\r\n break;\r\n case 'cif':\r\n source = `https://files.rcsb.org/download/${id}.cif`;\r\n break;\r\n case 'ccp4':\r\n source = `https://www.ebi.ac.uk/pdbe/coordinates/files/${id.toLowerCase()}.ccp4`;\r\n break;\r\n case 'dsn6':\r\n source = `https://edmaps.rcsb.org/maps/${id.toLowerCase()}_2fofc.dsn6`;\r\n break;\r\n default:\r\n throw new Error('Unexpected data format shortcut');\r\n }\r\n\r\n opts.fileType = format;\r\n opts.fileName = `${id}.${format}`;\r\n opts.sourceType = 'url';\r\n return source;\r\n }\r\n\r\n // e.g. \"pc:aspirin\"\r\n const matchesPubchem = rePubchem.exec(source);\r\n if (matchesPubchem) {\r\n const compound = matchesPubchem[1].toLowerCase();\r\n source = `https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/${compound}/JSON?record_type=3d`;\r\n opts.fileType = 'pubchem';\r\n opts.fileName = `${compound}.json`;\r\n opts.sourceType = 'url';\r\n return source;\r\n }\r\n\r\n // otherwise is should be an URL\r\n if (opts.sourceType === 'url' || opts.sourceType === undefined) {\r\n opts.sourceType = 'url';\r\n\r\n // e.g. \"./data/1CRN.pdb\"\r\n if (!reUrlScheme.test(source)) {\r\n source = utils.resolveURL(source);\r\n }\r\n }\r\n\r\n return source;\r\n}\r\n\r\nfunction updateBinaryMode(opts) {\r\n let { binary } = opts;\r\n\r\n // detect by format\r\n if (opts.fileType !== undefined) {\r\n const TheParser = _.head(io.parsers.find({ format: opts.fileType }));\r\n if (TheParser) {\r\n binary = TheParser.binary || false;\r\n } else {\r\n throw new Error('Could not find suitable parser for this format');\r\n }\r\n }\r\n\r\n // detect by file extension\r\n if (binary === undefined && opts.fileExt !== undefined) {\r\n const TheParser = _.head(io.parsers.find({ ext: opts.fileExt }));\r\n if (TheParser) {\r\n binary = TheParser.binary || false;\r\n }\r\n }\r\n\r\n // temporary workaround for animation\r\n if (opts.fileExt !== undefined && opts.fileExt.toLowerCase() === '.man') {\r\n opts.binary = true;\r\n opts.animation = true; // who cares?\r\n }\r\n\r\n // update if detected\r\n if (binary !== undefined) {\r\n if (opts.binary !== undefined && opts.binary !== binary) {\r\n opts.context.logger.warn('Overriding incorrect binary mode');\r\n }\r\n }\r\n\r\n opts.binary = binary || false;\r\n}\r\n\r\nfunction _fetchData(source, opts, job) {\r\n return new Promise(((resolve) => {\r\n if (job.shouldCancel()) {\r\n throw new Error('Operation cancelled');\r\n }\r\n job.notify({ type: 'fetching' });\r\n\r\n // allow for source shortcuts\r\n source = resolveSourceShortcut(source, opts);\r\n\r\n // detect a proper loader\r\n const TheLoader = _.head(io.loaders.find({ type: opts.sourceType, source }));\r\n if (!TheLoader) {\r\n throw new Error(LOADER_NOT_FOUND);\r\n }\r\n\r\n // split file name\r\n const fileName = opts.fileName || TheLoader.extractName(source);\r\n if (fileName) {\r\n const [name, fileExt] = utils.splitFileName(fileName);\r\n _.defaults(opts, { name, fileExt, fileName });\r\n }\r\n\r\n // should it be text or binary?\r\n updateBinaryMode(opts);\r\n\r\n // FIXME: All new settings retrieved from server are applied after the loading is complete. However, we need some\r\n // flags to alter the loading process itself. Here we apply them in advance. Dirty hack. Kill the server, remove\r\n // all hacks and everybody's happy.\r\n let newOptions = _.get(opts, 'preset.expression');\r\n if (!_.isUndefined(newOptions)) {\r\n newOptions = JSON.parse(newOptions);\r\n if (newOptions && newOptions.settings) {\r\n const keys = ['singleUnit'];\r\n for (let keyIndex = 0, keyCount = keys.length; keyIndex < keyCount; ++keyIndex) {\r\n const key = keys[keyIndex];\r\n const value = _.get(newOptions.settings, key);\r\n if (!_.isUndefined(value)) {\r\n settings.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // create a loader\r\n const loader = new TheLoader(source, opts);\r\n loader.context = opts.context;\r\n job.addEventListener('cancel', () => loader.abort());\r\n\r\n loader.addEventListener('progress', (event) => {\r\n if (event.lengthComputable && event.total > 0) {\r\n reportProgress(loader.logger, 'Fetching', event.loaded / event.total);\r\n } else {\r\n reportProgress(loader.logger, 'Fetching');\r\n }\r\n });\r\n\r\n console.time('fetch');\r\n const promise = loader.load()\r\n .then((data) => {\r\n console.timeEnd('fetch');\r\n opts.context.logger.info('Fetching finished');\r\n job.notify({ type: 'fetchingDone', data });\r\n return data;\r\n })\r\n .catch((error) => {\r\n console.timeEnd('fetch');\r\n opts.context.logger.debug(error.message);\r\n if (error.stack) {\r\n opts.context.logger.debug(error.stack);\r\n }\r\n opts.context.logger.error('Fetching failed');\r\n job.notify({ type: 'fetchingDone', error });\r\n throw error;\r\n });\r\n resolve(promise);\r\n }));\r\n}\r\n\r\nfunction _parseData(data, opts, job) {\r\n if (job.shouldCancel()) {\r\n return Promise.reject(new Error('Operation cancelled'));\r\n }\r\n\r\n job.notify({ type: 'parsing' });\r\n\r\n const TheParser = _.head(io.parsers.find({ format: opts.fileType, ext: opts.fileExt, data }));\r\n if (!TheParser) {\r\n return Promise.reject(new Error('Could not find suitable parser'));\r\n }\r\n\r\n const parser = new TheParser(data, opts);\r\n parser.context = opts.context;\r\n job.addEventListener('cancel', () => parser.abort());\r\n\r\n console.time('parse');\r\n return parser.parse()\r\n .then((dataSet) => {\r\n console.timeEnd('parse');\r\n job.notify({ type: 'parsingDone', data: dataSet });\r\n return dataSet;\r\n })\r\n .catch((error) => {\r\n console.timeEnd('parse');\r\n opts.error = error;\r\n opts.context.logger.debug(error.message);\r\n if (error.stack) {\r\n opts.context.logger.debug(error.stack);\r\n }\r\n opts.context.logger.error('Parsing failed');\r\n job.notify({ type: 'parsingDone', error });\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * Load molecule asynchronously.\r\n * @param {string|File} source - Molecule source to load (e.g. PDB ID, URL or File object).\r\n * @param {object=} opts - Options.\r\n * @param {string=} opts.sourceType - Data source type (e.g. 'url', 'file').\r\n * @param {string=} opts.fileType - Data contents type (e.g. 'pdb', 'cml').\r\n * @param {string=} opts.mdFile - .nc file path.\r\n * @param {boolean=} opts.keepRepsInfo - prevent reset of object and reps information.\r\n * @returns {Promise} name of the visual that was added to the viewer\r\n */\r\nMiew.prototype.load = function (source, opts) {\r\n opts = _.merge({}, opts, {\r\n context: this,\r\n });\r\n\r\n // for a single-file scenario\r\n if (!this.settings.now.use.multiFile) {\r\n // abort all loaders in progress\r\n if (this._loading.length) {\r\n this._loading.forEach((job) => {\r\n job.cancel();\r\n });\r\n this._loading.length = 0;\r\n }\r\n\r\n // reset\r\n if (!opts.animation) { // FIXME: sometimes it is set AFTERWARDS!\r\n this.reset(true);\r\n }\r\n }\r\n\r\n this._interpolator.reset();\r\n\r\n this.dispatchEvent({ type: 'loading', options: opts, source });\r\n\r\n const job = new JobHandle();\r\n this._loading.push(job);\r\n job.addEventListener('notification', (e) => {\r\n this.dispatchEvent(e.slaveEvent);\r\n });\r\n\r\n this._spinner.spin(this._container);\r\n\r\n const onLoadEnd = (anything) => {\r\n const jobIndex = this._loading.indexOf(job);\r\n if (jobIndex !== -1) {\r\n this._loading.splice(jobIndex, 1);\r\n }\r\n this._spinner.stop();\r\n this._refreshTitle();\r\n job.notify({ type: 'loadingDone', anything });\r\n return anything;\r\n };\r\n\r\n return _fetchData(source, opts, job)\r\n .then((data) => _parseData(data, opts, job))\r\n .then((object) => {\r\n const name = this._onLoad(object, opts);\r\n return onLoadEnd(name);\r\n })\r\n .catch((err) => {\r\n this.logger.error('Could not load data');\r\n this.logger.debug(err);\r\n throw onLoadEnd(err);\r\n });\r\n};\r\n\r\n/**\r\n * Unload molecule (delete corresponding visual).\r\n * @param {string=} name - name of the visual\r\n */\r\nMiew.prototype.unload = function (name) {\r\n this._removeVisual(name || this.getCurrentVisual());\r\n this.resetPivot();\r\n if (settings.now.shadow.on) {\r\n this._updateShadowCamera();\r\n }\r\n};\r\n\r\n/**\r\n * Start new animation. Now is broken.\r\n * @param fileData - new data to animate\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._startAnimation = function (fileData) {\r\n this._stopAnimation();\r\n const self = this;\r\n const visual = this._getComplexVisual();\r\n if (visual === null) {\r\n this.logger.error('Unable to start animation - no molecule is loaded.');\r\n return;\r\n }\r\n try {\r\n this._frameInfo = new FrameInfo(\r\n visual.getComplex(),\r\n fileData,\r\n {\r\n onLoadStatusChanged() {\r\n self.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: self._isAnimating,\r\n isLoading: self._frameInfo ? self._frameInfo.isLoading : true,\r\n },\r\n });\r\n },\r\n onError(message) {\r\n self._stopAnimation();\r\n self.logger.error(message);\r\n },\r\n },\r\n );\r\n } catch (e) {\r\n this.logger.error('Animation file does not fit to current complex!');\r\n return;\r\n }\r\n this._continueAnimation();\r\n};\r\n\r\n/**\r\n * Pause current animation. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._pauseAnimation = function () {\r\n if (this._animInterval === null) {\r\n return;\r\n }\r\n this._isAnimating = false;\r\n clearInterval(this._animInterval);\r\n this._animInterval = null;\r\n if (this._frameInfo) {\r\n this.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: this._isAnimating,\r\n isLoading: this._frameInfo.isLoading,\r\n },\r\n });\r\n }\r\n};\r\n\r\n/**\r\n * Continue current animation after pausing. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._continueAnimation = function () {\r\n this._isAnimating = true;\r\n let minFrameTime = 1000 / settings.now.maxfps;\r\n minFrameTime = Number.isNaN(minFrameTime) ? 0 : minFrameTime;\r\n const self = this;\r\n const { pivot } = self._gfx;\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n visual.resetSelectionMask();\r\n visual.rebuildSelectionGeometry();\r\n this._msgAtomInfo.style.opacity = 0.0;\r\n }\r\n this._animInterval = setInterval(() => {\r\n self.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: self._isAnimating,\r\n isLoading: self._frameInfo.isLoading,\r\n },\r\n });\r\n if (self._frameInfo.frameIsReady) {\r\n pivot.updateToFrame(self._frameInfo);\r\n self._updateObjsToFrame(self._frameInfo);\r\n self._refreshTitle(` Frame ${self._frameInfo._currFrame} of ${self._frameInfo._framesCount\r\n } time interval - ${self._frameInfo._timeStep}`);\r\n try {\r\n self._frameInfo.nextFrame();\r\n } catch (e) {\r\n self.logger.error('Error during animation');\r\n self._stopAnimation();\r\n return;\r\n }\r\n self._needRender = true;\r\n }\r\n }, minFrameTime);\r\n};\r\n\r\n/**\r\n * Stop current animation. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._stopAnimation = function () {\r\n if (this._animInterval === null) {\r\n return;\r\n }\r\n clearInterval(this._animInterval);\r\n this._frameInfo.disableEvents();\r\n this._frameInfo = null;\r\n this._animInterval = null;\r\n this.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: null,\r\n });\r\n};\r\n\r\n/**\r\n * Invoked upon successful loading of some data source\r\n * @param {DataSource} dataSource - Data source for visualization (molecular complex or other)\r\n * @param {object} opts - Options.\r\n * @private\r\n */\r\nMiew.prototype._onLoad = function (dataSource, opts) {\r\n const gfx = this._gfx;\r\n let visualName = null;\r\n\r\n if (opts.animation) {\r\n this._refreshTitle();\r\n this._startAnimation(dataSource);\r\n return null;\r\n }\r\n this._stopAnimation();\r\n if (!opts || !opts.keepRepsInfo) {\r\n this._opts.reps = null;\r\n this._opts._objects = null;\r\n }\r\n\r\n if (dataSource.id === 'Complex') {\r\n const complex = dataSource;\r\n\r\n // update title\r\n if (opts.fileName) {\r\n complex.name = complex.name || removeExtension(opts.fileName).toUpperCase();\r\n } else if (opts.amberFileName) {\r\n complex.name = complex.name || removeExtension(opts.amberFileName).toUpperCase();\r\n } else {\r\n complex.name = `Dynamic ${opts.fileType} molecule`;\r\n }\r\n\r\n visualName = this._addVisual(new ComplexVisual(complex.name, complex));\r\n this._curVisualName = visualName;\r\n\r\n const desc = this.info();\r\n this.logger.info(`Parsed ${opts.fileName} (${\r\n desc.atoms} atoms, ${\r\n desc.bonds} bonds, ${\r\n desc.residues} residues, ${\r\n desc.chains} chains).`);\r\n\r\n if (_.isNumber(this._opts.unit)) {\r\n complex.setCurrentUnit(this._opts.unit);\r\n }\r\n\r\n if (opts.preset) {\r\n // ...removed server access...\r\n } else if (settings.now.autoPreset) {\r\n switch (opts.fileType) {\r\n case 'cml':\r\n this.resetReps('small');\r\n break;\r\n case 'pdb':\r\n case 'mmtf':\r\n case 'cif':\r\n if (hasValidResidues(complex)) {\r\n this.resetReps('macro');\r\n } else {\r\n this.resetReps('small');\r\n }\r\n break;\r\n default:\r\n this.resetReps('default');\r\n break;\r\n }\r\n } else {\r\n this.resetReps('default');\r\n }\r\n } else if (dataSource.id === 'Volume') {\r\n this.resetEd();\r\n visualName = this._onLoadEd(dataSource);\r\n }\r\n\r\n gfx.camera.updateProjectionMatrix();\r\n this._updateFog();\r\n\r\n // reset global transform\r\n gfx.root.resetTransform();\r\n this.resetPivot();\r\n\r\n // set scale to fit everything on the screen\r\n this._objectControls.setScale(settings.now.radiusToFit / this._getBSphereRadius());\r\n\r\n this._resetObjects();\r\n\r\n if (settings.now.autoResolution) {\r\n this._tweakResolution();\r\n }\r\n\r\n if (settings.now.shadow.on) {\r\n this._updateShadowCamera();\r\n }\r\n\r\n if (this._opts.view) {\r\n this.view(this._opts.view);\r\n delete this._opts.view;\r\n }\r\n\r\n this._refreshTitle();\r\n\r\n return visualName;\r\n};\r\n\r\nMiew.prototype.resetEd = function () {\r\n if (this._edLoader) {\r\n this._edLoader.abort();\r\n this._edLoader = null;\r\n }\r\n\r\n // free all resources\r\n this._removeVisual(this._getVolumeVisual());\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype.loadEd = function (source) {\r\n this.resetEd();\r\n\r\n const TheLoader = _.head(io.loaders.find({ source }));\r\n if (!TheLoader) {\r\n this.logger.error(LOADER_NOT_FOUND);\r\n return Promise.reject(new Error(LOADER_NOT_FOUND));\r\n }\r\n\r\n const loader = this._edLoader = new TheLoader(source, { binary: true });\r\n loader.context = this;\r\n return loader.load().then((data) => {\r\n const TheParser = _.head(io.parsers.find({ format: 'ccp4' }));\r\n if (!TheParser) {\r\n throw new Error(PARSER_NOT_FOUND);\r\n }\r\n const parser = new TheParser(data);\r\n parser.context = this;\r\n return parser.parse().then((dataSource) => {\r\n this._onLoadEd(dataSource);\r\n });\r\n }).catch((error) => {\r\n this.logger.error('Could not load ED data');\r\n this.logger.debug(error);\r\n });\r\n};\r\n\r\nMiew.prototype._onLoadEd = function (dataSource) {\r\n dataSource.normalize();\r\n\r\n const volumeVisual = new VolumeVisual('volume', dataSource);\r\n volumeVisual.getMesh().layers.set(gfxutils.LAYERS.VOLUME); // volume mesh is not visible to common render\r\n const visualName = this._addVisual(volumeVisual);\r\n\r\n this._needRender = true;\r\n return visualName;\r\n};\r\n\r\nMiew.prototype._needRebuild = function () {\r\n let needsRebuild = false;\r\n this._forEachComplexVisual((visual) => {\r\n needsRebuild = needsRebuild || visual.needsRebuild();\r\n });\r\n return needsRebuild;\r\n};\r\n\r\nMiew.prototype._rebuildObjects = function () {\r\n const self = this;\r\n const gfx = this._gfx;\r\n let i;\r\n let n;\r\n\r\n // remove old object geometry\r\n const toRemove = [];\r\n for (i = 0; i < gfx.pivot.children.length; ++i) {\r\n const child = gfx.pivot.children[i];\r\n if (!(child instanceof Visual)) {\r\n toRemove.push(child);\r\n }\r\n }\r\n for (i = 0; i < toRemove.length; ++i) {\r\n toRemove[i].parent.remove(toRemove[i]);\r\n }\r\n\r\n setTimeout(() => {\r\n const objList = self._objects;\r\n for (i = 0, n = objList.length; i < n; ++i) {\r\n const obj = objList[i];\r\n if (obj.needsRebuild) {\r\n obj.build();\r\n }\r\n if (obj.getGeometry()) {\r\n gfx.pivot.add(obj.getGeometry());\r\n }\r\n }\r\n }, 10);\r\n};\r\n\r\nMiew.prototype.changeUnit = function (unitIdx, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n throw new Error('There is no complex to change!');\r\n }\r\n\r\n function currentUnitInfo() {\r\n const unit = visual ? visual.getComplex().getCurrentUnit() : 0;\r\n const type = unit > 0 ? (`Bio molecule ${unit}`) : 'Asymmetric unit';\r\n return `Current unit: ${unit} (${type})`;\r\n }\r\n\r\n if (unitIdx === undefined) {\r\n return currentUnitInfo();\r\n }\r\n if (_.isString(unitIdx)) {\r\n unitIdx = Math.max(parseInt(unitIdx, 10), 0);\r\n }\r\n if (visual.getComplex().setCurrentUnit(unitIdx)) {\r\n this._resetScene();\r\n this._updateInfoPanel();\r\n }\r\n return currentUnitInfo();\r\n};\r\n\r\n/**\r\n * Start to rebuild geometry asynchronously.\r\n */\r\nMiew.prototype.rebuild = function () {\r\n if (this._building) {\r\n this.logger.warn('Miew.rebuild(): already building!');\r\n return;\r\n }\r\n this._building = true;\r\n\r\n this.dispatchEvent({ type: 'rebuilding' });\r\n\r\n this._rebuildObjects();\r\n\r\n this._gfx.renderer2d.reset();\r\n\r\n const rebuildActions = [];\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.needsRebuild()) {\r\n rebuildActions.push(visual.rebuild().then(() => new Promise(((resolve) => {\r\n visual.rebuildSelectionGeometry();\r\n resolve();\r\n }))));\r\n }\r\n });\r\n\r\n // Start asynchronous rebuild\r\n const self = this;\r\n this._spinner.spin(this._container);\r\n Promise.all(rebuildActions).then(() => {\r\n self._spinner.stop();\r\n\r\n self._needRender = true;\r\n\r\n self._refreshTitle();\r\n this.dispatchEvent({ type: 'buildingDone' });\r\n self._building = false;\r\n });\r\n};\r\n\r\n/** Mark all representations for rebuilding */\r\nMiew.prototype.rebuildAll = function () {\r\n this._forEachComplexVisual((visual) => {\r\n visual.setNeedsRebuild();\r\n });\r\n};\r\n\r\nMiew.prototype._refreshTitle = function (appendix) {\r\n let title;\r\n appendix = appendix === undefined ? '' : appendix;\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n title = visual.getComplex().name;\r\n const rep = visual.repGet(visual.repCurrent());\r\n title += (rep ? ` – ${rep.mode.name} Mode` : '');\r\n } else {\r\n title = Object.keys(this._visuals).length > 0 ? 'Unknown' : 'No Data';\r\n }\r\n title += appendix;\r\n\r\n this.dispatchEvent({ type: 'titleChanged', data: title });\r\n};\r\n\r\nMiew.prototype.setNeedRender = function () {\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._extractRepresentation = function () {\r\n const changed = [];\r\n\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getSelectionCount() === 0) {\r\n return;\r\n }\r\n\r\n const selector = visual.buildSelectorFromMask(1 << visual.getSelectionBit());\r\n const defPreset = settings.now.presets.default;\r\n const res = visual.repAdd({\r\n selector,\r\n mode: defPreset[0].mode.id,\r\n colorer: defPreset[0].colorer.id,\r\n material: defPreset[0].material.id,\r\n });\r\n if (!res) {\r\n if (visual.repCount() === ComplexVisual.NUM_REPRESENTATION_BITS) {\r\n this.logger.warn(`Number of representations is limited to ${ComplexVisual.NUM_REPRESENTATION_BITS}`);\r\n }\r\n return;\r\n }\r\n\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name: visual.name });\r\n visual.repCurrent(res.index);\r\n\r\n changed.push(visual.name);\r\n });\r\n\r\n if (changed.length > 0) {\r\n this.logger.report(`New representation from selection for complexes: ${changed.join(', ')}`);\r\n }\r\n};\r\n\r\n/**\r\n * Change current representation list.\r\n * @param {array} reps - Representation list.\r\n */\r\nMiew.prototype._setReps = function (reps) {\r\n reps = reps || (this._opts && this._opts.reps) || [];\r\n this._forEachComplexVisual((visual) => visual.resetReps(reps));\r\n};\r\n\r\n/**\r\n * Apply existing preset to current scene.\r\n * @param preset\r\n */\r\nMiew.prototype.applyPreset = function (preset) {\r\n const { presets } = settings.now;\r\n const presList = [\r\n preset || settings.defaults.preset,\r\n settings.defaults.preset,\r\n Object.keys(presets)[0],\r\n ];\r\n let reps = null;\r\n for (let i = 0; !reps && i < presList.length; ++i) {\r\n settings.set('preset', presList[i]);\r\n reps = presets[settings.now.preset];\r\n if (!reps) {\r\n this.logger.warn(`Unknown preset \"${settings.now.preset}\"`);\r\n }\r\n }\r\n this._setReps(reps);\r\n};\r\n\r\n/**\r\n * Reset current representation list to initial values.\r\n * @param {string} [preset] - The source preset in case of uninitialized representation list.\r\n */\r\nMiew.prototype.resetReps = function (preset) {\r\n const reps = this._opts && this._opts.reps;\r\n if (reps) {\r\n this._setReps(reps);\r\n } else {\r\n this.applyPreset(preset);\r\n }\r\n};\r\n\r\n/**\r\n * Get number of representations created so far.\r\n * @returns {number} Number of reps.\r\n */\r\nMiew.prototype.repCount = function (name) {\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repCount() : 0;\r\n};\r\n\r\n/**\r\n * Get or set the current representation index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @param {string=} [name] - Complex name. Defaults to the current one.\r\n * @returns {number} The current index.\r\n */\r\nMiew.prototype.repCurrent = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n const newIdx = visual ? visual.repCurrent(index) : -1;\r\n if (index && newIdx !== index) {\r\n this.logger.warn(`Representation ${index} was not found. Current rep remains unchanged.`);\r\n }\r\n return newIdx;\r\n};\r\n\r\n/**\r\n * Get or set representation by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount}(). Defaults to the current one.\r\n * @param {object=} rep - Optional representation description.\r\n * @param {string=} rep.selector - Selector string.\r\n * @param {string=} rep.mode - Mode id.\r\n * @param {string=} rep.colorer - Colorer id.\r\n * @param {string=} rep.material - Material id.\r\n * @returns {?object} Representation description.\r\n */\r\nMiew.prototype.rep = function (index, rep) {\r\n const visual = this._getComplexVisual('');\r\n if (!visual) {\r\n return null;\r\n }\r\n const res = visual.rep(index, rep);\r\n if (res.status === 'created') {\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name: visual.name });\r\n } else if (res.status === 'changed') {\r\n this.dispatchEvent({ type: 'repChanged', index: res.index, name: visual.name });\r\n }\r\n return res.desc;\r\n};\r\n\r\n/**\r\n * Get representation (not just description) by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount}(). Defaults to the current one.\r\n * @returns {?object} Representation.\r\n */\r\nMiew.prototype.repGet = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repGet(index) : null;\r\n};\r\n\r\n/**\r\n * Add new representation.\r\n * @param {object=} rep - Representation description.\r\n * @returns {number} Index of the new representation.\r\n */\r\nMiew.prototype.repAdd = function (rep, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return -1;\r\n }\r\n\r\n const res = visual.repAdd(rep);\r\n if (res) {\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name });\r\n return res.index;\r\n }\r\n return -1;\r\n};\r\n\r\n/**\r\n * Remove representation.\r\n * @param {number=} index - Zero-based representation index.\r\n */\r\nMiew.prototype.repRemove = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n visual.repRemove(index);\r\n this.dispatchEvent({ type: 'repRemoved', index, name });\r\n};\r\n\r\n/**\r\n * Hide representation.\r\n * @param {number} index - Zero-based representation index.\r\n * @param {boolean=} hide - Specify false to make rep visible, true to hide (by default).\r\n */\r\nMiew.prototype.repHide = function (index, hide, name) {\r\n this._needRender = true;\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repHide(index, hide) : null;\r\n};\r\n\r\nMiew.prototype._setEditMode = function (mode) {\r\n this._editMode = mode;\r\n\r\n const elem = this._msgMode;\r\n if (elem) {\r\n elem.style.opacity = (mode === EDIT_MODE.COMPLEX) ? 0.0 : 1.0;\r\n\r\n if (mode !== EDIT_MODE.COMPLEX) {\r\n const t = elem.getElementsByTagName('p')[0];\r\n t.innerHTML = (mode === EDIT_MODE.COMPONENT) ? 'COMPONENT EDIT MODE' : 'FRAGMENT EDIT MODE';\r\n }\r\n }\r\n\r\n this.dispatchEvent({ type: 'editModeChanged', data: mode === EDIT_MODE.COMPLEX });\r\n};\r\n\r\nMiew.prototype._enterComponentEditMode = function () {\r\n if (this._editMode !== EDIT_MODE.COMPLEX) {\r\n return;\r\n }\r\n\r\n const editors = [];\r\n this._forEachComplexVisual((visual) => {\r\n const editor = visual.beginComponentEdit();\r\n if (editor) {\r\n editors.push(editor);\r\n }\r\n });\r\n\r\n if (editors === []) {\r\n return;\r\n }\r\n\r\n this._editors = editors;\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- ON');\r\n this._setEditMode(EDIT_MODE.COMPONENT);\r\n this._objectControls.keysTranslateObj(true);\r\n};\r\n\r\nMiew.prototype._applyComponentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.COMPONENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n this._objectControls.keysTranslateObj(false);\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].apply();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- OFF (applied)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._discardComponentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.COMPONENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n this._objectControls.keysTranslateObj(false);\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].discard();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- OFF (discarded)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this._needRender = true;\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._enterFragmentEditMode = function () {\r\n if (this._editMode !== EDIT_MODE.COMPLEX) {\r\n return;\r\n }\r\n\r\n const selectedVisuals = [];\r\n this._forEachComplexVisual((visual) => {\r\n if (visual instanceof ComplexVisual\r\n && visual.getSelectionCount() > 0) {\r\n selectedVisuals.push(visual);\r\n }\r\n });\r\n\r\n if (selectedVisuals.length !== 1) {\r\n // either we have no selection or\r\n // we have selected atoms in two or more visuals -- not supported\r\n return;\r\n }\r\n\r\n const editor = selectedVisuals[0].beginFragmentEdit();\r\n if (!editor) {\r\n return;\r\n }\r\n this._editors = [editor];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- ON (single bond)');\r\n this._setEditMode(EDIT_MODE.FRAGMENT);\r\n this._objectControls.allowTranslation(false);\r\n this._objectControls.allowAltObjFreeRotation(editor.isFreeRotationAllowed());\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._applyFragmentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.FRAGMENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].apply();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- OFF (applied)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._discardFragmentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.FRAGMENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].discard();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- OFF (discarded)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._onPick = function (event) {\r\n if (!settings.now.picking) {\r\n // picking is disabled\r\n return;\r\n }\r\n\r\n if (this._animInterval !== null) {\r\n // animation playback is on\r\n return;\r\n }\r\n\r\n if (this._editMode === EDIT_MODE.FRAGMENT) {\r\n // prevent picking in fragment edit mode\r\n return;\r\n }\r\n\r\n if (this._objectControls.isEditingAltObj()) {\r\n // prevent picking during component rotation\r\n return;\r\n }\r\n\r\n // update last pick & find complex\r\n let complex = null;\r\n if (event.obj.atom) {\r\n complex = event.obj.atom.residue.getChain().getComplex();\r\n this._lastPick = event.obj.atom;\r\n } else if (event.obj.residue) {\r\n complex = event.obj.residue.getChain().getComplex();\r\n this._lastPick = event.obj.residue;\r\n } else if (event.obj.chain) {\r\n complex = event.obj.chain.getComplex();\r\n this._lastPick = event.obj.chain;\r\n } else if (event.obj.molecule) {\r\n complex = event.obj.molecule.complex;\r\n this._lastPick = event.obj.molecule;\r\n } else {\r\n this._lastPick = null;\r\n }\r\n\r\n function _updateSelection(visual) {\r\n visual.updateSelectionMask(event.obj);\r\n visual.rebuildSelectionGeometry();\r\n }\r\n\r\n // update visual\r\n if (complex) {\r\n const visual = this._getVisualForComplex(complex);\r\n if (visual) {\r\n _updateSelection(visual);\r\n this._needRender = true;\r\n }\r\n } else {\r\n this._forEachComplexVisual(_updateSelection);\r\n this._needRender = true;\r\n }\r\n\r\n this._updateInfoPanel();\r\n this.dispatchEvent(event);\r\n};\r\n\r\nMiew.prototype._onKeyDown = function (event) {\r\n if (!this._running || !this._hotKeysEnabled) {\r\n return;\r\n }\r\n\r\n // editing keys\r\n if (settings.now.editing) {\r\n switch (event.code) {\r\n case 'KeyC':\r\n this._enterComponentEditMode();\r\n break;\r\n case 'KeyF':\r\n this._enterFragmentEditMode();\r\n break;\r\n case 'KeyA':\r\n switch (this._editMode) {\r\n case EDIT_MODE.COMPONENT:\r\n this._applyComponentEdit();\r\n break;\r\n case EDIT_MODE.FRAGMENT:\r\n this._applyFragmentEdit();\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n case 'KeyD':\r\n switch (this._editMode) {\r\n case EDIT_MODE.COMPONENT:\r\n this._discardComponentEdit();\r\n break;\r\n case EDIT_MODE.FRAGMENT:\r\n this._discardFragmentEdit();\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n default:\r\n }\r\n }\r\n\r\n // other keys\r\n switch (event.code) {\r\n case 'NumpadAdd':\r\n if (event.altKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._forEachComplexVisual((visual) => {\r\n visual.expandSelection();\r\n visual.rebuildSelectionGeometry();\r\n });\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n }\r\n break;\r\n case 'NumpadSubtract':\r\n if (event.altKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._forEachComplexVisual((visual) => {\r\n visual.shrinkSelection();\r\n visual.rebuildSelectionGeometry();\r\n });\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n }\r\n break;\r\n default:\r\n }\r\n};\r\n\r\nMiew.prototype._onKeyUp = function (event) {\r\n if (!this._running || !this._hotKeysEnabled) {\r\n return;\r\n }\r\n\r\n if (event.code === 'KeyX') {\r\n this._extractRepresentation();\r\n }\r\n};\r\n\r\nMiew.prototype._updateInfoPanel = function () {\r\n const info = this._msgAtomInfo.getElementsByTagName('p')[0];\r\n let atom;\r\n let residue;\r\n\r\n let count = 0;\r\n this._forEachComplexVisual((visual) => {\r\n count += visual.getSelectionCount();\r\n });\r\n\r\n while (info.firstChild) {\r\n info.removeChild(info.firstChild);\r\n }\r\n\r\n if (count === 0) {\r\n this._msgAtomInfo.style.opacity = 0.0;\r\n return;\r\n }\r\n\r\n let firstLine = `${String(count)} atom${count !== 1 ? 's' : ''} selected`;\r\n if (this._lastPick !== null) {\r\n firstLine += ', the last pick:';\r\n }\r\n let secondLine = '';\r\n let aName = '';\r\n let coordLine = '';\r\n\r\n if (this._lastPick instanceof Atom) {\r\n atom = this._lastPick;\r\n residue = atom.residue;\r\n\r\n aName = atom.name;\r\n const location = (atom.location !== 32) ? String.fromCharCode(atom.location) : ''; // 32 is code of white-space\r\n secondLine = `${atom.element.fullName} #${atom.serial}${location}: \\\r\n ${residue._chain._name}.${residue._type._name}${residue._sequence}${residue._icode.trim()}.`;\r\n secondLine += aName;\r\n\r\n coordLine = `Coord: (${atom.position.x.toFixed(2).toString()},\\\r\n ${atom.position.y.toFixed(2).toString()},\\\r\n ${atom.position.z.toFixed(2).toString()})`;\r\n } else if (this._lastPick instanceof Residue) {\r\n residue = this._lastPick;\r\n\r\n secondLine = `${residue._type._fullName}: \\\r\n ${residue._chain._name}.${residue._type._name}${residue._sequence}${residue._icode.trim()}`;\r\n } else if (this._lastPick instanceof Chain) {\r\n secondLine = `chain ${this._lastPick._name}`;\r\n } else if (this._lastPick instanceof Molecule) {\r\n secondLine = `molecule ${this._lastPick._name}`;\r\n }\r\n\r\n info.appendChild(document.createTextNode(firstLine));\r\n\r\n if (secondLine !== '') {\r\n info.appendChild(document.createElement('br'));\r\n info.appendChild(document.createTextNode(secondLine));\r\n }\r\n\r\n if (coordLine !== '') {\r\n info.appendChild(document.createElement('br'));\r\n info.appendChild(document.createTextNode(coordLine));\r\n }\r\n\r\n this._msgAtomInfo.style.opacity = 1.0;\r\n};\r\n\r\nMiew.prototype._getAltObj = function () {\r\n if (this._editors) {\r\n let altObj = null;\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n const nextAltObj = this._editors[i].getAltObj();\r\n if (nextAltObj.objects.length > 0) {\r\n if (altObj) {\r\n // we have selected atoms in two or more visuals -- not supported\r\n altObj = null;\r\n break;\r\n }\r\n altObj = nextAltObj;\r\n }\r\n }\r\n if (altObj) {\r\n return altObj;\r\n }\r\n }\r\n\r\n return {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n};\r\n\r\nMiew.prototype.resetPivot = (function () {\r\n const boundingBox = new THREE.Box3();\r\n const center = new THREE.Vector3();\r\n\r\n return function () {\r\n boundingBox.makeEmpty();\r\n this._forEachVisual((visual) => {\r\n boundingBox.union(visual.getBoundaries().boundingBox);\r\n });\r\n\r\n boundingBox.getCenter(center);\r\n this._objectControls.setPivot(center.negate());\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotResidue = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n return function (residue) {\r\n const visual = this._getVisualForComplex(residue.getChain().getComplex());\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n if (residue._controlPoint) {\r\n center.copy(residue._controlPoint);\r\n } else {\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n const amount = residue._atoms.length;\r\n for (let i = 0; i < amount; ++i) {\r\n const p = residue._atoms[i].position;\r\n x += p.x / amount;\r\n y += p.y / amount;\r\n z += p.z / amount;\r\n }\r\n center.set(x, y, z);\r\n }\r\n center.applyMatrix4(visual.matrix).negate();\r\n this._objectControls.setPivot(center);\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotAtom = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n return function (atom) {\r\n const visual = this._getVisualForComplex(atom.residue.getChain().getComplex());\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n center.copy(atom.position);\r\n center.applyMatrix4(visual.matrix).negate();\r\n this._objectControls.setPivot(center);\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.getSelectionCenter = (function () {\r\n const _centerInVisual = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n return function (center, includesAtom, selector) {\r\n center.set(0.0, 0.0, 0.0);\r\n let count = 0;\r\n\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getSelectionCenter(_centerInVisual, includesAtom, selector || visual.getSelectionBit())) {\r\n center.add(_centerInVisual);\r\n count++;\r\n }\r\n });\r\n if (count === 0) {\r\n return false;\r\n }\r\n center.divideScalar(count);\r\n center.negate();\r\n return true;\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotSubset = (function () {\r\n const _center = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n function _includesInCurSelection(atom, selectionBit) {\r\n return atom.mask & (1 << selectionBit);\r\n }\r\n\r\n function _includesInSelector(atom, selector) {\r\n return selector.selector.includesAtom(atom);\r\n }\r\n\r\n return function (selector) {\r\n const includesAtom = (selector) ? _includesInSelector : _includesInCurSelection;\r\n\r\n if (this.getSelectionCenter(_center, includesAtom, selector)) {\r\n this._objectControls.setPivot(_center);\r\n this.dispatchEvent({ type: 'transform' });\r\n } else {\r\n this.logger.warn('selection is empty. Center operation not performed');\r\n }\r\n };\r\n}());\r\n\r\n/**\r\n * Makes a screenshot.\r\n * @param {number} [width] - Width of an image. Defaults to the canvas width.\r\n * @param {number} [height] - Height of an image. Defaults to the width (square) or canvas height,\r\n * if width is omitted too.\r\n * @returns {string} Data URL representing the image contents.\r\n */\r\nMiew.prototype.screenshot = function (width, height) {\r\n const gfx = this._gfx;\r\n const deviceWidth = gfx.renderer.domElement.width;\r\n const deviceHeight = gfx.renderer.domElement.height;\r\n\r\n function fov2Tan(fov) {\r\n return Math.tan(THREE.MathUtils.degToRad(0.5 * fov));\r\n }\r\n\r\n function tan2Fov(tan) {\r\n return THREE.MathUtils.radToDeg(Math.atan(tan)) * 2.0;\r\n }\r\n\r\n function getDataURL() {\r\n let dataURL;\r\n const currBrowser = utils.getBrowser();\r\n\r\n if (currBrowser === utils.browserType.SAFARI) {\r\n const canvas = document.createElement('canvas');\r\n const canvasContext = canvas.getContext('2d');\r\n\r\n canvas.width = width === undefined ? deviceWidth : width;\r\n canvas.height = height === undefined ? deviceHeight : height;\r\n\r\n canvasContext.drawImage(gfx.renderer.domElement, 0, 0, canvas.width, canvas.height);\r\n dataURL = canvas.toDataURL('image/png');\r\n } else {\r\n // Copy current canvas to screenshot\r\n dataURL = gfx.renderer.domElement.toDataURL('image/png');\r\n }\r\n return dataURL;\r\n }\r\n height = height || width;\r\n\r\n let screenshotURI;\r\n if ((width === undefined && height === undefined)\r\n || (width === deviceWidth && height === deviceHeight)) {\r\n // renderer.domElement.toDataURL('image/png') returns flipped image in Safari\r\n // It hasn't been resolved yet, but getScreenshotSafari()\r\n // fixes it using an extra canvas.\r\n screenshotURI = getDataURL();\r\n } else {\r\n const originalAspect = gfx.camera.aspect;\r\n const originalFov = gfx.camera.fov;\r\n const originalTanFov2 = fov2Tan(gfx.camera.fov);\r\n\r\n // screenshot should contain the principal area of interest (a centered square touching screen sides)\r\n const areaOfInterestSize = Math.min(gfx.width, gfx.height);\r\n const areaOfInterestTanFov2 = originalTanFov2 * areaOfInterestSize / gfx.height;\r\n\r\n // set appropriate camera aspect & FOV\r\n const shotAspect = width / height;\r\n gfx.renderer.setPixelRatio(1);\r\n gfx.camera.aspect = shotAspect;\r\n gfx.camera.fov = tan2Fov(areaOfInterestTanFov2 / Math.min(shotAspect, 1.0));\r\n gfx.camera.updateProjectionMatrix();\r\n\r\n // resize canvas to the required size of screenshot\r\n gfx.renderer.setDrawingBufferSize(width, height, 1);\r\n\r\n // make screenshot\r\n this._renderFrame(settings.now.stereo);\r\n screenshotURI = getDataURL();\r\n\r\n // restore original camera & canvas proportions\r\n gfx.renderer.setPixelRatio(window.devicePixelRatio);\r\n gfx.camera.aspect = originalAspect;\r\n gfx.camera.fov = originalFov;\r\n gfx.camera.updateProjectionMatrix();\r\n gfx.renderer.setDrawingBufferSize(gfx.width, gfx.height, window.devicePixelRatio);\r\n this._needRender = true;\r\n }\r\n\r\n return screenshotURI;\r\n};\r\n\r\n/**\r\n * Makes screenshot and initiates a download.\r\n * @param {string} [filename] - Name of a file. Default to a 'screenshot-XXXXX.png', where XXXXX is a current\r\n * date/time in seconds.\r\n * @param {number} [width] - Width of an image. Defaults to the canvas width.\r\n * @param {number} [height] - Height of an image. Defaults to the width (square) or canvas height,\r\n * if width is omitted too.\r\n */\r\nMiew.prototype.screenshotSave = function (filename, width, height) {\r\n const uri = this.screenshot(width, height);\r\n utils.shotDownload(uri, filename);\r\n};\r\n\r\nMiew.prototype.save = function (opts) {\r\n this._export(opts.fileType).then((dataString) => {\r\n const filename = this._visuals[this._curVisualName]._complex.name;\r\n utils.download(dataString, filename, opts.fileType);\r\n this._refreshTitle();\r\n this.dispatchEvent({ type: 'exportingDone' });\r\n }).catch((error) => {\r\n this.logger.error('Could not export data');\r\n this.logger.debug(error);\r\n this._refreshTitle();\r\n this.dispatchEvent({ type: 'exportingDone', error });\r\n });\r\n};\r\n\r\nMiew.prototype._tweakResolution = function () {\r\n const maxPerf = [\r\n ['poor', 100],\r\n ['low', 500],\r\n ['medium', 1000],\r\n ['high', 5000],\r\n ['ultra', Number.MAX_VALUE],\r\n ];\r\n\r\n let atomCount = 0;\r\n this._forEachComplexVisual((visual) => {\r\n atomCount += visual.getComplex().getAtomCount();\r\n });\r\n\r\n if (atomCount > 0) {\r\n const performance = this._gfxScore * 10e5 / atomCount;\r\n // set resolution based on estimated performance\r\n for (let i = 0; i < maxPerf.length; ++i) {\r\n if (performance < maxPerf[i][1]) {\r\n this._autoChangeResolution(maxPerf[i][0]);\r\n break;\r\n }\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._autoChangeResolution = function (resolution) {\r\n if (resolution !== settings.now.resolution) {\r\n this.logger.report(`Your rendering resolution was changed to \"${resolution}\" for best performance.`);\r\n }\r\n settings.now.resolution = resolution;\r\n};\r\n\r\n/**\r\n * Save current settings to cookies.\r\n */\r\nMiew.prototype.saveSettings = function () {\r\n this._cookies.setCookie(this._opts.settingsCookie, JSON.stringify(this.settings.getDiffs(true)));\r\n};\r\n\r\n/**\r\n * Load settings from cookies.\r\n */\r\nMiew.prototype.restoreSettings = function () {\r\n try {\r\n const cookie = this._cookies.getCookie(this._opts.settingsCookie);\r\n const diffs = cookie ? JSON.parse(cookie) : {};\r\n this.settings.applyDiffs(diffs, true);\r\n } catch (e) {\r\n this.logger.error(`Cookies parse error: ${e.message}`);\r\n }\r\n};\r\n\r\n/**\r\n * Reset current settings to the defaults.\r\n */\r\nMiew.prototype.resetSettings = function () {\r\n this.settings.reset();\r\n};\r\n\r\n/*\r\n * DANGEROUS and TEMPORARY. The method should change or disappear in future versions.\r\n * @param {string|object} opts - See {@link Miew} constructor.\r\n * @see {@link Miew#set}, {@link Miew#repAdd}, {@link Miew#rep}.\r\n */\r\nMiew.prototype.setOptions = function (opts) {\r\n if (typeof opts === 'string') {\r\n opts = Miew.options.fromAttr(opts);\r\n }\r\n if (opts.reps) {\r\n this._opts.reps = null;\r\n }\r\n _.merge(this._opts, opts);\r\n if (opts.settings) {\r\n this.set(opts.settings);\r\n }\r\n\r\n this._opts._objects = opts._objects;\r\n this._resetObjects();\r\n\r\n if (opts.load) {\r\n this.load(opts.load, { fileType: opts.type });\r\n }\r\n\r\n if (opts.preset) {\r\n settings.now.preset = opts.preset;\r\n }\r\n\r\n if (opts.reps) {\r\n this.resetReps(opts.preset);\r\n }\r\n\r\n if (this._opts.view) {\r\n this.view(this._opts.view);\r\n delete this._opts.view;\r\n }\r\n\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n visual.getComplex().resetCurrentUnit();\r\n if (_.isNumber(opts.unit)) {\r\n visual.getComplex().setCurrentUnit(opts.unit);\r\n }\r\n this.resetView();\r\n this.rebuildAll();\r\n }\r\n};\r\n\r\nMiew.prototype.info = function (name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return {};\r\n }\r\n const complex = visual.getComplex();\r\n const { metadata } = complex;\r\n return {\r\n id: metadata.id || complex.name || 'UNKNOWN',\r\n title: (metadata.title && metadata.title.join(' ')) || 'UNKNOWN DATA',\r\n atoms: complex.getAtomCount(),\r\n bonds: complex.getBondCount(),\r\n residues: complex.getResidueCount(),\r\n chains: complex.getChainCount(),\r\n };\r\n};\r\n\r\n/*\r\n * OBJECTS SEGMENT\r\n */\r\n\r\nMiew.prototype.addObject = function (objData, bThrow) {\r\n let Ctor = null;\r\n\r\n if (objData.type === LinesObject.prototype.type) {\r\n Ctor = LinesObject;\r\n }\r\n\r\n if (Ctor === null) {\r\n throw new Error(`Unknown scene object type - ${objData.type}`);\r\n }\r\n\r\n try {\r\n const newObj = new Ctor(objData.params, objData.opts);\r\n this._addSceneObject(newObj);\r\n } catch (error) {\r\n if (!bThrow) {\r\n this.logger.debug(`Error during scene object creation: ${error.message}`);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._addSceneObject = function (sceneObject) {\r\n const visual = this._getComplexVisual();\r\n if (sceneObject.build && visual) {\r\n sceneObject.build(visual.getComplex());\r\n this._gfx.pivot.add(sceneObject.getGeometry());\r\n }\r\n const objects = this._objects;\r\n objects[objects.length] = sceneObject;\r\n};\r\n\r\nMiew.prototype._updateObjsToFrame = function (frameData) {\r\n const objs = this._objects;\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n if (objs[i].updateToFrame) {\r\n objs[i].updateToFrame(frameData);\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._resetObjects = function () {\r\n const objs = this._opts._objects;\r\n\r\n this._objects = [];\r\n if (objs) {\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n this.addObject(objs[i], false);\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype.removeObject = function (index) {\r\n const obj = this._objects[index];\r\n if (!obj) {\r\n throw new Error(`Scene object with index ${index} does not exist`);\r\n }\r\n obj.destroy();\r\n this._objects.splice(index, 1);\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Get a string with a URL to reproduce the current scene.\r\n *\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=false] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=false] - when this flag is true, a view information is included\r\n * @returns {string} URL\r\n */\r\nMiew.prototype.getURL = function (opts) {\r\n return options.toURL(this.getState(_.defaults(opts, {\r\n compact: true,\r\n settings: false,\r\n view: false,\r\n })));\r\n};\r\n\r\n/**\r\n * Get a string with a script to reproduce the current scene.\r\n *\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=true] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=true] - when this flag is true, a view information is included\r\n * @returns {string} script\r\n */\r\nMiew.prototype.getScript = function (opts) {\r\n return options.toScript(this.getState(_.defaults(opts, {\r\n compact: true,\r\n settings: true,\r\n view: true,\r\n })));\r\n};\r\n\r\n/*\r\n * Generates object that represents the current state of representations list\r\n * @param {boolean} compareWithDefaults - when this flag is true, reps list is compared (if possible)\r\n * to preset's defaults and only diffs are generated\r\n */\r\nMiew.prototype._compareReps = function (complexVisual, compareWithDefaults) {\r\n const ans = {};\r\n let repCount = 0;\r\n\r\n if (complexVisual) {\r\n repCount = complexVisual.repCount();\r\n }\r\n\r\n const currPreset = settings.defaults.presets[settings.now.preset];\r\n let compare = compareWithDefaults;\r\n if (currPreset === undefined || currPreset.length > repCount) {\r\n compare = false;\r\n ans.preset = 'empty';\r\n } else if (settings.now.preset !== settings.defaults.preset) {\r\n ans.preset = settings.now.preset;\r\n }\r\n\r\n const repsDiff = [];\r\n let emptyReps = true;\r\n for (let i = 0, n = repCount; i < n; ++i) {\r\n repsDiff[i] = complexVisual.repGet(i).compare(compare ? currPreset[i] : null);\r\n if (!_.isEmpty(repsDiff[i])) {\r\n emptyReps = false;\r\n }\r\n }\r\n if (!emptyReps) {\r\n ans.reps = repsDiff;\r\n }\r\n return ans;\r\n};\r\n\r\n/*\r\n * Obtain object that represents current state of miew (might be used as options in constructor).\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=false] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=false] - when this flag is true, a view information is included\r\n * @returns {Object} State object.\r\n */\r\nMiew.prototype.getState = function (opts) {\r\n const state = {};\r\n\r\n opts = _.defaults(opts, {\r\n compact: true,\r\n settings: false,\r\n view: false,\r\n });\r\n\r\n // load\r\n const visual = this._getComplexVisual();\r\n if (visual !== null) {\r\n const complex = visual.getComplex();\r\n const { metadata } = complex;\r\n if (metadata.id) {\r\n const format = metadata.format ? `${metadata.format}:` : '';\r\n state.load = format + metadata.id;\r\n }\r\n const unit = complex.getCurrentUnit();\r\n if (unit !== 1) {\r\n state.unit = unit;\r\n }\r\n }\r\n\r\n // representations\r\n const repsInfo = this._compareReps(visual, opts.compact);\r\n if (repsInfo.preset) {\r\n state.preset = repsInfo.preset;\r\n }\r\n\r\n if (repsInfo.reps) {\r\n state.reps = repsInfo.reps;\r\n }\r\n\r\n // objects\r\n const objects = this._objects;\r\n const objectsState = [];\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n objectsState[i] = objects[i].identify();\r\n }\r\n if (objects.length > 0) {\r\n state._objects = objectsState;\r\n }\r\n\r\n // view\r\n if (opts.view) {\r\n state.view = this.view();\r\n }\r\n\r\n // settings\r\n if (opts.settings) {\r\n const diff = this.settings.getDiffs(false);\r\n if (!_.isEmpty(diff)) {\r\n state.settings = diff;\r\n }\r\n }\r\n\r\n return state;\r\n};\r\n\r\n/**\r\n * Get parameter value.\r\n * @param {string} param - Parameter name or path (e.g. 'modes.BS.atom').\r\n * @param {*=} value - Default value.\r\n * @returns {*} Parameter value.\r\n */\r\nMiew.prototype.get = function (param, value) {\r\n return settings.get(param, value);\r\n};\r\n\r\nMiew.prototype._clipPlaneUpdateValue = function (radius) {\r\n const clipPlaneValue = Math.max(\r\n this._gfx.camera.position.z - radius * settings.now.draft.clipPlaneFactor,\r\n settings.now.camNear,\r\n );\r\n\r\n const opts = { clipPlaneValue };\r\n this._forEachComplexVisual((visual) => {\r\n visual.setUberOptions(opts);\r\n });\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const obj = this._objects[i];\r\n if (obj._line) {\r\n obj._line.material.setUberOptions(opts);\r\n }\r\n }\r\n if (this._picker !== null) {\r\n this._picker.clipPlaneValue = clipPlaneValue;\r\n }\r\n};\r\n\r\nMiew.prototype._fogFarUpdateValue = function () {\r\n if (this._picker !== null) {\r\n if (this._gfx.scene.fog) {\r\n this._picker.fogFarValue = this._gfx.scene.fog.far;\r\n } else {\r\n this._picker.fogFarValue = undefined;\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._updateShadowmapMeshes = function (process) {\r\n this._forEachComplexVisual((visual) => {\r\n const reprList = visual._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n process(repr.geo, repr.material);\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype._updateMaterials = function (values, needTraverse = false, process = undefined) {\r\n this._forEachComplexVisual((visual) => visual.setMaterialValues(values, needTraverse, process));\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const obj = this._objects[i];\r\n if (obj._line) {\r\n obj._line.material.setValues(values);\r\n obj._line.material.needsUpdate = true;\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._fogAlphaChanged = function () {\r\n this._forEachComplexVisual((visual) => {\r\n visual.setUberOptions({\r\n fogAlpha: settings.now.fogAlpha,\r\n });\r\n });\r\n};\r\n\r\nMiew.prototype._embedWebXR = function () {\r\n // switch off\r\n if (settings.now.stereo !== 'WEBVR') {\r\n if (this.webVR) {\r\n this.webVR.disable();\r\n }\r\n this.webVR = null;\r\n return;\r\n }\r\n // switch on\r\n if (!this.webVR) {\r\n this.webVR = new WebVRPoC(() => {\r\n this._requestAnimationFrame(() => this._onTick());\r\n this._needRender = true;\r\n this._onResize();\r\n });\r\n }\r\n this.webVR.enable(this._gfx);\r\n};\r\n\r\nMiew.prototype._initOnSettingsChanged = function () {\r\n const on = (props, func) => {\r\n props = _.isArray(props) ? props : [props];\r\n props.forEach((prop) => {\r\n this.settings.addEventListener(`change:${prop}`, func);\r\n });\r\n };\r\n\r\n on('modes.VD.frame', () => {\r\n const volume = this._getVolumeVisual();\r\n if (volume === null) return;\r\n\r\n volume.showFrame(settings.now.modes.VD.frame);\r\n this._needRender = true;\r\n });\r\n\r\n on('modes.VD.isoMode', () => {\r\n const volume = this._getVolumeVisual();\r\n if (volume === null) return;\r\n\r\n volume.getMesh().material.updateDefines();\r\n this._needRender = true;\r\n });\r\n\r\n on('bg.color', () => {\r\n this._onBgColorChanged();\r\n });\r\n\r\n on('ao', () => {\r\n if (settings.now.ao && !isAOSupported(this._gfx.renderer.getContext())) {\r\n this.logger.warn('Your device or browser does not support ao');\r\n settings.set('ao', false);\r\n } else {\r\n const values = { normalsToGBuffer: settings.now.ao };\r\n this._setUberMaterialValues(values);\r\n }\r\n });\r\n\r\n on('zSprites', () => {\r\n if (settings.now.zSprites && !arezSpritesSupported(this._gfx.renderer.getContext())) {\r\n this.logger.warn('Your device or browser does not support zSprites');\r\n settings.set('zSprites', false);\r\n }\r\n this.rebuildAll();\r\n });\r\n\r\n on('fogColor', () => {\r\n this._onFogColorChanged();\r\n });\r\n\r\n on('fogColorEnable', () => {\r\n this._onFogColorChanged();\r\n });\r\n\r\n on('bg.transparent', (evt) => {\r\n const gfx = this._gfx;\r\n if (gfx) {\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n }\r\n // update materials\r\n this._updateMaterials({ fogTransparent: evt.value });\r\n this.rebuildAll();\r\n });\r\n\r\n on('draft.clipPlane', (evt) => {\r\n // update materials\r\n this._updateMaterials({ clipPlane: evt.value });\r\n this.rebuildAll();\r\n });\r\n\r\n on('shadow.on', (evt) => {\r\n // update materials\r\n const values = { shadowmap: evt.value, shadowmapType: settings.now.shadow.type };\r\n const gfx = this._gfx;\r\n if (gfx) {\r\n gfx.renderer.shadowMap.enabled = Boolean(values.shadowmap);\r\n }\r\n this._updateMaterials(values, true);\r\n if (values.shadowmap) {\r\n this._updateShadowCamera();\r\n this._updateShadowmapMeshes(meshutils.createShadowmapMaterial);\r\n } else {\r\n this._updateShadowmapMeshes(meshutils.removeShadowmapMaterial);\r\n }\r\n this._needRender = true;\r\n });\r\n\r\n on('shadow.type', (evt) => {\r\n // update materials if shadowmap is enable\r\n if (settings.now.shadow.on) {\r\n this._updateMaterials({ shadowmapType: evt.value }, true);\r\n this._needRender = true;\r\n }\r\n });\r\n\r\n on('shadow.radius', (evt) => {\r\n for (let i = 0; i < this._gfx.scene.children.length; i++) {\r\n if (this._gfx.scene.children[i].shadow !== undefined) {\r\n const light = this._gfx.scene.children[i];\r\n light.shadow.radius = evt.value;\r\n this._needRender = true;\r\n }\r\n }\r\n });\r\n\r\n on('fps', () => {\r\n this._fps.show(settings.now.fps);\r\n });\r\n\r\n on(['fog', 'fogNearFactor', 'fogFarFactor'], () => {\r\n this._updateFog();\r\n this._needRender = true;\r\n });\r\n\r\n on('fogAlpha', () => {\r\n const { fogAlpha } = settings.now;\r\n if (fogAlpha < 0 || fogAlpha > 1) {\r\n this.logger.warn('fogAlpha must belong range [0,1]');\r\n }\r\n this._fogAlphaChanged();\r\n this._needRender = true;\r\n });\r\n\r\n on('autoResolution', (evt) => {\r\n if (evt.value && !this._gfxScore) {\r\n this.logger.warn('Benchmarks are missed, autoresolution will not work! '\r\n + 'Autoresolution should be set during miew startup.');\r\n }\r\n });\r\n\r\n on('stereo', () => {\r\n this._embedWebXR(settings.now.stereo === 'WEBVR');\r\n this._needRender = true;\r\n });\r\n\r\n on(['transparency', 'palette'], () => {\r\n this.rebuildAll();\r\n });\r\n\r\n on('resolution', () => {\r\n // update complex visuals\r\n this.rebuildAll();\r\n\r\n // update volume visual\r\n const volume = this._getVolumeVisual();\r\n if (volume) {\r\n volume.getMesh().material.updateDefines();\r\n this._needRender = true;\r\n }\r\n });\r\n\r\n on(['axes', 'fxaa', 'ao',\r\n 'outline.on', 'outline.color', 'outline.threshold', 'outline.thickness'], () => {\r\n this._needRender = true;\r\n });\r\n};\r\n\r\n/**\r\n * Set parameter value.\r\n * @param {string|object} params - Parameter name or path (e.g. 'modes.BS.atom') or even settings object.\r\n * @param {*=} value - Value.\r\n */\r\nMiew.prototype.set = function (params, value) {\r\n settings.set(params, value);\r\n};\r\n\r\n/**\r\n * Select atoms with selection string.\r\n * @param {string} expression - string expression of selection\r\n * @param {boolean=} append - true to append selection atoms to current selection, false to rewrite selection\r\n */\r\nMiew.prototype.select = function (expression, append) {\r\n const visual = this._getComplexVisual();\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n let sel = expression;\r\n if (_.isString(expression)) {\r\n sel = selectors.parse(expression).selector;\r\n }\r\n\r\n visual.select(sel, append);\r\n this._lastPick = null;\r\n\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n};\r\n\r\nconst VIEW_VERSION = '1';\r\n\r\n/**\r\n * Get or set view info packed into string.\r\n *\r\n * **Note:** view is stored for *left-handed* cs, euler angles are stored in radians and *ZXY-order*,\r\n *\r\n * @param {string=} expression - Optional string encoded the view\r\n */\r\nMiew.prototype.view = function (expression) {\r\n const self = this;\r\n const { pivot } = this._gfx;\r\n let transform = [];\r\n const eulerOrder = 'ZXY';\r\n\r\n function encode() {\r\n const pos = pivot.position;\r\n const scale = self._objectControls.getScale() / settings.now.radiusToFit;\r\n const euler = new THREE.Euler();\r\n euler.setFromQuaternion(self._objectControls.getOrientation(), eulerOrder);\r\n transform = [\r\n pos.x, pos.y, pos.z,\r\n scale,\r\n euler.x, euler.y, euler.z,\r\n ];\r\n return VIEW_VERSION + utils.arrayToBase64(transform, Float32Array);\r\n }\r\n\r\n function decode() {\r\n // backwards compatible: old non-versioned view is the 0th version\r\n if (expression.length === 40) {\r\n expression = `0${expression}`;\r\n }\r\n\r\n const version = expression[0];\r\n transform = utils.arrayFromBase64(expression.substr(1), Float32Array);\r\n\r\n // apply adapter for old versions\r\n if (version !== VIEW_VERSION) {\r\n if (version === '0') {\r\n // cancel radiusToFit included in old views\r\n transform[3] /= 8.0;\r\n } else {\r\n // do nothing\r\n self.logger.warn(`Encoded view version mismatch, stored as ${version} vs ${VIEW_VERSION} expected`);\r\n return;\r\n }\r\n }\r\n\r\n const interpolator = self._interpolator;\r\n const srcView = interpolator.createView();\r\n srcView.position.copy(pivot.position);\r\n srcView.scale = self._objectControls.getScale();\r\n srcView.orientation.copy(self._objectControls.getOrientation());\r\n\r\n const dstView = interpolator.createView();\r\n dstView.position.set(transform[0], transform[1], transform[2]);\r\n\r\n // hack to make preset views work after we moved centering offset to visual nodes\r\n // FIXME should only store main pivot offset in preset\r\n if (self._getComplexVisual()) {\r\n dstView.position.sub(self._getComplexVisual().position);\r\n }\r\n\r\n dstView.scale = transform[3]; // eslint-disable-line prefer-destructuring\r\n dstView.orientation.setFromEuler(new THREE.Euler(transform[4], transform[5], transform[6], eulerOrder));\r\n\r\n interpolator.setup(srcView, dstView);\r\n }\r\n\r\n if (typeof expression === 'undefined') {\r\n return encode();\r\n }\r\n decode();\r\n\r\n return expression;\r\n};\r\n\r\n/*\r\n * Update current view due to viewinterpolator state\r\n */\r\nMiew.prototype._updateView = function () {\r\n const self = this;\r\n const { pivot } = this._gfx;\r\n\r\n const interpolator = this._interpolator;\r\n if (!interpolator.wasStarted()) {\r\n interpolator.start();\r\n }\r\n\r\n if (!interpolator.isMoving()) {\r\n return;\r\n }\r\n\r\n const res = interpolator.getCurrentView();\r\n if (res.success) {\r\n const curr = res.view;\r\n pivot.position.copy(curr.position);\r\n self._objectControls.setScale(curr.scale * settings.now.radiusToFit);\r\n self._objectControls.setOrientation(curr.orientation);\r\n this.dispatchEvent({ type: 'transform' });\r\n self._needRender = true;\r\n }\r\n};\r\n\r\n/**\r\n * Translate object by vector\r\n * @param {number} x - translation value (Ang) along model's X axis\r\n * @param {number} y - translation value (Ang) along model's Y axis\r\n * @param {number} z - translation value (Ang) along model's Z axis\r\n */\r\nMiew.prototype.translate = function (x, y, z) {\r\n this._objectControls.translatePivot(x, y, z);\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Rotate object by Euler angles\r\n * @param {number} x - rotation angle around X axis in radians\r\n * @param {number} y - rotation angle around Y axis in radians\r\n * @param {number} z - rotation angle around Z axis in radians\r\n */\r\nMiew.prototype.rotate = function (x, y, z) {\r\n this._objectControls.rotate(new THREE.Quaternion().setFromEuler(new THREE.Euler(x, y, z, 'XYZ')));\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Scale object by factor\r\n * @param {number} factor - scale multiplier, should greater than zero\r\n */\r\nMiew.prototype.scale = function (factor) {\r\n if (factor <= 0) {\r\n throw new RangeError('Scale should be greater than zero');\r\n }\r\n this._objectControls.scale(factor);\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Center view on selection\r\n * @param {empty | subset | string} selector - defines part of molecule which must be centered (\r\n * empty - center on current selection;\r\n * subset - center on picked atom/residue/molecule;\r\n * string - center on atoms correspond to selection string)\r\n */\r\nMiew.prototype.center = function (selector) {\r\n // no arguments - center on current selection;\r\n if (selector === undefined) {\r\n this.setPivotSubset();\r\n this._needRender = true;\r\n return;\r\n }\r\n // subset with atom or residue - center on picked atom/residue;\r\n if (selector.obj !== undefined && ('atom' in selector.obj || 'residue' in selector.obj)) { // from event with selection\r\n if ('atom' in selector.obj) {\r\n this.setPivotAtom(selector.obj.atom);\r\n } else {\r\n this.setPivotResidue(selector.obj.residue);\r\n }\r\n this._needRender = true;\r\n return;\r\n }\r\n // string - center on atoms correspond to selection string\r\n if (selector.obj === undefined && selector !== '') {\r\n const sel = selectors.parse(selector);\r\n if (sel.error === undefined) {\r\n this.setPivotSubset(sel);\r\n this._needRender = true;\r\n return;\r\n }\r\n }\r\n // empty subset or incorrect/empty string - center on all molecule;\r\n this.resetPivot();\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Build selector that contains all atoms within given distance from group of atoms\r\n * @param {Selector} selector - selector describing source group of atoms\r\n * @param {number} radius - distance\r\n * @returns {Selector} selector describing result group of atoms\r\n */\r\nMiew.prototype.within = function (selector, radius) {\r\n const visual = this._getComplexVisual();\r\n if (!visual) {\r\n return selectors.None();\r\n }\r\n\r\n if (selector instanceof String) {\r\n selector = selectors.parse(selector);\r\n }\r\n\r\n const res = visual.within(selector, radius);\r\n if (res) {\r\n visual.rebuildSelectionGeometry();\r\n this._needRender = true;\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Get atom position in 2D canvas coords\r\n * @param {string} fullAtomName - full atom name, like A.38.CG\r\n * @returns {Object} {x, y} or false if atom not found\r\n */\r\nMiew.prototype.projected = function (fullAtomName, complexName) {\r\n const visual = this._getComplexVisual(complexName);\r\n if (!visual) {\r\n return false;\r\n }\r\n\r\n const atom = visual.getComplex().getAtomByFullname(fullAtomName);\r\n if (atom === null) {\r\n return false;\r\n }\r\n\r\n const pos = atom.position.clone();\r\n // we consider atom position to be affected only by common complex transform\r\n // ignoring any transformations that may add during editing\r\n this._gfx.pivot.updateMatrixWorldRecursive();\r\n this._gfx.camera.updateMatrixWorldRecursive();\r\n this._gfx.pivot.localToWorld(pos);\r\n pos.project(this._gfx.camera);\r\n\r\n return {\r\n x: (pos.x + 1.0) * 0.5 * this._gfx.width,\r\n y: (1.0 - pos.y) * 0.5 * this._gfx.height,\r\n };\r\n};\r\n\r\n/**\r\n * Replace secondary structure with calculated one.\r\n *\r\n * DSSP algorithm implementation is used.\r\n *\r\n * Kabsch W, Sander C. 1983. Dictionary of protein secondary structure: pattern recognition of hydrogen-bonded and\r\n * geometrical features. Biopolymers. 22(12):2577-2637. doi:10.1002/bip.360221211.\r\n *\r\n * @param {string=} complexName - complex name\r\n */\r\nMiew.prototype.dssp = function (complexName) {\r\n const visual = this._getComplexVisual(complexName);\r\n if (!visual) {\r\n return;\r\n }\r\n visual.getComplex().dssp();\r\n\r\n // rebuild dependent representations (cartoon or ss-colored)\r\n visual._reprList.forEach((rep) => {\r\n if (rep.mode.id === 'CA' || rep.colorer.id === 'SS') {\r\n rep.needsRebuild = true;\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype.exportCML = function () {\r\n const self = this;\r\n\r\n function extractRotation(m) {\r\n const xAxis = new THREE.Vector3();\r\n const yAxis = new THREE.Vector3();\r\n const zAxis = new THREE.Vector3();\r\n m.extractBasis(xAxis, yAxis, zAxis);\r\n xAxis.normalize();\r\n yAxis.normalize();\r\n zAxis.normalize();\r\n const retMat = new THREE.Matrix4();\r\n retMat.identity();\r\n retMat.makeBasis(xAxis, yAxis, zAxis);\r\n return retMat;\r\n }\r\n\r\n function updateCMLData(complex) {\r\n const { root } = self._gfx;\r\n const mat = extractRotation(root.matrixWorld);\r\n const v4 = new THREE.Vector4(0, 0, 0, 0);\r\n const vCenter = new THREE.Vector4(0, 0, 0, 0);\r\n let xml = null;\r\n let ap = null;\r\n\r\n // update atoms in cml\r\n complex.forEachAtom((atom) => {\r\n if (atom.xmlNodeRef && atom.xmlNodeRef.xmlNode) {\r\n xml = atom.xmlNodeRef.xmlNode;\r\n ap = atom.position;\r\n v4.set(ap.x, ap.y, ap.z, 1.0);\r\n v4.applyMatrix4(mat);\r\n xml.setAttribute('x3', v4.x.toString());\r\n xml.setAttribute('y3', v4.y.toString());\r\n xml.setAttribute('z3', v4.z.toString());\r\n xml.removeAttribute('x2');\r\n xml.removeAttribute('y2');\r\n }\r\n });\r\n // update stereo groups in cml\r\n complex.forEachSGroup((sGroup) => {\r\n if (sGroup.xmlNodeRef && sGroup.xmlNodeRef.xmlNode) {\r\n xml = sGroup.xmlNodeRef.xmlNode;\r\n ap = sGroup.getPosition();\r\n v4.set(ap.x, ap.y, ap.z, 1.0);\r\n const cp = sGroup.getCentralPoint();\r\n if (cp === null) {\r\n v4.applyMatrix4(mat);\r\n } else {\r\n vCenter.set(cp.x, cp.y, cp.z, 0.0);\r\n v4.add(vCenter);\r\n v4.applyMatrix4(mat); // pos in global space\r\n vCenter.set(cp.x, cp.y, cp.z, 1.0);\r\n vCenter.applyMatrix4(mat);\r\n v4.sub(vCenter);\r\n }\r\n xml.setAttribute('x', v4.x.toString());\r\n xml.setAttribute('y', v4.y.toString());\r\n xml.setAttribute('z', v4.z.toString());\r\n }\r\n });\r\n }\r\n\r\n const visual = self._getComplexVisual();\r\n const complex = visual ? visual.getComplex() : null;\r\n if (complex && complex.originalCML) {\r\n updateCMLData(complex);\r\n\r\n // serialize xml structure to string\r\n const oSerializer = new XMLSerializer();\r\n return oSerializer.serializeToString(complex.originalCML);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Reproduce the RCSB PDB Molecule of the Month style by David S. Goodsell\r\n *\r\n * @see http://pdb101.rcsb.org/motm/motm-about\r\n */\r\nMiew.prototype.motm = function () {\r\n settings.set({\r\n fogColorEnable: true,\r\n fogColor: 0x000000,\r\n outline: { on: true, threshold: 0.01 },\r\n bg: { color: 0xffffff },\r\n });\r\n\r\n this._forEachComplexVisual((visual) => {\r\n const rep = [];\r\n const complex = visual.getComplex();\r\n const palette = palettes.get(settings.now.palette);\r\n for (let i = 0; i < complex.getChainCount(); i++) {\r\n const curChainName = complex._chains[i]._name;\r\n const curChainColor = palette.getChainColor(curChainName);\r\n rep[i] = {\r\n selector: `chain ${curChainName}`,\r\n mode: 'VW',\r\n colorer: ['CB', { color: curChainColor, factor: 0.9 }],\r\n material: 'FL',\r\n };\r\n }\r\n visual.resetReps(rep);\r\n });\r\n};\r\n\r\nMiew.prototype.VERSION = (typeof PACKAGE_VERSION !== 'undefined' && PACKAGE_VERSION) || '0.0.0-dev';\r\n\r\n// Uncomment this to get debug trace:\r\n// Miew.prototype.debugTracer = new utils.DebugTracer(Miew.prototype);\r\n\r\n_.assign(Miew, /** @lends Miew */ {\r\n VERSION: Miew.prototype.VERSION,\r\n\r\n registeredPlugins: [],\r\n\r\n // export namespaces // TODO: WIP: refactoring external interface\r\n chem,\r\n io,\r\n modes,\r\n colorers,\r\n materials,\r\n palettes,\r\n options,\r\n settings,\r\n utils,\r\n gfx: {\r\n Representation,\r\n },\r\n\r\n /**\r\n * Third-party libraries packaged together with Miew.\r\n *\r\n * @property {object} lodash - [Lodash](https://lodash.com/), a modern JavaScript utility library delivering\r\n * modularity, performance & extras.\r\n * @property {object} three - [three.js](https://threejs.org/), JavaScript 3D library.\r\n *\r\n * @example\r\n * var _ = Miew.thirdParty.lodash;\r\n * var opts = _.merge({ ... }, Miew.options.fromURL(window.location.search));\r\n * var miew = new Miew(opts);\r\n */\r\n thirdParty: {\r\n lodash: _,\r\n three: THREE,\r\n },\r\n});\r\n\r\nexport default Miew;\r\n","import palettes from '../gfx/palettes';\r\nimport settings from '../settings';\r\n\r\nconst modeIdDesc = {\r\n $help: [\r\n 'Rendering mode shortcut',\r\n ' BS - balls and sticks mode',\r\n ' LN - lines mode',\r\n ' LC - licorice mode',\r\n ' VW - van der waals mode',\r\n ' TR - trace mode',\r\n ' TU - tube mode',\r\n ' CA - cartoon mode',\r\n ' SA - isosurface mode',\r\n ' QS - quick surface mode',\r\n ' SE - solvent excluded mode',\r\n ' TX - text mode',\r\n ],\r\n BS: {\r\n $help: [\r\n ' Balls and sticks',\r\n ' aromrad = #aromatic radius',\r\n ' atom = #atom radius',\r\n ' bond = #bond radius',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' space = #space value\\n',\r\n ],\r\n },\r\n CA: {\r\n $help: [\r\n ' Cartoon',\r\n ' arrow = #arrow size',\r\n ' depth = #depth of surface',\r\n ' heightSegmentsRatio = ',\r\n ' radius = #tube radius',\r\n ' tension = #',\r\n ' width = #secondary width\\n',\r\n ],\r\n },\r\n LN: {\r\n $help: [\r\n ' Lines',\r\n ' atom = #atom radius',\r\n ' chunkarom = ',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' offsarom = \\n',\r\n ],\r\n },\r\n LC: {\r\n $help: [\r\n ' Licorice',\r\n ' aromrad = #aromatic radius',\r\n ' bond = #bond radius',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' space = #space value\\n',\r\n ],\r\n },\r\n VW: {\r\n $help: [\r\n ' Van der Waals',\r\n ' nothing\\n',\r\n ],\r\n },\r\n TR: {\r\n $help: [\r\n ' Trace',\r\n ' radius = #tube radius\\n',\r\n ],\r\n },\r\n TU: {\r\n $help: [\r\n ' Tube',\r\n ' heightSegmentsRatio = ',\r\n ' radius = #tube radius',\r\n ' tension = \\n',\r\n ],\r\n },\r\n SA: {\r\n $help: [\r\n ' Surface',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n QS: {\r\n $help: [\r\n ' Quick surface',\r\n ' isoValue = ',\r\n ' scale = ',\r\n ' wireframe = ',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n SE: {\r\n $help: [\r\n ' Solvent excluded surface',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n TX: {\r\n $help: [\r\n ' Text mode',\r\n ' template = string that can include \"{{ id }}\"',\r\n ' it will be replaced by value, id can be one of next:',\r\n ' serial, name, type, sequence, residue, chain, hetatm, water\\n',\r\n ' horizontalAlign = {\"left\", \"right\", \"center\"}',\r\n ' verticalAlign = {\"top\", \"bottom\", \"middle\"}',\r\n ' dx = #offset along x',\r\n ' dy = #offset along y',\r\n ' dz = #offset along z',\r\n ' fg = #text color modificator',\r\n ' could be keyword, named color or hex',\r\n ' fg = #back color modificator',\r\n ' could be keyword, named color or hex',\r\n ' showBg = #if set show background',\r\n ' plate under text',\r\n ],\r\n },\r\n};\r\n\r\nconst colorDesc = {\r\n $help: [\r\n 'Coloring mode shortcut',\r\n ' EL - color by element',\r\n ' CH - color by chain',\r\n ' SQ - color by sequence',\r\n ' RT - color by residue type',\r\n ' SS - color by secondary structure',\r\n ' UN - uniform',\r\n ],\r\n UN: {\r\n $help: [\r\n 'Parameters of coloring modes customization',\r\n ' Uniform',\r\n ' color = #RGB->HEX->dec\\n',\r\n ],\r\n color: {\r\n $help: Object.keys(palettes.get(settings.now.palette).namedColors).sort().join('\\n'),\r\n },\r\n },\r\n};\r\n\r\nconst materialDesc = {\r\n $help: [\r\n 'Material shortcut',\r\n ' DF - diffuse',\r\n ' TR - transparent',\r\n ' SF - soft plastic',\r\n ' PL - glossy plastic',\r\n ' ME - metal',\r\n ' GL - glass',\r\n ],\r\n};\r\n\r\nconst addRepDesc = {\r\n $help: [\r\n 'Short (packed) representation description as a set of variables',\r\n ' s=',\r\n ' selector property',\r\n ' m=[!:[,...]]',\r\n ' render mode property',\r\n ' c=[!:[,...]]',\r\n ' color mode property',\r\n ' mt=',\r\n ' material property',\r\n ],\r\n s: {\r\n $help: 'Selection expression string as it is in menu->representations->selection',\r\n },\r\n m: modeIdDesc,\r\n c: colorDesc,\r\n mt: materialDesc,\r\n};\r\n\r\nconst setGetParameterDesc = {\r\n $help: [\r\n 'Parameters of rendering modes customization: modes',\r\n 'Parameters of colorer customization: colorers',\r\n 'Autobuild: autobuild = (|)',\r\n ],\r\n modes: modeIdDesc,\r\n colorers: colorDesc,\r\n};\r\n\r\nconst help = {\r\n $help: [\r\n 'help (| )',\r\n 'You can get detailed information about command options',\r\n ' using \"help cmd.opt.opt.[...]\"\\n',\r\n ' you can use one line comments',\r\n ' everything started from (#|//) will be skipped',\r\n ' Example: >build //some comment\\n',\r\n 'List of available commands:',\r\n ],\r\n reset: {\r\n $help: [\r\n 'Reload current object, delete all representations',\r\n ' Nothing will work until load new object',\r\n ],\r\n },\r\n load: {\r\n $help: [\r\n 'load (||-f [<*.NC FILE URL STRING>])',\r\n ' Load new pdb object from selected source',\r\n ],\r\n PDBID: {\r\n $help: 'pdb id in remote molecule database',\r\n },\r\n URL: {\r\n $help: 'url to source file',\r\n },\r\n f: {\r\n $help: [\r\n 'open file system dialog to fetch local file',\r\n 'optionally you can determine trajectory file',\r\n 'via URL for *.top model',\r\n ],\r\n },\r\n },\r\n clear: {\r\n $help: 'No args. Clear terminal',\r\n },\r\n add: {\r\n $help: [\r\n 'add [] []',\r\n ' Add new item to representation set with',\r\n ' default or params',\r\n ],\r\n REP_NAME: {\r\n $help: 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n },\r\n DESCRIPTION: addRepDesc,\r\n },\r\n rep: {\r\n $help: [\r\n 'rep [|] []',\r\n ' set current representation by name or index',\r\n ' edit current representation by ',\r\n ],\r\n REP_NAME: {\r\n $help: [\r\n 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n 'Must be declared before',\r\n ],\r\n },\r\n REP_INDEX: {\r\n $help: 'Index of available representation',\r\n },\r\n DESCRIPTION: addRepDesc,\r\n },\r\n remove: {\r\n $help: [\r\n 'remove (|)',\r\n 'Remove representation by name or index',\r\n ],\r\n REP_NAME: {\r\n $help: [\r\n 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n 'Must be declared before',\r\n ],\r\n },\r\n REP_INDEX: {\r\n $help: 'Index of available representation',\r\n },\r\n },\r\n selector: {\r\n $help: [\r\n 'selector ',\r\n ' set selector from EXPRESSION to current representation',\r\n ],\r\n EXPRESSION: {\r\n $help: 'Selection expression string as it is in menu->representations->selection',\r\n },\r\n },\r\n mode: {\r\n $help: [\r\n 'mode [=...]',\r\n ' set rendering mode and apply parameters to current representation',\r\n ],\r\n MODE_ID: modeIdDesc,\r\n },\r\n color: {\r\n $help: [\r\n 'color [=...]',\r\n ' set colorer and apply parameters to current representation',\r\n ],\r\n COLORER_ID: colorDesc,\r\n },\r\n material: {\r\n $help: [\r\n 'material ',\r\n ' set material to current representation',\r\n ],\r\n MATERIAL_ID: materialDesc,\r\n },\r\n build: {\r\n $help: 'build help str',\r\n add: {\r\n $help: 'build.add',\r\n new: {\r\n $help: [\r\n 'add.new',\r\n 'add.new new line 1',\r\n 'add.new new line 2',\r\n 'add.new new line 3',\r\n ],\r\n },\r\n },\r\n del: {\r\n $help: 'build.del',\r\n },\r\n },\r\n list: {\r\n $help: [\r\n 'list [-e|-s||]',\r\n 'Print representations if no args print list of representations',\r\n ' -e expand list and show all representations',\r\n ' -s show all user-registered selectors',\r\n ' | show only current representation',\r\n ],\r\n },\r\n hide: {\r\n $help: [\r\n 'hide (|)',\r\n 'Hide representation referenced in args',\r\n ],\r\n },\r\n show: {\r\n $help: [\r\n 'show (|)',\r\n 'Show representation referenced in args',\r\n ],\r\n },\r\n get: {\r\n $help: [\r\n 'get ',\r\n 'Print value',\r\n ' - path to option use get.PARAMETER to get more info',\r\n ],\r\n PARAMETER: setGetParameterDesc,\r\n },\r\n set: {\r\n $help: [\r\n 'set ',\r\n 'Set with ',\r\n ' - path to option use set.PARAMETER to get more info',\r\n ],\r\n PARAMETER: setGetParameterDesc,\r\n },\r\n set_save: {\r\n $help: [\r\n 'set_save',\r\n 'Save current settings to cookie',\r\n ],\r\n },\r\n set_restore: {\r\n $help: [\r\n 'set_restore',\r\n 'Load and apply settings from cookie',\r\n ],\r\n },\r\n set_reset: {\r\n $help: [\r\n 'set_reset',\r\n 'Reset current settings to the defaults',\r\n ],\r\n },\r\n preset: {\r\n $help: [\r\n 'preset []',\r\n 'Reset current representation or set preset to ',\r\n ],\r\n PRESET: {\r\n $help: [\r\n 'default',\r\n 'wire',\r\n 'small',\r\n 'macro',\r\n ],\r\n },\r\n },\r\n unit: {\r\n $help: [\r\n 'unit []',\r\n 'Change current biological structure view. Zero value means asymmetric unit,',\r\n 'positive values set an assembly with corresponding number.',\r\n 'Being called with no parameters command prints current unit information.',\r\n ],\r\n },\r\n view: {\r\n $help: [\r\n 'view []',\r\n 'Get current encoded view or set if ENCODED_VIEW placed as argument',\r\n ],\r\n ENCODED_VIEW: {\r\n $help: [\r\n 'encoded view matrix string (binary code)',\r\n ],\r\n },\r\n },\r\n rotate: {\r\n $help: [\r\n 'rotate (x|y|z) [] [(x|y|z) []]...',\r\n 'Rotate scene',\r\n ],\r\n },\r\n scale: {\r\n $help: [\r\n 'scale ',\r\n 'Scale scene',\r\n ],\r\n },\r\n select: {\r\n $help: [\r\n 'select [as ]',\r\n 'Select atoms using selector defined in SELECTOR_STRING',\r\n ' and if SELECTOR_NAME is defined register it in viewer',\r\n ' you can use it later as a complex selector',\r\n ],\r\n },\r\n within: {\r\n $help: [\r\n 'within of as ',\r\n 'Build within named selector',\r\n ' DISTANCE ',\r\n ' SELECTOR_STRING ',\r\n ' SELECTOR_NAME ',\r\n ],\r\n },\r\n url: {\r\n $help: [\r\n 'url [-s] [-v]',\r\n 'Report URL encoded scene',\r\n ' if -s set that include settings in the URL',\r\n ' if -v set that include view in the URL',\r\n ],\r\n },\r\n screenshot: {\r\n $help: [\r\n 'screenshot [ []]',\r\n 'Make a screenshot of the scene',\r\n ' WIDTH in pixels',\r\n ' HEIGHT in pixels, equal to WIDTH by default',\r\n ],\r\n },\r\n line: {\r\n $help: [\r\n 'line [=]',\r\n 'Draw dashed line between two specified atoms',\r\n ],\r\n },\r\n removeobj: {\r\n $help: [\r\n 'removeobj ',\r\n 'Remove scene object by its index. Indices could be obtained by command',\r\n ],\r\n },\r\n listobj: {\r\n $help: [\r\n 'listobj',\r\n 'Display the list of all existing scene objects',\r\n ],\r\n },\r\n};\r\n\r\nexport default help;\r\n","import _ from 'lodash';\r\nimport Miew from './Miew';\r\nimport { parser as parsercli } from './utils/MiewCLIParser';\r\nimport clihelp from './utils/MiewCLIHelp';\r\nimport logger from './utils/logger';\r\nimport utils from './utils';\r\n\r\nconst {\r\n chem: { selectors },\r\n modes,\r\n colorers,\r\n materials,\r\n palettes,\r\n options,\r\n settings,\r\n} = Miew;\r\n\r\nfunction None() {\r\n}\r\n\r\nconst NULL = (function () {\r\n const obj = new None();\r\n return function () {\r\n return obj;\r\n };\r\n}());\r\n\r\nclass RepresentationMap {\r\n constructor() {\r\n this.representationMap = {};\r\n this.representationID = {};\r\n }\r\n\r\n get(strId) {\r\n return this.representationMap[strId] || this.representationID[strId] || '';\r\n }\r\n\r\n add(strId, index) {\r\n if (strId === -1) {\r\n return 'Can not create representation: there is no data';\r\n }\r\n\r\n if (index !== undefined) {\r\n if (!this.representationMap.hasOwnProperty(strId)) {\r\n this.representationMap[strId.toString()] = index;\r\n this.representationID[index] = strId.toString();\r\n } else {\r\n return 'This name has already existed, registered without name';\r\n }\r\n }\r\n return `Representation ${strId} successfully added`;\r\n }\r\n\r\n remove(index) {\r\n if (index && this.representationID.hasOwnProperty(index)) {\r\n delete this.representationMap[this.representationID[index]];\r\n delete this.representationID[index];\r\n }\r\n\r\n const sortedKeys = Object.keys(this.representationID).sort();\r\n for (const i in sortedKeys) {\r\n if (sortedKeys.hasOwnProperty(i)) {\r\n const id = sortedKeys[i];\r\n if (id > index) {\r\n this.representationID[id - 1] = this.representationID[id];\r\n this.representationMap[this.representationID[id]] -= 1;\r\n delete this.representationID[id];\r\n }\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n this.representationMap = {};\r\n this.representationID = {};\r\n }\r\n}\r\n\r\nconst representationsStorage = new RepresentationMap();\r\n\r\nfunction keyRemap(key) {\r\n const keys = {\r\n s: 'selector',\r\n m: 'mode',\r\n c: 'colorer',\r\n mt: 'material',\r\n mode: 'modes',\r\n color: 'colorers',\r\n colorer: 'colorers',\r\n select: 'selector',\r\n material: 'materials',\r\n selector: 'selector',\r\n };\r\n const ans = keys[key];\r\n return ans === undefined ? key : ans;\r\n}\r\n\r\nclass CLIUtils {\r\n list(miew, repMap, key) {\r\n let ret = '';\r\n if (miew && repMap !== undefined) {\r\n if (key === undefined || key === '-e') {\r\n const count = miew.repCount();\r\n\r\n for (let i = 0; i < count; i++) {\r\n ret += this.listRep(miew, repMap, i, key);\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n listRep(miew, repMap, repIndex, key) {\r\n let ret = '';\r\n const rep = miew.repGet(repIndex);\r\n if (!rep) {\r\n logger.warn(`Rep ${repIndex} does not exist!`);\r\n return ret;\r\n }\r\n const index = repIndex;\r\n const repName = repMap.get(index);\r\n\r\n const { mode, colorer } = rep;\r\n const selectionStr = rep.selectorString;\r\n const material = rep.materialPreset;\r\n\r\n ret += `#${index} : ${mode.name}${repName === '' ? '' : `, ${repName}`}\\n`;\r\n\r\n if (key !== undefined) {\r\n ret += ` selection : \"${selectionStr}\"\\n`;\r\n ret += ` mode : (${mode.id}), ${mode.name}\\n`;\r\n ret += ` colorer : (${colorer.id}), ${colorer.name}\\n`;\r\n ret += ` material : (${material.id}), ${material.name}\\n`;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n listSelector(miew, context) {\r\n let ret = '';\r\n\r\n for (const k in context) {\r\n if (context.hasOwnProperty(k)) {\r\n ret += `${k} : \"${context[k]}\"\\n`;\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n listObjs(miew) {\r\n const objs = miew._objects;\r\n\r\n if (!objs || !Array.isArray(objs) || objs.length === 0) {\r\n return 'There are no objects on the scene';\r\n }\r\n\r\n const strList = [];\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n strList[i] = `${i}: ${objs[i].toString()}`;\r\n }\r\n\r\n return strList.join('\\n');\r\n }\r\n\r\n joinHelpStr(helpData) {\r\n if (helpData instanceof Array) {\r\n return helpData.join('\\n');\r\n }\r\n return helpData;\r\n }\r\n\r\n help(path) {\r\n if (_.isUndefined(path)) {\r\n return `${this.joinHelpStr(clihelp.$help)}\\n${_.slice(_.sortBy(_.keys(clihelp)), 1).join(', ')}\\n`;\r\n }\r\n\r\n const helpItem = _.get(clihelp, path);\r\n return _.isUndefined(helpItem) ? this.help() : `${this.joinHelpStr(helpItem.$help)}\\n`;\r\n }\r\n\r\n load(miew, arg) {\r\n if (miew === undefined || arg === undefined || arg === '-f') {\r\n return;\r\n }\r\n miew.awaitWhileCMDisInProcess();\r\n const finish = () => miew.finishAwaitingCMDInProcess();\r\n miew.load(arg).then(finish, finish);\r\n }\r\n\r\n checkArg(key, arg, modificate) {\r\n if (key !== undefined && arg !== undefined) {\r\n if (keyRemap(key) === 'selector') {\r\n const res = selectors.parse(arg);\r\n\r\n if (res.error !== undefined) {\r\n const selExc = { message: res.error };\r\n throw selExc;\r\n }\r\n\r\n if (modificate !== undefined && modificate) {\r\n return res.selector;\r\n }\r\n return arg;\r\n }\r\n\r\n const modificators = {\r\n colorers,\r\n modes,\r\n materials,\r\n };\r\n\r\n let modificator = key;\r\n let temp;\r\n while (modificator !== temp) {\r\n temp = modificator;\r\n modificator = keyRemap(temp);\r\n }\r\n\r\n if (modificators[modificator].get(arg) === undefined) {\r\n const exc = { message: `${arg} is not existed in ${modificator}` };\r\n throw exc;\r\n }\r\n return arg;\r\n }\r\n return NULL;\r\n }\r\n\r\n propagateProp(path, arg) {\r\n if (path !== undefined) {\r\n let argExc = {};\r\n const adapter = options.adapters[typeof _.get(settings.defaults, path)];\r\n if (adapter === undefined) {\r\n const pathExc = { message: `${path} is not existed` };\r\n throw pathExc;\r\n }\r\n\r\n if ((path.endsWith('.color') || path.endsWith('.baseColor')\r\n || path.endsWith('.EL.carbon')) && typeof arg !== 'number') {\r\n arg = palettes.get(settings.now.palette).getNamedColor(arg);\r\n }\r\n\r\n if (path.endsWith('.fg') || path.endsWith('.bg')) {\r\n if (typeof arg !== 'number') {\r\n const val = palettes.get(settings.now.palette).getNamedColor(arg, true);\r\n if (val !== undefined) {\r\n arg = `0x${val.toString(16)}`;\r\n }\r\n } else {\r\n arg = `0x${arg.toString(16)}`;\r\n }\r\n }\r\n\r\n if (path.endsWith('.template')) {\r\n arg = arg.replace(/\\\\n/g, '\\n');// NOSONAR\r\n }\r\n\r\n if (arg !== undefined && adapter(arg) !== arg && adapter(arg) !== (arg > 0)) {\r\n argExc = { message: `${path} must be a \"${typeof _.get(settings.defaults, path)}\"` };\r\n throw argExc;\r\n }\r\n }\r\n return arg;\r\n }\r\n\r\n unquoteString(value) {\r\n return utils.unquoteString(value);\r\n }\r\n}\r\n// repIndexOrRepMap could be RepresentationMap or index\r\n\r\nconst utilFunctions = new CLIUtils();\r\n\r\nfunction CreateObjectPair(a, b) {\r\n const obj = {};\r\n obj[a] = b;\r\n return obj;\r\n}\r\n\r\nfunction ArgList(arg) {\r\n if (arg instanceof this.constructor) {\r\n return arg;\r\n }\r\n if (arg instanceof Array) {\r\n this._values = arg.slice(0);\r\n } else if (arg) {\r\n this._values = [arg];\r\n } else {\r\n this._values = [];\r\n }\r\n}\r\n\r\nArgList.prototype.append = function (value) {\r\n const values = this._values;\r\n values[values.length] = value;\r\n return this;\r\n};\r\n\r\nArgList.prototype.remove = function (value) {\r\n const values = this._values;\r\n const index = values.indexOf(value);\r\n if (index >= 0) {\r\n values.splice(index, 1);\r\n }\r\n return this;\r\n};\r\n\r\nArgList.prototype.toJSO = function (cliUtils, cmd, arg) {\r\n const res = {};\r\n\r\n const list = this._values;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n _.set(res, list[i].id, cliUtils.propagateProp(`${keyRemap(cmd)}.${arg}.${list[i].id}`, list[i].val));\r\n }\r\n\r\n return res;\r\n};\r\n\r\nfunction Arg(_id, _val) {\r\n this.id = _id;\r\n this.val = _val;\r\n}\r\n\r\nconst cliutils = Object.create({});\r\n\r\ncliutils.Arg = Arg;\r\ncliutils.ArgList = ArgList;\r\n\r\ncliutils.miew = null;\r\ncliutils.echo = null;\r\ncliutils.representations = representationsStorage;\r\ncliutils.utils = utilFunctions;\r\n\r\ncliutils._ = _;\r\ncliutils.CreateObjectPair = CreateObjectPair;\r\ncliutils.keyRemap = keyRemap;\r\ncliutils.Context = selectors.Context;\r\ncliutils.ClearContext = selectors.ClearContext;\r\n\r\ncliutils.NULL = NULL;\r\n\r\ncliutils.notimplemented = function () {\r\n return this.NULL;\r\n};\r\n\r\nMiew.prototype.script = function (script, _printCallback, _errorCallback) {\r\n parsercli.yy.miew = this;\r\n parsercli.yy.echo = _printCallback;\r\n parsercli.yy.error = _errorCallback;\r\n if (this.cmdQueue === undefined) {\r\n this.cmdQueue = [];\r\n }\r\n\r\n if (this.commandInAction === undefined) {\r\n this.commandInAction = false;\r\n }\r\n\r\n this.cmdQueue = this.cmdQueue.concat(script.split('\\n'));\r\n};\r\n\r\nMiew.prototype.awaitWhileCMDisInProcess = function () {\r\n this.commandInAction = true;\r\n};\r\n\r\nMiew.prototype.finishAwaitingCMDInProcess = function () {\r\n this.commandInAction = false;\r\n};\r\n\r\nMiew.prototype.isScriptingCommandAvailable = function () {\r\n return this.commandInAction !== undefined\r\n && !this.commandInAction\r\n && this.cmdQueue !== undefined\r\n && this.cmdQueue.length > 0;\r\n};\r\n\r\nMiew.prototype.callNextCmd = function () {\r\n if (this.isScriptingCommandAvailable()) {\r\n const cmd = this.cmdQueue.shift();\r\n\r\n const res = {};\r\n res.success = false;\r\n try {\r\n parsercli.parse(cmd);\r\n res.success = true;\r\n } catch (e) {\r\n res.error = e.message;\r\n parsercli.yy.error(res.error);\r\n this.finishAwaitingCMDInProcess();\r\n }\r\n return res;\r\n }\r\n return '';\r\n};\r\n\r\nparsercli.yy = cliutils;\r\n// workaround for incorrect JISON parser generator for AMD module\r\nparsercli.yy.parseError = parsercli.parseError;\r\n","import Miew from './Miew';\r\nimport './Miew-cli';\r\n\r\nexport default Miew;\r\n"],"names":["parser","o","k","v","l","length","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","$VV","$VW","$VX","$VY","$VZ","$V_","$V$","$V01","$V11","$V21","$V31","$V41","$V51","$V61","trace","yy","symbols_","terminals_","productions_","performAction","anonymous","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","miew","reset","ClearContext","resetReps","rebuild","rebuildAll","echo","utils","help","toString","motm","propagateProp","get","set","saveSettings","restoreSettings","resetSettings","applyPreset","repRemove","representations","remove","repHide","listRep","list","listSelector","Context","select","checkArg","toLowerCase","rep","repCurrent","selector","within","Number","material","toUpperCase","view","changeUnit","dssp","scale","i","n","rotate","Math","PI","translate","center","addObject","type","params","opts","toJSO","listObjs","removeObject","getURL","settings","screenshotSave","load","clear","add","repAdd","mode","Array","colorer","_","assign","CreateObjectPair","key","val","Object","create","keyRemap","concat","ArgList","append","Arg","parseInt","JSON","parse","String","table","defaultActions","parseError","str","hash","recoverable","error","Error","input","self","stack","tstack","vstack","lstack","recovering","TERROR","EOF","args","slice","call","arguments","lexer","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","push","ranges","options","getPrototypeOf","popStack","lex","token","pop","symbol","preErrorSymbol","state","action","a","r","yyval","p","len","newState","expected","errStr","showPosition","join","text","match","line","loc","first_line","last_line","first_column","last_column","range","apply","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","lines","unput","split","substr","oldLines","more","reject","backtrack_lexer","less","pastInput","past","replace","upcomingInput","next","pre","c","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","flex","begin","condition","popState","conditions","topState","abs","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","YYSTATE","unquoteString","Parser","module","exports","keyword","GetSelector","RangeList","Range","ValueList","AbstractInterpolator","CubicInterpolator","Enum","LinearInterpolator","NearestInterpolator","SincFilterInterpolator","Smooth","clipClamp","clipMirror","clipPeriodic","defaultConfig","getColumn","getType","isValidNumber","makeLanczosWindow","makeScaledFunction","makeSincKernel","normalizeScaleTo","shallowCopy","sin","sinc","validateNumber","validateVector","__hasProp","__extends","child","parent","ctor","constructor","__super__","METHOD_NEAREST","METHOD_LINEAR","METHOD_CUBIC","METHOD_LANCZOS","METHOD_SINC","CLIP_CLAMP","CLIP_ZERO","CLIP_PERIODIC","CLIP_MIRROR","CUBIC_TENSION_DEFAULT","CUBIC_TENSION_CATMULL_ROM","method","cubicTension","clip","scaleTo","sincFilterSize","sincWindow","max","min","period","array","config","clipHelper","clamp","clipHelperClamp","zero","clipHelperZero","periodic","clipHelperPeriodic","mirror","clipHelperMirror","getClippedInput","interpolate","t","_super","round","floor","tangentFactor","getTangent","m","t2","t3","x","window","kernel","sum","_ref","_ref2","arr","row","_i","_len","_results","f","baseScale","scaleRange","scaleFactor","translation","isNaN","isFinite","dimension","s","invalidErr","obj","copy","baseDomainEnd","interpolator","interpolatorClass","interpolators","properties","smoothFunc","lanczosFilterSize","nearest","linear","cubic","lanczos","count","_j","_len2","deepValidation","_k","_len3","domain","sort","define","amd","MMTF","e","byteLength","charCodeAt","setUint8","u","setUint16","setUint32","Uint8Array","buffer","setFloat64","setInt8","setInt16","setInt32","isArray","d","keys","ArrayBuffer","DataView","byteOffset","Int8Array","Int32Array","Float32Array","Int16Array","g","L","h","setFloat32","getFloat32","y","U","b","I","w","C","ceil","A","M","F","S","E","N","O","T","getInt32","subarray","j","q","D","P","z","B","V","G","R","rr","forEach","bondAtomList","bondOrderList","xCoordList","yCoordList","zCoordList","bFactorList","atomIdList","altLocList","occupancyList","groupIdList","groupTypeList","secStructList","insCodeList","sequenceIndexList","chainIdList","chainNameList","H","fromCharCode","getInt8","getUint8","getUint16","getUint32","getFloat64","getInt16","W","X","ignoreFields","nr","indexOf","J","K","firstModelOnly","onModel","onChain","onGroup","onAtom","onBond","chainsPerModel","chainCount","modelIndex","groupsPerChain","groupCount","chainIndex","chainId","chainName","groupList","atomNameList","atomCount","groupIndex","groupId","groupType","groupName","singleLetterCode","chemCompType","secStruct","insCode","sequenceIndex","atomIndex","atomId","element","elementList","atomName","formalCharge","formalChargeList","xCoord","yCoord","zCoord","bFactor","altLoc","occupancy","atomIndex1","atomIndex2","bondOrder","Q","Y","Z","response","XMLHttpRequest","addEventListener","responseType","open","send","or","ar","tr","er","ir","encode","decode","traverse","fetch","fetchReduced","version","fetchUrl","fetchReducedUrl","encodeMsgpack","encodeMmtf","decodeMsgpack","decodeMmtf","__assign","defaults","width","radius","corners","color","fadeColor","animation","direction","speed","zIndex","className","top","left","shadow","position","Spinner","spin","target","stop","el","document","createElement","setAttribute","style","transform","insertBefore","firstChild","drawLines","parentNode","removeChild","undefined","getColor","idx","borderRadius","shadows","parseBoxShadow","degrees","backgroundLine","height","background","transformOrigin","delay","boxShadow","normalizeShadow","appendChild","regex","_a","xUnits","yUnits","prefix","end","normalized","shadows_1","xy","convertOffset","radians","cos","Timer","startTime","oldTime","elapsedTime","running","start","now","getElapsedTime","update","delta","newTime","performance","bind","Date","tag","id","css","cssText","Stats","domElement","_text","_startTime","_prevTime","_deltas","_index","_total","_count","time","ms","fps","textContent","toPrecision","show","on","display","isUndefOrEqual","param","value","EventDispatcher","_handlers","callback","context","handlers","_checkPar","par","find","removeEventListener","handler","ev","values","omitBy","dispatchEvent","event","priorities","debug","info","report","warn","Logger","console","_priority","instantiate","verify","number","isNumber","defineProperty","findKey","level","levels","message","priority","_message","output","log","logger","browserType","DEFAULT","SAFARI","encodeQueryComponent","excludeExp","code","encodeURIComponent","decodeQueryComponent","decodeURIComponent","getUrlParameters","url","location","search","query","substring","result","exec","getUrlParametersAsDict","resolveURL","URL","href","anchor","generateRegExp","symbolStr","symbolList","listStr","RegExp","attrs","content","createTextNode","HTMLElement","deriveClass","cls","base","members","statics","deriveDeep","needZeroOwnProperties","res","hexColor","hex","DebugTracer","namespace","enabled","enable","indent","methods","wrap","method_","name_","spaces","_key","name","Function","OutOfMemoryError","allocateTyped","TypedArrayName","size","RangeError","bytesToBase64","bytes","binary","btoa","bytesFromBase64","atob","arrayToBase64","TypedArrayClass","arrayFromBase64","compareOptionsWithDefaults","defOpts","optsStr","isAlmostPlainObject","isPlainObject","proto","objectsDiff","src","dst","diff","forIn","srcValue","dstValue","deepDiff","isEmpty","isEqual","forInRecursive","object","iterateThrough","newPref","enquoteString","isString","SyntaxError","getFileExtension","fileName","lastIndexOf","Infinity","splitFileName","ext","dataUrlToBlob","parts","partsCount","Blob","getBrowser","navigator","vendor","userAgent","shotOpen","write","shotDownload","dataUrl","filename","msSaveBlob","link","download","innerHTML","createObjectURL","body","click","data","blobData","copySubArrays","indices","itemSize","shallowCloneNode","node","newNode","cloneNode","worldPos","unquotedStringRE","enquoteHelper","correctSelectorIdentifier","test","concatTypedArraysUnsafe","first","second","mergeTypedArraysUnsafe","reduce","acc","cur","JobHandle","_shouldCancel","cancel","shouldCancel","notify","slaveEvent","VERSION","modes","BS","atom","bond","space","multibond","aromrad","showarom","polyComplexity","poor","low","medium","high","ultra","VW","LN","offsarom","chunkarom","lineWidth","LC","SA","zClip","probeRadius","subset","wireframe","SE","QS","isoValue","gaussLim","gridSpacing","CS","probePositions","TR","TU","heightSegmentsRatio","tension","CA","depth","ss","helix","arrow","strand","TX","template","horizontalAlign","verticalAlign","dx","dy","dz","fg","bg","showBg","VD","kSigma","kSigmaMed","kSigmaMax","frame","isoMode","colorers","EL","carbon","UN","CO","baseColor","CB","factor","SQ","gradient","TM","OC","HY","MO","antialias","camFov","camNear","camFar","camDistance","radiusToFit","fogNearFactor","fogFarFactor","fogAlpha","fogColor","fogColorEnable","palette","resolution","autoResolution","autoPreset","preset","presets","default","empty","wire","small","macro","objects","dashSize","gapSize","transparent","draft","clipPlane","clipPlaneFactor","clipPlaneSpeed","plugins","axes","fog","zSprites","isoSurfaceFakeOpacity","suspendRender","nowater","autobuild","fxaa","outline","threshold","thickness","ao","autoRotation","maxfps","fbxprec","autoRotationAxisFixed","zooming","picking","pick","editing","aromatic","singleUnit","stereo","interpolateViews","transparency","translationSpeed","example","good","ssaoKernelRadius","ssaoFactor","stereoBarrel","use","multiFile","Settings","old","_changed","path","oldValue","_notifyChange","merge","_notifyChanges","defaultValue","cloneDeep","checkpoint","deepValue","deepPath","changed","filter","applyDiffs","diffs","getDiffs","versioned","setPluginOpts","plugin","repIndex","asBoolean","adapters","string","boolean","cL1Ass","cOptsSep","cL2Ass","cLSep","cCommonIgnoreSymbols","getLevel1ExcludedExpr","cLevel1Ignores","getLevel2ExcludedExpr","cLevel2Ignores","cL1ExclExpr","encodeQueryComponentL1","cL2ExclExpr","encodeQueryComponentL2","ensureRepList","reps","ensureRepAssign","prop","_objects","newOpts","newObj","parseParams","sep","extractArgs","defaultsDict","bang","inputVal","arg","pair","adapter","actions","unit","menu","mt","materials","dup","_fromArray","entries","entry","isFunction","fromAttr","attr","fromURL","_processOptsForURL","_processArgsForURL","_processObjForURL","objOpts","toURL","stringList","checkAndAdd","addReps","repList","addObjects","objList","protocol","host","pathname","_processOptsForScript","_processArgsForScript","_processObjForScript","map","_processRepsForScript","repString","strIdx","localAdd","toScript","commandsList","command","saveQuotes","quote","trim","Atom","residue","role","het","serial","temperature","charge","mask","hydrogenCount","radicalCount","valence","bonds","flags","Flags","HYDROGEN","CARBON","isHet","isHydrogen","getVisualName","forEachBond","process","getFullName","_chain","getName","_sequence","NONPOLARH","Element","fullName","weight","radiusBonding","hValency","hydrogenValency","Constants","U1","Lead","U2","Wing","U18","Role","SG","ByAtomicNumber","ByName","byAtomicNumber","byName","getByName","cBondTypes","UNKNOWN","COVALENT","AROMATIC","getAtomPos","Bond","right","order","fixed","_left","_right","_fixed","_order","_type","getLeft","getRight","getOrder","calcLength","distanceTo","_forEachNeighbour","currAtom","forEachLevelOne","forEachLevelTwo","l2Atom","_fixDir","refPoint","currDir","posGetter","rightCount","leftCount","tmpVec","clone","checkDir","sub","dotProd","dot","checkCarbon","stages","stageId","multiplyScalar","calcNormalDir","third","maxNeibs","another","secondPos","firstV","secondV","crossVectors","lengthSq","normalize","BondType","THREE","cNucleicControlNames","cNucleicWing1Names","cNucleicWing2Names","cCylinderSource","cCylinderTarget","types","atoms","Residue","chain","sequence","icode","_component","_icode","_mask","_atoms","_secondary","_firstAtom","_leadAtom","_wingAtom","_lastAtom","_controlPoint","_midPoint","_wingVector","_cylinders","_isValid","_het","_molecule","getChain","getMolecule","getSequence","getSecondary","getICode","addAtom","xyz","tempFactor","complex","getComplex","getAtomCount","forEachAtom","_findAtomByName","_findFirstAtomInList","names","collectMask","getCylinderTargetList","_name","_detectLeadWing","getAtomPosition","leadAtom","wingStart","wingEnd","cylSource","targetList","cylTarget","calcWing","prevLeadPos","currLeadPos","prevWingPos","prevWing","vectorA","vectorB","needToNegate","angleTo","negate","_innerFinalize","prevRes","prev","nextRes","chainAsNucleic","bFirstInChain","lp","Vector3","lerp","_finalize2","asNucleic","isConnected","anotherResidue","_finalize","tempCount","occupCount","ResidueType","letterCode","_fullName","StandardTypes","ALA","ARG","ASN","ASP","CYS","GLN","GLU","GLY","HIS","ILE","LEU","LYS","MET","PHE","PRO","PYL","SEC","SER","THR","TRP","TYR","VAL","DA","DC","DG","DI","DT","DU","WAT","H2O","HOH","DOD","UNK","UNL","PROTEIN","BASIC","ACIDIC","POLAR","NONPOLAR","NUCLEIC","PURINE","PYRIMIDINE","DNA","RNA","WATER","_addFlag","flag","hydro","_addParam","ChainType","Chain","_complex","_residues","minSequence","POSITIVE_INFINITY","maxSequence","NEGATIVE_INFINITY","getResidues","_determineType","residues","findResidue","seqNum","iCode","curr","updateToFrame","frameData","prevData","frameRes","currData","addResidue","getResidueType","addResidueType","getResidueCount","forEachResidue","StructuralElement","init","term","generic","genericByType","serialAtomMap","residueHash","splitUnifiedSerial","serialId","hashCode","getUnifiedSerial","Type","STRAND","BRIDGE","HELIX_310","HELIX_ALPHA","HELIX_PI","HELIX","TURN_310","TURN_ALPHA","TURN_PI","TURN","BEND","COIL","Generic","LOOP","StructuralElementType","StructuralElementGeneric","typeByPDBHelixClass","Helix","helixClass","comment","Strand","sheet","sense","atomCur","atomPrev","as","Sheet","_width","_strands","getWidth","addStrand","addEmptyStrand","SGroup","saveNode","_id","_position","_charge","_repeat","_center","xmlNodeRef","getPosition","getCentralPoint","_rebuildSGroupOnAtomChange","nLimon","bLow","bHight","aPos","addVectors","includes","toJSON","List","_values","splice","valuesArray","upperOnly","_validate","Selector","ListSelector","RangeListSelector","ValueListSelector","caseSensitive","NoneSelector","includesAtom","_atom","AllSelector","none","PrefixOperator","rhs","InfixOperator","lhs","keywords","defineSelector","SelectorClass","factory","SerialSelector","NameSelector","AltLocSelector","ElemSelector","ResidueSelector","SequenceSelector","ICodeSelector","ResIdxSelector","ChainSelector","HetatmSelector","PolarHSelector","NonPolarHSelector","NULL_SELECTOR","defineOperator","OperatorClass","NotOperator","AndOperator","OrOperator","byResidueTypeFlag","selectors","exc","BiologicalUnit","_selector","_boundaries","boundingBox","Box3","boundingSphere","Sphere","computeBoundaries","makeEmpty","expandByPoint","bbc","getCenter","setFromCenterAndSize","radiusSquared","pos","lengthSquared","distanceToSquared","sqrt","getTransforms","getSelector","getBoundaries","finalize","Assembly","chains","matrices","oldCenter","oldRad","applyMatrix4","newRad","addScalar","subScalar","addChain","addMatrix","matrix","Component","_residueIndices","_cycles","_subDivs","_residueCount","resIdc","idIdc","idCount","last","setSubDivs","subDivs","resCnt","_bonds","forEachCycle","cycle","addCycle","cycles","markResidues","_forEachSubChain","subs","currRes","endRes","getMaskedSequences","_subIdx","getMaskedSubdivSequences","currIdx","lastSubIdx","subIdx","boundaries","cMaxPairsForHashCode","cHashTableSize","cNumbersPerPair","cMaxNeighbours","cInvalidVal","cBigPrime","AtomPairs","maxPairsEstimate","numPairs","numMaxPairs","intBuffer","hashBuffer","destroy","addPair","indexA","indexB","ia","ib","codeToAdd","apI","cProfileBondBuilder","cEstBondsMultiplier","cSpaceCode","cBondTolerance","cVMDTolerance","cBondRadInJMOL","cEpsilon","_getBondingRadius","_isAtomEligible","AutoBond","_maxRad","bBox","getDefaultBoundaries","_vBoxMin","_vBoxMax","_pairCollection","_addExistingPairs","getAtoms","numAtoms","aInd","collection","numBondsForAtom","bInd","indTo","_findPairs","vw","getVoxelWorld","atomsNum","rA","isHydrogenA","posA","locationA","atomA","processAtom","atomB","locationB","dist2","rB","maxAcceptable","forEachAtomWithinRadius","_addPairs","iA","iB","_addPair","bondsA","numBonds","newBond","addBond","build","_buildInner","timeEnd","_calcBoundingBox","nAtoms","maxRad","cCrossThresh","cAromaticType","cAromaticAtoms","_coDirVectors","v1Tmp","v2Tmp","cp","v1","v2","_insertAscending","_anotherAtom","_cosBetween","theta","MathUtils","_markAromatic","Cycle","atomsList","nA","nextAtom","checkBond","_isAromatic","_isPossibleAromatic","rightIdx","leftIdx","_checkCycleSimple","_checkCycleComplex","assert","AromaticLoopsMarker","bondsData","bondMarks","_bondsData","_bondMarks","_resetCycles","_currIdx","_haveSameCycle","bond1","bond2","arr1","arr2","n1","n2","i1","i2","_tryBond","prevBond","currRight","bondsOrder","currLeft","currVec","startAtomRef","_currStart","checkAromatic","_checkBond","anotherAtom","anotherVec","newDir","cross","dir","newRight","_startCycle","_findLoops","checkCycle","forEachComponent","component","newCycle","markCycles","detectCycles","_getSphereSliceRadiusRange","zMin","zMax","dzMin","dzMax","rzMin","rzMax","rMin","rMax","_getCircleSliceRadiusRange","yMin","yMax","dyMin","dyMax","ryMin","ryMax","VoxelWorld","box","vCellSizeHint","_box","getSize","divide","_last","_cellSize","_cellInnerR","_cellOuterR","numVoxels","_voxels","addAtoms","voxelIdx","_findVoxel","_zero","_voxel","point","voxel","_forEachAtomInVoxel","_xRange","Vector2","_yRange","_zRange","_forEachVoxelWithinRadius","xRange","yRange","zRange","_forEachVoxelWithinRadiusSimple","rRangeXY","rRangeX","xVal","yVal","zVal","isInsideX","isInsideY","isInsideZ","divideScalar","clampScalar","_vCenter","vCenter","distTouch2","distInside2","d2","r2","isInside","forEachAtomWithinDistFromMasked","dist","_forEachAtomWithinDistFromGroup","atomProc","forEachAtomWithinDistFromSelected","voxels","processIfWithin","PairCollection","MINIMAL_DISTANCE","MIN_HBOND_ENERGY","MAX_HBOND_ENERGY","COUPLING_CONSTANT","MAX_COUPLING_DISTANCE","MAX_RESIDUES_THRESHOLD","HBondInfo","_hbonds","_buildVW","_build","isBond","from","to","acc0","acc1","acceptor","energy","ri","preri","rj","prerj","_calcHBondEnergy","pairs","_residueGetCAlpha","_residueGetCO","_residueGetNH","predonor","donor","distanceHO","distanceHC","distanceNC","distanceNO","donorInfo","accInfo","BridgeType","freeze","NO_BRIDGE","PARALLEL","ANTI_PARALLEL","HelixFlag","START","MIDDLE","END","START_AND_END","StructureType","SecondaryStructureMap","_ss","_sheet","_betaPartners","_bend","_helixFlags","_chainLengths","_chains","_buildBetaSheets","_buildAlphaHelices","inResidues","chainLength","inPreferPiHelices","stride","kappa","_kappa","_isHelixStart","isTurn","_cosinusAngle","p1","p2","p3","p4","v12","v34","prevPrev","nextNext","curCA","ppCA","nnCA","ckap","skap","atan2","bridges","lenA","chainA","lenB","chainB","_testBridge","found","bridge","unshift","chainI","chainJ","ibi","iei","jbi","jei","ibj","iej","jbj","jej","_hasChainBreak","bulge","ladderset","Set","ladder","delete","sheetset","toMove","_areBridgesLinked","betai","betaj","parallel","ai","aj","has","VOXEL_SIZE","helixClassMap","loopMap","Complex","_components","_helices","_sheets","structures","_residueTypes","_sgroups","_molecules","_maskNeedsUpdate","metadata","symmetry","units","_currentUnit","addSheet","addHelix","getBonds","forEachChain","resName","rt","getSGroupCount","getSGroups","getAtomByFullname","resId","localeCompare","getChainCount","getMolecules","getMoleculeCount","forEachMolecule","molecules","forEachSGroup","groups","components","forEachVisibleComponent","getBondCount","maxSerial","chainShift","uniSerial","remnant","ser","_fillCmpEdit","addComp","comp","resCount","currStart","_fillCmpNoedit","currSubDivs","_fillComponents","enableEditing","getCurrentUnit","resetCurrentUnit","setCurrentUnit","newUnit","_computeBounds","onAtomPositionChanged","_finalizeBonds","updateStructuresMask","helices","sheets","needAutoBonding","autoConnector","other","marker","detectAromaticLoops","_finalizeMolecules","molecule","updater","structure","countAtomsByMask","getNumAtomsBySelector","resetAtomMask","markAtoms","setMask","clearMask","totalSelector","markAtomsAdditionally","clearAtomBits","reseter","getAtomNames","_atomNames","dict","getElements","_elements","getResidueNames","_residueNames","getChainNames","_chainNames","getAltLocNames","_altlocNames","_voxelWorld","addElement","srcArray","dstArray","functor","elem","joinComplexes","complexes","atomBias","bondBias","residueBias","chainBias","componentBias","bias","processBond","processResidue","processChain","processComponent","doNothing","ssMap","getSheet","item","lastCode","lastSheetIndex","lastHelixIndex","curStructure","curCode","curResidue","curSheetIndex","loopType","curSheet","pow2ceil","Volume","dimensions","vecSize","volumeInfo","_dimVec","_volumeInfo","_dimX","_dimY","_dimZ","_rowElements","_planeElements","_totalElements","_data","getValue","setValue","addValue","getDimensions","getBox","getVolumeInfo","getCellSize","boxSize","computeGradient","vl","vs","xSize","ySize","zSize","volMap","_voxelValue","zi","zm","zp","yi","ym","yp","xi","xm","xp","getTiledTextureStride","buildTiledTexture","tilesX","tilesY","tileRow","texture","DataTexture","LuminanceFormat","UnsignedByteType","UVMapping","ClampToEdgeWrapping","LinearFilter","needsUpdate","getData","getDirectIdx","getStrideX","getStrideY","getStrideZ","Molecule","CSS2DObject","Object3D","_element","getElement","setTransparency","transp","op","op100","opacity","RCGroup","Group","raycast","raycaster","intersects","visible","children","enableSubset","innerOnly","disableSubset","getSubset","totalSubset","vertexScreenQuadShader","fragmentScreenQuadFromTex","fragmentScreenQuadFromTexWithDistortion","LAYERS","VOLUME","TRANSPARENT","PREPASS_TRANSPARENT","VOLUME_BFPLANE","COLOR_FROM_POSITION","SHADOWMAP","SELECTION_LAYERS","resetTransform","quaternion","updateMatrixWorldRecursive","updateMatrixWorld","addSavingWorldTransform","_worldMatrixInverse","Matrix4","matrixWorld","invert","multiply","decompose","WebGLRenderer","renderDummyQuad","_material","MeshBasicMaterial","depthWrite","_scene","Scene","_quad","Mesh","PlaneGeometry","_camera","OrthographicCamera","render","renderScreenQuad","isIdentity","identity","equals","applyToPointsArray","elements","persp","ScreenQuadMaterial","RawShaderMaterial","uniforms","srcTex","vertexShader","depthTest","renderScreenQuadFromTex","fragmentShader","renderScreenQuadFromTexWithDistortion","coef","PerspectiveCamera","setMinimalFov","angle","aspect","fov","radToDeg","atan","tan","degToRad","StereoCamera","updateHalfSized","camera","originalAspect","originalFov","updateProjectionMatrix","setDistanceToFit","Raycaster","intersectVisibleObject","gfxObj","fogFarPlane","intersectObject","nearPlane","near","matrixWorldInverse","farPlane","far","extractScale","_v","te","det","determinant","_calcCylinderMatrix","posBegin","posEnd","posCenter","matScale","makeScale","matRotHalf","makeRotationX","matRotLook","vUp","lookAt","setPosition","_calcChunkMatrix","eye","up","rad","_groupHasGeometryToRender","group","hasGeoms","_buildDistorionMesh","widthSegments","heightSegements","calcInverseBarrel","epsilon","prevR2","curR2","dr","geo","getAttribute","setXY","BufferAttribute","copyAtList","attribute","indexList","fillArray","startIndex","endIndex","removeChildren","clearTree","LineSegments","Line","geometry","dispose","destroyObject","belongToSelectLayers","layers","processObjRenderOrder","root","idMaterial","renderOrder","isGroup","applySelectionMaterial","setValues","depthFunc","LessEqualDepth","overrideColor","lights","shadowmap","setUberOptions","fixedColor","Color","zOffset","getMiddlePoint","point1","point2","optionalTarget","addScaledVector","_oldInstancedBufferGeometryCopy","InstancedBufferGeometry","source","instanceCount","calcCylinderMatrix","calcChunkMatrix","groupHasGeometryToRender","buildDistorionMesh","gfxutils","_defaultBoundaries","Visual","dataSource","_dataSource","release","getDataSource","_ensureArray","EntityList","entities","_list","_dict","_indices","entity","register","registerInList","unregisterFromList","registerInDict","unregisterFromDict","unregister","all","makeContextDependent","defineProperties","CollisionSphere","_radius","_sphere","sphere","ray","intersectSphere","distance","origin","SphereCollisionGeo","setSphere","inters","chunkIdx","computeBoundingBox","computeBoundingSphere","tmpColor","OFFSET_SIZE","COLOR_SIZE","setArrayXYZ","setArrayXYZW","InstancedSpheresGeometry","spheresCount","sphereComplexity","useZSprites","_sphGeometry","SphereBufferGeometry","_init","setItem","itemIdx","itemPos","itemRad","_offsets","setColor","colorVal","_colors","startUpdate","finishUpdate","setOpacity","chunkIndices","alphaArr","_alpha","geom","sphereGeo","alpha","fill","InstancedBufferAttribute","MAX_IDC_16BIT","VEC_SIZE","ChunkedObjectsGeometry","BufferGeometry","chunkGeo","chunksCount","_chunkGeo","colors","chunkSize","_chunkSize","mesh","facesPerChunk","faceIndex","srcPos","_positions","srcNorm","_normals","srcColor","dstPos","dstNorm","dstColor","dstPtOffset","ptIdxBegin","ptIdxEnd","attributes","chunkIndex","chunkIndexSize","pointsCount","use32bitIndex","indexSize","Uint32Array","Uint16Array","posOffset","setIndex","SimpleSpheresGeometry","sphGeometry","normals","geoNormals","normal","_chunkPos","_tmpPositions","tmpPos","geoPos","centerPos","tmpVector","normMtx","Matrix3","Simple2CCylindersGeometry","cylGeometry","CylinderGeometry","_chunkNorms","_tmpVector","botPos","topPos","firstOffset","secondOffset","tmpArray","geoNorm","lerpVectors","mtx1","getNormalMatrix","fromArray","toArray","applyMatrix3","colorVal1","colorVal2","MAX_POINTS_COUNT_16BIT","PTS_PER_TRIANGLE","CylinderBufferGeometry","radiusTop","radiusBottom","radialSegments","heightSegments","openEnded","thetaStart","thetaLength","parameters","hasTop","hasBottom","vertexCount","facesCount","heightHalf","positions","Uint16BufferAttribute","uvs","currVtxIdx","currFaceIdx","tanTheta","v3","v4","setXYZ","vx","vy","vz","startTIdx","lastIdx","fTIdx","currSrcIdx","getX","getY","getZ","nextTVtx","startBIdx","lastBIdx","fBIdx","currSrcBIdx","nextBVtx","invMatrix","sortNumber","_prepareCylinderInfo","chunksIdx","cylinderInfo","even","newPar","_assignOpacity","color1","color2","Instanced2CCylindersGeometry","_useZSprites","_cylGeometry","_collisionGeo","me","mtxOffset","_matVector1","_matVector2","_matVector3","_invmatVector1","_invmatVector2","_invmatVector3","colorIdx","_color1","_color2","cylinderIndices","getGeoParams","cylinderGeo","TRI_SIZE","tmpPrev","tmpNext","tmpRes","simpleNormal","normalOnCut","nearRingPt","_createExtrudedChunkGeometry","shape","ringsCount","ptsCount","totalPts","ExtrudedObjectsGeometry","_ringsCount","tmpShape","_tmpShape","hasSlope","hasCut","chunkStartIdx","_setPoints","_setSlopeNormals","_setBaseNormals","_addCut","vtxIdx","mtx","nPtsInRing","_countNormalsInRing","isSlope","shiftToExtraPt","subVectors","VERTEX_PER_SEGMENT","POS_SIZE","DIR_SIZE","COL_SIZE","startSegmentIdx","segmentsCount","elemSize","ThickLinesGeometry","_initVertices","segmentIdx","setSegment","pos1","pos2","directions","_directions","dirIdx","startSegIdx","endSegIdx","getSubsetSegments","getSubsetColors","getSubsetOpacities","getNumVertexPerSegment","getPositionSize","setSegments","startPos","startDir","setColors","_buffersSize","indexOffset","pointOffset","BaseLinesGeometry","LinesGeometry","posSize","CylinderCollisionGeo","itemOffset","COLLISION_RAD","ChunkedLinesGeometry","enableCollision","collisionGeo","segCount","segIdx","TwoColorLinesGeometry","segmentIndices","_segCounts","vectors","vecCount","tempPos1","tempPos2","CrossGeometry","POS_RAD_SIZE","IsoSurfaceGeometry","_opts","_posRad","posRad","IsoSurfaceMarchCube","pointsValuesLinear","hasIntersection","bitsInside","numCellsPerSide","vx7000000","n3","striIndicesMarchCube","edgeTable","_voxelGradientFast","grad","GridCell","_arrSize","cubeIndex","Triangle","createArray","arrSize","IsoSurface","_numTriangles","_numVertices","_volumetricData","_xAxis","_yAxis","_zAxis","_xDir","_yDir","_zDir","_prepareAxesAndDirs","volData","cellSize","xAxis","yAxis","zAxis","xDir","yDir","zDir","tmp","notZero","axe","EPSILON","_vertexInterp","isoLevel","grid","ind1","ind2","vertex","valP1","valP2","isoDiffP1","diffValP2P1","mu","_triTable","_firstIndices","_secondIndices","_vertexList","_normalList","_polygonize","triangles","firstIndices","secondIndices","vertexList","normalList","triCount","triTblIdx","triTable","_doGridPosNorms","step","appendSimple","vol","dim","stepX","stepY","stepZ","gc","gcVal","gcValSize","additions","tmpTriCount","appendVertex","axis","triVertex","_origin","posMtx","globTriCount","_gradient","compute","_remapIndices","vertexMap","idcCount","newIndices","_remapVertices","vertices","newPositions","newNormals","norm","vertexFusion","faceVer","oldVerCount","vMap","newVer","matchedIndex","setColorVolTex","colorMap","atomMap","atomWeightMap","visibilitySelector","numVerts","xs","ys","zs","colorData","strideX","strideY","strideZ","atomWeightData","atomStrideX","atomStrideY","atomStrideZ","xInv","yInv","zInv","atomLookup","atomWeights","interp","idx1","idx2","collectWeight","coefX","coefY","coefZ","newVerCount","ind","mux","muy","muz","maxWeight","dominantIdx","atomIdx","c0","c1","c2","c3","cz0","cz1","numTriangles","newTriCount","i0","toMesh","VolumeSurfaceGeometry","_visibilitySelector","_calcSurface","_findMinMax","posRadArray","itemsCount","maxPosRad","minPosRad","tmpVal","_findNumVoxels","minMaxValues","minCoordRad","maxCoordRad","gridPadding","radScale","padRad","bbox","_makeSurface","surface","isoSurf","volTexMap","packedArrays","_computeSurface","chem","QuickSurfGeometry","_shiftByOrigin","gaussdensity","atomicNum","invIsoValue","invGridSpacing","maxVoxelX","maxVoxelY","maxVoxelZ","volTexData","texStrideX","scaledRad","atomicNumFactor","radInv","radLim","radLim2","xMin","xMax","dy2dz2","addr","texAddr","expVal","density","exp","colInd","originX","originY","originZ","AVHash","maxDistance","minX","minY","minZ","maxX","maxY","maxZ","hashFunc","minW","iDim","jDim","kDim","nCells","jkDim","cellID","preHash","cid","iIdx","cellOffsets","cellLengths","maxCellLength","subArray","cellLength","neighbourListLength","withinRadii","rExtra","out","outIdx","nearI","nearJ","nearK","loI","loJ","loK","hiI","hiJ","hiK","iOffset","jOffset","cellStart","cellEnd","dataIndex","baseIndex","rSum","ContactSurface","_indexList","maxRadius","lastClip","volTex","weights","weightsMap","gridx","gridy","gridz","sinTable","cosTable","neighbours","mid","ngTorus","uniformArray","TypeName","innI","fillGridDim","initializeGrid","gridSize","initializeAngleTables","initializeHash","rExt","singleAtomObscures","innX","innY","innZ","innCI","ra2","obscured","ni","projectPoints","sigma","sigma2Inv","ax","ay","az","ar2","ng","iax","iay","iaz","minx","miny","minz","maxx","maxy","maxz","colIdx","cr","cg","cb","iz","iy","dzy2","zyOffset","ix","cIdx","ap","spx","spy","spz","dd","normalToLine","projectTorus","aIdx","bIdx","xa","ya","za","r1","innR2","cosA","dmp","rInt","cost","sint","px","py","pz","current","projectTorii","innIdx","fixNegatives","innInnI","getVolume","ContactSurfaceGeometry","contactSurface","IsoSurfaceAtomColored","radiusAt","coord","colorX","colorY","colorZ","atomType","srcAtom","IsosurfaceBuildNormals","vBoxMin","vBoxMax","_numAtoms","_probeRadius","_atomsList","_voxelList","createVoxels","numAtomsRefs","ATOM_VOXEL_REF_SCALE","aveRad","numCells","_numCells","_aveRad","side","side2","side3","xScale","_xScale","yScale","_yScale","zScale","_zScale","maxAtomsRefs","xNumVoxMult","yNumVoxMult","zNumVoxMult","radAffect","diaAffect","numVoxX","numVoxY","numVoxZ","xIndMin","yIndMin","zIndMin","xIndMax","yIndMax","zIndMax","indVoxel","indexNext","destroyVoxels","_vertices","forEachRelatedAtom","xInd","yInd","zInd","ref","indexAtom","getClosestAtom","closest","minDist2","MAX_VALUE","buildNormals","numVertices","numCloseAtoms","vNormalX","vNormalY","vNormalZ","koef","r25","r01","maxRadAffect","maxRadAffect2","expScale","gatherNormals","maxClosedAtoms","buildColors","radiusColorSmoothness","KOEF_ADD","colorsClose","weightsSum","gatherColors","weightNormalized","IsoSurfaceGeo","maxNumVertices","maxNumTriangles","needVertexColors","_maxNumVertices","_maxNumTriangles","HASH_SIZE","SSIsosurfaceGeometry","_innerBuild","geoOut","getGeo","_fromGeo","numTri3","convertToAtomsColored","atomsColored","nm","hashLines","hashEntries","getBoundingBox","bigNum","probeRadius2","atomRadiusScale","radMax","num","getCornerCoord","numPoints","vOut","invNP","tx","ty","tz","buildEdgePoint","sign","cube","indexPointValue","cTwentyFour","xb","yb","zb","isTriangleVisible","v0","a0","voxelWorld","a1","a2","addTriangle","indInGeo0","addVertexToGeo","indInGeo1","indInGeo2","itr","buildGeoFromCorners","meshRes","vCellStep","cNumVerts","vaEdges","vCorner","indCell","indY","indZ","indPointValues","indValues","offs","numTri","indTri","getNumIntersectedCells","numIntersectedCells","cubeValuesIndex","indCorner","letter","atomT","calculateGridCorners","probeRad","vDif","aLot","fx","fy","fz","indXMin","indYMin","indZMin","indXMax","indYMax","indZMax","distToSphere","createVertexHash","numHashEtriesAllocated","numHashEntryIndex","getNewHashEntry","vAdd","oneHynberes","n815851","n37633","n2453543","r106","hashResolution","marCubeResoultion","iHash","hLineIndex","dot2","iVertAdd","entryFirst","modifyExcludedFromGeo","probeSphereRadius","distToBorder","r11","innerBlockWorkAround","probeSpRad2","sideInv","radEst","xCorner","yCorner","zCorner","ok","expandFactor","meshResolution","colorMode","useVertexColors","excludeProbe","rProbeRadius","numIntersectedCellsEstim","probeRadForNormalsColors","createLabel","fieldTxt","spanText","fontSize","strings","spanNodeP","spanNodeText","LabelsGeometry","items","xTranslation","yTranslation","deltaPos","userData","textAlign","fColor","bColor","precision","renderer","capabilities","getMaxPrecision","noiseWidth","noiseHeight","_noiseData","_noiseWrapS","RepeatWrapping","_noiseWrapT","_noiseMinFilter","NearestFilter","_noiseMagFilter","_noiseMapping","noiseTexture","RGBAFormat","noise","_samplesKernel","defaultUniforms","UniformsUtils","UniformsLib","diffuse","specular","shininess","zClipValue","clipPlaneValue","nearPlaneValue","invModelViewMatrix","world2colorMatrix","dashedLineSize","dashedLinePeriod","projMatrixInv","viewport","samplesKernel","noiseTex","noiseTexelSize","srcTexelSize","uberOptionNames","uberOptions","zClipCoef","toonShading","UberMaterial","instancedPos","instancedMatrix","attrColor","attrColor2","attrAlphaColor","sphereSprite","cylinderSprite","fakeOpacity","prepassTransparancy","colorFromPos","shadowmapType","colorFromDepth","orthoCam","dashedLine","thickLine","fogTransparent","normalsToGBuffer","precisionString","DoubleSide","defines","extensions","createInstance","inst","USE_FOG","INSTANCED_POS","INSTANCED_MATRIX","ATTR_COLOR","ATTR_COLOR2","ATTR_ALPHA_COLOR","OVERRIDE_COLOR","SPHERE_SPRITE","fragDepth","CYLINDER_SPRITE","ZCLIP","CLIP_PLANE","FAKE_OPACITY","USE_LIGHTS","COLOR_FROM_POS","SHADOWMAP_PCF_SHARP","SHADOWMAP_PCF_RAND","SHADOWMAP_BASIC","COLOR_FROM_DEPTH","ORTHOGRAPHIC_CAMERA","PREPASS_TRANSP","DASHED_LINE","THICK_LINE","FOG_TRANSPARENT","drawBuffers","NORMALS_TO_G_BUFFER","TOON_SHADING","shallow","updateUniforms","SuperClass","NewObjectType","onBeforeRender","scene","_onBeforeRender","_update","UberObject","ZSpriteMesh","castShadow","receiveShadow","_geometry","_group","modelViewMatrix","multiplyMatrices","uniformsNeedUpdate","ZClippedMesh","_mvLength","_modelView","modelView","mvLength","setFromMatrixColumn","localToWorld","TextMesh","initialized","srcItem","label","visibility","SimpleMesh","_viewport","ThickLineMesh","projectionMatrix","InstancedMesh","ZClipped","ZSprite","Text","Instanced","geometries","meshes","setMatParams","_createInstancedCylinders","Geometry","initMaterial","_createLineSegmentsGeoTriplet","renderParams","thickLines","_createSimpleGeoTriplet","geoClass","_createIsoSurfaceGeoTriplet","caps","surfaceOpts","MeshCreator","createSpheres","create2CClosedCylinders","_caps","_settings","create2CCylinders","create2CLines","createCrosses","createExtrudedChains","createChunkedLines","createQuickSurface","createContactSurface","createSASSES","createLabels","TransformGroup","_inverseMatrix","_ray","Ray","geoParams","transforms","_geoParams","mat","_transforms","_createMeshes","inverseMatrix","childIntersects","ciCount","geos","meshCnt","wrapper","Name","ChemGroup","selection","_selection","_mode","_colorer","_chunksIdc","chunks","_polyComplexity","_geo","_makeGeoArgs","_mesh","chunksList","_calcChunksList","_changeSubsetOpacity","AtomsGroup","atomsIdc","AtomsSphereGroup","calcAtomRadius","getAtomColor","updateColor","needsColorUpdate","AtomsSurfaceGroup","selectedAtoms","getSurfaceOpts","AtomsSASSESGroupStub","adjustColor","inverseColor","getAtomText","getNode","colorMappings","adjust","inverse","propagateColor","rule","startsWith","templateMappings","hetatm","water","parseTemplate","AtomsTextGroup","getLabelOpts","fgColor","bgColor","_slerp","omega","oSin","AromaticGroup","radOffset","addChunk","chunksToIdx","prevVector","currVector","segmentsHeight","_segmentsHeight","leprStep","currAtomIdx","cCount","cycAtoms","chunkPoints","tmpDir","cycleRad","prevPos","currPos","upDir","currAngle","_createShape","pts","AromaticTorusGroup","torusRad","getAromRadius","radiusV","calcStickRadius","lookAtVector","mtc","points","currPoint","AromaticLinesGroup","getAromaticOffset","prevPt","getAromaticArcChunks","ResiduesGroup","chunksIdc","resIdx","NucleicItemGroup","stickRad","getResidueColor","_processItem","NucleicCylindersGroup","cyl1","cyl2","NucleicSpheresGroup","calcMatrix","_buildStructureInterpolator","argTrans","transformT","tt","newt","ans","_addPoints","centerPoints","topPoints","tp","_addPointsForLoneResidue","nucleic","nameFrom","nameTo","posFrom","posTo","shift","wing","cpPrev","tpPrev","cpNext","tpNext","_calcPoints","firstIdx","_prevIdx","_nextIdx","arrIdx","_extrapolate2","otherIdx","prevIdx","nextIdx","CartoonHelper","startIdx","endIdx","pointsArrays","_topInterp","_centerInterp","_shift","_valueStep","_segmentsCount","prepareMatrices","firstRad","secondRad","mtcCount","outMtc","currRad","topInterp","cenInterp","currentValue","mtxIdx","lerpVal","currTop","currCenter","nextCenter","_loopThrough","subDiv","subDivI","subDivN","idc","matrixHelper","prevLast","prevSecondRad","getResidueRadius","ResiduesSubseqGroup","cmpMultiplier","getHeightSegmentsRatio","getTension","chunkIdc","subdivs","ResiduesTraceGroup","chunk","getCylinderCount","BondsGroup","drawMultiple","drawMultiorderBonds","showAromatic","showAromaticLoops","bondsIdc","bondsCount","getBondOrder","bondIdx","BondsCylinderGroup","emptyOffset","calcSpaceFraction","normDir","leftPos","rightPos","currBondIdx","atom1","atom2","a1Pos","a2Pos","minRad","currStickRad","STEP_SIZE","BondsLinesGroup","bondDir","a1Hangs","a2Hangs","AtomsProcessor","_checkAtom","atomsGroup","meshIdx","chSubset","subsetEl","OrphanAtomsProcessor","ResiduesProcessor","ResidueGroup","_checkResidue","residuesGroup","checkResidue","ResidueProcessor","NucleicProcessor","SubseqsProcessor","jEnd","BondsProcessor","bondsGroup","AromaticProcessor","cycleIdx","perCycle","Atoms","OrphanAtoms","Residues","Nucleic","Subseqs","Bonds","Aromatic","processors","_bakeGroup","triplet","Processor","GroupsFactory","AtomsSpheres","gfxTriplet","OrphanedAtomsCrosses","BondsCylinders","BondsLines","CartoonChains","TraceChains","NucleicSpheres","NucleicCylinders","ALoopsTorus","ALoopsLines","QuickSurfGeo","ContactSurfaceGeo","SASSESSurfaceGeo","TextLabelsGeo","Mode","identify","buildGeometry","depGroups","currGroup","newGroup","getRenderParams","LinesMode","shortName","LicoriceMode","BallsAndSticksMode","VanDerWaalsMode","TraceMode","TubeMode","_residue","TUBE_RADIUS","CartoonMode","secCache","getResidueStartRadius","secOpts","getResidueEndRadius","ARROW_END","startRad","endRad","_res","tubeRad","secHeight","secData","SurfaceMode","surfaces","surfaceNames","getVisibilitySelector","isSurface","QuickSurfaceMode","useBeads","IsoSurfaceMode","_excludeProbe","_radScale","IsoSurfaceSASMode","IsoSurfaceSESMode","ContactSurfaceMode","TextMode","getTemplateOptions","lerpColor","beta","g1","b1","g2","b2","Palette","getElementColor","asIs","elementColors","defaultElementColor","residueColors","defaultResidueColor","getChainColor","chainColors","getSecondaryColor","secondaryColors","defaultSecondaryColor","getSequentialColor","getGradientColor","gradientName","gradients","defaultNamedColor","getNamedColor","namedColors","minRangeColor","midRangeColor","maxRangeColor","defaultGradientColor","namedColorsArray","rainbow","temp","hot","cold","reds","blues","CL","FE","NI","CU","BR","HE","LI","BE","NE","NA","MG","AL","SI","AR","SC","TI","CR","MN","ZN","GA","GE","AS","KR","RB","SR","ZR","NB","TC","RU","RH","PD","AG","CD","IN","SN","SB","TE","XE","BA","LA","CE","PR","ND","PM","SM","EU","GD","TB","DY","HO","ER","YB","LU","HF","TA","RE","OS","IR","PT","AU","HG","TL","PB","BI","PO","AT","RN","FR","RA","AC","TH","PA","NP","PU","AM","CM","BK","CF","ES","FM","MD","NO","LR","RF","DB","BH","HS","MT","dna","rna","cpkPalette","jmolPalette","vmdPalette","palettes","Colorer","ElementColorer","ResidueTypeColorer","SequenceColorer","ChainColorer","SecondaryStructureColorer","secondary","UniformColorer","ConditionalColorer","parsed","_subsetCached","ConformationColorer","TemperatureColorer","OccupancyColorer","_getColorByOccupancy","HydrophobicityColorer","hydrophobicity","MoleculeColorer","scaleColor","CarbonColorer","colorCarbon","colorNotCarbon","neutralColor","intensity","materialList","_gatherObjects","meshTypes","createDerivativeMesh","layer","newMesh","traverseMeshes","func","applyTransformsToMeshes","processTransparentMaterial","matValues","prepassTranspMesh","processColFromPosMaterial","colFromPosMesh","createShadowmapMaterial","shadowmapMesh","isShadowmapMesh","removeShadowmapMaterial","forEachMeshInGroup","processObj","_countMeshTriangles","attribs","property","currAttr","faces","countTriangles","totalCount","meshutils","Representation","startMaterialValues","selectorString","materialPreset","needsRebuild","setMode","unmarkAtoms","setMaterialPreset","selectionGeo","buildSelectionGeometry","sg","matrixAutoUpdate","compare","repSettings","selStr","valueOf","modeDiff","colorerDiff","change","newSelectorObject","newSelector","newMode","newColorer","newMaterial","_traverseComponentGroups","ComplexEditor","ComplexComponentEditor","complexVisual","_complexVisual","_inProgress","_componentTransforms","_bakeComponentTransform","_resetComponentTransform","finalizeEdit","discard","getAltObj","pivot","visual","getSelectedComponent","getSelectionGeo","selectionMask","getSelectionBit","reprNode","bbmin","bbmax","updateMatrix","ComplexFragmentEditor","_getSelectionBorderAtoms","_fragmentBoundAtoms","pivotPos","_fragmentGeo","_fragmentSelectionGeo","vg","smeshes","sm","selectionBit","makeTranslation","_bakeAtomTransform","isFreeRotationAllowed","boundAtoms","transformDirection","atomHash","ComponentEditor","FragmentEditor","ComplexVisualEdit","lookupAndCreate","entityList","specs","Entity","ComplexVisual","_reprList","_repr","_reprListChanged","_selectionBit","_reprUsedBits","_selectionCount","_selectionGeometry","getSelectionCount","getEditor","_editor","repCount","desc","status","repGet","_getFreeReprIdx","bits","NUM_REPRESENTATION_BITS","newSelectionBit","originalSelection","buildSelectorFromMask","def","hide","rebuildSelectionGeometry","resetSelectionMask","updateSelectionMask","pickedObj","otherObj","expandSelection","tmpMask","deselectionMask","shrinkSelection","multiple","getSelectionCenter","selRule","reprList","repr","Promise","resolve","errorOccured","setTimeout","hasGeometry","DEBUG","setNeedsRebuild","_buildSelectorFromSortedLists","optimizeList","NaN","expression","and","residx","forSelectedResidues","beginComponentEdit","editor","beginFragmentEdit","setMaterialValues","needTraverse","vertexVolumeFaces","fragmentVolumeFaces","vertexVolume","fragmentVolume","vertexFarPlane","fragmentFarPlane","volumeUniforms","volumeDim","tileTex","tileTexSize","tileStride","boxAngles","_isoLevel0","_flipV","_BFLeft","_BFRight","_FFLeft","_FFRight","_WFFLeft","_WFFRight","overrideUniforms","defUniforms","facesPosMaterialParams","sideType","BackFacePosMaterial","ShaderMaterial","backFaceParams","BackSide","ShaderParams","FrontSide","BackFacePosMaterialFarPlane","matUniforms","aspectRatio","farZ","tanHalfFOV","matWorld2Volume","shaderParams","FrontFacePosMaterial","frontFaceParams","VolumeMaterial","updateDefines","ISO_MODE","STEPS_COUNT","VolumeMesh","Plane","cullFlag","_corners","_edges","_edgeIntersections","edgeIntersections","_updateVertices","edges","constant","vert","cornerMark","edgeMark","curEdge","curEdgeInter","CheckX","CheckY","CheckZ","curEdgeIdx","curEdgeSource","face","nextVertex","coplanarPoint","_collectVertices","_sortIndices","_updateIndices","faceIdx","vRight","vDir","rightProj","numIndices","setDataSource","vm","image","volInfo","obtuseAngle","_updateIsoLevel","mean","dmean","dmin","span","dmax","sd","_nearClipPlaneOffset","_pos","_norm","_norm4D","Vector4","_matrixWorldToLocal","_clipPlane","nearClipPlaneOffset","norm4D","matrixWorldToLocal","getWorldDirection","getWorldPosition","setFromNormalAndCoplanarPoint","_flattenArray","VolumeBounds","_projectionTable","XY","XZ","YZ","bSize","offsetVert","_getBaseVertices","flatVertices","_lines","LineBasicMaterial","projTable","proj","inv","currDelta","angleValue","getMesh","VolumeFarPlane","volume","planeGeo","_initPlaneGeo","_plane","frustumCulled","doubleSided","matWorldToVolume","_renderer","planeCamPos","normalMatrix","volumeMatrix","DEG2RAD","VolumeVisual","_frame","showFrame","_farPlane","getBoundingSphere","needShow","LoaderList","someLoaders","SomeLoader","canProbablyLoad","Loader","_source","_options","_abort","_agent","abort","extractName","FileLoader","_binary","blob","reader","FileReader","readAsArrayBuffer","readAsText","File","urlStartRegexp","XHRLoader","request","ImmediateLoader","ParserList","someParsers","format","formats","SomeParser","canProbablyParse","parseSync","getModel","model","_parseHeader","Remark290","_matrix","_matrixIndex","stream","readString","matrixRow","readCharCode","matrixData","matrixIndex","parseFloat","Remark350","assemblies","_assembly","assembly","PDBStream","_start","_nextCR","_nextLF","_next","_end","readLine","readChar","readInt","readFloat","TAG_LENGTH","nameToElement","veryLong","pdbStartRegexp","remarkParsers","PDBParser","_serialAtomMap","_modelId","_compaundFound","_biomoleculeFound","_allowedChainsIDs","_lastMolId","_remarks","_remark","_compndCurrToken","fileType","_fixBondsArray","_fixChains","remark290","isUndefined","remark350","chainDict","chainObj","idChainMap","nj","_parseATOM","chainID","resSeq","_parseENDMDL","_parseCONECT","serial0","serial1","serial2","serial3","serial4","_parseCOMPND","tokenIdx","chainStr","lastChar","_parseREMARK","remarkNum","remark","RemarkParser","_parseHELIX","fields","_parseSTRUCTURE","_parseSHEET","pars","adder","startId","endId","codeOfS","serialNumber","structureName","helLength","shWidth","shCur","shPrev","startChainID","endChainID","startSequenceNumber","iCodeStr","startICode","endSequenceNumber","endICode","cs","_parseHEADER","classification","date","_parseTITLE","title","tagParsers","HEADER","HETATM","ENDMDL","CONECT","COMPND","REMARK","cOrderCharCodes","cmlStartRegexp","CMLParser","_readOnlyOneMolecule","_rebuidBondIndexes","countBonds","idxs","atomRefs2","_createSGroup","moleculeArr","fieldData","atomRefs","placement","fieldName","_extractSGroup","_extractSGroups","firstAtomRef","sgroupRef","mapEntry","cycleFuncInner","cycleFunc","x2","x3","y2","y3","z3","atomsRef","_traverseData","dom","parseNode","xmlNode","nodeName","nodeValue","jsonNode","existing","childNodes","_findSuitableMolecule","molSet","atomArray","_selectComponents","DOMParser","doc","parseFromString","traversedData","rawData","prepareComponentCompound","ret","atomLabels","labelsCount","localBond","bondArray","addCurrBond","orderAttr","tc","labels","_breadWidthSearch","retStruct","originalCML","cml","retData","filteredData","rd","_packLabel","compId","molId","_unpackLabel","molID","breadthQueue","componentID","labeledAtoms","startID","_parseBond","eAtom","mainAtom","_parseSet","varData","currentLabel","addFunc","complexAtom","reorder","atomCharge","lLabel","atomFullNameStruct","elementType","countRef","currAtomComp","strLabel","stringify","atomSerial","added","mrvValence","sGrp","moleculaSet","totalAtomsParsed","joinedComplex","ArrayComparator","original","_original","_sum","candidate","sorted","secStructToType","getFirstByte","buf","MMTFParser","isArrayBuffer","_onModel","_modelData","_onChain","chainData","_onGroup","groupData","_updateSecStructure","_onAtom","atomData","_onBond","bondData","helixClasses","_ssType","_ssStruct","_ssStart","struct","_updateMolecules","mmtfData","chainsInModel0","chainIndexList","description","_traverse","structureId","releaseDate","eventCallbacks","modelData","_linkAtomsToResidues","_findSynonymousChains","named","_parseAssemblyInfo","bioAssemblyList","baInfo","transformList","chainListCheck","chainNames","allChains","_chainsByName","transpose","_markHeteroAtoms","_joinSynonymousChains","primaryChainsArray","primaryChainsHash","primary","ParsingError","column","captureStackTrace","parseLine","parseColumn","_isWhitespace","_inlineIndexOf","ch0","readCIF","newline","block","keysCount","valuesCount","_parseValue","_storeKey","_storeValue","keyIndex","cRequiredAtomFields","cSecondaryCoding","helx","turn","strn","getTypeFromId","typeId","arrize","arrayLikeObject","AtomDataError","_getOperations","operList","vector","ops","_extractOperations","assemblyGen","opsDict","groupStr","gps","grIdx","grCount","gr","gp","es","cnt","ii","nn","newMtx","CIFParser","asymDict","_toComplex","cifData","complexData","_extractAtoms","_extractSecondary","_extractAssemblies","_extractMolecules","_extractMetadata","struct_keywords","pdbx_keywords","databaserev","database_PDB_rev","date_original","molData","pdbx_description","atom_site","auth_seq_id","Cartn_x","Cartn_y","Cartn_z","label_atom_id","group_PDB","chainIdc","auth_asym_id","chainLabelIdc","label_asym_id","serials","iCodes","pdbx_PDB_ins_code","resNames","label_comp_id","type_symbol","tempFactors","B_iso_or_equiv","occupancies","charges","pdbx_formal_charge","altLocs","label_alt_id","models","pdbx_PDB_model_num","label_entity_id","moleculeIdx","struct_conf","_extractConfs","struct_sheet_range","_extractSheets","sheetData","sheet_id","beg_label_seq_id","end_label_seq_id","beg_label_asym_id","sheetNames","strandNames","starts","beg_auth_seq_id","ends","end_auth_seq_id","stICodes","pdbx_beg_PDB_ins_code","endICodes","pdbx_end_PDB_ins_code","helicesData","conf_type_id","comments","details","lengths","pdbx_PDB_helix_length","pdbx_PDB_helix_class","asmGen","pdbx_struct_assembly_gen","asmIdx","assembly_id","asmOper","oper_expression","asmList","asym_id_list","pdbx_struct_oper_list","asm","assemblyOps","valueType","singular","VolumeModel","_xyz2crs","_header","_boxSize","_boxStart","extent","nstart","crs2xyz","cellDims","angles","_typedCheck","isTypedArray","_buff","TypeError","_fillHeader","headerFormat","arrays","_parseArray","_parseVector","_buffer","_setAxisIndices","_setOrigins","_getAxis","header","gamma","z1","z2","xaxis","yaxis","zaxis","_getXYZdim","_getVolumeInfo","_setBoxParams","shiftX","shiftY","_getXYZbox","_toXYZData","CCP4Header","ispg","nsymbt","lksflg","customData","machine","nlabel","Ccp4Model","u32","i32","f32","xyz2crs","xyzData","crsIdx","CCP4Parser","XYZParser","_atomsInf","_fileName","_parseToAtomsInf","endnAtoms","endComment","startAtomsInf","_parseAtomsInf","words","PubChemParser","jsonData","PC_Compounds","aids","aid","fromPairs","zip","coords","conformers","aids1","aid1","aids2","aid2","orders","SDFStream","_strings","_currentStart","_currentStringIndx","setStart","getNextString","getCurrentString","getStringFromStart","numb","findNextDataItem","curStr","findNextCompoundStart","probablyHaveDataToParse","chargeMap","orderMap","typeMap","sdfAndMolRegexp","sdfRegExp","fileFormat","SDF","MOL","possibleNameTags","possibleIDTags","possibleTitleTags","tagsNames","tags","buildChainID","codes","trunc","reverse","SDFParser","_format","_metadata","_currentMolProps","_compoundIndx","_assemblies","_atomsParsed","_atomsIndexes","_parseAtoms","_parseBonds","bondsNum","bondType","_parseMOL","countsLine","_parseDataItem","_parseCompound","props","_tryToUpdateMoleculeData","_buildAssemblies","_buildMolecules","_searchTag","_tryToFind","tagsList","tagPossibleNames","_finalizeMetadata","defineFormat","DSN6Header","div","DSN6Model","i16","_pointCalculate","byteBuffer","counter","_blockCalculate","zBlock","yBlock","xBlock","inRange","blocks","_calculateInfoParams","dispersion","minDensity","maxDensity","DSN6Parser","canParse","checkDataTypeOptions","GROReader","getNext","GROParser","_time","_residueNumber","_residueName","_atomName","_atomNumber","_atomPosition","_atomVelocity","filetype","_parseTitle","_parseNumberOfAtoms","_parseAtom","positionX","positionY","positionZ","un","am","nc","du","resNumberRegex","spacesRegex","splitToFields","MOL2Parser","_currPosIdx","_currStartIdx","_parseRawStrings","_toStringFromStart","MOL2Data","newPosIdx","_toHeaderString","_toStringFromHeader","_setStart","_probablyHaveDataToParse","_findNextCompoundStart","_parseMolecule","parsedStr","_setResidue","originAtomId","targetAtomId","_fixSerialAtoms","currMolecule","molResidues","ExporterList","someExporters","Exporter","exportSync","export","PDBResult","_resultArray","_currentStr","_tag","_fixedNumeration","_numeration","_tagStrNum","getResult","writeString","_currentStrLength","newTag","numeration","isBoolean","newString","writeEntireString","maxStrPos","curStrLength","finish","repeat","cStr","writeBondsArray","bondsArrays","_getSubArrays","subArraySize","subArrays","writeMatrix","matrixIndx","toFixed","writeMatrices","PDBExporter","_tags","_result","_tagExtractors","_extractHEADER","TITLE","_extractTITLE","_extractATOM","_extractCONECT","_extractCOMPND","_extractREMARK","_extractHELIX","SHEET","_extractSHEET","_stringForRemark350","_stringForRemark290","fixedBonds","strands","startIndx","_getMoleculeChains","chainsString","_Remark290","_Remark350","biomolIndx","getChainName","SourceClass","FBX_POS_SIZE","FBX_NORM_SIZE","FBX_COL_SIZE","copyFbxPoint3","srcIdx","dstIdx","copyFbxPoint4","vector4","copyTransformedPoint3","setSubArray","copyFunctor","functorOpts","arridx","FBXModel","lastPos","lastNorm","lastCol","vertsCount","indsCount","setPositions","setTransformedPositions","setNormals","setTransformedNormals","setIndices","setShiftedIndices","shifted","getVerticesNumber","addInstance","currentCount","FBXGeometry","_info","FBX1CGeometry","cl","FBX2CCylinder","_cutRawStart","_cutRawEnd","_facesPerSlice","addPerCylinder","_extendVertices","_extendIndices","cutRaw","indicesPerQuad","startToShift","_setColorRange","colorSize","part1End","part2End","capSize","cap1End","cap2End","FBXInfoExtractor","_materials","_models","_extractModelsAndMaterials","_flattenModels","layersOfInterest","Layers","checkExportAbility","_collectInstancedGeoInfo","_collectGeoInfo","_reworkIndices","faceSize","overallVertsCount","combined","verticesCount","vertCount","_collectMaterialInfo","_addToPool","_collectSpheresInfo","instCount","instMatrix","objMatrix","sphereColor","instanceIndex","_getSphereInstanceMatrix","_collectCylindersInfo","oneCCylinder","splittingInfo","_gatherCylindersColoringInfo","twoCCylinder","needToSplit","additionalVertsCount","colorStart","colorEnd","is2Colored","_getCylinderInstanceMatrix","materialIdx","_checkExistingMaterial","findIndex","differs","instIdx","matVector1","matVector2","matVector3","idxOffset","defaultDefinitions","defaultProperties","defaultMaterialLayer","defaultLayerBlock","globalSettings","FBXResult","_writeHeader","_writeDefinitions","_writeObjects","_writeRelations","_writeConnections","FBXHeaderVersion","FBXVersion","timeStampVersion","creator","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","modelVersion","allModels","_verticesIndices","_normalLayer","_colorLayer","materialVersion","allMaterials","_materialProperties","modelsList","_floatArrayToString","colorArray","layerElementColorNumber","layerElementColorVersion","layerElementColorName","colorsStr","colorIndices","normalArray","layerElementNormalNumber","layerElementNormalVersion","layerElementNormalName","normalsStr","multiLayer","multiTake","shading","culling","geometryVersion","vertStr","FBXExporter","_version","miewVersion","_extractor","loaders","parsers","exporters","tempColor","CSS2DRenderer","_height","_widthHalf","_heightHalf","_vector","_viewMatrix","_projectionMatrix","_domElement","overflow","pointerEvents","myNode","setSize","_renderObject","lerpColorAsHex","setHex","getHexString","colorAsHex","setFromMatrixPosition","localOffset","getMaxScaleOnAxis","fogFactor","smoothstep","WebkitTransform","MozTransform","oTransform","getTopWindow","VK_LEFT","VK_UP","VK_RIGHT","VK_DOWN","STATE","NONE","ROTATE","TRANSLATE","SCALE","TRANSLATE_PIVOT","FULL_STOP_THRESHOLD","Quaternion","matrix4","ObjectHandler","lastRotation","_rotate","quat","zeroPivot","makeRotationFromQuaternion","setObjects","rot","mousePrevPos","mouseCurPos","aboutAxis","mouse2rotation","setFromAxisAngle","translateOnAxis","timeSinceLastUpdate","timeSinceMove","intertia","dynamicDampingFactor","intertiaThreshold","eyeDirection","cameraUpDirection","cameraSidewaysDirection","moveDirection","mouseDelta","mousePrev","mouseCur","axisRotateFactor","setLength","rotateFactor","ObjectControls","objectPivot","hotkeysEnabled","screen","_state","_mousePrevPos","_mouseCurPos","_mainObj","_altObj","_affectedObj","_isAltObjFreeRotationAllowed","_isTranslationAllowed","_isKeysTranslatingObj","_pressedKeys","_clock","_lastUpdateTime","_listeners","mousedown","mouseup","mousemove","mousewheel","touchstartend","touchmove","getKeyBindObject","keydownup","handleResize","resetKeys","contextmenu","stopPropagation","preventDefault","innerWidth","innerHeight","getBoundingClientRect","ownerDocument","documentElement","pageXOffset","clientLeft","pageYOffset","clientTop","enableHotkeys","allowTranslation","allow","allowAltObjFreeRotation","keysTranslateObj","isEditingAltObj","convertMouseToOnCircle","pageX","pageY","screenSize","convertMouseToViewport","rotateByMouse","aboutZAxis","getOrientation","setOrientation","getScale","setScale","curTime","_lastMouseMoveTime","speedX","speedY","altObj","button","workWithAltObj","altKey","ctrlKey","shiftKey","translatePivotByMouse","wheelDelta","detail","touches","_touchDistanceCur","_touchDistanceStart","_scaleStart","newScale","keyCode","translatePivotInWorld","setX","setY","setZ","translatePivot","setPivot","newPivot","Picker","_lastMousePos","_mouseTotalDist","_lastClickBeginTime","_lastClickPos","_clickBeginTime","touchstart","touchend","picked","pickObject","screenPos","rayCaster","unproject","fogFarValue","getMouseInViewport","curPos","timeSinceLastClickBegin","clickDist","_lastTouchdownPos","changedTouches","Axes","targetCamera","_target","_targetCamera","_object","AxesHelper","_full","autoClear","setViewport","cDataOffset","cFirstMask","cFirstShift","cSecMask1","cSecShift1","cSecMask2","cSecShift2","cThirdMask","cStrMask","cStrShift","c219","c220","cHelixIdx","cSheetIdx","secTypes","cSecNames","_createSecondary","strArray","nRes","resid","rIdx","fromUInt20ToInt20","uint20","FrameInfo","payload","callbacks","isLoading","_framesRange","frameIsReady","_frameRequest","_callbacks","_framesRequestLength","_downloadDataFn","parseBinaryData","setFrame","_prepareBuffer","framesStart","framesEnd","_framesCount","onDone","onLoadStatusChanged","onFail","onError","_parseBuffer","_bufferRequestStart","arrayBuffer","dataView","atomsCount","framesCount","_atomsCount","maxSize","chunkedFramesCount","timeStep","iName","_timeStep","posData","coordIdx","secondaryArr","hiWord","loWord","_secondaryData","nextFrame","_currFrame","_updateSecondary","myResidues","sec","oldSec","nSec","compRes","getSec","frameIdx","_cachedResidues","disableEvents","_vec","vec","SceneObject","paramsStr","getGeometry","LinesObj","_id1","_id2","_getAtomFromName","err","_atom1","_atom2","_line","computeLineDistances","_raycaster","_intersects","verticesNeedUpdate","OutlineMaterial","srcDepthTex","srcTexSize","DEPTH_OUTLINE","FXAAMaterial","bgTransparent","BG_TRANSPARENT","AOMaterial","diffuseTexture","normalTexture","depthTexture","camNearFar","projMatrix","kernelRadius","depthThreshold","_kernelOffsets","AOHorBlurMaterial","aoMap","samplesOffsets","AOVertBlurWithBlendMaterial","fogNearFar","useFog","AnaglyphMaterial","srcL","srcR","View","orientation","_transitionTime","ViewInterpolator","setup","startView","endView","_endTime","_isPaused","_srcView","_dstView","_isMoving","isMoving","wasStarted","transTime","getCurrentView","success","createView","slerp","pause","resume","MAX_COOKIE_LEN","COUNT_SUFFIX","_chunkString","chunkLen","lc","Cookies","removeCookie","cntKey","_toCount","cntVal","_getSimpleCookie","_removeSimpleCookie","setCookie","_setSimpleCookie","getCookie","cookie","_getExpirationDate","today","EXP_PERIOD_YEARS","setFullYear","toUTCString","_exists","webVRPoC","showEnterVR","cursor","currentSession","onSessionEnded","onSessionStarted","session","_gfx","xr","setReferenceSpaceType","setSession","onmouseenter","onmouseleave","onclick","sessionInit","optionalFeatures","requestSession","then","moveSceneBehindHeadset","showWebXRNotFound","stylizeElement","bottom","padding","border","font","isSessionSupported","supported","textDecoration","createWebVRButton","WebVRPoC","onToggle","_mainCamera","_button","_onToggle","_molContainer","_user","_scalingPivot","_controller1","_controller2","_pressedGripsCounter","_distance","startScalingByControllers","stopScalingByControllers","handleGripsDown","handleGripsUp","anotherController","gfx","_mainFog","_plugVRNodesIntoScene","_setControllersListeners","getController","_createControllerMesh","disable","setAnimationLoop","getSession","_unplugVRNodesFromScene","cylinder","rotateX","updateMoleculeScale","scaler","container","getCanvas","io","LinesObject","fragmentScreenQuadFromDistTex","EDIT_MODE","COMPLEX","COMPONENT","FRAGMENT","LOADER_NOT_FOUND","PARSER_NOT_FOUND","ColorManagement","updateFogRange","removeExtension","hasValidResidues","hasValidRes","reportProgress","percent","TOTAL_PERCENT","chooseFogColor","Miew","settingsCookie","cookiePath","_interpolator","_container","getElementById","head","getElementsByClassName","_containerRoot","_running","_halting","_building","_needRender","_hotKeysEnabled","_cookies","_spinner","_loading","_animInterval","_visuals","_curVisualName","_sourceWindow","registeredPlugins","_initOnSettingsChanged","getMaxRepresentationCount","_setContainerContents","_updateShadowCamera","shadowMatrix","OBB","halfSize","light","getOBB","class","frag","createDocumentFragment","_msgMode","_msgAtomInfo","_showMessage","_initGfx","_initListeners","_onKeyDown","_onKeyUp","_objectControls","_getAltObj","_picker","_onPick","file","keepRepsInfo","job","halt","msg","_showCanvas","_requestAnimationFrame","requestAnimationFrame","arezSpritesSupported","getExtension","isAOSupported","clientWidth","clientHeight","webGLOptions","preserveDrawingBuffer","premultipliedAlpha","renderer2d","WebGL1Renderer","shadowMap","autoUpdate","PCFShadowMap","getContext","setPixelRatio","devicePixelRatio","setClearColor","clearColor","stereoCam","Fog","selectionScene","selectionRoot","selectionPivot","light12","DirectionalLight","pixelRatio","getPixelRatio","shadowMapSize","mapSize","light3","AmbientLight","deviceWidth","deviceHeight","offscreenBuf","WebGLRenderTarget","minFilter","magFilter","depthBuffer","DepthTexture","UnsignedShortType","offscreenBuf2","offscreenBuf3","offscreenBuf4","volBFTex","volFFTex","volWFFTex","offscreenBuf5","FloatType","offscreenBuf6","offscreenBuf7","stereoBufL","stereoBufR","_embedWebXR","stats","_fps","_onResize","_makeUniqueVisualName","baseName","random","suffix","_addVisual","_removeVisual","_forEachVisual","_releaseAllVisuals","_forEachComplexVisual","_getComplexVisual","any","_getVolumeVisual","_getVisualForComplex","getVisuals","getComplexVisualsCount","getCurrentVisual","setCurrentVisual","run","_onTick","_discardComponentEdit","_discardFragmentEdit","enableHotKeys","_resizeOffscreenBuffers","isAnaglyph","multi","_onUpdate","_onRender","_getBSphereRadius","_bSphereForOneVisual","_bBoxForOneVisual","_bBox","_invMatrix","_points","union","_updateFog","_setUberMaterialValues","isScriptingCommandAvailable","callNextCmd","_needRebuild","_updateView","webVR","_clipPlaneUpdateValue","_fogFarUpdateValue","setRenderTarget","_renderFrame","_anaglyphMat","_size","focus","_renderShadowMap","_renderScene","setScissorTest","setScissor","cameraL","cameraR","_onBgColorChanged","_onFogColorChanged","_enableMRT","renderBuffer","textureBuffer","gl","drawBuffersWEBGL","COLOR_ATTACHMENT0","tx8","__webglTexture","bindTexture","TEXTURE_2D","fb","__webglFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT1_WEBGL","distortion","bHaveComplexes","volumeVisual","ssao","_renderWithPrepassTransparency","dstBuffer","srcBuffer","_performAO","_renderOutline","_renderSelection","_renderVolume","_performFXAA","_performDistortion","aberration","targetBuffer","_outlineMaterial","srcDepthBuffer","srcColorBuffer","currentRenderTarget","getRenderTarget","activeCubeFace","getActiveCubeFace","activeMipmapLevel","getActiveMipmapLevel","setBlending","NoBlending","buffers","setClear","setTest","updateMatrices","_hasSelectionToRender","selPivot","selPivotChild","_checkVolumeRenderingSupport","renderTarget","oldRT","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","volumeBFMat","volumeFFMat","cubeOffsetMat","world2colorMat","volumeRenderingSupported","dstBuf","tmpBuf1","tmpBuf2","tmpBuf3","overrideMaterial","colorMask","_fxaaMaterial","_aoMaterial","_horBlurMaterial","_vertBlurMaterial","_scale","normalBuffer","srcDepthTexture","tempBuffer","tempBuffer1","_lastPick","_setEditMode","_resetObjects","setNeedRender","_resetScene","resetPivot","resetView","_export","TheExporter","exporter","rePdbId","rePubchem","reUrlScheme","resolveSourceShortcut","matchesPdbId","sourceType","matchesPubchem","compound","updateBinaryMode","TheParser","fileExt","_fetchData","TheLoader","newOptions","keyCount","loader","lengthComputable","total","loaded","promise","catch","_parseData","dataSet","onLoadEnd","anything","jobIndex","_refreshTitle","_onLoad","unload","_startAnimation","fileData","_stopAnimation","_frameInfo","isPlaying","_isAnimating","_continueAnimation","_pauseAnimation","clearInterval","minFrameTime","setInterval","_updateObjsToFrame","visualName","amberFileName","resetEd","_onLoadEd","_tweakResolution","_edLoader","loadEd","_rebuildObjects","toRemove","unitIdx","currentUnitInfo","_updateInfoPanel","rebuildActions","appendix","_extractRepresentation","defPreset","_setReps","presList","newIdx","_editMode","getElementsByTagName","_enterComponentEditMode","editors","_editors","_applyComponentEdit","_enterFragmentEditMode","selectedVisuals","_applyFragmentEdit","_updateSelection","firstLine","secondLine","aName","coordLine","nextAltObj","setPivotResidue","amount","setPivotAtom","_centerInVisual","setPivotSubset","_includesInCurSelection","_includesInSelector","screenshot","fov2Tan","tan2Fov","getDataURL","dataURL","currBrowser","canvas","canvasContext","drawImage","toDataURL","screenshotURI","originalTanFov2","areaOfInterestSize","areaOfInterestTanFov2","shotAspect","setDrawingBufferSize","uri","save","dataString","maxPerf","_gfxScore","_autoChangeResolution","setOptions","objData","bThrow","Ctor","_addSceneObject","sceneObject","objs","getState","compact","getScript","_compareReps","compareWithDefaults","currPreset","repsDiff","emptyReps","repsInfo","objectsState","_updateShadowmapMeshes","_updateMaterials","_fogAlphaChanged","evt","Boolean","sel","VIEW_VERSION","eulerOrder","euler","Euler","setFromQuaternion","srcView","dstView","setFromEuler","None","projected","fullAtomName","complexName","project","exportCML","extractRotation","extractBasis","retMat","makeBasis","updateCMLData","xml","removeAttribute","sGroup","oSerializer","XMLSerializer","serializeToString","curChainName","curChainColor","PACKAGE_VERSION","thirdParty","lodash","three","modeIdDesc","$help","colorDesc","materialDesc","addRepDesc","setGetParameterDesc","PDBID","REP_NAME","DESCRIPTION","REP_INDEX","EXPRESSION","MODE_ID","COLORER_ID","MATERIAL_ID","new","del","PARAMETER","set_save","set_restore","set_reset","PRESET","ENCODED_VIEW","removeobj","listobj","parsercli","clihelp","NULL","RepresentationMap","representationMap","representationID","strId","sortedKeys","representationsStorage","CLIUtils","repMap","repName","selectionStr","strList","joinHelpStr","helpData","sortBy","helpItem","awaitWhileCMDisInProcess","finishAwaitingCMDInProcess","modificate","selExc","modificators","modificator","argExc","pathExc","endsWith","utilFunctions","cliUtils","cmd","_val","cliutils","notimplemented","script","_printCallback","_errorCallback","cmdQueue","commandInAction"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"dist/Miew.js","mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIA,MAAM,GAAI,YAAU;EACxB,IAAIC,CAAC,GAAC,SAAAA,CAASC,CAAC,EAACC,CAAC,EAACF,CAAC,EAACG,CAAC,EAAC;MAAC,KAAIH,CAAC,GAACA,CAAC,IAAE,CAAC,CAAC,EAACG,CAAC,GAACF,CAAC,CAACG,MAAM,EAACD,CAAC,EAAE,EAACH,CAAC,CAACC,CAAC,CAACE,CAAC,CAAC,CAAC,GAACD,CAAC,CAAC;MAAC,OAAOF,CAAC;IAAA,CAAC;IAACK,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,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C,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAA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,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,CAAC,EAACtK,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAACrD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAACrD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACD,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACD,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACD,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACA;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC7D,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACS,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACJ,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,GAAG,EAACI;IAAI,CAAC,EAACrE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAACvE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CA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AAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,CAAC,EAACjD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACI,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAACjD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAACrD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC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AAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACI,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,CAAC,EAACjD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACI,GAAG;MAAC,EAAE,EA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AAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,E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C,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE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F,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE6C,QAAQ,EAAE;IACR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFC,MAAM,EAAE,CAAC;IACX,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACF7U,KAAK,EAAE;IACT,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI8U,EAAE,EAAE;MACFvC,MAAM,EAAE,SAAS;MACjBvS,KAAK,EAAE,QAAQ;MACf+U,SAAS,EAAE;IACb,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFhV,KAAK,EAAE,QAAQ;MACfiV,MAAM,EAAE;IACV,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFC,QAAQ,EAAE;IACZ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFD,QAAQ,EAAE,MAAM;MAChBxjB,GAAG,EAAE,CAAC;MACND,GAAG,EAAE;IACP,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACI2jB,EAAE,EAAE;MACFF,QAAQ,EAAE;IACZ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACIG,EAAE,EAAE;MACFH,QAAQ,EAAE;IACZ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACII,EAAE,EAAE;MACFJ,QAAQ,EAAE;IACZ;EACF,CAAC;EAED;AACF;AACA;AACA;EACEK,SAAS,EAAE,IAAI;EAEf;AACF;AACA;AACA;EACEC,MAAM,EAAE,IAAI;EAEZ;AACF;AACA;AACA;EACEC,OAAO,EAAE,GAAG;EAEZ;AACF;AACA;AACA;EACEC,MAAM,EAAE,KAAK;EAEbC,WAAW,EAAE,GAAG;EAEhBC,WAAW,EAAE,GAAG;EAEhB;AACF;AACA;AACA;EACEC,aAAa,EAAE,GAAG;EAAE;;EAEpB;AACF;AACA;AACA;EACEC,YAAY,EAAE,CAAC;EAAE;EACjBC,QAAQ,EAAE,GAAG;EACbC,QAAQ,EAAE,QAAQ;EAClBC,cAAc,EAAE,KAAK;EAErB;AACF;AACA;AACA;EACEC,OAAO,EAAE,IAAI;EAEb;AACF;AACA;AACA;EACEC,UAAU,EAAE,QAAQ;EAEpBC,cAAc,EAAE,KAAK;;EAErBC,UAAU,EAAE,IAAI;EAEhBC,MAAM,EAAE,SAAS;EAAE;;EAEnBC,OAAO,EAAE;IACP;IACAC,OAAO,EAAE,CAAC;MACRnwB,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,KAAK;MACfG,QAAQ,EAAE;IACZ,CAAC,CAAC;IAEF+xB,KAAK,EAAE,EAAE;IAET;IACAC,IAAI,EAAE,CAAC;MACLrwB,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,KAAK;MACfG,QAAQ,EAAE;IACZ,CAAC,CAAC;IAEF;IACAiyB,KAAK,EAAE,CAAC;MACNtwB,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,KAAK;MACfG,QAAQ,EAAE;IACZ,CAAC,CAAC;IAEF;IACAkyB,KAAK,EAAE,CAAC;MACNvwB,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,YAAY;MACtBG,QAAQ,EAAE;IACZ,CAAC,EAAE;MACD2B,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,sBAAsB;MAChCG,QAAQ,EAAE;IACZ,CAAC;EACH,CAAC;EAEDmyB,OAAO,EAAE;IACPjsB,IAAI,EAAE;MACJmV,KAAK,EAAE,UAAU;MACjB+W,QAAQ,EAAE,GAAG;MACbC,OAAO,EAAE;IACX;EACF,CAAC;EAED;;EAEA9C,EAAE,EAAE;IACFlU,KAAK,EAAE,QAAQ;IACfiX,WAAW,EAAE;EACf,CAAC;EAEDC,KAAK,EAAE;IACLC,SAAS,EAAE,KAAK;IAChBC,eAAe,EAAE,GAAG;IACpBC,cAAc,EAAE;EAClB,CAAC;EAED;AACF;AACA;AACA;EACEC,OAAO,EAAE,CAET,CAAC;EAED;AACF;AACA;AACA;EACEC,IAAI,EAAE,IAAI;EAEV;AACF;AACA;AACA;EACEC,GAAG,EAAE,IAAI;EAET;AACF;AACA;AACA;EACEtS,GAAG,EAAE,IAAI;EAET;AACF;AACA;AACA;AACA;EACEuS,QAAQ,EAAE,IAAI;EAEdC,qBAAqB,EAAE,IAAI;EAE3B;AACF;AACA;AACA;EACEC,aAAa,EAAE,IAAI;EAEnBC,OAAO,EAAE,KAAK;EAEd;AACF;AACA;AACA;EACEC,SAAS,EAAE,IAAI;EAEf;AACF;AACA;AACA;AACA;EACEC,IAAI,EAAE,IAAI;EACV;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE;IACPzS,EAAE,EAAE,KAAK;IACTtF,KAAK,EAAE,QAAQ;IACfgY,SAAS,EAAE,GAAG;IACdC,SAAS,EAAE;EACb,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,EAAE,EAAE,KAAK;EAET;AACF;AACA;AACA;AACA;AACA;AACA;EACEzX,MAAM,EAAE;IACN6E,EAAE,EAAE,KAAK;IACT7f,IAAI,EAAE,QAAQ;IACdqa,MAAM,EAAE;EACV,CAAC;EAED;AACF;AACA;AACA;AACA;EACEqY,YAAY,EAAE,GAAG;EAEjB;AACF;AACA;AACA;AACA;EACEC,MAAM,EAAE,EAAE;EAEV;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,CAAC;EAEV;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,qBAAqB,EAAE,IAAI;EAE3B;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,IAAI;EAEb;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,IAAI;EAEb;AACF;AACA;AACA;AACA;EACEC,IAAI,EAAE,MAAM;EAEZ;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,KAAK;EAEd;AACF;AACA;AACA;AACA;EACEC,QAAQ,EAAE,KAAK;EAEf;AACF;AACA;AACA;AACA;EACEC,UAAU,EAAE,IAAI;EAEhB;AACF;A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EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAC/D;AAED,qEAAeP,mBAAmB,E;;ACtSH;AACyB;AACxB;AAEhC,MAAMQ,SAAS,GAAG,CAChB,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACpD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,E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EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,C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;AACA,MAAMmoI,kBAAkB,GAAG;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,MAAMC,iBAAiB,GAAG;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA,MAAMC,oBAAoB,GAAG;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA,MAAMC,iBAAiB,GAAG;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA,MAAMC,cAAc,GAAG;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AAEW,MAAMC,SAAS,CAAC;EAC7BlxI,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACwnI,YAAY,GAAG,EAAE;IACtB,IAAI,CAACoF,KAAK,GAAG,IAAI;EACnB;EAEA9E,SAASA,CAACzxH,IAAI,EAAE;IACd,IAAI,CAACu2H,KAAK,GAAGv2H,IAAI;IACjB,IAAI,CAACmxH,YAAY,CAAC1uI,IAAI,CAAC,IAAI,CAACq4I,YAAY,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC3J,YAAY,CAAC1uI,IAAI,CAAC,IAAI,CAACs4I,iBAAiB,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC5J,YAAY,CAAC1uI,IAAI,CAAC,IAAI,CAACu4I,aAAa,CAACh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","sources":["webpack://Miew/webpack/universalModuleDefinition","webpack://Miew/./src/utils/MiewCLIParser.js","webpack://Miew/./src/utils/SelectionParser.js","webpack://Miew/./vendor/js/Smooth.js","webpack://Miew/./vendor/js/mmtf.js","webpack://Miew/external umd {\"module\":\"lodash\",\"commonjs\":\"lodash\",\"commonjs2\":\"lodash\",\"amd\":\"lodash\",\"root\":\"_\"}","webpack://Miew/external umd {\"module\":\"three\",\"commonjs\":\"three\",\"commonjs2\":\"three\",\"amd\":\"three\",\"root\":\"THREE\"}","webpack://Miew/webpack/bootstrap","webpack://Miew/webpack/runtime/compat get default export","webpack://Miew/webpack/runtime/define property getters","webpack://Miew/webpack/runtime/hasOwnProperty shorthand","webpack://Miew/../../node_modules/spin.js/spin.js","webpack://Miew/./src/Timer.js","webpack://Miew/./src/gfx/Stats.js","webpack://Miew/./src/utils/EventDispatcher.js","webpack://Miew/./src/utils/logger.js","webpack://Miew/./src/utils.js","webpack://Miew/./src/utils/JobHandle.js","webpack://Miew/./src/settings.js","webpack://Miew/./src/options.js","webpack://Miew/./src/chem/Atom.js","webpack://Miew/./src/chem/Element.js","webpack://Miew/./src/chem/Bond.js","webpack://Miew/./src/chem/Residue.js","webpack://Miew/./src/chem/ResidueType.js","webpack://Miew/./src/chem/Chain.js","webpack://Miew/./src/chem/StructuralElement.js","webpack://Miew/./src/chem/Helix.js","webpack://Miew/./src/chem/Strand.js","webpack://Miew/./src/chem/Sheet.js","webpack://Miew/./src/chem/SGroup.js","webpack://Miew/./src/chem/selectors/selectArgs.js","webpack://Miew/./src/chem/selectors/selectorsBase.js","webpack://Miew/./src/chem/selectors/selectOps.js","webpack://Miew/./src/chem/selectors.js","webpack://Miew/./src/chem/BiologicalUnit.js","webpack://Miew/./src/chem/Assembly.js","webpack://Miew/./src/chem/Component.js","webpack://Miew/./src/chem/AtomPairs.js","webpack://Miew/./src/chem/AutoBond.js","webpack://Miew/./src/chem/AromaticLoopsMarker.js","webpack://Miew/./src/chem/VoxelWorld.js","webpack://Miew/./src/chem/HBondInfo.js","webpack://Miew/./src/chem/SecondaryStructureMap.js","webpack://Miew/./src/chem/Complex.js","webpack://Miew/./src/chem/Volume.js","webpack://Miew/./src/chem/Molecule.js","webpack://Miew/./src/chem.js","webpack://Miew/./src/gfx/CSS2DObject.js","webpack://Miew/./src/gfx/RCGroup.js","webpack://Miew/./src/gfx/gfxutils.js","webpack://Miew/./src/Visual.js","webpack://Miew/./src/utils/EntityList.js","webpack://Miew/./src/utils/makeContextDependent.js","webpack://Miew/./src/gfx/geometries/SphereCollisionGeo.js","webpack://Miew/./src/gfx/geometries/InstancedSpheresGeometry.js","webpack://Miew/./src/gfx/geometries/ChunkedObjectsGeometry.js","webpack://Miew/./src/gfx/geometries/SimpleSpheresGeometry.js","webpack://Miew/./src/gfx/geometries/Simple2CCylindersGeometry.js","webpack://Miew/./src/gfx/geometries/CylinderBufferGeometry.js","webpack://Miew/./src/gfx/geometries/Instanced2CCylindersGeometry.js","webpack://Miew/./src/gfx/geometries/ExtrudedObjectsGeometry.js","webpack://Miew/./src/gfx/geometries/ThickLinesGeometry.js","webpack://Miew/./src/gfx/geometries/LinesGeometry.js","webpack://Miew/./src/gfx/geometries/CylinderCollisionGeo.js","webpack://Miew/./src/gfx/geometries/ChunkedLinesGeometry.js","webpack://Miew/./src/gfx/geometries/TwoColorLinesGeometry.js","webpack://Miew/./src/gfx/geometries/CrossGeometry.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceMarchCube.js","webpack://Miew/./src/gfx/geometries/IsoSurface.js","webpack://Miew/./src/gfx/geometries/VolumeSurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/QuickSurfGeometry.js","webpack://Miew/./src/gfx/geometries/ContactSurface.js","webpack://Miew/./src/gfx/geometries/ContactSurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceAtomColored.js","webpack://Miew/./src/gfx/geometries/IsosurfaceBuildNormals.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceGeo.js","webpack://Miew/./src/gfx/geometries/SSIsosurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/LabelsGeometry.js","webpack://Miew/./src/gfx/geometries/geometries.js","webpack://Miew/./src/gfx/capabilities.js","webpack://Miew/./src/gfx/noiseTexture.js","webpack://Miew/./src/gfx/shaders/UberMaterial.js","webpack://Miew/./src/gfx/meshes/UberObject.js","webpack://Miew/./src/gfx/meshes/ZSpriteMesh.js","webpack://Miew/./src/gfx/meshes/ZClippedMesh.js","webpack://Miew/./src/gfx/meshes/TextMesh.js","webpack://Miew/./src/gfx/meshes/SimpleMesh.js","webpack://Miew/./src/gfx/meshes/ThickLineMesh.js","webpack://Miew/./src/gfx/meshes/InstancedMesh.js","webpack://Miew/./src/gfx/meshes/meshes.js","webpack://Miew/./src/gfx/meshes/MeshCreator.js","webpack://Miew/./src/gfx/meshes/TransformGroup.js","webpack://Miew/./src/gfx/modes/groups/ChemGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsSphereGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsSurfaceGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsSASSESGroupStub.js","webpack://Miew/./src/gfx/modes/groups/AtomsTextGroup.js","webpack://Miew/./src/gfx/modes/groups/AromaticGroup.js","webpack://Miew/./src/gfx/modes/groups/AromaticTorusGroup.js","webpack://Miew/./src/gfx/modes/groups/AromaticLinesGroup.js","webpack://Miew/./src/gfx/modes/groups/ResiduesGroup.js","webpack://Miew/./src/gfx/modes/groups/NucleicItemGroup.js","webpack://Miew/./src/gfx/modes/groups/NucleicCylindersGroup.js","webpack://Miew/./src/gfx/modes/groups/NucleicSpheresGroup.js","webpack://Miew/./src/gfx/modes/groups/CartoonHelper.js","webpack://Miew/./src/gfx/modes/groups/ResiduesSubseqGroup.js","webpack://Miew/./src/gfx/modes/groups/ResiduesTraceGroup.js","webpack://Miew/./src/gfx/modes/groups/BondsGroup.js","webpack://Miew/./src/gfx/modes/groups/BondsCylinderGroup.js","webpack://Miew/./src/gfx/modes/groups/BondsLinesGroup.js","webpack://Miew/./src/gfx/modes/groups/groups.js","webpack://Miew/./src/gfx/modes/processors/AtomsProcessor.js","webpack://Miew/./src/gfx/modes/processors/OrphanAtomsProcessor.js","webpack://Miew/./src/gfx/modes/processors/ResiduesProcessor.js","webpack://Miew/./src/gfx/modes/processors/NucleicProcessor.js","webpack://Miew/./src/gfx/modes/processors/SubseqsProcessor.js","webpack://Miew/./src/gfx/modes/processors/BondsProcessor.js","webpack://Miew/./src/gfx/modes/processors/AromaticProcessor.js","webpack://Miew/./src/gfx/modes/processors/processors.js","webpack://Miew/./src/gfx/modes/groups/GroupsFactory.js","webpack://Miew/./src/gfx/modes/Mode.js","webpack://Miew/./src/gfx/modes/LinesMode.js","webpack://Miew/./src/gfx/modes/LicoriceMode.js","webpack://Miew/./src/gfx/modes/BallsAndSticksMode.js","webpack://Miew/./src/gfx/modes/VanDerWaalsMode.js","webpack://Miew/./src/gfx/modes/TraceMode.js","webpack://Miew/./src/gfx/modes/TubeMode.js","webpack://Miew/./src/gfx/modes/CartoonMode.js","webpack://Miew/./src/gfx/modes/SurfaceMode.js","webpack://Miew/./src/gfx/modes/QuickSurfaceMode.js","webpack://Miew/./src/gfx/modes/IsoSurfaceMode.js","webpack://Miew/./src/gfx/modes/IsoSurfaceSASMode.js","webpack://Miew/./src/gfx/modes/IsoSurfaceSESMode.js","webpack://Miew/./src/gfx/modes/ContactSurfaceMode.js","webpack://Miew/./src/gfx/modes/TextMode.js","webpack://Miew/./src/gfx/modes.js","webpack://Miew/./src/gfx/palettes/Palette.js","webpack://Miew/./src/gfx/palettes/cpkPalette.js","webpack://Miew/./src/gfx/palettes/jmolPalette.js","webpack://Miew/./src/gfx/palettes/vmdPalette.js","webpack://Miew/./src/gfx/palettes.js","webpack://Miew/./src/gfx/colorers/Colorer.js","webpack://Miew/./src/gfx/colorers/ElementColorer.js","webpack://Miew/./src/gfx/colorers/ResidueTypeColorer.js","webpack://Miew/./src/gfx/colorers/SequenceColorer.js","webpack://Miew/./src/gfx/colorers/ChainColorer.js","webpack://Miew/./src/gfx/colorers/SecondaryStructureColorer.js","webpack://Miew/./src/gfx/colorers/UniformColorer.js","webpack://Miew/./src/gfx/colorers/ConditionalColorer.js","webpack://Miew/./src/gfx/colorers/ConformationColorer.js","webpack://Miew/./src/gfx/colorers/TemperatureColorer.js","webpack://Miew/./src/gfx/colorers/OccupancyColorer.js","webpack://Miew/./src/gfx/colorers/HydrophobicityColorer.js","webpack://Miew/./src/gfx/colorers/MoleculeColorer.js","webpack://Miew/./src/gfx/colorers/CarbonColorer.js","webpack://Miew/./src/gfx/colorers.js","webpack://Miew/./src/gfx/materials.js","webpack://Miew/./src/gfx/meshutils.js","webpack://Miew/./src/gfx/Representation.js","webpack://Miew/./src/ComplexVisualEdit.js","webpack://Miew/./src/ComplexVisual.js","webpack://Miew/./src/gfx/shaders/VolumeMaterial.js","webpack://Miew/./src/gfx/VolumeMesh.js","webpack://Miew/./src/gfx/VolumeBounds.js","webpack://Miew/./src/gfx/VolumeFarPlane.js","webpack://Miew/./src/VolumeVisual.js","webpack://Miew/./src/io/loaders/LoaderList.js","webpack://Miew/./src/io/loaders/Loader.js","webpack://Miew/./src/io/loaders/FileLoader.js","webpack://Miew/./src/io/loaders/XHRLoader.js","webpack://Miew/./src/io/loaders/ImmediateLoader.js","webpack://Miew/./src/io/loaders.js","webpack://Miew/./src/io/parsers/ParserList.js","webpack://Miew/./src/io/parsers/Parser.js","webpack://Miew/./src/io/parsers/pdb/Remark290.js","webpack://Miew/./src/io/parsers/pdb/Remark350.js","webpack://Miew/./src/io/parsers/PDBStream.js","webpack://Miew/./src/io/parsers/PDBParser.js","webpack://Miew/./src/io/parsers/CMLParser.js","webpack://Miew/./src/io/parsers/MMTFParser.js","webpack://Miew/./src/io/parsers/ParsingError.js","webpack://Miew/./src/io/parsers/readCIF.js","webpack://Miew/./src/io/parsers/CIFParser.js","webpack://Miew/./src/io/parsers/VolumeModel.js","webpack://Miew/./src/io/parsers/CCP4Parser.js","webpack://Miew/./src/io/parsers/XYZParser.js","webpack://Miew/./src/io/parsers/PubChemParser.js","webpack://Miew/./src/io/parsers/SDFStream.js","webpack://Miew/./src/io/parsers/SDFParser.js","webpack://Miew/./src/io/parsers/DSN6Parser.js","webpack://Miew/./src/io/parsers/GROReader.js","webpack://Miew/./src/io/parsers/GROParser.js","webpack://Miew/./src/io/parsers/MOL2Parser.js","webpack://Miew/./src/io/parsers.js","webpack://Miew/./src/io/exporters/ExporterList.js","webpack://Miew/./src/io/exporters/Exporter.js","webpack://Miew/./src/io/exporters/PDBResult.js","webpack://Miew/./src/io/exporters/PDBExporter.js","webpack://Miew/./src/io/exporters/fbx/FBXModel.js","webpack://Miew/./src/io/exporters/fbx/FBXGeometry.js","webpack://Miew/./src/io/exporters/fbx/FBX1CGeometry.js","webpack://Miew/./src/io/exporters/fbx/FBX2CCylinder.js","webpack://Miew/./src/io/exporters/fbx/FBXInfoExtractor.js","webpack://Miew/./src/io/exporters/fbx/FBXResult.js","webpack://Miew/./src/io/exporters/FBXExporter.js","webpack://Miew/./src/io/exporters.js","webpack://Miew/./src/io/io.js","webpack://Miew/./src/gfx/CSS2DRenderer.js","webpack://Miew/./src/utils/getTopWindow.js","webpack://Miew/./src/ui/ObjectControls.js","webpack://Miew/./src/ui/Picker.js","webpack://Miew/./src/gfx/Axes.js","webpack://Miew/./src/gfx/FrameInfo.js","webpack://Miew/./src/gfx/objects/SceneObject.js","webpack://Miew/./src/gfx/objects/LinesObj.js","webpack://Miew/./src/gfx/shaders/OutlineMaterial.js","webpack://Miew/./src/gfx/shaders/FXAAMaterial.js","webpack://Miew/./src/gfx/shaders/AOMaterial.js","webpack://Miew/./src/gfx/shaders/AOHorBlurMaterial.js","webpack://Miew/./src/gfx/shaders/AOVertBlurWithBlendMaterial.js","webpack://Miew/./src/gfx/shaders/AnaglyphMaterial.js","webpack://Miew/./src/gfx/ViewInterpolator.js","webpack://Miew/./src/utils/Cookies.js","webpack://Miew/./src/gfx/vr/createWebVRButton.js","webpack://Miew/./src/gfx/vr/WebVRPoC.js","webpack://Miew/./src/Miew.js","webpack://Miew/./src/utils/MiewCLIHelp.js","webpack://Miew/./src/Miew-cli.js","webpack://Miew/./src/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"lodash\"), require(\"three\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"lodash\", \"three\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Miew\"] = factory(require(\"lodash\"), require(\"three\"));\n\telse\n\t\troot[\"Miew\"] = factory(root[\"_\"], root[\"THREE\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE__535__, __WEBPACK_EXTERNAL_MODULE__698__) => {\nreturn ","/* eslint-disable */\r\n// DO NOT EDIT! Automatically generated from .jison\r\n/* parser generated by jison 0.4.18 */\r\n/*\r\n Returns a Parser object of the following structure:\r\n\r\n Parser: {\r\n yy: {}\r\n }\r\n\r\n Parser.prototype: {\r\n yy: {},\r\n trace: function(),\r\n symbols_: {associative list: name ==> number},\r\n terminals_: {associative list: number ==> name},\r\n productions_: [...],\r\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\r\n table: [...],\r\n defaultActions: {...},\r\n parseError: function(str, hash),\r\n parse: function(input),\r\n\r\n lexer: {\r\n EOF: 1,\r\n parseError: function(str, hash),\r\n setInput: function(input),\r\n input: function(),\r\n unput: function(str),\r\n more: function(),\r\n less: function(n),\r\n pastInput: function(),\r\n upcomingInput: function(),\r\n showPosition: function(),\r\n test_match: function(regex_match_array, rule_index),\r\n next: function(),\r\n lex: function(),\r\n begin: function(condition),\r\n popState: function(),\r\n _currentRules: function(),\r\n topState: function(),\r\n pushState: function(condition),\r\n\r\n options: {\r\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\r\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\r\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\r\n },\r\n\r\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\r\n rules: [...],\r\n conditions: {associative list: name ==> set},\r\n }\r\n }\r\n\r\n\r\n token location info (@$, _$, etc.): {\r\n first_line: n,\r\n last_line: n,\r\n first_column: n,\r\n last_column: n,\r\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\r\n }\r\n\r\n\r\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\r\n text: (matched text)\r\n token: (the produced terminal token, if any)\r\n line: (yylineno)\r\n }\r\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\r\n loc: (yylloc)\r\n expected: (string describing the set of expected tokens)\r\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\r\n }\r\n*/\r\nvar parser = (function(){\r\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,60],$V1=[1,62],$V2=[1,63],$V3=[1,65],$V4=[1,66],$V5=[1,67],$V6=[1,68],$V7=[1,69],$V8=[1,80],$V9=[1,72],$Va=[1,73],$Vb=[1,74],$Vc=[1,75],$Vd=[1,99],$Ve=[1,76],$Vf=[1,100],$Vg=[1,79],$Vh=[1,51],$Vi=[1,81],$Vj=[1,82],$Vk=[1,84],$Vl=[1,83],$Vm=[1,85],$Vn=[1,96],$Vo=[1,97],$Vp=[1,98],$Vq=[1,86],$Vr=[1,87],$Vs=[1,64],$Vt=[1,70],$Vu=[1,71],$Vv=[1,77],$Vw=[1,78],$Vx=[1,53],$Vy=[1,54],$Vz=[1,55],$VA=[1,61],$VB=[1,88],$VC=[1,89],$VD=[1,90],$VE=[1,91],$VF=[1,92],$VG=[1,93],$VH=[1,94],$VI=[1,95],$VJ=[1,101],$VK=[1,102],$VL=[1,103],$VM=[1,104],$VN=[1,105],$VO=[1,56],$VP=[1,57],$VQ=[1,58],$VR=[1,59],$VS=[1,115],$VT=[1,111],$VU=[1,114],$VV=[1,112],$VW=[1,113],$VX=[1,118],$VY=[1,117],$VZ=[1,134],$V_=[1,149],$V$=[1,150],$V01=[1,157],$V11=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],$V21=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,71,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],$V31=[5,6,7,9,13,15,17,18,19,20,23,25,26,27,30,33,34,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,82,83,84,85,86,87,88,89,90,91,92,93,94,95],$V41=[5,70,72],$V51=[5,74],$V61=[71,101];\r\nvar parser = {trace: function trace () { },\r\nyy: {},\r\nsymbols_: {\"error\":2,\"Program\":3,\"Command\":4,\"EOF\":5,\"RESET\":6,\"BUILD\":7,\"ALL\":8,\"HELP\":9,\"Path\":10,\"MOTM\":11,\"OneArgCommand\":12,\"GET\":13,\"STRING\":14,\"SET\":15,\"Value\":16,\"SET_SAVE\":17,\"SET_RESTORE\":18,\"SET_RESET\":19,\"PRESET\":20,\"AddRepresentation\":21,\"EditRepresentation\":22,\"REMOVE\":23,\"RepresentationReference\":24,\"HIDE\":25,\"SHOW\":26,\"LIST\":27,\"EXPAND_KEY\":28,\"SELECTOR_KEY\":29,\"SELECT\":30,\"AS\":31,\"WordAll\":32,\"SELECTOR\":33,\"WITHIN\":34,\"NUMBER\":35,\"OF\":36,\"MATERIAL\":37,\"IDENTIFIER\":38,\"ModeCMD\":39,\"ColorCMD\":40,\"VIEW\":41,\"BASE_64\":42,\"UNIT\":43,\"DSSP\":44,\"SCALE\":45,\"ROTATE\":46,\"AxesList\":47,\"TRANSLATE\":48,\"CENTER\":49,\"GetURLBranch\":50,\"Screenshot\":51,\"LINE\":52,\"ArgList\":53,\"LISTOBJ\":54,\"REMOVEOBJ\":55,\"URL\":56,\"VIEW_KEY\":57,\"SCREENSHOT\":58,\"LOAD\":59,\"Url\":60,\"FILE_KEY\":61,\"ADD\":62,\"Description\":63,\"REP\":64,\"MODE\":65,\"COLOR\":66,\"Descriptor\":67,\"RepresentationOwnProperty\":68,\"RepresentationOwnPropertyOpts\":69,\"DESC_KEY\":70,\"=\":71,\"DESC_KEY_OPTS\":72,\"AxesArg\":73,\"DESC_KEY_AXES\":74,\"Arg\":75,\"PathWoDescKey\":76,\"HEX\":77,\"BOOL\":78,\"Word\":79,\"CommandSetWoDESC_KEY\":80,\"DescKeys\":81,\"CLEAR\":82,\"FILE_LIST\":83,\"FILE_REGISTER\":84,\"FILE_DELETE\":85,\"PRESET_ADD\":86,\"PRESET_DELETE\":87,\"PRESET_UPDATE\":88,\"PRESET_RENAME\":89,\"PRESET_OPEN\":90,\"CREATE_SCENARIO\":91,\"RESET_SCENARIO\":92,\"DELETE_SCENARIO\":93,\"ADD_SCENARIO_ITEM\":94,\"LIST_SCENARIO\":95,\"PDB_KEY\":96,\"DELAY_KEY\":97,\"PRST_KEY\":98,\"DESCRIPTION_KEY\":99,\"CommandSet\":100,\".\":101,\"PresetPath\":102,\"/\":103,\"HexOrNumber\":104,\"$accept\":0,\"$end\":1},\r\nterminals_: {2:\"error\",5:\"EOF\",6:\"RESET\",7:\"BUILD\",8:\"ALL\",9:\"HELP\",11:\"MOTM\",13:\"GET\",14:\"STRING\",15:\"SET\",17:\"SET_SAVE\",18:\"SET_RESTORE\",19:\"SET_RESET\",20:\"PRESET\",23:\"REMOVE\",25:\"HIDE\",26:\"SHOW\",27:\"LIST\",28:\"EXPAND_KEY\",29:\"SELECTOR_KEY\",30:\"SELECT\",31:\"AS\",33:\"SELECTOR\",34:\"WITHIN\",35:\"NUMBER\",36:\"OF\",37:\"MATERIAL\",38:\"IDENTIFIER\",41:\"VIEW\",42:\"BASE_64\",43:\"UNIT\",44:\"DSSP\",45:\"SCALE\",46:\"ROTATE\",48:\"TRANSLATE\",49:\"CENTER\",52:\"LINE\",54:\"LISTOBJ\",55:\"REMOVEOBJ\",56:\"URL\",57:\"VIEW_KEY\",58:\"SCREENSHOT\",59:\"LOAD\",61:\"FILE_KEY\",62:\"ADD\",64:\"REP\",65:\"MODE\",66:\"COLOR\",70:\"DESC_KEY\",71:\"=\",72:\"DESC_KEY_OPTS\",74:\"DESC_KEY_AXES\",77:\"HEX\",78:\"BOOL\",82:\"CLEAR\",83:\"FILE_LIST\",84:\"FILE_REGISTER\",85:\"FILE_DELETE\",86:\"PRESET_ADD\",87:\"PRESET_DELETE\",88:\"PRESET_UPDATE\",89:\"PRESET_RENAME\",90:\"PRESET_OPEN\",91:\"CREATE_SCENARIO\",92:\"RESET_SCENARIO\",93:\"DELETE_SCENARIO\",94:\"ADD_SCENARIO_ITEM\",95:\"LIST_SCENARIO\",96:\"PDB_KEY\",97:\"DELAY_KEY\",98:\"PRST_KEY\",99:\"DESCRIPTION_KEY\",101:\".\",103:\"/\"},\r\nproductions_: [0,[3,2],[3,1],[4,1],[4,1],[4,2],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,3],[4,3],[4,1],[4,1],[4,1],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,2],[4,2],[4,1],[4,2],[4,2],[4,2],[4,4],[4,2],[4,6],[4,2],[4,1],[4,1],[4,1],[4,2],[4,2],[4,1],[4,2],[4,1],[4,2],[4,2],[4,2],[4,1],[4,2],[4,1],[4,1],[4,3],[4,3],[4,4],[4,4],[4,1],[4,2],[50,1],[50,2],[50,2],[50,3],[50,3],[51,1],[51,2],[51,3],[12,2],[12,2],[12,2],[21,1],[21,2],[21,2],[21,3],[22,2],[22,3],[39,2],[39,3],[40,2],[40,3],[24,1],[24,1],[63,1],[63,2],[63,3],[63,4],[67,1],[67,1],[67,2],[68,3],[69,3],[47,1],[47,2],[73,2],[53,1],[53,2],[75,3],[16,1],[16,1],[16,1],[16,1],[16,1],[79,1],[79,1],[32,1],[32,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[100,1],[100,1],[76,1],[76,3],[76,3],[10,1],[10,1],[10,3],[10,3],[10,3],[60,1],[102,1],[102,3],[104,1],[104,1]],\r\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\r\n/* this == yyval */\r\n\r\nvar $0 = $$.length - 1;\r\nswitch (yystate) {\r\ncase 1:\r\n return $$[$0-1]; \r\nbreak;\r\ncase 3:\r\nthis.$ = yy.miew.reset(false); yy.ClearContext(); yy.miew.resetReps(\"empty\");\r\nbreak;\r\ncase 4:\r\nthis.$ = yy.miew.rebuild();\r\nbreak;\r\ncase 5:\r\nthis.$ = yy.miew.rebuildAll(); yy.miew.rebuild();\r\nbreak;\r\ncase 6:\r\nthis.$ = yy.echo(yy.utils.help().toString());\r\nbreak;\r\ncase 7:\r\nthis.$ = yy.echo(yy.utils.help($$[$0]).toString());\r\nbreak;\r\ncase 8:\r\nthis.$ = yy.miew.motm();\r\nbreak;\r\ncase 10: case 11:\r\nthis.$ = yy.utils.propagateProp($$[$0]); yy.echo(yy.miew.get($$[$0]).toString());\r\nbreak;\r\ncase 12: case 13:\r\nthis.$ = yy.miew.set($$[$0-1], yy.utils.propagateProp($$[$0-1], $$[$0]));;\r\nbreak;\r\ncase 14:\r\nthis.$ = yy.miew.saveSettings();;\r\nbreak;\r\ncase 15:\r\nthis.$ = yy.miew.restoreSettings();;\r\nbreak;\r\ncase 16:\r\nthis.$ = yy.miew.resetSettings();;\r\nbreak;\r\ncase 17:\r\nthis.$ = yy.miew.resetReps();\r\nbreak;\r\ncase 18:\r\nthis.$ = yy.miew.applyPreset($$[$0]);\r\nbreak;\r\ncase 21:\r\nthis.$ = yy.miew.repRemove($$[$0]); yy.representations.remove($$[$0]);\r\nbreak;\r\ncase 22:\r\nthis.$ = yy.miew.repHide($$[$0]);\r\nbreak;\r\ncase 23:\r\nthis.$ = yy.miew.repHide($$[$0], false);\r\nbreak;\r\ncase 24:\r\nthis.$ = yy.echo(yy.utils.listRep(yy.miew, yy.representations, $$[$0], '-e'));\r\nbreak;\r\ncase 25:\r\nthis.$ = yy.echo(yy.utils.list(yy.miew, yy.representations));\r\nbreak;\r\ncase 26:\r\nthis.$ = yy.echo(yy.utils.list(yy.miew, yy.representations, $$[$0]));\r\nbreak;\r\ncase 27:\r\nthis.$ = yy.echo(yy.utils.listSelector(yy.miew, yy.Context));\r\nbreak;\r\ncase 28:\r\nthis.$ = yy.miew.select(yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0], true));\r\nbreak;\r\ncase 29:\r\nthis.$ = yy.Context[$$[$0].toLowerCase()] = yy.utils.checkArg($$[$0-3].toLowerCase(), $$[$0-2], true); yy.miew.select(yy.Context[$$[$0].toLowerCase()]);\r\nbreak;\r\ncase 30:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {selector : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0])});\r\nbreak;\r\ncase 31:\r\nthis.$ = yy.Context[$$[$0].toLowerCase()] = yy.miew.within(yy.utils.checkArg(\"select\", $$[$0-2], true), Number($$[$0-4]));\r\nbreak;\r\ncase 32:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {material : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 35:\r\nthis.$ = yy.echo(yy.miew.view());\r\nbreak;\r\ncase 36: case 37:\r\nthis.$ = yy.miew.view($$[$0]);\r\nbreak;\r\ncase 38:\r\nthis.$ = yy.echo(yy.miew.changeUnit());\r\nbreak;\r\ncase 39:\r\nthis.$ = yy.echo(yy.miew.changeUnit($$[$0]));\r\nbreak;\r\ncase 40:\r\nthis.$ = yy.miew.dssp();\r\nbreak;\r\ncase 41:\r\nthis.$ = yy.miew.scale($$[$0]);\r\nbreak;\r\ncase 42:\r\n for (var i = 0, n = $$[$0].length; i < n; i++) {yy.miew.rotate($$[$0][i]['x'] * Math.PI / 180.0, $$[$0][i]['y'] * Math.PI / 180.0, $$[$0][i]['z'] * Math.PI / 180.0)} \r\nbreak;\r\ncase 43:\r\n for (var i = 0, n = $$[$0].length; i < n; i++) {yy.miew.translate($$[$0][i]['x'] || 0, $$[$0][i]['y'] || 0, $$[$0][i]['z'] || 0)} \r\nbreak;\r\ncase 44:\r\nthis.$ = yy.miew.center();\r\nbreak;\r\ncase 45:\r\nthis.$ = yy.miew.center($$[$0]);\r\nbreak;\r\ncase 48: case 49:\r\nthis.$ = yy.miew.addObject({type: 'line', params: [$$[$0-1], $$[$0]]}, true);\r\nbreak;\r\ncase 50: case 51:\r\nthis.$ = yy.miew.addObject({type: 'line', params: [$$[$0-2], $$[$0-1]], opts:$$[$0].toJSO(yy.utils, 'objects', 'line')}, true);\r\nbreak;\r\ncase 52:\r\nthis.$ = yy.echo(yy.utils.listObjs(yy.miew));\r\nbreak;\r\ncase 53:\r\nthis.$ = yy.miew.removeObject($$[$0]);\r\nbreak;\r\ncase 54:\r\nthis.$ = yy.echo(yy.miew.getURL({view: false, settings: false}));\r\nbreak;\r\ncase 55:\r\nthis.$ = yy.echo(yy.miew.getURL({view: false, settings: true}));\r\nbreak;\r\ncase 56:\r\nthis.$ = yy.echo(yy.miew.getURL({view: true, settings: false}));\r\nbreak;\r\ncase 57: case 58:\r\nthis.$ = yy.echo(yy.miew.getURL({view: true, settings: true}));\r\nbreak;\r\ncase 59:\r\nthis.$ = yy.miew.screenshotSave();\r\nbreak;\r\ncase 60:\r\nthis.$ = yy.miew.screenshotSave('', Number($$[$0]));\r\nbreak;\r\ncase 61:\r\nthis.$ = yy.miew.screenshotSave('', Number($$[$0-1]), Number($$[$0]));\r\nbreak;\r\ncase 62: case 63: case 64:\r\nthis.$ = yy.utils.load(yy.miew, $$[$0]); yy.representations.clear();\r\nbreak;\r\ncase 65:\r\nthis.$ = yy.echo(yy.representations.add(yy.miew.repAdd()));\r\nbreak;\r\ncase 66:\r\nthis.$ = yy.echo(yy.representations.add($$[$0], yy.miew.repAdd()));\r\nbreak;\r\ncase 67:\r\nthis.$ = yy.echo(yy.representations.add(yy.miew.repAdd($$[$0])));\r\nbreak;\r\ncase 68:\r\nthis.$ = yy.echo(yy.representations.add($$[$0-1], yy.miew.repAdd($$[$0])));\r\nbreak;\r\ncase 69:\r\nthis.$ = yy.miew.rep($$[$0]); yy.miew.repCurrent($$[$0]);\r\nbreak;\r\ncase 70:\r\nthis.$ = yy.miew.rep($$[$0-1], $$[$0]); yy.miew.repCurrent($$[$0-1]);\r\nbreak;\r\ncase 71:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {mode : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 72:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {mode : new Array(yy.utils.checkArg($$[$0-2].toLowerCase(), $$[$0-1].toUpperCase()), $$[$0].toJSO(yy.utils, $$[$0-2], $$[$0-1].toUpperCase()))});\r\nbreak;\r\ncase 73:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {colorer : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 74:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {colorer : new Array(yy.utils.checkArg($$[$0-2].toLowerCase(), $$[$0-1].toUpperCase()), $$[$0].toJSO(yy.utils, $$[$0-2], $$[$0-1].toUpperCase()))});\r\nbreak;\r\ncase 75:\r\nthis.$ = Number(yy.representations.get($$[$0]));\r\nbreak;\r\ncase 76: case 92:\r\nthis.$ = Number($$[$0]);\r\nbreak;\r\ncase 77:\r\nthis.$ = $$[$0];\r\nbreak;\r\ncase 78:\r\nthis.$ = yy._.assign($$[$0-1], $$[$0]);\r\nbreak;\r\ncase 79:\r\nthis.$ = yy._.assign($$[$0-2], $$[$0-1], $$[$0]);\r\nbreak;\r\ncase 80:\r\nthis.$ = yy._.assign($$[$0-3], $$[$0-2], $$[$0-1], $$[$0]);\r\nbreak;\r\ncase 81: case 82:\r\nthis.$ = yy.CreateObjectPair($$[$0].key, $$[$0].val);\r\nbreak;\r\ncase 83:\r\nthis.$ = yy.CreateObjectPair($$[$0-1].key, new Array($$[$0-1].val, $$[$0].toJSO(yy.utils, $$[$0-1].key, $$[$0-1].val)));\r\nbreak;\r\ncase 84: case 85:\r\nthis.$ = Object.create({'key': yy.keyRemap($$[$0-2]), 'val': yy.utils.checkArg($$[$0-2], $$[$0])});\r\nbreak;\r\ncase 86:\r\nthis.$ = [$$[$0]];\r\nbreak;\r\ncase 87:\r\nthis.$ = $$[$0-1].concat($$[$0]);\r\nbreak;\r\ncase 88:\r\nthis.$ = yy.CreateObjectPair($$[$0-1].toLowerCase(), Number($$[$0]));\r\nbreak;\r\ncase 89:\r\nthis.$ = new yy.ArgList($$[$0]);\r\nbreak;\r\ncase 90:\r\nthis.$ = $$[$0-1].append($$[$0]);\r\nbreak;\r\ncase 91:\r\nthis.$ = new yy.Arg($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 93:\r\nthis.$ = parseInt($$[$0]);\r\nbreak;\r\ncase 94:\r\nthis.$ = JSON.parse($$[$0]);\r\nbreak;\r\ncase 95: case 96:\r\nthis.$ = String($$[$0]);\r\nbreak;\r\ncase 157: case 158: case 161: case 162: case 163:\r\nthis.$ = $$[$0-2] + $$[$0-1] + $$[$0] //cause of could be color word in path;\r\nbreak;\r\ncase 166:\r\nthis.$ = $$[$0-2] = $$[$0-2] + $$[$0-1] + $$[$0];\r\nbreak;\r\n}\r\n},\r\ntable: [{3:1,4:2,5:[1,3],6:[1,4],7:[1,5],9:[1,6],11:[1,7],12:8,13:[1,9],15:[1,10],17:[1,11],18:[1,12],19:[1,13],20:[1,14],21:15,22:16,23:[1,17],25:[1,18],26:[1,19],27:[1,20],30:[1,21],33:[1,22],34:[1,23],37:[1,24],39:25,40:26,41:[1,27],43:[1,28],44:[1,29],45:[1,30],46:[1,31],48:[1,32],49:[1,33],50:34,51:35,52:[1,36],54:[1,37],55:[1,38],56:[1,44],58:[1,45],59:[1,39],62:[1,40],64:[1,41],65:[1,42],66:[1,43]},{1:[3]},{5:[1,46]},{1:[2,2]},{5:[2,3]},{5:[2,4],8:[1,47]},{5:[2,6],6:$V0,7:$V1,9:$V2,10:48,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,8]},{5:[2,9]},{6:$V0,7:$V1,9:$V2,10:106,13:$V3,14:[1,107],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{6:$V0,7:$V1,9:$V2,10:108,13:$V3,14:[1,109],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,14]},{5:[2,15]},{5:[2,16]},{5:[2,17],14:$VS,16:110,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,19]},{5:[2,20]},{24:116,35:$VX,38:$VY},{24:119,35:$VX,38:$VY},{24:120,35:$VX,38:$VY},{5:[2,25],24:121,28:[1,122],29:[1,123],35:$VX,38:$VY},{14:[1,124]},{14:[1,125]},{35:[1,126]},{38:[1,127]},{5:[2,33]},{5:[2,34]},{5:[2,35],14:[1,128],42:[1,129]},{5:[2,38],35:[1,130]},{5:[2,40]},{35:[1,131]},{47:132,73:133,74:$VZ},{47:135,73:133,74:$VZ},{5:[2,44],14:[1,136]},{5:[2,46]},{5:[2,47]},{6:$V0,7:$V1,9:$V2,10:138,13:$V3,14:[1,137],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,52]},{35:[1,139]},{14:[1,143],38:[1,141],60:140,61:[1,142]},{5:[2,65],38:[1,144],63:145,67:146,68:147,69:148,70:$V_,72:$V$},{24:151,35:$VX,38:$VY},{38:[1,152]},{38:[1,153]},{5:[2,54],29:[1,154],57:[1,155]},{5:[2,59],35:[1,156]},{1:[2,1]},{5:[2,5]},{5:[2,7],101:$V01},o($V11,[2,159]),o($V11,[2,160]),o($V21,[2,97]),o($V21,[2,98]),o($V11,[2,147]),o($V11,[2,148]),o($V11,[2,149]),o($V11,[2,150]),o($V11,[2,151]),o($V11,[2,152]),o($V11,[2,153]),o($V21,[2,101]),o($V21,[2,102]),o($V21,[2,103]),o($V21,[2,104]),o($V21,[2,105]),o($V21,[2,106]),o($V21,[2,107]),o($V21,[2,108]),o($V21,[2,109]),o($V21,[2,110]),o($V21,[2,111]),o($V21,[2,112]),o($V21,[2,113]),o($V21,[2,114]),o($V21,[2,115]),o($V21,[2,116]),o($V21,[2,117]),o($V21,[2,118]),o($V21,[2,119]),o($V21,[2,120]),o($V21,[2,121]),o($V21,[2,122]),o($V21,[2,123]),o($V21,[2,124]),o($V21,[2,125]),o($V21,[2,126]),o($V21,[2,127]),o($V21,[2,128]),o($V21,[2,129]),o($V21,[2,130]),o($V21,[2,131]),o($V21,[2,132]),o($V21,[2,133]),o($V21,[2,134]),o($V21,[2,135]),o($V21,[2,136]),o($V21,[2,137]),o($V21,[2,138]),o($V21,[2,139]),o($V21,[2,140]),o($V21,[2,141]),o($V21,[2,142]),o($V21,[2,143]),o($V21,[2,144]),o($V21,[2,145]),o($V21,[2,146]),{5:[2,10],101:$V01},{5:[2,11]},{14:$VS,16:158,35:$VT,38:$VU,77:$VV,78:$VW,101:$V01},{14:$VS,16:159,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,18]},o($V31,[2,92]),o($V31,[2,93]),o($V31,[2,94]),o($V31,[2,95]),o($V31,[2,96]),{5:[2,21]},o($V41,[2,75]),o($V41,[2,76]),{5:[2,22]},{5:[2,23]},{5:[2,24]},{5:[2,26]},{5:[2,27]},{5:[2,28],31:[1,160]},{5:[2,30]},{36:[1,161]},{5:[2,32]},{5:[2,36]},{5:[2,37]},{5:[2,39]},{5:[2,41]},{5:[2,42],73:162,74:$VZ},o($V51,[2,86]),{35:[1,163]},{5:[2,43],73:162,74:$VZ},{5:[2,45]},{14:[1,164]},{6:$V0,7:$V1,9:$V2,10:165,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR,101:$V01},{5:[2,53]},{5:[2,62]},{5:[2,63]},{5:[2,64]},{5:[2,164]},{5:[2,66],63:166,67:146,68:147,69:148,70:$V_,72:$V$},{5:[2,67]},{5:[2,77],67:167,68:147,69:148,70:$V_,72:$V$},o($V41,[2,81]),o($V41,[2,82],{80:52,53:168,75:169,76:170,79:171,6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN}),{71:[1,172]},{71:[1,173]},{5:[2,69],63:174,67:146,68:147,69:148,70:$V_,72:$V$},{5:[2,71],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:175,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,73],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:176,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,55],57:[1,177]},{5:[2,56],29:[1,178]},{5:[2,60],35:[1,179]},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,35:[1,181],37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:180,80:52,81:182,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,12]},{5:[2,13]},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,32:183,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:184,80:52,81:185,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{14:[1,186]},o($V51,[2,87]),o($V51,[2,88]),{5:[2,48],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:187,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,49],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:188,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,101:$V01},{5:[2,68]},{5:[2,78],67:189,68:147,69:148,70:$V_,72:$V$},o($V41,[2,83],{80:52,76:170,79:171,75:190,6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN}),o($V31,[2,89]),{71:[1,191],101:[1,192]},o($V61,[2,156]),{14:$VS,16:193,35:$VT,38:$VU,77:$VV,78:$VW},{14:$VS,16:194,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,70]},{5:[2,72],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,74],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,57]},{5:[2,58]},{5:[2,61]},o($V11,[2,161]),o($V11,[2,162]),o($V11,[2,163]),{5:[2,29]},{5:[2,99]},{5:[2,100]},{31:[1,195]},{5:[2,50],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,51],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,79],67:196,68:147,69:148,70:$V_,72:$V$},o($V31,[2,90]),{14:$VS,16:197,35:$VT,38:$VU,77:$VV,78:$VW},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,35:[1,199],37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,79:198,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},o($V41,[2,84]),o($V31,[2,85]),{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,32:200,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:184,80:52,81:185,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,80]},o($V31,[2,91]),o($V61,[2,157]),o($V61,[2,158]),{5:[2,31]}],\r\ndefaultActions: {3:[2,2],4:[2,3],7:[2,8],8:[2,9],11:[2,14],12:[2,15],13:[2,16],15:[2,19],16:[2,20],25:[2,33],26:[2,34],29:[2,40],34:[2,46],35:[2,47],37:[2,52],46:[2,1],47:[2,5],107:[2,11],110:[2,18],116:[2,21],119:[2,22],120:[2,23],121:[2,24],122:[2,26],123:[2,27],125:[2,30],127:[2,32],128:[2,36],129:[2,37],130:[2,39],131:[2,41],136:[2,45],139:[2,53],140:[2,62],141:[2,63],142:[2,64],143:[2,164],145:[2,67],158:[2,12],159:[2,13],166:[2,68],174:[2,70],177:[2,57],178:[2,58],179:[2,61],183:[2,29],184:[2,99],185:[2,100],196:[2,80],200:[2,31]},\r\nparseError: function parseError (str, hash) {\r\n if (hash.recoverable) {\r\n this.trace(str);\r\n } else {\r\n var error = new Error(str);\r\n error.hash = hash;\r\n throw error;\r\n }\r\n},\r\nparse: function parse(input) {\r\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\r\n var args = lstack.slice.call(arguments, 1);\r\n var lexer = Object.create(this.lexer);\r\n var sharedState = { yy: {} };\r\n for (var k in this.yy) {\r\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\r\n sharedState.yy[k] = this.yy[k];\r\n }\r\n }\r\n lexer.setInput(input, sharedState.yy);\r\n sharedState.yy.lexer = lexer;\r\n sharedState.yy.parser = this;\r\n if (typeof lexer.yylloc == 'undefined') {\r\n lexer.yylloc = {};\r\n }\r\n var yyloc = lexer.yylloc;\r\n lstack.push(yyloc);\r\n var ranges = lexer.options && lexer.options.ranges;\r\n if (typeof sharedState.yy.parseError === 'function') {\r\n this.parseError = sharedState.yy.parseError;\r\n } else {\r\n this.parseError = Object.getPrototypeOf(this).parseError;\r\n }\r\n function popStack(n) {\r\n stack.length = stack.length - 2 * n;\r\n vstack.length = vstack.length - n;\r\n lstack.length = lstack.length - n;\r\n }\r\n function lex() {\r\n var token;\r\n token = tstack.pop() || lexer.lex() || EOF;\r\n if (typeof token !== 'number') {\r\n if (token instanceof Array) {\r\n tstack = token;\r\n token = tstack.pop();\r\n }\r\n token = self.symbols_[token] || token;\r\n }\r\n return token;\r\n }\r\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\r\n while (true) {\r\n state = stack[stack.length - 1];\r\n if (this.defaultActions[state]) {\r\n action = this.defaultActions[state];\r\n } else {\r\n if (symbol === null || typeof symbol == 'undefined') {\r\n symbol = lex();\r\n }\r\n action = table[state] && table[state][symbol];\r\n }\r\n if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n var errStr = '';\r\n expected = [];\r\n for (p in table[state]) {\r\n if (this.terminals_[p] && p > TERROR) {\r\n expected.push('\\'' + this.terminals_[p] + '\\'');\r\n }\r\n }\r\n if (lexer.showPosition) {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\r\n } else {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\r\n }\r\n this.parseError(errStr, {\r\n text: lexer.match,\r\n token: this.terminals_[symbol] || symbol,\r\n line: lexer.yylineno,\r\n loc: yyloc,\r\n expected: expected\r\n });\r\n }\r\n if (action[0] instanceof Array && action.length > 1) {\r\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\r\n }\r\n switch (action[0]) {\r\n case 1:\r\n stack.push(symbol);\r\n vstack.push(lexer.yytext);\r\n lstack.push(lexer.yylloc);\r\n stack.push(action[1]);\r\n symbol = null;\r\n if (!preErrorSymbol) {\r\n yyleng = lexer.yyleng;\r\n yytext = lexer.yytext;\r\n yylineno = lexer.yylineno;\r\n yyloc = lexer.yylloc;\r\n if (recovering > 0) {\r\n recovering--;\r\n }\r\n } else {\r\n symbol = preErrorSymbol;\r\n preErrorSymbol = null;\r\n }\r\n break;\r\n case 2:\r\n len = this.productions_[action[1]][1];\r\n yyval.$ = vstack[vstack.length - len];\r\n yyval._$ = {\r\n first_line: lstack[lstack.length - (len || 1)].first_line,\r\n last_line: lstack[lstack.length - 1].last_line,\r\n first_column: lstack[lstack.length - (len || 1)].first_column,\r\n last_column: lstack[lstack.length - 1].last_column\r\n };\r\n if (ranges) {\r\n yyval._$.range = [\r\n lstack[lstack.length - (len || 1)].range[0],\r\n lstack[lstack.length - 1].range[1]\r\n ];\r\n }\r\n r = this.performAction.apply(yyval, [\r\n yytext,\r\n yyleng,\r\n yylineno,\r\n sharedState.yy,\r\n action[1],\r\n vstack,\r\n lstack\r\n ].concat(args));\r\n if (typeof r !== 'undefined') {\r\n return r;\r\n }\r\n if (len) {\r\n stack = stack.slice(0, -1 * len * 2);\r\n vstack = vstack.slice(0, -1 * len);\r\n lstack = lstack.slice(0, -1 * len);\r\n }\r\n stack.push(this.productions_[action[1]][0]);\r\n vstack.push(yyval.$);\r\n lstack.push(yyval._$);\r\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\r\n stack.push(newState);\r\n break;\r\n case 3:\r\n return true;\r\n }\r\n }\r\n return true;\r\n}};\r\n\r\n\r\n/* generated by jison-lex 0.3.4 */\r\nvar lexer = (function(){\r\nvar lexer = ({\r\n\r\nEOF:1,\r\n\r\nparseError:function parseError(str, hash) {\r\n if (this.yy.parser) {\r\n this.yy.parser.parseError(str, hash);\r\n } else {\r\n throw new Error(str);\r\n }\r\n },\r\n\r\n// resets the lexer, sets new input\r\nsetInput:function (input, yy) {\r\n this.yy = yy || this.yy || {};\r\n this._input = input;\r\n this._more = this._backtrack = this.done = false;\r\n this.yylineno = this.yyleng = 0;\r\n this.yytext = this.matched = this.match = '';\r\n this.conditionStack = ['INITIAL'];\r\n this.yylloc = {\r\n first_line: 1,\r\n first_column: 0,\r\n last_line: 1,\r\n last_column: 0\r\n };\r\n if (this.options.ranges) {\r\n this.yylloc.range = [0,0];\r\n }\r\n this.offset = 0;\r\n return this;\r\n },\r\n\r\n// consumes and returns one char from the input\r\ninput:function () {\r\n var ch = this._input[0];\r\n this.yytext += ch;\r\n this.yyleng++;\r\n this.offset++;\r\n this.match += ch;\r\n this.matched += ch;\r\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno++;\r\n this.yylloc.last_line++;\r\n } else {\r\n this.yylloc.last_column++;\r\n }\r\n if (this.options.ranges) {\r\n this.yylloc.range[1]++;\r\n }\r\n\r\n this._input = this._input.slice(1);\r\n return ch;\r\n },\r\n\r\n// unshifts one char (or a string) into the input\r\nunput:function (ch) {\r\n var len = ch.length;\r\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\r\n\r\n this._input = ch + this._input;\r\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\r\n //this.yyleng -= len;\r\n this.offset -= len;\r\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\r\n this.match = this.match.substr(0, this.match.length - 1);\r\n this.matched = this.matched.substr(0, this.matched.length - 1);\r\n\r\n if (lines.length - 1) {\r\n this.yylineno -= lines.length - 1;\r\n }\r\n var r = this.yylloc.range;\r\n\r\n this.yylloc = {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.first_column,\r\n last_column: lines ?\r\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\r\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\r\n this.yylloc.first_column - len\r\n };\r\n\r\n if (this.options.ranges) {\r\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\r\n }\r\n this.yyleng = this.yytext.length;\r\n return this;\r\n },\r\n\r\n// When called from action, caches matched text and appends it on next action\r\nmore:function () {\r\n this._more = true;\r\n return this;\r\n },\r\n\r\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\r\nreject:function () {\r\n if (this.options.backtrack_lexer) {\r\n this._backtrack = true;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n\r\n }\r\n return this;\r\n },\r\n\r\n// retain first n characters of the match\r\nless:function (n) {\r\n this.unput(this.match.slice(n));\r\n },\r\n\r\n// displays already matched input, i.e. for error messages\r\npastInput:function () {\r\n var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays upcoming input, i.e. for error messages\r\nupcomingInput:function () {\r\n var next = this.match;\r\n if (next.length < 20) {\r\n next += this._input.substr(0, 20-next.length);\r\n }\r\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays the character position where the lexing error occurred, i.e. for error messages\r\nshowPosition:function () {\r\n var pre = this.pastInput();\r\n var c = new Array(pre.length + 1).join(\"-\");\r\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\r\n },\r\n\r\n// test the lexed token: return FALSE when not a match, otherwise return token\r\ntest_match:function(match, indexed_rule) {\r\n var token,\r\n lines,\r\n backup;\r\n\r\n if (this.options.backtrack_lexer) {\r\n // save context\r\n backup = {\r\n yylineno: this.yylineno,\r\n yylloc: {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.last_line,\r\n first_column: this.yylloc.first_column,\r\n last_column: this.yylloc.last_column\r\n },\r\n yytext: this.yytext,\r\n match: this.match,\r\n matches: this.matches,\r\n matched: this.matched,\r\n yyleng: this.yyleng,\r\n offset: this.offset,\r\n _more: this._more,\r\n _input: this._input,\r\n yy: this.yy,\r\n conditionStack: this.conditionStack.slice(0),\r\n done: this.done\r\n };\r\n if (this.options.ranges) {\r\n backup.yylloc.range = this.yylloc.range.slice(0);\r\n }\r\n }\r\n\r\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno += lines.length;\r\n }\r\n this.yylloc = {\r\n first_line: this.yylloc.last_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.last_column,\r\n last_column: lines ?\r\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\r\n this.yylloc.last_column + match[0].length\r\n };\r\n this.yytext += match[0];\r\n this.match += match[0];\r\n this.matches = match;\r\n this.yyleng = this.yytext.length;\r\n if (this.options.ranges) {\r\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\r\n }\r\n this._more = false;\r\n this._backtrack = false;\r\n this._input = this._input.slice(match[0].length);\r\n this.matched += match[0];\r\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\r\n if (this.done && this._input) {\r\n this.done = false;\r\n }\r\n if (token) {\r\n return token;\r\n } else if (this._backtrack) {\r\n // recover context\r\n for (var k in backup) {\r\n this[k] = backup[k];\r\n }\r\n return false; // rule action called reject() implying the next rule should be tested instead.\r\n }\r\n return false;\r\n },\r\n\r\n// return next match in input\r\nnext:function () {\r\n if (this.done) {\r\n return this.EOF;\r\n }\r\n if (!this._input) {\r\n this.done = true;\r\n }\r\n\r\n var token,\r\n match,\r\n tempMatch,\r\n index;\r\n if (!this._more) {\r\n this.yytext = '';\r\n this.match = '';\r\n }\r\n var rules = this._currentRules();\r\n for (var i = 0; i < rules.length; i++) {\r\n tempMatch = this._input.match(this.rules[rules[i]]);\r\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n match = tempMatch;\r\n index = i;\r\n if (this.options.backtrack_lexer) {\r\n token = this.test_match(tempMatch, rules[i]);\r\n if (token !== false) {\r\n return token;\r\n } else if (this._backtrack) {\r\n match = false;\r\n continue; // rule action called reject() implying a rule MISmatch.\r\n } else {\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n } else if (!this.options.flex) {\r\n break;\r\n }\r\n }\r\n }\r\n if (match) {\r\n token = this.test_match(match, rules[index]);\r\n if (token !== false) {\r\n return token;\r\n }\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n if (this._input === \"\") {\r\n return this.EOF;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n }\r\n },\r\n\r\n// return next match that has a token\r\nlex:function lex () {\r\n var r = this.next();\r\n if (r) {\r\n return r;\r\n } else {\r\n return this.lex();\r\n }\r\n },\r\n\r\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\r\nbegin:function begin (condition) {\r\n this.conditionStack.push(condition);\r\n },\r\n\r\n// pop the previously active lexer condition state off the condition stack\r\npopState:function popState () {\r\n var n = this.conditionStack.length - 1;\r\n if (n > 0) {\r\n return this.conditionStack.pop();\r\n } else {\r\n return this.conditionStack[0];\r\n }\r\n },\r\n\r\n// produce the lexer rule set which is active for the currently active lexer condition state\r\n_currentRules:function _currentRules () {\r\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\r\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\r\n } else {\r\n return this.conditions[\"INITIAL\"].rules;\r\n }\r\n },\r\n\r\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\r\ntopState:function topState (n) {\r\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\r\n if (n >= 0) {\r\n return this.conditionStack[n];\r\n } else {\r\n return \"INITIAL\";\r\n }\r\n },\r\n\r\n// alias for begin(condition)\r\npushState:function pushState (condition) {\r\n this.begin(condition);\r\n },\r\n\r\n// return the number of states currently on the stack\r\nstateStackSize:function stateStackSize() {\r\n return this.conditionStack.length;\r\n },\r\noptions: {\"case-insensitive\":true},\r\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\nvar YYSTATE=YY_START;\r\nswitch($avoiding_name_collisions) {\r\ncase 0:/* ignore whitespace */\r\nbreak;\r\ncase 1:return '';\r\nbreak;\r\ncase 2:return '';\r\nbreak;\r\ncase 3:return 42;\r\nbreak;\r\ncase 4:return 35;\r\nbreak;\r\ncase 5:return 77;\r\nbreak;\r\ncase 6:return 78;\r\nbreak;\r\ncase 7:return 78;\r\nbreak;\r\ncase 8:return 8;\r\nbreak;\r\ncase 9:return 6;\r\nbreak;\r\ncase 10:return 82;\r\nbreak;\r\ncase 11:return 7;\r\nbreak;\r\ncase 12:return 9;\r\nbreak;\r\ncase 13:return 59;\r\nbreak;\r\ncase 14:return 13\r\nbreak;\r\ncase 15:return 15\r\nbreak;\r\ncase 16:return 17\r\nbreak;\r\ncase 17:return 18\r\nbreak;\r\ncase 18:return 19\r\nbreak;\r\ncase 19:return 20\r\nbreak;\r\ncase 20:return 11\r\nbreak;\r\ncase 21:return 62\r\nbreak;\r\ncase 22:return 64\r\nbreak;\r\ncase 23:return 23\r\nbreak;\r\ncase 24:return 25\r\nbreak;\r\ncase 25:return 26\r\nbreak;\r\ncase 26:return 27\r\nbreak;\r\ncase 27:return 30\r\nbreak;\r\ncase 28:return 34\r\nbreak;\r\ncase 29:return 33\r\nbreak;\r\ncase 30:return 65\r\nbreak;\r\ncase 31:return 66\r\nbreak;\r\ncase 32:return 37\r\nbreak;\r\ncase 33:return 41\r\nbreak;\r\ncase 34:return 43\r\nbreak;\r\ncase 35:return 52\r\nbreak;\r\ncase 36:return 54\r\nbreak;\r\ncase 37:return 55\r\nbreak;\r\ncase 38:return 46\r\nbreak;\r\ncase 39:return 48\r\nbreak;\r\ncase 40:return 45\r\nbreak;\r\ncase 41:return 49\r\nbreak;\r\ncase 42:return 56\r\nbreak;\r\ncase 43:return 58;\r\nbreak;\r\ncase 44:return 44\r\nbreak;\r\ncase 45:return 83\r\nbreak;\r\ncase 46:return 84\r\nbreak;\r\ncase 47:return 85\r\nbreak;\r\ncase 48:return 86\r\nbreak;\r\ncase 49:return 87\r\nbreak;\r\ncase 50:return 88\r\nbreak;\r\ncase 51:return 89\r\nbreak;\r\ncase 52:return 90\r\nbreak;\r\ncase 53:return 91\r\nbreak;\r\ncase 54:return 92\r\nbreak;\r\ncase 55:return 93\r\nbreak;\r\ncase 56:return 94\r\nbreak;\r\ncase 57:return 95\r\nbreak;\r\ncase 58:return 70\r\nbreak;\r\ncase 59:return 70\r\nbreak;\r\ncase 60:return 72\r\nbreak;\r\ncase 61:return 72\r\nbreak;\r\ncase 62:return 74\r\nbreak;\r\ncase 63:return 74\r\nbreak;\r\ncase 64:return 74\r\nbreak;\r\ncase 65:return 31\r\nbreak;\r\ncase 66:return 36\r\nbreak;\r\ncase 67:return 96\r\nbreak;\r\ncase 68:return 97\r\nbreak;\r\ncase 69:return 98\r\nbreak;\r\ncase 70:return 99\r\nbreak;\r\ncase 71:yy_.yytext = yy.utils.unquoteString(yy_.yytext); return 14;\r\nbreak;\r\ncase 72:return 38;\r\nbreak;\r\ncase 73:return 5;\r\nbreak;\r\ncase 74:return 101;\r\nbreak;\r\ncase 75:return 103;\r\nbreak;\r\ncase 76:return '\\\\';\r\nbreak;\r\ncase 77:return 28\r\nbreak;\r\ncase 78:return 61\r\nbreak;\r\ncase 79:return 29\r\nbreak;\r\ncase 80:return 57\r\nbreak;\r\ncase 81:return 71\r\nbreak;\r\n}\r\n},\r\nrules: [/^(?:\\s+)/i,/^(?:[#].*)/i,/^(?:\\/\\/.*)/i,/^(?:([_A-Z0-9\\/\\+]+==))/i,/^(?:-?[0-9]+(\\.[0-9]+)?\\b)/i,/^(?:0[xX][0-9A-F]+\\b)/i,/^(?:false\\b)/i,/^(?:true\\b)/i,/^(?:all\\b)/i,/^(?:reset\\b)/i,/^(?:clear\\b)/i,/^(?:build\\b)/i,/^(?:help\\b)/i,/^(?:load\\b)/i,/^(?:get\\b)/i,/^(?:set\\b)/i,/^(?:set_save\\b)/i,/^(?:set_restore\\b)/i,/^(?:set_reset\\b)/i,/^(?:preset\\b)/i,/^(?:motm\\b)/i,/^(?:add\\b)/i,/^(?:rep\\b)/i,/^(?:remove\\b)/i,/^(?:hide\\b)/i,/^(?:show\\b)/i,/^(?:list\\b)/i,/^(?:select\\b)/i,/^(?:within\\b)/i,/^(?:selector\\b)/i,/^(?:mode\\b)/i,/^(?:color\\b)/i,/^(?:material\\b)/i,/^(?:view\\b)/i,/^(?:unit\\b)/i,/^(?:line\\b)/i,/^(?:listobj\\b)/i,/^(?:removeobj\\b)/i,/^(?:rotate\\b)/i,/^(?:translate\\b)/i,/^(?:scale\\b)/i,/^(?:center\\b)/i,/^(?:url\\b)/i,/^(?:screenshot\\b)/i,/^(?:dssp\\b)/i,/^(?:file_list\\b)/i,/^(?:file_register\\b)/i,/^(?:file_delete\\b)/i,/^(?:preset_add\\b)/i,/^(?:preset_delete\\b)/i,/^(?:preset_update\\b)/i,/^(?:preset_rename\\b)/i,/^(?:preset_open\\b)/i,/^(?:create_scenario\\b)/i,/^(?:reset_scenario\\b)/i,/^(?:delete_scenario\\b)/i,/^(?:add_scenario_item\\b)/i,/^(?:list_scenario\\b)/i,/^(?:s\\b)/i,/^(?:mt\\b)/i,/^(?:m\\b)/i,/^(?:c\\b)/i,/^(?:x\\b)/i,/^(?:y\\b)/i,/^(?:z\\b)/i,/^(?:as\\b)/i,/^(?:of\\b)/i,/^(?:pdb\\b)/i,/^(?:delay\\b)/i,/^(?:prst\\b)/i,/^(?:desc\\b)/i,/^(?:((?:\"(?:\\\\.|[^\\\\\"])*\"|'(?:\\\\.|[^\\\\'])*')))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:\\.)/i,/^(?:\\/)/i,/^(?:\\\\)/i,/^(?:-e\\b)/i,/^(?:-f\\b)/i,/^(?:-s\\b)/i,/^(?:-v\\b)/i,/^(?:=)/i],\r\nconditions: {\"INITIAL\":{\"rules\":[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,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,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81],\"inclusive\":true}}\r\n});\r\nreturn lexer;\r\n})();\r\nparser.lexer = lexer;\r\nfunction Parser () {\r\n this.yy = {};\r\n}\r\nParser.prototype = parser;parser.Parser = Parser;\r\nreturn new Parser;\r\n})();\r\n\r\nmodule.exports = {parser: parser};\r\n","/* eslint-disable */\r\n// DO NOT EDIT! Automatically generated from .jison\r\n/* parser generated by jison 0.4.18 */\r\n/*\r\n Returns a Parser object of the following structure:\r\n\r\n Parser: {\r\n yy: {}\r\n }\r\n\r\n Parser.prototype: {\r\n yy: {},\r\n trace: function(),\r\n symbols_: {associative list: name ==> number},\r\n terminals_: {associative list: number ==> name},\r\n productions_: [...],\r\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\r\n table: [...],\r\n defaultActions: {...},\r\n parseError: function(str, hash),\r\n parse: function(input),\r\n\r\n lexer: {\r\n EOF: 1,\r\n parseError: function(str, hash),\r\n setInput: function(input),\r\n input: function(),\r\n unput: function(str),\r\n more: function(),\r\n less: function(n),\r\n pastInput: function(),\r\n upcomingInput: function(),\r\n showPosition: function(),\r\n test_match: function(regex_match_array, rule_index),\r\n next: function(),\r\n lex: function(),\r\n begin: function(condition),\r\n popState: function(),\r\n _currentRules: function(),\r\n topState: function(),\r\n pushState: function(condition),\r\n\r\n options: {\r\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\r\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\r\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\r\n },\r\n\r\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\r\n rules: [...],\r\n conditions: {associative list: name ==> set},\r\n }\r\n }\r\n\r\n\r\n token location info (@$, _$, etc.): {\r\n first_line: n,\r\n last_line: n,\r\n first_column: n,\r\n last_column: n,\r\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\r\n }\r\n\r\n\r\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\r\n text: (matched text)\r\n token: (the produced terminal token, if any)\r\n line: (yylineno)\r\n }\r\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\r\n loc: (yylloc)\r\n expected: (string describing the set of expected tokens)\r\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\r\n }\r\n*/\r\nvar parser = (function(){\r\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,5],$V2=[1,6],$V3=[1,7],$V4=[1,8],$V5=[1,9],$V6=[1,11],$V7=[1,12],$V8=[5,7,8,11],$V9=[1,17],$Va=[1,22],$Vb=[1,20],$Vc=[1,21],$Vd=[5,7,8,11,19];\r\nvar parser = {trace: function trace() { },\r\nyy: {},\r\nsymbols_: {\"error\":2,\"Program\":3,\"Expression\":4,\"EOF\":5,\"Selector\":6,\"OR\":7,\"AND\":8,\"NOT\":9,\"(\":10,\")\":11,\"SELECTOR\":12,\"NAMED_SELECTOR\":13,\"SELECTOR_RANGED\":14,\"RangeList\":15,\"SELECTOR_NAMED\":16,\"NameList\":17,\"Range\":18,\",\":19,\"NUMBER\":20,\":\":21,\"Name\":22,\"IDENTIFIER\":23,\"STRING\":24,\"$accept\":0,\"$end\":1},\r\nterminals_: {2:\"error\",5:\"EOF\",7:\"OR\",8:\"AND\",9:\"NOT\",10:\"(\",11:\")\",12:\"SELECTOR\",13:\"NAMED_SELECTOR\",14:\"SELECTOR_RANGED\",16:\"SELECTOR_NAMED\",19:\",\",20:\"NUMBER\",21:\":\",23:\"IDENTIFIER\",24:\"STRING\"},\r\nproductions_: [0,[3,2],[4,1],[4,3],[4,3],[4,2],[4,3],[6,1],[6,1],[6,2],[6,2],[15,1],[15,3],[18,1],[18,3],[17,1],[17,3],[22,1],[22,1],[22,1]],\r\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\r\n/* this == yyval */\r\n\r\nvar $0 = $$.length - 1;\r\nswitch (yystate) {\r\ncase 1:\r\n return $$[$0-1]; \r\nbreak;\r\ncase 3:\r\nthis.$ = yy.keyword('or')($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 4:\r\nthis.$ = yy.keyword('and')($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 5:\r\nthis.$ = yy.keyword('not')($$[$0]);\r\nbreak;\r\ncase 6:\r\nthis.$ = $$[$0-1];\r\nbreak;\r\ncase 7:\r\nthis.$ = yy.keyword($$[$0])();\r\nbreak;\r\ncase 8:\r\nthis.$ = yy.GetSelector($$[$0].toLowerCase().slice(1, $$[$0].length));\r\nbreak;\r\ncase 9: case 10:\r\nthis.$ = yy.keyword($$[$0-1])($$[$0]);\r\nbreak;\r\ncase 11:\r\nthis.$ = new yy.RangeList($$[$0]);\r\nbreak;\r\ncase 12: case 16:\r\nthis.$ = $$[$0-2].append($$[$0]);\r\nbreak;\r\ncase 13:\r\nthis.$ = new yy.Range(Number($$[$0]));\r\nbreak;\r\ncase 14:\r\nthis.$ = new yy.Range(Number($$[$0-2]), Number($$[$0]));\r\nbreak;\r\ncase 15:\r\nthis.$ = new yy.ValueList($$[$0]);\r\nbreak;\r\n}\r\n},\r\ntable: [{3:1,4:2,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{1:[3]},{5:[1,10],7:$V6,8:$V7},o($V8,[2,2]),{4:13,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{4:14,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},o($V8,[2,7]),o($V8,[2,8]),{15:15,18:16,20:$V9},{17:18,20:$Va,22:19,23:$Vb,24:$Vc},{1:[2,1]},{4:23,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{4:24,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},o($V8,[2,5]),{7:$V6,8:$V7,11:[1,25]},o($V8,[2,9],{19:[1,26]}),o($Vd,[2,11]),o($Vd,[2,13],{21:[1,27]}),o($V8,[2,10],{19:[1,28]}),o($Vd,[2,15]),o($Vd,[2,17]),o($Vd,[2,18]),o($Vd,[2,19]),o([5,7,11],[2,3],{8:$V7}),o($V8,[2,4]),o($V8,[2,6]),{18:29,20:$V9},{20:[1,30]},{20:$Va,22:31,23:$Vb,24:$Vc},o($Vd,[2,12]),o($Vd,[2,14]),o($Vd,[2,16])],\r\ndefaultActions: {10:[2,1]},\r\nparseError: function parseError(str, hash) {\r\n if (hash.recoverable) {\r\n this.trace(str);\r\n } else {\r\n var error = new Error(str);\r\n error.hash = hash;\r\n throw error;\r\n }\r\n},\r\nparse: function parse(input) {\r\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\r\n var args = lstack.slice.call(arguments, 1);\r\n var lexer = Object.create(this.lexer);\r\n var sharedState = { yy: {} };\r\n for (var k in this.yy) {\r\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\r\n sharedState.yy[k] = this.yy[k];\r\n }\r\n }\r\n lexer.setInput(input, sharedState.yy);\r\n sharedState.yy.lexer = lexer;\r\n sharedState.yy.parser = this;\r\n if (typeof lexer.yylloc == 'undefined') {\r\n lexer.yylloc = {};\r\n }\r\n var yyloc = lexer.yylloc;\r\n lstack.push(yyloc);\r\n var ranges = lexer.options && lexer.options.ranges;\r\n if (typeof sharedState.yy.parseError === 'function') {\r\n this.parseError = sharedState.yy.parseError;\r\n } else {\r\n this.parseError = Object.getPrototypeOf(this).parseError;\r\n }\r\n function popStack(n) {\r\n stack.length = stack.length - 2 * n;\r\n vstack.length = vstack.length - n;\r\n lstack.length = lstack.length - n;\r\n }\r\n function lex() {\r\n var token;\r\n token = tstack.pop() || lexer.lex() || EOF;\r\n if (typeof token !== 'number') {\r\n if (token instanceof Array) {\r\n tstack = token;\r\n token = tstack.pop();\r\n }\r\n token = self.symbols_[token] || token;\r\n }\r\n return token;\r\n }\r\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\r\n while (true) {\r\n state = stack[stack.length - 1];\r\n if (this.defaultActions[state]) {\r\n action = this.defaultActions[state];\r\n } else {\r\n if (symbol === null || typeof symbol == 'undefined') {\r\n symbol = lex();\r\n }\r\n action = table[state] && table[state][symbol];\r\n }\r\n if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n var errStr = '';\r\n expected = [];\r\n for (p in table[state]) {\r\n if (this.terminals_[p] && p > TERROR) {\r\n expected.push('\\'' + this.terminals_[p] + '\\'');\r\n }\r\n }\r\n if (lexer.showPosition) {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\r\n } else {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\r\n }\r\n this.parseError(errStr, {\r\n text: lexer.match,\r\n token: this.terminals_[symbol] || symbol,\r\n line: lexer.yylineno,\r\n loc: yyloc,\r\n expected: expected\r\n });\r\n }\r\n if (action[0] instanceof Array && action.length > 1) {\r\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\r\n }\r\n switch (action[0]) {\r\n case 1:\r\n stack.push(symbol);\r\n vstack.push(lexer.yytext);\r\n lstack.push(lexer.yylloc);\r\n stack.push(action[1]);\r\n symbol = null;\r\n if (!preErrorSymbol) {\r\n yyleng = lexer.yyleng;\r\n yytext = lexer.yytext;\r\n yylineno = lexer.yylineno;\r\n yyloc = lexer.yylloc;\r\n if (recovering > 0) {\r\n recovering--;\r\n }\r\n } else {\r\n symbol = preErrorSymbol;\r\n preErrorSymbol = null;\r\n }\r\n break;\r\n case 2:\r\n len = this.productions_[action[1]][1];\r\n yyval.$ = vstack[vstack.length - len];\r\n yyval._$ = {\r\n first_line: lstack[lstack.length - (len || 1)].first_line,\r\n last_line: lstack[lstack.length - 1].last_line,\r\n first_column: lstack[lstack.length - (len || 1)].first_column,\r\n last_column: lstack[lstack.length - 1].last_column\r\n };\r\n if (ranges) {\r\n yyval._$.range = [\r\n lstack[lstack.length - (len || 1)].range[0],\r\n lstack[lstack.length - 1].range[1]\r\n ];\r\n }\r\n r = this.performAction.apply(yyval, [\r\n yytext,\r\n yyleng,\r\n yylineno,\r\n sharedState.yy,\r\n action[1],\r\n vstack,\r\n lstack\r\n ].concat(args));\r\n if (typeof r !== 'undefined') {\r\n return r;\r\n }\r\n if (len) {\r\n stack = stack.slice(0, -1 * len * 2);\r\n vstack = vstack.slice(0, -1 * len);\r\n lstack = lstack.slice(0, -1 * len);\r\n }\r\n stack.push(this.productions_[action[1]][0]);\r\n vstack.push(yyval.$);\r\n lstack.push(yyval._$);\r\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\r\n stack.push(newState);\r\n break;\r\n case 3:\r\n return true;\r\n }\r\n }\r\n return true;\r\n}};\r\n\r\n\r\n/* generated by jison-lex 0.3.4 */\r\nvar lexer = (function(){\r\nvar lexer = ({\r\n\r\nEOF:1,\r\n\r\nparseError:function parseError(str, hash) {\r\n if (this.yy.parser) {\r\n this.yy.parser.parseError(str, hash);\r\n } else {\r\n throw new Error(str);\r\n }\r\n },\r\n\r\n// resets the lexer, sets new input\r\nsetInput:function (input, yy) {\r\n this.yy = yy || this.yy || {};\r\n this._input = input;\r\n this._more = this._backtrack = this.done = false;\r\n this.yylineno = this.yyleng = 0;\r\n this.yytext = this.matched = this.match = '';\r\n this.conditionStack = ['INITIAL'];\r\n this.yylloc = {\r\n first_line: 1,\r\n first_column: 0,\r\n last_line: 1,\r\n last_column: 0\r\n };\r\n if (this.options.ranges) {\r\n this.yylloc.range = [0,0];\r\n }\r\n this.offset = 0;\r\n return this;\r\n },\r\n\r\n// consumes and returns one char from the input\r\ninput:function () {\r\n var ch = this._input[0];\r\n this.yytext += ch;\r\n this.yyleng++;\r\n this.offset++;\r\n this.match += ch;\r\n this.matched += ch;\r\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno++;\r\n this.yylloc.last_line++;\r\n } else {\r\n this.yylloc.last_column++;\r\n }\r\n if (this.options.ranges) {\r\n this.yylloc.range[1]++;\r\n }\r\n\r\n this._input = this._input.slice(1);\r\n return ch;\r\n },\r\n\r\n// unshifts one char (or a string) into the input\r\nunput:function (ch) {\r\n var len = ch.length;\r\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\r\n\r\n this._input = ch + this._input;\r\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\r\n //this.yyleng -= len;\r\n this.offset -= len;\r\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\r\n this.match = this.match.substr(0, this.match.length - 1);\r\n this.matched = this.matched.substr(0, this.matched.length - 1);\r\n\r\n if (lines.length - 1) {\r\n this.yylineno -= lines.length - 1;\r\n }\r\n var r = this.yylloc.range;\r\n\r\n this.yylloc = {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.first_column,\r\n last_column: lines ?\r\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\r\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\r\n this.yylloc.first_column - len\r\n };\r\n\r\n if (this.options.ranges) {\r\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\r\n }\r\n this.yyleng = this.yytext.length;\r\n return this;\r\n },\r\n\r\n// When called from action, caches matched text and appends it on next action\r\nmore:function () {\r\n this._more = true;\r\n return this;\r\n },\r\n\r\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\r\nreject:function () {\r\n if (this.options.backtrack_lexer) {\r\n this._backtrack = true;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n\r\n }\r\n return this;\r\n },\r\n\r\n// retain first n characters of the match\r\nless:function (n) {\r\n this.unput(this.match.slice(n));\r\n },\r\n\r\n// displays already matched input, i.e. for error messages\r\npastInput:function () {\r\n var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays upcoming input, i.e. for error messages\r\nupcomingInput:function () {\r\n var next = this.match;\r\n if (next.length < 20) {\r\n next += this._input.substr(0, 20-next.length);\r\n }\r\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays the character position where the lexing error occurred, i.e. for error messages\r\nshowPosition:function () {\r\n var pre = this.pastInput();\r\n var c = new Array(pre.length + 1).join(\"-\");\r\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\r\n },\r\n\r\n// test the lexed token: return FALSE when not a match, otherwise return token\r\ntest_match:function (match, indexed_rule) {\r\n var token,\r\n lines,\r\n backup;\r\n\r\n if (this.options.backtrack_lexer) {\r\n // save context\r\n backup = {\r\n yylineno: this.yylineno,\r\n yylloc: {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.last_line,\r\n first_column: this.yylloc.first_column,\r\n last_column: this.yylloc.last_column\r\n },\r\n yytext: this.yytext,\r\n match: this.match,\r\n matches: this.matches,\r\n matched: this.matched,\r\n yyleng: this.yyleng,\r\n offset: this.offset,\r\n _more: this._more,\r\n _input: this._input,\r\n yy: this.yy,\r\n conditionStack: this.conditionStack.slice(0),\r\n done: this.done\r\n };\r\n if (this.options.ranges) {\r\n backup.yylloc.range = this.yylloc.range.slice(0);\r\n }\r\n }\r\n\r\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno += lines.length;\r\n }\r\n this.yylloc = {\r\n first_line: this.yylloc.last_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.last_column,\r\n last_column: lines ?\r\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\r\n this.yylloc.last_column + match[0].length\r\n };\r\n this.yytext += match[0];\r\n this.match += match[0];\r\n this.matches = match;\r\n this.yyleng = this.yytext.length;\r\n if (this.options.ranges) {\r\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\r\n }\r\n this._more = false;\r\n this._backtrack = false;\r\n this._input = this._input.slice(match[0].length);\r\n this.matched += match[0];\r\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\r\n if (this.done && this._input) {\r\n this.done = false;\r\n }\r\n if (token) {\r\n return token;\r\n } else if (this._backtrack) {\r\n // recover context\r\n for (var k in backup) {\r\n this[k] = backup[k];\r\n }\r\n return false; // rule action called reject() implying the next rule should be tested instead.\r\n }\r\n return false;\r\n },\r\n\r\n// return next match in input\r\nnext:function () {\r\n if (this.done) {\r\n return this.EOF;\r\n }\r\n if (!this._input) {\r\n this.done = true;\r\n }\r\n\r\n var token,\r\n match,\r\n tempMatch,\r\n index;\r\n if (!this._more) {\r\n this.yytext = '';\r\n this.match = '';\r\n }\r\n var rules = this._currentRules();\r\n for (var i = 0; i < rules.length; i++) {\r\n tempMatch = this._input.match(this.rules[rules[i]]);\r\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n match = tempMatch;\r\n index = i;\r\n if (this.options.backtrack_lexer) {\r\n token = this.test_match(tempMatch, rules[i]);\r\n if (token !== false) {\r\n return token;\r\n } else if (this._backtrack) {\r\n match = false;\r\n continue; // rule action called reject() implying a rule MISmatch.\r\n } else {\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n } else if (!this.options.flex) {\r\n break;\r\n }\r\n }\r\n }\r\n if (match) {\r\n token = this.test_match(match, rules[index]);\r\n if (token !== false) {\r\n return token;\r\n }\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n if (this._input === \"\") {\r\n return this.EOF;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n }\r\n },\r\n\r\n// return next match that has a token\r\nlex:function lex() {\r\n var r = this.next();\r\n if (r) {\r\n return r;\r\n } else {\r\n return this.lex();\r\n }\r\n },\r\n\r\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\r\nbegin:function begin(condition) {\r\n this.conditionStack.push(condition);\r\n },\r\n\r\n// pop the previously active lexer condition state off the condition stack\r\npopState:function popState() {\r\n var n = this.conditionStack.length - 1;\r\n if (n > 0) {\r\n return this.conditionStack.pop();\r\n } else {\r\n return this.conditionStack[0];\r\n }\r\n },\r\n\r\n// produce the lexer rule set which is active for the currently active lexer condition state\r\n_currentRules:function _currentRules() {\r\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\r\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\r\n } else {\r\n return this.conditions[\"INITIAL\"].rules;\r\n }\r\n },\r\n\r\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\r\ntopState:function topState(n) {\r\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\r\n if (n >= 0) {\r\n return this.conditionStack[n];\r\n } else {\r\n return \"INITIAL\";\r\n }\r\n },\r\n\r\n// alias for begin(condition)\r\npushState:function pushState(condition) {\r\n this.begin(condition);\r\n },\r\n\r\n// return the number of states currently on the stack\r\nstateStackSize:function stateStackSize() {\r\n return this.conditionStack.length;\r\n },\r\noptions: {\"case-insensitive\":true},\r\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\nvar YYSTATE=YY_START;\r\nswitch($avoiding_name_collisions) {\r\ncase 0:/* skip whitespace */\r\nbreak;\r\ncase 1:return 20;\r\nbreak;\r\ncase 2:return 7;\r\nbreak;\r\ncase 3:return 8;\r\nbreak;\r\ncase 4:return 9;\r\nbreak;\r\ncase 5:return 12;\r\nbreak;\r\ncase 6:return 16;\r\nbreak;\r\ncase 7:return 14;\r\nbreak;\r\ncase 8:return 10;\r\nbreak;\r\ncase 9:return 11;\r\nbreak;\r\ncase 10:return 19;\r\nbreak;\r\ncase 11:return 21;\r\nbreak;\r\ncase 12:return '<=';\r\nbreak;\r\ncase 13:return '>=';\r\nbreak;\r\ncase 14:return '<';\r\nbreak;\r\ncase 15:return '>';\r\nbreak;\r\ncase 16:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 24;\r\nbreak;\r\ncase 17:return 13;\r\nbreak;\r\ncase 18:return 23;\r\nbreak;\r\ncase 19:return 5;\r\nbreak;\r\ncase 20:return 'INVALID';\r\nbreak;\r\n}\r\n},\r\nrules: [/^(?:\\s+)/i,/^(?:(-?(?:[1-9][0-9]+|[0-9]))\\b)/i,/^(?:OR\\b)/i,/^(?:AND\\b)/i,/^(?:NOT\\b)/i,/^(?:((ALL|NONE|HETATM|PROTEIN|BASIC|ACIDIC|CHARGED|POLAR|NONPOLAR|AROMATIC|NUCLEIC|PURINE|PYRIMIDINE|WATER|POLARH|NONPOLARH))\\b)/i,/^(?:((NAME|ELEM|TYPE|RESIDUE|ICODE|CHAIN|ALTLOC))\\b)/i,/^(?:((SERIAL|SEQUENCE|RESIDX))\\b)/i,/^(?:\\()/i,/^(?:\\))/i,/^(?:,)/i,/^(?::)/i,/^(?:<=)/i,/^(?:>=)/i,/^(?:<)/i,/^(?:>)/i,/^(?:((?:\"(?:\\\\.|[^\\\\\"])*\"|'(?:\\\\.|[^\\\\'])*')))/i,/^(?:(@[_A-Z0-9]+))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:.)/i],\r\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],\"inclusive\":true}}\r\n});\r\nreturn lexer;\r\n})();\r\nparser.lexer = lexer;\r\nfunction Parser () {\r\n this.yy = {};\r\n}\r\nParser.prototype = parser;parser.Parser = Parser;\r\nreturn new Parser;\r\n})();\r\n\r\nmodule.exports = {parser: parser};\r\n","\r\n/*\r\nSmooth.js version 0.1.7\r\n\r\nTurn arrays into smooth functions.\r\n\r\nCopyright 2012 Spencer Cohen\r\nLicensed under MIT license (see \"Smooth.js MIT license.txt\")\r\n*/\r\n\r\n/*Constants (these are accessible by Smooth.WHATEVER in user space)\r\n*/\r\n\r\n(function() {\r\n var AbstractInterpolator, CubicInterpolator, Enum, LinearInterpolator, NearestInterpolator, PI, SincFilterInterpolator, Smooth, clipClamp, clipMirror, clipPeriodic, defaultConfig, getColumn, getType, isValidNumber, k, makeLanczosWindow, makeScaledFunction, makeSincKernel, normalizeScaleTo, shallowCopy, sin, sinc, v, validateNumber, validateVector,\r\n __hasProp = Object.prototype.hasOwnProperty,\r\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; };\r\n\r\n Enum = {\r\n /*Interpolation methods\r\n */\r\n METHOD_NEAREST: 'nearest',\r\n METHOD_LINEAR: 'linear',\r\n METHOD_CUBIC: 'cubic',\r\n METHOD_LANCZOS: 'lanczos',\r\n METHOD_SINC: 'sinc',\r\n /*Input clipping modes\r\n */\r\n CLIP_CLAMP: 'clamp',\r\n CLIP_ZERO: 'zero',\r\n CLIP_PERIODIC: 'periodic',\r\n CLIP_MIRROR: 'mirror',\r\n /* Constants for control over the cubic interpolation tension\r\n */\r\n CUBIC_TENSION_DEFAULT: 0,\r\n CUBIC_TENSION_CATMULL_ROM: 0\r\n };\r\n\r\n defaultConfig = {\r\n method: Enum.METHOD_CUBIC,\r\n cubicTension: Enum.CUBIC_TENSION_DEFAULT,\r\n clip: Enum.CLIP_CLAMP,\r\n scaleTo: 0,\r\n sincFilterSize: 2,\r\n sincWindow: void 0\r\n };\r\n\r\n /*Index clipping functions\r\n */\r\n\r\n clipClamp = function(i, n) {\r\n return Math.max(0, Math.min(i, n - 1));\r\n };\r\n\r\n clipPeriodic = function(i, n) {\r\n i = i % n;\r\n if (i < 0) i += n;\r\n return i;\r\n };\r\n\r\n clipMirror = function(i, n) {\r\n var period;\r\n period = 2 * (n - 1);\r\n i = clipPeriodic(i, period);\r\n if (i > n - 1) i = period - i;\r\n return i;\r\n };\r\n\r\n /*\r\n Abstract scalar interpolation class which provides common functionality for all interpolators\r\n \r\n Subclasses must override interpolate().\r\n */\r\n\r\n AbstractInterpolator = (function() {\r\n\r\n function AbstractInterpolator(array, config) {\r\n this.array = array.slice(0);\r\n this.length = this.array.length;\r\n if (!(this.clipHelper = {\r\n clamp: this.clipHelperClamp,\r\n zero: this.clipHelperZero,\r\n periodic: this.clipHelperPeriodic,\r\n mirror: this.clipHelperMirror\r\n }[config.clip])) {\r\n throw \"Invalid clip: \" + config.clip;\r\n }\r\n }\r\n\r\n AbstractInterpolator.prototype.getClippedInput = function(i) {\r\n if ((0 <= i && i < this.length)) {\r\n return this.array[i];\r\n } else {\r\n return this.clipHelper(i);\r\n }\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperClamp = function(i) {\r\n return this.array[clipClamp(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperZero = function(i) {\r\n return 0;\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperPeriodic = function(i) {\r\n return this.array[clipPeriodic(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperMirror = function(i) {\r\n return this.array[clipMirror(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.interpolate = function(t) {\r\n throw 'Subclasses of AbstractInterpolator must override the interpolate() method.';\r\n };\r\n\r\n return AbstractInterpolator;\r\n\r\n })();\r\n\r\n NearestInterpolator = (function(_super) {\r\n\r\n __extends(NearestInterpolator, _super);\r\n\r\n function NearestInterpolator() {\r\n NearestInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n NearestInterpolator.prototype.interpolate = function(t) {\r\n return this.getClippedInput(Math.round(t));\r\n };\r\n\r\n return NearestInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n LinearInterpolator = (function(_super) {\r\n\r\n __extends(LinearInterpolator, _super);\r\n\r\n function LinearInterpolator() {\r\n LinearInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n LinearInterpolator.prototype.interpolate = function(t) {\r\n var k;\r\n k = Math.floor(t);\r\n t -= k;\r\n return (1 - t) * this.getClippedInput(k) + t * this.getClippedInput(k + 1);\r\n };\r\n\r\n return LinearInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n CubicInterpolator = (function(_super) {\r\n\r\n __extends(CubicInterpolator, _super);\r\n\r\n function CubicInterpolator(array, config) {\r\n this.tangentFactor = 1 - Math.max(-1, Math.min(1, config.cubicTension));\r\n CubicInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n CubicInterpolator.prototype.getTangent = function(k) {\r\n return this.tangentFactor * (this.getClippedInput(k + 1) - this.getClippedInput(k - 1)) / 2;\r\n };\r\n\r\n CubicInterpolator.prototype.interpolate = function(t) {\r\n var k, m, p, t2, t3;\r\n k = Math.floor(t);\r\n m = [this.getTangent(k), this.getTangent(k + 1)];\r\n p = [this.getClippedInput(k), this.getClippedInput(k + 1)];\r\n t -= k;\r\n t2 = t * t;\r\n t3 = t * t2;\r\n return (2 * t3 - 3 * t2 + 1) * p[0] + (t3 - 2 * t2 + t) * m[0] + (-2 * t3 + 3 * t2) * p[1] + (t3 - t2) * m[1];\r\n };\r\n\r\n return CubicInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n sin = Math.sin, PI = Math.PI;\r\n\r\n sinc = function(x) {\r\n if (x === 0) {\r\n return 1;\r\n } else {\r\n return sin(PI * x) / (PI * x);\r\n }\r\n };\r\n\r\n makeLanczosWindow = function(a) {\r\n return function(x) {\r\n return sinc(x / a);\r\n };\r\n };\r\n\r\n makeSincKernel = function(window) {\r\n return function(x) {\r\n return sinc(x) * window(x);\r\n };\r\n };\r\n\r\n SincFilterInterpolator = (function(_super) {\r\n\r\n __extends(SincFilterInterpolator, _super);\r\n\r\n function SincFilterInterpolator(array, config) {\r\n SincFilterInterpolator.__super__.constructor.apply(this, arguments);\r\n this.a = config.sincFilterSize;\r\n if (!config.sincWindow) throw 'No sincWindow provided';\r\n this.kernel = makeSincKernel(config.sincWindow);\r\n }\r\n\r\n SincFilterInterpolator.prototype.interpolate = function(t) {\r\n var k, n, sum, _ref, _ref2;\r\n k = Math.floor(t);\r\n sum = 0;\r\n for (n = _ref = k - this.a + 1, _ref2 = k + this.a; _ref <= _ref2 ? n <= _ref2 : n >= _ref2; _ref <= _ref2 ? n++ : n--) {\r\n sum += this.kernel(t - n) * this.getClippedInput(n);\r\n }\r\n return sum;\r\n };\r\n\r\n return SincFilterInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n getColumn = function(arr, i) {\r\n var row, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = arr.length; _i < _len; _i++) {\r\n row = arr[_i];\r\n _results.push(row[i]);\r\n }\r\n return _results;\r\n };\r\n\r\n makeScaledFunction = function(f, baseScale, scaleRange) {\r\n var scaleFactor, translation;\r\n if (scaleRange.join === '0,1') {\r\n return f;\r\n } else {\r\n scaleFactor = baseScale / (scaleRange[1] - scaleRange[0]);\r\n translation = scaleRange[0];\r\n return function(t) {\r\n return f(scaleFactor * (t - translation));\r\n };\r\n }\r\n };\r\n\r\n getType = function(x) {\r\n return Object.prototype.toString.call(x).slice('[object '.length, -1);\r\n };\r\n\r\n validateNumber = function(n) {\r\n if (isNaN(n)) throw 'NaN in Smooth() input';\r\n if (getType(n) !== 'Number') throw 'Non-number in Smooth() input';\r\n if (!isFinite(n)) throw 'Infinity in Smooth() input';\r\n };\r\n\r\n validateVector = function(v, dimension) {\r\n var n, _i, _len;\r\n if (getType(v) !== 'Array') throw 'Non-vector in Smooth() input';\r\n if (v.length !== dimension) throw 'Inconsistent dimension in Smooth() input';\r\n for (_i = 0, _len = v.length; _i < _len; _i++) {\r\n n = v[_i];\r\n validateNumber(n);\r\n }\r\n };\r\n\r\n isValidNumber = function(n) {\r\n return (getType(n) === 'Number') && isFinite(n) && !isNaN(n);\r\n };\r\n\r\n normalizeScaleTo = function(s) {\r\n var invalidErr;\r\n invalidErr = \"scaleTo param must be number or array of two numbers\";\r\n switch (getType(s)) {\r\n case 'Number':\r\n if (!isValidNumber(s)) throw invalidErr;\r\n s = [0, s];\r\n break;\r\n case 'Array':\r\n if (s.length !== 2) throw invalidErr;\r\n if (!(isValidNumber(s[0]) && isValidNumber(s[1]))) throw invalidErr;\r\n break;\r\n default:\r\n throw invalidErr;\r\n }\r\n return s;\r\n };\r\n\r\n shallowCopy = function(obj) {\r\n var copy, k, v;\r\n copy = {};\r\n for (k in obj) {\r\n if (!__hasProp.call(obj, k)) continue;\r\n v = obj[k];\r\n copy[k] = v;\r\n }\r\n return copy;\r\n };\r\n\r\n Smooth = function(arr, config) {\r\n var baseDomainEnd, dimension, i, interpolator, interpolatorClass, interpolators, k, n, properties, smoothFunc, v;\r\n if (config == null) config = {};\r\n properties = {};\r\n config = shallowCopy(config);\r\n properties.config = shallowCopy(config);\r\n if (config.scaleTo == null) config.scaleTo = config.period;\r\n if (config.sincFilterSize == null) {\r\n config.sincFilterSize = config.lanczosFilterSize;\r\n }\r\n for (k in defaultConfig) {\r\n if (!__hasProp.call(defaultConfig, k)) continue;\r\n v = defaultConfig[k];\r\n if (config[k] == null) config[k] = v;\r\n }\r\n if (!(interpolatorClass = {\r\n nearest: NearestInterpolator,\r\n linear: LinearInterpolator,\r\n cubic: CubicInterpolator,\r\n lanczos: SincFilterInterpolator,\r\n sinc: SincFilterInterpolator\r\n }[config.method])) {\r\n throw \"Invalid method: \" + config.method;\r\n }\r\n if (config.method === 'lanczos') {\r\n config.sincWindow = makeLanczosWindow(config.sincFilterSize);\r\n }\r\n if (arr.length < 2) throw 'Array must have at least two elements';\r\n properties.count = arr.length;\r\n smoothFunc = (function() {\r\n var _i, _j, _len, _len2;\r\n switch (getType(arr[0])) {\r\n case 'Number':\r\n properties.dimension = 'scalar';\r\n if (Smooth.deepValidation) {\r\n for (_i = 0, _len = arr.length; _i < _len; _i++) {\r\n n = arr[_i];\r\n validateNumber(n);\r\n }\r\n }\r\n interpolator = new interpolatorClass(arr, config);\r\n return function(t) {\r\n return interpolator.interpolate(t);\r\n };\r\n case 'Array':\r\n properties.dimension = dimension = arr[0].length;\r\n if (!dimension) throw 'Vectors must be non-empty';\r\n if (Smooth.deepValidation) {\r\n for (_j = 0, _len2 = arr.length; _j < _len2; _j++) {\r\n v = arr[_j];\r\n validateVector(v, dimension);\r\n }\r\n }\r\n interpolators = (function() {\r\n var _results;\r\n _results = [];\r\n for (i = 0; 0 <= dimension ? i < dimension : i > dimension; 0 <= dimension ? i++ : i--) {\r\n _results.push(new interpolatorClass(getColumn(arr, i), config));\r\n }\r\n return _results;\r\n })();\r\n return function(t) {\r\n var interpolator, _k, _len3, _results;\r\n _results = [];\r\n for (_k = 0, _len3 = interpolators.length; _k < _len3; _k++) {\r\n interpolator = interpolators[_k];\r\n _results.push(interpolator.interpolate(t));\r\n }\r\n return _results;\r\n };\r\n default:\r\n throw \"Invalid element type: \" + (getType(arr[0]));\r\n }\r\n })();\r\n if (config.clip === 'periodic') {\r\n baseDomainEnd = arr.length;\r\n } else {\r\n baseDomainEnd = arr.length - 1;\r\n }\r\n config.scaleTo || (config.scaleTo = baseDomainEnd);\r\n properties.domain = normalizeScaleTo(config.scaleTo);\r\n smoothFunc = makeScaledFunction(smoothFunc, baseDomainEnd, properties.domain);\r\n properties.domain.sort();\r\n /*copy properties\r\n */\r\n for (k in properties) {\r\n if (!__hasProp.call(properties, k)) continue;\r\n v = properties[k];\r\n smoothFunc[k] = v;\r\n }\r\n return smoothFunc;\r\n };\r\n\r\n for (k in Enum) {\r\n if (!__hasProp.call(Enum, k)) continue;\r\n v = Enum[k];\r\n Smooth[k] = v;\r\n }\r\n\r\n Smooth.deepValidation = true;\r\n\r\n (typeof exports !== \"undefined\" && exports !== null ? exports : window).Smooth = Smooth;\r\n\r\n}).call(this);\r\n","!function(r,t){if(\"function\"==typeof define&&define.amd)define([\"exports\"],t);else if(\"object\"==typeof exports&&\"undefined\"!=typeof module)t(exports);else t(r.MMTF=r.MMTF||{})}(this,function(r){\"use strict\";function t(r,t,n){for(var e=(r.byteLength,0),i=n.length;i>e;e++){var o=n.charCodeAt(e);if(128>o)r.setUint8(t++,o>>>0&127|0);else if(2048>o)r.setUint8(t++,o>>>6&31|192),r.setUint8(t++,o>>>0&63|128);else if(65536>o)r.setUint8(t++,o>>>12&15|224),r.setUint8(t++,o>>>6&63|128),r.setUint8(t++,o>>>0&63|128);else{if(!(1114112>o))throw new Error(\"bad codepoint \"+o);r.setUint8(t++,o>>>18&7|240),r.setUint8(t++,o>>>12&63|128),r.setUint8(t++,o>>>6&63|128),r.setUint8(t++,o>>>0&63|128)}}}function n(r){for(var t=0,n=0,e=r.length;e>n;n++){var i=r.charCodeAt(n);if(128>i)t+=1;else if(2048>i)t+=2;else if(65536>i)t+=3;else{if(!(1114112>i))throw new Error(\"bad codepoint \"+i);t+=4}}return t}function e(r,i,o){var a=typeof r;if(\"string\"===a){var u=n(r);if(32>u)return i.setUint8(o,160|u),t(i,o+1,r),1+u;if(256>u)return i.setUint8(o,217),i.setUint8(o+1,u),t(i,o+2,r),2+u;if(65536>u)return i.setUint8(o,218),i.setUint16(o+1,u),t(i,o+3,r),3+u;if(4294967296>u)return i.setUint8(o,219),i.setUint32(o+1,u),t(i,o+5,r),5+u}if(r instanceof Uint8Array){var u=r.byteLength,s=new Uint8Array(i.buffer);if(256>u)return i.setUint8(o,196),i.setUint8(o+1,u),s.set(r,o+2),2+u;if(65536>u)return i.setUint8(o,197),i.setUint16(o+1,u),s.set(r,o+3),3+u;if(4294967296>u)return i.setUint8(o,198),i.setUint32(o+1,u),s.set(r,o+5),5+u}if(\"number\"===a){if(!isFinite(r))throw new Error(\"Number not finite: \"+r);if(Math.floor(r)!==r)return i.setUint8(o,203),i.setFloat64(o+1,r),9;if(r>=0){if(128>r)return i.setUint8(o,r),1;if(256>r)return i.setUint8(o,204),i.setUint8(o+1,r),2;if(65536>r)return i.setUint8(o,205),i.setUint16(o+1,r),3;if(4294967296>r)return i.setUint8(o,206),i.setUint32(o+1,r),5;throw new Error(\"Number too big 0x\"+r.toString(16))}if(r>=-32)return i.setInt8(o,r),1;if(r>=-128)return i.setUint8(o,208),i.setInt8(o+1,r),2;if(r>=-32768)return i.setUint8(o,209),i.setInt16(o+1,r),3;if(r>=-2147483648)return i.setUint8(o,210),i.setInt32(o+1,r),5;throw new Error(\"Number too small -0x\"+(-r).toString(16).substr(1))}if(null===r)return i.setUint8(o,192),1;if(\"boolean\"===a)return i.setUint8(o,r?195:194),1;if(\"object\"===a){var u,f=0,c=Array.isArray(r);if(c)u=r.length;else{var d=Object.keys(r);u=d.length}var f;if(16>u?(i.setUint8(o,u|(c?144:128)),f=1):65536>u?(i.setUint8(o,c?220:222),i.setUint16(o+1,u),f=3):4294967296>u&&(i.setUint8(o,c?221:223),i.setUint32(o+1,u),f=5),c)for(var l=0;u>l;l++)f+=e(r[l],i,o+f);else for(var l=0;u>l;l++){var v=d[l];f+=e(v,i,o+f),f+=e(r[v],i,o+f)}return f}throw new Error(\"Unknown type \"+a)}function i(r){var t=typeof r;if(\"string\"===t){var e=n(r);if(32>e)return 1+e;if(256>e)return 2+e;if(65536>e)return 3+e;if(4294967296>e)return 5+e}if(r instanceof Uint8Array){var e=r.byteLength;if(256>e)return 2+e;if(65536>e)return 3+e;if(4294967296>e)return 5+e}if(\"number\"===t){if(Math.floor(r)!==r)return 9;if(r>=0){if(128>r)return 1;if(256>r)return 2;if(65536>r)return 3;if(4294967296>r)return 5;throw new Error(\"Number too big 0x\"+r.toString(16))}if(r>=-32)return 1;if(r>=-128)return 2;if(r>=-32768)return 3;if(r>=-2147483648)return 5;throw new Error(\"Number too small -0x\"+r.toString(16).substr(1))}if(\"boolean\"===t||null===r)return 1;if(\"object\"===t){var e,o=0;if(Array.isArray(r)){e=r.length;for(var a=0;e>a;a++)o+=i(r[a])}else{var u=Object.keys(r);e=u.length;for(var a=0;e>a;a++){var s=u[a];o+=i(s)+i(r[s])}}if(16>e)return 1+o;if(65536>e)return 3+o;if(4294967296>e)return 5+o;throw new Error(\"Array or object too long 0x\"+e.toString(16))}throw new Error(\"Unknown type \"+t)}function o(r){var t=new ArrayBuffer(i(r)),n=new DataView(t);return e(r,n,0),new Uint8Array(t)}function a(r,t,n){return t?new r(t.buffer,t.byteOffset,t.byteLength/(n||1)):void 0}function u(r){return a(DataView,r)}function s(r){return a(Uint8Array,r)}function f(r){return a(Int8Array,r)}function c(r){return a(Int32Array,r,4)}function d(r){return a(Float32Array,r,4)}function l(r,t){var n=r.length/2;t||(t=new Int16Array(n));for(var e=0,i=0;n>e;++e,i+=2)t[e]=r[i]<<8^r[i+1]<<0;return t}function v(r,t){var n=r.length;t||(t=new Uint8Array(2*n));for(var e=u(t),i=0;n>i;++i)e.setInt16(2*i,r[i]);return s(t)}function g(r,t){var n=r.length/4;t||(t=new Int32Array(n));for(var e=0,i=0;n>e;++e,i+=4)t[e]=r[i]<<24^r[i+1]<<16^r[i+2]<<8^r[i+3]<<0;return t}function L(r,t){var n=r.length;t||(t=new Uint8Array(4*n));for(var e=u(t),i=0;n>i;++i)e.setInt32(4*i,r[i]);return s(t)}function h(r,t){var n=r.length;t||(t=new Float32Array(n/4));for(var e=u(t),i=u(r),o=0,a=0,s=n/4;s>o;++o,a+=4)e.setFloat32(a,i.getFloat32(a),!0);return t}function y(r,t,n){var e=r.length,i=1/t;n||(n=new Float32Array(e));for(var o=0;e>o;++o)n[o]=r[o]*i;return n}function m(r,t,n){var e=r.length;n||(n=new Int32Array(e));for(var i=0;e>i;++i)n[i]=Math.round(r[i]*t);return n}function p(r,t){var n,e;if(!t){var i=0;for(n=0,e=r.length;e>n;n+=2)i+=r[n+1];t=new r.constructor(i)}var o=0;for(n=0,e=r.length;e>n;n+=2)for(var a=r[n],u=r[n+1],s=0;u>s;++s)t[o]=a,++o;return t}function U(r){if(0===r.length)return new Int32Array;var t,n,e=2;for(t=1,n=r.length;n>t;++t)r[t-1]!==r[t]&&(e+=2);var i=new Int32Array(e),o=0,a=1;for(t=1,n=r.length;n>t;++t)r[t-1]!==r[t]?(i[o]=r[t-1],i[o+1]=a,a=1,o+=2):++a;return i[o]=r[r.length-1],i[o+1]=a,i}function b(r,t){var n=r.length;t||(t=new r.constructor(n)),n&&(t[0]=r[0]);for(var e=1;n>e;++e)t[e]=r[e]+t[e-1];return t}function I(r,t){var n=r.length;t||(t=new r.constructor(n)),t[0]=r[0];for(var e=1;n>e;++e)t[e]=r[e]-r[e-1];return t}function w(r,t){var n,e,i=r instanceof Int8Array?127:32767,o=-i-1,a=r.length;if(!t){var u=0;for(n=0;a>n;++n)r[n]o&&++u;t=new Int32Array(u)}for(n=0,e=0;a>n;){for(var s=0;r[n]===i||r[n]===o;)s+=r[n],++n;s+=r[n],++n,t[e]=s,++e}return t}function C(r,t){var n,e=t?127:32767,i=-e-1,o=r.length,a=0;for(n=0;o>n;++n){var u=r[n];0===u?++a:a+=u===e||u===i?2:u>0?Math.ceil(u/e):Math.ceil(u/i)}var s=t?new Int8Array(a):new Int16Array(a),f=0;for(n=0;o>n;++n){var u=r[n];if(u>=0)for(;u>=e;)s[f]=e,++f,u-=e;else for(;i>=u;)s[f]=i,++f,u-=i;s[f]=u,++f}return s}function A(r,t){return b(p(r),t)}function x(r){return U(I(r))}function M(r,t,n){return y(p(r,c(n)),t,n)}function F(r,t){return U(m(r,t))}function S(r,t,n){return y(b(r,c(n)),t,n)}function E(r,t,n){return I(m(r,t),n)}function N(r,t,n){return y(w(r,c(n)),t,n)}function O(r,t,n){var e=w(r,c(n));return S(e,t,d(e))}function T(r,t,n){return C(E(r,t),n)}function k(r){var t=u(r),n=t.getInt32(0),e=t.getInt32(4),i=r.subarray(8,12),r=r.subarray(12);return[n,r,e,i]}function j(r,t,n,e){var i=new ArrayBuffer(12+e.byteLength),o=new Uint8Array(i),a=new DataView(i);return a.setInt32(0,r),a.setInt32(4,t),n&&o.set(n,8),o.set(e,12),o}function q(r){var t=r.length,n=s(r);return j(2,t,void 0,n)}function D(r){var t=r.length,n=L(r);return j(4,t,void 0,n)}function P(r,t){var n=r.length/t,e=L([t]),i=s(r);return j(5,n,e,i)}function z(r){var t=r.length,n=L(U(r));return j(6,t,void 0,n)}function B(r){var t=r.length,n=L(x(r));return j(8,t,void 0,n)}function V(r,t){var n=r.length,e=L([t]),i=L(F(r,t));return j(9,n,e,i)}function G(r,t){var n=r.length,e=L([t]),i=v(T(r,t));return j(10,n,e,i)}function R(r){var t={};return rr.forEach(function(n){void 0!==r[n]&&(t[n]=r[n])}),r.bondAtomList&&(t.bondAtomList=D(r.bondAtomList)),r.bondOrderList&&(t.bondOrderList=q(r.bondOrderList)),t.xCoordList=G(r.xCoordList,1e3),t.yCoordList=G(r.yCoordList,1e3),t.zCoordList=G(r.zCoordList,1e3),r.bFactorList&&(t.bFactorList=G(r.bFactorList,100)),r.atomIdList&&(t.atomIdList=B(r.atomIdList)),r.altLocList&&(t.altLocList=z(r.altLocList)),r.occupancyList&&(t.occupancyList=V(r.occupancyList,100)),t.groupIdList=B(r.groupIdList),t.groupTypeList=D(r.groupTypeList),r.secStructList&&(t.secStructList=q(r.secStructList,1)),r.insCodeList&&(t.insCodeList=z(r.insCodeList)),r.sequenceIndexList&&(t.sequenceIndexList=B(r.sequenceIndexList)),t.chainIdList=P(r.chainIdList,4),r.chainNameList&&(t.chainNameList=P(r.chainNameList,4)),t}function H(r){function t(r){for(var t={},n=0;r>n;n++){var e=o();t[e]=o()}return t}function n(t){var n=r.subarray(a,a+t);return a+=t,n}function e(t){var n=r.subarray(a,a+t);a+=t;var e=65535;if(t>e){for(var i=[],o=0;on;n++)t[n]=o();return t}function o(){var o,s,f=r[a];if(0===(128&f))return a++,f;if(128===(240&f))return s=15&f,a++,t(s);if(144===(240&f))return s=15&f,a++,i(s);if(160===(224&f))return s=31&f,a++,e(s);if(224===(224&f))return o=u.getInt8(a),a++,o;switch(f){case 192:return a++,null;case 194:return a++,!1;case 195:return a++,!0;case 196:return s=u.getUint8(a+1),a+=2,n(s);case 197:return s=u.getUint16(a+1),a+=3,n(s);case 198:return s=u.getUint32(a+1),a+=5,n(s);case 202:return o=u.getFloat32(a+1),a+=5,o;case 203:return o=u.getFloat64(a+1),a+=9,o;case 204:return o=r[a+1],a+=2,o;case 205:return o=u.getUint16(a+1),a+=3,o;case 206:return o=u.getUint32(a+1),a+=5,o;case 208:return o=u.getInt8(a+1),a+=2,o;case 209:return o=u.getInt16(a+1),a+=3,o;case 210:return o=u.getInt32(a+1),a+=5,o;case 217:return s=u.getUint8(a+1),a+=2,e(s);case 218:return s=u.getUint16(a+1),a+=3,e(s);case 219:return s=u.getUint32(a+1),a+=5,e(s);case 220:return s=u.getUint16(a+1),a+=3,i(s);case 221:return s=u.getUint32(a+1),a+=5,i(s);case 222:return s=u.getUint16(a+1),a+=3,t(s);case 223:return s=u.getUint32(a+1),a+=5,t(s)}throw new Error(\"Unknown type 0x\"+f.toString(16))}var a=0,u=new DataView(r.buffer);return o()}function W(r,t,n,e){switch(r){case 1:return h(t);case 2:return f(t);case 3:return l(t);case 4:return g(t);case 5:return s(t);case 6:return p(g(t),new Uint8Array(n));case 7:return p(g(t));case 8:return A(g(t));case 9:return M(g(t),g(e)[0]);case 10:return O(l(t),g(e)[0]);case 11:return y(l(t),g(e)[0]);case 12:return N(l(t),g(e)[0]);case 13:return N(f(t),g(e)[0]);case 14:return w(l(t));case 15:return w(f(t))}}function X(r,t){t=t||{};var n=t.ignoreFields,e={};return nr.forEach(function(t){var i=n?-1!==n.indexOf(t):!1,o=r[t];i||void 0===o||(o instanceof Uint8Array?e[t]=W.apply(null,k(o)):e[t]=o)}),e}function J(r){return String.fromCharCode.apply(null,r).replace(/\\0/g,\"\")}function K(r,t,n){n=n||{};var e,i,o,a,u,s,f=n.firstModelOnly,c=t.onModel,d=t.onChain,l=t.onGroup,v=t.onAtom,g=t.onBond,L=0,h=0,y=0,m=0,p=0,U=-1,b=r.chainNameList,I=r.secStructList,w=r.insCodeList,C=r.sequenceIndexList,A=r.atomIdList,x=r.bFactorList,M=r.altLocList,F=r.occupancyList,S=r.bondAtomList,E=r.bondOrderList;for(e=0,i=r.chainsPerModel.length;i>e&&!(f&&L>0);++e){var N=r.chainsPerModel[L];for(c&&c({chainCount:N,modelIndex:L}),o=0;N>o;++o){var O=r.groupsPerChain[h];if(d){var T=J(r.chainIdList.subarray(4*h,4*h+4)),k=null;b&&(k=J(b.subarray(4*h,4*h+4))),d({groupCount:O,chainIndex:h,modelIndex:L,chainId:T,chainName:k})}for(a=0;O>a;++a){var j=r.groupList[r.groupTypeList[y]],q=j.atomNameList.length;if(l){var D=null;I&&(D=I[y]);var P=null;r.insCodeList&&(P=String.fromCharCode(w[y]));var z=null;C&&(z=C[y]),l({atomCount:q,groupIndex:y,chainIndex:h,modelIndex:L,groupId:r.groupIdList[y],groupType:r.groupTypeList[y],groupName:j.groupName,singleLetterCode:j.singleLetterCode,chemCompType:j.chemCompType,secStruct:D,insCode:P,sequenceIndex:z})}for(u=0;q>u;++u){if(v){var B=null;A&&(B=A[m]);var V=null;x&&(V=x[m]);var G=null;M&&(G=String.fromCharCode(M[m]));var R=null;F&&(R=F[m]),v({atomIndex:m,groupIndex:y,chainIndex:h,modelIndex:L,atomId:B,element:j.elementList[u],atomName:j.atomNameList[u],formalCharge:j.formalChargeList[u],xCoord:r.xCoordList[m],yCoord:r.yCoordList[m],zCoord:r.zCoordList[m],bFactor:V,altLoc:G,occupancy:R})}m+=1}if(g){var H=j.bondAtomList;for(u=0,s=j.bondOrderList.length;s>u;++u)g({atomIndex1:m-q+H[2*u],atomIndex2:m-q+H[2*u+1],bondOrder:j.bondOrderList[u]})}y+=1}h+=1}if(p=U+1,U=m-1,g&&S)for(u=0,s=S.length;s>u;u+=2){var W=S[u],X=S[u+1];(W>=p&&U>=W||X>=p&&U>=X)&&g({atomIndex1:W,atomIndex2:X,bondOrder:E?E[u/2]:null})}L+=1}}function Q(r){return o(R(r))}function Y(r,t){r instanceof ArrayBuffer&&(r=new Uint8Array(r));var n;return n=r instanceof Uint8Array?H(r):r,X(n,t)}function Z(r,t,n,e){function i(){try{var r=Y(o.response);n(r)}catch(t){e(t)}}var o=new XMLHttpRequest;o.addEventListener(\"load\",i,!0),o.addEventListener(\"error\",e,!0),o.responseType=\"arraybuffer\",o.open(\"GET\",t+r.toUpperCase()),o.send()}function $(r,t,n){Z(r,or,t,n)}function _(r,t,n){Z(r,ar,t,n)}var rr=[\"mmtfVersion\",\"mmtfProducer\",\"unitCell\",\"spaceGroup\",\"structureId\",\"title\",\"depositionDate\",\"releaseDate\",\"experimentalMethods\",\"resolution\",\"rFree\",\"rWork\",\"bioAssemblyList\",\"ncsOperatorList\",\"entityList\",\"groupList\",\"numBonds\",\"numAtoms\",\"numGroups\",\"numChains\",\"numModels\",\"groupsPerChain\",\"chainsPerModel\"],tr=[\"xCoordList\",\"yCoordList\",\"zCoordList\",\"groupIdList\",\"groupTypeList\",\"chainIdList\",\"bFactorList\",\"atomIdList\",\"altLocList\",\"occupancyList\",\"secStructList\",\"insCodeList\",\"sequenceIndexList\",\"chainNameList\",\"bondAtomList\",\"bondOrderList\"],nr=rr.concat(tr),er=\"v1.1.0dev\",ir=\"//mmtf.rcsb.org/v1.0/\",or=ir+\"full/\",ar=ir+\"reduced/\";r.encode=Q,r.decode=Y,r.traverse=K,r.fetch=$,r.fetchReduced=_,r.version=er,r.fetchUrl=or,r.fetchReducedUrl=ar,r.encodeMsgpack=o,r.encodeMmtf=R,r.decodeMsgpack=H,r.decodeMmtf=X});","module.exports = __WEBPACK_EXTERNAL_MODULE__535__;","module.exports = __WEBPACK_EXTERNAL_MODULE__698__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar defaults = {\n lines: 12,\n length: 7,\n width: 5,\n radius: 10,\n scale: 1.0,\n corners: 1,\n color: '#000',\n fadeColor: 'transparent',\n animation: 'spinner-line-fade-default',\n rotate: 0,\n direction: 1,\n speed: 1,\n zIndex: 2e9,\n className: 'spinner',\n top: '50%',\n left: '50%',\n shadow: '0 0 1px transparent', // prevent aliased lines\n position: 'absolute',\n};\nvar Spinner = /** @class */ (function () {\n function Spinner(opts) {\n if (opts === void 0) { opts = {}; }\n this.opts = __assign(__assign({}, defaults), opts);\n }\n /**\n * Adds the spinner to the given target element. If this instance is already\n * spinning, it is automatically removed from its previous target by calling\n * stop() internally.\n */\n Spinner.prototype.spin = function (target) {\n this.stop();\n this.el = document.createElement('div');\n this.el.className = this.opts.className;\n this.el.setAttribute('role', 'progressbar');\n this.el.style.position = this.opts.position;\n this.el.style.width = \"0\";\n this.el.style.zIndex = this.opts.zIndex.toString();\n this.el.style.left = this.opts.left;\n this.el.style.top = this.opts.top;\n this.el.style.transform = \"scale(\".concat(this.opts.scale, \")\");\n if (target) {\n target.insertBefore(this.el, target.firstChild || null);\n }\n drawLines(this.el, this.opts);\n return this;\n };\n /**\n * Stops and removes the Spinner.\n * Stopped spinners may be reused by calling spin() again.\n */\n Spinner.prototype.stop = function () {\n if (this.el) {\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n this.el = undefined;\n }\n return this;\n };\n return Spinner;\n}());\nexport { Spinner };\n/**\n * Returns the line color from the given string or array.\n */\nfunction getColor(color, idx) {\n return typeof color == 'string' ? color : color[idx % color.length];\n}\n/**\n * Internal method that draws the individual lines.\n */\nfunction drawLines(el, opts) {\n var borderRadius = (Math.round(opts.corners * opts.width * 500) / 1000) + 'px';\n var shadow = 'none';\n if (opts.shadow === true) {\n shadow = '0 2px 4px #000'; // default shadow\n }\n else if (typeof opts.shadow === 'string') {\n shadow = opts.shadow;\n }\n var shadows = parseBoxShadow(shadow);\n for (var i = 0; i < opts.lines; i++) {\n var degrees = ~~(360 / opts.lines * i + opts.rotate);\n var backgroundLine = document.createElement('div');\n backgroundLine.style.position = 'absolute';\n backgroundLine.style.top = \"\".concat(-opts.width / 2, \"px\");\n backgroundLine.style.width = (opts.length + opts.width) + 'px';\n backgroundLine.style.height = opts.width + 'px';\n backgroundLine.style.background = getColor(opts.fadeColor, i);\n backgroundLine.style.borderRadius = borderRadius;\n backgroundLine.style.transformOrigin = 'left';\n backgroundLine.style.transform = \"rotate(\".concat(degrees, \"deg) translateX(\").concat(opts.radius, \"px)\");\n var delay = i * opts.direction / opts.lines / opts.speed;\n delay -= 1 / opts.speed; // so initial animation state will include trail\n var line = document.createElement('div');\n line.style.width = '100%';\n line.style.height = '100%';\n line.style.background = getColor(opts.color, i);\n line.style.borderRadius = borderRadius;\n line.style.boxShadow = normalizeShadow(shadows, degrees);\n line.style.animation = \"\".concat(1 / opts.speed, \"s linear \").concat(delay, \"s infinite \").concat(opts.animation);\n backgroundLine.appendChild(line);\n el.appendChild(backgroundLine);\n }\n}\nfunction parseBoxShadow(boxShadow) {\n var regex = /^\\s*([a-zA-Z]+\\s+)?(-?\\d+(\\.\\d+)?)([a-zA-Z]*)\\s+(-?\\d+(\\.\\d+)?)([a-zA-Z]*)(.*)$/;\n var shadows = [];\n for (var _i = 0, _a = boxShadow.split(','); _i < _a.length; _i++) {\n var shadow = _a[_i];\n var matches = shadow.match(regex);\n if (matches === null) {\n continue; // invalid syntax\n }\n var x = +matches[2];\n var y = +matches[5];\n var xUnits = matches[4];\n var yUnits = matches[7];\n if (x === 0 && !xUnits) {\n xUnits = yUnits;\n }\n if (y === 0 && !yUnits) {\n yUnits = xUnits;\n }\n if (xUnits !== yUnits) {\n continue; // units must match to use as coordinates\n }\n shadows.push({\n prefix: matches[1] || '', // could have value of 'inset' or undefined\n x: x,\n y: y,\n xUnits: xUnits,\n yUnits: yUnits,\n end: matches[8],\n });\n }\n return shadows;\n}\n/**\n * Modify box-shadow x/y offsets to counteract rotation\n */\nfunction normalizeShadow(shadows, degrees) {\n var normalized = [];\n for (var _i = 0, shadows_1 = shadows; _i < shadows_1.length; _i++) {\n var shadow = shadows_1[_i];\n var xy = convertOffset(shadow.x, shadow.y, degrees);\n normalized.push(shadow.prefix + xy[0] + shadow.xUnits + ' ' + xy[1] + shadow.yUnits + shadow.end);\n }\n return normalized.join(', ');\n}\nfunction convertOffset(x, y, degrees) {\n var radians = degrees * Math.PI / 180;\n var sin = Math.sin(radians);\n var cos = Math.cos(radians);\n return [\n Math.round((x * cos + y * sin) * 1000) / 1000,\n Math.round((-x * sin + y * cos) * 1000) / 1000,\n ];\n}\n","//----------------------------------------------------------------------------\r\n// Timer\r\n\r\nexport default class Timer {\r\n constructor() {\r\n this.startTime = 0;\r\n this.oldTime = 0;\r\n this.elapsedTime = 0;\r\n this.running = false;\r\n }\r\n\r\n start() {\r\n this.startTime = Timer.now();\r\n this.oldTime = this.startTime;\r\n this.running = true;\r\n }\r\n\r\n stop() {\r\n this.getElapsedTime();\r\n this.running = false;\r\n }\r\n\r\n getElapsedTime() {\r\n this.update();\r\n return this.elapsedTime;\r\n }\r\n\r\n update() {\r\n let delta = 0;\r\n if (this.running) {\r\n const newTime = Timer.now();\r\n delta = 0.001 * (newTime - this.oldTime);\r\n this.oldTime = newTime;\r\n this.elapsedTime += delta;\r\n }\r\n\r\n return delta;\r\n }\r\n}\r\n\r\nTimer.now = (function () {\r\n const p = typeof window !== 'undefined' && window.performance;\r\n return (p && p.now) ? p.now.bind(p) : Date.now;\r\n}());\r\n","import Timer from '../Timer';\r\n\r\nconst { now } = Timer;\r\n\r\nfunction createElement(tag, id, css) {\r\n const element = document.createElement(tag);\r\n element.id = id;\r\n element.style.cssText = css;\r\n return element;\r\n}\r\n\r\nclass Stats {\r\n constructor() {\r\n this.domElement = createElement('div', 'stats', 'padding:8px');\r\n this._text = createElement('p', 'fps', 'margin:0;color:silver;font-size:large');\r\n this.domElement.appendChild(this._text);\r\n\r\n this._startTime = now();\r\n this._prevTime = this._startTime;\r\n\r\n this._deltas = new Array(20);\r\n this._index = 0;\r\n this._total = 0.0;\r\n this._count = 0;\r\n }\r\n\r\n end() {\r\n const time = now();\r\n const delta = time - this._startTime;\r\n\r\n if (this._count < this._deltas.length) {\r\n this._count++;\r\n } else {\r\n this._total -= this._deltas[this._index];\r\n }\r\n this._total += delta;\r\n this._deltas[this._index] = delta;\r\n this._index = (this._index + 1) % this._deltas.length;\r\n\r\n this.ms = this._total / this._count;\r\n this.fps = 1000 / this.ms;\r\n\r\n if (time > this._prevTime + 1000) {\r\n this._text.textContent = this.fps.toPrecision(2);\r\n this._prevTime = time;\r\n }\r\n\r\n return time;\r\n }\r\n\r\n update() {\r\n this._startTime = this.end();\r\n }\r\n\r\n show(on) {\r\n if (on === undefined) {\r\n on = true;\r\n }\r\n this.domElement.style.display = on ? 'block' : 'none';\r\n }\r\n}\r\n\r\nexport default Stats;\r\n","/**\r\n * This class introduces the simplest event system.\r\n */\r\n\r\nimport _ from 'lodash';\r\n\r\nfunction isUndefOrEqual(param, value) {\r\n return !param || param === value;\r\n}\r\n\r\n/**\r\n * Creates empty dispatcher.\r\n *\r\n * @exports EventDispatcher\r\n * @constructor\r\n */\r\nfunction EventDispatcher() {\r\n this._handlers = {};\r\n}\r\n\r\n/**\r\n * Binds callback on specific event type. Optional `context` parameter\r\n * could be used as 'this' for the `callback`.\r\n * @param {string} type Event name.\r\n * @param {function} callback Callback function.\r\n * @param {Object} [context] 'This' object for the callback.\r\n */\r\nEventDispatcher.prototype.addEventListener = function (type, callback, context) {\r\n let handlers = this._handlers[type];\r\n\r\n if (!handlers) {\r\n this._handlers[type] = [];\r\n handlers = this._handlers[type];\r\n }\r\n\r\n const params = [callback, context];\r\n function _checkPar(par) {\r\n return par[0] === params[0] && par[1] === params[1];\r\n }\r\n\r\n if (_.find(handlers, _checkPar) === undefined) {\r\n handlers.push(params);\r\n }\r\n};\r\n\r\n/**\r\n * Removes a previously-bound callback function from an object.\r\n * If no `context` is specified, all versions of the `callback` with different\r\n * contexts will be removed.\r\n * If no `callback` is specified, all callbacks of the `type` will be removed.\r\n * If no `type` is specified, callbacks for all events will be removed.\r\n * @param {?string} [type] Event type.\r\n * @param {function} [callback] Callback function.\r\n * @param {Object} [context] 'This' object for the callback.\r\n */\r\nEventDispatcher.prototype.removeEventListener = function (type, callback, context) {\r\n const self = this;\r\n _.forEach(self._handlers, (handler, ev) => {\r\n _.remove(handler, (values) => isUndefOrEqual(type, ev)\r\n && isUndefOrEqual(callback, values[0])\r\n && isUndefOrEqual(context, values[1] || self));\r\n });\r\n\r\n this._handlers = _.omitBy(self._handlers, (handler) => handler.length === 0);\r\n};\r\n\r\n/**\r\n * Makes all the callbacks for the specific `event` to trigger.\r\n * @param {Object} event Event.\r\n * @param {string} event.type Type of the event.\r\n */\r\nEventDispatcher.prototype.dispatchEvent = function (event) {\r\n const self = this;\r\n\r\n _.forEach(this._handlers[event.type], (callback) => {\r\n const context = callback[1] || self;\r\n callback[0].apply(context, [event]);\r\n });\r\n};\r\n\r\nexport default EventDispatcher;\r\n","/**\r\n * This module contains class for logging.\r\n * Returns an instance of a logger that have already been created.\r\n * Allows users to log messages for five different levels,\r\n * enable console output and catch signal on each message.\r\n */\r\nimport _ from 'lodash';\r\nimport EventDispatcher from './EventDispatcher';\r\n\r\nconst priorities = {\r\n debug: 0,\r\n info: 1,\r\n report: 2,\r\n warn: 3,\r\n error: 4,\r\n};\r\n\r\n/**\r\n * Create new Logger.\r\n *\r\n * @exports Logger\r\n * @extends EventDispatcher\r\n * @constructor\r\n */\r\nfunction Logger() {\r\n EventDispatcher.call(this);\r\n /** Boolean flag that toggles output to browser console.\r\n * @type {boolean}\r\n */\r\n this.console = false;\r\n this._priority = priorities.warn;\r\n}\r\n\r\nLogger.prototype = Object.create(EventDispatcher.prototype);\r\nLogger.prototype.constructor = Logger;\r\n\r\n/**\r\n * Create new clean instance of the logger.\r\n * @returns {Logger}\r\n */\r\nLogger.prototype.instantiate = function () {\r\n return new Logger();\r\n};\r\n\r\nfunction verify(number) {\r\n if (!_.isNumber(number)) {\r\n throw new Error('Wrong log level specified!');\r\n }\r\n return number;\r\n}\r\n\r\n/**\r\n * @property {string} current threshold for signals and console output.\r\n * @name Logger#level\r\n */\r\nObject.defineProperty(Logger.prototype, 'level', {\r\n get() {\r\n return _.findKey(priorities, (value) => value === this._priority);\r\n },\r\n set(level) {\r\n this._priority = verify(priorities[level]);\r\n },\r\n});\r\n\r\n/**\r\n * Returns the list of all possible level values.\r\n * @returns {Array}\r\n */\r\nLogger.prototype.levels = function () {\r\n return Object.keys(priorities);\r\n};\r\n\r\n/**\r\n * Add new message with specified level.\r\n * @param {string} level - level of the message, must be one of the\r\n * {'debug' | 'info' | 'report' | 'warn' | 'error'}\r\n * @param {string} message\r\n */\r\nLogger.prototype.message = function (level, message) {\r\n const priority = verify(priorities[level]);\r\n this._message(priority, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('debug', ...);\r\n * @param message\r\n */\r\nLogger.prototype.debug = function (message) {\r\n this._message(priorities.debug, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('info', ...);\r\n * @param message\r\n */\r\nLogger.prototype.info = function (message) {\r\n this._message(priorities.info, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('report', ...);\r\n * @param message\r\n */\r\nLogger.prototype.report = function (message) {\r\n this._message(priorities.report, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('warn', ...);\r\n * @param message\r\n */\r\nLogger.prototype.warn = function (message) {\r\n this._message(priorities.warn, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('error', ...);\r\n * @param message\r\n */\r\nLogger.prototype.error = function (message) {\r\n this._message(priorities.error, message);\r\n};\r\n\r\n/**\r\n * Add new message with specified priority.\r\n * @param {number} priority - priority of the message\r\n * @param {string} message\r\n * @private\r\n */\r\nLogger.prototype._message = function (priority, message) {\r\n if (priority < this._priority) {\r\n return;\r\n }\r\n const level = _.findKey(priorities, (value) => value === priority);\r\n message = String(message);\r\n if (this.console) {\r\n const output = `miew:${level}: ${message}`;\r\n if (level === 'error') {\r\n console.error(output); // NOSONAR\r\n } else if (level === 'warn') {\r\n console.warn(output); // NOSONAR\r\n } else {\r\n console.log(output); // NOSONAR\r\n }\r\n }\r\n this.dispatchEvent({ type: 'message', level, message });\r\n};\r\n\r\nexport default new Logger();\r\n","import _ from 'lodash';\r\nimport logger from './utils/logger';\r\n\r\nconst browserType = {\r\n DEFAULT: 0,\r\n SAFARI: 1,\r\n};\r\n//----------------------------------------------------------------------------\r\n// Query string\r\n\r\n/**\r\n * Escape only dangerous chars in a query string component, use a plus instead of a space.\r\n *\r\n * [RFC 3986](https://tools.ietf.org/html/rfc3986) allows the following chars in the query (see 3.4):\r\n *\r\n * A-Z a-z 0-9 - _ . ~ ! $ & ' ( ) * + , ; = : @ / ?\r\n *\r\n * For query string elements we need to escape ampersand, equal sign, and plus,\r\n * but encodeURIComponent() function encodes anything except for the following:\r\n *\r\n * A-Z a-z 0-9 - _ . ~ ! ' ( ) *\r\n *\r\n * @param {string} text - key or value to encode\r\n * @param {string} excludeExp - regexp for symbols to exclude from encoding\r\n * @returns {string} encoded string\r\n */\r\nfunction encodeQueryComponent(text, excludeExp) {\r\n const encode = (code) => String.fromCharCode(parseInt(code.substr(1), 16));\r\n return encodeURIComponent(text).replace(excludeExp, encode).replace(/%20/g, '+');\r\n}\r\n\r\n/**\r\n * Unescape dangerous chars in a query string component.\r\n *\r\n * @param {string} text - encoded key or value\r\n * @returns {string} decoded string\r\n * @see {@link encodeQueryComponent}\r\n */\r\nfunction decodeQueryComponent(text) {\r\n return decodeURIComponent(text.replace(/\\+/g, ' '));\r\n}\r\n\r\n/**\r\n * Parse URL and extract an array of parameters.\r\n * @param {string?} url - URL or query string to parse\r\n * @returns {Array} array of (key, value) pairs.\r\n */\r\nfunction getUrlParameters(url) {\r\n url = url || window.location.search;\r\n\r\n const query = url.substring(url.indexOf('?') + 1);\r\n const search = /([^&=]+)=?([^&]*)/g;\r\n const result = [];\r\n let match;\r\n\r\n while ((match = search.exec(query)) !== null) { // eslint-disable-line no-cond-assign\r\n result.push([decodeQueryComponent(match[1]), decodeQueryComponent(match[2])]);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Parse URL and extract an array of parameters as a hash.\r\n * @param {string?} url - URL or query string to parse\r\n * @returns {Object}\r\n */\r\nfunction getUrlParametersAsDict(url) {\r\n const result = {};\r\n const a = getUrlParameters(url);\r\n for (let i = 0; i < a.length; ++i) {\r\n const [key, value] = a[i];\r\n result[key] = value;\r\n }\r\n return result;\r\n}\r\n\r\nfunction resolveURL(str) {\r\n if (typeof URL !== 'undefined') {\r\n try {\r\n if (typeof window !== 'undefined') {\r\n return new URL(str, window.location).href;\r\n }\r\n return new URL(str).href;\r\n } catch {\r\n // IE 11 has a URL object with no constructor available so just try a different approach instead\r\n }\r\n }\r\n if (typeof document !== 'undefined') {\r\n const anchor = document.createElement('a');\r\n anchor.href = str;\r\n return anchor.href;\r\n }\r\n return str;\r\n}\r\n\r\n/**\r\n * Generates regular expression object that includes all symbols\r\n * listed in the argument\r\n * @param symbolStr {string} - String containing characters list.\r\n * @returns {RegExp} - Regular expression.\r\n */\r\nfunction generateRegExp(symbolStr) {\r\n const symbolList = [];\r\n\r\n for (let i = 0, n = symbolStr.length; i < n; ++i) {\r\n symbolList[symbolList.length] = symbolStr[i].charCodeAt(0).toString(16);\r\n }\r\n\r\n const listStr = symbolList.join('|');\r\n\r\n return new RegExp(`%(?:${listStr})`, 'gi');\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Create HTML element\r\n\r\nfunction createElement(tag, attrs, content) {\r\n const element = document.createElement(tag);\r\n let i;\r\n let n;\r\n if (attrs) {\r\n const keys = Object.keys(attrs);\r\n for (i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n element.setAttribute(key, attrs[key]);\r\n }\r\n }\r\n if (content) {\r\n if (!(content instanceof Array)) {\r\n content = [content];\r\n }\r\n for (i = 0, n = content.length; i < n; ++i) {\r\n const child = content[i];\r\n if (typeof child === 'string') {\r\n element.appendChild(document.createTextNode(child));\r\n } else if (child instanceof HTMLElement) {\r\n element.appendChild(child);\r\n }\r\n }\r\n }\r\n return element;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Easy inheritance\r\n\r\n/**\r\n * Derive the class from the base.\r\n * @param cls {function} - Class (constructor) to derive.\r\n * @param base {function} - Class (constructor) to derive from.\r\n * @param members {object=} - Optional instance members to add.\r\n * @param statics {object=} - Optional static class members to add.\r\n * @returns {function} Original class.\r\n */\r\nfunction deriveClass(cls, base, members, statics) {\r\n cls.prototype = _.assign(Object.create(base.prototype), { constructor: cls }, members);\r\n if (statics) {\r\n _.assign(cls, statics);\r\n }\r\n return cls;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Deep prototyping\r\n\r\nfunction deriveDeep(obj, needZeroOwnProperties) {\r\n let res = obj;\r\n let i;\r\n let n;\r\n if (obj instanceof Array) {\r\n res = new Array(obj.length);\r\n for (i = 0, n = obj.length; i < n; ++i) {\r\n res[i] = deriveDeep(obj[i]);\r\n }\r\n } else if (obj instanceof Object) {\r\n res = Object.create(obj);\r\n const keys = Object.keys(obj);\r\n for (i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n const value = obj[key];\r\n const copy = deriveDeep(value);\r\n if (copy !== value) {\r\n res[key] = copy;\r\n }\r\n }\r\n if (needZeroOwnProperties && Object.keys(res).length > 0) {\r\n res = Object.create(res);\r\n }\r\n }\r\n return res;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Colors\r\n\r\nfunction hexColor(color) {\r\n const hex = (`0000000${color.toString(16)}`).substr(-6);\r\n return `#${hex}`;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Debug tracing\r\n\r\nfunction DebugTracer(namespace) {\r\n let enabled = false;\r\n\r\n this.enable = function (on) {\r\n enabled = on;\r\n };\r\n\r\n let indent = 0;\r\n const methods = Object.keys(namespace);\r\n\r\n function wrap(method_, name_) {\r\n return function (...args) {\r\n const spaces = DebugTracer.spaces.substr(0, indent * 2);\r\n if (enabled) {\r\n logger.debug(`${spaces + name_} {`);\r\n }\r\n indent++;\r\n const result = method_.apply(this, args);\r\n indent--;\r\n if (enabled) {\r\n logger.debug(`${spaces}} // ${name_}`);\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n for (let i = 0, n = methods.length; i < n; ++i) {\r\n const name = methods[i];\r\n const method = namespace[name];\r\n if (method instanceof Function && name !== 'constructor') {\r\n namespace[name] = wrap(method, name);\r\n }\r\n }\r\n}\r\n\r\nDebugTracer.spaces = ' ';\r\n\r\nclass OutOfMemoryError extends Error {\r\n constructor(message) {\r\n super();\r\n this.name = 'OutOfMemoryError';\r\n this.message = message;\r\n }\r\n}\r\n\r\nfunction allocateTyped(TypedArrayName, size) {\r\n let result = null;\r\n try {\r\n result = new TypedArrayName(size);\r\n } catch (e) {\r\n if (e instanceof RangeError) {\r\n throw new OutOfMemoryError(e.message);\r\n } else {\r\n throw e;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Float array conversion\r\n\r\nfunction bytesToBase64(/** ArrayBuffer */ buffer) {\r\n const bytes = new Uint8Array(buffer);\r\n let binary = '';\r\n for (let i = 0; i < bytes.byteLength; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return window.btoa(binary);\r\n}\r\n\r\nfunction bytesFromBase64(/** string */ str) {\r\n const binary = window.atob(str);\r\n const bytes = new Uint8Array(binary.length);\r\n for (let i = 0; i < bytes.length; ++i) {\r\n bytes[i] = binary[i].charCodeAt(0);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\nfunction arrayToBase64(/** number[] */ array, /** function */ TypedArrayClass) {\r\n return bytesToBase64(new TypedArrayClass(array).buffer);\r\n}\r\n\r\nfunction arrayFromBase64(/** string */ str, /** function */ TypedArrayClass) {\r\n return Array.prototype.slice.call(new TypedArrayClass(bytesFromBase64(str)));\r\n}\r\n\r\n// NOTE: this is 1-level comparison\r\nfunction compareOptionsWithDefaults(opts, defOpts) {\r\n const optsStr = [];\r\n if (defOpts && opts) {\r\n const keys = Object.keys(opts);\r\n for (let p = 0; p < keys.length; ++p) {\r\n const key = keys[p];\r\n const value = opts[key];\r\n // TODO add processing for tree structure\r\n if (!(value instanceof Object) && typeof defOpts[key] !== 'undefined' && defOpts[key] !== value) {\r\n optsStr.push(`${key}:${value}`);\r\n }\r\n }\r\n if (optsStr.length > 0) {\r\n return `!${optsStr.join()}`;\r\n }\r\n }\r\n return '';\r\n}\r\n\r\nfunction isAlmostPlainObject(o) {\r\n if (_.isPlainObject(o)) {\r\n return true;\r\n }\r\n const proto = o && Object.getPrototypeOf(o);\r\n return !!proto && !proto.hasOwnProperty('constructor') && isAlmostPlainObject(proto);\r\n}\r\n\r\n/**\r\n * Build an object that contains properties (and subproperties) of `src` different from those\r\n * in `dst`. Objects are parsed recursively, other values (including arrays) are compared for\r\n * equality using `_.isEqual()`.\r\n * @param {!object} src - a new object to compare, may contain changed or new properties\r\n * @param {!object} dst - an old reference object\r\n */\r\nfunction objectsDiff(src, dst) {\r\n const diff = {};\r\n _.forIn(src, (srcValue, key) => {\r\n const dstValue = dst[key];\r\n if (isAlmostPlainObject(srcValue) && isAlmostPlainObject(dstValue)) {\r\n const deepDiff = objectsDiff(srcValue, dstValue);\r\n if (!_.isEmpty(deepDiff)) {\r\n diff[key] = deepDiff;\r\n }\r\n } else if (!_.isEqual(srcValue, dstValue)) {\r\n diff[key] = srcValue;\r\n }\r\n });\r\n return diff;\r\n}\r\n\r\nfunction forInRecursive(object, callback) {\r\n function iterateThrough(obj, prefix) {\r\n _.forIn(obj, (value, key) => {\r\n const newPref = prefix + (prefix.length > 0 ? '.' : '');\r\n if (value instanceof Object) {\r\n iterateThrough(value, newPref + key);\r\n } else if (value !== undefined) {\r\n callback(value, newPref + key);\r\n }\r\n });\r\n }\r\n iterateThrough(object, '');\r\n}\r\n\r\nfunction enquoteString(value) {\r\n if (_.isString(value)) {\r\n return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\r\n }\r\n return value;\r\n}\r\n\r\nfunction unquoteString(value) {\r\n if (!_.isString(value)) {\r\n return value;\r\n }\r\n if (value[0] === '\"' && value[value.length - 1] === '\"') {\r\n value = value.slice(1, value.length - 1);\r\n return value.replace(/\\\\\"/g, '\"');\r\n }\r\n if (value[0] === \"'\" && value[value.length - 1] === \"'\") {\r\n value = value.slice(1, value.length - 1);\r\n return value.replace(/\\\\'/g, \"'\");\r\n }\r\n throw new SyntaxError('Incorrect string format, can\\'t unqute it');\r\n}\r\n\r\nfunction getFileExtension(fileName) {\r\n return fileName.slice((Math.max(0, fileName.lastIndexOf('.')) || Infinity));\r\n}\r\n\r\nfunction splitFileName(fileName) {\r\n const ext = getFileExtension(fileName);\r\n const name = fileName.slice(0, fileName.length - ext.length);\r\n return [name, ext];\r\n}\r\n\r\nfunction dataUrlToBlob(url) {\r\n const parts = url.split(/[:;,]/);\r\n const partsCount = parts.length;\r\n if (partsCount >= 3 && parts[partsCount - 2] === 'base64') {\r\n return new Blob([bytesFromBase64(parts[partsCount - 1])]);\r\n }\r\n return null;\r\n}\r\n\r\nfunction getBrowser() {\r\n if (navigator.vendor && navigator.vendor.indexOf('Apple') > -1\r\n && navigator.userAgent\r\n && navigator.userAgent.indexOf('CriOS') === -1\r\n && navigator.userAgent.indexOf('FxiOS') === -1) {\r\n return browserType.SAFARI;\r\n }\r\n return browserType.DEFAULT;\r\n}\r\n\r\nfunction shotOpen(url) {\r\n if (typeof window !== 'undefined') {\r\n window.open().document.write(``);\r\n }\r\n}\r\n\r\nfunction shotDownload(dataUrl, filename) {\r\n if (!dataUrl || dataUrl.substr(0, 5) !== 'data:') {\r\n return;\r\n }\r\n if (!filename) {\r\n filename = ['screenshot-', +new Date(), '.png'].join('');\r\n }\r\n if (typeof window !== 'undefined' && window.navigator && window.navigator.msSaveBlob) {\r\n window.navigator.msSaveBlob(dataUrlToBlob(dataUrl), filename);\r\n } else if (typeof document !== 'undefined') {\r\n const link = document.createElement('a');\r\n link.download = filename;\r\n link.innerHTML = 'download';\r\n link.href = window.URL.createObjectURL(dataUrlToBlob(dataUrl));\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n}\r\n\r\nfunction download(data, filename, type) {\r\n const blobData = new Blob([data]);\r\n\r\n if (!filename) {\r\n filename = ['data', +new Date()].join('');\r\n }\r\n\r\n if (!type) {\r\n filename += blobData.type || '.bin';\r\n } else {\r\n filename += `.${type}`;\r\n }\r\n\r\n if (typeof window !== 'undefined' && window.navigator && window.navigator.msSaveBlob) {\r\n window.navigator.msSaveBlob(blobData, filename);\r\n } else if (typeof document !== 'undefined') {\r\n const link = document.createElement('a');\r\n link.download = filename;\r\n link.innerHTML = 'download';\r\n link.href = window.URL.createObjectURL(blobData);\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n}\r\n\r\nfunction copySubArrays(src, dst, indices, itemSize) {\r\n for (let i = 0, n = indices.length; i < n; ++i) {\r\n for (let j = 0; j < itemSize; ++j) {\r\n dst[i * itemSize + j] = src[indices[i] * itemSize + j];\r\n }\r\n }\r\n}\r\n\r\nfunction shallowCloneNode(node) {\r\n const newNode = node.cloneNode(true);\r\n newNode.worldPos = node.worldPos;\r\n // .style property is readonly, so \"newNode.style = node.style;\" won't work (and we don't need it, right?)\r\n return newNode;\r\n}\r\n\r\nconst unquotedStringRE = /^[a-zA-Z0-9_]*$/;\r\nconst enquoteHelper = ['\"', '', '\"'];\r\n\r\n// verify and correct if needed selctor identifier\r\nfunction correctSelectorIdentifier(value) {\r\n if (unquotedStringRE.test(value)) {\r\n return value;\r\n }\r\n // quote incorrect identifier\r\n enquoteHelper[1] = value;\r\n return enquoteHelper.join('');\r\n}\r\n\r\n/**\r\n * Concatenates two TypedArray. Doesn't check null refs o type equality\r\n * Attention! It must be use very rarely because requires memory reallocation every time. Use MergeTypedArraysUnsafe to\r\n * unite array of subarrays.\r\n * @param{TypedArray} first - destination array\r\n * @param{TypedArray} second - source array\r\n * @returns{TypedArray} resulting concatenated array\r\n */\r\nfunction concatTypedArraysUnsafe(first, second) {\r\n const result = new first.constructor(first.length + second.length);\r\n result.set(first);\r\n result.set(second, first.length);\r\n return result;\r\n}\r\n\r\n/**\r\n * Merges array of TypedArray into TypedArray. Doesn't check null refs o type equality\r\n * @param{array} array - source array of subarrays\r\n * @returns{TypedArray} resulting merged array\r\n */\r\nfunction mergeTypedArraysUnsafe(array) {\r\n if (array.length <= 0) {\r\n return null;\r\n }\r\n // count the size\r\n const size = array.reduce((acc, cur) => acc + cur.length, 0);\r\n // create combined array\r\n const result = new array[0].constructor(size);\r\n for (let i = 0, start = 0; i < array.length; i++) {\r\n const count = array[i].length;\r\n result.set(array[i], start);\r\n start += count;\r\n }\r\n return result;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Exports\r\n\r\nexport default {\r\n browserType,\r\n encodeQueryComponent,\r\n decodeQueryComponent,\r\n getUrlParameters,\r\n getUrlParametersAsDict,\r\n resolveURL,\r\n generateRegExp,\r\n createElement,\r\n deriveClass,\r\n deriveDeep,\r\n hexColor,\r\n DebugTracer,\r\n OutOfMemoryError,\r\n allocateTyped,\r\n bytesFromBase64,\r\n bytesToBase64,\r\n arrayFromBase64,\r\n arrayToBase64,\r\n compareOptionsWithDefaults,\r\n objectsDiff,\r\n forInRecursive,\r\n enquoteString,\r\n unquoteString,\r\n getBrowser,\r\n shotOpen,\r\n shotDownload,\r\n copySubArrays,\r\n shallowCloneNode,\r\n correctSelectorIdentifier,\r\n getFileExtension,\r\n splitFileName,\r\n download,\r\n concatTypedArraysUnsafe,\r\n mergeTypedArraysUnsafe,\r\n};\r\n","import EventDispatcher from './EventDispatcher';\r\n\r\nexport default class JobHandle extends EventDispatcher {\r\n constructor() {\r\n super();\r\n this._shouldCancel = false;\r\n }\r\n\r\n cancel() {\r\n this._shouldCancel = true;\r\n this.dispatchEvent({ type: 'cancel' });\r\n }\r\n\r\n shouldCancel() {\r\n return this._shouldCancel;\r\n }\r\n\r\n // slaves use this to notify master about their events\r\n // master routes these notifications to a single event slot\r\n notify(event) {\r\n this.dispatchEvent({ type: 'notification', slaveEvent: event });\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport utils from './utils';\r\nimport EventDispatcher from './utils/EventDispatcher';\r\n\r\nconst VERSION = 0;\r\n\r\n//----------------------------------------------------------------------------\r\n// DEFAULT SETTINGS\r\n//----------------------------------------------------------------------------\r\n\r\n/**\r\n * Polygonal complexity settings.\r\n *\r\n * @typedef PolyComplexity\r\n * @property {number} poor\r\n * @property {number} low\r\n * @property {number} medium\r\n * @property {number} high\r\n * @property {number} ultra\r\n */\r\n\r\n/**\r\n * @alias SettingsObject\r\n * @namespace\r\n */\r\nconst defaults = {\r\n /**\r\n * Default options for all available modes.\r\n * Use {@link Mode.id} as a dictionary key to access mode options.\r\n *\r\n * Usually you don't need to override these settings. You may specify mode options as a parameter during\r\n * {@link Mode} construction.\r\n *\r\n * @memberof SettingsObject#\r\n * @type {Object.}\r\n *\r\n * @property {LinesModeOptions} LN - Lines mode options.\r\n * @property {LicoriceModeOptions} LC - Licorice mode options.\r\n * @property {BallsAndSticksModeOptions} BS - Balls and Sticks mode options.\r\n * @property {VanDerWaalsModeOptions} VW - Van der Waals mode options.\r\n * @property {TraceModeOptions} TR - Trace mode options.\r\n * @property {TubeModeOptions} TU - Tube mode options.\r\n * @property {CartoonModeOptions} CA - Cartoon mode options.\r\n * @property {QuickSurfaceModeOptions} QS - Contact Surface mode options.\r\n * @property {IsoSurfaceSASModeOptions} SA - Solvent Accessible Surface mode options.\r\n * @property {IsoSurfaceSESModeOptions} SE - Solvent Excluded Surface mode options.\r\n * @property {ContactSurfaceModeOptions} CS - Contact Surface mode options.\r\n * @property {TextModeOptions} TX - Text mode options.\r\n * @property {VolumeDensityModeOptions} VD - Volume Density mode options.\r\n */\r\n modes: {\r\n //----------------------------------------------------------------------------\r\n // BALLS AND STICKS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Balls and Sticks mode options.\r\n *\r\n * @typedef BallsAndSticksModeOptions\r\n *\r\n * @property {number} atom - Sphere radius as a fraction of Van der Waals atom radius.\r\n * @property {number} bond - Cylinder radius in angstroms.\r\n * @property {number} space - Fraction of the space around one cylinder. Zero means that cylinder fills all\r\n * available space.\r\n * @property {boolean} multibond - Toggles rendering of multiple ordered bonds.\r\n * @property {number} aromrad - Minor radius of a torus for aromatic loops.\r\n * @property {boolean} showarom - Toggles rendering of aromatic loops.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n BS: {\r\n atom: 0.23,\r\n bond: 0.15,\r\n space: 0.5,\r\n multibond: true,\r\n aromrad: 0.1,\r\n showarom: true,\r\n polyComplexity: {\r\n poor: 3,\r\n low: 4,\r\n medium: 6,\r\n high: 12,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // VAN DER WAALS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Van der Waals mode options.\r\n *\r\n * @typedef VanDerWaalsModeOptions\r\n *\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n VW: {\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 8,\r\n high: 16,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // LINES\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Lines mode options.\r\n *\r\n * @typedef LinesModeOptions\r\n *\r\n * @property {boolean} multibond - Flag, that toggles rendering of multiple ordered bonds.\r\n * @property {boolean} showarom - Flag, that toggles rendering of aromatic loops.\r\n * @property {number} offsarom - Offset between bonds and aromatic cycle.\r\n * @property {number} chunkarom - Number of pieces in a-loop arc, corresponding to atom.\r\n * @property {number} atom - Collision radius for atoms picking.\r\n * @property {number} lineWidth - Line width in pixels (not used in thin lines).\r\n */\r\n LN: {\r\n multibond: true,\r\n showarom: true,\r\n offsarom: 0.2,\r\n chunkarom: 10,\r\n atom: 0.23,\r\n lineWidth: 2,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // LICORICE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Licorice mode options.\r\n *\r\n * @typedef LicoriceModeOptions\r\n *\r\n * @property {number} bond - Bond cylinder radius.\r\n * @property {number} space - Fraction of the space around one cylinder. Zero means that cylinder fills all\r\n * available space.\r\n * @property {boolean} multibond - Flag, that toggles rendering of multiple ordered bonds.\r\n * @property {number} aromrad - Minor radius of a torus for aromatic loops.\r\n * @property {boolean} showarom - Flag, that toggles rendering of aromatic loops.\r\n * @property {PolyComplexity} polyComplexity - Poly complexity values for render modes.\r\n */\r\n LC: {\r\n bond: 0.20,\r\n space: 0.0,\r\n multibond: true,\r\n aromrad: 0.1,\r\n showarom: true,\r\n polyComplexity: {\r\n poor: 3,\r\n low: 4,\r\n medium: 6,\r\n high: 12,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // SURFACE SAS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Solvent Accessible Surface mode options.\r\n *\r\n * @typedef IsoSurfaceSASModeOptions\r\n *\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {number} probeRadius - Radius of the probe.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n SA: {\r\n zClip: false,\r\n probeRadius: 1.5,\r\n subset: '',\r\n wireframe: false,\r\n polyComplexity: {\r\n poor: 6,\r\n low: 8,\r\n medium: 16,\r\n high: 30,\r\n ultra: 60,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // SURFACE SES\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Solvent Excluded Surface mode options.\r\n *\r\n * @typedef IsoSurfaceSESModeOptions\r\n *\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {number} probeRadius - Radius of the probe.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n SE: {\r\n zClip: false,\r\n probeRadius: 1.5,\r\n subset: '',\r\n wireframe: false,\r\n polyComplexity: {\r\n poor: 6,\r\n low: 8,\r\n medium: 16,\r\n high: 30,\r\n ultra: 60,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // QUICK SURFACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Quick Surface mode options.\r\n *\r\n * @typedef QuickSurfaceModeOptions\r\n *\r\n * @property {number} isoValue - Isovalue of the surface to extract.\r\n * @property {number} scale - Radius scale for the surface being built.\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} gaussLim - Gauss lim for coloring the bigger the value, the smoother our colors are.\r\n * @property {PolyComplexity} gridSpacing - Poly complexity values for render modes. In this case the value\r\n * corresponds to the grid density.\r\n */\r\n QS: {\r\n isoValue: 0.5,\r\n gaussLim: {\r\n poor: 1.5,\r\n low: 2.0,\r\n medium: 2.5,\r\n high: 3.0,\r\n ultra: 4.0,\r\n },\r\n scale: 1.0,\r\n wireframe: false,\r\n gridSpacing: {\r\n poor: 2,\r\n low: 1.5,\r\n medium: 1,\r\n high: 0.5,\r\n ultra: 0.25,\r\n },\r\n subset: '',\r\n zClip: false,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // CONTACT SURFACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Contact Surface mode options.\r\n *\r\n * @typedef ContactSurfaceModeOptions\r\n *\r\n * @property {number} isoValue - Isovalue of the surface to extract.\r\n * @property {number} probeRadius - Probe radius.\r\n * @property {number} probePositions\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Radius scale for the surface being built.\r\n * Poly complexity values for render modes. In this case the value corresponds to the grid density.\r\n */\r\n CS: {\r\n probeRadius: 1.4,\r\n isoValue: 1.5,\r\n wireframe: false,\r\n probePositions: 30,\r\n polyComplexity: {\r\n poor: 0.5,\r\n low: 1.0,\r\n medium: 1.5,\r\n high: 1.75,\r\n ultra: 2.0,\r\n },\r\n subset: '',\r\n zClip: false,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TRACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Trace mode options.\r\n *\r\n * @typedef TraceModeOptions\r\n *\r\n * @property {number} radius - Cylinder radius.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n TR: {\r\n radius: 0.30,\r\n polyComplexity: {\r\n poor: 12,\r\n low: 16,\r\n medium: 32,\r\n high: 64,\r\n ultra: 64,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TUBE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Tube mode options.\r\n *\r\n * @typedef TubeModeOptions\r\n *\r\n * @property {number} radius - Cylinder radius.\r\n * @property {number} tension - Tension for interpolation.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n * @property {number} heightSegmentsRatio - Poly complexity multiplier for height segments.\r\n */\r\n TU: {\r\n radius: 0.30,\r\n heightSegmentsRatio: 1.5,\r\n tension: -0.7,\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 10,\r\n high: 18,\r\n ultra: 34,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // CARTOON\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Cartoon mode options.\r\n *\r\n * @typedef CartoonModeOptions\r\n *\r\n * @property {number} radius - Standard tube radius.\r\n * @property {number} depth - Height of the secondary structure ribbon.\r\n * @property {number} tension - Tension for interpolation.\r\n * @proprety {object} ss - Secondary structure parameters.\r\n * @proprety {object} ss.helix - Options for helices render.\r\n * @proprety {number} ss.helix.width - Width of the secondary structure ribbon.\r\n * @proprety {number} ss.helix.arrow - Secondary structure's arrow width.\r\n * @proprety {object} ss.strand - Options for strands render.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n * polyComplexity must be even for producing symmetric arrows.\r\n * @property {number} heightSegmentsRatio - Poly complexity multiplier for height segments.\r\n */\r\n CA: {\r\n radius: 0.30,\r\n depth: 0.25,\r\n ss: {\r\n helix: {\r\n width: 1.0,\r\n arrow: 2.0,\r\n },\r\n strand: {\r\n width: 1.0,\r\n arrow: 2.0,\r\n },\r\n },\r\n heightSegmentsRatio: 1.5,\r\n tension: -0.7,\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 10,\r\n high: 18,\r\n ultra: 34,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TEXT\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Text mode options.\r\n *\r\n * @typedef TextModeOptions\r\n *\r\n * @property {string} template - Format string for building output text.\r\n * @property {string} horizontalAlign - Text alignment ('left', 'right', 'center').\r\n * @property {string} verticalAlign - Vertical text box alignment ('top', 'bottom', 'middle').\r\n * @property {number} dx - Text offset x in angstroms.\r\n * @property {number} dy - Text offset y in angstroms.\r\n * @property {number} dz - Text offset z in angstroms.\r\n * @property {string} fg - Color rule for foreground.\r\n * @property {string} bg - Color rule for background.\r\n * @property {boolean} showBg - Flag, that toggles background rendering.\r\n *\r\n */\r\n TX: {\r\n template: '{{Chain}}.{{Residue}}{{Sequence}}.{{Name}}',\r\n horizontalAlign: 'center',\r\n verticalAlign: 'middle',\r\n dx: 0,\r\n dy: 0,\r\n dz: 1,\r\n fg: 'none',\r\n bg: '0x202020',\r\n showBg: true,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // VOLUME DENSITY\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Volume density mode options.\r\n *\r\n * @typedef VolumeDensityModeOptions\r\n *\r\n * @property {number} kSigma - Noise threshold coefficient.\r\n * @property {boolean} frame - flag, that turns on box frame painting.\r\n * @property {boolean} isoMode - flag, that turns on IsoSurface mode instead of Volume Rendering.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n VD: {\r\n kSigma: 1.0,\r\n kSigmaMed: 2.0,\r\n kSigmaMax: 4.0,\r\n frame: true,\r\n isoMode: false,\r\n polyComplexity: {\r\n poor: 2,\r\n low: 3,\r\n medium: 4,\r\n high: 8,\r\n ultra: 10,\r\n },\r\n },\r\n },\r\n\r\n /**\r\n * Default options for all available colorers.\r\n * Use {@link Colorer.id} as a dictionary key to access colorer options.\r\n *\r\n * Usually you don't need to override these settings. You may specify colorer options as a parameter during\r\n * {@link Colorer} construction.\r\n *\r\n * Not all colorers have options.\r\n *\r\n * @memberof SettingsObject#\r\n * @type {Object.}\r\n *\r\n * @property {ElementColorerOptions} EL - Element colorer options.\r\n * @property {SequenceColorerOptions} SQ - Sequence colorer options.\r\n * @property {MoleculeColorerOptions} MO - Molecule colorer options.\r\n * @property {UniformColorerOptions} UN - Uniform colorer options.\r\n * @property {ConditionalColorerOptions} CO - Conditional colorer options.\r\n * @property {TemperatureColorerOptions} TM - Temperature colorer options.\r\n * @property {OccupancyColorerOptions} OC - Occupancy colorer options.\r\n * @property {HydrophobicityColorerOptions} HY - Hydrophobicity colorer options.\r\n */\r\n colorers: {\r\n /**\r\n * Element colorer options.\r\n *\r\n * @typedef ElementColorerOptions\r\n *\r\n * @property {number} carbon - Carbon color or -1 to use default.\r\n */\r\n EL: {\r\n carbon: -1,\r\n },\r\n\r\n /**\r\n * Uniform colorer options.\r\n *\r\n * @typedef UniformColorerOptions\r\n *\r\n * @property {number} color - Single color to paint with.\r\n */\r\n UN: {\r\n color: 0xFFFFFF,\r\n },\r\n\r\n /**\r\n * Conditional colorer options.\r\n *\r\n * @typedef ConditionalColorerOptions\r\n *\r\n * @property {string} subset - Selector string.\r\n * @property {number} color - Color of selected atoms.\r\n * @property {number} baseColor - Color of other atoms.\r\n */\r\n CO: {\r\n subset: 'charged',\r\n color: 0xFF0000,\r\n baseColor: 0xFFFFFF,\r\n },\r\n\r\n /**\r\n * Carbon colorer options.\r\n *\r\n * @typedef CarbonColorerOptions\r\n *\r\n * @property {number} color - Single color to paint carbons\r\n * @property {number} factor - Color factor for not carbon atoms.\r\n */\r\n CB: {\r\n color: 0x909090,\r\n factor: 0.6,\r\n },\r\n\r\n /**\r\n * Sequence colorer options.\r\n *\r\n * @typedef SequenceColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n SQ: {\r\n gradient: 'rainbow',\r\n },\r\n\r\n /**\r\n * Temperature colorer options.\r\n *\r\n * @typedef TemperatureColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n * @property {number} min - Minimal temperature.\r\n * @property {number} max - Maximal temperature.\r\n */\r\n TM: {\r\n gradient: 'temp',\r\n min: 5,\r\n max: 40,\r\n },\r\n\r\n /**\r\n * Occupancy colorer options.\r\n *\r\n * @typedef OccupancyColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n OC: {\r\n gradient: 'reds',\r\n },\r\n\r\n /**\r\n * Hydrophobicity colorer options.\r\n *\r\n * @typedef HydrophobicityColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n HY: {\r\n gradient: 'blue-red',\r\n },\r\n\r\n /**\r\n * Molecule colorer options.\r\n *\r\n * @typedef MoleculeColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n MO: {\r\n gradient: 'rainbow',\r\n },\r\n },\r\n\r\n /*\r\n * Use antialiasing in WebGL.\r\n * @type {boolean}\r\n */\r\n antialias: true,\r\n\r\n /*\r\n * Camera field of view in degrees.\r\n * @type {number}\r\n */\r\n camFov: 45.0,\r\n\r\n /*\r\n * Camera near plane distance.\r\n * @type {number}\r\n */\r\n camNear: 0.5,\r\n\r\n /*\r\n * Camera far plane distance.\r\n * @type {number}\r\n */\r\n camFar: 100.0,\r\n\r\n camDistance: 2.5,\r\n\r\n radiusToFit: 1.0,\r\n\r\n /**\r\n * @type {number}\r\n * @instance\r\n */\r\n fogNearFactor: 0.5, // [0, 1]\r\n\r\n /**\r\n * @type {number}\r\n * @instance\r\n */\r\n fogFarFactor: 1, // [0, 1]\r\n fogAlpha: 1.0,\r\n fogColor: 0x000000,\r\n fogColorEnable: false,\r\n\r\n /**\r\n * Palette used for molecule coloring.\r\n * @type {string}\r\n */\r\n palette: 'JM',\r\n\r\n /*\r\n * Geometry resolution.\r\n * @type {string}\r\n */\r\n resolution: 'medium',\r\n\r\n autoResolution: false/* true */,\r\n\r\n autoPreset: true,\r\n\r\n preset: 'default', // TODO: remove 'preset' from settings, implement autodetection\r\n\r\n presets: {\r\n // Default\r\n default: [{\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n empty: [],\r\n\r\n // Wireframe\r\n wire: [{\r\n mode: 'LN',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n // Small molecules\r\n small: [{\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n // Proteins, nucleic acids etc.\r\n macro: [{\r\n mode: 'CA',\r\n colorer: 'SS',\r\n selector: 'not hetatm',\r\n material: 'SF',\r\n }, {\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'hetatm and not water',\r\n material: 'SF',\r\n }],\r\n },\r\n\r\n objects: {\r\n line: {\r\n color: 0xFFFFFFFF,\r\n dashSize: 0.3,\r\n gapSize: 0.05,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n\r\n bg: {\r\n color: 0x202020,\r\n transparent: false,\r\n },\r\n\r\n draft: {\r\n clipPlane: false,\r\n clipPlaneFactor: 0.5,\r\n clipPlaneSpeed: 0.00003,\r\n },\r\n\r\n /*\r\n * Separate group for plugins.\r\n * Each plugin handles its field by itself.\r\n */\r\n plugins: {\r\n\r\n },\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n axes: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fog: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fps: true,\r\n\r\n /**\r\n * Switch using of z-sprites for sphere and cylinder geometry\r\n * @type {boolean}\r\n * @instance\r\n */\r\n zSprites: true,\r\n\r\n isoSurfaceFakeOpacity: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n suspendRender: true,\r\n\r\n nowater: false,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n autobuild: true,\r\n\r\n /**\r\n * Anti-aliasing.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fxaa: true,\r\n /**\r\n * Outline depths\r\n * @type {boolean}\r\n * @instance\r\n */\r\n outline: {\r\n on: false,\r\n color: 0x000000,\r\n threshold: 0.1,\r\n thickness: 1,\r\n },\r\n\r\n /**\r\n * Ambient Occlusion special effect.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n ao: false,\r\n\r\n /**\r\n * Shadows options.\r\n *\r\n * @property {boolean} shadowMap - enable/disable.\r\n * @property {string} basic/percentage-closer filtering/non-uniform randomizing pcf.\r\n * @property {number} radius for percentage-closer filtering.\r\n */\r\n shadow: {\r\n on: false,\r\n type: 'random'/* basic, pcf, random */,\r\n radius: 1.0,\r\n },\r\n\r\n /**\r\n * Auto-rotation with constant speed.\r\n * @type {number}\r\n * @instance\r\n */\r\n autoRotation: 0.0,\r\n\r\n /**\r\n * Set maximum fps for animation.\r\n * @type {number}\r\n * @instance\r\n */\r\n maxfps: 30,\r\n\r\n /**\r\n * Set fbx output precision.\r\n * @type {number}\r\n * @instance\r\n */\r\n fbxprec: 4,\r\n\r\n /**\r\n * Auto-rotation axis.\r\n *\r\n * - true: complex auto-rotation is about vertical axis\r\n * - false: rotation axis is defined by last user rotation\r\n *\r\n * @type {boolean}\r\n * @instance\r\n */\r\n autoRotationAxisFixed: true,\r\n\r\n /**\r\n * Enable zooming with mouse wheel or pinch gesture.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n zooming: true,\r\n\r\n /**\r\n * Enable picking atoms & residues with left mouse button or touch.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n picking: true,\r\n\r\n /**\r\n * Set picking mode ('atom', 'residue', 'chain', 'molecule').\r\n * @type {string}\r\n * @instance\r\n */\r\n pick: 'atom',\r\n\r\n /**\r\n * Make \"component\" and \"fragment\" editing modes available.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n editing: false,\r\n\r\n /**\r\n * Detect aromatic loops.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n aromatic: false,\r\n\r\n /**\r\n * Load only one biological unit from all those described in PDB file.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n singleUnit: true,\r\n\r\n /**\r\n * Set stereo mode ('NONE', 'SIMPLE', 'DISTORTED', 'ANAGLYPH', 'WEBVR').\r\n * @type {string}\r\n * @instance\r\n */\r\n stereo: 'NONE',\r\n\r\n /**\r\n * Enable smooth transition between views\r\n * @type {boolean}\r\n * @instance\r\n */\r\n interpolateViews: true,\r\n\r\n /**\r\n * Set transparency mode ('standard', 'prepass').\r\n * @type {string}\r\n * @instance\r\n */\r\n transparency: 'prepass',\r\n\r\n /**\r\n * Mouse translation speed.\r\n * @type {number}\r\n * @instance\r\n */\r\n translationSpeed: 2,\r\n\r\n debug: {\r\n example: 3.5,\r\n text: 'hello!',\r\n good: true,\r\n ssaoKernelRadius: 0.7,\r\n ssaoFactor: 0.7,\r\n stereoBarrel: 0.25,\r\n },\r\n use: {\r\n multiFile: false,\r\n },\r\n};\r\n\r\n//----------------------------------------------------------------------------\r\n// SETTINGS CLASS\r\n//----------------------------------------------------------------------------\r\n\r\nfunction Settings() {\r\n EventDispatcher.call(this);\r\n\r\n this.old = null;\r\n this.now = {};\r\n this._changed = {};\r\n\r\n this.reset();\r\n}\r\n\r\nutils.deriveClass(Settings, EventDispatcher, {\r\n defaults,\r\n\r\n set(path, value) {\r\n if (_.isString(path)) {\r\n const oldValue = _.get(this.now, path);\r\n if (oldValue !== value) {\r\n _.set(this.now, path, value);\r\n this._notifyChange(path, value);\r\n }\r\n } else {\r\n const diff = utils.objectsDiff(path, this.now);\r\n if (!_.isEmpty(diff)) {\r\n _.merge(this.now, diff);\r\n this._notifyChanges(diff);\r\n }\r\n }\r\n },\r\n\r\n get(path, defaultValue) {\r\n return _.get(this.now, path, defaultValue);\r\n },\r\n\r\n reset() {\r\n const diff = utils.objectsDiff(defaults, this.now);\r\n this.now = _.cloneDeep(defaults);\r\n this.old = null;\r\n this._notifyChanges(diff);\r\n this._changed = {};\r\n },\r\n\r\n checkpoint() {\r\n this.old = _.cloneDeep(this.now);\r\n this._changed = {};\r\n },\r\n\r\n _notifyChange(path, value) {\r\n this._changed[path] = true;\r\n this.dispatchEvent({ type: `change:${path}`, value });\r\n },\r\n\r\n _notifyChanges(diff) {\r\n utils.forInRecursive(diff, (deepValue, deepPath) => {\r\n this._notifyChange(deepPath, deepValue);\r\n });\r\n },\r\n\r\n changed() {\r\n if (!this.old) {\r\n return [];\r\n }\r\n const { old, now } = this;\r\n const keys = _.filter(Object.keys(this._changed), (key) => _.get(old, key) !== _.get(now, key));\r\n return keys;\r\n },\r\n\r\n applyDiffs(diffs) {\r\n if (diffs.hasOwnProperty('VERSION') && diffs.VERSION !== VERSION) {\r\n throw new Error('Settings version does not match!');\r\n }\r\n // VERSION shouldn't be presented inside settings structure\r\n delete diffs.VERSION;\r\n this.reset();\r\n this.set(diffs);\r\n },\r\n\r\n getDiffs(versioned) {\r\n const diffs = utils.objectsDiff(this.now, defaults);\r\n if (versioned) {\r\n diffs.VERSION = VERSION;\r\n }\r\n return diffs;\r\n },\r\n\r\n setPluginOpts(plugin, opts) {\r\n defaults.plugins[plugin] = _.cloneDeep(opts);\r\n this.now.plugins[plugin] = _.cloneDeep(opts);\r\n },\r\n});\r\n\r\nexport default new Settings();\r\n","import _ from 'lodash';\r\nimport settings from './settings';\r\nimport utils from './utils';\r\nimport logger from './utils/logger';\r\n\r\nlet repIndex = 0;\r\n\r\nfunction asBoolean(value) {\r\n return !(!value || value === '0' || (_.isString(value) && value.toLowerCase() === 'false'));\r\n}\r\n\r\nconst adapters = {\r\n string: String,\r\n number: Number,\r\n boolean: asBoolean,\r\n};\r\n\r\n// Level 1 assignment symbol\r\nconst cL1Ass = '=';\r\n\r\nconst cOptsSep = '!';\r\n// Level 2 (options) assignment symbol\r\nconst cL2Ass = ':';\r\n// Level 2 (options) separator symbol\r\nconst cLSep = ',';\r\n\r\nconst cCommonIgnoreSymbols = '$;@/?';\r\n/**\r\n * We may (and should) leave as is for better readability:\r\n *\r\n * $ , ; : @ / ?\r\n */\r\n/**\r\n * Generate regular expression for symbols excluded for first level encryption\r\n */\r\nfunction getLevel1ExcludedExpr() {\r\n const cLevel1Ignores = ':,';\r\n return utils.generateRegExp(cCommonIgnoreSymbols + cLevel1Ignores);\r\n}\r\n\r\n/**\r\n * Generate regular expression for symbols excluded for first level encryption\r\n * (options, etc, ..)\r\n */\r\nfunction getLevel2ExcludedExpr() {\r\n const cLevel2Ignores = ' ';\r\n return utils.generateRegExp(cCommonIgnoreSymbols + cLevel2Ignores);\r\n}\r\n\r\nconst cL1ExclExpr = getLevel1ExcludedExpr();\r\nfunction encodeQueryComponentL1(value) {\r\n return utils.encodeQueryComponent(value, cL1ExclExpr);\r\n}\r\n\r\nconst cL2ExclExpr = getLevel2ExcludedExpr();\r\nfunction encodeQueryComponentL2(value) {\r\n return utils.encodeQueryComponent(value, cL2ExclExpr);\r\n}\r\n\r\nfunction ensureRepList(opts) {\r\n let { reps } = opts;\r\n if (!reps) {\r\n const { presets } = settings.now;\r\n let preset = opts.preset || settings.now.preset;\r\n reps = presets[preset];\r\n if (!reps) {\r\n logger.warn(`Unknown preset \"${preset}\"`);\r\n [preset] = Object.keys(presets);\r\n reps = presets[preset]; // fall back to any preset\r\n }\r\n opts.preset = preset;\r\n opts.reps = utils.deriveDeep(reps, true);\r\n }\r\n}\r\n\r\nfunction ensureRepAssign(opts, prop, value) {\r\n ensureRepList(opts);\r\n const rep = opts.reps[repIndex];\r\n // prop specified twice therefore start new rep by cloning the current\r\n if (rep.hasOwnProperty(prop)) {\r\n repIndex = opts.reps.length;\r\n opts.reps[repIndex] = utils.deriveDeep(rep, true);\r\n }\r\n if (value !== undefined) {\r\n opts.reps[repIndex][prop] = value;\r\n }\r\n}\r\n\r\nfunction addObject(opts, params, options) {\r\n if (opts._objects === undefined) {\r\n opts._objects = [];\r\n }\r\n\r\n const [type, newOpts] = options;\r\n const newObj = {\r\n type,\r\n params,\r\n };\r\n\r\n if (newOpts !== undefined) {\r\n newObj.opts = newOpts;\r\n }\r\n\r\n opts._objects[opts._objects.length] = newObj;\r\n}\r\n\r\nfunction parseParams(str, params) {\r\n const sep = str.indexOf(',');\r\n if (sep >= 0) {\r\n params.push(str.substr(sep + 1).split(','));\r\n return str.substr(0, sep);\r\n }\r\n // keep this untouched if no params were extracted\r\n return str;\r\n}\r\n\r\nfunction extractArgs(input, defaultsDict, params) {\r\n if (input) {\r\n const bang = input.indexOf(cOptsSep);\r\n const inputVal = parseParams(input.substr(0, bang >= 0 ? bang : undefined), params);\r\n if (bang >= 0) {\r\n const args = input.substr(bang + 1).split(cLSep);\r\n input = inputVal;\r\n if (defaultsDict) {\r\n const defaults = defaultsDict[input];\r\n const opts = utils.deriveDeep(defaults, true);\r\n args.forEach((arg) => {\r\n const pair = arg.split(cL2Ass, 2);\r\n const key = decodeURIComponent(pair[0]);\r\n const value = decodeURIComponent(pair[1]);\r\n const adapter = adapters[typeof _.get(defaults, key)];\r\n if (adapter) {\r\n _.set(opts, key, adapter(value));\r\n } else {\r\n logger.warn(`Unknown argument \"${key}\" for option \"${input}\"`);\r\n }\r\n });\r\n if (Object.keys(opts).length > 0) {\r\n input = [input, opts];\r\n }\r\n }\r\n } else {\r\n input = inputVal;\r\n }\r\n }\r\n return input;\r\n}\r\n\r\nconst actions = {\r\n\r\n l: 'load',\r\n load: String,\r\n t: 'type',\r\n type: String,\r\n v: 'view',\r\n view: String,\r\n u: 'unit',\r\n unit: Number,\r\n menu: asBoolean,\r\n\r\n // Commands\r\n\r\n o: 'object',\r\n object(value, opts) {\r\n const params = [];\r\n let options = extractArgs(value, settings.defaults.objects, params);\r\n if (!Array.isArray(options)) {\r\n options = [options];\r\n }\r\n addObject(opts, params[0], options);\r\n },\r\n\r\n p: 'preset',\r\n preset(value, opts) {\r\n opts.preset = value;\r\n opts.reps = null;\r\n ensureRepList(opts);\r\n },\r\n\r\n r: 'rep',\r\n rep(value, opts) {\r\n ensureRepList(opts);\r\n repIndex = Number(value);\r\n // clamp the index to one greater than the last\r\n repIndex = repIndex <= opts.reps.length ? (repIndex < 0 ? 0 : repIndex) : opts.reps.length;\r\n // create a new rep if it is adjacent to the existing ones\r\n if (repIndex === opts.reps.length) {\r\n // if there is no rep to derive from, derive from the first rep of the default\r\n opts.reps[repIndex] = repIndex > 0 ? utils.deriveDeep(opts.reps[repIndex - 1], true)\r\n : utils.deriveDeep(settings.defaults.presets.default[0], true);\r\n }\r\n },\r\n\r\n s: 'select',\r\n select(value, opts) {\r\n ensureRepAssign(opts, 'selector', value);\r\n },\r\n\r\n m: 'mode',\r\n mode(value, opts) {\r\n ensureRepAssign(opts, 'mode', extractArgs(value, settings.defaults.modes));\r\n },\r\n\r\n c: 'color',\r\n color(value, opts) {\r\n ensureRepAssign(opts, 'colorer', extractArgs(value, settings.defaults.colorers));\r\n },\r\n\r\n mt: 'material',\r\n material(value, opts) {\r\n ensureRepAssign(opts, 'material', extractArgs(value, settings.defaults.materials));\r\n },\r\n\r\n dup(value, opts) {\r\n ensureRepList(opts);\r\n const { reps } = opts;\r\n const rep = reps[repIndex];\r\n repIndex = reps.length;\r\n reps[repIndex] = utils.deriveDeep(rep, true);\r\n },\r\n\r\n // Settings shortcuts\r\n\r\n ar: 'autoResolution',\r\n};\r\n\r\nfunction _fromArray(entries) {\r\n repIndex = 0;\r\n\r\n const opts = {};\r\n for (let i = 0, n = entries.length; i < n; ++i) {\r\n const /** string[] */ entry = entries[i];\r\n let /** string? */ key = entry[0];\r\n const /** string? */ value = entry[1];\r\n let /** function|string? */ action = actions[key];\r\n\r\n // unwind shortcuts and aliases\r\n while (_.isString(action)) {\r\n key = action;\r\n action = actions[key];\r\n }\r\n\r\n // either set a property or use specialized parser\r\n if (!action) {\r\n const adapter = adapters[typeof _.get(settings.defaults, key)];\r\n if (adapter) {\r\n _.set(opts, `settings.${key}`, adapter(value));\r\n } else {\r\n logger.warn(`Unknown option \"${key}\"`);\r\n }\r\n } else if (_.isFunction(action)) {\r\n const result = action(value, opts);\r\n if (result !== undefined) {\r\n opts[key] = result;\r\n }\r\n }\r\n }\r\n\r\n return opts;\r\n}\r\n\r\nfunction fromAttr(attr) {\r\n return _fromArray(utils.getUrlParameters(`?${attr || ''}`));\r\n}\r\n\r\nfunction fromURL(url) {\r\n return _fromArray(utils.getUrlParameters(url));\r\n}\r\n\r\nfunction _processOptsForURL(opts) {\r\n const str = [];\r\n let i = 0;\r\n utils.forInRecursive(opts, (value, key) => {\r\n str[i++] = encodeQueryComponentL2(key) + cL2Ass + encodeQueryComponentL2(value);\r\n });\r\n return str.join(cLSep);\r\n}\r\n\r\nfunction _processArgsForURL(args) {\r\n if (!_.isArray(args)) {\r\n return args;\r\n }\r\n if (args.length < 2) {\r\n return args[0];\r\n }\r\n return `${args[0]}${cOptsSep}${_processOptsForURL(args[1])}`;\r\n}\r\n\r\nfunction _processObjForURL(objOpts) {\r\n if (!objOpts || !objOpts.type) {\r\n return undefined;\r\n }\r\n let res = objOpts.type;\r\n if (_.isArray(objOpts.params) && objOpts.params.length > 0) {\r\n res += `,${objOpts.params.join(',')}`;\r\n }\r\n if (objOpts.opts) {\r\n res += cOptsSep + _processOptsForURL(objOpts.opts);\r\n }\r\n return res;\r\n}\r\n\r\nfunction toURL(opts) {\r\n const stringList = [];\r\n let idx = 0;\r\n\r\n function checkAndAdd(prefix, value) {\r\n if (value !== null && value !== undefined) {\r\n stringList[idx++] = encodeQueryComponentL1(prefix)\r\n + cL1Ass + encodeQueryComponentL1(value);\r\n }\r\n }\r\n\r\n function addReps(repList) {\r\n if (!repList) {\r\n return;\r\n }\r\n for (let i = 0, n = repList.length; i < n; ++i) {\r\n if (_.isEmpty(repList[i])) {\r\n continue;\r\n }\r\n checkAndAdd('r', i);\r\n checkAndAdd('s', repList[i].selector);\r\n checkAndAdd('m', _processArgsForURL(repList[i].mode));\r\n checkAndAdd('c', _processArgsForURL(repList[i].colorer));\r\n checkAndAdd('mt', _processArgsForURL(repList[i].material));\r\n }\r\n }\r\n\r\n function addObjects(objList) {\r\n if (!objList) {\r\n return;\r\n }\r\n for (let i = 0, n = objList.length; i < n; ++i) {\r\n checkAndAdd('o', _processObjForURL(objList[i]));\r\n }\r\n }\r\n\r\n checkAndAdd('l', opts.load);\r\n checkAndAdd('u', opts.unit);\r\n checkAndAdd('p', opts.preset);\r\n addReps(opts.reps);\r\n addObjects(opts._objects);\r\n\r\n checkAndAdd('v', opts.view);\r\n\r\n utils.forInRecursive(opts.settings, (value, key) => {\r\n // I heard these lines in the whispers of the Gods\r\n // Handle preset setting in reps\r\n if (key === 'preset') {\r\n return;\r\n }\r\n checkAndAdd(key, value);\r\n });\r\n\r\n let url = '';\r\n if (typeof window !== 'undefined') {\r\n const { location } = window;\r\n url = `${location.protocol}//${location.host}${location.pathname}`;\r\n }\r\n if (stringList.length > 0) {\r\n url += `?${stringList.join('&')}`;\r\n }\r\n\r\n return url;\r\n}\r\n\r\nfunction _processOptsForScript(opts) {\r\n const str = [];\r\n let i = 0;\r\n utils.forInRecursive(opts, (value, key) => {\r\n str[i++] = `${key}=${utils.enquoteString(value)}`;\r\n });\r\n return str.join(' ');\r\n}\r\n\r\nfunction _processArgsForScript(args) {\r\n if (!_.isArray(args)) {\r\n return args;\r\n }\r\n if (args.length < 2) {\r\n return args[0];\r\n }\r\n return `${args[0]} ${_processOptsForScript(args[1])}`;\r\n}\r\n\r\nfunction _processObjForScript(objOpts) {\r\n if (!objOpts || !objOpts.type) {\r\n return undefined;\r\n }\r\n let res = objOpts.type;\r\n if (_.isArray(objOpts.params) && objOpts.params.length > 0) {\r\n res += ` ${objOpts.params.map(utils.enquoteString).join(' ')}`;\r\n }\r\n if (objOpts.opts) {\r\n res += ` ${_processOptsForScript(objOpts.opts)}`;\r\n }\r\n return res;\r\n}\r\n\r\nfunction _processRepsForScript(rep, index) {\r\n const repString = [];\r\n let strIdx = 0;\r\n function localAdd(prefix, value) {\r\n if (value !== null && value !== undefined) {\r\n repString[strIdx++] = prefix + value;\r\n }\r\n }\r\n if (_.isEmpty(rep)) {\r\n return null;\r\n }\r\n localAdd('', index);\r\n localAdd('s=', utils.enquoteString(rep.selector));\r\n localAdd('m=', _processArgsForScript(rep.mode));\r\n localAdd('c=', _processArgsForScript(rep.colorer));\r\n localAdd('mt=', _processArgsForScript(rep.material));\r\n return repString.join(' ');\r\n}\r\n\r\nfunction toScript(opts) {\r\n const commandsList = [];\r\n let idx = 0;\r\n function checkAndAdd(command, value, saveQuotes) {\r\n if (value !== null && value !== undefined) {\r\n const quote = (typeof value === 'string' && saveQuotes) ? '\"' : '';\r\n commandsList[idx++] = `${command} ${quote}${value}${quote}`.trim();\r\n }\r\n }\r\n\r\n function addReps(repList) {\r\n if (!repList) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = repList.length; i < n; ++i) {\r\n checkAndAdd('rep', _processRepsForScript(repList[i], i));\r\n }\r\n }\r\n\r\n function addObjects(objList) {\r\n if (!objList) {\r\n return;\r\n }\r\n for (let i = 0, n = objList.length; i < n; ++i) {\r\n checkAndAdd('', _processObjForScript(objList[i]));\r\n }\r\n }\r\n\r\n checkAndAdd('set', 'autobuild false');\r\n checkAndAdd('load', opts.load, true);\r\n checkAndAdd('unit', opts.unit);\r\n checkAndAdd('preset', opts.preset);\r\n addReps(opts.reps);\r\n addObjects(opts._objects);\r\n\r\n utils.forInRecursive(opts.settings, (value, key) => {\r\n // I heard these lines in the whispers of the Gods\r\n // Handle preset setting in reps\r\n if (key === 'preset') {\r\n return;\r\n }\r\n checkAndAdd(`set ${key}`, value, true);\r\n });\r\n checkAndAdd('view', opts.view);\r\n checkAndAdd('set', 'autobuild true');\r\n return commandsList.join('\\n');\r\n}\r\n\r\nexport default {\r\n fromURL,\r\n fromAttr,\r\n adapters,\r\n toURL,\r\n toScript,\r\n};\r\n","/**\r\n * Atom measurements.\r\n *\r\n * @param {Residue} residue - (required) Residue containing the atom\r\n * @param {string} name - (required) Name, unique in the residue\r\n * @param {Element} type - (required) Chemical element reference\r\n * @param {THREE.Vector3} position - Registered coordinates\r\n *\r\n * @param {number} role - Role of atom inside monomer: Lead and wing are particularity interesting\r\n * @param {boolean} het - Non-standard residue indicator\r\n *\r\n * @param {number} serial - Serial number, unique in the model\r\n * @param {string} location - Alternative location indicator (usually space or A-Z)\r\n * @param {number} occupancy - Occupancy percentage, from 0 to 1\r\n * @param {number} temperature - Temperature\r\n * @param {number} charge - Charge\r\n *\r\n * @exports Atom\r\n * @constructor\r\n */\r\n\r\nclass Atom {\r\n constructor(residue, name, type, position, role, het, serial, location, occupancy, temperature, charge) {\r\n this.index = -1;\r\n this.residue = residue;\r\n this.name = name;\r\n this.element = type;\r\n this.position = position;\r\n this.role = role;\r\n this.mask = 1 | 0;\r\n\r\n this.het = het;\r\n\r\n this.serial = serial;\r\n this.location = (location || ' ').charCodeAt(0);\r\n this.occupancy = occupancy || 1;\r\n this.temperature = temperature;\r\n this.charge = charge;\r\n this.hydrogenCount = -1; // explicitly invalid\r\n this.radicalCount = 0;\r\n this.valence = -1; // explicitly invalid\r\n\r\n this.bonds = [];\r\n\r\n this.flags = 0x0000;\r\n if (type.name === 'H') {\r\n this.flags |= Atom.Flags.HYDROGEN;\r\n } else if (type.name === 'C') {\r\n this.flags |= Atom.Flags.CARBON;\r\n }\r\n }\r\n\r\n isHet() {\r\n return this.het;\r\n }\r\n\r\n isHydrogen() {\r\n return this.element.number === 1;\r\n }\r\n\r\n getVisualName() {\r\n const { name } = this;\r\n if (name.length > 0) {\r\n return name;\r\n }\r\n return this.element.name.trim();\r\n }\r\n\r\n forEachBond(process) {\r\n const { bonds } = this;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]);\r\n }\r\n }\r\n\r\n getFullName() {\r\n let name = '';\r\n if (this.residue !== null) {\r\n if (this.residue._chain !== null) {\r\n name += `${this.residue._chain.getName()}.`;\r\n }\r\n name += `${this.residue._sequence}.`;\r\n }\r\n name += this.name;\r\n return name;\r\n }\r\n\r\n /**\r\n * Enumeration of atom flag values.\r\n *\r\n * @enum {number}\r\n * @readonly\r\n */\r\n static Flags = {\r\n CARBON: 0x0001,\r\n // OXYGEN: 0x0002,\r\n // NITROGEN: 0x0004,\r\n HYDROGEN: 0x0008,\r\n /** Non-polar hydrogen (it is also a HYDROGEN) */\r\n NONPOLARH: 0x1008,\r\n };\r\n}\r\n\r\nexport default Atom;\r\n","class Element {\r\n constructor(number, name, fullName, weight, radius, radiusBonding, hValency) {\r\n this.number = number;\r\n this.name = name;\r\n this.fullName = fullName;\r\n this.weight = weight;\r\n this.radius = radius;\r\n this.radiusBonding = radiusBonding;\r\n this.hydrogenValency = hValency;\r\n }\r\n\r\n static Constants = {\r\n\r\n U1: 1,\r\n Lead: 2,\r\n U2: 3,\r\n Wing: 4,\r\n U18: 18,\r\n\r\n };\r\n\r\n static Role = {\r\n\r\n N: Element.Constants.U1,\r\n CA: Element.Constants.Lead,\r\n C: Element.Constants.U2,\r\n O: Element.Constants.Wing,\r\n SG: Element.Constants.U18,\r\n\r\n };\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\n static ByAtomicNumber = [\r\n\r\n null,\r\n new Element(1, 'H', 'Hydrogen', 1.008, 1.2, 0.23, [1]),\r\n new Element(2, 'HE', 'Helium', 4.003, 1.4, 0.93, [0]),\r\n new Element(3, 'LI', 'Lithium', 6.941, 1.82, 0.68, [1]),\r\n new Element(4, 'BE', 'Beryllium', 9.012, 1.7, 0.35, [2]),\r\n new Element(5, 'B', 'Boron', 10.81, 2.08, 0.83, [3]),\r\n new Element(6, 'C', 'Carbon', 12.011, 1.95, 0.68, [4]),\r\n new Element(7, 'N', 'Nitrogen', 14.007, 1.85, 0.68, [3, 5]),\r\n new Element(8, 'O', 'Oxygen', 15.999, 1.7, 0.68, [2, 4]),\r\n new Element(9, 'F', 'Fluorine', 18.998, 1.73, 0.64, [1]),\r\n new Element(10, 'NE', 'Neon', 20.18, 1.54, 1.12, [0]),\r\n new Element(11, 'NA', 'Sodium', 22.99, 2.27, 0.97, [1]),\r\n new Element(12, 'MG', 'Magnesium', 24.305, 1.73, 1.1, [2]),\r\n new Element(13, 'AL', 'Aluminum', 26.981, 2.05, 1.35, [3]),\r\n new Element(14, 'SI', 'Silicon', 28.086, 2.1, 1.2, [4]),\r\n new Element(15, 'P', 'Phosphorus', 30.974, 2.08, 0.75, [3, 5]),\r\n new Element(16, 'S', 'Sulfur', 32.07, 2, 1.02, [2, 4, 6]),\r\n new Element(17, 'CL', 'Chlorine', 35.453, 1.97, 0.99, [1, 3, 5, 7]),\r\n new Element(18, 'AR', 'Argon', 39.948, 1.88, 1.57, [0]),\r\n new Element(19, 'K', 'Potassium', 39.1, 2.75, 1.33, [1]),\r\n new Element(20, 'CA', 'Calcium', 40.08, 1.973, 0.99, [2]),\r\n new Element(21, 'SC', 'Scandium', 44.956, 1.7, 1.44, [0]),\r\n new Element(22, 'TI', 'Titanium', 47.88, 1.7, 1.47, [0]),\r\n new Element(23, 'V', 'Vanadium', 50.941, 1.7, 1.33, [0]),\r\n new Element(24, 'CR', 'Chromium', 52, 1.7, 1.35, [0]),\r\n new Element(25, 'MN', 'Manganese', 54.938, 1.7, 1.35, [0]),\r\n new Element(26, 'FE', 'Iron', 55.847, 1.7, 1.34, [0]),\r\n new Element(27, 'CO', 'Cobalt', 58.93, 1.7, 1.33, [0]),\r\n new Element(28, 'NI', 'Nickel', 58.69, 1.63, 1.5, [0]),\r\n new Element(29, 'CU', 'Copper', 63.55, 1.4, 1.52, [0]),\r\n new Element(30, 'ZN', 'Zinc', 65.39, 1.39, 1.45, [0]),\r\n new Element(31, 'GA', 'Gallium', 69.72, 1.87, 1.22, [3]),\r\n new Element(32, 'GE', 'Germanium', 72.61, 1.7, 1.17, [4]),\r\n new Element(33, 'AS', 'Arsenic', 74.92, 1.85, 1.21, [3, 5]),\r\n new Element(34, 'SE', 'Selenium', 78.96, 1.9, 1.22, [2, 4, 6]),\r\n new Element(35, 'BR', 'Bromine', 79.9, 2.1, 1.21, [1, 3, 5, 7]),\r\n new Element(36, 'KR', 'Krypton', 83.8, 2.02, 1.91, [0]),\r\n new Element(37, 'RB', 'Rubidium', 85.47, 1.7, 1.47, [1]),\r\n new Element(38, 'SR', 'Strontium', 87.62, 1.7, 1.12, [2]),\r\n new Element(39, 'Y', 'Yttrium', 88.91, 1.7, 1.78, [0]),\r\n new Element(40, 'ZR', 'Zirconium', 91.22, 1.7, 1.56, [0]),\r\n new Element(41, 'NB', 'Niobium', 92.91, 1.7, 1.48, [0]),\r\n new Element(42, 'MO', 'Molybdenum', 95.94, 1.7, 1.47, [0]),\r\n new Element(43, 'TC', 'Technetium', 98.91, 1.7, 1.35, [0]),\r\n new Element(44, 'RU', 'Ruthenium', 101.07, 1.7, 1.4, [0]),\r\n new Element(45, 'RH', 'Rhodium', 102.91, 1.7, 1.45, [0]),\r\n new Element(46, 'PD', 'Palladium', 106.42, 1.63, 1.5, [0]),\r\n new Element(47, 'AG', 'Silver', 107.87, 1.72, 1.59, [0]),\r\n new Element(48, 'CD', 'Cadmium', 112.41, 1.58, 1.69, [0]),\r\n new Element(49, 'IN', 'Indium', 114.82, 1.93, 1.63, [3]),\r\n new Element(50, 'SN', 'Tin', 118.71, 2.17, 1.46, [2, 4]),\r\n new Element(51, 'SB', 'Antimony', 121.75, 2.2, 1.46, [3, 5]),\r\n new Element(52, 'TE', 'Tellurium', 127.6, 2.06, 1.47, [2, 4, 6]),\r\n new Element(53, 'I', 'Iodine', 126.91, 2.15, 1.4, [1, 3, 5, 7]),\r\n new Element(54, 'XE', 'Xenon', 131.29, 2.16, 1.98, [0]),\r\n new Element(55, 'CS', 'Cesium', 132.91, 1.7, 1.67, [1]),\r\n new Element(56, 'BA', 'Barium', 137.33, 1.7, 1.34, [2]),\r\n new Element(57, 'LA', 'Lanthanum', 138.91, 1.7, 1.87, [0]),\r\n new Element(58, 'CE', 'Cerium', 140.12, 1.7, 1.83, [0]),\r\n new Element(59, 'PR', 'Praseodymium', 140.91, 1.7, 1.82, [0]),\r\n new Element(60, 'ND', 'Neodymium', 144.24, 1.7, 1.81, [0]),\r\n new Element(61, 'PM', 'Promethium', 144.9, 1.7, 1.8, [0]),\r\n new Element(62, 'SM', 'Samarium', 150.36, 1.7, 1.8, [0]),\r\n new Element(63, 'EU', 'Europium', 151.96, 1.7, 1.99, [0]),\r\n new Element(64, 'GD', 'Gadolinium', 157.25, 1.7, 1.79, [0]),\r\n new Element(65, 'TB', 'Terbium', 158.93, 1.7, 1.76, [0]),\r\n new Element(66, 'DY', 'Dysprosium', 162.5, 1.7, 1.75, [0]),\r\n new Element(67, 'HO', 'Holmium', 164.93, 1.7, 1.74, [0]),\r\n new Element(68, 'ER', 'Erbium', 167.26, 1.7, 1.73, [0]),\r\n new Element(69, 'TM', 'Thulium', 168.93, 1.7, 1.72, [0]),\r\n new Element(70, 'YB', 'Ytterbium', 173.04, 1.7, 1.94, [0]),\r\n new Element(71, 'LU', 'Lutetium', 174.97, 1.7, 1.72, [0]),\r\n new Element(72, 'HF', 'Hafnium', 178.49, 1.7, 1.57, [0]),\r\n new Element(73, 'TA', 'Tantalum', 180.95, 1.7, 1.43, [0]),\r\n new Element(74, 'W', 'Tungsten', 183.85, 1.7, 1.37, [0]),\r\n new Element(75, 'RE', 'Rhenium', 186.21, 1.7, 1.35, [0]),\r\n new Element(76, 'OS', 'Osmium', 190.2, 1.7, 1.37, [0]),\r\n new Element(77, 'IR', 'Iridium', 192.22, 1.7, 1.32, [0]),\r\n new Element(78, 'PT', 'Platinum', 195.08, 1.72, 1.5, [0]),\r\n new Element(79, 'AU', 'Gold', 196.97, 1.66, 1.5, [0]),\r\n new Element(80, 'HG', 'Mercury', 200.59, 1.55, 1.7, [0]),\r\n new Element(81, 'TL', 'Thallium', 204.38, 1.96, 1.55, [1, 3]),\r\n new Element(82, 'PB', 'Lead', 207.2, 2.02, 1.54, [2, 4]),\r\n new Element(83, 'BI', 'Bismuth', 208.98, 1.7, 1.54, [3, 5]),\r\n new Element(84, 'PO', 'Polonium', 210, 1.7, 1.68, [2, 4, 6]),\r\n new Element(85, 'AT', 'Astatine', 210, 1.7, 1.7, [1, 3, 5, 7]),\r\n new Element(86, 'RN', 'Radon', 222, 1.7, 2.4, [0]),\r\n new Element(87, 'FR', 'Francium', 223, 1.7, 2, [1]),\r\n new Element(88, 'RA', 'Radium', 226.03, 1.7, 1.9, [2]),\r\n new Element(89, 'AC', 'Actinium', 227.03, 1.7, 1.88, [0]),\r\n new Element(90, 'TH', 'Thorium', 232.04, 1.7, 1.79, [0]),\r\n new Element(91, 'PA', 'Protactinium', 231.04, 1.7, 1.61, [0]),\r\n new Element(92, 'U', 'Uranium', 238.03, 1.86, 1.58, [0]),\r\n new Element(93, 'NP', 'Neptunium', 237.05, 1.7, 1.55, [0]),\r\n new Element(94, 'PU', 'Plutonium', 239.1, 1.7, 1.53, [0]),\r\n new Element(95, 'AM', 'Americium', 243.1, 1.7, 1.51, [0]),\r\n new Element(96, 'CM', 'Curium', 247.1, 1.7, 1.5, [0]),\r\n new Element(97, 'BK', 'Berkelium', 247.1, 1.7, 1.5, [0]),\r\n new Element(98, 'CF', 'Californium', 252.1, 1.7, 1.5, [0]),\r\n new Element(99, 'ES', 'Einsteinium', 252.1, 1.7, 1.5, [0]),\r\n new Element(100, 'FM', 'Fermium', 257.1, 1.7, 1.5, [0]),\r\n new Element(101, 'MD', 'Mendelevium', 256.1, 1.7, 1.5, [0]),\r\n new Element(102, 'NO', 'Nobelium', 259.1, 1.7, 1.5, [0]),\r\n new Element(103, 'LR', 'Lawrencium', 260.1, 1.7, 1.5, [0]),\r\n new Element(104, 'RF', 'Rutherfordium', 261, 1.7, 1.6, [0]),\r\n new Element(105, 'DB', 'Dubnium', 262, 1.7, 1.6, [0]),\r\n new Element(106, 'SG', 'Seaborgium', 263, 1.7, 1.6, [0]),\r\n new Element(107, 'BH', 'Bohrium', 262, 1.7, 1.6, [0]),\r\n new Element(108, 'HS', 'Hassium', 265, 1.7, 1.6, [0]),\r\n new Element(109, 'MT', 'Meitnerium', 268, 1.7, 1.6, [0]),\r\n\r\n ];\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\n static ByName = {\r\n // Duplicate atomic numbers (isotopes)\r\n\r\n D: new Element(1, 'D', 'Deuterium', 2.014, 1.2, 0.23, [1]),\r\n T: new Element(1, 'T', 'Tritium', 3.016, 1.2, 0.23, [1]),\r\n\r\n // All regular elements will be added later, automatically\r\n };\r\n}\r\n\r\n(function () {\r\n const byAtomicNumber = Element.ByAtomicNumber;\r\n const byName = Element.ByName;\r\n for (let i = 0, n = byAtomicNumber.length; i < n; ++i) {\r\n const element = byAtomicNumber[i];\r\n if (element) {\r\n byName[element.name] = element;\r\n }\r\n }\r\n}());\r\n\r\n// find atom type by chemical element (or create if missing)\r\nElement.getByName = function (element) {\r\n let type = Element.ByName[element];\r\n if (!type) {\r\n type = Element.ByName[element] = new Element(0, element, 'Unknown', 0, 1.0, 0.01, [0]);\r\n }\r\n return type;\r\n};\r\n\r\nexport default Element;\r\n","const cBondTypes = {\r\n /** Was generated manually */\r\n UNKNOWN: 0,\r\n /** Simple covalent bond */\r\n COVALENT: 1,\r\n /** Aromatic bond */\r\n AROMATIC: 2,\r\n};\r\n\r\nfunction getAtomPos(atom) {\r\n return atom.position;\r\n}\r\n\r\n/**\r\n * Bond between atoms.\r\n *\r\n * @param {Atom} left - The first atom.\r\n * @param {Atom} right - The second atom.\r\n * @param {number} order - Order of current bond.\r\n * @param {number} type - Bond type.\r\n * @param {boolean} fixed - Indicator of a pre-specified connection (in contrast with guessed one).\r\n *\r\n * @exports Bond\r\n * @constructor\r\n */\r\nclass Bond {\r\n constructor(left, right, order, type, fixed) {\r\n this._left = left;\r\n this._right = right;\r\n this._fixed = fixed;\r\n this._index = -1;\r\n if (left > right) {\r\n throw new Error('In a bond atom indices must be in increasing order');\r\n }\r\n this._order = order;\r\n this._type = type;\r\n }\r\n\r\n getLeft() {\r\n return this._left;\r\n }\r\n\r\n getRight() {\r\n return this._right;\r\n }\r\n\r\n getOrder() {\r\n return this._order;\r\n }\r\n\r\n calcLength() {\r\n return this._left.position.distanceTo(this._right.position);\r\n }\r\n\r\n _forEachNeighbour(currAtom, process) {\r\n const { bonds } = currAtom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]._left !== currAtom ? bonds[i]._left : bonds[i]._right);\r\n }\r\n }\r\n\r\n forEachLevelOne(process) {\r\n const left = this._left;\r\n const right = this._right;\r\n this._forEachNeighbour(left, (atom) => {\r\n if (atom === right) {\r\n return;\r\n }\r\n process(atom);\r\n });\r\n this._forEachNeighbour(right, (atom) => {\r\n if (atom === left) {\r\n return;\r\n }\r\n process(atom);\r\n });\r\n }\r\n\r\n forEachLevelTwo(process) {\r\n // TODO refactor this piece of an art?\r\n const left = this._left;\r\n const right = this._right;\r\n const self = this;\r\n self._forEachNeighbour(left, (atom) => {\r\n if (atom === right) {\r\n return;\r\n }\r\n self._forEachNeighbour(atom, (l2Atom) => {\r\n if (l2Atom === left) {\r\n return;\r\n }\r\n process(l2Atom);\r\n });\r\n });\r\n self._forEachNeighbour(right, (atom) => {\r\n if (atom === left) {\r\n return;\r\n }\r\n self._forEachNeighbour(atom, (l2Atom) => {\r\n if (l2Atom === right) {\r\n return;\r\n }\r\n process(l2Atom);\r\n });\r\n });\r\n }\r\n\r\n _fixDir(refPoint, currDir, posGetter) {\r\n // count atoms to the right and to the left of the current plane\r\n let rightCount = 0;\r\n let leftCount = 0;\r\n const tmpVec = refPoint.clone();\r\n function checkDir(atom) {\r\n tmpVec.copy(posGetter(atom));\r\n tmpVec.sub(refPoint);\r\n const dotProd = currDir.dot(tmpVec);\r\n if (dotProd > 0) {\r\n ++rightCount;\r\n } else {\r\n ++leftCount;\r\n }\r\n }\r\n function checkCarbon(atom) {\r\n if (atom.element.name === 'C') {\r\n checkDir(atom);\r\n }\r\n }\r\n // count all atoms to the left and right of our plane, start from level 1 and carbons\r\n const stages = [\r\n [this.forEachLevelOne, checkCarbon],\r\n [this.forEachLevelOne, checkDir],\r\n [this.forEachLevelTwo, checkCarbon],\r\n [this.forEachLevelTwo, checkDir],\r\n ];\r\n\r\n for (let stageId = 0; stageId < stages.length; ++stageId) {\r\n stages[stageId][0].call(this, stages[stageId][1]);\r\n if (leftCount > rightCount) {\r\n return currDir.multiplyScalar(-1);\r\n }\r\n if (leftCount < rightCount) {\r\n return currDir;\r\n }\r\n }\r\n return currDir;\r\n }\r\n\r\n calcNormalDir(posGetter) {\r\n const left = this._left;\r\n const right = this._right;\r\n let first = left;\r\n let second = right;\r\n posGetter = posGetter === undefined ? getAtomPos : posGetter;\r\n if (left.bonds.length > right.bonds.length) {\r\n first = right;\r\n second = left;\r\n }\r\n let third = first;\r\n let maxNeibs = 0;\r\n const { bonds } = second;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n let another = bonds[i]._left;\r\n if (bonds[i]._left === second) {\r\n another = bonds[i]._right;\r\n }\r\n if (another.bonds.length > maxNeibs && another !== first) {\r\n third = another;\r\n maxNeibs = another.bonds.length;\r\n }\r\n }\r\n const secondPos = posGetter(second);\r\n const firstV = posGetter(first).clone().sub(secondPos);\r\n const secondV = posGetter(third).clone().sub(secondPos);\r\n secondV.crossVectors(firstV, secondV);\r\n if (secondV.lengthSq() < 0.0001) {\r\n secondV.set(0, 1, 0);\r\n }\r\n firstV.normalize();\r\n secondV.normalize();\r\n firstV.crossVectors(secondV, firstV);\r\n if (firstV.lengthSq() < 0.0001) {\r\n firstV.set(0, 1, 0);\r\n }\r\n firstV.normalize();\r\n return this._fixDir(secondPos, firstV, posGetter);\r\n }\r\n\r\n static BondType = cBondTypes;\r\n}\r\n\r\nBond.prototype.BondType = cBondTypes;\r\n\r\nexport default Bond;\r\n","import * as THREE from 'three';\r\nimport Atom from './Atom';\r\nimport Element from './Element';\r\n\r\nconst cNucleicControlNames = ['C3\\'', 'C3*', 'P', 'H5T', 'H3T'];\r\nconst cNucleicWing1Names = ['OP1', 'O1P'];\r\nconst cNucleicWing2Names = ['OP2', 'O2P'];\r\n\r\nconst cCylinderSource = ['C3\\'', 'C3*', 'C1', 'C1\\'', 'C1*', 'P'];\r\nconst cCylinderTarget = [{\r\n types: ['A', 'DA', 'G', 'DG'],\r\n atoms: ['N1'],\r\n}, {\r\n types: ['C', 'DC'],\r\n atoms: ['N3'],\r\n}, {\r\n types: ['T', 'DT', 'U', 'DU'],\r\n atoms: ['O4'],\r\n}];\r\n\r\n/**\r\n * Residue instance.\r\n *\r\n * @param {Chain} chain - Chain this residue belongs to.\r\n * @param {ResidueType} type - Generic residue instance type.\r\n * @param {number} sequence - Sequence ID.\r\n * @param {string} icode - One character insertion code (usually space or A-Z).\r\n *\r\n * @exports Residue\r\n * @constructor\r\n */\r\nclass Residue {\r\n constructor(chain, type, sequence, icode) {\r\n this._chain = chain;\r\n this._component = null;\r\n this._type = type;\r\n this._sequence = sequence;\r\n this._icode = icode;\r\n this._mask = 1 | 0;\r\n this._index = -1;\r\n\r\n this._atoms = [];\r\n this._secondary = null;\r\n this._firstAtom = null;\r\n this._leadAtom = null;\r\n this._wingAtom = null;\r\n this._lastAtom = null;\r\n this._controlPoint = null;\r\n this._midPoint = null;\r\n this._wingVector = null;\r\n this._cylinders = null;\r\n this._isValid = true;\r\n this._het = false;\r\n this._molecule = null;\r\n this.temperature = null;\r\n this.occupancy = null;\r\n }\r\n\r\n // Getters and setters\r\n getChain() {\r\n return this._chain;\r\n }\r\n\r\n getMolecule() {\r\n return this._molecule;\r\n }\r\n\r\n getType() {\r\n return this._type;\r\n }\r\n\r\n getSequence() {\r\n return this._sequence;\r\n }\r\n\r\n getSecondary() {\r\n return this._secondary;\r\n }\r\n\r\n getICode() {\r\n return this._icode;\r\n }\r\n\r\n // Other methods\r\n\r\n addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge) {\r\n const atom = new Atom(this, name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n const complex = this._chain.getComplex();\r\n complex.addAtom(atom);\r\n this._atoms.push(atom);\r\n this._het = this._het || het;\r\n return atom;\r\n }\r\n\r\n getAtomCount() {\r\n return this._atoms.length;\r\n }\r\n\r\n forEachAtom(process) {\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n if (process(atoms[i])) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n _findAtomByName(name) {\r\n let res = null;\r\n this.forEachAtom((atom) => {\r\n if (atom.name === name) {\r\n res = atom;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return res;\r\n }\r\n\r\n _findFirstAtomInList(names) {\r\n let res = null;\r\n for (let i = 0; i < names.length; ++i) {\r\n res = this._findAtomByName(names[i]);\r\n if (res !== null) {\r\n return res;\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n mask &= atoms[i].mask;\r\n }\r\n this._mask = mask;\r\n }\r\n\r\n getCylinderTargetList() {\r\n const type = this._type._name;\r\n for (let i = 0, n = cCylinderTarget.length; i < n; ++i) {\r\n for (let j = 0, m = cCylinderTarget[i].types.length; j < m; ++j) {\r\n if (type === cCylinderTarget[i].types[j]) {\r\n return cCylinderTarget[i].atoms;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _detectLeadWing(dst, next, getAtomPosition) {\r\n const leadAtom = this._findFirstAtomInList(cNucleicControlNames);\r\n let wingStart = this._findFirstAtomInList(cNucleicWing1Names);\r\n let wingEnd = this._findFirstAtomInList(cNucleicWing2Names);\r\n\r\n if (wingStart === null && next !== null) {\r\n wingStart = next._findFirstAtomInList(cNucleicWing1Names);\r\n }\r\n\r\n if (wingEnd === null && next !== null) {\r\n wingEnd = next._findFirstAtomInList(cNucleicWing2Names);\r\n }\r\n\r\n if (leadAtom === null || wingStart === null || wingEnd === null) {\r\n return;\r\n }\r\n\r\n dst._leadAtom = leadAtom;\r\n dst._controlPoint = getAtomPosition(leadAtom);\r\n dst._wingVector = getAtomPosition(wingEnd).clone().sub(getAtomPosition(wingStart));\r\n dst._isValid = true;\r\n\r\n const cylSource = this._findFirstAtomInList(cCylinderSource);\r\n const targetList = this.getCylinderTargetList();\r\n const cylTarget = targetList !== null ? this._findFirstAtomInList(targetList) : null;\r\n if (cylSource === null || cylTarget === null) {\r\n return;\r\n }\r\n dst._cylinders = [getAtomPosition(cylSource), getAtomPosition(cylTarget)];\r\n }\r\n\r\n calcWing(prevLeadPos, currLeadPos, prevWingPos, prevWing) {\r\n const vectorA = currLeadPos.clone().sub(prevLeadPos);\r\n const vectorB = prevLeadPos.clone().sub(prevWingPos);\r\n vectorB.crossVectors(vectorA, vectorB);\r\n vectorB.crossVectors(vectorA, vectorB).normalize();\r\n if (prevWing !== null && prevWing.length() > 0.0001) {\r\n const needToNegate = vectorB.length() > 0.0001 && Math.abs(prevWing.angleTo(vectorB)) > Math.PI / 2;\r\n if (needToNegate) {\r\n vectorB.negate();\r\n }\r\n }\r\n return vectorB;\r\n }\r\n\r\n _innerFinalize(prevRes, prev, nextRes, dst, chainAsNucleic, getAtomPosition) {\r\n const bFirstInChain = prev === null;\r\n\r\n const lp = getAtomPosition(this._leadAtom);\r\n const currLeadPos = new THREE.Vector3(lp.x, lp.y, lp.z);\r\n if (chainAsNucleic) {\r\n this._detectLeadWing(dst, nextRes, getAtomPosition);\r\n return;\r\n }\r\n\r\n if (bFirstInChain) { // for first one in chain\r\n dst._midPoint = getAtomPosition(this._firstAtom).clone();\r\n } else {\r\n const prevLeadPos = prev._controlPoint; // lead point of previous monomer\r\n dst._midPoint = prevLeadPos.clone().lerp(currLeadPos, 0.5);\r\n dst._wingVector = this.calcWing(prevLeadPos, currLeadPos, getAtomPosition(prevRes._wingAtom), prev._wingVector);\r\n }\r\n dst._controlPoint = currLeadPos;\r\n }\r\n\r\n _finalize2(prev, next, asNucleic) {\r\n // Should be called AFTER first finalize\r\n this._innerFinalize(prev, prev, next, this, asNucleic, (atom) => atom.position);\r\n }\r\n\r\n isConnected(anotherResidue) {\r\n if (this._chain !== anotherResidue._chain) {\r\n return false;\r\n }\r\n if (this === anotherResidue) {\r\n return true;\r\n }\r\n let res = false;\r\n this.forEachAtom((atom) => {\r\n const { bonds } = atom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n const bond = bonds[i];\r\n if (bond._left.residue === anotherResidue || bond._right.residue === anotherResidue) {\r\n res = true;\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n return res;\r\n }\r\n\r\n _finalize() {\r\n const self = this;\r\n [this._firstAtom] = this._atoms;\r\n this._lastAtom = this._atoms[this._atoms.length - 1];\r\n\r\n this._leadAtom = null;\r\n this._wingAtom = null;\r\n\r\n let tempCount = 0;\r\n let temperature = 0; // average temperature\r\n let occupCount = 0;\r\n let occupancy = 0; // average occupancy\r\n this.forEachAtom((a) => {\r\n if (self._leadAtom === null) {\r\n if (a.role === Element.Constants.Lead) {\r\n self._leadAtom = a;\r\n }\r\n }\r\n if (self._wingAtom === null) {\r\n if (a.role === Element.Constants.Wing) {\r\n self._wingAtom = a;\r\n }\r\n }\r\n if (a.temperature) {\r\n temperature += a.temperature;\r\n tempCount++;\r\n }\r\n if (a.occupancy) {\r\n occupancy += a.occupancy;\r\n occupCount++;\r\n }\r\n return (self._leadAtom !== null && self._wingAtom !== null);\r\n });\r\n\r\n if (tempCount > 0) {\r\n this.temperature = temperature / tempCount;\r\n }\r\n if (occupCount > 0) {\r\n this.occupancy = occupancy / occupCount;\r\n }\r\n\r\n // Still try to make monomer look valid\r\n if (this._leadAtom === null || this._wingAtom === null) {\r\n this._isValid = false;\r\n }\r\n if (this._leadAtom === null) {\r\n this._leadAtom = this._firstAtom;\r\n }\r\n if (this._wingAtom === null) {\r\n this._wingAtom = this._lastAtom;\r\n }\r\n }\r\n}\r\n\r\nexport default Residue;\r\n","/**\r\n * Residue type.\r\n *\r\n * Predefined acid or created with HET, HETNAM, etc.\r\n *\r\n * @param {string} name - Short name, either standard (ALA, MET, etc.) or non-standard one.\r\n * @param {string} fullName - Full residue name.\r\n * @param {string} letterCode - 1-letter symbol.\r\n *\r\n * @exports ResidueType\r\n * @constructor\r\n */\r\nclass ResidueType {\r\n constructor(name, fullName, letterCode) {\r\n this._name = name;\r\n this._fullName = fullName;\r\n this.letterCode = letterCode;\r\n this.flags = 0x0000;\r\n }\r\n\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\n static StandardTypes = {\r\n\r\n ALA: new ResidueType('ALA', 'Alanine', 'A'),\r\n ARG: new ResidueType('ARG', 'Arginine', 'R'),\r\n ASN: new ResidueType('ASN', 'Asparagine', 'N'),\r\n ASP: new ResidueType('ASP', 'Aspartic Acid', 'D'),\r\n CYS: new ResidueType('CYS', 'Cysteine', 'C'),\r\n GLN: new ResidueType('GLN', 'Glutamine', 'Q'),\r\n GLU: new ResidueType('GLU', 'Glutamic Acid', 'E'),\r\n GLY: new ResidueType('GLY', 'Glycine', 'G'),\r\n HIS: new ResidueType('HIS', 'Histidine', 'H'),\r\n ILE: new ResidueType('ILE', 'Isoleucine', 'I'),\r\n LEU: new ResidueType('LEU', 'Leucine', 'L'),\r\n LYS: new ResidueType('LYS', 'Lysine', 'K'),\r\n MET: new ResidueType('MET', 'Methionine', 'M'),\r\n PHE: new ResidueType('PHE', 'Phenylalanine', 'F'),\r\n PRO: new ResidueType('PRO', 'Proline', 'P'),\r\n PYL: new ResidueType('PYL', 'Pyrrolysine', 'O'),\r\n SEC: new ResidueType('SEC', 'Selenocysteine', 'U'),\r\n SER: new ResidueType('SER', 'Serine', 'S'),\r\n THR: new ResidueType('THR', 'Threonine', 'T'),\r\n TRP: new ResidueType('TRP', 'Tryptophan', 'W'),\r\n TYR: new ResidueType('TYR', 'Tyrosine', 'Y'),\r\n VAL: new ResidueType('VAL', 'Valine', 'V'),\r\n A: new ResidueType('A', 'Adenine', 'A'),\r\n C: new ResidueType('C', 'Cytosine', 'C'),\r\n G: new ResidueType('G', 'Guanine', 'G'),\r\n I: new ResidueType('I', 'Inosine', 'I'),\r\n T: new ResidueType('T', 'Thymine', 'T'),\r\n U: new ResidueType('U', 'Uracil', 'U'),\r\n DA: new ResidueType('DA', 'Adenine', 'A'),\r\n DC: new ResidueType('DC', 'Cytosine', 'C'),\r\n DG: new ResidueType('DG', 'Guanine', 'G'),\r\n DI: new ResidueType('DI', 'Inosine', 'I'),\r\n DT: new ResidueType('DT', 'Thymine', 'T'),\r\n DU: new ResidueType('DU', 'Uracil', 'U'),\r\n '+A': new ResidueType('+A', 'Adenine', 'A'),\r\n '+C': new ResidueType('+C', 'Cytosine', 'C'),\r\n '+G': new ResidueType('+G', 'Guanine', 'G'),\r\n '+I': new ResidueType('+I', 'Inosine', 'I'),\r\n '+T': new ResidueType('+T', 'Thymine', 'T'),\r\n '+U': new ResidueType('+U', 'Uracil', 'U'),\r\n WAT: new ResidueType('WAT', 'Water', ''),\r\n H2O: new ResidueType('H2O', 'Water', ''),\r\n HOH: new ResidueType('HOH', 'Water', ''),\r\n DOD: new ResidueType('DOD', 'Water', ''),\r\n UNK: new ResidueType('UNK', 'Unknown', ''),\r\n UNL: new ResidueType('UNL', 'Unknown Ligand', ''),\r\n\r\n };\r\n\r\n /**\r\n * Enumeration of residue flag values.\r\n *\r\n * @enum {number}\r\n * @readonly\r\n */\r\n static Flags = {\r\n // Amino acids\r\n /** Amino acid residue */\r\n PROTEIN: 0x0001,\r\n /** Basic amino acid residue */\r\n BASIC: 0x0002,\r\n /** Acidic amino acid residue */\r\n ACIDIC: 0x0004,\r\n /** Polar uncharged side chain amino acid residue */\r\n POLAR: 0x0008,\r\n /** Non-polar hydrophobic side chain amino acid residue */\r\n NONPOLAR: 0x0010,\r\n /** Aromatic amino acid residue */\r\n AROMATIC: 0x0020,\r\n\r\n // Nucleic acids\r\n\r\n /** Nucleic residue */\r\n NUCLEIC: 0x0100,\r\n /** Purine nucleic residue */\r\n PURINE: 0x0200,\r\n /** Pyrimidine nucleic residue */\r\n PYRIMIDINE: 0x0400,\r\n /** DNA */\r\n DNA: 0x0800,\r\n /** RNA */\r\n RNA: 0x1000,\r\n\r\n /** Water */\r\n WATER: 0x10000,\r\n };\r\n}\r\n\r\n// Flag combinations\r\nfunction _addFlag(flag, list) {\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n const res = ResidueType.StandardTypes[list[i]];\r\n if (res) {\r\n res.flags |= flag;\r\n }\r\n }\r\n}\r\n\r\nconst { Flags } = ResidueType;\r\n_addFlag(Flags.WATER, ['WAT', 'H2O', 'HOH', 'DOD']);\r\n\r\n_addFlag(Flags.PROTEIN, [\r\n 'ALA', 'ARG', 'ASN', 'ASP', 'CYS', 'GLY', 'GLU', 'GLN', 'HIS', 'ILE',\r\n 'LEU', 'LYS', 'MET', 'PHE', 'PRO', 'PYL', 'SEC', 'SER', 'THR', 'TRP',\r\n 'TYR', 'VAL',\r\n]);\r\n_addFlag(Flags.BASIC, ['ARG', 'HIS', 'LYS']);\r\n_addFlag(Flags.ACIDIC, ['ASP', 'GLU']);\r\n_addFlag(Flags.POLAR, ['ASN', 'CYS', 'GLN', 'SER', 'THR', 'TYR']);\r\n_addFlag(Flags.NONPOLAR, ['ALA', 'ILE', 'LEU', 'MET', 'PHE', 'PRO', 'TRP', 'VAL', 'GLY']);\r\n_addFlag(Flags.AROMATIC, ['PHE', 'TRP', 'TYR']);\r\n\r\n_addFlag(Flags.NUCLEIC, [\r\n 'A', 'G', 'I', 'DA', 'DG', 'DI', '+A', '+G', '+I',\r\n 'C', 'T', 'U', 'DC', 'DT', 'DU', '+C', '+T', '+U',\r\n]);\r\n_addFlag(Flags.PURINE, ['A', 'G', 'I', 'DA', 'DG', 'DI', '+A', '+G', '+I']);\r\n_addFlag(Flags.PYRIMIDINE, ['C', 'T', 'U', 'DC', 'DT', 'DU', '+C', '+T', '+U']);\r\n_addFlag(Flags.DNA, ['DA', 'DG', 'DI', 'DC', 'DT', 'DU']);\r\n_addFlag(Flags.RNA, ['A', 'G', 'I', 'C', 'T', 'U']);\r\n// Table of kdHydrophobicity\r\nconst hydro = {\r\n ILE: 4.5,\r\n VAL: 4.2,\r\n LEU: 3.8,\r\n PHE: 2.8,\r\n CYS: 2.5,\r\n MET: 1.9,\r\n ALA: 1.8,\r\n GLY: -0.4,\r\n THR: -0.7,\r\n SER: -0.8,\r\n TRP: -0.9,\r\n TYR: -1.3,\r\n PRO: -1.6,\r\n HIS: -3.2,\r\n GLU: -3.5,\r\n GLN: -3.5,\r\n ASP: -3.5,\r\n ASN: -3.5,\r\n LYS: -3.9,\r\n ARG: -4.5,\r\n};\r\n\r\nfunction _addParam(param, list) {\r\n const keys = Object.keys(list);\r\n for (let i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n const value = list[key];\r\n ResidueType.StandardTypes[key][param] = value;\r\n }\r\n}\r\n\r\n_addParam('hydrophobicity', hydro);\r\n\r\nexport default ResidueType;\r\n","import * as THREE from 'three';\r\nimport Residue from './Residue';\r\nimport ResidueType from './ResidueType';\r\n\r\n/**\r\n * Residues in chain are either amino acid either nucleic acid (and water)\r\n * There might be some modified/mutated residues, which type could not be determined by their name (nucleic or amino); In this\r\n * case firstly program definites the chain type (by well-known residues) and then definites modified/mutated residues\r\n */\r\nconst ChainType = {\r\n UNKNOWN: 0,\r\n PROTEIN: 1,\r\n NUCLEIC: 2,\r\n};\r\n\r\n/**\r\n * Residue chain.\r\n *\r\n * @param {Complex} complex - Molecular complex this chain belongs to.\r\n * @param {string} name - One character identifier (usually space, A-Z, 0-9, or a-z).\r\n *\r\n * @exports Chain\r\n * @constructor\r\n */\r\nclass Chain {\r\n constructor(complex, name) {\r\n this._complex = complex;\r\n this._name = name;\r\n this._mask = 1 | 0;\r\n this._index = -1;\r\n this._residues = [];\r\n\r\n this.minSequence = Number.POSITIVE_INFINITY;\r\n this.maxSequence = Number.NEGATIVE_INFINITY;\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getResidues() {\r\n return this._residues;\r\n }\r\n\r\n _determineType() {\r\n const residues = this._residues;\r\n\r\n const { PROTEIN, NUCLEIC } = ResidueType.Flags;\r\n\r\n this.type = ChainType.UNKNOWN;\r\n\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const { flags } = residues[i]._type;\r\n\r\n if ((flags & NUCLEIC) !== 0) {\r\n this.type = ChainType.NUCLEIC;\r\n break;\r\n } else if ((flags & PROTEIN) !== 0) {\r\n this.type = ChainType.PROTEIN;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Finds thre residue with specified sequence number and inserion code\r\n * @param {Number} seqNum sequence number\r\n * @param {string} iCode insertion code\r\n * @returns {*} Residue or null if not found\r\n */\r\n findResidue(seqNum, iCode) {\r\n const residues = this._residues;\r\n\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const res = residues[i];\r\n if (res._sequence === seqNum && res._icode === iCode) {\r\n return [res, i];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _finalize() {\r\n this._determineType();\r\n\r\n const residues = this._residues;\r\n\r\n let prev = null;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const next = (i + 1 < n) ? residues[i + 1] : null;\r\n const curr = residues[i];\r\n // TODO: skip invalid residues\r\n if (1 /* curr._isValid */) { // eslint-disable-line no-constant-condition\r\n curr._finalize2(prev, next, this.type === ChainType.NUCLEIC);\r\n prev = curr;\r\n }\r\n }\r\n\r\n // fix very first wing\r\n if (residues.length > 1 && residues[1]._wingVector) {\r\n const p = residues[1]._wingVector;\r\n residues[0]._wingVector = new THREE.Vector3(p.x, p.y, p.z);\r\n } else if (residues.length > 0) {\r\n residues[0]._wingVector = new THREE.Vector3(1, 0, 0);\r\n }\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const residues = this._residues;\r\n let prev = null;\r\n let prevData = null;\r\n const frameRes = frameData._residues;\r\n const n = residues.length;\r\n function getAtomPos(atom) {\r\n return frameData.getAtomPos(atom.index);\r\n }\r\n\r\n for (let i = 0; i < n; ++i) {\r\n const curr = residues[i];\r\n const currData = frameRes[curr._index];\r\n const nextRes = (i + 1 < n) ? residues[i + 1] : null;\r\n curr._innerFinalize(prev, prevData, nextRes, currData, this.type === ChainType.NUCLEIC, getAtomPos);\r\n prev = curr;\r\n prevData = currData;\r\n }\r\n\r\n frameRes[residues[0]._index]._wingVector = n > 1\r\n ? frameRes[residues[1]._index]._wingVector\r\n : new THREE.Vector3(1, 0, 0);\r\n }\r\n\r\n /**\r\n * Create a new residue.\r\n *\r\n * @param {string} name - Residue name.\r\n * @param {number} sequence - Residue sequence number.\r\n * @param {string} iCode - Insertion code.\r\n * @returns {Residue} - Newly created residue instance.\r\n */\r\n addResidue(name, sequence, iCode) {\r\n let type = this._complex.getResidueType(name);\r\n if (type === null) {\r\n type = this._complex.addResidueType(name);\r\n }\r\n const residue = new Residue(this, type, sequence, iCode);\r\n this._complex.addResidue(residue);\r\n this._residues.push(residue);\r\n\r\n if (type.flags & (ResidueType.Flags.NUCLEIC | ResidueType.Flags.PROTEIN)) {\r\n if (this.maxSequence < sequence) {\r\n this.maxSequence = sequence;\r\n }\r\n if (this.minSequence > sequence) {\r\n this.minSequence = sequence;\r\n }\r\n }\r\n\r\n return residue;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residues.length;\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n mask &= residues[i]._mask;\r\n }\r\n this._mask = mask;\r\n }\r\n}\r\n\r\nexport default Chain;\r\n","import Residue from './Residue';\r\n\r\n/** An element of protein secondary structure. */\r\nclass StructuralElement {\r\n /**\r\n * Create a secondary structural element of the specified type.\r\n *\r\n * @param {StructuralElement.Type} type Secondary structure type.\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n */\r\n constructor(type, init, term) {\r\n /**\r\n * Secondary structure type.\r\n * @type {StructuralElement.Type}\r\n */\r\n this.type = type;\r\n /**\r\n * Generic secondary structure type.\r\n * @type {StructuralElement.Generic}\r\n */\r\n this.generic = StructuralElement.genericByType[this.type] || 'loop';\r\n /**\r\n * Initial residue.\r\n * @type Residue\r\n */\r\n this.init = init;\r\n /**\r\n * Terminal residue.\r\n * @type Residue\r\n */\r\n this.term = term;\r\n }\r\n\r\n /**\r\n * An internal method for making a final pass over the complex to set all required references.\r\n *\r\n * **NOTE:** I'm sorry. It's a legacy code waiting for refactoring.\r\n * Just copying it as-is right now and hoping for the best.\r\n *\r\n * @param {object} serialAtomMap A dictionary of atoms\r\n * @param {object} residueHash A dictionary of hashed residues to check.\r\n * @param {Complex} complex The molecular complex this element belongs to.\r\n */\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n if (this.init instanceof Residue && this.term instanceof Residue) {\r\n return;\r\n }\r\n\r\n // Link all intermediate residues to this structural element\r\n const start = complex.splitUnifiedSerial(this.init);\r\n const end = complex.splitUnifiedSerial(this.term);\r\n for (let chainId = start.chain; chainId <= end.chain; chainId++) {\r\n for (let serialId = start.serial; serialId <= end.serial; serialId++) {\r\n for (let { iCode } = start; iCode <= end.iCode; iCode++) {\r\n const hashCode = complex.getUnifiedSerial(chainId, serialId, iCode);\r\n if (residueHash[hashCode]) {\r\n residueHash[hashCode]._secondary = this;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Replace unfined serials by objects\r\n this.init = residueHash[this.init];\r\n this.term = residueHash[this.term];\r\n }\r\n}\r\n\r\n/**\r\n * Specific type of a secondary structural element.\r\n * @enum {string}\r\n * @see StructuralElement.Generic\r\n */\r\nStructuralElement.Type = {\r\n /** A strand of a [beta-sheet](https://en.wikipedia.org/wiki/Beta_sheet). */\r\n STRAND: 'E',\r\n /** An isolated beta-bridge (too small for a beta-sheet). */\r\n BRIDGE: 'B',\r\n\r\n /** A [3/10 helix](https://en.wikipedia.org/wiki/310_helix) (hydrogen bonding is 3 residues apart). */\r\n HELIX_310: 'G',\r\n /** An [alpha-helix](https://en.wikipedia.org/wiki/Alpha_helix) (hydrogen bonding is 4 residues apart). */\r\n HELIX_ALPHA: 'H',\r\n /** A [pi-helix](https://en.wikipedia.org/wiki/Pi_helix) (hydrogen bonding is 5 residues apart). */\r\n HELIX_PI: 'I',\r\n /** A generic helix of unspecified bonding distance. */\r\n HELIX: 'X',\r\n\r\n /** An isolated 3/10-like helical turn. */\r\n TURN_310: '3',\r\n /** An isolated alpha-like helical turn. */\r\n TURN_ALPHA: '4',\r\n /** An isolated pi-like helical turn. */\r\n TURN_PI: '5',\r\n /** An isolated helical [turn](https://en.wikipedia.org/wiki/Turn_(biochemistry)) of unspecified bonding distance. */\r\n TURN: 'T',\r\n\r\n /** A bend (a region of high curvature). */\r\n BEND: 'S',\r\n /** Just a protein section with no particular conformation. */\r\n COIL: 'C',\r\n};\r\n\r\n/**\r\n * Generic type of a secondary structural element.\r\n * @enum {string}\r\n * @see StructuralElement.Type\r\n */\r\nStructuralElement.Generic = {\r\n /** A strand of a sheet. */\r\n STRAND: 'strand',\r\n /** A helix. */\r\n HELIX: 'helix',\r\n /** Just a protein section with no particular conformation. */\r\n LOOP: 'loop',\r\n};\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\nconst StructuralElementGeneric = StructuralElement.Generic;\r\n\r\n/**\r\n * A mapping from specific types to generic ones.\r\n * @type {Object}\r\n */\r\nStructuralElement.genericByType = {\r\n [StructuralElementType.STRAND]: StructuralElementGeneric.STRAND,\r\n [StructuralElementType.HELIX_310]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX_ALPHA]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX_PI]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX]: StructuralElementGeneric.HELIX,\r\n};\r\n\r\nexport default StructuralElement;\r\n","import StructuralElement from './StructuralElement';\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\nexport const typeByPDBHelixClass = {\r\n 1: StructuralElementType.HELIX_ALPHA,\r\n 3: StructuralElementType.HELIX_PI,\r\n 5: StructuralElementType.HELIX_310,\r\n};\r\n\r\n/**\r\n * Helical secondary structure of a protein.\r\n * @extends StructuralElement\r\n */\r\nclass Helix extends StructuralElement {\r\n /**\r\n * Create a helix.\r\n *\r\n * @param {number} helixClass A helix class according to the\r\n * [PDB Format](http://www.wwpdb.org/documentation/file-format-content/format33/sect5.html#HELIX).\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n * @param {number} serial Serial number of the helix (see PDB Format).\r\n * @param {string} name Helix identifier (see PDB Format).\r\n * @param {string} comment Comment about this helix (see PDB Format).\r\n * @param {number} length Length of this helix, in residues (see PDB Format).\r\n */\r\n constructor(helixClass, init, term, serial, name, comment, length) {\r\n super(typeByPDBHelixClass[helixClass] || StructuralElement.Type.HELIX, init, term);\r\n\r\n /**\r\n * Serial number of the helix (see PDB Format).\r\n * @type {number}\r\n */\r\n this.serial = serial;\r\n /**\r\n * Helix identifier (see PDB Format).\r\n * @type {string}\r\n */\r\n this.name = name;\r\n /**\r\n * Comment about this helix (see PDB Format).\r\n * @type {string}\r\n */\r\n this.comment = comment;\r\n /**\r\n * Length of this helix, in residues (see PDB Format).\r\n * @type {number}\r\n */\r\n this.length = length;\r\n }\r\n}\r\n\r\nexport default Helix;\r\n","import StructuralElement from './StructuralElement';\r\n\r\n/**\r\n * A single strand of a sheet in a protein secondary structure.\r\n * @extends StructuralElement\r\n */\r\nclass Strand extends StructuralElement {\r\n /**\r\n * Create a strand.\r\n *\r\n * @param {Sheet} sheet Parent sheet this strand belongs to.\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n * @param {number} sense Sense of strand with respect to previous strand in the sheet.\r\n * - 0 if the first strand,\r\n * - 1 if parallel, and\r\n * - -1 if anti-parallel.\r\n * @param {Atom} atomCur Atom in current strand (see PDB Format).\r\n * @param {Atom} atomPrev Atom in previous strand (see PDB Format).\r\n */\r\n constructor(sheet, init, term, sense, atomCur, atomPrev) {\r\n super(StructuralElement.Type.STRAND, init, term);\r\n\r\n /**\r\n * Parent sheet this strand belongs to.\r\n * @type {Sheet}\r\n */\r\n this.sheet = sheet;\r\n /**\r\n * Sense of strand with respect to previous strand in the sheet.\r\n * - 0 if the first strand,\r\n * - 1 if parallel, and\r\n * - -1 if anti-parallel.\r\n * @type {number}\r\n */\r\n this.sense = sense;\r\n /**\r\n * Atom in current strand (see PDB Format).\r\n * @type {Atom}\r\n */\r\n this.atomCur = atomCur;\r\n /**\r\n * Atom in previous strand (see PDB Format).\r\n * @type {Atom}\r\n */\r\n this.atomPrev = atomPrev;\r\n }\r\n\r\n /**\r\n * An internal method for making a final pass over the complex to set all required references.\r\n *\r\n * **NOTE:** I'm sorry. It's a legacy code waiting for refactoring.\r\n * Just copying it as-is right now and hoping for the best.\r\n *\r\n * @param {object} serialAtomMap A dictionary of atoms\r\n * @param {object} residueHash A dictionary of hashed residues to check.\r\n * @param {Complex} complex The molecular complex this element belongs to.\r\n *\r\n * @override\r\n */\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n super._finalize(serialAtomMap, residueHash, complex);\r\n\r\n let as = this.atomCur;\r\n if (as !== null && !Number.isNaN(as)) {\r\n this.atomCur = serialAtomMap[as];\r\n }\r\n as = this.atomPrev;\r\n if (as !== null && !Number.isNaN(as)) {\r\n this.atomPrev = serialAtomMap[as];\r\n }\r\n }\r\n}\r\n\r\nexport default Strand;\r\n","import Strand from './Strand';\r\n\r\n/**\r\n * Sheet secondary structure of a protein.\r\n *\r\n * @param {string} name -\r\n * @param {number} width -\r\n *\r\n * @exports Sheet\r\n * @constructor\r\n */\r\nclass Sheet {\r\n constructor(name, width) {\r\n this._name = name;\r\n this._width = width;\r\n\r\n this._strands = [];\r\n }\r\n\r\n // Getters and setters\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getWidth() {\r\n return this._width;\r\n }\r\n\r\n addStrand(strand) {\r\n this._strands.push(strand);\r\n this._width = this._strands.length;\r\n }\r\n\r\n addEmptyStrand() {\r\n this._strands.push(new Strand(null, null, null, null, null, null));\r\n }\r\n\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n const s = this._strands;\r\n for (let i = 0, n = s.length; i < n; ++i) {\r\n s[i]._finalize(serialAtomMap, residueHash, complex);\r\n }\r\n if (!this._width) {\r\n this._width = s.length;\r\n }\r\n if (s.length !== this._width) {\r\n throw new Error(`Sheet ${this._name} is inconsistent.`);\r\n }\r\n }\r\n}\r\n\r\nexport default Sheet;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Atom measurements.\r\n *\r\n * @param {string} id - SGroup id\r\n * @param {string} name - Name of the group\r\n * @param {THREE.Vector3} position - Registered coordinates\r\n * @param {array} atoms - Atoms group consists of\r\n * @param {object} saveNode - XML node from file for saving\r\n *\r\n * @exports SGroup\r\n * @constructor\r\n */\r\nclass SGroup {\r\n constructor(id, name, position, atoms, saveNode) {\r\n this._id = id;\r\n this._name = name;\r\n this._position = position || new THREE.Vector3();\r\n this._atoms = atoms || [];\r\n this._charge = 0; // default group charge\r\n this._repeat = 1; // how many times group repeated: always > 0\r\n this._center = null;\r\n this.xmlNodeRef = saveNode || null;\r\n }\r\n\r\n /**\r\n * Get atom full name.\r\n * @returns {string} Atom full name.\r\n */\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getPosition() {\r\n return this._position;\r\n }\r\n\r\n getCentralPoint() {\r\n return this._center;\r\n }\r\n\r\n _rebuildSGroupOnAtomChange() {\r\n const nLimon = 100000000;\r\n if (this._center === null) {\r\n return; // nothing to do if we are not relative\r\n }\r\n\r\n const bLow = new THREE.Vector3(nLimon, nLimon, nLimon);\r\n const bHight = new THREE.Vector3(-nLimon, -nLimon, -nLimon);\r\n for (let j = 0, n = this._atoms.length; j < n; j++) {\r\n const aPos = this._atoms[j].position;\r\n bLow.set(Math.min(bLow.x, aPos.x), Math.min(bLow.y, aPos.y), Math.min(bLow.z, aPos.z));\r\n bHight.set(Math.max(bHight.x, aPos.x), Math.max(bHight.y, aPos.y), Math.max(bHight.z, aPos.z));\r\n }\r\n this._center.addVectors(bLow, bHight);\r\n this._center.multiplyScalar(0.5);\r\n }\r\n}\r\n\r\nexport default SGroup;\r\n","import utils from '../../utils';\r\n\r\n//----------------------------------------------------------------------------\r\nclass Range {\r\n constructor(min, max) {\r\n this.min = min;\r\n this.max = typeof max === 'undefined' ? min : max;\r\n }\r\n\r\n includes(value) {\r\n return this.min <= value && value <= this.max;\r\n }\r\n\r\n toString() {\r\n const { min, max } = this;\r\n return min === max ? String(min) : [min, max].join(':');\r\n }\r\n\r\n toJSON() {\r\n return [this.min, this.max];\r\n }\r\n}\r\n\r\n// ////////////////////////////////////////////////////////////////////////////\r\n\r\nclass List {\r\n constructor(arg) {\r\n if (arg instanceof this.constructor) {\r\n // delegate construction to a different class\r\n // eslint-disable-next-line no-constructor-return\r\n return arg;\r\n }\r\n if (arg instanceof Array) {\r\n this._values = arg.slice(0);\r\n } else if (arg) {\r\n this._values = [arg];\r\n } else {\r\n this._values = [];\r\n }\r\n }\r\n\r\n append(value) {\r\n const values = this._values;\r\n values[values.length] = value;\r\n return this;\r\n }\r\n\r\n remove(value) {\r\n const values = this._values;\r\n const index = values.indexOf(value);\r\n if (index >= 0) {\r\n values.splice(index, 1);\r\n }\r\n return this;\r\n }\r\n\r\n toString() {\r\n return this._values.join(',');\r\n }\r\n\r\n toJSON() {\r\n const values = this._values;\r\n const result = [];\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n const value = values[i];\r\n result[i] = value.toJSON ? value.toJSON() : value;\r\n }\r\n return result;\r\n }\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n\r\nclass RangeList extends List {\r\n includes(value) {\r\n const list = this._values;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n if (list[i].includes(value)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n\r\nconst valuesArray = [];\r\n\r\nclass ValueList extends List {\r\n constructor(arg, upperOnly) {\r\n const list = super(arg);\r\n if (upperOnly) {\r\n this.upperOnly = true;\r\n const values = list._values;\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n const value = values[i];\r\n if (typeof value === 'string') {\r\n values[i] = value.toUpperCase();\r\n }\r\n }\r\n } else {\r\n this.upperOnly = false;\r\n }\r\n // return constructed object\r\n // eslint-disable-next-line no-constructor-return\r\n return list;\r\n }\r\n\r\n includes(value) {\r\n // we do not convert to upper case here for perfomance reasons\r\n // if list is upper case only, value must be converted before it is sent up to here\r\n return this._values.indexOf(value) !== -1;\r\n }\r\n\r\n toString() {\r\n // Quote values that are not correct identifiers\r\n const values = this._values;\r\n valuesArray.length = 0;\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n valuesArray[i] = utils.correctSelectorIdentifier(String(values[i]));\r\n }\r\n return valuesArray.join(',');\r\n }\r\n\r\n _validate(value) {\r\n return (this.upperOnly && typeof value === 'string') ? value.toUpperCase() : value;\r\n }\r\n\r\n append(value) {\r\n super.append(this._validate(value));\r\n return this;\r\n }\r\n\r\n remove(value) {\r\n super.remove(this._validate(value));\r\n return this;\r\n }\r\n}\r\n\r\nexport {\r\n Range,\r\n List,\r\n RangeList,\r\n ValueList,\r\n};\r\n","import { RangeList, ValueList } from './selectArgs';\r\n\r\n/** Base class for atom selectors. */\r\nclass Selector {\r\n toString() {\r\n return this.keyword;\r\n }\r\n\r\n toJSON() {\r\n return [this.name];\r\n }\r\n}\r\n\r\nSelector.prototype.name = 'Error';\r\nSelector.prototype.keyword = 'error';\r\n\r\n/** Base class for list-based atom selectors. */\r\nclass ListSelector extends Selector {\r\n constructor(list) {\r\n super();\r\n this.list = list;\r\n }\r\n\r\n toString() {\r\n return `${this.keyword} ${this.list}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.list.toJSON()];\r\n }\r\n}\r\n\r\nclass RangeListSelector extends ListSelector {\r\n constructor(arg) {\r\n super(new RangeList(arg));\r\n }\r\n}\r\n\r\nclass ValueListSelector extends ListSelector {\r\n constructor(arg, caseSensitive) {\r\n super(new ValueList(arg, !caseSensitive));\r\n }\r\n}\r\n\r\nclass NoneSelector extends Selector {\r\n includesAtom(_atom) {\r\n return false;\r\n }\r\n}\r\n\r\nNoneSelector.prototype.name = 'None';\r\nNoneSelector.prototype.keyword = 'none';\r\n\r\nclass AllSelector extends Selector {\r\n includesAtom(_atom) {\r\n return true;\r\n }\r\n}\r\n\r\nAllSelector.prototype.name = 'All';\r\nAllSelector.prototype.keyword = 'all';\r\n\r\nexport {\r\n Selector,\r\n ListSelector,\r\n RangeListSelector,\r\n ValueListSelector,\r\n NoneSelector,\r\n AllSelector,\r\n};\r\n","import { Selector, NoneSelector } from './selectorsBase';\r\n\r\n//----------------------------------------------------------------------------\r\n// Operators\r\n//----------------------------------------------------------------------------\r\nconst none = new NoneSelector();\r\n\r\nclass PrefixOperator extends Selector {\r\n constructor(rhs) {\r\n super();\r\n this.rhs = rhs || none;\r\n }\r\n\r\n toString() {\r\n const rhs = this.rhs.priority && this.rhs.priority > this.priority ? `(${this.rhs})` : this.rhs;\r\n return `${this.keyword} ${rhs}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.rhs.toJSON()];\r\n }\r\n}\r\n\r\nPrefixOperator.prototype.priority = 1;\r\n\r\nclass InfixOperator extends Selector {\r\n constructor(lhs, rhs) {\r\n super();\r\n this.lhs = lhs || none;\r\n this.rhs = rhs || none;\r\n }\r\n\r\n toString() {\r\n const lhs = this.lhs.priority && this.lhs.priority > this.priority ? `(${this.lhs})` : this.lhs;\r\n const rhs = this.rhs.priority && this.rhs.priority > this.priority ? `(${this.rhs})` : this.rhs;\r\n return `${lhs} ${this.keyword} ${rhs}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.lhs.toJSON(), this.rhs.toJSON()];\r\n }\r\n}\r\n\r\nInfixOperator.prototype.priority = 1000;\r\n\r\nexport { PrefixOperator, InfixOperator };\r\n","import Atom from './Atom';\r\nimport ResidueType from './ResidueType';\r\nimport { parser } from '../utils/SelectionParser';\r\nimport { Range, RangeList, ValueList } from './selectors/selectArgs';\r\nimport { PrefixOperator, InfixOperator } from './selectors/selectOps';\r\nimport {\r\n Selector,\r\n RangeListSelector,\r\n ValueListSelector,\r\n NoneSelector,\r\n AllSelector,\r\n} from './selectors/selectorsBase';\r\n\r\nconst keywords = {};\r\n\r\n//----------------------------------------------------------------------------\r\n// Named selectors\r\n//----------------------------------------------------------------------------\r\n\r\nfunction defineSelector(name, SelectorClass) {\r\n const keyword = name.toLowerCase();\r\n SelectorClass.prototype.keyword = keyword;\r\n SelectorClass.prototype.name = name;\r\n\r\n const factory = ((...args) => new SelectorClass(...args));\r\n factory.SelectorClass = SelectorClass;\r\n keywords[keyword] = factory;\r\n\r\n return SelectorClass;\r\n}\r\n\r\ndefineSelector('Serial', class SerialSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.serial);\r\n }\r\n});\r\n\r\ndefineSelector('Name', class NameSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.name);\r\n }\r\n});\r\n\r\ndefineSelector('AltLoc', class AltLocSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(String.fromCharCode(atom.location));\r\n }\r\n});\r\n\r\ndefineSelector('Elem', class ElemSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.element.name);\r\n }\r\n});\r\n\r\ndefineSelector('Residue', class ResidueSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._type._name);\r\n }\r\n});\r\n\r\ndefineSelector('Sequence', class SequenceSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._sequence);\r\n }\r\n});\r\n\r\ndefineSelector('ICode', class ICodeSelector extends ValueListSelector {\r\n constructor(arg) {\r\n super(arg, true);\r\n }\r\n\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._icode);\r\n }\r\n});\r\n\r\ndefineSelector('ResIdx', class ResIdxSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._index);\r\n }\r\n});\r\n\r\ndefineSelector('Chain', class ChainSelector extends ValueListSelector {\r\n constructor(arg) {\r\n super(arg, true);\r\n }\r\n\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._chain._name);\r\n }\r\n});\r\n\r\ndefineSelector('Hetatm', class HetatmSelector extends Selector {\r\n includesAtom(atom) {\r\n return atom.het;\r\n }\r\n});\r\n\r\ndefineSelector('PolarH', class PolarHSelector extends Selector {\r\n includesAtom(atom) {\r\n return (atom.flags & Atom.Flags.NONPOLARH) === Atom.Flags.HYDROGEN;\r\n }\r\n});\r\n\r\ndefineSelector('NonPolarH', class NonPolarHSelector extends Selector {\r\n includesAtom(atom) {\r\n return (atom.flags & Atom.Flags.NONPOLARH) === Atom.Flags.NONPOLARH;\r\n }\r\n});\r\n\r\ndefineSelector('All', AllSelector);\r\n\r\ndefineSelector('None', NoneSelector);\r\n\r\nconst NULL_SELECTOR = keywords.none();\r\n\r\n//----------------------------------------------------------------------------\r\n// Named operators\r\n//----------------------------------------------------------------------------\r\n\r\nfunction defineOperator(name, priority, OperatorClass) {\r\n OperatorClass.prototype.priority = priority;\r\n return defineSelector(name, OperatorClass);\r\n}\r\ndefineOperator('Not', 1, class NotOperator extends PrefixOperator {\r\n includesAtom(atom) {\r\n return !this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\ndefineOperator('And', 2, class AndOperator extends InfixOperator {\r\n includesAtom(atom) {\r\n return this.lhs.includesAtom(atom) && this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\ndefineOperator('Or', 3, class OrOperator extends InfixOperator {\r\n includesAtom(atom) {\r\n return this.lhs.includesAtom(atom) || this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\n//----------------------------------------------------------------------------\r\n// Flag selectors\r\n//----------------------------------------------------------------------------\r\n\r\nfunction byResidueTypeFlag(flag, name) {\r\n return defineSelector(name, class extends Selector {\r\n includesAtom(atom) {\r\n return (atom.residue._type.flags & flag) !== 0;\r\n }\r\n });\r\n}\r\n\r\nbyResidueTypeFlag(ResidueType.Flags.PROTEIN, 'Protein');\r\nbyResidueTypeFlag(ResidueType.Flags.BASIC, 'Basic');\r\nbyResidueTypeFlag(ResidueType.Flags.ACIDIC, 'Acidic');\r\nbyResidueTypeFlag(ResidueType.Flags.BASIC | ResidueType.Flags.ACIDIC, 'Charged');\r\nbyResidueTypeFlag(ResidueType.Flags.POLAR, 'Polar');\r\nbyResidueTypeFlag(ResidueType.Flags.NONPOLAR, 'NonPolar');\r\nbyResidueTypeFlag(ResidueType.Flags.AROMATIC, 'Aromatic');\r\nbyResidueTypeFlag(ResidueType.Flags.NUCLEIC, 'Nucleic');\r\nbyResidueTypeFlag(ResidueType.Flags.PURINE, 'Purine');\r\nbyResidueTypeFlag(ResidueType.Flags.PYRIMIDINE, 'Pyrimidine');\r\nbyResidueTypeFlag(ResidueType.Flags.WATER, 'Water');\r\n\r\n//----------------------------------------------------------------------------\r\nconst selectors = Object.create(keywords);\r\n\r\nselectors.Selector = Selector;\r\nselectors.RangeListSelector = RangeListSelector;\r\nselectors.ValueListSelector = ValueListSelector;\r\nselectors.Range = Range;\r\nselectors.RangeList = RangeList;\r\nselectors.ValueList = ValueList;\r\nselectors.PrefixOperator = PrefixOperator;\r\nselectors.InfixOperator = InfixOperator;\r\nselectors.Context = Object.create({});\r\n\r\nselectors.GetSelector = function (key) {\r\n if (!selectors.Context.hasOwnProperty(key)) {\r\n const exc = { message: `selector ${key} is not registered` };\r\n throw exc;\r\n }\r\n return selectors.Context[key] || NULL_SELECTOR;\r\n};\r\n\r\nselectors.ClearContext = function () {\r\n Object.keys(selectors.Context).forEach((k) => { delete selectors.Context[k]; });\r\n};\r\n\r\nselectors.keyword = function (key) {\r\n return keywords[key.toLowerCase()] || keywords.none;\r\n};\r\n\r\nselectors.parse = function (str) {\r\n const res = {};\r\n try {\r\n res.selector = parser.parse(str);\r\n } catch (e) {\r\n res.selector = NULL_SELECTOR;\r\n res.error = e.message;\r\n }\r\n return res;\r\n};\r\n\r\nparser.yy = selectors;\r\nparser.yy.parseError = parser.parseError; // workaround for incorrect JISON parser generator for AMD module\r\n\r\nexport default selectors;\r\n","import * as THREE from 'three';\r\nimport selectors from './selectors';\r\n\r\n/**\r\n * Basic biological unit class.\r\n *\r\n * @exports BiologicalUnit\r\n * @constructor\r\n */\r\nclass BiologicalUnit {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._selector = selectors.keyword('All')();\r\n this._boundaries = {\r\n boundingBox: new THREE.Box3(),\r\n boundingSphere: new THREE.Sphere(),\r\n };\r\n }\r\n\r\n computeBoundaries() {\r\n const atoms = this._complex._atoms;\r\n const n = atoms.length;\r\n const selector = this._selector;\r\n\r\n const { boundingBox } = this._boundaries;\r\n boundingBox.makeEmpty();\r\n if (n === 1) {\r\n boundingBox.expandByPoint(atoms[0].position);\r\n const bbc = new THREE.Vector3();\r\n boundingBox.getCenter(bbc);\r\n const s = 2 * atoms[0].element.radius;\r\n boundingBox.setFromCenterAndSize(bbc, new THREE.Vector3(s, s, s));\r\n } else {\r\n for (let i = 0; i < n; ++i) {\r\n if (selector.includesAtom(atoms[i])) {\r\n boundingBox.expandByPoint(atoms[i].position);\r\n }\r\n }\r\n }\r\n\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n if (n === 1) {\r\n this._boundaries.boundingSphere.set(center, atoms[0].element.radius);\r\n } else {\r\n for (let i = 0; i < n; ++i) {\r\n if (!selector.includesAtom(atoms[i])) {\r\n continue;\r\n }\r\n const pos = atoms[i].position;\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n this._boundaries.boundingSphere.set(center, Math.sqrt(radiusSquared));\r\n }\r\n }\r\n\r\n getTransforms() {\r\n return [];\r\n }\r\n\r\n getSelector() {\r\n return this._selector;\r\n }\r\n\r\n getBoundaries() {\r\n return this._boundaries;\r\n }\r\n\r\n finalize() {\r\n }\r\n}\r\n\r\nexport default BiologicalUnit;\r\n","import * as THREE from 'three';\r\nimport selectors from './selectors';\r\nimport BiologicalUnit from './BiologicalUnit';\r\n\r\n/**\r\n * Biological assembly.\r\n *\r\n * @exports Assembly\r\n * @constructor\r\n */\r\n\r\nclass Assembly extends BiologicalUnit {\r\n constructor(complex) {\r\n super(complex);\r\n this.chains = [];\r\n this.matrices = [];\r\n }\r\n\r\n computeBoundaries() {\r\n super.computeBoundaries();\r\n // fix up the boundaries\r\n const { matrices } = this;\r\n const oldCenter = this._boundaries.boundingSphere.center;\r\n const oldRad = this._boundaries.boundingSphere.radius;\r\n const boundingBox = this._boundaries.boundingBox = new THREE.Box3();\r\n boundingBox.makeEmpty();\r\n for (let i = 0, n = matrices.length; i < n; ++i) {\r\n boundingBox.expandByPoint(oldCenter.clone().applyMatrix4(matrices[i]));\r\n }\r\n\r\n const newRad = boundingBox.max.distanceTo(boundingBox.min) / 2 + oldRad;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n this._boundaries.boundingSphere = new THREE.Sphere().set(center, newRad);\r\n boundingBox.max.addScalar(oldRad);\r\n boundingBox.min.subScalar(oldRad);\r\n }\r\n\r\n /**\r\n * Mark a chain as belonging to this biological assembly.\r\n * @param {string} chain - chain identifier, usually a single letter\r\n */\r\n addChain(chain) {\r\n this.chains[this.chains.length] = chain;\r\n }\r\n\r\n /**\r\n * Add a transformation matrix.\r\n * @param {THREE.Matrix4} matrix - transformation matrix\r\n */\r\n addMatrix(matrix) {\r\n this.matrices[this.matrices.length] = matrix;\r\n }\r\n\r\n getTransforms() {\r\n return this.matrices;\r\n }\r\n\r\n finalize() {\r\n if (this.chains.length > 0) {\r\n this._selector = selectors.keyword('Chain')(this.chains);\r\n } else {\r\n this._selector = selectors.keyword('None')();\r\n }\r\n }\r\n}\r\n\r\nexport default Assembly;\r\n","/**\r\n * This class represents connected component as a part of a complex.\r\n * WARNING! The whole component entity is build under the assumption that residues\r\n * are placed in the chains and complex in ascending order of indices\r\n *\r\n * @param {Complex} complex - Molecular complex this chain belongs to.\r\n *\r\n * @exports Component\r\n * @constructor\r\n */\r\nclass Component {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._index = -1;\r\n this._residueIndices = [];\r\n this._cycles = [];\r\n this._subDivs = [];\r\n this._residueCount = 0;\r\n }\r\n\r\n getResidues() {\r\n return this._complex._residues;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residueCount;\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._complex._residues;\r\n const resIdc = this._residueIndices;\r\n for (let idIdc = 0, idCount = resIdc.length; idIdc < idCount; ++idIdc) {\r\n for (let idx = resIdc[idIdc].start, last = resIdc[idIdc].end; idx <= last; ++idx) {\r\n process(residues[idx]);\r\n }\r\n }\r\n }\r\n\r\n setSubDivs(subDivs) {\r\n this._subDivs = subDivs;\r\n let curr = 0;\r\n const resIdc = [];\r\n let resCnt = 0;\r\n for (let i = 0, n = subDivs.length; i < n; ++i) {\r\n if (i === n - 1 || subDivs[i].end + 1 !== subDivs[i + 1].start) {\r\n const { start } = subDivs[curr];\r\n const { end } = subDivs[i];\r\n resIdc[resIdc.length] = {\r\n start,\r\n end,\r\n };\r\n resCnt += end - start + 1;\r\n curr = i + 1;\r\n }\r\n }\r\n\r\n this._residueIndices = resIdc;\r\n this._residueCount = resCnt;\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n forEachBond(process) {\r\n const bonds = this._complex._bonds;\r\n\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n const bond = bonds[i];\r\n if (bond._left.residue._component === this) {\r\n process(bond);\r\n }\r\n }\r\n }\r\n\r\n update() {\r\n this.forEachCycle((cycle) => {\r\n cycle.update();\r\n });\r\n }\r\n\r\n forEachAtom(process) {\r\n this.forEachResidue((residue) => {\r\n residue.forEachAtom(process);\r\n });\r\n }\r\n\r\n addCycle(cycle) {\r\n this._cycles.push(cycle);\r\n }\r\n\r\n forEachCycle(process) {\r\n const cycles = this._cycles;\r\n for (let i = 0, n = cycles.length; i < n; ++i) {\r\n process(cycles[i]);\r\n }\r\n }\r\n\r\n markResidues() {\r\n const self = this;\r\n self.forEachResidue((residue) => {\r\n residue._component = self;\r\n });\r\n }\r\n\r\n _forEachSubChain(mask, process) {\r\n const residues = this._complex._residues;\r\n const subs = this._subDivs;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n for (let idx = subs[i].start, last = subs[i].end; idx <= last; ++idx) {\r\n const currRes = residues[idx];\r\n if (mask & currRes._mask && currRes._isValid) {\r\n let end = idx + 1;\r\n for (; end <= last; ++end) {\r\n const endRes = residues[end];\r\n if (!(mask & endRes._mask && endRes._isValid)) {\r\n break;\r\n }\r\n }\r\n process(i, idx, end - 1);\r\n idx = end;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getMaskedSequences(mask) {\r\n const subs = [];\r\n let idx = 0;\r\n this._forEachSubChain(mask, (_subIdx, start, end) => {\r\n subs[idx++] = { start, end };\r\n });\r\n\r\n return subs;\r\n }\r\n\r\n getMaskedSubdivSequences(mask) {\r\n const subs = [];\r\n let currIdx = -1;\r\n let lastSubIdx = -1;\r\n const subDivs = this._subDivs;\r\n\r\n this._forEachSubChain(mask, (subIdx, start, end) => {\r\n if (lastSubIdx !== subIdx) {\r\n ++currIdx;\r\n subs[currIdx] = {\r\n arr: [],\r\n boundaries: subDivs[subIdx],\r\n };\r\n lastSubIdx = subIdx;\r\n }\r\n subs[currIdx].arr[subs[currIdx].arr.length] = { start, end };\r\n });\r\n\r\n return subs;\r\n }\r\n}\r\n\r\nexport default Component;\r\n","import utils from '../utils';\r\n\r\nconst cMaxPairsForHashCode = 32;\r\nconst cHashTableSize = 1024 * 1024;\r\nconst cNumbersPerPair = 4;\r\nconst cMaxNeighbours = 14;\r\nconst cInvalidVal = -1;\r\n// 89237 is a large simple number, can be used for pseudo random hash code create\r\nconst cBigPrime = 89237;\r\n\r\nclass AtomPairs {\r\n constructor(maxPairsEstimate) {\r\n this.numPairs = 0;\r\n this.numMaxPairs = maxPairsEstimate;\r\n this.intBuffer = utils.allocateTyped(Int32Array, maxPairsEstimate * cNumbersPerPair);\r\n for (let i = 0; i < maxPairsEstimate * cNumbersPerPair; i++) {\r\n this.intBuffer[i] = cInvalidVal;\r\n }\r\n this.hashBuffer = utils.allocateTyped(Int32Array, cHashTableSize * cMaxPairsForHashCode);\r\n for (let i = 0; i < cHashTableSize * cMaxPairsForHashCode; i++) {\r\n this.hashBuffer[i] = cInvalidVal;\r\n }\r\n }\r\n\r\n /**\r\n * Destroy all pairs memory\r\n */\r\n destroy() {\r\n this.intBuffer = null;\r\n this.hashBuffer = null;\r\n }\r\n\r\n /**\r\n * Add pair of atoms to collection\r\n * @param {number} indexA - Index of the 1st vertex.\r\n * @param {number} indexB - Index of the 2nd vertex.\r\n */\r\n addPair(indexA, indexB) {\r\n const ia = (indexA < indexB) ? indexA : indexB;\r\n const ib = (indexA > indexB) ? indexA : indexB;\r\n const codeToAdd = ia + (ib << cMaxNeighbours);\r\n\r\n const hashCode = (ia + (ib * cBigPrime)) & (cHashTableSize - 1);\r\n let j = hashCode * cMaxPairsForHashCode;\r\n let apI = 0;\r\n for (; apI < cMaxPairsForHashCode; apI++) {\r\n const code = this.hashBuffer[j + apI];\r\n if (code === cInvalidVal) {\r\n break;\r\n }\r\n if (code === codeToAdd) {\r\n return false;\r\n }\r\n }\r\n // add this new hash code\r\n if (apI >= cMaxPairsForHashCode) {\r\n throw new Error('addPair: increase cMaxPairsForHashCode');\r\n }\r\n this.hashBuffer[j + apI] = codeToAdd;\r\n\r\n // actually add\r\n if (this.numPairs >= this.numMaxPairs) {\r\n throw new Error('addPair: increase num pairs');\r\n }\r\n j = this.numPairs * cNumbersPerPair;\r\n this.intBuffer[j] = ia;\r\n this.intBuffer[j + 1] = ib;\r\n this.intBuffer[j + 2] = codeToAdd;\r\n this.numPairs++;\r\n return true;\r\n }\r\n}\r\n\r\nexport default AtomPairs;\r\n","import AtomPairs from './AtomPairs';\r\nimport Bond from './Bond';\r\n\r\nconst cProfileBondBuilder = false;\r\nconst cEstBondsMultiplier = 4;\r\nconst cSpaceCode = 32;\r\nconst cBondTolerance = 0.45;\r\nconst cVMDTolerance = 0.6;\r\nconst cBondRadInJMOL = true;\r\nconst cEpsilon = 0.001;\r\n\r\n/**\r\n * Get radius used for building bonds.\r\n *\r\n * @param {Atom} atom - Atom object.\r\n * @returns {number} special value for bonding radius for this atom\r\n */\r\nfunction _getBondingRadius(atom) {\r\n const { element } = atom;\r\n if (element) {\r\n return element.radiusBonding;\r\n }\r\n throw new Error('_getBondingRadius: Logic error.');\r\n}\r\n\r\nfunction _isAtomEligible(atom) {\r\n // build for all non-hetatm and for hetatm without bonds\r\n return !atom.isHet() || (atom.bonds && atom.bonds.length === 0);\r\n}\r\n\r\n/**\r\n * Bond between atoms.\r\n *\r\n * @param {Complex} complex molecular complex\r\n\r\n * @exports AutoBond\r\n * @constructor\r\n */\r\nclass AutoBond {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._maxRad = 1.8;\r\n const bBox = this._complex.getDefaultBoundaries().boundingBox;\r\n this._vBoxMin = bBox.min.clone();\r\n this._vBoxMax = bBox.max.clone();\r\n\r\n this._pairCollection = null;\r\n }\r\n\r\n /**\r\n * Add existing pairs of connectors (from pdb file after its reading)\r\n * @returns {number} 0\r\n */\r\n _addExistingPairs() {\r\n const atoms = this._complex.getAtoms();\r\n const numAtoms = atoms.length;\r\n let aInd = 0;\r\n const collection = this._pairCollection;\r\n\r\n for (; aInd < numAtoms; aInd++) {\r\n const { bonds } = atoms[aInd];\r\n const numBondsForAtom = bonds.length;\r\n for (let bInd = 0; bInd < numBondsForAtom; bInd++) {\r\n const bond = bonds[bInd];\r\n const indTo = bond._left.index;\r\n if (indTo === aInd) {\r\n collection.addPair(aInd, bond._right.index);\r\n }\r\n } // for (b) all bonds in atom\r\n } // for (a)\r\n return 0;\r\n }\r\n\r\n _findPairs() {\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return;\r\n }\r\n\r\n const atoms = this._complex._atoms;\r\n const atomsNum = atoms.length;\r\n const self = this;\r\n\r\n let rA;\r\n let isHydrogenA;\r\n let posA;\r\n let locationA;\r\n let atomA;\r\n\r\n const processAtom = function (atomB) {\r\n if (isHydrogenA && atomB.isHydrogen()) {\r\n return;\r\n }\r\n\r\n const locationB = atomB.location;\r\n if ((locationA !== cSpaceCode)\r\n && (locationB !== cSpaceCode)\r\n && (locationA !== locationB)) {\r\n return;\r\n }\r\n\r\n const dist2 = posA.distanceToSquared(atomB.position);\r\n const rB = atomB.element.radiusBonding;\r\n const maxAcceptable = cBondRadInJMOL ? rA + rB + cBondTolerance : cVMDTolerance * (rA + rB);\r\n\r\n if (dist2 > (maxAcceptable * maxAcceptable)) {\r\n return;\r\n }\r\n\r\n if (dist2 < cEpsilon) {\r\n return;\r\n }\r\n\r\n self._pairCollection.addPair(atomA.index, atomB.index);\r\n };\r\n\r\n for (let i = 0; i < atomsNum; ++i) {\r\n atomA = atoms[i];\r\n if (!_isAtomEligible(atomA)) {\r\n continue;\r\n }\r\n\r\n rA = atomA.element.radiusBonding;\r\n isHydrogenA = atomA.isHydrogen();\r\n posA = atomA.position;\r\n locationA = atomA.location;\r\n\r\n vw.forEachAtomWithinRadius(posA, 2 * this._maxRad + cBondTolerance, processAtom);\r\n }\r\n }\r\n\r\n _addPairs() {\r\n const atoms = this._complex._atoms;\r\n\r\n for (let i = 0, k = 0; i < this._pairCollection.numPairs; i++, k += 4) {\r\n const iA = this._pairCollection.intBuffer[k];\r\n const iB = this._pairCollection.intBuffer[k + 1];\r\n this._addPair(atoms[iA], atoms[iB]);\r\n }\r\n }\r\n\r\n _addPair(atomA, atomB) {\r\n const bondsA = atomA.bonds;\r\n const indexA = atomA.index;\r\n const indexB = atomB.index;\r\n for (let j = 0, numBonds = bondsA.length; j < numBonds; ++j) {\r\n const bond = bondsA[j];\r\n if (bond._left.index === indexB || bond._right.index === indexB) {\r\n return;\r\n }\r\n }\r\n const left = indexA < indexB ? atomA : atomB;\r\n const right = indexA < indexB ? atomB : atomA;\r\n const newBond = this._complex.addBond(left, right, 0, Bond.BondType.UNKNOWN, false);\r\n bondsA.push(newBond);\r\n atomB.bonds.push(newBond);\r\n }\r\n\r\n build() {\r\n if (cProfileBondBuilder) {\r\n console.time('Bonds Builder');\r\n }\r\n this._buildInner();\r\n\r\n if (cProfileBondBuilder) {\r\n console.timeEnd('Bonds Builder');\r\n }\r\n }\r\n\r\n _buildInner() {\r\n const atoms = this._complex._atoms;\r\n if (atoms.length < 2) {\r\n return;\r\n }\r\n if (atoms[0].index < 0) {\r\n throw new Error('AutoBond: Atoms in complex were not indexed.');\r\n }\r\n\r\n this._calcBoundingBox();\r\n this._pairCollection = new AtomPairs(atoms.length * cEstBondsMultiplier);\r\n this._addExistingPairs();\r\n this._findPairs();\r\n this._addPairs();\r\n }\r\n\r\n _calcBoundingBox() {\r\n const atoms = this._complex._atoms;\r\n const nAtoms = atoms.length;\r\n let maxRad = _getBondingRadius(atoms[0]);\r\n for (let i = 1; i < nAtoms; ++i) {\r\n maxRad = Math.max(maxRad, _getBondingRadius(atoms[i]));\r\n }\r\n this._vBoxMax.addScalar(maxRad);\r\n this._vBoxMin.addScalar(-maxRad);\r\n this._maxRad = maxRad * 1.2;\r\n }\r\n\r\n destroy() {\r\n if (this._pairCollection) {\r\n this._pairCollection.destroy();\r\n }\r\n }\r\n}\r\n\r\nexport default AutoBond;\r\n","import * as THREE from 'three';\r\nimport Bond from './Bond';\r\nimport Element from './Element';\r\n\r\nconst cCrossThresh = 0.1;\r\nconst cAromaticType = Bond.BondType.AROMATIC;\r\nconst cAromaticAtoms = [\r\n Element.ByName.C.number,\r\n Element.ByName.N.number,\r\n // Element.ByName.O.number,\r\n // Element.ByName.S.number,\r\n];\r\n\r\n/** Conditions for bonds:\r\n * - Cross product with each subsequent bond to add is collinear and point to the same direction\r\n * - Each pair of a adjacent bonds belong to not more than one cycle\r\n * - If there is more than one candidates we try them in ascending order of angle values\r\n */\r\n\r\nconst _coDirVectors = (function () {\r\n const v1Tmp = new THREE.Vector3();\r\n const v2Tmp = new THREE.Vector3();\r\n const cp = new THREE.Vector3();\r\n return function (v1, v2) {\r\n v1Tmp.copy(v1).normalize();\r\n v2Tmp.copy(v2).normalize();\r\n cp.crossVectors(v1Tmp, v2Tmp);\r\n if (cp.length() > cCrossThresh) {\r\n return false;\r\n }\r\n // zero vector in out terms must be collinear to any\r\n return v1Tmp.dot(v2Tmp) >= 0;\r\n };\r\n}());\r\n\r\nfunction _insertAscending(arr, val) {\r\n let idx = 0;\r\n while (idx < arr.length && arr[idx] < val) {\r\n ++idx;\r\n }\r\n arr.splice(idx, 0, val);\r\n}\r\n\r\nfunction _anotherAtom(bond, currAtom) {\r\n return bond._left === currAtom ? bond._right : bond._left;\r\n}\r\n\r\nfunction _cosBetween(v1, v2) {\r\n const theta = v1.dot(v2) / (Math.sqrt(v1.lengthSq() * v2.lengthSq()));\r\n return THREE.MathUtils.clamp(theta, -1, 1);\r\n}\r\n\r\nfunction _markAromatic(bond) {\r\n bond._type = cAromaticType;\r\n}\r\n\r\nclass Cycle {\r\n constructor(atomsList) {\r\n this.atoms = atomsList;\r\n this.update();\r\n }\r\n\r\n update() {\r\n const { atoms } = this;\r\n const center = new THREE.Vector3();\r\n const nA = atoms.length;\r\n for (let j = 0; j < nA; ++j) {\r\n center.add(atoms[j].position);\r\n }\r\n center.multiplyScalar(1.0 / nA);\r\n this.center = center;\r\n this.radius = center.distanceTo(atoms[0].position.clone().lerp(atoms[1].position, 0.5));\r\n }\r\n\r\n forEachBond(process) {\r\n const { atoms } = this;\r\n const nA = atoms.length;\r\n let currAtom = atoms[0];\r\n let nextAtom;\r\n\r\n function checkBond(bond) {\r\n if (bond._left === nextAtom || bond._right === nextAtom) {\r\n process(bond);\r\n }\r\n }\r\n\r\n for (let i = 0; i < nA; ++i) {\r\n nextAtom = atoms[(i + 1) % nA];\r\n currAtom.forEachBond(checkBond);\r\n currAtom = nextAtom;\r\n }\r\n }\r\n}\r\n\r\nfunction _isAromatic(bond) {\r\n return bond._type === cAromaticType;\r\n}\r\n\r\nfunction _isPossibleAromatic(bond) {\r\n if (bond.type === cAromaticType) {\r\n return true;\r\n }\r\n const rightIdx = cAromaticAtoms.indexOf(bond._right.element.number);\r\n const leftIdx = cAromaticAtoms.indexOf(bond._left.element.number);\r\n return rightIdx !== -1 && leftIdx !== -1;\r\n}\r\n\r\nfunction _checkCycleSimple(cycle) {\r\n return cycle.length > 3;\r\n}\r\n\r\nfunction _checkCycleComplex(cycle) {\r\n console.assert(cycle.length > 2);\r\n return true;\r\n}\r\n\r\nclass AromaticLoopsMarker {\r\n constructor(complex) {\r\n this._complex = complex;\r\n const bondsData = new Array(complex._bonds.length);\r\n const bondMarks = new Array(complex._bonds.length);\r\n for (let i = 0, n = bondsData.length; i < n; ++i) {\r\n bondsData[i] = [];\r\n bondMarks[i] = false;\r\n }\r\n this._bondsData = bondsData;\r\n this._bondMarks = bondMarks;\r\n this._resetCycles();\r\n }\r\n\r\n _resetCycles() {\r\n this._cycles = [];\r\n this._currIdx = -1;\r\n }\r\n\r\n _haveSameCycle(bondsData, bond1, bond2) {\r\n const arr1 = bondsData[bond1._index];\r\n const arr2 = bondsData[bond2._index];\r\n const n1 = arr1.length;\r\n const n2 = arr2.length;\r\n let i1 = 0;\r\n let i2 = 0;\r\n while (i1 < n1 && i2 < n2) {\r\n if (arr1[i1] === arr2[i2]) {\r\n return true;\r\n }\r\n if (arr1[i1] > arr2[i2]) {\r\n ++i2;\r\n } else {\r\n ++i1;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n _tryBond(prevBond, currRight, currDir) {\r\n const bondsOrder = [];\r\n const bondsData = this._bondsData;\r\n const currLeft = _anotherAtom(prevBond, currRight);\r\n const currVec = currRight.position.clone().sub(currLeft.position);\r\n const startAtomRef = this._currStart;\r\n const self = this;\r\n const bondMarks = this._bondMarks;\r\n let checkAromatic = this._checkBond;\r\n bondMarks[prevBond._index] = true;\r\n checkAromatic = checkAromatic === undefined ? _isAromatic : checkAromatic;\r\n currRight.forEachBond((newBond) => {\r\n if (!checkAromatic(newBond)\r\n || newBond === prevBond\r\n || bondMarks[newBond._index]\r\n || self._haveSameCycle(bondsData, prevBond, newBond)) {\r\n return;\r\n }\r\n const anotherAtom = _anotherAtom(newBond, currRight);\r\n const anotherVec = anotherAtom.position.clone().sub(currRight.position);\r\n const val = anotherAtom === startAtomRef ? -2.0 : 1 - _cosBetween(currVec, anotherVec);\r\n const newDir = anotherVec.cross(currVec);\r\n if (!_coDirVectors(newDir, currDir)) {\r\n return;\r\n }\r\n let idx = 0;\r\n while (idx < bondsOrder.length && bondsOrder[idx].val < val) {\r\n ++idx;\r\n }\r\n bondsOrder.splice(idx, 0, { bond: newBond, val, dir: newDir });\r\n });\r\n\r\n for (let i = 0, n = bondsOrder.length; i < n; ++i) {\r\n const { bond } = bondsOrder[i];\r\n const newRight = bond._left === currRight ? bond._right : bond._left;\r\n if (newRight === startAtomRef) {\r\n ++this._currIdx;\r\n this._cycles.push([currRight]);\r\n bondMarks[prevBond._index] = false;\r\n return true;\r\n }\r\n if (this._tryBond(bond, newRight, bondsOrder[i].dir)) {\r\n _insertAscending(bondsData[bond._index], this._currIdx);\r\n this._cycles[this._currIdx].push(currRight);\r\n bondMarks[prevBond._index] = false;\r\n return true;\r\n }\r\n }\r\n bondMarks[prevBond._index] = false;\r\n return false;\r\n }\r\n\r\n _startCycle(bond) {\r\n // start from left to right\r\n this._currStart = bond._left;\r\n if (this._tryBond(bond, bond._right, new THREE.Vector3())) {\r\n _insertAscending(this._bondsData[bond._index], this._currIdx);\r\n this._cycles[this._currIdx].push(bond._left);\r\n }\r\n }\r\n\r\n _findLoops(checkBond, checkCycle) {\r\n this._checkBond = checkBond;\r\n const complex = this._complex;\r\n const self = this;\r\n\r\n complex.forEachComponent((component) => {\r\n self._resetCycles();\r\n component.forEachBond((bond) => {\r\n if (checkBond(bond)) {\r\n self._startCycle(bond);\r\n }\r\n });\r\n const cycles = self._cycles;\r\n for (let i = 0, n = cycles.length; i < n; ++i) {\r\n const cycle = cycles[i];\r\n if (!checkCycle(cycle)) {\r\n continue;\r\n }\r\n const newCycle = new Cycle(cycle);\r\n newCycle.forEachBond(_markAromatic);\r\n component.addCycle(newCycle);\r\n }\r\n });\r\n }\r\n\r\n markCycles() {\r\n this._findLoops(_isAromatic, _checkCycleSimple);\r\n }\r\n\r\n detectCycles() {\r\n this._findLoops(_isPossibleAromatic, _checkCycleComplex);\r\n }\r\n}\r\n\r\nexport default AromaticLoopsMarker;\r\n","import * as THREE from 'three';\r\nimport utils from '../utils';\r\n\r\n/**\r\n * Calculate min & max radius of a sphere slice between zMin & zMax\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {number} zMin - lower bound of the slice\r\n * @param {number} zMax - upper bound of the slice\r\n */\r\nfunction _getSphereSliceRadiusRange(center, radius, zMin, zMax) {\r\n const dzMin = zMin - center.z;\r\n const dzMax = zMax - center.z;\r\n const rzMin = Math.sqrt(Math.max(radius * radius - dzMin * dzMin, 0.0));\r\n const rzMax = Math.sqrt(Math.max(radius * radius - dzMax * dzMax, 0.0));\r\n\r\n const rMin = Math.min(rzMin, rzMax);\r\n let rMax;\r\n\r\n if (zMin <= center.z && zMax >= center.z) {\r\n // sphere's main diameter is inside slice\r\n rMax = radius;\r\n } else {\r\n rMax = Math.max(rzMin, rzMax);\r\n }\r\n\r\n return [rMin, rMax];\r\n}\r\n\r\n/**\r\n * Calculate min & max radius of a circle slice between yMin & yMax.\r\n *\r\n * To maintain analogy with _getSphereSliceRadiusRange we call radius what in fact is\r\n * half-width (along X axis) of the slice, i.e. 1D-sphere radius.\r\n *\r\n * @param {Vector3} center - center of the circle (z can be ignored)\r\n * @param {number} radius - circle radius\r\n * @param {number} yMin - lower bound of the slice\r\n * @param {number} yMax - upper bound of the slice\r\n * @returns {Array} - array of two numbers (min & max radius, or half-width)\r\n */\r\nfunction _getCircleSliceRadiusRange(center, radius, yMin, yMax) {\r\n const dyMin = yMin - center.y;\r\n const dyMax = yMax - center.y;\r\n const ryMin = Math.sqrt(Math.max(radius * radius - dyMin * dyMin, 0.0));\r\n const ryMax = Math.sqrt(Math.max(radius * radius - dyMax * dyMax, 0.0));\r\n\r\n const rMin = Math.min(ryMin, ryMax);\r\n let rMax;\r\n\r\n if (yMin <= center.y && yMax >= center.y) {\r\n // slice's main diameter is inside slice\r\n rMax = radius;\r\n } else {\r\n rMax = Math.max(ryMin, ryMax);\r\n }\r\n\r\n return [rMin, rMax];\r\n}\r\n\r\n/**\r\n * VoxelWorld constructor\r\n *\r\n * @param {Box3} box - bounding box of the volume to be partitioned\r\n * @param {Vector3} vCellSizeHint - target voxel size (actual voxel size may differ from this)\r\n */\r\nclass VoxelWorld {\r\n constructor(box, vCellSizeHint) {\r\n this._box = box.clone();\r\n const size = new THREE.Vector3();\r\n box.getSize(size);\r\n this._count = size.clone().divide(vCellSizeHint).floor().max(new THREE.Vector3(1, 1, 1));\r\n this._last = this._count.clone().subScalar(1);\r\n this._cellSize = size.clone().divide(this._count);\r\n this._cellInnerR = 0.5 * Math.min(Math.min(this._cellSize.x, this._cellSize.y), this._cellSize.z);\r\n this._cellOuterR = 0.5 * Math.sqrt(this._cellSize.dot(this._cellSize));\r\n\r\n // array of voxels, each element contains index of first atom in voxel\r\n const numVoxels = this._count.x * this._count.y * this._count.z;\r\n this._voxels = utils.allocateTyped(Int32Array, numVoxels);\r\n for (let i = 0; i < numVoxels; ++i) {\r\n this._voxels[i] = -1;\r\n }\r\n\r\n // array of atoms that stores multiple single-linked lists\r\n // two elements for each atom: Atom ref, index of next atom (in this array\r\n this._atoms = [];\r\n }\r\n\r\n /**\r\n * Add all atoms from a complex to voxel world\r\n *\r\n * @param {Complex} complex - complex\r\n */\r\n addAtoms(complex) {\r\n const self = this;\r\n\r\n let idx = this._atoms.length;\r\n\r\n // resize array of atoms\r\n this._atoms.length += 2 * complex.getAtomCount();\r\n\r\n complex.forEachAtom((atom) => {\r\n // find which voxel contains this atom\r\n const voxelIdx = self._findVoxel(atom.position);\r\n\r\n // push current atom to the head of voxel's atom list\r\n self._atoms[idx] = atom;\r\n self._atoms[idx + 1] = self._voxels[voxelIdx];\r\n self._voxels[voxelIdx] = idx;\r\n\r\n idx += 2;\r\n });\r\n }\r\n\r\n /**\r\n * Get voxel that contains specified 3D point (we use clamp at the edges)\r\n *\r\n * @param {Vector3} point - a point in 3D\r\n * @returns {number} - index of voxel\r\n */\r\n static _zero = new THREE.Vector3(0, 0, 0);\r\n\r\n static _voxel = new THREE.Vector3();\r\n\r\n _findVoxel(point) {\r\n const zero = VoxelWorld._zero;\r\n const voxel = VoxelWorld._voxel;\r\n voxel.copy(point)\r\n .sub(this._box.min)\r\n .divide(this._cellSize)\r\n .floor()\r\n .clamp(zero, this._last);\r\n return voxel.x + this._count.x * (voxel.y + this._count.y * voxel.z);\r\n }\r\n\r\n /**\r\n * Call a function for each atom in voxel\r\n *\r\n * @param {number} voxel - index of voxel\r\n * @param {function(Atom)} process - function to call\r\n */\r\n _forEachAtomInVoxel(voxel, process) {\r\n for (let i = this._voxels[voxel]; i >= 0; i = this._atoms[i + 1]) {\r\n process(this._atoms[i]);\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each voxel that is touched by given sphere. Callback also takes flag\r\n * isInside specifying whether voxel lies inside the sphere entirely.\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside\r\n */\r\n\r\n static _xRange = new THREE.Vector2();\r\n\r\n static _yRange = new THREE.Vector2();\r\n\r\n static _zRange = new THREE.Vector2();\r\n\r\n _forEachVoxelWithinRadius(center, radius, process) {\r\n const xRange = VoxelWorld._xRange;\r\n const yRange = VoxelWorld._yRange;\r\n const zRange = VoxelWorld._zRange;\r\n\r\n // switch to a faster method unless cell size is much smaller than sphere radius\r\n if (radius / this._cellInnerR < 10) {\r\n this._forEachVoxelWithinRadiusSimple(center, radius, process);\r\n return;\r\n }\r\n\r\n let rRangeXY;\r\n let rRangeX;\r\n let xVal;\r\n let yVal;\r\n let zVal;\r\n let isInsideX;\r\n let isInsideY;\r\n let isInsideZ;\r\n\r\n zRange.set(center.z - radius, center.z + radius);\r\n zRange.subScalar(this._box.min.z)\r\n .divideScalar(this._cellSize.z)\r\n .floor()\r\n .clampScalar(0, this._count.z - 1);\r\n\r\n for (let z = zRange.x; z <= zRange.y; ++z) {\r\n zVal = [this._box.min.z + z * this._cellSize.z,\r\n this._box.min.z + (z + 1) * this._cellSize.z];\r\n\r\n isInsideZ = (center.z - radius <= zVal[0]) && (zVal[1] <= center.z + radius);\r\n\r\n rRangeXY = _getSphereSliceRadiusRange(center, radius, zVal[0], zVal[1]);\r\n\r\n yRange.set(center.y - rRangeXY[1], center.y + rRangeXY[1]);\r\n yRange.subScalar(this._box.min.y)\r\n .divideScalar(this._cellSize.y)\r\n .floor()\r\n .clampScalar(0, this._count.y - 1);\r\n\r\n for (let y = yRange.x; y <= yRange.y; ++y) {\r\n yVal = [this._box.min.y + y * this._cellSize.y,\r\n this._box.min.y + (y + 1) * this._cellSize.y];\r\n\r\n isInsideY = (center.y - rRangeXY[0] <= yVal[0]) && (yVal[1] <= center.y + rRangeXY[0]);\r\n\r\n rRangeX = _getCircleSliceRadiusRange(center, rRangeXY[1], yVal[0], yVal[1]);\r\n\r\n xRange.set(center.x - rRangeX[1], center.x + rRangeX[1]);\r\n xRange.subScalar(this._box.min.x)\r\n .divideScalar(this._cellSize.x)\r\n .floor()\r\n .clampScalar(0, this._count.x - 1);\r\n\r\n for (let { x } = xRange; x <= xRange.y; ++x) {\r\n xVal = [this._box.min.x + x * this._cellSize.x,\r\n this._box.min.x + (x + 1) * this._cellSize.x];\r\n isInsideX = (center.x - rRangeX[0] <= xVal[0]) && (xVal[1] <= center.x + rRangeX[0]);\r\n\r\n process(x + this._count.x * (y + this._count.y * z), isInsideX && isInsideY && isInsideZ);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each voxel that is touched by given sphere. Callback also takes flag\r\n * isInside specifying whether voxel lies inside the sphere entirely.\r\n * This is a version of method that doesn't try to \"calculate\" what voxels fall inside radius\r\n * but instead just checks all voxels inside sphere's bounding box. This should be faster\r\n * unless cell size is much smaller than sphere radius.\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside\r\n */\r\n\r\n static _vCenter = new THREE.Vector3();\r\n\r\n _forEachVoxelWithinRadiusSimple(center, radius, process) {\r\n const xRange = VoxelWorld._xRange;\r\n const yRange = VoxelWorld._yRange;\r\n const zRange = VoxelWorld._zRange;\r\n const vCenter = VoxelWorld._vCenter;\r\n\r\n const distTouch2 = (radius + this._cellOuterR) * (radius + this._cellOuterR);\r\n let distInside2 = -1.0;\r\n if (radius > this._cellOuterR) {\r\n distInside2 = (radius - this._cellOuterR) * (radius - this._cellOuterR);\r\n }\r\n\r\n // calculate bounding box for the sphere\r\n xRange.set(center.x - radius, center.x + radius);\r\n xRange.subScalar(this._box.min.x)\r\n .divideScalar(this._cellSize.x)\r\n .floor();\r\n xRange.x = Math.min(Math.max(xRange.x, 0), this._count.x - 1);\r\n xRange.y = Math.min(Math.max(xRange.y, 0), this._count.x - 1);\r\n\r\n yRange.set(center.y - radius, center.y + radius);\r\n yRange.subScalar(this._box.min.y)\r\n .divideScalar(this._cellSize.y)\r\n .floor();\r\n yRange.x = Math.min(Math.max(yRange.x, 0), this._count.y - 1);\r\n yRange.y = Math.min(Math.max(yRange.y, 0), this._count.y - 1);\r\n\r\n zRange.set(center.z - radius, center.z + radius);\r\n zRange.subScalar(this._box.min.z)\r\n .divideScalar(this._cellSize.z)\r\n .floor();\r\n zRange.x = Math.min(Math.max(zRange.x, 0), this._count.z - 1);\r\n zRange.y = Math.min(Math.max(zRange.y, 0), this._count.z - 1);\r\n\r\n for (let z = zRange.x; z <= zRange.y; ++z) {\r\n const zVal = [this._box.min.z + z * this._cellSize.z,\r\n this._box.min.z + (z + 1) * this._cellSize.z];\r\n vCenter.z = 0.5 * (zVal[0] + zVal[1]);\r\n\r\n for (let y = yRange.x; y <= yRange.y; ++y) {\r\n const yVal = [this._box.min.y + y * this._cellSize.y,\r\n this._box.min.y + (y + 1) * this._cellSize.y];\r\n vCenter.y = 0.5 * (yVal[0] + yVal[1]);\r\n\r\n for (let { x } = xRange; x <= xRange.y; ++x) {\r\n const xVal = [this._box.min.x + x * this._cellSize.x,\r\n this._box.min.x + (x + 1) * this._cellSize.x];\r\n vCenter.x = 0.5 * (xVal[0] + xVal[1]);\r\n\r\n const d2 = center.distanceToSquared(vCenter);\r\n if (d2 <= distTouch2) {\r\n process(x + this._count.x * (y + this._count.y * z), d2 <= distInside2);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each atom within given sphere\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinRadius(center, radius, process) {\r\n const self = this;\r\n const r2 = radius * radius;\r\n\r\n self._forEachVoxelWithinRadius(center, radius, (voxel, isInside) => {\r\n if (isInside) {\r\n self._forEachAtomInVoxel(voxel, process);\r\n } else {\r\n self._forEachAtomInVoxel(voxel, (atom) => {\r\n if (center.distanceToSquared(atom.position) <= r2) {\r\n process(atom);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms defined by mask\r\n *\r\n * @param {Complex} complex - complex\r\n * @param {number} mask - bit mask\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinDistFromMasked(complex, mask, dist, process) {\r\n this._forEachAtomWithinDistFromGroup((atomProc) => {\r\n complex.forEachAtom((atom) => {\r\n if ((atom.mask & mask) !== 0) {\r\n atomProc(atom);\r\n }\r\n });\r\n }, dist, process);\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms defined by selector\r\n *\r\n * @param {Complex} complex - complex\r\n * @param {number} selector - selector\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinDistFromSelected(complex, selector, dist, process) {\r\n this._forEachAtomWithinDistFromGroup((atomProc) => {\r\n complex.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom)) {\r\n atomProc(atom);\r\n }\r\n });\r\n }, dist, process);\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms\r\n *\r\n * @param {function} forEachAtom - enumerator of atoms in the group\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n _forEachAtomWithinDistFromGroup(forEachAtom, dist, process) {\r\n const self = this;\r\n const r2 = dist * dist;\r\n\r\n const voxels = [];\r\n const atoms = [];\r\n let idx = 0;\r\n\r\n // build \"within radius\" atom list for each voxel\r\n forEachAtom((atom) => {\r\n self._forEachVoxelWithinRadius(atom.position, dist, (voxel, isInside) => {\r\n if (isInside) {\r\n // this voxel is inside circle -- no check will be required\r\n voxels[voxel] = -1;\r\n } else if (typeof voxels[voxel] === 'undefined') {\r\n // this voxel isn't covered yet -- start building list of atoms\r\n atoms.push(atom);\r\n atoms.push(-1);\r\n voxels[voxel] = idx;\r\n idx += 2;\r\n } else if (voxels[voxel] !== -1) {\r\n // this voxel has a list of atoms required for distance check -- add atom to the list\r\n atoms.push(atom);\r\n atoms.push(voxels[voxel]);\r\n voxels[voxel] = idx;\r\n idx += 2;\r\n }\r\n });\r\n });\r\n\r\n let voxel;\r\n\r\n const processIfWithin = function (atom) {\r\n if (typeof voxels[voxel] === 'undefined') {\r\n return;\r\n }\r\n\r\n idx = voxels[voxel];\r\n if (idx === -1) {\r\n // this voxel is fully covered\r\n process(atom);\r\n return;\r\n }\r\n\r\n // check distance to each atom within radius from this voxel\r\n for (; idx >= 0; idx = atoms[idx + 1]) {\r\n if (atom.position.distanceToSquared(atoms[idx].position) < r2) {\r\n process(atom);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n // for each marked voxel\r\n for (voxel in voxels) {\r\n if (voxels.hasOwnProperty(voxel)) {\r\n self._forEachAtomInVoxel(voxel, processIfWithin);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default VoxelWorld;\r\n","import ResidueType from './ResidueType';\r\nimport PairCollection from './AtomPairs';\r\n\r\nconst MINIMAL_DISTANCE = 0.5;\r\nconst MIN_HBOND_ENERGY = -9.9;\r\nconst MAX_HBOND_ENERGY = -0.5;\r\nconst COUPLING_CONSTANT = -27.888; // = -332 * 0.42 * 0.2\r\nconst MAX_COUPLING_DISTANCE = 5.0; // how far is the closest atom of a potential partner residue from CA atom\r\nconst MAX_RESIDUES_THRESHOLD = 1000;\r\n\r\nexport default class HBondInfo {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._hbonds = []; // array of bond info for each residue\r\n if (this._complex._residues.length > MAX_RESIDUES_THRESHOLD) {\r\n this._buildVW(); // optimized version using voxel grid\r\n } else {\r\n this._build(); // test all pairs of residues\r\n }\r\n }\r\n\r\n isBond(from, to) {\r\n if (this._hbonds[from]) {\r\n const [acc0, acc1] = this._hbonds[from].acceptor;\r\n if (acc0 && acc0.residue === to && acc0.energy < MAX_HBOND_ENERGY) {\r\n return true;\r\n }\r\n if (acc1 && acc1.residue === to && acc1.energy < MAX_HBOND_ENERGY) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n _build() {\r\n const self = this;\r\n\r\n for (let i = 0; i < this._complex._residues.length - 1; ++i) {\r\n const ri = this._complex._residues[i];\r\n if ((ri.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n let preri = null;\r\n if (i > 0 && (this._complex._residues[i - 1].getType().flags & ResidueType.Flags.PROTEIN)\r\n && ri._sequence === this._complex._residues[i - 1]._sequence + 1) {\r\n preri = this._complex._residues[i - 1];\r\n }\r\n\r\n for (let j = i + 1; j < this._complex._residues.length; ++j) {\r\n const rj = this._complex._residues[j];\r\n if ((rj.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n let prerj = null;\r\n if ((this._complex._residues[j - 1].getType().flags & ResidueType.Flags.PROTEIN)\r\n && rj._sequence === this._complex._residues[j - 1]._sequence + 1) {\r\n prerj = this._complex._residues[j - 1];\r\n }\r\n\r\n self._calcHBondEnergy(preri, ri, rj);\r\n if (j !== i + 1) {\r\n self._calcHBondEnergy(prerj, rj, ri);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _buildVW() {\r\n const self = this;\r\n const residues = this._complex._residues;\r\n let ri;\r\n let preri;\r\n\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return;\r\n }\r\n\r\n const pairs = new PairCollection(this._complex._residues.length * this._complex._residues.length / 2);\r\n\r\n function processAtom(atom) {\r\n const rj = atom.residue;\r\n\r\n if (rj._index === ri._index) {\r\n return;\r\n }\r\n\r\n if ((rj.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n return;\r\n }\r\n\r\n if (!pairs.addPair(ri._index, rj._index)) {\r\n // we've seen this pair\r\n return;\r\n }\r\n\r\n // get predecessor in chain\r\n let prerj = rj._index > 0 ? residues[rj._index - 1] : null;\r\n if (prerj\r\n && ((prerj.getType().flags & ResidueType.Flags.PROTEIN) === 0 || rj._sequence !== prerj._sequence + 1)) {\r\n prerj = null;\r\n }\r\n\r\n self._calcHBondEnergy(preri, ri, rj);\r\n if (rj._index !== ri._index + 1) {\r\n self._calcHBondEnergy(prerj, rj, ri);\r\n }\r\n }\r\n\r\n for (let i = 0; i < residues.length - 1; ++i) {\r\n ri = residues[i];\r\n if ((ri.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n preri = i > 0 ? residues[i - 1] : null;\r\n if (preri\r\n && ((preri.getType().flags & ResidueType.Flags.PROTEIN) === 0 || ri._sequence !== preri._sequence + 1)) {\r\n preri = null;\r\n }\r\n\r\n vw.forEachAtomWithinRadius(this._residueGetCAlpha(ri), MAX_COUPLING_DISTANCE, processAtom);\r\n }\r\n }\r\n\r\n _residueGetCAlpha(res) {\r\n for (let i = 0; i < res._atoms.length; ++i) {\r\n const { name } = res._atoms[i];\r\n if (name === 'CA'\r\n || name === 'C1') {\r\n return res._atoms[i].position;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _residueGetCO(res) {\r\n let c = null;\r\n let o = null;\r\n\r\n res.forEachAtom((a) => {\r\n if (a.name === 'C') {\r\n c = a.position;\r\n } else if (a.name === 'O') {\r\n o = a.position;\r\n }\r\n });\r\n\r\n return [c, o];\r\n }\r\n\r\n // TODO Support hydrogen defined in complex\r\n _residueGetNH(prev, res) {\r\n const [c, o] = this._residueGetCO(prev);\r\n\r\n let n;\r\n res.forEachAtom((a) => {\r\n if (a.name === 'N') {\r\n n = a.position;\r\n }\r\n });\r\n\r\n if (c && o && n) {\r\n // calculate hydrogen position\r\n const h = c.clone();\r\n h.sub(o);\r\n h.multiplyScalar(1.0 / h.length());\r\n h.add(n);\r\n\r\n return [n, h];\r\n }\r\n\r\n return [null, null];\r\n }\r\n\r\n _calcHBondEnergy(predonor, donor, acceptor) {\r\n let result = 0;\r\n\r\n if (predonor === null) {\r\n return result;\r\n }\r\n\r\n if (donor.getType().getName() !== 'PRO') {\r\n const [n, h] = this._residueGetNH(predonor, donor);\r\n const [c, o] = this._residueGetCO(acceptor);\r\n\r\n if (n === null || h === null || c === null || o === null) {\r\n return result;\r\n }\r\n\r\n const distanceHO = h.distanceTo(o);\r\n const distanceHC = h.distanceTo(c);\r\n const distanceNC = n.distanceTo(c);\r\n const distanceNO = n.distanceTo(o);\r\n\r\n if (distanceHO < MINIMAL_DISTANCE || distanceHC < MINIMAL_DISTANCE\r\n || distanceNC < MINIMAL_DISTANCE || distanceNO < MINIMAL_DISTANCE) {\r\n result = MIN_HBOND_ENERGY;\r\n } else {\r\n result = COUPLING_CONSTANT / distanceHO - COUPLING_CONSTANT / distanceHC\r\n + COUPLING_CONSTANT / distanceNC - COUPLING_CONSTANT / distanceNO;\r\n }\r\n\r\n // DSSP compatibility mode:\r\n result = Math.round(result * 1000) / 1000;\r\n\r\n if (result < MIN_HBOND_ENERGY) {\r\n result = MIN_HBOND_ENERGY;\r\n }\r\n }\r\n\r\n // update donor\r\n if (typeof this._hbonds[donor._index] === 'undefined') {\r\n this._hbonds[donor._index] = {\r\n donor: [],\r\n acceptor: [],\r\n };\r\n }\r\n const donorInfo = this._hbonds[donor._index];\r\n\r\n if (donorInfo.acceptor.length < 2) {\r\n donorInfo.acceptor.push({\r\n residue: acceptor._index,\r\n energy: result,\r\n });\r\n }\r\n\r\n if (donorInfo.acceptor.length > 1) {\r\n if (result < donorInfo.acceptor[0].energy) {\r\n donorInfo.acceptor[1].residue = donorInfo.acceptor[0].residue;\r\n donorInfo.acceptor[1].energy = donorInfo.acceptor[0].energy;\r\n donorInfo.acceptor[0].residue = acceptor._index;\r\n donorInfo.acceptor[0].energy = result;\r\n } else if (result < donorInfo.acceptor[1].energy) {\r\n donorInfo.acceptor[1].residue = acceptor._index;\r\n donorInfo.acceptor[1].energy = result;\r\n }\r\n }\r\n\r\n // update acceptor\r\n if (typeof this._hbonds[acceptor._index] === 'undefined') {\r\n this._hbonds[acceptor._index] = {\r\n donor: [],\r\n acceptor: [],\r\n };\r\n }\r\n const accInfo = this._hbonds[acceptor._index];\r\n\r\n if (accInfo.donor.length < 2) {\r\n accInfo.donor.push({\r\n residue: donor._index,\r\n energy: result,\r\n });\r\n }\r\n\r\n if (accInfo.donor.length > 1) {\r\n if (result < accInfo.donor[0].energy) {\r\n accInfo.donor[1].residue = accInfo.donor[0].residue;\r\n accInfo.donor[1].energy = accInfo.donor[0].energy;\r\n accInfo.donor[0].residue = donor._index;\r\n accInfo.donor[0].energy = result;\r\n } else if (result < accInfo.donor[1].energy) {\r\n accInfo.donor[1].residue = donor._index;\r\n accInfo.donor[1].energy = result;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import HBondInfo from './HBondInfo';\r\nimport ResidueType from './ResidueType';\r\n\r\nconst BridgeType = Object.freeze({\r\n NO_BRIDGE: 0,\r\n PARALLEL: 1,\r\n ANTI_PARALLEL: 2,\r\n});\r\n\r\nconst HelixFlag = Object.freeze({\r\n START: 1,\r\n MIDDLE: 2,\r\n END: 3,\r\n START_AND_END: 4,\r\n});\r\n\r\nconst StructureType = Object.freeze({\r\n STRAND: 'E',\r\n BRIDGE: 'B',\r\n HELIX_310: 'G',\r\n HELIX_ALPHA: 'H',\r\n HELIX_PI: 'I',\r\n TURN: 'T',\r\n BEND: 'S',\r\n LOOP: ' ',\r\n});\r\n\r\nexport default class SecondaryStructureMap {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._build();\r\n }\r\n\r\n _build() {\r\n const self = this;\r\n this._hbonds = new HBondInfo(this._complex);\r\n this._ss = []; // DSSP map by residue\r\n\r\n // auxilliary data\r\n this._sheet = [];\r\n this._betaPartners = [];\r\n this._bend = [];\r\n for (let i = 0; i < this._complex.getResidues().length; ++i) {\r\n this._betaPartners[i] = [];\r\n }\r\n this._helixFlags = [];\r\n this._helixFlags[3] = [];\r\n this._helixFlags[4] = [];\r\n this._helixFlags[5] = [];\r\n\r\n // calculate peptide chain lengths\r\n this._chainLengths = [];\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i].getResidues();\r\n let len = 0;\r\n for (; len < chain.length; ++len) {\r\n if ((chain[len].getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n break;\r\n }\r\n }\r\n this._chainLengths[i] = len;\r\n }\r\n\r\n this._buildBetaSheets();\r\n\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n self._buildAlphaHelices(this._complex._chains[i].getResidues(), this._chainLengths[i], false);\r\n }\r\n }\r\n\r\n _buildAlphaHelices(inResidues, chainLength, inPreferPiHelices) {\r\n // Helix and Turn\r\n for (let stride = 3; stride <= 5; ++stride) {\r\n if (inResidues.length < stride) {\r\n break;\r\n }\r\n\r\n for (let i = 0; i + stride < chainLength; ++i) {\r\n if (this._hbonds.isBond(inResidues[i + stride]._index, inResidues[i]._index)\r\n /* && NoChainBreak(res[i], res[i + stride]) */) {\r\n this._helixFlags[stride][inResidues[i + stride]._index] = HelixFlag.END;\r\n for (let j = i + 1; j < i + stride; ++j) {\r\n if (typeof this._helixFlags[stride][inResidues[j]._index] === 'undefined') {\r\n this._helixFlags[stride][inResidues[j]._index] = HelixFlag.MIDDLE;\r\n }\r\n }\r\n\r\n if (this._helixFlags[stride][inResidues[i]._index] === HelixFlag.END) {\r\n this._helixFlags[stride][inResidues[i]._index] = HelixFlag.START_AND_END;\r\n } else {\r\n this._helixFlags[stride][inResidues[i]._index] = HelixFlag.START;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 2; i < chainLength - 2; ++i) {\r\n const kappa = this._kappa(inResidues[i - 2], inResidues[i], inResidues[i + 2]);\r\n this._bend[inResidues[i]._index] = (kappa !== 360 && kappa > 70);\r\n }\r\n\r\n for (let i = 1; i + 4 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 4) && this._isHelixStart(inResidues[i - 1]._index, 4)) {\r\n for (let j = i; j <= i + 3; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_ALPHA;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 3 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 3) && this._isHelixStart(inResidues[i - 1]._index, 3)) {\r\n let empty = true;\r\n for (let j = i; empty && j <= i + 2; ++j) {\r\n empty = typeof this._ss[inResidues[j]._index] === 'undefined'\r\n || this._ss[inResidues[j]._index] === StructureType.HELIX_310;\r\n }\r\n if (empty) {\r\n for (let j = i; j <= i + 2; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_310;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 5 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 5) && this._isHelixStart(inResidues[i - 1]._index, 5)) {\r\n let empty = true;\r\n for (let j = i; empty && j <= i + 4; ++j) {\r\n empty = typeof this._ss[inResidues[j]._index] === 'undefined'\r\n || this._ss[inResidues[j]._index] === StructureType.HELIX_PI\r\n || (inPreferPiHelices && this._ss[inResidues[j]._index] === StructureType.HELIX_ALPHA);\r\n }\r\n if (empty) {\r\n for (let j = i; j <= i + 4; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_PI;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 1 < chainLength; ++i) {\r\n if (typeof this._ss[inResidues[i]._index] === 'undefined') {\r\n let isTurn = false;\r\n for (let stride = 3; stride <= 5 && !isTurn; ++stride) {\r\n for (let k = 1; k < stride && !isTurn; ++k) {\r\n isTurn = (i >= k) && this._isHelixStart(inResidues[i - k]._index, stride);\r\n }\r\n }\r\n\r\n if (isTurn) {\r\n this._ss[inResidues[i]._index] = StructureType.TURN;\r\n } else if (this._bend[inResidues[i]._index]) {\r\n this._ss[inResidues[i]._index] = StructureType.BEND;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _residueGetCAlpha(res) {\r\n for (let i = 0; i < res._atoms.length; ++i) {\r\n const { name } = res._atoms[i];\r\n if (name === 'CA'\r\n || name === 'C1') {\r\n return res._atoms[i].position;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _cosinusAngle(p1, p2, p3, p4) {\r\n const v12 = p1.clone().sub(p2);\r\n const v34 = p3.clone().sub(p4);\r\n\r\n let result = 0;\r\n\r\n const x = v12.dot(v12) * v34.dot(v34);\r\n if (x > 0) {\r\n result = v12.dot(v34) / Math.sqrt(x);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _kappa(prevPrev, res, nextNext) {\r\n const curCA = this._residueGetCAlpha(res);\r\n const ppCA = this._residueGetCAlpha(prevPrev);\r\n const nnCA = this._residueGetCAlpha(nextNext);\r\n if (curCA === null || ppCA === null || nnCA === null) {\r\n return 180;\r\n }\r\n\r\n const ckap = this._cosinusAngle(curCA, ppCA, nnCA, curCA);\r\n const skap = Math.sqrt(1 - ckap * ckap);\r\n return Math.atan2(skap, ckap) * 180 / Math.PI;\r\n }\r\n\r\n _isHelixStart(res, stride) {\r\n return (this._helixFlags[stride][res] === HelixFlag.START\r\n || this._helixFlags[stride][res] === HelixFlag.START_AND_END);\r\n }\r\n\r\n _buildBetaSheets() {\r\n // find bridges\r\n // check each chain against each other chain, and against itself\r\n const bridges = [];\r\n for (let a = 0; a < this._complex._chains.length; ++a) {\r\n const lenA = this._chainLengths[a];\r\n if (lenA <= 4) {\r\n continue;\r\n }\r\n\r\n const chainA = this._complex._chains[a].getResidues();\r\n\r\n for (let b = a; b < this._complex._chains.length; ++b) {\r\n const lenB = this._chainLengths[b];\r\n if (lenB <= 4) {\r\n continue;\r\n }\r\n\r\n const chainB = this._complex._chains[b].getResidues();\r\n\r\n for (let i = 1; i + 1 < lenA; ++i) {\r\n const ri = chainA[i];\r\n\r\n let j = 1;\r\n if (b === a) {\r\n j = i + 3; // check for self-bridges forward down the chain\r\n }\r\n\r\n for (; j + 1 < lenB; ++j) {\r\n const rj = chainB[j];\r\n\r\n const type = this._testBridge(chainA, i, chainB, j);\r\n if (type === BridgeType.NO_BRIDGE) {\r\n continue;\r\n }\r\n\r\n // there is a bridge, try to attach it to previously found sequence\r\n let found = false;\r\n for (const bridge of bridges) {\r\n if (type !== bridge.type || ri._index !== bridge.i[bridge.i.length - 1] + 1) {\r\n continue;\r\n }\r\n\r\n if (type === BridgeType.PARALLEL && bridge.j[bridge.j.length - 1] + 1 === rj._index) {\r\n bridge.i.push(ri._index);\r\n bridge.j.push(rj._index);\r\n found = true;\r\n break;\r\n }\r\n\r\n if (type === BridgeType.ANTI_PARALLEL && bridge.j[0] - 1 === rj._index) {\r\n bridge.i.push(ri._index);\r\n bridge.j.unshift(rj._index);\r\n found = true;\r\n break;\r\n }\r\n }\r\n\r\n // this bridge cannot be attached anywhere, start a new sequence\r\n if (!found) {\r\n bridges.push({\r\n type,\r\n i: [ri._index],\r\n chainI: ri.getChain()._index,\r\n j: [rj._index],\r\n chainJ: rj.getChain()._index,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // extend ladders\r\n bridges.sort((a, b) => {\r\n if (a.chainI < b.chainI || (a.chainI === b.chainI && a.i[0] < b.i[0])) {\r\n return -1;\r\n }\r\n return 1;\r\n });\r\n\r\n for (let i = 0; i < bridges.length; ++i) {\r\n for (let j = i + 1; j < bridges.length; ++j) {\r\n const ibi = bridges[i].i[0];\r\n const iei = bridges[i].i[bridges[i].i.length - 1];\r\n const jbi = bridges[i].j[0];\r\n const jei = bridges[i].j[bridges[i].j.length - 1];\r\n const ibj = bridges[j].i[0];\r\n const iej = bridges[j].i[bridges[j].i.length - 1];\r\n const jbj = bridges[j].j[0];\r\n const jej = bridges[j].j[bridges[j].j.length - 1];\r\n\r\n if (bridges[i].type !== bridges[j].type\r\n || this._hasChainBreak(Math.min(ibi, ibj), Math.max(iei, iej))\r\n || this._hasChainBreak(Math.min(jbi, jbj), Math.max(jei, jej))\r\n || ibj - iei >= 6 || (iei >= ibj && ibi <= iej)) {\r\n continue;\r\n }\r\n\r\n let bulge = false;\r\n if (bridges[i].type === BridgeType.PARALLEL) {\r\n bulge = ((jbj - jei < 6 && ibj - iei < 3) || (jbj - jei < 3));\r\n } else {\r\n bulge = ((jbi - jej < 6 && ibj - iei < 3) || (jbi - jej < 3));\r\n }\r\n\r\n if (bulge) {\r\n bridges[i].i = bridges[i].i.concat(bridges[j].i);\r\n if (bridges[i].type === BridgeType.PARALLEL) {\r\n bridges[i].j = bridges[i].j.concat(bridges[j].j);\r\n } else {\r\n bridges[i].j = bridges[j].j.concat(bridges[i].j);\r\n }\r\n bridges.splice(j--, 1);\r\n }\r\n }\r\n }\r\n\r\n // Sheet\r\n const ladderset = new Set();\r\n for (let i = 0; i < bridges.length; ++i) {\r\n ladderset.add(bridges[i]);\r\n }\r\n\r\n let sheet = 1;\r\n let ladder = 0;\r\n while (ladderset.size > 0) {\r\n let bridge = ladderset.values().next().value;\r\n ladderset.delete(bridge);\r\n\r\n const sheetset = new Set();\r\n sheetset.add(bridge);\r\n\r\n let toMove;\r\n do {\r\n toMove = new Set();\r\n for (const a of sheetset.values()) {\r\n for (const b of ladderset.values()) {\r\n if (this._areBridgesLinked(a, b)) {\r\n toMove.add(b);\r\n }\r\n }\r\n }\r\n for (bridge of toMove.values()) {\r\n sheetset.add(bridge);\r\n ladderset.delete(bridge);\r\n }\r\n } while (toMove.size > 0);\r\n\r\n for (bridge of sheetset.values()) {\r\n bridge.ladder = ladder;\r\n bridge.sheet = sheet;\r\n bridge.link = sheetset;\r\n ++ladder;\r\n }\r\n\r\n ++sheet;\r\n }\r\n\r\n for (let i = 0; i < bridges.length; ++i) {\r\n const bridge = bridges[i];\r\n\r\n // find out if any of the i and j set members already have\r\n // a bridge assigned, if so, we're assigning bridge 2\r\n\r\n let betai = 0;\r\n let betaj = 0;\r\n\r\n for (let l = 0; l < bridge.i.length; ++l) {\r\n if (this._betaPartners[bridge.i[l]][0]) {\r\n betai = 1;\r\n break;\r\n }\r\n }\r\n\r\n for (let l = 0; l < bridge.j.length; ++l) {\r\n if (this._betaPartners[bridge.j[l]][0]) {\r\n betaj = 1;\r\n break;\r\n }\r\n }\r\n\r\n let ss = StructureType.BRIDGE;\r\n if (bridge.i.length > 1) {\r\n ss = StructureType.STRAND;\r\n }\r\n\r\n if (bridge.type === BridgeType.PARALLEL) {\r\n let j = 0;\r\n for (let k = 0; k < bridge.i.length; ++k) {\r\n this._betaPartners[bridge.i[k]][betai] = {\r\n residue: bridge.j[j++],\r\n ladder: bridge.ladder,\r\n parallel: true,\r\n };\r\n }\r\n\r\n j = 0;\r\n for (let k = 0; k < bridge.j.length; ++k) {\r\n this._betaPartners[bridge.j[k]][betaj] = {\r\n residue: bridge.i[j++],\r\n ladder: bridge.ladder,\r\n parallel: true,\r\n };\r\n }\r\n } else {\r\n let j = bridge.j.length - 1;\r\n for (let k = 0; k < bridge.i.length; ++k) {\r\n this._betaPartners[bridge.i[k]][betai] = {\r\n residue: bridge.j[j--],\r\n ladder: bridge.ladder,\r\n parallel: false,\r\n };\r\n }\r\n\r\n j = bridge.i.length - 1;\r\n for (let k = 0; k < bridge.j.length; ++k) {\r\n this._betaPartners[bridge.j[k]][betaj] = {\r\n residue: bridge.i[j--],\r\n ladder: bridge.ladder,\r\n parallel: false,\r\n };\r\n }\r\n }\r\n\r\n for (let k = bridge.i[0]; k <= bridge.i[bridge.i.length - 1]; ++k) {\r\n if (this._ss[k] !== StructureType.STRAND) {\r\n this._ss[k] = ss;\r\n this._sheet[k] = bridge.sheet;\r\n }\r\n }\r\n\r\n for (let k = bridge.j[0]; k <= bridge.j[bridge.j.length - 1]; ++k) {\r\n if (this._ss[k] !== StructureType.STRAND) {\r\n this._ss[k] = ss;\r\n this._sheet[k] = bridge.sheet;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _testBridge(chainA, from, chainB, to) {\r\n let result = BridgeType.NO_BRIDGE;\r\n\r\n const a = chainA[from - 1]._index;\r\n const b = chainA[from]._index;\r\n const c = chainA[from + 1]._index;\r\n const d = chainB[to - 1]._index;\r\n const e = chainB[to]._index;\r\n const f = chainB[to + 1]._index;\r\n\r\n const isBond = this._hbonds.isBond.bind(this._hbonds);\r\n if ((isBond(c, e) && isBond(e, a)) || (isBond(f, b) && isBond(b, d))) {\r\n result = BridgeType.PARALLEL;\r\n } else if ((isBond(c, d) && isBond(f, a)) || (isBond(e, b) && isBond(b, e))) {\r\n result = BridgeType.ANTI_PARALLEL;\r\n }\r\n return result;\r\n }\r\n\r\n // return true if any of the residues in bridge a is identical to any of the residues in bridge b\r\n _areBridgesLinked(a, b) {\r\n const ai = new Set(a.i);\r\n const aj = new Set(a.j);\r\n\r\n for (const i of b.i) {\r\n if (ai.has(i) || aj.has(i)) {\r\n return true;\r\n }\r\n }\r\n\r\n for (const i of b.j) {\r\n if (ai.has(i) || aj.has(i)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _hasChainBreak(from, to) {\r\n for (let i = from + 1; i <= to; ++i) {\r\n if (this._complex._residues[i]._sequence !== this._complex._residues[i - 1]._sequence + 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nSecondaryStructureMap.StructureType = StructureType;\r\n","import * as THREE from 'three';\r\nimport logger from '../utils/logger';\r\nimport Atom from './Atom';\r\nimport Chain from './Chain';\r\nimport Helix from './Helix';\r\nimport Strand from './Strand';\r\nimport Sheet from './Sheet';\r\nimport Component from './Component';\r\nimport ResidueType from './ResidueType';\r\nimport Bond from './Bond';\r\nimport AutoBond from './AutoBond';\r\nimport AromaticLoopsMarker from './AromaticLoopsMarker';\r\nimport BiologicalUnit from './BiologicalUnit';\r\nimport selectors from './selectors';\r\nimport VoxelWorld from './VoxelWorld';\r\nimport SecondaryStructureMap from './SecondaryStructureMap';\r\nimport StructuralElement from './StructuralElement';\r\n\r\nconst VOXEL_SIZE = 5.0;\r\n\r\nconst { StructureType } = SecondaryStructureMap;\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\n// see http://www.wwpdb.org/documentation/file-format-content/format33/sect5.html#HELIX\r\nconst helixClassMap = {\r\n [StructureType.HELIX_ALPHA]: 1,\r\n [StructureType.HELIX_PI]: 3,\r\n [StructureType.HELIX_310]: 5,\r\n};\r\n\r\nconst loopMap = {\r\n [StructureType.BRIDGE]: StructuralElementType.BRIDGE,\r\n [StructureType.TURN]: StructuralElementType.TURN,\r\n [StructureType.BEND]: StructuralElementType.BEND,\r\n [StructureType.LOOP]: StructuralElementType.COIL,\r\n};\r\n\r\n/**\r\n * The entire complex of the molecules under study.\r\n *\r\n * @exports Complex\r\n * @constructor\r\n */\r\nclass Complex {\r\n constructor() {\r\n this._chains = [];\r\n this._components = [];\r\n this._helices = [];\r\n this._sheets = [];\r\n this.structures = [];\r\n\r\n this._residueTypes = Object.create(ResidueType.StandardTypes);\r\n this._atoms = [];\r\n this._residues = [];\r\n this._bonds = [];\r\n this._sgroups = [];\r\n this._molecules = [];\r\n this._maskNeedsUpdate = false;\r\n\r\n this.metadata = {};\r\n\r\n this.symmetry = [];\r\n this.units = [new BiologicalUnit(this)];\r\n this._currentUnit = 0; // default biological unit is the asymmetric unit\r\n }\r\n\r\n addAtom(atom) {\r\n const index = this._atoms.length;\r\n this._atoms.push(atom);\r\n return index;\r\n }\r\n\r\n addSheet(sheet) {\r\n const index = this._sheets.length;\r\n this._sheets.push(sheet);\r\n return index;\r\n }\r\n\r\n addHelix(helix) {\r\n const index = this._helices.length;\r\n this._helices.push(helix);\r\n return index;\r\n }\r\n\r\n getAtoms() {\r\n return this._atoms;\r\n }\r\n\r\n getBonds() {\r\n return this._bonds;\r\n }\r\n\r\n getAtomCount() {\r\n return this._atoms.length;\r\n }\r\n\r\n addResidue(residue) {\r\n const index = this._residues.length;\r\n this._residues.push(residue);\r\n return index;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n this.forEachChain((chain) => {\r\n chain.updateToFrame(frameData);\r\n });\r\n }\r\n\r\n addResidueType(resName) {\r\n const rt = this._residueTypes[resName] = new ResidueType(resName, 'Unknown', '');\r\n return rt;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residues.length;\r\n }\r\n\r\n getResidues() {\r\n return this._residues;\r\n }\r\n\r\n getSGroupCount() {\r\n return this._sgroups.length;\r\n }\r\n\r\n getSGroups() {\r\n return this._sgroups;\r\n }\r\n\r\n /*\r\n Extract atom by its fullname: #chainName#.#residueId#.#atomName#\r\n */\r\n getAtomByFullname(fullName) {\r\n const parts = fullName.split('.');\r\n if (parts.length !== 3) {\r\n return null;\r\n }\r\n\r\n const chainName = parts[0];\r\n const resId = parseInt(parts[1], 10);\r\n if (Number.isNaN(resId)) {\r\n return null;\r\n }\r\n const atomName = parts[2].toUpperCase();\r\n\r\n let currAtom = null;\r\n this.forEachChain((chain) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (chain._name.localeCompare(chainName) === 0) {\r\n chain.forEachResidue((residue) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (residue._sequence === resId) {\r\n residue.forEachAtom((atom) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (atomName.localeCompare(atom.name) === 0) {\r\n currAtom = atom;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n return currAtom;\r\n }\r\n\r\n /**\r\n * Create a new chain.\r\n *\r\n * @param {string} name - Chain name.\r\n * @returns {Chain} - Newly created chain.\r\n */\r\n addChain(name) {\r\n const result = new Chain(this, name);\r\n this._chains.push(result);\r\n return result;\r\n }\r\n\r\n getChain(name) {\r\n for (let i = 0, n = this._chains.length; i < n; ++i) {\r\n const chain = this._chains[i];\r\n if (chain.getName() === name) {\r\n return chain;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getChainCount() {\r\n return this._chains.length;\r\n }\r\n\r\n getMolecules() {\r\n return this._molecules;\r\n }\r\n\r\n getMoleculeCount() {\r\n return this._molecules.length;\r\n }\r\n\r\n forEachAtom(process) {\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n process(atoms[i]);\r\n }\r\n }\r\n\r\n forEachBond(process) {\r\n const bonds = this._bonds;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]);\r\n }\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n forEachChain(process) {\r\n const chains = this._chains;\r\n for (let i = 0, n = chains.length; i < n; ++i) {\r\n process(chains[i]);\r\n }\r\n }\r\n\r\n forEachMolecule(process) {\r\n const molecules = this._molecules;\r\n const n = molecules.length;\r\n for (let i = 0; i < n; ++i) {\r\n process(molecules[i]);\r\n }\r\n }\r\n\r\n forEachSGroup(process) {\r\n const groups = this._sgroups;\r\n for (let i = 0, n = groups.length; i < n; ++i) {\r\n process(groups[i]);\r\n }\r\n }\r\n\r\n forEachComponent(process) {\r\n const components = this._components;\r\n for (let i = 0, n = components.length; i < n; ++i) {\r\n process(components[i]);\r\n }\r\n }\r\n\r\n forEachVisibleComponent(process) {\r\n const components = this._components;\r\n for (let i = 0, n = components.length; i < n; ++i) {\r\n process(components[i]);\r\n }\r\n }\r\n\r\n addBond(left, right, order, type, fixed) {\r\n const bond = new Bond(left, right, order, type, fixed);\r\n this._bonds.push(bond);\r\n return bond;\r\n }\r\n\r\n getBondCount() {\r\n return this._bonds.length;\r\n }\r\n\r\n getResidueType(name) {\r\n return this._residueTypes[name] || null;\r\n }\r\n\r\n getUnifiedSerial(chain, serial, iCode) {\r\n const maxSerial = 65536;\r\n const chainShift = maxSerial * 256;\r\n return serial + iCode * maxSerial + chain * chainShift;\r\n }\r\n\r\n splitUnifiedSerial(uniSerial) {\r\n const maxSerial = 65536;\r\n const chainShift = maxSerial * 256;\r\n const chainId = Math.floor(uniSerial / chainShift);\r\n const remnant = uniSerial - chainId * chainShift;\r\n const insCode = Math.floor(remnant / maxSerial);\r\n const ser = remnant - insCode * maxSerial;\r\n return { chain: chainId, serial: ser, iCode: insCode };\r\n }\r\n\r\n _fillCmpEdit() {\r\n const self = this;\r\n const components = this._components;\r\n\r\n function addComp() {\r\n const comp = new Component(self);\r\n comp._index = components.length;\r\n components[comp._index] = comp;\r\n return comp;\r\n }\r\n\r\n this.forEachChain((chain) => {\r\n const residues = chain._residues;\r\n const resCount = residues.length;\r\n if (resCount < 1) {\r\n return;\r\n }\r\n let comp = addComp();\r\n let currStart = residues[0]._index;\r\n\r\n for (let i = 0; i < resCount; ++i) {\r\n const currRes = residues[i];\r\n currRes._component = comp;\r\n\r\n const nextRes = i === resCount - 1 ? null : residues[i + 1];\r\n if (!nextRes\r\n || !currRes.isConnected(nextRes)\r\n || currRes._index !== nextRes._index - 1) {\r\n // the last condition is broken and incorrect\r\n // the refactoring of the Component is required in order to fix this issue\r\n comp.setSubDivs([{\r\n start: currStart,\r\n end: currRes._index,\r\n }]);\r\n if (nextRes) {\r\n currStart = nextRes._index;\r\n comp = addComp();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n // This function was added in the moment of despair\r\n // It was the dark times for miew\r\n _fillCmpNoedit() {\r\n const comp = new Component(this);\r\n comp._index = 0;\r\n\r\n const residues = this._residues;\r\n const resCount = residues.length;\r\n if (resCount === 0) {\r\n return;\r\n }\r\n\r\n const currSubDivs = [];\r\n let currStart = 0;\r\n for (let i = 0; i < resCount; ++i) {\r\n const currRes = residues[i];\r\n currRes._component = comp;\r\n\r\n const nextRes = i === resCount - 1 ? null : residues[i + 1];\r\n if (!nextRes\r\n || !currRes.isConnected(nextRes)) {\r\n // wrap up this interval\r\n currSubDivs[currSubDivs.length] = {\r\n start: currStart,\r\n end: i,\r\n };\r\n if (nextRes) {\r\n currStart = i + 1;\r\n }\r\n }\r\n }\r\n\r\n comp.setSubDivs(currSubDivs);\r\n this._components[comp._index] = comp;\r\n }\r\n\r\n /**\r\n * Fill components information.\r\n * @param {boolean} enableEditing - Restructure Complex to enable per-component editing.\r\n */\r\n _fillComponents(enableEditing) {\r\n if (enableEditing) {\r\n this._fillCmpEdit();\r\n } else {\r\n this._fillCmpNoedit();\r\n }\r\n }\r\n\r\n getCurrentUnit() {\r\n return this._currentUnit;\r\n }\r\n\r\n getDefaultBoundaries() {\r\n return this.units[0].getBoundaries();\r\n }\r\n\r\n getBoundaries() {\r\n return this.units[this._currentUnit].getBoundaries();\r\n }\r\n\r\n getTransforms() {\r\n return this.units[this._currentUnit].getTransforms();\r\n }\r\n\r\n getSelector() {\r\n return this.units[this._currentUnit].getSelector();\r\n }\r\n\r\n resetCurrentUnit() {\r\n this._currentUnit = 0;\r\n this.setCurrentUnit(1);\r\n }\r\n\r\n setCurrentUnit(newUnit) {\r\n if (newUnit !== null && newUnit !== undefined\r\n && newUnit !== this._currentUnit\r\n && newUnit >= 0\r\n && newUnit < this.units.length) {\r\n this._currentUnit = newUnit;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n _computeBounds() {\r\n const { units } = this;\r\n for (let i = 0, n = units.length; i < n; ++i) {\r\n units[i].computeBoundaries();\r\n }\r\n }\r\n\r\n onAtomPositionChanged() {\r\n this.forEachChain((a) => {\r\n a._finalize();\r\n });\r\n this.forEachComponent((c) => {\r\n c.update();\r\n });\r\n // Update bounding sphere and box\r\n this._computeBounds();\r\n this._finalizeBonds();\r\n this.forEachSGroup((s) => {\r\n s._rebuildSGroupOnAtomChange();\r\n });\r\n }\r\n\r\n update() {\r\n if (this._maskNeedsUpdate) {\r\n this.updateStructuresMask();\r\n this._maskNeedsUpdate = false;\r\n }\r\n }\r\n\r\n _finalizeBonds() {\r\n const bonds = this.getBonds();\r\n const n = bonds.length;\r\n for (let i = 0; i < n; ++i) {\r\n bonds[i]._index = i;\r\n }\r\n }\r\n\r\n /**\r\n * Finalizes complex's inner data(i.e. after parsing).\r\n * @param {objects} opts - Build bonds automatically.\r\n * @param {boolean} opts.needAutoBonding - Build bonds automatically.\r\n * @param {boolean} opts.detectAromaticLoops - Find/mark aromatic loops.\r\n * @param {boolean} opts.enableEditing - Restructure Complex to enable per-component editing.\r\n * @param {Array} [opts.serialAtomMap] - Array of atoms ordered by their serials.\r\n */\r\n finalize(opts) {\r\n opts = opts || {};\r\n // Put bonds into atoms\r\n const bonds = this._bonds;\r\n let i;\r\n let n;\r\n // remove invalid bonds\r\n for (i = bonds.length - 1; i >= 0; i--) {\r\n const bond = bonds[i];\r\n if (bond._left === null || bond._right === null) {\r\n bonds.splice(i, 1);\r\n } else {\r\n bond._left.bonds.push(bond);\r\n bond._right.bonds.push(bond);\r\n }\r\n }\r\n\r\n const residues = this._residues;\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n residues[i]._finalize();\r\n }\r\n\r\n this.forEachChain((a) => {\r\n a._finalize();\r\n });\r\n\r\n // WARNING! this MUST be done BEFORE computeBounds is called\r\n const { units } = this;\r\n for (i = 0, n = units.length; i < n; ++i) {\r\n units[i].finalize();\r\n }\r\n // try setting first biomolecule by defaults\r\n this.setCurrentUnit(1);\r\n\r\n const residueHash = {};\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n const res = residues[i];\r\n // This code is extremely dangerous for non-PDB formats\r\n residueHash[this.getUnifiedSerial(\r\n res.getChain().getName().charCodeAt(0),\r\n res.getSequence(),\r\n res.getICode().charCodeAt(0),\r\n )] = res;\r\n }\r\n\r\n const { structures } = this;\r\n for (i = 0, n = structures.length; i < n; ++i) {\r\n structures[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n const helices = this._helices;\r\n for (i = 0, n = helices.length; i < n; ++i) {\r\n helices[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n const sheets = this._sheets;\r\n for (i = 0, n = sheets.length; i < n; ++i) {\r\n sheets[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n // Update bounding sphere and box\r\n this._computeBounds();\r\n\r\n const atoms = this._atoms;\r\n for (i = 0, n = atoms.length; i < n; ++i) {\r\n const currAtom = atoms[i];\r\n currAtom.index = i;\r\n }\r\n\r\n if (opts.needAutoBonding) {\r\n // Ignore errors during autobonding\r\n try {\r\n const autoConnector = new AutoBond(this);\r\n autoConnector.build();\r\n autoConnector.destroy();\r\n } catch (e) {\r\n console.warn('Autobonding failed:', e);\r\n }\r\n }\r\n\r\n const chains = this._chains;\r\n for (i = 0, n = chains.length; i < n; ++i) {\r\n chains[i]._index = i;\r\n }\r\n\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n residues[i]._index = i;\r\n }\r\n\r\n // mark non-polar hydrogens\r\n for (i = 0, n = atoms.length; i < n; ++i) {\r\n const atom = atoms[i];\r\n if (atom.flags & Atom.Flags.HYDROGEN && atom.bonds.length === 1) {\r\n const bond = atom.bonds[0];\r\n const other = (bond._left !== atom && bond._left) || bond._right;\r\n if (other.flags & Atom.Flags.CARBON) {\r\n atom.flags |= Atom.Flags.NONPOLARH;\r\n }\r\n }\r\n }\r\n\r\n this._finalizeBonds();\r\n this._fillComponents(opts.enableEditing);\r\n\r\n const marker = new AromaticLoopsMarker(this);\r\n marker.markCycles();\r\n if (opts.detectAromaticLoops) { // TODO remove this condition clause, it is for debug purposes only!\r\n marker.detectCycles(); // TODO add conditional detection\r\n }\r\n\r\n this._finalizeMolecules();\r\n }\r\n\r\n _finalizeMolecules() {\r\n // add reference to molecule into residue\r\n for (let i = 0; i < this._molecules.length; i++) {\r\n const molecule = this._molecules[i];\r\n const count = molecule.residues.length;\r\n for (let j = 0; j < count; j++) {\r\n const residue = molecule.residues[j];\r\n residue._molecule = molecule;\r\n }\r\n }\r\n }\r\n\r\n updateStructuresMask() {\r\n const updater = (structure) => structure.collectMask();\r\n this.forEachResidue(updater);\r\n this.forEachChain(updater);\r\n this.forEachMolecule(updater);\r\n }\r\n\r\n countAtomsByMask(mask) {\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if ((atom.mask & mask) !== 0) {\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n getNumAtomsBySelector(selector) {\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom)) {\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n resetAtomMask(mask) {\r\n this.forEachAtom((atom) => {\r\n atom.mask = mask;\r\n });\r\n }\r\n\r\n markAtoms(selector, mask) {\r\n const setMask = mask;\r\n const clearMask = ~setMask;\r\n let count = 0;\r\n const totalSelector = selectors.keyword('And')(selector, this.getSelector());\r\n\r\n this.forEachAtom((atom) => {\r\n if (totalSelector.includesAtom(atom)) {\r\n atom.mask |= setMask;\r\n count++;\r\n } else {\r\n atom.mask &= clearMask;\r\n }\r\n });\r\n this._maskNeedsUpdate = true;\r\n\r\n return count;\r\n }\r\n\r\n markAtomsAdditionally(selector, mask) {\r\n const setMask = mask;\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom) && (atom.mask & mask) !== mask) {\r\n atom.mask |= setMask;\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n clearAtomBits(mask) {\r\n const clearMask = ~mask;\r\n this.forEachAtom((atom) => {\r\n atom.mask &= clearMask;\r\n });\r\n const reseter = (a) => {\r\n a._mask &= clearMask;\r\n };\r\n this.forEachAtom(reseter);\r\n this.forEachResidue(reseter);\r\n this.forEachChain(reseter);\r\n this.forEachMolecule(reseter);\r\n }\r\n\r\n getAtomNames() {\r\n if (this.hasOwnProperty('_atomNames')) {\r\n return this._atomNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[atom.name] = 1;\r\n });\r\n this._atomNames = Object.keys(dict);\r\n\r\n return this._atomNames;\r\n }\r\n\r\n getElements() {\r\n if (this.hasOwnProperty('_elements')) {\r\n return this._elements;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[atom.element.name] = 1;\r\n });\r\n this._elements = Object.keys(dict);\r\n\r\n return this._elements;\r\n }\r\n\r\n getResidueNames() {\r\n if (this.hasOwnProperty('_residueNames')) {\r\n return this._residueNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachResidue((res) => {\r\n dict[res._type._name] = 1;\r\n });\r\n this._residueNames = Object.keys(dict);\r\n\r\n return this._residueNames;\r\n }\r\n\r\n getChainNames() {\r\n if (this.hasOwnProperty('_chainNames')) {\r\n return this._chainNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachChain((chain) => {\r\n dict[chain._name] = 1;\r\n });\r\n this._chainNames = Object.keys(dict);\r\n\r\n return this._chainNames;\r\n }\r\n\r\n getAltLocNames() {\r\n if (this.hasOwnProperty('_altlocNames')) {\r\n return this._altlocNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[String.fromCharCode(atom.location)] = 1;\r\n });\r\n this._altlocNames = Object.keys(dict);\r\n\r\n return this._altlocNames;\r\n }\r\n\r\n getVoxelWorld() {\r\n if (!this.hasOwnProperty('_voxelWorld')) {\r\n try {\r\n this._voxelWorld = new VoxelWorld(\r\n this.getDefaultBoundaries().boundingBox,\r\n new THREE.Vector3(VOXEL_SIZE, VOXEL_SIZE, VOXEL_SIZE),\r\n );\r\n this._voxelWorld.addAtoms(this);\r\n } catch {\r\n logger.warn('Unable to create voxel world');\r\n this._voxelWorld = null;\r\n }\r\n }\r\n\r\n return this._voxelWorld;\r\n }\r\n\r\n /**\r\n * Simple function to make unified routine procedure without code duplication.\r\n * @param {Array} srcArray - Source chemical structure array (will be part of resulting chemical structure array).\r\n * @param {Array} dstArray - Resulting chemical structure array.\r\n * @param {number} param - Parameter for processor.\r\n * @param {function} functor - Processor for every element in array.\r\n */\r\n addElement(srcArray, dstArray, param, functor) {\r\n const { length } = srcArray;\r\n for (let i = 0; i < length; ++i) {\r\n const elem = srcArray[i];\r\n functor(elem, param);\r\n dstArray.push(elem);\r\n }\r\n }\r\n\r\n // this function joins multiple complexes into one (this)\r\n // atom, bond, ... objects are reused -- so input complexes are no longer valid\r\n joinComplexes(complexes) {\r\n // clear target complex\r\n this._chains = [];\r\n this._components = [];\r\n this._helices = [];\r\n this._sheets = [];\r\n this.structures = [];\r\n this._atoms = [];\r\n this._residues = [];\r\n this._bonds = [];\r\n this._sgroups = [];\r\n\r\n const self = this;\r\n let atomBias = 0;\r\n let bondBias = 0;\r\n let residueBias = 0;\r\n let chainBias = 0;\r\n let componentBias = 0;\r\n\r\n function processAtom(atom, bias) {\r\n atom.serial += bias;\r\n atom.index += bias;\r\n }\r\n\r\n function processBond(bond, bias) {\r\n bond._index += bias;\r\n }\r\n\r\n function processResidue(residue, bias) {\r\n residue._index += bias;\r\n }\r\n\r\n function processChain(chain, bias) {\r\n chain._complex = self;\r\n chain._index += bias;\r\n }\r\n\r\n function processComponent(component, bias) {\r\n component._complex = self;\r\n component._index += bias;\r\n }\r\n\r\n /**\r\n * Simple function to do nothing.\r\n */\r\n function doNothing() {\r\n }\r\n\r\n for (let i = 0; i < complexes.length; ++i) {\r\n const c = complexes[i];\r\n this.addElement(c._atoms, this._atoms, atomBias, processAtom);\r\n this.addElement(c._bonds, this._bonds, bondBias, processBond);\r\n this.addElement(c._residues, this._residues, residueBias, processResidue);\r\n this.addElement(c._chains, this._chains, chainBias, processChain);\r\n this.addElement(c._sheets, this._sheets, 0, doNothing);\r\n this.addElement(c._helices, this._helices, 0, doNothing);\r\n this.addElement(c._sgroups, this._sgroups, 0, doNothing);\r\n this.addElement(c._components, this._components, componentBias, processComponent);\r\n this.addElement(c.structures, this.structures, 0, doNothing);\r\n // merge residue types\r\n for (const rt in c._residueTypes) {\r\n if (c._residueTypes.hasOwnProperty(rt)) {\r\n this._residueTypes[rt] = c._residueTypes[rt];\r\n }\r\n }\r\n\r\n atomBias += c._atoms.length;\r\n bondBias += c._bonds.length;\r\n residueBias += c._residues.length;\r\n chainBias += c._chains.length;\r\n componentBias += c._components.length;\r\n }\r\n\r\n this._computeBounds();\r\n }\r\n\r\n /**\r\n * Replace secondary structure with calculated one.\r\n *\r\n * DSSP algorithm implementation is used.\r\n *\r\n * Kabsch W, Sander C. 1983. Dictionary of protein secondary structure: pattern recognition of hydrogen-bonded and\r\n * geometrical features. Biopolymers. 22(12):2577-2637. doi:10.1002/bip.360221211.\r\n */\r\n dssp() {\r\n const ssMap = new SecondaryStructureMap(this);\r\n\r\n const structures = this.structures = [];\r\n const helices = this._helices = [];\r\n const sheets = this._sheets = [];\r\n\r\n const getSheet = (index) => {\r\n let item = sheets[index];\r\n if (!item) {\r\n item = sheets[index] = new Sheet(String(index), 0);\r\n }\r\n return item;\r\n };\r\n\r\n let lastCode;\r\n let lastSheetIndex;\r\n let lastHelixIndex = 0;\r\n let curStructure = null;\r\n for (let i = 0, n = this._residues.length; i < n; ++i) {\r\n const curCode = ssMap._ss[i];\r\n const curResidue = this._residues[i];\r\n const curSheetIndex = ssMap._sheet[i];\r\n\r\n // expand the last structure\r\n if (curCode === lastCode && curSheetIndex === lastSheetIndex) {\r\n curResidue._secondary = curStructure;\r\n if (curStructure) {\r\n curStructure.term = curResidue;\r\n }\r\n if (curStructure instanceof Helix) {\r\n curStructure.length++;\r\n }\r\n continue;\r\n }\r\n\r\n // create a new structure\r\n const helixClass = helixClassMap[curCode];\r\n const loopType = loopMap[curCode];\r\n if (curCode === StructureType.STRAND) {\r\n const curSheet = getSheet(curSheetIndex);\r\n curStructure = new Strand(curSheet, curResidue, curResidue, 0, null, null);\r\n curSheet.addStrand(curStructure);\r\n } else if (helixClass !== undefined) {\r\n lastHelixIndex++;\r\n curStructure = new Helix(helixClass, curResidue, curResidue, lastHelixIndex, String(lastHelixIndex), '', 1);\r\n helices.push(curStructure);\r\n } else if (loopType !== undefined) {\r\n curStructure = new StructuralElement(loopType, curResidue, curResidue);\r\n } else {\r\n curStructure = null;\r\n }\r\n\r\n if (curStructure) {\r\n structures.push(curStructure);\r\n }\r\n\r\n curResidue._secondary = curStructure;\r\n\r\n lastCode = curCode;\r\n lastSheetIndex = curSheetIndex;\r\n }\r\n\r\n this._sheets = sheets.filter((_sheet) => true); // squeeze sheets array\r\n }\r\n}\r\n\r\nComplex.prototype.id = 'Complex';\r\nComplex.prototype.name = '';\r\n\r\nexport default Complex;\r\n","import * as THREE from 'three';\r\nimport utils from '../utils';\r\n\r\nfunction pow2ceil(v) {\r\n let p = 2;\r\n v = (v - 1) >> 1;\r\n while (v) {\r\n p <<= 1;\r\n v >>= 1;\r\n }\r\n return p;\r\n}\r\n\r\n/**\r\n * Volume constructor\r\n *\r\n * @param {Object} type - Float32Array, Int8Array, etc...\r\n * @param {Object|Array} dimensions - number of data points on each axis (x, y, z)\r\n * @param {Box3} box - bounding box defining data place in metric space,\r\n * it's corners correspond to extreme data points\r\n * @param {Number} vecSize - dimension of the field data point (1 = scalar, 3 = 3D vector)\r\n * @param {Object} data - typed array of the same type as specified by the 1st parameter,\r\n * layout: point by point along X,\r\n * row by row along Y,\r\n * plane by plane along Z\r\n * @param {Number} volumeInfo - volume info values to define threshold to filter the noise\r\n */\r\n\r\nclass Volume {\r\n constructor(type, dimensions, box, vecSize, data, volumeInfo) {\r\n this._box = box.clone();\r\n this._dimVec = Math.max(Math.floor(vecSize || 1), 1);\r\n this._volumeInfo = volumeInfo;\r\n\r\n if (dimensions instanceof Array) {\r\n [this._dimX, this._dimY, this._dimZ] = dimensions;\r\n } else {\r\n this._dimX = dimensions.x;\r\n this._dimY = dimensions.y;\r\n this._dimZ = dimensions.z;\r\n }\r\n this._dimX = Math.max(Math.floor(this._dimX), 1);\r\n this._dimY = Math.max(Math.floor(this._dimY), 1);\r\n this._dimZ = Math.max(Math.floor(this._dimZ), 1);\r\n\r\n this._rowElements = this._dimVec * this._dimX;\r\n this._planeElements = this._rowElements * this._dimY;\r\n this._totalElements = this._planeElements * this._dimZ;\r\n\r\n this._data = data || utils.allocateTyped(type, this._totalElements);\r\n\r\n // override getter/setter for vector fields\r\n switch (this._dimVec) {\r\n case 1:\r\n break;\r\n\r\n case 2:\r\n this.getValue = function (x, y, z) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n return [this._data[idx], this._data[idx + 1]];\r\n };\r\n\r\n this.setValue = function (x, y, z, a, b) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] = a;\r\n this._data[idx + 1] = b;\r\n };\r\n\r\n this.addValue = function (x, y, z, a, b) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] += a;\r\n this._data[idx + 1] += b;\r\n };\r\n break;\r\n\r\n case 3:\r\n this.getValue = function (x, y, z) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n return [this._data[idx], this._data[idx + 1], this._data[idx + 2]];\r\n };\r\n\r\n this.setValue = function (x, y, z, a, b, c) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] = a;\r\n this._data[idx + 1] = b;\r\n this._data[idx + 2] = c;\r\n };\r\n\r\n this.addValue = function (x, y, z, a, b, c) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] += a;\r\n this._data[idx + 1] += b;\r\n this._data[idx + 2] += c;\r\n };\r\n break;\r\n\r\n default:\r\n throw new Error('Volume: invalid vector dimension');\r\n }\r\n }\r\n\r\n // default getter assumes it's a scalar field\r\n getValue(x, y, z) {\r\n return this._data[x + y * this._rowElements + z * this._planeElements];\r\n }\r\n\r\n // default setter assumes it's a scalar field\r\n setValue(x, y, z, val) {\r\n this._data[x + y * this._rowElements + z * this._planeElements] = val;\r\n }\r\n\r\n // default adder assumes it's a scalar field\r\n addValue(x, y, z, val) {\r\n this._data[x + y * this._rowElements + z * this._planeElements] += val;\r\n }\r\n\r\n getDimensions() {\r\n return [this._dimX, this._dimY, this._dimZ];\r\n }\r\n\r\n getBox() {\r\n return this._box;\r\n }\r\n\r\n getVolumeInfo() {\r\n return this._volumeInfo;\r\n }\r\n\r\n getCellSize() {\r\n const boxSize = new THREE.Vector3();\r\n this._box.getSize(boxSize);\r\n const res = new THREE.Vector3();\r\n res.x = this._dimX > 1 ? boxSize.x / (this._dimX - 1) : 0;\r\n res.y = this._dimY > 1 ? boxSize.y / (this._dimY - 1) : 0;\r\n res.z = this._dimZ > 1 ? boxSize.z / (this._dimZ - 1) : 0;\r\n return res;\r\n }\r\n\r\n computeGradient() {\r\n if (this._dimVec !== 1) {\r\n // gradient can only be computed for scalar fields\r\n return null;\r\n }\r\n\r\n // create a 3D vector field of gradients\r\n const gradient = new Volume(Float32Array, [this._dimX, this._dimY, this._dimZ], this._box, 3);\r\n\r\n // calculate cell side lengths\r\n const vl = this.getCellSize();\r\n\r\n // gradient axis scaling values and averaging factors, to correctly\r\n // calculate the gradient for volumes with irregular cell spacing\r\n const vs = new THREE.Vector3(-0.5 / vl.x, -0.5 / vl.y, -0.5 / vl.z);\r\n\r\n // TODO Check for intended bug in VMD (min is zero)\r\n function clamp(val, min, max) {\r\n return Math.min(max, Math.max(min, val));\r\n }\r\n\r\n const xSize = this._dimX;\r\n const ySize = this._dimY;\r\n const zSize = this._dimZ;\r\n const volMap = this._data;\r\n\r\n function _voxelValue(x, y, z) {\r\n return volMap[z * xSize * ySize + y * xSize + x];\r\n }\r\n\r\n for (let zi = 0; zi < zSize; ++zi) {\r\n const zm = clamp(zi - 1, 0, zSize - 1);\r\n const zp = clamp(zi + 1, 0, zSize - 1);\r\n\r\n for (let yi = 0; yi < ySize; ++yi) {\r\n const ym = clamp(yi - 1, 0, ySize - 1);\r\n const yp = clamp(yi + 1, 0, ySize - 1);\r\n\r\n for (let xi = 0; xi < xSize; ++xi) {\r\n const xm = clamp(xi - 1, 0, xSize - 1);\r\n const xp = clamp(xi + 1, 0, xSize - 1);\r\n\r\n // Calculate the volume gradient at each grid cell.\r\n // Gradients are now stored unnormalized, since we need them in pure\r\n // form in order to draw field lines etc. Shading code will now have\r\n // to do renormalization for itself on-the-fly.\r\n\r\n // XXX this gradient is only correct for orthogonal grids, since\r\n // we're using the array index offsets rather to calculate the gradient\r\n // rather than voxel coordinate offsets. This will have to be\r\n // re-worked for non-orthogonal datasets.\r\n\r\n gradient.setValue(\r\n xi,\r\n yi,\r\n zi,\r\n (_voxelValue(xp, yi, zi) - _voxelValue(xm, yi, zi)) * vs.x,\r\n (_voxelValue(xi, yp, zi) - _voxelValue(xi, ym, zi)) * vs.y,\r\n (_voxelValue(xi, yi, zp) - _voxelValue(xi, yi, zm)) * vs.z,\r\n );\r\n }\r\n }\r\n }\r\n\r\n return gradient;\r\n }\r\n\r\n normalize() {\r\n const data = this._data;\r\n\r\n // get min/max\r\n let min = data[0];\r\n let max = data[0];\r\n for (let i = 1; i < data.length; ++i) {\r\n min = Math.min(min, data[i]);\r\n max = Math.max(max, data[i]);\r\n }\r\n\r\n const d = 1.0 / (max - min);\r\n if (d === 0) {\r\n return;\r\n }\r\n\r\n // normalize\r\n for (let i = 0; i < data.length; ++i) {\r\n data[i] = d * (data[i] - min);\r\n }\r\n }\r\n\r\n getTiledTextureStride() {\r\n return [this._dimX + 2, this._dimY + 2];\r\n }\r\n\r\n buildTiledTexture() {\r\n let tilesX = Math.ceil(Math.sqrt(this._dimZ * this._dimY / this._dimX));\r\n\r\n let width = tilesX * (this._dimX + 2) - 1;\r\n width = pow2ceil(width);\r\n tilesX = Math.floor(width / (this._dimX + 2));\r\n\r\n const tilesY = Math.ceil(this._dimZ / tilesX);\r\n let height = tilesY * (this._dimY + 2) - 1;\r\n height = pow2ceil(height);\r\n\r\n const data = new Uint8Array(width * height);\r\n\r\n let src;\r\n let dst;\r\n for (let tileRow = 0; tileRow < tilesY; ++tileRow) {\r\n // process each pixel row of this tile row\r\n for (let row = 0; row < this._dimY; ++row) {\r\n src = tileRow * tilesX * this._planeElements + row * this._rowElements;\r\n dst = width * (tileRow * (this._dimY + 2) + row);\r\n // copy a series of rows through several XY planes\r\n for (let t = 0; t < tilesX; ++t) {\r\n // copy one row of one XY plane\r\n for (let x = 0; x < this._dimX; ++x) {\r\n data[dst++] = 255.0 * this._data[src++];\r\n }\r\n\r\n // repeat last pixel of previous tile\r\n data[dst++] = 255.0 * this._data[src - 1];\r\n\r\n if (t < tilesX - 1) {\r\n // skip to the same row of next XY plane\r\n src += this._planeElements - this._rowElements;\r\n // repeat first pixel of next tile\r\n data[dst++] = 255.0 * this._data[src];\r\n }\r\n }\r\n }\r\n }\r\n\r\n // fill pixels between tile rows with copy of edge pixels\r\n for (let tileRow = 0; tileRow < tilesY; ++tileRow) {\r\n // copy last pixel row of this tile row to the following pixel row of the texture\r\n src = width * (tileRow * (this._dimY + 2) + this._dimY - 1);\r\n dst = src + width;\r\n for (let x = 0; x < width; ++x) {\r\n data[dst++] = data[src++];\r\n }\r\n if (tileRow < tilesY - 1) {\r\n // copy first pixel row of next tile row to the preceding pixel row of the texture\r\n src = width * (tileRow + 1) * (this._dimY + 2);\r\n dst = src - width;\r\n for (let x = 0; x < width; ++x) {\r\n data[dst++] = data[src++];\r\n }\r\n }\r\n }\r\n\r\n const texture = new THREE.DataTexture(\r\n data,\r\n width,\r\n height,\r\n THREE.RedFormat,\r\n THREE.UnsignedByteType,\r\n THREE.UVMapping,\r\n THREE.ClampToEdgeWrapping,\r\n THREE.ClampToEdgeWrapping,\r\n THREE.LinearFilter,\r\n THREE.LinearFilter,\r\n );\r\n texture.needsUpdate = true;\r\n return texture;\r\n }\r\n\r\n /* ********************************************************************************\r\n *\r\n * Methods that provide direct access to internal array (for better performance)\r\n *\r\n ******************************************************************************** */\r\n\r\n getData() {\r\n return this._data;\r\n }\r\n\r\n getDirectIdx(x, y, z) {\r\n return x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n }\r\n\r\n getStrideX() {\r\n return this._dimVec;\r\n }\r\n\r\n getStrideY() {\r\n return this._rowElements;\r\n }\r\n\r\n getStrideZ() {\r\n return this._planeElements;\r\n }\r\n}\r\n\r\nVolume.prototype.id = 'Volume';\r\n\r\nexport default Volume;\r\n","/**\r\n * Residue Molecule.\r\n *\r\n * @param {Complex} complex - Molecular complex this Molecule belongs to.\r\n * @param {String} name - Molecule's name.\r\n * @param {Integer} index - Molecule's index in file.\r\n *\r\n * @exports Molecule\r\n * @constructor\r\n */\r\nclass Molecule {\r\n constructor(complex, name, index) {\r\n this.complex = complex;\r\n this.name = name || '';\r\n this.residues = [];\r\n this.mask = 1 | 0;\r\n this.index = index || -1; // start with 1\r\n }\r\n\r\n forEachResidue(process) {\r\n const { residues } = this;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const { residues } = this;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n mask &= residues[i]._mask;\r\n }\r\n this.mask = mask;\r\n }\r\n}\r\n\r\nexport default Molecule;\r\n","import Atom from './chem/Atom';\r\nimport Element from './chem/Element';\r\nimport Bond from './chem/Bond';\r\nimport Residue from './chem/Residue';\r\nimport ResidueType from './chem/ResidueType';\r\nimport Chain from './chem/Chain';\r\nimport Helix from './chem/Helix';\r\nimport Strand from './chem/Strand';\r\nimport Sheet from './chem/Sheet';\r\nimport SGroup from './chem/SGroup';\r\nimport Assembly from './chem/Assembly';\r\nimport Complex from './chem/Complex';\r\nimport Volume from './chem/Volume';\r\nimport VoxelWorld from './chem/VoxelWorld';\r\nimport selectors from './chem/selectors';\r\nimport Molecule from './chem/Molecule';\r\n\r\nexport default {\r\n Atom,\r\n Element,\r\n Bond,\r\n Residue,\r\n ResidueType,\r\n Chain,\r\n Helix,\r\n Strand,\r\n Sheet,\r\n SGroup,\r\n Assembly,\r\n Complex,\r\n Volume,\r\n VoxelWorld,\r\n selectors,\r\n Molecule,\r\n};\r\n","/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nimport * as THREE from 'three';\r\n\r\nclass CSS2DObject extends THREE.Object3D {\r\n constructor(element) {\r\n super();\r\n const self = this;\r\n this._element = element;\r\n this._element.style.position = 'absolute';\r\n this.addEventListener('removed', () => {\r\n if (self._element.parentNode !== null) {\r\n self._element.parentNode.removeChild(self._element);\r\n }\r\n });\r\n }\r\n\r\n getElement() {\r\n return this._element;\r\n }\r\n\r\n /**\r\n * Sets label transparency.\r\n *\r\n * @param {number} transp - in [0; 1] 1 means fully transparent\r\n */\r\n setTransparency(transp) {\r\n const el = this.getElement();\r\n if (el === null) {\r\n return;\r\n }\r\n if (transp === 1.0) {\r\n el.style.display = 'none';\r\n return;\r\n }\r\n el.style.display = 'inline';\r\n const op = 1.0 - transp;\r\n const top = op.toString();\r\n const op100 = op * 100;\r\n el.style.opacity = top;\r\n el.style.filter = `alpha(opacity=${op100})`; // IE fallback\r\n }\r\n\r\n clone() {\r\n const obj = new CSS2DObject(this._element);\r\n obj.copy(this);\r\n return obj;\r\n }\r\n}\r\n\r\nexport default CSS2DObject;\r\n","import * as THREE from 'three';\r\n\r\nclass RCGroup extends THREE.Group {\r\n raycast(raycaster, intersects) {\r\n if (!this.visible) {\r\n return;\r\n }\r\n\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n children[i].raycast(raycaster, intersects);\r\n }\r\n }\r\n\r\n enableSubset(mask, innerOnly) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].enableSubset) {\r\n children[i].enableSubset(mask, innerOnly);\r\n }\r\n }\r\n }\r\n\r\n disableSubset(mask, innerOnly) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].disableSubset) {\r\n children[i].disableSubset(mask, innerOnly);\r\n }\r\n }\r\n }\r\n\r\n isEmpty() {\r\n return this.children.length === 0;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].updateToFrame) {\r\n children[i].updateToFrame(frameData);\r\n }\r\n }\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n Array.prototype.push.apply(totalSubset, children[i].getSubset(mask, innerOnly));\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default RCGroup;\r\n","import * as THREE from 'three';\r\nimport logger from '../utils/logger';\r\nimport CSS2DObject from './CSS2DObject';\r\nimport RCGroup from './RCGroup';\r\nimport vertexScreenQuadShader from './shaders/ScreenQuad.vert';\r\nimport fragmentScreenQuadFromTex from './shaders/ScreenQuadFromTex.frag';\r\nimport fragmentScreenQuadFromTexWithDistortion from './shaders/ScreenQuadFromTexWithDistortion.frag';\r\n\r\nconst LAYERS = {\r\n DEFAULT: 0, VOLUME: 1, TRANSPARENT: 2, PREPASS_TRANSPARENT: 3, VOLUME_BFPLANE: 4, COLOR_FROM_POSITION: 5, SHADOWMAP: 6,\r\n};\r\n\r\nconst SELECTION_LAYERS = [ // These layers, that are used in the selection by ray casting\r\n LAYERS.DEFAULT, LAYERS.TRANSPARENT,\r\n];\r\n\r\nTHREE.Object3D.prototype.resetTransform = function () {\r\n this.position.set(0, 0, 0);\r\n this.quaternion.set(0, 0, 0, 1);\r\n this.scale.set(1, 1, 1);\r\n};\r\n\r\n// update world matrix of this object and all its ancestors\r\nTHREE.Object3D.prototype.updateMatrixWorldRecursive = function () {\r\n if (this.parent != null) {\r\n this.parent.updateMatrixWorldRecursive();\r\n }\r\n this.updateMatrixWorld();\r\n};\r\n// add object to parent, saving objects' world transform\r\nTHREE.Object3D.prototype.addSavingWorldTransform = (function () {\r\n const _worldMatrixInverse = new THREE.Matrix4();\r\n\r\n return function (object) {\r\n if (object instanceof THREE.Object3D) {\r\n _worldMatrixInverse.copy(this.matrixWorld).invert();\r\n _worldMatrixInverse.multiply(object.matrixWorld);\r\n object.matrix.copy(_worldMatrixInverse);\r\n object.matrix.decompose(object.position, object.quaternion, object.scale);\r\n this.add(object);\r\n }\r\n };\r\n}());\r\n\r\n// render a tiny transparent quad in the center of the screen\r\nTHREE.WebGLRenderer.prototype.renderDummyQuad = (function () {\r\n const _material = new THREE.MeshBasicMaterial({ transparent: true, opacity: 0.0, depthWrite: false });\r\n\r\n const _scene = new THREE.Scene();\r\n const _quad = new THREE.Mesh(new THREE.PlaneGeometry(0.01, 0.01), _material);\r\n _scene.add(_quad);\r\n\r\n const _camera = new THREE.OrthographicCamera(-0.5, 0.5, 0.5, -0.5, -10000, 10000);\r\n _camera.position.z = 100;\r\n\r\n return function () {\r\n this.render(_scene, _camera);\r\n };\r\n}());\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuad = (function () {\r\n const _scene = new THREE.Scene();\r\n const _quad = new THREE.Mesh(new THREE.PlaneGeometry(1.0, 1.0));\r\n _scene.add(_quad);\r\n\r\n const _camera = new THREE.OrthographicCamera(-0.5, 0.5, 0.5, -0.5, -10000, 10000);\r\n _camera.position.z = 100;\r\n\r\n return function (material) {\r\n _quad.material = material;\r\n this.render(_scene, _camera);\r\n };\r\n}());\r\n\r\nTHREE.Matrix4.prototype.isIdentity = (function () {\r\n const identity = new THREE.Matrix4();\r\n return function () {\r\n return identity.equals(this);\r\n };\r\n}());\r\n\r\nTHREE.Matrix4.prototype.applyToPointsArray = function (array, stride, w) {\r\n if (!array || !stride || stride < 3) {\r\n return array;\r\n }\r\n w = w || 0; // use point as normal by default\r\n const e = this.elements;\r\n for (let i = 0; i < array.length; i += stride) {\r\n const x = array[i];\r\n const y = array[i + 1];\r\n const z = array[i + 2];\r\n\r\n const persp = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\r\n\r\n array[i] = (e[0] * x + e[4] * y + e[8] * z + e[12] * w) * persp;\r\n array[i + 1] = (e[1] * x + e[5] * y + e[9] * z + e[13] * w) * persp;\r\n array[i + 2] = (e[2] * x + e[6] * y + e[10] * z + e[14] * w) * persp;\r\n }\r\n return array;\r\n};\r\n\r\nclass ScreenQuadMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n if (params.uniforms === undefined) {\r\n params.uniforms = {};\r\n }\r\n params.uniforms.srcTex = { type: 't', value: null };\r\n params.vertexShader = vertexScreenQuadShader;\r\n params.transparent = false;\r\n params.depthTest = false;\r\n params.depthWrite = false;\r\n super(params);\r\n }\r\n}\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuadFromTex = (function () {\r\n const _material = new ScreenQuadMaterial({\r\n uniforms: { opacity: { type: 'f', value: 1.0 } },\r\n fragmentShader: fragmentScreenQuadFromTex,\r\n transparent: true,\r\n });\r\n\r\n return function (srcTex, opacity) {\r\n _material.uniforms.srcTex.value = srcTex;\r\n _material.transparent = (opacity < 1.0);\r\n _material.uniforms.opacity.value = opacity;\r\n this.renderScreenQuad(_material);\r\n };\r\n}());\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuadFromTexWithDistortion = (function () {\r\n const _material = new ScreenQuadMaterial({\r\n uniforms: { coef: { type: 'f', value: 1.0 } },\r\n fragmentShader: fragmentScreenQuadFromTexWithDistortion,\r\n });\r\n\r\n return function (srcTex, coef) {\r\n _material.uniforms.srcTex.value = srcTex;\r\n _material.uniforms.coef.value = coef;\r\n this.renderScreenQuad(_material);\r\n };\r\n}());\r\n\r\n/**\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.PerspectiveCamera.prototype.setMinimalFov = function (angle) {\r\n if (this.aspect >= 1.0) {\r\n this.fov = angle;\r\n } else {\r\n this.fov = THREE.MathUtils.radToDeg(2 * Math.atan(Math.tan(THREE.MathUtils.degToRad(angle) * 0.5) / this.aspect));\r\n }\r\n};\r\n\r\n/**\r\n * @param {THREE.PerspectiveCamera} camera - Base camera for this stereo camera.\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.StereoCamera.prototype.updateHalfSized = function (camera, angle) {\r\n const originalAspect = camera.aspect;\r\n const originalFov = camera.fov;\r\n\r\n camera.aspect = originalAspect / 2.0;\r\n camera.setMinimalFov(angle);\r\n camera.updateProjectionMatrix();\r\n\r\n this.update(camera);\r\n\r\n camera.aspect = originalAspect;\r\n camera.fov = originalFov;\r\n camera.updateProjectionMatrix();\r\n};\r\n\r\n/**\r\n * @param {number} radius - Radius of bounding sphere in angstroms to fit on screen.\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.PerspectiveCamera.prototype.setDistanceToFit = function (radius, angle) {\r\n this.position.z = radius / Math.sin(0.5 * THREE.MathUtils.degToRad(angle));\r\n};\r\n\r\n/**\r\n * @param {RCGroup} gfxObj - All objects on scene.\r\n * @param {THREE.PerspectiveCamera} camera - Camera used for rendering.\r\n * @param {number} clipPlane - Distance to clip plane.\r\n * @param {number} fogFarPlane - Distance to fog far plane.\r\n */\r\nTHREE.Raycaster.prototype.intersectVisibleObject = function (gfxObj, camera, clipPlane, fogFarPlane) {\r\n const intersects = this.intersectObject(gfxObj, false);\r\n if (intersects.length === 0) {\r\n return null;\r\n }\r\n\r\n // find point closest to camera that doesn't get clipped by camera near plane or clipPlane (if it exists)\r\n const nearPlane = Math.min(camera.near, clipPlane);\r\n let i;\r\n let p = intersects[0];\r\n const v = new THREE.Vector3();\r\n for (i = 0; i < intersects.length; ++i) {\r\n p = intersects[i];\r\n v.copy(p.point);\r\n v.applyMatrix4(camera.matrixWorldInverse);\r\n if (v.z <= -nearPlane) {\r\n break;\r\n }\r\n }\r\n if (i === intersects.length) {\r\n return null;\r\n }\r\n\r\n // check that selected intersection point is not clipped by camera far plane or occluded by fog (if it exists)\r\n const farPlane = Math.min(camera.far, fogFarPlane);\r\n v.copy(p.point);\r\n v.applyMatrix4(camera.matrixWorldInverse);\r\n if (v.z <= -farPlane) {\r\n return null;\r\n }\r\n return p;\r\n};\r\n\r\nTHREE.Matrix4.prototype.extractScale = (function () {\r\n const _v = new THREE.Vector3();\r\n\r\n return function (scale) {\r\n if (scale === undefined) {\r\n logger.debug('extractScale(): new is too expensive operation to do it on-the-fly');\r\n scale = _v.clone();\r\n }\r\n\r\n const te = this.elements;\r\n scale.x = _v.set(te[0], te[1], te[2]).length();\r\n scale.y = _v.set(te[4], te[5], te[6]).length();\r\n scale.z = _v.set(te[8], te[9], te[10]).length();\r\n\r\n // if determine is negative, we need to invert one scale\r\n const det = this.determinant();\r\n if (det < 0) {\r\n scale.x = -scale.x;\r\n }\r\n return scale;\r\n };\r\n}());\r\n\r\nfunction _calcCylinderMatrix(posBegin, posEnd, radius) {\r\n const posCenter = posBegin.clone().lerp(posEnd, 0.5);\r\n const matScale = new THREE.Matrix4();\r\n matScale.makeScale(radius, posBegin.distanceTo(posEnd), radius);\r\n\r\n const matRotHalf = new THREE.Matrix4();\r\n matRotHalf.makeRotationX(Math.PI / 2);\r\n\r\n const matRotLook = new THREE.Matrix4();\r\n const vUp = new THREE.Vector3(0, 1, 0);\r\n matRotLook.lookAt(posCenter, posEnd, vUp);\r\n\r\n matRotLook.multiply(matRotHalf);\r\n matRotLook.multiply(matScale);\r\n matRotLook.setPosition(posCenter);\r\n return matRotLook;\r\n}\r\n\r\nfunction _calcChunkMatrix(eye, target, up, rad) {\r\n const matScale = new THREE.Matrix4();\r\n matScale.makeScale(rad.x, rad.y, 0);\r\n\r\n const matRotLook = new THREE.Matrix4();\r\n matRotLook.lookAt(eye, target, up);\r\n matRotLook.multiply(matScale);\r\n matRotLook.setPosition(eye);\r\n\r\n return matRotLook;\r\n}\r\n\r\nfunction _groupHasGeometryToRender(group) {\r\n let hasGeoms = false;\r\n group.traverse((node) => {\r\n if (node.hasOwnProperty('geometry') || node instanceof CSS2DObject) {\r\n hasGeoms = true;\r\n }\r\n });\r\n return hasGeoms;\r\n}\r\n\r\nfunction _buildDistorionMesh(widthSegments, heightSegements, coef) {\r\n // solve equation r_u = r_d * (1 + k * r_d^2)\r\n // for r_d using iterations\r\n // takes: r_u^2\r\n // returns: r_d / r_u factor that can be used to distort point coords\r\n function calcInverseBarrel(r2) {\r\n const epsilon = 1e-5;\r\n let prevR2 = 0.0;\r\n let curR2 = r2;\r\n let dr = 1.0;\r\n while (Math.abs(curR2 - prevR2) > epsilon) {\r\n dr = 1.0 + coef * curR2;\r\n prevR2 = curR2;\r\n curR2 = r2 / (dr * dr);\r\n }\r\n\r\n return 1.0 / dr;\r\n }\r\n\r\n const geo = new THREE.PlaneGeometry(2.0, 2.0, widthSegments, heightSegements);\r\n\r\n const pos = geo.getAttribute('position');\r\n for (let i = 0; i < pos.count; ++i) {\r\n const x = pos.array[3 * i];\r\n const y = pos.array[3 * i + 1];\r\n const c = calcInverseBarrel(x * x + y * y);\r\n pos.setXY(i, c * x, c * y);\r\n }\r\n\r\n return geo;\r\n}\r\n\r\nTHREE.BufferAttribute.prototype.copyAtList = function (attribute, indexList) {\r\n console.assert(\r\n this.itemSize === attribute.itemSize,\r\n 'DEBUG: BufferAttribute.copyAtList buffers have different item size.',\r\n );\r\n const { itemSize } = this;\r\n for (let i = 0, n = indexList.length; i < n; ++i) {\r\n for (let j = 0; j < itemSize; ++j) {\r\n this.array[i * itemSize + j] = attribute.array[indexList[i] * itemSize + j];\r\n }\r\n }\r\n return this;\r\n};\r\n\r\nfunction fillArray(array, value, startIndex, endIndex) {\r\n startIndex = (typeof startIndex !== 'undefined') ? startIndex : 0;\r\n endIndex = (typeof endIndex !== 'undefined') ? endIndex : array.length;\r\n for (let i = startIndex; i < endIndex; ++i) {\r\n array[i] = value;\r\n }\r\n}\r\n\r\n/** @param {THREE.Object3D} object - Parent object. */\r\nfunction removeChildren(object) {\r\n const { children } = object;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n child.parent = null;\r\n child.dispatchEvent({ type: 'removed' });\r\n }\r\n object.children = [];\r\n}\r\n\r\nfunction clearTree(object) {\r\n object.traverse((obj) => {\r\n if (obj instanceof THREE.Mesh || obj instanceof THREE.LineSegments || obj instanceof THREE.Line) {\r\n obj.geometry.dispose();\r\n }\r\n });\r\n removeChildren(object);\r\n}\r\n\r\nfunction destroyObject(object) {\r\n clearTree(object);\r\n if (object.parent) {\r\n object.parent.remove(object);\r\n } else {\r\n object.dispatchEvent({ type: 'removed' });\r\n }\r\n}\r\n\r\nfunction belongToSelectLayers(object) {\r\n for (let i = 0; i < SELECTION_LAYERS.length; i++) {\r\n if (((object.layers.mask >> SELECTION_LAYERS[i]) & 1) === 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction processObjRenderOrder(root, idMaterial) {\r\n // set renderOrder to 0 for Backdrop and to 1 in other cases to render Backdrop earlier all other materials\r\n const renderOrder = +(idMaterial !== 'BA');\r\n root.traverse((object) => {\r\n if (object.isGroup) {\r\n object.renderOrder = renderOrder;\r\n }\r\n });\r\n}\r\n\r\nfunction applySelectionMaterial(geo) {\r\n geo.traverse((node) => {\r\n if ('material' in node) {\r\n node.material = node.material.clone(true);\r\n // using z-offset to magically fix selection rendering artifact (on z-sprites)\r\n node.material.setValues({\r\n depthFunc: THREE.LessEqualDepth,\r\n overrideColor: true,\r\n fog: false,\r\n lights: false,\r\n shadowmap: false,\r\n });\r\n node.material.setUberOptions({ fixedColor: new THREE.Color(0xFFFF00), zOffset: -1e-6 });\r\n }\r\n });\r\n}\r\n\r\nfunction getMiddlePoint(point1, point2, optionalTarget) {\r\n const result = optionalTarget || new THREE.Vector3();\r\n\r\n result.set(0, 0, 0);\r\n result.addScaledVector(point1, 0.5);\r\n result.addScaledVector(point2, 0.5);\r\n\r\n return result;\r\n}\r\n\r\n// Monkey-patch for \"InstancedBufferGeometry.instanceCount becomes undefined after copy()\"\r\n// https://github.com/mrdoob/three.js/issues/22151\r\nconst _oldInstancedBufferGeometryCopy = THREE.InstancedBufferGeometry.prototype.copy;\r\n\r\nTHREE.InstancedBufferGeometry.prototype.copy = function (source) {\r\n _oldInstancedBufferGeometryCopy.call(this, source);\r\n if (this.instanceCount === undefined) {\r\n this.instanceCount = Infinity;\r\n }\r\n};\r\n\r\nexport default {\r\n calcCylinderMatrix: _calcCylinderMatrix,\r\n calcChunkMatrix: _calcChunkMatrix,\r\n groupHasGeometryToRender: _groupHasGeometryToRender,\r\n buildDistorionMesh: _buildDistorionMesh,\r\n RCGroup,\r\n fillArray,\r\n clearTree,\r\n destroyObject,\r\n belongToSelectLayers,\r\n processObjRenderOrder,\r\n applySelectionMaterial,\r\n getMiddlePoint,\r\n LAYERS,\r\n};\r\n","import * as THREE from 'three';\r\nimport gfxutils from './gfx/gfxutils';\r\n\r\nconst _defaultBoundaries = {\r\n boundingBox: new THREE.Box3(new THREE.Vector3(-1, -1, -1), new THREE.Vector3(1, 1, 1)),\r\n boundingSphere: new THREE.Sphere(new THREE.Vector3(0, 0, 0), 1),\r\n};\r\n\r\nclass Visual extends gfxutils.RCGroup {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this.name = name;\r\n this._dataSource = dataSource;\r\n }\r\n\r\n release() {\r\n if (this.parent) {\r\n this.parent.remove(this);\r\n }\r\n }\r\n\r\n getDataSource() {\r\n return this._dataSource;\r\n }\r\n\r\n getBoundaries() {\r\n return _defaultBoundaries;\r\n }\r\n}\r\n\r\nexport default Visual;\r\n","function _ensureArray(x) {\r\n if (x === null || x === undefined || Array.isArray(x)) {\r\n return x;\r\n }\r\n return [x];\r\n}\r\n\r\n/** An indexed list of objects or classes. */\r\nclass EntityList {\r\n /**\r\n * Create a list of objects.\r\n * The objects can be indexed by one or more properties for the later retrieval.\r\n *\r\n * @param {!Array=} entities A list of objects to automatically register at creation time.\r\n * @param {!Array=} indices A list of property names to use for case-insensitive indexing.\r\n * By default, a single `.id` property is used.\r\n * @see EntityList#register\r\n */\r\n constructor(entities = [], indices = ['id']) {\r\n this._list = [];\r\n this._dict = {};\r\n this._indices = [...indices];\r\n this._indices.forEach((index) => {\r\n this._dict[index] = {};\r\n });\r\n\r\n entities.forEach((entity) => this.register(entity));\r\n }\r\n\r\n /**\r\n * Add a value to the end of a list.\r\n * The list will contain only one copy of the value.\r\n *\r\n * @param {!Array} list An array.\r\n * @param {*} value A value to add.\r\n * @see EntityList.unregisterFromList\r\n * @see EntityList.registerInDict\r\n */\r\n static registerInList(list, value) {\r\n if (!list.includes(value)) {\r\n list.push(value);\r\n }\r\n }\r\n\r\n /**\r\n * Remove a value from a list if it is there.\r\n *\r\n * @param {!Array} list An array.\r\n * @param {*} value A value to remove.\r\n * @see EntityList.registerInList\r\n */\r\n static unregisterFromList(list, value) {\r\n const pos = list.indexOf(value);\r\n if (pos !== -1) {\r\n list.splice(pos, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Add a value to a dictionary.\r\n * The value may be stored under multiple different keys (aliases).\r\n * There might be multiples values stored under the same key.\r\n *\r\n * @param {!Object} dict A dictionary.\r\n * @param {!Array} keys An array of keys.\r\n * @param {*} value A value to add.\r\n * @see EntityList.unregisterFromDict\r\n * @see EntityList.registerInList\r\n */\r\n static registerInDict(dict, keys, value) {\r\n keys.forEach((key) => {\r\n key = key.toLowerCase();\r\n const list = dict[key] = dict[key] || [];\r\n if (!list.includes(value)) {\r\n list.push(value);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove a value from a dictionary.\r\n * The value may be stored under multiple different keys (aliases).\r\n * There might be multiples values stored under the same key.\r\n *\r\n * @param {!Object} dict A dictionary.\r\n * @param {!Array} keys An array of keys.\r\n * @param {*} value A value to add.\r\n * @see EntityList.registerInDict\r\n */\r\n static unregisterFromDict(dict, keys, value) {\r\n keys.forEach((key) => {\r\n key = key.toLowerCase();\r\n const list = dict[key];\r\n if (list) {\r\n const pos = list.indexOf(value);\r\n if (pos !== -1) {\r\n list.splice(pos, 1);\r\n }\r\n if (list.length === 0) {\r\n delete dict[key];\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Add an entity to this list.\r\n *\r\n * @param {!Object} entity An object or a class to register. The object must include all\r\n * properties specified as indices on construction.\r\n * @see EntityList#unregister\r\n */\r\n register(entity) {\r\n EntityList.registerInList(this._list, entity);\r\n this._indices.forEach((index) => {\r\n EntityList.registerInDict(this._dict[index], _ensureArray(entity[index]), entity);\r\n });\r\n }\r\n\r\n /**\r\n * Remove an entity from this list.\r\n *\r\n * @param {!Object} entity An object or a class to unregister. The object may be\r\n * missing from the list but it must include all properties specified as indices\r\n * on construction.\r\n * @see EntityList#register\r\n */\r\n unregister(entity) {\r\n EntityList.unregisterFromList(this._list, entity);\r\n this._indices.forEach((index) => {\r\n EntityList.unregisterFromDict(this._dict[index], _ensureArray(entity[index]), entity);\r\n });\r\n }\r\n\r\n /**\r\n * An ordered list of all registered entities.\r\n * It is a read-only copy, use {@link EntityList#register} and {@link EntityList#unregister}\r\n * to modify it.\r\n *\r\n * @type {!Array}\r\n */\r\n get all() {\r\n return [...this._list];\r\n }\r\n\r\n /**\r\n * The first registered entity.\r\n * Use it if you do not care which entity you are referring to.\r\n *\r\n * @type {Object=}\r\n */\r\n get first() {\r\n return this._list[0];\r\n }\r\n\r\n /**\r\n * Retrieve a list of keys for the index.\r\n *\r\n * @param {string=} index One of the indices specified during the list construction. If omitted,\r\n * the first of the indices is used.\r\n * @returns {!Array} An unordered list of keys in the index, i.e. particular property\r\n * values for all registered entities.\r\n */\r\n keys(index) {\r\n return Object.keys(this._dict[index || this._indices[0]]);\r\n }\r\n\r\n /**\r\n * Retrieve an entity by its key.\r\n *\r\n * @param {string} key A case-insensitive property value to look-up.\r\n * @param {string=} index One of the indices specified during the list construction. If omitted,\r\n * the first of the indices is used.\r\n * @returns {Object=} An object registered in the index under the key. If there are multiple\r\n * objects under the same key, the first one is returned.\r\n */\r\n get(key, index) {\r\n const dict = this._dict[index || this._indices[0]];\r\n if (dict) {\r\n const values = dict[key && key.toLowerCase()];\r\n return values && values.length > 0 ? values[0] : undefined;\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nexport default EntityList;\r\n","import settings from '../settings';\r\nimport logger from './logger';\r\n\r\nfunction makeContextDependent(prototype) {\r\n Object.defineProperties(prototype, {\r\n logger: {\r\n get() {\r\n return this.context && this.context.logger ? this.context.logger : logger;\r\n },\r\n },\r\n settings: {\r\n get() {\r\n return this.context && this.context.settings ? this.context.settings : settings;\r\n },\r\n },\r\n });\r\n}\r\n\r\nexport default makeContextDependent;\r\n","import * as THREE from 'three';\r\n\r\nclass CollisionSphere {\r\n constructor(position, radius) {\r\n this._position = position;\r\n this._radius = radius;\r\n }\r\n\r\n static _sphere = new THREE.Sphere();\r\n\r\n raycast(raycaster) {\r\n const sphere = CollisionSphere._sphere;\r\n sphere.set(this._position, this._radius);\r\n\r\n const p = new THREE.Vector3();\r\n if (raycaster.ray.intersectSphere(sphere, p)) {\r\n return {\r\n distance: raycaster.ray.origin.distanceTo(p),\r\n point: p,\r\n };\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nconst SphereCollisionGeo = (base) => class extends base {\r\n constructor(count, ...args) {\r\n super(...args);\r\n this._objects = new Array(count);\r\n this.boundingSphere = null;\r\n this.boundingBox = null;\r\n }\r\n\r\n setSphere(idx, position, radius) {\r\n this._objects[idx] = new CollisionSphere(position, radius);\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n // TODO raycast with bounding sphere? How to deal with updates?\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const inters = this._objects[i].raycast(raycaster);\r\n if (inters) {\r\n inters.chunkIdx = i;\r\n intersects.push(inters);\r\n }\r\n }\r\n }\r\n\r\n computeBoundingBox() {\r\n const objects = this._objects;\r\n let { boundingBox } = this;\r\n if (boundingBox === null) {\r\n this.boundingBox = boundingBox = new THREE.Box3();\r\n }\r\n boundingBox.makeEmpty();\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n boundingBox.expandByPoint(objects[i]._position);\r\n }\r\n }\r\n\r\n computeBoundingSphere() {\r\n this.computeBoundingBox();\r\n const objects = this._objects;\r\n const { boundingBox } = this;\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n const pos = objects[i]._position;\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n if (this.boundingSphere === null) {\r\n this.boundingSphere = new THREE.Sphere();\r\n }\r\n this.boundingSphere.set(center, Math.sqrt(radiusSquared));\r\n }\r\n};\r\nexport default SphereCollisionGeo;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst tmpColor = new THREE.Color();\r\n\r\nconst OFFSET_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst { copySubArrays } = utils;\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\nclass InstancedSpheresGeometry extends SphereCollisionGeo(THREE.InstancedBufferGeometry) {\r\n constructor(spheresCount, sphereComplexity, useZSprites) {\r\n super(spheresCount);\r\n this._sphGeometry = useZSprites ? new THREE.PlaneGeometry(2, 2, 1, 1)\r\n : new THREE.SphereGeometry(1, sphereComplexity * 2, sphereComplexity, 0, Math.PI * 2, 0, Math.PI);\r\n this._init(spheresCount, this._sphGeometry);\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n setArrayXYZW(this._offsets, itemIdx * OFFSET_SIZE, itemPos.x, itemPos.y, itemPos.z, itemRad);\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n }\r\n\r\n setColor(itemIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n setArrayXYZ(this._colors, itemIdx * COLOR_SIZE, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('offset').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n alphaArr[chunkIndices[i]] = value;\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const geom = new THREE.InstancedBufferGeometry();\r\n this._init.call(geom, instanceCount, this._sphGeometry);\r\n\r\n copySubArrays(this._offsets, geom._offsets, chunkIndices, OFFSET_SIZE);\r\n copySubArrays(this._colors, geom._colors, chunkIndices, COLOR_SIZE);\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n _init(spheresCount, sphereGeo) {\r\n this.copy(sphereGeo);\r\n\r\n this._offsets = utils.allocateTyped(Float32Array, spheresCount * OFFSET_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, spheresCount * COLOR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, spheresCount);\r\n _.fill(alpha, 1.0);\r\n\r\n this.setAttribute('offset', new THREE.InstancedBufferAttribute(this._offsets, OFFSET_SIZE, false, 1));\r\n this.setAttribute('color', new THREE.InstancedBufferAttribute(this._colors, COLOR_SIZE, false, 1));\r\n this.setAttribute('alphaColor', new THREE.InstancedBufferAttribute(alpha, 1, false, 1));\r\n }\r\n}\r\nexport default InstancedSpheresGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_IDC_16BIT = 65535;\r\nconst VEC_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\n\r\n/**\r\n * This class represents geometry which consists of separate chunks.\r\n * Each chunk has same index and similar geometry with equal points and faces count.\r\n * Each chunk has by default only one color.\r\n * @constructor\r\n */\r\n\r\nclass ChunkedObjectsGeometry extends THREE.BufferGeometry {\r\n constructor(chunkGeo, chunksCount) {\r\n super();\r\n\r\n if (this.constructor === ChunkedObjectsGeometry) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n\r\n this._chunkGeo = chunkGeo;\r\n\r\n this._init(chunkGeo, chunksCount);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('position').needsUpdate = true;\r\n this.getAttribute('normal').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n const colors = this._colors;\r\n const chunkSize = this._chunkSize;\r\n for (let i = chunkIdx * chunkSize, end = i + chunkSize; i < end; ++i) {\r\n const idx = i * VEC_SIZE;\r\n colors[idx] = tmpColor.r;\r\n colors[idx + 1] = tmpColor.g;\r\n colors[idx + 2] = tmpColor.b;\r\n }\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n const chunkSize = this._chunkSize;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const left = chunkIndices[i] * chunkSize;\r\n _.fill(alphaArr, value, left, left + chunkSize);\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const inters = [];\r\n // use THREE.Mesh raycasting interface for the Geometry. The Mesh is\r\n // created with existed geometry and default material, so it doesn't slowdown.\r\n const mesh = new THREE.Mesh();\r\n mesh.geometry = this;\r\n mesh.raycast(raycaster, inters);\r\n\r\n const facesPerChunk = this._chunkGeo.index.count / 3;\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('faceIndex')) {\r\n continue;\r\n }\r\n inters[i].chunkIdx = Math.floor(inters[i].faceIndex / facesPerChunk);\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const geom = new THREE.BufferGeometry();\r\n this._init.call(geom, this._chunkGeo, instanceCount);\r\n\r\n const srcPos = this._positions;\r\n const srcNorm = this._normals;\r\n const srcColor = this._colors;\r\n\r\n const dstPos = geom._positions;\r\n const dstNorm = geom._normals;\r\n const dstColor = geom._colors;\r\n\r\n const chunkSize = this._chunkSize * VEC_SIZE;\r\n\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const dstPtOffset = i * chunkSize;\r\n const ptIdxBegin = chunkIndices[i] * chunkSize;\r\n const ptIdxEnd = ptIdxBegin + chunkSize;\r\n dstPos.set(srcPos.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n dstNorm.set(srcNorm.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n dstColor.set(srcColor.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n }\r\n\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n _init(chunkGeo, chunksCount) {\r\n const chunkSize = this._chunkSize = chunkGeo.attributes.position.count;\r\n const chunkIndex = chunkGeo.index.array;\r\n const chunkIndexSize = chunkIndex.length;\r\n const pointsCount = this._chunkSize * chunksCount;\r\n const use32bitIndex = pointsCount > MAX_IDC_16BIT;\r\n const indexSize = chunkIndexSize * chunksCount;\r\n const index = this._index = utils.allocateTyped(use32bitIndex ? Uint32Array : Uint16Array, indexSize);\r\n this._positions = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n this._normals = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, pointsCount);\r\n _.fill(alpha, 1.0);\r\n\r\n for (let i = 0; i < chunksCount; ++i) {\r\n const offset = i * chunkIndexSize;\r\n const posOffset = i * chunkSize;\r\n index.set(chunkIndex, offset);\r\n for (let j = 0; j < chunkIndexSize; ++j) {\r\n index[offset + j] += posOffset;\r\n }\r\n }\r\n\r\n this.setIndex(new THREE.BufferAttribute(this._index, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(this._positions, VEC_SIZE));\r\n this.setAttribute('normal', new THREE.BufferAttribute(this._normals, VEC_SIZE));\r\n this.setAttribute('color', new THREE.BufferAttribute(this._colors, VEC_SIZE));\r\n this.setAttribute('alphaColor', new THREE.BufferAttribute(alpha, 1));\r\n }\r\n}\r\nexport default ChunkedObjectsGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst VEC_SIZE = 3;\r\n\r\nclass SimpleSpheresGeometry extends SphereCollisionGeo(ChunkedObjectsGeometry) {\r\n constructor(spheresCount, sphereComplexity) {\r\n const sphGeometry = new THREE.SphereGeometry(\r\n 1,\r\n sphereComplexity * 2,\r\n sphereComplexity,\r\n 0,\r\n Math.PI * 2,\r\n 0,\r\n Math.PI,\r\n );\r\n super(spheresCount, sphGeometry, spheresCount);\r\n\r\n const normals = this._normals;\r\n const geoNormals = sphGeometry.attributes.normal.array;\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._tmpPositions = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n for (let i = 0; i < spheresCount; ++i) {\r\n normals.set(geoNormals, chunkSize * VEC_SIZE * i);\r\n }\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n const tmpPos = this._tmpPositions;\r\n const chunkSize = this._chunkSize;\r\n const geoPos = this._chunkPos;\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n const idx = i * 3;\r\n tmpPos[idx] = itemPos.x + geoPos[idx] * itemRad;\r\n tmpPos[idx + 1] = itemPos.y + geoPos[idx + 1] * itemRad;\r\n tmpPos[idx + 2] = itemPos.z + geoPos[idx + 2] * itemRad;\r\n }\r\n\r\n this._positions.set(tmpPos, chunkSize * itemIdx * VEC_SIZE);\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n }\r\n}\r\nexport default SimpleSpheresGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst centerPos = new THREE.Vector3();\r\nconst tmpVector = new THREE.Vector3();\r\nconst normMtx = new THREE.Matrix3();\r\n\r\nclass Simple2CCylindersGeometry extends ChunkedObjectsGeometry {\r\n constructor(instanceCount, polyComplexity) {\r\n const cylGeometry = new THREE.CylinderGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, true);\r\n super(cylGeometry, 2 * instanceCount);\r\n\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._chunkNorms = this._chunkGeo.attributes.normal.array;\r\n this._tmpVector = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const chunkSize = this._chunkSize;\r\n const firstOffset = chunkSize * 2 * itemIdx * VEC_SIZE;\r\n const secondOffset = firstOffset + chunkSize * VEC_SIZE;\r\n\r\n const tmpArray = this._tmpVector;\r\n const geoPos = this._chunkPos;\r\n const geoNorm = this._chunkNorms;\r\n\r\n centerPos.lerpVectors(botPos, topPos, 0.5);\r\n const mtx1 = gfxutils.calcCylinderMatrix(botPos, centerPos, itemRad);\r\n normMtx.getNormalMatrix(mtx1);\r\n\r\n let idx;\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoPos, idx);\r\n tmpVector.applyMatrix4(mtx1);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._positions.set(tmpArray, firstOffset);\r\n\r\n // now shift center to get another part of the cylinder\r\n centerPos.sub(botPos);\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpArray[idx] += centerPos.x;\r\n tmpArray[idx + 1] += centerPos.y;\r\n tmpArray[idx + 2] += centerPos.z;\r\n }\r\n this._positions.set(tmpArray, secondOffset);\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoNorm, idx);\r\n tmpVector.applyMatrix3(normMtx);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._normals.set(tmpArray, firstOffset);\r\n this._normals.set(tmpArray, secondOffset);\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const first = 2 * itemIdx;\r\n super.setColor(first, colorVal1);\r\n\r\n const second = first + 1;\r\n super.setColor(second, colorVal2);\r\n }\r\n}\r\n\r\nexport default Simple2CCylindersGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_POINTS_COUNT_16BIT = 65536;\r\nconst PTS_PER_TRIANGLE = 3;\r\n\r\nclass CylinderBufferGeometry extends THREE.BufferGeometry {\r\n constructor(\r\n radiusTop,\r\n radiusBottom,\r\n height,\r\n radialSegments,\r\n heightSegments,\r\n openEnded,\r\n ) {\r\n super();\r\n\r\n const thetaStart = 0;\r\n const thetaLength = 2 * Math.PI;\r\n\r\n this.type = 'CylinderBufferGeometry';\r\n\r\n this.parameters = {\r\n radiusTop,\r\n radiusBottom,\r\n height,\r\n radialSegments,\r\n heightSegments,\r\n openEnded,\r\n };\r\n\r\n const hasTop = openEnded === false && radiusTop > 0;\r\n const hasBottom = openEnded === false && radiusBottom > 0;\r\n const vertexCount = (heightSegments + 1) * radialSegments\r\n + hasTop * (radialSegments + 1)\r\n + hasBottom * (radialSegments + 1);\r\n const facesCount = (2 * heightSegments + hasTop + hasBottom) * radialSegments;\r\n\r\n const heightHalf = height / 2;\r\n\r\n const positions = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3);\r\n const normals = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3);\r\n const indices = new THREE.Uint16BufferAttribute(utils.allocateTyped(Uint16Array, facesCount * PTS_PER_TRIANGLE), 1);\r\n\r\n const uvs = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 2), 2);\r\n console.assert(vertexCount < MAX_POINTS_COUNT_16BIT, 'DEBUG: Cylinder Geometry has too many vertices (65536 max).');\r\n\r\n let currVtxIdx = 0;\r\n let currFaceIdx = 0;\r\n const tanTheta = -(radiusBottom - radiusTop) / height;\r\n\r\n // setup cylinder data\r\n for (let y = 0; y <= heightSegments; y++) {\r\n // faces\r\n if (y !== heightSegments) {\r\n for (let i = 0; i < radialSegments; i++) {\r\n const v1 = currVtxIdx + i;\r\n const v2 = currVtxIdx + radialSegments + i;\r\n const v3 = currVtxIdx + radialSegments + ((i + 1) % radialSegments);\r\n const v4 = currVtxIdx + ((i + 1) % radialSegments);\r\n\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, v1, v4, v2);\r\n currFaceIdx++;\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, v2, v4, v3);\r\n currFaceIdx++;\r\n }\r\n }\r\n\r\n // vertices\r\n const v = y / heightSegments;\r\n const radius = v * (radiusBottom - radiusTop) + radiusTop;\r\n\r\n for (let x = 0; x < radialSegments; x++) {\r\n const u = x / radialSegments;\r\n\r\n const vx = radius * Math.sin(u * thetaLength + thetaStart);\r\n const vy = v * height - heightHalf;\r\n const vz = radius * Math.cos(u * thetaLength + thetaStart);\r\n\r\n const normal = new THREE.Vector3(\r\n vx,\r\n Math.sqrt(vx * vx + vz * vz) * tanTheta,\r\n vz,\r\n ).normalize();\r\n\r\n positions.setXYZ(currVtxIdx, vx, vy, vz);\r\n normals.setXYZ(currVtxIdx, normal.x, normal.y, normal.z);\r\n uvs.setXY(currVtxIdx, u, v);\r\n ++currVtxIdx;\r\n }\r\n }\r\n\r\n // top cap\r\n if (hasTop) {\r\n const startTIdx = currVtxIdx;\r\n const lastIdx = currVtxIdx + radialSegments;\r\n for (let fTIdx = 0; fTIdx < radialSegments; ++fTIdx) {\r\n const currSrcIdx = currVtxIdx - radialSegments;\r\n positions.setXYZ(\r\n currVtxIdx,\r\n positions.getX(currSrcIdx),\r\n positions.getY(currSrcIdx),\r\n positions.getZ(currSrcIdx),\r\n );\r\n normals.setXYZ(currVtxIdx, 0, 1, 0);\r\n uvs.setXY(currVtxIdx, 1, 1);\r\n\r\n const nextTVtx = startTIdx + ((fTIdx + 1) % radialSegments);\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, currVtxIdx, nextTVtx, lastIdx);\r\n currFaceIdx++;\r\n currVtxIdx++;\r\n }\r\n\r\n positions.setXYZ(currVtxIdx, 0, heightHalf, 0);\r\n normals.setXYZ(currVtxIdx, 0, 1, 0);\r\n uvs.setXY(currVtxIdx, 1, 1);\r\n ++currVtxIdx;\r\n }\r\n\r\n // bottom cap\r\n if (hasBottom) {\r\n const startBIdx = currVtxIdx;\r\n const lastBIdx = currVtxIdx + radialSegments;\r\n for (let fBIdx = 0; fBIdx < radialSegments; ++fBIdx) {\r\n const currSrcBIdx = fBIdx;\r\n positions.setXYZ(\r\n currVtxIdx,\r\n positions.getX(currSrcBIdx),\r\n positions.getY(currSrcBIdx),\r\n positions.getZ(currSrcBIdx),\r\n );\r\n normals.setXYZ(currVtxIdx, 0, -1, 0);\r\n uvs.setXY(currVtxIdx, 0, 0);\r\n\r\n const nextBVtx = startBIdx + ((fBIdx + 1) % radialSegments);\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, nextBVtx, currVtxIdx, lastBIdx);\r\n currFaceIdx++;\r\n currVtxIdx++;\r\n }\r\n\r\n positions.setXYZ(currVtxIdx, 0, -heightHalf, 0);\r\n normals.setXYZ(currVtxIdx, 0, -1, 0);\r\n uvs.setXY(currVtxIdx, 0, 0);\r\n }\r\n\r\n this.setIndex(indices);\r\n this.setAttribute('position', positions);\r\n this.setAttribute('normal', normals);\r\n this.setAttribute('uv', uvs);\r\n }\r\n\r\n clone() {\r\n const { parameters } = this;\r\n\r\n return new CylinderBufferGeometry(\r\n parameters.radiusTop,\r\n parameters.radiusBottom,\r\n parameters.height,\r\n parameters.radialSegments,\r\n parameters.heightSegments,\r\n parameters.openEnded,\r\n );\r\n }\r\n}\r\n\r\nexport default CylinderBufferGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\nimport CylinderBufferGeometry from './CylinderBufferGeometry';\r\n\r\nconst tmpColor = new THREE.Color();\r\nconst invMatrix = new THREE.Matrix4();\r\n\r\nconst OFFSET_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst { copySubArrays } = utils;\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\n\r\nfunction sortNumber(a, b) {\r\n return a - b;\r\n}\r\n\r\nfunction _prepareCylinderInfo(chunkIndices) {\r\n chunkIndices.sort(sortNumber);\r\n const chunksIdx = [];\r\n const cylinderInfo = [];\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const val = chunkIndices[i];\r\n const even = (val | 0) % 2 === 0;\r\n const newPar = {\r\n first: false,\r\n second: false,\r\n };\r\n if (even) {\r\n newPar.first = true;\r\n newPar.second = i + 1 < n && chunkIndices[i + 1] === chunkIndices[i] + 1;\r\n if (newPar.second) {\r\n ++i;\r\n }\r\n } else {\r\n newPar.second = true;\r\n }\r\n chunksIdx.push(Math.floor(val / 2));\r\n cylinderInfo.push(newPar);\r\n }\r\n return { indices: chunksIdx, cylinderInfo };\r\n}\r\n\r\nfunction _assignOpacity(cylinderInfo, color1, color2) {\r\n for (let i = 0, n = cylinderInfo.length; i < n; ++i) {\r\n const info = cylinderInfo[i];\r\n if (!info.first) {\r\n color1[COLOR_SIZE * i] = -0.5;\r\n }\r\n if (!info.second) {\r\n color2[COLOR_SIZE * i] = -0.5;\r\n }\r\n }\r\n}\r\nclass Instanced2CCylindersGeometry extends THREE.InstancedBufferGeometry {\r\n constructor(instanceCount, polyComplexity, useZSprites, openEnded) {\r\n super();\r\n this._useZSprites = useZSprites;\r\n this._cylGeometry = useZSprites ? new THREE.PlaneGeometry(2, 2, 1, 1)\r\n : new CylinderBufferGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, openEnded);\r\n this._init(instanceCount, this._cylGeometry, this._useZSprites);\r\n\r\n this._collisionGeo = new Simple2CCylindersGeometry(instanceCount, 3);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const matrix = gfxutils.calcCylinderMatrix(botPos, topPos, itemRad);\r\n let me = matrix.elements;\r\n const mtxOffset = itemIdx * OFFSET_SIZE;\r\n\r\n this._collisionGeo.setItem(itemIdx, botPos, topPos, itemRad);\r\n setArrayXYZW(this._matVector1, mtxOffset, me[0], me[4], me[8], me[12]);\r\n setArrayXYZW(this._matVector2, mtxOffset, me[1], me[5], me[9], me[13]);\r\n setArrayXYZW(this._matVector3, mtxOffset, me[2], me[6], me[10], me[14]);\r\n\r\n if (this._useZSprites) {\r\n invMatrix.copy(matrix).invert();\r\n me = invMatrix.elements;\r\n setArrayXYZW(this._invmatVector1, mtxOffset, me[0], me[4], me[8], me[12]);\r\n setArrayXYZW(this._invmatVector2, mtxOffset, me[1], me[5], me[9], me[13]);\r\n setArrayXYZW(this._invmatVector3, mtxOffset, me[2], me[6], me[10], me[14]);\r\n }\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const colorIdx = itemIdx * COLOR_SIZE;\r\n tmpColor.set(colorVal1);\r\n setArrayXYZ(this._color1, colorIdx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n tmpColor.set(colorVal2);\r\n setArrayXYZ(this._color2, colorIdx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n computeBoundingSphere() {\r\n this._collisionGeo.computeBoundingSphere();\r\n this.boundingSphere = this._collisionGeo.boundingSphere;\r\n }\r\n\r\n computeBoundingBox() {\r\n this._collisionGeo.computeBoundingBox();\r\n this.boundingBox = this._collisionGeo.boundingBox;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('matVector1').needsUpdate = true;\r\n this.getAttribute('matVector2').needsUpdate = true;\r\n this.getAttribute('matVector3').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n this.getAttribute('color2').needsUpdate = true;\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n if (this._useZSprites) {\r\n this.getAttribute('invmatVector1').needsUpdate = true;\r\n this.getAttribute('invmatVector2').needsUpdate = true;\r\n this.getAttribute('invmatVector3').needsUpdate = true;\r\n }\r\n\r\n this._collisionGeo.finishUpdate();\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n alphaArr[Math.floor(chunkIndices[i] / 2)] = value;\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const info = _prepareCylinderInfo(chunkIndices);\r\n const cylinderIndices = info.indices;\r\n const instanceCount = cylinderIndices.length;\r\n const geom = new THREE.InstancedBufferGeometry();\r\n this._init.call(geom, instanceCount, this._cylGeometry, this._useZSprites);\r\n\r\n copySubArrays(this._matVector1, geom._matVector1, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._matVector2, geom._matVector2, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._matVector3, geom._matVector3, cylinderIndices, OFFSET_SIZE);\r\n\r\n if (this._useZSprites) {\r\n copySubArrays(this._invmatVector1, geom._invmatVector1, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._invmatVector2, geom._invmatVector2, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._invmatVector3, geom._invmatVector3, cylinderIndices, OFFSET_SIZE);\r\n }\r\n\r\n copySubArrays(this._color1, geom._color1, cylinderIndices, COLOR_SIZE);\r\n copySubArrays(this._color2, geom._color2, cylinderIndices, COLOR_SIZE);\r\n _assignOpacity(info.cylinderInfo, geom._color1, geom._color2);\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n getGeoParams() {\r\n return this._cylGeometry.parameters;\r\n }\r\n\r\n _init(instanceCount, cylinderGeo, useZSprites) {\r\n this.copy(cylinderGeo);\r\n this._matVector1 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._matVector2 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._matVector3 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._color1 = utils.allocateTyped(Float32Array, instanceCount * COLOR_SIZE);\r\n this._color2 = utils.allocateTyped(Float32Array, instanceCount * COLOR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, instanceCount);\r\n _.fill(alpha, 1.0);\r\n\r\n this.setAttribute('matVector1', new THREE.InstancedBufferAttribute(this._matVector1, OFFSET_SIZE, false, 1));\r\n this.setAttribute('matVector2', new THREE.InstancedBufferAttribute(this._matVector2, OFFSET_SIZE, false, 1));\r\n this.setAttribute('matVector3', new THREE.InstancedBufferAttribute(this._matVector3, OFFSET_SIZE, false, 1));\r\n this.setAttribute('color', new THREE.InstancedBufferAttribute(this._color1, COLOR_SIZE, false, 1));\r\n this.setAttribute('color2', new THREE.InstancedBufferAttribute(this._color2, COLOR_SIZE, false, 1));\r\n\r\n this.setAttribute('alphaColor', new THREE.InstancedBufferAttribute(this._alpha, 1, false, 1));\r\n\r\n if (useZSprites) {\r\n this._invmatVector1 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._invmatVector2 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._invmatVector3 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n\r\n this.setAttribute(\r\n 'invmatVector1',\r\n new THREE.InstancedBufferAttribute(this._invmatVector1, OFFSET_SIZE, false, 1),\r\n );\r\n this.setAttribute(\r\n 'invmatVector2',\r\n new THREE.InstancedBufferAttribute(this._invmatVector2, OFFSET_SIZE, false, 1),\r\n );\r\n this.setAttribute(\r\n 'invmatVector3',\r\n new THREE.InstancedBufferAttribute(this._invmatVector3, OFFSET_SIZE, false, 1),\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport default Instanced2CCylindersGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst TRI_SIZE = 3;\r\nconst tmpPrev = new THREE.Vector3();\r\nconst tmpNext = new THREE.Vector3();\r\nconst tmpRes = new THREE.Vector3();\r\nconst simpleNormal = new THREE.Vector3(1.0, 0.0, 0.0);\r\nconst normalOnCut = new THREE.Vector3();\r\nconst nearRingPt = new THREE.Vector3();\r\n\r\nfunction _createExtrudedChunkGeometry(shape, ringsCount) {\r\n const geo = new THREE.BufferGeometry();\r\n const ptsCount = shape.length;\r\n const totalPts = ptsCount * ringsCount;\r\n const type = totalPts <= 65536 ? Uint16Array : Uint32Array;\r\n const facesPerChunk = (ringsCount - 1) * ptsCount * 2;\r\n const indices = new THREE.BufferAttribute(utils.allocateTyped(type, facesPerChunk * TRI_SIZE), 1);\r\n\r\n let currVtxIdx = 0;\r\n let currFaceIdx = 0;\r\n for (let y = 0; y < ringsCount; y++) {\r\n // faces\r\n if (y !== ringsCount - 1) {\r\n for (let i = 0; i < ptsCount; i++) {\r\n const v1 = currVtxIdx + i;\r\n const v2 = currVtxIdx + ptsCount + i;\r\n const v3 = currVtxIdx + ptsCount + ((i + 1) % ptsCount);\r\n const v4 = currVtxIdx + ((i + 1) % ptsCount);\r\n\r\n indices.setXYZ(currFaceIdx * TRI_SIZE, v1, v4, v2);\r\n currFaceIdx++;\r\n indices.setXYZ(currFaceIdx * TRI_SIZE, v2, v4, v3);\r\n currFaceIdx++;\r\n }\r\n }\r\n\r\n currVtxIdx += ptsCount;\r\n }\r\n\r\n geo.setIndex(indices);\r\n const pos = utils.allocateTyped(Float32Array, totalPts * VEC_SIZE);\r\n geo.setAttribute('position', new THREE.BufferAttribute(pos, VEC_SIZE));\r\n\r\n geo._positions = shape;\r\n\r\n return geo;\r\n}\r\n\r\nclass ExtrudedObjectsGeometry extends ChunkedObjectsGeometry {\r\n constructor(shape, ringsCount, chunksCount) {\r\n const chunkGeo = _createExtrudedChunkGeometry(shape, ringsCount);\r\n super(chunkGeo, chunksCount);\r\n this._ringsCount = ringsCount;\r\n\r\n const tmpShape = this._tmpShape = [];\r\n for (let i = 0; i < shape.length; ++i) {\r\n tmpShape[i] = new THREE.Vector3();\r\n }\r\n }\r\n\r\n setItem(itemIdx, matrices, hasSlope = false, hasCut = false) {\r\n const ptsCount = this._chunkGeo._positions.length;\r\n const ringsCount = this._ringsCount;\r\n const chunkStartIdx = ptsCount * this._ringsCount * itemIdx * VEC_SIZE;\r\n\r\n this._setPoints(matrices, ptsCount, ringsCount, chunkStartIdx);\r\n\r\n if (hasSlope) {\r\n this._setSlopeNormals(ptsCount, ringsCount, chunkStartIdx);\r\n } else {\r\n this._setBaseNormals(ptsCount, ringsCount, chunkStartIdx);\r\n }\r\n\r\n if (hasCut) {\r\n this._addCut(ptsCount, ringsCount, chunkStartIdx);\r\n }\r\n }\r\n\r\n _setPoints(matrices, ptsCount, ringsCount, chunkStartIdx) {\r\n const tmpShape = this._tmpShape;\r\n const positions = this._positions;\r\n const shape = this._chunkGeo._positions;\r\n\r\n for (let i = 0, vtxIdx = chunkStartIdx; i < ringsCount; ++i) {\r\n const mtx = matrices[i];\r\n\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpShape[j].copy(shape[j]).applyMatrix4(mtx).toArray(positions, vtxIdx);\r\n }\r\n }\r\n }\r\n\r\n _setBaseNormals(ptsCount, ringsCount, chunkStartIdx) {\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n for (let i = 0, vtxIdx = chunkStartIdx; i < ringsCount; ++i, vtxIdx += nPtsInRing) {\r\n this._countNormalsInRing(ptsCount, vtxIdx, false);\r\n }\r\n }\r\n\r\n _setSlopeNormals(ptsCount, ringsCount, chunkStartIdx) {\r\n const normals = this._normals;\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n let vtxIdx = chunkStartIdx;\r\n // First ring\r\n // In all cases, besides cut, second ring is coincident to first. So values of first ring's normals doesn't\r\n // matter (In the cut case special handler will be applied later and will set them to correct values)\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n simpleNormal.toArray(normals, vtxIdx);\r\n }\r\n // second ring\r\n // If it isn't first Item we take normals' values from the last ring of the previous item (these rings are coincident)\r\n // else we count normals' values based on next ring information\r\n if (vtxIdx - 2 * nPtsInRing > 0) {\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpRes.fromArray(normals, vtxIdx - 2 * nPtsInRing).toArray(normals, vtxIdx);\r\n }\r\n } else {\r\n this._countNormalsInRing(ptsCount, vtxIdx, true, +nPtsInRing);\r\n vtxIdx += nPtsInRing;\r\n }\r\n // other rings\r\n // we count normals' values based on previous ring information\r\n for (let i = 2; i < ringsCount; ++i, vtxIdx += nPtsInRing) {\r\n this._countNormalsInRing(ptsCount, vtxIdx, true, -nPtsInRing);\r\n }\r\n }\r\n\r\n // Counting normals:\r\n // - Slope\r\n // Radius changes throught part => normals aren't parallel with the plane contains section points\r\n // normal = vTangentInSectionPlane x vToSuchPointInPrevSection (all vectors are scaled for being 1 in length)\r\n // - No slope\r\n // Radius doesn't change throught part => normals are parallel with the plane contains section points\r\n // normal = vToPrevPointInSection + vToNextPointInSection (all vectors are scaled for being 1 in length)\r\n _countNormalsInRing(ptsCount, vtxIdx, isSlope, shiftToExtraPt) {\r\n const tmpShape = this._tmpShape;\r\n const normals = this._normals;\r\n\r\n tmpShape[0].fromArray(this._positions, vtxIdx);\r\n tmpShape[ptsCount - 1].fromArray(this._positions, vtxIdx + (ptsCount - 1) * VEC_SIZE);\r\n\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n if (j < ptsCount - 1) {\r\n tmpShape[j + 1].fromArray(this._positions, vtxIdx + VEC_SIZE);\r\n }\r\n\r\n if (isSlope) {\r\n nearRingPt.fromArray(this._positions, vtxIdx + shiftToExtraPt);\r\n\r\n tmpPrev.subVectors(tmpShape[(j + ptsCount - 1) % ptsCount], tmpShape[(j + 1) % ptsCount]).normalize();\r\n tmpNext.subVectors(tmpShape[j], nearRingPt).normalize();\r\n tmpRes.crossVectors(tmpNext, tmpPrev).normalize().toArray(normals, vtxIdx);\r\n } else {\r\n tmpPrev.subVectors(tmpShape[j], tmpShape[(j + ptsCount - 1) % ptsCount]).normalize();\r\n tmpNext.subVectors(tmpShape[j], tmpShape[(j + 1) % ptsCount]).normalize();\r\n tmpRes.addVectors(tmpPrev, tmpNext).normalize().toArray(normals, vtxIdx);\r\n }\r\n }\r\n }\r\n\r\n _addCut(ptsCount, ringsCount, chunkStartIdx) {\r\n // Nothing to do if item is flat or only line\r\n if (ptsCount < 3 || ringsCount < 2) {\r\n return;\r\n }\r\n const positions = this._positions;\r\n const normals = this._normals;\r\n const tmpShape = this._tmpShape;\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n // Normal to the cut plane is equal to cross product of two vectors which are lying in it\r\n tmpShape[0].fromArray(positions, chunkStartIdx);\r\n tmpShape[1].fromArray(positions, chunkStartIdx + VEC_SIZE);\r\n tmpShape[2].fromArray(positions, chunkStartIdx + 2 * VEC_SIZE);\r\n\r\n tmpPrev.subVectors(tmpShape[1], tmpShape[0]).normalize();\r\n tmpNext.subVectors(tmpShape[1], tmpShape[2]).normalize();\r\n normalOnCut.crossVectors(tmpPrev, tmpNext).normalize();\r\n\r\n let vtxIdx = chunkStartIdx;\r\n // First and second rings normals' values are equal to value of normal to the cutting plane\r\n for (let j = 0; j < ptsCount * 2; ++j, vtxIdx += VEC_SIZE) {\r\n normalOnCut.toArray(normals, vtxIdx);\r\n }\r\n if (ringsCount > 2) {\r\n // Third ring points are coincident to first ring points, but have different normals. It makes sharp angle near cut\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpRes.fromArray(positions, vtxIdx - nPtsInRing).toArray(positions, vtxIdx);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default ExtrudedObjectsGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_IDC_16BIT = 65535;\r\nconst VERTEX_PER_SEGMENT = 4;\r\nconst POS_SIZE = 4;\r\nconst DIR_SIZE = 3;\r\nconst COL_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\nconst direction = new THREE.Vector3();\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\n\r\nfunction getSubset(arr, startSegmentIdx, segmentsCount, elemSize) {\r\n const start = startSegmentIdx * VERTEX_PER_SEGMENT;\r\n const end = start + segmentsCount * VERTEX_PER_SEGMENT;\r\n return arr.subarray(start * elemSize, end * elemSize);\r\n}\r\n\r\n/**\r\n * This class represents lines geometry which consists of screen-aligned narrow quad of variable width.\r\n *\r\n * @constructor\r\n *\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n * collision geometry.\r\n */\r\n\r\nclass ThickLinesGeometry extends THREE.BufferGeometry {\r\n constructor(segmentsCount) {\r\n super();\r\n this._initVertices(segmentsCount);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('position').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n this.getAttribute('direction').needsUpdate = true;\r\n }\r\n\r\n setColor(segmentIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n let idx = segmentIdx * VERTEX_PER_SEGMENT * COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n setSegment(segmentIdx, pos1, pos2) {\r\n direction.subVectors(pos1, pos2);\r\n direction.normalize();\r\n const positions = this._positions;\r\n const directions = this._directions;\r\n let idx = segmentIdx * VERTEX_PER_SEGMENT * POS_SIZE;\r\n let dirIdx = segmentIdx * VERTEX_PER_SEGMENT * DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos1.x, pos1.y, pos1.z, 0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos1.x, pos1.y, pos1.z, -0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos2.x, pos2.y, pos2.z, 0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos2.x, pos2.y, pos2.z, -0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n }\r\n\r\n setOpacity(startSegIdx, endSegIdx, value) {\r\n const start = startSegIdx * VERTEX_PER_SEGMENT;\r\n const end = endSegIdx * VERTEX_PER_SEGMENT;\r\n _.fill(this.alpha, value, end, start);\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubsetSegments(startSegmentIdx, segmentsCount) {\r\n return [\r\n getSubset(this._positions, startSegmentIdx, segmentsCount, POS_SIZE),\r\n getSubset(this._directions, startSegmentIdx, segmentsCount, DIR_SIZE),\r\n ];\r\n }\r\n\r\n getSubsetColors(startSegmentIdx, segmentsCount) {\r\n return getSubset(this._colors, startSegmentIdx, segmentsCount, COL_SIZE);\r\n }\r\n\r\n getSubsetOpacities(startSegmentIdx, segmentsCount) {\r\n return getSubset(this._alpha, startSegmentIdx, segmentsCount, 1);\r\n }\r\n\r\n getNumVertexPerSegment() {\r\n return VERTEX_PER_SEGMENT;\r\n }\r\n\r\n getPositionSize() {\r\n return POS_SIZE;\r\n }\r\n\r\n setSegments(startSegmentIdx, positions) {\r\n const startPos = startSegmentIdx * VERTEX_PER_SEGMENT * POS_SIZE;\r\n if (positions instanceof Array && positions.length === 2) {\r\n this._positions.set(positions[0], startPos);\r\n const startDir = startSegmentIdx * VERTEX_PER_SEGMENT * DIR_SIZE;\r\n this._directions.set(positions[1], startDir); // dirs are geo part of vertex\r\n } else {\r\n this._positions.set(positions, startPos);\r\n }\r\n }\r\n\r\n setColors(startSegmentIdx, colors) {\r\n const start = startSegmentIdx * VERTEX_PER_SEGMENT * COL_SIZE;\r\n this._colors.set(colors, start);\r\n }\r\n\r\n _initVertices(segmentsCount) {\r\n this._buffersSize = segmentsCount * VERTEX_PER_SEGMENT;\r\n const pointsCount = this._buffersSize;\r\n const use32bitIndex = pointsCount > MAX_IDC_16BIT;\r\n this._index = utils.allocateTyped(use32bitIndex ? Uint32Array : Uint16Array, segmentsCount * 6);\r\n this._positions = utils.allocateTyped(Float32Array, pointsCount * POS_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, pointsCount * COL_SIZE);\r\n this._directions = utils.allocateTyped(Float32Array, pointsCount * DIR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, pointsCount);\r\n _.fill(alpha, 1.0);\r\n\r\n const index = this._index;\r\n let indexOffset = 0;\r\n let pointOffset = 0;\r\n for (let j = 0; j < segmentsCount; j++, indexOffset += 6, pointOffset += VERTEX_PER_SEGMENT) {\r\n index[indexOffset] = pointOffset;\r\n index[indexOffset + 1] = pointOffset + 1;\r\n index[indexOffset + 2] = pointOffset + 3;\r\n index[indexOffset + 3] = pointOffset;\r\n index[indexOffset + 4] = pointOffset + 2;\r\n index[indexOffset + 5] = pointOffset + 3;\r\n }\r\n this.setIndex(new THREE.BufferAttribute(this._index, 1));\r\n\r\n this.setAttribute('position', new THREE.BufferAttribute(this._positions, POS_SIZE));\r\n this.setAttribute('color', new THREE.BufferAttribute(this._colors, COL_SIZE));\r\n this.setAttribute('alphaColor', new THREE.BufferAttribute(alpha, 1));\r\n this.setAttribute('direction', new THREE.BufferAttribute(this._directions, DIR_SIZE));\r\n }\r\n}\r\n\r\nexport default ThickLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport BaseLinesGeometry from './ThickLinesGeometry';\r\n\r\n/**\r\n * This class represents geometry which consists lines. This can build bounding volumes\r\n * @constructor\r\n *\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n */\r\nclass LinesGeometry extends BaseLinesGeometry {\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n computeBoundingSphere() {\r\n const { boundingBox } = this;\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n if (boundingBox) {\r\n boundingBox.getCenter(center);\r\n }\r\n const positions = this._positions;\r\n const sphere = this.boundingSphere || new THREE.Sphere();\r\n const size = this._positions.length;\r\n const pos = new THREE.Vector3();\r\n const posSize = this.getPositionSize();\r\n for (let i = 0; i < size; i += posSize) {\r\n pos.set(positions[i], positions[i + 1], positions[i + 2]);\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n sphere.set(center, Math.sqrt(radiusSquared));\r\n this.boundingSphere = sphere;\r\n }\r\n\r\n computeBoundingBox() {\r\n const positions = this._positions;\r\n const box = new THREE.Box3();\r\n const size = this._positions.length;\r\n const tmpVec = new THREE.Vector3();\r\n const posSize = this.getPositionSize();\r\n for (let i = 0; i < size; i += posSize) {\r\n tmpVec.set(positions[i], positions[i + 1], positions[i + 2]);\r\n box.expandByPoint(tmpVec);\r\n }\r\n this.boundingBox = box;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n}\r\n\r\nexport default LinesGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst tmpVector = new THREE.Vector3();\r\nconst normMtx = new THREE.Matrix3();\r\n\r\nclass CylinderCollisionGeo extends ChunkedObjectsGeometry {\r\n constructor(instanceCount, polyComplexity) {\r\n const cylGeometry = new THREE.CylinderGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, true);\r\n super(cylGeometry, instanceCount);\r\n\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._chunkNorms = this._chunkGeo.attributes.normal.array;\r\n this._tmpVector = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const chunkSize = this._chunkSize;\r\n const itemOffset = chunkSize * itemIdx * VEC_SIZE;\r\n\r\n const tmpArray = this._tmpVector;\r\n const geoPos = this._chunkPos;\r\n const geoNorm = this._chunkNorms;\r\n\r\n const mtx1 = gfxutils.calcCylinderMatrix(botPos, topPos, itemRad);\r\n normMtx.getNormalMatrix(mtx1);\r\n let idx;\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoPos, idx);\r\n tmpVector.applyMatrix4(mtx1);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._positions.set(tmpArray, itemOffset);\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoNorm, idx);\r\n tmpVector.applyMatrix3(normMtx);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._normals.set(tmpArray, itemOffset);\r\n }\r\n}\r\nexport default CylinderCollisionGeo;\r\n","import LinesGeometry from './LinesGeometry';\r\nimport CylinderCollisionGeo from './CylinderCollisionGeo';\r\n\r\nconst COLLISION_RAD = 0.1;\r\n\r\n/**\r\n * This class represents geometry which consists of separate chunks.\r\n * Each chunk has same index and similar geometry with equal points and faces count.\r\n * Each chunk has by default only one color.\r\n * @constructor\r\n *\r\n * @param {number} chunksCount Total chunks count.\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n * @param {boolean} enableCollision Enable or disable collision where each segment is\r\n * a collidable cylinder.\r\n * collision geometry.\r\n */\r\nclass ChunkedLinesGeometry extends LinesGeometry {\r\n constructor(chunksCount, segmentsCount, enableCollision) {\r\n super(chunksCount * segmentsCount);\r\n this._init(segmentsCount);\r\n this._collisionGeo = enableCollision ? new CylinderCollisionGeo(chunksCount * segmentsCount, 3) : null;\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n computeBoundingSphere() {\r\n const collisionGeo = this._collisionGeo;\r\n if (collisionGeo) {\r\n collisionGeo.computeBoundingSphere();\r\n this.boundingSphere = collisionGeo.boundingSphere;\r\n return;\r\n }\r\n super.computeBoundingSphere();\r\n }\r\n\r\n computeBoundingBox() {\r\n const collisionGeo = this._collisionGeo;\r\n if (collisionGeo) {\r\n collisionGeo.computeBoundingBox();\r\n this.boundingBox = collisionGeo.boundingBox;\r\n return;\r\n }\r\n super.computeBoundingBox();\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const collisionGeo = this._collisionGeo;\r\n if (!collisionGeo) {\r\n return;\r\n }\r\n const segCount = this._chunkSize;\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n for (let i = 0, n = intersects.length; i < n; ++i) {\r\n let { chunkIdx } = intersects[i];\r\n if (chunkIdx === undefined) {\r\n continue;\r\n }\r\n chunkIdx = (chunkIdx / segCount) | 0;\r\n intersects[i].chunkIdx = chunkIdx;\r\n }\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n const chunkSize = this._chunkSize;\r\n for (let i = chunkIdx * chunkSize, end = i + chunkSize; i < end; ++i) {\r\n super.setColor(i, colorVal);\r\n }\r\n }\r\n\r\n setSegment(chunkIdx, segIdx, pos1, pos2) {\r\n const chunkSize = this._chunkSize;\r\n const idx = chunkIdx * chunkSize + segIdx;\r\n super.setSegment(idx, pos1, pos2);\r\n if (this._collisionGeo) {\r\n this._collisionGeo.setItem(chunkIdx * chunkSize + segIdx, pos1, pos2, COLLISION_RAD);\r\n }\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const chunkSize = this._chunkSize;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const left = chunkIndices[i] * chunkSize;\r\n super.setOpacity(left, left + chunkSize - 1, value);\r\n }\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const chunkSize = this._chunkSize;\r\n const subset = new ChunkedLinesGeometry(instanceCount, chunkSize, false);\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const dstPtOffset = i * chunkSize;\r\n const startSegIdx = chunkIndices[i] * chunkSize;\r\n subset.setSegments(dstPtOffset, this.getSubsetSegments(startSegIdx, chunkSize));\r\n subset.setColors(dstPtOffset, this.getSubsetColors(startSegIdx, chunkSize));\r\n }\r\n\r\n subset.boundingSphere = this.boundingSphere;\r\n subset.boundingBox = this.boundingBox;\r\n return [subset];\r\n }\r\n\r\n _init(chunkSize) {\r\n this._chunkSize = chunkSize;\r\n }\r\n}\r\n\r\nexport default ChunkedLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport LinesGeometry from './LinesGeometry';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\n\r\nconst COLLISION_RAD = 0.3;\r\nconst tmpVector = new THREE.Vector3();\r\n\r\nclass TwoColorLinesGeometry extends LinesGeometry {\r\n constructor(segmentsCount) {\r\n super(segmentsCount * 2);\r\n this._init(segmentsCount);\r\n this._collisionGeo = new Simple2CCylindersGeometry(segmentsCount, 3);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos) {\r\n this._collisionGeo.setItem(itemIdx, botPos, topPos, COLLISION_RAD);\r\n const offset = 2 * itemIdx;// there are two points per segment\r\n tmpVector.lerpVectors(botPos, topPos, 0.5);\r\n super.setSegment(offset, botPos, tmpVector);\r\n super.setSegment(offset + 1, tmpVector, topPos);\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const offset = 2 * itemIdx;// there are two points per segment\r\n super.setColor(offset, colorVal1);\r\n super.setColor(offset + 1, colorVal2);\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n if (this._collisionGeo) {\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n }\r\n }\r\n\r\n getSubset(segmentIndices) {\r\n const instanceCount = segmentIndices.length;\r\n const subset = new TwoColorLinesGeometry(instanceCount, false);\r\n for (let i = 0, n = instanceCount; i < n; ++i) {\r\n const startSegIdx = segmentIndices[i];\r\n subset.setSegments(i, this.getSubsetSegments(startSegIdx, 1));\r\n subset.setColors(i, this.getSubsetColors(startSegIdx, 1));\r\n }\r\n\r\n subset.boundingSphere = this.boundingSphere;\r\n subset.boundingBox = this.boundingBox;\r\n return [subset];\r\n }\r\n\r\n _init(segmentsCount) {\r\n this._segCounts = segmentsCount * 2;\r\n }\r\n}\r\n// (???)parent = LinesGeometry.prototype;\r\n\r\nexport default TwoColorLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport ChunkedLinesGeometry from './ChunkedLinesGeometry';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst vectors = [\r\n new THREE.Vector3(1, 0, 0),\r\n new THREE.Vector3(-1, 0, 0),\r\n new THREE.Vector3(0, 1, 0),\r\n new THREE.Vector3(0, -1, 0),\r\n new THREE.Vector3(0, 0, 1),\r\n new THREE.Vector3(0, 0, -1),\r\n];\r\nconst vecCount = vectors.length;\r\nconst tempPos1 = new THREE.Vector3();\r\nconst tempPos2 = new THREE.Vector3();\r\n\r\nclass CrossGeometry extends SphereCollisionGeo(ChunkedLinesGeometry) {\r\n constructor(chunksCount) {\r\n super(chunksCount, chunksCount, (vecCount / 2) | 0, false);\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n\r\n for (let i = 0; i < vecCount / 2; ++i) {\r\n const first = i * 2;\r\n tempPos1.x = itemPos.x + vectors[first].x * itemRad;\r\n tempPos1.y = itemPos.y + vectors[first].y * itemRad;\r\n tempPos1.z = itemPos.z + vectors[first].z * itemRad;\r\n const second = first + 1;\r\n tempPos2.x = itemPos.x + vectors[second].x * itemRad;\r\n tempPos2.y = itemPos.y + vectors[second].y * itemRad;\r\n tempPos2.z = itemPos.z + vectors[second].z * itemRad;\r\n this.setSegment(itemIdx, i, tempPos1, tempPos2);\r\n }\r\n }\r\n}\r\nexport default CrossGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst POS_RAD_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\n\r\n/**\r\n * This is a base class for isosurface algorithms.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\nclass IsoSurfaceGeometry extends THREE.BufferGeometry {\r\n constructor(spheresCount, opts) {\r\n super();\r\n\r\n this._opts = opts;\r\n this.zClip = this._opts.zClip;\r\n this._posRad = utils.allocateTyped(Float32Array, spheresCount * POS_RAD_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, spheresCount * COLOR_SIZE);\r\n }\r\n\r\n setItem(chunkIdx, pos, radius) {\r\n const posRad = this._posRad;\r\n let idx = POS_RAD_SIZE * chunkIdx;\r\n posRad[idx++] = pos.x;\r\n posRad[idx++] = pos.y;\r\n posRad[idx++] = pos.z;\r\n posRad[idx] = radius;\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n const colors = this._colors;\r\n let idx = COLOR_SIZE * chunkIdx;\r\n colors[idx++] = tmpColor.r;\r\n colors[idx++] = tmpColor.g;\r\n colors[idx] = tmpColor.b;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n finishUpdate() {\r\n this._build();\r\n }\r\n\r\n setOpacity() {\r\n // not implemented\r\n }\r\n\r\n raycast() {\r\n }\r\n\r\n getSubset() {\r\n return [];\r\n }\r\n}\r\nexport default IsoSurfaceGeometry;\r\n","import utils from '../../utils';\r\n\r\n/**\r\n * Class for marching cube\r\n * Stores 8 points and 8 float values are stored together in linear array\r\n * Int values for has intersection or not - in integer32 linear array\r\n * Int values for bits flags - in integer32 linear array\r\n *\r\n */\r\nclass IsoSurfaceMarchCube {\r\n constructor() {\r\n this.pointsValuesLinear = null;\r\n this.hasIntersection = null;\r\n this.bitsInside = null;\r\n }\r\n\r\n create(numCellsPerSide) {\r\n const vx7000000 = 0x7000000;\r\n const n3 = numCellsPerSide * numCellsPerSide * numCellsPerSide;\r\n if (n3 > vx7000000) {\r\n throw new Error('Too large cube dimension: lead to memory huge uasge');\r\n }\r\n this.pointsValuesLinear = utils.allocateTyped(Float32Array, (2 << (2 + 2)) * n3);\r\n this.hasIntersection = utils.allocateTyped(Int32Array, n3);\r\n this.bitsInside = utils.allocateTyped(Int32Array, n3);\r\n return 0;\r\n }\r\n\r\n destroy() {\r\n this.bitsInside = null;\r\n this.hasIntersection = null;\r\n this.pointsValuesLinear = null;\r\n }\r\n}\r\n\r\nIsoSurfaceMarchCube.prototype.striIndicesMarchCube = [\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1,\r\n 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1,\r\n 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1,\r\n 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1,\r\n 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1,\r\n 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1,\r\n 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1,\r\n 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1,\r\n 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1,\r\n 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1,\r\n 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1,\r\n 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1,\r\n 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1,\r\n 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1,\r\n 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1,\r\n 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1,\r\n 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1,\r\n 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1,\r\n 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1,\r\n 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1,\r\n 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1,\r\n 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1,\r\n 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1,\r\n 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1,\r\n 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1,\r\n 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1,\r\n 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1,\r\n 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1,\r\n 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1,\r\n 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1,\r\n 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1,\r\n 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1,\r\n 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1,\r\n 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1,\r\n 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1,\r\n 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1,\r\n 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1,\r\n 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1,\r\n 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1,\r\n 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1,\r\n 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1,\r\n 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1,\r\n 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1,\r\n 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1,\r\n 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1,\r\n 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1,\r\n 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1,\r\n 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1,\r\n 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1,\r\n 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1,\r\n 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1,\r\n 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1,\r\n 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1,\r\n 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1,\r\n 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1,\r\n 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1,\r\n 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1,\r\n 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1,\r\n 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1,\r\n 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1,\r\n 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1,\r\n 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1,\r\n 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1,\r\n 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1,\r\n 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1,\r\n 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1,\r\n 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1,\r\n 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1,\r\n 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1,\r\n 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1,\r\n 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1,\r\n 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1,\r\n 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1,\r\n 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1,\r\n 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1,\r\n 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1,\r\n 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1,\r\n 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1,\r\n 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1,\r\n 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1,\r\n 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1,\r\n 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1,\r\n 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1,\r\n 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1,\r\n 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1,\r\n 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1,\r\n 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1,\r\n 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1,\r\n 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1,\r\n 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1,\r\n 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1,\r\n 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1,\r\n 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1,\r\n 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1,\r\n 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1,\r\n 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1,\r\n 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1,\r\n 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1,\r\n 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1,\r\n 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1,\r\n 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1,\r\n 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1,\r\n 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1,\r\n 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1,\r\n 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1,\r\n 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1,\r\n 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1,\r\n 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1,\r\n 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n];\r\n\r\nexport default IsoSurfaceMarchCube;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceMarchCube from './IsoSurfaceMarchCube';\r\nimport utils from '../../utils';\r\n\r\nconst edgeTable = [\r\n 0x0, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c,\r\n 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,\r\n 0x190, 0x99, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c,\r\n 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,\r\n 0x230, 0x339, 0x33, 0x13a, 0x636, 0x73f, 0x435, 0x53c,\r\n 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,\r\n 0x3a0, 0x2a9, 0x1a3, 0xaa, 0x7a6, 0x6af, 0x5a5, 0x4ac,\r\n 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,\r\n 0x460, 0x569, 0x663, 0x76a, 0x66, 0x16f, 0x265, 0x36c,\r\n 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,\r\n 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff, 0x3f5, 0x2fc,\r\n 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,\r\n 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55, 0x15c,\r\n 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,\r\n 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc,\r\n 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,\r\n 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc,\r\n 0xcc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,\r\n 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c,\r\n 0x15c, 0x55, 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,\r\n 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc,\r\n 0x2fc, 0x3f5, 0xff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,\r\n 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c,\r\n 0x36c, 0x265, 0x16f, 0x66, 0x76a, 0x663, 0x569, 0x460,\r\n 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac,\r\n 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa, 0x1a3, 0x2a9, 0x3a0,\r\n 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c,\r\n 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33, 0x339, 0x230,\r\n 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c,\r\n 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99, 0x190,\r\n 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c,\r\n 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0];\r\n\r\nfunction _voxelGradientFast(v, point, grad) {\r\n const g = v.getValue(point.x, point.y, point.z);\r\n grad.set(g[0], g[1], g[2]);\r\n}\r\n\r\n// Helper class GridCell\r\nclass GridCell {\r\n constructor() {\r\n this._arrSize = 8;\r\n this.p = new Array(this._arrSize);\r\n this.g = new Array(this._arrSize);\r\n this.val = new Array(this._arrSize);\r\n for (let i = 0; i < this._arrSize; ++i) {\r\n this.p[i] = new THREE.Vector3();\r\n this.g[i] = new THREE.Vector3();\r\n }\r\n this.cubeIndex = 0;\r\n }\r\n}\r\n\r\n// Helper class Triangle\r\nclass Triangle {\r\n constructor() {\r\n this.a = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n\r\n this.b = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n\r\n this.c = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n }\r\n}\r\n\r\nfunction createArray(arrSize) {\r\n const arr = new Array(arrSize);\r\n for (let i = 0; i < arrSize; ++i) {\r\n arr[i] = new THREE.Vector3();\r\n }\r\n\r\n return arr;\r\n}\r\n\r\nclass IsoSurface {\r\n constructor() {\r\n this._numTriangles = 0;\r\n this._numVertices = 0;\r\n this._position = [];\r\n this._normals = [];\r\n this._colors = null;\r\n this._indices = [];\r\n this._volumetricData = null;\r\n this._xAxis = new THREE.Vector3();\r\n this._yAxis = new THREE.Vector3();\r\n this._zAxis = new THREE.Vector3();\r\n this._xDir = new THREE.Vector3();\r\n this._yDir = new THREE.Vector3();\r\n this._zDir = new THREE.Vector3();\r\n }\r\n\r\n _prepareAxesAndDirs() {\r\n const volData = this._volumetricData;\r\n\r\n const cellSize = volData.getCellSize();\r\n\r\n // calculate cell axes\r\n const xAxis = this._xAxis;\r\n const yAxis = this._yAxis;\r\n const zAxis = this._zAxis;\r\n const xDir = this._xDir;\r\n const yDir = this._yDir;\r\n const zDir = this._zDir;\r\n\r\n xAxis.set(cellSize.x, 0, 0);\r\n yAxis.set(0, cellSize.y, 0);\r\n zAxis.set(0, 0, cellSize.z);\r\n\r\n xDir.set(1, 0, 0);\r\n yDir.set(0, 1, 0);\r\n zDir.set(0, 0, 1);\r\n\r\n // flip normals if coordinate system is in the wrong handedness\r\n const tmp = new THREE.Vector3();\r\n tmp.crossVectors(xDir, yDir);\r\n if (tmp.dot(zDir) < 0) {\r\n xDir.negate();\r\n yDir.negate();\r\n zDir.negate();\r\n }\r\n\r\n // check that the grid is in the all-positive octant of the coordinate system\r\n if (xDir.x < 0 || xDir.y < 0 || xDir.z < 0\r\n || yDir.x < 0 || yDir.y < 0 || yDir.z < 0\r\n || zDir.x < 0 || zDir.y < 0 || zDir.z < 0) {\r\n return false;\r\n }\r\n\r\n // check that the grid is axis-aligned\r\n const notZero = (axe) => Math.abs(axe) > Number.EPSILON;\r\n return !(notZero(xAxis.y) || notZero(xAxis.z)\r\n || notZero(yAxis.x) || notZero(yAxis.z)\r\n || notZero(zAxis.x) || notZero(zAxis.y));\r\n }\r\n\r\n _vertexInterp(isoLevel, grid, ind1, ind2, vertex, normal) {\r\n const p1 = grid.p[ind1];\r\n const p2 = grid.p[ind2];\r\n const n1 = grid.g[ind1];\r\n const n2 = grid.g[ind2];\r\n const valP1 = grid.val[ind1];\r\n const valP2 = grid.val[ind2];\r\n const isoDiffP1 = isoLevel - valP1;\r\n const diffValP2P1 = valP2 - valP1;\r\n\r\n let mu = 0.0;\r\n\r\n if (Math.abs(diffValP2P1) > 0.0) {\r\n mu = isoDiffP1 / diffValP2P1;\r\n }\r\n mu = mu > 1.0 ? 1.0 : mu;\r\n vertex.lerpVectors(p1, p2, mu);\r\n normal.lerpVectors(n1, n2, mu);\r\n }\r\n\r\n static _triTable = IsoSurfaceMarchCube.prototype.striIndicesMarchCube;\r\n\r\n static _arrSize = 12;\r\n\r\n static _firstIndices = [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3];\r\n\r\n static _secondIndices = [1, 2, 3, 0, 5, 6, 7, 4, 4, 5, 6, 7];\r\n\r\n static _vertexList = createArray(IsoSurface._arrSize);\r\n\r\n static _normalList = createArray(IsoSurface._arrSize);\r\n\r\n _polygonize(grid, isoLevel, triangles) {\r\n const { cubeIndex } = grid;\r\n let i = 0;\r\n const arrSize = IsoSurface._arrSize;\r\n const firstIndices = IsoSurface._firstIndices;\r\n const secondIndices = IsoSurface._secondIndices;\r\n const vertexList = IsoSurface._vertexList;\r\n const normalList = IsoSurface._normalList;\r\n\r\n for (; i < arrSize; ++i) {\r\n if (edgeTable[cubeIndex] & (1 << i)) {\r\n this._vertexInterp(\r\n isoLevel,\r\n grid,\r\n firstIndices[i],\r\n secondIndices[i],\r\n vertexList[i],\r\n normalList[i],\r\n );\r\n }\r\n }\r\n\r\n let triCount = 0;\r\n const triTblIdx = cubeIndex * 16;\r\n const triTable = IsoSurface._triTable;\r\n\r\n for (i = 0; triTable[triTblIdx + i] !== -1; i += 3) {\r\n triangles[triCount].a.p.copy(vertexList[triTable[triTblIdx + i]]);\r\n triangles[triCount].a.n.copy(normalList[triTable[triTblIdx + i]]);\r\n\r\n triangles[triCount].b.p.copy(vertexList[triTable[triTblIdx + i + 1]]);\r\n triangles[triCount].b.n.copy(normalList[triTable[triTblIdx + i + 1]]);\r\n\r\n triangles[triCount].c.p.copy(vertexList[triTable[triTblIdx + i + 2]]);\r\n triangles[triCount].c.n.copy(normalList[triTable[triTblIdx + i + 2]]);\r\n ++triCount;\r\n }\r\n\r\n return triCount;\r\n }\r\n\r\n _doGridPosNorms(isoValue, step, appendSimple) {\r\n const vol = this._volumetricData;\r\n const volData = this._volumetricData.getData();\r\n const dim = vol.getDimensions();\r\n const xSize = dim[0];\r\n const ySize = dim[1];\r\n const zSize = dim[2];\r\n const stepX = step * vol.getStrideX();\r\n const stepY = step * vol.getStrideY();\r\n const stepZ = step * vol.getStrideZ();\r\n\r\n const gc = new GridCell();\r\n const gcVal = gc.val;\r\n const gcValSize = gc.val.length;\r\n const additions = [\r\n new THREE.Vector3(0, 0, 0), // 0\r\n new THREE.Vector3(step, 0, 0), // 1\r\n new THREE.Vector3(step, step, 0), // 2\r\n new THREE.Vector3(0, step, 0), // 3\r\n new THREE.Vector3(0, 0, step), // 4\r\n new THREE.Vector3(step, 0, step), // 5\r\n new THREE.Vector3(step, step, step), // 6\r\n new THREE.Vector3(0, step, step), // 7\r\n ];\r\n\r\n const tmpTriCount = 5;\r\n const triangles = new Array(tmpTriCount);\r\n for (let j = 0; j < tmpTriCount; ++j) {\r\n triangles[j] = new Triangle();\r\n }\r\n\r\n let appendVertex;\r\n const self = this;\r\n const positions = this._position;\r\n const normals = this._normals;\r\n if (appendSimple) {\r\n // Special case for axis-aligned grid with positive unit vector normals\r\n appendVertex = (function () {\r\n const axis = new THREE.Vector3(self._xAxis.x, self._yAxis.y, self._zAxis.z);\r\n return function (triVertex) {\r\n const vertex = triVertex.p.clone();\r\n vertex.multiply(axis);\r\n positions.push(vertex.add(self._origin));\r\n normals.push(triVertex.n.clone());\r\n };\r\n }());\r\n } else {\r\n appendVertex = (function () {\r\n const posMtx = new THREE.Matrix3();\r\n posMtx.set(\r\n self._xAxis.x,\r\n self._yAxis.x,\r\n self._zAxis.x,\r\n self._xAxis.y,\r\n self._yAxis.y,\r\n self._zAxis.y,\r\n self._xAxis.z,\r\n self._yAxis.z,\r\n self._zAxis.z,\r\n );\r\n const normMtx = new THREE.Matrix3();\r\n normMtx.set(\r\n self._xDir.x,\r\n self._yDir.x,\r\n self._zDir.x,\r\n self._xDir.y,\r\n self._yDir.y,\r\n self._zDir.y,\r\n self._xDir.z,\r\n self._yDir.z,\r\n self._zDir.z,\r\n );\r\n\r\n return function (triVertex) {\r\n positions.push(triVertex.p.clone().applyMatrix3(posMtx).add(self._origin));\r\n normals.push(triVertex.n.clone().applyMatrix3(normMtx));\r\n };\r\n }());\r\n }\r\n const indices = this._indices;\r\n\r\n let globTriCount = 0;\r\n\r\n for (let z = 0; z < (zSize - step); z += step) {\r\n for (let y = 0; y < (ySize - step); y += step) {\r\n let idx = vol.getDirectIdx(0, y, z);\r\n for (let x = 0; x < (xSize - step); x += step, idx += stepX) {\r\n gcVal[0] = volData[idx];\r\n gcVal[1] = volData[idx + stepX];\r\n gcVal[3] = volData[idx + stepY];\r\n gcVal[2] = volData[idx + stepX + stepY];\r\n gcVal[4] = volData[idx + stepZ];\r\n gcVal[5] = volData[idx + stepX + stepZ];\r\n gcVal[7] = volData[idx + stepY + stepZ];\r\n gcVal[6] = volData[idx + stepX + stepY + stepZ];\r\n\r\n // Determine the index into the edge table which\r\n // tells us which vertices are inside of the surface\r\n let cubeIndex = 0;\r\n let i = 0;\r\n for (; i < gcValSize; ++i) {\r\n if (gcVal[i] < isoValue) {\r\n cubeIndex |= (1 << i);\r\n }\r\n }\r\n\r\n if (edgeTable[cubeIndex] === 0) {\r\n continue;\r\n }\r\n\r\n gc.cubeIndex = cubeIndex;\r\n for (i = 0; i < gcValSize; ++i) {\r\n gc.p[i].set(x + additions[i].x, y + additions[i].y, z + additions[i].z);\r\n _voxelGradientFast(this._gradient, gc.p[i], gc.g[i]);\r\n }\r\n\r\n // calculate vertices and facets for this cube,\r\n // calculate normals by interpolating between the negated\r\n // normalized volume gradients for the 8 reference voxels\r\n const triCount = this._polygonize(gc, isoValue, triangles);\r\n globTriCount += triCount;\r\n\r\n // append triangles using different techniques\r\n for (i = 0; i < triCount; ++i) {\r\n indices.push(this._numTriangles * 3);\r\n indices.push(this._numTriangles * 3 + 1);\r\n indices.push(this._numTriangles * 3 + 2);\r\n ++this._numTriangles;\r\n\r\n appendVertex(triangles[i].a);\r\n appendVertex(triangles[i].b);\r\n appendVertex(triangles[i].c);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return globTriCount;\r\n }\r\n\r\n compute(volData, origin, isoValue, step) {\r\n this._volumetricData = volData;\r\n this._origin = origin;\r\n\r\n this._gradient = volData.computeGradient();\r\n\r\n this._doGridPosNorms(isoValue, step, this._prepareAxesAndDirs());\r\n }\r\n\r\n _remapIndices(vertexMap, idcCount) {\r\n const indices = this._indices;\r\n const newIndices = utils.allocateTyped(Uint32Array, idcCount);\r\n for (let i = 0; i < idcCount; ++i) {\r\n indices[i] = vertexMap[indices[i]];\r\n newIndices[i] = indices[i];\r\n }\r\n this._indices = newIndices;\r\n }\r\n\r\n _remapVertices(vertices, normals, count) {\r\n const newPositions = utils.allocateTyped(Float32Array, count * 3);\r\n const newNormals = utils.allocateTyped(Float32Array, count * 3);\r\n for (let i = 0; i < count; ++i) {\r\n const pos = vertices[i];\r\n newPositions[i * 3] = pos.x;\r\n newPositions[i * 3 + 1] = pos.y;\r\n newPositions[i * 3 + 2] = pos.z;\r\n const norm = normals[i].normalize();\r\n newNormals[i * 3] = norm.x;\r\n newNormals[i * 3 + 1] = norm.y;\r\n newNormals[i * 3 + 2] = norm.z;\r\n }\r\n this._position = newPositions;\r\n this._normals = newNormals;\r\n }\r\n\r\n vertexFusion(offset, len) {\r\n const faceVer = this._indices.length;\r\n const vertices = this._position;\r\n const normals = this._normals;\r\n const oldVerCount = vertices.length | 0;\r\n if (faceVer === 0 || oldVerCount === 0) {\r\n return;\r\n }\r\n const vMap = utils.allocateTyped(Uint32Array, oldVerCount);\r\n vMap[0] = 0;\r\n let newVer = 1;\r\n\r\n let i = 1;\r\n for (; i < oldVerCount; ++i) {\r\n const start = newVer - offset < 0 ? 0 : newVer - offset;\r\n const end = start + len > newVer ? newVer : start + len;\r\n let matchedIndex = -1;\r\n\r\n for (let j = start; j < end; ++j) {\r\n if (Math.abs(vertices[i] - vertices[j]) < Number.EPSILON) {\r\n matchedIndex = j;\r\n break;\r\n }\r\n }\r\n\r\n if (matchedIndex !== -1) {\r\n vMap[i] = matchedIndex;\r\n } else {\r\n vertices[newVer].copy(vertices[i]);\r\n normals[newVer].copy(normals[i]);\r\n vMap[i] = newVer;\r\n ++newVer;\r\n }\r\n }\r\n\r\n this._remapIndices(vMap, faceVer);\r\n this._remapVertices(vertices, normals, newVer);\r\n }\r\n\r\n // Assign per-vertex colors from a volumetric texture map (same dimensions as the original volumetric data).\r\n // Along with color dominating atom is determined for each vertex\r\n // and vertices with atom out of \"visible\" subset get filtered out.\r\n // XXX only handles orthogonal volumes currently\r\n setColorVolTex(colorMap, atomMap, atomWeightMap, visibilitySelector) {\r\n let i;\r\n let idx;\r\n const numVerts = this._position.length / 3;\r\n const vertices = this._position;\r\n const origin = this._origin;\r\n const dim = this._volumetricData.getDimensions();\r\n const xs = dim[0] - 1;\r\n const ys = dim[1] - 1;\r\n const zs = dim[2] - 1;\r\n\r\n const colorData = colorMap.getData();\r\n const strideX = colorMap.getStrideX();\r\n const strideY = colorMap.getStrideY();\r\n const strideZ = colorMap.getStrideZ();\r\n\r\n let atomWeightData;\r\n let atomStrideX;\r\n let atomStrideY;\r\n let atomStrideZ;\r\n\r\n if (visibilitySelector !== null) {\r\n atomWeightData = atomWeightMap.getData();\r\n atomStrideX = atomWeightMap.getStrideX();\r\n atomStrideY = atomWeightMap.getStrideY();\r\n atomStrideZ = atomWeightMap.getStrideZ();\r\n }\r\n\r\n const xInv = 1.0 / this._xAxis.x;\r\n const yInv = 1.0 / this._yAxis.y;\r\n const zInv = 1.0 / this._zAxis.z;\r\n\r\n let atomLookup = [];\r\n let atomWeights = [];\r\n const colors = utils.allocateTyped(Float32Array, numVerts * 3);\r\n\r\n function interp(mu, idx1, idx2, c) {\r\n c[0] = (1 - mu) * colorData[idx1] + mu * colorData[idx2];\r\n c[1] = (1 - mu) * colorData[idx1 + 1] + mu * colorData[idx2 + 1];\r\n c[2] = (1 - mu) * colorData[idx1 + 2] + mu * colorData[idx2 + 2];\r\n }\r\n\r\n function collectWeight(ai, coefX, coefY, coefZ) {\r\n const a = atomMap[ai]; // atomWeightMap is a scalar field, so index into atom map should be the same\r\n if (a != null) {\r\n atomLookup[a.index] = a;\r\n const w = coefX * coefY * coefZ * atomWeightData[ai];\r\n if (typeof atomWeights[a.index] === 'undefined') {\r\n atomWeights[a.index] = w;\r\n } else {\r\n atomWeights[a.index] += w;\r\n }\r\n }\r\n }\r\n\r\n const vMap = utils.allocateTyped(Int32Array, numVerts);\r\n let newVerCount = 0;\r\n\r\n for (i = 0; i < numVerts; i++) {\r\n const ind = i * 3;\r\n const vx = (vertices[ind] - origin.x) * xInv;\r\n const vy = (vertices[ind + 1] - origin.y) * yInv;\r\n const vz = (vertices[ind + 2] - origin.z) * zInv;\r\n const x = Math.min(Math.max(vx, 0), xs) | 0;\r\n const y = Math.min(Math.max(vy, 0), ys) | 0;\r\n const z = Math.min(Math.max(vz, 0), zs) | 0;\r\n\r\n const mux = (vx - x);\r\n const muy = (vy - y);\r\n const muz = (vz - z);\r\n\r\n if (visibilitySelector != null) {\r\n // collect atom weights\r\n atomLookup = [];\r\n atomWeights = [];\r\n idx = atomWeightMap.getDirectIdx(x, y, z);\r\n collectWeight(idx, 1 - mux, 1 - muy, 1 - muz);\r\n collectWeight(idx + atomStrideX, mux, 1 - muy, 1 - muz);\r\n collectWeight(idx + atomStrideY, 1 - mux, muy, 1 - muz);\r\n collectWeight(idx + atomStrideX + atomStrideY, mux, muy, 1 - muz);\r\n collectWeight(idx + atomStrideZ, 1 - mux, 1 - muy, muz);\r\n collectWeight(idx + atomStrideX + atomStrideZ, mux, 1 - muy, muz);\r\n collectWeight(idx + atomStrideY + atomStrideZ, 1 - mux, muy, muz);\r\n collectWeight(idx + atomStrideX + atomStrideY + atomStrideZ, mux, muy, muz);\r\n\r\n // find dominant atom\r\n let maxWeight = 0.0;\r\n let dominantIdx = -1;\r\n for (const atomIdx in atomWeights) {\r\n if (atomWeights[atomIdx] > maxWeight) {\r\n dominantIdx = atomIdx;\r\n maxWeight = atomWeights[atomIdx];\r\n }\r\n }\r\n\r\n if (dominantIdx < 0 || !visibilitySelector.includesAtom(atomLookup[dominantIdx])) {\r\n // this vertex doesn't belong to visible subset and will be skipped\r\n vMap[i] = -1;\r\n continue;\r\n }\r\n }\r\n\r\n vMap[i] = newVerCount++;\r\n\r\n // color tri-linear interpolation\r\n const dx = (x < xs) ? strideX : 0;\r\n const dy = (y < ys) ? strideY : 0;\r\n const dz = (z < zs) ? strideZ : 0;\r\n\r\n const c0 = [0, 0, 0];\r\n const c1 = [0, 0, 0];\r\n const c2 = [0, 0, 0];\r\n const c3 = [0, 0, 0];\r\n\r\n idx = colorMap.getDirectIdx(x, y, z);\r\n interp(mux, idx, idx + dx, c0);\r\n interp(mux, idx + dy, idx + dx + dy, c1);\r\n interp(mux, idx + dz, idx + dx + dz, c2);\r\n interp(mux, idx + dy + dz, idx + dx + dy + dz, c3);\r\n\r\n const cz0 = [0, 0, 0];\r\n cz0[0] = (1 - muy) * c0[0] + muy * c1[0];\r\n cz0[1] = (1 - muy) * c0[1] + muy * c1[1];\r\n cz0[2] = (1 - muy) * c0[2] + muy * c1[2];\r\n\r\n const cz1 = [0, 0, 0];\r\n cz1[0] = (1 - muy) * c2[0] + muy * c3[0];\r\n cz1[1] = (1 - muy) * c2[1] + muy * c3[1];\r\n cz1[2] = (1 - muy) * c2[2] + muy * c3[2];\r\n\r\n colors[ind] = (1 - muz) * cz0[0] + muz * cz1[0];\r\n colors[ind + 1] = (1 - muz) * cz0[1] + muz * cz1[1];\r\n colors[ind + 2] = (1 - muz) * cz0[2] + muz * cz1[2];\r\n }\r\n this._colors = colors;\r\n\r\n if (visibilitySelector != null) {\r\n // shift visible vertices towards beginning of array\r\n for (i = 0; i < numVerts; ++i) {\r\n const j = vMap[i];\r\n if (j < 0) {\r\n continue;\r\n }\r\n\r\n // assert: j <= i\r\n this._position[j * 3] = this._position[i * 3];\r\n this._position[j * 3 + 1] = this._position[i * 3 + 1];\r\n this._position[j * 3 + 2] = this._position[i * 3 + 2];\r\n this._normals[j * 3] = this._normals[i * 3];\r\n this._normals[j * 3 + 1] = this._normals[i * 3 + 1];\r\n this._normals[j * 3 + 2] = this._normals[i * 3 + 2];\r\n this._colors[j * 3] = this._colors[i * 3];\r\n this._colors[j * 3 + 1] = this._colors[i * 3 + 1];\r\n this._colors[j * 3 + 2] = this._colors[i * 3 + 2];\r\n }\r\n\r\n // rebuild index list\r\n const numTriangles = this._indices.length / 3;\r\n let newTriCount = 0;\r\n for (i = 0; i < numTriangles; ++i) {\r\n const i0 = vMap[this._indices[3 * i]];\r\n const i1 = vMap[this._indices[3 * i + 1]];\r\n const i2 = vMap[this._indices[3 * i + 2]];\r\n if (i0 >= 0 && i1 >= 0 && i2 >= 0) {\r\n this._indices[3 * newTriCount] = i0;\r\n this._indices[3 * newTriCount + 1] = i1;\r\n this._indices[3 * newTriCount + 2] = i2;\r\n ++newTriCount;\r\n }\r\n }\r\n\r\n // shrink arrays to data size\r\n this._position = new Float32Array(this._position.buffer.slice(0, newVerCount * 3 * 4));\r\n this._normals = new Float32Array(this._normals.buffer.slice(0, newVerCount * 3 * 4));\r\n this._colors = new Float32Array(this._colors.buffer.slice(0, newVerCount * 3 * 4));\r\n this._indices = new Uint32Array(this._indices.buffer.slice(0, newTriCount * 3 * 4));\r\n }\r\n }\r\n\r\n toMesh() {\r\n const geo = new THREE.BufferGeometry();\r\n geo.setIndex(new THREE.BufferAttribute(this._indices, 1));\r\n geo.setAttribute('position', new THREE.BufferAttribute(this._position, 3));\r\n geo.setAttribute('normal', new THREE.BufferAttribute(this._normals, 3));\r\n geo.setAttribute('color', new THREE.BufferAttribute(this._colors, 3));\r\n geo.computeBoundingSphere();\r\n return geo;\r\n }\r\n}\r\nexport default IsoSurface;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceGeometry from './IsoSurfaceGeometry';\r\nimport IsoSurface from './IsoSurface';\r\nimport utils from '../../utils';\r\n\r\n/**\r\n * This is a base class for volumetric maps based isosurface algorithms.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass VolumeSurfaceGeometry extends IsoSurfaceGeometry {\r\n _build() {\r\n const params = this._opts;\r\n this.numVoxels = [128, 128, 128];\r\n this.xAxis = new THREE.Vector3(1.0, 0.0, 0.0);\r\n this.yAxis = new THREE.Vector3(0.0, 1.0, 0.0);\r\n this.zAxis = new THREE.Vector3(0.0, 0.0, 1.0);\r\n\r\n this.origin = new THREE.Vector3(0.0, 0.0, 0.0);\r\n this._visibilitySelector = params.visibilitySelector;\r\n\r\n this._calcSurface(params);\r\n }\r\n\r\n _findMinMax(posRadArray) {\r\n const itemSize = 4;\r\n const itemsCount = posRadArray.length / itemSize;\r\n const maxPosRad = [posRadArray[0], posRadArray[1], posRadArray[2], posRadArray[3]];\r\n const minPosRad = [posRadArray[0], posRadArray[1], posRadArray[2], posRadArray[3]];\r\n for (let i = 1; i < itemsCount; ++i) {\r\n const ind = i * itemSize;\r\n\r\n for (let itemIdx = 0; itemIdx < itemSize; ++itemIdx) {\r\n const tmpVal = posRadArray[ind + itemIdx];\r\n maxPosRad[itemIdx] = Math.max(tmpVal, maxPosRad[itemIdx]);\r\n minPosRad[itemIdx] = Math.min(tmpVal, minPosRad[itemIdx]);\r\n }\r\n }\r\n return { maxPosRad, minPosRad };\r\n }\r\n\r\n _findNumVoxels(posRadArray, params) {\r\n const { numVoxels } = this;\r\n const minMaxValues = this._findMinMax(posRadArray);\r\n const minCoordRad = minMaxValues.minPosRad;\r\n const maxCoordRad = minMaxValues.maxPosRad;\r\n\r\n // minrad\r\n if (minCoordRad[3] > 4.0) {\r\n params.gridSpacing *= minCoordRad[3];\r\n }\r\n\r\n let gridPadding = params.radScale * maxCoordRad[3] * 1.7;\r\n let padRad = gridPadding;\r\n padRad = 0.65 * Math.sqrt(4.0 / 3.0 * Math.PI * padRad * padRad * padRad);\r\n gridPadding = Math.max(gridPadding, padRad);\r\n\r\n let i = 0;\r\n for (; i < 3; ++i) {\r\n minCoordRad[i] -= gridPadding;\r\n maxCoordRad[i] += gridPadding;\r\n }\r\n\r\n for (i = 0; i < 3; ++i) {\r\n numVoxels[i] = Math.ceil((maxCoordRad[i] - minCoordRad[i]) / params.gridSpacing);\r\n }\r\n this.xAxis.x = (numVoxels[0] - 1) * params.gridSpacing;\r\n this.yAxis.y = (numVoxels[1] - 1) * params.gridSpacing;\r\n this.zAxis.z = (numVoxels[2] - 1) * params.gridSpacing;\r\n\r\n [this.origin.x, this.origin.y, this.origin.z] = minCoordRad;\r\n\r\n return { bbox: minMaxValues, dim: numVoxels };\r\n }\r\n\r\n _makeSurface(surface, params) {\r\n const isoSurf = new IsoSurface();\r\n isoSurf.compute(surface.volMap, this.origin, params.isoValue, 1);\r\n isoSurf.vertexFusion(9, 9);// normalization is included\r\n\r\n if (isoSurf._numTriangles > 0) {\r\n isoSurf.setColorVolTex(surface.volTexMap, surface.atomMap, surface.atomWeightMap, this._visibilitySelector);\r\n this.setIndex(new THREE.BufferAttribute(isoSurf._indices, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(isoSurf._position, 3));\r\n this.setAttribute('normal', new THREE.BufferAttribute(isoSurf._normals, 3));\r\n this.setAttribute('color', new THREE.BufferAttribute(isoSurf._colors, 3));\r\n } else { // geometry should have at least empty position attributes to be processed in wireframe mode by three.js\r\n this.setAttribute('position', new THREE.BufferAttribute(utils.allocateTyped(Float32Array, 0), 3));\r\n }\r\n }\r\n\r\n _calcSurface(params) {\r\n const packedArrays = {\r\n posRad: this._posRad,\r\n colors: this._colors,\r\n atoms: this._opts.atoms,\r\n };\r\n\r\n if (packedArrays.posRad.length === 0) {\r\n return;\r\n }\r\n const boundaries = this._findNumVoxels(packedArrays.posRad, params);\r\n\r\n const box = new THREE.Box3(\r\n this.origin,\r\n new THREE.Vector3(this.xAxis.x, this.yAxis.y, this.zAxis.z).add(this.origin),\r\n );\r\n const surface = this._computeSurface(packedArrays, box, boundaries, params);\r\n\r\n this._makeSurface(surface, params);\r\n }\r\n}\r\n\r\nexport default VolumeSurfaceGeometry;\r\n","import VolumeSurfaceGeometry from './VolumeSurfaceGeometry';\r\nimport chem from '../../chem';\r\n\r\nconst { Volume } = chem;\r\n\r\n/**\r\n * This class implements 'quick' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass QuickSurfGeometry extends VolumeSurfaceGeometry {\r\n _computeSurface(packedArrays, box, boundaries, params) {\r\n // beware of shifting this multiple times!\r\n this._shiftByOrigin(packedArrays.posRad);\r\n\r\n const surface = {\r\n volMap: new Volume(Float32Array, this.numVoxels, box),\r\n volTexMap: new Volume(Float32Array, this.numVoxels, box, 3),\r\n };\r\n\r\n if (this._visibilitySelector != null) {\r\n surface.atomMap = [];\r\n surface.atomWeightMap = new Volume(Float32Array, this.numVoxels, box);\r\n }\r\n\r\n this.gaussdensity(surface, packedArrays, null, params);\r\n return surface;\r\n }\r\n\r\n gaussdensity(surface, packedArrays, atomicNum, params) {\r\n const numAtoms = packedArrays.posRad.length / 4;\r\n const { posRad, colors } = packedArrays;\r\n const { numVoxels } = this;\r\n const { radScale, gaussLim, gridSpacing } = params;\r\n const invIsoValue = 1.0 / params.isoValue;\r\n const invGridSpacing = 1.0 / gridSpacing;\r\n const maxVoxelX = numVoxels[0] - 1;\r\n const maxVoxelY = numVoxels[1] - 1;\r\n const maxVoxelZ = numVoxels[2] - 1;\r\n // TODO is densityMap and volTexMap initialized?\r\n\r\n const { volMap, volTexMap } = surface;\r\n const volData = volMap.getData();\r\n const strideX = volMap.getStrideX();\r\n\r\n const volTexData = volTexMap.getData();\r\n const texStrideX = volTexMap.getStrideX();\r\n\r\n let atomWeightData;\r\n if (this._visibilitySelector != null) {\r\n atomWeightData = surface.atomWeightMap.getData();\r\n }\r\n\r\n const { atomMap } = surface;\r\n\r\n for (let i = 0; i < numAtoms; ++i) {\r\n const ind = i * 4;\r\n const scaledRad = posRad[ind + 3] * radScale;\r\n const atomicNumFactor = atomicNum === null ? 1.0 : atomicNum[i];\r\n const radInv = 1 / (2 * scaledRad * scaledRad);\r\n let radLim = gaussLim * scaledRad;\r\n const radLim2 = radLim * radLim;\r\n radLim *= invGridSpacing;\r\n\r\n let tmp = posRad[ind] * invGridSpacing;\r\n const xMin = Math.max((tmp - radLim) | 0, 0);\r\n const xMax = Math.min((tmp + radLim) | 0, maxVoxelX);\r\n tmp = posRad[ind + 1] * invGridSpacing;\r\n const yMin = Math.max((tmp - radLim) | 0, 0);\r\n const yMax = Math.min((tmp + radLim) | 0, maxVoxelY);\r\n tmp = posRad[ind + 2] * invGridSpacing;\r\n const zMin = Math.max((tmp - radLim) | 0, 0);\r\n const zMax = Math.min((tmp + radLim) | 0, maxVoxelZ);\r\n\r\n let dz = zMin * gridSpacing - posRad[ind + 2];\r\n for (let z = zMin; z <= zMax; ++z, dz += gridSpacing) {\r\n let dy = yMin * gridSpacing - posRad[ind + 1];\r\n for (let y = yMin; y <= yMax; ++y, dy += gridSpacing) {\r\n const dy2dz2 = dy * dy + dz * dz;\r\n\r\n if (dy2dz2 >= radLim2) {\r\n continue;\r\n }\r\n\r\n let addr = volMap.getDirectIdx(xMin, y, z);\r\n let texAddr = volTexMap.getDirectIdx(xMin, y, z);\r\n let dx = xMin * gridSpacing - posRad[ind];\r\n for (let x = xMin; x <= xMax; ++x, dx += gridSpacing, addr += strideX, texAddr += texStrideX) {\r\n const r2 = dx * dx + dy2dz2;\r\n const expVal = -r2 * radInv;\r\n\r\n let density = Math.exp(expVal) * atomicNumFactor;\r\n\r\n // store most relevant atom (with highest density)\r\n if (this._visibilitySelector != null\r\n && density > atomWeightData[addr]) { // NOSONAR\r\n atomWeightData[addr] = density;\r\n // we use same index into atom map and atomWeightMap\r\n atomMap[addr] = packedArrays.atoms[i];\r\n }\r\n\r\n volData[addr] += density;\r\n\r\n // TODO check for volTexMap routine?\r\n density *= invIsoValue;\r\n const colInd = i * 3;\r\n volTexData[texAddr] += density * colors[colInd];\r\n volTexData[texAddr + 1] += density * colors[colInd + 1];\r\n volTexData[texAddr + 2] += density * colors[colInd + 2];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _shiftByOrigin(posRadArray) {\r\n const originX = this.origin.x;\r\n const originY = this.origin.y;\r\n const originZ = this.origin.z;\r\n\r\n const itemSize = 4;\r\n const itemsCount = posRadArray.length / itemSize;\r\n for (let i = 0; i < itemsCount; ++i) {\r\n const ind = i * itemSize;\r\n\r\n posRadArray[ind] -= originX;\r\n posRadArray[ind + 1] -= originY;\r\n posRadArray[ind + 2] -= originZ;\r\n }\r\n }\r\n}\r\n\r\nexport default QuickSurfGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\n/**\r\n * Modifed from SpatialHash\r\n *\r\n * Main differences are:\r\n * - Optimized grid size to ensure we only ever need to look +/-1 cell\r\n * - Aware of atomic radii and will only output atoms within rAtom + rExtra\r\n * (see withinRadii method)\r\n *\r\n * (Uses rounding rather than bitshifting as consequence of arbitrary grid size)\r\n * @class\r\n * @param {Float32Array} posRad - x, y, z coordinates and radiuses\r\n * @param {Float32Array} min - xyz min coordinates\r\n * @param {Float32Array} max - xyz max coordinates\r\n * @param {number} maxDistance - max distance\r\n */\r\nfunction AVHash(posRad, min, max, maxDistance) {\r\n const itemSize = 4;\r\n const nAtoms = posRad.length / itemSize;\r\n\r\n const minX = min[0];\r\n const minY = min[1];\r\n const minZ = min[2];\r\n\r\n const maxX = max[0];\r\n const maxY = max[1];\r\n const maxZ = max[2];\r\n\r\n function hashFunc(w, minW) {\r\n return Math.floor((w - minW) / maxDistance);\r\n }\r\n\r\n const iDim = hashFunc(maxX, minX) + 1;\r\n const jDim = hashFunc(maxY, minY) + 1;\r\n const kDim = hashFunc(maxZ, minZ) + 1;\r\n\r\n const nCells = iDim * jDim * kDim;\r\n\r\n const jkDim = jDim * kDim;\r\n\r\n /* Get cellID for cartesian x,y,z */\r\n const cellID = function (x, y, z) {\r\n return (((hashFunc(x, minX) * jDim) + hashFunc(y, minY)) * kDim) + hashFunc(z, minZ);\r\n };\r\n\r\n /* Initial building, could probably be optimized further */\r\n const preHash = [];\r\n let i;\r\n let cid;\r\n for (i = 0; i < nAtoms; i++) {\r\n const iIdx = itemSize * i;\r\n cid = cellID(posRad[iIdx], posRad[iIdx + 1], posRad[iIdx + 2]);\r\n\r\n if (preHash[cid] === undefined) {\r\n preHash[cid] = [i];\r\n } else {\r\n preHash[cid].push(i);\r\n }\r\n }\r\n\r\n const cellOffsets = utils.allocateTyped(Uint32Array, nCells);\r\n const cellLengths = utils.allocateTyped(Uint16Array, nCells);\r\n const data = utils.allocateTyped(Uint32Array, nAtoms);\r\n\r\n let offset = 0;\r\n let maxCellLength = 0;\r\n let j;\r\n for (i = 0; i < nCells; i++) {\r\n const start = cellOffsets[i] = offset;\r\n\r\n const subArray = preHash[i];\r\n\r\n if (subArray !== undefined) {\r\n for (j = 0; j < subArray.length; j++) {\r\n data[offset] = subArray[j];\r\n offset++;\r\n }\r\n }\r\n\r\n const cellLength = offset - start;\r\n cellLengths[i] = cellLength;\r\n\r\n if (cellLength > maxCellLength) {\r\n maxCellLength = cellLength;\r\n }\r\n }\r\n\r\n // Maximum number of neighbours we could ever produce (27 adjacent cells of equal population)\r\n this.neighbourListLength = (27 * maxCellLength) + 1;\r\n\r\n /**\r\n * Populate the supplied out array with atom indices that are within rAtom + rExtra\r\n * of x,y,z\r\n *\r\n * -1 in out array indicates the end of the list\r\n *\r\n * @param {number} x - x coordinate\r\n * @param {number} y - y coordinate\r\n * @param {number} z - z coordinate\r\n * @param {number} rExtra - additional radius\r\n * @param {Float32Array} out - pre-allocated output array\r\n * @return {undefined}\r\n */\r\n this.withinRadii = function (x, y, z, rExtra, out) {\r\n let outIdx = 0;\r\n\r\n const nearI = hashFunc(x, minX);\r\n const nearJ = hashFunc(y, minY);\r\n const nearK = hashFunc(z, minZ);\r\n\r\n const loI = Math.max(0, nearI - 1);\r\n const loJ = Math.max(0, nearJ - 1);\r\n const loK = Math.max(0, nearK - 1);\r\n\r\n const hiI = Math.min(iDim - 1, nearI + 1);\r\n const hiJ = Math.min(jDim - 1, nearJ + 1);\r\n const hiK = Math.min(kDim - 1, nearK + 1);\r\n\r\n for (i = loI; i <= hiI; ++i) {\r\n const iOffset = i * jkDim;\r\n\r\n for (j = loJ; j <= hiJ; ++j) {\r\n const jOffset = j * kDim;\r\n\r\n for (let k = loK; k <= hiK; ++k) {\r\n cid = iOffset + jOffset + k;\r\n\r\n const cellStart = cellOffsets[cid];\r\n const cellEnd = cellStart + cellLengths[cid];\r\n\r\n for (let dataIndex = cellStart; dataIndex < cellEnd; dataIndex++) {\r\n const atomIndex = data[dataIndex];\r\n const baseIndex = itemSize * atomIndex;\r\n const dx = posRad[baseIndex] - x;\r\n const dy = posRad[baseIndex + 1] - y;\r\n const dz = posRad[baseIndex + 2] - z;\r\n const rSum = posRad[baseIndex + 3] + rExtra;\r\n\r\n if ((dx * dx + dy * dy + dz * dz) <= (rSum * rSum)) {\r\n out[outIdx++] = data[dataIndex];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // Add terminator\r\n out[outIdx] = -1;\r\n };\r\n}\r\nfunction ContactSurface(packedArrays, boundaries, params, _indexList) {\r\n // Field generation method adapted from AstexViewer (Mike Hartshorn)\r\n // by Fred Ludlow.\r\n // Other parts based heavily on NGL (Alexander Rose) EDT Surface class\r\n //\r\n // Should work as a drop-in alternative to EDTSurface (though some of\r\n // the EDT paramters are not relevant in this method).\r\n\r\n const itemSize = 4;\r\n const { posRad, colors, atoms } = packedArrays;\r\n const nAtoms = posRad.length / itemSize;\r\n\r\n const { bbox } = boundaries;\r\n\r\n const min = bbox.minPosRad;\r\n const max = bbox.maxPosRad;\r\n\r\n let r2; // Atom positions, expanded radii (squared)\r\n let maxRadius;\r\n\r\n // Parameters\r\n let probeRadius;\r\n let scaleFactor;\r\n let probePositions;\r\n\r\n // Cache last value for obscured test\r\n let lastClip = -1;\r\n\r\n // Grid params\r\n let dim;\r\n let grid;\r\n let volTex;\r\n let weights;\r\n let weightsMap = null;\r\n let atomMap = null;\r\n let visibilitySelector = null;\r\n\r\n // grid indices -> xyz coords\r\n let gridx;\r\n let gridy;\r\n let gridz;\r\n\r\n // Lookup tables:\r\n let sinTable;\r\n let cosTable;\r\n\r\n // Spatial Hash\r\n let hash;\r\n\r\n // Neighbour array to be filled by hash\r\n let neighbours;\r\n\r\n // Vectors for Torus Projection\r\n const mid = new THREE.Vector3(0.0, 0.0, 0.0);\r\n const n1 = new THREE.Vector3(0.0, 0.0, 0.0);\r\n const n2 = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n let ngTorus;\r\n\r\n function uniformArray(TypeName, n, a) {\r\n const array = utils.allocateTyped(TypeName, n);\r\n for (let innI = 0; innI < n; ++innI) {\r\n array[innI] = a;\r\n }\r\n\r\n return array;\r\n }\r\n\r\n function fillGridDim(a, start, step) {\r\n for (let innI = 0; innI < a.length; innI++) {\r\n a[innI] = start + (step * innI);\r\n }\r\n }\r\n\r\n function initializeGrid() {\r\n ({ scaleFactor } = params);\r\n ({ dim } = boundaries);\r\n\r\n ngTorus = Math.min(5, 2 + Math.floor(probeRadius * scaleFactor));\r\n\r\n const gridSize = dim[0] * dim[1] * dim[2];\r\n grid = uniformArray(Float32Array, gridSize, -1001.0);\r\n volTex = utils.allocateTyped(Float32Array, gridSize * 3);\r\n weights = utils.allocateTyped(Float32Array, gridSize);\r\n if (visibilitySelector) {\r\n weightsMap = utils.allocateTyped(Float32Array, gridSize);\r\n atomMap = [];\r\n }\r\n\r\n gridx = utils.allocateTyped(Float32Array, dim[0]);\r\n gridy = utils.allocateTyped(Float32Array, dim[1]);\r\n gridz = utils.allocateTyped(Float32Array, dim[2]);\r\n\r\n fillGridDim(gridx, min[0], 1 / scaleFactor);\r\n fillGridDim(gridy, min[1], 1 / scaleFactor);\r\n fillGridDim(gridz, min[2], 1 / scaleFactor);\r\n }\r\n\r\n function initializeAngleTables() {\r\n let theta = 0.0;\r\n const step = 2 * Math.PI / probePositions;\r\n\r\n cosTable = utils.allocateTyped(Float32Array, probePositions);\r\n sinTable = utils.allocateTyped(Float32Array, probePositions);\r\n for (let innI = 0; innI < probePositions; innI++) {\r\n cosTable[innI] = Math.cos(theta);\r\n sinTable[innI] = Math.sin(theta);\r\n theta += step;\r\n }\r\n }\r\n\r\n function initializeHash() {\r\n hash = new AVHash(posRad, min, max, 2.01 * maxRadius);\r\n neighbours = new Int32Array(hash.neighbourListLength);\r\n }\r\n\r\n function init() {\r\n ({\r\n probeRadius,\r\n scaleFactor,\r\n probePositions,\r\n visibilitySelector,\r\n } = params);\r\n r2 = utils.allocateTyped(Float32Array, nAtoms);\r\n maxRadius = 0;\r\n for (let innI = 0; innI < nAtoms; ++innI) {\r\n const rExt = posRad[innI * itemSize + 3] += probeRadius;\r\n if (rExt > maxRadius) {\r\n maxRadius = rExt;\r\n }\r\n r2[innI] = rExt * rExt;\r\n }\r\n\r\n initializeGrid();\r\n initializeAngleTables();\r\n initializeHash();\r\n\r\n lastClip = -1;\r\n }\r\n\r\n function singleAtomObscures(ai, innX, innY, innZ) {\r\n const innCI = itemSize * ai;\r\n const ra2 = r2[ai];\r\n const dx = posRad[innCI] - innX;\r\n const dy = posRad[innCI + 1] - innY;\r\n const dz = posRad[innCI + 2] - innZ;\r\n const d2 = dx * dx + dy * dy + dz * dz;\r\n\r\n return d2 < ra2;\r\n }\r\n\r\n function obscured(innX, innY, innZ, a, b) {\r\n // Is the point at x,y,z obscured by any of the atoms\r\n // specifeid by indices in neighbours. Ignore indices\r\n // a and b (these are the relevant atoms in projectPoints/Torii)\r\n\r\n // Cache the last clipped atom (as very often the same one in\r\n // subsequent calls)\r\n let ai;\r\n\r\n if (lastClip !== -1) {\r\n ai = lastClip;\r\n if (ai !== a && ai !== b && singleAtomObscures(ai, innX, innY, innZ)) {\r\n return ai;\r\n }\r\n lastClip = -1;\r\n }\r\n\r\n let ni = 0;\r\n ai = neighbours[ni];\r\n while (ai >= 0) {\r\n if (ai !== a && ai !== b && singleAtomObscures(ai, innX, innY, innZ)) {\r\n lastClip = ai;\r\n return ai;\r\n }\r\n ai = neighbours[++ni];\r\n }\r\n\r\n lastClip = -1;\r\n\r\n return -1;\r\n }\r\n\r\n function projectPoints() {\r\n // For each atom:\r\n // Iterate over a subsection of the grid, for each point:\r\n // If current value < 0.0, unvisited, set positive\r\n //\r\n // In any case: Project this point onto surface of the atomic sphere\r\n // If this projected point is not obscured by any other atom\r\n // Calcualte delta distance and set grid value to minimum of\r\n // itself and delta\r\n\r\n // Should we alias frequently accessed closure constiables??\r\n // Assume JS engine capable of optimizing this\r\n // anyway...\r\n const maxRad = 4.0;\r\n const sigma = (maxRad) / 3;\r\n const sigma2Inv = 1 / (2 * sigma * sigma);\r\n\r\n for (let innI = 0; innI < nAtoms; innI++) {\r\n const innCI = itemSize * innI;\r\n const ax = posRad[innCI];\r\n const ay = posRad[innCI + 1];\r\n const az = posRad[innCI + 2];\r\n const ar = posRad[innCI + 3];\r\n const ar2 = r2[innI];\r\n\r\n hash.withinRadii(ax, ay, az, ar, neighbours);\r\n\r\n // Number of grid points, round this up...\r\n const ng = Math.ceil(ar * scaleFactor);\r\n\r\n // Center of the atom, mapped to grid points (take floor)\r\n const iax = Math.floor(scaleFactor * (ax - min[0]));\r\n const iay = Math.floor(scaleFactor * (ay - min[1]));\r\n const iaz = Math.floor(scaleFactor * (az - min[2]));\r\n\r\n // Extents of grid to consider for this atom\r\n const minx = Math.max(0, iax - ng);\r\n const miny = Math.max(0, iay - ng);\r\n const minz = Math.max(0, iaz - ng);\r\n\r\n // Add two to these points:\r\n // - iax are floor'd values so this ensures coverage\r\n // - these are loop limits (exclusive)\r\n const maxx = Math.min(dim[0], iax + ng + 2);\r\n const maxy = Math.min(dim[1], iay + ng + 2);\r\n const maxz = Math.min(dim[2], iaz + ng + 2);\r\n\r\n const colIdx = innI * 3;\r\n const cr = colors[colIdx];\r\n const cg = colors[colIdx + 1];\r\n const cb = colors[colIdx + 2];\r\n\r\n for (let iz = minz; iz < maxz; iz++) {\r\n const dz = gridz[iz] - az;\r\n const zOffset = dim[1] * dim[0] * iz;\r\n\r\n for (let iy = miny; iy < maxy; iy++) {\r\n const dy = gridy[iy] - ay;\r\n const dzy2 = dz * dz + dy * dy;\r\n const zyOffset = zOffset + dim[0] * iy;\r\n\r\n for (let ix = minx; ix < maxx; ix++) {\r\n const idx = ix + zyOffset;\r\n const dx = gridx[ix] - ax;\r\n const d2 = dzy2 + dx * dx;\r\n\r\n if (d2 < ar2) {\r\n const w = Math.exp(-d2 * sigma2Inv);\r\n const cIdx = idx * 3;\r\n volTex[cIdx] += cr * w;\r\n volTex[cIdx + 1] += cg * w;\r\n volTex[cIdx + 2] += cb * w;\r\n weights[idx] += w;\r\n if (visibilitySelector !== null && w > weightsMap[idx]) {\r\n weightsMap[idx] = w;\r\n atomMap[idx] = atoms[innI];\r\n }\r\n\r\n if (grid[idx] < 0.0) {\r\n // Unvisited, make positive\r\n grid[idx] = -grid[idx];\r\n }\r\n // Project on to the surface of the sphere\r\n // sp is the projected point ( dx, dy, dz ) * ( ra / d )\r\n const d = Math.sqrt(d2);\r\n const ap = ar / d;\r\n let spx = dx * ap;\r\n let spy = dy * ap;\r\n let spz = dz * ap;\r\n\r\n spx += ax;\r\n spy += ay;\r\n spz += az;\r\n\r\n if (obscured(spx, spy, spz, innI, -1) === -1) {\r\n const dd = ar - d;\r\n if (dd < grid[idx]) {\r\n grid[idx] = dd;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function normalToLine(out, p) {\r\n out.x = out.y = out.z = 1.0;\r\n if (p.x !== 0) {\r\n out.x = (p.y + p.z) / -p.x;\r\n } else if (p.y !== 0) {\r\n out.y = (p.x + p.z) / -p.y;\r\n } else if (p.z !== 0) {\r\n out.z = (p.x + p.y) / -p.z;\r\n }\r\n return out;\r\n }\r\n\r\n function projectTorus(a, b) {\r\n const aIdx = itemSize * a;\r\n const bIdx = itemSize * b;\r\n const xa = posRad[aIdx];\r\n const ya = posRad[aIdx + 1];\r\n const za = posRad[aIdx + 2];\r\n const r1 = posRad[aIdx + 3];\r\n let dx = mid.x = posRad[bIdx] - xa;\r\n let dy = mid.y = posRad[bIdx + 1] - ya;\r\n let dz = mid.z = posRad[bIdx + 2] - za;\r\n const innR2 = posRad[bIdx + 3];\r\n let d2 = dx * dx + dy * dy + dz * dz;\r\n\r\n // This check now redundant as already done in AVHash.withinRadii\r\n // if( d2 > (( r1 + r2 ) * ( r1 + r2 )) ){ return; }\r\n\r\n const d = Math.sqrt(d2);\r\n\r\n // Find angle between a->b vector and the circle\r\n // of their intersection by cosine rule\r\n const cosA = (r1 * r1 + d * d - innR2 * innR2) / (2.0 * r1 * d);\r\n\r\n // distance along a->b at intersection\r\n const dmp = r1 * cosA;\r\n\r\n mid.normalize();\r\n\r\n // Create normal to line\r\n normalToLine(n1, mid);\r\n n1.normalize();\r\n\r\n // Cross together for second normal vector\r\n n2.crossVectors(mid, n1);\r\n n2.normalize();\r\n\r\n // r is radius of circle of intersection\r\n const rInt = Math.sqrt(r1 * r1 - dmp * dmp);\r\n\r\n n1.multiplyScalar(rInt);\r\n n2.multiplyScalar(rInt);\r\n mid.multiplyScalar(dmp);\r\n\r\n mid.x += xa;\r\n mid.y += ya;\r\n mid.z += za;\r\n\r\n lastClip = -1;\r\n\r\n const ng = ngTorus;\r\n\r\n for (let innI = 0; innI < probePositions; innI++) {\r\n const cost = cosTable[innI];\r\n const sint = sinTable[innI];\r\n\r\n const px = mid.x + cost * n1.x + sint * n2.x;\r\n const py = mid.y + cost * n1.y + sint * n2.y;\r\n const pz = mid.z + cost * n1.z + sint * n2.z;\r\n\r\n if (obscured(px, py, pz, a, b) === -1) {\r\n // As above, iterate over our grid...\r\n // px, py, pz in grid coords\r\n const iax = Math.floor(scaleFactor * (px - min[0]));\r\n const iay = Math.floor(scaleFactor * (py - min[1]));\r\n const iaz = Math.floor(scaleFactor * (pz - min[2]));\r\n\r\n const minx = Math.max(0, iax - ng);\r\n const miny = Math.max(0, iay - ng);\r\n const minz = Math.max(0, iaz - ng);\r\n\r\n const maxx = Math.min(dim[0], iax + ng + 2);\r\n const maxy = Math.min(dim[1], iay + ng + 2);\r\n const maxz = Math.min(dim[2], iaz + ng + 2);\r\n\r\n for (let iz = minz; iz < maxz; iz++) {\r\n dz = pz - gridz[iz];\r\n const zOffset = dim[1] * dim[0] * iz;\r\n for (let iy = miny; iy < maxy; iy++) {\r\n dy = py - gridy[iy];\r\n const dzy2 = dz * dz + dy * dy;\r\n const zyOffset = zOffset + dim[0] * iy;\r\n for (let ix = minx; ix < maxx; ix++) {\r\n dx = px - gridx[ix];\r\n d2 = dzy2 + dx * dx;\r\n const idx = ix + zyOffset;\r\n const current = grid[idx];\r\n\r\n if (current > 0.0 && d2 < (current * current)) {\r\n grid[idx] = Math.sqrt(d2);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function projectTorii() {\r\n for (let innI = 0; innI < nAtoms; innI++) {\r\n const innIdx = itemSize * innI;\r\n hash.withinRadii(\r\n posRad[innIdx],\r\n posRad[innIdx + 1],\r\n posRad[innIdx + 2],\r\n posRad[innIdx + 3],\r\n neighbours,\r\n );\r\n let ia = 0;\r\n let ni = neighbours[ia];\r\n while (ni >= 0) {\r\n if (innI < ni) {\r\n projectTorus(innI, ni);\r\n }\r\n ni = neighbours[++ia];\r\n }\r\n }\r\n }\r\n\r\n function fixNegatives() {\r\n for (let innI = 0, n = grid.length; innI < n; innI++) {\r\n if (grid[innI] < 0) grid[innI] = 0;\r\n let w = weights[innI];\r\n if (w > 0) {\r\n w = 1 / w;\r\n const innInnI = innI * 3;\r\n volTex[innInnI] *= w;\r\n volTex[innInnI + 1] *= w;\r\n volTex[innInnI + 2] *= w;\r\n }\r\n }\r\n }\r\n\r\n function getVolume() {\r\n // Basic steps are:\r\n // 1) Initialize\r\n // 2) Project points\r\n // 3) Project torii\r\n console.time('ContactSurface.getVolume');\r\n\r\n console.time('ContactSurface.init');\r\n init();\r\n console.timeEnd('ContactSurface.init');\r\n\r\n console.time('ContactSurface.projectPoints');\r\n projectPoints();\r\n console.timeEnd('ContactSurface.projectPoints');\r\n\r\n console.time('ContactSurface.projectTorii');\r\n projectTorii();\r\n console.timeEnd('ContactSurface.projectTorii');\r\n fixNegatives();\r\n console.timeEnd('ContactSurface.getVolume');\r\n }\r\n\r\n this.build = function () {\r\n // type and cutoff left in for compatibility with EDTSurface.getSurface\r\n // function signature\r\n getVolume();\r\n this.volTexMap = volTex;\r\n this.weightsMap = weightsMap;\r\n this.atomMap = atomMap;\r\n this.volMap = grid;\r\n };\r\n}\r\nexport default ContactSurface;\r\n","import VolumeSurfaceGeometry from './VolumeSurfaceGeometry';\r\nimport ContactSurface from './ContactSurface';\r\nimport chem from '../../chem';\r\n\r\nconst { Volume } = chem;\r\n\r\n/**\r\n * This class implements 'contact' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass ContactSurfaceGeometry extends VolumeSurfaceGeometry {\r\n _computeSurface(packedArrays, box, boundaries, params) {\r\n const contactSurface = new ContactSurface(packedArrays, boundaries, params);\r\n contactSurface.build();\r\n\r\n const surface = {\r\n volMap: new Volume(Float32Array, this.numVoxels, box, 1, contactSurface.volMap),\r\n volTexMap: new Volume(Float32Array, this.numVoxels, box, 3, contactSurface.volTexMap),\r\n atomMap: contactSurface.atomMap,\r\n atomWeightMap: new Volume(Float32Array, this.numVoxels, box, 1, contactSurface.weightsMap),\r\n };\r\n return surface;\r\n }\r\n}\r\n\r\nexport default ContactSurfaceGeometry;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Class for colored atom. Need for atom structure clusterization\r\n *\r\n * @param {Vector3} vCenter Center of atom\r\n * @param {number} radiusAt Radius of atom\r\n */\r\nclass IsoSurfaceAtomColored {\r\n constructor(vCenter, radiusAt) {\r\n this.coord = new THREE.Vector3();\r\n this.coord.copy(vCenter);\r\n this.radius = radiusAt;\r\n this.colorX = 0.99999;\r\n this.colorY = 0.0;\r\n this.colorZ = 0.0;\r\n this.atomType = 0;\r\n this.srcAtom = null;\r\n }\r\n}\r\nexport default IsoSurfaceAtomColored;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\n// suppress some JSHint warnings\r\n/* jshint bitwise: false */\r\n\r\n/**\r\n * Build normals for isosurface, using atoms information\r\n *\r\n * @param {number} numAtoms - Number of atoms in molecule\r\n * @param {Element} atoms - Array of atoms\r\n * @param {Vector3} vBoxMin - Bounding box min\r\n * @param {Vector3} vBoxMax - Bounding box max\r\n * @param {number} probeRadius - Normals for output\r\n *\r\n */\r\nclass IsosurfaceBuildNormals {\r\n constructor(numAtoms, atoms, vBoxMin, vBoxMax, probeRadius) {\r\n this._numAtoms = numAtoms;\r\n this._atoms = atoms;\r\n this._vBoxMin = new THREE.Vector3();\r\n this._vBoxMax = new THREE.Vector3();\r\n this._vBoxMin.copy(vBoxMin);\r\n this._vBoxMax.copy(vBoxMax);\r\n this._probeRadius = probeRadius;\r\n\r\n this._atomsList = null;\r\n this._voxelList = null;\r\n }\r\n\r\n createVoxels() {\r\n let numAtomsRefs;\r\n let rad;\r\n const ATOM_VOXEL_REF_SCALE = 4.5;\r\n\r\n const numAtoms = this._numAtoms | 0;\r\n const atoms = this._atoms;\r\n const dx = this._vBoxMax.x - this._vBoxMin.x;\r\n const dy = this._vBoxMax.y - this._vBoxMin.y;\r\n const dz = this._vBoxMax.z - this._vBoxMin.z;\r\n let w = (dx < dy) ? dx : dy;\r\n w = (dz < w) ? dz : w;\r\n let maxRad = 0.0;\r\n let aveRad = 0.0;\r\n\r\n let i;\r\n for (i = 0; i < numAtoms; i++) {\r\n rad = (atoms[i].radius + this._probeRadius) * 2.0;\r\n maxRad = (rad > maxRad) ? rad : maxRad;\r\n aveRad += rad;\r\n }\r\n let numCells = Math.floor(w / maxRad);\r\n if (numCells < 2) {\r\n numCells = 2;\r\n }\r\n aveRad /= numAtoms;\r\n\r\n this._numCells = numCells;\r\n this._aveRad = aveRad;\r\n this._maxRad = maxRad;\r\n\r\n const side = numCells;\r\n const side2 = numCells * numCells;\r\n const side3 = numCells * numCells * numCells;\r\n\r\n const xScale = this._xScale = 1.0 / (this._vBoxMax.x - this._vBoxMin.x);\r\n const yScale = this._yScale = 1.0 / (this._vBoxMax.y - this._vBoxMin.y);\r\n const zScale = this._zScale = 1.0 / (this._vBoxMax.z - this._vBoxMin.z);\r\n\r\n // estimate number of individual atom refs in each voxel list\r\n let maxAtomsRefs = 0;\r\n\r\n const xNumVoxMult = xScale * numCells;\r\n const yNumVoxMult = yScale * numCells;\r\n const zNumVoxMult = zScale * numCells;\r\n\r\n for (i = 0; i < numAtoms; i++) {\r\n const radAffect = (atoms[i].radius + this._probeRadius) * ATOM_VOXEL_REF_SCALE;\r\n const diaAffect = radAffect * 2.0;\r\n let numVoxX = Math.floor(xNumVoxMult * diaAffect + 0.8);\r\n let numVoxY = Math.floor(yNumVoxMult * diaAffect + 0.8);\r\n let numVoxZ = Math.floor(zNumVoxMult * diaAffect + 0.8);\r\n // avoid case numVox? == 0\r\n // also use loop i <=\r\n numVoxX++;\r\n numVoxY++;\r\n numVoxZ++;\r\n maxAtomsRefs += numVoxX * numVoxY * numVoxZ;\r\n } // for (i)\r\n // maxAtomsRefs = numAtoms * MAX_ATOMS_IN_SINGLE_VOXEL;\r\n\r\n this._voxelList = utils.allocateTyped(Int32Array, side3);\r\n const atomsList = [];\r\n atomsList.length = maxAtomsRefs;\r\n if ((this._voxelList === null) || (atomsList === null)) {\r\n return 0 - 1;\r\n }\r\n // init voxel list\r\n for (i = 0; i < side3; i++) {\r\n this._voxelList[i] = -1;\r\n }\r\n numAtomsRefs = 0;\r\n\r\n // create voxel lists\r\n for (i = 0; i < numAtoms; i++) {\r\n // use multiplier 4 to locate this atom in different voxels\r\n rad = (atoms[i].radius + this._probeRadius) * ATOM_VOXEL_REF_SCALE;\r\n let xIndMin = Math.floor((atoms[i].coord.x - this._vBoxMin.x - rad) * numCells * xScale);\r\n let yIndMin = Math.floor((atoms[i].coord.y - this._vBoxMin.y - rad) * numCells * yScale);\r\n let zIndMin = Math.floor((atoms[i].coord.z - this._vBoxMin.z - rad) * numCells * zScale);\r\n let xIndMax = Math.floor((atoms[i].coord.x - this._vBoxMin.x + rad) * numCells * xScale);\r\n let yIndMax = Math.floor((atoms[i].coord.y - this._vBoxMin.y + rad) * numCells * yScale);\r\n let zIndMax = Math.floor((atoms[i].coord.z - this._vBoxMin.z + rad) * numCells * zScale);\r\n\r\n xIndMin = (xIndMin >= 0) ? xIndMin : 0;\r\n yIndMin = (yIndMin >= 0) ? yIndMin : 0;\r\n zIndMin = (zIndMin >= 0) ? zIndMin : 0;\r\n\r\n xIndMax = (xIndMax < numCells) ? xIndMax : (numCells - 1);\r\n yIndMax = (yIndMax < numCells) ? yIndMax : (numCells - 1);\r\n zIndMax = (zIndMax < numCells) ? zIndMax : (numCells - 1);\r\n\r\n for (let z = zIndMin; z <= zIndMax; z++) {\r\n for (let y = yIndMin; y <= yIndMax; y++) {\r\n for (let x = xIndMin; x <= xIndMax; x++) {\r\n // add atom with index \"i\" to this voxel list\r\n const indVoxel = x + y * side + z * side2;\r\n // assert indVoxel >= 0\r\n // assert indVoxel < side3\r\n\r\n // add first\r\n if (this._voxelList[indVoxel] < 0) {\r\n atomsList[numAtomsRefs * 2 + 0] = i;\r\n atomsList[numAtomsRefs * 2 + 1] = 0 - 1;\r\n this._voxelList[indVoxel] = numAtomsRefs;\r\n numAtomsRefs++;\r\n // assert numAtomsRefs < maxAtomsRefs - 1\r\n continue;\r\n }\r\n // insert into head of list\r\n const indexNext = this._voxelList[indVoxel];\r\n this._voxelList[indVoxel] = numAtomsRefs;\r\n atomsList[numAtomsRefs * 2 + 0] = i;\r\n atomsList[numAtomsRefs * 2 + 1] = indexNext;\r\n numAtomsRefs++;\r\n } // for (x)\r\n } // for (y)\r\n } // for (z)\r\n } // for (i)\r\n\r\n // convert Array to Int32Array\r\n this._atomsList = Int32Array.from(atomsList);\r\n\r\n return 0;\r\n }\r\n\r\n destroyVoxels() {\r\n this._atomsList = null;\r\n this._voxelList = null;\r\n\r\n this._atoms = null;\r\n this._vertices = null;\r\n this._vBoxMin = null;\r\n this._vBoxMax = null;\r\n }\r\n\r\n /**\r\n * Enumerate all atoms affecting specified point\r\n *\r\n * @param {Vector3} point - point in 3D\r\n * @param {func(atom)} process - function to call for each atom\r\n */\r\n forEachRelatedAtom(point, process) {\r\n // find corresponding voxel\r\n const xInd = Math.floor((point.x - this._vBoxMin.x) * this._numCells * this._xScale);\r\n const yInd = Math.floor((point.y - this._vBoxMin.y) * this._numCells * this._yScale);\r\n const zInd = Math.floor((point.z - this._vBoxMin.z) * this._numCells * this._zScale);\r\n const indVoxel = xInd + yInd * this._numCells + zInd * this._numCells * this._numCells;\r\n\r\n // run through atoms affecting this voxel\r\n const atoms = this._atoms;\r\n for (let ref = this._voxelList[indVoxel]; ref >= 0; ref = this._atomsList[ref * 2 + 1]) {\r\n const indexAtom = this._atomsList[ref * 2];\r\n process(atoms[indexAtom]);\r\n }\r\n }\r\n\r\n /**\r\n * Get atom closest to specified point\r\n *\r\n * @param {Vector3} point - point in 3D\r\n *\r\n * @returns {IsoSurfaceAtomColored} atom, or null if not found\r\n */\r\n getClosestAtom(point) {\r\n let closest = null;\r\n let minDist2 = Number.MAX_VALUE;\r\n\r\n this.forEachRelatedAtom(point, (atom) => {\r\n const dist2 = point.distanceToSquared(atom.coord);\r\n if (dist2 < minDist2) {\r\n minDist2 = dist2;\r\n closest = atom;\r\n }\r\n });\r\n\r\n return closest;\r\n }\r\n\r\n /**\r\n * Build normals for isosurface, using atoms information\r\n *\r\n * @param {number} numVertices - Number of vertices in final geometry (to render)\r\n * @param {Vector3} vertices - Geometry vertices (3d coordinates array)\r\n * @param {Vector3} normals - Normals for output\r\n *\r\n * @returns {number} 0, if success\r\n */\r\n buildNormals(numVertices, vertices, normals) {\r\n const self = this;\r\n let numCloseAtoms = 0;\r\n let vx = 0;\r\n let vy = 0;\r\n let vz = 0;\r\n let dist2;\r\n let vNormalX = 0;\r\n let vNormalY = 0;\r\n let vNormalZ = 0;\r\n let koef = 0;\r\n let w = 0;\r\n const r25 = 2.5;\r\n const r01 = 0.1;\r\n\r\n const maxRadAffect = this._aveRad * r25;\r\n const maxRadAffect2 = maxRadAffect * maxRadAffect;\r\n const expScale = -this._aveRad * r01;\r\n\r\n // some stats\r\n // numSlowAtoms = 0;\r\n\r\n const gatherNormals = function (atom) {\r\n const dx = vx - atom.coord.x;\r\n const dy = vy - atom.coord.y;\r\n const dz = vz - atom.coord.z;\r\n dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 > maxRadAffect2) {\r\n return;\r\n }\r\n\r\n // get weight for gaussian smoothing\r\n const rad = atom.radius + self._probeRadius;\r\n koef = dist2 - (rad * rad);\r\n if (koef < 0.0) {\r\n koef = -koef;\r\n }\r\n w = Math.exp(expScale * koef);\r\n\r\n vNormalX += dx * w;\r\n vNormalY += dy * w;\r\n vNormalZ += dz * w;\r\n numCloseAtoms++;\r\n };\r\n\r\n let maxClosedAtoms = 0;\r\n // process all vertices, one by one\r\n for (let i = 0; i < numVertices; i++) {\r\n vx = vertices[i].x;\r\n vy = vertices[i].y;\r\n vz = vertices[i].z;\r\n\r\n numCloseAtoms = 0;\r\n vNormalX = vNormalY = vNormalZ = 0.0;\r\n\r\n this.forEachRelatedAtom(vertices[i], gatherNormals);\r\n\r\n maxClosedAtoms = (numCloseAtoms > maxClosedAtoms) ? numCloseAtoms : maxClosedAtoms;\r\n\r\n // normalize vNormal\r\n dist2 = vNormalX * vNormalX + vNormalY * vNormalY + vNormalZ * vNormalZ;\r\n if (numCloseAtoms > 0) {\r\n koef = 1.0 / Math.sqrt(dist2);\r\n vNormalX *= koef;\r\n vNormalY *= koef;\r\n vNormalZ *= koef;\r\n }\r\n normals[i].x = vNormalX;\r\n normals[i].y = vNormalY;\r\n normals[i].z = vNormalZ;\r\n } // for (i) all vertices\r\n\r\n return 0;\r\n }\r\n\r\n /**\r\n * Build vertex colors for isosurface, using atoms information\r\n *\r\n * @param {number} numVertices - Number of vertices in final geometry (to render)\r\n * @param {Vector3} vertices - Geometry vertices (3d coordinates array)\r\n * @param {Vector3} colors - Colors for output\r\n * @param {number} radiusColorSmoothness - Radius of smoothness sphere\r\n *\r\n * @returns {number} 0, if success\r\n */\r\n buildColors(numVertices, vertices, colors, radiusColorSmoothness) {\r\n const self = this;\r\n let vx = 0.0;\r\n let vy = 0.0;\r\n let vz = 0.0;\r\n let koef = 0.0;\r\n let w = 0.0;\r\n const KOEF_ADD = 0.8;\r\n\r\n const maxRadAffect = radiusColorSmoothness;\r\n const maxRadAffect2 = maxRadAffect * maxRadAffect;\r\n\r\n let colorsClose = [];\r\n let weights = [];\r\n let weightsSum = 0;\r\n\r\n const gatherColors = function (atom) {\r\n const dx = vx - atom.coord.x;\r\n const dy = vy - atom.coord.y;\r\n const dz = vz - atom.coord.z;\r\n const dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 > maxRadAffect2) {\r\n return;\r\n }\r\n\r\n // get weight for gaussian smoothing\r\n const rad = atom.radius + self._probeRadius;\r\n koef = dist2 - (rad * rad);\r\n if (koef < 0.0) {\r\n koef = -koef;\r\n }\r\n w = 1.0 / (KOEF_ADD + koef);\r\n\r\n colorsClose.push([atom.colorX, atom.colorY, atom.colorZ]);\r\n weights.push(w); // save weights for use\r\n weightsSum += w; // calc sum of weights fo further normalization\r\n };\r\n\r\n // process all vertices, one by one\r\n for (let i = 0; i < numVertices; i++) {\r\n vx = vertices[i].x;\r\n vy = vertices[i].y;\r\n vz = vertices[i].z;\r\n\r\n colorsClose = [];\r\n weights = [];\r\n weightsSum = 0;\r\n\r\n this.forEachRelatedAtom(vertices[i], gatherColors);\r\n\r\n // normalized weighted sum of colors\r\n for (let j = 0; j < colorsClose.length; ++j) {\r\n const weightNormalized = weights[j] / weightsSum;\r\n colors[i].x += colorsClose[j][0] * weightNormalized;\r\n colors[i].y += colorsClose[j][1] * weightNormalized;\r\n colors[i].z += colorsClose[j][2] * weightNormalized;\r\n }\r\n } // for (i) all vertices\r\n return 0;\r\n }\r\n}\r\nexport default IsosurfaceBuildNormals;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Class for geometry (triangle mesh) representation\r\n *\r\n *\r\n * @param {number} maxNumVertices Maximum possible number of vertices in mesh\r\n * @param {number} maxNumTriangles Maximum possible number of triangles in mesh\r\n * @param {boolean} needVertexColors Obvious\r\n */\r\nclass IsoSurfaceGeo {\r\n constructor(maxNumVertices, maxNumTriangles, needVertexColors) {\r\n this._maxNumVertices = maxNumVertices;\r\n this._maxNumTriangles = maxNumTriangles;\r\n this._vertices = new Array(maxNumVertices);\r\n this._normals = new Array(maxNumVertices);\r\n this._colors = null;\r\n if (needVertexColors) {\r\n this._colors = new Array(maxNumVertices);\r\n }\r\n this._indices = new Array(maxNumTriangles * (1 + 2));\r\n this._numVertices = 0;\r\n this._numTriangles = 0;\r\n\r\n let i;\r\n for (i = 0; i < maxNumVertices; i++) {\r\n this._vertices[i] = new THREE.Vector3();\r\n this._normals[i] = new THREE.Vector3();\r\n }\r\n for (i = 0; i < maxNumTriangles * (1 + 2); i++) {\r\n this._indices[i] = -1;\r\n }\r\n if (needVertexColors) {\r\n for (i = 0; i < maxNumVertices; i++) {\r\n this._colors[i] = new THREE.Vector3();\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n this._vertices = null;\r\n this._normals = null;\r\n this._indices = null;\r\n }\r\n}\r\nexport default IsoSurfaceGeo;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceGeometry from './IsoSurfaceGeometry';\r\nimport IsoSurfaceAtomColored from './IsoSurfaceAtomColored';\r\nimport IsosurfaceBuildNormals from './IsosurfaceBuildNormals';\r\nimport IsoSurfaceMarchCube from './IsoSurfaceMarchCube';\r\nimport IsoSurfaceGeo from './IsoSurfaceGeo';\r\nimport chem from '../../chem';\r\nimport utils from '../../utils';\r\n\r\nconst COLOR_SIZE = 3;\r\nconst HASH_SIZE = 32768;\r\nconst { Element } = chem;\r\n\r\n/**\r\n * This class implements 'quick' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass SSIsosurfaceGeometry extends IsoSurfaceGeometry {\r\n _build() {\r\n // convert geoOut into arrays of positions, indices, normals\r\n this._innerBuild();\r\n const geoOut = this.getGeo();\r\n this.destroy();\r\n this._fromGeo(geoOut);\r\n }\r\n\r\n _fromGeo(geoOut) {\r\n let colors = null;\r\n const positions = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n const normals = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n if (geoOut._colors !== null) {\r\n colors = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n }\r\n const indices = utils.allocateTyped(Uint32Array, (1 + 2) * geoOut._numTriangles);\r\n\r\n for (let i = 0, j = 0; i < geoOut._numVertices; i++) {\r\n positions[j + 0] = (geoOut._vertices[i].x);\r\n positions[j + 1] = (geoOut._vertices[i].y);\r\n positions[j + 2] = (geoOut._vertices[i].z);\r\n normals[j + 0] = geoOut._normals[i].x;\r\n normals[j + 1] = geoOut._normals[i].y;\r\n normals[j + 2] = geoOut._normals[i].z;\r\n j += 3;\r\n }\r\n if (colors !== null) {\r\n for (let i = 0, j = 0; i < geoOut._numVertices; i++, j += 3) {\r\n colors[j + 0] = geoOut._colors[i].x;\r\n colors[j + 1] = geoOut._colors[i].y;\r\n colors[j + 2] = geoOut._colors[i].z;\r\n }\r\n }\r\n\r\n const numTri3 = geoOut._numTriangles * (1 + 2);\r\n for (let i = 0; i < numTri3; i++) {\r\n indices[i] = geoOut._indices[i];\r\n }\r\n\r\n this.setIndex(new THREE.BufferAttribute(indices, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(positions, 3));\r\n this.setAttribute('normal', new THREE.BufferAttribute(normals, 3));\r\n this.setAttribute('color', new THREE.BufferAttribute(colors, 3));\r\n this.computeBoundingBox();\r\n this.computeBoundingSphere();\r\n\r\n geoOut.destroy();\r\n }\r\n\r\n convertToAtomsColored(packedArrays, atomsColored) {\r\n const { atoms, colors } = packedArrays;\r\n for (let i = 0, numAtoms = atoms.length; i < numAtoms; i++) {\r\n const vCenter = atoms[i].position;\r\n const { radius } = atoms[i].element;\r\n atomsColored[i] = new IsoSurfaceAtomColored(vCenter, radius);\r\n const nm = atoms[i].element.number;\r\n atomsColored[i].atomType = this.getType(nm);\r\n let cIdx = COLOR_SIZE * i;\r\n atomsColored[i].colorX = colors[cIdx++];\r\n atomsColored[i].colorY = colors[cIdx++];\r\n atomsColored[i].colorZ = colors[cIdx];\r\n atomsColored[i].srcAtom = atoms[i];\r\n }\r\n }\r\n\r\n getGeo() {\r\n return this.geoOut;\r\n }\r\n\r\n destroy() {\r\n this.atoms = null;\r\n\r\n this.hashLines = null;\r\n this.hashEntries = null;\r\n }\r\n\r\n /**\r\n * Calculates bounding box for array with spheres (atoms)\r\n *\r\n * @param {Object} atoms Atoms array\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n */\r\n getBoundingBox(atoms, vBoxMin, vBoxMax) {\r\n const bigNum = 10000000.0;\r\n\r\n vBoxMin.x = vBoxMin.y = vBoxMin.z = bigNum;\r\n vBoxMax.x = vBoxMax.y = vBoxMax.z = 0 - bigNum;\r\n\r\n const probeRadius2 = this.probeRadius * this.atomRadiusScale;\r\n let radMax = 0.0;\r\n for (let i = 0, num = atoms.length; i < num; i++) {\r\n const vCenter = atoms[i].coord;\r\n const rad = atoms[i].radius + probeRadius2;\r\n radMax = (rad > radMax) ? rad : radMax;\r\n if (vCenter.x - rad < vBoxMin.x) {\r\n vBoxMin.x = vCenter.x - rad;\r\n }\r\n if (vCenter.y - rad < vBoxMin.y) {\r\n vBoxMin.y = vCenter.y - rad;\r\n }\r\n if (vCenter.z - rad < vBoxMin.z) {\r\n vBoxMin.z = vCenter.z - rad;\r\n }\r\n if (vCenter.x + rad > vBoxMax.x) {\r\n vBoxMax.x = vCenter.x + rad;\r\n }\r\n if (vCenter.y + rad > vBoxMax.y) {\r\n vBoxMax.y = vCenter.y + rad;\r\n }\r\n if (vCenter.z + rad > vBoxMax.z) {\r\n vBoxMax.z = vCenter.z + rad;\r\n }\r\n }\r\n vBoxMin.x -= radMax;\r\n vBoxMin.y -= radMax;\r\n vBoxMin.z -= radMax;\r\n vBoxMax.x += radMax;\r\n vBoxMax.y += radMax;\r\n vBoxMax.z += radMax;\r\n }\r\n\r\n /**\r\n * Calculate (x,y,z) cordinate of the cell corner point\r\n *\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n * @param {number} x Cell integer x coordinate\r\n * @param {number} y Cell integer y coordinate\r\n * @param {number} z Cell integer z coordinate\r\n * @param {number} numPoints NUm points in cell on side\r\n * @param {Vector3} vOut Output vector\r\n */\r\n getCornerCoord(vBoxMin, vBoxMax, x, y, z, numPoints, vOut) {\r\n const invNP = 1.0 / (numPoints - 1.0);\r\n const tx = x * invNP;\r\n const ty = y * invNP;\r\n const tz = z * invNP;\r\n\r\n vOut.x = vBoxMin.x * (1.0 - tx) + vBoxMax.x * tx;\r\n vOut.y = vBoxMin.y * (1.0 - ty) + vBoxMax.y * ty;\r\n vOut.z = vBoxMin.z * (1.0 - tz) + vBoxMax.z * tz;\r\n }\r\n\r\n /**\r\n * Calculate point of intersection of sphere surface\r\n * and cell edge, given by [indexA, indexB] line\r\n *\r\n * @param {number} indexA Cell vertex index in [0..11]\r\n * @param {number} indexB Cell vertex index in [0..11]\r\n * @param {array} sign Sign array for all 8 vertices\r\n * @param {object} cube Cube\r\n * @param {number} indexPointValue for value placement\r\n * @param {Vector3} vOut Point of intersection\r\n */\r\n buildEdgePoint(indexA, indexB, sign, cube, indexPointValue, vOut) {\r\n if (sign[indexA] ^ sign[indexB]) {\r\n const cTwentyFour = 24;\r\n const t = (0 - cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexA])\r\n / (cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexB]\r\n - cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexA]);\r\n const xa = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 0];\r\n const ya = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 1];\r\n const za = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 2];\r\n const xb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 0];\r\n const yb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 1];\r\n const zb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 2];\r\n\r\n vOut.x = xa * (1.0 - t) + xb * t;\r\n vOut.y = ya * (1.0 - t) + yb * t;\r\n vOut.z = za * (1.0 - t) + zb * t;\r\n }\r\n }\r\n\r\n /**\r\n * Check if triangle is visible (vertices are close to atoms included in visibility set)\r\n *\r\n * @param {Vector3} v0 Vertex #0\r\n * @param {Vector3} v1 Vertex #1\r\n * @param {Vector3} v2 Vertex #2\r\n * @returns {boolean} true if triangle is visible\r\n */\r\n isTriangleVisible(v0, v1, v2) {\r\n const a0 = this.voxelWorld.getClosestAtom(v0);\r\n const a1 = this.voxelWorld.getClosestAtom(v1);\r\n const a2 = this.voxelWorld.getClosestAtom(v2);\r\n if (a0 === null || a1 === null || a2 === null\r\n || a0.srcAtom === null || a1.srcAtom === null || a2.srcAtom === null) {\r\n return false;\r\n }\r\n\r\n return this.visibilitySelector.includesAtom(a0.srcAtom)\r\n && this.visibilitySelector.includesAtom(a1.srcAtom)\r\n && this.visibilitySelector.includesAtom(a2.srcAtom);\r\n }\r\n\r\n /**\r\n * Add triangle to result geometry\r\n *\r\n * @param {Vector3} v0 Vertex #0\r\n * @param {Vector3} v1 Vertex #1\r\n * @param {Vector3} v2 Vertex #2\r\n * @returns {boolean} false if no more triangles can be added\r\n */\r\n addTriangle(v0, v1, v2) {\r\n if (this.visibilitySelector && !this.isTriangleVisible(v0, v1, v2)) {\r\n return true;\r\n }\r\n\r\n const geo = this.geoOut;\r\n\r\n if (geo._numTriangles >= this.maxNumTriangles) {\r\n return false;\r\n }\r\n\r\n // Add vertex with optimize\r\n const indInGeo0 = this.addVertexToGeo(geo, v0);\r\n const indInGeo1 = this.addVertexToGeo(geo, v1);\r\n const indInGeo2 = this.addVertexToGeo(geo, v2);\r\n if ((indInGeo0 | indInGeo1 | indInGeo2) < 0) {\r\n return false;\r\n }\r\n\r\n const itr = 3 * geo._numTriangles;\r\n geo._indices[itr + 0] = indInGeo0;\r\n geo._indices[itr + 1] = indInGeo1;\r\n geo._indices[itr + 2] = indInGeo2;\r\n geo._numTriangles++;\r\n return true;\r\n }\r\n\r\n /**\r\n * Build result geometry (triangle mesh) from marching cube cells\r\n *\r\n * @param {number} meshRes Marchnig cube vertex count on each side\r\n * @param {Vector3} vBoxMin Bounding box point min\r\n * @param {Vector3} vBoxMax Bounding box point max\r\n * @param {number} corners float values array for each cube point\r\n * @param {Vector3} vCellStep vector to next cube cell diagonal point\r\n * @param {object} cube IsoSurfaceMarchCube object\r\n * @returns {number} 0, if success (<0) is error\r\n */\r\n buildGeoFromCorners(meshRes, vBoxMin, vBoxMax, corners, vCellStep, cube) {\r\n const arrSize = 12;\r\n const cNumVerts = 8;\r\n const numCells = meshRes - 1;\r\n const side = meshRes;\r\n const side2 = meshRes * meshRes;\r\n\r\n const vaEdges = new Array(arrSize);\r\n for (let i = 0; i < arrSize; i++) {\r\n vaEdges[i] = new THREE.Vector3();\r\n }\r\n const sign = [];\r\n for (let i = 0; i < cNumVerts; i++) {\r\n sign[i] = 1.0;\r\n }\r\n const vCorner = new THREE.Vector3();\r\n let indCell = 0;\r\n let indY = 0;\r\n for (let y = 0; y < numCells; y++, indY += side2) {\r\n let indZ = 0;\r\n for (let z = 0; z < numCells; z++, indZ += side) {\r\n for (let x = 0; x < numCells; x++) {\r\n if (!cube.hasIntersection[indCell]) {\r\n // next cell\r\n indCell++;\r\n continue;\r\n }\r\n const bitsInside = cube.bitsInside[indCell];\r\n\r\n this.getCornerCoord(vBoxMin, vBoxMax, x, y, z, meshRes, vCorner);\r\n\r\n const indPointValues = indCell * (2 << (2 + 2));\r\n for (let i = 0, j = 0; i < cNumVerts; i++) {\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.x;\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.y;\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.z;\r\n }\r\n\r\n cube.pointsValuesLinear[indPointValues + 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 2 * 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 5 * 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3] += vCellStep.x;\r\n\r\n cube.pointsValuesLinear[indPointValues + 2 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 3 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 7 * 3 + 2] += vCellStep.z;\r\n\r\n cube.pointsValuesLinear[indPointValues + 4 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 5 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 7 * 3 + 1] += vCellStep.y;\r\n\r\n // now current cell has intersections (from -x to +x) on some cube edges\r\n const indValues = indPointValues + 24;\r\n for (let i = 0; i < cNumVerts; ++i) {\r\n sign[i] = (cube.pointsValuesLinear[indValues + i] < 0.0) ? 1 : 0;\r\n }\r\n\r\n this.buildEdgePoint(0, 1, sign, cube, indPointValues, vaEdges[0]);\r\n this.buildEdgePoint(1, 2, sign, cube, indPointValues, vaEdges[1]);\r\n this.buildEdgePoint(2, 3, sign, cube, indPointValues, vaEdges[2]);\r\n this.buildEdgePoint(3, 0, sign, cube, indPointValues, vaEdges[3]);\r\n\r\n this.buildEdgePoint(4, 5, sign, cube, indPointValues, vaEdges[4]);\r\n this.buildEdgePoint(5, 6, sign, cube, indPointValues, vaEdges[5]);\r\n this.buildEdgePoint(6, 7, sign, cube, indPointValues, vaEdges[6]);\r\n this.buildEdgePoint(7, 4, sign, cube, indPointValues, vaEdges[7]);\r\n\r\n this.buildEdgePoint(0, 4, sign, cube, indPointValues, vaEdges[8]);\r\n this.buildEdgePoint(1, 5, sign, cube, indPointValues, vaEdges[9]);\r\n this.buildEdgePoint(2, 6, sign, cube, indPointValues, vaEdges[10]);\r\n this.buildEdgePoint(3, 7, sign, cube, indPointValues, vaEdges[11]);\r\n\r\n const offs = bitsInside * (2 << (1 + 2));\r\n for (let numTri = 0, indTri = 0; numTri < (2 + 2 + 2); numTri++, indTri += 3) {\r\n // s_triIndicesMarchCube is external array, defined in mold_ind.js\r\n const i0 = cube.striIndicesMarchCube[offs + indTri];\r\n if (i0 < 0) {\r\n break;\r\n }\r\n const i1 = cube.striIndicesMarchCube[offs + indTri + 1];\r\n const i2 = cube.striIndicesMarchCube[offs + indTri + 2];\r\n\r\n if (!this.addTriangle(vaEdges[i0], vaEdges[i1], vaEdges[i2])) {\r\n return 0 - 2;\r\n }\r\n } // for numTri\r\n\r\n // next cell (cube)\r\n indCell++;\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n return 0;\r\n }\r\n\r\n /**\r\n * Returns number of cell with intersection with at least one sphere.\r\n * Using this number, we can estimate required number of vertices\r\n * and triangles to build result mesh.\r\n *\r\n * @param {number} side Number of points in cube voxels\r\n * @param {number} numCells Number of cells in cube voxels (per direction)\r\n * @param {array} corners Array of float values for cube corner points\r\n * @param {object} cube IsoSurfaceMarchCube object\r\n * @returns {number} numIntersectedCells\r\n */\r\n getNumIntersectedCells(side, numCells, corners, cube) {\r\n const side2 = side * side;\r\n const cNumVerts = 8;\r\n let numIntersectedCells = 0;\r\n\r\n let indCell = 0;\r\n let indY = 0;\r\n for (let y = 0; y < numCells; y++, indY += side2) {\r\n let indZ = 0;\r\n for (let z = 0; z < numCells; z++, indZ += side) {\r\n for (let x = 0; x < numCells; x++) {\r\n const cubeValuesIndex = indCell * (2 << (2 + 2)) + 24;\r\n const indCorner = x + indZ + indY;\r\n\r\n cube.pointsValuesLinear[cubeValuesIndex] = corners[indCorner];\r\n cube.pointsValuesLinear[cubeValuesIndex + 1] = corners[indCorner + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 2] = corners[indCorner + side + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 3] = corners[indCorner + side];\r\n cube.pointsValuesLinear[cubeValuesIndex + 4] = corners[side2 + indCorner];\r\n cube.pointsValuesLinear[cubeValuesIndex + 5] = corners[side2 + indCorner + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 6] = corners[side2 + indCorner + side + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 7] = corners[side2 + indCorner + side];\r\n\r\n // check read exception\r\n // assert(side2 + indCorner + side + 1 < side3);\r\n\r\n // get bit flags inside\r\n let bitsInside = 0;\r\n for (let i = 0; i < cNumVerts; ++i) {\r\n if (cube.pointsValuesLinear[cubeValuesIndex + i] < 0.0) {\r\n bitsInside |= (1 << i);\r\n }\r\n }\r\n\r\n if ((bitsInside === 0) || (bitsInside === ((1 << cNumVerts) - 1))) {\r\n cube.hasIntersection[indCell] = false;\r\n } else {\r\n cube.hasIntersection[indCell] = true;\r\n numIntersectedCells++;\r\n }\r\n cube.bitsInside[indCell] = bitsInside;\r\n // next cell\r\n indCell++;\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n return numIntersectedCells;\r\n }\r\n\r\n getType(letter) {\r\n const atomT = [0, 0, 1, 1, 2, 6, 3, 6, 4, 6, 5, 6, 6, 0, 7, 3, 8, 2, 9, 6, 10, 6, 11, 6, 12, 6, 13, 6, 14, 6, 15, 4,\r\n 16, 5, 17, 6, 18, 6, 19, 6, 20, 6, 21, 6, 22, 6, 23, 6, 24, 6, 25, 6, 26, 6, 27, 6, 28, 6, 29, 6, 30, 6, 31, 6,\r\n 32, 6, 33, 6, 34, 6, 35, 6, 36, 6, 37, 6, 38, 6, 39, 6, 40, 6, 41, 6, 42, 6, 43, 6, 44, 6, 45, 6, 46, 6, 47, 6,\r\n 48, 6, 49, 6, 50, 6, 51, 6, 52, 6, 53, 6, 54, 6, 55, 6, 56, 6, 57, 6, 58, 6, 59, 6, 60, 6, 61, 6, 62, 6, 63, 6,\r\n 64, 6, 65, 6, 66, 6, 67, 6, 68, 6, 69, 6, 70, 6, 71, 6, 72, 6, 73, 6, 74, 6, 75, 6, 76, 6, 77, 6, 78, 6, 79, 6,\r\n 80, 6, 81, 6, 82, 6, 83, 6, 84, 6, 85, 6, 86, 6, 87, 6, 88, 6, 89, 6, 90, 6, 91, 6, 92, 6, 93, 6, 94, 6, 95, 6,\r\n 96, 6, 97, 6, 98, 6, 99, 6, 100, 6, 101, 6, 102, 6, 103, 6, 104, 6, 105, 6, 106, 6, 107, 6, 108, 6, 109, 6];\r\n\r\n if (letter < 1 || letter > atomT.length / 2\r\n || (Object.keys(Element.ByAtomicNumber).length * 2) !== atomT.length) {\r\n throw new Error('atomT.length should be equal Element.ByAtomicNumber.length * 2');\r\n }\r\n return atomT[letter * 2];\r\n }\r\n\r\n /**\r\n * Calculate values for marching cube grid points\r\n * positive values are outside sphere, negative - is inside\r\n *\r\n * @param {array} corners array of float values\r\n * @param {number} side Number of point in cube in 1 dimennsion\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n * @param {array} atoms Array of input atoms\r\n * @param {number} probeRad radius for atom probing\r\n */\r\n calculateGridCorners(corners, side, vBoxMin, vBoxMax, atoms, probeRad) {\r\n const side2 = side * side;\r\n const side3 = side2 * side;\r\n const vCorner = new THREE.Vector3();\r\n const vDif = new THREE.Vector3();\r\n\r\n const aLot = +1.0e12;\r\n\r\n for (let i = 0; i < side3; i++) {\r\n corners[i] = aLot; // to large value\r\n }\r\n\r\n const xScale = (side - 1) / (vBoxMax.x - vBoxMin.x);\r\n const yScale = (side - 1) / (vBoxMax.y - vBoxMin.y);\r\n const zScale = (side - 1) / (vBoxMax.z - vBoxMin.z);\r\n\r\n for (let s = 0, numAtoms = atoms.length; s < numAtoms; s++) {\r\n const atom = atoms[s];\r\n const radius = atom.radius + probeRad;\r\n\r\n const fx = ((atom.coord.x - radius) - vBoxMin.x) * xScale;\r\n const fy = ((atom.coord.y - radius) - vBoxMin.y) * yScale;\r\n const fz = ((atom.coord.z - radius) - vBoxMin.z) * zScale;\r\n\r\n const indXMin = Math.floor(fx);\r\n const indYMin = Math.floor(fy);\r\n const indZMin = Math.floor(fz);\r\n\r\n let indXMax = Math.floor(((atom.coord.x + radius) - vBoxMin.x) * xScale);\r\n let indYMax = Math.floor(((atom.coord.y + radius) - vBoxMin.y) * yScale);\r\n let indZMax = Math.floor(((atom.coord.z + radius) - vBoxMin.z) * zScale);\r\n\r\n indXMax++;\r\n indYMax++;\r\n indZMax++;\r\n indXMax = (indXMax <= (side - 1)) ? indXMax : (side - 1);\r\n indYMax = (indYMax <= (side - 1)) ? indYMax : (side - 1);\r\n indZMax = (indZMax <= (side - 1)) ? indZMax : (side - 1);\r\n\r\n for (let y = indYMin; y <= indYMax; y++) {\r\n const indY = y * side2;\r\n for (let z = indZMin; z <= indZMax; z++) {\r\n const indZ = z * side;\r\n for (let x = indXMin; x <= indXMax; x++) {\r\n const ind = indY + indZ + x;\r\n this.getCornerCoord(vBoxMin, vBoxMax, x, y, z, side, vCorner);\r\n vDif.x = vCorner.x - atom.coord.x;\r\n vDif.y = vCorner.y - atom.coord.y;\r\n vDif.z = vCorner.z - atom.coord.z;\r\n const distToSphere = Math.sqrt(vDif.x * vDif.x + vDif.y * vDif.y + vDif.z * vDif.z);\r\n // val: < 0, if inside sphere\r\n // val: > 0, if outside sphere\r\n const val = distToSphere - radius;\r\n if (val < corners[ind]) {\r\n corners[ind] = val;\r\n }\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n } // for (s)\r\n }\r\n\r\n /**\r\n * Create memory pool for vertex hash management\r\n *\r\n * @param {number} maxNumVertices Maximum possible number of vertices (that will be build)\r\n * @param {number} maxNumTriangles Maximum possible number of triangles (that will be build)\r\n * @returns {number} 0, if success. (<0) is non memory\r\n */\r\n createVertexHash(maxNumVertices, maxNumTriangles) {\r\n this.hashLines = utils.allocateTyped(Int32Array, HASH_SIZE * 2);\r\n if (this.hashLines === null) {\r\n return 0 - 1;\r\n }\r\n for (let i = 0, j = 0; i < HASH_SIZE; i++) {\r\n this.hashLines[j++] = 0; // num vertices in this hash line\r\n this.hashLines[j++] = 0 - 1; // index of the first entry\r\n }\r\n\r\n this.maxNumVertices = maxNumVertices;\r\n this.maxNumTriangles = maxNumTriangles;\r\n\r\n this.numHashEtriesAllocated = maxNumVertices;\r\n this.hashEntries = utils.allocateTyped(Int32Array, 2 * this.numHashEtriesAllocated);\r\n if (this.hashEntries === null) {\r\n return 0 - 1;\r\n }\r\n for (let i = 0, j = 0; i < this.numHashEtriesAllocated; i++) {\r\n this.hashEntries[j++] = 0 - 1; // index of vertex\r\n this.hashEntries[j++] = 0 - 1; // next hash entry index\r\n }\r\n this.numHashEntryIndex = 0;\r\n return 0;\r\n }\r\n\r\n /**\r\n * Allocate and return new hash entry. Just check possible amount.\r\n *\r\n * @returns {number} index of hash entry, that can be used for geometry add vertex functionality\r\n */\r\n getNewHashEntry() {\r\n if (this.numHashEntryIndex < this.numHashEtriesAllocated) {\r\n const i = this.numHashEntryIndex;\r\n this.numHashEntryIndex++;\r\n return i;\r\n }\r\n return 0 - 1;\r\n }\r\n\r\n /**\r\n * Add vertex to geometry structure\r\n * using vertex hash table to quickly check, is this vertex already exist in geometry\r\n *\r\n * @param {object} geoOut Geometry to build\r\n * @param {Vector3} vAdd Vertex to add\r\n * @returns {number} index of added (or existing) vertex in geometry.\r\n */\r\n addVertexToGeo(geoOut, vAdd) {\r\n let entry;\r\n const oneHynberes = 0.01;\r\n const n815851 = 815851;\r\n const n37633 = 37633;\r\n const n2453543 = 2453543;\r\n const r106 = 1.0e-6;\r\n\r\n const hashResolution = this.marCubeResoultion << 2;\r\n const v = new THREE.Vector3();\r\n const ix = Math.floor(hashResolution * (vAdd.x - this.vBoxMin.x) / (this.vBoxMax.x + oneHynberes - this.vBoxMin.x));\r\n const iy = Math.floor(hashResolution * (vAdd.y - this.vBoxMin.y) / (this.vBoxMax.y + oneHynberes - this.vBoxMin.y));\r\n const iz = Math.floor(hashResolution * (vAdd.z - this.vBoxMin.z) / (this.vBoxMax.z + oneHynberes - this.vBoxMin.z));\r\n let iHash = ix * n815851 + iz * n37633 + iy * n2453543;\r\n iHash &= (HASH_SIZE - 1);\r\n const hLineIndex = iHash + iHash;\r\n\r\n // search vertex via hash\r\n // search in hash list\r\n if (this.vBoxMin !== null && this.vBoxMax !== null) {\r\n for (entry = this.hashLines[hLineIndex + 1]; entry >= 0; entry = this.hashEntries[entry * 2 + 1]) {\r\n const ind = this.hashEntries[entry * 2 + 0]; // vertex index\r\n v.copy(geoOut._vertices[ind]);\r\n v.x -= vAdd.x;\r\n v.y -= vAdd.y;\r\n v.z -= vAdd.z;\r\n const dot2 = v.x * v.x + v.y * v.y + v.z * v.z;\r\n if (dot2 < r106) {\r\n return ind;\r\n } // if (found)\r\n } // for (entry)\r\n } // search\r\n\r\n // add new vertex to geometry\r\n if (geoOut._numVertices >= this.maxNumVertices) {\r\n return 0 - 1;\r\n }\r\n\r\n const iVertAdd = geoOut._numVertices;\r\n geoOut._vertices[iVertAdd].copy(vAdd);\r\n\r\n // add to hash\r\n if (this.vBoxMin !== null && this.vBoxMax !== null) {\r\n entry = this.getNewHashEntry();\r\n if (entry < 0) {\r\n return 0 - 1;\r\n }\r\n const entryFirst = this.hashLines[hLineIndex + 1];\r\n this.hashLines[hLineIndex + 1] = entry;\r\n this.hashEntries[entry * 2 + 0] = iVertAdd;\r\n this.hashEntries[entry * 2 + 1] = entryFirst;\r\n\r\n this.hashLines[hLineIndex + 0]++; // num vertices in line ++\r\n }\r\n geoOut._numVertices++;\r\n return iVertAdd;\r\n }\r\n\r\n /**\r\n *\r\n * @param {number} side some placeholder description\r\n * @param {number} probeSphereRadius some placeholder description\r\n * @param {object} vBoxMin some placeholder description\r\n * @param {object} vBoxMax some placeholder description\r\n * @param {object} geoOut some placeholder description\r\n * @param {object} corners some placeholder description\r\n * @returns {number} always 0\r\n */\r\n modifyExcludedFromGeo(\r\n side,\r\n probeSphereRadius,\r\n vBoxMin,\r\n vBoxMax,\r\n geoOut,\r\n corners,\r\n ) {\r\n let ind;\r\n let distToSphere;\r\n let distToBorder;\r\n const r11 = 1.1;\r\n\r\n function innerBlockWorkAround() {\r\n if (distToBorder > 0.0) {\r\n // point is inside probe sphere\r\n if (corners[ind] < 0.0) {\r\n corners[ind] = distToBorder; // was inside surface, now is oustide ( > 0)\r\n }\r\n if (distToBorder > corners[ind]) {\r\n corners[ind] = distToBorder; // find positive maximum\r\n }\r\n } else if (distToBorder > corners[ind]) { // point is outside sphere\r\n corners[ind] = distToBorder; // find negative maximum\r\n }\r\n }\r\n\r\n const side2 = side * side;\r\n const xScale = (side - 1) / (vBoxMax.x - vBoxMin.x);\r\n const yScale = (side - 1) / (vBoxMax.y - vBoxMin.y);\r\n const zScale = (side - 1) / (vBoxMax.z - vBoxMin.z);\r\n\r\n const probeSpRad2 = (probeSphereRadius * 2) * (probeSphereRadius * 2);\r\n const sideInv = 1.0 / (side - 1);\r\n\r\n for (let i = 0; i < geoOut._numVertices; i++) {\r\n const vCenter = geoOut._vertices[i];\r\n\r\n const radEst = probeSphereRadius * r11;\r\n\r\n let indXMin = Math.floor(((vCenter.x - radEst) - vBoxMin.x) * xScale);\r\n let indYMin = Math.floor(((vCenter.y - radEst) - vBoxMin.y) * yScale);\r\n let indZMin = Math.floor(((vCenter.z - radEst) - vBoxMin.z) * zScale);\r\n\r\n let indXMax = Math.floor(((vCenter.x + radEst) - vBoxMin.x) * xScale);\r\n let indYMax = Math.floor(((vCenter.y + radEst) - vBoxMin.y) * yScale);\r\n let indZMax = Math.floor(((vCenter.z + radEst) - vBoxMin.z) * zScale);\r\n\r\n indXMin = (indXMin >= 0) ? indXMin : 0;\r\n indYMin = (indYMin >= 0) ? indYMin : 0;\r\n indZMin = (indZMin >= 0) ? indZMin : 0;\r\n indXMax = (indXMax <= (side - 1)) ? indXMax : (side - 1);\r\n indYMax = (indYMax <= (side - 1)) ? indYMax : (side - 1);\r\n indZMax = (indZMax <= (side - 1)) ? indZMax : (side - 1);\r\n\r\n for (let iy = indYMin; iy <= indYMax; iy++) {\r\n const indY = iy * side2;\r\n for (let iz = indZMin; iz <= indZMax; iz++) {\r\n const indZ = iz * side;\r\n for (let ix = indXMin; ix <= indXMax; ix++) {\r\n ind = indY + indZ + ix;\r\n // getCornerCoord(vBoxMin, vBoxMax, ix, iy, iz, side, &vCorner);\r\n let t = ix * sideInv;\r\n const xCorner = vBoxMin.x * (1.0 - t) + vBoxMax.x * t;\r\n t = iy * sideInv;\r\n const yCorner = vBoxMin.y * (1.0 - t) + vBoxMax.y * t;\r\n t = iz * sideInv;\r\n const zCorner = vBoxMin.z * (1.0 - t) + vBoxMax.z * t;\r\n\r\n const dx = xCorner - vCenter.x;\r\n const dy = yCorner - vCenter.y;\r\n const dz = zCorner - vCenter.z;\r\n const dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 < probeSpRad2) {\r\n distToSphere = Math.sqrt(dist2);\r\n distToBorder = -(distToSphere - probeSphereRadius);\r\n innerBlockWorkAround();\r\n } // if (dist from corner point to sphere center more 2 radiuses)\r\n } // for (ix)\r\n } // for (iz)\r\n } // for (iy)\r\n } // for (i) all geo vertices\r\n return 0;\r\n }\r\n\r\n _innerBuild() {\r\n let ok;\r\n const expandFactor = 1.2;\r\n\r\n // performance test\r\n // this.performanceTest();\r\n\r\n // Create temporary atoms (but colored)\r\n const packedArrays = {\r\n posRad: this._posRad,\r\n colors: this._colors,\r\n atoms: this._opts.atoms,\r\n };\r\n this.complex = this._opts.parent;\r\n this.atoms = packedArrays.atoms;\r\n this.meshResolution = this._opts.gridSpacing;\r\n this.atomRadiusScale = this._opts.radScale;\r\n this.colorMode = this._opts.colorMode;\r\n this.probeRadius = this._opts.probeRadius;\r\n this.useVertexColors = true;\r\n this.excludeProbe = this._opts.excludeProbe;\r\n this.visibilitySelector = this._opts.visibilitySelector;\r\n\r\n this.geoOut = null;\r\n\r\n this.hashLines = null;\r\n this.hashEntries = null;\r\n this.numHashEtriesAllocated = 0;\r\n this.numHashEntryIndex = 0;\r\n this.maxNumVertices = 0;\r\n this.maxNumTriangles = 0;\r\n\r\n const atomsColored = new Array(this.atoms.length);\r\n this.convertToAtomsColored(packedArrays, atomsColored);\r\n\r\n // find bbox for spheres scene\r\n const vBoxMin = this.vBoxMin = new THREE.Vector3();\r\n const vBoxMax = this.vBoxMax = new THREE.Vector3();\r\n this.getBoundingBox(atomsColored, vBoxMin, vBoxMax);\r\n\r\n const marCubeResoultion = this.marCubeResoultion = this.meshResolution * (2 + 2);\r\n\r\n // build grid corners for Marching cube algorithm\r\n const side = marCubeResoultion;\r\n const side2 = side * side;\r\n const side3 = side2 * side;\r\n const corners = utils.allocateTyped(Float32Array, side3);\r\n const rProbeRadius = this.probeRadius * this.atomRadiusScale;\r\n\r\n this.calculateGridCorners(corners, side, vBoxMin, vBoxMax, atomsColored, rProbeRadius);\r\n\r\n const numCells = marCubeResoultion - 1;\r\n const cube = new IsoSurfaceMarchCube();\r\n ok = cube.create(numCells);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n // copy corners to cells\r\n const vCellStep = new THREE.Vector3();\r\n vCellStep.x = (vBoxMax.x - vBoxMin.x) / numCells;\r\n vCellStep.y = (vBoxMax.y - vBoxMin.y) / numCells;\r\n vCellStep.z = (vBoxMax.z - vBoxMin.z) / numCells;\r\n\r\n let numIntersectedCellsEstim = this.getNumIntersectedCells(side, numCells, corners, cube);\r\n let maxNumVertices = Math.floor(numIntersectedCellsEstim * expandFactor);\r\n let maxNumTriangles = Math.floor(numIntersectedCellsEstim * expandFactor * 2);\r\n\r\n this.geoOut = new IsoSurfaceGeo(maxNumVertices, maxNumTriangles, this.useVertexColors);\r\n\r\n ok = this.createVertexHash(maxNumVertices, maxNumTriangles);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n\r\n // build voxel world (used to check triangle-to-atom tie and to calculate normals and colors)\r\n let probeRadForNormalsColors = rProbeRadius;\r\n if (this.excludeProbe) {\r\n probeRadForNormalsColors = 0.01;\r\n }\r\n this.voxelWorld = new IsosurfaceBuildNormals(\r\n atomsColored.length,\r\n atomsColored,\r\n vBoxMin,\r\n vBoxMax,\r\n probeRadForNormalsColors,\r\n );\r\n this.voxelWorld.createVoxels();\r\n\r\n ok = this.buildGeoFromCorners(marCubeResoultion, vBoxMin, vBoxMax, corners, vCellStep, cube);\r\n if (this.excludeProbe) {\r\n // using 3d mesh (geoOut) as a surface points\r\n // move probe sphere and try to minimuze corners values\r\n this.modifyExcludedFromGeo(side, rProbeRadius, vBoxMin, vBoxMax, this.geoOut, corners);\r\n\r\n // delete old builded geo\r\n this.geoOut._vertices = null;\r\n this.geoOut._colors = null;\r\n this.geoOut._indices = null;\r\n this.geoOut._normals = null;\r\n this.geoOut._numVertices = 0;\r\n this.geoOut._numTriangles = 0;\r\n this.geoOut = null;\r\n\r\n // estimage geo vertices budget again\r\n numIntersectedCellsEstim = this.getNumIntersectedCells(side, numCells, corners, cube);\r\n maxNumVertices = Math.floor(numIntersectedCellsEstim * expandFactor);\r\n maxNumTriangles = Math.floor(numIntersectedCellsEstim * expandFactor * 2);\r\n\r\n // creates empty new geometry\r\n this.geoOut = new IsoSurfaceGeo(maxNumVertices, maxNumTriangles, this.useVertexColors);\r\n ok = this.createVertexHash(maxNumVertices, maxNumTriangles);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n // build vertices and triangles from corners values\r\n ok = this.buildGeoFromCorners(side, vBoxMin, vBoxMax, corners, vCellStep, cube);\r\n }\r\n\r\n // build vertex normals\r\n this.voxelWorld.buildNormals(this.geoOut._vertices.length, this.geoOut._vertices, this.geoOut._normals);\r\n // More value : more smooth color mixing\r\n // value about 0.7: very rough colors borders\r\n let radiusColorSmoothness = 6.5;\r\n if (this.excludeProbe) {\r\n radiusColorSmoothness -= 1.5;\r\n }\r\n if (this.useVertexColors) {\r\n this.voxelWorld.buildColors(\r\n this.geoOut._vertices.length,\r\n this.geoOut._vertices,\r\n this.geoOut._colors,\r\n radiusColorSmoothness,\r\n );\r\n }\r\n this.voxelWorld.destroyVoxels();\r\n this.voxelWorld = null;\r\n\r\n // remove objects\r\n cube.destroy();\r\n\r\n return ok;\r\n }\r\n}\r\n\r\n// All code below must be erased from every device and each developer's memory\r\n\r\nexport default SSIsosurfaceGeometry;\r\n","import * as THREE from 'three';\r\nimport EventDispatcher from '../../utils/EventDispatcher';\r\n\r\nfunction createLabel(fieldTxt, className) {\r\n const text = document.createElement('div');\r\n text.className = className;\r\n\r\n if (typeof fieldTxt === 'string') {\r\n const spanText = document.createElement('span');\r\n spanText.style.fontSize = '150%';\r\n const strings = fieldTxt.split('\\n');\r\n\r\n for (let i = 0, n = strings.length; i < n; ++i) {\r\n const spanNodeP = document.createElement('span');\r\n const spanNodeText = document.createTextNode(strings[i]);\r\n spanNodeP.appendChild(spanNodeText);\r\n spanText.appendChild(spanNodeP);\r\n if (i < n - 1) {\r\n spanText.appendChild(document.createElement('br'));\r\n }\r\n }\r\n\r\n text.appendChild(spanText);\r\n } else {\r\n text.appendChild(fieldTxt);\r\n }\r\n text.worldPos = new THREE.Vector3();\r\n return text;\r\n}\r\nclass LabelsGeometry extends EventDispatcher {\r\n constructor(instanceCount, opts) {\r\n super();\r\n this._opts = opts;\r\n this.items = [];\r\n this.needsUpdate = false;\r\n\r\n let xTranslation = -50;\r\n let yTranslation = -50;\r\n switch (opts.horizontalAlign) {\r\n case 'left':\r\n xTranslation = 0;\r\n break;\r\n case 'right':\r\n xTranslation = -100;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n switch (opts.verticalAlign) {\r\n case 'top':\r\n yTranslation = -100;\r\n break;\r\n case 'bottom':\r\n yTranslation = 0;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n const deltaPos = new THREE.Vector3(opts.dx || 0, opts.dy || 0, opts.dz || 0);\r\n this.userData = {\r\n translation: `translate(${xTranslation}%, ${yTranslation}%)`,\r\n offset: deltaPos,\r\n };\r\n }\r\n\r\n setItem(itemIdx, itemPos, fieldTxt) {\r\n const opts = this._opts;\r\n const text = this.items[itemIdx] || createLabel(fieldTxt, 'label');\r\n\r\n text.worldPos.copy(itemPos);\r\n text.style.textAlign = opts.horizontalAlign;\r\n text.style.verticalAlign = opts.verticalAlign;\r\n this.items[itemIdx] = text;\r\n }\r\n\r\n setColor(itemIdx, fColor, bColor) {\r\n const text = this.items[itemIdx];\r\n text.opts = {\r\n color: fColor,\r\n background: bColor,\r\n };\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.needsUpdate = true;\r\n this.dispatchEvent({ type: 'update' });\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n }\r\n\r\n // unimplemented functions\r\n raycast() {\r\n }\r\n\r\n setOpacity() {\r\n\r\n }\r\n\r\n getSubset() {\r\n return [];\r\n }\r\n}\r\n\r\nexport default LabelsGeometry;\r\n","import InstancedSpheresGeometry from './InstancedSpheresGeometry';\r\nimport SimpleSpheresGeometry from './SimpleSpheresGeometry';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\nimport Instanced2CCylindersGeometry from './Instanced2CCylindersGeometry';\r\nimport ExtrudedObjectsGeometry from './ExtrudedObjectsGeometry';\r\nimport ChunkedLinesGeometry from './ChunkedLinesGeometry';\r\nimport TwoColorLinesGeometry from './TwoColorLinesGeometry';\r\nimport CrossGeometry from './CrossGeometry';\r\nimport QuickSurfGeometry from './QuickSurfGeometry';\r\nimport ContactSurfaceGeometry from './ContactSurfaceGeometry';\r\nimport SSIsosurfaceGeometry from './SSIsosurfaceGeometry';\r\nimport LabelsGeometry from './LabelsGeometry';\r\n\r\nexport default {\r\n InstancedSpheresGeometry,\r\n SimpleSpheresGeometry,\r\n Simple2CCylindersGeometry,\r\n Instanced2CCylindersGeometry,\r\n ExtrudedObjectsGeometry,\r\n ChunkedLinesGeometry,\r\n TwoColorLinesGeometry,\r\n CrossGeometry,\r\n QuickSurfGeometry,\r\n ContactSurfaceGeometry,\r\n SSIsosurfaceGeometry,\r\n LabelsGeometry,\r\n};\r\n","export default {\r\n\r\n precision: 'mediump',\r\n\r\n /**\r\n *\r\n * @param {THREE.WebGLRenderer} renderer\r\n */\r\n init(renderer) {\r\n this.precision = renderer.capabilities.getMaxPrecision('highp');\r\n },\r\n};\r\n","import * as THREE from 'three';\r\n\r\nconst noiseWidth = 4;\r\nconst noiseHeight = 4;\r\nconst _noiseData = new Uint8Array([\r\n 24, 52, 0, 255, 254, 145, 0, 255, 122, 0, 0, 255, 7, 170, 0, 255,\r\n 34, 214, 0, 255, 173, 8, 0, 255, 86, 249, 0, 255, 160, 4, 0, 255,\r\n 226, 46, 0, 255, 224, 211, 0, 255, 3, 157, 0, 255, 174, 247, 0, 255,\r\n 12, 182, 0, 255, 220, 216, 0, 255, 1, 109, 0, 255, 253, 154, 0, 255,\r\n]);\r\nconst _noiseWrapS = THREE.RepeatWrapping;\r\nconst _noiseWrapT = THREE.RepeatWrapping;\r\nconst _noiseMinFilter = THREE.NearestFilter;\r\nconst _noiseMagFilter = THREE.NearestFilter;\r\nconst _noiseMapping = THREE.UVMapping;\r\nconst noiseTexture = new THREE.DataTexture(\r\n _noiseData,\r\n noiseWidth,\r\n noiseHeight,\r\n THREE.RGBAFormat,\r\n THREE.UnsignedByteType,\r\n _noiseMapping,\r\n _noiseWrapS,\r\n _noiseWrapT,\r\n _noiseMagFilter,\r\n _noiseMinFilter,\r\n 1,\r\n);\r\nnoiseTexture.needsUpdate = true;\r\n\r\nexport default {\r\n noiseWidth,\r\n noiseHeight,\r\n noiseTexture,\r\n};\r\n","import * as THREE from 'three';\r\nimport vertexShader from './Uber.vert';\r\nimport fragmentShader from './Uber.frag';\r\nimport capabilities from '../capabilities';\r\nimport noise from '../noiseTexture';\r\n\r\n// Length of _samplesKernel is used in Uber.frag\r\n// If you want to change length of _samplesKernel, please, remember change it in Uber.frag too.\r\n// You can easy find places for replace using word:_samplesKernel\r\nconst _samplesKernel = [\r\n new THREE.Vector2(-0.541978, 0.840393),\r\n new THREE.Vector2(0.125533, -0.992089),\r\n new THREE.Vector2(0.374329, 0.927296),\r\n new THREE.Vector2(-0.105475, 0.994422),\r\n];\r\n\r\nconst defaultUniforms = THREE.UniformsUtils.merge([\r\n\r\n THREE.UniformsLib.fog,\r\n THREE.UniformsLib.lights,\r\n\r\n {\r\n // are updated automatically by three.js (see THREE.ShaderLib.common)\r\n diffuse: { value: new THREE.Color(0xeeeeee) },\r\n opacity: { value: 1.0 },\r\n\r\n specular: { type: 'c', value: new THREE.Color(0x111111) },\r\n shininess: { type: 'f', value: 30 },\r\n fixedColor: { type: 'c', value: new THREE.Color(0xffffff) },\r\n zOffset: { type: 'f', value: 0.0 },\r\n zClipValue: { type: 'f', value: 0.0 },\r\n clipPlaneValue: { type: 'f', value: 0.0 },\r\n nearPlaneValue: { type: 'f', value: -0.5 },\r\n invModelViewMatrix: { type: '4fv', value: new THREE.Matrix4() },\r\n world2colorMatrix: { type: '4fv', value: new THREE.Matrix4() },\r\n dashedLineSize: { type: 'f', value: 0.1 },\r\n dashedLinePeriod: { type: 'f', value: 0.2 },\r\n projMatrixInv: { type: '4fv', value: new THREE.Matrix4() },\r\n viewport: { type: 'v2', value: new THREE.Vector2() },\r\n lineWidth: { type: 'f', value: 2.0 },\r\n // default value must be the same as settings\r\n fogAlpha: { type: 'f', value: 1.0 },\r\n samplesKernel: { type: 'v2v', value: null },\r\n noiseTex: { type: 't', value: null },\r\n noiseTexelSize: { type: 'v2', value: null },\r\n srcTexelSize: { type: 'v2', value: null },\r\n },\r\n\r\n]);\r\n\r\nconst uberOptionNames = [\r\n 'shininess',\r\n 'opacity',\r\n 'zOffset',\r\n 'diffuse',\r\n 'specular',\r\n 'fixedColor',\r\n 'zClipCoef',\r\n 'zClipValue',\r\n 'clipPlaneValue',\r\n 'world2colorMatrix',\r\n 'dashedLineSize',\r\n 'dashedLinePeriod',\r\n 'projMatrixInv',\r\n 'viewport',\r\n 'lineWidth',\r\n 'fogAlpha',\r\n 'samplesKernel',\r\n 'noiseTex',\r\n 'noiseTexelSize',\r\n 'srcTexelSize',\r\n];\r\n\r\n// properties that convert to uniforms\r\nconst uberOptions = {\r\n diffuse: new THREE.Color(0xffffff), // used in phong lighting\r\n specular: new THREE.Color(0x111111), // used in phong lighting\r\n shininess: 30, // used in phong lighting\r\n opacity: 1, // set mesh opacity\r\n fixedColor: new THREE.Color(0xffffff), // color to override (see OVERRIDE_COLOR)\r\n zOffset: 0.0, // used fo zsprites (see SPHERE_SPRITE CYLINDER_SPRITE)\r\n zClipCoef: 2.0, // use for Surfs clipping (mesh param, isn't used in shader) FIXME move to representation param\r\n zClipValue: 0.0, // value to clip Surfs in shader (see ZCLIP)\r\n clipPlaneValue: 0.0, // value to clip scene globally (see CLIPPLANE)\r\n world2colorMatrix: new THREE.Matrix4(),\r\n dashedLineSize: 0.1,\r\n dashedLinePeriod: 0.3,\r\n projMatrixInv: new THREE.Matrix4(),\r\n viewport: new THREE.Vector2(800, 600),\r\n lineWidth: 2.0,\r\n fogAlpha: 1.0,\r\n samplesKernel: _samplesKernel,\r\n noiseTex: noise.noiseTexture,\r\n noiseTexelSize: new THREE.Vector2(1.0 / noise.noiseWidth, 1.0 / noise.noiseHeight),\r\n srcTexelSize: new THREE.Vector2(1.0 / 800.0, 1.0 / 600.0),\r\n copy(source) {\r\n this.diffuse.copy(source.diffuse);\r\n this.specular.copy(source.specular);\r\n this.shininess = source.shininess;\r\n this.opacity = source.opacity;\r\n this.fixedColor.copy(source.fixedColor);\r\n this.zOffset = source.zOffset;\r\n this.zClipCoef = source.zClipCoef;\r\n this.zClipValue = source.zClipValue;\r\n this.clipPlaneValue = source.clipPlaneValue;\r\n this.world2colorMatrix.copy(source.world2colorMatrix);\r\n this.dashedLineSize = source.dashedLineSize;\r\n this.dashedLinePeriod = source.dashedLinePeriod;\r\n this.projMatrixInv = source.projMatrixInv;\r\n this.viewport = source.viewport;\r\n this.lineWidth = source.lineWidth; // used for thick lines only\r\n this.toonShading = source.toonShading;\r\n this.fogAlpha = source.fogAlpha;\r\n this.samplesKernel = source.samplesKernel;\r\n this.noiseTex = source.noiseTex;\r\n this.noiseTexelSize = source.noiseTexelSize;\r\n this.srcTexelSize = source.srcTexelSize;\r\n },\r\n};\r\n\r\nclass UberMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // add fog\r\n this.fog = true;\r\n // used for instanced geometry\r\n this.instancedPos = false;\r\n this.instancedMatrix = false;\r\n // atoms and links color\r\n this.attrColor = false;\r\n // second link color for cylinders\r\n this.attrColor2 = false;\r\n //\r\n this.attrAlphaColor = false;\r\n // overrides color for all vertices (used in selection)\r\n this.overrideColor = false;\r\n // zsrpites\r\n this.sphereSprite = false;\r\n this.cylinderSprite = false;\r\n // clip Surfs individually\r\n this.zClip = false;\r\n // clip scene with global clip plane\r\n this.clipPlane = false;\r\n // enable fake (chess-like) opacity\r\n this.fakeOpacity = false;\r\n // render only depth, don't take care about the pixel color (used for transparency depth prepass)\r\n this.prepassTransparancy = false;\r\n // used to render pixel positions\r\n this.colorFromPos = false;\r\n // used to render shadowmap\r\n this.shadowmap = false;\r\n // used to describe shadowmap type\r\n this.shadowmapType = 'random';\r\n // used to render pixel view deph\r\n this.colorFromDepth = false;\r\n // mark that rendering is for orthographic camera\r\n this.orthoCam = false;\r\n // used to render dashed line\r\n this.dashedLine = false;\r\n // mark as transparent\r\n this.transparent = true;\r\n // mark as thick lines\r\n this.thickLine = false;\r\n // makes fog begin transparency (required for transparent background)\r\n this.fogTransparent = false;\r\n // used to render surface normals to G buffer for ssao effect\r\n this.normalsToGBuffer = false;\r\n // used for toon material\r\n this.toonShading = false;\r\n\r\n // uber options of \"root\" materials are inherited from single uber-options object that resides in prototype\r\n this.uberOptions = Object.create(UberMaterial.prototype.uberOptions);\r\n\r\n // set default values\r\n super.setValues({\r\n glslVersion: THREE.GLSL3,\r\n vertexShader: this.precisionString() + vertexShader,\r\n fragmentShader: this.precisionString() + fragmentShader,\r\n uniforms: THREE.UniformsUtils.clone(defaultUniforms),\r\n lights: true,\r\n fog: true,\r\n side: THREE.DoubleSide,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n precisionString() {\r\n const { precision } = capabilities;\r\n const str = `precision ${precision} float;\\n`\r\n + `precision ${precision} int;\\n\\n`;\r\n return str;\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n\r\n this.fragmentShader = source.fragmentShader;\r\n this.vertexShader = source.vertexShader;\r\n\r\n this.uniforms = THREE.UniformsUtils.clone(source.uniforms);\r\n this.defines = { ...source.defines };\r\n this.extensions = source.extensions;\r\n\r\n this.fog = source.fog;\r\n this.instancedPos = source.instancedPos;\r\n this.instancedMatrix = source.instancedMatrix;\r\n this.attrColor = source.attrColor;\r\n this.attrColor2 = source.attrColor2;\r\n this.attrAlphaColor = source.attrAlphaColor;\r\n this.overrideColor = source.overrideColor;\r\n this.sphereSprite = source.sphereSprite;\r\n this.cylinderSprite = source.cylinderSprite;\r\n this.zClip = source.zClip;\r\n this.clipPlane = source.clipPlane;\r\n this.fakeOpacity = source.fakeOpacity;\r\n this.colorFromPos = source.colorFromPos;\r\n this.shadowmap = source.shadowmap;\r\n this.shadowmapType = source.shadowmapType;\r\n this.colorFromDepth = source.colorFromDepth;\r\n this.orthoCam = source.orthoCam;\r\n this.prepassTransparancy = source.prepassTransparancy;\r\n this.dashedLine = source.dashedLine;\r\n this.thickLine = source.thickLine;\r\n this.fogTransparent = source.fogTransparent;\r\n this.normalsToGBuffer = source.normalsToGBuffer;\r\n this.toonShading = source.toonShading;\r\n\r\n this.uberOptions.copy(source.uberOptions);\r\n\r\n return this;\r\n }\r\n\r\n // create copy of this material\r\n // its options are prototyped after this material's options\r\n createInstance() {\r\n const inst = new UberMaterial();\r\n inst.copy(this);\r\n inst.uberOptions = Object.create(this.uberOptions);\r\n return inst;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n const extensions = {};\r\n\r\n if (this.fog) {\r\n defines.USE_FOG = 1;\r\n }\r\n if (this.instancedPos) {\r\n defines.INSTANCED_POS = 1;\r\n }\r\n if (this.instancedMatrix) {\r\n defines.INSTANCED_MATRIX = 1;\r\n }\r\n if (this.attrColor) {\r\n defines.ATTR_COLOR = 1;\r\n }\r\n if (this.attrColor2) {\r\n defines.ATTR_COLOR2 = 1;\r\n }\r\n if (this.attrAlphaColor) {\r\n defines.ATTR_ALPHA_COLOR = 1;\r\n }\r\n if (this.overrideColor) {\r\n defines.OVERRIDE_COLOR = 1;\r\n }\r\n if (this.sphereSprite) {\r\n defines.SPHERE_SPRITE = 1;\r\n extensions.fragDepth = true;\r\n }\r\n if (this.cylinderSprite) {\r\n defines.CYLINDER_SPRITE = 1;\r\n extensions.fragDepth = true;\r\n }\r\n if (this.zClip) {\r\n defines.ZCLIP = 1;\r\n }\r\n if (this.clipPlane) {\r\n defines.CLIP_PLANE = 1;\r\n }\r\n if (this.fakeOpacity) {\r\n defines.FAKE_OPACITY = 1;\r\n }\r\n if (this.lights) {\r\n defines.USE_LIGHTS = 1;\r\n }\r\n if (this.colorFromPos) {\r\n defines.COLOR_FROM_POS = 1;\r\n }\r\n if (this.shadowmap) {\r\n defines.SHADOWMAP = 1;\r\n if (this.shadowmapType === 'pcf') {\r\n defines.SHADOWMAP_PCF_SHARP = 1;\r\n } else if (this.shadowmapType === 'random') {\r\n defines.SHADOWMAP_PCF_RAND = 1;\r\n } else {\r\n defines.SHADOWMAP_BASIC = 1;\r\n }\r\n }\r\n if (this.colorFromDepth) {\r\n defines.COLOR_FROM_DEPTH = 1;\r\n }\r\n if (this.orthoCam) {\r\n defines.ORTHOGRAPHIC_CAMERA = 1;\r\n }\r\n if (this.prepassTransparancy) {\r\n defines.PREPASS_TRANSP = 1;\r\n }\r\n if (this.dashedLine) {\r\n defines.DASHED_LINE = 1;\r\n }\r\n if (this.thickLine) {\r\n defines.THICK_LINE = 1;\r\n }\r\n if (this.fogTransparent) {\r\n defines.FOG_TRANSPARENT = 1;\r\n }\r\n if (this.normalsToGBuffer) {\r\n extensions.drawBuffers = true;\r\n defines.NORMALS_TO_G_BUFFER = 1;\r\n }\r\n if (this.toonShading) {\r\n defines.TOON_SHADING = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n this.extensions = extensions;\r\n }\r\n\r\n setUberOptions(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n for (const key in values) {\r\n if (!values.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n\r\n if (this.uberOptions[key] instanceof THREE.Color) {\r\n this.uberOptions[key] = values[key].clone();\r\n } else {\r\n this.uberOptions[key] = values[key];\r\n }\r\n }\r\n }\r\n\r\n clone(shallow) {\r\n if (!shallow) {\r\n return super.clone();\r\n }\r\n return this.createInstance();\r\n }\r\n\r\n updateUniforms() {\r\n const self = this;\r\n\r\n uberOptionNames.forEach((p) => {\r\n if (self.uniforms.hasOwnProperty(p)) {\r\n if (self.uberOptions[p] instanceof THREE.Color\r\n || self.uberOptions[p] instanceof THREE.Matrix4) {\r\n self.uniforms[p].value = self.uberOptions[p].clone();\r\n } else {\r\n self.uniforms[p].value = self.uberOptions[p];\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\nUberMaterial.prototype.uberOptions = uberOptions;\r\n\r\nexport default UberMaterial;\r\n","import UberMaterial from '../shaders/UberMaterial';\r\n\r\nexport default function (SuperClass) {\r\n class NewObjectType extends SuperClass {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.onBeforeRender = NewObjectType.prototype.onBeforeRender;\r\n }\r\n\r\n onBeforeRender(renderer, scene, camera, geometry, material, group) {\r\n this._onBeforeRender(renderer, scene, camera, geometry, material, group);\r\n this._update();\r\n }\r\n\r\n _onBeforeRender() {\r\n }\r\n\r\n _update() {\r\n const { material } = this;\r\n if (!material) {\r\n return;\r\n }\r\n\r\n if (material instanceof UberMaterial) {\r\n material.updateUniforms();\r\n }\r\n }\r\n }\r\n\r\n return NewObjectType;\r\n}\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass ZSpriteMesh extends Mesh {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n\r\n _onBeforeRender(renderer, scene, camera, _geometry, _material, _group) {\r\n Mesh.prototype._onBeforeRender.call(this, renderer, scene, camera);\r\n const { material } = this;\r\n if (!material) {\r\n return;\r\n }\r\n\r\n if (material.uniforms.invModelViewMatrix) {\r\n // NOTE: update of modelViewMatrix inside threejs is done after onBeforeRender call,\r\n // so we have to do it manually in that place\r\n this.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, this.matrixWorld);\r\n // get inverse matrix\r\n material.uniforms.invModelViewMatrix.value.copy(this.modelViewMatrix).invert();\r\n material.uniforms.nearPlaneValue.value = camera.near;\r\n material.uniformsNeedUpdate = true;\r\n }\r\n }\r\n}\r\n\r\nexport default ZSpriteMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass ZClippedMesh extends Mesh {\r\n constructor(geometry, material) {\r\n super(geometry, material);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n\r\n static _mvLength = new THREE.Vector3();\r\n\r\n static _center = new THREE.Vector3();\r\n\r\n static _modelView = new THREE.Matrix4();\r\n\r\n _onBeforeRender(renderer, scene, camera) {\r\n Mesh.prototype._onBeforeRender.call(this, renderer, scene, camera);\r\n\r\n const geo = this.geometry;\r\n const { material } = this;\r\n if (!geo.zClip || !material.uberOptions) {\r\n return;\r\n }\r\n\r\n const zClipCoef = 0.5;\r\n\r\n const modelView = ZClippedMesh._modelView;\r\n const mvLength = ZClippedMesh._mvLength;\r\n const center = ZClippedMesh._center;\r\n\r\n modelView.multiplyMatrices(this.matrixWorld, camera.matrixWorldInverse);\r\n const s = mvLength.setFromMatrixColumn(modelView, 0).length();\r\n center.copy(geo.boundingSphere.center);\r\n\r\n this.localToWorld(center);\r\n material.uberOptions.zClipValue = camera.position.z - center.z\r\n - s * (zClipCoef * geo.boundingSphere.radius);\r\n }\r\n}\r\n\r\nexport default ZClippedMesh;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport CSS2DObject from '../CSS2DObject';\r\nimport utils from '../../utils';\r\n\r\nclass TextMesh extends THREE.Group {\r\n constructor(geometry, _material) {\r\n super();\r\n this.geometry = geometry;\r\n\r\n const self = this;\r\n self.initialized = false;\r\n this.geometry.addEventListener('update', () => {\r\n self.update();\r\n });\r\n }\r\n\r\n init() {\r\n const { children } = this;\r\n for (let i = children.length - 1; i >= 0; --i) {\r\n this.remove(children[i]);\r\n }\r\n\r\n const { items, userData } = this.geometry;\r\n for (let i = 0, n = items.length; i < n; ++i) {\r\n const srcItem = items[i];\r\n if (!srcItem) {\r\n continue;\r\n }\r\n const item = utils.shallowCloneNode(srcItem);\r\n const label = new CSS2DObject(item);\r\n label.userData = _.clone(userData);\r\n const el = label.getElement();\r\n el.style.visibility = 'visible';\r\n label.source = srcItem;\r\n this.add(label);\r\n }\r\n this.initialized = true;\r\n }\r\n\r\n update() {\r\n const geo = this.geometry;\r\n if (!geo.needsUpdate) {\r\n return;\r\n }\r\n const { children } = this;\r\n if (!this.initialized) {\r\n this.init();\r\n }\r\n\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n const item = child.source;\r\n child.position.copy(item.worldPos);\r\n child.userData.color = item.opts.color;\r\n child.userData.background = item.opts.background;\r\n }\r\n }\r\n}\r\n\r\nexport default TextMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass SimpleMesh extends Mesh {\r\n constructor(geometry, material) {\r\n super(geometry, material);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n}\r\n\r\nexport default SimpleMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\nconst _viewport = new THREE.Vector2();\r\n\r\nclass ThickLineMesh extends Mesh {\r\n _onBeforeRender(renderer, scene, camera, _geometry, _material, _group) {\r\n const { material } = this;\r\n if (!material.uberOptions) {\r\n return;\r\n }\r\n\r\n material.uberOptions.projMatrixInv.copy(camera.projectionMatrix).invert();\r\n renderer.getSize(_viewport);\r\n material.uberOptions.viewport.set(_viewport.width, _viewport.height);\r\n }\r\n}\r\n\r\nexport default ThickLineMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass InstancedMesh extends Mesh {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n}\r\n\r\nexport default InstancedMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\nimport ZSpriteMesh from './ZSpriteMesh';\r\nimport ZClippedMesh from './ZClippedMesh';\r\nimport TextMesh from './TextMesh';\r\nimport SimpleMesh from './SimpleMesh';\r\nimport ThickLineMesh from './ThickLineMesh';\r\nimport InstancedMesh from './InstancedMesh';\r\n\r\nexport default {\r\n ZClipped: ZClippedMesh,\r\n ZSprite: ZSpriteMesh,\r\n Text: TextMesh,\r\n Line: UberObject(THREE.Line),\r\n LineSegments: UberObject(THREE.LineSegments),\r\n Mesh: SimpleMesh,\r\n ThickLineMesh,\r\n Instanced: InstancedMesh,\r\n};\r\n","import geometries from '../geometries/geometries';\r\nimport meshes from './meshes';\r\nimport ThickLinesGeometry from '../geometries/ThickLinesGeometry';\r\n\r\nfunction setMatParams(params, uniforms) {\r\n return function (material) {\r\n material.setValues(params);\r\n material.setUberOptions(uniforms);\r\n };\r\n}\r\n\r\nfunction _createInstancedCylinders(useZSprites, openEnded) {\r\n function Geometry(a, b) {\r\n return new geometries.Instanced2CCylindersGeometry(a, b, useZSprites, openEnded);\r\n }\r\n return {\r\n Geometry,\r\n Object: useZSprites ? meshes.ZSprite : meshes.Instanced,\r\n initMaterial: setMatParams({\r\n instancedMatrix: true,\r\n attrColor: true,\r\n attrColor2: true,\r\n attrAlphaColor: true,\r\n cylinderSprite: useZSprites,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createLineSegmentsGeoTriplet(geo, renderParams) {\r\n const thickLines = geo.prototype instanceof ThickLinesGeometry;\r\n const lineWidth = renderParams.lineWidth || 0;\r\n return {\r\n Geometry: geo,\r\n Object: thickLines ? meshes.ThickLineMesh : meshes.LineSegments,\r\n initMaterial: setMatParams({\r\n lights: false,\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n thickLine: thickLines,\r\n }, {\r\n lineWidth,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createSimpleGeoTriplet(geoClass) {\r\n return {\r\n Geometry: geoClass,\r\n Object: meshes.Mesh,\r\n initMaterial: setMatParams({\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createIsoSurfaceGeoTriplet(geoClass, caps, settings, renderParams) {\r\n const surfaceOpts = {\r\n wireframe: !!renderParams.wireframe,\r\n fakeOpacity: settings.now.isoSurfaceFakeOpacity,\r\n zClip: renderParams.zClip,\r\n };\r\n return {\r\n Geometry: geoClass,\r\n Object: meshes.ZClipped,\r\n initMaterial: setMatParams({\r\n attrColor: true,\r\n attrAlphaColor: false,\r\n wireframe: surfaceOpts.wireframe,\r\n fakeOpacity: surfaceOpts.fakeOpacity,\r\n zClip: surfaceOpts.zClip,\r\n }),\r\n };\r\n}\r\n\r\nclass MeshCreator {\r\n static createSpheres(caps, settings) {\r\n const useZSprites = settings.now.zSprites;\r\n function Geometry(a, b) {\r\n return new geometries.InstancedSpheresGeometry(a, b, useZSprites);\r\n }\r\n return {\r\n Geometry,\r\n Object: useZSprites ? meshes.ZSprite : meshes.Instanced,\r\n initMaterial: setMatParams({\r\n instancedPos: true,\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n sphereSprite: useZSprites,\r\n }),\r\n };\r\n }\r\n\r\n static create2CClosedCylinders(_caps, _settings) {\r\n return _createInstancedCylinders(false, false);\r\n }\r\n\r\n static create2CCylinders(caps, settings) {\r\n return _createInstancedCylinders(settings.now.zSprites, true);\r\n }\r\n\r\n static create2CLines(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.TwoColorLinesGeometry, renderParams);\r\n }\r\n\r\n static createCrosses(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.CrossGeometry, renderParams);\r\n }\r\n\r\n static createExtrudedChains(_caps, _settings) {\r\n return _createSimpleGeoTriplet(geometries.ExtrudedObjectsGeometry);\r\n }\r\n\r\n static createChunkedLines(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.ChunkedLinesGeometry, renderParams);\r\n }\r\n\r\n static createQuickSurface(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.QuickSurfGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createContactSurface(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.ContactSurfaceGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createSASSES(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.SSIsosurfaceGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createLabels(_caps, _settings) {\r\n return {\r\n Geometry: geometries.LabelsGeometry,\r\n Object: meshes.Text,\r\n initMaterial() {\r\n },\r\n };\r\n }\r\n}\r\n\r\nexport default MeshCreator;\r\n","import * as THREE from 'three';\r\nimport gfxutils from '../gfxutils';\r\n\r\nclass TransformGroup extends THREE.Object3D {\r\n static _inverseMatrix = new THREE.Matrix4();\r\n\r\n static _ray = new THREE.Ray();\r\n\r\n constructor(geometry, geoParams, material, transforms) {\r\n super();\r\n this._geometry = geometry;\r\n this._geoParams = geoParams;\r\n const mat = material.createInstance();\r\n geoParams.initMaterial(mat);\r\n this._material = mat;\r\n this._transforms = transforms.length > 0 ? transforms : [new THREE.Matrix4()];\r\n const meshes = this._createMeshes(geometry);\r\n for (let i = 0, n = meshes.length; i < n; ++i) {\r\n this.add(meshes[i]);\r\n }\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const ray = TransformGroup._ray;\r\n const inverseMatrix = TransformGroup._inverseMatrix;\r\n const { children } = this;\r\n ray.copy(raycaster.ray);\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n\r\n if (!gfxutils.belongToSelectLayers(child)) {\r\n continue;\r\n }\r\n\r\n child.updateMatrixWorld();\r\n const mtx = child.matrixWorld;\r\n inverseMatrix.copy(mtx).invert();\r\n raycaster.ray.copy(ray).applyMatrix4(inverseMatrix);\r\n const childIntersects = [];\r\n this._geometry.raycast(raycaster, childIntersects);\r\n\r\n for (let j = 0, ciCount = childIntersects.length; j < ciCount; ++j) {\r\n const inters = childIntersects[j];\r\n if (inters.point) {\r\n inters.point.applyMatrix4(mtx);\r\n inters.distance = ray.origin.distanceTo(inters.point);\r\n }\r\n inters.object = child;\r\n intersects[intersects.length] = inters;\r\n }\r\n }\r\n raycaster.ray.copy(ray);\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const geos = this._geometry.getSubset(chunkIndices);\r\n const subset = [];\r\n let subIdx = 0;\r\n\r\n for (let i = 0, n = geos.length; i < n; ++i) {\r\n const meshes = this._createMeshes(geos[i]);\r\n for (let j = 0, meshCnt = meshes.length; j < meshCnt; ++j) {\r\n subset[subIdx++] = meshes[j];\r\n }\r\n }\r\n\r\n return subset;\r\n }\r\n\r\n _createMeshes(geometry) {\r\n const transforms = this._transforms;\r\n const Mesh = this._geoParams.Object;\r\n const material = this._material;\r\n const meshes = [];\r\n for (let i = 0, n = transforms.length; i < n; ++i) {\r\n const mesh = new Mesh(geometry, material);\r\n mesh.applyMatrix4(transforms[i]);\r\n meshes[i] = mesh;\r\n }\r\n\r\n return meshes;\r\n }\r\n}\r\n\r\nexport default TransformGroup;\r\n","import RCGroup from '../../RCGroup';\r\nimport TransformGroup from '../../meshes/TransformGroup';\r\n\r\nfunction wrapper(Name, args) {\r\n const params = [Name].concat(args);\r\n return Name.bind(...params);\r\n}\r\n\r\nclass ChemGroup extends RCGroup {\r\n constructor(geoParams, selection, colorer, mode, transforms, polyComplexity, material) {\r\n super();\r\n if (this.constructor === ChemGroup) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n this._selection = selection;\r\n this._mode = mode;\r\n this._colorer = colorer;\r\n this._chunksIdc = selection.chunks;\r\n this._polyComplexity = polyComplexity;\r\n this._geo = new (wrapper(geoParams.Geometry, this._makeGeoArgs()))();\r\n this._mesh = new TransformGroup(this._geo, geoParams, material, transforms);\r\n this.add(this._mesh);\r\n this._build();\r\n }\r\n\r\n _makeGeoArgs() {\r\n throw new Error('ChemGroup subclass must override _makeGeoArgs() method');\r\n }\r\n\r\n /**\r\n * Builds subset geometry by ATOMS index list\r\n *\r\n * @param {Number} mask - Representation mask\r\n * @param {Boolean} innerOnly - if true returns inner bonds only - without halves\r\n * @returns {Array} Subset geometry\r\n */\r\n getSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : false;\r\n const chunksList = this._calcChunksList(mask, innerOnly);\r\n if (chunksList.length === 0) {\r\n return [];\r\n }\r\n return this._mesh.getSubset(chunksList);\r\n }\r\n\r\n _changeSubsetOpacity(mask, value, innerOnly) {\r\n const chunksList = this._calcChunksList(mask, innerOnly);\r\n if (chunksList.length === 0) {\r\n return;\r\n }\r\n this._geo.setOpacity(chunksList, value);\r\n }\r\n\r\n enableSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : true;\r\n this._changeSubsetOpacity(mask, 1.0, innerOnly);\r\n }\r\n\r\n disableSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : true;\r\n this._changeSubsetOpacity(mask, 0.0, innerOnly);\r\n }\r\n}\r\n\r\nexport default ChemGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass AtomsGroup extends ChemGroup {\r\n raycast(raycaster, intersects) {\r\n const { atoms } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const atomsIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const atomIdx = atomsIdc[inters[i].chunkIdx];\r\n if (atomIdx < atoms.length) {\r\n inters[i].atom = atoms[atomIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const { atoms } = this._selection;\r\n const atomsIdc = this._chunksIdc;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n if ((atom.mask & mask) !== 0) {\r\n chunksList.push(i);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default AtomsGroup;\r\n","import AtomsGroup from './AtomsGroup';\r\n\r\nclass AtomsSphereGroup extends AtomsGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length, this._polyComplexity];\r\n }\r\n\r\n _build() {\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n geo.setItem(i, atom.position, mode.calcAtomRadius(atom));\r\n geo.setColor(i, colorer.getAtomColor(atom, parent));\r\n }\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n geo.setItem(i, frameData.getAtomPos(atomsIdc[i]), mode.calcAtomRadius(atom));\r\n if (updateColor) {\r\n geo.setColor(i, frameData.getAtomColor(colorer, atom));\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default AtomsSphereGroup;\r\n","import AtomsSphereGroup from './AtomsSphereGroup';\r\n\r\nclass AtomsSurfaceGroup extends AtomsSphereGroup {\r\n _makeGeoArgs() {\r\n const selectedAtoms = [];\r\n const { atoms, chunks } = this._selection;\r\n const n = chunks.length;\r\n for (let i = 0; i < n; ++i) {\r\n selectedAtoms[i] = atoms[chunks[i]];\r\n }\r\n const opts = this._mode.getSurfaceOpts();\r\n opts.atoms = selectedAtoms;\r\n return [n, opts];\r\n }\r\n}\r\nexport default AtomsSurfaceGroup;\r\n","/* This is a stub class keep it until SAS/SES is refactored */\r\n\r\nimport AtomsSphereGroup from './AtomsSphereGroup';\r\n\r\nclass AtomsSASSESGroupStub extends AtomsSphereGroup {\r\n _makeGeoArgs() {\r\n const selectedAtoms = [];\r\n const { atoms, chunks } = this._selection;\r\n const n = chunks.length;\r\n for (let i = 0; i < n; ++i) {\r\n selectedAtoms[i] = atoms[chunks[i]];\r\n }\r\n const opts = this._mode.getSurfaceOpts();\r\n opts.atoms = selectedAtoms;\r\n opts.selection = this._selection;\r\n opts.colorMode = this._colorer;\r\n return [n, opts];\r\n }\r\n}\r\n\r\nexport default AtomsSASSESGroupStub;\r\n","import AtomsGroup from './AtomsGroup';\r\nimport utils from '../../../utils';\r\n\r\nfunction adjustColor(color) {\r\n let r = (color >> 16) & 255;\r\n let g = (color >> 8) & 255;\r\n let b = color & 255;\r\n\r\n if (0.2126 * r + 0.7152 * g + 0.0722 * b > 127) {\r\n r = r * 3 / 10;\r\n g = g * 3 / 10;\r\n b = b * 3 / 10;\r\n } else {\r\n r = 255 - ((255 - r) * 3 / 10);\r\n g = 255 - ((255 - g) * 3 / 10);\r\n b = 255 - ((255 - b) * 3 / 10);\r\n }\r\n\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\nfunction inverseColor(color) {\r\n const r = (color >> 16) & 255;\r\n const g = (color >> 8) & 255;\r\n const b = color & 255;\r\n\r\n return ((255 - r) << 16) | ((255 - g) << 8) | (255 - b);\r\n}\r\n\r\nfunction getAtomText(atom) {\r\n if (atom.name.getNode() !== null) {\r\n return atom.name.getNode();\r\n }\r\n\r\n return atom.getVisualName();\r\n}\r\n\r\nconst colorMappings = {\r\n none(c) {\r\n return c;\r\n },\r\n adjust: adjustColor,\r\n inverse: inverseColor,\r\n};\r\n\r\nfunction propagateColor(color, rule) {\r\n let result;\r\n if (colorMappings.hasOwnProperty(rule)) {\r\n result = utils.hexColor(colorMappings[rule](color));\r\n } else {\r\n const val = parseInt(rule, 16);\r\n if (!Number.isNaN(val) && rule.toLowerCase().startsWith('0x')) {\r\n result = utils.hexColor(val);\r\n } else {\r\n result = '#000000';\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nconst templateMappings = {\r\n serial(a) {\r\n return a.serial;\r\n },\r\n name(a) {\r\n return a.getVisualName();\r\n },\r\n elem(a) {\r\n return a.element.name;\r\n },\r\n residue(a) {\r\n return a.residue.getType().getName();\r\n },\r\n sequence(a) {\r\n return a.residue.getSequence();\r\n },\r\n chain(a) {\r\n return a.residue.getChain().getName();\r\n },\r\n hetatm(a) {\r\n return a.isHet();\r\n },\r\n water(a) {\r\n return a.residue.getType().getName() === 'HOH' || a.residue.getType().getName() === 'WAT';\r\n },\r\n};\r\n\r\nconst parseTemplate = function (atom, str) {\r\n return str.replace(/\\{\\{(\\s*\\w+\\s*)\\}\\}/g, (m) => {\r\n let key = m.replace(/\\s+/g, '');\r\n key = key.substring(2, key.length - 2).toLowerCase();\r\n\r\n if (templateMappings.hasOwnProperty(key)) {\r\n return templateMappings[key](atom);\r\n }\r\n return 'null';\r\n });\r\n};\r\n\r\nclass AtomsTextGroup extends AtomsGroup {\r\n _makeGeoArgs() {\r\n const opts = this._mode.getLabelOpts();\r\n return [this._selection.chunks.length, opts];\r\n }\r\n\r\n _build() {\r\n const opts = this._mode.getLabelOpts();\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms, parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n const text = opts.template ? parseTemplate(atom, opts.template) : getAtomText(atom);\r\n if (!text) {\r\n continue;\r\n }\r\n const color = colorer.getAtomColor(atom, parent);\r\n const fgColor = parseInt(propagateColor(color, opts.fg).substring(1), 16);\r\n const bgColor = opts.showBg ? parseInt(propagateColor(color, opts.bg).substring(1), 16) : 'transparent';\r\n geo.setItem(i, atom.position, text);\r\n geo.setColor(i, fgColor, bgColor);\r\n }\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const opts = this._mode.getLabelOpts();\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n const text = opts.template ? parseTemplate(atom, opts.template) : getAtomText(atom);\r\n if (!text) {\r\n continue;\r\n }\r\n const color = frameData.getAtomColor(colorer, atom);\r\n const fgColor = parseInt(propagateColor(color, opts.fg).substring(1), 16);\r\n const bgColor = opts.showBg ? parseInt(propagateColor(color, opts.bg).substring(1), 16) : 'transparent';\r\n geo.setItem(i, frameData.getAtomPos(atomsIdc[i]), text);\r\n if (updateColor) {\r\n geo.setColor(i, fgColor, bgColor);\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default AtomsTextGroup;\r\n","import * as THREE from 'three';\r\nimport AtomsGroup from './AtomsGroup';\r\n\r\nfunction _slerp(omega, v1, v2, t) {\r\n const oSin = Math.sin(omega);\r\n return v1.clone().multiplyScalar(Math.sin((1 - t) * omega) / oSin).addScaledVector(v2, Math.sin(t * omega) / oSin);\r\n}\r\n\r\nclass AromaticGroup extends AtomsGroup {\r\n _buildInner(radOffset, addChunk) {\r\n const chunksToIdx = this._selection.chunks;\r\n\r\n const prevVector = new THREE.Vector3();\r\n const currVector = new THREE.Vector3();\r\n const segmentsHeight = this._segmentsHeight;\r\n const leprStep = 1.0 / segmentsHeight;\r\n const colorer = this._colorer;\r\n\r\n const { cycles, parent } = this._selection;\r\n let chunkIdx = 0;\r\n let currAtomIdx = chunksToIdx[chunkIdx];\r\n\r\n for (let cIdx = 0, cCount = cycles.length; cIdx < cCount; ++cIdx) {\r\n const cycle = cycles[cIdx];\r\n const cycAtoms = cycle.atoms;\r\n const chunkPoints = [];\r\n const tmpDir = [];\r\n const { center } = cycle;\r\n const cycleRad = cycle.radius - radOffset;\r\n const n = cycAtoms.length;\r\n let i = 0;\r\n const prevPos = cycAtoms[n - 1].position;\r\n let currPos = cycAtoms[i].position;\r\n prevVector.subVectors(prevPos, center);\r\n currVector.subVectors(currPos, center);\r\n const upDir = currVector.clone().cross(prevVector).normalize();\r\n\r\n for (; i < n; ++i) {\r\n const omega = prevVector.angleTo(currVector);\r\n tmpDir[i] = _slerp(omega, prevVector, currVector, 0.5).normalize();\r\n currPos = cycAtoms[(i + 1) % n].position;\r\n prevVector.copy(currVector);\r\n currVector.subVectors(currPos, center);\r\n }\r\n\r\n for (i = 0; i < n; ++i) {\r\n if (cycAtoms[i].index !== currAtomIdx) {\r\n continue;\r\n }\r\n const start = tmpDir[i];\r\n const end = tmpDir[(i + 1) % n];\r\n const color = colorer.getAtomColor(cycAtoms[i], parent);\r\n const currAngle = start.angleTo(end);\r\n\r\n for (let j = 0; j <= segmentsHeight; ++j) {\r\n chunkPoints[j] = _slerp(currAngle, start, end, j * leprStep).multiplyScalar(cycleRad).add(center);\r\n }\r\n\r\n addChunk(chunkIdx++, color, chunkPoints, center, upDir);\r\n currAtomIdx = chunksToIdx[chunkIdx];\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default AromaticGroup;\r\n","import * as THREE from 'three';\r\nimport gfxutils from '../../gfxutils';\r\nimport AromaticGroup from './AromaticGroup';\r\n\r\nfunction _createShape(rad, parts) {\r\n const pts = [];\r\n for (let i = 0; i < parts; ++i) {\r\n const a = -2 * i / parts * Math.PI;\r\n pts.push(new THREE.Vector3(Math.cos(a) * rad, Math.sin(a) * rad, 0));\r\n }\r\n return pts;\r\n}\r\nconst { calcChunkMatrix } = gfxutils;\r\n\r\nclass AromaticTorusGroup extends AromaticGroup {\r\n _build() {\r\n const segmentsHeight = this._segmentsHeight;\r\n const torusRad = this._mode.getAromRadius();\r\n const radiusV = new THREE.Vector2(torusRad, torusRad);\r\n const radOffset = this._mode.calcStickRadius() + 2 * torusRad;\r\n const lookAtVector = new THREE.Vector3();\r\n const mtc = [];\r\n const geo = this._geo;\r\n this._buildInner(radOffset, (chunkIdx, color, points, center, upDir) => {\r\n for (let j = 0; j <= segmentsHeight; ++j) {\r\n const currPoint = points[j];\r\n const currDir = currPoint.clone().sub(center).cross(upDir);\r\n lookAtVector.addVectors(currPoint, currDir);\r\n mtc[j] = calcChunkMatrix(currPoint, lookAtVector, upDir, radiusV);\r\n }\r\n geo.setItem(chunkIdx, mtc);\r\n geo.setColor(chunkIdx, color);\r\n });\r\n geo.finalize();\r\n }\r\n\r\n _makeGeoArgs() {\r\n this._segmentsHeight = this._polyComplexity;\r\n return [_createShape(1.0, this._polyComplexity), this._segmentsHeight + 1, this._selection.chunks.length];\r\n }\r\n}\r\n\r\nexport default AromaticTorusGroup;\r\n","import AromaticGroup from './AromaticGroup';\r\n\r\nclass AromaticLinesGroup extends AromaticGroup {\r\n _build() {\r\n const geo = this._geo;\r\n const radOffset = this._mode.getAromaticOffset();\r\n this._buildInner(radOffset, (chunkIdx, color, points) => {\r\n let prevPt = points[0];// do not replace with start\r\n for (let j = 1; j <= this._segmentsHeight; ++j) {\r\n const currPoint = points[j];\r\n geo.setSegment(chunkIdx, j - 1, prevPt, currPoint);\r\n prevPt = currPoint;\r\n }\r\n geo.setColor(chunkIdx, color);\r\n });\r\n geo.finalize();\r\n }\r\n\r\n _makeGeoArgs() {\r\n this._segmentsHeight = this._mode.getAromaticArcChunks();\r\n return [this._selection.chunks.length, this._segmentsHeight, true];\r\n }\r\n}\r\n\r\nexport default AromaticLinesGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass ResiduesGroup extends ChemGroup {\r\n raycast(raycaster, intersects) {\r\n const { residues } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const resIdx = chunksIdc[inters[i].chunkIdx];\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const { residues } = this._selection;\r\n const resIdc = this._chunksIdc;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n if ((res._mask & mask) !== 0) {\r\n chunksList.push(i);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default ResiduesGroup;\r\n","import ResiduesGroup from './ResiduesGroup';\r\n\r\nclass NucleicItemGroup extends ResiduesGroup {\r\n raycast(raycaster, intersects) {\r\n const { residues } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const resIdx = chunksIdc[Math.floor(inters[i].chunkIdx / 2)];\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const stickRad = this._mode.calcStickRadius();\r\n let chunkIdx = 0;\r\n\r\n const resIdc = this._selection.chunks;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n const color = colorer.getResidueColor(res, parent);\r\n this._processItem(chunkIdx++, res._cylinders[0], res._cylinders[1], stickRad, color);\r\n }\r\n geo.finalize();\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n let chunkIdx = 0;\r\n const { residues } = this._selection;\r\n const resIdc = this._chunksIdc;\r\n\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n if ((res._mask & mask) !== 0) {\r\n chunksList[chunkIdx++] = 2 * i;\r\n chunksList[chunkIdx++] = 2 * i + 1;\r\n }\r\n }\r\n return chunksList;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const residues = frameData.getResidues();\r\n const { parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const stickRad = this._mode.calcStickRadius();\r\n let chunkIdx = 0;\r\n\r\n const resIdc = this._selection.chunks;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n const color = colorer.getResidueColor(res, parent);\r\n this._processItem(chunkIdx++, res._cylinders[0], res._cylinders[1], stickRad, color);\r\n }\r\n geo.finishUpdate();\r\n }\r\n}\r\n\r\nexport default NucleicItemGroup;\r\n","import NucleicItemGroup from './NucleicItemGroup';\r\n\r\nclass NucleicCylindersGroup extends NucleicItemGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length, this._polyComplexity];\r\n }\r\n\r\n _processItem(chunkIdx, cyl1, cyl2, stickRad, color) {\r\n const geo = this._geo;\r\n geo.setItem(chunkIdx, cyl1, cyl2, stickRad);\r\n geo.setColor(chunkIdx, color, color);\r\n }\r\n}\r\n\r\nexport default NucleicCylindersGroup;\r\n","import NucleicItemGroup from './NucleicItemGroup';\r\n\r\nclass NucleicSpheresGroup extends NucleicItemGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length * 2, this._polyComplexity];\r\n }\r\n\r\n _processItem(chunkIdx, cyl1, cyl2, stickRad, color) {\r\n const geo = this._geo;\r\n let idx = chunkIdx * 2;\r\n geo.setItem(idx, cyl1, stickRad);\r\n geo.setColor(idx, color);\r\n idx++;\r\n geo.setItem(idx, cyl2, stickRad);\r\n geo.setColor(idx, color);\r\n }\r\n}\r\n\r\nexport default NucleicSpheresGroup;\r\n","import * as THREE from 'three';\r\nimport { Smooth } from '../../../../vendor/js/Smooth';\r\nimport gfxutils from '../../gfxutils';\r\nimport chem from '../../../chem';\r\n\r\nconst { ResidueType } = chem;\r\n\r\nconst calcMatrix = gfxutils.calcChunkMatrix;\r\n\r\nfunction _buildStructureInterpolator(points, tension) {\r\n const path = Smooth(points, {\r\n method: Smooth.METHOD_CUBIC,\r\n clip: Smooth.CLIP_CLAMP,\r\n cubicTension: tension,\r\n scaleTo: 1,\r\n });\r\n\r\n return function (t, argTrans) {\r\n let transformT = argTrans;\r\n if (transformT === null) {\r\n // map our range to the [second .. last but one]\r\n transformT = function (tt) {\r\n return (tt * ((points.length - 1) - 2) + 1) / (points.length - 1);\r\n };\r\n }\r\n const newt = transformT(t);\r\n const ans = path(newt);\r\n return new THREE.Vector3(ans[0], ans[1], ans[2]);\r\n };\r\n}\r\n\r\nfunction _addPoints(centerPoints, topPoints, idx, residue) {\r\n if (!residue._isValid) {\r\n centerPoints[idx] = centerPoints[idx - 1];\r\n topPoints[idx] = topPoints[idx - 1];\r\n return;\r\n }\r\n const cp = residue._controlPoint;\r\n centerPoints[idx] = [cp.x, cp.y, cp.z];\r\n const tp = cp.clone().add(residue._wingVector);\r\n topPoints[idx] = [tp.x, tp.y, tp.z];\r\n}\r\n\r\nfunction _addPointsForLoneResidue(centerPoints, topPoints, idx, residue) {\r\n const nucleic = (residue._type.flags & ResidueType.Flags.NUCLEIC) !== 0;\r\n const nameFrom = nucleic ? 'C5\\'' : 'N';\r\n const nameTo = nucleic ? 'C3\\'' : 'C';\r\n\r\n let posFrom;\r\n let posTo;\r\n residue.forEachAtom((atom) => {\r\n const name = atom.getVisualName();\r\n if (!posFrom && name === nameFrom) {\r\n posFrom = atom.position;\r\n } else if (!posTo && name === nameTo) {\r\n posTo = atom.position;\r\n }\r\n });\r\n\r\n // provide a fallback for unknown residues\r\n if (!(posFrom && posTo)) {\r\n posFrom = residue._firstAtom.position;\r\n posTo = residue._lastAtom.position;\r\n }\r\n\r\n if (posFrom && posTo) {\r\n const shift = posTo.clone().sub(posFrom);\r\n\r\n const wing = residue._wingVector;\r\n const cp = residue._controlPoint;\r\n const tp = cp.clone().add(wing);\r\n\r\n const cpPrev = cp.clone().sub(shift);\r\n const tpPrev = cpPrev.clone().add(wing);\r\n centerPoints[idx] = [cpPrev.x, cpPrev.y, cpPrev.z];\r\n topPoints[idx] = [tpPrev.x, tpPrev.y, tpPrev.z];\r\n ++idx;\r\n centerPoints[idx] = [cpPrev.x, cpPrev.y, cpPrev.z];\r\n topPoints[idx] = [tpPrev.x, tpPrev.y, tpPrev.z];\r\n ++idx;\r\n\r\n centerPoints[idx] = [cp.x, cp.y, cp.z];\r\n topPoints[idx] = [tp.x, tp.y, tp.z];\r\n ++idx;\r\n\r\n const cpNext = cp.clone().add(shift);\r\n const tpNext = cpNext.clone().add(wing);\r\n centerPoints[idx] = [cpNext.x, cpNext.y, cpNext.z];\r\n topPoints[idx] = [tpNext.x, tpNext.y, tpNext.z];\r\n ++idx;\r\n centerPoints[idx] = [cpNext.x, cpNext.y, cpNext.z];\r\n topPoints[idx] = [tpNext.x, tpNext.y, tpNext.z];\r\n }\r\n}\r\n\r\nfunction _calcPoints(residues, firstIdx, lastIdx, boundaries) {\r\n const left = boundaries.start;\r\n const right = boundaries.end;\r\n function _prevIdx(idx) {\r\n return idx > left && residues[idx - 1]._isValid ? idx - 1 : idx;\r\n }\r\n function _nextIdx(idx) {\r\n return idx < right && residues[idx + 1]._isValid ? idx + 1 : idx;\r\n }\r\n\r\n const topPoints = [];\r\n const centerPoints = [];\r\n let arrIdx = 0;\r\n function _extrapolate2(currIdx, otherIdx) {\r\n const cp = residues[currIdx]._controlPoint.clone().lerp(residues[otherIdx]._controlPoint, -0.25);\r\n const tp = cp.clone().add(residues[currIdx]._wingVector);\r\n centerPoints[arrIdx] = [cp.x, cp.y, cp.z];\r\n topPoints[arrIdx++] = [tp.x, tp.y, tp.z];\r\n centerPoints[arrIdx] = [cp.x, cp.y, cp.z];\r\n topPoints[arrIdx++] = [tp.x, tp.y, tp.z];\r\n }\r\n\r\n // a single disconnected residue\r\n const prevIdx = _prevIdx(firstIdx);\r\n const nextIdx = _nextIdx(lastIdx);\r\n if (prevIdx === nextIdx) {\r\n _addPointsForLoneResidue(centerPoints, topPoints, arrIdx, residues[firstIdx]);\r\n return { centerPoints, topPoints };\r\n }\r\n\r\n // Two points (prev-prev and next-next) are added to support edge conditions for cubic splines, they are ignored\r\n // Another two (prev and next) were added to support the outside of the sub chain\r\n\r\n // prev and prev-prev\r\n if (firstIdx === prevIdx) {\r\n // do the extrapolation\r\n _extrapolate2(firstIdx, _nextIdx(firstIdx));\r\n } else {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[_prevIdx(prevIdx)]);\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[prevIdx]);\r\n }\r\n\r\n // main loop\r\n for (let idx = firstIdx; idx <= lastIdx; ++idx) {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[idx]);\r\n }\r\n\r\n // next and next-next\r\n if (nextIdx === _nextIdx(nextIdx)) {\r\n // do the extrapolation\r\n _extrapolate2(lastIdx, _prevIdx(lastIdx));\r\n } else {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[nextIdx]);\r\n _addPoints(centerPoints, topPoints, arrIdx, residues[_nextIdx(nextIdx)]);\r\n }\r\n return { centerPoints, topPoints };\r\n}\r\n\r\nclass CartoonHelper {\r\n constructor(residues, startIdx, endIdx, segmentsCount, tension, boundaries) {\r\n const pointsArrays = _calcPoints(residues, startIdx, endIdx, boundaries);\r\n this._topInterp = _buildStructureInterpolator(pointsArrays.topPoints, tension);\r\n this._centerInterp = _buildStructureInterpolator(pointsArrays.centerPoints, tension);\r\n\r\n this._shift = 0.5 / (endIdx - startIdx + 2);\r\n this._valueStep = (1.0 - 2 * this._shift) / (2 * (endIdx - startIdx + 1) * (segmentsCount - 1));\r\n this._segmentsCount = segmentsCount;\r\n }\r\n\r\n prepareMatrices(idx, firstRad, secondRad) {\r\n const mtcCount = this._segmentsCount;\r\n const outMtc = new Array(mtcCount);\r\n const currRad = new THREE.Vector2(0, 0);\r\n\r\n const topInterp = this._topInterp;\r\n const cenInterp = this._centerInterp;\r\n\r\n let currentValue = this._shift + this._valueStep * (mtcCount - 1) * idx;\r\n\r\n for (let mtxIdx = 0; mtxIdx < mtcCount; ++mtxIdx) {\r\n const lerpVal = Math.min(1.0, mtxIdx / (mtcCount - 1));\r\n currRad.lerpVectors(firstRad, secondRad, lerpVal);\r\n\r\n const currTop = topInterp(currentValue, null);\r\n const currCenter = cenInterp(currentValue, null);\r\n currentValue += this._valueStep;\r\n const nextCenter = cenInterp(currentValue, null);\r\n\r\n outMtc[mtxIdx] = calcMatrix(currCenter.clone(), nextCenter.clone(), currTop.clone().sub(currCenter), currRad);\r\n }\r\n\r\n return outMtc;\r\n }\r\n}\r\n\r\nexport default CartoonHelper;\r\n","import * as THREE from 'three';\r\nimport ResiduesGroup from './ResiduesGroup';\r\nimport CartoonHelper from './CartoonHelper';\r\n\r\nfunction _createShape(rad, parts) {\r\n const pts = [];\r\n\r\n for (let i = 0; i < parts; ++i) {\r\n // starts from pi/2 because it's important that points are lied on the angles of arrows (visual issues if not)\r\n const a = Math.PI / 2.0 - 2 * Math.PI * i / parts;\r\n\r\n pts.push(new THREE.Vector3(Math.cos(a) * rad, Math.sin(a) * rad, 0));\r\n }\r\n return pts;\r\n}\r\n\r\nfunction _loopThrough(subDiv, residues, segmentsHeight, tension, mode, callback) {\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n const { boundaries } = subDiv[subDivI];\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const idc = [subs[i].start, subs[i].end];\r\n const matrixHelper = new CartoonHelper(residues, idc[0], idc[1], segmentsHeight, tension, boundaries);\r\n let prevLast = null;\r\n const startIdx = subs[i].start * 2;\r\n const endIdx = subs[i].end * 2 + 1;\r\n let prevSecondRad = mode.getResidueRadius(residues[0], 0);\r\n for (let idx = startIdx; idx <= endIdx; ++idx) {\r\n const resIdx = (idx / 2 | 0);\r\n const currRes = residues[resIdx];\r\n const firstRad = mode.getResidueRadius(currRes, idx % 2);\r\n const secondRad = mode.getResidueRadius(currRes, 1 + (idx % 2));\r\n\r\n const mtc = matrixHelper.prepareMatrices(idx - idc[0] * 2, firstRad, secondRad);\r\n mtc.unshift(prevLast === null ? mtc[0] : prevLast);\r\n\r\n // Slope - radius is changed along this residue part\r\n const hasSlope = (firstRad.x !== secondRad.x) || (firstRad.y !== secondRad.y);\r\n // Cut - end radius of previous part not equal to start radius of this part. First section of this part lies in the orthogonal plane\r\n const hasCut = (firstRad.x !== prevSecondRad.x) || (firstRad.y !== prevSecondRad.y);\r\n\r\n callback(currRes, mtc, hasSlope, hasCut);\r\n\r\n prevLast = mtc[segmentsHeight];\r\n prevSecondRad = secondRad;\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass ResiduesSubseqGroup extends ResiduesGroup {\r\n _makeGeoArgs() {\r\n const cmpMultiplier = this._mode.getHeightSegmentsRatio();\r\n this._segmentsHeight = this._polyComplexity * cmpMultiplier | 0;\r\n return [_createShape(1.0, this._polyComplexity), this._segmentsHeight + 1, this._selection.chunks.length * 2];\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const tension = mode.getTension();\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const chunkIdc = [];\r\n _loopThrough(this._selection.subdivs, residues, this._segmentsHeight, tension, mode, (currRes, mtc, hasSlope = false, hasCut = false) => {\r\n const color = colorer.getResidueColor(currRes, parent);\r\n chunkIdc[chunkIdx] = currRes._index;\r\n geo.setItem(chunkIdx, mtc, hasSlope, hasCut);\r\n geo.setColor(chunkIdx++, color);\r\n });\r\n this._chunksIdc = chunkIdc;\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const { parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const tension = mode.getTension();\r\n const geo = this._geo;\r\n const frameRes = frameData.getResidues();\r\n let chunkIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n _loopThrough(this._selection.subdivs, frameRes, this._segmentsHeight, tension, mode, (currRes, mtc) => {\r\n geo.setItem(chunkIdx, mtc);\r\n if (updateColor) {\r\n geo.setColor(chunkIdx, colorer.getResidueColor(currRes, parent));\r\n }\r\n chunkIdx++;\r\n });\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default ResiduesSubseqGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass ResiduesTraceGroup extends ChemGroup {\r\n _makeGeoArgs() {\r\n const subDiv = this._selection.subdivs;\r\n let chunksCount = 0;\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n chunksCount += subs[i].end - subs[i].start;\r\n }\r\n }\r\n return [chunksCount, this._polyComplexity];\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const chunkIdc = [];\r\n const subDiv = this._selection.subdivs;\r\n const stickRad = mode.calcStickRadius();\r\n\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const startIdx = subs[i].start;\r\n const endIdx = subs[i].end;\r\n let prevRes = residues[startIdx];\r\n for (let idx = startIdx + 1; idx <= endIdx; ++idx) {\r\n const currRes = residues[idx];\r\n chunkIdc[chunkIdx] = { first: prevRes._index, second: currRes._index };\r\n geo.setItem(chunkIdx, prevRes._controlPoint, currRes._controlPoint, stickRad);\r\n geo.setColor(chunkIdx, colorer.getResidueColor(prevRes, parent), colorer.getResidueColor(currRes, parent));\r\n chunkIdx++;\r\n prevRes = currRes;\r\n }\r\n }\r\n }\r\n\r\n this._chunksIdc = chunkIdc;\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n\r\n const residues = frameData.getResidues();\r\n const { parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const subDiv = this._selection.subdivs;\r\n const stickRad = mode.calcStickRadius();\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const startIdx = subs[i].start;\r\n const endIdx = subs[i].end;\r\n let prevRes = residues[startIdx];\r\n for (let idx = startIdx + 1; idx <= endIdx; ++idx) {\r\n const currRes = residues[idx];\r\n geo.setItem(chunkIdx, prevRes._controlPoint, currRes._controlPoint, stickRad);\r\n if (updateColor) {\r\n geo.setColor(chunkIdx, colorer.getResidueColor(prevRes, parent), colorer.getResidueColor(currRes, parent));\r\n }\r\n chunkIdx++;\r\n prevRes = currRes;\r\n }\r\n }\r\n }\r\n\r\n geo.finalize();\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const inters = [];\r\n const { residues } = this._selection;\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksToIdx = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const { chunkIdx } = inters[i];\r\n const chunk = chunksToIdx[Math.floor(chunkIdx / 2)];\r\n const resIdx = chunkIdx % 2 === 0 ? chunk.first : chunk.second;\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const chunksToIdx = this._chunksIdc;\r\n const { residues } = this._selection;\r\n for (let i = 0, n = chunksToIdx.length; i < n; ++i) {\r\n const chunk = chunksToIdx[i];\r\n if (residues[chunk.first]._mask & mask) {\r\n chunksList.push(i * 2);\r\n }\r\n if (residues[chunk.second]._mask & mask) {\r\n chunksList.push(i * 2 + 1);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default ResiduesTraceGroup;\r\n","import ChemGroup from './ChemGroup';\r\nimport Bond from '../../../chem/Bond';\r\n\r\nfunction getCylinderCount(bondOrder) {\r\n return bondOrder < 2 ? 1 : bondOrder;\r\n}\r\n\r\nclass BondsGroup extends ChemGroup {\r\n _makeGeoArgs() {\r\n const drawMultiple = this._mode.drawMultiorderBonds();\r\n const showAromatic = this._mode.showAromaticLoops();\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n let bondsCount = 0;\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n bondsCount += this.getBondOrder(bonds[bondsIdc[i]], drawMultiple, showAromatic);\r\n }\r\n return [bondsCount, this._polyComplexity];\r\n }\r\n\r\n getBondOrder(bond, drawMultiple, showAromatic) {\r\n let bondOrder = 1;\r\n if (drawMultiple && (!showAromatic || bond._type !== Bond.BondType.AROMATIC)) {\r\n bondOrder = getCylinderCount(bond._order);\r\n }\r\n return bondOrder;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const { bonds } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const bondsIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const { chunkIdx } = inters[i];\r\n const bondIdx = bondsIdc[Math.floor(chunkIdx / 2)];\r\n if (bondIdx < bonds.length) {\r\n const bond = bonds[bondIdx];\r\n inters[i].atom = chunkIdx % 2 === 0 ? bond._left : bond._right;\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask, innerOnly) {\r\n const chunksList = [];\r\n const { bonds } = this._selection;\r\n const chunksToIdx = this._chunksIdc;\r\n for (let i = 0, n = chunksToIdx.length; i < n; ++i) {\r\n const bond = bonds[chunksToIdx[i]];\r\n if ((bond._left.mask & mask) && (!innerOnly || (bond._right.mask & mask))) {\r\n chunksList.push(2 * i);\r\n }\r\n if ((bond._right.mask & mask) && (!innerOnly || (bond._left.mask & mask))) {\r\n chunksList.push(2 * i + 1);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default BondsGroup;\r\n","import * as THREE from 'three';\r\nimport BondsGroup from './BondsGroup';\r\n\r\nclass BondsCylinderGroup extends BondsGroup {\r\n _build() {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const stickRad = mode.calcStickRadius();\r\n const emptyOffset = mode.calcSpaceFraction();\r\n let normDir;\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const chunksToIdx = [];\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = atom1.position;\r\n const a2Pos = atom2.position;\r\n normDir = bond.calcNormalDir();\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n const minRad = Math.min(mode.calcAtomRadius(atom1), mode.calcAtomRadius(atom2));\r\n const dist = 2 * minRad / order;\r\n const currStickRad = drawMultiple ? Math.min(stickRad, dist * 0.5 * (1.0 - emptyOffset)) : stickRad;\r\n\r\n for (let j = 0; j < order; ++j) {\r\n const scale = dist * (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n chunksToIdx[currBondIdx] = bond._index;\r\n leftPos.copy(a1Pos);\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.copy(a2Pos);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos, currStickRad);\r\n geo.setColor(currBondIdx++, colorer.getAtomColor(atom1, parent), colorer.getAtomColor(atom2, parent));\r\n }\r\n }\r\n\r\n geo.finalize();\r\n this._chunksIdc = chunksToIdx;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const stickRad = mode.calcStickRadius();\r\n const emptyOffset = mode.calcSpaceFraction();\r\n let normDir;\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = frameData.getAtomPos(atom1.index).clone();\r\n const a2Pos = frameData.getAtomPos(atom2.index);\r\n normDir = bond.calcNormalDir();\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n const minRad = Math.min(mode.calcAtomRadius(atom1), mode.calcAtomRadius(atom2));\r\n const dist = 2 * minRad / order;\r\n const currStickRad = drawMultiple ? Math.min(stickRad, dist * 0.5 * (1.0 - emptyOffset)) : stickRad;\r\n\r\n for (let j = 0; j < order; ++j) {\r\n const scale = dist * (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n leftPos.copy(a1Pos);\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.copy(a2Pos);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos, currStickRad);\r\n if (updateColor) {\r\n geo.setColor(currBondIdx, frameData.getAtomColor(colorer, atom1), frameData.getAtomColor(colorer, atom2));\r\n }\r\n currBondIdx++;\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default BondsCylinderGroup;\r\n","import * as THREE from 'three';\r\nimport BondsGroup from './BondsGroup';\r\n\r\nconst STEP_SIZE = 0.15;\r\n\r\nclass BondsLinesGroup extends BondsGroup {\r\n _build() {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const bondDir = new THREE.Vector3();\r\n\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const chunksToIdx = [];\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = atom1.position;\r\n const a2Pos = atom2.position;\r\n const a1Hangs = atom1.bonds.length === 1;\r\n const a2Hangs = atom2.bonds.length === 1;\r\n bondDir.subVectors(a2Pos, a1Pos);\r\n const len = bondDir.length();\r\n const normDir = bond.calcNormalDir();\r\n\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n\r\n for (let j = 0; j < order; ++j) {\r\n leftPos.copy(a1Pos);\r\n rightPos.copy(a2Pos);\r\n let scale = (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n chunksToIdx[currBondIdx] = bond._index;\r\n if (order === 2 && (!a1Hangs && !a2Hangs)) {\r\n scale -= 0.5;\r\n scale *= -1;\r\n }\r\n\r\n if (!a1Hangs && !a2Hangs && order > 1 && scale !== 0) {\r\n leftPos.lerpVectors(a1Pos, a2Pos, STEP_SIZE / (len));\r\n rightPos.lerpVectors(a1Pos, a2Pos, 1.0 - STEP_SIZE / (len));\r\n }\r\n\r\n scale *= STEP_SIZE;\r\n\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos);\r\n geo.setColor(currBondIdx++, colorer.getAtomColor(atom1, parent), colorer.getAtomColor(atom2, parent));\r\n }\r\n }\r\n geo.finalize();\r\n this._chunksIdc = chunksToIdx;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const bondDir = new THREE.Vector3();\r\n\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = frameData.getAtomPos(atom1.index).clone();\r\n const a2Pos = frameData.getAtomPos(atom2.index);\r\n const a1Hangs = atom1.bonds.length === 1;\r\n const a2Hangs = atom2.bonds.length === 1;\r\n bondDir.subVectors(a2Pos, a1Pos);\r\n const len = bondDir.length();\r\n const normDir = bond.calcNormalDir();\r\n\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n\r\n for (let j = 0; j < order; ++j) {\r\n leftPos.copy(a1Pos);\r\n rightPos.copy(a2Pos);\r\n let scale = (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n if (order === 2 && (!a1Hangs && !a2Hangs)) {\r\n scale -= 0.5;\r\n scale *= -1;\r\n }\r\n\r\n if (!a1Hangs && !a2Hangs && order > 1 && scale !== 0) {\r\n leftPos.lerpVectors(a1Pos, a2Pos, STEP_SIZE / (len));\r\n rightPos.lerpVectors(a1Pos, a2Pos, 1.0 - STEP_SIZE / (len));\r\n }\r\n\r\n scale *= STEP_SIZE;\r\n\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos);\r\n if (updateColor) {\r\n geo.setColor(currBondIdx, frameData.getAtomColor(colorer, atom1), frameData.getAtomColor(colorer, atom2));\r\n }\r\n currBondIdx++;\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default BondsLinesGroup;\r\n","import AtomsSphereGroup from './AtomsSphereGroup';\r\nimport AtomsSurfaceGroup from './AtomsSurfaceGroup';\r\nimport AtomsSASSESGroupStub from './AtomsSASSESGroupStub';\r\nimport AtomsTextGroup from './AtomsTextGroup';\r\nimport AromaticTorusGroup from './AromaticTorusGroup';\r\nimport AromaticLinesGroup from './AromaticLinesGroup';\r\nimport NucleicCylindersGroup from './NucleicCylindersGroup';\r\nimport NucleicSpheresGroup from './NucleicSpheresGroup';\r\nimport ResiduesSubseqGroup from './ResiduesSubseqGroup';\r\nimport ResiduesTraceGroup from './ResiduesTraceGroup';\r\nimport BondsCylinderGroup from './BondsCylinderGroup';\r\nimport BondsLinesGroup from './BondsLinesGroup';\r\n\r\nexport default {\r\n AtomsSphereGroup,\r\n AtomsSurfaceGroup,\r\n AtomsSASSESGroupStub,\r\n AtomsTextGroup,\r\n AromaticTorusGroup,\r\n AromaticLinesGroup,\r\n NucleicCylindersGroup,\r\n NucleicSpheresGroup,\r\n ResiduesSubseqGroup,\r\n ResiduesTraceGroup,\r\n BondsCylinderGroup,\r\n BondsLinesGroup,\r\n};\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass AtomsProcessor extends RCGroup {\r\n constructor(AtomsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n this._mode = mode;\r\n const atoms = complex.getAtoms();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const atomsIdc = [];\r\n let atomCount = 0;\r\n component.forEachAtom((atom) => {\r\n if (!self._checkAtom(atom, mask)) {\r\n return;\r\n }\r\n atomsIdc[atomCount++] = atom.index;\r\n });\r\n if (atomCount === 0) {\r\n return;\r\n }\r\n const atomsGroup = new AtomsGroup(geoParams, {\r\n atoms,\r\n chunks: atomsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n atomsGroup._component = component;\r\n self.add(atomsGroup);\r\n });\r\n }\r\n\r\n _checkAtom(atom, mask) {\r\n return atom.mask & mask;\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default AtomsProcessor;\r\n","import AtomsProcessor from './AtomsProcessor';\r\n\r\nclass OrphanAtomsProcessor extends AtomsProcessor {\r\n _checkAtom(atom, mask) {\r\n if (!(atom.mask & mask)) {\r\n return false;\r\n }\r\n\r\n const { bonds } = atom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n if ((bonds[i]._left.mask & mask) && (bonds[i]._right.mask & mask)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\nexport default OrphanAtomsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass ResiduesProcessor extends RCGroup {\r\n constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const residues = complex.getResidues();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n let chunksCount = 0;\r\n const resIdc = [];\r\n component.forEachResidue((residue) => {\r\n if (self._checkResidue(residue, mask)) {\r\n resIdc[chunksCount++] = residue._index;\r\n }\r\n });\r\n\r\n if (chunksCount === 0) {\r\n return;\r\n }\r\n const residuesGroup = new ResidueGroup(geoParams, {\r\n residues,\r\n chunks: resIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n residuesGroup._component = component;\r\n self.add(residuesGroup);\r\n });\r\n }\r\n\r\n checkResidue(residue, mask) {\r\n return residue._mask & mask;\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default ResiduesProcessor;\r\n","import ResidueProcessor from './ResiduesProcessor';\r\n\r\nclass NucleicProcessor extends ResidueProcessor {\r\n _checkResidue(residue, mask) {\r\n return mask & residue._mask && residue._cylinders !== null;\r\n }\r\n}\r\nexport default NucleicProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass SubseqsProcessor extends RCGroup {\r\n constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const residues = complex.getResidues();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const subDivs = component.getMaskedSubdivSequences(mask);\r\n\r\n let chunksCount = 0;\r\n const resIdc = [];\r\n for (let subDivI = 0, subDivN = subDivs.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDivs[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n for (let j = subs[i].start, jEnd = subs[i].end; j <= jEnd; ++j) {\r\n resIdc[chunksCount++] = residues[j]._index;\r\n }\r\n }\r\n }\r\n\r\n if (chunksCount === 0) {\r\n return;\r\n }\r\n const residuesGroup = new ResidueGroup(geoParams, {\r\n residues,\r\n chunks: resIdc,\r\n subdivs: subDivs,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n residuesGroup._component = component;\r\n self.add(residuesGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default SubseqsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass BondsProcessor extends RCGroup {\r\n constructor(BondsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const bonds = complex.getBonds();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const bondsIdc = [];\r\n let bondsCount = 0;\r\n component.forEachBond((bond) => {\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n if (!(atom1.mask & mask) || !(atom2.mask & mask)) {\r\n return;\r\n }\r\n bondsIdc[bondsCount++] = bond._index;\r\n });\r\n if (bondsCount === 0) {\r\n return;\r\n }\r\n const bondsGroup = new BondsGroup(geoParams, {\r\n bonds,\r\n chunks: bondsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n bondsGroup._component = component;\r\n self.add(bondsGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default BondsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass AromaticProcessor extends RCGroup {\r\n constructor(AromaticGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const atoms = complex.getAtoms();\r\n const transforms = complex.getTransforms();\r\n if (!mode.showAromaticLoops()) {\r\n return;\r\n }\r\n\r\n complex.forEachComponent((component) => {\r\n const atomsIdc = [];\r\n let chunksCount = 0;\r\n const cycles = [];\r\n let cycleIdx = 0;\r\n component.forEachCycle((cycle) => {\r\n const cycAtoms = cycle.atoms;\r\n let perCycle = 0;\r\n for (let i = 0, n = cycAtoms.length; i < n; ++i) {\r\n if ((cycAtoms[i].mask & mask) !== 0) {\r\n ++perCycle;\r\n atomsIdc[chunksCount++] = cycAtoms[i].index;\r\n }\r\n }\r\n if (perCycle > 0) {\r\n cycles[cycleIdx++] = cycle;\r\n }\r\n });\r\n\r\n const atomsGroup = new AromaticGroup(geoParams, {\r\n cycles,\r\n atoms,\r\n chunks: atomsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n atomsGroup._component = component;\r\n self.add(atomsGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default AromaticProcessor;\r\n","import AtomsProcessor from './AtomsProcessor';\r\nimport OrphanAtomsProcessor from './OrphanAtomsProcessor';\r\nimport ResiduesProcessor from './ResiduesProcessor';\r\nimport NucleicProcessor from './NucleicProcessor';\r\nimport SubseqsProcessor from './SubseqsProcessor';\r\nimport BondsProcessor from './BondsProcessor';\r\nimport AromaticProcessor from './AromaticProcessor';\r\n\r\nexport default {\r\n Atoms: AtomsProcessor,\r\n OrphanAtoms: OrphanAtomsProcessor,\r\n Residues: ResiduesProcessor,\r\n Nucleic: NucleicProcessor,\r\n Subseqs: SubseqsProcessor,\r\n Bonds: BondsProcessor,\r\n Aromatic: AromaticProcessor,\r\n};\r\n","import MeshCreator from '../../meshes/MeshCreator';\r\nimport groups from './groups';\r\nimport processors from '../processors/processors';\r\n\r\nfunction _bakeGroup(triplet, Processor, Group) {\r\n return function (complex, colorer, mode, polyComplexity, mask, material) {\r\n return new Processor(Group, triplet, complex, colorer, mode, polyComplexity, mask, material);\r\n };\r\n}\r\n\r\nclass GroupsFactory {\r\n static AtomsSpheres(caps, settings) {\r\n const gfxTriplet = MeshCreator.createSpheres(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSphereGroup);\r\n }\r\n\r\n static OrphanedAtomsCrosses(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createCrosses(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.OrphanAtoms, groups.AtomsSphereGroup);\r\n }\r\n\r\n static BondsCylinders(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Bonds, groups.BondsCylinderGroup);\r\n }\r\n\r\n static BondsLines(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.create2CLines(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Bonds, groups.BondsLinesGroup);\r\n }\r\n\r\n static CartoonChains(caps, settings) {\r\n const gfxTriplet = MeshCreator.createExtrudedChains(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Subseqs, groups.ResiduesSubseqGroup);\r\n }\r\n\r\n static TraceChains(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CClosedCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Subseqs, groups.ResiduesTraceGroup);\r\n }\r\n\r\n static NucleicSpheres(caps, settings) {\r\n const gfxTriplet = MeshCreator.createSpheres(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Nucleic, groups.NucleicSpheresGroup);\r\n }\r\n\r\n static NucleicCylinders(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Nucleic, groups.NucleicCylindersGroup);\r\n }\r\n\r\n static ALoopsTorus(caps, settings) {\r\n const gfxTriplet = MeshCreator.createExtrudedChains(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Aromatic, groups.AromaticTorusGroup);\r\n }\r\n\r\n static ALoopsLines(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createChunkedLines(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Aromatic, groups.AromaticLinesGroup);\r\n }\r\n\r\n static QuickSurfGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createQuickSurface(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSurfaceGroup);\r\n }\r\n\r\n static ContactSurfaceGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createContactSurface(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSurfaceGroup);\r\n }\r\n\r\n static SASSESSurfaceGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createSASSES(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSASSESGroupStub);\r\n }\r\n\r\n static TextLabelsGeo(caps, settings) {\r\n const gfxTriplet = MeshCreator.createLabels(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsTextGroup);\r\n }\r\n}\r\n\r\nexport default GroupsFactory;\r\n","import _ from 'lodash';\r\nimport makeContextDependent from '../../utils/makeContextDependent';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport factory from './groups/GroupsFactory';\r\n\r\n/**\r\n * Create new mode.\r\n *\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the mode after its creation.\r\n *\r\n * @exports Mode\r\n * @this Mode\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all available modes used for building and displaying molecule geometry.\r\n */\r\nclass Mode {\r\n constructor(opts) {\r\n if (this.constructor === Mode) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Mode options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.opts = _.merge(utils.deriveDeep(this.settings.now.modes[this.id], true), opts);\r\n }\r\n\r\n /**\r\n * Get mode identification, probably with options.\r\n * @returns {string|Array} Mode identifier string ({@link Mode#id}) or two-element array containing both mode\r\n * identifier and options ({@link Mode#opts}).\r\n * Options are returned if they were changed during or after the mode creation.\r\n */\r\n identify() {\r\n const diff = utils.objectsDiff(this.opts, this.settings.now.modes[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n return [this.id, diff];\r\n }\r\n return this.id;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const polyComplexity = this.opts.polyComplexity ? this.opts.polyComplexity[this.settings.now.resolution] : 0;\r\n const groupList = this.depGroups;\r\n const groupCount = groupList.length;\r\n const group = new gfxutils.RCGroup();\r\n const self = this;\r\n for (let i = 0; i < groupCount; ++i) {\r\n let currGroup = groupList[i];\r\n let renderParams = {};\r\n if (_.isArray(currGroup)) {\r\n renderParams = currGroup[1].call(this);\r\n [currGroup] = currGroup;\r\n }\r\n const Group = factory[currGroup](null, this.settings, renderParams);\r\n const newGroup = new Group(complex, colorer, self, polyComplexity, mask, material);\r\n if (newGroup.children.length > 0) {\r\n group.add(newGroup);\r\n }\r\n }\r\n return group;\r\n }\r\n}\r\n\r\nmakeContextDependent(Mode.prototype);\r\n\r\n/**\r\n* Mode identifier.\r\n* @type {string}\r\n*/\r\nMode.prototype.id = '__';\r\n\r\n/**\r\n * Mode geo groups.\r\n * @type {Array}\r\n */\r\nMode.prototype.depGroups = [];\r\n\r\nexport default Mode;\r\n","import Mode from './Mode';\r\n\r\nfunction getRenderParams() {\r\n return {\r\n lineWidth: this.opts.lineWidth,\r\n };\r\n}\r\n\r\nclass LinesMode extends Mode {\r\n static id = 'LN';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n this.depGroups = this.depGroups.slice(0); // clone depGroups to prevent prototype edits\r\n const groups = this.depGroups;\r\n for (let i = 0, n = groups.length; i < n; ++i) {\r\n groups[i] = [groups[i], getRenderParams];\r\n }\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n\r\n calcAtomRadius() {\r\n return this.opts.atom;\r\n }\r\n\r\n getAromaticOffset() {\r\n return this.opts.offsarom;\r\n }\r\n\r\n getAromaticArcChunks() {\r\n return this.opts.chunkarom;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n}\r\n\r\nLinesMode.prototype.id = 'LN';\r\nLinesMode.prototype.name = 'Lines';\r\nLinesMode.prototype.shortName = 'Lines';\r\nLinesMode.prototype.depGroups = [\r\n 'ALoopsLines',\r\n 'BondsLines',\r\n 'OrphanedAtomsCrosses',\r\n];\r\n\r\nexport default LinesMode;\r\n","import Mode from './Mode';\r\n\r\nclass LicoriceMode extends Mode {\r\n static id = 'LC';\r\n\r\n calcAtomRadius(_atom) {\r\n return this.opts.bond;\r\n }\r\n\r\n calcStickRadius() {\r\n return this.opts.bond;\r\n }\r\n\r\n calcSpaceFraction() {\r\n return this.opts.space;\r\n }\r\n\r\n getAromRadius() {\r\n return this.opts.aromrad;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n}\r\n\r\nLicoriceMode.prototype.id = 'LC';\r\nLicoriceMode.prototype.name = 'Licorice';\r\nLicoriceMode.prototype.shortName = 'Licorice';\r\nLicoriceMode.prototype.depGroups = [\r\n 'AtomsSpheres',\r\n 'BondsCylinders',\r\n 'ALoopsTorus',\r\n];\r\n\r\nexport default LicoriceMode;\r\n","import Mode from './Mode';\r\n\r\nclass BallsAndSticksMode extends Mode {\r\n static id = 'BS';\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius * this.opts.atom;\r\n }\r\n\r\n calcStickRadius() {\r\n return this.opts.bond;\r\n }\r\n\r\n getAromRadius() {\r\n return this.opts.aromrad;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n\r\n calcSpaceFraction() {\r\n return this.opts.space;\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n}\r\n\r\nBallsAndSticksMode.prototype.id = 'BS';\r\nBallsAndSticksMode.prototype.name = 'Balls and Sticks';\r\nBallsAndSticksMode.prototype.shortName = 'Balls';\r\nBallsAndSticksMode.prototype.depGroups = [\r\n 'AtomsSpheres',\r\n 'BondsCylinders',\r\n 'ALoopsTorus',\r\n];\r\n\r\nexport default BallsAndSticksMode;\r\n","import Mode from './Mode';\r\n\r\nclass VanDerWaalsMode extends Mode {\r\n static id = 'VW';\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n}\r\n\r\nVanDerWaalsMode.prototype.id = 'VW';\r\nVanDerWaalsMode.prototype.name = 'Van der Waals';\r\nVanDerWaalsMode.prototype.shortName = 'VDW';\r\nVanDerWaalsMode.prototype.depGroups = ['AtomsSpheres'];\r\n\r\nexport default VanDerWaalsMode;\r\n","import Mode from './Mode';\r\n\r\nclass TraceMode extends Mode {\r\n static id = 'TR';\r\n\r\n calcStickRadius() {\r\n return this.opts.radius;\r\n }\r\n}\r\n\r\nTraceMode.prototype.id = 'TR';\r\nTraceMode.prototype.name = 'Trace';\r\nTraceMode.prototype.shortName = 'Trace';\r\nTraceMode.prototype.depGroups = ['TraceChains'];\r\n\r\nexport default TraceMode;\r\n","import * as THREE from 'three';\r\nimport Mode from './Mode';\r\n\r\nclass TubeMode extends Mode {\r\n static id = 'TU';\r\n\r\n getResidueRadius(_residue) {\r\n return this.TUBE_RADIUS;\r\n }\r\n\r\n getHeightSegmentsRatio() {\r\n return this.opts.heightSegmentsRatio;\r\n }\r\n\r\n getTension() {\r\n return this.opts.tension;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const rad = this.opts.radius;\r\n this.TUBE_RADIUS = new THREE.Vector2(rad, rad);\r\n\r\n return Mode.prototype.buildGeometry.call(this, complex, colorer, mask, material);\r\n }\r\n}\r\n\r\nTubeMode.prototype.id = 'TU';\r\nTubeMode.prototype.name = 'Tube';\r\nTubeMode.prototype.shortName = 'Tube';\r\nTubeMode.prototype.depGroups = ['CartoonChains'];\r\n\r\nexport default TubeMode;\r\n","import * as THREE from 'three';\r\nimport Mode from './Mode';\r\n\r\nclass CartoonMode extends Mode {\r\n static id = 'CA';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n // cache for secondary structure options\r\n this.secCache = {};\r\n }\r\n\r\n getResidueStartRadius(residue) {\r\n const second = residue.getSecondary();\r\n if (!second || !second.generic) {\r\n return this.TUBE_RADIUS;\r\n }\r\n const secOpts = this.secCache[second.generic];\r\n if (!secOpts) {\r\n return this.TUBE_RADIUS;\r\n }\r\n if (second.term === residue) {\r\n return secOpts.start;\r\n }\r\n return secOpts.center;\r\n }\r\n\r\n getResidueEndRadius(residue) {\r\n const second = residue.getSecondary();\r\n if (second === null || !second.generic) {\r\n return this.TUBE_RADIUS;\r\n }\r\n const secOpts = this.secCache[second.generic];\r\n if (!secOpts) {\r\n return this.TUBE_RADIUS;\r\n }\r\n if (second.term === residue) {\r\n return this.ARROW_END;\r\n }\r\n return secOpts.center;\r\n }\r\n\r\n getResidueRadius(residue, val) {\r\n const startRad = this.getResidueStartRadius(residue);\r\n if (val === 0) {\r\n return startRad;\r\n }\r\n\r\n const endRad = this.getResidueEndRadius(residue);\r\n if (val === 2) {\r\n return endRad;\r\n }\r\n\r\n return startRad.clone().lerp(endRad, val / 2.0);\r\n }\r\n\r\n calcStickRadius(_res) {\r\n return this.opts.radius;\r\n }\r\n\r\n getHeightSegmentsRatio() {\r\n return this.opts.heightSegmentsRatio;\r\n }\r\n\r\n getTension() {\r\n return this.opts.tension;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const tubeRad = this.opts.radius;\r\n const secHeight = this.opts.depth;\r\n\r\n this.TUBE_RADIUS = new THREE.Vector2(tubeRad, tubeRad);\r\n this.ARROW_END = new THREE.Vector2(secHeight, tubeRad);\r\n const secCache = {};\r\n const secData = this.opts.ss;\r\n /* eslint-disable guard-for-in */\r\n for (const prop in secData) {\r\n secCache[prop] = {\r\n center: new THREE.Vector2(secHeight, secData[prop].width),\r\n start: new THREE.Vector2(secHeight, secData[prop].arrow),\r\n };\r\n }\r\n this.secCache = secCache;\r\n /* eslint-enable guard-for-in */\r\n\r\n return Mode.prototype.buildGeometry.call(this, complex, colorer, mask, material);\r\n }\r\n}\r\n\r\nCartoonMode.prototype.id = 'CA';\r\nCartoonMode.prototype.name = 'Cartoon';\r\nCartoonMode.prototype.shortName = 'Cartoon';\r\nCartoonMode.prototype.depGroups = [\r\n 'CartoonChains',\r\n 'NucleicSpheres',\r\n 'NucleicCylinders',\r\n];\r\n\r\nexport default CartoonMode;\r\n","import chem from '../../chem';\r\nimport Mode from './Mode';\r\n\r\nconst { selectors } = chem;\r\n\r\nfunction getRenderParams() {\r\n return {\r\n wireframe: this.opts.wireframe,\r\n zClip: this.opts.zClip,\r\n };\r\n}\r\n\r\nclass SurfaceMode extends Mode {\r\n constructor(opts) {\r\n super(opts);\r\n this.depGroups = this.depGroups.slice(0); // clone depGroups to prevent prototype edits\r\n const surfaces = this.surfaceNames;\r\n const groups = this.depGroups;\r\n for (let i = 0, n = surfaces.length; i < n; ++i) {\r\n groups[groups.length] = [surfaces[i], getRenderParams];\r\n }\r\n }\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n\r\n getVisibilitySelector() {\r\n let visibilitySelector = null;\r\n if (this.opts.subset !== '') {\r\n const res = selectors.parse(this.opts.subset);\r\n if (!res.error) {\r\n visibilitySelector = res.selector;\r\n }\r\n }\r\n return visibilitySelector;\r\n }\r\n}\r\n\r\nSurfaceMode.prototype.isSurface = true;\r\nSurfaceMode.prototype.surfaceNames = [];\r\n\r\nexport default SurfaceMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass QuickSurfaceMode extends SurfaceMode {\r\n static id = 'QS';\r\n\r\n getSurfaceOpts() {\r\n return {\r\n useBeads: false,\r\n isoValue: this.opts.isoValue,\r\n gaussLim: this.opts.gaussLim[this.settings.now.resolution],\r\n radScale: this.opts.scale,\r\n gridSpacing: this.opts.gridSpacing[this.settings.now.resolution],\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n };\r\n }\r\n}\r\n\r\nQuickSurfaceMode.prototype.id = 'QS';\r\nQuickSurfaceMode.prototype.name = 'Quick Surface';\r\nQuickSurfaceMode.prototype.shortName = 'Quick Surf';\r\nQuickSurfaceMode.prototype.surfaceNames = ['QuickSurfGeo'];\r\n\r\nexport default QuickSurfaceMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass IsoSurfaceMode extends SurfaceMode {\r\n constructor(excludeProbe, opts) {\r\n super(opts);\r\n this._excludeProbe = excludeProbe;\r\n }\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n\r\n getSurfaceOpts() {\r\n return {\r\n gridSpacing: this.opts.polyComplexity[this.settings.now.resolution],\r\n radScale: this._radScale,\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n probeRadius: this.opts.probeRadius,\r\n excludeProbe: this._excludeProbe,\r\n };\r\n }\r\n}\r\n\r\nIsoSurfaceMode.prototype.id = 'SU';\r\nIsoSurfaceMode.prototype.name = 'Surface';\r\nIsoSurfaceMode.prototype.shortName = 'Surface';\r\nIsoSurfaceMode.prototype.surfaceNames = ['SASSESSurfaceGeo'];\r\n\r\nIsoSurfaceMode.prototype._radScale = 1;\r\nIsoSurfaceMode.prototype._excludeProbe = false;\r\n\r\nexport default IsoSurfaceMode;\r\n","import IsoSurfaceMode from './IsoSurfaceMode';\r\n\r\nclass IsoSurfaceSASMode extends IsoSurfaceMode {\r\n static id = 'SA';\r\n\r\n constructor(opts) {\r\n super(false, opts);\r\n }\r\n}\r\n\r\nIsoSurfaceSASMode.prototype.id = 'SA';\r\nIsoSurfaceSASMode.prototype.name = 'Solvent Accessible Surface';\r\nIsoSurfaceSASMode.prototype.shortName = 'SAS';\r\n\r\nexport default IsoSurfaceSASMode;\r\n","import IsoSurfaceMode from './IsoSurfaceMode';\r\n\r\nclass IsoSurfaceSESMode extends IsoSurfaceMode {\r\n static id = 'SE';\r\n\r\n constructor(opts) {\r\n super(true, opts);\r\n }\r\n}\r\n\r\nIsoSurfaceSESMode.prototype.id = 'SE';\r\nIsoSurfaceSESMode.prototype.name = 'Solvent Excluded Surface';\r\nIsoSurfaceSESMode.prototype.shortName = 'SES';\r\n\r\nexport default IsoSurfaceSESMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass ContactSurfaceMode extends SurfaceMode {\r\n static id = 'CS';\r\n\r\n getSurfaceOpts() {\r\n return {\r\n probeRadius: this.opts.probeRadius,\r\n radScale: this.opts.polyComplexity[this.settings.now.resolution],\r\n scaleFactor: this.opts.polyComplexity[this.settings.now.resolution],\r\n gridSpacing: 1.0 / this.opts.polyComplexity[this.settings.now.resolution],\r\n isoValue: this.opts.isoValue,\r\n probePositions: this.opts.probePositions,\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n };\r\n }\r\n}\r\n\r\nContactSurfaceMode.prototype.id = 'CS';\r\nContactSurfaceMode.prototype.name = 'Contact Surface';\r\nContactSurfaceMode.prototype.shortName = 'Contact Surf';\r\nContactSurfaceMode.prototype.isSurface = true;\r\nContactSurfaceMode.prototype.surfaceNames = ['ContactSurfaceGeo'];\r\n\r\nexport default ContactSurfaceMode;\r\n","import _ from 'lodash';\r\nimport Mode from './Mode';\r\n\r\nclass TextMode extends Mode {\r\n static id = 'TX';\r\n\r\n getTemplateOptions() {\r\n return this.opts.template;\r\n }\r\n\r\n getLabelOpts() {\r\n return _.merge(this.opts, {\r\n colors: true,\r\n adjustColor: true,\r\n transparent: true,\r\n });\r\n }\r\n}\r\n\r\nTextMode.prototype.id = 'TX';\r\nTextMode.prototype.name = 'Text mode';\r\nTextMode.prototype.shortName = 'Text';\r\nTextMode.prototype.depGroups = ['TextLabelsGeo'];\r\n\r\nexport default TextMode;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport LinesMode from './modes/LinesMode';\r\nimport LicoriceMode from './modes/LicoriceMode';\r\nimport BallsAndSticksMode from './modes/BallsAndSticksMode';\r\nimport VanDerWaalsMode from './modes/VanDerWaalsMode';\r\nimport TraceMode from './modes/TraceMode';\r\nimport TubeMode from './modes/TubeMode';\r\nimport CartoonMode from './modes/CartoonMode';\r\nimport QuickSurfaceMode from './modes/QuickSurfaceMode';\r\nimport IsoSurfaceSASMode from './modes/IsoSurfaceSASMode';\r\nimport IsoSurfaceSESMode from './modes/IsoSurfaceSESMode';\r\nimport ContactSurfaceMode from './modes/ContactSurfaceMode';\r\nimport TextMode from './modes/TextMode';\r\n\r\nconst modes = new EntityList([\r\n LinesMode,\r\n LicoriceMode,\r\n BallsAndSticksMode,\r\n VanDerWaalsMode,\r\n TraceMode,\r\n TubeMode,\r\n CartoonMode,\r\n QuickSurfaceMode,\r\n IsoSurfaceSASMode,\r\n IsoSurfaceSESMode,\r\n ContactSurfaceMode,\r\n TextMode,\r\n]);\r\n\r\nexport default modes;\r\n","import _ from 'lodash';\r\n\r\nfunction clamp(x, a, b) {\r\n return x <= b ? x < 0 ? 0 : x : b;\r\n}\r\n\r\nfunction lerpColor(c1, c2, alpha) {\r\n const beta = 1 - alpha;\r\n const r1 = (c1 >> 16) & 0xff;\r\n const g1 = (c1 >> 8) & 0xff;\r\n const b1 = c1 & 0xff;\r\n const r2 = (c2 >> 16) & 0xff;\r\n const g2 = (c2 >> 8) & 0xff;\r\n const b2 = c2 & 0xff;\r\n const r = beta * r1 + alpha * r2;\r\n const g = beta * g1 + alpha * g2;\r\n const b = beta * b1 + alpha * b2;\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\nclass Palette {\r\n constructor(name, id) {\r\n this.name = name || 'Custom';\r\n this.id = id || 'CP';\r\n }\r\n\r\n getElementColor(name, asIs = false) {\r\n const color = this.elementColors[name];\r\n return color === undefined && !asIs ? this.defaultElementColor : color;\r\n }\r\n\r\n getResidueColor(name, asIs = false) {\r\n const color = this.residueColors[name];\r\n return color === undefined && !asIs ? this.defaultResidueColor : color;\r\n }\r\n\r\n getChainColor(name) {\r\n let chain = name.charCodeAt(0);\r\n chain = ((chain < 0 ? 0 : chain >= 256 ? chain - 256 : chain) & 0x1F)\r\n % this.chainColors.length;\r\n return this.chainColors[chain];\r\n }\r\n\r\n getSecondaryColor(type, asIs = false) {\r\n const color = this.secondaryColors[type];\r\n return color === undefined && !asIs ? this.defaultSecondaryColor : color;\r\n }\r\n\r\n getSequentialColor(index) {\r\n const { colors } = this;\r\n const len = colors.length;\r\n return index < 0 ? colors[(index % len) + len] : colors[index % len];\r\n }\r\n\r\n getGradientColor(value, gradientName) {\r\n const gradient = this.gradients[gradientName];\r\n if (!gradient) {\r\n return this.defaultNamedColor;\r\n }\r\n const count = gradient.length;\r\n const index = value * (count - 1);\r\n let left = Math.floor(index);\r\n const right = clamp(left + 1, 0, count - 1);\r\n left = clamp(left, 0, count - 1);\r\n return lerpColor(gradient[left], gradient[right], index - left);\r\n }\r\n\r\n getNamedColor(name, asIs = false) {\r\n const color = this.namedColors[name];\r\n return color === undefined && !asIs ? this.defaultNamedColor : color;\r\n }\r\n}\r\n\r\n_.assign(Palette.prototype, {\r\n colors: [0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0x808080],\r\n\r\n minRangeColor: 0x000000,\r\n midRangeColor: 0x7F7F7F,\r\n maxRangeColor: 0xFFFFFF,\r\n\r\n defaultElementColor: 0xFFFFFF,\r\n elementColors: {},\r\n\r\n defaultResidueColor: 0xFFFFFF,\r\n residueColors: {},\r\n\r\n chainColors: [0xFFFFFF],\r\n\r\n defaultSecondaryColor: 0xFFFFFF,\r\n secondaryColors: {},\r\n\r\n defaultGradientColor: 0x000000,\r\n\r\n defaultNamedColor: 0xFFFFFF,\r\n namedColorsArray: [\r\n /* eslint-disable no-multi-spaces */\r\n ['indianred', 0xcd5c5c],\r\n ['lightcoral', 0xf08080],\r\n ['salmon', 0xfa8072],\r\n ['darksalmon', 0xe9967a],\r\n ['lightsalmon', 0xffa07a],\r\n ['crimson', 0xdc143c],\r\n ['red', 0xff0000],\r\n ['firebrick', 0xb22222],\r\n ['darkred', 0x8b0000],\r\n ['pink', 0xffc0cb],\r\n ['lightpink', 0xffb6c1],\r\n ['hotpink', 0xff69b4],\r\n ['deeppink', 0xff1493],\r\n ['mediumvioletred', 0xc71585],\r\n ['palevioletred', 0xdb7093],\r\n ['coral', 0xff7f50],\r\n ['tomato', 0xff6347],\r\n ['orangered', 0xff4500],\r\n ['darkorange', 0xff8c00],\r\n ['orange', 0xffa500],\r\n ['gold', 0xffd700],\r\n ['yellow', 0xffff00],\r\n ['lightyellow', 0xffffe0],\r\n ['lemonchiffon', 0xfffacd],\r\n ['lightgoldenrodyellow', 0xfafad2],\r\n ['papayawhip', 0xffefd5],\r\n ['moccasin', 0xffe4b5],\r\n ['peachpuff', 0xffdab9],\r\n ['palegoldenrod', 0xeee8aa],\r\n ['khaki', 0xf0e68c],\r\n ['darkkhaki', 0xbdb76b],\r\n ['lavender', 0xe6e6fa],\r\n ['thistle', 0xd8bfd8],\r\n ['plum', 0xdda0dd],\r\n ['violet', 0xee82ee],\r\n ['orchid', 0xda70d6],\r\n ['fuchsia', 0xff00ff],\r\n ['magenta', 0xff00ff],\r\n ['mediumorchid', 0xba55d3],\r\n ['mediumpurple', 0x9370db],\r\n ['rebeccapurple', 0x663399],\r\n ['blueviolet', 0x8a2be2],\r\n ['darkviolet', 0x9400d3],\r\n ['darkorchid', 0x9932cc],\r\n ['darkmagenta', 0x8b008b],\r\n ['purple', 0x800080],\r\n ['indigo', 0x4b0082],\r\n ['slateblue', 0x6a5acd],\r\n ['mediumslateblue', 0x7b68ee],\r\n ['darkslateblue', 0x483d8b],\r\n ['greenyellow', 0xadff2f],\r\n ['chartreuse', 0x7fff00],\r\n ['lawngreen', 0x7cfc00],\r\n ['lime', 0x00ff00],\r\n ['limegreen', 0x32cd32],\r\n ['palegreen', 0x98fb98],\r\n ['lightgreen', 0x90ee90],\r\n ['mediumspringgreen', 0x00fa9a],\r\n ['springgreen', 0x00ff7f],\r\n ['mediumseagreen', 0x3cb371],\r\n ['seagreen', 0x2e8b57],\r\n ['forestgreen', 0x228b22],\r\n ['green', 0x008000],\r\n ['darkgreen', 0x006400],\r\n ['yellowgreen', 0x9acd32],\r\n ['olivedrab', 0x6b8e23],\r\n ['olive', 0x808000],\r\n ['darkolivegreen', 0x556b2f],\r\n ['mediumaquamarine', 0x66cdaa],\r\n ['darkseagreen', 0x8fbc8f],\r\n ['lightseagreen', 0x20b2aa],\r\n ['darkcyan', 0x008b8b],\r\n ['teal', 0x008080],\r\n ['aqua', 0x00ffff],\r\n ['cyan', 0x00ffff],\r\n ['lightcyan', 0xe0ffff],\r\n ['paleturquoise', 0xafeeee],\r\n ['aquamarine', 0x7fffd4],\r\n ['turquoise', 0x40e0d0],\r\n ['mediumturquoise', 0x48d1cc],\r\n ['darkturquoise', 0x00ced1],\r\n ['cadetblue', 0x5f9ea0],\r\n ['steelblue', 0x4682b4],\r\n ['lightsteelblue', 0xb0c4de],\r\n ['powderblue', 0xb0e0e6],\r\n ['lightblue', 0xadd8e6],\r\n ['skyblue', 0x87ceeb],\r\n ['lightskyblue', 0x87cefa],\r\n ['deepskyblue', 0x00bfff],\r\n ['dodgerblue', 0x1e90ff],\r\n ['cornflowerblue', 0x6495ed],\r\n ['royalblue', 0x4169e1],\r\n ['blue', 0x0000ff],\r\n ['mediumblue', 0x0000cd],\r\n ['darkblue', 0x00008b],\r\n ['navy', 0x000080],\r\n ['midnightblue', 0x191970],\r\n ['cornsilk', 0xfff8dc],\r\n ['blanchedalmond', 0xffebcd],\r\n ['bisque', 0xffe4c4],\r\n ['navajowhite', 0xffdead],\r\n ['wheat', 0xf5deb3],\r\n ['burlywood', 0xdeb887],\r\n ['tan', 0xd2b48c],\r\n ['rosybrown', 0xbc8f8f],\r\n ['sandybrown', 0xf4a460],\r\n ['goldenrod', 0xdaa520],\r\n ['darkgoldenrod', 0xb8860b],\r\n ['peru', 0xcd853f],\r\n ['chocolate', 0xd2691e],\r\n ['saddlebrown', 0x8b4513],\r\n ['sienna', 0xa0522d],\r\n ['brown', 0xa52a2a],\r\n ['maroon', 0x800000],\r\n ['white', 0xffffff],\r\n ['snow', 0xfffafa],\r\n ['honeydew', 0xf0fff0],\r\n ['mintcream', 0xf5fffa],\r\n ['azure', 0xf0ffff],\r\n ['aliceblue', 0xf0f8ff],\r\n ['ghostwhite', 0xf8f8ff],\r\n ['whitesmoke', 0xf5f5f5],\r\n ['seashell', 0xfff5ee],\r\n ['beige', 0xf5f5dc],\r\n ['oldlace', 0xfdf5e6],\r\n ['floralwhite', 0xfffaf0],\r\n ['ivory', 0xfffff0],\r\n ['antiquewhite', 0xfaebd7],\r\n ['linen', 0xfaf0e6],\r\n ['lavenderblush', 0xfff0f5],\r\n ['mistyrose', 0xffe4e1],\r\n ['gainsboro', 0xdcdcdc],\r\n ['lightgray', 0xd3d3d3],\r\n ['silver', 0xc0c0c0],\r\n ['darkgray', 0xa9a9a9],\r\n ['gray', 0x808080],\r\n ['dimgray', 0x696969],\r\n ['lightslategray', 0x778899],\r\n ['slategray', 0x708090],\r\n ['darkslategray', 0x2f4f4f],\r\n ['black', 0x000000],\r\n /* eslint-enable no-multi-spaces */\r\n ],\r\n\r\n namedColors: {},\r\n\r\n gradients: {\r\n rainbow: [\r\n 0x0000ff, // blue\r\n 0x00ffff, // cyan\r\n 0x00ff00, // green\r\n 0xffff00, // yellow\r\n 0xff0000, // red\r\n ],\r\n temp: [\r\n 0x0000ff, // blue\r\n 0x007fff, // light-blue\r\n 0xffffff, // white\r\n 0xff7f00, // orange\r\n 0xff0000, // red\r\n ],\r\n hot: [\r\n 0xffffff, // white\r\n 0xff7f00, // orange\r\n 0xff0000, // red\r\n ],\r\n cold: [\r\n 0xffffff, // white\r\n 0x007fff, // light-blue\r\n 0x0000ff, // blue\r\n ],\r\n 'blue-red': [\r\n 0x0000ff, // blue\r\n 0xffffff, // white\r\n 0xff0000, // red\r\n ],\r\n reds: [\r\n 0xffffff, // white\r\n 0xff0000, // red\r\n ],\r\n blues: [\r\n 0xffffff, // white\r\n 0x0000ff, // blue\r\n ],\r\n },\r\n});\r\n\r\nconst { namedColorsArray, namedColors } = Palette.prototype;\r\n\r\nfor (let i = 0, { length } = namedColorsArray; i < length; ++i) {\r\n const [name, value] = namedColorsArray[i];\r\n namedColors[name] = value;\r\n}\r\n\r\nexport default Palette;\r\n","import Palette from './Palette';\r\n\r\nconst palette = new Palette('CPK', 'CP');\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n\r\n H: 0xFFFFFF,\r\n C: 0x202020,\r\n N: 0x2060FF,\r\n O: 0xEE2010,\r\n F: 0x00FF00,\r\n P: 0x8020FF,\r\n S: 0xFFFF00,\r\n CL: 0x00BB00,\r\n FE: 0xD0D0D0,\r\n CO: 0xD0D0D0,\r\n NI: 0xD0D0D0,\r\n CU: 0xD0D0D0,\r\n BR: 0x008800,\r\n I: 0x005500,\r\n\r\n};\r\n\r\nexport default palette;\r\n","import Palette from './Palette';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst palette = new Palette('Jmol', 'JM');\r\n\r\npalette.colors = [\r\n\r\n 0x0000FF, // blue\r\n 0x0055FF, //\r\n 0x00ABFF, //\r\n 0x00FFFF, // cyan\r\n 0x00FFAB, //\r\n 0x00FF55, //\r\n 0x00FF00, // green\r\n 0x55FF00, //\r\n 0xABFF00, //\r\n 0xFFFF00, // yellow\r\n 0xFFAB00, //\r\n 0xFF5500, //\r\n 0xFF0000, // red\r\n 0xFF0055, //\r\n 0xFF00AB, //\r\n 0xFF00FF, // magenta\r\n 0xAB00FF, //\r\n 0x5500FF, //\r\n\r\n];\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n\r\n H: 0xFFFFFF,\r\n D: 0xFFFFC0,\r\n T: 0xFFFFA0,\r\n HE: 0xD9FFFF,\r\n LI: 0xCC80FF,\r\n BE: 0xC2FF00,\r\n B: 0xFFB5B5,\r\n C: 0x909090,\r\n N: 0x3050F8,\r\n O: 0xFF0D0D,\r\n F: 0x90E050,\r\n NE: 0xB3E3F5,\r\n NA: 0xAB5CF2,\r\n MG: 0x8AFF00,\r\n AL: 0xBFA6A6,\r\n SI: 0xF0C8A0,\r\n P: 0xFF8000,\r\n S: 0xFFFF30,\r\n CL: 0x1FF01F,\r\n AR: 0x80D1E3,\r\n K: 0x8F40D4,\r\n CA: 0x3DFF00,\r\n SC: 0xE6E6E6,\r\n TI: 0xBFC2C7,\r\n V: 0xA6A6AB,\r\n CR: 0x8A99C7,\r\n MN: 0x9C7AC7,\r\n FE: 0xE06633,\r\n CO: 0xF090A0,\r\n NI: 0x50D050,\r\n CU: 0xC88033,\r\n ZN: 0x7D80B0,\r\n GA: 0xC28F8F,\r\n GE: 0x668F8F,\r\n AS: 0xBD80E3,\r\n SE: 0xFFA100,\r\n BR: 0xA62929,\r\n KR: 0x5CB8D1,\r\n RB: 0x702EB0,\r\n SR: 0x00FF00,\r\n Y: 0x94FFFF,\r\n ZR: 0x94E0E0,\r\n NB: 0x73C2C9,\r\n MO: 0x54B5B5,\r\n TC: 0x3B9E9E,\r\n RU: 0x248F8F,\r\n RH: 0x0A7D8C,\r\n PD: 0x006985,\r\n AG: 0xC0C0C0,\r\n CD: 0xFFD98F,\r\n IN: 0xA67573,\r\n SN: 0x668080,\r\n SB: 0x9E63B5,\r\n TE: 0xD47A00,\r\n I: 0x940094,\r\n XE: 0x429EB0,\r\n CS: 0x57178F,\r\n BA: 0x00C900,\r\n LA: 0x70D4FF,\r\n CE: 0xFFFFC7,\r\n PR: 0xD9FFC7,\r\n ND: 0xC7FFC7,\r\n PM: 0xA3FFC7,\r\n SM: 0x8FFFC7,\r\n EU: 0x61FFC7,\r\n GD: 0x45FFC7,\r\n TB: 0x30FFC7,\r\n DY: 0x1FFFC7,\r\n HO: 0x00FF9C,\r\n ER: 0x00E675,\r\n TM: 0x00D452,\r\n YB: 0x00BF38,\r\n LU: 0x00AB24,\r\n HF: 0x4DC2FF,\r\n TA: 0x4DA6FF,\r\n W: 0x2194D6,\r\n RE: 0x267DAB,\r\n OS: 0x266696,\r\n IR: 0x175487,\r\n PT: 0xD0D0E0,\r\n AU: 0xFFD123,\r\n HG: 0xB8B8D0,\r\n TL: 0xA6544D,\r\n PB: 0x575961,\r\n BI: 0x9E4FB5,\r\n PO: 0xAB5C00,\r\n AT: 0x754F45,\r\n RN: 0x428296,\r\n FR: 0x420066,\r\n RA: 0x007D00,\r\n AC: 0x70ABFA,\r\n TH: 0x00BAFF,\r\n PA: 0x00A1FF,\r\n U: 0x008FFF,\r\n NP: 0x0080FF,\r\n PU: 0x006BFF,\r\n AM: 0x545CF2,\r\n CM: 0x785CE3,\r\n BK: 0x8A4FE3,\r\n CF: 0xA136D4,\r\n ES: 0xB31FD4,\r\n FM: 0xB31FBA,\r\n MD: 0xB30DA6,\r\n NO: 0xBD0D87,\r\n LR: 0xC70066,\r\n RF: 0xCC0059,\r\n DB: 0xD1004F,\r\n SG: 0xD90045,\r\n BH: 0xE00038,\r\n HS: 0xE6002E,\r\n MT: 0xEB0026,\r\n\r\n};\r\n\r\npalette.defaultResidueColor = 0xBEA06E;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\npalette.residueColors = {\r\n\r\n ALA: 0xC8C8C8,\r\n ARG: 0x145AFF,\r\n ASN: 0x00DCDC,\r\n ASP: 0xE60A0A,\r\n CYS: 0xE6E600,\r\n GLN: 0x00DCDC,\r\n GLU: 0xE60A0A,\r\n GLY: 0xEBEBEB,\r\n HIS: 0x8282D2,\r\n ILE: 0x0F820F,\r\n LEU: 0x0F820F,\r\n LYS: 0x145AFF,\r\n MET: 0xE6E600,\r\n PHE: 0x3232AA,\r\n PRO: 0xDC9682,\r\n SER: 0xFA9600,\r\n THR: 0xFA9600,\r\n TRP: 0xB45AB4,\r\n TYR: 0x3232AA,\r\n VAL: 0x0F820F,\r\n A: 0xA0A0FF,\r\n C: 0xFF8C4B,\r\n G: 0xFF7070,\r\n I: 0x80FFFF,\r\n T: 0xA0FFA0,\r\n U: 0xFF8080,\r\n DA: 0xA0A0FF,\r\n DC: 0xFF8C4B,\r\n DG: 0xFF7070,\r\n DI: 0x80FFFF,\r\n DT: 0xA0FFA0,\r\n DU: 0xFF8080,\r\n '+A': 0xA0A0FF,\r\n '+C': 0xFF8C4B,\r\n '+G': 0xFF7070,\r\n '+I': 0x80FFFF,\r\n '+T': 0xA0FFA0,\r\n '+U': 0xFF8080,\r\n\r\n};\r\n\r\npalette.chainColors = [\r\n // ' '->0 'A'->1, 'B'->2\r\n 0xFFffffff, // ' ' & '0' white\r\n //\r\n 0xFFC0D0FF, // skyblue\r\n 0xFFB0FFB0, // pastel green\r\n 0xFFFFC0C8, // pink\r\n 0xFFFFFF80, // pastel yellow\r\n 0xFFFFC0FF, // pastel magenta\r\n 0xFFB0F0F0, // pastel cyan\r\n 0xFFFFD070, // pastel gold\r\n 0xFFF08080, // lightcoral\r\n\r\n 0xFFF5DEB3, // wheat\r\n 0xFF00BFFF, // deepskyblue\r\n 0xFFCD5C5C, // indianred\r\n 0xFF66CDAA, // mediumaquamarine\r\n 0xFF9ACD32, // yellowgreen\r\n 0xFFEE82EE, // violet\r\n 0xFF00CED1, // darkturquoise\r\n 0xFF00FF7F, // springgreen\r\n 0xFF3CB371, // mediumseagreen\r\n\r\n 0xFF00008B, // darkblue\r\n 0xFFBDB76B, // darkkhaki\r\n 0xFF006400, // darkgreen\r\n 0xFF800000, // maroon\r\n 0xFF808000, // olive\r\n 0xFF800080, // purple\r\n 0xFF008080, // teal\r\n 0xFFB8860B, // darkgoldenrod\r\n 0xFFB22222, // firebrick\r\n];\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\npalette.secondaryColors = {\r\n [StructuralElementType.HELIX_ALPHA]: 0xFF0080,\r\n [StructuralElementType.HELIX_PI]: 0x600080,\r\n [StructuralElementType.HELIX_310]: 0xA00080,\r\n [StructuralElementType.STRAND]: 0xFFC800,\r\n [StructuralElementType.TURN]: 0x6080FF,\r\n dna: 0xAE00FE,\r\n rna: 0xFD0162,\r\n};\r\n\r\nexport default palette;\r\n","import Palette from './Palette';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst palette = new Palette('VMD', 'VM');\r\n\r\npalette.colors = [\r\n\r\n 0x0000FF, // blue\r\n 0xFF0000, // red\r\n 0x606060, // gray\r\n 0xFF8000, // orange\r\n 0xFFFF00, // yellow\r\n 0x808033, // tan\r\n 0x999999, // silver\r\n 0x00FF00, // green\r\n 0xFFFFFF, // white\r\n 0xFF9999, // pink\r\n 0x40C0C0, // cyan\r\n 0xA600A6, // purple\r\n 0x80E666, // lime\r\n 0xE666B3, // mauve\r\n 0x804D00, // ochre\r\n 0x8080C0, // ice blue\r\n\r\n];\r\n\r\npalette.defaultElementColor = 0x804D00;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n\r\n H: 0xFFFFFF,\r\n C: 0x40BFBF,\r\n N: 0x0000FF,\r\n O: 0xFF0000,\r\n P: 0x808033,\r\n S: 0xFFFF00,\r\n\r\n};\r\n\r\npalette.defaultResidueColor = 0x40C0C0;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\npalette.residueColors = {\r\n\r\n ALA: 0x0000FF,\r\n ARG: 0xFFFFFF,\r\n ASN: 0x808033,\r\n ASP: 0xFF0000,\r\n CYS: 0xFFFF00,\r\n GLN: 0xFF8000,\r\n GLU: 0xFF9999,\r\n GLY: 0xFFFFFF,\r\n HIS: 0x40C0C0,\r\n ILE: 0x00FF00,\r\n LEU: 0xFF9999,\r\n LYS: 0x40C0C0,\r\n MET: 0xFFFF00,\r\n PHE: 0xA600A6,\r\n PRO: 0x804C00,\r\n SER: 0xFFFF00,\r\n THR: 0xE666B3,\r\n TRP: 0x999999,\r\n TYR: 0x00FF00,\r\n VAL: 0x808033,\r\n A: 0x0000FF,\r\n C: 0xFF8000,\r\n G: 0xFFFF00,\r\n T: 0xA600A6,\r\n U: 0x00FF00,\r\n DA: 0x0000FF,\r\n DC: 0xFF8000,\r\n DG: 0xFFFF00,\r\n DT: 0xA600A6,\r\n DU: 0x00FF00,\r\n '+A': 0x0000FF,\r\n '+C': 0xFF8000,\r\n '+G': 0xFFFF00,\r\n '+T': 0xA600A6,\r\n '+U': 0x00FF00,\r\n WAT: 0x40C0C0,\r\n H2O: 0x40C0C0,\r\n HOH: 0x40C0C0,\r\n\r\n};\r\n\r\npalette.chainColors = [0xFFFFFF].concat(palette.colors);\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\npalette.secondaryColors = {\r\n [StructuralElementType.HELIX_ALPHA]: 0xA600A6,\r\n [StructuralElementType.HELIX_310]: 0x0000FF,\r\n [StructuralElementType.HELIX_PI]: 0xFF0000,\r\n [StructuralElementType.STRAND]: 0xFFFF00,\r\n [StructuralElementType.BRIDGE]: 0x808033,\r\n [StructuralElementType.TURN]: 0x40C0C0,\r\n};\r\n\r\nexport default palette;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport cpkPalette from './palettes/cpkPalette';\r\nimport jmolPalette from './palettes/jmolPalette';\r\nimport vmdPalette from './palettes/vmdPalette';\r\n\r\nconst palettes = new EntityList([\r\n cpkPalette,\r\n jmolPalette,\r\n vmdPalette,\r\n]);\r\n\r\nexport default palettes;\r\n","import _ from 'lodash';\r\nimport settings from '../../settings';\r\nimport utils from '../../utils';\r\nimport palettes from '../palettes';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the colorer after its creation.\r\n *\r\n * @exports Colorer\r\n * @this Colorer\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all available coloring algorithms used for building and displaying molecule geometry.\r\n */\r\nclass Colorer {\r\n constructor(opts) {\r\n if (this.constructor === Colorer) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Colorer options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.opts = _.merge(utils.deriveDeep(settings.now.colorers[this.id], true), opts);\r\n /**\r\n * Palette in use.\r\n * @type {Palette}\r\n */\r\n this.palette = palettes.first;\r\n }\r\n\r\n /**\r\n * Get Colorer identification, probably with options.\r\n * @returns {string|Array} Colorer identifier string ({@link Colorer#id}) or two-element array containing both colorer\r\n * identifier and options ({@link Colorer#opts}).\r\n * Options are returned if they were changed during or after colorer creation.\r\n */\r\n identify() {\r\n const diff = utils.objectsDiff(this.opts, settings.now.colorers[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n return [this.id, diff];\r\n }\r\n return this.id;\r\n }\r\n}\r\n\r\n/**\r\n * Colorer identifier.\r\n * @type {string}\r\n */\r\n\r\nColorer.prototype.id = '__';\r\n\r\nexport default Colorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Element\r\n *\r\n * @exports ElementColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Coloring algorithm based on chemical element.\r\n */\r\nclass ElementColorer extends Colorer {\r\n static id = 'EL';\r\n\r\n getAtomColor(atom, _complex) {\r\n const type = atom.element.name;\r\n if (type === 'C' && this.opts.carbon >= 0) {\r\n return this.opts.carbon;\r\n }\r\n return this.palette.getElementColor(type);\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.palette.defaultResidueColor;\r\n }\r\n}\r\n\r\nElementColorer.prototype.id = 'EL';\r\nElementColorer.prototype.name = 'Element';\r\nElementColorer.prototype.shortName = 'Element';\r\n\r\nexport default ElementColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Coloring algorithm based on residue type.\r\n *\r\n * @see ResidueType\r\n *\r\n * @exports ResidueTypeColorer\r\n * @constructor\r\n */\r\nclass ResidueTypeColorer extends Colorer {\r\n static id = 'RT';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n return this.palette.getResidueColor(residue._type._name);\r\n }\r\n}\r\n\r\nResidueTypeColorer.prototype.id = 'RT';\r\nResidueTypeColorer.prototype.name = 'Residue Type';\r\nResidueTypeColorer.prototype.shortName = 'Residue';\r\n\r\nexport default ResidueTypeColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass SequenceColorer extends Colorer {\r\n static id = 'SQ';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const chain = residue._chain;\r\n if (chain.minSequence === Number.POSITIVE_INFINITY && chain.maxSequence === Number.NEGATIVE_INFINITY) {\r\n return this.palette.defaultNamedColor;\r\n }\r\n const min = chain.minSequence;\r\n const max = chain.maxSequence > min ? chain.maxSequence : min + 1;\r\n return this.palette.getGradientColor((residue._sequence - min) / (max - min), this.opts.gradient);\r\n }\r\n}\r\n\r\nSequenceColorer.prototype.id = 'SQ';\r\nSequenceColorer.prototype.name = 'Sequence';\r\nSequenceColorer.prototype.shortName = 'Sequence';\r\n\r\nexport default SequenceColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass ChainColorer extends Colorer {\r\n static id = 'CH';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n return this.palette.getChainColor(residue.getChain()._name);\r\n }\r\n}\r\n\r\nChainColorer.prototype.id = 'CH';\r\nChainColorer.prototype.name = 'Chain';\r\nChainColorer.prototype.shortName = 'Chain';\r\n\r\nexport default ChainColorer;\r\n","import Colorer from './Colorer';\r\nimport ResidueType from '../../chem/ResidueType';\r\n\r\nclass SecondaryStructureColorer extends Colorer {\r\n static id = 'SS';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n if (residue._type.flags & ResidueType.Flags.DNA) {\r\n return this.palette.getSecondaryColor('dna');\r\n }\r\n if (residue._type.flags & ResidueType.Flags.RNA) {\r\n return this.palette.getSecondaryColor('rna');\r\n }\r\n const secondary = residue.getSecondary();\r\n if (secondary) {\r\n let color = this.palette.getSecondaryColor(secondary.type, true);\r\n if (color === undefined) {\r\n color = this.palette.getSecondaryColor(secondary.generic);\r\n }\r\n return color;\r\n }\r\n return this.palette.defaultSecondaryColor;\r\n }\r\n}\r\n\r\nSecondaryStructureColorer.prototype.id = 'SS';\r\nSecondaryStructureColorer.prototype.name = 'Secondary Structure';\r\nSecondaryStructureColorer.prototype.shortName = 'Structure';\r\n\r\nexport default SecondaryStructureColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass UniformColorer extends Colorer {\r\n static id = 'UN';\r\n\r\n getAtomColor(_atom, _complex) {\r\n return this.opts.color;\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nUniformColorer.prototype.id = 'UN';\r\nUniformColorer.prototype.name = 'Uniform';\r\nUniformColorer.prototype.shortName = 'Uniform';\r\n\r\nexport default UniformColorer;\r\n","import Colorer from './Colorer';\r\nimport selectors from '../../chem/selectors';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @exports ConditionalColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Bicolor coloring algorithm based on a selector string used as a condition.\r\n */\r\nclass ConditionalColorer extends Colorer {\r\n static id = 'CO';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n const parsed = selectors.parse(this.opts.subset);\r\n this._subsetCached = parsed.error ? selectors.none() : parsed.selector;\r\n }\r\n\r\n getAtomColor(atom, _complex) {\r\n return this._subsetCached.includesAtom(atom) ? this.opts.color : this.opts.baseColor;\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const subset = this._subsetCached;\r\n const atoms = residue._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n if (!subset.includesAtom(atoms[i])) {\r\n return this.opts.baseColor;\r\n }\r\n }\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nConditionalColorer.prototype.id = 'CO';\r\nConditionalColorer.prototype.name = 'Conditional';\r\nConditionalColorer.prototype.shortName = 'Conditional';\r\n\r\nexport default ConditionalColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass ConformationColorer extends Colorer {\r\n static id = 'CF';\r\n\r\n getAtomColor(atom, _complex) {\r\n return this.palette.getChainColor(String.fromCharCode(atom.location));\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.palette.defaultResidueColor;\r\n }\r\n}\r\n\r\nConformationColorer.prototype.id = 'CF';\r\nConformationColorer.prototype.name = 'Conformation';\r\nConformationColorer.prototype.shortName = 'Conformation';\r\n\r\nexport default ConformationColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Temperature\r\n *\r\n * @exports TemperatureColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Coloring algorithm based on temperature of chemical element.\r\n */\r\nclass TemperatureColorer extends Colorer {\r\n static id = 'TM';\r\n\r\n getAtomColor(atom, _complex) {\r\n const { opts } = this;\r\n let factor = 1;\r\n if (atom.temperature && opts) {\r\n if (opts.min === opts.max) {\r\n factor = atom.temperature > opts.max ? 1 : 0;\r\n } else {\r\n factor = (atom.temperature - opts.min) / (opts.max - opts.min);\r\n }\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const { opts } = this;\r\n if (!opts) {\r\n return this.palette.defaultGradientColor;\r\n }\r\n if (residue.temperature) {\r\n let factor = 0;\r\n if (opts.min === opts.max) {\r\n factor = residue.temperature > opts.max ? 1 : 0;\r\n } else {\r\n factor = (residue.temperature - opts.min) / (opts.max - opts.min);\r\n }\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n}\r\n\r\nTemperatureColorer.prototype.id = 'TM'; // [T]e[M]perature\r\nTemperatureColorer.prototype.name = 'Temperature';\r\nTemperatureColorer.prototype.shortName = 'Temperature';\r\n\r\nexport default TemperatureColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Occupancy\r\n *\r\n * @exports OccupancyColorer\r\n * @augments Occupancy\r\n * @constructor\r\n * @classdesc Coloring algorithm based on occupancy of chemical element.\r\n */\r\nclass OccupancyColorer extends Colorer {\r\n static id = 'OC';\r\n\r\n _getColorByOccupancy(occupancy, opts) {\r\n if (occupancy !== undefined) {\r\n const factor = 1 - occupancy;\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n\r\n getAtomColor(atom, _complex) {\r\n const { opts } = this;\r\n return this._getColorByOccupancy(atom.occupancy, opts);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const { opts } = this;\r\n return this._getColorByOccupancy(residue.occupancy, opts);\r\n }\r\n}\r\n\r\nOccupancyColorer.prototype.id = 'OC'; // [OC]cupancy\r\nOccupancyColorer.prototype.name = 'Occupancy';\r\nOccupancyColorer.prototype.shortName = 'Occupancy';\r\n\r\nexport default OccupancyColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass HydrophobicityColorer extends Colorer {\r\n static id = 'HY';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n let color = this.palette.defaultResidueColor;\r\n if (residue._type.hydrophobicity !== undefined) {\r\n // Kyte Doolitle hydro [-4.5,4.5]->[0.1]\r\n const min = -4.5;\r\n const max = 4.5;\r\n color = this.palette.getGradientColor((residue._type.hydrophobicity - min) / (max - min), this.opts.gradient);\r\n }\r\n return color;\r\n }\r\n}\r\n\r\nHydrophobicityColorer.prototype.id = 'HY';\r\nHydrophobicityColorer.prototype.name = 'Hydrophobicity';\r\nHydrophobicityColorer.prototype.shortName = 'Hydrophobicity';\r\n\r\nexport default HydrophobicityColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass MoleculeColorer extends Colorer {\r\n static id = 'MO';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const molecule = residue._molecule;\r\n const count = _complex.getMoleculeCount();\r\n if (count > 1) {\r\n return this.palette.getGradientColor((molecule.index - 1) / (count - 1), this.opts.gradient);\r\n }\r\n return this.palette.getGradientColor(0, this.opts.gradient);\r\n }\r\n}\r\n\r\nMoleculeColorer.prototype.id = 'MO';\r\nMoleculeColorer.prototype.name = 'Molecule';\r\nMoleculeColorer.prototype.shortName = 'Molecule';\r\n\r\nexport default MoleculeColorer;\r\n","import Colorer from './Colorer';\r\nimport Atom from '../../chem/Atom';\r\n\r\nfunction scaleColor(c, factor) {\r\n const r1 = (c >> 16) & 0xff;\r\n const g1 = (c >> 8) & 0xff;\r\n const b1 = c & 0xff;\r\n const r = factor * r1;\r\n const g = factor * g1;\r\n const b = factor * b1;\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @exports CarbonColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Bicolor coloring algorithm based on selection carbon atoms.\r\n */\r\nclass CarbonColorer extends Colorer {\r\n static id = 'CB';\r\n\r\n getAtomColor(atom, _complex) {\r\n const colorCarbon = this.opts.color;\r\n const colorNotCarbon = scaleColor(colorCarbon, this.opts.factor);\r\n return (atom.flags & Atom.Flags.CARBON) ? colorCarbon : colorNotCarbon;\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nCarbonColorer.prototype.id = 'CB';\r\nCarbonColorer.prototype.name = 'Carbon';\r\nCarbonColorer.prototype.shortName = 'Carbon';\r\n\r\nexport default CarbonColorer;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport ElementColorer from './colorers/ElementColorer';\r\nimport ResidueTypeColorer from './colorers/ResidueTypeColorer';\r\nimport SequenceColorer from './colorers/SequenceColorer';\r\nimport ChainColorer from './colorers/ChainColorer';\r\nimport SecondaryStructureColorer from './colorers/SecondaryStructureColorer';\r\nimport UniformColorer from './colorers/UniformColorer';\r\nimport ConditionalColorer from './colorers/ConditionalColorer';\r\nimport ConformationColorer from './colorers/ConformationColorer';\r\nimport TemperatureColorer from './colorers/TemperatureColorer';\r\nimport OccupancyColorer from './colorers/OccupancyColorer';\r\nimport HydrophobicityColorer from './colorers/HydrophobicityColorer';\r\nimport MoleculeColorer from './colorers/MoleculeColorer';\r\nimport CarbonColorer from './colorers/CarbonColorer';\r\n\r\nconst colorers = new EntityList([\r\n ElementColorer,\r\n ResidueTypeColorer,\r\n SequenceColorer,\r\n ChainColorer,\r\n SecondaryStructureColorer,\r\n UniformColorer,\r\n ConditionalColorer,\r\n ConformationColorer,\r\n TemperatureColorer,\r\n OccupancyColorer,\r\n HydrophobicityColorer,\r\n MoleculeColorer,\r\n CarbonColorer,\r\n]);\r\n\r\nexport default colorers;\r\n","import * as THREE from 'three';\r\nimport EntityList from '../utils/EntityList';\r\n\r\nfunction neutralColor(intensity) {\r\n return new THREE.Color(intensity, intensity, intensity);\r\n}\r\n\r\nconst materialList = [\r\n {\r\n id: 'DF',\r\n name: 'Diffuse',\r\n shortName: 'Diffuse',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'SF',\r\n name: 'Soft Plastic',\r\n shortName: 'Soft',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.1),\r\n shininess: 30,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'PL',\r\n name: 'Glossy Plastic',\r\n shortName: 'Glossy',\r\n uberOptions: {\r\n diffuse: neutralColor(0.56),\r\n specular: neutralColor(0.28),\r\n shininess: 100,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'ME',\r\n name: 'Metal',\r\n shortName: 'Metal',\r\n uberOptions: {\r\n diffuse: neutralColor(0.56),\r\n specular: neutralColor(0.55),\r\n shininess: 30,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'TR',\r\n name: 'Transparent',\r\n shortName: 'Transparent',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 0.5,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: true,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'GL',\r\n name: 'Glass',\r\n shortName: 'Glass',\r\n uberOptions: {\r\n diffuse: neutralColor(0.50),\r\n specular: neutralColor(0.65),\r\n shininess: 100,\r\n opacity: 0.5,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: true,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'BA',\r\n name: 'Backdrop',\r\n shortName: 'Backdrop',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: false,\r\n fog: false,\r\n depthWrite: false,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'TN',\r\n name: 'Toon',\r\n shortName: 'Toon',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: true,\r\n },\r\n }, {\r\n id: 'FL',\r\n name: 'Flat',\r\n shortName: 'Flat',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 0,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: false,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n },\r\n },\r\n];\r\n\r\nconst materials = new EntityList(materialList);\r\n\r\nexport default materials;\r\n","/**\r\n * Utils functions which is worked with meshes\r\n *\r\n * functions for doing something with all/specified meshes\r\n * functions for traversihg tree and create auxiliary meshes for transparency/shadowmaps...\r\n * functions for calculating data connected with meshes\r\n */\r\nimport * as THREE from 'three';\r\nimport UberMaterial from './shaders/UberMaterial';\r\nimport gfxutils from './gfxutils';\r\n\r\nfunction _gatherObjects(root, meshTypes) {\r\n const meshes = [];\r\n root.traverse((object) => {\r\n for (let i = 0; i < meshTypes.length; i++) {\r\n if (object instanceof meshTypes[i]) {\r\n meshes[meshes.length] = object;\r\n break;\r\n }\r\n }\r\n });\r\n return meshes;\r\n}\r\n\r\n// new mesh with the same geometry and specified material values and layer\r\nfunction createDerivativeMesh(mesh, values, layer) {\r\n const material = mesh.material.createInstance();\r\n material.setValues(values);\r\n\r\n const newMesh = new mesh.constructor(mesh.geometry, material);\r\n newMesh.material.needsUpdate = true;\r\n newMesh.applyMatrix4(mesh.matrix);\r\n newMesh.layers.set(layer);\r\n return newMesh;\r\n}\r\n\r\nfunction traverseMeshes(root, meshTypes, func) {\r\n const meshes = _gatherObjects(root, meshTypes);\r\n\r\n for (let i = 0, n = meshes.length; i < n; ++i) {\r\n const mesh = meshes[i];\r\n if (!mesh.parent) {\r\n continue;\r\n }\r\n func(mesh);\r\n }\r\n}\r\n\r\nfunction applyTransformsToMeshes(root, mtc) {\r\n const mtcCount = mtc.length;\r\n if (mtcCount < 1) {\r\n return;\r\n }\r\n\r\n const meshTypes = [THREE.Mesh, THREE.LineSegments, THREE.Line];\r\n traverseMeshes(root, meshTypes, (mesh) => {\r\n mesh.applyMatrix4(mtc[0]);\r\n for (let j = 1; j < mtcCount; ++j) {\r\n const newMesh = new mesh.constructor(mesh.geometry, mesh.material);\r\n mesh.parent.add(newMesh);\r\n newMesh.applyMatrix4(mtc[j]);\r\n }\r\n });\r\n}\r\n\r\nconst processTransparentMaterial = (function () {\r\n const matValues = {\r\n prepassTransparancy: true,\r\n fakeOpacity: false,\r\n transparent: false,\r\n colorFromDepth: false,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n mesh.material.setValues({ prepassTransparancy: false, fakeOpacity: false });\r\n mesh.material.needsUpdate = true;\r\n mesh.layers.set(gfxutils.LAYERS.TRANSPARENT);\r\n\r\n const prepassTranspMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.PREPASS_TRANSPARENT);\r\n mesh.parent.add(prepassTranspMesh);\r\n });\r\n };\r\n}());\r\n\r\nconst processColFromPosMaterial = (function () {\r\n const matValues = {\r\n colorFromPos: true,\r\n transparent: false,\r\n colorFromDepth: false,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n overrideColor: false,\r\n fogTransparent: false,\r\n attrColor: false,\r\n attrColor2: false,\r\n attrAlphaColor: false,\r\n fakeOpacity: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n const colFromPosMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.COLOR_FROM_POSITION);\r\n mesh.parent.add(colFromPosMesh);\r\n });\r\n };\r\n}());\r\n\r\nconst createShadowmapMaterial = (function () {\r\n const matValues = {\r\n colorFromDepth: true,\r\n orthoCam: true,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n if (!mesh.receiveShadow && mesh.material.shadowmap) { // remove shadow from non-receivers\r\n mesh.material.setValues({ shadowmap: false });\r\n }\r\n if (!mesh.material.lights) { // skip creating shadowmap meshes for materials without lighting\r\n return;\r\n }\r\n if (!mesh.castShadow) { // skip creating shadowmap meshes for non-casters\r\n return;\r\n }\r\n if (!gfxutils.belongToSelectLayers(mesh)) { // skip creating shadowmap meshes for selection layer\r\n return;\r\n }\r\n\r\n const shadowmapMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.SHADOWMAP);\r\n shadowmapMesh.isShadowmapMesh = true;\r\n mesh.parent.add(shadowmapMesh);\r\n });\r\n };\r\n}());\r\n\r\nfunction removeShadowmapMaterial(root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n if (mesh.isShadowmapMesh) {\r\n mesh.parent.remove(mesh);\r\n }\r\n });\r\n}\r\n\r\nfunction forEachMeshInGroup(group, process) {\r\n function processObj(object) {\r\n if (object instanceof THREE.Mesh) {\r\n process(object);\r\n }\r\n for (let i = 0, l = object.children.length; i < l; i++) {\r\n processObj(object.children[i]);\r\n }\r\n }\r\n processObj(group);\r\n}\r\n\r\nfunction _countMeshTriangles(mesh) {\r\n const geom = mesh.geometry;\r\n if (geom instanceof THREE.InstancedBufferGeometry) {\r\n const attribs = geom.attributes;\r\n for (const property in attribs) {\r\n if (attribs.hasOwnProperty(property) && attribs[property] instanceof THREE.InstancedBufferAttribute) {\r\n const currAttr = attribs[property];\r\n const indexSize = geom.index ? geom.index.array.length / 3 : 0;\r\n return indexSize * currAttr.array.length / currAttr.itemSize;\r\n }\r\n }\r\n return 0;\r\n }\r\n if (geom instanceof THREE.BufferGeometry) {\r\n return geom.index ? geom.index.array.length / 3 : 0;\r\n }\r\n return geom.faces ? geom.faces.length : 0;\r\n}\r\n\r\nfunction countTriangles(group) {\r\n let totalCount = 0;\r\n forEachMeshInGroup(group, (mesh) => {\r\n totalCount += _countMeshTriangles(mesh);\r\n });\r\n return totalCount;\r\n}\r\n\r\nexport default {\r\n applyTransformsToMeshes,\r\n processTransparentMaterial,\r\n processColFromPosMaterial,\r\n createShadowmapMaterial,\r\n removeShadowmapMaterial,\r\n forEachMeshInGroup,\r\n countTriangles,\r\n};\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport UberMaterial from './shaders/UberMaterial';\r\nimport gfxutils from './gfxutils';\r\nimport meshutils from './meshutils';\r\nimport settings from '../settings';\r\nimport materials from './materials';\r\nimport chem from '../chem';\r\n\r\nconst { selectors } = chem;\r\n\r\nclass Representation {\r\n constructor(index, mode, colorer, selector) {\r\n const startMaterialValues = {\r\n clipPlane: settings.now.draft.clipPlane,\r\n fogTransparent: settings.now.bg.transparent,\r\n shadowmap: settings.now.shadow.on,\r\n shadowmapType: settings.now.shadow.type,\r\n };\r\n this.index = index;\r\n this.mode = mode;\r\n this.colorer = colorer;\r\n this.selector = selector;\r\n this.selectorString = '';\r\n this.count = 0;\r\n this.material = new UberMaterial();\r\n this.material.setValues(startMaterialValues);\r\n this.material.setUberOptions({ fogAlpha: settings.now.fogAlpha });\r\n this.materialPreset = materials.first;\r\n this.needsRebuild = true;\r\n this.visible = true;\r\n\r\n // apply mode params & preset\r\n this.setMode(mode);\r\n }\r\n\r\n markAtoms(complex) {\r\n this.count = complex.markAtoms(this.selector, 1 << this.index);\r\n this.needsRebuild = true;\r\n return this.count;\r\n }\r\n\r\n unmarkAtoms(complex) {\r\n complex.clearAtomBits(1 << this.index);\r\n this.count = 0;\r\n }\r\n\r\n setMode(mode) {\r\n this.mode = mode;\r\n }\r\n\r\n setMaterialPreset(preset) {\r\n this.materialPreset = preset;\r\n this.material.setUberOptions(preset.uberOptions);\r\n this.material.setValues(preset.values);\r\n }\r\n\r\n reset() {\r\n this.geo = null;\r\n this.selectionGeo = null;\r\n }\r\n\r\n buildGeometry(complex) {\r\n this.reset();\r\n this.needsRebuild = false;\r\n\r\n if (settings.now.ao) {\r\n this.material.setValues({ normalsToGBuffer: settings.now.ao });\r\n }\r\n\r\n this.geo = this.mode.buildGeometry(complex, this.colorer, 1 << this.index, this.material);\r\n\r\n if (this.material.uberOptions.opacity < 0.99 && settings.now.transparency === 'prepass') {\r\n meshutils.processTransparentMaterial(this.geo, this.material);\r\n }\r\n this.geo.visible = this.visible;\r\n\r\n gfxutils.processObjRenderOrder(this.geo, this.materialPreset.id);\r\n meshutils.processColFromPosMaterial(this.geo, this.material);\r\n\r\n if (settings.now.shadow.on) {\r\n meshutils.createShadowmapMaterial(this.geo, this.material);\r\n }\r\n\r\n return this.geo;\r\n }\r\n\r\n buildSelectionGeometry(mask) {\r\n let sg = null;\r\n\r\n if (this.geo && ('getSubset' in this.geo)) {\r\n const meshes = this.geo.getSubset(mask);\r\n if (meshes && meshes.length > 0) {\r\n sg = new THREE.Group();\r\n sg.matrixAutoUpdate = false;\r\n sg.matrix = this.geo.matrix;\r\n\r\n for (let j = 0; j < meshes.length; j++) {\r\n const m = meshes[j];\r\n sg.add(m);\r\n }\r\n }\r\n }\r\n\r\n if (sg) {\r\n sg.visible = this.visible;\r\n }\r\n\r\n this.selectionGeo = sg;\r\n return this.selectionGeo;\r\n }\r\n\r\n /**\r\n * Create object that represents difference between current and another rep\r\n * anotherRep could be undefined. In this case everything is reported.\r\n */\r\n compare(repSettings) {\r\n const diff = {};\r\n\r\n const selStr = String(this.selector);\r\n if (!repSettings || selStr.valueOf() !== String(repSettings.selector).valueOf()) {\r\n diff.selector = selStr;\r\n }\r\n\r\n const modeDiff = this.mode.identify();\r\n if (!repSettings || Array.isArray(modeDiff) || modeDiff !== repSettings.mode) {\r\n diff.mode = modeDiff;\r\n }\r\n\r\n const colorerDiff = this.colorer.identify();\r\n if (!repSettings || Array.isArray(colorerDiff) || colorerDiff !== repSettings.colorer) {\r\n diff.colorer = colorerDiff;\r\n }\r\n\r\n if (!repSettings || this.materialPreset.id !== repSettings.material) {\r\n diff.material = this.materialPreset.id;\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n /**\r\n * Change representation. Write fields what was changed into new object, return it.\r\n */\r\n change(repSettings, complex, mode, color) {\r\n const diff = {};\r\n\r\n // modify selector\r\n if (repSettings.selector) {\r\n const newSelectorObject = selectors.parse(repSettings.selector).selector;\r\n const newSelector = String(newSelectorObject);\r\n if (this.selectorString !== newSelector) {\r\n diff.selector = newSelector;\r\n this.selectorString = newSelector;\r\n this.selector = newSelectorObject;\r\n this.markAtoms(complex);\r\n }\r\n }\r\n\r\n // modify mode\r\n if (repSettings.mode) {\r\n const newMode = repSettings.mode;\r\n if (!_.isEqual(this.mode.identify(), newMode)) {\r\n diff.mode = newMode;\r\n this.setMode(mode);\r\n }\r\n }\r\n\r\n // modify colorer\r\n if (repSettings.colorer) {\r\n const newColorer = repSettings.colorer;\r\n if (!_.isEqual(this.colorer.identify(), newColorer)) {\r\n diff.colorer = newColorer;\r\n this.colorer = color;\r\n }\r\n }\r\n\r\n // modify material\r\n if (repSettings.material) {\r\n const newMaterial = repSettings.material;\r\n if (!_.isEqual(this.materialPreset.id, newMaterial)) {\r\n diff.material = newMaterial;\r\n this.setMaterialPreset(materials.get(repSettings.material));\r\n }\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n show(visible) {\r\n this.visible = visible;\r\n if (this.geo) {\r\n this.geo.visible = visible;\r\n }\r\n if (this.selectionGeo) {\r\n this.selectionGeo.visible = visible;\r\n }\r\n }\r\n}\r\n\r\nexport default Representation;\r\n","import * as THREE from 'three';\r\nimport logger from './utils/logger';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport './gfx/modes';\r\n\r\nfunction _traverseComponentGroups(root, component, callback) {\r\n const { children } = root;\r\n if (!children) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n if (child._component === component) {\r\n callback(child);\r\n }\r\n if (child instanceof gfxutils.RCGroup) {\r\n _traverseComponentGroups(child, component, callback);\r\n }\r\n }\r\n}\r\n\r\nfunction ComplexEditor() {\r\n}\r\n\r\nclass ComplexComponentEditor extends ComplexEditor {\r\n constructor(complexVisual) {\r\n super();\r\n this._complexVisual = complexVisual;\r\n this._inProgress = false;\r\n }\r\n\r\n begin() {\r\n const complex = this._complexVisual.getComplex();\r\n\r\n // init component matrices\r\n this._componentTransforms = [];\r\n for (let i = 0; i < complex._components.length; ++i) {\r\n const component = complex._components[i];\r\n this._componentTransforms[component._index] = new THREE.Object3D();\r\n }\r\n\r\n this._inProgress = true;\r\n\r\n return true;\r\n }\r\n\r\n apply() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const complex = this._complexVisual.getComplex();\r\n\r\n for (let i = 0; i < complex._components.length; ++i) {\r\n this._bakeComponentTransform(complex._components[i]);\r\n }\r\n\r\n complex.onAtomPositionChanged();\r\n\r\n this._resetComponentTransform();\r\n\r\n this._complexVisual.finalizeEdit();\r\n }\r\n\r\n discard() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n this._resetComponentTransform();\r\n\r\n this._complexVisual.finalizeEdit();\r\n }\r\n\r\n getAltObj() {\r\n const res = {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n\r\n const visual = this._complexVisual;\r\n const component = visual.getSelectedComponent();\r\n\r\n if (component === null) {\r\n return res;\r\n }\r\n\r\n const selection = this._complexVisual.getSelectionGeo();\r\n const selectionMask = 1 << visual.getSelectionBit();\r\n let i;\r\n let j;\r\n let reprNode;\r\n let geo;\r\n\r\n // find all geo nodes for this component\r\n _traverseComponentGroups(visual, component, (child) => {\r\n res.objects.push(child);\r\n });\r\n\r\n // find all selection nodes for this component\r\n for (i = 0; i < selection.children.length; ++i) {\r\n reprNode = selection.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component') && geo._component === component) {\r\n res.objects.push(geo);\r\n }\r\n }\r\n }\r\n\r\n // add dummy object that stores component transformation\r\n res.objects.push(this._componentTransforms[component._index]);\r\n\r\n const bbmin = new THREE.Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n const bbmax = new THREE.Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n\r\n component.forEachResidue((residue) => {\r\n const atoms = residue._atoms;\r\n for (j = 0; j < atoms.length; ++j) {\r\n if (atoms[j].mask & selectionMask) {\r\n bbmin.min(atoms[j].position);\r\n bbmax.max(atoms[j].position);\r\n }\r\n }\r\n });\r\n\r\n res.pivot.lerpVectors(bbmin, bbmax, 0.5);\r\n return res;\r\n }\r\n\r\n _bakeComponentTransform(component) {\r\n const t = this._componentTransforms[component._index];\r\n if (t && (!(t.position.x === 0 && t.position.y === 0 && t.position.z === 0)\r\n || !(t.quaternion.x === 0 && t.quaternion.y === 0 && t.quaternion.z === 0 && t.quaternion.w === 1))) {\r\n t.updateMatrix();\r\n\r\n component.forEachResidue((residue) => {\r\n const atoms = residue._atoms;\r\n for (let j = 0; j < atoms.length; ++j) {\r\n atoms[j].position.applyMatrix4(t.matrix);\r\n }\r\n });\r\n }\r\n }\r\n\r\n _resetComponentTransform() {\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n let i;\r\n let j;\r\n let reprNode;\r\n let geo;\r\n\r\n for (i = 0; i < this._componentTransforms.length; ++i) {\r\n geo = this._componentTransforms[i];\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n\r\n // reset all geo nodes\r\n for (i = 0; i < visual.children.length; ++i) {\r\n reprNode = visual.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component')) {\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n }\r\n }\r\n\r\n // reset all selection nodes\r\n for (i = 0; i < selection.children.length; ++i) {\r\n reprNode = selection.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component')) {\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass ComplexFragmentEditor extends ComplexEditor {\r\n constructor(complexVisual) {\r\n super();\r\n this._complexVisual = complexVisual;\r\n this._inProgress = false;\r\n }\r\n\r\n begin() {\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n\r\n const atoms = this._getSelectionBorderAtoms();\r\n if (atoms.length < 1 || atoms.length > 2) {\r\n logger.error('Can only edit fragments with one or two bound atoms.');\r\n return false;\r\n }\r\n\r\n this._fragmentBoundAtoms = atoms;\r\n\r\n const selectionMask = 1 << visual.getSelectionBit();\r\n\r\n // hide selected fragment in main model\r\n visual.disableSubset(selectionMask, true);\r\n\r\n // hide selection geo in main model\r\n for (let k = 0; k < selection.children.length; ++k) {\r\n selection.children[k].visible = false;\r\n }\r\n\r\n // create visible fragment representation to rotate\r\n const pivotPos = atoms[0].position.clone();\r\n\r\n if (atoms.length === 2) {\r\n pivotPos.lerp(atoms[1].position, 0.5);\r\n }\r\n\r\n this._fragmentGeo = new THREE.Group();\r\n visual.add(this._fragmentGeo);\r\n this._fragmentGeo.position.copy(pivotPos);\r\n\r\n this._fragmentSelectionGeo = new THREE.Group();\r\n selection.add(this._fragmentSelectionGeo);\r\n this._fragmentSelectionGeo.position.copy(pivotPos);\r\n\r\n const offset = pivotPos.clone();\r\n offset.negate();\r\n\r\n for (let i = 0; i < visual.children.length; ++i) {\r\n const g = visual.children[i];\r\n if (!('getSubset' in g)) {\r\n continue;\r\n }\r\n\r\n const vg = new THREE.Group();\r\n this._fragmentGeo.add(vg);\r\n\r\n const sg = new THREE.Group();\r\n this._fragmentSelectionGeo.add(sg);\r\n\r\n const meshes = g.getSubset(selectionMask, true);\r\n for (let j = 0; j < meshes.length; j++) {\r\n const m = meshes[j];\r\n vg.add(m);\r\n m.position.copy(offset);\r\n }\r\n\r\n const smeshes = g.getSubset(selectionMask, true);\r\n for (let h = 0; h < smeshes.length; h++) {\r\n const sm = smeshes[h];\r\n sg.add(sm);\r\n sm.position.copy(offset);\r\n }\r\n }\r\n\r\n gfxutils.applySelectionMaterial(this._fragmentSelectionGeo);\r\n\r\n this._inProgress = true;\r\n return true;\r\n }\r\n\r\n apply() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const visual = this._complexVisual;\r\n const selectionBit = visual.getSelectionBit();\r\n\r\n const p = this._fragmentGeo.position;\r\n const m = this._fragmentGeo.matrix.clone();\r\n m.multiply(new THREE.Matrix4().makeTranslation(-p.x, -p.y, -p.z));\r\n\r\n this._bakeAtomTransform(m, 1 << selectionBit);\r\n\r\n // show selected fragment in main model\r\n visual.enableSubset(1 << selectionBit, true);\r\n\r\n visual.getComplex().onAtomPositionChanged();\r\n\r\n visual.finalizeEdit();\r\n }\r\n\r\n discard() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n\r\n this._fragmentGeo.parent.remove(this._fragmentGeo);\r\n\r\n // show selected fragment in main model\r\n visual.enableSubset(1 << visual.getSelectionBit(), true);\r\n\r\n // show selection geo in main model (+ remove fragment selection geo)\r\n for (let i = 0; i < selection.children.length; ++i) {\r\n const node = selection.children[i];\r\n if (node.visible) {\r\n selection.remove(node);\r\n } else {\r\n node.visible = true;\r\n }\r\n }\r\n\r\n visual.finalizeEdit();\r\n }\r\n\r\n isFreeRotationAllowed() {\r\n return (this._fragmentBoundAtoms.length < 2);\r\n }\r\n\r\n getAltObj() {\r\n const res = {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n\r\n res.objects.push(this._fragmentGeo, this._fragmentSelectionGeo);\r\n\r\n const boundAtoms = this._fragmentBoundAtoms;\r\n if (boundAtoms.length === 1) {\r\n if (boundAtoms[0].bonds.length === 1) {\r\n // single external bond allows rotation about bond axis\r\n const bond = boundAtoms[0].bonds[0];\r\n res.axis = new THREE.Vector3().subVectors(bond._right.position, bond._left.position);\r\n res.axis.normalize();\r\n res.axis.transformDirection(this._complexVisual.matrixWorld);\r\n }\r\n } else if (boundAtoms.length === 2) {\r\n // two bound atoms allow rotation only about axis running through their centers\r\n res.axis = new THREE.Vector3().subVectors(boundAtoms[1].position, boundAtoms[0].position);\r\n res.axis.normalize();\r\n res.axis.transformDirection(this._complexVisual.matrixWorld);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n _getSelectionBorderAtoms() {\r\n const complex = this._complexVisual.getComplex();\r\n\r\n const selectionMask = 1 << this._complexVisual.getSelectionBit();\r\n const atomHash = {};\r\n\r\n complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n atomHash[bond._left.index] = 1;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n atomHash[bond._right.index] = 1;\r\n }\r\n });\r\n\r\n const atoms = [];\r\n const keys = Object.keys(atomHash);\r\n for (let i = 0, n = keys.length; i < n; ++i) {\r\n const idx = keys[i];\r\n atoms.push(complex._atoms[idx]);\r\n }\r\n\r\n return atoms;\r\n }\r\n\r\n _bakeAtomTransform(matrix, mask) {\r\n this._complexVisual.getComplex().forEachAtom((atom) => {\r\n if (atom.mask & mask) {\r\n atom.position.applyMatrix4(matrix);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default {\r\n ComponentEditor: ComplexComponentEditor,\r\n FragmentEditor: ComplexFragmentEditor,\r\n};\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from './utils';\r\nimport logger from './utils/logger';\r\nimport chem from './chem';\r\nimport settings from './settings';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport modes from './gfx/modes';\r\nimport colorers from './gfx/colorers';\r\nimport palettes from './gfx/palettes';\r\nimport materials from './gfx/materials';\r\nimport Representation from './gfx/Representation';\r\nimport Visual from './Visual';\r\nimport ComplexVisualEdit from './ComplexVisualEdit';\r\nimport meshutils from './gfx/meshutils';\r\n\r\nconst { selectors } = chem;\r\n\r\nfunction lookupAndCreate(entityList, specs) {\r\n if (!Array.isArray(specs)) {\r\n specs = [specs];\r\n }\r\n const [id, opts] = specs;\r\n const Entity = entityList.get(id) || entityList.first;\r\n return new Entity(opts);\r\n}\r\n\r\nclass ComplexVisual extends Visual {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this._complex = dataSource;\r\n\r\n /** @type {Representation[]} */\r\n this._reprList = [];\r\n /** @type {?Representation} */\r\n this._repr = null;\r\n this._reprListChanged = true;\r\n\r\n this._selectionBit = 0;\r\n this._reprUsedBits = 0;\r\n this._selectionCount = 0;\r\n\r\n this._selectionGeometry = new THREE.Group();\r\n }\r\n\r\n getBoundaries() {\r\n return this._complex.getBoundaries();\r\n }\r\n\r\n release() {\r\n if (this._selectionGeometry.parent) {\r\n this._selectionGeometry.remove(this._selectionGeometry);\r\n }\r\n Visual.prototype.release.call(this);\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n getSelectionCount() {\r\n return this._selectionCount;\r\n }\r\n\r\n getSelectionGeo() {\r\n return this._selectionGeometry;\r\n }\r\n\r\n getSelectionBit() {\r\n return this._selectionBit;\r\n }\r\n\r\n getEditor() {\r\n return this._editor;\r\n }\r\n\r\n resetReps(reps) {\r\n // Create all necessary representations\r\n if (this._complex) {\r\n this._complex.clearAtomBits(~0);\r\n }\r\n this._reprListChanged = true;\r\n this._reprUsedBits = 0;\r\n this._reprList.length = reps.length;\r\n for (let i = 0, n = reps.length; i < n; ++i) {\r\n const rep = reps[i];\r\n\r\n let selector;\r\n let selectorString;\r\n if (typeof rep.selector === 'string') {\r\n selectorString = rep.selector;\r\n ({ selector } = selectors.parse(selectorString));\r\n } else if (typeof rep.selector === 'undefined') {\r\n selectorString = settings.now.presets.default[0].selector;\r\n ({ selector } = selectors.parse(selectorString));\r\n } else {\r\n ({ selector } = rep);\r\n selectorString = selector.toString();\r\n }\r\n const mode = lookupAndCreate(modes, rep.mode);\r\n const colorer = lookupAndCreate(colorers, rep.colorer);\r\n const material = materials.get(rep.material) || materials.first;\r\n\r\n this._reprList[i] = new Representation(i, mode, colorer, selector);\r\n this._reprList[i].setMaterialPreset(material);\r\n this._reprList[i].selectorString = selectorString;\r\n\r\n if (this._complex) {\r\n this._complex.markAtoms(selector, 1 << i);\r\n }\r\n\r\n this._reprUsedBits |= 1 << i;\r\n }\r\n this._repr = reps.length > 0 ? this._reprList[0] : null;\r\n\r\n this._selectionBit = reps.length;\r\n this._reprUsedBits |= 1 << this._selectionBit; // selection uses one bit\r\n this._selectionCount = 0;\r\n\r\n if (this._complex) {\r\n this._complex.update();\r\n }\r\n }\r\n\r\n /**\r\n * Get number of representations created so far.\r\n * @returns {number} Number of reps.\r\n */\r\n repCount() {\r\n return this._reprList.length;\r\n }\r\n\r\n /**\r\n * Get or set the current representation index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @returns {number} The current index.\r\n */\r\n repCurrent(index) {\r\n if (index >= 0 && index < this._reprList.length) {\r\n this._repr = this._reprList[index];\r\n } else {\r\n index = this._reprList.indexOf(this._repr);\r\n }\r\n return index;\r\n }\r\n\r\n /**\r\n * Get or set representation by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @param {object=} rep - Optional representation description.\r\n * @param {string=} rep.selector - Selector string.\r\n * @param {string=} rep.mode - Mode id.\r\n * @param {string=} rep.colorer - Colorer id.\r\n * @param {string=} rep.material - Material id.\r\n * @returns {Object} {desc, index, status} field desc contains rep description, index - index of correspondent rep,\r\n * status - one of three strings: 'created', 'changed', ''. 'created' means new rep was created during this function,\r\n * 'changed' - rep was changed during this function. '' - something else.\r\n */\r\n rep(index, rep) {\r\n // if index is missing then it is the current\r\n if (!rep && (index === undefined || index instanceof Object)) {\r\n rep = index;\r\n index = this.repCurrent();\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index > this._reprList.length) {\r\n logger.error(`Rep ${index} does not exist!`);\r\n return null;\r\n }\r\n\r\n // a special case of adding just after the end\r\n if (index === this._reprList.length) {\r\n const res = this.repAdd(rep);\r\n logger.warn(`Rep ${index} does not exist! New representation was created.`);\r\n return { desc: res.desc, index, status: 'created' };\r\n }\r\n\r\n // gather description\r\n const target = this._reprList[index];\r\n const desc = {\r\n selector: target.selectorString,\r\n mode: target.mode.identify(),\r\n colorer: target.colorer.identify(),\r\n material: target.materialPreset.id,\r\n };\r\n\r\n // modification is requested\r\n if (rep) {\r\n // modify\r\n const diff = target.change(\r\n rep,\r\n this._complex,\r\n lookupAndCreate(modes, rep.mode),\r\n lookupAndCreate(colorers, rep.colorer),\r\n );\r\n\r\n // something was changed\r\n if (!_.isEmpty(diff)) {\r\n target.needsRebuild = true;\r\n for (const key in diff) {\r\n if (diff.hasOwnProperty(key)) {\r\n desc[key] = diff[key];\r\n logger.debug(`rep[${index}].${key} changed to ${diff[key]}`);\r\n }\r\n }\r\n\r\n // safety trick: lower resolution for surface modes\r\n if (diff.mode && target.mode.isSurface\r\n && (settings.now.resolution === 'ultra' || settings.now.resolution === 'high')) {\r\n logger.report('Surface resolution was changed to \"medium\" to avoid hang-ups.');\r\n settings.set('resolution', 'medium');\r\n }\r\n return { desc, index, status: 'changed' };\r\n }\r\n }\r\n return { desc, index, status: '' };\r\n }\r\n\r\n /**\r\n * Get representation (not just description) by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @returns {?object} Representation.\r\n */\r\n repGet(index) {\r\n // if index is missing then it is the current\r\n if (index === undefined || index instanceof Object) {\r\n index = this.repCurrent();\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index >= this._reprList.length) {\r\n return null;\r\n }\r\n\r\n return this._reprList[index];\r\n }\r\n\r\n _getFreeReprIdx() {\r\n let bits = this._reprUsedBits;\r\n for (let i = 0; i <= ComplexVisual.NUM_REPRESENTATION_BITS; ++i, bits >>= 1) {\r\n if ((bits & 1) === 0) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * Add new representation.\r\n * @param {object=} rep - Representation description.\r\n * @returns {Object} {desc, index} field desc contains added rep description, index - index of this rep.\r\n */\r\n repAdd(rep) {\r\n if (this._reprList.length >= ComplexVisual.NUM_REPRESENTATION_BITS) {\r\n return null;\r\n }\r\n\r\n const newSelectionBit = this._getFreeReprIdx();\r\n if (newSelectionBit < 0) {\r\n return null; // no more slots for representations\r\n }\r\n\r\n const originalSelection = this.buildSelectorFromMask(1 << this._selectionBit);\r\n\r\n // Fill in default values\r\n const def = settings.now.presets.default[0];\r\n const desc = _.merge({\r\n selector: def.selector,\r\n mode: def.mode,\r\n colorer: def.colorer,\r\n material: def.material,\r\n }, rep);\r\n\r\n const selector = (typeof desc.selector === 'string') ? selectors.parse(desc.selector).selector : desc.selector;\r\n const target = new Representation(\r\n this._selectionBit,\r\n lookupAndCreate(modes, desc.mode),\r\n lookupAndCreate(colorers, desc.colorer),\r\n selector,\r\n );\r\n target.selectorString = selector.toString();\r\n target.setMaterialPreset(materials.get(desc.material));\r\n target.markAtoms(this._complex);\r\n this._reprList.push(target);\r\n\r\n // change selection bit\r\n this._selectionBit = newSelectionBit;\r\n this._reprUsedBits |= 1 << this._selectionBit;\r\n\r\n // restore selection using new selection bit\r\n this._complex.markAtoms(originalSelection, 1 << this._selectionBit);\r\n\r\n return { desc, index: this._reprList.length - 1 };\r\n }\r\n\r\n /**\r\n * Remove representation.\r\n * @param {number=} index - Zero-based representation index.\r\n */\r\n repRemove(index) {\r\n if (index === undefined) {\r\n index = this.repCurrent();\r\n }\r\n\r\n // catch out of bounds case\r\n let count = this._reprList.length;\r\n if (index < 0 || index >= count || count <= 1) { // do not allow to remove the single rep\r\n return;\r\n }\r\n\r\n const target = this._reprList[index];\r\n target.unmarkAtoms(this._complex);\r\n this._reprUsedBits &= ~(1 << target.index);\r\n\r\n this._reprList.splice(index, 1);\r\n\r\n // update current rep\r\n if (target === this._repr) {\r\n --count;\r\n index = index < count ? index : count - 1;\r\n this._repr = this._reprList[index];\r\n }\r\n this._reprListChanged = true;\r\n }\r\n\r\n /**\r\n * Hide representation.\r\n * @param {number} index - Zero-based representation index.\r\n * @param {boolean=} hide - Specify false to make rep visible, true to hide (by default).\r\n */\r\n repHide(index, hide) {\r\n if (hide === undefined) {\r\n hide = true;\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index >= this._reprList.length) {\r\n return;\r\n }\r\n\r\n const target = this._reprList[index];\r\n target.show(!hide);\r\n }\r\n\r\n /**\r\n * Select atoms with selector\r\n * @param {Selector} selector - selector\r\n * @param {boolean=} append - true to append selection atoms to current selection, false to rewrite selection\r\n */\r\n select(selector, append) {\r\n if (append) {\r\n this._selectionCount += this._complex.markAtomsAdditionally(selector, 1 << this._selectionBit);\r\n } else {\r\n this._selectionCount = this._complex.markAtoms(selector, 1 << this._selectionBit);\r\n }\r\n this._complex.updateStructuresMask();\r\n this.rebuildSelectionGeometry();\r\n }\r\n\r\n resetSelectionMask() {\r\n if (this._selectionCount !== 0) {\r\n this._selectionCount = 0;\r\n if (this._complex) {\r\n this._complex.clearAtomBits(1 << this._selectionBit);\r\n }\r\n }\r\n }\r\n\r\n updateSelectionMask(pickedObj) {\r\n const self = this;\r\n const { atom } = pickedObj;\r\n let { residue, chain, molecule } = pickedObj;\r\n const setMask = 1 << this._selectionBit;\r\n const clearMask = ~setMask;\r\n\r\n if (atom) {\r\n residue = atom.residue;\r\n chain = residue._chain;\r\n molecule = residue._molecule;\r\n\r\n if (atom.mask & setMask) {\r\n atom.mask &= clearMask;\r\n residue._mask &= clearMask;\r\n chain._mask &= clearMask;\r\n if (molecule) {\r\n molecule.mask &= clearMask;\r\n }\r\n this._selectionCount--;\r\n } else {\r\n atom.mask |= setMask;\r\n this._selectionCount++;\r\n\r\n // select residue if all atoms in it are selected\r\n residue.collectMask();\r\n // select chain and molecule if all residues in it are selected\r\n chain.collectMask();\r\n if (molecule) {\r\n molecule.collectMask();\r\n }\r\n }\r\n } else if (residue) {\r\n chain = residue._chain;\r\n molecule = residue._molecule;\r\n\r\n if (residue._mask & setMask) {\r\n residue._mask &= clearMask;\r\n chain._mask &= clearMask;\r\n residue.forEachAtom((a) => {\r\n if (a.mask & setMask) {\r\n a.mask &= clearMask;\r\n self._selectionCount--;\r\n }\r\n });\r\n } else {\r\n residue._mask |= setMask;\r\n residue.forEachAtom((a) => {\r\n if (!(a.mask & setMask)) {\r\n a.mask |= setMask;\r\n self._selectionCount++;\r\n }\r\n });\r\n\r\n // select chain and molecule if all residues in it are selected\r\n chain.collectMask();\r\n if (molecule) {\r\n molecule.collectMask();\r\n }\r\n }\r\n } else if (chain || molecule) {\r\n const obj = chain || molecule;\r\n if (obj._mask & setMask) {\r\n obj._mask &= clearMask;\r\n obj.forEachResidue((r) => {\r\n if (r._mask & setMask) {\r\n r._mask &= clearMask;\r\n r.forEachAtom((a) => {\r\n if (a.mask & setMask) {\r\n a.mask &= clearMask;\r\n self._selectionCount--;\r\n }\r\n });\r\n r._mask &= clearMask;\r\n }\r\n });\r\n } else {\r\n obj._mask |= setMask;\r\n obj.forEachResidue((r) => {\r\n if (!(r._mask & setMask)) {\r\n r._mask |= setMask;\r\n r.forEachAtom((a) => {\r\n if (!(a.mask & setMask)) {\r\n a.mask |= setMask;\r\n self._selectionCount++;\r\n }\r\n });\r\n const otherObj = chain ? r.getMolecule() : r.getChain();\r\n if (otherObj) {\r\n otherObj.collectMask();\r\n }\r\n }\r\n });\r\n }\r\n } else {\r\n this.resetSelectionMask();\r\n }\r\n }\r\n\r\n expandSelection() {\r\n const self = this;\r\n const selectionMask = 1 << this._selectionBit;\r\n const tmpMask = 1 << 31;\r\n\r\n // mark atoms to add\r\n this._complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n bond._right.mask |= tmpMask;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n bond._left.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // select marked atoms\r\n const deselectionMask = ~tmpMask;\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & tmpMask) {\r\n atom.mask = (atom.mask & deselectionMask) | selectionMask;\r\n ++self._selectionCount;\r\n }\r\n });\r\n\r\n this._complex.updateStructuresMask();\r\n }\r\n\r\n shrinkSelection() {\r\n const self = this;\r\n const selectionMask = 1 << this._selectionBit;\r\n const tmpMask = 1 << 31;\r\n\r\n // mark atoms neighbouring to unselected ones\r\n this._complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n bond._left.mask |= tmpMask;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n bond._right.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // mark hanging atoms\r\n this._complex.forEachAtom((atom) => {\r\n if ((atom.mask & selectionMask) && (atom.bonds.length === 1)) {\r\n atom.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // deselect marked atoms\r\n const deselectionMask = ~(selectionMask | tmpMask);\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & tmpMask) {\r\n atom.mask &= deselectionMask;\r\n --self._selectionCount;\r\n }\r\n });\r\n\r\n this._complex.updateStructuresMask();\r\n }\r\n\r\n getSelectedComponent() {\r\n const selectionMask = 1 << this._selectionBit;\r\n\r\n let component = null;\r\n let multiple = false;\r\n\r\n // find which component is selected (exclusively)\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & selectionMask) {\r\n if (component === null) {\r\n component = atom.residue._component;\r\n } else if (component !== atom.residue._component) {\r\n multiple = true;\r\n }\r\n }\r\n });\r\n\r\n return multiple ? null : component;\r\n }\r\n\r\n getSelectionCenter(center, includesAtom, selRule) {\r\n center.set(0.0, 0.0, 0.0);\r\n let count = 0;\r\n\r\n this._complex.forEachAtom((atom) => {\r\n if (includesAtom(atom, selRule)) {\r\n center.add(atom.position);\r\n count++;\r\n }\r\n });\r\n if (count === 0) {\r\n return false;\r\n }\r\n center.divideScalar(count);\r\n center.applyMatrix4(this.matrix);\r\n return true;\r\n }\r\n\r\n needsRebuild() {\r\n if (this._reprListChanged) {\r\n return true;\r\n }\r\n const reprList = this._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n if (repr.needsRebuild) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Rebuild molecule geometry asynchronously.\r\n */\r\n rebuild() {\r\n const self = this;\r\n\r\n // Destroy current geometry\r\n gfxutils.clearTree(this);\r\n\r\n return new Promise(((resolve) => {\r\n // Nothing to do?\r\n const complex = self._complex;\r\n if (!complex) {\r\n resolve();\r\n return;\r\n }\r\n\r\n let errorOccured = false;\r\n setTimeout(() => {\r\n console.time('build');\r\n const reprList = self._reprList;\r\n const palette = palettes.get(settings.now.palette) || palettes.first;\r\n let hasGeometry = false;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n repr.colorer.palette = palette;\r\n\r\n if (repr.needsRebuild) {\r\n repr.reset();\r\n\r\n try {\r\n repr.buildGeometry(complex);\r\n } catch (e) {\r\n if (e instanceof utils.OutOfMemoryError) {\r\n repr.needsRebuild = false;\r\n repr.reset();\r\n logger.error(`Not enough memory to build geometry for representation ${repr.index + 1}`);\r\n errorOccured = true;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n\r\n if (DEBUG && !errorOccured) {\r\n logger.debug(`Triangles count: ${meshutils.countTriangles(repr.geo)}`);\r\n }\r\n }\r\n\r\n hasGeometry = errorOccured || hasGeometry || gfxutils.groupHasGeometryToRender(repr.geo);\r\n\r\n if (repr.geo) {\r\n self.add(repr.geo);\r\n }\r\n }\r\n\r\n self._reprListChanged = false;\r\n\r\n console.timeEnd('build');\r\n resolve();\r\n }, 10);\r\n }));\r\n }\r\n\r\n setNeedsRebuild() {\r\n // invalidate all representations\r\n const reprList = this._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n reprList[i].needsRebuild = true;\r\n }\r\n }\r\n\r\n rebuildSelectionGeometry() {\r\n const mask = 1 << this._selectionBit;\r\n\r\n gfxutils.clearTree(this._selectionGeometry);\r\n\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const repr = this._reprList[i];\r\n const sg = repr.buildSelectionGeometry(mask);\r\n if (!sg) {\r\n continue;\r\n }\r\n\r\n this._selectionGeometry.add(sg);\r\n for (let j = 0; j < sg.children.length; j++) {\r\n const m = sg.children[j];\r\n\r\n // copy component transform (that's not applied yet)\r\n // TODO make this code obsolete, accessing editor is bad\r\n if (this._editor && this._editor._componentTransforms) {\r\n const t = this._editor._componentTransforms[m._component._index];\r\n if (t) {\r\n m.position.copy(t.position);\r\n m.quaternion.copy(t.quaternion);\r\n }\r\n }\r\n }\r\n\r\n gfxutils.applySelectionMaterial(sg);\r\n }\r\n }\r\n\r\n _buildSelectorFromSortedLists(atoms, residues, chains) {\r\n const complex = this._complex;\r\n\r\n function optimizeList(list) {\r\n const result = [];\r\n let k = 0;\r\n let first = NaN;\r\n let last = NaN;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n const value = list[i];\r\n if (value === last + 1) {\r\n last = value;\r\n } else {\r\n if (!Number.isNaN(first)) {\r\n result[k++] = new selectors.Range(first, last);\r\n }\r\n first = last = value;\r\n }\r\n }\r\n if (!Number.isNaN(first)) {\r\n result[k] = new selectors.Range(first, last);\r\n }\r\n return result;\r\n }\r\n\r\n let expression = null;\r\n if (chains.length === complex._chains.length) {\r\n expression = selectors.all();\r\n } else {\r\n let selector;\r\n if (chains.length > 0) {\r\n selector = selectors.chain(chains);\r\n expression = expression ? selectors.or(expression, selector) : selector;// NOSONAR\r\n }\r\n if (Object.keys(residues).length > 0) {\r\n for (const ch in residues) {\r\n if (residues.hasOwnProperty(ch)) {\r\n selector = selectors.and(\r\n selectors.chain(ch),\r\n selectors.residx(optimizeList(residues[ch])),\r\n );\r\n expression = expression ? selectors.or(expression, selector) : selector;\r\n }\r\n }\r\n }\r\n if (atoms.length > 0) {\r\n selector = selectors.serial(optimizeList(atoms));\r\n expression = expression ? selectors.or(expression, selector) : selector;\r\n }\r\n\r\n if (!expression) {\r\n expression = selectors.none();\r\n }\r\n }\r\n\r\n return expression;\r\n }\r\n\r\n buildSelectorFromMask(mask) {\r\n const complex = this._complex;\r\n const chains = [];\r\n const residues = {};\r\n const atoms = [];\r\n\r\n complex.forEachChain((chain) => {\r\n if (chain._mask & mask) {\r\n chains.push(chain._name);\r\n }\r\n });\r\n\r\n complex.forEachResidue((residue) => {\r\n if (residue._mask & mask && !(residue._chain._mask & mask)) {\r\n const c = residue._chain._name;\r\n if (!(c in residues)) {\r\n residues[c] = [residue._index];\r\n } else {\r\n residues[c].push(residue._index);\r\n }\r\n }\r\n });\r\n\r\n complex.forEachAtom((atom) => {\r\n if (atom.mask & mask && !(atom.residue._mask & mask)) {\r\n atoms.push(atom.serial);\r\n }\r\n });\r\n\r\n return this._buildSelectorFromSortedLists(atoms, residues, chains);\r\n }\r\n\r\n forSelectedResidues(process) {\r\n const selectionMask = 1 << this._selectionBit;\r\n this._complex.forEachResidue((residue) => {\r\n if (residue._mask & selectionMask) {\r\n process(residue);\r\n }\r\n });\r\n }\r\n\r\n beginComponentEdit() {\r\n if (this._editor) {\r\n return null;\r\n }\r\n\r\n const editor = new ComplexVisualEdit.ComponentEditor(this);\r\n if (!editor.begin()) {\r\n return null;\r\n }\r\n\r\n this._editor = editor;\r\n return editor;\r\n }\r\n\r\n beginFragmentEdit() {\r\n if (this._editor) {\r\n return null;\r\n }\r\n\r\n const editor = new ComplexVisualEdit.FragmentEditor(this);\r\n if (!editor.begin()) {\r\n return null;\r\n }\r\n\r\n this._editor = editor;\r\n return editor;\r\n }\r\n\r\n // should only be called by editors\r\n finalizeEdit() {\r\n this._editor = null;\r\n }\r\n\r\n setMaterialValues(values, needTraverse = false, process = undefined) {\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const rep = this._reprList[i];\r\n rep.material.setValues(values);\r\n if (needTraverse) {\r\n rep.geo.traverse((object) => {\r\n if (object instanceof THREE.Mesh) {\r\n object.material.setValues(values);\r\n\r\n if (process !== undefined) {\r\n process(object);\r\n }\r\n\r\n object.material.needsUpdate = true;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n setUberOptions(values) {\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const rep = this._reprList[i];\r\n rep.material.setUberOptions(values);\r\n }\r\n }\r\n\r\n /**\r\n * Build selector that contains all atoms within given distance from group of atoms\r\n * @param {Selector} selector - selector describing source group of atoms\r\n * @param {number} radius - distance\r\n * @returns {Selector} selector describing result group of atoms\r\n */\r\n within(selector, radius) {\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return false;\r\n }\r\n\r\n // mark atoms of the group as selected\r\n const selectionMask = 1 << this._selectionBit;\r\n this._complex.markAtoms(selector, selectionMask);\r\n\r\n // mark all atoms within distance as selected\r\n if (vw) {\r\n vw.forEachAtomWithinDistFromMasked(this._complex, selectionMask, Number(radius), (atom) => {\r\n atom.mask |= selectionMask;\r\n });\r\n }\r\n\r\n // update selection count\r\n this._selectionCount = this._complex.countAtomsByMask(selectionMask);\r\n\r\n // update secondary structure mask\r\n this._complex.updateStructuresMask();\r\n\r\n return this.buildSelectorFromMask(selectionMask);\r\n }\r\n}\r\n// 32 bits = 30 bits for reps + 1 for selection + 1 for selection expansion\r\nComplexVisual.NUM_REPRESENTATION_BITS = 30;\r\n\r\nexport default ComplexVisual;\r\n","import * as THREE from 'three';\r\nimport vertexVolumeFaces from './VolumeFaces.vert';\r\nimport fragmentVolumeFaces from './VolumeFaces.frag';\r\nimport vertexVolume from './Volume.vert';\r\nimport fragmentVolume from './Volume.frag';\r\nimport vertexFarPlane from './VolumeFarPlane.vert';\r\nimport fragmentFarPlane from './VolumeFarPlane.frag';\r\nimport settings from '../../settings';\r\n\r\nconst volumeUniforms = THREE.UniformsUtils.merge([\r\n {\r\n volumeDim: { type: 'v3', value: new THREE.Vector3(512, 512, 512) },\r\n tileTex: { type: 't', value: null },\r\n tileTexSize: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n tileStride: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n\r\n boxAngles: { type: 'v3', value: new THREE.Vector3(1, 1, 1) },\r\n delta: { type: 'v3', value: new THREE.Vector3(0, 0, 0) },\r\n\r\n _isoLevel0: { type: 'v2', value: new THREE.Vector3(0.5, 0.75, 1.0) },\r\n _flipV: { type: 'f', value: 0.0 },\r\n _BFLeft: { type: 't', value: null },\r\n _BFRight: { type: 't', value: null },\r\n _FFLeft: { type: 't', value: null },\r\n _FFRight: { type: 't', value: null },\r\n _WFFLeft: { type: 't', value: null },\r\n _WFFRight: { type: 't', value: null },\r\n },\r\n]);\r\n\r\nfunction overrideUniforms(params, defUniforms) {\r\n const uniforms = THREE.UniformsUtils.clone(defUniforms);\r\n for (const p in params) {\r\n if (uniforms.hasOwnProperty(p)) {\r\n uniforms[p].value = params[p];\r\n }\r\n }\r\n return uniforms;\r\n}\r\n\r\nfunction facesPosMaterialParams(params, sideType) {\r\n return {\r\n uniforms: overrideUniforms(params, {}),\r\n vertexShader: vertexVolumeFaces,\r\n fragmentShader: fragmentVolumeFaces,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n side: sideType,\r\n };\r\n}\r\n\r\nclass BackFacePosMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const backFaceParams = facesPosMaterialParams(params, THREE.BackSide);\r\n super(backFaceParams);\r\n }\r\n}\r\n\r\nclass ShaderParams {\r\n constructor(params, uniforms, vertexShader, fragmentShader) {\r\n this.uniforms = overrideUniforms(params, uniforms);\r\n this.vertexShader = vertexShader;\r\n this.fragmentShader = fragmentShader;\r\n this.transparent = false;\r\n this.depthTest = false;\r\n this.depthWrite = false;\r\n this.side = THREE.FrontSide;\r\n }\r\n}\r\n\r\nclass BackFacePosMaterialFarPlane extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const matUniforms = THREE.UniformsUtils.merge([\r\n {\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n farZ: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n matWorld2Volume: { type: '4fv', value: new THREE.Matrix4() },\r\n },\r\n ]);\r\n\r\n const shaderParams = new ShaderParams(params, matUniforms, vertexFarPlane, fragmentFarPlane);\r\n super(shaderParams);\r\n }\r\n}\r\n\r\nclass FrontFacePosMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const frontFaceParams = facesPosMaterialParams(params, THREE.FrontSide);\r\n super(frontFaceParams);\r\n }\r\n}\r\n\r\nclass VolumeMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const shaderParams = new ShaderParams(params, volumeUniforms, vertexVolume, fragmentVolume);\r\n shaderParams.transparent = true;\r\n shaderParams.depthTest = true;\r\n\r\n super(shaderParams);\r\n this.updateDefines();\r\n }\r\n\r\n updateDefines() {\r\n this.defines = {\r\n ISO_MODE: settings.now.modes.VD.isoMode,\r\n STEPS_COUNT: settings.now.modes.VD.polyComplexity[settings.now.resolution] * 100,\r\n };\r\n this.needsUpdate = true;\r\n }\r\n}\r\n\r\nexport default {\r\n BackFacePosMaterial,\r\n BackFacePosMaterialFarPlane,\r\n FrontFacePosMaterial,\r\n VolumeMaterial,\r\n};\r\n","import * as THREE from 'three';\r\nimport VolumeMaterial from './shaders/VolumeMaterial';\r\nimport settings from '../settings';\r\n\r\nclass VolumeMesh extends THREE.Mesh {\r\n volumeInfo = {}; // data for noise filter\r\n\r\n constructor() {\r\n const geo = new THREE.BufferGeometry();\r\n super(geo);\r\n this.clipPlane = new THREE.Plane();\r\n const size = new THREE.Vector3(0.5, 0.5, 0.5);\r\n this.size = size;\r\n\r\n this.cullFlag = [\r\n true, true, true, true,\r\n true, true, true, true,\r\n false, false, false, false, false, false,\r\n ];\r\n\r\n this.faces = [\r\n { indices: [], norm: new THREE.Vector3(0, 0, -1) },\r\n { indices: [], norm: new THREE.Vector3(0, 0, 1) },\r\n { indices: [], norm: new THREE.Vector3(0, -1, 0) },\r\n { indices: [], norm: new THREE.Vector3(0, 1, 0) },\r\n { indices: [], norm: new THREE.Vector3(-1, 0, 0) },\r\n { indices: [], norm: new THREE.Vector3(1, 0, 0) },\r\n { indices: [], norm: new THREE.Vector3(0, 0, 0) },\r\n ];\r\n\r\n this.vertices = [\r\n new THREE.Vector3(-size.x, -size.y, -size.z),\r\n new THREE.Vector3(-size.x, size.y, -size.z),\r\n new THREE.Vector3(size.x, -size.y, -size.z),\r\n new THREE.Vector3(size.x, size.y, -size.z),\r\n new THREE.Vector3(-size.x, -size.y, size.z),\r\n new THREE.Vector3(-size.x, size.y, size.z),\r\n new THREE.Vector3(size.x, -size.y, size.z),\r\n new THREE.Vector3(size.x, size.y, size.z),\r\n new THREE.Vector3(0.0, 0.0, 0.0), // Placeholder for section\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n ];\r\n\r\n geo.setAttribute('position', new THREE.BufferAttribute(new Float32Array(this.vertices.length * 3), 3));\r\n\r\n this.name = 'VolumeMesh';\r\n }\r\n\r\n static _corners = [\r\n // x, y, z, edge1, edge2, edge3\r\n [-1, -1, -1, 0, 4, 8],\r\n [1, -1, -1, 0, 5, 9],\r\n [1, 1, -1, 1, 5, 10],\r\n [-1, 1, -1, 1, 4, 11],\r\n [-1, -1, 1, 2, 6, 8],\r\n [1, -1, 1, 2, 7, 9],\r\n [1, 1, 1, 3, 7, 10],\r\n [-1, 1, 1, 3, 6, 11],\r\n ];\r\n\r\n static _edges = [\r\n // corner1, corner2, center_x, center_y, center_z\r\n [0, 1, 0, -1, -1],\r\n [2, 3, 0, 1, -1],\r\n [4, 5, 0, -1, 1],\r\n [6, 7, 0, 1, 1],\r\n [0, 3, -1, 0, -1],\r\n [1, 2, 1, 0, -1],\r\n [4, 7, -1, 0, 1],\r\n [5, 6, 1, 0, 1],\r\n [0, 4, -1, -1, 0],\r\n [1, 5, 1, -1, 0],\r\n [2, 6, -1, 1, 0],\r\n [3, 7, 1, 1, 0],\r\n ];\r\n\r\n static _edgeIntersections = (function () {\r\n const edgeIntersections = [];\r\n for (let j = 0; j < 12; ++j) {\r\n edgeIntersections.push(new THREE.Vector3());\r\n }\r\n return edgeIntersections;\r\n }());\r\n\r\n _updateVertices() {\r\n // Algorithm:\r\n // 1. Get plane parameters\r\n // 2. Compute culling flags for all vertices\r\n // 3. If intersection occurs => compute from 3 to 6 intersection points\r\n const corners = VolumeMesh._corners;\r\n const edges = VolumeMesh._edges;\r\n const edgeIntersections = VolumeMesh._edgeIntersections;\r\n\r\n let i;\r\n\r\n const norm = this.clipPlane.normal;\r\n const D = this.clipPlane.constant;\r\n\r\n const vert = this.vertices;\r\n const { size } = this;\r\n\r\n const cornerMark = [0, 0, 0, 0, 0, 0, 0, 0];\r\n const edgeMark = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\r\n\r\n const curEdge = new THREE.Vector3();\r\n let curEdgeInter = null;\r\n\r\n function CheckX() {\r\n if (norm.x === 0) return 0;\r\n const x = -(norm.dot(curEdge) + D) / norm.x;\r\n if (-size.x <= x && x <= size.x) {\r\n curEdgeInter.set(x, curEdge.y, curEdge.z);\r\n if (x === size.x) return 2;\r\n if (x === -size.x) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n function CheckY() {\r\n if (norm.y === 0) return 0;\r\n const y = -(norm.dot(curEdge) + D) / norm.y;\r\n if (-size.y <= y && y <= size.y) {\r\n curEdgeInter.set(curEdge.x, y, curEdge.z);\r\n if (y === size.y) return 2;\r\n if (y === -size.y) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n function CheckZ() {\r\n if (norm.z === 0) return 0;\r\n const z = -(norm.dot(curEdge) + D) / norm.z;\r\n if (-size.z <= z && z <= size.z) {\r\n curEdgeInter.set(curEdge.x, curEdge.y, z);\r\n if (z === size.z) return 2;\r\n if (z === -size.z) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n // for each edge\r\n for (let curEdgeIdx = 0; curEdgeIdx < 12; ++curEdgeIdx) {\r\n const curEdgeSource = edges[curEdgeIdx];\r\n curEdgeInter = edgeIntersections[curEdgeIdx];\r\n\r\n curEdge.set(curEdgeSource[2], curEdgeSource[3], curEdgeSource[4]);\r\n curEdge.multiply(size);\r\n\r\n // calculate intersection point\r\n let flag = 0;\r\n if (curEdgeSource[2] === 0) flag = CheckX();\r\n if (curEdgeSource[3] === 0) flag = CheckY();\r\n if (curEdgeSource[4] === 0) flag = CheckZ();\r\n\r\n // mark corresponding corner (if plane cuts through one)\r\n if (flag === -2) {\r\n cornerMark[curEdgeSource[0]] = 1;\r\n } else if (flag === 2) {\r\n cornerMark[curEdgeSource[1]] = 1;\r\n } else if (flag === 0) {\r\n // edge is not intersected by the plane (doesn't produce a vertex)\r\n edgeMark[curEdgeIdx] = 0;\r\n }\r\n }\r\n\r\n const face = {\r\n indices: [],\r\n norm: norm.clone().negate(),\r\n };\r\n\r\n let nextVertex = 8;\r\n\r\n // for each marked corner\r\n for (i = 0; i < 8; ++i) {\r\n if (cornerMark[i] === 1) {\r\n // add corner as vertex to the face\r\n vert[nextVertex].set(corners[i][0], corners[i][1], corners[i][2]).multiply(size);\r\n face.indices.push(nextVertex++);\r\n // skip adjacent edges\r\n edgeMark[corners[i][3]] = 0;\r\n edgeMark[corners[i][4]] = 0;\r\n edgeMark[corners[i][5]] = 0;\r\n }\r\n }\r\n\r\n // for each edge that has internal intersection\r\n for (i = 0; i < 12; ++i) {\r\n if (edgeMark[i] === 1) {\r\n // add intersection point as vertex to the face\r\n vert[nextVertex].copy(edgeIntersections[i]);\r\n face.indices.push(nextVertex++);\r\n }\r\n }\r\n\r\n this.faces[6] = face;\r\n\r\n const diff = new THREE.Vector3();\r\n const coplanarPoint = new THREE.Vector3();\r\n this.clipPlane.coplanarPoint(coplanarPoint);\r\n for (i = 0; i < vert.length; ++i) {\r\n this.cullFlag[i] = false;\r\n if (i < 8) {\r\n // corners should be culled by clipping plane\r\n diff.subVectors(vert[i], coplanarPoint);\r\n this.cullFlag[i] = (norm.dot(diff) >= 0.0);\r\n } else if (i < 8 + face.indices.length) {\r\n // cross section vertices don't get culled\r\n this.cullFlag[i] = true;\r\n }\r\n }\r\n\r\n // write data to vertex buffer\r\n const positions = this.geometry.getAttribute('position');\r\n let idx = 0;\r\n for (i = 0; i < vert.length; ++i) {\r\n positions.array[idx++] = vert[i].x;\r\n positions.array[idx++] = vert[i].y;\r\n positions.array[idx++] = vert[i].z;\r\n }\r\n positions.needsUpdate = true;\r\n }\r\n\r\n _collectVertices(face, filter) {\r\n let i;\r\n const vert = this.vertices;\r\n face.indices = [];\r\n for (i = 0; i < vert.length; ++i) {\r\n if (this.cullFlag[i] && filter(vert[i])) {\r\n face.indices.push(i);\r\n }\r\n }\r\n }\r\n\r\n _sortIndices(face, right) {\r\n let i;\r\n let j;\r\n const vert = this.vertices;\r\n const angle = [];\r\n\r\n const dir = new THREE.Vector3();\r\n for (i = 1; i < face.indices.length; ++i) {\r\n dir.subVectors(vert[face.indices[i]], vert[face.indices[0]]);\r\n dir.normalize();\r\n dir.cross(right);\r\n dir.negate();\r\n angle[i] = face.norm.dot(dir);\r\n }\r\n\r\n // Exchange sort\r\n for (i = 1; i < face.indices.length - 1; ++i) {\r\n for (j = i + 1; j < face.indices.length; ++j) {\r\n if (angle[j] < angle[i]) {\r\n // swap\r\n let t = angle[i];\r\n angle[i] = angle[j];\r\n angle[j] = t;\r\n\r\n t = face.indices[i];\r\n face.indices[i] = face.indices[j];\r\n face.indices[j] = t;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _updateIndices() {\r\n // Algorithm:\r\n // 1. Get plane vertices (from 3 to 6 vertices)\r\n // 2. Get \"right\" vector in plane\r\n // 3. Sort vertices using Graham-like method\r\n // 4. Create indices\r\n\r\n let i;\r\n let faceIdx;\r\n let face;\r\n const vert = this.vertices;\r\n const { size } = this;\r\n\r\n this._collectVertices(this.faces[0], (vertex) => vertex.z === -size.z);\r\n this._collectVertices(this.faces[1], (vertex) => vertex.z === size.z);\r\n this._collectVertices(this.faces[2], (vertex) => vertex.y === -size.y);\r\n this._collectVertices(this.faces[3], (vertex) => vertex.y === size.y);\r\n this._collectVertices(this.faces[4], (vertex) => vertex.x === -size.x);\r\n this._collectVertices(this.faces[5], (vertex) => vertex.x === size.x);\r\n\r\n const vCenter = new THREE.Vector3();\r\n const vRight = new THREE.Vector3();\r\n const vDir = new THREE.Vector3();\r\n\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n\r\n if (face.indices.length === 0) continue;\r\n\r\n vCenter.set(0, 0, 0);\r\n for (i = 0; i < face.indices.length; ++i) {\r\n vCenter.add(vert[face.indices[i]]);\r\n }\r\n vCenter.multiplyScalar(1.0 / face.indices.length);\r\n vRight.subVectors(vert[face.indices[0]], vCenter);\r\n vRight.normalize();\r\n\r\n const rightProj = [];\r\n for (i = 0; i < face.indices.length; ++i) {\r\n vDir.subVectors(vert[face.indices[i]], vCenter);\r\n rightProj[i] = vDir.dot(vRight);\r\n }\r\n for (i = 1; i < face.indices.length; ++i) {\r\n if (rightProj[i] < rightProj[0]) {\r\n // swap\r\n let t = rightProj[0];\r\n rightProj[0] = rightProj[i];\r\n rightProj[i] = t;\r\n\r\n [t] = face.indices;\r\n face.indices[0] = face.indices[i];\r\n face.indices[i] = t;\r\n }\r\n }\r\n\r\n this._sortIndices(face, vRight);\r\n }\r\n\r\n let numIndices = 0;\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n if (face.indices.length >= 3) {\r\n numIndices += 3 * (face.indices.length - 2);\r\n }\r\n }\r\n let offset = 0;\r\n const indices = new Uint16Array(numIndices);\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n for (i = 0; i < face.indices.length - 2; ++i) {\r\n indices[offset] = face.indices[0]; // eslint-disable-line prefer-destructuring\r\n indices[offset + 1] = face.indices[i + 1];\r\n indices[offset + 2] = face.indices[i + 2];\r\n offset += 3;\r\n }\r\n }\r\n\r\n this.geometry.setIndex(new THREE.BufferAttribute(indices, 1));\r\n }\r\n\r\n setDataSource(dataSource) {\r\n const vm = new VolumeMaterial.VolumeMaterial();\r\n const dim = dataSource.getDimensions();\r\n const stride = dataSource.getTiledTextureStride();\r\n const texture = dataSource.buildTiledTexture();\r\n const bbox = dataSource.getBox();\r\n vm.uniforms.volumeDim.value.set(dim[0], dim[1], dim[2]);\r\n vm.uniforms.tileTex.value = texture;\r\n vm.uniforms.tileTexSize.value.set(texture.image.width, texture.image.height);\r\n vm.uniforms.tileStride.value.set(stride[0], stride[1]);\r\n Object.assign(this.volumeInfo, dataSource.getVolumeInfo());\r\n\r\n const volInfo = this.volumeInfo;\r\n vm.uniforms.delta.value.copy(volInfo.delta);\r\n vm.uniforms.boxAngles.value.set(volInfo.obtuseAngle[0], volInfo.obtuseAngle[1], volInfo.obtuseAngle[2]);\r\n\r\n this.material = vm;\r\n\r\n bbox.getSize(this.scale);\r\n bbox.getCenter(this.position);\r\n }\r\n\r\n _updateIsoLevel() {\r\n const { kSigma, kSigmaMed, kSigmaMax } = settings.now.modes.VD;\r\n const volInfo = this.volumeInfo;\r\n const mean = volInfo.dmean - volInfo.dmin;\r\n const span = volInfo.dmax - volInfo.dmin;\r\n const level = (k) => (mean + k * volInfo.sd) / span;\r\n this.material.uniforms._isoLevel0.value.set(level(kSigma), level(kSigmaMed), level(kSigmaMax));\r\n }\r\n\r\n static _nearClipPlaneOffset = 0.2;\r\n\r\n static _pos = new THREE.Vector3();\r\n\r\n static _norm = new THREE.Vector3();\r\n\r\n static _norm4D = new THREE.Vector4();\r\n\r\n static _matrixWorldToLocal = new THREE.Matrix4();\r\n\r\n static _clipPlane = new THREE.Plane();\r\n\r\n rebuild(camera) {\r\n const nearClipPlaneOffset = VolumeMesh._nearClipPlaneOffset;\r\n const pos = VolumeMesh._pos;\r\n const norm = VolumeMesh._norm;\r\n const norm4D = VolumeMesh._norm4D;\r\n const matrixWorldToLocal = VolumeMesh._matrixWorldToLocal;\r\n const clipPlane = VolumeMesh._clipPlane;\r\n\r\n this._updateIsoLevel();\r\n\r\n // get clip plane in local space\r\n camera.getWorldDirection(norm);\r\n camera.getWorldPosition(pos);\r\n pos.addScaledVector(norm, camera.near + nearClipPlaneOffset);\r\n\r\n // transform pos to local CS\r\n matrixWorldToLocal.copy(this.matrixWorld).invert();\r\n pos.applyMatrix4(matrixWorldToLocal);\r\n\r\n // transform norm to local CS\r\n norm4D.set(norm.x, norm.y, norm.z, 0.0); // NOTE: use homogeneous norm for proper transformation\r\n norm4D.applyMatrix4(matrixWorldToLocal);\r\n norm.copy(norm4D);\r\n norm.normalize();\r\n\r\n clipPlane.setFromNormalAndCoplanarPoint(norm, pos);\r\n\r\n if (!this.clipPlane.equals(clipPlane)) {\r\n this.clipPlane = clipPlane.clone();\r\n this._updateVertices();\r\n this._updateIndices();\r\n }\r\n }\r\n}\r\n\r\nexport default VolumeMesh;\r\n","import * as THREE from 'three';\r\nimport gfxutils from './gfxutils';\r\n\r\nfunction _flattenArray(input) {\r\n const n = input.length;\r\n const output = new Float32Array(n * 3);\r\n for (let i = 0; i < n; ++i) {\r\n const j = 3 * i;\r\n const v = input[i];\r\n output[j] = v.x;\r\n output[j + 1] = v.y;\r\n output[j + 2] = v.z;\r\n }\r\n return output;\r\n}\r\n\r\nclass VolumeBounds {\r\n static _projectionTable = { // corresponds between (origin axes and angles between them) and between saving vector coordinates\r\n XY: ['x', 2],\r\n XZ: ['y', 1],\r\n YZ: ['z', 0],\r\n };\r\n\r\n constructor(bBox, volInfo) {\r\n const { delta } = volInfo; // {x: XY, y : XZ, z: YZ}\r\n const { obtuseAngle } = volInfo; // 1 - obtuse, 0 - acute\r\n\r\n const bSize = new THREE.Vector3();\r\n bBox.getSize(bSize);\r\n bSize.multiplyScalar(0.5);\r\n\r\n const offsetVert = this._getBaseVertices(delta, obtuseAngle);\r\n\r\n const geometry = new THREE.BufferGeometry();\r\n const vertices = [];\r\n\r\n for (let i = 0; i < 4; i++) {\r\n vertices.push(offsetVert[i].clone().multiply(bSize));\r\n vertices.push(offsetVert[(i + 1) % 4].clone().multiply(bSize));\r\n }\r\n const translation = new THREE.Vector3(2 * bSize.x * (1 - delta.x - delta.y), 0, 0);\r\n for (let i = 0; i < 8; i++) {\r\n vertices.push(vertices[i].clone().add(translation));\r\n }\r\n for (let i = 0; i < 4; i++) {\r\n vertices.push(vertices[i * 2].clone());\r\n vertices.push(vertices[i * 2 + 8].clone());\r\n }\r\n const center = new THREE.Vector3();\r\n bBox.getCenter(center);\r\n vertices.forEach((vertex) => vertex.add(center)); // pivot shift\r\n\r\n const flatVertices = _flattenArray(vertices);\r\n geometry.setAttribute('position', new THREE.BufferAttribute(flatVertices, 3));\r\n\r\n this._lines = new THREE.LineSegments(geometry, new THREE.LineBasicMaterial({ color: 0xFFFFFF }));\r\n this._lines.layers.set(gfxutils.LAYERS.VOLUME);\r\n }\r\n\r\n // Set one edge (4 points) of frame, from which with parallel transfer the rest of the frame points can be obtained\r\n _getBaseVertices(delta, obtuseAngle) {\r\n const projTable = VolumeBounds._projectionTable;\r\n\r\n const proj = ((index, inv) => { // tricky function to take account of projections: their position(related to box) and sign\r\n const currDelta = delta[projTable[index][0]];\r\n const angleValue = -0.5 * (inv - 1) + inv * obtuseAngle[projTable[index][1]];// inv = 1: alpha; inv = -1: 1 - alpha\r\n return angleValue * currDelta;\r\n });\r\n\r\n const offsetVert = [\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', 1) + proj('XY', 1)), -1 + 2 * proj('YZ', 1), -1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', -1) + proj('XY', 1)), -1 + 2 * proj('YZ', -1), 1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', -1) + proj('XY', -1)), 1 - 2 * proj('YZ', 1), 1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', 1) + proj('XY', -1)), 1 - 2 * proj('YZ', -1), -1),\r\n ];\r\n\r\n return offsetVert;\r\n }\r\n\r\n getMesh() {\r\n return this._lines;\r\n }\r\n}\r\n\r\nexport default VolumeBounds;\r\n","import * as THREE from 'three';\r\nimport VolumeMaterial from './shaders/VolumeMaterial';\r\nimport meshes from './meshes/meshes';\r\nimport gfxutils from './gfxutils';\r\n\r\n// Thes geometric far plane is required for correct filling in the BFTexture in case, when far plane cuts the volume\r\n// cube. In cut place of cube there is no correct data in BFTexture and volume rendering integral is calculated\r\n// with errors.\r\n// Far plane cuts the cube in case of large volume scale (zoom), because farplane doesn't change\r\nclass VolumeFarPlane {\r\n // create plane with unit corners coords (for future rescale in vshader according to camera properties)\r\n constructor(volume, width, height) {\r\n const planeGeo = this._initPlaneGeo(width, height);\r\n\r\n const mat = new VolumeMaterial.BackFacePosMaterialFarPlane();\r\n this._plane = new meshes.Mesh(planeGeo, mat);\r\n this._plane.frustumCulled = false;\r\n this._plane.doubleSided = true;\r\n const matWorldToVolume = new THREE.Matrix4();\r\n\r\n this._plane._onBeforeRender = function (_renderer, _scene, camera, _geometry, _material, _group) {\r\n const { material } = this;\r\n if (!volume || !material) {\r\n return;\r\n }\r\n\r\n // count point in world at farplane place\r\n const planeCamPos = new THREE.Vector4(0, 0, -(camera.far - 0.1), 1);\r\n planeCamPos.applyMatrix4(camera.matrixWorld);\r\n\r\n // recalc matrices to make plane be placed as farplane in the World relative to camera\r\n this.matrix.identity();\r\n this.matrix.makeTranslation(planeCamPos.x, planeCamPos.y, planeCamPos.z);\r\n this.matrixWorld.copy(this.matrix);\r\n this.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, this.matrixWorld);\r\n this.normalMatrix.getNormalMatrix(this.modelViewMatrix);\r\n\r\n // build worldToVolume matrix to transform plane into volumeCS (volumeCS coords are written to BackFaceTexture)\r\n const volumeMatrix = volume.matrixWorld;\r\n matWorldToVolume.copy(volumeMatrix).invert();\r\n\r\n // update material props\r\n material.uniforms.aspectRatio.value = camera.aspect;\r\n material.uniforms.farZ.value = camera.far;\r\n material.uniforms.tanHalfFOV.value = Math.tan(THREE.MathUtils.DEG2RAD * 0.5 * camera.fov);\r\n material.uniforms.matWorld2Volume.value = matWorldToVolume;\r\n };\r\n\r\n // set it to special layer to draw only into BFTexture\r\n this._plane.layers.set(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n }\r\n\r\n _initPlaneGeo(width, height) {\r\n const planeGeo = new THREE.BufferGeometry();\r\n\r\n width = width || 1;\r\n height = height || 1;\r\n\r\n const vertices = new Float32Array([\r\n -0.5 * width, 0.5 * height, 0,\r\n 0.5 * width, 0.5 * height, 0,\r\n -0.5 * width, -0.5 * height, 0,\r\n 0.5 * width, -0.5 * height, 0,\r\n ]);\r\n\r\n planeGeo.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n planeGeo.setIndex([0, 2, 1, 2, 3, 1]);\r\n\r\n return planeGeo;\r\n }\r\n\r\n getMesh() {\r\n return this._plane;\r\n }\r\n}\r\n\r\nexport default VolumeFarPlane;\r\n","import * as THREE from 'three';\r\nimport VolumeMesh from './gfx/VolumeMesh';\r\nimport VolumeBounds from './gfx/VolumeBounds';\r\nimport VolumeFarPlane from './gfx/VolumeFarPlane';\r\nimport Visual from './Visual';\r\nimport settings from './settings';\r\n\r\nclass VolumeVisual extends Visual {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this._mesh = new VolumeMesh();\r\n this._mesh.setDataSource(dataSource);\r\n this.add(this._mesh);\r\n\r\n this._frame = new VolumeBounds(this.getBoundaries().boundingBox, this._mesh.volumeInfo);\r\n this.add(this._frame.getMesh());\r\n this.showFrame(settings.now.modes.VD.frame);\r\n\r\n this._farPlane = new VolumeFarPlane(this._mesh, 2, 2);\r\n this.add(this._farPlane.getMesh());\r\n }\r\n\r\n getBoundaries() {\r\n const box = this._dataSource.getBox();\r\n const sphere = new THREE.Sphere();\r\n box.getBoundingSphere(sphere);\r\n\r\n return {\r\n boundingBox: box,\r\n boundingSphere: sphere,\r\n };\r\n }\r\n\r\n getMesh() {\r\n return this._mesh;\r\n }\r\n\r\n showFrame(needShow) {\r\n this._frame.getMesh().material.visible = needShow;\r\n }\r\n}\r\n\r\nexport default VolumeVisual;\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available loaders.\r\n * @extends EntityList\r\n */\r\nclass LoaderList extends EntityList {\r\n /**\r\n * Create a list of loaders.\r\n * The loaders are indexed by supported source types (`.types` property of a Loader\r\n * subclass).\r\n * The loaders can be retrieved later by matching against specs (see {@link LoaderList#find}).\r\n *\r\n * @param {!Array=} someLoaders A list of {@link Loader} subclasses to\r\n * automatically register at creation time.\r\n * @see LoaderList#register\r\n */\r\n constructor(someLoaders = []) {\r\n super(someLoaders, ['types']);\r\n }\r\n\r\n /**\r\n * Find a suitable loader for a source type.\r\n *\r\n * @param {Object} specs Loader specifications.\r\n * @param {string=} specs.type Supported source type.\r\n * @param {*=} specs.source Source to load from.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.type) {\r\n list = this._dict.types[specs.type.toLowerCase()] || [];\r\n } else if (specs.source) {\r\n return this._list.filter((SomeLoader) => SomeLoader.canProbablyLoad && SomeLoader.canProbablyLoad(specs.source));\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default LoaderList;\r\n","import EventDispatcher from '../../utils/EventDispatcher';\r\nimport makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Loader extends EventDispatcher {\r\n constructor(source, options) {\r\n super();\r\n this._source = source;\r\n this._options = options || {};\r\n this._abort = false;\r\n this._agent = null;\r\n }\r\n\r\n load() {\r\n return Promise.reject(new Error('Loading from this source is not implemented'));\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n if (this._agent) {\r\n this._agent.abort();\r\n }\r\n }\r\n\r\n static extractName(_source) {\r\n return undefined;\r\n }\r\n}\r\n\r\nmakeContextDependent(Loader.prototype);\r\n","import Loader from './Loader';\r\n\r\nexport default class FileLoader extends Loader {\r\n constructor(source, options) {\r\n super(source, options);\r\n\r\n options = this._options;\r\n this._binary = options.binary === true;\r\n }\r\n\r\n load() {\r\n return new Promise((resolve, reject) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n\r\n const blob = this._source;\r\n const reader = this._agent = new FileReader();\r\n\r\n reader.addEventListener('load', () => {\r\n resolve(reader.result);\r\n });\r\n reader.addEventListener('error', () => {\r\n reject(reader.error);\r\n });\r\n reader.addEventListener('abort', () => {\r\n reject(new Error('Loading aborted'));\r\n });\r\n reader.addEventListener('progress', (event) => {\r\n this.dispatchEvent(event);\r\n });\r\n\r\n if (this._binary) {\r\n reader.readAsArrayBuffer(blob);\r\n } else {\r\n reader.readAsText(blob);\r\n }\r\n });\r\n }\r\n\r\n static canProbablyLoad(source) {\r\n return (File && source instanceof File) || (Blob && source instanceof Blob);\r\n }\r\n\r\n static extractName(source) {\r\n return source && source.name;\r\n }\r\n}\r\n\r\nFileLoader.types = ['file', 'blob'];\r\n","import _ from 'lodash';\r\nimport Loader from './Loader';\r\n\r\n// we don't need to detect all kinds of URLs, just the evident ones\r\nconst urlStartRegexp = /^(https?|ftp):\\/\\//i;\r\n\r\nexport default class XHRLoader extends Loader {\r\n constructor(source, options) {\r\n super(source, options);\r\n\r\n options = this._options;\r\n this._binary = (options.binary === true);\r\n }\r\n\r\n load() {\r\n return new Promise((resolve, reject) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n\r\n const url = this._source;\r\n const request = this._agent = new XMLHttpRequest();\r\n\r\n request.addEventListener('load', () => {\r\n if (request.status === 200) {\r\n resolve(request.response);\r\n } else {\r\n reject(new Error(`HTTP ${request.status} while fetching ${url}`));\r\n }\r\n });\r\n request.addEventListener('error', () => {\r\n reject(new Error('HTTP request failed'));\r\n });\r\n request.addEventListener('abort', () => {\r\n reject(new Error('Loading aborted'));\r\n });\r\n request.addEventListener('progress', (event) => {\r\n this.dispatchEvent(event);\r\n });\r\n\r\n request.open('GET', url);\r\n if (this._binary) {\r\n request.responseType = 'arraybuffer';\r\n } else {\r\n request.responseType = 'text';\r\n }\r\n request.send();\r\n });\r\n }\r\n\r\n static canProbablyLoad(source) {\r\n return _.isString(source) && urlStartRegexp.test(source);\r\n }\r\n\r\n static extractName(source) {\r\n if (source) {\r\n const last = (source.indexOf('?') + 1 || source.lastIndexOf('#') + 1 || source.length + 1) - 1;\r\n return source.slice(source.lastIndexOf('/', last) + 1, last);\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nXHRLoader.types = ['url'];\r\n","import Loader from './Loader';\r\n\r\nexport default class ImmediateLoader extends Loader {\r\n load() {\r\n return new Promise((resolve) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n resolve(this._source);\r\n });\r\n }\r\n\r\n static canProbablyLoad(_source) {\r\n return false;\r\n }\r\n}\r\n\r\nImmediateLoader.types = ['immediate'];\r\n","import LoaderList from './loaders/LoaderList';\r\n\r\nimport FileLoader from './loaders/FileLoader';\r\nimport XHRLoader from './loaders/XHRLoader';\r\nimport ImmediateLoader from './loaders/ImmediateLoader';\r\n\r\nexport default new LoaderList([\r\n // note: order might be important\r\n FileLoader,\r\n XHRLoader,\r\n ImmediateLoader,\r\n]);\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available parsers.\r\n * @extends EntityList\r\n */\r\nclass ParserList extends EntityList {\r\n /**\r\n * Create a list of parsers.\r\n * The parsers are indexed by supported data formats and file extensions (`.formats` and\r\n * `.extensions` properties of a Parser subclass).\r\n * The parsers can be retrieved later by matching against specs (see {@link ParsrerList#find}).\r\n *\r\n * @param {!Array=} someParsers A list of {@link Parser} subclasses to\r\n * automatically register at creation time.\r\n * @see ParserList#register\r\n */\r\n constructor(someParsers = []) {\r\n super(someParsers, ['formats', 'extensions']);\r\n }\r\n\r\n /**\r\n * Find a suitable parser for data.\r\n *\r\n * @param {Object} specs Parser specifications.\r\n * @param {string=} specs.format Supported data format.\r\n * @param {string=} specs.ext Supported filename extension.\r\n * @param {*=} specs.data Data to parse.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.format) {\r\n list = this._dict.formats[specs.format.toLowerCase()] || [];\r\n } else if (specs.ext) {\r\n list = this._dict.extensions[specs.ext.toLowerCase()] || [];\r\n }\r\n // autodetect only if no format is forced\r\n if (list.length === 0 && !specs.format && specs.data) {\r\n return this._list.filter((SomeParser) => SomeParser.canProbablyParse && SomeParser.canProbablyParse(specs.data));\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default ParserList;\r\n","import makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Parser {\r\n constructor(data, options) {\r\n this._data = data;\r\n this._options = options || {};\r\n this._abort = false;\r\n }\r\n\r\n parseSync() {\r\n throw new Error('Parsing this type of data is not implemented');\r\n }\r\n\r\n parse() {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n try {\r\n if (this._abort) {\r\n return reject(new Error('Parsing aborted'));\r\n }\r\n return resolve(this.parseSync());\r\n } catch (error) {\r\n return reject(error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // only for volume Parsers\r\n getModel() {\r\n this.model._parseHeader(this._data);\r\n return this.model;\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n }\r\n}\r\n\r\nmakeContextDependent(Parser.prototype);\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Parser helper for PDB tag \"REMARK 290\".\r\n *\r\n * @exports Remark290\r\n * @constructor\r\n */\r\nclass Remark290 {\r\n constructor() {\r\n /** @type {THREE.Matrix4[]} */\r\n this.matrices = [];\r\n\r\n /** @type {?THREE.Matrix4} */\r\n this._matrix = null;\r\n /** @type {number} */\r\n this._matrixIndex = -1;\r\n }\r\n\r\n /**\r\n * Parse a single line of a stream.\r\n * @param {PDBStream} stream - stream to parse\r\n */\r\n\r\n parse(stream) {\r\n /** @type {?THREE.Matrix4} */\r\n let matrix = this._matrix;\r\n\r\n if (stream.readString(12, 18) === ' SMTRY') {\r\n const matrixRow = stream.readCharCode(19) - 49; // convert '1', '2', or '3' -> 0, 1, or 2\r\n const matrixData = stream.readString(20, 80).trim().split(/\\s+/);\r\n const matrixIndex = parseInt(matrixData[0], 10);\r\n if (this._matrix === null || matrixIndex !== this._matrixIndex) {\r\n // TODO: assert(matrixIndex === this.matrices.length + 1);\r\n this._matrixIndex = matrixIndex;\r\n this._matrix = matrix = new THREE.Matrix4();\r\n this.matrices[this.matrices.length] = matrix;\r\n }\r\n\r\n const { elements } = matrix;\r\n elements[matrixRow] = parseFloat(matrixData[1]);\r\n elements[matrixRow + 4] = parseFloat(matrixData[2]);\r\n elements[matrixRow + 8] = parseFloat(matrixData[3]);\r\n elements[matrixRow + 12] = parseFloat(matrixData[4]);\r\n }\r\n }\r\n}\r\n\r\nRemark290.prototype.id = 290;\r\n\r\nexport default Remark290;\r\n","import * as THREE from 'three';\r\nimport chem from '../../../chem';\r\n\r\nconst { Assembly } = chem;\r\n\r\n/**\r\n * Parser helper for PDB tag \"REMARK 350\".\r\n *\r\n * @exports Remark350\r\n * @constructor\r\n */\r\nclass Remark350 {\r\n constructor(complex) {\r\n /** @type {Complex} */\r\n this._complex = complex;\r\n /** @type {Assembly[]} */\r\n this.assemblies = [];\r\n\r\n /** @type {?Assembly} */\r\n this._assembly = null;\r\n /** @type {?THREE.Matrix4} */\r\n this._matrix = null;\r\n /** @type {number} */\r\n this._matrixIndex = -1;\r\n }\r\n\r\n /**\r\n * Parse a single line of a stream.\r\n * @param {PDBStream} stream - stream to parse\r\n */\r\n\r\n parse(stream) {\r\n /** @type {?Assembly} */\r\n let assembly = this._assembly;\r\n /** @type {?THREE.Matrix4} */\r\n let matrix = this._matrix;\r\n\r\n if (assembly && stream.readString(12, 18) === ' BIOMT') {\r\n const matrixRow = stream.readCharCode(19) - 49; // convert '1', '2', or '3' -> 0, 1, or 2\r\n const matrixData = stream.readString(20, 80).trim().split(/\\s+/);\r\n const matrixIndex = parseInt(matrixData[0], 10);\r\n if (this._matrix === null || matrixIndex !== this._matrixIndex) {\r\n // TODO: assert(matrixIndex === assembly.matrices.length + 1);\r\n this._matrixIndex = matrixIndex;\r\n this._matrix = matrix = new THREE.Matrix4();\r\n assembly.addMatrix(matrix);\r\n }\r\n\r\n const { elements } = matrix;\r\n elements[matrixRow] = parseFloat(matrixData[1]);\r\n elements[matrixRow + 4] = parseFloat(matrixData[2]);\r\n elements[matrixRow + 8] = parseFloat(matrixData[3]);\r\n elements[matrixRow + 12] = parseFloat(matrixData[4]);\r\n } else if (assembly && stream.readString(35, 41) === 'CHAINS:') {\r\n const entries = stream.readString(42, 80).split(',');\r\n for (let i = 0, n = entries.length; i < n; ++i) {\r\n const chain = entries[i].trim();\r\n if (chain.length > 0) {\r\n assembly.addChain(chain);\r\n }\r\n }\r\n } else if (stream.readString(12, 23) === 'BIOMOLECULE:') {\r\n // assert molIndex === this.assemblies.length + 1\r\n this._matrix = null;\r\n this._matrixIndex = -1;\r\n this._assembly = assembly = new Assembly(this._complex);\r\n this.assemblies.push(assembly);\r\n }\r\n }\r\n}\r\n\r\nRemark350.prototype.id = 350;\r\n\r\nexport default Remark350;\r\n","/** Helper class for stream-like reading input files. */\r\nclass PDBStream {\r\n /**\r\n * Create a stream\r\n * @param {String} data Input data\r\n */\r\n constructor(data) {\r\n /** @type String */\r\n this._data = data; // Input file\r\n /** @type Number */\r\n this._start = 0; // Starting position of line\r\n /** @type Number */\r\n this._nextCR = -1; // Position of next CR (0x0D)\r\n /** @type Number */\r\n this._nextLF = -1; // Position of next LF (0x0A)\r\n /** @type Number */\r\n this._next = -1; // End position of line\r\n /** @type Number */\r\n this._end = data.length; // End of data\r\n\r\n this.next();\r\n }\r\n\r\n /**\r\n * Reading next line.\r\n * @returns {String} Next line in data (ending with LF or CR)\r\n */\r\n readLine() {\r\n return this._data.slice(this._start, this._next);\r\n }\r\n\r\n /**\r\n * Reading character from position.\r\n * @param {Number} pos - Position in current line.\r\n * @returns {String} Character from position\r\n */\r\n readChar(pos) {\r\n pos = this._start + pos - 1;\r\n return pos < this._next ? this._data[pos] : ' ';\r\n }\r\n\r\n /**\r\n * Reading character code from position.\r\n * @param {Number} pos - Position in current line.\r\n * @returns {Number} Character code from position\r\n */\r\n readCharCode(pos) {\r\n pos = this._start + pos - 1;\r\n return pos < this._next ? this._data.charCodeAt(pos) : 32;\r\n }\r\n\r\n /**\r\n * Reading string from begin to end points.\r\n * For a reason unknown, numbering assumed not to start from 0, but from 1.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {String} String from begin to end\r\n */\r\n readString(begin, end) {\r\n const from = this._start + begin - 1;\r\n const to = this._start + end;\r\n return this._data.slice(from, to < this._next ? to : this._next);\r\n }\r\n\r\n /**\r\n * Reading integer from begin to end points.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {Number} Integer from begin to end\r\n */\r\n readInt(begin, end) {\r\n return parseInt(this.readString(begin, end), 10);\r\n }\r\n\r\n /**\r\n * Reading float from begin to end points.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {Number} Float from begin to end\r\n */\r\n readFloat(begin, end) {\r\n return parseFloat(this.readString(begin, end));\r\n }\r\n\r\n /**\r\n * Checking for end of data.\r\n * @returns {boolean} True if data is ended, false otherwise\r\n */\r\n end() {\r\n return this._start >= this._end;\r\n }\r\n\r\n /**\r\n * Procedure to re-arrange current pointers in data.\r\n */\r\n next() {\r\n const start = this._next + 1;\r\n this._start = start < this._end ? start : this._end;\r\n\r\n // support CR, LF, CR+LF line endings\r\n // do not support LF+CR, CR+CR+LF, and other strange combinations\r\n\r\n if (this._start > this._nextCR) {\r\n this._nextCR = (this._data.indexOf('\\r', this._start) + 1 || this._end + 1) - 1;\r\n }\r\n if (this._start > this._nextLF) {\r\n this._nextLF = (this._data.indexOf('\\n', this._start) + 1 || this._end + 1) - 1;\r\n }\r\n this._next = this._nextCR + 1 < this._nextLF ? this._nextCR : this._nextLF;\r\n }\r\n}\r\n\r\nexport default PDBStream;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport Remark290 from './pdb/Remark290';\r\nimport Remark350 from './pdb/Remark350';\r\nimport PDBStream from './PDBStream';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst TAG_LENGTH = 6;\r\n\r\nfunction nameToElement(name) {\r\n // http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM\r\n //\r\n // http://www.cgl.ucsf.edu/chimera/docs/UsersGuide/tutorials/pdbintro.html#note1\r\n //\r\n // Atom names start with element symbols right-justified in columns 13-14\r\n // as permitted by the length of the name. For example, the symbol FE for\r\n // iron appears in columns 13-14, whereas the symbol C for carbon appears\r\n // in column 14 (see Misaligned Atom Names). If an atom name has four\r\n // characters, however, it must start in column 13 even if the element\r\n // symbol is a single character (for example, see Hydrogen Atoms).\r\n\r\n const veryLong = name.trim().length === 4;\r\n return name.slice(0, veryLong ? 1 : 2).trim();\r\n}\r\n\r\n// the most frequently used beginnings; although HEADER is mandatory, it is often missing in handmade files\r\nconst pdbStartRegexp = /^(HEADER\\s|COMPND\\s|REMARK\\s|ATOM {2}|HETATM|MODEL )/i;\r\n\r\nconst remarkParsers = {\r\n // NOTE: please forget the idea to build the method name in runtime, it can be obfuscated.\r\n 290: Remark290,\r\n 350: Remark350,\r\n};\r\n\r\nclass PDBParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._sheet = null;\r\n this._serialAtomMap = null;\r\n this._modelId = 1;\r\n this._compaundFound = false;\r\n this._biomoleculeFound = false;\r\n this._allowedChainsIDs = null;\r\n this._lastMolId = -1;\r\n\r\n this._remarks = {};\r\n this._remark = null;\r\n\r\n this._molecules = [];\r\n this._molecule = null;\r\n this._compndCurrToken = '';\r\n\r\n this._options.fileType = 'pdb';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && pdbStartRegexp.test(data);\r\n }\r\n\r\n _finalize() {\r\n this._fixBondsArray();\r\n this._fixChains();\r\n\r\n // keep crystallographic symmetry transformations\r\n const remark290 = this._remarks[290];\r\n this._complex.symmetry = _.isUndefined(remark290) ? [] : remark290.matrices;\r\n\r\n // add loaded biological assemblies\r\n const remark350 = this._remarks[350];\r\n this._complex.units = this._complex.units.concat(_.isUndefined(remark350) ? [] : remark350.assemblies);\r\n\r\n // add loaded macromolecules\r\n this._finalizeMolecules();\r\n\r\n // create secondary structure etc.\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n _finalizeMolecules() {\r\n // get chains from complex\r\n const chainDict = {};\r\n let i;\r\n const chains = this._complex._chains;\r\n for (i = 0; i < chains.length; ++i) {\r\n const chainObj = chains[i];\r\n const chainName = chainObj._name;\r\n chainDict[chainName] = chainObj;\r\n }\r\n\r\n // aggregate residues from chains\r\n for (i = 0; i < this._molecules.length; i++) {\r\n const m = this._molecules[i];\r\n let residues = [];\r\n for (let j = 0; j < m._chains.length; j++) {\r\n const name = m._chains[j];\r\n const chain = chainDict[name];\r\n residues = residues.concat(chain._residues.slice());\r\n }\r\n const molecule = new Molecule(this._complex, m._name, i + 1);\r\n molecule.residues = residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n _fixChains() {\r\n const idChainMap = {};\r\n const complex = this._complex;\r\n\r\n // prepare\r\n for (let i = 0; i < complex._chains.length; i++) {\r\n const chain = complex._chains[i];\r\n idChainMap[chain._name.charCodeAt(0)] = chain;\r\n }\r\n }\r\n\r\n // FIXME: This function is redundant, CONECT records always follow ATOM and HETATM. Build the map online.\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const complex = this._complex;\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, ni = atoms.length; i < ni; ++i) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n const bonds = complex._bonds;\r\n const { logger } = this;\r\n for (let j = 0, nj = bonds.length; j < nj; ++j) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n logger.debug('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _parseATOM(stream) {\r\n if (this._modelId !== 1) {\r\n return;\r\n }\r\n\r\n const het = stream.readCharCode(1) === 0x48;\r\n\r\n // field names according to wwPDB Format\r\n // NOTE: Chimera allows (nonstandard) use of columns 6-11 for the integer atom serial number in ATOM records.\r\n const serial = het ? stream.readInt(7, 11) : stream.readInt(6, 11);\r\n let name = stream.readString(13, 16);\r\n const altLoc = stream.readChar(17);\r\n const resName = stream.readString(18, 20).trim();\r\n const chainID = stream.readChar(22);\r\n const resSeq = stream.readInt(23, 26);\r\n const iCode = stream.readChar(27);\r\n const x = stream.readFloat(31, 38);\r\n const y = stream.readFloat(39, 46);\r\n const z = stream.readFloat(47, 54);\r\n const occupancy = stream.readFloat(55, 60);\r\n const tempFactor = stream.readFloat(61, 66);\r\n const element = stream.readString(77, 78).trim() || nameToElement(name);\r\n const charge = stream.readInt(79, 80) || 0;\r\n\r\n // skip waters (there may be lots of them)\r\n if (this.settings.now.nowater) {\r\n if (resName === 'HOH' || resName === 'WAT') {\r\n return;\r\n }\r\n }\r\n\r\n // PDB uses positional system for atom names. It helps derive element type from the name\r\n // but names may include extra spaces. From this point on we don't need those spaces anymore.\r\n name = name.trim();\r\n\r\n const type = Element.getByName(element);\r\n const role = Element.Role[name]; // FIXME: Maybe should use type as additional index (\" CA \" vs. \"CA \")\r\n\r\n // NOTE: Residues of a particular chain are not required to be listed next to each other.\r\n // https://github.com/biasmv/pv/commit/7319b898b7473ba380c26699e3b028b2b1a7e1a1\r\n let chain = this._chain;\r\n if (!chain || chain.getName() !== chainID) {\r\n this._chain = chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = null;\r\n }\r\n\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n this._residue = residue = chain.addResidue(resName, resSeq, iCode);\r\n }\r\n\r\n const xyz = new THREE.Vector3(x, y, z);\r\n residue.addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n _parseENDMDL() {\r\n this._modelId += 1;\r\n }\r\n\r\n _parseCONECT(stream) {\r\n const serial0 = stream.readInt(7, 11);\r\n const serial1 = stream.readInt(12, 16);\r\n const serial2 = stream.readInt(17, 21);\r\n const serial3 = stream.readInt(22, 26);\r\n const serial4 = stream.readInt(27, 31);\r\n\r\n const complex = this._complex;\r\n\r\n // Keep bonds ordered by atom serial\r\n if (serial1 && serial1 > serial0) {\r\n complex.addBond(serial0, serial1, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial2 && serial2 > serial0) {\r\n complex.addBond(serial0, serial2, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial3 && serial3 > serial0) {\r\n complex.addBond(serial0, serial3, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial4 && serial4 > serial0) {\r\n complex.addBond(serial0, serial4, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n }\r\n\r\n _parseCOMPND(stream) {\r\n const str = stream.readString(11, 80);\r\n const tokenIdx = str.indexOf(':');\r\n this._compndCurrToken = tokenIdx > 0 ? str.substring(0, tokenIdx).trim() : this._compndCurrToken;\r\n\r\n // start reading new molecule\r\n if (this._compndCurrToken === 'MOL_ID') {\r\n this._molecule = { _index: '', _chains: [] };\r\n this._molecule._index = parseInt(str.substring(tokenIdx + 1, str.indexOf(';')), 10);\r\n this._molecules.push(this._molecule);\r\n // parse molecule name\r\n } else if (this._compndCurrToken === 'MOLECULE' && this._molecule != null) {\r\n this._molecule._name = str.substring(tokenIdx + 1, str.indexOf(';')).trim();\r\n // parse molecule chains\r\n } else if (this._compndCurrToken === 'CHAIN' && this._molecule != null) {\r\n let chainStr = str.substring(tokenIdx + 1, 80).trim();\r\n const lastChar = chainStr[chainStr.length - 1];\r\n if (lastChar === ';' || lastChar === ',') {\r\n chainStr = chainStr.slice(0, -1);\r\n }\r\n chainStr = chainStr.replace(/\\s+/g, '');\r\n const chains = chainStr.split(',');\r\n this._molecule._chains = this._molecule._chains.concat(chains);\r\n }\r\n }\r\n\r\n _parseREMARK(stream) {\r\n const remarkNum = stream.readInt(8, 10);\r\n\r\n // create remark parser if needed\r\n let remark = this._remarks[remarkNum];\r\n if (_.isUndefined(remark)) {\r\n const RemarkParser = remarkParsers[remarkNum];\r\n if (_.isFunction(RemarkParser)) {\r\n this._remarks[remarkNum] = remark = new RemarkParser(this._complex);\r\n }\r\n }\r\n\r\n // delegate parsing\r\n if (!_.isUndefined(remark)) {\r\n remark.parse(stream);\r\n }\r\n }\r\n\r\n _parseHELIX(stream) {\r\n const fields = [20, 22, 32, 34];\r\n\r\n this._parseSTRUCTURE(stream, fields, (obj) => {\r\n this._complex.addHelix(obj);\r\n this._complex.structures.push(obj);\r\n });\r\n }\r\n\r\n _parseSHEET(stream) {\r\n const fields = [22, 23, 33, 34];\r\n\r\n this._parseSTRUCTURE(stream, fields, (obj) => {\r\n this._complex.addSheet(obj);\r\n });\r\n }\r\n\r\n _parseSTRUCTURE(stream, pars, adder) {\r\n const startId = 0;\r\n const startIndex = 1;\r\n const endId = 2;\r\n const endIndex = 3;\r\n\r\n // identify fields: debugging and stuff\r\n\r\n const codeOfS = 0x53;\r\n const serialNumber = stream.readInt(8, 10);\r\n const structureName = stream.readString(12, 14).trim(); // FIXME: LString(3) forbids trim()\r\n const comment = stream.readString(41, 70).trim();\r\n const helLength = stream.readInt(72, 76);\r\n const helixClass = stream.readInt(39, 40);\r\n const shWidth = stream.readInt(15, 16);\r\n const shCur = stream.readInt(42, 45);\r\n const shPrev = stream.readInt(57, 60);\r\n\r\n // file fields\r\n const startChainID = stream.readString(pars[startId], pars[endId] + 1).charCodeAt(0);\r\n const endChainID = stream.readString(pars[endId], pars[endId] + 1).charCodeAt(0);\r\n const startSequenceNumber = stream.readInt(pars[startIndex], pars[startIndex] + 3);\r\n let iCodeStr = stream.readString(pars[startIndex] + 4, pars[startIndex] + 4);\r\n let startICode = 0;\r\n\r\n if (iCodeStr.length > 0) {\r\n startICode = iCodeStr.charCodeAt(0);\r\n }\r\n const endSequenceNumber = stream.readInt(pars[endIndex], pars[endIndex] + 3);\r\n iCodeStr = stream.readString(pars[endIndex] + 4, pars[endIndex] + 4);\r\n let endICode = 0;\r\n if (iCodeStr.length > 0) {\r\n endICode = iCodeStr.charCodeAt(0);\r\n }\r\n\r\n let obj;\r\n let cs = this._sheet;\r\n if (stream.readCharCode(1) === codeOfS) {\r\n if (cs !== null && cs.getName() !== structureName) {\r\n cs = null;\r\n this._sheet = null;\r\n }\r\n if (cs === null) {\r\n this._sheet = obj = new Sheet(structureName, shWidth);\r\n adder(obj);\r\n } else {\r\n obj = cs;\r\n }\r\n const strand = new Strand(\r\n obj,\r\n this._complex.getUnifiedSerial(startChainID, startSequenceNumber, startICode),\r\n this._complex.getUnifiedSerial(endChainID, endSequenceNumber, endICode),\r\n helixClass,\r\n shCur,\r\n shPrev,\r\n );\r\n obj.addStrand(strand);\r\n this._complex.structures.push(strand);\r\n } else {\r\n obj = new Helix(\r\n helixClass,\r\n this._complex.getUnifiedSerial(startChainID, startSequenceNumber, startICode),\r\n this._complex.getUnifiedSerial(endChainID, endSequenceNumber, endICode),\r\n serialNumber,\r\n structureName,\r\n comment,\r\n helLength,\r\n );\r\n adder(obj);\r\n }\r\n }\r\n\r\n _parseHEADER(stream) {\r\n const { metadata } = this._complex;\r\n metadata.classification = stream.readString(11, 50).trim();\r\n metadata.date = stream.readString(51, 59).trim();\r\n\r\n const id = stream.readString(63, 66).trim();\r\n metadata.id = id;\r\n if (id) {\r\n this._complex.name = id;\r\n }\r\n metadata.format = 'pdb';\r\n }\r\n\r\n _parseTITLE(stream) {\r\n const { metadata } = this._complex;\r\n metadata.title = metadata.title || [];\r\n\r\n const line = stream.readInt(9, 10) || 1;\r\n metadata.title[line - 1] = stream.readString(11, 80).trim();\r\n }\r\n\r\n static tagParsers = {\r\n HEADER: PDBParser.prototype._parseHEADER,\r\n 'TITLE ': PDBParser.prototype._parseTITLE,\r\n 'ATOM ': PDBParser.prototype._parseATOM,\r\n HETATM: PDBParser.prototype._parseATOM,\r\n ENDMDL: PDBParser.prototype._parseENDMDL,\r\n CONECT: PDBParser.prototype._parseCONECT,\r\n COMPND: PDBParser.prototype._parseCOMPND,\r\n REMARK: PDBParser.prototype._parseREMARK,\r\n // 'SOURCE': PDBParser.prototype._parseSOURCE,\r\n 'HELIX ': PDBParser.prototype._parseHELIX,\r\n 'SHEET ': PDBParser.prototype._parseSHEET,\r\n\r\n // nonstandard extension to allow range 100,000 - 999,999\r\n 'ATOM 1': PDBParser.prototype._parseATOM,\r\n 'ATOM 2': PDBParser.prototype._parseATOM,\r\n 'ATOM 3': PDBParser.prototype._parseATOM,\r\n 'ATOM 4': PDBParser.prototype._parseATOM,\r\n 'ATOM 5': PDBParser.prototype._parseATOM,\r\n 'ATOM 6': PDBParser.prototype._parseATOM,\r\n 'ATOM 7': PDBParser.prototype._parseATOM,\r\n 'ATOM 8': PDBParser.prototype._parseATOM,\r\n 'ATOM 9': PDBParser.prototype._parseATOM,\r\n };\r\n\r\n parseSync() {\r\n const stream = new PDBStream(this._data);\r\n const result = this._complex = new Complex();\r\n\r\n // parse PDB line by line\r\n while (!stream.end()) {\r\n const tag = stream.readString(1, TAG_LENGTH);\r\n const func = PDBParser.tagParsers[tag];\r\n if (_.isFunction(func)) {\r\n func.call(this, stream);\r\n }\r\n stream.next();\r\n }\r\n\r\n // Resolve indices and serials to objects\r\n this._finalize();\r\n\r\n // cleanup\r\n this._serialAtomMap = null;\r\n this._sheet = null;\r\n this._residue = null;\r\n this._chain = null;\r\n this._complex = null;\r\n\r\n if (result.getAtomCount() === 0) {\r\n throw new Error('The data does not contain valid atoms');\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nPDBParser.formats = ['pdb'];\r\nPDBParser.extensions = ['.pdb', '.ent'];\r\n\r\nexport default PDBParser;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n SGroup,\r\n Bond,\r\n} = chem;\r\n\r\nconst cOrderCharCodes = {\r\n A: 0,\r\n S: 1,\r\n D: 2,\r\n T: 3,\r\n};\r\n\r\nconst cmlStartRegexp = /\\s*<\\?xml\\b[^?>]*\\?>\\s*<(?:cml|molecule)\\b/i;\r\n\r\nclass CMLParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._complex = null;\r\n this._residue = null;\r\n this._serialAtomMap = null;\r\n this._modelId = 1;\r\n this._lastMolId = -1;\r\n this._readOnlyOneMolecule = false;\r\n this._options.fileType = 'cml';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && cmlStartRegexp.test(data);\r\n }\r\n\r\n _rebuidBondIndexes(atoms, bonds) {\r\n const count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n const atomId = atoms[i].id;\r\n\r\n const countBonds = bonds.length;\r\n for (let j = 0; j < countBonds; j++) {\r\n const idxs = bonds[j].atomRefs2.split(' ');\r\n if (idxs[0] === atomId) {\r\n bonds[j].start = i;\r\n }\r\n\r\n if (idxs[1] === atomId) {\r\n bonds[j].end = i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _createSGroup(molecule, moleculeArr) {\r\n const newGroup = new SGroup(\r\n molecule.id,\r\n molecule.fieldData,\r\n new THREE.Vector3(parseFloat(molecule.x), parseFloat(molecule.y), 0),\r\n molecule.atomRefs,\r\n molecule,\r\n );\r\n if (molecule.placement === 'Relative') {\r\n newGroup._center = new THREE.Vector3(0, 0, 0);\r\n }\r\n if (molecule.fieldName === 'MDLBG_FRAGMENT_CHARGE') {\r\n newGroup._charge = parseInt(molecule.fieldData, 10) || 0;\r\n }\r\n if (molecule.fieldName === 'MDLBG_FRAGMENT_COEFFICIENT') {\r\n newGroup._repeat = parseInt(molecule.fieldData, 10) || 1;\r\n }\r\n moleculeArr.push(newGroup);\r\n }\r\n\r\n _extractSGroup(molecule, moleculeArr) {\r\n if (!Array.isArray(moleculeArr)) {\r\n moleculeArr = [];\r\n }\r\n\r\n if (molecule) {\r\n if (Array.isArray(molecule)) {\r\n const count = molecule.length;\r\n for (let i = 0; i < count; i++) {\r\n if (molecule[i].molecule) {\r\n moleculeArr = moleculeArr.concat(this._extractSGroup(molecule[i].molecule));\r\n }\r\n this._createSGroup(molecule[i], moleculeArr);\r\n }\r\n } else {\r\n if (molecule.molecule) {\r\n if (molecule.molecule) {\r\n moleculeArr = moleculeArr.concat(this._extractSGroup(molecule.molecule));\r\n }\r\n }\r\n this._createSGroup(molecule, moleculeArr);\r\n }\r\n }\r\n\r\n return moleculeArr;\r\n }\r\n\r\n _extractSGroups(molecule, atoms) {\r\n const moleculeArr = this._extractSGroup(molecule);\r\n\r\n const count = atoms.length;\r\n let i;\r\n let j;\r\n\r\n for (i = 0; i < count; i++) {\r\n const atomId = atoms[i].id;\r\n for (j = 0; j < moleculeArr.length; j++) {\r\n const firstAtomRef = moleculeArr[j]._atoms.split(' ')[0];\r\n if (firstAtomRef === atomId) {\r\n if (!atoms[i].sgroupRef) {\r\n atoms[i].sgroupRef = [];\r\n }\r\n atoms[i].sgroupRef.push(moleculeArr[j]);\r\n }\r\n }\r\n }\r\n // build sGroups centers\r\n let atomMap = {}; // sgrpmap cache\r\n let mapEntry = null;\r\n const nLimon = 100000000;\r\n const bLow = new THREE.Vector3(nLimon, nLimon, nLimon);\r\n const bHight = new THREE.Vector3(-nLimon, -nLimon, -nLimon);\r\n\r\n function cycleFuncInner(e) {\r\n mapEntry = atomMap[e];\r\n if (mapEntry) {\r\n moleculeArr[j]._atoms.push(mapEntry.a);\r\n }\r\n }\r\n\r\n function cycleFunc(e) {\r\n mapEntry = atomMap[e];\r\n if (mapEntry) {\r\n bLow.set(Math.min(bLow.x, mapEntry.x), Math.min(bLow.y, mapEntry.y), Math.min(bLow.z, mapEntry.z));\r\n bHight.set(Math.max(bHight.x, mapEntry.x), Math.max(bHight.y, mapEntry.y), Math.max(bHight.z, mapEntry.z));\r\n cycleFuncInner(e);\r\n }\r\n }\r\n\r\n for (i = 0; i < atoms.length; i++) {\r\n atomMap[atoms[i].id] = {};\r\n atomMap[atoms[i].id].x = atoms[i].x2;\r\n if (atoms[i].x3) {\r\n atomMap[atoms[i].id].x = atoms[i].x3;\r\n }\r\n atomMap[atoms[i].id].x = parseFloat(atomMap[atoms[i].id].x);\r\n atomMap[atoms[i].id].y = atoms[i].y2;\r\n if (atoms[i].y3) {\r\n atomMap[atoms[i].id].y = atoms[i].y3;\r\n }\r\n atomMap[atoms[i].id].y = parseFloat(atomMap[atoms[i].id].y);\r\n atomMap[atoms[i].id].z = '0.0';\r\n if (atoms[i].z3) {\r\n atomMap[atoms[i].id].z = atoms[i].z3;\r\n }\r\n atomMap[atoms[i].id].z = parseFloat(atomMap[atoms[i].id].z);\r\n atomMap[atoms[i].id].a = atoms[i];\r\n }\r\n\r\n let atomsRef;\r\n for (j = 0; j < moleculeArr.length; j++) {\r\n if (moleculeArr[j]._center !== null) {\r\n bLow.set(nLimon, nLimon, nLimon);\r\n bHight.set(-nLimon, -nLimon, -nLimon);\r\n atomsRef = moleculeArr[j]._atoms.split(' ');\r\n moleculeArr[j]._atoms = [];\r\n atomsRef.forEach(cycleFunc);\r\n\r\n moleculeArr[j]._center.addVectors(bLow, bHight);\r\n moleculeArr[j]._center.multiplyScalar(0.5);\r\n } else {\r\n atomsRef = moleculeArr[j]._atoms.split(' ');\r\n moleculeArr[j]._atoms = [];\r\n atomsRef.forEach(cycleFuncInner);\r\n }\r\n }\r\n atomMap = null;\r\n }\r\n\r\n _traverseData(dom) {\r\n function isArray(o) {\r\n return Object.prototype.toString.apply(o) === '[object Array]';\r\n }\r\n\r\n function parseNode(xmlNode, result) {\r\n if (xmlNode.nodeName === '#text' && xmlNode.nodeValue.trim() === '') {\r\n return;\r\n }\r\n\r\n const jsonNode = {};\r\n jsonNode.xmlNode = xmlNode;\r\n const existing = result[xmlNode.nodeName];\r\n if (existing) {\r\n if (!isArray(existing)) {\r\n result[xmlNode.nodeName] = [existing, jsonNode];\r\n } else {\r\n result[xmlNode.nodeName].push(jsonNode);\r\n }\r\n } else {\r\n result[xmlNode.nodeName] = jsonNode;\r\n }\r\n\r\n let length;\r\n let i;\r\n if (xmlNode.attributes) {\r\n ({ length } = xmlNode.attributes);\r\n for (i = 0; i < length; i++) {\r\n const attribute = xmlNode.attributes[i];\r\n jsonNode[attribute.nodeName] = attribute.nodeValue;\r\n }\r\n }\r\n\r\n ({ length } = xmlNode.childNodes);\r\n for (i = 0; i < length; i++) {\r\n parseNode(xmlNode.childNodes[i], jsonNode);\r\n }\r\n }\r\n\r\n const result = {};\r\n if (dom.childNodes.length) {\r\n parseNode(dom.childNodes[0], result);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _findSuitableMolecule(data, molSet) {\r\n for (const key in data) {\r\n if (key === 'xmlNode') {\r\n continue;\r\n } else if (key === 'molecule') {\r\n if (data.molecule) {\r\n if (data.molecule.atomArray && data.molecule.atomArray.atom) {\r\n molSet.push(data);\r\n }\r\n if (Array.isArray(data.molecule)) {\r\n for (let i = 0; i < data.molecule.length; i++) {\r\n if (data.molecule[i].atomArray && data.molecule[i].atomArray.atom) {\r\n molSet.push({ molecule: data.molecule[i] });\r\n }\r\n }\r\n }\r\n }\r\n } else if (data[key] && data[key] !== null && typeof (data[key]) === 'object') {\r\n this._findSuitableMolecule(data[key], molSet);\r\n }\r\n }\r\n }\r\n\r\n _selectComponents(text) {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(text, 'application/xml');\r\n const traversedData = this._traverseData(doc);\r\n let rawData;\r\n const self = this;\r\n\r\n function prepareComponentCompound(data) {\r\n let atoms = [];\r\n if (data.molecule && data.molecule.atomArray && data.molecule.atomArray.atom) {\r\n if (!Array.isArray(data.molecule.atomArray.atom)) {\r\n atoms.push(data.molecule.atomArray.atom);\r\n } else {\r\n atoms = data.molecule.atomArray.atom;\r\n }\r\n } else if (!data.molecule) {\r\n const ret = {};\r\n ret.atomLabels = null;\r\n ret.labelsCount = 1;\r\n return ret;\r\n }\r\n\r\n if (data.molecule.molecule) {\r\n self._extractSGroups(data.molecule.molecule, atoms);\r\n }\r\n\r\n let atom;\r\n let count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n atom = atoms[i];\r\n atom.edges = [];\r\n }\r\n\r\n let localBond = [];\r\n if (data.molecule.bondArray && data.molecule.bondArray.bond) {\r\n if (!Array.isArray(data.molecule.bondArray.bond)) {\r\n localBond.push(data.molecule.bondArray.bond);\r\n } else {\r\n localBond = data.molecule.bondArray.bond;\r\n }\r\n }\r\n let bond;\r\n count = localBond.length;\r\n self._rebuidBondIndexes(atoms, localBond);\r\n\r\n function addCurrBond(index) {\r\n bond = localBond[index];\r\n atom = atoms[bond.start];\r\n if (!atom) {\r\n return false;\r\n }\r\n atom.edges.push(bond.end);\r\n atom = atoms[bond.end];\r\n if (!atom) {\r\n return false;\r\n }\r\n atom.edges.push(bond.start);\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < count; i++) {\r\n if (!addCurrBond(i)) {\r\n // ignore invalid bond\r\n continue;\r\n }\r\n const orderAttr = bond.xmlNode.getAttribute('order');\r\n const tc = parseInt(orderAttr, 10);\r\n // the default bond order is unknown\r\n localBond[i].order = 0;\r\n localBond[i].type = Bond.BondType.UNKNOWN;\r\n if (tc > 1) {\r\n localBond[i].order = tc;\r\n } else {\r\n // another option - bond order is a string\r\n const order = cOrderCharCodes[orderAttr];\r\n if (order !== undefined) {\r\n localBond[i].order = order;\r\n if (orderAttr === 'A') {\r\n localBond[i].type = Bond.BondType.AROMATIC;\r\n }\r\n }\r\n }\r\n }\r\n\r\n count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n atom = atoms[i];\r\n atom.edges.sort();\r\n }\r\n\r\n const labels = self._breadWidthSearch(atoms, 0); // for now\r\n\r\n const retStruct = {};\r\n retStruct.atoms = atoms;\r\n retStruct.bonds = localBond;\r\n retStruct.labels = labels.atomLabels;\r\n retStruct.count = Math.min(1, labels.labelsCount); // for now\r\n retStruct.curr = -1;\r\n retStruct.originalCML = doc;\r\n\r\n return retStruct;\r\n }\r\n\r\n if (traversedData.cml) {\r\n rawData = traversedData.cml;\r\n } else {\r\n rawData = traversedData;\r\n }\r\n const retData = [];\r\n const filteredData = [];\r\n this._findSuitableMolecule(rawData, filteredData);\r\n if (this._readOnlyOneMolecule && filteredData.length > 1) {\r\n filteredData.splice(1, filteredData.length - 1);\r\n }\r\n filteredData.forEach((d) => {\r\n const rd = prepareComponentCompound(d);\r\n if (rd.atoms.length > 0) {\r\n retData.push(rd);\r\n }\r\n });\r\n return retData;\r\n }\r\n\r\n _packLabel(compId, molId) {\r\n const shift = 16;\r\n return (molId << shift) + compId;\r\n }\r\n\r\n _unpackLabel(l) {\r\n const shift = 16;\r\n const mask = (1 << shift) - 1;\r\n return { molId: l >>> shift, compId: l & mask };\r\n }\r\n\r\n _breadWidthSearch(atoms, molID) {\r\n const atomLabels = new Array(atoms.length);\r\n\r\n let id;\r\n for (id = 0; id < atomLabels.length; id++) {\r\n atomLabels[id] = this._packLabel(0, molID);\r\n }\r\n\r\n const breadthQueue = [];\r\n let componentID = 0;\r\n let labeledAtoms = atoms.length;\r\n\r\n while (labeledAtoms > 0) {\r\n componentID++;\r\n\r\n let startID = -1;\r\n for (id = 0; id < atomLabels.length; id++) {\r\n if (this._unpackLabel(atomLabels[id]).compId === 0) {\r\n startID = id;\r\n break;\r\n }\r\n }\r\n\r\n if (startID < 0) {\r\n break;\r\n }\r\n\r\n // Bread first search\r\n breadthQueue.push(atoms[startID]);\r\n atomLabels[startID] = this._packLabel(componentID, molID);\r\n labeledAtoms--;\r\n\r\n while (breadthQueue.length > 0) {\r\n const curr = breadthQueue.shift();\r\n if (!curr) {\r\n continue;\r\n }\r\n\r\n for (let i = 0; i < curr.edges.length; i++) {\r\n if (atomLabels[curr.edges[i]] !== componentID) {\r\n breadthQueue.push(atoms[curr.edges[i]]);\r\n atomLabels[curr.edges[i]] = componentID;\r\n labeledAtoms--;\r\n }\r\n }\r\n }\r\n }\r\n const ret = {};\r\n ret.atomLabels = atomLabels;\r\n ret.labelsCount = componentID;\r\n return ret;\r\n }\r\n\r\n _parseBond(eAtom, mainAtom, order, type) {\r\n if (eAtom >= 0) {\r\n const h = [Math.min(eAtom, mainAtom), Math.max(eAtom, mainAtom)];\r\n this._complex.addBond(h[0], h[1], order, type, true);\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const complex = this._complex;\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, ni = atoms.length; i < ni; ++i) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n const bonds = complex._bonds;\r\n const { logger } = this;\r\n for (let j = 0, nj = bonds.length; j < nj; ++j) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n logger.debug('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _parseSet(varData) {\r\n const complex = this._complex = new Complex();\r\n const data = varData;\r\n const currentLabel = data.curr;\r\n const { atoms, labels } = data;\r\n let atom = null;\r\n let i;\r\n let j;\r\n const count = atoms.length;\r\n\r\n function addFunc(a) {\r\n a.xmlNodeRef = atom;\r\n if (atom.x2) {\r\n atom.x3 = atom.x2;\r\n delete atom.x2;\r\n }\r\n if (atom.y2) {\r\n atom.y3 = atom.y2;\r\n delete atom.y2;\r\n }\r\n if (!(atom.z3)) {\r\n atom.z3 = '0.0';\r\n }\r\n atom.complexAtom = a;\r\n }\r\n\r\n let chains = {};\r\n // parse atoms in label order\r\n const reorder = [];\r\n for (i = 0; i < count; i++) {\r\n reorder.push(i);\r\n }\r\n reorder.sort((a, b) => labels[a] - labels[b]);\r\n for (i = 0; i < count; i++) {\r\n const atomCharge = 0;\r\n const lLabel = labels[reorder[i]];\r\n if (this._unpackLabel(lLabel).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[reorder[i]];\r\n const atomFullNameStruct = atom.elementType;\r\n\r\n if (atom.sgroupRef) {\r\n const countRef = atom.sgroupRef.length;\r\n for (let k = 0; k < countRef; ++k) {\r\n complex._sgroups.push(atom.sgroupRef[k]);\r\n }\r\n }\r\n\r\n if (atom.x3 || atom.x2) {\r\n const currAtomComp = this._unpackLabel(lLabel).compId;\r\n // use ' ' by default instead of synthetic creation of chain names\r\n const chainID = ' '; //= String.fromCharCode('A'.charCodeAt(0) + currAtomComp);\r\n const resSeq = currAtomComp;\r\n const iCode = ' ';\r\n let strLabel = currAtomComp.toString();\r\n if (strLabel.length === 1) {\r\n strLabel = `0${strLabel}`;\r\n }\r\n const resName = `N${strLabel}`;\r\n let chain = chains[chainID];\r\n if (!chain || chain.getName() !== chainID) {\r\n chains[chainID] = chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = null;\r\n }\r\n\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n this._residue = residue = chain.addResidue(resName, resSeq, iCode);\r\n }\r\n\r\n // _x, _y, _z, mname, mindex, atomNameFull, atomName, chainID, serial, isHet, atlLocInd, atomNameToTypeF\r\n let xyz = null;\r\n if (atom.x3) {\r\n xyz = new THREE.Vector3(parseFloat(atom.x3), parseFloat(atom.y3), parseFloat(atom.z3));\r\n } else if (atom.x2) {\r\n xyz = new THREE.Vector3(parseFloat(atom.x2), parseFloat(atom.y2), 0);\r\n }\r\n let element = Element.ByName[atom.elementType.toUpperCase()];\r\n if (!element) {\r\n element = (JSON.parse(JSON.stringify(Element.ByName[\r\n Object.keys(Element.ByName)[Object.keys(Element.ByName).length - 1]])));\r\n element.number += 1;\r\n element.name = atom.elementType.toUpperCase();\r\n element.fullName = 'Unknown';\r\n Element.ByName[atom.elementType.toUpperCase()] = element;\r\n }\r\n const atomSerial = parseInt(atom.id.replace(/[^0-9]/, ''), 10);\r\n const added = residue.addAtom(\r\n atomFullNameStruct,\r\n element,\r\n xyz,\r\n Element.Role.SG,\r\n true,\r\n atomSerial,\r\n ' ',\r\n 1.0,\r\n 0.0,\r\n atomCharge,\r\n );\r\n if (atom.hydrogenCount) {\r\n added.hydrogenCount = parseInt(atom.hydrogenCount, 10);\r\n }\r\n if (atom.mrvValence) {\r\n added.valence = parseInt(atom.mrvValence, 10);\r\n }\r\n addFunc(added);\r\n }\r\n }\r\n }\r\n chains = null;// NOSONAR\r\n for (i = 0; i < data.bonds.length; i++) {\r\n const cb = data.bonds[i];\r\n if (this._unpackLabel(labels[cb.start]).molId === this._unpackLabel(currentLabel).molId\r\n && this._unpackLabel(labels[cb.end]).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[cb.start];\r\n if (!atom || !(atoms[cb.end])) {\r\n continue; // skip invalid\r\n }\r\n this._parseBond(\r\n parseInt(atom.id.replace(/[^0-9]/, ''), 10),\r\n parseInt(atoms[cb.end].id.replace(/[^0-9]/, ''), 10),\r\n cb.order,\r\n cb.type,\r\n );\r\n }\r\n }\r\n\r\n for (i = 0; i < this._complex.getSGroupCount(); i++) {\r\n const sGrp = this._complex.getSGroups()[i];\r\n for (j = 0; j < sGrp._atoms.length; j++) {\r\n sGrp._atoms[j] = sGrp._atoms[j].complexAtom;\r\n }\r\n }\r\n for (i = 0; i < count; i++) {\r\n if (this._unpackLabel(labels[i]).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[i];\r\n atom.complexAtom = null;\r\n delete atom.complexAtom;\r\n }\r\n }\r\n this._complex.originalCML = data.originalCML;\r\n this._fixBondsArray();\r\n complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n this._serialAtomMap = null;\r\n this._complex = null;\r\n return complex;\r\n }\r\n\r\n parseSync() {\r\n const complexes = [];\r\n const self = this;\r\n const moleculaSet = this._selectComponents(this._data);\r\n moleculaSet.forEach((molSet) => {\r\n molSet.curr = 2;\r\n if (molSet.count === 0) {\r\n molSet.count = 1;\r\n }\r\n for (let i = 0; i < molSet.count; i++) {\r\n molSet.curr = (i + 1);\r\n complexes.push(self._parseSet(molSet, false));\r\n }\r\n });\r\n\r\n let totalAtomsParsed = 0;\r\n complexes.forEach((c) => {\r\n totalAtomsParsed += c.getAtomCount();\r\n });\r\n if (totalAtomsParsed <= 0) {\r\n throw new Error('The data does not contain valid atoms');\r\n }\r\n\r\n if (complexes.length > 1) {\r\n const joinedComplex = new Complex();\r\n joinedComplex.joinComplexes(complexes);\r\n joinedComplex.originalCML = complexes[0].originalCML;\r\n return joinedComplex;\r\n }\r\n if (complexes.length === 1) {\r\n return complexes[0];\r\n }\r\n return new Complex();\r\n }\r\n}\r\n\r\nCMLParser.formats = ['cml'];\r\nCMLParser.extensions = ['.cml'];\r\n\r\nexport default CMLParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport MMTF from '../../../vendor/js/mmtf';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst {\r\n Complex,\r\n Chain,\r\n Atom,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Bond,\r\n Assembly,\r\n Molecule,\r\n} = chem;\r\n\r\nclass ArrayComparator {\r\n constructor(original) {\r\n this._original = Array.from(original);\r\n this._original.sort();\r\n\r\n this._sum = 0;\r\n for (let i = 0; i < this._original.length; ++i) {\r\n this._sum += this._original[i];\r\n }\r\n }\r\n\r\n compare(candidate) {\r\n const len = candidate.length;\r\n if (len !== this._original.length) {\r\n return false;\r\n }\r\n\r\n let sum = 0;\r\n let i;\r\n for (i = 0; i < len; ++i) {\r\n sum += candidate[i];\r\n }\r\n\r\n if (sum !== this._sum) {\r\n return false;\r\n }\r\n\r\n const sorted = Array.from(candidate);\r\n sorted.sort();\r\n\r\n for (i = 0; i < len; ++i) {\r\n if (sorted[i] !== this._original[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nArrayComparator.prototype.constructor = ArrayComparator;\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\n// see https://github.com/rcsb/mmtf-javascript/blob/master/src/mmtf-traverse.js\r\nconst secStructToType = [\r\n StructuralElementType.HELIX_PI, // 0\r\n StructuralElementType.BEND, // 1\r\n StructuralElementType.HELIX_ALPHA, // 2\r\n StructuralElementType.STRAND, // 3\r\n StructuralElementType.HELIX_310, // 4\r\n StructuralElementType.BRIDGE, // 5\r\n StructuralElementType.TURN, // 6\r\n StructuralElementType.COIL, // 7\r\n];\r\n\r\nfunction getFirstByte(buf) {\r\n const bytes = new Uint8Array(buf, 0, 1);\r\n return bytes[0];\r\n}\r\n\r\nclass MMTFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'mmtf';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n // check if it's binary MessagePack format containing a map (dictionary)\r\n // see https://github.com/msgpack/msgpack/blob/master/spec.md\r\n return _.isArrayBuffer(data) && ((getFirstByte(data) | 1) === 0xDF);\r\n }\r\n\r\n _onModel(_modelData) {\r\n }\r\n\r\n _onChain(chainData) {\r\n if (chainData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n const chain = new Chain(this._complex, chainData.chainName);\r\n this._complex._chains[chainData.chainIndex] = chain;\r\n chain._index = chainData.chainIndex;\r\n }\r\n\r\n _onGroup(groupData) {\r\n if (groupData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n if (this.settings.now.nowater) {\r\n // skip water\r\n if (groupData.groupName === 'HOH' || groupData.groupName === 'WAT') {\r\n return;\r\n }\r\n }\r\n\r\n const chain = this._complex._chains[groupData.chainIndex];\r\n const icode = !groupData.insCode.charCodeAt(0) ? '' : groupData.insCode;\r\n const residue = chain.addResidue(groupData.groupName, groupData.groupId, icode);\r\n residue._index = groupData.groupIndex;\r\n\r\n this._updateSecStructure(this._complex, residue, groupData);\r\n }\r\n\r\n _onAtom(atomData) {\r\n if (atomData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n const altLoc = !atomData.altLoc.charCodeAt(0) ? '' : atomData.altLoc;\r\n const atom = new Atom(\r\n atomData.groupIndex, // we store residue index here to replace it later with actual reference\r\n atomData.atomName,\r\n Element.getByName(atomData.element.toUpperCase()),\r\n new THREE.Vector3(atomData.xCoord, atomData.yCoord, atomData.zCoord),\r\n Element.Role[atomData.atomName],\r\n false, // hetero atoms will be marked later\r\n atomData.atomId,\r\n altLoc,\r\n atomData.occupancy,\r\n atomData.bFactor,\r\n atomData.formalCharge,\r\n );\r\n\r\n this._complex._atoms[atomData.atomIndex] = atom;\r\n atom.index = atomData.atomIndex;\r\n\r\n this._serialAtomMap[atomData.atomId] = atom;\r\n }\r\n\r\n _onBond(bondData) {\r\n const right = Math.max(bondData.atomIndex1, bondData.atomIndex2);\r\n if (right >= this._complex._atoms.length) {\r\n return;\r\n }\r\n const left = Math.min(bondData.atomIndex1, bondData.atomIndex2);\r\n this._complex.addBond(\r\n this._complex._atoms[left],\r\n this._complex._atoms[right],\r\n bondData.bondOrder,\r\n Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n\r\n _updateSecStructure(complex, residue, groupData) {\r\n const helixClasses = [3, -1, 1, -1, 5];\r\n\r\n if (!_.isUndefined(groupData) && groupData.secStruct === this._ssType) {\r\n residue._secondary = this._ssStruct;\r\n if (this._ssStruct) {\r\n this._ssStruct.term = residue;\r\n }\r\n return;\r\n }\r\n\r\n if (!_.isUndefined(groupData)) {\r\n // start new secondary structure\r\n const type = secStructToType[groupData.secStruct];\r\n this._ssType = groupData.secStruct;\r\n this._ssStart = residue;\r\n\r\n let struct = null;\r\n switch (this._ssType) {\r\n case -1: // undefined\r\n case 7: // coil\r\n break;\r\n case 0: // pi helix\r\n case 2: // alpha helix\r\n case 4: // 3-10 helix\r\n struct = new Helix(helixClasses[this._ssType], residue, residue, 0, '', '', 0);\r\n complex._helices.push(struct);\r\n break;\r\n case 3: { // extended\r\n const sheet = new Sheet('', 0);\r\n complex._sheets.push(sheet);\r\n struct = new Strand(sheet, residue, residue, 0, null, null);\r\n break;\r\n }\r\n default:\r\n if (type !== undefined) {\r\n struct = new StructuralElement(type, residue, residue);\r\n }\r\n break;\r\n }\r\n\r\n this._ssStruct = struct;\r\n residue._secondary = struct;\r\n if (struct) {\r\n complex.structures.push(struct);\r\n }\r\n }\r\n }\r\n\r\n _updateMolecules(mmtfData) {\r\n const entities = mmtfData.entityList;\r\n if (!entities) {\r\n return;\r\n }\r\n\r\n const chainsInModel0 = mmtfData.chainsPerModel[0];\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const chains = entity.chainIndexList;\r\n let residues = [];\r\n for (let j = 0; j < chains.length; j++) {\r\n const chainIndex = chains[j];\r\n // skip chains in models other than the first one\r\n if (chainIndex >= chainsInModel0) {\r\n continue;\r\n }\r\n const chain = this._complex._chains[chainIndex];\r\n residues = residues.concat(chain._residues.slice());\r\n }\r\n const molecule = new Molecule(this._complex, entity.description, i + 1);\r\n molecule.residues = residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n // populate complex with chains, residues and atoms\r\n _traverse(mmtfData) {\r\n const self = this;\r\n\r\n // get metadata\r\n const { metadata } = this._complex;\r\n metadata.id = mmtfData.structureId;\r\n metadata.title = [];\r\n metadata.title[0] = mmtfData.title;\r\n metadata.date = mmtfData.releaseDate;\r\n metadata.format = 'mmtf';\r\n\r\n // create event callback functions\r\n const eventCallbacks = {\r\n onModel(modelData) {\r\n self._onModel(modelData);\r\n },\r\n onChain(chainData) {\r\n self._onChain(chainData);\r\n },\r\n onGroup(groupData) {\r\n self._onGroup(groupData);\r\n },\r\n onAtom(atomData) {\r\n self._onAtom(atomData);\r\n },\r\n onBond(bondData) {\r\n self._onBond(bondData);\r\n },\r\n };\r\n\r\n // temporary variables used during traversal to track secondary structures\r\n this._ssType = -1;\r\n this._ssStruct = null;\r\n this._ssStart = null;\r\n\r\n // traverse the structure and listen to the events\r\n MMTF.traverse(mmtfData, eventCallbacks);\r\n\r\n this._updateSecStructure(this._complex);\r\n this._updateMolecules(mmtfData);\r\n }\r\n\r\n // During traversal atoms and residues don't come sequentially\r\n // so a residue for certain atom can be unavailable. Thus we\r\n // store residue index in atom.\r\n // This function being called after traversal replaces the index\r\n // with actual reference, and also populates atom lists in residues.\r\n _linkAtomsToResidues() {\r\n for (let i = 0; i < this._complex._atoms.length; ++i) {\r\n const atom = this._complex._atoms[i];\r\n const residue = this._complex._residues[atom.residue];\r\n atom.residue = residue;\r\n residue._atoms.push(atom);\r\n }\r\n }\r\n\r\n _findSynonymousChains() {\r\n const named = {};\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i];\r\n const name = chain.getName();\r\n if (!named.hasOwnProperty(name)) {\r\n named[name] = [];\r\n }\r\n\r\n named[name].push(chain._index);\r\n }\r\n\r\n return named;\r\n }\r\n\r\n // NOTE: This function relies on original chain indices, so it must be called before any magic happens to chains.\r\n _parseAssemblyInfo(mmtfData) {\r\n let i;\r\n let j;\r\n let k;\r\n const assemblies = [];\r\n const { logger } = this;\r\n\r\n for (i = 0; i < mmtfData.bioAssemblyList.length; ++i) {\r\n const baInfo = mmtfData.bioAssemblyList[i];\r\n if (baInfo.transformList.length === 0) {\r\n continue;\r\n }\r\n\r\n const chains = baInfo.transformList[0].chainIndexList;\r\n const chainListCheck = new ArrayComparator(chains);\r\n\r\n // build list of chain names\r\n const chainNames = {};\r\n for (j = 0; j < chains.length; ++j) {\r\n chainNames[this._complex._chains[chains[j]].getName()] = 1;\r\n }\r\n\r\n // all chains with the same name should belong to assembly if one of them belongs\r\n const allChains = [];\r\n let name;\r\n for (name in chainNames) {\r\n if (chainNames.hasOwnProperty(name)) {\r\n // just concat arrays -- there should be no duplicates\r\n Array.prototype.push.apply(allChains, this._chainsByName[name]);\r\n }\r\n }\r\n if (!chainListCheck.compare(allChains)) {\r\n // assembly is missing some of the chains\r\n logger.debug('MMTF: Assembly is missing some of the synonymous chains. Skipping...');\r\n }\r\n\r\n const a = new Assembly(this._complex);\r\n\r\n // add chains to assembly\r\n for (name in chainNames) {\r\n if (chainNames.hasOwnProperty(name)) {\r\n a.addChain(name);\r\n }\r\n }\r\n\r\n // add unique matrices to assembly\r\n a.addMatrix(new THREE.Matrix4().fromArray(baInfo.transformList[0].matrix).transpose());\r\n for (j = 1; j < baInfo.transformList.length; ++j) {\r\n const transform = baInfo.transformList[j];\r\n\r\n if (!chainListCheck.compare(transform.chainIndexList)) {\r\n // list of chains for this transform doesn't match that for other transforms\r\n // this is illegal in our structure\r\n logger.debug('MMTF: Chain lists differ for different transforms in one assembly. Skipping...');\r\n continue;\r\n }\r\n\r\n const m = new THREE.Matrix4().fromArray(transform.matrix).transpose();\r\n\r\n // check if matrix is already in the list\r\n for (k = 0; k < a.matrices.length; ++k) {\r\n if (a.matrices[k].equals(m)) {\r\n break;\r\n }\r\n }\r\n\r\n if (k === a.matrices.length) {\r\n a.addMatrix(m);\r\n }\r\n }\r\n\r\n a.finalize();\r\n assemblies.push(a);\r\n }\r\n\r\n return assemblies;\r\n }\r\n\r\n // NOTE: This function relies on original chain indices, so it must be called before any magic happens to chains.\r\n _markHeteroAtoms(mmtfData) {\r\n const chainsInModel0 = mmtfData.chainsPerModel[0];\r\n for (let i = 0; i < mmtfData.entityList.length; ++i) {\r\n const entity = mmtfData.entityList[i];\r\n if (entity.type !== 'polymer') {\r\n for (let j = 0; j < entity.chainIndexList.length; ++j) {\r\n const chainIndex = entity.chainIndexList[j];\r\n // skip chains in models other than the first one\r\n if (chainIndex >= chainsInModel0) {\r\n continue;\r\n }\r\n const chain = this._complex._chains[chainIndex];\r\n for (let k = 0; k < chain._residues.length; ++k) {\r\n const res = chain._residues[k];\r\n for (let m = 0; m < res._atoms.length; ++m) {\r\n res._atoms[m].het = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // joins chains with the same name into single chain\r\n _joinSynonymousChains() {\r\n let i;\r\n let j;\r\n\r\n const primaryChainsArray = [];\r\n const primaryChainsHash = {};\r\n\r\n // join chains\r\n for (i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i];\r\n const name = chain.getName();\r\n if (!primaryChainsHash.hasOwnProperty(name)) {\r\n // new name -- this is a primary chain\r\n primaryChainsHash[name] = chain;\r\n chain._index = primaryChainsArray.length; // update index as this array will later replace original chain list\r\n primaryChainsArray.push(chain);\r\n continue;\r\n }\r\n\r\n // this chain should be joined with the primary chain of the same name\r\n const primary = primaryChainsHash[name];\r\n for (j = 0; j < chain._residues.length; ++j) {\r\n const residue = chain._residues[j];\r\n primary._residues.push(residue);\r\n residue._chain = primary;\r\n }\r\n }\r\n\r\n // replace chains list with one containing only primary chains\r\n // dropping references to all chains but primary\r\n this._complex._chains = primaryChainsArray;\r\n }\r\n\r\n parseSync() {\r\n const mmtfData = MMTF.decode(this._data);\r\n\r\n this._complex = new Complex();\r\n this._serialAtomMap = {}; // filled during traversal\r\n\r\n this._traverse(mmtfData);\r\n this._linkAtomsToResidues();\r\n this._markHeteroAtoms(mmtfData);\r\n this._chainsByName = this._findSynonymousChains();\r\n Array.prototype.push.apply(this._complex.units, this._parseAssemblyInfo(mmtfData));\r\n this._joinSynonymousChains();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n\r\n return this._complex;\r\n }\r\n}\r\n\r\nMMTFParser.formats = ['mmtf'];\r\nMMTFParser.extensions = ['.mmtf'];\r\nMMTFParser.binary = true;\r\n\r\nexport default MMTFParser;\r\n","class ParsingError extends Error {\r\n constructor(message, line, column) {\r\n super(`data:${line}:${column}: ${message}`);\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, ParsingError);\r\n }\r\n\r\n this.name = 'ParsingError';\r\n this.parseLine = line;\r\n this.parseColumn = column;\r\n }\r\n}\r\n\r\nexport default ParsingError;\r\n","import _ from 'lodash';\r\nimport ParsingError from './ParsingError';\r\n\r\n// Implemented and being tested against: https://www.iucr.org/resources/cif/spec/version1.1/cifsyntax\r\n\r\nfunction _isWhitespace(ch) {\r\n return ch === 32 || ch === 10 || ch === 13 || ch === 9;\r\n}\r\n\r\nfunction _inlineIndexOf(ch0, str, idx) {\r\n const len = str.length;\r\n let ch = -1;\r\n while (idx < len) {\r\n ch = str.charCodeAt(idx);\r\n if (ch === ch0 || ch === 10) {\r\n break;\r\n }\r\n ++idx;\r\n }\r\n return ch === ch0 ? idx : -1;\r\n}\r\n\r\nexport default function readCIF(source) {\r\n let i = 0;\r\n let j = 0;\r\n const n = source.length;\r\n let code = NaN;\r\n let newline = true;\r\n let line = 1;\r\n let column = 1;\r\n let begin;\r\n let state = 0; // 0 - start, 1 - block, 2 - item, 3 - loop, 4 - values, 5 - value\r\n const result = {};\r\n let block = {};\r\n let keys = [];\r\n let keysCount = 0;\r\n let key = '';\r\n let values = [];\r\n let valuesCount = 0;\r\n let value;\r\n\r\n function _parseValue() {\r\n let val;\r\n if ((code === 46 || code === 63) && (i + 1 >= n || _isWhitespace(source.charCodeAt(i + 1)))) { // '.' or '?' .....\r\n // it's a missing value\r\n ++column;\r\n ++i;\r\n return undefined;\r\n }\r\n if (newline && code === 59) { // ';' ......................................................................\r\n // parse multi-line string\r\n j = i;\r\n let lines = 0;\r\n do {\r\n j = _inlineIndexOf(10, source, j + 1); // '\\n'\r\n if (j === -1) {\r\n throw new ParsingError('Unterminated text block found', line, column);\r\n }\r\n ++lines;\r\n } while ((j + 1 < n && source.charCodeAt(j + 1) !== code) || j + 1 >= n);\r\n val = source.substring(i + 1, j).replace(/\\r/g, '');\r\n i = j + 2;\r\n line += lines;\r\n column = 1;\r\n newline = false;\r\n return val;\r\n }\r\n if (code === 39 || code === 34) { // ''' or '\"' ...........................................................\r\n // parse quoted string\r\n j = i;\r\n do {\r\n j = _inlineIndexOf(code, source, j + 1);\r\n if (j === -1) {\r\n throw new ParsingError('Unterminated quoted string found', line, column);\r\n }\r\n } while (j + 1 < n && !_isWhitespace(source.charCodeAt(j + 1)));\r\n val = source.substring(i + 1, j);\r\n column += j - i + 1;\r\n i = j + 1;\r\n return val;\r\n } // ......................................................................................................\r\n // parse until the first whitespace\r\n j = i;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n val = source.substring(i, j);\r\n column += j - i;\r\n i = j;\r\n // try to convert to a number\r\n const num = Number(val);\r\n if (!Number.isNaN(num)) {\r\n return num;\r\n }\r\n // or leave as an unquoted string\r\n return val;\r\n }\r\n\r\n function _storeKey(tag) {\r\n keys[keysCount++] = tag;\r\n }\r\n\r\n function _storeValue(val) {\r\n const keyIndex = valuesCount % keysCount;\r\n values[keyIndex].push(val);\r\n ++valuesCount;\r\n return val;\r\n }\r\n\r\n while (i <= n) {\r\n code = source.charCodeAt(i); // 'NaN' in place of ''\r\n if (code === 13) { // '\\r' .......................................................................................\r\n // just ignore\r\n } else if (code === 10) { // '\\n' ................................................................................\r\n // take note of new lines\r\n newline = true;\r\n ++line;\r\n column = 1;\r\n } else {\r\n // process inline characters\r\n if (code === 32 || code === 9) { // ' ' or '\\t' ................................................................\r\n // just ignore\r\n } else if (code === 35) { // '#' ...............................................................................\r\n // skip the comment until before the end of the line\r\n i = _inlineIndexOf(10, source, i + 1); // '\\n'\r\n if (i === -1) {\r\n break;\r\n } else {\r\n continue; // don't forget to process the new line\r\n }\r\n } else if (state === 0) { // start =============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n j = i + 5;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // add new data block\r\n result[source.substring(begin, i)] = block = {};\r\n state = 1; // block\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Data block name missing', line, column);\r\n }\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n break;\r\n } else { // ..................................................................................................\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n }\r\n } else if (state === 1) { // block =============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n state = 0; // start\r\n continue; // parse again in a different state\r\n } else if (code === 95) { // '_' .............................................................................\r\n j = i + 1;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // start new item\r\n key = source.substring(begin, i);\r\n state = 2; // item\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Tag name missing', line, column);\r\n }\r\n } else if ((code === 76 || code === 108) && source.substr(i + 1, 4).toLowerCase() === 'oop_') { // 'loop_' ...\r\n i += 5;\r\n column += 5;\r\n if (i < n && !_isWhitespace(source.charCodeAt(i))) {\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n } else {\r\n // start new loop\r\n keys = [];\r\n keysCount = 0;\r\n values = [];\r\n valuesCount = 0;\r\n state = 3; // loop\r\n continue; // don't forget to process the whitespace\r\n }\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n break;\r\n } else { // ..................................................................................................\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n }\r\n } else if (state === 2) { // item ==============================================================================\r\n if (Number.isNaN(code)) {\r\n break;\r\n }\r\n value = _parseValue();\r\n _.set(block, key, value);\r\n state = 1; // block\r\n continue;\r\n } else if (state === 3) { // loop ==============================================================================\r\n if (code === 95) { // '_' ....................................................................................\r\n j = i + 1;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // add new key\r\n _storeKey(source.substring(begin, i));\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Tag name missing', line, column);\r\n }\r\n } else { // ..................................................................................................\r\n if (keysCount > 0) {\r\n for (let keyIndex = 0; keyIndex < keysCount; ++keyIndex) {\r\n value = [];\r\n values[keyIndex] = value;\r\n _.set(block, keys[keyIndex], value);\r\n }\r\n state = 4;\r\n continue; // parse again in a different state\r\n }\r\n throw new ParsingError('Data tags are missing inside a loop', line, column);\r\n }\r\n } else if (state === 4) { // values ============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n state = 0; // start\r\n } else if (code === 95) { // '_' .............................................................................\r\n state = 1; // block\r\n } else if ((code === 76 || code === 108) && source.substr(i + 1, 4).toLowerCase() === 'oop_') { // 'loop_' ...\r\n state = 1; // block\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n state = 0;\r\n } else { // ..................................................................................................\r\n _storeValue(_parseValue());\r\n }\r\n continue; // parse again in a different state\r\n } else { // ====================================================================================================\r\n throw new ParsingError(`Unexpected internal state ${state}`, line, column);\r\n }\r\n\r\n newline = false;\r\n ++column;\r\n }\r\n ++i;\r\n }\r\n\r\n if (state === 2) { // item\r\n throw new ParsingError(`Unexpected end of file in state ${state}`, line, column);\r\n }\r\n\r\n return result;\r\n}\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\nimport readCIF from './readCIF';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Assembly,\r\n Molecule,\r\n} = chem;\r\n\r\nconst cRequiredAtomFields = [\r\n 'auth_seq_id',\r\n 'Cartn_x',\r\n 'Cartn_y',\r\n 'Cartn_z',\r\n 'label_atom_id',\r\n];\r\n\r\nconst cSecondaryCoding = {\r\n helx: 'helix',\r\n turn: 'turn',\r\n strn: 'strand',\r\n};\r\n\r\nfunction getTypeFromId(string) {\r\n const typeId = /[A-Za-z]+/.exec(string);\r\n if (!typeId) {\r\n return null;\r\n }\r\n\r\n return cSecondaryCoding[typeId[0].toLowerCase()];\r\n}\r\n\r\n/**\r\n * Make valid object an array\r\n * @param arrayLikeObject\r\n * @return {array, object} array or object\r\n */\r\nfunction arrize(arrayLikeObject) {\r\n if (arrayLikeObject === null || arrayLikeObject === undefined || _.isArray(arrayLikeObject)) {\r\n return arrayLikeObject;\r\n }\r\n return [arrayLikeObject];\r\n}\r\n\r\nfunction nameToElement(name) {\r\n // http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM\r\n //\r\n // http://www.cgl.ucsf.edu/chimera/docs/UsersGuide/tutorials/pdbintro.html#note1\r\n //\r\n // Atom names start with element symbols right-justified in columns 13-14\r\n // as permitted by the length of the name. For example, the symbol FE for\r\n // iron appears in columns 13-14, whereas the symbol C for carbon appears\r\n // in column 14 (see Misaligned Atom Names). If an atom name has four\r\n // characters, however, it must start in column 13 even if the element\r\n // symbol is a single character (for example, see Hydrogen Atoms).\r\n\r\n const veryLong = name.trim().length === 4;\r\n return name.slice(0, veryLong ? 1 : 2).trim();\r\n}\r\n\r\nclass AtomDataError extends Error {\r\n constructor(message) {\r\n super();\r\n this.name = 'AtomDataError';\r\n this.message = message;\r\n }\r\n}\r\n\r\nfunction _getOperations(operList) {\r\n if (!operList) {\r\n return null;\r\n }\r\n const idc = arrize(operList.id);\r\n const { matrix, vector } = operList;\r\n if (!idc || !matrix || !vector) {\r\n return null;\r\n }\r\n\r\n const ops = [];\r\n for (let i = 0, n = idc.length; i < n; ++i) {\r\n const mtx = new THREE.Matrix4();\r\n const { elements } = mtx;\r\n\r\n for (let row = 0; row < 3; ++row) {\r\n const matrixData = matrix[row + 1];\r\n elements[row] = arrize(matrixData[1])[i];\r\n elements[row + 4] = arrize(matrixData[2])[i];\r\n elements[row + 8] = arrize(matrixData[3])[i];\r\n elements[row + 12] = arrize(vector[row + 1])[i];\r\n }\r\n ops[idc[i]] = mtx;\r\n }\r\n return ops;\r\n}\r\n\r\nfunction _extractOperations(assemblyGen, opsDict) {\r\n assemblyGen = _.isString(assemblyGen) ? assemblyGen : `${assemblyGen}`;\r\n const l = assemblyGen.replace(/\\)\\s*\\(/g, '!').replace(/[()']/g, '');\r\n const groupStr = l.split('!');\r\n const gps = [];\r\n\r\n for (let grIdx = 0, grCount = groupStr.length; grIdx < grCount; ++grIdx) {\r\n const gr = groupStr[grIdx].split(',');\r\n const gp = [];\r\n let idx = 0;\r\n for (let i = 0, n = gr.length; i < n; ++i) {\r\n const s = gr[i];\r\n if (s.includes('-')) {\r\n const es = s.split('-');\r\n let j = parseInt(es[0], 10);\r\n const m = parseInt(es[1], 10);\r\n for (; j <= m; ++j) {\r\n gp[idx++] = opsDict[j];\r\n }\r\n } else {\r\n gp[idx++] = opsDict[s];\r\n }\r\n }\r\n gps.push(gp);\r\n }\r\n\r\n // traverse all groups from the end of array and make all mults\r\n const matrices = [];\r\n let cnt = 0;\r\n function traverse(level, mtx) {\r\n for (let ii = 0, nn = gps[level].length; ii < nn; ++ii) {\r\n const newMtx = mtx ? mtx.clone() : new THREE.Matrix4();\r\n newMtx.multiplyMatrices(gps[level][ii], newMtx);\r\n if (level === 0) {\r\n matrices[cnt++] = newMtx;\r\n } else {\r\n traverse(level - 1, newMtx);\r\n }\r\n }\r\n }\r\n traverse(gps.length - 1);\r\n return matrices;\r\n}\r\n\r\nclass CIFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this.asymDict = {};\r\n this.molecules = [];\r\n this._options.fileType = 'cif';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && /^\\s*data_/i.test(data);\r\n }\r\n\r\n parseSync() {\r\n this.logger.info('Parsing CIF file..');\r\n const data = readCIF(this._data);\r\n return this._toComplex(data);\r\n }\r\n\r\n /**\r\n * Convert intermediate structure into our valid Complex object\r\n * @param cifData intermediate CIF object\r\n * @returns {Complex} complex\r\n * @private\r\n */\r\n _toComplex(cifData) {\r\n const complex = new Complex();\r\n const complexData = cifData[Object.keys(cifData)[0]];\r\n this._extractAtoms(complex, complexData);\r\n this._extractSecondary(complex, complexData);\r\n this._extractAssemblies(complex, complexData);\r\n this._extractMolecules(complex, complexData);\r\n this._extractMetadata(complex, complexData);\r\n complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n });\r\n\r\n return complex;\r\n }\r\n\r\n /**\r\n * Extract metadata\r\n * @param complex structure to fill\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n\r\n _extractMetadata(complex, complexData) {\r\n const { metadata } = complex;\r\n metadata.id = complexData.entry.id;\r\n metadata.classification = complexData.struct_keywords.pdbx_keywords;\r\n const databaserev = complexData.database_PDB_rev;\r\n metadata.date = (databaserev && databaserev.date_original) ? databaserev.date_original : '';\r\n metadata.format = 'cif';\r\n metadata.title = [];\r\n metadata.title[0] = complexData.struct.title;\r\n }\r\n\r\n /**\r\n * Extract molecules information from CIF structure (should be called strictly after _extractAtoms)\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractMolecules(complex, complexData) {\r\n const molData = complexData.entity;\r\n const names = arrize(molData.pdbx_description);\r\n const count = names.length;\r\n let i;\r\n\r\n // molecules names from cif\r\n for (i = 0; i < count; i++) {\r\n if (this.molecules[i]) { // molecule was created during atoms processing\r\n this.molecules[i].name = names[i];\r\n } else { // molecule wasn't created, because there is no atom which is contained\r\n this.molecules[i] = { name: names[i], residues: [] };\r\n }\r\n }\r\n\r\n // reorganize molecules for complex and check chains\r\n const molecules = complex.getMolecules();\r\n for (i = 0; i < count; i++) {\r\n const molecule = this.molecules[i];\r\n molecules[i] = new Molecule(complex, molecule.name, i + 1);\r\n molecules[i].residues = molecule.residues;\r\n }\r\n }\r\n\r\n /**\r\n * Extract atom information from CIF structure and fill complex\r\n * @param {Complex} complex\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractAtoms(complex, complexData) {\r\n const atomData = complexData.atom_site;\r\n if (!atomData) {\r\n throw new AtomDataError('CIF parsing error: atom_site is not specified!');\r\n }\r\n\r\n for (let f = 0, n = cRequiredAtomFields.length; f < n; ++f) {\r\n if (!atomData[cRequiredAtomFields[f]]) {\r\n throw new AtomDataError(`CIF parsing error: requires field ${cRequiredAtomFields[f]} not found!`);\r\n }\r\n }\r\n\r\n const { asymDict } = this;\r\n // required fields\r\n const resIdc = arrize(atomData.auth_seq_id);\r\n const x = arrize(atomData.Cartn_x);\r\n const y = arrize(atomData.Cartn_y);\r\n const z = arrize(atomData.Cartn_z);\r\n const names = arrize(atomData.label_atom_id);\r\n const count = names.length;\r\n // optional fields\r\n const group = arrize(atomData.group_PDB) || [];\r\n const chainIdc = arrize(atomData.auth_asym_id) || [];\r\n const chainLabelIdc = arrize(atomData.label_asym_id) || [];\r\n const serials = arrize(atomData.id) || [];\r\n const iCodes = arrize(atomData.pdbx_PDB_ins_code) || [];\r\n const resNames = arrize(atomData.label_comp_id) || [];\r\n const elements = arrize(atomData.type_symbol) || [];\r\n const tempFactors = arrize(atomData.B_iso_or_equiv) || [];\r\n const occupancies = arrize(atomData.occupancy) || [];\r\n const charges = arrize(atomData.pdbx_formal_charge) || [];\r\n const altLocs = arrize(atomData.label_alt_id) || [];\r\n const models = arrize(atomData.pdbx_PDB_model_num) || [];\r\n const molecules = arrize(atomData.label_entity_id) || [];\r\n\r\n let chain = null;\r\n let residue = null;\r\n for (let i = 0; i < count; ++i) {\r\n const model = models[i] || 1;\r\n if (model !== 1) {\r\n continue;\r\n }\r\n const chainID = String(chainIdc[i] || ' ');\r\n\r\n if (!chain || chain.getName() !== chainID) {\r\n chain = complex.getChain(chainID) || complex.addChain(chainID);\r\n }\r\n asymDict[String(chainLabelIdc[i] || ' ')] = chainID;\r\n const resSeq = resIdc[i];\r\n const iCode = String(iCodes[i] || ' ');\r\n const resName = String(resNames[i] || '');\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n residue = chain.addResidue(resName, resSeq, iCode);\r\n\r\n // store residue in appropriate molecule\r\n const moleculeIdx = molecules[i] - 1;\r\n let entity = this.molecules[moleculeIdx];\r\n if (!entity) { // create new molecule if it hasn't been created\r\n this.molecules[moleculeIdx] = { name: '', residues: [] };\r\n entity = this.molecules[moleculeIdx];\r\n }\r\n entity.residues.push(residue);\r\n }\r\n\r\n const name = names[i];\r\n const element = elements[i] || nameToElement(name);\r\n const type = Element.getByName(element);\r\n const role = Element.Role[name.trim()];\r\n const xyz = new THREE.Vector3(x[i], y[i], z[i]);\r\n const het = group[i] === 'HETATM' || false;\r\n const serial = serials[i] || i;\r\n const tempFactor = tempFactors[i] || 0.0;\r\n const occupancy = occupancies[i] || 0.0;\r\n const altLoc = String(altLocs[i] || '');\r\n const charge = charges[i] || 0;\r\n\r\n residue.addAtom(\r\n name,\r\n type,\r\n xyz,\r\n role,\r\n het,\r\n serial,\r\n altLoc,\r\n occupancy,\r\n tempFactor,\r\n charge,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Extracts secondary structure information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex - complex to fill\r\n * @param complexData - CIF complex data\r\n * @private\r\n */\r\n _extractSecondary(complex, complexData) {\r\n if (complexData.struct_conf) {\r\n this._extractConfs(complex, complexData.struct_conf);\r\n }\r\n if (complexData.struct_sheet_range) {\r\n this._extractSheets(complex, complexData.struct_sheet_range);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts sheets information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex\r\n * @param sheetData\r\n * @private\r\n */\r\n _extractSheets(complex, sheetData) {\r\n const { asymDict } = this;\r\n if (!sheetData.sheet_id || !sheetData.id || !sheetData.beg_label_seq_id || !sheetData.end_label_seq_id\r\n || !sheetData.beg_label_asym_id) {\r\n return;\r\n }\r\n // Strand(sheet, start, end, sense, cur, prev)\r\n const sheets = complex._sheets;\r\n\r\n function getSheet(name) {\r\n const n = sheets.length;\r\n for (let i = 0; i < n; ++i) {\r\n if (sheets[i]._name === name) {\r\n return sheets[i];\r\n }\r\n }\r\n sheets[n] = new Sheet(name, 0);\r\n return sheets[n];\r\n }\r\n\r\n const sheetNames = arrize(sheetData.sheet_id);\r\n const strandNames = arrize(sheetData.id);\r\n const starts = arrize(sheetData.beg_auth_seq_id);\r\n const ends = arrize(sheetData.end_auth_seq_id);\r\n const chains = arrize(sheetData.beg_label_asym_id);\r\n const stICodes = arrize(sheetData.pdbx_beg_PDB_ins_code) || [];\r\n const endICodes = arrize(sheetData.pdbx_end_PDB_ins_code) || [];\r\n\r\n for (let i = 0, n = strandNames.length; i < n; ++i) {\r\n const chain = complex.getChain(asymDict[chains[i]]);\r\n const sheet = getSheet(sheetNames[i]);\r\n const startIdx = starts[i];\r\n const endIdx = ends[i];\r\n const startICode = stICodes[i] || ' ';\r\n const endICode = endICodes[i] || ' ';\r\n\r\n const start = chain.findResidue(startIdx, startICode);\r\n const end = chain.findResidue(endIdx, endICode);\r\n\r\n // TODO think about last condition\r\n if (!start || !end) {\r\n continue;\r\n }\r\n\r\n const strand = new Strand(sheet, start[0], end[0], 0, null, null);\r\n const residues = chain.getResidues();\r\n for (let r = start[1]; r <= end[1]; ++r) {\r\n residues[r]._secondary = strand;\r\n }\r\n sheet.addStrand(strand);\r\n complex.structures.push(strand);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts helix/turn/strand(?) information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex\r\n * @param helicesData\r\n * @private\r\n */\r\n _extractConfs(complex, helicesData) {\r\n const { asymDict } = this;\r\n if (!helicesData.conf_type_id || !helicesData.beg_label_seq_id || !helicesData.end_label_seq_id\r\n || !helicesData.beg_label_asym_id) {\r\n return;\r\n }\r\n\r\n const types = arrize(helicesData.conf_type_id);\r\n const starts = arrize(helicesData.beg_auth_seq_id);\r\n const stICodes = arrize(helicesData.pdbx_beg_PDB_ins_code) || [];\r\n const ends = arrize(helicesData.end_auth_seq_id);\r\n const endICodes = arrize(helicesData.pdbx_end_PDB_ins_code) || [];\r\n const comments = arrize(helicesData.details) || [];\r\n const lengths = arrize(helicesData.pdbx_PDB_helix_length) || [];\r\n const helixClasses = arrize(helicesData.pdbx_PDB_helix_class) || [];\r\n const names = arrize(helicesData.id) || [];\r\n const chains = arrize(helicesData.beg_label_asym_id);\r\n\r\n for (let i = 0, n = types.length; i < n; ++i) {\r\n const type = getTypeFromId(types[i]);\r\n if (!type) {\r\n continue;\r\n }\r\n const name = names[i] || types[i];\r\n const chain = complex.getChain(asymDict[chains[i]]);\r\n\r\n const startIdx = starts[i];\r\n const endIdx = ends[i];\r\n const startICode = stICodes[i] || ' ';\r\n const endICode = endICodes[i] || ' ';\r\n\r\n const start = chain.findResidue(startIdx, startICode);\r\n const end = chain.findResidue(endIdx, endICode);\r\n\r\n // TODO think about last condition\r\n if (!start || !end) {\r\n continue;\r\n }\r\n const comment = comments[i] || '';\r\n const length = lengths[i] || 0;\r\n const helixClass = helixClasses[i] || ' ';\r\n let struct;\r\n if (type === 'helix') {\r\n const idx = complex._helices.length;\r\n struct = new Helix(helixClass, start[0], end[0], idx, name, comment, length);\r\n complex.addHelix(struct);\r\n complex.structures.push(struct);\r\n } else if (type === 'turn') {\r\n struct = new StructuralElement(StructuralElement.Type.TURN, start[0], end[0]);\r\n complex.structures.push(struct);\r\n } else {\r\n struct = null;\r\n }\r\n if (!struct) {\r\n continue;\r\n }\r\n const residues = chain.getResidues();\r\n for (let r = start[1]; r <= end[1]; ++r) {\r\n residues[r]._secondary = struct;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Extract biological assemblies information from CIF structure and fill complex\r\n * @param {Complex} complex\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractAssemblies(complex, complexData) {\r\n const { asymDict } = this;\r\n const asmGen = complexData.pdbx_struct_assembly_gen;\r\n if (!asmGen) {\r\n return;\r\n }\r\n\r\n const asmIdx = arrize(asmGen.assembly_id);\r\n const asmOper = arrize(asmGen.oper_expression);\r\n const asmList = arrize(asmGen.asym_id_list);\r\n if (!asmIdx || !asmOper || !asmList) {\r\n return;\r\n }\r\n\r\n const operList = _getOperations(complexData.pdbx_struct_oper_list);\r\n if (!operList) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = asmIdx.length; i < n; ++i) {\r\n const asm = new Assembly(complex);\r\n const assemblyOps = _extractOperations(asmOper[i], operList);\r\n const entries = asmList[i].split(',');\r\n for (let ii = 0, nn = entries.length; ii < nn; ++ii) {\r\n const chain = entries[ii].trim();\r\n if (chain.length > 0) {\r\n asm.addChain(asymDict[chain]);\r\n }\r\n }\r\n asm.matrices = assemblyOps;\r\n complex.units.push(asm);\r\n }\r\n }\r\n}\r\n\r\nCIFParser.formats = ['cif', 'mmcif'];\r\nCIFParser.extensions = ['.cif', '.mmcif'];\r\n\r\nexport default CIFParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Volume from '../../chem/Volume';\r\n\r\nexport const valueType = {\r\n singular: 0,\r\n vector: 1,\r\n array: 2,\r\n buffer: 3,\r\n};\r\n\r\nclass VolumeModel {\r\n _xyz2crs = [];\r\n\r\n _origin = new THREE.Vector3(0, 0, 0);\r\n\r\n constructor() {\r\n this._header = {};\r\n this._boxSize = new THREE.Vector3();\r\n this._boxStart = new THREE.Vector3();\r\n this._header.delta = {};\r\n this._header.extent = [];\r\n this._header.nstart = [];\r\n this._header.grid = [];\r\n this._header.crs2xyz = [];\r\n this._header.cellDims = new THREE.Vector3();\r\n this._header.angles = [];\r\n this._header.origin = new THREE.Vector3(0, 0, 0);\r\n this._header.dmin = 0;\r\n this._header.dmean = 0;\r\n this._header.dmax = 0;\r\n }\r\n\r\n _typedCheck() {\r\n if (_.isTypedArray(this._buff)) {\r\n this._buff = this._buff.buffer;\r\n } else if (!_.isArrayBuffer(this._buff)) {\r\n throw new TypeError('Expected ArrayBuffer or TypedArray');\r\n }\r\n }\r\n\r\n _fillHeader(headerFormat, arrays) {\r\n for (const key in headerFormat) {\r\n if (headerFormat.hasOwnProperty(key)) {\r\n switch (headerFormat[key][0]) {\r\n case valueType.singular:\r\n this._header[key] = arrays[headerFormat[key][1]][headerFormat[key][2]];\r\n break;\r\n\r\n case valueType.array:\r\n this._parseArray(this._header[key], arrays[headerFormat[key][1]], headerFormat[key][2]);\r\n break;\r\n\r\n case valueType.vector:\r\n this._parseVector(this._header[key], arrays[headerFormat[key][1]], headerFormat[key][2]);\r\n break;\r\n\r\n case valueType.buffer:\r\n this._header[key] = new Uint8Array(\r\n arrays[headerFormat[key][1]],\r\n [headerFormat[key][2]] * 4,\r\n [headerFormat[key][3]] * 4,\r\n );\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _parseVector(vector, arr, pos) {\r\n [vector.x, vector.y, vector.z] = [arr[pos], arr[pos + 1], arr[pos + 2]];\r\n }\r\n\r\n _parseArray(vector, arr, pos) {\r\n vector[0] = arr[pos];\r\n vector[1] = arr[pos + 1];\r\n vector[2] = arr[pos + 2];\r\n }\r\n\r\n _parseHeader(_buffer) {}\r\n\r\n _setAxisIndices() {}\r\n\r\n _setOrigins() {}\r\n\r\n _getAxis() {\r\n const header = this._header;\r\n\r\n const xScale = header.cellDims.x / header.grid[0];\r\n const yScale = header.cellDims.y / header.grid[1];\r\n const zScale = header.cellDims.z / header.grid[2];\r\n\r\n const [alpha, beta, gamma] = header.angles;\r\n\r\n const z1 = Math.cos(beta);\r\n const z2 = (Math.cos(alpha) - Math.cos(beta)\r\n * Math.cos(gamma)) / Math.sin(gamma);\r\n const z3 = Math.sqrt(1.0 - z1 * z1 - z2 * z2);\r\n\r\n const xaxis = new THREE.Vector3(xScale, 0, 0);\r\n const yaxis = new THREE.Vector3(Math.cos(gamma) * yScale, Math.sin(gamma) * yScale, 0);\r\n const zaxis = new THREE.Vector3(z1 * zScale, z2 * zScale, z3 * zScale);\r\n\r\n return [xaxis, yaxis, zaxis];\r\n }\r\n\r\n _getXYZdim() {\r\n return [this._header.extent[this._xyz2crs[0]],\r\n this._header.extent[this._xyz2crs[1]],\r\n this._header.extent[this._xyz2crs[2]]];\r\n }\r\n\r\n _getVolumeInfo() {\r\n const volInfo = _.pick(this._header, ['dmean', 'dmin', 'dmax', 'sd', 'delta']);\r\n volInfo.obtuseAngle = this._header.angles.map((angle) => Number(angle >= (Math.PI / 2)));\r\n return volInfo;\r\n }\r\n\r\n _setBoxParams(xaxis, yaxis, zaxis) {\r\n // if axes are not orthogonal, the origins might not match with box coordinates - need to make shift\r\n let shiftX = 0;\r\n let shiftY = 0;\r\n const [alpha, beta, gamma] = this._header.angles;\r\n\r\n if (gamma >= Math.PI / 2) {\r\n shiftX += Math.abs(yaxis.x);\r\n }\r\n if (beta >= Math.PI / 2) {\r\n shiftX += Math.abs(zaxis.x);\r\n }\r\n if (alpha >= Math.PI / 2) {\r\n shiftY += Math.abs(zaxis.y);\r\n }\r\n\r\n this._boxStart = new THREE.Vector3(this._origin.x - shiftX, this._origin.y - shiftY, this._origin.z);\r\n this._boxSize = new THREE.Vector3(\r\n Math.abs(xaxis.x) + Math.abs(yaxis.x) + Math.abs(zaxis.x),\r\n Math.abs(yaxis.y) + Math.abs(zaxis.y),\r\n Math.abs(zaxis.z),\r\n );\r\n\r\n const delta = (axe, proj) => (Math.abs(axe[proj]) / this._boxSize[proj]);\r\n this._header.delta.x = delta(yaxis, 'x');\r\n this._header.delta.y = delta(zaxis, 'x');\r\n this._header.delta.z = delta(zaxis, 'y');\r\n }\r\n\r\n _getXYZbox() {\r\n return new THREE.Box3(this._boxStart.clone(), this._boxStart.clone().add(this._boxSize));\r\n }\r\n\r\n _toXYZData() {}\r\n\r\n parse(data) {\r\n this._parseHeader(data);\r\n this._setOrigins();\r\n return new Volume(Float32Array, this._getXYZdim(), this._getXYZbox(), 1, this._toXYZData(), this._getVolumeInfo());\r\n }\r\n}\r\n\r\nexport default VolumeModel;\r\n","import Parser from './Parser';\r\nimport VolumeModel, { valueType } from './VolumeModel';\r\n\r\nconst CCP4Header = {\r\n extent: [valueType.array, 'u32', 0],\r\n type: [valueType.singular, 'u32', 3],\r\n nstart: [valueType.array, 'i32', 4],\r\n grid: [valueType.array, 'u32', 7],\r\n cellDims: [valueType.vector, 'f32', 10],\r\n angles: [valueType.array, 'f32', 13],\r\n crs2xyz: [valueType.array, 'i32', 16],\r\n dmin: [valueType.singular, 'f32', 19],\r\n dmax: [valueType.singular, 'f32', 20],\r\n dmean: [valueType.singular, 'f32', 21],\r\n ispg: [valueType.singular, 'u32', 22],\r\n nsymbt: [valueType.singular, 'u32', 23],\r\n lksflg: [valueType.singular, 'u32', 24],\r\n customData: [valueType.buffer, 'buffer', 25, 9],\r\n origin: [valueType.vector, 'f32', 34],\r\n map: [valueType.buffer, 'buffer', 52, 1],\r\n machine: [valueType.singular, 'u32', 53],\r\n sd: [valueType.singular, 'f32', 54],\r\n nlabel: [valueType.singular, 'f32', 55],\r\n label: [valueType.buffer, 'buffer', 56, 200],\r\n};\r\n\r\nclass Ccp4Model extends VolumeModel {\r\n // read header (http://www.ccp4.ac.uk/html/maplib.html)\r\n _parseHeader(_buffer) {\r\n this._buff = _buffer;\r\n this._typedCheck();\r\n const arrays = {};\r\n arrays.u32 = new Uint32Array(this._buff, 0, 56);\r\n arrays.i32 = new Int32Array(this._buff, 0, 56);\r\n arrays.f32 = new Float32Array(this._buff, 0, 56);\r\n arrays.buffer = this._buff;\r\n const header = this._header;\r\n\r\n this._fillHeader(CCP4Header, arrays);\r\n\r\n // calculate non-orthogonal unit cell coordinates\r\n header.angles.forEach((angle, i, a) => { a[i] *= Math.PI / 180.0; });\r\n }\r\n\r\n _setAxisIndices() {\r\n const header = this._header;\r\n\r\n if (header.cellDims.x === 0.0 && header.cellDims.y === 0.0 && header.cellDims.z === 0.0) {\r\n header.cellDims.set(1.0, 1.0, 1.0);\r\n }\r\n // Apply header conversion\r\n // Mapping between CCP4 column, row, section and VMD x, y, z.\r\n const { crs2xyz } = this._header;\r\n if (crs2xyz[0] === 0 && crs2xyz[1] === 0 && crs2xyz[2] === 0) {\r\n crs2xyz[0] = 1;\r\n crs2xyz[1] = 2;\r\n crs2xyz[2] = 3;\r\n }\r\n\r\n const xyz2crs = this._xyz2crs;\r\n xyz2crs[crs2xyz[0] - 1] = 0; // column\r\n xyz2crs[crs2xyz[1] - 1] = 1; // row\r\n xyz2crs[crs2xyz[2] - 1] = 2; // section\r\n }\r\n\r\n _setOrigins() {\r\n const [xaxis, yaxis, zaxis] = this._getAxis();\r\n this._setAxisIndices();\r\n\r\n const header = this._header;\r\n const xyz2crs = this._xyz2crs;\r\n // Handle both MRC-2000 and older format maps\r\n if (header.origin.x === 0.0 && header.origin.y === 0.0 && header.origin.z === 0.0) {\r\n this._origin.addScaledVector(xaxis, header.nstart[xyz2crs[0]]);\r\n this._origin.addScaledVector(yaxis, header.nstart[xyz2crs[1]]);\r\n this._origin.addScaledVector(zaxis, header.nstart[xyz2crs[2]]);\r\n } else {\r\n this._origin = header.origin;\r\n // Use ORIGIN records rather than old n[xyz]start records\r\n // http://www2.mrc-lmb.cam.ac.uk/image2000.html\r\n // XXX the ORIGIN field is only used by the EM community, and\r\n // has undefined meaning for non-orthogonal maps and/or non-cubic voxels, etc.\r\n }\r\n xaxis.multiplyScalar(header.extent[xyz2crs[0]] - 1);\r\n yaxis.multiplyScalar(header.extent[xyz2crs[1]] - 1);\r\n zaxis.multiplyScalar(header.extent[xyz2crs[2]] - 1);\r\n\r\n if (header.type === 2) {\r\n this._data = new Float32Array(\r\n this._buff,\r\n 1024 + header.nsymbt,\r\n header.extent[0] * header.extent[1] * header.extent[2],\r\n );\r\n } else {\r\n throw new Error(`CCP4: Unsupported format ${header.type}`);\r\n }\r\n\r\n this._setBoxParams(xaxis, yaxis, zaxis);\r\n }\r\n\r\n _toXYZData() {\r\n const header = this._header;\r\n const data = this._data;\r\n const xyz2crs = this._xyz2crs;\r\n const xyzData = new Float32Array(data.length);\r\n\r\n const dim = this._getXYZdim();\r\n const xSize = dim[0];\r\n const ySize = dim[1];\r\n\r\n let crsIdx = 0;\r\n const coord = [];\r\n let x;\r\n let y;\r\n let z;\r\n for (coord[2] = 0; coord[2] < header.extent[2]; coord[2]++) { // Site\r\n for (coord[1] = 0; coord[1] < header.extent[1]; coord[1]++) { // Row\r\n for (coord[0] = 0; coord[0] < header.extent[0]; coord[0]++, crsIdx++) { // Column\r\n x = coord[xyz2crs[0]];\r\n y = coord[xyz2crs[1]];\r\n z = coord[xyz2crs[2]];\r\n xyzData[x + xSize * (y + ySize * z)] = data[crsIdx];\r\n }\r\n }\r\n }\r\n\r\n return xyzData;\r\n }\r\n}\r\n\r\nclass CCP4Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'ccp4';\r\n this.model = new Ccp4Model();\r\n }\r\n\r\n static canProbablyParse(_data) {\r\n return false; // Autodetection is not implemented yet\r\n }\r\n\r\n parseSync() {\r\n return this.model.parse(this._data);\r\n }\r\n}\r\n\r\nCCP4Parser.formats = ['ccp4'];\r\nCCP4Parser.extensions = ['.ccp4', '.map', '.mrc'];\r\nCCP4Parser.binary = true;\r\n\r\nexport default CCP4Parser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst { Complex, Element, Molecule } = chem;\r\n\r\nclass XYZParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._atomsInf = null;\r\n\r\n this._options.fileType = 'xyz';\r\n this._fileName = options.name;\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && /^\\s*\\d+ *\\n[^\\n]*\\n\\s*\\w{1,3}\\s+-?\\d/.test(data);\r\n }\r\n\r\n _parseToAtomsInf(source) {\r\n const endnAtoms = source.indexOf('\\n');\r\n const nAtoms = parseInt(source.substring(0, endnAtoms), 10);\r\n const endComment = source.indexOf('\\n', endnAtoms + 1);\r\n let comment = source.slice(endnAtoms + 1, endComment).trim();\r\n if (comment.length === 0) {\r\n comment = this._fileName;\r\n }\r\n\r\n const startAtomsInf = endComment + source.substring(endComment).search(/\\S/);\r\n this._atomsInf = source.substring(startAtomsInf).split(/[\\s,]*\\n[\\s,]*/);\r\n if (!Number.isNaN(nAtoms) && (this._atomsInf.length - 1 !== nAtoms)) {\r\n this._complex.error = {\r\n message: 'wrong number of atoms',\r\n };\r\n return;\r\n }\r\n\r\n this._complex.metadata.format = 'xyz';\r\n this._complex.name = comment;\r\n }\r\n\r\n _parseAtomsInf() {\r\n const het = true;\r\n const altLoc = ' ';\r\n const occupancy = 1;\r\n const tempFactor = 1;\r\n const charge = 0;\r\n\r\n const chain = this._complex.addChain('A');\r\n const residue = chain.addResidue('UNK', 1, ' ');\r\n\r\n for (let i = 0; i < this._atomsInf.length - 1; i++) {\r\n const words = this._atomsInf[i].split(/[\\s,]+/);\r\n\r\n if (words.length !== 4) {\r\n this._complex.error = {\r\n message: 'missed parameters',\r\n };\r\n break;\r\n }\r\n\r\n const serial = i + 1;\r\n const name = words[0];\r\n const xyz = new THREE.Vector3(parseFloat(words[1]), parseFloat(words[2]), parseFloat(words[3]));\r\n const type = Element.getByName(name);\r\n const role = undefined;\r\n\r\n residue.addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n const molecule = new Molecule(this._complex, this._complex.name, 1);\r\n molecule.residues = residue;\r\n this._complex._molecules[0] = molecule;\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n\r\n this._parseToAtomsInf(this._data);\r\n this._parseAtomsInf();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n\r\n this._complex = null;\r\n this._atomsInf = null;\r\n\r\n if (result.error) {\r\n throw new Error(result.error.message);\r\n }\r\n return result;\r\n }\r\n\r\n static formats = ['xyz'];\r\n\r\n static extensions = ['.xyz'];\r\n}\r\n\r\nexport default XYZParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst { Complex, Element } = chem;\r\n\r\nclass PubChemParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'pubchem+json';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && data[0] === '{';\r\n }\r\n\r\n parseSync() {\r\n this.logger.info('Parsing PubChem JSON file...');\r\n return this._toComplex(JSON.parse(this._data));\r\n }\r\n\r\n _toComplex(jsonData) {\r\n const complex = new Complex();\r\n const complexData = jsonData.PC_Compounds && jsonData.PC_Compounds[0];\r\n if (complexData) {\r\n this._extractAtoms(complex, complexData);\r\n complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n });\r\n }\r\n return complex;\r\n }\r\n\r\n _extractAtoms(complex, complexData) {\r\n let aids = complexData.atoms && complexData.atoms.aid;\r\n let elements = aids && complexData.atoms.element;\r\n if (!elements || aids.length !== elements.length) {\r\n throw new Error('Unable to parse atom elements');\r\n }\r\n elements = _.fromPairs(_.zip(aids, elements));\r\n const atoms = {};\r\n\r\n const coords = complexData.coords && complexData.coords[0];\r\n const model = coords && coords.conformers && coords.conformers[0];\r\n const xs = model && model.x;\r\n const ys = model && model.y;\r\n const zs = (model && model.z) || [];\r\n aids = coords && coords.aid;\r\n if (!aids || !xs || !ys) {\r\n throw new Error('Coordinates are not found in the file');\r\n }\r\n\r\n const chain = complex.addChain(' ');\r\n const residue = chain.addResidue('UNK', 1, ' ');\r\n\r\n for (let i = 0, n = aids.length; i < n; ++i) {\r\n const aid = aids[i];\r\n const element = Element.ByAtomicNumber[elements[aid]];\r\n const xyz = new THREE.Vector3(xs[i], ys[i], zs[i] || 0.0);\r\n atoms[aid] = residue.addAtom(element.name, element, xyz, undefined, true, aid, ' ', 1.0, 0.0, 0);\r\n }\r\n\r\n const aids1 = complexData.bonds && complexData.bonds.aid1;\r\n const aids2 = complexData.bonds && complexData.bonds.aid2;\r\n const orders = (complexData.bonds && complexData.bonds.order) || [];\r\n if (!aids1 || !aids2 || aids1.length !== aids2.length) {\r\n return;\r\n }\r\n\r\n for (let j = 0, m = aids1.length; j < m; ++j) {\r\n complex.addBond(atoms[aids1[j]], atoms[aids2[j]], orders[j] || 1, 0, true);\r\n }\r\n }\r\n}\r\n\r\nPubChemParser.formats = ['pubchem', 'pubchem+json', 'pc'];\r\nPubChemParser.extensions = ['.json'];\r\n\r\nexport default PubChemParser;\r\n","import _ from 'lodash';\r\n\r\nexport default class SDFStream {\r\n constructor(data) {\r\n this._strings = data.split(/\\r?\\n|\\r/);\r\n this._currentStart = 0;\r\n this._currentStringIndx = 0;\r\n }\r\n\r\n setStart(start) {\r\n if (start >= this._strings.length) {\r\n this._currentStart = this._strings.length - 1;\r\n this._currentStringIndx = this._strings.length - 1;\r\n } else {\r\n this._currentStart = start;\r\n this._currentStringIndx = start;\r\n }\r\n }\r\n\r\n getNextString() {\r\n return this._strings[++this._currentStringIndx];\r\n }\r\n\r\n getCurrentString() {\r\n return this._strings[this._currentStringIndx];\r\n }\r\n\r\n getStringFromStart(numb) {\r\n this._currentStringIndx = this._currentStart + numb;\r\n return this._strings[this._currentStart + numb];\r\n }\r\n\r\n findNextDataItem() {\r\n let curStr = this.getNextString();\r\n let res = false;\r\n while (!_.isUndefined(curStr) && curStr.trim() !== '$$$$') {\r\n if (curStr.match(/>\\s+<(.*)>/)) {\r\n res = true;\r\n break;\r\n }\r\n curStr = this.getNextString();\r\n }\r\n\r\n return res;\r\n }\r\n\r\n findNextCompoundStart() {\r\n let curStr = this.getCurrentString();\r\n while (!_.isUndefined(curStr) && curStr.trim() !== '$$$$') {\r\n curStr = this.getNextString();\r\n }\r\n this.setStart(++this._currentStringIndx);\r\n return this.probablyHaveDataToParse();\r\n }\r\n\r\n probablyHaveDataToParse() {\r\n return this._currentStringIndx < this._strings.length - 2;\r\n }\r\n}\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport SDFStream from './SDFStream';\r\nimport Assembly from '../../chem/Assembly';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst chargeMap = [0, 3, 2, 1, 0, -1, -2, -3];\r\nconst orderMap = [0, 1, 2, 3, 1, 1, 1, 2];\r\nconst typeMap = [\r\n Bond.BondType.UNKNOWN, // 0 - error\r\n Bond.BondType.COVALENT, // 1 - single\r\n Bond.BondType.COVALENT, // 2 - double\r\n Bond.BondType.COVALENT, // 3 - triple\r\n Bond.BondType.AROMATIC, // 4 - aromatic\r\n Bond.BondType.UNKNOWN, // 5 - single or double\r\n Bond.BondType.AROMATIC, // 6 - single or aromatic\r\n Bond.BondType.AROMATIC, // 7 - double or aromatic\r\n // 8 - any\r\n // 9 - coordination\r\n // 10 - hydrogen\r\n];\r\n\r\nconst sdfAndMolRegexp = /.*(M\\s\\sEND).*|.*(^$$$$).*|.*>\\s+<(.+)>.*/;\r\nconst sdfRegExp = /.*($$$$).*|.*>\\s+<(.+)>.*/;\r\n\r\nconst fileFormat = { SDF: 'sdf', MOL: 'mol' };\r\n\r\nconst possibleNameTags = ['PUBCHEM_IUPAC_TRADITIONAL_NAME', /PUBCHEM_(.+)_NAME/, /(.+)name/, /(.+)NAME/];\r\nconst possibleIDTags = ['PUBCHEM_COMPOUND_CID', 'id', 'ID', /.*CID/, /.*ID/, /.*id/];\r\nconst possibleTitleTags = ['msg', 'MSG', 'message', 'title', 'description', 'desc'];\r\nconst tagsNames = ['name', 'id', 'title'];\r\nconst tags = { name: possibleNameTags, id: possibleIDTags, title: possibleTitleTags };\r\n\r\nfunction buildChainID(index) {\r\n if (!index) {\r\n return 'A';\r\n }\r\n\r\n const codes = [];\r\n while (index) {\r\n codes.push(65 + (index % 26));\r\n index = Math.trunc(index / 26);\r\n }\r\n if (codes.length > 1) {\r\n codes.reverse();\r\n codes[0] -= 1;\r\n }\r\n\r\n return String.fromCharCode(...codes);\r\n}\r\n\r\nexport default class SDFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._format = 'sdf';\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._molecules = null;\r\n this._metadata = {};\r\n this._metadata.molecules = [];\r\n this._currentMolProps = {};\r\n this._compoundIndx = -1;\r\n this._assemblies = [];\r\n this._atomsParsed = 0;\r\n this._atomsIndexes = [];\r\n }\r\n\r\n canProbablyParse(data) {\r\n return _.isString(data) && sdfAndMolRegexp.test(data);\r\n }\r\n\r\n _parseHeader(stream) {\r\n const molecule = {};\r\n molecule.name = stream.getStringFromStart(0);\r\n const date = parseInt(stream.getStringFromStart(1).substr(10, 6).trim(), 10);\r\n molecule.date = date.toString() || '';\r\n molecule.title = stream.getStringFromStart(2);\r\n this._metadata.molecules.push(molecule);\r\n }\r\n\r\n _parseAtoms(stream, atomsNum) {\r\n let curStr;\r\n let serial = this._atomsParsed;\r\n\r\n // each molecule = chain\\residue\r\n const chainID = buildChainID(this._compoundIndx);\r\n const resName = 'UNK';\r\n const resSeq = 1;\r\n\r\n this._chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = this._chain.addResidue(resName, resSeq, ' ');\r\n\r\n for (let i = 0; i < atomsNum; i++) {\r\n curStr = stream.getNextString();\r\n serial++;\r\n const x = parseFloat(curStr.substr(0, 10));\r\n const y = parseFloat(curStr.substr(10, 10));\r\n const z = parseFloat(curStr.substr(20, 10));\r\n const charge = chargeMap[parseInt(curStr.substr(36, 3), 10)];\r\n const xyz = new THREE.Vector3(x, y, z);\r\n let name = curStr.substr(31, 3).trim().toUpperCase();\r\n const type = Element.getByName(name);\r\n if (!this._atomsIndexes[name]) {\r\n this._atomsIndexes[name] = 0;\r\n }\r\n this._atomsIndexes[name] += 1;\r\n name += this._atomsIndexes[name]; // every atom need to have unique name.\r\n\r\n this._residue.addAtom(name, type, xyz, undefined, true, serial, ' ', 1.0, 0.0, charge);\r\n }\r\n }\r\n\r\n _parseBonds(stream, bondsNum) {\r\n let curStr;\r\n\r\n for (let i = 0; i < bondsNum; i++) {\r\n curStr = stream.getNextString();\r\n let atom1 = parseInt(curStr.substr(0, 3), 10) + this._atomsParsed;\r\n let atom2 = parseInt(curStr.substr(3, 3), 10) + this._atomsParsed;\r\n const bondType = parseInt(curStr.substr(6, 3), 10);\r\n\r\n if (atom1 > atom2) {\r\n [atom1, atom2] = [atom2, atom1];\r\n }\r\n this._complex.addBond(\r\n atom1,\r\n atom2,\r\n orderMap[bondType] || 1,\r\n typeMap[bondType] || Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n }\r\n\r\n _parseMOL(stream) {\r\n this._compoundIndx++;\r\n\r\n this._parseHeader(stream);\r\n const countsLine = stream.getStringFromStart(3);\r\n const atomsNum = parseInt(countsLine.substr(0, 3), 10);\r\n const bondsNum = parseInt(countsLine.substr(3, 3), 10);\r\n this._parseAtoms(stream, atomsNum);\r\n this._parseBonds(stream, bondsNum);\r\n\r\n this._atomsParsed += atomsNum;\r\n\r\n this._metadata.molecules[this._compoundIndx]._residues = [];\r\n this._metadata.molecules[this._compoundIndx]._residues.push(this._residue);\r\n }\r\n\r\n _parseDataItem(stream) {\r\n const tag = stream.getCurrentString();\r\n\r\n let data = [];\r\n let curStr = stream.getNextString();\r\n\r\n // read data\r\n while (curStr.trim() !== '') {\r\n data.push(curStr);\r\n curStr = stream.getNextString();\r\n }\r\n if (data.length === 1) {\r\n [data] = data;\r\n }\r\n this._currentMolProps[tag.replace(/[<>]/g, '').trim()] = data;\r\n }\r\n\r\n _parseCompound(stream) {\r\n this._parseMOL(stream);\r\n\r\n // parse data items block\r\n if (this._format === fileFormat.SDF) {\r\n this._currentMolProps = {};\r\n while (stream.findNextDataItem()) {\r\n this._parseDataItem(stream);\r\n }\r\n if (Object.keys(this._currentMolProps).length !== 0) {\r\n const molecule = this._metadata.molecules[this._compoundIndx];\r\n molecule.props = this._currentMolProps;\r\n this._tryToUpdateMoleculeData(molecule);\r\n }\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap;\r\n const complex = this._complex;\r\n\r\n const bonds = complex._bonds;\r\n for (let j = 0; j < bonds.length; j++) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n console.log('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _buildAssemblies() {\r\n const chains = this._complex._chains;\r\n\r\n if (chains.length === 1) {\r\n return this._assemblies;\r\n }\r\n\r\n for (let i = 0; i < chains.length; i++) {\r\n const assembly = new Assembly(this._complex);\r\n const matrix = new THREE.Matrix4();\r\n assembly.addMatrix(matrix);\r\n assembly.addChain(chains[i]._name);\r\n this._assemblies.push(assembly);\r\n }\r\n\r\n return this._assemblies;\r\n }\r\n\r\n _buildMolecules() {\r\n this._complex._molecules = [];\r\n const { molecules } = this._metadata;\r\n for (let i = 0; i < molecules.length; i++) {\r\n const molecule = new Molecule(this._complex, molecules[i].name, i + 1);\r\n molecule.residues = molecules[i]._residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n\r\n return this._complex._molecules;\r\n }\r\n\r\n _searchTag(tag, props) {\r\n for (let i = 0; i < props.length; i++) {\r\n if ((tag instanceof RegExp && tag.test(props[i].tag)) || tag === props[i].tag) {\r\n return props[i].data;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n _tryToFind(tagsList, props) {\r\n for (let j = 0; j < tagsList.length; j++) {\r\n const res = this._searchTag(tagsList[j], props);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n _tryToUpdateMoleculeData(molecule) {\r\n let res = false;\r\n for (let i = 0; i < tagsNames.length; i++) {\r\n const tagPossibleNames = tags[tagsNames[i]];\r\n const data = this._tryToFind(tagPossibleNames, molecule.props);\r\n if (data) {\r\n molecule[tagsNames[i]] = data;\r\n res = true;\r\n }\r\n }\r\n\r\n molecule.name = molecule.name || molecule.id;\r\n if (molecule.name.match(/^\\d+$/)) {\r\n molecule.name = `CID: ${molecule.name}`;\r\n }\r\n\r\n return res;\r\n }\r\n\r\n _finalizeMetadata() {\r\n const { molecules } = this._metadata;\r\n const { metadata } = this._complex;\r\n const complex = this._complex;\r\n\r\n if (molecules.length === 1) {\r\n complex.name = molecules[0].name;\r\n metadata.title = molecules[0].title;\r\n metadata.date = molecules[0].date;\r\n metadata.properties = molecules[0].props;\r\n } else if (molecules.length > 1) {\r\n metadata.molecules = [];\r\n for (let i = 0; i < molecules.length; i++) {\r\n metadata.molecules.push({\r\n name: molecules[i].name, date: molecules[i].date, title: molecules[i].title, properties: molecules[i].props,\r\n });\r\n }\r\n }\r\n }\r\n\r\n _finalize() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const atoms = this._complex._atoms;\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n this._complex._finalizeBonds();\r\n this._fixBondsArray();\r\n this._finalizeMetadata();\r\n this._buildAssemblies();\r\n this._complex.units = this._complex.units.concat(this._assemblies);\r\n this._buildMolecules();\r\n this._complex.finalize({\r\n needAutoBonding: false, detectAromaticLoops: false, enableEditing: false, serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n defineFormat(data) {\r\n let format;\r\n if (sdfRegExp.test(data)) {\r\n format = fileFormat.SDF;\r\n } else {\r\n format = fileFormat.MOL;\r\n }\r\n\r\n return format;\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n const stream = new SDFStream(this._data);\r\n\r\n this._format = this.defineFormat(this._data);\r\n result.metadata.format = this._format;\r\n\r\n do {\r\n this._parseCompound(stream);\r\n } while (stream.findNextCompoundStart());\r\n\r\n this._finalize();\r\n\r\n return result;\r\n }\r\n}\r\n\r\nSDFParser.formats = ['mol', 'sdf'];\r\nSDFParser.extensions = ['.mol', '.sdf'];\r\n","import * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport VolumeModel, { valueType } from './VolumeModel';\r\n\r\n// http://www.uoxray.uoregon.edu/tnt/manual/node104.html\r\nconst DSN6Header = {\r\n nstart: [valueType.array, 'i16', 0],\r\n extent: [valueType.array, 'i16', 3],\r\n grid: [valueType.array, 'i16', 6],\r\n cellDims: [valueType.vector, 'i16', 9],\r\n angles: [valueType.array, 'i16', 12],\r\n div: [valueType.singular, 'i16', 15],\r\n adder: [valueType.singular, 'i16', 16],\r\n scaleFactor: [valueType.singular, 'i16', 17],\r\n};\r\n\r\nclass DSN6Model extends VolumeModel {\r\n _parseHeader(_buffer) {\r\n this._buff = _buffer;\r\n this._typedCheck();\r\n\r\n const arrays = {};\r\n arrays.i16 = new Int16Array(this._buff);\r\n\r\n // check and reverse if big endian\r\n if (arrays.i16[18] !== 100) {\r\n for (let i = 0, n = arrays.i16.length; i < n; ++i) {\r\n const val = arrays.i16[i];\r\n arrays.i16[i] = ((val & 0xff) << 8) | ((val >> 8) & 0xff);\r\n }\r\n }\r\n if (arrays.i16[18] !== 100) {\r\n throw new Error('DSN6: Incorrect format ');\r\n }\r\n\r\n const header = this._header;\r\n\r\n this._fillHeader(DSN6Header, arrays);\r\n header.cellDims.multiplyScalar(1.0 / header.scaleFactor);\r\n header.angles.forEach((angle, i, a) => { a[i] *= (Math.PI / 180.0) / header.scaleFactor; });\r\n header.div /= 100;\r\n }\r\n\r\n _setAxisIndices() {\r\n this._xyz2crs[0] = 0;\r\n this._xyz2crs[1] = 1;\r\n this._xyz2crs[2] = 2;\r\n }\r\n\r\n _setOrigins() {\r\n const header = this._header;\r\n const [xaxis, yaxis, zaxis] = this._getAxis();\r\n this._setAxisIndices();\r\n\r\n this._origin.addScaledVector(xaxis, header.nstart[0]);\r\n this._origin.addScaledVector(yaxis, header.nstart[1]);\r\n this._origin.addScaledVector(zaxis, header.nstart[2]);\r\n\r\n xaxis.multiplyScalar(header.extent[0]);\r\n yaxis.multiplyScalar(header.extent[1]);\r\n zaxis.multiplyScalar(header.extent[2]);\r\n\r\n this._setBoxParams(xaxis, yaxis, zaxis);\r\n }\r\n\r\n _pointCalculate(xyzData, byteBuffer, z, y, x, pos, i) {\r\n const header = this._header;\r\n\r\n if (x < header.extent[0] && y < header.extent[1] && z < header.extent[2]) {\r\n const idx = x + header.extent[0] * (y + header.extent[1] * z);\r\n xyzData[idx] = (byteBuffer[pos.counter] - header.adder) / header.div;\r\n ++pos.counter;\r\n } else {\r\n pos.counter += 8 - i;\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n _blockCalculate(xyzData, byteBuffer, zBlock, yBlock, xBlock, pos) {\r\n for (let k = 0; k < 8; ++k) {\r\n const z = 8 * zBlock + k;\r\n for (let j = 0; j < 8; ++j) {\r\n const y = 8 * yBlock + j;\r\n let inRange = true;\r\n let i = 0;\r\n while (inRange && i < 8) {\r\n const x = 8 * xBlock + i;\r\n inRange = this._pointCalculate(xyzData, byteBuffer, z, y, x, pos, i);\r\n i++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _toXYZData() {\r\n const header = this._header;\r\n const byteBuffer = new Uint8Array(this._buff);\r\n const xyzData = new Float32Array(header.extent[0] * header.extent[1] * header.extent[2]);\r\n\r\n const blocks = new THREE.Vector3(header.extent[0] / 8, header.extent[1] / 8, header.extent[2] / 8);\r\n\r\n const pos = {};\r\n pos.counter = 512;\r\n\r\n for (let zBlock = 0; zBlock < blocks.z; ++zBlock) {\r\n for (let yBlock = 0; yBlock < blocks.y; ++yBlock) {\r\n for (let xBlock = 0; xBlock < blocks.x; ++xBlock) {\r\n this._blockCalculate(xyzData, byteBuffer, zBlock, yBlock, xBlock, pos);\r\n }\r\n }\r\n }\r\n this._calculateInfoParams(xyzData);\r\n return xyzData;\r\n }\r\n\r\n _calculateInfoParams(xyzData) {\r\n this._header.dmean /= xyzData.length;\r\n let dispersion = 0;\r\n let minDensity = xyzData[0];\r\n let maxDensity = xyzData[0];\r\n for (let j = 0; j < xyzData.length; j++) {\r\n dispersion += (this._header.dmean - xyzData[j]) ** 2;\r\n\r\n if (xyzData[j] < minDensity) {\r\n minDensity = xyzData[j];\r\n }\r\n if (xyzData[j] > maxDensity) {\r\n maxDensity = xyzData[j];\r\n }\r\n }\r\n this._header.sd = Math.sqrt(dispersion / xyzData.length);\r\n this._header.dmax = maxDensity;\r\n this._header.dmin = minDensity;\r\n }\r\n}\r\n\r\nclass DSN6Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'dsn6';\r\n this.model = new DSN6Model();\r\n }\r\n\r\n static canParse(data, options) {\r\n if (!data) {\r\n return false;\r\n }\r\n return data instanceof ArrayBuffer && Parser.checkDataTypeOptions(options, 'dsn6');\r\n }\r\n\r\n static canProbablyParse(_data) {\r\n return false;\r\n }\r\n\r\n parseSync() {\r\n return this.model.parse(this._data);\r\n }\r\n}\r\n\r\nDSN6Parser.formats = ['dsn6'];\r\nDSN6Parser.extensions = ['.dsn6', '.omap'];\r\nDSN6Parser.binary = true;\r\n\r\nexport default DSN6Parser;\r\n","import PDBStream from './PDBStream';\r\n\r\n/**\r\n * Little helper class for GRO Parser usage.\r\n * @extends PDBStream\r\n */\r\nclass GROReader extends PDBStream {\r\n constructor(data) {\r\n super(data);\r\n /** @type Number */\r\n this._next = -1; // End position of line\r\n this.next();\r\n }\r\n\r\n /**\r\n * Getting end of string.\r\n * @returns {Number} Pointer to end of string\r\n */\r\n getNext() {\r\n return this._next;\r\n }\r\n}\r\n\r\nexport default GROReader;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport GROReader from './GROReader';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Molecule,\r\n} = chem;\r\n\r\n/**\r\n * Gromos87 file format parser.\r\n * @extends Parser\r\n */\r\nclass GROParser extends Parser {\r\n /**\r\n * Create parser for .gro file format\r\n *\r\n * @param {String} data Input file\r\n * @param {String} options Input options (optional field)\r\n */\r\n constructor(data, options) {\r\n super(data, options);\r\n /** @type Date */\r\n this._time = null; // Time in ps, optional field for animations\r\n /** @type Number */\r\n this._numAtoms = null; // Number of atoms in complex\r\n /** @type Number */\r\n this._residueNumber = null; // Number of exact residue\r\n /** @type String */\r\n this._residueName = ''; // Scientific name of exact residue\r\n /** @type String */\r\n this._atomName = ''; // Scientific name of exact atom\r\n /** @type Number */\r\n this._atomNumber = null; // Sorted number of exact atom\r\n /** @type Array */\r\n this._atomPosition = []; // Array which contains x, y, z position of exact atom\r\n /** @type Array */\r\n this._atomVelocity = []; // Array which contains x, y, z velocity of exact atom (optional)\r\n /** @type Complex */\r\n this._complex = null; // Complex structure for unified molecule representation\r\n /** @type Vector3 */\r\n this._molecules = []; // Molecules array\r\n /** @type Molecule */\r\n this._molecule = null; // Single molecule\r\n /** @type String */\r\n this._options.filetype = 'gro'; // Extension of data file.\r\n }\r\n\r\n /**\r\n * General check for possibility of parsing.\r\n * @param {String} data - Input file\r\n * @returns {boolean} true if this file is in ascii, false otherwise\r\n */\r\n canProbablyParse(data) {\r\n return _.isString(this._data) && /^\\s*[^\\n]*\\n\\s*\\d+ *\\n\\s*\\d+[^\\n\\d]{3}\\s*\\w+\\s*\\d+\\s*-?\\d/.test(data);\r\n }\r\n\r\n /**\r\n * Parsing title of molecule complex.\r\n * NOTE: that names are ESTIMATES, there is no strict rules in Gromos87 standard for first line in input file.\r\n * @param {GROReader} line - Line containing title and time.\r\n */\r\n _parseTitle(line) {\r\n const { metadata } = this._complex;\r\n metadata.id = line.readLine().trim();\r\n metadata.name = metadata.id.slice(metadata.id.lastIndexOf('\\\\') + 1, metadata.id.lastIndexOf('.'));\r\n metadata.format = 'gro';\r\n }\r\n\r\n /**\r\n * Parsing line containing number of atoms information.\r\n * @param {GROReader} line - Line containing number of atoms.\r\n */\r\n _parseNumberOfAtoms(line) {\r\n this._numAtoms = line.readInt(0, line.getNext());\r\n if (Number.isNaN(this._numAtoms)) {\r\n throw new Error('Line 2 is not representing atom number. Consider checking input file');\r\n }\r\n }\r\n\r\n /**\r\n * Parsing line containing information about residues, atoms etc. Also information about box vectors.\r\n * Format of atoms MUST (by Gromos87 standard) be this: (note that numbering starts not from 0, but from 1!)\r\n * ResidueNumber[1 - 5] ResidueName[6 - 10] AtomName[11 - 15] AtomNumber[16 - 20] Position[21 - 45] Velocity[46 - 69]\r\n * @param {GROReader} line - Line containing information about atom.\r\n */\r\n _parseAtom(line) {\r\n this._residueNumber = line.readInt(1, 5);\r\n this._residueName = line.readString(6, 10).trim();\r\n this._atomName = line.readString(11, 15).trim();\r\n this._atomNumber = line.readInt(16, 20);\r\n const positionX = line.readFloat(21, 28) * 10;\r\n const positionY = line.readFloat(29, 36) * 10;\r\n const positionZ = line.readFloat(37, 45) * 10;\r\n if (Number.isNaN(positionX) || Number.isNaN(positionY) || Number.isNaN(positionZ)) {\r\n this._complex.error = {\r\n message: `Atom position is invalid in \"${line.readLine()}\"`,\r\n };\r\n return;\r\n }\r\n /* const velocityX = line.readFloat(46, 53);\r\n const velocityY = line.readFloat(54, 61);\r\n const velocityZ = line.readFloat(62, 69); */\r\n /* Adding residue and atom to complex structure */\r\n const type = Element.getByName(this._atomName[0]); /* MAGIC 0. REASONS: This name is something like \"CA\", where\r\n C - is an element an A is something else. But what about Calcium? */\r\n if (type.fullName === 'Unknown') {\r\n this._complex.error = {\r\n message: `${this._atomName[0]} hasn't been recognised as an atom name.`,\r\n };\r\n return;\r\n }\r\n const role = Element.Role[this._atomName];\r\n /* Firstly, create a dummy chain */\r\n let chain = this._chain;\r\n if (!chain) {\r\n this._chain = chain = this._complex.addChain('A');\r\n }\r\n /* Secondly, add residue to that chain */\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== this._residueNumber) {\r\n this._residue = residue = chain.addResidue(this._residueName, this._residueNumber, ' ');\r\n }\r\n /* Lastly, add atom to that residue */\r\n this._atomPosition = new THREE.Vector3(positionX, positionY, positionZ);\r\n /* Adding default constants to correct atom addition process */\r\n const het = true;\r\n const altLoc = ' ';\r\n const occupancy = 1;\r\n const tempFactor = 1;\r\n const charge = 0;\r\n residue.addAtom(this._atomName, type, this._atomPosition, role, het, this._atomNumber, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n /**\r\n * Some finalizing procedures. In '.gro' file format there is only 1 chain and 1 molecule.\r\n */\r\n _finalize() {\r\n const molecule = new Molecule(this._complex, this._complex.metadata.name, 1);\r\n // aggregate residues from chain\r\n molecule.residues = this._chain._residues;\r\n molecule._chains = this._chain;\r\n this._complex._molecules[0] = molecule;\r\n this._molecules.push(molecule);\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n /**\r\n * Main parsing procedure.\r\n * @returns {Complex} Complex structure for visualizing.\r\n */\r\n parseSync() {\r\n /* Create \"Complex\" variable */\r\n const result = this._complex = new Complex();\r\n /* Parse input file line-by-line */\r\n const reader = new GROReader(this._data);\r\n let counter = 0; /* Simple counter regarding to format of .gro file */\r\n /* First two lines - technical information, other lines - Atoms */\r\n this._parseTitle(reader);\r\n reader.next();\r\n this._parseNumberOfAtoms(reader);\r\n reader.next();\r\n for (counter = 0; counter < this._numAtoms; ++counter) {\r\n if (!reader.end()) {\r\n this._parseAtom(reader);\r\n reader.next();\r\n } else break;\r\n }\r\n /* If number of atoms in second line is less then actual atoms in file */\r\n if (counter < this._numAtoms) {\r\n this._complex.error = {\r\n message: 'File ended unexpectedly.',\r\n };\r\n }\r\n /* Catch errors occurred in parsing process */\r\n if (result.error) {\r\n throw new Error(result.error.message);\r\n }\r\n\r\n /* Finalizing data */\r\n this._finalize();\r\n\r\n /* Cleaning up */\r\n this._atomPosition = null;\r\n this._complex = null;\r\n this._molecules = null;\r\n this._molecule = null;\r\n\r\n /* Return resulting Complex variable */\r\n return result;\r\n }\r\n}\r\n\r\nGROParser.formats = ['gro'];\r\nGROParser.extensions = ['.gro'];\r\n\r\nexport default GROParser;\r\n","import * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst orderMap = {\r\n un: 0,\r\n 1: 1,\r\n 2: 2,\r\n 3: 3,\r\n ar: 1,\r\n am: 1,\r\n nc: 0,\r\n du: 1,\r\n};\r\nconst typeMap = {\r\n un: Bond.BondType.UNKNOWN, // unknown (cannot be determined from the parameter tables)\r\n 1: Bond.BondType.COVALENT, // single\r\n 2: Bond.BondType.COVALENT, // double\r\n 3: Bond.BondType.COVALENT, // triple\r\n ar: Bond.BondType.AROMATIC, // aromatic\r\n am: Bond.BondType.COVALENT, // amide\r\n nc: Bond.BondType.UNKNOWN, // not connected\r\n du: Bond.BondType.COVALENT, // dummy\r\n};\r\n\r\nconst resNumberRegex = /\\d+$/;\r\nconst spacesRegex = /\\s+/;\r\n\r\nfunction splitToFields(str) {\r\n return str.trim().split(spacesRegex);\r\n}\r\n/* There is no jsdoc documentation because of eslint corrections:\r\n * not all Parser methods are implemented\r\n */\r\n\r\nclass MOL2Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._compoundIndx = -1;\r\n\r\n this._molecules = [];\r\n this._molecule = null;\r\n\r\n this._currPosIdx = 0;\r\n this._currStartIdx = 0;\r\n\r\n this._serialAtomMap = {};\r\n\r\n this._options.fileType = 'mol2';\r\n }\r\n\r\n _parseRawStrings(data) {\r\n return data.split(/\\r?\\n|\\r/);\r\n }\r\n\r\n _toStringFromStart(numb, MOL2Data) {\r\n const newPosIdx = this._currStartIdx + numb;\r\n this._currPosIdx = (newPosIdx < MOL2Data.length) ? newPosIdx : this._currStartIdx;\r\n }\r\n\r\n _toHeaderString(header, MOL2Data) {\r\n this._toStringFromStart(0, MOL2Data);\r\n while (this._currPosIdx < MOL2Data.length) {\r\n if (MOL2Data[this._currPosIdx].match(`@${header}`)) {\r\n return;\r\n }\r\n this._currPosIdx++;\r\n }\r\n this._toStringFromStart(0, MOL2Data);\r\n }\r\n\r\n _toStringFromHeader(header, numb, MOL2Data) {\r\n this._toHeaderString(header, MOL2Data);\r\n const newPosIdx = this._currPosIdx + numb;\r\n\r\n if (MOL2Data[this._currPosIdx].match(`@${header}`) && newPosIdx < MOL2Data.length) {\r\n this._currPosIdx = newPosIdx;\r\n }\r\n }\r\n\r\n _setStart(startPos, MOL2Data) {\r\n if (startPos >= MOL2Data.length) {\r\n this._currStartIdx = this._currPosIdx = MOL2Data.length - 1;\r\n } else {\r\n this._currStartIdx = this._currPosIdx = startPos;\r\n }\r\n }\r\n\r\n _probablyHaveDataToParse(MOL2Data) {\r\n return this._currPosIdx < MOL2Data.length - 2;\r\n }\r\n\r\n _findNextCompoundStart(MOL2Data) {\r\n while (this._currPosIdx < MOL2Data.length && MOL2Data[this._currPosIdx].trim() !== '@MOLECULE>') {\r\n this._currPosIdx++;\r\n }\r\n this._setStart(++this._currPosIdx, MOL2Data);\r\n return this._probablyHaveDataToParse(MOL2Data);\r\n }\r\n\r\n _parseMolecule(MOL2Data) {\r\n this._toHeaderString('MOLECULE', MOL2Data);\r\n\r\n const { metadata } = this._complex;\r\n metadata.name = MOL2Data[++this._currPosIdx];\r\n metadata.format = 'mol2';\r\n\r\n this._molecule = { _index: '', _chains: [] };\r\n this._molecule._index = this._compoundIndx + 1;\r\n this._molecules.push(this._molecule);\r\n }\r\n\r\n /* Atom format description:\r\n * atomId atomName x y z element [resSeq [resName [charge [statusBit]]]]\r\n * statusBits is the internal SYBYL status bits associated with the atom.\r\n * These should never be set by the user.\r\n * Source: http://chemyang.ccnu.edu.cn/ccb/server/AIMMS/mol2.pdf\r\n */\r\n _parseAtoms(atomsNum, MOL2Data) {\r\n this._toHeaderString('ATOM', MOL2Data);\r\n\r\n for (let i = 0; i < atomsNum; i++) {\r\n const parsedStr = splitToFields(MOL2Data[++this._currPosIdx]);\r\n\r\n if (parsedStr.length < 6) {\r\n throw new Error('MOL2 parsing error: Not enough information to create atom!');\r\n }\r\n const atomId = parseInt(parsedStr[0], 10);\r\n const atomName = parsedStr[1];\r\n\r\n const x = parseFloat(parsedStr[2]);\r\n const y = parseFloat(parsedStr[3]);\r\n const z = parseFloat(parsedStr[4]);\r\n\r\n const element = parsedStr[5].split('.')[0].toUpperCase();\r\n\r\n let charge = 0;\r\n if (parsedStr.length >= 9) {\r\n charge = parseFloat(parsedStr[8]) || 0.0;\r\n }\r\n\r\n let chain = this._chain;\r\n if (!chain) {\r\n // .mol2 may contain information about multiple molecules, but they can't be visualized\r\n // at the same time now. There is no need to create different chain IDs then.\r\n this._chain = chain = this._complex.getChain('A') || this._complex.addChain('A');\r\n this._residue = null;\r\n }\r\n if (!this._setResidue(parsedStr)) {\r\n continue;\r\n }\r\n\r\n // These fields are not listed in mol2 format. Set them default.\r\n // Atoms and het atoms doesn't differ in .mol2,\r\n // but het atoms have special residues. It can be used in next updates\r\n const het = false;\r\n const altLoc = ' ';\r\n const occupancy = 1.0;\r\n const tempFactor = 0.0;\r\n const type = Element.getByName(element);\r\n const role = Element.Role[atomName];\r\n\r\n const xyz = new THREE.Vector3(x, y, z);\r\n this._residue.addAtom(atomName, type, xyz, role, het, atomId, altLoc, occupancy, tempFactor, charge);\r\n }\r\n }\r\n\r\n _setResidue(parsedStr) {\r\n let resSeq = 1;\r\n let resName = 'UNK'; // The same meaning has '<0>' in some mol2 files\r\n\r\n if (parsedStr.length >= 7) {\r\n resSeq = parseInt(parsedStr[6], 10);\r\n }\r\n if (parsedStr.length >= 8 && parsedStr[7] !== '<0>') {\r\n resName = parsedStr[7].replace(resNumberRegex, '');\r\n }\r\n if (this.settings.now.nowater) {\r\n if (resName === 'HOH' || resName === 'WAT') {\r\n return false;\r\n }\r\n }\r\n const residue = this._residue;\r\n const chain = this._chain;\r\n if (!residue || residue.getSequence() !== resSeq) {\r\n this._residue = chain.addResidue(resName, resSeq, 'A');\r\n }\r\n return true;\r\n }\r\n\r\n /* Bond format description\r\n * bondId originAtomId targetAtomId bondType [statusBits]\r\n */\r\n _parseBonds(bondsNum, MOL2Data) {\r\n this._toHeaderString('BOND', MOL2Data);\r\n\r\n for (let i = 0; i < bondsNum; i++) {\r\n const parsedStr = splitToFields(MOL2Data[++this._currPosIdx]);\r\n\r\n if (parsedStr.length < 3) {\r\n throw new Error('MOL2 parsing error: Missing information about bonds!');\r\n }\r\n\r\n let originAtomId = parseInt(parsedStr[1], 10);\r\n let targetAtomId = parseInt(parsedStr[2], 10);\r\n const bondType = parsedStr[3];\r\n\r\n if (originAtomId > targetAtomId) {\r\n [originAtomId, targetAtomId] = [targetAtomId, originAtomId];\r\n }\r\n this._complex.addBond(\r\n originAtomId,\r\n targetAtomId,\r\n orderMap[bondType] || 0,\r\n typeMap[bondType] || Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n }\r\n\r\n _fixSerialAtoms() {\r\n const atoms = this._complex._atoms;\r\n for (let i = 0; i < atoms.length; i++) {\r\n const atom = atoms[i];\r\n this._serialAtomMap[atom.serial] = atom;\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap;\r\n const complex = this._complex;\r\n\r\n if (Object.keys(serialAtomMap).length === 0) {\r\n throw new Error('MOL2 parsing error: Missing atom information!');\r\n }\r\n\r\n const bonds = complex._bonds;\r\n for (let j = 0; j < bonds.length; j++) {\r\n const bond = bonds[j];\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _finalizeMolecules() {\r\n // Get chain from complex\r\n const chain = this._complex._chains[0];\r\n this._complex._molecules = [];\r\n\r\n // Aggregate residues from chains\r\n // (to be precise from the chain 'A')\r\n for (let i = 0; i < this._molecules.length; i++) {\r\n const currMolecule = this._molecules[i];\r\n const molResidues = chain._residues;\r\n const molecule = new Molecule(this._complex, currMolecule._name, i + 1);\r\n molecule.residues = molResidues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n _finalize() {\r\n this._complex._finalizeBonds();\r\n this._fixSerialAtoms();\r\n this._fixBondsArray();\r\n this._finalizeMolecules();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n _parseCompound(MOL2Data) {\r\n this._compoundIndx++;\r\n this._parseMolecule(MOL2Data);\r\n\r\n // Ignoring comments and everything before @MOLECULE block\r\n this._toStringFromHeader('MOLECULE', 2, MOL2Data);\r\n\r\n const parsedStr = MOL2Data[this._currPosIdx].trim().split(spacesRegex);\r\n const atomsNum = parsedStr[0];\r\n const bondsNum = parsedStr[1];\r\n\r\n this._parseAtoms(atomsNum, MOL2Data);\r\n this._parseBonds(bondsNum, MOL2Data);\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n const MOL2Data = this._parseRawStrings(this._data);\r\n do {\r\n this._parseCompound(MOL2Data);\r\n } while (this._findNextCompoundStart(MOL2Data));\r\n\r\n this._finalize();\r\n\r\n return result;\r\n }\r\n}\r\n\r\nMOL2Parser.formats = ['mol2'];\r\nMOL2Parser.extensions = ['.mol2', '.ml2', '.sy2'];\r\n\r\nexport default MOL2Parser;\r\n","import ParserList from './parsers/ParserList';\r\n\r\nimport PDBParser from './parsers/PDBParser';\r\nimport CMLParser from './parsers/CMLParser';\r\nimport MMTFParser from './parsers/MMTFParser';\r\nimport CIFParser from './parsers/CIFParser';\r\nimport CCP4Parser from './parsers/CCP4Parser';\r\nimport XYZParser from './parsers/XYZParser';\r\nimport PubChemParser from './parsers/PubChemParser';\r\nimport SDFParser from './parsers/SDFParser';\r\nimport DSN6Parser from './parsers/DSN6Parser';\r\nimport GROParser from './parsers/GROParser';\r\nimport MOL2Parser from './parsers/MOL2Parser';\r\n\r\nexport default new ParserList([\r\n // note: order might be important\r\n PDBParser,\r\n CIFParser,\r\n MMTFParser,\r\n XYZParser,\r\n CMLParser,\r\n PubChemParser,\r\n SDFParser,\r\n CCP4Parser,\r\n DSN6Parser,\r\n GROParser,\r\n MOL2Parser,\r\n]);\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available exporters.\r\n * @extends EntityList\r\n */\r\nclass ExporterList extends EntityList {\r\n /**\r\n * Create a list of exporters.\r\n * The exporters are indexed by supported data formats (`.formats` and\r\n * `.extensions` properties of a Exporter subclass).\r\n * The Exporters can be retrieved later by matching against specs (see {@link ExporterList#find}).\r\n *\r\n * @param {!Array=} someExporters A list of {@link Exporter} subclasses to\r\n * automatically register at creation time.\r\n * @see ExporterList#register\r\n */\r\n constructor(someExporters = []) {\r\n super(someExporters, ['formats']);\r\n }\r\n\r\n /**\r\n * Find a suitable exporter for data.\r\n *\r\n * @param {Object} specs Exporter specifications.\r\n * @param {string=} specs.format Supported data format.\r\n * @param {*=} specs.data Data to export.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.format) {\r\n list = this._dict.formats[specs.format.toLowerCase()] || [];\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default ExporterList;\r\n","import makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Exporter {\r\n constructor(source, options) {\r\n this._source = source;\r\n this._options = options || {};\r\n this._abort = false;\r\n }\r\n\r\n exportSync() {\r\n throw new Error('Exporting to this source is not implemented');\r\n }\r\n\r\n export() {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n try {\r\n if (this._abort) {\r\n return reject(new Error('Export aborted'));\r\n }\r\n return resolve(this.exportSync());\r\n } catch (error) {\r\n return reject(error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n }\r\n}\r\n\r\nmakeContextDependent(Exporter.prototype);\r\n","import _ from 'lodash';\r\nimport { Matrix4 } from 'three';\r\n\r\nexport default class PDBResult {\r\n constructor() {\r\n this._resultArray = [];\r\n this._currentStr = -1;\r\n this._tag = null;\r\n this._fixedNumeration = false;\r\n this._numeration = false;\r\n this._tagStrNum = 0;\r\n }\r\n\r\n getResult() {\r\n this.writeString('\\n', 81, 81);\r\n return this._resultArray.join('');\r\n }\r\n\r\n _currentStrLength() {\r\n const curStr = this._resultArray[this._currentStr];\r\n return curStr ? curStr.length : 0;\r\n }\r\n\r\n // numeration can be number or boolean\r\n // if numeration is number then just put this number to 8-10 pos in string\r\n // if numeration is boolean then increase number for all new strings\r\n newTag(tag, numeration) {\r\n if (!tag) {\r\n this._tag = null;\r\n } else {\r\n this._tag = tag;\r\n }\r\n if (!_.isUndefined(numeration)) {\r\n if (_.isNumber(numeration)) {\r\n this._tagStrNum = numeration;\r\n this._numeration = true;\r\n this._fixedNumeration = true;\r\n } else if (_.isBoolean(numeration)) {\r\n this._tagStrNum = 0;\r\n this._numeration = numeration;\r\n this._fixedNumeration = false;\r\n }\r\n } else {\r\n this._numeration = false;\r\n this._fixedNumeration = false;\r\n this._tagStrNum = 0;\r\n }\r\n }\r\n\r\n newString(tag) {\r\n this.writeString('\\n', 81, 81);\r\n this._currentStr++;\r\n this._resultArray.push('');\r\n\r\n if (tag) {\r\n this.writeString(tag, 1, 6);\r\n } else if (this._tag) {\r\n this.writeString(this._tag, 1, 6);\r\n }\r\n\r\n if (this._numeration) {\r\n if (!this._fixedNumeration) {\r\n this._tagStrNum++;\r\n }\r\n if (this._tagStrNum !== 1) {\r\n this.writeString(this._tagStrNum.toString(), 10, 8);\r\n }\r\n }\r\n }\r\n\r\n writeEntireString(string, maxStrPos, concat) {\r\n if (!maxStrPos) {\r\n maxStrPos = 81;\r\n }\r\n for (let j = 0; j < string.length; j++) {\r\n if (this._currentStrLength() === maxStrPos && j !== string.length - 1) {\r\n this.newString();\r\n if (concat) { // pretty hardcoddy\r\n this.writeString(concat.tag, concat.begin, concat.end);\r\n }\r\n }\r\n if (string[j] === '\\n') {\r\n this.newString();\r\n } else {\r\n this.writeString(string[j]);\r\n }\r\n }\r\n }\r\n\r\n writeString(string, begin, end) {\r\n let curStr = this._resultArray[this._currentStr];\r\n let str;\r\n\r\n const curStrLength = curStr ? curStr.length : 0;\r\n\r\n if (_.isUndefined(string)) {\r\n return;\r\n }\r\n\r\n if (!_.isNumber(begin)) {\r\n begin = curStrLength + 1;\r\n }\r\n\r\n if (!_.isNumber(end)) {\r\n end = curStrLength + string.length;\r\n }\r\n\r\n if (!_.isString(string)) {\r\n str = string.toString();\r\n } else {\r\n str = string;\r\n }\r\n\r\n const finish = begin < end ? end : begin;\r\n const start = begin < end ? begin : end;\r\n\r\n if (str.length > Math.abs(begin - end) + 1) {\r\n str = str.substr(0, Math.abs(begin - end + 1));\r\n }\r\n\r\n // spaces before start of new data\r\n if (start > curStrLength + 1) {\r\n this._resultArray[this._currentStr] += ' '.repeat(start - curStrLength - 1);\r\n } else if (start <= curStrLength) {\r\n const cStr = this._resultArray[this._currentStr];\r\n this._resultArray[this._currentStr] = cStr.slice(0, start - 1);\r\n }\r\n\r\n // if reverse order\r\n // reverse order of end and begin means that user wants to align text right\r\n if (end < begin) {\r\n const len = begin - end + 1;\r\n str = ' '.repeat(len - str.length) + str;\r\n }\r\n\r\n // some hardcode fix for space between string numeration and data\r\n // (see pdb file format description)\r\n if (start === 11 && this._numeration && this._tagStrNum !== 1) {\r\n str = ` ${str}`;\r\n }\r\n\r\n // append new data to string\r\n this._resultArray[this._currentStr] += str;\r\n curStr = this._resultArray[this._currentStr];\r\n\r\n if (finish > curStr.length) {\r\n this._resultArray[this._currentStr] += ' '.repeat(finish - curStr.length);\r\n }\r\n }\r\n\r\n writeBondsArray(bonds, atom) {\r\n const bondsArrays = this._getSubArrays(bonds, 4);\r\n\r\n for (let k = 0; k < bondsArrays.length; k++) {\r\n this.newString();\r\n this.writeString(atom.serial, 11, 7);\r\n\r\n for (let j = 0; j < bondsArrays[k].length; j++) {\r\n const serial = (bondsArrays[k][j]._left.serial === atom.serial)\r\n ? bondsArrays[k][j]._right.serial : bondsArrays[k][j]._left.serial;\r\n\r\n this.writeString(serial, 16 + 5 * j, 12 + 5 * j);\r\n }\r\n }\r\n }\r\n\r\n _getSubArrays(arr, subArraySize) {\r\n const subArrays = [];\r\n for (let i = 0; i < arr.length; i += subArraySize) {\r\n subArrays.push(arr.slice(i, i + subArraySize));\r\n }\r\n return subArrays;\r\n }\r\n\r\n // function for writing matrix in Remark290 and Remark350 tags\r\n // (see pdb file description)\r\n writeMatrix(matrix, matrixIndx, tag) {\r\n for (let j = 0; j < 3; j++) {\r\n this.newString();\r\n this.writeString(tag, 14, 18);\r\n this.writeString((j + 1).toString(), 19, 19);\r\n this.writeString(matrixIndx.toString(), 23, 20);\r\n for (let k = 0; k < 3; k++) {\r\n const numb = parseFloat(matrix.elements[j * 4 + k]).toFixed(6);\r\n this.writeString(numb.toString(), 33 + k * 10, 24 + k * 10);\r\n }\r\n\r\n const numb = parseFloat(matrix.elements[j * 4 + 3]).toFixed(5);\r\n this.writeString(numb.toString(), 68, 55);\r\n }\r\n }\r\n\r\n writeMatrices(matrices, string) {\r\n if (!matrices) {\r\n return;\r\n }\r\n const matrix = new Matrix4();\r\n for (let j = 0; j < matrices.length; j++) {\r\n matrix.copy(matrices[j]).transpose();\r\n this.writeMatrix(matrix, j + 1, string);\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport Complex from '../../chem/Complex';\r\nimport Exporter from './Exporter';\r\nimport PDBResult from './PDBResult';\r\nimport Assembly from '../../chem/Assembly';\r\nimport { typeByPDBHelixClass } from '../../chem/Helix';\r\n\r\nexport default class PDBExporter extends Exporter {\r\n constructor(source, options) {\r\n super(source, options);\r\n this._tags = ['HEADER', 'TITLE', 'COMPND', 'REMARK', 'HELIX', 'SHEET', 'ATOM and HETATM', 'CONECT'];\r\n this._result = null;\r\n this._tagExtractors = {\r\n HEADER: this._extractHEADER,\r\n TITLE: this._extractTITLE,\r\n 'ATOM and HETATM': this._extractATOM,\r\n CONECT: this._extractCONECT,\r\n COMPND: this._extractCOMPND,\r\n REMARK: this._extractREMARK,\r\n HELIX: this._extractHELIX,\r\n SHEET: this._extractSHEET,\r\n };\r\n this._stringForRemark350 = 'COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN\\n'\r\n + 'BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE\\n'\r\n + 'MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS\\n'\r\n + 'GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND\\n'\r\n + 'CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN.';\r\n\r\n this._stringForRemark290 = 'CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS\\n'\r\n + 'THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM\\n'\r\n + 'RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY\\n'\r\n + 'RELATED MOLECULES.';\r\n }\r\n\r\n exportSync() {\r\n const result = new PDBResult();\r\n if (!this._source) {\r\n return this._result;\r\n }\r\n\r\n for (let i = 0; i < this._tags.length; i++) {\r\n const tag = this._tags[i];\r\n const func = this._tagExtractors[tag];\r\n if (_.isFunction(func)) {\r\n func.call(this, result);\r\n }\r\n }\r\n\r\n this._result = result.getResult();\r\n\r\n return this._result;\r\n }\r\n\r\n _extractHEADER(result) {\r\n if (!this._source.metadata) {\r\n return;\r\n }\r\n const { metadata } = this._source;\r\n result.newTag('HEADER');\r\n result.newString();\r\n if (metadata.classification) {\r\n result.writeString(metadata.classification, 11, 50);\r\n }\r\n if (metadata.date) {\r\n result.writeString(metadata.date, 51, 59);\r\n }\r\n if (metadata.id) {\r\n result.writeString(metadata.id, 63, 66);\r\n }\r\n }\r\n\r\n _extractTITLE(result) {\r\n if (!this._source.metadata) {\r\n return;\r\n }\r\n const { metadata } = this._source;\r\n if (!metadata.title) {\r\n return;\r\n }\r\n result.newTag('TITLE', true);\r\n for (let i = 0; i < metadata.title.length; i++) {\r\n result.newString();\r\n result.writeString(metadata.title[i], 11, 80);\r\n }\r\n }\r\n\r\n _extractCONECT(result) {\r\n if (!this._source._atoms) {\r\n return;\r\n }\r\n\r\n const atoms = this._source._atoms;\r\n result.newTag('CONECT');\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const fixedBonds = atoms[i].bonds.filter((bond) => bond._fixed);\r\n if (fixedBonds.length !== 0) {\r\n result.writeBondsArray(fixedBonds.reverse(), atoms[i]);\r\n }\r\n }\r\n }\r\n\r\n _extractSHEET(result) {\r\n if (!this._source._sheets) {\r\n return;\r\n }\r\n\r\n result.newTag('SHEET');\r\n\r\n const sheets = this._source._sheets;\r\n for (let i = 0; i < sheets.length; i++) {\r\n if (sheets[i]._strands) {\r\n const strands = sheets[i]._strands;\r\n for (let j = 0; j < strands.length; j++) {\r\n result.newString();\r\n result.writeString(j + 1, 10, 8);\r\n result.writeString(sheets[i]._name, 14, 12);\r\n result.writeString(strands.length, 16, 15);\r\n result.writeString(strands[j].init._type._name, 18, 20);\r\n result.writeString(strands[j].init._chain._name, 22, 22);\r\n result.writeString(strands[j].init._sequence, 26, 23);\r\n result.writeString(strands[j].init._icode, 27, 27);\r\n result.writeString(strands[j].term._type._name, 29, 31);\r\n result.writeString(strands[j].init._chain._name, 33, 33);\r\n result.writeString(strands[j].term._sequence, 37, 34);\r\n result.writeString(strands[j].term._icode, 38, 38);\r\n result.writeString(strands[j].sense, 40, 39);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _extractHELIX(result) {\r\n if (!this._source._helices) {\r\n return;\r\n }\r\n\r\n result.newTag('HELIX');\r\n const helices = this._source._helices;\r\n for (let i = 0; i < helices.length; i++) {\r\n const helix = helices[i];\r\n const helixClass = _.invert(typeByPDBHelixClass);\r\n result.newString();\r\n result.writeString(helix.serial, 10, 8);\r\n result.writeString(helix.name, 14, 12);\r\n result.writeString(helix.init._type._name, 16, 18);\r\n result.writeString(helix.init._chain._name, 20, 20);\r\n result.writeString(helix.init._sequence, 25, 22);\r\n result.writeString(helix.init._icode, 26, 26);\r\n result.writeString(helix.term._type._name, 28, 30);\r\n result.writeString(helix.term._chain._name, 32, 32);\r\n result.writeString(helix.term._sequence, 37, 34);\r\n result.writeString(helix.term._icode, 38, 38);\r\n result.writeString(helixClass[helix.type], 40, 39);\r\n result.writeString(helix.comment, 41, 70);\r\n result.writeString(helix.length, 76, 72);\r\n }\r\n }\r\n\r\n _extractATOM(result) {\r\n if (!this._source._atoms) {\r\n return;\r\n }\r\n const atoms = this._source._atoms;\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const tag = atoms[i].het ? 'HETATM' : 'ATOM';\r\n result.newString(tag);\r\n const startIndx = (atoms[i].element.name.length > 1 || atoms[i].name.length > 3) ? 13 : 14;\r\n result.writeString(atoms[i].serial, 11, 7);\r\n result.writeString(atoms[i].name, startIndx, 16);\r\n result.writeString(String.fromCharCode(atoms[i].location), 17, 17);\r\n result.writeString(atoms[i].residue._type._name, 20, 18);\r\n result.writeString(atoms[i].residue._chain._name, 22, 22);\r\n result.writeString(atoms[i].residue._sequence, 26, 23);\r\n result.writeString(atoms[i].residue._icode, 27, 27);\r\n result.writeString(atoms[i].position.x.toFixed(3), 38, 31);\r\n result.writeString(atoms[i].position.y.toFixed(3), 46, 39);\r\n result.writeString(atoms[i].position.z.toFixed(3), 54, 47);\r\n result.writeString(atoms[i].occupancy.toFixed(2), 60, 55);\r\n result.writeString(atoms[i].temperature.toFixed(2), 66, 61);\r\n result.writeString(atoms[i].element.name, 78, 77);\r\n if (atoms[i].charge) {\r\n result.writeString(atoms[i].charge, 79, 80);\r\n }\r\n }\r\n }\r\n\r\n _extractCOMPND(result) {\r\n if (!this._source._molecules) {\r\n return;\r\n }\r\n const molecules = this._source._molecules;\r\n result.newTag('COMPND', true);\r\n\r\n for (let i = 0; i < molecules.length; i++) {\r\n const chains = this._getMoleculeChains(molecules[i]);\r\n result.newString();\r\n result.writeString(`MOL_ID: ${molecules[i].index};`, 11, 80);\r\n result.newString();\r\n result.writeString(`MOLECULE: ${molecules[i].name};`, 11, 80);\r\n result.newString();\r\n result.writeString('CHAIN: ', 11, 18);\r\n const chainsString = `${chains.join(', ')};`;\r\n result.writeEntireString(chainsString, 81);\r\n }\r\n }\r\n\r\n _extractREMARK(result) {\r\n this._Remark290(result);\r\n this._Remark350(result);\r\n }\r\n\r\n _Remark290(result) {\r\n if (!this._source.symmetry) {\r\n return;\r\n }\r\n\r\n if (this._source.symmetry.length !== 0) {\r\n const matrices = this._source.symmetry;\r\n result.newTag('REMARK', 290);\r\n result.newString();\r\n result.newString();\r\n result.writeEntireString(this._stringForRemark290);\r\n result.writeMatrices(matrices, 'SMTRY');\r\n result.newString();\r\n result.newString();\r\n result.writeString('REMARK: NULL', 11, 80);\r\n }\r\n }\r\n\r\n _Remark350(result) {\r\n if (!this._source.units) {\r\n return;\r\n }\r\n const { units } = this._source;\r\n let biomolIndx = 0;\r\n\r\n result.newTag('REMARK', 350);\r\n result.newString();\r\n result.newString();\r\n result.writeEntireString(this._stringForRemark350);\r\n\r\n const assemblies = units.filter((unit) => unit instanceof Assembly);\r\n\r\n for (let i = 0; i < assemblies.length; i++) {\r\n result.newString();\r\n result.newString();\r\n biomolIndx++;\r\n result.writeString(`BIOMOLECULE: ${biomolIndx}`, 11, 80);\r\n const chains = assemblies[i].chains.join(', ');\r\n result.newString();\r\n result.writeString('APPLY THE FOLLOWING TO CHAINS: ');\r\n result.writeEntireString(chains, 69, { tag: 'AND CHAINS: ', begin: 31, end: 42 });\r\n\r\n const { matrices } = assemblies[i];\r\n result.writeMatrices(matrices, 'BIOMT');\r\n }\r\n }\r\n\r\n _getMoleculeChains(molecule) {\r\n function getChainName(residue) {\r\n return residue._chain._name;\r\n }\r\n const chainNames = molecule.residues.map(getChainName);\r\n return chainNames.filter((item, pos) => chainNames.indexOf(item) === pos);\r\n }\r\n}\r\n\r\nPDBExporter.formats = ['pdb'];\r\nPDBExporter.SourceClass = Complex;\r\n","import * as THREE from 'three';\r\n\r\nconst FBX_POS_SIZE = 3;\r\nconst FBX_NORM_SIZE = 3;\r\nconst FBX_COL_SIZE = 4;\r\n\r\nfunction copyFbxPoint3(src, srcIdx, dst, dstIdx) {\r\n dst[dstIdx] = src[srcIdx];\r\n dst[dstIdx + 1] = src[srcIdx + 1];\r\n dst[dstIdx + 2] = src[srcIdx + 2];\r\n}\r\n\r\nfunction copyFbxPoint4(src, srcIdx, dst, dstIdx, value) {\r\n dst[dstIdx] = src[srcIdx];\r\n dst[dstIdx + 1] = src[srcIdx + 1];\r\n dst[dstIdx + 2] = src[srcIdx + 2];\r\n dst[dstIdx + 3] = value;\r\n}\r\n\r\nconst vector4 = new THREE.Vector4();\r\nfunction copyTransformedPoint3(src, srcIdx, dst, dstIdx, opts) {\r\n vector4.set(src[srcIdx], src[srcIdx + 1], src[srcIdx + 2], opts.w);\r\n vector4.applyMatrix4(opts.matrix);\r\n dst[dstIdx] = vector4.x;\r\n dst[dstIdx + 1] = vector4.y;\r\n dst[dstIdx + 2] = vector4.z;\r\n}\r\n\r\nfunction setSubArray(src, dst, count, copyFunctor, functorOpts) {\r\n if ((dst.array.length - dst.start) / dst.stride < count\r\n || (src.array.length - src.start) / src.stride < count) {\r\n return; // we've got no space\r\n }\r\n if (src.stride === dst.stride) { // stride is the same\r\n dst.array.set(src.array, dst.start);\r\n } else {\r\n let idx = dst.start;\r\n let arridx = src.start;\r\n for (let i = 0; i < count; ++i, idx += dst.stride, arridx += src.stride) {\r\n copyFunctor(src.array, arridx, dst.array, idx, functorOpts);\r\n }\r\n }\r\n}\r\n\r\nexport default class FBXModel {\r\n constructor() {\r\n this.positions = null;\r\n this.normals = null;\r\n this.colors = null;\r\n this.indices = null;\r\n this.lastPos = 0;\r\n this.lastNorm = 0;\r\n this.lastCol = 0;\r\n this.lastIdx = 0;\r\n }\r\n\r\n init(vertsCount, indsCount) {\r\n this.positions = new Float32Array(vertsCount * FBX_POS_SIZE);\r\n this.normals = new Float32Array(vertsCount * FBX_NORM_SIZE);\r\n this.colors = new Float32Array(vertsCount * FBX_COL_SIZE);\r\n this.indices = new Int32Array(indsCount);\r\n }\r\n\r\n setPositions(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.positions,\r\n start: this.lastPos,\r\n stride: FBX_POS_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint3);\r\n this.lastPos += count * FBX_POS_SIZE;\r\n }\r\n\r\n setTransformedPositions(array, start, count, stride, matrix) {\r\n let idx = this.lastPos;\r\n let arrIdx = start;\r\n const opts = { matrix, w: 1 };\r\n for (let i = 0; i < count; ++i, arrIdx += stride, idx += FBX_POS_SIZE) {\r\n copyTransformedPoint3(array, arrIdx, this.positions, idx, opts);\r\n }\r\n this.lastPos += count * FBX_POS_SIZE;\r\n }\r\n\r\n setNormals(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.normals,\r\n start: this.lastNorm,\r\n stride: FBX_NORM_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint3);\r\n this.lastNorm += count * FBX_NORM_SIZE;\r\n }\r\n\r\n setTransformedNormals(array, start, count, stride, matrix) {\r\n let idx = this.lastNorm;\r\n let arrIdx = start;\r\n const opts = { matrix, w: 0 };\r\n for (let i = 0; i < count; ++i, arrIdx += stride, idx += FBX_NORM_SIZE) {\r\n copyTransformedPoint3(array, arrIdx, this.normals, idx, opts);\r\n }\r\n this.lastNorm += count * FBX_NORM_SIZE;\r\n }\r\n\r\n setColors(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.colors,\r\n start: this.lastCol,\r\n stride: FBX_COL_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint4, 1);\r\n this.lastCol += count * FBX_COL_SIZE;\r\n }\r\n\r\n setIndices(array, start, count) {\r\n this.indices.set(array, this.lastIdx);\r\n this.lastIdx += count;\r\n }\r\n\r\n setShiftedIndices(array, count, shift) {\r\n const shifted = array.map((x) => x + shift);\r\n this.setIndices(shifted, 0, count);\r\n }\r\n\r\n getVerticesNumber() {\r\n return this.lastPos / FBX_POS_SIZE;\r\n }\r\n\r\n addInstance(matrix, geo) {\r\n // add indices at first to take old number of vertices for shift\r\n const currentCount = this.getVerticesNumber();\r\n this.setShiftedIndices(geo.indices, geo.indices.length, currentCount);\r\n // simply write vertices at empty space\r\n const size = geo.itemSize;\r\n this.setTransformedPositions(geo.positions, 0, geo.vertsCount, size.position, matrix);\r\n this.setTransformedNormals(geo.normals, 0, geo.vertsCount, size.normal, matrix);\r\n this.setColors(geo.colors, 0, geo.vertsCount, size.color);\r\n }\r\n}\r\n","/** Base class for fbx geometry contains simply organized attributes: positions+normals+colors, indices. */\r\nexport default class FBXGeometry {\r\n /**\r\n * Create a base geo with necessary members.\r\n */\r\n constructor() {\r\n this.positions = null;\r\n this.normals = null;\r\n this.colors = null;\r\n this.indices = null;\r\n this.vertsCount = 0;\r\n this.itemSize = null;\r\n }\r\n\r\n /**\r\n * Initialize base geo storing items info from attributes.\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n */\r\n init(geo, _info) {\r\n const { attributes } = geo;\r\n // save item size\r\n this.itemSize = {\r\n position: attributes.position.itemSize,\r\n normal: attributes.normal.itemSize,\r\n color: attributes.color.itemSize,\r\n };\r\n }\r\n}\r\n","import FBXGeometry from './FBXGeometry';\r\n\r\n/**\r\n * Fbx geometry, that copies positions+normals, indexes and creates colors filled with defined value.\r\n * @extends FBXGeometry\r\n */\r\nexport default class FBX1CGeometry extends FBXGeometry {\r\n /**\r\n * Initialize geo storing positions, normals, indices and create colors.\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n */\r\n init(geo, _info) {\r\n super.init(geo, _info);\r\n const {\r\n attributes: {\r\n position,\r\n normal,\r\n },\r\n index,\r\n } = geo;\r\n // copy vertices attributes\r\n this.vertsCount = position.count;\r\n this.positions = position.array;\r\n this.normals = normal.array;\r\n // create color array\r\n this.colors = new Float32Array(this.vertsCount * this.itemSize.color);\r\n // indices\r\n this.indices = index.array;\r\n }\r\n\r\n /**\r\n * Set defined color for all items in color attribute\r\n * @param {Object} color - THREE.Color.\r\n */\r\n setColors(color) {\r\n let offset = 0;\r\n for (let i = 0, l = this.colors.length, cl = this.itemSize.color; i < l; i += cl) {\r\n this.colors[offset++] = color.r;\r\n this.colors[offset++] = color.g;\r\n this.colors[offset++] = color.b;\r\n }\r\n }\r\n}\r\n","import FBXGeometry from './FBXGeometry';\r\n\r\n/**\r\n * Fbx geometry, that copies positions+normals, indexes from cylinder geometry and creates colors filled with two\r\n * defined values.\r\n * @extends FBXGeometry\r\n */\r\nexport default class FBX2CCylinder extends FBXGeometry {\r\n constructor() {\r\n super();\r\n this._cutRawStart = 0;\r\n this._cutRawEnd = 0;\r\n this._facesPerSlice = 0;\r\n }\r\n\r\n /**\r\n * Initialize geo by creating new attributes, because we extend number of vertices to make cylinder two-colored.\r\n * Indices remain the same. We process open- end close-ended cylinders and consider cylinders od 2 segments\r\n * in height ONLY.\r\n * NOTE: cylinder consists of 2 height segments and stores parts in the order: tube, topCap, bottomCap\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n * @param {Object} info - information needed for geo extend\r\n */\r\n init(geo, info) {\r\n super.init(geo, info);\r\n const {\r\n attributes: {\r\n position,\r\n },\r\n index,\r\n } = geo;\r\n // extend vertices arrays\r\n this.vertsCount = position.count + info.addPerCylinder;\r\n this._facesPerSlice = info.addPerCylinder;\r\n this.positions = new Float32Array(this.vertsCount * position.itemSize);\r\n this.normals = new Float32Array(this.vertsCount * this.itemSize.normal);\r\n this.colors = new Float32Array(this.vertsCount * this.itemSize.color);\r\n this._extendVertices(geo, info);\r\n // number of indices stays the same\r\n this.indices = new Uint32Array(index.count);\r\n this._extendIndices(geo, info);\r\n }\r\n\r\n /** Extend vertex attributes to have one more slice to make sharp middle startColor-endColor line. */\r\n _extendVertices(geo, info) {\r\n const { position } = geo.attributes;\r\n const { normal } = geo.attributes;\r\n const geoParams = geo.getGeoParams();\r\n const cutRaw = 1; // we expect cylinders of 2 segments in height => so half segment = 1\r\n this._cutRawStart = cutRaw * geoParams.radialSegments;\r\n this._cutRawEnd = this._cutRawStart + info.addPerCylinder;\r\n { // write first half of cylinder\r\n let temp = position.array.slice(0, this._cutRawEnd * position.itemSize);\r\n this.positions.set(temp, 0);\r\n temp = normal.array.slice(0, this._cutRawEnd * normal.itemSize);\r\n this.normals.set(temp, 0);\r\n }\r\n { // write second part of cylinder\r\n let temp = position.array.slice(this._cutRawStart * position.itemSize, position.array.length);\r\n this.positions.set(temp, this._cutRawEnd * position.itemSize);\r\n temp = normal.array.slice(this._cutRawStart * normal.itemSize, normal.array.length);\r\n this.normals.set(temp, this._cutRawEnd * normal.itemSize);\r\n }\r\n }\r\n\r\n /** Shift values of second part (+caps) indices by newly added vertices count. Number of faces remains the same. */\r\n _extendIndices(geo, info) {\r\n const { index } = geo;\r\n const indicesPerQuad = 6; // quad = 2 triangles => 6 indices\r\n const startToShift = info.addPerCylinder * indicesPerQuad;\r\n const shift = info.addPerCylinder;\r\n let shifted = index.array.slice(startToShift, index.count);\r\n shifted = shifted.map((x) => x + shift); // shift only the endings\r\n this.indices.set(index.array, 0);\r\n this.indices.set(shifted, startToShift);\r\n }\r\n\r\n /**\r\n * Set defined colors: (first part + bottom cap), (second part + top cap)\r\n * @param {number} start - start color index\r\n * @param {number} end - start color index\r\n * @param {array} array - array of colors\r\n * @param {array} color - color value components\r\n */\r\n _setColorRange(start, end, array, color) {\r\n const colorSize = color.length;\r\n for (let i = start; i < end; i += colorSize) {\r\n array.set(color, i);\r\n }\r\n }\r\n\r\n /**\r\n * Set defined colors: (first part + bottom cap), (second part + top cap)\r\n * @param {Object} color1 - THREE.Color.\r\n * @param {Object} color2 - THREE.Color.\r\n */\r\n setColors(color1, color2) {\r\n const colorSize = this.itemSize.color;\r\n const part1End = this._cutRawEnd * colorSize;\r\n const part2End = part1End * 2;\r\n this._setColorRange(0, part1End, this.colors, color1.toArray());\r\n this._setColorRange(part1End, part2End, this.colors, color2.toArray());\r\n if (part2End < this.colors.length) { // cylinder has caps, lets paint them\r\n const capSize = (this._facesPerSlice + 1) * colorSize;\r\n const cap1End = part2End + capSize;\r\n this._setColorRange(part2End, cap1End, this.colors, color2.toArray());\r\n const cap2End = cap1End + capSize; // should be equal to this.colors.length;\r\n this._setColorRange(cap1End, cap2End, this.colors, color1.toArray());\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\n\r\nimport utils from '../../../utils';\r\nimport gfxutils from '../../../gfx/gfxutils';\r\nimport logger from '../../../utils/logger';\r\n\r\nimport FBXModel from './FBXModel';\r\nimport ThickLineMesh from '../../../gfx/meshes/ThickLineMesh';\r\nimport ZSpriteMesh from '../../../gfx/meshes/ZSpriteMesh';\r\nimport InstancedSpheresGeometry from '../../../gfx/geometries/InstancedSpheresGeometry';\r\nimport Instanced2CCylindersGeometry from '../../../gfx/geometries/Instanced2CCylindersGeometry';\r\nimport FBX1CGeometry from './FBX1CGeometry';\r\nimport FBX2CCylinder from './FBX2CCylinder';\r\n\r\nexport default class FBXInfoExtractor {\r\n constructor() {\r\n this._materials = [];\r\n this._models = [];\r\n }\r\n\r\n process(data) {\r\n this._extractModelsAndMaterials(data);\r\n const models = this._flattenModels();\r\n\r\n return {\r\n name: data.name,\r\n models,\r\n materials: this._materials,\r\n };\r\n }\r\n\r\n /**\r\n * Extract fbx object information from ComplexVisual\r\n * @param {object} data - complexVisual to get geometry info from\r\n */\r\n _extractModelsAndMaterials(data) {\r\n const layersOfInterest = new THREE.Layers();\r\n layersOfInterest.set(gfxutils.LAYERS.DEFAULT);\r\n layersOfInterest.enable(gfxutils.LAYERS.TRANSPARENT);\r\n data.traverse((object) => {\r\n if (object instanceof THREE.Mesh && object.layers.test(layersOfInterest) && this.checkExportAbility(object)) {\r\n if (object.geometry.type === 'InstancedBufferGeometry') {\r\n this._collectInstancedGeoInfo(object);\r\n } else {\r\n this._collectGeoInfo(object);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Reworking indices buffer, see https://banexdevblog.wordpress.com/2014/06/23/a-quick-tutorial-about-the-fbx-ascii-format/\r\n * basically, every triangle in Miew has been represented hat way (e.g.) : 0,1,7, but we must (for FBX) rework that\r\n * into: 0,1,-8.\r\n * @param {array} indices - belongs to [0, maxVertIndex]\r\n */\r\n _reworkIndices(indices) {\r\n const faceSize = 3;\r\n for (let i = faceSize - 1; i < indices.length; i += faceSize) {\r\n indices[i] *= -1;\r\n indices[i]--;\r\n }\r\n }\r\n\r\n /**\r\n * Combine geometry from several models having the same material into one Model and finally prepare indices\r\n * @returns {array} models, combined by material id\r\n */\r\n _flattenModels() {\r\n let overallVertsCount = 0;\r\n function shift(x) {\r\n return x + overallVertsCount;\r\n }\r\n const combined = [];\r\n // flatten models geometry\r\n for (let i = 0, n = this._models.length; i < n; i++) {\r\n const models = this._models[i];\r\n let indices = [];\r\n let positions = [];\r\n let normals = [];\r\n let colors = [];\r\n // reorganize every attributes as array of arrays\r\n overallVertsCount = 0;\r\n for (let j = 0; j < models.length; j++) {\r\n const m = models[j];\r\n indices.push(m.indices.map(shift));\r\n overallVertsCount += m.getVerticesNumber();\r\n positions.push(m.positions);\r\n normals.push(m.normals);\r\n colors.push(m.colors);\r\n }\r\n // join all subarrays into one\r\n indices = utils.mergeTypedArraysUnsafe(indices);\r\n this._reworkIndices(indices);\r\n positions = utils.mergeTypedArraysUnsafe(positions);\r\n normals = utils.mergeTypedArraysUnsafe(normals);\r\n colors = utils.mergeTypedArraysUnsafe(colors);\r\n combined.push({\r\n indices,\r\n positions,\r\n normals,\r\n colors,\r\n verticesCount: overallVertsCount,\r\n });\r\n }\r\n return combined;\r\n }\r\n\r\n /**\r\n * Check ability to export the kind of mesh.\r\n * @param {object} mesh - given mesh to check\r\n * @returns {boolean} result of check\r\n */\r\n checkExportAbility(mesh) {\r\n // check mesh on not being empty\r\n if (mesh.geometry.attributes.position.count === 0) {\r\n return false;\r\n }\r\n // check type of mesh\r\n // if (mesh.geometry.isInstancedBufferGeometry && settings.now.zSprites) {\r\n if (mesh instanceof ZSpriteMesh) {\r\n logger.warn('Currently we cannot export \\'sprites\\' modes, like BS, WV, LC. Please turn of settings \\'zSprites\\' and try again');\r\n return false;\r\n }\r\n if (mesh instanceof ThickLineMesh) {\r\n logger.warn('Currently we cannot export Lines mode');\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Save geometry info from common mesh, like Surface or Cartoon\r\n */\r\n _collectGeoInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n normal,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const vertCount = position.count;\r\n model.init(vertCount, index.count);\r\n if (matrix.isIdentity()) {\r\n model.setPositions(position.array, 0, vertCount, position.itemSize);\r\n model.setNormals(normal.array, 0, vertCount, normal.itemSize);\r\n } else {\r\n model.setTransformedPositions(position.array, 0, vertCount, position.itemSize, matrix);\r\n model.setTransformedNormals(normal.array, 0, vertCount, normal.itemSize, matrix);\r\n }\r\n model.setColors(color.array, 0, vertCount, color.itemSize);\r\n model.setIndices(index.array, 0, index.count);\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Collect instanced spheres geometry and materials.\r\n * @param {object} mesh - mesh with instanced spheres info\r\n */\r\n _collectSpheresInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const instCount = mesh.geometry.instanceCount;\r\n const vertCount = position.count;\r\n const indsCount = index.count;\r\n model.init(instCount * vertCount, instCount * indsCount);\r\n const geo = new FBX1CGeometry();\r\n geo.init(mesh.geometry);\r\n const instMatrix = new THREE.Matrix4();\r\n const objMatrix = new THREE.Matrix4();\r\n const sphereColor = new THREE.Color();\r\n for (let instanceIndex = 0; instanceIndex < instCount; ++instanceIndex) {\r\n // update colors in geometry\r\n const colorIdx = instanceIndex * color.itemSize;\r\n sphereColor.fromArray(color.array, colorIdx);\r\n geo.setColors(sphereColor);\r\n // add instance to the model\r\n this._getSphereInstanceMatrix(mesh.geometry, instanceIndex, instMatrix);\r\n objMatrix.multiplyMatrices(matrix, instMatrix);\r\n model.addInstance(objMatrix, geo);\r\n }\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Getting all instanced cylinders from given mesh.\r\n * Divide cylinder (add additional vertexes) for prettiness therefore algorithm is a bit complicated\r\n * @param {object} mesh - given mesh with instanced cylinders\r\n */\r\n _collectCylindersInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n color2,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const instCount = mesh.geometry.instanceCount;\r\n const oneCCylinder = new FBX1CGeometry();\r\n oneCCylinder.init(mesh.geometry);\r\n const splittingInfo = this._gatherCylindersColoringInfo(mesh.geometry);\r\n let twoCCylinder = null;\r\n if (splittingInfo.needToSplit > 0) {\r\n twoCCylinder = new FBX2CCylinder();\r\n twoCCylinder.init(mesh.geometry, splittingInfo);\r\n }\r\n const additionalVertsCount = splittingInfo.addPerCylinder * splittingInfo.needToSplit;\r\n const vertCount = position.count;\r\n const indsCount = index.count;\r\n model.init(instCount * vertCount + additionalVertsCount, instCount * indsCount);\r\n const instMatrix = new THREE.Matrix4();\r\n const objMatrix = new THREE.Matrix4();\r\n const colorStart = new THREE.Color();\r\n const colorEnd = new THREE.Color();\r\n let geo = {};\r\n for (let instanceIndex = 0; instanceIndex < instCount; ++instanceIndex) {\r\n // update colors in geometry\r\n const colorIdx = instanceIndex * color.itemSize;\r\n if (splittingInfo.is2Colored[instanceIndex]) {\r\n // .color2 contains starting color, and .color contains starting color (see uber.frag ATTR_COLOR2)\r\n colorStart.fromArray(color2.array, colorIdx);\r\n colorEnd.fromArray(color.array, colorIdx);\r\n if (twoCCylinder) {\r\n twoCCylinder.setColors(colorStart, colorEnd);\r\n geo = twoCCylinder;\r\n }\r\n } else {\r\n // has one color per cylinder\r\n colorStart.fromArray(color.array, colorIdx);\r\n oneCCylinder.setColors(colorStart);\r\n geo = oneCCylinder;\r\n }\r\n // add instance to the model\r\n this._getCylinderInstanceMatrix(mesh.geometry, instanceIndex, instMatrix);\r\n objMatrix.multiplyMatrices(matrix, instMatrix);\r\n model.addInstance(objMatrix, geo);\r\n }\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Adding model to pool of models or extend existing ones\r\n * @param {object} model - model to add\r\n * @param {object} material - material to add\r\n */\r\n _addToPool(model, material) {\r\n const materialIdx = this._checkExistingMaterial(material);\r\n if (materialIdx < 0) { // new model-material pair\r\n this._models.push([model]);\r\n this._materials.push(material);\r\n } else { // add model to existing model-material pair\r\n const models = this._models[materialIdx];\r\n models.push(model);\r\n }\r\n }\r\n\r\n /**\r\n * Checking if given material already was registered in materials pool (no need to create new one)\r\n * @param {object} material - given material\r\n * @returns {number} number of model-material pair\r\n */\r\n _checkExistingMaterial(material) {\r\n return _.findIndex(this._materials, (m) => _.isEqual(m, material));\r\n }\r\n\r\n _gatherCylindersColoringInfo(geo) {\r\n const instCount = geo.instanceCount;\r\n const color1 = geo.attributes.color.array;\r\n const color2 = geo.attributes.color2.array;\r\n const stride = geo.attributes.color.itemSize;\r\n const is2Colored = new Array(instCount);\r\n // analyze color instance attributes\r\n let needToSplit = 0;\r\n let colIdx = 0;\r\n for (let i = 0; i < instCount; i++, colIdx += stride) {\r\n const differs = (Math.abs(color1[colIdx] - color2[colIdx]) > 0.0000001) // compare ending colors\r\n || (Math.abs(color1[colIdx + 1] - color2[colIdx + 1]) > 0.0000001)\r\n || (Math.abs(color1[colIdx + 2] - color2[colIdx + 2]) > 0.0000001);\r\n is2Colored[i] = differs;\r\n needToSplit += differs; // count number of 2-colored cylinders\r\n }\r\n // calc number of vertices to add into 2-colored\r\n const geoParams = geo.getGeoParams();\r\n const addPerCylinder = geoParams.radialSegments;\r\n return { is2Colored, needToSplit, addPerCylinder };\r\n }\r\n\r\n /**\r\n * Collect instanced models and materials.\r\n * @param {object} mesh - given mesh with instanced something (spheres or cylinders)\r\n */\r\n _collectInstancedGeoInfo(mesh) {\r\n if (mesh.geometry instanceof InstancedSpheresGeometry) {\r\n this._collectSpheresInfo(mesh);\r\n } else if (mesh.geometry instanceof Instanced2CCylindersGeometry) {\r\n this._collectCylindersInfo(mesh);\r\n }\r\n }\r\n\r\n /**\r\n * Collect Material info from given mesh.\r\n * @param {object} mesh - given mesh with material info\r\n * @returns {object} material\r\n */\r\n _collectMaterialInfo(mesh) {\r\n const { uberOptions } = mesh.material;\r\n return ({\r\n diffuse: uberOptions.diffuse.toArray(),\r\n opacity: uberOptions.opacity,\r\n shininess: uberOptions.shininess,\r\n specular: uberOptions.specular.toArray(),\r\n });\r\n }\r\n\r\n _getCylinderInstanceMatrix(geo, instIdx, matrix) {\r\n const matVector1 = geo.attributes.matVector1.array;\r\n const matVector2 = geo.attributes.matVector2.array;\r\n const matVector3 = geo.attributes.matVector3.array;\r\n const idxOffset = instIdx * 4; // used 4 because offset arrays are stored in quads\r\n matrix.set(\r\n matVector1[idxOffset],\r\n matVector1[idxOffset + 1],\r\n matVector1[idxOffset + 2],\r\n matVector1[idxOffset + 3],\r\n matVector2[idxOffset],\r\n matVector2[idxOffset + 1],\r\n matVector2[idxOffset + 2],\r\n matVector2[idxOffset + 3],\r\n matVector3[idxOffset],\r\n matVector3[idxOffset + 1],\r\n matVector3[idxOffset + 2],\r\n matVector3[idxOffset + 3],\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n );\r\n }\r\n\r\n _getSphereInstanceMatrix(geo, instIdx, matrix) {\r\n const { offset } = geo.attributes;\r\n const idx = instIdx * offset.itemSize;\r\n const x = offset.array[idx];\r\n const y = offset.array[idx + 1];\r\n const z = offset.array[idx + 2];\r\n const scale = offset.array[idx + 3];\r\n matrix.set(\r\n scale,\r\n 0,\r\n 0,\r\n x,\r\n 0,\r\n scale,\r\n 0,\r\n y,\r\n 0,\r\n 0,\r\n scale,\r\n z,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n );\r\n }\r\n}\r\n","// Forming default definitions block\r\nconst defaultDefinitions = `\r\nDefinitions: {\r\n Version: 100\r\n Count: 3\r\n ObjectType: \"Model\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Geometry\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Material\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Pose\" {\r\n Count: 1\r\n }\r\n ObjectType: \"GlobalSettings\" {\r\n Count: 1\r\n }\r\n} `;\r\n\r\n// Default model properties\r\nconst defaultProperties = `Properties60: {\r\n Property: \"QuaternionInterpolate\", \"bool\", \"\",0\r\n Property: \"Visibility\", \"Visibility\", \"A\",1\r\n Property: \"Lcl Translation\", \"Lcl Translation\", \"A\",0.000000000000000,0.000000000000000,-1789.238037109375000\r\n Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A\",0.000009334667643,-0.000000000000000,0.000000000000000\r\n Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A\",1.000000000000000,1.000000000000000,1.000000000000000\r\n Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\r\n Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\r\n Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationActive\", \"bool\", \"\",0\r\n Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationMinX\", \"bool\", \"\",0\r\n Property: \"TranslationMinY\", \"bool\", \"\",0\r\n Property: \"TranslationMinZ\", \"bool\", \"\",0\r\n Property: \"TranslationMaxX\", \"bool\", \"\",0\r\n Property: \"TranslationMaxY\", \"bool\", \"\",0\r\n Property: \"TranslationMaxZ\", \"bool\", \"\",0\r\n Property: \"RotationOrder\", \"enum\", \"\",0\r\n Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\r\n Property: \"AxisLen\", \"double\", \"\",10\r\n Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationActive\", \"bool\", \"\",0\r\n Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationMinX\", \"bool\", \"\",0\r\n Property: \"RotationMinY\", \"bool\", \"\",0\r\n Property: \"RotationMinZ\", \"bool\", \"\",0\r\n Property: \"RotationMaxX\", \"bool\", \"\",0\r\n Property: \"RotationMaxY\", \"bool\", \"\",0\r\n Property: \"RotationMaxZ\", \"bool\", \"\",0\r\n Property: \"RotationStiffnessX\", \"double\", \"\",0\r\n Property: \"RotationStiffnessY\", \"double\", \"\",0\r\n Property: \"RotationStiffnessZ\", \"double\", \"\",0\r\n Property: \"MinDampRangeX\", \"double\", \"\",0\r\n Property: \"MinDampRangeY\", \"double\", \"\",0\r\n Property: \"MinDampRangeZ\", \"double\", \"\",0\r\n Property: \"MaxDampRangeX\", \"double\", \"\",0\r\n Property: \"MaxDampRangeY\", \"double\", \"\",0\r\n Property: \"MaxDampRangeZ\", \"double\", \"\",0\r\n Property: \"MinDampStrengthX\", \"double\", \"\",0\r\n Property: \"MinDampStrengthY\", \"double\", \"\",0\r\n Property: \"MinDampStrengthZ\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthX\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthY\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthZ\", \"double\", \"\",0\r\n Property: \"PreferedAngleX\", \"double\", \"\",0\r\n Property: \"PreferedAngleY\", \"double\", \"\",0\r\n Property: \"PreferedAngleZ\", \"double\", \"\",0\r\n Property: \"InheritType\", \"enum\", \"\",0\r\n Property: \"ScalingActive\", \"bool\", \"\",0\r\n Property: \"ScalingMin\", \"Vector3D\", \"\",1,1,1\r\n Property: \"ScalingMax\", \"Vector3D\", \"\",1,1,1\r\n Property: \"ScalingMinX\", \"bool\", \"\",0\r\n Property: \"ScalingMinY\", \"bool\", \"\",0\r\n Property: \"ScalingMinZ\", \"bool\", \"\",0\r\n Property: \"ScalingMaxX\", \"bool\", \"\",0\r\n Property: \"ScalingMaxY\", \"bool\", \"\",0\r\n Property: \"ScalingMaxZ\", \"bool\", \"\",0\r\n Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\r\n Property: \"LookAtProperty\", \"object\", \"\"\r\n Property: \"UpVectorProperty\", \"object\", \"\"\r\n Property: \"Show\", \"bool\", \"\",1\r\n Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\r\n Property: \"DefaultAttributeIndex\", \"int\", \"\",0\r\n Property: \"Color\", \"Color\", \"A+\",0,0,0\r\n Property: \"Size\", \"double\", \"\",100\r\n Property: \"Look\", \"enum\", \"\",1\r\n }`;\r\n\r\n// Default materials layer\r\nconst defaultMaterialLayer = `\r\n LayerElementMaterial: 0 {\r\n Version: 101\r\n Name: \"\"\r\n MappingInformationType: \"AllSame\"\r\n ReferenceInformationType: \"Direct\"\r\n Materials: 0\r\n }`;\r\n\r\n// Default layers block\r\nconst defaultLayerBlock = `\r\n Layer: 0 {\r\n Version: 100\r\n LayerElement: {\r\n Type: \"LayerElementNormal\"\r\n TypedIndex: 0\r\n }\r\n LayerElement: {\r\n Type: \"LayerElementColor\"\r\n TypedIndex: 0\r\n }\r\n LayerElement: {\r\n Type: \"LayerElementMaterial\"\r\n TypedIndex: 0\r\n }\r\n }`;\r\n\r\n/**\r\n * globalSettings info in output file.\r\n */\r\nconst globalSettings = `GlobalSettings: {\r\n Version: 1000\r\n Properties60: {\r\n Property: \"UpAxis\", \"int\", \"\",1\r\n Property: \"UpAxisSign\", \"int\", \"\",1\r\n Property: \"FrontAxis\", \"int\", \"\",2\r\n Property: \"FrontAxisSign\", \"int\", \"\",1\r\n Property: \"CoordAxis\", \"int\", \"\",0\r\n Property: \"CoordAxisSign\", \"int\", \"\",1\r\n Property: \"UnitScaleFactor\", \"double\", \"\",1\r\n }\r\n }`;\r\n\r\nexport default class FBXResult {\r\n constructor() {\r\n this._resultArray = [];\r\n this._info = null;\r\n }\r\n\r\n getResult(info) {\r\n this._info = info;\r\n this._resultArray.push(this._writeHeader());\r\n this._resultArray.push(this._writeDefinitions());\r\n this._resultArray.push(this._writeObjects(info.models, info.materials));\r\n this._resultArray.push(this._writeRelations());\r\n this._resultArray.push(this._writeConnections()); // connections between models and materials)\r\n this._info = null;\r\n return this._resultArray.join('');\r\n }\r\n\r\n /**\r\n * Add FBXHeader info to output file.\r\n * Some fields are really confusing, but it seems that all listed fields are very informative\r\n */\r\n _writeHeader() {\r\n const FBXHeaderVersion = 1003; // 1003 is some number which appears to present in many 6.1 ASCII files\r\n const FBXVersion = 6100; // Mandatory and only supported version\r\n const date = new Date();\r\n const timeStampVersion = 1000;\r\n const creator = `Miew FBX Exporter v${this._info.version}`; // Supposed to be an engine\r\n\r\n return `; FBX 6.1.0 project file\r\n; Created by ${creator} Copyright (c) 2015-2026 EPAM Systems, Inc.\r\n; For support please contact miew@epam.com\r\n; ----------------------------------------------------\r\n\r\nFBXHeaderExtension: {\r\n FBXHeaderVersion: ${FBXHeaderVersion}\r\n FBXVersion: ${FBXVersion}\r\n CreationTimeStamp: {\r\n Version: ${timeStampVersion}\r\n Year: ${date.getFullYear()}\r\n Month: ${date.getMonth() + 1}\r\n Day: ${date.getDate()}\r\n Hour: ${date.getHours()}\r\n Minute: ${date.getMinutes()}\r\n Second: ${date.getSeconds()}\r\n Millisecond: ${date.getMilliseconds()}\r\n }\r\n Creator: \"${creator}\"\r\n OtherFlags: {\r\n FlagPLE: 0\r\n }\r\n}\r\nCreationTime: \"${date}\"\r\nCreator: \"${creator}\"\r\n`;\r\n }\r\n\r\n /**\r\n * Add Definitions info to output file.\r\n * Not exactly sure if this section is template section (as it is in 7.4+) or it should every time be like this\r\n */\r\n _writeDefinitions() {\r\n return `\r\n; Object definitions\r\n;------------------------------------------------------------------\r\n\r\n${defaultDefinitions}\r\n`;\r\n }\r\n\r\n /**\r\n * Adding gathered information about Models to resulting string.\r\n * Reminder - there may be more then 1 model in scene, but we must place materials after ALL models.\r\n * @returns {string} string containing all models (vertices, indices, colors, normals etc)\r\n */\r\n _models() {\r\n const modelVersion = 232;\r\n let allModels = '';\r\n const { models } = this._info;\r\n for (let i = 0; i < models.length; ++i) {\r\n const model = models[i];\r\n const vertCount = model.verticesCount;\r\n allModels += `\r\n Model: \"Model::${this._info.name}_${i}\", \"Mesh\" {\r\n Version: ${modelVersion}\r\n ${defaultProperties}\r\n ${this._verticesIndices(model.positions, model.indices)}\r\n ${this._normalLayer(model.normals)}\r\n ${this._colorLayer(model.colors, vertCount)}\r\n ${defaultMaterialLayer}\r\n ${defaultLayerBlock}\r\n }`;\r\n }\r\n return allModels;\r\n }\r\n\r\n /**\r\n * Add Material info to result\r\n */\r\n _materials() {\r\n const materialVersion = 102;\r\n let allMaterials = '';\r\n const { materials } = this._info;\r\n for (let i = 0; i < materials.length; ++i) {\r\n const material = materials[i];\r\n allMaterials += `\r\n Material: \"Material::${this._info.name}_${i}_default\", \"\" {\r\n Version: ${materialVersion}\r\n ShadingModel: \"lambert\"\r\n MultiLayer: 0\r\n ${this._materialProperties(material)}\r\n }`;\r\n }\r\n return allMaterials;\r\n }\r\n\r\n /**\r\n * Add Objects info to output file.\r\n */\r\n _writeObjects() {\r\n return `\r\n; Object properties\r\n;------------------------------------------------------------------\r\n\r\nObjects: {\r\n ${this._models()}\r\n ${this._materials()}\r\n ${globalSettings}\r\n}\r\n`;\r\n }\r\n\r\n /**\r\n * Add Relations info to output file.\r\n */\r\n _writeRelations() {\r\n let modelsList = '';\r\n for (let i = 0; i < this._info.models.length; ++i) {\r\n modelsList += `\r\n Model: \"Model::${this._info.name}_${i}\", \"Mesh\" {\r\n }`;\r\n }\r\n let materialList = '';\r\n for (let i = 0; i < this._info.materials.length; ++i) {\r\n materialList += `\r\n Material: \"Material::${this._info.name}_${i}_default\", \"\" {\r\n }`;\r\n }\r\n\r\n return `\r\n; Object relations\r\n;------------------------------------------------------------------\r\n\r\nRelations: {\r\n ${modelsList}\r\n Model: \"Model::Producer Perspective\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Top\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Bottom\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Front\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Back\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Right\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Left\", \"Camera\" {\r\n }\r\n Model: \"Model::Camera Switcher\", \"CameraSwitcher\" {\r\n }\r\n ${materialList}\r\n}`;\r\n }\r\n\r\n /**\r\n * Add Connections info to output file.\r\n */\r\n _writeConnections() {\r\n let modelsList = '';\r\n const { name } = this._info;\r\n for (let i = 0; i < this._info.models.length; ++i) {\r\n modelsList += `\r\n Connect: \"OO\", \"Model::${name}_${i}\", \"Model::Scene\"`;\r\n }\r\n\r\n let materialList = '';\r\n for (let i = 0; i < this._info.materials.length; ++i) {\r\n materialList += `\r\n Connect: \"OO\", \"Material::${name}_${i}_default\", \"Model::${name}_${i}\"`;\r\n }\r\n\r\n return `\r\n; Object connections\r\n;------------------------------------------------------------------\r\n\r\nConnections: {\r\n ${modelsList}\r\n ${materialList}\r\n}`;\r\n }\r\n\r\n /**\r\n * Write float array to string with limited precision\r\n * @param {Float32Array} array - array to be fixed\r\n * @returns {String} String with fixed floats\r\n */\r\n _floatArrayToString(array) {\r\n const str = [];\r\n for (let i = 0; i < array.length; ++i) {\r\n str[i] = array[i].toFixed(6);\r\n }\r\n return str.join(',');\r\n }\r\n\r\n /**\r\n * Adding color layer to resulting file\r\n * @param {Float32Array} colorArray attribute\r\n * @param {number} vertCount - number of vertices in the model\r\n * @returns {string} color layer info\r\n */\r\n _colorLayer(colorArray, vertCount) {\r\n const layerElementColorNumber = 0;\r\n const layerElementColorVersion = 101;\r\n const layerElementColorName = '';\r\n const colorsStr = this._floatArrayToString(colorArray);\r\n // Mapping Information type and Reference Information type are mandatory for our Miew! Must not be changed\r\n // As said [..Array(...)] - fastest and easiest way to produce [0, 1, .....] array\r\n const colorIndices = [...Array(vertCount).keys()];\r\n return `\r\n LayerElementColor: ${layerElementColorNumber} {\r\n Version: ${layerElementColorVersion}\r\n Name: \"${layerElementColorName}\"\r\n MappingInformationType: \"ByVertice\"\r\n ReferenceInformationType: \"Direct\"\r\n Colors: ${colorsStr}\r\n ColorIndex: ${colorIndices}\r\n }`;\r\n }\r\n\r\n /**\r\n * Adding normal layer to resulting file\r\n * @param {Float32Array} normalArray attribute\r\n * @returns {string} normal layer info\r\n */\r\n _normalLayer(normalArray) {\r\n const layerElementNormalNumber = 0;\r\n const layerElementNormalVersion = 101;\r\n const layerElementNormalName = '';\r\n const normalsStr = this._floatArrayToString(normalArray);\r\n // Mapping Information type and Reference Information type are mandatory for our Miew! Must not be changed\r\n return `\r\n LayerElementNormal: ${layerElementNormalNumber} {\r\n Version: ${layerElementNormalVersion}\r\n Name: \"${layerElementNormalName}\"\r\n MappingInformationType: \"ByVertice\"\r\n ReferenceInformationType: \"Direct\"\r\n Normals: ${normalsStr}\r\n }`;\r\n }\r\n\r\n /**\r\n * Adding vertices and indices to resulting string\r\n * @return {string} resulting string in FBX notation\r\n */\r\n _verticesIndices(positions, indices) {\r\n const multiLayer = 0;\r\n const multiTake = 1;\r\n const shading = 'Y';\r\n const culling = 'CullingOff';\r\n const geometryVersion = 124;\r\n const vertStr = this._floatArrayToString(positions);\r\n /* About _correctArrayNotation: Float32Arrays will contains only Float32 numbers, which implies that it will be floating points with 17 numbers after point.\r\n * We cannot (and it's logically incorrect) save all this information, so we convert this Float32Array into Array-like object with numbers with only 6 numbers after point\r\n * Reminder - this is big memory loss (as we must save at one moment two arrays with similar information) */\r\n return `MultiLayer: ${multiLayer}\r\n MultiTake: ${multiTake}\r\n Shading: ${shading}\r\n Culling: \"${culling}\"\r\n Vertices: ${vertStr}\r\n PolygonVertexIndex: ${indices}\r\n GeometryVersion: ${geometryVersion}`;\r\n }\r\n\r\n /**\r\n * Forming material properties block.\r\n * @param {Object} material - given material of model\r\n * @returns {String} material properties string\r\n */\r\n _materialProperties(material) {\r\n return `Properties60: {\r\n Property: \"ShadingModel\", \"KString\", \"\", \"Lambert\"\r\n Property: \"MultiLayer\", \"bool\", \"\",0\r\n Property: \"EmissiveColor\", \"ColorRGB\", \"\",0,0,0\r\n Property: \"EmissiveFactor\", \"double\", \"\",0.0000\r\n Property: \"AmbientColor\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"AmbientFactor\", \"double\", \"\",0.0000\r\n Property: \"DiffuseColor\", \"ColorRGB\", \"\",${material.diffuse}\r\n Property: \"DiffuseFactor\", \"double\", \"\",1.0000\r\n Property: \"Bump\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TransparentColor\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"TransparencyFactor\", \"double\", \"\",0.0000\r\n Property: \"SpecularColor\", \"ColorRGB\", \"\",${material.specular}\r\n Property: \"SpecularFactor\", \"double\", \"\",1.0000\r\n Property: \"ShininessExponent\", \"double\", \"\",${material.shininess}\r\n Property: \"ReflectionColor\", \"ColorRGB\", \"\",0,0,0\r\n Property: \"ReflectionFactor\", \"double\", \"\",1\r\n Property: \"Ambient\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"Diffuse\", \"ColorRGB\", \"\",${material.diffuse}\r\n Property: \"Specular\", \"ColorRGB\", \"\",${material.specular}\r\n Property: \"Shininess\", \"double\", \"\",${material.shininess}\r\n Property: \"Opacity\", \"double\", \"\",${material.opacity}\r\n Property: \"Reflectivity\", \"double\", \"\",0\r\n }`;\r\n }\r\n}\r\n","import Exporter from './Exporter';\r\nimport FBXInfoExtractor from './fbx/FBXInfoExtractor';\r\nimport FBXResult from './fbx/FBXResult';\r\nimport ComplexVisual from '../../ComplexVisual';\r\n\r\nexport default class FBXExporter extends Exporter {\r\n constructor(source, options) {\r\n super(source, options);\r\n // Data\r\n this._data = source;\r\n this._version = options.miewVersion || '0.0-UNSPECIFIED';\r\n this._extractor = new FBXInfoExtractor();\r\n }\r\n\r\n /**\r\n * Entry point to exporter.\r\n */\r\n exportSync() {\r\n // Creating mandatory blocks\r\n const result = new FBXResult();\r\n if (!this._source) {\r\n return this._result;\r\n }\r\n\r\n const info = this._extractor.process(this._data);\r\n info.version = this._version;\r\n this._result = result.getResult(info);\r\n return this._result;\r\n }\r\n}\r\n\r\nFBXExporter.formats = ['fbx'];\r\nFBXExporter.SourceClass = ComplexVisual;\r\n","import ExporterList from './exporters/ExporterList';\r\n\r\nimport PDBExporter from './exporters/PDBExporter';\r\nimport FBXExporter from './exporters/FBXExporter';\r\n\r\nexport default new ExporterList([\r\n PDBExporter,\r\n FBXExporter,\r\n]);\r\n","import loaders from './loaders';\r\nimport parsers from './parsers';\r\nimport exporters from './exporters';\r\n\r\nexport default {\r\n loaders,\r\n parsers,\r\n exporters,\r\n};\r\n","/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nimport * as THREE from 'three';\r\nimport CSS2DObject from './CSS2DObject';\r\n\r\nconst tempColor = new THREE.Color();\r\n\r\nclass CSS2DRenderer {\r\n constructor() {\r\n this._width = 0;\r\n this._height = 0;\r\n this._widthHalf = 0;\r\n this._heightHalf = 0;\r\n\r\n this._vector = new THREE.Vector3();\r\n this._viewMatrix = new THREE.Matrix4();\r\n this._projectionMatrix = new THREE.Matrix4();\r\n\r\n this._domElement = document.createElement('div');\r\n this._domElement.style.overflow = 'hidden';\r\n this._domElement.style.position = 'absolute';\r\n this._domElement.style.top = '0';\r\n this._domElement.style.zIndex = '0'; // start a new Stacking Context to enclose all z-ordered children\r\n this._domElement.style.pointerEvents = 'none';\r\n }\r\n\r\n getElement() {\r\n return this._domElement;\r\n }\r\n\r\n reset() {\r\n const myNode = this.getElement();\r\n while (myNode.firstChild) {\r\n myNode.removeChild(myNode.firstChild);\r\n }\r\n }\r\n\r\n setSize(width, height) {\r\n this._width = width;\r\n this._height = height;\r\n\r\n this._widthHalf = this._width / 2;\r\n this._heightHalf = this._height / 2;\r\n\r\n this._domElement.style.width = `${width}px`;\r\n this._domElement.style.height = `${height}px`;\r\n }\r\n\r\n _renderObject(object, camera, scene) {\r\n function lerpColorAsHex(a, b, t) {\r\n tempColor.setHex(a);\r\n tempColor.lerp(b, t);\r\n return `#${tempColor.getHexString()}`;\r\n }\r\n\r\n function colorAsHex(a) {\r\n tempColor.setHex(a);\r\n return `#${tempColor.getHexString()}`;\r\n }\r\n\r\n if (object instanceof CSS2DObject) {\r\n this._vector.setFromMatrixPosition(object.matrixWorld);\r\n\r\n if (object.userData !== undefined && object.userData.offset !== undefined) {\r\n const localOffset = new THREE.Vector3(object.userData.offset.x, object.userData.offset.y, 0);\r\n this._vector.add(localOffset.multiplyScalar(object.matrixWorld.getMaxScaleOnAxis()));\r\n }\r\n\r\n this._vector.applyMatrix4(this._viewMatrix);\r\n\r\n const visibility = this._vector.z > -camera.near ? 'hidden' : 'visible';\r\n const zIndex = 10000 * (camera.far - (-this._vector.z)) / (camera.far - camera.near);\r\n\r\n const element = object.getElement();\r\n if (typeof scene.fog === 'undefined') {\r\n element.style.color = colorAsHex(object.userData.color);\r\n if (object.userData.background !== 'transparent') {\r\n element.style.background = colorAsHex(object.userData.background);\r\n }\r\n } else {\r\n const fogFactor = THREE.MathUtils.smoothstep(-this._vector.z, scene.fog.near, scene.fog.far);\r\n element.style.color = lerpColorAsHex(object.userData.color, scene.fog.color, fogFactor);\r\n if (object.userData.background !== 'transparent') {\r\n element.style.background = lerpColorAsHex(object.userData.background, scene.fog.color, fogFactor);\r\n }\r\n }\r\n\r\n this._vector.applyMatrix4(this._projectionMatrix);\r\n\r\n const style = `${object.userData !== {} ? object.userData.translation : 'translate(-50%, -50%) '\r\n }translate(${this._vector.x * this._widthHalf + this._widthHalf}px,${\r\n -this._vector.y * this._heightHalf + this._heightHalf}px)`;\r\n element.style.visibility = visibility;\r\n element.style.WebkitTransform = style;\r\n element.style.MozTransform = style;\r\n element.style.oTransform = style;\r\n element.style.transform = style;\r\n element.style.zIndex = Number(zIndex).toFixed(0);\r\n\r\n if (element.parentNode !== this._domElement) {\r\n this._domElement.appendChild(element);\r\n }\r\n }\r\n\r\n for (let i = 0, l = object.children.length; i < l; i++) {\r\n this._renderObject(object.children[i], camera, scene);\r\n }\r\n }\r\n\r\n render(scene, camera) {\r\n scene.updateMatrixWorld();\r\n\r\n if (camera.parent === null) {\r\n camera.updateMatrixWorld();\r\n }\r\n\r\n camera.matrixWorldInverse.copy(camera.matrixWorld).invert();\r\n\r\n this._viewMatrix.copy(camera.matrixWorldInverse);\r\n this._projectionMatrix.copy(camera.projectionMatrix);\r\n\r\n this._renderObject(scene, camera, scene);\r\n }\r\n}\r\nexport default CSS2DRenderer;\r\n","export default function getTopWindow() {\r\n // intercept the exception if we have cross-origin iframe\r\n try {\r\n if (window.top.location.href !== undefined) {\r\n return window.top;\r\n }\r\n } catch {\r\n // provide fallback\r\n }\r\n return window;\r\n}\r\n","import * as THREE from 'three';\r\nimport Timer from '../Timer';\r\nimport settings from '../settings';\r\nimport EventDispatcher from '../utils/EventDispatcher';\r\nimport getTopWindow from '../utils/getTopWindow';\r\n\r\nconst VK_LEFT = 37;\r\nconst VK_UP = 38;\r\nconst VK_RIGHT = 39;\r\nconst VK_DOWN = 40;\r\n\r\nconst STATE = {\r\n NONE: -1, ROTATE: 0, TRANSLATE: 1, SCALE: 2, TRANSLATE_PIVOT: 3,\r\n};\r\n\r\n// pausing for this amount of time before releasing mouse button prevents inertial rotation (seconds)\r\nconst FULL_STOP_THRESHOLD = 0.1;\r\n\r\nconst quaternion = new THREE.Quaternion();\r\nconst matrix4 = new THREE.Matrix4();\r\n\r\n// pivot -- local offset of the rotation pivot point\r\nfunction ObjectHandler(objects, camera, pivot, options) {\r\n this.objects = objects;\r\n [this.object] = objects;\r\n this.camera = camera;\r\n this.pivot = pivot;\r\n this.axis = new THREE.Vector3(0, 0, 1);\r\n this.options = options;\r\n\r\n this.lastRotation = {\r\n axis: new THREE.Vector3(),\r\n angle: 0.0,\r\n };\r\n}\r\n\r\nObjectHandler.prototype._rotate = (function () {\r\n const p = new THREE.Vector3();\r\n const q = new THREE.Quaternion();\r\n const s = new THREE.Vector3();\r\n\r\n const m = new THREE.Matrix4();\r\n\r\n return function (quat) {\r\n const zeroPivot = (this.pivot.x === 0.0 && this.pivot.y === 0.0 && this.pivot.z === 0.0);\r\n\r\n m.copy(this.object.matrix);\r\n\r\n if (zeroPivot) {\r\n m.multiply(matrix4.makeRotationFromQuaternion(quat));\r\n } else {\r\n m.multiply(matrix4.makeTranslation(this.pivot.x, this.pivot.y, this.pivot.z));\r\n m.multiply(matrix4.makeRotationFromQuaternion(quat));\r\n m.multiply(matrix4.makeTranslation(-this.pivot.x, -this.pivot.y, -this.pivot.z));\r\n }\r\n\r\n m.decompose(p, q, s);\r\n\r\n // update objects\r\n if (!zeroPivot) {\r\n for (let i = 0; i < this.objects.length; ++i) {\r\n this.objects[i].position.copy(p);\r\n }\r\n }\r\n\r\n for (let j = 0; j < this.objects.length; ++j) {\r\n this.objects[j].quaternion.copy(q);\r\n this.objects[j].updateMatrix();\r\n }\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.setObjects = function (objects) {\r\n this.objects = objects;\r\n [this.object] = objects;\r\n};\r\n\r\nObjectHandler.prototype.rotate = (function () {\r\n const rot = {\r\n axis: new THREE.Vector3(),\r\n angle: 0.0,\r\n };\r\n\r\n return function (quat, mousePrevPos, mouseCurPos, aboutAxis) {\r\n this.mouse2rotation(rot, mousePrevPos, mouseCurPos, aboutAxis);\r\n quat.setFromAxisAngle(rot.axis, rot.angle);\r\n\r\n if (rot.angle) {\r\n this._rotate(quat);\r\n }\r\n\r\n this.lastRotation = rot;\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.translate = (function () {\r\n const dir = new THREE.Vector3();\r\n const pivot = new THREE.Vector3();\r\n\r\n return function (delta) {\r\n // reverse-project viewport movement to view coords (compensate for screen aspect ratio)\r\n dir.set(\r\n delta.x / this.camera.projectionMatrix.elements[0],\r\n delta.y / this.camera.projectionMatrix.elements[5],\r\n 0,\r\n );\r\n let dist = dir.length();\r\n dir.normalize();\r\n\r\n // transform movement direction to object local coords\r\n dir.transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n // visible translate distance shouldn't depend on camera-to-object distance\r\n pivot.copy(this.pivot);\r\n this.object.localToWorld(pivot);\r\n dist *= Math.abs(pivot.z - this.camera.position.z);\r\n\r\n // visible translate distance shouldn't depend on object scale\r\n dist /= this.object.matrixWorld.getMaxScaleOnAxis();\r\n\r\n // all objects are translated similar to principal object\r\n // (we assume they all have identical pivot and scale)\r\n for (let i = 0; i < this.objects.length; ++i) {\r\n this.objects[i].translateOnAxis(dir, dist);\r\n }\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.update = (function () {\r\n const axis = new THREE.Vector3();\r\n\r\n return function (timeSinceLastUpdate, timeSinceMove) {\r\n if (settings.now.autoRotation !== 0.0) {\r\n // auto-rotation with constant speed\r\n\r\n // if rotation axis is fixed or hasn't been defined yet\r\n if (settings.now.autoRotationAxisFixed || this.lastRotation.axis.length() === 0.0) {\r\n // use Y-axis (transformed to local object coords)\r\n axis.set(0, 1, 0).transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n } else {\r\n // use axis defined by last user rotation\r\n axis.copy(this.lastRotation.axis);\r\n }\r\n\r\n this._rotate(quaternion.setFromAxisAngle(axis, settings.now.autoRotation * timeSinceLastUpdate));\r\n return true;\r\n }\r\n\r\n if (this.options.intertia && this.lastRotation.angle) {\r\n // inertial object rotation\r\n const angle = this.lastRotation.angle * ((1.0 - this.options.dynamicDampingFactor) ** (40.0 * timeSinceMove));\r\n\r\n if (Math.abs(angle) <= this.options.intertiaThreshold) {\r\n this.lastRotation.angle = 0.0;\r\n } else {\r\n this._rotate(quaternion.setFromAxisAngle(this.lastRotation.axis, angle));\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.stop = function () {\r\n this.lastRotation.angle = 0.0;\r\n};\r\n\r\n// calculate (axis, angle) pair from mouse/touch movement\r\nObjectHandler.prototype.mouse2rotation = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n const eye = new THREE.Vector3();\r\n const eyeDirection = new THREE.Vector3();\r\n\r\n const cameraUpDirection = new THREE.Vector3();\r\n const cameraSidewaysDirection = new THREE.Vector3();\r\n\r\n const moveDirection = new THREE.Vector3();\r\n\r\n const mouseDelta = new THREE.Vector2();\r\n\r\n return function (rot, mousePrev, mouseCur, aboutAxis) {\r\n if (aboutAxis) {\r\n rot.axis.copy(this.axis);\r\n rot.angle = this.options.axisRotateFactor * (mouseCur.y - mousePrev.y);\r\n\r\n /* cool method that allows rotation around Z axis to be \"tied\" to mouse cursor\r\n\r\n res.axis.copy(this.axis);\r\n\r\n var pivot = this.pivot.clone();\r\n this.object.localToWorld(pivot);\r\n pivot.project(this.camera);\r\n\r\n var v1 = new THREE.Vector3(mousePrev.x, mousePrev.y, this.camera.position.z);\r\n v1.sub(pivot);\r\n var v2 = new THREE.Vector3(mouseCur.x, mouseCur.y, this.camera.position.z);\r\n v2.sub(pivot);\r\n\r\n v1.sub(res.axis.clone().multiplyScalar(v1.dot(res.axis)));\r\n v2.sub(res.axis.clone().multiplyScalar(v2.dot(res.axis)));\r\n\r\n var abs = v1.length() * v2.length();\r\n if (abs > 0) {\r\n res.angle = res.axis.dot(v1.cross(v2)) / abs;\r\n }\r\n */\r\n } else {\r\n mouseDelta.subVectors(mouseCur, mousePrev);\r\n const angle = mouseDelta.length();\r\n if (angle === 0.0) {\r\n return;\r\n }\r\n\r\n center.copy(this.pivot);\r\n this.object.localToWorld(center);\r\n eye.subVectors(this.camera.position, center);\r\n eyeDirection.copy(eye).normalize();\r\n\r\n cameraUpDirection.copy(this.camera.up).normalize();\r\n cameraSidewaysDirection.crossVectors(cameraUpDirection, eyeDirection).normalize();\r\n\r\n cameraUpDirection.setLength(mouseDelta.y);\r\n cameraSidewaysDirection.setLength(mouseDelta.x);\r\n\r\n moveDirection.copy(cameraUpDirection.add(cameraSidewaysDirection));\r\n\r\n rot.axis.crossVectors(moveDirection, eye);\r\n\r\n rot.angle = -angle * this.options.rotateFactor;\r\n }\r\n\r\n rot.axis.transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n // make sure angle is always positive (thus 'axis' defines both axis and direction of rotation)\r\n if (rot.angle < 0.0) {\r\n rot.axis.negate();\r\n rot.angle = -rot.angle;\r\n }\r\n };\r\n}());\r\n\r\nfunction ObjectControls(object, objectPivot, camera, domElement, getAltObj) {\r\n EventDispatcher.call(this);\r\n const self = this;\r\n\r\n this.object = object;\r\n this.objectPivot = objectPivot;\r\n this.camera = camera;\r\n this.domElement = (typeof domElement !== 'undefined') ? domElement : document;\r\n this.getAltObj = getAltObj;\r\n\r\n // API\r\n\r\n this.enabled = true;\r\n this.hotkeysEnabled = true;\r\n\r\n this.screen = {\r\n left: 0, top: 0, width: 0, height: 0,\r\n };\r\n\r\n this.options = {\r\n rotateFactor: Math.PI, // full screen slide (along short side) would roughly mean 180 deg. rotation\r\n axisRotateFactor: 4 * Math.PI, // full screen slide (along short side) would roughly mean 720 deg. rotation\r\n intertia: true,\r\n dynamicDampingFactor: 0.1,\r\n intertiaThreshold: 1e-3,\r\n };\r\n\r\n // internals\r\n\r\n this._state = STATE.NONE;\r\n\r\n this._mousePrevPos = new THREE.Vector2();\r\n this._mouseCurPos = new THREE.Vector2();\r\n\r\n this._mainObj = new ObjectHandler([this.object], this.camera, new THREE.Vector3(0, 0, 0), this.options);\r\n this._altObj = new ObjectHandler([this.object], this.camera, new THREE.Vector3(0, 0, 0), this.options);\r\n this._affectedObj = this._mainObj;\r\n this._isAltObjFreeRotationAllowed = true;\r\n this._isTranslationAllowed = true;\r\n this._isKeysTranslatingObj = false;\r\n\r\n this._pressedKeys = [];\r\n\r\n this._clock = new Timer();\r\n this._clock.start();\r\n this._lastUpdateTime = this._clock.getElapsedTime();\r\n\r\n // events\r\n this._listeners = [\r\n {\r\n obj: self.domElement,\r\n type: 'mousedown',\r\n handler(e) {\r\n self.mousedown(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseup',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousemove',\r\n handler(e) {\r\n self.mousemove(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousewheel',\r\n handler(e) {\r\n self.mousewheel(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'DOMMouseScroll',\r\n handler(e) {\r\n self.mousewheel(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseout',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchstart',\r\n handler(e) {\r\n self.touchstartend(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchend',\r\n handler(e) {\r\n self.touchstartend(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchmove',\r\n handler(e) {\r\n self.touchmove(e);\r\n },\r\n },\r\n {\r\n obj: self.getKeyBindObject(),\r\n type: 'keydown',\r\n handler(e) {\r\n self.keydownup(e);\r\n },\r\n },\r\n {\r\n obj: self.getKeyBindObject(),\r\n type: 'keyup',\r\n handler(e) {\r\n self.keydownup(e);\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'resize',\r\n handler() {\r\n self.handleResize();\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'blur',\r\n handler() {\r\n self.resetKeys();\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'contextmenu',\r\n handler(e) {\r\n self.contextmenu(e);\r\n },\r\n }];\r\n\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.addEventListener(l.type, l.handler);\r\n }\r\n\r\n this.handleResize();\r\n\r\n this.resetKeys();\r\n\r\n // force an update at start\r\n this.update();\r\n}\r\n\r\n// methods\r\n\r\nObjectControls.prototype = Object.create(EventDispatcher.prototype);\r\nObjectControls.prototype.constructor = ObjectControls;\r\n\r\nObjectControls.prototype.resetKeys = function () {\r\n this._pressedKeys[VK_LEFT] = false;\r\n this._pressedKeys[VK_UP] = false;\r\n this._pressedKeys[VK_RIGHT] = false;\r\n this._pressedKeys[VK_DOWN] = false;\r\n};\r\n\r\nObjectControls.prototype.contextmenu = function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n};\r\n\r\nObjectControls.prototype.handleResize = function () {\r\n if (this.domElement === document) {\r\n this.screen.left = 0;\r\n this.screen.top = 0;\r\n this.screen.width = window.innerWidth;\r\n this.screen.height = window.innerHeight;\r\n } else {\r\n const box = this.domElement.getBoundingClientRect();\r\n // adjustments come from similar code in the jquery offset() function\r\n const d = this.domElement.ownerDocument.documentElement;\r\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\r\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\r\n this.screen.width = box.width;\r\n this.screen.height = box.height;\r\n }\r\n};\r\n\r\nObjectControls.prototype.enable = function (enable) {\r\n this.enabled = enable;\r\n};\r\n\r\nObjectControls.prototype.enableHotkeys = function (enable) {\r\n this.hotkeysEnabled = enable;\r\n};\r\n\r\nObjectControls.prototype.allowTranslation = function (allow) {\r\n this._isTranslationAllowed = allow;\r\n};\r\n\r\nObjectControls.prototype.allowAltObjFreeRotation = function (allow) {\r\n this._isAltObjFreeRotationAllowed = allow;\r\n};\r\n\r\nObjectControls.prototype.keysTranslateObj = function (on) {\r\n this._isKeysTranslatingObj = on;\r\n};\r\n\r\nObjectControls.prototype.isEditingAltObj = function () {\r\n return ((this._state === STATE.ROTATE) || (this._state === STATE.TRANSLATE))\r\n && (this._affectedObj === this._altObj);\r\n};\r\n\r\n// convert page coords of mouse/touch to uniform coords with smaller side being [-0.5, 0.5]\r\n// (uniform coords keep direct proportion with screen distance travelled by mouse regardless of screen aspect ratio)\r\nObjectControls.prototype.convertMouseToOnCircle = function (coords, pageX, pageY) {\r\n const screenSize = Math.min(this.screen.width, this.screen.height);\r\n\r\n if (screenSize === 0) {\r\n coords.set(0, 0);\r\n return;\r\n }\r\n\r\n coords.set(\r\n ((pageX - this.screen.width * 0.5 - this.screen.left) / screenSize),\r\n ((0.5 * this.screen.height + this.screen.top - pageY) / screenSize),\r\n );\r\n};\r\n\r\n// convert page coords of mouse/touch to viewport coords with both sides being [-1, 1]\r\n// (those are non-uniform coords affected by screen aspect ratio)\r\nObjectControls.prototype.convertMouseToViewport = function (coords, pageX, pageY) {\r\n if (this.screen.width === 0 || this.screen.height === 0) {\r\n coords.set(0, 0);\r\n return;\r\n }\r\n\r\n coords.set(\r\n (2.0 * (pageX - this.screen.width * 0.5 - this.screen.left) / this.screen.width),\r\n (2.0 * (0.5 * this.screen.height + this.screen.top - pageY) / this.screen.height),\r\n );\r\n};\r\n\r\nObjectControls.prototype.stop = function () {\r\n this._mainObj.stop();\r\n this._altObj.stop();\r\n};\r\n\r\n// rotate object based on latest mouse/touch movement\r\nObjectControls.prototype.rotateByMouse = (function () {\r\n const quat = new THREE.Quaternion();\r\n\r\n return function (aboutZAxis) {\r\n this._affectedObj.rotate(quat, this._mousePrevPos, this._mouseCurPos, aboutZAxis);\r\n this.dispatchEvent({ type: 'change', action: 'rotate', quaternion: quat });\r\n };\r\n}());\r\n\r\n// rotate object by specified quaternion\r\nObjectControls.prototype.rotate = function (quat) {\r\n this.object.quaternion.multiply(quat);\r\n this.dispatchEvent({ type: 'change', action: 'rotate', quaternion: quat });\r\n};\r\n\r\n// get object's orientation\r\nObjectControls.prototype.getOrientation = function () {\r\n return this.object.quaternion;\r\n};\r\n\r\n// set object's orientation\r\nObjectControls.prototype.setOrientation = function (quat) {\r\n this.object.quaternion.copy(quat);\r\n};\r\n\r\n// translate object based on latest mouse/touch movement\r\nObjectControls.prototype.translate = (function () {\r\n const delta = new THREE.Vector2();\r\n return function () {\r\n delta.subVectors(this._mouseCurPos, this._mousePrevPos);\r\n this._affectedObj.translate(delta);\r\n this.dispatchEvent({ type: 'change', action: 'translate' });\r\n };\r\n}());\r\n\r\n// get object scale\r\nObjectControls.prototype.getScale = function () {\r\n return this.object.scale.x;\r\n};\r\n\r\n// set uniform object scale\r\nObjectControls.prototype.setScale = function (scale) {\r\n this.object.scale.set(scale, scale, scale);\r\n};\r\n\r\n// scale object by factor (factor should be greater than zero)\r\nObjectControls.prototype.scale = function (factor) {\r\n if (factor <= 0) {\r\n return;\r\n }\r\n this.setScale(this.object.scale.x * factor);\r\n this.dispatchEvent({ type: 'change', action: 'zoom', factor });\r\n};\r\n\r\nObjectControls.prototype.update = (function () {\r\n const shift = new THREE.Vector2();\r\n\r\n return function () {\r\n const curTime = this._clock.getElapsedTime();\r\n const timeSinceLastUpdate = curTime - this._lastUpdateTime;\r\n\r\n // update object handler\r\n if (this._state === STATE.NONE) {\r\n const timeSinceMove = curTime - this._lastMouseMoveTime;\r\n if (this._mainObj.update(timeSinceLastUpdate, timeSinceMove)\r\n || this._altObj.update(timeSinceLastUpdate, timeSinceMove)) {\r\n this.dispatchEvent({ type: 'change', action: 'auto' });\r\n }\r\n }\r\n\r\n // apply arrow keys\r\n if (this._isKeysTranslatingObj) {\r\n const speedX = Number(this._pressedKeys[VK_RIGHT]) - Number(this._pressedKeys[VK_LEFT]);\r\n const speedY = Number(this._pressedKeys[VK_UP]) - Number(this._pressedKeys[VK_DOWN]);\r\n if (speedX !== 0.0 || speedY !== 0.0) {\r\n const delta = timeSinceLastUpdate;\r\n\r\n // update object translation\r\n const altObj = this.getAltObj();\r\n if (altObj.objects.length > 0) {\r\n this._altObj.setObjects(altObj.objects);\r\n this._altObj.pivot = altObj.pivot;\r\n\r\n if ('axis' in altObj) {\r\n this._altObj.axis = altObj.axis.clone();\r\n } else {\r\n this._altObj.axis.set(0, 0, 1);\r\n }\r\n\r\n shift.set(delta * speedX, delta * speedY);\r\n this._altObj.translate(shift);\r\n this.dispatchEvent({ type: 'change', action: 'translate' });\r\n }\r\n }\r\n }\r\n\r\n this._lastUpdateTime = curTime;\r\n };\r\n}());\r\n\r\nObjectControls.prototype.reset = function () {\r\n this._state = STATE.NONE;\r\n\r\n this.object.quaternion.copy(quaternion.set(0, 0, 0, 1));\r\n};\r\n\r\n// listeners\r\n\r\nObjectControls.prototype.mousedown = function (event) {\r\n if (this.enabled === false || this._state !== STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this._state === STATE.NONE) {\r\n if (event.button === 0) {\r\n this._affectedObj.stop(); // can edit only one object at a time\r\n\r\n let workWithAltObj = false;\r\n\r\n if (event.altKey) {\r\n const altObj = this.getAltObj();\r\n workWithAltObj = (altObj.objects.length > 0);\r\n if (workWithAltObj) {\r\n this._altObj.setObjects(altObj.objects);\r\n this._altObj.pivot = altObj.pivot;\r\n\r\n if ('axis' in altObj) {\r\n this._altObj.axis = altObj.axis.clone();\r\n } else {\r\n this._altObj.axis.set(0, 0, 1);\r\n }\r\n }\r\n }\r\n\r\n this._affectedObj = workWithAltObj ? this._altObj : this._mainObj;\r\n\r\n this._state = (workWithAltObj && event.ctrlKey && this._isTranslationAllowed) ? STATE.TRANSLATE : STATE.ROTATE;\r\n } else if (event.button === 2) {\r\n this._state = STATE.TRANSLATE_PIVOT;\r\n }\r\n }\r\n\r\n if (this._state === STATE.ROTATE) {\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.pageX, event.pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n }\r\n\r\n if (this._state === STATE.TRANSLATE || this._state === STATE.TRANSLATE_PIVOT) {\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n }\r\n};\r\n\r\nObjectControls.prototype.mousemove = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (this._state) {\r\n case STATE.ROTATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.pageX, event.pageY);\r\n this.rotateByMouse((event.altKey && !this._isAltObjFreeRotationAllowed) || event.shiftKey);\r\n this._lastMouseMoveTime = this._clock.getElapsedTime();\r\n break;\r\n\r\n case STATE.TRANSLATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this.translate();\r\n break;\r\n\r\n case STATE.TRANSLATE_PIVOT:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this.translatePivotByMouse();\r\n break;\r\n\r\n default: break;\r\n }\r\n};\r\n\r\nObjectControls.prototype.mousewheel = function (event) {\r\n if (this.enabled === false || !settings.now.zooming || this._state !== STATE.NONE || event.shiftKey) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n let delta = 0;\r\n\r\n if (event.wheelDelta) {\r\n // WebKit / Opera / Explorer 9\r\n delta = event.wheelDelta / 40;\r\n } else if (event.detail) {\r\n // Firefox\r\n delta = -event.detail / 3;\r\n }\r\n\r\n let factor = 1.0 + delta * 0.05;\r\n factor = Math.max(factor, 0.01);\r\n this.scale(factor);\r\n};\r\n\r\nObjectControls.prototype.mouseup = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this._state = STATE.NONE;\r\n\r\n if (this._clock.getElapsedTime() - this._lastMouseMoveTime > FULL_STOP_THRESHOLD) {\r\n this._affectedObj.stop();\r\n }\r\n};\r\n\r\nObjectControls.prototype.touchstartend = function (event) {\r\n if (this.enabled === false) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (event.touches.length) {\r\n case 1:\r\n this._state = STATE.ROTATE;\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.touches[0].pageX, event.touches[0].pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n break;\r\n\r\n case 2: {\r\n // prevent inertial rotation\r\n this._mainObj.stop();\r\n this._altObj.stop();\r\n\r\n this._state = STATE.SCALE;\r\n const dx = event.touches[0].pageX - event.touches[1].pageX;\r\n const dy = event.touches[0].pageY - event.touches[1].pageY;\r\n this._touchDistanceCur = this._touchDistanceStart = Math.sqrt(dx * dx + dy * dy);\r\n this._scaleStart = this.object.scale.x;\r\n break;\r\n }\r\n\r\n default:\r\n this._state = STATE.NONE;\r\n }\r\n};\r\n\r\nObjectControls.prototype.touchmove = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (this._state) {\r\n case STATE.ROTATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.touches[0].pageX, event.touches[0].pageY);\r\n this.rotateByMouse(false);\r\n\r\n this._lastMouseMoveTime = this._clock.getElapsedTime();\r\n break;\r\n\r\n case STATE.SCALE:\r\n if (settings.now.zooming) {\r\n // update scale\r\n const dx = event.touches[0].pageX - event.touches[1].pageX;\r\n const dy = event.touches[0].pageY - event.touches[1].pageY;\r\n this._touchDistanceCur = Math.sqrt(dx * dx + dy * dy);\r\n const newScale = this._scaleStart * this._touchDistanceCur / this._touchDistanceStart;\r\n const factor = newScale / this.object.scale.x;\r\n this.scale(factor);\r\n }\r\n break;\r\n\r\n default:\r\n }\r\n};\r\n\r\nObjectControls.prototype.keydownup = function (event) {\r\n if (this.enabled === false || this.hotkeysEnabled === false) {\r\n return;\r\n }\r\n\r\n switch (event.keyCode) {\r\n case VK_LEFT:\r\n case VK_UP:\r\n case VK_RIGHT:\r\n case VK_DOWN:\r\n this._pressedKeys[event.keyCode] = (event.type === 'keydown');\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n default:\r\n }\r\n};\r\n\r\nObjectControls.prototype.getKeyBindObject = function () {\r\n return getTopWindow();\r\n};\r\n\r\nObjectControls.prototype.dispose = function () {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.removeEventListener(l.type, l.handler);\r\n }\r\n};\r\n\r\nObjectControls.prototype.translatePivotByMouse = (function () {\r\n const delta = new THREE.Vector2();\r\n return function () {\r\n delta.subVectors(this._mouseCurPos, this._mousePrevPos);\r\n this.translatePivotInWorld(settings.now.translationSpeed * delta.x, settings.now.translationSpeed * delta.y, 0);\r\n };\r\n}());\r\n\r\n// Translate in WorldCS, translation is scaled with root scale matrix\r\nObjectControls.prototype.translatePivotInWorld = function (x, y, z) {\r\n const pos = this.objectPivot.position;\r\n pos.applyMatrix4(this.object.matrixWorld);\r\n pos.setX(pos.x + x);\r\n pos.setY(pos.y + y);\r\n pos.setZ(pos.z + z);\r\n pos.applyMatrix4(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\n// Translate in ModelCS, x, y, z are Ang\r\nObjectControls.prototype.translatePivot = function (x, y, z) {\r\n const pos = this.objectPivot.position;\r\n pos.setX(pos.x + x);\r\n pos.setY(pos.y + y);\r\n pos.setZ(pos.z + z);\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\n// Set pivot\r\nObjectControls.prototype.setPivot = function (newPivot) {\r\n this.objectPivot.position.copy(newPivot);\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\nexport default ObjectControls;\r\n","import * as THREE from 'three';\r\nimport settings from '../settings';\r\nimport Timer from '../Timer';\r\nimport EventDispatcher from '../utils/EventDispatcher';\r\n\r\nfunction Picker(gfxObj, camera, domElement) {\r\n EventDispatcher.call(this);\r\n const self = this;\r\n\r\n this.gfxObj = gfxObj;\r\n this.camera = camera;\r\n this.domElement = (typeof domElement !== 'undefined') ? domElement : document;\r\n this.screen = {\r\n left: 0, top: 0, width: 0, height: 0,\r\n };\r\n this._lastMousePos = new THREE.Vector2(0, 0);\r\n this._mouseTotalDist = 0.0;\r\n this._lastClickBeginTime = -1000.0;\r\n this._lastClickPos = new THREE.Vector2(0, 0);\r\n this._clickBeginTime = 0.0;\r\n\r\n this._clock = new Timer();\r\n this._clock.start();\r\n\r\n this._listeners = [\r\n {\r\n obj: self.domElement,\r\n type: 'mousedown',\r\n handler(e) {\r\n self.mousedown(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseup',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousemove',\r\n handler(e) {\r\n self.mousemove(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchstart',\r\n handler(e) {\r\n self.touchstart(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchend',\r\n handler(e) {\r\n self.touchend(e);\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'resize',\r\n handler() {\r\n self.handleResize();\r\n },\r\n }];\r\n\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.addEventListener(l.type, l.handler);\r\n }\r\n\r\n this.handleResize();\r\n}\r\n\r\nPicker.prototype = Object.create(EventDispatcher.prototype);\r\nPicker.prototype.constructor = Picker;\r\n\r\nPicker.prototype.reset = function () {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n};\r\n\r\nPicker.prototype.handleResize = function () {\r\n if (this.domElement === document) {\r\n this.screen.left = 0;\r\n this.screen.top = 0;\r\n this.screen.width = window.innerWidth;\r\n this.screen.height = window.innerHeight;\r\n } else {\r\n const box = this.domElement.getBoundingClientRect();\r\n // adjustments come from similar code in the jquery offset() function\r\n const d = this.domElement.ownerDocument.documentElement;\r\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\r\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\r\n this.screen.width = box.width;\r\n this.screen.height = box.height;\r\n }\r\n};\r\n\r\nPicker.prototype.pickObject = function (screenPos) {\r\n if (!this.gfxObj) {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n return;\r\n }\r\n\r\n const { gfxObj } = this;\r\n const rayCaster = new THREE.Raycaster();\r\n rayCaster.ray.origin.setFromMatrixPosition(this.camera.matrixWorld);\r\n rayCaster.ray.direction.set(screenPos.x, screenPos.y, 0.5).unproject(this.camera).sub(rayCaster.ray.origin).normalize();\r\n\r\n const clipPlane = (settings.now.draft.clipPlane && this.clipPlaneValue) ? this.clipPlaneValue : Infinity;\r\n const fogFarPlane = (settings.now.fog && this.fogFarValue) ? this.fogFarValue : Infinity;\r\n const point = rayCaster.intersectVisibleObject(gfxObj, this.camera, clipPlane, fogFarPlane);\r\n if (!point) {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n return;\r\n }\r\n\r\n let picked = {};\r\n if (point.residue || point.atom) {\r\n const residue = point.residue || point.atom.residue;\r\n if (settings.now.pick === 'chain') {\r\n picked = { chain: residue.getChain() };\r\n } else if (settings.now.pick === 'molecule') {\r\n picked = { molecule: residue.getMolecule() };\r\n } else if (point.residue || settings.now.pick === 'residue') {\r\n picked = { residue };\r\n } else if (point.atom) {\r\n picked = { atom: point.atom };\r\n }\r\n }\r\n this.picked = picked;\r\n this.dispatchEvent({ type: 'newpick', obj: picked });\r\n};\r\n\r\nPicker.prototype.getMouseInViewport = function (pageX, pageY) {\r\n return new THREE.Vector2(\r\n (pageX - this.screen.left) / this.screen.width * 2 - 1,\r\n -(pageY - this.screen.top) / this.screen.height * 2 + 1,\r\n );\r\n};\r\n\r\nPicker.prototype.mousedown = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.button === 0) {\r\n this._lastMousePos = this.getMouseInViewport(event.pageX, event.pageY);\r\n this._mouseTotalDist = 0.0;\r\n this._clickBeginTime = this._clock.getElapsedTime();\r\n }\r\n};\r\n\r\nPicker.prototype.mousemove = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const pos = this.getMouseInViewport(event.pageX, event.pageY);\r\n this._mouseTotalDist += pos.sub(this._lastMousePos).length();\r\n};\r\n\r\nPicker.prototype.mouseup = function (event) {\r\n const self = this;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.button === 0) {\r\n if (this._mouseTotalDist < 0.01) {\r\n const curTime = this._clock.getElapsedTime();\r\n const curPos = this.getMouseInViewport(event.pageX, event.pageY);\r\n\r\n const timeSinceLastClickBegin = curTime - this._lastClickBeginTime;\r\n if (timeSinceLastClickBegin < 0.7) {\r\n const clickDist = new THREE.Vector2().subVectors(curPos, this._lastClickPos);\r\n if (clickDist.length() < 0.01) {\r\n // it's a double click\r\n this.dispatchEvent({ type: 'dblclick', obj: this.picked });\r\n\r\n this._lastClickPos = curPos;\r\n this._lastClickBeginTime = -1000; // this click cannot serve as first click in double-click\r\n return;\r\n }\r\n }\r\n\r\n setTimeout(() => {\r\n self.pickObject(curPos);\r\n }, 0);\r\n\r\n this._lastClickPos = curPos;\r\n this._lastClickBeginTime = this._clickBeginTime;\r\n }\r\n }\r\n};\r\n\r\nPicker.prototype.touchstart = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.touches.length === 1) {\r\n this._lastTouchdownPos = this.getMouseInViewport(event.touches[0].pageX, event.touches[0].pageY);\r\n }\r\n};\r\n\r\nPicker.prototype.touchend = function (event) {\r\n const self = this;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.touches.length === 0\r\n && event.changedTouches.length === 1) {\r\n const pos = this.getMouseInViewport(event.changedTouches[0].pageX, event.changedTouches[0].pageY);\r\n const dist = pos.sub(this._lastTouchdownPos).length();\r\n if (dist < 0.01) {\r\n setTimeout(() => {\r\n self.pickObject(self._lastTouchdownPos);\r\n }, 0);\r\n }\r\n }\r\n};\r\n\r\nPicker.prototype.dispose = function () {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.removeEventListener(l.type, l.handler);\r\n }\r\n};\r\n\r\nexport default Picker;\r\n","import * as THREE from 'three';\r\n\r\nclass Axes {\r\n constructor(target, targetCamera) {\r\n this._target = target;\r\n this._targetCamera = targetCamera;\r\n this._camera = new THREE.PerspectiveCamera(targetCamera.fov, targetCamera.aspect, 1, 100);\r\n this._object = new THREE.AxesHelper(1);\r\n this._scene = new THREE.Scene();\r\n this._scene.add(this._object);\r\n this._full = new THREE.Vector2();\r\n\r\n this._update();\r\n }\r\n\r\n _update() {\r\n const { fov } = this._targetCamera;\r\n const camera = this._camera;\r\n camera.aspect = this._targetCamera.aspect;\r\n camera.setMinimalFov(fov);\r\n camera.setDistanceToFit(1.0, fov);\r\n camera.updateProjectionMatrix();\r\n\r\n this._object.quaternion.copy(this._target.quaternion);\r\n }\r\n\r\n render(renderer) {\r\n this._update();\r\n\r\n renderer.getSize(this._full);\r\n const width = this._full.width * 0.25;\r\n const height = this._full.height * 0.25;\r\n\r\n const { autoClear } = renderer;\r\n renderer.autoClear = false;\r\n renderer.setViewport(0.0, 0.0, width, height);\r\n renderer.clear(false, true, false);\r\n renderer.render(this._scene, this._camera);\r\n renderer.setViewport(0, 0, this._full.width, this._full.height);\r\n renderer.autoClear = autoClear;\r\n }\r\n}\r\nexport default Axes;\r\n","import * as THREE from 'three';\r\nimport SecondaryStructureColorer from './colorers/SecondaryStructureColorer';\r\n\r\nconst cDataOffset = 12;\r\nconst cFirstMask = 0x0FFFFF00;\r\nconst cFirstShift = 8;\r\nconst cSecMask1 = 0x000000FF;\r\nconst cSecShift1 = 12;\r\nconst cSecMask2 = 0xFFF00000;\r\nconst cSecShift2 = 20;\r\nconst cThirdMask = 0x000FFFFF;\r\nconst cStrMask = 0xF0000000;\r\nconst cStrShift = 28;\r\nconst c219 = 1 << 19;\r\nconst c220 = 1 << 20;\r\n\r\nconst cHelixIdx = 1;\r\nconst cSheetIdx = 2;\r\nconst secTypes = ['helix', 'strand'];\r\nconst cSecNames = ['fs', 'ps', 'ns', 'us'];\r\n\r\nfunction _createSecondary(strArray, complex) {\r\n const residues = complex._residues;\r\n const nRes = residues.length;\r\n const resid = new Uint8Array(nRes);\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, n = strArray.length; i < n; ++i) {\r\n const atom = atoms[i];\r\n resid[atom.residue._index] = strArray[i];\r\n }\r\n\r\n const secondary = [];\r\n let rIdx = 0;\r\n while (rIdx < nRes) {\r\n if (resid[rIdx] !== 0) {\r\n const start = rIdx;\r\n const val = resid[rIdx];\r\n while (rIdx < nRes - 1 && resid[rIdx + 1] === val\r\n && residues[rIdx].isConnected(residues[rIdx + 1])) {\r\n ++rIdx;\r\n }\r\n secondary.push({ start, end: rIdx, type: secTypes[val - 1] });\r\n }\r\n ++rIdx;\r\n }\r\n return secondary;\r\n}\r\n\r\nfunction fromUInt20ToInt20(uint20) {\r\n return uint20 >= c219 ? uint20 - c220 : uint20;\r\n}\r\n\r\nclass FrameInfo {\r\n constructor(complex, payload, callbacks) {\r\n this._complex = complex;\r\n this._secondary = null;\r\n this.isLoading = false;\r\n this._framesRange = {\r\n start: 0,\r\n end: -1,\r\n };\r\n this.frameIsReady = false;\r\n this._buffer = null;\r\n this._frameRequest = null;\r\n this._callbacks = callbacks;\r\n if (typeof payload === 'function') {\r\n this._framesRequestLength = 1;\r\n this._downloadDataFn = payload;\r\n } else {\r\n this.parseBinaryData(payload, true);\r\n }\r\n this.reset();\r\n this.setFrame(0);\r\n }\r\n\r\n _prepareBuffer(framesStart, framesEnd) {\r\n if (framesStart === undefined || framesStart === null) {\r\n framesStart = 0;\r\n }\r\n if (framesEnd === undefined || framesEnd === null) {\r\n framesEnd = framesStart + this._framesRequestLength;\r\n }\r\n if (this._framesCount !== undefined) {\r\n framesEnd = Math.min(this._framesCount - 1, framesEnd);\r\n }\r\n if (this._downloadDataFn) {\r\n const self = this;\r\n const onDone = function (data) {\r\n self.isLoading = false;\r\n if (self._callbacks && typeof self._callbacks.onLoadStatusChanged === 'function') {\r\n self._callbacks.onLoadStatusChanged();\r\n }\r\n self._buffer = {\r\n data,\r\n state: 'ready',\r\n start: framesStart,\r\n end: framesEnd,\r\n };\r\n if (self._frameRequest !== null) {\r\n const idx = self._frameRequest;\r\n self._frameRequest = null;\r\n self.setFrame(idx);\r\n }\r\n };\r\n const onFail = function () {\r\n self.isLoading = false;\r\n if (self._callbacks && typeof self._callbacks.onError === 'function') {\r\n self._callbacks.onError('Streaming failed');\r\n }\r\n };\r\n if (!this._buffer) {\r\n this._buffer = {};\r\n }\r\n this._buffer.state = 'downloading';\r\n this.isLoading = true;\r\n if (self._callbacks && typeof self._callbacks.onLoadStatusChanged === 'function') {\r\n self._callbacks.onLoadStatusChanged();\r\n }\r\n this._downloadDataFn({ start: framesStart, end: framesEnd + 1 }, onDone, onFail);\r\n }\r\n }\r\n\r\n _parseBuffer() {\r\n if (this._buffer && this._buffer.state === 'ready') {\r\n this._framesRange = {\r\n start: this._buffer.start,\r\n end: this._buffer.end,\r\n };\r\n this.parseBinaryData(this._buffer.data, false);\r\n let _bufferRequestStart = (this._buffer.end + 1) % this._framesCount;\r\n if (_bufferRequestStart >= this._framesCount) {\r\n _bufferRequestStart = 0;\r\n }\r\n this._buffer = {\r\n state: 'none',\r\n };\r\n this._prepareBuffer(_bufferRequestStart, _bufferRequestStart + this._framesRequestLength);\r\n if (this._frameRequest !== null) {\r\n const idx = this._frameRequest;\r\n this._frameRequest = null;\r\n this.setFrame(idx);\r\n }\r\n }\r\n }\r\n\r\n parseBinaryData(arrayBuffer) {\r\n const dataView = new DataView(arrayBuffer);\r\n let offset = 0;\r\n const atomsCount = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const framesCount = dataView.getUint32(offset, true);\r\n this._framesCount = framesCount;\r\n this._framesRange.end = this._framesRange.end > 0\r\n ? Math.min(this._framesRange.end, framesCount - 1) : framesCount - 1;\r\n offset += 4;\r\n this._atomsCount = atomsCount;\r\n const maxSize = 1024 * 1024; // 1 MB\r\n this._framesRequestLength = Math.ceil(maxSize / (atomsCount * 8));\r\n const chunkedFramesCount = this._framesRange.end - this._framesRange.start + 1;\r\n if (atomsCount !== this._complex._atoms.length\r\n || arrayBuffer.byteLength !== cDataOffset + chunkedFramesCount * atomsCount * 8) {\r\n throw new Error();\r\n }\r\n const complex = this._complex;\r\n let timeStep = dataView.getUint32(offset, true);\r\n let iName = 0;\r\n while (timeStep > 1000 && iName < cSecNames.length - 1) {\r\n timeStep /= 1000;\r\n ++iName;\r\n }\r\n\r\n this._timeStep = `${timeStep.toString()} ${cSecNames[iName]}`;\r\n offset += 4;\r\n const secondary = [];\r\n const posData = new Float32Array(chunkedFramesCount * atomsCount * 3);\r\n let coordIdx = 0;\r\n const secondaryArr = new Int8Array(atomsCount);\r\n for (let j = 0; j < chunkedFramesCount; ++j) {\r\n for (let i = 0; i < atomsCount; ++i) {\r\n const hiWord = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const loWord = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const str = (loWord & cStrMask) >>> cStrShift;\r\n const x = fromUInt20ToInt20(((loWord & cFirstMask) >>> cFirstShift) >> 0);\r\n const y = fromUInt20ToInt20((((loWord & cSecMask1) << cSecShift1)\r\n | ((hiWord & cSecMask2) >>> cSecShift2)) >> 0);\r\n const z = fromUInt20ToInt20((hiWord & cThirdMask) >> 0);\r\n secondaryArr[i] = 0;\r\n if (str > 0 && str < 4) {\r\n secondaryArr[i] = cHelixIdx;\r\n } else if (str === 4) {\r\n secondaryArr[i] = cSheetIdx;\r\n }\r\n posData[coordIdx++] = x / 100;\r\n posData[coordIdx++] = y / 100;\r\n posData[coordIdx++] = z / 100;\r\n }\r\n secondary.push(_createSecondary(secondaryArr, complex));\r\n }\r\n this._secondaryData = secondary;\r\n this._data = posData;\r\n }\r\n\r\n nextFrame() {\r\n this.setFrame((this._currFrame + 1) % this._framesCount);\r\n }\r\n\r\n needsColorUpdate(colorer) {\r\n return colorer instanceof SecondaryStructureColorer;\r\n }\r\n\r\n getAtomColor(colorer, atom) {\r\n return colorer.getResidueColor(this._residues[atom.residue._index], this._complex);\r\n }\r\n\r\n getResidueColor(colorer, residue) {\r\n return colorer.getResidueColor(this._residues[residue._index], this._complex);\r\n }\r\n\r\n _updateSecondary() {\r\n let i;\r\n const myResidues = this._residues;\r\n let n = myResidues.length;\r\n for (i = 0; i < n; ++i) {\r\n myResidues[i]._secondary = null;\r\n }\r\n const sec = this._secondaryData[this._currFrame - this._framesRange.start];\r\n for (i = 0, n = sec.length; i < n; ++i) {\r\n const oldSec = sec[i];\r\n const { start, end } = oldSec;\r\n const nSec = {\r\n _start: myResidues[start],\r\n _end: myResidues[end],\r\n type: oldSec.type,\r\n generic: oldSec.generic,\r\n };\r\n for (let j = start; j <= end; ++j) {\r\n myResidues[j]._secondary = nSec;\r\n }\r\n }\r\n }\r\n\r\n reset() {\r\n const compRes = this._complex._residues;\r\n const n = compRes.length;\r\n this._residues = new Array(n);\r\n const myResidues = this._residues;\r\n const getSec = function () {\r\n return this._secondary;\r\n };\r\n for (let i = 0; i < n; ++i) {\r\n myResidues[i] = {\r\n _type: compRes[i]._type,\r\n _isValid: compRes[i]._isValid,\r\n _controlPoint: null,\r\n _wingVector: null,\r\n _secondary: null,\r\n getSecondary: getSec,\r\n };\r\n }\r\n }\r\n\r\n setFrame(frameIdx) {\r\n this.frameIsReady = false;\r\n if (frameIdx >= this._framesRange.start && frameIdx <= this._framesRange.end) {\r\n this._currFrame = frameIdx;\r\n this._cachedResidues = false;\r\n this._updateSecondary();\r\n this.frameIsReady = true;\r\n } else {\r\n this._frameRequest = frameIdx;\r\n if (!this._buffer) {\r\n this._prepareBuffer(frameIdx);\r\n } else {\r\n const self = this;\r\n switch (this._buffer.state) {\r\n case 'none':\r\n this._prepareBuffer(frameIdx);\r\n break;\r\n case 'ready':\r\n self._parseBuffer();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n disableEvents() {\r\n this._callbacks = null;\r\n }\r\n\r\n /**\r\n * Returns link to atom pos vector, clone it if needed\r\n */\r\n\r\n static _vec = new THREE.Vector3();\r\n\r\n getAtomPos(atomIdx) {\r\n const vec = FrameInfo._vec;\r\n const self = this;\r\n const data = self._data;\r\n const idx = (self._atomsCount * (self._currFrame - self._framesRange.start) + atomIdx) * 3;\r\n vec.set(data[idx], data[idx + 1], data[idx + 2]);\r\n return vec;\r\n }\r\n\r\n getResidues() {\r\n if (this._cachedResidues) {\r\n return this._residues;\r\n }\r\n this._complex.updateToFrame(this);\r\n return this._residues;\r\n }\r\n}\r\nexport default FrameInfo;\r\n","import _ from 'lodash';\r\nimport settings from '../../settings';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\n\r\n/**\r\n * Create new scene object.\r\n *\r\n * @param {array=} params - Object required params.\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the colorer after its creation.\r\n *\r\n * @exports SceneObject\r\n * @this SceneObject\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all scene objects that are not reps.\r\n */\r\nclass SceneObject {\r\n constructor(params, opts) {\r\n if (this.constructor === SceneObject) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Object's options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.params = params;\r\n this.opts = _.merge(utils.deriveDeep(settings.now.objects[this.type], true), opts);\r\n this.needsRebuild = false;\r\n this._mesh = null;\r\n this.id = null;\r\n }\r\n\r\n /**\r\n * Get object identification, probably with options.\r\n * @returns {Object} field type contains type information, params - object's formal parameters,\r\n * opts - changed options\r\n * Options are returned if they were changed during or after object creation.\r\n */\r\n identify() {\r\n const result = {\r\n type: this.type,\r\n params: this.params,\r\n };\r\n const diff = utils.objectsDiff(this.opts, settings.now.modes[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n result.opts = diff;\r\n }\r\n return result;\r\n }\r\n\r\n toString() {\r\n const paramsStr = `o=${this.type},${this.params.join(',')}`;\r\n const optsStr = utils.compareOptionsWithDefaults(this.opts, settings.defaults.objects[this.type]);\r\n return paramsStr + optsStr;\r\n }\r\n\r\n getGeometry() {\r\n return this._mesh;\r\n }\r\n\r\n destroy() {\r\n if (this._mesh) {\r\n gfxutils.destroyObject(this._mesh);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Scene object identifier.\r\n * @type {string}\r\n */\r\nSceneObject.prototype.type = '__';\r\n\r\nexport default SceneObject;\r\n","import * as THREE from 'three';\r\nimport SceneObject from './SceneObject';\r\nimport meshutils from '../meshutils';\r\nimport UberMaterial from '../shaders/UberMaterial';\r\nimport meshes from '../meshes/meshes';\r\nimport settings from '../../settings';\r\n\r\nclass LinesObj extends SceneObject {\r\n constructor(params, opts) {\r\n super(params, opts);\r\n if (params.length < 2) {\r\n throw new Error('Wrong number of argumets on line object creation!');\r\n }\r\n [this._id1, this._id2] = params;\r\n }\r\n\r\n _getAtomFromName(complex, atomId) {\r\n const err = ' - Wrong atom format it must be \\'#CHAIN_NAME.#RESIDUE_NUMBER.#ATOM_NAME\\' (e.g. \\'A.38.CO1\\')';\r\n const atom1 = complex.getAtomByFullname(atomId);\r\n if (!atom1) {\r\n throw new Error(atomId + err);\r\n }\r\n return atom1;\r\n }\r\n\r\n build(complex) {\r\n const geom = new THREE.BufferGeometry();\r\n this._atom1 = this._getAtomFromName(complex, this._id1);\r\n this._atom2 = this._getAtomFromName(complex, this._id2);\r\n\r\n const p1 = this._atom1.position;\r\n const p2 = this._atom2.position;\r\n const vertices = new Float32Array([\r\n p1.x, p1.y, p1.z,\r\n p2.x, p2.y, p2.z,\r\n ]);\r\n\r\n geom.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n geom.computeBoundingBox();\r\n\r\n this._line = new meshes.Line(geom, new UberMaterial({\r\n lights: false,\r\n overrideColor: true,\r\n dashedLine: true,\r\n fogTransparent: settings.now.bg.transparent,\r\n }));\r\n this._line.computeLineDistances();\r\n this._line.material.setUberOptions({\r\n fixedColor: new THREE.Color(this.opts.color),\r\n dashedLineSize: this.opts.dashSize,\r\n dashedLinePeriod: this.opts.dashSize + this.opts.gapSize,\r\n });\r\n this._line.material.updateUniforms();\r\n\r\n this._line.raycast = function (_raycaster, _intersects) {};\r\n this._mesh = this._line;\r\n const transforms = complex.getTransforms();\r\n if (transforms.length > 0) {\r\n this._mesh = new THREE.Group();\r\n this._mesh.add(this._line);\r\n meshutils.applyTransformsToMeshes(this._mesh, transforms);\r\n }\r\n }\r\n\r\n updateToFrame(frameData) {\r\n if (!this._atom1 || !this._atom2 || !this._line) {\r\n return;\r\n }\r\n\r\n const geo = this._line.geometry;\r\n geo.vertices[0].copy(frameData.getAtomPos(this._atom1.index));\r\n geo.vertices[1].copy(frameData.getAtomPos(this._atom2.index));\r\n this._line.computeLineDistances();\r\n geo.computeBoundingSphere();\r\n\r\n geo.verticesNeedUpdate = true;\r\n }\r\n}\r\n\r\nLinesObj.prototype.constructor = LinesObj;\r\nLinesObj.prototype.type = 'line';\r\n\r\nexport default LinesObj;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './Outline.frag';\r\n\r\nclass OutlineMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n // add depth outline\r\n super(params);\r\n\r\n const settings = {\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n srcDepthTex: { type: 't', value: null },\r\n srcTexSize: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n color: { type: 'v3', value: null },\r\n threshold: { type: 'f', value: null },\r\n opacity: { type: 'f', value: 1.0 },\r\n thickness: { type: 'v2', value: new THREE.Vector2(1, 1) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: true,\r\n depthTest: false,\r\n depthWrite: false,\r\n };\r\n\r\n this.setValues(settings);\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n this.depth = source.depth;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n const defines = {};\r\n\r\n if (this.depth) {\r\n defines.DEPTH_OUTLINE = 1;\r\n }\r\n\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nOutlineMaterial.prototype.depth = false;\r\n\r\nexport default OutlineMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './FXAA.frag';\r\n\r\nclass FXAAMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n bgColor: { type: 'c', value: new THREE.Color(0xffffff) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n this.depth = source.depth;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n\r\n if (this.bgTransparent) {\r\n defines.BG_TRANSPARENT = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nFXAAMaterial.prototype.bgTransparent = false;\r\n\r\nexport default FXAAMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AO.frag';\r\nimport noise from '../noiseTexture';\r\n\r\nconst _samplesKernel = [\r\n // hemisphere samples adopted to sphere\r\n new THREE.Vector3(0.295184, 0.077723, 0.068429),\r\n new THREE.Vector3(-0.271976, -0.365221, 0.838363),\r\n new THREE.Vector3(0.547713, 0.467576, 0.488515),\r\n new THREE.Vector3(0.662808, -0.031733, 0.584758),\r\n new THREE.Vector3(-0.025717, 0.218955, 0.657094),\r\n new THREE.Vector3(-0.310153, -0.365223, 0.370701),\r\n new THREE.Vector3(-0.101407, -0.006313, 0.747665),\r\n new THREE.Vector3(-0.769138, 0.360399, 0.086847),\r\n new THREE.Vector3(-0.271988, -0.275140, 0.905353),\r\n new THREE.Vector3(0.096740, -0.566901, 0.700151),\r\n new THREE.Vector3(0.562872, -0.735136, 0.094647),\r\n new THREE.Vector3(0.379877, 0.359278, 0.190061),\r\n new THREE.Vector3(0.519064, -0.023055, 0.405068),\r\n new THREE.Vector3(-0.301036, 0.114696, 0.088885),\r\n new THREE.Vector3(-0.282922, 0.598305, 0.487214),\r\n new THREE.Vector3(-0.181859, 0.251670, 0.679702),\r\n new THREE.Vector3(-0.191463, -0.635818, 0.512919),\r\n new THREE.Vector3(-0.293655, 0.427423, 0.078921),\r\n new THREE.Vector3(-0.267983, 0.680534, 0.132880),\r\n new THREE.Vector3(0.139611, 0.319637, 0.477439),\r\n new THREE.Vector3(-0.352086, 0.311040, 0.653913),\r\n new THREE.Vector3(0.321032, 0.805279, 0.487345),\r\n new THREE.Vector3(0.073516, 0.820734, 0.414183),\r\n new THREE.Vector3(-0.155324, 0.589983, 0.411460),\r\n new THREE.Vector3(0.335976, 0.170782, 0.527627),\r\n new THREE.Vector3(0.463460, -0.355658, 0.167689),\r\n new THREE.Vector3(0.222654, 0.596550, 0.769406),\r\n new THREE.Vector3(0.922138, -0.042070, 0.147555),\r\n new THREE.Vector3(-0.727050, -0.329192, 0.369826),\r\n new THREE.Vector3(-0.090731, 0.533820, 0.463767),\r\n new THREE.Vector3(-0.323457, -0.876559, 0.238524),\r\n new THREE.Vector3(-0.663277, -0.372384, 0.342856),\r\n];\r\n\r\nclass AOMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n noiseTexture: { type: 't', value: noise.noiseTexture },\r\n noiseTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / noise.noiseWidth, 1.0 / noise.noiseHeight) },\r\n diffuseTexture: { type: 't', value: null },\r\n normalTexture: { type: 't', value: null },\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n camNearFar: { type: 'v2', value: new THREE.Vector2(1.0, 10.0) },\r\n projMatrix: { type: 'mat4', value: new THREE.Matrix4() },\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n samplesKernel: { type: 'v3v', value: _samplesKernel },\r\n kernelRadius: { type: 'f', value: 1.0 },\r\n depthThreshold: { type: 'f', value: 1.0 },\r\n factor: { type: 'f', value: 1.0 },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n }\r\n}\r\n\r\nexport default AOMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AOHorBlur.frag';\r\n\r\nconst _kernelOffsets = [-2.0, -1.0, 0.0, 1.0, 2.0];\r\n\r\nclass AOHorBlurMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n aoMap: { type: 't', value: null },\r\n samplesOffsets: { type: 'fv1', value: _kernelOffsets },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n }\r\n}\r\n\r\nexport default AOHorBlurMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AOVertBlurWithBlend.frag';\r\n\r\nconst _kernelOffsets = [-2.0, -1.0, 0.0, 1.0, 2.0];\r\n\r\nclass AOVertBlurWithBlendMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n diffuseTexture: { type: 't', value: null },\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n aoMap: { type: 't', value: null },\r\n samplesOffsets: { type: 'fv1', value: _kernelOffsets },\r\n projMatrix: { type: 'mat4', value: new THREE.Matrix4() },\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n fogNearFar: { type: 'v2', value: new THREE.Vector2(100.0, 100.0) },\r\n fogColor: { type: 'v4', value: new THREE.Vector4(0.0, 0.5, 0.0, 1.0) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n\r\n if (this.useFog) {\r\n defines.USE_FOG = 1;\r\n }\r\n if (this.fogTransparent) {\r\n defines.FOG_TRANSPARENT = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nAOVertBlurWithBlendMaterial.prototype.useFog = true;\r\nAOVertBlurWithBlendMaterial.prototype.fogTransparent = false;\r\n\r\nexport default AOVertBlurWithBlendMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './Anaglyph.frag';\r\n\r\nclass AnaglyphMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n const settings = {\r\n uniforms: {\r\n srcL: { type: 't', value: null },\r\n srcR: { type: 't', value: null },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n };\r\n this.setValues(settings);\r\n }\r\n}\r\n\r\nexport default AnaglyphMaterial;\r\n","import * as THREE from 'three';\r\nimport settings from '../settings';\r\n\r\nclass View {\r\n constructor() {\r\n this.position = new THREE.Vector3(0, 0, 0);\r\n this.scale = 1;\r\n this.orientation = new THREE.Quaternion(0, 0, 0, 1);\r\n }\r\n\r\n set(position, scale, orientation) {\r\n this.position = position;\r\n this.scale = scale;\r\n this.orientation = orientation;\r\n }\r\n}\r\n\r\nconst _transitionTime = 1.5; // in seconds\r\n\r\nexport default class ViewInterpolator {\r\n setup(startView, endView) {\r\n this._startTime = undefined;\r\n this._endTime = undefined;\r\n this._isPaused = false;\r\n\r\n this._srcView = startView;\r\n this._dstView = endView;\r\n this._isMoving = false;\r\n }\r\n\r\n isMoving() {\r\n return this._isMoving;\r\n }\r\n\r\n wasStarted() {\r\n return typeof this._startTime !== 'undefined' && typeof this._endTime !== 'undefined';\r\n }\r\n\r\n start() {\r\n this._startTime = Date.now();\r\n const transTime = settings.now.interpolateViews ? _transitionTime * 1000 : 0;\r\n this._endTime = this._startTime + transTime;\r\n this._isMoving = true;\r\n }\r\n\r\n getCurrentView() {\r\n if (typeof this._srcView === 'undefined' || typeof this._dstView === 'undefined'\r\n || !this._isMoving || !this.wasStarted()) {\r\n return { success: false };\r\n }\r\n\r\n let view = this.createView();\r\n const time = Date.now();\r\n if (time > this._endTime) {\r\n view = this._dstView;\r\n this.reset();\r\n return { success: true, view };\r\n }\r\n\r\n const factor = (time - this._startTime) / (this._endTime - this._startTime);\r\n view.position.copy(this._srcView.position);\r\n view.position.lerp(this._dstView.position, factor);\r\n view.scale = (1 - factor) * this._srcView.scale + factor * this._dstView.scale;\r\n view.orientation.copy(this._srcView.orientation);\r\n view.orientation.slerp(this._dstView.orientation, factor);\r\n return { success: true, view };\r\n }\r\n\r\n reset() {\r\n this._startTime = this._endTime = 0;\r\n this._isMoving = false;\r\n }\r\n\r\n pause() {\r\n if (!this._isPaused) {\r\n this.setup(this.getCurrentView().view, this._dstView);\r\n this._isPaused = true;\r\n }\r\n }\r\n\r\n resume() {\r\n this._isPaused = false;\r\n }\r\n\r\n createView() {\r\n return new View();\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport makeContextDependent from './makeContextDependent';\r\n\r\nconst MAX_COOKIE_LEN = 4000;\r\nconst COUNT_SUFFIX = 'Cnt';\r\n\r\nfunction _chunkString(string, chunkLen) {\r\n const l = string.length;\r\n const chunks = [];\r\n for (let c = 0, lc = 0; lc < l; c++, lc += chunkLen) {\r\n chunks[c] = string.slice(lc, lc + chunkLen);\r\n }\r\n return chunks;\r\n}\r\n\r\n/**\r\n * Create new context dependent Cookie holder object.\r\n * @param context\r\n * @param {Object} opts - options\r\n * @param {string} opts.path - cookie path\r\n * @constructor\r\n */\r\nfunction Cookies(context, opts) {\r\n this.context = context;\r\n this._opts = _.merge({\r\n path: '/',\r\n }, opts);\r\n}\r\n\r\nmakeContextDependent(Cookies.prototype);\r\n\r\n/**\r\n * Remove cookie by the name.\r\n * @param key\r\n */\r\nCookies.prototype.removeCookie = function (key) {\r\n const cntKey = this._toCount(key);\r\n let cntVal = this._getSimpleCookie(cntKey);\r\n if (!cntVal) {\r\n this._removeSimpleCookie(key);\r\n return;\r\n }\r\n this._removeSimpleCookie(cntKey);\r\n cntVal = parseInt(cntVal, 10);\r\n for (let i = 0; i < cntVal; ++i) {\r\n this._removeSimpleCookie(key + i);\r\n }\r\n};\r\n\r\n/**\r\n * Set new cookie value. Automatically splits\r\n * values that are too large into multiple cookies.\r\n * @param key\r\n * @param value\r\n */\r\nCookies.prototype.setCookie = function (key, value) {\r\n this.removeCookie(key);\r\n value = encodeURIComponent(value);\r\n const values = _chunkString(value, MAX_COOKIE_LEN - key.length - 1);\r\n const cntVal = values.length;\r\n if (cntVal === 1) {\r\n this._setSimpleCookie(key, value);\r\n return;\r\n }\r\n const cntKey = this._toCount(key);\r\n this._setSimpleCookie(cntKey, cntVal.toString());\r\n for (let i = 0; i < cntVal; ++i) {\r\n this._setSimpleCookie(key + i, values[i]);\r\n }\r\n};\r\n\r\n/**\r\n * Obtain the value of a compound cookie.\r\n * @param key\r\n */\r\nCookies.prototype.getCookie = function (key) {\r\n const cntKey = this._toCount(key);\r\n let cntVal = this._getSimpleCookie(cntKey);\r\n if (!cntVal) {\r\n return this._getSimpleCookie(key);\r\n }\r\n cntVal = parseInt(cntVal, 10);\r\n const value = [];\r\n for (let i = 0; i < cntVal; ++i) {\r\n value[i] = this._getSimpleCookie(key + i);\r\n }\r\n return value.join('');\r\n};\r\n\r\nCookies.prototype._toCount = function (key) {\r\n return key + COUNT_SUFFIX;\r\n};\r\n\r\nCookies.prototype._removeSimpleCookie = function (key) {\r\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;\r\n};\r\n\r\nCookies.prototype._getExpirationDate = function () {\r\n const today = new Date();\r\n const EXP_PERIOD_YEARS = 10;\r\n today.setFullYear(today.getFullYear() + EXP_PERIOD_YEARS);\r\n return today;\r\n};\r\n\r\nCookies.prototype._setSimpleCookie = function (key, value) {\r\n document.cookie = `${key}=${value\r\n };expires=${this._getExpirationDate().toUTCString()\r\n };path=${this._opts.path}`;\r\n};\r\n\r\nCookies.prototype._getSimpleCookie = function (key) {\r\n const matches = document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`));\r\n return matches ? decodeURIComponent(matches[1]) : '';\r\n};\r\n\r\nCookies.prototype._exists = function (key) {\r\n return document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`));\r\n};\r\n\r\nexport default Cookies;\r\n","/*\r\n * Toggling WebVR is done through button.click because of limitations on calling requestPresent in webVR:\r\n * VRDisplay::requestPresent should be called from user gesture:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestPresent\r\n */\r\nexport default function (webVRPoC) {\r\n function showEnterVR(button) {\r\n button.style.display = '';\r\n button.style.cursor = 'pointer';\r\n button.style.left = 'calc(50% - 50px)';\r\n button.style.width = '100px';\r\n\r\n button.textContent = 'ENTER VR';\r\n\r\n let currentSession = null;\r\n\r\n function onSessionEnded(/* event */) {\r\n currentSession.removeEventListener('end', onSessionEnded);\r\n button.textContent = 'ENTER VR';\r\n currentSession = null;\r\n }\r\n\r\n function onSessionStarted(session) {\r\n session.addEventListener('end', onSessionEnded);\r\n webVRPoC._gfx.renderer.xr.setReferenceSpaceType('local');\r\n webVRPoC._gfx.renderer.xr.setSession(session);\r\n button.textContent = 'EXIT VR';\r\n currentSession = session;\r\n }\r\n\r\n button.onmouseenter = function () { button.style.opacity = '1.0'; };\r\n button.onmouseleave = function () { button.style.opacity = '0.5'; };\r\n\r\n button.onclick = function () {\r\n if (currentSession === null) {\r\n // WebXR's requestReferenceSpace only works if the corresponding feature\r\n // was requested at session creation time. For simplicity, just ask for\r\n // the interesting ones as optional features, but be aware that the\r\n // requestReferenceSpace call will fail if it turns out to be unavailable.\r\n // ('local' is always available for immersive sessions and doesn't need to\r\n // be requested separately.)\r\n\r\n const sessionInit = { optionalFeatures: ['local-floor', 'bounded-floor'] };\r\n navigator.xr.requestSession('immersive-vr', sessionInit).then(onSessionStarted);\r\n webVRPoC.moveSceneBehindHeadset();\r\n } else {\r\n currentSession.end();\r\n }\r\n };\r\n }\r\n\r\n function showWebXRNotFound(button) {\r\n button.style.display = '';\r\n button.style.cursor = 'auto';\r\n button.style.left = 'calc(50% - 75px)';\r\n button.style.width = '150px';\r\n button.textContent = 'VR NOT FOUND';\r\n button.onmouseenter = null;\r\n button.onmouseleave = null;\r\n button.onclick = null;\r\n }\r\n\r\n function stylizeElement(element) {\r\n element.style.position = 'absolute';\r\n element.style.bottom = '20px';\r\n element.style.padding = '12px 6px';\r\n element.style.border = '1px solid #fff';\r\n element.style.borderRadius = '4px';\r\n element.style.background = 'transparent';\r\n element.style.color = '#fff';\r\n element.style.font = 'normal 13px sans-serif';\r\n element.style.textAlign = 'center';\r\n element.style.opacity = '0.5';\r\n element.style.outline = 'none';\r\n element.style.zIndex = '999';\r\n }\r\n\r\n if ('xr' in navigator) {\r\n const button = document.createElement('button');\r\n button.style.display = 'none';\r\n stylizeElement(button);\r\n navigator.xr.isSessionSupported('immersive-vr').then((supported) => (\r\n supported ? showEnterVR(button) : showWebXRNotFound(button)\r\n ));\r\n return button;\r\n }\r\n const message = document.createElement('a');\r\n message.href = 'https://webvr.info';\r\n message.innerHTML = 'WEBXR NOT SUPPORTED';\r\n message.style.left = 'calc(50% - 90px)';\r\n message.style.width = '180px';\r\n message.style.textDecoration = 'none';\r\n stylizeElement(message);\r\n return message;\r\n}\r\n","import * as THREE from 'three';\r\nimport createWebVRButton from './createWebVRButton';\r\nimport gfxutils from '../gfxutils';\r\nimport logger from '../../utils/logger';\r\nimport settings from '../../settings';\r\nimport UberMaterial from '../shaders/UberMaterial';\r\n\r\nexport default class WebVRPoC {\r\n constructor(onToggle) {\r\n this._mainCamera = new THREE.PerspectiveCamera();\r\n this._button = null;\r\n this._onToggle = onToggle;\r\n\r\n this._molContainer = new gfxutils.RCGroup();\r\n this._user = new gfxutils.RCGroup();\r\n this._scalingPivot = new THREE.Object3D();\r\n this._user.add(this._scalingPivot);\r\n\r\n this._controller1 = null;\r\n this._controller2 = null;\r\n this._pressedGripsCounter = 0;\r\n this._distance = 0;\r\n\r\n this._gfx = null;\r\n }\r\n\r\n startScalingByControllers() {\r\n // reset scale\r\n this._distance = this._controller1.position.distanceTo(this._controller2.position);\r\n gfxutils.getMiddlePoint(this._controller1.position, this._controller2.position, this._scalingPivot.position);\r\n this._scalingPivot.scale.set(1, 1, 1);\r\n this._scalingPivot.updateMatrix();\r\n this._scalingPivot.updateMatrixWorld();\r\n // link molecule to pivot\r\n this._scalingPivot.addSavingWorldTransform(this._molContainer);\r\n }\r\n\r\n stopScalingByControllers() {\r\n this._gfx.scene.addSavingWorldTransform(this._molContainer);\r\n }\r\n\r\n handleGripsDown(event) {\r\n this._pressedGripsCounter++;\r\n if (this._pressedGripsCounter === 2) {\r\n this.startScalingByControllers();\r\n } else if (this._pressedGripsCounter === 1) {\r\n event.target.addSavingWorldTransform(this._molContainer);\r\n }\r\n }\r\n\r\n handleGripsUp(event) {\r\n this._pressedGripsCounter--;\r\n if (this._pressedGripsCounter === 1) {\r\n this.stopScalingByControllers();\r\n // reattach molecule to other controller\r\n const anotherController = event.target === this._controller1 ? this._controller2 : this._controller1;\r\n anotherController.addSavingWorldTransform(this._molContainer);\r\n } else if (this._pressedGripsCounter === 0) {\r\n this._gfx.scene.addSavingWorldTransform(this._molContainer);\r\n }\r\n }\r\n\r\n enable(gfx) {\r\n if (!gfx) {\r\n logger.warn('WebVR couldn\\'t be enabled, because gfx is not defined');\r\n return;\r\n }\r\n this._gfx = gfx;\r\n const { renderer, camera } = gfx;\r\n if (!renderer) {\r\n throw new Error('No renderer is available to toggle WebVR');\r\n }\r\n if (!camera) {\r\n throw new Error('No camera is available to toggle WebVR');\r\n }\r\n\r\n // enable xr in renderer\r\n renderer.xr.enabled = true;\r\n // add button for turning vr mode\r\n if (!this._button) {\r\n this._button = createWebVRButton(this);\r\n document.body.appendChild(this._button);\r\n } else {\r\n this._button.style.display = 'block';\r\n }\r\n // store fog setting\r\n this._mainFog = settings.now.fog;\r\n settings.set('fog', false);\r\n\r\n this._plugVRNodesIntoScene(gfx, renderer);\r\n this._setControllersListeners();\r\n\r\n // make some Miew job\r\n if (this._onToggle) {\r\n this._onToggle(true);\r\n }\r\n }\r\n\r\n _plugVRNodesIntoScene(gfx, renderer) {\r\n // store common scene camera\r\n this._mainCamera.copy(gfx.camera);\r\n // add hierarchical structure for webVR into scene\r\n gfx.scene.add(this._user);\r\n // turn on webvr transformation\r\n gfx.scene.add(this._molContainer);\r\n this._molContainer.add(gfx.root);\r\n\r\n this._controller1 = renderer.xr.getController(0);\r\n this._controller2 = renderer.xr.getController(1);\r\n const mesh = this._createControllerMesh();\r\n this._controller1.add(mesh);\r\n this._controller2.add(mesh.clone());\r\n this._user.add(this._controller1);\r\n this._user.add(this._controller2);\r\n }\r\n\r\n _setControllersListeners() {\r\n this._controller1.addEventListener('selectstart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller1.addEventListener('selectend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n this._controller2.addEventListener('selectstart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller2.addEventListener('selectend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n\r\n this._controller1.addEventListener('squeezestart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller1.addEventListener('squeezeend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n this._controller2.addEventListener('squeezestart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller2.addEventListener('squeezeend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n }\r\n\r\n disable() {\r\n if (!this._gfx) {\r\n return;\r\n }\r\n const { renderer, camera } = this._gfx;\r\n if (!renderer) {\r\n throw new Error('No renderer is available to toggle WebVR');\r\n }\r\n\r\n // nullify webxr callback for animation frame\r\n renderer.setAnimationLoop(null);\r\n const session = renderer.xr.getSession();\r\n if (session) {\r\n session.end();\r\n }\r\n renderer.xr.enabled = false;\r\n // remove button of VR entering\r\n if (this._button) {\r\n this._button.style.display = 'none';\r\n }\r\n // restore fog param\r\n settings.set('fog', this._mainFog);\r\n\r\n this._unplugVRNodesFromScene(camera);\r\n\r\n // make some Miew job\r\n if (this._onToggle) {\r\n this._onToggle(false);\r\n }\r\n }\r\n\r\n _unplugVRNodesFromScene(camera) {\r\n // restore common camera\r\n if (this._mainCamera && camera) {\r\n camera.copy(this._mainCamera);\r\n }\r\n // turn off webvr transformation\r\n const root = this._molContainer.children[0];\r\n if (root) {\r\n this._gfx.scene.add(root);\r\n }\r\n this._molContainer.parent.remove(this._molContainer);\r\n if (this._user) {\r\n this._gfx.scene.remove(this._user);\r\n }\r\n // free scene nodes\r\n this._molContainer = null;\r\n this._user = null;\r\n this._scalingPivot = null;\r\n this._user = null;\r\n this._controller1 = null;\r\n this._controller2 = null;\r\n }\r\n\r\n _createControllerMesh() {\r\n // visualize controllers with cylinders\r\n const geometry = new THREE.CylinderGeometry(0.04, 0.04, 0.3);\r\n const material = new UberMaterial({ lights: false, overrideColor: true });\r\n material.setUberOptions({ fixedColor: new THREE.Color(0x4444ff) });\r\n material.updateUniforms();\r\n const cylinder = new THREE.Mesh(geometry, material);\r\n cylinder.rotateX(-Math.PI / 2);\r\n return cylinder;\r\n }\r\n\r\n updateMoleculeScale() {\r\n if (!this._controller1 || !this._controller2) {\r\n return;\r\n }\r\n\r\n const self = this;\r\n // update molecule scaling by controllers\r\n if (self._pressedGripsCounter === 2) {\r\n // recalc scaling pivot\r\n gfxutils.getMiddlePoint(self._controller1.position, self._controller2.position, self._scalingPivot.position);\r\n // recalc scaler\r\n const dist = self._controller1.position.distanceTo(self._controller2.position);\r\n const scaler = dist / self._distance;\r\n self._scalingPivot.scale.multiplyScalar(scaler);\r\n // save cur distance for next frame\r\n self._distance = dist;\r\n }\r\n }\r\n\r\n /**\r\n * Reposition molecule right before the camera.\r\n * @note The proper way is to initiate headset in the place of common Miew's camera.\r\n * But threejs limitations on setting new XRReferenceSpace enforce the molecule repositioning\r\n * Hope, something will change.\r\n */\r\n moveSceneBehindHeadset() {\r\n const gfx = this._gfx;\r\n const { camera } = gfx;\r\n\r\n // set container position in camera space\r\n const container = this._molContainer;\r\n container.matrix.identity();\r\n container.position.set(0, 0, -4.0);\r\n container.updateMatrix();\r\n\r\n // update container world matrix\r\n container.matrixWorld.multiplyMatrices(camera.matrixWorld, container.matrix);\r\n // readd to scene\r\n gfx.scene.addSavingWorldTransform(container);\r\n if (this._onToggle) {\r\n this._onToggle(true);\r\n }\r\n }\r\n\r\n getCanvas() {\r\n const gfx = this._gfx;\r\n return (gfx && gfx.renderer) ? gfx.renderer.domElement : null;\r\n }\r\n}\r\n","/* global PACKAGE_VERSION:false */\r\nimport _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport { Spinner } from 'spin.js';\r\nimport Stats from './gfx/Stats';\r\nimport utils from './utils';\r\nimport JobHandle from './utils/JobHandle';\r\nimport options from './options';\r\nimport settings from './settings';\r\nimport chem from './chem';\r\nimport Visual from './Visual';\r\nimport ComplexVisual from './ComplexVisual';\r\nimport Complex from './chem/Complex';\r\nimport VolumeVisual from './VolumeVisual';\r\nimport io from './io/io';\r\nimport modes from './gfx/modes';\r\nimport colorers from './gfx/colorers';\r\nimport palettes from './gfx/palettes';\r\nimport materials from './gfx/materials';\r\nimport Representation from './gfx/Representation';\r\nimport CSS2DRenderer from './gfx/CSS2DRenderer';\r\nimport ObjectControls from './ui/ObjectControls';\r\nimport Picker from './ui/Picker';\r\nimport Axes from './gfx/Axes';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport meshutils from './gfx/meshutils';\r\nimport FrameInfo from './gfx/FrameInfo';\r\nimport meshes from './gfx/meshes/meshes';\r\nimport LinesObject from './gfx/objects/LinesObj';\r\nimport UberMaterial from './gfx/shaders/UberMaterial';\r\nimport OutlineMaterial from './gfx/shaders/OutlineMaterial';\r\nimport FXAAMaterial from './gfx/shaders/FXAAMaterial';\r\nimport AOMaterial from './gfx/shaders/AOMaterial';\r\nimport AOHorBlurMaterial from './gfx/shaders/AOHorBlurMaterial';\r\nimport AOVertBlurWithBlendMaterial from './gfx/shaders/AOVertBlurWithBlendMaterial';\r\nimport AnaglyphMaterial from './gfx/shaders/AnaglyphMaterial';\r\nimport VolumeMaterial from './gfx/shaders/VolumeMaterial';\r\nimport ViewInterpolator from './gfx/ViewInterpolator';\r\nimport EventDispatcher from './utils/EventDispatcher';\r\nimport logger from './utils/logger';\r\nimport Cookies from './utils/Cookies';\r\nimport capabilities from './gfx/capabilities';\r\nimport WebVRPoC from './gfx/vr/WebVRPoC';\r\nimport vertexScreenQuadShader from './gfx/shaders/ScreenQuad.vert';\r\nimport fragmentScreenQuadFromDistTex from './gfx/shaders/ScreenQuadFromDistortionTex.frag';\r\nimport getTopWindow from './utils/getTopWindow';\r\n\r\nconst {\r\n selectors,\r\n Atom,\r\n Residue,\r\n Chain,\r\n Molecule,\r\n} = chem;\r\n\r\nconst EDIT_MODE = { COMPLEX: 0, COMPONENT: 1, FRAGMENT: 2 };\r\n\r\nconst LOADER_NOT_FOUND = 'Could not find suitable loader for this source';\r\nconst PARSER_NOT_FOUND = 'Could not find suitable parser for this source';\r\n\r\n// Color management changed a lot in threejs 152+ version.\r\n// To keep miew colors we disable the new color management system\r\nTHREE.ColorManagement.enabled = false;\r\n\r\nconst { createElement } = utils;\r\n\r\nfunction updateFogRange(fog, center, radius) {\r\n fog.near = center - radius * settings.now.fogNearFactor;\r\n fog.far = center + radius * settings.now.fogFarFactor;\r\n}\r\n\r\nfunction removeExtension(fileName) {\r\n const dot = fileName.lastIndexOf('.');\r\n if (dot >= 0) {\r\n fileName = fileName.substr(0, dot);\r\n }\r\n return fileName;\r\n}\r\n\r\nfunction hasValidResidues(complex) {\r\n let hasValidRes = false;\r\n complex.forEachComponent((component) => {\r\n component.forEachResidue((residue) => {\r\n if (residue._isValid) {\r\n hasValidRes = true;\r\n }\r\n });\r\n });\r\n return hasValidRes;\r\n}\r\n\r\nfunction reportProgress(log, action, percent) {\r\n const TOTAL_PERCENT = 100;\r\n if (percent !== undefined) {\r\n log.debug(`${action}... ${Math.floor(percent * TOTAL_PERCENT)}%`);\r\n } else {\r\n log.debug(`${action}...`);\r\n }\r\n}\r\n\r\nfunction chooseFogColor() {\r\n return settings.now.fogColorEnable ? settings.now.fogColor : settings.now.bg.color;\r\n}\r\n\r\n// ////////////////////////////////////////////////////////////////////////////\r\n\r\n/**\r\n * Main 3D Molecular Viewer class.\r\n *\r\n * @param {object} opts - Viewer options.\r\n * @param {HTMLElement=} opts.container - DOM element that serves as a viewer container.\r\n * @param {object=} opts.settings - An object with properties to override default settings.\r\n * @param {string=} opts.settingsCookie='settings' - The name of the cookie to save current settings to.\r\n * @param {string=} opts.cookiePath='/' - The path option for cookies. Defaults to root.\r\n *\r\n * @exports Miew\r\n * @constructor\r\n */\r\nfunction Miew(opts) {\r\n EventDispatcher.call(this);\r\n this._opts = _.merge({\r\n settingsCookie: 'settings',\r\n cookiePath: '/',\r\n }, opts);\r\n /** @type {?object} */\r\n this._gfx = null;\r\n /** @type {ViewInterpolator} */\r\n this._interpolator = new ViewInterpolator();\r\n /** @type {HTMLElement} */\r\n this._container = (opts && opts.container)\r\n || document.getElementById('miew-container')\r\n || _.head(document.getElementsByClassName('miew-container'))\r\n || document.body;\r\n /** @type {HTMLElement} */\r\n this._containerRoot = this._container;\r\n\r\n /** @type {boolean} */\r\n this._running = false;\r\n /** @type {boolean} */\r\n this._halting = false;\r\n /** @type {boolean} */\r\n this._building = false;\r\n /** @type {boolean} */\r\n this._needRender = true;\r\n /** @type {boolean} */\r\n this._hotKeysEnabled = true;\r\n\r\n /** @type {Settings} */\r\n this.settings = settings;\r\n const log = logger;\r\n log.console = DEBUG;\r\n log.level = DEBUG ? 'debug' : 'info';\r\n /**\r\n * @type {Logger}\r\n * @example\r\n * miew.logger.addEventListener('message', function _onLogMessage(evt) {\r\n * console.log(evt.message);\r\n * });\r\n */\r\n this.logger = log;\r\n\r\n this._cookies = new Cookies(this);\r\n this.restoreSettings();\r\n if (opts && opts.settings) {\r\n this.settings.set(opts.settings);\r\n }\r\n\r\n /** @type {?Spinner} */\r\n this._spinner = null;\r\n /** @type {JobHandle[]} */\r\n this._loading = [];\r\n /** @type {?number}\r\n * @deprecated until Animation system refactoring\r\n */\r\n this._animInterval = null;\r\n\r\n /** @type {object} */\r\n this._visuals = {};\r\n /** @type {?string} */\r\n this._curVisualName = null;\r\n\r\n /** @type {array} */\r\n this._objects = [];\r\n\r\n /** @type {object} */\r\n this._sourceWindow = null;\r\n\r\n this.reset();\r\n\r\n if (this._repr) {\r\n log.debug(`Selected ${this._repr.mode.name} mode with ${this._repr.colorer.name} colorer.`);\r\n }\r\n\r\n const self = this;\r\n Miew.registeredPlugins.forEach((plugin) => {\r\n plugin.call(self);\r\n });\r\n\r\n this._initOnSettingsChanged();\r\n}\r\n\r\nMiew.prototype = Object.create(EventDispatcher.prototype);\r\nMiew.prototype.constructor = Miew;\r\n\r\nMiew.prototype.getMaxRepresentationCount = function () {\r\n return ComplexVisual.NUM_REPRESENTATION_BITS;\r\n};\r\n\r\n/**\r\n * Replace viewer container contents with a DOM element.\r\n * @param {HTMLElement} container - parent container.\r\n * @param {HTMLElement} element - DOM element to show.\r\n * @private\r\n */\r\nfunction _setContainerContents(container, element) {\r\n const parent = container;\r\n while (parent.firstChild) {\r\n parent.removeChild(parent.firstChild);\r\n }\r\n parent.appendChild(element);\r\n}\r\n\r\n/**\r\n * Update Shadow Camera target position and frustum.\r\n * @private\r\n */\r\nMiew.prototype._updateShadowCamera = (function () {\r\n const shadowMatrix = new THREE.Matrix4();\r\n const direction = new THREE.Vector3();\r\n const OBB = { center: new THREE.Vector3(), halfSize: new THREE.Vector3() };\r\n\r\n return function () {\r\n this._gfx.scene.updateMatrixWorld();\r\n for (let i = 0; i < this._gfx.scene.children.length; i++) {\r\n if (this._gfx.scene.children[i].type === 'DirectionalLight') {\r\n const light = this._gfx.scene.children[i];\r\n shadowMatrix.copy(light.shadow.camera.matrixWorldInverse);\r\n this.getOBB(shadowMatrix, OBB);\r\n\r\n direction.subVectors(light.target.position, light.position);\r\n light.position.subVectors(OBB.center, direction);\r\n light.target.position.copy(OBB.center);\r\n\r\n light.shadow.bias = 0.09;\r\n light.shadow.camera.bottom = -OBB.halfSize.y;\r\n light.shadow.camera.top = OBB.halfSize.y;\r\n light.shadow.camera.right = OBB.halfSize.x;\r\n light.shadow.camera.left = -OBB.halfSize.x;\r\n light.shadow.camera.near = direction.length() - OBB.halfSize.z;\r\n light.shadow.camera.far = direction.length() + OBB.halfSize.z;\r\n\r\n light.shadow.camera.updateProjectionMatrix();\r\n }\r\n }\r\n };\r\n}());\r\n\r\n/**\r\n * Initialize the viewer.\r\n * @returns {boolean} true on success.\r\n * @throws Forwards exception raised during initialization.\r\n * @see Miew#term\r\n */\r\nMiew.prototype.init = function () {\r\n const container = this._container;\r\n const elem = utils.createElement('div', { class: 'miew-canvas' });\r\n _setContainerContents(container, elem);\r\n this._container = elem;\r\n\r\n const frag = document.createDocumentFragment();\r\n frag.appendChild(this._msgMode = createElement(\r\n 'div',\r\n { class: 'mode-message overlay' },\r\n createElement('p', {}, 'COMPONENT EDIT MODE'),\r\n ));\r\n frag.appendChild(this._msgAtomInfo = createElement(\r\n 'div',\r\n { class: 'atom-info overlay' },\r\n createElement('p', {}, ''),\r\n ));\r\n container.appendChild(frag);\r\n\r\n if (this._gfx !== null) { // block double init\r\n return true;\r\n }\r\n\r\n const self = this;\r\n this._showMessage('Viewer is being initialized...');\r\n try {\r\n this._initGfx();\r\n\r\n this._initListeners();\r\n this._spinner = new Spinner({\r\n lines: 13,\r\n length: 28,\r\n width: 14,\r\n radius: 42,\r\n color: '#fff',\r\n zIndex: 700,\r\n });\r\n\r\n const target = getTopWindow();\r\n target.addEventListener('keydown', (event) => {\r\n self._onKeyDown(event);\r\n });\r\n\r\n target.addEventListener('keyup', (event) => {\r\n self._onKeyUp(event);\r\n });\r\n\r\n this._objectControls = new ObjectControls(\r\n this._gfx.root,\r\n this._gfx.pivot,\r\n this._gfx.camera,\r\n this._gfx.renderer.domElement,\r\n () => self._getAltObj(),\r\n );\r\n this._objectControls.addEventListener('change', (e) => {\r\n if (settings.now.shadow.on) {\r\n self._updateShadowCamera();\r\n }\r\n // route rotate, zoom, translate and translatePivot events to the external API\r\n switch (e.action) {\r\n case 'rotate':\r\n self.dispatchEvent({ type: 'rotate', quaternion: e.quaternion });\r\n break;\r\n case 'zoom':\r\n self.dispatchEvent({ type: 'zoom', factor: e.factor });\r\n break;\r\n default:\r\n self.dispatchEvent({ type: e.action });\r\n }\r\n self.dispatchEvent({ type: 'transform' });\r\n self._needRender = true;\r\n });\r\n\r\n const gfx = this._gfx;\r\n this._picker = new Picker(gfx.root, gfx.camera, gfx.renderer.domElement);\r\n this._picker.addEventListener('newpick', (event) => {\r\n self._onPick(event);\r\n });\r\n this._picker.addEventListener('dblclick', (event) => {\r\n self.center(event);\r\n });\r\n } catch (error) {\r\n if (error.name === 'TypeError' && error.message === 'Cannot read property \\'getExtension\\' of null') {\r\n this._showMessage('Could not create WebGL context.');\r\n } else if (error.message.search(/webgl/i) > 1) {\r\n this._showMessage(error.message);\r\n } else {\r\n this._showMessage('Viewer initialization failed.');\r\n throw error;\r\n }\r\n return false;\r\n }\r\n\r\n // automatically load default file\r\n const file = this._opts && this._opts.load;\r\n if (file) {\r\n const type = this._opts && this._opts.type;\r\n this.load(file, { fileType: type, keepRepsInfo: true });\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Terminate the viewer completely.\r\n * @see Miew#init\r\n */\r\nMiew.prototype.term = function () {\r\n this._showMessage('Viewer has been terminated.');\r\n this._loading.forEach((job) => {\r\n job.cancel();\r\n });\r\n this._loading.length = 0;\r\n this.halt();\r\n this._gfx = null;\r\n};\r\n\r\n/**\r\n * Display message inside the viewer container, hiding WebGL canvas.\r\n * @param {string} msg - Message to show.\r\n * @private\r\n */\r\nMiew.prototype._showMessage = function (msg) {\r\n const element = document.createElement('div');\r\n element.setAttribute('class', 'miew-message');\r\n element.appendChild(document.createElement('p')).appendChild(document.createTextNode(msg));\r\n _setContainerContents(this._container, element);\r\n};\r\n\r\n/**\r\n * Display WebGL canvas inside the viewer container, hiding any message shown.\r\n * @private\r\n */\r\nMiew.prototype._showCanvas = function () {\r\n _setContainerContents(this._container, this._gfx.renderer.domElement);\r\n};\r\n\r\nMiew.prototype._requestAnimationFrame = function (callback) {\r\n const { xr } = this._gfx.renderer;\r\n if (xr && xr.enabled) {\r\n this._gfx.renderer.setAnimationLoop(callback);\r\n return;\r\n }\r\n requestAnimationFrame(callback);\r\n};\r\n\r\n/**\r\n * Initialize WebGL and set 3D scene up.\r\n * @private\r\n */\r\nMiew.prototype._initGfx = function () {\r\n const gfx = {\r\n width: this._container.clientWidth,\r\n height: this._container.clientHeight,\r\n };\r\n\r\n const webGLOptions = { preserveDrawingBuffer: true, alpha: true, premultipliedAlpha: false };\r\n if (settings.now.antialias) {\r\n webGLOptions.antialias = true;\r\n }\r\n\r\n gfx.renderer2d = new CSS2DRenderer();\r\n\r\n gfx.renderer = new THREE.WebGLRenderer(webGLOptions);\r\n gfx.renderer.shadowMap.enabled = settings.now.shadow.on;\r\n gfx.renderer.shadowMap.autoUpdate = false;\r\n gfx.renderer.shadowMap.type = THREE.PCFShadowMap;\r\n capabilities.init(gfx.renderer);\r\n\r\n gfx.renderer.autoClear = false;\r\n gfx.renderer.setPixelRatio(window.devicePixelRatio);\r\n gfx.renderer.setSize(gfx.width, gfx.height);\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.clearColor();\r\n\r\n gfx.renderer2d.setSize(gfx.width, gfx.height);\r\n\r\n gfx.camera = new THREE.PerspectiveCamera(\r\n settings.now.camFov,\r\n gfx.width / gfx.height,\r\n settings.now.camNear,\r\n settings.now.camFar,\r\n );\r\n gfx.camera.setMinimalFov(settings.now.camFov);\r\n gfx.camera.position.z = settings.now.camDistance;\r\n gfx.camera.updateProjectionMatrix();\r\n gfx.camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n gfx.camera.layers.enable(gfxutils.LAYERS.VOLUME);\r\n gfx.camera.layers.enable(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n\r\n gfx.stereoCam = new THREE.StereoCamera();\r\n\r\n gfx.scene = new THREE.Scene();\r\n\r\n const color = chooseFogColor();\r\n gfx.scene.fog = new THREE.Fog(color, settings.now.camNear, settings.now.camFar);\r\n\r\n gfx.root = new gfxutils.RCGroup();\r\n gfx.scene.add(gfx.root);\r\n\r\n gfx.pivot = new gfxutils.RCGroup();\r\n gfx.root.add(gfx.pivot);\r\n\r\n gfx.selectionScene = new THREE.Scene();\r\n gfx.selectionRoot = new THREE.Group();\r\n gfx.selectionRoot.matrixAutoUpdate = false;\r\n gfx.selectionScene.add(gfx.selectionRoot);\r\n\r\n gfx.selectionPivot = new THREE.Group();\r\n gfx.selectionPivot.matrixAutoUpdate = false;\r\n gfx.selectionRoot.add(gfx.selectionPivot);\r\n\r\n const light12 = new THREE.DirectionalLight(0xffffff, 0.45);\r\n light12.position.set(0, 0.414, 1);\r\n light12.layers.enable(gfxutils.LAYERS.TRANSPARENT);\r\n light12.castShadow = true;\r\n light12.shadow.bias = 0.09;\r\n light12.shadow.radius = settings.now.shadow.radius;\r\n light12.shadow.camera.layers.set(gfxutils.LAYERS.SHADOWMAP);\r\n\r\n const pixelRatio = gfx.renderer.getPixelRatio();\r\n const shadowMapSize = Math.max(gfx.width, gfx.height) * pixelRatio;\r\n light12.shadow.mapSize.width = shadowMapSize;\r\n light12.shadow.mapSize.height = shadowMapSize;\r\n light12.target.position.set(0.0, 0.0, 0.0);\r\n gfx.scene.add(light12);\r\n gfx.scene.add(light12.target);\r\n\r\n const light3 = new THREE.AmbientLight(0x666666);\r\n light3.layers.enable(gfxutils.LAYERS.TRANSPARENT);\r\n gfx.scene.add(light3);\r\n\r\n // add axes\r\n gfx.axes = new Axes(gfx.root, gfx.camera);\r\n const deviceWidth = gfx.width * pixelRatio;\r\n const deviceHeight = gfx.height * pixelRatio;\r\n\r\n gfx.offscreenBuf = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat, depthBuffer: true,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf.depthTexture = new THREE.DepthTexture();\r\n gfx.offscreenBuf.depthTexture.type = THREE.UnsignedShortType;\r\n\r\n gfx.offscreenBuf2 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf3 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf4 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.volBFTex = gfx.offscreenBuf3;\r\n gfx.volFFTex = gfx.offscreenBuf4;\r\n gfx.volWFFTex = gfx.offscreenBuf;\r\n\r\n // use float textures for volume rendering (WebGL2 core feature)\r\n gfx.offscreenBuf5 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf6 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf7 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: true,\r\n },\r\n );\r\n\r\n gfx.volBFTex = gfx.offscreenBuf5;\r\n gfx.volFFTex = gfx.offscreenBuf6;\r\n gfx.volWFFTex = gfx.offscreenBuf7;\r\n\r\n gfx.stereoBufL = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.stereoBufR = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n this._gfx = gfx;\r\n this._showCanvas();\r\n\r\n this._embedWebXR(settings.now.stereo === 'WEBVR');\r\n\r\n this._container.appendChild(gfx.renderer2d.getElement());\r\n\r\n // add FPS counter\r\n const stats = new Stats();\r\n stats.domElement.style.position = 'absolute';\r\n stats.domElement.style.right = '0';\r\n stats.domElement.style.bottom = '0';\r\n this._container.appendChild(stats.domElement);\r\n this._fps = stats;\r\n this._fps.show(settings.now.fps);\r\n};\r\n\r\n/**\r\n * Setup event listeners.\r\n * @private\r\n */\r\nMiew.prototype._initListeners = function () {\r\n const self = this;\r\n window.addEventListener('resize', () => {\r\n self._onResize();\r\n });\r\n};\r\n\r\n/**\r\n * Try to add numbers to the base name to make it unique among visuals\r\n * @private\r\n */\r\nMiew.prototype._makeUniqueVisualName = function (baseName) {\r\n if (!baseName) {\r\n return Math.random().toString();\r\n }\r\n\r\n let name = baseName;\r\n let suffix = 1;\r\n while (this._visuals.hasOwnProperty(name)) {\r\n name = `${baseName} (${suffix.toString()})`;\r\n suffix++;\r\n }\r\n\r\n return name;\r\n};\r\n\r\n/**\r\n * Add visual to the viewer\r\n * @private\r\n */\r\nMiew.prototype._addVisual = function (visual) {\r\n if (!visual) {\r\n return null;\r\n }\r\n\r\n // change visual name in order to make it unique\r\n const name = this._makeUniqueVisualName(visual.name);\r\n visual.name = name;\r\n\r\n this._visuals[name] = visual;\r\n this._gfx.pivot.add(visual);\r\n if (visual.getSelectionGeo) {\r\n this._gfx.selectionPivot.add(visual.getSelectionGeo());\r\n }\r\n\r\n return name;\r\n};\r\n\r\n/**\r\n * Remove visual from the viewer\r\n * @private\r\n */\r\nMiew.prototype._removeVisual = function (visual) {\r\n let name = '';\r\n let obj = null;\r\n if (visual instanceof Visual) {\r\n ({ name } = visual);\r\n obj = visual;\r\n } else if (typeof visual === 'string') {\r\n name = visual;\r\n obj = this._visuals[name];\r\n }\r\n\r\n if (!obj || !this._visuals.hasOwnProperty(name) || this._visuals[name] !== obj) {\r\n return;\r\n }\r\n\r\n if (name === this._curVisualName) {\r\n this._curVisualName = undefined;\r\n }\r\n\r\n delete this._visuals[name];\r\n obj.release(); // removes nodes from scene\r\n\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Call specified function for each Visual\r\n * @private\r\n */\r\nMiew.prototype._forEachVisual = function (callback) {\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)) {\r\n callback(this._visuals[name]);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Release (destroy) all visuals in the scene\r\n * @private\r\n */\r\nMiew.prototype._releaseAllVisuals = function () {\r\n if (!this._gfx || !this._gfx.pivot) {\r\n return;\r\n }\r\n\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)) {\r\n this._visuals[name].release();\r\n }\r\n }\r\n\r\n this._visuals = {};\r\n};\r\n\r\n/**\r\n * Call specified function for each ComplexVisual\r\n * @private\r\n */\r\nMiew.prototype._forEachComplexVisual = function (callback) {\r\n if (!this._gfx || !this._gfx.pivot) {\r\n return;\r\n }\r\n\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)\r\n && this._visuals[name] instanceof ComplexVisual) {\r\n callback(this._visuals[name]);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Returns ComplexVisual with specified name, or current (if not found), or any, or null\r\n * @private\r\n */\r\nMiew.prototype._getComplexVisual = function (name) {\r\n name = name || this._curVisualName;\r\n let any = null;\r\n let named = null;\r\n this._forEachComplexVisual((visual) => {\r\n any = visual;\r\n if (visual.name === name) {\r\n named = visual;\r\n }\r\n });\r\n return named || any;\r\n};\r\n\r\n/**\r\n * Returns first found VolumeVisual (no more than one should be present actually)\r\n * @private\r\n */\r\nMiew.prototype._getVolumeVisual = function () {\r\n let any = null;\r\n this._forEachVisual((visual) => {\r\n if (visual instanceof VolumeVisual) {\r\n any = visual;\r\n }\r\n });\r\n return any;\r\n};\r\n\r\n/**\r\n * Returns ComplexVisual corresponding to specified complex\r\n * @private\r\n */\r\nMiew.prototype._getVisualForComplex = function (complex) {\r\n if (!complex) {\r\n return null;\r\n }\r\n\r\n let found = null;\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getComplex() === complex) {\r\n found = visual;\r\n }\r\n });\r\n return found;\r\n};\r\n\r\n/*\r\n * Get a list of names of visuals currently shown by the viewer\r\n */\r\nMiew.prototype.getVisuals = function () {\r\n return Object.keys(this._visuals);\r\n};\r\n\r\n/*\r\n * Get complex visuals count\r\n */\r\nMiew.prototype.getComplexVisualsCount = function () {\r\n let count = 0;\r\n this._forEachComplexVisual(() => count++);\r\n return count;\r\n};\r\n\r\n/*\r\n * Get current visual\r\n */\r\nMiew.prototype.getCurrentVisual = function () {\r\n return this._curVisualName;\r\n};\r\n\r\n/*\r\n * Set current visual.\r\n * All further operations will be performed on this visual (complex) if not stated otherwise.\r\n */\r\nMiew.prototype.setCurrentVisual = function (name) {\r\n if (!this._visuals[name]) {\r\n return;\r\n }\r\n\r\n this._curVisualName = name;\r\n};\r\n\r\n/**\r\n * Run the viewer, start processing update/render frames periodically.\r\n * Has no effect if already running.\r\n * @see Miew#halt\r\n */\r\nMiew.prototype.run = function () {\r\n if (!this._running) {\r\n this._running = true;\r\n if (this._halting) {\r\n this._halting = false;\r\n return;\r\n }\r\n\r\n this._objectControls.enable(true);\r\n this._interpolator.resume();\r\n\r\n this._requestAnimationFrame(() => this._onTick());\r\n }\r\n};\r\n\r\n/**\r\n * Request the viewer to stop.\r\n * Will be processed during the next frame.\r\n * @see Miew#run\r\n */\r\nMiew.prototype.halt = function () {\r\n if (this._running) {\r\n this._discardComponentEdit();\r\n this._discardFragmentEdit();\r\n this._objectControls.enable(false);\r\n this._interpolator.pause();\r\n this._halting = true;\r\n }\r\n};\r\n\r\n/**\r\n * Request the viewer to start / stop responsing\r\n * on hot keys.\r\n * @param enabled - start (true) or stop (false) response on hot keys.\r\n */\r\nMiew.prototype.enableHotKeys = function (enabled) {\r\n this._hotKeysEnabled = enabled;\r\n this._objectControls.enableHotkeys(enabled);\r\n};\r\n\r\n/**\r\n * Callback which processes window resize.\r\n * @private\r\n */\r\nMiew.prototype._onResize = function () {\r\n const gfx = this._gfx;\r\n if (!gfx) {\r\n return;\r\n }\r\n\r\n this._needRender = true;\r\n\r\n gfx.width = this._container.clientWidth;\r\n gfx.height = this._container.clientHeight;\r\n\r\n gfx.camera.aspect = gfx.width / gfx.height;\r\n gfx.camera.setMinimalFov(settings.now.camFov);\r\n gfx.camera.updateProjectionMatrix();\r\n\r\n gfx.renderer.setSize(gfx.width, gfx.height);\r\n gfx.renderer2d.setSize(gfx.width, gfx.height);\r\n\r\n this.dispatchEvent({ type: 'resize' });\r\n};\r\n\r\nMiew.prototype._resizeOffscreenBuffers = function (width, height, stereo) {\r\n const gfx = this._gfx;\r\n stereo = stereo || 'NONE';\r\n const isAnaglyph = (stereo === 'NONE' || stereo === 'ANAGLYPH');\r\n const multi = isAnaglyph ? 1 : 0.5;\r\n gfx.offscreenBuf.setSize(multi * width, height);\r\n gfx.offscreenBuf2.setSize(multi * width, height);\r\n gfx.offscreenBuf3.setSize(multi * width, height);\r\n gfx.offscreenBuf4.setSize(multi * width, height);\r\n if (gfx.offscreenBuf5) {\r\n gfx.offscreenBuf5.setSize(multi * width, height);\r\n }\r\n if (gfx.offscreenBuf6) {\r\n gfx.offscreenBuf6.setSize(multi * width, height);\r\n }\r\n if (gfx.offscreenBuf7) {\r\n gfx.offscreenBuf7.setSize(multi * width, height);\r\n }\r\n if (isAnaglyph) {\r\n gfx.stereoBufL.setSize(width, height);\r\n gfx.stereoBufR.setSize(width, height);\r\n }\r\n};\r\n\r\n/**\r\n * Callback which processes update/render frames.\r\n * @private\r\n */\r\nMiew.prototype._onTick = function () {\r\n if (this._halting) {\r\n this._running = false;\r\n this._halting = false;\r\n return;\r\n }\r\n\r\n this._fps.update();\r\n\r\n this._requestAnimationFrame(() => this._onTick());\r\n\r\n this._onUpdate();\r\n if (this._needRender) {\r\n this._onRender();\r\n this._needRender = !settings.now.suspendRender || settings.now.stereo === 'WEBVR';\r\n }\r\n};\r\n\r\nMiew.prototype._getBSphereRadius = function () {\r\n // calculate radius that would include all visuals\r\n let radius = 0;\r\n this._forEachVisual((visual) => {\r\n radius = Math.max(radius, visual.getBoundaries().boundingSphere.radius);\r\n });\r\n return radius * this._objectControls.getScale();\r\n};\r\n\r\n/**\r\n * Calculate bounding box that would include all visuals and being axis aligned in world defined by\r\n * transformation matrix: matrix\r\n * @param {Matrix4} matrix - transformation matrix.\r\n * @param {object} OBB - calculating bounding box.\r\n * @param {Vector3} OBB.center - OBB center.\r\n * @param {Vector3} OBB.halfSize - half magnitude of OBB sizes.\r\n */\r\nMiew.prototype.getOBB = (function () {\r\n const _bSphereForOneVisual = new THREE.Sphere();\r\n const _bBoxForOneVisual = new THREE.Box3();\r\n const _bBox = new THREE.Box3();\r\n\r\n const _invMatrix = new THREE.Matrix4();\r\n\r\n const _points = [\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n ];\r\n\r\n return function (matrix, OBB) {\r\n _bBox.makeEmpty();\r\n\r\n this._forEachVisual((visual) => {\r\n _bSphereForOneVisual.copy(visual.getBoundaries().boundingSphere);\r\n _bSphereForOneVisual.applyMatrix4(visual.matrixWorld).applyMatrix4(matrix);\r\n _bSphereForOneVisual.getBoundingBox(_bBoxForOneVisual);\r\n _bBox.union(_bBoxForOneVisual);\r\n });\r\n _bBox.getCenter(OBB.center);\r\n\r\n _invMatrix.copy(matrix).invert();\r\n OBB.center.applyMatrix4(_invMatrix);\r\n\r\n const { min } = _bBox;\r\n const { max } = _bBox;\r\n _points[0].set(min.x, min.y, min.z); // 000\r\n _points[1].set(max.x, min.y, min.z); // 100\r\n _points[2].set(min.x, max.y, min.z); // 010\r\n _points[3].set(min.x, min.y, max.z); // 001\r\n for (let i = 0, l = _points.length; i < l; i++) {\r\n _points[i].applyMatrix4(_invMatrix);\r\n }\r\n\r\n OBB.halfSize.set(\r\n Math.abs(_points[0].x - _points[1].x),\r\n Math.abs(_points[0].y - _points[2].y),\r\n Math.abs(_points[0].z - _points[3].z),\r\n ).multiplyScalar(0.5);\r\n };\r\n}());\r\n\r\nMiew.prototype._updateFog = function () {\r\n const gfx = this._gfx;\r\n\r\n if (settings.now.fog) {\r\n if (typeof gfx.scene.fog === 'undefined' || gfx.scene.fog === null) {\r\n const color = chooseFogColor();\r\n gfx.scene.fog = new THREE.Fog(color);\r\n this._setUberMaterialValues({ fog: settings.now.fog });\r\n }\r\n updateFogRange(gfx.scene.fog, gfx.camera.position.z, this._getBSphereRadius());\r\n } else if (gfx.scene.fog) {\r\n gfx.scene.fog = undefined;\r\n this._setUberMaterialValues({ fog: settings.now.fog });\r\n }\r\n};\r\n\r\nMiew.prototype._onUpdate = function () {\r\n if (this.isScriptingCommandAvailable !== undefined && this.isScriptingCommandAvailable() && !this._building) {\r\n this.callNextCmd();\r\n }\r\n\r\n this._objectControls.update();\r\n\r\n this._forEachComplexVisual((visual) => {\r\n visual.getComplex().update();\r\n });\r\n\r\n if (settings.now.autobuild && !this._loading.length && !this._building && this._needRebuild()) {\r\n this.rebuild();\r\n }\r\n\r\n if (!this._loading.length && !this._building && !this._needRebuild()) {\r\n this._updateView();\r\n }\r\n\r\n this._updateFog();\r\n\r\n if (this._gfx.renderer.xr.enabled) {\r\n this.webVR.updateMoleculeScale();\r\n }\r\n};\r\n\r\nMiew.prototype._onRender = function () {\r\n const gfx = this._gfx;\r\n\r\n // update all matrices\r\n gfx.scene.updateMatrixWorld();\r\n gfx.camera.updateMatrixWorld();\r\n\r\n this._clipPlaneUpdateValue(this._getBSphereRadius());\r\n this._fogFarUpdateValue();\r\n\r\n gfx.renderer.setRenderTarget(null);\r\n gfx.renderer.clear();\r\n\r\n this._renderFrame(settings.now.stereo);\r\n};\r\n\r\nMiew.prototype._renderFrame = (function () {\r\n const _anaglyphMat = new AnaglyphMaterial();\r\n const _size = new THREE.Vector2();\r\n\r\n return function (stereo) {\r\n const gfx = this._gfx;\r\n const { renderer } = gfx;\r\n\r\n renderer.getSize(_size);\r\n\r\n if (stereo !== 'NONE') {\r\n gfx.camera.focus = gfx.camera.position.z; // set focus to the center of the object\r\n gfx.stereoCam.aspect = 1.0;\r\n\r\n // in anaglyph mode we render full-size image for each eye\r\n // while in other stereo modes only half-size (two images on the screen)\r\n if (stereo === 'ANAGLYPH') {\r\n gfx.stereoCam.update(gfx.camera);\r\n } else {\r\n gfx.stereoCam.updateHalfSized(gfx.camera, settings.now.camFov);\r\n }\r\n }\r\n\r\n // resize offscreen buffers to match the target\r\n const pixelRatio = gfx.renderer.getPixelRatio();\r\n this._resizeOffscreenBuffers(_size.width * pixelRatio, _size.height * pixelRatio, stereo);\r\n\r\n this._renderShadowMap();\r\n\r\n switch (stereo) {\r\n case 'WEBVR':\r\n case 'NONE':\r\n this._renderScene(gfx.camera, false);\r\n break;\r\n case 'SIMPLE':\r\n case 'DISTORTED':\r\n renderer.setScissorTest(true);\r\n\r\n renderer.setScissor(0, 0, _size.width / 2, _size.height);\r\n renderer.setViewport(0, 0, _size.width / 2, _size.height);\r\n this._renderScene(this._gfx.stereoCam.cameraL, stereo === 'DISTORTED');\r\n\r\n renderer.setScissor(_size.width / 2, 0, _size.width / 2, _size.height);\r\n renderer.setViewport(_size.width / 2, 0, _size.width / 2, _size.height);\r\n this._renderScene(this._gfx.stereoCam.cameraR, stereo === 'DISTORTED');\r\n\r\n renderer.setScissorTest(false);\r\n break;\r\n case 'ANAGLYPH':\r\n this._renderScene(this._gfx.stereoCam.cameraL, false, gfx.stereoBufL);\r\n this._renderScene(this._gfx.stereoCam.cameraR, false, gfx.stereoBufR);\r\n renderer.setRenderTarget(null);\r\n _anaglyphMat.uniforms.srcL.value = gfx.stereoBufL.texture;\r\n _anaglyphMat.uniforms.srcR.value = gfx.stereoBufR.texture;\r\n gfx.renderer.renderScreenQuad(_anaglyphMat);\r\n break;\r\n default:\r\n }\r\n\r\n gfx.renderer2d.render(gfx.scene, gfx.camera);\r\n\r\n if (settings.now.axes && gfx.axes && !gfx.renderer.xr.enabled) {\r\n gfx.axes.render(renderer);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._onBgColorChanged = function () {\r\n const gfx = this._gfx;\r\n const color = chooseFogColor();\r\n if (gfx) {\r\n if (gfx.scene.fog) {\r\n gfx.scene.fog.color.set(color);\r\n }\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._onFogColorChanged = function () {\r\n const gfx = this._gfx;\r\n const color = chooseFogColor();\r\n if (gfx && gfx.scene.fog) {\r\n gfx.scene.fog.color.set(color);\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._setUberMaterialValues = function (values) {\r\n this._gfx.root.traverse((obj) => {\r\n if ((obj instanceof THREE.Mesh || obj instanceof THREE.LineSegments || obj instanceof THREE.Line)\r\n && obj.material instanceof UberMaterial) {\r\n obj.material.setValues(values);\r\n obj.material.needsUpdate = true;\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype._enableMRT = function (on, renderBuffer, textureBuffer) {\r\n const gfx = this._gfx;\r\n const gl = gfx.renderer.getContext();\r\n const { properties } = gfx.renderer;\r\n\r\n if (!on) {\r\n gl.drawBuffers([gl.COLOR_ATTACHMENT0, null]);\r\n return;\r\n }\r\n\r\n // take extra texture from Texture Buffer\r\n gfx.renderer.setRenderTarget(textureBuffer);\r\n const tx8 = properties.get(textureBuffer.texture).__webglTexture;\r\n gl.bindTexture(gl.TEXTURE_2D, tx8);\r\n\r\n // take texture and framebuffer from renderbuffer\r\n gfx.renderer.setRenderTarget(renderBuffer);\r\n const fb = properties.get(renderBuffer).__webglFramebuffer;\r\n const tx = properties.get(renderBuffer.texture).__webglTexture;\r\n\r\n // set framebuffer\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb);\r\n fb.width = renderBuffer.width;\r\n fb.height = renderBuffer.height;\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tx, 0);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, tx8, 0);\r\n\r\n // mapping textures (MRT is core feature in WebGL2)\r\n gl.drawBuffers([gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]);\r\n};\r\n\r\nMiew.prototype._renderScene = (function () {\r\n return function (camera, distortion, target) {\r\n distortion = distortion || false;\r\n target = target || null;\r\n\r\n const gfx = this._gfx;\r\n\r\n // render to offscreen buffer\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(target);\r\n gfx.renderer.clear();\r\n if (gfx.renderer.xr.enabled) {\r\n gfx.renderer.render(gfx.scene, camera);\r\n return;\r\n }\r\n\r\n // clean buffer for normals texture\r\n gfx.renderer.setClearColor(0x000000, 0.0);\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf4);\r\n gfx.renderer.clearColor();\r\n\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.clear();\r\n\r\n const bHaveComplexes = (this._getComplexVisual() !== null);\r\n const volumeVisual = this._getVolumeVisual();\r\n const ssao = bHaveComplexes && settings.now.ao;\r\n\r\n if (ssao) {\r\n this._enableMRT(true, gfx.offscreenBuf, gfx.offscreenBuf4);\r\n }\r\n\r\n if (settings.now.transparency === 'prepass') {\r\n this._renderWithPrepassTransparency(camera, gfx.offscreenBuf);\r\n } else if (settings.now.transparency === 'standard') {\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.render(gfx.scene, camera);\r\n }\r\n\r\n if (ssao) {\r\n this._enableMRT(false, null, null);\r\n }\r\n\r\n // when fxaa we should get resulting image in temp off-screen buff2 for further postprocessing with fxaa filter\r\n // otherwise we render to canvas\r\n const outline = bHaveComplexes && settings.now.outline.on;\r\n const fxaa = bHaveComplexes && settings.now.fxaa;\r\n const volume = (volumeVisual !== null) && (volumeVisual.getMesh().material != null);\r\n let dstBuffer = (ssao || outline || volume || fxaa || distortion) ? gfx.offscreenBuf2 : target;\r\n let srcBuffer = gfx.offscreenBuf;\r\n\r\n if (ssao) {\r\n this._performAO(\r\n srcBuffer,\r\n gfx.offscreenBuf4,\r\n gfx.offscreenBuf.depthTexture,\r\n dstBuffer,\r\n gfx.offscreenBuf3,\r\n gfx.offscreenBuf2,\r\n );\r\n if (!fxaa && !distortion && !volume && !outline) {\r\n srcBuffer = dstBuffer;\r\n dstBuffer = target;\r\n gfx.renderer.setRenderTarget(dstBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 1.0);\r\n }\r\n } else {\r\n // just copy color buffer to dst buffer\r\n gfx.renderer.setRenderTarget(dstBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 1.0);\r\n }\r\n\r\n // outline\r\n if (outline) {\r\n srcBuffer = dstBuffer;\r\n dstBuffer = (volume || fxaa || distortion) ? gfx.offscreenBuf3 : target;\r\n if (srcBuffer != null) {\r\n this._renderOutline(camera, gfx.offscreenBuf, srcBuffer, dstBuffer);\r\n }\r\n }\r\n\r\n // render selected part with outline material\r\n this._renderSelection(camera, gfx.offscreenBuf, dstBuffer);\r\n\r\n if (volume) {\r\n // copy current picture to the buffer that retains depth-data of the original molecule render\r\n // so that volume renderer could use depth-test\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.renderScreenQuadFromTex(dstBuffer.texture, 1.0);\r\n dstBuffer = gfx.offscreenBuf;\r\n this._renderVolume(volumeVisual, camera, dstBuffer, gfx.volBFTex, gfx.volFFTex, gfx.volWFFTex);\r\n\r\n // if this is the last stage -- copy image to target\r\n if (!fxaa && !distortion) {\r\n gfx.renderer.setRenderTarget(target);\r\n gfx.renderer.renderScreenQuadFromTex(dstBuffer.texture, 1.0);\r\n }\r\n }\r\n\r\n srcBuffer = dstBuffer;\r\n\r\n if (fxaa) {\r\n dstBuffer = distortion ? gfx.offscreenBuf4 : target;\r\n this._performFXAA(srcBuffer, dstBuffer);\r\n srcBuffer = dstBuffer;\r\n }\r\n\r\n if (distortion) {\r\n dstBuffer = target;\r\n this._performDistortion(srcBuffer, dstBuffer, true);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._performDistortion = (function () {\r\n const _scene = new THREE.Scene();\r\n const _camera = new THREE.OrthographicCamera(-1.0, 1.0, 1.0, -1.0, -500, 1000);\r\n\r\n const _material = new THREE.RawShaderMaterial({\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n aberration: { type: 'fv3', value: new THREE.Vector3(1.0) },\r\n },\r\n vertexShader: vertexScreenQuadShader,\r\n fragmentShader: fragmentScreenQuadFromDistTex,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n const _geo = gfxutils.buildDistorionMesh(10, 10, settings.now.debug.stereoBarrel);\r\n _scene.add(new meshes.Mesh(_geo, _material));\r\n\r\n return function (srcBuffer, targetBuffer, mesh) {\r\n this._gfx.renderer.setRenderTarget(targetBuffer);\r\n this._gfx.renderer.clear();\r\n\r\n if (mesh) {\r\n _material.uniforms.srcTex.value = srcBuffer.texture;\r\n _material.uniforms.aberration.value.set(0.995, 1.0, 1.01);\r\n this._gfx.renderer.render(_scene, _camera);\r\n } else {\r\n this._gfx.renderer.renderScreenQuadFromTexWithDistortion(srcBuffer, settings.now.debug.stereoBarrel);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._renderOutline = (function () {\r\n const _outlineMaterial = new OutlineMaterial({ depth: true });\r\n\r\n return function (camera, srcDepthBuffer, srcColorBuffer, targetBuffer) {\r\n const self = this;\r\n const gfx = self._gfx;\r\n\r\n // apply Sobel filter -- draw outline\r\n _outlineMaterial.uniforms.srcTex.value = srcColorBuffer.texture;\r\n _outlineMaterial.uniforms.srcDepthTex.value = srcDepthBuffer.depthTexture;\r\n _outlineMaterial.uniforms.srcTexSize.value.set(srcDepthBuffer.width, srcDepthBuffer.height);\r\n _outlineMaterial.uniforms.color.value = new THREE.Color(settings.now.outline.color);\r\n _outlineMaterial.uniforms.threshold.value = settings.now.outline.threshold;\r\n _outlineMaterial.uniforms.thickness.value = new THREE.Vector2(\r\n settings.now.outline.thickness,\r\n settings.now.outline.thickness,\r\n );\r\n\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuad(_outlineMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._renderShadowMap = (function () {\r\n const pars = { minFilter: THREE.NearestFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat };\r\n\r\n return function () {\r\n if (!settings.now.shadow.on) {\r\n return;\r\n }\r\n\r\n const gfx = this._gfx;\r\n const currentRenderTarget = gfx.renderer.getRenderTarget();\r\n const activeCubeFace = gfx.renderer.getActiveCubeFace();\r\n const activeMipmapLevel = gfx.renderer.getActiveMipmapLevel();\r\n\r\n const _state = gfx.renderer.state;\r\n\r\n // Set GL state for depth map.\r\n _state.setBlending(THREE.NoBlending);\r\n _state.buffers.color.setClear(1, 1, 1, 1);\r\n _state.buffers.depth.setTest(true);\r\n _state.setScissorTest(false);\r\n\r\n for (let i = 0; i < gfx.scene.children.length; i++) {\r\n if (gfx.scene.children[i].type === 'DirectionalLight') {\r\n const light = gfx.scene.children[i];\r\n\r\n if (light.shadow.map == null) {\r\n light.shadow.map = new THREE.WebGLRenderTarget(light.shadow.mapSize.width, light.shadow.mapSize.height, pars);\r\n light.shadow.camera.updateProjectionMatrix();\r\n }\r\n light.shadow.updateMatrices(light);\r\n\r\n gfx.renderer.setRenderTarget(light.shadow.map);\r\n gfx.renderer.clear();\r\n\r\n gfx.renderer.render(gfx.scene, light.shadow.camera);\r\n }\r\n }\r\n gfx.renderer.setRenderTarget(currentRenderTarget, activeCubeFace, activeMipmapLevel);\r\n };\r\n}());\r\n\r\n/**\r\n * Check if there is selection which must be rendered or not.\r\n * @private\r\n * @returns {boolean} true on existing selection to render\r\n */\r\nMiew.prototype._hasSelectionToRender = function () {\r\n const selPivot = this._gfx.selectionPivot;\r\n\r\n for (let i = 0; i < selPivot.children.length; i++) {\r\n const selPivotChild = selPivot.children[i];\r\n if (selPivotChild.children.length > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nMiew.prototype._renderSelection = (function () {\r\n const _outlineMaterial = new OutlineMaterial();\r\n\r\n return function (camera, srcBuffer, targetBuffer) {\r\n const self = this;\r\n const gfx = self._gfx;\r\n\r\n // clear offscreen buffer (leave z-buffer intact)\r\n gfx.renderer.setClearColor('black', 0);\r\n\r\n // render selection to offscreen buffer\r\n gfx.renderer.setRenderTarget(srcBuffer);\r\n gfx.renderer.clear(true, false, false);\r\n if (self._hasSelectionToRender()) {\r\n gfx.selectionRoot.matrix = gfx.root.matrix;\r\n gfx.selectionPivot.matrix = gfx.pivot.matrix;\r\n gfx.renderer.render(gfx.selectionScene, camera);\r\n } else {\r\n // just render something to force \"target clear\" operation to finish\r\n gfx.renderer.renderDummyQuad();\r\n }\r\n\r\n // overlay to screen\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 0.6);\r\n\r\n // apply Sobel filter -- draw outline\r\n _outlineMaterial.uniforms.srcTex.value = srcBuffer.texture;\r\n _outlineMaterial.uniforms.srcTexSize.value.set(srcBuffer.width, srcBuffer.height);\r\n gfx.renderer.renderScreenQuad(_outlineMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._checkVolumeRenderingSupport = function (renderTarget) {\r\n if (!renderTarget) {\r\n return false;\r\n }\r\n const gfx = this._gfx;\r\n const oldRT = gfx.renderer.getRenderTarget();\r\n\r\n gfx.renderer.setRenderTarget(renderTarget);\r\n const context = gfx.renderer.getContext();\r\n const result = context.checkFramebufferStatus(context.FRAMEBUFFER);\r\n gfx.renderer.setRenderTarget(oldRT);\r\n if (result !== context.FRAMEBUFFER_COMPLETE) {\r\n // floatFrameBufferWarning = ;\r\n this.logger.warn('Device doesn\\'t support electron density rendering');\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nMiew.prototype._renderVolume = (function () {\r\n const volumeBFMat = new VolumeMaterial.BackFacePosMaterial();\r\n const volumeFFMat = new VolumeMaterial.FrontFacePosMaterial();\r\n const cubeOffsetMat = new THREE.Matrix4().makeTranslation(0.5, 0.5, 0.5);\r\n const world2colorMat = new THREE.Matrix4();\r\n\r\n let volumeRenderingSupported;\r\n\r\n return function (volumeVisual, camera, dstBuf, tmpBuf1, tmpBuf2, tmpBuf3) {\r\n const gfx = this._gfx;\r\n\r\n if (typeof volumeRenderingSupported === 'undefined') {\r\n volumeRenderingSupported = this._checkVolumeRenderingSupport(tmpBuf1);\r\n }\r\n\r\n if (!volumeRenderingSupported) {\r\n return;\r\n }\r\n\r\n const mesh = volumeVisual.getMesh();\r\n\r\n mesh.rebuild(gfx.camera);\r\n\r\n // use main camera to prepare special textures to be used by volumetric rendering\r\n // these textures have the size of the window and are stored in offscreen buffers\r\n gfx.renderer.setClearColor('black', 0);\r\n gfx.renderer.setRenderTarget(tmpBuf1);\r\n gfx.renderer.clear();\r\n gfx.renderer.setRenderTarget(tmpBuf2);\r\n gfx.renderer.clear();\r\n gfx.renderer.setRenderTarget(tmpBuf3);\r\n gfx.renderer.clear();\r\n\r\n gfx.renderer.setRenderTarget(tmpBuf1);\r\n // draw plane with its own material, because it differs slightly from volumeBFMat\r\n camera.layers.set(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.scene.overrideMaterial = volumeBFMat;\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n gfx.renderer.setRenderTarget(tmpBuf2);\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.scene.overrideMaterial = volumeFFMat;\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n gfx.scene.overrideMaterial = null;\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n\r\n // prepare texture that contains molecule positions\r\n world2colorMat.copy(mesh.matrixWorld).invert();\r\n UberMaterial.prototype.uberOptions.world2colorMatrix.multiplyMatrices(cubeOffsetMat, world2colorMat);\r\n camera.layers.set(gfxutils.LAYERS.COLOR_FROM_POSITION);\r\n gfx.renderer.setRenderTarget(tmpBuf3);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // render volume\r\n const vm = mesh.material;\r\n vm.uniforms._BFRight.value = tmpBuf1.texture;\r\n vm.uniforms._FFRight.value = tmpBuf2.texture;\r\n vm.uniforms._WFFRight.value = tmpBuf3.texture;\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.renderer.setRenderTarget(dstBuf);\r\n gfx.renderer.render(gfx.scene, camera);\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n };\r\n}());\r\n\r\n/* Render scene with 'ZPrepass transparency Effect'\r\n * Idea: transparent objects are rendered in two passes. The first one writes result only into depth buffer.\r\n * The second pass reads depth buffer and writes only to color buffer. The method results in\r\n * correct image of front part of the semi-transparent objects, but we can see only front transparent objects\r\n * and opaque objects inside, there is no transparent objects inside.\r\n * Notes: 1. Opaque objects should be rendered strictly before semi-transparent ones.\r\n * 2. Realization doesn't use camera layers because scene traversing is used for material changes and\r\n * we can use it to select needed meshes and don't complicate meshes builders with layers\r\n */\r\nMiew.prototype._renderWithPrepassTransparency = (function () {\r\n return function (camera, targetBuffer) {\r\n const gfx = this._gfx;\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n\r\n // opaque objects\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // transparent objects z prepass\r\n camera.layers.set(gfxutils.LAYERS.PREPASS_TRANSPARENT);\r\n gfx.renderer.getContext().colorMask(false, false, false, false); // don't update color buffer\r\n gfx.renderer.render(gfx.scene, camera);\r\n gfx.renderer.getContext().colorMask(true, true, true, true); // update color buffer\r\n\r\n // transparent objects color pass\r\n camera.layers.set(gfxutils.LAYERS.TRANSPARENT);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // restore default layer\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n };\r\n}());\r\n\r\nMiew.prototype._performFXAA = (function () {\r\n const _fxaaMaterial = new FXAAMaterial();\r\n\r\n return function (srcBuffer, targetBuffer) {\r\n if (typeof srcBuffer === 'undefined' || typeof targetBuffer === 'undefined') {\r\n return;\r\n }\r\n\r\n const gfx = this._gfx;\r\n\r\n // clear canvas\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.clear();\r\n\r\n // do fxaa processing of offscreen buff2\r\n _fxaaMaterial.uniforms.srcTex.value = srcBuffer.texture;\r\n _fxaaMaterial.uniforms.srcTexelSize.value.set(1.0 / srcBuffer.width, 1.0 / srcBuffer.height);\r\n _fxaaMaterial.uniforms.bgColor.value.set(settings.now.bg.color);\r\n\r\n if (_fxaaMaterial.bgTransparent !== settings.now.bg.transparent) {\r\n _fxaaMaterial.setValues({ bgTransparent: settings.now.bg.transparent });\r\n _fxaaMaterial.needsUpdate = true;\r\n }\r\n gfx.renderer.renderScreenQuad(_fxaaMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._performAO = (function () {\r\n const _aoMaterial = new AOMaterial();\r\n const _horBlurMaterial = new AOHorBlurMaterial();\r\n const _vertBlurMaterial = new AOVertBlurWithBlendMaterial();\r\n\r\n const _scale = new THREE.Vector3();\r\n return function (srcColorBuffer, normalBuffer, srcDepthTexture, targetBuffer, tempBuffer, tempBuffer1) {\r\n if (!srcColorBuffer || !normalBuffer || !srcDepthTexture || !targetBuffer || !tempBuffer || !tempBuffer1) {\r\n return;\r\n }\r\n const gfx = this._gfx;\r\n const tanHalfFOV = Math.tan(THREE.MathUtils.DEG2RAD * 0.5 * gfx.camera.fov);\r\n\r\n _aoMaterial.uniforms.diffuseTexture.value = srcColorBuffer.texture;\r\n _aoMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n _aoMaterial.uniforms.normalTexture.value = normalBuffer.texture;\r\n _aoMaterial.uniforms.srcTexelSize.value.set(1.0 / srcColorBuffer.width, 1.0 / srcColorBuffer.height);\r\n _aoMaterial.uniforms.camNearFar.value.set(gfx.camera.near, gfx.camera.far);\r\n _aoMaterial.uniforms.projMatrix.value = gfx.camera.projectionMatrix;\r\n _aoMaterial.uniforms.aspectRatio.value = gfx.camera.aspect;\r\n _aoMaterial.uniforms.tanHalfFOV.value = tanHalfFOV;\r\n gfx.root.matrix.extractScale(_scale);\r\n _aoMaterial.uniforms.kernelRadius.value = settings.now.debug.ssaoKernelRadius * _scale.x;\r\n _aoMaterial.uniforms.depthThreshold.value = 2.0 * this._getBSphereRadius(); // diameter\r\n _aoMaterial.uniforms.factor.value = settings.now.debug.ssaoFactor;\r\n // N: should be tempBuffer1 for proper use of buffers (see buffers using outside the function)\r\n gfx.renderer.setRenderTarget(tempBuffer1);\r\n gfx.renderer.renderScreenQuad(_aoMaterial);\r\n\r\n _horBlurMaterial.uniforms.aoMap.value = tempBuffer1.texture;\r\n _horBlurMaterial.uniforms.srcTexelSize.value.set(1.0 / tempBuffer1.width, 1.0 / tempBuffer1.height);\r\n _horBlurMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n gfx.renderer.setRenderTarget(tempBuffer);\r\n gfx.renderer.renderScreenQuad(_horBlurMaterial);\r\n\r\n _vertBlurMaterial.uniforms.aoMap.value = tempBuffer.texture;\r\n _vertBlurMaterial.uniforms.diffuseTexture.value = srcColorBuffer.texture;\r\n _vertBlurMaterial.uniforms.srcTexelSize.value.set(1.0 / tempBuffer.width, 1.0 / tempBuffer.height);\r\n _vertBlurMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n _vertBlurMaterial.uniforms.projMatrix.value = gfx.camera.projectionMatrix;\r\n _vertBlurMaterial.uniforms.aspectRatio.value = gfx.camera.aspect;\r\n _vertBlurMaterial.uniforms.tanHalfFOV.value = tanHalfFOV;\r\n const { fog } = gfx.scene;\r\n if (fog) {\r\n _vertBlurMaterial.uniforms.fogNearFar.value.set(fog.near, fog.far);\r\n _vertBlurMaterial.uniforms.fogColor.value.set(fog.color.r, fog.color.g, fog.color.b, settings.now.fogAlpha);\r\n }\r\n if ((_vertBlurMaterial.useFog !== settings.now.fog)\r\n || (_vertBlurMaterial.fogTransparent !== settings.now.bg.transparent)) {\r\n _vertBlurMaterial.setValues({ useFog: settings.now.fog, fogTransparent: settings.now.bg.transparent });\r\n _vertBlurMaterial.needsUpdate = true;\r\n }\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuad(_vertBlurMaterial);\r\n };\r\n}());\r\n\r\n/**\r\n * Reset the viewer, unload molecules.\r\n * @param {boolean=} keepReps - Keep representations while resetting viewer state.\r\n */\r\nMiew.prototype.reset = function (/* keepReps */) {\r\n if (this._picker) {\r\n this._picker.reset();\r\n }\r\n this._lastPick = null;\r\n\r\n this._releaseAllVisuals();\r\n\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this._resetObjects();\r\n\r\n if (this._gfx) {\r\n gfxutils.clearTree(this._gfx.pivot);\r\n this._gfx.renderer2d.reset();\r\n }\r\n\r\n this.setNeedRender();\r\n};\r\n\r\nMiew.prototype._resetScene = function () {\r\n this._objectControls.reset();\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n this.resetReps();\r\n this.resetPivot();\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype.resetView = function () {\r\n // reset controls\r\n if (this._picker) {\r\n this._picker.reset();\r\n }\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._resetScene();\r\n\r\n // reset selection\r\n this._forEachComplexVisual((visual) => {\r\n visual.updateSelectionMask({});\r\n visual.rebuildSelectionGeometry();\r\n });\r\n};\r\n\r\nMiew.prototype._export = function (format) {\r\n const TheExporter = _.head(io.exporters.find({ format }));\r\n if (!TheExporter) {\r\n this.logger.error('Could not find suitable exporter for this source');\r\n return Promise.reject(new Error('Could not find suitable exporter for this source'));\r\n }\r\n this.dispatchEvent({ type: 'exporting' });\r\n\r\n if (this._visuals[this._curVisualName] instanceof ComplexVisual) {\r\n let dataSource = null;\r\n if (TheExporter.SourceClass === ComplexVisual) {\r\n dataSource = this._visuals[this._curVisualName];\r\n } else if (TheExporter.SourceClass === Complex) {\r\n dataSource = this._visuals[this._curVisualName]._complex;\r\n }\r\n const exporter = new TheExporter(dataSource, { miewVersion: Miew.VERSION });\r\n return exporter.export().then((data) => data);\r\n }\r\n if (this._visuals[this._curVisualName] instanceof VolumeVisual) {\r\n return Promise.reject(new Error('Sorry, exporter for volume data not implemented yet'));\r\n }\r\n return Promise.reject(new Error('Unexpected format of data'));\r\n};\r\n\r\nconst rePdbId = /^(?:(pdb|cif|ccp4|dsn6):\\s*)?(\\d[a-z\\d]{3})$/i;\r\nconst rePubchem = /^(?:pc|pubchem):\\s*([a-z]+)$/i;\r\nconst reUrlScheme = /^([a-z][a-z\\d\\-+.]*):/i;\r\n\r\nfunction resolveSourceShortcut(source, opts) {\r\n if (!_.isString(source)) {\r\n return source;\r\n }\r\n\r\n // e.g. \"cif:1CRN\"\r\n const matchesPdbId = rePdbId.exec(source);\r\n if (matchesPdbId) {\r\n let [, format = 'pdb', id] = matchesPdbId;\r\n\r\n format = format.toLowerCase();\r\n id = id.toUpperCase();\r\n\r\n switch (format) {\r\n case 'pdb':\r\n source = `https://files.rcsb.org/download/${id}.pdb`;\r\n break;\r\n case 'cif':\r\n source = `https://files.rcsb.org/download/${id}.cif`;\r\n break;\r\n case 'ccp4':\r\n source = `https://www.ebi.ac.uk/pdbe/coordinates/files/${id.toLowerCase()}.ccp4`;\r\n break;\r\n case 'dsn6':\r\n source = `https://edmaps.rcsb.org/maps/${id.toLowerCase()}_2fofc.dsn6`;\r\n break;\r\n default:\r\n throw new Error('Unexpected data format shortcut');\r\n }\r\n\r\n opts.fileType = format;\r\n opts.fileName = `${id}.${format}`;\r\n opts.sourceType = 'url';\r\n return source;\r\n }\r\n\r\n // e.g. \"pc:aspirin\"\r\n const matchesPubchem = rePubchem.exec(source);\r\n if (matchesPubchem) {\r\n const compound = matchesPubchem[1].toLowerCase();\r\n source = `https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/${compound}/JSON?record_type=3d`;\r\n opts.fileType = 'pubchem';\r\n opts.fileName = `${compound}.json`;\r\n opts.sourceType = 'url';\r\n return source;\r\n }\r\n\r\n // otherwise is should be an URL\r\n if (opts.sourceType === 'url' || opts.sourceType === undefined) {\r\n opts.sourceType = 'url';\r\n\r\n // e.g. \"./data/1CRN.pdb\"\r\n if (!reUrlScheme.test(source)) {\r\n source = utils.resolveURL(source);\r\n }\r\n }\r\n\r\n return source;\r\n}\r\n\r\nfunction updateBinaryMode(opts) {\r\n let { binary } = opts;\r\n\r\n // detect by format\r\n if (opts.fileType !== undefined) {\r\n const TheParser = _.head(io.parsers.find({ format: opts.fileType }));\r\n if (TheParser) {\r\n binary = TheParser.binary || false;\r\n } else {\r\n throw new Error('Could not find suitable parser for this format');\r\n }\r\n }\r\n\r\n // detect by file extension\r\n if (binary === undefined && opts.fileExt !== undefined) {\r\n const TheParser = _.head(io.parsers.find({ ext: opts.fileExt }));\r\n if (TheParser) {\r\n binary = TheParser.binary || false;\r\n }\r\n }\r\n\r\n // temporary workaround for animation\r\n if (opts.fileExt !== undefined && opts.fileExt.toLowerCase() === '.man') {\r\n opts.binary = true;\r\n opts.animation = true; // who cares?\r\n }\r\n\r\n // update if detected\r\n if (binary !== undefined) {\r\n if (opts.binary !== undefined && opts.binary !== binary) {\r\n opts.context.logger.warn('Overriding incorrect binary mode');\r\n }\r\n }\r\n\r\n opts.binary = binary || false;\r\n}\r\n\r\nfunction _fetchData(source, opts, job) {\r\n return new Promise(((resolve) => {\r\n if (job.shouldCancel()) {\r\n throw new Error('Operation cancelled');\r\n }\r\n job.notify({ type: 'fetching' });\r\n\r\n // allow for source shortcuts\r\n source = resolveSourceShortcut(source, opts);\r\n\r\n // detect a proper loader\r\n const TheLoader = _.head(io.loaders.find({ type: opts.sourceType, source }));\r\n if (!TheLoader) {\r\n throw new Error(LOADER_NOT_FOUND);\r\n }\r\n\r\n // split file name\r\n const fileName = opts.fileName || TheLoader.extractName(source);\r\n if (fileName) {\r\n const [name, fileExt] = utils.splitFileName(fileName);\r\n _.defaults(opts, { name, fileExt, fileName });\r\n }\r\n\r\n // should it be text or binary?\r\n updateBinaryMode(opts);\r\n\r\n // FIXME: All new settings retrieved from server are applied after the loading is complete. However, we need some\r\n // flags to alter the loading process itself. Here we apply them in advance. Dirty hack. Kill the server, remove\r\n // all hacks and everybody's happy.\r\n let newOptions = _.get(opts, 'preset.expression');\r\n if (!_.isUndefined(newOptions)) {\r\n newOptions = JSON.parse(newOptions);\r\n if (newOptions && newOptions.settings) {\r\n const keys = ['singleUnit'];\r\n for (let keyIndex = 0, keyCount = keys.length; keyIndex < keyCount; ++keyIndex) {\r\n const key = keys[keyIndex];\r\n const value = _.get(newOptions.settings, key);\r\n if (!_.isUndefined(value)) {\r\n settings.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // create a loader\r\n const loader = new TheLoader(source, opts);\r\n loader.context = opts.context;\r\n job.addEventListener('cancel', () => loader.abort());\r\n\r\n loader.addEventListener('progress', (event) => {\r\n if (event.lengthComputable && event.total > 0) {\r\n reportProgress(loader.logger, 'Fetching', event.loaded / event.total);\r\n } else {\r\n reportProgress(loader.logger, 'Fetching');\r\n }\r\n });\r\n\r\n console.time('fetch');\r\n const promise = loader.load()\r\n .then((data) => {\r\n console.timeEnd('fetch');\r\n opts.context.logger.info('Fetching finished');\r\n job.notify({ type: 'fetchingDone', data });\r\n return data;\r\n })\r\n .catch((error) => {\r\n console.timeEnd('fetch');\r\n opts.context.logger.debug(error.message);\r\n if (error.stack) {\r\n opts.context.logger.debug(error.stack);\r\n }\r\n opts.context.logger.error('Fetching failed');\r\n job.notify({ type: 'fetchingDone', error });\r\n throw error;\r\n });\r\n resolve(promise);\r\n }));\r\n}\r\n\r\nfunction _parseData(data, opts, job) {\r\n if (job.shouldCancel()) {\r\n return Promise.reject(new Error('Operation cancelled'));\r\n }\r\n\r\n job.notify({ type: 'parsing' });\r\n\r\n const TheParser = _.head(io.parsers.find({ format: opts.fileType, ext: opts.fileExt, data }));\r\n if (!TheParser) {\r\n return Promise.reject(new Error('Could not find suitable parser'));\r\n }\r\n\r\n const parser = new TheParser(data, opts);\r\n parser.context = opts.context;\r\n job.addEventListener('cancel', () => parser.abort());\r\n\r\n console.time('parse');\r\n return parser.parse()\r\n .then((dataSet) => {\r\n console.timeEnd('parse');\r\n job.notify({ type: 'parsingDone', data: dataSet });\r\n return dataSet;\r\n })\r\n .catch((error) => {\r\n console.timeEnd('parse');\r\n opts.error = error;\r\n opts.context.logger.debug(error.message);\r\n if (error.stack) {\r\n opts.context.logger.debug(error.stack);\r\n }\r\n opts.context.logger.error('Parsing failed');\r\n job.notify({ type: 'parsingDone', error });\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * Load molecule asynchronously.\r\n * @param {string|File} source - Molecule source to load (e.g. PDB ID, URL or File object).\r\n * @param {object=} opts - Options.\r\n * @param {string=} opts.sourceType - Data source type (e.g. 'url', 'file').\r\n * @param {string=} opts.fileType - Data contents type (e.g. 'pdb', 'cml').\r\n * @param {string=} opts.mdFile - .nc file path.\r\n * @param {boolean=} opts.keepRepsInfo - prevent reset of object and reps information.\r\n * @returns {Promise} name of the visual that was added to the viewer\r\n */\r\nMiew.prototype.load = function (source, opts) {\r\n opts = _.merge({}, opts, {\r\n context: this,\r\n });\r\n\r\n // for a single-file scenario\r\n if (!this.settings.now.use.multiFile) {\r\n // abort all loaders in progress\r\n if (this._loading.length) {\r\n this._loading.forEach((job) => {\r\n job.cancel();\r\n });\r\n this._loading.length = 0;\r\n }\r\n\r\n // reset\r\n if (!opts.animation) { // FIXME: sometimes it is set AFTERWARDS!\r\n this.reset(true);\r\n }\r\n }\r\n\r\n this._interpolator.reset();\r\n\r\n this.dispatchEvent({ type: 'loading', options: opts, source });\r\n\r\n const job = new JobHandle();\r\n this._loading.push(job);\r\n job.addEventListener('notification', (e) => {\r\n this.dispatchEvent(e.slaveEvent);\r\n });\r\n\r\n this._spinner.spin(this._container);\r\n\r\n const onLoadEnd = (anything) => {\r\n const jobIndex = this._loading.indexOf(job);\r\n if (jobIndex !== -1) {\r\n this._loading.splice(jobIndex, 1);\r\n }\r\n this._spinner.stop();\r\n this._refreshTitle();\r\n job.notify({ type: 'loadingDone', anything });\r\n return anything;\r\n };\r\n\r\n return _fetchData(source, opts, job)\r\n .then((data) => _parseData(data, opts, job))\r\n .then((object) => {\r\n const name = this._onLoad(object, opts);\r\n return onLoadEnd(name);\r\n })\r\n .catch((err) => {\r\n this.logger.error('Could not load data');\r\n this.logger.debug(err);\r\n throw onLoadEnd(err);\r\n });\r\n};\r\n\r\n/**\r\n * Unload molecule (delete corresponding visual).\r\n * @param {string=} name - name of the visual\r\n */\r\nMiew.prototype.unload = function (name) {\r\n this._removeVisual(name || this.getCurrentVisual());\r\n this.resetPivot();\r\n if (settings.now.shadow.on) {\r\n this._updateShadowCamera();\r\n }\r\n};\r\n\r\n/**\r\n * Start new animation. Now is broken.\r\n * @param fileData - new data to animate\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._startAnimation = function (fileData) {\r\n this._stopAnimation();\r\n const self = this;\r\n const visual = this._getComplexVisual();\r\n if (visual === null) {\r\n this.logger.error('Unable to start animation - no molecule is loaded.');\r\n return;\r\n }\r\n try {\r\n this._frameInfo = new FrameInfo(\r\n visual.getComplex(),\r\n fileData,\r\n {\r\n onLoadStatusChanged() {\r\n self.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: self._isAnimating,\r\n isLoading: self._frameInfo ? self._frameInfo.isLoading : true,\r\n },\r\n });\r\n },\r\n onError(message) {\r\n self._stopAnimation();\r\n self.logger.error(message);\r\n },\r\n },\r\n );\r\n } catch {\r\n this.logger.error('Animation file does not fit to current complex!');\r\n return;\r\n }\r\n this._continueAnimation();\r\n};\r\n\r\n/**\r\n * Pause current animation. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._pauseAnimation = function () {\r\n if (this._animInterval === null) {\r\n return;\r\n }\r\n this._isAnimating = false;\r\n clearInterval(this._animInterval);\r\n this._animInterval = null;\r\n if (this._frameInfo) {\r\n this.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: this._isAnimating,\r\n isLoading: this._frameInfo.isLoading,\r\n },\r\n });\r\n }\r\n};\r\n\r\n/**\r\n * Continue current animation after pausing. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._continueAnimation = function () {\r\n this._isAnimating = true;\r\n let minFrameTime = 1000 / settings.now.maxfps;\r\n minFrameTime = Number.isNaN(minFrameTime) ? 0 : minFrameTime;\r\n const self = this;\r\n const { pivot } = self._gfx;\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n visual.resetSelectionMask();\r\n visual.rebuildSelectionGeometry();\r\n this._msgAtomInfo.style.opacity = 0.0;\r\n }\r\n this._animInterval = setInterval(() => {\r\n self.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: self._isAnimating,\r\n isLoading: self._frameInfo.isLoading,\r\n },\r\n });\r\n if (self._frameInfo.frameIsReady) {\r\n pivot.updateToFrame(self._frameInfo);\r\n self._updateObjsToFrame(self._frameInfo);\r\n self._refreshTitle(` Frame ${self._frameInfo._currFrame} of ${self._frameInfo._framesCount\r\n } time interval - ${self._frameInfo._timeStep}`);\r\n try {\r\n self._frameInfo.nextFrame();\r\n } catch {\r\n self.logger.error('Error during animation');\r\n self._stopAnimation();\r\n return;\r\n }\r\n self._needRender = true;\r\n }\r\n }, minFrameTime);\r\n};\r\n\r\n/**\r\n * Stop current animation. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._stopAnimation = function () {\r\n if (this._animInterval === null) {\r\n return;\r\n }\r\n clearInterval(this._animInterval);\r\n this._frameInfo.disableEvents();\r\n this._frameInfo = null;\r\n this._animInterval = null;\r\n this.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: null,\r\n });\r\n};\r\n\r\n/**\r\n * Invoked upon successful loading of some data source\r\n * @param {DataSource} dataSource - Data source for visualization (molecular complex or other)\r\n * @param {object} opts - Options.\r\n * @private\r\n */\r\nMiew.prototype._onLoad = function (dataSource, opts) {\r\n const gfx = this._gfx;\r\n let visualName = null;\r\n\r\n if (opts.animation) {\r\n this._refreshTitle();\r\n this._startAnimation(dataSource);\r\n return null;\r\n }\r\n this._stopAnimation();\r\n if (!opts || !opts.keepRepsInfo) {\r\n this._opts.reps = null;\r\n this._opts._objects = null;\r\n }\r\n\r\n if (dataSource.id === 'Complex') {\r\n const complex = dataSource;\r\n\r\n // update title\r\n if (opts.fileName) {\r\n complex.name = complex.name || removeExtension(opts.fileName).toUpperCase();\r\n } else if (opts.amberFileName) {\r\n complex.name = complex.name || removeExtension(opts.amberFileName).toUpperCase();\r\n } else {\r\n complex.name = `Dynamic ${opts.fileType} molecule`;\r\n }\r\n\r\n visualName = this._addVisual(new ComplexVisual(complex.name, complex));\r\n this._curVisualName = visualName;\r\n\r\n const desc = this.info();\r\n this.logger.info(`Parsed ${opts.fileName} (${\r\n desc.atoms} atoms, ${\r\n desc.bonds} bonds, ${\r\n desc.residues} residues, ${\r\n desc.chains} chains).`);\r\n\r\n if (_.isNumber(this._opts.unit)) {\r\n complex.setCurrentUnit(this._opts.unit);\r\n }\r\n\r\n if (opts.preset) {\r\n // ...removed server access...\r\n } else if (settings.now.autoPreset) {\r\n switch (opts.fileType) {\r\n case 'cml':\r\n this.resetReps('small');\r\n break;\r\n case 'pdb':\r\n case 'mmtf':\r\n case 'cif':\r\n if (hasValidResidues(complex)) {\r\n this.resetReps('macro');\r\n } else {\r\n this.resetReps('small');\r\n }\r\n break;\r\n default:\r\n this.resetReps('default');\r\n break;\r\n }\r\n } else {\r\n this.resetReps('default');\r\n }\r\n } else if (dataSource.id === 'Volume') {\r\n this.resetEd();\r\n visualName = this._onLoadEd(dataSource);\r\n }\r\n\r\n gfx.camera.updateProjectionMatrix();\r\n this._updateFog();\r\n\r\n // reset global transform\r\n gfx.root.resetTransform();\r\n this.resetPivot();\r\n\r\n // set scale to fit everything on the screen\r\n this._objectControls.setScale(settings.now.radiusToFit / this._getBSphereRadius());\r\n\r\n this._resetObjects();\r\n\r\n if (settings.now.autoResolution) {\r\n this._tweakResolution();\r\n }\r\n\r\n if (settings.now.shadow.on) {\r\n this._updateShadowCamera();\r\n }\r\n\r\n if (this._opts.view) {\r\n this.view(this._opts.view);\r\n delete this._opts.view;\r\n }\r\n\r\n this._refreshTitle();\r\n\r\n return visualName;\r\n};\r\n\r\nMiew.prototype.resetEd = function () {\r\n if (this._edLoader) {\r\n this._edLoader.abort();\r\n this._edLoader = null;\r\n }\r\n\r\n // free all resources\r\n this._removeVisual(this._getVolumeVisual());\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype.loadEd = function (source) {\r\n this.resetEd();\r\n\r\n const TheLoader = _.head(io.loaders.find({ source }));\r\n if (!TheLoader) {\r\n this.logger.error(LOADER_NOT_FOUND);\r\n return Promise.reject(new Error(LOADER_NOT_FOUND));\r\n }\r\n\r\n const loader = this._edLoader = new TheLoader(source, { binary: true });\r\n loader.context = this;\r\n return loader.load().then((data) => {\r\n const TheParser = _.head(io.parsers.find({ format: 'ccp4' }));\r\n if (!TheParser) {\r\n throw new Error(PARSER_NOT_FOUND);\r\n }\r\n const parser = new TheParser(data);\r\n parser.context = this;\r\n return parser.parse().then((dataSource) => {\r\n this._onLoadEd(dataSource);\r\n });\r\n }).catch((error) => {\r\n this.logger.error('Could not load ED data');\r\n this.logger.debug(error);\r\n });\r\n};\r\n\r\nMiew.prototype._onLoadEd = function (dataSource) {\r\n dataSource.normalize();\r\n\r\n const volumeVisual = new VolumeVisual('volume', dataSource);\r\n volumeVisual.getMesh().layers.set(gfxutils.LAYERS.VOLUME); // volume mesh is not visible to common render\r\n const visualName = this._addVisual(volumeVisual);\r\n\r\n this._needRender = true;\r\n return visualName;\r\n};\r\n\r\nMiew.prototype._needRebuild = function () {\r\n let needsRebuild = false;\r\n this._forEachComplexVisual((visual) => {\r\n needsRebuild = needsRebuild || visual.needsRebuild();\r\n });\r\n return needsRebuild;\r\n};\r\n\r\nMiew.prototype._rebuildObjects = function () {\r\n const self = this;\r\n const gfx = this._gfx;\r\n let i;\r\n let n;\r\n\r\n // remove old object geometry\r\n const toRemove = [];\r\n for (i = 0; i < gfx.pivot.children.length; ++i) {\r\n const child = gfx.pivot.children[i];\r\n if (!(child instanceof Visual)) {\r\n toRemove.push(child);\r\n }\r\n }\r\n for (i = 0; i < toRemove.length; ++i) {\r\n toRemove[i].parent.remove(toRemove[i]);\r\n }\r\n\r\n setTimeout(() => {\r\n const objList = self._objects;\r\n for (i = 0, n = objList.length; i < n; ++i) {\r\n const obj = objList[i];\r\n if (obj.needsRebuild) {\r\n obj.build();\r\n }\r\n if (obj.getGeometry()) {\r\n gfx.pivot.add(obj.getGeometry());\r\n }\r\n }\r\n }, 10);\r\n};\r\n\r\nMiew.prototype.changeUnit = function (unitIdx, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n throw new Error('There is no complex to change!');\r\n }\r\n\r\n function currentUnitInfo() {\r\n const unit = visual ? visual.getComplex().getCurrentUnit() : 0;\r\n const type = unit > 0 ? (`Bio molecule ${unit}`) : 'Asymmetric unit';\r\n return `Current unit: ${unit} (${type})`;\r\n }\r\n\r\n if (unitIdx === undefined) {\r\n return currentUnitInfo();\r\n }\r\n if (_.isString(unitIdx)) {\r\n unitIdx = Math.max(parseInt(unitIdx, 10), 0);\r\n }\r\n if (visual.getComplex().setCurrentUnit(unitIdx)) {\r\n this._resetScene();\r\n this._updateInfoPanel();\r\n }\r\n return currentUnitInfo();\r\n};\r\n\r\n/**\r\n * Start to rebuild geometry asynchronously.\r\n */\r\nMiew.prototype.rebuild = function () {\r\n if (this._building) {\r\n this.logger.warn('Miew.rebuild(): already building!');\r\n return;\r\n }\r\n this._building = true;\r\n\r\n this.dispatchEvent({ type: 'rebuilding' });\r\n\r\n this._rebuildObjects();\r\n\r\n this._gfx.renderer2d.reset();\r\n\r\n const rebuildActions = [];\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.needsRebuild()) {\r\n rebuildActions.push(visual.rebuild().then(() => new Promise(((resolve) => {\r\n visual.rebuildSelectionGeometry();\r\n resolve();\r\n }))));\r\n }\r\n });\r\n\r\n // Start asynchronous rebuild\r\n const self = this;\r\n this._spinner.spin(this._container);\r\n Promise.all(rebuildActions).then(() => {\r\n self._spinner.stop();\r\n\r\n self._needRender = true;\r\n\r\n self._refreshTitle();\r\n this.dispatchEvent({ type: 'buildingDone' });\r\n self._building = false;\r\n });\r\n};\r\n\r\n/** Mark all representations for rebuilding */\r\nMiew.prototype.rebuildAll = function () {\r\n this._forEachComplexVisual((visual) => {\r\n visual.setNeedsRebuild();\r\n });\r\n};\r\n\r\nMiew.prototype._refreshTitle = function (appendix) {\r\n let title;\r\n appendix = appendix === undefined ? '' : appendix;\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n title = visual.getComplex().name;\r\n const rep = visual.repGet(visual.repCurrent());\r\n title += (rep ? ` – ${rep.mode.name} Mode` : '');\r\n } else {\r\n title = Object.keys(this._visuals).length > 0 ? 'Unknown' : 'No Data';\r\n }\r\n title += appendix;\r\n\r\n this.dispatchEvent({ type: 'titleChanged', data: title });\r\n};\r\n\r\nMiew.prototype.setNeedRender = function () {\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._extractRepresentation = function () {\r\n const changed = [];\r\n\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getSelectionCount() === 0) {\r\n return;\r\n }\r\n\r\n const selector = visual.buildSelectorFromMask(1 << visual.getSelectionBit());\r\n const defPreset = settings.now.presets.default;\r\n const res = visual.repAdd({\r\n selector,\r\n mode: defPreset[0].mode.id,\r\n colorer: defPreset[0].colorer.id,\r\n material: defPreset[0].material.id,\r\n });\r\n if (!res) {\r\n if (visual.repCount() === ComplexVisual.NUM_REPRESENTATION_BITS) {\r\n this.logger.warn(`Number of representations is limited to ${ComplexVisual.NUM_REPRESENTATION_BITS}`);\r\n }\r\n return;\r\n }\r\n\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name: visual.name });\r\n visual.repCurrent(res.index);\r\n\r\n changed.push(visual.name);\r\n });\r\n\r\n if (changed.length > 0) {\r\n this.logger.report(`New representation from selection for complexes: ${changed.join(', ')}`);\r\n }\r\n};\r\n\r\n/**\r\n * Change current representation list.\r\n * @param {array} reps - Representation list.\r\n */\r\nMiew.prototype._setReps = function (reps) {\r\n reps = reps || (this._opts && this._opts.reps) || [];\r\n this._forEachComplexVisual((visual) => visual.resetReps(reps));\r\n};\r\n\r\n/**\r\n * Apply existing preset to current scene.\r\n * @param preset\r\n */\r\nMiew.prototype.applyPreset = function (preset) {\r\n const { presets } = settings.now;\r\n const presList = [\r\n preset || settings.defaults.preset,\r\n settings.defaults.preset,\r\n Object.keys(presets)[0],\r\n ];\r\n let reps = null;\r\n for (let i = 0; !reps && i < presList.length; ++i) {\r\n settings.set('preset', presList[i]);\r\n reps = presets[settings.now.preset];\r\n if (!reps) {\r\n this.logger.warn(`Unknown preset \"${settings.now.preset}\"`);\r\n }\r\n }\r\n this._setReps(reps);\r\n};\r\n\r\n/**\r\n * Reset current representation list to initial values.\r\n * @param {string} [preset] - The source preset in case of uninitialized representation list.\r\n */\r\nMiew.prototype.resetReps = function (preset) {\r\n const reps = this._opts && this._opts.reps;\r\n if (reps) {\r\n this._setReps(reps);\r\n } else {\r\n this.applyPreset(preset);\r\n }\r\n};\r\n\r\n/**\r\n * Get number of representations created so far.\r\n * @returns {number} Number of reps.\r\n */\r\nMiew.prototype.repCount = function (name) {\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repCount() : 0;\r\n};\r\n\r\n/**\r\n * Get or set the current representation index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @param {string=} [name] - Complex name. Defaults to the current one.\r\n * @returns {number} The current index.\r\n */\r\nMiew.prototype.repCurrent = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n const newIdx = visual ? visual.repCurrent(index) : -1;\r\n if (index && newIdx !== index) {\r\n this.logger.warn(`Representation ${index} was not found. Current rep remains unchanged.`);\r\n }\r\n return newIdx;\r\n};\r\n\r\n/**\r\n * Get or set representation by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount}(). Defaults to the current one.\r\n * @param {object=} rep - Optional representation description.\r\n * @param {string=} rep.selector - Selector string.\r\n * @param {string=} rep.mode - Mode id.\r\n * @param {string=} rep.colorer - Colorer id.\r\n * @param {string=} rep.material - Material id.\r\n * @returns {?object} Representation description.\r\n */\r\nMiew.prototype.rep = function (index, rep) {\r\n const visual = this._getComplexVisual('');\r\n if (!visual) {\r\n return null;\r\n }\r\n const res = visual.rep(index, rep);\r\n if (res.status === 'created') {\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name: visual.name });\r\n } else if (res.status === 'changed') {\r\n this.dispatchEvent({ type: 'repChanged', index: res.index, name: visual.name });\r\n }\r\n return res.desc;\r\n};\r\n\r\n/**\r\n * Get representation (not just description) by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount}(). Defaults to the current one.\r\n * @returns {?object} Representation.\r\n */\r\nMiew.prototype.repGet = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repGet(index) : null;\r\n};\r\n\r\n/**\r\n * Add new representation.\r\n * @param {object=} rep - Representation description.\r\n * @returns {number} Index of the new representation.\r\n */\r\nMiew.prototype.repAdd = function (rep, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return -1;\r\n }\r\n\r\n const res = visual.repAdd(rep);\r\n if (res) {\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name });\r\n return res.index;\r\n }\r\n return -1;\r\n};\r\n\r\n/**\r\n * Remove representation.\r\n * @param {number=} index - Zero-based representation index.\r\n */\r\nMiew.prototype.repRemove = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n visual.repRemove(index);\r\n this.dispatchEvent({ type: 'repRemoved', index, name });\r\n};\r\n\r\n/**\r\n * Hide representation.\r\n * @param {number} index - Zero-based representation index.\r\n * @param {boolean=} hide - Specify false to make rep visible, true to hide (by default).\r\n */\r\nMiew.prototype.repHide = function (index, hide, name) {\r\n this._needRender = true;\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repHide(index, hide) : null;\r\n};\r\n\r\nMiew.prototype._setEditMode = function (mode) {\r\n this._editMode = mode;\r\n\r\n const elem = this._msgMode;\r\n if (elem) {\r\n elem.style.opacity = (mode === EDIT_MODE.COMPLEX) ? 0.0 : 1.0;\r\n\r\n if (mode !== EDIT_MODE.COMPLEX) {\r\n const t = elem.getElementsByTagName('p')[0];\r\n t.innerHTML = (mode === EDIT_MODE.COMPONENT) ? 'COMPONENT EDIT MODE' : 'FRAGMENT EDIT MODE';\r\n }\r\n }\r\n\r\n this.dispatchEvent({ type: 'editModeChanged', data: mode === EDIT_MODE.COMPLEX });\r\n};\r\n\r\nMiew.prototype._enterComponentEditMode = function () {\r\n if (this._editMode !== EDIT_MODE.COMPLEX) {\r\n return;\r\n }\r\n\r\n const editors = [];\r\n this._forEachComplexVisual((visual) => {\r\n const editor = visual.beginComponentEdit();\r\n if (editor) {\r\n editors.push(editor);\r\n }\r\n });\r\n\r\n if (editors.length === 0) {\r\n return;\r\n }\r\n\r\n this._editors = editors;\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- ON');\r\n this._setEditMode(EDIT_MODE.COMPONENT);\r\n this._objectControls.keysTranslateObj(true);\r\n};\r\n\r\nMiew.prototype._applyComponentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.COMPONENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n this._objectControls.keysTranslateObj(false);\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].apply();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- OFF (applied)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._discardComponentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.COMPONENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n this._objectControls.keysTranslateObj(false);\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].discard();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- OFF (discarded)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this._needRender = true;\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._enterFragmentEditMode = function () {\r\n if (this._editMode !== EDIT_MODE.COMPLEX) {\r\n return;\r\n }\r\n\r\n const selectedVisuals = [];\r\n this._forEachComplexVisual((visual) => {\r\n if (visual instanceof ComplexVisual\r\n && visual.getSelectionCount() > 0) {\r\n selectedVisuals.push(visual);\r\n }\r\n });\r\n\r\n if (selectedVisuals.length !== 1) {\r\n // either we have no selection or\r\n // we have selected atoms in two or more visuals -- not supported\r\n return;\r\n }\r\n\r\n const editor = selectedVisuals[0].beginFragmentEdit();\r\n if (!editor) {\r\n return;\r\n }\r\n this._editors = [editor];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- ON (single bond)');\r\n this._setEditMode(EDIT_MODE.FRAGMENT);\r\n this._objectControls.allowTranslation(false);\r\n this._objectControls.allowAltObjFreeRotation(editor.isFreeRotationAllowed());\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._applyFragmentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.FRAGMENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].apply();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- OFF (applied)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._discardFragmentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.FRAGMENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].discard();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- OFF (discarded)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._onPick = function (event) {\r\n if (!settings.now.picking) {\r\n // picking is disabled\r\n return;\r\n }\r\n\r\n if (this._animInterval !== null) {\r\n // animation playback is on\r\n return;\r\n }\r\n\r\n if (this._editMode === EDIT_MODE.FRAGMENT) {\r\n // prevent picking in fragment edit mode\r\n return;\r\n }\r\n\r\n if (this._objectControls.isEditingAltObj()) {\r\n // prevent picking during component rotation\r\n return;\r\n }\r\n\r\n // update last pick & find complex\r\n let complex = null;\r\n if (event.obj.atom) {\r\n complex = event.obj.atom.residue.getChain().getComplex();\r\n this._lastPick = event.obj.atom;\r\n } else if (event.obj.residue) {\r\n complex = event.obj.residue.getChain().getComplex();\r\n this._lastPick = event.obj.residue;\r\n } else if (event.obj.chain) {\r\n complex = event.obj.chain.getComplex();\r\n this._lastPick = event.obj.chain;\r\n } else if (event.obj.molecule) {\r\n complex = event.obj.molecule.complex;\r\n this._lastPick = event.obj.molecule;\r\n } else {\r\n this._lastPick = null;\r\n }\r\n\r\n function _updateSelection(visual) {\r\n visual.updateSelectionMask(event.obj);\r\n visual.rebuildSelectionGeometry();\r\n }\r\n\r\n // update visual\r\n if (complex) {\r\n const visual = this._getVisualForComplex(complex);\r\n if (visual) {\r\n _updateSelection(visual);\r\n this._needRender = true;\r\n }\r\n } else {\r\n this._forEachComplexVisual(_updateSelection);\r\n this._needRender = true;\r\n }\r\n\r\n this._updateInfoPanel();\r\n this.dispatchEvent(event);\r\n};\r\n\r\nMiew.prototype._onKeyDown = function (event) {\r\n if (!this._running || !this._hotKeysEnabled) {\r\n return;\r\n }\r\n\r\n // editing keys\r\n if (settings.now.editing) {\r\n switch (event.code) {\r\n case 'KeyC':\r\n this._enterComponentEditMode();\r\n break;\r\n case 'KeyF':\r\n this._enterFragmentEditMode();\r\n break;\r\n case 'KeyA':\r\n switch (this._editMode) {\r\n case EDIT_MODE.COMPONENT:\r\n this._applyComponentEdit();\r\n break;\r\n case EDIT_MODE.FRAGMENT:\r\n this._applyFragmentEdit();\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n case 'KeyD':\r\n switch (this._editMode) {\r\n case EDIT_MODE.COMPONENT:\r\n this._discardComponentEdit();\r\n break;\r\n case EDIT_MODE.FRAGMENT:\r\n this._discardFragmentEdit();\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n default:\r\n }\r\n }\r\n\r\n // other keys\r\n switch (event.code) {\r\n case 'NumpadAdd':\r\n if (event.altKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._forEachComplexVisual((visual) => {\r\n visual.expandSelection();\r\n visual.rebuildSelectionGeometry();\r\n });\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n }\r\n break;\r\n case 'NumpadSubtract':\r\n if (event.altKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._forEachComplexVisual((visual) => {\r\n visual.shrinkSelection();\r\n visual.rebuildSelectionGeometry();\r\n });\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n }\r\n break;\r\n default:\r\n }\r\n};\r\n\r\nMiew.prototype._onKeyUp = function (event) {\r\n if (!this._running || !this._hotKeysEnabled) {\r\n return;\r\n }\r\n\r\n if (event.code === 'KeyX') {\r\n this._extractRepresentation();\r\n }\r\n};\r\n\r\nMiew.prototype._updateInfoPanel = function () {\r\n const info = this._msgAtomInfo.getElementsByTagName('p')[0];\r\n let atom;\r\n let residue;\r\n\r\n let count = 0;\r\n this._forEachComplexVisual((visual) => {\r\n count += visual.getSelectionCount();\r\n });\r\n\r\n while (info.firstChild) {\r\n info.removeChild(info.firstChild);\r\n }\r\n\r\n if (count === 0) {\r\n this._msgAtomInfo.style.opacity = 0.0;\r\n return;\r\n }\r\n\r\n let firstLine = `${String(count)} atom${count !== 1 ? 's' : ''} selected`;\r\n if (this._lastPick !== null) {\r\n firstLine += ', the last pick:';\r\n }\r\n let secondLine = '';\r\n let aName = '';\r\n let coordLine = '';\r\n\r\n if (this._lastPick instanceof Atom) {\r\n atom = this._lastPick;\r\n residue = atom.residue;\r\n\r\n aName = atom.name;\r\n const location = (atom.location !== 32) ? String.fromCharCode(atom.location) : ''; // 32 is code of white-space\r\n secondLine = `${atom.element.fullName} #${atom.serial}${location}: \\\r\n ${residue._chain._name}.${residue._type._name}${residue._sequence}${residue._icode.trim()}.`;\r\n secondLine += aName;\r\n\r\n coordLine = `Coord: (${atom.position.x.toFixed(2).toString()},\\\r\n ${atom.position.y.toFixed(2).toString()},\\\r\n ${atom.position.z.toFixed(2).toString()})`;\r\n } else if (this._lastPick instanceof Residue) {\r\n residue = this._lastPick;\r\n\r\n secondLine = `${residue._type._fullName}: \\\r\n ${residue._chain._name}.${residue._type._name}${residue._sequence}${residue._icode.trim()}`;\r\n } else if (this._lastPick instanceof Chain) {\r\n secondLine = `chain ${this._lastPick._name}`;\r\n } else if (this._lastPick instanceof Molecule) {\r\n secondLine = `molecule ${this._lastPick._name}`;\r\n }\r\n\r\n info.appendChild(document.createTextNode(firstLine));\r\n\r\n if (secondLine !== '') {\r\n info.appendChild(document.createElement('br'));\r\n info.appendChild(document.createTextNode(secondLine));\r\n }\r\n\r\n if (coordLine !== '') {\r\n info.appendChild(document.createElement('br'));\r\n info.appendChild(document.createTextNode(coordLine));\r\n }\r\n\r\n this._msgAtomInfo.style.opacity = 1.0;\r\n};\r\n\r\nMiew.prototype._getAltObj = function () {\r\n if (this._editors) {\r\n let altObj = null;\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n const nextAltObj = this._editors[i].getAltObj();\r\n if (nextAltObj.objects.length > 0) {\r\n if (altObj) {\r\n // we have selected atoms in two or more visuals -- not supported\r\n altObj = null;\r\n break;\r\n }\r\n altObj = nextAltObj;\r\n }\r\n }\r\n if (altObj) {\r\n return altObj;\r\n }\r\n }\r\n\r\n return {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n};\r\n\r\nMiew.prototype.resetPivot = (function () {\r\n const boundingBox = new THREE.Box3();\r\n const center = new THREE.Vector3();\r\n\r\n return function () {\r\n boundingBox.makeEmpty();\r\n this._forEachVisual((visual) => {\r\n boundingBox.union(visual.getBoundaries().boundingBox);\r\n });\r\n\r\n boundingBox.getCenter(center);\r\n this._objectControls.setPivot(center.negate());\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotResidue = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n return function (residue) {\r\n const visual = this._getVisualForComplex(residue.getChain().getComplex());\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n if (residue._controlPoint) {\r\n center.copy(residue._controlPoint);\r\n } else {\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n const amount = residue._atoms.length;\r\n for (let i = 0; i < amount; ++i) {\r\n const p = residue._atoms[i].position;\r\n x += p.x / amount;\r\n y += p.y / amount;\r\n z += p.z / amount;\r\n }\r\n center.set(x, y, z);\r\n }\r\n center.applyMatrix4(visual.matrix).negate();\r\n this._objectControls.setPivot(center);\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotAtom = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n return function (atom) {\r\n const visual = this._getVisualForComplex(atom.residue.getChain().getComplex());\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n center.copy(atom.position);\r\n center.applyMatrix4(visual.matrix).negate();\r\n this._objectControls.setPivot(center);\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.getSelectionCenter = (function () {\r\n const _centerInVisual = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n return function (center, includesAtom, selector) {\r\n center.set(0.0, 0.0, 0.0);\r\n let count = 0;\r\n\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getSelectionCenter(_centerInVisual, includesAtom, selector || visual.getSelectionBit())) {\r\n center.add(_centerInVisual);\r\n count++;\r\n }\r\n });\r\n if (count === 0) {\r\n return false;\r\n }\r\n center.divideScalar(count);\r\n center.negate();\r\n return true;\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotSubset = (function () {\r\n const _center = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n function _includesInCurSelection(atom, selectionBit) {\r\n return atom.mask & (1 << selectionBit);\r\n }\r\n\r\n function _includesInSelector(atom, selector) {\r\n return selector.selector.includesAtom(atom);\r\n }\r\n\r\n return function (selector) {\r\n const includesAtom = (selector) ? _includesInSelector : _includesInCurSelection;\r\n\r\n if (this.getSelectionCenter(_center, includesAtom, selector)) {\r\n this._objectControls.setPivot(_center);\r\n this.dispatchEvent({ type: 'transform' });\r\n } else {\r\n this.logger.warn('selection is empty. Center operation not performed');\r\n }\r\n };\r\n}());\r\n\r\n/**\r\n * Makes a screenshot.\r\n * @param {number} [width] - Width of an image. Defaults to the canvas width.\r\n * @param {number} [height] - Height of an image. Defaults to the width (square) or canvas height,\r\n * if width is omitted too.\r\n * @returns {string} Data URL representing the image contents.\r\n */\r\nMiew.prototype.screenshot = function (width, height) {\r\n const gfx = this._gfx;\r\n const deviceWidth = gfx.renderer.domElement.width;\r\n const deviceHeight = gfx.renderer.domElement.height;\r\n\r\n function fov2Tan(fov) {\r\n return Math.tan(THREE.MathUtils.degToRad(0.5 * fov));\r\n }\r\n\r\n function tan2Fov(tan) {\r\n return THREE.MathUtils.radToDeg(Math.atan(tan)) * 2.0;\r\n }\r\n\r\n function getDataURL() {\r\n let dataURL;\r\n const currBrowser = utils.getBrowser();\r\n\r\n if (currBrowser === utils.browserType.SAFARI) {\r\n const canvas = document.createElement('canvas');\r\n const canvasContext = canvas.getContext('2d');\r\n\r\n canvas.width = width === undefined ? deviceWidth : width;\r\n canvas.height = height === undefined ? deviceHeight : height;\r\n\r\n canvasContext.drawImage(gfx.renderer.domElement, 0, 0, canvas.width, canvas.height);\r\n dataURL = canvas.toDataURL('image/png');\r\n } else {\r\n // Copy current canvas to screenshot\r\n dataURL = gfx.renderer.domElement.toDataURL('image/png');\r\n }\r\n return dataURL;\r\n }\r\n height = height || width;\r\n\r\n let screenshotURI;\r\n if ((width === undefined && height === undefined)\r\n || (width === deviceWidth && height === deviceHeight)) {\r\n // renderer.domElement.toDataURL('image/png') returns flipped image in Safari\r\n // It hasn't been resolved yet, but getScreenshotSafari()\r\n // fixes it using an extra canvas.\r\n screenshotURI = getDataURL();\r\n } else {\r\n const originalAspect = gfx.camera.aspect;\r\n const originalFov = gfx.camera.fov;\r\n const originalTanFov2 = fov2Tan(gfx.camera.fov);\r\n\r\n // screenshot should contain the principal area of interest (a centered square touching screen sides)\r\n const areaOfInterestSize = Math.min(gfx.width, gfx.height);\r\n const areaOfInterestTanFov2 = originalTanFov2 * areaOfInterestSize / gfx.height;\r\n\r\n // set appropriate camera aspect & FOV\r\n const shotAspect = width / height;\r\n gfx.renderer.setPixelRatio(1);\r\n gfx.camera.aspect = shotAspect;\r\n gfx.camera.fov = tan2Fov(areaOfInterestTanFov2 / Math.min(shotAspect, 1.0));\r\n gfx.camera.updateProjectionMatrix();\r\n\r\n // resize canvas to the required size of screenshot\r\n gfx.renderer.setDrawingBufferSize(width, height, 1);\r\n\r\n // make screenshot\r\n this._renderFrame(settings.now.stereo);\r\n screenshotURI = getDataURL();\r\n\r\n // restore original camera & canvas proportions\r\n gfx.renderer.setPixelRatio(window.devicePixelRatio);\r\n gfx.camera.aspect = originalAspect;\r\n gfx.camera.fov = originalFov;\r\n gfx.camera.updateProjectionMatrix();\r\n gfx.renderer.setDrawingBufferSize(gfx.width, gfx.height, window.devicePixelRatio);\r\n this._needRender = true;\r\n }\r\n\r\n return screenshotURI;\r\n};\r\n\r\n/**\r\n * Makes screenshot and initiates a download.\r\n * @param {string} [filename] - Name of a file. Default to a 'screenshot-XXXXX.png', where XXXXX is a current\r\n * date/time in seconds.\r\n * @param {number} [width] - Width of an image. Defaults to the canvas width.\r\n * @param {number} [height] - Height of an image. Defaults to the width (square) or canvas height,\r\n * if width is omitted too.\r\n */\r\nMiew.prototype.screenshotSave = function (filename, width, height) {\r\n const uri = this.screenshot(width, height);\r\n utils.shotDownload(uri, filename);\r\n};\r\n\r\nMiew.prototype.save = function (opts) {\r\n this._export(opts.fileType).then((dataString) => {\r\n const filename = this._visuals[this._curVisualName]._complex.name;\r\n utils.download(dataString, filename, opts.fileType);\r\n this._refreshTitle();\r\n this.dispatchEvent({ type: 'exportingDone' });\r\n }).catch((error) => {\r\n this.logger.error('Could not export data');\r\n this.logger.debug(error);\r\n this._refreshTitle();\r\n this.dispatchEvent({ type: 'exportingDone', error });\r\n });\r\n};\r\n\r\nMiew.prototype._tweakResolution = function () {\r\n const maxPerf = [\r\n ['poor', 100],\r\n ['low', 500],\r\n ['medium', 1000],\r\n ['high', 5000],\r\n ['ultra', Number.MAX_VALUE],\r\n ];\r\n\r\n let atomCount = 0;\r\n this._forEachComplexVisual((visual) => {\r\n atomCount += visual.getComplex().getAtomCount();\r\n });\r\n\r\n if (atomCount > 0) {\r\n const performance = this._gfxScore * 10e5 / atomCount;\r\n // set resolution based on estimated performance\r\n for (let i = 0; i < maxPerf.length; ++i) {\r\n if (performance < maxPerf[i][1]) {\r\n this._autoChangeResolution(maxPerf[i][0]);\r\n break;\r\n }\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._autoChangeResolution = function (resolution) {\r\n if (resolution !== settings.now.resolution) {\r\n this.logger.report(`Your rendering resolution was changed to \"${resolution}\" for best performance.`);\r\n }\r\n settings.now.resolution = resolution;\r\n};\r\n\r\n/**\r\n * Save current settings to cookies.\r\n */\r\nMiew.prototype.saveSettings = function () {\r\n this._cookies.setCookie(this._opts.settingsCookie, JSON.stringify(this.settings.getDiffs(true)));\r\n};\r\n\r\n/**\r\n * Load settings from cookies.\r\n */\r\nMiew.prototype.restoreSettings = function () {\r\n try {\r\n const cookie = this._cookies.getCookie(this._opts.settingsCookie);\r\n const diffs = cookie ? JSON.parse(cookie) : {};\r\n this.settings.applyDiffs(diffs, true);\r\n } catch (e) {\r\n this.logger.error(`Cookies parse error: ${e.message}`);\r\n }\r\n};\r\n\r\n/**\r\n * Reset current settings to the defaults.\r\n */\r\nMiew.prototype.resetSettings = function () {\r\n this.settings.reset();\r\n};\r\n\r\n/*\r\n * DANGEROUS and TEMPORARY. The method should change or disappear in future versions.\r\n * @param {string|object} opts - See {@link Miew} constructor.\r\n * @see {@link Miew#set}, {@link Miew#repAdd}, {@link Miew#rep}.\r\n */\r\nMiew.prototype.setOptions = function (opts) {\r\n if (typeof opts === 'string') {\r\n opts = Miew.options.fromAttr(opts);\r\n }\r\n if (opts.reps) {\r\n this._opts.reps = null;\r\n }\r\n _.merge(this._opts, opts);\r\n if (opts.settings) {\r\n this.set(opts.settings);\r\n }\r\n\r\n this._opts._objects = opts._objects;\r\n this._resetObjects();\r\n\r\n if (opts.load) {\r\n this.load(opts.load, { fileType: opts.type });\r\n }\r\n\r\n if (opts.preset) {\r\n settings.now.preset = opts.preset;\r\n }\r\n\r\n if (opts.reps) {\r\n this.resetReps(opts.preset);\r\n }\r\n\r\n if (this._opts.view) {\r\n this.view(this._opts.view);\r\n delete this._opts.view;\r\n }\r\n\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n visual.getComplex().resetCurrentUnit();\r\n if (_.isNumber(opts.unit)) {\r\n visual.getComplex().setCurrentUnit(opts.unit);\r\n }\r\n this.resetView();\r\n this.rebuildAll();\r\n }\r\n};\r\n\r\nMiew.prototype.info = function (name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return {};\r\n }\r\n const complex = visual.getComplex();\r\n const { metadata } = complex;\r\n return {\r\n id: metadata.id || complex.name || 'UNKNOWN',\r\n title: (metadata.title && metadata.title.join(' ')) || 'UNKNOWN DATA',\r\n atoms: complex.getAtomCount(),\r\n bonds: complex.getBondCount(),\r\n residues: complex.getResidueCount(),\r\n chains: complex.getChainCount(),\r\n };\r\n};\r\n\r\n/*\r\n * OBJECTS SEGMENT\r\n */\r\n\r\nMiew.prototype.addObject = function (objData, bThrow) {\r\n let Ctor = null;\r\n\r\n if (objData.type === LinesObject.prototype.type) {\r\n Ctor = LinesObject;\r\n }\r\n\r\n if (Ctor === null) {\r\n throw new Error(`Unknown scene object type - ${objData.type}`);\r\n }\r\n\r\n try {\r\n const newObj = new Ctor(objData.params, objData.opts);\r\n this._addSceneObject(newObj);\r\n } catch (error) {\r\n if (!bThrow) {\r\n this.logger.debug(`Error during scene object creation: ${error.message}`);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._addSceneObject = function (sceneObject) {\r\n const visual = this._getComplexVisual();\r\n if (sceneObject.build && visual) {\r\n sceneObject.build(visual.getComplex());\r\n this._gfx.pivot.add(sceneObject.getGeometry());\r\n }\r\n const objects = this._objects;\r\n objects[objects.length] = sceneObject;\r\n};\r\n\r\nMiew.prototype._updateObjsToFrame = function (frameData) {\r\n const objs = this._objects;\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n if (objs[i].updateToFrame) {\r\n objs[i].updateToFrame(frameData);\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._resetObjects = function () {\r\n const objs = this._opts._objects;\r\n\r\n this._objects = [];\r\n if (objs) {\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n this.addObject(objs[i], false);\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype.removeObject = function (index) {\r\n const obj = this._objects[index];\r\n if (!obj) {\r\n throw new Error(`Scene object with index ${index} does not exist`);\r\n }\r\n obj.destroy();\r\n this._objects.splice(index, 1);\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Get a string with a URL to reproduce the current scene.\r\n *\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=false] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=false] - when this flag is true, a view information is included\r\n * @returns {string} URL\r\n */\r\nMiew.prototype.getURL = function (opts) {\r\n return options.toURL(this.getState(_.defaults(opts, {\r\n compact: true,\r\n settings: false,\r\n view: false,\r\n })));\r\n};\r\n\r\n/**\r\n * Get a string with a script to reproduce the current scene.\r\n *\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=true] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=true] - when this flag is true, a view information is included\r\n * @returns {string} script\r\n */\r\nMiew.prototype.getScript = function (opts) {\r\n return options.toScript(this.getState(_.defaults(opts, {\r\n compact: true,\r\n settings: true,\r\n view: true,\r\n })));\r\n};\r\n\r\n/*\r\n * Generates object that represents the current state of representations list\r\n * @param {boolean} compareWithDefaults - when this flag is true, reps list is compared (if possible)\r\n * to preset's defaults and only diffs are generated\r\n */\r\nMiew.prototype._compareReps = function (complexVisual, compareWithDefaults) {\r\n const ans = {};\r\n let repCount = 0;\r\n\r\n if (complexVisual) {\r\n repCount = complexVisual.repCount();\r\n }\r\n\r\n const currPreset = settings.defaults.presets[settings.now.preset];\r\n let compare = compareWithDefaults;\r\n if (currPreset === undefined || currPreset.length > repCount) {\r\n compare = false;\r\n ans.preset = 'empty';\r\n } else if (settings.now.preset !== settings.defaults.preset) {\r\n ans.preset = settings.now.preset;\r\n }\r\n\r\n const repsDiff = [];\r\n let emptyReps = true;\r\n for (let i = 0, n = repCount; i < n; ++i) {\r\n repsDiff[i] = complexVisual.repGet(i).compare(compare ? currPreset[i] : null);\r\n if (!_.isEmpty(repsDiff[i])) {\r\n emptyReps = false;\r\n }\r\n }\r\n if (!emptyReps) {\r\n ans.reps = repsDiff;\r\n }\r\n return ans;\r\n};\r\n\r\n/*\r\n * Obtain object that represents current state of miew (might be used as options in constructor).\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=false] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=false] - when this flag is true, a view information is included\r\n * @returns {Object} State object.\r\n */\r\nMiew.prototype.getState = function (opts) {\r\n const state = {};\r\n\r\n opts = _.defaults(opts, {\r\n compact: true,\r\n settings: false,\r\n view: false,\r\n });\r\n\r\n // load\r\n const visual = this._getComplexVisual();\r\n if (visual !== null) {\r\n const complex = visual.getComplex();\r\n const { metadata } = complex;\r\n if (metadata.id) {\r\n const format = metadata.format ? `${metadata.format}:` : '';\r\n state.load = format + metadata.id;\r\n }\r\n const unit = complex.getCurrentUnit();\r\n if (unit !== 1) {\r\n state.unit = unit;\r\n }\r\n }\r\n\r\n // representations\r\n const repsInfo = this._compareReps(visual, opts.compact);\r\n if (repsInfo.preset) {\r\n state.preset = repsInfo.preset;\r\n }\r\n\r\n if (repsInfo.reps) {\r\n state.reps = repsInfo.reps;\r\n }\r\n\r\n // objects\r\n const objects = this._objects;\r\n const objectsState = [];\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n objectsState[i] = objects[i].identify();\r\n }\r\n if (objects.length > 0) {\r\n state._objects = objectsState;\r\n }\r\n\r\n // view\r\n if (opts.view) {\r\n state.view = this.view();\r\n }\r\n\r\n // settings\r\n if (opts.settings) {\r\n const diff = this.settings.getDiffs(false);\r\n if (!_.isEmpty(diff)) {\r\n state.settings = diff;\r\n }\r\n }\r\n\r\n return state;\r\n};\r\n\r\n/**\r\n * Get parameter value.\r\n * @param {string} param - Parameter name or path (e.g. 'modes.BS.atom').\r\n * @param {*=} value - Default value.\r\n * @returns {*} Parameter value.\r\n */\r\nMiew.prototype.get = function (param, value) {\r\n return settings.get(param, value);\r\n};\r\n\r\nMiew.prototype._clipPlaneUpdateValue = function (radius) {\r\n const clipPlaneValue = Math.max(\r\n this._gfx.camera.position.z - radius * settings.now.draft.clipPlaneFactor,\r\n settings.now.camNear,\r\n );\r\n\r\n const opts = { clipPlaneValue };\r\n this._forEachComplexVisual((visual) => {\r\n visual.setUberOptions(opts);\r\n });\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const obj = this._objects[i];\r\n if (obj._line) {\r\n obj._line.material.setUberOptions(opts);\r\n }\r\n }\r\n if (this._picker !== null) {\r\n this._picker.clipPlaneValue = clipPlaneValue;\r\n }\r\n};\r\n\r\nMiew.prototype._fogFarUpdateValue = function () {\r\n if (this._picker !== null) {\r\n if (this._gfx.scene.fog) {\r\n this._picker.fogFarValue = this._gfx.scene.fog.far;\r\n } else {\r\n this._picker.fogFarValue = undefined;\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._updateShadowmapMeshes = function (process) {\r\n this._forEachComplexVisual((visual) => {\r\n const reprList = visual._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n process(repr.geo, repr.material);\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype._updateMaterials = function (values, needTraverse = false, process = undefined) {\r\n this._forEachComplexVisual((visual) => visual.setMaterialValues(values, needTraverse, process));\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const obj = this._objects[i];\r\n if (obj._line) {\r\n obj._line.material.setValues(values);\r\n obj._line.material.needsUpdate = true;\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._fogAlphaChanged = function () {\r\n this._forEachComplexVisual((visual) => {\r\n visual.setUberOptions({\r\n fogAlpha: settings.now.fogAlpha,\r\n });\r\n });\r\n};\r\n\r\nMiew.prototype._embedWebXR = function () {\r\n // switch off\r\n if (settings.now.stereo !== 'WEBVR') {\r\n if (this.webVR) {\r\n this.webVR.disable();\r\n }\r\n this.webVR = null;\r\n return;\r\n }\r\n // switch on\r\n if (!this.webVR) {\r\n this.webVR = new WebVRPoC(() => {\r\n this._requestAnimationFrame(() => this._onTick());\r\n this._needRender = true;\r\n this._onResize();\r\n });\r\n }\r\n this.webVR.enable(this._gfx);\r\n};\r\n\r\nMiew.prototype._initOnSettingsChanged = function () {\r\n const on = (props, func) => {\r\n props = _.isArray(props) ? props : [props];\r\n props.forEach((prop) => {\r\n this.settings.addEventListener(`change:${prop}`, func);\r\n });\r\n };\r\n\r\n on('modes.VD.frame', () => {\r\n const volume = this._getVolumeVisual();\r\n if (volume === null) return;\r\n\r\n volume.showFrame(settings.now.modes.VD.frame);\r\n this._needRender = true;\r\n });\r\n\r\n on('modes.VD.isoMode', () => {\r\n const volume = this._getVolumeVisual();\r\n if (volume === null) return;\r\n\r\n volume.getMesh().material.updateDefines();\r\n this._needRender = true;\r\n });\r\n\r\n on('bg.color', () => {\r\n this._onBgColorChanged();\r\n });\r\n\r\n on('ao', () => {\r\n const values = { normalsToGBuffer: settings.now.ao };\r\n this._setUberMaterialValues(values);\r\n });\r\n\r\n on('zSprites', () => {\r\n this.rebuildAll();\r\n });\r\n\r\n on('fogColor', () => {\r\n this._onFogColorChanged();\r\n });\r\n\r\n on('fogColorEnable', () => {\r\n this._onFogColorChanged();\r\n });\r\n\r\n on('bg.transparent', (evt) => {\r\n const gfx = this._gfx;\r\n if (gfx) {\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n }\r\n // update materials\r\n this._updateMaterials({ fogTransparent: evt.value });\r\n this.rebuildAll();\r\n });\r\n\r\n on('draft.clipPlane', (evt) => {\r\n // update materials\r\n this._updateMaterials({ clipPlane: evt.value });\r\n this.rebuildAll();\r\n });\r\n\r\n on('shadow.on', (evt) => {\r\n // update materials\r\n const values = { shadowmap: evt.value, shadowmapType: settings.now.shadow.type };\r\n const gfx = this._gfx;\r\n if (gfx) {\r\n gfx.renderer.shadowMap.enabled = Boolean(values.shadowmap);\r\n }\r\n this._updateMaterials(values, true);\r\n if (values.shadowmap) {\r\n this._updateShadowCamera();\r\n this._updateShadowmapMeshes(meshutils.createShadowmapMaterial);\r\n } else {\r\n this._updateShadowmapMeshes(meshutils.removeShadowmapMaterial);\r\n }\r\n this._needRender = true;\r\n });\r\n\r\n on('shadow.type', (evt) => {\r\n // update materials if shadowmap is enable\r\n if (settings.now.shadow.on) {\r\n this._updateMaterials({ shadowmapType: evt.value }, true);\r\n this._needRender = true;\r\n }\r\n });\r\n\r\n on('shadow.radius', (evt) => {\r\n for (let i = 0; i < this._gfx.scene.children.length; i++) {\r\n if (this._gfx.scene.children[i].shadow !== undefined) {\r\n const light = this._gfx.scene.children[i];\r\n light.shadow.radius = evt.value;\r\n this._needRender = true;\r\n }\r\n }\r\n });\r\n\r\n on('fps', () => {\r\n this._fps.show(settings.now.fps);\r\n });\r\n\r\n on(['fog', 'fogNearFactor', 'fogFarFactor'], () => {\r\n this._updateFog();\r\n this._needRender = true;\r\n });\r\n\r\n on('fogAlpha', () => {\r\n const { fogAlpha } = settings.now;\r\n if (fogAlpha < 0 || fogAlpha > 1) {\r\n this.logger.warn('fogAlpha must belong range [0,1]');\r\n }\r\n this._fogAlphaChanged();\r\n this._needRender = true;\r\n });\r\n\r\n on('autoResolution', (evt) => {\r\n if (evt.value && !this._gfxScore) {\r\n this.logger.warn('Benchmarks are missed, autoresolution will not work! '\r\n + 'Autoresolution should be set during miew startup.');\r\n }\r\n });\r\n\r\n on('stereo', () => {\r\n this._embedWebXR(settings.now.stereo === 'WEBVR');\r\n this._needRender = true;\r\n });\r\n\r\n on(['transparency', 'palette'], () => {\r\n this.rebuildAll();\r\n });\r\n\r\n on('resolution', () => {\r\n // update complex visuals\r\n this.rebuildAll();\r\n\r\n // update volume visual\r\n const volume = this._getVolumeVisual();\r\n if (volume) {\r\n volume.getMesh().material.updateDefines();\r\n this._needRender = true;\r\n }\r\n });\r\n\r\n on(['axes', 'fxaa', 'ao',\r\n 'outline.on', 'outline.color', 'outline.threshold', 'outline.thickness'], () => {\r\n this._needRender = true;\r\n });\r\n};\r\n\r\n/**\r\n * Set parameter value.\r\n * @param {string|object} params - Parameter name or path (e.g. 'modes.BS.atom') or even settings object.\r\n * @param {*=} value - Value.\r\n */\r\nMiew.prototype.set = function (params, value) {\r\n settings.set(params, value);\r\n};\r\n\r\n/**\r\n * Select atoms with selection string.\r\n * @param {string} expression - string expression of selection\r\n * @param {boolean=} append - true to append selection atoms to current selection, false to rewrite selection\r\n */\r\nMiew.prototype.select = function (expression, append) {\r\n const visual = this._getComplexVisual();\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n let sel = expression;\r\n if (_.isString(expression)) {\r\n sel = selectors.parse(expression).selector;\r\n }\r\n\r\n visual.select(sel, append);\r\n this._lastPick = null;\r\n\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n};\r\n\r\nconst VIEW_VERSION = '1';\r\n\r\n/**\r\n * Get or set view info packed into string.\r\n *\r\n * **Note:** view is stored for *left-handed* cs, euler angles are stored in radians and *ZXY-order*,\r\n *\r\n * @param {string=} expression - Optional string encoded the view\r\n */\r\nMiew.prototype.view = function (expression) {\r\n const self = this;\r\n const { pivot } = this._gfx;\r\n let transform = [];\r\n const eulerOrder = 'ZXY';\r\n\r\n function encode() {\r\n const pos = pivot.position;\r\n const scale = self._objectControls.getScale() / settings.now.radiusToFit;\r\n const euler = new THREE.Euler();\r\n euler.setFromQuaternion(self._objectControls.getOrientation(), eulerOrder);\r\n transform = [\r\n pos.x, pos.y, pos.z,\r\n scale,\r\n euler.x, euler.y, euler.z,\r\n ];\r\n return VIEW_VERSION + utils.arrayToBase64(transform, Float32Array);\r\n }\r\n\r\n function decode() {\r\n // backwards compatible: old non-versioned view is the 0th version\r\n if (expression.length === 40) {\r\n expression = `0${expression}`;\r\n }\r\n\r\n const version = expression[0];\r\n transform = utils.arrayFromBase64(expression.substr(1), Float32Array);\r\n\r\n // apply adapter for old versions\r\n if (version !== VIEW_VERSION) {\r\n if (version === '0') {\r\n // cancel radiusToFit included in old views\r\n transform[3] /= 8.0;\r\n } else {\r\n // do nothing\r\n self.logger.warn(`Encoded view version mismatch, stored as ${version} vs ${VIEW_VERSION} expected`);\r\n return;\r\n }\r\n }\r\n\r\n const interpolator = self._interpolator;\r\n const srcView = interpolator.createView();\r\n srcView.position.copy(pivot.position);\r\n srcView.scale = self._objectControls.getScale();\r\n srcView.orientation.copy(self._objectControls.getOrientation());\r\n\r\n const dstView = interpolator.createView();\r\n dstView.position.set(transform[0], transform[1], transform[2]);\r\n\r\n // hack to make preset views work after we moved centering offset to visual nodes\r\n // FIXME should only store main pivot offset in preset\r\n if (self._getComplexVisual()) {\r\n dstView.position.sub(self._getComplexVisual().position);\r\n }\r\n\r\n dstView.scale = transform[3]; // eslint-disable-line prefer-destructuring\r\n dstView.orientation.setFromEuler(new THREE.Euler(transform[4], transform[5], transform[6], eulerOrder));\r\n\r\n interpolator.setup(srcView, dstView);\r\n }\r\n\r\n if (typeof expression === 'undefined') {\r\n return encode();\r\n }\r\n decode();\r\n\r\n return expression;\r\n};\r\n\r\n/*\r\n * Update current view due to viewinterpolator state\r\n */\r\nMiew.prototype._updateView = function () {\r\n const self = this;\r\n const { pivot } = this._gfx;\r\n\r\n const interpolator = this._interpolator;\r\n if (!interpolator.wasStarted()) {\r\n interpolator.start();\r\n }\r\n\r\n if (!interpolator.isMoving()) {\r\n return;\r\n }\r\n\r\n const res = interpolator.getCurrentView();\r\n if (res.success) {\r\n const curr = res.view;\r\n pivot.position.copy(curr.position);\r\n self._objectControls.setScale(curr.scale * settings.now.radiusToFit);\r\n self._objectControls.setOrientation(curr.orientation);\r\n this.dispatchEvent({ type: 'transform' });\r\n self._needRender = true;\r\n }\r\n};\r\n\r\n/**\r\n * Translate object by vector\r\n * @param {number} x - translation value (Ang) along model's X axis\r\n * @param {number} y - translation value (Ang) along model's Y axis\r\n * @param {number} z - translation value (Ang) along model's Z axis\r\n */\r\nMiew.prototype.translate = function (x, y, z) {\r\n this._objectControls.translatePivot(x, y, z);\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Rotate object by Euler angles\r\n * @param {number} x - rotation angle around X axis in radians\r\n * @param {number} y - rotation angle around Y axis in radians\r\n * @param {number} z - rotation angle around Z axis in radians\r\n */\r\nMiew.prototype.rotate = function (x, y, z) {\r\n this._objectControls.rotate(new THREE.Quaternion().setFromEuler(new THREE.Euler(x, y, z, 'XYZ')));\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Scale object by factor\r\n * @param {number} factor - scale multiplier, should greater than zero\r\n */\r\nMiew.prototype.scale = function (factor) {\r\n if (factor <= 0) {\r\n throw new RangeError('Scale should be greater than zero');\r\n }\r\n this._objectControls.scale(factor);\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Center view on selection\r\n * @param {empty | subset | string} selector - defines part of molecule which must be centered (\r\n * empty - center on current selection;\r\n * subset - center on picked atom/residue/molecule;\r\n * string - center on atoms correspond to selection string)\r\n */\r\nMiew.prototype.center = function (selector) {\r\n // no arguments - center on current selection;\r\n if (selector === undefined) {\r\n this.setPivotSubset();\r\n this._needRender = true;\r\n return;\r\n }\r\n // subset with atom or residue - center on picked atom/residue;\r\n if (selector.obj !== undefined && ('atom' in selector.obj || 'residue' in selector.obj)) { // from event with selection\r\n if ('atom' in selector.obj) {\r\n this.setPivotAtom(selector.obj.atom);\r\n } else {\r\n this.setPivotResidue(selector.obj.residue);\r\n }\r\n this._needRender = true;\r\n return;\r\n }\r\n // string - center on atoms correspond to selection string\r\n if (selector.obj === undefined && selector !== '') {\r\n const sel = selectors.parse(selector);\r\n if (sel.error === undefined) {\r\n this.setPivotSubset(sel);\r\n this._needRender = true;\r\n return;\r\n }\r\n }\r\n // empty subset or incorrect/empty string - center on all molecule;\r\n this.resetPivot();\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Build selector that contains all atoms within given distance from group of atoms\r\n * @param {Selector} selector - selector describing source group of atoms\r\n * @param {number} radius - distance\r\n * @returns {Selector} selector describing result group of atoms\r\n */\r\nMiew.prototype.within = function (selector, radius) {\r\n const visual = this._getComplexVisual();\r\n if (!visual) {\r\n return selectors.None();\r\n }\r\n\r\n if (selector instanceof String) {\r\n selector = selectors.parse(selector);\r\n }\r\n\r\n const res = visual.within(selector, radius);\r\n if (res) {\r\n visual.rebuildSelectionGeometry();\r\n this._needRender = true;\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Get atom position in 2D canvas coords\r\n * @param {string} fullAtomName - full atom name, like A.38.CG\r\n * @returns {Object} {x, y} or false if atom not found\r\n */\r\nMiew.prototype.projected = function (fullAtomName, complexName) {\r\n const visual = this._getComplexVisual(complexName);\r\n if (!visual) {\r\n return false;\r\n }\r\n\r\n const atom = visual.getComplex().getAtomByFullname(fullAtomName);\r\n if (atom === null) {\r\n return false;\r\n }\r\n\r\n const pos = atom.position.clone();\r\n // we consider atom position to be affected only by common complex transform\r\n // ignoring any transformations that may add during editing\r\n this._gfx.pivot.updateMatrixWorldRecursive();\r\n this._gfx.camera.updateMatrixWorldRecursive();\r\n this._gfx.pivot.localToWorld(pos);\r\n pos.project(this._gfx.camera);\r\n\r\n return {\r\n x: (pos.x + 1.0) * 0.5 * this._gfx.width,\r\n y: (1.0 - pos.y) * 0.5 * this._gfx.height,\r\n };\r\n};\r\n\r\n/**\r\n * Replace secondary structure with calculated one.\r\n *\r\n * DSSP algorithm implementation is used.\r\n *\r\n * Kabsch W, Sander C. 1983. Dictionary of protein secondary structure: pattern recognition of hydrogen-bonded and\r\n * geometrical features. Biopolymers. 22(12):2577-2637. doi:10.1002/bip.360221211.\r\n *\r\n * @param {string=} complexName - complex name\r\n */\r\nMiew.prototype.dssp = function (complexName) {\r\n const visual = this._getComplexVisual(complexName);\r\n if (!visual) {\r\n return;\r\n }\r\n visual.getComplex().dssp();\r\n\r\n // rebuild dependent representations (cartoon or ss-colored)\r\n visual._reprList.forEach((rep) => {\r\n if (rep.mode.id === 'CA' || rep.colorer.id === 'SS') {\r\n rep.needsRebuild = true;\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype.exportCML = function () {\r\n const self = this;\r\n\r\n function extractRotation(m) {\r\n const xAxis = new THREE.Vector3();\r\n const yAxis = new THREE.Vector3();\r\n const zAxis = new THREE.Vector3();\r\n m.extractBasis(xAxis, yAxis, zAxis);\r\n xAxis.normalize();\r\n yAxis.normalize();\r\n zAxis.normalize();\r\n const retMat = new THREE.Matrix4();\r\n retMat.identity();\r\n retMat.makeBasis(xAxis, yAxis, zAxis);\r\n return retMat;\r\n }\r\n\r\n function updateCMLData(complex) {\r\n const { root } = self._gfx;\r\n const mat = extractRotation(root.matrixWorld);\r\n const v4 = new THREE.Vector4(0, 0, 0, 0);\r\n const vCenter = new THREE.Vector4(0, 0, 0, 0);\r\n let xml = null;\r\n let ap = null;\r\n\r\n // update atoms in cml\r\n complex.forEachAtom((atom) => {\r\n if (atom.xmlNodeRef && atom.xmlNodeRef.xmlNode) {\r\n xml = atom.xmlNodeRef.xmlNode;\r\n ap = atom.position;\r\n v4.set(ap.x, ap.y, ap.z, 1.0);\r\n v4.applyMatrix4(mat);\r\n xml.setAttribute('x3', v4.x.toString());\r\n xml.setAttribute('y3', v4.y.toString());\r\n xml.setAttribute('z3', v4.z.toString());\r\n xml.removeAttribute('x2');\r\n xml.removeAttribute('y2');\r\n }\r\n });\r\n // update stereo groups in cml\r\n complex.forEachSGroup((sGroup) => {\r\n if (sGroup.xmlNodeRef && sGroup.xmlNodeRef.xmlNode) {\r\n xml = sGroup.xmlNodeRef.xmlNode;\r\n ap = sGroup.getPosition();\r\n v4.set(ap.x, ap.y, ap.z, 1.0);\r\n const cp = sGroup.getCentralPoint();\r\n if (cp === null) {\r\n v4.applyMatrix4(mat);\r\n } else {\r\n vCenter.set(cp.x, cp.y, cp.z, 0.0);\r\n v4.add(vCenter);\r\n v4.applyMatrix4(mat); // pos in global space\r\n vCenter.set(cp.x, cp.y, cp.z, 1.0);\r\n vCenter.applyMatrix4(mat);\r\n v4.sub(vCenter);\r\n }\r\n xml.setAttribute('x', v4.x.toString());\r\n xml.setAttribute('y', v4.y.toString());\r\n xml.setAttribute('z', v4.z.toString());\r\n }\r\n });\r\n }\r\n\r\n const visual = self._getComplexVisual();\r\n const complex = visual ? visual.getComplex() : null;\r\n if (complex && complex.originalCML) {\r\n updateCMLData(complex);\r\n\r\n // serialize xml structure to string\r\n const oSerializer = new XMLSerializer();\r\n return oSerializer.serializeToString(complex.originalCML);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Reproduce the RCSB PDB Molecule of the Month style by David S. Goodsell\r\n *\r\n * @see http://pdb101.rcsb.org/motm/motm-about\r\n */\r\nMiew.prototype.motm = function () {\r\n settings.set({\r\n fogColorEnable: true,\r\n fogColor: 0x000000,\r\n outline: { on: true, threshold: 0.01 },\r\n bg: { color: 0xffffff },\r\n });\r\n\r\n this._forEachComplexVisual((visual) => {\r\n const rep = [];\r\n const complex = visual.getComplex();\r\n const palette = palettes.get(settings.now.palette);\r\n for (let i = 0; i < complex.getChainCount(); i++) {\r\n const curChainName = complex._chains[i]._name;\r\n const curChainColor = palette.getChainColor(curChainName);\r\n rep[i] = {\r\n selector: `chain ${curChainName}`,\r\n mode: 'VW',\r\n colorer: ['CB', { color: curChainColor, factor: 0.9 }],\r\n material: 'FL',\r\n };\r\n }\r\n visual.resetReps(rep);\r\n });\r\n};\r\n\r\nMiew.prototype.VERSION = (typeof PACKAGE_VERSION !== 'undefined' && PACKAGE_VERSION) || '0.0.0-dev';\r\n\r\n// Uncomment this to get debug trace:\r\n// Miew.prototype.debugTracer = new utils.DebugTracer(Miew.prototype);\r\n\r\n_.assign(Miew, /** @lends Miew */ {\r\n VERSION: Miew.prototype.VERSION,\r\n\r\n registeredPlugins: [],\r\n\r\n // export namespaces // TODO: WIP: refactoring external interface\r\n chem,\r\n io,\r\n modes,\r\n colorers,\r\n materials,\r\n palettes,\r\n options,\r\n settings,\r\n utils,\r\n gfx: {\r\n Representation,\r\n },\r\n\r\n /**\r\n * Third-party libraries packaged together with Miew.\r\n *\r\n * @property {object} lodash - [Lodash](https://lodash.com/), a modern JavaScript utility library delivering\r\n * modularity, performance & extras.\r\n * @property {object} three - [three.js](https://threejs.org/), JavaScript 3D library.\r\n *\r\n * @example\r\n * var _ = Miew.thirdParty.lodash;\r\n * var opts = _.merge({ ... }, Miew.options.fromURL(window.location.search));\r\n * var miew = new Miew(opts);\r\n */\r\n thirdParty: {\r\n lodash: _,\r\n three: THREE,\r\n },\r\n});\r\n\r\nexport default Miew;\r\n","import palettes from '../gfx/palettes';\r\nimport settings from '../settings';\r\n\r\nconst modeIdDesc = {\r\n $help: [\r\n 'Rendering mode shortcut',\r\n ' BS - balls and sticks mode',\r\n ' LN - lines mode',\r\n ' LC - licorice mode',\r\n ' VW - van der waals mode',\r\n ' TR - trace mode',\r\n ' TU - tube mode',\r\n ' CA - cartoon mode',\r\n ' SA - isosurface mode',\r\n ' QS - quick surface mode',\r\n ' SE - solvent excluded mode',\r\n ' TX - text mode',\r\n ],\r\n BS: {\r\n $help: [\r\n ' Balls and sticks',\r\n ' aromrad = #aromatic radius',\r\n ' atom = #atom radius',\r\n ' bond = #bond radius',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' space = #space value\\n',\r\n ],\r\n },\r\n CA: {\r\n $help: [\r\n ' Cartoon',\r\n ' arrow = #arrow size',\r\n ' depth = #depth of surface',\r\n ' heightSegmentsRatio = ',\r\n ' radius = #tube radius',\r\n ' tension = #',\r\n ' width = #secondary width\\n',\r\n ],\r\n },\r\n LN: {\r\n $help: [\r\n ' Lines',\r\n ' atom = #atom radius',\r\n ' chunkarom = ',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' offsarom = \\n',\r\n ],\r\n },\r\n LC: {\r\n $help: [\r\n ' Licorice',\r\n ' aromrad = #aromatic radius',\r\n ' bond = #bond radius',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' space = #space value\\n',\r\n ],\r\n },\r\n VW: {\r\n $help: [\r\n ' Van der Waals',\r\n ' nothing\\n',\r\n ],\r\n },\r\n TR: {\r\n $help: [\r\n ' Trace',\r\n ' radius = #tube radius\\n',\r\n ],\r\n },\r\n TU: {\r\n $help: [\r\n ' Tube',\r\n ' heightSegmentsRatio = ',\r\n ' radius = #tube radius',\r\n ' tension = \\n',\r\n ],\r\n },\r\n SA: {\r\n $help: [\r\n ' Surface',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n QS: {\r\n $help: [\r\n ' Quick surface',\r\n ' isoValue = ',\r\n ' scale = ',\r\n ' wireframe = ',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n SE: {\r\n $help: [\r\n ' Solvent excluded surface',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n TX: {\r\n $help: [\r\n ' Text mode',\r\n ' template = string that can include \"{{ id }}\"',\r\n ' it will be replaced by value, id can be one of next:',\r\n ' serial, name, type, sequence, residue, chain, hetatm, water\\n',\r\n ' horizontalAlign = {\"left\", \"right\", \"center\"}',\r\n ' verticalAlign = {\"top\", \"bottom\", \"middle\"}',\r\n ' dx = #offset along x',\r\n ' dy = #offset along y',\r\n ' dz = #offset along z',\r\n ' fg = #text color modificator',\r\n ' could be keyword, named color or hex',\r\n ' fg = #back color modificator',\r\n ' could be keyword, named color or hex',\r\n ' showBg = #if set show background',\r\n ' plate under text',\r\n ],\r\n },\r\n};\r\n\r\nconst colorDesc = {\r\n $help: [\r\n 'Coloring mode shortcut',\r\n ' EL - color by element',\r\n ' CH - color by chain',\r\n ' SQ - color by sequence',\r\n ' RT - color by residue type',\r\n ' SS - color by secondary structure',\r\n ' UN - uniform',\r\n ],\r\n UN: {\r\n $help: [\r\n 'Parameters of coloring modes customization',\r\n ' Uniform',\r\n ' color = #RGB->HEX->dec\\n',\r\n ],\r\n color: {\r\n $help: Object.keys(palettes.get(settings.now.palette).namedColors).sort().join('\\n'),\r\n },\r\n },\r\n};\r\n\r\nconst materialDesc = {\r\n $help: [\r\n 'Material shortcut',\r\n ' DF - diffuse',\r\n ' TR - transparent',\r\n ' SF - soft plastic',\r\n ' PL - glossy plastic',\r\n ' ME - metal',\r\n ' GL - glass',\r\n ],\r\n};\r\n\r\nconst addRepDesc = {\r\n $help: [\r\n 'Short (packed) representation description as a set of variables',\r\n ' s=',\r\n ' selector property',\r\n ' m=[!:[,...]]',\r\n ' render mode property',\r\n ' c=[!:[,...]]',\r\n ' color mode property',\r\n ' mt=',\r\n ' material property',\r\n ],\r\n s: {\r\n $help: 'Selection expression string as it is in menu->representations->selection',\r\n },\r\n m: modeIdDesc,\r\n c: colorDesc,\r\n mt: materialDesc,\r\n};\r\n\r\nconst setGetParameterDesc = {\r\n $help: [\r\n 'Parameters of rendering modes customization: modes',\r\n 'Parameters of colorer customization: colorers',\r\n 'Autobuild: autobuild = (|)',\r\n ],\r\n modes: modeIdDesc,\r\n colorers: colorDesc,\r\n};\r\n\r\nconst help = {\r\n $help: [\r\n 'help (| )',\r\n 'You can get detailed information about command options',\r\n ' using \"help cmd.opt.opt.[...]\"\\n',\r\n ' you can use one line comments',\r\n ' everything started from (#|//) will be skipped',\r\n ' Example: >build //some comment\\n',\r\n 'List of available commands:',\r\n ],\r\n reset: {\r\n $help: [\r\n 'Reload current object, delete all representations',\r\n ' Nothing will work until load new object',\r\n ],\r\n },\r\n load: {\r\n $help: [\r\n 'load (||-f [<*.NC FILE URL STRING>])',\r\n ' Load new pdb object from selected source',\r\n ],\r\n PDBID: {\r\n $help: 'pdb id in remote molecule database',\r\n },\r\n URL: {\r\n $help: 'url to source file',\r\n },\r\n f: {\r\n $help: [\r\n 'open file system dialog to fetch local file',\r\n 'optionally you can determine trajectory file',\r\n 'via URL for *.top model',\r\n ],\r\n },\r\n },\r\n clear: {\r\n $help: 'No args. Clear terminal',\r\n },\r\n add: {\r\n $help: [\r\n 'add [] []',\r\n ' Add new item to representation set with',\r\n ' default or params',\r\n ],\r\n REP_NAME: {\r\n $help: 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n },\r\n DESCRIPTION: addRepDesc,\r\n },\r\n rep: {\r\n $help: [\r\n 'rep [|] []',\r\n ' set current representation by name or index',\r\n ' edit current representation by ',\r\n ],\r\n REP_NAME: {\r\n $help: [\r\n 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n 'Must be declared before',\r\n ],\r\n },\r\n REP_INDEX: {\r\n $help: 'Index of available representation',\r\n },\r\n DESCRIPTION: addRepDesc,\r\n },\r\n remove: {\r\n $help: [\r\n 'remove (|)',\r\n 'Remove representation by name or index',\r\n ],\r\n REP_NAME: {\r\n $help: [\r\n 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n 'Must be declared before',\r\n ],\r\n },\r\n REP_INDEX: {\r\n $help: 'Index of available representation',\r\n },\r\n },\r\n selector: {\r\n $help: [\r\n 'selector ',\r\n ' set selector from EXPRESSION to current representation',\r\n ],\r\n EXPRESSION: {\r\n $help: 'Selection expression string as it is in menu->representations->selection',\r\n },\r\n },\r\n mode: {\r\n $help: [\r\n 'mode [=...]',\r\n ' set rendering mode and apply parameters to current representation',\r\n ],\r\n MODE_ID: modeIdDesc,\r\n },\r\n color: {\r\n $help: [\r\n 'color [=...]',\r\n ' set colorer and apply parameters to current representation',\r\n ],\r\n COLORER_ID: colorDesc,\r\n },\r\n material: {\r\n $help: [\r\n 'material ',\r\n ' set material to current representation',\r\n ],\r\n MATERIAL_ID: materialDesc,\r\n },\r\n build: {\r\n $help: 'build help str',\r\n add: {\r\n $help: 'build.add',\r\n new: {\r\n $help: [\r\n 'add.new',\r\n 'add.new new line 1',\r\n 'add.new new line 2',\r\n 'add.new new line 3',\r\n ],\r\n },\r\n },\r\n del: {\r\n $help: 'build.del',\r\n },\r\n },\r\n list: {\r\n $help: [\r\n 'list [-e|-s||]',\r\n 'Print representations if no args print list of representations',\r\n ' -e expand list and show all representations',\r\n ' -s show all user-registered selectors',\r\n ' | show only current representation',\r\n ],\r\n },\r\n hide: {\r\n $help: [\r\n 'hide (|)',\r\n 'Hide representation referenced in args',\r\n ],\r\n },\r\n show: {\r\n $help: [\r\n 'show (|)',\r\n 'Show representation referenced in args',\r\n ],\r\n },\r\n get: {\r\n $help: [\r\n 'get ',\r\n 'Print value',\r\n ' - path to option use get.PARAMETER to get more info',\r\n ],\r\n PARAMETER: setGetParameterDesc,\r\n },\r\n set: {\r\n $help: [\r\n 'set ',\r\n 'Set with ',\r\n ' - path to option use set.PARAMETER to get more info',\r\n ],\r\n PARAMETER: setGetParameterDesc,\r\n },\r\n set_save: {\r\n $help: [\r\n 'set_save',\r\n 'Save current settings to cookie',\r\n ],\r\n },\r\n set_restore: {\r\n $help: [\r\n 'set_restore',\r\n 'Load and apply settings from cookie',\r\n ],\r\n },\r\n set_reset: {\r\n $help: [\r\n 'set_reset',\r\n 'Reset current settings to the defaults',\r\n ],\r\n },\r\n preset: {\r\n $help: [\r\n 'preset []',\r\n 'Reset current representation or set preset to ',\r\n ],\r\n PRESET: {\r\n $help: [\r\n 'default',\r\n 'wire',\r\n 'small',\r\n 'macro',\r\n ],\r\n },\r\n },\r\n unit: {\r\n $help: [\r\n 'unit []',\r\n 'Change current biological structure view. Zero value means asymmetric unit,',\r\n 'positive values set an assembly with corresponding number.',\r\n 'Being called with no parameters command prints current unit information.',\r\n ],\r\n },\r\n view: {\r\n $help: [\r\n 'view []',\r\n 'Get current encoded view or set if ENCODED_VIEW placed as argument',\r\n ],\r\n ENCODED_VIEW: {\r\n $help: [\r\n 'encoded view matrix string (binary code)',\r\n ],\r\n },\r\n },\r\n rotate: {\r\n $help: [\r\n 'rotate (x|y|z) [] [(x|y|z) []]...',\r\n 'Rotate scene',\r\n ],\r\n },\r\n scale: {\r\n $help: [\r\n 'scale ',\r\n 'Scale scene',\r\n ],\r\n },\r\n select: {\r\n $help: [\r\n 'select [as ]',\r\n 'Select atoms using selector defined in SELECTOR_STRING',\r\n ' and if SELECTOR_NAME is defined register it in viewer',\r\n ' you can use it later as a complex selector',\r\n ],\r\n },\r\n within: {\r\n $help: [\r\n 'within of as ',\r\n 'Build within named selector',\r\n ' DISTANCE ',\r\n ' SELECTOR_STRING ',\r\n ' SELECTOR_NAME ',\r\n ],\r\n },\r\n url: {\r\n $help: [\r\n 'url [-s] [-v]',\r\n 'Report URL encoded scene',\r\n ' if -s set that include settings in the URL',\r\n ' if -v set that include view in the URL',\r\n ],\r\n },\r\n screenshot: {\r\n $help: [\r\n 'screenshot [ []]',\r\n 'Make a screenshot of the scene',\r\n ' WIDTH in pixels',\r\n ' HEIGHT in pixels, equal to WIDTH by default',\r\n ],\r\n },\r\n line: {\r\n $help: [\r\n 'line [=]',\r\n 'Draw dashed line between two specified atoms',\r\n ],\r\n },\r\n removeobj: {\r\n $help: [\r\n 'removeobj ',\r\n 'Remove scene object by its index. Indices could be obtained by command',\r\n ],\r\n },\r\n listobj: {\r\n $help: [\r\n 'listobj',\r\n 'Display the list of all existing scene objects',\r\n ],\r\n },\r\n};\r\n\r\nexport default help;\r\n","import _ from 'lodash';\r\nimport Miew from './Miew';\r\nimport { parser as parsercli } from './utils/MiewCLIParser';\r\nimport clihelp from './utils/MiewCLIHelp';\r\nimport logger from './utils/logger';\r\nimport utils from './utils';\r\n\r\nconst {\r\n chem: { selectors },\r\n modes,\r\n colorers,\r\n materials,\r\n palettes,\r\n options,\r\n settings,\r\n} = Miew;\r\n\r\nfunction None() {\r\n}\r\n\r\nconst NULL = (function () {\r\n const obj = new None();\r\n return function () {\r\n return obj;\r\n };\r\n}());\r\n\r\nclass RepresentationMap {\r\n constructor() {\r\n this.representationMap = {};\r\n this.representationID = {};\r\n }\r\n\r\n get(strId) {\r\n return this.representationMap[strId] || this.representationID[strId] || '';\r\n }\r\n\r\n add(strId, index) {\r\n if (strId === -1) {\r\n return 'Can not create representation: there is no data';\r\n }\r\n\r\n if (index !== undefined) {\r\n if (!this.representationMap.hasOwnProperty(strId)) {\r\n this.representationMap[strId.toString()] = index;\r\n this.representationID[index] = strId.toString();\r\n } else {\r\n return 'This name has already existed, registered without name';\r\n }\r\n }\r\n return `Representation ${strId} successfully added`;\r\n }\r\n\r\n remove(index) {\r\n if (index && this.representationID.hasOwnProperty(index)) {\r\n delete this.representationMap[this.representationID[index]];\r\n delete this.representationID[index];\r\n }\r\n\r\n const sortedKeys = Object.keys(this.representationID).sort();\r\n for (const i in sortedKeys) {\r\n if (sortedKeys.hasOwnProperty(i)) {\r\n const id = sortedKeys[i];\r\n if (id > index) {\r\n this.representationID[id - 1] = this.representationID[id];\r\n this.representationMap[this.representationID[id]] -= 1;\r\n delete this.representationID[id];\r\n }\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n this.representationMap = {};\r\n this.representationID = {};\r\n }\r\n}\r\n\r\nconst representationsStorage = new RepresentationMap();\r\n\r\nfunction keyRemap(key) {\r\n const keys = {\r\n s: 'selector',\r\n m: 'mode',\r\n c: 'colorer',\r\n mt: 'material',\r\n mode: 'modes',\r\n color: 'colorers',\r\n colorer: 'colorers',\r\n select: 'selector',\r\n material: 'materials',\r\n selector: 'selector',\r\n };\r\n const ans = keys[key];\r\n return ans === undefined ? key : ans;\r\n}\r\n\r\nclass CLIUtils {\r\n list(miew, repMap, key) {\r\n let ret = '';\r\n if (miew && repMap !== undefined) {\r\n if (key === undefined || key === '-e') {\r\n const count = miew.repCount();\r\n\r\n for (let i = 0; i < count; i++) {\r\n ret += this.listRep(miew, repMap, i, key);\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n listRep(miew, repMap, repIndex, key) {\r\n let ret = '';\r\n const rep = miew.repGet(repIndex);\r\n if (!rep) {\r\n logger.warn(`Rep ${repIndex} does not exist!`);\r\n return ret;\r\n }\r\n const index = repIndex;\r\n const repName = repMap.get(index);\r\n\r\n const { mode, colorer } = rep;\r\n const selectionStr = rep.selectorString;\r\n const material = rep.materialPreset;\r\n\r\n ret += `#${index} : ${mode.name}${repName === '' ? '' : `, ${repName}`}\\n`;\r\n\r\n if (key !== undefined) {\r\n ret += ` selection : \"${selectionStr}\"\\n`;\r\n ret += ` mode : (${mode.id}), ${mode.name}\\n`;\r\n ret += ` colorer : (${colorer.id}), ${colorer.name}\\n`;\r\n ret += ` material : (${material.id}), ${material.name}\\n`;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n listSelector(miew, context) {\r\n let ret = '';\r\n\r\n for (const k in context) {\r\n if (context.hasOwnProperty(k)) {\r\n ret += `${k} : \"${context[k]}\"\\n`;\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n listObjs(miew) {\r\n const objs = miew._objects;\r\n\r\n if (!objs || !Array.isArray(objs) || objs.length === 0) {\r\n return 'There are no objects on the scene';\r\n }\r\n\r\n const strList = [];\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n strList[i] = `${i}: ${objs[i].toString()}`;\r\n }\r\n\r\n return strList.join('\\n');\r\n }\r\n\r\n joinHelpStr(helpData) {\r\n if (helpData instanceof Array) {\r\n return helpData.join('\\n');\r\n }\r\n return helpData;\r\n }\r\n\r\n help(path) {\r\n if (_.isUndefined(path)) {\r\n return `${this.joinHelpStr(clihelp.$help)}\\n${_.slice(_.sortBy(_.keys(clihelp)), 1).join(', ')}\\n`;\r\n }\r\n\r\n const helpItem = _.get(clihelp, path);\r\n return _.isUndefined(helpItem) ? this.help() : `${this.joinHelpStr(helpItem.$help)}\\n`;\r\n }\r\n\r\n load(miew, arg) {\r\n if (miew === undefined || arg === undefined || arg === '-f') {\r\n return;\r\n }\r\n miew.awaitWhileCMDisInProcess();\r\n const finish = () => miew.finishAwaitingCMDInProcess();\r\n miew.load(arg).then(finish, finish);\r\n }\r\n\r\n checkArg(key, arg, modificate) {\r\n if (key !== undefined && arg !== undefined) {\r\n if (keyRemap(key) === 'selector') {\r\n const res = selectors.parse(arg);\r\n\r\n if (res.error !== undefined) {\r\n const selExc = { message: res.error };\r\n throw selExc;\r\n }\r\n\r\n if (modificate !== undefined && modificate) {\r\n return res.selector;\r\n }\r\n return arg;\r\n }\r\n\r\n const modificators = {\r\n colorers,\r\n modes,\r\n materials,\r\n };\r\n\r\n let modificator = key;\r\n let temp;\r\n while (modificator !== temp) {\r\n temp = modificator;\r\n modificator = keyRemap(temp);\r\n }\r\n\r\n if (modificators[modificator].get(arg) === undefined) {\r\n const exc = { message: `${arg} is not existed in ${modificator}` };\r\n throw exc;\r\n }\r\n return arg;\r\n }\r\n return NULL;\r\n }\r\n\r\n propagateProp(path, arg) {\r\n if (path !== undefined) {\r\n let argExc = {};\r\n const adapter = options.adapters[typeof _.get(settings.defaults, path)];\r\n if (adapter === undefined) {\r\n const pathExc = { message: `${path} is not existed` };\r\n throw pathExc;\r\n }\r\n\r\n if ((path.endsWith('.color') || path.endsWith('.baseColor')\r\n || path.endsWith('.EL.carbon')) && typeof arg !== 'number') {\r\n arg = palettes.get(settings.now.palette).getNamedColor(arg);\r\n }\r\n\r\n if (path.endsWith('.fg') || path.endsWith('.bg')) {\r\n if (typeof arg !== 'number') {\r\n const val = palettes.get(settings.now.palette).getNamedColor(arg, true);\r\n if (val !== undefined) {\r\n arg = `0x${val.toString(16)}`;\r\n }\r\n } else {\r\n arg = `0x${arg.toString(16)}`;\r\n }\r\n }\r\n\r\n if (path.endsWith('.template')) {\r\n arg = arg.replace(/\\\\n/g, '\\n');// NOSONAR\r\n }\r\n\r\n if (arg !== undefined && adapter(arg) !== arg && adapter(arg) !== (arg > 0)) {\r\n argExc = { message: `${path} must be a \"${typeof _.get(settings.defaults, path)}\"` };\r\n throw argExc;\r\n }\r\n }\r\n return arg;\r\n }\r\n\r\n unquoteString(value) {\r\n return utils.unquoteString(value);\r\n }\r\n}\r\n// repIndexOrRepMap could be RepresentationMap or index\r\n\r\nconst utilFunctions = new CLIUtils();\r\n\r\nfunction CreateObjectPair(a, b) {\r\n const obj = {};\r\n obj[a] = b;\r\n return obj;\r\n}\r\n\r\nfunction ArgList(arg) {\r\n if (arg instanceof this.constructor) {\r\n return arg;\r\n }\r\n if (arg instanceof Array) {\r\n this._values = arg.slice(0);\r\n } else if (arg) {\r\n this._values = [arg];\r\n } else {\r\n this._values = [];\r\n }\r\n}\r\n\r\nArgList.prototype.append = function (value) {\r\n const values = this._values;\r\n values[values.length] = value;\r\n return this;\r\n};\r\n\r\nArgList.prototype.remove = function (value) {\r\n const values = this._values;\r\n const index = values.indexOf(value);\r\n if (index >= 0) {\r\n values.splice(index, 1);\r\n }\r\n return this;\r\n};\r\n\r\nArgList.prototype.toJSO = function (cliUtils, cmd, arg) {\r\n const res = {};\r\n\r\n const list = this._values;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n _.set(res, list[i].id, cliUtils.propagateProp(`${keyRemap(cmd)}.${arg}.${list[i].id}`, list[i].val));\r\n }\r\n\r\n return res;\r\n};\r\n\r\nfunction Arg(_id, _val) {\r\n this.id = _id;\r\n this.val = _val;\r\n}\r\n\r\nconst cliutils = Object.create({});\r\n\r\ncliutils.Arg = Arg;\r\ncliutils.ArgList = ArgList;\r\n\r\ncliutils.miew = null;\r\ncliutils.echo = null;\r\ncliutils.representations = representationsStorage;\r\ncliutils.utils = utilFunctions;\r\n\r\ncliutils._ = _;\r\ncliutils.CreateObjectPair = CreateObjectPair;\r\ncliutils.keyRemap = keyRemap;\r\ncliutils.Context = selectors.Context;\r\ncliutils.ClearContext = selectors.ClearContext;\r\n\r\ncliutils.NULL = NULL;\r\n\r\ncliutils.notimplemented = function () {\r\n return this.NULL;\r\n};\r\n\r\nMiew.prototype.script = function (script, _printCallback, _errorCallback) {\r\n parsercli.yy.miew = this;\r\n parsercli.yy.echo = _printCallback;\r\n parsercli.yy.error = _errorCallback;\r\n if (this.cmdQueue === undefined) {\r\n this.cmdQueue = [];\r\n }\r\n\r\n if (this.commandInAction === undefined) {\r\n this.commandInAction = false;\r\n }\r\n\r\n this.cmdQueue = this.cmdQueue.concat(script.split('\\n'));\r\n};\r\n\r\nMiew.prototype.awaitWhileCMDisInProcess = function () {\r\n this.commandInAction = true;\r\n};\r\n\r\nMiew.prototype.finishAwaitingCMDInProcess = function () {\r\n this.commandInAction = false;\r\n};\r\n\r\nMiew.prototype.isScriptingCommandAvailable = function () {\r\n return this.commandInAction !== undefined\r\n && !this.commandInAction\r\n && this.cmdQueue !== undefined\r\n && this.cmdQueue.length > 0;\r\n};\r\n\r\nMiew.prototype.callNextCmd = function () {\r\n if (this.isScriptingCommandAvailable()) {\r\n const cmd = this.cmdQueue.shift();\r\n\r\n const res = {};\r\n res.success = false;\r\n try {\r\n parsercli.parse(cmd);\r\n res.success = true;\r\n } catch (e) {\r\n res.error = e.message;\r\n parsercli.yy.error(res.error);\r\n this.finishAwaitingCMDInProcess();\r\n }\r\n return res;\r\n }\r\n return '';\r\n};\r\n\r\nparsercli.yy = cliutils;\r\n// workaround for incorrect JISON parser generator for AMD module\r\nparsercli.yy.parseError = parsercli.parseError;\r\n","import Miew from './Miew';\r\nimport './Miew-cli';\r\n\r\nexport default Miew;\r\n"],"names":["parser","o","k","v","l","length","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","$VV","$VW","$VX","$VY","$VZ","$V_","$V$","$V01","$V11","$V21","$V31","$V41","$V51","$V61","trace","yy","symbols_","terminals_","productions_","performAction","anonymous","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","miew","reset","ClearContext","resetReps","rebuild","rebuildAll","echo","utils","help","toString","motm","propagateProp","get","set","saveSettings","restoreSettings","resetSettings","applyPreset","repRemove","representations","remove","repHide","listRep","list","listSelector","Context","select","checkArg","toLowerCase","rep","repCurrent","selector","within","Number","material","toUpperCase","view","changeUnit","dssp","scale","i","n","rotate","Math","PI","translate","center","addObject","type","params","opts","toJSO","listObjs","removeObject","getURL","settings","screenshotSave","load","clear","add","repAdd","mode","Array","colorer","_","assign","CreateObjectPair","key","val","Object","create","keyRemap","concat","ArgList","append","Arg","parseInt","JSON","parse","String","table","defaultActions","parseError","str","hash","recoverable","error","Error","input","self","stack","tstack","vstack","lstack","recovering","TERROR","EOF","args","slice","call","arguments","lexer","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","push","ranges","options","getPrototypeOf","popStack","lex","token","pop","symbol","preErrorSymbol","state","action","a","r","yyval","p","len","newState","expected","errStr","showPosition","join","text","match","line","loc","first_line","last_line","first_column","last_column","range","apply","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","lines","unput","split","substr","oldLines","more","reject","backtrack_lexer","less","pastInput","past","replace","upcomingInput","next","pre","c","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","flex","begin","condition","popState","conditions","topState","abs","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","YYSTATE","unquoteString","Parser","module","exports","keyword","GetSelector","RangeList","Range","ValueList","AbstractInterpolator","CubicInterpolator","Enum","LinearInterpolator","NearestInterpolator","SincFilterInterpolator","Smooth","clipClamp","clipMirror","clipPeriodic","defaultConfig","getColumn","getType","isValidNumber","makeLanczosWindow","makeScaledFunction","makeSincKernel","normalizeScaleTo","shallowCopy","sin","sinc","validateNumber","validateVector","__hasProp","__extends","child","parent","ctor","constructor","__super__","METHOD_NEAREST","METHOD_LINEAR","METHOD_CUBIC","METHOD_LANCZOS","METHOD_SINC","CLIP_CLAMP","CLIP_ZERO","CLIP_PERIODIC","CLIP_MIRROR","CUBIC_TENSION_DEFAULT","CUBIC_TENSION_CATMULL_ROM","method","cubicTension","clip","scaleTo","sincFilterSize","sincWindow","max","min","period","array","config","clipHelper","clamp","clipHelperClamp","zero","clipHelperZero","periodic","clipHelperPeriodic","mirror","clipHelperMirror","getClippedInput","interpolate","t","_super","round","floor","tangentFactor","getTangent","m","t2","t3","x","window","kernel","sum","_ref","_ref2","arr","row","_i","_len","_results","f","baseScale","scaleRange","scaleFactor","translation","isNaN","isFinite","dimension","s","invalidErr","obj","copy","baseDomainEnd","interpolator","interpolatorClass","interpolators","properties","smoothFunc","lanczosFilterSize","nearest","linear","cubic","lanczos","count","_j","_len2","deepValidation","_k","_len3","domain","sort","define","amd","MMTF","e","byteLength","charCodeAt","setUint8","u","setUint16","setUint32","Uint8Array","buffer","setFloat64","setInt8","setInt16","setInt32","isArray","d","keys","ArrayBuffer","DataView","byteOffset","Int8Array","Int32Array","Float32Array","Int16Array","g","L","h","setFloat32","getFloat32","y","U","b","I","w","C","ceil","A","M","F","S","E","N","O","T","getInt32","subarray","j","q","D","P","z","B","V","G","R","rr","forEach","bondAtomList","bondOrderList","xCoordList","yCoordList","zCoordList","bFactorList","atomIdList","altLocList","occupancyList","groupIdList","groupTypeList","secStructList","insCodeList","sequenceIndexList","chainIdList","chainNameList","H","fromCharCode","getInt8","getUint8","getUint16","getUint32","getFloat64","getInt16","W","X","ignoreFields","nr","indexOf","J","K","firstModelOnly","onModel","onChain","onGroup","onAtom","onBond","chainsPerModel","chainCount","modelIndex","groupsPerChain","groupCount","chainIndex","chainId","chainName","groupList","atomNameList","atomCount","groupIndex","groupId","groupType","groupName","singleLetterCode","chemCompType","secStruct","insCode","sequenceIndex","atomIndex","atomId","element","elementList","atomName","formalCharge","formalChargeList","xCoord","yCoord","zCoord","bFactor","altLoc","occupancy","atomIndex1","atomIndex2","bondOrder","Q","Y","Z","response","XMLHttpRequest","addEventListener","responseType","open","send","or","ar","tr","er","ir","encode","decode","traverse","fetch","fetchReduced","version","fetchUrl","fetchReducedUrl","encodeMsgpack","encodeMmtf","decodeMsgpack","decodeMmtf","__assign","defaults","width","radius","corners","color","fadeColor","animation","direction","speed","zIndex","className","top","left","shadow","position","Spinner","spin","target","stop","el","document","createElement","setAttribute","style","transform","insertBefore","firstChild","drawLines","parentNode","removeChild","undefined","getColor","idx","borderRadius","shadows","parseBoxShadow","degrees","backgroundLine","height","background","transformOrigin","delay","boxShadow","normalizeShadow","appendChild","regex","_a","xUnits","yUnits","prefix","end","normalized","shadows_1","xy","convertOffset","radians","cos","Timer","startTime","oldTime","elapsedTime","running","start","now","getElapsedTime","update","delta","newTime","performance","bind","Date","tag","id","css","cssText","Stats","domElement","_text","_startTime","_prevTime","_deltas","_index","_total","_count","time","ms","fps","textContent","toPrecision","show","on","display","isUndefOrEqual","param","value","EventDispatcher","_handlers","callback","context","handlers","_checkPar","par","find","removeEventListener","handler","ev","values","omitBy","dispatchEvent","event","priorities","debug","info","report","warn","Logger","console","_priority","instantiate","verify","number","isNumber","defineProperty","findKey","level","levels","message","priority","_message","output","log","logger","browserType","DEFAULT","SAFARI","encodeQueryComponent","excludeExp","code","encodeURIComponent","decodeQueryComponent","decodeURIComponent","getUrlParameters","url","location","search","query","substring","result","exec","getUrlParametersAsDict","resolveURL","URL","href","anchor","generateRegExp","symbolStr","symbolList","listStr","RegExp","attrs","content","createTextNode","HTMLElement","deriveClass","cls","base","members","statics","deriveDeep","needZeroOwnProperties","res","hexColor","hex","DebugTracer","namespace","enabled","enable","indent","methods","wrap","method_","name_","spaces","name","Function","OutOfMemoryError","allocateTyped","TypedArrayName","size","RangeError","bytesToBase64","bytes","binary","btoa","bytesFromBase64","atob","arrayToBase64","TypedArrayClass","arrayFromBase64","compareOptionsWithDefaults","defOpts","optsStr","isAlmostPlainObject","isPlainObject","proto","objectsDiff","src","dst","diff","forIn","srcValue","dstValue","deepDiff","isEmpty","isEqual","forInRecursive","object","iterateThrough","newPref","enquoteString","isString","SyntaxError","getFileExtension","fileName","lastIndexOf","Infinity","splitFileName","ext","dataUrlToBlob","parts","partsCount","Blob","getBrowser","navigator","vendor","userAgent","shotOpen","write","shotDownload","dataUrl","filename","msSaveBlob","link","download","innerHTML","createObjectURL","body","click","data","blobData","copySubArrays","indices","itemSize","shallowCloneNode","node","newNode","cloneNode","worldPos","unquotedStringRE","enquoteHelper","correctSelectorIdentifier","test","concatTypedArraysUnsafe","first","second","mergeTypedArraysUnsafe","reduce","acc","cur","JobHandle","_shouldCancel","cancel","shouldCancel","notify","slaveEvent","VERSION","modes","BS","atom","bond","space","multibond","aromrad","showarom","polyComplexity","poor","low","medium","high","ultra","VW","LN","offsarom","chunkarom","lineWidth","LC","SA","zClip","probeRadius","subset","wireframe","SE","QS","isoValue","gaussLim","gridSpacing","CS","probePositions","TR","TU","heightSegmentsRatio","tension","CA","depth","ss","helix","arrow","strand","TX","template","horizontalAlign","verticalAlign","dx","dy","dz","fg","bg","showBg","VD","kSigma","kSigmaMed","kSigmaMax","frame","isoMode","colorers","EL","carbon","UN","CO","baseColor","CB","factor","SQ","gradient","TM","OC","HY","MO","antialias","camFov","camNear","camFar","camDistance","radiusToFit","fogNearFactor","fogFarFactor","fogAlpha","fogColor","fogColorEnable","palette","resolution","autoResolution","autoPreset","preset","presets","default","empty","wire","small","macro","objects","dashSize","gapSize","transparent","draft","clipPlane","clipPlaneFactor","clipPlaneSpeed","plugins","axes","fog","zSprites","isoSurfaceFakeOpacity","suspendRender","nowater","autobuild","fxaa","outline","threshold","thickness","ao","autoRotation","maxfps","fbxprec","autoRotationAxisFixed","zooming","picking","pick","editing","aromatic","singleUnit","stereo","interpolateViews","transparency","translationSpeed","example","good","ssaoKernelRadius","ssaoFactor","stereoBarrel","use","multiFile","Settings","old","_changed","path","oldValue","_notifyChange","merge","_notifyChanges","defaultValue","cloneDeep","checkpoint","deepValue","deepPath","changed","filter","applyDiffs","diffs","getDiffs","versioned","setPluginOpts","plugin","repIndex","asBoolean","adapters","string","boolean","cL1Ass","cOptsSep","cL2Ass","cLSep","cCommonIgnoreSymbols","getLevel1ExcludedExpr","cLevel1Ignores","getLevel2ExcludedExpr","cLevel2Ignores","cL1ExclExpr","encodeQueryComponentL1","cL2ExclExpr","encodeQueryComponentL2","ensureRepList","reps","ensureRepAssign","prop","_objects","newOpts","newObj","parseParams","sep","extractArgs","defaultsDict","bang","inputVal","arg","pair","adapter","actions","unit","menu","mt","materials","dup","_fromArray","entries","entry","isFunction","fromAttr","attr","fromURL","_processOptsForURL","_processArgsForURL","_processObjForURL","objOpts","toURL","stringList","checkAndAdd","addReps","repList","addObjects","objList","protocol","host","pathname","_processOptsForScript","_processArgsForScript","_processObjForScript","map","_processRepsForScript","repString","strIdx","localAdd","toScript","commandsList","command","saveQuotes","quote","trim","Atom","residue","role","het","serial","temperature","charge","mask","hydrogenCount","radicalCount","valence","bonds","flags","Flags","HYDROGEN","CARBON","isHet","isHydrogen","getVisualName","forEachBond","process","getFullName","_chain","getName","_sequence","NONPOLARH","Element","fullName","weight","radiusBonding","hValency","hydrogenValency","Constants","U1","Lead","U2","Wing","U18","Role","SG","ByAtomicNumber","ByName","byAtomicNumber","byName","getByName","cBondTypes","UNKNOWN","COVALENT","AROMATIC","getAtomPos","Bond","right","order","fixed","_left","_right","_fixed","_order","_type","getLeft","getRight","getOrder","calcLength","distanceTo","_forEachNeighbour","currAtom","forEachLevelOne","forEachLevelTwo","l2Atom","_fixDir","refPoint","currDir","posGetter","rightCount","leftCount","tmpVec","clone","checkDir","sub","dotProd","dot","checkCarbon","stages","stageId","multiplyScalar","calcNormalDir","third","maxNeibs","another","secondPos","firstV","secondV","crossVectors","lengthSq","normalize","BondType","THREE","cNucleicControlNames","cNucleicWing1Names","cNucleicWing2Names","cCylinderSource","cCylinderTarget","types","atoms","Residue","chain","sequence","icode","_component","_icode","_mask","_atoms","_secondary","_firstAtom","_leadAtom","_wingAtom","_lastAtom","_controlPoint","_midPoint","_wingVector","_cylinders","_isValid","_het","_molecule","getChain","getMolecule","getSequence","getSecondary","getICode","addAtom","xyz","tempFactor","complex","getComplex","getAtomCount","forEachAtom","_findAtomByName","_findFirstAtomInList","names","collectMask","getCylinderTargetList","_name","_detectLeadWing","getAtomPosition","leadAtom","wingStart","wingEnd","cylSource","targetList","cylTarget","calcWing","prevLeadPos","currLeadPos","prevWingPos","prevWing","vectorA","vectorB","needToNegate","angleTo","negate","_innerFinalize","prevRes","prev","nextRes","chainAsNucleic","bFirstInChain","lp","Vector3","lerp","_finalize2","asNucleic","isConnected","anotherResidue","_finalize","tempCount","occupCount","ResidueType","letterCode","_fullName","StandardTypes","ALA","ARG","ASN","ASP","CYS","GLN","GLU","GLY","HIS","ILE","LEU","LYS","MET","PHE","PRO","PYL","SEC","SER","THR","TRP","TYR","VAL","DA","DC","DG","DI","DT","DU","WAT","H2O","HOH","DOD","UNK","UNL","PROTEIN","BASIC","ACIDIC","POLAR","NONPOLAR","NUCLEIC","PURINE","PYRIMIDINE","DNA","RNA","WATER","_addFlag","flag","hydro","_addParam","ChainType","Chain","_complex","_residues","minSequence","POSITIVE_INFINITY","maxSequence","NEGATIVE_INFINITY","getResidues","_determineType","residues","findResidue","seqNum","iCode","curr","updateToFrame","frameData","prevData","frameRes","currData","addResidue","getResidueType","addResidueType","getResidueCount","forEachResidue","StructuralElement","init","term","generic","genericByType","serialAtomMap","residueHash","splitUnifiedSerial","serialId","hashCode","getUnifiedSerial","Type","STRAND","BRIDGE","HELIX_310","HELIX_ALPHA","HELIX_PI","HELIX","TURN_310","TURN_ALPHA","TURN_PI","TURN","BEND","COIL","Generic","LOOP","StructuralElementType","StructuralElementGeneric","typeByPDBHelixClass","Helix","helixClass","comment","Strand","sheet","sense","atomCur","atomPrev","as","Sheet","_width","_strands","getWidth","addStrand","addEmptyStrand","SGroup","saveNode","_id","_position","_charge","_repeat","_center","xmlNodeRef","getPosition","getCentralPoint","_rebuildSGroupOnAtomChange","nLimon","bLow","bHight","aPos","addVectors","includes","toJSON","List","_values","splice","valuesArray","upperOnly","_validate","Selector","ListSelector","RangeListSelector","ValueListSelector","caseSensitive","NoneSelector","includesAtom","_atom","AllSelector","none","PrefixOperator","rhs","InfixOperator","lhs","keywords","defineSelector","SelectorClass","factory","SerialSelector","NameSelector","AltLocSelector","ElemSelector","ResidueSelector","SequenceSelector","ICodeSelector","ResIdxSelector","ChainSelector","HetatmSelector","PolarHSelector","NonPolarHSelector","NULL_SELECTOR","defineOperator","OperatorClass","NotOperator","AndOperator","OrOperator","byResidueTypeFlag","selectors","exc","BiologicalUnit","_selector","_boundaries","boundingBox","Box3","boundingSphere","Sphere","computeBoundaries","makeEmpty","expandByPoint","bbc","getCenter","setFromCenterAndSize","radiusSquared","pos","lengthSquared","distanceToSquared","sqrt","getTransforms","getSelector","getBoundaries","finalize","Assembly","chains","matrices","oldCenter","oldRad","applyMatrix4","newRad","addScalar","subScalar","addChain","addMatrix","matrix","Component","_residueIndices","_cycles","_subDivs","_residueCount","resIdc","idIdc","idCount","last","setSubDivs","subDivs","resCnt","_bonds","forEachCycle","cycle","addCycle","cycles","markResidues","_forEachSubChain","subs","currRes","endRes","getMaskedSequences","_subIdx","getMaskedSubdivSequences","currIdx","lastSubIdx","subIdx","boundaries","cMaxPairsForHashCode","cHashTableSize","cNumbersPerPair","cMaxNeighbours","cInvalidVal","cBigPrime","AtomPairs","maxPairsEstimate","numPairs","numMaxPairs","intBuffer","hashBuffer","destroy","addPair","indexA","indexB","ia","ib","codeToAdd","apI","cProfileBondBuilder","cEstBondsMultiplier","cSpaceCode","cBondTolerance","cVMDTolerance","cBondRadInJMOL","cEpsilon","_getBondingRadius","_isAtomEligible","AutoBond","_maxRad","bBox","getDefaultBoundaries","_vBoxMin","_vBoxMax","_pairCollection","_addExistingPairs","getAtoms","numAtoms","aInd","collection","numBondsForAtom","bInd","indTo","_findPairs","vw","getVoxelWorld","atomsNum","rA","isHydrogenA","posA","locationA","atomA","processAtom","atomB","locationB","dist2","rB","maxAcceptable","forEachAtomWithinRadius","_addPairs","iA","iB","_addPair","bondsA","numBonds","newBond","addBond","build","_buildInner","timeEnd","_calcBoundingBox","nAtoms","maxRad","cCrossThresh","cAromaticType","cAromaticAtoms","_coDirVectors","v1Tmp","v2Tmp","cp","v1","v2","_insertAscending","_anotherAtom","_cosBetween","theta","MathUtils","_markAromatic","Cycle","atomsList","nA","nextAtom","checkBond","_isAromatic","_isPossibleAromatic","rightIdx","leftIdx","_checkCycleSimple","_checkCycleComplex","assert","AromaticLoopsMarker","bondsData","bondMarks","_bondsData","_bondMarks","_resetCycles","_currIdx","_haveSameCycle","bond1","bond2","arr1","arr2","n1","n2","i1","i2","_tryBond","prevBond","currRight","bondsOrder","currLeft","currVec","startAtomRef","_currStart","checkAromatic","_checkBond","anotherAtom","anotherVec","newDir","cross","dir","newRight","_startCycle","_findLoops","checkCycle","forEachComponent","component","newCycle","markCycles","detectCycles","_getSphereSliceRadiusRange","zMin","zMax","dzMin","dzMax","rzMin","rzMax","rMin","rMax","_getCircleSliceRadiusRange","yMin","yMax","dyMin","dyMax","ryMin","ryMax","VoxelWorld","box","vCellSizeHint","_box","getSize","divide","_last","_cellSize","_cellInnerR","_cellOuterR","numVoxels","_voxels","addAtoms","voxelIdx","_findVoxel","_zero","_voxel","point","voxel","_forEachAtomInVoxel","_xRange","Vector2","_yRange","_zRange","_forEachVoxelWithinRadius","xRange","yRange","zRange","_forEachVoxelWithinRadiusSimple","rRangeXY","rRangeX","xVal","yVal","zVal","isInsideX","isInsideY","isInsideZ","divideScalar","clampScalar","_vCenter","vCenter","distTouch2","distInside2","d2","r2","isInside","forEachAtomWithinDistFromMasked","dist","_forEachAtomWithinDistFromGroup","atomProc","forEachAtomWithinDistFromSelected","voxels","processIfWithin","PairCollection","MINIMAL_DISTANCE","MIN_HBOND_ENERGY","MAX_HBOND_ENERGY","COUPLING_CONSTANT","MAX_COUPLING_DISTANCE","MAX_RESIDUES_THRESHOLD","HBondInfo","_hbonds","_buildVW","_build","isBond","from","to","acc0","acc1","acceptor","energy","ri","preri","rj","prerj","_calcHBondEnergy","pairs","_residueGetCAlpha","_residueGetCO","_residueGetNH","predonor","donor","distanceHO","distanceHC","distanceNC","distanceNO","donorInfo","accInfo","BridgeType","freeze","NO_BRIDGE","PARALLEL","ANTI_PARALLEL","HelixFlag","START","MIDDLE","END","START_AND_END","StructureType","SecondaryStructureMap","_ss","_sheet","_betaPartners","_bend","_helixFlags","_chainLengths","_chains","_buildBetaSheets","_buildAlphaHelices","inResidues","chainLength","inPreferPiHelices","stride","kappa","_kappa","_isHelixStart","isTurn","_cosinusAngle","p1","p2","p3","p4","v12","v34","prevPrev","nextNext","curCA","ppCA","nnCA","ckap","skap","atan2","bridges","lenA","chainA","lenB","chainB","_testBridge","found","bridge","unshift","chainI","chainJ","ibi","iei","jbi","jei","ibj","iej","jbj","jej","_hasChainBreak","bulge","ladderset","Set","ladder","delete","sheetset","toMove","_areBridgesLinked","betai","betaj","parallel","ai","aj","has","VOXEL_SIZE","helixClassMap","loopMap","Complex","_components","_helices","_sheets","structures","_residueTypes","_sgroups","_molecules","_maskNeedsUpdate","metadata","symmetry","units","_currentUnit","addSheet","addHelix","getBonds","forEachChain","resName","rt","getSGroupCount","getSGroups","getAtomByFullname","resId","localeCompare","getChainCount","getMolecules","getMoleculeCount","forEachMolecule","molecules","forEachSGroup","groups","components","forEachVisibleComponent","getBondCount","maxSerial","chainShift","uniSerial","remnant","ser","_fillCmpEdit","addComp","comp","resCount","currStart","_fillCmpNoedit","currSubDivs","_fillComponents","enableEditing","getCurrentUnit","resetCurrentUnit","setCurrentUnit","newUnit","_computeBounds","onAtomPositionChanged","_finalizeBonds","updateStructuresMask","helices","sheets","needAutoBonding","autoConnector","other","marker","detectAromaticLoops","_finalizeMolecules","molecule","updater","structure","countAtomsByMask","getNumAtomsBySelector","resetAtomMask","markAtoms","setMask","clearMask","totalSelector","markAtomsAdditionally","clearAtomBits","reseter","getAtomNames","_atomNames","dict","getElements","_elements","getResidueNames","_residueNames","getChainNames","_chainNames","getAltLocNames","_altlocNames","_voxelWorld","addElement","srcArray","dstArray","functor","elem","joinComplexes","complexes","atomBias","bondBias","residueBias","chainBias","componentBias","bias","processBond","processResidue","processChain","processComponent","doNothing","ssMap","getSheet","item","lastCode","lastSheetIndex","lastHelixIndex","curStructure","curCode","curResidue","curSheetIndex","loopType","curSheet","pow2ceil","Volume","dimensions","vecSize","volumeInfo","_dimVec","_volumeInfo","_dimX","_dimY","_dimZ","_rowElements","_planeElements","_totalElements","_data","getValue","setValue","addValue","getDimensions","getBox","getVolumeInfo","getCellSize","boxSize","computeGradient","vl","vs","xSize","ySize","zSize","volMap","_voxelValue","zi","zm","zp","yi","ym","yp","xi","xm","xp","getTiledTextureStride","buildTiledTexture","tilesX","tilesY","tileRow","texture","DataTexture","RedFormat","UnsignedByteType","UVMapping","ClampToEdgeWrapping","LinearFilter","needsUpdate","getData","getDirectIdx","getStrideX","getStrideY","getStrideZ","Molecule","CSS2DObject","Object3D","_element","getElement","setTransparency","transp","op","op100","opacity","RCGroup","Group","raycast","raycaster","intersects","visible","children","enableSubset","innerOnly","disableSubset","getSubset","totalSubset","vertexScreenQuadShader","fragmentScreenQuadFromTex","fragmentScreenQuadFromTexWithDistortion","LAYERS","VOLUME","TRANSPARENT","PREPASS_TRANSPARENT","VOLUME_BFPLANE","COLOR_FROM_POSITION","SHADOWMAP","SELECTION_LAYERS","resetTransform","quaternion","updateMatrixWorldRecursive","updateMatrixWorld","addSavingWorldTransform","_worldMatrixInverse","Matrix4","matrixWorld","invert","multiply","decompose","WebGLRenderer","renderDummyQuad","_material","MeshBasicMaterial","depthWrite","_scene","Scene","_quad","Mesh","PlaneGeometry","_camera","OrthographicCamera","render","renderScreenQuad","isIdentity","identity","equals","applyToPointsArray","elements","persp","ScreenQuadMaterial","RawShaderMaterial","uniforms","srcTex","vertexShader","depthTest","renderScreenQuadFromTex","fragmentShader","renderScreenQuadFromTexWithDistortion","coef","PerspectiveCamera","setMinimalFov","angle","aspect","fov","radToDeg","atan","tan","degToRad","StereoCamera","updateHalfSized","camera","originalAspect","originalFov","updateProjectionMatrix","setDistanceToFit","Raycaster","intersectVisibleObject","gfxObj","fogFarPlane","intersectObject","nearPlane","near","matrixWorldInverse","farPlane","far","extractScale","_v","te","det","determinant","_calcCylinderMatrix","posBegin","posEnd","posCenter","matScale","makeScale","matRotHalf","makeRotationX","matRotLook","vUp","lookAt","setPosition","_calcChunkMatrix","eye","up","rad","_groupHasGeometryToRender","group","hasGeoms","_buildDistorionMesh","widthSegments","heightSegements","calcInverseBarrel","epsilon","prevR2","curR2","dr","geo","getAttribute","setXY","BufferAttribute","copyAtList","attribute","indexList","fillArray","startIndex","endIndex","removeChildren","clearTree","LineSegments","Line","geometry","dispose","destroyObject","belongToSelectLayers","layers","processObjRenderOrder","root","idMaterial","renderOrder","isGroup","applySelectionMaterial","setValues","depthFunc","LessEqualDepth","overrideColor","lights","shadowmap","setUberOptions","fixedColor","Color","zOffset","getMiddlePoint","point1","point2","optionalTarget","addScaledVector","_oldInstancedBufferGeometryCopy","InstancedBufferGeometry","source","instanceCount","calcCylinderMatrix","calcChunkMatrix","groupHasGeometryToRender","buildDistorionMesh","gfxutils","_defaultBoundaries","Visual","dataSource","_dataSource","release","getDataSource","_ensureArray","EntityList","entities","_list","_dict","_indices","entity","register","registerInList","unregisterFromList","registerInDict","unregisterFromDict","unregister","all","makeContextDependent","defineProperties","CollisionSphere","_radius","_sphere","sphere","ray","intersectSphere","distance","origin","SphereCollisionGeo","setSphere","inters","chunkIdx","computeBoundingBox","computeBoundingSphere","tmpColor","OFFSET_SIZE","COLOR_SIZE","setArrayXYZ","setArrayXYZW","InstancedSpheresGeometry","spheresCount","sphereComplexity","useZSprites","_sphGeometry","SphereGeometry","_init","setItem","itemIdx","itemPos","itemRad","_offsets","setColor","colorVal","_colors","startUpdate","finishUpdate","setOpacity","chunkIndices","alphaArr","_alpha","geom","sphereGeo","alpha","fill","InstancedBufferAttribute","MAX_IDC_16BIT","VEC_SIZE","ChunkedObjectsGeometry","BufferGeometry","chunkGeo","chunksCount","_chunkGeo","colors","chunkSize","_chunkSize","mesh","facesPerChunk","faceIndex","srcPos","_positions","srcNorm","_normals","srcColor","dstPos","dstNorm","dstColor","dstPtOffset","ptIdxBegin","ptIdxEnd","attributes","chunkIndex","chunkIndexSize","pointsCount","use32bitIndex","indexSize","Uint32Array","Uint16Array","posOffset","setIndex","SimpleSpheresGeometry","sphGeometry","normals","geoNormals","normal","_chunkPos","_tmpPositions","tmpPos","geoPos","centerPos","tmpVector","normMtx","Matrix3","Simple2CCylindersGeometry","cylGeometry","CylinderGeometry","_chunkNorms","_tmpVector","botPos","topPos","firstOffset","secondOffset","tmpArray","geoNorm","lerpVectors","mtx1","getNormalMatrix","fromArray","toArray","applyMatrix3","colorVal1","colorVal2","MAX_POINTS_COUNT_16BIT","PTS_PER_TRIANGLE","CylinderBufferGeometry","radiusTop","radiusBottom","radialSegments","heightSegments","openEnded","thetaStart","thetaLength","parameters","hasTop","hasBottom","vertexCount","facesCount","heightHalf","positions","Uint16BufferAttribute","uvs","currVtxIdx","currFaceIdx","tanTheta","v3","v4","setXYZ","vx","vy","vz","startTIdx","lastIdx","fTIdx","currSrcIdx","getX","getY","getZ","nextTVtx","startBIdx","lastBIdx","fBIdx","currSrcBIdx","nextBVtx","invMatrix","sortNumber","_prepareCylinderInfo","chunksIdx","cylinderInfo","even","newPar","_assignOpacity","color1","color2","Instanced2CCylindersGeometry","_useZSprites","_cylGeometry","_collisionGeo","me","mtxOffset","_matVector1","_matVector2","_matVector3","_invmatVector1","_invmatVector2","_invmatVector3","colorIdx","_color1","_color2","cylinderIndices","getGeoParams","cylinderGeo","TRI_SIZE","tmpPrev","tmpNext","tmpRes","simpleNormal","normalOnCut","nearRingPt","_createExtrudedChunkGeometry","shape","ringsCount","ptsCount","totalPts","ExtrudedObjectsGeometry","_ringsCount","tmpShape","_tmpShape","hasSlope","hasCut","chunkStartIdx","_setPoints","_setSlopeNormals","_setBaseNormals","_addCut","vtxIdx","mtx","nPtsInRing","_countNormalsInRing","isSlope","shiftToExtraPt","subVectors","VERTEX_PER_SEGMENT","POS_SIZE","DIR_SIZE","COL_SIZE","startSegmentIdx","segmentsCount","elemSize","ThickLinesGeometry","_initVertices","segmentIdx","setSegment","pos1","pos2","directions","_directions","dirIdx","startSegIdx","endSegIdx","getSubsetSegments","getSubsetColors","getSubsetOpacities","getNumVertexPerSegment","getPositionSize","setSegments","startPos","startDir","setColors","_buffersSize","indexOffset","pointOffset","BaseLinesGeometry","LinesGeometry","posSize","CylinderCollisionGeo","itemOffset","COLLISION_RAD","ChunkedLinesGeometry","enableCollision","collisionGeo","segCount","segIdx","TwoColorLinesGeometry","segmentIndices","_segCounts","vectors","vecCount","tempPos1","tempPos2","CrossGeometry","POS_RAD_SIZE","IsoSurfaceGeometry","_opts","_posRad","posRad","IsoSurfaceMarchCube","pointsValuesLinear","hasIntersection","bitsInside","numCellsPerSide","vx7000000","n3","striIndicesMarchCube","edgeTable","_voxelGradientFast","grad","GridCell","_arrSize","cubeIndex","Triangle","createArray","arrSize","IsoSurface","_numTriangles","_numVertices","_volumetricData","_xAxis","_yAxis","_zAxis","_xDir","_yDir","_zDir","_prepareAxesAndDirs","volData","cellSize","xAxis","yAxis","zAxis","xDir","yDir","zDir","tmp","notZero","axe","EPSILON","_vertexInterp","isoLevel","grid","ind1","ind2","vertex","valP1","valP2","isoDiffP1","diffValP2P1","mu","_triTable","_firstIndices","_secondIndices","_vertexList","_normalList","_polygonize","triangles","firstIndices","secondIndices","vertexList","normalList","triCount","triTblIdx","triTable","_doGridPosNorms","step","appendSimple","vol","dim","stepX","stepY","stepZ","gc","gcVal","gcValSize","additions","tmpTriCount","appendVertex","axis","triVertex","_origin","posMtx","globTriCount","_gradient","compute","_remapIndices","vertexMap","idcCount","newIndices","_remapVertices","vertices","newPositions","newNormals","norm","vertexFusion","faceVer","oldVerCount","vMap","newVer","matchedIndex","setColorVolTex","colorMap","atomMap","atomWeightMap","visibilitySelector","numVerts","xs","ys","zs","colorData","strideX","strideY","strideZ","atomWeightData","atomStrideX","atomStrideY","atomStrideZ","xInv","yInv","zInv","atomLookup","atomWeights","interp","idx1","idx2","collectWeight","coefX","coefY","coefZ","newVerCount","ind","mux","muy","muz","maxWeight","dominantIdx","atomIdx","c0","c1","c2","c3","cz0","cz1","numTriangles","newTriCount","i0","toMesh","VolumeSurfaceGeometry","_visibilitySelector","_calcSurface","_findMinMax","posRadArray","itemsCount","maxPosRad","minPosRad","tmpVal","_findNumVoxels","minMaxValues","minCoordRad","maxCoordRad","gridPadding","radScale","padRad","bbox","_makeSurface","surface","isoSurf","volTexMap","packedArrays","_computeSurface","chem","QuickSurfGeometry","_shiftByOrigin","gaussdensity","atomicNum","invIsoValue","invGridSpacing","maxVoxelX","maxVoxelY","maxVoxelZ","volTexData","texStrideX","scaledRad","atomicNumFactor","radInv","radLim","radLim2","xMin","xMax","dy2dz2","addr","texAddr","expVal","density","exp","colInd","originX","originY","originZ","AVHash","maxDistance","minX","minY","minZ","maxX","maxY","maxZ","hashFunc","minW","iDim","jDim","kDim","nCells","jkDim","cellID","preHash","cid","iIdx","cellOffsets","cellLengths","maxCellLength","subArray","cellLength","neighbourListLength","withinRadii","rExtra","out","outIdx","nearI","nearJ","nearK","loI","loJ","loK","hiI","hiJ","hiK","iOffset","jOffset","cellStart","cellEnd","dataIndex","baseIndex","rSum","ContactSurface","_indexList","maxRadius","lastClip","volTex","weights","weightsMap","gridx","gridy","gridz","sinTable","cosTable","neighbours","mid","ngTorus","uniformArray","TypeName","innI","fillGridDim","initializeGrid","gridSize","initializeAngleTables","initializeHash","rExt","singleAtomObscures","innX","innY","innZ","innCI","ra2","obscured","ni","projectPoints","sigma","sigma2Inv","ax","ay","az","ar2","ng","iax","iay","iaz","minx","miny","minz","maxx","maxy","maxz","colIdx","cr","cg","cb","iz","iy","dzy2","zyOffset","ix","cIdx","ap","spx","spy","spz","dd","normalToLine","projectTorus","aIdx","bIdx","xa","ya","za","r1","innR2","cosA","dmp","rInt","cost","sint","px","py","pz","current","projectTorii","innIdx","fixNegatives","innInnI","getVolume","ContactSurfaceGeometry","contactSurface","IsoSurfaceAtomColored","radiusAt","coord","colorX","colorY","colorZ","atomType","srcAtom","IsosurfaceBuildNormals","vBoxMin","vBoxMax","_numAtoms","_probeRadius","_atomsList","_voxelList","createVoxels","numAtomsRefs","ATOM_VOXEL_REF_SCALE","aveRad","numCells","_numCells","_aveRad","side","side2","side3","xScale","_xScale","yScale","_yScale","zScale","_zScale","maxAtomsRefs","xNumVoxMult","yNumVoxMult","zNumVoxMult","radAffect","diaAffect","numVoxX","numVoxY","numVoxZ","xIndMin","yIndMin","zIndMin","xIndMax","yIndMax","zIndMax","indVoxel","indexNext","destroyVoxels","_vertices","forEachRelatedAtom","xInd","yInd","zInd","ref","indexAtom","getClosestAtom","closest","minDist2","MAX_VALUE","buildNormals","numVertices","numCloseAtoms","vNormalX","vNormalY","vNormalZ","koef","r25","r01","maxRadAffect","maxRadAffect2","expScale","gatherNormals","maxClosedAtoms","buildColors","radiusColorSmoothness","KOEF_ADD","colorsClose","weightsSum","gatherColors","weightNormalized","IsoSurfaceGeo","maxNumVertices","maxNumTriangles","needVertexColors","_maxNumVertices","_maxNumTriangles","HASH_SIZE","SSIsosurfaceGeometry","_innerBuild","geoOut","getGeo","_fromGeo","numTri3","convertToAtomsColored","atomsColored","nm","hashLines","hashEntries","getBoundingBox","bigNum","probeRadius2","atomRadiusScale","radMax","num","getCornerCoord","numPoints","vOut","invNP","tx","ty","tz","buildEdgePoint","sign","cube","indexPointValue","cTwentyFour","xb","yb","zb","isTriangleVisible","v0","a0","voxelWorld","a1","a2","addTriangle","indInGeo0","addVertexToGeo","indInGeo1","indInGeo2","itr","buildGeoFromCorners","meshRes","vCellStep","cNumVerts","vaEdges","vCorner","indCell","indY","indZ","indPointValues","indValues","offs","numTri","indTri","getNumIntersectedCells","numIntersectedCells","cubeValuesIndex","indCorner","letter","atomT","calculateGridCorners","probeRad","vDif","aLot","fx","fy","fz","indXMin","indYMin","indZMin","indXMax","indYMax","indZMax","distToSphere","createVertexHash","numHashEtriesAllocated","numHashEntryIndex","getNewHashEntry","vAdd","oneHynberes","n815851","n37633","n2453543","r106","hashResolution","marCubeResoultion","iHash","hLineIndex","dot2","iVertAdd","entryFirst","modifyExcludedFromGeo","probeSphereRadius","distToBorder","r11","innerBlockWorkAround","probeSpRad2","sideInv","radEst","xCorner","yCorner","zCorner","ok","expandFactor","meshResolution","colorMode","useVertexColors","excludeProbe","rProbeRadius","numIntersectedCellsEstim","probeRadForNormalsColors","createLabel","fieldTxt","spanText","fontSize","strings","spanNodeP","spanNodeText","LabelsGeometry","items","xTranslation","yTranslation","deltaPos","userData","textAlign","fColor","bColor","precision","renderer","capabilities","getMaxPrecision","noiseWidth","noiseHeight","_noiseData","_noiseWrapS","RepeatWrapping","_noiseWrapT","_noiseMinFilter","NearestFilter","_noiseMagFilter","_noiseMapping","noiseTexture","RGBAFormat","noise","_samplesKernel","defaultUniforms","UniformsUtils","UniformsLib","diffuse","specular","shininess","zClipValue","clipPlaneValue","nearPlaneValue","invModelViewMatrix","world2colorMatrix","dashedLineSize","dashedLinePeriod","projMatrixInv","viewport","samplesKernel","noiseTex","noiseTexelSize","srcTexelSize","uberOptionNames","uberOptions","zClipCoef","toonShading","UberMaterial","instancedPos","instancedMatrix","attrColor","attrColor2","attrAlphaColor","sphereSprite","cylinderSprite","fakeOpacity","prepassTransparancy","colorFromPos","shadowmapType","colorFromDepth","orthoCam","dashedLine","thickLine","fogTransparent","normalsToGBuffer","glslVersion","GLSL3","precisionString","DoubleSide","defines","extensions","createInstance","inst","USE_FOG","INSTANCED_POS","INSTANCED_MATRIX","ATTR_COLOR","ATTR_COLOR2","ATTR_ALPHA_COLOR","OVERRIDE_COLOR","SPHERE_SPRITE","fragDepth","CYLINDER_SPRITE","ZCLIP","CLIP_PLANE","FAKE_OPACITY","USE_LIGHTS","COLOR_FROM_POS","SHADOWMAP_PCF_SHARP","SHADOWMAP_PCF_RAND","SHADOWMAP_BASIC","COLOR_FROM_DEPTH","ORTHOGRAPHIC_CAMERA","PREPASS_TRANSP","DASHED_LINE","THICK_LINE","FOG_TRANSPARENT","drawBuffers","NORMALS_TO_G_BUFFER","TOON_SHADING","shallow","updateUniforms","SuperClass","NewObjectType","rest","onBeforeRender","scene","_onBeforeRender","_update","UberObject","ZSpriteMesh","castShadow","receiveShadow","_geometry","_group","modelViewMatrix","multiplyMatrices","uniformsNeedUpdate","ZClippedMesh","_mvLength","_modelView","modelView","mvLength","setFromMatrixColumn","localToWorld","TextMesh","initialized","srcItem","label","visibility","SimpleMesh","_viewport","ThickLineMesh","projectionMatrix","InstancedMesh","ZClipped","ZSprite","Text","Instanced","geometries","meshes","setMatParams","_createInstancedCylinders","Geometry","initMaterial","_createLineSegmentsGeoTriplet","renderParams","thickLines","_createSimpleGeoTriplet","geoClass","_createIsoSurfaceGeoTriplet","caps","surfaceOpts","MeshCreator","createSpheres","create2CClosedCylinders","_caps","_settings","create2CCylinders","create2CLines","createCrosses","createExtrudedChains","createChunkedLines","createQuickSurface","createContactSurface","createSASSES","createLabels","TransformGroup","_inverseMatrix","_ray","Ray","geoParams","transforms","_geoParams","mat","_transforms","_createMeshes","inverseMatrix","childIntersects","ciCount","geos","meshCnt","wrapper","Name","ChemGroup","selection","_selection","_mode","_colorer","_chunksIdc","chunks","_polyComplexity","_geo","_makeGeoArgs","_mesh","chunksList","_calcChunksList","_changeSubsetOpacity","AtomsGroup","atomsIdc","AtomsSphereGroup","calcAtomRadius","getAtomColor","updateColor","needsColorUpdate","AtomsSurfaceGroup","selectedAtoms","getSurfaceOpts","AtomsSASSESGroupStub","adjustColor","inverseColor","getAtomText","getNode","colorMappings","adjust","inverse","propagateColor","rule","startsWith","templateMappings","hetatm","water","parseTemplate","AtomsTextGroup","getLabelOpts","fgColor","bgColor","_slerp","omega","oSin","AromaticGroup","radOffset","addChunk","chunksToIdx","prevVector","currVector","segmentsHeight","_segmentsHeight","leprStep","currAtomIdx","cCount","cycAtoms","chunkPoints","tmpDir","cycleRad","prevPos","currPos","upDir","currAngle","_createShape","pts","AromaticTorusGroup","torusRad","getAromRadius","radiusV","calcStickRadius","lookAtVector","mtc","points","currPoint","AromaticLinesGroup","getAromaticOffset","prevPt","getAromaticArcChunks","ResiduesGroup","chunksIdc","resIdx","NucleicItemGroup","stickRad","getResidueColor","_processItem","NucleicCylindersGroup","cyl1","cyl2","NucleicSpheresGroup","calcMatrix","_buildStructureInterpolator","argTrans","transformT","tt","newt","ans","_addPoints","centerPoints","topPoints","tp","_addPointsForLoneResidue","nucleic","nameFrom","nameTo","posFrom","posTo","shift","wing","cpPrev","tpPrev","cpNext","tpNext","_calcPoints","firstIdx","_prevIdx","_nextIdx","arrIdx","_extrapolate2","otherIdx","prevIdx","nextIdx","CartoonHelper","startIdx","endIdx","pointsArrays","_topInterp","_centerInterp","_shift","_valueStep","_segmentsCount","prepareMatrices","firstRad","secondRad","mtcCount","outMtc","currRad","topInterp","cenInterp","currentValue","mtxIdx","lerpVal","currTop","currCenter","nextCenter","_loopThrough","subDiv","subDivI","subDivN","idc","matrixHelper","prevLast","prevSecondRad","getResidueRadius","ResiduesSubseqGroup","cmpMultiplier","getHeightSegmentsRatio","getTension","chunkIdc","subdivs","ResiduesTraceGroup","chunk","getCylinderCount","BondsGroup","drawMultiple","drawMultiorderBonds","showAromatic","showAromaticLoops","bondsIdc","bondsCount","getBondOrder","bondIdx","BondsCylinderGroup","emptyOffset","calcSpaceFraction","normDir","leftPos","rightPos","currBondIdx","atom1","atom2","a1Pos","a2Pos","minRad","currStickRad","STEP_SIZE","BondsLinesGroup","bondDir","a1Hangs","a2Hangs","AtomsProcessor","_checkAtom","atomsGroup","meshIdx","chSubset","subsetEl","OrphanAtomsProcessor","ResiduesProcessor","ResidueGroup","_checkResidue","residuesGroup","checkResidue","ResidueProcessor","NucleicProcessor","SubseqsProcessor","jEnd","BondsProcessor","bondsGroup","AromaticProcessor","cycleIdx","perCycle","Atoms","OrphanAtoms","Residues","Nucleic","Subseqs","Bonds","Aromatic","processors","_bakeGroup","triplet","Processor","GroupsFactory","AtomsSpheres","gfxTriplet","OrphanedAtomsCrosses","BondsCylinders","BondsLines","CartoonChains","TraceChains","NucleicSpheres","NucleicCylinders","ALoopsTorus","ALoopsLines","QuickSurfGeo","ContactSurfaceGeo","SASSESSurfaceGeo","TextLabelsGeo","Mode","identify","buildGeometry","depGroups","currGroup","newGroup","getRenderParams","LinesMode","shortName","LicoriceMode","BallsAndSticksMode","VanDerWaalsMode","TraceMode","TubeMode","_residue","TUBE_RADIUS","CartoonMode","secCache","getResidueStartRadius","secOpts","getResidueEndRadius","ARROW_END","startRad","endRad","_res","tubeRad","secHeight","secData","SurfaceMode","surfaces","surfaceNames","getVisibilitySelector","isSurface","QuickSurfaceMode","useBeads","IsoSurfaceMode","_excludeProbe","_radScale","IsoSurfaceSASMode","IsoSurfaceSESMode","ContactSurfaceMode","TextMode","getTemplateOptions","lerpColor","beta","g1","b1","g2","b2","Palette","getElementColor","asIs","elementColors","defaultElementColor","residueColors","defaultResidueColor","getChainColor","chainColors","getSecondaryColor","secondaryColors","defaultSecondaryColor","getSequentialColor","getGradientColor","gradientName","gradients","defaultNamedColor","getNamedColor","namedColors","minRangeColor","midRangeColor","maxRangeColor","defaultGradientColor","namedColorsArray","rainbow","temp","hot","cold","reds","blues","CL","FE","NI","CU","BR","HE","LI","BE","NE","NA","MG","AL","SI","AR","SC","TI","CR","MN","ZN","GA","GE","AS","KR","RB","SR","ZR","NB","TC","RU","RH","PD","AG","CD","IN","SN","SB","TE","XE","BA","LA","CE","PR","ND","PM","SM","EU","GD","TB","DY","HO","ER","YB","LU","HF","TA","RE","OS","IR","PT","AU","HG","TL","PB","BI","PO","AT","RN","FR","RA","AC","TH","PA","NP","PU","AM","CM","BK","CF","ES","FM","MD","NO","LR","RF","DB","BH","HS","MT","dna","rna","cpkPalette","jmolPalette","vmdPalette","palettes","Colorer","ElementColorer","ResidueTypeColorer","SequenceColorer","ChainColorer","SecondaryStructureColorer","secondary","UniformColorer","ConditionalColorer","parsed","_subsetCached","ConformationColorer","TemperatureColorer","OccupancyColorer","_getColorByOccupancy","HydrophobicityColorer","hydrophobicity","MoleculeColorer","scaleColor","CarbonColorer","colorCarbon","colorNotCarbon","neutralColor","intensity","materialList","_gatherObjects","meshTypes","createDerivativeMesh","layer","newMesh","traverseMeshes","func","applyTransformsToMeshes","processTransparentMaterial","matValues","prepassTranspMesh","processColFromPosMaterial","colFromPosMesh","createShadowmapMaterial","shadowmapMesh","isShadowmapMesh","removeShadowmapMaterial","forEachMeshInGroup","processObj","_countMeshTriangles","attribs","property","currAttr","faces","countTriangles","totalCount","meshutils","Representation","startMaterialValues","selectorString","materialPreset","needsRebuild","setMode","unmarkAtoms","setMaterialPreset","selectionGeo","buildSelectionGeometry","sg","matrixAutoUpdate","compare","repSettings","selStr","valueOf","modeDiff","colorerDiff","change","newSelectorObject","newSelector","newMode","newColorer","newMaterial","_traverseComponentGroups","ComplexEditor","ComplexComponentEditor","complexVisual","_complexVisual","_inProgress","_componentTransforms","_bakeComponentTransform","_resetComponentTransform","finalizeEdit","discard","getAltObj","pivot","visual","getSelectedComponent","getSelectionGeo","selectionMask","getSelectionBit","reprNode","bbmin","bbmax","updateMatrix","ComplexFragmentEditor","_getSelectionBorderAtoms","_fragmentBoundAtoms","pivotPos","_fragmentGeo","_fragmentSelectionGeo","vg","smeshes","sm","selectionBit","makeTranslation","_bakeAtomTransform","isFreeRotationAllowed","boundAtoms","transformDirection","atomHash","ComponentEditor","FragmentEditor","ComplexVisualEdit","lookupAndCreate","entityList","specs","Entity","ComplexVisual","_reprList","_repr","_reprListChanged","_selectionBit","_reprUsedBits","_selectionCount","_selectionGeometry","getSelectionCount","getEditor","_editor","repCount","desc","status","repGet","_getFreeReprIdx","bits","NUM_REPRESENTATION_BITS","newSelectionBit","originalSelection","buildSelectorFromMask","def","hide","rebuildSelectionGeometry","resetSelectionMask","updateSelectionMask","pickedObj","otherObj","expandSelection","tmpMask","deselectionMask","shrinkSelection","multiple","getSelectionCenter","selRule","reprList","repr","Promise","resolve","errorOccured","setTimeout","hasGeometry","DEBUG","setNeedsRebuild","_buildSelectorFromSortedLists","optimizeList","NaN","expression","and","residx","forSelectedResidues","beginComponentEdit","editor","beginFragmentEdit","setMaterialValues","needTraverse","vertexVolumeFaces","fragmentVolumeFaces","vertexVolume","fragmentVolume","vertexFarPlane","fragmentFarPlane","volumeUniforms","volumeDim","tileTex","tileTexSize","tileStride","boxAngles","_isoLevel0","_flipV","_BFLeft","_BFRight","_FFLeft","_FFRight","_WFFLeft","_WFFRight","overrideUniforms","defUniforms","facesPosMaterialParams","sideType","BackFacePosMaterial","ShaderMaterial","backFaceParams","BackSide","ShaderParams","FrontSide","BackFacePosMaterialFarPlane","matUniforms","aspectRatio","farZ","tanHalfFOV","matWorld2Volume","shaderParams","FrontFacePosMaterial","frontFaceParams","VolumeMaterial","updateDefines","ISO_MODE","STEPS_COUNT","VolumeMesh","Plane","cullFlag","_corners","_edges","_edgeIntersections","edgeIntersections","_updateVertices","edges","constant","vert","cornerMark","edgeMark","curEdge","curEdgeInter","CheckX","CheckY","CheckZ","curEdgeIdx","curEdgeSource","face","nextVertex","coplanarPoint","_collectVertices","_sortIndices","_updateIndices","faceIdx","vRight","vDir","rightProj","numIndices","setDataSource","vm","image","volInfo","obtuseAngle","_updateIsoLevel","mean","dmean","dmin","span","dmax","sd","_nearClipPlaneOffset","_pos","_norm","_norm4D","Vector4","_matrixWorldToLocal","_clipPlane","nearClipPlaneOffset","norm4D","matrixWorldToLocal","getWorldDirection","getWorldPosition","setFromNormalAndCoplanarPoint","_flattenArray","VolumeBounds","_projectionTable","XY","XZ","YZ","bSize","offsetVert","_getBaseVertices","flatVertices","_lines","LineBasicMaterial","projTable","proj","inv","currDelta","angleValue","getMesh","VolumeFarPlane","volume","planeGeo","_initPlaneGeo","_plane","frustumCulled","doubleSided","matWorldToVolume","_renderer","planeCamPos","normalMatrix","volumeMatrix","DEG2RAD","VolumeVisual","_frame","showFrame","_farPlane","getBoundingSphere","needShow","LoaderList","someLoaders","SomeLoader","canProbablyLoad","Loader","_source","_options","_abort","_agent","abort","extractName","FileLoader","_binary","blob","reader","FileReader","readAsArrayBuffer","readAsText","File","urlStartRegexp","XHRLoader","request","ImmediateLoader","ParserList","someParsers","format","formats","SomeParser","canProbablyParse","parseSync","getModel","model","_parseHeader","Remark290","_matrix","_matrixIndex","stream","readString","matrixRow","readCharCode","matrixData","matrixIndex","parseFloat","Remark350","assemblies","_assembly","assembly","PDBStream","_start","_nextCR","_nextLF","_next","_end","readLine","readChar","readInt","readFloat","TAG_LENGTH","nameToElement","veryLong","pdbStartRegexp","remarkParsers","PDBParser","_serialAtomMap","_modelId","_compaundFound","_biomoleculeFound","_allowedChainsIDs","_lastMolId","_remarks","_remark","_compndCurrToken","fileType","_fixBondsArray","_fixChains","remark290","isUndefined","remark350","chainDict","chainObj","idChainMap","nj","_parseATOM","chainID","resSeq","_parseENDMDL","_parseCONECT","serial0","serial1","serial2","serial3","serial4","_parseCOMPND","tokenIdx","chainStr","lastChar","_parseREMARK","remarkNum","remark","RemarkParser","_parseHELIX","fields","_parseSTRUCTURE","_parseSHEET","pars","adder","startId","endId","codeOfS","serialNumber","structureName","helLength","shWidth","shCur","shPrev","startChainID","endChainID","startSequenceNumber","iCodeStr","startICode","endSequenceNumber","endICode","cs","_parseHEADER","classification","date","_parseTITLE","title","tagParsers","HEADER","HETATM","ENDMDL","CONECT","COMPND","REMARK","cOrderCharCodes","cmlStartRegexp","CMLParser","_readOnlyOneMolecule","_rebuidBondIndexes","countBonds","idxs","atomRefs2","_createSGroup","moleculeArr","fieldData","atomRefs","placement","fieldName","_extractSGroup","_extractSGroups","firstAtomRef","sgroupRef","mapEntry","cycleFuncInner","cycleFunc","x2","x3","y2","y3","z3","atomsRef","_traverseData","dom","parseNode","xmlNode","nodeName","nodeValue","jsonNode","existing","childNodes","_findSuitableMolecule","molSet","atomArray","_selectComponents","DOMParser","doc","parseFromString","traversedData","rawData","prepareComponentCompound","ret","atomLabels","labelsCount","localBond","bondArray","addCurrBond","orderAttr","tc","labels","_breadWidthSearch","retStruct","originalCML","cml","retData","filteredData","rd","_packLabel","compId","molId","_unpackLabel","molID","breadthQueue","componentID","labeledAtoms","startID","_parseBond","eAtom","mainAtom","_parseSet","varData","currentLabel","addFunc","complexAtom","reorder","atomCharge","lLabel","atomFullNameStruct","elementType","countRef","currAtomComp","strLabel","stringify","atomSerial","added","mrvValence","sGrp","moleculaSet","totalAtomsParsed","joinedComplex","ArrayComparator","original","_original","_sum","candidate","sorted","secStructToType","getFirstByte","buf","MMTFParser","isArrayBuffer","_onModel","_modelData","_onChain","chainData","_onGroup","groupData","_updateSecStructure","_onAtom","atomData","_onBond","bondData","helixClasses","_ssType","_ssStruct","_ssStart","struct","_updateMolecules","mmtfData","chainsInModel0","chainIndexList","description","_traverse","structureId","releaseDate","eventCallbacks","modelData","_linkAtomsToResidues","_findSynonymousChains","named","_parseAssemblyInfo","bioAssemblyList","baInfo","transformList","chainListCheck","chainNames","allChains","_chainsByName","transpose","_markHeteroAtoms","_joinSynonymousChains","primaryChainsArray","primaryChainsHash","primary","ParsingError","column","captureStackTrace","parseLine","parseColumn","_isWhitespace","_inlineIndexOf","ch0","readCIF","newline","block","keysCount","valuesCount","_parseValue","_storeKey","_storeValue","keyIndex","cRequiredAtomFields","cSecondaryCoding","helx","turn","strn","getTypeFromId","typeId","arrize","arrayLikeObject","AtomDataError","_getOperations","operList","vector","ops","_extractOperations","assemblyGen","opsDict","groupStr","gps","grIdx","grCount","gr","gp","es","cnt","ii","nn","newMtx","CIFParser","asymDict","_toComplex","cifData","complexData","_extractAtoms","_extractSecondary","_extractAssemblies","_extractMolecules","_extractMetadata","struct_keywords","pdbx_keywords","databaserev","database_PDB_rev","date_original","molData","pdbx_description","atom_site","auth_seq_id","Cartn_x","Cartn_y","Cartn_z","label_atom_id","group_PDB","chainIdc","auth_asym_id","chainLabelIdc","label_asym_id","serials","iCodes","pdbx_PDB_ins_code","resNames","label_comp_id","type_symbol","tempFactors","B_iso_or_equiv","occupancies","charges","pdbx_formal_charge","altLocs","label_alt_id","models","pdbx_PDB_model_num","label_entity_id","moleculeIdx","struct_conf","_extractConfs","struct_sheet_range","_extractSheets","sheetData","sheet_id","beg_label_seq_id","end_label_seq_id","beg_label_asym_id","sheetNames","strandNames","starts","beg_auth_seq_id","ends","end_auth_seq_id","stICodes","pdbx_beg_PDB_ins_code","endICodes","pdbx_end_PDB_ins_code","helicesData","conf_type_id","comments","details","lengths","pdbx_PDB_helix_length","pdbx_PDB_helix_class","asmGen","pdbx_struct_assembly_gen","asmIdx","assembly_id","asmOper","oper_expression","asmList","asym_id_list","pdbx_struct_oper_list","asm","assemblyOps","valueType","singular","VolumeModel","_xyz2crs","_header","_boxSize","_boxStart","extent","nstart","crs2xyz","cellDims","angles","_typedCheck","isTypedArray","_buff","TypeError","_fillHeader","headerFormat","arrays","_parseArray","_parseVector","_buffer","_setAxisIndices","_setOrigins","_getAxis","header","gamma","z1","z2","xaxis","yaxis","zaxis","_getXYZdim","_getVolumeInfo","_setBoxParams","shiftX","shiftY","_getXYZbox","_toXYZData","CCP4Header","ispg","nsymbt","lksflg","customData","machine","nlabel","Ccp4Model","u32","i32","f32","xyz2crs","xyzData","crsIdx","CCP4Parser","XYZParser","_atomsInf","_fileName","_parseToAtomsInf","endnAtoms","endComment","startAtomsInf","_parseAtomsInf","words","PubChemParser","jsonData","PC_Compounds","aids","aid","fromPairs","zip","coords","conformers","aids1","aid1","aids2","aid2","orders","SDFStream","_strings","_currentStart","_currentStringIndx","setStart","getNextString","getCurrentString","getStringFromStart","numb","findNextDataItem","curStr","findNextCompoundStart","probablyHaveDataToParse","chargeMap","orderMap","typeMap","sdfAndMolRegexp","sdfRegExp","fileFormat","SDF","MOL","possibleNameTags","possibleIDTags","possibleTitleTags","tagsNames","tags","buildChainID","codes","trunc","reverse","SDFParser","_format","_metadata","_currentMolProps","_compoundIndx","_assemblies","_atomsParsed","_atomsIndexes","_parseAtoms","_parseBonds","bondsNum","bondType","_parseMOL","countsLine","_parseDataItem","_parseCompound","props","_tryToUpdateMoleculeData","_buildAssemblies","_buildMolecules","_searchTag","_tryToFind","tagsList","tagPossibleNames","_finalizeMetadata","defineFormat","DSN6Header","div","DSN6Model","i16","_pointCalculate","byteBuffer","counter","_blockCalculate","zBlock","yBlock","xBlock","inRange","blocks","_calculateInfoParams","dispersion","minDensity","maxDensity","DSN6Parser","canParse","checkDataTypeOptions","GROReader","getNext","GROParser","_time","_residueNumber","_residueName","_atomName","_atomNumber","_atomPosition","_atomVelocity","filetype","_parseTitle","_parseNumberOfAtoms","_parseAtom","positionX","positionY","positionZ","un","am","nc","du","resNumberRegex","spacesRegex","splitToFields","MOL2Parser","_currPosIdx","_currStartIdx","_parseRawStrings","_toStringFromStart","MOL2Data","newPosIdx","_toHeaderString","_toStringFromHeader","_setStart","_probablyHaveDataToParse","_findNextCompoundStart","_parseMolecule","parsedStr","_setResidue","originAtomId","targetAtomId","_fixSerialAtoms","currMolecule","molResidues","ExporterList","someExporters","Exporter","exportSync","export","PDBResult","_resultArray","_currentStr","_tag","_fixedNumeration","_numeration","_tagStrNum","getResult","writeString","_currentStrLength","newTag","numeration","isBoolean","newString","writeEntireString","maxStrPos","curStrLength","finish","repeat","cStr","writeBondsArray","bondsArrays","_getSubArrays","subArraySize","subArrays","writeMatrix","matrixIndx","toFixed","writeMatrices","PDBExporter","_tags","_result","_tagExtractors","_extractHEADER","TITLE","_extractTITLE","_extractATOM","_extractCONECT","_extractCOMPND","_extractREMARK","_extractHELIX","SHEET","_extractSHEET","_stringForRemark350","_stringForRemark290","fixedBonds","strands","startIndx","_getMoleculeChains","chainsString","_Remark290","_Remark350","biomolIndx","getChainName","SourceClass","FBX_POS_SIZE","FBX_NORM_SIZE","FBX_COL_SIZE","copyFbxPoint3","srcIdx","dstIdx","copyFbxPoint4","vector4","copyTransformedPoint3","setSubArray","copyFunctor","functorOpts","arridx","FBXModel","lastPos","lastNorm","lastCol","vertsCount","indsCount","setPositions","setTransformedPositions","setNormals","setTransformedNormals","setIndices","setShiftedIndices","shifted","getVerticesNumber","addInstance","currentCount","FBXGeometry","_info","FBX1CGeometry","cl","FBX2CCylinder","_cutRawStart","_cutRawEnd","_facesPerSlice","addPerCylinder","_extendVertices","_extendIndices","cutRaw","indicesPerQuad","startToShift","_setColorRange","colorSize","part1End","part2End","capSize","cap1End","cap2End","FBXInfoExtractor","_materials","_models","_extractModelsAndMaterials","_flattenModels","layersOfInterest","Layers","checkExportAbility","_collectInstancedGeoInfo","_collectGeoInfo","_reworkIndices","faceSize","overallVertsCount","combined","verticesCount","vertCount","_collectMaterialInfo","_addToPool","_collectSpheresInfo","instCount","instMatrix","objMatrix","sphereColor","instanceIndex","_getSphereInstanceMatrix","_collectCylindersInfo","oneCCylinder","splittingInfo","_gatherCylindersColoringInfo","twoCCylinder","needToSplit","additionalVertsCount","colorStart","colorEnd","is2Colored","_getCylinderInstanceMatrix","materialIdx","_checkExistingMaterial","findIndex","differs","instIdx","matVector1","matVector2","matVector3","idxOffset","defaultDefinitions","defaultProperties","defaultMaterialLayer","defaultLayerBlock","globalSettings","FBXResult","_writeHeader","_writeDefinitions","_writeObjects","_writeRelations","_writeConnections","FBXHeaderVersion","FBXVersion","timeStampVersion","creator","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","modelVersion","allModels","_verticesIndices","_normalLayer","_colorLayer","materialVersion","allMaterials","_materialProperties","modelsList","_floatArrayToString","colorArray","layerElementColorNumber","layerElementColorVersion","layerElementColorName","colorsStr","colorIndices","normalArray","layerElementNormalNumber","layerElementNormalVersion","layerElementNormalName","normalsStr","multiLayer","multiTake","shading","culling","geometryVersion","vertStr","FBXExporter","_version","miewVersion","_extractor","loaders","parsers","exporters","tempColor","CSS2DRenderer","_height","_widthHalf","_heightHalf","_vector","_viewMatrix","_projectionMatrix","_domElement","overflow","pointerEvents","myNode","setSize","_renderObject","lerpColorAsHex","setHex","getHexString","colorAsHex","setFromMatrixPosition","localOffset","getMaxScaleOnAxis","fogFactor","smoothstep","WebkitTransform","MozTransform","oTransform","getTopWindow","VK_LEFT","VK_UP","VK_RIGHT","VK_DOWN","STATE","NONE","ROTATE","TRANSLATE","SCALE","TRANSLATE_PIVOT","FULL_STOP_THRESHOLD","Quaternion","matrix4","ObjectHandler","lastRotation","_rotate","quat","zeroPivot","makeRotationFromQuaternion","setObjects","rot","mousePrevPos","mouseCurPos","aboutAxis","mouse2rotation","setFromAxisAngle","translateOnAxis","timeSinceLastUpdate","timeSinceMove","intertia","dynamicDampingFactor","intertiaThreshold","eyeDirection","cameraUpDirection","cameraSidewaysDirection","moveDirection","mouseDelta","mousePrev","mouseCur","axisRotateFactor","setLength","rotateFactor","ObjectControls","objectPivot","hotkeysEnabled","screen","_state","_mousePrevPos","_mouseCurPos","_mainObj","_altObj","_affectedObj","_isAltObjFreeRotationAllowed","_isTranslationAllowed","_isKeysTranslatingObj","_pressedKeys","_clock","_lastUpdateTime","_listeners","mousedown","mouseup","mousemove","mousewheel","touchstartend","touchmove","getKeyBindObject","keydownup","handleResize","resetKeys","contextmenu","stopPropagation","preventDefault","innerWidth","innerHeight","getBoundingClientRect","ownerDocument","documentElement","pageXOffset","clientLeft","pageYOffset","clientTop","enableHotkeys","allowTranslation","allow","allowAltObjFreeRotation","keysTranslateObj","isEditingAltObj","convertMouseToOnCircle","pageX","pageY","screenSize","convertMouseToViewport","rotateByMouse","aboutZAxis","getOrientation","setOrientation","getScale","setScale","curTime","_lastMouseMoveTime","speedX","speedY","altObj","button","workWithAltObj","altKey","ctrlKey","shiftKey","translatePivotByMouse","wheelDelta","detail","touches","_touchDistanceCur","_touchDistanceStart","_scaleStart","newScale","keyCode","translatePivotInWorld","setX","setY","setZ","translatePivot","setPivot","newPivot","Picker","_lastMousePos","_mouseTotalDist","_lastClickBeginTime","_lastClickPos","_clickBeginTime","touchstart","touchend","picked","pickObject","screenPos","rayCaster","unproject","fogFarValue","getMouseInViewport","curPos","timeSinceLastClickBegin","clickDist","_lastTouchdownPos","changedTouches","Axes","targetCamera","_target","_targetCamera","_object","AxesHelper","_full","autoClear","setViewport","cDataOffset","cFirstMask","cFirstShift","cSecMask1","cSecShift1","cSecMask2","cSecShift2","cThirdMask","cStrMask","cStrShift","c219","c220","cHelixIdx","cSheetIdx","secTypes","cSecNames","_createSecondary","strArray","nRes","resid","rIdx","fromUInt20ToInt20","uint20","FrameInfo","payload","callbacks","isLoading","_framesRange","frameIsReady","_frameRequest","_callbacks","_framesRequestLength","_downloadDataFn","parseBinaryData","setFrame","_prepareBuffer","framesStart","framesEnd","_framesCount","onDone","onLoadStatusChanged","onFail","onError","_parseBuffer","_bufferRequestStart","arrayBuffer","dataView","atomsCount","framesCount","_atomsCount","maxSize","chunkedFramesCount","timeStep","iName","_timeStep","posData","coordIdx","secondaryArr","hiWord","loWord","_secondaryData","nextFrame","_currFrame","_updateSecondary","myResidues","sec","oldSec","nSec","compRes","getSec","frameIdx","_cachedResidues","disableEvents","_vec","vec","SceneObject","paramsStr","getGeometry","LinesObj","_id1","_id2","_getAtomFromName","err","_atom1","_atom2","_line","computeLineDistances","_raycaster","_intersects","verticesNeedUpdate","OutlineMaterial","srcDepthTex","srcTexSize","DEPTH_OUTLINE","FXAAMaterial","bgTransparent","BG_TRANSPARENT","AOMaterial","diffuseTexture","normalTexture","depthTexture","camNearFar","projMatrix","kernelRadius","depthThreshold","_kernelOffsets","AOHorBlurMaterial","aoMap","samplesOffsets","AOVertBlurWithBlendMaterial","fogNearFar","useFog","AnaglyphMaterial","srcL","srcR","View","orientation","_transitionTime","ViewInterpolator","setup","startView","endView","_endTime","_isPaused","_srcView","_dstView","_isMoving","isMoving","wasStarted","transTime","getCurrentView","success","createView","slerp","pause","resume","MAX_COOKIE_LEN","COUNT_SUFFIX","_chunkString","chunkLen","lc","Cookies","removeCookie","cntKey","_toCount","cntVal","_getSimpleCookie","_removeSimpleCookie","setCookie","_setSimpleCookie","getCookie","cookie","_getExpirationDate","today","EXP_PERIOD_YEARS","setFullYear","toUTCString","_exists","webVRPoC","showEnterVR","cursor","currentSession","onSessionEnded","onSessionStarted","session","_gfx","xr","setReferenceSpaceType","setSession","onmouseenter","onmouseleave","onclick","sessionInit","optionalFeatures","requestSession","then","moveSceneBehindHeadset","showWebXRNotFound","stylizeElement","bottom","padding","border","font","isSessionSupported","supported","textDecoration","createWebVRButton","WebVRPoC","onToggle","_mainCamera","_button","_onToggle","_molContainer","_user","_scalingPivot","_controller1","_controller2","_pressedGripsCounter","_distance","startScalingByControllers","stopScalingByControllers","handleGripsDown","handleGripsUp","anotherController","gfx","_mainFog","_plugVRNodesIntoScene","_setControllersListeners","getController","_createControllerMesh","disable","setAnimationLoop","getSession","_unplugVRNodesFromScene","cylinder","rotateX","updateMoleculeScale","scaler","container","getCanvas","io","LinesObject","fragmentScreenQuadFromDistTex","EDIT_MODE","COMPLEX","COMPONENT","FRAGMENT","LOADER_NOT_FOUND","PARSER_NOT_FOUND","ColorManagement","updateFogRange","removeExtension","hasValidResidues","hasValidRes","reportProgress","percent","TOTAL_PERCENT","chooseFogColor","Miew","settingsCookie","cookiePath","_interpolator","_container","getElementById","head","getElementsByClassName","_containerRoot","_running","_halting","_building","_needRender","_hotKeysEnabled","_cookies","_spinner","_loading","_animInterval","_visuals","_curVisualName","_sourceWindow","registeredPlugins","_initOnSettingsChanged","getMaxRepresentationCount","_setContainerContents","_updateShadowCamera","shadowMatrix","OBB","halfSize","light","getOBB","class","frag","createDocumentFragment","_msgMode","_msgAtomInfo","_showMessage","_initGfx","_initListeners","_onKeyDown","_onKeyUp","_objectControls","_getAltObj","_picker","_onPick","file","keepRepsInfo","job","halt","msg","_showCanvas","_requestAnimationFrame","requestAnimationFrame","clientWidth","clientHeight","webGLOptions","preserveDrawingBuffer","premultipliedAlpha","renderer2d","shadowMap","autoUpdate","PCFShadowMap","setPixelRatio","devicePixelRatio","setClearColor","clearColor","stereoCam","Fog","selectionScene","selectionRoot","selectionPivot","light12","DirectionalLight","pixelRatio","getPixelRatio","shadowMapSize","mapSize","light3","AmbientLight","deviceWidth","deviceHeight","offscreenBuf","WebGLRenderTarget","minFilter","magFilter","depthBuffer","DepthTexture","UnsignedShortType","offscreenBuf2","offscreenBuf3","offscreenBuf4","volBFTex","volFFTex","volWFFTex","offscreenBuf5","FloatType","offscreenBuf6","offscreenBuf7","stereoBufL","stereoBufR","_embedWebXR","stats","_fps","_onResize","_makeUniqueVisualName","baseName","random","suffix","_addVisual","_removeVisual","_forEachVisual","_releaseAllVisuals","_forEachComplexVisual","_getComplexVisual","any","_getVolumeVisual","_getVisualForComplex","getVisuals","getComplexVisualsCount","getCurrentVisual","setCurrentVisual","run","_onTick","_discardComponentEdit","_discardFragmentEdit","enableHotKeys","_resizeOffscreenBuffers","isAnaglyph","multi","_onUpdate","_onRender","_getBSphereRadius","_bSphereForOneVisual","_bBoxForOneVisual","_bBox","_invMatrix","_points","union","_updateFog","_setUberMaterialValues","isScriptingCommandAvailable","callNextCmd","_needRebuild","_updateView","webVR","_clipPlaneUpdateValue","_fogFarUpdateValue","setRenderTarget","_renderFrame","_anaglyphMat","_size","focus","_renderShadowMap","_renderScene","setScissorTest","setScissor","cameraL","cameraR","_onBgColorChanged","_onFogColorChanged","_enableMRT","renderBuffer","textureBuffer","gl","getContext","COLOR_ATTACHMENT0","tx8","__webglTexture","bindTexture","TEXTURE_2D","fb","__webglFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT1","distortion","bHaveComplexes","volumeVisual","ssao","_renderWithPrepassTransparency","dstBuffer","srcBuffer","_performAO","_renderOutline","_renderSelection","_renderVolume","_performFXAA","_performDistortion","aberration","targetBuffer","_outlineMaterial","srcDepthBuffer","srcColorBuffer","currentRenderTarget","getRenderTarget","activeCubeFace","getActiveCubeFace","activeMipmapLevel","getActiveMipmapLevel","setBlending","NoBlending","buffers","setClear","setTest","updateMatrices","_hasSelectionToRender","selPivot","selPivotChild","_checkVolumeRenderingSupport","renderTarget","oldRT","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","volumeBFMat","volumeFFMat","cubeOffsetMat","world2colorMat","volumeRenderingSupported","dstBuf","tmpBuf1","tmpBuf2","tmpBuf3","overrideMaterial","colorMask","_fxaaMaterial","_aoMaterial","_horBlurMaterial","_vertBlurMaterial","_scale","normalBuffer","srcDepthTexture","tempBuffer","tempBuffer1","_lastPick","_setEditMode","_resetObjects","setNeedRender","_resetScene","resetPivot","resetView","_export","TheExporter","exporter","rePdbId","rePubchem","reUrlScheme","resolveSourceShortcut","matchesPdbId","sourceType","matchesPubchem","compound","updateBinaryMode","TheParser","fileExt","_fetchData","TheLoader","newOptions","keyCount","loader","lengthComputable","total","loaded","promise","catch","_parseData","dataSet","onLoadEnd","anything","jobIndex","_refreshTitle","_onLoad","unload","_startAnimation","fileData","_stopAnimation","_frameInfo","isPlaying","_isAnimating","_continueAnimation","_pauseAnimation","clearInterval","minFrameTime","setInterval","_updateObjsToFrame","visualName","amberFileName","resetEd","_onLoadEd","_tweakResolution","_edLoader","loadEd","_rebuildObjects","toRemove","unitIdx","currentUnitInfo","_updateInfoPanel","rebuildActions","appendix","_extractRepresentation","defPreset","_setReps","presList","newIdx","_editMode","getElementsByTagName","_enterComponentEditMode","editors","_editors","_applyComponentEdit","_enterFragmentEditMode","selectedVisuals","_applyFragmentEdit","_updateSelection","firstLine","secondLine","aName","coordLine","nextAltObj","setPivotResidue","amount","setPivotAtom","_centerInVisual","setPivotSubset","_includesInCurSelection","_includesInSelector","screenshot","fov2Tan","tan2Fov","getDataURL","dataURL","currBrowser","canvas","canvasContext","drawImage","toDataURL","screenshotURI","originalTanFov2","areaOfInterestSize","areaOfInterestTanFov2","shotAspect","setDrawingBufferSize","uri","save","dataString","maxPerf","_gfxScore","_autoChangeResolution","setOptions","objData","bThrow","Ctor","_addSceneObject","sceneObject","objs","getState","compact","getScript","_compareReps","compareWithDefaults","currPreset","repsDiff","emptyReps","repsInfo","objectsState","_updateShadowmapMeshes","_updateMaterials","_fogAlphaChanged","evt","Boolean","sel","VIEW_VERSION","eulerOrder","euler","Euler","setFromQuaternion","srcView","dstView","setFromEuler","None","projected","fullAtomName","complexName","project","exportCML","extractRotation","extractBasis","retMat","makeBasis","updateCMLData","xml","removeAttribute","sGroup","oSerializer","XMLSerializer","serializeToString","curChainName","curChainColor","PACKAGE_VERSION","thirdParty","lodash","three","modeIdDesc","$help","colorDesc","materialDesc","addRepDesc","setGetParameterDesc","PDBID","REP_NAME","DESCRIPTION","REP_INDEX","EXPRESSION","MODE_ID","COLORER_ID","MATERIAL_ID","new","del","PARAMETER","set_save","set_restore","set_reset","PRESET","ENCODED_VIEW","removeobj","listobj","parsercli","clihelp","NULL","RepresentationMap","representationMap","representationID","strId","sortedKeys","representationsStorage","CLIUtils","repMap","repName","selectionStr","strList","joinHelpStr","helpData","sortBy","helpItem","awaitWhileCMDisInProcess","finishAwaitingCMDInProcess","modificate","selExc","modificators","modificator","argExc","pathExc","endsWith","utilFunctions","cliUtils","cmd","_val","cliutils","notimplemented","script","_printCallback","_errorCallback","cmdQueue","commandInAction"],"sourceRoot":""} \ No newline at end of file diff --git a/packages/miew/dist/Miew.min.css b/packages/miew/dist/Miew.min.css index 520672bb..44ab08ba 100644 --- a/packages/miew/dist/Miew.min.css +++ b/packages/miew/dist/Miew.min.css @@ -1,2 +1,2 @@ -@keyframes spinner-line-fade-more{0%,to{opacity:0}1%{opacity:1}}@keyframes spinner-line-fade-quick{0%,39%,to{opacity:.25}40%{opacity:1}}@keyframes spinner-line-fade-default{0%,to{opacity:.22}1%{opacity:1}}@keyframes spinner-line-shrink{0%,25%,to{opacity:.25;transform:scale(.5)}26%{opacity:1;transform:scale(1)}}.miew-canvas>canvas{display:block;height:100%;width:100%}.miew-canvas,.miew-container{height:100%;overflow:hidden;position:relative;width:100%}.miew-message{background-color:#ccc;display:table;height:100%;width:100%}.miew-message p{display:table-cell;font-size:large;text-align:center;vertical-align:middle}.mode-message{align-items:left;background-color:rgba(64,64,64,.75);border-radius:4px;color:silver;display:flex;justify-content:left;opacity:0;position:absolute;right:10px;top:10px}.atom-info{margin:10px;text-align:left}.overlay{pointer-events:none} +@keyframes spinner-line-fade-more{0%,to{opacity:0}1%{opacity:1}}@keyframes spinner-line-fade-quick{0%,39%,to{opacity:.25}40%{opacity:1}}@keyframes spinner-line-fade-default{0%,to{opacity:.22}1%{opacity:1}}@keyframes spinner-line-shrink{0%,25%,to{transform:scale(.5);opacity:.25}26%{transform:scale(1);opacity:1}}.miew-canvas>canvas{display:block;width:100%;height:100%}.miew-canvas,.miew-container{width:100%;height:100%;overflow:hidden;position:relative}.miew-message{background-color:#ccc;display:table;width:100%;height:100%}.miew-message p{display:table-cell;vertical-align:middle;text-align:center;font-size:large}.mode-message{position:absolute;top:10px;right:10px;border-radius:4px;color:silver;background-color:rgba(64,64,64,.75);display:flex;align-items:left;justify-content:left;opacity:0}.atom-info{margin:10px;text-align:left}.overlay{pointer-events:none} /*# sourceMappingURL=Miew.min.css.map */ \ No newline at end of file diff --git a/packages/miew/dist/Miew.min.css.map b/packages/miew/dist/Miew.min.css.map index 96183e13..775edf25 100644 --- a/packages/miew/dist/Miew.min.css.map +++ b/packages/miew/dist/Miew.min.css.map @@ -1 +1 @@ -{"version":3,"sources":["Miew.css"],"names":[],"mappings":"AAAA,kCACE,MACE,SACF,CACA,GACE,SACF,CACF,CAEA,mCACE,UACE,WACF,CACA,IACE,SACF,CACF,CAEA,qCACE,MACE,WACF,CACA,GACE,SACF,CACF,CAEA,+BACE,UAGE,WAAa,CADb,mBAEF,CACA,IAEE,SAAU,CADV,kBAEF,CACF,CAEA,oBACE,aAAc,CAEd,WAAY,CADZ,UAEF,CAEA,6BAGE,WAAY,CACZ,eAAgB,CAChB,iBAAkB,CAHlB,UAIF,CAEA,cAEE,qBAAsB,CACtB,aAAc,CAEd,WAAY,CADZ,UAEF,CAEA,gBACI,kBAAmB,CAGnB,eAAgB,CADhB,iBAAkB,CADlB,qBAGF,CAEF,cAQE,gBAAiB,CAFjB,mCAAwC,CAFxC,iBAAkB,CAClB,YAAa,CAEb,YAAa,CAEb,oBAAqB,CACrB,SAAU,CATV,iBAAkB,CAElB,UAAW,CADX,QASF,CAEA,WACE,WAAY,CACZ,eACF,CAEA,SACE,mBACF","file":"Miew.min.css","sourcesContent":["@keyframes spinner-line-fade-more {\n 0%, 100% {\n opacity: 0; /* minimum opacity */\n }\n 1% {\n opacity: 1;\n }\n}\n\n@keyframes spinner-line-fade-quick {\n 0%, 39%, 100% {\n opacity: 0.25; /* minimum opacity */\n }\n 40% {\n opacity: 1;\n }\n}\n\n@keyframes spinner-line-fade-default {\n 0%, 100% {\n opacity: 0.22; /* minimum opacity */\n }\n 1% {\n opacity: 1;\n }\n}\n\n@keyframes spinner-line-shrink {\n 0%, 25%, 100% {\n /* minimum scale and opacity */\n transform: scale(0.5);\n opacity: 0.25;\n }\n 26% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n.miew-canvas > canvas {\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n}\n\n.miew-container,\r\n.miew-canvas {\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n position: relative;\r\n}\n\n.miew-message {\r\n /* trick for centered error-reporting*/\r\n background-color: #ccc;\r\n display: table;\r\n width: 100%;\r\n height: 100%;\r\n}\n\n.miew-message p {\r\n display: table-cell;\r\n vertical-align: middle;\r\n text-align: center;\r\n font-size: large;\r\n }\n\n.mode-message {\r\n position: absolute;\r\n top: 10px;\r\n right: 10px;\r\n border-radius: 4px;\r\n color: silver;\r\n background-color: rgba(64, 64, 64, 0.75);\r\n display: flex;\r\n align-items: left;\r\n justify-content: left;\r\n opacity: 0;\r\n}\n\n.atom-info {\r\n margin: 10px;\r\n text-align: left;\r\n}\n\n.overlay {\r\n pointer-events: none;\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["Miew.css"],"names":[],"mappings":"AAAA,kCACE,MACE,SACF,CACA,GACE,SACF,CACF,CAEA,mCACE,UACE,WACF,CACA,IACE,SACF,CACF,CAEA,qCACE,MACE,WACF,CACA,GACE,SACF,CACF,CAEA,+BACE,UAEE,mBAAqB,CACrB,WACF,CACA,IACE,kBAAmB,CACnB,SACF,CACF,CAEA,oBACE,aAAc,CACd,UAAW,CACX,WACF,CAEA,6BAEE,UAAW,CACX,WAAY,CACZ,eAAgB,CAChB,iBACF,CAEA,cAEE,qBAAsB,CACtB,aAAc,CACd,UAAW,CACX,WACF,CAEA,gBACI,kBAAmB,CACnB,qBAAsB,CACtB,iBAAkB,CAClB,eACF,CAEF,cACE,iBAAkB,CAClB,QAAS,CACT,UAAW,CACX,iBAAkB,CAClB,YAAa,CACb,mCAAuC,CACvC,YAAa,CACb,gBAAiB,CACjB,oBAAqB,CACrB,SACF,CAEA,WACE,WAAY,CACZ,eACF,CAEA,SACE,mBACF","file":"Miew.min.css","sourcesContent":["@keyframes spinner-line-fade-more {\n 0%, 100% {\n opacity: 0; /* minimum opacity */\n }\n 1% {\n opacity: 1;\n }\n}\n\n@keyframes spinner-line-fade-quick {\n 0%, 39%, 100% {\n opacity: 0.25; /* minimum opacity */\n }\n 40% {\n opacity: 1;\n }\n}\n\n@keyframes spinner-line-fade-default {\n 0%, 100% {\n opacity: 0.22; /* minimum opacity */\n }\n 1% {\n opacity: 1;\n }\n}\n\n@keyframes spinner-line-shrink {\n 0%, 25%, 100% {\n /* minimum scale and opacity */\n transform: scale(0.5);\n opacity: 0.25;\n }\n 26% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n.miew-canvas > canvas {\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n}\n\n.miew-container,\r\n.miew-canvas {\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n position: relative;\r\n}\n\n.miew-message {\r\n /* trick for centered error-reporting*/\r\n background-color: #ccc;\r\n display: table;\r\n width: 100%;\r\n height: 100%;\r\n}\n\n.miew-message p {\r\n display: table-cell;\r\n vertical-align: middle;\r\n text-align: center;\r\n font-size: large;\r\n }\n\n.mode-message {\r\n position: absolute;\r\n top: 10px;\r\n right: 10px;\r\n border-radius: 4px;\r\n color: silver;\r\n background-color: rgb(64, 64, 64, 0.75);\r\n display: flex;\r\n align-items: left;\r\n justify-content: left;\r\n opacity: 0;\r\n}\n\n.atom-info {\r\n margin: 10px;\r\n text-align: left;\r\n}\n\n.overlay {\r\n pointer-events: none;\r\n}\r\n"]} \ No newline at end of file diff --git a/packages/miew/dist/Miew.min.js b/packages/miew/dist/Miew.min.js index 81f6f931..61316f01 100644 --- a/packages/miew/dist/Miew.min.js +++ b/packages/miew/dist/Miew.min.js @@ -1,5 +1,5 @@ -/*! Miew - 3D Molecular Viewer v0.11.1 Copyright (c) 2015-2025 EPAM Systems, Inc. */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("lodash"),require("three")):"function"==typeof define&&define.amd?define(["lodash","three"],t):"object"==typeof exports?exports.Miew=t(require("lodash"),require("three")):e.Miew=t(e._,e.THREE)}(this,((e,t)=>(()=>{var r={89:e=>{var t=function(){var e=function(e,t,r,n){for(r=r||{},n=e.length;n--;r[e[n]]=t);return r},t=[1,60],r=[1,62],n=[1,63],s=[1,65],i=[1,66],o=[1,67],a=[1,68],l=[1,69],c=[1,80],h=[1,72],u=[1,73],d=[1,74],p=[1,75],m=[1,99],f=[1,76],_=[1,100],g=[1,79],y=[1,51],x=[1,81],b=[1,82],w=[1,84],S=[1,83],v=[1,85],C=[1,96],A=[1,97],E=[1,98],T=[1,86],R=[1,87],M=[1,64],P=[1,70],N=[1,71],L=[1,77],I=[1,78],O=[1,53],V=[1,54],D=[1,55],k=[1,61],z=[1,88],F=[1,89],B=[1,90],U=[1,91],G=[1,92],j=[1,93],H=[1,94],$=[1,95],W=[1,101],Y=[1,102],X=[1,103],q=[1,104],Z=[1,105],K=[1,56],Q=[1,57],J=[1,58],ee=[1,59],te=[1,115],re=[1,111],ne=[1,114],se=[1,112],ie=[1,113],oe=[1,118],ae=[1,117],le=[1,134],ce=[1,149],he=[1,150],ue=[1,157],de=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],pe=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,71,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],me=[5,6,7,9,13,15,17,18,19,20,23,25,26,27,30,33,34,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,82,83,84,85,86,87,88,89,90,91,92,93,94,95],fe=[5,70,72],_e=[5,74],ge=[71,101],ye={trace:function(){},yy:{},symbols_:{error:2,Program:3,Command:4,EOF:5,RESET:6,BUILD:7,ALL:8,HELP:9,Path:10,MOTM:11,OneArgCommand:12,GET:13,STRING:14,SET:15,Value:16,SET_SAVE:17,SET_RESTORE:18,SET_RESET:19,PRESET:20,AddRepresentation:21,EditRepresentation:22,REMOVE:23,RepresentationReference:24,HIDE:25,SHOW:26,LIST:27,EXPAND_KEY:28,SELECTOR_KEY:29,SELECT:30,AS:31,WordAll:32,SELECTOR:33,WITHIN:34,NUMBER:35,OF:36,MATERIAL:37,IDENTIFIER:38,ModeCMD:39,ColorCMD:40,VIEW:41,BASE_64:42,UNIT:43,DSSP:44,SCALE:45,ROTATE:46,AxesList:47,TRANSLATE:48,CENTER:49,GetURLBranch:50,Screenshot:51,LINE:52,ArgList:53,LISTOBJ:54,REMOVEOBJ:55,URL:56,VIEW_KEY:57,SCREENSHOT:58,LOAD:59,Url:60,FILE_KEY:61,ADD:62,Description:63,REP:64,MODE:65,COLOR:66,Descriptor:67,RepresentationOwnProperty:68,RepresentationOwnPropertyOpts:69,DESC_KEY:70,"=":71,DESC_KEY_OPTS:72,AxesArg:73,DESC_KEY_AXES:74,Arg:75,PathWoDescKey:76,HEX:77,BOOL:78,Word:79,CommandSetWoDESC_KEY:80,DescKeys:81,CLEAR:82,FILE_LIST:83,FILE_REGISTER:84,FILE_DELETE:85,PRESET_ADD:86,PRESET_DELETE:87,PRESET_UPDATE:88,PRESET_RENAME:89,PRESET_OPEN:90,CREATE_SCENARIO:91,RESET_SCENARIO:92,DELETE_SCENARIO:93,ADD_SCENARIO_ITEM:94,LIST_SCENARIO:95,PDB_KEY:96,DELAY_KEY:97,PRST_KEY:98,DESCRIPTION_KEY:99,CommandSet:100,".":101,PresetPath:102,"/":103,HexOrNumber:104,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",6:"RESET",7:"BUILD",8:"ALL",9:"HELP",11:"MOTM",13:"GET",14:"STRING",15:"SET",17:"SET_SAVE",18:"SET_RESTORE",19:"SET_RESET",20:"PRESET",23:"REMOVE",25:"HIDE",26:"SHOW",27:"LIST",28:"EXPAND_KEY",29:"SELECTOR_KEY",30:"SELECT",31:"AS",33:"SELECTOR",34:"WITHIN",35:"NUMBER",36:"OF",37:"MATERIAL",38:"IDENTIFIER",41:"VIEW",42:"BASE_64",43:"UNIT",44:"DSSP",45:"SCALE",46:"ROTATE",48:"TRANSLATE",49:"CENTER",52:"LINE",54:"LISTOBJ",55:"REMOVEOBJ",56:"URL",57:"VIEW_KEY",58:"SCREENSHOT",59:"LOAD",61:"FILE_KEY",62:"ADD",64:"REP",65:"MODE",66:"COLOR",70:"DESC_KEY",71:"=",72:"DESC_KEY_OPTS",74:"DESC_KEY_AXES",77:"HEX",78:"BOOL",82:"CLEAR",83:"FILE_LIST",84:"FILE_REGISTER",85:"FILE_DELETE",86:"PRESET_ADD",87:"PRESET_DELETE",88:"PRESET_UPDATE",89:"PRESET_RENAME",90:"PRESET_OPEN",91:"CREATE_SCENARIO",92:"RESET_SCENARIO",93:"DELETE_SCENARIO",94:"ADD_SCENARIO_ITEM",95:"LIST_SCENARIO",96:"PDB_KEY",97:"DELAY_KEY",98:"PRST_KEY",99:"DESCRIPTION_KEY",101:".",103:"/"},productions_:[0,[3,2],[3,1],[4,1],[4,1],[4,2],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,3],[4,3],[4,1],[4,1],[4,1],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,2],[4,2],[4,1],[4,2],[4,2],[4,2],[4,4],[4,2],[4,6],[4,2],[4,1],[4,1],[4,1],[4,2],[4,2],[4,1],[4,2],[4,1],[4,2],[4,2],[4,2],[4,1],[4,2],[4,1],[4,1],[4,3],[4,3],[4,4],[4,4],[4,1],[4,2],[50,1],[50,2],[50,2],[50,3],[50,3],[51,1],[51,2],[51,3],[12,2],[12,2],[12,2],[21,1],[21,2],[21,2],[21,3],[22,2],[22,3],[39,2],[39,3],[40,2],[40,3],[24,1],[24,1],[63,1],[63,2],[63,3],[63,4],[67,1],[67,1],[67,2],[68,3],[69,3],[47,1],[47,2],[73,2],[53,1],[53,2],[75,3],[16,1],[16,1],[16,1],[16,1],[16,1],[79,1],[79,1],[32,1],[32,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[100,1],[100,1],[76,1],[76,3],[76,3],[10,1],[10,1],[10,3],[10,3],[10,3],[60,1],[102,1],[102,3],[104,1],[104,1]],performAction:function(e,t,r,n,s,i,o){var a=i.length-1;switch(s){case 1:return i[a-1];case 3:this.$=n.miew.reset(!1),n.ClearContext(),n.miew.resetReps("empty");break;case 4:this.$=n.miew.rebuild();break;case 5:this.$=n.miew.rebuildAll(),n.miew.rebuild();break;case 6:this.$=n.echo(n.utils.help().toString());break;case 7:this.$=n.echo(n.utils.help(i[a]).toString());break;case 8:this.$=n.miew.motm();break;case 10:case 11:this.$=n.utils.propagateProp(i[a]),n.echo(n.miew.get(i[a]).toString());break;case 12:case 13:this.$=n.miew.set(i[a-1],n.utils.propagateProp(i[a-1],i[a]));break;case 14:this.$=n.miew.saveSettings();break;case 15:this.$=n.miew.restoreSettings();break;case 16:this.$=n.miew.resetSettings();break;case 17:this.$=n.miew.resetReps();break;case 18:this.$=n.miew.applyPreset(i[a]);break;case 21:this.$=n.miew.repRemove(i[a]),n.representations.remove(i[a]);break;case 22:this.$=n.miew.repHide(i[a]);break;case 23:this.$=n.miew.repHide(i[a],!1);break;case 24:this.$=n.echo(n.utils.listRep(n.miew,n.representations,i[a],"-e"));break;case 25:this.$=n.echo(n.utils.list(n.miew,n.representations));break;case 26:this.$=n.echo(n.utils.list(n.miew,n.representations,i[a]));break;case 27:this.$=n.echo(n.utils.listSelector(n.miew,n.Context));break;case 28:this.$=n.miew.select(n.utils.checkArg(i[a-1].toLowerCase(),i[a],!0));break;case 29:this.$=n.Context[i[a].toLowerCase()]=n.utils.checkArg(i[a-3].toLowerCase(),i[a-2],!0),n.miew.select(n.Context[i[a].toLowerCase()]);break;case 30:this.$=n.miew.rep(n.miew.repCurrent(),{selector:n.utils.checkArg(i[a-1].toLowerCase(),i[a])});break;case 31:this.$=n.Context[i[a].toLowerCase()]=n.miew.within(n.utils.checkArg("select",i[a-2],!0),Number(i[a-4]));break;case 32:this.$=n.miew.rep(n.miew.repCurrent(),{material:n.utils.checkArg(i[a-1].toLowerCase(),i[a].toUpperCase())});break;case 35:this.$=n.echo(n.miew.view());break;case 36:case 37:this.$=n.miew.view(i[a]);break;case 38:this.$=n.echo(n.miew.changeUnit());break;case 39:this.$=n.echo(n.miew.changeUnit(i[a]));break;case 40:this.$=n.miew.dssp();break;case 41:this.$=n.miew.scale(i[a]);break;case 42:for(var l=0,c=i[a].length;l2&&A.push("'"+this.terminals_[S]+"'");R=d.showPosition?"Parse error on line "+(l+1)+":\n"+d.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(R,{text:d.match,token:this.terminals_[g]||g,line:d.yylineno,loc:f,expected:A})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+g);switch(b[0]){case 1:r.push(g),s.push(d.yytext),i.push(d.yylloc),r.push(b[1]),g=null,y?(g=y,y=null):(c=d.yyleng,a=d.yytext,l=d.yylineno,f=d.yylloc,h>0&&h--);break;case 2:if(v=this.productions_[b[1]][1],T.$=s[s.length-v],T._$={first_line:i[i.length-(v||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(v||1)].first_column,last_column:i[i.length-1].last_column},_&&(T._$.range=[i[i.length-(v||1)].range[0],i[i.length-1].range[1]]),void 0!==(w=this.performAction.apply(T,[a,c,l,p.yy,b[1],s,i].concat(u))))return w;v&&(r=r.slice(0,-1*v*2),s=s.slice(0,-1*v),i=i.slice(0,-1*v)),r.push(this.productions_[b[1]][0]),s.push(T.$),i.push(T._$),C=o[r[r.length-2]][r[r.length-1]],r.push(C);break;case 3:return!0}}return!0}},xe={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,r=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var r,n,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(n=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],r=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var i in s)this[i]=s[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,r,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),i=0;it[0].length)){if(t=r,n=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(r,s[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,s[n]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,r,n){switch(r){case 0:break;case 1:case 2:return"";case 3:return 42;case 4:return 35;case 5:return 77;case 6:case 7:return 78;case 8:return 8;case 9:return 6;case 10:return 82;case 11:return 7;case 12:return 9;case 13:return 59;case 14:return 13;case 15:return 15;case 16:return 17;case 17:return 18;case 18:return 19;case 19:return 20;case 20:return 11;case 21:return 62;case 22:return 64;case 23:return 23;case 24:return 25;case 25:return 26;case 26:return 27;case 27:return 30;case 28:return 34;case 29:return 33;case 30:return 65;case 31:return 66;case 32:return 37;case 33:return 41;case 34:return 43;case 35:return 52;case 36:return 54;case 37:return 55;case 38:return 46;case 39:return 48;case 40:return 45;case 41:return 49;case 42:return 56;case 43:return 58;case 44:return 44;case 45:return 83;case 46:return 84;case 47:return 85;case 48:return 86;case 49:return 87;case 50:return 88;case 51:return 89;case 52:return 90;case 53:return 91;case 54:return 92;case 55:return 93;case 56:return 94;case 57:return 95;case 58:case 59:return 70;case 60:case 61:return 72;case 62:case 63:case 64:return 74;case 65:return 31;case 66:return 36;case 67:return 96;case 68:return 97;case 69:return 98;case 70:return 99;case 71:return t.yytext=e.utils.unquoteString(t.yytext),14;case 72:return 38;case 73:return 5;case 74:return 101;case 75:return 103;case 76:return"\\";case 77:return 28;case 78:return 61;case 79:return 29;case 80:return 57;case 81:return 71}},rules:[/^(?:\s+)/i,/^(?:[#].*)/i,/^(?:\/\/.*)/i,/^(?:([_A-Z0-9\/\+]+==))/i,/^(?:-?[0-9]+(\.[0-9]+)?\b)/i,/^(?:0[xX][0-9A-F]+\b)/i,/^(?:false\b)/i,/^(?:true\b)/i,/^(?:all\b)/i,/^(?:reset\b)/i,/^(?:clear\b)/i,/^(?:build\b)/i,/^(?:help\b)/i,/^(?:load\b)/i,/^(?:get\b)/i,/^(?:set\b)/i,/^(?:set_save\b)/i,/^(?:set_restore\b)/i,/^(?:set_reset\b)/i,/^(?:preset\b)/i,/^(?:motm\b)/i,/^(?:add\b)/i,/^(?:rep\b)/i,/^(?:remove\b)/i,/^(?:hide\b)/i,/^(?:show\b)/i,/^(?:list\b)/i,/^(?:select\b)/i,/^(?:within\b)/i,/^(?:selector\b)/i,/^(?:mode\b)/i,/^(?:color\b)/i,/^(?:material\b)/i,/^(?:view\b)/i,/^(?:unit\b)/i,/^(?:line\b)/i,/^(?:listobj\b)/i,/^(?:removeobj\b)/i,/^(?:rotate\b)/i,/^(?:translate\b)/i,/^(?:scale\b)/i,/^(?:center\b)/i,/^(?:url\b)/i,/^(?:screenshot\b)/i,/^(?:dssp\b)/i,/^(?:file_list\b)/i,/^(?:file_register\b)/i,/^(?:file_delete\b)/i,/^(?:preset_add\b)/i,/^(?:preset_delete\b)/i,/^(?:preset_update\b)/i,/^(?:preset_rename\b)/i,/^(?:preset_open\b)/i,/^(?:create_scenario\b)/i,/^(?:reset_scenario\b)/i,/^(?:delete_scenario\b)/i,/^(?:add_scenario_item\b)/i,/^(?:list_scenario\b)/i,/^(?:s\b)/i,/^(?:mt\b)/i,/^(?:m\b)/i,/^(?:c\b)/i,/^(?:x\b)/i,/^(?:y\b)/i,/^(?:z\b)/i,/^(?:as\b)/i,/^(?:of\b)/i,/^(?:pdb\b)/i,/^(?:delay\b)/i,/^(?:prst\b)/i,/^(?:desc\b)/i,/^(?:((?:"(?:\\.|[^\\"])*"|'(?:\\.|[^\\'])*')))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:\.)/i,/^(?:\/)/i,/^(?:\\)/i,/^(?:-e\b)/i,/^(?:-f\b)/i,/^(?:-s\b)/i,/^(?:-v\b)/i,/^(?:=)/i],conditions:{INITIAL:{rules:[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,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,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81],inclusive:!0}}};function be(){this.yy={}}return ye.lexer=xe,be.prototype=ye,ye.Parser=be,new be}();e.exports={parser:t}},99:e=>{var t=function(){var e=function(e,t,r,n){for(r=r||{},n=e.length;n--;r[e[n]]=t);return r},t=[1,4],r=[1,5],n=[1,6],s=[1,7],i=[1,8],o=[1,9],a=[1,11],l=[1,12],c=[5,7,8,11],h=[1,17],u=[1,22],d=[1,20],p=[1,21],m=[5,7,8,11,19],f={trace:function(){},yy:{},symbols_:{error:2,Program:3,Expression:4,EOF:5,Selector:6,OR:7,AND:8,NOT:9,"(":10,")":11,SELECTOR:12,NAMED_SELECTOR:13,SELECTOR_RANGED:14,RangeList:15,SELECTOR_NAMED:16,NameList:17,Range:18,",":19,NUMBER:20,":":21,Name:22,IDENTIFIER:23,STRING:24,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",7:"OR",8:"AND",9:"NOT",10:"(",11:")",12:"SELECTOR",13:"NAMED_SELECTOR",14:"SELECTOR_RANGED",16:"SELECTOR_NAMED",19:",",20:"NUMBER",21:":",23:"IDENTIFIER",24:"STRING"},productions_:[0,[3,2],[4,1],[4,3],[4,3],[4,2],[4,3],[6,1],[6,1],[6,2],[6,2],[15,1],[15,3],[18,1],[18,3],[17,1],[17,3],[22,1],[22,1],[22,1]],performAction:function(e,t,r,n,s,i,o){var a=i.length-1;switch(s){case 1:return i[a-1];case 3:this.$=n.keyword("or")(i[a-2],i[a]);break;case 4:this.$=n.keyword("and")(i[a-2],i[a]);break;case 5:this.$=n.keyword("not")(i[a]);break;case 6:this.$=i[a-1];break;case 7:this.$=n.keyword(i[a])();break;case 8:this.$=n.GetSelector(i[a].toLowerCase().slice(1,i[a].length));break;case 9:case 10:this.$=n.keyword(i[a-1])(i[a]);break;case 11:this.$=new n.RangeList(i[a]);break;case 12:case 16:this.$=i[a-2].append(i[a]);break;case 13:this.$=new n.Range(Number(i[a]));break;case 14:this.$=new n.Range(Number(i[a-2]),Number(i[a]));break;case 15:this.$=new n.ValueList(i[a])}},table:[{3:1,4:2,6:3,9:t,10:r,12:n,13:s,14:i,16:o},{1:[3]},{5:[1,10],7:a,8:l},e(c,[2,2]),{4:13,6:3,9:t,10:r,12:n,13:s,14:i,16:o},{4:14,6:3,9:t,10:r,12:n,13:s,14:i,16:o},e(c,[2,7]),e(c,[2,8]),{15:15,18:16,20:h},{17:18,20:u,22:19,23:d,24:p},{1:[2,1]},{4:23,6:3,9:t,10:r,12:n,13:s,14:i,16:o},{4:24,6:3,9:t,10:r,12:n,13:s,14:i,16:o},e(c,[2,5]),{7:a,8:l,11:[1,25]},e(c,[2,9],{19:[1,26]}),e(m,[2,11]),e(m,[2,13],{21:[1,27]}),e(c,[2,10],{19:[1,28]}),e(m,[2,15]),e(m,[2,17]),e(m,[2,18]),e(m,[2,19]),e([5,7,11],[2,3],{8:l}),e(c,[2,4]),e(c,[2,6]),{18:29,20:h},{20:[1,30]},{20:u,22:31,23:d,24:p},e(m,[2,12]),e(m,[2,14]),e(m,[2,16])],defaultActions:{10:[2,1]},parseError:function(e,t){if(!t.recoverable){var r=new Error(e);throw r.hash=t,r}this.trace(e)},parse:function(e){var t=this,r=[0],n=[],s=[null],i=[],o=this.table,a="",l=0,c=0,h=0,u=i.slice.call(arguments,1),d=Object.create(this.lexer),p={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(p.yy[m]=this.yy[m]);d.setInput(e,p.yy),p.yy.lexer=d,p.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var f=d.yylloc;i.push(f);var _=d.options&&d.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,y,x,b,w,S,v,C,A,E,T={};;){if(x=r[r.length-1],this.defaultActions[x]?b=this.defaultActions[x]:(null==g&&(E=void 0,"number"!=typeof(E=n.pop()||d.lex()||1)&&(E instanceof Array&&(E=(n=E).pop()),E=t.symbols_[E]||E),g=E),b=o[x]&&o[x][g]),void 0===b||!b.length||!b[0]){var R="";for(S in A=[],o[x])this.terminals_[S]&&S>2&&A.push("'"+this.terminals_[S]+"'");R=d.showPosition?"Parse error on line "+(l+1)+":\n"+d.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(R,{text:d.match,token:this.terminals_[g]||g,line:d.yylineno,loc:f,expected:A})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+g);switch(b[0]){case 1:r.push(g),s.push(d.yytext),i.push(d.yylloc),r.push(b[1]),g=null,y?(g=y,y=null):(c=d.yyleng,a=d.yytext,l=d.yylineno,f=d.yylloc,h>0&&h--);break;case 2:if(v=this.productions_[b[1]][1],T.$=s[s.length-v],T._$={first_line:i[i.length-(v||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(v||1)].first_column,last_column:i[i.length-1].last_column},_&&(T._$.range=[i[i.length-(v||1)].range[0],i[i.length-1].range[1]]),void 0!==(w=this.performAction.apply(T,[a,c,l,p.yy,b[1],s,i].concat(u))))return w;v&&(r=r.slice(0,-1*v*2),s=s.slice(0,-1*v),i=i.slice(0,-1*v)),r.push(this.productions_[b[1]][0]),s.push(T.$),i.push(T._$),C=o[r[r.length-2]][r[r.length-1]],r.push(C);break;case 3:return!0}}return!0}},_={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,r=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var r,n,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(n=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],r=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var i in s)this[i]=s[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,r,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),i=0;it[0].length)){if(t=r,n=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(r,s[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,s[n]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,r,n){switch(r){case 0:break;case 1:return 20;case 2:return 7;case 3:return 8;case 4:return 9;case 5:return 12;case 6:return 16;case 7:return 14;case 8:return 10;case 9:return 11;case 10:return 19;case 11:return 21;case 12:return"<=";case 13:return">=";case 14:return"<";case 15:return">";case 16:return t.yytext=t.yytext.substr(1,t.yyleng-2),24;case 17:return 13;case 18:return 23;case 19:return 5;case 20:return"INVALID"}},rules:[/^(?:\s+)/i,/^(?:(-?(?:[1-9][0-9]+|[0-9]))\b)/i,/^(?:OR\b)/i,/^(?:AND\b)/i,/^(?:NOT\b)/i,/^(?:((ALL|NONE|HETATM|PROTEIN|BASIC|ACIDIC|CHARGED|POLAR|NONPOLAR|AROMATIC|NUCLEIC|PURINE|PYRIMIDINE|WATER|POLARH|NONPOLARH))\b)/i,/^(?:((NAME|ELEM|TYPE|RESIDUE|ICODE|CHAIN|ALTLOC))\b)/i,/^(?:((SERIAL|SEQUENCE|RESIDX))\b)/i,/^(?:\()/i,/^(?:\))/i,/^(?:,)/i,/^(?::)/i,/^(?:<=)/i,/^(?:>=)/i,/^(?:<)/i,/^(?:>)/i,/^(?:((?:"(?:\\.|[^\\"])*"|'(?:\\.|[^\\'])*')))/i,/^(?:(@[_A-Z0-9]+))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};function g(){this.yy={}}return f.lexer=_,g.prototype=f,f.Parser=g,new g}();e.exports={parser:t}},690:function(e,t){ +/*! Miew - 3D Molecular Viewer v0.12.0 Copyright (c) 2015-2026 EPAM Systems, Inc. */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("lodash"),require("three")):"function"==typeof define&&define.amd?define(["lodash","three"],t):"object"==typeof exports?exports.Miew=t(require("lodash"),require("three")):e.Miew=t(e._,e.THREE)}(this,((e,t)=>(()=>{var r={89(e){var t=function(){var e=function(e,t,r,n){for(r=r||{},n=e.length;n--;r[e[n]]=t);return r},t=[1,60],r=[1,62],n=[1,63],s=[1,65],i=[1,66],o=[1,67],a=[1,68],l=[1,69],c=[1,80],h=[1,72],u=[1,73],d=[1,74],p=[1,75],m=[1,99],f=[1,76],_=[1,100],g=[1,79],y=[1,51],x=[1,81],b=[1,82],w=[1,84],S=[1,83],v=[1,85],C=[1,96],A=[1,97],E=[1,98],T=[1,86],R=[1,87],M=[1,64],P=[1,70],L=[1,71],N=[1,77],I=[1,78],O=[1,53],V=[1,54],D=[1,55],k=[1,61],z=[1,88],F=[1,89],B=[1,90],U=[1,91],G=[1,92],j=[1,93],H=[1,94],$=[1,95],W=[1,101],Y=[1,102],X=[1,103],q=[1,104],K=[1,105],Z=[1,56],Q=[1,57],J=[1,58],ee=[1,59],te=[1,115],re=[1,111],ne=[1,114],se=[1,112],ie=[1,113],oe=[1,118],ae=[1,117],le=[1,134],ce=[1,149],he=[1,150],ue=[1,157],de=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],pe=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,71,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],me=[5,6,7,9,13,15,17,18,19,20,23,25,26,27,30,33,34,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,82,83,84,85,86,87,88,89,90,91,92,93,94,95],fe=[5,70,72],_e=[5,74],ge=[71,101],ye={trace:function(){},yy:{},symbols_:{error:2,Program:3,Command:4,EOF:5,RESET:6,BUILD:7,ALL:8,HELP:9,Path:10,MOTM:11,OneArgCommand:12,GET:13,STRING:14,SET:15,Value:16,SET_SAVE:17,SET_RESTORE:18,SET_RESET:19,PRESET:20,AddRepresentation:21,EditRepresentation:22,REMOVE:23,RepresentationReference:24,HIDE:25,SHOW:26,LIST:27,EXPAND_KEY:28,SELECTOR_KEY:29,SELECT:30,AS:31,WordAll:32,SELECTOR:33,WITHIN:34,NUMBER:35,OF:36,MATERIAL:37,IDENTIFIER:38,ModeCMD:39,ColorCMD:40,VIEW:41,BASE_64:42,UNIT:43,DSSP:44,SCALE:45,ROTATE:46,AxesList:47,TRANSLATE:48,CENTER:49,GetURLBranch:50,Screenshot:51,LINE:52,ArgList:53,LISTOBJ:54,REMOVEOBJ:55,URL:56,VIEW_KEY:57,SCREENSHOT:58,LOAD:59,Url:60,FILE_KEY:61,ADD:62,Description:63,REP:64,MODE:65,COLOR:66,Descriptor:67,RepresentationOwnProperty:68,RepresentationOwnPropertyOpts:69,DESC_KEY:70,"=":71,DESC_KEY_OPTS:72,AxesArg:73,DESC_KEY_AXES:74,Arg:75,PathWoDescKey:76,HEX:77,BOOL:78,Word:79,CommandSetWoDESC_KEY:80,DescKeys:81,CLEAR:82,FILE_LIST:83,FILE_REGISTER:84,FILE_DELETE:85,PRESET_ADD:86,PRESET_DELETE:87,PRESET_UPDATE:88,PRESET_RENAME:89,PRESET_OPEN:90,CREATE_SCENARIO:91,RESET_SCENARIO:92,DELETE_SCENARIO:93,ADD_SCENARIO_ITEM:94,LIST_SCENARIO:95,PDB_KEY:96,DELAY_KEY:97,PRST_KEY:98,DESCRIPTION_KEY:99,CommandSet:100,".":101,PresetPath:102,"/":103,HexOrNumber:104,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",6:"RESET",7:"BUILD",8:"ALL",9:"HELP",11:"MOTM",13:"GET",14:"STRING",15:"SET",17:"SET_SAVE",18:"SET_RESTORE",19:"SET_RESET",20:"PRESET",23:"REMOVE",25:"HIDE",26:"SHOW",27:"LIST",28:"EXPAND_KEY",29:"SELECTOR_KEY",30:"SELECT",31:"AS",33:"SELECTOR",34:"WITHIN",35:"NUMBER",36:"OF",37:"MATERIAL",38:"IDENTIFIER",41:"VIEW",42:"BASE_64",43:"UNIT",44:"DSSP",45:"SCALE",46:"ROTATE",48:"TRANSLATE",49:"CENTER",52:"LINE",54:"LISTOBJ",55:"REMOVEOBJ",56:"URL",57:"VIEW_KEY",58:"SCREENSHOT",59:"LOAD",61:"FILE_KEY",62:"ADD",64:"REP",65:"MODE",66:"COLOR",70:"DESC_KEY",71:"=",72:"DESC_KEY_OPTS",74:"DESC_KEY_AXES",77:"HEX",78:"BOOL",82:"CLEAR",83:"FILE_LIST",84:"FILE_REGISTER",85:"FILE_DELETE",86:"PRESET_ADD",87:"PRESET_DELETE",88:"PRESET_UPDATE",89:"PRESET_RENAME",90:"PRESET_OPEN",91:"CREATE_SCENARIO",92:"RESET_SCENARIO",93:"DELETE_SCENARIO",94:"ADD_SCENARIO_ITEM",95:"LIST_SCENARIO",96:"PDB_KEY",97:"DELAY_KEY",98:"PRST_KEY",99:"DESCRIPTION_KEY",101:".",103:"/"},productions_:[0,[3,2],[3,1],[4,1],[4,1],[4,2],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,3],[4,3],[4,1],[4,1],[4,1],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,2],[4,2],[4,1],[4,2],[4,2],[4,2],[4,4],[4,2],[4,6],[4,2],[4,1],[4,1],[4,1],[4,2],[4,2],[4,1],[4,2],[4,1],[4,2],[4,2],[4,2],[4,1],[4,2],[4,1],[4,1],[4,3],[4,3],[4,4],[4,4],[4,1],[4,2],[50,1],[50,2],[50,2],[50,3],[50,3],[51,1],[51,2],[51,3],[12,2],[12,2],[12,2],[21,1],[21,2],[21,2],[21,3],[22,2],[22,3],[39,2],[39,3],[40,2],[40,3],[24,1],[24,1],[63,1],[63,2],[63,3],[63,4],[67,1],[67,1],[67,2],[68,3],[69,3],[47,1],[47,2],[73,2],[53,1],[53,2],[75,3],[16,1],[16,1],[16,1],[16,1],[16,1],[79,1],[79,1],[32,1],[32,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[100,1],[100,1],[76,1],[76,3],[76,3],[10,1],[10,1],[10,3],[10,3],[10,3],[60,1],[102,1],[102,3],[104,1],[104,1]],performAction:function(e,t,r,n,s,i,o){var a=i.length-1;switch(s){case 1:return i[a-1];case 3:this.$=n.miew.reset(!1),n.ClearContext(),n.miew.resetReps("empty");break;case 4:this.$=n.miew.rebuild();break;case 5:this.$=n.miew.rebuildAll(),n.miew.rebuild();break;case 6:this.$=n.echo(n.utils.help().toString());break;case 7:this.$=n.echo(n.utils.help(i[a]).toString());break;case 8:this.$=n.miew.motm();break;case 10:case 11:this.$=n.utils.propagateProp(i[a]),n.echo(n.miew.get(i[a]).toString());break;case 12:case 13:this.$=n.miew.set(i[a-1],n.utils.propagateProp(i[a-1],i[a]));break;case 14:this.$=n.miew.saveSettings();break;case 15:this.$=n.miew.restoreSettings();break;case 16:this.$=n.miew.resetSettings();break;case 17:this.$=n.miew.resetReps();break;case 18:this.$=n.miew.applyPreset(i[a]);break;case 21:this.$=n.miew.repRemove(i[a]),n.representations.remove(i[a]);break;case 22:this.$=n.miew.repHide(i[a]);break;case 23:this.$=n.miew.repHide(i[a],!1);break;case 24:this.$=n.echo(n.utils.listRep(n.miew,n.representations,i[a],"-e"));break;case 25:this.$=n.echo(n.utils.list(n.miew,n.representations));break;case 26:this.$=n.echo(n.utils.list(n.miew,n.representations,i[a]));break;case 27:this.$=n.echo(n.utils.listSelector(n.miew,n.Context));break;case 28:this.$=n.miew.select(n.utils.checkArg(i[a-1].toLowerCase(),i[a],!0));break;case 29:this.$=n.Context[i[a].toLowerCase()]=n.utils.checkArg(i[a-3].toLowerCase(),i[a-2],!0),n.miew.select(n.Context[i[a].toLowerCase()]);break;case 30:this.$=n.miew.rep(n.miew.repCurrent(),{selector:n.utils.checkArg(i[a-1].toLowerCase(),i[a])});break;case 31:this.$=n.Context[i[a].toLowerCase()]=n.miew.within(n.utils.checkArg("select",i[a-2],!0),Number(i[a-4]));break;case 32:this.$=n.miew.rep(n.miew.repCurrent(),{material:n.utils.checkArg(i[a-1].toLowerCase(),i[a].toUpperCase())});break;case 35:this.$=n.echo(n.miew.view());break;case 36:case 37:this.$=n.miew.view(i[a]);break;case 38:this.$=n.echo(n.miew.changeUnit());break;case 39:this.$=n.echo(n.miew.changeUnit(i[a]));break;case 40:this.$=n.miew.dssp();break;case 41:this.$=n.miew.scale(i[a]);break;case 42:for(var l=0,c=i[a].length;l2&&A.push("'"+this.terminals_[S]+"'");R=d.showPosition?"Parse error on line "+(l+1)+":\n"+d.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(R,{text:d.match,token:this.terminals_[g]||g,line:d.yylineno,loc:f,expected:A})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+g);switch(b[0]){case 1:r.push(g),s.push(d.yytext),i.push(d.yylloc),r.push(b[1]),g=null,y?(g=y,y=null):(c=d.yyleng,a=d.yytext,l=d.yylineno,f=d.yylloc,h>0&&h--);break;case 2:if(v=this.productions_[b[1]][1],T.$=s[s.length-v],T._$={first_line:i[i.length-(v||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(v||1)].first_column,last_column:i[i.length-1].last_column},_&&(T._$.range=[i[i.length-(v||1)].range[0],i[i.length-1].range[1]]),void 0!==(w=this.performAction.apply(T,[a,c,l,p.yy,b[1],s,i].concat(u))))return w;v&&(r=r.slice(0,-1*v*2),s=s.slice(0,-1*v),i=i.slice(0,-1*v)),r.push(this.productions_[b[1]][0]),s.push(T.$),i.push(T._$),C=o[r[r.length-2]][r[r.length-1]],r.push(C);break;case 3:return!0}}return!0}},xe={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,r=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var r,n,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(n=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],r=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var i in s)this[i]=s[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,r,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),i=0;it[0].length)){if(t=r,n=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(r,s[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,s[n]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,r,n){switch(r){case 0:break;case 1:case 2:return"";case 3:return 42;case 4:return 35;case 5:return 77;case 6:case 7:return 78;case 8:return 8;case 9:return 6;case 10:return 82;case 11:return 7;case 12:return 9;case 13:return 59;case 14:return 13;case 15:return 15;case 16:return 17;case 17:return 18;case 18:return 19;case 19:return 20;case 20:return 11;case 21:return 62;case 22:return 64;case 23:return 23;case 24:return 25;case 25:return 26;case 26:return 27;case 27:return 30;case 28:return 34;case 29:return 33;case 30:return 65;case 31:return 66;case 32:return 37;case 33:return 41;case 34:return 43;case 35:return 52;case 36:return 54;case 37:return 55;case 38:return 46;case 39:return 48;case 40:return 45;case 41:return 49;case 42:return 56;case 43:return 58;case 44:return 44;case 45:return 83;case 46:return 84;case 47:return 85;case 48:return 86;case 49:return 87;case 50:return 88;case 51:return 89;case 52:return 90;case 53:return 91;case 54:return 92;case 55:return 93;case 56:return 94;case 57:return 95;case 58:case 59:return 70;case 60:case 61:return 72;case 62:case 63:case 64:return 74;case 65:return 31;case 66:return 36;case 67:return 96;case 68:return 97;case 69:return 98;case 70:return 99;case 71:return t.yytext=e.utils.unquoteString(t.yytext),14;case 72:return 38;case 73:return 5;case 74:return 101;case 75:return 103;case 76:return"\\";case 77:return 28;case 78:return 61;case 79:return 29;case 80:return 57;case 81:return 71}},rules:[/^(?:\s+)/i,/^(?:[#].*)/i,/^(?:\/\/.*)/i,/^(?:([_A-Z0-9\/\+]+==))/i,/^(?:-?[0-9]+(\.[0-9]+)?\b)/i,/^(?:0[xX][0-9A-F]+\b)/i,/^(?:false\b)/i,/^(?:true\b)/i,/^(?:all\b)/i,/^(?:reset\b)/i,/^(?:clear\b)/i,/^(?:build\b)/i,/^(?:help\b)/i,/^(?:load\b)/i,/^(?:get\b)/i,/^(?:set\b)/i,/^(?:set_save\b)/i,/^(?:set_restore\b)/i,/^(?:set_reset\b)/i,/^(?:preset\b)/i,/^(?:motm\b)/i,/^(?:add\b)/i,/^(?:rep\b)/i,/^(?:remove\b)/i,/^(?:hide\b)/i,/^(?:show\b)/i,/^(?:list\b)/i,/^(?:select\b)/i,/^(?:within\b)/i,/^(?:selector\b)/i,/^(?:mode\b)/i,/^(?:color\b)/i,/^(?:material\b)/i,/^(?:view\b)/i,/^(?:unit\b)/i,/^(?:line\b)/i,/^(?:listobj\b)/i,/^(?:removeobj\b)/i,/^(?:rotate\b)/i,/^(?:translate\b)/i,/^(?:scale\b)/i,/^(?:center\b)/i,/^(?:url\b)/i,/^(?:screenshot\b)/i,/^(?:dssp\b)/i,/^(?:file_list\b)/i,/^(?:file_register\b)/i,/^(?:file_delete\b)/i,/^(?:preset_add\b)/i,/^(?:preset_delete\b)/i,/^(?:preset_update\b)/i,/^(?:preset_rename\b)/i,/^(?:preset_open\b)/i,/^(?:create_scenario\b)/i,/^(?:reset_scenario\b)/i,/^(?:delete_scenario\b)/i,/^(?:add_scenario_item\b)/i,/^(?:list_scenario\b)/i,/^(?:s\b)/i,/^(?:mt\b)/i,/^(?:m\b)/i,/^(?:c\b)/i,/^(?:x\b)/i,/^(?:y\b)/i,/^(?:z\b)/i,/^(?:as\b)/i,/^(?:of\b)/i,/^(?:pdb\b)/i,/^(?:delay\b)/i,/^(?:prst\b)/i,/^(?:desc\b)/i,/^(?:((?:"(?:\\.|[^\\"])*"|'(?:\\.|[^\\'])*')))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:\.)/i,/^(?:\/)/i,/^(?:\\)/i,/^(?:-e\b)/i,/^(?:-f\b)/i,/^(?:-s\b)/i,/^(?:-v\b)/i,/^(?:=)/i],conditions:{INITIAL:{rules:[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,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,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81],inclusive:!0}}};function be(){this.yy={}}return ye.lexer=xe,be.prototype=ye,ye.Parser=be,new be}();e.exports={parser:t}},99(e){var t=function(){var e=function(e,t,r,n){for(r=r||{},n=e.length;n--;r[e[n]]=t);return r},t=[1,4],r=[1,5],n=[1,6],s=[1,7],i=[1,8],o=[1,9],a=[1,11],l=[1,12],c=[5,7,8,11],h=[1,17],u=[1,22],d=[1,20],p=[1,21],m=[5,7,8,11,19],f={trace:function(){},yy:{},symbols_:{error:2,Program:3,Expression:4,EOF:5,Selector:6,OR:7,AND:8,NOT:9,"(":10,")":11,SELECTOR:12,NAMED_SELECTOR:13,SELECTOR_RANGED:14,RangeList:15,SELECTOR_NAMED:16,NameList:17,Range:18,",":19,NUMBER:20,":":21,Name:22,IDENTIFIER:23,STRING:24,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",7:"OR",8:"AND",9:"NOT",10:"(",11:")",12:"SELECTOR",13:"NAMED_SELECTOR",14:"SELECTOR_RANGED",16:"SELECTOR_NAMED",19:",",20:"NUMBER",21:":",23:"IDENTIFIER",24:"STRING"},productions_:[0,[3,2],[4,1],[4,3],[4,3],[4,2],[4,3],[6,1],[6,1],[6,2],[6,2],[15,1],[15,3],[18,1],[18,3],[17,1],[17,3],[22,1],[22,1],[22,1]],performAction:function(e,t,r,n,s,i,o){var a=i.length-1;switch(s){case 1:return i[a-1];case 3:this.$=n.keyword("or")(i[a-2],i[a]);break;case 4:this.$=n.keyword("and")(i[a-2],i[a]);break;case 5:this.$=n.keyword("not")(i[a]);break;case 6:this.$=i[a-1];break;case 7:this.$=n.keyword(i[a])();break;case 8:this.$=n.GetSelector(i[a].toLowerCase().slice(1,i[a].length));break;case 9:case 10:this.$=n.keyword(i[a-1])(i[a]);break;case 11:this.$=new n.RangeList(i[a]);break;case 12:case 16:this.$=i[a-2].append(i[a]);break;case 13:this.$=new n.Range(Number(i[a]));break;case 14:this.$=new n.Range(Number(i[a-2]),Number(i[a]));break;case 15:this.$=new n.ValueList(i[a])}},table:[{3:1,4:2,6:3,9:t,10:r,12:n,13:s,14:i,16:o},{1:[3]},{5:[1,10],7:a,8:l},e(c,[2,2]),{4:13,6:3,9:t,10:r,12:n,13:s,14:i,16:o},{4:14,6:3,9:t,10:r,12:n,13:s,14:i,16:o},e(c,[2,7]),e(c,[2,8]),{15:15,18:16,20:h},{17:18,20:u,22:19,23:d,24:p},{1:[2,1]},{4:23,6:3,9:t,10:r,12:n,13:s,14:i,16:o},{4:24,6:3,9:t,10:r,12:n,13:s,14:i,16:o},e(c,[2,5]),{7:a,8:l,11:[1,25]},e(c,[2,9],{19:[1,26]}),e(m,[2,11]),e(m,[2,13],{21:[1,27]}),e(c,[2,10],{19:[1,28]}),e(m,[2,15]),e(m,[2,17]),e(m,[2,18]),e(m,[2,19]),e([5,7,11],[2,3],{8:l}),e(c,[2,4]),e(c,[2,6]),{18:29,20:h},{20:[1,30]},{20:u,22:31,23:d,24:p},e(m,[2,12]),e(m,[2,14]),e(m,[2,16])],defaultActions:{10:[2,1]},parseError:function(e,t){if(!t.recoverable){var r=new Error(e);throw r.hash=t,r}this.trace(e)},parse:function(e){var t=this,r=[0],n=[],s=[null],i=[],o=this.table,a="",l=0,c=0,h=0,u=i.slice.call(arguments,1),d=Object.create(this.lexer),p={yy:{}};for(var m in this.yy)Object.prototype.hasOwnProperty.call(this.yy,m)&&(p.yy[m]=this.yy[m]);d.setInput(e,p.yy),p.yy.lexer=d,p.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var f=d.yylloc;i.push(f);var _=d.options&&d.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,y,x,b,w,S,v,C,A,E,T={};;){if(x=r[r.length-1],this.defaultActions[x]?b=this.defaultActions[x]:(null==g&&(E=void 0,"number"!=typeof(E=n.pop()||d.lex()||1)&&(E instanceof Array&&(E=(n=E).pop()),E=t.symbols_[E]||E),g=E),b=o[x]&&o[x][g]),void 0===b||!b.length||!b[0]){var R="";for(S in A=[],o[x])this.terminals_[S]&&S>2&&A.push("'"+this.terminals_[S]+"'");R=d.showPosition?"Parse error on line "+(l+1)+":\n"+d.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(l+1)+": Unexpected "+(1==g?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(R,{text:d.match,token:this.terminals_[g]||g,line:d.yylineno,loc:f,expected:A})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+g);switch(b[0]){case 1:r.push(g),s.push(d.yytext),i.push(d.yylloc),r.push(b[1]),g=null,y?(g=y,y=null):(c=d.yyleng,a=d.yytext,l=d.yylineno,f=d.yylloc,h>0&&h--);break;case 2:if(v=this.productions_[b[1]][1],T.$=s[s.length-v],T._$={first_line:i[i.length-(v||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(v||1)].first_column,last_column:i[i.length-1].last_column},_&&(T._$.range=[i[i.length-(v||1)].range[0],i[i.length-1].range[1]]),void 0!==(w=this.performAction.apply(T,[a,c,l,p.yy,b[1],s,i].concat(u))))return w;v&&(r=r.slice(0,-1*v*2),s=s.slice(0,-1*v),i=i.slice(0,-1*v)),r.push(this.productions_[b[1]][0]),s.push(T.$),i.push(T._$),C=o[r[r.length-2]][r[r.length-1]],r.push(C);break;case 3:return!0}}return!0}},_={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,r=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var n=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),r.length-1&&(this.yylineno-=r.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var r,n,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(n=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],r=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var i in s)this[i]=s[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,r,n;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),i=0;it[0].length)){if(t=r,n=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(r,s[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,s[n]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,r,n){switch(r){case 0:break;case 1:return 20;case 2:return 7;case 3:return 8;case 4:return 9;case 5:return 12;case 6:return 16;case 7:return 14;case 8:return 10;case 9:return 11;case 10:return 19;case 11:return 21;case 12:return"<=";case 13:return">=";case 14:return"<";case 15:return">";case 16:return t.yytext=t.yytext.substr(1,t.yyleng-2),24;case 17:return 13;case 18:return 23;case 19:return 5;case 20:return"INVALID"}},rules:[/^(?:\s+)/i,/^(?:(-?(?:[1-9][0-9]+|[0-9]))\b)/i,/^(?:OR\b)/i,/^(?:AND\b)/i,/^(?:NOT\b)/i,/^(?:((ALL|NONE|HETATM|PROTEIN|BASIC|ACIDIC|CHARGED|POLAR|NONPOLAR|AROMATIC|NUCLEIC|PURINE|PYRIMIDINE|WATER|POLARH|NONPOLARH))\b)/i,/^(?:((NAME|ELEM|TYPE|RESIDUE|ICODE|CHAIN|ALTLOC))\b)/i,/^(?:((SERIAL|SEQUENCE|RESIDX))\b)/i,/^(?:\()/i,/^(?:\))/i,/^(?:,)/i,/^(?::)/i,/^(?:<=)/i,/^(?:>=)/i,/^(?:<)/i,/^(?:>)/i,/^(?:((?:"(?:\\.|[^\\"])*"|'(?:\\.|[^\\'])*')))/i,/^(?:(@[_A-Z0-9]+))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],inclusive:!0}}};function g(){this.yy={}}return f.lexer=_,g.prototype=f,f.Parser=g,new g}();e.exports={parser:t}},690(e,t){ /* Smooth.js version 0.1.7 @@ -8,5 +8,5 @@ Turn arrays into smooth functions. Copyright 2012 Spencer Cohen Licensed under MIT license (see "Smooth.js MIT license.txt") */ -(function(){var e,r,n,s,i,o,a,l,c,h,u,d,p,m,f,_,g,y,x,b,w,S,v,C,A,E,T=Object.prototype.hasOwnProperty,R=function(e,t){for(var r in t)T.call(t,r)&&(e[r]=t[r]);function n(){this.constructor=e}return n.prototype=t.prototype,e.prototype=new n,e.__super__=t.prototype,e};for(_ in d={method:(n={METHOD_NEAREST:"nearest",METHOD_LINEAR:"linear",METHOD_CUBIC:"cubic",METHOD_LANCZOS:"lanczos",METHOD_SINC:"sinc",CLIP_CLAMP:"clamp",CLIP_ZERO:"zero",CLIP_PERIODIC:"periodic",CLIP_MIRROR:"mirror",CUBIC_TENSION_DEFAULT:0,CUBIC_TENSION_CATMULL_ROM:0}).METHOD_CUBIC,cubicTension:n.CUBIC_TENSION_DEFAULT,clip:n.CLIP_CLAMP,scaleTo:0,sincFilterSize:2,sincWindow:void 0},c=function(e,t){return Math.max(0,Math.min(e,t-1))},u=function(e,t){return(e%=t)<0&&(e+=t),e},h=function(e,t){var r;return(e=u(e,r=2*(t-1)))>t-1&&(e=r-e),e},e=function(){function e(e,t){if(this.array=e.slice(0),this.length=this.array.length,!(this.clipHelper={clamp:this.clipHelperClamp,zero:this.clipHelperZero,periodic:this.clipHelperPeriodic,mirror:this.clipHelperMirror}[t.clip]))throw"Invalid clip: "+t.clip}return e.prototype.getClippedInput=function(e){return 0<=e&&e=i;s<=i?r++:r--)n+=this.kernel(e-r)*this.getClippedInput(r);return n},t}(e),p=function(e,t){var r,n,s,i;for(i=[],n=0,s=e.length;no;0<=o?c++:c--)r.push(new u(p(e,c),t));return r}(),function(e){var t,r,n,s;for(s=[],r=0,n=f.length;rn;n++){var i=r.charCodeAt(n);if(128>i)e.setUint8(t++,i>>>0&127|0);else if(2048>i)e.setUint8(t++,i>>>6&31|192),e.setUint8(t++,i>>>0&63|128);else if(65536>i)e.setUint8(t++,i>>>12&15|224),e.setUint8(t++,i>>>6&63|128),e.setUint8(t++,i>>>0&63|128);else{if(!(1114112>i))throw new Error("bad codepoint "+i);e.setUint8(t++,i>>>18&7|240),e.setUint8(t++,i>>>12&63|128),e.setUint8(t++,i>>>6&63|128),e.setUint8(t++,i>>>0&63|128)}}}function r(e){for(var t=0,r=0,n=e.length;n>r;r++){var s=e.charCodeAt(r);if(128>s)t+=1;else if(2048>s)t+=2;else if(65536>s)t+=3;else{if(!(1114112>s))throw new Error("bad codepoint "+s);t+=4}}return t}function n(e,s,i){var o=typeof e;if("string"===o){if(32>(a=r(e)))return s.setUint8(i,160|a),t(s,i+1,e),1+a;if(256>a)return s.setUint8(i,217),s.setUint8(i+1,a),t(s,i+2,e),2+a;if(65536>a)return s.setUint8(i,218),s.setUint16(i+1,a),t(s,i+3,e),3+a;if(4294967296>a)return s.setUint8(i,219),s.setUint32(i+1,a),t(s,i+5,e),5+a}if(e instanceof Uint8Array){var a=e.byteLength,l=new Uint8Array(s.buffer);if(256>a)return s.setUint8(i,196),s.setUint8(i+1,a),l.set(e,i+2),2+a;if(65536>a)return s.setUint8(i,197),s.setUint16(i+1,a),l.set(e,i+3),3+a;if(4294967296>a)return s.setUint8(i,198),s.setUint32(i+1,a),l.set(e,i+5),5+a}if("number"===o){if(!isFinite(e))throw new Error("Number not finite: "+e);if(Math.floor(e)!==e)return s.setUint8(i,203),s.setFloat64(i+1,e),9;if(e>=0){if(128>e)return s.setUint8(i,e),1;if(256>e)return s.setUint8(i,204),s.setUint8(i+1,e),2;if(65536>e)return s.setUint8(i,205),s.setUint16(i+1,e),3;if(4294967296>e)return s.setUint8(i,206),s.setUint32(i+1,e),5;throw new Error("Number too big 0x"+e.toString(16))}if(e>=-32)return s.setInt8(i,e),1;if(e>=-128)return s.setUint8(i,208),s.setInt8(i+1,e),2;if(e>=-32768)return s.setUint8(i,209),s.setInt16(i+1,e),3;if(e>=-2147483648)return s.setUint8(i,210),s.setInt32(i+1,e),5;throw new Error("Number too small -0x"+(-e).toString(16).substr(1))}if(null===e)return s.setUint8(i,192),1;if("boolean"===o)return s.setUint8(i,e?195:194),1;if("object"===o){var c=0,h=Array.isArray(e);if(h)a=e.length;else{var u=Object.keys(e);a=u.length}if(16>a?(s.setUint8(i,a|(h?144:128)),c=1):65536>a?(s.setUint8(i,h?220:222),s.setUint16(i+1,a),c=3):4294967296>a&&(s.setUint8(i,h?221:223),s.setUint32(i+1,a),c=5),h)for(var d=0;a>d;d++)c+=n(e[d],s,i+c);else for(d=0;a>d;d++){var p=u[d];c+=n(p,s,i+c),c+=n(e[p],s,i+c)}return c}throw new Error("Unknown type "+o)}function s(e){var t=typeof e;if("string"===t){if(32>(n=r(e)))return 1+n;if(256>n)return 2+n;if(65536>n)return 3+n;if(4294967296>n)return 5+n}if(e instanceof Uint8Array){if(256>(n=e.byteLength))return 2+n;if(65536>n)return 3+n;if(4294967296>n)return 5+n}if("number"===t){if(Math.floor(e)!==e)return 9;if(e>=0){if(128>e)return 1;if(256>e)return 2;if(65536>e)return 3;if(4294967296>e)return 5;throw new Error("Number too big 0x"+e.toString(16))}if(e>=-32)return 1;if(e>=-128)return 2;if(e>=-32768)return 3;if(e>=-2147483648)return 5;throw new Error("Number too small -0x"+e.toString(16).substr(1))}if("boolean"===t||null===e)return 1;if("object"===t){var n,i=0;if(Array.isArray(e)){n=e.length;for(var o=0;n>o;o++)i+=s(e[o])}else{var a=Object.keys(e);for(n=a.length,o=0;n>o;o++){var l=a[o];i+=s(l)+s(e[l])}}if(16>n)return 1+i;if(65536>n)return 3+i;if(4294967296>n)return 5+i;throw new Error("Array or object too long 0x"+n.toString(16))}throw new Error("Unknown type "+t)}function i(e){var t=new ArrayBuffer(s(e));return n(e,new DataView(t),0),new Uint8Array(t)}function o(e,t,r){return t?new e(t.buffer,t.byteOffset,t.byteLength/(r||1)):void 0}function a(e){return o(DataView,e)}function l(e){return o(Uint8Array,e)}function c(e){return o(Int8Array,e)}function h(e){return o(Int32Array,e,4)}function u(e){return o(Float32Array,e,4)}function d(e,t){var r=e.length/2;t||(t=new Int16Array(r));for(var n=0,s=0;r>n;++n,s+=2)t[n]=e[s]<<8^e[s+1]<<0;return t}function p(e,t){var r=e.length;t||(t=new Uint8Array(2*r));for(var n=a(t),s=0;r>s;++s)n.setInt16(2*s,e[s]);return l(t)}function m(e,t){var r=e.length/4;t||(t=new Int32Array(r));for(var n=0,s=0;r>n;++n,s+=4)t[n]=e[s]<<24^e[s+1]<<16^e[s+2]<<8^e[s+3]<<0;return t}function f(e,t){var r=e.length;t||(t=new Uint8Array(4*r));for(var n=a(t),s=0;r>s;++s)n.setInt32(4*s,e[s]);return l(t)}function _(e,t){var r=e.length;t||(t=new Float32Array(r/4));for(var n=a(t),s=a(e),i=0,o=0,l=r/4;l>i;++i,o+=4)n.setFloat32(o,s.getFloat32(o),!0);return t}function g(e,t,r){var n=e.length,s=1/t;r||(r=new Float32Array(n));for(var i=0;n>i;++i)r[i]=e[i]*s;return r}function y(e,t,r){var n=e.length;r||(r=new Int32Array(n));for(var s=0;n>s;++s)r[s]=Math.round(e[s]*t);return r}function x(e,t){var r,n;if(!t){var s=0;for(r=0,n=e.length;n>r;r+=2)s+=e[r+1];t=new e.constructor(s)}var i=0;for(r=0,n=e.length;n>r;r+=2)for(var o=e[r],a=e[r+1],l=0;a>l;++l)t[i]=o,++i;return t}function b(e){if(0===e.length)return new Int32Array;var t,r,n=2;for(t=1,r=e.length;r>t;++t)e[t-1]!==e[t]&&(n+=2);var s=new Int32Array(n),i=0,o=1;for(t=1,r=e.length;r>t;++t)e[t-1]!==e[t]?(s[i]=e[t-1],s[i+1]=o,o=1,i+=2):++o;return s[i]=e[e.length-1],s[i+1]=o,s}function w(e,t){var r=e.length;t||(t=new e.constructor(r)),r&&(t[0]=e[0]);for(var n=1;r>n;++n)t[n]=e[n]+t[n-1];return t}function S(e,t){var r=e.length;t||(t=new e.constructor(r)),t[0]=e[0];for(var n=1;r>n;++n)t[n]=e[n]-e[n-1];return t}function v(e,t){var r,n,s=e instanceof Int8Array?127:32767,i=-s-1,o=e.length;if(!t){var a=0;for(r=0;o>r;++r)e[r]i&&++a;t=new Int32Array(a)}for(r=0,n=0;o>r;){for(var l=0;e[r]===s||e[r]===i;)l+=e[r],++r;l+=e[r],++r,t[n]=l,++n}return t}function C(e,t){var r,n=t?127:32767,s=-n-1,i=e.length,o=0;for(r=0;i>r;++r)0===(c=e[r])?++o:o+=c===n||c===s?2:c>0?Math.ceil(c/n):Math.ceil(c/s);var a=t?new Int8Array(o):new Int16Array(o),l=0;for(r=0;i>r;++r){var c;if((c=e[r])>=0)for(;c>=n;)a[l]=n,++l,c-=n;else for(;s>=c;)a[l]=s,++l,c-=s;a[l]=c,++l}return a}function A(e,t){return w(x(e),t)}function E(e){return b(S(e))}function T(e,t,r){return g(x(e,h(r)),t,r)}function R(e,t){return b(y(e,t))}function M(e,t,r){return g(w(e,h(r)),t,r)}function P(e,t,r){return S(y(e,t),r)}function N(e,t,r){return g(v(e,h(r)),t,r)}function L(e,t,r){var n=v(e,h(r));return M(n,t,u(n))}function I(e,t,r){return C(P(e,t),r)}function O(e){var t=a(e),r=t.getInt32(0),n=t.getInt32(4),s=e.subarray(8,12);return[r,e=e.subarray(12),n,s]}function V(e,t,r,n){var s=new ArrayBuffer(12+n.byteLength),i=new Uint8Array(s),o=new DataView(s);return o.setInt32(0,e),o.setInt32(4,t),r&&i.set(r,8),i.set(n,12),i}function D(e){return V(2,e.length,void 0,l(e))}function k(e){return V(4,e.length,void 0,f(e))}function z(e,t){return V(5,e.length/t,f([t]),l(e))}function F(e){return V(6,e.length,void 0,f(b(e)))}function B(e){return V(8,e.length,void 0,f(E(e)))}function U(e,t){return V(9,e.length,f([t]),f(R(e,t)))}function G(e,t){return V(10,e.length,f([t]),p(I(e,t)))}function j(e){var t={};return ee.forEach((function(r){void 0!==e[r]&&(t[r]=e[r])})),e.bondAtomList&&(t.bondAtomList=k(e.bondAtomList)),e.bondOrderList&&(t.bondOrderList=D(e.bondOrderList)),t.xCoordList=G(e.xCoordList,1e3),t.yCoordList=G(e.yCoordList,1e3),t.zCoordList=G(e.zCoordList,1e3),e.bFactorList&&(t.bFactorList=G(e.bFactorList,100)),e.atomIdList&&(t.atomIdList=B(e.atomIdList)),e.altLocList&&(t.altLocList=F(e.altLocList)),e.occupancyList&&(t.occupancyList=U(e.occupancyList,100)),t.groupIdList=B(e.groupIdList),t.groupTypeList=k(e.groupTypeList),e.secStructList&&(t.secStructList=D(e.secStructList,1)),e.insCodeList&&(t.insCodeList=F(e.insCodeList)),e.sequenceIndexList&&(t.sequenceIndexList=B(e.sequenceIndexList)),t.chainIdList=z(e.chainIdList,4),e.chainNameList&&(t.chainNameList=z(e.chainNameList,4)),t}function H(e){function t(e){for(var t={},r=0;e>r;r++)t[i()]=i();return t}function r(t){var r=e.subarray(o,o+t);return o+=t,r}function n(t){var r=e.subarray(o,o+t);o+=t;var n=65535;if(t>n){for(var s=[],i=0;ir;r++)t[r]=i();return t}function i(){var i,l,c=e[o];if(0==(128&c))return o++,c;if(128==(240&c))return o++,t(l=15&c);if(144==(240&c))return o++,s(l=15&c);if(160==(224&c))return o++,n(l=31&c);if(224==(224&c))return i=a.getInt8(o),o++,i;switch(c){case 192:return o++,null;case 194:return o++,!1;case 195:return o++,!0;case 196:return l=a.getUint8(o+1),o+=2,r(l);case 197:return l=a.getUint16(o+1),o+=3,r(l);case 198:return l=a.getUint32(o+1),o+=5,r(l);case 202:return i=a.getFloat32(o+1),o+=5,i;case 203:return i=a.getFloat64(o+1),o+=9,i;case 204:return i=e[o+1],o+=2,i;case 205:return i=a.getUint16(o+1),o+=3,i;case 206:return i=a.getUint32(o+1),o+=5,i;case 208:return i=a.getInt8(o+1),o+=2,i;case 209:return i=a.getInt16(o+1),o+=3,i;case 210:return i=a.getInt32(o+1),o+=5,i;case 217:return l=a.getUint8(o+1),o+=2,n(l);case 218:return l=a.getUint16(o+1),o+=3,n(l);case 219:return l=a.getUint32(o+1),o+=5,n(l);case 220:return l=a.getUint16(o+1),o+=3,s(l);case 221:return l=a.getUint32(o+1),o+=5,s(l);case 222:return l=a.getUint16(o+1),o+=3,t(l);case 223:return l=a.getUint32(o+1),o+=5,t(l)}throw new Error("Unknown type 0x"+c.toString(16))}var o=0,a=new DataView(e.buffer);return i()}function $(e,t,r,n){switch(e){case 1:return _(t);case 2:return c(t);case 3:return d(t);case 4:return m(t);case 5:return l(t);case 6:return x(m(t),new Uint8Array(r));case 7:return x(m(t));case 8:return A(m(t));case 9:return T(m(t),m(n)[0]);case 10:return L(d(t),m(n)[0]);case 11:return g(d(t),m(n)[0]);case 12:return N(d(t),m(n)[0]);case 13:return N(c(t),m(n)[0]);case 14:return v(d(t));case 15:return v(c(t))}}function W(e,t){var r=(t=t||{}).ignoreFields,n={};return re.forEach((function(t){var s=!!r&&-1!==r.indexOf(t),i=e[t];s||void 0===i||(i instanceof Uint8Array?n[t]=$.apply(null,O(i)):n[t]=i)})),n}function Y(e){return String.fromCharCode.apply(null,e).replace(/\0/g,"")}function X(e,t,r){var n,s,i,o,a,l,c=(r=r||{}).firstModelOnly,h=t.onModel,u=t.onChain,d=t.onGroup,p=t.onAtom,m=t.onBond,f=0,_=0,g=0,y=0,x=0,b=-1,w=e.chainNameList,S=e.secStructList,v=e.insCodeList,C=e.sequenceIndexList,A=e.atomIdList,E=e.bFactorList,T=e.altLocList,R=e.occupancyList,M=e.bondAtomList,P=e.bondOrderList;for(n=0,s=e.chainsPerModel.length;s>n&&!(c&&f>0);++n){var N=e.chainsPerModel[f];for(h&&h({chainCount:N,modelIndex:f}),i=0;N>i;++i){var L=e.groupsPerChain[_];if(u){var I=Y(e.chainIdList.subarray(4*_,4*_+4)),O=null;w&&(O=Y(w.subarray(4*_,4*_+4))),u({groupCount:L,chainIndex:_,modelIndex:f,chainId:I,chainName:O})}for(o=0;L>o;++o){var V=e.groupList[e.groupTypeList[g]],D=V.atomNameList.length;if(d){var k=null;S&&(k=S[g]);var z=null;e.insCodeList&&(z=String.fromCharCode(v[g]));var F=null;C&&(F=C[g]),d({atomCount:D,groupIndex:g,chainIndex:_,modelIndex:f,groupId:e.groupIdList[g],groupType:e.groupTypeList[g],groupName:V.groupName,singleLetterCode:V.singleLetterCode,chemCompType:V.chemCompType,secStruct:k,insCode:z,sequenceIndex:F})}for(a=0;D>a;++a){if(p){var B=null;A&&(B=A[y]);var U=null;E&&(U=E[y]);var G=null;T&&(G=String.fromCharCode(T[y]));var j=null;R&&(j=R[y]),p({atomIndex:y,groupIndex:g,chainIndex:_,modelIndex:f,atomId:B,element:V.elementList[a],atomName:V.atomNameList[a],formalCharge:V.formalChargeList[a],xCoord:e.xCoordList[y],yCoord:e.yCoordList[y],zCoord:e.zCoordList[y],bFactor:U,altLoc:G,occupancy:j})}y+=1}if(m){var H=V.bondAtomList;for(a=0,l=V.bondOrderList.length;l>a;++a)m({atomIndex1:y-D+H[2*a],atomIndex2:y-D+H[2*a+1],bondOrder:V.bondOrderList[a]})}g+=1}_+=1}if(x=b+1,b=y-1,m&&M)for(a=0,l=M.length;l>a;a+=2){var $=M[a],W=M[a+1];($>=x&&b>=$||W>=x&&b>=W)&&m({atomIndex1:$,atomIndex2:W,bondOrder:P?P[a/2]:null})}f+=1}}function q(e){return i(j(e))}function Z(e,t){return e instanceof ArrayBuffer&&(e=new Uint8Array(e)),W(e instanceof Uint8Array?H(e):e,t)}function K(e,t,r,n){function s(){try{var e=Z(i.response);r(e)}catch(e){n(e)}}var i=new XMLHttpRequest;i.addEventListener("load",s,!0),i.addEventListener("error",n,!0),i.responseType="arraybuffer",i.open("GET",t+e.toUpperCase()),i.send()}function Q(e,t,r){K(e,ie,t,r)}function J(e,t,r){K(e,oe,t,r)}var ee=["mmtfVersion","mmtfProducer","unitCell","spaceGroup","structureId","title","depositionDate","releaseDate","experimentalMethods","resolution","rFree","rWork","bioAssemblyList","ncsOperatorList","entityList","groupList","numBonds","numAtoms","numGroups","numChains","numModels","groupsPerChain","chainsPerModel"],te=["xCoordList","yCoordList","zCoordList","groupIdList","groupTypeList","chainIdList","bFactorList","atomIdList","altLocList","occupancyList","secStructList","insCodeList","sequenceIndexList","chainNameList","bondAtomList","bondOrderList"],re=ee.concat(te),ne="v1.1.0dev",se="//mmtf.rcsb.org/v1.0/",ie=se+"full/",oe=se+"reduced/";e.encode=q,e.decode=Z,e.traverse=X,e.fetch=Q,e.fetchReduced=J,e.version=ne,e.fetchUrl=ie,e.fetchReducedUrl=oe,e.encodeMsgpack=i,e.encodeMmtf=j,e.decodeMsgpack=H,e.decodeMmtf=W})?r.apply(t,n):r)||(e.exports=s)},535:t=>{"use strict";t.exports=e},698:e=>{"use strict";e.exports=t}},n={};function s(e){var t=n[e];if(void 0!==t)return t.exports;var i=n[e]={exports:{}};return r[e].call(i.exports,i,i.exports,s),i.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var i={};return(()=>{"use strict";s.d(i,{default:()=>Mu});var e=s(535),t=s.n(e),r=s(698),n=function(){return n=Object.assign||function(e){for(var t,r=1,n=arguments.length;rthis._prevTime+1e3&&(this._text.textContent=this.fps.toPrecision(2),this._prevTime=e),e}update(){this._startTime=this.end()}show(e){void 0===e&&(e=!0),this.domElement.style.display=e?"block":"none"}};function f(e,t){return!e||e===t}function _(){this._handlers={}}_.prototype.addEventListener=function(e,r,n){let s=this._handlers[e];s||(this._handlers[e]=[],s=this._handlers[e]);const i=[r,n];void 0===t().find(s,(function(e){return e[0]===i[0]&&e[1]===i[1]}))&&s.push(i)},_.prototype.removeEventListener=function(e,r,n){const s=this;t().forEach(s._handlers,((i,o)=>{t().remove(i,(t=>f(e,o)&&f(r,t[0])&&f(n,t[1]||s)))})),this._handlers=t().omitBy(s._handlers,(e=>0===e.length))},_.prototype.dispatchEvent=function(e){const r=this;t().forEach(this._handlers[e.type],(t=>{const n=t[1]||r;t[0].apply(n,[e])}))};const g=_,y={debug:0,info:1,report:2,warn:3,error:4};function x(){g.call(this),this.console=!1,this._priority=y.warn}function b(e){if(!t().isNumber(e))throw new Error("Wrong log level specified!");return e}x.prototype=Object.create(g.prototype),x.prototype.constructor=x,x.prototype.instantiate=function(){return new x},Object.defineProperty(x.prototype,"level",{get(){return t().findKey(y,(e=>e===this._priority))},set(e){this._priority=b(y[e])}}),x.prototype.levels=function(){return Object.keys(y)},x.prototype.message=function(e,t){const r=b(y[e]);this._message(r,t)},x.prototype.debug=function(e){this._message(y.debug,e)},x.prototype.info=function(e){this._message(y.info,e)},x.prototype.report=function(e){this._message(y.report,e)},x.prototype.warn=function(e){this._message(y.warn,e)},x.prototype.error=function(e){this._message(y.error,e)},x.prototype._message=function(e,r){if(et===e));if(r=String(r),this.console){}this.dispatchEvent({type:"message",level:n,message:r})};const w=new x,S={DEFAULT:0,SAFARI:1};function v(e){return decodeURIComponent(e.replace(/\+/g," "))}function C(e){const t=(e=e||window.location.search).substring(e.indexOf("?")+1),r=/([^&=]+)=?([^&]*)/g,n=[];let s;for(;null!==(s=r.exec(t));)n.push([v(s[1]),v(s[2])]);return n}function A(e){let t=!1;this.enable=function(e){t=e};let r=0;const n=Object.keys(e);function s(e,n){return function(){const s=A.spaces.substr(0,2*r);t&&w.debug(`${s+n} {`),r++;for(var i=arguments.length,o=new Array(i),a=0;a=3&&"base64"===t[r-2]?new Blob([R(t[r-1])]):null}const L=/^[a-zA-Z0-9_]*$/,I=['"',"",'"'];const O={browserType:S,encodeQueryComponent:function(e,t){return encodeURIComponent(e).replace(t,(e=>String.fromCharCode(parseInt(e.substr(1),16)))).replace(/%20/g,"+")},decodeQueryComponent:v,getUrlParameters:C,getUrlParametersAsDict:function(e){const t={},r=C(e);for(let e=0;e0&&(i=Object.create(i))}return i},hexColor:function(e){return`#${`0000000${e.toString(16)}`.substr(-6)}`},DebugTracer:A,OutOfMemoryError:E,allocateTyped:function(e,t){let r=null;try{r=new e(t)}catch(e){throw e instanceof RangeError?new E(e.message):e}return r},bytesFromBase64:R,bytesToBase64:T,arrayFromBase64:function(e,t){return Array.prototype.slice.call(new t(R(e)))},arrayToBase64:function(e,t){return T(new t(e).buffer)},compareOptionsWithDefaults:function(e,t){const r=[];if(t&&e){const n=Object.keys(e);for(let s=0;s0)return`!${r.join()}`}return""},objectsDiff:function e(r,n){const s={};return t().forIn(r,((r,i)=>{const o=n[i];if(M(r)&&M(o)){const n=e(r,o);t().isEmpty(n)||(s[i]=n)}else t().isEqual(r,o)||(s[i]=r)})),s},forInRecursive:function(e,r){!function e(n,s){t().forIn(n,((t,n)=>{const i=s+(s.length>0?".":"");t instanceof Object?e(t,i+n):void 0!==t&&r(t,i+n)}))}(e,"")},enquoteString:function(e){return t().isString(e)?`"${e.replace(/"/g,'\\"')}"`:e},unquoteString:function(e){if(!t().isString(e))return e;if('"'===e[0]&&'"'===e[e.length-1])return(e=e.slice(1,e.length-1)).replace(/\\"/g,'"');if("'"===e[0]&&"'"===e[e.length-1])return(e=e.slice(1,e.length-1)).replace(/\\'/g,"'");throw new SyntaxError("Incorrect string format, can't unqute it")},getBrowser:function(){return navigator.vendor&&navigator.vendor.indexOf("Apple")>-1&&navigator.userAgent&&-1===navigator.userAgent.indexOf("CriOS")&&-1===navigator.userAgent.indexOf("FxiOS")?S.SAFARI:S.DEFAULT},shotOpen:function(e){"undefined"!=typeof window&&window.open().document.write(``)},shotDownload:function(e,t){if(e&&"data:"===e.substr(0,5))if(t||(t=["screenshot-",+new Date,".png"].join("")),"undefined"!=typeof window&&window.navigator&&window.navigator.msSaveBlob)window.navigator.msSaveBlob(N(e),t);else if("undefined"!=typeof document){const r=document.createElement("a");r.download=t,r.innerHTML="download",r.href=window.URL.createObjectURL(N(e)),document.body.appendChild(r),r.click(),document.body.removeChild(r)}},copySubArrays:function(e,t,r,n){for(let s=0,i=r.length;se+t.length),0),r=new e[0].constructor(t);for(let t=0,n=0;t{this._notifyChange(t,e)}))},changed(){if(!this.old)return[];const{old:e,now:r}=this;return t().filter(Object.keys(this._changed),(n=>t().get(e,n)!==t().get(r,n)))},applyDiffs(e){if(e.hasOwnProperty("VERSION")&&0!==e.VERSION)throw new Error("Settings version does not match!");delete e.VERSION,this.reset(),this.set(e)},getDiffs(e){const t=O.objectsDiff(this.now,D);return e&&(t.VERSION=0),t},setPluginOpts(e,r){D.plugins[e]=t().cloneDeep(r),this.now.plugins[e]=t().cloneDeep(r)}});const z=new k;let F=0;function B(e){return!(!e||"0"===e||t().isString(e)&&"false"===e.toLowerCase())}const U={string:String,number:Number,boolean:B},G="!",j=":",H=",",$="$;@/?";const W=O.generateRegExp($+":,");function Y(e){return O.encodeQueryComponent(e,W)}const X=O.generateRegExp($+" ");function q(e){return O.encodeQueryComponent(e,X)}function Z(e){let{reps:t}=e;if(!t){const{presets:r}=z.now;let n=e.preset||z.now.preset;t=r[n],t||(w.warn(`Unknown preset "${n}"`),[n]=Object.keys(r),t=r[n]),e.preset=n,e.reps=O.deriveDeep(t,!0)}}function K(e,t,r){Z(e);const n=e.reps[F];n.hasOwnProperty(t)&&(F=e.reps.length,e.reps[F]=O.deriveDeep(n,!0)),void 0!==r&&(e.reps[F][t]=r)}function Q(e,r,n){if(e){const s=e.indexOf(G),i=function(e,t){const r=e.indexOf(",");return r>=0?(t.push(e.substr(r+1).split(",")),e.substr(0,r)):e}(e.substr(0,s>=0?s:void 0),n);if(s>=0){const n=e.substr(s+1).split(H);if(e=i,r){const s=r[e],i=O.deriveDeep(s,!0);n.forEach((r=>{const n=r.split(j,2),o=decodeURIComponent(n[0]),a=decodeURIComponent(n[1]),l=U[typeof t().get(s,o)];l?t().set(i,o,l(a)):w.warn(`Unknown argument "${o}" for option "${e}"`)})),Object.keys(i).length>0&&(e=[e,i])}}else e=i}return e}const J={l:"load",load:String,t:"type",type:String,v:"view",view:String,u:"unit",unit:Number,menu:B,o:"object",object(e,t){const r=[];let n=Q(e,z.defaults.objects,r);Array.isArray(n)||(n=[n]),function(e,t,r){void 0===e._objects&&(e._objects=[]);const[n,s]=r,i={type:n,params:t};void 0!==s&&(i.opts=s),e._objects[e._objects.length]=i}(t,r[0],n)},p:"preset",preset(e,t){t.preset=e,t.reps=null,Z(t)},r:"rep",rep(e,t){Z(t),F=Number(e),F=F<=t.reps.length?F<0?0:F:t.reps.length,F===t.reps.length&&(t.reps[F]=F>0?O.deriveDeep(t.reps[F-1],!0):O.deriveDeep(z.defaults.presets.default[0],!0))},s:"select",select(e,t){K(t,"selector",e)},m:"mode",mode(e,t){K(t,"mode",Q(e,z.defaults.modes))},c:"color",color(e,t){K(t,"colorer",Q(e,z.defaults.colorers))},mt:"material",material(e,t){K(t,"material",Q(e,z.defaults.materials))},dup(e,t){Z(t);const{reps:r}=t,n=r[F];F=r.length,r[F]=O.deriveDeep(n,!0)},ar:"autoResolution"};function ee(e){F=0;const r={};for(let n=0,s=e.length;n{t[r++]=q(n)+j+q(e)})),t.join(H)}function re(e){return t().isArray(e)?e.length<2?e[0]:`${e[0]}${G}${te(e[1])}`:e}function ne(e){if(!e||!e.type)return;let r=e.type;return t().isArray(e.params)&&e.params.length>0&&(r+=`,${e.params.join(",")}`),e.opts&&(r+=G+te(e.opts)),r}function se(e){const t=[];let r=0;return O.forInRecursive(e,((e,n)=>{t[r++]=`${n}=${O.enquoteString(e)}`})),t.join(" ")}function ie(e){return t().isArray(e)?e.length<2?e[0]:`${e[0]} ${se(e[1])}`:e}function oe(e){if(!e||!e.type)return;let r=e.type;return t().isArray(e.params)&&e.params.length>0&&(r+=` ${e.params.map(O.enquoteString).join(" ")}`),e.opts&&(r+=` ${se(e.opts)}`),r}function ae(e,r){const n=[];let s=0;function i(e,t){null!=t&&(n[s++]=e+t)}return t().isEmpty(e)?null:(i("",r),i("s=",O.enquoteString(e.selector)),i("m=",ie(e.mode)),i("c=",ie(e.colorer)),i("mt=",ie(e.material)),n.join(" "))}const le={fromURL:function(e){return ee(O.getUrlParameters(e))},fromAttr:function(e){return ee(O.getUrlParameters(`?${e||""}`))},adapters:U,toURL:function(e){const r=[];let n=0;function s(e,t){null!=t&&(r[n++]=Y(e)+"="+Y(t))}s("l",e.load),s("u",e.unit),s("p",e.preset),function(e){if(e)for(let r=0,n=e.length;r{"preset"!==t&&s(t,e)}));let i="";if("undefined"!=typeof window){const{location:e}=window;i=`${e.protocol}//${e.host}${e.pathname}`}return r.length>0&&(i+=`?${r.join("&")}`),i},toScript:function(e){const t=[];let r=0;function n(e,n,s){if(null!=n){const i="string"==typeof n&&s?'"':"";t[r++]=`${e} ${i}${n}${i}`.trim()}}return n("set","autobuild false"),n("load",e.load,!0),n("unit",e.unit),n("preset",e.preset),function(e){if(e)for(let t=0,r=e.length;t{"preset"!==t&&n(`set ${t}`,e,!0)})),n("view",e.view),n("set","autobuild true"),t.join("\n")}};class ce{constructor(e,t,r,n,s,i,o,a,l,c,h){this.index=-1,this.residue=e,this.name=t,this.element=r,this.position=n,this.role=s,this.mask=1,this.het=i,this.serial=o,this.location=(a||" ").charCodeAt(0),this.occupancy=l||1,this.temperature=c,this.charge=h,this.hydrogenCount=-1,this.radicalCount=0,this.valence=-1,this.bonds=[],this.flags=0,"H"===r.name?this.flags|=ce.Flags.HYDROGEN:"C"===r.name&&(this.flags|=ce.Flags.CARBON)}isHet(){return this.het}isHydrogen(){return 1===this.element.number}getVisualName(){const{name:e}=this;return e.length>0?e:this.element.name.trim()}forEachBond(e){const{bonds:t}=this;for(let r=0,n=t.length;r({N:ue.Constants.U1,CA:ue.Constants.Lead,C:ue.Constants.U2,O:ue.Constants.Wing,SG:ue.Constants.U18}))();static ByAtomicNumber=(()=>[null,new ue(1,"H","Hydrogen",1.008,1.2,.23,[1]),new ue(2,"HE","Helium",4.003,1.4,.93,[0]),new ue(3,"LI","Lithium",6.941,1.82,.68,[1]),new ue(4,"BE","Beryllium",9.012,1.7,.35,[2]),new ue(5,"B","Boron",10.81,2.08,.83,[3]),new ue(6,"C","Carbon",12.011,1.95,.68,[4]),new ue(7,"N","Nitrogen",14.007,1.85,.68,[3,5]),new ue(8,"O","Oxygen",15.999,1.7,.68,[2,4]),new ue(9,"F","Fluorine",18.998,1.73,.64,[1]),new ue(10,"NE","Neon",20.18,1.54,1.12,[0]),new ue(11,"NA","Sodium",22.99,2.27,.97,[1]),new ue(12,"MG","Magnesium",24.305,1.73,1.1,[2]),new ue(13,"AL","Aluminum",26.981,2.05,1.35,[3]),new ue(14,"SI","Silicon",28.086,2.1,1.2,[4]),new ue(15,"P","Phosphorus",30.974,2.08,.75,[3,5]),new ue(16,"S","Sulfur",32.07,2,1.02,[2,4,6]),new ue(17,"CL","Chlorine",35.453,1.97,.99,[1,3,5,7]),new ue(18,"AR","Argon",39.948,1.88,1.57,[0]),new ue(19,"K","Potassium",39.1,2.75,1.33,[1]),new ue(20,"CA","Calcium",40.08,1.973,.99,[2]),new ue(21,"SC","Scandium",44.956,1.7,1.44,[0]),new ue(22,"TI","Titanium",47.88,1.7,1.47,[0]),new ue(23,"V","Vanadium",50.941,1.7,1.33,[0]),new ue(24,"CR","Chromium",52,1.7,1.35,[0]),new ue(25,"MN","Manganese",54.938,1.7,1.35,[0]),new ue(26,"FE","Iron",55.847,1.7,1.34,[0]),new ue(27,"CO","Cobalt",58.93,1.7,1.33,[0]),new ue(28,"NI","Nickel",58.69,1.63,1.5,[0]),new ue(29,"CU","Copper",63.55,1.4,1.52,[0]),new ue(30,"ZN","Zinc",65.39,1.39,1.45,[0]),new ue(31,"GA","Gallium",69.72,1.87,1.22,[3]),new ue(32,"GE","Germanium",72.61,1.7,1.17,[4]),new ue(33,"AS","Arsenic",74.92,1.85,1.21,[3,5]),new ue(34,"SE","Selenium",78.96,1.9,1.22,[2,4,6]),new ue(35,"BR","Bromine",79.9,2.1,1.21,[1,3,5,7]),new ue(36,"KR","Krypton",83.8,2.02,1.91,[0]),new ue(37,"RB","Rubidium",85.47,1.7,1.47,[1]),new ue(38,"SR","Strontium",87.62,1.7,1.12,[2]),new ue(39,"Y","Yttrium",88.91,1.7,1.78,[0]),new ue(40,"ZR","Zirconium",91.22,1.7,1.56,[0]),new ue(41,"NB","Niobium",92.91,1.7,1.48,[0]),new ue(42,"MO","Molybdenum",95.94,1.7,1.47,[0]),new ue(43,"TC","Technetium",98.91,1.7,1.35,[0]),new ue(44,"RU","Ruthenium",101.07,1.7,1.4,[0]),new ue(45,"RH","Rhodium",102.91,1.7,1.45,[0]),new ue(46,"PD","Palladium",106.42,1.63,1.5,[0]),new ue(47,"AG","Silver",107.87,1.72,1.59,[0]),new ue(48,"CD","Cadmium",112.41,1.58,1.69,[0]),new ue(49,"IN","Indium",114.82,1.93,1.63,[3]),new ue(50,"SN","Tin",118.71,2.17,1.46,[2,4]),new ue(51,"SB","Antimony",121.75,2.2,1.46,[3,5]),new ue(52,"TE","Tellurium",127.6,2.06,1.47,[2,4,6]),new ue(53,"I","Iodine",126.91,2.15,1.4,[1,3,5,7]),new ue(54,"XE","Xenon",131.29,2.16,1.98,[0]),new ue(55,"CS","Cesium",132.91,1.7,1.67,[1]),new ue(56,"BA","Barium",137.33,1.7,1.34,[2]),new ue(57,"LA","Lanthanum",138.91,1.7,1.87,[0]),new ue(58,"CE","Cerium",140.12,1.7,1.83,[0]),new ue(59,"PR","Praseodymium",140.91,1.7,1.82,[0]),new ue(60,"ND","Neodymium",144.24,1.7,1.81,[0]),new ue(61,"PM","Promethium",144.9,1.7,1.8,[0]),new ue(62,"SM","Samarium",150.36,1.7,1.8,[0]),new ue(63,"EU","Europium",151.96,1.7,1.99,[0]),new ue(64,"GD","Gadolinium",157.25,1.7,1.79,[0]),new ue(65,"TB","Terbium",158.93,1.7,1.76,[0]),new ue(66,"DY","Dysprosium",162.5,1.7,1.75,[0]),new ue(67,"HO","Holmium",164.93,1.7,1.74,[0]),new ue(68,"ER","Erbium",167.26,1.7,1.73,[0]),new ue(69,"TM","Thulium",168.93,1.7,1.72,[0]),new ue(70,"YB","Ytterbium",173.04,1.7,1.94,[0]),new ue(71,"LU","Lutetium",174.97,1.7,1.72,[0]),new ue(72,"HF","Hafnium",178.49,1.7,1.57,[0]),new ue(73,"TA","Tantalum",180.95,1.7,1.43,[0]),new ue(74,"W","Tungsten",183.85,1.7,1.37,[0]),new ue(75,"RE","Rhenium",186.21,1.7,1.35,[0]),new ue(76,"OS","Osmium",190.2,1.7,1.37,[0]),new ue(77,"IR","Iridium",192.22,1.7,1.32,[0]),new ue(78,"PT","Platinum",195.08,1.72,1.5,[0]),new ue(79,"AU","Gold",196.97,1.66,1.5,[0]),new ue(80,"HG","Mercury",200.59,1.55,1.7,[0]),new ue(81,"TL","Thallium",204.38,1.96,1.55,[1,3]),new ue(82,"PB","Lead",207.2,2.02,1.54,[2,4]),new ue(83,"BI","Bismuth",208.98,1.7,1.54,[3,5]),new ue(84,"PO","Polonium",210,1.7,1.68,[2,4,6]),new ue(85,"AT","Astatine",210,1.7,1.7,[1,3,5,7]),new ue(86,"RN","Radon",222,1.7,2.4,[0]),new ue(87,"FR","Francium",223,1.7,2,[1]),new ue(88,"RA","Radium",226.03,1.7,1.9,[2]),new ue(89,"AC","Actinium",227.03,1.7,1.88,[0]),new ue(90,"TH","Thorium",232.04,1.7,1.79,[0]),new ue(91,"PA","Protactinium",231.04,1.7,1.61,[0]),new ue(92,"U","Uranium",238.03,1.86,1.58,[0]),new ue(93,"NP","Neptunium",237.05,1.7,1.55,[0]),new ue(94,"PU","Plutonium",239.1,1.7,1.53,[0]),new ue(95,"AM","Americium",243.1,1.7,1.51,[0]),new ue(96,"CM","Curium",247.1,1.7,1.5,[0]),new ue(97,"BK","Berkelium",247.1,1.7,1.5,[0]),new ue(98,"CF","Californium",252.1,1.7,1.5,[0]),new ue(99,"ES","Einsteinium",252.1,1.7,1.5,[0]),new ue(100,"FM","Fermium",257.1,1.7,1.5,[0]),new ue(101,"MD","Mendelevium",256.1,1.7,1.5,[0]),new ue(102,"NO","Nobelium",259.1,1.7,1.5,[0]),new ue(103,"LR","Lawrencium",260.1,1.7,1.5,[0]),new ue(104,"RF","Rutherfordium",261,1.7,1.6,[0]),new ue(105,"DB","Dubnium",262,1.7,1.6,[0]),new ue(106,"SG","Seaborgium",263,1.7,1.6,[0]),new ue(107,"BH","Bohrium",262,1.7,1.6,[0]),new ue(108,"HS","Hassium",265,1.7,1.6,[0]),new ue(109,"MT","Meitnerium",268,1.7,1.6,[0])])();static ByName=(()=>({D:new ue(1,"D","Deuterium",2.014,1.2,.23,[1]),T:new ue(1,"T","Tritium",3.016,1.2,.23,[1])}))()}!function(){const e=ue.ByAtomicNumber,t=ue.ByName;for(let r=0,n=e.length;rt)throw new Error("In a bond atom indices must be in increasing order");this._order=r,this._type=n}getLeft(){return this._left}getRight(){return this._right}getOrder(){return this._order}calcLength(){return this._left.position.distanceTo(this._right.position)}_forEachNeighbour(e,t){const{bonds:r}=e;for(let n=0,s=r.length;n{t!==r&&e(t)})),this._forEachNeighbour(r,(r=>{r!==t&&e(r)}))}forEachLevelTwo(e){const t=this._left,r=this._right,n=this;n._forEachNeighbour(t,(s=>{s!==r&&n._forEachNeighbour(s,(r=>{r!==t&&e(r)}))})),n._forEachNeighbour(r,(s=>{s!==t&&n._forEachNeighbour(s,(t=>{t!==r&&e(t)}))}))}_fixDir(e,t,r){let n=0,s=0;const i=e.clone();function o(o){i.copy(r(o)),i.sub(e);t.dot(i)>0?++n:++s}function a(e){"C"===e.element.name&&o(e)}const l=[[this.forEachLevelOne,a],[this.forEachLevelOne,o],[this.forEachLevelTwo,a],[this.forEachLevelTwo,o]];for(let e=0;en)return t.multiplyScalar(-1);if(sr.bonds.length&&(n=r,s=t);let i=n,o=0;const{bonds:a}=s;for(let e=0,t=a.length;eo&&t!==n&&(i=t,o=t.bonds.length)}const l=e(s),c=e(n).clone().sub(l),h=e(i).clone().sub(l);return h.crossVectors(c,h),h.lengthSq()<1e-4&&h.set(0,1,0),c.normalize(),h.normalize(),c.crossVectors(h,c),c.lengthSq()<1e-4&&c.set(0,1,0),c.normalize(),this._fixDir(l,c,e)}static BondType=(()=>pe)()}fe.prototype.BondType=pe;const _e=fe,ge=["C3'","C3*","P","H5T","H3T"],ye=["OP1","O1P"],xe=["OP2","O2P"],be=["C3'","C3*","C1","C1'","C1*","P"],we=[{types:["A","DA","G","DG"],atoms:["N1"]},{types:["C","DC"],atoms:["N3"]},{types:["T","DT","U","DU"],atoms:["O4"]}];const Se=class{constructor(e,t,r,n){this._chain=e,this._component=null,this._type=t,this._sequence=r,this._icode=n,this._mask=1,this._index=-1,this._atoms=[],this._secondary=null,this._firstAtom=null,this._leadAtom=null,this._wingAtom=null,this._lastAtom=null,this._controlPoint=null,this._midPoint=null,this._wingVector=null,this._cylinders=null,this._isValid=!0,this._het=!1,this._molecule=null,this.temperature=null,this.occupancy=null}getChain(){return this._chain}getMolecule(){return this._molecule}getType(){return this._type}getSequence(){return this._sequence}getSecondary(){return this._secondary}getICode(){return this._icode}addAtom(e,t,r,n,s,i,o,a,l,c){const h=new he(this,e,t,r,n,s,i,o,a,l,c);return this._chain.getComplex().addAtom(h),this._atoms.push(h),this._het=this._het||s,h}getAtomCount(){return this._atoms.length}forEachAtom(e){const t=this._atoms;for(let r=0,n=t.length;rr.name===e&&(t=r,!0))),t}_findFirstAtomInList(e){let t=null;for(let r=0;r1e-4){i.length()>1e-4&&Math.abs(n.angleTo(i))>Math.PI/2&&i.negate()}return i}_innerFinalize(e,t,n,s,i,o){const a=null===t,l=o(this._leadAtom),c=new r.Vector3(l.x,l.y,l.z);if(i)this._detectLeadWing(s,n,o);else{if(a)s._midPoint=o(this._firstAtom).clone();else{const r=t._controlPoint;s._midPoint=r.clone().lerp(c,.5),s._wingVector=this.calcWing(r,c,o(e._wingAtom),t._wingVector)}s._controlPoint=c}}_finalize2(e,t,r){this._innerFinalize(e,e,t,this,r,(e=>e.position))}isConnected(e){if(this._chain!==e._chain)return!1;if(this===e)return!0;let t=!1;return this.forEachAtom((r=>{const{bonds:n}=r;for(let r=0,s=n.length;r(null===e._leadAtom&&i.role===de.Constants.Lead&&(e._leadAtom=i),null===e._wingAtom&&i.role===de.Constants.Wing&&(e._wingAtom=i),i.temperature&&(r+=i.temperature,t++),i.occupancy&&(s+=i.occupancy,n++),null!==e._leadAtom&&null!==e._wingAtom))),t>0&&(this.temperature=r/t),n>0&&(this.occupancy=s/n),null!==this._leadAtom&&null!==this._wingAtom||(this._isValid=!1),null===this._leadAtom&&(this._leadAtom=this._firstAtom),null===this._wingAtom&&(this._wingAtom=this._lastAtom)}};class ve{constructor(e,t,r){this._name=e,this._fullName=t,this.letterCode=r,this.flags=0}getName(){return this._name}static StandardTypes=(()=>({ALA:new ve("ALA","Alanine","A"),ARG:new ve("ARG","Arginine","R"),ASN:new ve("ASN","Asparagine","N"),ASP:new ve("ASP","Aspartic Acid","D"),CYS:new ve("CYS","Cysteine","C"),GLN:new ve("GLN","Glutamine","Q"),GLU:new ve("GLU","Glutamic Acid","E"),GLY:new ve("GLY","Glycine","G"),HIS:new ve("HIS","Histidine","H"),ILE:new ve("ILE","Isoleucine","I"),LEU:new ve("LEU","Leucine","L"),LYS:new ve("LYS","Lysine","K"),MET:new ve("MET","Methionine","M"),PHE:new ve("PHE","Phenylalanine","F"),PRO:new ve("PRO","Proline","P"),PYL:new ve("PYL","Pyrrolysine","O"),SEC:new ve("SEC","Selenocysteine","U"),SER:new ve("SER","Serine","S"),THR:new ve("THR","Threonine","T"),TRP:new ve("TRP","Tryptophan","W"),TYR:new ve("TYR","Tyrosine","Y"),VAL:new ve("VAL","Valine","V"),A:new ve("A","Adenine","A"),C:new ve("C","Cytosine","C"),G:new ve("G","Guanine","G"),I:new ve("I","Inosine","I"),T:new ve("T","Thymine","T"),U:new ve("U","Uracil","U"),DA:new ve("DA","Adenine","A"),DC:new ve("DC","Cytosine","C"),DG:new ve("DG","Guanine","G"),DI:new ve("DI","Inosine","I"),DT:new ve("DT","Thymine","T"),DU:new ve("DU","Uracil","U"),"+A":new ve("+A","Adenine","A"),"+C":new ve("+C","Cytosine","C"),"+G":new ve("+G","Guanine","G"),"+I":new ve("+I","Inosine","I"),"+T":new ve("+T","Thymine","T"),"+U":new ve("+U","Uracil","U"),WAT:new ve("WAT","Water",""),H2O:new ve("H2O","Water",""),HOH:new ve("HOH","Water",""),DOD:new ve("DOD","Water",""),UNK:new ve("UNK","Unknown",""),UNL:new ve("UNL","Unknown Ligand","")}))();static Flags={PROTEIN:1,BASIC:2,ACIDIC:4,POLAR:8,NONPOLAR:16,AROMATIC:32,NUCLEIC:256,PURINE:512,PYRIMIDINE:1024,DNA:2048,RNA:4096,WATER:65536}}function Ce(e,t){for(let r=0,n=t.length;r1&&e[1]._wingVector){const t=e[1]._wingVector;e[0]._wingVector=new r.Vector3(t.x,t.y,t.z)}else e.length>0&&(e[0]._wingVector=new r.Vector3(1,0,0))}updateToFrame(e){const t=this._residues;let n=null,s=null;const i=e._residues,o=t.length;function a(t){return e.getAtomPos(t.index)}for(let e=0;e1?i[t[1]._index]._wingVector:new r.Vector3(1,0,0)}addResidue(e,t,r){let n=this._complex.getResidueType(e);null===n&&(n=this._complex.addResidueType(e));const s=new Se(this,n,t,r);return this._complex.addResidue(s),this._residues.push(s),n.flags&(Ee.Flags.NUCLEIC|Ee.Flags.PROTEIN)&&(this.maxSequencet&&(this.minSequence=t)),s}getResidueCount(){return this._residues.length}forEachResidue(e){const t=this._residues;for(let r=0,n=t.length;r=0&&t.splice(r,1),this}toString(){return this._values.join(",")}toJSON(){const e=this._values,t=[];for(let r=0,n=e.length;rthis.priority?`(${this.rhs})`:this.rhs;return`${this.keyword} ${e}`}toJSON(){return[this.name,this.rhs.toJSON()]}}Je.prototype.priority=1;class et extends We{constructor(e,t){super(),this.lhs=e||Qe,this.rhs=t||Qe}toString(){const e=this.lhs.priority&&this.lhs.priority>this.priority?`(${this.lhs})`:this.lhs,t=this.rhs.priority&&this.rhs.priority>this.priority?`(${this.rhs})`:this.rhs;return`${e} ${this.keyword} ${t}`}toJSON(){return[this.name,this.lhs.toJSON(),this.rhs.toJSON()]}}et.prototype.priority=1e3;const tt={};function rt(e,t){const r=e.toLowerCase();t.prototype.keyword=r,t.prototype.name=e;const n=function(){for(var e=arguments.length,r=new Array(e),n=0;n{delete ot.Context[e]}))},ot.keyword=function(e){return tt[e.toLowerCase()]||tt.none},ot.parse=function(e){const t={};try{t.selector=Ue.parser.parse(e)}catch(e){t.selector=nt,t.error=e.message}return t},Ue.parser.yy=ot,Ue.parser.yy.parseError=Ue.parser.parseError;const at=ot;const lt=class{constructor(e){this._complex=e,this._selector=at.keyword("All")(),this._boundaries={boundingBox:new r.Box3,boundingSphere:new r.Sphere}}computeBoundaries(){const e=this._complex._atoms,t=e.length,n=this._selector,{boundingBox:s}=this._boundaries;if(s.makeEmpty(),1===t){s.expandByPoint(e[0].position);const t=new r.Vector3;s.getCenter(t);const n=2*e[0].element.radius;s.setFromCenterAndSize(t,new r.Vector3(n,n,n))}else for(let r=0;r0?this._selector=at.keyword("Chain")(this.chains):this._selector=at.keyword("None")()}};const ht=class{constructor(e){this._complex=e,this._index=-1,this._residueIndices=[],this._cycles=[],this._subDivs=[],this._residueCount=0}getResidues(){return this._complex._residues}getResidueCount(){return this._residueCount}forEachResidue(e){const t=this._complex._residues,r=this._residueIndices;for(let n=0,s=r.length;n{e.update()}))}forEachAtom(e){this.forEachResidue((t=>{t.forEachAtom(e)}))}addCycle(e){this._cycles.push(e)}forEachCycle(e){const t=this._cycles;for(let r=0,n=t.length;r{t._component=e}))}_forEachSubChain(e,t){const r=this._complex._residues,n=this._subDivs;for(let s=0,i=n.length;s{t[r++]={start:n,end:s}})),t}getMaskedSubdivSequences(e){const t=[];let r=-1,n=-1;const s=this._subDivs;return this._forEachSubChain(e,((e,i,o)=>{n!==e&&(++r,t[r]={arr:[],boundaries:s[e]},n=e),t[r].arr[t[r].arr.length]={start:i,end:o}})),t}};const ut=class{constructor(e){this.numPairs=0,this.numMaxPairs=e,this.intBuffer=O.allocateTyped(Int32Array,4*e);for(let t=0;t<4*e;t++)this.intBuffer[t]=-1;this.hashBuffer=O.allocateTyped(Int32Array,33554432);for(let e=0;e<33554432;e++)this.hashBuffer[e]=-1}destroy(){this.intBuffer=null,this.hashBuffer=null}addPair(e,t){const r=et?e:t,s=r+(n<<14);let i=32*(r+89237*n&1048575),o=0;for(;o<32;o++){const e=this.hashBuffer[i+o];if(-1===e)break;if(e===s)return!1}if(o>=32)throw new Error("addPair: increase cMaxPairsForHashCode");if(this.hashBuffer[i+o]=s,this.numPairs>=this.numMaxPairs)throw new Error("addPair: increase num pairs");return i=4*this.numPairs,this.intBuffer[i]=r,this.intBuffer[i+1]=n,this.intBuffer[i+2]=s,this.numPairs++,!0}};function dt(e){const{element:t}=e;if(t)return t.radiusBonding;throw new Error("_getBondingRadius: Logic error.")}const pt=class{constructor(e){this._complex=e,this._maxRad=1.8;const t=this._complex.getDefaultBoundaries().boundingBox;this._vBoxMin=t.min.clone(),this._vBoxMax=t.max.clone(),this._pairCollection=null}_addExistingPairs(){const e=this._complex.getAtoms(),t=e.length;let r=0;const n=this._pairCollection;for(;rh*h||r<.001||n._pairCollection.addPair(l.index,e.index)};for(let n=0;n.1)&&e.dot(t)>=0}}();function gt(e,t){let r=0;for(;r3}function Ct(e){return!0}const At=class{constructor(e){this._complex=e;const t=new Array(e._bonds.length),r=new Array(e._bonds.length);for(let e=0,n=t.length;es[l]?++l:++a}return!1}_tryBond(e,t,n){const s=[],i=this._bondsData,o=yt(e,t),a=t.position.clone().sub(o.position),l=this._currStart,c=this,h=this._bondMarks;let u=this._checkBond;h[e._index]=!0,u=void 0===u?wt:u,t.forEachBond((o=>{if(!u(o)||o===e||h[o._index]||c._haveSameCycle(i,e,o))return;const d=yt(o,t),p=d.position.clone().sub(t.position),m=d===l?-2:1-function(e,t){const n=e.dot(t)/Math.sqrt(e.lengthSq()*t.lengthSq());return r.MathUtils.clamp(n,-1,1)}(a,p),f=p.cross(a);if(!_t(f,n))return;let _=0;for(;_{n._resetCycles(),r.forEachBond((t=>{e(t)&&n._startCycle(t)}));const s=n._cycles;for(let e=0,n=s.length;e=e.z?t:Math.max(o,a),[l,c]}function Tt(e,t,r,n){const s=r-e.y,i=n-e.y,o=Math.sqrt(Math.max(t*t-s*s,0)),a=Math.sqrt(Math.max(t*t-i*i,0)),l=Math.min(o,a);let c;return c=r<=e.y&&n>=e.y?t:Math.max(o,a),[l,c]}class Rt{constructor(e,t){this._box=e.clone();const n=new r.Vector3;e.getSize(n),this._count=n.clone().divide(t).floor().max(new r.Vector3(1,1,1)),this._last=this._count.clone().subScalar(1),this._cellSize=n.clone().divide(this._count),this._cellInnerR=.5*Math.min(Math.min(this._cellSize.x,this._cellSize.y),this._cellSize.z),this._cellOuterR=.5*Math.sqrt(this._cellSize.dot(this._cellSize));const s=this._count.x*this._count.y*this._count.z;this._voxels=O.allocateTyped(Int32Array,s);for(let e=0;e{const n=t._findVoxel(e.position);t._atoms[r]=e,t._atoms[r+1]=t._voxels[n],t._voxels[n]=r,r+=2}))}static _zero=(()=>new r.Vector3(0,0,0))();static _voxel=(()=>new r.Vector3)();_findVoxel(e){const t=Rt._zero,r=Rt._voxel;return r.copy(e).sub(this._box.min).divide(this._cellSize).floor().clamp(t,this._last),r.x+this._count.x*(r.y+this._count.y*r.z)}_forEachAtomInVoxel(e,t){for(let r=this._voxels[e];r>=0;r=this._atoms[r+1])t(this._atoms[r])}static _xRange=(()=>new r.Vector2)();static _yRange=(()=>new r.Vector2)();static _zRange=(()=>new r.Vector2)();_forEachVoxelWithinRadius(e,t,r){const n=Rt._xRange,s=Rt._yRange,i=Rt._zRange;if(t/this._cellInnerR<10)return void this._forEachVoxelWithinRadiusSimple(e,t,r);let o,a,l,c,h,u,d,p;i.set(e.z-t,e.z+t),i.subScalar(this._box.min.z).divideScalar(this._cellSize.z).floor().clampScalar(0,this._count.z-1);for(let m=i.x;m<=i.y;++m){h=[this._box.min.z+m*this._cellSize.z,this._box.min.z+(m+1)*this._cellSize.z],p=e.z-t<=h[0]&&h[1]<=e.z+t,o=Et(e,t,h[0],h[1]),s.set(e.y-o[1],e.y+o[1]),s.subScalar(this._box.min.y).divideScalar(this._cellSize.y).floor().clampScalar(0,this._count.y-1);for(let t=s.x;t<=s.y;++t){c=[this._box.min.y+t*this._cellSize.y,this._box.min.y+(t+1)*this._cellSize.y],d=e.y-o[0]<=c[0]&&c[1]<=e.y+o[0],a=Tt(e,o[1],c[0],c[1]),n.set(e.x-a[1],e.x+a[1]),n.subScalar(this._box.min.x).divideScalar(this._cellSize.x).floor().clampScalar(0,this._count.x-1);for(let{x:s}=n;s<=n.y;++s)l=[this._box.min.x+s*this._cellSize.x,this._box.min.x+(s+1)*this._cellSize.x],u=e.x-a[0]<=l[0]&&l[1]<=e.x+a[0],r(s+this._count.x*(t+this._count.y*m),u&&d&&p)}}}static _vCenter=(()=>new r.Vector3)();_forEachVoxelWithinRadiusSimple(e,t,r){const n=Rt._xRange,s=Rt._yRange,i=Rt._zRange,o=Rt._vCenter,a=(t+this._cellOuterR)*(t+this._cellOuterR);let l=-1;t>this._cellOuterR&&(l=(t-this._cellOuterR)*(t-this._cellOuterR)),n.set(e.x-t,e.x+t),n.subScalar(this._box.min.x).divideScalar(this._cellSize.x).floor(),n.x=Math.min(Math.max(n.x,0),this._count.x-1),n.y=Math.min(Math.max(n.y,0),this._count.x-1),s.set(e.y-t,e.y+t),s.subScalar(this._box.min.y).divideScalar(this._cellSize.y).floor(),s.x=Math.min(Math.max(s.x,0),this._count.y-1),s.y=Math.min(Math.max(s.y,0),this._count.y-1),i.set(e.z-t,e.z+t),i.subScalar(this._box.min.z).divideScalar(this._cellSize.z).floor(),i.x=Math.min(Math.max(i.x,0),this._count.z-1),i.y=Math.min(Math.max(i.y,0),this._count.z-1);for(let t=i.x;t<=i.y;++t){const i=[this._box.min.z+t*this._cellSize.z,this._box.min.z+(t+1)*this._cellSize.z];o.z=.5*(i[0]+i[1]);for(let i=s.x;i<=s.y;++i){const s=[this._box.min.y+i*this._cellSize.y,this._box.min.y+(i+1)*this._cellSize.y];o.y=.5*(s[0]+s[1]);for(let{x:s}=n;s<=n.y;++s){const n=[this._box.min.x+s*this._cellSize.x,this._box.min.x+(s+1)*this._cellSize.x];o.x=.5*(n[0]+n[1]);const c=e.distanceToSquared(o);c<=a&&r(s+this._count.x*(i+this._count.y*t),c<=l)}}}}forEachAtomWithinRadius(e,t,r){const n=this,s=t*t;n._forEachVoxelWithinRadius(e,t,((t,i)=>{i?n._forEachAtomInVoxel(t,r):n._forEachAtomInVoxel(t,(t=>{e.distanceToSquared(t.position)<=s&&r(t)}))}))}forEachAtomWithinDistFromMasked(e,t,r,n){this._forEachAtomWithinDistFromGroup((r=>{e.forEachAtom((e=>{0!=(e.mask&t)&&r(e)}))}),r,n)}forEachAtomWithinDistFromSelected(e,t,r,n){this._forEachAtomWithinDistFromGroup((r=>{e.forEachAtom((e=>{t.includesAtom(e)&&r(e)}))}),r,n)}_forEachAtomWithinDistFromGroup(e,t,r){const n=this,s=t*t,i=[],o=[];let a,l=0;e((e=>{n._forEachVoxelWithinRadius(e.position,t,((t,r)=>{r?i[t]=-1:void 0===i[t]?(o.push(e),o.push(-1),i[t]=l,l+=2):-1!==i[t]&&(o.push(e),o.push(i[t]),i[t]=l,l+=2)}))}));const c=function(e){if(void 0!==i[a])if(l=i[a],-1!==l){for(;l>=0;l=o[l+1])if(e.position.distanceToSquared(o[l].position)1e3?this._buildVW():this._build()}isBond(e,t){if(this._hbonds[e]){const[r,n]=this._hbonds[e].acceptor;if(r&&r.residue===t&&r.energy<-.5)return!0;if(n&&n.residue===t&&n.energy<-.5)return!0}return!1}_build(){const e=this;for(let t=0;t0&&this._complex._residues[t-1].getType().flags&Ee.Flags.PROTEIN&&r._sequence===this._complex._residues[t-1]._sequence+1&&(n=this._complex._residues[t-1]);for(let s=t+1;s0?t[o._index-1]:null;!a||0!=(a.getType().flags&Ee.Flags.PROTEIN)&&o._sequence===a._sequence+1||(a=null),e._calcHBondEnergy(n,r,o),o._index!==r._index+1&&e._calcHBondEnergy(a,o,r)}for(let e=0;e0?t[e-1]:null,!n||0!=(n.getType().flags&Ee.Flags.PROTEIN)&&r._sequence===n._sequence+1||(n=null),s.forEachAtomWithinRadius(this._residueGetCAlpha(r),5,o))}_residueGetCAlpha(e){for(let t=0;t{"C"===e.name?t=e.position:"O"===e.name&&(r=e.position)})),[t,r]}_residueGetNH(e,t){const[r,n]=this._residueGetCO(e);let s;if(t.forEachAtom((e=>{"N"===e.name&&(s=e.position)})),r&&n&&s){const e=r.clone();return e.sub(n),e.multiplyScalar(1/e.length()),e.add(s),[s,e]}return[null,null]}_calcHBondEnergy(e,t,r){let n=0;if(null===e)return n;if("PRO"!==t.getType().getName()){const[s,i]=this._residueGetNH(e,t),[o,a]=this._residueGetCO(r);if(null===s||null===i||null===o||null===a)return n;const l=i.distanceTo(a),c=i.distanceTo(o),h=s.distanceTo(o),u=s.distanceTo(a);n=l1&&(n1&&(n70}for(let r=1;r+4=s&&this._isHelixStart(e[r-s]._index,n);t?this._ss[e[r]._index]=Dt.TURN:this._bend[e[r]._index]&&(this._ss[e[r]._index]=Dt.BEND)}}_residueGetCAlpha(e){for(let t=0;t0&&(o=s.dot(i)/Math.sqrt(a)),o}_kappa(e,t,r){const n=this._residueGetCAlpha(t),s=this._residueGetCAlpha(e),i=this._residueGetCAlpha(r);if(null===n||null===s||null===i)return 180;const o=this._cosinusAngle(n,s,i,n),a=Math.sqrt(1-o*o);return 180*Math.atan2(a,o)/Math.PI}_isHelixStart(e,t){return this._helixFlags[t][e]===Vt.START||this._helixFlags[t][e]===Vt.START_AND_END}_buildBetaSheets(){const e=[];for(let t=0;te.chainI=6||s>=a&&n<=l)continue;let u=!1;u=e[t].type===Ot.PARALLEL?c-o<6&&a-s<3||c-o<3:i-h<6&&a-s<3||i-h<3,u&&(e[t].i=e[t].i.concat(e[r].i),e[t].type===Ot.PARALLEL?e[t].j=e[t].j.concat(e[r].j):e[t].j=e[r].j.concat(e[t].j),e.splice(r--,1))}const t=new Set;for(let r=0;r0;){let e=t.values().next().value;t.delete(e);const s=new Set;let i;s.add(e);do{i=new Set;for(const e of s.values())for(const r of t.values())this._areBridgesLinked(e,r)&&i.add(r);for(e of i.values())s.add(e),t.delete(e)}while(i.size>0);for(e of s.values())e.ladder=n,e.sheet=r,e.link=s,++n;++r}for(let t=0;t1&&(i=Dt.STRAND),r.type===Ot.PARALLEL){let e=0;for(let t=0;t{t.updateToFrame(e)}))}addResidueType(e){return this._residueTypes[e]=new Ee(e,"Unknown","")}getResidueCount(){return this._residues.length}getResidues(){return this._residues}getSGroupCount(){return this._sgroups.length}getSGroups(){return this._sgroups}getAtomByFullname(e){const t=e.split(".");if(3!==t.length)return null;const r=t[0],n=parseInt(t[1],10);if(Number.isNaN(n))return null;const s=t[2].toUpperCase();let i=null;return this.forEachChain((e=>{i||0===e._name.localeCompare(r)&&e.forEachResidue((e=>{i||e._sequence===n&&e.forEachAtom((e=>{i||0===s.localeCompare(e.name)&&(i=e)}))}))})),i}addChain(e){const t=new Pe(this,e);return this._chains.push(t),t}getChain(e){for(let t=0,r=this._chains.length;t{const t=e._residues,n=t.length;if(n<1)return;let s=r(),i=t[0]._index;for(let e=0;e=0&&e{e._finalize()})),this.forEachComponent((e=>{e.update()})),this._computeBounds(),this._finalizeBonds(),this.forEachSGroup((e=>{e._rebuildSGroupOnAtomChange()}))}update(){this._maskNeedsUpdate&&(this.updateStructuresMask(),this._maskNeedsUpdate=!1)}_finalizeBonds(){const e=this.getBonds(),t=e.length;for(let r=0;r=0;r--){const e=t[r];null===e._left||null===e._right?t.splice(r,1):(e._left.bonds.push(e),e._right.bonds.push(e))}const s=this._residues;for(r=0,n=s.length;r{e._finalize()}));const{units:i}=this;for(r=0,n=i.length;re.collectMask();this.forEachResidue(e),this.forEachChain(e),this.forEachMolecule(e)}countAtomsByMask(e){let t=0;return this.forEachAtom((r=>{0!=(r.mask&e)&&t++})),t}getNumAtomsBySelector(e){let t=0;return this.forEachAtom((r=>{e.includesAtom(r)&&t++})),t}resetAtomMask(e){this.forEachAtom((t=>{t.mask=e}))}markAtoms(e,t){const r=t,n=~r;let s=0;const i=at.keyword("And")(e,this.getSelector());return this.forEachAtom((e=>{i.includesAtom(e)?(e.mask|=r,s++):e.mask&=n})),this._maskNeedsUpdate=!0,s}markAtomsAdditionally(e,t){const r=t;let n=0;return this.forEachAtom((s=>{e.includesAtom(s)&&(s.mask&t)!==t&&(s.mask|=r,n++)})),n}clearAtomBits(e){const t=~e;this.forEachAtom((e=>{e.mask&=t}));const r=e=>{e._mask&=t};this.forEachAtom(r),this.forEachResidue(r),this.forEachChain(r),this.forEachMolecule(r)}getAtomNames(){if(this.hasOwnProperty("_atomNames"))return this._atomNames;const e={};return this.forEachAtom((t=>{e[t.name]=1})),this._atomNames=Object.keys(e),this._atomNames}getElements(){if(this.hasOwnProperty("_elements"))return this._elements;const e={};return this.forEachAtom((t=>{e[t.element.name]=1})),this._elements=Object.keys(e),this._elements}getResidueNames(){if(this.hasOwnProperty("_residueNames"))return this._residueNames;const e={};return this.forEachResidue((t=>{e[t._type._name]=1})),this._residueNames=Object.keys(e),this._residueNames}getChainNames(){if(this.hasOwnProperty("_chainNames"))return this._chainNames;const e={};return this.forEachChain((t=>{e[t._name]=1})),this._chainNames=Object.keys(e),this._chainNames}getAltLocNames(){if(this.hasOwnProperty("_altlocNames"))return this._altlocNames;const e={};return this.forEachAtom((t=>{e[String.fromCharCode(t.location)]=1})),this._altlocNames=Object.keys(e),this._altlocNames}getVoxelWorld(){if(!this.hasOwnProperty("_voxelWorld"))try{this._voxelWorld=new Mt(this.getDefaultBoundaries().boundingBox,new r.Vector3(5,5,5)),this._voxelWorld.addAtoms(this)}catch(e){w.warn("Unable to create voxel world"),this._voxelWorld=null}return this._voxelWorld}addElement(e,t,r,n){const{length:s}=e;for(let i=0;i{let t=n[e];return t||(t=n[e]=new Fe(String(e),0)),t};let i,o,a=0,l=null;for(let n=0,c=this._residues.length;n!0))}}Gt.prototype.id="Complex",Gt.prototype.name="";const jt=Gt;function Ht(e){let t=2;for(e=e-1>>1;e;)t<<=1,e>>=1;return t}class $t{constructor(e,t,r,n,s,i){switch(this._box=r.clone(),this._dimVec=Math.max(Math.floor(n||1),1),this._volumeInfo=i,t instanceof Array?[this._dimX,this._dimY,this._dimZ]=t:(this._dimX=t.x,this._dimY=t.y,this._dimZ=t.z),this._dimX=Math.max(Math.floor(this._dimX),1),this._dimY=Math.max(Math.floor(this._dimY),1),this._dimZ=Math.max(Math.floor(this._dimZ),1),this._rowElements=this._dimVec*this._dimX,this._planeElements=this._rowElements*this._dimY,this._totalElements=this._planeElements*this._dimZ,this._data=s||O.allocateTyped(e,this._totalElements),this._dimVec){case 1:break;case 2:this.getValue=function(e,t,r){const n=e*this._dimVec+t*this._rowElements+r*this._planeElements;return[this._data[n],this._data[n+1]]},this.setValue=function(e,t,r,n,s){const i=e*this._dimVec+t*this._rowElements+r*this._planeElements;this._data[i]=n,this._data[i+1]=s},this.addValue=function(e,t,r,n,s){const i=e*this._dimVec+t*this._rowElements+r*this._planeElements;this._data[i]+=n,this._data[i+1]+=s};break;case 3:this.getValue=function(e,t,r){const n=e*this._dimVec+t*this._rowElements+r*this._planeElements;return[this._data[n],this._data[n+1],this._data[n+2]]},this.setValue=function(e,t,r,n,s,i){const o=e*this._dimVec+t*this._rowElements+r*this._planeElements;this._data[o]=n,this._data[o+1]=s,this._data[o+2]=i},this.addValue=function(e,t,r,n,s,i){const o=e*this._dimVec+t*this._rowElements+r*this._planeElements;this._data[o]+=n,this._data[o+1]+=s,this._data[o+2]+=i};break;default:throw new Error("Volume: invalid vector dimension")}}getValue(e,t,r){return this._data[e+t*this._rowElements+r*this._planeElements]}setValue(e,t,r,n){this._data[e+t*this._rowElements+r*this._planeElements]=n}addValue(e,t,r,n){this._data[e+t*this._rowElements+r*this._planeElements]+=n}getDimensions(){return[this._dimX,this._dimY,this._dimZ]}getBox(){return this._box}getVolumeInfo(){return this._volumeInfo}getCellSize(){const e=new r.Vector3;this._box.getSize(e);const t=new r.Vector3;return t.x=this._dimX>1?e.x/(this._dimX-1):0,t.y=this._dimY>1?e.y/(this._dimY-1):0,t.z=this._dimZ>1?e.z/(this._dimZ-1):0,t}computeGradient(){if(1!==this._dimVec)return null;const e=new $t(Float32Array,[this._dimX,this._dimY,this._dimZ],this._box,3),t=this.getCellSize(),n=new r.Vector3(-.5/t.x,-.5/t.y,-.5/t.z);function s(e,t,r){return Math.min(r,Math.max(t,e))}const i=this._dimX,o=this._dimY,a=this._dimZ,l=this._data;function c(e,t,r){return l[r*i*o+t*i+e]}for(let t=0;t{null!==t._element.parentNode&&t._element.parentNode.removeChild(t._element)}))}getElement(){return this._element}setTransparency(e){const t=this.getElement();if(null===t)return;if(1===e)return void(t.style.display="none");t.style.display="inline";const r=1-e,n=r.toString(),s=100*r;t.style.opacity=n,t.style.filter=`alpha(opacity=${s})`}clone(){const e=new Xt(this._element);return e.copy(this),e}}const qt=Xt;class Zt extends r.Group{raycast(e,t){if(!this.visible)return;const{children:r}=this;for(let n=0,s=r.length;n{(e instanceof r.Mesh||e instanceof r.LineSegments||e instanceof r.Line)&&e.geometry.dispose()})),function(e){const{children:t}=e;for(let e=0,r=t.length;e=1?this.fov=e:this.fov=r.MathUtils.radToDeg(2*Math.atan(Math.tan(.5*r.MathUtils.degToRad(e))/this.aspect))},r.StereoCamera.prototype.updateHalfSized=function(e,t){const r=e.aspect,n=e.fov;e.aspect=r/2,e.setMinimalFov(t),e.updateProjectionMatrix(),this.update(e),e.aspect=r,e.fov=n,e.updateProjectionMatrix()},r.PerspectiveCamera.prototype.setDistanceToFit=function(e,t){this.position.z=e/Math.sin(.5*r.MathUtils.degToRad(t))},r.Raycaster.prototype.intersectVisibleObject=function(e,t,n,s){const i=this.intersectObject(e,!1);if(0===i.length)return null;const o=Math.min(t.near,n);let a,l=i[0];const c=new r.Vector3;for(a=0;a{(e.hasOwnProperty("geometry")||e instanceof qt)&&(t=!0)})),t},buildDistorionMesh:function(e,t,n){function s(e){let t=0,r=e,s=1;for(;Math.abs(r-t)>1e-5;)s=1+n*r,t=r,r=e/(s*s);return 1/s}const i=new r.PlaneGeometry(2,2,e,t),o=i.getAttribute("position");for(let e=0;e>er[t]&1))return!0;return!1},processObjRenderOrder:function(e,t){const r=+("BA"!==t);e.traverse((e=>{e.isGroup&&(e.renderOrder=r)}))},applySelectionMaterial:function(e){e.traverse((e=>{"material"in e&&(e.material=e.material.clone(!0),e.material.setValues({depthFunc:r.LessEqualDepth,overrideColor:!0,fog:!1,lights:!1,shadowmap:!1}),e.material.setUberOptions({fixedColor:new r.Color(16776960),zOffset:-1e-6}))}))},getMiddlePoint:function(e,t,n){const s=n||new r.Vector3;return s.set(0,0,0),s.addScaledVector(e,.5),s.addScaledVector(t,.5),s},LAYERS:Jt},ir={boundingBox:new r.Box3(new r.Vector3(-1,-1,-1),new r.Vector3(1,1,1)),boundingSphere:new r.Sphere(new r.Vector3(0,0,0),1)};class or extends sr.RCGroup{constructor(e,t){super(e,t),this.name=e,this._dataSource=t}release(){this.parent&&this.parent.remove(this)}getDataSource(){return this._dataSource}getBoundaries(){return ir}}const ar=or;function lr(e){return null==e||Array.isArray(e)?e:[e]}class cr{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:["id"];this._list=[],this._dict={},this._indices=[...t],this._indices.forEach((e=>{this._dict[e]={}})),e.forEach((e=>this.register(e)))}static registerInList(e,t){e.includes(t)||e.push(t)}static unregisterFromList(e,t){const r=e.indexOf(t);-1!==r&&e.splice(r,1)}static registerInDict(e,t,r){t.forEach((t=>{t=t.toLowerCase();const n=e[t]=e[t]||[];n.includes(r)||n.push(r)}))}static unregisterFromDict(e,t,r){t.forEach((t=>{t=t.toLowerCase();const n=e[t];if(n){const s=n.indexOf(r);-1!==s&&n.splice(s,1),0===n.length&&delete e[t]}}))}register(e){cr.registerInList(this._list,e),this._indices.forEach((t=>{cr.registerInDict(this._dict[t],lr(e[t]),e)}))}unregister(e){cr.unregisterFromList(this._list,e),this._indices.forEach((t=>{cr.unregisterFromDict(this._dict[t],lr(e[t]),e)}))}get all(){return[...this._list]}get first(){return this._list[0]}keys(e){return Object.keys(this._dict[e||this._indices[0]])}get(e,t){const r=this._dict[t||this._indices[0]];if(r){const t=r[e&&e.toLowerCase()];return t&&t.length>0?t[0]:void 0}}}const hr=cr;const ur=function(e){Object.defineProperties(e,{logger:{get(){return this.context&&this.context.logger?this.context.logger:w}},settings:{get(){return this.context&&this.context.settings?this.context.settings:z}}})};class dr{constructor(e,t){this._position=e,this._radius=t}static _sphere=(()=>new r.Sphere)();raycast(e){const t=dr._sphere;t.set(this._position,this._radius);const n=new r.Vector3;return e.ray.intersectSphere(t,n)?{distance:e.ray.origin.distanceTo(n),point:n}:null}}const pr=e=>class extends e{constructor(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n65535,c=o*n,h=this._index=O.allocateTyped(l?Uint32Array:Uint16Array,c);this._positions=O.allocateTyped(Float32Array,3*a),this._normals=O.allocateTyped(Float32Array,3*a),this._colors=O.allocateTyped(Float32Array,3*a);const u=this._alpha=O.allocateTyped(Float32Array,a);t().fill(u,1);for(let e=0;e0,c=!1===o&&t>0,h=(i+1)*s+l*(s+1)+c*(s+1),u=(2*i+l+c)*s,d=n/2,p=new r.BufferAttribute(O.allocateTyped(Float32Array,3*h),3),m=new r.BufferAttribute(O.allocateTyped(Float32Array,3*h),3),f=new r.Uint16BufferAttribute(O.allocateTyped(Uint16Array,3*u),1),_=new r.BufferAttribute(O.allocateTyped(Float32Array,2*h),2);let g=0,y=0;const x=-(t-e)/n;for(let o=0;o<=i;o++){if(o!==i)for(let e=0;e2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const s=this._chunkGeo._positions.length,i=this._ringsCount,o=s*this._ringsCount*e*3;this._setPoints(t,s,i,o),r?this._setSlopeNormals(s,i,o):this._setBaseNormals(s,i,o),n&&this._addCut(s,i,o)}_setPoints(e,t,r,n){const s=this._tmpShape,i=this._positions,o=this._chunkGeo._positions;for(let a=0,l=n;a0)for(let t=0;t2)for(let t=0;t65535;this._index=O.allocateTyped(s?Uint32Array:Uint16Array,6*e),this._positions=O.allocateTyped(Float32Array,4*n),this._colors=O.allocateTyped(Float32Array,3*n),this._directions=O.allocateTyped(Float32Array,3*n);const i=this._alpha=O.allocateTyped(Float32Array,n);t().fill(i,1);const o=this._index;let a=0,l=0;for(let t=0;t117440512)throw new Error("Too large cube dimension: lead to memory huge uasge");return this.pointsValuesLinear=O.allocateTyped(Float32Array,32*t),this.hasIntersection=O.allocateTyped(Int32Array,t),this.bitsInside=O.allocateTyped(Int32Array,t),0}destroy(){this.bitsInside=null,this.hasIntersection=null,this.pointsValuesLinear=null}}_n.prototype.striIndicesMarchCube=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,8,3,9,8,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,1,2,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,2,10,0,2,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,8,3,2,10,8,10,9,8,-1,-1,-1,-1,-1,-1,-1,3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,11,2,8,11,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,0,2,3,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,11,2,1,9,11,9,8,11,-1,-1,-1,-1,-1,-1,-1,3,10,1,11,10,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,10,1,0,8,10,8,11,10,-1,-1,-1,-1,-1,-1,-1,3,9,0,3,11,9,11,10,9,-1,-1,-1,-1,-1,-1,-1,9,8,10,10,8,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,3,0,7,3,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,8,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,1,9,4,7,1,7,3,1,-1,-1,-1,-1,-1,-1,-1,1,2,10,8,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,4,7,3,0,4,1,2,10,-1,-1,-1,-1,-1,-1,-1,9,2,10,9,0,2,8,4,7,-1,-1,-1,-1,-1,-1,-1,2,10,9,2,9,7,2,7,3,7,9,4,-1,-1,-1,-1,8,4,7,3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,4,7,11,2,4,2,0,4,-1,-1,-1,-1,-1,-1,-1,9,0,1,8,4,7,2,3,11,-1,-1,-1,-1,-1,-1,-1,4,7,11,9,4,11,9,11,2,9,2,1,-1,-1,-1,-1,3,10,1,3,11,10,7,8,4,-1,-1,-1,-1,-1,-1,-1,1,11,10,1,4,11,1,0,4,7,11,4,-1,-1,-1,-1,4,7,8,9,0,11,9,11,10,11,0,3,-1,-1,-1,-1,4,7,11,4,11,9,9,11,10,-1,-1,-1,-1,-1,-1,-1,9,5,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,5,4,0,8,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,5,4,1,5,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,5,4,8,3,5,3,1,5,-1,-1,-1,-1,-1,-1,-1,1,2,10,9,5,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,8,1,2,10,4,9,5,-1,-1,-1,-1,-1,-1,-1,5,2,10,5,4,2,4,0,2,-1,-1,-1,-1,-1,-1,-1,2,10,5,3,2,5,3,5,4,3,4,8,-1,-1,-1,-1,9,5,4,2,3,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,11,2,0,8,11,4,9,5,-1,-1,-1,-1,-1,-1,-1,0,5,4,0,1,5,2,3,11,-1,-1,-1,-1,-1,-1,-1,2,1,5,2,5,8,2,8,11,4,8,5,-1,-1,-1,-1,10,3,11,10,1,3,9,5,4,-1,-1,-1,-1,-1,-1,-1,4,9,5,0,8,1,8,10,1,8,11,10,-1,-1,-1,-1,5,4,0,5,0,11,5,11,10,11,0,3,-1,-1,-1,-1,5,4,8,5,8,10,10,8,11,-1,-1,-1,-1,-1,-1,-1,9,7,8,5,7,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,3,0,9,5,3,5,7,3,-1,-1,-1,-1,-1,-1,-1,0,7,8,0,1,7,1,5,7,-1,-1,-1,-1,-1,-1,-1,1,5,3,3,5,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,7,8,9,5,7,10,1,2,-1,-1,-1,-1,-1,-1,-1,10,1,2,9,5,0,5,3,0,5,7,3,-1,-1,-1,-1,8,0,2,8,2,5,8,5,7,10,5,2,-1,-1,-1,-1,2,10,5,2,5,3,3,5,7,-1,-1,-1,-1,-1,-1,-1,7,9,5,7,8,9,3,11,2,-1,-1,-1,-1,-1,-1,-1,9,5,7,9,7,2,9,2,0,2,7,11,-1,-1,-1,-1,2,3,11,0,1,8,1,7,8,1,5,7,-1,-1,-1,-1,11,2,1,11,1,7,7,1,5,-1,-1,-1,-1,-1,-1,-1,9,5,8,8,5,7,10,1,3,10,3,11,-1,-1,-1,-1,5,7,0,5,0,9,7,11,0,1,0,10,11,10,0,-1,11,10,0,11,0,3,10,5,0,8,0,7,5,7,0,-1,11,10,5,7,11,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,6,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,5,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,0,1,5,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,8,3,1,9,8,5,10,6,-1,-1,-1,-1,-1,-1,-1,1,6,5,2,6,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,6,5,1,2,6,3,0,8,-1,-1,-1,-1,-1,-1,-1,9,6,5,9,0,6,0,2,6,-1,-1,-1,-1,-1,-1,-1,5,9,8,5,8,2,5,2,6,3,2,8,-1,-1,-1,-1,2,3,11,10,6,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,0,8,11,2,0,10,6,5,-1,-1,-1,-1,-1,-1,-1,0,1,9,2,3,11,5,10,6,-1,-1,-1,-1,-1,-1,-1,5,10,6,1,9,2,9,11,2,9,8,11,-1,-1,-1,-1,6,3,11,6,5,3,5,1,3,-1,-1,-1,-1,-1,-1,-1,0,8,11,0,11,5,0,5,1,5,11,6,-1,-1,-1,-1,3,11,6,0,3,6,0,6,5,0,5,9,-1,-1,-1,-1,6,5,9,6,9,11,11,9,8,-1,-1,-1,-1,-1,-1,-1,5,10,6,4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,3,0,4,7,3,6,5,10,-1,-1,-1,-1,-1,-1,-1,1,9,0,5,10,6,8,4,7,-1,-1,-1,-1,-1,-1,-1,10,6,5,1,9,7,1,7,3,7,9,4,-1,-1,-1,-1,6,1,2,6,5,1,4,7,8,-1,-1,-1,-1,-1,-1,-1,1,2,5,5,2,6,3,0,4,3,4,7,-1,-1,-1,-1,8,4,7,9,0,5,0,6,5,0,2,6,-1,-1,-1,-1,7,3,9,7,9,4,3,2,9,5,9,6,2,6,9,-1,3,11,2,7,8,4,10,6,5,-1,-1,-1,-1,-1,-1,-1,5,10,6,4,7,2,4,2,0,2,7,11,-1,-1,-1,-1,0,1,9,4,7,8,2,3,11,5,10,6,-1,-1,-1,-1,9,2,1,9,11,2,9,4,11,7,11,4,5,10,6,-1,8,4,7,3,11,5,3,5,1,5,11,6,-1,-1,-1,-1,5,1,11,5,11,6,1,0,11,7,11,4,0,4,11,-1,0,5,9,0,6,5,0,3,6,11,6,3,8,4,7,-1,6,5,9,6,9,11,4,7,9,7,11,9,-1,-1,-1,-1,10,4,9,6,4,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,10,6,4,9,10,0,8,3,-1,-1,-1,-1,-1,-1,-1,10,0,1,10,6,0,6,4,0,-1,-1,-1,-1,-1,-1,-1,8,3,1,8,1,6,8,6,4,6,1,10,-1,-1,-1,-1,1,4,9,1,2,4,2,6,4,-1,-1,-1,-1,-1,-1,-1,3,0,8,1,2,9,2,4,9,2,6,4,-1,-1,-1,-1,0,2,4,4,2,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,2,8,2,4,4,2,6,-1,-1,-1,-1,-1,-1,-1,10,4,9,10,6,4,11,2,3,-1,-1,-1,-1,-1,-1,-1,0,8,2,2,8,11,4,9,10,4,10,6,-1,-1,-1,-1,3,11,2,0,1,6,0,6,4,6,1,10,-1,-1,-1,-1,6,4,1,6,1,10,4,8,1,2,1,11,8,11,1,-1,9,6,4,9,3,6,9,1,3,11,6,3,-1,-1,-1,-1,8,11,1,8,1,0,11,6,1,9,1,4,6,4,1,-1,3,11,6,3,6,0,0,6,4,-1,-1,-1,-1,-1,-1,-1,6,4,8,11,6,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,10,6,7,8,10,8,9,10,-1,-1,-1,-1,-1,-1,-1,0,7,3,0,10,7,0,9,10,6,7,10,-1,-1,-1,-1,10,6,7,1,10,7,1,7,8,1,8,0,-1,-1,-1,-1,10,6,7,10,7,1,1,7,3,-1,-1,-1,-1,-1,-1,-1,1,2,6,1,6,8,1,8,9,8,6,7,-1,-1,-1,-1,2,6,9,2,9,1,6,7,9,0,9,3,7,3,9,-1,7,8,0,7,0,6,6,0,2,-1,-1,-1,-1,-1,-1,-1,7,3,2,6,7,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,11,10,6,8,10,8,9,8,6,7,-1,-1,-1,-1,2,0,7,2,7,11,0,9,7,6,7,10,9,10,7,-1,1,8,0,1,7,8,1,10,7,6,7,10,2,3,11,-1,11,2,1,11,1,7,10,6,1,6,7,1,-1,-1,-1,-1,8,9,6,8,6,7,9,1,6,11,6,3,1,3,6,-1,0,9,1,11,6,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,8,0,7,0,6,3,11,0,11,6,0,-1,-1,-1,-1,7,11,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,8,11,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,11,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,1,9,8,3,1,11,7,6,-1,-1,-1,-1,-1,-1,-1,10,1,2,6,11,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,10,3,0,8,6,11,7,-1,-1,-1,-1,-1,-1,-1,2,9,0,2,10,9,6,11,7,-1,-1,-1,-1,-1,-1,-1,6,11,7,2,10,3,10,8,3,10,9,8,-1,-1,-1,-1,7,2,3,6,2,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,0,8,7,6,0,6,2,0,-1,-1,-1,-1,-1,-1,-1,2,7,6,2,3,7,0,1,9,-1,-1,-1,-1,-1,-1,-1,1,6,2,1,8,6,1,9,8,8,7,6,-1,-1,-1,-1,10,7,6,10,1,7,1,3,7,-1,-1,-1,-1,-1,-1,-1,10,7,6,1,7,10,1,8,7,1,0,8,-1,-1,-1,-1,0,3,7,0,7,10,0,10,9,6,10,7,-1,-1,-1,-1,7,6,10,7,10,8,8,10,9,-1,-1,-1,-1,-1,-1,-1,6,8,4,11,8,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,6,11,3,0,6,0,4,6,-1,-1,-1,-1,-1,-1,-1,8,6,11,8,4,6,9,0,1,-1,-1,-1,-1,-1,-1,-1,9,4,6,9,6,3,9,3,1,11,3,6,-1,-1,-1,-1,6,8,4,6,11,8,2,10,1,-1,-1,-1,-1,-1,-1,-1,1,2,10,3,0,11,0,6,11,0,4,6,-1,-1,-1,-1,4,11,8,4,6,11,0,2,9,2,10,9,-1,-1,-1,-1,10,9,3,10,3,2,9,4,3,11,3,6,4,6,3,-1,8,2,3,8,4,2,4,6,2,-1,-1,-1,-1,-1,-1,-1,0,4,2,4,6,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,0,2,3,4,2,4,6,4,3,8,-1,-1,-1,-1,1,9,4,1,4,2,2,4,6,-1,-1,-1,-1,-1,-1,-1,8,1,3,8,6,1,8,4,6,6,10,1,-1,-1,-1,-1,10,1,0,10,0,6,6,0,4,-1,-1,-1,-1,-1,-1,-1,4,6,3,4,3,8,6,10,3,0,3,9,10,9,3,-1,10,9,4,6,10,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,9,5,7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,4,9,5,11,7,6,-1,-1,-1,-1,-1,-1,-1,5,0,1,5,4,0,7,6,11,-1,-1,-1,-1,-1,-1,-1,11,7,6,8,3,4,3,5,4,3,1,5,-1,-1,-1,-1,9,5,4,10,1,2,7,6,11,-1,-1,-1,-1,-1,-1,-1,6,11,7,1,2,10,0,8,3,4,9,5,-1,-1,-1,-1,7,6,11,5,4,10,4,2,10,4,0,2,-1,-1,-1,-1,3,4,8,3,5,4,3,2,5,10,5,2,11,7,6,-1,7,2,3,7,6,2,5,4,9,-1,-1,-1,-1,-1,-1,-1,9,5,4,0,8,6,0,6,2,6,8,7,-1,-1,-1,-1,3,6,2,3,7,6,1,5,0,5,4,0,-1,-1,-1,-1,6,2,8,6,8,7,2,1,8,4,8,5,1,5,8,-1,9,5,4,10,1,6,1,7,6,1,3,7,-1,-1,-1,-1,1,6,10,1,7,6,1,0,7,8,7,0,9,5,4,-1,4,0,10,4,10,5,0,3,10,6,10,7,3,7,10,-1,7,6,10,7,10,8,5,4,10,4,8,10,-1,-1,-1,-1,6,9,5,6,11,9,11,8,9,-1,-1,-1,-1,-1,-1,-1,3,6,11,0,6,3,0,5,6,0,9,5,-1,-1,-1,-1,0,11,8,0,5,11,0,1,5,5,6,11,-1,-1,-1,-1,6,11,3,6,3,5,5,3,1,-1,-1,-1,-1,-1,-1,-1,1,2,10,9,5,11,9,11,8,11,5,6,-1,-1,-1,-1,0,11,3,0,6,11,0,9,6,5,6,9,1,2,10,-1,11,8,5,11,5,6,8,0,5,10,5,2,0,2,5,-1,6,11,3,6,3,5,2,10,3,10,5,3,-1,-1,-1,-1,5,8,9,5,2,8,5,6,2,3,8,2,-1,-1,-1,-1,9,5,6,9,6,0,0,6,2,-1,-1,-1,-1,-1,-1,-1,1,5,8,1,8,0,5,6,8,3,8,2,6,2,8,-1,1,5,6,2,1,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,3,6,1,6,10,3,8,6,5,6,9,8,9,6,-1,10,1,0,10,0,6,9,5,0,5,6,0,-1,-1,-1,-1,0,3,8,5,6,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,5,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,5,10,7,5,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,5,10,11,7,5,8,3,0,-1,-1,-1,-1,-1,-1,-1,5,11,7,5,10,11,1,9,0,-1,-1,-1,-1,-1,-1,-1,10,7,5,10,11,7,9,8,1,8,3,1,-1,-1,-1,-1,11,1,2,11,7,1,7,5,1,-1,-1,-1,-1,-1,-1,-1,0,8,3,1,2,7,1,7,5,7,2,11,-1,-1,-1,-1,9,7,5,9,2,7,9,0,2,2,11,7,-1,-1,-1,-1,7,5,2,7,2,11,5,9,2,3,2,8,9,8,2,-1,2,5,10,2,3,5,3,7,5,-1,-1,-1,-1,-1,-1,-1,8,2,0,8,5,2,8,7,5,10,2,5,-1,-1,-1,-1,9,0,1,5,10,3,5,3,7,3,10,2,-1,-1,-1,-1,9,8,2,9,2,1,8,7,2,10,2,5,7,5,2,-1,1,3,5,3,7,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,7,0,7,1,1,7,5,-1,-1,-1,-1,-1,-1,-1,9,0,3,9,3,5,5,3,7,-1,-1,-1,-1,-1,-1,-1,9,8,7,5,9,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,8,4,5,10,8,10,11,8,-1,-1,-1,-1,-1,-1,-1,5,0,4,5,11,0,5,10,11,11,3,0,-1,-1,-1,-1,0,1,9,8,4,10,8,10,11,10,4,5,-1,-1,-1,-1,10,11,4,10,4,5,11,3,4,9,4,1,3,1,4,-1,2,5,1,2,8,5,2,11,8,4,5,8,-1,-1,-1,-1,0,4,11,0,11,3,4,5,11,2,11,1,5,1,11,-1,0,2,5,0,5,9,2,11,5,4,5,8,11,8,5,-1,9,4,5,2,11,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,5,10,3,5,2,3,4,5,3,8,4,-1,-1,-1,-1,5,10,2,5,2,4,4,2,0,-1,-1,-1,-1,-1,-1,-1,3,10,2,3,5,10,3,8,5,4,5,8,0,1,9,-1,5,10,2,5,2,4,1,9,2,9,4,2,-1,-1,-1,-1,8,4,5,8,5,3,3,5,1,-1,-1,-1,-1,-1,-1,-1,0,4,5,1,0,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,4,5,8,5,3,9,0,5,0,3,5,-1,-1,-1,-1,9,4,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,11,7,4,9,11,9,10,11,-1,-1,-1,-1,-1,-1,-1,0,8,3,4,9,7,9,11,7,9,10,11,-1,-1,-1,-1,1,10,11,1,11,4,1,4,0,7,4,11,-1,-1,-1,-1,3,1,4,3,4,8,1,10,4,7,4,11,10,11,4,-1,4,11,7,9,11,4,9,2,11,9,1,2,-1,-1,-1,-1,9,7,4,9,11,7,9,1,11,2,11,1,0,8,3,-1,11,7,4,11,4,2,2,4,0,-1,-1,-1,-1,-1,-1,-1,11,7,4,11,4,2,8,3,4,3,2,4,-1,-1,-1,-1,2,9,10,2,7,9,2,3,7,7,4,9,-1,-1,-1,-1,9,10,7,9,7,4,10,2,7,8,7,0,2,0,7,-1,3,7,10,3,10,2,7,4,10,1,10,0,4,0,10,-1,1,10,2,8,7,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,9,1,4,1,7,7,1,3,-1,-1,-1,-1,-1,-1,-1,4,9,1,4,1,7,0,8,1,8,7,1,-1,-1,-1,-1,4,0,3,7,4,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,8,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,10,8,10,11,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,9,3,9,11,11,9,10,-1,-1,-1,-1,-1,-1,-1,0,1,10,0,10,8,8,10,11,-1,-1,-1,-1,-1,-1,-1,3,1,10,11,3,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,11,1,11,9,9,11,8,-1,-1,-1,-1,-1,-1,-1,3,0,9,3,9,11,1,2,9,2,11,9,-1,-1,-1,-1,0,2,11,8,0,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,2,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,8,2,8,10,10,8,9,-1,-1,-1,-1,-1,-1,-1,9,10,2,0,9,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,8,2,8,10,0,1,8,1,10,8,-1,-1,-1,-1,1,10,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,3,8,9,1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,9,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1];const gn=_n,yn=[0,265,515,778,1030,1295,1541,1804,2060,2309,2575,2822,3082,3331,3593,3840,400,153,915,666,1430,1183,1941,1692,2460,2197,2975,2710,3482,3219,3993,3728,560,825,51,314,1590,1855,1077,1340,2620,2869,2111,2358,3642,3891,3129,3376,928,681,419,170,1958,1711,1445,1196,2988,2725,2479,2214,4010,3747,3497,3232,1120,1385,1635,1898,102,367,613,876,3180,3429,3695,3942,2154,2403,2665,2912,1520,1273,2035,1786,502,255,1013,764,3580,3317,4095,3830,2554,2291,3065,2800,1616,1881,1107,1370,598,863,85,348,3676,3925,3167,3414,2650,2899,2137,2384,1984,1737,1475,1226,966,719,453,204,4044,3781,3535,3270,3018,2755,2505,2240,2240,2505,2755,3018,3270,3535,3781,4044,204,453,719,966,1226,1475,1737,1984,2384,2137,2899,2650,3414,3167,3925,3676,348,85,863,598,1370,1107,1881,1616,2800,3065,2291,2554,3830,4095,3317,3580,764,1013,255,502,1786,2035,1273,1520,2912,2665,2403,2154,3942,3695,3429,3180,876,613,367,102,1898,1635,1385,1120,3232,3497,3747,4010,2214,2479,2725,2988,1196,1445,1711,1958,170,419,681,928,3376,3129,3891,3642,2358,2111,2869,2620,1340,1077,1855,1590,314,51,825,560,3728,3993,3219,3482,2710,2975,2197,2460,1692,1941,1183,1430,666,915,153,400,3840,3593,3331,3082,2822,2575,2309,2060,1804,1541,1295,1030,778,515,265,0];function xn(e,t,r){const n=e.getValue(t.x,t.y,t.z);r.set(n[0],n[1],n[2])}class bn{constructor(){this._arrSize=8,this.p=new Array(this._arrSize),this.g=new Array(this._arrSize),this.val=new Array(this._arrSize);for(let e=0;eMath.abs(e)>Number.EPSILON;return!(c(t.y)||c(t.z)||c(n.x)||c(n.z)||c(s.x)||c(s.y))}_vertexInterp(e,t,r,n,s,i){const o=t.p[r],a=t.p[n],l=t.g[r],c=t.g[n],h=t.val[r],u=e-h,d=t.val[n]-h;let p=0;Math.abs(d)>0&&(p=u/d),p=p>1?1:p,s.lerpVectors(o,a,p),i.lerpVectors(l,c,p)}static _triTable=(()=>gn.prototype.striIndicesMarchCube)();static _arrSize=12;static _firstIndices=[0,1,2,3,4,5,6,7,0,1,2,3];static _secondIndices=[1,2,3,0,5,6,7,4,4,5,6,7];static _vertexList=(()=>Sn(vn._arrSize))();static _normalList=(()=>Sn(vn._arrSize))();_polygonize(e,t,r){const{cubeIndex:n}=e;let s=0;const i=vn._arrSize,o=vn._firstIndices,a=vn._secondIndices,l=vn._vertexList,c=vn._normalList;for(;sa?a:r+t;let c=-1;for(let e=r;ee&&(t=r,e=A[r]);if(t<0||!n.includesAtom(C[t])){M[s]=-1;continue}}M[s]=P++;const D=g=0&&r>=0&&n>=0&&(this._indices[3*t]=e,this._indices[3*t+1]=r,this._indices[3*t+2]=n,++t)}this._position=new Float32Array(this._position.buffer.slice(0,3*P*4)),this._normals=new Float32Array(this._normals.buffer.slice(0,3*P*4)),this._colors=new Float32Array(this._colors.buffer.slice(0,3*P*4)),this._indices=new Uint32Array(this._indices.buffer.slice(0,3*t*4))}}toMesh(){const e=new r.BufferGeometry;return e.setIndex(new r.BufferAttribute(this._indices,1)),e.setAttribute("position",new r.BufferAttribute(this._position,3)),e.setAttribute("normal",new r.BufferAttribute(this._normals,3)),e.setAttribute("color",new r.BufferAttribute(this._colors,3)),e.computeBoundingSphere(),e}}const Cn=vn;const An=class extends fn{_build(){const e=this._opts;this.numVoxels=[128,128,128],this.xAxis=new r.Vector3(1,0,0),this.yAxis=new r.Vector3(0,1,0),this.zAxis=new r.Vector3(0,0,1),this.origin=new r.Vector3(0,0,0),this._visibilitySelector=e.visibilitySelector,this._calcSurface(e)}_findMinMax(e){const t=e.length/4,r=[e[0],e[1],e[2],e[3]],n=[e[0],e[1],e[2],e[3]];for(let s=1;s4&&(t.gridSpacing*=s[3]);let o=t.radScale*i[3]*1.7,a=o;a=.65*Math.sqrt(4/3*Math.PI*a*a*a),o=Math.max(o,a);let l=0;for(;l<3;++l)s[l]-=o,i[l]+=o;for(l=0;l<3;++l)r[l]=Math.ceil((i[l]-s[l])/t.gridSpacing);return this.xAxis.x=(r[0]-1)*t.gridSpacing,this.yAxis.y=(r[1]-1)*t.gridSpacing,this.zAxis.z=(r[2]-1)*t.gridSpacing,[this.origin.x,this.origin.y,this.origin.z]=s,{bbox:n,dim:r}}_makeSurface(e,t){const n=new Cn;n.compute(e.volMap,this.origin,t.isoValue,1),n.vertexFusion(9,9),n._numTriangles>0?(n.setColorVolTex(e.volTexMap,e.atomMap,e.atomWeightMap,this._visibilitySelector),this.setIndex(new r.BufferAttribute(n._indices,1)),this.setAttribute("position",new r.BufferAttribute(n._position,3)),this.setAttribute("normal",new r.BufferAttribute(n._normals,3)),this.setAttribute("color",new r.BufferAttribute(n._colors,3))):this.setAttribute("position",new r.BufferAttribute(O.allocateTyped(Float32Array,0),3))}_calcSurface(e){const t={posRad:this._posRad,colors:this._colors,atoms:this._opts.atoms};if(0===t.posRad.length)return;const n=this._findNumVoxels(t.posRad,e),s=new r.Box3(this.origin,new r.Vector3(this.xAxis.x,this.yAxis.y,this.zAxis.z).add(this.origin)),i=this._computeSurface(t,s,n,e);this._makeSurface(i,e)}},{Volume:En}=Yt;const Tn=class extends An{_computeSurface(e,t,r,n){this._shiftByOrigin(e.posRad);const s={volMap:new En(Float32Array,this.numVoxels,t),volTexMap:new En(Float32Array,this.numVoxels,t,3)};return null!=this._visibilitySelector&&(s.atomMap=[],s.atomWeightMap=new En(Float32Array,this.numVoxels,t)),this.gaussdensity(s,e,null,n),s}gaussdensity(e,t,r,n){const s=t.posRad.length/4,{posRad:i,colors:o}=t,{numVoxels:a}=this,{radScale:l,gaussLim:c,gridSpacing:h}=n,u=1/n.isoValue,d=1/h,p=a[0]-1,m=a[1]-1,f=a[2]-1,{volMap:_,volTexMap:g}=e,y=_.getData(),x=_.getStrideX(),b=g.getData(),w=g.getStrideX();let S;null!=this._visibilitySelector&&(S=e.atomWeightMap.getData());const{atomMap:v}=e;for(let e=0;e=E)continue;let d=_.getDirectIdx(R,l,r),p=g.getDirectIdx(R,l,r),m=R*h-i[n];for(let r=R;r<=M;++r,m+=h,d+=x,p+=w){const r=-(m*m+c)*C;let n=Math.exp(r)*a;null!=this._visibilitySelector&&n>S[d]&&(S[d]=n,v[d]=t.atoms[e]),y[d]+=n,n*=u;const s=3*e;b[p]+=n*o[s],b[p+1]+=n*o[s+1],b[p+2]+=n*o[s+2]}}}}}_shiftByOrigin(e){const t=this.origin.x,r=this.origin.y,n=this.origin.z,s=e.length/4;for(let i=0;iR&&(R=r)}this.neighbourListLength=27*R+1,this.withinRadii=function(t,r,n,s,l){let c=0;const h=u(t,i),f=u(r,o),g=u(n,a),b=Math.max(0,h-1),w=Math.max(0,f-1),S=Math.max(0,g-1),T=Math.min(d-1,h+1),R=Math.min(p-1,f+1),M=Math.min(m-1,g+1);for(y=b;y<=T;++y){const i=y*_;for(E=w;E<=R;++E){const o=E*m;for(let a=S;a<=M;++a){x=i+o+a;const h=v[x],u=h+C[x];for(let i=h;im&&(m=t),p[e]=t*t}F(),function(){let e=0;const t=2*Math.PI/g;E=O.allocateTyped(Float32Array,g),A=O.allocateTyped(Float32Array,g);for(let r=0;r=0;){if(i!==n&&i!==s&&U(i,e,t,r))return M=i,i;i=R[++o]}return M=-1,-1}function j(e,t){const r=i*e,n=i*t,s=o[r],a=o[r+1],l=o[r+2],c=o[r+3];let h=I.x=o[n]-s,d=I.y=o[n+1]-a,p=I.z=o[n+2]-l;const m=o[n+3];let f=h*h+d*d+p*p;const b=Math.sqrt(f),w=c*((c*c+b*b-m*m)/(2*c*b));var T,R;I.normalize(),R=I,(T=V).x=T.y=T.z=1,0!==R.x?T.x=(R.y+R.z)/-R.x:0!==R.y?T.y=(R.x+R.z)/-R.y:0!==R.z&&(T.z=(R.x+R.y)/-R.z),V.normalize(),D.crossVectors(I,V),D.normalize();const P=Math.sqrt(c*c-w*w);V.multiplyScalar(P),D.multiplyScalar(P),I.multiplyScalar(w),I.x+=s,I.y+=a,I.z+=l,M=-1;const N=k;for(let r=0;r0&&fP[o]&&(P[o]=t,N[o]=l[e]),x[o]<0&&(x[o]=-x[o]);const u=Math.sqrt(m),d=c/u;let f=p*d,_=a*d,g=i*d;if(f+=r,_+=n,g+=s,-1===G(f,_,g,e,-1)){const e=c-u;e=0;)e0){t=1/t;const r=3*e;b[r]*=t,b[r+1]*=t,b[r+2]*=t}}}()}this.build=function(){H(),this.volTexMap=b,this.weightsMap=P,this.atomMap=N,this.volMap=x}},{Volume:Pn}=Yt;const Nn=class extends An{_computeSurface(e,t,r,n){const s=new Mn(e,r,n);s.build();return{volMap:new Pn(Float32Array,this.numVoxels,t,1,s.volMap),volTexMap:new Pn(Float32Array,this.numVoxels,t,3,s.volTexMap),atomMap:s.atomMap,atomWeightMap:new Pn(Float32Array,this.numVoxels,t,1,s.weightsMap)}}};const Ln=class{constructor(e,t){this.coord=new r.Vector3,this.coord.copy(e),this.radius=t,this.colorX=.99999,this.colorY=0,this.colorZ=0,this.atomType=0,this.srcAtom=null}};const In=class{constructor(e,t,n,s,i){this._numAtoms=e,this._atoms=t,this._vBoxMin=new r.Vector3,this._vBoxMax=new r.Vector3,this._vBoxMin.copy(n),this._vBoxMax.copy(s),this._probeRadius=i,this._atomsList=null,this._voxelList=null}createVoxels(){let e,t;const r=0|this._numAtoms,n=this._atoms,s=this._vBoxMax.x-this._vBoxMin.x,i=this._vBoxMax.y-this._vBoxMin.y,o=this._vBoxMax.z-this._vBoxMin.z;let a=sc?t:c,h+=t;let u=Math.floor(a/c);u<2&&(u=2),h/=r,this._numCells=u,this._aveRad=h,this._maxRad=c;const d=u,p=u*u,m=u*u*u,f=this._xScale=1/(this._vBoxMax.x-this._vBoxMin.x),_=this._yScale=1/(this._vBoxMax.y-this._vBoxMin.y),g=this._zScale=1/(this._vBoxMax.z-this._vBoxMin.z);let y=0;const x=f*u,b=_*u,w=g*u;for(l=0;l=0?r:0,s=s>=0?s:0,i=i>=0?i:0,o=o=0;e=this._atomsList[2*e+1]){t(o[this._atomsList[2*e]])}}getClosestAtom(e){let t=null,r=Number.MAX_VALUE;return this.forEachRelatedAtom(e,(n=>{const s=e.distanceToSquared(n.coord);sf)return;const g=e.radius+n._probeRadius;d=s-g*g,d<0&&(d=-d),p=Math.exp(_*d),c+=t*p,h+=r*p,u+=m*p,i++};let y=0;for(let n=0;ny?i:y,s=c*c+h*h+u*u,i>0&&(d=1/Math.sqrt(s),c*=d,h*=d,u*=d),r[n].x=c,r[n].y=h,r[n].z=u;return 0}buildColors(e,t,r,n){const s=this;let i=0,o=0,a=0,l=0,c=0;const h=n*n;let u=[],d=[],p=0;const m=function(e){const t=i-e.coord.x,r=o-e.coord.y,n=a-e.coord.z,m=t*t+r*r+n*n;if(m>h)return;const f=e.radius+s._probeRadius;l=m-f*f,l<0&&(l=-l),c=1/(.8+l),u.push([e.colorX,e.colorY,e.colorZ]),d.push(c),p+=c};for(let n=0;ni?a:i,o.x-ar.x&&(r.x=o.x+a),o.y+a>r.y&&(r.y=o.y+a),o.z+a>r.z&&(r.z=o.z+a)}t.x-=i,t.y-=i,t.z-=i,r.x+=i,r.y+=i,r.z+=i}getCornerCoord(e,t,r,n,s,i,o){const a=1/(i-1),l=r*a,c=n*a,h=s*a;o.x=e.x*(1-l)+t.x*l,o.y=e.y*(1-c)+t.y*c,o.z=e.z*(1-h)+t.z*h}buildEdgePoint(e,t,r,n,s,i){if(r[e]^r[t]){const r=24,o=(0-n.pointsValuesLinear[s+r+e])/(n.pointsValuesLinear[s+r+t]-n.pointsValuesLinear[s+r+e]),a=n.pointsValuesLinear[s+3*e+0],l=n.pointsValuesLinear[s+3*e+1],c=n.pointsValuesLinear[s+3*e+2],h=n.pointsValuesLinear[s+3*t+0],u=n.pointsValuesLinear[s+3*t+1],d=n.pointsValuesLinear[s+3*t+2];i.x=a*(1-o)+h*o,i.y=l*(1-o)+u*o,i.z=c*(1-o)+d*o}}isTriangleVisible(e,t,r){const n=this.voxelWorld.getClosestAtom(e),s=this.voxelWorld.getClosestAtom(t),i=this.voxelWorld.getClosestAtom(r);return null!==n&&null!==s&&null!==i&&null!==n.srcAtom&&null!==s.srcAtom&&null!==i.srcAtom&&(this.visibilitySelector.includesAtom(n.srcAtom)&&this.visibilitySelector.includesAtom(s.srcAtom)&&this.visibilitySelector.includesAtom(i.srcAtom))}addTriangle(e,t,r){if(this.visibilitySelector&&!this.isTriangleVisible(e,t,r))return!0;const n=this.geoOut;if(n._numTriangles>=this.maxNumTriangles)return!1;const s=this.addVertexToGeo(n,e),i=this.addVertexToGeo(n,t),o=this.addVertexToGeo(n,r);if((s|i|o)<0)return!1;const a=3*n._numTriangles;return n._indices[a+0]=s,n._indices[a+1]=i,n._indices[a+2]=o,n._numTriangles++,!0}buildGeoFromCorners(e,t,n,s,i,o){const a=e-1,l=e,c=e*e,h=new Array(12);for(let e=0;e<12;e++)h[e]=new r.Vector3;const u=[];for(let e=0;e<8;e++)u[e]=1;const d=new r.Vector3;let p=0,m=0;for(let r=0;rt.length/2||2*Object.keys(Dn.ByAtomicNumber).length!==t.length)throw new Error("atomT.length should be equal Element.ByAtomicNumber.length * 2");return t[2*e]}calculateGridCorners(e,t,n,s,i,o){const a=t*t,l=a*t,c=new r.Vector3,h=new r.Vector3;for(let t=0;t=0;n=this.hashEntries[2*n+1]){const r=this.hashEntries[2*n+0];o.copy(e._vertices[r]),o.x-=t.x,o.y-=t.y,o.z-=t.z;if(o.x*o.x+o.y*o.y+o.z*o.z<1e-6)return r}if(e._numVertices>=this.maxNumVertices)return-1;const u=e._numVertices;if(e._vertices[u].copy(t),null!==this.vBoxMin&&null!==this.vBoxMax){if(n=this.getNewHashEntry(),n<0)return-1;const e=this.hashLines[h+1];this.hashLines[h+1]=n,this.hashEntries[2*n+0]=u,this.hashEntries[2*n+1]=e,this.hashLines[h+0]++}return e._numVertices++,u}modifyExcludedFromGeo(e,t,r,n,s,i){let o,a,l;const c=e*e,h=(e-1)/(n.x-r.x),u=(e-1)/(n.y-r.y),d=(e-1)/(n.z-r.z),p=2*t*(2*t),m=1/(e-1);for(let f=0;f=0?y:0,x=x>=0?x:0,b=b>=0?b:0,w=w<=e-1?w:e-1,S=S<=e-1?S:e-1,v=v<=e-1?v:e-1;for(let s=x;s<=S;s++){const h=s*c;for(let c=b;c<=v;c++){const u=c*e;for(let e=y;e<=w;e++){o=h+u+e;let d=e*m;const f=r.x*(1-d)+n.x*d;d=s*m;const g=r.y*(1-d)+n.y*d;d=c*m;const y=r.z*(1-d)+n.z*d,x=f-_.x,b=g-_.y,w=y-_.z,S=x*x+b*b+w*w;S0?(i[o]<0&&(i[o]=l),l>i[o]&&(i[o]=l)):l>i[o]&&(i[o]=l))}}}}return 0}_innerBuild(){let e;const t=1.2,n={posRad:this._posRad,colors:this._colors,atoms:this._opts.atoms};this.complex=this._opts.parent,this.atoms=n.atoms,this.meshResolution=this._opts.gridSpacing,this.atomRadiusScale=this._opts.radScale,this.colorMode=this._opts.colorMode,this.probeRadius=this._opts.probeRadius,this.useVertexColors=!0,this.excludeProbe=this._opts.excludeProbe,this.visibilitySelector=this._opts.visibilitySelector,this.geoOut=null,this.hashLines=null,this.hashEntries=null,this.numHashEtriesAllocated=0,this.numHashEntryIndex=0,this.maxNumVertices=0,this.maxNumTriangles=0;const s=new Array(this.atoms.length);this.convertToAtomsColored(n,s);const i=this.vBoxMin=new r.Vector3,o=this.vBoxMax=new r.Vector3;this.getBoundingBox(s,i,o);const a=this.marCubeResoultion=4*this.meshResolution,l=a,c=l*l*l,h=O.allocateTyped(Float32Array,c),u=this.probeRadius*this.atomRadiusScale;this.calculateGridCorners(h,l,i,o,s,u);const d=a-1,p=new gn;if(e=p.create(d),e<0)return e;const m=new r.Vector3;m.x=(o.x-i.x)/d,m.y=(o.y-i.y)/d,m.z=(o.z-i.z)/d;let f=this.getNumIntersectedCells(l,d,h,p),_=Math.floor(f*t),g=Math.floor(f*t*2);if(this.geoOut=new On(_,g,this.useVertexColors),e=this.createVertexHash(_,g),e<0)return e;let y=u;if(this.excludeProbe&&(y=.01),this.voxelWorld=new In(s.length,s,i,o,y),this.voxelWorld.createVoxels(),e=this.buildGeoFromCorners(a,i,o,h,m,p),this.excludeProbe){if(this.modifyExcludedFromGeo(l,u,i,o,this.geoOut,h),this.geoOut._vertices=null,this.geoOut._colors=null,this.geoOut._indices=null,this.geoOut._normals=null,this.geoOut._numVertices=0,this.geoOut._numTriangles=0,this.geoOut=null,f=this.getNumIntersectedCells(l,d,h,p),_=Math.floor(f*t),g=Math.floor(f*t*2),this.geoOut=new On(_,g,this.useVertexColors),e=this.createVertexHash(_,g),e<0)return e;e=this.buildGeoFromCorners(l,i,o,h,m,p)}this.voxelWorld.buildNormals(this.geoOut._vertices.length,this.geoOut._vertices,this.geoOut._normals);let x=6.5;return this.excludeProbe&&(x-=1.5),this.useVertexColors&&this.voxelWorld.buildColors(this.geoOut._vertices.length,this.geoOut._vertices,this.geoOut._colors,x),this.voxelWorld.destroyVoxels(),this.voxelWorld=null,p.destroy(),e}};const zn={InstancedSpheresGeometry:gr,SimpleSpheresGeometry:Sr,Simple2CCylindersGeometry:Er,Instanced2CCylindersGeometry:Dr,ExtrudedObjectsGeometry:jr,ChunkedLinesGeometry:rn,TwoColorLinesGeometry:on,CrossGeometry:dn,QuickSurfGeometry:Tn,ContactSurfaceGeometry:Nn,SSIsosurfaceGeometry:kn,LabelsGeometry:class extends g{constructor(e,t){super(),this._opts=t,this.items=[],this.needsUpdate=!1;let n=-50,s=-50;switch(t.horizontalAlign){case"left":n=0;break;case"right":n=-100}switch(t.verticalAlign){case"top":s=-100;break;case"bottom":s=0}const i=new r.Vector3(t.dx||0,t.dy||0,t.dz||0);this.userData={translation:`translate(${n}%, ${s}%)`,offset:i}}setItem(e,t,n){const s=this._opts,i=this.items[e]||function(e,t){const n=document.createElement("div");if(n.className=t,"string"==typeof e){const t=document.createElement("span");t.style.fontSize="150%";const r=e.split("\n");for(let e=0,n=r.length;e 0\r\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\r\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\r\n\t\tvarying vec3 vDirectionalShadowNormal[ NUM_DIR_LIGHTS ];\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n attribute vec3 color;\r\n varying vec3 vColor;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n attribute vec3 color2;\r\n varying vec3 vColor2;\r\n attribute vec2 uv;\r\n #ifndef CYLINDER_SPRITE\r\n varying vec2 vUv;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_POS\r\n attribute vec4 offset;\r\n #ifdef SPHERE_SPRITE\r\n varying vec4 instOffset;\r\n varying vec4 spritePosEye;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n attribute vec4 matVector1;\r\n attribute vec4 matVector2;\r\n attribute vec4 matVector3;\r\n attribute vec4 invmatVector1;\r\n attribute vec4 invmatVector2;\r\n attribute vec4 invmatVector3;\r\n\r\n #ifdef CYLINDER_SPRITE\r\n varying vec4 matVec1;\r\n varying vec4 matVec2;\r\n varying vec4 matVec3;\r\n varying vec4 invmatVec1;\r\n varying vec4 invmatVec2;\r\n varying vec4 invmatVec3;\r\n varying vec4 spritePosEye;\r\n #endif\r\n#endif\r\n\r\nuniform mat4 modelViewMatrix; // optional\r\nuniform mat4 projectionMatrix; // optional\r\nuniform mat3 normalMatrix; // optional\r\nuniform mat4 modelMatrix; // optional\r\n\r\n#ifdef DASHED_LINE\r\n attribute float lineDistance;\r\n varying float vLineDistance;\r\n#endif\r\n\r\n#ifdef THICK_LINE\r\n attribute vec3 direction;\r\n uniform mat4 projMatrixInv;\r\n uniform vec2 viewport;\r\n uniform float lineWidth;\r\n\r\n vec4 transform(vec4 coord){\r\n return projectionMatrix * modelViewMatrix * coord;\r\n }\r\n\r\n vec2 project(vec4 device){\r\n vec3 device_normal = device.xyz/device.w;\r\n vec2 clip_pos = (device_normal*0.5+0.5).xy;\r\n return clip_pos * viewport;\r\n }\r\n\r\n vec4 unproject(vec2 screen, float z, float w){\r\n vec2 clip_pos = screen/viewport;\r\n vec2 device_normal = clip_pos*2.0-1.0;\r\n return vec4(device_normal*w, z, w);\r\n }\r\n#endif\r\n\r\n\r\n/////////////////////////////////////////// Main ///////////////////////////////////////////////\r\nvoid main() {\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n alphaCol = alphaColor;\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n vec3 objectNormal = vec3(\r\n dot(normal, matVector1.xyz),\r\n dot(normal, matVector2.xyz),\r\n dot(normal, matVector3.xyz));\r\n#else\r\n vec3 objectNormal = vec3( normal );\r\n#endif\r\n\r\nvec3 transformedNormal = normalMatrix * objectNormal;\r\n\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n vNormal = normalize(transformedNormal);\r\n#endif\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n viewNormal = normalize(mat3(modelViewMatrix)*objectNormal);\r\n#endif\r\n\r\n vec4 localPos = vec4(position.xyz, 1.0);\r\n vec4 worldPos = modelMatrix * localPos;\r\n vec4 mvPosition = modelViewMatrix * localPos;\r\n\r\n// make thick line offset\r\n#ifdef THICK_LINE\r\n // get screen pos\r\n vec4 dPos = transform(vec4(position.xyz, 1.0));\r\n vec2 sPos = project(dPos);\r\n // move pos forward\r\n vec3 position2 = position.xyz + direction.xyz * 0.5;\r\n // get screen offset pos\r\n vec4 dPos2 = transform(vec4(position2.xyz, 1.0));\r\n vec2 sPos2 = project(dPos2);\r\n // screen line direction\r\n vec2 sDir = normalize(sPos2 - sPos);\r\n // vertex offset (orthogonal to line direction)\r\n vec2 offset1 = vec2(-sDir.y, sDir.x);\r\n // move screen vertex\r\n vec2 newPos = sPos + offset1 * position.w * lineWidth;\r\n // get moved pos in view space\r\n vec4 dNewPos = unproject(newPos, dPos.z, dPos.w);\r\n mvPosition.xyz = (projMatrixInv * dNewPos).xyz;\r\n#endif // THICK_LINE\r\n\r\n#ifdef INSTANCED_POS\r\n #ifdef SPHERE_SPRITE\r\n instOffset = offset;\r\n\r\n vec4 posEye = modelViewMatrix * vec4( offset.xyz, 1.0 );\r\n float scale = length(modelViewMatrix[0]);\r\n mvPosition = posEye + vec4( position.xyz * offset.w * scale * INSTANCED_SPRITE_OVERSCALE, 0.0 );\r\n posEye.w = offset.w * scale;\r\n\r\n spritePosEye = posEye;\r\n #else\r\n localPos = vec4( offset.xyz + position.xyz * offset.w, 1.0 );\r\n worldPos = modelMatrix * localPos;\r\n mvPosition = modelViewMatrix * localPos;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n #ifdef CYLINDER_SPRITE\r\n matVec1 = matVector1;\r\n matVec2 = matVector2;\r\n matVec3 = matVector3;\r\n invmatVec1 = invmatVector1;\r\n invmatVec2 = invmatVector2;\r\n invmatVec3 = invmatVector3;\r\n\r\n // calculate eye coords of cylinder endpoints\r\n vec4 v = vec4(0, -0.5, 0, 1);\r\n vec4 p1 = modelViewMatrix * vec4(dot(v, matVector1), dot(v, matVector2), dot(v, matVector3), 1.0);\r\n v.y = 0.5;\r\n vec4 p2 = modelViewMatrix * vec4(dot(v, matVector1), dot(v, matVector2), dot(v, matVector3), 1.0);\r\n\r\n // sprite is placed at the center of cylinder\r\n vec4 posEye;\r\n posEye.xyz = mix(p1.xyz, p2.xyz, 0.5);\r\n posEye.w = 1.0;\r\n spritePosEye = posEye;\r\n\r\n // cylinder radius in eye space\r\n float rad = length(modelViewMatrix[0]) * length(vec3(matVector1.x, matVector2.x, matVector3.x));\r\n vec2 spriteSize;\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // In ortho projection we skip z coordinate\r\n // basic sprite size at screen plane (covers only cylinder axis)\r\n vec2 spriteSizeScreen = abs(p2.xy - p1.xy);\r\n\r\n spriteSize = vec2(1.0, 1.0) * INSTANCED_SPRITE_OVERSCALE * (spriteSizeScreen + 2.0 * rad);\r\n #else\r\n // basic sprite size at screen plane (covers only cylinder axis)\r\n vec2 spriteSizeScreen = abs(p2.xy / p2.z - p1.xy / p1.z);\r\n\r\n // full sprite size in eye coords\r\n float minZ = min(abs(p1.z), abs(p2.z));\r\n spriteSize = vec2(1.0, 1.0) * INSTANCED_SPRITE_OVERSCALE * abs(posEye.z) * (spriteSizeScreen + 2.0 * rad / minZ);\r\n #endif\r\n\r\n mvPosition = posEye + vec4( position.xy * 0.5 * spriteSize, 0, 0 );\r\n #else\r\n localPos = vec4(dot(localPos, matVector1), dot(localPos, matVector2), dot(localPos, matVector3), 1.0);\r\n worldPos = modelMatrix * localPos;\r\n mvPosition = modelViewMatrix * localPos;\r\n #endif\r\n#endif\r\n\r\n gl_Position = projectionMatrix * mvPosition;\r\n\r\n vWorldPosition = worldPos.xyz;\r\n vViewPosition = - mvPosition.xyz;\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t vec4 worldPosition;\r\n\t // see THREE.WebGLProgram.unrollLoops\r\n\t #pragma unroll_loop_start\r\n\t for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * vec4(vWorldPosition, 1.0);\r\n vDirectionalShadowNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(objectNormal, 0.0))).xyz;\r\n\t }\r\n\t #pragma unroll_loop_end\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n vColor = color.xyz;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n vColor2 = color2;\r\n #ifndef CYLINDER_SPRITE\r\n vUv = uv;\r\n #endif\r\n#endif\r\n\r\n#ifdef DASHED_LINE\r\n vLineDistance = lineDistance;\r\n#endif\r\n}\r\n",fragmentShader:this.precisionString()+"#if defined (NORMALS_TO_G_BUFFER)\r\n #define fragColor gl_FragData[0]\r\n#else\r\n #define fragColor gl_FragColor\r\n#endif\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n varying float alphaCol;\r\n#endif\r\n\r\n#ifdef COLOR_FROM_POS\r\n uniform mat4 world2colorMatrix;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\r\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ]; //only for sprites\r\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\r\n\t\tvarying vec3 vDirectionalShadowNormal[ NUM_DIR_LIGHTS ];\r\n vec4 vDirLightWorldCoord[ NUM_DIR_LIGHTS ];\r\n vec3 vDirLightWorldNormal[ NUM_DIR_LIGHTS ];\r\n\r\n #ifdef SHADOWMAP_PCF_RAND\r\n // We use 4 instead uniform variable or define because this value is used in for(... i < value; ...) with\r\n // unroll_loop and unroll_loop has pattern:\r\n // /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g\r\n uniform vec2 samplesKernel[4]; // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n uniform sampler2D noiseTex;\r\n uniform vec2 noiseTexelSize;\r\n uniform vec2 srcTexelSize;\r\n uniform mat4 projectionMatrix;\r\n #endif\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n varying vec3 vColor;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n varying vec3 vColor2;\r\n #ifndef CYLINDER_SPRITE\r\n varying vec2 vUv;\r\n #endif\r\n#endif\r\n\r\nuniform vec3 diffuse;\r\nuniform vec3 emissive;\r\nuniform vec3 specular;\r\nuniform float shininess;\r\nuniform vec3 fixedColor;\r\nuniform float opacity;\r\nuniform float zClipValue;\r\nuniform float clipPlaneValue;\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n varying vec3 viewNormal;\r\n#endif\r\n\r\n#define RECIPROCAL_PI 0.31830988618\r\n#define saturate(a) clamp( a, 0.0, 1.0 )\r\n\r\n#ifdef USE_FOG\r\n uniform vec3 fogColor;\r\n uniform float fogAlpha;\r\n uniform float fogNear;\r\n uniform float fogFar;\r\n#endif\r\n\r\nvarying vec3 vWorldPosition; // world position of the pixel (invalid when INSTANCED_SPRITE is defined)\r\nvarying vec3 vViewPosition;\r\n\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n varying vec3 vNormal;\r\n#endif\r\n\r\n/////////////////////////////////////////// ZSprites ////////////////////////////////////////////////\r\n#if defined (SPHERE_SPRITE) || defined (CYLINDER_SPRITE)\r\n uniform float nearPlaneValue;\r\n#endif\r\n\r\n#ifdef SPHERE_SPRITE\r\n varying vec4 spritePosEye;\r\n#endif\r\n\r\n#if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n uniform float zOffset;\r\n\r\n #if !defined(USE_LIGHTS) || !defined(SHADOWMAP) || !defined(SHADOWMAP_PCF_RAND) || !(NUM_DIR_LIGHTS > 0)\r\n uniform mat4 projectionMatrix;\r\n #endif\r\n\r\n float calcDepthForSprites(vec4 pixelPosEye, float zOffset, mat4 projMatrix) {\r\n vec4 pixelPosScreen = projMatrix * pixelPosEye;\r\n return 0.5 * (pixelPosScreen.z / pixelPosScreen.w + 1.0) + zOffset;\r\n }\r\n#endif\r\n\r\n#ifdef SPHERE_SPRITE\r\n varying vec4 instOffset;\r\n uniform mat4 modelMatrix;\r\n uniform mat4 modelViewMatrix;\r\n uniform mat4 invModelViewMatrix;\r\n uniform mat3 normalMatrix;\r\n\r\n\r\n bool intersect_ray_sphere(in vec3 origin, in vec3 ray, out vec3 point, out float frontFaced) {\r\n\r\n // intersect XZ-projected ray with circle\r\n float a = dot(ray, ray);\r\n float b = dot(ray, origin);\r\n float c = dot(origin, origin) - 1.0;\r\n float det = b * b - a * c;\r\n if (det < 0.0) return false;\r\n float t1 = (-b - sqrt(det)) / a;\r\n float t2 = (-b + sqrt(det)) / a;\r\n\r\n // calculate both intersection points\r\n vec3 p1 = origin + ray * t1;\r\n vec3 p2 = origin + ray * t2;\r\n\r\n // choose nearest point inside frustum\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // orthografic camera is used for dirLight sources. So in it for all spheres the point with smaller 't' is visible\r\n // t1 is always smaller than t2 (from calculations)\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n #else\r\n // for perspective camera first intersection can be in front of near plane. If not intersection is p1 else - p2\r\n // t* = 0.0 corresponds to point of intersection near plane by the ray from camera to curPixel\r\n if (t1 >= 0.0) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (t2 >= 0.0) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #endif\r\n\r\n return false;\r\n }\r\n\r\n bool get_sphere_point(in vec3 pixelPosEye, out vec3 point, out float frontFaced) {\r\n vec3 origin, ray;\r\n\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // transform vector from sprite center to curPixel into sphere local coords\r\n origin = pixelPosEye.xyz - spritePosEye.xyz;\r\n origin = (invModelViewMatrix * vec4(origin, 0.0)).xyz / instOffset.w;\r\n\r\n // transform camera orientation vector into sphere local coords\r\n ray = (invModelViewMatrix * vec4(0.0, 0.0, -1.0, 0.0)).xyz;\r\n #else\r\n // find point of intersection near plane by the ray from camera to curPixel\r\n vec4 v = vec4(-(nearPlaneValue / pixelPosEye.z) * pixelPosEye, 1.0);\r\n\r\n // transform intersection point into sphere local coords\r\n v = invModelViewMatrix * v;\r\n origin = (v.xyz - instOffset.xyz) / instOffset.w;\r\n\r\n // transform vector from camera pos to curPixel into sphere local coords\r\n ray = (invModelViewMatrix * vec4(pixelPosEye, 0.0)).xyz;\r\n #endif\r\n ray = normalize(ray);\r\n\r\n return intersect_ray_sphere(origin, ray, point, frontFaced);\r\n }\r\n#endif\r\n\r\n#ifdef CYLINDER_SPRITE\r\n varying vec4 matVec1;\r\n varying vec4 matVec2;\r\n varying vec4 matVec3;\r\n varying vec4 invmatVec1;\r\n varying vec4 invmatVec2;\r\n varying vec4 invmatVec3;\r\n\r\n uniform mat4 modelMatrix;\r\n uniform mat4 modelViewMatrix;\r\n uniform mat4 invModelViewMatrix;\r\n uniform mat3 normalMatrix;\r\n\r\n varying vec4 spritePosEye;\r\n\r\n bool intersect_ray_cylinder(in vec3 origin, in vec3 ray, out vec3 point, out float frontFaced) {\r\n\r\n // intersect XZ-projected ray with circle\r\n float a = dot(ray.xz, ray.xz);\r\n float b = dot(ray.xz, origin.xz);\r\n float c = dot(origin.xz, origin.xz) - 1.0;\r\n float det = b * b - a * c;\r\n if (det < 0.0) return false;\r\n float t1 = (-b - sqrt(det)) / a;\r\n float t2 = (-b + sqrt(det)) / a;\r\n\r\n // calculate both intersection points\r\n vec3 p1 = origin + ray * t1;\r\n vec3 p2 = origin + ray * t2;\r\n\r\n float halfHeight = 0.5;\r\n\r\n // choose nearest point\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // orthografic camera is used for dirLight sources. So in it for all cylinders the point with smaller 't' is visible\r\n // if it is not outside of cylinnder (t1 is always smaller than t2).\r\n if (p1.y >= -halfHeight && p1.y <= halfHeight) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (p2.y >= -halfHeight && p2.y <= halfHeight) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #else\r\n // for perspective camera first intersection can be in front of near plane. If not intersection is p1 else - p2\r\n // t* = 0.0 corresponds to point of intersection near plane by the ray from camera to curPixel\r\n if (t1 >= 0.0 && p1.y >= -halfHeight && p1.y <= halfHeight) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (t2 >= 0.0 && p2.y >= -halfHeight && p2.y <= halfHeight) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #endif\r\n\r\n return false;\r\n }\r\n\r\n bool get_cylinder_point(in vec3 pixelPosEye, out vec3 point, out float frontFaced) {\r\n vec3 origin, ray;\r\n vec4 v;\r\n\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // transform vector from sprite center to curPixel into cylinder local coords\r\n v = invModelViewMatrix * vec4(pixelPosEye.xyz - spritePosEye.xyz, 0.0);\r\n origin = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n\r\n // transform camera orientation vector into cylinder local coords\r\n v = invModelViewMatrix * vec4(0.0, 0.0, -1.0, 0.0);\r\n ray = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n #else\r\n // find point of intersection near plane by the ray from camera to curPixel\r\n v = vec4(-(nearPlaneValue / pixelPosEye.z) * pixelPosEye, 1.0);\r\n\r\n // transform intersection point into cylinder local coords\r\n v = invModelViewMatrix * v;\r\n origin = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n\r\n // transform vector from camera pos to curPixel into cylinder local coords\r\n v = invModelViewMatrix * vec4(pixelPosEye, 0.0);\r\n ray = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n #endif\r\n ray = normalize(ray);\r\n\r\n return intersect_ray_cylinder(origin, ray, point, frontFaced);\r\n }\r\n#endif\r\n\r\n///////////////////////////////////// Pack and unpack ///////////////////////////////////////////////\r\nconst float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1)\r\nconst float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1)\r\n\r\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\r\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\r\n\r\n\r\nconst float ShiftRight8 = 1. / 256.;\r\n\r\nvec4 packDepthToRGBA( const in float v ) {\r\n vec4 r = vec4( fract( v * PackFactors ), v );\r\n r.yzw -= r.xyz * ShiftRight8; // tidy overflow\r\n return r * PackUpscale;\r\n}\r\n\r\nfloat unpackRGBAToDepth( const in vec4 v ) {\r\n return dot( v, UnpackFactors );\r\n}\r\n\r\n////////////////////////////////////////// All Lighting /////////////////////////////////////////////////\r\n#ifdef TOON_SHADING\r\n #define LOW_TOON_BORDER 0.0\r\n #define MEDIUM_TOON_BORDER 0.7\r\n #define HIGH_TOON_BORDER 1.0\r\n\r\n #define MEDIUM_TOON_RANGE 0.5\r\n #define HIGH_TOON_RANGE 0.95\r\n#endif\r\n#if defined(USE_LIGHTS) && NUM_DIR_LIGHTS > 0\r\n struct ReflectedLight {\r\n vec3 directDiffuse;\r\n vec3 directSpecular;\r\n vec3 indirectDiffuse;\r\n };\r\n\r\n struct BlinnPhongMaterial {\r\n vec3 diffuseColor;\r\n vec3 specularColor;\r\n float specularShininess;\r\n };\r\n\r\n struct GeometricContext {\r\n vec3 normal;\r\n vec3 viewDir;\r\n };\r\n\r\n struct DirectionalLight {\r\n vec3 direction;\r\n vec3 color;\r\n };\r\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\r\n\r\n struct DirectionalLightShadow {\r\n vec2 shadowMapSize;\r\n float shadowBias;\r\n float shadowRadius;\r\n };\r\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHTS ];\r\n\r\n uniform vec3 ambientLightColor;\r\n\r\n /////////////////////////////////////////// Shadowmap ////////////////////////////////////////////////\r\n\r\n #if defined(SHADOWMAP)\r\n \tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\r\n \t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\r\n \t}\r\n\r\n float getShadow( sampler2D shadowMap, DirectionalLightShadow dirLight, vec4 shadowCoord, vec3 vViewPosition, vec3 vNormal ) {\r\n \t float shadow = 0.0;\r\n\r\n // When shadows for sprites will appear use here for them normals as it done for G-buffer\r\n shadowCoord.xyz += dirLight.shadowBias * vNormal;\r\n shadowCoord.xyz /= shadowCoord.w;\r\n\r\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\r\n bool inFrustum = all( inFrustumVec );\r\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\r\n bool frustumTest = all( frustumTestVec );\r\n\r\n if ( frustumTest ) {\r\n #ifdef SHADOWMAP_BASIC\r\n \t shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\r\n \t#endif\r\n\r\n \t#ifdef SHADOWMAP_PCF_SHARP\r\n \t vec2 texelSize = vec2( 1.0 ) / dirLight.shadowMapSize;\r\n\r\n float dx0 = - texelSize.x * dirLight.shadowRadius;\r\n float dy0 = - texelSize.y * dirLight.shadowRadius;\r\n float dx1 = + texelSize.x * dirLight.shadowRadius;\r\n float dy1 = + texelSize.y * dirLight.shadowRadius;\r\n\r\n shadow = (\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\r\n ) * ( 1.0 / 9.0 );\r\n #endif\r\n\r\n #ifdef SHADOWMAP_PCF_RAND\r\n vec2 texelSize = vec2( 1.0 ) / dirLight.shadowMapSize;\r\n\r\n vec4 vUv = ((projectionMatrix * vec4(vViewPosition, 1.0)) + 1.0) / 2.0;\r\n vec2 vUvNoise = vUv.xy / srcTexelSize * noiseTexelSize;\r\n\r\n vec2 noiseVec = normalize(texture2D(noiseTex, vUvNoise).rg);\r\n mat2 mNoise = mat2(noiseVec.x, noiseVec.y, -noiseVec.y, noiseVec.x);\r\n\r\n vec2 offset;\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < 4; i ++ ) { // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n offset = mNoise * ( normalize( samplesKernel[ i ]) * texelSize * dirLight.shadowRadius );\r\n shadow += texture2DCompare( shadowMap, shadowCoord.xy + offset, shadowCoord.z );\r\n }\r\n #pragma unroll_loop_end\r\n shadow /= float( 4 ); // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n #endif\r\n }\r\n return shadow;//(shadow != 1.0) ? 0.5 : 1.0;//vec4(shadow, shadow, shadow, 1.0);\r\n }\r\n #endif\r\n\r\n /////////////////////////////////////////// Lighting /////////////////////////////////////////////////\r\n\r\n vec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\r\n return RECIPROCAL_PI * diffuseColor;\r\n } // validated\r\n\r\n vec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\r\n // Original approximation by Christophe Schlick '94\r\n //;float fresnel = pow( 1.0 - dotLH, 5.0 );\r\n // Optimized variant (presented by Epic at SIGGRAPH '13)\r\n float fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\r\n return ( 1.0 - specularColor ) * fresnel + specularColor;\r\n } // validated\r\n\r\n float G_BlinnPhong_Implicit( /* const in float dotNL, const in float dotNV */ ) {\r\n // geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v)\r\n return 0.25;\r\n }\r\n\r\n float D_BlinnPhong( const in float shininess, const in float dotNH ) {\r\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\r\n }\r\n\r\n vec3 BRDF_Specular_BlinnPhong( const in DirectionalLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\r\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\r\n float dotNH = saturate(dot( geometry.normal, halfDir ));\r\n float dotLH = saturate(dot( incidentLight.direction, halfDir ));\r\n\r\n vec3 F = F_Schlick( specularColor, dotLH );\r\n float G = G_BlinnPhong_Implicit( /* dotNL, dotNV */ );\r\n float D = D_BlinnPhong( shininess, dotNH );\r\n\r\n return F * ( G * D );\r\n } // validated\r\n\r\n void RE_Direct_BlinnPhong( const in DirectionalLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight, float penumbra ) {\r\n\r\n float dotNL = saturate( dot( geometry.normal, directLight.direction ));\r\n #ifdef TOON_SHADING\r\n if(dotNL < MEDIUM_TOON_RANGE){\r\n dotNL = LOW_TOON_BORDER;\r\n }\r\n else if(dotNL < HIGH_TOON_RANGE){\r\n dotNL = MEDIUM_TOON_BORDER;\r\n }\r\n else{\r\n dotNL = HIGH_TOON_BORDER;\r\n }\r\n #endif\r\n\r\n vec3 irradiance = dotNL * directLight.color;\r\n reflectedLight.directDiffuse += penumbra * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\r\n reflectedLight.directSpecular += penumbra * irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess );\r\n }\r\n\r\n void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\r\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\r\n }\r\n\r\n vec3 calcLighting(const in GeometricContext geometry, const in BlinnPhongMaterial material, vec3 vViewPosition) {\r\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ));\r\n vec3 irradiance = ambientLightColor;\r\n\r\n float shadowMask = 1.0;\r\n // see THREE.WebGLProgram.unrollLoops\r\n \t#pragma unroll_loop_start\r\n \t for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n \t #ifdef SHADOWMAP\r\n \t shadowMask = getShadow( directionalShadowMap[ i ], directionalLightShadows[ i ], vDirLightWorldCoord[ i ], vViewPosition, vDirLightWorldNormal[ i ] );\r\n #endif\r\n\r\n \t\t if ( shadowMask > 0.0 ) RE_Direct_BlinnPhong( directionalLights[ i ], geometry, material, reflectedLight, shadowMask );\r\n \t\t}\r\n \t\t#pragma unroll_loop_end\r\n\r\n RE_IndirectDiffuse_BlinnPhong(irradiance, material, reflectedLight);\r\n\r\n return saturate(reflectedLight.indirectDiffuse + reflectedLight.directDiffuse + reflectedLight.directSpecular);\r\n }\r\n#endif\r\n\r\n/////////////////////////////////////////// Dashed Line ///////////////////////////////////////////////\r\n#ifdef DASHED_LINE\r\n uniform float dashedLineSize;\r\n uniform float dashedLinePeriod;\r\n varying float vLineDistance;\r\n#endif\r\n\r\n/////////////////////////////////////////// Main ///////////////////////////////////////////////\r\nvoid main() {\r\n\r\n#ifdef CLIP_PLANE\r\n if (vViewPosition.z < clipPlaneValue) discard;\r\n#endif\r\n\r\n#ifdef ZCLIP\r\n if (vViewPosition.z < zClipValue) discard;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = vDirectionalShadowCoord[ i ];\r\n vDirLightWorldNormal[ i ] = vDirectionalShadowNormal[ i ];\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n#endif\r\n\r\n vec4 pixelPosWorld = vec4(vWorldPosition, 1.0);\r\n vec4 pixelPosEye;\r\n\r\n#ifdef SPHERE_SPRITE\r\n\r\n vec3 viewNormalSprites;\r\n float frontFaced = 1.0;\r\n vec3 normal;\r\n\r\n/* quick-and-dirty method\r\n normal.xy = ' + INSTANCED_SPRITE_OVERSCALE + ' * (2.0 * vUv - 1.0);\r\n float r2 = dot(normal.xy, normal.xy);\r\n if (r2 > 1.0) discard;\r\n float normalZ = sqrt(1.0 - r2);\r\n normal.z = normalZ;\r\n normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\r\n pixelPosEye = vec4(spritePosEye.xyz, 1.0);\r\n pixelPosEye.z += spritePosEye.w * normalZ;\r\n*/\r\n\r\n // ray-trace sphere surface\r\n {\r\n vec3 p;\r\n if (!get_sphere_point(-vViewPosition, p, frontFaced)) discard;\r\n vec4 v = vec4(instOffset.xyz + p * instOffset.w, 1.0);\r\n pixelPosWorld = modelMatrix * v;\r\n pixelPosEye = modelViewMatrix * v;\r\n normal = normalize(normalMatrix * p);\r\n #ifdef NORMALS_TO_G_BUFFER\r\n viewNormalSprites = normalize(mat3(modelViewMatrix)*p);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = directionalShadowMatrix[ i ] * pixelPosWorld;\r\n vDirLightWorldNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(p, 0.0))).xyz;\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n #endif\r\n }\r\n#endif\r\n\r\n#ifdef CYLINDER_SPRITE\r\n vec3 normal;\r\n vec3 viewNormalSprites;\r\n float frontFaced = 1.0;\r\n float cylinderY = 0.0;\r\n\r\n // ray-trace cylinder surface\r\n {\r\n vec3 p;\r\n if (!get_cylinder_point(-vViewPosition, p, frontFaced)) discard;\r\n\r\n cylinderY = 0.5 * (p.y + 1.0);\r\n\r\n vec4 v = vec4(p, 1.0);\r\n v = vec4(dot(v, matVec1), dot(v, matVec2), dot(v, matVec3), 1.0);\r\n pixelPosWorld = modelMatrix * v;\r\n pixelPosEye = modelViewMatrix * v;\r\n\r\n vec3 localNormal = normalize(vec3(p.x, 0.0, p.z));\r\n normal = vec3(\r\n dot(localNormal, matVec1.xyz),\r\n dot(localNormal, matVec2.xyz),\r\n dot(localNormal, matVec3.xyz));\r\n #ifdef NORMALS_TO_G_BUFFER\r\n viewNormalSprites = normalize(mat3(modelViewMatrix)*normal);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = directionalShadowMatrix[ i ] * pixelPosWorld;\r\n vDirLightWorldNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(normal, 0.0))).xyz;\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n #endif\r\n\r\n normal = normalize(normalMatrix * normal);\r\n }\r\n#endif\r\n\r\n #ifdef ATTR_COLOR\r\n vec3 vertexColor = vColor;\r\n #else\r\n vec3 vertexColor = vec3(1.0, 1.0, 1.0);\r\n #endif\r\n\r\n #ifdef ATTR_COLOR2\r\n #ifdef CYLINDER_SPRITE\r\n float colorCoef = cylinderY; // cylinder parameter is calculated from ray-tracing\r\n #else\r\n float colorCoef = vUv.y; // cylinder parameter is interpolated as tex coord\r\n #endif\r\n // choose either color or color2\r\n vertexColor = mix(vColor2, vColor, step(0.5, colorCoef));\r\n #endif\r\n\r\n // negative red component is a special condition\r\n if (vertexColor.x < 0.0) discard;\r\n\r\n #ifdef DASHED_LINE\r\n if ( mod( vLineDistance, dashedLinePeriod ) > dashedLineSize ) discard;\r\n #endif\r\n\r\n // transparency prepass writes only z, so we don't need to calc the color\r\n #ifdef PREPASS_TRANSP\r\n fragColor = vec4(1.0, 1.0, 1.0, 1.0);\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepthEXT = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n #endif\r\n return;\r\n #endif\r\n\r\n float totalOpacity = opacity;\r\n\r\n #ifdef ATTR_ALPHA_COLOR\r\n totalOpacity *= alphaCol;\r\n #endif\r\n\r\n // discard fully transparent pixels\r\n if (totalOpacity == 0.0) discard;\r\n\r\n #ifdef FAKE_OPACITY\r\n // discard pixels in checker pattern\r\n vec2 dm_coord = floor(gl_FragCoord.xy);\r\n dm_coord = fract(dm_coord * 0.5);\r\n if (totalOpacity < 1.0 && (dm_coord.x < 0.5 ^^ dm_coord.y < 0.5)) discard;\r\n vec4 diffuseColor = vec4(diffuse, 1.0);\r\n #else\r\n vec4 diffuseColor = vec4(diffuse, totalOpacity);\r\n #endif\r\n\r\n float flipNormal;\r\n #if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n flipNormal = 1.0;\r\n #ifdef DOUBLE_SIDED\r\n flipNormal = float( gl_FrontFacing );\r\n #endif\r\n vec3 normal = normalize( vNormal ) * flipNormal;\r\n #endif\r\n\r\n diffuseColor.rgb *= vertexColor;\r\n\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepthEXT = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n #endif\r\n\r\n #ifdef NORMALS_TO_G_BUFFER\r\n #if defined (SPHERE_SPRITE) || defined (CYLINDER_SPRITE)\r\n vec3 viewNormaInColor = viewNormalSprites;\r\n #else\r\n vec3 viewNormaInColor = viewNormal;\r\n float frontFaced = float( gl_FrontFacing );\r\n #endif\r\n // [-1, 1] -> [0, 1]\r\n viewNormaInColor = 0.5 * viewNormaInColor + 0.5;\r\n gl_FragData[1] = vec4(viewNormaInColor, frontFaced);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && NUM_DIR_LIGHTS > 0\r\n vec3 viewDir;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n viewDir = -pixelPosEye.xyz;\r\n #else\r\n viewDir = vViewPosition;\r\n #endif\r\n GeometricContext geometry = GeometricContext(normal, normalize( viewDir ));\r\n BlinnPhongMaterial material = BlinnPhongMaterial(diffuseColor.rgb, specular, shininess);\r\n vec3 outgoingLight = calcLighting(geometry, material, viewDir);\r\n #else\r\n vec3 outgoingLight = diffuseColor.rgb;\r\n #endif\r\n\r\n #ifdef COLOR_FROM_DEPTH\r\n float depth = 0.0;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepthEXT = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n depth = gl_FragDepthEXT;\r\n #else\r\n depth = gl_FragCoord.z;\r\n #endif\r\n fragColor = packDepthToRGBA(depth);\r\n return;\r\n #endif\r\n\r\n #ifdef COLOR_FROM_POS\r\n fragColor = world2colorMatrix * pixelPosWorld;\r\n #else\r\n #ifdef OVERRIDE_COLOR\r\n fragColor = vec4(fixedColor, diffuseColor.a);\r\n #else\r\n fragColor = vec4(outgoingLight, diffuseColor.a);//vec4(vNormal, 1.0);\r\n #endif\r\n\r\n #ifdef USE_FOG\r\n float viewDistance;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n viewDistance = abs(pixelPosEye.z);\r\n #else\r\n viewDistance = vViewPosition.z;\r\n #endif\r\n float fogFactor = smoothstep( fogNear, fogFar, viewDistance) * fogAlpha;\r\n #ifdef FOG_TRANSPARENT\r\n fragColor.a = fragColor.a * (1.0 - fogFactor);\r\n #else\r\n fragColor.rgb = mix( fragColor.rgb, fogColor, fogFactor );\r\n #endif\r\n #endif\r\n\r\n #endif\r\n}\r\n",lights:!0,fog:!0,side:r.DoubleSide}),this.setValues(e)}precisionString(){const{precision:e}=Fn;return`precision ${e} float;\nprecision ${e} int;\n\n`}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=r.UniformsUtils.clone(e.uniforms),this.defines={...e.defines},this.extensions=e.extensions,this.fog=e.fog,this.instancedPos=e.instancedPos,this.instancedMatrix=e.instancedMatrix,this.attrColor=e.attrColor,this.attrColor2=e.attrColor2,this.attrAlphaColor=e.attrAlphaColor,this.overrideColor=e.overrideColor,this.sphereSprite=e.sphereSprite,this.cylinderSprite=e.cylinderSprite,this.zClip=e.zClip,this.clipPlane=e.clipPlane,this.fakeOpacity=e.fakeOpacity,this.colorFromPos=e.colorFromPos,this.shadowmap=e.shadowmap,this.shadowmapType=e.shadowmapType,this.colorFromDepth=e.colorFromDepth,this.orthoCam=e.orthoCam,this.prepassTransparancy=e.prepassTransparancy,this.dashedLine=e.dashedLine,this.thickLine=e.thickLine,this.fogTransparent=e.fogTransparent,this.normalsToGBuffer=e.normalsToGBuffer,this.toonShading=e.toonShading,this.uberOptions.copy(e.uberOptions),this}createInstance(){const e=new Qn;return e.copy(this),e.uberOptions=Object.create(this.uberOptions),e}setValues(e){if(void 0===e)return;super.setValues(e);const t={},r={};this.fog&&(t.USE_FOG=1),this.instancedPos&&(t.INSTANCED_POS=1),this.instancedMatrix&&(t.INSTANCED_MATRIX=1),this.attrColor&&(t.ATTR_COLOR=1),this.attrColor2&&(t.ATTR_COLOR2=1),this.attrAlphaColor&&(t.ATTR_ALPHA_COLOR=1),this.overrideColor&&(t.OVERRIDE_COLOR=1),this.sphereSprite&&(t.SPHERE_SPRITE=1,r.fragDepth=!0),this.cylinderSprite&&(t.CYLINDER_SPRITE=1,r.fragDepth=!0),this.zClip&&(t.ZCLIP=1),this.clipPlane&&(t.CLIP_PLANE=1),this.fakeOpacity&&(t.FAKE_OPACITY=1),this.lights&&(t.USE_LIGHTS=1),this.colorFromPos&&(t.COLOR_FROM_POS=1),this.shadowmap&&(t.SHADOWMAP=1,"pcf"===this.shadowmapType?t.SHADOWMAP_PCF_SHARP=1:"random"===this.shadowmapType?t.SHADOWMAP_PCF_RAND=1:t.SHADOWMAP_BASIC=1),this.colorFromDepth&&(t.COLOR_FROM_DEPTH=1),this.orthoCam&&(t.ORTHOGRAPHIC_CAMERA=1),this.prepassTransparancy&&(t.PREPASS_TRANSP=1),this.dashedLine&&(t.DASHED_LINE=1),this.thickLine&&(t.THICK_LINE=1),this.fogTransparent&&(t.FOG_TRANSPARENT=1),this.normalsToGBuffer&&(r.drawBuffers=!0,t.NORMALS_TO_G_BUFFER=1),this.toonShading&&(t.TOON_SHADING=1),this.defines=t,this.extensions=r}setUberOptions(e){if(void 0!==e)for(const t in e)e.hasOwnProperty(t)&&(this.uberOptions[t]instanceof r.Color?this.uberOptions[t]=e[t].clone():this.uberOptions[t]=e[t])}clone(e){return e?this.createInstance():super.clone()}updateUniforms(){const e=this;Zn.forEach((t=>{e.uniforms.hasOwnProperty(t)&&(e.uberOptions[t]instanceof r.Color||e.uberOptions[t]instanceof r.Matrix4?e.uniforms[t].value=e.uberOptions[t].clone():e.uniforms[t].value=e.uberOptions[t])}))}}Qn.prototype.uberOptions=Kn;const Jn=Qn;function es(e){class t extends e{constructor(){super(...arguments),this.onBeforeRender=t.prototype.onBeforeRender}onBeforeRender(e,t,r,n,s,i){this._onBeforeRender(e,t,r,n,s,i),this._update()}_onBeforeRender(){}_update(){const{material:e}=this;e&&e instanceof Jn&&e.updateUniforms()}}return t}const ts=es(r.Mesh);const rs=class extends ts{constructor(){super(...arguments),this.castShadow=!0,this.receiveShadow=!0}_onBeforeRender(e,t,r,n,s,i){ts.prototype._onBeforeRender.call(this,e,t,r);const{material:o}=this;o&&o.uniforms.invModelViewMatrix&&(this.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,this.matrixWorld),o.uniforms.invModelViewMatrix.value.copy(this.modelViewMatrix).invert(),o.uniforms.nearPlaneValue.value=r.near,o.uniformsNeedUpdate=!0)}},ns=es(r.Mesh);class ss extends ns{constructor(e,t){super(e,t),this.castShadow=!0,this.receiveShadow=!0}static _mvLength=(()=>new r.Vector3)();static _center=(()=>new r.Vector3)();static _modelView=(()=>new r.Matrix4)();_onBeforeRender(e,t,r){ns.prototype._onBeforeRender.call(this,e,t,r);const n=this.geometry,{material:s}=this;if(!n.zClip||!s.uberOptions)return;const i=ss._modelView,o=ss._mvLength,a=ss._center;i.multiplyMatrices(this.matrixWorld,r.matrixWorldInverse);const l=o.setFromMatrixColumn(i,0).length();a.copy(n.boundingSphere.center),this.localToWorld(a),s.uberOptions.zClipValue=r.position.z-a.z-l*(.5*n.boundingSphere.radius)}}const is=ss;class os extends r.Group{constructor(e,t){super(),this.geometry=e;const r=this;r.initialized=!1,this.geometry.addEventListener("update",(()=>{r.update()}))}init(){const{children:e}=this;for(let t=e.length-1;t>=0;--t)this.remove(e[t]);const{items:r,userData:n}=this.geometry;for(let e=0,s=r.length;enew r.Matrix4)();static _ray=(()=>new r.Ray)();constructor(e,t,n,s){super(),this._geometry=e,this._geoParams=t;const i=n.createInstance();t.initMaterial(i),this._material=i,this._transforms=s.length>0?s:[new r.Matrix4];const o=this._createMeshes(e);for(let e=0,t=o.length;ee,adjust:function(e){let t=e>>16&255,r=e>>8&255,n=255&e;return.2126*t+.7152*r+.0722*n>127?(t=3*t/10,r=3*r/10,n=3*n/10):(t=255-3*(255-t)/10,r=255-3*(255-r)/10,n=255-3*(255-n)/10),t<<16|r<<8|n},inverse:function(e){return 255-(e>>16&255)<<16|255-(e>>8&255)<<8|255-(255&e)}};function Ns(e,t){let r;if(Ps.hasOwnProperty(t))r=O.hexColor(Ps[t](e));else{const e=parseInt(t,16);r=!Number.isNaN(e)&&t.toLowerCase().startsWith("0x")?O.hexColor(e):"#000000"}return r}const Ls={serial:e=>e.serial,name:e=>e.getVisualName(),elem:e=>e.element.name,residue:e=>e.residue.getType().getName(),sequence:e=>e.residue.getSequence(),chain:e=>e.residue.getChain().getName(),hetatm:e=>e.isHet(),water:e=>"HOH"===e.residue.getType().getName()||"WAT"===e.residue.getType().getName()},Is=function(e,t){return t.replace(/\{\{(\s*\w+\s*)\}\}/g,(t=>{let r=t.replace(/\s+/g,"");return r=r.substring(2,r.length-2).toLowerCase(),Ls.hasOwnProperty(r)?Ls[r](e):"null"}))};const Os=class extends As{_makeGeoArgs(){const e=this._mode.getLabelOpts();return[this._selection.chunks.length,e]}_build(){const e=this._mode.getLabelOpts(),t=this._selection.chunks,{atoms:r,parent:n}=this._selection,s=this._colorer,i=this._geo;for(let o=0,a=t.length;o{for(let t=0;t<=e;++t){const e=s[t],r=e.clone().sub(l).cross(c);i.addVectors(e,r),o[t]=zs(e,i,c,n)}a.setItem(t,o),a.setColor(t,r)})),a.finalize()}_makeGeoArgs(){return this._segmentsHeight=this._polyComplexity,[ks(1,this._polyComplexity),this._segmentsHeight+1,this._selection.chunks.length]}};const Bs=class extends Ds{_build(){const e=this._geo,t=this._mode.getAromaticOffset();this._buildInner(t,((t,r,n)=>{let s=n[0];for(let r=1;r<=this._segmentsHeight;++r){const i=n[r];e.setSegment(t,r-1,s,i),s=i}e.setColor(t,r)})),e.finalize()}_makeGeoArgs(){return this._segmentsHeight=this._mode.getAromaticArcChunks(),[this._selection.chunks.length,this._segmentsHeight,!0]}};const Us=class extends Cs{raycast(e,t){const{residues:r}=this._selection,n=[];this._mesh.raycast(e,n);const s=this._chunksIdc;for(let e=0,i=n.length;es&&e[t-1]._isValid?t-1:t}function a(t){return t{const t=e.getVisualName();a||t!==i?l||t!==o||(l=e.position):a=e.position})),a&&l||(a=n._firstAtom.position,l=n._lastAtom.position),a&&l){const s=l.clone().sub(a),i=n._wingVector,o=n._controlPoint,c=o.clone().add(i),h=o.clone().sub(s),u=h.clone().add(i);e[r]=[h.x,h.y,h.z],t[r]=[u.x,u.y,u.z],e[++r]=[h.x,h.y,h.z],t[r]=[u.x,u.y,u.z],e[++r]=[o.x,o.y,o.z],t[r]=[c.x,c.y,c.z],++r;const d=o.clone().add(s),p=d.clone().add(i);e[r]=[d.x,d.y,d.z],t[r]=[p.x,p.y,p.z],e[++r]=[d.x,d.y,d.z],t[r]=[p.x,p.y,p.z]}}(c,l,h,e[t]),{centerPoints:c,topPoints:l};t===d?u(t,a(t)):(qs(c,l,h++,e[o(d)]),qs(c,l,h++,e[d]));for(let n=t;n<=r;++n)qs(c,l,h++,e[n]);return p===a(p)?u(r,o(r)):(qs(c,l,h++,e[p]),qs(c,l,h,e[a(p)])),{centerPoints:c,topPoints:l}}const Ks=class{constructor(e,t,r,n,s,i){const o=Zs(e,t,r,i);this._topInterp=Xs(o.topPoints,s),this._centerInterp=Xs(o.centerPoints,s),this._shift=.5/(r-t+2),this._valueStep=(1-2*this._shift)/(2*(r-t+1)*(n-1)),this._segmentsCount=n}prepareMatrices(e,t,n){const s=this._segmentsCount,i=new Array(s),o=new r.Vector2(0,0),a=this._topInterp,l=this._centerInterp;let c=this._shift+this._valueStep*(s-1)*e;for(let e=0;e2&&void 0!==arguments[2]&&arguments[2],l=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const c=n.getResidueColor(e,t);a[o]=e._index,i.setItem(o,r,s,l),i.setColor(o++,c)})),this._chunksIdc=a,i.finalize()}updateToFrame(e){const{parent:t}=this._selection,r=this._mode,n=this._colorer,s=r.getTension(),i=this._geo,o=e.getResidues();let a=0;const l=e.needsColorUpdate(n);Js(this._selection.subdivs,o,this._segmentsHeight,s,r,((e,r)=>{i.setItem(a,r),l&&i.setColor(a,n.getResidueColor(e,t)),a++})),i.finalize()}};const ti=class extends Cs{_makeGeoArgs(){const e=this._selection.subdivs;let t=0;for(let r=0,n=e.length;r1&&0!==t&&(h.lerpVectors(_,g,si/b),u.lerpVectors(_,g,1-si/b)),t*=si,h.addScaledVector(w,t),u.addScaledVector(w,t),o.setItem(d,h,u),o.setColor(d++,i.getAtomColor(m,n),i.getAtomColor(f,n))}}o.finalize(),this._chunksIdc=p}updateToFrame(e){const t=this._selection.chunks,{bonds:n}=this._selection,s=this._mode,i=this._colorer,o=this._geo,a=s.drawMultiorderBonds(),l=s.showAromaticLoops(),c=new r.Vector3,h=new r.Vector3,u=new r.Vector3;let d=0;const p=e.needsColorUpdate(i);for(let r=0,s=t.length;r1&&0!==r&&(h.lerpVectors(_,g,si/b),u.lerpVectors(_,g,1-si/b)),r*=si,h.addScaledVector(w,r),u.addScaledVector(w,r),o.setItem(d,h,u),p&&o.setColor(d,e.getAtomColor(i,m),e.getAtomColor(i,f)),d++}}o.finalize()}}};const oi=class extends Kt{constructor(e,t,r,n,s,i,o,a){super();const l=this;this._complex=r,this._mode=s;const c=r.getAtoms(),h=r.getTransforms();r.forEachComponent((u=>{const d=[];let p=0;if(u.forEachAtom((e=>{l._checkAtom(e,o)&&(d[p++]=e.index)})),0===p)return;const m=new e(t,{atoms:c,chunks:d,parent:r},n,s,h,i,a);m._component=u,l.add(m)}))}_checkAtom(e,t){return e.mask&t}getSubset(e,t){const r=[],{children:n}=this;let s=0;for(let i=0,o=n.length;i{let d=0;const p=[];if(u.forEachResidue((e=>{l._checkResidue(e,o)&&(p[d++]=e._index)})),0===d)return;const m=new e(t,{residues:c,chunks:p,parent:r},n,s,h,i,a);m._component=u,l.add(m)}))}checkResidue(e,t){return e._mask&t}getSubset(e,t){const r=[],{children:n}=this;let s=0;for(let i=0,o=n.length;i{const d=u.getMaskedSubdivSequences(o);let p=0;const m=[];for(let e=0,t=d.length;e{const d=[];let p=0;if(u.forEachBond((e=>{const t=e._left,r=e._right;t.mask&o&&r.mask&o&&(d[p++]=e._index)})),0===p)return;const m=new e(t,{bonds:c,chunks:d,parent:r},n,s,h,i,a);m._component=u,l.add(m)}))}getSubset(e,t){const r=[],{children:n}=this;let s=0;for(let i=0,o=n.length;i{const d=[];let p=0;const m=[];let f=0;u.forEachCycle((e=>{const t=e.atoms;let r=0;for(let e=0,n=t.length;e0&&(m[f++]=e)}));const _=new e(t,{cycles:m,atoms:c,chunks:d,parent:r},n,s,h,i,a);_._component=u,l.add(_)}))}getSubset(e,t){const r=[],{children:n}=this;let s=0;for(let i=0,o=n.length;i0&&l.add(d)}return l}}ur(_i.prototype),_i.prototype.id="__",_i.prototype.depGroups=[];const gi=_i;function yi(){return{lineWidth:this.opts.lineWidth}}class xi extends gi{static id="LN";constructor(e){super(e),this.depGroups=this.depGroups.slice(0);const t=this.depGroups;for(let e=0,r=t.length;e1&&void 0!==arguments[1]&&arguments[1];const r=this.elementColors[e];return void 0!==r||t?r:this.defaultElementColor}getResidueColor(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const r=this.residueColors[e];return void 0!==r||t?r:this.defaultResidueColor}getChainColor(e){let t=e.charCodeAt(0);return t=(31&(t<0?0:t>=256?t-256:t))%this.chainColors.length,this.chainColors[t]}getSecondaryColor(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const r=this.secondaryColors[e];return void 0!==r||t?r:this.defaultSecondaryColor}getSequentialColor(e){const{colors:t}=this,r=t.length;return e<0?t[e%r+r]:t[e%r]}getGradientColor(e,t){const r=this.gradients[t];if(!r)return this.defaultNamedColor;const n=r.length,s=e*(n-1);let i=Math.floor(s);const o=qi(i+1,0,n-1);return i=qi(i,0,n-1),function(e,t,r){const n=1-r;return n*(e>>16&255)+r*(t>>16&255)<<16|n*(e>>8&255)+r*(t>>8&255)<<8|n*(255&e)+r*(255&t)}(r[i],r[o],s-i)}getNamedColor(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const r=this.namedColors[e];return void 0!==r||t?r:this.defaultNamedColor}}t().assign(Zi.prototype,{colors:[16777215,16711680,65280,255,8421504],minRangeColor:0,midRangeColor:8355711,maxRangeColor:16777215,defaultElementColor:16777215,elementColors:{},defaultResidueColor:16777215,residueColors:{},chainColors:[16777215],defaultSecondaryColor:16777215,secondaryColors:{},defaultGradientColor:0,defaultNamedColor:16777215,namedColorsArray:[["indianred",13458524],["lightcoral",15761536],["salmon",16416882],["darksalmon",15308410],["lightsalmon",16752762],["crimson",14423100],["red",16711680],["firebrick",11674146],["darkred",9109504],["pink",16761035],["lightpink",16758465],["hotpink",16738740],["deeppink",16716947],["mediumvioletred",13047173],["palevioletred",14381203],["coral",16744272],["tomato",16737095],["orangered",16729344],["darkorange",16747520],["orange",16753920],["gold",16766720],["yellow",16776960],["lightyellow",16777184],["lemonchiffon",16775885],["lightgoldenrodyellow",16448210],["papayawhip",16773077],["moccasin",16770229],["peachpuff",16767673],["palegoldenrod",15657130],["khaki",15787660],["darkkhaki",12433259],["lavender",15132410],["thistle",14204888],["plum",14524637],["violet",15631086],["orchid",14315734],["fuchsia",16711935],["magenta",16711935],["mediumorchid",12211667],["mediumpurple",9662683],["rebeccapurple",6697881],["blueviolet",9055202],["darkviolet",9699539],["darkorchid",10040012],["darkmagenta",9109643],["purple",8388736],["indigo",4915330],["slateblue",6970061],["mediumslateblue",8087790],["darkslateblue",4734347],["greenyellow",11403055],["chartreuse",8388352],["lawngreen",8190976],["lime",65280],["limegreen",3329330],["palegreen",10025880],["lightgreen",9498256],["mediumspringgreen",64154],["springgreen",65407],["mediumseagreen",3978097],["seagreen",3050327],["forestgreen",2263842],["green",32768],["darkgreen",25600],["yellowgreen",10145074],["olivedrab",7048739],["olive",8421376],["darkolivegreen",5597999],["mediumaquamarine",6737322],["darkseagreen",9419919],["lightseagreen",2142890],["darkcyan",35723],["teal",32896],["aqua",65535],["cyan",65535],["lightcyan",14745599],["paleturquoise",11529966],["aquamarine",8388564],["turquoise",4251856],["mediumturquoise",4772300],["darkturquoise",52945],["cadetblue",6266528],["steelblue",4620980],["lightsteelblue",11584734],["powderblue",11591910],["lightblue",11393254],["skyblue",8900331],["lightskyblue",8900346],["deepskyblue",49151],["dodgerblue",2003199],["cornflowerblue",6591981],["royalblue",4286945],["blue",255],["mediumblue",205],["darkblue",139],["navy",128],["midnightblue",1644912],["cornsilk",16775388],["blanchedalmond",16772045],["bisque",16770244],["navajowhite",16768685],["wheat",16113331],["burlywood",14596231],["tan",13808780],["rosybrown",12357519],["sandybrown",16032864],["goldenrod",14329120],["darkgoldenrod",12092939],["peru",13468991],["chocolate",13789470],["saddlebrown",9127187],["sienna",10506797],["brown",10824234],["maroon",8388608],["white",16777215],["snow",16775930],["honeydew",15794160],["mintcream",16121850],["azure",15794175],["aliceblue",15792383],["ghostwhite",16316671],["whitesmoke",16119285],["seashell",16774638],["beige",16119260],["oldlace",16643558],["floralwhite",16775920],["ivory",16777200],["antiquewhite",16444375],["linen",16445670],["lavenderblush",16773365],["mistyrose",16770273],["gainsboro",14474460],["lightgray",13882323],["silver",12632256],["darkgray",11119017],["gray",8421504],["dimgray",6908265],["lightslategray",7833753],["slategray",7372944],["darkslategray",3100495],["black",0]],namedColors:{},gradients:{rainbow:[255,65535,65280,16776960,16711680],temp:[255,32767,16777215,16744192,16711680],hot:[16777215,16744192,16711680],cold:[16777215,32767,255],"blue-red":[255,16777215,16711680],reds:[16777215,16711680],blues:[16777215,255]}});const{namedColorsArray:Ki,namedColors:Qi}=Zi.prototype;for(let e=0,{length:t}=Ki;e=0?this.opts.carbon:this.palette.getElementColor(r)}getResidueColor(e,t){return this.palette.defaultResidueColor}}ho.prototype.id="EL",ho.prototype.name="Element",ho.prototype.shortName="Element";const uo=ho;class po extends co{static id="RT";getAtomColor(e,t){return this.getResidueColor(e.residue,t)}getResidueColor(e,t){return this.palette.getResidueColor(e._type._name)}}po.prototype.id="RT",po.prototype.name="Residue Type",po.prototype.shortName="Residue";const mo=po;class fo extends co{static id="SQ";getAtomColor(e,t){return this.getResidueColor(e.residue,t)}getResidueColor(e,t){const r=e._chain;if(r.minSequence===Number.POSITIVE_INFINITY&&r.maxSequence===Number.NEGATIVE_INFINITY)return this.palette.defaultNamedColor;const n=r.minSequence,s=r.maxSequence>n?r.maxSequence:n+1;return this.palette.getGradientColor((e._sequence-n)/(s-n),this.opts.gradient)}}fo.prototype.id="SQ",fo.prototype.name="Sequence",fo.prototype.shortName="Sequence";const _o=fo;class go extends co{static id="CH";getAtomColor(e,t){return this.getResidueColor(e.residue,t)}getResidueColor(e,t){return this.palette.getChainColor(e.getChain()._name)}}go.prototype.id="CH",go.prototype.name="Chain",go.prototype.shortName="Chain";const yo=go;class xo extends co{static id="SS";getAtomColor(e,t){return this.getResidueColor(e.residue,t)}getResidueColor(e,t){if(e._type.flags&Ee.Flags.DNA)return this.palette.getSecondaryColor("dna");if(e._type.flags&Ee.Flags.RNA)return this.palette.getSecondaryColor("rna");const r=e.getSecondary();if(r){let e=this.palette.getSecondaryColor(r.type,!0);return void 0===e&&(e=this.palette.getSecondaryColor(r.generic)),e}return this.palette.defaultSecondaryColor}}xo.prototype.id="SS",xo.prototype.name="Secondary Structure",xo.prototype.shortName="Structure";const bo=xo;class wo extends co{static id="UN";getAtomColor(e,t){return this.opts.color}getResidueColor(e,t){return this.opts.color}}wo.prototype.id="UN",wo.prototype.name="Uniform",wo.prototype.shortName="Uniform";const So=wo;class vo extends co{static id="CO";constructor(e){super(e);const t=at.parse(this.opts.subset);this._subsetCached=t.error?at.none():t.selector}getAtomColor(e,t){return this._subsetCached.includesAtom(e)?this.opts.color:this.opts.baseColor}getResidueColor(e,t){const r=this._subsetCached,n=e._atoms;for(let e=0,t=n.length;er.max?1:0:(e.temperature-r.min)/(r.max-r.min),this.palette.getGradientColor(n,r.gradient)):this.palette.defaultGradientColor}getResidueColor(e,t){const{opts:r}=this;if(!r)return this.palette.defaultGradientColor;if(e.temperature){let t=0;return t=r.min===r.max?e.temperature>r.max?1:0:(e.temperature-r.min)/(r.max-r.min),this.palette.getGradientColor(t,r.gradient)}return this.palette.defaultGradientColor}}To.prototype.id="TM",To.prototype.name="Temperature",To.prototype.shortName="Temperature";const Ro=To;class Mo extends co{static id="OC";_getColorByOccupancy(e,t){if(void 0!==e){const r=1-e;return this.palette.getGradientColor(r,t.gradient)}return this.palette.defaultGradientColor}getAtomColor(e,t){const{opts:r}=this;return this._getColorByOccupancy(e.occupancy,r)}getResidueColor(e,t){const{opts:r}=this;return this._getColorByOccupancy(e.occupancy,r)}}Mo.prototype.id="OC",Mo.prototype.name="Occupancy",Mo.prototype.shortName="Occupancy";const Po=Mo;class No extends co{static id="HY";getAtomColor(e,t){return this.getResidueColor(e.residue,t)}getResidueColor(e,t){let r=this.palette.defaultResidueColor;if(void 0!==e._type.hydrophobicity){const t=-4.5,n=4.5;r=this.palette.getGradientColor((e._type.hydrophobicity-t)/(n-t),this.opts.gradient)}return r}}No.prototype.id="HY",No.prototype.name="Hydrophobicity",No.prototype.shortName="Hydrophobicity";const Lo=No;class Io extends co{static id="MO";getAtomColor(e,t){return this.getResidueColor(e.residue,t)}getResidueColor(e,t){const r=e._molecule,n=t.getMoleculeCount();return n>1?this.palette.getGradientColor((r.index-1)/(n-1),this.opts.gradient):this.palette.getGradientColor(0,this.opts.gradient)}}Io.prototype.id="MO",Io.prototype.name="Molecule",Io.prototype.shortName="Molecule";const Oo=Io;class Vo extends co{static id="CB";getAtomColor(e,t){const r=this.opts.color,n=(s=r,(i=this.opts.factor)*(s>>16&255)<<16|i*(s>>8&255)<<8|i*(255&s));var s,i;return e.flags&he.Flags.CARBON?r:n}getResidueColor(e,t){return this.opts.color}}Vo.prototype.id="CB",Vo.prototype.name="Carbon",Vo.prototype.shortName="Carbon";const Do=new hr([uo,mo,_o,yo,bo,So,Co,Eo,Ro,Po,Lo,Oo,Vo]);function ko(e){return new r.Color(e,e,e)}const zo=[{id:"DF",name:"Diffuse",shortName:"Diffuse",uberOptions:{diffuse:ko(1),specular:ko(0),shininess:1,opacity:1},values:{lights:!0,fog:!0,depthWrite:!0,transparent:!1,toonShading:!1}},{id:"SF",name:"Soft Plastic",shortName:"Soft",uberOptions:{diffuse:ko(1),specular:ko(.1),shininess:30,opacity:1},values:{lights:!0,fog:!0,depthWrite:!0,transparent:!1,toonShading:!1}},{id:"PL",name:"Glossy Plastic",shortName:"Glossy",uberOptions:{diffuse:ko(.56),specular:ko(.28),shininess:100,opacity:1},values:{lights:!0,fog:!0,depthWrite:!0,transparent:!1,toonShading:!1}},{id:"ME",name:"Metal",shortName:"Metal",uberOptions:{diffuse:ko(.56),specular:ko(.55),shininess:30,opacity:1},values:{lights:!0,fog:!0,depthWrite:!0,transparent:!1,toonShading:!1}},{id:"TR",name:"Transparent",shortName:"Transparent",uberOptions:{diffuse:ko(1),specular:ko(0),shininess:1,opacity:.5},values:{lights:!0,fog:!0,depthWrite:!0,transparent:!0,toonShading:!1}},{id:"GL",name:"Glass",shortName:"Glass",uberOptions:{diffuse:ko(.5),specular:ko(.65),shininess:100,opacity:.5},values:{lights:!0,fog:!0,depthWrite:!0,transparent:!0,toonShading:!1}},{id:"BA",name:"Backdrop",shortName:"Backdrop",uberOptions:{diffuse:ko(1),specular:ko(0),shininess:1,opacity:1},values:{lights:!1,fog:!1,depthWrite:!1,transparent:!1,toonShading:!1}},{id:"TN",name:"Toon",shortName:"Toon",uberOptions:{diffuse:ko(1),specular:ko(0),shininess:1,opacity:1},values:{lights:!0,fog:!0,depthWrite:!0,transparent:!1,toonShading:!0}},{id:"FL",name:"Flat",shortName:"Flat",uberOptions:{diffuse:ko(1),specular:ko(0),shininess:0,opacity:1},values:{lights:!1,fog:!0,depthWrite:!0,transparent:!1}}],Fo=new hr(zo);function Bo(e,t,r){const n=e.material.createInstance();n.setValues(t);const s=new e.constructor(e.geometry,n);return s.material.needsUpdate=!0,s.applyMatrix4(e.matrix),s.layers.set(r),s}function Uo(e,t,r){const n=function(e,t){const r=[];return e.traverse((e=>{for(let n=0;n{e.applyMatrix4(t[0]);for(let r=1;r{t.material.setValues({prepassTransparancy:!1,fakeOpacity:!1}),t.material.needsUpdate=!0,t.layers.set(sr.LAYERS.TRANSPARENT);const r=Bo(t,e,sr.LAYERS.PREPASS_TRANSPARENT);t.parent.add(r)}))}}(),processColFromPosMaterial:function(){const e={colorFromPos:!0,transparent:!1,colorFromDepth:!1,lights:!1,shadowmap:!1,fog:!1,overrideColor:!1,fogTransparent:!1,attrColor:!1,attrColor2:!1,attrAlphaColor:!1,fakeOpacity:!1};return function(t,n){n instanceof Jn&&Uo(t,[r.Mesh,r.LineSegments],(t=>{const r=Bo(t,e,sr.LAYERS.COLOR_FROM_POSITION);t.parent.add(r)}))}}(),createShadowmapMaterial:function(){const e={colorFromDepth:!0,orthoCam:!0,lights:!1,shadowmap:!1,fog:!1};return function(t,n){n instanceof Jn&&Uo(t,[r.Mesh,r.LineSegments],(t=>{if(!t.receiveShadow&&t.material.shadowmap&&t.material.setValues({shadowmap:!1}),!t.material.lights)return;if(!t.castShadow)return;if(!sr.belongToSelectLayers(t))return;const r=Bo(t,e,sr.LAYERS.SHADOWMAP);r.isShadowmapMesh=!0,t.parent.add(r)}))}}(),removeShadowmapMaterial:function(e,t){t instanceof Jn&&Uo(e,[r.Mesh,r.LineSegments],(e=>{e.isShadowmapMesh&&e.parent.remove(e)}))},forEachMeshInGroup:Go,countTriangles:function(e){let t=0;return Go(e,(e=>{t+=function(e){const t=e.geometry;if(t instanceof r.InstancedBufferGeometry){const e=t.attributes;for(const n in e)if(e.hasOwnProperty(n)&&e[n]instanceof r.InstancedBufferAttribute){const r=e[n];return(t.index?t.index.array.length/3:0)*r.array.length/r.itemSize}return 0}return t instanceof r.BufferGeometry?t.index?t.index.array.length/3:0:t.faces?t.faces.length:0}(e)})),t}},{selectors:Ho}=Yt;const $o=class{constructor(e,t,r,n){const s={clipPlane:z.now.draft.clipPlane,fogTransparent:z.now.bg.transparent,shadowmap:z.now.shadow.on,shadowmapType:z.now.shadow.type};this.index=e,this.mode=t,this.colorer=r,this.selector=n,this.selectorString="",this.count=0,this.material=new Jn,this.material.setValues(s),this.material.setUberOptions({fogAlpha:z.now.fogAlpha}),this.materialPreset=Fo.first,this.needsRebuild=!0,this.visible=!0,this.setMode(t)}markAtoms(e){return this.count=e.markAtoms(this.selector,1<0){t=new r.Group,t.matrixAutoUpdate=!1,t.matrix=this.geo.matrix;for(let e=0;e{e.objects.push(t)})),o=0;o{const t=e._atoms;for(a=0;a{const r=e._atoms;for(let e=0;e2)return w.error("Can only edit fragments with one or two bound atoms."),!1;this._fragmentBoundAtoms=n;const s=1<{e._left.mask&t?0==(e._right.mask&t)&&(r[e._left.index]=1):e._right.mask&t&&(r[e._right.index]=1)}));const n=[],s=Object.keys(r);for(let t=0,r=s.length;t{r.mask&t&&r.position.applyMatrix4(e)}))}}},{selectors:qo}=Yt;function Zo(e,t){Array.isArray(t)||(t=[t]);const[r,n]=t;return new(e.get(r)||e.first)(n)}class Ko extends ar{constructor(e,t){super(e,t),this._complex=t,this._reprList=[],this._repr=null,this._reprListChanged=!0,this._selectionBit=0,this._reprUsedBits=0,this._selectionCount=0,this._selectionGeometry=new r.Group}getBoundaries(){return this._complex.getBoundaries()}release(){this._selectionGeometry.parent&&this._selectionGeometry.remove(this._selectionGeometry),ar.prototype.release.call(this)}getComplex(){return this._complex}getSelectionCount(){return this._selectionCount}getSelectionGeo(){return this._selectionGeometry}getSelectionBit(){return this._selectionBit}getEditor(){return this._editor}resetReps(e){this._complex&&this._complex.clearAtomBits(-1),this._reprListChanged=!0,this._reprUsedBits=0,this._reprList.length=e.length;for(let t=0,r=e.length;t0?this._reprList[0]:null,this._selectionBit=e.length,this._reprUsedBits|=1<=0&&ethis._reprList.length)return w.error(`Rep ${e} does not exist!`),null;if(e===this._reprList.length){const t=this.repAdd(r);return w.warn(`Rep ${e} does not exist! New representation was created.`),{desc:t.desc,index:e,status:"created"}}const n=this._reprList[e],s={selector:n.selectorString,mode:n.mode.identify(),colorer:n.colorer.identify(),material:n.materialPreset.id};if(r){const i=n.change(r,this._complex,Zo(Xi,r.mode),Zo(Do,r.colorer));if(!t().isEmpty(i)){n.needsRebuild=!0;for(const t in i)i.hasOwnProperty(t)&&(s[t]=i[t],w.debug(`rep[${e}].${t} changed to ${i[t]}`));return i.mode&&n.mode.isSurface&&("ultra"===z.now.resolution||"high"===z.now.resolution)&&(w.report('Surface resolution was changed to "medium" to avoid hang-ups.'),z.set("resolution","medium")),{desc:s,index:e,status:"changed"}}}return{desc:s,index:e,status:""}}repGet(e){return(void 0===e||e instanceof Object)&&(e=this.repCurrent()),e<0||e>=this._reprList.length?null:this._reprList[e]}_getFreeReprIdx(){let e=this._reprUsedBits;for(let t=0;t<=Ko.NUM_REPRESENTATION_BITS;++t,e>>=1)if(0==(1&e))return t;return-1}repAdd(e){if(this._reprList.length>=Ko.NUM_REPRESENTATION_BITS)return null;const r=this._getFreeReprIdx();if(r<0)return null;const n=this.buildSelectorFromMask(1<=t||t<=1)return;const r=this._reprList[e];r.unmarkAtoms(this._complex),this._reprUsedBits&=~(1<=this._reprList.length)return;this._reprList[e].show(!t)}select(e,t){t?this._selectionCount+=this._complex.markAtomsAdditionally(e,1<{e.mask&o&&(e.mask&=a,t._selectionCount--)}))):(n._mask|=o,n.forEachAtom((e=>{e.mask&o||(e.mask|=o,t._selectionCount++)})),s.collectMask(),i&&i.collectMask());else if(s||i){const e=s||i;e._mask&o?(e._mask&=a,e.forEachResidue((e=>{e._mask&o&&(e._mask&=a,e.forEachAtom((e=>{e.mask&o&&(e.mask&=a,t._selectionCount--)})),e._mask&=a)}))):(e._mask|=o,e.forEachResidue((e=>{if(!(e._mask&o)){e._mask|=o,e.forEachAtom((e=>{e.mask&o||(e.mask|=o,t._selectionCount++)}));const r=s?e.getMolecule():e.getChain();r&&r.collectMask()}})))}else this.resetSelectionMask()}expandSelection(){const e=this,t=1<{e._left.mask&t?0==(e._right.mask&t)&&(e._right.mask|=r):e._right.mask&t&&(e._left.mask|=r)}));this._complex.forEachAtom((n=>{n.mask&r&&(n.mask=2147483647&n.mask|t,++e._selectionCount)})),this._complex.updateStructuresMask()}shrinkSelection(){const e=this,t=1<{e._left.mask&t?0==(e._right.mask&t)&&(e._left.mask|=r):e._right.mask&t&&(e._right.mask|=r)})),this._complex.forEachAtom((e=>{e.mask&t&&1===e.bonds.length&&(e.mask|=r)}));const n=~(t|r);this._complex.forEachAtom((t=>{t.mask&r&&(t.mask&=n,--e._selectionCount)})),this._complex.updateStructuresMask()}getSelectedComponent(){const e=1<{n.mask&e&&(null===t?t=n.residue._component:t!==n.residue._component&&(r=!0))})),r?null:t}getSelectionCenter(e,t,r){e.set(0,0,0);let n=0;return this._complex.forEachAtom((s=>{t(s,r)&&(e.add(s.position),n++)})),0!==n&&(e.divideScalar(n),e.applyMatrix4(this.matrix),!0)}needsRebuild(){if(this._reprListChanged)return!0;const e=this._reprList;for(let t=0,r=e.length;t{const r=e._complex;if(!r)return void t();let n=!1;setTimeout((()=>{const s=e._reprList,i=ao.get(z.now.palette)||ao.first;let o=!1;for(let t=0,a=s.length;t0&&(n=qo.chain(r),i=i?qo.or(i,n):n),Object.keys(t).length>0)for(const e in t)t.hasOwnProperty(e)&&(n=qo.and(qo.chain(e),qo.residx(s(t[e]))),i=i?qo.or(i,n):n);e.length>0&&(n=qo.serial(s(e)),i=i?qo.or(i,n):n),i||(i=qo.none())}return i}buildSelectorFromMask(e){const t=this._complex,r=[],n={},s=[];return t.forEachChain((t=>{t._mask&e&&r.push(t._name)})),t.forEachResidue((t=>{if(t._mask&e&&!(t._chain._mask&e)){const e=t._chain._name;e in n?n[e].push(t._index):n[e]=[t._index]}})),t.forEachAtom((t=>{t.mask&e&&!(t.residue._mask&e)&&s.push(t.serial)})),this._buildSelectorFromSortedLists(s,n,r)}forSelectedResidues(e){const t=1<{r._mask&t&&e(r)}))}beginComponentEdit(){if(this._editor)return null;const e=new Xo.ComponentEditor(this);return e.begin()?(this._editor=e,e):null}beginFragmentEdit(){if(this._editor)return null;const e=new Xo.FragmentEditor(this);return e.begin()?(this._editor=e,e):null}finalizeEdit(){this._editor=null}setMaterialValues(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;for(let s=0,i=this._reprList.length;s{t instanceof r.Mesh&&(t.material.setValues(e),void 0!==n&&n(t),t.material.needsUpdate=!0)}))}}setUberOptions(e){for(let t=0,r=this._reprList.length;t{e.mask|=n})),this._selectionCount=this._complex.countAtomsByMask(n),this._complex.updateStructuresMask(),this.buildSelectorFromMask(n)}}Ko.NUM_REPRESENTATION_BITS=30;const Qo=Ko,Jo=r.UniformsUtils.merge([{volumeDim:{type:"v3",value:new r.Vector3(512,512,512)},tileTex:{type:"t",value:null},tileTexSize:{type:"v2",value:new r.Vector2(512,512)},tileStride:{type:"v2",value:new r.Vector2(512,512)},boxAngles:{type:"v3",value:new r.Vector3(1,1,1)},delta:{type:"v3",value:new r.Vector3(0,0,0)},_isoLevel0:{type:"v2",value:new r.Vector3(.5,.75,1)},_flipV:{type:"f",value:0},_BFLeft:{type:"t",value:null},_BFRight:{type:"t",value:null},_FFLeft:{type:"t",value:null},_FFRight:{type:"t",value:null},_WFFLeft:{type:"t",value:null},_WFFRight:{type:"t",value:null}}]);function ea(e,t){const n=r.UniformsUtils.clone(t);for(const t in e)n.hasOwnProperty(t)&&(n[t].value=e[t]);return n}function ta(e,t){return{uniforms:ea(e,{}),vertexShader:"varying vec3 pos;\r\n\r\nvoid main() {\r\n // we're assuming local position is in [-0.5, 0.5]\r\n // we need to offset it to be represented in RGB\r\n pos = position.xyz + 0.5;\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n}",fragmentShader:"varying vec3 pos;\r\n\r\nvoid main() {\r\n gl_FragColor = vec4(pos, 0.5);\r\n}",transparent:!1,depthTest:!1,depthWrite:!1,side:t}}class ra extends r.ShaderMaterial{constructor(e){super(ta(e,r.BackSide))}}class na{constructor(e,t,n,s){this.uniforms=ea(e,t),this.vertexShader=n,this.fragmentShader=s,this.transparent=!1,this.depthTest=!1,this.depthWrite=!1,this.side=r.FrontSide}}class sa extends r.ShaderMaterial{constructor(e){const t=r.UniformsUtils.merge([{aspectRatio:{type:"f",value:0},farZ:{type:"f",value:0},tanHalfFOV:{type:"f",value:0},matWorld2Volume:{type:"4fv",value:new r.Matrix4}}]);super(new na(e,t,"varying vec4 volPos;\r\nuniform float aspectRatio;\r\nuniform float farZ;\r\nuniform float tanHalfFOV;\r\nuniform mat4 matWorld2Volume;\r\n\r\nvoid main() {\r\n // rescale plane to fill in the whole far plane area seen from camera\r\n vec3 pos = position.xyz;\r\n pos.x = pos.x * tanHalfFOV * farZ * aspectRatio;\r\n pos.y = pos.y * tanHalfFOV * farZ;\r\n // common transformation\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);\r\n // calc pos in volume CS\r\n volPos = matWorld2Volume * modelMatrix * vec4(pos, 1.0);\r\n // we're assuming local position is in [-0.5, 0.5]\r\n // we need to offset it to be represented in RGB\r\n volPos = volPos + 0.5;\r\n volPos.w = 0.5;\r\n}\r\n","varying vec4 volPos;\r\n\r\nvoid main() {\r\n gl_FragColor = volPos;\r\n}"))}}class ia extends r.ShaderMaterial{constructor(e){super(ta(e,r.FrontSide))}}class oa extends r.ShaderMaterial{constructor(e){const t=new na(e,Jo,"varying vec4 screenSpacePos;\r\n\r\nvoid main() {\r\n screenSpacePos = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n gl_Position = screenSpacePos;\r\n}","uniform mat4 projectionMatrix;\r\n\r\n// 3D volume texture\r\nuniform vec3 volumeDim; // volume dimensions, pixels\r\nuniform sampler2D tileTex; // tiled texture containing all Z-slices of a 3D data\r\nuniform vec2 tileTexSize; // size of tiled texture, pixels\r\nuniform vec2 tileStride; // UV stride between slices in tile tex, pixels\r\n\r\nuniform vec3 boxAngles;//value of angles({x: alpha, y:beta, z:gamma}) types 1 - if angle is obtuse, 0 - if acute\r\nuniform vec3 delta; //Projection box delta's from non-orthogonal origin axes; {x: XY, y : XZ, z: YZ}\r\n\r\nuniform vec3 _isoLevel0;\r\nuniform float _flipV;\r\nuniform sampler2D _BFLeft;\r\nuniform sampler2D _BFRight;\r\nuniform sampler2D _FFLeft;\r\nuniform sampler2D _FFRight;\r\nuniform sampler2D _WFFLeft;\r\nuniform sampler2D _WFFRight;\r\n\r\nvarying vec4 screenSpacePos;\r\n\r\n#define NO_COLOR vec4(0., 0., 0., 0.)\r\n\r\nvec4 sample3DTexture(vec3 texCoord) {\r\n // a pair of Z slices is determined by nearest slice border\r\n float zSliceBorder = floor(texCoord.z * volumeDim.z + 0.5);\r\n float zSliceNumber1 = max(zSliceBorder - 1.0, 0.0);\r\n float zSliceNumber2 = min(zSliceBorder, volumeDim.z - 1.0);\r\n\r\n float rowTiles = floor(tileTexSize.x / tileStride.x);\r\n\r\n // calculate coords in tile texture for both slices\r\n vec2 tileOffset = vec2(mod(zSliceNumber1, rowTiles), floor(zSliceNumber1 / rowTiles));\r\n vec2 texCoordSlice1 = (texCoord.xy * volumeDim.xy + tileOffset * tileStride) / tileTexSize.xy;\r\n tileOffset = vec2(mod(zSliceNumber2, rowTiles), floor(zSliceNumber2 / rowTiles));\r\n vec2 texCoordSlice2 = (texCoord.xy * volumeDim.xy + tileOffset * tileStride) / tileTexSize.xy;\r\n\r\n // bilinear filtering\r\n vec4 colorSlice1 = texture2D(tileTex, texCoordSlice1);\r\n vec4 colorSlice2 = texture2D(tileTex, texCoordSlice2);\r\n float weightSlice2 = texCoord.z * volumeDim.z - (zSliceNumber1 + 0.5);\r\n return mix(colorSlice1, colorSlice2, weightSlice2);\r\n}\r\n\r\nvec4 sample3DTextureInclined(vec3 boxCoord) { // delta:{ x: XY, y : XZ, z: YZ }\r\n vec3 textCoord = boxCoord;\r\n vec2 currDelta = mix(boxCoord.zz, vec2(1., 1.) - boxCoord.zz, boxAngles.yx) * delta.yz;\r\n\r\n textCoord.y = (boxCoord.y - currDelta.y) / (1. - delta.z);\r\n if (textCoord.y < 0.0 || textCoord.y > 1.0)\r\n return NO_COLOR;\r\n\r\n currDelta.x += mix(textCoord.y, 1.0 - textCoord.y, boxAngles.z) * delta.x;\r\n\r\n textCoord.x = (boxCoord.x - currDelta.x) / (1. - delta.x - delta.y);\r\n if (textCoord.x < 0.0 || textCoord.x > 1.0)\r\n return NO_COLOR;\r\n\r\n return sample3DTexture(textCoord);\r\n}\r\n\r\nfloat CalcColor(vec3 iter, vec3 dir) {\r\n float d = 1. / 128.;\r\n vec3 dx = vec3(d, 0.0, 0.0);\r\n vec3 dy = vec3(0.0, d, 0.0);\r\n vec3 dz = vec3(0.0, 0.0, d);\r\n\r\n // #Opt: coordInc.x:(iter + dx).x > 1. ? 0.: sample3DTextureInclined(iter + dx).x,\r\n vec3 coordInc = mix(\r\n vec3(\r\n sample3DTextureInclined(iter + dx).x,\r\n sample3DTextureInclined(iter + dy).x,\r\n sample3DTextureInclined(iter + dz).x\r\n ),\r\n vec3(0. ,0. , 0.),\r\n vec3(floor((iter + dx).x), floor((iter + dy).y), floor((iter + dz).z))\r\n );\r\n\r\n // #Opt: coordDec.x:(iter - dx).x < 0. ? 0.: sample3DTextureInclined(iter - dx).x,\r\n vec3 coordDec = mix(\r\n vec3(0. ,0. , 0.),\r\n vec3(\r\n sample3DTextureInclined(iter - dx).x,\r\n sample3DTextureInclined(iter - dy).x,\r\n sample3DTextureInclined(iter - dz).x\r\n ),\r\n vec3(ceil((iter - dx).x), ceil((iter - dy).y), ceil((iter - dz).z))\r\n );\r\n\r\n vec3 N = normalize(coordInc - coordDec);\r\n float dif = max(0.0, dot(N, dir));\r\n return dif;\r\n}\r\n\r\nvec3 AccuracyIso(vec3 left, vec3 right, float volLeft, float threshold) {\r\n for (int i = 0; i < 5; i++) {\r\n vec3 iterator = 0.5 * (left + right);\r\n float vol = sample3DTextureInclined(iterator).r;\r\n if ((volLeft - threshold) * (vol - threshold) < 0.)\r\n right = iterator;\r\n else\r\n left = iterator;\r\n }\r\n return 0.5 * (left + right);\r\n}\r\n\r\nvec3 CorrectIso(vec3 left, vec3 right, float tr) {\r\n for (int j = 0; j < 5; j++) {\r\n vec3 iterator = 0.5 * (left + right);\r\n float vol = sample3DTextureInclined(iterator).r;\r\n if (vol < tr)\r\n right = iterator;\r\n else\r\n left = iterator;\r\n }\r\n return 0.5 * (left + right);\r\n}\r\n\r\nvec4 GetIso1(vec3 start, vec3 back, float molDist, vec3 dir, float tr, int count) {\r\n float vol, stepSize = (float(count) + 2.) / float(STEPS_COUNT);\r\n vec3 step = stepSize * dir, iterator = start, left, right;\r\n vec4 acc = NO_COLOR;\r\n\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n iterator = iterator + step;\r\n vol = sample3DTextureInclined(iterator).r;\r\n if (length(iterator - back) <= stepSize || (vol > tr))\r\n break;\r\n }\r\n\r\n if (vol > tr)\r\n acc = vec4(CorrectIso(iterator, iterator - step, tr).xyz, 1.);\r\n\r\n return acc;\r\n}\r\n\r\nfloat easeOut(float x0, float x1, float x) {\r\n float t = clamp((x - x0) / (x1 - x0), 0.0, 1.0);\r\n return 1.0 - (1.0 - t) * (1.0 - t);\r\n}\r\n\r\nfloat easeIn(float x0, float x1, float x) {\r\n float t = clamp((x - x0) / (x1 - x0), 0.0, 1.0);\r\n return t * t;\r\n}\r\n\r\nvec3 GetColSimple(float vol) {\r\n float t = easeOut(_isoLevel0.x, _isoLevel0.y, vol);\r\n float s = easeIn(_isoLevel0.y, _isoLevel0.z, vol);\r\n return vec3(0.5, 0.6, 0.7) * (1.0 - t) + 2.0 * vec3(s, 0, 0);\r\n}\r\n\r\nvec4 VolRender(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n vec4 acc = NO_COLOR, iso;\r\n vec3 iterator = start, sumColor = vec3(0., 0., 0.);\r\n float stepSize, alpha, sumAlpha = 0.0, vol, curStepSize, molD;\r\n vec3 step, col, colOld, right;\r\n float tr0 = _isoLevel0.x;\r\n float dif, r, kd, finish;\r\n int count = 0, stopMol = 0;\r\n\r\n for (int k = 0; k < 3; k++) {\r\n stepSize = (float(k) + 2.) / float(STEPS_COUNT);\r\n kd = 140. * tr0 * stepSize;\r\n r = 1. - kd;\r\n step = stepSize * dir;\r\n iso = GetIso1(iterator, back, molDist, dir, tr0, k);\r\n if (iso.a < 0.1 || length(iso.xyz - start) > molDist)\r\n break;\r\n iterator = iso.xyz;\r\n dif = 1.;// CalcColor(iterator, dir);\r\n colOld = GetColSimple(tr0);\r\n curStepSize = stepSize;\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n iterator = iterator + step;\r\n molD = length(iterator - start);\r\n vol = sample3DTextureInclined(iterator).r;\r\n finish = distance(iterator, back) - stepSize;\r\n if (finish < 0.0 || vol < tr0 || (sumAlpha > 0.97) || molD > molDist)\r\n break;\r\n alpha = (1. - r);\r\n col = GetColSimple(vol);\r\n vol = sample3DTextureInclined(iterator - 0.5 * step).r;\r\n vec3 colMid = GetColSimple(vol);\r\n sumColor += (1. - sumAlpha) * (colOld + 4.* colMid + col) * alpha / 6.;\r\n sumAlpha += (1. - sumAlpha) * alpha;// *(1. - 1.0*dif*dif);\r\n colOld = col;\r\n } // for i\r\n\r\n if (finish < 0.0 || sumAlpha > 0.97)\r\n break;\r\n\r\n if (molD > molDist) {\r\n curStepSize = stepSize - (molD - molDist);\r\n right = iterator - (molD - molDist) * dir;\r\n vol = sample3DTextureInclined(right).r;\r\n } else {\r\n vec3 left = iterator - step;\r\n right = CorrectIso(left, iterator, tr0);\r\n curStepSize = distance(left, right);\r\n vol = tr0;\r\n }\r\n\r\n alpha = (1. - r) * curStepSize / stepSize;\r\n dif = 1.;// CalcColor(right, dir);\r\n col = GetColSimple(vol);\r\n vol = sample3DTextureInclined(iterator - 0.5 * curStepSize / stepSize * step).r;\r\n vec3 colMid = GetColSimple(vol);\r\n sumColor += (1. - sumAlpha) * (colOld + 4. * colMid + col) * alpha / 6.;\r\n sumAlpha += (1. - sumAlpha) * alpha;// *(1. - 1.0*dif*dif);\r\n\r\n if (molD > molDist)\r\n break;\r\n } // for k\r\n acc.rgb = 1. * sumColor / sumAlpha;\r\n acc.a = sumAlpha;\r\n return acc;\r\n}\r\n\r\nvec4 VolRender1(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n float stepSize = 1.0 / float(STEPS_COUNT);\r\n float len = length(back - start);\r\n vec3 step = stepSize * dir;\r\n vec3 iterator = start;\r\n float acc = 0.0;\r\n\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n if (float(i) * stepSize > len)\r\n break;\r\n iterator = iterator + step;\r\n if (sample3DTextureInclined(iterator).r > _isoLevel0.x)\r\n acc += 10. * sample3DTextureInclined(iterator).r / float(STEPS_COUNT);\r\n }\r\n\r\n return vec4(1.,1.,1., acc);\r\n}\r\n\r\nvec4 IsoRender(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n vec4 tst = GetIso1(start, back, 2., dir, _isoLevel0.x, 0);\r\n vec4 col = NO_COLOR;\r\n\r\n if (length(tst.xyz - start) < molDist && tst.a > 0.1) {\r\n float dif = CalcColor(tst.xyz, dir);\r\n dif = 0.9 * dif * dif;\r\n col = vec4(dif, dif, dif, 1);\r\n }\r\n return col;\r\n}\r\n\r\nvec4 VolRender2(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n return sample3DTexture(start);\r\n}\r\n\r\nvoid main() {\r\n vec3 tc = screenSpacePos.xyz / screenSpacePos.w * 0.5 + 0.5;\r\n\r\n if (_flipV > 0.0) {\r\n tc.y = 1.0 - tc.y;\r\n }\r\n\r\n vec3 start;\r\n vec3 back;\r\n vec3 molBack;\r\n if (projectionMatrix[0][2] < 0.0) {\r\n start = texture2D(_FFLeft, tc.xy).xyz;\r\n back = texture2D(_BFLeft, tc.xy).xyz;\r\n molBack = texture2D(_WFFLeft, tc.xy).xyz;\r\n } else {\r\n start = texture2D(_FFRight, tc.xy).xyz;\r\n back = texture2D(_BFRight, tc.xy).xyz;\r\n molBack = texture2D(_WFFRight, tc.xy).xyz;\r\n }\r\n\r\n vec3 dir = normalize(back - start);\r\n\r\n float molDist = 2.0;\r\n if (length(molBack) > 0.001) {\r\n molDist = distance(start, molBack);\r\n }\r\n\r\n #ifdef ISO_MODE\r\n gl_FragColor = IsoRender(start, back, molDist, dir);\r\n #else\r\n gl_FragColor = VolRender(start, back, molDist, dir);\r\n #endif\r\n}\r\n");t.transparent=!0,t.depthTest=!0,super(t),this.updateDefines()}updateDefines(){this.defines={ISO_MODE:z.now.modes.VD.isoMode,STEPS_COUNT:100*z.now.modes.VD.polyComplexity[z.now.resolution]},this.needsUpdate=!0}}const aa={BackFacePosMaterial:ra,BackFacePosMaterialFarPlane:sa,FrontFacePosMaterial:ia,VolumeMaterial:oa};class la extends r.Mesh{volumeInfo={};constructor(){const e=new r.BufferGeometry;super(e),this.clipPlane=new r.Plane;const t=new r.Vector3(.5,.5,.5);this.size=t,this.cullFlag=[!0,!0,!0,!0,!0,!0,!0,!0,!1,!1,!1,!1,!1,!1],this.faces=[{indices:[],norm:new r.Vector3(0,0,-1)},{indices:[],norm:new r.Vector3(0,0,1)},{indices:[],norm:new r.Vector3(0,-1,0)},{indices:[],norm:new r.Vector3(0,1,0)},{indices:[],norm:new r.Vector3(-1,0,0)},{indices:[],norm:new r.Vector3(1,0,0)},{indices:[],norm:new r.Vector3(0,0,0)}],this.vertices=[new r.Vector3(-t.x,-t.y,-t.z),new r.Vector3(-t.x,t.y,-t.z),new r.Vector3(t.x,-t.y,-t.z),new r.Vector3(t.x,t.y,-t.z),new r.Vector3(-t.x,-t.y,t.z),new r.Vector3(-t.x,t.y,t.z),new r.Vector3(t.x,-t.y,t.z),new r.Vector3(t.x,t.y,t.z),new r.Vector3(0,0,0),new r.Vector3(0,0,0),new r.Vector3(0,0,0),new r.Vector3(0,0,0),new r.Vector3(0,0,0),new r.Vector3(0,0,0)],e.setAttribute("position",new r.BufferAttribute(new Float32Array(3*this.vertices.length),3)),this.name="VolumeMesh"}static _corners=[[-1,-1,-1,0,4,8],[1,-1,-1,0,5,9],[1,1,-1,1,5,10],[-1,1,-1,1,4,11],[-1,-1,1,2,6,8],[1,-1,1,2,7,9],[1,1,1,3,7,10],[-1,1,1,3,6,11]];static _edges=[[0,1,0,-1,-1],[2,3,0,1,-1],[4,5,0,-1,1],[6,7,0,1,1],[0,3,-1,0,-1],[1,2,1,0,-1],[4,7,-1,0,1],[5,6,1,0,1],[0,4,-1,-1,0],[1,5,1,-1,0],[2,6,-1,1,0],[3,7,1,1,0]];static _edgeIntersections=function(){const e=[];for(let t=0;t<12;++t)e.push(new r.Vector3);return e}();_updateVertices(){const e=la._corners,t=la._edges,n=la._edgeIntersections;let s;const i=this.clipPlane.normal,o=this.clipPlane.constant,a=this.vertices,{size:l}=this,c=[0,0,0,0,0,0,0,0],h=[1,1,1,1,1,1,1,1,1,1,1,1],u=new r.Vector3;let d=null;function p(){if(0===i.x)return 0;const e=-(i.dot(u)+o)/i.x;return-l.x<=e&&e<=l.x?(d.set(e,u.y,u.z),e===l.x?2:e===-l.x?-2:1):0}function m(){if(0===i.y)return 0;const e=-(i.dot(u)+o)/i.y;return-l.y<=e&&e<=l.y?(d.set(u.x,e,u.z),e===l.y?2:e===-l.y?-2:1):0}function f(){if(0===i.z)return 0;const e=-(i.dot(u)+o)/i.z;return-l.z<=e&&e<=l.z?(d.set(u.x,u.y,e),e===l.z?2:e===-l.z?-2:1):0}for(let e=0;e<12;++e){const r=t[e];d=n[e],u.set(r[2],r[3],r[4]),u.multiply(l);let s=0;0===r[2]&&(s=p()),0===r[3]&&(s=m()),0===r[4]&&(s=f()),-2===s?c[r[0]]=1:2===s?c[r[1]]=1:0===s&&(h[e]=0)}const _={indices:[],norm:i.clone().negate()};let g=8;for(s=0;s<8;++s)1===c[s]&&(a[g].set(e[s][0],e[s][1],e[s][2]).multiply(l),_.indices.push(g++),h[e[s][3]]=0,h[e[s][4]]=0,h[e[s][5]]=0);for(s=0;s<12;++s)1===h[s]&&(a[g].copy(n[s]),_.indices.push(g++));this.faces[6]=_;const y=new r.Vector3,x=new r.Vector3;for(this.clipPlane.coplanarPoint(x),s=0;s=0):s<8+_.indices.length&&(this.cullFlag[s]=!0);const b=this.geometry.getAttribute("position");let w=0;for(s=0;se.z===-i.z)),this._collectVertices(this.faces[1],(e=>e.z===i.z)),this._collectVertices(this.faces[2],(e=>e.y===-i.y)),this._collectVertices(this.faces[3],(e=>e.y===i.y)),this._collectVertices(this.faces[4],(e=>e.x===-i.x)),this._collectVertices(this.faces[5],(e=>e.x===i.x));const o=new r.Vector3,a=new r.Vector3,l=new r.Vector3;for(t=0;t=3&&(c+=3*(n.indices.length-2));let h=0;const u=new Uint16Array(c);for(t=0;t(s+e*n.sd)/i;this.material.uniforms._isoLevel0.value.set(o(e),o(t),o(r))}static _nearClipPlaneOffset=.2;static _pos=(()=>new r.Vector3)();static _norm=(()=>new r.Vector3)();static _norm4D=(()=>new r.Vector4)();static _matrixWorldToLocal=(()=>new r.Matrix4)();static _clipPlane=(()=>new r.Plane)();rebuild(e){const t=la._nearClipPlaneOffset,r=la._pos,n=la._norm,s=la._norm4D,i=la._matrixWorldToLocal,o=la._clipPlane;this._updateIsoLevel(),e.getWorldDirection(n),e.getWorldPosition(r),r.addScaledVector(n,e.near+t),i.copy(this.matrixWorld).invert(),r.applyMatrix4(i),s.set(n.x,n.y,n.z,0),s.applyMatrix4(i),n.copy(s),n.normalize(),o.setFromNormalAndCoplanarPoint(n,r),this.clipPlane.equals(o)||(this.clipPlane=o.clone(),this._updateVertices(),this._updateIndices())}}const ca=la;class ha{static _projectionTable={XY:["x",2],XZ:["y",1],YZ:["z",0]};constructor(e,t){const{delta:n}=t,{obtuseAngle:s}=t,i=new r.Vector3;e.getSize(i),i.multiplyScalar(.5);const o=this._getBaseVertices(n,s),a=new r.BufferGeometry,l=[];for(let e=0;e<4;e++)l.push(o[e].clone().multiply(i)),l.push(o[(e+1)%4].clone().multiply(i));const c=new r.Vector3(2*i.x*(1-n.x-n.y),0,0);for(let e=0;e<8;e++)l.push(l[e].clone().add(c));for(let e=0;e<4;e++)l.push(l[2*e].clone()),l.push(l[2*e+8].clone());const h=new r.Vector3;e.getCenter(h),l.forEach((e=>e.add(h)));const u=function(e){const t=e.length,r=new Float32Array(3*t);for(let n=0;n{const i=e[n[r][0]];return(-.5*(s-1)+s*t[n[r][1]])*i};return[new r.Vector3(2*(s("XZ",1)+s("XY",1))-1,2*s("YZ",1)-1,-1),new r.Vector3(2*(s("XZ",-1)+s("XY",1))-1,2*s("YZ",-1)-1,1),new r.Vector3(2*(s("XZ",-1)+s("XY",-1))-1,1-2*s("YZ",1),1),new r.Vector3(2*(s("XZ",1)+s("XY",-1))-1,1-2*s("YZ",-1),-1)]}getMesh(){return this._lines}}const ua=ha;const da=class{constructor(e,t,n){const s=this._initPlaneGeo(t,n),i=new aa.BackFacePosMaterialFarPlane;this._plane=new fs.Mesh(s,i),this._plane.frustumCulled=!1,this._plane.doubleSided=!0;const o=new r.Matrix4;this._plane._onBeforeRender=function(t,n,s,i,a,l){const{material:c}=this;if(!e||!c)return;const h=new r.Vector4(0,0,-(s.far-.1),1);h.applyMatrix4(s.matrixWorld),this.matrix.identity(),this.matrix.makeTranslation(h.x,h.y,h.z),this.matrixWorld.copy(this.matrix),this.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,this.matrixWorld),this.normalMatrix.getNormalMatrix(this.modelViewMatrix);const u=e.matrixWorld;o.copy(u).invert(),c.uniforms.aspectRatio.value=s.aspect,c.uniforms.farZ.value=s.far,c.uniforms.tanHalfFOV.value=Math.tan(.5*r.MathUtils.DEG2RAD*s.fov),c.uniforms.matWorld2Volume.value=o},this._plane.layers.set(sr.LAYERS.VOLUME_BFPLANE)}_initPlaneGeo(e,t){const n=new r.BufferGeometry;e=e||1,t=t||1;const s=new Float32Array([-.5*e,.5*t,0,.5*e,.5*t,0,-.5*e,-.5*t,0,.5*e,-.5*t,0]);return n.setAttribute("position",new r.BufferAttribute(s,3)),n.setIndex([0,2,1,2,3,1]),n}getMesh(){return this._plane}};const pa=class extends ar{constructor(e,t){super(e,t),this._mesh=new ca,this._mesh.setDataSource(t),this.add(this._mesh),this._frame=new ua(this.getBoundaries().boundingBox,this._mesh.volumeInfo),this.add(this._frame.getMesh()),this.showFrame(z.now.modes.VD.frame),this._farPlane=new da(this._mesh,2,2),this.add(this._farPlane.getMesh())}getBoundaries(){const e=this._dataSource.getBox(),t=new r.Sphere;return e.getBoundingSphere(t),{boundingBox:e,boundingSphere:t}}getMesh(){return this._mesh}showFrame(e){this._frame.getMesh().material.visible=e}};const ma=class extends hr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],["types"])}find(e){let t=[];if(e.type)t=this._dict.types[e.type.toLowerCase()]||[];else if(e.source)return this._list.filter((t=>t.canProbablyLoad&&t.canProbablyLoad(e.source)));return[...t]}};class fa extends g{constructor(e,t){super(),this._source=e,this._options=t||{},this._abort=!1,this._agent=null}load(){return Promise.reject(new Error("Loading from this source is not implemented"))}abort(){this._abort=!0,this._agent&&this._agent.abort()}static extractName(e){}}ur(fa.prototype);class _a extends fa{constructor(e,t){super(e,t),t=this._options,this._binary=!0===t.binary}load(){return new Promise(((e,t)=>{if(this._abort)throw new Error("Loading aborted");const r=this._source,n=this._agent=new FileReader;n.addEventListener("load",(()=>{e(n.result)})),n.addEventListener("error",(()=>{t(n.error)})),n.addEventListener("abort",(()=>{t(new Error("Loading aborted"))})),n.addEventListener("progress",(e=>{this.dispatchEvent(e)})),this._binary?n.readAsArrayBuffer(r):n.readAsText(r)}))}static canProbablyLoad(e){return File&&e instanceof File||Blob&&e instanceof Blob}static extractName(e){return e&&e.name}}_a.types=["file","blob"];const ga=/^(https?|ftp):\/\//i;class ya extends fa{constructor(e,t){super(e,t),t=this._options,this._binary=!0===t.binary}load(){return new Promise(((e,t)=>{if(this._abort)throw new Error("Loading aborted");const r=this._source,n=this._agent=new XMLHttpRequest;n.addEventListener("load",(()=>{200===n.status?e(n.response):t(new Error(`HTTP ${n.status} while fetching ${r}`))})),n.addEventListener("error",(()=>{t(new Error("HTTP request failed"))})),n.addEventListener("abort",(()=>{t(new Error("Loading aborted"))})),n.addEventListener("progress",(e=>{this.dispatchEvent(e)})),n.open("GET",r),this._binary?n.responseType="arraybuffer":n.responseType="text",n.send()}))}static canProbablyLoad(e){return t().isString(e)&&ga.test(e)}static extractName(e){if(e){const t=(e.indexOf("?")+1||e.lastIndexOf("#")+1||e.length+1)-1;return e.slice(e.lastIndexOf("/",t)+1,t)}}}ya.types=["url"];class xa extends fa{load(){return new Promise((e=>{if(this._abort)throw new Error("Loading aborted");e(this._source)}))}static canProbablyLoad(e){return!1}}xa.types=["immediate"];const ba=new ma([_a,ya,xa]);const wa=class extends hr{constructor(){super(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],["formats","extensions"])}find(e){let t=[];return e.format?t=this._dict.formats[e.format.toLowerCase()]||[]:e.ext&&(t=this._dict.extensions[e.ext.toLowerCase()]||[]),0===t.length&&!e.format&&e.data?this._list.filter((t=>t.canProbablyParse&&t.canProbablyParse(e.data))):[...t]}};class Sa{constructor(e,t){this._data=e,this._options=t||{},this._abort=!1}parseSync(){throw new Error("Parsing this type of data is not implemented")}parse(){return new Promise(((e,t)=>{setTimeout((()=>{try{return this._abort?t(new Error("Parsing aborted")):e(this.parseSync())}catch(e){return t(e)}}))}))}getModel(){return this.model._parseHeader(this._data),this.model}abort(){this._abort=!0}}ur(Sa.prototype);class va{constructor(){this.matrices=[],this._matrix=null,this._matrixIndex=-1}parse(e){let t=this._matrix;if(" SMTRY"===e.readString(12,18)){const n=e.readCharCode(19)-49,s=e.readString(20,80).trim().split(/\s+/),i=parseInt(s[0],10);null!==this._matrix&&i===this._matrixIndex||(this._matrixIndex=i,this._matrix=t=new r.Matrix4,this.matrices[this.matrices.length]=t);const{elements:o}=t;o[n]=parseFloat(s[1]),o[n+4]=parseFloat(s[2]),o[n+8]=parseFloat(s[3]),o[n+12]=parseFloat(s[4])}}}va.prototype.id=290;const Ca=va,{Assembly:Aa}=Yt;class Ea{constructor(e){this._complex=e,this.assemblies=[],this._assembly=null,this._matrix=null,this._matrixIndex=-1}parse(e){let t=this._assembly,n=this._matrix;if(t&&" BIOMT"===e.readString(12,18)){const s=e.readCharCode(19)-49,i=e.readString(20,80).trim().split(/\s+/),o=parseInt(i[0],10);null!==this._matrix&&o===this._matrixIndex||(this._matrixIndex=o,this._matrix=n=new r.Matrix4,t.addMatrix(n));const{elements:a}=n;a[s]=parseFloat(i[1]),a[s+4]=parseFloat(i[2]),a[s+8]=parseFloat(i[3]),a[s+12]=parseFloat(i[4])}else if(t&&"CHAINS:"===e.readString(35,41)){const r=e.readString(42,80).split(",");for(let e=0,n=r.length;e0&&t.addChain(n)}}else"BIOMOLECULE:"===e.readString(12,23)&&(this._matrix=null,this._matrixIndex=-1,this._assembly=t=new Aa(this._complex),this.assemblies.push(t))}}Ea.prototype.id=350;const Ta=Ea;const Ra=class{constructor(e){this._data=e,this._start=0,this._nextCR=-1,this._nextLF=-1,this._next=-1,this._end=e.length,this.next()}readLine(){return this._data.slice(this._start,this._next)}readChar(e){return(e=this._start+e-1)=this._end}next(){const e=this._next+1;this._start=ethis._nextCR&&(this._nextCR=(this._data.indexOf("\r",this._start)+1||this._end+1)-1),this._start>this._nextLF&&(this._nextLF=(this._data.indexOf("\n",this._start)+1||this._end+1)-1),this._next=this._nextCR+1t&&o.addBond(t,r,0,Oa.BondType.UNKNOWN,!0),n&&n>t&&o.addBond(t,n,0,Oa.BondType.UNKNOWN,!0),s&&s>t&&o.addBond(t,s,0,Oa.BondType.UNKNOWN,!0),i&&i>t&&o.addBond(t,i,0,Oa.BondType.UNKNOWN,!0)}_parseCOMPND(e){const t=e.readString(11,80),r=t.indexOf(":");if(this._compndCurrToken=r>0?t.substring(0,r).trim():this._compndCurrToken,"MOL_ID"===this._compndCurrToken)this._molecule={_index:"",_chains:[]},this._molecule._index=parseInt(t.substring(r+1,t.indexOf(";")),10),this._molecules.push(this._molecule);else if("MOLECULE"===this._compndCurrToken&&null!=this._molecule)this._molecule._name=t.substring(r+1,t.indexOf(";")).trim();else if("CHAIN"===this._compndCurrToken&&null!=this._molecule){let e=t.substring(r+1,80).trim();const n=e[e.length-1];";"!==n&&","!==n||(e=e.slice(0,-1)),e=e.replace(/\s+/g,"");const s=e.split(",");this._molecule._chains=this._molecule._chains.concat(s)}}_parseREMARK(e){const r=e.readInt(8,10);let n=this._remarks[r];if(t().isUndefined(n)){const e=ka[r];t().isFunction(e)&&(this._remarks[r]=n=new e(this._complex))}t().isUndefined(n)||n.parse(e)}_parseHELIX(e){this._parseSTRUCTURE(e,[20,22,32,34],(e=>{this._complex.addHelix(e),this._complex.structures.push(e)}))}_parseSHEET(e){this._parseSTRUCTURE(e,[22,23,33,34],(e=>{this._complex.addSheet(e)}))}_parseSTRUCTURE(e,t,r){const n=e.readInt(8,10),s=e.readString(12,14).trim(),i=e.readString(41,70).trim(),o=e.readInt(72,76),a=e.readInt(39,40),l=e.readInt(15,16),c=e.readInt(42,45),h=e.readInt(57,60),u=e.readString(t[0],t[2]+1).charCodeAt(0),d=e.readString(t[2],t[2]+1).charCodeAt(0),p=e.readInt(t[1],t[1]+3);let m=e.readString(t[1]+4,t[1]+4),f=0;m.length>0&&(f=m.charCodeAt(0));const _=e.readInt(t[3],t[3]+3);m=e.readString(t[3]+4,t[3]+4);let g,y=0;m.length>0&&(y=m.charCodeAt(0));let x=this._sheet;if(83===e.readCharCode(1)){null!==x&&x.getName()!==s&&(x=null,this._sheet=null),null===x?(this._sheet=g=new La(s,l),r(g)):g=x;const e=new Ia(g,this._complex.getUnifiedSerial(u,p,f),this._complex.getUnifiedSerial(d,_,y),a,c,h);g.addStrand(e),this._complex.structures.push(e)}else g=new Na(a,this._complex.getUnifiedSerial(u,p,f),this._complex.getUnifiedSerial(d,_,y),n,s,i,o),r(g)}_parseHEADER(e){const{metadata:t}=this._complex;t.classification=e.readString(11,50).trim(),t.date=e.readString(51,59).trim();const r=e.readString(63,66).trim();t.id=r,r&&(this._complex.name=r),t.format="pdb"}_parseTITLE(e){const{metadata:t}=this._complex;t.title=t.title||[];const r=e.readInt(9,10)||1;t.title[r-1]=e.readString(11,80).trim()}static tagParsers=(()=>({HEADER:za.prototype._parseHEADER,"TITLE ":za.prototype._parseTITLE,"ATOM ":za.prototype._parseATOM,HETATM:za.prototype._parseATOM,ENDMDL:za.prototype._parseENDMDL,CONECT:za.prototype._parseCONECT,COMPND:za.prototype._parseCOMPND,REMARK:za.prototype._parseREMARK,"HELIX ":za.prototype._parseHELIX,"SHEET ":za.prototype._parseSHEET,"ATOM 1":za.prototype._parseATOM,"ATOM 2":za.prototype._parseATOM,"ATOM 3":za.prototype._parseATOM,"ATOM 4":za.prototype._parseATOM,"ATOM 5":za.prototype._parseATOM,"ATOM 6":za.prototype._parseATOM,"ATOM 7":za.prototype._parseATOM,"ATOM 8":za.prototype._parseATOM,"ATOM 9":za.prototype._parseATOM}))();parseSync(){const e=new Ra(this._data),r=this._complex=new Ma;for(;!e.end();){const r=e.readString(1,6),n=za.tagParsers[r];t().isFunction(n)&&n.call(this,e),e.next()}if(this._finalize(),this._serialAtomMap=null,this._sheet=null,this._residue=null,this._chain=null,this._complex=null,0===r.getAtomCount())throw new Error("The data does not contain valid atoms");return r}}za.formats=["pdb"],za.extensions=[".pdb",".ent"];const Fa=za,{Complex:Ba,Element:Ua,SGroup:Ga,Bond:ja}=Yt,Ha={A:0,S:1,D:2,T:3},$a=/\s*<\?xml\b[^?>]*\?>\s*<(?:cml|molecule)\b/i;class Wa extends Sa{constructor(e,t){super(e,t),this._complex=null,this._residue=null,this._serialAtomMap=null,this._modelId=1,this._lastMolId=-1,this._readOnlyOneMolecule=!1,this._options.fileType="cml"}static canProbablyParse(e){return t().isString(e)&&$a.test(e)}_rebuidBondIndexes(e,t){const r=e.length;for(let n=0;n1&&o.splice(1,o.length-1),o.forEach((e=>{const r=function(e){let r,n=[];if(e.molecule&&e.molecule.atomArray&&e.molecule.atomArray.atom)Array.isArray(e.molecule.atomArray.atom)?n=e.molecule.atomArray.atom:n.push(e.molecule.atomArray.atom);else if(!e.molecule){return{atomLabels:null,labelsCount:1}}e.molecule.molecule&&s._extractSGroups(e.molecule.molecule,n);let i=n.length;for(let e=0;e1)a[e].order=s;else{const r=Ha[t];void 0!==r&&(a[e].order=r,"A"===t&&(a[e].type=ja.BondType.AROMATIC))}}i=n.length;for(let e=0;e0&&i.push(r)})),i}_packLabel(e,t){return(t<<16)+e}_unpackLabel(e){return{molId:e>>>16,compId:65535&e}}_breadWidthSearch(e,t){const r=new Array(e.length);let n;for(n=0;n0;){i++;let a=-1;for(n=0;n0;){const t=s.shift();if(t)for(let n=0;n=0){const s=[Math.min(e,t),Math.max(e,t)];this._complex.addBond(s[0],s[1],r,n,!0)}}_fixBondsArray(){const e=this._serialAtomMap={},t=this._complex,r=t._atoms;for(let t=0,n=r.length;to[e]-o[t])),a=0;a{r.curr=2,0===r.count&&(r.count=1);for(let n=0;n{r+=e.getAtomCount()})),r<=0)throw new Error("The data does not contain valid atoms");if(e.length>1){const t=new Ba;return t.joinComplexes(e),t.originalCML=e[0].originalCML,t}return 1===e.length?e[0]:new Ba}}Wa.formats=["cml"],Wa.extensions=[".cml"];const Ya=Wa;var Xa=s(660),qa=s.n(Xa);const{Complex:Za,Chain:Ka,Atom:Qa,Element:Ja,Helix:el,Sheet:tl,Strand:rl,Bond:nl,Assembly:sl,Molecule:il}=Yt;class ol{constructor(e){this._original=Array.from(e),this._original.sort(),this._sum=0;for(let e=0;e=this._complex._atoms.length)return;const r=Math.min(e.atomIndex1,e.atomIndex2);this._complex.addBond(this._complex._atoms[r],this._complex._atoms[t],e.bondOrder,nl.BondType.UNKNOWN,!0)}_updateSecStructure(e,r,n){const s=[3,-1,1,-1,5];if(!t().isUndefined(n)&&n.secStruct===this._ssType)return r._secondary=this._ssStruct,void(this._ssStruct&&(this._ssStruct.term=r));if(!t().isUndefined(n)){const t=ll[n.secStruct];this._ssType=n.secStruct,this._ssStart=r;let i=null;switch(this._ssType){case-1:case 7:break;case 0:case 2:case 4:i=new el(s[this._ssType],r,r,0,"","",0),e._helices.push(i);break;case 3:{const t=new tl("",0);e._sheets.push(t),i=new rl(t,r,r,0,null,null);break}default:void 0!==t&&(i=new Oe(t,r,r))}this._ssStruct=i,r._secondary=i,i&&e.structures.push(i)}}_updateMolecules(e){const t=e.entityList;if(!t)return;const r=e.chainsPerModel[0];for(let e=0;e=r)continue;const n=this._complex._chains[t];i=i.concat(n._residues.slice())}const o=new il(this._complex,n.description,e+1);o.residues=i,this._complex._molecules[e]=o}}_traverse(e){const t=this,{metadata:r}=this._complex;r.id=e.structureId,r.title=[],r.title[0]=e.title,r.date=e.releaseDate,r.format="mmtf";const n={onModel(e){t._onModel(e)},onChain(e){t._onChain(e)},onGroup(e){t._onGroup(e)},onAtom(e){t._onAtom(e)},onBond(e){t._onBond(e)}};this._ssType=-1,this._ssStruct=null,this._ssStart=null,qa().traverse(e,n),this._updateSecStructure(this._complex),this._updateMolecules(e)}_linkAtomsToResidues(){for(let e=0;e=t)continue;const s=this._complex._chains[r];for(let e=0;e=s||pl(e.charCodeAt(r+1))))return++c,void++r;if(a&&59===o){n=r;let i=0;do{if(n=ml(10,e,n+1),-1===n)throw new dl("Unterminated text block found",l,c);++i}while(n+1=s);return t=e.substring(r+1,n).replace(/\r/g,""),r=n+2,l+=i,c=1,a=!1,t}if(39===o||34===o){n=r;do{if(n=ml(o,e,n+1),-1===n)throw new dl("Unterminated quoted string found",l,c)}while(n+10){for(let e=0;e0&&r.addChain(n[t])}r.matrices=s,e.units.push(r)}}}Ml.formats=["cif","mmcif"],Ml.extensions=[".cif",".mmcif"];const Pl=Ml,Nl=0,Ll=1,Il=2,Ol=3;const Vl=class{_xyz2crs=[];_origin=(()=>new r.Vector3(0,0,0))();constructor(){this._header={},this._boxSize=new r.Vector3,this._boxStart=new r.Vector3,this._header.delta={},this._header.extent=[],this._header.nstart=[],this._header.grid=[],this._header.crs2xyz=[],this._header.cellDims=new r.Vector3,this._header.angles=[],this._header.origin=new r.Vector3(0,0,0),this._header.dmin=0,this._header.dmean=0,this._header.dmax=0}_typedCheck(){if(t().isTypedArray(this._buff))this._buff=this._buff.buffer;else if(!t().isArrayBuffer(this._buff))throw new TypeError("Expected ArrayBuffer or TypedArray")}_fillHeader(e,t){for(const r in e)if(e.hasOwnProperty(r))switch(e[r][0]){case Nl:this._header[r]=t[e[r][1]][e[r][2]];break;case Il:this._parseArray(this._header[r],t[e[r][1]],e[r][2]);break;case Ll:this._parseVector(this._header[r],t[e[r][1]],e[r][2]);break;case Ol:this._header[r]=new Uint8Array(t[e[r][1]],4*[e[r][2]],4*[e[r][3]])}}_parseVector(e,t,r){[e.x,e.y,e.z]=[t[r],t[r+1],t[r+2]]}_parseArray(e,t,r){e[0]=t[r],e[1]=t[r+1],e[2]=t[r+2]}_parseHeader(e){}_setAxisIndices(){}_setOrigins(){}_getAxis(){const e=this._header,t=e.cellDims.x/e.grid[0],n=e.cellDims.y/e.grid[1],s=e.cellDims.z/e.grid[2],[i,o,a]=e.angles,l=Math.cos(o),c=(Math.cos(i)-Math.cos(o)*Math.cos(a))/Math.sin(a),h=Math.sqrt(1-l*l-c*c);return[new r.Vector3(t,0,0),new r.Vector3(Math.cos(a)*n,Math.sin(a)*n,0),new r.Vector3(l*s,c*s,h*s)]}_getXYZdim(){return[this._header.extent[this._xyz2crs[0]],this._header.extent[this._xyz2crs[1]],this._header.extent[this._xyz2crs[2]]]}_getVolumeInfo(){const e=t().pick(this._header,["dmean","dmin","dmax","sd","delta"]);return e.obtuseAngle=this._header.angles.map((e=>Number(e>=Math.PI/2))),e}_setBoxParams(e,t,n){let s=0,i=0;const[o,a,l]=this._header.angles;l>=Math.PI/2&&(s+=Math.abs(t.x)),a>=Math.PI/2&&(s+=Math.abs(n.x)),o>=Math.PI/2&&(i+=Math.abs(n.y)),this._boxStart=new r.Vector3(this._origin.x-s,this._origin.y-i,this._origin.z),this._boxSize=new r.Vector3(Math.abs(e.x)+Math.abs(t.x)+Math.abs(n.x),Math.abs(t.y)+Math.abs(n.y),Math.abs(n.z));const c=(e,t)=>Math.abs(e[t])/this._boxSize[t];this._header.delta.x=c(t,"x"),this._header.delta.y=c(n,"x"),this._header.delta.z=c(n,"y")}_getXYZbox(){return new r.Box3(this._boxStart.clone(),this._boxStart.clone().add(this._boxSize))}_toXYZData(){}parse(e){return this._parseHeader(e),this._setOrigins(),new Wt(Float32Array,this._getXYZdim(),this._getXYZbox(),1,this._toXYZData(),this._getVolumeInfo())}},Dl={extent:[Il,"u32",0],type:[Nl,"u32",3],nstart:[Il,"i32",4],grid:[Il,"u32",7],cellDims:[Ll,"f32",10],angles:[Il,"f32",13],crs2xyz:[Il,"i32",16],dmin:[Nl,"f32",19],dmax:[Nl,"f32",20],dmean:[Nl,"f32",21],ispg:[Nl,"u32",22],nsymbt:[Nl,"u32",23],lksflg:[Nl,"u32",24],customData:[Ol,"buffer",25,9],origin:[Ll,"f32",34],map:[Ol,"buffer",52,1],machine:[Nl,"u32",53],sd:[Nl,"f32",54],nlabel:[Nl,"f32",55],label:[Ol,"buffer",56,200]};class kl extends Vl{_parseHeader(e){this._buff=e,this._typedCheck();const t={};t.u32=new Uint32Array(this._buff,0,56),t.i32=new Int32Array(this._buff,0,56),t.f32=new Float32Array(this._buff,0,56),t.buffer=this._buff;const r=this._header;this._fillHeader(Dl,t),r.angles.forEach(((e,t,r)=>{r[t]*=Math.PI/180}))}_setAxisIndices(){const e=this._header;0===e.cellDims.x&&0===e.cellDims.y&&0===e.cellDims.z&&e.cellDims.set(1,1,1);const{crs2xyz:t}=this._header;0===t[0]&&0===t[1]&&0===t[2]&&(t[0]=1,t[1]=2,t[2]=3);const r=this._xyz2crs;r[t[0]-1]=0,r[t[1]-1]=1,r[t[2]-1]=2}_setOrigins(){const[e,t,r]=this._getAxis();this._setAxisIndices();const n=this._header,s=this._xyz2crs;if(0===n.origin.x&&0===n.origin.y&&0===n.origin.z?(this._origin.addScaledVector(e,n.nstart[s[0]]),this._origin.addScaledVector(t,n.nstart[s[1]]),this._origin.addScaledVector(r,n.nstart[s[2]])):this._origin=n.origin,e.multiplyScalar(n.extent[s[0]]-1),t.multiplyScalar(n.extent[s[1]]-1),r.multiplyScalar(n.extent[s[2]]-1),2!==n.type)throw new Error(`CCP4: Unsupported format ${n.type}`);this._data=new Float32Array(this._buff,1024+n.nsymbt,n.extent[0]*n.extent[1]*n.extent[2]),this._setBoxParams(e,t,r)}_toXYZData(){const e=this._header,t=this._data,r=this._xyz2crs,n=new Float32Array(t.length),s=this._getXYZdim(),i=s[0],o=s[1];let a=0;const l=[];let c,h,u;for(l[2]=0;l[2]=this._strings.length?(this._currentStart=this._strings.length-1,this._currentStringIndx=this._strings.length-1):(this._currentStart=e,this._currentStringIndx=e)}getNextString(){return this._strings[++this._currentStringIndx]}getCurrentString(){return this._strings[this._currentStringIndx]}getStringFromStart(e){return this._currentStringIndx=this._currentStart+e,this._strings[this._currentStart+e]}findNextDataItem(){let e=this.getNextString(),r=!1;for(;!t().isUndefined(e)&&"$$$$"!==e.trim();){if(e.match(/>\s+<(.*)>/)){r=!0;break}e=this.getNextString()}return r}findNextCompoundStart(){let e=this.getCurrentString();for(;!t().isUndefined(e)&&"$$$$"!==e.trim();)e=this.getNextString();return this.setStart(++this._currentStringIndx),this.probablyHaveDataToParse()}probablyHaveDataToParse(){return this._currentStringIndx\s+<(.+)>.*/,nc=/.*($$$$).*|.*>\s+<(.+)>.*/,sc="sdf",ic="mol",oc=["name","id","title"],ac={name:["PUBCHEM_IUPAC_TRADITIONAL_NAME",/PUBCHEM_(.+)_NAME/,/(.+)name/,/(.+)NAME/],id:["PUBCHEM_COMPOUND_CID","id","ID",/.*CID/,/.*ID/,/.*id/],title:["msg","MSG","message","title","description","desc"]};class lc extends Sa{constructor(e,t){super(e,t),this._format="sdf",this._complex=null,this._chain=null,this._residue=null,this._molecules=null,this._metadata={},this._metadata.molecules=[],this._currentMolProps={},this._compoundIndx=-1,this._assemblies=[],this._atomsParsed=0,this._atomsIndexes=[]}canProbablyParse(e){return t().isString(e)&&rc.test(e)}_parseHeader(e){const t={};t.name=e.getStringFromStart(0);const r=parseInt(e.getStringFromStart(1).substr(10,6).trim(),10);t.date=r.toString()||"",t.title=e.getStringFromStart(2),this._metadata.molecules.push(t)}_parseAtoms(e,t){let n,s=this._atomsParsed;const i=function(e){if(!e)return"A";const t=[];for(;e;)t.push(65+e%26),e=Math.trunc(e/26);return t.length>1&&(t.reverse(),t[0]-=1),String.fromCharCode(...t)}(this._compoundIndx);this._chain=this._complex.getChain(i)||this._complex.addChain(i),this._residue=this._chain.addResidue("UNK",1," ");for(let i=0;in&&([t,n]=[n,t]),this._complex.addBond(t,n,ec[s]||1,tc[s]||Kl.BondType.UNKNOWN,!0)}}_parseMOL(e){this._compoundIndx++,this._parseHeader(e);const t=e.getStringFromStart(3),r=parseInt(t.substr(0,3),10),n=parseInt(t.substr(3,3),10);this._parseAtoms(e,r),this._parseBonds(e,n),this._atomsParsed+=r,this._metadata.molecules[this._compoundIndx]._residues=[],this._metadata.molecules[this._compoundIndx]._residues.push(this._residue)}_parseDataItem(e){const t=e.getCurrentString();let r=[],n=e.getNextString();for(;""!==n.trim();)r.push(n),n=e.getNextString();1===r.length&&([r]=r),this._currentMolProps[t.replace(/[<>]/g,"").trim()]=r}_parseCompound(e){if(this._parseMOL(e),this._format===sc){for(this._currentMolProps={};e.findNextDataItem();)this._parseDataItem(e);if(0!==Object.keys(this._currentMolProps).length){const e=this._metadata.molecules[this._compoundIndx];e.props=this._currentMolProps,this._tryToUpdateMoleculeData(e)}}}_fixBondsArray(){const e=this._serialAtomMap,t=this._complex._bonds;for(let r=0;r1){t.molecules=[];for(let r=0;r>8&255}if(100!==t.i16[18])throw new Error("DSN6: Incorrect format ");const r=this._header;this._fillHeader(cc,t),r.cellDims.multiplyScalar(1/r.scaleFactor),r.angles.forEach(((e,t,n)=>{n[t]*=Math.PI/180/r.scaleFactor})),r.div/=100}_setAxisIndices(){this._xyz2crs[0]=0,this._xyz2crs[1]=1,this._xyz2crs[2]=2}_setOrigins(){const e=this._header,[t,r,n]=this._getAxis();this._setAxisIndices(),this._origin.addScaledVector(t,e.nstart[0]),this._origin.addScaledVector(r,e.nstart[1]),this._origin.addScaledVector(n,e.nstart[2]),t.multiplyScalar(e.extent[0]),r.multiplyScalar(e.extent[1]),n.multiplyScalar(e.extent[2]),this._setBoxParams(t,r,n)}_pointCalculate(e,t,r,n,s,i,o){const a=this._header;if(!(sn&&(n=e[s]);this._header.sd=Math.sqrt(t/e.length),this._header.dmax=n,this._header.dmin=r}}class uc extends Sa{constructor(e,t){super(e,t),this._options.fileType="dsn6",this.model=new hc}static canParse(e,t){return!!e&&(e instanceof ArrayBuffer&&Sa.checkDataTypeOptions(t,"dsn6"))}static canProbablyParse(e){return!1}parseSync(){return this.model.parse(this._data)}}uc.formats=["dsn6"],uc.extensions=[".dsn6",".omap"],uc.binary=!0;const dc=uc;const pc=class extends Ra{constructor(e){super(e),this._next=-1,this.next()}getNext(){return this._next}},{Complex:mc,Element:fc,Molecule:_c}=Yt;class gc extends Sa{constructor(e,t){super(e,t),this._time=null,this._numAtoms=null,this._residueNumber=null,this._residueName="",this._atomName="",this._atomNumber=null,this._atomPosition=[],this._atomVelocity=[],this._complex=null,this._molecules=[],this._molecule=null,this._options.filetype="gro"}canProbablyParse(e){return t().isString(this._data)&&/^\s*[^\n]*\n\s*\d+ *\n\s*\d+[^\n\d]{3}\s*\w+\s*\d+\s*-?\d/.test(e)}_parseTitle(e){const{metadata:t}=this._complex;t.id=e.readLine().trim(),t.name=t.id.slice(t.id.lastIndexOf("\\")+1,t.id.lastIndexOf(".")),t.format="gro"}_parseNumberOfAtoms(e){if(this._numAtoms=e.readInt(0,e.getNext()),Number.isNaN(this._numAtoms))throw new Error("Line 2 is not representing atom number. Consider checking input file")}_parseAtom(e){this._residueNumber=e.readInt(1,5),this._residueName=e.readString(6,10).trim(),this._atomName=e.readString(11,15).trim(),this._atomNumber=e.readInt(16,20);const t=10*e.readFloat(21,28),n=10*e.readFloat(29,36),s=10*e.readFloat(37,45);if(Number.isNaN(t)||Number.isNaN(n)||Number.isNaN(s))return void(this._complex.error={message:`Atom position is invalid in "${e.readLine()}"`});const i=fc.getByName(this._atomName[0]);if("Unknown"===i.fullName)return void(this._complex.error={message:`${this._atomName[0]} hasn't been recognised as an atom name.`});const o=fc.Role[this._atomName];let a=this._chain;a||(this._chain=a=this._complex.addChain("A"));let l=this._residue;l&&l.getSequence()===this._residueNumber||(this._residue=l=a.addResidue(this._residueName,this._residueNumber," ")),this._atomPosition=new r.Vector3(t,n,s);l.addAtom(this._atomName,i,this._atomPosition,o,!0,this._atomNumber," ",1,1,0)}_finalize(){const e=new _c(this._complex,this._complex.metadata.name,1);e.residues=this._chain._residues,e._chains=this._chain,this._complex._molecules[0]=e,this._molecules.push(e),this._complex.finalize({needAutoBonding:!0,detectAromaticLoops:this.settings.now.aromatic,enableEditing:this.settings.now.editing,serialAtomMap:this._serialAtomMap})}parseSync(){const e=this._complex=new mc,t=new pc(this._data);let r=0;for(this._parseTitle(t),t.next(),this._parseNumberOfAtoms(t),t.next(),r=0;r${e}`))return;this._currPosIdx++}this._toStringFromStart(0,t)}_toStringFromHeader(e,t,r){this._toHeaderString(e,r);const n=this._currPosIdx+t;r[this._currPosIdx].match(`@${e}`)&&n=t.length?this._currStartIdx=this._currPosIdx=t.length-1:this._currStartIdx=this._currPosIdx=e}_probablyHaveDataToParse(e){return this._currPosIdxMOLECULE>"!==e[this._currPosIdx].trim();)this._currPosIdx++;return this._setStart(++this._currPosIdx,e),this._probablyHaveDataToParse(e)}_parseMolecule(e){this._toHeaderString("MOLECULE",e);const{metadata:t}=this._complex;t.name=e[++this._currPosIdx],t.format="mol2",this._molecule={_index:"",_chains:[]},this._molecule._index=this._compoundIndx+1,this._molecules.push(this._molecule)}_parseAtoms(e,t){this._toHeaderString("ATOM",t);for(let n=0;n=9&&(c=parseFloat(e[8])||0);let h=this._chain;if(h||(this._chain=h=this._complex.getChain("A")||this._complex.addChain("A"),this._residue=null),!this._setResidue(e))continue;const u=!1,d=" ",p=1,m=0,f=bc.getByName(l),_=bc.Role[s],g=new r.Vector3(i,o,a);this._residue.addAtom(s,f,g,_,u,n,d,p,m,c)}}_setResidue(e){let t=1,r="UNK";if(e.length>=7&&(t=parseInt(e[6],10)),e.length>=8&&"<0>"!==e[7]&&(r=e[7].replace(Ac,"")),this.settings.now.nowater&&("HOH"===r||"WAT"===r))return!1;const n=this._residue,s=this._chain;return n&&n.getSequence()===t||(this._residue=s.addResidue(r,t,"A")),!0}_parseBonds(e,t){this._toHeaderString("BOND",t);for(let r=0;rn&&([r,n]=[n,r]),this._complex.addBond(r,n,vc[s]||0,Cc[s]||wc.BondType.UNKNOWN,!0)}}_fixSerialAtoms(){const e=this._complex._atoms;for(let t=0;t0&&void 0!==arguments[0]?arguments[0]:[],["formats"])}find(e){let t=[];return e.format&&(t=this._dict.formats[e.format.toLowerCase()]||[]),[...t]}};class Nc{constructor(e,t){this._source=e,this._options=t||{},this._abort=!1}exportSync(){throw new Error("Exporting to this source is not implemented")}export(){return new Promise(((e,t)=>{setTimeout((()=>{try{return this._abort?t(new Error("Export aborted")):e(this.exportSync())}catch(e){return t(e)}}))}))}abort(){this._abort=!0}}ur(Nc.prototype);class Lc{constructor(){this._resultArray=[],this._currentStr=-1,this._tag=null,this._fixedNumeration=!1,this._numeration=!1,this._tagStrNum=0}getResult(){return this.writeString("\n",81,81),this._resultArray.join("")}_currentStrLength(){const e=this._resultArray[this._currentStr];return e?e.length:0}newTag(e,r){this._tag=e||null,t().isUndefined(r)?(this._numeration=!1,this._fixedNumeration=!1,this._tagStrNum=0):t().isNumber(r)?(this._tagStrNum=r,this._numeration=!0,this._fixedNumeration=!0):t().isBoolean(r)&&(this._tagStrNum=0,this._numeration=r,this._fixedNumeration=!1)}newString(e){this.writeString("\n",81,81),this._currentStr++,this._resultArray.push(""),e?this.writeString(e,1,6):this._tag&&this.writeString(this._tag,1,6),this._numeration&&(this._fixedNumeration||this._tagStrNum++,1!==this._tagStrNum&&this.writeString(this._tagStrNum.toString(),10,8))}writeEntireString(e,t,r){t||(t=81);for(let n=0;nMath.abs(r-n)+1&&(s=s.substr(0,Math.abs(r-n+1))),l>o+1)this._resultArray[this._currentStr]+=" ".repeat(l-o-1);else if(l<=o){const e=this._resultArray[this._currentStr];this._resultArray[this._currentStr]=e.slice(0,l-1)}if(ni.length&&(this._resultArray[this._currentStr]+=" ".repeat(a-i.length))}writeBondsArray(e,t){const r=this._getSubArrays(e,4);for(let e=0;ee._fixed));0!==n.length&&e.writeBondsArray(n.reverse(),t[r])}}_extractSHEET(e){if(!this._source._sheets)return;e.newTag("SHEET");const t=this._source._sheets;for(let r=0;r1||t[r].name.length>3?13:14;e.writeString(t[r].serial,11,7),e.writeString(t[r].name,s,16),e.writeString(String.fromCharCode(t[r].location),17,17),e.writeString(t[r].residue._type._name,20,18),e.writeString(t[r].residue._chain._name,22,22),e.writeString(t[r].residue._sequence,26,23),e.writeString(t[r].residue._icode,27,27),e.writeString(t[r].position.x.toFixed(3),38,31),e.writeString(t[r].position.y.toFixed(3),46,39),e.writeString(t[r].position.z.toFixed(3),54,47),e.writeString(t[r].occupancy.toFixed(2),60,55),e.writeString(t[r].temperature.toFixed(2),66,61),e.writeString(t[r].element.name,78,77),t[r].charge&&e.writeString(t[r].charge,79,80)}}_extractCOMPND(e){if(!this._source._molecules)return;const t=this._source._molecules;e.newTag("COMPND",!0);for(let r=0;re instanceof ct));for(let t=0;tt.indexOf(e)===r))}}Ic.formats=["pdb"],Ic.SourceClass=jt;function Oc(e,t,r,n){r[n]=e[t],r[n+1]=e[t+1],r[n+2]=e[t+2]}function Vc(e,t,r,n,s){r[n]=e[t],r[n+1]=e[t+1],r[n+2]=e[t+2],r[n+3]=s}const Dc=new r.Vector4;function kc(e,t,r,n,s){Dc.set(e[t],e[t+1],e[t+2],s.w),Dc.applyMatrix4(s.matrix),r[n]=Dc.x,r[n+1]=Dc.y,r[n+2]=Dc.z}function zc(e,t,r,n,s){if(!((t.array.length-t.start)/t.stridee+r));this.setIndices(n,0,t)}getVerticesNumber(){return this.lastPos/3}addInstance(e,t){const r=this.getVerticesNumber();this.setShiftedIndices(t.indices,t.indices.length,r);const n=t.itemSize;this.setTransformedPositions(t.positions,0,t.vertsCount,n.position,e),this.setTransformedNormals(t.normals,0,t.vertsCount,n.normal,e),this.setColors(t.colors,0,t.vertsCount,n.color)}}class Bc{constructor(){this.positions=null,this.normals=null,this.colors=null,this.indices=null,this.vertsCount=0,this.itemSize=null}init(e,t){const{attributes:r}=e;this.itemSize={position:r.position.itemSize,normal:r.normal.itemSize,color:r.color.itemSize}}}class Uc extends Bc{init(e,t){super.init(e,t);const{attributes:{position:r,normal:n},index:s}=e;this.vertsCount=r.count,this.positions=r.array,this.normals=n.array,this.colors=new Float32Array(this.vertsCount*this.itemSize.color),this.indices=s.array}setColors(e){let t=0;for(let r=0,n=this.colors.length,s=this.itemSize.color;re+s)),this.indices.set(r.array,0),this.indices.set(i,n)}_setColorRange(e,t,r,n){const s=n.length;for(let i=e;i{e instanceof r.Mesh&&e.layers.test(t)&&this.checkExportAbility(e)&&("InstancedBufferGeometry"===e.geometry.type?this._collectInstancedGeoInfo(e):this._collectGeoInfo(e))}))}_reworkIndices(e){for(let t=2;t0&&(u=new Gc,u.init(e.geometry,h));const d=h.addPerCylinder*h.needToSplit,p=t.count,m=i.count;a.init(l*p+d,l*m);const f=new r.Matrix4,_=new r.Matrix4,g=new r.Color,y=new r.Color;let x={};for(let t=0;tt().isEqual(r,e)))}_gatherCylindersColoringInfo(e){const t=e.instanceCount,r=e.attributes.color.array,n=e.attributes.color2.array,s=e.attributes.color.itemSize,i=new Array(t);let o=0,a=0;for(let e=0;e1e-7||Math.abs(r[a+1]-n[a+1])>1e-7||Math.abs(r[a+2]-n[a+2])>1e-7;i[e]=t,o+=t}return{is2Colored:i,needToSplit:o,addPerCylinder:e.getGeoParams().radialSegments}}_collectInstancedGeoInfo(e){e.geometry instanceof gr?this._collectSpheresInfo(e):e.geometry instanceof Dr&&this._collectCylindersInfo(e)}_collectMaterialInfo(e){const{uberOptions:t}=e.material;return{diffuse:t.diffuse.toArray(),opacity:t.opacity,shininess:t.shininess,specular:t.specular.toArray()}}_getCylinderInstanceMatrix(e,t,r){const n=e.attributes.matVector1.array,s=e.attributes.matVector2.array,i=e.attributes.matVector3.array,o=4*t;r.set(n[o],n[o+1],n[o+2],n[o+3],s[o],s[o+1],s[o+2],s[o+3],i[o],i[o+1],i[o+2],i[o+3],0,0,0,1)}_getSphereInstanceMatrix(e,t,r){const{offset:n}=e.attributes,s=t*n.itemSize,i=n.array[s],o=n.array[s+1],a=n.array[s+2],l=n.array[s+3];r.set(l,0,0,i,0,l,0,o,0,0,l,a,0,0,0,1)}}class Hc{constructor(){this._resultArray=[],this._info=null}getResult(e){return this._info=e,this._resultArray.push(this._writeHeader()),this._resultArray.push(this._writeDefinitions()),this._resultArray.push(this._writeObjects(e.models,e.materials)),this._resultArray.push(this._writeRelations()),this._resultArray.push(this._writeConnections()),this._info=null,this._resultArray.join("")}_writeHeader(){const e=new Date,t=`Miew FBX Exporter v${this._info.version}`;return`; FBX 6.1.0 project file\n; Created by ${t} Copyright (c) 2015-2024 EPAM Systems, Inc.\n; For support please contact miew@epam.com\n; ----------------------------------------------------\n\nFBXHeaderExtension: {\n FBXHeaderVersion: 1003\n FBXVersion: 6100\n CreationTimeStamp: {\n Version: 1000\n Year: ${e.getFullYear()}\n Month: ${e.getMonth()+1}\n Day: ${e.getDate()}\n Hour: ${e.getHours()}\n Minute: ${e.getMinutes()}\n Second: ${e.getSeconds()}\n Millisecond: ${e.getMilliseconds()}\n }\n Creator: "${t}"\n OtherFlags: {\n FlagPLE: 0\n }\n}\nCreationTime: "${e}"\nCreator: "${t}"\n`}_writeDefinitions(){return'\n; Object definitions\n;------------------------------------------------------------------\n\n\nDefinitions: {\n Version: 100\n Count: 3\n ObjectType: "Model" {\n Count: 1\n }\n ObjectType: "Geometry" {\n Count: 1\n }\n ObjectType: "Material" {\n Count: 1\n }\n ObjectType: "Pose" {\n Count: 1\n }\n ObjectType: "GlobalSettings" {\n Count: 1\n }\n} \n'}_models(){let e="";const{models:t}=this._info;for(let r=0;r-t.near?"hidden":"visible",a=1e4*(t.far- -this._vector.z)/(t.far-t.near),l=e.getElement();if(void 0===n.fog)l.style.color=i(e.userData.color),"transparent"!==e.userData.background&&(l.style.background=i(e.userData.background));else{const t=r.MathUtils.smoothstep(-this._vector.z,n.fog.near,n.fog.far);l.style.color=s(e.userData.color,n.fog.color,t),"transparent"!==e.userData.background&&(l.style.background=s(e.userData.background,n.fog.color,t))}this._vector.applyMatrix4(this._projectionMatrix);const c=`${e.userData!=={}?e.userData.translation:"translate(-50%, -50%) "}translate(${this._vector.x*this._widthHalf+this._widthHalf}px,${-this._vector.y*this._heightHalf+this._heightHalf}px)`;l.style.visibility=o,l.style.WebkitTransform=c,l.style.MozTransform=c,l.style.oTransform=c,l.style.transform=c,l.style.zIndex=Number(a).toFixed(0),l.parentNode!==this._domElement&&this._domElement.appendChild(l)}for(let r=0,s=e.children.length;r0&&(this._altObj.setObjects(i.objects),this._altObj.pivot=i.pivot,"axis"in i?this._altObj.axis=i.axis.clone():this._altObj.axis.set(0,0,1),e.set(s*t,s*n),this._altObj.translate(e),this.dispatchEvent({type:"change",action:"translate"}))}}this._lastUpdateTime=t}}(),sh.prototype.reset=function(){this._state=Zc,this.object.quaternion.copy(th.set(0,0,0,1))},sh.prototype.mousedown=function(e){if(!1!==this.enabled&&this._state===Zc){if(e.preventDefault(),e.stopPropagation(),this._state===Zc)if(0===e.button){this._affectedObj.stop();let t=!1;if(e.altKey){const e=this.getAltObj();t=e.objects.length>0,t&&(this._altObj.setObjects(e.objects),this._altObj.pivot=e.pivot,"axis"in e?this._altObj.axis=e.axis.clone():this._altObj.axis.set(0,0,1))}this._affectedObj=t?this._altObj:this._mainObj,this._state=t&&e.ctrlKey&&this._isTranslationAllowed?Qc:Kc}else 2===e.button&&(this._state=eh);this._state===Kc&&(this.convertMouseToOnCircle(this._mouseCurPos,e.pageX,e.pageY),this._mousePrevPos.copy(this._mouseCurPos)),this._state!==Qc&&this._state!==eh||(this.convertMouseToViewport(this._mouseCurPos,e.pageX,e.pageY),this._mousePrevPos.copy(this._mouseCurPos))}},sh.prototype.mousemove=function(e){if(!1!==this.enabled&&this._state!==Zc)switch(e.preventDefault(),e.stopPropagation(),this._state){case Kc:this._mousePrevPos.copy(this._mouseCurPos),this.convertMouseToOnCircle(this._mouseCurPos,e.pageX,e.pageY),this.rotateByMouse(e.altKey&&!this._isAltObjFreeRotationAllowed||e.shiftKey),this._lastMouseMoveTime=this._clock.getElapsedTime();break;case Qc:this._mousePrevPos.copy(this._mouseCurPos),this.convertMouseToViewport(this._mouseCurPos,e.pageX,e.pageY),this.translate();break;case eh:this._mousePrevPos.copy(this._mouseCurPos),this.convertMouseToViewport(this._mouseCurPos,e.pageX,e.pageY),this.translatePivotByMouse()}},sh.prototype.mousewheel=function(e){if(!1===this.enabled||!z.now.zooming||this._state!==Zc||e.shiftKey)return;e.preventDefault();let t=0;e.wheelDelta?t=e.wheelDelta/40:e.detail&&(t=-e.detail/3);let r=1+.05*t;r=Math.max(r,.01),this.scale(r)},sh.prototype.mouseup=function(e){!1!==this.enabled&&this._state!==Zc&&(e.preventDefault(),e.stopPropagation(),this._state=Zc,this._clock.getElapsedTime()-this._lastMouseMoveTime>.1&&this._affectedObj.stop())},sh.prototype.touchstartend=function(e){if(!1!==this.enabled)switch(e.preventDefault(),e.stopPropagation(),e.touches.length){case 1:this._state=Kc,this.convertMouseToOnCircle(this._mouseCurPos,e.touches[0].pageX,e.touches[0].pageY),this._mousePrevPos.copy(this._mouseCurPos);break;case 2:{this._mainObj.stop(),this._altObj.stop(),this._state=Jc;const t=e.touches[0].pageX-e.touches[1].pageX,r=e.touches[0].pageY-e.touches[1].pageY;this._touchDistanceCur=this._touchDistanceStart=Math.sqrt(t*t+r*r),this._scaleStart=this.object.scale.x;break}default:this._state=Zc}},sh.prototype.touchmove=function(e){if(!1!==this.enabled&&this._state!==Zc)switch(e.preventDefault(),e.stopPropagation(),this._state){case Kc:this._mousePrevPos.copy(this._mouseCurPos),this.convertMouseToOnCircle(this._mouseCurPos,e.touches[0].pageX,e.touches[0].pageY),this.rotateByMouse(!1),this._lastMouseMoveTime=this._clock.getElapsedTime();break;case Jc:if(z.now.zooming){const t=e.touches[0].pageX-e.touches[1].pageX,r=e.touches[0].pageY-e.touches[1].pageY;this._touchDistanceCur=Math.sqrt(t*t+r*r);const n=this._scaleStart*this._touchDistanceCur/this._touchDistanceStart/this.object.scale.x;this.scale(n)}}},sh.prototype.keydownup=function(e){if(!1!==this.enabled&&!1!==this.hotkeysEnabled)switch(e.keyCode){case 37:case 38:case 39:case 40:this._pressedKeys[e.keyCode]="keydown"===e.type,e.preventDefault(),e.stopPropagation()}},sh.prototype.getKeyBindObject=function(){return qc()},sh.prototype.dispose=function(){for(let e=0;e{t.pickObject(s)}),0),this._lastClickPos=s,this._lastClickBeginTime=this._clickBeginTime}},oh.prototype.touchstart=function(e){e.preventDefault(),e.stopPropagation(),1===e.touches.length&&(this._lastTouchdownPos=this.getMouseInViewport(e.touches[0].pageX,e.touches[0].pageY))},oh.prototype.touchend=function(e){const t=this;if(e.preventDefault(),e.stopPropagation(),0===e.touches.length&&1===e.changedTouches.length){this.getMouseInViewport(e.changedTouches[0].pageX,e.changedTouches[0].pageY).sub(this._lastTouchdownPos).length()<.01&&setTimeout((()=>{t.pickObject(t._lastTouchdownPos)}),0)}},oh.prototype.dispose=function(){for(let e=0;e=524288?e-1048576:e}class ph{constructor(e,t,r){this._complex=e,this._secondary=null,this.isLoading=!1,this._framesRange={start:0,end:-1},this.frameIsReady=!1,this._buffer=null,this._frameRequest=null,this._callbacks=r,"function"==typeof t?(this._framesRequestLength=1,this._downloadDataFn=t):this.parseBinaryData(t,!0),this.reset(),this.setFrame(0)}_prepareBuffer(e,t){if(null==e&&(e=0),null==t&&(t=e+this._framesRequestLength),void 0!==this._framesCount&&(t=Math.min(this._framesCount-1,t)),this._downloadDataFn){const r=this,n=function(n){if(r.isLoading=!1,r._callbacks&&"function"==typeof r._callbacks.onLoadStatusChanged&&r._callbacks.onLoadStatusChanged(),r._buffer={data:n,state:"ready",start:e,end:t},null!==r._frameRequest){const e=r._frameRequest;r._frameRequest=null,r.setFrame(e)}},s=function(){r.isLoading=!1,r._callbacks&&"function"==typeof r._callbacks.onError&&r._callbacks.onError("Streaming failed")};this._buffer||(this._buffer={}),this._buffer.state="downloading",this.isLoading=!0,r._callbacks&&"function"==typeof r._callbacks.onLoadStatusChanged&&r._callbacks.onLoadStatusChanged(),this._downloadDataFn({start:e,end:t+1},n,s)}}_parseBuffer(){if(this._buffer&&"ready"===this._buffer.state){this._framesRange={start:this._buffer.start,end:this._buffer.end},this.parseBinaryData(this._buffer.data,!1);let e=(this._buffer.end+1)%this._framesCount;if(e>=this._framesCount&&(e=0),this._buffer={state:"none"},this._prepareBuffer(e,e+this._framesRequestLength),null!==this._frameRequest){const e=this._frameRequest;this._frameRequest=null,this.setFrame(e)}}}parseBinaryData(e){const t=new DataView(e);let r=0;const n=t.getUint32(r,!0);r+=4;const s=t.getUint32(r,!0);this._framesCount=s,this._framesRange.end=this._framesRange.end>0?Math.min(this._framesRange.end,s-1):s-1,r+=4,this._atomsCount=n;this._framesRequestLength=Math.ceil(1048576/(8*n));const i=this._framesRange.end-this._framesRange.start+1;if(n!==this._complex._atoms.length||e.byteLength!==12+i*n*8)throw new Error;const o=this._complex;let a=t.getUint32(r,!0),l=0;for(;a>1e3&&l>>28,o=dh((268435200&s)>>>8>>0),a=dh(((255&s)<<12|(4293918720&n)>>>20)>>0),l=dh((1048575&n)>>0);d[e]=0,i>0&&i<4?d[e]=1:4===i&&(d[e]=2),h[u++]=o/100,h[u++]=a/100,h[u++]=l/100}c.push(uh(d,o))}this._secondaryData=c,this._data=h}nextFrame(){this.setFrame((this._currFrame+1)%this._framesCount)}needsColorUpdate(e){return e instanceof bo}getAtomColor(e,t){return e.getResidueColor(this._residues[t.residue._index],this._complex)}getResidueColor(e,t){return e.getResidueColor(this._residues[t._index],this._complex)}_updateSecondary(){let e;const t=this._residues;let r=t.length;for(e=0;e=this._framesRange.start&&e<=this._framesRange.end)this._currFrame=e,this._cachedResidues=!1,this._updateSecondary(),this.frameIsReady=!0;else if(this._frameRequest=e,this._buffer){const t=this;switch(this._buffer.state){case"none":this._prepareBuffer(e);break;case"ready":t._parseBuffer()}}else this._prepareBuffer(e)}disableEvents(){this._callbacks=null}static _vec=(()=>new r.Vector3)();getAtomPos(e){const t=ph._vec,r=this,n=r._data,s=3*(r._atomsCount*(r._currFrame-r._framesRange.start)+e);return t.set(n[s],n[s+1],n[s+2]),t}getResidues(){return this._cachedResidues||this._complex.updateToFrame(this),this._residues}}const mh=ph;class fh{constructor(e,r){if(this.constructor===fh)throw new Error("Can not instantiate abstract class!");this.params=e,this.opts=t().merge(O.deriveDeep(z.now.objects[this.type],!0),r),this.needsRebuild=!1,this._mesh=null,this.id=null}identify(){const e={type:this.type,params:this.params},r=O.objectsDiff(this.opts,z.now.modes[this.id]);return t().isEmpty(r)||(e.opts=r),e}toString(){return`o=${this.type},${this.params.join(",")}`+O.compareOptionsWithDefaults(this.opts,z.defaults.objects[this.type])}getGeometry(){return this._mesh}destroy(){this._mesh&&sr.destroyObject(this._mesh)}}fh.prototype.type="__";const _h=fh;class gh extends _h{constructor(e,t){if(super(e,t),e.length<2)throw new Error("Wrong number of argumets on line object creation!");[this._id1,this._id2]=e}_getAtomFromName(e,t){const r=e.getAtomByFullname(t);if(!r)throw new Error(t+" - Wrong atom format it must be '#CHAIN_NAME.#RESIDUE_NUMBER.#ATOM_NAME' (e.g. 'A.38.CO1')");return r}build(e){const t=new r.BufferGeometry;this._atom1=this._getAtomFromName(e,this._id1),this._atom2=this._getAtomFromName(e,this._id2);const n=this._atom1.position,s=this._atom2.position,i=new Float32Array([n.x,n.y,n.z,s.x,s.y,s.z]);t.setAttribute("position",new r.BufferAttribute(i,3)),t.computeBoundingBox(),this._line=new fs.Line(t,new Jn({lights:!1,overrideColor:!0,dashedLine:!0,fogTransparent:z.now.bg.transparent})),this._line.computeLineDistances(),this._line.material.setUberOptions({fixedColor:new r.Color(this.opts.color),dashedLineSize:this.opts.dashSize,dashedLinePeriod:this.opts.dashSize+this.opts.gapSize}),this._line.material.updateUniforms(),this._line.raycast=function(e,t){},this._mesh=this._line;const o=e.getTransforms();o.length>0&&(this._mesh=new r.Group,this._mesh.add(this._line),jo.applyTransformsToMeshes(this._mesh,o))}updateToFrame(e){if(!this._atom1||!this._atom2||!this._line)return;const t=this._line.geometry;t.vertices[0].copy(e.getAtomPos(this._atom1.index)),t.vertices[1].copy(e.getAtomPos(this._atom2.index)),this._line.computeLineDistances(),t.computeBoundingSphere(),t.verticesNeedUpdate=!0}}gh.prototype.constructor=gh,gh.prototype.type="line";const yh=gh;class xh extends r.RawShaderMaterial{constructor(e){super(e);const t={uniforms:{srcTex:{type:"t",value:null},srcDepthTex:{type:"t",value:null},srcTexSize:{type:"v2",value:new r.Vector2(512,512)},color:{type:"v3",value:null},threshold:{type:"f",value:null},opacity:{type:"f",value:1},thickness:{type:"v2",value:new r.Vector2(1,1)}},vertexShader:Qt,fragmentShader:"precision highp float;\r\n\r\nuniform sampler2D srcTex;\r\nuniform vec2 srcTexSize;\r\nuniform vec2 thickness;\r\nvarying vec2 vUv;\r\n\r\n#ifdef DEPTH_OUTLINE\r\n uniform sampler2D srcDepthTex; //depthTexture\r\n uniform vec3 color;\r\n uniform float threshold;\r\n#endif\r\n\r\nvoid main() {\r\n\r\n vec2 pixelSize = thickness / srcTexSize;\r\n\r\n #ifdef DEPTH_OUTLINE\r\n float c00 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,-pixelSize.y)).x;\r\n float c01 = texture2D(srcDepthTex, vUv + vec2(0,-pixelSize.y)).x;\r\n float c02 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,-pixelSize.y)).x;\r\n float c10 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,0)).x;\r\n float c12 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,0)).x;\r\n float c20 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,pixelSize.y)).x;\r\n float c21 = texture2D(srcDepthTex, vUv + vec2(0,pixelSize.y)).x;\r\n float c22 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,pixelSize.y)).x;\r\n\r\n float horizEdge = - c00 - 2.0 * c01 - c02 + c20 + 2.0 * c21 + c22;\r\n float vertEdge = - c00 - 2.0 * c10 - c20 + c02 + 2.0 * c12 + c22;\r\n\r\n float grad = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\r\n\r\n gl_FragColor = ( grad > threshold ) ? vec4(color.rgb, 1.0) : gl_FragColor = texture2D(srcTex, vUv);\r\n\r\n #else\r\n vec4 c00 = texture2D(srcTex, vUv + vec2(-pixelSize.x,-pixelSize.y));\r\n vec4 c01 = texture2D(srcTex, vUv + vec2(0,-pixelSize.y));\r\n vec4 c02 = texture2D(srcTex, vUv + vec2(pixelSize.x,-pixelSize.y));\r\n vec4 c10 = texture2D(srcTex, vUv + vec2(-pixelSize.x,0));\r\n vec4 c12 = texture2D(srcTex, vUv + vec2(pixelSize.x,0));\r\n vec4 c20 = texture2D(srcTex, vUv + vec2(-pixelSize.x,pixelSize.y));\r\n vec4 c21 = texture2D(srcTex, vUv + vec2(0,pixelSize.y));\r\n vec4 c22 = texture2D(srcTex, vUv + vec2(pixelSize.x,pixelSize.y));\r\n\r\n vec4 horizEdge = - c00 - 2.0 * c01 - c02 + c20 + 2.0 * c21 + c22;\r\n vec4 vertEdge = - c00 - 2.0 * c10 - c20 + c02 + 2.0 * c12 + c22;\r\n\r\n vec4 grad = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\r\n gl_FragColor = grad;\r\n #endif\r\n}\r\n",transparent:!0,depthTest:!1,depthWrite:!1};this.setValues(t)}copy(e){super.copy(e),this.depth=e.depth}setValues(e){if(void 0===e)return;super.setValues(e);const t={};this.depth&&(t.DEPTH_OUTLINE=1),this.defines=t}}xh.prototype.depth=!1;const bh=xh;class wh extends r.RawShaderMaterial{constructor(e){super(e),this.setValues.call(this,{uniforms:{srcTex:{type:"t",value:null},srcTexelSize:{type:"v2",value:new r.Vector2(1/512,1/512)},bgColor:{type:"c",value:new r.Color(16777215)}},vertexShader:Qt,fragmentShader:"precision highp float;\r\n\r\n// edge end finding algorithm parameters\r\n#define FXAA_QUALITY_PS 8\r\n#define FXAA_QUALITY_P0 1.0\r\n#define FXAA_QUALITY_P1 1.5\r\n#define FXAA_QUALITY_P2 2.0\r\n#define FXAA_QUALITY_P3 2.0\r\n#define FXAA_QUALITY_P4 2.0\r\n#define FXAA_QUALITY_P5 2.0\r\n#define FXAA_QUALITY_P6 4.0\r\n#define FXAA_QUALITY_P7 12.0\r\n// constants\r\nfloat fxaaQualityEdgeThreshold = 0.125;\r\nfloat fxaaQualityEdgeThresholdMin = 0.0625;\r\nfloat fxaaQualitySubpix = 0.7; //0.65;\r\n// global params\r\nuniform sampler2D srcTex;\r\nuniform vec2 srcTexelSize;\r\nuniform vec3 bgColor;\r\n// from vs\r\nvarying vec2 vUv;\r\n//=====================================================================//\r\n// calc luminance from rgb\r\n//'float FxaaLuma(vec3 rgb) {return rgb.y * (0.587/0.299) + rgb.x; } // Lotte's idea about game luminance\r\nfloat FxaaLuma(vec3 rgb) {return dot(rgb, vec3(0.299, 0.587, 0.114)); } // real luminance calculation\r\n // for non-real scene rendering\r\n// texture sampling by pixel position(coords) and offset(in pixels)\r\n vec3 FxaaTex(sampler2D tex, vec2 pos, vec2 off, vec2 res ) {\r\n #ifdef BG_TRANSPARENT\r\n vec4 color = texture2D( tex, pos + off * res );\r\n return mix(color.rgb, bgColor, 1.0 - color.a);\r\n #else\r\n return texture2D( tex, pos + off * res ).xyz;\r\n #endif\r\n}\r\nvec3 FxaaTexTop(sampler2D tex, vec2 pos) {\r\n #ifdef BG_TRANSPARENT\r\n vec4 color = texture2D( tex, pos );\r\n return mix(color.rgb, bgColor, 1.0 - color.a);\r\n #else\r\n return texture2D( tex, pos).xyz;\r\n #endif\r\n}\r\nvec4 FxaaTexTopAlpha(sampler2D tex, vec2 pos) {\r\n return texture2D( tex, pos);\r\n}\r\n\r\n//=====================================================================//\r\nvoid main() {\r\n // renaming\r\n vec2 posM = vUv;\r\n // get luminance for neighbours\r\n float lumaS = FxaaLuma(FxaaTex(srcTex, posM, vec2( 0.0, 1.0 ), srcTexelSize));\r\n float lumaE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, 0.0 ), srcTexelSize));\r\n float lumaN = FxaaLuma(FxaaTex(srcTex, posM, vec2( 0.0, -1.0 ), srcTexelSize));\r\n float lumaW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, 0.0 ), srcTexelSize));\r\n float lumaM = FxaaLuma(FxaaTexTop(srcTex, posM));\r\n // find max and min luminance\r\n float rangeMax = max(max(lumaN, lumaW), max(lumaE, max(lumaS, lumaM)));\r\n float rangeMin = min(min(lumaN, lumaW), min(lumaE, min(lumaS, lumaM)));\r\n // calc maximum non-edge range\r\n float rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\r\n float range = rangeMax - rangeMin;\r\n float rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\r\n // exit when luma contrast is small (is not edge)\r\n if(range < rangeMaxClamped){\r\n gl_FragColor = FxaaTexTopAlpha(srcTex, posM);\r\n return;\r\n }\r\n float subpixRcpRange = 1.0/range;\r\n // note: the sampling coordinates can be calculated in vertex shader but the approach doesn't affect performance\r\n // visibly, thus we decided to leave calculation here for better readability.\r\n // calc other neighbours luminance\r\n float lumaNE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, -1.0 ), srcTexelSize));\r\n float lumaSW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, 1.0 ), srcTexelSize));\r\n float lumaSE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, 1.0 ), srcTexelSize));\r\n float lumaNW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, -1.0 ), srcTexelSize));\r\n/*--------------span calculation and subpix amount calulation-----------------*/\r\n float lumaNS = lumaN + lumaS;\r\n float lumaWE = lumaW + lumaE;\r\n float subpixNSWE = lumaNS + lumaWE;\r\n float edgeHorz1 = (-2.0 * lumaM) + lumaNS;\r\n float edgeVert1 = (-2.0 * lumaM) + lumaWE;\r\n/*--------------------------------------------------------------------------*/\r\n float lumaNESE = lumaNE + lumaSE;\r\n float lumaNWNE = lumaNW + lumaNE;\r\n float edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\r\n float edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\r\n/*--------------------------------------------------------------------------*/\r\n float lumaNWSW = lumaNW + lumaSW;\r\n float lumaSWSE = lumaSW + lumaSE;\r\n float edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\r\n float edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\r\n float edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\r\n float edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\r\n float edgeHorz = abs(edgeHorz3) + edgeHorz4;\r\n float edgeVert = abs(edgeVert3) + edgeVert4;\r\n/*--------------------subpix amount calulation------------------------------*/\r\n float subpixNWSWNESE = lumaNWSW + lumaNESE;\r\n float lengthSign = srcTexelSize.x;\r\n bool horzSpan = edgeHorz >= edgeVert;\r\n // debug code edge span visualization\r\n/*' if (horzSpan)\r\n gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);\r\n else\r\n gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\r\n return;*/\r\n float subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\r\n/*--------------------------------------------------------------------------*/\r\n if(!horzSpan) lumaN = lumaW;\r\n if(!horzSpan) lumaS = lumaE;\r\n if(horzSpan) lengthSign = srcTexelSize.y;\r\n float subpixB = (subpixA * (1.0/12.0)) - lumaM;\r\n/*--------------------------------------------------------------------------*/\r\n float gradientN = lumaN - lumaM;\r\n float gradientS = lumaS - lumaM;\r\n float lumaNN = lumaN + lumaM;\r\n float lumaSS = lumaS + lumaM;\r\n bool pairN = abs(gradientN) >= abs(gradientS);\r\n float gradient = max(abs(gradientN), abs(gradientS));\r\n if(pairN) lengthSign = -lengthSign;\r\n float subpixC = clamp(abs(subpixB) * subpixRcpRange, 0.0, 1.0);\r\n/*--------------------------------------------------------------------------*/\r\n vec2 posB;\r\n posB = posM;\r\n vec2 offNP;\r\n offNP.x = (!horzSpan) ? 0.0 : srcTexelSize.x;\r\n offNP.y = ( horzSpan) ? 0.0 : srcTexelSize.y;\r\n if(!horzSpan) posB.x += lengthSign * 0.5;\r\n if( horzSpan) posB.y += lengthSign * 0.5;\r\n/*--------------------------------------------------------------------------*/\r\n vec2 posN;\r\n posN = posB - offNP * FXAA_QUALITY_P0;\r\n vec2 posP;\r\n posP = posB + offNP * FXAA_QUALITY_P0;\r\n float subpixD = ((-2.0)*subpixC) + 3.0;\r\n float lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN));\r\n float subpixE = subpixC * subpixC;\r\n float lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP));\r\n/*--------------------------------------------------------------------------*/\r\n if(!pairN) lumaNN = lumaSS;\r\n float gradientScaled = gradient * 1.0/4.0;\r\n float lumaMM = lumaM - lumaNN * 0.5;\r\n float subpixF = subpixD * subpixE;\r\n bool lumaMLTZero = lumaMM < 0.0;\r\n/*---------------------looped edge-end search-------------------------------*/\r\n lumaEndN -= lumaNN * 0.5;\r\n lumaEndP -= lumaNN * 0.5;\r\n bool doneN = abs(lumaEndN) >= gradientScaled;\r\n bool doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P1;\r\n bool doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P1;\r\n/*--------------------------------------------------------------------------*/\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P2;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P2;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 3)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P3;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P3;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 4)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P4;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P4;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 5)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P5;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P5;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 6)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P6;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P6;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 7)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P7;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P7;\r\n/*--------------------------------------------------------------------------*/\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n/*----------------calculate subpix offset due to edge ends-------------------*/\r\n float dstN = posM.x - posN.x;\r\n float dstP = posP.x - posM.x;\r\n if(!horzSpan) dstN = posM.y - posN.y;\r\n if(!horzSpan) dstP = posP.y - posM.y;\r\n/*--------------------------------------------------------------------------*/\r\n bool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\r\n float spanLength = (dstP + dstN);\r\n bool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\r\n float spanLengthRcp = 1.0 / spanLength;\r\n/*--------------------------------------------------------------------------*/\r\n bool directionN = dstN < dstP;\r\n float dst = min(dstN, dstP);\r\n bool goodSpan = directionN ? goodSpanN : goodSpanP;\r\n float subpixG = subpixF * subpixF;\r\n float pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\r\n float subpixH = subpixG * fxaaQualitySubpix;\r\n/*-----------------calc texture offest using subpix-------------------------*/\r\n float pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\r\n float pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\r\n\r\n float offset = pixelOffsetSubpix * lengthSign;\r\n #ifdef BG_TRANSPARENT\r\n // get original texel\r\n vec4 rgbaA = FxaaTexTopAlpha(srcTex, posM);\r\n // calc step to blended texel\r\n vec2 step = sign((!horzSpan) ? vec2 (offset, 0.0) : vec2 (0.0, offset));\r\n // get neighboring texel\r\n vec4 rgbaB = FxaaTexTopAlpha(srcTex, posM + step * srcTexelSize);\r\n // calc blend factor from offset\r\n float f = (!horzSpan) ? offset / srcTexelSize.x : offset / srcTexelSize.y;\r\n f = abs(f);\r\n // calc alpha (special formula to emulate blending with bg)\r\n gl_FragColor.a = 1.0 - mix(1.0 - rgbaA.a, 1.0 - rgbaB.a, f);\r\n // calc color (special formula to emulate blending with bg)\r\n gl_FragColor.rgb = mix(rgbaA.rgb * rgbaA.a, rgbaB.rgb * rgbaB.a, f) / gl_FragColor.a;\r\n #else\r\n if(!horzSpan) {\r\n posM.x += offset;\r\n } else {\r\n posM.y += offset;\r\n }\r\n gl_FragColor = FxaaTexTopAlpha(srcTex, posM);\r\n #endif\r\n return;\r\n}\r\n",transparent:!1,depthTest:!1,depthWrite:!1}),this.setValues(e)}copy(e){super.copy(e),this.depth=e.depth}setValues(e){if(void 0===e)return;super.setValues(e);const t={};this.bgTransparent&&(t.BG_TRANSPARENT=1),this.defines=t}}wh.prototype.bgTransparent=!1;const Sh=wh,vh=[new r.Vector3(.295184,.077723,.068429),new r.Vector3(-.271976,-.365221,.838363),new r.Vector3(.547713,.467576,.488515),new r.Vector3(.662808,-.031733,.584758),new r.Vector3(-.025717,.218955,.657094),new r.Vector3(-.310153,-.365223,.370701),new r.Vector3(-.101407,-.006313,.747665),new r.Vector3(-.769138,.360399,.086847),new r.Vector3(-.271988,-.27514,.905353),new r.Vector3(.09674,-.566901,.700151),new r.Vector3(.562872,-.735136,.094647),new r.Vector3(.379877,.359278,.190061),new r.Vector3(.519064,-.023055,.405068),new r.Vector3(-.301036,.114696,.088885),new r.Vector3(-.282922,.598305,.487214),new r.Vector3(-.181859,.25167,.679702),new r.Vector3(-.191463,-.635818,.512919),new r.Vector3(-.293655,.427423,.078921),new r.Vector3(-.267983,.680534,.13288),new r.Vector3(.139611,.319637,.477439),new r.Vector3(-.352086,.31104,.653913),new r.Vector3(.321032,.805279,.487345),new r.Vector3(.073516,.820734,.414183),new r.Vector3(-.155324,.589983,.41146),new r.Vector3(.335976,.170782,.527627),new r.Vector3(.46346,-.355658,.167689),new r.Vector3(.222654,.59655,.769406),new r.Vector3(.922138,-.04207,.147555),new r.Vector3(-.72705,-.329192,.369826),new r.Vector3(-.090731,.53382,.463767),new r.Vector3(-.323457,-.876559,.238524),new r.Vector3(-.663277,-.372384,.342856)];class Ch extends r.RawShaderMaterial{constructor(){super(),this.setValues.call(this,{uniforms:{noiseTexture:{type:"t",value:Yn.noiseTexture},noiseTexelSize:{type:"v2",value:new r.Vector2(1/Yn.noiseWidth,1/Yn.noiseHeight)},diffuseTexture:{type:"t",value:null},normalTexture:{type:"t",value:null},depthTexture:{type:"t",value:null},srcTexelSize:{type:"v2",value:new r.Vector2(1/512,1/512)},camNearFar:{type:"v2",value:new r.Vector2(1,10)},projMatrix:{type:"mat4",value:new r.Matrix4},aspectRatio:{type:"f",value:0},tanHalfFOV:{type:"f",value:0},samplesKernel:{type:"v3v",value:vh},kernelRadius:{type:"f",value:1},depthThreshold:{type:"f",value:1},factor:{type:"f",value:1}},vertexShader:Qt,fragmentShader:"precision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 32\r\nuniform vec3 samplesKernel[MAX_SAMPLES_COUNT];\r\nuniform sampler2D noiseTexture;\r\nuniform vec2 noiseTexelSize;\r\nuniform sampler2D diffuseTexture;\r\nuniform sampler2D depthTexture;\r\nuniform sampler2D normalTexture;\r\nuniform vec2 srcTexelSize;\r\nuniform vec2 camNearFar;\r\nuniform mat4 projMatrix;\r\n\r\nuniform float aspectRatio;\r\nuniform float tanHalfFOV;\r\n\r\nuniform float kernelRadius;\r\nuniform float depthThreshold;\r\nuniform float factor;\r\n\r\nvarying vec2 vUv;\r\n\r\nfloat CalcViewZ(vec2 screenPos)\r\n{\r\n float depth = texture2D(depthTexture, screenPos).x;\r\n // [0, 1]->[-1, 1]\r\n float clipedZ = 2.0 * depth - 1.0;\r\n // see THREE.js camera.makeFrustum for projection details\r\n return (-projMatrix[3][2] / (clipedZ + projMatrix[2][2]));\r\n}\r\n\r\nvec3 ViewPosFromDepth(vec2 screenPos)\r\n{\r\n vec3 viewPos;\r\n viewPos.z = CalcViewZ(screenPos);\r\n //[0, 1]->[-1, 1]\r\n vec2 projPos = 2.0 * screenPos - 1.0;\r\n // reconstruct viewposition in right-handed sc with z to viewer\r\n viewPos.xy = vec2(\r\n projPos.x * aspectRatio * tanHalfFOV * abs(viewPos.z),\r\n projPos.y * tanHalfFOV * abs(viewPos.z)\r\n );\r\n return viewPos;\r\n}\r\n\r\nvoid main() {\r\n vec3 viewPos = ViewPosFromDepth(vUv);\r\n // remap coordinates to prevent noise exture rescale\r\n vec2 vUvNoise = vUv / srcTexelSize * noiseTexelSize;\r\n vec4 normalData = texture2D(normalTexture, vUv);\r\n // return for background fragments (their normals are zero vectors)\r\n if (length(normalData.rgb) < EPSILON) {\r\n // 0.0 in alpha component means that it is background fragment\r\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\r\n return;\r\n }\r\n //[0, 1] -> [-1, 1]\r\n vec3 normal = (normalData.rgb * 2.0 - 1.0);\r\n // normalData.a store 1.0 if normal was build for frontfaced surface\r\n // and 0.0 in other case\r\n if (normalData.a < EPSILON) {\r\n normal *= -1.0;\r\n }\r\n // get random vector for sampling sphere rotation\r\n vec3 randN = texture2D(noiseTexture, vUvNoise).rgb * 2.0 - 1.0;\r\n randN = normalize(randN);\r\n // build TBN (randomly rotated around normal)\r\n vec3 tangent = normalize(randN - normal * dot(randN, normal));\r\n vec3 bitangent = cross(tangent, normal);\r\n mat3 TBN = mat3(tangent, bitangent, normal);\r\n // calc AO value\r\n float AO = 0.0;\r\n for (int i = 0 ; i < MAX_SAMPLES_COUNT ; i++) {\r\n // rotate sampling kernel around normal\r\n vec3 reflectedSample = TBN * samplesKernel[i];\r\n // get sample\r\n vec3 samplePos = viewPos + reflectedSample * kernelRadius;\r\n\r\n // project sample to screen to get sample's screen pos\r\n vec4 SampleScrPos = vec4(samplePos, 1.0);\r\n // eye -> clip\r\n SampleScrPos = projMatrix * SampleScrPos;\r\n // normalize\r\n SampleScrPos.xy /= SampleScrPos.w;\r\n //[-1, 1] -> [0, 1]\r\n SampleScrPos.xy = (SampleScrPos.xy + vec2(1.0)) * 0.5;\r\n\r\n // get view z for sample projected to the objct surface\r\n float sampleDepth = CalcViewZ(SampleScrPos.xy);\r\n // calc occlusion made by object surface at the sample\r\n AO += step(samplePos.z, sampleDepth);\r\n }\r\n // calc result AO-map color\r\n AO = 1.0 - max(0.0, AO / float(MAX_SAMPLES_COUNT) * factor);\r\n // write value to AO-map\r\n gl_FragColor = vec4(AO, AO, AO, 1.0);\r\n}\r\n",transparent:!1,depthTest:!1,depthWrite:!1})}}const Ah=Ch,Eh=[-2,-1,0,1,2];class Th extends r.RawShaderMaterial{constructor(){super(),this.setValues.call(this,{uniforms:{depthTexture:{type:"t",value:null},srcTexelSize:{type:"v2",value:new r.Vector2(1/512,1/512)},aoMap:{type:"t",value:null},samplesOffsets:{type:"fv1",value:Eh}},vertexShader:Qt,fragmentShader:"precision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 5\r\nuniform float samplesOffsets[MAX_SAMPLES_COUNT];\r\nuniform sampler2D aoMap;\r\nuniform sampler2D depthTexture;\r\nuniform vec2 srcTexelSize;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n float x = vUv.x;\r\n float y = vUv.y;\r\n vec4 res = vec4(0.0);\r\n res.a = texture2D(aoMap, vec2(x, y )).a;\r\n // return for background fragments (0.0 in alpha component means that it is background fragment)\r\n if (res.a < EPSILON) {\r\n gl_FragColor = res;\r\n return;\r\n }\r\n\r\n float pixelDepth = texture2D(depthTexture, vec2(x, y)).x;\r\n float weightSum = 0.0;\r\n for (int i = 0; i < MAX_SAMPLES_COUNT; ++i) {\r\n if (texture2D(aoMap, vec2(x + samplesOffsets[i] * srcTexelSize.x, y )).a < EPSILON) {\r\n continue;\r\n }\r\n vec2 samplePos = vec2(x + samplesOffsets[i] * srcTexelSize.x, y);\r\n float depth = texture2D(depthTexture, samplePos).x;\r\n float weight = (1.0 / (0.0001 + abs(depth - pixelDepth)));\r\n res.rgb += texture2D(aoMap, vec2(x + samplesOffsets[i] * srcTexelSize.x, y )).rgb * weight;\r\n weightSum += weight;\r\n }\r\n res.rgb = res.rgb / weightSum;\r\n gl_FragColor = res;\r\n}\r\n",transparent:!1,depthTest:!1,depthWrite:!1})}}const Rh=Th,Mh=[-2,-1,0,1,2];class Ph extends r.RawShaderMaterial{constructor(e){super(e),this.setValues.call(this,{uniforms:{diffuseTexture:{type:"t",value:null},depthTexture:{type:"t",value:null},srcTexelSize:{type:"v2",value:new r.Vector2(1/512,1/512)},aoMap:{type:"t",value:null},samplesOffsets:{type:"fv1",value:Mh},projMatrix:{type:"mat4",value:new r.Matrix4},aspectRatio:{type:"f",value:0},tanHalfFOV:{type:"f",value:0},fogNearFar:{type:"v2",value:new r.Vector2(100,100)},fogColor:{type:"v4",value:new r.Vector4(0,.5,0,1)}},vertexShader:Qt,fragmentShader:"precision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 5\r\nuniform float samplesOffsets[MAX_SAMPLES_COUNT];\r\nuniform sampler2D diffuseTexture;\r\nuniform sampler2D aoMap;\r\nuniform sampler2D depthTexture;\r\nuniform vec2 srcTexelSize;\r\n\r\nuniform mat4 projMatrix;\r\nuniform float aspectRatio;\r\nuniform float tanHalfFOV;\r\n\r\n#ifdef USE_FOG\r\n uniform vec2 fogNearFar;\r\n uniform vec4 fogColor;\r\n#endif\r\nvarying vec2 vUv;\r\n\r\nfloat CalcViewZ(vec2 screenPos)\r\n{\r\n float depth = texture2D(depthTexture, screenPos).x;\r\n // [0, 1]->[-1, 1]\r\n float clipedZ = 2.0 * depth - 1.0;\r\n // see THREE.js camera.makeFrustum for projection details\r\n return (-projMatrix[3][2] / (clipedZ + projMatrix[2][2]));\r\n}\r\n\r\nvec3 ViewPosFromDepth(vec2 screenPos)\r\n{\r\n vec3 viewPos;\r\n viewPos.z = CalcViewZ(screenPos);\r\n //[0, 1]->[-1, 1]\r\n vec2 projPos = 2.0 * screenPos - 1.0;\r\n // reconstruct viewposition in right-handed sc with z to viewer\r\n viewPos.xy = vec2(\r\n projPos.x * aspectRatio * tanHalfFOV * abs(viewPos.z),\r\n projPos.y * tanHalfFOV * abs(viewPos.z)\r\n );\r\n return viewPos;\r\n}\r\n\r\nvoid main() {\r\n vec3 viewPos = ViewPosFromDepth(vUv);\r\n float x = vUv.x;\r\n float y = vUv.y;\r\n vec4 color = texture2D(diffuseTexture, vec2(x, y));\r\n vec4 res = vec4(0.0);\r\n res.a = texture2D(aoMap, vec2(x, y )).a;\r\n // return for background fragments (0.0 in alpha component means that it is background fragment)\r\n if (res.a < EPSILON) {\r\n gl_FragColor = color;\r\n return;\r\n }\r\n\r\n float pixelDepth = texture2D(depthTexture, vec2(x, y)).x;\r\n float weightSum = 0.0;\r\n for (int i = 0; i < MAX_SAMPLES_COUNT; ++i) {\r\n if (texture2D(aoMap, vec2(x, y + samplesOffsets[i] * srcTexelSize.y)).a < EPSILON) {\r\n continue;\r\n }\r\n vec2 samplePos = vec2(x, y + samplesOffsets[i] * srcTexelSize.y);\r\n float depth = texture2D(depthTexture, samplePos).x;\r\n float weight = (1.0 / (0.0001 + abs(depth - pixelDepth)));\r\n res.rgb += texture2D(aoMap, vec2(x, y + samplesOffsets[i] * srcTexelSize.y)).rgb * weight;\r\n weightSum += weight;\r\n }\r\n res.rgb /= weightSum;\r\n\r\n #if defined(USE_FOG) && !defined(FOG_TRANSPARENT)\r\n // Add fog to the result value\r\n // Proper way to get an image with fog and ao requires formula:\r\n // gl_FragColor = fragColor*AO*(1-fogFactor) + fogColor*fogFactor\r\n // But we have already fogged molecule to add AO too. Let's split the straight formula into our real steps!\r\n // We have: AO, fogFactor, fogColor,\r\n // color = fragColor*(1-fogFactor) + fogColor*fogFactor (it comes from diffuseTexture,\r\n // where molecule has been already drawn with fog)\r\n // Transform:\r\n // fragColor*AO*(1-fogFactor) + fogColor*fogFactor =\r\n // = [fragColor*(1-fogFactor) = color - fogColor*fogFactor] =\r\n // = (color - fogColor*fogFactor)*AO + fogColor*fogFactor =\r\n // = color*AO + fogColor*fogFactor*(1 - AO)\r\n // Result: gl_FragColor = color*AO + fogColor*fogFactor*(1 - AO)\r\n float fogFactor = smoothstep(fogNearFar.x, fogNearFar.y, - viewPos.z) * fogColor.a;\r\n gl_FragColor.rgb = color.rgb * res.rgb + fogColor.rgb * fogFactor *(vec3(1.0, 1.0, 1.0) - res.rgb);\r\n #else\r\n gl_FragColor.rgb = color.rgb * res.rgb;\r\n #endif\r\n gl_FragColor.a = color.a;\r\n}\r\n",transparent:!1,depthTest:!1,depthWrite:!1}),this.setValues(e)}setValues(e){if(void 0===e)return;super.setValues(e);const t={};this.useFog&&(t.USE_FOG=1),this.fogTransparent&&(t.FOG_TRANSPARENT=1),this.defines=t}}Ph.prototype.useFog=!0,Ph.prototype.fogTransparent=!1;const Nh=Ph;class Lh extends r.RawShaderMaterial{constructor(){super();const e={uniforms:{srcL:{type:"t",value:null},srcR:{type:"t",value:null}},vertexShader:Qt,fragmentShader:"precision highp float;\r\n\r\nuniform sampler2D srcL;\r\nuniform sampler2D srcR;\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n vec4 l = texture2D(srcL, vUv);\r\n vec4 r = texture2D(srcR, vUv);\r\n gl_FragColor = vec4(l.r, r.g, r.b, 1.0);\r\n}\r\n",transparent:!1,depthTest:!1,depthWrite:!1};this.setValues(e)}}const Ih=Lh;class Oh{constructor(){this.position=new r.Vector3(0,0,0),this.scale=1,this.orientation=new r.Quaternion(0,0,0,1)}set(e,t,r){this.position=e,this.scale=t,this.orientation=r}}class Vh{setup(e,t){this._startTime=void 0,this._endTime=void 0,this._isPaused=!1,this._srcView=e,this._dstView=t,this._isMoving=!1}isMoving(){return this._isMoving}wasStarted(){return void 0!==this._startTime&&void 0!==this._endTime}start(){this._startTime=Date.now();const e=z.now.interpolateViews?1500:0;this._endTime=this._startTime+e,this._isMoving=!0}getCurrentView(){if(void 0===this._srcView||void 0===this._dstView||!this._isMoving||!this.wasStarted())return{success:!1};let e=this.createView();const t=Date.now();if(t>this._endTime)return e=this._dstView,this.reset(),{success:!0,view:e};const r=(t-this._startTime)/(this._endTime-this._startTime);return e.position.copy(this._srcView.position),e.position.lerp(this._dstView.position,r),e.scale=(1-r)*this._srcView.scale+r*this._dstView.scale,e.orientation.copy(this._srcView.orientation),e.orientation.slerp(this._dstView.orientation,r),{success:!0,view:e}}reset(){this._startTime=this._endTime=0,this._isMoving=!1}pause(){this._isPaused||(this.setup(this.getCurrentView().view,this._dstView),this._isPaused=!0)}resume(){this._isPaused=!1}createView(){return new Oh}}function Dh(e,r){this.context=e,this._opts=t().merge({path:"/"},r)}ur(Dh.prototype),Dh.prototype.removeCookie=function(e){const t=this._toCount(e);let r=this._getSimpleCookie(t);if(r){this._removeSimpleCookie(t),r=parseInt(r,10);for(let t=0;tt?function(t){t.style.display="",t.style.cursor="pointer",t.style.left="calc(50% - 50px)",t.style.width="100px",t.textContent="ENTER VR";let r=null;function n(){r.removeEventListener("end",n),t.textContent="ENTER VR",r=null}function s(s){s.addEventListener("end",n),e._gfx.renderer.xr.setReferenceSpaceType("local"),e._gfx.renderer.xr.setSession(s),t.textContent="EXIT VR",r=s}t.onmouseenter=function(){t.style.opacity="1.0"},t.onmouseleave=function(){t.style.opacity="0.5"},t.onclick=function(){if(null===r){const t={optionalFeatures:["local-floor","bounded-floor"]};navigator.xr.requestSession("immersive-vr",t).then(s),e.moveSceneBehindHeadset()}else r.end()}}(r):function(e){e.style.display="",e.style.cursor="auto",e.style.left="calc(50% - 75px)",e.style.width="150px",e.textContent="VR NOT FOUND",e.onmouseenter=null,e.onmouseleave=null,e.onclick=null}(r))),r}const r=document.createElement("a");return r.href="https://webvr.info",r.innerHTML="WEBXR NOT SUPPORTED",r.style.left="calc(50% - 90px)",r.style.width="180px",r.style.textDecoration="none",t(r),r}class Fh{constructor(e){this._mainCamera=new r.PerspectiveCamera,this._button=null,this._onToggle=e,this._molContainer=new sr.RCGroup,this._user=new sr.RCGroup,this._scalingPivot=new r.Object3D,this._user.add(this._scalingPivot),this._controller1=null,this._controller2=null,this._pressedGripsCounter=0,this._distance=0,this._gfx=null}startScalingByControllers(){this._distance=this._controller1.position.distanceTo(this._controller2.position),sr.getMiddlePoint(this._controller1.position,this._controller2.position,this._scalingPivot.position),this._scalingPivot.scale.set(1,1,1),this._scalingPivot.updateMatrix(),this._scalingPivot.updateMatrixWorld(),this._scalingPivot.addSavingWorldTransform(this._molContainer)}stopScalingByControllers(){this._gfx.scene.addSavingWorldTransform(this._molContainer)}handleGripsDown(e){this._pressedGripsCounter++,2===this._pressedGripsCounter?this.startScalingByControllers():1===this._pressedGripsCounter&&e.target.addSavingWorldTransform(this._molContainer)}handleGripsUp(e){if(this._pressedGripsCounter--,1===this._pressedGripsCounter){this.stopScalingByControllers();(e.target===this._controller1?this._controller2:this._controller1).addSavingWorldTransform(this._molContainer)}else 0===this._pressedGripsCounter&&this._gfx.scene.addSavingWorldTransform(this._molContainer)}enable(e){if(!e)return void w.warn("WebVR couldn't be enabled, because gfx is not defined");this._gfx=e;const{renderer:t,camera:r}=e;if(!t)throw new Error("No renderer is available to toggle WebVR");if(!r)throw new Error("No camera is available to toggle WebVR");t.xr.enabled=!0,this._button?this._button.style.display="block":(this._button=zh(this),document.body.appendChild(this._button)),this._mainFog=z.now.fog,z.set("fog",!1),this._plugVRNodesIntoScene(e,t),this._setControllersListeners(),this._onToggle&&this._onToggle(!0)}_plugVRNodesIntoScene(e,t){this._mainCamera.copy(e.camera),e.scene.add(this._user),e.scene.add(this._molContainer),this._molContainer.add(e.root),this._controller1=t.xr.getController(0),this._controller2=t.xr.getController(1);const r=this._createControllerMesh();this._controller1.add(r),this._controller2.add(r.clone()),this._user.add(this._controller1),this._user.add(this._controller2)}_setControllersListeners(){this._controller1.addEventListener("selectstart",(e=>{this.handleGripsDown(e)})),this._controller1.addEventListener("selectend",(e=>{this.handleGripsUp(e)})),this._controller2.addEventListener("selectstart",(e=>{this.handleGripsDown(e)})),this._controller2.addEventListener("selectend",(e=>{this.handleGripsUp(e)})),this._controller1.addEventListener("squeezestart",(e=>{this.handleGripsDown(e)})),this._controller1.addEventListener("squeezeend",(e=>{this.handleGripsUp(e)})),this._controller2.addEventListener("squeezestart",(e=>{this.handleGripsDown(e)})),this._controller2.addEventListener("squeezeend",(e=>{this.handleGripsUp(e)}))}disable(){if(!this._gfx)return;const{renderer:e,camera:t}=this._gfx;if(!e)throw new Error("No renderer is available to toggle WebVR");e.setAnimationLoop(null);const r=e.xr.getSession();r&&r.end(),e.xr.enabled=!1,this._button&&(this._button.style.display="none"),z.set("fog",this._mainFog),this._unplugVRNodesFromScene(t),this._onToggle&&this._onToggle(!1)}_unplugVRNodesFromScene(e){this._mainCamera&&e&&e.copy(this._mainCamera);const t=this._molContainer.children[0];t&&this._gfx.scene.add(t),this._molContainer.parent.remove(this._molContainer),this._user&&this._gfx.scene.remove(this._user),this._molContainer=null,this._user=null,this._scalingPivot=null,this._user=null,this._controller1=null,this._controller2=null}_createControllerMesh(){const e=new r.CylinderGeometry(.04,.04,.3),t=new Jn({lights:!1,overrideColor:!0});t.setUberOptions({fixedColor:new r.Color(4474111)}),t.updateUniforms();const n=new r.Mesh(e,t);return n.rotateX(-Math.PI/2),n}updateMoleculeScale(){if(!this._controller1||!this._controller2)return;const e=this;if(2===e._pressedGripsCounter){sr.getMiddlePoint(e._controller1.position,e._controller2.position,e._scalingPivot.position);const t=e._controller1.position.distanceTo(e._controller2.position),r=t/e._distance;e._scalingPivot.scale.multiplyScalar(r),e._distance=t}}moveSceneBehindHeadset(){const e=this._gfx,{camera:t}=e,r=this._molContainer;r.matrix.identity(),r.position.set(0,0,-4),r.updateMatrix(),r.matrixWorld.multiplyMatrices(t.matrixWorld,r.matrix),e.scene.addSavingWorldTransform(r),this._onToggle&&this._onToggle(!0)}getCanvas(){const e=this._gfx;return e&&e.renderer?e.renderer.domElement:null}}const{selectors:Bh,Atom:Uh,Residue:Gh,Chain:jh,Molecule:Hh}=Yt,$h=0,Wh=1,Yh=2,Xh="Could not find suitable loader for this source";r.ColorManagement.enabled=!1;const{createElement:qh}=O;function Zh(e){const t=e.lastIndexOf(".");return t>=0&&(e=e.substr(0,t)),e}function Kh(e,t,r){void 0!==r?e.debug(`${t}... ${Math.floor(100*r)}%`):e.debug(`${t}...`)}function Qh(){return z.now.fogColorEnable?z.now.fogColor:z.now.bg.color}function Jh(e){g.call(this),this._opts=t().merge({settingsCookie:"settings",cookiePath:"/"},e),this._gfx=null,this._interpolator=new Vh,this._container=e&&e.container||document.getElementById("miew-container")||t().head(document.getElementsByClassName("miew-container"))||document.body,this._containerRoot=this._container,this._running=!1,this._halting=!1,this._building=!1,this._needRender=!0,this._hotKeysEnabled=!0,this.settings=z;const r=w;r.console=!1,r.level="info",this.logger=r,this._cookies=new kh(this),this.restoreSettings(),e&&e.settings&&this.settings.set(e.settings),this._spinner=null,this._loading=[],this._animInterval=null,this._visuals={},this._curVisualName=null,this._objects=[],this._sourceWindow=null,this.reset(),this._repr&&r.debug(`Selected ${this._repr.mode.name} mode with ${this._repr.colorer.name} colorer.`);const n=this;Jh.registeredPlugins.forEach((e=>{e.call(n)})),this._initOnSettingsChanged()}function eu(e,t){const r=e;for(;r.firstChild;)r.removeChild(r.firstChild);r.appendChild(t)}function tu(e){return e.getExtension("EXT_frag_depth")}function ru(e){return e.getExtension("WEBGL_depth_texture")&&e.getExtension("WEBGL_draw_buffers")}Jh.prototype=Object.create(g.prototype),Jh.prototype.constructor=Jh,Jh.prototype.getMaxRepresentationCount=function(){return Qo.NUM_REPRESENTATION_BITS},Jh.prototype._updateShadowCamera=function(){const e=new r.Matrix4,t=new r.Vector3,n={center:new r.Vector3,halfSize:new r.Vector3};return function(){this._gfx.scene.updateMatrixWorld();for(let r=0;r{n._onKeyDown(e)})),e.addEventListener("keyup",(e=>{n._onKeyUp(e)})),this._objectControls=new ih(this._gfx.root,this._gfx.pivot,this._gfx.camera,this._gfx.renderer.domElement,(()=>n._getAltObj())),this._objectControls.addEventListener("change",(e=>{switch(z.now.shadow.on&&n._updateShadowCamera(),e.action){case"rotate":n.dispatchEvent({type:"rotate",quaternion:e.quaternion});break;case"zoom":n.dispatchEvent({type:"zoom",factor:e.factor});break;default:n.dispatchEvent({type:e.action})}n.dispatchEvent({type:"transform"}),n._needRender=!0}));const t=this._gfx;this._picker=new ah(t.root,t.camera,t.renderer.domElement),this._picker.addEventListener("newpick",(e=>{n._onPick(e)})),this._picker.addEventListener("dblclick",(e=>{n.center(e)}))}catch(e){if("TypeError"===e.name&&"Cannot read property 'getExtension' of null"===e.message)this._showMessage("Could not create WebGL context.");else{if(!(e.message.search(/webgl/i)>1))throw this._showMessage("Viewer initialization failed."),e;this._showMessage(e.message)}return!1}const s=this._opts&&this._opts.load;if(s){const e=this._opts&&this._opts.type;this.load(s,{fileType:e,keepRepsInfo:!0})}return!0},Jh.prototype.term=function(){this._showMessage("Viewer has been terminated."),this._loading.forEach((e=>{e.cancel()})),this._loading.length=0,this.halt(),this._gfx=null},Jh.prototype._showMessage=function(e){const t=document.createElement("div");t.setAttribute("class","miew-message"),t.appendChild(document.createElement("p")).appendChild(document.createTextNode(e)),eu(this._container,t)},Jh.prototype._showCanvas=function(){eu(this._container,this._gfx.renderer.domElement)},Jh.prototype._requestAnimationFrame=function(e){const{xr:t}=this._gfx.renderer;t&&t.enabled?this._gfx.renderer.setAnimationLoop(e):requestAnimationFrame(e)},Jh.prototype._initGfx=function(){const e={width:this._container.clientWidth,height:this._container.clientHeight},t={preserveDrawingBuffer:!0,alpha:!0,premultipliedAlpha:!1};z.now.antialias&&(t.antialias=!0),e.renderer2d=new Xc,e.renderer=new r.WebGL1Renderer(t),e.renderer.shadowMap.enabled=z.now.shadow.on,e.renderer.shadowMap.autoUpdate=!1,e.renderer.shadowMap.type=r.PCFShadowMap,Fn.init(e.renderer),tu(e.renderer.getContext())||z.set("zSprites",!1),ru(e.renderer.getContext())||z.set("ao",!1),e.renderer.autoClear=!1,e.renderer.setPixelRatio(window.devicePixelRatio),e.renderer.setSize(e.width,e.height),e.renderer.setClearColor(z.now.bg.color,Number(!z.now.bg.transparent)),e.renderer.clearColor(),e.renderer2d.setSize(e.width,e.height),e.camera=new r.PerspectiveCamera(z.now.camFov,e.width/e.height,z.now.camNear,z.now.camFar),e.camera.setMinimalFov(z.now.camFov),e.camera.position.z=z.now.camDistance,e.camera.updateProjectionMatrix(),e.camera.layers.set(sr.LAYERS.DEFAULT),e.camera.layers.enable(sr.LAYERS.VOLUME),e.camera.layers.enable(sr.LAYERS.VOLUME_BFPLANE),e.stereoCam=new r.StereoCamera,e.scene=new r.Scene;const n=Qh();e.scene.fog=new r.Fog(n,z.now.camNear,z.now.camFar),e.root=new sr.RCGroup,e.scene.add(e.root),e.pivot=new sr.RCGroup,e.root.add(e.pivot),e.selectionScene=new r.Scene,e.selectionRoot=new r.Group,e.selectionRoot.matrixAutoUpdate=!1,e.selectionScene.add(e.selectionRoot),e.selectionPivot=new r.Group,e.selectionPivot.matrixAutoUpdate=!1,e.selectionRoot.add(e.selectionPivot);const s=new r.DirectionalLight(16777215,.45);s.position.set(0,.414,1),s.layers.enable(sr.LAYERS.TRANSPARENT),s.castShadow=!0,s.shadow.bias=.09,s.shadow.radius=z.now.shadow.radius,s.shadow.camera.layers.set(sr.LAYERS.SHADOWMAP);const i=e.renderer.getPixelRatio(),o=Math.max(e.width,e.height)*i;s.shadow.mapSize.width=o,s.shadow.mapSize.height=o,s.target.position.set(0,0,0),e.scene.add(s),e.scene.add(s.target);const a=new r.AmbientLight(6710886);a.layers.enable(sr.LAYERS.TRANSPARENT),e.scene.add(a),e.axes=new lh(e.root,e.camera);const l=e.width*i,c=e.height*i;e.offscreenBuf=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.NearestFilter,format:r.RGBAFormat,depthBuffer:!0}),e.renderer.getContext().getExtension("WEBGL_depth_texture")&&(e.offscreenBuf.depthTexture=new r.DepthTexture,e.offscreenBuf.depthTexture.type=r.UnsignedShortType),e.offscreenBuf2=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,depthBuffer:!1}),e.offscreenBuf3=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,depthBuffer:!1}),e.offscreenBuf4=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,depthBuffer:!1}),e.volBFTex=e.offscreenBuf3,e.volFFTex=e.offscreenBuf4,e.volWFFTex=e.offscreenBuf,e.renderer.getContext().getExtension("OES_texture_float")?(e.offscreenBuf5=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,type:r.FloatType,depthBuffer:!1}),e.offscreenBuf6=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,type:r.FloatType,depthBuffer:!1}),e.offscreenBuf7=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,type:r.FloatType,depthBuffer:!0}),e.volBFTex=e.offscreenBuf5,e.volFFTex=e.offscreenBuf6,e.volWFFTex=e.offscreenBuf7):this.logger.warn("Device doesn't support OES_texture_float extension"),e.stereoBufL=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,depthBuffer:!1}),e.stereoBufR=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,depthBuffer:!1}),this._gfx=e,this._showCanvas(),this._embedWebXR("WEBVR"===z.now.stereo),this._container.appendChild(e.renderer2d.getElement());const h=new m;h.domElement.style.position="absolute",h.domElement.style.right="0",h.domElement.style.bottom="0",this._container.appendChild(h.domElement),this._fps=h,this._fps.show(z.now.fps)},Jh.prototype._initListeners=function(){const e=this;window.addEventListener("resize",(()=>{e._onResize()}))},Jh.prototype._makeUniqueVisualName=function(e){if(!e)return Math.random().toString();let t=e,r=1;for(;this._visuals.hasOwnProperty(t);)t=`${e} (${r.toString()})`,r++;return t},Jh.prototype._addVisual=function(e){if(!e)return null;const t=this._makeUniqueVisualName(e.name);return e.name=t,this._visuals[t]=e,this._gfx.pivot.add(e),e.getSelectionGeo&&this._gfx.selectionPivot.add(e.getSelectionGeo()),t},Jh.prototype._removeVisual=function(e){let t="",r=null;e instanceof ar?(({name:t}=e),r=e):"string"==typeof e&&(t=e,r=this._visuals[t]),r&&this._visuals.hasOwnProperty(t)&&this._visuals[t]===r&&(t===this._curVisualName&&(this._curVisualName=void 0),delete this._visuals[t],r.release(),this._needRender=!0)},Jh.prototype._forEachVisual=function(e){for(const t in this._visuals)this._visuals.hasOwnProperty(t)&&e(this._visuals[t])},Jh.prototype._releaseAllVisuals=function(){if(this._gfx&&this._gfx.pivot){for(const e in this._visuals)this._visuals.hasOwnProperty(e)&&this._visuals[e].release();this._visuals={}}},Jh.prototype._forEachComplexVisual=function(e){if(this._gfx&&this._gfx.pivot)for(const t in this._visuals)this._visuals.hasOwnProperty(t)&&this._visuals[t]instanceof Qo&&e(this._visuals[t])},Jh.prototype._getComplexVisual=function(e){e=e||this._curVisualName;let t=null,r=null;return this._forEachComplexVisual((n=>{t=n,n.name===e&&(r=n)})),r||t},Jh.prototype._getVolumeVisual=function(){let e=null;return this._forEachVisual((t=>{t instanceof pa&&(e=t)})),e},Jh.prototype._getVisualForComplex=function(e){if(!e)return null;let t=null;return this._forEachComplexVisual((r=>{r.getComplex()===e&&(t=r)})),t},Jh.prototype.getVisuals=function(){return Object.keys(this._visuals)},Jh.prototype.getComplexVisualsCount=function(){let e=0;return this._forEachComplexVisual((()=>e++)),e},Jh.prototype.getCurrentVisual=function(){return this._curVisualName},Jh.prototype.setCurrentVisual=function(e){this._visuals[e]&&(this._curVisualName=e)},Jh.prototype.run=function(){if(!this._running){if(this._running=!0,this._halting)return void(this._halting=!1);this._objectControls.enable(!0),this._interpolator.resume(),this._requestAnimationFrame((()=>this._onTick()))}},Jh.prototype.halt=function(){this._running&&(this._discardComponentEdit(),this._discardFragmentEdit(),this._objectControls.enable(!1),this._interpolator.pause(),this._halting=!0)},Jh.prototype.enableHotKeys=function(e){this._hotKeysEnabled=e,this._objectControls.enableHotkeys(e)},Jh.prototype._onResize=function(){const e=this._gfx;e&&(this._needRender=!0,e.width=this._container.clientWidth,e.height=this._container.clientHeight,e.camera.aspect=e.width/e.height,e.camera.setMinimalFov(z.now.camFov),e.camera.updateProjectionMatrix(),e.renderer.setSize(e.width,e.height),e.renderer2d.setSize(e.width,e.height),this.dispatchEvent({type:"resize"}))},Jh.prototype._resizeOffscreenBuffers=function(e,t,r){const n=this._gfx,s="NONE"===(r=r||"NONE")||"ANAGLYPH"===r,i=s?1:.5;n.offscreenBuf.setSize(i*e,t),n.offscreenBuf2.setSize(i*e,t),n.offscreenBuf3.setSize(i*e,t),n.offscreenBuf4.setSize(i*e,t),n.offscreenBuf5&&n.offscreenBuf5.setSize(i*e,t),n.offscreenBuf6&&n.offscreenBuf6.setSize(i*e,t),n.offscreenBuf7&&n.offscreenBuf7.setSize(i*e,t),s&&(n.stereoBufL.setSize(e,t),n.stereoBufR.setSize(e,t))},Jh.prototype._onTick=function(){if(this._halting)return this._running=!1,void(this._halting=!1);this._fps.update(),this._requestAnimationFrame((()=>this._onTick())),this._onUpdate(),this._needRender&&(this._onRender(),this._needRender=!z.now.suspendRender||"WEBVR"===z.now.stereo)},Jh.prototype._getBSphereRadius=function(){let e=0;return this._forEachVisual((t=>{e=Math.max(e,t.getBoundaries().boundingSphere.radius)})),e*this._objectControls.getScale()},Jh.prototype.getOBB=function(){const e=new r.Sphere,t=new r.Box3,n=new r.Box3,s=new r.Matrix4,i=[new r.Vector3,new r.Vector3,new r.Vector3,new r.Vector3];return function(r,o){n.makeEmpty(),this._forEachVisual((s=>{e.copy(s.getBoundaries().boundingSphere),e.applyMatrix4(s.matrixWorld).applyMatrix4(r),e.getBoundingBox(t),n.union(t)})),n.getCenter(o.center),s.copy(r).invert(),o.center.applyMatrix4(s);const{min:a}=n,{max:l}=n;i[0].set(a.x,a.y,a.z),i[1].set(l.x,a.y,a.z),i[2].set(a.x,l.y,a.z),i[3].set(a.x,a.y,l.z);for(let e=0,t=i.length;e{e.getComplex().update()})),z.now.autobuild&&!this._loading.length&&!this._building&&this._needRebuild()&&this.rebuild(),this._loading.length||this._building||this._needRebuild()||this._updateView(),this._updateFog(),this._gfx.renderer.xr.enabled&&this.webVR.updateMoleculeScale()},Jh.prototype._onRender=function(){const e=this._gfx;e.scene.updateMatrixWorld(),e.camera.updateMatrixWorld(),this._clipPlaneUpdateValue(this._getBSphereRadius()),this._fogFarUpdateValue(),e.renderer.setRenderTarget(null),e.renderer.clear(),this._renderFrame(z.now.stereo)},Jh.prototype._renderFrame=function(){const e=new Ih,t=new r.Vector2;return function(r){const n=this._gfx,{renderer:s}=n;s.getSize(t),"NONE"!==r&&(n.camera.focus=n.camera.position.z,n.stereoCam.aspect=1,"ANAGLYPH"===r?n.stereoCam.update(n.camera):n.stereoCam.updateHalfSized(n.camera,z.now.camFov));const i=n.renderer.getPixelRatio();switch(this._resizeOffscreenBuffers(t.width*i,t.height*i,r),this._renderShadowMap(),r){case"WEBVR":case"NONE":this._renderScene(n.camera,!1);break;case"SIMPLE":case"DISTORTED":s.setScissorTest(!0),s.setScissor(0,0,t.width/2,t.height),s.setViewport(0,0,t.width/2,t.height),this._renderScene(this._gfx.stereoCam.cameraL,"DISTORTED"===r),s.setScissor(t.width/2,0,t.width/2,t.height),s.setViewport(t.width/2,0,t.width/2,t.height),this._renderScene(this._gfx.stereoCam.cameraR,"DISTORTED"===r),s.setScissorTest(!1);break;case"ANAGLYPH":this._renderScene(this._gfx.stereoCam.cameraL,!1,n.stereoBufL),this._renderScene(this._gfx.stereoCam.cameraR,!1,n.stereoBufR),s.setRenderTarget(null),e.uniforms.srcL.value=n.stereoBufL.texture,e.uniforms.srcR.value=n.stereoBufR.texture,n.renderer.renderScreenQuad(e)}n.renderer2d.render(n.scene,n.camera),z.now.axes&&n.axes&&!n.renderer.xr.enabled&&n.axes.render(s)}}(),Jh.prototype._onBgColorChanged=function(){const e=this._gfx,t=Qh();e&&(e.scene.fog&&e.scene.fog.color.set(t),e.renderer.setClearColor(z.now.bg.color,Number(!z.now.bg.transparent))),this._needRender=!0},Jh.prototype._onFogColorChanged=function(){const e=this._gfx,t=Qh();e&&e.scene.fog&&e.scene.fog.color.set(t),this._needRender=!0},Jh.prototype._setUberMaterialValues=function(e){this._gfx.root.traverse((t=>{(t instanceof r.Mesh||t instanceof r.LineSegments||t instanceof r.Line)&&t.material instanceof Jn&&(t.material.setValues(e),t.material.needsUpdate=!0)}))},Jh.prototype._enableMRT=function(e,t,r){const n=this._gfx,s=n.renderer.getContext(),i=s.getExtension("WEBGL_draw_buffers"),{properties:o}=n.renderer;if(!e)return void i.drawBuffersWEBGL([s.COLOR_ATTACHMENT0,null]);n.renderer.setRenderTarget(r);const a=o.get(r.texture).__webglTexture;s.bindTexture(s.TEXTURE_2D,a),n.renderer.setRenderTarget(t);const l=o.get(t).__webglFramebuffer,c=o.get(t.texture).__webglTexture;s.bindFramebuffer(s.FRAMEBUFFER,l),l.width=t.width,l.height=t.height,s.framebufferTexture2D(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,c,0),s.framebufferTexture2D(s.FRAMEBUFFER,i.COLOR_ATTACHMENT1_WEBGL,s.TEXTURE_2D,a,0),i.drawBuffersWEBGL([s.COLOR_ATTACHMENT0,i.COLOR_ATTACHMENT1_WEBGL])},Jh.prototype._renderScene=function(e,t,r){t=t||!1,r=r||null;const n=this._gfx;if(n.renderer.setClearColor(z.now.bg.color,Number(!z.now.bg.transparent)),n.renderer.setRenderTarget(r),n.renderer.clear(),n.renderer.xr.enabled)return void n.renderer.render(n.scene,e);n.renderer.setClearColor(0,0),n.renderer.setRenderTarget(n.offscreenBuf4),n.renderer.clearColor(),n.renderer.setClearColor(z.now.bg.color,Number(!z.now.bg.transparent)),n.renderer.setRenderTarget(n.offscreenBuf),n.renderer.clear();const s=null!==this._getComplexVisual(),i=this._getVolumeVisual(),o=s&&z.now.ao;o&&this._enableMRT(!0,n.offscreenBuf,n.offscreenBuf4),"prepass"===z.now.transparency?this._renderWithPrepassTransparency(e,n.offscreenBuf):"standard"===z.now.transparency&&(n.renderer.setRenderTarget(n.offscreenBuf),n.renderer.render(n.scene,e)),o&&this._enableMRT(!1,null,null);const a=s&&z.now.outline.on,l=s&&z.now.fxaa,c=null!==i&&null!=i.getMesh().material;let h=o||a||c||l||t?n.offscreenBuf2:r,u=n.offscreenBuf;o?(this._performAO(u,n.offscreenBuf4,n.offscreenBuf.depthTexture,h,n.offscreenBuf3,n.offscreenBuf2),l||t||c||a||(u=h,h=r,n.renderer.setRenderTarget(h),n.renderer.renderScreenQuadFromTex(u.texture,1))):(n.renderer.setRenderTarget(h),n.renderer.renderScreenQuadFromTex(u.texture,1)),a&&(u=h,h=c||l||t?n.offscreenBuf3:r,null!=u&&this._renderOutline(e,n.offscreenBuf,u,h)),this._renderSelection(e,n.offscreenBuf,h),c&&(n.renderer.setRenderTarget(n.offscreenBuf),n.renderer.renderScreenQuadFromTex(h.texture,1),h=n.offscreenBuf,this._renderVolume(i,e,h,n.volBFTex,n.volFFTex,n.volWFFTex),l||t||(n.renderer.setRenderTarget(r),n.renderer.renderScreenQuadFromTex(h.texture,1))),u=h,l&&(h=t?n.offscreenBuf4:r,this._performFXAA(u,h),u=h),t&&(h=r,this._performDistortion(u,h,!0))},Jh.prototype._performDistortion=function(){const e=new r.Scene,t=new r.OrthographicCamera(-1,1,1,-1,-500,1e3),n=new r.RawShaderMaterial({uniforms:{srcTex:{type:"t",value:null},aberration:{type:"fv3",value:new r.Vector3(1)}},vertexShader:Qt,fragmentShader:"precision highp float;\r\n\r\nvarying vec2 vUv;\r\nuniform sampler2D srcTex;\r\nuniform vec3 aberration;\r\n\r\nvoid main() {\r\n vec2 uv = vUv * 2.0 - 1.0;\r\n \r\n gl_FragColor.r = texture2D(srcTex, 0.5 * (uv * aberration[0] + 1.0)).r;\r\n gl_FragColor.g = texture2D(srcTex, 0.5 * (uv * aberration[1] + 1.0)).g;\r\n gl_FragColor.b = texture2D(srcTex, 0.5 * (uv * aberration[2] + 1.0)).b;\r\n gl_FragColor.a = 1.0;\r\n}",transparent:!1,depthTest:!1,depthWrite:!1}),s=sr.buildDistorionMesh(10,10,z.now.debug.stereoBarrel);return e.add(new fs.Mesh(s,n)),function(r,s,i){this._gfx.renderer.setRenderTarget(s),this._gfx.renderer.clear(),i?(n.uniforms.srcTex.value=r.texture,n.uniforms.aberration.value.set(.995,1,1.01),this._gfx.renderer.render(e,t)):this._gfx.renderer.renderScreenQuadFromTexWithDistortion(r,z.now.debug.stereoBarrel)}}(),Jh.prototype._renderOutline=function(){const e=new bh({depth:!0});return function(t,n,s,i){const o=this._gfx;e.uniforms.srcTex.value=s.texture,e.uniforms.srcDepthTex.value=n.depthTexture,e.uniforms.srcTexSize.value.set(n.width,n.height),e.uniforms.color.value=new r.Color(z.now.outline.color),e.uniforms.threshold.value=z.now.outline.threshold,e.uniforms.thickness.value=new r.Vector2(z.now.outline.thickness,z.now.outline.thickness),o.renderer.setRenderTarget(i),o.renderer.renderScreenQuad(e)}}(),Jh.prototype._renderShadowMap=function(){const e={minFilter:r.NearestFilter,magFilter:r.NearestFilter,format:r.RGBAFormat};return function(){if(!z.now.shadow.on)return;const t=this._gfx,n=t.renderer.getRenderTarget(),s=t.renderer.getActiveCubeFace(),i=t.renderer.getActiveMipmapLevel(),o=t.renderer.state;o.setBlending(r.NoBlending),o.buffers.color.setClear(1,1,1,1),o.buffers.depth.setTest(!0),o.setScissorTest(!1);for(let n=0;n0)return!0}return!1},Jh.prototype._renderSelection=function(){const e=new bh;return function(t,r,n){const s=this._gfx;s.renderer.setClearColor("black",0),s.renderer.setRenderTarget(r),s.renderer.clear(!0,!1,!1),this._hasSelectionToRender()?(s.selectionRoot.matrix=s.root.matrix,s.selectionPivot.matrix=s.pivot.matrix,s.renderer.render(s.selectionScene,t)):s.renderer.renderDummyQuad(),s.renderer.setRenderTarget(n),s.renderer.renderScreenQuadFromTex(r.texture,.6),e.uniforms.srcTex.value=r.texture,e.uniforms.srcTexSize.value.set(r.width,r.height),s.renderer.renderScreenQuad(e)}}(),Jh.prototype._checkVolumeRenderingSupport=function(e){if(!e)return!1;const t=this._gfx,r=t.renderer.getRenderTarget();t.renderer.setRenderTarget(e);const n=t.renderer.getContext(),s=n.checkFramebufferStatus(n.FRAMEBUFFER);return t.renderer.setRenderTarget(r),s===n.FRAMEBUFFER_COMPLETE||(this.logger.warn("Device doesn't support electron density rendering"),!1)},Jh.prototype._renderVolume=function(){const e=new aa.BackFacePosMaterial,t=new aa.FrontFacePosMaterial,n=(new r.Matrix4).makeTranslation(.5,.5,.5),s=new r.Matrix4;let i;return function(r,o,a,l,c,h){const u=this._gfx;if(void 0===i&&(i=this._checkVolumeRenderingSupport(l)),!i)return;const d=r.getMesh();d.rebuild(u.camera),u.renderer.setClearColor("black",0),u.renderer.setRenderTarget(l),u.renderer.clear(),u.renderer.setRenderTarget(c),u.renderer.clear(),u.renderer.setRenderTarget(h),u.renderer.clear(),u.renderer.setRenderTarget(l),o.layers.set(sr.LAYERS.VOLUME_BFPLANE),u.renderer.render(u.scene,o),o.layers.set(sr.LAYERS.VOLUME),u.scene.overrideMaterial=e,u.renderer.render(u.scene,o),u.renderer.setRenderTarget(c),o.layers.set(sr.LAYERS.VOLUME),u.scene.overrideMaterial=t,u.renderer.render(u.scene,o),u.scene.overrideMaterial=null,o.layers.set(sr.LAYERS.DEFAULT),s.copy(d.matrixWorld).invert(),Jn.prototype.uberOptions.world2colorMatrix.multiplyMatrices(n,s),o.layers.set(sr.LAYERS.COLOR_FROM_POSITION),u.renderer.setRenderTarget(h),u.renderer.render(u.scene,o);const p=d.material;p.uniforms._BFRight.value=l.texture,p.uniforms._FFRight.value=c.texture,p.uniforms._WFFRight.value=h.texture,o.layers.set(sr.LAYERS.VOLUME),u.renderer.setRenderTarget(a),u.renderer.render(u.scene,o),o.layers.set(sr.LAYERS.DEFAULT)}}(),Jh.prototype._renderWithPrepassTransparency=function(e,t){const r=this._gfx;r.renderer.setRenderTarget(t),e.layers.set(sr.LAYERS.DEFAULT),r.renderer.render(r.scene,e),e.layers.set(sr.LAYERS.PREPASS_TRANSPARENT),r.renderer.getContext().colorMask(!1,!1,!1,!1),r.renderer.render(r.scene,e),r.renderer.getContext().colorMask(!0,!0,!0,!0),e.layers.set(sr.LAYERS.TRANSPARENT),r.renderer.render(r.scene,e),e.layers.set(sr.LAYERS.DEFAULT)},Jh.prototype._performFXAA=function(){const e=new Sh;return function(t,r){if(void 0===t||void 0===r)return;const n=this._gfx;n.renderer.setClearColor(z.now.bg.color,Number(!z.now.bg.transparent)),n.renderer.setRenderTarget(r),n.renderer.clear(),e.uniforms.srcTex.value=t.texture,e.uniforms.srcTexelSize.value.set(1/t.width,1/t.height),e.uniforms.bgColor.value.set(z.now.bg.color),e.bgTransparent!==z.now.bg.transparent&&(e.setValues({bgTransparent:z.now.bg.transparent}),e.needsUpdate=!0),n.renderer.renderScreenQuad(e)}}(),Jh.prototype._performAO=function(){const e=new Ah,t=new Rh,n=new Nh,s=new r.Vector3;return function(i,o,a,l,c,h){if(!(i&&o&&a&&l&&c&&h))return;const u=this._gfx,d=Math.tan(.5*r.MathUtils.DEG2RAD*u.camera.fov);e.uniforms.diffuseTexture.value=i.texture,e.uniforms.depthTexture.value=a,e.uniforms.normalTexture.value=o.texture,e.uniforms.srcTexelSize.value.set(1/i.width,1/i.height),e.uniforms.camNearFar.value.set(u.camera.near,u.camera.far),e.uniforms.projMatrix.value=u.camera.projectionMatrix,e.uniforms.aspectRatio.value=u.camera.aspect,e.uniforms.tanHalfFOV.value=d,u.root.matrix.extractScale(s),e.uniforms.kernelRadius.value=z.now.debug.ssaoKernelRadius*s.x,e.uniforms.depthThreshold.value=2*this._getBSphereRadius(),e.uniforms.factor.value=z.now.debug.ssaoFactor,u.renderer.setRenderTarget(h),u.renderer.renderScreenQuad(e),t.uniforms.aoMap.value=h.texture,t.uniforms.srcTexelSize.value.set(1/h.width,1/h.height),t.uniforms.depthTexture.value=a,u.renderer.setRenderTarget(c),u.renderer.renderScreenQuad(t),n.uniforms.aoMap.value=c.texture,n.uniforms.diffuseTexture.value=i.texture,n.uniforms.srcTexelSize.value.set(1/c.width,1/c.height),n.uniforms.depthTexture.value=a,n.uniforms.projMatrix.value=u.camera.projectionMatrix,n.uniforms.aspectRatio.value=u.camera.aspect,n.uniforms.tanHalfFOV.value=d;const{fog:p}=u.scene;p&&(n.uniforms.fogNearFar.value.set(p.near,p.far),n.uniforms.fogColor.value.set(p.color.r,p.color.g,p.color.b,z.now.fogAlpha)),n.useFog===z.now.fog&&n.fogTransparent===z.now.bg.transparent||(n.setValues({useFog:z.now.fog,fogTransparent:z.now.bg.transparent}),n.needsUpdate=!0),u.renderer.setRenderTarget(l),u.renderer.renderScreenQuad(n)}}(),Jh.prototype.reset=function(){this._picker&&this._picker.reset(),this._lastPick=null,this._releaseAllVisuals(),this._setEditMode($h),this._resetObjects(),this._gfx&&(sr.clearTree(this._gfx.pivot),this._gfx.renderer2d.reset()),this.setNeedRender()},Jh.prototype._resetScene=function(){this._objectControls.reset(),this._objectControls.allowTranslation(!0),this._objectControls.allowAltObjFreeRotation(!0),this.resetReps(),this.resetPivot(),this.rebuildAll()},Jh.prototype.resetView=function(){this._picker&&this._picker.reset(),this._setEditMode($h),this._resetScene(),this._forEachComplexVisual((e=>{e.updateSelectionMask({}),e.rebuildSelectionGeometry()}))},Jh.prototype._export=function(e){const r=t().head(Wc.exporters.find({format:e}));if(!r)return this.logger.error("Could not find suitable exporter for this source"),Promise.reject(new Error("Could not find suitable exporter for this source"));if(this.dispatchEvent({type:"exporting"}),this._visuals[this._curVisualName]instanceof Qo){let e=null;r.SourceClass===Qo?e=this._visuals[this._curVisualName]:r.SourceClass===jt&&(e=this._visuals[this._curVisualName]._complex);return new r(e,{miewVersion:Jh.VERSION}).export().then((e=>e))}return this._visuals[this._curVisualName]instanceof pa?Promise.reject(new Error("Sorry, exporter for volume data not implemented yet")):Promise.reject(new Error("Unexpected format of data"))};const nu=/^(?:(pdb|cif|ccp4|dsn6):\s*)?(\d[a-z\d]{3})$/i,su=/^(?:pc|pubchem):\s*([a-z]+)$/i,iu=/^([a-z][a-z\d\-+.]*):/i;function ou(e,r,n){return new Promise((s=>{if(n.shouldCancel())throw new Error("Operation cancelled");n.notify({type:"fetching"}),e=function(e,r){if(!t().isString(e))return e;const n=nu.exec(e);if(n){let[,t="pdb",s]=n;switch(t=t.toLowerCase(),s=s.toUpperCase(),t){case"pdb":e=`https://files.rcsb.org/download/${s}.pdb`;break;case"cif":e=`https://files.rcsb.org/download/${s}.cif`;break;case"ccp4":e=`https://www.ebi.ac.uk/pdbe/coordinates/files/${s.toLowerCase()}.ccp4`;break;case"dsn6":e=`https://edmaps.rcsb.org/maps/${s.toLowerCase()}_2fofc.dsn6`;break;default:throw new Error("Unexpected data format shortcut")}return r.fileType=t,r.fileName=`${s}.${t}`,r.sourceType="url",e}const s=su.exec(e);if(s){const t=s[1].toLowerCase();return e=`https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/${t}/JSON?record_type=3d`,r.fileType="pubchem",r.fileName=`${t}.json`,r.sourceType="url",e}return"url"!==r.sourceType&&void 0!==r.sourceType||(r.sourceType="url",iu.test(e)||(e=O.resolveURL(e))),e}(e,r);const i=t().head(Wc.loaders.find({type:r.sourceType,source:e}));if(!i)throw new Error(Xh);const o=r.fileName||i.extractName(e);if(o){const[e,n]=O.splitFileName(o);t().defaults(r,{name:e,fileExt:n,fileName:o})}!function(e){let{binary:r}=e;if(void 0!==e.fileType){const n=t().head(Wc.parsers.find({format:e.fileType}));if(!n)throw new Error("Could not find suitable parser for this format");r=n.binary||!1}if(void 0===r&&void 0!==e.fileExt){const n=t().head(Wc.parsers.find({ext:e.fileExt}));n&&(r=n.binary||!1)}void 0!==e.fileExt&&".man"===e.fileExt.toLowerCase()&&(e.binary=!0,e.animation=!0),void 0!==r&&void 0!==e.binary&&e.binary!==r&&e.context.logger.warn("Overriding incorrect binary mode"),e.binary=r||!1}(r);let a=t().get(r,"preset.expression");if(!t().isUndefined(a)&&(a=JSON.parse(a),a&&a.settings)){const e=["singleUnit"];for(let r=0,n=e.length;rl.abort())),l.addEventListener("progress",(e=>{e.lengthComputable&&e.total>0?Kh(l.logger,"Fetching",e.loaded/e.total):Kh(l.logger,"Fetching")}));s(l.load().then((e=>(r.context.logger.info("Fetching finished"),n.notify({type:"fetchingDone",data:e}),e))).catch((e=>{throw r.context.logger.debug(e.message),e.stack&&r.context.logger.debug(e.stack),r.context.logger.error("Fetching failed"),n.notify({type:"fetchingDone",error:e}),e})))}))}Jh.prototype.load=function(e,r){r=t().merge({},r,{context:this}),this.settings.now.use.multiFile||(this._loading.length&&(this._loading.forEach((e=>{e.cancel()})),this._loading.length=0),r.animation||this.reset(!0)),this._interpolator.reset(),this.dispatchEvent({type:"loading",options:r,source:e});const n=new V;this._loading.push(n),n.addEventListener("notification",(e=>{this.dispatchEvent(e.slaveEvent)})),this._spinner.spin(this._container);const s=e=>{const t=this._loading.indexOf(n);return-1!==t&&this._loading.splice(t,1),this._spinner.stop(),this._refreshTitle(),n.notify({type:"loadingDone",anything:e}),e};return ou(e,r,n).then((e=>function(e,r,n){if(n.shouldCancel())return Promise.reject(new Error("Operation cancelled"));n.notify({type:"parsing"});const s=t().head(Wc.parsers.find({format:r.fileType,ext:r.fileExt,data:e}));if(!s)return Promise.reject(new Error("Could not find suitable parser"));const i=new s(e,r);return i.context=r.context,n.addEventListener("cancel",(()=>i.abort())),i.parse().then((e=>(n.notify({type:"parsingDone",data:e}),e))).catch((e=>{throw r.error=e,r.context.logger.debug(e.message),e.stack&&r.context.logger.debug(e.stack),r.context.logger.error("Parsing failed"),n.notify({type:"parsingDone",error:e}),e}))}(e,r,n))).then((e=>{const t=this._onLoad(e,r);return s(t)})).catch((e=>{throw this.logger.error("Could not load data"),this.logger.debug(e),s(e)}))},Jh.prototype.unload=function(e){this._removeVisual(e||this.getCurrentVisual()),this.resetPivot(),z.now.shadow.on&&this._updateShadowCamera()},Jh.prototype._startAnimation=function(e){this._stopAnimation();const t=this,r=this._getComplexVisual();if(null!==r){try{this._frameInfo=new mh(r.getComplex(),e,{onLoadStatusChanged(){t.dispatchEvent({type:"mdPlayerStateChanged",state:{isPlaying:t._isAnimating,isLoading:!t._frameInfo||t._frameInfo.isLoading}})},onError(e){t._stopAnimation(),t.logger.error(e)}})}catch(e){return void this.logger.error("Animation file does not fit to current complex!")}this._continueAnimation()}else this.logger.error("Unable to start animation - no molecule is loaded.")},Jh.prototype._pauseAnimation=function(){null!==this._animInterval&&(this._isAnimating=!1,clearInterval(this._animInterval),this._animInterval=null,this._frameInfo&&this.dispatchEvent({type:"mdPlayerStateChanged",state:{isPlaying:this._isAnimating,isLoading:this._frameInfo.isLoading}}))},Jh.prototype._continueAnimation=function(){this._isAnimating=!0;let e=1e3/z.now.maxfps;e=Number.isNaN(e)?0:e;const t=this,{pivot:r}=t._gfx,n=this._getComplexVisual();n&&(n.resetSelectionMask(),n.rebuildSelectionGeometry(),this._msgAtomInfo.style.opacity=0),this._animInterval=setInterval((()=>{if(t.dispatchEvent({type:"mdPlayerStateChanged",state:{isPlaying:t._isAnimating,isLoading:t._frameInfo.isLoading}}),t._frameInfo.frameIsReady){r.updateToFrame(t._frameInfo),t._updateObjsToFrame(t._frameInfo),t._refreshTitle(` Frame ${t._frameInfo._currFrame} of ${t._frameInfo._framesCount} time interval - ${t._frameInfo._timeStep}`);try{t._frameInfo.nextFrame()}catch(e){return t.logger.error("Error during animation"),void t._stopAnimation()}t._needRender=!0}}),e)},Jh.prototype._stopAnimation=function(){null!==this._animInterval&&(clearInterval(this._animInterval),this._frameInfo.disableEvents(),this._frameInfo=null,this._animInterval=null,this.dispatchEvent({type:"mdPlayerStateChanged",state:null}))},Jh.prototype._onLoad=function(e,r){const n=this._gfx;let s=null;if(r.animation)return this._refreshTitle(),this._startAnimation(e),null;if(this._stopAnimation(),r&&r.keepRepsInfo||(this._opts.reps=null,this._opts._objects=null),"Complex"===e.id){const n=e;r.fileName?n.name=n.name||Zh(r.fileName).toUpperCase():r.amberFileName?n.name=n.name||Zh(r.amberFileName).toUpperCase():n.name=`Dynamic ${r.fileType} molecule`,s=this._addVisual(new Qo(n.name,n)),this._curVisualName=s;const i=this.info();if(this.logger.info(`Parsed ${r.fileName} (${i.atoms} atoms, ${i.bonds} bonds, ${i.residues} residues, ${i.chains} chains).`),t().isNumber(this._opts.unit)&&n.setCurrentUnit(this._opts.unit),r.preset);else if(z.now.autoPreset)switch(r.fileType){case"cml":this.resetReps("small");break;case"pdb":case"mmtf":case"cif":!function(e){let t=!1;return e.forEachComponent((e=>{e.forEachResidue((e=>{e._isValid&&(t=!0)}))})),t}(n)?this.resetReps("small"):this.resetReps("macro");break;default:this.resetReps("default")}else this.resetReps("default")}else"Volume"===e.id&&(this.resetEd(),s=this._onLoadEd(e));return n.camera.updateProjectionMatrix(),this._updateFog(),n.root.resetTransform(),this.resetPivot(),this._objectControls.setScale(z.now.radiusToFit/this._getBSphereRadius()),this._resetObjects(),z.now.autoResolution&&this._tweakResolution(),z.now.shadow.on&&this._updateShadowCamera(),this._opts.view&&(this.view(this._opts.view),delete this._opts.view),this._refreshTitle(),s},Jh.prototype.resetEd=function(){this._edLoader&&(this._edLoader.abort(),this._edLoader=null),this._removeVisual(this._getVolumeVisual()),this._needRender=!0},Jh.prototype.loadEd=function(e){this.resetEd();const r=t().head(Wc.loaders.find({source:e}));if(!r)return this.logger.error(Xh),Promise.reject(new Error(Xh));const n=this._edLoader=new r(e,{binary:!0});return n.context=this,n.load().then((e=>{const r=t().head(Wc.parsers.find({format:"ccp4"}));if(!r)throw new Error("Could not find suitable parser for this source");const n=new r(e);return n.context=this,n.parse().then((e=>{this._onLoadEd(e)}))})).catch((e=>{this.logger.error("Could not load ED data"),this.logger.debug(e)}))},Jh.prototype._onLoadEd=function(e){e.normalize();const t=new pa("volume",e);t.getMesh().layers.set(sr.LAYERS.VOLUME);const r=this._addVisual(t);return this._needRender=!0,r},Jh.prototype._needRebuild=function(){let e=!1;return this._forEachComplexVisual((t=>{e=e||t.needsRebuild()})),e},Jh.prototype._rebuildObjects=function(){const e=this,t=this._gfx;let r,n;const s=[];for(r=0;r{const s=e._objects;for(r=0,n=s.length;r0?`Bio molecule ${e}`:"Asymmetric unit"})`}return void 0===e||(t().isString(e)&&(e=Math.max(parseInt(e,10),0)),n.getComplex().setCurrentUnit(e)&&(this._resetScene(),this._updateInfoPanel())),s()},Jh.prototype.rebuild=function(){if(this._building)return void this.logger.warn("Miew.rebuild(): already building!");this._building=!0,this.dispatchEvent({type:"rebuilding"}),this._rebuildObjects(),this._gfx.renderer2d.reset();const e=[];this._forEachComplexVisual((t=>{t.needsRebuild()&&e.push(t.rebuild().then((()=>new Promise((e=>{t.rebuildSelectionGeometry(),e()})))))}));const t=this;this._spinner.spin(this._container),Promise.all(e).then((()=>{t._spinner.stop(),t._needRender=!0,t._refreshTitle(),this.dispatchEvent({type:"buildingDone"}),t._building=!1}))},Jh.prototype.rebuildAll=function(){this._forEachComplexVisual((e=>{e.setNeedsRebuild()}))},Jh.prototype._refreshTitle=function(e){let t;e=void 0===e?"":e;const r=this._getComplexVisual();if(r){t=r.getComplex().name;const e=r.repGet(r.repCurrent());t+=e?` – ${e.mode.name} Mode`:""}else t=Object.keys(this._visuals).length>0?"Unknown":"No Data";t+=e,this.dispatchEvent({type:"titleChanged",data:t})},Jh.prototype.setNeedRender=function(){this._needRender=!0},Jh.prototype._extractRepresentation=function(){const e=[];this._forEachComplexVisual((t=>{if(0===t.getSelectionCount())return;const r=t.buildSelectorFromMask(1<0&&this.logger.report(`New representation from selection for complexes: ${e.join(", ")}`)},Jh.prototype._setReps=function(e){e=e||this._opts&&this._opts.reps||[],this._forEachComplexVisual((t=>t.resetReps(e)))},Jh.prototype.applyPreset=function(e){const{presets:t}=z.now,r=[e||z.defaults.preset,z.defaults.preset,Object.keys(t)[0]];let n=null;for(let e=0;!n&&e{const r=t.beginComponentEdit();r&&e.push(r)})),e!==[]&&(this._editors=e,this.logger.info("COMPONENT EDIT MODE -- ON"),this._setEditMode(Wh),this._objectControls.keysTranslateObj(!0))},Jh.prototype._applyComponentEdit=function(){if(this._editMode===Wh){this._objectControls.stop(),this._objectControls.keysTranslateObj(!1);for(let e=0;e{t instanceof Qo&&t.getSelectionCount()>0&&e.push(t)})),1!==e.length)return;const t=e[0].beginFragmentEdit();t&&(this._editors=[t],this.logger.info("FRAGMENT EDIT MODE -- ON (single bond)"),this._setEditMode(Yh),this._objectControls.allowTranslation(!1),this._objectControls.allowAltObjFreeRotation(t.isFreeRotationAllowed()),this._needRender=!0)},Jh.prototype._applyFragmentEdit=function(){if(this._editMode===Yh){this._objectControls.stop();for(let e=0;e{e.expandSelection(),e.rebuildSelectionGeometry()})),this._updateInfoPanel(),this._needRender=!0);break;case"NumpadSubtract":e.altKey&&(e.preventDefault(),e.stopPropagation(),this._forEachComplexVisual((e=>{e.shrinkSelection(),e.rebuildSelectionGeometry()})),this._updateInfoPanel(),this._needRender=!0)}}},Jh.prototype._onKeyUp=function(e){this._running&&this._hotKeysEnabled&&"KeyX"===e.code&&this._extractRepresentation()},Jh.prototype._updateInfoPanel=function(){const e=this._msgAtomInfo.getElementsByTagName("p")[0];let t,r,n=0;for(this._forEachComplexVisual((e=>{n+=e.getSelectionCount()}));e.firstChild;)e.removeChild(e.firstChild);if(0===n)return void(this._msgAtomInfo.style.opacity=0);let s=`${String(n)} atom${1!==n?"s":""} selected`;null!==this._lastPick&&(s+=", the last pick:");let i="",o="",a="";if(this._lastPick instanceof Uh){t=this._lastPick,r=t.residue,o=t.name;const e=32!==t.location?String.fromCharCode(t.location):"";i=`${t.element.fullName} #${t.serial}${e}: ${r._chain._name}.${r._type._name}${r._sequence}${r._icode.trim()}.`,i+=o,a=`Coord: (${t.position.x.toFixed(2).toString()}, ${t.position.y.toFixed(2).toString()}, ${t.position.z.toFixed(2).toString()})`}else this._lastPick instanceof Gh?(r=this._lastPick,i=`${r._type._fullName}: ${r._chain._name}.${r._type._name}${r._sequence}${r._icode.trim()}`):this._lastPick instanceof jh?i=`chain ${this._lastPick._name}`:this._lastPick instanceof Hh&&(i=`molecule ${this._lastPick._name}`);e.appendChild(document.createTextNode(s)),""!==i&&(e.appendChild(document.createElement("br")),e.appendChild(document.createTextNode(i))),""!==a&&(e.appendChild(document.createElement("br")),e.appendChild(document.createTextNode(a))),this._msgAtomInfo.style.opacity=1},Jh.prototype._getAltObj=function(){if(this._editors){let e=null;for(let t=0;t0){if(e){e=null;break}e=r}}if(e)return e}return{objects:[],pivot:new r.Vector3(0,0,0)}},Jh.prototype.resetPivot=function(){const e=new r.Box3,t=new r.Vector3;return function(){e.makeEmpty(),this._forEachVisual((t=>{e.union(t.getBoundaries().boundingBox)})),e.getCenter(t),this._objectControls.setPivot(t.negate()),this.dispatchEvent({type:"transform"})}}(),Jh.prototype.setPivotResidue=function(){const e=new r.Vector3;return function(t){const r=this._getVisualForComplex(t.getChain().getComplex());if(r){if(t._controlPoint)e.copy(t._controlPoint);else{let r=0,n=0,s=0;const i=t._atoms.length;for(let e=0;e{i.getSelectionCenter(e,r,n||i.getSelectionBit())&&(t.add(e),s++)})),0!==s&&(t.divideScalar(s),t.negate(),!0)}}(),Jh.prototype.setPivotSubset=function(){const e=new r.Vector3(0,0,0);function t(e,t){return e.mask&1<{const r=this._visuals[this._curVisualName]._complex.name;O.download(t,r,e.fileType),this._refreshTitle(),this.dispatchEvent({type:"exportingDone"})})).catch((e=>{this.logger.error("Could not export data"),this.logger.debug(e),this._refreshTitle(),this.dispatchEvent({type:"exportingDone",error:e})}))},Jh.prototype._tweakResolution=function(){const e=[["poor",100],["low",500],["medium",1e3],["high",5e3],["ultra",Number.MAX_VALUE]];let t=0;if(this._forEachComplexVisual((e=>{t+=e.getComplex().getAtomCount()})),t>0){const r=1e6*this._gfxScore/t;for(let t=0;ts?(o=!1,n.preset="empty"):z.now.preset!==z.defaults.preset&&(n.preset=z.now.preset);const a=[];let l=!0;for(let r=0,n=s;r0&&(r._objects=o),e.view&&(r.view=this.view()),e.settings){const e=this.settings.getDiffs(!1);t().isEmpty(e)||(r.settings=e)}return r},Jh.prototype.get=function(e,t){return z.get(e,t)},Jh.prototype._clipPlaneUpdateValue=function(e){const t=Math.max(this._gfx.camera.position.z-e*z.now.draft.clipPlaneFactor,z.now.camNear),r={clipPlaneValue:t};this._forEachComplexVisual((e=>{e.setUberOptions(r)}));for(let e=0,t=this._objects.length;e{const r=t._reprList;for(let t=0,n=r.length;t1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this._forEachComplexVisual((n=>n.setMaterialValues(e,t,r)));for(let t=0,r=this._objects.length;t{e.setUberOptions({fogAlpha:z.now.fogAlpha})}))},Jh.prototype._embedWebXR=function(){if("WEBVR"!==z.now.stereo)return this.webVR&&this.webVR.disable(),void(this.webVR=null);this.webVR||(this.webVR=new Fh((()=>{this._requestAnimationFrame((()=>this._onTick())),this._needRender=!0,this._onResize()}))),this.webVR.enable(this._gfx)},Jh.prototype._initOnSettingsChanged=function(){const e=(e,r)=>{(e=t().isArray(e)?e:[e]).forEach((e=>{this.settings.addEventListener(`change:${e}`,r)}))};e("modes.VD.frame",(()=>{const e=this._getVolumeVisual();null!==e&&(e.showFrame(z.now.modes.VD.frame),this._needRender=!0)})),e("modes.VD.isoMode",(()=>{const e=this._getVolumeVisual();null!==e&&(e.getMesh().material.updateDefines(),this._needRender=!0)})),e("bg.color",(()=>{this._onBgColorChanged()})),e("ao",(()=>{if(z.now.ao&&!ru(this._gfx.renderer.getContext()))this.logger.warn("Your device or browser does not support ao"),z.set("ao",!1);else{const e={normalsToGBuffer:z.now.ao};this._setUberMaterialValues(e)}})),e("zSprites",(()=>{z.now.zSprites&&!tu(this._gfx.renderer.getContext())&&(this.logger.warn("Your device or browser does not support zSprites"),z.set("zSprites",!1)),this.rebuildAll()})),e("fogColor",(()=>{this._onFogColorChanged()})),e("fogColorEnable",(()=>{this._onFogColorChanged()})),e("bg.transparent",(e=>{const t=this._gfx;t&&t.renderer.setClearColor(z.now.bg.color,Number(!z.now.bg.transparent)),this._updateMaterials({fogTransparent:e.value}),this.rebuildAll()})),e("draft.clipPlane",(e=>{this._updateMaterials({clipPlane:e.value}),this.rebuildAll()})),e("shadow.on",(e=>{const t={shadowmap:e.value,shadowmapType:z.now.shadow.type},r=this._gfx;r&&(r.renderer.shadowMap.enabled=Boolean(t.shadowmap)),this._updateMaterials(t,!0),t.shadowmap?(this._updateShadowCamera(),this._updateShadowmapMeshes(jo.createShadowmapMaterial)):this._updateShadowmapMeshes(jo.removeShadowmapMaterial),this._needRender=!0})),e("shadow.type",(e=>{z.now.shadow.on&&(this._updateMaterials({shadowmapType:e.value},!0),this._needRender=!0)})),e("shadow.radius",(e=>{for(let t=0;t{this._fps.show(z.now.fps)})),e(["fog","fogNearFactor","fogFarFactor"],(()=>{this._updateFog(),this._needRender=!0})),e("fogAlpha",(()=>{const{fogAlpha:e}=z.now;(e<0||e>1)&&this.logger.warn("fogAlpha must belong range [0,1]"),this._fogAlphaChanged(),this._needRender=!0})),e("autoResolution",(e=>{e.value&&!this._gfxScore&&this.logger.warn("Benchmarks are missed, autoresolution will not work! Autoresolution should be set during miew startup.")})),e("stereo",(()=>{this._embedWebXR("WEBVR"===z.now.stereo),this._needRender=!0})),e(["transparency","palette"],(()=>{this.rebuildAll()})),e("resolution",(()=>{this.rebuildAll();const e=this._getVolumeVisual();e&&(e.getMesh().material.updateDefines(),this._needRender=!0)})),e(["axes","fxaa","ao","outline.on","outline.color","outline.threshold","outline.thickness"],(()=>{this._needRender=!0}))},Jh.prototype.set=function(e,t){z.set(e,t)},Jh.prototype.select=function(e,r){const n=this._getComplexVisual();if(!n)return;let s=e;t().isString(e)&&(s=Bh.parse(e).selector),n.select(s,r),this._lastPick=null,this._updateInfoPanel(),this._needRender=!0};Jh.prototype.view=function(e){const t=this,{pivot:n}=this._gfx;let s=[];return void 0===e?function(){const e=n.position,i=t._objectControls.getScale()/z.now.radiusToFit,o=new r.Euler;return o.setFromQuaternion(t._objectControls.getOrientation(),"ZXY"),s=[e.x,e.y,e.z,i,o.x,o.y,o.z],"1"+O.arrayToBase64(s,Float32Array)}():(function(){40===e.length&&(e=`0${e}`);const i=e[0];if(s=O.arrayFromBase64(e.substr(1),Float32Array),"1"!==i){if("0"!==i)return void t.logger.warn(`Encoded view version mismatch, stored as ${i} vs 1 expected`);s[3]/=8}const o=t._interpolator,a=o.createView();a.position.copy(n.position),a.scale=t._objectControls.getScale(),a.orientation.copy(t._objectControls.getOrientation());const l=o.createView();l.position.set(s[0],s[1],s[2]),t._getComplexVisual()&&l.position.sub(t._getComplexVisual().position),l.scale=s[3],l.orientation.setFromEuler(new r.Euler(s[4],s[5],s[6],"ZXY")),o.setup(a,l)}(),e)},Jh.prototype._updateView=function(){const e=this,{pivot:t}=this._gfx,r=this._interpolator;if(r.wasStarted()||r.start(),!r.isMoving())return;const n=r.getCurrentView();if(n.success){const r=n.view;t.position.copy(r.position),e._objectControls.setScale(r.scale*z.now.radiusToFit),e._objectControls.setOrientation(r.orientation),this.dispatchEvent({type:"transform"}),e._needRender=!0}},Jh.prototype.translate=function(e,t,r){this._objectControls.translatePivot(e,t,r),this.dispatchEvent({type:"transform"}),this._needRender=!0},Jh.prototype.rotate=function(e,t,n){this._objectControls.rotate((new r.Quaternion).setFromEuler(new r.Euler(e,t,n,"XYZ"))),this.dispatchEvent({type:"transform"}),this._needRender=!0},Jh.prototype.scale=function(e){if(e<=0)throw new RangeError("Scale should be greater than zero");this._objectControls.scale(e),this.dispatchEvent({type:"transform"}),this._needRender=!0},Jh.prototype.center=function(e){if(void 0===e)return this.setPivotSubset(),void(this._needRender=!0);if(void 0!==e.obj&&("atom"in e.obj||"residue"in e.obj))return"atom"in e.obj?this.setPivotAtom(e.obj.atom):this.setPivotResidue(e.obj.residue),void(this._needRender=!0);if(void 0===e.obj&&""!==e){const t=Bh.parse(e);if(void 0===t.error)return this.setPivotSubset(t),void(this._needRender=!0)}this.resetPivot(),this._needRender=!0},Jh.prototype.within=function(e,t){const r=this._getComplexVisual();if(!r)return Bh.None();e instanceof String&&(e=Bh.parse(e));const n=r.within(e,t);return n&&(r.rebuildSelectionGeometry(),this._needRender=!0),n},Jh.prototype.projected=function(e,t){const r=this._getComplexVisual(t);if(!r)return!1;const n=r.getComplex().getAtomByFullname(e);if(null===n)return!1;const s=n.position.clone();return this._gfx.pivot.updateMatrixWorldRecursive(),this._gfx.camera.updateMatrixWorldRecursive(),this._gfx.pivot.localToWorld(s),s.project(this._gfx.camera),{x:.5*(s.x+1)*this._gfx.width,y:.5*(1-s.y)*this._gfx.height}},Jh.prototype.dssp=function(e){const t=this._getComplexVisual(e);t&&(t.getComplex().dssp(),t._reprList.forEach((e=>{"CA"!==e.mode.id&&"SS"!==e.colorer.id||(e.needsRebuild=!0)})))},Jh.prototype.exportCML=function(){const e=this;const t=e._getComplexVisual(),n=t?t.getComplex():null;if(n&&n.originalCML){!function(t){const{root:n}=e._gfx,s=function(e){const t=new r.Vector3,n=new r.Vector3,s=new r.Vector3;e.extractBasis(t,n,s),t.normalize(),n.normalize(),s.normalize();const i=new r.Matrix4;return i.identity(),i.makeBasis(t,n,s),i}(n.matrixWorld),i=new r.Vector4(0,0,0,0),o=new r.Vector4(0,0,0,0);let a=null,l=null;t.forEachAtom((e=>{e.xmlNodeRef&&e.xmlNodeRef.xmlNode&&(a=e.xmlNodeRef.xmlNode,l=e.position,i.set(l.x,l.y,l.z,1),i.applyMatrix4(s),a.setAttribute("x3",i.x.toString()),a.setAttribute("y3",i.y.toString()),a.setAttribute("z3",i.z.toString()),a.removeAttribute("x2"),a.removeAttribute("y2"))})),t.forEachSGroup((e=>{if(e.xmlNodeRef&&e.xmlNodeRef.xmlNode){a=e.xmlNodeRef.xmlNode,l=e.getPosition(),i.set(l.x,l.y,l.z,1);const t=e.getCentralPoint();null===t?i.applyMatrix4(s):(o.set(t.x,t.y,t.z,0),i.add(o),i.applyMatrix4(s),o.set(t.x,t.y,t.z,1),o.applyMatrix4(s),i.sub(o)),a.setAttribute("x",i.x.toString()),a.setAttribute("y",i.y.toString()),a.setAttribute("z",i.z.toString())}}))}(n);return(new XMLSerializer).serializeToString(n.originalCML)}return null},Jh.prototype.motm=function(){z.set({fogColorEnable:!0,fogColor:0,outline:{on:!0,threshold:.01},bg:{color:16777215}}),this._forEachComplexVisual((e=>{const t=[],r=e.getComplex(),n=ao.get(z.now.palette);for(let e=0;e #aromatic radius"," atom = #atom radius"," bond = #bond radius"," multibond = #use multibond"," showarom = #show aromatic"," space = #space value\n"]},CA:{$help:[" Cartoon"," arrow = #arrow size"," depth = #depth of surface"," heightSegmentsRatio = "," radius = #tube radius"," tension = #"," width = #secondary width\n"]},LN:{$help:[" Lines"," atom = #atom radius"," chunkarom = "," multibond = #use multibond"," showarom = #show aromatic"," offsarom = \n"]},LC:{$help:[" Licorice"," aromrad = #aromatic radius"," bond = #bond radius"," multibond = #use multibond"," showarom = #show aromatic"," space = #space value\n"]},VW:{$help:[" Van der Waals"," nothing\n"]},TR:{$help:[" Trace"," radius = #tube radius\n"]},TU:{$help:[" Tube"," heightSegmentsRatio = "," radius = #tube radius"," tension = \n"]},SA:{$help:[" Surface"," zClip = #clip z plane\n"]},QS:{$help:[" Quick surface"," isoValue = "," scale = "," wireframe = "," zClip = #clip z plane\n"]},SE:{$help:[" Solvent excluded surface"," zClip = #clip z plane\n"]},TX:{$help:[" Text mode",' template = string that can include "{{ id }}"'," it will be replaced by value, id can be one of next:"," serial, name, type, sequence, residue, chain, hetatm, water\n",' horizontalAlign = {"left", "right", "center"}',' verticalAlign = {"top", "bottom", "middle"}'," dx = #offset along x"," dy = #offset along y"," dz = #offset along z"," fg = #text color modificator"," could be keyword, named color or hex"," fg = #back color modificator"," could be keyword, named color or hex"," showBg = #if set show background"," plate under text"]}},hu={$help:["Coloring mode shortcut"," EL - color by element"," CH - color by chain"," SQ - color by sequence"," RT - color by residue type"," SS - color by secondary structure"," UN - uniform"],UN:{$help:["Parameters of coloring modes customization"," Uniform"," color = #RGB->HEX->dec\n"],color:{$help:Object.keys(ao.get(z.now.palette).namedColors).sort().join("\n")}}},uu={$help:["Material shortcut"," DF - diffuse"," TR - transparent"," SF - soft plastic"," PL - glossy plastic"," ME - metal"," GL - glass"]},du={$help:["Short (packed) representation description as a set of variables"," s="," selector property"," m=[!:[,...]]"," render mode property"," c=[!:[,...]]"," color mode property"," mt="," material property"],s:{$help:"Selection expression string as it is in menu->representations->selection"},m:cu,c:hu,mt:uu},pu={$help:["Parameters of rendering modes customization: modes","Parameters of colorer customization: colorers","Autobuild: autobuild = (|)"],modes:cu,colorers:hu},mu={$help:["help (| )","You can get detailed information about command options",' using "help cmd.opt.opt.[...]"\n'," you can use one line comments"," everything started from (#|//) will be skipped"," Example: >build //some comment\n","List of available commands:"],reset:{$help:["Reload current object, delete all representations"," Nothing will work until load new object"]},load:{$help:["load (||-f [<*.NC FILE URL STRING>])"," Load new pdb object from selected source"],PDBID:{$help:"pdb id in remote molecule database"},URL:{$help:"url to source file"},f:{$help:["open file system dialog to fetch local file","optionally you can determine trajectory file","via URL for *.top model"]}},clear:{$help:"No args. Clear terminal"},add:{$help:["add [] []"," Add new item to representation set with"," default or params"],REP_NAME:{$help:"Identifier string [_,a-z,A-Z,0-9] can not start from digit"},DESCRIPTION:du},rep:{$help:["rep [|] []"," set current representation by name or index"," edit current representation by "],REP_NAME:{$help:["Identifier string [_,a-z,A-Z,0-9] can not start from digit","Must be declared before"]},REP_INDEX:{$help:"Index of available representation"},DESCRIPTION:du},remove:{$help:["remove (|)","Remove representation by name or index"],REP_NAME:{$help:["Identifier string [_,a-z,A-Z,0-9] can not start from digit","Must be declared before"]},REP_INDEX:{$help:"Index of available representation"}},selector:{$help:["selector "," set selector from EXPRESSION to current representation"],EXPRESSION:{$help:"Selection expression string as it is in menu->representations->selection"}},mode:{$help:["mode [=...]"," set rendering mode and apply parameters to current representation"],MODE_ID:cu},color:{$help:["color [=...]"," set colorer and apply parameters to current representation"],COLORER_ID:hu},material:{$help:["material "," set material to current representation"],MATERIAL_ID:uu},build:{$help:"build help str",add:{$help:"build.add",new:{$help:["add.new","add.new new line 1","add.new new line 2","add.new new line 3"]}},del:{$help:"build.del"}},list:{$help:["list [-e|-s||]","Print representations if no args print list of representations"," -e expand list and show all representations"," -s show all user-registered selectors"," | show only current representation"]},hide:{$help:["hide (|)","Hide representation referenced in args"]},show:{$help:["show (|)","Show representation referenced in args"]},get:{$help:["get ","Print value"," - path to option use get.PARAMETER to get more info"],PARAMETER:pu},set:{$help:["set ","Set with "," - path to option use set.PARAMETER to get more info"],PARAMETER:pu},set_save:{$help:["set_save","Save current settings to cookie"]},set_restore:{$help:["set_restore","Load and apply settings from cookie"]},set_reset:{$help:["set_reset","Reset current settings to the defaults"]},preset:{$help:["preset []","Reset current representation or set preset to "],PRESET:{$help:["default","wire","small","macro"]}},unit:{$help:["unit []","Change current biological structure view. Zero value means asymmetric unit,","positive values set an assembly with corresponding number.","Being called with no parameters command prints current unit information."]},view:{$help:["view []","Get current encoded view or set if ENCODED_VIEW placed as argument"],ENCODED_VIEW:{$help:["encoded view matrix string (binary code)"]}},rotate:{$help:["rotate (x|y|z) [] [(x|y|z) []]...","Rotate scene"]},scale:{$help:["scale ","Scale scene"]},select:{$help:["select [as ]","Select atoms using selector defined in SELECTOR_STRING"," and if SELECTOR_NAME is defined register it in viewer"," you can use it later as a complex selector"]},within:{$help:["within of as ","Build within named selector"," DISTANCE "," SELECTOR_STRING "," SELECTOR_NAME "]},url:{$help:["url [-s] [-v]","Report URL encoded scene"," if -s set that include settings in the URL"," if -v set that include view in the URL"]},screenshot:{$help:["screenshot [ []]","Make a screenshot of the scene"," WIDTH in pixels"," HEIGHT in pixels, equal to WIDTH by default"]},line:{$help:["line [=]","Draw dashed line between two specified atoms"]},removeobj:{$help:["removeobj ","Remove scene object by its index. Indices could be obtained by command"]},listobj:{$help:["listobj","Display the list of all existing scene objects"]}},{chem:{selectors:fu},modes:_u,colorers:gu,materials:yu,palettes:xu,options:bu,settings:wu}=au;function Su(){}const vu=function(){const e=new Su;return function(){return e}}();const Cu=new class{constructor(){this.representationMap={},this.representationID={}}get(e){return this.representationMap[e]||this.representationID[e]||""}add(e,t){if(-1===e)return"Can not create representation: there is no data";if(void 0!==t){if(this.representationMap.hasOwnProperty(e))return"This name has already existed, registered without name";this.representationMap[e.toString()]=t,this.representationID[t]=e.toString()}return`Representation ${e} successfully added`}remove(e){e&&this.representationID.hasOwnProperty(e)&&(delete this.representationMap[this.representationID[e]],delete this.representationID[e]);const t=Object.keys(this.representationID).sort();for(const r in t)if(t.hasOwnProperty(r)){const n=t[r];n>e&&(this.representationID[n-1]=this.representationID[n],this.representationMap[this.representationID[n]]-=1,delete this.representationID[n])}}clear(){this.representationMap={},this.representationID={}}};function Au(e){const t={s:"selector",m:"mode",c:"colorer",mt:"material",mode:"modes",color:"colorers",colorer:"colorers",select:"selector",material:"materials",selector:"selector"}[e];return void 0===t?e:t}const Eu=new class{list(e,t,r){let n="";if(e&&void 0!==t&&(void 0===r||"-e"===r)){const s=e.repCount();for(let i=0;i"===a?"":`, ${a}`}\n`,void 0!==n&&(s+=` selection : "${h}"\n`,s+=` mode : (${l.id}), ${l.name}\n`,s+=` colorer : (${c.id}), ${c.name}\n`,s+=` material : (${u.id}), ${u.name}\n`),s}listSelector(e,t){let r="";for(const e in t)t.hasOwnProperty(e)&&(r+=`${e} : "${t[e]}"\n`);return r}listObjs(e){const t=e._objects;if(!t||!Array.isArray(t)||0===t.length)return"There are no objects on the scene";const r=[];for(let e=0,n=t.length;ee.finishAwaitingCMDInProcess();e.load(t).then(r,r)}checkArg(e,t,r){if(void 0!==e&&void 0!==t){if("selector"===Au(e)){const e=fu.parse(t);if(void 0!==e.error){throw{message:e.error}}return void 0!==r&&r?e.selector:t}const n={colorers:gu,modes:_u,materials:yu};let s,i=e;for(;i!==s;)s=i,i=Au(s);if(void 0===n[i].get(t)){throw{message:`${t} is not existed in ${i}`}}return t}return vu}propagateProp(e,r){if(void 0!==e){let n={};const s=bu.adapters[typeof t().get(wu.defaults,e)];if(void 0===s){throw{message:`${e} is not existed`}}if((e.endsWith(".color")||e.endsWith(".baseColor")||e.endsWith(".EL.carbon"))&&"number"!=typeof r&&(r=xu.get(wu.now.palette).getNamedColor(r)),e.endsWith(".fg")||e.endsWith(".bg"))if("number"!=typeof r){const e=xu.get(wu.now.palette).getNamedColor(r,!0);void 0!==e&&(r=`0x${e.toString(16)}`)}else r=`0x${r.toString(16)}`;if(e.endsWith(".template")&&(r=r.replace(/\\n/g,"\n")),void 0!==r&&s(r)!==r&&s(r)!==r>0)throw n={message:`${e} must be a "${typeof t().get(wu.defaults,e)}"`},n}return r}unquoteString(e){return O.unquoteString(e)}};function Tu(e){if(e instanceof this.constructor)return e;this._values=e instanceof Array?e.slice(0):e?[e]:[]}Tu.prototype.append=function(e){const t=this._values;return t[t.length]=e,this},Tu.prototype.remove=function(e){const t=this._values,r=t.indexOf(e);return r>=0&&t.splice(r,1),this},Tu.prototype.toJSO=function(e,r,n){const s={},i=this._values;for(let o=0,a=i.length;o0},au.prototype.callNextCmd=function(){if(this.isScriptingCommandAvailable()){const e=this.cmdQueue.shift(),t={success:!1};try{lu.parser.parse(e),t.success=!0}catch(e){t.error=e.message,lu.parser.yy.error(t.error),this.finishAwaitingCMDInProcess()}return t}return""},lu.parser.yy=Ru,lu.parser.yy.parseError=lu.parser.parseError;const Mu=au})(),i=i.default})())); +(function(){var e,r,n,s,i,o,a,l,c,h,u,d,p,m,f,_,g,y,x,b,w,S,v,C,A,E,T=Object.prototype.hasOwnProperty,R=function(e,t){for(var r in t)T.call(t,r)&&(e[r]=t[r]);function n(){this.constructor=e}return n.prototype=t.prototype,e.prototype=new n,e.__super__=t.prototype,e};for(_ in d={method:(n={METHOD_NEAREST:"nearest",METHOD_LINEAR:"linear",METHOD_CUBIC:"cubic",METHOD_LANCZOS:"lanczos",METHOD_SINC:"sinc",CLIP_CLAMP:"clamp",CLIP_ZERO:"zero",CLIP_PERIODIC:"periodic",CLIP_MIRROR:"mirror",CUBIC_TENSION_DEFAULT:0,CUBIC_TENSION_CATMULL_ROM:0}).METHOD_CUBIC,cubicTension:n.CUBIC_TENSION_DEFAULT,clip:n.CLIP_CLAMP,scaleTo:0,sincFilterSize:2,sincWindow:void 0},c=function(e,t){return Math.max(0,Math.min(e,t-1))},u=function(e,t){return(e%=t)<0&&(e+=t),e},h=function(e,t){var r;return(e=u(e,r=2*(t-1)))>t-1&&(e=r-e),e},e=function(){function e(e,t){if(this.array=e.slice(0),this.length=this.array.length,!(this.clipHelper={clamp:this.clipHelperClamp,zero:this.clipHelperZero,periodic:this.clipHelperPeriodic,mirror:this.clipHelperMirror}[t.clip]))throw"Invalid clip: "+t.clip}return e.prototype.getClippedInput=function(e){return 0<=e&&e=i;s<=i?r++:r--)n+=this.kernel(e-r)*this.getClippedInput(r);return n},t}(e),p=function(e,t){var r,n,s,i;for(i=[],n=0,s=e.length;no;0<=o?c++:c--)r.push(new u(p(e,c),t));return r}(),function(e){var t,r,n,s;for(s=[],r=0,n=f.length;rn;n++){var i=r.charCodeAt(n);if(128>i)e.setUint8(t++,i>>>0&127);else if(2048>i)e.setUint8(t++,i>>>6&31|192),e.setUint8(t++,i>>>0&63|128);else if(65536>i)e.setUint8(t++,i>>>12&15|224),e.setUint8(t++,i>>>6&63|128),e.setUint8(t++,i>>>0&63|128);else{if(!(1114112>i))throw new Error("bad codepoint "+i);e.setUint8(t++,i>>>18&7|240),e.setUint8(t++,i>>>12&63|128),e.setUint8(t++,i>>>6&63|128),e.setUint8(t++,i>>>0&63|128)}}}function r(e){for(var t=0,r=0,n=e.length;n>r;r++){var s=e.charCodeAt(r);if(128>s)t+=1;else if(2048>s)t+=2;else if(65536>s)t+=3;else{if(!(1114112>s))throw new Error("bad codepoint "+s);t+=4}}return t}function n(e,s,i){var o=typeof e;if("string"===o){if(32>(a=r(e)))return s.setUint8(i,160|a),t(s,i+1,e),1+a;if(256>a)return s.setUint8(i,217),s.setUint8(i+1,a),t(s,i+2,e),2+a;if(65536>a)return s.setUint8(i,218),s.setUint16(i+1,a),t(s,i+3,e),3+a;if(4294967296>a)return s.setUint8(i,219),s.setUint32(i+1,a),t(s,i+5,e),5+a}if(e instanceof Uint8Array){var a=e.byteLength,l=new Uint8Array(s.buffer);if(256>a)return s.setUint8(i,196),s.setUint8(i+1,a),l.set(e,i+2),2+a;if(65536>a)return s.setUint8(i,197),s.setUint16(i+1,a),l.set(e,i+3),3+a;if(4294967296>a)return s.setUint8(i,198),s.setUint32(i+1,a),l.set(e,i+5),5+a}if("number"===o){if(!isFinite(e))throw new Error("Number not finite: "+e);if(Math.floor(e)!==e)return s.setUint8(i,203),s.setFloat64(i+1,e),9;if(e>=0){if(128>e)return s.setUint8(i,e),1;if(256>e)return s.setUint8(i,204),s.setUint8(i+1,e),2;if(65536>e)return s.setUint8(i,205),s.setUint16(i+1,e),3;if(4294967296>e)return s.setUint8(i,206),s.setUint32(i+1,e),5;throw new Error("Number too big 0x"+e.toString(16))}if(e>=-32)return s.setInt8(i,e),1;if(e>=-128)return s.setUint8(i,208),s.setInt8(i+1,e),2;if(e>=-32768)return s.setUint8(i,209),s.setInt16(i+1,e),3;if(e>=-2147483648)return s.setUint8(i,210),s.setInt32(i+1,e),5;throw new Error("Number too small -0x"+(-e).toString(16).substr(1))}if(null===e)return s.setUint8(i,192),1;if("boolean"===o)return s.setUint8(i,e?195:194),1;if("object"===o){var c=0,h=Array.isArray(e);if(h)a=e.length;else{var u=Object.keys(e);a=u.length}if(16>a?(s.setUint8(i,a|(h?144:128)),c=1):65536>a?(s.setUint8(i,h?220:222),s.setUint16(i+1,a),c=3):4294967296>a&&(s.setUint8(i,h?221:223),s.setUint32(i+1,a),c=5),h)for(var d=0;a>d;d++)c+=n(e[d],s,i+c);else for(d=0;a>d;d++){var p=u[d];c+=n(p,s,i+c),c+=n(e[p],s,i+c)}return c}throw new Error("Unknown type "+o)}function s(e){var t=typeof e;if("string"===t){if(32>(n=r(e)))return 1+n;if(256>n)return 2+n;if(65536>n)return 3+n;if(4294967296>n)return 5+n}if(e instanceof Uint8Array){if(256>(n=e.byteLength))return 2+n;if(65536>n)return 3+n;if(4294967296>n)return 5+n}if("number"===t){if(Math.floor(e)!==e)return 9;if(e>=0){if(128>e)return 1;if(256>e)return 2;if(65536>e)return 3;if(4294967296>e)return 5;throw new Error("Number too big 0x"+e.toString(16))}if(e>=-32)return 1;if(e>=-128)return 2;if(e>=-32768)return 3;if(e>=-2147483648)return 5;throw new Error("Number too small -0x"+e.toString(16).substr(1))}if("boolean"===t||null===e)return 1;if("object"===t){var n,i=0;if(Array.isArray(e)){n=e.length;for(var o=0;n>o;o++)i+=s(e[o])}else{var a=Object.keys(e);for(n=a.length,o=0;n>o;o++){var l=a[o];i+=s(l)+s(e[l])}}if(16>n)return 1+i;if(65536>n)return 3+i;if(4294967296>n)return 5+i;throw new Error("Array or object too long 0x"+n.toString(16))}throw new Error("Unknown type "+t)}function i(e){var t=new ArrayBuffer(s(e));return n(e,new DataView(t),0),new Uint8Array(t)}function o(e,t,r){return t?new e(t.buffer,t.byteOffset,t.byteLength/(r||1)):void 0}function a(e){return o(DataView,e)}function l(e){return o(Uint8Array,e)}function c(e){return o(Int8Array,e)}function h(e){return o(Int32Array,e,4)}function u(e){return o(Float32Array,e,4)}function d(e,t){var r=e.length/2;t||(t=new Int16Array(r));for(var n=0,s=0;r>n;++n,s+=2)t[n]=e[s]<<8^e[s+1];return t}function p(e,t){var r=e.length;t||(t=new Uint8Array(2*r));for(var n=a(t),s=0;r>s;++s)n.setInt16(2*s,e[s]);return l(t)}function m(e,t){var r=e.length/4;t||(t=new Int32Array(r));for(var n=0,s=0;r>n;++n,s+=4)t[n]=e[s]<<24^e[s+1]<<16^e[s+2]<<8^e[s+3];return t}function f(e,t){var r=e.length;t||(t=new Uint8Array(4*r));for(var n=a(t),s=0;r>s;++s)n.setInt32(4*s,e[s]);return l(t)}function _(e,t){var r=e.length;t||(t=new Float32Array(r/4));for(var n=a(t),s=a(e),i=0,o=0,l=r/4;l>i;++i,o+=4)n.setFloat32(o,s.getFloat32(o),!0);return t}function g(e,t,r){var n=e.length,s=1/t;r||(r=new Float32Array(n));for(var i=0;n>i;++i)r[i]=e[i]*s;return r}function y(e,t,r){var n=e.length;r||(r=new Int32Array(n));for(var s=0;n>s;++s)r[s]=Math.round(e[s]*t);return r}function x(e,t){var r,n;if(!t){var s=0;for(r=0,n=e.length;n>r;r+=2)s+=e[r+1];t=new e.constructor(s)}var i=0;for(r=0,n=e.length;n>r;r+=2)for(var o=e[r],a=e[r+1],l=0;a>l;++l)t[i]=o,++i;return t}function b(e){if(0===e.length)return new Int32Array;var t,r,n=2;for(t=1,r=e.length;r>t;++t)e[t-1]!==e[t]&&(n+=2);var s=new Int32Array(n),i=0,o=1;for(t=1,r=e.length;r>t;++t)e[t-1]!==e[t]?(s[i]=e[t-1],s[i+1]=o,o=1,i+=2):++o;return s[i]=e[e.length-1],s[i+1]=o,s}function w(e,t){var r=e.length;t||(t=new e.constructor(r)),r&&(t[0]=e[0]);for(var n=1;r>n;++n)t[n]=e[n]+t[n-1];return t}function S(e,t){var r=e.length;t||(t=new e.constructor(r)),t[0]=e[0];for(var n=1;r>n;++n)t[n]=e[n]-e[n-1];return t}function v(e,t){var r,n,s=e instanceof Int8Array?127:32767,i=-s-1,o=e.length;if(!t){var a=0;for(r=0;o>r;++r)e[r]i&&++a;t=new Int32Array(a)}for(r=0,n=0;o>r;){for(var l=0;e[r]===s||e[r]===i;)l+=e[r],++r;l+=e[r],++r,t[n]=l,++n}return t}function C(e,t){var r,n=t?127:32767,s=-n-1,i=e.length,o=0;for(r=0;i>r;++r)0===(c=e[r])?++o:o+=c===n||c===s?2:c>0?Math.ceil(c/n):Math.ceil(c/s);var a=t?new Int8Array(o):new Int16Array(o),l=0;for(r=0;i>r;++r){var c;if((c=e[r])>=0)for(;c>=n;)a[l]=n,++l,c-=n;else for(;s>=c;)a[l]=s,++l,c-=s;a[l]=c,++l}return a}function A(e,t){return w(x(e),t)}function E(e){return b(S(e))}function T(e,t,r){return g(x(e,h(r)),t,r)}function R(e,t){return b(y(e,t))}function M(e,t,r){return g(w(e,h(r)),t,r)}function P(e,t,r){return S(y(e,t),r)}function L(e,t,r){return g(v(e,h(r)),t,r)}function N(e,t,r){var n=v(e,h(r));return M(n,t,u(n))}function I(e,t,r){return C(P(e,t),r)}function O(e){var t=a(e),r=t.getInt32(0),n=t.getInt32(4),s=e.subarray(8,12);return[r,e=e.subarray(12),n,s]}function V(e,t,r,n){var s=new ArrayBuffer(12+n.byteLength),i=new Uint8Array(s),o=new DataView(s);return o.setInt32(0,e),o.setInt32(4,t),r&&i.set(r,8),i.set(n,12),i}function D(e){return V(2,e.length,void 0,l(e))}function k(e){return V(4,e.length,void 0,f(e))}function z(e,t){return V(5,e.length/t,f([t]),l(e))}function F(e){return V(6,e.length,void 0,f(b(e)))}function B(e){return V(8,e.length,void 0,f(E(e)))}function U(e,t){return V(9,e.length,f([t]),f(R(e,t)))}function G(e,t){return V(10,e.length,f([t]),p(I(e,t)))}function j(e){var t={};return ee.forEach((function(r){void 0!==e[r]&&(t[r]=e[r])})),e.bondAtomList&&(t.bondAtomList=k(e.bondAtomList)),e.bondOrderList&&(t.bondOrderList=D(e.bondOrderList)),t.xCoordList=G(e.xCoordList,1e3),t.yCoordList=G(e.yCoordList,1e3),t.zCoordList=G(e.zCoordList,1e3),e.bFactorList&&(t.bFactorList=G(e.bFactorList,100)),e.atomIdList&&(t.atomIdList=B(e.atomIdList)),e.altLocList&&(t.altLocList=F(e.altLocList)),e.occupancyList&&(t.occupancyList=U(e.occupancyList,100)),t.groupIdList=B(e.groupIdList),t.groupTypeList=k(e.groupTypeList),e.secStructList&&(t.secStructList=D(e.secStructList,1)),e.insCodeList&&(t.insCodeList=F(e.insCodeList)),e.sequenceIndexList&&(t.sequenceIndexList=B(e.sequenceIndexList)),t.chainIdList=z(e.chainIdList,4),e.chainNameList&&(t.chainNameList=z(e.chainNameList,4)),t}function H(e){function t(e){for(var t={},r=0;e>r;r++)t[i()]=i();return t}function r(t){var r=e.subarray(o,o+t);return o+=t,r}function n(t){var r=e.subarray(o,o+t);o+=t;var n=65535;if(t>n){for(var s=[],i=0;ir;r++)t[r]=i();return t}function i(){var i,l,c=e[o];if(!(128&c))return o++,c;if(128==(240&c))return o++,t(l=15&c);if(144==(240&c))return o++,s(l=15&c);if(160==(224&c))return o++,n(l=31&c);if(!(224&~c))return i=a.getInt8(o),o++,i;switch(c){case 192:return o++,null;case 194:return o++,!1;case 195:return o++,!0;case 196:return l=a.getUint8(o+1),o+=2,r(l);case 197:return l=a.getUint16(o+1),o+=3,r(l);case 198:return l=a.getUint32(o+1),o+=5,r(l);case 202:return i=a.getFloat32(o+1),o+=5,i;case 203:return i=a.getFloat64(o+1),o+=9,i;case 204:return i=e[o+1],o+=2,i;case 205:return i=a.getUint16(o+1),o+=3,i;case 206:return i=a.getUint32(o+1),o+=5,i;case 208:return i=a.getInt8(o+1),o+=2,i;case 209:return i=a.getInt16(o+1),o+=3,i;case 210:return i=a.getInt32(o+1),o+=5,i;case 217:return l=a.getUint8(o+1),o+=2,n(l);case 218:return l=a.getUint16(o+1),o+=3,n(l);case 219:return l=a.getUint32(o+1),o+=5,n(l);case 220:return l=a.getUint16(o+1),o+=3,s(l);case 221:return l=a.getUint32(o+1),o+=5,s(l);case 222:return l=a.getUint16(o+1),o+=3,t(l);case 223:return l=a.getUint32(o+1),o+=5,t(l)}throw new Error("Unknown type 0x"+c.toString(16))}var o=0,a=new DataView(e.buffer);return i()}function $(e,t,r,n){switch(e){case 1:return _(t);case 2:return c(t);case 3:return d(t);case 4:return m(t);case 5:return l(t);case 6:return x(m(t),new Uint8Array(r));case 7:return x(m(t));case 8:return A(m(t));case 9:return T(m(t),m(n)[0]);case 10:return N(d(t),m(n)[0]);case 11:return g(d(t),m(n)[0]);case 12:return L(d(t),m(n)[0]);case 13:return L(c(t),m(n)[0]);case 14:return v(d(t));case 15:return v(c(t))}}function W(e,t){var r=(t=t||{}).ignoreFields,n={};return re.forEach((function(t){var s=!!r&&-1!==r.indexOf(t),i=e[t];s||void 0===i||(i instanceof Uint8Array?n[t]=$.apply(null,O(i)):n[t]=i)})),n}function Y(e){return String.fromCharCode.apply(null,e).replace(/\0/g,"")}function X(e,t,r){var n,s,i,o,a,l,c=(r=r||{}).firstModelOnly,h=t.onModel,u=t.onChain,d=t.onGroup,p=t.onAtom,m=t.onBond,f=0,_=0,g=0,y=0,x=0,b=-1,w=e.chainNameList,S=e.secStructList,v=e.insCodeList,C=e.sequenceIndexList,A=e.atomIdList,E=e.bFactorList,T=e.altLocList,R=e.occupancyList,M=e.bondAtomList,P=e.bondOrderList;for(n=0,s=e.chainsPerModel.length;s>n&&!(c&&f>0);++n){var L=e.chainsPerModel[f];for(h&&h({chainCount:L,modelIndex:f}),i=0;L>i;++i){var N=e.groupsPerChain[_];if(u){var I=Y(e.chainIdList.subarray(4*_,4*_+4)),O=null;w&&(O=Y(w.subarray(4*_,4*_+4))),u({groupCount:N,chainIndex:_,modelIndex:f,chainId:I,chainName:O})}for(o=0;N>o;++o){var V=e.groupList[e.groupTypeList[g]],D=V.atomNameList.length;if(d){var k=null;S&&(k=S[g]);var z=null;e.insCodeList&&(z=String.fromCharCode(v[g]));var F=null;C&&(F=C[g]),d({atomCount:D,groupIndex:g,chainIndex:_,modelIndex:f,groupId:e.groupIdList[g],groupType:e.groupTypeList[g],groupName:V.groupName,singleLetterCode:V.singleLetterCode,chemCompType:V.chemCompType,secStruct:k,insCode:z,sequenceIndex:F})}for(a=0;D>a;++a){if(p){var B=null;A&&(B=A[y]);var U=null;E&&(U=E[y]);var G=null;T&&(G=String.fromCharCode(T[y]));var j=null;R&&(j=R[y]),p({atomIndex:y,groupIndex:g,chainIndex:_,modelIndex:f,atomId:B,element:V.elementList[a],atomName:V.atomNameList[a],formalCharge:V.formalChargeList[a],xCoord:e.xCoordList[y],yCoord:e.yCoordList[y],zCoord:e.zCoordList[y],bFactor:U,altLoc:G,occupancy:j})}y+=1}if(m){var H=V.bondAtomList;for(a=0,l=V.bondOrderList.length;l>a;++a)m({atomIndex1:y-D+H[2*a],atomIndex2:y-D+H[2*a+1],bondOrder:V.bondOrderList[a]})}g+=1}_+=1}if(x=b+1,b=y-1,m&&M)for(a=0,l=M.length;l>a;a+=2){var $=M[a],W=M[a+1];($>=x&&b>=$||W>=x&&b>=W)&&m({atomIndex1:$,atomIndex2:W,bondOrder:P?P[a/2]:null})}f+=1}}function q(e){return i(j(e))}function K(e,t){return e instanceof ArrayBuffer&&(e=new Uint8Array(e)),W(e instanceof Uint8Array?H(e):e,t)}function Z(e,t,r,n){function s(){try{var e=K(i.response);r(e)}catch(e){n(e)}}var i=new XMLHttpRequest;i.addEventListener("load",s,!0),i.addEventListener("error",n,!0),i.responseType="arraybuffer",i.open("GET",t+e.toUpperCase()),i.send()}function Q(e,t,r){Z(e,ie,t,r)}function J(e,t,r){Z(e,oe,t,r)}var ee=["mmtfVersion","mmtfProducer","unitCell","spaceGroup","structureId","title","depositionDate","releaseDate","experimentalMethods","resolution","rFree","rWork","bioAssemblyList","ncsOperatorList","entityList","groupList","numBonds","numAtoms","numGroups","numChains","numModels","groupsPerChain","chainsPerModel"],te=["xCoordList","yCoordList","zCoordList","groupIdList","groupTypeList","chainIdList","bFactorList","atomIdList","altLocList","occupancyList","secStructList","insCodeList","sequenceIndexList","chainNameList","bondAtomList","bondOrderList"],re=ee.concat(te),ne="v1.1.0dev",se="//mmtf.rcsb.org/v1.0/",ie=se+"full/",oe=se+"reduced/";e.encode=q,e.decode=K,e.traverse=X,e.fetch=Q,e.fetchReduced=J,e.version=ne,e.fetchUrl=ie,e.fetchReducedUrl=oe,e.encodeMsgpack=i,e.encodeMmtf=j,e.decodeMsgpack=H,e.decodeMmtf=W})?r.apply(t,n):r)||(e.exports=s)},535(t){"use strict";t.exports=e},698(e){"use strict";e.exports=t}},n={};function s(e){var t=n[e];if(void 0!==t)return t.exports;var i=n[e]={exports:{}};return r[e].call(i.exports,i,i.exports,s),i.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var i={};return(()=>{"use strict";s.d(i,{default:()=>Cu});var e=s(535),t=s.n(e),r=s(698),n=function(){return n=Object.assign||function(e){for(var t,r=1,n=arguments.length;rthis._prevTime+1e3&&(this._text.textContent=this.fps.toPrecision(2),this._prevTime=e),e}update(){this._startTime=this.end()}show(e){void 0===e&&(e=!0),this.domElement.style.display=e?"block":"none"}};function f(e,t){return!e||e===t}function _(){this._handlers={}}_.prototype.addEventListener=function(e,r,n){let s=this._handlers[e];s||(this._handlers[e]=[],s=this._handlers[e]);const i=[r,n];void 0===t().find(s,(function(e){return e[0]===i[0]&&e[1]===i[1]}))&&s.push(i)},_.prototype.removeEventListener=function(e,r,n){const s=this;t().forEach(s._handlers,((i,o)=>{t().remove(i,(t=>f(e,o)&&f(r,t[0])&&f(n,t[1]||s)))})),this._handlers=t().omitBy(s._handlers,(e=>0===e.length))},_.prototype.dispatchEvent=function(e){const r=this;t().forEach(this._handlers[e.type],(t=>{const n=t[1]||r;t[0].apply(n,[e])}))};const g=_,y={debug:0,info:1,report:2,warn:3,error:4};function x(){g.call(this),this.console=!1,this._priority=y.warn}function b(e){if(!t().isNumber(e))throw new Error("Wrong log level specified!");return e}x.prototype=Object.create(g.prototype),x.prototype.constructor=x,x.prototype.instantiate=function(){return new x},Object.defineProperty(x.prototype,"level",{get(){return t().findKey(y,(e=>e===this._priority))},set(e){this._priority=b(y[e])}}),x.prototype.levels=function(){return Object.keys(y)},x.prototype.message=function(e,t){const r=b(y[e]);this._message(r,t)},x.prototype.debug=function(e){this._message(y.debug,e)},x.prototype.info=function(e){this._message(y.info,e)},x.prototype.report=function(e){this._message(y.report,e)},x.prototype.warn=function(e){this._message(y.warn,e)},x.prototype.error=function(e){this._message(y.error,e)},x.prototype._message=function(e,r){if(et===e));if(r=String(r),this.console){}this.dispatchEvent({type:"message",level:n,message:r})};const w=new x,S={DEFAULT:0,SAFARI:1};function v(e){return decodeURIComponent(e.replace(/\+/g," "))}function C(e){const t=(e=e||window.location.search).substring(e.indexOf("?")+1),r=/([^&=]+)=?([^&]*)/g,n=[];let s;for(;null!==(s=r.exec(t));)n.push([v(s[1]),v(s[2])]);return n}function A(e){let t=!1;this.enable=function(e){t=e};let r=0;const n=Object.keys(e);function s(e,n){return function(...s){const i=A.spaces.substr(0,2*r);t&&w.debug(`${i+n} {`),r++;const o=e.apply(this,s);return r--,t&&w.debug(`${i}} // ${n}`),o}}for(let t=0,r=n.length;t=3&&"base64"===t[r-2]?new Blob([R(t[r-1])]):null}const N=/^[a-zA-Z0-9_]*$/,I=['"',"",'"'];const O={browserType:S,encodeQueryComponent:function(e,t){return encodeURIComponent(e).replace(t,(e=>String.fromCharCode(parseInt(e.substr(1),16)))).replace(/%20/g,"+")},decodeQueryComponent:v,getUrlParameters:C,getUrlParametersAsDict:function(e){const t={},r=C(e);for(let e=0;e0&&(i=Object.create(i))}return i},hexColor:function(e){return`#${`0000000${e.toString(16)}`.substr(-6)}`},DebugTracer:A,OutOfMemoryError:E,allocateTyped:function(e,t){let r=null;try{r=new e(t)}catch(e){throw e instanceof RangeError?new E(e.message):e}return r},bytesFromBase64:R,bytesToBase64:T,arrayFromBase64:function(e,t){return Array.prototype.slice.call(new t(R(e)))},arrayToBase64:function(e,t){return T(new t(e).buffer)},compareOptionsWithDefaults:function(e,t){const r=[];if(t&&e){const n=Object.keys(e);for(let s=0;s0)return`!${r.join()}`}return""},objectsDiff:function e(r,n){const s={};return t().forIn(r,((r,i)=>{const o=n[i];if(M(r)&&M(o)){const n=e(r,o);t().isEmpty(n)||(s[i]=n)}else t().isEqual(r,o)||(s[i]=r)})),s},forInRecursive:function(e,r){!function e(n,s){t().forIn(n,((t,n)=>{const i=s+(s.length>0?".":"");t instanceof Object?e(t,i+n):void 0!==t&&r(t,i+n)}))}(e,"")},enquoteString:function(e){return t().isString(e)?`"${e.replace(/"/g,'\\"')}"`:e},unquoteString:function(e){if(!t().isString(e))return e;if('"'===e[0]&&'"'===e[e.length-1])return(e=e.slice(1,e.length-1)).replace(/\\"/g,'"');if("'"===e[0]&&"'"===e[e.length-1])return(e=e.slice(1,e.length-1)).replace(/\\'/g,"'");throw new SyntaxError("Incorrect string format, can't unqute it")},getBrowser:function(){return navigator.vendor&&navigator.vendor.indexOf("Apple")>-1&&navigator.userAgent&&-1===navigator.userAgent.indexOf("CriOS")&&-1===navigator.userAgent.indexOf("FxiOS")?S.SAFARI:S.DEFAULT},shotOpen:function(e){"undefined"!=typeof window&&window.open().document.write(``)},shotDownload:function(e,t){if(e&&"data:"===e.substr(0,5))if(t||(t=["screenshot-",+new Date,".png"].join("")),"undefined"!=typeof window&&window.navigator&&window.navigator.msSaveBlob)window.navigator.msSaveBlob(L(e),t);else if("undefined"!=typeof document){const r=document.createElement("a");r.download=t,r.innerHTML="download",r.href=window.URL.createObjectURL(L(e)),document.body.appendChild(r),r.click(),document.body.removeChild(r)}},copySubArrays:function(e,t,r,n){for(let s=0,i=r.length;se+t.length),0),r=new e[0].constructor(t);for(let t=0,n=0;t{this._notifyChange(t,e)}))},changed(){if(!this.old)return[];const{old:e,now:r}=this;return t().filter(Object.keys(this._changed),(n=>t().get(e,n)!==t().get(r,n)))},applyDiffs(e){if(e.hasOwnProperty("VERSION")&&0!==e.VERSION)throw new Error("Settings version does not match!");delete e.VERSION,this.reset(),this.set(e)},getDiffs(e){const t=O.objectsDiff(this.now,D);return e&&(t.VERSION=0),t},setPluginOpts(e,r){D.plugins[e]=t().cloneDeep(r),this.now.plugins[e]=t().cloneDeep(r)}});const z=new k;let F=0;function B(e){return!(!e||"0"===e||t().isString(e)&&"false"===e.toLowerCase())}const U={string:String,number:Number,boolean:B},G="$;@/?";const j=O.generateRegExp(G+":,");function H(e){return O.encodeQueryComponent(e,j)}const $=O.generateRegExp(G+" ");function W(e){return O.encodeQueryComponent(e,$)}function Y(e){let{reps:t}=e;if(!t){const{presets:r}=z.now;let n=e.preset||z.now.preset;t=r[n],t||(w.warn(`Unknown preset "${n}"`),[n]=Object.keys(r),t=r[n]),e.preset=n,e.reps=O.deriveDeep(t,!0)}}function X(e,t,r){Y(e);const n=e.reps[F];n.hasOwnProperty(t)&&(F=e.reps.length,e.reps[F]=O.deriveDeep(n,!0)),void 0!==r&&(e.reps[F][t]=r)}function q(e,r,n){if(e){const s=e.indexOf("!"),i=function(e,t){const r=e.indexOf(",");return r>=0?(t.push(e.substr(r+1).split(",")),e.substr(0,r)):e}(e.substr(0,s>=0?s:void 0),n);if(s>=0){const n=e.substr(s+1).split(",");if(e=i,r){const s=r[e],i=O.deriveDeep(s,!0);n.forEach((r=>{const n=r.split(":",2),o=decodeURIComponent(n[0]),a=decodeURIComponent(n[1]),l=U[typeof t().get(s,o)];l?t().set(i,o,l(a)):w.warn(`Unknown argument "${o}" for option "${e}"`)})),Object.keys(i).length>0&&(e=[e,i])}}else e=i}return e}const K={l:"load",load:String,t:"type",type:String,v:"view",view:String,u:"unit",unit:Number,menu:B,o:"object",object(e,t){const r=[];let n=q(e,z.defaults.objects,r);Array.isArray(n)||(n=[n]),function(e,t,r){void 0===e._objects&&(e._objects=[]);const[n,s]=r,i={type:n,params:t};void 0!==s&&(i.opts=s),e._objects[e._objects.length]=i}(t,r[0],n)},p:"preset",preset(e,t){t.preset=e,t.reps=null,Y(t)},r:"rep",rep(e,t){Y(t),F=Number(e),F=F<=t.reps.length?F<0?0:F:t.reps.length,F===t.reps.length&&(t.reps[F]=F>0?O.deriveDeep(t.reps[F-1],!0):O.deriveDeep(z.defaults.presets.default[0],!0))},s:"select",select(e,t){X(t,"selector",e)},m:"mode",mode(e,t){X(t,"mode",q(e,z.defaults.modes))},c:"color",color(e,t){X(t,"colorer",q(e,z.defaults.colorers))},mt:"material",material(e,t){X(t,"material",q(e,z.defaults.materials))},dup(e,t){Y(t);const{reps:r}=t,n=r[F];F=r.length,r[F]=O.deriveDeep(n,!0)},ar:"autoResolution"};function Z(e){F=0;const r={};for(let n=0,s=e.length;n{t[r++]=W(n)+":"+W(e)})),t.join(",")}function J(e){return t().isArray(e)?e.length<2?e[0]:`${e[0]}!${Q(e[1])}`:e}function ee(e){if(!e||!e.type)return;let r=e.type;return t().isArray(e.params)&&e.params.length>0&&(r+=`,${e.params.join(",")}`),e.opts&&(r+="!"+Q(e.opts)),r}function te(e){const t=[];let r=0;return O.forInRecursive(e,((e,n)=>{t[r++]=`${n}=${O.enquoteString(e)}`})),t.join(" ")}function re(e){return t().isArray(e)?e.length<2?e[0]:`${e[0]} ${te(e[1])}`:e}function ne(e){if(!e||!e.type)return;let r=e.type;return t().isArray(e.params)&&e.params.length>0&&(r+=` ${e.params.map(O.enquoteString).join(" ")}`),e.opts&&(r+=` ${te(e.opts)}`),r}function se(e,r){const n=[];let s=0;function i(e,t){null!=t&&(n[s++]=e+t)}return t().isEmpty(e)?null:(i("",r),i("s=",O.enquoteString(e.selector)),i("m=",re(e.mode)),i("c=",re(e.colorer)),i("mt=",re(e.material)),n.join(" "))}const ie={fromURL:function(e){return Z(O.getUrlParameters(e))},fromAttr:function(e){return Z(O.getUrlParameters(`?${e||""}`))},adapters:U,toURL:function(e){const r=[];let n=0;function s(e,t){null!=t&&(r[n++]=H(e)+"="+H(t))}s("l",e.load),s("u",e.unit),s("p",e.preset),function(e){if(e)for(let r=0,n=e.length;r{"preset"!==t&&s(t,e)}));let i="";if("undefined"!=typeof window){const{location:e}=window;i=`${e.protocol}//${e.host}${e.pathname}`}return r.length>0&&(i+=`?${r.join("&")}`),i},toScript:function(e){const t=[];let r=0;function n(e,n,s){if(null!=n){const i="string"==typeof n&&s?'"':"";t[r++]=`${e} ${i}${n}${i}`.trim()}}return n("set","autobuild false"),n("load",e.load,!0),n("unit",e.unit),n("preset",e.preset),function(e){if(e)for(let t=0,r=e.length;t{"preset"!==t&&n(`set ${t}`,e,!0)})),n("view",e.view),n("set","autobuild true"),t.join("\n")}};class oe{constructor(e,t,r,n,s,i,o,a,l,c,h){this.index=-1,this.residue=e,this.name=t,this.element=r,this.position=n,this.role=s,this.mask=1,this.het=i,this.serial=o,this.location=(a||" ").charCodeAt(0),this.occupancy=l||1,this.temperature=c,this.charge=h,this.hydrogenCount=-1,this.radicalCount=0,this.valence=-1,this.bonds=[],this.flags=0,"H"===r.name?this.flags|=oe.Flags.HYDROGEN:"C"===r.name&&(this.flags|=oe.Flags.CARBON)}isHet(){return this.het}isHydrogen(){return 1===this.element.number}getVisualName(){const{name:e}=this;return e.length>0?e:this.element.name.trim()}forEachBond(e){const{bonds:t}=this;for(let r=0,n=t.length;rt)throw new Error("In a bond atom indices must be in increasing order");this._order=r,this._type=n}getLeft(){return this._left}getRight(){return this._right}getOrder(){return this._order}calcLength(){return this._left.position.distanceTo(this._right.position)}_forEachNeighbour(e,t){const{bonds:r}=e;for(let n=0,s=r.length;n{t!==r&&e(t)})),this._forEachNeighbour(r,(r=>{r!==t&&e(r)}))}forEachLevelTwo(e){const t=this._left,r=this._right,n=this;n._forEachNeighbour(t,(s=>{s!==r&&n._forEachNeighbour(s,(r=>{r!==t&&e(r)}))})),n._forEachNeighbour(r,(s=>{s!==t&&n._forEachNeighbour(s,(t=>{t!==r&&e(t)}))}))}_fixDir(e,t,r){let n=0,s=0;const i=e.clone();function o(o){i.copy(r(o)),i.sub(e);t.dot(i)>0?++n:++s}function a(e){"C"===e.element.name&&o(e)}const l=[[this.forEachLevelOne,a],[this.forEachLevelOne,o],[this.forEachLevelTwo,a],[this.forEachLevelTwo,o]];for(let e=0;en)return t.multiplyScalar(-1);if(sr.bonds.length&&(n=r,s=t);let i=n,o=0;const{bonds:a}=s;for(let e=0,t=a.length;eo&&t!==n&&(i=t,o=t.bonds.length)}const l=e(s),c=e(n).clone().sub(l),h=e(i).clone().sub(l);return h.crossVectors(c,h),h.lengthSq()<1e-4&&h.set(0,1,0),c.normalize(),h.normalize(),c.crossVectors(h,c),c.lengthSq()<1e-4&&c.set(0,1,0),c.normalize(),this._fixDir(l,c,e)}static BondType=he}de.prototype.BondType=he;const pe=de,me=["C3'","C3*","P","H5T","H3T"],fe=["OP1","O1P"],_e=["OP2","O2P"],ge=["C3'","C3*","C1","C1'","C1*","P"],ye=[{types:["A","DA","G","DG"],atoms:["N1"]},{types:["C","DC"],atoms:["N3"]},{types:["T","DT","U","DU"],atoms:["O4"]}];const xe=class{constructor(e,t,r,n){this._chain=e,this._component=null,this._type=t,this._sequence=r,this._icode=n,this._mask=1,this._index=-1,this._atoms=[],this._secondary=null,this._firstAtom=null,this._leadAtom=null,this._wingAtom=null,this._lastAtom=null,this._controlPoint=null,this._midPoint=null,this._wingVector=null,this._cylinders=null,this._isValid=!0,this._het=!1,this._molecule=null,this.temperature=null,this.occupancy=null}getChain(){return this._chain}getMolecule(){return this._molecule}getType(){return this._type}getSequence(){return this._sequence}getSecondary(){return this._secondary}getICode(){return this._icode}addAtom(e,t,r,n,s,i,o,a,l,c){const h=new ae(this,e,t,r,n,s,i,o,a,l,c);return this._chain.getComplex().addAtom(h),this._atoms.push(h),this._het=this._het||s,h}getAtomCount(){return this._atoms.length}forEachAtom(e){const t=this._atoms;for(let r=0,n=t.length;rr.name===e&&(t=r,!0))),t}_findFirstAtomInList(e){let t=null;for(let r=0;r1e-4){i.length()>1e-4&&Math.abs(n.angleTo(i))>Math.PI/2&&i.negate()}return i}_innerFinalize(e,t,n,s,i,o){const a=null===t,l=o(this._leadAtom),c=new r.Vector3(l.x,l.y,l.z);if(i)this._detectLeadWing(s,n,o);else{if(a)s._midPoint=o(this._firstAtom).clone();else{const r=t._controlPoint;s._midPoint=r.clone().lerp(c,.5),s._wingVector=this.calcWing(r,c,o(e._wingAtom),t._wingVector)}s._controlPoint=c}}_finalize2(e,t,r){this._innerFinalize(e,e,t,this,r,(e=>e.position))}isConnected(e){if(this._chain!==e._chain)return!1;if(this===e)return!0;let t=!1;return this.forEachAtom((r=>{const{bonds:n}=r;for(let r=0,s=n.length;r(null===e._leadAtom&&i.role===ce.Constants.Lead&&(e._leadAtom=i),null===e._wingAtom&&i.role===ce.Constants.Wing&&(e._wingAtom=i),i.temperature&&(r+=i.temperature,t++),i.occupancy&&(s+=i.occupancy,n++),null!==e._leadAtom&&null!==e._wingAtom))),t>0&&(this.temperature=r/t),n>0&&(this.occupancy=s/n),null!==this._leadAtom&&null!==this._wingAtom||(this._isValid=!1),null===this._leadAtom&&(this._leadAtom=this._firstAtom),null===this._wingAtom&&(this._wingAtom=this._lastAtom)}};class be{constructor(e,t,r){this._name=e,this._fullName=t,this.letterCode=r,this.flags=0}getName(){return this._name}static StandardTypes={ALA:new be("ALA","Alanine","A"),ARG:new be("ARG","Arginine","R"),ASN:new be("ASN","Asparagine","N"),ASP:new be("ASP","Aspartic Acid","D"),CYS:new be("CYS","Cysteine","C"),GLN:new be("GLN","Glutamine","Q"),GLU:new be("GLU","Glutamic Acid","E"),GLY:new be("GLY","Glycine","G"),HIS:new be("HIS","Histidine","H"),ILE:new be("ILE","Isoleucine","I"),LEU:new be("LEU","Leucine","L"),LYS:new be("LYS","Lysine","K"),MET:new be("MET","Methionine","M"),PHE:new be("PHE","Phenylalanine","F"),PRO:new be("PRO","Proline","P"),PYL:new be("PYL","Pyrrolysine","O"),SEC:new be("SEC","Selenocysteine","U"),SER:new be("SER","Serine","S"),THR:new be("THR","Threonine","T"),TRP:new be("TRP","Tryptophan","W"),TYR:new be("TYR","Tyrosine","Y"),VAL:new be("VAL","Valine","V"),A:new be("A","Adenine","A"),C:new be("C","Cytosine","C"),G:new be("G","Guanine","G"),I:new be("I","Inosine","I"),T:new be("T","Thymine","T"),U:new be("U","Uracil","U"),DA:new be("DA","Adenine","A"),DC:new be("DC","Cytosine","C"),DG:new be("DG","Guanine","G"),DI:new be("DI","Inosine","I"),DT:new be("DT","Thymine","T"),DU:new be("DU","Uracil","U"),"+A":new be("+A","Adenine","A"),"+C":new be("+C","Cytosine","C"),"+G":new be("+G","Guanine","G"),"+I":new be("+I","Inosine","I"),"+T":new be("+T","Thymine","T"),"+U":new be("+U","Uracil","U"),WAT:new be("WAT","Water",""),H2O:new be("H2O","Water",""),HOH:new be("HOH","Water",""),DOD:new be("DOD","Water",""),UNK:new be("UNK","Unknown",""),UNL:new be("UNL","Unknown Ligand","")};static Flags={PROTEIN:1,BASIC:2,ACIDIC:4,POLAR:8,NONPOLAR:16,AROMATIC:32,NUCLEIC:256,PURINE:512,PYRIMIDINE:1024,DNA:2048,RNA:4096,WATER:65536}}function we(e,t){for(let r=0,n=t.length;r1&&e[1]._wingVector){const t=e[1]._wingVector;e[0]._wingVector=new r.Vector3(t.x,t.y,t.z)}else e.length>0&&(e[0]._wingVector=new r.Vector3(1,0,0))}updateToFrame(e){const t=this._residues;let n=null,s=null;const i=e._residues,o=t.length;function a(t){return e.getAtomPos(t.index)}for(let e=0;e1?i[t[1]._index]._wingVector:new r.Vector3(1,0,0)}addResidue(e,t,r){let n=this._complex.getResidueType(e);null===n&&(n=this._complex.addResidueType(e));const s=new xe(this,n,t,r);return this._complex.addResidue(s),this._residues.push(s),n.flags&(ve.Flags.NUCLEIC|ve.Flags.PROTEIN)&&(this.maxSequencet&&(this.minSequence=t)),s}getResidueCount(){return this._residues.length}forEachResidue(e){const t=this._residues;for(let r=0,n=t.length;r=0&&t.splice(r,1),this}toString(){return this._values.join(",")}toJSON(){const e=this._values,t=[];for(let r=0,n=e.length;rthis.priority?`(${this.rhs})`:this.rhs;return`${this.keyword} ${e}`}toJSON(){return[this.name,this.rhs.toJSON()]}}Ke.prototype.priority=1;class Ze extends je{constructor(e,t){super(),this.lhs=e||qe,this.rhs=t||qe}toString(){const e=this.lhs.priority&&this.lhs.priority>this.priority?`(${this.lhs})`:this.lhs,t=this.rhs.priority&&this.rhs.priority>this.priority?`(${this.rhs})`:this.rhs;return`${e} ${this.keyword} ${t}`}toJSON(){return[this.name,this.lhs.toJSON(),this.rhs.toJSON()]}}Ze.prototype.priority=1e3;const Qe={};function Je(e,t){const r=e.toLowerCase();t.prototype.keyword=r,t.prototype.name=e;const n=(...e)=>new t(...e);return n.SelectorClass=t,Qe[r]=n,t}Je("Serial",class extends $e{includesAtom(e){return this.list.includes(e.serial)}}),Je("Name",class extends We{includesAtom(e){return this.list.includes(e.name)}}),Je("AltLoc",class extends We{includesAtom(e){return this.list.includes(String.fromCharCode(e.location))}}),Je("Elem",class extends We{includesAtom(e){return this.list.includes(e.element.name)}}),Je("Residue",class extends We{includesAtom(e){return this.list.includes(e.residue._type._name)}}),Je("Sequence",class extends $e{includesAtom(e){return this.list.includes(e.residue._sequence)}}),Je("ICode",class extends We{constructor(e){super(e,!0)}includesAtom(e){return this.list.includes(e.residue._icode)}}),Je("ResIdx",class extends $e{includesAtom(e){return this.list.includes(e.residue._index)}}),Je("Chain",class extends We{constructor(e){super(e,!0)}includesAtom(e){return this.list.includes(e.residue._chain._name)}}),Je("Hetatm",class extends je{includesAtom(e){return e.het}}),Je("PolarH",class extends je{includesAtom(e){return(e.flags&ae.Flags.NONPOLARH)===ae.Flags.HYDROGEN}}),Je("NonPolarH",class extends je{includesAtom(e){return(e.flags&ae.Flags.NONPOLARH)===ae.Flags.NONPOLARH}}),Je("All",Xe),Je("None",Ye);const et=Qe.none();function tt(e,t,r){return r.prototype.priority=t,Je(e,r)}function rt(e,t){return Je(t,class extends je{includesAtom(t){return 0!==(t.residue._type.flags&e)}})}tt("Not",1,class extends Ke{includesAtom(e){return!this.rhs.includesAtom(e)}}),tt("And",2,class extends Ze{includesAtom(e){return this.lhs.includesAtom(e)&&this.rhs.includesAtom(e)}}),tt("Or",3,class extends Ze{includesAtom(e){return this.lhs.includesAtom(e)||this.rhs.includesAtom(e)}}),rt(ve.Flags.PROTEIN,"Protein"),rt(ve.Flags.BASIC,"Basic"),rt(ve.Flags.ACIDIC,"Acidic"),rt(ve.Flags.BASIC|ve.Flags.ACIDIC,"Charged"),rt(ve.Flags.POLAR,"Polar"),rt(ve.Flags.NONPOLAR,"NonPolar"),rt(ve.Flags.AROMATIC,"Aromatic"),rt(ve.Flags.NUCLEIC,"Nucleic"),rt(ve.Flags.PURINE,"Purine"),rt(ve.Flags.PYRIMIDINE,"Pyrimidine"),rt(ve.Flags.WATER,"Water");const nt=Object.create(Qe);nt.Selector=je,nt.RangeListSelector=$e,nt.ValueListSelector=We,nt.Range=class{constructor(e,t){this.min=e,this.max=void 0===t?e:t}includes(e){return this.min<=e&&e<=this.max}toString(){const{min:e,max:t}=this;return e===t?String(e):[e,t].join(":")}toJSON(){return[this.min,this.max]}},nt.RangeList=Be,nt.ValueList=Ge,nt.PrefixOperator=Ke,nt.InfixOperator=Ze,nt.Context=Object.create({}),nt.GetSelector=function(e){if(!nt.Context.hasOwnProperty(e)){throw{message:`selector ${e} is not registered`}}return nt.Context[e]||et},nt.ClearContext=function(){Object.keys(nt.Context).forEach((e=>{delete nt.Context[e]}))},nt.keyword=function(e){return Qe[e.toLowerCase()]||Qe.none},nt.parse=function(e){const t={};try{t.selector=ze.parser.parse(e)}catch(e){t.selector=et,t.error=e.message}return t},ze.parser.yy=nt,ze.parser.yy.parseError=ze.parser.parseError;const st=nt;const it=class{constructor(e){this._complex=e,this._selector=st.keyword("All")(),this._boundaries={boundingBox:new r.Box3,boundingSphere:new r.Sphere}}computeBoundaries(){const e=this._complex._atoms,t=e.length,n=this._selector,{boundingBox:s}=this._boundaries;if(s.makeEmpty(),1===t){s.expandByPoint(e[0].position);const t=new r.Vector3;s.getCenter(t);const n=2*e[0].element.radius;s.setFromCenterAndSize(t,new r.Vector3(n,n,n))}else for(let r=0;r0?this._selector=st.keyword("Chain")(this.chains):this._selector=st.keyword("None")()}};const at=class{constructor(e){this._complex=e,this._index=-1,this._residueIndices=[],this._cycles=[],this._subDivs=[],this._residueCount=0}getResidues(){return this._complex._residues}getResidueCount(){return this._residueCount}forEachResidue(e){const t=this._complex._residues,r=this._residueIndices;for(let n=0,s=r.length;n{e.update()}))}forEachAtom(e){this.forEachResidue((t=>{t.forEachAtom(e)}))}addCycle(e){this._cycles.push(e)}forEachCycle(e){const t=this._cycles;for(let r=0,n=t.length;r{t._component=e}))}_forEachSubChain(e,t){const r=this._complex._residues,n=this._subDivs;for(let s=0,i=n.length;s{t[r++]={start:n,end:s}})),t}getMaskedSubdivSequences(e){const t=[];let r=-1,n=-1;const s=this._subDivs;return this._forEachSubChain(e,((e,i,o)=>{n!==e&&(++r,t[r]={arr:[],boundaries:s[e]},n=e),t[r].arr[t[r].arr.length]={start:i,end:o}})),t}};const lt=class{constructor(e){this.numPairs=0,this.numMaxPairs=e,this.intBuffer=O.allocateTyped(Int32Array,4*e);for(let t=0;t<4*e;t++)this.intBuffer[t]=-1;this.hashBuffer=O.allocateTyped(Int32Array,33554432);for(let e=0;e<33554432;e++)this.hashBuffer[e]=-1}destroy(){this.intBuffer=null,this.hashBuffer=null}addPair(e,t){const r=et?e:t,s=r+(n<<14);let i=32*(r+89237*n&1048575),o=0;for(;o<32;o++){const e=this.hashBuffer[i+o];if(-1===e)break;if(e===s)return!1}if(o>=32)throw new Error("addPair: increase cMaxPairsForHashCode");if(this.hashBuffer[i+o]=s,this.numPairs>=this.numMaxPairs)throw new Error("addPair: increase num pairs");return i=4*this.numPairs,this.intBuffer[i]=r,this.intBuffer[i+1]=n,this.intBuffer[i+2]=s,this.numPairs++,!0}};function ct(e){const{element:t}=e;if(t)return t.radiusBonding;throw new Error("_getBondingRadius: Logic error.")}const ht=class{constructor(e){this._complex=e,this._maxRad=1.8;const t=this._complex.getDefaultBoundaries().boundingBox;this._vBoxMin=t.min.clone(),this._vBoxMax=t.max.clone(),this._pairCollection=null}_addExistingPairs(){const e=this._complex.getAtoms(),t=e.length;let r=0;const n=this._pairCollection;for(;rh*h||r<.001||n._pairCollection.addPair(l.index,e.index)};for(let n=0;n.1)&&e.dot(t)>=0}}();function mt(e,t){let r=0;for(;r3}function wt(e){return!0}const St=class{constructor(e){this._complex=e;const t=new Array(e._bonds.length),r=new Array(e._bonds.length);for(let e=0,n=t.length;es[l]?++l:++a}return!1}_tryBond(e,t,n){const s=[],i=this._bondsData,o=ft(e,t),a=t.position.clone().sub(o.position),l=this._currStart,c=this,h=this._bondMarks;let u=this._checkBond;h[e._index]=!0,u=void 0===u?yt:u,t.forEachBond((o=>{if(!u(o)||o===e||h[o._index]||c._haveSameCycle(i,e,o))return;const d=ft(o,t),p=d.position.clone().sub(t.position),m=d===l?-2:1-function(e,t){const n=e.dot(t)/Math.sqrt(e.lengthSq()*t.lengthSq());return r.MathUtils.clamp(n,-1,1)}(a,p),f=p.cross(a);if(!pt(f,n))return;let _=0;for(;_{n._resetCycles(),r.forEachBond((t=>{e(t)&&n._startCycle(t)}));const s=n._cycles;for(let e=0,n=s.length;e=e.z?t:Math.max(o,a),[l,c]}function Ct(e,t,r,n){const s=r-e.y,i=n-e.y,o=Math.sqrt(Math.max(t*t-s*s,0)),a=Math.sqrt(Math.max(t*t-i*i,0)),l=Math.min(o,a);let c;return c=r<=e.y&&n>=e.y?t:Math.max(o,a),[l,c]}class At{constructor(e,t){this._box=e.clone();const n=new r.Vector3;e.getSize(n),this._count=n.clone().divide(t).floor().max(new r.Vector3(1,1,1)),this._last=this._count.clone().subScalar(1),this._cellSize=n.clone().divide(this._count),this._cellInnerR=.5*Math.min(Math.min(this._cellSize.x,this._cellSize.y),this._cellSize.z),this._cellOuterR=.5*Math.sqrt(this._cellSize.dot(this._cellSize));const s=this._count.x*this._count.y*this._count.z;this._voxels=O.allocateTyped(Int32Array,s);for(let e=0;e{const n=t._findVoxel(e.position);t._atoms[r]=e,t._atoms[r+1]=t._voxels[n],t._voxels[n]=r,r+=2}))}static _zero=new r.Vector3(0,0,0);static _voxel=new r.Vector3;_findVoxel(e){const t=At._zero,r=At._voxel;return r.copy(e).sub(this._box.min).divide(this._cellSize).floor().clamp(t,this._last),r.x+this._count.x*(r.y+this._count.y*r.z)}_forEachAtomInVoxel(e,t){for(let r=this._voxels[e];r>=0;r=this._atoms[r+1])t(this._atoms[r])}static _xRange=new r.Vector2;static _yRange=new r.Vector2;static _zRange=new r.Vector2;_forEachVoxelWithinRadius(e,t,r){const n=At._xRange,s=At._yRange,i=At._zRange;if(t/this._cellInnerR<10)return void this._forEachVoxelWithinRadiusSimple(e,t,r);let o,a,l,c,h,u,d,p;i.set(e.z-t,e.z+t),i.subScalar(this._box.min.z).divideScalar(this._cellSize.z).floor().clampScalar(0,this._count.z-1);for(let m=i.x;m<=i.y;++m){h=[this._box.min.z+m*this._cellSize.z,this._box.min.z+(m+1)*this._cellSize.z],p=e.z-t<=h[0]&&h[1]<=e.z+t,o=vt(e,t,h[0],h[1]),s.set(e.y-o[1],e.y+o[1]),s.subScalar(this._box.min.y).divideScalar(this._cellSize.y).floor().clampScalar(0,this._count.y-1);for(let t=s.x;t<=s.y;++t){c=[this._box.min.y+t*this._cellSize.y,this._box.min.y+(t+1)*this._cellSize.y],d=e.y-o[0]<=c[0]&&c[1]<=e.y+o[0],a=Ct(e,o[1],c[0],c[1]),n.set(e.x-a[1],e.x+a[1]),n.subScalar(this._box.min.x).divideScalar(this._cellSize.x).floor().clampScalar(0,this._count.x-1);for(let{x:s}=n;s<=n.y;++s)l=[this._box.min.x+s*this._cellSize.x,this._box.min.x+(s+1)*this._cellSize.x],u=e.x-a[0]<=l[0]&&l[1]<=e.x+a[0],r(s+this._count.x*(t+this._count.y*m),u&&d&&p)}}}static _vCenter=new r.Vector3;_forEachVoxelWithinRadiusSimple(e,t,r){const n=At._xRange,s=At._yRange,i=At._zRange,o=At._vCenter,a=(t+this._cellOuterR)*(t+this._cellOuterR);let l=-1;t>this._cellOuterR&&(l=(t-this._cellOuterR)*(t-this._cellOuterR)),n.set(e.x-t,e.x+t),n.subScalar(this._box.min.x).divideScalar(this._cellSize.x).floor(),n.x=Math.min(Math.max(n.x,0),this._count.x-1),n.y=Math.min(Math.max(n.y,0),this._count.x-1),s.set(e.y-t,e.y+t),s.subScalar(this._box.min.y).divideScalar(this._cellSize.y).floor(),s.x=Math.min(Math.max(s.x,0),this._count.y-1),s.y=Math.min(Math.max(s.y,0),this._count.y-1),i.set(e.z-t,e.z+t),i.subScalar(this._box.min.z).divideScalar(this._cellSize.z).floor(),i.x=Math.min(Math.max(i.x,0),this._count.z-1),i.y=Math.min(Math.max(i.y,0),this._count.z-1);for(let t=i.x;t<=i.y;++t){const i=[this._box.min.z+t*this._cellSize.z,this._box.min.z+(t+1)*this._cellSize.z];o.z=.5*(i[0]+i[1]);for(let i=s.x;i<=s.y;++i){const s=[this._box.min.y+i*this._cellSize.y,this._box.min.y+(i+1)*this._cellSize.y];o.y=.5*(s[0]+s[1]);for(let{x:s}=n;s<=n.y;++s){const n=[this._box.min.x+s*this._cellSize.x,this._box.min.x+(s+1)*this._cellSize.x];o.x=.5*(n[0]+n[1]);const c=e.distanceToSquared(o);c<=a&&r(s+this._count.x*(i+this._count.y*t),c<=l)}}}}forEachAtomWithinRadius(e,t,r){const n=this,s=t*t;n._forEachVoxelWithinRadius(e,t,((t,i)=>{i?n._forEachAtomInVoxel(t,r):n._forEachAtomInVoxel(t,(t=>{e.distanceToSquared(t.position)<=s&&r(t)}))}))}forEachAtomWithinDistFromMasked(e,t,r,n){this._forEachAtomWithinDistFromGroup((r=>{e.forEachAtom((e=>{0!==(e.mask&t)&&r(e)}))}),r,n)}forEachAtomWithinDistFromSelected(e,t,r,n){this._forEachAtomWithinDistFromGroup((r=>{e.forEachAtom((e=>{t.includesAtom(e)&&r(e)}))}),r,n)}_forEachAtomWithinDistFromGroup(e,t,r){const n=this,s=t*t,i=[],o=[];let a,l=0;e((e=>{n._forEachVoxelWithinRadius(e.position,t,((t,r)=>{r?i[t]=-1:void 0===i[t]?(o.push(e),o.push(-1),i[t]=l,l+=2):-1!==i[t]&&(o.push(e),o.push(i[t]),i[t]=l,l+=2)}))}));const c=function(e){if(void 0!==i[a])if(l=i[a],-1!==l){for(;l>=0;l=o[l+1])if(e.position.distanceToSquared(o[l].position)1e3?this._buildVW():this._build()}isBond(e,t){if(this._hbonds[e]){const[r,n]=this._hbonds[e].acceptor;if(r&&r.residue===t&&r.energy<-.5)return!0;if(n&&n.residue===t&&n.energy<-.5)return!0}return!1}_build(){const e=this;for(let t=0;t0&&this._complex._residues[t-1].getType().flags&ve.Flags.PROTEIN&&r._sequence===this._complex._residues[t-1]._sequence+1&&(n=this._complex._residues[t-1]);for(let s=t+1;s0?t[o._index-1]:null;!a||0!==(a.getType().flags&ve.Flags.PROTEIN)&&o._sequence===a._sequence+1||(a=null),e._calcHBondEnergy(n,r,o),o._index!==r._index+1&&e._calcHBondEnergy(a,o,r)}for(let e=0;e0?t[e-1]:null,!n||0!==(n.getType().flags&ve.Flags.PROTEIN)&&r._sequence===n._sequence+1||(n=null),s.forEachAtomWithinRadius(this._residueGetCAlpha(r),5,o))}_residueGetCAlpha(e){for(let t=0;t{"C"===e.name?t=e.position:"O"===e.name&&(r=e.position)})),[t,r]}_residueGetNH(e,t){const[r,n]=this._residueGetCO(e);let s;if(t.forEachAtom((e=>{"N"===e.name&&(s=e.position)})),r&&n&&s){const e=r.clone();return e.sub(n),e.multiplyScalar(1/e.length()),e.add(s),[s,e]}return[null,null]}_calcHBondEnergy(e,t,r){let n=0;if(null===e)return n;if("PRO"!==t.getType().getName()){const[s,i]=this._residueGetNH(e,t),[o,a]=this._residueGetCO(r);if(null===s||null===i||null===o||null===a)return n;const l=i.distanceTo(a),c=i.distanceTo(o),h=s.distanceTo(o),u=s.distanceTo(a);n=l1&&(n1&&(n70}for(let r=1;r+4=s&&this._isHelixStart(e[r-s]._index,n);t?this._ss[e[r]._index]=It.TURN:this._bend[e[r]._index]&&(this._ss[e[r]._index]=It.BEND)}}_residueGetCAlpha(e){for(let t=0;t0&&(o=s.dot(i)/Math.sqrt(a)),o}_kappa(e,t,r){const n=this._residueGetCAlpha(t),s=this._residueGetCAlpha(e),i=this._residueGetCAlpha(r);if(null===n||null===s||null===i)return 180;const o=this._cosinusAngle(n,s,i,n),a=Math.sqrt(1-o*o);return 180*Math.atan2(a,o)/Math.PI}_isHelixStart(e,t){return this._helixFlags[t][e]===Nt.START||this._helixFlags[t][e]===Nt.START_AND_END}_buildBetaSheets(){const e=[];for(let t=0;te.chainI=6||s>=a&&n<=l)continue;let u=!1;u=e[t].type===Lt.PARALLEL?c-o<6&&a-s<3||c-o<3:i-h<6&&a-s<3||i-h<3,u&&(e[t].i=e[t].i.concat(e[r].i),e[t].type===Lt.PARALLEL?e[t].j=e[t].j.concat(e[r].j):e[t].j=e[r].j.concat(e[t].j),e.splice(r--,1))}const t=new Set;for(let r=0;r0;){let e=t.values().next().value;t.delete(e);const s=new Set;let i;s.add(e);do{i=new Set;for(const e of s.values())for(const r of t.values())this._areBridgesLinked(e,r)&&i.add(r);for(e of i.values())s.add(e),t.delete(e)}while(i.size>0);for(e of s.values())e.ladder=n,e.sheet=r,e.link=s,++n;++r}for(let t=0;t1&&(i=It.STRAND),r.type===Lt.PARALLEL){let e=0;for(let t=0;t{t.updateToFrame(e)}))}addResidueType(e){return this._residueTypes[e]=new ve(e,"Unknown","")}getResidueCount(){return this._residues.length}getResidues(){return this._residues}getSGroupCount(){return this._sgroups.length}getSGroups(){return this._sgroups}getAtomByFullname(e){const t=e.split(".");if(3!==t.length)return null;const r=t[0],n=parseInt(t[1],10);if(Number.isNaN(n))return null;const s=t[2].toUpperCase();let i=null;return this.forEachChain((e=>{i||0===e._name.localeCompare(r)&&e.forEachResidue((e=>{i||e._sequence===n&&e.forEachAtom((e=>{i||0===s.localeCompare(e.name)&&(i=e)}))}))})),i}addChain(e){const t=new Te(this,e);return this._chains.push(t),t}getChain(e){for(let t=0,r=this._chains.length;t{const t=e._residues,n=t.length;if(n<1)return;let s=r(),i=t[0]._index;for(let e=0;e=0&&e{e._finalize()})),this.forEachComponent((e=>{e.update()})),this._computeBounds(),this._finalizeBonds(),this.forEachSGroup((e=>{e._rebuildSGroupOnAtomChange()}))}update(){this._maskNeedsUpdate&&(this.updateStructuresMask(),this._maskNeedsUpdate=!1)}_finalizeBonds(){const e=this.getBonds(),t=e.length;for(let r=0;r=0;r--){const e=t[r];null===e._left||null===e._right?t.splice(r,1):(e._left.bonds.push(e),e._right.bonds.push(e))}const s=this._residues;for(r=0,n=s.length;r{e._finalize()}));const{units:i}=this;for(r=0,n=i.length;re.collectMask();this.forEachResidue(e),this.forEachChain(e),this.forEachMolecule(e)}countAtomsByMask(e){let t=0;return this.forEachAtom((r=>{0!==(r.mask&e)&&t++})),t}getNumAtomsBySelector(e){let t=0;return this.forEachAtom((r=>{e.includesAtom(r)&&t++})),t}resetAtomMask(e){this.forEachAtom((t=>{t.mask=e}))}markAtoms(e,t){const r=t,n=~r;let s=0;const i=st.keyword("And")(e,this.getSelector());return this.forEachAtom((e=>{i.includesAtom(e)?(e.mask|=r,s++):e.mask&=n})),this._maskNeedsUpdate=!0,s}markAtomsAdditionally(e,t){const r=t;let n=0;return this.forEachAtom((s=>{e.includesAtom(s)&&(s.mask&t)!==t&&(s.mask|=r,n++)})),n}clearAtomBits(e){const t=~e;this.forEachAtom((e=>{e.mask&=t}));const r=e=>{e._mask&=t};this.forEachAtom(r),this.forEachResidue(r),this.forEachChain(r),this.forEachMolecule(r)}getAtomNames(){if(this.hasOwnProperty("_atomNames"))return this._atomNames;const e={};return this.forEachAtom((t=>{e[t.name]=1})),this._atomNames=Object.keys(e),this._atomNames}getElements(){if(this.hasOwnProperty("_elements"))return this._elements;const e={};return this.forEachAtom((t=>{e[t.element.name]=1})),this._elements=Object.keys(e),this._elements}getResidueNames(){if(this.hasOwnProperty("_residueNames"))return this._residueNames;const e={};return this.forEachResidue((t=>{e[t._type._name]=1})),this._residueNames=Object.keys(e),this._residueNames}getChainNames(){if(this.hasOwnProperty("_chainNames"))return this._chainNames;const e={};return this.forEachChain((t=>{e[t._name]=1})),this._chainNames=Object.keys(e),this._chainNames}getAltLocNames(){if(this.hasOwnProperty("_altlocNames"))return this._altlocNames;const e={};return this.forEachAtom((t=>{e[String.fromCharCode(t.location)]=1})),this._altlocNames=Object.keys(e),this._altlocNames}getVoxelWorld(){if(!this.hasOwnProperty("_voxelWorld"))try{this._voxelWorld=new Et(this.getDefaultBoundaries().boundingBox,new r.Vector3(5,5,5)),this._voxelWorld.addAtoms(this)}catch{w.warn("Unable to create voxel world"),this._voxelWorld=null}return this._voxelWorld}addElement(e,t,r,n){const{length:s}=e;for(let i=0;i{let t=n[e];return t||(t=n[e]=new De(String(e),0)),t};let i,o,a=0,l=null;for(let n=0,c=this._residues.length;n!0))}}Ft.prototype.id="Complex",Ft.prototype.name="";const Bt=Ft;function Ut(e){let t=2;for(e=e-1>>1;e;)t<<=1,e>>=1;return t}class Gt{constructor(e,t,r,n,s,i){switch(this._box=r.clone(),this._dimVec=Math.max(Math.floor(n||1),1),this._volumeInfo=i,t instanceof Array?[this._dimX,this._dimY,this._dimZ]=t:(this._dimX=t.x,this._dimY=t.y,this._dimZ=t.z),this._dimX=Math.max(Math.floor(this._dimX),1),this._dimY=Math.max(Math.floor(this._dimY),1),this._dimZ=Math.max(Math.floor(this._dimZ),1),this._rowElements=this._dimVec*this._dimX,this._planeElements=this._rowElements*this._dimY,this._totalElements=this._planeElements*this._dimZ,this._data=s||O.allocateTyped(e,this._totalElements),this._dimVec){case 1:break;case 2:this.getValue=function(e,t,r){const n=e*this._dimVec+t*this._rowElements+r*this._planeElements;return[this._data[n],this._data[n+1]]},this.setValue=function(e,t,r,n,s){const i=e*this._dimVec+t*this._rowElements+r*this._planeElements;this._data[i]=n,this._data[i+1]=s},this.addValue=function(e,t,r,n,s){const i=e*this._dimVec+t*this._rowElements+r*this._planeElements;this._data[i]+=n,this._data[i+1]+=s};break;case 3:this.getValue=function(e,t,r){const n=e*this._dimVec+t*this._rowElements+r*this._planeElements;return[this._data[n],this._data[n+1],this._data[n+2]]},this.setValue=function(e,t,r,n,s,i){const o=e*this._dimVec+t*this._rowElements+r*this._planeElements;this._data[o]=n,this._data[o+1]=s,this._data[o+2]=i},this.addValue=function(e,t,r,n,s,i){const o=e*this._dimVec+t*this._rowElements+r*this._planeElements;this._data[o]+=n,this._data[o+1]+=s,this._data[o+2]+=i};break;default:throw new Error("Volume: invalid vector dimension")}}getValue(e,t,r){return this._data[e+t*this._rowElements+r*this._planeElements]}setValue(e,t,r,n){this._data[e+t*this._rowElements+r*this._planeElements]=n}addValue(e,t,r,n){this._data[e+t*this._rowElements+r*this._planeElements]+=n}getDimensions(){return[this._dimX,this._dimY,this._dimZ]}getBox(){return this._box}getVolumeInfo(){return this._volumeInfo}getCellSize(){const e=new r.Vector3;this._box.getSize(e);const t=new r.Vector3;return t.x=this._dimX>1?e.x/(this._dimX-1):0,t.y=this._dimY>1?e.y/(this._dimY-1):0,t.z=this._dimZ>1?e.z/(this._dimZ-1):0,t}computeGradient(){if(1!==this._dimVec)return null;const e=new Gt(Float32Array,[this._dimX,this._dimY,this._dimZ],this._box,3),t=this.getCellSize(),n=new r.Vector3(-.5/t.x,-.5/t.y,-.5/t.z);function s(e,t,r){return Math.min(r,Math.max(t,e))}const i=this._dimX,o=this._dimY,a=this._dimZ,l=this._data;function c(e,t,r){return l[r*i*o+t*i+e]}for(let t=0;t{null!==t._element.parentNode&&t._element.parentNode.removeChild(t._element)}))}getElement(){return this._element}setTransparency(e){const t=this.getElement();if(null===t)return;if(1===e)return void(t.style.display="none");t.style.display="inline";const r=1-e,n=r.toString(),s=100*r;t.style.opacity=n,t.style.filter=`alpha(opacity=${s})`}clone(){const e=new $t(this._element);return e.copy(this),e}}const Wt=$t;class Yt extends r.Group{raycast(e,t){if(!this.visible)return;const{children:r}=this;for(let n=0,s=r.length;n{(e instanceof r.Mesh||e instanceof r.LineSegments||e instanceof r.Line)&&e.geometry.dispose()})),function(e){const{children:t}=e;for(let e=0,r=t.length;e=1?this.fov=e:this.fov=r.MathUtils.radToDeg(2*Math.atan(Math.tan(.5*r.MathUtils.degToRad(e))/this.aspect))},r.StereoCamera.prototype.updateHalfSized=function(e,t){const r=e.aspect,n=e.fov;e.aspect=r/2,e.setMinimalFov(t),e.updateProjectionMatrix(),this.update(e),e.aspect=r,e.fov=n,e.updateProjectionMatrix()},r.PerspectiveCamera.prototype.setDistanceToFit=function(e,t){this.position.z=e/Math.sin(.5*r.MathUtils.degToRad(t))},r.Raycaster.prototype.intersectVisibleObject=function(e,t,n,s){const i=this.intersectObject(e,!1);if(0===i.length)return null;const o=Math.min(t.near,n);let a,l=i[0];const c=new r.Vector3;for(a=0;a{(e.hasOwnProperty("geometry")||e instanceof Wt)&&(t=!0)})),t},buildDistorionMesh:function(e,t,n){function s(e){let t=0,r=e,s=1;for(;Math.abs(r-t)>1e-5;)s=1+n*r,t=r,r=e/(s*s);return 1/s}const i=new r.PlaneGeometry(2,2,e,t),o=i.getAttribute("position");for(let e=0;e>Zt[t]&1))return!0;return!1},processObjRenderOrder:function(e,t){const r=+("BA"!==t);e.traverse((e=>{e.isGroup&&(e.renderOrder=r)}))},applySelectionMaterial:function(e){e.traverse((e=>{"material"in e&&(e.material=e.material.clone(!0),e.material.setValues({depthFunc:r.LessEqualDepth,overrideColor:!0,fog:!1,lights:!1,shadowmap:!1}),e.material.setUberOptions({fixedColor:new r.Color(16776960),zOffset:-1e-6}))}))},getMiddlePoint:function(e,t,n){const s=n||new r.Vector3;return s.set(0,0,0),s.addScaledVector(e,.5),s.addScaledVector(t,.5),s},LAYERS:Kt},rr={boundingBox:new r.Box3(new r.Vector3(-1,-1,-1),new r.Vector3(1,1,1)),boundingSphere:new r.Sphere(new r.Vector3(0,0,0),1)};class nr extends tr.RCGroup{constructor(e,t){super(e,t),this.name=e,this._dataSource=t}release(){this.parent&&this.parent.remove(this)}getDataSource(){return this._dataSource}getBoundaries(){return rr}}const sr=nr;function ir(e){return null==e||Array.isArray(e)?e:[e]}class or{constructor(e=[],t=["id"]){this._list=[],this._dict={},this._indices=[...t],this._indices.forEach((e=>{this._dict[e]={}})),e.forEach((e=>this.register(e)))}static registerInList(e,t){e.includes(t)||e.push(t)}static unregisterFromList(e,t){const r=e.indexOf(t);-1!==r&&e.splice(r,1)}static registerInDict(e,t,r){t.forEach((t=>{t=t.toLowerCase();const n=e[t]=e[t]||[];n.includes(r)||n.push(r)}))}static unregisterFromDict(e,t,r){t.forEach((t=>{t=t.toLowerCase();const n=e[t];if(n){const s=n.indexOf(r);-1!==s&&n.splice(s,1),0===n.length&&delete e[t]}}))}register(e){or.registerInList(this._list,e),this._indices.forEach((t=>{or.registerInDict(this._dict[t],ir(e[t]),e)}))}unregister(e){or.unregisterFromList(this._list,e),this._indices.forEach((t=>{or.unregisterFromDict(this._dict[t],ir(e[t]),e)}))}get all(){return[...this._list]}get first(){return this._list[0]}keys(e){return Object.keys(this._dict[e||this._indices[0]])}get(e,t){const r=this._dict[t||this._indices[0]];if(r){const t=r[e&&e.toLowerCase()];return t&&t.length>0?t[0]:void 0}}}const ar=or;const lr=function(e){Object.defineProperties(e,{logger:{get(){return this.context&&this.context.logger?this.context.logger:w}},settings:{get(){return this.context&&this.context.settings?this.context.settings:z}}})};class cr{constructor(e,t){this._position=e,this._radius=t}static _sphere=new r.Sphere;raycast(e){const t=cr._sphere;t.set(this._position,this._radius);const n=new r.Vector3;return e.ray.intersectSphere(t,n)?{distance:e.ray.origin.distanceTo(n),point:n}:null}}const hr=e=>class extends e{constructor(e,...t){super(...t),this._objects=new Array(e),this.boundingSphere=null,this.boundingBox=null}setSphere(e,t,r){this._objects[e]=new cr(t,r)}raycast(e,t){for(let r=0,n=this._objects.length;r65535,c=o*n,h=this._index=O.allocateTyped(l?Uint32Array:Uint16Array,c);this._positions=O.allocateTyped(Float32Array,3*a),this._normals=O.allocateTyped(Float32Array,3*a),this._colors=O.allocateTyped(Float32Array,3*a);const u=this._alpha=O.allocateTyped(Float32Array,a);t().fill(u,1);for(let e=0;e0,c=!1===o&&t>0,h=(i+1)*s+l*(s+1)+c*(s+1),u=(2*i+l+c)*s,d=n/2,p=new r.BufferAttribute(O.allocateTyped(Float32Array,3*h),3),m=new r.BufferAttribute(O.allocateTyped(Float32Array,3*h),3),f=new r.Uint16BufferAttribute(O.allocateTyped(Uint16Array,3*u),1),_=new r.BufferAttribute(O.allocateTyped(Float32Array,2*h),2);let g=0,y=0;const x=-(t-e)/n;for(let o=0;o<=i;o++){if(o!==i)for(let e=0;e0)for(let t=0;t2)for(let t=0;t65535;this._index=O.allocateTyped(s?Uint32Array:Uint16Array,6*e),this._positions=O.allocateTyped(Float32Array,4*n),this._colors=O.allocateTyped(Float32Array,3*n),this._directions=O.allocateTyped(Float32Array,3*n);const i=this._alpha=O.allocateTyped(Float32Array,n);t().fill(i,1);const o=this._index;let a=0,l=0;for(let t=0;t117440512)throw new Error("Too large cube dimension: lead to memory huge uasge");return this.pointsValuesLinear=O.allocateTyped(Float32Array,32*t),this.hasIntersection=O.allocateTyped(Int32Array,t),this.bitsInside=O.allocateTyped(Int32Array,t),0}destroy(){this.bitsInside=null,this.hasIntersection=null,this.pointsValuesLinear=null}}pn.prototype.striIndicesMarchCube=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,8,3,9,8,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,1,2,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,2,10,0,2,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,8,3,2,10,8,10,9,8,-1,-1,-1,-1,-1,-1,-1,3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,11,2,8,11,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,0,2,3,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,11,2,1,9,11,9,8,11,-1,-1,-1,-1,-1,-1,-1,3,10,1,11,10,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,10,1,0,8,10,8,11,10,-1,-1,-1,-1,-1,-1,-1,3,9,0,3,11,9,11,10,9,-1,-1,-1,-1,-1,-1,-1,9,8,10,10,8,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,3,0,7,3,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,8,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,1,9,4,7,1,7,3,1,-1,-1,-1,-1,-1,-1,-1,1,2,10,8,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,4,7,3,0,4,1,2,10,-1,-1,-1,-1,-1,-1,-1,9,2,10,9,0,2,8,4,7,-1,-1,-1,-1,-1,-1,-1,2,10,9,2,9,7,2,7,3,7,9,4,-1,-1,-1,-1,8,4,7,3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,4,7,11,2,4,2,0,4,-1,-1,-1,-1,-1,-1,-1,9,0,1,8,4,7,2,3,11,-1,-1,-1,-1,-1,-1,-1,4,7,11,9,4,11,9,11,2,9,2,1,-1,-1,-1,-1,3,10,1,3,11,10,7,8,4,-1,-1,-1,-1,-1,-1,-1,1,11,10,1,4,11,1,0,4,7,11,4,-1,-1,-1,-1,4,7,8,9,0,11,9,11,10,11,0,3,-1,-1,-1,-1,4,7,11,4,11,9,9,11,10,-1,-1,-1,-1,-1,-1,-1,9,5,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,5,4,0,8,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,5,4,1,5,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,5,4,8,3,5,3,1,5,-1,-1,-1,-1,-1,-1,-1,1,2,10,9,5,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,8,1,2,10,4,9,5,-1,-1,-1,-1,-1,-1,-1,5,2,10,5,4,2,4,0,2,-1,-1,-1,-1,-1,-1,-1,2,10,5,3,2,5,3,5,4,3,4,8,-1,-1,-1,-1,9,5,4,2,3,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,11,2,0,8,11,4,9,5,-1,-1,-1,-1,-1,-1,-1,0,5,4,0,1,5,2,3,11,-1,-1,-1,-1,-1,-1,-1,2,1,5,2,5,8,2,8,11,4,8,5,-1,-1,-1,-1,10,3,11,10,1,3,9,5,4,-1,-1,-1,-1,-1,-1,-1,4,9,5,0,8,1,8,10,1,8,11,10,-1,-1,-1,-1,5,4,0,5,0,11,5,11,10,11,0,3,-1,-1,-1,-1,5,4,8,5,8,10,10,8,11,-1,-1,-1,-1,-1,-1,-1,9,7,8,5,7,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,3,0,9,5,3,5,7,3,-1,-1,-1,-1,-1,-1,-1,0,7,8,0,1,7,1,5,7,-1,-1,-1,-1,-1,-1,-1,1,5,3,3,5,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,7,8,9,5,7,10,1,2,-1,-1,-1,-1,-1,-1,-1,10,1,2,9,5,0,5,3,0,5,7,3,-1,-1,-1,-1,8,0,2,8,2,5,8,5,7,10,5,2,-1,-1,-1,-1,2,10,5,2,5,3,3,5,7,-1,-1,-1,-1,-1,-1,-1,7,9,5,7,8,9,3,11,2,-1,-1,-1,-1,-1,-1,-1,9,5,7,9,7,2,9,2,0,2,7,11,-1,-1,-1,-1,2,3,11,0,1,8,1,7,8,1,5,7,-1,-1,-1,-1,11,2,1,11,1,7,7,1,5,-1,-1,-1,-1,-1,-1,-1,9,5,8,8,5,7,10,1,3,10,3,11,-1,-1,-1,-1,5,7,0,5,0,9,7,11,0,1,0,10,11,10,0,-1,11,10,0,11,0,3,10,5,0,8,0,7,5,7,0,-1,11,10,5,7,11,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,6,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,5,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,0,1,5,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,8,3,1,9,8,5,10,6,-1,-1,-1,-1,-1,-1,-1,1,6,5,2,6,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,6,5,1,2,6,3,0,8,-1,-1,-1,-1,-1,-1,-1,9,6,5,9,0,6,0,2,6,-1,-1,-1,-1,-1,-1,-1,5,9,8,5,8,2,5,2,6,3,2,8,-1,-1,-1,-1,2,3,11,10,6,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,0,8,11,2,0,10,6,5,-1,-1,-1,-1,-1,-1,-1,0,1,9,2,3,11,5,10,6,-1,-1,-1,-1,-1,-1,-1,5,10,6,1,9,2,9,11,2,9,8,11,-1,-1,-1,-1,6,3,11,6,5,3,5,1,3,-1,-1,-1,-1,-1,-1,-1,0,8,11,0,11,5,0,5,1,5,11,6,-1,-1,-1,-1,3,11,6,0,3,6,0,6,5,0,5,9,-1,-1,-1,-1,6,5,9,6,9,11,11,9,8,-1,-1,-1,-1,-1,-1,-1,5,10,6,4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,3,0,4,7,3,6,5,10,-1,-1,-1,-1,-1,-1,-1,1,9,0,5,10,6,8,4,7,-1,-1,-1,-1,-1,-1,-1,10,6,5,1,9,7,1,7,3,7,9,4,-1,-1,-1,-1,6,1,2,6,5,1,4,7,8,-1,-1,-1,-1,-1,-1,-1,1,2,5,5,2,6,3,0,4,3,4,7,-1,-1,-1,-1,8,4,7,9,0,5,0,6,5,0,2,6,-1,-1,-1,-1,7,3,9,7,9,4,3,2,9,5,9,6,2,6,9,-1,3,11,2,7,8,4,10,6,5,-1,-1,-1,-1,-1,-1,-1,5,10,6,4,7,2,4,2,0,2,7,11,-1,-1,-1,-1,0,1,9,4,7,8,2,3,11,5,10,6,-1,-1,-1,-1,9,2,1,9,11,2,9,4,11,7,11,4,5,10,6,-1,8,4,7,3,11,5,3,5,1,5,11,6,-1,-1,-1,-1,5,1,11,5,11,6,1,0,11,7,11,4,0,4,11,-1,0,5,9,0,6,5,0,3,6,11,6,3,8,4,7,-1,6,5,9,6,9,11,4,7,9,7,11,9,-1,-1,-1,-1,10,4,9,6,4,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,10,6,4,9,10,0,8,3,-1,-1,-1,-1,-1,-1,-1,10,0,1,10,6,0,6,4,0,-1,-1,-1,-1,-1,-1,-1,8,3,1,8,1,6,8,6,4,6,1,10,-1,-1,-1,-1,1,4,9,1,2,4,2,6,4,-1,-1,-1,-1,-1,-1,-1,3,0,8,1,2,9,2,4,9,2,6,4,-1,-1,-1,-1,0,2,4,4,2,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,2,8,2,4,4,2,6,-1,-1,-1,-1,-1,-1,-1,10,4,9,10,6,4,11,2,3,-1,-1,-1,-1,-1,-1,-1,0,8,2,2,8,11,4,9,10,4,10,6,-1,-1,-1,-1,3,11,2,0,1,6,0,6,4,6,1,10,-1,-1,-1,-1,6,4,1,6,1,10,4,8,1,2,1,11,8,11,1,-1,9,6,4,9,3,6,9,1,3,11,6,3,-1,-1,-1,-1,8,11,1,8,1,0,11,6,1,9,1,4,6,4,1,-1,3,11,6,3,6,0,0,6,4,-1,-1,-1,-1,-1,-1,-1,6,4,8,11,6,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,10,6,7,8,10,8,9,10,-1,-1,-1,-1,-1,-1,-1,0,7,3,0,10,7,0,9,10,6,7,10,-1,-1,-1,-1,10,6,7,1,10,7,1,7,8,1,8,0,-1,-1,-1,-1,10,6,7,10,7,1,1,7,3,-1,-1,-1,-1,-1,-1,-1,1,2,6,1,6,8,1,8,9,8,6,7,-1,-1,-1,-1,2,6,9,2,9,1,6,7,9,0,9,3,7,3,9,-1,7,8,0,7,0,6,6,0,2,-1,-1,-1,-1,-1,-1,-1,7,3,2,6,7,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,11,10,6,8,10,8,9,8,6,7,-1,-1,-1,-1,2,0,7,2,7,11,0,9,7,6,7,10,9,10,7,-1,1,8,0,1,7,8,1,10,7,6,7,10,2,3,11,-1,11,2,1,11,1,7,10,6,1,6,7,1,-1,-1,-1,-1,8,9,6,8,6,7,9,1,6,11,6,3,1,3,6,-1,0,9,1,11,6,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,8,0,7,0,6,3,11,0,11,6,0,-1,-1,-1,-1,7,11,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,8,11,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,11,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,1,9,8,3,1,11,7,6,-1,-1,-1,-1,-1,-1,-1,10,1,2,6,11,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,10,3,0,8,6,11,7,-1,-1,-1,-1,-1,-1,-1,2,9,0,2,10,9,6,11,7,-1,-1,-1,-1,-1,-1,-1,6,11,7,2,10,3,10,8,3,10,9,8,-1,-1,-1,-1,7,2,3,6,2,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,0,8,7,6,0,6,2,0,-1,-1,-1,-1,-1,-1,-1,2,7,6,2,3,7,0,1,9,-1,-1,-1,-1,-1,-1,-1,1,6,2,1,8,6,1,9,8,8,7,6,-1,-1,-1,-1,10,7,6,10,1,7,1,3,7,-1,-1,-1,-1,-1,-1,-1,10,7,6,1,7,10,1,8,7,1,0,8,-1,-1,-1,-1,0,3,7,0,7,10,0,10,9,6,10,7,-1,-1,-1,-1,7,6,10,7,10,8,8,10,9,-1,-1,-1,-1,-1,-1,-1,6,8,4,11,8,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,6,11,3,0,6,0,4,6,-1,-1,-1,-1,-1,-1,-1,8,6,11,8,4,6,9,0,1,-1,-1,-1,-1,-1,-1,-1,9,4,6,9,6,3,9,3,1,11,3,6,-1,-1,-1,-1,6,8,4,6,11,8,2,10,1,-1,-1,-1,-1,-1,-1,-1,1,2,10,3,0,11,0,6,11,0,4,6,-1,-1,-1,-1,4,11,8,4,6,11,0,2,9,2,10,9,-1,-1,-1,-1,10,9,3,10,3,2,9,4,3,11,3,6,4,6,3,-1,8,2,3,8,4,2,4,6,2,-1,-1,-1,-1,-1,-1,-1,0,4,2,4,6,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,0,2,3,4,2,4,6,4,3,8,-1,-1,-1,-1,1,9,4,1,4,2,2,4,6,-1,-1,-1,-1,-1,-1,-1,8,1,3,8,6,1,8,4,6,6,10,1,-1,-1,-1,-1,10,1,0,10,0,6,6,0,4,-1,-1,-1,-1,-1,-1,-1,4,6,3,4,3,8,6,10,3,0,3,9,10,9,3,-1,10,9,4,6,10,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,9,5,7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,4,9,5,11,7,6,-1,-1,-1,-1,-1,-1,-1,5,0,1,5,4,0,7,6,11,-1,-1,-1,-1,-1,-1,-1,11,7,6,8,3,4,3,5,4,3,1,5,-1,-1,-1,-1,9,5,4,10,1,2,7,6,11,-1,-1,-1,-1,-1,-1,-1,6,11,7,1,2,10,0,8,3,4,9,5,-1,-1,-1,-1,7,6,11,5,4,10,4,2,10,4,0,2,-1,-1,-1,-1,3,4,8,3,5,4,3,2,5,10,5,2,11,7,6,-1,7,2,3,7,6,2,5,4,9,-1,-1,-1,-1,-1,-1,-1,9,5,4,0,8,6,0,6,2,6,8,7,-1,-1,-1,-1,3,6,2,3,7,6,1,5,0,5,4,0,-1,-1,-1,-1,6,2,8,6,8,7,2,1,8,4,8,5,1,5,8,-1,9,5,4,10,1,6,1,7,6,1,3,7,-1,-1,-1,-1,1,6,10,1,7,6,1,0,7,8,7,0,9,5,4,-1,4,0,10,4,10,5,0,3,10,6,10,7,3,7,10,-1,7,6,10,7,10,8,5,4,10,4,8,10,-1,-1,-1,-1,6,9,5,6,11,9,11,8,9,-1,-1,-1,-1,-1,-1,-1,3,6,11,0,6,3,0,5,6,0,9,5,-1,-1,-1,-1,0,11,8,0,5,11,0,1,5,5,6,11,-1,-1,-1,-1,6,11,3,6,3,5,5,3,1,-1,-1,-1,-1,-1,-1,-1,1,2,10,9,5,11,9,11,8,11,5,6,-1,-1,-1,-1,0,11,3,0,6,11,0,9,6,5,6,9,1,2,10,-1,11,8,5,11,5,6,8,0,5,10,5,2,0,2,5,-1,6,11,3,6,3,5,2,10,3,10,5,3,-1,-1,-1,-1,5,8,9,5,2,8,5,6,2,3,8,2,-1,-1,-1,-1,9,5,6,9,6,0,0,6,2,-1,-1,-1,-1,-1,-1,-1,1,5,8,1,8,0,5,6,8,3,8,2,6,2,8,-1,1,5,6,2,1,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,3,6,1,6,10,3,8,6,5,6,9,8,9,6,-1,10,1,0,10,0,6,9,5,0,5,6,0,-1,-1,-1,-1,0,3,8,5,6,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,5,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,5,10,7,5,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,5,10,11,7,5,8,3,0,-1,-1,-1,-1,-1,-1,-1,5,11,7,5,10,11,1,9,0,-1,-1,-1,-1,-1,-1,-1,10,7,5,10,11,7,9,8,1,8,3,1,-1,-1,-1,-1,11,1,2,11,7,1,7,5,1,-1,-1,-1,-1,-1,-1,-1,0,8,3,1,2,7,1,7,5,7,2,11,-1,-1,-1,-1,9,7,5,9,2,7,9,0,2,2,11,7,-1,-1,-1,-1,7,5,2,7,2,11,5,9,2,3,2,8,9,8,2,-1,2,5,10,2,3,5,3,7,5,-1,-1,-1,-1,-1,-1,-1,8,2,0,8,5,2,8,7,5,10,2,5,-1,-1,-1,-1,9,0,1,5,10,3,5,3,7,3,10,2,-1,-1,-1,-1,9,8,2,9,2,1,8,7,2,10,2,5,7,5,2,-1,1,3,5,3,7,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,7,0,7,1,1,7,5,-1,-1,-1,-1,-1,-1,-1,9,0,3,9,3,5,5,3,7,-1,-1,-1,-1,-1,-1,-1,9,8,7,5,9,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,8,4,5,10,8,10,11,8,-1,-1,-1,-1,-1,-1,-1,5,0,4,5,11,0,5,10,11,11,3,0,-1,-1,-1,-1,0,1,9,8,4,10,8,10,11,10,4,5,-1,-1,-1,-1,10,11,4,10,4,5,11,3,4,9,4,1,3,1,4,-1,2,5,1,2,8,5,2,11,8,4,5,8,-1,-1,-1,-1,0,4,11,0,11,3,4,5,11,2,11,1,5,1,11,-1,0,2,5,0,5,9,2,11,5,4,5,8,11,8,5,-1,9,4,5,2,11,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,5,10,3,5,2,3,4,5,3,8,4,-1,-1,-1,-1,5,10,2,5,2,4,4,2,0,-1,-1,-1,-1,-1,-1,-1,3,10,2,3,5,10,3,8,5,4,5,8,0,1,9,-1,5,10,2,5,2,4,1,9,2,9,4,2,-1,-1,-1,-1,8,4,5,8,5,3,3,5,1,-1,-1,-1,-1,-1,-1,-1,0,4,5,1,0,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,4,5,8,5,3,9,0,5,0,3,5,-1,-1,-1,-1,9,4,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,11,7,4,9,11,9,10,11,-1,-1,-1,-1,-1,-1,-1,0,8,3,4,9,7,9,11,7,9,10,11,-1,-1,-1,-1,1,10,11,1,11,4,1,4,0,7,4,11,-1,-1,-1,-1,3,1,4,3,4,8,1,10,4,7,4,11,10,11,4,-1,4,11,7,9,11,4,9,2,11,9,1,2,-1,-1,-1,-1,9,7,4,9,11,7,9,1,11,2,11,1,0,8,3,-1,11,7,4,11,4,2,2,4,0,-1,-1,-1,-1,-1,-1,-1,11,7,4,11,4,2,8,3,4,3,2,4,-1,-1,-1,-1,2,9,10,2,7,9,2,3,7,7,4,9,-1,-1,-1,-1,9,10,7,9,7,4,10,2,7,8,7,0,2,0,7,-1,3,7,10,3,10,2,7,4,10,1,10,0,4,0,10,-1,1,10,2,8,7,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,9,1,4,1,7,7,1,3,-1,-1,-1,-1,-1,-1,-1,4,9,1,4,1,7,0,8,1,8,7,1,-1,-1,-1,-1,4,0,3,7,4,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,8,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,10,8,10,11,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,9,3,9,11,11,9,10,-1,-1,-1,-1,-1,-1,-1,0,1,10,0,10,8,8,10,11,-1,-1,-1,-1,-1,-1,-1,3,1,10,11,3,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,11,1,11,9,9,11,8,-1,-1,-1,-1,-1,-1,-1,3,0,9,3,9,11,1,2,9,2,11,9,-1,-1,-1,-1,0,2,11,8,0,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,2,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,8,2,8,10,10,8,9,-1,-1,-1,-1,-1,-1,-1,9,10,2,0,9,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,8,2,8,10,0,1,8,1,10,8,-1,-1,-1,-1,1,10,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,3,8,9,1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,9,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1];const mn=pn,fn=[0,265,515,778,1030,1295,1541,1804,2060,2309,2575,2822,3082,3331,3593,3840,400,153,915,666,1430,1183,1941,1692,2460,2197,2975,2710,3482,3219,3993,3728,560,825,51,314,1590,1855,1077,1340,2620,2869,2111,2358,3642,3891,3129,3376,928,681,419,170,1958,1711,1445,1196,2988,2725,2479,2214,4010,3747,3497,3232,1120,1385,1635,1898,102,367,613,876,3180,3429,3695,3942,2154,2403,2665,2912,1520,1273,2035,1786,502,255,1013,764,3580,3317,4095,3830,2554,2291,3065,2800,1616,1881,1107,1370,598,863,85,348,3676,3925,3167,3414,2650,2899,2137,2384,1984,1737,1475,1226,966,719,453,204,4044,3781,3535,3270,3018,2755,2505,2240,2240,2505,2755,3018,3270,3535,3781,4044,204,453,719,966,1226,1475,1737,1984,2384,2137,2899,2650,3414,3167,3925,3676,348,85,863,598,1370,1107,1881,1616,2800,3065,2291,2554,3830,4095,3317,3580,764,1013,255,502,1786,2035,1273,1520,2912,2665,2403,2154,3942,3695,3429,3180,876,613,367,102,1898,1635,1385,1120,3232,3497,3747,4010,2214,2479,2725,2988,1196,1445,1711,1958,170,419,681,928,3376,3129,3891,3642,2358,2111,2869,2620,1340,1077,1855,1590,314,51,825,560,3728,3993,3219,3482,2710,2975,2197,2460,1692,1941,1183,1430,666,915,153,400,3840,3593,3331,3082,2822,2575,2309,2060,1804,1541,1295,1030,778,515,265,0];function _n(e,t,r){const n=e.getValue(t.x,t.y,t.z);r.set(n[0],n[1],n[2])}class gn{constructor(){this._arrSize=8,this.p=new Array(this._arrSize),this.g=new Array(this._arrSize),this.val=new Array(this._arrSize);for(let e=0;eMath.abs(e)>Number.EPSILON;return!(c(t.y)||c(t.z)||c(n.x)||c(n.z)||c(s.x)||c(s.y))}_vertexInterp(e,t,r,n,s,i){const o=t.p[r],a=t.p[n],l=t.g[r],c=t.g[n],h=t.val[r],u=e-h,d=t.val[n]-h;let p=0;Math.abs(d)>0&&(p=u/d),p=p>1?1:p,s.lerpVectors(o,a,p),i.lerpVectors(l,c,p)}static _triTable=mn.prototype.striIndicesMarchCube;static _arrSize=12;static _firstIndices=[0,1,2,3,4,5,6,7,0,1,2,3];static _secondIndices=[1,2,3,0,5,6,7,4,4,5,6,7];static _vertexList=xn(bn._arrSize);static _normalList=xn(bn._arrSize);_polygonize(e,t,r){const{cubeIndex:n}=e;let s=0;const i=bn._arrSize,o=bn._firstIndices,a=bn._secondIndices,l=bn._vertexList,c=bn._normalList;for(;sa?a:r+t;let c=-1;for(let e=r;ee&&(t=r,e=A[r]);if(t<0||!n.includesAtom(C[t])){M[s]=-1;continue}}M[s]=P++;const D=g=0&&r>=0&&n>=0&&(this._indices[3*t]=e,this._indices[3*t+1]=r,this._indices[3*t+2]=n,++t)}this._position=new Float32Array(this._position.buffer.slice(0,3*P*4)),this._normals=new Float32Array(this._normals.buffer.slice(0,3*P*4)),this._colors=new Float32Array(this._colors.buffer.slice(0,3*P*4)),this._indices=new Uint32Array(this._indices.buffer.slice(0,3*t*4))}}toMesh(){const e=new r.BufferGeometry;return e.setIndex(new r.BufferAttribute(this._indices,1)),e.setAttribute("position",new r.BufferAttribute(this._position,3)),e.setAttribute("normal",new r.BufferAttribute(this._normals,3)),e.setAttribute("color",new r.BufferAttribute(this._colors,3)),e.computeBoundingSphere(),e}}const wn=bn;const Sn=class extends dn{_build(){const e=this._opts;this.numVoxels=[128,128,128],this.xAxis=new r.Vector3(1,0,0),this.yAxis=new r.Vector3(0,1,0),this.zAxis=new r.Vector3(0,0,1),this.origin=new r.Vector3(0,0,0),this._visibilitySelector=e.visibilitySelector,this._calcSurface(e)}_findMinMax(e){const t=e.length/4,r=[e[0],e[1],e[2],e[3]],n=[e[0],e[1],e[2],e[3]];for(let s=1;s4&&(t.gridSpacing*=s[3]);let o=t.radScale*i[3]*1.7,a=o;a=.65*Math.sqrt(4/3*Math.PI*a*a*a),o=Math.max(o,a);let l=0;for(;l<3;++l)s[l]-=o,i[l]+=o;for(l=0;l<3;++l)r[l]=Math.ceil((i[l]-s[l])/t.gridSpacing);return this.xAxis.x=(r[0]-1)*t.gridSpacing,this.yAxis.y=(r[1]-1)*t.gridSpacing,this.zAxis.z=(r[2]-1)*t.gridSpacing,[this.origin.x,this.origin.y,this.origin.z]=s,{bbox:n,dim:r}}_makeSurface(e,t){const n=new wn;n.compute(e.volMap,this.origin,t.isoValue,1),n.vertexFusion(9,9),n._numTriangles>0?(n.setColorVolTex(e.volTexMap,e.atomMap,e.atomWeightMap,this._visibilitySelector),this.setIndex(new r.BufferAttribute(n._indices,1)),this.setAttribute("position",new r.BufferAttribute(n._position,3)),this.setAttribute("normal",new r.BufferAttribute(n._normals,3)),this.setAttribute("color",new r.BufferAttribute(n._colors,3))):this.setAttribute("position",new r.BufferAttribute(O.allocateTyped(Float32Array,0),3))}_calcSurface(e){const t={posRad:this._posRad,colors:this._colors,atoms:this._opts.atoms};if(0===t.posRad.length)return;const n=this._findNumVoxels(t.posRad,e),s=new r.Box3(this.origin,new r.Vector3(this.xAxis.x,this.yAxis.y,this.zAxis.z).add(this.origin)),i=this._computeSurface(t,s,n,e);this._makeSurface(i,e)}},{Volume:vn}=Ht;const Cn=class extends Sn{_computeSurface(e,t,r,n){this._shiftByOrigin(e.posRad);const s={volMap:new vn(Float32Array,this.numVoxels,t),volTexMap:new vn(Float32Array,this.numVoxels,t,3)};return null!=this._visibilitySelector&&(s.atomMap=[],s.atomWeightMap=new vn(Float32Array,this.numVoxels,t)),this.gaussdensity(s,e,null,n),s}gaussdensity(e,t,r,n){const s=t.posRad.length/4,{posRad:i,colors:o}=t,{numVoxels:a}=this,{radScale:l,gaussLim:c,gridSpacing:h}=n,u=1/n.isoValue,d=1/h,p=a[0]-1,m=a[1]-1,f=a[2]-1,{volMap:_,volTexMap:g}=e,y=_.getData(),x=_.getStrideX(),b=g.getData(),w=g.getStrideX();let S;null!=this._visibilitySelector&&(S=e.atomWeightMap.getData());const{atomMap:v}=e;for(let e=0;e=E)continue;let d=_.getDirectIdx(R,l,r),p=g.getDirectIdx(R,l,r),m=R*h-i[n];for(let r=R;r<=M;++r,m+=h,d+=x,p+=w){const r=-(m*m+c)*C;let n=Math.exp(r)*a;null!=this._visibilitySelector&&n>S[d]&&(S[d]=n,v[d]=t.atoms[e]),y[d]+=n,n*=u;const s=3*e;b[p]+=n*o[s],b[p+1]+=n*o[s+1],b[p+2]+=n*o[s+2]}}}}}_shiftByOrigin(e){const t=this.origin.x,r=this.origin.y,n=this.origin.z,s=e.length/4;for(let i=0;iR&&(R=r)}this.neighbourListLength=27*R+1,this.withinRadii=function(t,r,n,s,l){let c=0;const h=u(t,i),f=u(r,o),g=u(n,a),b=Math.max(0,h-1),w=Math.max(0,f-1),S=Math.max(0,g-1),T=Math.min(d-1,h+1),R=Math.min(p-1,f+1),M=Math.min(m-1,g+1);for(y=b;y<=T;++y){const i=y*_;for(E=w;E<=R;++E){const o=E*m;for(let a=S;a<=M;++a){x=i+o+a;const h=v[x],u=h+C[x];for(let i=h;ip&&(p=t),d[e]=t*t}z(),function(){let e=0;const t=2*Math.PI/_;A=O.allocateTyped(Float32Array,_),C=O.allocateTyped(Float32Array,_);for(let r=0;r<_;r++)A[r]=Math.cos(e),C[r]=Math.sin(e),e+=t}(),E=new An(i,h,u,2.01*p),T=new Int32Array(E.neighbourListLength),R=-1}function B(e,t,r,n){const s=4*e,o=d[e],a=i[s]-t,l=i[s+1]-r,c=i[s+2]-n;return a*a+l*l+c*c=0;){if(i!==n&&i!==s&&B(i,e,t,r))return R=i,i;i=T[++o]}return R=-1,-1}function G(e,t){const r=4*e,n=4*t,s=i[r],o=i[r+1],a=i[r+2],l=i[r+3];let c=N.x=i[n]-s,u=N.y=i[n+1]-o,d=N.z=i[n+2]-a;const p=i[n+3];let m=c*c+u*u+d*d;const x=Math.sqrt(m),b=l*((l*l+x*x-p*p)/(2*l*x));var E,T;N.normalize(),T=N,(E=I).x=E.y=E.z=1,0!==T.x?E.x=(T.y+T.z)/-T.x:0!==T.y?E.y=(T.x+T.z)/-T.y:0!==T.z&&(E.z=(T.x+T.y)/-T.z),I.normalize(),V.crossVectors(N,I),V.normalize();const M=Math.sqrt(l*l-b*b);I.multiplyScalar(M),V.multiplyScalar(M),N.multiplyScalar(b),N.x+=s,N.y+=o,N.z+=a,R=-1;const P=D;for(let r=0;r<_;r++){const n=A[r],s=C[r],i=N.x+n*I.x+s*V.x,o=N.y+n*I.y+s*V.y,a=N.z+n*I.z+s*V.z;if(-1===U(i,o,a,e,t)){const e=Math.floor(f*(i-h[0])),t=Math.floor(f*(o-h[1])),r=Math.floor(f*(a-h[2])),n=Math.max(0,e-P),s=Math.max(0,t-P),l=Math.max(0,r-P),p=Math.min(g[0],e+P+2),_=Math.min(g[1],t+P+2),x=Math.min(g[2],r+P+2);for(let e=l;e0&&mM[o]&&(M[o]=t,P[o]=a[e]),y[o]<0&&(y[o]=-y[o]);const u=Math.sqrt(m),d=l/u;let f=p*d,_=h*d,g=i*d;if(f+=r,_+=n,g+=s,-1===U(f,_,g,e,-1)){const e=l-u;e=0;)e0){t=1/t;const r=3*e;x[r]*=t,x[r+1]*=t,x[r+2]*=t}}}()}this.build=function(){j(),this.volTexMap=x,this.weightsMap=M,this.atomMap=P,this.volMap=y}},{Volume:Tn}=Ht;const Rn=class extends Sn{_computeSurface(e,t,r,n){const s=new En(e,r,n);s.build();return{volMap:new Tn(Float32Array,this.numVoxels,t,1,s.volMap),volTexMap:new Tn(Float32Array,this.numVoxels,t,3,s.volTexMap),atomMap:s.atomMap,atomWeightMap:new Tn(Float32Array,this.numVoxels,t,1,s.weightsMap)}}};const Mn=class{constructor(e,t){this.coord=new r.Vector3,this.coord.copy(e),this.radius=t,this.colorX=.99999,this.colorY=0,this.colorZ=0,this.atomType=0,this.srcAtom=null}};const Pn=class{constructor(e,t,n,s,i){this._numAtoms=e,this._atoms=t,this._vBoxMin=new r.Vector3,this._vBoxMax=new r.Vector3,this._vBoxMin.copy(n),this._vBoxMax.copy(s),this._probeRadius=i,this._atomsList=null,this._voxelList=null}createVoxels(){let e,t;const r=0|this._numAtoms,n=this._atoms,s=this._vBoxMax.x-this._vBoxMin.x,i=this._vBoxMax.y-this._vBoxMin.y,o=this._vBoxMax.z-this._vBoxMin.z;let a=sc?t:c,h+=t;let u=Math.floor(a/c);u<2&&(u=2),h/=r,this._numCells=u,this._aveRad=h,this._maxRad=c;const d=u,p=u*u,m=u*u*u,f=this._xScale=1/(this._vBoxMax.x-this._vBoxMin.x),_=this._yScale=1/(this._vBoxMax.y-this._vBoxMin.y),g=this._zScale=1/(this._vBoxMax.z-this._vBoxMin.z);let y=0;const x=f*u,b=_*u,w=g*u;for(l=0;l=0?r:0,s=s>=0?s:0,i=i>=0?i:0,o=o=0;e=this._atomsList[2*e+1]){t(o[this._atomsList[2*e]])}}getClosestAtom(e){let t=null,r=Number.MAX_VALUE;return this.forEachRelatedAtom(e,(n=>{const s=e.distanceToSquared(n.coord);sf)return;const g=e.radius+n._probeRadius;d=s-g*g,d<0&&(d=-d),p=Math.exp(_*d),c+=t*p,h+=r*p,u+=m*p,i++};let y=0;for(let n=0;ny?i:y,s=c*c+h*h+u*u,i>0&&(d=1/Math.sqrt(s),c*=d,h*=d,u*=d),r[n].x=c,r[n].y=h,r[n].z=u;return 0}buildColors(e,t,r,n){const s=this;let i=0,o=0,a=0,l=0,c=0;const h=n*n;let u=[],d=[],p=0;const m=function(e){const t=i-e.coord.x,r=o-e.coord.y,n=a-e.coord.z,m=t*t+r*r+n*n;if(m>h)return;const f=e.radius+s._probeRadius;l=m-f*f,l<0&&(l=-l),c=1/(.8+l),u.push([e.colorX,e.colorY,e.colorZ]),d.push(c),p+=c};for(let n=0;ni?a:i,o.x-ar.x&&(r.x=o.x+a),o.y+a>r.y&&(r.y=o.y+a),o.z+a>r.z&&(r.z=o.z+a)}t.x-=i,t.y-=i,t.z-=i,r.x+=i,r.y+=i,r.z+=i}getCornerCoord(e,t,r,n,s,i,o){const a=1/(i-1),l=r*a,c=n*a,h=s*a;o.x=e.x*(1-l)+t.x*l,o.y=e.y*(1-c)+t.y*c,o.z=e.z*(1-h)+t.z*h}buildEdgePoint(e,t,r,n,s,i){if(r[e]^r[t]){const r=24,o=(0-n.pointsValuesLinear[s+r+e])/(n.pointsValuesLinear[s+r+t]-n.pointsValuesLinear[s+r+e]),a=n.pointsValuesLinear[s+3*e+0],l=n.pointsValuesLinear[s+3*e+1],c=n.pointsValuesLinear[s+3*e+2],h=n.pointsValuesLinear[s+3*t+0],u=n.pointsValuesLinear[s+3*t+1],d=n.pointsValuesLinear[s+3*t+2];i.x=a*(1-o)+h*o,i.y=l*(1-o)+u*o,i.z=c*(1-o)+d*o}}isTriangleVisible(e,t,r){const n=this.voxelWorld.getClosestAtom(e),s=this.voxelWorld.getClosestAtom(t),i=this.voxelWorld.getClosestAtom(r);return null!==n&&null!==s&&null!==i&&null!==n.srcAtom&&null!==s.srcAtom&&null!==i.srcAtom&&(this.visibilitySelector.includesAtom(n.srcAtom)&&this.visibilitySelector.includesAtom(s.srcAtom)&&this.visibilitySelector.includesAtom(i.srcAtom))}addTriangle(e,t,r){if(this.visibilitySelector&&!this.isTriangleVisible(e,t,r))return!0;const n=this.geoOut;if(n._numTriangles>=this.maxNumTriangles)return!1;const s=this.addVertexToGeo(n,e),i=this.addVertexToGeo(n,t),o=this.addVertexToGeo(n,r);if((s|i|o)<0)return!1;const a=3*n._numTriangles;return n._indices[a+0]=s,n._indices[a+1]=i,n._indices[a+2]=o,n._numTriangles++,!0}buildGeoFromCorners(e,t,n,s,i,o){const a=e-1,l=e,c=e*e,h=new Array(12);for(let e=0;e<12;e++)h[e]=new r.Vector3;const u=[];for(let e=0;e<8;e++)u[e]=1;const d=new r.Vector3;let p=0,m=0;for(let r=0;rt.length/2||2*Object.keys(In.ByAtomicNumber).length!==t.length)throw new Error("atomT.length should be equal Element.ByAtomicNumber.length * 2");return t[2*e]}calculateGridCorners(e,t,n,s,i,o){const a=t*t,l=a*t,c=new r.Vector3,h=new r.Vector3;for(let t=0;t=0;n=this.hashEntries[2*n+1]){const r=this.hashEntries[2*n+0];o.copy(e._vertices[r]),o.x-=t.x,o.y-=t.y,o.z-=t.z;if(o.x*o.x+o.y*o.y+o.z*o.z<1e-6)return r}if(e._numVertices>=this.maxNumVertices)return-1;const u=e._numVertices;if(e._vertices[u].copy(t),null!==this.vBoxMin&&null!==this.vBoxMax){if(n=this.getNewHashEntry(),n<0)return-1;const e=this.hashLines[h+1];this.hashLines[h+1]=n,this.hashEntries[2*n+0]=u,this.hashEntries[2*n+1]=e,this.hashLines[h+0]++}return e._numVertices++,u}modifyExcludedFromGeo(e,t,r,n,s,i){let o,a,l;const c=e*e,h=(e-1)/(n.x-r.x),u=(e-1)/(n.y-r.y),d=(e-1)/(n.z-r.z),p=2*t*(2*t),m=1/(e-1);for(let f=0;f=0?y:0,x=x>=0?x:0,b=b>=0?b:0,w=w<=e-1?w:e-1,S=S<=e-1?S:e-1,v=v<=e-1?v:e-1;for(let s=x;s<=S;s++){const h=s*c;for(let c=b;c<=v;c++){const u=c*e;for(let e=y;e<=w;e++){o=h+u+e;let d=e*m;const f=r.x*(1-d)+n.x*d;d=s*m;const g=r.y*(1-d)+n.y*d;d=c*m;const y=r.z*(1-d)+n.z*d,x=f-_.x,b=g-_.y,w=y-_.z,S=x*x+b*b+w*w;S0?(i[o]<0&&(i[o]=l),l>i[o]&&(i[o]=l)):l>i[o]&&(i[o]=l))}}}}return 0}_innerBuild(){let e;const t=1.2,n={posRad:this._posRad,colors:this._colors,atoms:this._opts.atoms};this.complex=this._opts.parent,this.atoms=n.atoms,this.meshResolution=this._opts.gridSpacing,this.atomRadiusScale=this._opts.radScale,this.colorMode=this._opts.colorMode,this.probeRadius=this._opts.probeRadius,this.useVertexColors=!0,this.excludeProbe=this._opts.excludeProbe,this.visibilitySelector=this._opts.visibilitySelector,this.geoOut=null,this.hashLines=null,this.hashEntries=null,this.numHashEtriesAllocated=0,this.numHashEntryIndex=0,this.maxNumVertices=0,this.maxNumTriangles=0;const s=new Array(this.atoms.length);this.convertToAtomsColored(n,s);const i=this.vBoxMin=new r.Vector3,o=this.vBoxMax=new r.Vector3;this.getBoundingBox(s,i,o);const a=this.marCubeResoultion=4*this.meshResolution,l=a,c=l*l*l,h=O.allocateTyped(Float32Array,c),u=this.probeRadius*this.atomRadiusScale;this.calculateGridCorners(h,l,i,o,s,u);const d=a-1,p=new mn;if(e=p.create(d),e<0)return e;const m=new r.Vector3;m.x=(o.x-i.x)/d,m.y=(o.y-i.y)/d,m.z=(o.z-i.z)/d;let f=this.getNumIntersectedCells(l,d,h,p),_=Math.floor(f*t),g=Math.floor(f*t*2);if(this.geoOut=new Ln(_,g,this.useVertexColors),e=this.createVertexHash(_,g),e<0)return e;let y=u;if(this.excludeProbe&&(y=.01),this.voxelWorld=new Pn(s.length,s,i,o,y),this.voxelWorld.createVoxels(),e=this.buildGeoFromCorners(a,i,o,h,m,p),this.excludeProbe){if(this.modifyExcludedFromGeo(l,u,i,o,this.geoOut,h),this.geoOut._vertices=null,this.geoOut._colors=null,this.geoOut._indices=null,this.geoOut._normals=null,this.geoOut._numVertices=0,this.geoOut._numTriangles=0,this.geoOut=null,f=this.getNumIntersectedCells(l,d,h,p),_=Math.floor(f*t),g=Math.floor(f*t*2),this.geoOut=new Ln(_,g,this.useVertexColors),e=this.createVertexHash(_,g),e<0)return e;e=this.buildGeoFromCorners(l,i,o,h,m,p)}this.voxelWorld.buildNormals(this.geoOut._vertices.length,this.geoOut._vertices,this.geoOut._normals);let x=6.5;return this.excludeProbe&&(x-=1.5),this.useVertexColors&&this.voxelWorld.buildColors(this.geoOut._vertices.length,this.geoOut._vertices,this.geoOut._colors,x),this.voxelWorld.destroyVoxels(),this.voxelWorld=null,p.destroy(),e}};const Vn={InstancedSpheresGeometry:mr,SimpleSpheresGeometry:xr,Simple2CCylindersGeometry:vr,Instanced2CCylindersGeometry:Ir,ExtrudedObjectsGeometry:Br,ChunkedLinesGeometry:Jr,TwoColorLinesGeometry:rn,CrossGeometry:cn,QuickSurfGeometry:Cn,ContactSurfaceGeometry:Rn,SSIsosurfaceGeometry:On,LabelsGeometry:class extends g{constructor(e,t){super(),this._opts=t,this.items=[],this.needsUpdate=!1;let n=-50,s=-50;switch(t.horizontalAlign){case"left":n=0;break;case"right":n=-100}switch(t.verticalAlign){case"top":s=-100;break;case"bottom":s=0}const i=new r.Vector3(t.dx||0,t.dy||0,t.dz||0);this.userData={translation:`translate(${n}%, ${s}%)`,offset:i}}setItem(e,t,n){const s=this._opts,i=this.items[e]||function(e,t){const n=document.createElement("div");if(n.className=t,"string"==typeof e){const t=document.createElement("span");t.style.fontSize="150%";const r=e.split("\n");for(let e=0,n=r.length;e 0\r\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\r\n\t\tout vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\r\n\t\tout vec3 vDirectionalShadowNormal[ NUM_DIR_LIGHTS ];\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n in vec3 color;\r\n out vec3 vColor;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n in vec3 color2;\r\n out vec3 vColor2;\r\n in vec2 uv;\r\n #ifndef CYLINDER_SPRITE\r\n out vec2 vUv;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_POS\r\n in vec4 offset;\r\n #ifdef SPHERE_SPRITE\r\n out vec4 instOffset;\r\n out vec4 spritePosEye;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n in vec4 matVector1;\r\n in vec4 matVector2;\r\n in vec4 matVector3;\r\n in vec4 invmatVector1;\r\n in vec4 invmatVector2;\r\n in vec4 invmatVector3;\r\n\r\n #ifdef CYLINDER_SPRITE\r\n out vec4 matVec1;\r\n out vec4 matVec2;\r\n out vec4 matVec3;\r\n out vec4 invmatVec1;\r\n out vec4 invmatVec2;\r\n out vec4 invmatVec3;\r\n out vec4 spritePosEye;\r\n #endif\r\n#endif\r\n\r\nuniform mat4 modelViewMatrix; // optional\r\nuniform mat4 projectionMatrix; // optional\r\nuniform mat3 normalMatrix; // optional\r\nuniform mat4 modelMatrix; // optional\r\n\r\n#ifdef DASHED_LINE\r\n in float lineDistance;\r\n out float vLineDistance;\r\n#endif\r\n\r\n#ifdef THICK_LINE\r\n in vec3 direction;\r\n uniform mat4 projMatrixInv;\r\n uniform vec2 viewport;\r\n uniform float lineWidth;\r\n\r\n vec4 transform(vec4 coord){\r\n return projectionMatrix * modelViewMatrix * coord;\r\n }\r\n\r\n vec2 project(vec4 device){\r\n vec3 device_normal = device.xyz/device.w;\r\n vec2 clip_pos = (device_normal*0.5+0.5).xy;\r\n return clip_pos * viewport;\r\n }\r\n\r\n vec4 unproject(vec2 screen, float z, float w){\r\n vec2 clip_pos = screen/viewport;\r\n vec2 device_normal = clip_pos*2.0-1.0;\r\n return vec4(device_normal*w, z, w);\r\n }\r\n#endif\r\n\r\n\r\n/////////////////////////////////////////// Main ///////////////////////////////////////////////\r\nvoid main() {\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n alphaCol = alphaColor;\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n vec3 objectNormal = vec3(\r\n dot(normal, matVector1.xyz),\r\n dot(normal, matVector2.xyz),\r\n dot(normal, matVector3.xyz));\r\n#else\r\n vec3 objectNormal = vec3( normal );\r\n#endif\r\n\r\nvec3 transformedNormal = normalMatrix * objectNormal;\r\n\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n vNormal = normalize(transformedNormal);\r\n#endif\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n viewNormal = normalize(mat3(modelViewMatrix)*objectNormal);\r\n#endif\r\n\r\n vec4 localPos = vec4(position.xyz, 1.0);\r\n vec4 worldPos = modelMatrix * localPos;\r\n vec4 mvPosition = modelViewMatrix * localPos;\r\n\r\n// make thick line offset\r\n#ifdef THICK_LINE\r\n // get screen pos\r\n vec4 dPos = transform(vec4(position.xyz, 1.0));\r\n vec2 sPos = project(dPos);\r\n // move pos forward\r\n vec3 position2 = position.xyz + direction.xyz * 0.5;\r\n // get screen offset pos\r\n vec4 dPos2 = transform(vec4(position2.xyz, 1.0));\r\n vec2 sPos2 = project(dPos2);\r\n // screen line direction\r\n vec2 sDir = normalize(sPos2 - sPos);\r\n // vertex offset (orthogonal to line direction)\r\n vec2 offset1 = vec2(-sDir.y, sDir.x);\r\n // move screen vertex\r\n vec2 newPos = sPos + offset1 * position.w * lineWidth;\r\n // get moved pos in view space\r\n vec4 dNewPos = unproject(newPos, dPos.z, dPos.w);\r\n mvPosition.xyz = (projMatrixInv * dNewPos).xyz;\r\n#endif // THICK_LINE\r\n\r\n#ifdef INSTANCED_POS\r\n #ifdef SPHERE_SPRITE\r\n instOffset = offset;\r\n\r\n vec4 posEye = modelViewMatrix * vec4( offset.xyz, 1.0 );\r\n float scale = length(modelViewMatrix[0]);\r\n mvPosition = posEye + vec4( position.xyz * offset.w * scale * INSTANCED_SPRITE_OVERSCALE, 0.0 );\r\n posEye.w = offset.w * scale;\r\n\r\n spritePosEye = posEye;\r\n #else\r\n localPos = vec4( offset.xyz + position.xyz * offset.w, 1.0 );\r\n worldPos = modelMatrix * localPos;\r\n mvPosition = modelViewMatrix * localPos;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n #ifdef CYLINDER_SPRITE\r\n matVec1 = matVector1;\r\n matVec2 = matVector2;\r\n matVec3 = matVector3;\r\n invmatVec1 = invmatVector1;\r\n invmatVec2 = invmatVector2;\r\n invmatVec3 = invmatVector3;\r\n\r\n // calculate eye coords of cylinder endpoints\r\n vec4 v = vec4(0, -0.5, 0, 1);\r\n vec4 p1 = modelViewMatrix * vec4(dot(v, matVector1), dot(v, matVector2), dot(v, matVector3), 1.0);\r\n v.y = 0.5;\r\n vec4 p2 = modelViewMatrix * vec4(dot(v, matVector1), dot(v, matVector2), dot(v, matVector3), 1.0);\r\n\r\n // sprite is placed at the center of cylinder\r\n vec4 posEye;\r\n posEye.xyz = mix(p1.xyz, p2.xyz, 0.5);\r\n posEye.w = 1.0;\r\n spritePosEye = posEye;\r\n\r\n // cylinder radius in eye space\r\n float rad = length(modelViewMatrix[0]) * length(vec3(matVector1.x, matVector2.x, matVector3.x));\r\n vec2 spriteSize;\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // In ortho projection we skip z coordinate\r\n // basic sprite size at screen plane (covers only cylinder axis)\r\n vec2 spriteSizeScreen = abs(p2.xy - p1.xy);\r\n\r\n spriteSize = vec2(1.0, 1.0) * INSTANCED_SPRITE_OVERSCALE * (spriteSizeScreen + 2.0 * rad);\r\n #else\r\n // basic sprite size at screen plane (covers only cylinder axis)\r\n vec2 spriteSizeScreen = abs(p2.xy / p2.z - p1.xy / p1.z);\r\n\r\n // full sprite size in eye coords\r\n float minZ = min(abs(p1.z), abs(p2.z));\r\n spriteSize = vec2(1.0, 1.0) * INSTANCED_SPRITE_OVERSCALE * abs(posEye.z) * (spriteSizeScreen + 2.0 * rad / minZ);\r\n #endif\r\n\r\n mvPosition = posEye + vec4( position.xy * 0.5 * spriteSize, 0, 0 );\r\n #else\r\n localPos = vec4(dot(localPos, matVector1), dot(localPos, matVector2), dot(localPos, matVector3), 1.0);\r\n worldPos = modelMatrix * localPos;\r\n mvPosition = modelViewMatrix * localPos;\r\n #endif\r\n#endif\r\n\r\n gl_Position = projectionMatrix * mvPosition;\r\n\r\n vWorldPosition = worldPos.xyz;\r\n vViewPosition = - mvPosition.xyz;\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t vec4 worldPosition;\r\n\t // see THREE.WebGLProgram.unrollLoops\r\n\t #pragma unroll_loop_start\r\n\t for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * vec4(vWorldPosition, 1.0);\r\n vDirectionalShadowNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(objectNormal, 0.0))).xyz;\r\n\t }\r\n\t #pragma unroll_loop_end\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n vColor = color.xyz;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n vColor2 = color2;\r\n #ifndef CYLINDER_SPRITE\r\n vUv = uv;\r\n #endif\r\n#endif\r\n\r\n#ifdef DASHED_LINE\r\n vLineDistance = lineDistance;\r\n#endif\r\n}\r\n",fragmentShader:this.precisionString()+"/*\r\n * GLSL Version: ES 3.00 (WebGL 2.0 compatible)\r\n * No #version directive in this file (injected by Three.js).\r\n * Use GLSL3 semantics (`in`/`out`, `layout(location=...)`, `texture`).\r\n * Set `glslVersion: THREE.GLSL3` in ShaderMaterial/RawShaderMaterial.\r\n */\r\n\r\n#if defined (NORMALS_TO_G_BUFFER)\r\n layout(location = 0) out vec4 fragColor;\r\n layout(location = 1) out vec4 fragNormal;\r\n#else\r\n out vec4 fragColor;\r\n#endif\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n in float alphaCol;\r\n#endif\r\n\r\n#ifdef COLOR_FROM_POS\r\n uniform mat4 world2colorMatrix;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\r\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ]; //only for sprites\r\n\t\tin vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\r\n\t\tin vec3 vDirectionalShadowNormal[ NUM_DIR_LIGHTS ];\r\n vec4 vDirLightWorldCoord[ NUM_DIR_LIGHTS ];\r\n vec3 vDirLightWorldNormal[ NUM_DIR_LIGHTS ];\r\n\r\n #ifdef SHADOWMAP_PCF_RAND\r\n // We use 4 instead uniform variable or define because this value is used in for(... i < value; ...) with\r\n // unroll_loop and unroll_loop has pattern:\r\n // /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g\r\n uniform vec2 samplesKernel[4]; // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n uniform sampler2D noiseTex;\r\n uniform vec2 noiseTexelSize;\r\n uniform vec2 srcTexelSize;\r\n uniform mat4 projectionMatrix;\r\n #endif\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n in vec3 vColor;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n in vec3 vColor2;\r\n #ifndef CYLINDER_SPRITE\r\n in vec2 vUv;\r\n #endif\r\n#endif\r\n\r\nuniform vec3 diffuse;\r\nuniform vec3 emissive;\r\nuniform vec3 specular;\r\nuniform float shininess;\r\nuniform vec3 fixedColor;\r\nuniform float opacity;\r\nuniform float zClipValue;\r\nuniform float clipPlaneValue;\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n in vec3 viewNormal;\r\n#endif\r\n\r\n#define RECIPROCAL_PI 0.31830988618\r\n#define saturate(a) clamp( a, 0.0, 1.0 )\r\n\r\n#ifdef USE_FOG\r\n uniform vec3 fogColor;\r\n uniform float fogAlpha;\r\n uniform float fogNear;\r\n uniform float fogFar;\r\n#endif\r\n\r\nin vec3 vWorldPosition; // world position of the pixel (invalid when INSTANCED_SPRITE is defined)\r\nin vec3 vViewPosition;\r\n\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n in vec3 vNormal;\r\n#endif\r\n\r\n/////////////////////////////////////////// ZSprites ////////////////////////////////////////////////\r\n#if defined (SPHERE_SPRITE) || defined (CYLINDER_SPRITE)\r\n uniform float nearPlaneValue;\r\n#endif\r\n\r\n#ifdef SPHERE_SPRITE\r\n in vec4 spritePosEye;\r\n#endif\r\n\r\n#if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n uniform float zOffset;\r\n\r\n #if !defined(USE_LIGHTS) || !defined(SHADOWMAP) || !defined(SHADOWMAP_PCF_RAND) || !(NUM_DIR_LIGHTS > 0)\r\n uniform mat4 projectionMatrix;\r\n #endif\r\n\r\n float calcDepthForSprites(vec4 pixelPosEye, float zOffset, mat4 projMatrix) {\r\n vec4 pixelPosScreen = projMatrix * pixelPosEye;\r\n return 0.5 * (pixelPosScreen.z / pixelPosScreen.w + 1.0) + zOffset;\r\n }\r\n#endif\r\n\r\n#ifdef SPHERE_SPRITE\r\n in vec4 instOffset;\r\n uniform mat4 modelMatrix;\r\n uniform mat4 modelViewMatrix;\r\n uniform mat4 invModelViewMatrix;\r\n uniform mat3 normalMatrix;\r\n\r\n\r\n bool intersect_ray_sphere(in vec3 origin, in vec3 ray, out vec3 point, out float frontFaced) {\r\n\r\n // intersect XZ-projected ray with circle\r\n float a = dot(ray, ray);\r\n float b = dot(ray, origin);\r\n float c = dot(origin, origin) - 1.0;\r\n float det = b * b - a * c;\r\n if (det < 0.0) return false;\r\n float t1 = (-b - sqrt(det)) / a;\r\n float t2 = (-b + sqrt(det)) / a;\r\n\r\n // calculate both intersection points\r\n vec3 p1 = origin + ray * t1;\r\n vec3 p2 = origin + ray * t2;\r\n\r\n // choose nearest point inside frustum\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // orthografic camera is used for dirLight sources. So in it for all spheres the point with smaller 't' is visible\r\n // t1 is always smaller than t2 (from calculations)\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n #else\r\n // for perspective camera first intersection can be in front of near plane. If not intersection is p1 else - p2\r\n // t* = 0.0 corresponds to point of intersection near plane by the ray from camera to curPixel\r\n if (t1 >= 0.0) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (t2 >= 0.0) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #endif\r\n\r\n return false;\r\n }\r\n\r\n bool get_sphere_point(in vec3 pixelPosEye, out vec3 point, out float frontFaced) {\r\n vec3 origin, ray;\r\n\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // transform vector from sprite center to curPixel into sphere local coords\r\n origin = pixelPosEye.xyz - spritePosEye.xyz;\r\n origin = (invModelViewMatrix * vec4(origin, 0.0)).xyz / instOffset.w;\r\n\r\n // transform camera orientation vector into sphere local coords\r\n ray = (invModelViewMatrix * vec4(0.0, 0.0, -1.0, 0.0)).xyz;\r\n #else\r\n // find point of intersection near plane by the ray from camera to curPixel\r\n vec4 v = vec4(-(nearPlaneValue / pixelPosEye.z) * pixelPosEye, 1.0);\r\n\r\n // transform intersection point into sphere local coords\r\n v = invModelViewMatrix * v;\r\n origin = (v.xyz - instOffset.xyz) / instOffset.w;\r\n\r\n // transform vector from camera pos to curPixel into sphere local coords\r\n ray = (invModelViewMatrix * vec4(pixelPosEye, 0.0)).xyz;\r\n #endif\r\n ray = normalize(ray);\r\n\r\n return intersect_ray_sphere(origin, ray, point, frontFaced);\r\n }\r\n#endif\r\n\r\n#ifdef CYLINDER_SPRITE\r\n in vec4 matVec1;\r\n in vec4 matVec2;\r\n in vec4 matVec3;\r\n in vec4 invmatVec1;\r\n in vec4 invmatVec2;\r\n in vec4 invmatVec3;\r\n\r\n uniform mat4 modelMatrix;\r\n uniform mat4 modelViewMatrix;\r\n uniform mat4 invModelViewMatrix;\r\n uniform mat3 normalMatrix;\r\n\r\n in vec4 spritePosEye;\r\n\r\n bool intersect_ray_cylinder(in vec3 origin, in vec3 ray, out vec3 point, out float frontFaced) {\r\n\r\n // intersect XZ-projected ray with circle\r\n float a = dot(ray.xz, ray.xz);\r\n float b = dot(ray.xz, origin.xz);\r\n float c = dot(origin.xz, origin.xz) - 1.0;\r\n float det = b * b - a * c;\r\n if (det < 0.0) return false;\r\n float t1 = (-b - sqrt(det)) / a;\r\n float t2 = (-b + sqrt(det)) / a;\r\n\r\n // calculate both intersection points\r\n vec3 p1 = origin + ray * t1;\r\n vec3 p2 = origin + ray * t2;\r\n\r\n float halfHeight = 0.5;\r\n\r\n // choose nearest point\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // orthografic camera is used for dirLight sources. So in it for all cylinders the point with smaller 't' is visible\r\n // if it is not outside of cylinnder (t1 is always smaller than t2).\r\n if (p1.y >= -halfHeight && p1.y <= halfHeight) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (p2.y >= -halfHeight && p2.y <= halfHeight) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #else\r\n // for perspective camera first intersection can be in front of near plane. If not intersection is p1 else - p2\r\n // t* = 0.0 corresponds to point of intersection near plane by the ray from camera to curPixel\r\n if (t1 >= 0.0 && p1.y >= -halfHeight && p1.y <= halfHeight) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (t2 >= 0.0 && p2.y >= -halfHeight && p2.y <= halfHeight) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #endif\r\n\r\n return false;\r\n }\r\n\r\n bool get_cylinder_point(in vec3 pixelPosEye, out vec3 point, out float frontFaced) {\r\n vec3 origin, ray;\r\n vec4 v;\r\n\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // transform vector from sprite center to curPixel into cylinder local coords\r\n v = invModelViewMatrix * vec4(pixelPosEye.xyz - spritePosEye.xyz, 0.0);\r\n origin = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n\r\n // transform camera orientation vector into cylinder local coords\r\n v = invModelViewMatrix * vec4(0.0, 0.0, -1.0, 0.0);\r\n ray = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n #else\r\n // find point of intersection near plane by the ray from camera to curPixel\r\n v = vec4(-(nearPlaneValue / pixelPosEye.z) * pixelPosEye, 1.0);\r\n\r\n // transform intersection point into cylinder local coords\r\n v = invModelViewMatrix * v;\r\n origin = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n\r\n // transform vector from camera pos to curPixel into cylinder local coords\r\n v = invModelViewMatrix * vec4(pixelPosEye, 0.0);\r\n ray = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n #endif\r\n ray = normalize(ray);\r\n\r\n return intersect_ray_cylinder(origin, ray, point, frontFaced);\r\n }\r\n#endif\r\n\r\n///////////////////////////////////// Pack and unpack ///////////////////////////////////////////////\r\nconst float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1)\r\nconst float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1)\r\n\r\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\r\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\r\n\r\n\r\nconst float ShiftRight8 = 1. / 256.;\r\n\r\nvec4 packDepthToRGBA( const in float v ) {\r\n vec4 r = vec4( fract( v * PackFactors ), v );\r\n r.yzw -= r.xyz * ShiftRight8; // tidy overflow\r\n return r * PackUpscale;\r\n}\r\n\r\nfloat unpackRGBAToDepth( const in vec4 v ) {\r\n return dot( v, UnpackFactors );\r\n}\r\n\r\n////////////////////////////////////////// All Lighting /////////////////////////////////////////////////\r\n#ifdef TOON_SHADING\r\n #define LOW_TOON_BORDER 0.0\r\n #define MEDIUM_TOON_BORDER 0.7\r\n #define HIGH_TOON_BORDER 1.0\r\n\r\n #define MEDIUM_TOON_RANGE 0.5\r\n #define HIGH_TOON_RANGE 0.95\r\n#endif\r\n#if defined(USE_LIGHTS) && NUM_DIR_LIGHTS > 0\r\n struct ReflectedLight {\r\n vec3 directDiffuse;\r\n vec3 directSpecular;\r\n vec3 indirectDiffuse;\r\n };\r\n\r\n struct BlinnPhongMaterial {\r\n vec3 diffuseColor;\r\n vec3 specularColor;\r\n float specularShininess;\r\n };\r\n\r\n struct GeometricContext {\r\n vec3 normal;\r\n vec3 viewDir;\r\n };\r\n\r\n struct DirectionalLight {\r\n vec3 direction;\r\n vec3 color;\r\n };\r\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\r\n\r\n struct DirectionalLightShadow {\r\n vec2 shadowMapSize;\r\n float shadowBias;\r\n float shadowRadius;\r\n };\r\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHTS ];\r\n\r\n uniform vec3 ambientLightColor;\r\n\r\n /////////////////////////////////////////// Shadowmap ////////////////////////////////////////////////\r\n\r\n #if defined(SHADOWMAP)\r\n \tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\r\n \t\treturn step( compare, unpackRGBAToDepth( texture( depths, uv ) ) );\r\n \t}\r\n\r\n float getShadow( sampler2D shadowMap, DirectionalLightShadow dirLight, vec4 shadowCoord, vec3 vViewPosition, vec3 vNormal ) {\r\n \t float shadow = 0.0;\r\n\r\n // When shadows for sprites will appear use here for them normals as it done for G-buffer\r\n shadowCoord.xyz += dirLight.shadowBias * vNormal;\r\n shadowCoord.xyz /= shadowCoord.w;\r\n\r\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\r\n bool inFrustum = all( inFrustumVec );\r\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\r\n bool frustumTest = all( frustumTestVec );\r\n\r\n if ( frustumTest ) {\r\n #ifdef SHADOWMAP_BASIC\r\n \t shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\r\n \t#endif\r\n\r\n \t#ifdef SHADOWMAP_PCF_SHARP\r\n \t vec2 texelSize = vec2( 1.0 ) / dirLight.shadowMapSize;\r\n\r\n float dx0 = - texelSize.x * dirLight.shadowRadius;\r\n float dy0 = - texelSize.y * dirLight.shadowRadius;\r\n float dx1 = + texelSize.x * dirLight.shadowRadius;\r\n float dy1 = + texelSize.y * dirLight.shadowRadius;\r\n\r\n shadow = (\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\r\n ) * ( 1.0 / 9.0 );\r\n #endif\r\n\r\n #ifdef SHADOWMAP_PCF_RAND\r\n vec2 texelSize = vec2( 1.0 ) / dirLight.shadowMapSize;\r\n\r\n vec4 vUv = ((projectionMatrix * vec4(vViewPosition, 1.0)) + 1.0) / 2.0;\r\n vec2 vUvNoise = vUv.xy / srcTexelSize * noiseTexelSize;\r\n\r\n vec2 noiseVec = normalize(texture(noiseTex, vUvNoise).rg);\r\n mat2 mNoise = mat2(noiseVec.x, noiseVec.y, -noiseVec.y, noiseVec.x);\r\n\r\n vec2 offset;\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < 4; i ++ ) { // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n offset = mNoise * ( normalize( samplesKernel[ i ]) * texelSize * dirLight.shadowRadius );\r\n shadow += texture2DCompare( shadowMap, shadowCoord.xy + offset, shadowCoord.z );\r\n }\r\n #pragma unroll_loop_end\r\n shadow /= float( 4 ); // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n #endif\r\n }\r\n return shadow;//(shadow != 1.0) ? 0.5 : 1.0;//vec4(shadow, shadow, shadow, 1.0);\r\n }\r\n #endif\r\n\r\n /////////////////////////////////////////// Lighting /////////////////////////////////////////////////\r\n\r\n vec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\r\n return RECIPROCAL_PI * diffuseColor;\r\n } // validated\r\n\r\n vec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\r\n // Original approximation by Christophe Schlick '94\r\n //;float fresnel = pow( 1.0 - dotLH, 5.0 );\r\n // Optimized variant (presented by Epic at SIGGRAPH '13)\r\n float fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\r\n return ( 1.0 - specularColor ) * fresnel + specularColor;\r\n } // validated\r\n\r\n float G_BlinnPhong_Implicit( /* const in float dotNL, const in float dotNV */ ) {\r\n // geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v)\r\n return 0.25;\r\n }\r\n\r\n float D_BlinnPhong( const in float shininess, const in float dotNH ) {\r\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\r\n }\r\n\r\n vec3 BRDF_Specular_BlinnPhong( const in DirectionalLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\r\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\r\n float dotNH = saturate(dot( geometry.normal, halfDir ));\r\n float dotLH = saturate(dot( incidentLight.direction, halfDir ));\r\n\r\n vec3 F = F_Schlick( specularColor, dotLH );\r\n float G = G_BlinnPhong_Implicit( /* dotNL, dotNV */ );\r\n float D = D_BlinnPhong( shininess, dotNH );\r\n\r\n return F * ( G * D );\r\n } // validated\r\n\r\n void RE_Direct_BlinnPhong( const in DirectionalLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight, float penumbra ) {\r\n\r\n float dotNL = saturate( dot( geometry.normal, directLight.direction ));\r\n #ifdef TOON_SHADING\r\n if(dotNL < MEDIUM_TOON_RANGE){\r\n dotNL = LOW_TOON_BORDER;\r\n }\r\n else if(dotNL < HIGH_TOON_RANGE){\r\n dotNL = MEDIUM_TOON_BORDER;\r\n }\r\n else{\r\n dotNL = HIGH_TOON_BORDER;\r\n }\r\n #endif\r\n\r\n vec3 irradiance = dotNL * directLight.color;\r\n reflectedLight.directDiffuse += penumbra * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\r\n reflectedLight.directSpecular += penumbra * irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess );\r\n }\r\n\r\n void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\r\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\r\n }\r\n\r\n vec3 calcLighting(const in GeometricContext geometry, const in BlinnPhongMaterial material, vec3 vViewPosition) {\r\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ));\r\n vec3 irradiance = ambientLightColor;\r\n\r\n float shadowMask = 1.0;\r\n // see THREE.WebGLProgram.unrollLoops\r\n \t#pragma unroll_loop_start\r\n \t for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n \t #ifdef SHADOWMAP\r\n \t shadowMask = getShadow( directionalShadowMap[ i ], directionalLightShadows[ i ], vDirLightWorldCoord[ i ], vViewPosition, vDirLightWorldNormal[ i ] );\r\n #endif\r\n\r\n \t\t if ( shadowMask > 0.0 ) RE_Direct_BlinnPhong( directionalLights[ i ], geometry, material, reflectedLight, shadowMask );\r\n \t\t}\r\n \t\t#pragma unroll_loop_end\r\n\r\n RE_IndirectDiffuse_BlinnPhong(irradiance, material, reflectedLight);\r\n\r\n return saturate(reflectedLight.indirectDiffuse + reflectedLight.directDiffuse + reflectedLight.directSpecular);\r\n }\r\n#endif\r\n\r\n/////////////////////////////////////////// Dashed Line ///////////////////////////////////////////////\r\n#ifdef DASHED_LINE\r\n uniform float dashedLineSize;\r\n uniform float dashedLinePeriod;\r\n in float vLineDistance;\r\n#endif\r\n\r\n/////////////////////////////////////////// Main ///////////////////////////////////////////////\r\nvoid main() {\r\n\r\n#ifdef CLIP_PLANE\r\n if (vViewPosition.z < clipPlaneValue) discard;\r\n#endif\r\n\r\n#ifdef ZCLIP\r\n if (vViewPosition.z < zClipValue) discard;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = vDirectionalShadowCoord[ i ];\r\n vDirLightWorldNormal[ i ] = vDirectionalShadowNormal[ i ];\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n#endif\r\n\r\n vec4 pixelPosWorld = vec4(vWorldPosition, 1.0);\r\n vec4 pixelPosEye;\r\n\r\n#ifdef SPHERE_SPRITE\r\n\r\n vec3 viewNormalSprites;\r\n float frontFaced = 1.0;\r\n vec3 normal;\r\n\r\n/* quick-and-dirty method\r\n normal.xy = ' + INSTANCED_SPRITE_OVERSCALE + ' * (2.0 * vUv - 1.0);\r\n float r2 = dot(normal.xy, normal.xy);\r\n if (r2 > 1.0) discard;\r\n float normalZ = sqrt(1.0 - r2);\r\n normal.z = normalZ;\r\n normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\r\n pixelPosEye = vec4(spritePosEye.xyz, 1.0);\r\n pixelPosEye.z += spritePosEye.w * normalZ;\r\n*/\r\n\r\n // ray-trace sphere surface\r\n {\r\n vec3 p;\r\n if (!get_sphere_point(-vViewPosition, p, frontFaced)) discard;\r\n vec4 v = vec4(instOffset.xyz + p * instOffset.w, 1.0);\r\n pixelPosWorld = modelMatrix * v;\r\n pixelPosEye = modelViewMatrix * v;\r\n normal = normalize(normalMatrix * p);\r\n #ifdef NORMALS_TO_G_BUFFER\r\n viewNormalSprites = normalize(mat3(modelViewMatrix)*p);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = directionalShadowMatrix[ i ] * pixelPosWorld;\r\n vDirLightWorldNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(p, 0.0))).xyz;\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n #endif\r\n }\r\n#endif\r\n\r\n#ifdef CYLINDER_SPRITE\r\n vec3 normal;\r\n vec3 viewNormalSprites;\r\n float frontFaced = 1.0;\r\n float cylinderY = 0.0;\r\n\r\n // ray-trace cylinder surface\r\n {\r\n vec3 p;\r\n if (!get_cylinder_point(-vViewPosition, p, frontFaced)) discard;\r\n\r\n cylinderY = 0.5 * (p.y + 1.0);\r\n\r\n vec4 v = vec4(p, 1.0);\r\n v = vec4(dot(v, matVec1), dot(v, matVec2), dot(v, matVec3), 1.0);\r\n pixelPosWorld = modelMatrix * v;\r\n pixelPosEye = modelViewMatrix * v;\r\n\r\n vec3 localNormal = normalize(vec3(p.x, 0.0, p.z));\r\n normal = vec3(\r\n dot(localNormal, matVec1.xyz),\r\n dot(localNormal, matVec2.xyz),\r\n dot(localNormal, matVec3.xyz));\r\n #ifdef NORMALS_TO_G_BUFFER\r\n viewNormalSprites = normalize(mat3(modelViewMatrix)*normal);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = directionalShadowMatrix[ i ] * pixelPosWorld;\r\n vDirLightWorldNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(normal, 0.0))).xyz;\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n #endif\r\n\r\n normal = normalize(normalMatrix * normal);\r\n }\r\n#endif\r\n\r\n #ifdef ATTR_COLOR\r\n vec3 vertexColor = vColor;\r\n #else\r\n vec3 vertexColor = vec3(1.0, 1.0, 1.0);\r\n #endif\r\n\r\n #ifdef ATTR_COLOR2\r\n #ifdef CYLINDER_SPRITE\r\n float colorCoef = cylinderY; // cylinder parameter is calculated from ray-tracing\r\n #else\r\n float colorCoef = vUv.y; // cylinder parameter is interpolated as tex coord\r\n #endif\r\n // choose either color or color2\r\n vertexColor = mix(vColor2, vColor, step(0.5, colorCoef));\r\n #endif\r\n\r\n // negative red component is a special condition\r\n if (vertexColor.x < 0.0) discard;\r\n\r\n #ifdef DASHED_LINE\r\n if ( mod( vLineDistance, dashedLinePeriod ) > dashedLineSize ) discard;\r\n #endif\r\n\r\n // transparency prepass writes only z, so we don't need to calc the color\r\n #ifdef PREPASS_TRANSP\r\n fragColor = vec4(1.0, 1.0, 1.0, 1.0);\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepth = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n #endif\r\n return;\r\n #endif\r\n\r\n float totalOpacity = opacity;\r\n\r\n #ifdef ATTR_ALPHA_COLOR\r\n totalOpacity *= alphaCol;\r\n #endif\r\n\r\n // discard fully transparent pixels\r\n if (totalOpacity == 0.0) discard;\r\n\r\n #ifdef FAKE_OPACITY\r\n // discard pixels in checker pattern\r\n vec2 dm_coord = floor(gl_FragCoord.xy);\r\n dm_coord = fract(dm_coord * 0.5);\r\n if (totalOpacity < 1.0 && (dm_coord.x < 0.5 ^^ dm_coord.y < 0.5)) discard;\r\n vec4 diffuseColor = vec4(diffuse, 1.0);\r\n #else\r\n vec4 diffuseColor = vec4(diffuse, totalOpacity);\r\n #endif\r\n\r\n float flipNormal;\r\n #if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n flipNormal = 1.0;\r\n #ifdef DOUBLE_SIDED\r\n flipNormal = float( gl_FrontFacing );\r\n #endif\r\n vec3 normal = normalize( vNormal ) * flipNormal;\r\n #endif\r\n\r\n diffuseColor.rgb *= vertexColor;\r\n\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepth = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n #endif\r\n\r\n #ifdef NORMALS_TO_G_BUFFER\r\n #if defined (SPHERE_SPRITE) || defined (CYLINDER_SPRITE)\r\n vec3 viewNormaInColor = viewNormalSprites;\r\n #else\r\n vec3 viewNormaInColor = viewNormal;\r\n float frontFaced = float( gl_FrontFacing );\r\n #endif\r\n // [-1, 1] -> [0, 1]\r\n viewNormaInColor = 0.5 * viewNormaInColor + 0.5;\r\n fragNormal = vec4(viewNormaInColor, frontFaced);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && NUM_DIR_LIGHTS > 0\r\n vec3 viewDir;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n viewDir = -pixelPosEye.xyz;\r\n #else\r\n viewDir = vViewPosition;\r\n #endif\r\n GeometricContext geometry = GeometricContext(normal, normalize( viewDir ));\r\n BlinnPhongMaterial material = BlinnPhongMaterial(diffuseColor.rgb, specular, shininess);\r\n vec3 outgoingLight = calcLighting(geometry, material, viewDir);\r\n #else\r\n vec3 outgoingLight = diffuseColor.rgb;\r\n #endif\r\n\r\n #ifdef COLOR_FROM_DEPTH\r\n float depth = 0.0;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepth = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n depth = gl_FragDepth;\r\n #else\r\n depth = gl_FragCoord.z;\r\n #endif\r\n fragColor = packDepthToRGBA(depth);\r\n return;\r\n #endif\r\n\r\n #ifdef COLOR_FROM_POS\r\n fragColor = world2colorMatrix * pixelPosWorld;\r\n #else\r\n #ifdef OVERRIDE_COLOR\r\n fragColor = vec4(fixedColor, diffuseColor.a);\r\n #else\r\n fragColor = vec4(outgoingLight, diffuseColor.a);//vec4(vNormal, 1.0);\r\n #endif\r\n\r\n #ifdef USE_FOG\r\n float viewDistance;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n viewDistance = abs(pixelPosEye.z);\r\n #else\r\n viewDistance = vViewPosition.z;\r\n #endif\r\n float fogFactor = smoothstep( fogNear, fogFar, viewDistance) * fogAlpha;\r\n #ifdef FOG_TRANSPARENT\r\n fragColor.a = fragColor.a * (1.0 - fogFactor);\r\n #else\r\n fragColor.rgb = mix( fragColor.rgb, fogColor, fogFactor );\r\n #endif\r\n #endif\r\n\r\n #endif\r\n}\r\n",uniforms:r.UniformsUtils.clone(Wn),lights:!0,fog:!0,side:r.DoubleSide}),this.setValues(e)}precisionString(){const{precision:e}=Dn;return`precision ${e} float;\nprecision ${e} int;\n\n`}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=r.UniformsUtils.clone(e.uniforms),this.defines={...e.defines},this.extensions=e.extensions,this.fog=e.fog,this.instancedPos=e.instancedPos,this.instancedMatrix=e.instancedMatrix,this.attrColor=e.attrColor,this.attrColor2=e.attrColor2,this.attrAlphaColor=e.attrAlphaColor,this.overrideColor=e.overrideColor,this.sphereSprite=e.sphereSprite,this.cylinderSprite=e.cylinderSprite,this.zClip=e.zClip,this.clipPlane=e.clipPlane,this.fakeOpacity=e.fakeOpacity,this.colorFromPos=e.colorFromPos,this.shadowmap=e.shadowmap,this.shadowmapType=e.shadowmapType,this.colorFromDepth=e.colorFromDepth,this.orthoCam=e.orthoCam,this.prepassTransparancy=e.prepassTransparancy,this.dashedLine=e.dashedLine,this.thickLine=e.thickLine,this.fogTransparent=e.fogTransparent,this.normalsToGBuffer=e.normalsToGBuffer,this.toonShading=e.toonShading,this.uberOptions.copy(e.uberOptions),this}createInstance(){const e=new qn;return e.copy(this),e.uberOptions=Object.create(this.uberOptions),e}setValues(e){if(void 0===e)return;super.setValues(e);const t={},r={};this.fog&&(t.USE_FOG=1),this.instancedPos&&(t.INSTANCED_POS=1),this.instancedMatrix&&(t.INSTANCED_MATRIX=1),this.attrColor&&(t.ATTR_COLOR=1),this.attrColor2&&(t.ATTR_COLOR2=1),this.attrAlphaColor&&(t.ATTR_ALPHA_COLOR=1),this.overrideColor&&(t.OVERRIDE_COLOR=1),this.sphereSprite&&(t.SPHERE_SPRITE=1,r.fragDepth=!0),this.cylinderSprite&&(t.CYLINDER_SPRITE=1,r.fragDepth=!0),this.zClip&&(t.ZCLIP=1),this.clipPlane&&(t.CLIP_PLANE=1),this.fakeOpacity&&(t.FAKE_OPACITY=1),this.lights&&(t.USE_LIGHTS=1),this.colorFromPos&&(t.COLOR_FROM_POS=1),this.shadowmap&&(t.SHADOWMAP=1,"pcf"===this.shadowmapType?t.SHADOWMAP_PCF_SHARP=1:"random"===this.shadowmapType?t.SHADOWMAP_PCF_RAND=1:t.SHADOWMAP_BASIC=1),this.colorFromDepth&&(t.COLOR_FROM_DEPTH=1),this.orthoCam&&(t.ORTHOGRAPHIC_CAMERA=1),this.prepassTransparancy&&(t.PREPASS_TRANSP=1),this.dashedLine&&(t.DASHED_LINE=1),this.thickLine&&(t.THICK_LINE=1),this.fogTransparent&&(t.FOG_TRANSPARENT=1),this.normalsToGBuffer&&(r.drawBuffers=!0,t.NORMALS_TO_G_BUFFER=1),this.toonShading&&(t.TOON_SHADING=1),this.defines=t,this.extensions=r}setUberOptions(e){if(void 0!==e)for(const t in e)e.hasOwnProperty(t)&&(this.uberOptions[t]instanceof r.Color?this.uberOptions[t]=e[t].clone():this.uberOptions[t]=e[t])}clone(e){return e?this.createInstance():super.clone()}updateUniforms(){const e=this;Yn.forEach((t=>{e.uniforms.hasOwnProperty(t)&&(e.uberOptions[t]instanceof r.Color||e.uberOptions[t]instanceof r.Matrix4?e.uniforms[t].value=e.uberOptions[t].clone():e.uniforms[t].value=e.uberOptions[t])}))}}qn.prototype.uberOptions=Xn;const Kn=qn;function Zn(e){class t extends e{constructor(...e){super(...e),this.onBeforeRender=t.prototype.onBeforeRender}onBeforeRender(e,t,r,n,s,i){this._onBeforeRender(e,t,r,n,s,i),this._update()}_onBeforeRender(){}_update(){const{material:e}=this;e&&e instanceof Kn&&e.updateUniforms()}}return t}const Qn=Zn(r.Mesh);const Jn=class extends Qn{constructor(...e){super(...e),this.castShadow=!0,this.receiveShadow=!0}_onBeforeRender(e,t,r,n,s,i){Qn.prototype._onBeforeRender.call(this,e,t,r);const{material:o}=this;o&&o.uniforms.invModelViewMatrix&&(this.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,this.matrixWorld),o.uniforms.invModelViewMatrix.value.copy(this.modelViewMatrix).invert(),o.uniforms.nearPlaneValue.value=r.near,o.uniformsNeedUpdate=!0)}},es=Zn(r.Mesh);class ts extends es{constructor(e,t){super(e,t),this.castShadow=!0,this.receiveShadow=!0}static _mvLength=new r.Vector3;static _center=new r.Vector3;static _modelView=new r.Matrix4;_onBeforeRender(e,t,r){es.prototype._onBeforeRender.call(this,e,t,r);const n=this.geometry,{material:s}=this;if(!n.zClip||!s.uberOptions)return;const i=ts._modelView,o=ts._mvLength,a=ts._center;i.multiplyMatrices(this.matrixWorld,r.matrixWorldInverse);const l=o.setFromMatrixColumn(i,0).length();a.copy(n.boundingSphere.center),this.localToWorld(a),s.uberOptions.zClipValue=r.position.z-a.z-l*(.5*n.boundingSphere.radius)}}const rs=ts;class ns extends r.Group{constructor(e,t){super(),this.geometry=e;const r=this;r.initialized=!1,this.geometry.addEventListener("update",(()=>{r.update()}))}init(){const{children:e}=this;for(let t=e.length-1;t>=0;--t)this.remove(e[t]);const{items:r,userData:n}=this.geometry;for(let e=0,s=r.length;e0?s:[new r.Matrix4];const o=this._createMeshes(e);for(let e=0,t=o.length;ee,adjust:function(e){let t=e>>16&255,r=e>>8&255,n=255&e;return.2126*t+.7152*r+.0722*n>127?(t=3*t/10,r=3*r/10,n=3*n/10):(t=255-3*(255-t)/10,r=255-3*(255-r)/10,n=255-3*(255-n)/10),t<<16|r<<8|n},inverse:function(e){return 255-(e>>16&255)<<16|255-(e>>8&255)<<8|255-(255&e)}};function Rs(e,t){let r;if(Ts.hasOwnProperty(t))r=O.hexColor(Ts[t](e));else{const e=parseInt(t,16);r=!Number.isNaN(e)&&t.toLowerCase().startsWith("0x")?O.hexColor(e):"#000000"}return r}const Ms={serial:e=>e.serial,name:e=>e.getVisualName(),elem:e=>e.element.name,residue:e=>e.residue.getType().getName(),sequence:e=>e.residue.getSequence(),chain:e=>e.residue.getChain().getName(),hetatm:e=>e.isHet(),water:e=>"HOH"===e.residue.getType().getName()||"WAT"===e.residue.getType().getName()},Ps=function(e,t){return t.replace(/\{\{(\s*\w+\s*)\}\}/g,(t=>{let r=t.replace(/\s+/g,"");return r=r.substring(2,r.length-2).toLowerCase(),Ms.hasOwnProperty(r)?Ms[r](e):"null"}))};const Ls=class extends Ss{_makeGeoArgs(){const e=this._mode.getLabelOpts();return[this._selection.chunks.length,e]}_build(){const e=this._mode.getLabelOpts(),t=this._selection.chunks,{atoms:r,parent:n}=this._selection,s=this._colorer,i=this._geo;for(let o=0,a=t.length;o{for(let t=0;t<=e;++t){const e=s[t],r=e.clone().sub(l).cross(c);i.addVectors(e,r),o[t]=Vs(e,i,c,n)}a.setItem(t,o),a.setColor(t,r)})),a.finalize()}_makeGeoArgs(){return this._segmentsHeight=this._polyComplexity,[Os(1,this._polyComplexity),this._segmentsHeight+1,this._selection.chunks.length]}};const ks=class extends Is{_build(){const e=this._geo,t=this._mode.getAromaticOffset();this._buildInner(t,((t,r,n)=>{let s=n[0];for(let r=1;r<=this._segmentsHeight;++r){const i=n[r];e.setSegment(t,r-1,s,i),s=i}e.setColor(t,r)})),e.finalize()}_makeGeoArgs(){return this._segmentsHeight=this._mode.getAromaticArcChunks(),[this._selection.chunks.length,this._segmentsHeight,!0]}};const zs=class extends ws{raycast(e,t){const{residues:r}=this._selection,n=[];this._mesh.raycast(e,n);const s=this._chunksIdc;for(let e=0,i=n.length;es&&e[t-1]._isValid?t-1:t}function a(t){return t{const t=e.getVisualName();a||t!==i?l||t!==o||(l=e.position):a=e.position})),a&&l||(a=n._firstAtom.position,l=n._lastAtom.position),a&&l){const s=l.clone().sub(a),i=n._wingVector,o=n._controlPoint,c=o.clone().add(i),h=o.clone().sub(s),u=h.clone().add(i);e[r]=[h.x,h.y,h.z],t[r]=[u.x,u.y,u.z],e[++r]=[h.x,h.y,h.z],t[r]=[u.x,u.y,u.z],e[++r]=[o.x,o.y,o.z],t[r]=[c.x,c.y,c.z],++r;const d=o.clone().add(s),p=d.clone().add(i);e[r]=[d.x,d.y,d.z],t[r]=[p.x,p.y,p.z],e[++r]=[d.x,d.y,d.z],t[r]=[p.x,p.y,p.z]}}(c,l,h,e[t]),{centerPoints:c,topPoints:l};t===d?u(t,a(t)):(Ws(c,l,h++,e[o(d)]),Ws(c,l,h++,e[d]));for(let n=t;n<=r;++n)Ws(c,l,h++,e[n]);return p===a(p)?u(r,o(r)):(Ws(c,l,h++,e[p]),Ws(c,l,h,e[a(p)])),{centerPoints:c,topPoints:l}}const Xs=class{constructor(e,t,r,n,s,i){const o=Ys(e,t,r,i);this._topInterp=$s(o.topPoints,s),this._centerInterp=$s(o.centerPoints,s),this._shift=.5/(r-t+2),this._valueStep=(1-2*this._shift)/(2*(r-t+1)*(n-1)),this._segmentsCount=n}prepareMatrices(e,t,n){const s=this._segmentsCount,i=new Array(s),o=new r.Vector2(0,0),a=this._topInterp,l=this._centerInterp;let c=this._shift+this._valueStep*(s-1)*e;for(let e=0;e{const c=n.getResidueColor(e,t);a[o]=e._index,i.setItem(o,r,s,l),i.setColor(o++,c)})),this._chunksIdc=a,i.finalize()}updateToFrame(e){const{parent:t}=this._selection,r=this._mode,n=this._colorer,s=r.getTension(),i=this._geo,o=e.getResidues();let a=0;const l=e.needsColorUpdate(n);Ks(this._selection.subdivs,o,this._segmentsHeight,s,r,((e,r)=>{i.setItem(a,r),l&&i.setColor(a,n.getResidueColor(e,t)),a++})),i.finalize()}};const Qs=class extends ws{_makeGeoArgs(){const e=this._selection.subdivs;let t=0;for(let r=0,n=e.length;r1&&0!==t&&(h.lerpVectors(_,g,ti/b),u.lerpVectors(_,g,1-ti/b)),t*=ti,h.addScaledVector(w,t),u.addScaledVector(w,t),o.setItem(d,h,u),o.setColor(d++,i.getAtomColor(m,n),i.getAtomColor(f,n))}}o.finalize(),this._chunksIdc=p}updateToFrame(e){const t=this._selection.chunks,{bonds:n}=this._selection,s=this._mode,i=this._colorer,o=this._geo,a=s.drawMultiorderBonds(),l=s.showAromaticLoops(),c=new r.Vector3,h=new r.Vector3,u=new r.Vector3;let d=0;const p=e.needsColorUpdate(i);for(let r=0,s=t.length;r1&&0!==r&&(h.lerpVectors(_,g,ti/b),u.lerpVectors(_,g,1-ti/b)),r*=ti,h.addScaledVector(w,r),u.addScaledVector(w,r),o.setItem(d,h,u),p&&o.setColor(d,e.getAtomColor(i,m),e.getAtomColor(i,f)),d++}}o.finalize()}}};const ni=class extends Xt{constructor(e,t,r,n,s,i,o,a){super();const l=this;this._complex=r,this._mode=s;const c=r.getAtoms(),h=r.getTransforms();r.forEachComponent((u=>{const d=[];let p=0;if(u.forEachAtom((e=>{l._checkAtom(e,o)&&(d[p++]=e.index)})),0===p)return;const m=new e(t,{atoms:c,chunks:d,parent:r},n,s,h,i,a);m._component=u,l.add(m)}))}_checkAtom(e,t){return e.mask&t}getSubset(e,t){const r=[],{children:n}=this;let s=0;for(let i=0,o=n.length;i{let d=0;const p=[];if(u.forEachResidue((e=>{l._checkResidue(e,o)&&(p[d++]=e._index)})),0===d)return;const m=new e(t,{residues:c,chunks:p,parent:r},n,s,h,i,a);m._component=u,l.add(m)}))}checkResidue(e,t){return e._mask&t}getSubset(e,t){const r=[],{children:n}=this;let s=0;for(let i=0,o=n.length;i{const d=u.getMaskedSubdivSequences(o);let p=0;const m=[];for(let e=0,t=d.length;e{const d=[];let p=0;if(u.forEachBond((e=>{const t=e._left,r=e._right;t.mask&o&&r.mask&o&&(d[p++]=e._index)})),0===p)return;const m=new e(t,{bonds:c,chunks:d,parent:r},n,s,h,i,a);m._component=u,l.add(m)}))}getSubset(e,t){const r=[],{children:n}=this;let s=0;for(let i=0,o=n.length;i{const d=[];let p=0;const m=[];let f=0;u.forEachCycle((e=>{const t=e.atoms;let r=0;for(let e=0,n=t.length;e0&&(m[f++]=e)}));const _=new e(t,{cycles:m,atoms:c,chunks:d,parent:r},n,s,h,i,a);_._component=u,l.add(_)}))}getSubset(e,t){const r=[],{children:n}=this;let s=0;for(let i=0,o=n.length;i0&&l.add(d)}return l}}lr(pi.prototype),pi.prototype.id="__",pi.prototype.depGroups=[];const mi=pi;function fi(){return{lineWidth:this.opts.lineWidth}}class _i extends mi{static id="LN";constructor(e){super(e),this.depGroups=this.depGroups.slice(0);const t=this.depGroups;for(let e=0,r=t.length;e=256?t-256:t))%this.chainColors.length,this.chainColors[t]}getSecondaryColor(e,t=!1){const r=this.secondaryColors[e];return void 0!==r||t?r:this.defaultSecondaryColor}getSequentialColor(e){const{colors:t}=this,r=t.length;return e<0?t[e%r+r]:t[e%r]}getGradientColor(e,t){const r=this.gradients[t];if(!r)return this.defaultNamedColor;const n=r.length,s=e*(n-1);let i=Math.floor(s);const o=Wi(i+1,0,n-1);return i=Wi(i,0,n-1),function(e,t,r){const n=1-r;return n*(e>>16&255)+r*(t>>16&255)<<16|n*(e>>8&255)+r*(t>>8&255)<<8|n*(255&e)+r*(255&t)}(r[i],r[o],s-i)}getNamedColor(e,t=!1){const r=this.namedColors[e];return void 0!==r||t?r:this.defaultNamedColor}}t().assign(Yi.prototype,{colors:[16777215,16711680,65280,255,8421504],minRangeColor:0,midRangeColor:8355711,maxRangeColor:16777215,defaultElementColor:16777215,elementColors:{},defaultResidueColor:16777215,residueColors:{},chainColors:[16777215],defaultSecondaryColor:16777215,secondaryColors:{},defaultGradientColor:0,defaultNamedColor:16777215,namedColorsArray:[["indianred",13458524],["lightcoral",15761536],["salmon",16416882],["darksalmon",15308410],["lightsalmon",16752762],["crimson",14423100],["red",16711680],["firebrick",11674146],["darkred",9109504],["pink",16761035],["lightpink",16758465],["hotpink",16738740],["deeppink",16716947],["mediumvioletred",13047173],["palevioletred",14381203],["coral",16744272],["tomato",16737095],["orangered",16729344],["darkorange",16747520],["orange",16753920],["gold",16766720],["yellow",16776960],["lightyellow",16777184],["lemonchiffon",16775885],["lightgoldenrodyellow",16448210],["papayawhip",16773077],["moccasin",16770229],["peachpuff",16767673],["palegoldenrod",15657130],["khaki",15787660],["darkkhaki",12433259],["lavender",15132410],["thistle",14204888],["plum",14524637],["violet",15631086],["orchid",14315734],["fuchsia",16711935],["magenta",16711935],["mediumorchid",12211667],["mediumpurple",9662683],["rebeccapurple",6697881],["blueviolet",9055202],["darkviolet",9699539],["darkorchid",10040012],["darkmagenta",9109643],["purple",8388736],["indigo",4915330],["slateblue",6970061],["mediumslateblue",8087790],["darkslateblue",4734347],["greenyellow",11403055],["chartreuse",8388352],["lawngreen",8190976],["lime",65280],["limegreen",3329330],["palegreen",10025880],["lightgreen",9498256],["mediumspringgreen",64154],["springgreen",65407],["mediumseagreen",3978097],["seagreen",3050327],["forestgreen",2263842],["green",32768],["darkgreen",25600],["yellowgreen",10145074],["olivedrab",7048739],["olive",8421376],["darkolivegreen",5597999],["mediumaquamarine",6737322],["darkseagreen",9419919],["lightseagreen",2142890],["darkcyan",35723],["teal",32896],["aqua",65535],["cyan",65535],["lightcyan",14745599],["paleturquoise",11529966],["aquamarine",8388564],["turquoise",4251856],["mediumturquoise",4772300],["darkturquoise",52945],["cadetblue",6266528],["steelblue",4620980],["lightsteelblue",11584734],["powderblue",11591910],["lightblue",11393254],["skyblue",8900331],["lightskyblue",8900346],["deepskyblue",49151],["dodgerblue",2003199],["cornflowerblue",6591981],["royalblue",4286945],["blue",255],["mediumblue",205],["darkblue",139],["navy",128],["midnightblue",1644912],["cornsilk",16775388],["blanchedalmond",16772045],["bisque",16770244],["navajowhite",16768685],["wheat",16113331],["burlywood",14596231],["tan",13808780],["rosybrown",12357519],["sandybrown",16032864],["goldenrod",14329120],["darkgoldenrod",12092939],["peru",13468991],["chocolate",13789470],["saddlebrown",9127187],["sienna",10506797],["brown",10824234],["maroon",8388608],["white",16777215],["snow",16775930],["honeydew",15794160],["mintcream",16121850],["azure",15794175],["aliceblue",15792383],["ghostwhite",16316671],["whitesmoke",16119285],["seashell",16774638],["beige",16119260],["oldlace",16643558],["floralwhite",16775920],["ivory",16777200],["antiquewhite",16444375],["linen",16445670],["lavenderblush",16773365],["mistyrose",16770273],["gainsboro",14474460],["lightgray",13882323],["silver",12632256],["darkgray",11119017],["gray",8421504],["dimgray",6908265],["lightslategray",7833753],["slategray",7372944],["darkslategray",3100495],["black",0]],namedColors:{},gradients:{rainbow:[255,65535,65280,16776960,16711680],temp:[255,32767,16777215,16744192,16711680],hot:[16777215,16744192,16711680],cold:[16777215,32767,255],"blue-red":[255,16777215,16711680],reds:[16777215,16711680],blues:[16777215,255]}});const{namedColorsArray:Xi,namedColors:qi}=Yi.prototype;for(let e=0,{length:t}=Xi;e=0?this.opts.carbon:this.palette.getElementColor(r)}getResidueColor(e,t){return this.palette.defaultResidueColor}}ao.prototype.id="EL",ao.prototype.name="Element",ao.prototype.shortName="Element";const lo=ao;class co extends oo{static id="RT";getAtomColor(e,t){return this.getResidueColor(e.residue,t)}getResidueColor(e,t){return this.palette.getResidueColor(e._type._name)}}co.prototype.id="RT",co.prototype.name="Residue Type",co.prototype.shortName="Residue";const ho=co;class uo extends oo{static id="SQ";getAtomColor(e,t){return this.getResidueColor(e.residue,t)}getResidueColor(e,t){const r=e._chain;if(r.minSequence===Number.POSITIVE_INFINITY&&r.maxSequence===Number.NEGATIVE_INFINITY)return this.palette.defaultNamedColor;const n=r.minSequence,s=r.maxSequence>n?r.maxSequence:n+1;return this.palette.getGradientColor((e._sequence-n)/(s-n),this.opts.gradient)}}uo.prototype.id="SQ",uo.prototype.name="Sequence",uo.prototype.shortName="Sequence";const po=uo;class mo extends oo{static id="CH";getAtomColor(e,t){return this.getResidueColor(e.residue,t)}getResidueColor(e,t){return this.palette.getChainColor(e.getChain()._name)}}mo.prototype.id="CH",mo.prototype.name="Chain",mo.prototype.shortName="Chain";const fo=mo;class _o extends oo{static id="SS";getAtomColor(e,t){return this.getResidueColor(e.residue,t)}getResidueColor(e,t){if(e._type.flags&ve.Flags.DNA)return this.palette.getSecondaryColor("dna");if(e._type.flags&ve.Flags.RNA)return this.palette.getSecondaryColor("rna");const r=e.getSecondary();if(r){let e=this.palette.getSecondaryColor(r.type,!0);return void 0===e&&(e=this.palette.getSecondaryColor(r.generic)),e}return this.palette.defaultSecondaryColor}}_o.prototype.id="SS",_o.prototype.name="Secondary Structure",_o.prototype.shortName="Structure";const go=_o;class yo extends oo{static id="UN";getAtomColor(e,t){return this.opts.color}getResidueColor(e,t){return this.opts.color}}yo.prototype.id="UN",yo.prototype.name="Uniform",yo.prototype.shortName="Uniform";const xo=yo;class bo extends oo{static id="CO";constructor(e){super(e);const t=st.parse(this.opts.subset);this._subsetCached=t.error?st.none():t.selector}getAtomColor(e,t){return this._subsetCached.includesAtom(e)?this.opts.color:this.opts.baseColor}getResidueColor(e,t){const r=this._subsetCached,n=e._atoms;for(let e=0,t=n.length;er.max?1:0:(e.temperature-r.min)/(r.max-r.min),this.palette.getGradientColor(n,r.gradient)):this.palette.defaultGradientColor}getResidueColor(e,t){const{opts:r}=this;if(!r)return this.palette.defaultGradientColor;if(e.temperature){let t=0;return t=r.min===r.max?e.temperature>r.max?1:0:(e.temperature-r.min)/(r.max-r.min),this.palette.getGradientColor(t,r.gradient)}return this.palette.defaultGradientColor}}Co.prototype.id="TM",Co.prototype.name="Temperature",Co.prototype.shortName="Temperature";const Ao=Co;class Eo extends oo{static id="OC";_getColorByOccupancy(e,t){if(void 0!==e){const r=1-e;return this.palette.getGradientColor(r,t.gradient)}return this.palette.defaultGradientColor}getAtomColor(e,t){const{opts:r}=this;return this._getColorByOccupancy(e.occupancy,r)}getResidueColor(e,t){const{opts:r}=this;return this._getColorByOccupancy(e.occupancy,r)}}Eo.prototype.id="OC",Eo.prototype.name="Occupancy",Eo.prototype.shortName="Occupancy";const To=Eo;class Ro extends oo{static id="HY";getAtomColor(e,t){return this.getResidueColor(e.residue,t)}getResidueColor(e,t){let r=this.palette.defaultResidueColor;if(void 0!==e._type.hydrophobicity){const t=-4.5,n=4.5;r=this.palette.getGradientColor((e._type.hydrophobicity-t)/(n-t),this.opts.gradient)}return r}}Ro.prototype.id="HY",Ro.prototype.name="Hydrophobicity",Ro.prototype.shortName="Hydrophobicity";const Mo=Ro;class Po extends oo{static id="MO";getAtomColor(e,t){return this.getResidueColor(e.residue,t)}getResidueColor(e,t){const r=e._molecule,n=t.getMoleculeCount();return n>1?this.palette.getGradientColor((r.index-1)/(n-1),this.opts.gradient):this.palette.getGradientColor(0,this.opts.gradient)}}Po.prototype.id="MO",Po.prototype.name="Molecule",Po.prototype.shortName="Molecule";const Lo=Po;class No extends oo{static id="CB";getAtomColor(e,t){const r=this.opts.color,n=(s=r,(i=this.opts.factor)*(s>>16&255)<<16|i*(s>>8&255)<<8|i*(255&s));var s,i;return e.flags&ae.Flags.CARBON?r:n}getResidueColor(e,t){return this.opts.color}}No.prototype.id="CB",No.prototype.name="Carbon",No.prototype.shortName="Carbon";const Io=new ar([lo,ho,po,fo,go,xo,wo,vo,Ao,To,Mo,Lo,No]);function Oo(e){return new r.Color(e,e,e)}const Vo=[{id:"DF",name:"Diffuse",shortName:"Diffuse",uberOptions:{diffuse:Oo(1),specular:Oo(0),shininess:1,opacity:1},values:{lights:!0,fog:!0,depthWrite:!0,transparent:!1,toonShading:!1}},{id:"SF",name:"Soft Plastic",shortName:"Soft",uberOptions:{diffuse:Oo(1),specular:Oo(.1),shininess:30,opacity:1},values:{lights:!0,fog:!0,depthWrite:!0,transparent:!1,toonShading:!1}},{id:"PL",name:"Glossy Plastic",shortName:"Glossy",uberOptions:{diffuse:Oo(.56),specular:Oo(.28),shininess:100,opacity:1},values:{lights:!0,fog:!0,depthWrite:!0,transparent:!1,toonShading:!1}},{id:"ME",name:"Metal",shortName:"Metal",uberOptions:{diffuse:Oo(.56),specular:Oo(.55),shininess:30,opacity:1},values:{lights:!0,fog:!0,depthWrite:!0,transparent:!1,toonShading:!1}},{id:"TR",name:"Transparent",shortName:"Transparent",uberOptions:{diffuse:Oo(1),specular:Oo(0),shininess:1,opacity:.5},values:{lights:!0,fog:!0,depthWrite:!0,transparent:!0,toonShading:!1}},{id:"GL",name:"Glass",shortName:"Glass",uberOptions:{diffuse:Oo(.5),specular:Oo(.65),shininess:100,opacity:.5},values:{lights:!0,fog:!0,depthWrite:!0,transparent:!0,toonShading:!1}},{id:"BA",name:"Backdrop",shortName:"Backdrop",uberOptions:{diffuse:Oo(1),specular:Oo(0),shininess:1,opacity:1},values:{lights:!1,fog:!1,depthWrite:!1,transparent:!1,toonShading:!1}},{id:"TN",name:"Toon",shortName:"Toon",uberOptions:{diffuse:Oo(1),specular:Oo(0),shininess:1,opacity:1},values:{lights:!0,fog:!0,depthWrite:!0,transparent:!1,toonShading:!0}},{id:"FL",name:"Flat",shortName:"Flat",uberOptions:{diffuse:Oo(1),specular:Oo(0),shininess:0,opacity:1},values:{lights:!1,fog:!0,depthWrite:!0,transparent:!1}}],Do=new ar(Vo);function ko(e,t,r){const n=e.material.createInstance();n.setValues(t);const s=new e.constructor(e.geometry,n);return s.material.needsUpdate=!0,s.applyMatrix4(e.matrix),s.layers.set(r),s}function zo(e,t,r){const n=function(e,t){const r=[];return e.traverse((e=>{for(let n=0;n{e.applyMatrix4(t[0]);for(let r=1;r{t.material.setValues({prepassTransparancy:!1,fakeOpacity:!1}),t.material.needsUpdate=!0,t.layers.set(tr.LAYERS.TRANSPARENT);const r=ko(t,e,tr.LAYERS.PREPASS_TRANSPARENT);t.parent.add(r)}))}}(),processColFromPosMaterial:function(){const e={colorFromPos:!0,transparent:!1,colorFromDepth:!1,lights:!1,shadowmap:!1,fog:!1,overrideColor:!1,fogTransparent:!1,attrColor:!1,attrColor2:!1,attrAlphaColor:!1,fakeOpacity:!1};return function(t,n){n instanceof Kn&&zo(t,[r.Mesh,r.LineSegments],(t=>{const r=ko(t,e,tr.LAYERS.COLOR_FROM_POSITION);t.parent.add(r)}))}}(),createShadowmapMaterial:function(){const e={colorFromDepth:!0,orthoCam:!0,lights:!1,shadowmap:!1,fog:!1};return function(t,n){n instanceof Kn&&zo(t,[r.Mesh,r.LineSegments],(t=>{if(!t.receiveShadow&&t.material.shadowmap&&t.material.setValues({shadowmap:!1}),!t.material.lights)return;if(!t.castShadow)return;if(!tr.belongToSelectLayers(t))return;const r=ko(t,e,tr.LAYERS.SHADOWMAP);r.isShadowmapMesh=!0,t.parent.add(r)}))}}(),removeShadowmapMaterial:function(e,t){t instanceof Kn&&zo(e,[r.Mesh,r.LineSegments],(e=>{e.isShadowmapMesh&&e.parent.remove(e)}))},forEachMeshInGroup:Fo,countTriangles:function(e){let t=0;return Fo(e,(e=>{t+=function(e){const t=e.geometry;if(t instanceof r.InstancedBufferGeometry){const e=t.attributes;for(const n in e)if(e.hasOwnProperty(n)&&e[n]instanceof r.InstancedBufferAttribute){const r=e[n];return(t.index?t.index.array.length/3:0)*r.array.length/r.itemSize}return 0}return t instanceof r.BufferGeometry?t.index?t.index.array.length/3:0:t.faces?t.faces.length:0}(e)})),t}},{selectors:Uo}=Ht;const Go=class{constructor(e,t,r,n){const s={clipPlane:z.now.draft.clipPlane,fogTransparent:z.now.bg.transparent,shadowmap:z.now.shadow.on,shadowmapType:z.now.shadow.type};this.index=e,this.mode=t,this.colorer=r,this.selector=n,this.selectorString="",this.count=0,this.material=new Kn,this.material.setValues(s),this.material.setUberOptions({fogAlpha:z.now.fogAlpha}),this.materialPreset=Do.first,this.needsRebuild=!0,this.visible=!0,this.setMode(t)}markAtoms(e){return this.count=e.markAtoms(this.selector,1<0){t=new r.Group,t.matrixAutoUpdate=!1,t.matrix=this.geo.matrix;for(let e=0;e{e.objects.push(t)})),o=0;o{const t=e._atoms;for(a=0;a{const r=e._atoms;for(let e=0;e2)return w.error("Can only edit fragments with one or two bound atoms."),!1;this._fragmentBoundAtoms=n;const s=1<{e._left.mask&t?0===(e._right.mask&t)&&(r[e._left.index]=1):e._right.mask&t&&(r[e._right.index]=1)}));const n=[],s=Object.keys(r);for(let t=0,r=s.length;t{r.mask&t&&r.position.applyMatrix4(e)}))}}},{selectors:Wo}=Ht;function Yo(e,t){Array.isArray(t)||(t=[t]);const[r,n]=t;return new(e.get(r)||e.first)(n)}class Xo extends sr{constructor(e,t){super(e,t),this._complex=t,this._reprList=[],this._repr=null,this._reprListChanged=!0,this._selectionBit=0,this._reprUsedBits=0,this._selectionCount=0,this._selectionGeometry=new r.Group}getBoundaries(){return this._complex.getBoundaries()}release(){this._selectionGeometry.parent&&this._selectionGeometry.remove(this._selectionGeometry),sr.prototype.release.call(this)}getComplex(){return this._complex}getSelectionCount(){return this._selectionCount}getSelectionGeo(){return this._selectionGeometry}getSelectionBit(){return this._selectionBit}getEditor(){return this._editor}resetReps(e){this._complex&&this._complex.clearAtomBits(-1),this._reprListChanged=!0,this._reprUsedBits=0,this._reprList.length=e.length;for(let t=0,r=e.length;t0?this._reprList[0]:null,this._selectionBit=e.length,this._reprUsedBits|=1<=0&&ethis._reprList.length)return w.error(`Rep ${e} does not exist!`),null;if(e===this._reprList.length){const t=this.repAdd(r);return w.warn(`Rep ${e} does not exist! New representation was created.`),{desc:t.desc,index:e,status:"created"}}const n=this._reprList[e],s={selector:n.selectorString,mode:n.mode.identify(),colorer:n.colorer.identify(),material:n.materialPreset.id};if(r){const i=n.change(r,this._complex,Yo($i,r.mode),Yo(Io,r.colorer));if(!t().isEmpty(i)){n.needsRebuild=!0;for(const t in i)i.hasOwnProperty(t)&&(s[t]=i[t],w.debug(`rep[${e}].${t} changed to ${i[t]}`));return i.mode&&n.mode.isSurface&&("ultra"===z.now.resolution||"high"===z.now.resolution)&&(w.report('Surface resolution was changed to "medium" to avoid hang-ups.'),z.set("resolution","medium")),{desc:s,index:e,status:"changed"}}}return{desc:s,index:e,status:""}}repGet(e){return(void 0===e||e instanceof Object)&&(e=this.repCurrent()),e<0||e>=this._reprList.length?null:this._reprList[e]}_getFreeReprIdx(){let e=this._reprUsedBits;for(let t=0;t<=Xo.NUM_REPRESENTATION_BITS;++t,e>>=1)if(!(1&e))return t;return-1}repAdd(e){if(this._reprList.length>=Xo.NUM_REPRESENTATION_BITS)return null;const r=this._getFreeReprIdx();if(r<0)return null;const n=this.buildSelectorFromMask(1<=t||t<=1)return;const r=this._reprList[e];r.unmarkAtoms(this._complex),this._reprUsedBits&=~(1<=this._reprList.length)return;this._reprList[e].show(!t)}select(e,t){t?this._selectionCount+=this._complex.markAtomsAdditionally(e,1<{e.mask&o&&(e.mask&=a,t._selectionCount--)}))):(n._mask|=o,n.forEachAtom((e=>{e.mask&o||(e.mask|=o,t._selectionCount++)})),s.collectMask(),i&&i.collectMask());else if(s||i){const e=s||i;e._mask&o?(e._mask&=a,e.forEachResidue((e=>{e._mask&o&&(e._mask&=a,e.forEachAtom((e=>{e.mask&o&&(e.mask&=a,t._selectionCount--)})),e._mask&=a)}))):(e._mask|=o,e.forEachResidue((e=>{if(!(e._mask&o)){e._mask|=o,e.forEachAtom((e=>{e.mask&o||(e.mask|=o,t._selectionCount++)}));const r=s?e.getMolecule():e.getChain();r&&r.collectMask()}})))}else this.resetSelectionMask()}expandSelection(){const e=this,t=1<{e._left.mask&t?0===(e._right.mask&t)&&(e._right.mask|=r):e._right.mask&t&&(e._left.mask|=r)}));const n=~r;this._complex.forEachAtom((s=>{s.mask&r&&(s.mask=s.mask&n|t,++e._selectionCount)})),this._complex.updateStructuresMask()}shrinkSelection(){const e=this,t=1<{e._left.mask&t?0===(e._right.mask&t)&&(e._left.mask|=r):e._right.mask&t&&(e._right.mask|=r)})),this._complex.forEachAtom((e=>{e.mask&t&&1===e.bonds.length&&(e.mask|=r)}));const n=~(t|r);this._complex.forEachAtom((t=>{t.mask&r&&(t.mask&=n,--e._selectionCount)})),this._complex.updateStructuresMask()}getSelectedComponent(){const e=1<{n.mask&e&&(null===t?t=n.residue._component:t!==n.residue._component&&(r=!0))})),r?null:t}getSelectionCenter(e,t,r){e.set(0,0,0);let n=0;return this._complex.forEachAtom((s=>{t(s,r)&&(e.add(s.position),n++)})),0!==n&&(e.divideScalar(n),e.applyMatrix4(this.matrix),!0)}needsRebuild(){if(this._reprListChanged)return!0;const e=this._reprList;for(let t=0,r=e.length;t{const r=e._complex;if(!r)return void t();let n=!1;setTimeout((()=>{const s=e._reprList,i=so.get(z.now.palette)||so.first;let o=!1;for(let t=0,a=s.length;t0&&(n=Wo.chain(r),i=i?Wo.or(i,n):n),Object.keys(t).length>0)for(const e in t)t.hasOwnProperty(e)&&(n=Wo.and(Wo.chain(e),Wo.residx(s(t[e]))),i=i?Wo.or(i,n):n);e.length>0&&(n=Wo.serial(s(e)),i=i?Wo.or(i,n):n),i||(i=Wo.none())}return i}buildSelectorFromMask(e){const t=this._complex,r=[],n={},s=[];return t.forEachChain((t=>{t._mask&e&&r.push(t._name)})),t.forEachResidue((t=>{if(t._mask&e&&!(t._chain._mask&e)){const e=t._chain._name;e in n?n[e].push(t._index):n[e]=[t._index]}})),t.forEachAtom((t=>{t.mask&e&&!(t.residue._mask&e)&&s.push(t.serial)})),this._buildSelectorFromSortedLists(s,n,r)}forSelectedResidues(e){const t=1<{r._mask&t&&e(r)}))}beginComponentEdit(){if(this._editor)return null;const e=new $o.ComponentEditor(this);return e.begin()?(this._editor=e,e):null}beginFragmentEdit(){if(this._editor)return null;const e=new $o.FragmentEditor(this);return e.begin()?(this._editor=e,e):null}finalizeEdit(){this._editor=null}setMaterialValues(e,t=!1,n=void 0){for(let s=0,i=this._reprList.length;s{t instanceof r.Mesh&&(t.material.setValues(e),void 0!==n&&n(t),t.material.needsUpdate=!0)}))}}setUberOptions(e){for(let t=0,r=this._reprList.length;t{e.mask|=n})),this._selectionCount=this._complex.countAtomsByMask(n),this._complex.updateStructuresMask(),this.buildSelectorFromMask(n)}}Xo.NUM_REPRESENTATION_BITS=30;const qo=Xo,Ko=r.UniformsUtils.merge([{volumeDim:{type:"v3",value:new r.Vector3(512,512,512)},tileTex:{type:"t",value:null},tileTexSize:{type:"v2",value:new r.Vector2(512,512)},tileStride:{type:"v2",value:new r.Vector2(512,512)},boxAngles:{type:"v3",value:new r.Vector3(1,1,1)},delta:{type:"v3",value:new r.Vector3(0,0,0)},_isoLevel0:{type:"v2",value:new r.Vector3(.5,.75,1)},_flipV:{type:"f",value:0},_BFLeft:{type:"t",value:null},_BFRight:{type:"t",value:null},_FFLeft:{type:"t",value:null},_FFRight:{type:"t",value:null},_WFFLeft:{type:"t",value:null},_WFFRight:{type:"t",value:null}}]);function Zo(e,t){const n=r.UniformsUtils.clone(t);for(const t in e)n.hasOwnProperty(t)&&(n[t].value=e[t]);return n}function Qo(e,t){return{uniforms:Zo(e,{}),vertexShader:"/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec3 pos;\r\n\r\nvoid main() {\r\n // we're assuming local position is in [-0.5, 0.5]\r\n // we need to offset it to be represented in RGB\r\n pos = position.xyz + 0.5;\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n}",fragmentShader:"/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec3 pos;\r\n\r\nvoid main() {\r\n gl_FragColor = vec4(pos, 0.5);\r\n}",transparent:!1,depthTest:!1,depthWrite:!1,side:t}}class Jo extends r.ShaderMaterial{constructor(e){super(Qo(e,r.BackSide))}}class ea{constructor(e,t,n,s){this.uniforms=Zo(e,t),this.vertexShader=n,this.fragmentShader=s,this.transparent=!1,this.depthTest=!1,this.depthWrite=!1,this.side=r.FrontSide}}class ta extends r.ShaderMaterial{constructor(e){const t=r.UniformsUtils.merge([{aspectRatio:{type:"f",value:0},farZ:{type:"f",value:0},tanHalfFOV:{type:"f",value:0},matWorld2Volume:{type:"4fv",value:new r.Matrix4}}]);super(new ea(e,t,"/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec4 volPos;\r\nuniform float aspectRatio;\r\nuniform float farZ;\r\nuniform float tanHalfFOV;\r\nuniform mat4 matWorld2Volume;\r\n\r\nvoid main() {\r\n // rescale plane to fill in the whole far plane area seen from camera\r\n vec3 pos = position.xyz;\r\n pos.x = pos.x * tanHalfFOV * farZ * aspectRatio;\r\n pos.y = pos.y * tanHalfFOV * farZ;\r\n // common transformation\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);\r\n // calc pos in volume CS\r\n volPos = matWorld2Volume * modelMatrix * vec4(pos, 1.0);\r\n // we're assuming local position is in [-0.5, 0.5]\r\n // we need to offset it to be represented in RGB\r\n volPos = volPos + 0.5;\r\n volPos.w = 0.5;\r\n}\r\n","/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec4 volPos;\r\n\r\nvoid main() {\r\n gl_FragColor = volPos;\r\n}"))}}class ra extends r.ShaderMaterial{constructor(e){super(Qo(e,r.FrontSide))}}class na extends r.ShaderMaterial{constructor(e){const t=new ea(e,Ko,"/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec4 screenSpacePos;\r\n\r\nvoid main() {\r\n screenSpacePos = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n gl_Position = screenSpacePos;\r\n}","/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nuniform mat4 projectionMatrix;\r\n\r\n// 3D volume texture\r\nuniform vec3 volumeDim; // volume dimensions, pixels\r\nuniform sampler2D tileTex; // tiled texture containing all Z-slices of a 3D data\r\nuniform vec2 tileTexSize; // size of tiled texture, pixels\r\nuniform vec2 tileStride; // UV stride between slices in tile tex, pixels\r\n\r\nuniform vec3 boxAngles;//value of angles({x: alpha, y:beta, z:gamma}) types 1 - if angle is obtuse, 0 - if acute\r\nuniform vec3 delta; //Projection box delta's from non-orthogonal origin axes; {x: XY, y : XZ, z: YZ}\r\n\r\nuniform vec3 _isoLevel0;\r\nuniform float _flipV;\r\nuniform sampler2D _BFLeft;\r\nuniform sampler2D _BFRight;\r\nuniform sampler2D _FFLeft;\r\nuniform sampler2D _FFRight;\r\nuniform sampler2D _WFFLeft;\r\nuniform sampler2D _WFFRight;\r\n\r\nvarying vec4 screenSpacePos;\r\n\r\n#define NO_COLOR vec4(0., 0., 0., 0.)\r\n\r\nvec4 sample3DTexture(vec3 texCoord) {\r\n // a pair of Z slices is determined by nearest slice border\r\n float zSliceBorder = floor(texCoord.z * volumeDim.z + 0.5);\r\n float zSliceNumber1 = max(zSliceBorder - 1.0, 0.0);\r\n float zSliceNumber2 = min(zSliceBorder, volumeDim.z - 1.0);\r\n\r\n float rowTiles = floor(tileTexSize.x / tileStride.x);\r\n\r\n // calculate coords in tile texture for both slices\r\n vec2 tileOffset = vec2(mod(zSliceNumber1, rowTiles), floor(zSliceNumber1 / rowTiles));\r\n vec2 texCoordSlice1 = (texCoord.xy * volumeDim.xy + tileOffset * tileStride) / tileTexSize.xy;\r\n tileOffset = vec2(mod(zSliceNumber2, rowTiles), floor(zSliceNumber2 / rowTiles));\r\n vec2 texCoordSlice2 = (texCoord.xy * volumeDim.xy + tileOffset * tileStride) / tileTexSize.xy;\r\n\r\n // bilinear filtering\r\n vec4 colorSlice1 = texture2D(tileTex, texCoordSlice1);\r\n vec4 colorSlice2 = texture2D(tileTex, texCoordSlice2);\r\n float weightSlice2 = texCoord.z * volumeDim.z - (zSliceNumber1 + 0.5);\r\n return mix(colorSlice1, colorSlice2, weightSlice2);\r\n}\r\n\r\nvec4 sample3DTextureInclined(vec3 boxCoord) { // delta:{ x: XY, y : XZ, z: YZ }\r\n vec3 textCoord = boxCoord;\r\n vec2 currDelta = mix(boxCoord.zz, vec2(1., 1.) - boxCoord.zz, boxAngles.yx) * delta.yz;\r\n\r\n textCoord.y = (boxCoord.y - currDelta.y) / (1. - delta.z);\r\n if (textCoord.y < 0.0 || textCoord.y > 1.0)\r\n return NO_COLOR;\r\n\r\n currDelta.x += mix(textCoord.y, 1.0 - textCoord.y, boxAngles.z) * delta.x;\r\n\r\n textCoord.x = (boxCoord.x - currDelta.x) / (1. - delta.x - delta.y);\r\n if (textCoord.x < 0.0 || textCoord.x > 1.0)\r\n return NO_COLOR;\r\n\r\n return sample3DTexture(textCoord);\r\n}\r\n\r\nfloat CalcColor(vec3 iter, vec3 dir) {\r\n float d = 1. / 128.;\r\n vec3 dx = vec3(d, 0.0, 0.0);\r\n vec3 dy = vec3(0.0, d, 0.0);\r\n vec3 dz = vec3(0.0, 0.0, d);\r\n\r\n // #Opt: coordInc.x:(iter + dx).x > 1. ? 0.: sample3DTextureInclined(iter + dx).x,\r\n vec3 coordInc = mix(\r\n vec3(\r\n sample3DTextureInclined(iter + dx).x,\r\n sample3DTextureInclined(iter + dy).x,\r\n sample3DTextureInclined(iter + dz).x\r\n ),\r\n vec3(0. ,0. , 0.),\r\n vec3(floor((iter + dx).x), floor((iter + dy).y), floor((iter + dz).z))\r\n );\r\n\r\n // #Opt: coordDec.x:(iter - dx).x < 0. ? 0.: sample3DTextureInclined(iter - dx).x,\r\n vec3 coordDec = mix(\r\n vec3(0. ,0. , 0.),\r\n vec3(\r\n sample3DTextureInclined(iter - dx).x,\r\n sample3DTextureInclined(iter - dy).x,\r\n sample3DTextureInclined(iter - dz).x\r\n ),\r\n vec3(ceil((iter - dx).x), ceil((iter - dy).y), ceil((iter - dz).z))\r\n );\r\n\r\n vec3 N = normalize(coordInc - coordDec);\r\n float dif = max(0.0, dot(N, dir));\r\n return dif;\r\n}\r\n\r\nvec3 AccuracyIso(vec3 left, vec3 right, float volLeft, float threshold) {\r\n for (int i = 0; i < 5; i++) {\r\n vec3 iterator = 0.5 * (left + right);\r\n float vol = sample3DTextureInclined(iterator).r;\r\n if ((volLeft - threshold) * (vol - threshold) < 0.)\r\n right = iterator;\r\n else\r\n left = iterator;\r\n }\r\n return 0.5 * (left + right);\r\n}\r\n\r\nvec3 CorrectIso(vec3 left, vec3 right, float tr) {\r\n for (int j = 0; j < 5; j++) {\r\n vec3 iterator = 0.5 * (left + right);\r\n float vol = sample3DTextureInclined(iterator).r;\r\n if (vol < tr)\r\n right = iterator;\r\n else\r\n left = iterator;\r\n }\r\n return 0.5 * (left + right);\r\n}\r\n\r\nvec4 GetIso1(vec3 start, vec3 back, float molDist, vec3 dir, float tr, int count) {\r\n float vol, stepSize = (float(count) + 2.) / float(STEPS_COUNT);\r\n vec3 step = stepSize * dir, iterator = start, left, right;\r\n vec4 acc = NO_COLOR;\r\n\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n iterator = iterator + step;\r\n vol = sample3DTextureInclined(iterator).r;\r\n if (length(iterator - back) <= stepSize || (vol > tr))\r\n break;\r\n }\r\n\r\n if (vol > tr)\r\n acc = vec4(CorrectIso(iterator, iterator - step, tr).xyz, 1.);\r\n\r\n return acc;\r\n}\r\n\r\nfloat easeOut(float x0, float x1, float x) {\r\n float t = clamp((x - x0) / (x1 - x0), 0.0, 1.0);\r\n return 1.0 - (1.0 - t) * (1.0 - t);\r\n}\r\n\r\nfloat easeIn(float x0, float x1, float x) {\r\n float t = clamp((x - x0) / (x1 - x0), 0.0, 1.0);\r\n return t * t;\r\n}\r\n\r\nvec3 GetColSimple(float vol) {\r\n float t = easeOut(_isoLevel0.x, _isoLevel0.y, vol);\r\n float s = easeIn(_isoLevel0.y, _isoLevel0.z, vol);\r\n return vec3(0.5, 0.6, 0.7) * (1.0 - t) + 2.0 * vec3(s, 0, 0);\r\n}\r\n\r\nvec4 VolRender(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n vec4 acc = NO_COLOR, iso;\r\n vec3 iterator = start, sumColor = vec3(0., 0., 0.);\r\n float stepSize, alpha, sumAlpha = 0.0, vol, curStepSize, molD;\r\n vec3 step, col, colOld, right;\r\n float tr0 = _isoLevel0.x;\r\n float dif, r, kd, finish;\r\n int count = 0, stopMol = 0;\r\n\r\n for (int k = 0; k < 3; k++) {\r\n stepSize = (float(k) + 2.) / float(STEPS_COUNT);\r\n kd = 140. * tr0 * stepSize;\r\n r = 1. - kd;\r\n step = stepSize * dir;\r\n iso = GetIso1(iterator, back, molDist, dir, tr0, k);\r\n if (iso.a < 0.1 || length(iso.xyz - start) > molDist)\r\n break;\r\n iterator = iso.xyz;\r\n dif = 1.;// CalcColor(iterator, dir);\r\n colOld = GetColSimple(tr0);\r\n curStepSize = stepSize;\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n iterator = iterator + step;\r\n molD = length(iterator - start);\r\n vol = sample3DTextureInclined(iterator).r;\r\n finish = distance(iterator, back) - stepSize;\r\n if (finish < 0.0 || vol < tr0 || (sumAlpha > 0.97) || molD > molDist)\r\n break;\r\n alpha = (1. - r);\r\n col = GetColSimple(vol);\r\n vol = sample3DTextureInclined(iterator - 0.5 * step).r;\r\n vec3 colMid = GetColSimple(vol);\r\n sumColor += (1. - sumAlpha) * (colOld + 4.* colMid + col) * alpha / 6.;\r\n sumAlpha += (1. - sumAlpha) * alpha;// *(1. - 1.0*dif*dif);\r\n colOld = col;\r\n } // for i\r\n\r\n if (finish < 0.0 || sumAlpha > 0.97)\r\n break;\r\n\r\n if (molD > molDist) {\r\n curStepSize = stepSize - (molD - molDist);\r\n right = iterator - (molD - molDist) * dir;\r\n vol = sample3DTextureInclined(right).r;\r\n } else {\r\n vec3 left = iterator - step;\r\n right = CorrectIso(left, iterator, tr0);\r\n curStepSize = distance(left, right);\r\n vol = tr0;\r\n }\r\n\r\n alpha = (1. - r) * curStepSize / stepSize;\r\n dif = 1.;// CalcColor(right, dir);\r\n col = GetColSimple(vol);\r\n vol = sample3DTextureInclined(iterator - 0.5 * curStepSize / stepSize * step).r;\r\n vec3 colMid = GetColSimple(vol);\r\n sumColor += (1. - sumAlpha) * (colOld + 4. * colMid + col) * alpha / 6.;\r\n sumAlpha += (1. - sumAlpha) * alpha;// *(1. - 1.0*dif*dif);\r\n\r\n if (molD > molDist)\r\n break;\r\n } // for k\r\n acc.rgb = 1. * sumColor / sumAlpha;\r\n acc.a = sumAlpha;\r\n return acc;\r\n}\r\n\r\nvec4 VolRender1(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n float stepSize = 1.0 / float(STEPS_COUNT);\r\n float len = length(back - start);\r\n vec3 step = stepSize * dir;\r\n vec3 iterator = start;\r\n float acc = 0.0;\r\n\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n if (float(i) * stepSize > len)\r\n break;\r\n iterator = iterator + step;\r\n if (sample3DTextureInclined(iterator).r > _isoLevel0.x)\r\n acc += 10. * sample3DTextureInclined(iterator).r / float(STEPS_COUNT);\r\n }\r\n\r\n return vec4(1.,1.,1., acc);\r\n}\r\n\r\nvec4 IsoRender(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n vec4 tst = GetIso1(start, back, 2., dir, _isoLevel0.x, 0);\r\n vec4 col = NO_COLOR;\r\n\r\n if (length(tst.xyz - start) < molDist && tst.a > 0.1) {\r\n float dif = CalcColor(tst.xyz, dir);\r\n dif = 0.9 * dif * dif;\r\n col = vec4(dif, dif, dif, 1);\r\n }\r\n return col;\r\n}\r\n\r\nvec4 VolRender2(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n return sample3DTexture(start);\r\n}\r\n\r\nvoid main() {\r\n vec3 tc = screenSpacePos.xyz / screenSpacePos.w * 0.5 + 0.5;\r\n\r\n if (_flipV > 0.0) {\r\n tc.y = 1.0 - tc.y;\r\n }\r\n\r\n vec3 start;\r\n vec3 back;\r\n vec3 molBack;\r\n if (projectionMatrix[0][2] < 0.0) {\r\n start = texture2D(_FFLeft, tc.xy).xyz;\r\n back = texture2D(_BFLeft, tc.xy).xyz;\r\n molBack = texture2D(_WFFLeft, tc.xy).xyz;\r\n } else {\r\n start = texture2D(_FFRight, tc.xy).xyz;\r\n back = texture2D(_BFRight, tc.xy).xyz;\r\n molBack = texture2D(_WFFRight, tc.xy).xyz;\r\n }\r\n\r\n vec3 dir = normalize(back - start);\r\n\r\n float molDist = 2.0;\r\n if (length(molBack) > 0.001) {\r\n molDist = distance(start, molBack);\r\n }\r\n\r\n #ifdef ISO_MODE\r\n gl_FragColor = IsoRender(start, back, molDist, dir);\r\n #else\r\n gl_FragColor = VolRender(start, back, molDist, dir);\r\n #endif\r\n}\r\n");t.transparent=!0,t.depthTest=!0,super(t),this.updateDefines()}updateDefines(){this.defines={ISO_MODE:z.now.modes.VD.isoMode,STEPS_COUNT:100*z.now.modes.VD.polyComplexity[z.now.resolution]},this.needsUpdate=!0}}const sa={BackFacePosMaterial:Jo,BackFacePosMaterialFarPlane:ta,FrontFacePosMaterial:ra,VolumeMaterial:na};class ia extends r.Mesh{volumeInfo={};constructor(){const e=new r.BufferGeometry;super(e),this.clipPlane=new r.Plane;const t=new r.Vector3(.5,.5,.5);this.size=t,this.cullFlag=[!0,!0,!0,!0,!0,!0,!0,!0,!1,!1,!1,!1,!1,!1],this.faces=[{indices:[],norm:new r.Vector3(0,0,-1)},{indices:[],norm:new r.Vector3(0,0,1)},{indices:[],norm:new r.Vector3(0,-1,0)},{indices:[],norm:new r.Vector3(0,1,0)},{indices:[],norm:new r.Vector3(-1,0,0)},{indices:[],norm:new r.Vector3(1,0,0)},{indices:[],norm:new r.Vector3(0,0,0)}],this.vertices=[new r.Vector3(-t.x,-t.y,-t.z),new r.Vector3(-t.x,t.y,-t.z),new r.Vector3(t.x,-t.y,-t.z),new r.Vector3(t.x,t.y,-t.z),new r.Vector3(-t.x,-t.y,t.z),new r.Vector3(-t.x,t.y,t.z),new r.Vector3(t.x,-t.y,t.z),new r.Vector3(t.x,t.y,t.z),new r.Vector3(0,0,0),new r.Vector3(0,0,0),new r.Vector3(0,0,0),new r.Vector3(0,0,0),new r.Vector3(0,0,0),new r.Vector3(0,0,0)],e.setAttribute("position",new r.BufferAttribute(new Float32Array(3*this.vertices.length),3)),this.name="VolumeMesh"}static _corners=[[-1,-1,-1,0,4,8],[1,-1,-1,0,5,9],[1,1,-1,1,5,10],[-1,1,-1,1,4,11],[-1,-1,1,2,6,8],[1,-1,1,2,7,9],[1,1,1,3,7,10],[-1,1,1,3,6,11]];static _edges=[[0,1,0,-1,-1],[2,3,0,1,-1],[4,5,0,-1,1],[6,7,0,1,1],[0,3,-1,0,-1],[1,2,1,0,-1],[4,7,-1,0,1],[5,6,1,0,1],[0,4,-1,-1,0],[1,5,1,-1,0],[2,6,-1,1,0],[3,7,1,1,0]];static _edgeIntersections=function(){const e=[];for(let t=0;t<12;++t)e.push(new r.Vector3);return e}();_updateVertices(){const e=ia._corners,t=ia._edges,n=ia._edgeIntersections;let s;const i=this.clipPlane.normal,o=this.clipPlane.constant,a=this.vertices,{size:l}=this,c=[0,0,0,0,0,0,0,0],h=[1,1,1,1,1,1,1,1,1,1,1,1],u=new r.Vector3;let d=null;function p(){if(0===i.x)return 0;const e=-(i.dot(u)+o)/i.x;return-l.x<=e&&e<=l.x?(d.set(e,u.y,u.z),e===l.x?2:e===-l.x?-2:1):0}function m(){if(0===i.y)return 0;const e=-(i.dot(u)+o)/i.y;return-l.y<=e&&e<=l.y?(d.set(u.x,e,u.z),e===l.y?2:e===-l.y?-2:1):0}function f(){if(0===i.z)return 0;const e=-(i.dot(u)+o)/i.z;return-l.z<=e&&e<=l.z?(d.set(u.x,u.y,e),e===l.z?2:e===-l.z?-2:1):0}for(let e=0;e<12;++e){const r=t[e];d=n[e],u.set(r[2],r[3],r[4]),u.multiply(l);let s=0;0===r[2]&&(s=p()),0===r[3]&&(s=m()),0===r[4]&&(s=f()),-2===s?c[r[0]]=1:2===s?c[r[1]]=1:0===s&&(h[e]=0)}const _={indices:[],norm:i.clone().negate()};let g=8;for(s=0;s<8;++s)1===c[s]&&(a[g].set(e[s][0],e[s][1],e[s][2]).multiply(l),_.indices.push(g++),h[e[s][3]]=0,h[e[s][4]]=0,h[e[s][5]]=0);for(s=0;s<12;++s)1===h[s]&&(a[g].copy(n[s]),_.indices.push(g++));this.faces[6]=_;const y=new r.Vector3,x=new r.Vector3;for(this.clipPlane.coplanarPoint(x),s=0;s=0):s<8+_.indices.length&&(this.cullFlag[s]=!0);const b=this.geometry.getAttribute("position");let w=0;for(s=0;se.z===-i.z)),this._collectVertices(this.faces[1],(e=>e.z===i.z)),this._collectVertices(this.faces[2],(e=>e.y===-i.y)),this._collectVertices(this.faces[3],(e=>e.y===i.y)),this._collectVertices(this.faces[4],(e=>e.x===-i.x)),this._collectVertices(this.faces[5],(e=>e.x===i.x));const o=new r.Vector3,a=new r.Vector3,l=new r.Vector3;for(t=0;t=3&&(c+=3*(n.indices.length-2));let h=0;const u=new Uint16Array(c);for(t=0;t(s+e*n.sd)/i;this.material.uniforms._isoLevel0.value.set(o(e),o(t),o(r))}static _nearClipPlaneOffset=.2;static _pos=new r.Vector3;static _norm=new r.Vector3;static _norm4D=new r.Vector4;static _matrixWorldToLocal=new r.Matrix4;static _clipPlane=new r.Plane;rebuild(e){const t=ia._nearClipPlaneOffset,r=ia._pos,n=ia._norm,s=ia._norm4D,i=ia._matrixWorldToLocal,o=ia._clipPlane;this._updateIsoLevel(),e.getWorldDirection(n),e.getWorldPosition(r),r.addScaledVector(n,e.near+t),i.copy(this.matrixWorld).invert(),r.applyMatrix4(i),s.set(n.x,n.y,n.z,0),s.applyMatrix4(i),n.copy(s),n.normalize(),o.setFromNormalAndCoplanarPoint(n,r),this.clipPlane.equals(o)||(this.clipPlane=o.clone(),this._updateVertices(),this._updateIndices())}}const oa=ia;class aa{static _projectionTable={XY:["x",2],XZ:["y",1],YZ:["z",0]};constructor(e,t){const{delta:n}=t,{obtuseAngle:s}=t,i=new r.Vector3;e.getSize(i),i.multiplyScalar(.5);const o=this._getBaseVertices(n,s),a=new r.BufferGeometry,l=[];for(let e=0;e<4;e++)l.push(o[e].clone().multiply(i)),l.push(o[(e+1)%4].clone().multiply(i));const c=new r.Vector3(2*i.x*(1-n.x-n.y),0,0);for(let e=0;e<8;e++)l.push(l[e].clone().add(c));for(let e=0;e<4;e++)l.push(l[2*e].clone()),l.push(l[2*e+8].clone());const h=new r.Vector3;e.getCenter(h),l.forEach((e=>e.add(h)));const u=function(e){const t=e.length,r=new Float32Array(3*t);for(let n=0;n{const i=e[n[r][0]];return(-.5*(s-1)+s*t[n[r][1]])*i};return[new r.Vector3(2*(s("XZ",1)+s("XY",1))-1,2*s("YZ",1)-1,-1),new r.Vector3(2*(s("XZ",-1)+s("XY",1))-1,2*s("YZ",-1)-1,1),new r.Vector3(2*(s("XZ",-1)+s("XY",-1))-1,1-2*s("YZ",1),1),new r.Vector3(2*(s("XZ",1)+s("XY",-1))-1,1-2*s("YZ",-1),-1)]}getMesh(){return this._lines}}const la=aa;const ca=class{constructor(e,t,n){const s=this._initPlaneGeo(t,n),i=new sa.BackFacePosMaterialFarPlane;this._plane=new ds.Mesh(s,i),this._plane.frustumCulled=!1,this._plane.doubleSided=!0;const o=new r.Matrix4;this._plane._onBeforeRender=function(t,n,s,i,a,l){const{material:c}=this;if(!e||!c)return;const h=new r.Vector4(0,0,-(s.far-.1),1);h.applyMatrix4(s.matrixWorld),this.matrix.identity(),this.matrix.makeTranslation(h.x,h.y,h.z),this.matrixWorld.copy(this.matrix),this.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,this.matrixWorld),this.normalMatrix.getNormalMatrix(this.modelViewMatrix);const u=e.matrixWorld;o.copy(u).invert(),c.uniforms.aspectRatio.value=s.aspect,c.uniforms.farZ.value=s.far,c.uniforms.tanHalfFOV.value=Math.tan(.5*r.MathUtils.DEG2RAD*s.fov),c.uniforms.matWorld2Volume.value=o},this._plane.layers.set(tr.LAYERS.VOLUME_BFPLANE)}_initPlaneGeo(e,t){const n=new r.BufferGeometry;e=e||1,t=t||1;const s=new Float32Array([-.5*e,.5*t,0,.5*e,.5*t,0,-.5*e,-.5*t,0,.5*e,-.5*t,0]);return n.setAttribute("position",new r.BufferAttribute(s,3)),n.setIndex([0,2,1,2,3,1]),n}getMesh(){return this._plane}};const ha=class extends sr{constructor(e,t){super(e,t),this._mesh=new oa,this._mesh.setDataSource(t),this.add(this._mesh),this._frame=new la(this.getBoundaries().boundingBox,this._mesh.volumeInfo),this.add(this._frame.getMesh()),this.showFrame(z.now.modes.VD.frame),this._farPlane=new ca(this._mesh,2,2),this.add(this._farPlane.getMesh())}getBoundaries(){const e=this._dataSource.getBox(),t=new r.Sphere;return e.getBoundingSphere(t),{boundingBox:e,boundingSphere:t}}getMesh(){return this._mesh}showFrame(e){this._frame.getMesh().material.visible=e}};const ua=class extends ar{constructor(e=[]){super(e,["types"])}find(e){let t=[];if(e.type)t=this._dict.types[e.type.toLowerCase()]||[];else if(e.source)return this._list.filter((t=>t.canProbablyLoad&&t.canProbablyLoad(e.source)));return[...t]}};class da extends g{constructor(e,t){super(),this._source=e,this._options=t||{},this._abort=!1,this._agent=null}load(){return Promise.reject(new Error("Loading from this source is not implemented"))}abort(){this._abort=!0,this._agent&&this._agent.abort()}static extractName(e){}}lr(da.prototype);class pa extends da{constructor(e,t){super(e,t),t=this._options,this._binary=!0===t.binary}load(){return new Promise(((e,t)=>{if(this._abort)throw new Error("Loading aborted");const r=this._source,n=this._agent=new FileReader;n.addEventListener("load",(()=>{e(n.result)})),n.addEventListener("error",(()=>{t(n.error)})),n.addEventListener("abort",(()=>{t(new Error("Loading aborted"))})),n.addEventListener("progress",(e=>{this.dispatchEvent(e)})),this._binary?n.readAsArrayBuffer(r):n.readAsText(r)}))}static canProbablyLoad(e){return File&&e instanceof File||Blob&&e instanceof Blob}static extractName(e){return e&&e.name}}pa.types=["file","blob"];const ma=/^(https?|ftp):\/\//i;class fa extends da{constructor(e,t){super(e,t),t=this._options,this._binary=!0===t.binary}load(){return new Promise(((e,t)=>{if(this._abort)throw new Error("Loading aborted");const r=this._source,n=this._agent=new XMLHttpRequest;n.addEventListener("load",(()=>{200===n.status?e(n.response):t(new Error(`HTTP ${n.status} while fetching ${r}`))})),n.addEventListener("error",(()=>{t(new Error("HTTP request failed"))})),n.addEventListener("abort",(()=>{t(new Error("Loading aborted"))})),n.addEventListener("progress",(e=>{this.dispatchEvent(e)})),n.open("GET",r),this._binary?n.responseType="arraybuffer":n.responseType="text",n.send()}))}static canProbablyLoad(e){return t().isString(e)&&ma.test(e)}static extractName(e){if(e){const t=(e.indexOf("?")+1||e.lastIndexOf("#")+1||e.length+1)-1;return e.slice(e.lastIndexOf("/",t)+1,t)}}}fa.types=["url"];class _a extends da{load(){return new Promise((e=>{if(this._abort)throw new Error("Loading aborted");e(this._source)}))}static canProbablyLoad(e){return!1}}_a.types=["immediate"];const ga=new ua([pa,fa,_a]);const ya=class extends ar{constructor(e=[]){super(e,["formats","extensions"])}find(e){let t=[];return e.format?t=this._dict.formats[e.format.toLowerCase()]||[]:e.ext&&(t=this._dict.extensions[e.ext.toLowerCase()]||[]),0===t.length&&!e.format&&e.data?this._list.filter((t=>t.canProbablyParse&&t.canProbablyParse(e.data))):[...t]}};class xa{constructor(e,t){this._data=e,this._options=t||{},this._abort=!1}parseSync(){throw new Error("Parsing this type of data is not implemented")}parse(){return new Promise(((e,t)=>{setTimeout((()=>{try{return this._abort?t(new Error("Parsing aborted")):e(this.parseSync())}catch(e){return t(e)}}))}))}getModel(){return this.model._parseHeader(this._data),this.model}abort(){this._abort=!0}}lr(xa.prototype);class ba{constructor(){this.matrices=[],this._matrix=null,this._matrixIndex=-1}parse(e){let t=this._matrix;if(" SMTRY"===e.readString(12,18)){const n=e.readCharCode(19)-49,s=e.readString(20,80).trim().split(/\s+/),i=parseInt(s[0],10);null!==this._matrix&&i===this._matrixIndex||(this._matrixIndex=i,this._matrix=t=new r.Matrix4,this.matrices[this.matrices.length]=t);const{elements:o}=t;o[n]=parseFloat(s[1]),o[n+4]=parseFloat(s[2]),o[n+8]=parseFloat(s[3]),o[n+12]=parseFloat(s[4])}}}ba.prototype.id=290;const wa=ba,{Assembly:Sa}=Ht;class va{constructor(e){this._complex=e,this.assemblies=[],this._assembly=null,this._matrix=null,this._matrixIndex=-1}parse(e){let t=this._assembly,n=this._matrix;if(t&&" BIOMT"===e.readString(12,18)){const s=e.readCharCode(19)-49,i=e.readString(20,80).trim().split(/\s+/),o=parseInt(i[0],10);null!==this._matrix&&o===this._matrixIndex||(this._matrixIndex=o,this._matrix=n=new r.Matrix4,t.addMatrix(n));const{elements:a}=n;a[s]=parseFloat(i[1]),a[s+4]=parseFloat(i[2]),a[s+8]=parseFloat(i[3]),a[s+12]=parseFloat(i[4])}else if(t&&"CHAINS:"===e.readString(35,41)){const r=e.readString(42,80).split(",");for(let e=0,n=r.length;e0&&t.addChain(n)}}else"BIOMOLECULE:"===e.readString(12,23)&&(this._matrix=null,this._matrixIndex=-1,this._assembly=t=new Sa(this._complex),this.assemblies.push(t))}}va.prototype.id=350;const Ca=va;const Aa=class{constructor(e){this._data=e,this._start=0,this._nextCR=-1,this._nextLF=-1,this._next=-1,this._end=e.length,this.next()}readLine(){return this._data.slice(this._start,this._next)}readChar(e){return(e=this._start+e-1)=this._end}next(){const e=this._next+1;this._start=ethis._nextCR&&(this._nextCR=(this._data.indexOf("\r",this._start)+1||this._end+1)-1),this._start>this._nextLF&&(this._nextLF=(this._data.indexOf("\n",this._start)+1||this._end+1)-1),this._next=this._nextCR+1t&&o.addBond(t,r,0,La.BondType.UNKNOWN,!0),n&&n>t&&o.addBond(t,n,0,La.BondType.UNKNOWN,!0),s&&s>t&&o.addBond(t,s,0,La.BondType.UNKNOWN,!0),i&&i>t&&o.addBond(t,i,0,La.BondType.UNKNOWN,!0)}_parseCOMPND(e){const t=e.readString(11,80),r=t.indexOf(":");if(this._compndCurrToken=r>0?t.substring(0,r).trim():this._compndCurrToken,"MOL_ID"===this._compndCurrToken)this._molecule={_index:"",_chains:[]},this._molecule._index=parseInt(t.substring(r+1,t.indexOf(";")),10),this._molecules.push(this._molecule);else if("MOLECULE"===this._compndCurrToken&&null!=this._molecule)this._molecule._name=t.substring(r+1,t.indexOf(";")).trim();else if("CHAIN"===this._compndCurrToken&&null!=this._molecule){let e=t.substring(r+1,80).trim();const n=e[e.length-1];";"!==n&&","!==n||(e=e.slice(0,-1)),e=e.replace(/\s+/g,"");const s=e.split(",");this._molecule._chains=this._molecule._chains.concat(s)}}_parseREMARK(e){const r=e.readInt(8,10);let n=this._remarks[r];if(t().isUndefined(n)){const e=Oa[r];t().isFunction(e)&&(this._remarks[r]=n=new e(this._complex))}t().isUndefined(n)||n.parse(e)}_parseHELIX(e){this._parseSTRUCTURE(e,[20,22,32,34],(e=>{this._complex.addHelix(e),this._complex.structures.push(e)}))}_parseSHEET(e){this._parseSTRUCTURE(e,[22,23,33,34],(e=>{this._complex.addSheet(e)}))}_parseSTRUCTURE(e,t,r){const n=e.readInt(8,10),s=e.readString(12,14).trim(),i=e.readString(41,70).trim(),o=e.readInt(72,76),a=e.readInt(39,40),l=e.readInt(15,16),c=e.readInt(42,45),h=e.readInt(57,60),u=e.readString(t[0],t[2]+1).charCodeAt(0),d=e.readString(t[2],t[2]+1).charCodeAt(0),p=e.readInt(t[1],t[1]+3);let m=e.readString(t[1]+4,t[1]+4),f=0;m.length>0&&(f=m.charCodeAt(0));const _=e.readInt(t[3],t[3]+3);m=e.readString(t[3]+4,t[3]+4);let g,y=0;m.length>0&&(y=m.charCodeAt(0));let x=this._sheet;if(83===e.readCharCode(1)){null!==x&&x.getName()!==s&&(x=null,this._sheet=null),null===x?(this._sheet=g=new Ma(s,l),r(g)):g=x;const e=new Pa(g,this._complex.getUnifiedSerial(u,p,f),this._complex.getUnifiedSerial(d,_,y),a,c,h);g.addStrand(e),this._complex.structures.push(e)}else g=new Ra(a,this._complex.getUnifiedSerial(u,p,f),this._complex.getUnifiedSerial(d,_,y),n,s,i,o),r(g)}_parseHEADER(e){const{metadata:t}=this._complex;t.classification=e.readString(11,50).trim(),t.date=e.readString(51,59).trim();const r=e.readString(63,66).trim();t.id=r,r&&(this._complex.name=r),t.format="pdb"}_parseTITLE(e){const{metadata:t}=this._complex;t.title=t.title||[];const r=e.readInt(9,10)||1;t.title[r-1]=e.readString(11,80).trim()}static tagParsers={HEADER:Va.prototype._parseHEADER,"TITLE ":Va.prototype._parseTITLE,"ATOM ":Va.prototype._parseATOM,HETATM:Va.prototype._parseATOM,ENDMDL:Va.prototype._parseENDMDL,CONECT:Va.prototype._parseCONECT,COMPND:Va.prototype._parseCOMPND,REMARK:Va.prototype._parseREMARK,"HELIX ":Va.prototype._parseHELIX,"SHEET ":Va.prototype._parseSHEET,"ATOM 1":Va.prototype._parseATOM,"ATOM 2":Va.prototype._parseATOM,"ATOM 3":Va.prototype._parseATOM,"ATOM 4":Va.prototype._parseATOM,"ATOM 5":Va.prototype._parseATOM,"ATOM 6":Va.prototype._parseATOM,"ATOM 7":Va.prototype._parseATOM,"ATOM 8":Va.prototype._parseATOM,"ATOM 9":Va.prototype._parseATOM};parseSync(){const e=new Aa(this._data),r=this._complex=new Ea;for(;!e.end();){const r=e.readString(1,6),n=Va.tagParsers[r];t().isFunction(n)&&n.call(this,e),e.next()}if(this._finalize(),this._serialAtomMap=null,this._sheet=null,this._residue=null,this._chain=null,this._complex=null,0===r.getAtomCount())throw new Error("The data does not contain valid atoms");return r}}Va.formats=["pdb"],Va.extensions=[".pdb",".ent"];const Da=Va,{Complex:ka,Element:za,SGroup:Fa,Bond:Ba}=Ht,Ua={A:0,S:1,D:2,T:3},Ga=/\s*<\?xml\b[^?>]*\?>\s*<(?:cml|molecule)\b/i;class ja extends xa{constructor(e,t){super(e,t),this._complex=null,this._residue=null,this._serialAtomMap=null,this._modelId=1,this._lastMolId=-1,this._readOnlyOneMolecule=!1,this._options.fileType="cml"}static canProbablyParse(e){return t().isString(e)&&Ga.test(e)}_rebuidBondIndexes(e,t){const r=e.length;for(let n=0;n1&&o.splice(1,o.length-1),o.forEach((e=>{const r=function(e){let r,n=[];if(e.molecule&&e.molecule.atomArray&&e.molecule.atomArray.atom)Array.isArray(e.molecule.atomArray.atom)?n=e.molecule.atomArray.atom:n.push(e.molecule.atomArray.atom);else if(!e.molecule){return{atomLabels:null,labelsCount:1}}e.molecule.molecule&&s._extractSGroups(e.molecule.molecule,n);let i=n.length;for(let e=0;e1)a[e].order=s;else{const r=Ua[t];void 0!==r&&(a[e].order=r,"A"===t&&(a[e].type=Ba.BondType.AROMATIC))}}i=n.length;for(let e=0;e0&&i.push(r)})),i}_packLabel(e,t){return(t<<16)+e}_unpackLabel(e){return{molId:e>>>16,compId:65535&e}}_breadWidthSearch(e,t){const r=new Array(e.length);let n;for(n=0;n0;){i++;let a=-1;for(n=0;n0;){const t=s.shift();if(t)for(let n=0;n=0){const s=[Math.min(e,t),Math.max(e,t)];this._complex.addBond(s[0],s[1],r,n,!0)}}_fixBondsArray(){const e=this._serialAtomMap={},t=this._complex,r=t._atoms;for(let t=0,n=r.length;to[e]-o[t])),a=0;a{r.curr=2,0===r.count&&(r.count=1);for(let n=0;n{r+=e.getAtomCount()})),r<=0)throw new Error("The data does not contain valid atoms");if(e.length>1){const t=new ka;return t.joinComplexes(e),t.originalCML=e[0].originalCML,t}return 1===e.length?e[0]:new ka}}ja.formats=["cml"],ja.extensions=[".cml"];const Ha=ja;var $a=s(660),Wa=s.n($a);const{Complex:Ya,Chain:Xa,Atom:qa,Element:Ka,Helix:Za,Sheet:Qa,Strand:Ja,Bond:el,Assembly:tl,Molecule:rl}=Ht;class nl{constructor(e){this._original=Array.from(e),this._original.sort(),this._sum=0;for(let e=0;e=this._complex._atoms.length)return;const r=Math.min(e.atomIndex1,e.atomIndex2);this._complex.addBond(this._complex._atoms[r],this._complex._atoms[t],e.bondOrder,el.BondType.UNKNOWN,!0)}_updateSecStructure(e,r,n){const s=[3,-1,1,-1,5];if(!t().isUndefined(n)&&n.secStruct===this._ssType)return r._secondary=this._ssStruct,void(this._ssStruct&&(this._ssStruct.term=r));if(!t().isUndefined(n)){const t=il[n.secStruct];this._ssType=n.secStruct,this._ssStart=r;let i=null;switch(this._ssType){case-1:case 7:break;case 0:case 2:case 4:i=new Za(s[this._ssType],r,r,0,"","",0),e._helices.push(i);break;case 3:{const t=new Qa("",0);e._sheets.push(t),i=new Ja(t,r,r,0,null,null);break}default:void 0!==t&&(i=new Le(t,r,r))}this._ssStruct=i,r._secondary=i,i&&e.structures.push(i)}}_updateMolecules(e){const t=e.entityList;if(!t)return;const r=e.chainsPerModel[0];for(let e=0;e=r)continue;const n=this._complex._chains[t];i=i.concat(n._residues.slice())}const o=new rl(this._complex,n.description,e+1);o.residues=i,this._complex._molecules[e]=o}}_traverse(e){const t=this,{metadata:r}=this._complex;r.id=e.structureId,r.title=[],r.title[0]=e.title,r.date=e.releaseDate,r.format="mmtf";const n={onModel(e){t._onModel(e)},onChain(e){t._onChain(e)},onGroup(e){t._onGroup(e)},onAtom(e){t._onAtom(e)},onBond(e){t._onBond(e)}};this._ssType=-1,this._ssStruct=null,this._ssStart=null,Wa().traverse(e,n),this._updateSecStructure(this._complex),this._updateMolecules(e)}_linkAtomsToResidues(){for(let e=0;e=t)continue;const s=this._complex._chains[r];for(let e=0;e=s||hl(e.charCodeAt(r+1))))return++c,void++r;if(a&&59===o){n=r;let i=0;do{if(n=ul(10,e,n+1),-1===n)throw new cl("Unterminated text block found",l,c);++i}while(n+1=s);return t=e.substring(r+1,n).replace(/\r/g,""),r=n+2,l+=i,c=1,a=!1,t}if(39===o||34===o){n=r;do{if(n=ul(o,e,n+1),-1===n)throw new cl("Unterminated quoted string found",l,c)}while(n+10){for(let e=0;e0&&r.addChain(n[t])}r.matrices=s,e.units.push(r)}}}El.formats=["cif","mmcif"],El.extensions=[".cif",".mmcif"];const Tl=El,Rl=0,Ml=1,Pl=2,Ll=3;const Nl=class{_xyz2crs=[];_origin=new r.Vector3(0,0,0);constructor(){this._header={},this._boxSize=new r.Vector3,this._boxStart=new r.Vector3,this._header.delta={},this._header.extent=[],this._header.nstart=[],this._header.grid=[],this._header.crs2xyz=[],this._header.cellDims=new r.Vector3,this._header.angles=[],this._header.origin=new r.Vector3(0,0,0),this._header.dmin=0,this._header.dmean=0,this._header.dmax=0}_typedCheck(){if(t().isTypedArray(this._buff))this._buff=this._buff.buffer;else if(!t().isArrayBuffer(this._buff))throw new TypeError("Expected ArrayBuffer or TypedArray")}_fillHeader(e,t){for(const r in e)if(e.hasOwnProperty(r))switch(e[r][0]){case Rl:this._header[r]=t[e[r][1]][e[r][2]];break;case Pl:this._parseArray(this._header[r],t[e[r][1]],e[r][2]);break;case Ml:this._parseVector(this._header[r],t[e[r][1]],e[r][2]);break;case Ll:this._header[r]=new Uint8Array(t[e[r][1]],4*[e[r][2]],4*[e[r][3]])}}_parseVector(e,t,r){[e.x,e.y,e.z]=[t[r],t[r+1],t[r+2]]}_parseArray(e,t,r){e[0]=t[r],e[1]=t[r+1],e[2]=t[r+2]}_parseHeader(e){}_setAxisIndices(){}_setOrigins(){}_getAxis(){const e=this._header,t=e.cellDims.x/e.grid[0],n=e.cellDims.y/e.grid[1],s=e.cellDims.z/e.grid[2],[i,o,a]=e.angles,l=Math.cos(o),c=(Math.cos(i)-Math.cos(o)*Math.cos(a))/Math.sin(a),h=Math.sqrt(1-l*l-c*c);return[new r.Vector3(t,0,0),new r.Vector3(Math.cos(a)*n,Math.sin(a)*n,0),new r.Vector3(l*s,c*s,h*s)]}_getXYZdim(){return[this._header.extent[this._xyz2crs[0]],this._header.extent[this._xyz2crs[1]],this._header.extent[this._xyz2crs[2]]]}_getVolumeInfo(){const e=t().pick(this._header,["dmean","dmin","dmax","sd","delta"]);return e.obtuseAngle=this._header.angles.map((e=>Number(e>=Math.PI/2))),e}_setBoxParams(e,t,n){let s=0,i=0;const[o,a,l]=this._header.angles;l>=Math.PI/2&&(s+=Math.abs(t.x)),a>=Math.PI/2&&(s+=Math.abs(n.x)),o>=Math.PI/2&&(i+=Math.abs(n.y)),this._boxStart=new r.Vector3(this._origin.x-s,this._origin.y-i,this._origin.z),this._boxSize=new r.Vector3(Math.abs(e.x)+Math.abs(t.x)+Math.abs(n.x),Math.abs(t.y)+Math.abs(n.y),Math.abs(n.z));const c=(e,t)=>Math.abs(e[t])/this._boxSize[t];this._header.delta.x=c(t,"x"),this._header.delta.y=c(n,"x"),this._header.delta.z=c(n,"y")}_getXYZbox(){return new r.Box3(this._boxStart.clone(),this._boxStart.clone().add(this._boxSize))}_toXYZData(){}parse(e){return this._parseHeader(e),this._setOrigins(),new jt(Float32Array,this._getXYZdim(),this._getXYZbox(),1,this._toXYZData(),this._getVolumeInfo())}},Il={extent:[Pl,"u32",0],type:[Rl,"u32",3],nstart:[Pl,"i32",4],grid:[Pl,"u32",7],cellDims:[Ml,"f32",10],angles:[Pl,"f32",13],crs2xyz:[Pl,"i32",16],dmin:[Rl,"f32",19],dmax:[Rl,"f32",20],dmean:[Rl,"f32",21],ispg:[Rl,"u32",22],nsymbt:[Rl,"u32",23],lksflg:[Rl,"u32",24],customData:[Ll,"buffer",25,9],origin:[Ml,"f32",34],map:[Ll,"buffer",52,1],machine:[Rl,"u32",53],sd:[Rl,"f32",54],nlabel:[Rl,"f32",55],label:[Ll,"buffer",56,200]};class Ol extends Nl{_parseHeader(e){this._buff=e,this._typedCheck();const t={};t.u32=new Uint32Array(this._buff,0,56),t.i32=new Int32Array(this._buff,0,56),t.f32=new Float32Array(this._buff,0,56),t.buffer=this._buff;const r=this._header;this._fillHeader(Il,t),r.angles.forEach(((e,t,r)=>{r[t]*=Math.PI/180}))}_setAxisIndices(){const e=this._header;0===e.cellDims.x&&0===e.cellDims.y&&0===e.cellDims.z&&e.cellDims.set(1,1,1);const{crs2xyz:t}=this._header;0===t[0]&&0===t[1]&&0===t[2]&&(t[0]=1,t[1]=2,t[2]=3);const r=this._xyz2crs;r[t[0]-1]=0,r[t[1]-1]=1,r[t[2]-1]=2}_setOrigins(){const[e,t,r]=this._getAxis();this._setAxisIndices();const n=this._header,s=this._xyz2crs;if(0===n.origin.x&&0===n.origin.y&&0===n.origin.z?(this._origin.addScaledVector(e,n.nstart[s[0]]),this._origin.addScaledVector(t,n.nstart[s[1]]),this._origin.addScaledVector(r,n.nstart[s[2]])):this._origin=n.origin,e.multiplyScalar(n.extent[s[0]]-1),t.multiplyScalar(n.extent[s[1]]-1),r.multiplyScalar(n.extent[s[2]]-1),2!==n.type)throw new Error(`CCP4: Unsupported format ${n.type}`);this._data=new Float32Array(this._buff,1024+n.nsymbt,n.extent[0]*n.extent[1]*n.extent[2]),this._setBoxParams(e,t,r)}_toXYZData(){const e=this._header,t=this._data,r=this._xyz2crs,n=new Float32Array(t.length),s=this._getXYZdim(),i=s[0],o=s[1];let a=0;const l=[];let c,h,u;for(l[2]=0;l[2]=this._strings.length?(this._currentStart=this._strings.length-1,this._currentStringIndx=this._strings.length-1):(this._currentStart=e,this._currentStringIndx=e)}getNextString(){return this._strings[++this._currentStringIndx]}getCurrentString(){return this._strings[this._currentStringIndx]}getStringFromStart(e){return this._currentStringIndx=this._currentStart+e,this._strings[this._currentStart+e]}findNextDataItem(){let e=this.getNextString(),r=!1;for(;!t().isUndefined(e)&&"$$$$"!==e.trim();){if(e.match(/>\s+<(.*)>/)){r=!0;break}e=this.getNextString()}return r}findNextCompoundStart(){let e=this.getCurrentString();for(;!t().isUndefined(e)&&"$$$$"!==e.trim();)e=this.getNextString();return this.setStart(++this._currentStringIndx),this.probablyHaveDataToParse()}probablyHaveDataToParse(){return this._currentStringIndx\s+<(.+)>.*/,ec=/.*($$$$).*|.*>\s+<(.+)>.*/,tc="sdf",rc="mol",nc=["name","id","title"],sc={name:["PUBCHEM_IUPAC_TRADITIONAL_NAME",/PUBCHEM_(.+)_NAME/,/(.+)name/,/(.+)NAME/],id:["PUBCHEM_COMPOUND_CID","id","ID",/.*CID/,/.*ID/,/.*id/],title:["msg","MSG","message","title","description","desc"]};class ic extends xa{constructor(e,t){super(e,t),this._format="sdf",this._complex=null,this._chain=null,this._residue=null,this._molecules=null,this._metadata={},this._metadata.molecules=[],this._currentMolProps={},this._compoundIndx=-1,this._assemblies=[],this._atomsParsed=0,this._atomsIndexes=[]}canProbablyParse(e){return t().isString(e)&&Jl.test(e)}_parseHeader(e){const t={};t.name=e.getStringFromStart(0);const r=parseInt(e.getStringFromStart(1).substr(10,6).trim(),10);t.date=r.toString()||"",t.title=e.getStringFromStart(2),this._metadata.molecules.push(t)}_parseAtoms(e,t){let n,s=this._atomsParsed;const i=function(e){if(!e)return"A";const t=[];for(;e;)t.push(65+e%26),e=Math.trunc(e/26);return t.length>1&&(t.reverse(),t[0]-=1),String.fromCharCode(...t)}(this._compoundIndx);this._chain=this._complex.getChain(i)||this._complex.addChain(i),this._residue=this._chain.addResidue("UNK",1," ");for(let i=0;in&&([t,n]=[n,t]),this._complex.addBond(t,n,Zl[s]||1,Ql[s]||Xl.BondType.UNKNOWN,!0)}}_parseMOL(e){this._compoundIndx++,this._parseHeader(e);const t=e.getStringFromStart(3),r=parseInt(t.substr(0,3),10),n=parseInt(t.substr(3,3),10);this._parseAtoms(e,r),this._parseBonds(e,n),this._atomsParsed+=r,this._metadata.molecules[this._compoundIndx]._residues=[],this._metadata.molecules[this._compoundIndx]._residues.push(this._residue)}_parseDataItem(e){const t=e.getCurrentString();let r=[],n=e.getNextString();for(;""!==n.trim();)r.push(n),n=e.getNextString();1===r.length&&([r]=r),this._currentMolProps[t.replace(/[<>]/g,"").trim()]=r}_parseCompound(e){if(this._parseMOL(e),this._format===tc){for(this._currentMolProps={};e.findNextDataItem();)this._parseDataItem(e);if(0!==Object.keys(this._currentMolProps).length){const e=this._metadata.molecules[this._compoundIndx];e.props=this._currentMolProps,this._tryToUpdateMoleculeData(e)}}}_fixBondsArray(){const e=this._serialAtomMap,t=this._complex._bonds;for(let r=0;r1){t.molecules=[];for(let r=0;r>8&255}if(100!==t.i16[18])throw new Error("DSN6: Incorrect format ");const r=this._header;this._fillHeader(oc,t),r.cellDims.multiplyScalar(1/r.scaleFactor),r.angles.forEach(((e,t,n)=>{n[t]*=Math.PI/180/r.scaleFactor})),r.div/=100}_setAxisIndices(){this._xyz2crs[0]=0,this._xyz2crs[1]=1,this._xyz2crs[2]=2}_setOrigins(){const e=this._header,[t,r,n]=this._getAxis();this._setAxisIndices(),this._origin.addScaledVector(t,e.nstart[0]),this._origin.addScaledVector(r,e.nstart[1]),this._origin.addScaledVector(n,e.nstart[2]),t.multiplyScalar(e.extent[0]),r.multiplyScalar(e.extent[1]),n.multiplyScalar(e.extent[2]),this._setBoxParams(t,r,n)}_pointCalculate(e,t,r,n,s,i,o){const a=this._header;if(!(sn&&(n=e[s]);this._header.sd=Math.sqrt(t/e.length),this._header.dmax=n,this._header.dmin=r}}class lc extends xa{constructor(e,t){super(e,t),this._options.fileType="dsn6",this.model=new ac}static canParse(e,t){return!!e&&(e instanceof ArrayBuffer&&xa.checkDataTypeOptions(t,"dsn6"))}static canProbablyParse(e){return!1}parseSync(){return this.model.parse(this._data)}}lc.formats=["dsn6"],lc.extensions=[".dsn6",".omap"],lc.binary=!0;const cc=lc;const hc=class extends Aa{constructor(e){super(e),this._next=-1,this.next()}getNext(){return this._next}},{Complex:uc,Element:dc,Molecule:pc}=Ht;class mc extends xa{constructor(e,t){super(e,t),this._time=null,this._numAtoms=null,this._residueNumber=null,this._residueName="",this._atomName="",this._atomNumber=null,this._atomPosition=[],this._atomVelocity=[],this._complex=null,this._molecules=[],this._molecule=null,this._options.filetype="gro"}canProbablyParse(e){return t().isString(this._data)&&/^\s*[^\n]*\n\s*\d+ *\n\s*\d+[^\n\d]{3}\s*\w+\s*\d+\s*-?\d/.test(e)}_parseTitle(e){const{metadata:t}=this._complex;t.id=e.readLine().trim(),t.name=t.id.slice(t.id.lastIndexOf("\\")+1,t.id.lastIndexOf(".")),t.format="gro"}_parseNumberOfAtoms(e){if(this._numAtoms=e.readInt(0,e.getNext()),Number.isNaN(this._numAtoms))throw new Error("Line 2 is not representing atom number. Consider checking input file")}_parseAtom(e){this._residueNumber=e.readInt(1,5),this._residueName=e.readString(6,10).trim(),this._atomName=e.readString(11,15).trim(),this._atomNumber=e.readInt(16,20);const t=10*e.readFloat(21,28),n=10*e.readFloat(29,36),s=10*e.readFloat(37,45);if(Number.isNaN(t)||Number.isNaN(n)||Number.isNaN(s))return void(this._complex.error={message:`Atom position is invalid in "${e.readLine()}"`});const i=dc.getByName(this._atomName[0]);if("Unknown"===i.fullName)return void(this._complex.error={message:`${this._atomName[0]} hasn't been recognised as an atom name.`});const o=dc.Role[this._atomName];let a=this._chain;a||(this._chain=a=this._complex.addChain("A"));let l=this._residue;l&&l.getSequence()===this._residueNumber||(this._residue=l=a.addResidue(this._residueName,this._residueNumber," ")),this._atomPosition=new r.Vector3(t,n,s);l.addAtom(this._atomName,i,this._atomPosition,o,!0,this._atomNumber," ",1,1,0)}_finalize(){const e=new pc(this._complex,this._complex.metadata.name,1);e.residues=this._chain._residues,e._chains=this._chain,this._complex._molecules[0]=e,this._molecules.push(e),this._complex.finalize({needAutoBonding:!0,detectAromaticLoops:this.settings.now.aromatic,enableEditing:this.settings.now.editing,serialAtomMap:this._serialAtomMap})}parseSync(){const e=this._complex=new uc,t=new hc(this._data);let r=0;for(this._parseTitle(t),t.next(),this._parseNumberOfAtoms(t),t.next(),r=0;r${e}`))return;this._currPosIdx++}this._toStringFromStart(0,t)}_toStringFromHeader(e,t,r){this._toHeaderString(e,r);const n=this._currPosIdx+t;r[this._currPosIdx].match(`@${e}`)&&n=t.length?this._currStartIdx=this._currPosIdx=t.length-1:this._currStartIdx=this._currPosIdx=e}_probablyHaveDataToParse(e){return this._currPosIdxMOLECULE>"!==e[this._currPosIdx].trim();)this._currPosIdx++;return this._setStart(++this._currPosIdx,e),this._probablyHaveDataToParse(e)}_parseMolecule(e){this._toHeaderString("MOLECULE",e);const{metadata:t}=this._complex;t.name=e[++this._currPosIdx],t.format="mol2",this._molecule={_index:"",_chains:[]},this._molecule._index=this._compoundIndx+1,this._molecules.push(this._molecule)}_parseAtoms(e,t){this._toHeaderString("ATOM",t);for(let n=0;n=9&&(c=parseFloat(e[8])||0);let h=this._chain;if(h||(this._chain=h=this._complex.getChain("A")||this._complex.addChain("A"),this._residue=null),!this._setResidue(e))continue;const u=!1,d=" ",p=1,m=0,f=gc.getByName(l),_=gc.Role[s],g=new r.Vector3(i,o,a);this._residue.addAtom(s,f,g,_,u,n,d,p,m,c)}}_setResidue(e){let t=1,r="UNK";if(e.length>=7&&(t=parseInt(e[6],10)),e.length>=8&&"<0>"!==e[7]&&(r=e[7].replace(Sc,"")),this.settings.now.nowater&&("HOH"===r||"WAT"===r))return!1;const n=this._residue,s=this._chain;return n&&n.getSequence()===t||(this._residue=s.addResidue(r,t,"A")),!0}_parseBonds(e,t){this._toHeaderString("BOND",t);for(let r=0;rn&&([r,n]=[n,r]),this._complex.addBond(r,n,bc[s]||0,wc[s]||yc.BondType.UNKNOWN,!0)}}_fixSerialAtoms(){const e=this._complex._atoms;for(let t=0;t{setTimeout((()=>{try{return this._abort?t(new Error("Export aborted")):e(this.exportSync())}catch(e){return t(e)}}))}))}abort(){this._abort=!0}}lr(Rc.prototype);class Mc{constructor(){this._resultArray=[],this._currentStr=-1,this._tag=null,this._fixedNumeration=!1,this._numeration=!1,this._tagStrNum=0}getResult(){return this.writeString("\n",81,81),this._resultArray.join("")}_currentStrLength(){const e=this._resultArray[this._currentStr];return e?e.length:0}newTag(e,r){this._tag=e||null,t().isUndefined(r)?(this._numeration=!1,this._fixedNumeration=!1,this._tagStrNum=0):t().isNumber(r)?(this._tagStrNum=r,this._numeration=!0,this._fixedNumeration=!0):t().isBoolean(r)&&(this._tagStrNum=0,this._numeration=r,this._fixedNumeration=!1)}newString(e){this.writeString("\n",81,81),this._currentStr++,this._resultArray.push(""),e?this.writeString(e,1,6):this._tag&&this.writeString(this._tag,1,6),this._numeration&&(this._fixedNumeration||this._tagStrNum++,1!==this._tagStrNum&&this.writeString(this._tagStrNum.toString(),10,8))}writeEntireString(e,t,r){t||(t=81);for(let n=0;nMath.abs(r-n)+1&&(s=s.substr(0,Math.abs(r-n+1))),l>o+1)this._resultArray[this._currentStr]+=" ".repeat(l-o-1);else if(l<=o){const e=this._resultArray[this._currentStr];this._resultArray[this._currentStr]=e.slice(0,l-1)}if(ni.length&&(this._resultArray[this._currentStr]+=" ".repeat(a-i.length))}writeBondsArray(e,t){const r=this._getSubArrays(e,4);for(let e=0;ee._fixed));0!==n.length&&e.writeBondsArray(n.reverse(),t[r])}}_extractSHEET(e){if(!this._source._sheets)return;e.newTag("SHEET");const t=this._source._sheets;for(let r=0;r1||t[r].name.length>3?13:14;e.writeString(t[r].serial,11,7),e.writeString(t[r].name,s,16),e.writeString(String.fromCharCode(t[r].location),17,17),e.writeString(t[r].residue._type._name,20,18),e.writeString(t[r].residue._chain._name,22,22),e.writeString(t[r].residue._sequence,26,23),e.writeString(t[r].residue._icode,27,27),e.writeString(t[r].position.x.toFixed(3),38,31),e.writeString(t[r].position.y.toFixed(3),46,39),e.writeString(t[r].position.z.toFixed(3),54,47),e.writeString(t[r].occupancy.toFixed(2),60,55),e.writeString(t[r].temperature.toFixed(2),66,61),e.writeString(t[r].element.name,78,77),t[r].charge&&e.writeString(t[r].charge,79,80)}}_extractCOMPND(e){if(!this._source._molecules)return;const t=this._source._molecules;e.newTag("COMPND",!0);for(let r=0;re instanceof ot));for(let t=0;tt.indexOf(e)===r))}}Pc.formats=["pdb"],Pc.SourceClass=Bt;function Lc(e,t,r,n){r[n]=e[t],r[n+1]=e[t+1],r[n+2]=e[t+2]}function Nc(e,t,r,n,s){r[n]=e[t],r[n+1]=e[t+1],r[n+2]=e[t+2],r[n+3]=s}const Ic=new r.Vector4;function Oc(e,t,r,n,s){Ic.set(e[t],e[t+1],e[t+2],s.w),Ic.applyMatrix4(s.matrix),r[n]=Ic.x,r[n+1]=Ic.y,r[n+2]=Ic.z}function Vc(e,t,r,n,s){if(!((t.array.length-t.start)/t.stridee+r));this.setIndices(n,0,t)}getVerticesNumber(){return this.lastPos/3}addInstance(e,t){const r=this.getVerticesNumber();this.setShiftedIndices(t.indices,t.indices.length,r);const n=t.itemSize;this.setTransformedPositions(t.positions,0,t.vertsCount,n.position,e),this.setTransformedNormals(t.normals,0,t.vertsCount,n.normal,e),this.setColors(t.colors,0,t.vertsCount,n.color)}}class kc{constructor(){this.positions=null,this.normals=null,this.colors=null,this.indices=null,this.vertsCount=0,this.itemSize=null}init(e,t){const{attributes:r}=e;this.itemSize={position:r.position.itemSize,normal:r.normal.itemSize,color:r.color.itemSize}}}class zc extends kc{init(e,t){super.init(e,t);const{attributes:{position:r,normal:n},index:s}=e;this.vertsCount=r.count,this.positions=r.array,this.normals=n.array,this.colors=new Float32Array(this.vertsCount*this.itemSize.color),this.indices=s.array}setColors(e){let t=0;for(let r=0,n=this.colors.length,s=this.itemSize.color;re+s)),this.indices.set(r.array,0),this.indices.set(i,n)}_setColorRange(e,t,r,n){const s=n.length;for(let i=e;i{e instanceof r.Mesh&&e.layers.test(t)&&this.checkExportAbility(e)&&("InstancedBufferGeometry"===e.geometry.type?this._collectInstancedGeoInfo(e):this._collectGeoInfo(e))}))}_reworkIndices(e){for(let t=2;t0&&(u=new Fc,u.init(e.geometry,h));const d=h.addPerCylinder*h.needToSplit,p=t.count,m=i.count;a.init(l*p+d,l*m);const f=new r.Matrix4,_=new r.Matrix4,g=new r.Color,y=new r.Color;let x={};for(let t=0;tt().isEqual(r,e)))}_gatherCylindersColoringInfo(e){const t=e.instanceCount,r=e.attributes.color.array,n=e.attributes.color2.array,s=e.attributes.color.itemSize,i=new Array(t);let o=0,a=0;for(let e=0;e1e-7||Math.abs(r[a+1]-n[a+1])>1e-7||Math.abs(r[a+2]-n[a+2])>1e-7;i[e]=t,o+=t}return{is2Colored:i,needToSplit:o,addPerCylinder:e.getGeoParams().radialSegments}}_collectInstancedGeoInfo(e){e.geometry instanceof mr?this._collectSpheresInfo(e):e.geometry instanceof Ir&&this._collectCylindersInfo(e)}_collectMaterialInfo(e){const{uberOptions:t}=e.material;return{diffuse:t.diffuse.toArray(),opacity:t.opacity,shininess:t.shininess,specular:t.specular.toArray()}}_getCylinderInstanceMatrix(e,t,r){const n=e.attributes.matVector1.array,s=e.attributes.matVector2.array,i=e.attributes.matVector3.array,o=4*t;r.set(n[o],n[o+1],n[o+2],n[o+3],s[o],s[o+1],s[o+2],s[o+3],i[o],i[o+1],i[o+2],i[o+3],0,0,0,1)}_getSphereInstanceMatrix(e,t,r){const{offset:n}=e.attributes,s=t*n.itemSize,i=n.array[s],o=n.array[s+1],a=n.array[s+2],l=n.array[s+3];r.set(l,0,0,i,0,l,0,o,0,0,l,a,0,0,0,1)}}class Uc{constructor(){this._resultArray=[],this._info=null}getResult(e){return this._info=e,this._resultArray.push(this._writeHeader()),this._resultArray.push(this._writeDefinitions()),this._resultArray.push(this._writeObjects(e.models,e.materials)),this._resultArray.push(this._writeRelations()),this._resultArray.push(this._writeConnections()),this._info=null,this._resultArray.join("")}_writeHeader(){const e=new Date,t=`Miew FBX Exporter v${this._info.version}`;return`; FBX 6.1.0 project file\n; Created by ${t} Copyright (c) 2015-2026 EPAM Systems, Inc.\n; For support please contact miew@epam.com\n; ----------------------------------------------------\n\nFBXHeaderExtension: {\n FBXHeaderVersion: 1003\n FBXVersion: 6100\n CreationTimeStamp: {\n Version: 1000\n Year: ${e.getFullYear()}\n Month: ${e.getMonth()+1}\n Day: ${e.getDate()}\n Hour: ${e.getHours()}\n Minute: ${e.getMinutes()}\n Second: ${e.getSeconds()}\n Millisecond: ${e.getMilliseconds()}\n }\n Creator: "${t}"\n OtherFlags: {\n FlagPLE: 0\n }\n}\nCreationTime: "${e}"\nCreator: "${t}"\n`}_writeDefinitions(){return'\n; Object definitions\n;------------------------------------------------------------------\n\n\nDefinitions: {\n Version: 100\n Count: 3\n ObjectType: "Model" {\n Count: 1\n }\n ObjectType: "Geometry" {\n Count: 1\n }\n ObjectType: "Material" {\n Count: 1\n }\n ObjectType: "Pose" {\n Count: 1\n }\n ObjectType: "GlobalSettings" {\n Count: 1\n }\n} \n'}_models(){let e="";const{models:t}=this._info;for(let r=0;r-t.near?"hidden":"visible",a=1e4*(t.far- -this._vector.z)/(t.far-t.near),l=e.getElement();if(void 0===n.fog)l.style.color=i(e.userData.color),"transparent"!==e.userData.background&&(l.style.background=i(e.userData.background));else{const t=r.MathUtils.smoothstep(-this._vector.z,n.fog.near,n.fog.far);l.style.color=s(e.userData.color,n.fog.color,t),"transparent"!==e.userData.background&&(l.style.background=s(e.userData.background,n.fog.color,t))}this._vector.applyMatrix4(this._projectionMatrix);const c=`${e.userData!=={}?e.userData.translation:"translate(-50%, -50%) "}translate(${this._vector.x*this._widthHalf+this._widthHalf}px,${-this._vector.y*this._heightHalf+this._heightHalf}px)`;l.style.visibility=o,l.style.WebkitTransform=c,l.style.MozTransform=c,l.style.oTransform=c,l.style.transform=c,l.style.zIndex=Number(a).toFixed(0),l.parentNode!==this._domElement&&this._domElement.appendChild(l)}for(let r=0,s=e.children.length;r0&&(this._altObj.setObjects(i.objects),this._altObj.pivot=i.pivot,"axis"in i?this._altObj.axis=i.axis.clone():this._altObj.axis.set(0,0,1),e.set(s*t,s*n),this._altObj.translate(e),this.dispatchEvent({type:"change",action:"translate"}))}}this._lastUpdateTime=t}}(),th.prototype.reset=function(){this._state=Yc,this.object.quaternion.copy(Qc.set(0,0,0,1))},th.prototype.mousedown=function(e){if(!1!==this.enabled&&this._state===Yc){if(e.preventDefault(),e.stopPropagation(),this._state===Yc)if(0===e.button){this._affectedObj.stop();let t=!1;if(e.altKey){const e=this.getAltObj();t=e.objects.length>0,t&&(this._altObj.setObjects(e.objects),this._altObj.pivot=e.pivot,"axis"in e?this._altObj.axis=e.axis.clone():this._altObj.axis.set(0,0,1))}this._affectedObj=t?this._altObj:this._mainObj,this._state=t&&e.ctrlKey&&this._isTranslationAllowed?qc:Xc}else 2===e.button&&(this._state=Zc);this._state===Xc&&(this.convertMouseToOnCircle(this._mouseCurPos,e.pageX,e.pageY),this._mousePrevPos.copy(this._mouseCurPos)),this._state!==qc&&this._state!==Zc||(this.convertMouseToViewport(this._mouseCurPos,e.pageX,e.pageY),this._mousePrevPos.copy(this._mouseCurPos))}},th.prototype.mousemove=function(e){if(!1!==this.enabled&&this._state!==Yc)switch(e.preventDefault(),e.stopPropagation(),this._state){case Xc:this._mousePrevPos.copy(this._mouseCurPos),this.convertMouseToOnCircle(this._mouseCurPos,e.pageX,e.pageY),this.rotateByMouse(e.altKey&&!this._isAltObjFreeRotationAllowed||e.shiftKey),this._lastMouseMoveTime=this._clock.getElapsedTime();break;case qc:this._mousePrevPos.copy(this._mouseCurPos),this.convertMouseToViewport(this._mouseCurPos,e.pageX,e.pageY),this.translate();break;case Zc:this._mousePrevPos.copy(this._mouseCurPos),this.convertMouseToViewport(this._mouseCurPos,e.pageX,e.pageY),this.translatePivotByMouse()}},th.prototype.mousewheel=function(e){if(!1===this.enabled||!z.now.zooming||this._state!==Yc||e.shiftKey)return;e.preventDefault();let t=0;e.wheelDelta?t=e.wheelDelta/40:e.detail&&(t=-e.detail/3);let r=1+.05*t;r=Math.max(r,.01),this.scale(r)},th.prototype.mouseup=function(e){!1!==this.enabled&&this._state!==Yc&&(e.preventDefault(),e.stopPropagation(),this._state=Yc,this._clock.getElapsedTime()-this._lastMouseMoveTime>.1&&this._affectedObj.stop())},th.prototype.touchstartend=function(e){if(!1!==this.enabled)switch(e.preventDefault(),e.stopPropagation(),e.touches.length){case 1:this._state=Xc,this.convertMouseToOnCircle(this._mouseCurPos,e.touches[0].pageX,e.touches[0].pageY),this._mousePrevPos.copy(this._mouseCurPos);break;case 2:{this._mainObj.stop(),this._altObj.stop(),this._state=Kc;const t=e.touches[0].pageX-e.touches[1].pageX,r=e.touches[0].pageY-e.touches[1].pageY;this._touchDistanceCur=this._touchDistanceStart=Math.sqrt(t*t+r*r),this._scaleStart=this.object.scale.x;break}default:this._state=Yc}},th.prototype.touchmove=function(e){if(!1!==this.enabled&&this._state!==Yc)switch(e.preventDefault(),e.stopPropagation(),this._state){case Xc:this._mousePrevPos.copy(this._mouseCurPos),this.convertMouseToOnCircle(this._mouseCurPos,e.touches[0].pageX,e.touches[0].pageY),this.rotateByMouse(!1),this._lastMouseMoveTime=this._clock.getElapsedTime();break;case Kc:if(z.now.zooming){const t=e.touches[0].pageX-e.touches[1].pageX,r=e.touches[0].pageY-e.touches[1].pageY;this._touchDistanceCur=Math.sqrt(t*t+r*r);const n=this._scaleStart*this._touchDistanceCur/this._touchDistanceStart/this.object.scale.x;this.scale(n)}}},th.prototype.keydownup=function(e){if(!1!==this.enabled&&!1!==this.hotkeysEnabled)switch(e.keyCode){case 37:case 38:case 39:case 40:this._pressedKeys[e.keyCode]="keydown"===e.type,e.preventDefault(),e.stopPropagation()}},th.prototype.getKeyBindObject=function(){return Wc()},th.prototype.dispose=function(){for(let e=0;e{t.pickObject(s)}),0),this._lastClickPos=s,this._lastClickBeginTime=this._clickBeginTime}},nh.prototype.touchstart=function(e){e.preventDefault(),e.stopPropagation(),1===e.touches.length&&(this._lastTouchdownPos=this.getMouseInViewport(e.touches[0].pageX,e.touches[0].pageY))},nh.prototype.touchend=function(e){const t=this;if(e.preventDefault(),e.stopPropagation(),0===e.touches.length&&1===e.changedTouches.length){this.getMouseInViewport(e.changedTouches[0].pageX,e.changedTouches[0].pageY).sub(this._lastTouchdownPos).length()<.01&&setTimeout((()=>{t.pickObject(t._lastTouchdownPos)}),0)}},nh.prototype.dispose=function(){for(let e=0;e=524288?e-1048576:e}class hh{constructor(e,t,r){this._complex=e,this._secondary=null,this.isLoading=!1,this._framesRange={start:0,end:-1},this.frameIsReady=!1,this._buffer=null,this._frameRequest=null,this._callbacks=r,"function"==typeof t?(this._framesRequestLength=1,this._downloadDataFn=t):this.parseBinaryData(t,!0),this.reset(),this.setFrame(0)}_prepareBuffer(e,t){if(null==e&&(e=0),null==t&&(t=e+this._framesRequestLength),void 0!==this._framesCount&&(t=Math.min(this._framesCount-1,t)),this._downloadDataFn){const r=this,n=function(n){if(r.isLoading=!1,r._callbacks&&"function"==typeof r._callbacks.onLoadStatusChanged&&r._callbacks.onLoadStatusChanged(),r._buffer={data:n,state:"ready",start:e,end:t},null!==r._frameRequest){const e=r._frameRequest;r._frameRequest=null,r.setFrame(e)}},s=function(){r.isLoading=!1,r._callbacks&&"function"==typeof r._callbacks.onError&&r._callbacks.onError("Streaming failed")};this._buffer||(this._buffer={}),this._buffer.state="downloading",this.isLoading=!0,r._callbacks&&"function"==typeof r._callbacks.onLoadStatusChanged&&r._callbacks.onLoadStatusChanged(),this._downloadDataFn({start:e,end:t+1},n,s)}}_parseBuffer(){if(this._buffer&&"ready"===this._buffer.state){this._framesRange={start:this._buffer.start,end:this._buffer.end},this.parseBinaryData(this._buffer.data,!1);let e=(this._buffer.end+1)%this._framesCount;if(e>=this._framesCount&&(e=0),this._buffer={state:"none"},this._prepareBuffer(e,e+this._framesRequestLength),null!==this._frameRequest){const e=this._frameRequest;this._frameRequest=null,this.setFrame(e)}}}parseBinaryData(e){const t=new DataView(e);let r=0;const n=t.getUint32(r,!0);r+=4;const s=t.getUint32(r,!0);this._framesCount=s,this._framesRange.end=this._framesRange.end>0?Math.min(this._framesRange.end,s-1):s-1,r+=4,this._atomsCount=n;this._framesRequestLength=Math.ceil(1048576/(8*n));const i=this._framesRange.end-this._framesRange.start+1;if(n!==this._complex._atoms.length||e.byteLength!==12+i*n*8)throw new Error;const o=this._complex;let a=t.getUint32(r,!0),l=0;for(;a>1e3&&l>>28,o=ch((268435200&s)>>>8|0),a=ch((255&s)<<12|(4293918720&n)>>>20),l=ch(1048575&n);d[e]=0,i>0&&i<4?d[e]=1:4===i&&(d[e]=2),h[u++]=o/100,h[u++]=a/100,h[u++]=l/100}c.push(lh(d,o))}this._secondaryData=c,this._data=h}nextFrame(){this.setFrame((this._currFrame+1)%this._framesCount)}needsColorUpdate(e){return e instanceof go}getAtomColor(e,t){return e.getResidueColor(this._residues[t.residue._index],this._complex)}getResidueColor(e,t){return e.getResidueColor(this._residues[t._index],this._complex)}_updateSecondary(){let e;const t=this._residues;let r=t.length;for(e=0;e=this._framesRange.start&&e<=this._framesRange.end)this._currFrame=e,this._cachedResidues=!1,this._updateSecondary(),this.frameIsReady=!0;else if(this._frameRequest=e,this._buffer){const t=this;switch(this._buffer.state){case"none":this._prepareBuffer(e);break;case"ready":t._parseBuffer()}}else this._prepareBuffer(e)}disableEvents(){this._callbacks=null}static _vec=new r.Vector3;getAtomPos(e){const t=hh._vec,r=this,n=r._data,s=3*(r._atomsCount*(r._currFrame-r._framesRange.start)+e);return t.set(n[s],n[s+1],n[s+2]),t}getResidues(){return this._cachedResidues||this._complex.updateToFrame(this),this._residues}}const uh=hh;class dh{constructor(e,r){if(this.constructor===dh)throw new Error("Can not instantiate abstract class!");this.params=e,this.opts=t().merge(O.deriveDeep(z.now.objects[this.type],!0),r),this.needsRebuild=!1,this._mesh=null,this.id=null}identify(){const e={type:this.type,params:this.params},r=O.objectsDiff(this.opts,z.now.modes[this.id]);return t().isEmpty(r)||(e.opts=r),e}toString(){return`o=${this.type},${this.params.join(",")}`+O.compareOptionsWithDefaults(this.opts,z.defaults.objects[this.type])}getGeometry(){return this._mesh}destroy(){this._mesh&&tr.destroyObject(this._mesh)}}dh.prototype.type="__";const ph=dh;class mh extends ph{constructor(e,t){if(super(e,t),e.length<2)throw new Error("Wrong number of argumets on line object creation!");[this._id1,this._id2]=e}_getAtomFromName(e,t){const r=e.getAtomByFullname(t);if(!r)throw new Error(t+" - Wrong atom format it must be '#CHAIN_NAME.#RESIDUE_NUMBER.#ATOM_NAME' (e.g. 'A.38.CO1')");return r}build(e){const t=new r.BufferGeometry;this._atom1=this._getAtomFromName(e,this._id1),this._atom2=this._getAtomFromName(e,this._id2);const n=this._atom1.position,s=this._atom2.position,i=new Float32Array([n.x,n.y,n.z,s.x,s.y,s.z]);t.setAttribute("position",new r.BufferAttribute(i,3)),t.computeBoundingBox(),this._line=new ds.Line(t,new Kn({lights:!1,overrideColor:!0,dashedLine:!0,fogTransparent:z.now.bg.transparent})),this._line.computeLineDistances(),this._line.material.setUberOptions({fixedColor:new r.Color(this.opts.color),dashedLineSize:this.opts.dashSize,dashedLinePeriod:this.opts.dashSize+this.opts.gapSize}),this._line.material.updateUniforms(),this._line.raycast=function(e,t){},this._mesh=this._line;const o=e.getTransforms();o.length>0&&(this._mesh=new r.Group,this._mesh.add(this._line),Bo.applyTransformsToMeshes(this._mesh,o))}updateToFrame(e){if(!this._atom1||!this._atom2||!this._line)return;const t=this._line.geometry;t.vertices[0].copy(e.getAtomPos(this._atom1.index)),t.vertices[1].copy(e.getAtomPos(this._atom2.index)),this._line.computeLineDistances(),t.computeBoundingSphere(),t.verticesNeedUpdate=!0}}mh.prototype.constructor=mh,mh.prototype.type="line";const fh=mh;class _h extends r.RawShaderMaterial{constructor(e){super(e);const t={uniforms:{srcTex:{type:"t",value:null},srcDepthTex:{type:"t",value:null},srcTexSize:{type:"v2",value:new r.Vector2(512,512)},color:{type:"v3",value:null},threshold:{type:"f",value:null},opacity:{type:"f",value:1},thickness:{type:"v2",value:new r.Vector2(1,1)}},vertexShader:qt,fragmentShader:"/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\nuniform sampler2D srcTex;\r\nuniform vec2 srcTexSize;\r\nuniform vec2 thickness;\r\nvarying vec2 vUv;\r\n\r\n#ifdef DEPTH_OUTLINE\r\n uniform sampler2D srcDepthTex; //depthTexture\r\n uniform vec3 color;\r\n uniform float threshold;\r\n#endif\r\n\r\nvoid main() {\r\n\r\n vec2 pixelSize = thickness / srcTexSize;\r\n\r\n #ifdef DEPTH_OUTLINE\r\n float c00 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,-pixelSize.y)).x;\r\n float c01 = texture2D(srcDepthTex, vUv + vec2(0,-pixelSize.y)).x;\r\n float c02 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,-pixelSize.y)).x;\r\n float c10 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,0)).x;\r\n float c12 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,0)).x;\r\n float c20 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,pixelSize.y)).x;\r\n float c21 = texture2D(srcDepthTex, vUv + vec2(0,pixelSize.y)).x;\r\n float c22 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,pixelSize.y)).x;\r\n\r\n float horizEdge = - c00 - 2.0 * c01 - c02 + c20 + 2.0 * c21 + c22;\r\n float vertEdge = - c00 - 2.0 * c10 - c20 + c02 + 2.0 * c12 + c22;\r\n\r\n float grad = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\r\n\r\n gl_FragColor = ( grad > threshold ) ? vec4(color.rgb, 1.0) : gl_FragColor = texture2D(srcTex, vUv);\r\n\r\n #else\r\n vec4 c00 = texture2D(srcTex, vUv + vec2(-pixelSize.x,-pixelSize.y));\r\n vec4 c01 = texture2D(srcTex, vUv + vec2(0,-pixelSize.y));\r\n vec4 c02 = texture2D(srcTex, vUv + vec2(pixelSize.x,-pixelSize.y));\r\n vec4 c10 = texture2D(srcTex, vUv + vec2(-pixelSize.x,0));\r\n vec4 c12 = texture2D(srcTex, vUv + vec2(pixelSize.x,0));\r\n vec4 c20 = texture2D(srcTex, vUv + vec2(-pixelSize.x,pixelSize.y));\r\n vec4 c21 = texture2D(srcTex, vUv + vec2(0,pixelSize.y));\r\n vec4 c22 = texture2D(srcTex, vUv + vec2(pixelSize.x,pixelSize.y));\r\n\r\n vec4 horizEdge = - c00 - 2.0 * c01 - c02 + c20 + 2.0 * c21 + c22;\r\n vec4 vertEdge = - c00 - 2.0 * c10 - c20 + c02 + 2.0 * c12 + c22;\r\n\r\n vec4 grad = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\r\n gl_FragColor = grad;\r\n #endif\r\n}\r\n",transparent:!0,depthTest:!1,depthWrite:!1};this.setValues(t)}copy(e){super.copy(e),this.depth=e.depth}setValues(e){if(void 0===e)return;super.setValues(e);const t={};this.depth&&(t.DEPTH_OUTLINE=1),this.defines=t}}_h.prototype.depth=!1;const gh=_h;class yh extends r.RawShaderMaterial{constructor(e){super(e),this.setValues.call(this,{uniforms:{srcTex:{type:"t",value:null},srcTexelSize:{type:"v2",value:new r.Vector2(1/512,1/512)},bgColor:{type:"c",value:new r.Color(16777215)}},vertexShader:qt,fragmentShader:"/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\n// edge end finding algorithm parameters\r\n#define FXAA_QUALITY_PS 8\r\n#define FXAA_QUALITY_P0 1.0\r\n#define FXAA_QUALITY_P1 1.5\r\n#define FXAA_QUALITY_P2 2.0\r\n#define FXAA_QUALITY_P3 2.0\r\n#define FXAA_QUALITY_P4 2.0\r\n#define FXAA_QUALITY_P5 2.0\r\n#define FXAA_QUALITY_P6 4.0\r\n#define FXAA_QUALITY_P7 12.0\r\n// constants\r\nfloat fxaaQualityEdgeThreshold = 0.125;\r\nfloat fxaaQualityEdgeThresholdMin = 0.0625;\r\nfloat fxaaQualitySubpix = 0.7; //0.65;\r\n// global params\r\nuniform sampler2D srcTex;\r\nuniform vec2 srcTexelSize;\r\nuniform vec3 bgColor;\r\n// from vs\r\nvarying vec2 vUv;\r\n//=====================================================================//\r\n// calc luminance from rgb\r\n//'float FxaaLuma(vec3 rgb) {return rgb.y * (0.587/0.299) + rgb.x; } // Lotte's idea about game luminance\r\nfloat FxaaLuma(vec3 rgb) {return dot(rgb, vec3(0.299, 0.587, 0.114)); } // real luminance calculation\r\n // for non-real scene rendering\r\n// texture sampling by pixel position(coords) and offset(in pixels)\r\n vec3 FxaaTex(sampler2D tex, vec2 pos, vec2 off, vec2 res ) {\r\n #ifdef BG_TRANSPARENT\r\n vec4 color = texture2D( tex, pos + off * res );\r\n return mix(color.rgb, bgColor, 1.0 - color.a);\r\n #else\r\n return texture2D( tex, pos + off * res ).xyz;\r\n #endif\r\n}\r\nvec3 FxaaTexTop(sampler2D tex, vec2 pos) {\r\n #ifdef BG_TRANSPARENT\r\n vec4 color = texture2D( tex, pos );\r\n return mix(color.rgb, bgColor, 1.0 - color.a);\r\n #else\r\n return texture2D( tex, pos).xyz;\r\n #endif\r\n}\r\nvec4 FxaaTexTopAlpha(sampler2D tex, vec2 pos) {\r\n return texture2D( tex, pos);\r\n}\r\n\r\n//=====================================================================//\r\nvoid main() {\r\n // renaming\r\n vec2 posM = vUv;\r\n // get luminance for neighbours\r\n float lumaS = FxaaLuma(FxaaTex(srcTex, posM, vec2( 0.0, 1.0 ), srcTexelSize));\r\n float lumaE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, 0.0 ), srcTexelSize));\r\n float lumaN = FxaaLuma(FxaaTex(srcTex, posM, vec2( 0.0, -1.0 ), srcTexelSize));\r\n float lumaW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, 0.0 ), srcTexelSize));\r\n float lumaM = FxaaLuma(FxaaTexTop(srcTex, posM));\r\n // find max and min luminance\r\n float rangeMax = max(max(lumaN, lumaW), max(lumaE, max(lumaS, lumaM)));\r\n float rangeMin = min(min(lumaN, lumaW), min(lumaE, min(lumaS, lumaM)));\r\n // calc maximum non-edge range\r\n float rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\r\n float range = rangeMax - rangeMin;\r\n float rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\r\n // exit when luma contrast is small (is not edge)\r\n if(range < rangeMaxClamped){\r\n gl_FragColor = FxaaTexTopAlpha(srcTex, posM);\r\n return;\r\n }\r\n float subpixRcpRange = 1.0/range;\r\n // note: the sampling coordinates can be calculated in vertex shader but the approach doesn't affect performance\r\n // visibly, thus we decided to leave calculation here for better readability.\r\n // calc other neighbours luminance\r\n float lumaNE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, -1.0 ), srcTexelSize));\r\n float lumaSW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, 1.0 ), srcTexelSize));\r\n float lumaSE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, 1.0 ), srcTexelSize));\r\n float lumaNW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, -1.0 ), srcTexelSize));\r\n/*--------------span calculation and subpix amount calulation-----------------*/\r\n float lumaNS = lumaN + lumaS;\r\n float lumaWE = lumaW + lumaE;\r\n float subpixNSWE = lumaNS + lumaWE;\r\n float edgeHorz1 = (-2.0 * lumaM) + lumaNS;\r\n float edgeVert1 = (-2.0 * lumaM) + lumaWE;\r\n/*--------------------------------------------------------------------------*/\r\n float lumaNESE = lumaNE + lumaSE;\r\n float lumaNWNE = lumaNW + lumaNE;\r\n float edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\r\n float edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\r\n/*--------------------------------------------------------------------------*/\r\n float lumaNWSW = lumaNW + lumaSW;\r\n float lumaSWSE = lumaSW + lumaSE;\r\n float edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\r\n float edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\r\n float edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\r\n float edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\r\n float edgeHorz = abs(edgeHorz3) + edgeHorz4;\r\n float edgeVert = abs(edgeVert3) + edgeVert4;\r\n/*--------------------subpix amount calulation------------------------------*/\r\n float subpixNWSWNESE = lumaNWSW + lumaNESE;\r\n float lengthSign = srcTexelSize.x;\r\n bool horzSpan = edgeHorz >= edgeVert;\r\n // debug code edge span visualization\r\n/*' if (horzSpan)\r\n gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);\r\n else\r\n gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\r\n return;*/\r\n float subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\r\n/*--------------------------------------------------------------------------*/\r\n if(!horzSpan) lumaN = lumaW;\r\n if(!horzSpan) lumaS = lumaE;\r\n if(horzSpan) lengthSign = srcTexelSize.y;\r\n float subpixB = (subpixA * (1.0/12.0)) - lumaM;\r\n/*--------------------------------------------------------------------------*/\r\n float gradientN = lumaN - lumaM;\r\n float gradientS = lumaS - lumaM;\r\n float lumaNN = lumaN + lumaM;\r\n float lumaSS = lumaS + lumaM;\r\n bool pairN = abs(gradientN) >= abs(gradientS);\r\n float gradient = max(abs(gradientN), abs(gradientS));\r\n if(pairN) lengthSign = -lengthSign;\r\n float subpixC = clamp(abs(subpixB) * subpixRcpRange, 0.0, 1.0);\r\n/*--------------------------------------------------------------------------*/\r\n vec2 posB;\r\n posB = posM;\r\n vec2 offNP;\r\n offNP.x = (!horzSpan) ? 0.0 : srcTexelSize.x;\r\n offNP.y = ( horzSpan) ? 0.0 : srcTexelSize.y;\r\n if(!horzSpan) posB.x += lengthSign * 0.5;\r\n if( horzSpan) posB.y += lengthSign * 0.5;\r\n/*--------------------------------------------------------------------------*/\r\n vec2 posN;\r\n posN = posB - offNP * FXAA_QUALITY_P0;\r\n vec2 posP;\r\n posP = posB + offNP * FXAA_QUALITY_P0;\r\n float subpixD = ((-2.0)*subpixC) + 3.0;\r\n float lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN));\r\n float subpixE = subpixC * subpixC;\r\n float lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP));\r\n/*--------------------------------------------------------------------------*/\r\n if(!pairN) lumaNN = lumaSS;\r\n float gradientScaled = gradient * 1.0/4.0;\r\n float lumaMM = lumaM - lumaNN * 0.5;\r\n float subpixF = subpixD * subpixE;\r\n bool lumaMLTZero = lumaMM < 0.0;\r\n/*---------------------looped edge-end search-------------------------------*/\r\n lumaEndN -= lumaNN * 0.5;\r\n lumaEndP -= lumaNN * 0.5;\r\n bool doneN = abs(lumaEndN) >= gradientScaled;\r\n bool doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P1;\r\n bool doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P1;\r\n/*--------------------------------------------------------------------------*/\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P2;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P2;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 3)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P3;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P3;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 4)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P4;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P4;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 5)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P5;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P5;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 6)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P6;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P6;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 7)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P7;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P7;\r\n/*--------------------------------------------------------------------------*/\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n/*----------------calculate subpix offset due to edge ends-------------------*/\r\n float dstN = posM.x - posN.x;\r\n float dstP = posP.x - posM.x;\r\n if(!horzSpan) dstN = posM.y - posN.y;\r\n if(!horzSpan) dstP = posP.y - posM.y;\r\n/*--------------------------------------------------------------------------*/\r\n bool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\r\n float spanLength = (dstP + dstN);\r\n bool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\r\n float spanLengthRcp = 1.0 / spanLength;\r\n/*--------------------------------------------------------------------------*/\r\n bool directionN = dstN < dstP;\r\n float dst = min(dstN, dstP);\r\n bool goodSpan = directionN ? goodSpanN : goodSpanP;\r\n float subpixG = subpixF * subpixF;\r\n float pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\r\n float subpixH = subpixG * fxaaQualitySubpix;\r\n/*-----------------calc texture offest using subpix-------------------------*/\r\n float pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\r\n float pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\r\n\r\n float offset = pixelOffsetSubpix * lengthSign;\r\n #ifdef BG_TRANSPARENT\r\n // get original texel\r\n vec4 rgbaA = FxaaTexTopAlpha(srcTex, posM);\r\n // calc step to blended texel\r\n vec2 step = sign((!horzSpan) ? vec2 (offset, 0.0) : vec2 (0.0, offset));\r\n // get neighboring texel\r\n vec4 rgbaB = FxaaTexTopAlpha(srcTex, posM + step * srcTexelSize);\r\n // calc blend factor from offset\r\n float f = (!horzSpan) ? offset / srcTexelSize.x : offset / srcTexelSize.y;\r\n f = abs(f);\r\n // calc alpha (special formula to emulate blending with bg)\r\n gl_FragColor.a = 1.0 - mix(1.0 - rgbaA.a, 1.0 - rgbaB.a, f);\r\n // calc color (special formula to emulate blending with bg)\r\n gl_FragColor.rgb = mix(rgbaA.rgb * rgbaA.a, rgbaB.rgb * rgbaB.a, f) / gl_FragColor.a;\r\n #else\r\n if(!horzSpan) {\r\n posM.x += offset;\r\n } else {\r\n posM.y += offset;\r\n }\r\n gl_FragColor = FxaaTexTopAlpha(srcTex, posM);\r\n #endif\r\n return;\r\n}\r\n",transparent:!1,depthTest:!1,depthWrite:!1}),this.setValues(e)}copy(e){super.copy(e),this.depth=e.depth}setValues(e){if(void 0===e)return;super.setValues(e);const t={};this.bgTransparent&&(t.BG_TRANSPARENT=1),this.defines=t}}yh.prototype.bgTransparent=!1;const xh=yh,bh=[new r.Vector3(.295184,.077723,.068429),new r.Vector3(-.271976,-.365221,.838363),new r.Vector3(.547713,.467576,.488515),new r.Vector3(.662808,-.031733,.584758),new r.Vector3(-.025717,.218955,.657094),new r.Vector3(-.310153,-.365223,.370701),new r.Vector3(-.101407,-.006313,.747665),new r.Vector3(-.769138,.360399,.086847),new r.Vector3(-.271988,-.27514,.905353),new r.Vector3(.09674,-.566901,.700151),new r.Vector3(.562872,-.735136,.094647),new r.Vector3(.379877,.359278,.190061),new r.Vector3(.519064,-.023055,.405068),new r.Vector3(-.301036,.114696,.088885),new r.Vector3(-.282922,.598305,.487214),new r.Vector3(-.181859,.25167,.679702),new r.Vector3(-.191463,-.635818,.512919),new r.Vector3(-.293655,.427423,.078921),new r.Vector3(-.267983,.680534,.13288),new r.Vector3(.139611,.319637,.477439),new r.Vector3(-.352086,.31104,.653913),new r.Vector3(.321032,.805279,.487345),new r.Vector3(.073516,.820734,.414183),new r.Vector3(-.155324,.589983,.41146),new r.Vector3(.335976,.170782,.527627),new r.Vector3(.46346,-.355658,.167689),new r.Vector3(.222654,.59655,.769406),new r.Vector3(.922138,-.04207,.147555),new r.Vector3(-.72705,-.329192,.369826),new r.Vector3(-.090731,.53382,.463767),new r.Vector3(-.323457,-.876559,.238524),new r.Vector3(-.663277,-.372384,.342856)];class wh extends r.RawShaderMaterial{constructor(){super(),this.setValues.call(this,{uniforms:{noiseTexture:{type:"t",value:Hn.noiseTexture},noiseTexelSize:{type:"v2",value:new r.Vector2(1/Hn.noiseWidth,1/Hn.noiseHeight)},diffuseTexture:{type:"t",value:null},normalTexture:{type:"t",value:null},depthTexture:{type:"t",value:null},srcTexelSize:{type:"v2",value:new r.Vector2(1/512,1/512)},camNearFar:{type:"v2",value:new r.Vector2(1,10)},projMatrix:{type:"mat4",value:new r.Matrix4},aspectRatio:{type:"f",value:0},tanHalfFOV:{type:"f",value:0},samplesKernel:{type:"v3v",value:bh},kernelRadius:{type:"f",value:1},depthThreshold:{type:"f",value:1},factor:{type:"f",value:1}},vertexShader:qt,fragmentShader:"/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 32\r\nuniform vec3 samplesKernel[MAX_SAMPLES_COUNT];\r\nuniform sampler2D noiseTexture;\r\nuniform vec2 noiseTexelSize;\r\nuniform sampler2D diffuseTexture;\r\nuniform sampler2D depthTexture;\r\nuniform sampler2D normalTexture;\r\nuniform vec2 srcTexelSize;\r\nuniform vec2 camNearFar;\r\nuniform mat4 projMatrix;\r\n\r\nuniform float aspectRatio;\r\nuniform float tanHalfFOV;\r\n\r\nuniform float kernelRadius;\r\nuniform float depthThreshold;\r\nuniform float factor;\r\n\r\nvarying vec2 vUv;\r\n\r\nfloat CalcViewZ(vec2 screenPos)\r\n{\r\n float depth = texture2D(depthTexture, screenPos).x;\r\n // [0, 1]->[-1, 1]\r\n float clipedZ = 2.0 * depth - 1.0;\r\n // see THREE.js camera.makeFrustum for projection details\r\n return (-projMatrix[3][2] / (clipedZ + projMatrix[2][2]));\r\n}\r\n\r\nvec3 ViewPosFromDepth(vec2 screenPos)\r\n{\r\n vec3 viewPos;\r\n viewPos.z = CalcViewZ(screenPos);\r\n //[0, 1]->[-1, 1]\r\n vec2 projPos = 2.0 * screenPos - 1.0;\r\n // reconstruct viewposition in right-handed sc with z to viewer\r\n viewPos.xy = vec2(\r\n projPos.x * aspectRatio * tanHalfFOV * abs(viewPos.z),\r\n projPos.y * tanHalfFOV * abs(viewPos.z)\r\n );\r\n return viewPos;\r\n}\r\n\r\nvoid main() {\r\n vec3 viewPos = ViewPosFromDepth(vUv);\r\n // remap coordinates to prevent noise exture rescale\r\n vec2 vUvNoise = vUv / srcTexelSize * noiseTexelSize;\r\n vec4 normalData = texture2D(normalTexture, vUv);\r\n // return for background fragments (their normals are zero vectors)\r\n if (length(normalData.rgb) < EPSILON) {\r\n // 0.0 in alpha component means that it is background fragment\r\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\r\n return;\r\n }\r\n //[0, 1] -> [-1, 1]\r\n vec3 normal = (normalData.rgb * 2.0 - 1.0);\r\n // normalData.a store 1.0 if normal was build for frontfaced surface\r\n // and 0.0 in other case\r\n if (normalData.a < EPSILON) {\r\n normal *= -1.0;\r\n }\r\n // get random vector for sampling sphere rotation\r\n vec3 randN = texture2D(noiseTexture, vUvNoise).rgb * 2.0 - 1.0;\r\n randN = normalize(randN);\r\n // build TBN (randomly rotated around normal)\r\n vec3 tangent = normalize(randN - normal * dot(randN, normal));\r\n vec3 bitangent = cross(tangent, normal);\r\n mat3 TBN = mat3(tangent, bitangent, normal);\r\n // calc AO value\r\n float AO = 0.0;\r\n for (int i = 0 ; i < MAX_SAMPLES_COUNT ; i++) {\r\n // rotate sampling kernel around normal\r\n vec3 reflectedSample = TBN * samplesKernel[i];\r\n // get sample\r\n vec3 samplePos = viewPos + reflectedSample * kernelRadius;\r\n\r\n // project sample to screen to get sample's screen pos\r\n vec4 SampleScrPos = vec4(samplePos, 1.0);\r\n // eye -> clip\r\n SampleScrPos = projMatrix * SampleScrPos;\r\n // normalize\r\n SampleScrPos.xy /= SampleScrPos.w;\r\n //[-1, 1] -> [0, 1]\r\n SampleScrPos.xy = (SampleScrPos.xy + vec2(1.0)) * 0.5;\r\n\r\n // get view z for sample projected to the objct surface\r\n float sampleDepth = CalcViewZ(SampleScrPos.xy);\r\n // calc occlusion made by object surface at the sample\r\n AO += step(samplePos.z, sampleDepth);\r\n }\r\n // calc result AO-map color\r\n AO = 1.0 - max(0.0, AO / float(MAX_SAMPLES_COUNT) * factor);\r\n // write value to AO-map\r\n gl_FragColor = vec4(AO, AO, AO, 1.0);\r\n}\r\n",transparent:!1,depthTest:!1,depthWrite:!1})}}const Sh=wh,vh=[-2,-1,0,1,2];class Ch extends r.RawShaderMaterial{constructor(){super(),this.setValues.call(this,{uniforms:{depthTexture:{type:"t",value:null},srcTexelSize:{type:"v2",value:new r.Vector2(1/512,1/512)},aoMap:{type:"t",value:null},samplesOffsets:{type:"fv1",value:vh}},vertexShader:qt,fragmentShader:"/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 5\r\nuniform float samplesOffsets[MAX_SAMPLES_COUNT];\r\nuniform sampler2D aoMap;\r\nuniform sampler2D depthTexture;\r\nuniform vec2 srcTexelSize;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n float x = vUv.x;\r\n float y = vUv.y;\r\n vec4 res = vec4(0.0);\r\n res.a = texture2D(aoMap, vec2(x, y )).a;\r\n // return for background fragments (0.0 in alpha component means that it is background fragment)\r\n if (res.a < EPSILON) {\r\n gl_FragColor = res;\r\n return;\r\n }\r\n\r\n float pixelDepth = texture2D(depthTexture, vec2(x, y)).x;\r\n float weightSum = 0.0;\r\n for (int i = 0; i < MAX_SAMPLES_COUNT; ++i) {\r\n if (texture2D(aoMap, vec2(x + samplesOffsets[i] * srcTexelSize.x, y )).a < EPSILON) {\r\n continue;\r\n }\r\n vec2 samplePos = vec2(x + samplesOffsets[i] * srcTexelSize.x, y);\r\n float depth = texture2D(depthTexture, samplePos).x;\r\n float weight = (1.0 / (0.0001 + abs(depth - pixelDepth)));\r\n res.rgb += texture2D(aoMap, vec2(x + samplesOffsets[i] * srcTexelSize.x, y )).rgb * weight;\r\n weightSum += weight;\r\n }\r\n res.rgb = res.rgb / weightSum;\r\n gl_FragColor = res;\r\n}\r\n",transparent:!1,depthTest:!1,depthWrite:!1})}}const Ah=Ch,Eh=[-2,-1,0,1,2];class Th extends r.RawShaderMaterial{constructor(e){super(e),this.setValues.call(this,{uniforms:{diffuseTexture:{type:"t",value:null},depthTexture:{type:"t",value:null},srcTexelSize:{type:"v2",value:new r.Vector2(1/512,1/512)},aoMap:{type:"t",value:null},samplesOffsets:{type:"fv1",value:Eh},projMatrix:{type:"mat4",value:new r.Matrix4},aspectRatio:{type:"f",value:0},tanHalfFOV:{type:"f",value:0},fogNearFar:{type:"v2",value:new r.Vector2(100,100)},fogColor:{type:"v4",value:new r.Vector4(0,.5,0,1)}},vertexShader:qt,fragmentShader:"/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 5\r\nuniform float samplesOffsets[MAX_SAMPLES_COUNT];\r\nuniform sampler2D diffuseTexture;\r\nuniform sampler2D aoMap;\r\nuniform sampler2D depthTexture;\r\nuniform vec2 srcTexelSize;\r\n\r\nuniform mat4 projMatrix;\r\nuniform float aspectRatio;\r\nuniform float tanHalfFOV;\r\n\r\n#ifdef USE_FOG\r\n uniform vec2 fogNearFar;\r\n uniform vec4 fogColor;\r\n#endif\r\nvarying vec2 vUv;\r\n\r\nfloat CalcViewZ(vec2 screenPos)\r\n{\r\n float depth = texture2D(depthTexture, screenPos).x;\r\n // [0, 1]->[-1, 1]\r\n float clipedZ = 2.0 * depth - 1.0;\r\n // see THREE.js camera.makeFrustum for projection details\r\n return (-projMatrix[3][2] / (clipedZ + projMatrix[2][2]));\r\n}\r\n\r\nvec3 ViewPosFromDepth(vec2 screenPos)\r\n{\r\n vec3 viewPos;\r\n viewPos.z = CalcViewZ(screenPos);\r\n //[0, 1]->[-1, 1]\r\n vec2 projPos = 2.0 * screenPos - 1.0;\r\n // reconstruct viewposition in right-handed sc with z to viewer\r\n viewPos.xy = vec2(\r\n projPos.x * aspectRatio * tanHalfFOV * abs(viewPos.z),\r\n projPos.y * tanHalfFOV * abs(viewPos.z)\r\n );\r\n return viewPos;\r\n}\r\n\r\nvoid main() {\r\n vec3 viewPos = ViewPosFromDepth(vUv);\r\n float x = vUv.x;\r\n float y = vUv.y;\r\n vec4 color = texture2D(diffuseTexture, vec2(x, y));\r\n vec4 res = vec4(0.0);\r\n res.a = texture2D(aoMap, vec2(x, y )).a;\r\n // return for background fragments (0.0 in alpha component means that it is background fragment)\r\n if (res.a < EPSILON) {\r\n gl_FragColor = color;\r\n return;\r\n }\r\n\r\n float pixelDepth = texture2D(depthTexture, vec2(x, y)).x;\r\n float weightSum = 0.0;\r\n for (int i = 0; i < MAX_SAMPLES_COUNT; ++i) {\r\n if (texture2D(aoMap, vec2(x, y + samplesOffsets[i] * srcTexelSize.y)).a < EPSILON) {\r\n continue;\r\n }\r\n vec2 samplePos = vec2(x, y + samplesOffsets[i] * srcTexelSize.y);\r\n float depth = texture2D(depthTexture, samplePos).x;\r\n float weight = (1.0 / (0.0001 + abs(depth - pixelDepth)));\r\n res.rgb += texture2D(aoMap, vec2(x, y + samplesOffsets[i] * srcTexelSize.y)).rgb * weight;\r\n weightSum += weight;\r\n }\r\n res.rgb /= weightSum;\r\n\r\n #if defined(USE_FOG) && !defined(FOG_TRANSPARENT)\r\n // Add fog to the result value\r\n // Proper way to get an image with fog and ao requires formula:\r\n // gl_FragColor = fragColor*AO*(1-fogFactor) + fogColor*fogFactor\r\n // But we have already fogged molecule to add AO too. Let's split the straight formula into our real steps!\r\n // We have: AO, fogFactor, fogColor,\r\n // color = fragColor*(1-fogFactor) + fogColor*fogFactor (it comes from diffuseTexture,\r\n // where molecule has been already drawn with fog)\r\n // Transform:\r\n // fragColor*AO*(1-fogFactor) + fogColor*fogFactor =\r\n // = [fragColor*(1-fogFactor) = color - fogColor*fogFactor] =\r\n // = (color - fogColor*fogFactor)*AO + fogColor*fogFactor =\r\n // = color*AO + fogColor*fogFactor*(1 - AO)\r\n // Result: gl_FragColor = color*AO + fogColor*fogFactor*(1 - AO)\r\n float fogFactor = smoothstep(fogNearFar.x, fogNearFar.y, - viewPos.z) * fogColor.a;\r\n gl_FragColor.rgb = color.rgb * res.rgb + fogColor.rgb * fogFactor *(vec3(1.0, 1.0, 1.0) - res.rgb);\r\n #else\r\n gl_FragColor.rgb = color.rgb * res.rgb;\r\n #endif\r\n gl_FragColor.a = color.a;\r\n}\r\n",transparent:!1,depthTest:!1,depthWrite:!1}),this.setValues(e)}setValues(e){if(void 0===e)return;super.setValues(e);const t={};this.useFog&&(t.USE_FOG=1),this.fogTransparent&&(t.FOG_TRANSPARENT=1),this.defines=t}}Th.prototype.useFog=!0,Th.prototype.fogTransparent=!1;const Rh=Th;class Mh extends r.RawShaderMaterial{constructor(){super();const e={uniforms:{srcL:{type:"t",value:null},srcR:{type:"t",value:null}},vertexShader:qt,fragmentShader:"/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\nuniform sampler2D srcL;\r\nuniform sampler2D srcR;\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n vec4 l = texture2D(srcL, vUv);\r\n vec4 r = texture2D(srcR, vUv);\r\n gl_FragColor = vec4(l.r, r.g, r.b, 1.0);\r\n}\r\n",transparent:!1,depthTest:!1,depthWrite:!1};this.setValues(e)}}const Ph=Mh;class Lh{constructor(){this.position=new r.Vector3(0,0,0),this.scale=1,this.orientation=new r.Quaternion(0,0,0,1)}set(e,t,r){this.position=e,this.scale=t,this.orientation=r}}class Nh{setup(e,t){this._startTime=void 0,this._endTime=void 0,this._isPaused=!1,this._srcView=e,this._dstView=t,this._isMoving=!1}isMoving(){return this._isMoving}wasStarted(){return void 0!==this._startTime&&void 0!==this._endTime}start(){this._startTime=Date.now();const e=z.now.interpolateViews?1500:0;this._endTime=this._startTime+e,this._isMoving=!0}getCurrentView(){if(void 0===this._srcView||void 0===this._dstView||!this._isMoving||!this.wasStarted())return{success:!1};let e=this.createView();const t=Date.now();if(t>this._endTime)return e=this._dstView,this.reset(),{success:!0,view:e};const r=(t-this._startTime)/(this._endTime-this._startTime);return e.position.copy(this._srcView.position),e.position.lerp(this._dstView.position,r),e.scale=(1-r)*this._srcView.scale+r*this._dstView.scale,e.orientation.copy(this._srcView.orientation),e.orientation.slerp(this._dstView.orientation,r),{success:!0,view:e}}reset(){this._startTime=this._endTime=0,this._isMoving=!1}pause(){this._isPaused||(this.setup(this.getCurrentView().view,this._dstView),this._isPaused=!0)}resume(){this._isPaused=!1}createView(){return new Lh}}function Ih(e,r){this.context=e,this._opts=t().merge({path:"/"},r)}lr(Ih.prototype),Ih.prototype.removeCookie=function(e){const t=this._toCount(e);let r=this._getSimpleCookie(t);if(r){this._removeSimpleCookie(t),r=parseInt(r,10);for(let t=0;tt?function(t){t.style.display="",t.style.cursor="pointer",t.style.left="calc(50% - 50px)",t.style.width="100px",t.textContent="ENTER VR";let r=null;function n(){r.removeEventListener("end",n),t.textContent="ENTER VR",r=null}function s(s){s.addEventListener("end",n),e._gfx.renderer.xr.setReferenceSpaceType("local"),e._gfx.renderer.xr.setSession(s),t.textContent="EXIT VR",r=s}t.onmouseenter=function(){t.style.opacity="1.0"},t.onmouseleave=function(){t.style.opacity="0.5"},t.onclick=function(){if(null===r){const t={optionalFeatures:["local-floor","bounded-floor"]};navigator.xr.requestSession("immersive-vr",t).then(s),e.moveSceneBehindHeadset()}else r.end()}}(r):function(e){e.style.display="",e.style.cursor="auto",e.style.left="calc(50% - 75px)",e.style.width="150px",e.textContent="VR NOT FOUND",e.onmouseenter=null,e.onmouseleave=null,e.onclick=null}(r))),r}const r=document.createElement("a");return r.href="https://webvr.info",r.innerHTML="WEBXR NOT SUPPORTED",r.style.left="calc(50% - 90px)",r.style.width="180px",r.style.textDecoration="none",t(r),r}class Dh{constructor(e){this._mainCamera=new r.PerspectiveCamera,this._button=null,this._onToggle=e,this._molContainer=new tr.RCGroup,this._user=new tr.RCGroup,this._scalingPivot=new r.Object3D,this._user.add(this._scalingPivot),this._controller1=null,this._controller2=null,this._pressedGripsCounter=0,this._distance=0,this._gfx=null}startScalingByControllers(){this._distance=this._controller1.position.distanceTo(this._controller2.position),tr.getMiddlePoint(this._controller1.position,this._controller2.position,this._scalingPivot.position),this._scalingPivot.scale.set(1,1,1),this._scalingPivot.updateMatrix(),this._scalingPivot.updateMatrixWorld(),this._scalingPivot.addSavingWorldTransform(this._molContainer)}stopScalingByControllers(){this._gfx.scene.addSavingWorldTransform(this._molContainer)}handleGripsDown(e){this._pressedGripsCounter++,2===this._pressedGripsCounter?this.startScalingByControllers():1===this._pressedGripsCounter&&e.target.addSavingWorldTransform(this._molContainer)}handleGripsUp(e){if(this._pressedGripsCounter--,1===this._pressedGripsCounter){this.stopScalingByControllers();(e.target===this._controller1?this._controller2:this._controller1).addSavingWorldTransform(this._molContainer)}else 0===this._pressedGripsCounter&&this._gfx.scene.addSavingWorldTransform(this._molContainer)}enable(e){if(!e)return void w.warn("WebVR couldn't be enabled, because gfx is not defined");this._gfx=e;const{renderer:t,camera:r}=e;if(!t)throw new Error("No renderer is available to toggle WebVR");if(!r)throw new Error("No camera is available to toggle WebVR");t.xr.enabled=!0,this._button?this._button.style.display="block":(this._button=Vh(this),document.body.appendChild(this._button)),this._mainFog=z.now.fog,z.set("fog",!1),this._plugVRNodesIntoScene(e,t),this._setControllersListeners(),this._onToggle&&this._onToggle(!0)}_plugVRNodesIntoScene(e,t){this._mainCamera.copy(e.camera),e.scene.add(this._user),e.scene.add(this._molContainer),this._molContainer.add(e.root),this._controller1=t.xr.getController(0),this._controller2=t.xr.getController(1);const r=this._createControllerMesh();this._controller1.add(r),this._controller2.add(r.clone()),this._user.add(this._controller1),this._user.add(this._controller2)}_setControllersListeners(){this._controller1.addEventListener("selectstart",(e=>{this.handleGripsDown(e)})),this._controller1.addEventListener("selectend",(e=>{this.handleGripsUp(e)})),this._controller2.addEventListener("selectstart",(e=>{this.handleGripsDown(e)})),this._controller2.addEventListener("selectend",(e=>{this.handleGripsUp(e)})),this._controller1.addEventListener("squeezestart",(e=>{this.handleGripsDown(e)})),this._controller1.addEventListener("squeezeend",(e=>{this.handleGripsUp(e)})),this._controller2.addEventListener("squeezestart",(e=>{this.handleGripsDown(e)})),this._controller2.addEventListener("squeezeend",(e=>{this.handleGripsUp(e)}))}disable(){if(!this._gfx)return;const{renderer:e,camera:t}=this._gfx;if(!e)throw new Error("No renderer is available to toggle WebVR");e.setAnimationLoop(null);const r=e.xr.getSession();r&&r.end(),e.xr.enabled=!1,this._button&&(this._button.style.display="none"),z.set("fog",this._mainFog),this._unplugVRNodesFromScene(t),this._onToggle&&this._onToggle(!1)}_unplugVRNodesFromScene(e){this._mainCamera&&e&&e.copy(this._mainCamera);const t=this._molContainer.children[0];t&&this._gfx.scene.add(t),this._molContainer.parent.remove(this._molContainer),this._user&&this._gfx.scene.remove(this._user),this._molContainer=null,this._user=null,this._scalingPivot=null,this._user=null,this._controller1=null,this._controller2=null}_createControllerMesh(){const e=new r.CylinderGeometry(.04,.04,.3),t=new Kn({lights:!1,overrideColor:!0});t.setUberOptions({fixedColor:new r.Color(4474111)}),t.updateUniforms();const n=new r.Mesh(e,t);return n.rotateX(-Math.PI/2),n}updateMoleculeScale(){if(!this._controller1||!this._controller2)return;const e=this;if(2===e._pressedGripsCounter){tr.getMiddlePoint(e._controller1.position,e._controller2.position,e._scalingPivot.position);const t=e._controller1.position.distanceTo(e._controller2.position),r=t/e._distance;e._scalingPivot.scale.multiplyScalar(r),e._distance=t}}moveSceneBehindHeadset(){const e=this._gfx,{camera:t}=e,r=this._molContainer;r.matrix.identity(),r.position.set(0,0,-4),r.updateMatrix(),r.matrixWorld.multiplyMatrices(t.matrixWorld,r.matrix),e.scene.addSavingWorldTransform(r),this._onToggle&&this._onToggle(!0)}getCanvas(){const e=this._gfx;return e&&e.renderer?e.renderer.domElement:null}}const{selectors:kh,Atom:zh,Residue:Fh,Chain:Bh,Molecule:Uh}=Ht,Gh=0,jh=1,Hh=2,$h="Could not find suitable loader for this source";r.ColorManagement.enabled=!1;const{createElement:Wh}=O;function Yh(e){const t=e.lastIndexOf(".");return t>=0&&(e=e.substr(0,t)),e}function Xh(e,t,r){void 0!==r?e.debug(`${t}... ${Math.floor(100*r)}%`):e.debug(`${t}...`)}function qh(){return z.now.fogColorEnable?z.now.fogColor:z.now.bg.color}function Kh(e){g.call(this),this._opts=t().merge({settingsCookie:"settings",cookiePath:"/"},e),this._gfx=null,this._interpolator=new Nh,this._container=e&&e.container||document.getElementById("miew-container")||t().head(document.getElementsByClassName("miew-container"))||document.body,this._containerRoot=this._container,this._running=!1,this._halting=!1,this._building=!1,this._needRender=!0,this._hotKeysEnabled=!0,this.settings=z;const r=w;r.console=!1,r.level="info",this.logger=r,this._cookies=new Oh(this),this.restoreSettings(),e&&e.settings&&this.settings.set(e.settings),this._spinner=null,this._loading=[],this._animInterval=null,this._visuals={},this._curVisualName=null,this._objects=[],this._sourceWindow=null,this.reset(),this._repr&&r.debug(`Selected ${this._repr.mode.name} mode with ${this._repr.colorer.name} colorer.`);const n=this;Kh.registeredPlugins.forEach((e=>{e.call(n)})),this._initOnSettingsChanged()}function Zh(e,t){const r=e;for(;r.firstChild;)r.removeChild(r.firstChild);r.appendChild(t)}Kh.prototype=Object.create(g.prototype),Kh.prototype.constructor=Kh,Kh.prototype.getMaxRepresentationCount=function(){return qo.NUM_REPRESENTATION_BITS},Kh.prototype._updateShadowCamera=function(){const e=new r.Matrix4,t=new r.Vector3,n={center:new r.Vector3,halfSize:new r.Vector3};return function(){this._gfx.scene.updateMatrixWorld();for(let r=0;r{n._onKeyDown(e)})),e.addEventListener("keyup",(e=>{n._onKeyUp(e)})),this._objectControls=new rh(this._gfx.root,this._gfx.pivot,this._gfx.camera,this._gfx.renderer.domElement,(()=>n._getAltObj())),this._objectControls.addEventListener("change",(e=>{switch(z.now.shadow.on&&n._updateShadowCamera(),e.action){case"rotate":n.dispatchEvent({type:"rotate",quaternion:e.quaternion});break;case"zoom":n.dispatchEvent({type:"zoom",factor:e.factor});break;default:n.dispatchEvent({type:e.action})}n.dispatchEvent({type:"transform"}),n._needRender=!0}));const t=this._gfx;this._picker=new sh(t.root,t.camera,t.renderer.domElement),this._picker.addEventListener("newpick",(e=>{n._onPick(e)})),this._picker.addEventListener("dblclick",(e=>{n.center(e)}))}catch(e){if("TypeError"===e.name&&"Cannot read property 'getExtension' of null"===e.message)this._showMessage("Could not create WebGL context.");else{if(!(e.message.search(/webgl/i)>1))throw this._showMessage("Viewer initialization failed."),e;this._showMessage(e.message)}return!1}const s=this._opts&&this._opts.load;if(s){const e=this._opts&&this._opts.type;this.load(s,{fileType:e,keepRepsInfo:!0})}return!0},Kh.prototype.term=function(){this._showMessage("Viewer has been terminated."),this._loading.forEach((e=>{e.cancel()})),this._loading.length=0,this.halt(),this._gfx=null},Kh.prototype._showMessage=function(e){const t=document.createElement("div");t.setAttribute("class","miew-message"),t.appendChild(document.createElement("p")).appendChild(document.createTextNode(e)),Zh(this._container,t)},Kh.prototype._showCanvas=function(){Zh(this._container,this._gfx.renderer.domElement)},Kh.prototype._requestAnimationFrame=function(e){const{xr:t}=this._gfx.renderer;t&&t.enabled?this._gfx.renderer.setAnimationLoop(e):requestAnimationFrame(e)},Kh.prototype._initGfx=function(){const e={width:this._container.clientWidth,height:this._container.clientHeight},t={preserveDrawingBuffer:!0,alpha:!0,premultipliedAlpha:!1};z.now.antialias&&(t.antialias=!0),e.renderer2d=new $c,e.renderer=new r.WebGLRenderer(t),e.renderer.shadowMap.enabled=z.now.shadow.on,e.renderer.shadowMap.autoUpdate=!1,e.renderer.shadowMap.type=r.PCFShadowMap,Dn.init(e.renderer),e.renderer.autoClear=!1,e.renderer.setPixelRatio(window.devicePixelRatio),e.renderer.setSize(e.width,e.height),e.renderer.setClearColor(z.now.bg.color,Number(!z.now.bg.transparent)),e.renderer.clearColor(),e.renderer2d.setSize(e.width,e.height),e.camera=new r.PerspectiveCamera(z.now.camFov,e.width/e.height,z.now.camNear,z.now.camFar),e.camera.setMinimalFov(z.now.camFov),e.camera.position.z=z.now.camDistance,e.camera.updateProjectionMatrix(),e.camera.layers.set(tr.LAYERS.DEFAULT),e.camera.layers.enable(tr.LAYERS.VOLUME),e.camera.layers.enable(tr.LAYERS.VOLUME_BFPLANE),e.stereoCam=new r.StereoCamera,e.scene=new r.Scene;const n=qh();e.scene.fog=new r.Fog(n,z.now.camNear,z.now.camFar),e.root=new tr.RCGroup,e.scene.add(e.root),e.pivot=new tr.RCGroup,e.root.add(e.pivot),e.selectionScene=new r.Scene,e.selectionRoot=new r.Group,e.selectionRoot.matrixAutoUpdate=!1,e.selectionScene.add(e.selectionRoot),e.selectionPivot=new r.Group,e.selectionPivot.matrixAutoUpdate=!1,e.selectionRoot.add(e.selectionPivot);const s=new r.DirectionalLight(16777215,.45);s.position.set(0,.414,1),s.layers.enable(tr.LAYERS.TRANSPARENT),s.castShadow=!0,s.shadow.bias=.09,s.shadow.radius=z.now.shadow.radius,s.shadow.camera.layers.set(tr.LAYERS.SHADOWMAP);const i=e.renderer.getPixelRatio(),o=Math.max(e.width,e.height)*i;s.shadow.mapSize.width=o,s.shadow.mapSize.height=o,s.target.position.set(0,0,0),e.scene.add(s),e.scene.add(s.target);const a=new r.AmbientLight(6710886);a.layers.enable(tr.LAYERS.TRANSPARENT),e.scene.add(a),e.axes=new ih(e.root,e.camera);const l=e.width*i,c=e.height*i;e.offscreenBuf=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.NearestFilter,format:r.RGBAFormat,depthBuffer:!0}),e.offscreenBuf.depthTexture=new r.DepthTexture,e.offscreenBuf.depthTexture.type=r.UnsignedShortType,e.offscreenBuf2=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,depthBuffer:!1}),e.offscreenBuf3=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,depthBuffer:!1}),e.offscreenBuf4=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,depthBuffer:!1}),e.volBFTex=e.offscreenBuf3,e.volFFTex=e.offscreenBuf4,e.volWFFTex=e.offscreenBuf,e.offscreenBuf5=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,type:r.FloatType,depthBuffer:!1}),e.offscreenBuf6=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,type:r.FloatType,depthBuffer:!1}),e.offscreenBuf7=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,type:r.FloatType,depthBuffer:!0}),e.volBFTex=e.offscreenBuf5,e.volFFTex=e.offscreenBuf6,e.volWFFTex=e.offscreenBuf7,e.stereoBufL=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,depthBuffer:!1}),e.stereoBufR=new r.WebGLRenderTarget(l,c,{minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,depthBuffer:!1}),this._gfx=e,this._showCanvas(),this._embedWebXR("WEBVR"===z.now.stereo),this._container.appendChild(e.renderer2d.getElement());const h=new m;h.domElement.style.position="absolute",h.domElement.style.right="0",h.domElement.style.bottom="0",this._container.appendChild(h.domElement),this._fps=h,this._fps.show(z.now.fps)},Kh.prototype._initListeners=function(){const e=this;window.addEventListener("resize",(()=>{e._onResize()}))},Kh.prototype._makeUniqueVisualName=function(e){if(!e)return Math.random().toString();let t=e,r=1;for(;this._visuals.hasOwnProperty(t);)t=`${e} (${r.toString()})`,r++;return t},Kh.prototype._addVisual=function(e){if(!e)return null;const t=this._makeUniqueVisualName(e.name);return e.name=t,this._visuals[t]=e,this._gfx.pivot.add(e),e.getSelectionGeo&&this._gfx.selectionPivot.add(e.getSelectionGeo()),t},Kh.prototype._removeVisual=function(e){let t="",r=null;e instanceof sr?(({name:t}=e),r=e):"string"==typeof e&&(t=e,r=this._visuals[t]),r&&this._visuals.hasOwnProperty(t)&&this._visuals[t]===r&&(t===this._curVisualName&&(this._curVisualName=void 0),delete this._visuals[t],r.release(),this._needRender=!0)},Kh.prototype._forEachVisual=function(e){for(const t in this._visuals)this._visuals.hasOwnProperty(t)&&e(this._visuals[t])},Kh.prototype._releaseAllVisuals=function(){if(this._gfx&&this._gfx.pivot){for(const e in this._visuals)this._visuals.hasOwnProperty(e)&&this._visuals[e].release();this._visuals={}}},Kh.prototype._forEachComplexVisual=function(e){if(this._gfx&&this._gfx.pivot)for(const t in this._visuals)this._visuals.hasOwnProperty(t)&&this._visuals[t]instanceof qo&&e(this._visuals[t])},Kh.prototype._getComplexVisual=function(e){e=e||this._curVisualName;let t=null,r=null;return this._forEachComplexVisual((n=>{t=n,n.name===e&&(r=n)})),r||t},Kh.prototype._getVolumeVisual=function(){let e=null;return this._forEachVisual((t=>{t instanceof ha&&(e=t)})),e},Kh.prototype._getVisualForComplex=function(e){if(!e)return null;let t=null;return this._forEachComplexVisual((r=>{r.getComplex()===e&&(t=r)})),t},Kh.prototype.getVisuals=function(){return Object.keys(this._visuals)},Kh.prototype.getComplexVisualsCount=function(){let e=0;return this._forEachComplexVisual((()=>e++)),e},Kh.prototype.getCurrentVisual=function(){return this._curVisualName},Kh.prototype.setCurrentVisual=function(e){this._visuals[e]&&(this._curVisualName=e)},Kh.prototype.run=function(){if(!this._running){if(this._running=!0,this._halting)return void(this._halting=!1);this._objectControls.enable(!0),this._interpolator.resume(),this._requestAnimationFrame((()=>this._onTick()))}},Kh.prototype.halt=function(){this._running&&(this._discardComponentEdit(),this._discardFragmentEdit(),this._objectControls.enable(!1),this._interpolator.pause(),this._halting=!0)},Kh.prototype.enableHotKeys=function(e){this._hotKeysEnabled=e,this._objectControls.enableHotkeys(e)},Kh.prototype._onResize=function(){const e=this._gfx;e&&(this._needRender=!0,e.width=this._container.clientWidth,e.height=this._container.clientHeight,e.camera.aspect=e.width/e.height,e.camera.setMinimalFov(z.now.camFov),e.camera.updateProjectionMatrix(),e.renderer.setSize(e.width,e.height),e.renderer2d.setSize(e.width,e.height),this.dispatchEvent({type:"resize"}))},Kh.prototype._resizeOffscreenBuffers=function(e,t,r){const n=this._gfx,s="NONE"===(r=r||"NONE")||"ANAGLYPH"===r,i=s?1:.5;n.offscreenBuf.setSize(i*e,t),n.offscreenBuf2.setSize(i*e,t),n.offscreenBuf3.setSize(i*e,t),n.offscreenBuf4.setSize(i*e,t),n.offscreenBuf5&&n.offscreenBuf5.setSize(i*e,t),n.offscreenBuf6&&n.offscreenBuf6.setSize(i*e,t),n.offscreenBuf7&&n.offscreenBuf7.setSize(i*e,t),s&&(n.stereoBufL.setSize(e,t),n.stereoBufR.setSize(e,t))},Kh.prototype._onTick=function(){if(this._halting)return this._running=!1,void(this._halting=!1);this._fps.update(),this._requestAnimationFrame((()=>this._onTick())),this._onUpdate(),this._needRender&&(this._onRender(),this._needRender=!z.now.suspendRender||"WEBVR"===z.now.stereo)},Kh.prototype._getBSphereRadius=function(){let e=0;return this._forEachVisual((t=>{e=Math.max(e,t.getBoundaries().boundingSphere.radius)})),e*this._objectControls.getScale()},Kh.prototype.getOBB=function(){const e=new r.Sphere,t=new r.Box3,n=new r.Box3,s=new r.Matrix4,i=[new r.Vector3,new r.Vector3,new r.Vector3,new r.Vector3];return function(r,o){n.makeEmpty(),this._forEachVisual((s=>{e.copy(s.getBoundaries().boundingSphere),e.applyMatrix4(s.matrixWorld).applyMatrix4(r),e.getBoundingBox(t),n.union(t)})),n.getCenter(o.center),s.copy(r).invert(),o.center.applyMatrix4(s);const{min:a}=n,{max:l}=n;i[0].set(a.x,a.y,a.z),i[1].set(l.x,a.y,a.z),i[2].set(a.x,l.y,a.z),i[3].set(a.x,a.y,l.z);for(let e=0,t=i.length;e{e.getComplex().update()})),z.now.autobuild&&!this._loading.length&&!this._building&&this._needRebuild()&&this.rebuild(),this._loading.length||this._building||this._needRebuild()||this._updateView(),this._updateFog(),this._gfx.renderer.xr.enabled&&this.webVR.updateMoleculeScale()},Kh.prototype._onRender=function(){const e=this._gfx;e.scene.updateMatrixWorld(),e.camera.updateMatrixWorld(),this._clipPlaneUpdateValue(this._getBSphereRadius()),this._fogFarUpdateValue(),e.renderer.setRenderTarget(null),e.renderer.clear(),this._renderFrame(z.now.stereo)},Kh.prototype._renderFrame=function(){const e=new Ph,t=new r.Vector2;return function(r){const n=this._gfx,{renderer:s}=n;s.getSize(t),"NONE"!==r&&(n.camera.focus=n.camera.position.z,n.stereoCam.aspect=1,"ANAGLYPH"===r?n.stereoCam.update(n.camera):n.stereoCam.updateHalfSized(n.camera,z.now.camFov));const i=n.renderer.getPixelRatio();switch(this._resizeOffscreenBuffers(t.width*i,t.height*i,r),this._renderShadowMap(),r){case"WEBVR":case"NONE":this._renderScene(n.camera,!1);break;case"SIMPLE":case"DISTORTED":s.setScissorTest(!0),s.setScissor(0,0,t.width/2,t.height),s.setViewport(0,0,t.width/2,t.height),this._renderScene(this._gfx.stereoCam.cameraL,"DISTORTED"===r),s.setScissor(t.width/2,0,t.width/2,t.height),s.setViewport(t.width/2,0,t.width/2,t.height),this._renderScene(this._gfx.stereoCam.cameraR,"DISTORTED"===r),s.setScissorTest(!1);break;case"ANAGLYPH":this._renderScene(this._gfx.stereoCam.cameraL,!1,n.stereoBufL),this._renderScene(this._gfx.stereoCam.cameraR,!1,n.stereoBufR),s.setRenderTarget(null),e.uniforms.srcL.value=n.stereoBufL.texture,e.uniforms.srcR.value=n.stereoBufR.texture,n.renderer.renderScreenQuad(e)}n.renderer2d.render(n.scene,n.camera),z.now.axes&&n.axes&&!n.renderer.xr.enabled&&n.axes.render(s)}}(),Kh.prototype._onBgColorChanged=function(){const e=this._gfx,t=qh();e&&(e.scene.fog&&e.scene.fog.color.set(t),e.renderer.setClearColor(z.now.bg.color,Number(!z.now.bg.transparent))),this._needRender=!0},Kh.prototype._onFogColorChanged=function(){const e=this._gfx,t=qh();e&&e.scene.fog&&e.scene.fog.color.set(t),this._needRender=!0},Kh.prototype._setUberMaterialValues=function(e){this._gfx.root.traverse((t=>{(t instanceof r.Mesh||t instanceof r.LineSegments||t instanceof r.Line)&&t.material instanceof Kn&&(t.material.setValues(e),t.material.needsUpdate=!0)}))},Kh.prototype._enableMRT=function(e,t,r){const n=this._gfx,s=n.renderer.getContext(),{properties:i}=n.renderer;if(!e)return void s.drawBuffers([s.COLOR_ATTACHMENT0,null]);n.renderer.setRenderTarget(r);const o=i.get(r.texture).__webglTexture;s.bindTexture(s.TEXTURE_2D,o),n.renderer.setRenderTarget(t);const a=i.get(t).__webglFramebuffer,l=i.get(t.texture).__webglTexture;s.bindFramebuffer(s.FRAMEBUFFER,a),a.width=t.width,a.height=t.height,s.framebufferTexture2D(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,l,0),s.framebufferTexture2D(s.FRAMEBUFFER,s.COLOR_ATTACHMENT1,s.TEXTURE_2D,o,0),s.drawBuffers([s.COLOR_ATTACHMENT0,s.COLOR_ATTACHMENT1])},Kh.prototype._renderScene=function(e,t,r){t=t||!1,r=r||null;const n=this._gfx;if(n.renderer.setClearColor(z.now.bg.color,Number(!z.now.bg.transparent)),n.renderer.setRenderTarget(r),n.renderer.clear(),n.renderer.xr.enabled)return void n.renderer.render(n.scene,e);n.renderer.setClearColor(0,0),n.renderer.setRenderTarget(n.offscreenBuf4),n.renderer.clearColor(),n.renderer.setClearColor(z.now.bg.color,Number(!z.now.bg.transparent)),n.renderer.setRenderTarget(n.offscreenBuf),n.renderer.clear();const s=null!==this._getComplexVisual(),i=this._getVolumeVisual(),o=s&&z.now.ao;o&&this._enableMRT(!0,n.offscreenBuf,n.offscreenBuf4),"prepass"===z.now.transparency?this._renderWithPrepassTransparency(e,n.offscreenBuf):"standard"===z.now.transparency&&(n.renderer.setRenderTarget(n.offscreenBuf),n.renderer.render(n.scene,e)),o&&this._enableMRT(!1,null,null);const a=s&&z.now.outline.on,l=s&&z.now.fxaa,c=null!==i&&null!=i.getMesh().material;let h=o||a||c||l||t?n.offscreenBuf2:r,u=n.offscreenBuf;o?(this._performAO(u,n.offscreenBuf4,n.offscreenBuf.depthTexture,h,n.offscreenBuf3,n.offscreenBuf2),l||t||c||a||(u=h,h=r,n.renderer.setRenderTarget(h),n.renderer.renderScreenQuadFromTex(u.texture,1))):(n.renderer.setRenderTarget(h),n.renderer.renderScreenQuadFromTex(u.texture,1)),a&&(u=h,h=c||l||t?n.offscreenBuf3:r,null!=u&&this._renderOutline(e,n.offscreenBuf,u,h)),this._renderSelection(e,n.offscreenBuf,h),c&&(n.renderer.setRenderTarget(n.offscreenBuf),n.renderer.renderScreenQuadFromTex(h.texture,1),h=n.offscreenBuf,this._renderVolume(i,e,h,n.volBFTex,n.volFFTex,n.volWFFTex),l||t||(n.renderer.setRenderTarget(r),n.renderer.renderScreenQuadFromTex(h.texture,1))),u=h,l&&(h=t?n.offscreenBuf4:r,this._performFXAA(u,h),u=h),t&&(h=r,this._performDistortion(u,h,!0))},Kh.prototype._performDistortion=function(){const e=new r.Scene,t=new r.OrthographicCamera(-1,1,1,-1,-500,1e3),n=new r.RawShaderMaterial({uniforms:{srcTex:{type:"t",value:null},aberration:{type:"fv3",value:new r.Vector3(1)}},vertexShader:qt,fragmentShader:"/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\nvarying vec2 vUv;\r\nuniform sampler2D srcTex;\r\nuniform vec3 aberration;\r\n\r\nvoid main() {\r\n vec2 uv = vUv * 2.0 - 1.0;\r\n \r\n gl_FragColor.r = texture2D(srcTex, 0.5 * (uv * aberration[0] + 1.0)).r;\r\n gl_FragColor.g = texture2D(srcTex, 0.5 * (uv * aberration[1] + 1.0)).g;\r\n gl_FragColor.b = texture2D(srcTex, 0.5 * (uv * aberration[2] + 1.0)).b;\r\n gl_FragColor.a = 1.0;\r\n}",transparent:!1,depthTest:!1,depthWrite:!1}),s=tr.buildDistorionMesh(10,10,z.now.debug.stereoBarrel);return e.add(new ds.Mesh(s,n)),function(r,s,i){this._gfx.renderer.setRenderTarget(s),this._gfx.renderer.clear(),i?(n.uniforms.srcTex.value=r.texture,n.uniforms.aberration.value.set(.995,1,1.01),this._gfx.renderer.render(e,t)):this._gfx.renderer.renderScreenQuadFromTexWithDistortion(r,z.now.debug.stereoBarrel)}}(),Kh.prototype._renderOutline=function(){const e=new gh({depth:!0});return function(t,n,s,i){const o=this._gfx;e.uniforms.srcTex.value=s.texture,e.uniforms.srcDepthTex.value=n.depthTexture,e.uniforms.srcTexSize.value.set(n.width,n.height),e.uniforms.color.value=new r.Color(z.now.outline.color),e.uniforms.threshold.value=z.now.outline.threshold,e.uniforms.thickness.value=new r.Vector2(z.now.outline.thickness,z.now.outline.thickness),o.renderer.setRenderTarget(i),o.renderer.renderScreenQuad(e)}}(),Kh.prototype._renderShadowMap=function(){const e={minFilter:r.NearestFilter,magFilter:r.NearestFilter,format:r.RGBAFormat};return function(){if(!z.now.shadow.on)return;const t=this._gfx,n=t.renderer.getRenderTarget(),s=t.renderer.getActiveCubeFace(),i=t.renderer.getActiveMipmapLevel(),o=t.renderer.state;o.setBlending(r.NoBlending),o.buffers.color.setClear(1,1,1,1),o.buffers.depth.setTest(!0),o.setScissorTest(!1);for(let n=0;n0)return!0}return!1},Kh.prototype._renderSelection=function(){const e=new gh;return function(t,r,n){const s=this._gfx;s.renderer.setClearColor("black",0),s.renderer.setRenderTarget(r),s.renderer.clear(!0,!1,!1),this._hasSelectionToRender()?(s.selectionRoot.matrix=s.root.matrix,s.selectionPivot.matrix=s.pivot.matrix,s.renderer.render(s.selectionScene,t)):s.renderer.renderDummyQuad(),s.renderer.setRenderTarget(n),s.renderer.renderScreenQuadFromTex(r.texture,.6),e.uniforms.srcTex.value=r.texture,e.uniforms.srcTexSize.value.set(r.width,r.height),s.renderer.renderScreenQuad(e)}}(),Kh.prototype._checkVolumeRenderingSupport=function(e){if(!e)return!1;const t=this._gfx,r=t.renderer.getRenderTarget();t.renderer.setRenderTarget(e);const n=t.renderer.getContext(),s=n.checkFramebufferStatus(n.FRAMEBUFFER);return t.renderer.setRenderTarget(r),s===n.FRAMEBUFFER_COMPLETE||(this.logger.warn("Device doesn't support electron density rendering"),!1)},Kh.prototype._renderVolume=function(){const e=new sa.BackFacePosMaterial,t=new sa.FrontFacePosMaterial,n=(new r.Matrix4).makeTranslation(.5,.5,.5),s=new r.Matrix4;let i;return function(r,o,a,l,c,h){const u=this._gfx;if(void 0===i&&(i=this._checkVolumeRenderingSupport(l)),!i)return;const d=r.getMesh();d.rebuild(u.camera),u.renderer.setClearColor("black",0),u.renderer.setRenderTarget(l),u.renderer.clear(),u.renderer.setRenderTarget(c),u.renderer.clear(),u.renderer.setRenderTarget(h),u.renderer.clear(),u.renderer.setRenderTarget(l),o.layers.set(tr.LAYERS.VOLUME_BFPLANE),u.renderer.render(u.scene,o),o.layers.set(tr.LAYERS.VOLUME),u.scene.overrideMaterial=e,u.renderer.render(u.scene,o),u.renderer.setRenderTarget(c),o.layers.set(tr.LAYERS.VOLUME),u.scene.overrideMaterial=t,u.renderer.render(u.scene,o),u.scene.overrideMaterial=null,o.layers.set(tr.LAYERS.DEFAULT),s.copy(d.matrixWorld).invert(),Kn.prototype.uberOptions.world2colorMatrix.multiplyMatrices(n,s),o.layers.set(tr.LAYERS.COLOR_FROM_POSITION),u.renderer.setRenderTarget(h),u.renderer.render(u.scene,o);const p=d.material;p.uniforms._BFRight.value=l.texture,p.uniforms._FFRight.value=c.texture,p.uniforms._WFFRight.value=h.texture,o.layers.set(tr.LAYERS.VOLUME),u.renderer.setRenderTarget(a),u.renderer.render(u.scene,o),o.layers.set(tr.LAYERS.DEFAULT)}}(),Kh.prototype._renderWithPrepassTransparency=function(e,t){const r=this._gfx;r.renderer.setRenderTarget(t),e.layers.set(tr.LAYERS.DEFAULT),r.renderer.render(r.scene,e),e.layers.set(tr.LAYERS.PREPASS_TRANSPARENT),r.renderer.getContext().colorMask(!1,!1,!1,!1),r.renderer.render(r.scene,e),r.renderer.getContext().colorMask(!0,!0,!0,!0),e.layers.set(tr.LAYERS.TRANSPARENT),r.renderer.render(r.scene,e),e.layers.set(tr.LAYERS.DEFAULT)},Kh.prototype._performFXAA=function(){const e=new xh;return function(t,r){if(void 0===t||void 0===r)return;const n=this._gfx;n.renderer.setClearColor(z.now.bg.color,Number(!z.now.bg.transparent)),n.renderer.setRenderTarget(r),n.renderer.clear(),e.uniforms.srcTex.value=t.texture,e.uniforms.srcTexelSize.value.set(1/t.width,1/t.height),e.uniforms.bgColor.value.set(z.now.bg.color),e.bgTransparent!==z.now.bg.transparent&&(e.setValues({bgTransparent:z.now.bg.transparent}),e.needsUpdate=!0),n.renderer.renderScreenQuad(e)}}(),Kh.prototype._performAO=function(){const e=new Sh,t=new Ah,n=new Rh,s=new r.Vector3;return function(i,o,a,l,c,h){if(!(i&&o&&a&&l&&c&&h))return;const u=this._gfx,d=Math.tan(.5*r.MathUtils.DEG2RAD*u.camera.fov);e.uniforms.diffuseTexture.value=i.texture,e.uniforms.depthTexture.value=a,e.uniforms.normalTexture.value=o.texture,e.uniforms.srcTexelSize.value.set(1/i.width,1/i.height),e.uniforms.camNearFar.value.set(u.camera.near,u.camera.far),e.uniforms.projMatrix.value=u.camera.projectionMatrix,e.uniforms.aspectRatio.value=u.camera.aspect,e.uniforms.tanHalfFOV.value=d,u.root.matrix.extractScale(s),e.uniforms.kernelRadius.value=z.now.debug.ssaoKernelRadius*s.x,e.uniforms.depthThreshold.value=2*this._getBSphereRadius(),e.uniforms.factor.value=z.now.debug.ssaoFactor,u.renderer.setRenderTarget(h),u.renderer.renderScreenQuad(e),t.uniforms.aoMap.value=h.texture,t.uniforms.srcTexelSize.value.set(1/h.width,1/h.height),t.uniforms.depthTexture.value=a,u.renderer.setRenderTarget(c),u.renderer.renderScreenQuad(t),n.uniforms.aoMap.value=c.texture,n.uniforms.diffuseTexture.value=i.texture,n.uniforms.srcTexelSize.value.set(1/c.width,1/c.height),n.uniforms.depthTexture.value=a,n.uniforms.projMatrix.value=u.camera.projectionMatrix,n.uniforms.aspectRatio.value=u.camera.aspect,n.uniforms.tanHalfFOV.value=d;const{fog:p}=u.scene;p&&(n.uniforms.fogNearFar.value.set(p.near,p.far),n.uniforms.fogColor.value.set(p.color.r,p.color.g,p.color.b,z.now.fogAlpha)),n.useFog===z.now.fog&&n.fogTransparent===z.now.bg.transparent||(n.setValues({useFog:z.now.fog,fogTransparent:z.now.bg.transparent}),n.needsUpdate=!0),u.renderer.setRenderTarget(l),u.renderer.renderScreenQuad(n)}}(),Kh.prototype.reset=function(){this._picker&&this._picker.reset(),this._lastPick=null,this._releaseAllVisuals(),this._setEditMode(Gh),this._resetObjects(),this._gfx&&(tr.clearTree(this._gfx.pivot),this._gfx.renderer2d.reset()),this.setNeedRender()},Kh.prototype._resetScene=function(){this._objectControls.reset(),this._objectControls.allowTranslation(!0),this._objectControls.allowAltObjFreeRotation(!0),this.resetReps(),this.resetPivot(),this.rebuildAll()},Kh.prototype.resetView=function(){this._picker&&this._picker.reset(),this._setEditMode(Gh),this._resetScene(),this._forEachComplexVisual((e=>{e.updateSelectionMask({}),e.rebuildSelectionGeometry()}))},Kh.prototype._export=function(e){const r=t().head(jc.exporters.find({format:e}));if(!r)return this.logger.error("Could not find suitable exporter for this source"),Promise.reject(new Error("Could not find suitable exporter for this source"));if(this.dispatchEvent({type:"exporting"}),this._visuals[this._curVisualName]instanceof qo){let e=null;r.SourceClass===qo?e=this._visuals[this._curVisualName]:r.SourceClass===Bt&&(e=this._visuals[this._curVisualName]._complex);return new r(e,{miewVersion:Kh.VERSION}).export().then((e=>e))}return this._visuals[this._curVisualName]instanceof ha?Promise.reject(new Error("Sorry, exporter for volume data not implemented yet")):Promise.reject(new Error("Unexpected format of data"))};const Qh=/^(?:(pdb|cif|ccp4|dsn6):\s*)?(\d[a-z\d]{3})$/i,Jh=/^(?:pc|pubchem):\s*([a-z]+)$/i,eu=/^([a-z][a-z\d\-+.]*):/i;function tu(e,r,n){return new Promise((s=>{if(n.shouldCancel())throw new Error("Operation cancelled");n.notify({type:"fetching"}),e=function(e,r){if(!t().isString(e))return e;const n=Qh.exec(e);if(n){let[,t="pdb",s]=n;switch(t=t.toLowerCase(),s=s.toUpperCase(),t){case"pdb":e=`https://files.rcsb.org/download/${s}.pdb`;break;case"cif":e=`https://files.rcsb.org/download/${s}.cif`;break;case"ccp4":e=`https://www.ebi.ac.uk/pdbe/coordinates/files/${s.toLowerCase()}.ccp4`;break;case"dsn6":e=`https://edmaps.rcsb.org/maps/${s.toLowerCase()}_2fofc.dsn6`;break;default:throw new Error("Unexpected data format shortcut")}return r.fileType=t,r.fileName=`${s}.${t}`,r.sourceType="url",e}const s=Jh.exec(e);if(s){const t=s[1].toLowerCase();return e=`https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/${t}/JSON?record_type=3d`,r.fileType="pubchem",r.fileName=`${t}.json`,r.sourceType="url",e}return"url"!==r.sourceType&&void 0!==r.sourceType||(r.sourceType="url",eu.test(e)||(e=O.resolveURL(e))),e}(e,r);const i=t().head(jc.loaders.find({type:r.sourceType,source:e}));if(!i)throw new Error($h);const o=r.fileName||i.extractName(e);if(o){const[e,n]=O.splitFileName(o);t().defaults(r,{name:e,fileExt:n,fileName:o})}!function(e){let{binary:r}=e;if(void 0!==e.fileType){const n=t().head(jc.parsers.find({format:e.fileType}));if(!n)throw new Error("Could not find suitable parser for this format");r=n.binary||!1}if(void 0===r&&void 0!==e.fileExt){const n=t().head(jc.parsers.find({ext:e.fileExt}));n&&(r=n.binary||!1)}void 0!==e.fileExt&&".man"===e.fileExt.toLowerCase()&&(e.binary=!0,e.animation=!0),void 0!==r&&void 0!==e.binary&&e.binary!==r&&e.context.logger.warn("Overriding incorrect binary mode"),e.binary=r||!1}(r);let a=t().get(r,"preset.expression");if(!t().isUndefined(a)&&(a=JSON.parse(a),a&&a.settings)){const e=["singleUnit"];for(let r=0,n=e.length;rl.abort())),l.addEventListener("progress",(e=>{e.lengthComputable&&e.total>0?Xh(l.logger,"Fetching",e.loaded/e.total):Xh(l.logger,"Fetching")}));s(l.load().then((e=>(r.context.logger.info("Fetching finished"),n.notify({type:"fetchingDone",data:e}),e))).catch((e=>{throw r.context.logger.debug(e.message),e.stack&&r.context.logger.debug(e.stack),r.context.logger.error("Fetching failed"),n.notify({type:"fetchingDone",error:e}),e})))}))}Kh.prototype.load=function(e,r){r=t().merge({},r,{context:this}),this.settings.now.use.multiFile||(this._loading.length&&(this._loading.forEach((e=>{e.cancel()})),this._loading.length=0),r.animation||this.reset(!0)),this._interpolator.reset(),this.dispatchEvent({type:"loading",options:r,source:e});const n=new V;this._loading.push(n),n.addEventListener("notification",(e=>{this.dispatchEvent(e.slaveEvent)})),this._spinner.spin(this._container);const s=e=>{const t=this._loading.indexOf(n);return-1!==t&&this._loading.splice(t,1),this._spinner.stop(),this._refreshTitle(),n.notify({type:"loadingDone",anything:e}),e};return tu(e,r,n).then((e=>function(e,r,n){if(n.shouldCancel())return Promise.reject(new Error("Operation cancelled"));n.notify({type:"parsing"});const s=t().head(jc.parsers.find({format:r.fileType,ext:r.fileExt,data:e}));if(!s)return Promise.reject(new Error("Could not find suitable parser"));const i=new s(e,r);return i.context=r.context,n.addEventListener("cancel",(()=>i.abort())),i.parse().then((e=>(n.notify({type:"parsingDone",data:e}),e))).catch((e=>{throw r.error=e,r.context.logger.debug(e.message),e.stack&&r.context.logger.debug(e.stack),r.context.logger.error("Parsing failed"),n.notify({type:"parsingDone",error:e}),e}))}(e,r,n))).then((e=>{const t=this._onLoad(e,r);return s(t)})).catch((e=>{throw this.logger.error("Could not load data"),this.logger.debug(e),s(e)}))},Kh.prototype.unload=function(e){this._removeVisual(e||this.getCurrentVisual()),this.resetPivot(),z.now.shadow.on&&this._updateShadowCamera()},Kh.prototype._startAnimation=function(e){this._stopAnimation();const t=this,r=this._getComplexVisual();if(null!==r){try{this._frameInfo=new uh(r.getComplex(),e,{onLoadStatusChanged(){t.dispatchEvent({type:"mdPlayerStateChanged",state:{isPlaying:t._isAnimating,isLoading:!t._frameInfo||t._frameInfo.isLoading}})},onError(e){t._stopAnimation(),t.logger.error(e)}})}catch{return void this.logger.error("Animation file does not fit to current complex!")}this._continueAnimation()}else this.logger.error("Unable to start animation - no molecule is loaded.")},Kh.prototype._pauseAnimation=function(){null!==this._animInterval&&(this._isAnimating=!1,clearInterval(this._animInterval),this._animInterval=null,this._frameInfo&&this.dispatchEvent({type:"mdPlayerStateChanged",state:{isPlaying:this._isAnimating,isLoading:this._frameInfo.isLoading}}))},Kh.prototype._continueAnimation=function(){this._isAnimating=!0;let e=1e3/z.now.maxfps;e=Number.isNaN(e)?0:e;const t=this,{pivot:r}=t._gfx,n=this._getComplexVisual();n&&(n.resetSelectionMask(),n.rebuildSelectionGeometry(),this._msgAtomInfo.style.opacity=0),this._animInterval=setInterval((()=>{if(t.dispatchEvent({type:"mdPlayerStateChanged",state:{isPlaying:t._isAnimating,isLoading:t._frameInfo.isLoading}}),t._frameInfo.frameIsReady){r.updateToFrame(t._frameInfo),t._updateObjsToFrame(t._frameInfo),t._refreshTitle(` Frame ${t._frameInfo._currFrame} of ${t._frameInfo._framesCount} time interval - ${t._frameInfo._timeStep}`);try{t._frameInfo.nextFrame()}catch{return t.logger.error("Error during animation"),void t._stopAnimation()}t._needRender=!0}}),e)},Kh.prototype._stopAnimation=function(){null!==this._animInterval&&(clearInterval(this._animInterval),this._frameInfo.disableEvents(),this._frameInfo=null,this._animInterval=null,this.dispatchEvent({type:"mdPlayerStateChanged",state:null}))},Kh.prototype._onLoad=function(e,r){const n=this._gfx;let s=null;if(r.animation)return this._refreshTitle(),this._startAnimation(e),null;if(this._stopAnimation(),r&&r.keepRepsInfo||(this._opts.reps=null,this._opts._objects=null),"Complex"===e.id){const n=e;r.fileName?n.name=n.name||Yh(r.fileName).toUpperCase():r.amberFileName?n.name=n.name||Yh(r.amberFileName).toUpperCase():n.name=`Dynamic ${r.fileType} molecule`,s=this._addVisual(new qo(n.name,n)),this._curVisualName=s;const i=this.info();if(this.logger.info(`Parsed ${r.fileName} (${i.atoms} atoms, ${i.bonds} bonds, ${i.residues} residues, ${i.chains} chains).`),t().isNumber(this._opts.unit)&&n.setCurrentUnit(this._opts.unit),r.preset);else if(z.now.autoPreset)switch(r.fileType){case"cml":this.resetReps("small");break;case"pdb":case"mmtf":case"cif":!function(e){let t=!1;return e.forEachComponent((e=>{e.forEachResidue((e=>{e._isValid&&(t=!0)}))})),t}(n)?this.resetReps("small"):this.resetReps("macro");break;default:this.resetReps("default")}else this.resetReps("default")}else"Volume"===e.id&&(this.resetEd(),s=this._onLoadEd(e));return n.camera.updateProjectionMatrix(),this._updateFog(),n.root.resetTransform(),this.resetPivot(),this._objectControls.setScale(z.now.radiusToFit/this._getBSphereRadius()),this._resetObjects(),z.now.autoResolution&&this._tweakResolution(),z.now.shadow.on&&this._updateShadowCamera(),this._opts.view&&(this.view(this._opts.view),delete this._opts.view),this._refreshTitle(),s},Kh.prototype.resetEd=function(){this._edLoader&&(this._edLoader.abort(),this._edLoader=null),this._removeVisual(this._getVolumeVisual()),this._needRender=!0},Kh.prototype.loadEd=function(e){this.resetEd();const r=t().head(jc.loaders.find({source:e}));if(!r)return this.logger.error($h),Promise.reject(new Error($h));const n=this._edLoader=new r(e,{binary:!0});return n.context=this,n.load().then((e=>{const r=t().head(jc.parsers.find({format:"ccp4"}));if(!r)throw new Error("Could not find suitable parser for this source");const n=new r(e);return n.context=this,n.parse().then((e=>{this._onLoadEd(e)}))})).catch((e=>{this.logger.error("Could not load ED data"),this.logger.debug(e)}))},Kh.prototype._onLoadEd=function(e){e.normalize();const t=new ha("volume",e);t.getMesh().layers.set(tr.LAYERS.VOLUME);const r=this._addVisual(t);return this._needRender=!0,r},Kh.prototype._needRebuild=function(){let e=!1;return this._forEachComplexVisual((t=>{e=e||t.needsRebuild()})),e},Kh.prototype._rebuildObjects=function(){const e=this,t=this._gfx;let r,n;const s=[];for(r=0;r{const s=e._objects;for(r=0,n=s.length;r0?`Bio molecule ${e}`:"Asymmetric unit"})`}return void 0===e||(t().isString(e)&&(e=Math.max(parseInt(e,10),0)),n.getComplex().setCurrentUnit(e)&&(this._resetScene(),this._updateInfoPanel())),s()},Kh.prototype.rebuild=function(){if(this._building)return void this.logger.warn("Miew.rebuild(): already building!");this._building=!0,this.dispatchEvent({type:"rebuilding"}),this._rebuildObjects(),this._gfx.renderer2d.reset();const e=[];this._forEachComplexVisual((t=>{t.needsRebuild()&&e.push(t.rebuild().then((()=>new Promise((e=>{t.rebuildSelectionGeometry(),e()})))))}));const t=this;this._spinner.spin(this._container),Promise.all(e).then((()=>{t._spinner.stop(),t._needRender=!0,t._refreshTitle(),this.dispatchEvent({type:"buildingDone"}),t._building=!1}))},Kh.prototype.rebuildAll=function(){this._forEachComplexVisual((e=>{e.setNeedsRebuild()}))},Kh.prototype._refreshTitle=function(e){let t;e=void 0===e?"":e;const r=this._getComplexVisual();if(r){t=r.getComplex().name;const e=r.repGet(r.repCurrent());t+=e?` – ${e.mode.name} Mode`:""}else t=Object.keys(this._visuals).length>0?"Unknown":"No Data";t+=e,this.dispatchEvent({type:"titleChanged",data:t})},Kh.prototype.setNeedRender=function(){this._needRender=!0},Kh.prototype._extractRepresentation=function(){const e=[];this._forEachComplexVisual((t=>{if(0===t.getSelectionCount())return;const r=t.buildSelectorFromMask(1<0&&this.logger.report(`New representation from selection for complexes: ${e.join(", ")}`)},Kh.prototype._setReps=function(e){e=e||this._opts&&this._opts.reps||[],this._forEachComplexVisual((t=>t.resetReps(e)))},Kh.prototype.applyPreset=function(e){const{presets:t}=z.now,r=[e||z.defaults.preset,z.defaults.preset,Object.keys(t)[0]];let n=null;for(let e=0;!n&&e{const r=t.beginComponentEdit();r&&e.push(r)})),0!==e.length&&(this._editors=e,this.logger.info("COMPONENT EDIT MODE -- ON"),this._setEditMode(jh),this._objectControls.keysTranslateObj(!0))},Kh.prototype._applyComponentEdit=function(){if(this._editMode===jh){this._objectControls.stop(),this._objectControls.keysTranslateObj(!1);for(let e=0;e{t instanceof qo&&t.getSelectionCount()>0&&e.push(t)})),1!==e.length)return;const t=e[0].beginFragmentEdit();t&&(this._editors=[t],this.logger.info("FRAGMENT EDIT MODE -- ON (single bond)"),this._setEditMode(Hh),this._objectControls.allowTranslation(!1),this._objectControls.allowAltObjFreeRotation(t.isFreeRotationAllowed()),this._needRender=!0)},Kh.prototype._applyFragmentEdit=function(){if(this._editMode===Hh){this._objectControls.stop();for(let e=0;e{e.expandSelection(),e.rebuildSelectionGeometry()})),this._updateInfoPanel(),this._needRender=!0);break;case"NumpadSubtract":e.altKey&&(e.preventDefault(),e.stopPropagation(),this._forEachComplexVisual((e=>{e.shrinkSelection(),e.rebuildSelectionGeometry()})),this._updateInfoPanel(),this._needRender=!0)}}},Kh.prototype._onKeyUp=function(e){this._running&&this._hotKeysEnabled&&"KeyX"===e.code&&this._extractRepresentation()},Kh.prototype._updateInfoPanel=function(){const e=this._msgAtomInfo.getElementsByTagName("p")[0];let t,r,n=0;for(this._forEachComplexVisual((e=>{n+=e.getSelectionCount()}));e.firstChild;)e.removeChild(e.firstChild);if(0===n)return void(this._msgAtomInfo.style.opacity=0);let s=`${String(n)} atom${1!==n?"s":""} selected`;null!==this._lastPick&&(s+=", the last pick:");let i="",o="",a="";if(this._lastPick instanceof zh){t=this._lastPick,r=t.residue,o=t.name;const e=32!==t.location?String.fromCharCode(t.location):"";i=`${t.element.fullName} #${t.serial}${e}: ${r._chain._name}.${r._type._name}${r._sequence}${r._icode.trim()}.`,i+=o,a=`Coord: (${t.position.x.toFixed(2).toString()}, ${t.position.y.toFixed(2).toString()}, ${t.position.z.toFixed(2).toString()})`}else this._lastPick instanceof Fh?(r=this._lastPick,i=`${r._type._fullName}: ${r._chain._name}.${r._type._name}${r._sequence}${r._icode.trim()}`):this._lastPick instanceof Bh?i=`chain ${this._lastPick._name}`:this._lastPick instanceof Uh&&(i=`molecule ${this._lastPick._name}`);e.appendChild(document.createTextNode(s)),""!==i&&(e.appendChild(document.createElement("br")),e.appendChild(document.createTextNode(i))),""!==a&&(e.appendChild(document.createElement("br")),e.appendChild(document.createTextNode(a))),this._msgAtomInfo.style.opacity=1},Kh.prototype._getAltObj=function(){if(this._editors){let e=null;for(let t=0;t0){if(e){e=null;break}e=r}}if(e)return e}return{objects:[],pivot:new r.Vector3(0,0,0)}},Kh.prototype.resetPivot=function(){const e=new r.Box3,t=new r.Vector3;return function(){e.makeEmpty(),this._forEachVisual((t=>{e.union(t.getBoundaries().boundingBox)})),e.getCenter(t),this._objectControls.setPivot(t.negate()),this.dispatchEvent({type:"transform"})}}(),Kh.prototype.setPivotResidue=function(){const e=new r.Vector3;return function(t){const r=this._getVisualForComplex(t.getChain().getComplex());if(r){if(t._controlPoint)e.copy(t._controlPoint);else{let r=0,n=0,s=0;const i=t._atoms.length;for(let e=0;e{i.getSelectionCenter(e,r,n||i.getSelectionBit())&&(t.add(e),s++)})),0!==s&&(t.divideScalar(s),t.negate(),!0)}}(),Kh.prototype.setPivotSubset=function(){const e=new r.Vector3(0,0,0);function t(e,t){return e.mask&1<{const r=this._visuals[this._curVisualName]._complex.name;O.download(t,r,e.fileType),this._refreshTitle(),this.dispatchEvent({type:"exportingDone"})})).catch((e=>{this.logger.error("Could not export data"),this.logger.debug(e),this._refreshTitle(),this.dispatchEvent({type:"exportingDone",error:e})}))},Kh.prototype._tweakResolution=function(){const e=[["poor",100],["low",500],["medium",1e3],["high",5e3],["ultra",Number.MAX_VALUE]];let t=0;if(this._forEachComplexVisual((e=>{t+=e.getComplex().getAtomCount()})),t>0){const r=1e6*this._gfxScore/t;for(let t=0;ts?(o=!1,n.preset="empty"):z.now.preset!==z.defaults.preset&&(n.preset=z.now.preset);const a=[];let l=!0;for(let r=0,n=s;r0&&(r._objects=o),e.view&&(r.view=this.view()),e.settings){const e=this.settings.getDiffs(!1);t().isEmpty(e)||(r.settings=e)}return r},Kh.prototype.get=function(e,t){return z.get(e,t)},Kh.prototype._clipPlaneUpdateValue=function(e){const t=Math.max(this._gfx.camera.position.z-e*z.now.draft.clipPlaneFactor,z.now.camNear),r={clipPlaneValue:t};this._forEachComplexVisual((e=>{e.setUberOptions(r)}));for(let e=0,t=this._objects.length;e{const r=t._reprList;for(let t=0,n=r.length;tn.setMaterialValues(e,t,r)));for(let t=0,r=this._objects.length;t{e.setUberOptions({fogAlpha:z.now.fogAlpha})}))},Kh.prototype._embedWebXR=function(){if("WEBVR"!==z.now.stereo)return this.webVR&&this.webVR.disable(),void(this.webVR=null);this.webVR||(this.webVR=new Dh((()=>{this._requestAnimationFrame((()=>this._onTick())),this._needRender=!0,this._onResize()}))),this.webVR.enable(this._gfx)},Kh.prototype._initOnSettingsChanged=function(){const e=(e,r)=>{(e=t().isArray(e)?e:[e]).forEach((e=>{this.settings.addEventListener(`change:${e}`,r)}))};e("modes.VD.frame",(()=>{const e=this._getVolumeVisual();null!==e&&(e.showFrame(z.now.modes.VD.frame),this._needRender=!0)})),e("modes.VD.isoMode",(()=>{const e=this._getVolumeVisual();null!==e&&(e.getMesh().material.updateDefines(),this._needRender=!0)})),e("bg.color",(()=>{this._onBgColorChanged()})),e("ao",(()=>{const e={normalsToGBuffer:z.now.ao};this._setUberMaterialValues(e)})),e("zSprites",(()=>{this.rebuildAll()})),e("fogColor",(()=>{this._onFogColorChanged()})),e("fogColorEnable",(()=>{this._onFogColorChanged()})),e("bg.transparent",(e=>{const t=this._gfx;t&&t.renderer.setClearColor(z.now.bg.color,Number(!z.now.bg.transparent)),this._updateMaterials({fogTransparent:e.value}),this.rebuildAll()})),e("draft.clipPlane",(e=>{this._updateMaterials({clipPlane:e.value}),this.rebuildAll()})),e("shadow.on",(e=>{const t={shadowmap:e.value,shadowmapType:z.now.shadow.type},r=this._gfx;r&&(r.renderer.shadowMap.enabled=Boolean(t.shadowmap)),this._updateMaterials(t,!0),t.shadowmap?(this._updateShadowCamera(),this._updateShadowmapMeshes(Bo.createShadowmapMaterial)):this._updateShadowmapMeshes(Bo.removeShadowmapMaterial),this._needRender=!0})),e("shadow.type",(e=>{z.now.shadow.on&&(this._updateMaterials({shadowmapType:e.value},!0),this._needRender=!0)})),e("shadow.radius",(e=>{for(let t=0;t{this._fps.show(z.now.fps)})),e(["fog","fogNearFactor","fogFarFactor"],(()=>{this._updateFog(),this._needRender=!0})),e("fogAlpha",(()=>{const{fogAlpha:e}=z.now;(e<0||e>1)&&this.logger.warn("fogAlpha must belong range [0,1]"),this._fogAlphaChanged(),this._needRender=!0})),e("autoResolution",(e=>{e.value&&!this._gfxScore&&this.logger.warn("Benchmarks are missed, autoresolution will not work! Autoresolution should be set during miew startup.")})),e("stereo",(()=>{this._embedWebXR("WEBVR"===z.now.stereo),this._needRender=!0})),e(["transparency","palette"],(()=>{this.rebuildAll()})),e("resolution",(()=>{this.rebuildAll();const e=this._getVolumeVisual();e&&(e.getMesh().material.updateDefines(),this._needRender=!0)})),e(["axes","fxaa","ao","outline.on","outline.color","outline.threshold","outline.thickness"],(()=>{this._needRender=!0}))},Kh.prototype.set=function(e,t){z.set(e,t)},Kh.prototype.select=function(e,r){const n=this._getComplexVisual();if(!n)return;let s=e;t().isString(e)&&(s=kh.parse(e).selector),n.select(s,r),this._lastPick=null,this._updateInfoPanel(),this._needRender=!0};Kh.prototype.view=function(e){const t=this,{pivot:n}=this._gfx;let s=[];return void 0===e?function(){const e=n.position,i=t._objectControls.getScale()/z.now.radiusToFit,o=new r.Euler;return o.setFromQuaternion(t._objectControls.getOrientation(),"ZXY"),s=[e.x,e.y,e.z,i,o.x,o.y,o.z],"1"+O.arrayToBase64(s,Float32Array)}():(function(){40===e.length&&(e=`0${e}`);const i=e[0];if(s=O.arrayFromBase64(e.substr(1),Float32Array),"1"!==i){if("0"!==i)return void t.logger.warn(`Encoded view version mismatch, stored as ${i} vs 1 expected`);s[3]/=8}const o=t._interpolator,a=o.createView();a.position.copy(n.position),a.scale=t._objectControls.getScale(),a.orientation.copy(t._objectControls.getOrientation());const l=o.createView();l.position.set(s[0],s[1],s[2]),t._getComplexVisual()&&l.position.sub(t._getComplexVisual().position),l.scale=s[3],l.orientation.setFromEuler(new r.Euler(s[4],s[5],s[6],"ZXY")),o.setup(a,l)}(),e)},Kh.prototype._updateView=function(){const e=this,{pivot:t}=this._gfx,r=this._interpolator;if(r.wasStarted()||r.start(),!r.isMoving())return;const n=r.getCurrentView();if(n.success){const r=n.view;t.position.copy(r.position),e._objectControls.setScale(r.scale*z.now.radiusToFit),e._objectControls.setOrientation(r.orientation),this.dispatchEvent({type:"transform"}),e._needRender=!0}},Kh.prototype.translate=function(e,t,r){this._objectControls.translatePivot(e,t,r),this.dispatchEvent({type:"transform"}),this._needRender=!0},Kh.prototype.rotate=function(e,t,n){this._objectControls.rotate((new r.Quaternion).setFromEuler(new r.Euler(e,t,n,"XYZ"))),this.dispatchEvent({type:"transform"}),this._needRender=!0},Kh.prototype.scale=function(e){if(e<=0)throw new RangeError("Scale should be greater than zero");this._objectControls.scale(e),this.dispatchEvent({type:"transform"}),this._needRender=!0},Kh.prototype.center=function(e){if(void 0===e)return this.setPivotSubset(),void(this._needRender=!0);if(void 0!==e.obj&&("atom"in e.obj||"residue"in e.obj))return"atom"in e.obj?this.setPivotAtom(e.obj.atom):this.setPivotResidue(e.obj.residue),void(this._needRender=!0);if(void 0===e.obj&&""!==e){const t=kh.parse(e);if(void 0===t.error)return this.setPivotSubset(t),void(this._needRender=!0)}this.resetPivot(),this._needRender=!0},Kh.prototype.within=function(e,t){const r=this._getComplexVisual();if(!r)return kh.None();e instanceof String&&(e=kh.parse(e));const n=r.within(e,t);return n&&(r.rebuildSelectionGeometry(),this._needRender=!0),n},Kh.prototype.projected=function(e,t){const r=this._getComplexVisual(t);if(!r)return!1;const n=r.getComplex().getAtomByFullname(e);if(null===n)return!1;const s=n.position.clone();return this._gfx.pivot.updateMatrixWorldRecursive(),this._gfx.camera.updateMatrixWorldRecursive(),this._gfx.pivot.localToWorld(s),s.project(this._gfx.camera),{x:.5*(s.x+1)*this._gfx.width,y:.5*(1-s.y)*this._gfx.height}},Kh.prototype.dssp=function(e){const t=this._getComplexVisual(e);t&&(t.getComplex().dssp(),t._reprList.forEach((e=>{"CA"!==e.mode.id&&"SS"!==e.colorer.id||(e.needsRebuild=!0)})))},Kh.prototype.exportCML=function(){const e=this;const t=e._getComplexVisual(),n=t?t.getComplex():null;if(n&&n.originalCML){!function(t){const{root:n}=e._gfx,s=function(e){const t=new r.Vector3,n=new r.Vector3,s=new r.Vector3;e.extractBasis(t,n,s),t.normalize(),n.normalize(),s.normalize();const i=new r.Matrix4;return i.identity(),i.makeBasis(t,n,s),i}(n.matrixWorld),i=new r.Vector4(0,0,0,0),o=new r.Vector4(0,0,0,0);let a=null,l=null;t.forEachAtom((e=>{e.xmlNodeRef&&e.xmlNodeRef.xmlNode&&(a=e.xmlNodeRef.xmlNode,l=e.position,i.set(l.x,l.y,l.z,1),i.applyMatrix4(s),a.setAttribute("x3",i.x.toString()),a.setAttribute("y3",i.y.toString()),a.setAttribute("z3",i.z.toString()),a.removeAttribute("x2"),a.removeAttribute("y2"))})),t.forEachSGroup((e=>{if(e.xmlNodeRef&&e.xmlNodeRef.xmlNode){a=e.xmlNodeRef.xmlNode,l=e.getPosition(),i.set(l.x,l.y,l.z,1);const t=e.getCentralPoint();null===t?i.applyMatrix4(s):(o.set(t.x,t.y,t.z,0),i.add(o),i.applyMatrix4(s),o.set(t.x,t.y,t.z,1),o.applyMatrix4(s),i.sub(o)),a.setAttribute("x",i.x.toString()),a.setAttribute("y",i.y.toString()),a.setAttribute("z",i.z.toString())}}))}(n);return(new XMLSerializer).serializeToString(n.originalCML)}return null},Kh.prototype.motm=function(){z.set({fogColorEnable:!0,fogColor:0,outline:{on:!0,threshold:.01},bg:{color:16777215}}),this._forEachComplexVisual((e=>{const t=[],r=e.getComplex(),n=so.get(z.now.palette);for(let e=0;e #aromatic radius"," atom = #atom radius"," bond = #bond radius"," multibond = #use multibond"," showarom = #show aromatic"," space = #space value\n"]},CA:{$help:[" Cartoon"," arrow = #arrow size"," depth = #depth of surface"," heightSegmentsRatio = "," radius = #tube radius"," tension = #"," width = #secondary width\n"]},LN:{$help:[" Lines"," atom = #atom radius"," chunkarom = "," multibond = #use multibond"," showarom = #show aromatic"," offsarom = \n"]},LC:{$help:[" Licorice"," aromrad = #aromatic radius"," bond = #bond radius"," multibond = #use multibond"," showarom = #show aromatic"," space = #space value\n"]},VW:{$help:[" Van der Waals"," nothing\n"]},TR:{$help:[" Trace"," radius = #tube radius\n"]},TU:{$help:[" Tube"," heightSegmentsRatio = "," radius = #tube radius"," tension = \n"]},SA:{$help:[" Surface"," zClip = #clip z plane\n"]},QS:{$help:[" Quick surface"," isoValue = "," scale = "," wireframe = "," zClip = #clip z plane\n"]},SE:{$help:[" Solvent excluded surface"," zClip = #clip z plane\n"]},TX:{$help:[" Text mode",' template = string that can include "{{ id }}"'," it will be replaced by value, id can be one of next:"," serial, name, type, sequence, residue, chain, hetatm, water\n",' horizontalAlign = {"left", "right", "center"}',' verticalAlign = {"top", "bottom", "middle"}'," dx = #offset along x"," dy = #offset along y"," dz = #offset along z"," fg = #text color modificator"," could be keyword, named color or hex"," fg = #back color modificator"," could be keyword, named color or hex"," showBg = #if set show background"," plate under text"]}},iu={$help:["Coloring mode shortcut"," EL - color by element"," CH - color by chain"," SQ - color by sequence"," RT - color by residue type"," SS - color by secondary structure"," UN - uniform"],UN:{$help:["Parameters of coloring modes customization"," Uniform"," color = #RGB->HEX->dec\n"],color:{$help:Object.keys(so.get(z.now.palette).namedColors).sort().join("\n")}}},ou={$help:["Material shortcut"," DF - diffuse"," TR - transparent"," SF - soft plastic"," PL - glossy plastic"," ME - metal"," GL - glass"]},au={$help:["Short (packed) representation description as a set of variables"," s="," selector property"," m=[!:[,...]]"," render mode property"," c=[!:[,...]]"," color mode property"," mt="," material property"],s:{$help:"Selection expression string as it is in menu->representations->selection"},m:su,c:iu,mt:ou},lu={$help:["Parameters of rendering modes customization: modes","Parameters of colorer customization: colorers","Autobuild: autobuild = (|)"],modes:su,colorers:iu},cu={$help:["help (| )","You can get detailed information about command options",' using "help cmd.opt.opt.[...]"\n'," you can use one line comments"," everything started from (#|//) will be skipped"," Example: >build //some comment\n","List of available commands:"],reset:{$help:["Reload current object, delete all representations"," Nothing will work until load new object"]},load:{$help:["load (||-f [<*.NC FILE URL STRING>])"," Load new pdb object from selected source"],PDBID:{$help:"pdb id in remote molecule database"},URL:{$help:"url to source file"},f:{$help:["open file system dialog to fetch local file","optionally you can determine trajectory file","via URL for *.top model"]}},clear:{$help:"No args. Clear terminal"},add:{$help:["add [] []"," Add new item to representation set with"," default or params"],REP_NAME:{$help:"Identifier string [_,a-z,A-Z,0-9] can not start from digit"},DESCRIPTION:au},rep:{$help:["rep [|] []"," set current representation by name or index"," edit current representation by "],REP_NAME:{$help:["Identifier string [_,a-z,A-Z,0-9] can not start from digit","Must be declared before"]},REP_INDEX:{$help:"Index of available representation"},DESCRIPTION:au},remove:{$help:["remove (|)","Remove representation by name or index"],REP_NAME:{$help:["Identifier string [_,a-z,A-Z,0-9] can not start from digit","Must be declared before"]},REP_INDEX:{$help:"Index of available representation"}},selector:{$help:["selector "," set selector from EXPRESSION to current representation"],EXPRESSION:{$help:"Selection expression string as it is in menu->representations->selection"}},mode:{$help:["mode [=...]"," set rendering mode and apply parameters to current representation"],MODE_ID:su},color:{$help:["color [=...]"," set colorer and apply parameters to current representation"],COLORER_ID:iu},material:{$help:["material "," set material to current representation"],MATERIAL_ID:ou},build:{$help:"build help str",add:{$help:"build.add",new:{$help:["add.new","add.new new line 1","add.new new line 2","add.new new line 3"]}},del:{$help:"build.del"}},list:{$help:["list [-e|-s||]","Print representations if no args print list of representations"," -e expand list and show all representations"," -s show all user-registered selectors"," | show only current representation"]},hide:{$help:["hide (|)","Hide representation referenced in args"]},show:{$help:["show (|)","Show representation referenced in args"]},get:{$help:["get ","Print value"," - path to option use get.PARAMETER to get more info"],PARAMETER:lu},set:{$help:["set ","Set with "," - path to option use set.PARAMETER to get more info"],PARAMETER:lu},set_save:{$help:["set_save","Save current settings to cookie"]},set_restore:{$help:["set_restore","Load and apply settings from cookie"]},set_reset:{$help:["set_reset","Reset current settings to the defaults"]},preset:{$help:["preset []","Reset current representation or set preset to "],PRESET:{$help:["default","wire","small","macro"]}},unit:{$help:["unit []","Change current biological structure view. Zero value means asymmetric unit,","positive values set an assembly with corresponding number.","Being called with no parameters command prints current unit information."]},view:{$help:["view []","Get current encoded view or set if ENCODED_VIEW placed as argument"],ENCODED_VIEW:{$help:["encoded view matrix string (binary code)"]}},rotate:{$help:["rotate (x|y|z) [] [(x|y|z) []]...","Rotate scene"]},scale:{$help:["scale ","Scale scene"]},select:{$help:["select [as ]","Select atoms using selector defined in SELECTOR_STRING"," and if SELECTOR_NAME is defined register it in viewer"," you can use it later as a complex selector"]},within:{$help:["within of as ","Build within named selector"," DISTANCE "," SELECTOR_STRING "," SELECTOR_NAME "]},url:{$help:["url [-s] [-v]","Report URL encoded scene"," if -s set that include settings in the URL"," if -v set that include view in the URL"]},screenshot:{$help:["screenshot [ []]","Make a screenshot of the scene"," WIDTH in pixels"," HEIGHT in pixels, equal to WIDTH by default"]},line:{$help:["line [=]","Draw dashed line between two specified atoms"]},removeobj:{$help:["removeobj ","Remove scene object by its index. Indices could be obtained by command"]},listobj:{$help:["listobj","Display the list of all existing scene objects"]}},{chem:{selectors:hu},modes:uu,colorers:du,materials:pu,palettes:mu,options:fu,settings:_u}=ru;function gu(){}const yu=function(){const e=new gu;return function(){return e}}();const xu=new class{constructor(){this.representationMap={},this.representationID={}}get(e){return this.representationMap[e]||this.representationID[e]||""}add(e,t){if(-1===e)return"Can not create representation: there is no data";if(void 0!==t){if(this.representationMap.hasOwnProperty(e))return"This name has already existed, registered without name";this.representationMap[e.toString()]=t,this.representationID[t]=e.toString()}return`Representation ${e} successfully added`}remove(e){e&&this.representationID.hasOwnProperty(e)&&(delete this.representationMap[this.representationID[e]],delete this.representationID[e]);const t=Object.keys(this.representationID).sort();for(const r in t)if(t.hasOwnProperty(r)){const n=t[r];n>e&&(this.representationID[n-1]=this.representationID[n],this.representationMap[this.representationID[n]]-=1,delete this.representationID[n])}}clear(){this.representationMap={},this.representationID={}}};function bu(e){const t={s:"selector",m:"mode",c:"colorer",mt:"material",mode:"modes",color:"colorers",colorer:"colorers",select:"selector",material:"materials",selector:"selector"}[e];return void 0===t?e:t}const wu=new class{list(e,t,r){let n="";if(e&&void 0!==t&&(void 0===r||"-e"===r)){const s=e.repCount();for(let i=0;i"===a?"":`, ${a}`}\n`,void 0!==n&&(s+=` selection : "${h}"\n`,s+=` mode : (${l.id}), ${l.name}\n`,s+=` colorer : (${c.id}), ${c.name}\n`,s+=` material : (${u.id}), ${u.name}\n`),s}listSelector(e,t){let r="";for(const e in t)t.hasOwnProperty(e)&&(r+=`${e} : "${t[e]}"\n`);return r}listObjs(e){const t=e._objects;if(!t||!Array.isArray(t)||0===t.length)return"There are no objects on the scene";const r=[];for(let e=0,n=t.length;ee.finishAwaitingCMDInProcess();e.load(t).then(r,r)}checkArg(e,t,r){if(void 0!==e&&void 0!==t){if("selector"===bu(e)){const e=hu.parse(t);if(void 0!==e.error){throw{message:e.error}}return void 0!==r&&r?e.selector:t}const n={colorers:du,modes:uu,materials:pu};let s,i=e;for(;i!==s;)s=i,i=bu(s);if(void 0===n[i].get(t)){throw{message:`${t} is not existed in ${i}`}}return t}return yu}propagateProp(e,r){if(void 0!==e){let n={};const s=fu.adapters[typeof t().get(_u.defaults,e)];if(void 0===s){throw{message:`${e} is not existed`}}if((e.endsWith(".color")||e.endsWith(".baseColor")||e.endsWith(".EL.carbon"))&&"number"!=typeof r&&(r=mu.get(_u.now.palette).getNamedColor(r)),e.endsWith(".fg")||e.endsWith(".bg"))if("number"!=typeof r){const e=mu.get(_u.now.palette).getNamedColor(r,!0);void 0!==e&&(r=`0x${e.toString(16)}`)}else r=`0x${r.toString(16)}`;if(e.endsWith(".template")&&(r=r.replace(/\\n/g,"\n")),void 0!==r&&s(r)!==r&&s(r)!==r>0)throw n={message:`${e} must be a "${typeof t().get(_u.defaults,e)}"`},n}return r}unquoteString(e){return O.unquoteString(e)}};function Su(e){if(e instanceof this.constructor)return e;this._values=e instanceof Array?e.slice(0):e?[e]:[]}Su.prototype.append=function(e){const t=this._values;return t[t.length]=e,this},Su.prototype.remove=function(e){const t=this._values,r=t.indexOf(e);return r>=0&&t.splice(r,1),this},Su.prototype.toJSO=function(e,r,n){const s={},i=this._values;for(let o=0,a=i.length;o0},ru.prototype.callNextCmd=function(){if(this.isScriptingCommandAvailable()){const e=this.cmdQueue.shift(),t={success:!1};try{nu.parser.parse(e),t.success=!0}catch(e){t.error=e.message,nu.parser.yy.error(t.error),this.finishAwaitingCMDInProcess()}return t}return""},nu.parser.yy=vu,nu.parser.yy.parseError=nu.parser.parseError;const Cu=ru})(),i=i.default})())); //# sourceMappingURL=Miew.min.js.map \ No newline at end of file diff --git a/packages/miew/dist/Miew.min.js.map b/packages/miew/dist/Miew.min.js.map index 9dda1219..eb4475eb 100644 --- a/packages/miew/dist/Miew.min.js.map +++ b/packages/miew/dist/Miew.min.js.map @@ -1 +1 @@ -{"version":3,"file":"dist/Miew.min.js","mappings":";CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,EAAQG,QAAQ,UAAWA,QAAQ,UAC3B,mBAAXC,QAAyBA,OAAOC,IAC9CD,OAAO,CAAC,SAAU,SAAUJ,GACF,iBAAZC,QACdA,QAAc,KAAID,EAAQG,QAAQ,UAAWA,QAAQ,UAErDJ,EAAW,KAAIC,EAAQD,EAAQ,EAAGA,EAAY,MAC/C,CATD,CASGO,MAAM,CAACC,EAAkCC,IAC5C,M,cCiEA,IAAIC,EAAU,WACd,IAAIC,EAAE,SAASC,EAAEC,EAAEF,EAAEG,GAAG,IAAIH,EAAEA,GAAG,CAAC,EAAEG,EAAEF,EAAEG,OAAOD,IAAIH,EAAEC,EAAEE,IAAID,GAAG,OAAOF,CAAC,EAAEK,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,GAAI,CAAC,EAAE,IAAIC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAK,CAAC,EAAE,KAAKC,GAAK,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAKC,GAAK,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,G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AG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,IACvnCC,cAAe,SAAmBC,EAAQC,EAAQC,EAAUP,EAAIQ,EAAyBC,EAAiBC,GAG1G,IAAIC,EAAKF,EAAGlF,OAAS,EACrB,OAAQiF,GACR,KAAK,EACJ,OAAOC,EAAGE,EAAG,GAEd,KAAK,EACL5F,KAAK6F,EAAIZ,EAAGa,KAAKC,OAAM,GAAQd,EAAGe,eAAgBf,EAAGa,KAAKG,UAAU,SACpE,MACA,KAAK,EACLjG,KAAK6F,EAAIZ,EAAGa,KAAKI,UACjB,MACA,KAAK,EACLlG,KAAK6F,EAAIZ,EAAGa,KAAKK,aAAclB,EAAGa,KAAKI,UACvC,MACA,KAAK,EACLlG,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGoB,MAAMC,OAAOC,YACjC,MACA,KAAK,EACLvG,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGoB,MAAMC,KAAKZ,EAAGE,IAAKW,YACvC,MACA,KAAK,EACLvG,KAAK6F,EAAIZ,EAAGa,KAAKU,OACjB,MACA,KAAK,GAAI,KAAK,GACdxG,KAAK6F,EAAIZ,EAAGoB,MAAMI,cAAcf,EAAGE,IAAMX,EAAGmB,KAAKnB,EAAGa,KAAKY,IAAIhB,EAAGE,IAAKW,YACrE,MACA,KAAK,GAAI,KAAK,GACdvG,KAAK6F,EAAIZ,EAAGa,KAAKa,IAAIjB,EAAGE,EAAG,GAAIX,EAAGoB,MAAMI,cAAcf,EAAGE,EAAG,GAAIF,EAAGE,KACnE,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGa,KAAKc,eACjB,MACA,KAAK,GACL5G,KAAK6F,EAAIZ,EAAGa,KAAKe,kBACjB,MACA,KAAK,GACL7G,KAAK6F,EAAIZ,EAAGa,KAAKgB,gBACjB,MACA,KAAK,GACL9G,KAAK6F,EAAIZ,EAAGa,KAAKG,YACjB,MACA,KAAK,GACLjG,KAAK6F,EAAIZ,EAAGa,KAAKiB,YAAYrB,EAAGE,IAChC,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGa,KAAKkB,UAAUtB,EAAGE,IAAMX,EAAGgC,gBAAgBC,OAAOxB,EAAGE,IACjE,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGa,KAAKqB,QAAQzB,EAAGE,IAC5B,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGa,KAAKqB,QAAQzB,EAAGE,IAAK,GACjC,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGoB,MAAMe,QAAQnC,EAAGa,KAAMb,EAAGgC,gBAAiBvB,EAAGE,GAAK,OACvE,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGoB,MAAMgB,KAAKpC,EAAGa,KAAMb,EAAGgC,kBAC3C,MACA,KAAK,GACLjH,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGoB,MAAMgB,KAAKpC,EAAGa,KAAMb,EAAGgC,gBAAiBvB,EAAGE,KAC/D,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGoB,MAAMiB,aAAarC,EAAGa,KAAMb,EAAGsC,UACnD,MACA,KAAK,GACLvH,KAAK6F,EAAIZ,EAAGa,KAAK0B,OAAOvC,EAAGoB,MAAMoB,SAAS/B,EAAGE,EAAG,GAAG8B,cAAehC,EAAGE,IAAK,IAC1E,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGsC,QAAQ7B,EAAGE,GAAI8B,eAAiBzC,EAAGoB,MAAMoB,SAAS/B,EAAGE,EAAG,GAAG8B,cAAehC,EAAGE,EAAG,IAAI,GAAOX,EAAGa,KAAK0B,OAAOvC,EAAGsC,QAAQ7B,EAAGE,GAAI8B,gBACxI,MACA,KAAK,GACL1H,KAAK6F,EAAIZ,EAAGa,KAAK6B,IAAI1C,EAAGa,KAAK8B,aAAc,CAACC,SAAW5C,EAAGoB,MAAMoB,SAAS/B,EAAGE,EAAG,GAAG8B,cAAehC,EAAGE,MACpG,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGsC,QAAQ7B,EAAGE,GAAI8B,eAAiBzC,EAAGa,KAAKgC,OAAO7C,EAAGoB,MAAMoB,SAAS,SAAU/B,EAAGE,EAAG,IAAI,GAAOmC,OAAOrC,EAAGE,EAAG,KACrH,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGa,KAAK6B,IAAI1C,EAAGa,KAAK8B,aAAc,CAACI,SAAW/C,EAAGoB,MAAMoB,SAAS/B,EAAGE,EAAG,GAAG8B,cAAehC,EAAGE,GAAIqC,iBACxG,MACA,KAAK,GACLjI,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGa,KAAKoC,QACzB,MACA,KAAK,GAAI,KAAK,GACdlI,KAAK6F,EAAIZ,EAAGa,KAAKoC,KAAKxC,EAAGE,IACzB,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGa,KAAKqC,cACzB,MACA,KAAK,GACLnI,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGa,KAAKqC,WAAWzC,EAAGE,KACvC,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGa,KAAKsC,OACjB,MACA,KAAK,GACLpI,KAAK6F,EAAIZ,EAAGa,KAAKuC,MAAM3C,EAAGE,IAC1B,MACA,KAAK,GACJ,IAAK,IAAI0C,EAAI,EAAGC,EAAI7C,EAAGE,GAAIpF,OAAQ8H,EAAIC,EAAGD,IAAMrD,EAAGa,KAAK0C,OAAO9C,EAAGE,GAAI0C,GAAM,EAAIG,KAAKC,GAAK,IAAOhD,EAAGE,GAAI0C,GAAM,EAAIG,KAAKC,GAAK,IAAOhD,EAAGE,GAAI0C,GAAM,EAAIG,KAAKC,GAAK,KAC/J,MACA,KAAK,GACJ,IAASJ,EAAI,EAAGC,EAAI7C,EAAGE,GAAIpF,OAAQ8H,EAAIC,EAAGD,IAAMrD,EAAGa,KAAK6C,UAAUjD,EAAGE,GAAI0C,GAAM,GAAK,EAAG5C,EAAGE,GAAI0C,GAAM,GAAK,EAAG5C,EAAGE,GAAI0C,GAAM,GAAK,GAC/H,MACA,KAAK,GACLtI,KAAK6F,EAAIZ,EAAGa,KAAK8C,SACjB,MACA,KAAK,GACL5I,KAAK6F,EAAIZ,EAAGa,KAAK8C,OAAOlD,EAAGE,IAC3B,MACA,KAAK,GAAI,KAAK,GACd5F,KAAK6F,EAAIZ,EAAGa,KAAK+C,UAAU,CAACC,KAAM,OAAQC,OAAQ,CAACrD,EAAGE,EAAG,GAAIF,EAAGE,MAAO,GACvE,MACA,KAAK,GAAI,KAAK,GACd5F,KAAK6F,EAAIZ,EAAGa,KAAK+C,UAAU,CAACC,KAAM,OAAQC,OAAQ,CAACrD,EAAGE,EAAG,GAAIF,EAAGE,EAAG,IAAKoD,KAAKtD,EAAGE,GAAIqD,MAAMhE,EAAGoB,MAAO,UAAW,UAAU,GACzH,MACA,KAAK,GACLrG,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGoB,MAAM6C,SAASjE,EAAGa,OACtC,MACA,KAAK,GACL9F,KAAK6F,EAAIZ,EAAGa,KAAKqD,aAAazD,EAAGE,IACjC,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGa,KAAKsD,OAAO,CAAClB,MAAM,EAAOmB,UAAU,KACxD,MACA,KAAK,GACLrJ,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGa,KAAKsD,OAAO,CAAClB,MAAM,EAAOmB,UAAU,KACxD,MACA,KAAK,GACLrJ,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGa,KAAKsD,OAAO,CAAClB,MAAM,EAAOmB,UAAU,KACxD,MACA,KAAK,GAAI,KAAK,GACdrJ,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGa,KAAKsD,OAAO,CAAClB,MAAM,EAAOmB,UAAU,KACxD,MACA,KAAK,GACLrJ,KAAK6F,EAAIZ,EAAGa,KAAKwD,iBACjB,MACA,KAAK,GACLtJ,KAAK6F,EAAIZ,EAAGa,KAAKwD,eAAe,GAAIvB,OAAOrC,EAAGE,KAC9C,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGa,KAAKwD,eAAe,GAAIvB,OAAOrC,EAAGE,EAAG,IAAKmC,OAAOrC,EAAGE,KAChE,MACA,KAAK,GAAI,KAAK,GAAI,KAAK,GACvB5F,KAAK6F,EAAIZ,EAAGoB,MAAMkD,KAAKtE,EAAGa,KAAMJ,EAAGE,IAAMX,EAAGgC,gBAAgBuC,QAC5D,MACA,KAAK,GACLxJ,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGgC,gBAAgBwC,IAAIxE,EAAGa,KAAK4D,WAChD,MACA,KAAK,GACL1J,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGgC,gBAAgBwC,IAAI/D,EAAGE,GAAKX,EAAGa,KAAK4D,WACxD,MACA,KAAK,GACL1J,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGgC,gBAAgBwC,IAAIxE,EAAGa,KAAK4D,OAAOhE,EAAGE,MAC1D,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGmB,KAAKnB,EAAGgC,gBAAgBwC,IAAI/D,EAAGE,EAAG,GAAIX,EAAGa,KAAK4D,OAAOhE,EAAGE,MACpE,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGa,KAAK6B,IAAIjC,EAAGE,IAAMX,EAAGa,KAAK8B,WAAWlC,EAAGE,IACpD,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGa,KAAK6B,IAAIjC,EAAGE,EAAG,GAAIF,EAAGE,IAAMX,EAAGa,KAAK8B,WAAWlC,EAAGE,EAAG,IACjE,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAGa,KAAK6B,IAAI1C,EAAGa,KAAK8B,aAAc,CAAC+B,KAAO1E,EAAGoB,MAAMoB,SAAS/B,EAAGE,EAAG,GAAG8B,cAAehC,EAAGE,GAAIqC,iBACpG,MACA,KAAK,GACLjI,KAAK6F,EAAIZ,EAAGa,KAAK6B,IAAI1C,EAAGa,KAAK8B,aAAc,CAAC+B,KAAO,IAAIC,MAAM3E,EAAGoB,MAAMoB,SAAS/B,EAAGE,EAAG,GAAG8B,cAAehC,EAAGE,EAAG,GAAGqC,eAAgBvC,EAAGE,GAAIqD,MAAMhE,EAAGoB,MAAOX,EAAGE,EAAG,GAAIF,EAAGE,EAAG,GAAGqC,kBAC1K,MACA,KAAK,GACLjI,KAAK6F,EAAIZ,EAAGa,KAAK6B,IAAI1C,EAAGa,KAAK8B,aAAc,CAACiC,QAAU5E,EAAGoB,MAAMoB,SAAS/B,EAAGE,EAAG,GAAG8B,cAAehC,EAAGE,GAAIqC,iBACvG,MACA,KAAK,GACLjI,KAAK6F,EAAIZ,EAAGa,KAAK6B,IAAI1C,EAAGa,KAAK8B,aAAc,CAACiC,QAAU,IAAID,MAAM3E,EAAGoB,MAAMoB,SAAS/B,EAAGE,EAAG,GAAG8B,cAAehC,EAAGE,EAAG,GAAGqC,eAAgBvC,EAAGE,GAAIqD,MAAMhE,EAAGoB,MAAOX,EAAGE,EAAG,GAAIF,EAAGE,EAAG,GAAGqC,kBAC7K,MACA,KAAK,GACLjI,KAAK6F,EAAIkC,OAAO9C,EAAGgC,gBAAgBP,IAAIhB,EAAGE,KAC1C,MACA,KAAK,GAAI,KAAK,GACd5F,KAAK6F,EAAIkC,OAAOrC,EAAGE,IACnB,MACA,KAAK,GACL5F,KAAK6F,EAAIH,EAAGE,GACZ,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAG6E,EAAEC,OAAOrE,EAAGE,EAAG,GAAIF,EAAGE,IAClC,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAG6E,EAAEC,OAAOrE,EAAGE,EAAG,GAAIF,EAAGE,EAAG,GAAIF,EAAGE,IAC5C,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAG6E,EAAEC,OAAOrE,EAAGE,EAAG,GAAIF,EAAGE,EAAG,GAAIF,EAAGE,EAAG,GAAIF,EAAGE,IACtD,MACA,KAAK,GAAI,KAAK,GACd5F,KAAK6F,EAAIZ,EAAG+E,iBAAiBtE,EAAGE,GAAIqE,IAAKvE,EAAGE,GAAIsE,KAChD,MACA,KAAK,GACLlK,KAAK6F,EAAIZ,EAAG+E,iBAAiBtE,EAAGE,EAAG,GAAGqE,IAAK,IAAIL,MAAMlE,EAAGE,EAAG,GAAGsE,IAAKxE,EAAGE,GAAIqD,MAAMhE,EAAGoB,MAAOX,EAAGE,EAAG,GAAGqE,IAAKvE,EAAGE,EAAG,GAAGsE,OACjH,MACA,KAAK,GAAI,KAAK,GACdlK,KAAK6F,EAAIsE,OAAOC,OAAO,CAAC,IAAOnF,EAAGoF,SAAS3E,EAAGE,EAAG,IAAK,IAAOX,EAAGoB,MAAMoB,SAAS/B,EAAGE,EAAG,GAAIF,EAAGE,MAC5F,MACA,KAAK,GACL5F,KAAK6F,EAAI,CAACH,EAAGE,IACb,MACA,KAAK,GACL5F,KAAK6F,EAAIH,EAAGE,EAAG,GAAG0E,OAAO5E,EAAGE,IAC5B,MACA,KAAK,GACL5F,KAAK6F,EAAIZ,EAAG+E,iBAAiBtE,EAAGE,EAAG,GAAG8B,cAAeK,OAAOrC,EAAGE,KAC/D,MACA,KAAK,GACL5F,KAAK6F,EAAI,IAAIZ,EAAGsF,QAAQ7E,EAAGE,IAC3B,MACA,KAAK,GACL5F,KAAK6F,EAAIH,EAAGE,EAAG,GAAG4E,OAAO9E,EAAGE,IAC5B,MACA,KAAK,GACL5F,KAAK6F,EAAI,IAAIZ,EAAGwF,IAAI/E,EAAGE,EAAG,GAAIF,EAAGE,IACjC,MACA,KAAK,GACL5F,KAAK6F,EAAI6E,SAAShF,EAAGE,IACrB,MACA,KAAK,GACL5F,KAAK6F,EAAI8E,KAAKC,MAAMlF,EAAGE,IACvB,MACA,KAAK,GAAI,KAAK,GACd5F,KAAK6F,EAAIgF,OAAOnF,EAAGE,IACnB,MACA,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAC7C5F,KAAK6F,EAAIH,EAAGE,EAAG,GAAKF,EAAGE,EAAG,GAAKF,EAAGE,GAClC,MACA,KAAK,IACL5F,KAAK6F,EAAIH,EAAGE,EAAG,GAAKF,EAAGE,EAAG,GAAKF,EAAGE,EAAG,GAAKF,EAAGE,GAG7C,EACAkF,MAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,EAAErK,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAErD,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAG,IAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,KAAK,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAK,CAAC,EAAErD,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAG,IAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,KAAK,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAGC,GAAI,GAAG,IAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,IAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,GAAGC,GAAI,GAAGC,IAAK,CAAC,GAAG,IAAI,GAAGD,GAAI,GAAGC,IAAK,CAAC,GAAG,IAAI,GAAGD,GAAI,GAAGC,IAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAGD,GAAI,GAAGC,IAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,GAAGC,IAAK,CAAC,GAAG,IAAI,GAAG,IAAI,GAAGA,IAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE7D,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAG,IAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,KAAK,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAGS,GAAI,GAAGC,IAAK,CAAC,GAAG,IAAI,GAAGJ,GAAI,GAAGC,IAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,IAAII,IAAMrE,EAAEsE,GAAK,CAAC,EAAE,MAAMtE,EAAEsE,GAAK,CAAC,EAAE,MAAMtE,EAAEuE,GAAK,CAAC,EAAE,KAAKvE,EAAEuE,GAAK,CAAC,EAAE,KAAKvE,EAAEsE,GAAK,CAAC,EAAE,MAAMtE,EAAEsE,GAAK,CAAC,EAAE,MAAMtE,EAAEsE,GAAK,CAAC,EAAE,MAAMtE,EAAEsE,GAAK,CAAC,EAAE,MAAMtE,EAAEsE,GAAK,CAAC,EAAE,MAAMtE,EAAEsE,GAAK,CAAC,EAAE,MAAMtE,EAAEsE,GAAK,CAAC,EAAE,MAAMtE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,IAAIF,IAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAGV,GAAI,GAAG,IAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,GAAI,IAAIM,IAAM,CAAC,GAAGV,GAAI,GAAG,IAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,IAAK,CAAC,EAAE,CAAC,EAAE,KAAK/D,EAAEwE,GAAK,CAAC,EAAE,KAAKxE,EAAEwE,GAAK,CAAC,EAAE,KAAKxE,EAAEwE,GAAK,CAAC,EAAE,KAAKxE,EAAEwE,GAAK,CAAC,EAAE,KAAKxE,EAAEwE,GAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAKxE,EAAEyE,GAAK,CAAC,EAAE,KAAKzE,EAAEyE,GAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAGP,IAAKlE,EAAE0E,GAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAGR,IAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE7D,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAG,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAI,IAAIW,IAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAGF,GAAI,GAAGC,IAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAGD,GAAI,GAAGC,IAAKpE,EAAEyE,GAAK,CAAC,EAAE,KAAKzE,EAAEyE,GAAK,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAEpE,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAGa,GAAI,GAAGC,IAAK,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE/D,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,CAAC,EAAE,IAAI,EAAEjD,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,EAAEjD,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,KAAK,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAErD,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAK,CAAC,GAAG,CAAC,EAAE,MAAM1D,EAAE0E,GAAK,CAAC,EAAE,KAAK1E,EAAE0E,GAAK,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,EAAErE,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,CAAC,EAAE,IAAI,EAAEjD,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,IAAIe,IAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAGF,GAAI,GAAGC,IAAKpE,EAAEyE,GAAK,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAAEpE,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAMtD,EAAEwE,GAAK,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,MAAMxE,EAAE2E,GAAK,CAAC,EAAE,MAAM,CAAC,GAAGhB,GAAI,GAAG,IAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,IAAK,CAAC,GAAGJ,GAAI,GAAG,IAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,IAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE1D,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,CAAC,EAAE,IAAI,EAAEjD,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAKtD,EAAEsE,GAAK,CAAC,EAAE,MAAMtE,EAAEsE,GAAK,CAAC,EAAE,MAAMtE,EAAEsE,GAAK,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAEjE,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,CAAC,EAAE,IAAI,EAAEjD,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAGa,GAAI,GAAGC,IAAKpE,EAAEwE,GAAK,CAAC,EAAE,KAAK,CAAC,GAAGb,GAAI,GAAG,IAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,GAAI,GAAGC,IAAK,CAAC,EAAE1D,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,KAAK,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAG,GAAG,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAKtD,EAAEyE,GAAK,CAAC,EAAE,KAAKzE,EAAEwE,GAAK,CAAC,EAAE,KAAK,CAAC,EAAEnE,EAAI,EAAEC,EAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAK,CAAC,EAAE,CAAC,EAAE,KAAK1D,EAAEwE,GAAK,CAAC,EAAE,KAAKxE,EAAE2E,GAAK,CAAC,EAAE,MAAM3E,EAAE2E,GAAK,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,MAC9pVgG,eAAgB,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,KAC1hBC,WAAY,SAAqBC,EAAKC,GAClC,IAAIA,EAAKC,YAEF,CACH,IAAIC,EAAQ,IAAIC,MAAMJ,GAEtB,MADAG,EAAMF,KAAOA,EACPE,CACV,CALIpL,KAAKgF,MAAMiG,EAMnB,EACAL,MAAO,SAAeU,GAClB,IAAIC,EAAOvL,KAAMwL,EAAQ,CAAC,GAAIC,EAAS,GAAIC,EAAS,CAAC,MAAOC,EAAS,GAAIb,EAAQ9K,KAAK8K,MAAOxF,EAAS,GAAIE,EAAW,EAAGD,EAAS,EAAGqG,EAAa,EAC7IC,EAAOF,EAAOG,MAAMC,KAAKC,UAAW,GACpCC,EAAQ9B,OAAOC,OAAOpK,KAAKiM,OAC3BC,EAAc,CAAEjH,GAAI,CAAC,GACzB,IAAK,IAAI5E,KAAKL,KAAKiF,GACXkF,OAAOgC,UAAUC,eAAeL,KAAK/L,KAAKiF,GAAI5E,KAC9C6L,EAAYjH,GAAG5E,GAAKL,KAAKiF,GAAG5E,IAGpC4L,EAAMI,SAASf,EAAOY,EAAYjH,IAClCiH,EAAYjH,GAAGgH,MAAQA,EACvBC,EAAYjH,GAAG9E,OAASH,UACG,IAAhBiM,EAAMK,SACbL,EAAMK,OAAS,CAAC,GAEpB,IAAIC,EAAQN,EAAMK,OAClBX,EAAOa,KAAKD,GACZ,IAAIE,EAASR,EAAMS,SAAWT,EAAMS,QAAQD,OACH,mBAA9BP,EAAYjH,GAAG+F,WACtBhL,KAAKgL,WAAakB,EAAYjH,GAAG+F,WAEjChL,KAAKgL,WAAab,OAAOwC,eAAe3M,MAAMgL,WAoBlD,IADA,IAAI4B,EAAQC,EAAgBC,EAAOC,EAAWC,EAAeC,EAAGC,EAAKC,EAAUC,EAXnEC,EAWqCC,EAAQ,CAAC,IAC7C,CAUT,GATAR,EAAQtB,EAAMA,EAAMhL,OAAS,GACzBR,KAAK+K,eAAe+B,GACpBC,EAAS/M,KAAK+K,eAAe+B,IAEzBF,UAjBAS,SAEiB,iBADrBA,EAAQ5B,EAAO8B,OAAStB,EAAMuB,OA9BgI,KAgCtJH,aAAiBzD,QAEjByD,GADA5B,EAAS4B,GACME,OAEnBF,EAAQ9B,EAAKrG,SAASmI,IAAUA,GAWhCT,EATGS,GAWPN,EAASjC,EAAMgC,IAAUhC,EAAMgC,GAAOF,SAEpB,IAAXG,IAA2BA,EAAOvM,SAAWuM,EAAO,GAAI,CAC/D,IAAIU,EAAS,GAEb,IAAKR,KADLG,EAAW,GACDtC,EAAMgC,GACR9M,KAAKmF,WAAW8H,IAAMA,EAvDuH,GAwD7IG,EAASZ,KAAK,IAAOxM,KAAKmF,WAAW8H,GAAK,KAI9CQ,EADAxB,EAAMyB,aACG,wBAA0BlI,EAAW,GAAK,MAAQyG,EAAMyB,eAAiB,eAAiBN,EAASO,KAAK,MAAQ,WAAc3N,KAAKmF,WAAWyH,IAAWA,GAAU,IAEnK,wBAA0BpH,EAAW,GAAK,iBA9DuG,GA8DpFoH,EAAgB,eAAiB,KAAQ5M,KAAKmF,WAAWyH,IAAWA,GAAU,KAExJ5M,KAAKgL,WAAWyC,EAAQ,CACpBG,KAAM3B,EAAM4B,MACZR,MAAOrN,KAAKmF,WAAWyH,IAAWA,EAClCkB,KAAM7B,EAAMzG,SACZuI,IAAKxB,EACLa,SAAUA,GAElB,CACA,GAAIL,EAAO,aAAcnD,OAASmD,EAAOvM,OAAS,EAC9C,MAAM,IAAI6K,MAAM,oDAAsDyB,EAAQ,YAAcF,GAEhG,OAAQG,EAAO,IACf,KAAK,EACDvB,EAAMgB,KAAKI,GACXlB,EAAOc,KAAKP,EAAM3G,QAClBqG,EAAOa,KAAKP,EAAMK,QAClBd,EAAMgB,KAAKO,EAAO,IAClBH,EAAS,KACJC,GASDD,EAASC,EACTA,EAAiB,OATjBtH,EAAS0G,EAAM1G,OACfD,EAAS2G,EAAM3G,OACfE,EAAWyG,EAAMzG,SACjB+G,EAAQN,EAAMK,OACVV,EAAa,GACbA,KAMR,MACJ,KAAK,EAwBD,GAvBAsB,EAAMlN,KAAKoF,aAAa2H,EAAO,IAAI,GACnCO,EAAMzH,EAAI6F,EAAOA,EAAOlL,OAAS0M,GACjCI,EAAM3H,GAAK,CACPqI,WAAYrC,EAAOA,EAAOnL,QAAU0M,GAAO,IAAIc,WAC/CC,UAAWtC,EAAOA,EAAOnL,OAAS,GAAGyN,UACrCC,aAAcvC,EAAOA,EAAOnL,QAAU0M,GAAO,IAAIgB,aACjDC,YAAaxC,EAAOA,EAAOnL,OAAS,GAAG2N,aAEvC1B,IACAa,EAAM3H,GAAGyI,MAAQ,CACbzC,EAAOA,EAAOnL,QAAU0M,GAAO,IAAIkB,MAAM,GACzCzC,EAAOA,EAAOnL,OAAS,GAAG4N,MAAM,UAYvB,KATjBpB,EAAIhN,KAAKqF,cAAcgJ,MAAMf,EAAO,CAChChI,EACAC,EACAC,EACA0G,EAAYjH,GACZ8H,EAAO,GACPrB,EACAC,GACFrB,OAAOuB,KAEL,OAAOmB,EAEPE,IACA1B,EAAQA,EAAMM,MAAM,GAAI,EAAIoB,EAAM,GAClCxB,EAASA,EAAOI,MAAM,GAAI,EAAIoB,GAC9BvB,EAASA,EAAOG,MAAM,GAAI,EAAIoB,IAElC1B,EAAMgB,KAAKxM,KAAKoF,aAAa2H,EAAO,IAAI,IACxCrB,EAAOc,KAAKc,EAAMzH,GAClB8F,EAAOa,KAAKc,EAAM3H,IAClBwH,EAAWrC,EAAMU,EAAMA,EAAMhL,OAAS,IAAIgL,EAAMA,EAAMhL,OAAS,IAC/DgL,EAAMgB,KAAKW,GACX,MACJ,KAAK,EACD,OAAO,EAEf,CACA,OAAO,CACX,GAIIlB,GACS,CAEbqC,IAAI,EAEJtD,WAAW,SAAoBC,EAAKC,GAC5B,IAAIlL,KAAKiF,GAAG9E,OAGR,MAAM,IAAIkL,MAAMJ,GAFhBjL,KAAKiF,GAAG9E,OAAO6K,WAAWC,EAAKC,EAIvC,EAGJmB,SAAS,SAAUf,EAAOrG,GAiBlB,OAhBAjF,KAAKiF,GAAKA,GAAMjF,KAAKiF,IAAM,CAAC,EAC5BjF,KAAKuO,OAASjD,EACdtL,KAAKwO,MAAQxO,KAAKyO,WAAazO,KAAK0O,MAAO,EAC3C1O,KAAKwF,SAAWxF,KAAKuF,OAAS,EAC9BvF,KAAKsF,OAAStF,KAAK2O,QAAU3O,KAAK6N,MAAQ,GAC1C7N,KAAK4O,eAAiB,CAAC,WACvB5O,KAAKsM,OAAS,CACV0B,WAAY,EACZE,aAAc,EACdD,UAAW,EACXE,YAAa,GAEbnO,KAAK0M,QAAQD,SACbzM,KAAKsM,OAAO8B,MAAQ,CAAC,EAAE,IAE3BpO,KAAK6O,OAAS,EACP7O,IACX,EAGJsL,MAAM,WACE,IAAIwD,EAAK9O,KAAKuO,OAAO,GAkBrB,OAjBAvO,KAAKsF,QAAUwJ,EACf9O,KAAKuF,SACLvF,KAAK6O,SACL7O,KAAK6N,OAASiB,EACd9O,KAAK2O,SAAWG,EACJA,EAAGjB,MAAM,oBAEjB7N,KAAKwF,WACLxF,KAAKsM,OAAO2B,aAEZjO,KAAKsM,OAAO6B,cAEZnO,KAAK0M,QAAQD,QACbzM,KAAKsM,OAAO8B,MAAM,KAGtBpO,KAAKuO,OAASvO,KAAKuO,OAAOzC,MAAM,GACzBgD,CACX,EAGJC,MAAM,SAAUD,GACR,IAAI5B,EAAM4B,EAAGtO,OACTwO,EAAQF,EAAGG,MAAM,iBAErBjP,KAAKuO,OAASO,EAAK9O,KAAKuO,OACxBvO,KAAKsF,OAAStF,KAAKsF,OAAO4J,OAAO,EAAGlP,KAAKsF,OAAO9E,OAAS0M,GAEzDlN,KAAK6O,QAAU3B,EACf,IAAIiC,EAAWnP,KAAK6N,MAAMoB,MAAM,iBAChCjP,KAAK6N,MAAQ7N,KAAK6N,MAAMqB,OAAO,EAAGlP,KAAK6N,MAAMrN,OAAS,GACtDR,KAAK2O,QAAU3O,KAAK2O,QAAQO,OAAO,EAAGlP,KAAK2O,QAAQnO,OAAS,GAExDwO,EAAMxO,OAAS,IACfR,KAAKwF,UAAYwJ,EAAMxO,OAAS,GAEpC,IAAIwM,EAAIhN,KAAKsM,OAAO8B,MAgBpB,OAdApO,KAAKsM,OAAS,CACV0B,WAAYhO,KAAKsM,OAAO0B,WACxBC,UAAWjO,KAAKwF,SAAW,EAC3B0I,aAAclO,KAAKsM,OAAO4B,aAC1BC,YAAaa,GACRA,EAAMxO,SAAW2O,EAAS3O,OAASR,KAAKsM,OAAO4B,aAAe,GAC5DiB,EAASA,EAAS3O,OAASwO,EAAMxO,QAAQA,OAASwO,EAAM,GAAGxO,OAChER,KAAKsM,OAAO4B,aAAehB,GAG7BlN,KAAK0M,QAAQD,SACbzM,KAAKsM,OAAO8B,MAAQ,CAACpB,EAAE,GAAIA,EAAE,GAAKhN,KAAKuF,OAAS2H,IAEpDlN,KAAKuF,OAASvF,KAAKsF,OAAO9E,OACnBR,IACX,EAGJoP,KAAK,WAEG,OADApP,KAAKwO,OAAQ,EACNxO,IACX,EAGJqP,OAAO,WACC,OAAIrP,KAAK0M,QAAQ4C,iBACbtP,KAAKyO,YAAa,EASfzO,MAPIA,KAAKgL,WAAW,0BAA4BhL,KAAKwF,SAAW,GAAK,mIAAqIxF,KAAK0N,eAAgB,CAC9NE,KAAM,GACNP,MAAO,KACPS,KAAM9N,KAAKwF,UAKvB,EAGJ+J,KAAK,SAAUhH,GACPvI,KAAK+O,MAAM/O,KAAK6N,MAAM/B,MAAMvD,GAChC,EAGJiH,UAAU,WACF,IAAIC,EAAOzP,KAAK2O,QAAQO,OAAO,EAAGlP,KAAK2O,QAAQnO,OAASR,KAAK6N,MAAMrN,QACnE,OAAQiP,EAAKjP,OAAS,GAAK,MAAM,IAAMiP,EAAKP,QAAQ,IAAIQ,QAAQ,MAAO,GAC3E,EAGJC,cAAc,WACN,IAAIC,EAAO5P,KAAK6N,MAIhB,OAHI+B,EAAKpP,OAAS,KACdoP,GAAQ5P,KAAKuO,OAAOW,OAAO,EAAG,GAAGU,EAAKpP,UAElCoP,EAAKV,OAAO,EAAE,KAAOU,EAAKpP,OAAS,GAAK,MAAQ,KAAKkP,QAAQ,MAAO,GAChF,EAGJhC,aAAa,WACL,IAAImC,EAAM7P,KAAKwP,YACXM,EAAI,IAAIlG,MAAMiG,EAAIrP,OAAS,GAAGmN,KAAK,KACvC,OAAOkC,EAAM7P,KAAK2P,gBAAkB,KAAOG,EAAI,GACnD,EAGJC,WAAW,SAASlC,EAAOmC,GACnB,IAAI3C,EACA2B,EACAiB,EAwDJ,GAtDIjQ,KAAK0M,QAAQ4C,kBAEbW,EAAS,CACLzK,SAAUxF,KAAKwF,SACf8G,OAAQ,CACJ0B,WAAYhO,KAAKsM,OAAO0B,WACxBC,UAAWjO,KAAKiO,UAChBC,aAAclO,KAAKsM,OAAO4B,aAC1BC,YAAanO,KAAKsM,OAAO6B,aAE7B7I,OAAQtF,KAAKsF,OACbuI,MAAO7N,KAAK6N,MACZqC,QAASlQ,KAAKkQ,QACdvB,QAAS3O,KAAK2O,QACdpJ,OAAQvF,KAAKuF,OACbsJ,OAAQ7O,KAAK6O,OACbL,MAAOxO,KAAKwO,MACZD,OAAQvO,KAAKuO,OACbtJ,GAAIjF,KAAKiF,GACT2J,eAAgB5O,KAAK4O,eAAe9C,MAAM,GAC1C4C,KAAM1O,KAAK0O,MAEX1O,KAAK0M,QAAQD,SACbwD,EAAO3D,OAAO8B,MAAQpO,KAAKsM,OAAO8B,MAAMtC,MAAM,MAItDkD,EAAQnB,EAAM,GAAGA,MAAM,sBAEnB7N,KAAKwF,UAAYwJ,EAAMxO,QAE3BR,KAAKsM,OAAS,CACV0B,WAAYhO,KAAKsM,OAAO2B,UACxBA,UAAWjO,KAAKwF,SAAW,EAC3B0I,aAAclO,KAAKsM,OAAO6B,YAC1BA,YAAaa,EACAA,EAAMA,EAAMxO,OAAS,GAAGA,OAASwO,EAAMA,EAAMxO,OAAS,GAAGqN,MAAM,UAAU,GAAGrN,OAC5ER,KAAKsM,OAAO6B,YAAcN,EAAM,GAAGrN,QAEpDR,KAAKsF,QAAUuI,EAAM,GACrB7N,KAAK6N,OAASA,EAAM,GACpB7N,KAAKkQ,QAAUrC,EACf7N,KAAKuF,OAASvF,KAAKsF,OAAO9E,OACtBR,KAAK0M,QAAQD,SACbzM,KAAKsM,OAAO8B,MAAQ,CAACpO,KAAK6O,OAAQ7O,KAAK6O,QAAU7O,KAAKuF,SAE1DvF,KAAKwO,OAAQ,EACbxO,KAAKyO,YAAa,EAClBzO,KAAKuO,OAASvO,KAAKuO,OAAOzC,MAAM+B,EAAM,GAAGrN,QACzCR,KAAK2O,SAAWd,EAAM,GACtBR,EAAQrN,KAAKqF,cAAc0G,KAAK/L,KAAMA,KAAKiF,GAAIjF,KAAMgQ,EAAchQ,KAAK4O,eAAe5O,KAAK4O,eAAepO,OAAS,IAChHR,KAAK0O,MAAQ1O,KAAKuO,SAClBvO,KAAK0O,MAAO,GAEZrB,EACA,OAAOA,EACJ,GAAIrN,KAAKyO,WAAY,CAExB,IAAK,IAAIpO,KAAK4P,EACVjQ,KAAKK,GAAK4P,EAAO5P,GAErB,OAAO,CACX,CACA,OAAO,CACX,EAGJuP,KAAK,WACG,GAAI5P,KAAK0O,KACL,OAAO1O,KAAKsO,IAMhB,IAAIjB,EACAQ,EACAsC,EACAC,EAPCpQ,KAAKuO,SACNvO,KAAK0O,MAAO,GAOX1O,KAAKwO,QACNxO,KAAKsF,OAAS,GACdtF,KAAK6N,MAAQ,IAGjB,IADA,IAAIwC,EAAQrQ,KAAKsQ,gBACRhI,EAAI,EAAGA,EAAI+H,EAAM7P,OAAQ8H,IAE9B,IADA6H,EAAYnQ,KAAKuO,OAAOV,MAAM7N,KAAKqQ,MAAMA,EAAM/H,SAC5BuF,GAASsC,EAAU,GAAG3P,OAASqN,EAAM,GAAGrN,QAAS,CAGhE,GAFAqN,EAAQsC,EACRC,EAAQ9H,EACJtI,KAAK0M,QAAQ4C,gBAAiB,CAE9B,IAAc,KADdjC,EAAQrN,KAAK+P,WAAWI,EAAWE,EAAM/H,KAErC,OAAO+E,EACJ,GAAIrN,KAAKyO,WAAY,CACxBZ,GAAQ,EACR,QACJ,CAEI,OAAO,CAEf,CAAO,IAAK7N,KAAK0M,QAAQ6D,KACrB,KAER,CAEJ,OAAI1C,GAEc,KADdR,EAAQrN,KAAK+P,WAAWlC,EAAOwC,EAAMD,MAE1B/C,EAKK,KAAhBrN,KAAKuO,OACEvO,KAAKsO,IAELtO,KAAKgL,WAAW,0BAA4BhL,KAAKwF,SAAW,GAAK,yBAA2BxF,KAAK0N,eAAgB,CACpHE,KAAM,GACNP,MAAO,KACPS,KAAM9N,KAAKwF,UAGvB,EAGJgI,IAAI,WACI,IAAIR,EAAIhN,KAAK4P,OACb,OAAI5C,GAGOhN,KAAKwN,KAEpB,EAGJgD,MAAM,SAAgBC,GACdzQ,KAAK4O,eAAepC,KAAKiE,EAC7B,EAGJC,SAAS,WAED,OADQ1Q,KAAK4O,eAAepO,OAAS,EAC7B,EACGR,KAAK4O,eAAerB,MAEpBvN,KAAK4O,eAAe,EAEnC,EAGJ0B,cAAc,WACN,OAAItQ,KAAK4O,eAAepO,QAAUR,KAAK4O,eAAe5O,KAAK4O,eAAepO,OAAS,GACxER,KAAK2Q,WAAW3Q,KAAK4O,eAAe5O,KAAK4O,eAAepO,OAAS,IAAI6P,MAErErQ,KAAK2Q,WAAoB,QAAEN,KAE1C,EAGJO,SAAS,SAAmBrI,GAEpB,OADAA,EAAIvI,KAAK4O,eAAepO,OAAS,EAAIiI,KAAKoI,IAAItI,GAAK,KAC1C,EACEvI,KAAK4O,eAAerG,GAEpB,SAEf,EAGJuI,UAAU,SAAoBL,GACtBzQ,KAAKwQ,MAAMC,EACf,EAGJM,eAAe,WACP,OAAO/Q,KAAK4O,eAAepO,MAC/B,EACJkM,QAAS,CAAC,oBAAmB,GAC7BrH,cAAe,SAAmBJ,EAAG+L,EAAIC,EAA0BC,GAEnE,OAAOD,GACP,KAAK,EACL,MACA,KAAK,EAEL,KAAK,EAAE,MAAO,GAEd,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,GAEd,KAAK,EAEL,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,EAEd,KAAK,EAAE,OAAO,EAEd,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,EAEf,KAAK,GAAG,OAAO,EAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAEL,KAAK,GAAG,OAAO,GAEf,KAAK,GAEL,KAAK,GAAG,OAAO,GAEf,KAAK,GAEL,KAAK,GAEL,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAoD,OAAjDD,EAAI1L,OAASL,EAAGoB,MAAM8K,cAAcH,EAAI1L,QAAgB,GAEhE,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,EAEf,KAAK,GAAG,OAAO,IAEf,KAAK,GAAG,OAAO,IAEf,KAAK,GAAG,MAAO,KAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAGf,EACA+K,MAAO,CAAC,YAAY,cAAc,eAAe,2BAA2B,8BAA8B,yBAAyB,gBAAgB,eAAe,cAAc,gBAAgB,gBAAgB,gBAAgB,eAAe,eAAe,cAAc,cAAc,mBAAmB,sBAAsB,oBAAoB,iBAAiB,eAAe,cAAc,cAAc,iBAAiB,eAAe,eAAe,eAAe,iBAAiB,iBAAiB,mBAAmB,eAAe,gBAAgB,mBAAmB,eAAe,eAAe,eAAe,kBAAkB,oBAAoB,iBAAiB,oBAAoB,gBAAgB,iBAAiB,cAAc,qBAAqB,eAAe,oBAAoB,wBAAwB,sBAAsB,qBAAqB,wBAAwB,wBAAwB,wBAAwB,sBAAsB,0BAA0B,yBAAyB,0BAA0B,4BAA4B,wBAAwB,YAAY,aAAa,YAAY,YAAY,YAAY,YAAY,YAAY,aAAa,aAAa,cAAc,gBAAgB,eAAe,eAAe,kDAAkD,qBAAqB,UAAU,WAAW,WAAW,WAAW,aAAa,aAAa,aAAa,aAAa,WAC14CM,WAAY,CAAC,QAAU,CAAC,MAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,WAAY,KAK1R,SAASS,KACPpR,KAAKiF,GAAK,CAAC,CACb,CAEA,OALA9E,GAAO8L,MAAQA,GAIfmF,GAAOjF,UAAYhM,GAAOA,GAAOiR,OAASA,GACnC,IAAIA,EACX,CA14Bc,GA44BdxR,EAAOD,QAAU,CAACQ,OAAQA,E,SC54B1B,IAAIA,EAAU,WACd,IAAIC,EAAE,SAASC,EAAEC,EAAEF,EAAEG,GAAG,IAAIH,EAAEA,GAAG,CAAC,EAAEG,EAAEF,EAAEG,OAAOD,IAAIH,EAAEC,EAAEE,IAAID,GAAG,OAAOF,CAAC,EAAEK,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,EAAE,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,EAAE,EAAE,GAAG,IAC/NnB,EAAS,CAAC6E,MAAO,WAAmB,EACxCC,GAAI,CAAC,EACLC,SAAU,CAAC,MAAQ,EAAE,QAAU,EAAE,WAAa,EAAE,IAAM,EAAE,SAAW,EAAE,GAAK,EAAE,IAAM,EAAE,IAAM,EAAE,IAAI,GAAG,IAAI,GAAG,SAAW,GAAG,eAAiB,GAAG,gBAAkB,GAAG,UAAY,GAAG,eAAiB,GAAG,SAAW,GAAG,MAAQ,GAAG,IAAI,GAAG,OAAS,GAAG,IAAI,GAAG,KAAO,GAAG,WAAa,GAAG,OAAS,GAAG,QAAU,EAAE,KAAO,GAChTC,WAAY,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,WAAW,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,aAAa,GAAG,UAC5LC,aAAc,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IACzIC,cAAe,SAAmBC,EAAQC,EAAQC,EAAUP,EAAIQ,EAAyBC,EAAiBC,GAG1G,IAAIC,EAAKF,EAAGlF,OAAS,EACrB,OAAQiF,GACR,KAAK,EACJ,OAAOC,EAAGE,EAAG,GAEd,KAAK,EACL5F,KAAK6F,EAAIZ,EAAGoM,QAAQ,KAAXpM,CAAiBS,EAAGE,EAAG,GAAIF,EAAGE,IACvC,MACA,KAAK,EACL5F,KAAK6F,EAAIZ,EAAGoM,QAAQ,MAAXpM,CAAkBS,EAAGE,EAAG,GAAIF,EAAGE,IACxC,MACA,KAAK,EACL5F,KAAK6F,EAAIZ,EAAGoM,QAAQ,MAAXpM,CAAkBS,EAAGE,IAC9B,MACA,KAAK,EACL5F,KAAK6F,EAAIH,EAAGE,EAAG,GACf,MACA,KAAK,EACL5F,KAAK6F,EAAIZ,EAAGoM,QAAQ3L,EAAGE,GAAdX,GACT,MACA,KAAK,EACLjF,KAAK6F,EAAIZ,EAAGqM,YAAY5L,EAAGE,GAAI8B,cAAcoE,MAAM,EAAGpG,EAAGE,GAAIpF,SAC7D,MACA,KAAK,EAAG,KAAK,GACbR,KAAK6F,EAAIZ,EAAGoM,QAAQ3L,EAAGE,EAAG,GAAjBX,CAAqBS,EAAGE,IACjC,MACA,KAAK,GACL5F,KAAK6F,EAAI,IAAIZ,EAAGsM,UAAU7L,EAAGE,IAC7B,MACA,KAAK,GAAI,KAAK,GACd5F,KAAK6F,EAAIH,EAAGE,EAAG,GAAG4E,OAAO9E,EAAGE,IAC5B,MACA,KAAK,GACL5F,KAAK6F,EAAI,IAAIZ,EAAGuM,MAAMzJ,OAAOrC,EAAGE,KAChC,MACA,KAAK,GACL5F,KAAK6F,EAAI,IAAIZ,EAAGuM,MAAMzJ,OAAOrC,EAAGE,EAAG,IAAKmC,OAAOrC,EAAGE,KAClD,MACA,KAAK,GACL5F,KAAK6F,EAAI,IAAIZ,EAAGwM,UAAU/L,EAAGE,IAG7B,EACAkF,MAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAErK,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAEC,EAAI,EAAEC,GAAKZ,EAAEa,EAAI,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAER,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,EAAE,EAAEL,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAKV,EAAEa,EAAI,CAAC,EAAE,IAAIb,EAAEa,EAAI,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAGC,GAAK,CAAC,GAAG,GAAG,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAEZ,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,EAAE,EAAEL,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAKV,EAAEa,EAAI,CAAC,EAAE,IAAI,CAAC,EAAEF,EAAI,EAAEC,EAAI,GAAG,CAAC,EAAE,KAAKZ,EAAEa,EAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAMb,EAAEkB,EAAI,CAAC,EAAE,KAAKlB,EAAEkB,EAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,MAAMlB,EAAEa,EAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,MAAMb,EAAEkB,EAAI,CAAC,EAAE,KAAKlB,EAAEkB,EAAI,CAAC,EAAE,KAAKlB,EAAEkB,EAAI,CAAC,EAAE,KAAKlB,EAAEkB,EAAI,CAAC,EAAE,KAAKlB,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAEY,IAAMZ,EAAEa,EAAI,CAAC,EAAE,IAAIb,EAAEa,EAAI,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,GAAGC,GAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,GAAKjB,EAAEkB,EAAI,CAAC,EAAE,KAAKlB,EAAEkB,EAAI,CAAC,EAAE,KAAKlB,EAAEkB,EAAI,CAAC,EAAE,MAChuByJ,eAAgB,CAAC,GAAG,CAAC,EAAE,IACvBC,WAAY,SAAoBC,EAAKC,GACjC,IAAIA,EAAKC,YAEF,CACH,IAAIC,EAAQ,IAAIC,MAAMJ,GAEtB,MADAG,EAAMF,KAAOA,EACPE,CACV,CALIpL,KAAKgF,MAAMiG,EAMnB,EACAL,MAAO,SAAeU,GAClB,IAAIC,EAAOvL,KAAMwL,EAAQ,CAAC,GAAIC,EAAS,GAAIC,EAAS,CAAC,MAAOC,EAAS,GAAIb,EAAQ9K,KAAK8K,MAAOxF,EAAS,GAAIE,EAAW,EAAGD,EAAS,EAAGqG,EAAa,EAC7IC,EAAOF,EAAOG,MAAMC,KAAKC,UAAW,GACpCC,EAAQ9B,OAAOC,OAAOpK,KAAKiM,OAC3BC,EAAc,CAAEjH,GAAI,CAAC,GACzB,IAAK,IAAI5E,KAAKL,KAAKiF,GACXkF,OAAOgC,UAAUC,eAAeL,KAAK/L,KAAKiF,GAAI5E,KAC9C6L,EAAYjH,GAAG5E,GAAKL,KAAKiF,GAAG5E,IAGpC4L,EAAMI,SAASf,EAAOY,EAAYjH,IAClCiH,EAAYjH,GAAGgH,MAAQA,EACvBC,EAAYjH,GAAG9E,OAASH,UACG,IAAhBiM,EAAMK,SACbL,EAAMK,OAAS,CAAC,GAEpB,IAAIC,EAAQN,EAAMK,OAClBX,EAAOa,KAAKD,GACZ,IAAIE,EAASR,EAAMS,SAAWT,EAAMS,QAAQD,OACH,mBAA9BP,EAAYjH,GAAG+F,WACtBhL,KAAKgL,WAAakB,EAAYjH,GAAG+F,WAEjChL,KAAKgL,WAAab,OAAOwC,eAAe3M,MAAMgL,WAoBlD,IADA,IAAI4B,EAAQC,EAAgBC,EAAOC,EAAWC,EAAeC,EAAGC,EAAKC,EAAUC,EAXnEC,EAWqCC,EAAQ,CAAC,IAC7C,CAUT,GATAR,EAAQtB,EAAMA,EAAMhL,OAAS,GACzBR,KAAK+K,eAAe+B,GACpBC,EAAS/M,KAAK+K,eAAe+B,IAEzBF,UAjBAS,SAEiB,iBADrBA,EAAQ5B,EAAO8B,OAAStB,EAAMuB,OA9BgI,KAgCtJH,aAAiBzD,QAEjByD,GADA5B,EAAS4B,GACME,OAEnBF,EAAQ9B,EAAKrG,SAASmI,IAAUA,GAWhCT,EATGS,GAWPN,EAASjC,EAAMgC,IAAUhC,EAAMgC,GAAOF,SAEpB,IAAXG,IAA2BA,EAAOvM,SAAWuM,EAAO,GAAI,CAC/D,IAAIU,EAAS,GAEb,IAAKR,KADLG,EAAW,GACDtC,EAAMgC,GACR9M,KAAKmF,WAAW8H,IAAMA,EAvDuH,GAwD7IG,EAASZ,KAAK,IAAOxM,KAAKmF,WAAW8H,GAAK,KAI9CQ,EADAxB,EAAMyB,aACG,wBAA0BlI,EAAW,GAAK,MAAQyG,EAAMyB,eAAiB,eAAiBN,EAASO,KAAK,MAAQ,WAAc3N,KAAKmF,WAAWyH,IAAWA,GAAU,IAEnK,wBAA0BpH,EAAW,GAAK,iBA9DuG,GA8DpFoH,EAAgB,eAAiB,KAAQ5M,KAAKmF,WAAWyH,IAAWA,GAAU,KAExJ5M,KAAKgL,WAAWyC,EAAQ,CACpBG,KAAM3B,EAAM4B,MACZR,MAAOrN,KAAKmF,WAAWyH,IAAWA,EAClCkB,KAAM7B,EAAMzG,SACZuI,IAAKxB,EACLa,SAAUA,GAElB,CACA,GAAIL,EAAO,aAAcnD,OAASmD,EAAOvM,OAAS,EAC9C,MAAM,IAAI6K,MAAM,oDAAsDyB,EAAQ,YAAcF,GAEhG,OAAQG,EAAO,IACf,KAAK,EACDvB,EAAMgB,KAAKI,GACXlB,EAAOc,KAAKP,EAAM3G,QAClBqG,EAAOa,KAAKP,EAAMK,QAClBd,EAAMgB,KAAKO,EAAO,IAClBH,EAAS,KACJC,GASDD,EAASC,EACTA,EAAiB,OATjBtH,EAAS0G,EAAM1G,OACfD,EAAS2G,EAAM3G,OACfE,EAAWyG,EAAMzG,SACjB+G,EAAQN,EAAMK,OACVV,EAAa,GACbA,KAMR,MACJ,KAAK,EAwBD,GAvBAsB,EAAMlN,KAAKoF,aAAa2H,EAAO,IAAI,GACnCO,EAAMzH,EAAI6F,EAAOA,EAAOlL,OAAS0M,GACjCI,EAAM3H,GAAK,CACPqI,WAAYrC,EAAOA,EAAOnL,QAAU0M,GAAO,IAAIc,WAC/CC,UAAWtC,EAAOA,EAAOnL,OAAS,GAAGyN,UACrCC,aAAcvC,EAAOA,EAAOnL,QAAU0M,GAAO,IAAIgB,aACjDC,YAAaxC,EAAOA,EAAOnL,OAAS,GAAG2N,aAEvC1B,IACAa,EAAM3H,GAAGyI,MAAQ,CACbzC,EAAOA,EAAOnL,QAAU0M,GAAO,IAAIkB,MAAM,GACzCzC,EAAOA,EAAOnL,OAAS,GAAG4N,MAAM,UAYvB,KATjBpB,EAAIhN,KAAKqF,cAAcgJ,MAAMf,EAAO,CAChChI,EACAC,EACAC,EACA0G,EAAYjH,GACZ8H,EAAO,GACPrB,EACAC,GACFrB,OAAOuB,KAEL,OAAOmB,EAEPE,IACA1B,EAAQA,EAAMM,MAAM,GAAI,EAAIoB,EAAM,GAClCxB,EAASA,EAAOI,MAAM,GAAI,EAAIoB,GAC9BvB,EAASA,EAAOG,MAAM,GAAI,EAAIoB,IAElC1B,EAAMgB,KAAKxM,KAAKoF,aAAa2H,EAAO,IAAI,IACxCrB,EAAOc,KAAKc,EAAMzH,GAClB8F,EAAOa,KAAKc,EAAM3H,IAClBwH,EAAWrC,EAAMU,EAAMA,EAAMhL,OAAS,IAAIgL,EAAMA,EAAMhL,OAAS,IAC/DgL,EAAMgB,KAAKW,GACX,MACJ,KAAK,EACD,OAAO,EAEf,CACA,OAAO,CACX,GAIIlB,EACS,CAEbqC,IAAI,EAEJtD,WAAW,SAAoBC,EAAKC,GAC5B,IAAIlL,KAAKiF,GAAG9E,OAGR,MAAM,IAAIkL,MAAMJ,GAFhBjL,KAAKiF,GAAG9E,OAAO6K,WAAWC,EAAKC,EAIvC,EAGJmB,SAAS,SAAUf,EAAOrG,GAiBlB,OAhBAjF,KAAKiF,GAAKA,GAAMjF,KAAKiF,IAAM,CAAC,EAC5BjF,KAAKuO,OAASjD,EACdtL,KAAKwO,MAAQxO,KAAKyO,WAAazO,KAAK0O,MAAO,EAC3C1O,KAAKwF,SAAWxF,KAAKuF,OAAS,EAC9BvF,KAAKsF,OAAStF,KAAK2O,QAAU3O,KAAK6N,MAAQ,GAC1C7N,KAAK4O,eAAiB,CAAC,WACvB5O,KAAKsM,OAAS,CACV0B,WAAY,EACZE,aAAc,EACdD,UAAW,EACXE,YAAa,GAEbnO,KAAK0M,QAAQD,SACbzM,KAAKsM,OAAO8B,MAAQ,CAAC,EAAE,IAE3BpO,KAAK6O,OAAS,EACP7O,IACX,EAGJsL,MAAM,WACE,IAAIwD,EAAK9O,KAAKuO,OAAO,GAkBrB,OAjBAvO,KAAKsF,QAAUwJ,EACf9O,KAAKuF,SACLvF,KAAK6O,SACL7O,KAAK6N,OAASiB,EACd9O,KAAK2O,SAAWG,EACJA,EAAGjB,MAAM,oBAEjB7N,KAAKwF,WACLxF,KAAKsM,OAAO2B,aAEZjO,KAAKsM,OAAO6B,cAEZnO,KAAK0M,QAAQD,QACbzM,KAAKsM,OAAO8B,MAAM,KAGtBpO,KAAKuO,OAASvO,KAAKuO,OAAOzC,MAAM,GACzBgD,CACX,EAGJC,MAAM,SAAUD,GACR,IAAI5B,EAAM4B,EAAGtO,OACTwO,EAAQF,EAAGG,MAAM,iBAErBjP,KAAKuO,OAASO,EAAK9O,KAAKuO,OACxBvO,KAAKsF,OAAStF,KAAKsF,OAAO4J,OAAO,EAAGlP,KAAKsF,OAAO9E,OAAS0M,GAEzDlN,KAAK6O,QAAU3B,EACf,IAAIiC,EAAWnP,KAAK6N,MAAMoB,MAAM,iBAChCjP,KAAK6N,MAAQ7N,KAAK6N,MAAMqB,OAAO,EAAGlP,KAAK6N,MAAMrN,OAAS,GACtDR,KAAK2O,QAAU3O,KAAK2O,QAAQO,OAAO,EAAGlP,KAAK2O,QAAQnO,OAAS,GAExDwO,EAAMxO,OAAS,IACfR,KAAKwF,UAAYwJ,EAAMxO,OAAS,GAEpC,IAAIwM,EAAIhN,KAAKsM,OAAO8B,MAgBpB,OAdApO,KAAKsM,OAAS,CACV0B,WAAYhO,KAAKsM,OAAO0B,WACxBC,UAAWjO,KAAKwF,SAAW,EAC3B0I,aAAclO,KAAKsM,OAAO4B,aAC1BC,YAAaa,GACRA,EAAMxO,SAAW2O,EAAS3O,OAASR,KAAKsM,OAAO4B,aAAe,GAC5DiB,EAASA,EAAS3O,OAASwO,EAAMxO,QAAQA,OAASwO,EAAM,GAAGxO,OAChER,KAAKsM,OAAO4B,aAAehB,GAG7BlN,KAAK0M,QAAQD,SACbzM,KAAKsM,OAAO8B,MAAQ,CAACpB,EAAE,GAAIA,EAAE,GAAKhN,KAAKuF,OAAS2H,IAEpDlN,KAAKuF,OAASvF,KAAKsF,OAAO9E,OACnBR,IACX,EAGJoP,KAAK,WAEG,OADApP,KAAKwO,OAAQ,EACNxO,IACX,EAGJqP,OAAO,WACC,OAAIrP,KAAK0M,QAAQ4C,iBACbtP,KAAKyO,YAAa,EASfzO,MAPIA,KAAKgL,WAAW,0BAA4BhL,KAAKwF,SAAW,GAAK,mIAAqIxF,KAAK0N,eAAgB,CAC9NE,KAAM,GACNP,MAAO,KACPS,KAAM9N,KAAKwF,UAKvB,EAGJ+J,KAAK,SAAUhH,GACPvI,KAAK+O,MAAM/O,KAAK6N,MAAM/B,MAAMvD,GAChC,EAGJiH,UAAU,WACF,IAAIC,EAAOzP,KAAK2O,QAAQO,OAAO,EAAGlP,KAAK2O,QAAQnO,OAASR,KAAK6N,MAAMrN,QACnE,OAAQiP,EAAKjP,OAAS,GAAK,MAAM,IAAMiP,EAAKP,QAAQ,IAAIQ,QAAQ,MAAO,GAC3E,EAGJC,cAAc,WACN,IAAIC,EAAO5P,KAAK6N,MAIhB,OAHI+B,EAAKpP,OAAS,KACdoP,GAAQ5P,KAAKuO,OAAOW,OAAO,EAAG,GAAGU,EAAKpP,UAElCoP,EAAKV,OAAO,EAAE,KAAOU,EAAKpP,OAAS,GAAK,MAAQ,KAAKkP,QAAQ,MAAO,GAChF,EAGJhC,aAAa,WACL,IAAImC,EAAM7P,KAAKwP,YACXM,EAAI,IAAIlG,MAAMiG,EAAIrP,OAAS,GAAGmN,KAAK,KACvC,OAAOkC,EAAM7P,KAAK2P,gBAAkB,KAAOG,EAAI,GACnD,EAGJC,WAAW,SAAUlC,EAAOmC,GACpB,IAAI3C,EACA2B,EACAiB,EAwDJ,GAtDIjQ,KAAK0M,QAAQ4C,kBAEbW,EAAS,CACLzK,SAAUxF,KAAKwF,SACf8G,OAAQ,CACJ0B,WAAYhO,KAAKsM,OAAO0B,WACxBC,UAAWjO,KAAKiO,UAChBC,aAAclO,KAAKsM,OAAO4B,aAC1BC,YAAanO,KAAKsM,OAAO6B,aAE7B7I,OAAQtF,KAAKsF,OACbuI,MAAO7N,KAAK6N,MACZqC,QAASlQ,KAAKkQ,QACdvB,QAAS3O,KAAK2O,QACdpJ,OAAQvF,KAAKuF,OACbsJ,OAAQ7O,KAAK6O,OACbL,MAAOxO,KAAKwO,MACZD,OAAQvO,KAAKuO,OACbtJ,GAAIjF,KAAKiF,GACT2J,eAAgB5O,KAAK4O,eAAe9C,MAAM,GAC1C4C,KAAM1O,KAAK0O,MAEX1O,KAAK0M,QAAQD,SACbwD,EAAO3D,OAAO8B,MAAQpO,KAAKsM,OAAO8B,MAAMtC,MAAM,MAItDkD,EAAQnB,EAAM,GAAGA,MAAM,sBAEnB7N,KAAKwF,UAAYwJ,EAAMxO,QAE3BR,KAAKsM,OAAS,CACV0B,WAAYhO,KAAKsM,OAAO2B,UACxBA,UAAWjO,KAAKwF,SAAW,EAC3B0I,aAAclO,KAAKsM,OAAO6B,YAC1BA,YAAaa,EACAA,EAAMA,EAAMxO,OAAS,GAAGA,OAASwO,EAAMA,EAAMxO,OAAS,GAAGqN,MAAM,UAAU,GAAGrN,OAC5ER,KAAKsM,OAAO6B,YAAcN,EAAM,GAAGrN,QAEpDR,KAAKsF,QAAUuI,EAAM,GACrB7N,KAAK6N,OAASA,EAAM,GACpB7N,KAAKkQ,QAAUrC,EACf7N,KAAKuF,OAASvF,KAAKsF,OAAO9E,OACtBR,KAAK0M,QAAQD,SACbzM,KAAKsM,OAAO8B,MAAQ,CAACpO,KAAK6O,OAAQ7O,KAAK6O,QAAU7O,KAAKuF,SAE1DvF,KAAKwO,OAAQ,EACbxO,KAAKyO,YAAa,EAClBzO,KAAKuO,OAASvO,KAAKuO,OAAOzC,MAAM+B,EAAM,GAAGrN,QACzCR,KAAK2O,SAAWd,EAAM,GACtBR,EAAQrN,KAAKqF,cAAc0G,KAAK/L,KAAMA,KAAKiF,GAAIjF,KAAMgQ,EAAchQ,KAAK4O,eAAe5O,KAAK4O,eAAepO,OAAS,IAChHR,KAAK0O,MAAQ1O,KAAKuO,SAClBvO,KAAK0O,MAAO,GAEZrB,EACA,OAAOA,EACJ,GAAIrN,KAAKyO,WAAY,CAExB,IAAK,IAAIpO,KAAK4P,EACVjQ,KAAKK,GAAK4P,EAAO5P,GAErB,OAAO,CACX,CACA,OAAO,CACX,EAGJuP,KAAK,WACG,GAAI5P,KAAK0O,KACL,OAAO1O,KAAKsO,IAMhB,IAAIjB,EACAQ,EACAsC,EACAC,EAPCpQ,KAAKuO,SACNvO,KAAK0O,MAAO,GAOX1O,KAAKwO,QACNxO,KAAKsF,OAAS,GACdtF,KAAK6N,MAAQ,IAGjB,IADA,IAAIwC,EAAQrQ,KAAKsQ,gBACRhI,EAAI,EAAGA,EAAI+H,EAAM7P,OAAQ8H,IAE9B,IADA6H,EAAYnQ,KAAKuO,OAAOV,MAAM7N,KAAKqQ,MAAMA,EAAM/H,SAC5BuF,GAASsC,EAAU,GAAG3P,OAASqN,EAAM,GAAGrN,QAAS,CAGhE,GAFAqN,EAAQsC,EACRC,EAAQ9H,EACJtI,KAAK0M,QAAQ4C,gBAAiB,CAE9B,IAAc,KADdjC,EAAQrN,KAAK+P,WAAWI,EAAWE,EAAM/H,KAErC,OAAO+E,EACJ,GAAIrN,KAAKyO,WAAY,CACxBZ,GAAQ,EACR,QACJ,CAEI,OAAO,CAEf,CAAO,IAAK7N,KAAK0M,QAAQ6D,KACrB,KAER,CAEJ,OAAI1C,GAEc,KADdR,EAAQrN,KAAK+P,WAAWlC,EAAOwC,EAAMD,MAE1B/C,EAKK,KAAhBrN,KAAKuO,OACEvO,KAAKsO,IAELtO,KAAKgL,WAAW,0BAA4BhL,KAAKwF,SAAW,GAAK,yBAA2BxF,KAAK0N,eAAgB,CACpHE,KAAM,GACNP,MAAO,KACPS,KAAM9N,KAAKwF,UAGvB,EAGJgI,IAAI,WACI,IAAIR,EAAIhN,KAAK4P,OACb,OAAI5C,GAGOhN,KAAKwN,KAEpB,EAGJgD,MAAM,SAAeC,GACbzQ,KAAK4O,eAAepC,KAAKiE,EAC7B,EAGJC,SAAS,WAED,OADQ1Q,KAAK4O,eAAepO,OAAS,EAC7B,EACGR,KAAK4O,eAAerB,MAEpBvN,KAAK4O,eAAe,EAEnC,EAGJ0B,cAAc,WACN,OAAItQ,KAAK4O,eAAepO,QAAUR,KAAK4O,eAAe5O,KAAK4O,eAAepO,OAAS,GACxER,KAAK2Q,WAAW3Q,KAAK4O,eAAe5O,KAAK4O,eAAepO,OAAS,IAAI6P,MAErErQ,KAAK2Q,WAAoB,QAAEN,KAE1C,EAGJO,SAAS,SAAkBrI,GAEnB,OADAA,EAAIvI,KAAK4O,eAAepO,OAAS,EAAIiI,KAAKoI,IAAItI,GAAK,KAC1C,EACEvI,KAAK4O,eAAerG,GAEpB,SAEf,EAGJuI,UAAU,SAAmBL,GACrBzQ,KAAKwQ,MAAMC,EACf,EAGJM,eAAe,WACP,OAAO/Q,KAAK4O,eAAepO,MAC/B,EACJkM,QAAS,CAAC,oBAAmB,GAC7BrH,cAAe,SAAmBJ,EAAG+L,EAAIC,EAA0BC,GAEnE,OAAOD,GACP,KAAK,EACL,MACA,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,EAEd,KAAK,EAAE,OAAO,EAEd,KAAK,EAAE,OAAO,EAEd,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,GAEd,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,MAAO,KAEf,KAAK,GAAG,MAAO,KAEf,KAAK,GAAG,MAAO,IAEf,KAAK,GAAG,MAAO,IAEf,KAAK,GAAmD,OAAhDD,EAAI1L,OAAS0L,EAAI1L,OAAO4J,OAAO,EAAE8B,EAAIzL,OAAO,GAAW,GAE/D,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,EAEf,KAAK,GAAG,MAAO,UAGf,EACA8K,MAAO,CAAC,YAAY,oCAAoC,aAAa,cAAc,cAAc,oIAAoI,wDAAwD,qCAAqC,WAAW,WAAW,UAAU,UAAU,WAAW,WAAW,UAAU,UAAU,kDAAkD,sBAAsB,qBAAqB,UAAU,WAC7fM,WAAY,CAAC,QAAU,CAAC,MAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,WAAY,KAKnG,SAASS,IACPpR,KAAKiF,GAAK,CAAC,CACb,CAEA,OALA9E,EAAO8L,MAAQA,EAIfmF,EAAOjF,UAAYhM,EAAOA,EAAOiR,OAASA,EACnC,IAAIA,CACX,CA7kBc,GA+kBdxR,EAAOD,QAAU,CAACQ,OAAQA,E;;;;;;;;;CC7oB1B,WACE,IAAIuR,EAAsBC,EAAmBC,EAAMC,EAAoBC,EAAqBpJ,EAAIqJ,EAAwBC,EAAQC,EAAWC,EAAYC,EAAcC,EAAeC,EAAWC,EAASC,EAAelS,EAAGmS,EAAmBC,EAAoBC,EAAgBC,EAAkBC,EAAaC,EAAKC,EAAMxS,EAAGyS,EAAgBC,EAC5UC,EAAY9I,OAAOgC,UAAUC,eAC7B8G,EAAY,SAASC,EAAOC,GAAU,IAAK,IAAInJ,KAAOmJ,EAAcH,EAAUlH,KAAKqH,EAAQnJ,KAAMkJ,EAAMlJ,GAAOmJ,EAAOnJ,IAAQ,SAASoJ,IAASrT,KAAKsT,YAAcH,CAAO,CAAqG,OAAnGE,EAAKlH,UAAYiH,EAAOjH,UAAWgH,EAAMhH,UAAY,IAAIkH,EAAMF,EAAMI,UAAYH,EAAOjH,UAAkBgH,CAAO,EAgY9R,IAAK9S,KA1WL+R,EAAgB,CACdoB,QArBF5B,EAAO,CAGL6B,eAAgB,UAChBC,cAAe,SACfC,aAAc,QACdC,eAAgB,UAChBC,YAAa,OAGbC,WAAY,QACZC,UAAW,OACXC,cAAe,WACfC,YAAa,SAGbC,sBAAuB,EACvBC,0BAA2B,IAIdR,aACbS,aAAcxC,EAAKsC,sBACnBG,KAAMzC,EAAKkC,WACXQ,QAAS,EACTC,eAAgB,EAChBC,gBAAY,GAMdvC,EAAY,SAAS3J,EAAGC,GACtB,OAAOE,KAAKgM,IAAI,EAAGhM,KAAKiM,IAAIpM,EAAGC,EAAI,GACrC,EAEA4J,EAAe,SAAS7J,EAAGC,GAGzB,OAFAD,GAAQC,GACA,IAAGD,GAAKC,GACTD,CACT,EAEA4J,EAAa,SAAS5J,EAAGC,GACvB,IAAIoM,EAIJ,OAFArM,EAAI6J,EAAa7J,EADjBqM,EAAS,GAAKpM,EAAI,KAEVA,EAAI,IAAGD,EAAIqM,EAASrM,GACrBA,CACT,EAQAoJ,EAAwB,WAEtB,SAASA,EAAqBkD,EAAOC,GAGnC,GAFA7U,KAAK4U,MAAQA,EAAM9I,MAAM,GACzB9L,KAAKQ,OAASR,KAAK4U,MAAMpU,SACnBR,KAAK8U,WAAa,CACtBC,MAAO/U,KAAKgV,gBACZC,KAAMjV,KAAKkV,eACXC,SAAUnV,KAAKoV,mBACfC,OAAQrV,KAAKsV,kBACbT,EAAOR,OACP,KAAM,iBAAmBQ,EAAOR,IAEpC,CA8BA,OA5BA3C,EAAqBvF,UAAUoJ,gBAAkB,SAASjN,GACxD,OAAK,GAAKA,GAAKA,EAAItI,KAAKQ,OACfR,KAAK4U,MAAMtM,GAEXtI,KAAK8U,WAAWxM,EAE3B,EAEAoJ,EAAqBvF,UAAU6I,gBAAkB,SAAS1M,GACxD,OAAOtI,KAAK4U,MAAM3C,EAAU3J,EAAGtI,KAAKQ,QACtC,EAEAkR,EAAqBvF,UAAU+I,eAAiB,SAAS5M,GACvD,OAAO,CACT,EAEAoJ,EAAqBvF,UAAUiJ,mBAAqB,SAAS9M,GAC3D,OAAOtI,KAAK4U,MAAMzC,EAAa7J,EAAGtI,KAAKQ,QACzC,EAEAkR,EAAqBvF,UAAUmJ,iBAAmB,SAAShN,GACzD,OAAOtI,KAAK4U,MAAM1C,EAAW5J,EAAGtI,KAAKQ,QACvC,EAEAkR,EAAqBvF,UAAUqJ,YAAc,SAASC,GACpD,KAAM,4EACR,EAEO/D,CAET,CA7CwB,GA+CxBI,EAAuB,SAAS4D,GAI9B,SAAS5D,IACPA,EAAoByB,UAAUD,YAAYjF,MAAMrO,KAAMgM,UACxD,CAMA,OAVAkH,EAAUpB,EAAqB4D,GAM/B5D,EAAoB3F,UAAUqJ,YAAc,SAASC,GACnD,OAAOzV,KAAKuV,gBAAgB9M,KAAKkN,MAAMF,GACzC,EAEO3D,CAET,CAduB,CAcpBJ,GAEHG,EAAsB,SAAS6D,GAI7B,SAAS7D,IACPA,EAAmB0B,UAAUD,YAAYjF,MAAMrO,KAAMgM,UACvD,CASA,OAbAkH,EAAUrB,EAAoB6D,GAM9B7D,EAAmB1F,UAAUqJ,YAAc,SAASC,GAClD,IAAIpV,EAGJ,OAAQ,GADRoV,GADApV,EAAIoI,KAAKmN,MAAMH,KAEEzV,KAAKuV,gBAAgBlV,GAAKoV,EAAIzV,KAAKuV,gBAAgBlV,EAAI,EAC1E,EAEOwR,CAET,CAjBsB,CAiBnBH,GAEHC,EAAqB,SAAS+D,GAI5B,SAAS/D,EAAkBiD,EAAOC,GAChC7U,KAAK6V,cAAgB,EAAIpN,KAAKgM,KAAK,EAAGhM,KAAKiM,IAAI,EAAGG,EAAOT,eACzDzC,EAAkB4B,UAAUD,YAAYjF,MAAMrO,KAAMgM,UACtD,CAiBA,OAtBAkH,EAAUvB,EAAmB+D,GAO7B/D,EAAkBxF,UAAU2J,WAAa,SAASzV,GAChD,OAAOL,KAAK6V,eAAiB7V,KAAKuV,gBAAgBlV,EAAI,GAAKL,KAAKuV,gBAAgBlV,EAAI,IAAM,CAC5F,EAEAsR,EAAkBxF,UAAUqJ,YAAc,SAASC,GACjD,IAAIpV,EAAG0V,EAAG9I,EAAG+I,EAAIC,EAOjB,OANA5V,EAAIoI,KAAKmN,MAAMH,GACfM,EAAI,CAAC/V,KAAK8V,WAAWzV,GAAIL,KAAK8V,WAAWzV,EAAI,KAKrC,GADR4V,GAFAR,GAAKpV,IACL2V,EAAKP,EAAIA,IAEQ,EAAIO,EAAK,IAJ1B/I,EAAI,CAACjN,KAAKuV,gBAAgBlV,GAAIL,KAAKuV,gBAAgBlV,EAAI,KAItB,IAAM4V,EAAK,EAAID,EAAKP,GAAKM,EAAE,KAAO,EAAIE,EAAK,EAAID,GAAM/I,EAAE,IAAMgJ,EAAKD,GAAMD,EAAE,EAC7G,EAEOpE,CAET,CA1BqB,CA0BlBD,GAEHmB,EAAMpK,KAAKoK,IAAKnK,EAAKD,KAAKC,GAE1BoK,EAAO,SAASoD,GACd,OAAU,IAANA,EACK,EAEArD,EAAInK,EAAKwN,IAAMxN,EAAKwN,EAE/B,EAEA1D,EAAoB,SAAS2D,GAC3B,OAAO,SAASD,GACd,OAAOpD,EAAKoD,EAAIC,EAClB,CACF,EAEAzD,EAAiB,SAAS0D,GACxB,OAAO,SAASF,GACd,OAAOpD,EAAKoD,GAAKE,EAAOF,EAC1B,CACF,EAEAnE,EAA0B,SAAS2D,GAIjC,SAAS3D,EAAuB6C,EAAOC,GAGrC,GAFA9C,EAAuBwB,UAAUD,YAAYjF,MAAMrO,KAAMgM,WACzDhM,KAAKmW,EAAItB,EAAON,gBACXM,EAAOL,WAAY,KAAM,yBAC9BxU,KAAKqW,OAAS3D,EAAemC,EAAOL,WACtC,CAYA,OAnBAtB,EAAUnB,EAAwB2D,GASlC3D,EAAuB5F,UAAUqJ,YAAc,SAASC,GACtD,IAAIpV,EAAGkI,EAAG+N,EAAKC,EAAMC,EAGrB,IADAF,EAAM,EACD/N,EAAIgO,GAFTlW,EAAIoI,KAAKmN,MAAMH,IAEKzV,KAAKmW,EAAI,EAAGK,EAAQnW,EAAIL,KAAKmW,EAAGI,GAAQC,EAAQjO,GAAKiO,EAAQjO,GAAKiO,EAAOD,GAAQC,EAAQjO,IAAMA,IACjH+N,GAAOtW,KAAKqW,OAAOZ,EAAIlN,GAAKvI,KAAKuV,gBAAgBhN,GAEnD,OAAO+N,CACT,EAEOvE,CAET,CAvB0B,CAuBvBL,GAEHW,EAAY,SAASoE,EAAKnO,GACxB,IAAIoO,EAAKC,EAAIC,EAAMC,EAEnB,IADAA,EAAW,GACNF,EAAK,EAAGC,EAAOH,EAAIjW,OAAQmW,EAAKC,EAAMD,IACzCD,EAAMD,EAAIE,GACVE,EAASrK,KAAKkK,EAAIpO,IAEpB,OAAOuO,CACT,EAEApE,EAAqB,SAASqE,EAAGC,EAAWC,GAC1C,IAAIC,EAAaC,EACjB,MAAwB,QAApBF,EAAWrJ,KACNmJ,GAEPG,EAAcF,GAAaC,EAAW,GAAKA,EAAW,IACtDE,EAAcF,EAAW,GAClB,SAASvB,GACd,OAAOqB,EAAEG,GAAexB,EAAIyB,GAC9B,EAEJ,EAEA5E,EAAU,SAAS4D,GACjB,OAAO/L,OAAOgC,UAAU5F,SAASwF,KAAKmK,GAAGpK,MAAM,GAAoB,EACrE,EAEAiH,EAAiB,SAASxK,GACxB,GAAI4O,MAAM5O,GAAI,KAAM,wBACpB,GAAmB,WAAf+J,EAAQ/J,GAAiB,KAAM,+BACnC,IAAK6O,SAAS7O,GAAI,KAAM,4BAC1B,EAEAyK,EAAiB,SAAS1S,EAAG+W,GAC3B,IAAI9O,EAAGoO,EAAIC,EACX,GAAmB,UAAftE,EAAQhS,GAAgB,KAAM,+BAClC,GAAIA,EAAEE,SAAW6W,EAAW,KAAM,2CAClC,IAAKV,EAAK,EAAGC,EAAOtW,EAAEE,OAAQmW,EAAKC,EAAMD,IACvCpO,EAAIjI,EAAEqW,GACN5D,EAAexK,EAEnB,EAEAgK,EAAgB,SAAShK,GACvB,MAAuB,WAAf+J,EAAQ/J,IAAoB6O,SAAS7O,KAAO4O,MAAM5O,EAC5D,EAEAoK,EAAmB,SAAS2E,GAC1B,IAAIC,EAEJ,OADAA,EAAa,uDACLjF,EAAQgF,IACd,IAAK,SACH,IAAK/E,EAAc+E,GAAI,MAAMC,EAC7BD,EAAI,CAAC,EAAGA,GACR,MACF,IAAK,QACH,GAAiB,IAAbA,EAAE9W,OAAc,MAAM+W,EAC1B,IAAMhF,EAAc+E,EAAE,MAAO/E,EAAc+E,EAAE,IAAM,MAAMC,EACzD,MACF,QACE,MAAMA,EAEV,OAAOD,CACT,EAEA1E,EAAc,SAAS4E,GACrB,IAAIC,EAAMpX,EAAGC,EAEb,IAAKD,KADLoX,EAAO,CAAC,EACED,EACHvE,EAAUlH,KAAKyL,EAAKnX,KACzBC,EAAIkX,EAAInX,GACRoX,EAAKpX,GAAKC,GAEZ,OAAOmX,CACT,EAEAzF,EAAS,SAASyE,EAAK5B,GACrB,IAAI6C,EAAeL,EAAW/O,EAAGqP,EAAcC,EAAmBC,EAAexX,EAAGkI,EAAGuP,EAAYC,EAAYzX,EAS/G,IAAKD,KARS,MAAVwU,IAAgBA,EAAS,CAAC,GAC9BiD,EAAa,CAAC,EACdjD,EAASjC,EAAYiC,GACrBiD,EAAWjD,OAASjC,EAAYiC,GACV,MAAlBA,EAAOP,UAAiBO,EAAOP,QAAUO,EAAOF,QACvB,MAAzBE,EAAON,iBACTM,EAAON,eAAiBM,EAAOmD,mBAEvB5F,EACHa,EAAUlH,KAAKqG,EAAe/R,KACnCC,EAAI8R,EAAc/R,GACD,MAAbwU,EAAOxU,KAAYwU,EAAOxU,GAAKC,IAErC,KAAMsX,EAAoB,CACxBK,QAASnG,EACToG,OAAQrG,EACRsG,MAAOxG,EACPyG,QAASrG,EACTe,KAAMf,GACN8C,EAAOrB,SACP,KAAM,mBAAqBqB,EAAOrB,OAKpC,GAHsB,YAAlBqB,EAAOrB,SACTqB,EAAOL,WAAahC,EAAkBqC,EAAON,iBAE3CkC,EAAIjW,OAAS,EAAG,KAAM,wCA0D1B,IAAKH,KAzDLyX,EAAWO,MAAQ5B,EAAIjW,OACvBuX,EAAc,WACZ,IAAIpB,EAAI2B,EAAI1B,EAAM2B,EAClB,OAAQjG,EAAQmE,EAAI,KAClB,IAAK,SAEH,GADAqB,EAAWT,UAAY,SACnBrF,EAAOwG,eACT,IAAK7B,EAAK,EAAGC,EAAOH,EAAIjW,OAAQmW,EAAKC,EAAMD,IACzCpO,EAAIkO,EAAIE,GACR5D,EAAexK,GAInB,OADAoP,EAAe,IAAIC,EAAkBnB,EAAK5B,GACnC,SAASY,GACd,OAAOkC,EAAanC,YAAYC,EAClC,EACF,IAAK,QAEH,GADAqC,EAAWT,UAAYA,EAAYZ,EAAI,GAAGjW,QACrC6W,EAAW,KAAM,4BACtB,GAAIrF,EAAOwG,eACT,IAAKF,EAAK,EAAGC,EAAQ9B,EAAIjW,OAAQ8X,EAAKC,EAAOD,IAC3ChY,EAAImW,EAAI6B,GACRtF,EAAe1S,EAAG+W,GAWtB,OARAQ,EAAiB,WACf,IAAIhB,EAEJ,IADAA,EAAW,GACNvO,EAAI,EAAG,GAAK+O,EAAY/O,EAAI+O,EAAY/O,EAAI+O,EAAW,GAAKA,EAAY/O,IAAMA,IACjFuO,EAASrK,KAAK,IAAIoL,EAAkBvF,EAAUoE,EAAKnO,GAAIuM,IAEzD,OAAOgC,CACT,CAPiB,GAQV,SAASpB,GACd,IAAIkC,EAAcc,EAAIC,EAAO7B,EAE7B,IADAA,EAAW,GACN4B,EAAK,EAAGC,EAAQb,EAAcrX,OAAQiY,EAAKC,EAAOD,IACrDd,EAAeE,EAAcY,GAC7B5B,EAASrK,KAAKmL,EAAanC,YAAYC,IAEzC,OAAOoB,CACT,EACF,QACE,KAAM,yBAA4BvE,EAAQmE,EAAI,IAEpD,CA5Cc,GA8CZiB,EADkB,aAAhB7C,EAAOR,KACOoC,EAAIjW,OAEJiW,EAAIjW,OAAS,EAE/BqU,EAAOP,UAAYO,EAAOP,QAAUoD,GACpCI,EAAWa,OAAShG,EAAiBkC,EAAOP,SAC5CyD,EAAatF,EAAmBsF,EAAYL,EAAeI,EAAWa,QACtEb,EAAWa,OAAOC,OAGRd,EACH7E,EAAUlH,KAAK+L,EAAYzX,KAChCC,EAAIwX,EAAWzX,GACf0X,EAAW1X,GAAKC,GAElB,OAAOyX,CACT,EAEUnG,EACHqB,EAAUlH,KAAK6F,EAAMvR,KAC1BC,EAAIsR,EAAKvR,GACT2R,EAAO3R,GAAKC,GAGd0R,EAAOwG,gBAAiB,GAEuB,OAAZ7Y,EAAmBA,EAAUyW,QAAQpE,OAASA,CAElF,GAAEjG,KAAK/L,K,oBC1ZR,UAAwDF,EAAO,CAAC,QAAY,0BAAF,EAA4G,SAASkN,GAAG,aAAa,SAASyI,EAAEzI,EAAEyI,EAAElN,GAAG,IAAI,IAAIsQ,GAAG7L,EAAE8L,WAAW,GAAGxQ,EAAEC,EAAE/H,OAAO8H,EAAEuQ,EAAEA,IAAI,CAAC,IAAIzY,EAAEmI,EAAEwQ,WAAWF,GAAG,GAAG,IAAIzY,EAAE4M,EAAEgM,SAASvD,IAAIrV,IAAI,EAAE,IAAI,QAAQ,GAAG,KAAKA,EAAE4M,EAAEgM,SAASvD,IAAIrV,IAAI,EAAE,GAAG,KAAK4M,EAAEgM,SAASvD,IAAIrV,IAAI,EAAE,GAAG,UAAU,GAAG,MAAMA,EAAE4M,EAAEgM,SAASvD,IAAIrV,IAAI,GAAG,GAAG,KAAK4M,EAAEgM,SAASvD,IAAIrV,IAAI,EAAE,GAAG,KAAK4M,EAAEgM,SAASvD,IAAIrV,IAAI,EAAE,GAAG,SAAS,CAAC,KAAK,QAAQA,GAAG,MAAM,IAAIiL,MAAM,iBAAiBjL,GAAG4M,EAAEgM,SAASvD,IAAIrV,IAAI,GAAG,EAAE,KAAK4M,EAAEgM,SAASvD,IAAIrV,IAAI,GAAG,GAAG,KAAK4M,EAAEgM,SAASvD,IAAIrV,IAAI,EAAE,GAAG,KAAK4M,EAAEgM,SAASvD,IAAIrV,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,SAASmI,EAAEyE,GAAG,IAAI,IAAIyI,EAAE,EAAElN,EAAE,EAAEsQ,EAAE7L,EAAExM,OAAOqY,EAAEtQ,EAAEA,IAAI,CAAC,IAAID,EAAE0E,EAAE+L,WAAWxQ,GAAG,GAAG,IAAID,EAAEmN,GAAG,OAAO,GAAG,KAAKnN,EAAEmN,GAAG,OAAO,GAAG,MAAMnN,EAAEmN,GAAG,MAAM,CAAC,KAAK,QAAQnN,GAAG,MAAM,IAAI+C,MAAM,iBAAiB/C,GAAGmN,GAAG,CAAC,CAAC,CAAC,OAAOA,CAAC,CAAC,SAASoD,EAAE7L,EAAE1E,EAAElI,GAAG,IAAI+V,SAASnJ,EAAE,GAAG,WAAWmJ,EAAE,CAAY,GAAG,IAAV8C,EAAE1Q,EAAEyE,IAAW,OAAO1E,EAAE0Q,SAAS5Y,EAAE,IAAI6Y,GAAGxD,EAAEnN,EAAElI,EAAE,EAAE4M,GAAG,EAAEiM,EAAE,GAAG,IAAIA,EAAE,OAAO3Q,EAAE0Q,SAAS5Y,EAAE,KAAKkI,EAAE0Q,SAAS5Y,EAAE,EAAE6Y,GAAGxD,EAAEnN,EAAElI,EAAE,EAAE4M,GAAG,EAAEiM,EAAE,GAAG,MAAMA,EAAE,OAAO3Q,EAAE0Q,SAAS5Y,EAAE,KAAKkI,EAAE4Q,UAAU9Y,EAAE,EAAE6Y,GAAGxD,EAAEnN,EAAElI,EAAE,EAAE4M,GAAG,EAAEiM,EAAE,GAAG,WAAWA,EAAE,OAAO3Q,EAAE0Q,SAAS5Y,EAAE,KAAKkI,EAAE6Q,UAAU/Y,EAAE,EAAE6Y,GAAGxD,EAAEnN,EAAElI,EAAE,EAAE4M,GAAG,EAAEiM,CAAC,CAAC,GAAGjM,aAAaoM,WAAW,CAAC,IAAIH,EAAEjM,EAAE8L,WAAWxB,EAAE,IAAI8B,WAAW9Q,EAAE+Q,QAAQ,GAAG,IAAIJ,EAAE,OAAO3Q,EAAE0Q,SAAS5Y,EAAE,KAAKkI,EAAE0Q,SAAS5Y,EAAE,EAAE6Y,GAAG3B,EAAE3Q,IAAIqG,EAAE5M,EAAE,GAAG,EAAE6Y,EAAE,GAAG,MAAMA,EAAE,OAAO3Q,EAAE0Q,SAAS5Y,EAAE,KAAKkI,EAAE4Q,UAAU9Y,EAAE,EAAE6Y,GAAG3B,EAAE3Q,IAAIqG,EAAE5M,EAAE,GAAG,EAAE6Y,EAAE,GAAG,WAAWA,EAAE,OAAO3Q,EAAE0Q,SAAS5Y,EAAE,KAAKkI,EAAE6Q,UAAU/Y,EAAE,EAAE6Y,GAAG3B,EAAE3Q,IAAIqG,EAAE5M,EAAE,GAAG,EAAE6Y,CAAC,CAAC,GAAG,WAAW9C,EAAE,CAAC,IAAIiB,SAASpK,GAAG,MAAM,IAAI3B,MAAM,sBAAsB2B,GAAG,GAAGvE,KAAKmN,MAAM5I,KAAKA,EAAE,OAAO1E,EAAE0Q,SAAS5Y,EAAE,KAAKkI,EAAEgR,WAAWlZ,EAAE,EAAE4M,GAAG,EAAE,GAAGA,GAAG,EAAE,CAAC,GAAG,IAAIA,EAAE,OAAO1E,EAAE0Q,SAAS5Y,EAAE4M,GAAG,EAAE,GAAG,IAAIA,EAAE,OAAO1E,EAAE0Q,SAAS5Y,EAAE,KAAKkI,EAAE0Q,SAAS5Y,EAAE,EAAE4M,GAAG,EAAE,GAAG,MAAMA,EAAE,OAAO1E,EAAE0Q,SAAS5Y,EAAE,KAAKkI,EAAE4Q,UAAU9Y,EAAE,EAAE4M,GAAG,EAAE,GAAG,WAAWA,EAAE,OAAO1E,EAAE0Q,SAAS5Y,EAAE,KAAKkI,EAAE6Q,UAAU/Y,EAAE,EAAE4M,GAAG,EAAE,MAAM,IAAI3B,MAAM,oBAAoB2B,EAAEzG,SAAS,IAAI,CAAC,GAAGyG,IAAI,GAAG,OAAO1E,EAAEiR,QAAQnZ,EAAE4M,GAAG,EAAE,GAAGA,IAAI,IAAI,OAAO1E,EAAE0Q,SAAS5Y,EAAE,KAAKkI,EAAEiR,QAAQnZ,EAAE,EAAE4M,GAAG,EAAE,GAAGA,IAAI,MAAM,OAAO1E,EAAE0Q,SAAS5Y,EAAE,KAAKkI,EAAEkR,SAASpZ,EAAE,EAAE4M,GAAG,EAAE,GAAGA,IAAI,WAAW,OAAO1E,EAAE0Q,SAAS5Y,EAAE,KAAKkI,EAAEmR,SAASrZ,EAAE,EAAE4M,GAAG,EAAE,MAAM,IAAI3B,MAAM,yBAAyB2B,GAAGzG,SAAS,IAAI2I,OAAO,GAAG,CAAC,GAAG,OAAOlC,EAAE,OAAO1E,EAAE0Q,SAAS5Y,EAAE,KAAK,EAAE,GAAG,YAAY+V,EAAE,OAAO7N,EAAE0Q,SAAS5Y,EAAE4M,EAAE,IAAI,KAAK,EAAE,GAAG,WAAWmJ,EAAE,CAAC,IAAMW,EAAE,EAAEhH,EAAElG,MAAM8P,QAAQ1M,GAAG,GAAG8C,EAAEmJ,EAAEjM,EAAExM,WAAW,CAAC,IAAImZ,EAAExP,OAAOyP,KAAK5M,GAAGiM,EAAEU,EAAEnZ,MAAM,CAAO,GAAG,GAAGyY,GAAG3Q,EAAE0Q,SAAS5Y,EAAE6Y,GAAGnJ,EAAE,IAAI,MAAMgH,EAAE,GAAG,MAAMmC,GAAG3Q,EAAE0Q,SAAS5Y,EAAE0P,EAAE,IAAI,KAAKxH,EAAE4Q,UAAU9Y,EAAE,EAAE6Y,GAAGnC,EAAE,GAAG,WAAWmC,IAAI3Q,EAAE0Q,SAAS5Y,EAAE0P,EAAE,IAAI,KAAKxH,EAAE6Q,UAAU/Y,EAAE,EAAE6Y,GAAGnC,EAAE,GAAGhH,EAAE,IAAI,IAAIvP,EAAE,EAAE0Y,EAAE1Y,EAAEA,IAAIuW,GAAG+B,EAAE7L,EAAEzM,GAAG+H,EAAElI,EAAE0W,QAAQ,IAAQvW,EAAE,EAAE0Y,EAAE1Y,EAAEA,IAAI,CAAC,IAAID,EAAEqZ,EAAEpZ,GAAGuW,GAAG+B,EAAEvY,EAAEgI,EAAElI,EAAE0W,GAAGA,GAAG+B,EAAE7L,EAAE1M,GAAGgI,EAAElI,EAAE0W,EAAE,CAAC,OAAOA,CAAC,CAAC,MAAM,IAAIzL,MAAM,gBAAgB8K,EAAE,CAAC,SAAS7N,EAAE0E,GAAG,IAAIyI,SAASzI,EAAE,GAAG,WAAWyI,EAAE,CAAY,GAAG,IAAVoD,EAAEtQ,EAAEyE,IAAW,OAAO,EAAE6L,EAAE,GAAG,IAAIA,EAAE,OAAO,EAAEA,EAAE,GAAG,MAAMA,EAAE,OAAO,EAAEA,EAAE,GAAG,WAAWA,EAAE,OAAO,EAAEA,CAAC,CAAC,GAAG7L,aAAaoM,WAAW,CAAoB,GAAG,KAAlBP,EAAE7L,EAAE8L,YAAoB,OAAO,EAAED,EAAE,GAAG,MAAMA,EAAE,OAAO,EAAEA,EAAE,GAAG,WAAWA,EAAE,OAAO,EAAEA,CAAC,CAAC,GAAG,WAAWpD,EAAE,CAAC,GAAGhN,KAAKmN,MAAM5I,KAAKA,EAAE,OAAO,EAAE,GAAGA,GAAG,EAAE,CAAC,GAAG,IAAIA,EAAE,OAAO,EAAE,GAAG,IAAIA,EAAE,OAAO,EAAE,GAAG,MAAMA,EAAE,OAAO,EAAE,GAAG,WAAWA,EAAE,OAAO,EAAE,MAAM,IAAI3B,MAAM,oBAAoB2B,EAAEzG,SAAS,IAAI,CAAC,GAAGyG,IAAI,GAAG,OAAO,EAAE,GAAGA,IAAI,IAAI,OAAO,EAAE,GAAGA,IAAI,MAAM,OAAO,EAAE,GAAGA,IAAI,WAAW,OAAO,EAAE,MAAM,IAAI3B,MAAM,uBAAuB2B,EAAEzG,SAAS,IAAI2I,OAAO,GAAG,CAAC,GAAG,YAAYuG,GAAG,OAAOzI,EAAE,OAAO,EAAE,GAAG,WAAWyI,EAAE,CAAC,IAAIoD,EAAEzY,EAAE,EAAE,GAAGwJ,MAAM8P,QAAQ1M,GAAG,CAAC6L,EAAE7L,EAAExM,OAAO,IAAI,IAAI2V,EAAE,EAAE0C,EAAE1C,EAAEA,IAAI/V,GAAGkI,EAAE0E,EAAEmJ,GAAG,KAAK,CAAC,IAAI8C,EAAE9O,OAAOyP,KAAK5M,GAAc,IAAX6L,EAAEI,EAAEzY,OAAe2V,EAAE,EAAE0C,EAAE1C,EAAEA,IAAI,CAAC,IAAImB,EAAE2B,EAAE9C,GAAG/V,GAAGkI,EAAEgP,GAAGhP,EAAE0E,EAAEsK,GAAG,CAAC,CAAC,GAAG,GAAGuB,EAAE,OAAO,EAAEzY,EAAE,GAAG,MAAMyY,EAAE,OAAO,EAAEzY,EAAE,GAAG,WAAWyY,EAAE,OAAO,EAAEzY,EAAE,MAAM,IAAIiL,MAAM,8BAA8BwN,EAAEtS,SAAS,IAAI,CAAC,MAAM,IAAI8E,MAAM,gBAAgBoK,EAAE,CAAC,SAASrV,EAAE4M,GAAG,IAAIyI,EAAE,IAAIoE,YAAYvR,EAAE0E,IAAsB,OAAO6L,EAAE7L,EAAzB,IAAI8M,SAASrE,GAAgB,GAAG,IAAI2D,WAAW3D,EAAE,CAAC,SAASU,EAAEnJ,EAAEyI,EAAElN,GAAG,OAAOkN,EAAE,IAAIzI,EAAEyI,EAAE4D,OAAO5D,EAAEsE,WAAWtE,EAAEqD,YAAYvQ,GAAG,SAAI,CAAM,CAAC,SAAS0Q,EAAEjM,GAAG,OAAOmJ,EAAE2D,SAAS9M,EAAE,CAAC,SAASsK,EAAEtK,GAAG,OAAOmJ,EAAEiD,WAAWpM,EAAE,CAAC,SAAS8J,EAAE9J,GAAG,OAAOmJ,EAAE6D,UAAUhN,EAAE,CAAC,SAAS8C,EAAE9C,GAAG,OAAOmJ,EAAE8D,WAAWjN,EAAE,EAAE,CAAC,SAAS2M,EAAE3M,GAAG,OAAOmJ,EAAE+D,aAAalN,EAAE,EAAE,CAAC,SAASzM,EAAEyM,EAAEyI,GAAG,IAAIlN,EAAEyE,EAAExM,OAAO,EAAEiV,IAAIA,EAAE,IAAI0E,WAAW5R,IAAI,IAAI,IAAIsQ,EAAE,EAAEvQ,EAAE,EAAEC,EAAEsQ,IAAIA,EAAEvQ,GAAG,EAAEmN,EAAEoD,GAAG7L,EAAE1E,IAAI,EAAE0E,EAAE1E,EAAE,IAAI,EAAE,OAAOmN,CAAC,CAAC,SAASnV,EAAE0M,EAAEyI,GAAG,IAAIlN,EAAEyE,EAAExM,OAAOiV,IAAIA,EAAE,IAAI2D,WAAW,EAAE7Q,IAAI,IAAI,IAAIsQ,EAAEI,EAAExD,GAAGnN,EAAE,EAAEC,EAAED,IAAIA,EAAEuQ,EAAEW,SAAS,EAAElR,EAAE0E,EAAE1E,IAAI,OAAOgP,EAAE7B,EAAE,CAAC,SAAS2E,EAAEpN,EAAEyI,GAAG,IAAIlN,EAAEyE,EAAExM,OAAO,EAAEiV,IAAIA,EAAE,IAAIwE,WAAW1R,IAAI,IAAI,IAAIsQ,EAAE,EAAEvQ,EAAE,EAAEC,EAAEsQ,IAAIA,EAAEvQ,GAAG,EAAEmN,EAAEoD,GAAG7L,EAAE1E,IAAI,GAAG0E,EAAE1E,EAAE,IAAI,GAAG0E,EAAE1E,EAAE,IAAI,EAAE0E,EAAE1E,EAAE,IAAI,EAAE,OAAOmN,CAAC,CAAC,SAAS4E,EAAErN,EAAEyI,GAAG,IAAIlN,EAAEyE,EAAExM,OAAOiV,IAAIA,EAAE,IAAI2D,WAAW,EAAE7Q,IAAI,IAAI,IAAIsQ,EAAEI,EAAExD,GAAGnN,EAAE,EAAEC,EAAED,IAAIA,EAAEuQ,EAAEY,SAAS,EAAEnR,EAAE0E,EAAE1E,IAAI,OAAOgP,EAAE7B,EAAE,CAAC,SAAS6E,EAAEtN,EAAEyI,GAAG,IAAIlN,EAAEyE,EAAExM,OAAOiV,IAAIA,EAAE,IAAIyE,aAAa3R,EAAE,IAAI,IAAI,IAAIsQ,EAAEI,EAAExD,GAAGnN,EAAE2Q,EAAEjM,GAAG5M,EAAE,EAAE+V,EAAE,EAAEmB,EAAE/O,EAAE,EAAE+O,EAAElX,IAAIA,EAAE+V,GAAG,EAAE0C,EAAE0B,WAAWpE,EAAE7N,EAAEkS,WAAWrE,IAAG,GAAI,OAAOV,CAAC,CAAC,SAASgF,EAAEzN,EAAEyI,EAAElN,GAAG,IAAIsQ,EAAE7L,EAAExM,OAAO8H,EAAE,EAAEmN,EAAElN,IAAIA,EAAE,IAAI2R,aAAarB,IAAI,IAAI,IAAIzY,EAAE,EAAEyY,EAAEzY,IAAIA,EAAEmI,EAAEnI,GAAG4M,EAAE5M,GAAGkI,EAAE,OAAOC,CAAC,CAAC,SAASwN,EAAE/I,EAAEyI,EAAElN,GAAG,IAAIsQ,EAAE7L,EAAExM,OAAO+H,IAAIA,EAAE,IAAI0R,WAAWpB,IAAI,IAAI,IAAIvQ,EAAE,EAAEuQ,EAAEvQ,IAAIA,EAAEC,EAAED,GAAGG,KAAKkN,MAAM3I,EAAE1E,GAAGmN,GAAG,OAAOlN,CAAC,CAAC,SAAS0E,EAAED,EAAEyI,GAAG,IAAIlN,EAAEsQ,EAAE,IAAIpD,EAAE,CAAC,IAAInN,EAAE,EAAE,IAAIC,EAAE,EAAEsQ,EAAE7L,EAAExM,OAAOqY,EAAEtQ,EAAEA,GAAG,EAAED,GAAG0E,EAAEzE,EAAE,GAAGkN,EAAE,IAAIzI,EAAEsG,YAAYhL,EAAE,CAAC,IAAIlI,EAAE,EAAE,IAAImI,EAAE,EAAEsQ,EAAE7L,EAAExM,OAAOqY,EAAEtQ,EAAEA,GAAG,EAAE,IAAI,IAAI4N,EAAEnJ,EAAEzE,GAAG0Q,EAAEjM,EAAEzE,EAAE,GAAG+O,EAAE,EAAE2B,EAAE3B,IAAIA,EAAE7B,EAAErV,GAAG+V,IAAI/V,EAAE,OAAOqV,CAAC,CAAC,SAASiF,EAAE1N,GAAG,GAAG,IAAIA,EAAExM,OAAO,OAAO,IAAIyZ,WAAW,IAAIxE,EAAElN,EAAEsQ,EAAE,EAAE,IAAIpD,EAAE,EAAElN,EAAEyE,EAAExM,OAAO+H,EAAEkN,IAAIA,EAAEzI,EAAEyI,EAAE,KAAKzI,EAAEyI,KAAKoD,GAAG,GAAG,IAAIvQ,EAAE,IAAI2R,WAAWpB,GAAGzY,EAAE,EAAE+V,EAAE,EAAE,IAAIV,EAAE,EAAElN,EAAEyE,EAAExM,OAAO+H,EAAEkN,IAAIA,EAAEzI,EAAEyI,EAAE,KAAKzI,EAAEyI,IAAInN,EAAElI,GAAG4M,EAAEyI,EAAE,GAAGnN,EAAElI,EAAE,GAAG+V,EAAEA,EAAE,EAAE/V,GAAG,KAAK+V,EAAE,OAAO7N,EAAElI,GAAG4M,EAAEA,EAAExM,OAAO,GAAG8H,EAAElI,EAAE,GAAG+V,EAAE7N,CAAC,CAAC,SAASqS,EAAE3N,EAAEyI,GAAG,IAAIlN,EAAEyE,EAAExM,OAAOiV,IAAIA,EAAE,IAAIzI,EAAEsG,YAAY/K,IAAIA,IAAIkN,EAAE,GAAGzI,EAAE,IAAI,IAAI,IAAI6L,EAAE,EAAEtQ,EAAEsQ,IAAIA,EAAEpD,EAAEoD,GAAG7L,EAAE6L,GAAGpD,EAAEoD,EAAE,GAAG,OAAOpD,CAAC,CAAC,SAASmF,EAAE5N,EAAEyI,GAAG,IAAIlN,EAAEyE,EAAExM,OAAOiV,IAAIA,EAAE,IAAIzI,EAAEsG,YAAY/K,IAAIkN,EAAE,GAAGzI,EAAE,GAAG,IAAI,IAAI6L,EAAE,EAAEtQ,EAAEsQ,IAAIA,EAAEpD,EAAEoD,GAAG7L,EAAE6L,GAAG7L,EAAE6L,EAAE,GAAG,OAAOpD,CAAC,CAAC,SAASoF,EAAE7N,EAAEyI,GAAG,IAAIlN,EAAEsQ,EAAEvQ,EAAE0E,aAAagN,UAAU,IAAI,MAAM5Z,GAAGkI,EAAE,EAAE6N,EAAEnJ,EAAExM,OAAO,IAAIiV,EAAE,CAAC,IAAIwD,EAAE,EAAE,IAAI1Q,EAAE,EAAE4N,EAAE5N,IAAIA,EAAEyE,EAAEzE,GAAGD,GAAG0E,EAAEzE,GAAGnI,KAAK6Y,EAAExD,EAAE,IAAIwE,WAAWhB,EAAE,CAAC,IAAI1Q,EAAE,EAAEsQ,EAAE,EAAE1C,EAAE5N,GAAG,CAAC,IAAI,IAAI+O,EAAE,EAAEtK,EAAEzE,KAAKD,GAAG0E,EAAEzE,KAAKnI,GAAGkX,GAAGtK,EAAEzE,KAAKA,EAAE+O,GAAGtK,EAAEzE,KAAKA,EAAEkN,EAAEoD,GAAGvB,IAAIuB,CAAC,CAAC,OAAOpD,CAAC,CAAC,SAASqF,EAAE9N,EAAEyI,GAAG,IAAIlN,EAAEsQ,EAAEpD,EAAE,IAAI,MAAMnN,GAAGuQ,EAAE,EAAEzY,EAAE4M,EAAExM,OAAO2V,EAAE,EAAE,IAAI5N,EAAE,EAAEnI,EAAEmI,IAAIA,EAAc,KAAP0Q,EAAEjM,EAAEzE,MAAW4N,EAAEA,GAAG8C,IAAIJ,GAAGI,IAAI3Q,EAAE,EAAE2Q,EAAE,EAAExQ,KAAKsS,KAAK9B,EAAEJ,GAAGpQ,KAAKsS,KAAK9B,EAAE3Q,GAAG,IAAIgP,EAAE7B,EAAE,IAAIuE,UAAU7D,GAAG,IAAIgE,WAAWhE,GAAGW,EAAE,EAAE,IAAIvO,EAAE,EAAEnI,EAAEmI,IAAIA,EAAE,CAAC,IAAI0Q,EAAO,IAAPA,EAAEjM,EAAEzE,KAAS,EAAE,KAAK0Q,GAAGJ,GAAGvB,EAAER,GAAG+B,IAAI/B,EAAEmC,GAAGJ,OAAO,KAAKvQ,GAAG2Q,GAAG3B,EAAER,GAAGxO,IAAIwO,EAAEmC,GAAG3Q,EAAEgP,EAAER,GAAGmC,IAAInC,CAAC,CAAC,OAAOQ,CAAC,CAAC,SAAS0D,EAAEhO,EAAEyI,GAAG,OAAOkF,EAAE1N,EAAED,GAAGyI,EAAE,CAAC,SAASS,EAAElJ,GAAG,OAAO0N,EAAEE,EAAE5N,GAAG,CAAC,SAASiO,EAAEjO,EAAEyI,EAAElN,GAAG,OAAOkS,EAAExN,EAAED,EAAE8C,EAAEvH,IAAIkN,EAAElN,EAAE,CAAC,SAAS2S,EAAElO,EAAEyI,GAAG,OAAOiF,EAAE3E,EAAE/I,EAAEyI,GAAG,CAAC,SAAS0F,EAAEnO,EAAEyI,EAAElN,GAAG,OAAOkS,EAAEE,EAAE3N,EAAE8C,EAAEvH,IAAIkN,EAAElN,EAAE,CAAC,SAAS6S,EAAEpO,EAAEyI,EAAElN,GAAG,OAAOqS,EAAE7E,EAAE/I,EAAEyI,GAAGlN,EAAE,CAAC,SAAS8S,EAAErO,EAAEyI,EAAElN,GAAG,OAAOkS,EAAEI,EAAE7N,EAAE8C,EAAEvH,IAAIkN,EAAElN,EAAE,CAAC,SAAS+S,EAAEtO,EAAEyI,EAAElN,GAAG,IAAIsQ,EAAEgC,EAAE7N,EAAE8C,EAAEvH,IAAI,OAAO4S,EAAEtC,EAAEpD,EAAEkE,EAAEd,GAAG,CAAC,SAAS0C,EAAEvO,EAAEyI,EAAElN,GAAG,OAAOuS,EAAEM,EAAEpO,EAAEyI,GAAGlN,EAAE,CAAC,SAASlI,EAAE2M,GAAG,IAAIyI,EAAEwD,EAAEjM,GAAGzE,EAAEkN,EAAE+F,SAAS,GAAG3C,EAAEpD,EAAE+F,SAAS,GAAGlT,EAAE0E,EAAEyO,SAAS,EAAE,IAAqB,MAAM,CAAClT,EAAxByE,EAAEA,EAAEyO,SAAS,IAAe5C,EAAEvQ,EAAE,CAAC,SAASoT,EAAE1O,EAAEyI,EAAElN,EAAEsQ,GAAG,IAAIvQ,EAAE,IAAIuR,YAAY,GAAGhB,EAAEC,YAAY1Y,EAAE,IAAIgZ,WAAW9Q,GAAG6N,EAAE,IAAI2D,SAASxR,GAAG,OAAO6N,EAAEsD,SAAS,EAAEzM,GAAGmJ,EAAEsD,SAAS,EAAEhE,GAAGlN,GAAGnI,EAAEuG,IAAI4B,EAAE,GAAGnI,EAAEuG,IAAIkS,EAAE,IAAIzY,CAAC,CAAC,SAASub,EAAE3O,GAAyB,OAAO0O,EAAE,EAAzB1O,EAAExM,YAA2B,EAAlB8W,EAAEtK,GAAyB,CAAC,SAAS4O,EAAE5O,GAAyB,OAAO0O,EAAE,EAAzB1O,EAAExM,YAA2B,EAAlB6Z,EAAErN,GAAyB,CAAC,SAAS6O,EAAE7O,EAAEyI,GAAoC,OAAOiG,EAAE,EAApC1O,EAAExM,OAAOiV,EAAI4E,EAAE,CAAC5E,IAAM6B,EAAEtK,GAAoB,CAAC,SAAS8O,EAAE9O,GAA4B,OAAO0O,EAAE,EAA5B1O,EAAExM,YAA8B,EAArB6Z,EAAEK,EAAE1N,IAA0B,CAAC,SAAS+O,EAAE/O,GAA4B,OAAO0O,EAAE,EAA5B1O,EAAExM,YAA8B,EAArB6Z,EAAEnE,EAAElJ,IAA0B,CAAC,SAASgP,EAAEhP,EAAEyI,GAAuC,OAAOiG,EAAE,EAAvC1O,EAAExM,OAAS6Z,EAAE,CAAC5E,IAAM4E,EAAEa,EAAElO,EAAEyI,IAAqB,CAAC,SAASwG,EAAEjP,EAAEyI,GAAuC,OAAOiG,EAAE,GAAvC1O,EAAExM,OAAS6Z,EAAE,CAAC5E,IAAMnV,EAAEib,EAAEvO,EAAEyI,IAAsB,CAAC,SAASyG,EAAElP,GAAG,IAAIyI,EAAE,CAAC,EAAE,OAAO0G,GAAGC,SAAQ,SAAS7T,QAAG,IAASyE,EAAEzE,KAAKkN,EAAElN,GAAGyE,EAAEzE,GAAG,IAAGyE,EAAEqP,eAAe5G,EAAE4G,aAAaT,EAAE5O,EAAEqP,eAAerP,EAAEsP,gBAAgB7G,EAAE6G,cAAcX,EAAE3O,EAAEsP,gBAAgB7G,EAAE8G,WAAWN,EAAEjP,EAAEuP,WAAW,KAAK9G,EAAE+G,WAAWP,EAAEjP,EAAEwP,WAAW,KAAK/G,EAAEgH,WAAWR,EAAEjP,EAAEyP,WAAW,KAAKzP,EAAE0P,cAAcjH,EAAEiH,YAAYT,EAAEjP,EAAE0P,YAAY,MAAM1P,EAAE2P,aAAalH,EAAEkH,WAAWZ,EAAE/O,EAAE2P,aAAa3P,EAAE4P,aAAanH,EAAEmH,WAAWd,EAAE9O,EAAE4P,aAAa5P,EAAE6P,gBAAgBpH,EAAEoH,cAAcb,EAAEhP,EAAE6P,cAAc,MAAMpH,EAAEqH,YAAYf,EAAE/O,EAAE8P,aAAarH,EAAEsH,cAAcnB,EAAE5O,EAAE+P,eAAe/P,EAAEgQ,gBAAgBvH,EAAEuH,cAAcrB,EAAE3O,EAAEgQ,cAAc,IAAIhQ,EAAEiQ,cAAcxH,EAAEwH,YAAYnB,EAAE9O,EAAEiQ,cAAcjQ,EAAEkQ,oBAAoBzH,EAAEyH,kBAAkBnB,EAAE/O,EAAEkQ,oBAAoBzH,EAAE0H,YAAYtB,EAAE7O,EAAEmQ,YAAY,GAAGnQ,EAAEoQ,gBAAgB3H,EAAE2H,cAAcvB,EAAE7O,EAAEoQ,cAAc,IAAI3H,CAAC,CAAC,SAAS4H,EAAErQ,GAAG,SAASyI,EAAEzI,GAAG,IAAI,IAAIyI,EAAE,CAAC,EAAElN,EAAE,EAAEyE,EAAEzE,EAAEA,IAAekN,EAAJrV,KAASA,IAAI,OAAOqV,CAAC,CAAC,SAASlN,EAAEkN,GAAG,IAAIlN,EAAEyE,EAAEyO,SAAStF,EAAEA,EAAEV,GAAG,OAAOU,GAAGV,EAAElN,CAAC,CAAC,SAASsQ,EAAEpD,GAAG,IAAIlN,EAAEyE,EAAEyO,SAAStF,EAAEA,EAAEV,GAAGU,GAAGV,EAAE,IAAIoD,EAAE,MAAM,GAAGpD,EAAEoD,EAAE,CAAC,IAAI,IAAIvQ,EAAE,GAAGlI,EAAE,EAAEA,EAAEmI,EAAE/H,OAAOJ,GAAGyY,EAAEvQ,EAAEkE,KAAK3B,OAAOyS,aAAajP,MAAM,KAAK9F,EAAEkT,SAASrb,EAAEA,EAAEyY,KAAK,OAAOvQ,EAAEqF,KAAK,GAAG,CAAC,OAAO9C,OAAOyS,aAAajP,MAAM,KAAK9F,EAAE,CAAC,SAASD,EAAE0E,GAAG,IAAI,IAAIyI,EAAE,IAAI7L,MAAMoD,GAAGzE,EAAE,EAAEyE,EAAEzE,EAAEA,IAAIkN,EAAElN,GAAGnI,IAAI,OAAOqV,CAAC,CAAC,SAASrV,IAAI,IAAIA,EAAEkX,EAAER,EAAE9J,EAAEmJ,GAAG,GAAG,IAAK,IAAIW,GAAG,OAAOX,IAAIW,EAAE,GAAG,MAAO,IAAIA,GAAG,OAAcX,IAAIV,EAAX6B,EAAE,GAAGR,GAAW,GAAG,MAAO,IAAIA,GAAG,OAAcX,IAAI7N,EAAXgP,EAAE,GAAGR,GAAW,GAAG,MAAO,IAAIA,GAAG,OAAcX,IAAI0C,EAAXvB,EAAE,GAAGR,GAAW,GAAG,MAAO,IAAIA,GAAG,OAAO1W,EAAE6Y,EAAEsE,QAAQpH,GAAGA,IAAI/V,EAAE,OAAO0W,GAAG,KAAK,IAAI,OAAOX,IAAI,KAAK,KAAK,IAAI,OAAOA,KAAI,EAAG,KAAK,IAAI,OAAOA,KAAI,EAAG,KAAK,IAAI,OAAOmB,EAAE2B,EAAEuE,SAASrH,EAAE,GAAGA,GAAG,EAAE5N,EAAE+O,GAAG,KAAK,IAAI,OAAOA,EAAE2B,EAAEwE,UAAUtH,EAAE,GAAGA,GAAG,EAAE5N,EAAE+O,GAAG,KAAK,IAAI,OAAOA,EAAE2B,EAAEyE,UAAUvH,EAAE,GAAGA,GAAG,EAAE5N,EAAE+O,GAAG,KAAK,IAAI,OAAOlX,EAAE6Y,EAAEuB,WAAWrE,EAAE,GAAGA,GAAG,EAAE/V,EAAE,KAAK,IAAI,OAAOA,EAAE6Y,EAAE0E,WAAWxH,EAAE,GAAGA,GAAG,EAAE/V,EAAE,KAAK,IAAI,OAAOA,EAAE4M,EAAEmJ,EAAE,GAAGA,GAAG,EAAE/V,EAAE,KAAK,IAAI,OAAOA,EAAE6Y,EAAEwE,UAAUtH,EAAE,GAAGA,GAAG,EAAE/V,EAAE,KAAK,IAAI,OAAOA,EAAE6Y,EAAEyE,UAAUvH,EAAE,GAAGA,GAAG,EAAE/V,EAAE,KAAK,IAAI,OAAOA,EAAE6Y,EAAEsE,QAAQpH,EAAE,GAAGA,GAAG,EAAE/V,EAAE,KAAK,IAAI,OAAOA,EAAE6Y,EAAE2E,SAASzH,EAAE,GAAGA,GAAG,EAAE/V,EAAE,KAAK,IAAI,OAAOA,EAAE6Y,EAAEuC,SAASrF,EAAE,GAAGA,GAAG,EAAE/V,EAAE,KAAK,IAAI,OAAOkX,EAAE2B,EAAEuE,SAASrH,EAAE,GAAGA,GAAG,EAAE0C,EAAEvB,GAAG,KAAK,IAAI,OAAOA,EAAE2B,EAAEwE,UAAUtH,EAAE,GAAGA,GAAG,EAAE0C,EAAEvB,GAAG,KAAK,IAAI,OAAOA,EAAE2B,EAAEyE,UAAUvH,EAAE,GAAGA,GAAG,EAAE0C,EAAEvB,GAAG,KAAK,IAAI,OAAOA,EAAE2B,EAAEwE,UAAUtH,EAAE,GAAGA,GAAG,EAAE7N,EAAEgP,GAAG,KAAK,IAAI,OAAOA,EAAE2B,EAAEyE,UAAUvH,EAAE,GAAGA,GAAG,EAAE7N,EAAEgP,GAAG,KAAK,IAAI,OAAOA,EAAE2B,EAAEwE,UAAUtH,EAAE,GAAGA,GAAG,EAAEV,EAAE6B,GAAG,KAAK,IAAI,OAAOA,EAAE2B,EAAEyE,UAAUvH,EAAE,GAAGA,GAAG,EAAEV,EAAE6B,GAAG,MAAM,IAAIjM,MAAM,kBAAkByL,EAAEvQ,SAAS,IAAI,CAAC,IAAI4P,EAAE,EAAE8C,EAAE,IAAIa,SAAS9M,EAAEqM,QAAQ,OAAOjZ,GAAG,CAAC,SAASyd,EAAE7Q,EAAEyI,EAAElN,EAAEsQ,GAAG,OAAO7L,GAAG,KAAK,EAAE,OAAOsN,EAAE7E,GAAG,KAAK,EAAE,OAAOqB,EAAErB,GAAG,KAAK,EAAE,OAAOlV,EAAEkV,GAAG,KAAK,EAAE,OAAO2E,EAAE3E,GAAG,KAAK,EAAE,OAAO6B,EAAE7B,GAAG,KAAK,EAAE,OAAOxI,EAAEmN,EAAE3E,GAAG,IAAI2D,WAAW7Q,IAAI,KAAK,EAAE,OAAO0E,EAAEmN,EAAE3E,IAAI,KAAK,EAAE,OAAOuF,EAAEZ,EAAE3E,IAAI,KAAK,EAAE,OAAOwF,EAAEb,EAAE3E,GAAG2E,EAAEvB,GAAG,IAAI,KAAK,GAAG,OAAOyC,EAAE/a,EAAEkV,GAAG2E,EAAEvB,GAAG,IAAI,KAAK,GAAG,OAAO4B,EAAEla,EAAEkV,GAAG2E,EAAEvB,GAAG,IAAI,KAAK,GAAG,OAAOwC,EAAE9a,EAAEkV,GAAG2E,EAAEvB,GAAG,IAAI,KAAK,GAAG,OAAOwC,EAAEvE,EAAErB,GAAG2E,EAAEvB,GAAG,IAAI,KAAK,GAAG,OAAOgC,EAAEta,EAAEkV,IAAI,KAAK,GAAG,OAAOoF,EAAE/D,EAAErB,IAAI,CAAC,SAASqI,EAAE9Q,EAAEyI,GAAW,IAAIlN,GAAZkN,EAAEA,GAAG,CAAC,GAAUsI,aAAalF,EAAE,CAAC,EAAE,OAAOmF,GAAG5B,SAAQ,SAAS3G,GAAG,IAAInN,IAAEC,IAAG,IAAIA,EAAE0V,QAAQxI,GAAMrV,EAAE4M,EAAEyI,GAAGnN,QAAG,IAASlI,IAAIA,aAAagZ,WAAWP,EAAEpD,GAAGoI,EAAExP,MAAM,KAAKhO,EAAED,IAAIyY,EAAEpD,GAAGrV,EAAE,IAAGyY,CAAC,CAAC,SAASqF,EAAElR,GAAG,OAAOnC,OAAOyS,aAAajP,MAAM,KAAKrB,GAAG0C,QAAQ,MAAM,GAAG,CAAC,SAASyO,EAAEnR,EAAEyI,EAAElN,GAAW,IAAIsQ,EAAEvQ,EAAElI,EAAE+V,EAAE8C,EAAE3B,EAAER,GAAxBvO,EAAEA,GAAG,CAAC,GAAsB6V,eAAetO,EAAE2F,EAAE4I,QAAQ1E,EAAElE,EAAE6I,QAAQ/d,EAAEkV,EAAE8I,QAAQje,EAAEmV,EAAE+I,OAAOpE,EAAE3E,EAAEgJ,OAAOpE,EAAE,EAAEC,EAAE,EAAEG,EAAE,EAAE1E,EAAE,EAAE9I,EAAE,EAAEyN,GAAG,EAAEC,EAAE3N,EAAEoQ,cAAcxC,EAAE5N,EAAEgQ,cAAcnC,EAAE7N,EAAEiQ,YAAYnC,EAAE9N,EAAEkQ,kBAAkBlC,EAAEhO,EAAE2P,WAAWzG,EAAElJ,EAAE0P,YAAYzB,EAAEjO,EAAE4P,WAAW1B,EAAElO,EAAE6P,cAAc1B,EAAEnO,EAAEqP,aAAajB,EAAEpO,EAAEsP,cAAc,IAAIzD,EAAE,EAAEvQ,EAAE0E,EAAE0R,eAAele,OAAO8H,EAAEuQ,KAAK/B,GAAGuD,EAAE,KAAKxB,EAAE,CAAC,IAAIwC,EAAErO,EAAE0R,eAAerE,GAAG,IAAIvK,GAAGA,EAAE,CAAC6O,WAAWtD,EAAEuD,WAAWvE,IAAIja,EAAE,EAAEib,EAAEjb,IAAIA,EAAE,CAAC,IAAIkb,EAAEtO,EAAE6R,eAAevE,GAAG,GAAGX,EAAE,CAAC,IAAI4B,EAAE2C,EAAElR,EAAEmQ,YAAY1B,SAAS,EAAEnB,EAAE,EAAEA,EAAE,IAAIja,EAAE,KAAKsa,IAAIta,EAAE6d,EAAEvD,EAAEc,SAAS,EAAEnB,EAAE,EAAEA,EAAE,KAAKX,EAAE,CAACmF,WAAWxD,EAAEyD,WAAWzE,EAAEsE,WAAWvE,EAAE2E,QAAQzD,EAAE0D,UAAU5e,GAAG,CAAC,IAAI8V,EAAE,EAAEmF,EAAEnF,IAAIA,EAAE,CAAC,IAAIuF,EAAE1O,EAAEkS,UAAUlS,EAAE+P,cAActC,IAAIkB,EAAED,EAAEyD,aAAa3e,OAAO,GAAGD,EAAE,CAAC,IAAIqb,EAAE,KAAKhB,IAAIgB,EAAEhB,EAAEH,IAAI,IAAIoB,EAAE,KAAK7O,EAAEiQ,cAAcpB,EAAEhR,OAAOyS,aAAazC,EAAEJ,KAAK,IAAIqB,EAAE,KAAKhB,IAAIgB,EAAEhB,EAAEL,IAAIla,EAAE,CAAC6e,UAAUzD,EAAE0D,WAAW5E,EAAEsE,WAAWzE,EAAEsE,WAAWvE,EAAEiF,QAAQtS,EAAE8P,YAAYrC,GAAG8E,UAAUvS,EAAE+P,cAActC,GAAG+E,UAAU9D,EAAE8D,UAAUC,iBAAiB/D,EAAE+D,iBAAiBC,aAAahE,EAAEgE,aAAaC,UAAU/D,EAAEgE,QAAQ/D,EAAEgE,cAAc/D,GAAG,CAAC,IAAI7C,EAAE,EAAE0C,EAAE1C,IAAIA,EAAE,CAAC,GAAG3Y,EAAE,CAAC,IAAIyb,EAAE,KAAKf,IAAIe,EAAEf,EAAEjF,IAAI,IAAIiG,EAAE,KAAK9F,IAAI8F,EAAE9F,EAAEH,IAAI,IAAIkG,EAAE,KAAKhB,IAAIgB,EAAEpR,OAAOyS,aAAarC,EAAElF,KAAK,IAAImG,EAAE,KAAKhB,IAAIgB,EAAEhB,EAAEnF,IAAIzV,EAAE,CAACwf,UAAU/J,EAAEsJ,WAAW5E,EAAEsE,WAAWzE,EAAEsE,WAAWvE,EAAE0F,OAAOhE,EAAEiE,QAAQtE,EAAEuE,YAAYhH,GAAGiH,SAASxE,EAAEyD,aAAalG,GAAGkH,aAAazE,EAAE0E,iBAAiBnH,GAAGoH,OAAOrT,EAAEuP,WAAWxG,GAAGuK,OAAOtT,EAAEwP,WAAWzG,GAAGwK,OAAOvT,EAAEyP,WAAW1G,GAAGyK,QAAQxE,EAAEyE,OAAOxE,EAAEyE,UAAUxE,GAAG,CAACnG,GAAG,CAAC,CAAC,GAAGqE,EAAE,CAAC,IAAIiD,EAAE3B,EAAEW,aAAa,IAAIpD,EAAE,EAAE3B,EAAEoE,EAAEY,cAAc9b,OAAO8W,EAAE2B,IAAIA,EAAEmB,EAAE,CAACuG,WAAW5K,EAAE4F,EAAE0B,EAAE,EAAEpE,GAAG2H,WAAW7K,EAAE4F,EAAE0B,EAAE,EAAEpE,EAAE,GAAG4H,UAAUnF,EAAEY,cAAcrD,IAAI,CAACwB,GAAG,CAAC,CAACH,GAAG,CAAC,CAAC,GAAGrN,EAAEyN,EAAE,EAAEA,EAAE3E,EAAE,EAAEqE,GAAGe,EAAE,IAAIlC,EAAE,EAAE3B,EAAE6D,EAAE3a,OAAO8W,EAAE2B,EAAEA,GAAG,EAAE,CAAC,IAAI4E,EAAE1C,EAAElC,GAAG6E,EAAE3C,EAAElC,EAAE,IAAI4E,GAAG5Q,GAAGyN,GAAGmD,GAAGC,GAAG7Q,GAAGyN,GAAGoD,IAAI1D,EAAE,CAACuG,WAAW9C,EAAE+C,WAAW9C,EAAE+C,UAAUzF,EAAEA,EAAEnC,EAAE,GAAG,MAAM,CAACoB,GAAG,CAAC,CAAC,CAAC,SAASyG,EAAE9T,GAAG,OAAO5M,EAAE8b,EAAElP,GAAG,CAAC,SAAS+T,EAAE/T,EAAEyI,GAAyD,OAAtDzI,aAAa6M,cAAc7M,EAAE,IAAIoM,WAAWpM,IAAkD8Q,EAA/B9Q,aAAaoM,WAAWiE,EAAErQ,GAAGA,EAAMyI,EAAE,CAAC,SAASuL,EAAEhU,EAAEyI,EAAElN,EAAEsQ,GAAG,SAASvQ,IAAI,IAAI,IAAI0E,EAAE+T,EAAE3gB,EAAE6gB,UAAU1Y,EAAEyE,EAAE,CAAC,MAAMyI,GAAGoD,EAAEpD,EAAE,CAAC,CAAC,IAAIrV,EAAE,IAAI8gB,eAAe9gB,EAAE+gB,iBAAiB,OAAO7Y,GAAE,GAAIlI,EAAE+gB,iBAAiB,QAAQtI,GAAE,GAAIzY,EAAEghB,aAAa,cAAchhB,EAAEihB,KAAK,MAAM5L,EAAEzI,EAAE/E,eAAe7H,EAAEkhB,MAAM,CAAC,SAASzb,EAAEmH,EAAEyI,EAAElN,GAAGyY,EAAEhU,EAAEuU,GAAG9L,EAAElN,EAAE,CAAC,SAASuB,EAAEkD,EAAEyI,EAAElN,GAAGyY,EAAEhU,EAAEwU,GAAG/L,EAAElN,EAAE,CAAC,IAAI4T,GAAG,CAAC,cAAc,eAAe,WAAW,aAAa,cAAc,QAAQ,iBAAiB,cAAc,sBAAsB,aAAa,QAAQ,QAAQ,kBAAkB,kBAAkB,aAAa,YAAY,WAAW,WAAW,YAAY,YAAY,YAAY,iBAAiB,kBAAkBsF,GAAG,CAAC,aAAa,aAAa,aAAa,cAAc,gBAAgB,cAAc,cAAc,aAAa,aAAa,gBAAgB,gBAAgB,cAAc,oBAAoB,gBAAgB,eAAe,iBAAiBzD,GAAG7B,GAAG7R,OAAOmX,IAAIC,GAAG,YAAYC,GAAG,wBAAwBJ,GAAGI,GAAG,QAAQH,GAAGG,GAAG,WAAW3U,EAAE4U,OAAOd,EAAE9T,EAAE6U,OAAOd,EAAE/T,EAAE8U,SAAS3D,EAAEnR,EAAE+U,MAAMlc,EAAEmH,EAAEgV,aAAalY,EAAEkD,EAAEiV,QAAQP,GAAG1U,EAAEkV,SAASX,GAAGvU,EAAEmV,gBAAgBX,GAAGxU,EAAEoV,cAAchiB,EAAE4M,EAAEqV,WAAWnG,EAAElP,EAAEsV,cAAcjF,EAAErQ,EAAEuV,WAAWzE,CAAC,GAAh7Z,8B,uBCA5Ele,EAAOD,QAAUM,C,uBCAjBL,EAAOD,QAAUO,C,GCCbsiB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAahjB,QAGrB,IAAIC,EAAS4iB,EAAyBE,GAAY,CAGjD/iB,QAAS,CAAC,GAOX,OAHAkjB,EAAoBH,GAAU3W,KAAKnM,EAAOD,QAASC,EAAQA,EAAOD,QAAS8iB,GAGpE7iB,EAAOD,OACf,CCrBA8iB,EAAoBla,EAAK3I,IACxB,IAAIkjB,EAASljB,GAAUA,EAAOmjB,WAC7B,IAAOnjB,EAAiB,QACxB,IAAM,EAEP,OADA6iB,EAAoB9I,EAAEmJ,EAAQ,CAAE3M,EAAG2M,IAC5BA,CAAM,ECLdL,EAAoB9I,EAAI,CAACha,EAASqjB,KACjC,IAAI,IAAI/Y,KAAO+Y,EACXP,EAAoBriB,EAAE4iB,EAAY/Y,KAASwY,EAAoBriB,EAAET,EAASsK,IAC5EE,OAAO8Y,eAAetjB,EAASsK,EAAK,CAAEiZ,YAAY,EAAMxc,IAAKsc,EAAW/Y,IAE1E,ECNDwY,EAAoBriB,EAAI,CAACoX,EAAK2L,IAAUhZ,OAAOgC,UAAUC,eAAeL,KAAKyL,EAAK2L,G,yFCA9EC,EAAsC,WAStC,OARAA,EAAWjZ,OAAOJ,QAAU,SAAS0L,GACjC,IAAK,IAAI6B,EAAGhP,EAAI,EAAGC,EAAIyD,UAAUxL,OAAQ8H,EAAIC,EAAGD,IAE5C,IAAK,IAAI2E,KADTqK,EAAItL,UAAU1D,GACO6B,OAAOgC,UAAUC,eAAeL,KAAKuL,EAAGrK,KACzDwI,EAAExI,GAAKqK,EAAErK,IAEjB,OAAOwI,CACX,EACO2N,EAAS/U,MAAMrO,KAAMgM,UAChC,EACIqX,EAAW,CACXrU,MAAO,GACPxO,OAAQ,EACR8iB,MAAO,EACPC,OAAQ,GACRlb,MAAO,EACPmb,QAAS,EACTC,MAAO,OACPC,UAAW,cACXC,UAAW,4BACXnb,OAAQ,EACRob,UAAW,EACXC,MAAO,EACPC,OAAQ,IACRC,UAAW,UACXC,IAAK,MACLC,KAAM,MACNC,OAAQ,sBACRC,SAAU,YAEVC,EAAyB,WACzB,SAASA,EAAQpb,QACA,IAATA,IAAmBA,EAAO,CAAC,GAC/BhJ,KAAKgJ,KAAOoa,EAASA,EAAS,CAAC,EAAGC,GAAWra,EACjD,CAoCA,OA9BAob,EAAQjY,UAAUkY,KAAO,SAAUC,GAe/B,OAdAtkB,KAAKukB,OACLvkB,KAAKwkB,GAAKC,SAASC,cAAc,OACjC1kB,KAAKwkB,GAAGT,UAAY/jB,KAAKgJ,KAAK+a,UAC9B/jB,KAAKwkB,GAAGG,aAAa,OAAQ,eAC7B3kB,KAAKwkB,GAAGI,MAAMT,SAAWnkB,KAAKgJ,KAAKmb,SACnCnkB,KAAKwkB,GAAGI,MAAMtB,MAAQ,IACtBtjB,KAAKwkB,GAAGI,MAAMd,OAAS9jB,KAAKgJ,KAAK8a,OAAOvd,WACxCvG,KAAKwkB,GAAGI,MAAMX,KAAOjkB,KAAKgJ,KAAKib,KAC/BjkB,KAAKwkB,GAAGI,MAAMZ,IAAMhkB,KAAKgJ,KAAKgb,IAC9BhkB,KAAKwkB,GAAGI,MAAMC,UAAY,SAASva,OAAOtK,KAAKgJ,KAAKX,MAAO,KACvDic,GACAA,EAAOQ,aAAa9kB,KAAKwkB,GAAIF,EAAOS,YAAc,MA8B9D,SAAmBP,EAAIxb,GACnB,IAAIgc,EAAgBvc,KAAKkN,MAAM3M,EAAKwa,QAAUxa,EAAKsa,MAAQ,KAAO,IAAQ,KACtEY,EAAS,QACO,IAAhBlb,EAAKkb,OACLA,EAAS,iBAEmB,iBAAhBlb,EAAKkb,SACjBA,EAASlb,EAAKkb,QAGlB,IADA,IAAIe,EAyBR,SAAwBC,GAGpB,IAFA,IAAIC,EAAQ,kFACRF,EAAU,GACLtO,EAAK,EAAGyO,EAAKF,EAAUjW,MAAM,KAAM0H,EAAKyO,EAAG5kB,OAAQmW,IAAM,CAC9D,IACIzG,EADSkV,EAAGzO,GACK9I,MAAMsX,GAC3B,GAAgB,OAAZjV,EAAJ,CAGA,IAAIgG,GAAKhG,EAAQ,GACbuK,GAAKvK,EAAQ,GACbmV,EAASnV,EAAQ,GACjBoV,EAASpV,EAAQ,GACX,IAANgG,GAAYmP,IACZA,EAASC,GAEH,IAAN7K,GAAY6K,IACZA,EAASD,GAETA,IAAWC,GAGfL,EAAQzY,KAAK,CACT+Y,OAAQrV,EAAQ,IAAM,GACtBgG,EAAGA,EACHuE,EAAGA,EACH4K,OAAQA,EACRC,OAAQA,EACRE,IAAKtV,EAAQ,IApBjB,CAsBJ,CACA,OAAO+U,CACX,CAzDkBQ,CAAevB,GACpB5b,EAAI,EAAGA,EAAIU,EAAKgG,MAAO1G,IAAK,CACjC,IAAIod,KAAa,IAAM1c,EAAKgG,MAAQ1G,EAAIU,EAAKR,QACzCmd,EAAiBlB,SAASC,cAAc,OAC5CiB,EAAef,MAAMT,SAAW,WAChCwB,EAAef,MAAMZ,IAAM,GAAG1Z,QAAQtB,EAAKsa,MAAQ,EAAG,MACtDqC,EAAef,MAAMtB,MAASta,EAAKxI,OAASwI,EAAKsa,MAAS,KAC1DqC,EAAef,MAAMgB,OAAS5c,EAAKsa,MAAQ,KAC3CqC,EAAef,MAAMiB,WAAaC,EAAS9c,EAAK0a,UAAWpb,GAC3Dqd,EAAef,MAAMI,aAAeA,EACpCW,EAAef,MAAMmB,gBAAkB,OACvCJ,EAAef,MAAMC,UAAY,UAAUva,OAAOob,EAAS,oBAAoBpb,OAAOtB,EAAKua,OAAQ,OACnG,IAAIyC,EAAQ1d,EAAIU,EAAK4a,UAAY5a,EAAKgG,MAAQhG,EAAK6a,MACnDmC,GAAS,EAAIhd,EAAK6a,MAClB,IAAI/V,EAAO2W,SAASC,cAAc,OAClC5W,EAAK8W,MAAMtB,MAAQ,OACnBxV,EAAK8W,MAAMgB,OAAS,OACpB9X,EAAK8W,MAAMiB,WAAaC,EAAS9c,EAAKya,MAAOnb,GAC7CwF,EAAK8W,MAAMI,aAAeA,EAC1BlX,EAAK8W,MAAMM,UAAYe,EAAgBhB,EAASS,GAChD5X,EAAK8W,MAAMjB,UAAY,GAAGrZ,OAAO,EAAItB,EAAK6a,MAAO,aAAavZ,OAAO0b,EAAO,eAAe1b,OAAOtB,EAAK2a,WACvGgC,EAAeO,YAAYpY,GAC3B0W,EAAG0B,YAAYP,EACnB,CACJ,CA7DQQ,CAAUnmB,KAAKwkB,GAAIxkB,KAAKgJ,MACjBhJ,IACX,EAKAokB,EAAQjY,UAAUoY,KAAO,WAOrB,OANIvkB,KAAKwkB,KACDxkB,KAAKwkB,GAAG4B,YACRpmB,KAAKwkB,GAAG4B,WAAWC,YAAYrmB,KAAKwkB,IAExCxkB,KAAKwkB,QAAK5B,GAEP5iB,IACX,EACOokB,CACX,CAzC6B,GA8C7B,SAAS0B,EAASrC,EAAO6C,GACrB,MAAuB,iBAAT7C,EAAoBA,EAAQA,EAAM6C,EAAM7C,EAAMjjB,OAChE,CA0EA,SAASylB,EAAgBhB,EAASS,GAE9B,IADA,IAAIa,EAAa,GACR5P,EAAK,EAAG6P,EAAYvB,EAAStO,EAAK6P,EAAUhmB,OAAQmW,IAAM,CAC/D,IAAIuN,EAASsC,EAAU7P,GACnB8P,EAAKC,EAAcxC,EAAOhO,EAAGgO,EAAOzJ,EAAGiL,GAC3Ca,EAAW/Z,KAAK0X,EAAOqB,OAASkB,EAAG,GAAKvC,EAAOmB,OAAS,IAAMoB,EAAG,GAAKvC,EAAOoB,OAASpB,EAAOsB,IACjG,CACA,OAAOe,EAAW5Y,KAAK,KAC3B,CACA,SAAS+Y,EAAcxQ,EAAGuE,EAAGiL,GACzB,IAAIiB,EAAUjB,EAAUjd,KAAKC,GAAK,IAC9BmK,EAAMpK,KAAKoK,IAAI8T,GACfC,EAAMne,KAAKme,IAAID,GACnB,MAAO,CACHle,KAAKkN,MAA4B,KAArBO,EAAI0Q,EAAMnM,EAAI5H,IAAe,IACzCpK,KAAKkN,MAA6B,MAArBO,EAAIrD,EAAM4H,EAAImM,IAAe,IAElD,CCvKe,MAAMC,EACnBvT,WAAAA,GACEtT,KAAK8mB,UAAY,EACjB9mB,KAAK+mB,QAAU,EACf/mB,KAAKgnB,YAAc,EACnBhnB,KAAKinB,SAAU,CACjB,CAEAC,KAAAA,GACElnB,KAAK8mB,UAAYD,EAAMM,MACvBnnB,KAAK+mB,QAAU/mB,KAAK8mB,UACpB9mB,KAAKinB,SAAU,CACjB,CAEA1C,IAAAA,GACEvkB,KAAKonB,iBACLpnB,KAAKinB,SAAU,CACjB,CAEAG,cAAAA,GAEE,OADApnB,KAAKqnB,SACErnB,KAAKgnB,WACd,CAEAK,MAAAA,GACE,IAAIC,EAAQ,EACZ,GAAItnB,KAAKinB,QAAS,CAChB,MAAMM,EAAUV,EAAMM,MACtBG,EAAQ,MAASC,EAAUvnB,KAAK+mB,SAChC/mB,KAAK+mB,QAAUQ,EACfvnB,KAAKgnB,aAAeM,CACtB,CAEA,OAAOA,CACT,EAGFT,EAAMM,IAAO,WACX,MAAMla,EAAsB,oBAAXmJ,QAA0BA,OAAOoR,YAClD,OAAQva,GAAKA,EAAEka,IAAOla,EAAEka,IAAIM,KAAKxa,GAAKya,KAAKP,GAC7C,CAHa,GCtCb,MAAM,IAAEA,GAAQN,EAEhB,SAASnC,EAAciD,EAAKC,EAAIC,GAC9B,MAAM7H,EAAUyE,SAASC,cAAciD,GAGvC,OAFA3H,EAAQ4H,GAAKA,EACb5H,EAAQ4E,MAAMkD,QAAUD,EACjB7H,CACT,CAqDA,QAnDA,MACE1M,WAAAA,GACEtT,KAAK+nB,WAAarD,EAAc,MAAO,QAAS,eAChD1kB,KAAKgoB,MAAQtD,EAAc,IAAK,MAAO,yCACvC1kB,KAAK+nB,WAAW7B,YAAYlmB,KAAKgoB,OAEjChoB,KAAKioB,WAAad,IAClBnnB,KAAKkoB,UAAYloB,KAAKioB,WAEtBjoB,KAAKmoB,QAAU,IAAIve,MAAM,IACzB5J,KAAKooB,OAAS,EACdpoB,KAAKqoB,OAAS,EACdroB,KAAKsoB,OAAS,CAChB,CAEA9C,GAAAA,GACE,MAAM+C,EAAOpB,IACPG,EAAQiB,EAAOvoB,KAAKioB,WAmB1B,OAjBIjoB,KAAKsoB,OAAStoB,KAAKmoB,QAAQ3nB,OAC7BR,KAAKsoB,SAELtoB,KAAKqoB,QAAUroB,KAAKmoB,QAAQnoB,KAAKooB,QAEnCpoB,KAAKqoB,QAAUf,EACftnB,KAAKmoB,QAAQnoB,KAAKooB,QAAUd,EAC5BtnB,KAAKooB,QAAUpoB,KAAKooB,OAAS,GAAKpoB,KAAKmoB,QAAQ3nB,OAE/CR,KAAKwoB,GAAKxoB,KAAKqoB,OAASroB,KAAKsoB,OAC7BtoB,KAAKyoB,IAAM,IAAOzoB,KAAKwoB,GAEnBD,EAAOvoB,KAAKkoB,UAAY,MAC1BloB,KAAKgoB,MAAMU,YAAc1oB,KAAKyoB,IAAIE,YAAY,GAC9C3oB,KAAKkoB,UAAYK,GAGZA,CACT,CAEAlB,MAAAA,GACErnB,KAAKioB,WAAajoB,KAAKwlB,KACzB,CAEAoD,IAAAA,CAAKC,QACQjG,IAAPiG,IACFA,GAAK,GAEP7oB,KAAK+nB,WAAWnD,MAAMkE,QAAUD,EAAK,QAAU,MACjD,GCrDF,SAASE,EAAeC,EAAOC,GAC7B,OAAQD,GAASA,IAAUC,CAC7B,CAQA,SAASC,IACPlpB,KAAKmpB,UAAY,CAAC,CACpB,CASAD,EAAgB/c,UAAUgV,iBAAmB,SAAUrY,EAAMsgB,EAAUC,GACrE,IAAIC,EAAWtpB,KAAKmpB,UAAUrgB,GAEzBwgB,IACHtpB,KAAKmpB,UAAUrgB,GAAQ,GACvBwgB,EAAWtpB,KAAKmpB,UAAUrgB,IAG5B,MAAMC,EAAS,CAACqgB,EAAUC,QAKUzG,IAAhC9Y,IAAAA,KAAOwf,GAJX,SAAmBC,GACjB,OAAOA,EAAI,KAAOxgB,EAAO,IAAMwgB,EAAI,KAAOxgB,EAAO,EACnD,KAGEugB,EAAS9c,KAAKzD,EAElB,EAYAmgB,EAAgB/c,UAAUqd,oBAAsB,SAAU1gB,EAAMsgB,EAAUC,GACxE,MAAM9d,EAAOvL,KACb8J,IAAAA,QAAUyB,EAAK4d,WAAW,CAACM,EAASC,KAClC5f,IAAAA,OAAS2f,GAAUE,GAAWZ,EAAejgB,EAAM4gB,IAC1CX,EAAeK,EAAUO,EAAO,KAChCZ,EAAeM,EAASM,EAAO,IAAMpe,IAAM,IAGtDvL,KAAKmpB,UAAYrf,IAAAA,OAASyB,EAAK4d,WAAYM,GAA+B,IAAnBA,EAAQjpB,QACjE,EAOA0oB,EAAgB/c,UAAUyd,cAAgB,SAAUC,GAClD,MAAMte,EAAOvL,KAEb8J,IAAAA,QAAU9J,KAAKmpB,UAAUU,EAAM/gB,OAAQsgB,IACrC,MAAMC,EAAUD,EAAS,IAAM7d,EAC/B6d,EAAS,GAAG/a,MAAMgb,EAAS,CAACQ,GAAO,GAEvC,EAEA,UCvEMC,EAAa,CACjBC,MAAO,EACPC,KAAM,EACNC,OAAQ,EACRC,KAAM,EACN9e,MAAO,GAUT,SAAS+e,IACPjB,EAAgBnd,KAAK/L,MAIrBA,KAAKoqB,SAAU,EACfpqB,KAAKqqB,UAAYP,EAAWI,IAC9B,CAaA,SAASI,EAAOC,GACd,IAAKzgB,IAAAA,SAAWygB,GACd,MAAM,IAAIlf,MAAM,8BAElB,OAAOkf,CACT,CAhBAJ,EAAOhe,UAAYhC,OAAOC,OAAO8e,EAAgB/c,WACjDge,EAAOhe,UAAUmH,YAAc6W,EAM/BA,EAAOhe,UAAUqe,YAAc,WAC7B,OAAO,IAAIL,CACb,EAaAhgB,OAAO8Y,eAAekH,EAAOhe,UAAW,QAAS,CAC/CzF,GAAAA,GACE,OAAOoD,IAAAA,QAAUggB,GAAab,GAAUA,IAAUjpB,KAAKqqB,WACzD,EACA1jB,GAAAA,CAAI8jB,GACFzqB,KAAKqqB,UAAYC,EAAOR,EAAWW,GACrC,IAOFN,EAAOhe,UAAUue,OAAS,WACxB,OAAOvgB,OAAOyP,KAAKkQ,EACrB,EAQAK,EAAOhe,UAAUwe,QAAU,SAAUF,EAAOE,GAC1C,MAAMC,EAAWN,EAAOR,EAAWW,IACnCzqB,KAAK6qB,SAASD,EAAUD,EAC1B,EAMAR,EAAOhe,UAAU4d,MAAQ,SAAUY,GACjC3qB,KAAK6qB,SAASf,EAAWC,MAAOY,EAClC,EAMAR,EAAOhe,UAAU6d,KAAO,SAAUW,GAChC3qB,KAAK6qB,SAASf,EAAWE,KAAMW,EACjC,EAMAR,EAAOhe,UAAU8d,OAAS,SAAUU,GAClC3qB,KAAK6qB,SAASf,EAAWG,OAAQU,EACnC,EAMAR,EAAOhe,UAAU+d,KAAO,SAAUS,GAChC3qB,KAAK6qB,SAASf,EAAWI,KAAMS,EACjC,EAMAR,EAAOhe,UAAUf,MAAQ,SAAUuf,GACjC3qB,KAAK6qB,SAASf,EAAW1e,MAAOuf,EAClC,EAQAR,EAAOhe,UAAU0e,SAAW,SAAUD,EAAUD,GAC9C,GAAIC,EAAW5qB,KAAKqqB,UAClB,OAEF,MAAMI,EAAQ3gB,IAAAA,QAAUggB,GAAab,GAAUA,IAAU2B,IAEzD,GADAD,EAAU9f,OAAO8f,GACb3qB,KAAKoqB,QAAS,CASlB,CACApqB,KAAK4pB,cAAc,CAAE9gB,KAAM,UAAW2hB,QAAOE,WAC/C,EAEA,YAAmBR,ECjJbW,EAAc,CAClBC,QAAS,EACTC,OAAQ,GAiCV,SAASC,EAAqBrd,GAC5B,OAAOsd,mBAAmBtd,EAAK8B,QAAQ,MAAO,KAChD,CAOA,SAASyb,EAAiBC,GAGxB,MAAMC,GAFND,EAAMA,GAAOhV,OAAOkV,SAASC,QAEXC,UAAUJ,EAAInN,QAAQ,KAAO,GACzCsN,EAAS,qBACTE,EAAS,GACf,IAAI5d,EAEJ,KAAwC,QAAhCA,EAAQ0d,EAAOG,KAAKL,KAC1BI,EAAOjf,KAAK,CAACye,EAAqBpd,EAAM,IAAKod,EAAqBpd,EAAM,MAG1E,OAAO4d,CACT,CAgJA,SAASE,EAAYC,GACnB,IAAIC,GAAU,EAEd7rB,KAAK8rB,OAAS,SAAUjD,GACtBgD,EAAUhD,CACZ,EAEA,IAAIkD,EAAS,EACb,MAAMC,EAAU7hB,OAAOyP,KAAKgS,GAE5B,SAASK,EAAKC,EAASC,GACrB,OAAO,WACL,MAAMC,EAAST,EAAYS,OAAOld,OAAO,EAAY,EAAT6c,GACxCF,GACFQ,EAAOtC,MAAM,GAAGqC,EAASD,OAE3BJ,IAAS,QAAAnV,EAAA5K,UAAAxL,OALSqL,EAAI,IAAAjC,MAAAgN,GAAA0V,EAAA,EAAAA,EAAA1V,EAAA0V,IAAJzgB,EAAIygB,GAAAtgB,UAAAsgB,GAMtB,MAAMb,EAASS,EAAQ7d,MAAMrO,KAAM6L,GAKnC,OAJAkgB,IACIF,GACFQ,EAAOtC,MAAM,GAAGqC,SAAcD,KAEzBV,CACT,CACF,CAEA,IAAK,IAAInjB,EAAI,EAAGC,EAAIyjB,EAAQxrB,OAAQ8H,EAAIC,IAAKD,EAAG,CAC9C,MAAMikB,EAAOP,EAAQ1jB,GACfkL,EAASoY,EAAUW,GACrB/Y,aAAkBgZ,UAAqB,gBAATD,IAChCX,EAAUW,GAAQN,EAAKzY,EAAQ+Y,GAEnC,CACF,CAEAZ,EAAYS,OAAS,6FAErB,MAAMK,UAAyBphB,MAC7BiI,WAAAA,CAAYqX,GACV+B,QACA1sB,KAAKusB,KAAO,mBACZvsB,KAAK2qB,QAAUA,CACjB,EAoBF,SAASgC,EAAiCtT,GACxC,MAAMuT,EAAQ,IAAIxT,WAAWC,GAC7B,IAAIwT,EAAS,GACb,IAAK,IAAIvkB,EAAI,EAAGA,EAAIskB,EAAM9T,WAAYxQ,IACpCukB,GAAUhiB,OAAOyS,aAAasP,EAAMtkB,IAEtC,OAAO8N,OAAO0W,KAAKD,EACrB,CAEA,SAASE,EAA8B9hB,GACrC,MAAM4hB,EAASzW,OAAO4W,KAAK/hB,GACrB2hB,EAAQ,IAAIxT,WAAWyT,EAAOrsB,QACpC,IAAK,IAAI8H,EAAI,EAAGA,EAAIskB,EAAMpsB,SAAU8H,EAClCskB,EAAMtkB,GAAKukB,EAAOvkB,GAAGyQ,WAAW,GAElC,OAAO6T,EAAMvT,MACf,CA8BA,SAAS4T,EAAoB7sB,GAC3B,GAAI0J,IAAAA,cAAgB1J,GAClB,OAAO,EAET,MAAM8sB,EAAQ9sB,GAAK+J,OAAOwC,eAAevM,GACzC,QAAS8sB,IAAUA,EAAM9gB,eAAe,gBAAkB6gB,EAAoBC,EAChF,CA6DA,SAASC,EAAiBC,GACxB,OAAOA,EAASthB,MAAOrD,KAAKgM,IAAI,EAAG2Y,EAASC,YAAY,OAASC,IACnE,CAQA,SAASC,EAAcnC,GACrB,MAAMoC,EAAQpC,EAAInc,MAAM,SAClBwe,EAAaD,EAAMhtB,OACzB,OAAIitB,GAAc,GAA+B,WAA1BD,EAAMC,EAAa,GACjC,IAAIC,KAAK,CAACX,EAAgBS,EAAMC,EAAa,MAE/C,IACT,CA+EA,MAAME,EAAmB,kBACnBC,EAAgB,CAAC,IAAK,GAAI,KAmDhC,SACE9C,cACA+C,qBAvfF,SAA8BjgB,EAAMkgB,GAElC,OAAOC,mBAAmBngB,GAAM8B,QAAQoe,GADxBE,GAASnjB,OAAOyS,aAAa5S,SAASsjB,EAAK9e,OAAO,GAAI,OACVQ,QAAQ,OAAQ,IAC9E,EAqfEub,uBACAE,mBACA8C,uBAjdF,SAAgC7C,GAC9B,MAAMK,EAAS,CAAC,EACVtV,EAAIgV,EAAiBC,GAC3B,IAAK,IAAI9iB,EAAI,EAAGA,EAAI6N,EAAE3V,SAAU8H,EAAG,CACjC,MAAO2B,EAAKgf,GAAS9S,EAAE7N,GACvBmjB,EAAOxhB,GAAOgf,CAChB,CACA,OAAOwC,CACT,EA0cEyC,WAxcF,SAAoBjjB,GAClB,GAAmB,oBAARkjB,IACT,IACE,MAAsB,oBAAX/X,OACF,IAAI+X,IAAIljB,EAAKmL,OAAOkV,UAAU8C,KAEhC,IAAID,IAAIljB,GAAKmjB,IACtB,CAAE,MAAOhjB,GACP,CAGJ,GAAwB,oBAAbqZ,SAA0B,CACnC,MAAM4J,EAAS5J,SAASC,cAAc,KAEtC,OADA2J,EAAOD,KAAOnjB,EACPojB,EAAOD,IAChB,CACA,OAAOnjB,CACT,EAwbEqjB,eAhbF,SAAwBC,GACtB,MAAMC,EAAa,GAEnB,IAAK,IAAIlmB,EAAI,EAAGC,EAAIgmB,EAAU/tB,OAAQ8H,EAAIC,IAAKD,EAC7CkmB,EAAWA,EAAWhuB,QAAU+tB,EAAUjmB,GAAGyQ,WAAW,GAAGxS,SAAS,IAGtE,MAAMkoB,EAAUD,EAAW7gB,KAAK,KAEhC,OAAO,IAAI+gB,OAAO,OAAOD,KAAY,KACvC,EAuaE/J,cAlaF,SAAuBiD,EAAKgH,EAAOC,GACjC,MAAM5O,EAAUyE,SAASC,cAAciD,GACvC,IAAIrf,EACAC,EACJ,GAAIomB,EAAO,CACT,MAAM/U,EAAOzP,OAAOyP,KAAK+U,GACzB,IAAKrmB,EAAI,EAAGC,EAAIqR,EAAKpZ,OAAQ8H,EAAIC,IAAKD,EAAG,CACvC,MAAM2B,EAAM2P,EAAKtR,GACjB0X,EAAQ2E,aAAa1a,EAAK0kB,EAAM1kB,GAClC,CACF,CACA,GAAI2kB,EAIF,IAHMA,aAAmBhlB,QACvBglB,EAAU,CAACA,IAERtmB,EAAI,EAAGC,EAAIqmB,EAAQpuB,OAAQ8H,EAAIC,IAAKD,EAAG,CAC1C,MAAM6K,EAAQyb,EAAQtmB,GACD,iBAAV6K,EACT6M,EAAQkG,YAAYzB,SAASoK,eAAe1b,IACnCA,aAAiB2b,aAC1B9O,EAAQkG,YAAY/S,EAExB,CAEF,OAAO6M,CACT,EA0YE+O,YA7XF,SAAqBC,EAAKC,EAAMC,EAASC,GAKvC,OAJAH,EAAI7iB,UAAYrC,IAAAA,OAASK,OAAOC,OAAO6kB,EAAK9iB,WAAY,CAAEmH,YAAa0b,GAAOE,GAC1EC,GACFrlB,IAAAA,OAASklB,EAAKG,GAETH,CACT,EAwXEI,WAnXF,SAASA,EAAW5X,EAAK6X,GACvB,IACI/mB,EACAC,EAFA+mB,EAAM9X,EAGV,GAAIA,aAAe5N,MAEjB,IADA0lB,EAAM,IAAI1lB,MAAM4N,EAAIhX,QACf8H,EAAI,EAAGC,EAAIiP,EAAIhX,OAAQ8H,EAAIC,IAAKD,EACnCgnB,EAAIhnB,GAAK8mB,EAAW5X,EAAIlP,SAErB,GAAIkP,aAAerN,OAAQ,CAChCmlB,EAAMnlB,OAAOC,OAAOoN,GACpB,MAAMoC,EAAOzP,OAAOyP,KAAKpC,GACzB,IAAKlP,EAAI,EAAGC,EAAIqR,EAAKpZ,OAAQ8H,EAAIC,IAAKD,EAAG,CACvC,MAAM2B,EAAM2P,EAAKtR,GACX2gB,EAAQzR,EAAIvN,GACZwN,EAAO2X,EAAWnG,GACpBxR,IAASwR,IACXqG,EAAIrlB,GAAOwN,EAEf,CACI4X,GAAyBllB,OAAOyP,KAAK0V,GAAK9uB,OAAS,IACrD8uB,EAAMnlB,OAAOC,OAAOklB,GAExB,CACA,OAAOA,CACT,EA2VEC,SAtVF,SAAkB9L,GAEhB,MAAO,IADM,UAAUA,EAAMld,SAAS,MAAO2I,QAAQ,IAEvD,EAoVEyc,cACAc,mBACA+C,cApSF,SAAuBC,EAAgBC,GACrC,IAAIjE,EAAS,KACb,IACEA,EAAS,IAAIgE,EAAeC,EAC9B,CAAE,MAAO7W,GACP,MAAIA,aAAa8W,WACT,IAAIlD,EAAiB5T,EAAE8R,SAEvB9R,CAEV,CACA,OAAO4S,CACT,EAyREsB,kBACAJ,gBACAiD,gBAhQF,SAAuC3kB,EAAqB4kB,GAC1D,OAAOjmB,MAAMuC,UAAUL,MAAMC,KAAK,IAAI8jB,EAAgB9C,EAAgB9hB,IACxE,EA+PE6kB,cArQF,SAAuClb,EAAuBib,GAC5D,OAAOlD,EAAc,IAAIkD,EAAgBjb,GAAOyE,OAClD,EAoQE0W,2BA7PF,SAAoC/mB,EAAMgnB,GACxC,MAAMC,EAAU,GAChB,GAAID,GAAWhnB,EAAM,CACnB,MAAM4Q,EAAOzP,OAAOyP,KAAK5Q,GACzB,IAAK,IAAIiE,EAAI,EAAGA,EAAI2M,EAAKpZ,SAAUyM,EAAG,CACpC,MAAMhD,EAAM2P,EAAK3M,GACXgc,EAAQjgB,EAAKiB,GAEbgf,aAAiB9e,aAAmC,IAAjB6lB,EAAQ/lB,IAAwB+lB,EAAQ/lB,KAASgf,GACxFgH,EAAQzjB,KAAK,GAAGvC,KAAOgf,IAE3B,CACA,GAAIgH,EAAQzvB,OAAS,EACnB,MAAO,IAAIyvB,EAAQtiB,QAEvB,CACA,MAAO,EACT,EA6OEuiB,YA5NF,SAASA,EAAYC,EAAKC,GACxB,MAAMC,EAAO,CAAC,EAYd,OAXAvmB,IAAAA,MAAQqmB,GAAK,CAACG,EAAUrmB,KACtB,MAAMsmB,EAAWH,EAAInmB,GACrB,GAAIgjB,EAAoBqD,IAAarD,EAAoBsD,GAAW,CAClE,MAAMC,EAAWN,EAAYI,EAAUC,GAClCzmB,IAAAA,QAAU0mB,KACbH,EAAKpmB,GAAOumB,EAEhB,MAAY1mB,IAAAA,QAAUwmB,EAAUC,KAC9BF,EAAKpmB,GAAOqmB,EACd,IAEKD,CACT,EA+MEI,eA7MF,SAAwBC,EAAQtH,IAC9B,SAASuH,EAAenZ,EAAK+N,GAC3Bzb,IAAAA,MAAQ0N,GAAK,CAACyR,EAAOhf,KACnB,MAAM2mB,EAAUrL,GAAUA,EAAO/kB,OAAS,EAAI,IAAM,IAChDyoB,aAAiB9e,OACnBwmB,EAAe1H,EAAO2H,EAAU3mB,QACb2Y,IAAVqG,GACTG,EAASH,EAAO2H,EAAU3mB,EAC5B,GAEJ,CACA0mB,CAAeD,EAAQ,GACzB,EAkMEG,cAhMF,SAAuB5H,GACrB,OAAInf,IAAAA,SAAWmf,GACN,IAAIA,EAAMvZ,QAAQ,KAAM,UAE1BuZ,CACT,EA4LE9X,cA1LF,SAAuB8X,GACrB,IAAKnf,IAAAA,SAAWmf,GACd,OAAOA,EAET,GAAiB,MAAbA,EAAM,IAA0C,MAA5BA,EAAMA,EAAMzoB,OAAS,GAE3C,OADAyoB,EAAQA,EAAMnd,MAAM,EAAGmd,EAAMzoB,OAAS,IACzBkP,QAAQ,OAAQ,KAE/B,GAAiB,MAAbuZ,EAAM,IAA0C,MAA5BA,EAAMA,EAAMzoB,OAAS,GAE3C,OADAyoB,EAAQA,EAAMnd,MAAM,EAAGmd,EAAMzoB,OAAS,IACzBkP,QAAQ,OAAQ,KAE/B,MAAM,IAAIohB,YAAY,2CACxB,EA8KEC,WAzJF,WACE,OAAIC,UAAUC,QAAUD,UAAUC,OAAOhT,QAAQ,UAAY,GACxD+S,UAAUE,YACgC,IAA1CF,UAAUE,UAAUjT,QAAQ,WACc,IAA1C+S,UAAUE,UAAUjT,QAAQ,SACxB6M,EAAYE,OAEdF,EAAYC,OACrB,EAkJEoG,SAhJF,SAAkB/F,GACM,oBAAXhV,QACTA,OAAOiL,OAAOoD,SAAS2M,MAAM,oCAAoChG,eAErE,EA6IEiG,aA3IF,SAAsBC,EAASC,GAC7B,GAAKD,GAAoC,UAAzBA,EAAQpiB,OAAO,EAAG,GAMlC,GAHKqiB,IACHA,EAAW,CAAC,eAAgB,IAAI7J,KAAQ,QAAQ/Z,KAAK,KAEjC,oBAAXyI,QAA0BA,OAAO4a,WAAa5a,OAAO4a,UAAUQ,WACxEpb,OAAO4a,UAAUQ,WAAWjE,EAAc+D,GAAUC,QAC/C,GAAwB,oBAAb9M,SAA0B,CAC1C,MAAMgN,EAAOhN,SAASC,cAAc,KACpC+M,EAAKC,SAAWH,EAChBE,EAAKE,UAAY,WACjBF,EAAKrD,KAAOhY,OAAO+X,IAAIyD,gBAAgBrE,EAAc+D,IACrD7M,SAASoN,KAAK3L,YAAYuL,GAC1BA,EAAKK,QACLrN,SAASoN,KAAKxL,YAAYoL,EAC5B,CACF,EA0HEM,cA9FF,SAAuB5B,EAAKC,EAAK4B,EAASC,GACxC,IAAK,IAAI3pB,EAAI,EAAGC,EAAIypB,EAAQxxB,OAAQ8H,EAAIC,IAAKD,EAC3C,IAAK,IAAIoT,EAAI,EAAGA,EAAIuW,IAAYvW,EAC9B0U,EAAI9nB,EAAI2pB,EAAWvW,GAAKyU,EAAI6B,EAAQ1pB,GAAK2pB,EAAWvW,EAG1D,EAyFEwW,iBAvFF,SAA0BC,GACxB,MAAMC,EAAUD,EAAKE,WAAU,GAG/B,OAFAD,EAAQE,SAAWH,EAAKG,SAEjBF,CACT,EAmFEG,0BA7EF,SAAmCtJ,GACjC,OAAI0E,EAAiB6E,KAAKvJ,GACjBA,GAGT2E,EAAc,GAAK3E,EACZ2E,EAAcjgB,KAAK,IAC5B,EAuEEwf,mBACAsF,cA/KF,SAAuBrF,GACrB,MAAMsF,EAAMvF,EAAiBC,GAE7B,MAAO,CADMA,EAASthB,MAAM,EAAGshB,EAAS5sB,OAASkyB,EAAIlyB,QACvCkyB,EAChB,EA4KEhB,SA7HF,SAAkBiB,EAAMpB,EAAUzoB,GAChC,MAAM8pB,EAAW,IAAIlF,KAAK,CAACiF,IAY3B,GAVKpB,IACHA,EAAW,CAAC,QAAS,IAAI7J,MAAQ/Z,KAAK,KAMtC4jB,GAHGzoB,EAGS,IAAIA,IAFJ8pB,EAAS9pB,MAAQ,OAKT,oBAAXsN,QAA0BA,OAAO4a,WAAa5a,OAAO4a,UAAUQ,WACxEpb,OAAO4a,UAAUQ,WAAWoB,EAAUrB,QACjC,GAAwB,oBAAb9M,SAA0B,CAC1C,MAAMgN,EAAOhN,SAASC,cAAc,KACpC+M,EAAKC,SAAWH,EAChBE,EAAKE,UAAY,WACjBF,EAAKrD,KAAOhY,OAAO+X,IAAIyD,gBAAgBgB,GACvCnO,SAASoN,KAAK3L,YAAYuL,GAC1BA,EAAKK,QACLrN,SAASoN,KAAKxL,YAAYoL,EAC5B,CACF,EAsGEoB,wBAhEF,SAAiCC,EAAOC,GACtC,MAAMtH,EAAS,IAAIqH,EAAMxf,YAAYwf,EAAMtyB,OAASuyB,EAAOvyB,QAG3D,OAFAirB,EAAO9kB,IAAImsB,GACXrH,EAAO9kB,IAAIosB,EAAQD,EAAMtyB,QAClBirB,CACT,EA4DEuH,uBArDF,SAAgCpe,GAC9B,GAAIA,EAAMpU,QAAU,EAClB,OAAO,KAGT,MAAMkvB,EAAO9a,EAAMqe,QAAO,CAACC,EAAKC,IAAQD,EAAMC,EAAI3yB,QAAQ,GAEpDirB,EAAS,IAAI7W,EAAM,GAAGtB,YAAYoc,GACxC,IAAK,IAAIpnB,EAAI,EAAG4e,EAAQ,EAAG5e,EAAIsM,EAAMpU,OAAQ8H,IAAK,CAChD,MAAM+P,EAAQzD,EAAMtM,GAAG9H,OACvBirB,EAAO9kB,IAAIiO,EAAMtM,GAAI4e,GACrBA,GAAS7O,CACX,CACA,OAAOoT,CACT,GCxgBe,MAAM2H,UAAkBlK,EACrC5V,WAAAA,GACEoZ,QACA1sB,KAAKqzB,eAAgB,CACvB,CAEAC,MAAAA,GACEtzB,KAAKqzB,eAAgB,EACrBrzB,KAAK4pB,cAAc,CAAE9gB,KAAM,UAC7B,CAEAyqB,YAAAA,GACE,OAAOvzB,KAAKqzB,aACd,CAIAG,MAAAA,CAAO3J,GACL7pB,KAAK4pB,cAAc,CAAE9gB,KAAM,eAAgB2qB,WAAY5J,GACzD,ECjBF,MAqBMxG,EAAW,CAyBfqQ,MAAO,CAmBLC,GAAI,CACFC,KAAM,IACNC,KAAM,IACNC,MAAO,GACPC,WAAW,EACXC,QAAS,GACTC,UAAU,EACVC,eAAgB,CACdC,KAAM,EACNC,IAAK,EACLC,OAAQ,EACRC,KAAM,GACNC,MAAO,KAeXC,GAAI,CACFN,eAAgB,CACdC,KAAM,EACNC,IAAK,EACLC,OAAQ,EACRC,KAAM,GACNC,MAAO,KAoBXE,GAAI,CACFV,WAAW,EACXE,UAAU,EACVS,SAAU,GACVC,UAAW,GACXf,KAAM,IACNgB,UAAW,GAoBbC,GAAI,CACFhB,KAAM,GACNC,MAAO,EACPC,WAAW,EACXC,QAAS,GACTC,UAAU,EACVC,eAAgB,CACdC,KAAM,EACNC,IAAK,EACLC,OAAQ,EACRC,KAAM,GACNC,MAAO,KAoBXO,GAAI,CACFC,OAAO,EACPC,YAAa,IACbC,OAAQ,GACRC,WAAW,EACXhB,eAAgB,CACdC,KAAM,EACNC,IAAK,EACLC,OAAQ,GACRC,KAAM,GACNC,MAAO,KAoBXY,GAAI,CACFJ,OAAO,EACPC,YAAa,IACbC,OAAQ,GACRC,WAAW,EACXhB,eAAgB,CACdC,KAAM,EACNC,IAAK,EACLC,OAAQ,GACRC,KAAM,GACNC,MAAO,KAuBXa,GAAI,CACFC,SAAU,GACVC,SAAU,CACRnB,KAAM,IACNC,IAAK,EACLC,OAAQ,IACRC,KAAM,EACNC,MAAO,GAETlsB,MAAO,EACP6sB,WAAW,EACXK,YAAa,CACXpB,KAAM,EACNC,IAAK,IACLC,OAAQ,EACRC,KAAM,GACNC,MAAO,KAETU,OAAQ,GACRF,OAAO,GAsBTS,GAAI,CACFR,YAAa,IACbK,SAAU,IACVH,WAAW,EACXO,eAAgB,GAChBvB,eAAgB,CACdC,KAAM,GACNC,IAAK,EACLC,OAAQ,IACRC,KAAM,KACNC,MAAO,GAETU,OAAQ,GACRF,OAAO,GAeTW,GAAI,CACFnS,OAAQ,GACR2Q,eAAgB,CACdC,KAAM,GACNC,IAAK,GACLC,OAAQ,GACRC,KAAM,GACNC,MAAO,KAkBXoB,GAAI,CACFpS,OAAQ,GACRqS,oBAAqB,IACrBC,SAAU,GACV3B,eAAgB,CACdC,KAAM,EACNC,IAAK,EACLC,OAAQ,GACRC,KAAM,GACNC,MAAO,KAyBXuB,GAAI,CACFvS,OAAQ,GACRwS,MAAO,IACPC,GAAI,CACFC,MAAO,CACL3S,MAAO,EACP4S,MAAO,GAETC,OAAQ,CACN7S,MAAO,EACP4S,MAAO,IAGXN,oBAAqB,IACrBC,SAAU,GACV3B,eAAgB,CACdC,KAAM,EACNC,IAAK,EACLC,OAAQ,GACRC,KAAM,GACNC,MAAO,KAwBX6B,GAAI,CACFC,SAAU,6CACVC,gBAAiB,SACjBC,cAAe,SACfC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,OACJC,GAAI,WACJC,QAAQ,GAiBVC,GAAI,CACFC,OAAQ,EACRC,UAAW,EACXC,UAAW,EACXC,OAAO,EACPC,SAAS,EACTjD,eAAgB,CACdC,KAAM,EACNC,IAAK,EACLC,OAAQ,EACRC,KAAM,EACNC,MAAO,MA0Bb6C,SAAU,CAQRC,GAAI,CACFC,QAAS,GAUXC,GAAI,CACF9T,MAAO,UAYT+T,GAAI,CACFvC,OAAQ,UACRxR,MAAO,SACPgU,UAAW,UAWbC,GAAI,CACFjU,MAAO,QACPkU,OAAQ,IAUVC,GAAI,CACFC,SAAU,WAYZC,GAAI,CACFD,SAAU,OACVnjB,IAAK,EACLD,IAAK,IAUPsjB,GAAI,CACFF,SAAU,QAUZG,GAAI,CACFH,SAAU,YAUZI,GAAI,CACFJ,SAAU,YAQdK,WAAW,EAMXC,OAAQ,GAMRC,QAAS,GAMTC,OAAQ,IAERC,YAAa,IAEbC,YAAa,EAMbC,cAAe,GAMfC,aAAc,EACdC,SAAU,EACVC,SAAU,EACVC,gBAAgB,EAMhBC,QAAS,KAMTC,WAAY,SAEZC,gBAAgB,EAEhBC,YAAY,EAEZC,OAAQ,UAERC,QAAS,CAEPC,QAAS,CAAC,CACRxvB,KAAM,KACNE,QAAS,KACThC,SAAU,MACVG,SAAU,OAGZoxB,MAAO,GAGPC,KAAM,CAAC,CACL1vB,KAAM,KACNE,QAAS,KACThC,SAAU,MACVG,SAAU,OAIZsxB,MAAO,CAAC,CACN3vB,KAAM,KACNE,QAAS,KACThC,SAAU,MACVG,SAAU,OAIZuxB,MAAO,CAAC,CACN5vB,KAAM,KACNE,QAAS,KACThC,SAAU,aACVG,SAAU,MACT,CACD2B,KAAM,KACNE,QAAS,KACThC,SAAU,uBACVG,SAAU,QAIdwxB,QAAS,CACP1rB,KAAM,CACJ2V,MAAO,WACPgW,SAAU,GACVC,QAAS,MAMb9C,GAAI,CACFnT,MAAO,QACPkW,aAAa,GAGfC,MAAO,CACLC,WAAW,EACXC,gBAAiB,GACjBC,eAAgB,MAOlBC,QAAS,CAET,EAMAC,MAAM,EAMNC,KAAK,EAMLzR,KAAK,EAOL0R,UAAU,EAEVC,uBAAuB,EAMvBC,eAAe,EAEfC,SAAS,EAMTC,WAAW,EAOXC,MAAM,EAMNC,QAAS,CACP5R,IAAI,EACJpF,MAAO,EACPiX,UAAW,GACXC,UAAW,GAQbC,IAAI,EASJ1W,OAAQ,CACN2E,IAAI,EACJ/f,KAAM,SACNya,OAAQ,GAQVsX,aAAc,EAOdC,OAAQ,GAORC,QAAS,EAWTC,uBAAuB,EAOvBC,SAAS,EAOTC,SAAS,EAOTC,KAAM,OAONC,SAAS,EAOTC,UAAU,EAOVC,YAAY,EAOZC,OAAQ,OAORC,kBAAkB,EAOlBC,aAAc,UAOdC,iBAAkB,EAElB3R,MAAO,CACL4R,QAAS,IACT/tB,KAAM,SACNguB,MAAM,EACNC,iBAAkB,GAClBC,WAAY,GACZC,aAAc,KAEhBC,IAAK,CACHC,WAAW,IAQf,SAASC,IACPhT,EAAgBnd,KAAK/L,MAErBA,KAAKm8B,IAAM,KACXn8B,KAAKmnB,IAAM,CAAC,EACZnnB,KAAKo8B,SAAW,CAAC,EAEjBp8B,KAAK+F,OACP,CAEAM,EAAM0oB,YAAYmN,EAAUhT,EAAiB,CAC3C7F,SAAQ,EAER1c,GAAAA,CAAI01B,EAAMpT,GACR,GAAInf,IAAAA,SAAWuyB,GAAO,CACHvyB,IAAAA,IAAM9J,KAAKmnB,IAAKkV,KAChBpT,IACfnf,IAAAA,IAAM9J,KAAKmnB,IAAKkV,EAAMpT,GACtBjpB,KAAKs8B,cAAcD,EAAMpT,GAE7B,KAAO,CACL,MAAMoH,EAAOhqB,EAAM6pB,YAAYmM,EAAMr8B,KAAKmnB,KACrCrd,IAAAA,QAAUumB,KACbvmB,IAAAA,MAAQ9J,KAAKmnB,IAAKkJ,GAClBrwB,KAAKu8B,eAAelM,GAExB,CACF,EAEA3pB,GAAAA,CAAI21B,EAAMG,GACR,OAAO1yB,IAAAA,IAAM9J,KAAKmnB,IAAKkV,EAAMG,EAC/B,EAEAz2B,KAAAA,GACE,MAAMsqB,EAAOhqB,EAAM6pB,YAAY7M,EAAUrjB,KAAKmnB,KAC9CnnB,KAAKmnB,IAAMrd,IAAAA,UAAYuZ,GACvBrjB,KAAKm8B,IAAM,KACXn8B,KAAKu8B,eAAelM,GACpBrwB,KAAKo8B,SAAW,CAAC,CACnB,EAEAK,UAAAA,GACEz8B,KAAKm8B,IAAMryB,IAAAA,UAAY9J,KAAKmnB,KAC5BnnB,KAAKo8B,SAAW,CAAC,CACnB,EAEAE,aAAAA,CAAcD,EAAMpT,GAClBjpB,KAAKo8B,SAASC,IAAQ,EACtBr8B,KAAK4pB,cAAc,CAAE9gB,KAAM,UAAUuzB,IAAQpT,SAC/C,EAEAsT,cAAAA,CAAelM,GACbhqB,EAAMoqB,eAAeJ,GAAM,CAACqM,EAAWC,KACrC38B,KAAKs8B,cAAcK,EAAUD,EAAU,GAE3C,EAEAE,OAAAA,GACE,IAAK58B,KAAKm8B,IACR,MAAO,GAET,MAAM,IAAEA,EAAG,IAAEhV,GAAQnnB,KAErB,OADa8J,IAAAA,OAASK,OAAOyP,KAAK5Z,KAAKo8B,WAAYnyB,GAAQH,IAAAA,IAAMqyB,EAAKlyB,KAASH,IAAAA,IAAMqd,EAAKld,IAE5F,EAEA4yB,UAAAA,CAAWC,GACT,GAAIA,EAAM1wB,eAAe,YAp9Bb,IAo9B2B0wB,EAAMC,QAC3C,MAAM,IAAI1xB,MAAM,2CAGXyxB,EAAMC,QACb/8B,KAAK+F,QACL/F,KAAK2G,IAAIm2B,EACX,EAEAE,QAAAA,CAASC,GACP,MAAMH,EAAQz2B,EAAM6pB,YAAYlwB,KAAKmnB,IAAK9D,GAI1C,OAHI4Z,IACFH,EAAMC,QAh+BI,GAk+BLD,CACT,EAEAI,aAAAA,CAAcC,EAAQn0B,GACpBqa,EAAS2W,QAAQmD,GAAUrzB,IAAAA,UAAYd,GACvChJ,KAAKmnB,IAAI6S,QAAQmD,GAAUrzB,IAAAA,UAAYd,EACzC,IAGF,YAAmBkzB,EC1+BnB,IAAIkB,EAAW,EAEf,SAASC,EAAUpU,GACjB,SAAUA,GAAmB,MAAVA,GAAkBnf,IAAAA,SAAWmf,IAAkC,UAAxBA,EAAMvhB,cAClE,CAEA,MAAM41B,EAAW,CACfC,OAAQ1yB,OACR0f,OAAQxiB,OACRy1B,QAASH,GAMLI,EAAW,IAEXC,EAAS,IAETC,EAAQ,IAERC,EAAuB,QAuB7B,MAAMC,EAZGx3B,EAAMioB,eAAesP,EADL,MAczB,SAASE,EAAuB7U,GAC9B,OAAO5iB,EAAMwnB,qBAAqB5E,EAAO4U,EAC3C,CAEA,MAAME,EARG13B,EAAMioB,eAAesP,EADL,KAUzB,SAASI,EAAuB/U,GAC9B,OAAO5iB,EAAMwnB,qBAAqB5E,EAAO8U,EAC3C,CAEA,SAASE,EAAcj1B,GACrB,IAAI,KAAEk1B,GAASl1B,EACf,IAAKk1B,EAAM,CACT,MAAM,QAAEhF,GAAY7vB,EAAS8d,IAC7B,IAAI8R,EAASjwB,EAAKiwB,QAAU5vB,EAAS8d,IAAI8R,OACzCiF,EAAOhF,EAAQD,GACViF,IACH7R,EAAOnC,KAAK,mBAAmB+O,OAC9BA,GAAU9uB,OAAOyP,KAAKsf,GACvBgF,EAAOhF,EAAQD,IAEjBjwB,EAAKiwB,OAASA,EACdjwB,EAAKk1B,KAAO73B,EAAM+oB,WAAW8O,GAAM,EACrC,CACF,CAEA,SAASC,EAAgBn1B,EAAMma,EAAM8F,GACnCgV,EAAcj1B,GACd,MAAMrB,EAAMqB,EAAKk1B,KAAKd,GAElBz1B,EAAIyE,eAAe+W,KACrBia,EAAWp0B,EAAKk1B,KAAK19B,OACrBwI,EAAKk1B,KAAKd,GAAY/2B,EAAM+oB,WAAWznB,GAAK,SAEhCib,IAAVqG,IACFjgB,EAAKk1B,KAAKd,GAAUja,GAAQ8F,EAEhC,CA8BA,SAASmV,EAAY9yB,EAAO+yB,EAAct1B,GACxC,GAAIuC,EAAO,CACT,MAAMgzB,EAAOhzB,EAAM2S,QAAQwf,GACrBc,EAbV,SAAqBtzB,EAAKlC,GACxB,MAAMy1B,EAAMvzB,EAAIgT,QAAQ,KACxB,OAAIugB,GAAO,GACTz1B,EAAOyD,KAAKvB,EAAIiE,OAAOsvB,EAAM,GAAGvvB,MAAM,MAC/BhE,EAAIiE,OAAO,EAAGsvB,IAGhBvzB,CACT,CAKqBwzB,CAAYnzB,EAAM4D,OAAO,EAAGovB,GAAQ,EAAIA,OAAO1b,GAAY7Z,GAC5E,GAAIu1B,GAAQ,EAAG,CACb,MAAMzyB,EAAOP,EAAM4D,OAAOovB,EAAO,GAAGrvB,MAAM0uB,GAE1C,GADAryB,EAAQizB,EACJF,EAAc,CAChB,MAAMhb,EAAWgb,EAAa/yB,GACxBtC,EAAO3C,EAAM+oB,WAAW/L,GAAU,GACxCxX,EAAKuQ,SAASsiB,IACZ,MAAMC,EAAOD,EAAIzvB,MAAMyuB,EAAQ,GACzBzzB,EAAMihB,mBAAmByT,EAAK,IAC9B1V,EAAQiC,mBAAmByT,EAAK,IAChCC,EAAUtB,SAAgBxzB,IAAAA,IAAMuZ,EAAUpZ,IAC5C20B,EACF90B,IAAAA,IAAMd,EAAMiB,EAAK20B,EAAQ3V,IAEzBoD,EAAOnC,KAAK,qBAAqBjgB,kBAAoBqB,KACvD,IAEEnB,OAAOyP,KAAK5Q,GAAMxI,OAAS,IAC7B8K,EAAQ,CAACA,EAAOtC,GAEpB,CACF,MACEsC,EAAQizB,CAEZ,CACA,OAAOjzB,CACT,CAEA,MAAMuzB,EAAU,CAEdt+B,EAAG,OACHgJ,KAAMsB,OACN4K,EAAG,OACH3M,KAAM+B,OACNvK,EAAG,OACH4H,KAAM2C,OACNoO,EAAG,OACH6lB,KAAM/2B,OACNg3B,KAAM1B,EAINj9B,EAAG,SACHswB,MAAAA,CAAOzH,EAAOjgB,GACZ,MAAMD,EAAS,GACf,IAAI2D,EAAU0xB,EAAYnV,EAAO5f,EAASga,SAASmW,QAASzwB,GACvDa,MAAM8P,QAAQhN,KACjBA,EAAU,CAACA,IA/EjB,SAAmB1D,EAAMD,EAAQ2D,QACTkW,IAAlB5Z,EAAKg2B,WACPh2B,EAAKg2B,SAAW,IAGlB,MAAOl2B,EAAMm2B,GAAWvyB,EAClBwyB,EAAS,CACbp2B,OACAC,eAGc6Z,IAAZqc,IACFC,EAAOl2B,KAAOi2B,GAGhBj2B,EAAKg2B,SAASh2B,EAAKg2B,SAASx+B,QAAU0+B,CACxC,CAiEIr2B,CAAUG,EAAMD,EAAO,GAAI2D,EAC7B,EAEAO,EAAG,SACHgsB,MAAAA,CAAOhQ,EAAOjgB,GACZA,EAAKiwB,OAAShQ,EACdjgB,EAAKk1B,KAAO,KACZD,EAAcj1B,EAChB,EAEAgE,EAAG,MACHrF,GAAAA,CAAIshB,EAAOjgB,GACTi1B,EAAcj1B,GACdo0B,EAAWr1B,OAAOkhB,GAElBmU,EAAWA,GAAYp0B,EAAKk1B,KAAK19B,OAAU48B,EAAW,EAAI,EAAIA,EAAYp0B,EAAKk1B,KAAK19B,OAEhF48B,IAAap0B,EAAKk1B,KAAK19B,SAEzBwI,EAAKk1B,KAAKd,GAAYA,EAAW,EAAI/2B,EAAM+oB,WAAWpmB,EAAKk1B,KAAKd,EAAW,IAAI,GAC3E/2B,EAAM+oB,WAAW/lB,EAASga,SAAS6V,QAAQC,QAAQ,IAAI,GAE/D,EAEA7hB,EAAG,SACH9P,MAAAA,CAAOyhB,EAAOjgB,GACZm1B,EAAgBn1B,EAAM,WAAYigB,EACpC,EAEAlT,EAAG,OACHpM,IAAAA,CAAKsf,EAAOjgB,GACVm1B,EAAgBn1B,EAAM,OAAQo1B,EAAYnV,EAAO5f,EAASga,SAASqQ,OACrE,EAEA5jB,EAAG,QACH2T,KAAAA,CAAMwF,EAAOjgB,GACXm1B,EAAgBn1B,EAAM,UAAWo1B,EAAYnV,EAAO5f,EAASga,SAAS+T,UACxE,EAEA+H,GAAI,WACJn3B,QAAAA,CAASihB,EAAOjgB,GACdm1B,EAAgBn1B,EAAM,WAAYo1B,EAAYnV,EAAO5f,EAASga,SAAS+b,WACzE,EAEAC,GAAAA,CAAIpW,EAAOjgB,GACTi1B,EAAcj1B,GACd,MAAM,KAAEk1B,GAASl1B,EACXrB,EAAMu2B,EAAKd,GACjBA,EAAWc,EAAK19B,OAChB09B,EAAKd,GAAY/2B,EAAM+oB,WAAWznB,GAAK,EACzC,EAIA6Z,GAAI,kBAGN,SAAS8d,GAAWC,GAClBnC,EAAW,EAEX,MAAMp0B,EAAO,CAAC,EACd,IAAK,IAAIV,EAAI,EAAGC,EAAIg3B,EAAQ/+B,OAAQ8H,EAAIC,IAAKD,EAAG,CAC9C,MAAsBk3B,EAAQD,EAAQj3B,GACtC,IAAmB2B,EAAMu1B,EAAM,GAC/B,MAAqBvW,EAAQuW,EAAM,GACnC,IAA4BzyB,EAAS8xB,EAAQ50B,GAG7C,KAAOH,IAAAA,SAAWiD,IAChB9C,EAAM8C,EACNA,EAAS8xB,EAAQ50B,GAInB,GAAK8C,GAOE,GAAIjD,IAAAA,WAAaiD,GAAS,CAC/B,MAAM0e,EAAS1e,EAAOkc,EAAOjgB,QACd4Z,IAAX6I,IACFziB,EAAKiB,GAAOwhB,EAEhB,MAZa,CACX,MAAMmT,EAAUtB,SAAgBxzB,IAAAA,IAAMT,EAASga,SAAUpZ,IACrD20B,EACF90B,IAAAA,IAAMd,EAAM,YAAYiB,IAAO20B,EAAQ3V,IAEvCoD,EAAOnC,KAAK,mBAAmBjgB,KAEnC,CAMF,CAEA,OAAOjB,CACT,CAUA,SAASy2B,GAAmBz2B,GAC1B,MAAMiC,EAAM,GACZ,IAAI3C,EAAI,EAIR,OAHAjC,EAAMoqB,eAAeznB,GAAM,CAACigB,EAAOhf,KACjCgB,EAAI3C,KAAO01B,EAAuB/zB,GAAOyzB,EAASM,EAAuB/U,EAAM,IAE1Ehe,EAAI0C,KAAKgwB,EAClB,CAEA,SAAS+B,GAAmB7zB,GAC1B,OAAK/B,IAAAA,QAAU+B,GAGXA,EAAKrL,OAAS,EACTqL,EAAK,GAEP,GAAGA,EAAK,KAAK4xB,IAAWgC,GAAmB5zB,EAAK,MAL9CA,CAMX,CAEA,SAAS8zB,GAAkBC,GACzB,IAAKA,IAAYA,EAAQ92B,KACvB,OAEF,IAAIwmB,EAAMsQ,EAAQ92B,KAOlB,OANIgB,IAAAA,QAAU81B,EAAQ72B,SAAW62B,EAAQ72B,OAAOvI,OAAS,IACvD8uB,GAAO,IAAIsQ,EAAQ72B,OAAO4E,KAAK,QAE7BiyB,EAAQ52B,OACVsmB,GAAOmO,EAAWgC,GAAmBG,EAAQ52B,OAExCsmB,CACT,CAmEA,SAASuQ,GAAsB72B,GAC7B,MAAMiC,EAAM,GACZ,IAAI3C,EAAI,EAIR,OAHAjC,EAAMoqB,eAAeznB,GAAM,CAACigB,EAAOhf,KACjCgB,EAAI3C,KAAO,GAAG2B,KAAO5D,EAAMwqB,cAAc5H,IAAQ,IAE5Che,EAAI0C,KAAK,IAClB,CAEA,SAASmyB,GAAsBj0B,GAC7B,OAAK/B,IAAAA,QAAU+B,GAGXA,EAAKrL,OAAS,EACTqL,EAAK,GAEP,GAAGA,EAAK,MAAMg0B,GAAsBh0B,EAAK,MALvCA,CAMX,CAEA,SAASk0B,GAAqBH,GAC5B,IAAKA,IAAYA,EAAQ92B,KACvB,OAEF,IAAIwmB,EAAMsQ,EAAQ92B,KAOlB,OANIgB,IAAAA,QAAU81B,EAAQ72B,SAAW62B,EAAQ72B,OAAOvI,OAAS,IACvD8uB,GAAO,IAAIsQ,EAAQ72B,OAAOi3B,IAAI35B,EAAMwqB,eAAeljB,KAAK,QAEtDiyB,EAAQ52B,OACVsmB,GAAO,IAAIuQ,GAAsBD,EAAQ52B,SAEpCsmB,CACT,CAEA,SAAS2Q,GAAsBt4B,EAAKyI,GAClC,MAAM8vB,EAAY,GAClB,IAAIC,EAAS,EACb,SAASC,EAAS7a,EAAQ0D,GACpBA,UACFiX,EAAUC,KAAY5a,EAAS0D,EAEnC,CACA,OAAInf,IAAAA,QAAUnC,GACL,MAETy4B,EAAS,GAAIhwB,GACbgwB,EAAS,KAAM/5B,EAAMwqB,cAAclpB,EAAIE,WACvCu4B,EAAS,KAAMN,GAAsBn4B,EAAIgC,OACzCy2B,EAAS,KAAMN,GAAsBn4B,EAAIkC,UACzCu2B,EAAS,MAAON,GAAsBn4B,EAAIK,WACnCk4B,EAAUvyB,KAAK,KACxB,CAmDA,UACE0yB,QA5MF,SAAiBjV,GACf,OAAOkU,GAAWj5B,EAAM8kB,iBAAiBC,GAC3C,EA2MEkV,SAjNF,SAAkBC,GAChB,OAAOjB,GAAWj5B,EAAM8kB,iBAAiB,IAAIoV,GAAQ,MACvD,EAgNEjD,WACAkD,MA1KF,SAAex3B,GACb,MAAMy3B,EAAa,GACnB,IAAIna,EAAM,EAEV,SAASoa,EAAYnb,EAAQ0D,GACvBA,UACFwX,EAAWna,KAASwX,EAAuBvY,GAlSlC,IAmSwBuY,EAAuB7U,GAE5D,CA2BAyX,EAAY,IAAK13B,EAAKO,MACtBm3B,EAAY,IAAK13B,EAAK81B,MACtB4B,EAAY,IAAK13B,EAAKiwB,QA3BtB,SAAiB0H,GACf,GAAKA,EAGL,IAAK,IAAIr4B,EAAI,EAAGC,EAAIo4B,EAAQngC,OAAQ8H,EAAIC,IAAKD,EACvCwB,IAAAA,QAAU62B,EAAQr4B,MAGtBo4B,EAAY,IAAKp4B,GACjBo4B,EAAY,IAAKC,EAAQr4B,GAAGT,UAC5B64B,EAAY,IAAKhB,GAAmBiB,EAAQr4B,GAAGqB,OAC/C+2B,EAAY,IAAKhB,GAAmBiB,EAAQr4B,GAAGuB,UAC/C62B,EAAY,KAAMhB,GAAmBiB,EAAQr4B,GAAGN,WAEpD,CAcA44B,CAAQ53B,EAAKk1B,MAZb,SAAoB2C,GAClB,GAAKA,EAGL,IAAK,IAAIv4B,EAAI,EAAGC,EAAIs4B,EAAQrgC,OAAQ8H,EAAIC,IAAKD,EAC3Co4B,EAAY,IAAKf,GAAkBkB,EAAQv4B,IAE/C,CAMAw4B,CAAW93B,EAAKg2B,UAEhB0B,EAAY,IAAK13B,EAAKd,MAEtB7B,EAAMoqB,eAAeznB,EAAKK,UAAU,CAAC4f,EAAOhf,KAG9B,WAARA,GAGJy2B,EAAYz2B,EAAKgf,EAAM,IAGzB,IAAImC,EAAM,GACV,GAAsB,oBAAXhV,OAAwB,CACjC,MAAM,SAAEkV,GAAalV,OACrBgV,EAAM,GAAGE,EAASyV,aAAazV,EAAS0V,OAAO1V,EAAS2V,UAC1D,CAKA,OAJIR,EAAWjgC,OAAS,IACtB4qB,GAAO,IAAIqV,EAAW9yB,KAAK,QAGtByd,CACT,EA4GE8V,SAtDF,SAAkBl4B,GAChB,MAAMm4B,EAAe,GACrB,IAAI7a,EAAM,EACV,SAASoa,EAAYU,EAASnY,EAAOoY,GACnC,GAAIpY,QAAuC,CACzC,MAAMqY,EAA0B,iBAAVrY,GAAsBoY,EAAc,IAAM,GAChEF,EAAa7a,KAAS,GAAG8a,KAAWE,IAAQrY,IAAQqY,IAAQC,MAC9D,CACF,CAsCA,OAjBAb,EAAY,MAAO,mBACnBA,EAAY,OAAQ13B,EAAKO,MAAM,GAC/Bm3B,EAAY,OAAQ13B,EAAK81B,MACzB4B,EAAY,SAAU13B,EAAKiwB,QAtB3B,SAAiB0H,GACf,GAAKA,EAIL,IAAK,IAAIr4B,EAAI,EAAGC,EAAIo4B,EAAQngC,OAAQ8H,EAAIC,IAAKD,EAC3Co4B,EAAY,MAAOT,GAAsBU,EAAQr4B,GAAIA,GAEzD,CAeAs4B,CAAQ53B,EAAKk1B,MAbb,SAAoB2C,GAClB,GAAKA,EAGL,IAAK,IAAIv4B,EAAI,EAAGC,EAAIs4B,EAAQrgC,OAAQ8H,EAAIC,IAAKD,EAC3Co4B,EAAY,GAAIX,GAAqBc,EAAQv4B,IAEjD,CAOAw4B,CAAW93B,EAAKg2B,UAEhB34B,EAAMoqB,eAAeznB,EAAKK,UAAU,CAAC4f,EAAOhf,KAG9B,WAARA,GAGJy2B,EAAY,OAAOz2B,IAAOgf,GAAO,EAAK,IAExCyX,EAAY,OAAQ13B,EAAKd,MACzBw4B,EAAY,MAAO,kBACZS,EAAaxzB,KAAK,KAC3B,GC7bA,MAAM6zB,GACJluB,WAAAA,CAAYmuB,EAASlV,EAAMzjB,EAAMqb,EAAUud,EAAMC,EAAKC,EAAQtW,EAAU5K,EAAWmhB,EAAaC,GAC9F9hC,KAAKoQ,OAAS,EACdpQ,KAAKyhC,QAAUA,EACfzhC,KAAKusB,KAAOA,EACZvsB,KAAKggB,QAAUlX,EACf9I,KAAKmkB,SAAWA,EAChBnkB,KAAK0hC,KAAOA,EACZ1hC,KAAK+hC,KAAO,EAEZ/hC,KAAK2hC,IAAMA,EAEX3hC,KAAK4hC,OAASA,EACd5hC,KAAKsrB,UAAYA,GAAY,KAAKvS,WAAW,GAC7C/Y,KAAK0gB,UAAYA,GAAa,EAC9B1gB,KAAK6hC,YAAcA,EACnB7hC,KAAK8hC,OAASA,EACd9hC,KAAKgiC,eAAiB,EACtBhiC,KAAKiiC,aAAe,EACpBjiC,KAAKkiC,SAAW,EAEhBliC,KAAKmiC,MAAQ,GAEbniC,KAAKoiC,MAAQ,EACK,MAAdt5B,EAAKyjB,KACPvsB,KAAKoiC,OAASZ,GAAKa,MAAMC,SACF,MAAdx5B,EAAKyjB,OACdvsB,KAAKoiC,OAASZ,GAAKa,MAAME,OAE7B,CAEAC,KAAAA,GACE,OAAOxiC,KAAK2hC,GACd,CAEAc,UAAAA,GACE,OAA+B,IAAxBziC,KAAKggB,QAAQuK,MACtB,CAEAmY,aAAAA,GACE,MAAM,KAAEnW,GAASvsB,KACjB,OAAIusB,EAAK/rB,OAAS,EACT+rB,EAEFvsB,KAAKggB,QAAQuM,KAAKgV,MAC3B,CAEAoB,WAAAA,CAAYC,GACV,MAAM,MAAET,GAAUniC,KAClB,IAAK,IAAIsI,EAAI,EAAGC,EAAI45B,EAAM3hC,OAAQ8H,EAAIC,IAAKD,EACzCs6B,EAAQT,EAAM75B,GAElB,CAEAu6B,WAAAA,GACE,IAAItW,EAAO,GAQX,OAPqB,OAAjBvsB,KAAKyhC,UACqB,OAAxBzhC,KAAKyhC,QAAQqB,SACfvW,GAAQ,GAAGvsB,KAAKyhC,QAAQqB,OAAOC,cAEjCxW,GAAQ,GAAGvsB,KAAKyhC,QAAQuB,cAE1BzW,GAAQvsB,KAAKusB,KACNA,CACT,CAQA0W,aAAe,CACbV,OAAQ,EAGRD,SAAU,EAEVY,UAAW,MAIf,YCvGA,MAAMC,GACJ7vB,WAAAA,CAAYiX,EAAQgC,EAAM6W,EAAUC,EAAQ9f,EAAQ+f,EAAeC,GACjEvjC,KAAKuqB,OAASA,EACdvqB,KAAKusB,KAAOA,EACZvsB,KAAKojC,SAAWA,EAChBpjC,KAAKqjC,OAASA,EACdrjC,KAAKujB,OAASA,EACdvjB,KAAKsjC,cAAgBA,EACrBtjC,KAAKwjC,gBAAkBD,CACzB,CAEAN,iBAAmB,CAEjBQ,GAAI,EACJC,KAAM,EACNC,GAAI,EACJC,KAAM,EACNC,IAAK,IAIPZ,YAAc,MAAH,CAET5nB,EAAG8nB,GAAQW,UAAUL,GACrB3N,GAAIqN,GAAQW,UAAUJ,KACtB5oB,EAAGqoB,GAAQW,UAAUH,GACrBroB,EAAG6nB,GAAQW,UAAUF,KACrBG,GAAIZ,GAAQW,UAAUD,MANV,GAWdZ,sBAAwB,MAEtB,KACA,IAAIE,GAAQ,EAAG,IAAK,WAAY,MAAO,IAAK,IAAM,CAAC,IACnD,IAAIA,GAAQ,EAAG,KAAM,SAAU,MAAO,IAAK,IAAM,CAAC,IAClD,IAAIA,GAAQ,EAAG,KAAM,UAAW,MAAO,KAAM,IAAM,CAAC,IACpD,IAAIA,GAAQ,EAAG,KAAM,YAAa,MAAO,IAAK,IAAM,CAAC,IACrD,IAAIA,GAAQ,EAAG,IAAK,QAAS,MAAO,KAAM,IAAM,CAAC,IACjD,IAAIA,GAAQ,EAAG,IAAK,SAAU,OAAQ,KAAM,IAAM,CAAC,IACnD,IAAIA,GAAQ,EAAG,IAAK,WAAY,OAAQ,KAAM,IAAM,CAAC,EAAG,IACxD,IAAIA,GAAQ,EAAG,IAAK,SAAU,OAAQ,IAAK,IAAM,CAAC,EAAG,IACrD,IAAIA,GAAQ,EAAG,IAAK,WAAY,OAAQ,KAAM,IAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,OAAQ,MAAO,KAAM,KAAM,CAAC,IAClD,IAAIA,GAAQ,GAAI,KAAM,SAAU,MAAO,KAAM,IAAM,CAAC,IACpD,IAAIA,GAAQ,GAAI,KAAM,YAAa,OAAQ,KAAM,IAAK,CAAC,IACvD,IAAIA,GAAQ,GAAI,KAAM,WAAY,OAAQ,KAAM,KAAM,CAAC,IACvD,IAAIA,GAAQ,GAAI,KAAM,UAAW,OAAQ,IAAK,IAAK,CAAC,IACpD,IAAIA,GAAQ,GAAI,IAAK,aAAc,OAAQ,KAAM,IAAM,CAAC,EAAG,IAC3D,IAAIA,GAAQ,GAAI,IAAK,SAAU,MAAO,EAAG,KAAM,CAAC,EAAG,EAAG,IACtD,IAAIA,GAAQ,GAAI,KAAM,WAAY,OAAQ,KAAM,IAAM,CAAC,EAAG,EAAG,EAAG,IAChE,IAAIA,GAAQ,GAAI,KAAM,QAAS,OAAQ,KAAM,KAAM,CAAC,IACpD,IAAIA,GAAQ,GAAI,IAAK,YAAa,KAAM,KAAM,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,UAAW,MAAO,MAAO,IAAM,CAAC,IACtD,IAAIA,GAAQ,GAAI,KAAM,WAAY,OAAQ,IAAK,KAAM,CAAC,IACtD,IAAIA,GAAQ,GAAI,KAAM,WAAY,MAAO,IAAK,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,IAAK,WAAY,OAAQ,IAAK,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,WAAY,GAAI,IAAK,KAAM,CAAC,IAClD,IAAIA,GAAQ,GAAI,KAAM,YAAa,OAAQ,IAAK,KAAM,CAAC,IACvD,IAAIA,GAAQ,GAAI,KAAM,OAAQ,OAAQ,IAAK,KAAM,CAAC,IAClD,IAAIA,GAAQ,GAAI,KAAM,SAAU,MAAO,IAAK,KAAM,CAAC,IACnD,IAAIA,GAAQ,GAAI,KAAM,SAAU,MAAO,KAAM,IAAK,CAAC,IACnD,IAAIA,GAAQ,GAAI,KAAM,SAAU,MAAO,IAAK,KAAM,CAAC,IACnD,IAAIA,GAAQ,GAAI,KAAM,OAAQ,MAAO,KAAM,KAAM,CAAC,IAClD,IAAIA,GAAQ,GAAI,KAAM,UAAW,MAAO,KAAM,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,YAAa,MAAO,IAAK,KAAM,CAAC,IACtD,IAAIA,GAAQ,GAAI,KAAM,UAAW,MAAO,KAAM,KAAM,CAAC,EAAG,IACxD,IAAIA,GAAQ,GAAI,KAAM,WAAY,MAAO,IAAK,KAAM,CAAC,EAAG,EAAG,IAC3D,IAAIA,GAAQ,GAAI,KAAM,UAAW,KAAM,IAAK,KAAM,CAAC,EAAG,EAAG,EAAG,IAC5D,IAAIA,GAAQ,GAAI,KAAM,UAAW,KAAM,KAAM,KAAM,CAAC,IACpD,IAAIA,GAAQ,GAAI,KAAM,WAAY,MAAO,IAAK,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,YAAa,MAAO,IAAK,KAAM,CAAC,IACtD,IAAIA,GAAQ,GAAI,IAAK,UAAW,MAAO,IAAK,KAAM,CAAC,IACnD,IAAIA,GAAQ,GAAI,KAAM,YAAa,MAAO,IAAK,KAAM,CAAC,IACtD,IAAIA,GAAQ,GAAI,KAAM,UAAW,MAAO,IAAK,KAAM,CAAC,IACpD,IAAIA,GAAQ,GAAI,KAAM,aAAc,MAAO,IAAK,KAAM,CAAC,IACvD,IAAIA,GAAQ,GAAI,KAAM,aAAc,MAAO,IAAK,KAAM,CAAC,IACvD,IAAIA,GAAQ,GAAI,KAAM,YAAa,OAAQ,IAAK,IAAK,CAAC,IACtD,IAAIA,GAAQ,GAAI,KAAM,UAAW,OAAQ,IAAK,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,YAAa,OAAQ,KAAM,IAAK,CAAC,IACvD,IAAIA,GAAQ,GAAI,KAAM,SAAU,OAAQ,KAAM,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,UAAW,OAAQ,KAAM,KAAM,CAAC,IACtD,IAAIA,GAAQ,GAAI,KAAM,SAAU,OAAQ,KAAM,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,MAAO,OAAQ,KAAM,KAAM,CAAC,EAAG,IACrD,IAAIA,GAAQ,GAAI,KAAM,WAAY,OAAQ,IAAK,KAAM,CAAC,EAAG,IACzD,IAAIA,GAAQ,GAAI,KAAM,YAAa,MAAO,KAAM,KAAM,CAAC,EAAG,EAAG,IAC7D,IAAIA,GAAQ,GAAI,IAAK,SAAU,OAAQ,KAAM,IAAK,CAAC,EAAG,EAAG,EAAG,IAC5D,IAAIA,GAAQ,GAAI,KAAM,QAAS,OAAQ,KAAM,KAAM,CAAC,IACpD,IAAIA,GAAQ,GAAI,KAAM,SAAU,OAAQ,IAAK,KAAM,CAAC,IACpD,IAAIA,GAAQ,GAAI,KAAM,SAAU,OAAQ,IAAK,KAAM,CAAC,IACpD,IAAIA,GAAQ,GAAI,KAAM,YAAa,OAAQ,IAAK,KAAM,CAAC,IACvD,IAAIA,GAAQ,GAAI,KAAM,SAAU,OAAQ,IAAK,KAAM,CAAC,IACpD,IAAIA,GAAQ,GAAI,KAAM,eAAgB,OAAQ,IAAK,KAAM,CAAC,IAC1D,IAAIA,GAAQ,GAAI,KAAM,YAAa,OAAQ,IAAK,KAAM,CAAC,IACvD,IAAIA,GAAQ,GAAI,KAAM,aAAc,MAAO,IAAK,IAAK,CAAC,IACtD,IAAIA,GAAQ,GAAI,KAAM,WAAY,OAAQ,IAAK,IAAK,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,WAAY,OAAQ,IAAK,KAAM,CAAC,IACtD,IAAIA,GAAQ,GAAI,KAAM,aAAc,OAAQ,IAAK,KAAM,CAAC,IACxD,IAAIA,GAAQ,GAAI,KAAM,UAAW,OAAQ,IAAK,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,aAAc,MAAO,IAAK,KAAM,CAAC,IACvD,IAAIA,GAAQ,GAAI,KAAM,UAAW,OAAQ,IAAK,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,SAAU,OAAQ,IAAK,KAAM,CAAC,IACpD,IAAIA,GAAQ,GAAI,KAAM,UAAW,OAAQ,IAAK,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,YAAa,OAAQ,IAAK,KAAM,CAAC,IACvD,IAAIA,GAAQ,GAAI,KAAM,WAAY,OAAQ,IAAK,KAAM,CAAC,IACtD,IAAIA,GAAQ,GAAI,KAAM,UAAW,OAAQ,IAAK,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,WAAY,OAAQ,IAAK,KAAM,CAAC,IACtD,IAAIA,GAAQ,GAAI,IAAK,WAAY,OAAQ,IAAK,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,UAAW,OAAQ,IAAK,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,SAAU,MAAO,IAAK,KAAM,CAAC,IACnD,IAAIA,GAAQ,GAAI,KAAM,UAAW,OAAQ,IAAK,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,WAAY,OAAQ,KAAM,IAAK,CAAC,IACtD,IAAIA,GAAQ,GAAI,KAAM,OAAQ,OAAQ,KAAM,IAAK,CAAC,IAClD,IAAIA,GAAQ,GAAI,KAAM,UAAW,OAAQ,KAAM,IAAK,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,WAAY,OAAQ,KAAM,KAAM,CAAC,EAAG,IAC1D,IAAIA,GAAQ,GAAI,KAAM,OAAQ,MAAO,KAAM,KAAM,CAAC,EAAG,IACrD,IAAIA,GAAQ,GAAI,KAAM,UAAW,OAAQ,IAAK,KAAM,CAAC,EAAG,IACxD,IAAIA,GAAQ,GAAI,KAAM,WAAY,IAAK,IAAK,KAAM,CAAC,EAAG,EAAG,IACzD,IAAIA,GAAQ,GAAI,KAAM,WAAY,IAAK,IAAK,IAAK,CAAC,EAAG,EAAG,EAAG,IAC3D,IAAIA,GAAQ,GAAI,KAAM,QAAS,IAAK,IAAK,IAAK,CAAC,IAC/C,IAAIA,GAAQ,GAAI,KAAM,WAAY,IAAK,IAAK,EAAG,CAAC,IAChD,IAAIA,GAAQ,GAAI,KAAM,SAAU,OAAQ,IAAK,IAAK,CAAC,IACnD,IAAIA,GAAQ,GAAI,KAAM,WAAY,OAAQ,IAAK,KAAM,CAAC,IACtD,IAAIA,GAAQ,GAAI,KAAM,UAAW,OAAQ,IAAK,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,eAAgB,OAAQ,IAAK,KAAM,CAAC,IAC1D,IAAIA,GAAQ,GAAI,IAAK,UAAW,OAAQ,KAAM,KAAM,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,YAAa,OAAQ,IAAK,KAAM,CAAC,IACvD,IAAIA,GAAQ,GAAI,KAAM,YAAa,MAAO,IAAK,KAAM,CAAC,IACtD,IAAIA,GAAQ,GAAI,KAAM,YAAa,MAAO,IAAK,KAAM,CAAC,IACtD,IAAIA,GAAQ,GAAI,KAAM,SAAU,MAAO,IAAK,IAAK,CAAC,IAClD,IAAIA,GAAQ,GAAI,KAAM,YAAa,MAAO,IAAK,IAAK,CAAC,IACrD,IAAIA,GAAQ,GAAI,KAAM,cAAe,MAAO,IAAK,IAAK,CAAC,IACvD,IAAIA,GAAQ,GAAI,KAAM,cAAe,MAAO,IAAK,IAAK,CAAC,IACvD,IAAIA,GAAQ,IAAK,KAAM,UAAW,MAAO,IAAK,IAAK,CAAC,IACpD,IAAIA,GAAQ,IAAK,KAAM,cAAe,MAAO,IAAK,IAAK,CAAC,IACxD,IAAIA,GAAQ,IAAK,KAAM,WAAY,MAAO,IAAK,IAAK,CAAC,IACrD,IAAIA,GAAQ,IAAK,KAAM,aAAc,MAAO,IAAK,IAAK,CAAC,IACvD,IAAIA,GAAQ,IAAK,KAAM,gBAAiB,IAAK,IAAK,IAAK,CAAC,IACxD,IAAIA,GAAQ,IAAK,KAAM,UAAW,IAAK,IAAK,IAAK,CAAC,IAClD,IAAIA,GAAQ,IAAK,KAAM,aAAc,IAAK,IAAK,IAAK,CAAC,IACrD,IAAIA,GAAQ,IAAK,KAAM,UAAW,IAAK,IAAK,IAAK,CAAC,IAClD,IAAIA,GAAQ,IAAK,KAAM,UAAW,IAAK,IAAK,IAAK,CAAC,IAClD,IAAIA,GAAQ,IAAK,KAAM,aAAc,IAAK,IAAK,IAAK,CAAC,KA/G/B,GAoHxBF,cAAgB,MAAH,CAGXrnB,EAAG,IAAIunB,GAAQ,EAAG,IAAK,YAAa,MAAO,IAAK,IAAM,CAAC,IACvD5nB,EAAG,IAAI4nB,GAAQ,EAAG,IAAK,UAAW,MAAO,IAAK,IAAM,CAAC,MAJvC,IAWjB,WACC,MAAMa,EAAiBb,GAAQc,eACzBC,EAASf,GAAQgB,OACvB,IAAK,IAAI77B,EAAI,EAAGC,EAAIy7B,EAAexjC,OAAQ8H,EAAIC,IAAKD,EAAG,CACrD,MAAM0X,EAAUgkB,EAAe17B,GAC3B0X,IACFkkB,EAAOlkB,EAAQuM,MAAQvM,EAE3B,CACD,CATA,GAYDmjB,GAAQiB,UAAY,SAAUpkB,GAC5B,IAAIlX,EAAOq6B,GAAQgB,OAAOnkB,GAI1B,OAHKlX,IACHA,EAAOq6B,GAAQgB,OAAOnkB,GAAW,IAAImjB,GAAQ,EAAGnjB,EAAS,UAAW,EAAG,EAAK,IAAM,CAAC,KAE9ElX,CACT,EAEA,YCnLMu7B,GAAa,CAEjBC,QAAS,EAETC,SAAU,EAEVC,SAAU,GAGZ,SAASC,GAAW7Q,GAClB,OAAOA,EAAKzP,QACd,CAcA,MAAMugB,GACJpxB,WAAAA,CAAY2Q,EAAM0gB,EAAOC,EAAO97B,EAAM+7B,GAKpC,GAJA7kC,KAAK8kC,MAAQ7gB,EACbjkB,KAAK+kC,OAASJ,EACd3kC,KAAKglC,OAASH,EACd7kC,KAAKooB,QAAU,EACXnE,EAAO0gB,EACT,MAAM,IAAIt5B,MAAM,sDAElBrL,KAAKilC,OAASL,EACd5kC,KAAKklC,MAAQp8B,CACf,CAEAq8B,OAAAA,GACE,OAAOnlC,KAAK8kC,KACd,CAEAM,QAAAA,GACE,OAAOplC,KAAK+kC,MACd,CAEAM,QAAAA,GACE,OAAOrlC,KAAKilC,MACd,CAEAK,UAAAA,GACE,OAAOtlC,KAAK8kC,MAAM3gB,SAASohB,WAAWvlC,KAAK+kC,OAAO5gB,SACpD,CAEAqhB,iBAAAA,CAAkBC,EAAU7C,GAC1B,MAAM,MAAET,GAAUsD,EAClB,IAAK,IAAIn9B,EAAI,EAAGC,EAAI45B,EAAM3hC,OAAQ8H,EAAIC,IAAKD,EACzCs6B,EAAQT,EAAM75B,GAAGw8B,QAAUW,EAAWtD,EAAM75B,GAAGw8B,MAAQ3C,EAAM75B,GAAGy8B,OAEpE,CAEAW,eAAAA,CAAgB9C,GACd,MAAM3e,EAAOjkB,KAAK8kC,MACZH,EAAQ3kC,KAAK+kC,OACnB/kC,KAAKwlC,kBAAkBvhB,GAAO2P,IACxBA,IAAS+Q,GAGb/B,EAAQhP,EAAK,IAEf5zB,KAAKwlC,kBAAkBb,GAAQ/Q,IACzBA,IAAS3P,GAGb2e,EAAQhP,EAAK,GAEjB,CAEA+R,eAAAA,CAAgB/C,GAEd,MAAM3e,EAAOjkB,KAAK8kC,MACZH,EAAQ3kC,KAAK+kC,OACbx5B,EAAOvL,KACbuL,EAAKi6B,kBAAkBvhB,GAAO2P,IACxBA,IAAS+Q,GAGbp5B,EAAKi6B,kBAAkB5R,GAAOgS,IACxBA,IAAW3hB,GAGf2e,EAAQgD,EAAO,GACf,IAEJr6B,EAAKi6B,kBAAkBb,GAAQ/Q,IACzBA,IAAS3P,GAGb1Y,EAAKi6B,kBAAkB5R,GAAOgS,IACxBA,IAAWjB,GAGf/B,EAAQgD,EAAO,GACf,GAEN,CAEAC,OAAAA,CAAQC,EAAUC,EAASC,GAEzB,IAAIC,EAAa,EACbC,EAAY,EAChB,MAAMC,EAASL,EAASM,QACxB,SAASC,EAASzS,GAChBuS,EAAO1uB,KAAKuuB,EAAUpS,IACtBuS,EAAOG,IAAIR,GACKC,EAAQQ,IAAIJ,GACd,IACVF,IAEAC,CAEN,CACA,SAASM,EAAY5S,GACO,MAAtBA,EAAK5T,QAAQuM,MACf8Z,EAASzS,EAEb,CAEA,MAAM6S,EAAS,CACb,CAACzmC,KAAK0lC,gBAAiBc,GACvB,CAACxmC,KAAK0lC,gBAAiBW,GACvB,CAACrmC,KAAK2lC,gBAAiBa,GACvB,CAACxmC,KAAK2lC,gBAAiBU,IAGzB,IAAK,IAAIK,EAAU,EAAGA,EAAUD,EAAOjmC,SAAUkmC,EAAS,CAExD,GADAD,EAAOC,GAAS,GAAG36B,KAAK/L,KAAMymC,EAAOC,GAAS,IAC1CR,EAAYD,EACd,OAAOF,EAAQY,gBAAgB,GAEjC,GAAIT,EAAYD,EACd,OAAOF,CAEX,CACA,OAAOA,CACT,CAEAa,aAAAA,CAAcZ,GACZ,MAAM/hB,EAAOjkB,KAAK8kC,MACZH,EAAQ3kC,KAAK+kC,OACnB,IAAIjS,EAAQ7O,EACR8O,EAAS4R,EACbqB,OAA0BpjB,IAAdojB,EAA0BvB,GAAauB,EAC/C/hB,EAAKke,MAAM3hC,OAASmkC,EAAMxC,MAAM3hC,SAClCsyB,EAAQ6R,EACR5R,EAAS9O,GAEX,IAAI4iB,EAAQ/T,EACRgU,EAAW,EACf,MAAM,MAAE3E,GAAUpP,EAClB,IAAK,IAAIzqB,EAAI,EAAGC,EAAI45B,EAAM3hC,OAAQ8H,EAAIC,IAAKD,EAAG,CAC5C,IAAIy+B,EAAU5E,EAAM75B,GAAGw8B,MACnB3C,EAAM75B,GAAGw8B,QAAU/R,IACrBgU,EAAU5E,EAAM75B,GAAGy8B,QAEjBgC,EAAQ5E,MAAM3hC,OAASsmC,GAAYC,IAAYjU,IACjD+T,EAAQE,EACRD,EAAWC,EAAQ5E,MAAM3hC,OAE7B,CACA,MAAMwmC,EAAYhB,EAAUjT,GACtBkU,EAASjB,EAAUlT,GAAOsT,QAAQE,IAAIU,GACtCE,EAAUlB,EAAUa,GAAOT,QAAQE,IAAIU,GAY7C,OAXAE,EAAQC,aAAaF,EAAQC,GACzBA,EAAQE,WAAa,MACvBF,EAAQvgC,IAAI,EAAG,EAAG,GAEpBsgC,EAAOI,YACPH,EAAQG,YACRJ,EAAOE,aAAaD,EAASD,GACzBA,EAAOG,WAAa,MACtBH,EAAOtgC,IAAI,EAAG,EAAG,GAEnBsgC,EAAOI,YACArnC,KAAK6lC,QAAQmB,EAAWC,EAAQjB,EACzC,CAEA/C,gBAAkB,KAAAoB,GAAA,GAGpBK,GAAKv4B,UAAUm7B,SAAWjD,GAE1B,YC5LMkD,GAAuB,CAAC,MAAQ,MAAO,IAAK,MAAO,OACnDC,GAAqB,CAAC,MAAO,OAC7BC,GAAqB,CAAC,MAAO,OAE7BC,GAAkB,CAAC,MAAQ,MAAO,KAAM,MAAQ,MAAO,KACvDC,GAAkB,CAAC,CACvBC,MAAO,CAAC,IAAK,KAAM,IAAK,MACxBC,MAAO,CAAC,OACP,CACDD,MAAO,CAAC,IAAK,MACbC,MAAO,CAAC,OACP,CACDD,MAAO,CAAC,IAAK,KAAM,IAAK,MACxBC,MAAO,CAAC,QAwRV,SA1QA,MACEv0B,WAAAA,CAAYw0B,EAAOh/B,EAAMi/B,EAAUC,GACjChoC,KAAK8iC,OAASgF,EACd9nC,KAAKioC,WAAa,KAClBjoC,KAAKklC,MAAQp8B,EACb9I,KAAKgjC,UAAY+E,EACjB/nC,KAAKkoC,OAASF,EACdhoC,KAAKmoC,MAAQ,EACbnoC,KAAKooB,QAAU,EAEfpoB,KAAKooC,OAAS,GACdpoC,KAAKqoC,WAAa,KAClBroC,KAAKsoC,WAAa,KAClBtoC,KAAKuoC,UAAY,KACjBvoC,KAAKwoC,UAAY,KACjBxoC,KAAKyoC,UAAY,KACjBzoC,KAAK0oC,cAAgB,KACrB1oC,KAAK2oC,UAAY,KACjB3oC,KAAK4oC,YAAc,KACnB5oC,KAAK6oC,WAAa,KAClB7oC,KAAK8oC,UAAW,EAChB9oC,KAAK+oC,MAAO,EACZ/oC,KAAKgpC,UAAY,KACjBhpC,KAAK6hC,YAAc,KACnB7hC,KAAK0gB,UAAY,IACnB,CAGAuoB,QAAAA,GACE,OAAOjpC,KAAK8iC,MACd,CAEAoG,WAAAA,GACE,OAAOlpC,KAAKgpC,SACd,CAEA12B,OAAAA,GACE,OAAOtS,KAAKklC,KACd,CAEAiE,WAAAA,GACE,OAAOnpC,KAAKgjC,SACd,CAEAoG,YAAAA,GACE,OAAOppC,KAAKqoC,UACd,CAEAgB,QAAAA,GACE,OAAOrpC,KAAKkoC,MACd,CAIAoB,OAAAA,CAAQ/c,EAAMzjB,EAAMygC,EAAK7H,EAAMC,EAAKC,EAAQnhB,EAAQC,EAAW8oB,EAAY1H,GACzE,MAAMlO,EAAO,IAAI4N,GAAKxhC,KAAMusB,EAAMzjB,EAAMygC,EAAK7H,EAAMC,EAAKC,EAAQnhB,EAAQC,EAAW8oB,EAAY1H,GAK/F,OAJgB9hC,KAAK8iC,OAAO2G,aACpBH,QAAQ1V,GAChB5zB,KAAKooC,OAAO57B,KAAKonB,GACjB5zB,KAAK+oC,KAAO/oC,KAAK+oC,MAAQpH,EAClB/N,CACT,CAEA8V,YAAAA,GACE,OAAO1pC,KAAKooC,OAAO5nC,MACrB,CAEAmpC,WAAAA,CAAY/G,GACV,MAAMiF,EAAQ7nC,KAAKooC,OACnB,IAAK,IAAI9/B,EAAI,EAAGC,EAAIs/B,EAAMrnC,OAAQ8H,EAAIC,IAChCq6B,EAAQiF,EAAMv/B,MADuBA,GAK7C,CAEAshC,eAAAA,CAAgBrd,GACd,IAAI+C,EAAM,KAQV,OAPAtvB,KAAK2pC,aAAa/V,GACZA,EAAKrH,OAASA,IAChB+C,EAAMsE,GACC,KAIJtE,CACT,CAEAua,oBAAAA,CAAqBC,GACnB,IAAIxa,EAAM,KACV,IAAK,IAAIhnB,EAAI,EAAGA,EAAIwhC,EAAMtpC,SAAU8H,EAElC,GADAgnB,EAAMtvB,KAAK4pC,gBAAgBE,EAAMxhC,IACrB,OAARgnB,EACF,OAAOA,EAGX,OAAOA,CACT,CAEAya,WAAAA,GACE,IAAIhI,EAAO,WACX,MAAM8F,EAAQ7nC,KAAKooC,OACnB,IAAK,IAAI9/B,EAAI,EAAGC,EAAIs/B,EAAMrnC,OAAQ8H,EAAIC,IAAKD,EACzCy5B,GAAQ8F,EAAMv/B,GAAGy5B,KAEnB/hC,KAAKmoC,MAAQpG,CACf,CAEAiI,qBAAAA,GACE,MAAMlhC,EAAO9I,KAAKklC,MAAM+E,MACxB,IAAK,IAAI3hC,EAAI,EAAGC,EAAIo/B,GAAgBnnC,OAAQ8H,EAAIC,IAAKD,EACnD,IAAK,IAAIoT,EAAI,EAAG3F,EAAI4xB,GAAgBr/B,GAAGs/B,MAAMpnC,OAAQkb,EAAI3F,IAAK2F,EAC5D,GAAI5S,IAAS6+B,GAAgBr/B,GAAGs/B,MAAMlsB,GACpC,OAAOisB,GAAgBr/B,GAAGu/B,MAIhC,OAAO,IACT,CAEAqC,eAAAA,CAAgB9Z,EAAKxgB,EAAMu6B,GACzB,MAAMC,EAAWpqC,KAAK6pC,qBAAqBtC,IAC3C,IAAI8C,EAAYrqC,KAAK6pC,qBAAqBrC,IACtC8C,EAAUtqC,KAAK6pC,qBAAqBpC,IAUxC,GARkB,OAAd4C,GAA+B,OAATz6B,IACxBy6B,EAAYz6B,EAAKi6B,qBAAqBrC,KAGxB,OAAZ8C,GAA6B,OAAT16B,IACtB06B,EAAU16B,EAAKi6B,qBAAqBpC,KAGrB,OAAb2C,GAAmC,OAAdC,GAAkC,OAAZC,EAC7C,OAGFla,EAAImY,UAAY6B,EAChBha,EAAIsY,cAAgByB,EAAgBC,GACpCha,EAAIwY,YAAcuB,EAAgBG,GAASlE,QAAQE,IAAI6D,EAAgBE,IACvEja,EAAI0Y,UAAW,EAEf,MAAMyB,EAAYvqC,KAAK6pC,qBAAqBnC,IACtC8C,EAAaxqC,KAAKgqC,wBAClBS,EAA2B,OAAfD,EAAsBxqC,KAAK6pC,qBAAqBW,GAAc,KAC9D,OAAdD,GAAoC,OAAdE,IAG1Bra,EAAIyY,WAAa,CAACsB,EAAgBI,GAAYJ,EAAgBM,IAChE,CAEAC,QAAAA,CAASC,EAAaC,EAAaC,EAAaC,GAC9C,MAAMC,EAAUH,EAAYxE,QAAQE,IAAIqE,GAClCK,EAAUL,EAAYvE,QAAQE,IAAIuE,GAGxC,GAFAG,EAAQ7D,aAAa4D,EAASC,GAC9BA,EAAQ7D,aAAa4D,EAASC,GAAS3D,YACtB,OAAbyD,GAAqBA,EAAStqC,SAAW,KAAQ,CAC9BwqC,EAAQxqC,SAAW,MAAUiI,KAAKoI,IAAIi6B,EAASG,QAAQD,IAAYviC,KAAKC,GAAK,GAEhGsiC,EAAQE,QAEZ,CACA,OAAOF,CACT,CAEAG,cAAAA,CAAeC,EAASC,EAAMC,EAASlb,EAAKmb,EAAgBpB,GAC1D,MAAMqB,EAAyB,OAATH,EAEhBI,EAAKtB,EAAgBnqC,KAAKuoC,WAC1BqC,EAAc,IAAIc,EAAAA,QAAcD,EAAGv1B,EAAGu1B,EAAGhxB,EAAGgxB,EAAG3vB,GACrD,GAAIyvB,EACFvrC,KAAKkqC,gBAAgB9Z,EAAKkb,EAASnB,OADrC,CAKA,GAAIqB,EACFpb,EAAIuY,UAAYwB,EAAgBnqC,KAAKsoC,YAAYlC,YAC5C,CACL,MAAMuE,EAAcU,EAAK3C,cACzBtY,EAAIuY,UAAYgC,EAAYvE,QAAQuF,KAAKf,EAAa,IACtDxa,EAAIwY,YAAc5oC,KAAK0qC,SAASC,EAAaC,EAAaT,EAAgBiB,EAAQ5C,WAAY6C,EAAKzC,YACrG,CACAxY,EAAIsY,cAAgBkC,CATpB,CAUF,CAEAgB,UAAAA,CAAWP,EAAMz7B,EAAMi8B,GAErB7rC,KAAKmrC,eAAeE,EAAMA,EAAMz7B,EAAM5P,KAAM6rC,GAAYjY,GAASA,EAAKzP,UACxE,CAEA2nB,WAAAA,CAAYC,GACV,GAAI/rC,KAAK8iC,SAAWiJ,EAAejJ,OACjC,OAAO,EAET,GAAI9iC,OAAS+rC,EACX,OAAO,EAET,IAAIzc,GAAM,EAYV,OAXAtvB,KAAK2pC,aAAa/V,IAChB,MAAM,MAAEuO,GAAUvO,EAClB,IAAK,IAAItrB,EAAI,EAAGC,EAAI45B,EAAM3hC,OAAQ8H,EAAIC,IAAKD,EAAG,CAC5C,MAAMurB,EAAOsO,EAAM75B,GACnB,GAAIurB,EAAKiR,MAAMrD,UAAYsK,GAAkBlY,EAAKkR,OAAOtD,UAAYsK,EAEnE,OADAzc,GAAM,GACC,CAEX,CACA,OAAO,CAAK,IAEPA,CACT,CAEA0c,SAAAA,GACE,MAAMzgC,EAAOvL,MACZA,KAAKsoC,YAActoC,KAAKooC,OACzBpoC,KAAKyoC,UAAYzoC,KAAKooC,OAAOpoC,KAAKooC,OAAO5nC,OAAS,GAElDR,KAAKuoC,UAAY,KACjBvoC,KAAKwoC,UAAY,KAEjB,IAAIyD,EAAY,EACZpK,EAAc,EACdqK,EAAa,EACbxrB,EAAY,EAChB1gB,KAAK2pC,aAAaxzB,IACO,OAAnB5K,EAAKg9B,WACHpyB,EAAEurB,OAASyB,GAAQW,UAAUJ,OAC/Bn4B,EAAKg9B,UAAYpyB,GAGE,OAAnB5K,EAAKi9B,WACHryB,EAAEurB,OAASyB,GAAQW,UAAUF,OAC/Br4B,EAAKi9B,UAAYryB,GAGjBA,EAAE0rB,cACJA,GAAe1rB,EAAE0rB,YACjBoK,KAEE91B,EAAEuK,YACJA,GAAavK,EAAEuK,UACfwrB,KAEyB,OAAnB3gC,EAAKg9B,WAAyC,OAAnBh9B,EAAKi9B,aAGtCyD,EAAY,IACdjsC,KAAK6hC,YAAcA,EAAcoK,GAE/BC,EAAa,IACflsC,KAAK0gB,UAAYA,EAAYwrB,GAIR,OAAnBlsC,KAAKuoC,WAAyC,OAAnBvoC,KAAKwoC,YAClCxoC,KAAK8oC,UAAW,GAEK,OAAnB9oC,KAAKuoC,YACPvoC,KAAKuoC,UAAYvoC,KAAKsoC,YAED,OAAnBtoC,KAAKwoC,YACPxoC,KAAKwoC,UAAYxoC,KAAKyoC,UAE1B,GC1RF,MAAM0D,GACJ74B,WAAAA,CAAYiZ,EAAM6W,EAAUgJ,GAC1BpsC,KAAKiqC,MAAQ1d,EACbvsB,KAAKqsC,UAAYjJ,EACjBpjC,KAAKosC,WAAaA,EAClBpsC,KAAKoiC,MAAQ,CACf,CAEAW,OAAAA,GACE,OAAO/iC,KAAKiqC,KACd,CAGAhH,qBAAuB,MAAH,CAElBqJ,IAAK,IAAIH,GAAY,MAAO,UAAW,KACvCI,IAAK,IAAIJ,GAAY,MAAO,WAAY,KACxCK,IAAK,IAAIL,GAAY,MAAO,aAAc,KAC1CM,IAAK,IAAIN,GAAY,MAAO,gBAAiB,KAC7CO,IAAK,IAAIP,GAAY,MAAO,WAAY,KACxCQ,IAAK,IAAIR,GAAY,MAAO,YAAa,KACzCS,IAAK,IAAIT,GAAY,MAAO,gBAAiB,KAC7CU,IAAK,IAAIV,GAAY,MAAO,UAAW,KACvCW,IAAK,IAAIX,GAAY,MAAO,YAAa,KACzCY,IAAK,IAAIZ,GAAY,MAAO,aAAc,KAC1Ca,IAAK,IAAIb,GAAY,MAAO,UAAW,KACvCc,IAAK,IAAId,GAAY,MAAO,SAAU,KACtCe,IAAK,IAAIf,GAAY,MAAO,aAAc,KAC1CgB,IAAK,IAAIhB,GAAY,MAAO,gBAAiB,KAC7CiB,IAAK,IAAIjB,GAAY,MAAO,UAAW,KACvCkB,IAAK,IAAIlB,GAAY,MAAO,cAAe,KAC3CmB,IAAK,IAAInB,GAAY,MAAO,iBAAkB,KAC9CoB,IAAK,IAAIpB,GAAY,MAAO,SAAU,KACtCqB,IAAK,IAAIrB,GAAY,MAAO,YAAa,KACzCsB,IAAK,IAAItB,GAAY,MAAO,aAAc,KAC1CuB,IAAK,IAAIvB,GAAY,MAAO,WAAY,KACxCwB,IAAK,IAAIxB,GAAY,MAAO,SAAU,KACtCnxB,EAAG,IAAImxB,GAAY,IAAK,UAAW,KACnCrxB,EAAG,IAAIqxB,GAAY,IAAK,WAAY,KACpClwB,EAAG,IAAIkwB,GAAY,IAAK,UAAW,KACnCvxB,EAAG,IAAIuxB,GAAY,IAAK,UAAW,KACnC5wB,EAAG,IAAI4wB,GAAY,IAAK,UAAW,KACnCzxB,EAAG,IAAIyxB,GAAY,IAAK,SAAU,KAClCyB,GAAI,IAAIzB,GAAY,KAAM,UAAW,KACrC0B,GAAI,IAAI1B,GAAY,KAAM,WAAY,KACtC2B,GAAI,IAAI3B,GAAY,KAAM,UAAW,KACrC4B,GAAI,IAAI5B,GAAY,KAAM,UAAW,KACrC6B,GAAI,IAAI7B,GAAY,KAAM,UAAW,KACrC8B,GAAI,IAAI9B,GAAY,KAAM,SAAU,KACpC,KAAM,IAAIA,GAAY,KAAM,UAAW,KACvC,KAAM,IAAIA,GAAY,KAAM,WAAY,KACxC,KAAM,IAAIA,GAAY,KAAM,UAAW,KACvC,KAAM,IAAIA,GAAY,KAAM,UAAW,KACvC,KAAM,IAAIA,GAAY,KAAM,UAAW,KACvC,KAAM,IAAIA,GAAY,KAAM,SAAU,KACtC+B,IAAK,IAAI/B,GAAY,MAAO,QAAS,IACrCgC,IAAK,IAAIhC,GAAY,MAAO,QAAS,IACrCiC,IAAK,IAAIjC,GAAY,MAAO,QAAS,IACrCkC,IAAK,IAAIlC,GAAY,MAAO,QAAS,IACrCmC,IAAK,IAAInC,GAAY,MAAO,UAAW,IACvCoC,IAAK,IAAIpC,GAAY,MAAO,iBAAkB,MA/CzB,GAyDvBlJ,aAAe,CAGbuL,QAAS,EAETC,MAAO,EAEPC,OAAQ,EAERC,MAAO,EAEPC,SAAU,GAEVpK,SAAU,GAKVqK,QAAS,IAETC,OAAQ,IAERC,WAAY,KAEZC,IAAK,KAELC,IAAK,KAGLC,MAAO,OAKX,SAASC,GAASC,EAAM/nC,GACtB,IAAK,IAAIiB,EAAI,EAAGC,EAAIlB,EAAK7G,OAAQ8H,EAAIC,IAAKD,EAAG,CAC3C,MAAMgnB,EAAM6c,GAAYkD,cAAchoC,EAAKiB,IACvCgnB,IACFA,EAAI8S,OAASgN,EAEjB,CACF,CAEA,MAAM,MAAE/M,IAAU8J,GAClBgD,GAAS9M,GAAM6M,MAAO,CAAC,MAAO,MAAO,MAAO,QAE5CC,GAAS9M,GAAMmM,QAAS,CACtB,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAC/D,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAC/D,MAAO,QAETW,GAAS9M,GAAMoM,MAAO,CAAC,MAAO,MAAO,QACrCU,GAAS9M,GAAMqM,OAAQ,CAAC,MAAO,QAC/BS,GAAS9M,GAAMsM,MAAO,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,QAC1DQ,GAAS9M,GAAMuM,SAAU,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAClFO,GAAS9M,GAAMmC,SAAU,CAAC,MAAO,MAAO,QAExC2K,GAAS9M,GAAMwM,QAAS,CACtB,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAC7C,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,OAE/CM,GAAS9M,GAAMyM,OAAQ,CAAC,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,OACrEK,GAAS9M,GAAM0M,WAAY,CAAC,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,OACzEI,GAAS9M,GAAM2M,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,OACnDG,GAAS9M,GAAM4M,IAAK,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,OAyB9C,SAAmBjmB,EAAO3hB,GACxB,MAAMuS,EAAOzP,OAAOyP,KAAKvS,GACzB,IAAK,IAAIiB,EAAI,EAAGC,EAAIqR,EAAKpZ,OAAQ8H,EAAIC,IAAKD,EAAG,CAC3C,MAAM2B,EAAM2P,EAAKtR,GACX2gB,EAAQ5hB,EAAK4C,GACnBkiC,GAAYkD,cAAcplC,GAAK+e,GAASC,CAC1C,CACF,CAEAqmB,CAAU,iBAhCI,CACZvC,IAAK,IACLY,IAAK,IACLX,IAAK,IACLG,IAAK,IACLT,IAAK,IACLQ,IAAK,IACLZ,IAAK,IACLO,KAAM,GACNW,KAAM,GACND,KAAM,GACNE,KAAM,GACNC,KAAM,IACNN,KAAM,IACNN,KAAM,IACNF,KAAM,IACND,KAAM,IACNF,KAAM,IACND,KAAM,IACNS,KAAM,IACNV,KAAM,MAcR,YC7KMgD,GACK,EADLA,GAEK,EAFLA,GAGK,EA8KX,SAlKA,MACEj8B,WAAAA,CAAYk8B,EAASjjB,GACnBvsB,KAAKyvC,SAAWD,EAChBxvC,KAAKiqC,MAAQ1d,EACbvsB,KAAKmoC,MAAQ,EACbnoC,KAAKooB,QAAU,EACfpoB,KAAK0vC,UAAY,GAEjB1vC,KAAK2vC,YAAc5nC,OAAO6nC,kBAC1B5vC,KAAK6vC,YAAc9nC,OAAO+nC,iBAC5B,CAEArG,UAAAA,GACE,OAAOzpC,KAAKyvC,QACd,CAEA1M,OAAAA,GACE,OAAO/iC,KAAKiqC,KACd,CAEA8F,WAAAA,GACE,OAAO/vC,KAAK0vC,SACd,CAEAM,cAAAA,GACE,MAAMC,EAAWjwC,KAAK0vC,WAEhB,QAAElB,EAAO,QAAEK,GAAY1C,GAAY9J,MAEzCriC,KAAK8I,KAAOymC,GAEZ,IAAK,IAAIjnC,EAAI,EAAGC,EAAI0nC,EAASzvC,OAAQ8H,EAAIC,IAAKD,EAAG,CAC/C,MAAM,MAAE85B,GAAU6N,EAAS3nC,GAAG48B,MAE9B,GAA0B,IAArB9C,EAAQyM,GAAgB,CAC3B7uC,KAAK8I,KAAOymC,GACZ,KACF,CAAO,GAA0B,IAArBnN,EAAQoM,GAAgB,CAClCxuC,KAAK8I,KAAOymC,GACZ,KACF,CACF,CACF,CAQAW,WAAAA,CAAYC,EAAQC,GAClB,MAAMH,EAAWjwC,KAAK0vC,UAEtB,IAAK,IAAIpnC,EAAI,EAAGC,EAAI0nC,EAASzvC,OAAQ8H,EAAIC,IAAKD,EAAG,CAC/C,MAAMgnB,EAAM2gB,EAAS3nC,GACrB,GAAIgnB,EAAI0T,YAAcmN,GAAU7gB,EAAI4Y,SAAWkI,EAC7C,MAAO,CAAC9gB,EAAKhnB,EAEjB,CAEA,OAAO,IACT,CAEA0jC,SAAAA,GACEhsC,KAAKgwC,iBAEL,MAAMC,EAAWjwC,KAAK0vC,UAEtB,IAAIrE,EAAO,KACX,IAAK,IAAI/iC,EAAI,EAAGC,EAAI0nC,EAASzvC,OAAQ8H,EAAIC,IAAKD,EAAG,CAC/C,MAAMsH,EAAQtH,EAAI,EAAIC,EAAK0nC,EAAS3nC,EAAI,GAAK,KACvC+nC,EAAOJ,EAAS3nC,GAGpB+nC,EAAKzE,WAAWP,EAAMz7B,EAAM5P,KAAK8I,OAASymC,IAC1ClE,EAAOgF,CAEX,CAGA,GAAIJ,EAASzvC,OAAS,GAAKyvC,EAAS,GAAGrH,YAAa,CAClD,MAAM37B,EAAIgjC,EAAS,GAAGrH,YACtBqH,EAAS,GAAGrH,YAAc,IAAI8C,EAAAA,QAAcz+B,EAAEiJ,EAAGjJ,EAAEwN,EAAGxN,EAAE6O,EAC1D,MAAWm0B,EAASzvC,OAAS,IAC3ByvC,EAAS,GAAGrH,YAAc,IAAI8C,EAAAA,QAAc,EAAG,EAAG,GAEtD,CAEA4E,aAAAA,CAAcC,GACZ,MAAMN,EAAWjwC,KAAK0vC,UACtB,IAAIrE,EAAO,KACPmF,EAAW,KACf,MAAMC,EAAWF,EAAUb,UACrBnnC,EAAI0nC,EAASzvC,OACnB,SAASikC,EAAW7Q,GAClB,OAAO2c,EAAU9L,WAAW7Q,EAAKxjB,MACnC,CAEA,IAAK,IAAI9H,EAAI,EAAGA,EAAIC,IAAKD,EAAG,CAC1B,MAAM+nC,EAAOJ,EAAS3nC,GAChBooC,EAAWD,EAASJ,EAAKjoB,QACzBkjB,EAAWhjC,EAAI,EAAIC,EAAK0nC,EAAS3nC,EAAI,GAAK,KAChD+nC,EAAKlF,eAAeE,EAAMmF,EAAUlF,EAASoF,EAAU1wC,KAAK8I,OAASymC,GAAmB9K,GACxF4G,EAAOgF,EACPG,EAAWE,CACb,CAEAD,EAASR,EAAS,GAAG7nB,QAAQwgB,YAAcrgC,EAAI,EAC3CkoC,EAASR,EAAS,GAAG7nB,QAAQwgB,YAC7B,IAAI8C,EAAAA,QAAc,EAAG,EAAG,EAC9B,CAUAiF,UAAAA,CAAWpkB,EAAMwb,EAAUqI,GACzB,IAAItnC,EAAO9I,KAAKyvC,SAASmB,eAAerkB,GAC3B,OAATzjB,IACFA,EAAO9I,KAAKyvC,SAASoB,eAAetkB,IAEtC,MAAMkV,EAAU,IAAIqP,GAAQ9wC,KAAM8I,EAAMi/B,EAAUqI,GAalD,OAZApwC,KAAKyvC,SAASkB,WAAWlP,GACzBzhC,KAAK0vC,UAAUljC,KAAKi1B,GAEhB34B,EAAKs5B,OAAS+J,GAAY9J,MAAMwM,QAAU1C,GAAY9J,MAAMmM,WAC1DxuC,KAAK6vC,YAAc9H,IACrB/nC,KAAK6vC,YAAc9H,GAEjB/nC,KAAK2vC,YAAc5H,IACrB/nC,KAAK2vC,YAAc5H,IAIhBtG,CACT,CAEAsP,eAAAA,GACE,OAAO/wC,KAAK0vC,UAAUlvC,MACxB,CAEAwwC,cAAAA,CAAepO,GACb,MAAMqN,EAAWjwC,KAAK0vC,UACtB,IAAK,IAAIpnC,EAAI,EAAGC,EAAI0nC,EAASzvC,OAAQ8H,EAAIC,IAAKD,EAC5Cs6B,EAAQqN,EAAS3nC,GAErB,CAEAyhC,WAAAA,GACE,IAAIhI,EAAO,WACX,MAAMkO,EAAWjwC,KAAK0vC,UACtB,IAAK,IAAIpnC,EAAI,EAAGC,EAAI0nC,EAASzvC,OAAQ8H,EAAIC,IAAKD,EAC5Cy5B,GAAQkO,EAAS3nC,GAAG6/B,MAEtBnoC,KAAKmoC,MAAQpG,CACf,GCpLF,MAAMkP,GAQJ39B,WAAAA,CAAYxK,EAAMooC,EAAMC,GAKtBnxC,KAAK8I,KAAOA,EAKZ9I,KAAKoxC,QAAUH,GAAkBI,cAAcrxC,KAAK8I,OAAS,OAK7D9I,KAAKkxC,KAAOA,EAKZlxC,KAAKmxC,KAAOA,CACd,CAYAnF,SAAAA,CAAUsF,EAAeC,EAAa/B,GACpC,GAAIxvC,KAAKkxC,gBAAgBJ,IAAW9wC,KAAKmxC,gBAAgBL,GACvD,OAIF,MAAM5pB,EAAQsoB,EAAQgC,mBAAmBxxC,KAAKkxC,MACxC1rB,EAAMgqB,EAAQgC,mBAAmBxxC,KAAKmxC,MAC5C,IAAK,IAAInyB,EAAUkI,EAAM4gB,MAAO9oB,GAAWwG,EAAIsiB,MAAO9oB,IACpD,IAAK,IAAIyyB,EAAWvqB,EAAM0a,OAAQ6P,GAAYjsB,EAAIoc,OAAQ6P,IACxD,IAAK,IAAI,MAAErB,GAAUlpB,EAAOkpB,GAAS5qB,EAAI4qB,MAAOA,IAAS,CACvD,MAAMsB,EAAWlC,EAAQmC,iBAAiB3yB,EAASyyB,EAAUrB,GACzDmB,EAAYG,KACdH,EAAYG,GAAUrJ,WAAaroC,KAEvC,CAKJA,KAAKkxC,KAAOK,EAAYvxC,KAAKkxC,MAC7BlxC,KAAKmxC,KAAOI,EAAYvxC,KAAKmxC,KAC/B,EAQFF,GAAkBW,KAAO,CAEvBC,OAAQ,IAERC,OAAQ,IAGRC,UAAW,IAEXC,YAAa,IAEbC,SAAU,IAEVC,MAAO,IAGPC,SAAU,IAEVC,WAAY,IAEZC,QAAS,IAETC,KAAM,IAGNC,KAAM,IAENC,KAAM,KAQRvB,GAAkBwB,QAAU,CAE1BZ,OAAQ,SAERK,MAAO,QAEPQ,KAAM,QAGR,MAAMC,GAAwB1B,GAAkBW,KAC1CgB,GAA2B3B,GAAkBwB,QAMnDxB,GAAkBI,cAAgB,CAChC,CAACsB,GAAsBd,QAASe,GAAyBf,OACzD,CAACc,GAAsBZ,WAAYa,GAAyBV,MAC5D,CAACS,GAAsBX,aAAcY,GAAyBV,MAC9D,CAACS,GAAsBV,UAAWW,GAAyBV,MAC3D,CAACS,GAAsBT,OAAQU,GAAyBV,OAG1D,YCnIMS,GAAwB1B,GAAkBW,KAEnCiB,GAAsB,CACjC,EAAGF,GAAsBX,YACzB,EAAGW,GAAsBV,SACzB,EAAGU,GAAsBZ,WA8C3B,SAvCA,cAAoBd,GAalB39B,WAAAA,CAAYw/B,EAAY5B,EAAMC,EAAMvP,EAAQrV,EAAMwmB,EAASvyC,GACzDksB,MAAMmmB,GAAoBC,IAAe7B,GAAkBW,KAAKM,MAAOhB,EAAMC,GAM7EnxC,KAAK4hC,OAASA,EAKd5hC,KAAKusB,KAAOA,EAKZvsB,KAAK+yC,QAAUA,EAKf/yC,KAAKQ,OAASA,CAChB,GCwBF,SApEA,cAAqBywC,GAcnB39B,WAAAA,CAAY0/B,EAAO9B,EAAMC,EAAM8B,EAAOC,EAASC,GAC7CzmB,MAAMukB,GAAkBW,KAAKC,OAAQX,EAAMC,GAM3CnxC,KAAKgzC,MAAQA,EAQbhzC,KAAKizC,MAAQA,EAKbjzC,KAAKkzC,QAAUA,EAKflzC,KAAKmzC,SAAWA,CAClB,CAcAnH,SAAAA,CAAUsF,EAAeC,EAAa/B,GACpC9iB,MAAMsf,UAAUsF,EAAeC,EAAa/B,GAE5C,IAAI4D,EAAKpzC,KAAKkzC,QACH,OAAPE,GAAgBrrC,OAAOoP,MAAMi8B,KAC/BpzC,KAAKkzC,QAAU5B,EAAc8B,IAE/BA,EAAKpzC,KAAKmzC,SACC,OAAPC,GAAgBrrC,OAAOoP,MAAMi8B,KAC/BpzC,KAAKmzC,SAAW7B,EAAc8B,GAElC,GCpBF,SAxCA,MACE9/B,WAAAA,CAAYiZ,EAAMjJ,GAChBtjB,KAAKiqC,MAAQ1d,EACbvsB,KAAKqzC,OAAS/vB,EAEdtjB,KAAKszC,SAAW,EAClB,CAGAvQ,OAAAA,GACE,OAAO/iC,KAAKiqC,KACd,CAEAsJ,QAAAA,GACE,OAAOvzC,KAAKqzC,MACd,CAEAG,SAAAA,CAAUrd,GACRn2B,KAAKszC,SAAS9mC,KAAK2pB,GACnBn2B,KAAKqzC,OAASrzC,KAAKszC,SAAS9yC,MAC9B,CAEAizC,cAAAA,GACEzzC,KAAKszC,SAAS9mC,KAAK,IAAIknC,GAAO,KAAM,KAAM,KAAM,KAAM,KAAM,MAC9D,CAEA1H,SAAAA,CAAUsF,EAAeC,EAAa/B,GACpC,MAAMl4B,EAAItX,KAAKszC,SACf,IAAK,IAAIhrC,EAAI,EAAGC,EAAI+O,EAAE9W,OAAQ8H,EAAIC,IAAKD,EACrCgP,EAAEhP,GAAG0jC,UAAUsF,EAAeC,EAAa/B,GAK7C,GAHKxvC,KAAKqzC,SACRrzC,KAAKqzC,OAAS/7B,EAAE9W,QAEd8W,EAAE9W,SAAWR,KAAKqzC,OACpB,MAAM,IAAIhoC,MAAM,SAASrL,KAAKiqC,yBAElC,GCYF,SA9CA,MACE32B,WAAAA,CAAYsU,EAAI2E,EAAMpI,EAAU0jB,EAAO8L,GACrC3zC,KAAK4zC,IAAMhsB,EACX5nB,KAAKiqC,MAAQ1d,EACbvsB,KAAK6zC,UAAY1vB,GAAY,IAAIunB,EAAAA,QACjC1rC,KAAKooC,OAASP,GAAS,GACvB7nC,KAAK8zC,QAAU,EACf9zC,KAAK+zC,QAAU,EACf/zC,KAAKg0C,QAAU,KACfh0C,KAAKi0C,WAAaN,GAAY,IAChC,CAMA5Q,OAAAA,GACE,OAAO/iC,KAAKiqC,KACd,CAEAiK,WAAAA,GACE,OAAOl0C,KAAK6zC,SACd,CAEAM,eAAAA,GACE,OAAOn0C,KAAKg0C,OACd,CAEAI,0BAAAA,GACE,MAAMC,EAAS,IACf,GAAqB,OAAjBr0C,KAAKg0C,QACP,OAGF,MAAMM,EAAO,IAAI5I,EAAAA,QAAc2I,EAAQA,EAAQA,GACzCE,EAAS,IAAI7I,EAAAA,SAAe2I,GAASA,GAASA,GACpD,IAAK,IAAI34B,EAAI,EAAGnT,EAAIvI,KAAKooC,OAAO5nC,OAAQkb,EAAInT,EAAGmT,IAAK,CAClD,MAAM84B,EAAOx0C,KAAKooC,OAAO1sB,GAAGyI,SAC5BmwB,EAAK3tC,IAAI8B,KAAKiM,IAAI4/B,EAAKp+B,EAAGs+B,EAAKt+B,GAAIzN,KAAKiM,IAAI4/B,EAAK75B,EAAG+5B,EAAK/5B,GAAIhS,KAAKiM,IAAI4/B,EAAKx4B,EAAG04B,EAAK14B,IACnFy4B,EAAO5tC,IAAI8B,KAAKgM,IAAI8/B,EAAOr+B,EAAGs+B,EAAKt+B,GAAIzN,KAAKgM,IAAI8/B,EAAO95B,EAAG+5B,EAAK/5B,GAAIhS,KAAKgM,IAAI8/B,EAAOz4B,EAAG04B,EAAK14B,GAC7F,CACA9b,KAAKg0C,QAAQS,WAAWH,EAAMC,GAC9Bv0C,KAAKg0C,QAAQrN,eAAe,GAC9B,G,aChCF,MAAM+N,GACJphC,WAAAA,CAAYorB,GACV,GAAIA,aAAe1+B,KAAKsT,YAGtB,OAAOorB,EAGP1+B,KAAK20C,QADHjW,aAAe90B,MACF80B,EAAI5yB,MAAM,GAChB4yB,EACM,CAACA,GAED,EAEnB,CAEAl0B,MAAAA,CAAOye,GACL,MAAMU,EAAS3pB,KAAK20C,QAEpB,OADAhrB,EAAOA,EAAOnpB,QAAUyoB,EACjBjpB,IACT,CAEAkH,MAAAA,CAAO+hB,GACL,MAAMU,EAAS3pB,KAAK20C,QACdvkC,EAAQuZ,EAAO1L,QAAQgL,GAI7B,OAHI7Y,GAAS,GACXuZ,EAAOirB,OAAOxkC,EAAO,GAEhBpQ,IACT,CAEAuG,QAAAA,GACE,OAAOvG,KAAK20C,QAAQhnC,KAAK,IAC3B,CAEAknC,MAAAA,GACE,MAAMlrB,EAAS3pB,KAAK20C,QACdlpB,EAAS,GACf,IAAK,IAAInjB,EAAI,EAAGC,EAAIohB,EAAOnpB,OAAQ8H,EAAIC,IAAKD,EAAG,CAC7C,MAAM2gB,EAAQU,EAAOrhB,GACrBmjB,EAAOnjB,GAAK2gB,EAAM4rB,OAAS5rB,EAAM4rB,SAAW5rB,CAC9C,CACA,OAAOwC,CACT,EAKF,MAAMla,WAAkBmjC,GACtBI,QAAAA,CAAS7rB,GACP,MAAM5hB,EAAOrH,KAAK20C,QAClB,IAAK,IAAIrsC,EAAI,EAAGC,EAAIlB,EAAK7G,OAAQ8H,EAAIC,IAAKD,EACxC,GAAIjB,EAAKiB,GAAGwsC,SAAS7rB,GACnB,OAAO,EAGX,OAAO,CACT,EAKF,MAAM8rB,GAAc,GAEpB,MAAMtjC,WAAkBijC,GACtBphC,WAAAA,CAAYorB,EAAKsW,GACf,MAAM3tC,EAAOqlB,MAAMgS,GACnB,GAAIsW,EAAW,CACbh1C,KAAKg1C,WAAY,EACjB,MAAMrrB,EAAStiB,EAAKstC,QACpB,IAAK,IAAIrsC,EAAI,EAAGC,EAAIohB,EAAOnpB,OAAQ8H,EAAIC,IAAKD,EAAG,CAC7C,MAAM2gB,EAAQU,EAAOrhB,GACA,iBAAV2gB,IACTU,EAAOrhB,GAAK2gB,EAAMhhB,cAEtB,CACF,MACEjI,KAAKg1C,WAAY,EAInB,OAAO3tC,CACT,CAEAytC,QAAAA,CAAS7rB,GAGP,OAAwC,IAAjCjpB,KAAK20C,QAAQ12B,QAAQgL,EAC9B,CAEA1iB,QAAAA,GAEE,MAAMojB,EAAS3pB,KAAK20C,QACpBI,GAAYv0C,OAAS,EACrB,IAAK,IAAI8H,EAAI,EAAGC,EAAIohB,EAAOnpB,OAAQ8H,EAAIC,IAAKD,EAC1CysC,GAAYzsC,GAAKjC,EAAMksB,0BAA0B1nB,OAAO8e,EAAOrhB,KAEjE,OAAOysC,GAAYpnC,KAAK,IAC1B,CAEAsnC,SAAAA,CAAUhsB,GACR,OAAQjpB,KAAKg1C,WAA8B,iBAAV/rB,EAAsBA,EAAMhhB,cAAgBghB,CAC/E,CAEAze,MAAAA,CAAOye,GAEL,OADAyD,MAAMliB,OAAOxK,KAAKi1C,UAAUhsB,IACrBjpB,IACT,CAEAkH,MAAAA,CAAO+hB,GAEL,OADAyD,MAAMxlB,OAAOlH,KAAKi1C,UAAUhsB,IACrBjpB,IACT,ECtIF,MAAMk1C,GACJ3uC,QAAAA,GACE,OAAOvG,KAAKqR,OACd,CAEAwjC,MAAAA,GACE,MAAO,CAAC70C,KAAKusB,KACf,EAGF2oB,GAAS/oC,UAAUogB,KAAO,QAC1B2oB,GAAS/oC,UAAUkF,QAAU,QAG7B,MAAM8jC,WAAqBD,GACzB5hC,WAAAA,CAAYjM,GACVqlB,QACA1sB,KAAKqH,KAAOA,CACd,CAEAd,QAAAA,GACE,MAAO,GAAGvG,KAAKqR,WAAWrR,KAAKqH,MACjC,CAEAwtC,MAAAA,GACE,MAAO,CAAC70C,KAAKusB,KAAMvsB,KAAKqH,KAAKwtC,SAC/B,EAGF,MAAMO,WAA0BD,GAC9B7hC,WAAAA,CAAYorB,GACVhS,MAAM,IAAInb,GAAUmtB,GACtB,EAGF,MAAM2W,WAA0BF,GAC9B7hC,WAAAA,CAAYorB,EAAK4W,GACf5oB,MAAM,IAAIjb,GAAUitB,GAAM4W,GAC5B,EAGF,MAAMC,WAAqBL,GACzBM,YAAAA,CAAaC,GACX,OAAO,CACT,EAGFF,GAAappC,UAAUogB,KAAO,OAC9BgpB,GAAappC,UAAUkF,QAAU,OAEjC,MAAMqkC,WAAoBR,GACxBM,YAAAA,CAAaC,GACX,OAAO,CACT,EAGFC,GAAYvpC,UAAUogB,KAAO,MAC7BmpB,GAAYvpC,UAAUkF,QAAU,MCvDhC,MAAMskC,GAAO,IAAIJ,GAEjB,MAAMK,WAAuBV,GAC3B5hC,WAAAA,CAAYuiC,GACVnpB,QACA1sB,KAAK61C,IAAMA,GAAOF,EACpB,CAEApvC,QAAAA,GACE,MAAMsvC,EAAM71C,KAAK61C,IAAIjrB,UAAY5qB,KAAK61C,IAAIjrB,SAAW5qB,KAAK4qB,SAAW,IAAI5qB,KAAK61C,OAAS71C,KAAK61C,IAC5F,MAAO,GAAG71C,KAAKqR,WAAWwkC,GAC5B,CAEAhB,MAAAA,GACE,MAAO,CAAC70C,KAAKusB,KAAMvsB,KAAK61C,IAAIhB,SAC9B,EAGFe,GAAezpC,UAAUye,SAAW,EAEpC,MAAMkrB,WAAsBZ,GAC1B5hC,WAAAA,CAAYyiC,EAAKF,GACfnpB,QACA1sB,KAAK+1C,IAAMA,GAAOJ,GAClB31C,KAAK61C,IAAMA,GAAOF,EACpB,CAEApvC,QAAAA,GACE,MAAMwvC,EAAM/1C,KAAK+1C,IAAInrB,UAAY5qB,KAAK+1C,IAAInrB,SAAW5qB,KAAK4qB,SAAW,IAAI5qB,KAAK+1C,OAAS/1C,KAAK+1C,IACtFF,EAAM71C,KAAK61C,IAAIjrB,UAAY5qB,KAAK61C,IAAIjrB,SAAW5qB,KAAK4qB,SAAW,IAAI5qB,KAAK61C,OAAS71C,KAAK61C,IAC5F,MAAO,GAAGE,KAAO/1C,KAAKqR,WAAWwkC,GACnC,CAEAhB,MAAAA,GACE,MAAO,CAAC70C,KAAKusB,KAAMvsB,KAAK+1C,IAAIlB,SAAU70C,KAAK61C,IAAIhB,SACjD,EAGFiB,GAAc3pC,UAAUye,SAAW,IC9BnC,MAAMorB,GAAW,CAAC,EAMlB,SAASC,GAAe1pB,EAAM2pB,GAC5B,MAAM7kC,EAAUkb,EAAK7kB,cACrBwuC,EAAc/pC,UAAUkF,QAAUA,EAClC6kC,EAAc/pC,UAAUogB,KAAOA,EAE/B,MAAM7sB,EAAW,mBAAAkX,EAAA5K,UAAAxL,OAAIqL,EAAI,IAAAjC,MAAAgN,GAAA0V,EAAA,EAAAA,EAAA1V,EAAA0V,IAAJzgB,EAAIygB,GAAAtgB,UAAAsgB,GAAA,OAAK,IAAI4pB,KAAiBrqC,EAAK,EAIxD,OAHAnM,EAAQw2C,cAAgBA,EACxBF,GAAS3kC,GAAW3R,EAEbw2C,CACT,CAEAD,GAAe,SAAU,cAA6Bb,GACpDI,YAAAA,CAAa5hB,GACX,OAAO5zB,KAAKqH,KAAKytC,SAASlhB,EAAKgO,OACjC,IAGFqU,GAAe,OAAQ,cAA2BZ,GAChDG,YAAAA,CAAa5hB,GACX,OAAO5zB,KAAKqH,KAAKytC,SAASlhB,EAAKrH,KACjC,IAGF0pB,GAAe,SAAU,cAA6BZ,GACpDG,YAAAA,CAAa5hB,GACX,OAAO5zB,KAAKqH,KAAKytC,SAASjqC,OAAOyS,aAAasW,EAAKtI,UACrD,IAGF2qB,GAAe,OAAQ,cAA2BZ,GAChDG,YAAAA,CAAa5hB,GACX,OAAO5zB,KAAKqH,KAAKytC,SAASlhB,EAAK5T,QAAQuM,KACzC,IAGF0pB,GAAe,UAAW,cAA8BZ,GACtDG,YAAAA,CAAa5hB,GACX,OAAO5zB,KAAKqH,KAAKytC,SAASlhB,EAAK6N,QAAQyD,MAAM+E,MAC/C,IAGFgM,GAAe,WAAY,cAA+Bb,GACxDI,YAAAA,CAAa5hB,GACX,OAAO5zB,KAAKqH,KAAKytC,SAASlhB,EAAK6N,QAAQuB,UACzC,IAGFiT,GAAe,QAAS,cAA4BZ,GAClD/hC,WAAAA,CAAYorB,GACVhS,MAAMgS,GAAK,EACb,CAEA8W,YAAAA,CAAa5hB,GACX,OAAO5zB,KAAKqH,KAAKytC,SAASlhB,EAAK6N,QAAQyG,OACzC,IAGF+N,GAAe,SAAU,cAA6Bb,GACpDI,YAAAA,CAAa5hB,GACX,OAAO5zB,KAAKqH,KAAKytC,SAASlhB,EAAK6N,QAAQrZ,OACzC,IAGF6tB,GAAe,QAAS,cAA4BZ,GAClD/hC,WAAAA,CAAYorB,GACVhS,MAAMgS,GAAK,EACb,CAEA8W,YAAAA,CAAa5hB,GACX,OAAO5zB,KAAKqH,KAAKytC,SAASlhB,EAAK6N,QAAQqB,OAAOmH,MAChD,IAGFgM,GAAe,SAAU,cAA6Bf,GACpDM,YAAAA,CAAa5hB,GACX,OAAOA,EAAK+N,GACd,IAGFsU,GAAe,SAAU,cAA6Bf,GACpDM,YAAAA,CAAa5hB,GACX,OAAQA,EAAKwO,MAAQZ,GAAKa,MAAMa,aAAe1B,GAAKa,MAAMC,QAC5D,IAGF2T,GAAe,YAAa,cAAgCf,GAC1DM,YAAAA,CAAa5hB,GACX,OAAQA,EAAKwO,MAAQZ,GAAKa,MAAMa,aAAe1B,GAAKa,MAAMa,SAC5D,IAGF+S,GAAe,MAAOP,IAEtBO,GAAe,OAAQV,IAEvB,MAAMY,GAAgBH,GAASL,OAM/B,SAASS,GAAe7pB,EAAM3B,EAAUyrB,GAEtC,OADAA,EAAclqC,UAAUye,SAAWA,EAC5BqrB,GAAe1pB,EAAM8pB,EAC9B,CAuBA,SAASC,GAAkBlH,EAAM7iB,GAC/B,OAAO0pB,GAAe1pB,EAAM,cAAc2oB,GACxCM,YAAAA,CAAa5hB,GACX,OAA6C,IAArCA,EAAK6N,QAAQyD,MAAM9C,MAAQgN,EACrC,GAEJ,CA5BAgH,GAAe,MAAO,EAAG,cAA0BR,GACjDJ,YAAAA,CAAa5hB,GACX,OAAQ5zB,KAAK61C,IAAIL,aAAa5hB,EAChC,IAGFwiB,GAAe,MAAO,EAAG,cAA0BN,GACjDN,YAAAA,CAAa5hB,GACX,OAAO5zB,KAAK+1C,IAAIP,aAAa5hB,IAAS5zB,KAAK61C,IAAIL,aAAa5hB,EAC9D,IAGFwiB,GAAe,KAAM,EAAG,cAAyBN,GAC/CN,YAAAA,CAAa5hB,GACX,OAAO5zB,KAAK+1C,IAAIP,aAAa5hB,IAAS5zB,KAAK61C,IAAIL,aAAa5hB,EAC9D,IAeF0iB,GAAkBnK,GAAY9J,MAAMmM,QAAS,WAC7C8H,GAAkBnK,GAAY9J,MAAMoM,MAAO,SAC3C6H,GAAkBnK,GAAY9J,MAAMqM,OAAQ,UAC5C4H,GAAkBnK,GAAY9J,MAAMoM,MAAQtC,GAAY9J,MAAMqM,OAAQ,WACtE4H,GAAkBnK,GAAY9J,MAAMsM,MAAO,SAC3C2H,GAAkBnK,GAAY9J,MAAMuM,SAAU,YAC9C0H,GAAkBnK,GAAY9J,MAAMmC,SAAU,YAC9C8R,GAAkBnK,GAAY9J,MAAMwM,QAAS,WAC7CyH,GAAkBnK,GAAY9J,MAAMyM,OAAQ,UAC5CwH,GAAkBnK,GAAY9J,MAAM0M,WAAY,cAChDuH,GAAkBnK,GAAY9J,MAAM6M,MAAO,SAG3C,MAAMqH,GAAYpsC,OAAOC,OAAO4rC,IAEhCO,GAAUrB,SAAWA,GACrBqB,GAAUnB,kBAAoBA,GAC9BmB,GAAUlB,kBAAoBA,GAC9BkB,GAAU/kC,MH1KV,MACE8B,WAAAA,CAAYoB,EAAKD,GACfzU,KAAK0U,IAAMA,EACX1U,KAAKyU,SAAqB,IAARA,EAAsBC,EAAMD,CAChD,CAEAqgC,QAAAA,CAAS7rB,GACP,OAAOjpB,KAAK0U,KAAOuU,GAASA,GAASjpB,KAAKyU,GAC5C,CAEAlO,QAAAA,GACE,MAAM,IAAEmO,EAAG,IAAED,GAAQzU,KACrB,OAAO0U,IAAQD,EAAM5J,OAAO6J,GAAO,CAACA,EAAKD,GAAK9G,KAAK,IACrD,CAEAknC,MAAAA,GACE,MAAO,CAAC70C,KAAK0U,IAAK1U,KAAKyU,IACzB,GG0JF8hC,GAAUhlC,UAAYA,GACtBglC,GAAU9kC,UAAYA,GACtB8kC,GAAUX,eAAiBA,GAC3BW,GAAUT,cAAgBA,GAC1BS,GAAUhvC,QAAU4C,OAAOC,OAAO,CAAC,GAEnCmsC,GAAUjlC,YAAc,SAAUrH,GAChC,IAAKssC,GAAUhvC,QAAQ6E,eAAenC,GAAM,CAE1C,KADY,CAAE0gB,QAAS,YAAY1gB,sBAErC,CACA,OAAOssC,GAAUhvC,QAAQ0C,IAAQksC,EACnC,EAEAI,GAAUvwC,aAAe,WACvBmE,OAAOyP,KAAK28B,GAAUhvC,SAAS6U,SAAS/b,WAAek2C,GAAUhvC,QAAQlH,EAAE,GAC7E,EAEAk2C,GAAUllC,QAAU,SAAUpH,GAC5B,OAAO+rC,GAAS/rC,EAAIvC,gBAAkBsuC,GAASL,IACjD,EAEAY,GAAU3rC,MAAQ,SAAUK,GAC1B,MAAMqkB,EAAM,CAAC,EACb,IACEA,EAAIznB,SAAW1H,GAAAA,OAAOyK,MAAMK,EAC9B,CAAE,MAAO4N,GACPyW,EAAIznB,SAAWsuC,GACf7mB,EAAIlkB,MAAQyN,EAAE8R,OAChB,CACA,OAAO2E,CACT,EAEAnvB,GAAAA,OAAO8E,GAAKsxC,GACZp2C,GAAAA,OAAO8E,GAAG+F,WAAa7K,GAAAA,OAAO6K,WAE9B,YCrIA,SApEA,MACEsI,WAAAA,CAAYk8B,GACVxvC,KAAKyvC,SAAWD,EAChBxvC,KAAKw2C,UAAYD,GAAUllC,QAAQ,MAAlBklC,GACjBv2C,KAAKy2C,YAAc,CACjBC,YAAa,IAAIhL,EAAAA,KACjBiL,eAAgB,IAAIjL,EAAAA,OAExB,CAEAkL,iBAAAA,GACE,MAAM/O,EAAQ7nC,KAAKyvC,SAASrH,OACtB7/B,EAAIs/B,EAAMrnC,OACVqH,EAAW7H,KAAKw2C,WAEhB,YAAEE,GAAgB12C,KAAKy2C,YAE7B,GADAC,EAAYG,YACF,IAANtuC,EAAS,CACXmuC,EAAYI,cAAcjP,EAAM,GAAG1jB,UACnC,MAAM4yB,EAAM,IAAIrL,EAAAA,QAChBgL,EAAYM,UAAUD,GACtB,MAAMz/B,EAAI,EAAIuwB,EAAM,GAAG7nB,QAAQuD,OAC/BmzB,EAAYO,qBAAqBF,EAAK,IAAIrL,EAAAA,QAAcp0B,EAAGA,EAAGA,GAChE,MACE,IAAK,IAAIhP,EAAI,EAAGA,EAAIC,IAAKD,EACnBT,EAAS2tC,aAAa3N,EAAMv/B,KAC9BouC,EAAYI,cAAcjP,EAAMv/B,GAAG6b,UAMzC,IAAI+yB,EAAgB,EACpB,MAAMtuC,EAAS,IAAI8iC,EAAAA,QAEnB,GADAgL,EAAYM,UAAUpuC,GACZ,IAANL,EACFvI,KAAKy2C,YAAYE,eAAehwC,IAAIiC,EAAQi/B,EAAM,GAAG7nB,QAAQuD,YACxD,CACL,IAAK,IAAIjb,EAAI,EAAGA,EAAIC,IAAKD,EAAG,CAC1B,IAAKT,EAAS2tC,aAAa3N,EAAMv/B,IAC/B,SAEF,MAAM6uC,EAAMtP,EAAMv/B,GAAG6b,SACfizB,EAAgBxuC,EAAOyuC,kBAAkBF,GAC3CD,EAAgBE,IAClBF,EAAgBE,EAEpB,CACAp3C,KAAKy2C,YAAYE,eAAehwC,IAAIiC,EAAQH,KAAK6uC,KAAKJ,GACxD,CACF,CAEAK,aAAAA,GACE,MAAO,EACT,CAEAC,WAAAA,GACE,OAAOx3C,KAAKw2C,SACd,CAEAiB,aAAAA,GACE,OAAOz3C,KAAKy2C,WACd,CAEAiB,QAAAA,GACA,GCPF,SAxDA,cAAuBC,GACrBrkC,WAAAA,CAAYk8B,GACV9iB,MAAM8iB,GACNxvC,KAAK43C,OAAS,GACd53C,KAAK63C,SAAW,EAClB,CAEAjB,iBAAAA,GACElqB,MAAMkqB,oBAEN,MAAM,SAAEiB,GAAa73C,KACf83C,EAAY93C,KAAKy2C,YAAYE,eAAe/tC,OAC5CmvC,EAAS/3C,KAAKy2C,YAAYE,eAAepzB,OACzCmzB,EAAc12C,KAAKy2C,YAAYC,YAAc,IAAIhL,EAAAA,KACvDgL,EAAYG,YACZ,IAAK,IAAIvuC,EAAI,EAAGC,EAAIsvC,EAASr3C,OAAQ8H,EAAIC,IAAKD,EAC5CouC,EAAYI,cAAcgB,EAAU1R,QAAQ4R,aAAaH,EAASvvC,KAGpE,MAAM2vC,EAASvB,EAAYjiC,IAAI8wB,WAAWmR,EAAYhiC,KAAO,EAAIqjC,EAC3DnvC,EAAS,IAAI8iC,EAAAA,QACnBgL,EAAYM,UAAUpuC,GACtB5I,KAAKy2C,YAAYE,gBAAiB,IAAIjL,EAAAA,QAAe/kC,IAAIiC,EAAQqvC,GACjEvB,EAAYjiC,IAAIyjC,UAAUH,GAC1BrB,EAAYhiC,IAAIyjC,UAAUJ,EAC5B,CAMAK,QAAAA,CAAStQ,GACP9nC,KAAK43C,OAAO53C,KAAK43C,OAAOp3C,QAAUsnC,CACpC,CAMAuQ,SAAAA,CAAUC,GACRt4C,KAAK63C,SAAS73C,KAAK63C,SAASr3C,QAAU83C,CACxC,CAEAf,aAAAA,GACE,OAAOv3C,KAAK63C,QACd,CAEAH,QAAAA,GACM13C,KAAK43C,OAAOp3C,OAAS,EACvBR,KAAKw2C,UAAYD,GAAUllC,QAAQ,QAAlBklC,CAA2Bv2C,KAAK43C,QAEjD53C,KAAKw2C,UAAYD,GAAUllC,QAAQ,OAAlBklC,EAErB,GC8FF,SApJA,MACEjjC,WAAAA,CAAYk8B,GACVxvC,KAAKyvC,SAAWD,EAChBxvC,KAAKooB,QAAU,EACfpoB,KAAKu4C,gBAAkB,GACvBv4C,KAAKw4C,QAAU,GACfx4C,KAAKy4C,SAAW,GAChBz4C,KAAK04C,cAAgB,CACvB,CAEA3I,WAAAA,GACE,OAAO/vC,KAAKyvC,SAASC,SACvB,CAEAqB,eAAAA,GACE,OAAO/wC,KAAK04C,aACd,CAEA1H,cAAAA,CAAepO,GACb,MAAMqN,EAAWjwC,KAAKyvC,SAASC,UACzBiJ,EAAS34C,KAAKu4C,gBACpB,IAAK,IAAIK,EAAQ,EAAGC,EAAUF,EAAOn4C,OAAQo4C,EAAQC,IAAWD,EAC9D,IAAK,IAAItyB,EAAMqyB,EAAOC,GAAO1xB,MAAO4xB,EAAOH,EAAOC,GAAOpzB,IAAKc,GAAOwyB,IAAQxyB,EAC3Esc,EAAQqN,EAAS3pB,GAGvB,CAEAyyB,UAAAA,CAAWC,GACTh5C,KAAKy4C,SAAWO,EAChB,IAAI3I,EAAO,EACX,MAAMsI,EAAS,GACf,IAAIM,EAAS,EACb,IAAK,IAAI3wC,EAAI,EAAGC,EAAIywC,EAAQx4C,OAAQ8H,EAAIC,IAAKD,EAC3C,GAAIA,IAAMC,EAAI,GAAKywC,EAAQ1wC,GAAGkd,IAAM,IAAMwzB,EAAQ1wC,EAAI,GAAG4e,MAAO,CAC9D,MAAM,MAAEA,GAAU8xB,EAAQ3I,IACpB,IAAE7qB,GAAQwzB,EAAQ1wC,GACxBqwC,EAAOA,EAAOn4C,QAAU,CACtB0mB,QACA1B,OAEFyzB,GAAUzzB,EAAM0B,EAAQ,EACxBmpB,EAAO/nC,EAAI,CACb,CAGFtI,KAAKu4C,gBAAkBI,EACvB34C,KAAK04C,cAAgBO,CACvB,CAEAxP,UAAAA,GACE,OAAOzpC,KAAKyvC,QACd,CAEA9M,WAAAA,CAAYC,GACV,MAAMT,EAAQniC,KAAKyvC,SAASyJ,OAE5B,IAAK,IAAI5wC,EAAI,EAAGC,EAAI45B,EAAM3hC,OAAQ8H,EAAIC,IAAKD,EAAG,CAC5C,MAAMurB,EAAOsO,EAAM75B,GACfurB,EAAKiR,MAAMrD,QAAQwG,aAAejoC,MACpC4iC,EAAQ/O,EAEZ,CACF,CAEAxM,MAAAA,GACErnB,KAAKm5C,cAAcC,IACjBA,EAAM/xB,QAAQ,GAElB,CAEAsiB,WAAAA,CAAY/G,GACV5iC,KAAKgxC,gBAAgBvP,IACnBA,EAAQkI,YAAY/G,EAAQ,GAEhC,CAEAyW,QAAAA,CAASD,GACPp5C,KAAKw4C,QAAQhsC,KAAK4sC,EACpB,CAEAD,YAAAA,CAAavW,GACX,MAAM0W,EAASt5C,KAAKw4C,QACpB,IAAK,IAAIlwC,EAAI,EAAGC,EAAI+wC,EAAO94C,OAAQ8H,EAAIC,IAAKD,EAC1Cs6B,EAAQ0W,EAAOhxC,GAEnB,CAEAixC,YAAAA,GACE,MAAMhuC,EAAOvL,KACbuL,EAAKylC,gBAAgBvP,IACnBA,EAAQwG,WAAa18B,CAAI,GAE7B,CAEAiuC,gBAAAA,CAAiBzX,EAAMa,GACrB,MAAMqN,EAAWjwC,KAAKyvC,SAASC,UACzB+J,EAAOz5C,KAAKy4C,SAClB,IAAK,IAAInwC,EAAI,EAAGC,EAAIkxC,EAAKj5C,OAAQ8H,EAAIC,IAAKD,EACxC,IAAK,IAAIge,EAAMmzB,EAAKnxC,GAAG4e,MAAO4xB,EAAOW,EAAKnxC,GAAGkd,IAAKc,GAAOwyB,IAAQxyB,EAAK,CACpE,MAAMozB,EAAUzJ,EAAS3pB,GACzB,GAAIyb,EAAO2X,EAAQvR,OAASuR,EAAQ5Q,SAAU,CAC5C,IAAItjB,EAAMc,EAAM,EAChB,KAAOd,GAAOszB,IAAQtzB,EAAK,CACzB,MAAMm0B,EAAS1J,EAASzqB,GACxB,KAAMuc,EAAO4X,EAAOxR,OAASwR,EAAO7Q,UAClC,KAEJ,CACAlG,EAAQt6B,EAAGge,EAAKd,EAAM,GACtBc,EAAMd,CACR,CACF,CAEJ,CAEAo0B,kBAAAA,CAAmB7X,GACjB,MAAM0X,EAAO,GACb,IAAInzB,EAAM,EAKV,OAJAtmB,KAAKw5C,iBAAiBzX,GAAM,CAAC8X,EAAS3yB,EAAO1B,KAC3Ci0B,EAAKnzB,KAAS,CAAEY,QAAO1B,MAAK,IAGvBi0B,CACT,CAEAK,wBAAAA,CAAyB/X,GACvB,MAAM0X,EAAO,GACb,IAAIM,GAAW,EACXC,GAAc,EAClB,MAAMhB,EAAUh5C,KAAKy4C,SAcrB,OAZAz4C,KAAKw5C,iBAAiBzX,GAAM,CAACkY,EAAQ/yB,EAAO1B,KACtCw0B,IAAeC,MACfF,EACFN,EAAKM,GAAW,CACdtjC,IAAK,GACLyjC,WAAYlB,EAAQiB,IAEtBD,EAAaC,GAEfR,EAAKM,GAAStjC,IAAIgjC,EAAKM,GAAStjC,IAAIjW,QAAU,CAAE0mB,QAAO1B,MAAK,IAGvDi0B,CACT,GClFF,SA/DA,MACEnmC,WAAAA,CAAY6mC,GACVn6C,KAAKo6C,SAAW,EAChBp6C,KAAKq6C,YAAcF,EACnBn6C,KAAKs6C,UAAYj0C,EAAMmpB,cAAcvV,WAVjB,EAU6BkgC,GACjD,IAAK,IAAI7xC,EAAI,EAAGA,EAXI,EAWA6xC,EAAoC7xC,IACtDtI,KAAKs6C,UAAUhyC,IAVD,EAYhBtI,KAAKu6C,WAAal0C,EAAMmpB,cAAcvV,WAAYugC,UAClD,IAAK,IAAIlyC,EAAI,EAAGA,EAAIkyC,SAAuClyC,IACzDtI,KAAKu6C,WAAWjyC,IAdF,CAgBlB,CAKAmyC,OAAAA,GACEz6C,KAAKs6C,UAAY,KACjBt6C,KAAKu6C,WAAa,IACpB,CAOAG,OAAAA,CAAQC,EAAQC,GACd,MAAMC,EAAMF,EAASC,EAAUD,EAASC,EAClCE,EAAMH,EAASC,EAAUD,EAASC,EAClCG,EAAYF,GAAMC,GAnCL,IAsCnB,IAAIp/B,EAzCqB,IAwCPm/B,EAlCJ,MAkCUC,EAAoBN,SAExCQ,EAAM,EACV,KAAOA,EA3CkB,GA2CUA,IAAO,CACxC,MAAMhtB,EAAOhuB,KAAKu6C,WAAW7+B,EAAIs/B,GACjC,IAzCc,IAyCVhtB,EACF,MAEF,GAAIA,IAAS+sB,EACX,OAAO,CAEX,CAEA,GAAIC,GArDqB,GAsDvB,MAAM,IAAI3vC,MAAM,0CAKlB,GAHArL,KAAKu6C,WAAW7+B,EAAIs/B,GAAOD,EAGvB/6C,KAAKo6C,UAAYp6C,KAAKq6C,YACxB,MAAM,IAAIhvC,MAAM,+BAOlB,OALAqQ,EA5DoB,EA4DhB1b,KAAKo6C,SACTp6C,KAAKs6C,UAAU5+B,GAAKm/B,EACpB76C,KAAKs6C,UAAU5+B,EAAI,GAAKo/B,EACxB96C,KAAKs6C,UAAU5+B,EAAI,GAAKq/B,EACxB/6C,KAAKo6C,YACE,CACT,GCrDF,SAASa,GAAkBrnB,GACzB,MAAM,QAAE5T,GAAY4T,EACpB,GAAI5T,EACF,OAAOA,EAAQsjB,cAEjB,MAAM,IAAIj4B,MAAM,kCAClB,CAqLA,SAtKA,MACEiI,WAAAA,CAAYk8B,GACVxvC,KAAKyvC,SAAWD,EAChBxvC,KAAKk7C,QAAU,IACf,MAAMC,EAAOn7C,KAAKyvC,SAAS2L,uBAAuB1E,YAClD12C,KAAKq7C,SAAWF,EAAKzmC,IAAI0xB,QACzBpmC,KAAKs7C,SAAWH,EAAK1mC,IAAI2xB,QAEzBpmC,KAAKu7C,gBAAkB,IACzB,CAMAC,iBAAAA,GACE,MAAM3T,EAAQ7nC,KAAKyvC,SAASgM,WACtBC,EAAW7T,EAAMrnC,OACvB,IAAIm7C,EAAO,EACX,MAAMC,EAAa57C,KAAKu7C,gBAExB,KAAOI,EAAOD,EAAUC,IAAQ,CAC9B,MAAM,MAAExZ,GAAU0F,EAAM8T,GAClBE,EAAkB1Z,EAAM3hC,OAC9B,IAAK,IAAIs7C,EAAO,EAAGA,EAAOD,EAAiBC,IAAQ,CACjD,MAAMjoB,EAAOsO,EAAM2Z,GACLjoB,EAAKiR,MAAM10B,QACXurC,GACZC,EAAWlB,QAAQiB,EAAM9nB,EAAKkR,OAAO30B,MAEzC,CACF,CACA,OAAO,CACT,CAEA2rC,UAAAA,GACE,MAAMC,EAAKh8C,KAAKyvC,SAASwM,gBACzB,GAAW,OAAPD,EACF,OAGF,MAAMnU,EAAQ7nC,KAAKyvC,SAASrH,OACtB8T,EAAWrU,EAAMrnC,OACjB+K,EAAOvL,KAEb,IAAIm8C,EACAC,EACAC,EACAC,EACAC,EAEJ,MAAMC,EAAc,SAAUC,GAC5B,GAAIL,GAAeK,EAAMha,aACvB,OAGF,MAAMia,EAAYD,EAAMnxB,SACxB,GA1Fa,KA0FRgxB,GA1FQ,KA2FPI,GACAJ,IAAcI,EAClB,OAGF,MAAMC,EAAQN,EAAKhF,kBAAkBoF,EAAMt4B,UACrCy4B,EAAKH,EAAMz8B,QAAQsjB,cACnBuZ,EAAiCV,EAAKS,EAjG3B,IAmGbD,EAASE,EAAgBA,GAIzBF,EApGO,MAwGXpxC,EAAKgwC,gBAAgBb,QAAQ6B,EAAMnsC,MAAOqsC,EAAMrsC,MAClD,EAEA,IAAK,IAAI9H,EAAI,EAAGA,EAAI4zC,IAAY5zC,EAC9Bi0C,EAAQ1U,EAAMv/B,MA5FKsrB,EA6FE2oB,GA3FZ/Z,SAAY5O,EAAKuO,OAA+B,IAAtBvO,EAAKuO,MAAM3hC,UA+F9C27C,EAAKI,EAAMv8B,QAAQsjB,cACnB8Y,EAAcG,EAAM9Z,aACpB4Z,EAAOE,EAAMp4B,SACbm4B,EAAYC,EAAMjxB,SAElB0wB,EAAGc,wBAAwBT,EAAM,EAAIr8C,KAAKk7C,QAzHzB,IAyHmDsB,IAtG1E,IAAyB5oB,CAwGvB,CAEAmpB,SAAAA,GACE,MAAMlV,EAAQ7nC,KAAKyvC,SAASrH,OAE5B,IAAK,IAAI9/B,EAAI,EAAGjI,EAAI,EAAGiI,EAAItI,KAAKu7C,gBAAgBnB,SAAU9xC,IAAKjI,GAAK,EAAG,CACrE,MAAM28C,EAAKh9C,KAAKu7C,gBAAgBjB,UAAUj6C,GACpC48C,EAAKj9C,KAAKu7C,gBAAgBjB,UAAUj6C,EAAI,GAC9CL,KAAKk9C,SAASrV,EAAMmV,GAAKnV,EAAMoV,GACjC,CACF,CAEAC,QAAAA,CAASX,EAAOE,GACd,MAAMU,EAASZ,EAAMpa,MACfwY,EAAS4B,EAAMnsC,MACfwqC,EAAS6B,EAAMrsC,MACrB,IAAK,IAAIsL,EAAI,EAAG0hC,EAAWD,EAAO38C,OAAQkb,EAAI0hC,IAAY1hC,EAAG,CAC3D,MAAMmY,EAAOspB,EAAOzhC,GACpB,GAAImY,EAAKiR,MAAM10B,QAAUwqC,GAAU/mB,EAAKkR,OAAO30B,QAAUwqC,EACvD,MAEJ,CACA,MAAM32B,EAAO02B,EAASC,EAAS2B,EAAQE,EACjC9X,EAAQgW,EAASC,EAAS6B,EAAQF,EAClCc,EAAUr9C,KAAKyvC,SAAS6N,QAAQr5B,EAAM0gB,EAAO,EAAGD,GAAK4C,SAAShD,SAAS,GAC7E6Y,EAAO3wC,KAAK6wC,GACZZ,EAAMta,MAAM31B,KAAK6wC,EACnB,CAEAE,KAAAA,GAIEv9C,KAAKw9C,aAKP,CAEAA,WAAAA,GACE,MAAM3V,EAAQ7nC,KAAKyvC,SAASrH,OAC5B,KAAIP,EAAMrnC,OAAS,GAAnB,CAGA,GAAIqnC,EAAM,GAAGz3B,MAAQ,EACnB,MAAM,IAAI/E,MAAM,gDAGlBrL,KAAKy9C,mBACLz9C,KAAKu7C,gBAAkB,IAAImC,GA/KH,EA+Ka7V,EAAMrnC,QAC3CR,KAAKw7C,oBACLx7C,KAAK+7C,aACL/7C,KAAK+8C,WATL,CAUF,CAEAU,gBAAAA,GACE,MAAM5V,EAAQ7nC,KAAKyvC,SAASrH,OACtBuV,EAAS9V,EAAMrnC,OACrB,IAAIo9C,EAAS3C,GAAkBpT,EAAM,IACrC,IAAK,IAAIv/B,EAAI,EAAGA,EAAIq1C,IAAUr1C,EAC5Bs1C,EAASn1C,KAAKgM,IAAImpC,EAAQ3C,GAAkBpT,EAAMv/B,KAEpDtI,KAAKs7C,SAASpD,UAAU0F,GACxB59C,KAAKq7C,SAASnD,WAAW0F,GACzB59C,KAAKk7C,QAAmB,IAAT0C,CACjB,CAEAnD,OAAAA,GACMz6C,KAAKu7C,iBACPv7C,KAAKu7C,gBAAgBd,SAEzB,GCpMIoD,GAAgBnZ,GAAK4C,SAAS9C,SAC9BsZ,GAAiB,CACrB3a,GAAQgB,OAAOrpB,EAAEyP,OACjB4Y,GAAQgB,OAAO9oB,EAAEkP,QAWbwzB,GAAiB,WACrB,MAAMC,EAAQ,IAAItS,EAAAA,QACZuS,EAAQ,IAAIvS,EAAAA,QACZwS,EAAK,IAAIxS,EAAAA,QACf,OAAO,SAAUyS,EAAIC,GAInB,OAHAJ,EAAMvmC,KAAK0mC,GAAI9W,YACf4W,EAAMxmC,KAAK2mC,GAAI/W,YACf6W,EAAG/W,aAAa6W,EAAOC,KACnBC,EAAG19C,SAvBU,KA2BVw9C,EAAMzX,IAAI0X,IAAU,CAC7B,CACF,CAduB,GAgBvB,SAASI,GAAiB5nC,EAAKvM,GAC7B,IAAIoc,EAAM,EACV,KAAOA,EAAM7P,EAAIjW,QAAUiW,EAAI6P,GAAOpc,KAClCoc,EAEJ7P,EAAIm+B,OAAOtuB,EAAK,EAAGpc,EACrB,CAEA,SAASo0C,GAAazqB,EAAM4R,GAC1B,OAAO5R,EAAKiR,QAAUW,EAAW5R,EAAKkR,OAASlR,EAAKiR,KACtD,CAOA,SAASyZ,GAAc1qB,GACrBA,EAAKqR,MAAQ2Y,EACf,CAEA,MAAMW,GACJlrC,WAAAA,CAAYmrC,GACVz+C,KAAK6nC,MAAQ4W,EACbz+C,KAAKqnB,QACP,CAEAA,MAAAA,GACE,MAAM,MAAEwgB,GAAU7nC,KACZ4I,EAAS,IAAI8iC,EAAAA,QACbgT,EAAK7W,EAAMrnC,OACjB,IAAK,IAAIkb,EAAI,EAAGA,EAAIgjC,IAAMhjC,EACxB9S,EAAOa,IAAIo+B,EAAMnsB,GAAGyI,UAEtBvb,EAAO+9B,eAAe,EAAM+X,GAC5B1+C,KAAK4I,OAASA,EACd5I,KAAKujB,OAAS3a,EAAO28B,WAAWsC,EAAM,GAAG1jB,SAASiiB,QAAQuF,KAAK9D,EAAM,GAAG1jB,SAAU,IACpF,CAEAwe,WAAAA,CAAYC,GACV,MAAM,MAAEiF,GAAU7nC,KACZ0+C,EAAK7W,EAAMrnC,OACjB,IACIm+C,EADAlZ,EAAWoC,EAAM,GAGrB,SAAS+W,EAAU/qB,GACbA,EAAKiR,QAAU6Z,GAAY9qB,EAAKkR,SAAW4Z,GAC7C/b,EAAQ/O,EAEZ,CAEA,IAAK,IAAIvrB,EAAI,EAAGA,EAAIo2C,IAAMp2C,EACxBq2C,EAAW9W,GAAOv/B,EAAI,GAAKo2C,GAC3BjZ,EAAS9C,YAAYic,GACrBnZ,EAAWkZ,CAEf,EAGF,SAASE,GAAYhrB,GACnB,OAAOA,EAAKqR,QAAU2Y,EACxB,CAEA,SAASiB,GAAoBjrB,GAC3B,GAAIA,EAAK/qB,OAAS+0C,GAChB,OAAO,EAET,MAAMkB,EAAWjB,GAAe7/B,QAAQ4V,EAAKkR,OAAO/kB,QAAQuK,QACtDy0B,EAAUlB,GAAe7/B,QAAQ4V,EAAKiR,MAAM9kB,QAAQuK,QAC1D,OAAqB,IAAdw0B,IAAgC,IAAbC,CAC5B,CAEA,SAASC,GAAkB7F,GACzB,OAAOA,EAAM54C,OAAS,CACxB,CAEA,SAAS0+C,GAAmB9F,GAE1B,OAAO,CACT,CAwIA,SAtIA,MACE9lC,WAAAA,CAAYk8B,GACVxvC,KAAKyvC,SAAWD,EAChB,MAAM2P,EAAY,IAAIv1C,MAAM4lC,EAAQ0J,OAAO14C,QACrC4+C,EAAY,IAAIx1C,MAAM4lC,EAAQ0J,OAAO14C,QAC3C,IAAK,IAAI8H,EAAI,EAAGC,EAAI42C,EAAU3+C,OAAQ8H,EAAIC,IAAKD,EAC7C62C,EAAU72C,GAAK,GACf82C,EAAU92C,IAAK,EAEjBtI,KAAKq/C,WAAaF,EAClBn/C,KAAKs/C,WAAaF,EAClBp/C,KAAKu/C,cACP,CAEAA,YAAAA,GACEv/C,KAAKw4C,QAAU,GACfx4C,KAAKw/C,UAAY,CACnB,CAEAC,cAAAA,CAAeN,EAAWO,EAAOC,GAC/B,MAAMC,EAAOT,EAAUO,EAAMt3B,QACvBy3B,EAAOV,EAAUQ,EAAMv3B,QACvB03B,EAAKF,EAAKp/C,OACVu/C,EAAKF,EAAKr/C,OAChB,IAAIw/C,EAAK,EACLC,EAAK,EACT,KAAOD,EAAKF,GAAMG,EAAKF,GAAI,CACzB,GAAIH,EAAKI,KAAQH,EAAKI,GACpB,OAAO,EAELL,EAAKI,GAAMH,EAAKI,KAChBA,IAEAD,CAEN,CACA,OAAO,CACT,CAEAE,QAAAA,CAASC,EAAUC,EAAWra,GAC5B,MAAMsa,EAAa,GACblB,EAAYn/C,KAAKq/C,WACjBiB,EAAWhC,GAAa6B,EAAUC,GAClCG,EAAUH,EAAUj8B,SAASiiB,QAAQE,IAAIga,EAASn8B,UAClDq8B,EAAexgD,KAAKygD,WACpBl1C,EAAOvL,KACPo/C,EAAYp/C,KAAKs/C,WACvB,IAAIoB,EAAgB1gD,KAAK2gD,WACzBvB,EAAUe,EAAS/3B,SAAU,EAC7Bs4B,OAAkC99B,IAAlB89B,EAA8B7B,GAAc6B,EAC5DN,EAAUzd,aAAa0a,IACrB,IAAKqD,EAAcrD,IACdA,IAAY8C,GACZf,EAAU/B,EAAQj1B,SAClB7c,EAAKk0C,eAAeN,EAAWgB,EAAU9C,GAC5C,OAEF,MAAMuD,EAActC,GAAajB,EAAS+C,GACpCS,EAAaD,EAAYz8B,SAASiiB,QAAQE,IAAI8Z,EAAUj8B,UACxDja,EAAM02C,IAAgBJ,GAAgB,EAAM,EAhIxD,SAAqBrC,EAAIC,GACvB,MAAM0C,EAAQ3C,EAAG5X,IAAI6X,GAAO31C,KAAK6uC,KAAK6G,EAAG/W,WAAagX,EAAGhX,YACzD,OAAOsE,EAAAA,UAAgB32B,MAAM+rC,GAAQ,EAAG,EAC1C,CA6H4DC,CAAYR,EAASM,GACrEG,EAASH,EAAWI,MAAMV,GAChC,IAAKxC,GAAciD,EAAQjb,GACzB,OAEF,IAAIzf,EAAM,EACV,KAAOA,EAAM+5B,EAAW7/C,QAAU6/C,EAAW/5B,GAAKpc,IAAMA,KACpDoc,EAEJ+5B,EAAWzL,OAAOtuB,EAAK,EAAG,CAAEuN,KAAMwpB,EAASnzC,MAAKg3C,IAAKF,GAAS,IAGhE,IAAK,IAAI14C,EAAI,EAAGC,EAAI83C,EAAW7/C,OAAQ8H,EAAIC,IAAKD,EAAG,CACjD,MAAM,KAAEurB,GAASwsB,EAAW/3C,GACtB64C,EAAWttB,EAAKiR,QAAUsb,EAAYvsB,EAAKkR,OAASlR,EAAKiR,MAC/D,GAAIqc,IAAaX,EAIf,QAHExgD,KAAKw/C,SACPx/C,KAAKw4C,QAAQhsC,KAAK,CAAC4zC,IACnBhB,EAAUe,EAAS/3B,SAAU,GACtB,EAET,GAAIpoB,KAAKkgD,SAASrsB,EAAMstB,EAAUd,EAAW/3C,GAAG44C,KAI9C,OAHA7C,GAAiBc,EAAUtrB,EAAKzL,QAASpoB,KAAKw/C,UAC9Cx/C,KAAKw4C,QAAQx4C,KAAKw/C,UAAUhzC,KAAK4zC,GACjChB,EAAUe,EAAS/3B,SAAU,GACtB,CAEX,CAEA,OADAg3B,EAAUe,EAAS/3B,SAAU,GACtB,CACT,CAEAg5B,WAAAA,CAAYvtB,GAEV7zB,KAAKygD,WAAa5sB,EAAKiR,MACnB9kC,KAAKkgD,SAASrsB,EAAMA,EAAKkR,OAAQ,IAAI2G,EAAAA,WACvC2S,GAAiBr+C,KAAKq/C,WAAWxrB,EAAKzL,QAASpoB,KAAKw/C,UACpDx/C,KAAKw4C,QAAQx4C,KAAKw/C,UAAUhzC,KAAKqnB,EAAKiR,OAE1C,CAEAuc,UAAAA,CAAWzC,EAAW0C,GACpBthD,KAAK2gD,WAAa/B,EAClB,MAAMpP,EAAUxvC,KAAKyvC,SACflkC,EAAOvL,KAEbwvC,EAAQ+R,kBAAkBC,IACxBj2C,EAAKg0C,eACLiC,EAAU7e,aAAa9O,IACjB+qB,EAAU/qB,IACZtoB,EAAK61C,YAAYvtB,EACnB,IAEF,MAAMylB,EAAS/tC,EAAKitC,QACpB,IAAK,IAAIlwC,EAAI,EAAGC,EAAI+wC,EAAO94C,OAAQ8H,EAAIC,IAAKD,EAAG,CAC7C,MAAM8wC,EAAQE,EAAOhxC,GACrB,IAAKg5C,EAAWlI,GACd,SAEF,MAAMqI,EAAW,IAAIjD,GAAMpF,GAC3BqI,EAAS9e,YAAY4b,IACrBiD,EAAUnI,SAASoI,EACrB,IAEJ,CAEAC,UAAAA,GACE1hD,KAAKqhD,WAAWxC,GAAaI,GAC/B,CAEA0C,YAAAA,GACE3hD,KAAKqhD,WAAWvC,GAAqBI,GACvC,GC5OF,SAAS0C,GAA2Bh5C,EAAQ2a,EAAQs+B,EAAMC,GACxD,MAAMC,EAAQF,EAAOj5C,EAAOkT,EACtBkmC,EAAQF,EAAOl5C,EAAOkT,EACtBmmC,EAAQx5C,KAAK6uC,KAAK7uC,KAAKgM,IAAI8O,EAASA,EAASw+B,EAAQA,EAAO,IAC5DG,EAAQz5C,KAAK6uC,KAAK7uC,KAAKgM,IAAI8O,EAASA,EAASy+B,EAAQA,EAAO,IAE5DG,EAAO15C,KAAKiM,IAAIutC,EAAOC,GAC7B,IAAIE,EASJ,OALEA,EAFEP,GAAQj5C,EAAOkT,GAAKgmC,GAAQl5C,EAAOkT,EAE9ByH,EAEA9a,KAAKgM,IAAIwtC,EAAOC,GAGlB,CAACC,EAAMC,EAChB,CAcA,SAASC,GAA2Bz5C,EAAQ2a,EAAQ++B,EAAMC,GACxD,MAAMC,EAAQF,EAAO15C,EAAO6R,EACtBgoC,EAAQF,EAAO35C,EAAO6R,EACtBioC,EAAQj6C,KAAK6uC,KAAK7uC,KAAKgM,IAAI8O,EAASA,EAASi/B,EAAQA,EAAO,IAC5DG,EAAQl6C,KAAK6uC,KAAK7uC,KAAKgM,IAAI8O,EAASA,EAASk/B,EAAQA,EAAO,IAE5DN,EAAO15C,KAAKiM,IAAIguC,EAAOC,GAC7B,IAAIP,EASJ,OALEA,EAFEE,GAAQ15C,EAAO6R,GAAK8nC,GAAQ35C,EAAO6R,EAE9B8I,EAEA9a,KAAKgM,IAAIiuC,EAAOC,GAGlB,CAACR,EAAMC,EAChB,CAQA,MAAMQ,GACJtvC,WAAAA,CAAYuvC,EAAKC,GACf9iD,KAAK+iD,KAAOF,EAAIzc,QAChB,MAAM1W,EAAO,IAAIgc,EAAAA,QACjBmX,EAAIG,QAAQtzB,GACZ1vB,KAAKsoB,OAASoH,EAAK0W,QAAQ6c,OAAOH,GAAeltC,QAAQnB,IAAI,IAAIi3B,EAAAA,QAAc,EAAG,EAAG,IACrF1rC,KAAKkjD,MAAQljD,KAAKsoB,OAAO8d,QAAQ+R,UAAU,GAC3Cn4C,KAAKmjD,UAAYzzB,EAAK0W,QAAQ6c,OAAOjjD,KAAKsoB,QAC1CtoB,KAAKojD,YAAc,GAAM36C,KAAKiM,IAAIjM,KAAKiM,IAAI1U,KAAKmjD,UAAUjtC,EAAGlW,KAAKmjD,UAAU1oC,GAAIza,KAAKmjD,UAAUrnC,GAC/F9b,KAAKqjD,YAAc,GAAM56C,KAAK6uC,KAAKt3C,KAAKmjD,UAAU5c,IAAIvmC,KAAKmjD,YAG3D,MAAMG,EAAYtjD,KAAKsoB,OAAOpS,EAAIlW,KAAKsoB,OAAO7N,EAAIza,KAAKsoB,OAAOxM,EAC9D9b,KAAKujD,QAAUl9C,EAAMmpB,cAAcvV,WAAYqpC,GAC/C,IAAK,IAAIh7C,EAAI,EAAGA,EAAIg7C,IAAah7C,EAC/BtI,KAAKujD,QAAQj7C,IAAM,EAKrBtI,KAAKooC,OAAS,EAChB,CAOAob,QAAAA,CAAShU,GACP,MAAMjkC,EAAOvL,KAEb,IAAIsmB,EAAMtmB,KAAKooC,OAAO5nC,OAGtBR,KAAKooC,OAAO5nC,QAAU,EAAIgvC,EAAQ9F,eAElC8F,EAAQ7F,aAAa/V,IAEnB,MAAM6vB,EAAWl4C,EAAKm4C,WAAW9vB,EAAKzP,UAGtC5Y,EAAK68B,OAAO9hB,GAAOsN,EACnBroB,EAAK68B,OAAO9hB,EAAM,GAAK/a,EAAKg4C,QAAQE,GACpCl4C,EAAKg4C,QAAQE,GAAYn9B,EAEzBA,GAAO,CAAC,GAEZ,CAQA2c,aAAe,SAAIyI,EAAAA,QAAc,EAAG,EAAG,GAAxB,GAEfzI,cAAgB,SAAIyI,EAAAA,QAAJ,GAEhBgY,UAAAA,CAAWC,GACT,MAAM1uC,EAAO2tC,GAAWgB,MAClBC,EAAQjB,GAAWkB,OAMzB,OALAD,EAAMpsC,KAAKksC,GACRrd,IAAItmC,KAAK+iD,KAAKruC,KACduuC,OAAOjjD,KAAKmjD,WACZvtC,QACAb,MAAME,EAAMjV,KAAKkjD,OACbW,EAAM3tC,EAAIlW,KAAKsoB,OAAOpS,GAAK2tC,EAAMppC,EAAIza,KAAKsoB,OAAO7N,EAAIopC,EAAM/nC,EACpE,CAQAioC,mBAAAA,CAAoBF,EAAOjhB,GACzB,IAAK,IAAIt6B,EAAItI,KAAKujD,QAAQM,GAAQv7C,GAAK,EAAGA,EAAItI,KAAKooC,OAAO9/B,EAAI,GAC5Ds6B,EAAQ5iC,KAAKooC,OAAO9/B,GAExB,CAWA26B,eAAiB,SAAIyI,EAAAA,QAAJ,GAEjBzI,eAAiB,SAAIyI,EAAAA,QAAJ,GAEjBzI,eAAiB,SAAIyI,EAAAA,QAAJ,GAEjBsY,yBAAAA,CAA0Bp7C,EAAQ2a,EAAQqf,GACxC,MAAMqhB,EAASrB,GAAWsB,QACpBC,EAASvB,GAAWwB,QACpBC,EAASzB,GAAW0B,QAG1B,GAAI/gC,EAASvjB,KAAKojD,YAAc,GAE9B,YADApjD,KAAKukD,gCAAgC37C,EAAQ2a,EAAQqf,GAIvD,IAAI4hB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEJV,EAAO19C,IAAIiC,EAAOkT,EAAIyH,EAAQ3a,EAAOkT,EAAIyH,GACzC8gC,EAAOlM,UAAUn4C,KAAK+iD,KAAKruC,IAAIoH,GAC5BkpC,aAAahlD,KAAKmjD,UAAUrnC,GAC5BlG,QACAqvC,YAAY,EAAGjlD,KAAKsoB,OAAOxM,EAAI,GAElC,IAAK,IAAIA,EAAIuoC,EAAOnuC,EAAG4F,GAAKuoC,EAAO5pC,IAAKqB,EAAG,CACzC8oC,EAAO,CAAC5kD,KAAK+iD,KAAKruC,IAAIoH,EAAIA,EAAI9b,KAAKmjD,UAAUrnC,EAC3C9b,KAAK+iD,KAAKruC,IAAIoH,GAAKA,EAAI,GAAK9b,KAAKmjD,UAAUrnC,GAE7CipC,EAAan8C,EAAOkT,EAAIyH,GAAUqhC,EAAK,IAAQA,EAAK,IAAMh8C,EAAOkT,EAAIyH,EAErEihC,EAAW5C,GAA2Bh5C,EAAQ2a,EAAQqhC,EAAK,GAAIA,EAAK,IAEpET,EAAOx9C,IAAIiC,EAAO6R,EAAI+pC,EAAS,GAAI57C,EAAO6R,EAAI+pC,EAAS,IACvDL,EAAOhM,UAAUn4C,KAAK+iD,KAAKruC,IAAI+F,GAC5BuqC,aAAahlD,KAAKmjD,UAAU1oC,GAC5B7E,QACAqvC,YAAY,EAAGjlD,KAAKsoB,OAAO7N,EAAI,GAElC,IAAK,IAAIA,EAAI0pC,EAAOjuC,EAAGuE,GAAK0pC,EAAO1pC,IAAKA,EAAG,CACzCkqC,EAAO,CAAC3kD,KAAK+iD,KAAKruC,IAAI+F,EAAIA,EAAIza,KAAKmjD,UAAU1oC,EAC3Cza,KAAK+iD,KAAKruC,IAAI+F,GAAKA,EAAI,GAAKza,KAAKmjD,UAAU1oC,GAE7CqqC,EAAal8C,EAAO6R,EAAI+pC,EAAS,IAAMG,EAAK,IAAQA,EAAK,IAAM/7C,EAAO6R,EAAI+pC,EAAS,GAEnFC,EAAUpC,GAA2Bz5C,EAAQ47C,EAAS,GAAIG,EAAK,GAAIA,EAAK,IAExEV,EAAOt9C,IAAIiC,EAAOsN,EAAIuuC,EAAQ,GAAI77C,EAAOsN,EAAIuuC,EAAQ,IACrDR,EAAO9L,UAAUn4C,KAAK+iD,KAAKruC,IAAIwB,GAC5B8uC,aAAahlD,KAAKmjD,UAAUjtC,GAC5BN,QACAqvC,YAAY,EAAGjlD,KAAKsoB,OAAOpS,EAAI,GAElC,IAAK,IAAI,EAAEA,GAAM+tC,EAAQ/tC,GAAK+tC,EAAOxpC,IAAKvE,EACxCwuC,EAAO,CAAC1kD,KAAK+iD,KAAKruC,IAAIwB,EAAIA,EAAIlW,KAAKmjD,UAAUjtC,EAC3ClW,KAAK+iD,KAAKruC,IAAIwB,GAAKA,EAAI,GAAKlW,KAAKmjD,UAAUjtC,GAC7C2uC,EAAaj8C,EAAOsN,EAAIuuC,EAAQ,IAAMC,EAAK,IAAQA,EAAK,IAAM97C,EAAOsN,EAAIuuC,EAAQ,GAEjF7hB,EAAQ1sB,EAAIlW,KAAKsoB,OAAOpS,GAAKuE,EAAIza,KAAKsoB,OAAO7N,EAAIqB,GAAI+oC,GAAaC,GAAaC,EAEnF,CACF,CACF,CAcA9hB,gBAAkB,SAAIyI,EAAAA,QAAJ,GAElB6Y,+BAAAA,CAAgC37C,EAAQ2a,EAAQqf,GAC9C,MAAMqhB,EAASrB,GAAWsB,QACpBC,EAASvB,GAAWwB,QACpBC,EAASzB,GAAW0B,QACpBY,EAAUtC,GAAWuC,SAErBC,GAAc7hC,EAASvjB,KAAKqjD,cAAgB9/B,EAASvjB,KAAKqjD,aAChE,IAAIgC,GAAe,EACf9hC,EAASvjB,KAAKqjD,cAChBgC,GAAe9hC,EAASvjB,KAAKqjD,cAAgB9/B,EAASvjB,KAAKqjD,cAI7DY,EAAOt9C,IAAIiC,EAAOsN,EAAIqN,EAAQ3a,EAAOsN,EAAIqN,GACzC0gC,EAAO9L,UAAUn4C,KAAK+iD,KAAKruC,IAAIwB,GAC5B8uC,aAAahlD,KAAKmjD,UAAUjtC,GAC5BN,QACHquC,EAAO/tC,EAAIzN,KAAKiM,IAAIjM,KAAKgM,IAAIwvC,EAAO/tC,EAAG,GAAIlW,KAAKsoB,OAAOpS,EAAI,GAC3D+tC,EAAOxpC,EAAIhS,KAAKiM,IAAIjM,KAAKgM,IAAIwvC,EAAOxpC,EAAG,GAAIza,KAAKsoB,OAAOpS,EAAI,GAE3DiuC,EAAOx9C,IAAIiC,EAAO6R,EAAI8I,EAAQ3a,EAAO6R,EAAI8I,GACzC4gC,EAAOhM,UAAUn4C,KAAK+iD,KAAKruC,IAAI+F,GAC5BuqC,aAAahlD,KAAKmjD,UAAU1oC,GAC5B7E,QACHuuC,EAAOjuC,EAAIzN,KAAKiM,IAAIjM,KAAKgM,IAAI0vC,EAAOjuC,EAAG,GAAIlW,KAAKsoB,OAAO7N,EAAI,GAC3D0pC,EAAO1pC,EAAIhS,KAAKiM,IAAIjM,KAAKgM,IAAI0vC,EAAO1pC,EAAG,GAAIza,KAAKsoB,OAAO7N,EAAI,GAE3D4pC,EAAO19C,IAAIiC,EAAOkT,EAAIyH,EAAQ3a,EAAOkT,EAAIyH,GACzC8gC,EAAOlM,UAAUn4C,KAAK+iD,KAAKruC,IAAIoH,GAC5BkpC,aAAahlD,KAAKmjD,UAAUrnC,GAC5BlG,QACHyuC,EAAOnuC,EAAIzN,KAAKiM,IAAIjM,KAAKgM,IAAI4vC,EAAOnuC,EAAG,GAAIlW,KAAKsoB,OAAOxM,EAAI,GAC3DuoC,EAAO5pC,EAAIhS,KAAKiM,IAAIjM,KAAKgM,IAAI4vC,EAAO5pC,EAAG,GAAIza,KAAKsoB,OAAOxM,EAAI,GAE3D,IAAK,IAAIA,EAAIuoC,EAAOnuC,EAAG4F,GAAKuoC,EAAO5pC,IAAKqB,EAAG,CACzC,MAAM8oC,EAAO,CAAC5kD,KAAK+iD,KAAKruC,IAAIoH,EAAIA,EAAI9b,KAAKmjD,UAAUrnC,EACjD9b,KAAK+iD,KAAKruC,IAAIoH,GAAKA,EAAI,GAAK9b,KAAKmjD,UAAUrnC,GAC7CopC,EAAQppC,EAAI,IAAO8oC,EAAK,GAAKA,EAAK,IAElC,IAAK,IAAInqC,EAAI0pC,EAAOjuC,EAAGuE,GAAK0pC,EAAO1pC,IAAKA,EAAG,CACzC,MAAMkqC,EAAO,CAAC3kD,KAAK+iD,KAAKruC,IAAI+F,EAAIA,EAAIza,KAAKmjD,UAAU1oC,EACjDza,KAAK+iD,KAAKruC,IAAI+F,GAAKA,EAAI,GAAKza,KAAKmjD,UAAU1oC,GAC7CyqC,EAAQzqC,EAAI,IAAOkqC,EAAK,GAAKA,EAAK,IAElC,IAAK,IAAI,EAAEzuC,GAAM+tC,EAAQ/tC,GAAK+tC,EAAOxpC,IAAKvE,EAAG,CAC3C,MAAMwuC,EAAO,CAAC1kD,KAAK+iD,KAAKruC,IAAIwB,EAAIA,EAAIlW,KAAKmjD,UAAUjtC,EACjDlW,KAAK+iD,KAAKruC,IAAIwB,GAAKA,EAAI,GAAKlW,KAAKmjD,UAAUjtC,GAC7CgvC,EAAQhvC,EAAI,IAAOwuC,EAAK,GAAKA,EAAK,IAElC,MAAMY,EAAK18C,EAAOyuC,kBAAkB6N,GAChCI,GAAMF,GACRxiB,EAAQ1sB,EAAIlW,KAAKsoB,OAAOpS,GAAKuE,EAAIza,KAAKsoB,OAAO7N,EAAIqB,GAAIwpC,GAAMD,EAE/D,CACF,CACF,CACF,CASAvI,uBAAAA,CAAwBl0C,EAAQ2a,EAAQqf,GACtC,MAAMr3B,EAAOvL,KACPulD,EAAKhiC,EAASA,EAEpBhY,EAAKy4C,0BAA0Bp7C,EAAQ2a,GAAQ,CAACsgC,EAAO2B,KACjDA,EACFj6C,EAAKw4C,oBAAoBF,EAAOjhB,GAEhCr3B,EAAKw4C,oBAAoBF,GAAQjwB,IAC3BhrB,EAAOyuC,kBAAkBzjB,EAAKzP,WAAaohC,GAC7C3iB,EAAQhP,EACV,GAEJ,GAEJ,CAUA6xB,+BAAAA,CAAgCjW,EAASzN,EAAM2jB,EAAM9iB,GACnD5iC,KAAK2lD,iCAAiCC,IACpCpW,EAAQ7F,aAAa/V,IACQ,IAAtBA,EAAKmO,KAAOA,IACf6jB,EAAShyB,EACX,GACA,GACD8xB,EAAM9iB,EACX,CAUAijB,iCAAAA,CAAkCrW,EAAS3nC,EAAU69C,EAAM9iB,GACzD5iC,KAAK2lD,iCAAiCC,IACpCpW,EAAQ7F,aAAa/V,IACf/rB,EAAS2tC,aAAa5hB,IACxBgyB,EAAShyB,EACX,GACA,GACD8xB,EAAM9iB,EACX,CASA+iB,+BAAAA,CAAgChc,EAAa+b,EAAM9iB,GACjD,MAAMr3B,EAAOvL,KACPulD,EAAKG,EAAOA,EAEZI,EAAS,GACTje,EAAQ,GACd,IAwBIgc,EAxBAv9B,EAAM,EAGVqjB,GAAa/V,IACXroB,EAAKy4C,0BAA0BpwB,EAAKzP,SAAUuhC,GAAM,CAAC7B,EAAO2B,KACtDA,EAEFM,EAAOjC,IAAU,OACiB,IAAlBiC,EAAOjC,IAEvBhc,EAAMr7B,KAAKonB,GACXiU,EAAMr7B,MAAM,GACZs5C,EAAOjC,GAASv9B,EAChBA,GAAO,IACqB,IAAnBw/B,EAAOjC,KAEhBhc,EAAMr7B,KAAKonB,GACXiU,EAAMr7B,KAAKs5C,EAAOjC,IAClBiC,EAAOjC,GAASv9B,EAChBA,GAAO,EACT,GACA,IAKJ,MAAMy/B,EAAkB,SAAUnyB,GAChC,QAA6B,IAAlBkyB,EAAOjC,GAKlB,GADAv9B,EAAMw/B,EAAOjC,IACA,IAATv9B,GAOJ,KAAOA,GAAO,EAAGA,EAAMuhB,EAAMvhB,EAAM,GACjC,GAAIsN,EAAKzP,SAASkzB,kBAAkBxP,EAAMvhB,GAAKnC,UAAYohC,EAAI,CAC7D3iB,EAAQhP,GACR,KACF,OATAgP,EAAQhP,EAWZ,EAGA,IAAKiwB,KAASiC,EACRA,EAAO15C,eAAey3C,IACxBt4C,EAAKw4C,oBAAoBF,EAAOkC,EAGtC,EAGF,YC3aMC,GAAmB,GACnBC,IAAoB,IAEpBC,IAAqB,OAIZ,MAAMC,GACnB7yC,WAAAA,CAAYk8B,GACVxvC,KAAKyvC,SAAWD,EAChBxvC,KAAKomD,QAAU,GACXpmD,KAAKyvC,SAASC,UAAUlvC,OAND,IAOzBR,KAAKqmD,WAELrmD,KAAKsmD,QAET,CAEAC,MAAAA,CAAOC,EAAMC,GACX,GAAIzmD,KAAKomD,QAAQI,GAAO,CACtB,MAAOE,EAAMC,GAAQ3mD,KAAKomD,QAAQI,GAAMI,SACxC,GAAIF,GAAQA,EAAKjlB,UAAYglB,GAAMC,EAAKG,QAnBrB,GAoBjB,OAAO,EAET,GAAIF,GAAQA,EAAKllB,UAAYglB,GAAME,EAAKE,QAtBrB,GAuBjB,OAAO,CAEX,CACA,OAAO,CACT,CAEAP,MAAAA,GACE,MAAM/6C,EAAOvL,KAEb,IAAK,IAAIsI,EAAI,EAAGA,EAAItI,KAAKyvC,SAASC,UAAUlvC,OAAS,IAAK8H,EAAG,CAC3D,MAAMw+C,EAAK9mD,KAAKyvC,SAASC,UAAUpnC,GACnC,GAAyD,IAApDw+C,EAAGx0C,UAAU8vB,MAAQ+J,GAAY9J,MAAMmM,SAC1C,SAIF,IAAIuY,EAAQ,KACRz+C,EAAI,GAAMtI,KAAKyvC,SAASC,UAAUpnC,EAAI,GAAGgK,UAAU8vB,MAAQ+J,GAAY9J,MAAMmM,SAC5EsY,EAAG9jB,YAAchjC,KAAKyvC,SAASC,UAAUpnC,EAAI,GAAG06B,UAAY,IAC/D+jB,EAAQ/mD,KAAKyvC,SAASC,UAAUpnC,EAAI,IAGtC,IAAK,IAAIoT,EAAIpT,EAAI,EAAGoT,EAAI1b,KAAKyvC,SAASC,UAAUlvC,SAAUkb,EAAG,CAC3D,MAAMsrC,EAAKhnD,KAAKyvC,SAASC,UAAUh0B,GACnC,GAAyD,IAApDsrC,EAAG10C,UAAU8vB,MAAQ+J,GAAY9J,MAAMmM,SAC1C,SAIF,IAAIyY,EAAQ,KACPjnD,KAAKyvC,SAASC,UAAUh0B,EAAI,GAAGpJ,UAAU8vB,MAAQ+J,GAAY9J,MAAMmM,SACnEwY,EAAGhkB,YAAchjC,KAAKyvC,SAASC,UAAUh0B,EAAI,GAAGsnB,UAAY,IAC/DikB,EAAQjnD,KAAKyvC,SAASC,UAAUh0B,EAAI,IAGtCnQ,EAAK27C,iBAAiBH,EAAOD,EAAIE,GAC7BtrC,IAAMpT,EAAI,GACZiD,EAAK27C,iBAAiBD,EAAOD,EAAIF,EAErC,CACF,CACF,CAEAT,QAAAA,GACE,MAAM96C,EAAOvL,KACPiwC,EAAWjwC,KAAKyvC,SAASC,UAC/B,IAAIoX,EACAC,EAEJ,MAAM/K,EAAKh8C,KAAKyvC,SAASwM,gBACzB,GAAW,OAAPD,EACF,OAGF,MAAMmL,EAAQ,IAAIC,GAAepnD,KAAKyvC,SAASC,UAAUlvC,OAASR,KAAKyvC,SAASC,UAAUlvC,OAAS,GAEnG,SAASg8C,EAAY5oB,GACnB,MAAMozB,EAAKpzB,EAAK6N,QAEhB,GAAIulB,EAAG5+B,SAAW0+B,EAAG1+B,OACnB,OAGF,GAAyD,IAApD4+B,EAAG10C,UAAU8vB,MAAQ+J,GAAY9J,MAAMmM,SAC1C,OAGF,IAAK2Y,EAAMzM,QAAQoM,EAAG1+B,OAAQ4+B,EAAG5+B,QAE/B,OAIF,IAAI6+B,EAAQD,EAAG5+B,OAAS,EAAI6nB,EAAS+W,EAAG5+B,OAAS,GAAK,MAClD6+B,GAC0D,IAAvDA,EAAM30C,UAAU8vB,MAAQ+J,GAAY9J,MAAMmM,UAAkBwY,EAAGhkB,YAAcikB,EAAMjkB,UAAY,IACpGikB,EAAQ,MAGV17C,EAAK27C,iBAAiBH,EAAOD,EAAIE,GAC7BA,EAAG5+B,SAAW0+B,EAAG1+B,OAAS,GAC5B7c,EAAK27C,iBAAiBD,EAAOD,EAAIF,EAErC,CAEA,IAAK,IAAIx+C,EAAI,EAAGA,EAAI2nC,EAASzvC,OAAS,IAAK8H,EACzCw+C,EAAK7W,EAAS3nC,GAC2C,IAApDw+C,EAAGx0C,UAAU8vB,MAAQ+J,GAAY9J,MAAMmM,WAK5CuY,EAAQz+C,EAAI,EAAI2nC,EAAS3nC,EAAI,GAAK,MAC9By+C,GAC0D,IAAvDA,EAAMz0C,UAAU8vB,MAAQ+J,GAAY9J,MAAMmM,UAAkBsY,EAAG9jB,YAAc+jB,EAAM/jB,UAAY,IACpG+jB,EAAQ,MAGV/K,EAAGc,wBAAwB98C,KAAKqnD,kBAAkBP,GAvH1B,EAuHsDtK,GAElF,CAEA6K,iBAAAA,CAAkB/3B,GAChB,IAAK,IAAIhnB,EAAI,EAAGA,EAAIgnB,EAAI8Y,OAAO5nC,SAAU8H,EAAG,CAC1C,MAAM,KAAEikB,GAAS+C,EAAI8Y,OAAO9/B,GAC5B,GAAa,OAATikB,GACU,OAATA,EACH,OAAO+C,EAAI8Y,OAAO9/B,GAAG6b,QAEzB,CAEA,OAAO,IACT,CAEAmjC,aAAAA,CAAch4B,GACZ,IAAIxf,EAAI,KACJ1P,EAAI,KAUR,OARAkvB,EAAIqa,aAAaxzB,IACA,MAAXA,EAAEoW,KACJzc,EAAIqG,EAAEgO,SACc,MAAXhO,EAAEoW,OACXnsB,EAAI+V,EAAEgO,SACR,IAGK,CAACrU,EAAG1P,EACb,CAGAmnD,aAAAA,CAAclc,EAAM/b,GAClB,MAAOxf,EAAG1P,GAAKJ,KAAKsnD,cAAcjc,GAElC,IAAI9iC,EAOJ,GANA+mB,EAAIqa,aAAaxzB,IACA,MAAXA,EAAEoW,OACJhkB,EAAI4N,EAAEgO,SACR,IAGErU,GAAK1P,GAAKmI,EAAG,CAEf,MAAM+R,EAAIxK,EAAEs2B,QAKZ,OAJA9rB,EAAEgsB,IAAIlmC,GACNka,EAAEqsB,eAAe,EAAMrsB,EAAE9Z,UACzB8Z,EAAE7Q,IAAIlB,GAEC,CAACA,EAAG+R,EACb,CAEA,MAAO,CAAC,KAAM,KAChB,CAEA4sC,gBAAAA,CAAiBM,EAAUC,EAAOb,GAChC,IAAIn7B,EAAS,EAEb,GAAiB,OAAb+7B,EACF,OAAO/7B,EAGT,GAAkC,QAA9Bg8B,EAAMn1C,UAAUywB,UAAqB,CACvC,MAAOx6B,EAAG+R,GAAKta,KAAKunD,cAAcC,EAAUC,IACrC33C,EAAG1P,GAAKJ,KAAKsnD,cAAcV,GAElC,GAAU,OAANr+C,GAAoB,OAAN+R,GAAoB,OAANxK,GAAoB,OAAN1P,EAC5C,OAAOqrB,EAGT,MAAMi8B,EAAaptC,EAAEirB,WAAWnlC,GAC1BunD,EAAartC,EAAEirB,WAAWz1B,GAC1B83C,EAAar/C,EAAEg9B,WAAWz1B,GAC1B+3C,EAAat/C,EAAEg9B,WAAWnlC,GAI9BqrB,EAFEi8B,EAAa1B,IAAoB2B,EAAa3B,IAC3C4B,EAAa5B,IAAoB6B,EAAa7B,GAC1CC,GAEAC,GAAoBwB,EAAaxB,GAAoByB,EACnDzB,GAAoB0B,EAAa1B,GAAoB2B,EAIlEp8B,EAAShjB,KAAKkN,MAAe,IAAT8V,GAAiB,IAEjCA,EAASw6B,KACXx6B,EAASw6B,GAEb,MAG0C,IAA/BjmD,KAAKomD,QAAQqB,EAAMr/B,UAC5BpoB,KAAKomD,QAAQqB,EAAMr/B,QAAU,CAC3Bq/B,MAAO,GACPb,SAAU,KAGd,MAAMkB,EAAY9nD,KAAKomD,QAAQqB,EAAMr/B,QAEjC0/B,EAAUlB,SAASpmD,OAAS,GAC9BsnD,EAAUlB,SAASp6C,KAAK,CACtBi1B,QAASmlB,EAASx+B,OAClBy+B,OAAQp7B,IAIRq8B,EAAUlB,SAASpmD,OAAS,IAC1BirB,EAASq8B,EAAUlB,SAAS,GAAGC,QACjCiB,EAAUlB,SAAS,GAAGnlB,QAAUqmB,EAAUlB,SAAS,GAAGnlB,QACtDqmB,EAAUlB,SAAS,GAAGC,OAASiB,EAAUlB,SAAS,GAAGC,OACrDiB,EAAUlB,SAAS,GAAGnlB,QAAUmlB,EAASx+B,OACzC0/B,EAAUlB,SAAS,GAAGC,OAASp7B,GACtBA,EAASq8B,EAAUlB,SAAS,GAAGC,SACxCiB,EAAUlB,SAAS,GAAGnlB,QAAUmlB,EAASx+B,OACzC0/B,EAAUlB,SAAS,GAAGC,OAASp7B,SAKU,IAAlCzrB,KAAKomD,QAAQQ,EAASx+B,UAC/BpoB,KAAKomD,QAAQQ,EAASx+B,QAAU,CAC9Bq/B,MAAO,GACPb,SAAU,KAGd,MAAMmB,EAAU/nD,KAAKomD,QAAQQ,EAASx+B,QAqBtC,OAnBI2/B,EAAQN,MAAMjnD,OAAS,GACzBunD,EAAQN,MAAMj7C,KAAK,CACjBi1B,QAASgmB,EAAMr/B,OACfy+B,OAAQp7B,IAIRs8B,EAAQN,MAAMjnD,OAAS,IACrBirB,EAASs8B,EAAQN,MAAM,GAAGZ,QAC5BkB,EAAQN,MAAM,GAAGhmB,QAAUsmB,EAAQN,MAAM,GAAGhmB,QAC5CsmB,EAAQN,MAAM,GAAGZ,OAASkB,EAAQN,MAAM,GAAGZ,OAC3CkB,EAAQN,MAAM,GAAGhmB,QAAUgmB,EAAMr/B,OACjC2/B,EAAQN,MAAM,GAAGZ,OAASp7B,GACjBA,EAASs8B,EAAQN,MAAM,GAAGZ,SACnCkB,EAAQN,MAAM,GAAGhmB,QAAUgmB,EAAMr/B,OACjC2/B,EAAQN,MAAM,GAAGZ,OAASp7B,IAIvBA,CACT,EC/QF,MAAMu8B,GAAa79C,OAAO89C,OAAO,CAC/BC,UAAW,EACXC,SAAU,EACVC,cAAe,IAGXC,GAAYl+C,OAAO89C,OAAO,CAC9BK,MAAO,EACPC,OAAQ,EACRC,IAAK,EACLC,cAAe,IAGXC,GAAgBv+C,OAAO89C,OAAO,CAClCpW,OAAQ,IACRC,OAAQ,IACRC,UAAW,IACXC,YAAa,IACbC,SAAU,IACVK,KAAM,IACNC,KAAM,IACNG,KAAM,MAGO,MAAMiW,GACnBr1C,WAAAA,CAAYk8B,GACVxvC,KAAKyvC,SAAWD,EAChBxvC,KAAKsmD,QACP,CAEAA,MAAAA,GACE,MAAM/6C,EAAOvL,KACbA,KAAKomD,QAAU,IAAID,GAAUnmD,KAAKyvC,UAClCzvC,KAAK4oD,IAAM,GAGX5oD,KAAK6oD,OAAS,GACd7oD,KAAK8oD,cAAgB,GACrB9oD,KAAK+oD,MAAQ,GACb,IAAK,IAAIzgD,EAAI,EAAGA,EAAItI,KAAKyvC,SAASM,cAAcvvC,SAAU8H,EACxDtI,KAAK8oD,cAAcxgD,GAAK,GAE1BtI,KAAKgpD,YAAc,GACnBhpD,KAAKgpD,YAAY,GAAK,GACtBhpD,KAAKgpD,YAAY,GAAK,GACtBhpD,KAAKgpD,YAAY,GAAK,GAGtBhpD,KAAKipD,cAAgB,GACrB,IAAK,IAAI3gD,EAAI,EAAGA,EAAItI,KAAKyvC,SAASyZ,QAAQ1oD,SAAU8H,EAAG,CACrD,MAAMw/B,EAAQ9nC,KAAKyvC,SAASyZ,QAAQ5gD,GAAGynC,cACvC,IAAI7iC,EAAM,EACV,KAAOA,EAAM46B,EAAMtnC,QACgD,IAA5DsnC,EAAM56B,GAAKoF,UAAU8vB,MAAQ+J,GAAY9J,MAAMmM,WADzBthC,GAK7BlN,KAAKipD,cAAc3gD,GAAK4E,CAC1B,CAEAlN,KAAKmpD,mBAEL,IAAK,IAAI7gD,EAAI,EAAGA,EAAItI,KAAKyvC,SAASyZ,QAAQ1oD,SAAU8H,EAClDiD,EAAK69C,mBAAmBppD,KAAKyvC,SAASyZ,QAAQ5gD,GAAGynC,cAAe/vC,KAAKipD,cAAc3gD,IAAI,EAE3F,CAEA8gD,kBAAAA,CAAmBC,EAAYC,EAAaC,GAE1C,IAAK,IAAIC,EAAS,EAAGA,GAAU,KACzBH,EAAW7oD,OAASgpD,KADUA,EAKlC,IAAK,IAAIlhD,EAAI,EAAGA,EAAIkhD,EAASF,IAAehhD,EAC1C,GAAItI,KAAKomD,QAAQG,OAAO8C,EAAW/gD,EAAIkhD,GAAQphC,OAAQihC,EAAW/gD,GAAG8f,QACrB,CAC9CpoB,KAAKgpD,YAAYQ,GAAQH,EAAW/gD,EAAIkhD,GAAQphC,QAAUigC,GAAUG,IACpE,IAAK,IAAI9sC,EAAIpT,EAAI,EAAGoT,EAAIpT,EAAIkhD,IAAU9tC,OAC0B,IAAnD1b,KAAKgpD,YAAYQ,GAAQH,EAAW3tC,GAAG0M,UAChDpoB,KAAKgpD,YAAYQ,GAAQH,EAAW3tC,GAAG0M,QAAUigC,GAAUE,QAI3DvoD,KAAKgpD,YAAYQ,GAAQH,EAAW/gD,GAAG8f,UAAYigC,GAAUG,IAC/DxoD,KAAKgpD,YAAYQ,GAAQH,EAAW/gD,GAAG8f,QAAUigC,GAAUI,cAE3DzoD,KAAKgpD,YAAYQ,GAAQH,EAAW/gD,GAAG8f,QAAUigC,GAAUC,KAE/D,CAIJ,IAAK,IAAIhgD,EAAI,EAAGA,EAAIghD,EAAc,IAAKhhD,EAAG,CACxC,MAAMmhD,EAAQzpD,KAAK0pD,OAAOL,EAAW/gD,EAAI,GAAI+gD,EAAW/gD,GAAI+gD,EAAW/gD,EAAI,IAC3EtI,KAAK+oD,MAAMM,EAAW/gD,GAAG8f,QAAqB,MAAVqhC,GAAiBA,EAAQ,EAC/D,CAEA,IAAK,IAAInhD,EAAI,EAAGA,EAAI,EAAIghD,IAAehhD,EACrC,GAAItI,KAAK2pD,cAAcN,EAAW/gD,GAAG8f,OAAQ,IAAMpoB,KAAK2pD,cAAcN,EAAW/gD,EAAI,GAAG8f,OAAQ,GAC9F,IAAK,IAAI1M,EAAIpT,EAAGoT,GAAKpT,EAAI,IAAKoT,EAC5B1b,KAAK4oD,IAAIS,EAAW3tC,GAAG0M,QAAUsgC,GAAc1W,YAKrD,IAAK,IAAI1pC,EAAI,EAAGA,EAAI,EAAIghD,IAAehhD,EACrC,GAAItI,KAAK2pD,cAAcN,EAAW/gD,GAAG8f,OAAQ,IAAMpoB,KAAK2pD,cAAcN,EAAW/gD,EAAI,GAAG8f,OAAQ,GAAI,CAClG,IAAIgR,GAAQ,EACZ,IAAK,IAAI1d,EAAIpT,EAAG8wB,GAAS1d,GAAKpT,EAAI,IAAKoT,EACrC0d,OAAkD,IAAnCp5B,KAAK4oD,IAAIS,EAAW3tC,GAAG0M,SAC3BpoB,KAAK4oD,IAAIS,EAAW3tC,GAAG0M,UAAYsgC,GAAc3W,UAE9D,GAAI3Y,EACF,IAAK,IAAI1d,EAAIpT,EAAGoT,GAAKpT,EAAI,IAAKoT,EAC5B1b,KAAK4oD,IAAIS,EAAW3tC,GAAG0M,QAAUsgC,GAAc3W,SAGrD,CAGF,IAAK,IAAIzpC,EAAI,EAAGA,EAAI,EAAIghD,IAAehhD,EACrC,GAAItI,KAAK2pD,cAAcN,EAAW/gD,GAAG8f,OAAQ,IAAMpoB,KAAK2pD,cAAcN,EAAW/gD,EAAI,GAAG8f,OAAQ,GAAI,CAClG,IAAIgR,GAAQ,EACZ,IAAK,IAAI1d,EAAIpT,EAAG8wB,GAAS1d,GAAKpT,EAAI,IAAKoT,EACrC0d,OAAkD,IAAnCp5B,KAAK4oD,IAAIS,EAAW3tC,GAAG0M,SAC3BpoB,KAAK4oD,IAAIS,EAAW3tC,GAAG0M,UAAYsgC,GAAczW,UAChDsX,GAAqBvpD,KAAK4oD,IAAIS,EAAW3tC,GAAG0M,UAAYsgC,GAAc1W,YAEpF,GAAI5Y,EACF,IAAK,IAAI1d,EAAIpT,EAAGoT,GAAKpT,EAAI,IAAKoT,EAC5B1b,KAAK4oD,IAAIS,EAAW3tC,GAAG0M,QAAUsgC,GAAczW,QAGrD,CAGF,IAAK,IAAI3pC,EAAI,EAAGA,EAAI,EAAIghD,IAAehhD,EACrC,QAA8C,IAAnCtI,KAAK4oD,IAAIS,EAAW/gD,GAAG8f,QAAyB,CACzD,IAAIwhC,GAAS,EACb,IAAK,IAAIJ,EAAS,EAAGA,GAAU,IAAMI,IAAUJ,EAC7C,IAAK,IAAInpD,EAAI,EAAGA,EAAImpD,IAAWI,IAAUvpD,EACvCupD,EAAUthD,GAAKjI,GAAML,KAAK2pD,cAAcN,EAAW/gD,EAAIjI,GAAG+nB,OAAQohC,GAIlEI,EACF5pD,KAAK4oD,IAAIS,EAAW/gD,GAAG8f,QAAUsgC,GAAcpW,KACtCtyC,KAAK+oD,MAAMM,EAAW/gD,GAAG8f,UAClCpoB,KAAK4oD,IAAIS,EAAW/gD,GAAG8f,QAAUsgC,GAAcnW,KAEnD,CAEJ,CAEA8U,iBAAAA,CAAkB/3B,GAChB,IAAK,IAAIhnB,EAAI,EAAGA,EAAIgnB,EAAI8Y,OAAO5nC,SAAU8H,EAAG,CAC1C,MAAM,KAAEikB,GAAS+C,EAAI8Y,OAAO9/B,GAC5B,GAAa,OAATikB,GACY,OAATA,EACL,OAAO+C,EAAI8Y,OAAO9/B,GAAG6b,QAEzB,CAEA,OAAO,IACT,CAEA0lC,aAAAA,CAAcC,EAAIC,EAAIC,EAAIC,GACxB,MAAMC,EAAMJ,EAAG1jB,QAAQE,IAAIyjB,GACrBI,EAAMH,EAAG5jB,QAAQE,IAAI2jB,GAE3B,IAAIx+B,EAAS,EAEb,MAAMvV,EAAIg0C,EAAI3jB,IAAI2jB,GAAOC,EAAI5jB,IAAI4jB,GAKjC,OAJIj0C,EAAI,IACNuV,EAASy+B,EAAI3jB,IAAI4jB,GAAO1hD,KAAK6uC,KAAKphC,IAG7BuV,CACT,CAEAi+B,MAAAA,CAAOU,EAAU96B,EAAK+6B,GACpB,MAAMC,EAAQtqD,KAAKqnD,kBAAkB/3B,GAC/Bi7B,EAAOvqD,KAAKqnD,kBAAkB+C,GAC9BI,EAAOxqD,KAAKqnD,kBAAkBgD,GACpC,GAAc,OAAVC,GAA2B,OAATC,GAA0B,OAATC,EACrC,OAAO,IAGT,MAAMC,EAAOzqD,KAAK6pD,cAAcS,EAAOC,EAAMC,EAAMF,GAC7CI,EAAOjiD,KAAK6uC,KAAK,EAAImT,EAAOA,GAClC,OAAgC,IAAzBhiD,KAAKkiD,MAAMD,EAAMD,GAAchiD,KAAKC,EAC7C,CAEAihD,aAAAA,CAAcr6B,EAAKk6B,GACjB,OAAQxpD,KAAKgpD,YAAYQ,GAAQl6B,KAAS+4B,GAAUC,OAC/CtoD,KAAKgpD,YAAYQ,GAAQl6B,KAAS+4B,GAAUI,aACnD,CAEAU,gBAAAA,GAGE,MAAMyB,EAAU,GAChB,IAAK,IAAIz0C,EAAI,EAAGA,EAAInW,KAAKyvC,SAASyZ,QAAQ1oD,SAAU2V,EAAG,CACrD,MAAM00C,EAAO7qD,KAAKipD,cAAc9yC,GAChC,GAAI00C,GAAQ,EACV,SAGF,MAAMC,EAAS9qD,KAAKyvC,SAASyZ,QAAQ/yC,GAAG45B,cAExC,IAAK,IAAIp1B,EAAIxE,EAAGwE,EAAI3a,KAAKyvC,SAASyZ,QAAQ1oD,SAAUma,EAAG,CACrD,MAAMowC,EAAO/qD,KAAKipD,cAActuC,GAChC,GAAIowC,GAAQ,EACV,SAGF,MAAMC,EAAShrD,KAAKyvC,SAASyZ,QAAQvuC,GAAGo1B,cAExC,IAAK,IAAIznC,EAAI,EAAGA,EAAI,EAAIuiD,IAAQviD,EAAG,CACjC,MAAMw+C,EAAKgE,EAAOxiD,GAElB,IAAIoT,EAAI,EAKR,IAJIf,IAAMxE,IACRuF,EAAIpT,EAAI,GAGHoT,EAAI,EAAIqvC,IAAQrvC,EAAG,CACxB,MAAMsrC,EAAKgE,EAAOtvC,GAEZ5S,EAAO9I,KAAKirD,YAAYH,EAAQxiD,EAAG0iD,EAAQtvC,GACjD,GAAI5S,IAASk/C,GAAWE,UACtB,SAIF,IAAIgD,GAAQ,EACZ,IAAK,MAAMC,KAAUP,EACnB,GAAI9hD,IAASqiD,EAAOriD,MAAQg+C,EAAG1+B,SAAW+iC,EAAO7iD,EAAE6iD,EAAO7iD,EAAE9H,OAAS,GAAK,EAA1E,CAIA,GAAIsI,IAASk/C,GAAWG,UAAYgD,EAAOzvC,EAAEyvC,EAAOzvC,EAAElb,OAAS,GAAK,IAAMwmD,EAAG5+B,OAAQ,CACnF+iC,EAAO7iD,EAAEkE,KAAKs6C,EAAG1+B,QACjB+iC,EAAOzvC,EAAElP,KAAKw6C,EAAG5+B,QACjB8iC,GAAQ,EACR,KACF,CAEA,GAAIpiD,IAASk/C,GAAWI,eAAiB+C,EAAOzvC,EAAE,GAAK,IAAMsrC,EAAG5+B,OAAQ,CACtE+iC,EAAO7iD,EAAEkE,KAAKs6C,EAAG1+B,QACjB+iC,EAAOzvC,EAAE0vC,QAAQpE,EAAG5+B,QACpB8iC,GAAQ,EACR,KACF,CAdA,CAkBGA,GACHN,EAAQp+C,KAAK,CACX1D,OACAR,EAAG,CAACw+C,EAAG1+B,QACPijC,OAAQvE,EAAG7d,WAAW7gB,OACtB1M,EAAG,CAACsrC,EAAG5+B,QACPkjC,OAAQtE,EAAG/d,WAAW7gB,QAG5B,CACF,CACF,CACF,CAGAwiC,EAAQhyC,MAAK,CAACzC,EAAGwE,IACXxE,EAAEk1C,OAAS1wC,EAAE0wC,QAAWl1C,EAAEk1C,SAAW1wC,EAAE0wC,QAAUl1C,EAAE7N,EAAE,GAAKqS,EAAErS,EAAE,IACxD,EAEH,IAGT,IAAK,IAAIA,EAAI,EAAGA,EAAIsiD,EAAQpqD,SAAU8H,EACpC,IAAK,IAAIoT,EAAIpT,EAAI,EAAGoT,EAAIkvC,EAAQpqD,SAAUkb,EAAG,CAC3C,MAAM6vC,EAAMX,EAAQtiD,GAAGA,EAAE,GACnBkjD,EAAMZ,EAAQtiD,GAAGA,EAAEsiD,EAAQtiD,GAAGA,EAAE9H,OAAS,GACzCirD,EAAMb,EAAQtiD,GAAGoT,EAAE,GACnBgwC,EAAMd,EAAQtiD,GAAGoT,EAAEkvC,EAAQtiD,GAAGoT,EAAElb,OAAS,GACzCmrD,EAAMf,EAAQlvC,GAAGpT,EAAE,GACnBsjD,EAAMhB,EAAQlvC,GAAGpT,EAAEsiD,EAAQlvC,GAAGpT,EAAE9H,OAAS,GACzCqrD,EAAMjB,EAAQlvC,GAAGA,EAAE,GACnBowC,EAAMlB,EAAQlvC,GAAGA,EAAEkvC,EAAQlvC,GAAGA,EAAElb,OAAS,GAE/C,GAAIoqD,EAAQtiD,GAAGQ,OAAS8hD,EAAQlvC,GAAG5S,MAC9B9I,KAAK+rD,eAAetjD,KAAKiM,IAAI62C,EAAKI,GAAMljD,KAAKgM,IAAI+2C,EAAKI,KACtD5rD,KAAK+rD,eAAetjD,KAAKiM,IAAI+2C,EAAKI,GAAMpjD,KAAKgM,IAAIi3C,EAAKI,KACtDH,EAAMH,GAAO,GAAMA,GAAOG,GAAOJ,GAAOK,EAC3C,SAGF,IAAII,GAAQ,EAEVA,EADEpB,EAAQtiD,GAAGQ,OAASk/C,GAAWG,SACvB0D,EAAMH,EAAM,GAAKC,EAAMH,EAAM,GAAOK,EAAMH,EAAM,EAEhDD,EAAMK,EAAM,GAAKH,EAAMH,EAAM,GAAOC,EAAMK,EAAM,EAGxDE,IACFpB,EAAQtiD,GAAGA,EAAIsiD,EAAQtiD,GAAGA,EAAEgC,OAAOsgD,EAAQlvC,GAAGpT,GAC1CsiD,EAAQtiD,GAAGQ,OAASk/C,GAAWG,SACjCyC,EAAQtiD,GAAGoT,EAAIkvC,EAAQtiD,GAAGoT,EAAEpR,OAAOsgD,EAAQlvC,GAAGA,GAE9CkvC,EAAQtiD,GAAGoT,EAAIkvC,EAAQlvC,GAAGA,EAAEpR,OAAOsgD,EAAQtiD,GAAGoT,GAEhDkvC,EAAQhW,OAAOl5B,IAAK,GAExB,CAIF,MAAMuwC,EAAY,IAAIC,IACtB,IAAK,IAAI5jD,EAAI,EAAGA,EAAIsiD,EAAQpqD,SAAU8H,EACpC2jD,EAAUxiD,IAAImhD,EAAQtiD,IAGxB,IAAI0qC,EAAQ,EACRmZ,EAAS,EACb,KAAOF,EAAUv8B,KAAO,GAAG,CACzB,IAAIy7B,EAASc,EAAUtiC,SAAS/Z,OAAOqZ,MACvCgjC,EAAUG,OAAOjB,GAEjB,MAAMkB,EAAW,IAAIH,IAGrB,IAAII,EAFJD,EAAS5iD,IAAI0hD,GAGb,EAAG,CACDmB,EAAS,IAAIJ,IACb,IAAK,MAAM/1C,KAAKk2C,EAAS1iC,SACvB,IAAK,MAAMhP,KAAKsxC,EAAUtiC,SACpB3pB,KAAKusD,kBAAkBp2C,EAAGwE,IAC5B2xC,EAAO7iD,IAAIkR,GAIjB,IAAKwwC,KAAUmB,EAAO3iC,SACpB0iC,EAAS5iD,IAAI0hD,GACbc,EAAUG,OAAOjB,EAErB,OAASmB,EAAO58B,KAAO,GAEvB,IAAKy7B,KAAUkB,EAAS1iC,SACtBwhC,EAAOgB,OAASA,EAChBhB,EAAOnY,MAAQA,EACfmY,EAAO15B,KAAO46B,IACZF,IAGFnZ,CACJ,CAEA,IAAK,IAAI1qC,EAAI,EAAGA,EAAIsiD,EAAQpqD,SAAU8H,EAAG,CACvC,MAAM6iD,EAASP,EAAQtiD,GAKvB,IAAIkkD,EAAQ,EACRC,EAAQ,EAEZ,IAAK,IAAIlsD,EAAI,EAAGA,EAAI4qD,EAAO7iD,EAAE9H,SAAUD,EACrC,GAAIP,KAAK8oD,cAAcqC,EAAO7iD,EAAE/H,IAAI,GAAI,CACtCisD,EAAQ,EACR,KACF,CAGF,IAAK,IAAIjsD,EAAI,EAAGA,EAAI4qD,EAAOzvC,EAAElb,SAAUD,EACrC,GAAIP,KAAK8oD,cAAcqC,EAAOzvC,EAAEnb,IAAI,GAAI,CACtCksD,EAAQ,EACR,KACF,CAGF,IAAIz2B,EAAK0yB,GAAc5W,OAKvB,GAJIqZ,EAAO7iD,EAAE9H,OAAS,IACpBw1B,EAAK0yB,GAAc7W,QAGjBsZ,EAAOriD,OAASk/C,GAAWG,SAAU,CACvC,IAAIzsC,EAAI,EACR,IAAK,IAAIrb,EAAI,EAAGA,EAAI8qD,EAAO7iD,EAAE9H,SAAUH,EACrCL,KAAK8oD,cAAcqC,EAAO7iD,EAAEjI,IAAImsD,GAAS,CACvC/qB,QAAS0pB,EAAOzvC,EAAEA,KAClBywC,OAAQhB,EAAOgB,OACfO,UAAU,GAIdhxC,EAAI,EACJ,IAAK,IAAIrb,EAAI,EAAGA,EAAI8qD,EAAOzvC,EAAElb,SAAUH,EACrCL,KAAK8oD,cAAcqC,EAAOzvC,EAAErb,IAAIosD,GAAS,CACvChrB,QAAS0pB,EAAO7iD,EAAEoT,KAClBywC,OAAQhB,EAAOgB,OACfO,UAAU,EAGhB,KAAO,CACL,IAAIhxC,EAAIyvC,EAAOzvC,EAAElb,OAAS,EAC1B,IAAK,IAAIH,EAAI,EAAGA,EAAI8qD,EAAO7iD,EAAE9H,SAAUH,EACrCL,KAAK8oD,cAAcqC,EAAO7iD,EAAEjI,IAAImsD,GAAS,CACvC/qB,QAAS0pB,EAAOzvC,EAAEA,KAClBywC,OAAQhB,EAAOgB,OACfO,UAAU,GAIdhxC,EAAIyvC,EAAO7iD,EAAE9H,OAAS,EACtB,IAAK,IAAIH,EAAI,EAAGA,EAAI8qD,EAAOzvC,EAAElb,SAAUH,EACrCL,KAAK8oD,cAAcqC,EAAOzvC,EAAErb,IAAIosD,GAAS,CACvChrB,QAAS0pB,EAAO7iD,EAAEoT,KAClBywC,OAAQhB,EAAOgB,OACfO,UAAU,EAGhB,CAEA,IAAK,IAAIrsD,EAAI8qD,EAAO7iD,EAAE,GAAIjI,GAAK8qD,EAAO7iD,EAAE6iD,EAAO7iD,EAAE9H,OAAS,KAAMH,EAC1DL,KAAK4oD,IAAIvoD,KAAOqoD,GAAc7W,SAChC7xC,KAAK4oD,IAAIvoD,GAAK21B,EACdh2B,KAAK6oD,OAAOxoD,GAAK8qD,EAAOnY,OAI5B,IAAK,IAAI3yC,EAAI8qD,EAAOzvC,EAAE,GAAIrb,GAAK8qD,EAAOzvC,EAAEyvC,EAAOzvC,EAAElb,OAAS,KAAMH,EAC1DL,KAAK4oD,IAAIvoD,KAAOqoD,GAAc7W,SAChC7xC,KAAK4oD,IAAIvoD,GAAK21B,EACdh2B,KAAK6oD,OAAOxoD,GAAK8qD,EAAOnY,MAG9B,CACF,CAEAiY,WAAAA,CAAYH,EAAQtE,EAAMwE,EAAQvE,GAChC,IAAIh7B,EAASu8B,GAAWE,UAExB,MAAM/xC,EAAI20C,EAAOtE,EAAO,GAAGp+B,OACrBzN,EAAImwC,EAAOtE,GAAMp+B,OACjBtY,EAAIg7C,EAAOtE,EAAO,GAAGp+B,OACrBzO,EAAIqxC,EAAOvE,EAAK,GAAGr+B,OACnBvP,EAAImyC,EAAOvE,GAAIr+B,OACftR,EAAIk0C,EAAOvE,EAAK,GAAGr+B,OAEnBm+B,EAASvmD,KAAKomD,QAAQG,OAAO9+B,KAAKznB,KAAKomD,SAM7C,OALKG,EAAOz2C,EAAG+I,IAAM0tC,EAAO1tC,EAAG1C,IAAQowC,EAAOzvC,EAAG6D,IAAM4rC,EAAO5rC,EAAGhB,GAC/D8R,EAASu8B,GAAWG,UACV5B,EAAOz2C,EAAG6J,IAAM4sC,EAAOzvC,EAAGX,IAAQowC,EAAO1tC,EAAG8B,IAAM4rC,EAAO5rC,EAAG9B,MACtE4S,EAASu8B,GAAWI,eAEf38B,CACT,CAGA8gC,iBAAAA,CAAkBp2C,EAAGwE,GACnB,MAAMgyC,EAAK,IAAIT,IAAI/1C,EAAE7N,GACfskD,EAAK,IAAIV,IAAI/1C,EAAEuF,GAErB,IAAK,MAAMpT,KAAKqS,EAAErS,EAChB,GAAIqkD,EAAGE,IAAIvkD,IAAMskD,EAAGC,IAAIvkD,GACtB,OAAO,EAIX,IAAK,MAAMA,KAAKqS,EAAEe,EAChB,GAAIixC,EAAGE,IAAIvkD,IAAMskD,EAAGC,IAAIvkD,GACtB,OAAO,EAIX,OAAO,CACT,CAEAyjD,cAAAA,CAAevF,EAAMC,GACnB,IAAK,IAAIn+C,EAAIk+C,EAAO,EAAGl+C,GAAKm+C,IAAMn+C,EAChC,GAAItI,KAAKyvC,SAASC,UAAUpnC,GAAG06B,YAAchjC,KAAKyvC,SAASC,UAAUpnC,EAAI,GAAG06B,UAAY,EACtF,OAAO,EAGX,OAAO,CACT,EAGF2lB,GAAsBD,cAAgBA,GC1dtC,MAEQA,cAAaA,IAAKC,GACpBhW,GAAwB1B,GAAkBW,KAG1Ckb,GAAgB,CACpB,CAACpE,GAAc1W,aAAc,EAC7B,CAAC0W,GAAczW,UAAW,EAC1B,CAACyW,GAAc3W,WAAY,GAGvBgb,GAAU,CACd,CAACrE,GAAc5W,QAASa,GAAsBb,OAC9C,CAAC4W,GAAcpW,MAAOK,GAAsBL,KAC5C,CAACoW,GAAcnW,MAAOI,GAAsBJ,KAC5C,CAACmW,GAAchW,MAAOC,GAAsBH,MAS9C,MAAMwa,GACJ15C,WAAAA,GACEtT,KAAKkpD,QAAU,GACflpD,KAAKitD,YAAc,GACnBjtD,KAAKktD,SAAW,GAChBltD,KAAKmtD,QAAU,GACfntD,KAAKotD,WAAa,GAElBptD,KAAKqtD,cAAgBljD,OAAOC,OAAO+hC,GAAYkD,eAC/CrvC,KAAKooC,OAAS,GACdpoC,KAAK0vC,UAAY,GACjB1vC,KAAKk5C,OAAS,GACdl5C,KAAKstD,SAAW,GAChBttD,KAAKutD,WAAa,GAClBvtD,KAAKwtD,kBAAmB,EAExBxtD,KAAKytD,SAAW,CAAC,EAEjBztD,KAAK0tD,SAAW,GAChB1tD,KAAK2tD,MAAQ,CAAC,IAAIhW,GAAe33C,OACjCA,KAAK4tD,aAAe,CACtB,CAEAtkB,OAAAA,CAAQ1V,GACN,MAAMxjB,EAAQpQ,KAAKooC,OAAO5nC,OAE1B,OADAR,KAAKooC,OAAO57B,KAAKonB,GACVxjB,CACT,CAEAy9C,QAAAA,CAAS7a,GACP,MAAM5iC,EAAQpQ,KAAKmtD,QAAQ3sD,OAE3B,OADAR,KAAKmtD,QAAQ3gD,KAAKwmC,GACX5iC,CACT,CAEA09C,QAAAA,CAAS73B,GACP,MAAM7lB,EAAQpQ,KAAKktD,SAAS1sD,OAE5B,OADAR,KAAKktD,SAAS1gD,KAAKypB,GACZ7lB,CACT,CAEAqrC,QAAAA,GACE,OAAOz7C,KAAKooC,MACd,CAEA2lB,QAAAA,GACE,OAAO/tD,KAAKk5C,MACd,CAEAxP,YAAAA,GACE,OAAO1pC,KAAKooC,OAAO5nC,MACrB,CAEAmwC,UAAAA,CAAWlP,GACT,MAAMrxB,EAAQpQ,KAAK0vC,UAAUlvC,OAE7B,OADAR,KAAK0vC,UAAUljC,KAAKi1B,GACbrxB,CACT,CAEAkgC,aAAAA,CAAcC,GACZvwC,KAAKguD,cAAclmB,IACjBA,EAAMwI,cAAcC,EAAU,GAElC,CAEAM,cAAAA,CAAeod,GAEb,OADWjuD,KAAKqtD,cAAcY,GAAW,IAAI9hB,GAAY8hB,EAAS,UAAW,GAE/E,CAEAld,eAAAA,GACE,OAAO/wC,KAAK0vC,UAAUlvC,MACxB,CAEAuvC,WAAAA,GACE,OAAO/vC,KAAK0vC,SACd,CAEAwe,cAAAA,GACE,OAAOluD,KAAKstD,SAAS9sD,MACvB,CAEA2tD,UAAAA,GACE,OAAOnuD,KAAKstD,QACd,CAKAc,iBAAAA,CAAkBhrB,GAChB,MAAM5V,EAAQ4V,EAASn0B,MAAM,KAC7B,GAAqB,IAAjBue,EAAMhtB,OACR,OAAO,KAGT,MAAMye,EAAYuO,EAAM,GAClB6gC,EAAQ3jD,SAAS8iB,EAAM,GAAI,IACjC,GAAIzlB,OAAOoP,MAAMk3C,GACf,OAAO,KAET,MAAMnuC,EAAWsN,EAAM,GAAGvlB,cAE1B,IAAIw9B,EAAW,KAwBf,OAvBAzlC,KAAKguD,cAAclmB,IACbrC,GAGyC,IAAzCqC,EAAMmC,MAAMqkB,cAAcrvC,IAC5B6oB,EAAMkJ,gBAAgBvP,IAChBgE,GAGAhE,EAAQuB,YAAcqrB,GACxB5sB,EAAQkI,aAAa/V,IACf6R,GAGsC,IAAtCvlB,EAASouC,cAAc16B,EAAKrH,QAC9BkZ,EAAW7R,EACb,GAEJ,GAEJ,IAGK6R,CACT,CAQA2S,QAAAA,CAAS7rB,GACP,MAAMd,EAAS,IAAI8iC,GAAMvuD,KAAMusB,GAE/B,OADAvsB,KAAKkpD,QAAQ18C,KAAKif,GACXA,CACT,CAEAwd,QAAAA,CAAS1c,GACP,IAAK,IAAIjkB,EAAI,EAAGC,EAAIvI,KAAKkpD,QAAQ1oD,OAAQ8H,EAAIC,IAAKD,EAAG,CACnD,MAAMw/B,EAAQ9nC,KAAKkpD,QAAQ5gD,GAC3B,GAAIw/B,EAAM/E,YAAcxW,EACtB,OAAOub,CAEX,CACA,OAAO,IACT,CAEA0mB,aAAAA,GACE,OAAOxuD,KAAKkpD,QAAQ1oD,MACtB,CAEAiuD,YAAAA,GACE,OAAOzuD,KAAKutD,UACd,CAEAmB,gBAAAA,GACE,OAAO1uD,KAAKutD,WAAW/sD,MACzB,CAEAmpC,WAAAA,CAAY/G,GACV,MAAMiF,EAAQ7nC,KAAKooC,OACnB,IAAK,IAAI9/B,EAAI,EAAGC,EAAIs/B,EAAMrnC,OAAQ8H,EAAIC,IAAKD,EACzCs6B,EAAQiF,EAAMv/B,GAElB,CAEAq6B,WAAAA,CAAYC,GACV,MAAMT,EAAQniC,KAAKk5C,OACnB,IAAK,IAAI5wC,EAAI,EAAGC,EAAI45B,EAAM3hC,OAAQ8H,EAAIC,IAAKD,EACzCs6B,EAAQT,EAAM75B,GAElB,CAEA0oC,cAAAA,CAAepO,GACb,MAAMqN,EAAWjwC,KAAK0vC,UACtB,IAAK,IAAIpnC,EAAI,EAAGC,EAAI0nC,EAASzvC,OAAQ8H,EAAIC,IAAKD,EAC5Cs6B,EAAQqN,EAAS3nC,GAErB,CAEA0lD,YAAAA,CAAaprB,GACX,MAAMgV,EAAS53C,KAAKkpD,QACpB,IAAK,IAAI5gD,EAAI,EAAGC,EAAIqvC,EAAOp3C,OAAQ8H,EAAIC,IAAKD,EAC1Cs6B,EAAQgV,EAAOtvC,GAEnB,CAEAqmD,eAAAA,CAAgB/rB,GACd,MAAMgsB,EAAY5uD,KAAKutD,WACjBhlD,EAAIqmD,EAAUpuD,OACpB,IAAK,IAAI8H,EAAI,EAAGA,EAAIC,IAAKD,EACvBs6B,EAAQgsB,EAAUtmD,GAEtB,CAEAumD,aAAAA,CAAcjsB,GACZ,MAAMksB,EAAS9uD,KAAKstD,SACpB,IAAK,IAAIhlD,EAAI,EAAGC,EAAIumD,EAAOtuD,OAAQ8H,EAAIC,IAAKD,EAC1Cs6B,EAAQksB,EAAOxmD,GAEnB,CAEAi5C,gBAAAA,CAAiB3e,GACf,MAAMmsB,EAAa/uD,KAAKitD,YACxB,IAAK,IAAI3kD,EAAI,EAAGC,EAAIwmD,EAAWvuD,OAAQ8H,EAAIC,IAAKD,EAC9Cs6B,EAAQmsB,EAAWzmD,GAEvB,CAEA0mD,uBAAAA,CAAwBpsB,GACtB,MAAMmsB,EAAa/uD,KAAKitD,YACxB,IAAK,IAAI3kD,EAAI,EAAGC,EAAIwmD,EAAWvuD,OAAQ8H,EAAIC,IAAKD,EAC9Cs6B,EAAQmsB,EAAWzmD,GAEvB,CAEAg1C,OAAAA,CAAQr5B,EAAM0gB,EAAOC,EAAO97B,EAAM+7B,GAChC,MAAMhR,EAAO,IAAI6Q,GAAKzgB,EAAM0gB,EAAOC,EAAO97B,EAAM+7B,GAEhD,OADA7kC,KAAKk5C,OAAO1sC,KAAKqnB,GACVA,CACT,CAEAo7B,YAAAA,GACE,OAAOjvD,KAAKk5C,OAAO14C,MACrB,CAEAowC,cAAAA,CAAerkB,GACb,OAAOvsB,KAAKqtD,cAAc9gC,IAAS,IACrC,CAEAolB,gBAAAA,CAAiB7J,EAAOlG,EAAQwO,GAK9B,OAAOxO,EAHW,MAGFwO,EAFG8e,SAEiBpnB,CACtC,CAEA0J,kBAAAA,CAAmB2d,GAEjB,MAAMD,EAAY,MACZE,EAAaF,SAEblwC,EAAUvW,KAAKmN,MAAMu5C,EAAYC,GACjCC,EAAUF,EAAYnwC,EAAUowC,EAChCxvC,EAAUnX,KAAKmN,MAAMy5C,EAAUH,GAErC,MAAO,CAAEpnB,MAAO9oB,EAAS4iB,OADbytB,EAAUzvC,EAAUsvC,EACM9e,MAAOxwB,EAC/C,CAEA0vC,YAAAA,GACE,MAAM/jD,EAAOvL,KACP+uD,EAAa/uD,KAAKitD,YAExB,SAASsC,IACP,MAAMC,EAAO,IAAIC,GAAUlkD,GAG3B,OAFAikD,EAAKpnC,OAAS2mC,EAAWvuD,OACzBuuD,EAAWS,EAAKpnC,QAAUonC,EACnBA,CACT,CAEAxvD,KAAKguD,cAAclmB,IACjB,MAAMmI,EAAWnI,EAAM4H,UACjBggB,EAAWzf,EAASzvC,OAC1B,GAAIkvD,EAAW,EACb,OAEF,IAAIF,EAAOD,IACPI,EAAY1f,EAAS,GAAG7nB,OAE5B,IAAK,IAAI9f,EAAI,EAAGA,EAAIonD,IAAYpnD,EAAG,CACjC,MAAMoxC,EAAUzJ,EAAS3nC,GACzBoxC,EAAQzR,WAAaunB,EAErB,MAAMlkB,EAAUhjC,IAAMonD,EAAW,EAAI,KAAOzf,EAAS3nC,EAAI,GACpDgjC,GACCoO,EAAQ5N,YAAYR,IACrBoO,EAAQtxB,SAAWkjB,EAAQljB,OAAS,IAGvConC,EAAKzW,WAAW,CAAC,CACf7xB,MAAOyoC,EACPnqC,IAAKk0B,EAAQtxB,UAEXkjB,IACFqkB,EAAYrkB,EAAQljB,OACpBonC,EAAOD,KAGb,IAEJ,CAIAK,cAAAA,GACE,MAAMJ,EAAO,IAAIC,GAAUzvD,MAC3BwvD,EAAKpnC,OAAS,EAEd,MAAM6nB,EAAWjwC,KAAK0vC,UAChBggB,EAAWzf,EAASzvC,OAC1B,GAAiB,IAAbkvD,EACF,OAGF,MAAMG,EAAc,GACpB,IAAIF,EAAY,EAChB,IAAK,IAAIrnD,EAAI,EAAGA,EAAIonD,IAAYpnD,EAAG,CACjC,MAAMoxC,EAAUzJ,EAAS3nC,GACzBoxC,EAAQzR,WAAaunB,EAErB,MAAMlkB,EAAUhjC,IAAMonD,EAAW,EAAI,KAAOzf,EAAS3nC,EAAI,GACpDgjC,GACCoO,EAAQ5N,YAAYR,KAExBukB,EAAYA,EAAYrvD,QAAU,CAChC0mB,MAAOyoC,EACPnqC,IAAKld,GAEHgjC,IACFqkB,EAAYrnD,EAAI,GAGtB,CAEAknD,EAAKzW,WAAW8W,GAChB7vD,KAAKitD,YAAYuC,EAAKpnC,QAAUonC,CAClC,CAMAM,eAAAA,CAAgBC,GACVA,EACF/vD,KAAKsvD,eAELtvD,KAAK4vD,gBAET,CAEAI,cAAAA,GACE,OAAOhwD,KAAK4tD,YACd,CAEAxS,oBAAAA,GACE,OAAOp7C,KAAK2tD,MAAM,GAAGlW,eACvB,CAEAA,aAAAA,GACE,OAAOz3C,KAAK2tD,MAAM3tD,KAAK4tD,cAAcnW,eACvC,CAEAF,aAAAA,GACE,OAAOv3C,KAAK2tD,MAAM3tD,KAAK4tD,cAAcrW,eACvC,CAEAC,WAAAA,GACE,OAAOx3C,KAAK2tD,MAAM3tD,KAAK4tD,cAAcpW,aACvC,CAEAyY,gBAAAA,GACEjwD,KAAK4tD,aAAe,EACpB5tD,KAAKkwD,eAAe,EACtB,CAEAA,cAAAA,CAAeC,GACb,OAAIA,SACCA,IAAYnwD,KAAK4tD,cACjBuC,GAAW,GACXA,EAAUnwD,KAAK2tD,MAAMntD,SACxBR,KAAK4tD,aAAeuC,GACb,EAGX,CAEAC,cAAAA,GACE,MAAM,MAAEzC,GAAU3tD,KAClB,IAAK,IAAIsI,EAAI,EAAGC,EAAIolD,EAAMntD,OAAQ8H,EAAIC,IAAKD,EACzCqlD,EAAMrlD,GAAGsuC,mBAEb,CAEAyZ,qBAAAA,GACErwD,KAAKguD,cAAc73C,IACjBA,EAAE61B,WAAW,IAEfhsC,KAAKuhD,kBAAkBzxC,IACrBA,EAAEuX,QAAQ,IAGZrnB,KAAKowD,iBACLpwD,KAAKswD,iBACLtwD,KAAK6uD,eAAev3C,IAClBA,EAAE88B,4BAA4B,GAElC,CAEA/sB,MAAAA,GACMrnB,KAAKwtD,mBACPxtD,KAAKuwD,uBACLvwD,KAAKwtD,kBAAmB,EAE5B,CAEA8C,cAAAA,GACE,MAAMnuB,EAAQniC,KAAK+tD,WACbxlD,EAAI45B,EAAM3hC,OAChB,IAAK,IAAI8H,EAAI,EAAGA,EAAIC,IAAKD,EACvB65B,EAAM75B,GAAG8f,OAAS9f,CAEtB,CAUAovC,QAAAA,CAAS1uC,GACPA,EAAOA,GAAQ,CAAC,EAEhB,MAAMm5B,EAAQniC,KAAKk5C,OACnB,IAAI5wC,EACAC,EAEJ,IAAKD,EAAI65B,EAAM3hC,OAAS,EAAG8H,GAAK,EAAGA,IAAK,CACtC,MAAMurB,EAAOsO,EAAM75B,GACA,OAAfurB,EAAKiR,OAAkC,OAAhBjR,EAAKkR,OAC9B5C,EAAMyS,OAAOtsC,EAAG,IAEhBurB,EAAKiR,MAAM3C,MAAM31B,KAAKqnB,GACtBA,EAAKkR,OAAO5C,MAAM31B,KAAKqnB,GAE3B,CAEA,MAAMoc,EAAWjwC,KAAK0vC,UACtB,IAAKpnC,EAAI,EAAGC,EAAI0nC,EAASzvC,OAAQ8H,EAAIC,IAAKD,EACxC2nC,EAAS3nC,GAAG0jC,YAGdhsC,KAAKguD,cAAc73C,IACjBA,EAAE61B,WAAW,IAIf,MAAM,MAAE2hB,GAAU3tD,KAClB,IAAKsI,EAAI,EAAGC,EAAIolD,EAAMntD,OAAQ8H,EAAIC,IAAKD,EACrCqlD,EAAMrlD,GAAGovC,WAGX13C,KAAKkwD,eAAe,GAEpB,MAAM3e,EAAc,CAAC,EACrB,IAAKjpC,EAAI,EAAGC,EAAI0nC,EAASzvC,OAAQ8H,EAAIC,IAAKD,EAAG,CAC3C,MAAMgnB,EAAM2gB,EAAS3nC,GAErBipC,EAAYvxC,KAAK2xC,iBACfriB,EAAI2Z,WAAWlG,UAAUhqB,WAAW,GACpCuW,EAAI6Z,cACJ7Z,EAAI+Z,WAAWtwB,WAAW,KACvBuW,CACP,CAEA,MAAM,WAAE89B,GAAeptD,KACvB,IAAKsI,EAAI,EAAGC,EAAI6kD,EAAW5sD,OAAQ8H,EAAIC,IAAKD,EAC1C8kD,EAAW9kD,GAAG0jC,UAAUhjC,EAAKsoC,cAAeC,EAAavxC,MAG3D,MAAMwwD,EAAUxwD,KAAKktD,SACrB,IAAK5kD,EAAI,EAAGC,EAAIioD,EAAQhwD,OAAQ8H,EAAIC,IAAKD,EACvCkoD,EAAQloD,GAAG0jC,UAAUhjC,EAAKsoC,cAAeC,EAAavxC,MAGxD,MAAMywD,EAASzwD,KAAKmtD,QACpB,IAAK7kD,EAAI,EAAGC,EAAIkoD,EAAOjwD,OAAQ8H,EAAIC,IAAKD,EACtCmoD,EAAOnoD,GAAG0jC,UAAUhjC,EAAKsoC,cAAeC,EAAavxC,MAIvDA,KAAKowD,iBAEL,MAAMvoB,EAAQ7nC,KAAKooC,OACnB,IAAK9/B,EAAI,EAAGC,EAAIs/B,EAAMrnC,OAAQ8H,EAAIC,IAAKD,EAAG,CACvBu/B,EAAMv/B,GACd8H,MAAQ9H,CACnB,CAEA,GAAIU,EAAK0nD,gBAEP,IACE,MAAMC,EAAgB,IAAIC,GAAS5wD,MACnC2wD,EAAcpT,QACdoT,EAAclW,SAChB,CAAE,MAAO5hC,GAET,CAGF,MAAM++B,EAAS53C,KAAKkpD,QACpB,IAAK5gD,EAAI,EAAGC,EAAIqvC,EAAOp3C,OAAQ8H,EAAIC,IAAKD,EACtCsvC,EAAOtvC,GAAG8f,OAAS9f,EAGrB,IAAKA,EAAI,EAAGC,EAAI0nC,EAASzvC,OAAQ8H,EAAIC,IAAKD,EACxC2nC,EAAS3nC,GAAG8f,OAAS9f,EAIvB,IAAKA,EAAI,EAAGC,EAAIs/B,EAAMrnC,OAAQ8H,EAAIC,IAAKD,EAAG,CACxC,MAAMsrB,EAAOiU,EAAMv/B,GACnB,GAAIsrB,EAAKwO,MAAQZ,GAAKa,MAAMC,UAAkC,IAAtB1O,EAAKuO,MAAM3hC,OAAc,CAC/D,MAAMqzB,EAAOD,EAAKuO,MAAM,IACTtO,EAAKiR,QAAUlR,GAAQC,EAAKiR,OAAUjR,EAAKkR,QAChD3C,MAAQZ,GAAKa,MAAME,SAC3B3O,EAAKwO,OAASZ,GAAKa,MAAMa,UAE7B,CACF,CAEAljC,KAAKswD,iBACLtwD,KAAK8vD,gBAAgB9mD,EAAK+mD,eAE1B,MAAMc,EAAS,IAAIC,GAAoB9wD,MACvC6wD,EAAOnP,aACH14C,EAAK+nD,qBACPF,EAAOlP,eAGT3hD,KAAKgxD,oBACP,CAEAA,kBAAAA,GAEE,IAAK,IAAI1oD,EAAI,EAAGA,EAAItI,KAAKutD,WAAW/sD,OAAQ8H,IAAK,CAC/C,MAAM2oD,EAAWjxD,KAAKutD,WAAWjlD,GAC3B+P,EAAQ44C,EAAShhB,SAASzvC,OAChC,IAAK,IAAIkb,EAAI,EAAGA,EAAIrD,EAAOqD,IAAK,CACdu1C,EAAShhB,SAASv0B,GAC1BstB,UAAYioB,CACtB,CACF,CACF,CAEAV,oBAAAA,GACE,MAAMW,EAAWC,GAAcA,EAAUpnB,cACzC/pC,KAAKgxC,eAAekgB,GACpBlxD,KAAKguD,aAAakD,GAClBlxD,KAAK2uD,gBAAgBuC,EACvB,CAEAE,gBAAAA,CAAiBrvB,GACf,IAAI1pB,EAAQ,EAQZ,OANArY,KAAK2pC,aAAa/V,IACW,IAAtBA,EAAKmO,KAAOA,IACf1pB,GACF,IAGKA,CACT,CAEAg5C,qBAAAA,CAAsBxpD,GACpB,IAAIwQ,EAAQ,EAQZ,OANArY,KAAK2pC,aAAa/V,IACZ/rB,EAAS2tC,aAAa5hB,IACxBvb,GACF,IAGKA,CACT,CAEAi5C,aAAAA,CAAcvvB,GACZ/hC,KAAK2pC,aAAa/V,IAChBA,EAAKmO,KAAOA,CAAI,GAEpB,CAEAwvB,SAAAA,CAAU1pD,EAAUk6B,GAClB,MAAMyvB,EAAUzvB,EACV0vB,GAAaD,EACnB,IAAIn5C,EAAQ,EACZ,MAAMq5C,EAAgBnb,GAAUllC,QAAQ,MAAlBklC,CAAyB1uC,EAAU7H,KAAKw3C,eAY9D,OAVAx3C,KAAK2pC,aAAa/V,IACZ89B,EAAclc,aAAa5hB,IAC7BA,EAAKmO,MAAQyvB,EACbn5C,KAEAub,EAAKmO,MAAQ0vB,CACf,IAEFzxD,KAAKwtD,kBAAmB,EAEjBn1C,CACT,CAEAs5C,qBAAAA,CAAsB9pD,EAAUk6B,GAC9B,MAAMyvB,EAAUzvB,EAChB,IAAI1pB,EAAQ,EASZ,OAPArY,KAAK2pC,aAAa/V,IACZ/rB,EAAS2tC,aAAa5hB,KAAUA,EAAKmO,KAAOA,KAAUA,IACxDnO,EAAKmO,MAAQyvB,EACbn5C,IACF,IAGKA,CACT,CAEAu5C,aAAAA,CAAc7vB,GACZ,MAAM0vB,GAAa1vB,EACnB/hC,KAAK2pC,aAAa/V,IAChBA,EAAKmO,MAAQ0vB,CAAS,IAExB,MAAMI,EAAW17C,IACfA,EAAEgyB,OAASspB,CAAS,EAEtBzxD,KAAK2pC,YAAYkoB,GACjB7xD,KAAKgxC,eAAe6gB,GACpB7xD,KAAKguD,aAAa6D,GAClB7xD,KAAK2uD,gBAAgBkD,EACvB,CAEAC,YAAAA,GACE,GAAI9xD,KAAKoM,eAAe,cACtB,OAAOpM,KAAK+xD,WAGd,MAAMC,EAAO,CAAC,EAMd,OALAhyD,KAAK2pC,aAAa/V,IAChBo+B,EAAKp+B,EAAKrH,MAAQ,CAAC,IAErBvsB,KAAK+xD,WAAa5nD,OAAOyP,KAAKo4C,GAEvBhyD,KAAK+xD,UACd,CAEAE,WAAAA,GACE,GAAIjyD,KAAKoM,eAAe,aACtB,OAAOpM,KAAKkyD,UAGd,MAAMF,EAAO,CAAC,EAMd,OALAhyD,KAAK2pC,aAAa/V,IAChBo+B,EAAKp+B,EAAK5T,QAAQuM,MAAQ,CAAC,IAE7BvsB,KAAKkyD,UAAY/nD,OAAOyP,KAAKo4C,GAEtBhyD,KAAKkyD,SACd,CAEAC,eAAAA,GACE,GAAInyD,KAAKoM,eAAe,iBACtB,OAAOpM,KAAKoyD,cAGd,MAAMJ,EAAO,CAAC,EAMd,OALAhyD,KAAKgxC,gBAAgB1hB,IACnB0iC,EAAK1iC,EAAI4V,MAAM+E,OAAS,CAAC,IAE3BjqC,KAAKoyD,cAAgBjoD,OAAOyP,KAAKo4C,GAE1BhyD,KAAKoyD,aACd,CAEAC,aAAAA,GACE,GAAIryD,KAAKoM,eAAe,eACtB,OAAOpM,KAAKsyD,YAGd,MAAMN,EAAO,CAAC,EAMd,OALAhyD,KAAKguD,cAAclmB,IACjBkqB,EAAKlqB,EAAMmC,OAAS,CAAC,IAEvBjqC,KAAKsyD,YAAcnoD,OAAOyP,KAAKo4C,GAExBhyD,KAAKsyD,WACd,CAEAC,cAAAA,GACE,GAAIvyD,KAAKoM,eAAe,gBACtB,OAAOpM,KAAKwyD,aAGd,MAAMR,EAAO,CAAC,EAMd,OALAhyD,KAAK2pC,aAAa/V,IAChBo+B,EAAKnnD,OAAOyS,aAAasW,EAAKtI,WAAa,CAAC,IAE9CtrB,KAAKwyD,aAAeroD,OAAOyP,KAAKo4C,GAEzBhyD,KAAKwyD,YACd,CAEAvW,aAAAA,GACE,IAAKj8C,KAAKoM,eAAe,eACvB,IACEpM,KAAKyyD,YAAc,IAAI7P,GACrB5iD,KAAKo7C,uBAAuB1E,YAC5B,IAAIhL,EAAAA,QA/tBK,QAiuBX1rC,KAAKyyD,YAAYjP,SAASxjD,KAC5B,CAAE,MAAO6Y,GACPwT,EAAOnC,KAAK,gCACZlqB,KAAKyyD,YAAc,IACrB,CAGF,OAAOzyD,KAAKyyD,WACd,CASAC,UAAAA,CAAWC,EAAUC,EAAU5pC,EAAO6pC,GACpC,MAAM,OAAEryD,GAAWmyD,EACnB,IAAK,IAAIrqD,EAAI,EAAGA,EAAI9H,IAAU8H,EAAG,CAC/B,MAAMwqD,EAAOH,EAASrqD,GACtBuqD,EAAQC,EAAM9pC,GACd4pC,EAASpmD,KAAKsmD,EAChB,CACF,CAIAC,aAAAA,CAAcC,GAEZhzD,KAAKkpD,QAAU,GACflpD,KAAKitD,YAAc,GACnBjtD,KAAKktD,SAAW,GAChBltD,KAAKmtD,QAAU,GACfntD,KAAKotD,WAAa,GAClBptD,KAAKooC,OAAS,GACdpoC,KAAK0vC,UAAY,GACjB1vC,KAAKk5C,OAAS,GACdl5C,KAAKstD,SAAW,GAEhB,MAAM/hD,EAAOvL,KACb,IAAIizD,EAAW,EACXC,EAAW,EACXC,EAAc,EACdC,EAAY,EACZC,EAAgB,EAEpB,SAAS7W,EAAY5oB,EAAM0/B,GACzB1/B,EAAKgO,QAAU0xB,EACf1/B,EAAKxjB,OAASkjD,CAChB,CAEA,SAASC,EAAY1/B,EAAMy/B,GACzBz/B,EAAKzL,QAAUkrC,CACjB,CAEA,SAASE,EAAe/xB,EAAS6xB,GAC/B7xB,EAAQrZ,QAAUkrC,CACpB,CAEA,SAASG,EAAa3rB,EAAOwrB,GAC3BxrB,EAAM2H,SAAWlkC,EACjBu8B,EAAM1f,QAAUkrC,CAClB,CAEA,SAASI,EAAiBlS,EAAW8R,GACnC9R,EAAU/R,SAAWlkC,EACrBi2C,EAAUp5B,QAAUkrC,CACtB,CAKA,SAASK,IACT,CAEA,IAAK,IAAIrrD,EAAI,EAAGA,EAAI0qD,EAAUxyD,SAAU8H,EAAG,CACzC,MAAMwH,EAAIkjD,EAAU1qD,GACpBtI,KAAK0yD,WAAW5iD,EAAEs4B,OAAQpoC,KAAKooC,OAAQ6qB,EAAUzW,GACjDx8C,KAAK0yD,WAAW5iD,EAAEopC,OAAQl5C,KAAKk5C,OAAQga,EAAUK,GACjDvzD,KAAK0yD,WAAW5iD,EAAE4/B,UAAW1vC,KAAK0vC,UAAWyjB,EAAaK,GAC1DxzD,KAAK0yD,WAAW5iD,EAAEo5C,QAASlpD,KAAKkpD,QAASkK,EAAWK,GACpDzzD,KAAK0yD,WAAW5iD,EAAEq9C,QAASntD,KAAKmtD,QAAS,EAAGwG,GAC5C3zD,KAAK0yD,WAAW5iD,EAAEo9C,SAAUltD,KAAKktD,SAAU,EAAGyG,GAC9C3zD,KAAK0yD,WAAW5iD,EAAEw9C,SAAUttD,KAAKstD,SAAU,EAAGqG,GAC9C3zD,KAAK0yD,WAAW5iD,EAAEm9C,YAAajtD,KAAKitD,YAAaoG,EAAeK,GAChE1zD,KAAK0yD,WAAW5iD,EAAEs9C,WAAYptD,KAAKotD,WAAY,EAAGuG,GAElD,IAAK,MAAMC,KAAM9jD,EAAEu9C,cACbv9C,EAAEu9C,cAAcjhD,eAAewnD,KACjC5zD,KAAKqtD,cAAcuG,GAAM9jD,EAAEu9C,cAAcuG,IAI7CX,GAAYnjD,EAAEs4B,OAAO5nC,OACrB0yD,GAAYpjD,EAAEopC,OAAO14C,OACrB2yD,GAAerjD,EAAE4/B,UAAUlvC,OAC3B4yD,GAAatjD,EAAEo5C,QAAQ1oD,OACvB6yD,GAAiBvjD,EAAEm9C,YAAYzsD,MACjC,CAEAR,KAAKowD,gBACP,CAUAhoD,IAAAA,GACE,MAAMyrD,EAAQ,IAAIlL,GAAsB3oD,MAElCotD,EAAaptD,KAAKotD,WAAa,GAC/BoD,EAAUxwD,KAAKktD,SAAW,GAC1BuD,EAASzwD,KAAKmtD,QAAU,GAExB2G,EAAY1jD,IAChB,IAAI2jD,EAAOtD,EAAOrgD,GAIlB,OAHK2jD,IACHA,EAAOtD,EAAOrgD,GAAS,IAAI4jD,GAAMnpD,OAAOuF,GAAQ,IAE3C2jD,CAAI,EAGb,IAAIE,EACAC,EACAC,EAAiB,EACjBC,EAAe,KACnB,IAAK,IAAI9rD,EAAI,EAAGC,EAAIvI,KAAK0vC,UAAUlvC,OAAQ8H,EAAIC,IAAKD,EAAG,CACrD,MAAM+rD,EAAUR,EAAMjL,IAAItgD,GACpBgsD,EAAat0D,KAAK0vC,UAAUpnC,GAC5BisD,EAAgBV,EAAMhL,OAAOvgD,GAGnC,GAAI+rD,IAAYJ,GAAYM,IAAkBL,EAAgB,CAC5DI,EAAWjsB,WAAa+rB,EACpBA,IACFA,EAAajjB,KAAOmjB,GAElBF,aAAwBI,IAC1BJ,EAAa5zD,SAEf,QACF,CAGA,MAAMsyC,EAAaga,GAAcuH,GAC3BI,EAAW1H,GAAQsH,GACzB,GAAIA,IAAY3L,GAAc7W,OAAQ,CACpC,MAAM6iB,EAAWZ,EAASS,GAC1BH,EAAe,IAAI1gB,GAAOghB,EAAUJ,EAAYA,EAAY,EAAG,KAAM,MACrEI,EAASlhB,UAAU4gB,EACrB,WAA0BxxC,IAAfkwB,GACTqhB,IACAC,EAAe,IAAII,GAAM1hB,EAAYwhB,EAAYA,EAAYH,EAAgBtpD,OAAOspD,GAAiB,GAAI,GACzG3D,EAAQhkD,KAAK4nD,IAEbA,OADsBxxC,IAAb6xC,EACM,IAAIxjB,GAAkBwjB,EAAUH,EAAYA,GAE5C,KAGbF,GACFhH,EAAW5gD,KAAK4nD,GAGlBE,EAAWjsB,WAAa+rB,EAExBH,EAAWI,EACXH,EAAiBK,CACnB,CAEAv0D,KAAKmtD,QAAUsD,EAAOkE,QAAQ9L,IAAW,GAC3C,EAGFmE,GAAQ7gD,UAAUyb,GAAK,UACvBolC,GAAQ7gD,UAAUogB,KAAO,GAEzB,YCt6BA,SAASqoC,GAASt0D,GAChB,IAAI2M,EAAI,EAER,IADA3M,EAAKA,EAAI,GAAM,EACRA,GACL2M,IAAM,EACN3M,IAAM,EAER,OAAO2M,CACT,CAiBA,MAAM4nD,GACJvhD,WAAAA,CAAYxK,EAAMgsD,EAAYjS,EAAKkS,EAASpiC,EAAMqiC,GAuBhD,OAtBAh1D,KAAK+iD,KAAOF,EAAIzc,QAChBpmC,KAAKi1D,QAAUxsD,KAAKgM,IAAIhM,KAAKmN,MAAMm/C,GAAW,GAAI,GAClD/0D,KAAKk1D,YAAcF,EAEfF,aAAsBlrD,OACvB5J,KAAKm1D,MAAOn1D,KAAKo1D,MAAOp1D,KAAKq1D,OAASP,GAEvC90D,KAAKm1D,MAAQL,EAAW5+C,EACxBlW,KAAKo1D,MAAQN,EAAWr6C,EACxBza,KAAKq1D,MAAQP,EAAWh5C,GAE1B9b,KAAKm1D,MAAQ1sD,KAAKgM,IAAIhM,KAAKmN,MAAM5V,KAAKm1D,OAAQ,GAC9Cn1D,KAAKo1D,MAAQ3sD,KAAKgM,IAAIhM,KAAKmN,MAAM5V,KAAKo1D,OAAQ,GAC9Cp1D,KAAKq1D,MAAQ5sD,KAAKgM,IAAIhM,KAAKmN,MAAM5V,KAAKq1D,OAAQ,GAE9Cr1D,KAAKs1D,aAAet1D,KAAKi1D,QAAUj1D,KAAKm1D,MACxCn1D,KAAKu1D,eAAiBv1D,KAAKs1D,aAAet1D,KAAKo1D,MAC/Cp1D,KAAKw1D,eAAiBx1D,KAAKu1D,eAAiBv1D,KAAKq1D,MAEjDr1D,KAAKy1D,MAAQ9iC,GAAQtsB,EAAMmpB,cAAc1mB,EAAM9I,KAAKw1D,gBAG5Cx1D,KAAKi1D,SACX,KAAK,EACH,MAEF,KAAK,EACHj1D,KAAK01D,SAAW,SAAUx/C,EAAGuE,EAAGqB,GAC9B,MAAMwK,EAAMpQ,EAAIlW,KAAKi1D,QAAUx6C,EAAIza,KAAKs1D,aAAex5C,EAAI9b,KAAKu1D,eAChE,MAAO,CAACv1D,KAAKy1D,MAAMnvC,GAAMtmB,KAAKy1D,MAAMnvC,EAAM,GAC5C,EAEAtmB,KAAK21D,SAAW,SAAUz/C,EAAGuE,EAAGqB,EAAG3F,EAAGwE,GACpC,MAAM2L,EAAMpQ,EAAIlW,KAAKi1D,QAAUx6C,EAAIza,KAAKs1D,aAAex5C,EAAI9b,KAAKu1D,eAChEv1D,KAAKy1D,MAAMnvC,GAAOnQ,EAClBnW,KAAKy1D,MAAMnvC,EAAM,GAAK3L,CACxB,EAEA3a,KAAK41D,SAAW,SAAU1/C,EAAGuE,EAAGqB,EAAG3F,EAAGwE,GACpC,MAAM2L,EAAMpQ,EAAIlW,KAAKi1D,QAAUx6C,EAAIza,KAAKs1D,aAAex5C,EAAI9b,KAAKu1D,eAChEv1D,KAAKy1D,MAAMnvC,IAAQnQ,EACnBnW,KAAKy1D,MAAMnvC,EAAM,IAAM3L,CACzB,EACA,MAEF,KAAK,EACH3a,KAAK01D,SAAW,SAAUx/C,EAAGuE,EAAGqB,GAC9B,MAAMwK,EAAMpQ,EAAIlW,KAAKi1D,QAAUx6C,EAAIza,KAAKs1D,aAAex5C,EAAI9b,KAAKu1D,eAChE,MAAO,CAACv1D,KAAKy1D,MAAMnvC,GAAMtmB,KAAKy1D,MAAMnvC,EAAM,GAAItmB,KAAKy1D,MAAMnvC,EAAM,GACjE,EAEAtmB,KAAK21D,SAAW,SAAUz/C,EAAGuE,EAAGqB,EAAG3F,EAAGwE,EAAG7K,GACvC,MAAMwW,EAAMpQ,EAAIlW,KAAKi1D,QAAUx6C,EAAIza,KAAKs1D,aAAex5C,EAAI9b,KAAKu1D,eAChEv1D,KAAKy1D,MAAMnvC,GAAOnQ,EAClBnW,KAAKy1D,MAAMnvC,EAAM,GAAK3L,EACtB3a,KAAKy1D,MAAMnvC,EAAM,GAAKxW,CACxB,EAEA9P,KAAK41D,SAAW,SAAU1/C,EAAGuE,EAAGqB,EAAG3F,EAAGwE,EAAG7K,GACvC,MAAMwW,EAAMpQ,EAAIlW,KAAKi1D,QAAUx6C,EAAIza,KAAKs1D,aAAex5C,EAAI9b,KAAKu1D,eAChEv1D,KAAKy1D,MAAMnvC,IAAQnQ,EACnBnW,KAAKy1D,MAAMnvC,EAAM,IAAM3L,EACvB3a,KAAKy1D,MAAMnvC,EAAM,IAAMxW,CACzB,EACA,MAEF,QACE,MAAM,IAAIzE,MAAM,oCAEtB,CAGAqqD,QAAAA,CAASx/C,EAAGuE,EAAGqB,GACb,OAAO9b,KAAKy1D,MAAMv/C,EAAIuE,EAAIza,KAAKs1D,aAAex5C,EAAI9b,KAAKu1D,eACzD,CAGAI,QAAAA,CAASz/C,EAAGuE,EAAGqB,EAAG5R,GAChBlK,KAAKy1D,MAAMv/C,EAAIuE,EAAIza,KAAKs1D,aAAex5C,EAAI9b,KAAKu1D,gBAAkBrrD,CACpE,CAGA0rD,QAAAA,CAAS1/C,EAAGuE,EAAGqB,EAAG5R,GAChBlK,KAAKy1D,MAAMv/C,EAAIuE,EAAIza,KAAKs1D,aAAex5C,EAAI9b,KAAKu1D,iBAAmBrrD,CACrE,CAEA2rD,aAAAA,GACE,MAAO,CAAC71D,KAAKm1D,MAAOn1D,KAAKo1D,MAAOp1D,KAAKq1D,MACvC,CAEAS,MAAAA,GACE,OAAO91D,KAAK+iD,IACd,CAEAgT,aAAAA,GACE,OAAO/1D,KAAKk1D,WACd,CAEAc,WAAAA,GACE,MAAMC,EAAU,IAAIvqB,EAAAA,QACpB1rC,KAAK+iD,KAAKC,QAAQiT,GAClB,MAAM3mC,EAAM,IAAIoc,EAAAA,QAIhB,OAHApc,EAAIpZ,EAAIlW,KAAKm1D,MAAQ,EAAIc,EAAQ//C,GAAKlW,KAAKm1D,MAAQ,GAAK,EACxD7lC,EAAI7U,EAAIza,KAAKo1D,MAAQ,EAAIa,EAAQx7C,GAAKza,KAAKo1D,MAAQ,GAAK,EACxD9lC,EAAIxT,EAAI9b,KAAKq1D,MAAQ,EAAIY,EAAQn6C,GAAK9b,KAAKq1D,MAAQ,GAAK,EACjD/lC,CACT,CAEA4mC,eAAAA,GACE,GAAqB,IAAjBl2D,KAAKi1D,QAEP,OAAO,KAIT,MAAMp9B,EAAW,IAAIg9B,GAAO36C,aAAc,CAACla,KAAKm1D,MAAOn1D,KAAKo1D,MAAOp1D,KAAKq1D,OAAQr1D,KAAK+iD,KAAM,GAGrFoT,EAAKn2D,KAAKg2D,cAIVI,EAAK,IAAI1qB,EAAAA,SAAe,GAAMyqB,EAAGjgD,GAAI,GAAMigD,EAAG17C,GAAI,GAAM07C,EAAGr6C,GAGjE,SAAS/G,EAAM7K,EAAKwK,EAAKD,GACvB,OAAOhM,KAAKiM,IAAID,EAAKhM,KAAKgM,IAAIC,EAAKxK,GACrC,CAEA,MAAMmsD,EAAQr2D,KAAKm1D,MACbmB,EAAQt2D,KAAKo1D,MACbmB,EAAQv2D,KAAKq1D,MACbmB,EAASx2D,KAAKy1D,MAEpB,SAASgB,EAAYvgD,EAAGuE,EAAGqB,GACzB,OAAO06C,EAAO16C,EAAIu6C,EAAQC,EAAQ77C,EAAI47C,EAAQngD,EAChD,CAEA,IAAK,IAAIwgD,EAAK,EAAGA,EAAKH,IAASG,EAAI,CACjC,MAAMC,EAAK5hD,EAAM2hD,EAAK,EAAG,EAAGH,EAAQ,GAC9BK,EAAK7hD,EAAM2hD,EAAK,EAAG,EAAGH,EAAQ,GAEpC,IAAK,IAAIM,EAAK,EAAGA,EAAKP,IAASO,EAAI,CACjC,MAAMC,EAAK/hD,EAAM8hD,EAAK,EAAG,EAAGP,EAAQ,GAC9BS,EAAKhiD,EAAM8hD,EAAK,EAAG,EAAGP,EAAQ,GAEpC,IAAK,IAAIU,EAAK,EAAGA,EAAKX,IAASW,EAAI,CACjC,MAAMC,EAAKliD,EAAMiiD,EAAK,EAAG,EAAGX,EAAQ,GAC9Ba,EAAKniD,EAAMiiD,EAAK,EAAG,EAAGX,EAAQ,GAYpCx+B,EAAS89B,SACPqB,EACAH,EACAH,GACCD,EAAYS,EAAIL,EAAIH,GAAMD,EAAYQ,EAAIJ,EAAIH,IAAON,EAAGlgD,GACxDugD,EAAYO,EAAID,EAAIL,GAAMD,EAAYO,EAAIF,EAAIJ,IAAON,EAAG37C,GACxDg8C,EAAYO,EAAIH,EAAID,GAAMH,EAAYO,EAAIH,EAAIF,IAAOP,EAAGt6C,EAE7D,CACF,CACF,CAEA,OAAO+b,CACT,CAEAwP,SAAAA,GACE,MAAM1U,EAAO3yB,KAAKy1D,MAGlB,IAAI/gD,EAAMie,EAAK,GACXle,EAAMke,EAAK,GACf,IAAK,IAAIrqB,EAAI,EAAGA,EAAIqqB,EAAKnyB,SAAU8H,EACjCoM,EAAMjM,KAAKiM,IAAIA,EAAKie,EAAKrqB,IACzBmM,EAAMhM,KAAKgM,IAAIA,EAAKke,EAAKrqB,IAG3B,MAAMqR,EAAI,GAAOlF,EAAMC,GACvB,GAAU,IAANiF,EAKJ,IAAK,IAAIrR,EAAI,EAAGA,EAAIqqB,EAAKnyB,SAAU8H,EACjCqqB,EAAKrqB,GAAKqR,GAAKgZ,EAAKrqB,GAAKoM,EAE7B,CAEAyiD,qBAAAA,GACE,MAAO,CAACn3D,KAAKm1D,MAAQ,EAAGn1D,KAAKo1D,MAAQ,EACvC,CAEAgC,iBAAAA,GACE,IAAIC,EAAS5uD,KAAKsS,KAAKtS,KAAK6uC,KAAKt3C,KAAKq1D,MAAQr1D,KAAKo1D,MAAQp1D,KAAKm1D,QAE5D7xC,EAAQ+zC,GAAUr3D,KAAKm1D,MAAQ,GAAK,EACxC7xC,EAAQsxC,GAAStxC,GACjB+zC,EAAS5uD,KAAKmN,MAAM0N,GAAStjB,KAAKm1D,MAAQ,IAE1C,MAAMmC,EAAS7uD,KAAKsS,KAAK/a,KAAKq1D,MAAQgC,GACtC,IAAIzxC,EAAS0xC,GAAUt3D,KAAKo1D,MAAQ,GAAK,EACzCxvC,EAASgvC,GAAShvC,GAElB,MAAM+M,EAAO,IAAIvZ,WAAWkK,EAAQsC,GAEpC,IAAIuK,EACAC,EACJ,IAAK,IAAImnC,EAAU,EAAGA,EAAUD,IAAUC,EAExC,IAAK,IAAI7gD,EAAM,EAAGA,EAAM1W,KAAKo1D,QAAS1+C,EAAK,CACzCyZ,EAAMonC,EAAUF,EAASr3D,KAAKu1D,eAAiB7+C,EAAM1W,KAAKs1D,aAC1DllC,EAAM9M,GAASi0C,GAAWv3D,KAAKo1D,MAAQ,GAAK1+C,GAE5C,IAAK,IAAIjB,EAAI,EAAGA,EAAI4hD,IAAU5hD,EAAG,CAE/B,IAAK,IAAIS,EAAI,EAAGA,EAAIlW,KAAKm1D,QAASj/C,EAChCyc,EAAKvC,KAAS,IAAQpwB,KAAKy1D,MAAMtlC,KAInCwC,EAAKvC,KAAS,IAAQpwB,KAAKy1D,MAAMtlC,EAAM,GAEnC1a,EAAI4hD,EAAS,IAEflnC,GAAOnwB,KAAKu1D,eAAiBv1D,KAAKs1D,aAElC3iC,EAAKvC,KAAS,IAAQpwB,KAAKy1D,MAAMtlC,GAErC,CACF,CAIF,IAAK,IAAIonC,EAAU,EAAGA,EAAUD,IAAUC,EAAS,CAEjDpnC,EAAM7M,GAASi0C,GAAWv3D,KAAKo1D,MAAQ,GAAKp1D,KAAKo1D,MAAQ,GACzDhlC,EAAMD,EAAM7M,EACZ,IAAK,IAAIpN,EAAI,EAAGA,EAAIoN,IAASpN,EAC3Byc,EAAKvC,KAASuC,EAAKxC,KAErB,GAAIonC,EAAUD,EAAS,EAAG,CAExBnnC,EAAM7M,GAASi0C,EAAU,IAAMv3D,KAAKo1D,MAAQ,GAC5ChlC,EAAMD,EAAM7M,EACZ,IAAK,IAAIpN,EAAI,EAAGA,EAAIoN,IAASpN,EAC3Byc,EAAKvC,KAASuC,EAAKxC,IAEvB,CACF,CAEA,MAAMqnC,EAAU,IAAI9rB,EAAAA,YAClB/Y,EACArP,EACAsC,EACA8lB,EAAAA,gBACAA,EAAAA,iBACAA,EAAAA,UACAA,EAAAA,oBACAA,EAAAA,oBACAA,EAAAA,aACAA,EAAAA,cAGF,OADA8rB,EAAQC,aAAc,EACfD,CACT,CAQAE,OAAAA,GACE,OAAO13D,KAAKy1D,KACd,CAEAkC,YAAAA,CAAazhD,EAAGuE,EAAGqB,GACjB,OAAO5F,EAAIlW,KAAKi1D,QAAUx6C,EAAIza,KAAKs1D,aAAex5C,EAAI9b,KAAKu1D,cAC7D,CAEAqC,UAAAA,GACE,OAAO53D,KAAKi1D,OACd,CAEA4C,UAAAA,GACE,OAAO73D,KAAKs1D,YACd,CAEAwC,UAAAA,GACE,OAAO93D,KAAKu1D,cACd,EAGFV,GAAO1oD,UAAUyb,GAAK,SAEtB,YC1SA,MCnBA,IACE4Z,KAAI,GACJ2B,QAAO,GACPuB,KAAI,GACJoM,QAAO,GACP3E,YAAW,GACXoiB,MAAK,GACLiG,MAAK,GACL9gB,OAAM,GACNsgB,MAAK,GACL+D,OAAM,GACNC,SAAQ,GACRhL,QAAO,GACP6H,OAAM,GACNjS,WAAU,GACVrM,UAAS,GACT0hB,SDvBF,MACE3kD,WAAAA,CAAYk8B,EAASjjB,EAAMnc,GACzBpQ,KAAKwvC,QAAUA,EACfxvC,KAAKusB,KAAOA,GAAQ,GACpBvsB,KAAKiwC,SAAW,GAChBjwC,KAAK+hC,KAAO,EACZ/hC,KAAKoQ,MAAQA,IAAU,CACzB,CAEA4gC,cAAAA,CAAepO,GACb,MAAM,SAAEqN,GAAajwC,KACrB,IAAK,IAAIsI,EAAI,EAAGC,EAAI0nC,EAASzvC,OAAQ8H,EAAIC,IAAKD,EAC5Cs6B,EAAQqN,EAAS3nC,GAErB,CAEAyhC,WAAAA,GACE,IAAIhI,EAAO,WACX,MAAM,SAAEkO,GAAajwC,KACrB,IAAK,IAAIsI,EAAI,EAAGC,EAAI0nC,EAASzvC,OAAQ8H,EAAIC,IAAKD,EAC5Cy5B,GAAQkO,EAAS3nC,GAAG6/B,MAEtBnoC,KAAK+hC,KAAOA,CACd,IE3BF,MAAMm2B,WAAoBxsB,EAAAA,SACxBp4B,WAAAA,CAAY0M,GACV0M,QACA,MAAMnhB,EAAOvL,KACbA,KAAKm4D,SAAWn4C,EAChBhgB,KAAKm4D,SAASvzC,MAAMT,SAAW,WAC/BnkB,KAAKmhB,iBAAiB,WAAW,KACE,OAA7B5V,EAAK4sD,SAAS/xC,YAChB7a,EAAK4sD,SAAS/xC,WAAWC,YAAY9a,EAAK4sD,SAC5C,GAEJ,CAEAC,UAAAA,GACE,OAAOp4D,KAAKm4D,QACd,CAOAE,eAAAA,CAAgBC,GACd,MAAM9zC,EAAKxkB,KAAKo4D,aAChB,GAAW,OAAP5zC,EACF,OAEF,GAAe,IAAX8zC,EAEF,YADA9zC,EAAGI,MAAMkE,QAAU,QAGrBtE,EAAGI,MAAMkE,QAAU,SACnB,MAAMyvC,EAAK,EAAMD,EACXt0C,EAAMu0C,EAAGhyD,WACTiyD,EAAa,IAALD,EACd/zC,EAAGI,MAAM6zC,QAAUz0C,EACnBQ,EAAGI,MAAM+vC,OAAS,iBAAiB6D,IACrC,CAEApyB,KAAAA,GACE,MAAM5uB,EAAM,IAAI0gD,GAAYl4D,KAAKm4D,UAEjC,OADA3gD,EAAIC,KAAKzX,MACFwX,CACT,EAGF,YClDA,MAAMkhD,WAAgBhtB,EAAAA,MACpBitB,OAAAA,CAAQC,EAAWC,GACjB,IAAK74D,KAAK84D,QACR,OAGF,MAAM,SAAEC,GAAa/4D,KACrB,IAAK,IAAIsI,EAAI,EAAGC,EAAIwwD,EAASv4D,OAAQ8H,EAAIC,IAAKD,EAC5CywD,EAASzwD,GAAGqwD,QAAQC,EAAWC,EAEnC,CAEAG,YAAAA,CAAaj3B,EAAMk3B,GACjB,MAAM,SAAEF,GAAa/4D,KACrB,IAAK,IAAIsI,EAAI,EAAGC,EAAIwwD,EAASv4D,OAAQ8H,EAAIC,IAAKD,EACxCywD,EAASzwD,GAAG0wD,cACdD,EAASzwD,GAAG0wD,aAAaj3B,EAAMk3B,EAGrC,CAEAC,aAAAA,CAAcn3B,EAAMk3B,GAClB,MAAM,SAAEF,GAAa/4D,KACrB,IAAK,IAAIsI,EAAI,EAAGC,EAAIwwD,EAASv4D,OAAQ8H,EAAIC,IAAKD,EACxCywD,EAASzwD,GAAG4wD,eACdH,EAASzwD,GAAG4wD,cAAcn3B,EAAMk3B,EAGtC,CAEAE,OAAAA,GACE,OAAgC,IAAzBn5D,KAAK+4D,SAASv4D,MACvB,CAEA8vC,aAAAA,CAAcC,GACZ,MAAM,SAAEwoB,GAAa/4D,KACrB,IAAK,IAAIsI,EAAI,EAAGC,EAAIwwD,EAASv4D,OAAQ8H,EAAIC,IAAKD,EACxCywD,EAASzwD,GAAGgoC,eACdyoB,EAASzwD,GAAGgoC,cAAcC,EAGhC,CAEA6oB,SAAAA,CAAUr3B,EAAMk3B,GACd,MAAMI,EAAc,IACd,SAAEN,GAAa/4D,KACrB,IAAK,IAAIsI,EAAI,EAAGC,EAAIwwD,EAASv4D,OAAQ8H,EAAIC,IAAKD,EACxCywD,EAASzwD,GAAG8wD,WACdxvD,MAAMuC,UAAUK,KAAK6B,MAAMgrD,EAAaN,EAASzwD,GAAG8wD,UAAUr3B,EAAMk3B,IAGxE,OAAOI,CACT,EAGF,Y,gRChDMC,GAAS,CACbvuC,QAAS,EAAGwuC,OAAQ,EAAGC,YAAa,EAAGC,oBAAqB,EAAGC,eAAgB,EAAGC,oBAAqB,EAAGC,UAAW,GAGjHC,GAAmB,CACvBP,GAAOvuC,QAASuuC,GAAOE,aAGzB9tB,EAAAA,SAAev/B,UAAU2tD,eAAiB,WACxC95D,KAAKmkB,SAASxd,IAAI,EAAG,EAAG,GACxB3G,KAAK+5D,WAAWpzD,IAAI,EAAG,EAAG,EAAG,GAC7B3G,KAAKqI,MAAM1B,IAAI,EAAG,EAAG,EACvB,EAGA+kC,EAAAA,SAAev/B,UAAU6tD,2BAA6B,WACjC,MAAfh6D,KAAKoT,QACPpT,KAAKoT,OAAO4mD,6BAEdh6D,KAAKi6D,mBACP,EAEAvuB,EAAAA,SAAev/B,UAAU+tD,wBAA2B,WAClD,MAAMC,EAAsB,IAAIzuB,EAAAA,QAEhC,OAAO,SAAUhb,GACXA,aAAkBgb,EAAAA,WACpByuB,EAAoB1iD,KAAKzX,KAAKo6D,aAAaC,SAC3CF,EAAoBG,SAAS5pC,EAAO0pC,aACpC1pC,EAAO4nB,OAAO7gC,KAAK0iD,GACnBzpC,EAAO4nB,OAAOiiB,UAAU7pC,EAAOvM,SAAUuM,EAAOqpC,WAAYrpC,EAAOroB,OACnErI,KAAKyJ,IAAIinB,GAEb,CACF,CAZoD,GAepDgb,EAAAA,cAAoBv/B,UAAUquD,gBAAmB,WAC/C,MAAMC,EAAY,IAAI/uB,EAAAA,kBAAwB,CAAE/R,aAAa,EAAM8+B,QAAS,EAAKiC,YAAY,IAEvFC,EAAS,IAAIjvB,EAAAA,MACbkvB,EAAQ,IAAIlvB,EAAAA,KAAW,IAAIA,EAAAA,cAAoB,IAAM,KAAO+uB,GAClEE,EAAOlxD,IAAImxD,GAEX,MAAMC,EAAU,IAAInvB,EAAAA,oBAA0B,GAAK,GAAK,IAAM,IAAM,IAAO,KAG3E,OAFAmvB,EAAQ12C,SAASrI,EAAI,IAEd,WACL9b,KAAK86D,OAAOH,EAAQE,EACtB,CACF,CAbiD,GAejDnvB,EAAAA,cAAoBv/B,UAAU4uD,iBAAoB,WAChD,MAAMJ,EAAS,IAAIjvB,EAAAA,MACbkvB,EAAQ,IAAIlvB,EAAAA,KAAW,IAAIA,EAAAA,cAAoB,EAAK,IAC1DivB,EAAOlxD,IAAImxD,GAEX,MAAMC,EAAU,IAAInvB,EAAAA,oBAA0B,GAAK,GAAK,IAAM,IAAM,IAAO,KAG3E,OAFAmvB,EAAQ12C,SAASrI,EAAI,IAEd,SAAU9T,GACf4yD,EAAM5yD,SAAWA,EACjBhI,KAAK86D,OAAOH,EAAQE,EACtB,CACF,CAZkD,GAclDnvB,EAAAA,QAAcv/B,UAAU6uD,WAAc,WACpC,MAAMC,EAAW,IAAIvvB,EAAAA,QACrB,OAAO,WACL,OAAOuvB,EAASC,OAAOl7D,KACzB,CACF,CALsC,GAOtC0rC,EAAAA,QAAcv/B,UAAUgvD,mBAAqB,SAAUvmD,EAAO40C,EAAQ3uC,GACpE,IAAKjG,IAAU40C,GAAUA,EAAS,EAChC,OAAO50C,EAETiG,EAAIA,GAAK,EACT,MAAMhC,EAAI7Y,KAAKo7D,SACf,IAAK,IAAI9yD,EAAI,EAAGA,EAAIsM,EAAMpU,OAAQ8H,GAAKkhD,EAAQ,CAC7C,MAAMtzC,EAAItB,EAAMtM,GACVmS,EAAI7F,EAAMtM,EAAI,GACdwT,EAAIlH,EAAMtM,EAAI,GAEd+yD,EAAQ,GAAKxiD,EAAE,GAAK3C,EAAI2C,EAAE,GAAK4B,EAAI5B,EAAE,IAAMiD,EAAIjD,EAAE,KAEvDjE,EAAMtM,IAAMuQ,EAAE,GAAK3C,EAAI2C,EAAE,GAAK4B,EAAI5B,EAAE,GAAKiD,EAAIjD,EAAE,IAAMgC,GAAKwgD,EAC1DzmD,EAAMtM,EAAI,IAAMuQ,EAAE,GAAK3C,EAAI2C,EAAE,GAAK4B,EAAI5B,EAAE,GAAKiD,EAAIjD,EAAE,IAAMgC,GAAKwgD,EAC9DzmD,EAAMtM,EAAI,IAAMuQ,EAAE,GAAK3C,EAAI2C,EAAE,GAAK4B,EAAI5B,EAAE,IAAMiD,EAAIjD,EAAE,IAAMgC,GAAKwgD,CACjE,CACA,OAAOzmD,CACT,EAEA,MAAM0mD,WAA2B5vB,EAAAA,kBAC/Bp4B,WAAAA,CAAYvK,QACc6Z,IAApB7Z,EAAOwyD,WACTxyD,EAAOwyD,SAAW,CAAC,GAErBxyD,EAAOwyD,SAASC,OAAS,CAAE1yD,KAAM,IAAKmgB,MAAO,MAC7ClgB,EAAO0yD,aAAeC,GACtB3yD,EAAO4wB,aAAc,EACrB5wB,EAAO4yD,WAAY,EACnB5yD,EAAO2xD,YAAa,EACpBhuC,MAAM3jB,EACR,EA4OF,SAAS6yD,GAAUlrC,GACjBA,EAAO5O,UAAUtK,KACXA,aAAek0B,EAAAA,MAAcl0B,aAAek0B,EAAAA,cAAsBl0B,aAAek0B,EAAAA,OACnFl0B,EAAIqkD,SAASC,SACf,IAdJ,SAAwBprC,GACtB,MAAM,SAAEqoC,GAAaroC,EACrB,IAAK,IAAIpoB,EAAI,EAAGC,EAAIwwD,EAASv4D,OAAQ8H,EAAIC,IAAKD,EAAG,CAC/C,MAAM6K,EAAQ4lD,EAASzwD,GACvB6K,EAAMC,OAAS,KACfD,EAAMyW,cAAc,CAAE9gB,KAAM,WAC9B,CACA4nB,EAAOqoC,SAAW,EACpB,CAQEgD,CAAerrC,EACjB,CAhPAgb,EAAAA,cAAoBv/B,UAAU6vD,wBAA2B,WACvD,MAAMvB,EAAY,IAAIa,GAAmB,CACvCC,SAAU,CAAE9C,QAAS,CAAE3vD,KAAM,IAAKmgB,MAAO,IACzCgzC,e,yOACAtiC,aAAa,IAGf,OAAO,SAAU6hC,EAAQ/C,GACvBgC,EAAUc,SAASC,OAAOvyC,MAAQuyC,EAClCf,EAAU9gC,YAAe8+B,EAAU,EACnCgC,EAAUc,SAAS9C,QAAQxvC,MAAQwvC,EACnCz4D,KAAK+6D,iBAAiBN,EACxB,CACF,CAbyD,GAezD/uB,EAAAA,cAAoBv/B,UAAU+vD,sCAAyC,WACrE,MAAMzB,EAAY,IAAIa,GAAmB,CACvCC,SAAU,CAAEY,KAAM,CAAErzD,KAAM,IAAKmgB,MAAO,IACtCgzC,e,8WAGF,OAAO,SAAUT,EAAQW,GACvB1B,EAAUc,SAASC,OAAOvyC,MAAQuyC,EAClCf,EAAUc,SAASY,KAAKlzC,MAAQkzC,EAChCn8D,KAAK+6D,iBAAiBN,EACxB,CACF,CAXuE,GAgBvE/uB,EAAAA,kBAAwBv/B,UAAUiwD,cAAgB,SAAUC,GACtDr8D,KAAKs8D,QAAU,EACjBt8D,KAAKu8D,IAAMF,EAEXr8D,KAAKu8D,IAAM7wB,EAAAA,UAAgB8wB,SAAS,EAAI/zD,KAAKg0D,KAAKh0D,KAAKi0D,IAAsC,GAAlChxB,EAAAA,UAAgBixB,SAASN,IAAgBr8D,KAAKs8D,QAE7G,EAMA5wB,EAAAA,aAAmBv/B,UAAUywD,gBAAkB,SAAUC,EAAQR,GAC/D,MAAMS,EAAiBD,EAAOP,OACxBS,EAAcF,EAAON,IAE3BM,EAAOP,OAASQ,EAAiB,EACjCD,EAAOT,cAAcC,GACrBQ,EAAOG,yBAEPh9D,KAAKqnB,OAAOw1C,GAEZA,EAAOP,OAASQ,EAChBD,EAAON,IAAMQ,EACbF,EAAOG,wBACT,EAMAtxB,EAAAA,kBAAwBv/B,UAAU8wD,iBAAmB,SAAU15C,EAAQ84C,GACrEr8D,KAAKmkB,SAASrI,EAAIyH,EAAS9a,KAAKoK,IAAI,GAAM64B,EAAAA,UAAgBixB,SAASN,GACrE,EAQA3wB,EAAAA,UAAgBv/B,UAAU+wD,uBAAyB,SAAUC,EAAQN,EAAQhjC,EAAWujC,GACtF,MAAMvE,EAAa74D,KAAKq9D,gBAAgBF,GAAQ,GAChD,GAA0B,IAAtBtE,EAAWr4D,OACb,OAAO,KAIT,MAAM88D,EAAY70D,KAAKiM,IAAImoD,EAAOU,KAAM1jC,GACxC,IAAIvxB,EACA2E,EAAI4rD,EAAW,GACnB,MAAMv4D,EAAI,IAAIorC,EAAAA,QACd,IAAKpjC,EAAI,EAAGA,EAAIuwD,EAAWr4D,SACzByM,EAAI4rD,EAAWvwD,GACfhI,EAAEmX,KAAKxK,EAAE02C,OACTrjD,EAAE03C,aAAa6kB,EAAOW,sBAClBl9D,EAAEwb,IAAMwhD,MAJuBh1D,GAQrC,GAAIA,IAAMuwD,EAAWr4D,OACnB,OAAO,KAIT,MAAMi9D,EAAWh1D,KAAKiM,IAAImoD,EAAOa,IAAKN,GAGtC,OAFA98D,EAAEmX,KAAKxK,EAAE02C,OACTrjD,EAAE03C,aAAa6kB,EAAOW,oBAClBl9D,EAAEwb,IAAM2hD,EACH,KAEFxwD,CACT,EAEAy+B,EAAAA,QAAcv/B,UAAUwxD,aAAgB,WACtC,MAAMC,EAAK,IAAIlyB,EAAAA,QAEf,OAAO,SAAUrjC,QACDua,IAAVva,IACFgkB,EAAOtC,MAAM,sEACb1hB,EAAQu1D,EAAGx3B,SAGb,MAAMy3B,EAAK79D,KAAKo7D,SAChB/yD,EAAM6N,EAAI0nD,EAAGj3D,IAAIk3D,EAAG,GAAIA,EAAG,GAAIA,EAAG,IAAIr9D,SACtC6H,EAAMoS,EAAImjD,EAAGj3D,IAAIk3D,EAAG,GAAIA,EAAG,GAAIA,EAAG,IAAIr9D,SACtC6H,EAAMyT,EAAI8hD,EAAGj3D,IAAIk3D,EAAG,GAAIA,EAAG,GAAIA,EAAG,KAAKr9D,SAOvC,OAJYR,KAAK89D,cACP,IACRz1D,EAAM6N,GAAK7N,EAAM6N,GAEZ7N,CACT,CACF,CArBwC,GA+FxCqjC,EAAAA,gBAAsBv/B,UAAU4xD,WAAa,SAAUC,EAAWC,GAKhE,MAAM,SAAEhsC,GAAajyB,KACrB,IAAK,IAAIsI,EAAI,EAAGC,EAAI01D,EAAUz9D,OAAQ8H,EAAIC,IAAKD,EAC7C,IAAK,IAAIoT,EAAI,EAAGA,EAAIuW,IAAYvW,EAC9B1b,KAAK4U,MAAMtM,EAAI2pB,EAAWvW,GAAKsiD,EAAUppD,MAAMqpD,EAAU31D,GAAK2pB,EAAWvW,GAG7E,OAAO1b,IACT,EAuFA,MAAMk+D,GAAkCxyB,EAAAA,wBAA8Bv/B,UAAUsL,KAEhFi0B,EAAAA,wBAA8Bv/B,UAAUsL,KAAO,SAAU0mD,GACvDD,GAAgCnyD,KAAK/L,KAAMm+D,QAChBv7C,IAAvB5iB,KAAKo+D,gBACPp+D,KAAKo+D,cAAgB9wC,IAEzB,EAEA,UACE+wC,mBArLF,SAA6BC,EAAUC,EAAQh7C,GAC7C,MAAMi7C,EAAYF,EAASl4B,QAAQuF,KAAK4yB,EAAQ,IAC1CE,EAAW,IAAI/yB,EAAAA,QACrB+yB,EAASC,UAAUn7C,EAAQ+6C,EAAS/4B,WAAWg5B,GAASh7C,GAExD,MAAMo7C,EAAa,IAAIjzB,EAAAA,QACvBizB,EAAWC,cAAcn2D,KAAKC,GAAK,GAEnC,MAAMm2D,EAAa,IAAInzB,EAAAA,QACjBozB,EAAM,IAAIpzB,EAAAA,QAAc,EAAG,EAAG,GAMpC,OALAmzB,EAAWE,OAAOP,EAAWD,EAAQO,GAErCD,EAAWvE,SAASqE,GACpBE,EAAWvE,SAASmE,GACpBI,EAAWG,YAAYR,GAChBK,CACT,EAsKEI,gBApKF,SAA0BC,EAAK56C,EAAQ66C,EAAIC,GACzC,MAAMX,EAAW,IAAI/yB,EAAAA,QACrB+yB,EAASC,UAAUU,EAAIlpD,EAAGkpD,EAAI3kD,EAAG,GAEjC,MAAMokD,EAAa,IAAInzB,EAAAA,QAKvB,OAJAmzB,EAAWE,OAAOG,EAAK56C,EAAQ66C,GAC/BN,EAAWvE,SAASmE,GACpBI,EAAWG,YAAYE,GAEhBL,CACT,EA2JEQ,yBAzJF,SAAmCC,GACjC,IAAIC,GAAW,EAMf,OALAD,EAAMx9C,UAAUqQ,KACVA,EAAK/lB,eAAe,aAAe+lB,aAAgB+lC,MACrDqH,GAAW,EACb,IAEKA,CACT,EAkJEC,mBAhJF,SAA6BC,EAAeC,EAAiBvD,GAK3D,SAASwD,EAAkBpa,GAEzB,IAAIqa,EAAS,EACTC,EAAQta,EACRua,EAAK,EACT,KAAOr3D,KAAKoI,IAAIgvD,EAAQD,GAJR,MAKdE,EAAK,EAAM3D,EAAO0D,EAClBD,EAASC,EACTA,EAAQta,GAAMua,EAAKA,GAGrB,OAAO,EAAMA,CACf,CAEA,MAAMC,EAAM,IAAIr0B,EAAAA,cAAoB,EAAK,EAAK+zB,EAAeC,GAEvDvoB,EAAM4oB,EAAIC,aAAa,YAC7B,IAAK,IAAI13D,EAAI,EAAGA,EAAI6uC,EAAI9+B,QAAS/P,EAAG,CAClC,MAAM4N,EAAIihC,EAAIviC,MAAM,EAAItM,GAClBmS,EAAI08B,EAAIviC,MAAM,EAAItM,EAAI,GACtBwH,EAAI6vD,EAAkBzpD,EAAIA,EAAIuE,EAAIA,GACxC08B,EAAI8oB,MAAM33D,EAAGwH,EAAIoG,EAAGpG,EAAI2K,EAC1B,CAEA,OAAOslD,CACT,EAmHErH,QAAO,GACPwH,UApGF,SAAmBtrD,EAAOqU,EAAOk3C,EAAYC,GAC3CD,OAAoC,IAAfA,EAA8BA,EAAa,EAChEC,OAAgC,IAAbA,EAA4BA,EAAWxrD,EAAMpU,OAChE,IAAK,IAAI8H,EAAI63D,EAAY73D,EAAI83D,IAAY93D,EACvCsM,EAAMtM,GAAK2gB,CAEf,EA+FE2yC,aACAyE,cA1EF,SAAuB3vC,GACrBkrC,GAAUlrC,GACNA,EAAOtd,OACTsd,EAAOtd,OAAOlM,OAAOwpB,GAErBA,EAAO9G,cAAc,CAAE9gB,KAAM,WAEjC,EAoEEw3D,qBAlEF,SAA8B5vC,GAC5B,IAAK,IAAIpoB,EAAI,EAAGA,EAAIuxD,GAAiBr5D,OAAQ8H,IAC3C,GAA0D,IAApDooB,EAAO6vC,OAAOx+B,MAAQ83B,GAAiBvxD,GAAM,GACjD,OAAO,EAGX,OAAO,CACT,EA4DEk4D,sBA1DF,SAA+B/gE,EAAMghE,GAEnC,MAAMC,IAA+B,OAAfD,GACtBhhE,EAAKqiB,UAAU4O,IACTA,EAAOiwC,UACTjwC,EAAOgwC,YAAcA,EACvB,GAEJ,EAmDEE,uBAjDF,SAAgCb,GAC9BA,EAAIj+C,UAAUqQ,IACR,aAAcA,IAChBA,EAAKnqB,SAAWmqB,EAAKnqB,SAASo+B,OAAM,GAEpCjU,EAAKnqB,SAAS64D,UAAU,CACtBC,UAAWp1B,EAAAA,eACXq1B,eAAe,EACf7mC,KAAK,EACL8mC,QAAQ,EACRC,WAAW,IAEb9uC,EAAKnqB,SAASk5D,eAAe,CAAEC,WAAY,IAAIz1B,EAAAA,MAAY,UAAW01B,SAAU,OAClF,GAEJ,EAmCEC,eAjCF,SAAwBC,EAAQC,EAAQC,GACtC,MAAM/1C,EAAS+1C,GAAkB,IAAI91B,EAAAA,QAMrC,OAJAjgB,EAAO9kB,IAAI,EAAG,EAAG,GACjB8kB,EAAOg2C,gBAAgBH,EAAQ,IAC/B71C,EAAOg2C,gBAAgBF,EAAQ,IAExB91C,CACT,EA0BE6tC,WClbIoI,GAAqB,CACzBhrB,YAAa,IAAIhL,EAAAA,KAAW,IAAIA,EAAAA,SAAe,GAAI,GAAI,GAAI,IAAIA,EAAAA,QAAc,EAAG,EAAG,IACnFiL,eAAgB,IAAIjL,EAAAA,OAAa,IAAIA,EAAAA,QAAc,EAAG,EAAG,GAAI,IAG/D,MAAMi2B,WAAeC,GAASlJ,QAC5BplD,WAAAA,CAAYiZ,EAAMs1C,GAChBn1C,MAAMH,EAAMs1C,GACZ7hE,KAAKusB,KAAOA,EACZvsB,KAAK8hE,YAAcD,CACrB,CAEAE,OAAAA,GACM/hE,KAAKoT,QACPpT,KAAKoT,OAAOlM,OAAOlH,KAEvB,CAEAgiE,aAAAA,GACE,OAAOhiE,KAAK8hE,WACd,CAEArqB,aAAAA,GACE,OAAOiqB,EACT,EAGF,YC9BA,SAASO,GAAa/rD,GACpB,OAAIA,SAAiCtM,MAAM8P,QAAQxD,GAC1CA,EAEF,CAACA,EACV,CAGA,MAAMgsD,GAUJ5uD,WAAAA,GAA6C,IAAjC6uD,EAAQn2D,UAAAxL,OAAA,QAAAoiB,IAAA5W,UAAA,GAAAA,UAAA,GAAG,GAAIgmB,EAAOhmB,UAAAxL,OAAA,QAAAoiB,IAAA5W,UAAA,GAAAA,UAAA,GAAG,CAAC,MACpChM,KAAKoiE,MAAQ,GACbpiE,KAAKqiE,MAAQ,CAAC,EACdriE,KAAKsiE,SAAW,IAAItwC,GACpBhyB,KAAKsiE,SAASlmD,SAAShM,IACrBpQ,KAAKqiE,MAAMjyD,GAAS,CAAC,CAAC,IAGxB+xD,EAAS/lD,SAASmmD,GAAWviE,KAAKwiE,SAASD,IAC7C,CAWA,qBAAOE,CAAep7D,EAAM4hB,GACrB5hB,EAAKytC,SAAS7rB,IACjB5hB,EAAKmF,KAAKyc,EAEd,CASA,yBAAOy5C,CAAmBr7D,EAAM4hB,GAC9B,MAAMkuB,EAAM9vC,EAAK4W,QAAQgL,IACZ,IAATkuB,GACF9vC,EAAKutC,OAAOuC,EAAK,EAErB,CAaA,qBAAOwrB,CAAe3Q,EAAMp4C,EAAMqP,GAChCrP,EAAKwC,SAASnS,IACZA,EAAMA,EAAIvC,cACV,MAAML,EAAO2qD,EAAK/nD,GAAO+nD,EAAK/nD,IAAQ,GACjC5C,EAAKytC,SAAS7rB,IACjB5hB,EAAKmF,KAAKyc,EACZ,GAEJ,CAYA,yBAAO25C,CAAmB5Q,EAAMp4C,EAAMqP,GACpCrP,EAAKwC,SAASnS,IACZA,EAAMA,EAAIvC,cACV,MAAML,EAAO2qD,EAAK/nD,GAClB,GAAI5C,EAAM,CACR,MAAM8vC,EAAM9vC,EAAK4W,QAAQgL,IACZ,IAATkuB,GACF9vC,EAAKutC,OAAOuC,EAAK,GAEC,IAAhB9vC,EAAK7G,eACAwxD,EAAK/nD,EAEhB,IAEJ,CASAu4D,QAAAA,CAASD,GACPL,GAAWO,eAAeziE,KAAKoiE,MAAOG,GACtCviE,KAAKsiE,SAASlmD,SAAShM,IACrB8xD,GAAWS,eAAe3iE,KAAKqiE,MAAMjyD,GAAQ6xD,GAAaM,EAAOnyD,IAASmyD,EAAO,GAErF,CAUAM,UAAAA,CAAWN,GACTL,GAAWQ,mBAAmB1iE,KAAKoiE,MAAOG,GAC1CviE,KAAKsiE,SAASlmD,SAAShM,IACrB8xD,GAAWU,mBAAmB5iE,KAAKqiE,MAAMjyD,GAAQ6xD,GAAaM,EAAOnyD,IAASmyD,EAAO,GAEzF,CASA,OAAIO,GACF,MAAO,IAAI9iE,KAAKoiE,MAClB,CAQA,SAAItvC,GACF,OAAO9yB,KAAKoiE,MAAM,EACpB,CAUAxoD,IAAAA,CAAKxJ,GACH,OAAOjG,OAAOyP,KAAK5Z,KAAKqiE,MAAMjyD,GAASpQ,KAAKsiE,SAAS,IACvD,CAWA57D,GAAAA,CAAIuD,EAAKmG,GACP,MAAM4hD,EAAOhyD,KAAKqiE,MAAMjyD,GAASpQ,KAAKsiE,SAAS,IAC/C,GAAItQ,EAAM,CACR,MAAMroC,EAASqoC,EAAK/nD,GAAOA,EAAIvC,eAC/B,OAAOiiB,GAAUA,EAAOnpB,OAAS,EAAImpB,EAAO,QAAK/G,CACnD,CAEF,EAGF,YCxKA,SAfA,SAA8BzW,GAC5BhC,OAAO44D,iBAAiB52D,EAAW,CACjCkgB,OAAQ,CACN3lB,GAAAA,GACE,OAAO1G,KAAKqpB,SAAWrpB,KAAKqpB,QAAQgD,OAASrsB,KAAKqpB,QAAQgD,OAASA,CACrE,GAEFhjB,SAAU,CACR3C,GAAAA,GACE,OAAO1G,KAAKqpB,SAAWrpB,KAAKqpB,QAAQhgB,SAAWrJ,KAAKqpB,QAAQhgB,SAAWA,CACzE,IAGN,ECdA,MAAM25D,GACJ1vD,WAAAA,CAAY6Q,EAAUZ,GACpBvjB,KAAK6zC,UAAY1vB,EACjBnkB,KAAKijE,QAAU1/C,CACjB,CAEA0f,eAAiB,SAAIyI,EAAAA,OAAJ,GAEjBitB,OAAAA,CAAQC,GACN,MAAMsK,EAASF,GAAgBG,QAC/BD,EAAOv8D,IAAI3G,KAAK6zC,UAAW7zC,KAAKijE,SAEhC,MAAMh2D,EAAI,IAAIy+B,EAAAA,QACd,OAAIktB,EAAUwK,IAAIC,gBAAgBH,EAAQj2D,GACjC,CACLq2D,SAAU1K,EAAUwK,IAAIG,OAAOh+B,WAAWt4B,GAC1C02C,MAAO12C,GAGJ,IACT,EAGF,MAwDA,GAxD4BgiB,GAAS,cAAcA,EACjD3b,WAAAA,CAAY+E,GAAgB,QAAAzB,EAAA5K,UAAAxL,OAANqL,EAAI,IAAAjC,MAAAgN,EAAA,EAAAA,EAAA,KAAA0V,EAAA,EAAAA,EAAA1V,EAAA0V,IAAJzgB,EAAIygB,EAAA,GAAAtgB,UAAAsgB,GACxBI,SAAS7gB,GACT7L,KAAKg/B,SAAW,IAAIp1B,MAAMyO,GAC1BrY,KAAK22C,eAAiB,KACtB32C,KAAK02C,YAAc,IACrB,CAEA8sB,SAAAA,CAAUl9C,EAAKnC,EAAUZ,GACvBvjB,KAAKg/B,SAAS1Y,GAAO,IAAI08C,GAAgB7+C,EAAUZ,EACrD,CAEAo1C,OAAAA,CAAQC,EAAWC,GAEjB,IAAK,IAAIvwD,EAAI,EAAGC,EAAIvI,KAAKg/B,SAASx+B,OAAQ8H,EAAIC,IAAKD,EAAG,CACpD,MAAMm7D,EAASzjE,KAAKg/B,SAAS12B,GAAGqwD,QAAQC,GACpC6K,IACFA,EAAOC,SAAWp7D,EAClBuwD,EAAWrsD,KAAKi3D,GAEpB,CACF,CAEAE,kBAAAA,GACE,MAAMnqC,EAAUx5B,KAAKg/B,SACrB,IAAI,YAAE0X,GAAgB12C,KACF,OAAhB02C,IACF12C,KAAK02C,YAAcA,EAAc,IAAIhL,EAAAA,MAEvCgL,EAAYG,YACZ,IAAK,IAAIvuC,EAAI,EAAGC,EAAIixB,EAAQh5B,OAAQ8H,EAAIC,IAAKD,EAC3CouC,EAAYI,cAActd,EAAQlxB,GAAGurC,UAEzC,CAEA+vB,qBAAAA,GACE5jE,KAAK2jE,qBACL,MAAMnqC,EAAUx5B,KAAKg/B,UACf,YAAE0X,GAAgB12C,KAExB,IAAIk3C,EAAgB,EACpB,MAAMtuC,EAAS,IAAI8iC,EAAAA,QACnBgL,EAAYM,UAAUpuC,GACtB,IAAK,IAAIN,EAAI,EAAGC,EAAIixB,EAAQh5B,OAAQ8H,EAAIC,IAAKD,EAAG,CAC9C,MAAM6uC,EAAM3d,EAAQlxB,GAAGurC,UACjBuD,EAAgBxuC,EAAOyuC,kBAAkBF,GAC3CD,EAAgBE,IAClBF,EAAgBE,EAEpB,CAC4B,OAAxBp3C,KAAK22C,iBACP32C,KAAK22C,eAAiB,IAAIjL,EAAAA,QAE5B1rC,KAAK22C,eAAehwC,IAAIiC,EAAQH,KAAK6uC,KAAKJ,GAC5C,GC1EI2sB,GAAW,IAAIn4B,EAAAA,OAIb3Z,cAAaA,IAAK1rB,EAc1B,MAAMy9D,WAAiCC,GAAmBr4B,EAAAA,0BACxDp4B,WAAAA,CAAY0wD,EAAcC,EAAkBC,GAC1Cx3C,MAAMs3C,GACNhkE,KAAKmkE,aAAeD,EAAc,IAAIx4B,EAAAA,cAAoB,EAAG,EAAG,EAAG,GAC/D,IAAIA,EAAAA,qBAA2B,EAAsB,EAAnBu4B,EAAsBA,EAAkB,EAAa,EAAVx7D,KAAKC,GAAQ,EAAGD,KAAKC,IACtG1I,KAAKokE,MAAMJ,EAAchkE,KAAKmkE,aAChC,CAEAE,OAAAA,CAAQC,EAASC,EAASC,GAd5B,IAAsB/tD,EAAK6P,EAAKpQ,EAAGuE,EAAGqB,EAAGjB,EAAnBpE,EAeLzW,KAAKykE,SAfKn+C,EAVP,EAyBYg+C,EAfApuD,EAeuBquD,EAAQruD,EAf5BuE,EAe+B8pD,EAAQ9pD,EAfpCqB,EAeuCyoD,EAAQzoD,EAf5CjB,EAe+C2pD,EAdtF/tD,EAAI6P,GAAOpQ,EACXO,EAAI6P,EAAM,GAAK7L,EACfhE,EAAI6P,EAAM,GAAKxK,EACfrF,EAAI6P,EAAM,GAAKzL,EAYb7a,KAAKwjE,UAAUc,EAASC,EAASC,EACnC,CAEAE,QAAAA,CAASJ,EAASK,GAzBpB,IAAqBluD,EAAK6P,EAAKpQ,EAAGuE,EAAGqB,EA0BjC+nD,GAASl9D,IAAIg+D,GA1BIluD,EA2BLzW,KAAK4kE,QA3BKt+C,EAHP,EA8BWg+C,EA3BCpuD,EA2BqB2tD,GAAS72D,EA3B3ByN,EA2B8BopD,GAASzpD,EA3BpC0B,EA2BuC+nD,GAASlpD,EA1BnFlE,EAAI6P,GAAOpQ,EACXO,EAAI6P,EAAM,GAAK7L,EACfhE,EAAI6P,EAAM,GAAKxK,CAyBf,CAEA+oD,WAAAA,GACE,OAAO,CACT,CAEAC,YAAAA,GACE9kE,KAAKggE,aAAa,UAAUvI,aAAc,EAC1Cz3D,KAAKggE,aAAa,SAASvI,aAAc,CAC3C,CAEA/f,QAAAA,GACE13C,KAAK8kE,eACL9kE,KAAK4jE,uBACP,CAEAmB,UAAAA,CAAWC,EAAc/7C,GACvB,MAAMg8C,EAAWjlE,KAAKklE,OACtB,IAAK,IAAI58D,EAAI,EAAGC,EAAIy8D,EAAaxkE,OAAQ8H,EAAIC,IAAKD,EAChD28D,EAASD,EAAa18D,IAAM2gB,EAE9BjpB,KAAKggE,aAAa,cAAcvI,aAAc,CAChD,CAEA2B,SAAAA,CAAU4L,GACR,MAAM5G,EAAgB4G,EAAaxkE,OAC7B2kE,EAAO,IAAIz5B,EAAAA,wBAOjB,OANA1rC,KAAKokE,MAAMr4D,KAAKo5D,EAAM/G,EAAep+D,KAAKmkE,cAE1CpyC,GAAc/xB,KAAKykE,SAAUU,EAAKV,SAAUO,EA7D5B,GA8DhBjzC,GAAc/xB,KAAK4kE,QAASO,EAAKP,QAASI,EA7D3B,GA8DfG,EAAKxuB,eAAiB32C,KAAK22C,eAC3BwuB,EAAKzuB,YAAc12C,KAAK02C,YACjB,CAACyuB,EACV,CAEAf,KAAAA,CAAMJ,EAAcoB,GAClBplE,KAAKyX,KAAK2tD,GAEVplE,KAAKykE,SAAWp+D,EAAMmpB,cAActV,aAvEpB,EAuEkC8pD,GAClDhkE,KAAK4kE,QAAUv+D,EAAMmpB,cAActV,aAvEpB,EAuEkC8pD,GACjD,MAAMqB,EAAQrlE,KAAKklE,OAAS7+D,EAAMmpB,cAActV,aAAc8pD,GAC9Dl6D,IAAAA,KAAOu7D,EAAO,GAEdrlE,KAAK2kB,aAAa,SAAU,IAAI+mB,EAAAA,yBAA+B1rC,KAAKykE,SA5EpD,GA4E2E,EAAO,IAClGzkE,KAAK2kB,aAAa,QAAS,IAAI+mB,EAAAA,yBAA+B1rC,KAAK4kE,QA5EpD,GA4EyE,EAAO,IAC/F5kE,KAAK2kB,aAAa,aAAc,IAAI+mB,EAAAA,yBAA+B25B,EAAO,GAAG,EAAO,GACtF,EAEF,YClFMxB,GAAW,IAAIn4B,EAAAA,MASrB,MAAM45B,WAA+B55B,EAAAA,eACnCp4B,WAAAA,CAAYiyD,EAAUC,GAGpB,GAFA94C,QAEI1sB,KAAKsT,cAAgBgyD,GACvB,MAAM,IAAIj6D,MAAM,uCAGlBrL,KAAKylE,UAAYF,EAEjBvlE,KAAKokE,MAAMmB,EAAUC,EACvB,CAEAX,WAAAA,GACE,OAAO,CACT,CAEAC,YAAAA,GACE9kE,KAAKggE,aAAa,YAAYvI,aAAc,EAC5Cz3D,KAAKggE,aAAa,UAAUvI,aAAc,EAC1Cz3D,KAAKggE,aAAa,SAASvI,aAAc,CAC3C,CAEAiN,QAAAA,CAAShB,EAAUiB,GACjBd,GAASl9D,IAAIg+D,GACb,MAAMe,EAAS1lE,KAAK4kE,QACde,EAAY3lE,KAAK4lE,WACvB,IAAK,IAAIt9D,EAAIo7D,EAAWiC,EAAWngD,EAAMld,EAAIq9D,EAAWr9D,EAAIkd,IAAOld,EAAG,CACpE,MAAMge,EAtCK,EAsCChe,EACZo9D,EAAOp/C,GAAOu9C,GAAS72D,EACvB04D,EAAOp/C,EAAM,GAAKu9C,GAASzpD,EAC3BsrD,EAAOp/C,EAAM,GAAKu9C,GAASlpD,CAC7B,CACF,CAEA+8B,QAAAA,GACE13C,KAAK8kE,eACL9kE,KAAK4jE,uBACP,CAEAmB,UAAAA,CAAWC,EAAc/7C,GACvB,MAAMg8C,EAAWjlE,KAAKklE,OAChBS,EAAY3lE,KAAK4lE,WACvB,IAAK,IAAIt9D,EAAI,EAAGC,EAAIy8D,EAAaxkE,OAAQ8H,EAAIC,IAAKD,EAAG,CACnD,MAAM2b,EAAO+gD,EAAa18D,GAAKq9D,EAC/B77D,IAAAA,KAAOm7D,EAAUh8C,EAAOhF,EAAMA,EAAO0hD,EACvC,CACA3lE,KAAKggE,aAAa,cAAcvI,aAAc,CAChD,CAEAkB,OAAAA,CAAQC,EAAWC,GACjB,MAAM4K,EAAS,GAGToC,EAAO,IAAIn6B,EAAAA,KACjBm6B,EAAKhK,SAAW77D,KAChB6lE,EAAKlN,QAAQC,EAAW6K,GAExB,MAAMqC,EAAgB9lE,KAAKylE,UAAUr1D,MAAMiI,MAAQ,EACnD,IAAK,IAAI/P,EAAI,EAAGC,EAAIk7D,EAAOjjE,OAAQ8H,EAAIC,IAAKD,EACrCm7D,EAAOn7D,GAAG8D,eAAe,eAG9Bq3D,EAAOn7D,GAAGo7D,SAAWj7D,KAAKmN,MAAM6tD,EAAOn7D,GAAGy9D,UAAYD,GACtDjN,EAAWrsD,KAAKi3D,EAAOn7D,IAE3B,CAEA8wD,SAAAA,CAAU4L,GACR,MAAM5G,EAAgB4G,EAAaxkE,OAC7B2kE,EAAO,IAAIz5B,EAAAA,eACjB1rC,KAAKokE,MAAMr4D,KAAKo5D,EAAMnlE,KAAKylE,UAAWrH,GAEtC,MAAM4H,EAAShmE,KAAKimE,WACdC,EAAUlmE,KAAKmmE,SACfC,EAAWpmE,KAAK4kE,QAEhByB,EAASlB,EAAKc,WACdK,EAAUnB,EAAKgB,SACfI,EAAWpB,EAAKP,QAEhBe,EA3FO,EA2FK3lE,KAAK4lE,WAEvB,IAAK,IAAIt9D,EAAI,EAAGC,EAAIy8D,EAAaxkE,OAAQ8H,EAAIC,IAAKD,EAAG,CACnD,MAAMk+D,EAAcl+D,EAAIq9D,EAClBc,EAAazB,EAAa18D,GAAKq9D,EAC/Be,EAAWD,EAAad,EAC9BU,EAAO1/D,IAAIq/D,EAAOvqD,SAASgrD,EAAYC,GAAWF,GAClDF,EAAQ3/D,IAAIu/D,EAAQzqD,SAASgrD,EAAYC,GAAWF,GACpDD,EAAS5/D,IAAIy/D,EAAS3qD,SAASgrD,EAAYC,GAAWF,EACxD,CAIA,OAFArB,EAAKxuB,eAAiB32C,KAAK22C,eAC3BwuB,EAAKzuB,YAAc12C,KAAK02C,YACjB,CAACyuB,EACV,CAEAf,KAAAA,CAAMmB,EAAUC,GACd,MAAMG,EAAY3lE,KAAK4lE,WAAaL,EAASoB,WAAWxiD,SAAS9L,MAC3DuuD,EAAarB,EAASn1D,MAAMwE,MAC5BiyD,EAAiBD,EAAWpmE,OAC5BsmE,EAAc9mE,KAAK4lE,WAAaJ,EAChCuB,EAAgBD,EAjHJ,MAkHZE,EAAYH,EAAiBrB,EAC7Bp1D,EAAQpQ,KAAKooB,OAAS/hB,EAAMmpB,cAAcu3C,EAAgBE,YAAcC,YAAaF,GAC3FhnE,KAAKimE,WAAa5/D,EAAMmpB,cAActV,aAnHzB,EAmHuC4sD,GACpD9mE,KAAKmmE,SAAW9/D,EAAMmpB,cAActV,aApHvB,EAoHqC4sD,GAClD9mE,KAAK4kE,QAAUv+D,EAAMmpB,cAActV,aArHtB,EAqHoC4sD,GACjD,MAAMzB,EAAQrlE,KAAKklE,OAAS7+D,EAAMmpB,cAActV,aAAc4sD,GAC9Dh9D,IAAAA,KAAOu7D,EAAO,GAEd,IAAK,IAAI/8D,EAAI,EAAGA,EAAIk9D,IAAel9D,EAAG,CACpC,MAAMuG,EAASvG,EAAIu+D,EACbM,EAAY7+D,EAAIq9D,EACtBv1D,EAAMzJ,IAAIigE,EAAY/3D,GACtB,IAAK,IAAI6M,EAAI,EAAGA,EAAImrD,IAAkBnrD,EACpCtL,EAAMvB,EAAS6M,IAAMyrD,CAEzB,CAEAnnE,KAAKonE,SAAS,IAAI17B,EAAAA,gBAAsB1rC,KAAKooB,OAAQ,IACrDpoB,KAAK2kB,aAAa,WAAY,IAAI+mB,EAAAA,gBAAsB1rC,KAAKimE,WAnIhD,IAoIbjmE,KAAK2kB,aAAa,SAAU,IAAI+mB,EAAAA,gBAAsB1rC,KAAKmmE,SApI9C,IAqIbnmE,KAAK2kB,aAAa,QAAS,IAAI+mB,EAAAA,gBAAsB1rC,KAAK4kE,QArI7C,IAsIb5kE,KAAK2kB,aAAa,aAAc,IAAI+mB,EAAAA,gBAAsB25B,EAAO,GACnE,EAEF,YCvIA,MAAMgC,WAA8BtD,GAAmBuB,KACrDhyD,WAAAA,CAAY0wD,EAAcC,GACxB,MAAMqD,EAAc,IAAI57B,EAAAA,qBACtB,EACmB,EAAnBu4B,EACAA,EACA,EACU,EAAVx7D,KAAKC,GACL,EACAD,KAAKC,IAEPgkB,MAAMs3C,EAAcsD,EAAatD,GAEjC,MAAMuD,EAAUvnE,KAAKmmE,SACfqB,EAAaF,EAAYX,WAAWc,OAAO7yD,MAC3C+wD,EAAY3lE,KAAK4lE,WACvB5lE,KAAK0nE,UAAY1nE,KAAKylE,UAAUkB,WAAWxiD,SAASvP,MACpD5U,KAAK2nE,cAAgBthE,EAAMmpB,cAActV,aAnB5B,EAmB0CyrD,GACvD,IAAK,IAAIr9D,EAAI,EAAGA,EAAI07D,IAAgB17D,EAClCi/D,EAAQ5gE,IAAI6gE,EArBD,EAqBa7B,EAAuBr9D,EAEnD,CAEA+7D,OAAAA,CAAQC,EAASC,EAASC,GACxB,MAAMoD,EAAS5nE,KAAK2nE,cACdhC,EAAY3lE,KAAK4lE,WACjBiC,EAAS7nE,KAAK0nE,UAEpB,IAAK,IAAIp/D,EAAI,EAAGA,EAAIq9D,IAAar9D,EAAG,CAClC,MAAMge,EAAU,EAAJhe,EACZs/D,EAAOthD,GAAOi+C,EAAQruD,EAAI2xD,EAAOvhD,GAAOk+C,EACxCoD,EAAOthD,EAAM,GAAKi+C,EAAQ9pD,EAAIotD,EAAOvhD,EAAM,GAAKk+C,EAChDoD,EAAOthD,EAAM,GAAKi+C,EAAQzoD,EAAI+rD,EAAOvhD,EAAM,GAAKk+C,CAClD,CAEAxkE,KAAKimE,WAAWt/D,IAAIihE,EAAQjC,EAAYrB,EArC3B,GAsCbtkE,KAAKwjE,UAAUc,EAASC,EAASC,EACnC,EAEF,YCxCMsD,GAAY,IAAIp8B,EAAAA,QAChBq8B,GAAY,IAAIr8B,EAAAA,QAChBs8B,GAAU,IAAIt8B,EAAAA,QAgEpB,SA9DA,cAAwC45B,GACtChyD,WAAAA,CAAY8qD,EAAelqC,GAEzBxH,MADoB,IAAIgf,EAAAA,iBAAuB,EAAG,EAAG,EAAKjjC,KAAKgM,IAAI,EAAGyf,GAAiB,GAAG,GACvE,EAAIkqC,GAEvB,MAAMuH,EAAY3lE,KAAK4lE,WACvB5lE,KAAK0nE,UAAY1nE,KAAKylE,UAAUkB,WAAWxiD,SAASvP,MACpD5U,KAAKioE,YAAcjoE,KAAKylE,UAAUkB,WAAWc,OAAO7yD,MACpD5U,KAAKkoE,WAAa7hE,EAAMmpB,cAActV,aAbzB,EAauCyrD,EACtD,CAEAtB,OAAAA,CAAQC,EAAS6D,EAAQC,EAAQ5D,GAC/B,MAAMmB,EAAY3lE,KAAK4lE,WACjByC,EAA0B,EAAZ1C,EAAgBrB,EAlBvB,EAmBPgE,EAAeD,EAnBR,EAmBsB1C,EAE7B4C,EAAWvoE,KAAKkoE,WAChBL,EAAS7nE,KAAK0nE,UACdc,EAAUxoE,KAAKioE,YAErBH,GAAUW,YAAYN,EAAQC,EAAQ,IACtC,MAAMM,EAAO9G,GAASvD,mBAAmB8J,EAAQL,GAAWtD,GAG5D,IAAIl+C,EAFJ0hD,GAAQW,gBAAgBD,GAGxB,IAAK,IAAIpgE,EAAI,EAAGA,EAAIq9D,IAAar9D,EAC/Bge,EA/BW,EA+BLhe,EACNy/D,GAAUa,UAAUf,EAAQvhD,GAC5ByhD,GAAU/vB,aAAa0wB,GACvBX,GAAUc,QAAQN,EAAUjiD,GAE9BtmB,KAAKimE,WAAWt/D,IAAI4hE,EAAUF,GAG9BP,GAAUxhC,IAAI6hC,GACd,IAAK,IAAI7/D,EAAI,EAAGA,EAAIq9D,IAAar9D,EAC/Bge,EAzCW,EAyCLhe,EACNigE,EAASjiD,IAAQwhD,GAAU5xD,EAC3BqyD,EAASjiD,EAAM,IAAMwhD,GAAUrtD,EAC/B8tD,EAASjiD,EAAM,IAAMwhD,GAAUhsD,EAEjC9b,KAAKimE,WAAWt/D,IAAI4hE,EAAUD,GAE9B,IAAK,IAAIhgE,EAAI,EAAGA,EAAIq9D,IAAar9D,EAC/Bge,EAjDW,EAiDLhe,EACNy/D,GAAUa,UAAUJ,EAASliD,GAC7ByhD,GAAUe,aAAad,IACvBD,GAAUc,QAAQN,EAAUjiD,GAE9BtmB,KAAKmmE,SAASx/D,IAAI4hE,EAAUF,GAC5BroE,KAAKmmE,SAASx/D,IAAI4hE,EAAUD,EAC9B,CAEA5D,QAAAA,CAASJ,EAASyE,EAAWC,GAC3B,MAAMl2C,EAAQ,EAAIwxC,EAClB53C,MAAMg4C,SAAS5xC,EAAOi2C,GAEtB,MAAMh2C,EAASD,EAAQ,EACvBpG,MAAMg4C,SAAS3xC,EAAQi2C,EACzB,GC/DF,MAAMC,WAA+Bv9B,EAAAA,eACnCp4B,WAAAA,CACE41D,EACAC,EACAvjD,EACAwjD,EACAC,EACAC,GAEA58C,QAEA,MACM68C,EAAc,EAAI9gE,KAAKC,GAE7B1I,KAAK8I,KAAO,yBAEZ9I,KAAKwpE,WAAa,CAChBN,YACAC,eACAvjD,SACAwjD,iBACAC,iBACAC,aAGF,MAAMG,GAAuB,IAAdH,GAAuBJ,EAAY,EAC5CQ,GAA0B,IAAdJ,GAAuBH,EAAe,EAClDQ,GAAeN,EAAiB,GAAKD,EACvCK,GAAUL,EAAiB,GAC3BM,GAAaN,EAAiB,GAC5BQ,GAAc,EAAIP,EAAiBI,EAASC,GAAaN,EAEzDS,EAAajkD,EAAS,EAGtBkkD,EAAY,IAAIp+B,EAAAA,gBAAsBrlC,EAAMmpB,cAActV,aAA4B,EAAdyvD,GAAkB,GAC1FpC,EAAU,IAAI77B,EAAAA,gBAAsBrlC,EAAMmpB,cAActV,aAA4B,EAAdyvD,GAAkB,GACxF33C,EAAU,IAAI0Z,EAAAA,sBAA4BrlC,EAAMmpB,cAAc03C,YAvC/C,EAuC4D0C,GAAgC,GAG3GG,EAAM,IAAIr+B,EAAAA,gBAAsBrlC,EAAMmpB,cAActV,aAA4B,EAAdyvD,GAAkB,GAG1F,IAAIK,EAAa,EACbC,EAAc,EAClB,MAAMC,IAAaf,EAAeD,GAAatjD,EAG/C,IAAK,IAAInL,EAAI,EAAGA,GAAK4uD,EAAgB5uD,IAAK,CAExC,GAAIA,IAAM4uD,EACR,IAAK,IAAI/gE,EAAI,EAAGA,EAAI8gE,EAAgB9gE,IAAK,CACvC,MAAM61C,EAAK6rB,EAAa1hE,EAClB81C,EAAK4rB,EAAaZ,EAAiB9gE,EACnC6hE,EAAKH,EAAaZ,GAAmB9gE,EAAI,GAAK8gE,EAC9CgB,EAAKJ,GAAe1hE,EAAI,GAAK8gE,EAEnCp3C,EAAQq4C,OA3DO,EA2DAJ,EAAgC9rB,EAAIisB,EAAIhsB,GACvD6rB,IACAj4C,EAAQq4C,OA7DO,EA6DAJ,EAAgC7rB,EAAIgsB,EAAID,GACvDF,GACF,CAIF,MAAM3pE,EAAIma,EAAI4uD,EACR9lD,EAASjjB,GAAK6oE,EAAeD,GAAaA,EAEhD,IAAK,IAAIhzD,EAAI,EAAGA,EAAIkzD,EAAgBlzD,IAAK,CACvC,MAAM+C,EAAI/C,EAAIkzD,EAERkB,EAAK/mD,EAAS9a,KAAKoK,IAAIoG,EAAIswD,EA5DlB,GA6DTgB,EAAKjqE,EAAIslB,EAASikD,EAClBW,EAAKjnD,EAAS9a,KAAKme,IAAI3N,EAAIswD,EA9DlB,GAgET9B,EAAS,IAAI/7B,EAAAA,QACjB4+B,EACA7hE,KAAK6uC,KAAKgzB,EAAKA,EAAKE,EAAKA,GAAMN,EAC/BM,GACAnjC,YAEFyiC,EAAUO,OAAOL,EAAYM,EAAIC,EAAIC,GACrCjD,EAAQ8C,OAAOL,EAAYvC,EAAOvxD,EAAGuxD,EAAOhtD,EAAGgtD,EAAO3rD,GACtDiuD,EAAI9J,MAAM+J,EAAY/wD,EAAG3Y,KACvB0pE,CACJ,CACF,CAGA,GAAIP,EAAQ,CACV,MAAMgB,EAAYT,EACZU,EAAUV,EAAaZ,EAC7B,IAAK,IAAIuB,EAAQ,EAAGA,EAAQvB,IAAkBuB,EAAO,CACnD,MAAMC,EAAaZ,EAAaZ,EAChCU,EAAUO,OACRL,EACAF,EAAUe,KAAKD,GACfd,EAAUgB,KAAKF,GACfd,EAAUiB,KAAKH,IAEjBrD,EAAQ8C,OAAOL,EAAY,EAAG,EAAG,GACjCD,EAAI9J,MAAM+J,EAAY,EAAG,GAEzB,MAAMgB,EAAWP,GAAcE,EAAQ,GAAKvB,EAC5Cp3C,EAAQq4C,OA1GS,EA0GFJ,EAAgCD,EAAYgB,EAAUN,GACrET,IACAD,GACF,CAEAF,EAAUO,OAAOL,EAAY,EAAGH,EAAY,GAC5CtC,EAAQ8C,OAAOL,EAAY,EAAG,EAAG,GACjCD,EAAI9J,MAAM+J,EAAY,EAAG,KACvBA,CACJ,CAGA,GAAIN,EAAW,CACb,MAAMuB,EAAYjB,EACZkB,EAAWlB,EAAaZ,EAC9B,IAAK,IAAI+B,EAAQ,EAAGA,EAAQ/B,IAAkB+B,EAAO,CACnD,MAAMC,EAAcD,EACpBrB,EAAUO,OACRL,EACAF,EAAUe,KAAKO,GACftB,EAAUgB,KAAKM,GACftB,EAAUiB,KAAKK,IAEjB7D,EAAQ8C,OAAOL,EAAY,GAAI,EAAG,GAClCD,EAAI9J,MAAM+J,EAAY,EAAG,GAEzB,MAAMqB,EAAWJ,GAAcE,EAAQ,GAAK/B,EAC5Cp3C,EAAQq4C,OArIS,EAqIFJ,EAAgCoB,EAAUrB,EAAYkB,GACrEjB,IACAD,GACF,CAEAF,EAAUO,OAAOL,EAAY,GAAIH,EAAY,GAC7CtC,EAAQ8C,OAAOL,EAAY,GAAI,EAAG,GAClCD,EAAI9J,MAAM+J,EAAY,EAAG,EAC3B,CAEAhqE,KAAKonE,SAASp1C,GACdhyB,KAAK2kB,aAAa,WAAYmlD,GAC9B9pE,KAAK2kB,aAAa,SAAU4iD,GAC5BvnE,KAAK2kB,aAAa,KAAMolD,EAC1B,CAEA3jC,KAAAA,GACE,MAAM,WAAEojC,GAAexpE,KAEvB,OAAO,IAAIipE,GACTO,EAAWN,UACXM,EAAWL,aACXK,EAAW5jD,OACX4jD,EAAWJ,eACXI,EAAWH,eACXG,EAAWF,UAEf,EAGF,YChKMzF,GAAW,IAAIn4B,EAAAA,MACf4/B,GAAY,IAAI5/B,EAAAA,SAId3Z,cAAaA,IAAK1rB,EAE1B,SAASklE,GAAY90D,EAAK6P,EAAKpQ,EAAGuE,EAAGqB,GACnCrF,EAAI6P,GAAOpQ,EACXO,EAAI6P,EAAM,GAAK7L,EACfhE,EAAI6P,EAAM,GAAKxK,CACjB,CAEA,SAAS0vD,GAAa/0D,EAAK6P,EAAKpQ,EAAGuE,EAAGqB,EAAGjB,GACvCpE,EAAI6P,GAAOpQ,EACXO,EAAI6P,EAAM,GAAK7L,EACfhE,EAAI6P,EAAM,GAAKxK,EACfrF,EAAI6P,EAAM,GAAKzL,CACjB,CAEA,SAAS4wD,GAAWt1D,EAAGwE,GACrB,OAAOxE,EAAIwE,CACb,CAuCA,MAAM+wD,WAAqChgC,EAAAA,wBACzCp4B,WAAAA,CAAY8qD,EAAelqC,EAAgBgwC,EAAaoF,GACtD58C,QACA1sB,KAAK2rE,aAAezH,EACpBlkE,KAAK4rE,aAAe1H,EAAc,IAAIx4B,EAAAA,cAAoB,EAAG,EAAG,EAAG,GAC/D,IAAIu9B,GAAuB,EAAG,EAAG,EAAKxgE,KAAKgM,IAAI,EAAGyf,GAAiB,EAAGo1C,GAC1EtpE,KAAKokE,MAAMhG,EAAep+D,KAAK4rE,aAAc5rE,KAAK2rE,cAElD3rE,KAAK6rE,cAAgB,IAAIC,GAA0B1N,EAAe,EACpE,CAEAiG,OAAAA,CAAQC,EAAS6D,EAAQC,EAAQ5D,GAC/B,MAAMlsB,EAASspB,GAASvD,mBAAmB8J,EAAQC,EAAQ5D,GAC3D,IAAIuH,EAAKzzB,EAAO8iB,SAChB,MAAM4Q,EAxEU,EAwEE1H,EAElBtkE,KAAK6rE,cAAcxH,QAAQC,EAAS6D,EAAQC,EAAQ5D,GACpDgH,GAAaxrE,KAAKisE,YAAaD,EAAWD,EAAG,GAAIA,EAAG,GAAIA,EAAG,GAAIA,EAAG,KAClEP,GAAaxrE,KAAKksE,YAAaF,EAAWD,EAAG,GAAIA,EAAG,GAAIA,EAAG,GAAIA,EAAG,KAClEP,GAAaxrE,KAAKmsE,YAAaH,EAAWD,EAAG,GAAIA,EAAG,GAAIA,EAAG,IAAKA,EAAG,KAE/D/rE,KAAK2rE,eACPL,GAAU7zD,KAAK6gC,GAAQ+hB,SACvB0R,EAAKT,GAAUlQ,SACfoQ,GAAaxrE,KAAKosE,eAAgBJ,EAAWD,EAAG,GAAIA,EAAG,GAAIA,EAAG,GAAIA,EAAG,KACrEP,GAAaxrE,KAAKqsE,eAAgBL,EAAWD,EAAG,GAAIA,EAAG,GAAIA,EAAG,GAAIA,EAAG,KACrEP,GAAaxrE,KAAKssE,eAAgBN,EAAWD,EAAG,GAAIA,EAAG,GAAIA,EAAG,IAAKA,EAAG,KAE1E,CAEArH,QAAAA,CAASJ,EAASyE,EAAWC,GAC3B,MAAMuD,EAxFS,EAwFEjI,EACjBT,GAASl9D,IAAIoiE,GACbwC,GAAYvrE,KAAKwsE,QAASD,EAAU1I,GAAS72D,EAAG62D,GAASzpD,EAAGypD,GAASlpD,GACrEkpD,GAASl9D,IAAIqiE,GACbuC,GAAYvrE,KAAKysE,QAASF,EAAU1I,GAAS72D,EAAG62D,GAASzpD,EAAGypD,GAASlpD,EACvE,CAEAipD,qBAAAA,GACE5jE,KAAK6rE,cAAcjI,wBACnB5jE,KAAK22C,eAAiB32C,KAAK6rE,cAAcl1B,cAC3C,CAEAgtB,kBAAAA,GACE3jE,KAAK6rE,cAAclI,qBACnB3jE,KAAK02C,YAAc12C,KAAK6rE,cAAcn1B,WACxC,CAEAiiB,OAAAA,CAAQC,EAAWC,GACjB74D,KAAK6rE,cAAclT,QAAQC,EAAWC,EACxC,CAEAgM,WAAAA,GACE,OAAO,CACT,CAEAC,YAAAA,GACE9kE,KAAKggE,aAAa,cAAcvI,aAAc,EAC9Cz3D,KAAKggE,aAAa,cAAcvI,aAAc,EAC9Cz3D,KAAKggE,aAAa,cAAcvI,aAAc,EAC9Cz3D,KAAKggE,aAAa,SAASvI,aAAc,EACzCz3D,KAAKggE,aAAa,UAAUvI,aAAc,EAC1Cz3D,KAAKggE,aAAa,cAAcvI,aAAc,EAC1Cz3D,KAAK2rE,eACP3rE,KAAKggE,aAAa,iBAAiBvI,aAAc,EACjDz3D,KAAKggE,aAAa,iBAAiBvI,aAAc,EACjDz3D,KAAKggE,aAAa,iBAAiBvI,aAAc,GAGnDz3D,KAAK6rE,cAAc/G,cACrB,CAEAptB,QAAAA,GACE13C,KAAK8kE,eACL9kE,KAAK4jE,uBACP,CAEAmB,UAAAA,CAAWC,EAAc/7C,GACvB,MAAMg8C,EAAWjlE,KAAKklE,OACtB,IAAK,IAAI58D,EAAI,EAAGC,EAAIy8D,EAAaxkE,OAAQ8H,EAAIC,IAAKD,EAChD28D,EAASx8D,KAAKmN,MAAMovD,EAAa18D,GAAK,IAAM2gB,EAE9CjpB,KAAKggE,aAAa,cAAcvI,aAAc,CAChD,CAEA2B,SAAAA,CAAU4L,GACR,MAAMh7C,EA3HV,SAA8Bg7C,GAC5BA,EAAapsD,KAAK6yD,IAClB,MAAMiB,EAAY,GACZC,EAAe,GACrB,IAAK,IAAIrkE,EAAI,EAAGC,EAAIy8D,EAAaxkE,OAAQ8H,EAAIC,IAAKD,EAAG,CACnD,MAAM4B,EAAM86D,EAAa18D,GAEnBskE,EAAS,CACb95C,OAAO,EACPC,QAAQ,IAHU,EAAN7oB,GAAW,GAAM,GAM7B0iE,EAAO95C,OAAQ,EACf85C,EAAO75C,OAASzqB,EAAI,EAAIC,GAAKy8D,EAAa18D,EAAI,KAAO08D,EAAa18D,GAAK,EACnEskE,EAAO75C,UACPzqB,GAGJskE,EAAO75C,QAAS,EAElB25C,EAAUlgE,KAAK/D,KAAKmN,MAAM1L,EAAM,IAChCyiE,EAAangE,KAAKogE,EACpB,CACA,MAAO,CAAE56C,QAAS06C,EAAWC,eAC/B,CAmGiBE,CAAqB7H,GAC5B8H,EAAkB9iD,EAAKgI,QACvBosC,EAAgB0O,EAAgBtsE,OAChC2kE,EAAO,IAAIz5B,EAAAA,wBAkBjB,OAjBA1rC,KAAKokE,MAAMr4D,KAAKo5D,EAAM/G,EAAep+D,KAAK4rE,aAAc5rE,KAAK2rE,cAE7D55C,GAAc/xB,KAAKisE,YAAa9G,EAAK8G,YAAaa,EAtJlC,GAuJhB/6C,GAAc/xB,KAAKksE,YAAa/G,EAAK+G,YAAaY,EAvJlC,GAwJhB/6C,GAAc/xB,KAAKmsE,YAAahH,EAAKgH,YAAaW,EAxJlC,GA0JZ9sE,KAAK2rE,eACP55C,GAAc/xB,KAAKosE,eAAgBjH,EAAKiH,eAAgBU,EA3J1C,GA4Jd/6C,GAAc/xB,KAAKqsE,eAAgBlH,EAAKkH,eAAgBS,EA5J1C,GA6Jd/6C,GAAc/xB,KAAKssE,eAAgBnH,EAAKmH,eAAgBQ,EA7J1C,IAgKhB/6C,GAAc/xB,KAAKwsE,QAASrH,EAAKqH,QAASM,EA/J3B,GAgKf/6C,GAAc/xB,KAAKysE,QAAStH,EAAKsH,QAASK,EAhK3B,GA8CnB,SAAwBH,EAAcI,EAAQC,GAC5C,IAAK,IAAI1kE,EAAI,EAAGC,EAAIokE,EAAansE,OAAQ8H,EAAIC,IAAKD,EAAG,CACnD,MAAM0hB,EAAO2iD,EAAarkE,GACrB0hB,EAAK8I,QACRi6C,EAlDa,EAkDOzkE,IAAM,IAEvB0hB,EAAK+I,SACRi6C,EArDa,EAqDO1kE,IAAM,GAE9B,CACF,CAyGI2kE,CAAejjD,EAAK2iD,aAAcxH,EAAKqH,QAASrH,EAAKsH,SACrDtH,EAAKxuB,eAAiB32C,KAAK22C,eAC3BwuB,EAAKzuB,YAAc12C,KAAK02C,YACjB,CAACyuB,EACV,CAEA+H,YAAAA,GACE,OAAOltE,KAAK4rE,aAAapC,UAC3B,CAEApF,KAAAA,CAAMhG,EAAe+O,EAAajJ,GAChClkE,KAAKyX,KAAK01D,GACVntE,KAAKisE,YAAc5lE,EAAMmpB,cAActV,aA9KvB,EA8KqCkkD,GACrDp+D,KAAKksE,YAAc7lE,EAAMmpB,cAActV,aA/KvB,EA+KqCkkD,GACrDp+D,KAAKmsE,YAAc9lE,EAAMmpB,cAActV,aAhLvB,EAgLqCkkD,GACrDp+D,KAAKwsE,QAAUnmE,EAAMmpB,cAActV,aAhLpB,EAgLkCkkD,GACjDp+D,KAAKysE,QAAUpmE,EAAMmpB,cAActV,aAjLpB,EAiLkCkkD,GACjD,MAAMiH,EAAQrlE,KAAKklE,OAAS7+D,EAAMmpB,cAActV,aAAckkD,GAC9Dt0D,IAAAA,KAAOu7D,EAAO,GAEdrlE,KAAK2kB,aAAa,aAAc,IAAI+mB,EAAAA,yBAA+B1rC,KAAKisE,YAtLxD,GAsLkF,EAAO,IACzGjsE,KAAK2kB,aAAa,aAAc,IAAI+mB,EAAAA,yBAA+B1rC,KAAKksE,YAvLxD,GAuLkF,EAAO,IACzGlsE,KAAK2kB,aAAa,aAAc,IAAI+mB,EAAAA,yBAA+B1rC,KAAKmsE,YAxLxD,GAwLkF,EAAO,IACzGnsE,KAAK2kB,aAAa,QAAS,IAAI+mB,EAAAA,yBAA+B1rC,KAAKwsE,QAxLpD,GAwLyE,EAAO,IAC/FxsE,KAAK2kB,aAAa,SAAU,IAAI+mB,EAAAA,yBAA+B1rC,KAAKysE,QAzLrD,GAyL0E,EAAO,IAEhGzsE,KAAK2kB,aAAa,aAAc,IAAI+mB,EAAAA,yBAA+B1rC,KAAKklE,OAAQ,GAAG,EAAO,IAEtFhB,IACFlkE,KAAKosE,eAAiB/lE,EAAMmpB,cAActV,aA/L5B,EA+L0CkkD,GACxDp+D,KAAKqsE,eAAiBhmE,EAAMmpB,cAActV,aAhM5B,EAgM0CkkD,GACxDp+D,KAAKssE,eAAiBjmE,EAAMmpB,cAActV,aAjM5B,EAiM0CkkD,GAExDp+D,KAAK2kB,aACH,gBACA,IAAI+mB,EAAAA,yBAA+B1rC,KAAKosE,eArM5B,GAqMyD,EAAO,IAE9EpsE,KAAK2kB,aACH,gBACA,IAAI+mB,EAAAA,yBAA+B1rC,KAAKqsE,eAzM5B,GAyMyD,EAAO,IAE9ErsE,KAAK2kB,aACH,gBACA,IAAI+mB,EAAAA,yBAA+B1rC,KAAKssE,eA7M5B,GA6MyD,EAAO,IAGlF,EAGF,YCvNMc,GAAU,IAAI1hC,EAAAA,QACd2hC,GAAU,IAAI3hC,EAAAA,QACd4hC,GAAS,IAAI5hC,EAAAA,QACb6hC,GAAe,IAAI7hC,EAAAA,QAAc,EAAK,EAAK,GAC3C8hC,GAAc,IAAI9hC,EAAAA,QAClB+hC,GAAa,IAAI/hC,EAAAA,QA2LvB,SAnJA,cAAsC45B,GACpChyD,WAAAA,CAAYo6D,EAAOC,EAAYnI,GAC7B,MAAMD,EAxCV,SAAsCmI,EAAOC,GAC3C,MAAM5N,EAAM,IAAIr0B,EAAAA,eACVkiC,EAAWF,EAAMltE,OACjBqtE,EAAWD,EAAWD,EACtB7kE,EAAO+kE,GAAY,MAAQ3G,YAAcD,YACzCnB,GAAiB6H,EAAa,GAAKC,EAAW,EAC9C57C,EAAU,IAAI0Z,EAAAA,gBAAsBrlC,EAAMmpB,cAAc1mB,EAd/C,EAcqDg9D,GAA2B,GAE/F,IAAIkE,EAAa,EACbC,EAAc,EAClB,IAAK,IAAIxvD,EAAI,EAAGA,EAAIkzD,EAAYlzD,IAAK,CAEnC,GAAIA,IAAMkzD,EAAa,EACrB,IAAK,IAAIrlE,EAAI,EAAGA,EAAIslE,EAAUtlE,IAAK,CACjC,MAAM61C,EAAK6rB,EAAa1hE,EAClB81C,EAAK4rB,EAAa4D,EAAWtlE,EAC7B6hE,EAAKH,EAAa4D,GAAatlE,EAAI,GAAKslE,EACxCxD,EAAKJ,GAAe1hE,EAAI,GAAKslE,EAEnC57C,EAAQq4C,OA3BC,EA2BMJ,EAAwB9rB,EAAIisB,EAAIhsB,GAC/C6rB,IACAj4C,EAAQq4C,OA7BC,EA6BMJ,EAAwB7rB,EAAIgsB,EAAID,GAC/CF,GACF,CAGFD,GAAc4D,CAChB,CAEA7N,EAAIqH,SAASp1C,GACb,MAAMmlB,EAAM9wC,EAAMmpB,cAActV,aAvCjB,EAuC+B2zD,GAK9C,OAJA9N,EAAIp7C,aAAa,WAAY,IAAI+mB,EAAAA,gBAAsByL,EAxCxC,IA0Cf4oB,EAAIkG,WAAayH,EAEV3N,CACT,CAIqB+N,CAA6BJ,EAAOC,GACrDjhD,MAAM64C,EAAUC,GAChBxlE,KAAK+tE,YAAcJ,EAEnB,MAAMK,EAAWhuE,KAAKiuE,UAAY,GAClC,IAAK,IAAI3lE,EAAI,EAAGA,EAAIolE,EAAMltE,SAAU8H,EAClC0lE,EAAS1lE,GAAK,IAAIojC,EAAAA,OAEtB,CAEA24B,OAAAA,CAAQC,EAASzsB,GAA4C,IAAlCq2B,EAAQliE,UAAAxL,OAAA,QAAAoiB,IAAA5W,UAAA,IAAAA,UAAA,GAAUmiE,EAAMniE,UAAAxL,OAAA,QAAAoiB,IAAA5W,UAAA,IAAAA,UAAA,GACjD,MAAM4hE,EAAW5tE,KAAKylE,UAAUQ,WAAWzlE,OACrCmtE,EAAa3tE,KAAK+tE,YAClBK,EAAgBR,EAAW5tE,KAAK+tE,YAAczJ,EA9DvC,EAgEbtkE,KAAKquE,WAAWx2B,EAAU+1B,EAAUD,EAAYS,GAE5CF,EACFluE,KAAKsuE,iBAAiBV,EAAUD,EAAYS,GAE5CpuE,KAAKuuE,gBAAgBX,EAAUD,EAAYS,GAGzCD,GACFnuE,KAAKwuE,QAAQZ,EAAUD,EAAYS,EAEvC,CAEAC,UAAAA,CAAWx2B,EAAU+1B,EAAUD,EAAYS,GACzC,MAAMJ,EAAWhuE,KAAKiuE,UAChBnE,EAAY9pE,KAAKimE,WACjByH,EAAQ1tE,KAAKylE,UAAUQ,WAE7B,IAAK,IAAI39D,EAAI,EAAGmmE,EAASL,EAAe9lE,EAAIqlE,IAAcrlE,EAAG,CAC3D,MAAMomE,EAAM72B,EAASvvC,GAErB,IAAK,IAAIoT,EAAI,EAAGA,EAAIkyD,IAAYlyD,EAAG+yD,GArFxB,EAsFTT,EAAStyD,GAAGjE,KAAKi2D,EAAMhyD,IAAIs8B,aAAa02B,GAAK7F,QAAQiB,EAAW2E,EAEpE,CACF,CAEAF,eAAAA,CAAgBX,EAAUD,EAAYS,GACpC,MAAMO,EA5FO,EA4FMf,EAEnB,IAAK,IAAItlE,EAAI,EAAGmmE,EAASL,EAAe9lE,EAAIqlE,IAAcrlE,EAAGmmE,GAAUE,EACrE3uE,KAAK4uE,oBAAoBhB,EAAUa,GAAQ,EAE/C,CAEAH,gBAAAA,CAAiBV,EAAUD,EAAYS,GACrC,MAAM7G,EAAUvnE,KAAKmmE,SACfwI,EArGO,EAqGMf,EAEnB,IAAIa,EAASL,EAIb,IAAK,IAAI1yD,EAAI,EAAGA,EAAIkyD,IAAYlyD,EAAG+yD,GA3GtB,EA4GXlB,GAAa1E,QAAQtB,EAASkH,GAKhC,GAAIA,EAAS,EAAIE,EAAa,EAC5B,IAAK,IAAIjzD,EAAI,EAAGA,EAAIkyD,IAAYlyD,EAAG+yD,GAlHxB,EAmHTnB,GAAO1E,UAAUrB,EAASkH,EAAS,EAAIE,GAAY9F,QAAQtB,EAASkH,QAGtEzuE,KAAK4uE,oBAAoBhB,EAAUa,GAAQ,GAAOE,GAClDF,GAAUE,EAIZ,IAAK,IAAIrmE,EAAI,EAAGA,EAAIqlE,IAAcrlE,EAAGmmE,GAAUE,EAC7C3uE,KAAK4uE,oBAAoBhB,EAAUa,GAAQ,GAAOE,EAEtD,CASAC,mBAAAA,CAAoBhB,EAAUa,EAAQI,EAASC,GAC7C,MAAMd,EAAWhuE,KAAKiuE,UAChB1G,EAAUvnE,KAAKmmE,SAErB6H,EAAS,GAAGpF,UAAU5oE,KAAKimE,WAAYwI,GACvCT,EAASJ,EAAW,GAAGhF,UAAU5oE,KAAKimE,WAAYwI,EA5IrC,GA4I+Cb,EAAW,IAEvE,IAAK,IAAIlyD,EAAI,EAAGA,EAAIkyD,IAAYlyD,EAAG+yD,GA9ItB,EA+IP/yD,EAAIkyD,EAAW,GACjBI,EAAStyD,EAAI,GAAGktD,UAAU5oE,KAAKimE,WAAYwI,EAhJlC,GAmJPI,GACFpB,GAAW7E,UAAU5oE,KAAKimE,WAAYwI,EAASK,GAE/C1B,GAAQ2B,WAAWf,GAAUtyD,EAAIkyD,EAAW,GAAKA,GAAWI,GAAUtyD,EAAI,GAAKkyD,IAAWvmC,YAC1FgmC,GAAQ0B,WAAWf,EAAStyD,GAAI+xD,IAAYpmC,YAC5CimC,GAAOnmC,aAAakmC,GAASD,IAAS/lC,YAAYwhC,QAAQtB,EAASkH,KAEnErB,GAAQ2B,WAAWf,EAAStyD,GAAIsyD,GAAUtyD,EAAIkyD,EAAW,GAAKA,IAAWvmC,YACzEgmC,GAAQ0B,WAAWf,EAAStyD,GAAIsyD,GAAUtyD,EAAI,GAAKkyD,IAAWvmC,YAC9DimC,GAAO74B,WAAW24B,GAASC,IAAShmC,YAAYwhC,QAAQtB,EAASkH,GAGvE,CAEAD,OAAAA,CAAQZ,EAAUD,EAAYS,GAE5B,GAAIR,EAAW,GAAKD,EAAa,EAC/B,OAEF,MAAM7D,EAAY9pE,KAAKimE,WACjBsB,EAAUvnE,KAAKmmE,SACf6H,EAAWhuE,KAAKiuE,UAChBU,EAzKO,EAyKMf,EAGnBI,EAAS,GAAGpF,UAAUkB,EAAWsE,GACjCJ,EAAS,GAAGpF,UAAUkB,EAAWsE,EA7KpB,GA8KbJ,EAAS,GAAGpF,UAAUkB,EAAWsE,EAAgB,GAEjDhB,GAAQ2B,WAAWf,EAAS,GAAIA,EAAS,IAAI3mC,YAC7CgmC,GAAQ0B,WAAWf,EAAS,GAAIA,EAAS,IAAI3mC,YAC7CmmC,GAAYrmC,aAAaimC,GAASC,IAAShmC,YAE3C,IAAIonC,EAASL,EAEb,IAAK,IAAI1yD,EAAI,EAAGA,EAAe,EAAXkyD,IAAgBlyD,EAAG+yD,GAtL1B,EAuLXjB,GAAY3E,QAAQtB,EAASkH,GAE/B,GAAId,EAAa,EAEf,IAAK,IAAIjyD,EAAI,EAAGA,EAAIkyD,IAAYlyD,EAAG+yD,GA3LxB,EA4LTnB,GAAO1E,UAAUkB,EAAW2E,EAASE,GAAY9F,QAAQiB,EAAW2E,EAG1E,GC1LI5K,GAAW,IAAIn4B,EAAAA,MACf9nB,GAAY,IAAI8nB,EAAAA,QAEtB,SAAS6/B,GAAY90D,EAAK6P,EAAKpQ,EAAGuE,EAAGqB,GACnCrF,EAAI6P,GAAOpQ,EACXO,EAAI6P,EAAM,GAAK7L,EACfhE,EAAI6P,EAAM,GAAKxK,CACjB,CAEA,SAAS0vD,GAAa/0D,EAAK6P,EAAKpQ,EAAGuE,EAAGqB,EAAGjB,GACvCpE,EAAI6P,GAAOpQ,EACXO,EAAI6P,EAAM,GAAK7L,EACfhE,EAAI6P,EAAM,GAAKxK,EACfrF,EAAI6P,EAAM,GAAKzL,CACjB,CAEA,SAASu+C,GAAU3iD,EAAKu4D,EAAiBC,EAAeC,GACtD,MAAMhoD,EArBmB,EAqBX8nD,EACRxpD,EAAM0B,EAtBa,EAsBL+nD,EACpB,OAAOx4D,EAAIgF,SAASyL,EAAQgoD,EAAU1pD,EAAM0pD,EAC9C,CAWA,MAAMC,WAA2BzjC,EAAAA,eAC/Bp4B,WAAAA,CAAY27D,GACVviD,QACA1sB,KAAKovE,cAAcH,EACrB,CAEApK,WAAAA,GACE,OAAO,CACT,CAEAC,YAAAA,GACE9kE,KAAKggE,aAAa,YAAYvI,aAAc,EAC5Cz3D,KAAKggE,aAAa,SAASvI,aAAc,EACzCz3D,KAAKggE,aAAa,cAAcvI,aAAc,EAC9Cz3D,KAAKggE,aAAa,aAAavI,aAAc,CAC/C,CAEAiN,QAAAA,CAAS2K,EAAY1K,GACnBd,GAASl9D,IAAIg+D,GACb,IAAIr+C,EAtDmB,EAsDb+oD,EAnDG,EAoDb9D,GAAYvrE,KAAK4kE,QAASt+C,EAAKu9C,GAAS72D,EAAG62D,GAASzpD,EAAGypD,GAASlpD,GAChE2L,GArDa,EAsDbilD,GAAYvrE,KAAK4kE,QAASt+C,EAAKu9C,GAAS72D,EAAG62D,GAASzpD,EAAGypD,GAASlpD,GAChE2L,GAvDa,EAwDbilD,GAAYvrE,KAAK4kE,QAASt+C,EAAKu9C,GAAS72D,EAAG62D,GAASzpD,EAAGypD,GAASlpD,GAChE2L,GAzDa,EA0DbilD,GAAYvrE,KAAK4kE,QAASt+C,EAAKu9C,GAAS72D,EAAG62D,GAASzpD,EAAGypD,GAASlpD,EAClE,CAEA20D,UAAAA,CAAWD,EAAYE,EAAMC,GAC3B5rD,GAAUmrD,WAAWQ,EAAMC,GAC3B5rD,GAAUyjB,YACV,MAAMyiC,EAAY9pE,KAAKimE,WACjBwJ,EAAazvE,KAAK0vE,YACxB,IAAIppD,EArEmB,EAqEb+oD,EApEG,EAqETM,EAtEmB,EAsEVN,EApEA,EAqEb7D,GAAa1B,EAAWxjD,EAAKipD,EAAKr5D,EAAGq5D,EAAK90D,EAAG80D,EAAKzzD,EAAG,IACrDyvD,GAAYkE,EAAYE,EAAQ/rD,GAAU1N,EAAG0N,GAAUnJ,EAAGmJ,GAAU9H,GACpEwK,GAxEa,EAyEbqpD,GAxEa,EAyEbnE,GAAa1B,EAAWxjD,EAAKipD,EAAKr5D,EAAGq5D,EAAK90D,EAAG80D,EAAKzzD,GAAI,IACtDyvD,GAAYkE,EAAYE,EAAQ/rD,GAAU1N,EAAG0N,GAAUnJ,EAAGmJ,GAAU9H,GACpEwK,GA5Ea,EA6EbqpD,GA5Ea,EA6EbnE,GAAa1B,EAAWxjD,EAAKkpD,EAAKt5D,EAAGs5D,EAAK/0D,EAAG+0D,EAAK1zD,EAAG,IACrDyvD,GAAYkE,EAAYE,EAAQ/rD,GAAU1N,EAAG0N,GAAUnJ,EAAGmJ,GAAU9H,GACpEwK,GAhFa,EAiFbqpD,GAhFa,EAiFbnE,GAAa1B,EAAWxjD,EAAKkpD,EAAKt5D,EAAGs5D,EAAK/0D,EAAG+0D,EAAK1zD,GAAI,IACtDyvD,GAAYkE,EAAYE,EAAQ/rD,GAAU1N,EAAG0N,GAAUnJ,EAAGmJ,GAAU9H,EACtE,CAEAipD,UAAAA,CAAW6K,EAAaC,EAAW5mD,GACjC,MAAM/B,EAxFiB,EAwFT0oD,EACRpqD,EAzFiB,EAyFXqqD,EACZ/lE,IAAAA,KAAO9J,KAAKqlE,MAAOp8C,EAAOzD,EAAK0B,GAC/BlnB,KAAKggE,aAAa,cAAcvI,aAAc,CAChD,CAEAqY,iBAAAA,CAAkBd,EAAiBC,GACjC,MAAO,CACL7V,GAAUp5D,KAAKimE,WAAY+I,EAAiBC,EA/FjC,GAgGX7V,GAAUp5D,KAAK0vE,YAAaV,EAAiBC,EA/FlC,GAiGf,CAEAc,eAAAA,CAAgBf,EAAiBC,GAC/B,OAAO7V,GAAUp5D,KAAK4kE,QAASoK,EAAiBC,EAnGnC,EAoGf,CAEAe,kBAAAA,CAAmBhB,EAAiBC,GAClC,OAAO7V,GAAUp5D,KAAKklE,OAAQ8J,EAAiBC,EAAe,EAChE,CAEAgB,sBAAAA,GACE,OA9GuB,CA+GzB,CAEAC,eAAAA,GACE,OAjHa,CAkHf,CAEAC,WAAAA,CAAYnB,EAAiBlF,GAC3B,MAAMsG,EAtHiB,EAsHNpB,EArHJ,EAsHb,GAAIlF,aAAqBlgE,OAA8B,IAArBkgE,EAAUtpE,OAAc,CACxDR,KAAKimE,WAAWt/D,IAAImjE,EAAU,GAAIsG,GAClC,MAAMC,EAzHe,EAyHJrB,EAvHN,EAwHXhvE,KAAK0vE,YAAY/oE,IAAImjE,EAAU,GAAIuG,EACrC,MACErwE,KAAKimE,WAAWt/D,IAAImjE,EAAWsG,EAEnC,CAEAE,SAAAA,CAAUtB,EAAiBtJ,GACzB,MAAMx+C,EAjIiB,EAiIT8nD,EA9HD,EA+HbhvE,KAAK4kE,QAAQj+D,IAAI++D,EAAQx+C,EAC3B,CAEAkoD,aAAAA,CAAcH,GACZjvE,KAAKuwE,aAtIkB,EAsIHtB,EACpB,MAAMnI,EAAc9mE,KAAKuwE,aACnBxJ,EAAgBD,EAzIJ,MA0IlB9mE,KAAKooB,OAAS/hB,EAAMmpB,cAAcu3C,EAAgBE,YAAcC,YAA6B,EAAhB+H,GAC7EjvE,KAAKimE,WAAa5/D,EAAMmpB,cAActV,aAzIzB,EAyIuC4sD,GACpD9mE,KAAK4kE,QAAUv+D,EAAMmpB,cAActV,aAxItB,EAwIoC4sD,GACjD9mE,KAAK0vE,YAAcrpE,EAAMmpB,cAActV,aA1I1B,EA0IwC4sD,GACrD,MAAMzB,EAAQrlE,KAAKklE,OAAS7+D,EAAMmpB,cAActV,aAAc4sD,GAC9Dh9D,IAAAA,KAAOu7D,EAAO,GAEd,MAAMj1D,EAAQpQ,KAAKooB,OACnB,IAAIooD,EAAc,EACdC,EAAc,EAClB,IAAK,IAAI/0D,EAAI,EAAGA,EAAIuzD,EAAevzD,IAAK80D,GAAe,EAAGC,GAnJnC,EAoJrBrgE,EAAMogE,GAAeC,EACrBrgE,EAAMogE,EAAc,GAAKC,EAAc,EACvCrgE,EAAMogE,EAAc,GAAKC,EAAc,EACvCrgE,EAAMogE,EAAc,GAAKC,EACzBrgE,EAAMogE,EAAc,GAAKC,EAAc,EACvCrgE,EAAMogE,EAAc,GAAKC,EAAc,EAEzCzwE,KAAKonE,SAAS,IAAI17B,EAAAA,gBAAsB1rC,KAAKooB,OAAQ,IAErDpoB,KAAK2kB,aAAa,WAAY,IAAI+mB,EAAAA,gBAAsB1rC,KAAKimE,WA5JhD,IA6JbjmE,KAAK2kB,aAAa,QAAS,IAAI+mB,EAAAA,gBAAsB1rC,KAAK4kE,QA3J7C,IA4Jb5kE,KAAK2kB,aAAa,aAAc,IAAI+mB,EAAAA,gBAAsB25B,EAAO,IACjErlE,KAAK2kB,aAAa,YAAa,IAAI+mB,EAAAA,gBAAsB1rC,KAAK0vE,YA9JjD,GA+Jf,EAGF,YChHA,SAhDA,cAA4BgB,GAC1B7L,WAAAA,GACE,OAAO,CACT,CAEAjB,qBAAAA,GACE,MAAM,YAAEltB,GAAgB12C,KAExB,IAAIk3C,EAAgB,EACpB,MAAMtuC,EAAS,IAAI8iC,EAAAA,QACfgL,GACFA,EAAYM,UAAUpuC,GAExB,MAAMkhE,EAAY9pE,KAAKimE,WACjB/C,EAASljE,KAAK22C,gBAAkB,IAAIjL,EAAAA,OACpChc,EAAO1vB,KAAKimE,WAAWzlE,OACvB22C,EAAM,IAAIzL,EAAAA,QACVilC,EAAU3wE,KAAKkwE,kBACrB,IAAK,IAAI5nE,EAAI,EAAGA,EAAIonB,EAAMpnB,GAAKqoE,EAAS,CACtCx5B,EAAIxwC,IAAImjE,EAAUxhE,GAAIwhE,EAAUxhE,EAAI,GAAIwhE,EAAUxhE,EAAI,IACtD,MAAM8uC,EAAgBxuC,EAAOyuC,kBAAkBF,GAC3CD,EAAgBE,IAClBF,EAAgBE,EAEpB,CACA8rB,EAAOv8D,IAAIiC,EAAQH,KAAK6uC,KAAKJ,IAC7Bl3C,KAAK22C,eAAiBusB,CACxB,CAEAS,kBAAAA,GACE,MAAMmG,EAAY9pE,KAAKimE,WACjBpjB,EAAM,IAAInX,EAAAA,KACVhc,EAAO1vB,KAAKimE,WAAWzlE,OACvB2lC,EAAS,IAAIuF,EAAAA,QACbilC,EAAU3wE,KAAKkwE,kBACrB,IAAK,IAAI5nE,EAAI,EAAGA,EAAIonB,EAAMpnB,GAAKqoE,EAC7BxqC,EAAOx/B,IAAImjE,EAAUxhE,GAAIwhE,EAAUxhE,EAAI,GAAIwhE,EAAUxhE,EAAI,IACzDu6C,EAAI/L,cAAc3Q,GAEpBnmC,KAAK02C,YAAcmM,CACrB,CAEAnL,QAAAA,GACE13C,KAAK8kE,eACL9kE,KAAK4jE,uBACP,GChDImE,GAAY,IAAIr8B,EAAAA,QAChBs8B,GAAU,IAAIt8B,EAAAA,QAyCpB,SAvCA,cAAmC45B,GACjChyD,WAAAA,CAAY8qD,EAAelqC,GAEzBxH,MADoB,IAAIgf,EAAAA,iBAAuB,EAAG,EAAG,EAAKjjC,KAAKgM,IAAI,EAAGyf,GAAiB,GAAG,GACvEkqC,GAEnB,MAAMuH,EAAY3lE,KAAK4lE,WACvB5lE,KAAK0nE,UAAY1nE,KAAKylE,UAAUkB,WAAWxiD,SAASvP,MACpD5U,KAAKioE,YAAcjoE,KAAKylE,UAAUkB,WAAWc,OAAO7yD,MACpD5U,KAAKkoE,WAAa7hE,EAAMmpB,cAActV,aAZzB,EAYuCyrD,EACtD,CAEAtB,OAAAA,CAAQC,EAAS6D,EAAQC,EAAQ5D,GAC/B,MAAMmB,EAAY3lE,KAAK4lE,WACjBgL,EAAajL,EAAYrB,EAjBlB,EAmBPiE,EAAWvoE,KAAKkoE,WAChBL,EAAS7nE,KAAK0nE,UACdc,EAAUxoE,KAAKioE,YAEfS,EAAO9G,GAASvD,mBAAmB8J,EAAQC,EAAQ5D,GAEzD,IAAIl+C,EADJ0hD,GAAQW,gBAAgBD,GAExB,IAAK,IAAIpgE,EAAI,EAAGA,EAAIq9D,IAAar9D,EAC/Bge,EA3BW,EA2BLhe,EACNy/D,GAAUa,UAAUf,EAAQvhD,GAC5ByhD,GAAU/vB,aAAa0wB,GACvBX,GAAUc,QAAQN,EAAUjiD,GAE9BtmB,KAAKimE,WAAWt/D,IAAI4hE,EAAUqI,GAE9B,IAAK,IAAItoE,EAAI,EAAGA,EAAIq9D,IAAar9D,EAC/Bge,EAnCW,EAmCLhe,EACNy/D,GAAUa,UAAUJ,EAASliD,GAC7ByhD,GAAUe,aAAad,IACvBD,GAAUc,QAAQN,EAAUjiD,GAE9BtmB,KAAKmmE,SAASx/D,IAAI4hE,EAAUqI,EAC9B,GC7BF,MAAMC,WAA6BC,GACjCx9D,WAAAA,CAAYkyD,EAAayJ,EAAe8B,GACtCrkD,MAAM84C,EAAcyJ,GACpBjvE,KAAKokE,MAAM6K,GACXjvE,KAAK6rE,cAAgBkF,EAAkB,IAAIC,GAAqBxL,EAAcyJ,EAAe,GAAK,IACpG,CAEApK,WAAAA,GACE,OAAO,CACT,CAEAjB,qBAAAA,GACE,MAAMqN,EAAejxE,KAAK6rE,cAC1B,GAAIoF,EAGF,OAFAA,EAAarN,6BACb5jE,KAAK22C,eAAiBs6B,EAAat6B,gBAGrCjqB,MAAMk3C,uBACR,CAEAD,kBAAAA,GACE,MAAMsN,EAAejxE,KAAK6rE,cAC1B,GAAIoF,EAGF,OAFAA,EAAatN,0BACb3jE,KAAK02C,YAAcu6B,EAAav6B,aAGlChqB,MAAMi3C,oBACR,CAEAhL,OAAAA,CAAQC,EAAWC,GAEjB,IADqB74D,KAAK6rE,cAExB,OAEF,MAAMqF,EAAWlxE,KAAK4lE,WACtB5lE,KAAK6rE,cAAclT,QAAQC,EAAWC,GACtC,IAAK,IAAIvwD,EAAI,EAAGC,EAAIswD,EAAWr4D,OAAQ8H,EAAIC,IAAKD,EAAG,CACjD,IAAI,SAAEo7D,GAAa7K,EAAWvwD,QACbsa,IAAb8gD,IAGJA,EAAYA,EAAWwN,EAAY,EACnCrY,EAAWvwD,GAAGo7D,SAAWA,EAC3B,CACF,CAEAgB,QAAAA,CAAShB,EAAUiB,GACjB,MAAMgB,EAAY3lE,KAAK4lE,WACvB,IAAK,IAAIt9D,EAAIo7D,EAAWiC,EAAWngD,EAAMld,EAAIq9D,EAAWr9D,EAAIkd,IAAOld,EACjEokB,MAAMg4C,SAASp8D,EAAGq8D,EAEtB,CAEA2K,UAAAA,CAAW5L,EAAUyN,EAAQ5B,EAAMC,GACjC,MAAM7J,EAAY3lE,KAAK4lE,WACjBt/C,EAAMo9C,EAAWiC,EAAYwL,EACnCzkD,MAAM4iD,WAAWhpD,EAAKipD,EAAMC,GACxBxvE,KAAK6rE,eACP7rE,KAAK6rE,cAAcxH,QAAQX,EAAWiC,EAAYwL,EAAQ5B,EAAMC,EA1EhD,GA4EpB,CAEA93B,QAAAA,GACE13C,KAAK8kE,eACL9kE,KAAK4jE,uBACP,CAEAmB,UAAAA,CAAWC,EAAc/7C,GACvB,MAAM08C,EAAY3lE,KAAK4lE,WACvB,IAAK,IAAIt9D,EAAI,EAAGC,EAAIy8D,EAAaxkE,OAAQ8H,EAAIC,IAAKD,EAAG,CACnD,MAAM2b,EAAO+gD,EAAa18D,GAAKq9D,EAC/Bj5C,MAAMq4C,WAAW9gD,EAAMA,EAAO0hD,EAAY,EAAG18C,EAC/C,CACF,CAEAmwC,SAAAA,CAAU4L,GACR,MAAM5G,EAAgB4G,EAAaxkE,OAC7BmlE,EAAY3lE,KAAK4lE,WACjB3wC,EAAS,IAAI47C,GAAqBzS,EAAeuH,GAAW,GAClE,IAAK,IAAIr9D,EAAI,EAAGC,EAAIy8D,EAAaxkE,OAAQ8H,EAAIC,IAAKD,EAAG,CACnD,MAAMk+D,EAAcl+D,EAAIq9D,EAClBiK,EAAc5K,EAAa18D,GAAKq9D,EACtC1wC,EAAOk7C,YAAY3J,EAAaxmE,KAAK8vE,kBAAkBF,EAAajK,IACpE1wC,EAAOq7C,UAAU9J,EAAaxmE,KAAK+vE,gBAAgBH,EAAajK,GAClE,CAIA,OAFA1wC,EAAO0hB,eAAiB32C,KAAK22C,eAC7B1hB,EAAOyhB,YAAc12C,KAAK02C,YACnB,CAACzhB,EACV,CAEAmvC,KAAAA,CAAMuB,GACJ3lE,KAAK4lE,WAAaD,CACpB,EAGF,YC9GMoC,GAAY,IAAIr8B,EAAAA,QAEtB,MAAM0lC,WAA8BN,GAClCx9D,WAAAA,CAAY27D,GACVviD,MAAsB,EAAhBuiD,GACNjvE,KAAKokE,MAAM6K,GACXjvE,KAAK6rE,cAAgB,IAAIC,GAA0BmD,EAAe,EACpE,CAEA5K,OAAAA,CAAQC,EAAS6D,EAAQC,GACvBpoE,KAAK6rE,cAAcxH,QAAQC,EAAS6D,EAAQC,EAX1B,IAYlB,MAAMv5D,EAAS,EAAIy1D,EACnByD,GAAUU,YAAYN,EAAQC,EAAQ,IACtC17C,MAAM4iD,WAAWzgE,EAAQs5D,EAAQJ,IACjCr7C,MAAM4iD,WAAWzgE,EAAS,EAAGk5D,GAAWK,EAC1C,CAEA1D,QAAAA,CAASJ,EAASyE,EAAWC,GAC3B,MAAMn6D,EAAS,EAAIy1D,EACnB53C,MAAMg4C,SAAS71D,EAAQk6D,GACvBr8C,MAAMg4C,SAAS71D,EAAS,EAAGm6D,EAC7B,CAEArQ,OAAAA,CAAQC,EAAWC,GACb74D,KAAK6rE,eACP7rE,KAAK6rE,cAAclT,QAAQC,EAAWC,EAE1C,CAEAO,SAAAA,CAAUiY,GACR,MAAMjT,EAAgBiT,EAAe7wE,OAC/By0B,EAAS,IAAIm8C,GAAsBhT,GAAe,GACxD,IAAK,IAAI91D,EAAI,EAAGC,EAAI61D,EAAe91D,EAAIC,IAAKD,EAAG,CAC7C,MAAMsnE,EAAcyB,EAAe/oE,GACnC2sB,EAAOk7C,YAAY7nE,EAAGtI,KAAK8vE,kBAAkBF,EAAa,IAC1D36C,EAAOq7C,UAAUhoE,EAAGtI,KAAK+vE,gBAAgBH,EAAa,GACxD,CAIA,OAFA36C,EAAO0hB,eAAiB32C,KAAK22C,eAC7B1hB,EAAOyhB,YAAc12C,KAAK02C,YACnB,CAACzhB,EACV,CAEAmvC,KAAAA,CAAM6K,GACJjvE,KAAKsxE,WAA6B,EAAhBrC,CACpB,EAIF,YClDMsC,GAAU,CACd,IAAI7lC,EAAAA,QAAc,EAAG,EAAG,GACxB,IAAIA,EAAAA,SAAe,EAAG,EAAG,GACzB,IAAIA,EAAAA,QAAc,EAAG,EAAG,GACxB,IAAIA,EAAAA,QAAc,GAAI,EAAG,GACzB,IAAIA,EAAAA,QAAc,EAAG,EAAG,GACxB,IAAIA,EAAAA,QAAc,EAAG,GAAI,IAErB8lC,GAAWD,GAAQ/wE,OACnBixE,GAAW,IAAI/lC,EAAAA,QACfgmC,GAAW,IAAIhmC,EAAAA,QAErB,MAAMimC,WAAsB5N,GAAmB8M,KAC7Cv9D,WAAAA,CAAYkyD,GACV94C,MAAM84C,EAAaA,EAAcgM,GAAW,EAAK,GAAG,EACtD,CAEAnN,OAAAA,CAAQC,EAASC,EAASC,GACxBxkE,KAAKwjE,UAAUc,EAASC,EAASC,GAEjC,IAAK,IAAIl8D,EAAI,EAAGA,EAAIkpE,GAAW,IAAKlpE,EAAG,CACrC,MAAMwqB,EAAY,EAAJxqB,EACdmpE,GAASv7D,EAAIquD,EAAQruD,EAAIq7D,GAAQz+C,GAAO5c,EAAIsuD,EAC5CiN,GAASh3D,EAAI8pD,EAAQ9pD,EAAI82D,GAAQz+C,GAAOrY,EAAI+pD,EAC5CiN,GAAS31D,EAAIyoD,EAAQzoD,EAAIy1D,GAAQz+C,GAAOhX,EAAI0oD,EAC5C,MAAMzxC,EAASD,EAAQ,EACvB4+C,GAASx7D,EAAIquD,EAAQruD,EAAIq7D,GAAQx+C,GAAQ7c,EAAIsuD,EAC7CkN,GAASj3D,EAAI8pD,EAAQ9pD,EAAI82D,GAAQx+C,GAAQtY,EAAI+pD,EAC7CkN,GAAS51D,EAAIyoD,EAAQzoD,EAAIy1D,GAAQx+C,GAAQjX,EAAI0oD,EAC7CxkE,KAAKsvE,WAAWhL,EAASh8D,EAAGmpE,GAAUC,GACxC,CACF,EAEF,YChCM7N,GAAW,IAAIn4B,EAAAA,MAQrB,MAAMkmC,WAA2BlmC,EAAAA,eAC/Bp4B,WAAAA,CAAY0wD,EAAch7D,GACxB0jB,QAEA1sB,KAAK6xE,MAAQ7oE,EACbhJ,KAAK+0B,MAAQ/0B,KAAK6xE,MAAM98C,MACxB/0B,KAAK8xE,QAAUzrE,EAAMmpB,cAActV,aAhBlB,EAgBgC8pD,GACjDhkE,KAAK4kE,QAAUv+D,EAAMmpB,cAActV,aAhBpB,EAgBkC8pD,EACnD,CAEAK,OAAAA,CAAQX,EAAUvsB,EAAK5zB,GACrB,MAAMwuD,EAAS/xE,KAAK8xE,QACpB,IAAIxrD,EAtBa,EAsBQo9C,EACzBqO,EAAOzrD,KAAS6wB,EAAIjhC,EACpB67D,EAAOzrD,KAAS6wB,EAAI18B,EACpBs3D,EAAOzrD,KAAS6wB,EAAIr7B,EACpBi2D,EAAOzrD,GAAO/C,CAChB,CAEAmhD,QAAAA,CAAShB,EAAUiB,GACjBd,GAASl9D,IAAIg+D,GACb,MAAMe,EAAS1lE,KAAK4kE,QACpB,IAAIt+C,EA/BW,EA+BQo9C,EACvBgC,EAAOp/C,KAASu9C,GAAS72D,EACzB04D,EAAOp/C,KAASu9C,GAASzpD,EACzBsrD,EAAOp/C,GAAOu9C,GAASlpD,CACzB,CAEA+8B,QAAAA,GACE13C,KAAK8kE,eACL9kE,KAAK4jE,uBACP,CAEAkB,YAAAA,GACE9kE,KAAKsmD,QACP,CAEAye,UAAAA,GACE,CAGFpM,OAAAA,GACA,CAEAS,SAAAA,GACE,MAAO,EACT,EAEF,YCpDA,MAAM4Y,GACJ1+D,WAAAA,GACEtT,KAAKiyE,mBAAqB,KAC1BjyE,KAAKkyE,gBAAkB,KACvBlyE,KAAKmyE,WAAa,IACpB,CAEA/nE,MAAAA,CAAOgoE,GACL,MACMC,EAAKD,EAAkBA,EAAkBA,EAC/C,GAAIC,EAFc,UAGhB,MAAM,IAAIhnE,MAAM,uDAKlB,OAHArL,KAAKiyE,mBAAqB5rE,EAAMmpB,cAActV,aAAc,GAAiBm4D,GAC7EryE,KAAKkyE,gBAAkB7rE,EAAMmpB,cAAcvV,WAAYo4D,GACvDryE,KAAKmyE,WAAa9rE,EAAMmpB,cAAcvV,WAAYo4D,GAC3C,CACT,CAEA53B,OAAAA,GACEz6C,KAAKmyE,WAAa,KAClBnyE,KAAKkyE,gBAAkB,KACvBlyE,KAAKiyE,mBAAqB,IAC5B,EAIFD,GAAoB7lE,UAAUmmE,qBAAuB,EAClD,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAC7D,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAC1D,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAC1D,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAC3D,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACxD,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACxD,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACtD,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAC3D,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACzD,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACxD,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAC1D,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACxD,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAC1D,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAC1D,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACpD,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACxD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAClD,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACxD,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACtD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EACpD,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACxD,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAC1D,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACpD,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACxD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAClD,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACxD,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACtD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAClD,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,EACpD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACpD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACpD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACrD,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAClD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAClD,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,EAClD,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAClD,GAAI,EAAG,EAAG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","sources":["webpack://Miew/webpack/universalModuleDefinition","webpack://Miew/./src/utils/MiewCLIParser.js","webpack://Miew/./src/utils/SelectionParser.js","webpack://Miew/./vendor/js/Smooth.js","webpack://Miew/./vendor/js/mmtf.js","webpack://Miew/external umd {\"module\":\"lodash\",\"commonjs\":\"lodash\",\"commonjs2\":\"lodash\",\"amd\":\"lodash\",\"root\":\"_\"}","webpack://Miew/external umd {\"module\":\"three\",\"commonjs\":\"three\",\"commonjs2\":\"three\",\"amd\":\"three\",\"root\":\"THREE\"}","webpack://Miew/webpack/bootstrap","webpack://Miew/webpack/runtime/compat get default export","webpack://Miew/webpack/runtime/define property getters","webpack://Miew/webpack/runtime/hasOwnProperty shorthand","webpack://Miew/../../node_modules/spin.js/spin.js","webpack://Miew/./src/Timer.js","webpack://Miew/./src/gfx/Stats.js","webpack://Miew/./src/utils/EventDispatcher.js","webpack://Miew/./src/utils/logger.js","webpack://Miew/./src/utils.js","webpack://Miew/./src/utils/JobHandle.js","webpack://Miew/./src/settings.js","webpack://Miew/./src/options.js","webpack://Miew/./src/chem/Atom.js","webpack://Miew/./src/chem/Element.js","webpack://Miew/./src/chem/Bond.js","webpack://Miew/./src/chem/Residue.js","webpack://Miew/./src/chem/ResidueType.js","webpack://Miew/./src/chem/Chain.js","webpack://Miew/./src/chem/StructuralElement.js","webpack://Miew/./src/chem/Helix.js","webpack://Miew/./src/chem/Strand.js","webpack://Miew/./src/chem/Sheet.js","webpack://Miew/./src/chem/SGroup.js","webpack://Miew/./src/chem/selectors/selectArgs.js","webpack://Miew/./src/chem/selectors/selectorsBase.js","webpack://Miew/./src/chem/selectors/selectOps.js","webpack://Miew/./src/chem/selectors.js","webpack://Miew/./src/chem/BiologicalUnit.js","webpack://Miew/./src/chem/Assembly.js","webpack://Miew/./src/chem/Component.js","webpack://Miew/./src/chem/AtomPairs.js","webpack://Miew/./src/chem/AutoBond.js","webpack://Miew/./src/chem/AromaticLoopsMarker.js","webpack://Miew/./src/chem/VoxelWorld.js","webpack://Miew/./src/chem/HBondInfo.js","webpack://Miew/./src/chem/SecondaryStructureMap.js","webpack://Miew/./src/chem/Complex.js","webpack://Miew/./src/chem/Volume.js","webpack://Miew/./src/chem/Molecule.js","webpack://Miew/./src/chem.js","webpack://Miew/./src/gfx/CSS2DObject.js","webpack://Miew/./src/gfx/RCGroup.js","webpack://Miew/./src/gfx/gfxutils.js","webpack://Miew/./src/Visual.js","webpack://Miew/./src/utils/EntityList.js","webpack://Miew/./src/utils/makeContextDependent.js","webpack://Miew/./src/gfx/geometries/SphereCollisionGeo.js","webpack://Miew/./src/gfx/geometries/InstancedSpheresGeometry.js","webpack://Miew/./src/gfx/geometries/ChunkedObjectsGeometry.js","webpack://Miew/./src/gfx/geometries/SimpleSpheresGeometry.js","webpack://Miew/./src/gfx/geometries/Simple2CCylindersGeometry.js","webpack://Miew/./src/gfx/geometries/CylinderBufferGeometry.js","webpack://Miew/./src/gfx/geometries/Instanced2CCylindersGeometry.js","webpack://Miew/./src/gfx/geometries/ExtrudedObjectsGeometry.js","webpack://Miew/./src/gfx/geometries/ThickLinesGeometry.js","webpack://Miew/./src/gfx/geometries/LinesGeometry.js","webpack://Miew/./src/gfx/geometries/CylinderCollisionGeo.js","webpack://Miew/./src/gfx/geometries/ChunkedLinesGeometry.js","webpack://Miew/./src/gfx/geometries/TwoColorLinesGeometry.js","webpack://Miew/./src/gfx/geometries/CrossGeometry.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceMarchCube.js","webpack://Miew/./src/gfx/geometries/IsoSurface.js","webpack://Miew/./src/gfx/geometries/VolumeSurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/QuickSurfGeometry.js","webpack://Miew/./src/gfx/geometries/ContactSurface.js","webpack://Miew/./src/gfx/geometries/ContactSurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceAtomColored.js","webpack://Miew/./src/gfx/geometries/IsosurfaceBuildNormals.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceGeo.js","webpack://Miew/./src/gfx/geometries/SSIsosurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/LabelsGeometry.js","webpack://Miew/./src/gfx/geometries/geometries.js","webpack://Miew/./src/gfx/capabilities.js","webpack://Miew/./src/gfx/noiseTexture.js","webpack://Miew/./src/gfx/shaders/UberMaterial.js","webpack://Miew/./src/gfx/meshes/UberObject.js","webpack://Miew/./src/gfx/meshes/ZSpriteMesh.js","webpack://Miew/./src/gfx/meshes/ZClippedMesh.js","webpack://Miew/./src/gfx/meshes/TextMesh.js","webpack://Miew/./src/gfx/meshes/SimpleMesh.js","webpack://Miew/./src/gfx/meshes/ThickLineMesh.js","webpack://Miew/./src/gfx/meshes/InstancedMesh.js","webpack://Miew/./src/gfx/meshes/meshes.js","webpack://Miew/./src/gfx/meshes/MeshCreator.js","webpack://Miew/./src/gfx/meshes/TransformGroup.js","webpack://Miew/./src/gfx/modes/groups/ChemGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsSphereGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsSurfaceGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsSASSESGroupStub.js","webpack://Miew/./src/gfx/modes/groups/AtomsTextGroup.js","webpack://Miew/./src/gfx/modes/groups/AromaticGroup.js","webpack://Miew/./src/gfx/modes/groups/AromaticTorusGroup.js","webpack://Miew/./src/gfx/modes/groups/AromaticLinesGroup.js","webpack://Miew/./src/gfx/modes/groups/ResiduesGroup.js","webpack://Miew/./src/gfx/modes/groups/NucleicItemGroup.js","webpack://Miew/./src/gfx/modes/groups/NucleicCylindersGroup.js","webpack://Miew/./src/gfx/modes/groups/NucleicSpheresGroup.js","webpack://Miew/./src/gfx/modes/groups/CartoonHelper.js","webpack://Miew/./src/gfx/modes/groups/ResiduesSubseqGroup.js","webpack://Miew/./src/gfx/modes/groups/ResiduesTraceGroup.js","webpack://Miew/./src/gfx/modes/groups/BondsGroup.js","webpack://Miew/./src/gfx/modes/groups/BondsCylinderGroup.js","webpack://Miew/./src/gfx/modes/groups/BondsLinesGroup.js","webpack://Miew/./src/gfx/modes/groups/groups.js","webpack://Miew/./src/gfx/modes/processors/AtomsProcessor.js","webpack://Miew/./src/gfx/modes/processors/OrphanAtomsProcessor.js","webpack://Miew/./src/gfx/modes/processors/ResiduesProcessor.js","webpack://Miew/./src/gfx/modes/processors/NucleicProcessor.js","webpack://Miew/./src/gfx/modes/processors/SubseqsProcessor.js","webpack://Miew/./src/gfx/modes/processors/BondsProcessor.js","webpack://Miew/./src/gfx/modes/processors/AromaticProcessor.js","webpack://Miew/./src/gfx/modes/processors/processors.js","webpack://Miew/./src/gfx/modes/groups/GroupsFactory.js","webpack://Miew/./src/gfx/modes/Mode.js","webpack://Miew/./src/gfx/modes/LinesMode.js","webpack://Miew/./src/gfx/modes/LicoriceMode.js","webpack://Miew/./src/gfx/modes/BallsAndSticksMode.js","webpack://Miew/./src/gfx/modes/VanDerWaalsMode.js","webpack://Miew/./src/gfx/modes/TraceMode.js","webpack://Miew/./src/gfx/modes/TubeMode.js","webpack://Miew/./src/gfx/modes/CartoonMode.js","webpack://Miew/./src/gfx/modes/SurfaceMode.js","webpack://Miew/./src/gfx/modes/QuickSurfaceMode.js","webpack://Miew/./src/gfx/modes/IsoSurfaceMode.js","webpack://Miew/./src/gfx/modes/IsoSurfaceSASMode.js","webpack://Miew/./src/gfx/modes/IsoSurfaceSESMode.js","webpack://Miew/./src/gfx/modes/ContactSurfaceMode.js","webpack://Miew/./src/gfx/modes/TextMode.js","webpack://Miew/./src/gfx/modes.js","webpack://Miew/./src/gfx/palettes/Palette.js","webpack://Miew/./src/gfx/palettes/cpkPalette.js","webpack://Miew/./src/gfx/palettes/jmolPalette.js","webpack://Miew/./src/gfx/palettes/vmdPalette.js","webpack://Miew/./src/gfx/palettes.js","webpack://Miew/./src/gfx/colorers/Colorer.js","webpack://Miew/./src/gfx/colorers/ElementColorer.js","webpack://Miew/./src/gfx/colorers/ResidueTypeColorer.js","webpack://Miew/./src/gfx/colorers/SequenceColorer.js","webpack://Miew/./src/gfx/colorers/ChainColorer.js","webpack://Miew/./src/gfx/colorers/SecondaryStructureColorer.js","webpack://Miew/./src/gfx/colorers/UniformColorer.js","webpack://Miew/./src/gfx/colorers/ConditionalColorer.js","webpack://Miew/./src/gfx/colorers/ConformationColorer.js","webpack://Miew/./src/gfx/colorers/TemperatureColorer.js","webpack://Miew/./src/gfx/colorers/OccupancyColorer.js","webpack://Miew/./src/gfx/colorers/HydrophobicityColorer.js","webpack://Miew/./src/gfx/colorers/MoleculeColorer.js","webpack://Miew/./src/gfx/colorers/CarbonColorer.js","webpack://Miew/./src/gfx/colorers.js","webpack://Miew/./src/gfx/materials.js","webpack://Miew/./src/gfx/meshutils.js","webpack://Miew/./src/gfx/Representation.js","webpack://Miew/./src/ComplexVisualEdit.js","webpack://Miew/./src/ComplexVisual.js","webpack://Miew/./src/gfx/shaders/VolumeMaterial.js","webpack://Miew/./src/gfx/VolumeMesh.js","webpack://Miew/./src/gfx/VolumeBounds.js","webpack://Miew/./src/gfx/VolumeFarPlane.js","webpack://Miew/./src/VolumeVisual.js","webpack://Miew/./src/io/loaders/LoaderList.js","webpack://Miew/./src/io/loaders/Loader.js","webpack://Miew/./src/io/loaders/FileLoader.js","webpack://Miew/./src/io/loaders/XHRLoader.js","webpack://Miew/./src/io/loaders/ImmediateLoader.js","webpack://Miew/./src/io/loaders.js","webpack://Miew/./src/io/parsers/ParserList.js","webpack://Miew/./src/io/parsers/Parser.js","webpack://Miew/./src/io/parsers/pdb/Remark290.js","webpack://Miew/./src/io/parsers/pdb/Remark350.js","webpack://Miew/./src/io/parsers/PDBStream.js","webpack://Miew/./src/io/parsers/PDBParser.js","webpack://Miew/./src/io/parsers/CMLParser.js","webpack://Miew/./src/io/parsers/MMTFParser.js","webpack://Miew/./src/io/parsers/ParsingError.js","webpack://Miew/./src/io/parsers/readCIF.js","webpack://Miew/./src/io/parsers/CIFParser.js","webpack://Miew/./src/io/parsers/VolumeModel.js","webpack://Miew/./src/io/parsers/CCP4Parser.js","webpack://Miew/./src/io/parsers/XYZParser.js","webpack://Miew/./src/io/parsers/PubChemParser.js","webpack://Miew/./src/io/parsers/SDFStream.js","webpack://Miew/./src/io/parsers/SDFParser.js","webpack://Miew/./src/io/parsers/DSN6Parser.js","webpack://Miew/./src/io/parsers/GROReader.js","webpack://Miew/./src/io/parsers/GROParser.js","webpack://Miew/./src/io/parsers/MOL2Parser.js","webpack://Miew/./src/io/parsers.js","webpack://Miew/./src/io/exporters/ExporterList.js","webpack://Miew/./src/io/exporters/Exporter.js","webpack://Miew/./src/io/exporters/PDBResult.js","webpack://Miew/./src/io/exporters/PDBExporter.js","webpack://Miew/./src/io/exporters/fbx/FBXModel.js","webpack://Miew/./src/io/exporters/fbx/FBXGeometry.js","webpack://Miew/./src/io/exporters/fbx/FBX1CGeometry.js","webpack://Miew/./src/io/exporters/fbx/FBX2CCylinder.js","webpack://Miew/./src/io/exporters/fbx/FBXInfoExtractor.js","webpack://Miew/./src/io/exporters/fbx/FBXResult.js","webpack://Miew/./src/io/exporters/FBXExporter.js","webpack://Miew/./src/io/exporters.js","webpack://Miew/./src/io/io.js","webpack://Miew/./src/gfx/CSS2DRenderer.js","webpack://Miew/./src/utils/getTopWindow.js","webpack://Miew/./src/ui/ObjectControls.js","webpack://Miew/./src/ui/Picker.js","webpack://Miew/./src/gfx/Axes.js","webpack://Miew/./src/gfx/FrameInfo.js","webpack://Miew/./src/gfx/objects/SceneObject.js","webpack://Miew/./src/gfx/objects/LinesObj.js","webpack://Miew/./src/gfx/shaders/OutlineMaterial.js","webpack://Miew/./src/gfx/shaders/FXAAMaterial.js","webpack://Miew/./src/gfx/shaders/AOMaterial.js","webpack://Miew/./src/gfx/shaders/AOHorBlurMaterial.js","webpack://Miew/./src/gfx/shaders/AOVertBlurWithBlendMaterial.js","webpack://Miew/./src/gfx/shaders/AnaglyphMaterial.js","webpack://Miew/./src/gfx/ViewInterpolator.js","webpack://Miew/./src/utils/Cookies.js","webpack://Miew/./src/gfx/vr/createWebVRButton.js","webpack://Miew/./src/gfx/vr/WebVRPoC.js","webpack://Miew/./src/Miew.js","webpack://Miew/./src/utils/MiewCLIHelp.js","webpack://Miew/./src/Miew-cli.js","webpack://Miew/./src/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"lodash\"), require(\"three\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"lodash\", \"three\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Miew\"] = factory(require(\"lodash\"), require(\"three\"));\n\telse\n\t\troot[\"Miew\"] = factory(root[\"_\"], root[\"THREE\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE__535__, __WEBPACK_EXTERNAL_MODULE__698__) => {\nreturn ","/* eslint-disable */\r\n// DO NOT EDIT! Automatically generated from .jison\r\n/* parser generated by jison 0.4.18 */\r\n/*\r\n Returns a Parser object of the following structure:\r\n\r\n Parser: {\r\n yy: {}\r\n }\r\n\r\n Parser.prototype: {\r\n yy: {},\r\n trace: function(),\r\n symbols_: {associative list: name ==> number},\r\n terminals_: {associative list: number ==> name},\r\n productions_: [...],\r\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\r\n table: [...],\r\n defaultActions: {...},\r\n parseError: function(str, hash),\r\n parse: function(input),\r\n\r\n lexer: {\r\n EOF: 1,\r\n parseError: function(str, hash),\r\n setInput: function(input),\r\n input: function(),\r\n unput: function(str),\r\n more: function(),\r\n less: function(n),\r\n pastInput: function(),\r\n upcomingInput: function(),\r\n showPosition: function(),\r\n test_match: function(regex_match_array, rule_index),\r\n next: function(),\r\n lex: function(),\r\n begin: function(condition),\r\n popState: function(),\r\n _currentRules: function(),\r\n topState: function(),\r\n pushState: function(condition),\r\n\r\n options: {\r\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\r\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\r\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\r\n },\r\n\r\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\r\n rules: [...],\r\n conditions: {associative list: name ==> set},\r\n }\r\n }\r\n\r\n\r\n token location info (@$, _$, etc.): {\r\n first_line: n,\r\n last_line: n,\r\n first_column: n,\r\n last_column: n,\r\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\r\n }\r\n\r\n\r\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\r\n text: (matched text)\r\n token: (the produced terminal token, if any)\r\n line: (yylineno)\r\n }\r\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\r\n loc: (yylloc)\r\n expected: (string describing the set of expected tokens)\r\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\r\n }\r\n*/\r\nvar parser = (function(){\r\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,60],$V1=[1,62],$V2=[1,63],$V3=[1,65],$V4=[1,66],$V5=[1,67],$V6=[1,68],$V7=[1,69],$V8=[1,80],$V9=[1,72],$Va=[1,73],$Vb=[1,74],$Vc=[1,75],$Vd=[1,99],$Ve=[1,76],$Vf=[1,100],$Vg=[1,79],$Vh=[1,51],$Vi=[1,81],$Vj=[1,82],$Vk=[1,84],$Vl=[1,83],$Vm=[1,85],$Vn=[1,96],$Vo=[1,97],$Vp=[1,98],$Vq=[1,86],$Vr=[1,87],$Vs=[1,64],$Vt=[1,70],$Vu=[1,71],$Vv=[1,77],$Vw=[1,78],$Vx=[1,53],$Vy=[1,54],$Vz=[1,55],$VA=[1,61],$VB=[1,88],$VC=[1,89],$VD=[1,90],$VE=[1,91],$VF=[1,92],$VG=[1,93],$VH=[1,94],$VI=[1,95],$VJ=[1,101],$VK=[1,102],$VL=[1,103],$VM=[1,104],$VN=[1,105],$VO=[1,56],$VP=[1,57],$VQ=[1,58],$VR=[1,59],$VS=[1,115],$VT=[1,111],$VU=[1,114],$VV=[1,112],$VW=[1,113],$VX=[1,118],$VY=[1,117],$VZ=[1,134],$V_=[1,149],$V$=[1,150],$V01=[1,157],$V11=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],$V21=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,71,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],$V31=[5,6,7,9,13,15,17,18,19,20,23,25,26,27,30,33,34,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,82,83,84,85,86,87,88,89,90,91,92,93,94,95],$V41=[5,70,72],$V51=[5,74],$V61=[71,101];\r\nvar parser = {trace: function trace () { },\r\nyy: {},\r\nsymbols_: {\"error\":2,\"Program\":3,\"Command\":4,\"EOF\":5,\"RESET\":6,\"BUILD\":7,\"ALL\":8,\"HELP\":9,\"Path\":10,\"MOTM\":11,\"OneArgCommand\":12,\"GET\":13,\"STRING\":14,\"SET\":15,\"Value\":16,\"SET_SAVE\":17,\"SET_RESTORE\":18,\"SET_RESET\":19,\"PRESET\":20,\"AddRepresentation\":21,\"EditRepresentation\":22,\"REMOVE\":23,\"RepresentationReference\":24,\"HIDE\":25,\"SHOW\":26,\"LIST\":27,\"EXPAND_KEY\":28,\"SELECTOR_KEY\":29,\"SELECT\":30,\"AS\":31,\"WordAll\":32,\"SELECTOR\":33,\"WITHIN\":34,\"NUMBER\":35,\"OF\":36,\"MATERIAL\":37,\"IDENTIFIER\":38,\"ModeCMD\":39,\"ColorCMD\":40,\"VIEW\":41,\"BASE_64\":42,\"UNIT\":43,\"DSSP\":44,\"SCALE\":45,\"ROTATE\":46,\"AxesList\":47,\"TRANSLATE\":48,\"CENTER\":49,\"GetURLBranch\":50,\"Screenshot\":51,\"LINE\":52,\"ArgList\":53,\"LISTOBJ\":54,\"REMOVEOBJ\":55,\"URL\":56,\"VIEW_KEY\":57,\"SCREENSHOT\":58,\"LOAD\":59,\"Url\":60,\"FILE_KEY\":61,\"ADD\":62,\"Description\":63,\"REP\":64,\"MODE\":65,\"COLOR\":66,\"Descriptor\":67,\"RepresentationOwnProperty\":68,\"RepresentationOwnPropertyOpts\":69,\"DESC_KEY\":70,\"=\":71,\"DESC_KEY_OPTS\":72,\"AxesArg\":73,\"DESC_KEY_AXES\":74,\"Arg\":75,\"PathWoDescKey\":76,\"HEX\":77,\"BOOL\":78,\"Word\":79,\"CommandSetWoDESC_KEY\":80,\"DescKeys\":81,\"CLEAR\":82,\"FILE_LIST\":83,\"FILE_REGISTER\":84,\"FILE_DELETE\":85,\"PRESET_ADD\":86,\"PRESET_DELETE\":87,\"PRESET_UPDATE\":88,\"PRESET_RENAME\":89,\"PRESET_OPEN\":90,\"CREATE_SCENARIO\":91,\"RESET_SCENARIO\":92,\"DELETE_SCENARIO\":93,\"ADD_SCENARIO_ITEM\":94,\"LIST_SCENARIO\":95,\"PDB_KEY\":96,\"DELAY_KEY\":97,\"PRST_KEY\":98,\"DESCRIPTION_KEY\":99,\"CommandSet\":100,\".\":101,\"PresetPath\":102,\"/\":103,\"HexOrNumber\":104,\"$accept\":0,\"$end\":1},\r\nterminals_: {2:\"error\",5:\"EOF\",6:\"RESET\",7:\"BUILD\",8:\"ALL\",9:\"HELP\",11:\"MOTM\",13:\"GET\",14:\"STRING\",15:\"SET\",17:\"SET_SAVE\",18:\"SET_RESTORE\",19:\"SET_RESET\",20:\"PRESET\",23:\"REMOVE\",25:\"HIDE\",26:\"SHOW\",27:\"LIST\",28:\"EXPAND_KEY\",29:\"SELECTOR_KEY\",30:\"SELECT\",31:\"AS\",33:\"SELECTOR\",34:\"WITHIN\",35:\"NUMBER\",36:\"OF\",37:\"MATERIAL\",38:\"IDENTIFIER\",41:\"VIEW\",42:\"BASE_64\",43:\"UNIT\",44:\"DSSP\",45:\"SCALE\",46:\"ROTATE\",48:\"TRANSLATE\",49:\"CENTER\",52:\"LINE\",54:\"LISTOBJ\",55:\"REMOVEOBJ\",56:\"URL\",57:\"VIEW_KEY\",58:\"SCREENSHOT\",59:\"LOAD\",61:\"FILE_KEY\",62:\"ADD\",64:\"REP\",65:\"MODE\",66:\"COLOR\",70:\"DESC_KEY\",71:\"=\",72:\"DESC_KEY_OPTS\",74:\"DESC_KEY_AXES\",77:\"HEX\",78:\"BOOL\",82:\"CLEAR\",83:\"FILE_LIST\",84:\"FILE_REGISTER\",85:\"FILE_DELETE\",86:\"PRESET_ADD\",87:\"PRESET_DELETE\",88:\"PRESET_UPDATE\",89:\"PRESET_RENAME\",90:\"PRESET_OPEN\",91:\"CREATE_SCENARIO\",92:\"RESET_SCENARIO\",93:\"DELETE_SCENARIO\",94:\"ADD_SCENARIO_ITEM\",95:\"LIST_SCENARIO\",96:\"PDB_KEY\",97:\"DELAY_KEY\",98:\"PRST_KEY\",99:\"DESCRIPTION_KEY\",101:\".\",103:\"/\"},\r\nproductions_: [0,[3,2],[3,1],[4,1],[4,1],[4,2],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,3],[4,3],[4,1],[4,1],[4,1],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,2],[4,2],[4,1],[4,2],[4,2],[4,2],[4,4],[4,2],[4,6],[4,2],[4,1],[4,1],[4,1],[4,2],[4,2],[4,1],[4,2],[4,1],[4,2],[4,2],[4,2],[4,1],[4,2],[4,1],[4,1],[4,3],[4,3],[4,4],[4,4],[4,1],[4,2],[50,1],[50,2],[50,2],[50,3],[50,3],[51,1],[51,2],[51,3],[12,2],[12,2],[12,2],[21,1],[21,2],[21,2],[21,3],[22,2],[22,3],[39,2],[39,3],[40,2],[40,3],[24,1],[24,1],[63,1],[63,2],[63,3],[63,4],[67,1],[67,1],[67,2],[68,3],[69,3],[47,1],[47,2],[73,2],[53,1],[53,2],[75,3],[16,1],[16,1],[16,1],[16,1],[16,1],[79,1],[79,1],[32,1],[32,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[100,1],[100,1],[76,1],[76,3],[76,3],[10,1],[10,1],[10,3],[10,3],[10,3],[60,1],[102,1],[102,3],[104,1],[104,1]],\r\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\r\n/* this == yyval */\r\n\r\nvar $0 = $$.length - 1;\r\nswitch (yystate) {\r\ncase 1:\r\n return $$[$0-1]; \r\nbreak;\r\ncase 3:\r\nthis.$ = yy.miew.reset(false); yy.ClearContext(); yy.miew.resetReps(\"empty\");\r\nbreak;\r\ncase 4:\r\nthis.$ = yy.miew.rebuild();\r\nbreak;\r\ncase 5:\r\nthis.$ = yy.miew.rebuildAll(); yy.miew.rebuild();\r\nbreak;\r\ncase 6:\r\nthis.$ = yy.echo(yy.utils.help().toString());\r\nbreak;\r\ncase 7:\r\nthis.$ = yy.echo(yy.utils.help($$[$0]).toString());\r\nbreak;\r\ncase 8:\r\nthis.$ = yy.miew.motm();\r\nbreak;\r\ncase 10: case 11:\r\nthis.$ = yy.utils.propagateProp($$[$0]); yy.echo(yy.miew.get($$[$0]).toString());\r\nbreak;\r\ncase 12: case 13:\r\nthis.$ = yy.miew.set($$[$0-1], yy.utils.propagateProp($$[$0-1], $$[$0]));;\r\nbreak;\r\ncase 14:\r\nthis.$ = yy.miew.saveSettings();;\r\nbreak;\r\ncase 15:\r\nthis.$ = yy.miew.restoreSettings();;\r\nbreak;\r\ncase 16:\r\nthis.$ = yy.miew.resetSettings();;\r\nbreak;\r\ncase 17:\r\nthis.$ = yy.miew.resetReps();\r\nbreak;\r\ncase 18:\r\nthis.$ = yy.miew.applyPreset($$[$0]);\r\nbreak;\r\ncase 21:\r\nthis.$ = yy.miew.repRemove($$[$0]); yy.representations.remove($$[$0]);\r\nbreak;\r\ncase 22:\r\nthis.$ = yy.miew.repHide($$[$0]);\r\nbreak;\r\ncase 23:\r\nthis.$ = yy.miew.repHide($$[$0], false);\r\nbreak;\r\ncase 24:\r\nthis.$ = yy.echo(yy.utils.listRep(yy.miew, yy.representations, $$[$0], '-e'));\r\nbreak;\r\ncase 25:\r\nthis.$ = yy.echo(yy.utils.list(yy.miew, yy.representations));\r\nbreak;\r\ncase 26:\r\nthis.$ = yy.echo(yy.utils.list(yy.miew, yy.representations, $$[$0]));\r\nbreak;\r\ncase 27:\r\nthis.$ = yy.echo(yy.utils.listSelector(yy.miew, yy.Context));\r\nbreak;\r\ncase 28:\r\nthis.$ = yy.miew.select(yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0], true));\r\nbreak;\r\ncase 29:\r\nthis.$ = yy.Context[$$[$0].toLowerCase()] = yy.utils.checkArg($$[$0-3].toLowerCase(), $$[$0-2], true); yy.miew.select(yy.Context[$$[$0].toLowerCase()]);\r\nbreak;\r\ncase 30:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {selector : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0])});\r\nbreak;\r\ncase 31:\r\nthis.$ = yy.Context[$$[$0].toLowerCase()] = yy.miew.within(yy.utils.checkArg(\"select\", $$[$0-2], true), Number($$[$0-4]));\r\nbreak;\r\ncase 32:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {material : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 35:\r\nthis.$ = yy.echo(yy.miew.view());\r\nbreak;\r\ncase 36: case 37:\r\nthis.$ = yy.miew.view($$[$0]);\r\nbreak;\r\ncase 38:\r\nthis.$ = yy.echo(yy.miew.changeUnit());\r\nbreak;\r\ncase 39:\r\nthis.$ = yy.echo(yy.miew.changeUnit($$[$0]));\r\nbreak;\r\ncase 40:\r\nthis.$ = yy.miew.dssp();\r\nbreak;\r\ncase 41:\r\nthis.$ = yy.miew.scale($$[$0]);\r\nbreak;\r\ncase 42:\r\n for (var i = 0, n = $$[$0].length; i < n; i++) {yy.miew.rotate($$[$0][i]['x'] * Math.PI / 180.0, $$[$0][i]['y'] * Math.PI / 180.0, $$[$0][i]['z'] * Math.PI / 180.0)} \r\nbreak;\r\ncase 43:\r\n for (var i = 0, n = $$[$0].length; i < n; i++) {yy.miew.translate($$[$0][i]['x'] || 0, $$[$0][i]['y'] || 0, $$[$0][i]['z'] || 0)} \r\nbreak;\r\ncase 44:\r\nthis.$ = yy.miew.center();\r\nbreak;\r\ncase 45:\r\nthis.$ = yy.miew.center($$[$0]);\r\nbreak;\r\ncase 48: case 49:\r\nthis.$ = yy.miew.addObject({type: 'line', params: [$$[$0-1], $$[$0]]}, true);\r\nbreak;\r\ncase 50: case 51:\r\nthis.$ = yy.miew.addObject({type: 'line', params: [$$[$0-2], $$[$0-1]], opts:$$[$0].toJSO(yy.utils, 'objects', 'line')}, true);\r\nbreak;\r\ncase 52:\r\nthis.$ = yy.echo(yy.utils.listObjs(yy.miew));\r\nbreak;\r\ncase 53:\r\nthis.$ = yy.miew.removeObject($$[$0]);\r\nbreak;\r\ncase 54:\r\nthis.$ = yy.echo(yy.miew.getURL({view: false, settings: false}));\r\nbreak;\r\ncase 55:\r\nthis.$ = yy.echo(yy.miew.getURL({view: false, settings: true}));\r\nbreak;\r\ncase 56:\r\nthis.$ = yy.echo(yy.miew.getURL({view: true, settings: false}));\r\nbreak;\r\ncase 57: case 58:\r\nthis.$ = yy.echo(yy.miew.getURL({view: true, settings: true}));\r\nbreak;\r\ncase 59:\r\nthis.$ = yy.miew.screenshotSave();\r\nbreak;\r\ncase 60:\r\nthis.$ = yy.miew.screenshotSave('', Number($$[$0]));\r\nbreak;\r\ncase 61:\r\nthis.$ = yy.miew.screenshotSave('', Number($$[$0-1]), Number($$[$0]));\r\nbreak;\r\ncase 62: case 63: case 64:\r\nthis.$ = yy.utils.load(yy.miew, $$[$0]); yy.representations.clear();\r\nbreak;\r\ncase 65:\r\nthis.$ = yy.echo(yy.representations.add(yy.miew.repAdd()));\r\nbreak;\r\ncase 66:\r\nthis.$ = yy.echo(yy.representations.add($$[$0], yy.miew.repAdd()));\r\nbreak;\r\ncase 67:\r\nthis.$ = yy.echo(yy.representations.add(yy.miew.repAdd($$[$0])));\r\nbreak;\r\ncase 68:\r\nthis.$ = yy.echo(yy.representations.add($$[$0-1], yy.miew.repAdd($$[$0])));\r\nbreak;\r\ncase 69:\r\nthis.$ = yy.miew.rep($$[$0]); yy.miew.repCurrent($$[$0]);\r\nbreak;\r\ncase 70:\r\nthis.$ = yy.miew.rep($$[$0-1], $$[$0]); yy.miew.repCurrent($$[$0-1]);\r\nbreak;\r\ncase 71:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {mode : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 72:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {mode : new Array(yy.utils.checkArg($$[$0-2].toLowerCase(), $$[$0-1].toUpperCase()), $$[$0].toJSO(yy.utils, $$[$0-2], $$[$0-1].toUpperCase()))});\r\nbreak;\r\ncase 73:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {colorer : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 74:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {colorer : new Array(yy.utils.checkArg($$[$0-2].toLowerCase(), $$[$0-1].toUpperCase()), $$[$0].toJSO(yy.utils, $$[$0-2], $$[$0-1].toUpperCase()))});\r\nbreak;\r\ncase 75:\r\nthis.$ = Number(yy.representations.get($$[$0]));\r\nbreak;\r\ncase 76: case 92:\r\nthis.$ = Number($$[$0]);\r\nbreak;\r\ncase 77:\r\nthis.$ = $$[$0];\r\nbreak;\r\ncase 78:\r\nthis.$ = yy._.assign($$[$0-1], $$[$0]);\r\nbreak;\r\ncase 79:\r\nthis.$ = yy._.assign($$[$0-2], $$[$0-1], $$[$0]);\r\nbreak;\r\ncase 80:\r\nthis.$ = yy._.assign($$[$0-3], $$[$0-2], $$[$0-1], $$[$0]);\r\nbreak;\r\ncase 81: case 82:\r\nthis.$ = yy.CreateObjectPair($$[$0].key, $$[$0].val);\r\nbreak;\r\ncase 83:\r\nthis.$ = yy.CreateObjectPair($$[$0-1].key, new Array($$[$0-1].val, $$[$0].toJSO(yy.utils, $$[$0-1].key, $$[$0-1].val)));\r\nbreak;\r\ncase 84: case 85:\r\nthis.$ = Object.create({'key': yy.keyRemap($$[$0-2]), 'val': yy.utils.checkArg($$[$0-2], $$[$0])});\r\nbreak;\r\ncase 86:\r\nthis.$ = [$$[$0]];\r\nbreak;\r\ncase 87:\r\nthis.$ = $$[$0-1].concat($$[$0]);\r\nbreak;\r\ncase 88:\r\nthis.$ = yy.CreateObjectPair($$[$0-1].toLowerCase(), Number($$[$0]));\r\nbreak;\r\ncase 89:\r\nthis.$ = new yy.ArgList($$[$0]);\r\nbreak;\r\ncase 90:\r\nthis.$ = $$[$0-1].append($$[$0]);\r\nbreak;\r\ncase 91:\r\nthis.$ = new yy.Arg($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 93:\r\nthis.$ = parseInt($$[$0]);\r\nbreak;\r\ncase 94:\r\nthis.$ = JSON.parse($$[$0]);\r\nbreak;\r\ncase 95: case 96:\r\nthis.$ = String($$[$0]);\r\nbreak;\r\ncase 157: case 158: case 161: case 162: case 163:\r\nthis.$ = $$[$0-2] + $$[$0-1] + $$[$0] //cause of could be color word in path;\r\nbreak;\r\ncase 166:\r\nthis.$ = $$[$0-2] = $$[$0-2] + $$[$0-1] + $$[$0];\r\nbreak;\r\n}\r\n},\r\ntable: [{3:1,4:2,5:[1,3],6:[1,4],7:[1,5],9:[1,6],11:[1,7],12:8,13:[1,9],15:[1,10],17:[1,11],18:[1,12],19:[1,13],20:[1,14],21:15,22:16,23:[1,17],25:[1,18],26:[1,19],27:[1,20],30:[1,21],33:[1,22],34:[1,23],37:[1,24],39:25,40:26,41:[1,27],43:[1,28],44:[1,29],45:[1,30],46:[1,31],48:[1,32],49:[1,33],50:34,51:35,52:[1,36],54:[1,37],55:[1,38],56:[1,44],58:[1,45],59:[1,39],62:[1,40],64:[1,41],65:[1,42],66:[1,43]},{1:[3]},{5:[1,46]},{1:[2,2]},{5:[2,3]},{5:[2,4],8:[1,47]},{5:[2,6],6:$V0,7:$V1,9:$V2,10:48,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,8]},{5:[2,9]},{6:$V0,7:$V1,9:$V2,10:106,13:$V3,14:[1,107],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{6:$V0,7:$V1,9:$V2,10:108,13:$V3,14:[1,109],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,14]},{5:[2,15]},{5:[2,16]},{5:[2,17],14:$VS,16:110,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,19]},{5:[2,20]},{24:116,35:$VX,38:$VY},{24:119,35:$VX,38:$VY},{24:120,35:$VX,38:$VY},{5:[2,25],24:121,28:[1,122],29:[1,123],35:$VX,38:$VY},{14:[1,124]},{14:[1,125]},{35:[1,126]},{38:[1,127]},{5:[2,33]},{5:[2,34]},{5:[2,35],14:[1,128],42:[1,129]},{5:[2,38],35:[1,130]},{5:[2,40]},{35:[1,131]},{47:132,73:133,74:$VZ},{47:135,73:133,74:$VZ},{5:[2,44],14:[1,136]},{5:[2,46]},{5:[2,47]},{6:$V0,7:$V1,9:$V2,10:138,13:$V3,14:[1,137],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,52]},{35:[1,139]},{14:[1,143],38:[1,141],60:140,61:[1,142]},{5:[2,65],38:[1,144],63:145,67:146,68:147,69:148,70:$V_,72:$V$},{24:151,35:$VX,38:$VY},{38:[1,152]},{38:[1,153]},{5:[2,54],29:[1,154],57:[1,155]},{5:[2,59],35:[1,156]},{1:[2,1]},{5:[2,5]},{5:[2,7],101:$V01},o($V11,[2,159]),o($V11,[2,160]),o($V21,[2,97]),o($V21,[2,98]),o($V11,[2,147]),o($V11,[2,148]),o($V11,[2,149]),o($V11,[2,150]),o($V11,[2,151]),o($V11,[2,152]),o($V11,[2,153]),o($V21,[2,101]),o($V21,[2,102]),o($V21,[2,103]),o($V21,[2,104]),o($V21,[2,105]),o($V21,[2,106]),o($V21,[2,107]),o($V21,[2,108]),o($V21,[2,109]),o($V21,[2,110]),o($V21,[2,111]),o($V21,[2,112]),o($V21,[2,113]),o($V21,[2,114]),o($V21,[2,115]),o($V21,[2,116]),o($V21,[2,117]),o($V21,[2,118]),o($V21,[2,119]),o($V21,[2,120]),o($V21,[2,121]),o($V21,[2,122]),o($V21,[2,123]),o($V21,[2,124]),o($V21,[2,125]),o($V21,[2,126]),o($V21,[2,127]),o($V21,[2,128]),o($V21,[2,129]),o($V21,[2,130]),o($V21,[2,131]),o($V21,[2,132]),o($V21,[2,133]),o($V21,[2,134]),o($V21,[2,135]),o($V21,[2,136]),o($V21,[2,137]),o($V21,[2,138]),o($V21,[2,139]),o($V21,[2,140]),o($V21,[2,141]),o($V21,[2,142]),o($V21,[2,143]),o($V21,[2,144]),o($V21,[2,145]),o($V21,[2,146]),{5:[2,10],101:$V01},{5:[2,11]},{14:$VS,16:158,35:$VT,38:$VU,77:$VV,78:$VW,101:$V01},{14:$VS,16:159,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,18]},o($V31,[2,92]),o($V31,[2,93]),o($V31,[2,94]),o($V31,[2,95]),o($V31,[2,96]),{5:[2,21]},o($V41,[2,75]),o($V41,[2,76]),{5:[2,22]},{5:[2,23]},{5:[2,24]},{5:[2,26]},{5:[2,27]},{5:[2,28],31:[1,160]},{5:[2,30]},{36:[1,161]},{5:[2,32]},{5:[2,36]},{5:[2,37]},{5:[2,39]},{5:[2,41]},{5:[2,42],73:162,74:$VZ},o($V51,[2,86]),{35:[1,163]},{5:[2,43],73:162,74:$VZ},{5:[2,45]},{14:[1,164]},{6:$V0,7:$V1,9:$V2,10:165,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR,101:$V01},{5:[2,53]},{5:[2,62]},{5:[2,63]},{5:[2,64]},{5:[2,164]},{5:[2,66],63:166,67:146,68:147,69:148,70:$V_,72:$V$},{5:[2,67]},{5:[2,77],67:167,68:147,69:148,70:$V_,72:$V$},o($V41,[2,81]),o($V41,[2,82],{80:52,53:168,75:169,76:170,79:171,6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN}),{71:[1,172]},{71:[1,173]},{5:[2,69],63:174,67:146,68:147,69:148,70:$V_,72:$V$},{5:[2,71],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:175,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,73],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:176,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,55],57:[1,177]},{5:[2,56],29:[1,178]},{5:[2,60],35:[1,179]},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,35:[1,181],37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:180,80:52,81:182,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,12]},{5:[2,13]},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,32:183,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:184,80:52,81:185,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{14:[1,186]},o($V51,[2,87]),o($V51,[2,88]),{5:[2,48],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:187,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,49],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:188,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,101:$V01},{5:[2,68]},{5:[2,78],67:189,68:147,69:148,70:$V_,72:$V$},o($V41,[2,83],{80:52,76:170,79:171,75:190,6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN}),o($V31,[2,89]),{71:[1,191],101:[1,192]},o($V61,[2,156]),{14:$VS,16:193,35:$VT,38:$VU,77:$VV,78:$VW},{14:$VS,16:194,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,70]},{5:[2,72],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,74],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,57]},{5:[2,58]},{5:[2,61]},o($V11,[2,161]),o($V11,[2,162]),o($V11,[2,163]),{5:[2,29]},{5:[2,99]},{5:[2,100]},{31:[1,195]},{5:[2,50],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,51],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,79],67:196,68:147,69:148,70:$V_,72:$V$},o($V31,[2,90]),{14:$VS,16:197,35:$VT,38:$VU,77:$VV,78:$VW},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,35:[1,199],37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,79:198,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},o($V41,[2,84]),o($V31,[2,85]),{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,32:200,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:184,80:52,81:185,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,80]},o($V31,[2,91]),o($V61,[2,157]),o($V61,[2,158]),{5:[2,31]}],\r\ndefaultActions: {3:[2,2],4:[2,3],7:[2,8],8:[2,9],11:[2,14],12:[2,15],13:[2,16],15:[2,19],16:[2,20],25:[2,33],26:[2,34],29:[2,40],34:[2,46],35:[2,47],37:[2,52],46:[2,1],47:[2,5],107:[2,11],110:[2,18],116:[2,21],119:[2,22],120:[2,23],121:[2,24],122:[2,26],123:[2,27],125:[2,30],127:[2,32],128:[2,36],129:[2,37],130:[2,39],131:[2,41],136:[2,45],139:[2,53],140:[2,62],141:[2,63],142:[2,64],143:[2,164],145:[2,67],158:[2,12],159:[2,13],166:[2,68],174:[2,70],177:[2,57],178:[2,58],179:[2,61],183:[2,29],184:[2,99],185:[2,100],196:[2,80],200:[2,31]},\r\nparseError: function parseError (str, hash) {\r\n if (hash.recoverable) {\r\n this.trace(str);\r\n } else {\r\n var error = new Error(str);\r\n error.hash = hash;\r\n throw error;\r\n }\r\n},\r\nparse: function parse(input) {\r\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\r\n var args = lstack.slice.call(arguments, 1);\r\n var lexer = Object.create(this.lexer);\r\n var sharedState = { yy: {} };\r\n for (var k in this.yy) {\r\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\r\n sharedState.yy[k] = this.yy[k];\r\n }\r\n }\r\n lexer.setInput(input, sharedState.yy);\r\n sharedState.yy.lexer = lexer;\r\n sharedState.yy.parser = this;\r\n if (typeof lexer.yylloc == 'undefined') {\r\n lexer.yylloc = {};\r\n }\r\n var yyloc = lexer.yylloc;\r\n lstack.push(yyloc);\r\n var ranges = lexer.options && lexer.options.ranges;\r\n if (typeof sharedState.yy.parseError === 'function') {\r\n this.parseError = sharedState.yy.parseError;\r\n } else {\r\n this.parseError = Object.getPrototypeOf(this).parseError;\r\n }\r\n function popStack(n) {\r\n stack.length = stack.length - 2 * n;\r\n vstack.length = vstack.length - n;\r\n lstack.length = lstack.length - n;\r\n }\r\n function lex() {\r\n var token;\r\n token = tstack.pop() || lexer.lex() || EOF;\r\n if (typeof token !== 'number') {\r\n if (token instanceof Array) {\r\n tstack = token;\r\n token = tstack.pop();\r\n }\r\n token = self.symbols_[token] || token;\r\n }\r\n return token;\r\n }\r\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\r\n while (true) {\r\n state = stack[stack.length - 1];\r\n if (this.defaultActions[state]) {\r\n action = this.defaultActions[state];\r\n } else {\r\n if (symbol === null || typeof symbol == 'undefined') {\r\n symbol = lex();\r\n }\r\n action = table[state] && table[state][symbol];\r\n }\r\n if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n var errStr = '';\r\n expected = [];\r\n for (p in table[state]) {\r\n if (this.terminals_[p] && p > TERROR) {\r\n expected.push('\\'' + this.terminals_[p] + '\\'');\r\n }\r\n }\r\n if (lexer.showPosition) {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\r\n } else {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\r\n }\r\n this.parseError(errStr, {\r\n text: lexer.match,\r\n token: this.terminals_[symbol] || symbol,\r\n line: lexer.yylineno,\r\n loc: yyloc,\r\n expected: expected\r\n });\r\n }\r\n if (action[0] instanceof Array && action.length > 1) {\r\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\r\n }\r\n switch (action[0]) {\r\n case 1:\r\n stack.push(symbol);\r\n vstack.push(lexer.yytext);\r\n lstack.push(lexer.yylloc);\r\n stack.push(action[1]);\r\n symbol = null;\r\n if (!preErrorSymbol) {\r\n yyleng = lexer.yyleng;\r\n yytext = lexer.yytext;\r\n yylineno = lexer.yylineno;\r\n yyloc = lexer.yylloc;\r\n if (recovering > 0) {\r\n recovering--;\r\n }\r\n } else {\r\n symbol = preErrorSymbol;\r\n preErrorSymbol = null;\r\n }\r\n break;\r\n case 2:\r\n len = this.productions_[action[1]][1];\r\n yyval.$ = vstack[vstack.length - len];\r\n yyval._$ = {\r\n first_line: lstack[lstack.length - (len || 1)].first_line,\r\n last_line: lstack[lstack.length - 1].last_line,\r\n first_column: lstack[lstack.length - (len || 1)].first_column,\r\n last_column: lstack[lstack.length - 1].last_column\r\n };\r\n if (ranges) {\r\n yyval._$.range = [\r\n lstack[lstack.length - (len || 1)].range[0],\r\n lstack[lstack.length - 1].range[1]\r\n ];\r\n }\r\n r = this.performAction.apply(yyval, [\r\n yytext,\r\n yyleng,\r\n yylineno,\r\n sharedState.yy,\r\n action[1],\r\n vstack,\r\n lstack\r\n ].concat(args));\r\n if (typeof r !== 'undefined') {\r\n return r;\r\n }\r\n if (len) {\r\n stack = stack.slice(0, -1 * len * 2);\r\n vstack = vstack.slice(0, -1 * len);\r\n lstack = lstack.slice(0, -1 * len);\r\n }\r\n stack.push(this.productions_[action[1]][0]);\r\n vstack.push(yyval.$);\r\n lstack.push(yyval._$);\r\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\r\n stack.push(newState);\r\n break;\r\n case 3:\r\n return true;\r\n }\r\n }\r\n return true;\r\n}};\r\n\r\n\r\n/* generated by jison-lex 0.3.4 */\r\nvar lexer = (function(){\r\nvar lexer = ({\r\n\r\nEOF:1,\r\n\r\nparseError:function parseError(str, hash) {\r\n if (this.yy.parser) {\r\n this.yy.parser.parseError(str, hash);\r\n } else {\r\n throw new Error(str);\r\n }\r\n },\r\n\r\n// resets the lexer, sets new input\r\nsetInput:function (input, yy) {\r\n this.yy = yy || this.yy || {};\r\n this._input = input;\r\n this._more = this._backtrack = this.done = false;\r\n this.yylineno = this.yyleng = 0;\r\n this.yytext = this.matched = this.match = '';\r\n this.conditionStack = ['INITIAL'];\r\n this.yylloc = {\r\n first_line: 1,\r\n first_column: 0,\r\n last_line: 1,\r\n last_column: 0\r\n };\r\n if (this.options.ranges) {\r\n this.yylloc.range = [0,0];\r\n }\r\n this.offset = 0;\r\n return this;\r\n },\r\n\r\n// consumes and returns one char from the input\r\ninput:function () {\r\n var ch = this._input[0];\r\n this.yytext += ch;\r\n this.yyleng++;\r\n this.offset++;\r\n this.match += ch;\r\n this.matched += ch;\r\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno++;\r\n this.yylloc.last_line++;\r\n } else {\r\n this.yylloc.last_column++;\r\n }\r\n if (this.options.ranges) {\r\n this.yylloc.range[1]++;\r\n }\r\n\r\n this._input = this._input.slice(1);\r\n return ch;\r\n },\r\n\r\n// unshifts one char (or a string) into the input\r\nunput:function (ch) {\r\n var len = ch.length;\r\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\r\n\r\n this._input = ch + this._input;\r\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\r\n //this.yyleng -= len;\r\n this.offset -= len;\r\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\r\n this.match = this.match.substr(0, this.match.length - 1);\r\n this.matched = this.matched.substr(0, this.matched.length - 1);\r\n\r\n if (lines.length - 1) {\r\n this.yylineno -= lines.length - 1;\r\n }\r\n var r = this.yylloc.range;\r\n\r\n this.yylloc = {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.first_column,\r\n last_column: lines ?\r\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\r\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\r\n this.yylloc.first_column - len\r\n };\r\n\r\n if (this.options.ranges) {\r\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\r\n }\r\n this.yyleng = this.yytext.length;\r\n return this;\r\n },\r\n\r\n// When called from action, caches matched text and appends it on next action\r\nmore:function () {\r\n this._more = true;\r\n return this;\r\n },\r\n\r\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\r\nreject:function () {\r\n if (this.options.backtrack_lexer) {\r\n this._backtrack = true;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n\r\n }\r\n return this;\r\n },\r\n\r\n// retain first n characters of the match\r\nless:function (n) {\r\n this.unput(this.match.slice(n));\r\n },\r\n\r\n// displays already matched input, i.e. for error messages\r\npastInput:function () {\r\n var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays upcoming input, i.e. for error messages\r\nupcomingInput:function () {\r\n var next = this.match;\r\n if (next.length < 20) {\r\n next += this._input.substr(0, 20-next.length);\r\n }\r\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays the character position where the lexing error occurred, i.e. for error messages\r\nshowPosition:function () {\r\n var pre = this.pastInput();\r\n var c = new Array(pre.length + 1).join(\"-\");\r\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\r\n },\r\n\r\n// test the lexed token: return FALSE when not a match, otherwise return token\r\ntest_match:function(match, indexed_rule) {\r\n var token,\r\n lines,\r\n backup;\r\n\r\n if (this.options.backtrack_lexer) {\r\n // save context\r\n backup = {\r\n yylineno: this.yylineno,\r\n yylloc: {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.last_line,\r\n first_column: this.yylloc.first_column,\r\n last_column: this.yylloc.last_column\r\n },\r\n yytext: this.yytext,\r\n match: this.match,\r\n matches: this.matches,\r\n matched: this.matched,\r\n yyleng: this.yyleng,\r\n offset: this.offset,\r\n _more: this._more,\r\n _input: this._input,\r\n yy: this.yy,\r\n conditionStack: this.conditionStack.slice(0),\r\n done: this.done\r\n };\r\n if (this.options.ranges) {\r\n backup.yylloc.range = this.yylloc.range.slice(0);\r\n }\r\n }\r\n\r\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno += lines.length;\r\n }\r\n this.yylloc = {\r\n first_line: this.yylloc.last_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.last_column,\r\n last_column: lines ?\r\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\r\n this.yylloc.last_column + match[0].length\r\n };\r\n this.yytext += match[0];\r\n this.match += match[0];\r\n this.matches = match;\r\n this.yyleng = this.yytext.length;\r\n if (this.options.ranges) {\r\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\r\n }\r\n this._more = false;\r\n this._backtrack = false;\r\n this._input = this._input.slice(match[0].length);\r\n this.matched += match[0];\r\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\r\n if (this.done && this._input) {\r\n this.done = false;\r\n }\r\n if (token) {\r\n return token;\r\n } else if (this._backtrack) {\r\n // recover context\r\n for (var k in backup) {\r\n this[k] = backup[k];\r\n }\r\n return false; // rule action called reject() implying the next rule should be tested instead.\r\n }\r\n return false;\r\n },\r\n\r\n// return next match in input\r\nnext:function () {\r\n if (this.done) {\r\n return this.EOF;\r\n }\r\n if (!this._input) {\r\n this.done = true;\r\n }\r\n\r\n var token,\r\n match,\r\n tempMatch,\r\n index;\r\n if (!this._more) {\r\n this.yytext = '';\r\n this.match = '';\r\n }\r\n var rules = this._currentRules();\r\n for (var i = 0; i < rules.length; i++) {\r\n tempMatch = this._input.match(this.rules[rules[i]]);\r\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n match = tempMatch;\r\n index = i;\r\n if (this.options.backtrack_lexer) {\r\n token = this.test_match(tempMatch, rules[i]);\r\n if (token !== false) {\r\n return token;\r\n } else if (this._backtrack) {\r\n match = false;\r\n continue; // rule action called reject() implying a rule MISmatch.\r\n } else {\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n } else if (!this.options.flex) {\r\n break;\r\n }\r\n }\r\n }\r\n if (match) {\r\n token = this.test_match(match, rules[index]);\r\n if (token !== false) {\r\n return token;\r\n }\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n if (this._input === \"\") {\r\n return this.EOF;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n }\r\n },\r\n\r\n// return next match that has a token\r\nlex:function lex () {\r\n var r = this.next();\r\n if (r) {\r\n return r;\r\n } else {\r\n return this.lex();\r\n }\r\n },\r\n\r\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\r\nbegin:function begin (condition) {\r\n this.conditionStack.push(condition);\r\n },\r\n\r\n// pop the previously active lexer condition state off the condition stack\r\npopState:function popState () {\r\n var n = this.conditionStack.length - 1;\r\n if (n > 0) {\r\n return this.conditionStack.pop();\r\n } else {\r\n return this.conditionStack[0];\r\n }\r\n },\r\n\r\n// produce the lexer rule set which is active for the currently active lexer condition state\r\n_currentRules:function _currentRules () {\r\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\r\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\r\n } else {\r\n return this.conditions[\"INITIAL\"].rules;\r\n }\r\n },\r\n\r\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\r\ntopState:function topState (n) {\r\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\r\n if (n >= 0) {\r\n return this.conditionStack[n];\r\n } else {\r\n return \"INITIAL\";\r\n }\r\n },\r\n\r\n// alias for begin(condition)\r\npushState:function pushState (condition) {\r\n this.begin(condition);\r\n },\r\n\r\n// return the number of states currently on the stack\r\nstateStackSize:function stateStackSize() {\r\n return this.conditionStack.length;\r\n },\r\noptions: {\"case-insensitive\":true},\r\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\nvar YYSTATE=YY_START;\r\nswitch($avoiding_name_collisions) {\r\ncase 0:/* ignore whitespace */\r\nbreak;\r\ncase 1:return '';\r\nbreak;\r\ncase 2:return '';\r\nbreak;\r\ncase 3:return 42;\r\nbreak;\r\ncase 4:return 35;\r\nbreak;\r\ncase 5:return 77;\r\nbreak;\r\ncase 6:return 78;\r\nbreak;\r\ncase 7:return 78;\r\nbreak;\r\ncase 8:return 8;\r\nbreak;\r\ncase 9:return 6;\r\nbreak;\r\ncase 10:return 82;\r\nbreak;\r\ncase 11:return 7;\r\nbreak;\r\ncase 12:return 9;\r\nbreak;\r\ncase 13:return 59;\r\nbreak;\r\ncase 14:return 13\r\nbreak;\r\ncase 15:return 15\r\nbreak;\r\ncase 16:return 17\r\nbreak;\r\ncase 17:return 18\r\nbreak;\r\ncase 18:return 19\r\nbreak;\r\ncase 19:return 20\r\nbreak;\r\ncase 20:return 11\r\nbreak;\r\ncase 21:return 62\r\nbreak;\r\ncase 22:return 64\r\nbreak;\r\ncase 23:return 23\r\nbreak;\r\ncase 24:return 25\r\nbreak;\r\ncase 25:return 26\r\nbreak;\r\ncase 26:return 27\r\nbreak;\r\ncase 27:return 30\r\nbreak;\r\ncase 28:return 34\r\nbreak;\r\ncase 29:return 33\r\nbreak;\r\ncase 30:return 65\r\nbreak;\r\ncase 31:return 66\r\nbreak;\r\ncase 32:return 37\r\nbreak;\r\ncase 33:return 41\r\nbreak;\r\ncase 34:return 43\r\nbreak;\r\ncase 35:return 52\r\nbreak;\r\ncase 36:return 54\r\nbreak;\r\ncase 37:return 55\r\nbreak;\r\ncase 38:return 46\r\nbreak;\r\ncase 39:return 48\r\nbreak;\r\ncase 40:return 45\r\nbreak;\r\ncase 41:return 49\r\nbreak;\r\ncase 42:return 56\r\nbreak;\r\ncase 43:return 58;\r\nbreak;\r\ncase 44:return 44\r\nbreak;\r\ncase 45:return 83\r\nbreak;\r\ncase 46:return 84\r\nbreak;\r\ncase 47:return 85\r\nbreak;\r\ncase 48:return 86\r\nbreak;\r\ncase 49:return 87\r\nbreak;\r\ncase 50:return 88\r\nbreak;\r\ncase 51:return 89\r\nbreak;\r\ncase 52:return 90\r\nbreak;\r\ncase 53:return 91\r\nbreak;\r\ncase 54:return 92\r\nbreak;\r\ncase 55:return 93\r\nbreak;\r\ncase 56:return 94\r\nbreak;\r\ncase 57:return 95\r\nbreak;\r\ncase 58:return 70\r\nbreak;\r\ncase 59:return 70\r\nbreak;\r\ncase 60:return 72\r\nbreak;\r\ncase 61:return 72\r\nbreak;\r\ncase 62:return 74\r\nbreak;\r\ncase 63:return 74\r\nbreak;\r\ncase 64:return 74\r\nbreak;\r\ncase 65:return 31\r\nbreak;\r\ncase 66:return 36\r\nbreak;\r\ncase 67:return 96\r\nbreak;\r\ncase 68:return 97\r\nbreak;\r\ncase 69:return 98\r\nbreak;\r\ncase 70:return 99\r\nbreak;\r\ncase 71:yy_.yytext = yy.utils.unquoteString(yy_.yytext); return 14;\r\nbreak;\r\ncase 72:return 38;\r\nbreak;\r\ncase 73:return 5;\r\nbreak;\r\ncase 74:return 101;\r\nbreak;\r\ncase 75:return 103;\r\nbreak;\r\ncase 76:return '\\\\';\r\nbreak;\r\ncase 77:return 28\r\nbreak;\r\ncase 78:return 61\r\nbreak;\r\ncase 79:return 29\r\nbreak;\r\ncase 80:return 57\r\nbreak;\r\ncase 81:return 71\r\nbreak;\r\n}\r\n},\r\nrules: [/^(?:\\s+)/i,/^(?:[#].*)/i,/^(?:\\/\\/.*)/i,/^(?:([_A-Z0-9\\/\\+]+==))/i,/^(?:-?[0-9]+(\\.[0-9]+)?\\b)/i,/^(?:0[xX][0-9A-F]+\\b)/i,/^(?:false\\b)/i,/^(?:true\\b)/i,/^(?:all\\b)/i,/^(?:reset\\b)/i,/^(?:clear\\b)/i,/^(?:build\\b)/i,/^(?:help\\b)/i,/^(?:load\\b)/i,/^(?:get\\b)/i,/^(?:set\\b)/i,/^(?:set_save\\b)/i,/^(?:set_restore\\b)/i,/^(?:set_reset\\b)/i,/^(?:preset\\b)/i,/^(?:motm\\b)/i,/^(?:add\\b)/i,/^(?:rep\\b)/i,/^(?:remove\\b)/i,/^(?:hide\\b)/i,/^(?:show\\b)/i,/^(?:list\\b)/i,/^(?:select\\b)/i,/^(?:within\\b)/i,/^(?:selector\\b)/i,/^(?:mode\\b)/i,/^(?:color\\b)/i,/^(?:material\\b)/i,/^(?:view\\b)/i,/^(?:unit\\b)/i,/^(?:line\\b)/i,/^(?:listobj\\b)/i,/^(?:removeobj\\b)/i,/^(?:rotate\\b)/i,/^(?:translate\\b)/i,/^(?:scale\\b)/i,/^(?:center\\b)/i,/^(?:url\\b)/i,/^(?:screenshot\\b)/i,/^(?:dssp\\b)/i,/^(?:file_list\\b)/i,/^(?:file_register\\b)/i,/^(?:file_delete\\b)/i,/^(?:preset_add\\b)/i,/^(?:preset_delete\\b)/i,/^(?:preset_update\\b)/i,/^(?:preset_rename\\b)/i,/^(?:preset_open\\b)/i,/^(?:create_scenario\\b)/i,/^(?:reset_scenario\\b)/i,/^(?:delete_scenario\\b)/i,/^(?:add_scenario_item\\b)/i,/^(?:list_scenario\\b)/i,/^(?:s\\b)/i,/^(?:mt\\b)/i,/^(?:m\\b)/i,/^(?:c\\b)/i,/^(?:x\\b)/i,/^(?:y\\b)/i,/^(?:z\\b)/i,/^(?:as\\b)/i,/^(?:of\\b)/i,/^(?:pdb\\b)/i,/^(?:delay\\b)/i,/^(?:prst\\b)/i,/^(?:desc\\b)/i,/^(?:((?:\"(?:\\\\.|[^\\\\\"])*\"|'(?:\\\\.|[^\\\\'])*')))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:\\.)/i,/^(?:\\/)/i,/^(?:\\\\)/i,/^(?:-e\\b)/i,/^(?:-f\\b)/i,/^(?:-s\\b)/i,/^(?:-v\\b)/i,/^(?:=)/i],\r\nconditions: {\"INITIAL\":{\"rules\":[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,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,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81],\"inclusive\":true}}\r\n});\r\nreturn lexer;\r\n})();\r\nparser.lexer = lexer;\r\nfunction Parser () {\r\n this.yy = {};\r\n}\r\nParser.prototype = parser;parser.Parser = Parser;\r\nreturn new Parser;\r\n})();\r\n\r\nmodule.exports = {parser: parser};\r\n","/* eslint-disable */\r\n// DO NOT EDIT! Automatically generated from .jison\r\n/* parser generated by jison 0.4.18 */\r\n/*\r\n Returns a Parser object of the following structure:\r\n\r\n Parser: {\r\n yy: {}\r\n }\r\n\r\n Parser.prototype: {\r\n yy: {},\r\n trace: function(),\r\n symbols_: {associative list: name ==> number},\r\n terminals_: {associative list: number ==> name},\r\n productions_: [...],\r\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\r\n table: [...],\r\n defaultActions: {...},\r\n parseError: function(str, hash),\r\n parse: function(input),\r\n\r\n lexer: {\r\n EOF: 1,\r\n parseError: function(str, hash),\r\n setInput: function(input),\r\n input: function(),\r\n unput: function(str),\r\n more: function(),\r\n less: function(n),\r\n pastInput: function(),\r\n upcomingInput: function(),\r\n showPosition: function(),\r\n test_match: function(regex_match_array, rule_index),\r\n next: function(),\r\n lex: function(),\r\n begin: function(condition),\r\n popState: function(),\r\n _currentRules: function(),\r\n topState: function(),\r\n pushState: function(condition),\r\n\r\n options: {\r\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\r\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\r\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\r\n },\r\n\r\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\r\n rules: [...],\r\n conditions: {associative list: name ==> set},\r\n }\r\n }\r\n\r\n\r\n token location info (@$, _$, etc.): {\r\n first_line: n,\r\n last_line: n,\r\n first_column: n,\r\n last_column: n,\r\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\r\n }\r\n\r\n\r\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\r\n text: (matched text)\r\n token: (the produced terminal token, if any)\r\n line: (yylineno)\r\n }\r\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\r\n loc: (yylloc)\r\n expected: (string describing the set of expected tokens)\r\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\r\n }\r\n*/\r\nvar parser = (function(){\r\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,5],$V2=[1,6],$V3=[1,7],$V4=[1,8],$V5=[1,9],$V6=[1,11],$V7=[1,12],$V8=[5,7,8,11],$V9=[1,17],$Va=[1,22],$Vb=[1,20],$Vc=[1,21],$Vd=[5,7,8,11,19];\r\nvar parser = {trace: function trace() { },\r\nyy: {},\r\nsymbols_: {\"error\":2,\"Program\":3,\"Expression\":4,\"EOF\":5,\"Selector\":6,\"OR\":7,\"AND\":8,\"NOT\":9,\"(\":10,\")\":11,\"SELECTOR\":12,\"NAMED_SELECTOR\":13,\"SELECTOR_RANGED\":14,\"RangeList\":15,\"SELECTOR_NAMED\":16,\"NameList\":17,\"Range\":18,\",\":19,\"NUMBER\":20,\":\":21,\"Name\":22,\"IDENTIFIER\":23,\"STRING\":24,\"$accept\":0,\"$end\":1},\r\nterminals_: {2:\"error\",5:\"EOF\",7:\"OR\",8:\"AND\",9:\"NOT\",10:\"(\",11:\")\",12:\"SELECTOR\",13:\"NAMED_SELECTOR\",14:\"SELECTOR_RANGED\",16:\"SELECTOR_NAMED\",19:\",\",20:\"NUMBER\",21:\":\",23:\"IDENTIFIER\",24:\"STRING\"},\r\nproductions_: [0,[3,2],[4,1],[4,3],[4,3],[4,2],[4,3],[6,1],[6,1],[6,2],[6,2],[15,1],[15,3],[18,1],[18,3],[17,1],[17,3],[22,1],[22,1],[22,1]],\r\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\r\n/* this == yyval */\r\n\r\nvar $0 = $$.length - 1;\r\nswitch (yystate) {\r\ncase 1:\r\n return $$[$0-1]; \r\nbreak;\r\ncase 3:\r\nthis.$ = yy.keyword('or')($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 4:\r\nthis.$ = yy.keyword('and')($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 5:\r\nthis.$ = yy.keyword('not')($$[$0]);\r\nbreak;\r\ncase 6:\r\nthis.$ = $$[$0-1];\r\nbreak;\r\ncase 7:\r\nthis.$ = yy.keyword($$[$0])();\r\nbreak;\r\ncase 8:\r\nthis.$ = yy.GetSelector($$[$0].toLowerCase().slice(1, $$[$0].length));\r\nbreak;\r\ncase 9: case 10:\r\nthis.$ = yy.keyword($$[$0-1])($$[$0]);\r\nbreak;\r\ncase 11:\r\nthis.$ = new yy.RangeList($$[$0]);\r\nbreak;\r\ncase 12: case 16:\r\nthis.$ = $$[$0-2].append($$[$0]);\r\nbreak;\r\ncase 13:\r\nthis.$ = new yy.Range(Number($$[$0]));\r\nbreak;\r\ncase 14:\r\nthis.$ = new yy.Range(Number($$[$0-2]), Number($$[$0]));\r\nbreak;\r\ncase 15:\r\nthis.$ = new yy.ValueList($$[$0]);\r\nbreak;\r\n}\r\n},\r\ntable: [{3:1,4:2,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{1:[3]},{5:[1,10],7:$V6,8:$V7},o($V8,[2,2]),{4:13,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{4:14,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},o($V8,[2,7]),o($V8,[2,8]),{15:15,18:16,20:$V9},{17:18,20:$Va,22:19,23:$Vb,24:$Vc},{1:[2,1]},{4:23,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{4:24,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},o($V8,[2,5]),{7:$V6,8:$V7,11:[1,25]},o($V8,[2,9],{19:[1,26]}),o($Vd,[2,11]),o($Vd,[2,13],{21:[1,27]}),o($V8,[2,10],{19:[1,28]}),o($Vd,[2,15]),o($Vd,[2,17]),o($Vd,[2,18]),o($Vd,[2,19]),o([5,7,11],[2,3],{8:$V7}),o($V8,[2,4]),o($V8,[2,6]),{18:29,20:$V9},{20:[1,30]},{20:$Va,22:31,23:$Vb,24:$Vc},o($Vd,[2,12]),o($Vd,[2,14]),o($Vd,[2,16])],\r\ndefaultActions: {10:[2,1]},\r\nparseError: function parseError(str, hash) {\r\n if (hash.recoverable) {\r\n this.trace(str);\r\n } else {\r\n var error = new Error(str);\r\n error.hash = hash;\r\n throw error;\r\n }\r\n},\r\nparse: function parse(input) {\r\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\r\n var args = lstack.slice.call(arguments, 1);\r\n var lexer = Object.create(this.lexer);\r\n var sharedState = { yy: {} };\r\n for (var k in this.yy) {\r\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\r\n sharedState.yy[k] = this.yy[k];\r\n }\r\n }\r\n lexer.setInput(input, sharedState.yy);\r\n sharedState.yy.lexer = lexer;\r\n sharedState.yy.parser = this;\r\n if (typeof lexer.yylloc == 'undefined') {\r\n lexer.yylloc = {};\r\n }\r\n var yyloc = lexer.yylloc;\r\n lstack.push(yyloc);\r\n var ranges = lexer.options && lexer.options.ranges;\r\n if (typeof sharedState.yy.parseError === 'function') {\r\n this.parseError = sharedState.yy.parseError;\r\n } else {\r\n this.parseError = Object.getPrototypeOf(this).parseError;\r\n }\r\n function popStack(n) {\r\n stack.length = stack.length - 2 * n;\r\n vstack.length = vstack.length - n;\r\n lstack.length = lstack.length - n;\r\n }\r\n function lex() {\r\n var token;\r\n token = tstack.pop() || lexer.lex() || EOF;\r\n if (typeof token !== 'number') {\r\n if (token instanceof Array) {\r\n tstack = token;\r\n token = tstack.pop();\r\n }\r\n token = self.symbols_[token] || token;\r\n }\r\n return token;\r\n }\r\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\r\n while (true) {\r\n state = stack[stack.length - 1];\r\n if (this.defaultActions[state]) {\r\n action = this.defaultActions[state];\r\n } else {\r\n if (symbol === null || typeof symbol == 'undefined') {\r\n symbol = lex();\r\n }\r\n action = table[state] && table[state][symbol];\r\n }\r\n if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n var errStr = '';\r\n expected = [];\r\n for (p in table[state]) {\r\n if (this.terminals_[p] && p > TERROR) {\r\n expected.push('\\'' + this.terminals_[p] + '\\'');\r\n }\r\n }\r\n if (lexer.showPosition) {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\r\n } else {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\r\n }\r\n this.parseError(errStr, {\r\n text: lexer.match,\r\n token: this.terminals_[symbol] || symbol,\r\n line: lexer.yylineno,\r\n loc: yyloc,\r\n expected: expected\r\n });\r\n }\r\n if (action[0] instanceof Array && action.length > 1) {\r\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\r\n }\r\n switch (action[0]) {\r\n case 1:\r\n stack.push(symbol);\r\n vstack.push(lexer.yytext);\r\n lstack.push(lexer.yylloc);\r\n stack.push(action[1]);\r\n symbol = null;\r\n if (!preErrorSymbol) {\r\n yyleng = lexer.yyleng;\r\n yytext = lexer.yytext;\r\n yylineno = lexer.yylineno;\r\n yyloc = lexer.yylloc;\r\n if (recovering > 0) {\r\n recovering--;\r\n }\r\n } else {\r\n symbol = preErrorSymbol;\r\n preErrorSymbol = null;\r\n }\r\n break;\r\n case 2:\r\n len = this.productions_[action[1]][1];\r\n yyval.$ = vstack[vstack.length - len];\r\n yyval._$ = {\r\n first_line: lstack[lstack.length - (len || 1)].first_line,\r\n last_line: lstack[lstack.length - 1].last_line,\r\n first_column: lstack[lstack.length - (len || 1)].first_column,\r\n last_column: lstack[lstack.length - 1].last_column\r\n };\r\n if (ranges) {\r\n yyval._$.range = [\r\n lstack[lstack.length - (len || 1)].range[0],\r\n lstack[lstack.length - 1].range[1]\r\n ];\r\n }\r\n r = this.performAction.apply(yyval, [\r\n yytext,\r\n yyleng,\r\n yylineno,\r\n sharedState.yy,\r\n action[1],\r\n vstack,\r\n lstack\r\n ].concat(args));\r\n if (typeof r !== 'undefined') {\r\n return r;\r\n }\r\n if (len) {\r\n stack = stack.slice(0, -1 * len * 2);\r\n vstack = vstack.slice(0, -1 * len);\r\n lstack = lstack.slice(0, -1 * len);\r\n }\r\n stack.push(this.productions_[action[1]][0]);\r\n vstack.push(yyval.$);\r\n lstack.push(yyval._$);\r\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\r\n stack.push(newState);\r\n break;\r\n case 3:\r\n return true;\r\n }\r\n }\r\n return true;\r\n}};\r\n\r\n\r\n/* generated by jison-lex 0.3.4 */\r\nvar lexer = (function(){\r\nvar lexer = ({\r\n\r\nEOF:1,\r\n\r\nparseError:function parseError(str, hash) {\r\n if (this.yy.parser) {\r\n this.yy.parser.parseError(str, hash);\r\n } else {\r\n throw new Error(str);\r\n }\r\n },\r\n\r\n// resets the lexer, sets new input\r\nsetInput:function (input, yy) {\r\n this.yy = yy || this.yy || {};\r\n this._input = input;\r\n this._more = this._backtrack = this.done = false;\r\n this.yylineno = this.yyleng = 0;\r\n this.yytext = this.matched = this.match = '';\r\n this.conditionStack = ['INITIAL'];\r\n this.yylloc = {\r\n first_line: 1,\r\n first_column: 0,\r\n last_line: 1,\r\n last_column: 0\r\n };\r\n if (this.options.ranges) {\r\n this.yylloc.range = [0,0];\r\n }\r\n this.offset = 0;\r\n return this;\r\n },\r\n\r\n// consumes and returns one char from the input\r\ninput:function () {\r\n var ch = this._input[0];\r\n this.yytext += ch;\r\n this.yyleng++;\r\n this.offset++;\r\n this.match += ch;\r\n this.matched += ch;\r\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno++;\r\n this.yylloc.last_line++;\r\n } else {\r\n this.yylloc.last_column++;\r\n }\r\n if (this.options.ranges) {\r\n this.yylloc.range[1]++;\r\n }\r\n\r\n this._input = this._input.slice(1);\r\n return ch;\r\n },\r\n\r\n// unshifts one char (or a string) into the input\r\nunput:function (ch) {\r\n var len = ch.length;\r\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\r\n\r\n this._input = ch + this._input;\r\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\r\n //this.yyleng -= len;\r\n this.offset -= len;\r\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\r\n this.match = this.match.substr(0, this.match.length - 1);\r\n this.matched = this.matched.substr(0, this.matched.length - 1);\r\n\r\n if (lines.length - 1) {\r\n this.yylineno -= lines.length - 1;\r\n }\r\n var r = this.yylloc.range;\r\n\r\n this.yylloc = {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.first_column,\r\n last_column: lines ?\r\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\r\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\r\n this.yylloc.first_column - len\r\n };\r\n\r\n if (this.options.ranges) {\r\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\r\n }\r\n this.yyleng = this.yytext.length;\r\n return this;\r\n },\r\n\r\n// When called from action, caches matched text and appends it on next action\r\nmore:function () {\r\n this._more = true;\r\n return this;\r\n },\r\n\r\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\r\nreject:function () {\r\n if (this.options.backtrack_lexer) {\r\n this._backtrack = true;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n\r\n }\r\n return this;\r\n },\r\n\r\n// retain first n characters of the match\r\nless:function (n) {\r\n this.unput(this.match.slice(n));\r\n },\r\n\r\n// displays already matched input, i.e. for error messages\r\npastInput:function () {\r\n var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays upcoming input, i.e. for error messages\r\nupcomingInput:function () {\r\n var next = this.match;\r\n if (next.length < 20) {\r\n next += this._input.substr(0, 20-next.length);\r\n }\r\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays the character position where the lexing error occurred, i.e. for error messages\r\nshowPosition:function () {\r\n var pre = this.pastInput();\r\n var c = new Array(pre.length + 1).join(\"-\");\r\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\r\n },\r\n\r\n// test the lexed token: return FALSE when not a match, otherwise return token\r\ntest_match:function (match, indexed_rule) {\r\n var token,\r\n lines,\r\n backup;\r\n\r\n if (this.options.backtrack_lexer) {\r\n // save context\r\n backup = {\r\n yylineno: this.yylineno,\r\n yylloc: {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.last_line,\r\n first_column: this.yylloc.first_column,\r\n last_column: this.yylloc.last_column\r\n },\r\n yytext: this.yytext,\r\n match: this.match,\r\n matches: this.matches,\r\n matched: this.matched,\r\n yyleng: this.yyleng,\r\n offset: this.offset,\r\n _more: this._more,\r\n _input: this._input,\r\n yy: this.yy,\r\n conditionStack: this.conditionStack.slice(0),\r\n done: this.done\r\n };\r\n if (this.options.ranges) {\r\n backup.yylloc.range = this.yylloc.range.slice(0);\r\n }\r\n }\r\n\r\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno += lines.length;\r\n }\r\n this.yylloc = {\r\n first_line: this.yylloc.last_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.last_column,\r\n last_column: lines ?\r\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\r\n this.yylloc.last_column + match[0].length\r\n };\r\n this.yytext += match[0];\r\n this.match += match[0];\r\n this.matches = match;\r\n this.yyleng = this.yytext.length;\r\n if (this.options.ranges) {\r\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\r\n }\r\n this._more = false;\r\n this._backtrack = false;\r\n this._input = this._input.slice(match[0].length);\r\n this.matched += match[0];\r\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\r\n if (this.done && this._input) {\r\n this.done = false;\r\n }\r\n if (token) {\r\n return token;\r\n } else if (this._backtrack) {\r\n // recover context\r\n for (var k in backup) {\r\n this[k] = backup[k];\r\n }\r\n return false; // rule action called reject() implying the next rule should be tested instead.\r\n }\r\n return false;\r\n },\r\n\r\n// return next match in input\r\nnext:function () {\r\n if (this.done) {\r\n return this.EOF;\r\n }\r\n if (!this._input) {\r\n this.done = true;\r\n }\r\n\r\n var token,\r\n match,\r\n tempMatch,\r\n index;\r\n if (!this._more) {\r\n this.yytext = '';\r\n this.match = '';\r\n }\r\n var rules = this._currentRules();\r\n for (var i = 0; i < rules.length; i++) {\r\n tempMatch = this._input.match(this.rules[rules[i]]);\r\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n match = tempMatch;\r\n index = i;\r\n if (this.options.backtrack_lexer) {\r\n token = this.test_match(tempMatch, rules[i]);\r\n if (token !== false) {\r\n return token;\r\n } else if (this._backtrack) {\r\n match = false;\r\n continue; // rule action called reject() implying a rule MISmatch.\r\n } else {\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n } else if (!this.options.flex) {\r\n break;\r\n }\r\n }\r\n }\r\n if (match) {\r\n token = this.test_match(match, rules[index]);\r\n if (token !== false) {\r\n return token;\r\n }\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n if (this._input === \"\") {\r\n return this.EOF;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n }\r\n },\r\n\r\n// return next match that has a token\r\nlex:function lex() {\r\n var r = this.next();\r\n if (r) {\r\n return r;\r\n } else {\r\n return this.lex();\r\n }\r\n },\r\n\r\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\r\nbegin:function begin(condition) {\r\n this.conditionStack.push(condition);\r\n },\r\n\r\n// pop the previously active lexer condition state off the condition stack\r\npopState:function popState() {\r\n var n = this.conditionStack.length - 1;\r\n if (n > 0) {\r\n return this.conditionStack.pop();\r\n } else {\r\n return this.conditionStack[0];\r\n }\r\n },\r\n\r\n// produce the lexer rule set which is active for the currently active lexer condition state\r\n_currentRules:function _currentRules() {\r\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\r\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\r\n } else {\r\n return this.conditions[\"INITIAL\"].rules;\r\n }\r\n },\r\n\r\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\r\ntopState:function topState(n) {\r\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\r\n if (n >= 0) {\r\n return this.conditionStack[n];\r\n } else {\r\n return \"INITIAL\";\r\n }\r\n },\r\n\r\n// alias for begin(condition)\r\npushState:function pushState(condition) {\r\n this.begin(condition);\r\n },\r\n\r\n// return the number of states currently on the stack\r\nstateStackSize:function stateStackSize() {\r\n return this.conditionStack.length;\r\n },\r\noptions: {\"case-insensitive\":true},\r\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\nvar YYSTATE=YY_START;\r\nswitch($avoiding_name_collisions) {\r\ncase 0:/* skip whitespace */\r\nbreak;\r\ncase 1:return 20;\r\nbreak;\r\ncase 2:return 7;\r\nbreak;\r\ncase 3:return 8;\r\nbreak;\r\ncase 4:return 9;\r\nbreak;\r\ncase 5:return 12;\r\nbreak;\r\ncase 6:return 16;\r\nbreak;\r\ncase 7:return 14;\r\nbreak;\r\ncase 8:return 10;\r\nbreak;\r\ncase 9:return 11;\r\nbreak;\r\ncase 10:return 19;\r\nbreak;\r\ncase 11:return 21;\r\nbreak;\r\ncase 12:return '<=';\r\nbreak;\r\ncase 13:return '>=';\r\nbreak;\r\ncase 14:return '<';\r\nbreak;\r\ncase 15:return '>';\r\nbreak;\r\ncase 16:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 24;\r\nbreak;\r\ncase 17:return 13;\r\nbreak;\r\ncase 18:return 23;\r\nbreak;\r\ncase 19:return 5;\r\nbreak;\r\ncase 20:return 'INVALID';\r\nbreak;\r\n}\r\n},\r\nrules: [/^(?:\\s+)/i,/^(?:(-?(?:[1-9][0-9]+|[0-9]))\\b)/i,/^(?:OR\\b)/i,/^(?:AND\\b)/i,/^(?:NOT\\b)/i,/^(?:((ALL|NONE|HETATM|PROTEIN|BASIC|ACIDIC|CHARGED|POLAR|NONPOLAR|AROMATIC|NUCLEIC|PURINE|PYRIMIDINE|WATER|POLARH|NONPOLARH))\\b)/i,/^(?:((NAME|ELEM|TYPE|RESIDUE|ICODE|CHAIN|ALTLOC))\\b)/i,/^(?:((SERIAL|SEQUENCE|RESIDX))\\b)/i,/^(?:\\()/i,/^(?:\\))/i,/^(?:,)/i,/^(?::)/i,/^(?:<=)/i,/^(?:>=)/i,/^(?:<)/i,/^(?:>)/i,/^(?:((?:\"(?:\\\\.|[^\\\\\"])*\"|'(?:\\\\.|[^\\\\'])*')))/i,/^(?:(@[_A-Z0-9]+))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:.)/i],\r\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],\"inclusive\":true}}\r\n});\r\nreturn lexer;\r\n})();\r\nparser.lexer = lexer;\r\nfunction Parser () {\r\n this.yy = {};\r\n}\r\nParser.prototype = parser;parser.Parser = Parser;\r\nreturn new Parser;\r\n})();\r\n\r\nmodule.exports = {parser: parser};\r\n","\r\n/*\r\nSmooth.js version 0.1.7\r\n\r\nTurn arrays into smooth functions.\r\n\r\nCopyright 2012 Spencer Cohen\r\nLicensed under MIT license (see \"Smooth.js MIT license.txt\")\r\n*/\r\n\r\n/*Constants (these are accessible by Smooth.WHATEVER in user space)\r\n*/\r\n\r\n(function() {\r\n var AbstractInterpolator, CubicInterpolator, Enum, LinearInterpolator, NearestInterpolator, PI, SincFilterInterpolator, Smooth, clipClamp, clipMirror, clipPeriodic, defaultConfig, getColumn, getType, isValidNumber, k, makeLanczosWindow, makeScaledFunction, makeSincKernel, normalizeScaleTo, shallowCopy, sin, sinc, v, validateNumber, validateVector,\r\n __hasProp = Object.prototype.hasOwnProperty,\r\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; };\r\n\r\n Enum = {\r\n /*Interpolation methods\r\n */\r\n METHOD_NEAREST: 'nearest',\r\n METHOD_LINEAR: 'linear',\r\n METHOD_CUBIC: 'cubic',\r\n METHOD_LANCZOS: 'lanczos',\r\n METHOD_SINC: 'sinc',\r\n /*Input clipping modes\r\n */\r\n CLIP_CLAMP: 'clamp',\r\n CLIP_ZERO: 'zero',\r\n CLIP_PERIODIC: 'periodic',\r\n CLIP_MIRROR: 'mirror',\r\n /* Constants for control over the cubic interpolation tension\r\n */\r\n CUBIC_TENSION_DEFAULT: 0,\r\n CUBIC_TENSION_CATMULL_ROM: 0\r\n };\r\n\r\n defaultConfig = {\r\n method: Enum.METHOD_CUBIC,\r\n cubicTension: Enum.CUBIC_TENSION_DEFAULT,\r\n clip: Enum.CLIP_CLAMP,\r\n scaleTo: 0,\r\n sincFilterSize: 2,\r\n sincWindow: void 0\r\n };\r\n\r\n /*Index clipping functions\r\n */\r\n\r\n clipClamp = function(i, n) {\r\n return Math.max(0, Math.min(i, n - 1));\r\n };\r\n\r\n clipPeriodic = function(i, n) {\r\n i = i % n;\r\n if (i < 0) i += n;\r\n return i;\r\n };\r\n\r\n clipMirror = function(i, n) {\r\n var period;\r\n period = 2 * (n - 1);\r\n i = clipPeriodic(i, period);\r\n if (i > n - 1) i = period - i;\r\n return i;\r\n };\r\n\r\n /*\r\n Abstract scalar interpolation class which provides common functionality for all interpolators\r\n \r\n Subclasses must override interpolate().\r\n */\r\n\r\n AbstractInterpolator = (function() {\r\n\r\n function AbstractInterpolator(array, config) {\r\n this.array = array.slice(0);\r\n this.length = this.array.length;\r\n if (!(this.clipHelper = {\r\n clamp: this.clipHelperClamp,\r\n zero: this.clipHelperZero,\r\n periodic: this.clipHelperPeriodic,\r\n mirror: this.clipHelperMirror\r\n }[config.clip])) {\r\n throw \"Invalid clip: \" + config.clip;\r\n }\r\n }\r\n\r\n AbstractInterpolator.prototype.getClippedInput = function(i) {\r\n if ((0 <= i && i < this.length)) {\r\n return this.array[i];\r\n } else {\r\n return this.clipHelper(i);\r\n }\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperClamp = function(i) {\r\n return this.array[clipClamp(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperZero = function(i) {\r\n return 0;\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperPeriodic = function(i) {\r\n return this.array[clipPeriodic(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperMirror = function(i) {\r\n return this.array[clipMirror(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.interpolate = function(t) {\r\n throw 'Subclasses of AbstractInterpolator must override the interpolate() method.';\r\n };\r\n\r\n return AbstractInterpolator;\r\n\r\n })();\r\n\r\n NearestInterpolator = (function(_super) {\r\n\r\n __extends(NearestInterpolator, _super);\r\n\r\n function NearestInterpolator() {\r\n NearestInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n NearestInterpolator.prototype.interpolate = function(t) {\r\n return this.getClippedInput(Math.round(t));\r\n };\r\n\r\n return NearestInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n LinearInterpolator = (function(_super) {\r\n\r\n __extends(LinearInterpolator, _super);\r\n\r\n function LinearInterpolator() {\r\n LinearInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n LinearInterpolator.prototype.interpolate = function(t) {\r\n var k;\r\n k = Math.floor(t);\r\n t -= k;\r\n return (1 - t) * this.getClippedInput(k) + t * this.getClippedInput(k + 1);\r\n };\r\n\r\n return LinearInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n CubicInterpolator = (function(_super) {\r\n\r\n __extends(CubicInterpolator, _super);\r\n\r\n function CubicInterpolator(array, config) {\r\n this.tangentFactor = 1 - Math.max(-1, Math.min(1, config.cubicTension));\r\n CubicInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n CubicInterpolator.prototype.getTangent = function(k) {\r\n return this.tangentFactor * (this.getClippedInput(k + 1) - this.getClippedInput(k - 1)) / 2;\r\n };\r\n\r\n CubicInterpolator.prototype.interpolate = function(t) {\r\n var k, m, p, t2, t3;\r\n k = Math.floor(t);\r\n m = [this.getTangent(k), this.getTangent(k + 1)];\r\n p = [this.getClippedInput(k), this.getClippedInput(k + 1)];\r\n t -= k;\r\n t2 = t * t;\r\n t3 = t * t2;\r\n return (2 * t3 - 3 * t2 + 1) * p[0] + (t3 - 2 * t2 + t) * m[0] + (-2 * t3 + 3 * t2) * p[1] + (t3 - t2) * m[1];\r\n };\r\n\r\n return CubicInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n sin = Math.sin, PI = Math.PI;\r\n\r\n sinc = function(x) {\r\n if (x === 0) {\r\n return 1;\r\n } else {\r\n return sin(PI * x) / (PI * x);\r\n }\r\n };\r\n\r\n makeLanczosWindow = function(a) {\r\n return function(x) {\r\n return sinc(x / a);\r\n };\r\n };\r\n\r\n makeSincKernel = function(window) {\r\n return function(x) {\r\n return sinc(x) * window(x);\r\n };\r\n };\r\n\r\n SincFilterInterpolator = (function(_super) {\r\n\r\n __extends(SincFilterInterpolator, _super);\r\n\r\n function SincFilterInterpolator(array, config) {\r\n SincFilterInterpolator.__super__.constructor.apply(this, arguments);\r\n this.a = config.sincFilterSize;\r\n if (!config.sincWindow) throw 'No sincWindow provided';\r\n this.kernel = makeSincKernel(config.sincWindow);\r\n }\r\n\r\n SincFilterInterpolator.prototype.interpolate = function(t) {\r\n var k, n, sum, _ref, _ref2;\r\n k = Math.floor(t);\r\n sum = 0;\r\n for (n = _ref = k - this.a + 1, _ref2 = k + this.a; _ref <= _ref2 ? n <= _ref2 : n >= _ref2; _ref <= _ref2 ? n++ : n--) {\r\n sum += this.kernel(t - n) * this.getClippedInput(n);\r\n }\r\n return sum;\r\n };\r\n\r\n return SincFilterInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n getColumn = function(arr, i) {\r\n var row, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = arr.length; _i < _len; _i++) {\r\n row = arr[_i];\r\n _results.push(row[i]);\r\n }\r\n return _results;\r\n };\r\n\r\n makeScaledFunction = function(f, baseScale, scaleRange) {\r\n var scaleFactor, translation;\r\n if (scaleRange.join === '0,1') {\r\n return f;\r\n } else {\r\n scaleFactor = baseScale / (scaleRange[1] - scaleRange[0]);\r\n translation = scaleRange[0];\r\n return function(t) {\r\n return f(scaleFactor * (t - translation));\r\n };\r\n }\r\n };\r\n\r\n getType = function(x) {\r\n return Object.prototype.toString.call(x).slice('[object '.length, -1);\r\n };\r\n\r\n validateNumber = function(n) {\r\n if (isNaN(n)) throw 'NaN in Smooth() input';\r\n if (getType(n) !== 'Number') throw 'Non-number in Smooth() input';\r\n if (!isFinite(n)) throw 'Infinity in Smooth() input';\r\n };\r\n\r\n validateVector = function(v, dimension) {\r\n var n, _i, _len;\r\n if (getType(v) !== 'Array') throw 'Non-vector in Smooth() input';\r\n if (v.length !== dimension) throw 'Inconsistent dimension in Smooth() input';\r\n for (_i = 0, _len = v.length; _i < _len; _i++) {\r\n n = v[_i];\r\n validateNumber(n);\r\n }\r\n };\r\n\r\n isValidNumber = function(n) {\r\n return (getType(n) === 'Number') && isFinite(n) && !isNaN(n);\r\n };\r\n\r\n normalizeScaleTo = function(s) {\r\n var invalidErr;\r\n invalidErr = \"scaleTo param must be number or array of two numbers\";\r\n switch (getType(s)) {\r\n case 'Number':\r\n if (!isValidNumber(s)) throw invalidErr;\r\n s = [0, s];\r\n break;\r\n case 'Array':\r\n if (s.length !== 2) throw invalidErr;\r\n if (!(isValidNumber(s[0]) && isValidNumber(s[1]))) throw invalidErr;\r\n break;\r\n default:\r\n throw invalidErr;\r\n }\r\n return s;\r\n };\r\n\r\n shallowCopy = function(obj) {\r\n var copy, k, v;\r\n copy = {};\r\n for (k in obj) {\r\n if (!__hasProp.call(obj, k)) continue;\r\n v = obj[k];\r\n copy[k] = v;\r\n }\r\n return copy;\r\n };\r\n\r\n Smooth = function(arr, config) {\r\n var baseDomainEnd, dimension, i, interpolator, interpolatorClass, interpolators, k, n, properties, smoothFunc, v;\r\n if (config == null) config = {};\r\n properties = {};\r\n config = shallowCopy(config);\r\n properties.config = shallowCopy(config);\r\n if (config.scaleTo == null) config.scaleTo = config.period;\r\n if (config.sincFilterSize == null) {\r\n config.sincFilterSize = config.lanczosFilterSize;\r\n }\r\n for (k in defaultConfig) {\r\n if (!__hasProp.call(defaultConfig, k)) continue;\r\n v = defaultConfig[k];\r\n if (config[k] == null) config[k] = v;\r\n }\r\n if (!(interpolatorClass = {\r\n nearest: NearestInterpolator,\r\n linear: LinearInterpolator,\r\n cubic: CubicInterpolator,\r\n lanczos: SincFilterInterpolator,\r\n sinc: SincFilterInterpolator\r\n }[config.method])) {\r\n throw \"Invalid method: \" + config.method;\r\n }\r\n if (config.method === 'lanczos') {\r\n config.sincWindow = makeLanczosWindow(config.sincFilterSize);\r\n }\r\n if (arr.length < 2) throw 'Array must have at least two elements';\r\n properties.count = arr.length;\r\n smoothFunc = (function() {\r\n var _i, _j, _len, _len2;\r\n switch (getType(arr[0])) {\r\n case 'Number':\r\n properties.dimension = 'scalar';\r\n if (Smooth.deepValidation) {\r\n for (_i = 0, _len = arr.length; _i < _len; _i++) {\r\n n = arr[_i];\r\n validateNumber(n);\r\n }\r\n }\r\n interpolator = new interpolatorClass(arr, config);\r\n return function(t) {\r\n return interpolator.interpolate(t);\r\n };\r\n case 'Array':\r\n properties.dimension = dimension = arr[0].length;\r\n if (!dimension) throw 'Vectors must be non-empty';\r\n if (Smooth.deepValidation) {\r\n for (_j = 0, _len2 = arr.length; _j < _len2; _j++) {\r\n v = arr[_j];\r\n validateVector(v, dimension);\r\n }\r\n }\r\n interpolators = (function() {\r\n var _results;\r\n _results = [];\r\n for (i = 0; 0 <= dimension ? i < dimension : i > dimension; 0 <= dimension ? i++ : i--) {\r\n _results.push(new interpolatorClass(getColumn(arr, i), config));\r\n }\r\n return _results;\r\n })();\r\n return function(t) {\r\n var interpolator, _k, _len3, _results;\r\n _results = [];\r\n for (_k = 0, _len3 = interpolators.length; _k < _len3; _k++) {\r\n interpolator = interpolators[_k];\r\n _results.push(interpolator.interpolate(t));\r\n }\r\n return _results;\r\n };\r\n default:\r\n throw \"Invalid element type: \" + (getType(arr[0]));\r\n }\r\n })();\r\n if (config.clip === 'periodic') {\r\n baseDomainEnd = arr.length;\r\n } else {\r\n baseDomainEnd = arr.length - 1;\r\n }\r\n config.scaleTo || (config.scaleTo = baseDomainEnd);\r\n properties.domain = normalizeScaleTo(config.scaleTo);\r\n smoothFunc = makeScaledFunction(smoothFunc, baseDomainEnd, properties.domain);\r\n properties.domain.sort();\r\n /*copy properties\r\n */\r\n for (k in properties) {\r\n if (!__hasProp.call(properties, k)) continue;\r\n v = properties[k];\r\n smoothFunc[k] = v;\r\n }\r\n return smoothFunc;\r\n };\r\n\r\n for (k in Enum) {\r\n if (!__hasProp.call(Enum, k)) continue;\r\n v = Enum[k];\r\n Smooth[k] = v;\r\n }\r\n\r\n Smooth.deepValidation = true;\r\n\r\n (typeof exports !== \"undefined\" && exports !== null ? exports : window).Smooth = Smooth;\r\n\r\n}).call(this);\r\n","!function(r,t){if(\"function\"==typeof define&&define.amd)define([\"exports\"],t);else if(\"object\"==typeof exports&&\"undefined\"!=typeof module)t(exports);else t(r.MMTF=r.MMTF||{})}(this,function(r){\"use strict\";function t(r,t,n){for(var e=(r.byteLength,0),i=n.length;i>e;e++){var o=n.charCodeAt(e);if(128>o)r.setUint8(t++,o>>>0&127|0);else if(2048>o)r.setUint8(t++,o>>>6&31|192),r.setUint8(t++,o>>>0&63|128);else if(65536>o)r.setUint8(t++,o>>>12&15|224),r.setUint8(t++,o>>>6&63|128),r.setUint8(t++,o>>>0&63|128);else{if(!(1114112>o))throw new Error(\"bad codepoint \"+o);r.setUint8(t++,o>>>18&7|240),r.setUint8(t++,o>>>12&63|128),r.setUint8(t++,o>>>6&63|128),r.setUint8(t++,o>>>0&63|128)}}}function n(r){for(var t=0,n=0,e=r.length;e>n;n++){var i=r.charCodeAt(n);if(128>i)t+=1;else if(2048>i)t+=2;else if(65536>i)t+=3;else{if(!(1114112>i))throw new Error(\"bad codepoint \"+i);t+=4}}return t}function e(r,i,o){var a=typeof r;if(\"string\"===a){var u=n(r);if(32>u)return i.setUint8(o,160|u),t(i,o+1,r),1+u;if(256>u)return i.setUint8(o,217),i.setUint8(o+1,u),t(i,o+2,r),2+u;if(65536>u)return i.setUint8(o,218),i.setUint16(o+1,u),t(i,o+3,r),3+u;if(4294967296>u)return i.setUint8(o,219),i.setUint32(o+1,u),t(i,o+5,r),5+u}if(r instanceof Uint8Array){var u=r.byteLength,s=new Uint8Array(i.buffer);if(256>u)return i.setUint8(o,196),i.setUint8(o+1,u),s.set(r,o+2),2+u;if(65536>u)return i.setUint8(o,197),i.setUint16(o+1,u),s.set(r,o+3),3+u;if(4294967296>u)return i.setUint8(o,198),i.setUint32(o+1,u),s.set(r,o+5),5+u}if(\"number\"===a){if(!isFinite(r))throw new Error(\"Number not finite: \"+r);if(Math.floor(r)!==r)return i.setUint8(o,203),i.setFloat64(o+1,r),9;if(r>=0){if(128>r)return i.setUint8(o,r),1;if(256>r)return i.setUint8(o,204),i.setUint8(o+1,r),2;if(65536>r)return i.setUint8(o,205),i.setUint16(o+1,r),3;if(4294967296>r)return i.setUint8(o,206),i.setUint32(o+1,r),5;throw new Error(\"Number too big 0x\"+r.toString(16))}if(r>=-32)return i.setInt8(o,r),1;if(r>=-128)return i.setUint8(o,208),i.setInt8(o+1,r),2;if(r>=-32768)return i.setUint8(o,209),i.setInt16(o+1,r),3;if(r>=-2147483648)return i.setUint8(o,210),i.setInt32(o+1,r),5;throw new Error(\"Number too small -0x\"+(-r).toString(16).substr(1))}if(null===r)return i.setUint8(o,192),1;if(\"boolean\"===a)return i.setUint8(o,r?195:194),1;if(\"object\"===a){var u,f=0,c=Array.isArray(r);if(c)u=r.length;else{var d=Object.keys(r);u=d.length}var f;if(16>u?(i.setUint8(o,u|(c?144:128)),f=1):65536>u?(i.setUint8(o,c?220:222),i.setUint16(o+1,u),f=3):4294967296>u&&(i.setUint8(o,c?221:223),i.setUint32(o+1,u),f=5),c)for(var l=0;u>l;l++)f+=e(r[l],i,o+f);else for(var l=0;u>l;l++){var v=d[l];f+=e(v,i,o+f),f+=e(r[v],i,o+f)}return f}throw new Error(\"Unknown type \"+a)}function i(r){var t=typeof r;if(\"string\"===t){var e=n(r);if(32>e)return 1+e;if(256>e)return 2+e;if(65536>e)return 3+e;if(4294967296>e)return 5+e}if(r instanceof Uint8Array){var e=r.byteLength;if(256>e)return 2+e;if(65536>e)return 3+e;if(4294967296>e)return 5+e}if(\"number\"===t){if(Math.floor(r)!==r)return 9;if(r>=0){if(128>r)return 1;if(256>r)return 2;if(65536>r)return 3;if(4294967296>r)return 5;throw new Error(\"Number too big 0x\"+r.toString(16))}if(r>=-32)return 1;if(r>=-128)return 2;if(r>=-32768)return 3;if(r>=-2147483648)return 5;throw new Error(\"Number too small -0x\"+r.toString(16).substr(1))}if(\"boolean\"===t||null===r)return 1;if(\"object\"===t){var e,o=0;if(Array.isArray(r)){e=r.length;for(var a=0;e>a;a++)o+=i(r[a])}else{var u=Object.keys(r);e=u.length;for(var a=0;e>a;a++){var s=u[a];o+=i(s)+i(r[s])}}if(16>e)return 1+o;if(65536>e)return 3+o;if(4294967296>e)return 5+o;throw new Error(\"Array or object too long 0x\"+e.toString(16))}throw new Error(\"Unknown type \"+t)}function o(r){var t=new ArrayBuffer(i(r)),n=new DataView(t);return e(r,n,0),new Uint8Array(t)}function a(r,t,n){return t?new r(t.buffer,t.byteOffset,t.byteLength/(n||1)):void 0}function u(r){return a(DataView,r)}function s(r){return a(Uint8Array,r)}function f(r){return a(Int8Array,r)}function c(r){return a(Int32Array,r,4)}function d(r){return a(Float32Array,r,4)}function l(r,t){var n=r.length/2;t||(t=new Int16Array(n));for(var e=0,i=0;n>e;++e,i+=2)t[e]=r[i]<<8^r[i+1]<<0;return t}function v(r,t){var n=r.length;t||(t=new Uint8Array(2*n));for(var e=u(t),i=0;n>i;++i)e.setInt16(2*i,r[i]);return s(t)}function g(r,t){var n=r.length/4;t||(t=new Int32Array(n));for(var e=0,i=0;n>e;++e,i+=4)t[e]=r[i]<<24^r[i+1]<<16^r[i+2]<<8^r[i+3]<<0;return t}function L(r,t){var n=r.length;t||(t=new Uint8Array(4*n));for(var e=u(t),i=0;n>i;++i)e.setInt32(4*i,r[i]);return s(t)}function h(r,t){var n=r.length;t||(t=new Float32Array(n/4));for(var e=u(t),i=u(r),o=0,a=0,s=n/4;s>o;++o,a+=4)e.setFloat32(a,i.getFloat32(a),!0);return t}function y(r,t,n){var e=r.length,i=1/t;n||(n=new Float32Array(e));for(var o=0;e>o;++o)n[o]=r[o]*i;return n}function m(r,t,n){var e=r.length;n||(n=new Int32Array(e));for(var i=0;e>i;++i)n[i]=Math.round(r[i]*t);return n}function p(r,t){var n,e;if(!t){var i=0;for(n=0,e=r.length;e>n;n+=2)i+=r[n+1];t=new r.constructor(i)}var o=0;for(n=0,e=r.length;e>n;n+=2)for(var a=r[n],u=r[n+1],s=0;u>s;++s)t[o]=a,++o;return t}function U(r){if(0===r.length)return new Int32Array;var t,n,e=2;for(t=1,n=r.length;n>t;++t)r[t-1]!==r[t]&&(e+=2);var i=new Int32Array(e),o=0,a=1;for(t=1,n=r.length;n>t;++t)r[t-1]!==r[t]?(i[o]=r[t-1],i[o+1]=a,a=1,o+=2):++a;return i[o]=r[r.length-1],i[o+1]=a,i}function b(r,t){var n=r.length;t||(t=new r.constructor(n)),n&&(t[0]=r[0]);for(var e=1;n>e;++e)t[e]=r[e]+t[e-1];return t}function I(r,t){var n=r.length;t||(t=new r.constructor(n)),t[0]=r[0];for(var e=1;n>e;++e)t[e]=r[e]-r[e-1];return t}function w(r,t){var n,e,i=r instanceof Int8Array?127:32767,o=-i-1,a=r.length;if(!t){var u=0;for(n=0;a>n;++n)r[n]o&&++u;t=new Int32Array(u)}for(n=0,e=0;a>n;){for(var s=0;r[n]===i||r[n]===o;)s+=r[n],++n;s+=r[n],++n,t[e]=s,++e}return t}function C(r,t){var n,e=t?127:32767,i=-e-1,o=r.length,a=0;for(n=0;o>n;++n){var u=r[n];0===u?++a:a+=u===e||u===i?2:u>0?Math.ceil(u/e):Math.ceil(u/i)}var s=t?new Int8Array(a):new Int16Array(a),f=0;for(n=0;o>n;++n){var u=r[n];if(u>=0)for(;u>=e;)s[f]=e,++f,u-=e;else for(;i>=u;)s[f]=i,++f,u-=i;s[f]=u,++f}return s}function A(r,t){return b(p(r),t)}function x(r){return U(I(r))}function M(r,t,n){return y(p(r,c(n)),t,n)}function F(r,t){return U(m(r,t))}function S(r,t,n){return y(b(r,c(n)),t,n)}function E(r,t,n){return I(m(r,t),n)}function N(r,t,n){return y(w(r,c(n)),t,n)}function O(r,t,n){var e=w(r,c(n));return S(e,t,d(e))}function T(r,t,n){return C(E(r,t),n)}function k(r){var t=u(r),n=t.getInt32(0),e=t.getInt32(4),i=r.subarray(8,12),r=r.subarray(12);return[n,r,e,i]}function j(r,t,n,e){var i=new ArrayBuffer(12+e.byteLength),o=new Uint8Array(i),a=new DataView(i);return a.setInt32(0,r),a.setInt32(4,t),n&&o.set(n,8),o.set(e,12),o}function q(r){var t=r.length,n=s(r);return j(2,t,void 0,n)}function D(r){var t=r.length,n=L(r);return j(4,t,void 0,n)}function P(r,t){var n=r.length/t,e=L([t]),i=s(r);return j(5,n,e,i)}function z(r){var t=r.length,n=L(U(r));return j(6,t,void 0,n)}function B(r){var t=r.length,n=L(x(r));return j(8,t,void 0,n)}function V(r,t){var n=r.length,e=L([t]),i=L(F(r,t));return j(9,n,e,i)}function G(r,t){var n=r.length,e=L([t]),i=v(T(r,t));return j(10,n,e,i)}function R(r){var t={};return rr.forEach(function(n){void 0!==r[n]&&(t[n]=r[n])}),r.bondAtomList&&(t.bondAtomList=D(r.bondAtomList)),r.bondOrderList&&(t.bondOrderList=q(r.bondOrderList)),t.xCoordList=G(r.xCoordList,1e3),t.yCoordList=G(r.yCoordList,1e3),t.zCoordList=G(r.zCoordList,1e3),r.bFactorList&&(t.bFactorList=G(r.bFactorList,100)),r.atomIdList&&(t.atomIdList=B(r.atomIdList)),r.altLocList&&(t.altLocList=z(r.altLocList)),r.occupancyList&&(t.occupancyList=V(r.occupancyList,100)),t.groupIdList=B(r.groupIdList),t.groupTypeList=D(r.groupTypeList),r.secStructList&&(t.secStructList=q(r.secStructList,1)),r.insCodeList&&(t.insCodeList=z(r.insCodeList)),r.sequenceIndexList&&(t.sequenceIndexList=B(r.sequenceIndexList)),t.chainIdList=P(r.chainIdList,4),r.chainNameList&&(t.chainNameList=P(r.chainNameList,4)),t}function H(r){function t(r){for(var t={},n=0;r>n;n++){var e=o();t[e]=o()}return t}function n(t){var n=r.subarray(a,a+t);return a+=t,n}function e(t){var n=r.subarray(a,a+t);a+=t;var e=65535;if(t>e){for(var i=[],o=0;on;n++)t[n]=o();return t}function o(){var o,s,f=r[a];if(0===(128&f))return a++,f;if(128===(240&f))return s=15&f,a++,t(s);if(144===(240&f))return s=15&f,a++,i(s);if(160===(224&f))return s=31&f,a++,e(s);if(224===(224&f))return o=u.getInt8(a),a++,o;switch(f){case 192:return a++,null;case 194:return a++,!1;case 195:return a++,!0;case 196:return s=u.getUint8(a+1),a+=2,n(s);case 197:return s=u.getUint16(a+1),a+=3,n(s);case 198:return s=u.getUint32(a+1),a+=5,n(s);case 202:return o=u.getFloat32(a+1),a+=5,o;case 203:return o=u.getFloat64(a+1),a+=9,o;case 204:return o=r[a+1],a+=2,o;case 205:return o=u.getUint16(a+1),a+=3,o;case 206:return o=u.getUint32(a+1),a+=5,o;case 208:return o=u.getInt8(a+1),a+=2,o;case 209:return o=u.getInt16(a+1),a+=3,o;case 210:return o=u.getInt32(a+1),a+=5,o;case 217:return s=u.getUint8(a+1),a+=2,e(s);case 218:return s=u.getUint16(a+1),a+=3,e(s);case 219:return s=u.getUint32(a+1),a+=5,e(s);case 220:return s=u.getUint16(a+1),a+=3,i(s);case 221:return s=u.getUint32(a+1),a+=5,i(s);case 222:return s=u.getUint16(a+1),a+=3,t(s);case 223:return s=u.getUint32(a+1),a+=5,t(s)}throw new Error(\"Unknown type 0x\"+f.toString(16))}var a=0,u=new DataView(r.buffer);return o()}function W(r,t,n,e){switch(r){case 1:return h(t);case 2:return f(t);case 3:return l(t);case 4:return g(t);case 5:return s(t);case 6:return p(g(t),new Uint8Array(n));case 7:return p(g(t));case 8:return A(g(t));case 9:return M(g(t),g(e)[0]);case 10:return O(l(t),g(e)[0]);case 11:return y(l(t),g(e)[0]);case 12:return N(l(t),g(e)[0]);case 13:return N(f(t),g(e)[0]);case 14:return w(l(t));case 15:return w(f(t))}}function X(r,t){t=t||{};var n=t.ignoreFields,e={};return nr.forEach(function(t){var i=n?-1!==n.indexOf(t):!1,o=r[t];i||void 0===o||(o instanceof Uint8Array?e[t]=W.apply(null,k(o)):e[t]=o)}),e}function J(r){return String.fromCharCode.apply(null,r).replace(/\\0/g,\"\")}function K(r,t,n){n=n||{};var e,i,o,a,u,s,f=n.firstModelOnly,c=t.onModel,d=t.onChain,l=t.onGroup,v=t.onAtom,g=t.onBond,L=0,h=0,y=0,m=0,p=0,U=-1,b=r.chainNameList,I=r.secStructList,w=r.insCodeList,C=r.sequenceIndexList,A=r.atomIdList,x=r.bFactorList,M=r.altLocList,F=r.occupancyList,S=r.bondAtomList,E=r.bondOrderList;for(e=0,i=r.chainsPerModel.length;i>e&&!(f&&L>0);++e){var N=r.chainsPerModel[L];for(c&&c({chainCount:N,modelIndex:L}),o=0;N>o;++o){var O=r.groupsPerChain[h];if(d){var T=J(r.chainIdList.subarray(4*h,4*h+4)),k=null;b&&(k=J(b.subarray(4*h,4*h+4))),d({groupCount:O,chainIndex:h,modelIndex:L,chainId:T,chainName:k})}for(a=0;O>a;++a){var j=r.groupList[r.groupTypeList[y]],q=j.atomNameList.length;if(l){var D=null;I&&(D=I[y]);var P=null;r.insCodeList&&(P=String.fromCharCode(w[y]));var z=null;C&&(z=C[y]),l({atomCount:q,groupIndex:y,chainIndex:h,modelIndex:L,groupId:r.groupIdList[y],groupType:r.groupTypeList[y],groupName:j.groupName,singleLetterCode:j.singleLetterCode,chemCompType:j.chemCompType,secStruct:D,insCode:P,sequenceIndex:z})}for(u=0;q>u;++u){if(v){var B=null;A&&(B=A[m]);var V=null;x&&(V=x[m]);var G=null;M&&(G=String.fromCharCode(M[m]));var R=null;F&&(R=F[m]),v({atomIndex:m,groupIndex:y,chainIndex:h,modelIndex:L,atomId:B,element:j.elementList[u],atomName:j.atomNameList[u],formalCharge:j.formalChargeList[u],xCoord:r.xCoordList[m],yCoord:r.yCoordList[m],zCoord:r.zCoordList[m],bFactor:V,altLoc:G,occupancy:R})}m+=1}if(g){var H=j.bondAtomList;for(u=0,s=j.bondOrderList.length;s>u;++u)g({atomIndex1:m-q+H[2*u],atomIndex2:m-q+H[2*u+1],bondOrder:j.bondOrderList[u]})}y+=1}h+=1}if(p=U+1,U=m-1,g&&S)for(u=0,s=S.length;s>u;u+=2){var W=S[u],X=S[u+1];(W>=p&&U>=W||X>=p&&U>=X)&&g({atomIndex1:W,atomIndex2:X,bondOrder:E?E[u/2]:null})}L+=1}}function Q(r){return o(R(r))}function Y(r,t){r instanceof ArrayBuffer&&(r=new Uint8Array(r));var n;return n=r instanceof Uint8Array?H(r):r,X(n,t)}function Z(r,t,n,e){function i(){try{var r=Y(o.response);n(r)}catch(t){e(t)}}var o=new XMLHttpRequest;o.addEventListener(\"load\",i,!0),o.addEventListener(\"error\",e,!0),o.responseType=\"arraybuffer\",o.open(\"GET\",t+r.toUpperCase()),o.send()}function $(r,t,n){Z(r,or,t,n)}function _(r,t,n){Z(r,ar,t,n)}var rr=[\"mmtfVersion\",\"mmtfProducer\",\"unitCell\",\"spaceGroup\",\"structureId\",\"title\",\"depositionDate\",\"releaseDate\",\"experimentalMethods\",\"resolution\",\"rFree\",\"rWork\",\"bioAssemblyList\",\"ncsOperatorList\",\"entityList\",\"groupList\",\"numBonds\",\"numAtoms\",\"numGroups\",\"numChains\",\"numModels\",\"groupsPerChain\",\"chainsPerModel\"],tr=[\"xCoordList\",\"yCoordList\",\"zCoordList\",\"groupIdList\",\"groupTypeList\",\"chainIdList\",\"bFactorList\",\"atomIdList\",\"altLocList\",\"occupancyList\",\"secStructList\",\"insCodeList\",\"sequenceIndexList\",\"chainNameList\",\"bondAtomList\",\"bondOrderList\"],nr=rr.concat(tr),er=\"v1.1.0dev\",ir=\"//mmtf.rcsb.org/v1.0/\",or=ir+\"full/\",ar=ir+\"reduced/\";r.encode=Q,r.decode=Y,r.traverse=K,r.fetch=$,r.fetchReduced=_,r.version=er,r.fetchUrl=or,r.fetchReducedUrl=ar,r.encodeMsgpack=o,r.encodeMmtf=R,r.decodeMsgpack=H,r.decodeMmtf=X});","module.exports = __WEBPACK_EXTERNAL_MODULE__535__;","module.exports = __WEBPACK_EXTERNAL_MODULE__698__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar defaults = {\n lines: 12,\n length: 7,\n width: 5,\n radius: 10,\n scale: 1.0,\n corners: 1,\n color: '#000',\n fadeColor: 'transparent',\n animation: 'spinner-line-fade-default',\n rotate: 0,\n direction: 1,\n speed: 1,\n zIndex: 2e9,\n className: 'spinner',\n top: '50%',\n left: '50%',\n shadow: '0 0 1px transparent', // prevent aliased lines\n position: 'absolute',\n};\nvar Spinner = /** @class */ (function () {\n function Spinner(opts) {\n if (opts === void 0) { opts = {}; }\n this.opts = __assign(__assign({}, defaults), opts);\n }\n /**\n * Adds the spinner to the given target element. If this instance is already\n * spinning, it is automatically removed from its previous target by calling\n * stop() internally.\n */\n Spinner.prototype.spin = function (target) {\n this.stop();\n this.el = document.createElement('div');\n this.el.className = this.opts.className;\n this.el.setAttribute('role', 'progressbar');\n this.el.style.position = this.opts.position;\n this.el.style.width = \"0\";\n this.el.style.zIndex = this.opts.zIndex.toString();\n this.el.style.left = this.opts.left;\n this.el.style.top = this.opts.top;\n this.el.style.transform = \"scale(\".concat(this.opts.scale, \")\");\n if (target) {\n target.insertBefore(this.el, target.firstChild || null);\n }\n drawLines(this.el, this.opts);\n return this;\n };\n /**\n * Stops and removes the Spinner.\n * Stopped spinners may be reused by calling spin() again.\n */\n Spinner.prototype.stop = function () {\n if (this.el) {\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n this.el = undefined;\n }\n return this;\n };\n return Spinner;\n}());\nexport { Spinner };\n/**\n * Returns the line color from the given string or array.\n */\nfunction getColor(color, idx) {\n return typeof color == 'string' ? color : color[idx % color.length];\n}\n/**\n * Internal method that draws the individual lines.\n */\nfunction drawLines(el, opts) {\n var borderRadius = (Math.round(opts.corners * opts.width * 500) / 1000) + 'px';\n var shadow = 'none';\n if (opts.shadow === true) {\n shadow = '0 2px 4px #000'; // default shadow\n }\n else if (typeof opts.shadow === 'string') {\n shadow = opts.shadow;\n }\n var shadows = parseBoxShadow(shadow);\n for (var i = 0; i < opts.lines; i++) {\n var degrees = ~~(360 / opts.lines * i + opts.rotate);\n var backgroundLine = document.createElement('div');\n backgroundLine.style.position = 'absolute';\n backgroundLine.style.top = \"\".concat(-opts.width / 2, \"px\");\n backgroundLine.style.width = (opts.length + opts.width) + 'px';\n backgroundLine.style.height = opts.width + 'px';\n backgroundLine.style.background = getColor(opts.fadeColor, i);\n backgroundLine.style.borderRadius = borderRadius;\n backgroundLine.style.transformOrigin = 'left';\n backgroundLine.style.transform = \"rotate(\".concat(degrees, \"deg) translateX(\").concat(opts.radius, \"px)\");\n var delay = i * opts.direction / opts.lines / opts.speed;\n delay -= 1 / opts.speed; // so initial animation state will include trail\n var line = document.createElement('div');\n line.style.width = '100%';\n line.style.height = '100%';\n line.style.background = getColor(opts.color, i);\n line.style.borderRadius = borderRadius;\n line.style.boxShadow = normalizeShadow(shadows, degrees);\n line.style.animation = \"\".concat(1 / opts.speed, \"s linear \").concat(delay, \"s infinite \").concat(opts.animation);\n backgroundLine.appendChild(line);\n el.appendChild(backgroundLine);\n }\n}\nfunction parseBoxShadow(boxShadow) {\n var regex = /^\\s*([a-zA-Z]+\\s+)?(-?\\d+(\\.\\d+)?)([a-zA-Z]*)\\s+(-?\\d+(\\.\\d+)?)([a-zA-Z]*)(.*)$/;\n var shadows = [];\n for (var _i = 0, _a = boxShadow.split(','); _i < _a.length; _i++) {\n var shadow = _a[_i];\n var matches = shadow.match(regex);\n if (matches === null) {\n continue; // invalid syntax\n }\n var x = +matches[2];\n var y = +matches[5];\n var xUnits = matches[4];\n var yUnits = matches[7];\n if (x === 0 && !xUnits) {\n xUnits = yUnits;\n }\n if (y === 0 && !yUnits) {\n yUnits = xUnits;\n }\n if (xUnits !== yUnits) {\n continue; // units must match to use as coordinates\n }\n shadows.push({\n prefix: matches[1] || '', // could have value of 'inset' or undefined\n x: x,\n y: y,\n xUnits: xUnits,\n yUnits: yUnits,\n end: matches[8],\n });\n }\n return shadows;\n}\n/**\n * Modify box-shadow x/y offsets to counteract rotation\n */\nfunction normalizeShadow(shadows, degrees) {\n var normalized = [];\n for (var _i = 0, shadows_1 = shadows; _i < shadows_1.length; _i++) {\n var shadow = shadows_1[_i];\n var xy = convertOffset(shadow.x, shadow.y, degrees);\n normalized.push(shadow.prefix + xy[0] + shadow.xUnits + ' ' + xy[1] + shadow.yUnits + shadow.end);\n }\n return normalized.join(', ');\n}\nfunction convertOffset(x, y, degrees) {\n var radians = degrees * Math.PI / 180;\n var sin = Math.sin(radians);\n var cos = Math.cos(radians);\n return [\n Math.round((x * cos + y * sin) * 1000) / 1000,\n Math.round((-x * sin + y * cos) * 1000) / 1000,\n ];\n}\n","//----------------------------------------------------------------------------\r\n// Timer\r\n\r\nexport default class Timer {\r\n constructor() {\r\n this.startTime = 0;\r\n this.oldTime = 0;\r\n this.elapsedTime = 0;\r\n this.running = false;\r\n }\r\n\r\n start() {\r\n this.startTime = Timer.now();\r\n this.oldTime = this.startTime;\r\n this.running = true;\r\n }\r\n\r\n stop() {\r\n this.getElapsedTime();\r\n this.running = false;\r\n }\r\n\r\n getElapsedTime() {\r\n this.update();\r\n return this.elapsedTime;\r\n }\r\n\r\n update() {\r\n let delta = 0;\r\n if (this.running) {\r\n const newTime = Timer.now();\r\n delta = 0.001 * (newTime - this.oldTime);\r\n this.oldTime = newTime;\r\n this.elapsedTime += delta;\r\n }\r\n\r\n return delta;\r\n }\r\n}\r\n\r\nTimer.now = (function () {\r\n const p = typeof window !== 'undefined' && window.performance;\r\n return (p && p.now) ? p.now.bind(p) : Date.now;\r\n}());\r\n","import Timer from '../Timer';\r\n\r\nconst { now } = Timer;\r\n\r\nfunction createElement(tag, id, css) {\r\n const element = document.createElement(tag);\r\n element.id = id;\r\n element.style.cssText = css;\r\n return element;\r\n}\r\n\r\nclass Stats {\r\n constructor() {\r\n this.domElement = createElement('div', 'stats', 'padding:8px');\r\n this._text = createElement('p', 'fps', 'margin:0;color:silver;font-size:large');\r\n this.domElement.appendChild(this._text);\r\n\r\n this._startTime = now();\r\n this._prevTime = this._startTime;\r\n\r\n this._deltas = new Array(20);\r\n this._index = 0;\r\n this._total = 0.0;\r\n this._count = 0;\r\n }\r\n\r\n end() {\r\n const time = now();\r\n const delta = time - this._startTime;\r\n\r\n if (this._count < this._deltas.length) {\r\n this._count++;\r\n } else {\r\n this._total -= this._deltas[this._index];\r\n }\r\n this._total += delta;\r\n this._deltas[this._index] = delta;\r\n this._index = (this._index + 1) % this._deltas.length;\r\n\r\n this.ms = this._total / this._count;\r\n this.fps = 1000 / this.ms;\r\n\r\n if (time > this._prevTime + 1000) {\r\n this._text.textContent = this.fps.toPrecision(2);\r\n this._prevTime = time;\r\n }\r\n\r\n return time;\r\n }\r\n\r\n update() {\r\n this._startTime = this.end();\r\n }\r\n\r\n show(on) {\r\n if (on === undefined) {\r\n on = true;\r\n }\r\n this.domElement.style.display = on ? 'block' : 'none';\r\n }\r\n}\r\n\r\nexport default Stats;\r\n","/**\r\n * This class introduces the simplest event system.\r\n */\r\n\r\nimport _ from 'lodash';\r\n\r\nfunction isUndefOrEqual(param, value) {\r\n return !param || param === value;\r\n}\r\n\r\n/**\r\n * Creates empty dispatcher.\r\n *\r\n * @exports EventDispatcher\r\n * @constructor\r\n */\r\nfunction EventDispatcher() {\r\n this._handlers = {};\r\n}\r\n\r\n/**\r\n * Binds callback on specific event type. Optional `context` parameter\r\n * could be used as 'this' for the `callback`.\r\n * @param {string} type Event name.\r\n * @param {function} callback Callback function.\r\n * @param {Object} [context] 'This' object for the callback.\r\n */\r\nEventDispatcher.prototype.addEventListener = function (type, callback, context) {\r\n let handlers = this._handlers[type];\r\n\r\n if (!handlers) {\r\n this._handlers[type] = [];\r\n handlers = this._handlers[type];\r\n }\r\n\r\n const params = [callback, context];\r\n function _checkPar(par) {\r\n return par[0] === params[0] && par[1] === params[1];\r\n }\r\n\r\n if (_.find(handlers, _checkPar) === undefined) {\r\n handlers.push(params);\r\n }\r\n};\r\n\r\n/**\r\n * Removes a previously-bound callback function from an object.\r\n * If no `context` is specified, all versions of the `callback` with different\r\n * contexts will be removed.\r\n * If no `callback` is specified, all callbacks of the `type` will be removed.\r\n * If no `type` is specified, callbacks for all events will be removed.\r\n * @param {?string} [type] Event type.\r\n * @param {function} [callback] Callback function.\r\n * @param {Object} [context] 'This' object for the callback.\r\n */\r\nEventDispatcher.prototype.removeEventListener = function (type, callback, context) {\r\n const self = this;\r\n _.forEach(self._handlers, (handler, ev) => {\r\n _.remove(handler, (values) => isUndefOrEqual(type, ev)\r\n && isUndefOrEqual(callback, values[0])\r\n && isUndefOrEqual(context, values[1] || self));\r\n });\r\n\r\n this._handlers = _.omitBy(self._handlers, (handler) => handler.length === 0);\r\n};\r\n\r\n/**\r\n * Makes all the callbacks for the specific `event` to trigger.\r\n * @param {Object} event Event.\r\n * @param {string} event.type Type of the event.\r\n */\r\nEventDispatcher.prototype.dispatchEvent = function (event) {\r\n const self = this;\r\n\r\n _.forEach(this._handlers[event.type], (callback) => {\r\n const context = callback[1] || self;\r\n callback[0].apply(context, [event]);\r\n });\r\n};\r\n\r\nexport default EventDispatcher;\r\n","/**\r\n * This module contains class for logging.\r\n * Returns an instance of a logger that have already been created.\r\n * Allows users to log messages for five different levels,\r\n * enable console output and catch signal on each message.\r\n */\r\nimport _ from 'lodash';\r\nimport EventDispatcher from './EventDispatcher';\r\n\r\nconst priorities = {\r\n debug: 0,\r\n info: 1,\r\n report: 2,\r\n warn: 3,\r\n error: 4,\r\n};\r\n\r\n/**\r\n * Create new Logger.\r\n *\r\n * @exports Logger\r\n * @extends EventDispatcher\r\n * @constructor\r\n */\r\nfunction Logger() {\r\n EventDispatcher.call(this);\r\n /** Boolean flag that toggles output to browser console.\r\n * @type {boolean}\r\n */\r\n this.console = false;\r\n this._priority = priorities.warn;\r\n}\r\n\r\nLogger.prototype = Object.create(EventDispatcher.prototype);\r\nLogger.prototype.constructor = Logger;\r\n\r\n/**\r\n * Create new clean instance of the logger.\r\n * @returns {Logger}\r\n */\r\nLogger.prototype.instantiate = function () {\r\n return new Logger();\r\n};\r\n\r\nfunction verify(number) {\r\n if (!_.isNumber(number)) {\r\n throw new Error('Wrong log level specified!');\r\n }\r\n return number;\r\n}\r\n\r\n/**\r\n * @property {string} current threshold for signals and console output.\r\n * @name Logger#level\r\n */\r\nObject.defineProperty(Logger.prototype, 'level', {\r\n get() {\r\n return _.findKey(priorities, (value) => value === this._priority);\r\n },\r\n set(level) {\r\n this._priority = verify(priorities[level]);\r\n },\r\n});\r\n\r\n/**\r\n * Returns the list of all possible level values.\r\n * @returns {Array}\r\n */\r\nLogger.prototype.levels = function () {\r\n return Object.keys(priorities);\r\n};\r\n\r\n/**\r\n * Add new message with specified level.\r\n * @param {string} level - level of the message, must be one of the\r\n * {'debug' | 'info' | 'report' | 'warn' | 'error'}\r\n * @param {string} message\r\n */\r\nLogger.prototype.message = function (level, message) {\r\n const priority = verify(priorities[level]);\r\n this._message(priority, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('debug', ...);\r\n * @param message\r\n */\r\nLogger.prototype.debug = function (message) {\r\n this._message(priorities.debug, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('info', ...);\r\n * @param message\r\n */\r\nLogger.prototype.info = function (message) {\r\n this._message(priorities.info, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('report', ...);\r\n * @param message\r\n */\r\nLogger.prototype.report = function (message) {\r\n this._message(priorities.report, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('warn', ...);\r\n * @param message\r\n */\r\nLogger.prototype.warn = function (message) {\r\n this._message(priorities.warn, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('error', ...);\r\n * @param message\r\n */\r\nLogger.prototype.error = function (message) {\r\n this._message(priorities.error, message);\r\n};\r\n\r\n/**\r\n * Add new message with specified priority.\r\n * @param {number} priority - priority of the message\r\n * @param {string} message\r\n * @private\r\n */\r\nLogger.prototype._message = function (priority, message) {\r\n if (priority < this._priority) {\r\n return;\r\n }\r\n const level = _.findKey(priorities, (value) => value === priority);\r\n message = String(message);\r\n if (this.console) {\r\n const output = `miew:${level}: ${message}`;\r\n if (level === 'error') {\r\n console.error(output); // NOSONAR\r\n } else if (level === 'warn') {\r\n console.warn(output); // NOSONAR\r\n } else {\r\n console.log(output); // NOSONAR\r\n }\r\n }\r\n this.dispatchEvent({ type: 'message', level, message });\r\n};\r\n\r\nexport default new Logger();\r\n","import _ from 'lodash';\r\nimport logger from './utils/logger';\r\n\r\nconst browserType = {\r\n DEFAULT: 0,\r\n SAFARI: 1,\r\n};\r\n//----------------------------------------------------------------------------\r\n// Query string\r\n\r\n/**\r\n * Escape only dangerous chars in a query string component, use a plus instead of a space.\r\n *\r\n * [RFC 3986](https://tools.ietf.org/html/rfc3986) allows the following chars in the query (see 3.4):\r\n *\r\n * A-Z a-z 0-9 - _ . ~ ! $ & ' ( ) * + , ; = : @ / ?\r\n *\r\n * For query string elements we need to escape ampersand, equal sign, and plus,\r\n * but encodeURIComponent() function encodes anything except for the following:\r\n *\r\n * A-Z a-z 0-9 - _ . ~ ! ' ( ) *\r\n *\r\n * @param {string} text - key or value to encode\r\n * @param {string} excludeExp - regexp for symbols to exclude from encoding\r\n * @returns {string} encoded string\r\n */\r\nfunction encodeQueryComponent(text, excludeExp) {\r\n const encode = (code) => String.fromCharCode(parseInt(code.substr(1), 16));\r\n return encodeURIComponent(text).replace(excludeExp, encode).replace(/%20/g, '+');\r\n}\r\n\r\n/**\r\n * Unescape dangerous chars in a query string component.\r\n *\r\n * @param {string} text - encoded key or value\r\n * @returns {string} decoded string\r\n * @see {@link encodeQueryComponent}\r\n */\r\nfunction decodeQueryComponent(text) {\r\n return decodeURIComponent(text.replace(/\\+/g, ' '));\r\n}\r\n\r\n/**\r\n * Parse URL and extract an array of parameters.\r\n * @param {string?} url - URL or query string to parse\r\n * @returns {Array} array of (key, value) pairs.\r\n */\r\nfunction getUrlParameters(url) {\r\n url = url || window.location.search;\r\n\r\n const query = url.substring(url.indexOf('?') + 1);\r\n const search = /([^&=]+)=?([^&]*)/g;\r\n const result = [];\r\n let match;\r\n\r\n while ((match = search.exec(query)) !== null) { // eslint-disable-line no-cond-assign\r\n result.push([decodeQueryComponent(match[1]), decodeQueryComponent(match[2])]);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Parse URL and extract an array of parameters as a hash.\r\n * @param {string?} url - URL or query string to parse\r\n * @returns {Object}\r\n */\r\nfunction getUrlParametersAsDict(url) {\r\n const result = {};\r\n const a = getUrlParameters(url);\r\n for (let i = 0; i < a.length; ++i) {\r\n const [key, value] = a[i];\r\n result[key] = value;\r\n }\r\n return result;\r\n}\r\n\r\nfunction resolveURL(str) {\r\n if (typeof URL !== 'undefined') {\r\n try {\r\n if (typeof window !== 'undefined') {\r\n return new URL(str, window.location).href;\r\n }\r\n return new URL(str).href;\r\n } catch (error) {\r\n // IE 11 has a URL object with no constructor available so just try a different approach instead\r\n }\r\n }\r\n if (typeof document !== 'undefined') {\r\n const anchor = document.createElement('a');\r\n anchor.href = str;\r\n return anchor.href;\r\n }\r\n return str;\r\n}\r\n\r\n/**\r\n * Generates regular expression object that includes all symbols\r\n * listed in the argument\r\n * @param symbolStr {string} - String containing characters list.\r\n * @returns {RegExp} - Regular expression.\r\n */\r\nfunction generateRegExp(symbolStr) {\r\n const symbolList = [];\r\n\r\n for (let i = 0, n = symbolStr.length; i < n; ++i) {\r\n symbolList[symbolList.length] = symbolStr[i].charCodeAt(0).toString(16);\r\n }\r\n\r\n const listStr = symbolList.join('|');\r\n\r\n return new RegExp(`%(?:${listStr})`, 'gi');\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Create HTML element\r\n\r\nfunction createElement(tag, attrs, content) {\r\n const element = document.createElement(tag);\r\n let i;\r\n let n;\r\n if (attrs) {\r\n const keys = Object.keys(attrs);\r\n for (i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n element.setAttribute(key, attrs[key]);\r\n }\r\n }\r\n if (content) {\r\n if (!(content instanceof Array)) {\r\n content = [content];\r\n }\r\n for (i = 0, n = content.length; i < n; ++i) {\r\n const child = content[i];\r\n if (typeof child === 'string') {\r\n element.appendChild(document.createTextNode(child));\r\n } else if (child instanceof HTMLElement) {\r\n element.appendChild(child);\r\n }\r\n }\r\n }\r\n return element;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Easy inheritance\r\n\r\n/**\r\n * Derive the class from the base.\r\n * @param cls {function} - Class (constructor) to derive.\r\n * @param base {function} - Class (constructor) to derive from.\r\n * @param members {object=} - Optional instance members to add.\r\n * @param statics {object=} - Optional static class members to add.\r\n * @returns {function} Original class.\r\n */\r\nfunction deriveClass(cls, base, members, statics) {\r\n cls.prototype = _.assign(Object.create(base.prototype), { constructor: cls }, members);\r\n if (statics) {\r\n _.assign(cls, statics);\r\n }\r\n return cls;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Deep prototyping\r\n\r\nfunction deriveDeep(obj, needZeroOwnProperties) {\r\n let res = obj;\r\n let i;\r\n let n;\r\n if (obj instanceof Array) {\r\n res = new Array(obj.length);\r\n for (i = 0, n = obj.length; i < n; ++i) {\r\n res[i] = deriveDeep(obj[i]);\r\n }\r\n } else if (obj instanceof Object) {\r\n res = Object.create(obj);\r\n const keys = Object.keys(obj);\r\n for (i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n const value = obj[key];\r\n const copy = deriveDeep(value);\r\n if (copy !== value) {\r\n res[key] = copy;\r\n }\r\n }\r\n if (needZeroOwnProperties && Object.keys(res).length > 0) {\r\n res = Object.create(res);\r\n }\r\n }\r\n return res;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Colors\r\n\r\nfunction hexColor(color) {\r\n const hex = (`0000000${color.toString(16)}`).substr(-6);\r\n return `#${hex}`;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Debug tracing\r\n\r\nfunction DebugTracer(namespace) {\r\n let enabled = false;\r\n\r\n this.enable = function (on) {\r\n enabled = on;\r\n };\r\n\r\n let indent = 0;\r\n const methods = Object.keys(namespace);\r\n\r\n function wrap(method_, name_) {\r\n return function (...args) {\r\n const spaces = DebugTracer.spaces.substr(0, indent * 2);\r\n if (enabled) {\r\n logger.debug(`${spaces + name_} {`);\r\n }\r\n indent++;\r\n const result = method_.apply(this, args); // eslint-disable-line no-invalid-this\r\n indent--;\r\n if (enabled) {\r\n logger.debug(`${spaces}} // ${name_}`);\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n for (let i = 0, n = methods.length; i < n; ++i) {\r\n const name = methods[i];\r\n const method = namespace[name];\r\n if (method instanceof Function && name !== 'constructor') {\r\n namespace[name] = wrap(method, name);\r\n }\r\n }\r\n}\r\n\r\nDebugTracer.spaces = ' ';\r\n\r\nclass OutOfMemoryError extends Error {\r\n constructor(message) {\r\n super();\r\n this.name = 'OutOfMemoryError';\r\n this.message = message;\r\n }\r\n}\r\n\r\nfunction allocateTyped(TypedArrayName, size) {\r\n let result = null;\r\n try {\r\n result = new TypedArrayName(size);\r\n } catch (e) {\r\n if (e instanceof RangeError) {\r\n throw new OutOfMemoryError(e.message);\r\n } else {\r\n throw e;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Float array conversion\r\n\r\nfunction bytesToBase64(/** ArrayBuffer */ buffer) {\r\n const bytes = new Uint8Array(buffer);\r\n let binary = '';\r\n for (let i = 0; i < bytes.byteLength; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return window.btoa(binary);\r\n}\r\n\r\nfunction bytesFromBase64(/** string */ str) {\r\n const binary = window.atob(str);\r\n const bytes = new Uint8Array(binary.length);\r\n for (let i = 0; i < bytes.length; ++i) {\r\n bytes[i] = binary[i].charCodeAt(0);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\nfunction arrayToBase64(/** number[] */ array, /** function */ TypedArrayClass) {\r\n return bytesToBase64(new TypedArrayClass(array).buffer);\r\n}\r\n\r\nfunction arrayFromBase64(/** string */ str, /** function */ TypedArrayClass) {\r\n return Array.prototype.slice.call(new TypedArrayClass(bytesFromBase64(str)));\r\n}\r\n\r\n// NOTE: this is 1-level comparison\r\nfunction compareOptionsWithDefaults(opts, defOpts) {\r\n const optsStr = [];\r\n if (defOpts && opts) {\r\n const keys = Object.keys(opts);\r\n for (let p = 0; p < keys.length; ++p) {\r\n const key = keys[p];\r\n const value = opts[key];\r\n // TODO add processing for tree structure\r\n if (!(value instanceof Object) && typeof defOpts[key] !== 'undefined' && defOpts[key] !== value) {\r\n optsStr.push(`${key}:${value}`);\r\n }\r\n }\r\n if (optsStr.length > 0) {\r\n return `!${optsStr.join()}`;\r\n }\r\n }\r\n return '';\r\n}\r\n\r\nfunction isAlmostPlainObject(o) {\r\n if (_.isPlainObject(o)) {\r\n return true;\r\n }\r\n const proto = o && Object.getPrototypeOf(o);\r\n return !!proto && !proto.hasOwnProperty('constructor') && isAlmostPlainObject(proto);\r\n}\r\n\r\n/**\r\n * Build an object that contains properties (and subproperties) of `src` different from those\r\n * in `dst`. Objects are parsed recursively, other values (including arrays) are compared for\r\n * equality using `_.isEqual()`.\r\n * @param {!object} src - a new object to compare, may contain changed or new properties\r\n * @param {!object} dst - an old reference object\r\n */\r\nfunction objectsDiff(src, dst) {\r\n const diff = {};\r\n _.forIn(src, (srcValue, key) => {\r\n const dstValue = dst[key];\r\n if (isAlmostPlainObject(srcValue) && isAlmostPlainObject(dstValue)) {\r\n const deepDiff = objectsDiff(srcValue, dstValue);\r\n if (!_.isEmpty(deepDiff)) {\r\n diff[key] = deepDiff;\r\n }\r\n } else if (!_.isEqual(srcValue, dstValue)) {\r\n diff[key] = srcValue;\r\n }\r\n });\r\n return diff;\r\n}\r\n\r\nfunction forInRecursive(object, callback) {\r\n function iterateThrough(obj, prefix) {\r\n _.forIn(obj, (value, key) => {\r\n const newPref = prefix + (prefix.length > 0 ? '.' : '');\r\n if (value instanceof Object) {\r\n iterateThrough(value, newPref + key);\r\n } else if (value !== undefined) {\r\n callback(value, newPref + key);\r\n }\r\n });\r\n }\r\n iterateThrough(object, '');\r\n}\r\n\r\nfunction enquoteString(value) {\r\n if (_.isString(value)) {\r\n return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\r\n }\r\n return value;\r\n}\r\n\r\nfunction unquoteString(value) {\r\n if (!_.isString(value)) {\r\n return value;\r\n }\r\n if (value[0] === '\"' && value[value.length - 1] === '\"') {\r\n value = value.slice(1, value.length - 1);\r\n return value.replace(/\\\\\"/g, '\"');\r\n }\r\n if (value[0] === \"'\" && value[value.length - 1] === \"'\") {\r\n value = value.slice(1, value.length - 1);\r\n return value.replace(/\\\\'/g, \"'\");\r\n }\r\n throw new SyntaxError('Incorrect string format, can\\'t unqute it');\r\n}\r\n\r\nfunction getFileExtension(fileName) {\r\n return fileName.slice((Math.max(0, fileName.lastIndexOf('.')) || Infinity));\r\n}\r\n\r\nfunction splitFileName(fileName) {\r\n const ext = getFileExtension(fileName);\r\n const name = fileName.slice(0, fileName.length - ext.length);\r\n return [name, ext];\r\n}\r\n\r\nfunction dataUrlToBlob(url) {\r\n const parts = url.split(/[:;,]/);\r\n const partsCount = parts.length;\r\n if (partsCount >= 3 && parts[partsCount - 2] === 'base64') {\r\n return new Blob([bytesFromBase64(parts[partsCount - 1])]);\r\n }\r\n return null;\r\n}\r\n\r\nfunction getBrowser() {\r\n if (navigator.vendor && navigator.vendor.indexOf('Apple') > -1\r\n && navigator.userAgent\r\n && navigator.userAgent.indexOf('CriOS') === -1\r\n && navigator.userAgent.indexOf('FxiOS') === -1) {\r\n return browserType.SAFARI;\r\n }\r\n return browserType.DEFAULT;\r\n}\r\n\r\nfunction shotOpen(url) {\r\n if (typeof window !== 'undefined') {\r\n window.open().document.write(``);\r\n }\r\n}\r\n\r\nfunction shotDownload(dataUrl, filename) {\r\n if (!dataUrl || dataUrl.substr(0, 5) !== 'data:') {\r\n return;\r\n }\r\n if (!filename) {\r\n filename = ['screenshot-', +new Date(), '.png'].join('');\r\n }\r\n if (typeof window !== 'undefined' && window.navigator && window.navigator.msSaveBlob) {\r\n window.navigator.msSaveBlob(dataUrlToBlob(dataUrl), filename);\r\n } else if (typeof document !== 'undefined') {\r\n const link = document.createElement('a');\r\n link.download = filename;\r\n link.innerHTML = 'download';\r\n link.href = window.URL.createObjectURL(dataUrlToBlob(dataUrl));\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n}\r\n\r\nfunction download(data, filename, type) {\r\n const blobData = new Blob([data]);\r\n\r\n if (!filename) {\r\n filename = ['data', +new Date()].join('');\r\n }\r\n\r\n if (!type) {\r\n filename += blobData.type || '.bin';\r\n } else {\r\n filename += `.${type}`;\r\n }\r\n\r\n if (typeof window !== 'undefined' && window.navigator && window.navigator.msSaveBlob) {\r\n window.navigator.msSaveBlob(blobData, filename);\r\n } else if (typeof document !== 'undefined') {\r\n const link = document.createElement('a');\r\n link.download = filename;\r\n link.innerHTML = 'download';\r\n link.href = window.URL.createObjectURL(blobData);\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n}\r\n\r\nfunction copySubArrays(src, dst, indices, itemSize) {\r\n for (let i = 0, n = indices.length; i < n; ++i) {\r\n for (let j = 0; j < itemSize; ++j) {\r\n dst[i * itemSize + j] = src[indices[i] * itemSize + j];\r\n }\r\n }\r\n}\r\n\r\nfunction shallowCloneNode(node) {\r\n const newNode = node.cloneNode(true);\r\n newNode.worldPos = node.worldPos;\r\n // .style property is readonly, so \"newNode.style = node.style;\" won't work (and we don't need it, right?)\r\n return newNode;\r\n}\r\n\r\nconst unquotedStringRE = /^[a-zA-Z0-9_]*$/;\r\nconst enquoteHelper = ['\"', '', '\"'];\r\n\r\n// verify and correct if needed selctor identifier\r\nfunction correctSelectorIdentifier(value) {\r\n if (unquotedStringRE.test(value)) {\r\n return value;\r\n }\r\n // quote incorrect identifier\r\n enquoteHelper[1] = value;\r\n return enquoteHelper.join('');\r\n}\r\n\r\n/**\r\n * Concatenates two TypedArray. Doesn't check null refs o type equality\r\n * Attention! It must be use very rarely because requires memory reallocation every time. Use MergeTypedArraysUnsafe to\r\n * unite array of subarrays.\r\n * @param{TypedArray} first - destination array\r\n * @param{TypedArray} second - source array\r\n * @returns{TypedArray} resulting concatenated array\r\n */\r\nfunction concatTypedArraysUnsafe(first, second) {\r\n const result = new first.constructor(first.length + second.length);\r\n result.set(first);\r\n result.set(second, first.length);\r\n return result;\r\n}\r\n\r\n/**\r\n * Merges array of TypedArray into TypedArray. Doesn't check null refs o type equality\r\n * @param{array} array - source array of subarrays\r\n * @returns{TypedArray} resulting merged array\r\n */\r\nfunction mergeTypedArraysUnsafe(array) {\r\n if (array.length <= 0) {\r\n return null;\r\n }\r\n // count the size\r\n const size = array.reduce((acc, cur) => acc + cur.length, 0);\r\n // create combined array\r\n const result = new array[0].constructor(size);\r\n for (let i = 0, start = 0; i < array.length; i++) {\r\n const count = array[i].length;\r\n result.set(array[i], start);\r\n start += count;\r\n }\r\n return result;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Exports\r\n\r\nexport default {\r\n browserType,\r\n encodeQueryComponent,\r\n decodeQueryComponent,\r\n getUrlParameters,\r\n getUrlParametersAsDict,\r\n resolveURL,\r\n generateRegExp,\r\n createElement,\r\n deriveClass,\r\n deriveDeep,\r\n hexColor,\r\n DebugTracer,\r\n OutOfMemoryError,\r\n allocateTyped,\r\n bytesFromBase64,\r\n bytesToBase64,\r\n arrayFromBase64,\r\n arrayToBase64,\r\n compareOptionsWithDefaults,\r\n objectsDiff,\r\n forInRecursive,\r\n enquoteString,\r\n unquoteString,\r\n getBrowser,\r\n shotOpen,\r\n shotDownload,\r\n copySubArrays,\r\n shallowCloneNode,\r\n correctSelectorIdentifier,\r\n getFileExtension,\r\n splitFileName,\r\n download,\r\n concatTypedArraysUnsafe,\r\n mergeTypedArraysUnsafe,\r\n};\r\n","import EventDispatcher from './EventDispatcher';\r\n\r\nexport default class JobHandle extends EventDispatcher {\r\n constructor() {\r\n super();\r\n this._shouldCancel = false;\r\n }\r\n\r\n cancel() {\r\n this._shouldCancel = true;\r\n this.dispatchEvent({ type: 'cancel' });\r\n }\r\n\r\n shouldCancel() {\r\n return this._shouldCancel;\r\n }\r\n\r\n // slaves use this to notify master about their events\r\n // master routes these notifications to a single event slot\r\n notify(event) {\r\n this.dispatchEvent({ type: 'notification', slaveEvent: event });\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport utils from './utils';\r\nimport EventDispatcher from './utils/EventDispatcher';\r\n\r\nconst VERSION = 0;\r\n\r\n//----------------------------------------------------------------------------\r\n// DEFAULT SETTINGS\r\n//----------------------------------------------------------------------------\r\n\r\n/**\r\n * Polygonal complexity settings.\r\n *\r\n * @typedef PolyComplexity\r\n * @property {number} poor\r\n * @property {number} low\r\n * @property {number} medium\r\n * @property {number} high\r\n * @property {number} ultra\r\n */\r\n\r\n/**\r\n * @alias SettingsObject\r\n * @namespace\r\n */\r\nconst defaults = {\r\n /**\r\n * Default options for all available modes.\r\n * Use {@link Mode.id} as a dictionary key to access mode options.\r\n *\r\n * Usually you don't need to override these settings. You may specify mode options as a parameter during\r\n * {@link Mode} construction.\r\n *\r\n * @memberof SettingsObject#\r\n * @type {Object.}\r\n *\r\n * @property {LinesModeOptions} LN - Lines mode options.\r\n * @property {LicoriceModeOptions} LC - Licorice mode options.\r\n * @property {BallsAndSticksModeOptions} BS - Balls and Sticks mode options.\r\n * @property {VanDerWaalsModeOptions} VW - Van der Waals mode options.\r\n * @property {TraceModeOptions} TR - Trace mode options.\r\n * @property {TubeModeOptions} TU - Tube mode options.\r\n * @property {CartoonModeOptions} CA - Cartoon mode options.\r\n * @property {QuickSurfaceModeOptions} QS - Contact Surface mode options.\r\n * @property {IsoSurfaceSASModeOptions} SA - Solvent Accessible Surface mode options.\r\n * @property {IsoSurfaceSESModeOptions} SE - Solvent Excluded Surface mode options.\r\n * @property {ContactSurfaceModeOptions} CS - Contact Surface mode options.\r\n * @property {TextModeOptions} TX - Text mode options.\r\n * @property {VolumeDensityModeOptions} VD - Volume Density mode options.\r\n */\r\n modes: {\r\n //----------------------------------------------------------------------------\r\n // BALLS AND STICKS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Balls and Sticks mode options.\r\n *\r\n * @typedef BallsAndSticksModeOptions\r\n *\r\n * @property {number} atom - Sphere radius as a fraction of Van der Waals atom radius.\r\n * @property {number} bond - Cylinder radius in angstroms.\r\n * @property {number} space - Fraction of the space around one cylinder. Zero means that cylinder fills all\r\n * available space.\r\n * @property {boolean} multibond - Toggles rendering of multiple ordered bonds.\r\n * @property {number} aromrad - Minor radius of a torus for aromatic loops.\r\n * @property {boolean} showarom - Toggles rendering of aromatic loops.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n BS: {\r\n atom: 0.23,\r\n bond: 0.15,\r\n space: 0.5,\r\n multibond: true,\r\n aromrad: 0.1,\r\n showarom: true,\r\n polyComplexity: {\r\n poor: 3,\r\n low: 4,\r\n medium: 6,\r\n high: 12,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // VAN DER WAALS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Van der Waals mode options.\r\n *\r\n * @typedef VanDerWaalsModeOptions\r\n *\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n VW: {\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 8,\r\n high: 16,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // LINES\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Lines mode options.\r\n *\r\n * @typedef LinesModeOptions\r\n *\r\n * @property {boolean} multibond - Flag, that toggles rendering of multiple ordered bonds.\r\n * @property {boolean} showarom - Flag, that toggles rendering of aromatic loops.\r\n * @property {number} offsarom - Offset between bonds and aromatic cycle.\r\n * @property {number} chunkarom - Number of pieces in a-loop arc, corresponding to atom.\r\n * @property {number} atom - Collision radius for atoms picking.\r\n * @property {number} lineWidth - Line width in pixels (not used in thin lines).\r\n */\r\n LN: {\r\n multibond: true,\r\n showarom: true,\r\n offsarom: 0.2,\r\n chunkarom: 10,\r\n atom: 0.23,\r\n lineWidth: 2,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // LICORICE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Licorice mode options.\r\n *\r\n * @typedef LicoriceModeOptions\r\n *\r\n * @property {number} bond - Bond cylinder radius.\r\n * @property {number} space - Fraction of the space around one cylinder. Zero means that cylinder fills all\r\n * available space.\r\n * @property {boolean} multibond - Flag, that toggles rendering of multiple ordered bonds.\r\n * @property {number} aromrad - Minor radius of a torus for aromatic loops.\r\n * @property {boolean} showarom - Flag, that toggles rendering of aromatic loops.\r\n * @property {PolyComplexity} polyComplexity - Poly complexity values for render modes.\r\n */\r\n LC: {\r\n bond: 0.20,\r\n space: 0.0,\r\n multibond: true,\r\n aromrad: 0.1,\r\n showarom: true,\r\n polyComplexity: {\r\n poor: 3,\r\n low: 4,\r\n medium: 6,\r\n high: 12,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // SURFACE SAS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Solvent Accessible Surface mode options.\r\n *\r\n * @typedef IsoSurfaceSASModeOptions\r\n *\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {number} probeRadius - Radius of the probe.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n SA: {\r\n zClip: false,\r\n probeRadius: 1.5,\r\n subset: '',\r\n wireframe: false,\r\n polyComplexity: {\r\n poor: 6,\r\n low: 8,\r\n medium: 16,\r\n high: 30,\r\n ultra: 60,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // SURFACE SES\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Solvent Excluded Surface mode options.\r\n *\r\n * @typedef IsoSurfaceSESModeOptions\r\n *\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {number} probeRadius - Radius of the probe.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n SE: {\r\n zClip: false,\r\n probeRadius: 1.5,\r\n subset: '',\r\n wireframe: false,\r\n polyComplexity: {\r\n poor: 6,\r\n low: 8,\r\n medium: 16,\r\n high: 30,\r\n ultra: 60,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // QUICK SURFACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Quick Surface mode options.\r\n *\r\n * @typedef QuickSurfaceModeOptions\r\n *\r\n * @property {number} isoValue - Isovalue of the surface to extract.\r\n * @property {number} scale - Radius scale for the surface being built.\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} gaussLim - Gauss lim for coloring the bigger the value, the smoother our colors are.\r\n * @property {PolyComplexity} gridSpacing - Poly complexity values for render modes. In this case the value\r\n * corresponds to the grid density.\r\n */\r\n QS: {\r\n isoValue: 0.5,\r\n gaussLim: {\r\n poor: 1.5,\r\n low: 2.0,\r\n medium: 2.5,\r\n high: 3.0,\r\n ultra: 4.0,\r\n },\r\n scale: 1.0,\r\n wireframe: false,\r\n gridSpacing: {\r\n poor: 2,\r\n low: 1.5,\r\n medium: 1,\r\n high: 0.5,\r\n ultra: 0.25,\r\n },\r\n subset: '',\r\n zClip: false,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // CONTACT SURFACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Contact Surface mode options.\r\n *\r\n * @typedef ContactSurfaceModeOptions\r\n *\r\n * @property {number} isoValue - Isovalue of the surface to extract.\r\n * @property {number} probeRadius - Probe radius.\r\n * @property {number} probePositions\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Radius scale for the surface being built.\r\n * Poly complexity values for render modes. In this case the value corresponds to the grid density.\r\n */\r\n CS: {\r\n probeRadius: 1.4,\r\n isoValue: 1.5,\r\n wireframe: false,\r\n probePositions: 30,\r\n polyComplexity: {\r\n poor: 0.5,\r\n low: 1.0,\r\n medium: 1.5,\r\n high: 1.75,\r\n ultra: 2.0,\r\n },\r\n subset: '',\r\n zClip: false,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TRACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Trace mode options.\r\n *\r\n * @typedef TraceModeOptions\r\n *\r\n * @property {number} radius - Cylinder radius.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n TR: {\r\n radius: 0.30,\r\n polyComplexity: {\r\n poor: 12,\r\n low: 16,\r\n medium: 32,\r\n high: 64,\r\n ultra: 64,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TUBE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Tube mode options.\r\n *\r\n * @typedef TubeModeOptions\r\n *\r\n * @property {number} radius - Cylinder radius.\r\n * @property {number} tension - Tension for interpolation.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n * @property {number} heightSegmentsRatio - Poly complexity multiplier for height segments.\r\n */\r\n TU: {\r\n radius: 0.30,\r\n heightSegmentsRatio: 1.5,\r\n tension: -0.7,\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 10,\r\n high: 18,\r\n ultra: 34,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // CARTOON\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Cartoon mode options.\r\n *\r\n * @typedef CartoonModeOptions\r\n *\r\n * @property {number} radius - Standard tube radius.\r\n * @property {number} depth - Height of the secondary structure ribbon.\r\n * @property {number} tension - Tension for interpolation.\r\n * @proprety {object} ss - Secondary structure parameters.\r\n * @proprety {object} ss.helix - Options for helices render.\r\n * @proprety {number} ss.helix.width - Width of the secondary structure ribbon.\r\n * @proprety {number} ss.helix.arrow - Secondary structure's arrow width.\r\n * @proprety {object} ss.strand - Options for strands render.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n * polyComplexity must be even for producing symmetric arrows.\r\n * @property {number} heightSegmentsRatio - Poly complexity multiplier for height segments.\r\n */\r\n CA: {\r\n radius: 0.30,\r\n depth: 0.25,\r\n ss: {\r\n helix: {\r\n width: 1.0,\r\n arrow: 2.0,\r\n },\r\n strand: {\r\n width: 1.0,\r\n arrow: 2.0,\r\n },\r\n },\r\n heightSegmentsRatio: 1.5,\r\n tension: -0.7,\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 10,\r\n high: 18,\r\n ultra: 34,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TEXT\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Text mode options.\r\n *\r\n * @typedef TextModeOptions\r\n *\r\n * @property {string} template - Format string for building output text.\r\n * @property {string} horizontalAlign - Text alignment ('left', 'right', 'center').\r\n * @property {string} verticalAlign - Vertical text box alignment ('top', 'bottom', 'middle').\r\n * @property {number} dx - Text offset x in angstroms.\r\n * @property {number} dy - Text offset y in angstroms.\r\n * @property {number} dz - Text offset z in angstroms.\r\n * @property {string} fg - Color rule for foreground.\r\n * @property {string} bg - Color rule for background.\r\n * @property {boolean} showBg - Flag, that toggles background rendering.\r\n *\r\n */\r\n TX: {\r\n template: '{{Chain}}.{{Residue}}{{Sequence}}.{{Name}}',\r\n horizontalAlign: 'center',\r\n verticalAlign: 'middle',\r\n dx: 0,\r\n dy: 0,\r\n dz: 1,\r\n fg: 'none',\r\n bg: '0x202020',\r\n showBg: true,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // VOLUME DENSITY\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Volume density mode options.\r\n *\r\n * @typedef VolumeDensityModeOptions\r\n *\r\n * @property {number} kSigma - Noise threshold coefficient.\r\n * @property {boolean} frame - flag, that turns on box frame painting.\r\n * @property {boolean} isoMode - flag, that turns on IsoSurface mode instead of Volume Rendering.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n VD: {\r\n kSigma: 1.0,\r\n kSigmaMed: 2.0,\r\n kSigmaMax: 4.0,\r\n frame: true,\r\n isoMode: false,\r\n polyComplexity: {\r\n poor: 2,\r\n low: 3,\r\n medium: 4,\r\n high: 8,\r\n ultra: 10,\r\n },\r\n },\r\n },\r\n\r\n /**\r\n * Default options for all available colorers.\r\n * Use {@link Colorer.id} as a dictionary key to access colorer options.\r\n *\r\n * Usually you don't need to override these settings. You may specify colorer options as a parameter during\r\n * {@link Colorer} construction.\r\n *\r\n * Not all colorers have options.\r\n *\r\n * @memberof SettingsObject#\r\n * @type {Object.}\r\n *\r\n * @property {ElementColorerOptions} EL - Element colorer options.\r\n * @property {SequenceColorerOptions} SQ - Sequence colorer options.\r\n * @property {MoleculeColorerOptions} MO - Molecule colorer options.\r\n * @property {UniformColorerOptions} UN - Uniform colorer options.\r\n * @property {ConditionalColorerOptions} CO - Conditional colorer options.\r\n * @property {TemperatureColorerOptions} TM - Temperature colorer options.\r\n * @property {OccupancyColorerOptions} OC - Occupancy colorer options.\r\n * @property {HydrophobicityColorerOptions} HY - Hydrophobicity colorer options.\r\n */\r\n colorers: {\r\n /**\r\n * Element colorer options.\r\n *\r\n * @typedef ElementColorerOptions\r\n *\r\n * @property {number} carbon - Carbon color or -1 to use default.\r\n */\r\n EL: {\r\n carbon: -1,\r\n },\r\n\r\n /**\r\n * Uniform colorer options.\r\n *\r\n * @typedef UniformColorerOptions\r\n *\r\n * @property {number} color - Single color to paint with.\r\n */\r\n UN: {\r\n color: 0xFFFFFF,\r\n },\r\n\r\n /**\r\n * Conditional colorer options.\r\n *\r\n * @typedef ConditionalColorerOptions\r\n *\r\n * @property {string} subset - Selector string.\r\n * @property {number} color - Color of selected atoms.\r\n * @property {number} baseColor - Color of other atoms.\r\n */\r\n CO: {\r\n subset: 'charged',\r\n color: 0xFF0000,\r\n baseColor: 0xFFFFFF,\r\n },\r\n\r\n /**\r\n * Carbon colorer options.\r\n *\r\n * @typedef CarbonColorerOptions\r\n *\r\n * @property {number} color - Single color to paint carbons\r\n * @property {number} factor - Color factor for not carbon atoms.\r\n */\r\n CB: {\r\n color: 0x909090,\r\n factor: 0.6,\r\n },\r\n\r\n /**\r\n * Sequence colorer options.\r\n *\r\n * @typedef SequenceColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n SQ: {\r\n gradient: 'rainbow',\r\n },\r\n\r\n /**\r\n * Temperature colorer options.\r\n *\r\n * @typedef TemperatureColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n * @property {number} min - Minimal temperature.\r\n * @property {number} max - Maximal temperature.\r\n */\r\n TM: {\r\n gradient: 'temp',\r\n min: 5,\r\n max: 40,\r\n },\r\n\r\n /**\r\n * Occupancy colorer options.\r\n *\r\n * @typedef OccupancyColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n OC: {\r\n gradient: 'reds',\r\n },\r\n\r\n /**\r\n * Hydrophobicity colorer options.\r\n *\r\n * @typedef HydrophobicityColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n HY: {\r\n gradient: 'blue-red',\r\n },\r\n\r\n /**\r\n * Molecule colorer options.\r\n *\r\n * @typedef MoleculeColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n MO: {\r\n gradient: 'rainbow',\r\n },\r\n },\r\n\r\n /*\r\n * Use antialiasing in WebGL.\r\n * @type {boolean}\r\n */\r\n antialias: true,\r\n\r\n /*\r\n * Camera field of view in degrees.\r\n * @type {number}\r\n */\r\n camFov: 45.0,\r\n\r\n /*\r\n * Camera near plane distance.\r\n * @type {number}\r\n */\r\n camNear: 0.5,\r\n\r\n /*\r\n * Camera far plane distance.\r\n * @type {number}\r\n */\r\n camFar: 100.0,\r\n\r\n camDistance: 2.5,\r\n\r\n radiusToFit: 1.0,\r\n\r\n /**\r\n * @type {number}\r\n * @instance\r\n */\r\n fogNearFactor: 0.5, // [0, 1]\r\n\r\n /**\r\n * @type {number}\r\n * @instance\r\n */\r\n fogFarFactor: 1, // [0, 1]\r\n fogAlpha: 1.0,\r\n fogColor: 0x000000,\r\n fogColorEnable: false,\r\n\r\n /**\r\n * Palette used for molecule coloring.\r\n * @type {string}\r\n */\r\n palette: 'JM',\r\n\r\n /*\r\n * Geometry resolution.\r\n * @type {string}\r\n */\r\n resolution: 'medium',\r\n\r\n autoResolution: false/* true */,\r\n\r\n autoPreset: true,\r\n\r\n preset: 'default', // TODO: remove 'preset' from settings, implement autodetection\r\n\r\n presets: {\r\n // Default\r\n default: [{\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n empty: [],\r\n\r\n // Wireframe\r\n wire: [{\r\n mode: 'LN',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n // Small molecules\r\n small: [{\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n // Proteins, nucleic acids etc.\r\n macro: [{\r\n mode: 'CA',\r\n colorer: 'SS',\r\n selector: 'not hetatm',\r\n material: 'SF',\r\n }, {\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'hetatm and not water',\r\n material: 'SF',\r\n }],\r\n },\r\n\r\n objects: {\r\n line: {\r\n color: 0xFFFFFFFF,\r\n dashSize: 0.3,\r\n gapSize: 0.05,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n\r\n bg: {\r\n color: 0x202020,\r\n transparent: false,\r\n },\r\n\r\n draft: {\r\n clipPlane: false,\r\n clipPlaneFactor: 0.5,\r\n clipPlaneSpeed: 0.00003,\r\n },\r\n\r\n /*\r\n * Separate group for plugins.\r\n * Each plugin handles its field by itself.\r\n */\r\n plugins: {\r\n\r\n },\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n axes: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fog: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fps: true,\r\n\r\n /**\r\n * Switch using of z-sprites for sphere and cylinder geometry\r\n * @type {boolean}\r\n * @instance\r\n */\r\n zSprites: true,\r\n\r\n isoSurfaceFakeOpacity: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n suspendRender: true,\r\n\r\n nowater: false,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n autobuild: true,\r\n\r\n /**\r\n * Anti-aliasing.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fxaa: true,\r\n /**\r\n * Outline depths\r\n * @type {boolean}\r\n * @instance\r\n */\r\n outline: {\r\n on: false,\r\n color: 0x000000,\r\n threshold: 0.1,\r\n thickness: 1,\r\n },\r\n\r\n /**\r\n * Ambient Occlusion special effect.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n ao: false,\r\n\r\n /**\r\n * Shadows options.\r\n *\r\n * @property {boolean} shadowMap - enable/disable.\r\n * @property {string} basic/percentage-closer filtering/non-uniform randomizing pcf.\r\n * @property {number} radius for percentage-closer filtering.\r\n */\r\n shadow: {\r\n on: false,\r\n type: 'random'/* basic, pcf, random */,\r\n radius: 1.0,\r\n },\r\n\r\n /**\r\n * Auto-rotation with constant speed.\r\n * @type {number}\r\n * @instance\r\n */\r\n autoRotation: 0.0,\r\n\r\n /**\r\n * Set maximum fps for animation.\r\n * @type {number}\r\n * @instance\r\n */\r\n maxfps: 30,\r\n\r\n /**\r\n * Set fbx output precision.\r\n * @type {number}\r\n * @instance\r\n */\r\n fbxprec: 4,\r\n\r\n /**\r\n * Auto-rotation axis.\r\n *\r\n * - true: complex auto-rotation is about vertical axis\r\n * - false: rotation axis is defined by last user rotation\r\n *\r\n * @type {boolean}\r\n * @instance\r\n */\r\n autoRotationAxisFixed: true,\r\n\r\n /**\r\n * Enable zooming with mouse wheel or pinch gesture.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n zooming: true,\r\n\r\n /**\r\n * Enable picking atoms & residues with left mouse button or touch.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n picking: true,\r\n\r\n /**\r\n * Set picking mode ('atom', 'residue', 'chain', 'molecule').\r\n * @type {string}\r\n * @instance\r\n */\r\n pick: 'atom',\r\n\r\n /**\r\n * Make \"component\" and \"fragment\" editing modes available.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n editing: false,\r\n\r\n /**\r\n * Detect aromatic loops.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n aromatic: false,\r\n\r\n /**\r\n * Load only one biological unit from all those described in PDB file.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n singleUnit: true,\r\n\r\n /**\r\n * Set stereo mode ('NONE', 'SIMPLE', 'DISTORTED', 'ANAGLYPH', 'WEBVR').\r\n * @type {string}\r\n * @instance\r\n */\r\n stereo: 'NONE',\r\n\r\n /**\r\n * Enable smooth transition between views\r\n * @type {boolean}\r\n * @instance\r\n */\r\n interpolateViews: true,\r\n\r\n /**\r\n * Set transparency mode ('standard', 'prepass').\r\n * @type {string}\r\n * @instance\r\n */\r\n transparency: 'prepass',\r\n\r\n /**\r\n * Mouse translation speed.\r\n * @type {number}\r\n * @instance\r\n */\r\n translationSpeed: 2,\r\n\r\n debug: {\r\n example: 3.5,\r\n text: 'hello!',\r\n good: true,\r\n ssaoKernelRadius: 0.7,\r\n ssaoFactor: 0.7,\r\n stereoBarrel: 0.25,\r\n },\r\n use: {\r\n multiFile: false,\r\n },\r\n};\r\n\r\n//----------------------------------------------------------------------------\r\n// SETTINGS CLASS\r\n//----------------------------------------------------------------------------\r\n\r\nfunction Settings() {\r\n EventDispatcher.call(this);\r\n\r\n this.old = null;\r\n this.now = {};\r\n this._changed = {};\r\n\r\n this.reset();\r\n}\r\n\r\nutils.deriveClass(Settings, EventDispatcher, {\r\n defaults,\r\n\r\n set(path, value) {\r\n if (_.isString(path)) {\r\n const oldValue = _.get(this.now, path);\r\n if (oldValue !== value) {\r\n _.set(this.now, path, value);\r\n this._notifyChange(path, value);\r\n }\r\n } else {\r\n const diff = utils.objectsDiff(path, this.now);\r\n if (!_.isEmpty(diff)) {\r\n _.merge(this.now, diff);\r\n this._notifyChanges(diff);\r\n }\r\n }\r\n },\r\n\r\n get(path, defaultValue) {\r\n return _.get(this.now, path, defaultValue);\r\n },\r\n\r\n reset() {\r\n const diff = utils.objectsDiff(defaults, this.now);\r\n this.now = _.cloneDeep(defaults);\r\n this.old = null;\r\n this._notifyChanges(diff);\r\n this._changed = {};\r\n },\r\n\r\n checkpoint() {\r\n this.old = _.cloneDeep(this.now);\r\n this._changed = {};\r\n },\r\n\r\n _notifyChange(path, value) {\r\n this._changed[path] = true;\r\n this.dispatchEvent({ type: `change:${path}`, value });\r\n },\r\n\r\n _notifyChanges(diff) {\r\n utils.forInRecursive(diff, (deepValue, deepPath) => {\r\n this._notifyChange(deepPath, deepValue);\r\n });\r\n },\r\n\r\n changed() {\r\n if (!this.old) {\r\n return [];\r\n }\r\n const { old, now } = this;\r\n const keys = _.filter(Object.keys(this._changed), (key) => _.get(old, key) !== _.get(now, key));\r\n return keys;\r\n },\r\n\r\n applyDiffs(diffs) {\r\n if (diffs.hasOwnProperty('VERSION') && diffs.VERSION !== VERSION) {\r\n throw new Error('Settings version does not match!');\r\n }\r\n // VERSION shouldn't be presented inside settings structure\r\n delete diffs.VERSION;\r\n this.reset();\r\n this.set(diffs);\r\n },\r\n\r\n getDiffs(versioned) {\r\n const diffs = utils.objectsDiff(this.now, defaults);\r\n if (versioned) {\r\n diffs.VERSION = VERSION;\r\n }\r\n return diffs;\r\n },\r\n\r\n setPluginOpts(plugin, opts) {\r\n defaults.plugins[plugin] = _.cloneDeep(opts);\r\n this.now.plugins[plugin] = _.cloneDeep(opts);\r\n },\r\n});\r\n\r\nexport default new Settings();\r\n","import _ from 'lodash';\r\nimport settings from './settings';\r\nimport utils from './utils';\r\nimport logger from './utils/logger';\r\n\r\nlet repIndex = 0;\r\n\r\nfunction asBoolean(value) {\r\n return !(!value || value === '0' || (_.isString(value) && value.toLowerCase() === 'false'));\r\n}\r\n\r\nconst adapters = {\r\n string: String,\r\n number: Number,\r\n boolean: asBoolean,\r\n};\r\n\r\n// Level 1 assignment symbol\r\nconst cL1Ass = '=';\r\n\r\nconst cOptsSep = '!';\r\n// Level 2 (options) assignment symbol\r\nconst cL2Ass = ':';\r\n// Level 2 (options) separator symbol\r\nconst cLSep = ',';\r\n\r\nconst cCommonIgnoreSymbols = '$;@/?';\r\n/**\r\n * We may (and should) leave as is for better readability:\r\n *\r\n * $ , ; : @ / ?\r\n */\r\n/**\r\n * Generate regular expression for symbols excluded for first level encryption\r\n */\r\nfunction getLevel1ExcludedExpr() {\r\n const cLevel1Ignores = ':,';\r\n return utils.generateRegExp(cCommonIgnoreSymbols + cLevel1Ignores);\r\n}\r\n\r\n/**\r\n * Generate regular expression for symbols excluded for first level encryption\r\n * (options, etc, ..)\r\n */\r\nfunction getLevel2ExcludedExpr() {\r\n const cLevel2Ignores = ' ';\r\n return utils.generateRegExp(cCommonIgnoreSymbols + cLevel2Ignores);\r\n}\r\n\r\nconst cL1ExclExpr = getLevel1ExcludedExpr();\r\nfunction encodeQueryComponentL1(value) {\r\n return utils.encodeQueryComponent(value, cL1ExclExpr);\r\n}\r\n\r\nconst cL2ExclExpr = getLevel2ExcludedExpr();\r\nfunction encodeQueryComponentL2(value) {\r\n return utils.encodeQueryComponent(value, cL2ExclExpr);\r\n}\r\n\r\nfunction ensureRepList(opts) {\r\n let { reps } = opts;\r\n if (!reps) {\r\n const { presets } = settings.now;\r\n let preset = opts.preset || settings.now.preset;\r\n reps = presets[preset];\r\n if (!reps) {\r\n logger.warn(`Unknown preset \"${preset}\"`);\r\n [preset] = Object.keys(presets);\r\n reps = presets[preset]; // fall back to any preset\r\n }\r\n opts.preset = preset;\r\n opts.reps = utils.deriveDeep(reps, true);\r\n }\r\n}\r\n\r\nfunction ensureRepAssign(opts, prop, value) {\r\n ensureRepList(opts);\r\n const rep = opts.reps[repIndex];\r\n // prop specified twice therefore start new rep by cloning the current\r\n if (rep.hasOwnProperty(prop)) {\r\n repIndex = opts.reps.length;\r\n opts.reps[repIndex] = utils.deriveDeep(rep, true);\r\n }\r\n if (value !== undefined) {\r\n opts.reps[repIndex][prop] = value;\r\n }\r\n}\r\n\r\nfunction addObject(opts, params, options) {\r\n if (opts._objects === undefined) {\r\n opts._objects = [];\r\n }\r\n\r\n const [type, newOpts] = options;\r\n const newObj = {\r\n type,\r\n params,\r\n };\r\n\r\n if (newOpts !== undefined) {\r\n newObj.opts = newOpts;\r\n }\r\n\r\n opts._objects[opts._objects.length] = newObj;\r\n}\r\n\r\nfunction parseParams(str, params) {\r\n const sep = str.indexOf(',');\r\n if (sep >= 0) {\r\n params.push(str.substr(sep + 1).split(','));\r\n return str.substr(0, sep);\r\n }\r\n // keep this untouched if no params were extracted\r\n return str;\r\n}\r\n\r\nfunction extractArgs(input, defaultsDict, params) {\r\n if (input) {\r\n const bang = input.indexOf(cOptsSep);\r\n const inputVal = parseParams(input.substr(0, bang >= 0 ? bang : undefined), params);\r\n if (bang >= 0) {\r\n const args = input.substr(bang + 1).split(cLSep);\r\n input = inputVal;\r\n if (defaultsDict) {\r\n const defaults = defaultsDict[input];\r\n const opts = utils.deriveDeep(defaults, true);\r\n args.forEach((arg) => {\r\n const pair = arg.split(cL2Ass, 2);\r\n const key = decodeURIComponent(pair[0]);\r\n const value = decodeURIComponent(pair[1]);\r\n const adapter = adapters[typeof _.get(defaults, key)];\r\n if (adapter) {\r\n _.set(opts, key, adapter(value));\r\n } else {\r\n logger.warn(`Unknown argument \"${key}\" for option \"${input}\"`);\r\n }\r\n });\r\n if (Object.keys(opts).length > 0) {\r\n input = [input, opts];\r\n }\r\n }\r\n } else {\r\n input = inputVal;\r\n }\r\n }\r\n return input;\r\n}\r\n\r\nconst actions = {\r\n\r\n l: 'load',\r\n load: String,\r\n t: 'type',\r\n type: String,\r\n v: 'view',\r\n view: String,\r\n u: 'unit',\r\n unit: Number,\r\n menu: asBoolean,\r\n\r\n // Commands\r\n\r\n o: 'object',\r\n object(value, opts) {\r\n const params = [];\r\n let options = extractArgs(value, settings.defaults.objects, params);\r\n if (!Array.isArray(options)) {\r\n options = [options];\r\n }\r\n addObject(opts, params[0], options);\r\n },\r\n\r\n p: 'preset',\r\n preset(value, opts) {\r\n opts.preset = value;\r\n opts.reps = null;\r\n ensureRepList(opts);\r\n },\r\n\r\n r: 'rep',\r\n rep(value, opts) {\r\n ensureRepList(opts);\r\n repIndex = Number(value);\r\n // clamp the index to one greater than the last\r\n repIndex = repIndex <= opts.reps.length ? (repIndex < 0 ? 0 : repIndex) : opts.reps.length;\r\n // create a new rep if it is adjacent to the existing ones\r\n if (repIndex === opts.reps.length) {\r\n // if there is no rep to derive from, derive from the first rep of the default\r\n opts.reps[repIndex] = repIndex > 0 ? utils.deriveDeep(opts.reps[repIndex - 1], true)\r\n : utils.deriveDeep(settings.defaults.presets.default[0], true);\r\n }\r\n },\r\n\r\n s: 'select',\r\n select(value, opts) {\r\n ensureRepAssign(opts, 'selector', value);\r\n },\r\n\r\n m: 'mode',\r\n mode(value, opts) {\r\n ensureRepAssign(opts, 'mode', extractArgs(value, settings.defaults.modes));\r\n },\r\n\r\n c: 'color',\r\n color(value, opts) {\r\n ensureRepAssign(opts, 'colorer', extractArgs(value, settings.defaults.colorers));\r\n },\r\n\r\n mt: 'material',\r\n material(value, opts) {\r\n ensureRepAssign(opts, 'material', extractArgs(value, settings.defaults.materials));\r\n },\r\n\r\n dup(value, opts) {\r\n ensureRepList(opts);\r\n const { reps } = opts;\r\n const rep = reps[repIndex];\r\n repIndex = reps.length;\r\n reps[repIndex] = utils.deriveDeep(rep, true);\r\n },\r\n\r\n // Settings shortcuts\r\n\r\n ar: 'autoResolution',\r\n};\r\n\r\nfunction _fromArray(entries) {\r\n repIndex = 0;\r\n\r\n const opts = {};\r\n for (let i = 0, n = entries.length; i < n; ++i) {\r\n const /** string[] */ entry = entries[i];\r\n let /** string? */ key = entry[0];\r\n const /** string? */ value = entry[1];\r\n let /** function|string? */ action = actions[key];\r\n\r\n // unwind shortcuts and aliases\r\n while (_.isString(action)) {\r\n key = action;\r\n action = actions[key];\r\n }\r\n\r\n // either set a property or use specialized parser\r\n if (!action) {\r\n const adapter = adapters[typeof _.get(settings.defaults, key)];\r\n if (adapter) {\r\n _.set(opts, `settings.${key}`, adapter(value));\r\n } else {\r\n logger.warn(`Unknown option \"${key}\"`);\r\n }\r\n } else if (_.isFunction(action)) {\r\n const result = action(value, opts);\r\n if (result !== undefined) {\r\n opts[key] = result;\r\n }\r\n }\r\n }\r\n\r\n return opts;\r\n}\r\n\r\nfunction fromAttr(attr) {\r\n return _fromArray(utils.getUrlParameters(`?${attr || ''}`));\r\n}\r\n\r\nfunction fromURL(url) {\r\n return _fromArray(utils.getUrlParameters(url));\r\n}\r\n\r\nfunction _processOptsForURL(opts) {\r\n const str = [];\r\n let i = 0;\r\n utils.forInRecursive(opts, (value, key) => {\r\n str[i++] = encodeQueryComponentL2(key) + cL2Ass + encodeQueryComponentL2(value);\r\n });\r\n return str.join(cLSep);\r\n}\r\n\r\nfunction _processArgsForURL(args) {\r\n if (!_.isArray(args)) {\r\n return args;\r\n }\r\n if (args.length < 2) {\r\n return args[0];\r\n }\r\n return `${args[0]}${cOptsSep}${_processOptsForURL(args[1])}`;\r\n}\r\n\r\nfunction _processObjForURL(objOpts) {\r\n if (!objOpts || !objOpts.type) {\r\n return undefined;\r\n }\r\n let res = objOpts.type;\r\n if (_.isArray(objOpts.params) && objOpts.params.length > 0) {\r\n res += `,${objOpts.params.join(',')}`;\r\n }\r\n if (objOpts.opts) {\r\n res += cOptsSep + _processOptsForURL(objOpts.opts);\r\n }\r\n return res;\r\n}\r\n\r\nfunction toURL(opts) {\r\n const stringList = [];\r\n let idx = 0;\r\n\r\n function checkAndAdd(prefix, value) {\r\n if (value !== null && value !== undefined) {\r\n stringList[idx++] = encodeQueryComponentL1(prefix)\r\n + cL1Ass + encodeQueryComponentL1(value);\r\n }\r\n }\r\n\r\n function addReps(repList) {\r\n if (!repList) {\r\n return;\r\n }\r\n for (let i = 0, n = repList.length; i < n; ++i) {\r\n if (_.isEmpty(repList[i])) {\r\n continue;\r\n }\r\n checkAndAdd('r', i);\r\n checkAndAdd('s', repList[i].selector);\r\n checkAndAdd('m', _processArgsForURL(repList[i].mode));\r\n checkAndAdd('c', _processArgsForURL(repList[i].colorer));\r\n checkAndAdd('mt', _processArgsForURL(repList[i].material));\r\n }\r\n }\r\n\r\n function addObjects(objList) {\r\n if (!objList) {\r\n return;\r\n }\r\n for (let i = 0, n = objList.length; i < n; ++i) {\r\n checkAndAdd('o', _processObjForURL(objList[i]));\r\n }\r\n }\r\n\r\n checkAndAdd('l', opts.load);\r\n checkAndAdd('u', opts.unit);\r\n checkAndAdd('p', opts.preset);\r\n addReps(opts.reps);\r\n addObjects(opts._objects);\r\n\r\n checkAndAdd('v', opts.view);\r\n\r\n utils.forInRecursive(opts.settings, (value, key) => {\r\n // I heard these lines in the whispers of the Gods\r\n // Handle preset setting in reps\r\n if (key === 'preset') {\r\n return;\r\n }\r\n checkAndAdd(key, value);\r\n });\r\n\r\n let url = '';\r\n if (typeof window !== 'undefined') {\r\n const { location } = window;\r\n url = `${location.protocol}//${location.host}${location.pathname}`;\r\n }\r\n if (stringList.length > 0) {\r\n url += `?${stringList.join('&')}`;\r\n }\r\n\r\n return url;\r\n}\r\n\r\nfunction _processOptsForScript(opts) {\r\n const str = [];\r\n let i = 0;\r\n utils.forInRecursive(opts, (value, key) => {\r\n str[i++] = `${key}=${utils.enquoteString(value)}`;\r\n });\r\n return str.join(' ');\r\n}\r\n\r\nfunction _processArgsForScript(args) {\r\n if (!_.isArray(args)) {\r\n return args;\r\n }\r\n if (args.length < 2) {\r\n return args[0];\r\n }\r\n return `${args[0]} ${_processOptsForScript(args[1])}`;\r\n}\r\n\r\nfunction _processObjForScript(objOpts) {\r\n if (!objOpts || !objOpts.type) {\r\n return undefined;\r\n }\r\n let res = objOpts.type;\r\n if (_.isArray(objOpts.params) && objOpts.params.length > 0) {\r\n res += ` ${objOpts.params.map(utils.enquoteString).join(' ')}`;\r\n }\r\n if (objOpts.opts) {\r\n res += ` ${_processOptsForScript(objOpts.opts)}`;\r\n }\r\n return res;\r\n}\r\n\r\nfunction _processRepsForScript(rep, index) {\r\n const repString = [];\r\n let strIdx = 0;\r\n function localAdd(prefix, value) {\r\n if (value !== null && value !== undefined) {\r\n repString[strIdx++] = prefix + value;\r\n }\r\n }\r\n if (_.isEmpty(rep)) {\r\n return null;\r\n }\r\n localAdd('', index);\r\n localAdd('s=', utils.enquoteString(rep.selector));\r\n localAdd('m=', _processArgsForScript(rep.mode));\r\n localAdd('c=', _processArgsForScript(rep.colorer));\r\n localAdd('mt=', _processArgsForScript(rep.material));\r\n return repString.join(' ');\r\n}\r\n\r\nfunction toScript(opts) {\r\n const commandsList = [];\r\n let idx = 0;\r\n function checkAndAdd(command, value, saveQuotes) {\r\n if (value !== null && value !== undefined) {\r\n const quote = (typeof value === 'string' && saveQuotes) ? '\"' : '';\r\n commandsList[idx++] = `${command} ${quote}${value}${quote}`.trim();\r\n }\r\n }\r\n\r\n function addReps(repList) {\r\n if (!repList) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = repList.length; i < n; ++i) {\r\n checkAndAdd('rep', _processRepsForScript(repList[i], i));\r\n }\r\n }\r\n\r\n function addObjects(objList) {\r\n if (!objList) {\r\n return;\r\n }\r\n for (let i = 0, n = objList.length; i < n; ++i) {\r\n checkAndAdd('', _processObjForScript(objList[i]));\r\n }\r\n }\r\n\r\n checkAndAdd('set', 'autobuild false');\r\n checkAndAdd('load', opts.load, true);\r\n checkAndAdd('unit', opts.unit);\r\n checkAndAdd('preset', opts.preset);\r\n addReps(opts.reps);\r\n addObjects(opts._objects);\r\n\r\n utils.forInRecursive(opts.settings, (value, key) => {\r\n // I heard these lines in the whispers of the Gods\r\n // Handle preset setting in reps\r\n if (key === 'preset') {\r\n return;\r\n }\r\n checkAndAdd(`set ${key}`, value, true);\r\n });\r\n checkAndAdd('view', opts.view);\r\n checkAndAdd('set', 'autobuild true');\r\n return commandsList.join('\\n');\r\n}\r\n\r\nexport default {\r\n fromURL,\r\n fromAttr,\r\n adapters,\r\n toURL,\r\n toScript,\r\n};\r\n","/**\r\n * Atom measurements.\r\n *\r\n * @param {Residue} residue - (required) Residue containing the atom\r\n * @param {string} name - (required) Name, unique in the residue\r\n * @param {Element} type - (required) Chemical element reference\r\n * @param {THREE.Vector3} position - Registered coordinates\r\n *\r\n * @param {number} role - Role of atom inside monomer: Lead and wing are particularity interesting\r\n * @param {boolean} het - Non-standard residue indicator\r\n *\r\n * @param {number} serial - Serial number, unique in the model\r\n * @param {string} location - Alternative location indicator (usually space or A-Z)\r\n * @param {number} occupancy - Occupancy percentage, from 0 to 1\r\n * @param {number} temperature - Temperature\r\n * @param {number} charge - Charge\r\n *\r\n * @exports Atom\r\n * @constructor\r\n */\r\n\r\nclass Atom {\r\n constructor(residue, name, type, position, role, het, serial, location, occupancy, temperature, charge) {\r\n this.index = -1;\r\n this.residue = residue;\r\n this.name = name;\r\n this.element = type;\r\n this.position = position;\r\n this.role = role;\r\n this.mask = 1 | 0;\r\n\r\n this.het = het;\r\n\r\n this.serial = serial;\r\n this.location = (location || ' ').charCodeAt(0);\r\n this.occupancy = occupancy || 1;\r\n this.temperature = temperature;\r\n this.charge = charge;\r\n this.hydrogenCount = -1; // explicitly invalid\r\n this.radicalCount = 0;\r\n this.valence = -1; // explicitly invalid\r\n\r\n this.bonds = [];\r\n\r\n this.flags = 0x0000;\r\n if (type.name === 'H') {\r\n this.flags |= Atom.Flags.HYDROGEN;\r\n } else if (type.name === 'C') {\r\n this.flags |= Atom.Flags.CARBON;\r\n }\r\n }\r\n\r\n isHet() {\r\n return this.het;\r\n }\r\n\r\n isHydrogen() {\r\n return this.element.number === 1;\r\n }\r\n\r\n getVisualName() {\r\n const { name } = this;\r\n if (name.length > 0) {\r\n return name;\r\n }\r\n return this.element.name.trim();\r\n }\r\n\r\n forEachBond(process) {\r\n const { bonds } = this;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]);\r\n }\r\n }\r\n\r\n getFullName() {\r\n let name = '';\r\n if (this.residue !== null) {\r\n if (this.residue._chain !== null) {\r\n name += `${this.residue._chain.getName()}.`;\r\n }\r\n name += `${this.residue._sequence}.`;\r\n }\r\n name += this.name;\r\n return name;\r\n }\r\n\r\n /**\r\n * Enumeration of atom flag values.\r\n *\r\n * @enum {number}\r\n * @readonly\r\n */\r\n static Flags = {\r\n CARBON: 0x0001,\r\n // OXYGEN: 0x0002,\r\n // NITROGEN: 0x0004,\r\n HYDROGEN: 0x0008,\r\n /** Non-polar hydrogen (it is also a HYDROGEN) */\r\n NONPOLARH: 0x1008,\r\n };\r\n}\r\n\r\nexport default Atom;\r\n","class Element {\r\n constructor(number, name, fullName, weight, radius, radiusBonding, hValency) {\r\n this.number = number;\r\n this.name = name;\r\n this.fullName = fullName;\r\n this.weight = weight;\r\n this.radius = radius;\r\n this.radiusBonding = radiusBonding;\r\n this.hydrogenValency = hValency;\r\n }\r\n\r\n static Constants = {\r\n /* eslint-disable no-magic-numbers */\r\n U1: 1,\r\n Lead: 2,\r\n U2: 3,\r\n Wing: 4,\r\n U18: 18,\r\n /* eslint-enable no-magic-numbers */\r\n };\r\n\r\n static Role = {\r\n /* eslint-disable no-magic-numbers */\r\n N: Element.Constants.U1,\r\n CA: Element.Constants.Lead,\r\n C: Element.Constants.U2,\r\n O: Element.Constants.Wing,\r\n SG: Element.Constants.U18,\r\n /* eslint-enable no-magic-numbers */\r\n };\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\n static ByAtomicNumber = [\r\n /* eslint-disable no-magic-numbers */\r\n null,\r\n new Element(1, 'H', 'Hydrogen', 1.008, 1.2, 0.23, [1]),\r\n new Element(2, 'HE', 'Helium', 4.003, 1.4, 0.93, [0]),\r\n new Element(3, 'LI', 'Lithium', 6.941, 1.82, 0.68, [1]),\r\n new Element(4, 'BE', 'Beryllium', 9.012, 1.7, 0.35, [2]),\r\n new Element(5, 'B', 'Boron', 10.81, 2.08, 0.83, [3]),\r\n new Element(6, 'C', 'Carbon', 12.011, 1.95, 0.68, [4]),\r\n new Element(7, 'N', 'Nitrogen', 14.007, 1.85, 0.68, [3, 5]),\r\n new Element(8, 'O', 'Oxygen', 15.999, 1.7, 0.68, [2, 4]),\r\n new Element(9, 'F', 'Fluorine', 18.998, 1.73, 0.64, [1]),\r\n new Element(10, 'NE', 'Neon', 20.18, 1.54, 1.12, [0]),\r\n new Element(11, 'NA', 'Sodium', 22.99, 2.27, 0.97, [1]),\r\n new Element(12, 'MG', 'Magnesium', 24.305, 1.73, 1.1, [2]),\r\n new Element(13, 'AL', 'Aluminum', 26.981, 2.05, 1.35, [3]),\r\n new Element(14, 'SI', 'Silicon', 28.086, 2.1, 1.2, [4]),\r\n new Element(15, 'P', 'Phosphorus', 30.974, 2.08, 0.75, [3, 5]),\r\n new Element(16, 'S', 'Sulfur', 32.07, 2, 1.02, [2, 4, 6]),\r\n new Element(17, 'CL', 'Chlorine', 35.453, 1.97, 0.99, [1, 3, 5, 7]),\r\n new Element(18, 'AR', 'Argon', 39.948, 1.88, 1.57, [0]),\r\n new Element(19, 'K', 'Potassium', 39.1, 2.75, 1.33, [1]),\r\n new Element(20, 'CA', 'Calcium', 40.08, 1.973, 0.99, [2]),\r\n new Element(21, 'SC', 'Scandium', 44.956, 1.7, 1.44, [0]),\r\n new Element(22, 'TI', 'Titanium', 47.88, 1.7, 1.47, [0]),\r\n new Element(23, 'V', 'Vanadium', 50.941, 1.7, 1.33, [0]),\r\n new Element(24, 'CR', 'Chromium', 52, 1.7, 1.35, [0]),\r\n new Element(25, 'MN', 'Manganese', 54.938, 1.7, 1.35, [0]),\r\n new Element(26, 'FE', 'Iron', 55.847, 1.7, 1.34, [0]),\r\n new Element(27, 'CO', 'Cobalt', 58.93, 1.7, 1.33, [0]),\r\n new Element(28, 'NI', 'Nickel', 58.69, 1.63, 1.5, [0]),\r\n new Element(29, 'CU', 'Copper', 63.55, 1.4, 1.52, [0]),\r\n new Element(30, 'ZN', 'Zinc', 65.39, 1.39, 1.45, [0]),\r\n new Element(31, 'GA', 'Gallium', 69.72, 1.87, 1.22, [3]),\r\n new Element(32, 'GE', 'Germanium', 72.61, 1.7, 1.17, [4]),\r\n new Element(33, 'AS', 'Arsenic', 74.92, 1.85, 1.21, [3, 5]),\r\n new Element(34, 'SE', 'Selenium', 78.96, 1.9, 1.22, [2, 4, 6]),\r\n new Element(35, 'BR', 'Bromine', 79.9, 2.1, 1.21, [1, 3, 5, 7]),\r\n new Element(36, 'KR', 'Krypton', 83.8, 2.02, 1.91, [0]),\r\n new Element(37, 'RB', 'Rubidium', 85.47, 1.7, 1.47, [1]),\r\n new Element(38, 'SR', 'Strontium', 87.62, 1.7, 1.12, [2]),\r\n new Element(39, 'Y', 'Yttrium', 88.91, 1.7, 1.78, [0]),\r\n new Element(40, 'ZR', 'Zirconium', 91.22, 1.7, 1.56, [0]),\r\n new Element(41, 'NB', 'Niobium', 92.91, 1.7, 1.48, [0]),\r\n new Element(42, 'MO', 'Molybdenum', 95.94, 1.7, 1.47, [0]),\r\n new Element(43, 'TC', 'Technetium', 98.91, 1.7, 1.35, [0]),\r\n new Element(44, 'RU', 'Ruthenium', 101.07, 1.7, 1.4, [0]),\r\n new Element(45, 'RH', 'Rhodium', 102.91, 1.7, 1.45, [0]),\r\n new Element(46, 'PD', 'Palladium', 106.42, 1.63, 1.5, [0]),\r\n new Element(47, 'AG', 'Silver', 107.87, 1.72, 1.59, [0]),\r\n new Element(48, 'CD', 'Cadmium', 112.41, 1.58, 1.69, [0]),\r\n new Element(49, 'IN', 'Indium', 114.82, 1.93, 1.63, [3]),\r\n new Element(50, 'SN', 'Tin', 118.71, 2.17, 1.46, [2, 4]),\r\n new Element(51, 'SB', 'Antimony', 121.75, 2.2, 1.46, [3, 5]),\r\n new Element(52, 'TE', 'Tellurium', 127.6, 2.06, 1.47, [2, 4, 6]),\r\n new Element(53, 'I', 'Iodine', 126.91, 2.15, 1.4, [1, 3, 5, 7]),\r\n new Element(54, 'XE', 'Xenon', 131.29, 2.16, 1.98, [0]),\r\n new Element(55, 'CS', 'Cesium', 132.91, 1.7, 1.67, [1]),\r\n new Element(56, 'BA', 'Barium', 137.33, 1.7, 1.34, [2]),\r\n new Element(57, 'LA', 'Lanthanum', 138.91, 1.7, 1.87, [0]),\r\n new Element(58, 'CE', 'Cerium', 140.12, 1.7, 1.83, [0]),\r\n new Element(59, 'PR', 'Praseodymium', 140.91, 1.7, 1.82, [0]),\r\n new Element(60, 'ND', 'Neodymium', 144.24, 1.7, 1.81, [0]),\r\n new Element(61, 'PM', 'Promethium', 144.9, 1.7, 1.8, [0]),\r\n new Element(62, 'SM', 'Samarium', 150.36, 1.7, 1.8, [0]),\r\n new Element(63, 'EU', 'Europium', 151.96, 1.7, 1.99, [0]),\r\n new Element(64, 'GD', 'Gadolinium', 157.25, 1.7, 1.79, [0]),\r\n new Element(65, 'TB', 'Terbium', 158.93, 1.7, 1.76, [0]),\r\n new Element(66, 'DY', 'Dysprosium', 162.5, 1.7, 1.75, [0]),\r\n new Element(67, 'HO', 'Holmium', 164.93, 1.7, 1.74, [0]),\r\n new Element(68, 'ER', 'Erbium', 167.26, 1.7, 1.73, [0]),\r\n new Element(69, 'TM', 'Thulium', 168.93, 1.7, 1.72, [0]),\r\n new Element(70, 'YB', 'Ytterbium', 173.04, 1.7, 1.94, [0]),\r\n new Element(71, 'LU', 'Lutetium', 174.97, 1.7, 1.72, [0]),\r\n new Element(72, 'HF', 'Hafnium', 178.49, 1.7, 1.57, [0]),\r\n new Element(73, 'TA', 'Tantalum', 180.95, 1.7, 1.43, [0]),\r\n new Element(74, 'W', 'Tungsten', 183.85, 1.7, 1.37, [0]),\r\n new Element(75, 'RE', 'Rhenium', 186.21, 1.7, 1.35, [0]),\r\n new Element(76, 'OS', 'Osmium', 190.2, 1.7, 1.37, [0]),\r\n new Element(77, 'IR', 'Iridium', 192.22, 1.7, 1.32, [0]),\r\n new Element(78, 'PT', 'Platinum', 195.08, 1.72, 1.5, [0]),\r\n new Element(79, 'AU', 'Gold', 196.97, 1.66, 1.5, [0]),\r\n new Element(80, 'HG', 'Mercury', 200.59, 1.55, 1.7, [0]),\r\n new Element(81, 'TL', 'Thallium', 204.38, 1.96, 1.55, [1, 3]),\r\n new Element(82, 'PB', 'Lead', 207.2, 2.02, 1.54, [2, 4]),\r\n new Element(83, 'BI', 'Bismuth', 208.98, 1.7, 1.54, [3, 5]),\r\n new Element(84, 'PO', 'Polonium', 210, 1.7, 1.68, [2, 4, 6]),\r\n new Element(85, 'AT', 'Astatine', 210, 1.7, 1.7, [1, 3, 5, 7]),\r\n new Element(86, 'RN', 'Radon', 222, 1.7, 2.4, [0]),\r\n new Element(87, 'FR', 'Francium', 223, 1.7, 2, [1]),\r\n new Element(88, 'RA', 'Radium', 226.03, 1.7, 1.9, [2]),\r\n new Element(89, 'AC', 'Actinium', 227.03, 1.7, 1.88, [0]),\r\n new Element(90, 'TH', 'Thorium', 232.04, 1.7, 1.79, [0]),\r\n new Element(91, 'PA', 'Protactinium', 231.04, 1.7, 1.61, [0]),\r\n new Element(92, 'U', 'Uranium', 238.03, 1.86, 1.58, [0]),\r\n new Element(93, 'NP', 'Neptunium', 237.05, 1.7, 1.55, [0]),\r\n new Element(94, 'PU', 'Plutonium', 239.1, 1.7, 1.53, [0]),\r\n new Element(95, 'AM', 'Americium', 243.1, 1.7, 1.51, [0]),\r\n new Element(96, 'CM', 'Curium', 247.1, 1.7, 1.5, [0]),\r\n new Element(97, 'BK', 'Berkelium', 247.1, 1.7, 1.5, [0]),\r\n new Element(98, 'CF', 'Californium', 252.1, 1.7, 1.5, [0]),\r\n new Element(99, 'ES', 'Einsteinium', 252.1, 1.7, 1.5, [0]),\r\n new Element(100, 'FM', 'Fermium', 257.1, 1.7, 1.5, [0]),\r\n new Element(101, 'MD', 'Mendelevium', 256.1, 1.7, 1.5, [0]),\r\n new Element(102, 'NO', 'Nobelium', 259.1, 1.7, 1.5, [0]),\r\n new Element(103, 'LR', 'Lawrencium', 260.1, 1.7, 1.5, [0]),\r\n new Element(104, 'RF', 'Rutherfordium', 261, 1.7, 1.6, [0]),\r\n new Element(105, 'DB', 'Dubnium', 262, 1.7, 1.6, [0]),\r\n new Element(106, 'SG', 'Seaborgium', 263, 1.7, 1.6, [0]),\r\n new Element(107, 'BH', 'Bohrium', 262, 1.7, 1.6, [0]),\r\n new Element(108, 'HS', 'Hassium', 265, 1.7, 1.6, [0]),\r\n new Element(109, 'MT', 'Meitnerium', 268, 1.7, 1.6, [0]),\r\n /* eslint-enable no-magic-numbers */\r\n ];\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\n static ByName = {\r\n // Duplicate atomic numbers (isotopes)\r\n /* eslint-disable no-magic-numbers */\r\n D: new Element(1, 'D', 'Deuterium', 2.014, 1.2, 0.23, [1]),\r\n T: new Element(1, 'T', 'Tritium', 3.016, 1.2, 0.23, [1]),\r\n /* eslint-enable no-magic-numbers */\r\n\r\n // All regular elements will be added later, automatically\r\n };\r\n}\r\n\r\n(function () {\r\n const byAtomicNumber = Element.ByAtomicNumber;\r\n const byName = Element.ByName;\r\n for (let i = 0, n = byAtomicNumber.length; i < n; ++i) {\r\n const element = byAtomicNumber[i];\r\n if (element) {\r\n byName[element.name] = element;\r\n }\r\n }\r\n}());\r\n\r\n// find atom type by chemical element (or create if missing)\r\nElement.getByName = function (element) {\r\n let type = Element.ByName[element];\r\n if (!type) {\r\n type = Element.ByName[element] = new Element(0, element, 'Unknown', 0, 1.0, 0.01, [0]);\r\n }\r\n return type;\r\n};\r\n\r\nexport default Element;\r\n","const cBondTypes = {\r\n /** Was generated manually */\r\n UNKNOWN: 0,\r\n /** Simple covalent bond */\r\n COVALENT: 1,\r\n /** Aromatic bond */\r\n AROMATIC: 2,\r\n};\r\n\r\nfunction getAtomPos(atom) {\r\n return atom.position;\r\n}\r\n\r\n/**\r\n * Bond between atoms.\r\n *\r\n * @param {Atom} left - The first atom.\r\n * @param {Atom} right - The second atom.\r\n * @param {number} order - Order of current bond.\r\n * @param {number} type - Bond type.\r\n * @param {boolean} fixed - Indicator of a pre-specified connection (in contrast with guessed one).\r\n *\r\n * @exports Bond\r\n * @constructor\r\n */\r\nclass Bond {\r\n constructor(left, right, order, type, fixed) {\r\n this._left = left;\r\n this._right = right;\r\n this._fixed = fixed;\r\n this._index = -1;\r\n if (left > right) {\r\n throw new Error('In a bond atom indices must be in increasing order');\r\n }\r\n this._order = order;\r\n this._type = type;\r\n }\r\n\r\n getLeft() {\r\n return this._left;\r\n }\r\n\r\n getRight() {\r\n return this._right;\r\n }\r\n\r\n getOrder() {\r\n return this._order;\r\n }\r\n\r\n calcLength() {\r\n return this._left.position.distanceTo(this._right.position);\r\n }\r\n\r\n _forEachNeighbour(currAtom, process) {\r\n const { bonds } = currAtom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]._left !== currAtom ? bonds[i]._left : bonds[i]._right);\r\n }\r\n }\r\n\r\n forEachLevelOne(process) {\r\n const left = this._left;\r\n const right = this._right;\r\n this._forEachNeighbour(left, (atom) => {\r\n if (atom === right) {\r\n return;\r\n }\r\n process(atom);\r\n });\r\n this._forEachNeighbour(right, (atom) => {\r\n if (atom === left) {\r\n return;\r\n }\r\n process(atom);\r\n });\r\n }\r\n\r\n forEachLevelTwo(process) {\r\n // TODO refactor this piece of an art?\r\n const left = this._left;\r\n const right = this._right;\r\n const self = this;\r\n self._forEachNeighbour(left, (atom) => {\r\n if (atom === right) {\r\n return;\r\n }\r\n self._forEachNeighbour(atom, (l2Atom) => {\r\n if (l2Atom === left) {\r\n return;\r\n }\r\n process(l2Atom);\r\n });\r\n });\r\n self._forEachNeighbour(right, (atom) => {\r\n if (atom === left) {\r\n return;\r\n }\r\n self._forEachNeighbour(atom, (l2Atom) => {\r\n if (l2Atom === right) {\r\n return;\r\n }\r\n process(l2Atom);\r\n });\r\n });\r\n }\r\n\r\n _fixDir(refPoint, currDir, posGetter) {\r\n // count atoms to the right and to the left of the current plane\r\n let rightCount = 0;\r\n let leftCount = 0;\r\n const tmpVec = refPoint.clone();\r\n function checkDir(atom) {\r\n tmpVec.copy(posGetter(atom));\r\n tmpVec.sub(refPoint);\r\n const dotProd = currDir.dot(tmpVec);\r\n if (dotProd > 0) {\r\n ++rightCount;\r\n } else {\r\n ++leftCount;\r\n }\r\n }\r\n function checkCarbon(atom) {\r\n if (atom.element.name === 'C') {\r\n checkDir(atom);\r\n }\r\n }\r\n // count all atoms to the left and right of our plane, start from level 1 and carbons\r\n const stages = [\r\n [this.forEachLevelOne, checkCarbon],\r\n [this.forEachLevelOne, checkDir],\r\n [this.forEachLevelTwo, checkCarbon],\r\n [this.forEachLevelTwo, checkDir],\r\n ];\r\n\r\n for (let stageId = 0; stageId < stages.length; ++stageId) {\r\n stages[stageId][0].call(this, stages[stageId][1]);\r\n if (leftCount > rightCount) {\r\n return currDir.multiplyScalar(-1);\r\n }\r\n if (leftCount < rightCount) {\r\n return currDir;\r\n }\r\n }\r\n return currDir;\r\n }\r\n\r\n calcNormalDir(posGetter) {\r\n const left = this._left;\r\n const right = this._right;\r\n let first = left;\r\n let second = right;\r\n posGetter = posGetter === undefined ? getAtomPos : posGetter;\r\n if (left.bonds.length > right.bonds.length) {\r\n first = right;\r\n second = left;\r\n }\r\n let third = first;\r\n let maxNeibs = 0;\r\n const { bonds } = second;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n let another = bonds[i]._left;\r\n if (bonds[i]._left === second) {\r\n another = bonds[i]._right;\r\n }\r\n if (another.bonds.length > maxNeibs && another !== first) {\r\n third = another;\r\n maxNeibs = another.bonds.length;\r\n }\r\n }\r\n const secondPos = posGetter(second);\r\n const firstV = posGetter(first).clone().sub(secondPos);\r\n const secondV = posGetter(third).clone().sub(secondPos);\r\n secondV.crossVectors(firstV, secondV);\r\n if (secondV.lengthSq() < 0.0001) {\r\n secondV.set(0, 1, 0);\r\n }\r\n firstV.normalize();\r\n secondV.normalize();\r\n firstV.crossVectors(secondV, firstV);\r\n if (firstV.lengthSq() < 0.0001) {\r\n firstV.set(0, 1, 0);\r\n }\r\n firstV.normalize();\r\n return this._fixDir(secondPos, firstV, posGetter);\r\n }\r\n\r\n static BondType = cBondTypes;\r\n}\r\n\r\nBond.prototype.BondType = cBondTypes;\r\n\r\nexport default Bond;\r\n","import * as THREE from 'three';\r\nimport Atom from './Atom';\r\nimport Element from './Element';\r\n\r\nconst cNucleicControlNames = ['C3\\'', 'C3*', 'P', 'H5T', 'H3T'];\r\nconst cNucleicWing1Names = ['OP1', 'O1P'];\r\nconst cNucleicWing2Names = ['OP2', 'O2P'];\r\n\r\nconst cCylinderSource = ['C3\\'', 'C3*', 'C1', 'C1\\'', 'C1*', 'P'];\r\nconst cCylinderTarget = [{\r\n types: ['A', 'DA', 'G', 'DG'],\r\n atoms: ['N1'],\r\n}, {\r\n types: ['C', 'DC'],\r\n atoms: ['N3'],\r\n}, {\r\n types: ['T', 'DT', 'U', 'DU'],\r\n atoms: ['O4'],\r\n}];\r\n\r\n/**\r\n * Residue instance.\r\n *\r\n * @param {Chain} chain - Chain this residue belongs to.\r\n * @param {ResidueType} type - Generic residue instance type.\r\n * @param {number} sequence - Sequence ID.\r\n * @param {string} icode - One character insertion code (usually space or A-Z).\r\n *\r\n * @exports Residue\r\n * @constructor\r\n */\r\nclass Residue {\r\n constructor(chain, type, sequence, icode) {\r\n this._chain = chain;\r\n this._component = null;\r\n this._type = type;\r\n this._sequence = sequence;\r\n this._icode = icode;\r\n this._mask = 1 | 0;\r\n this._index = -1;\r\n\r\n this._atoms = [];\r\n this._secondary = null;\r\n this._firstAtom = null;\r\n this._leadAtom = null;\r\n this._wingAtom = null;\r\n this._lastAtom = null;\r\n this._controlPoint = null;\r\n this._midPoint = null;\r\n this._wingVector = null;\r\n this._cylinders = null;\r\n this._isValid = true;\r\n this._het = false;\r\n this._molecule = null;\r\n this.temperature = null;\r\n this.occupancy = null;\r\n }\r\n\r\n // Getters and setters\r\n getChain() {\r\n return this._chain;\r\n }\r\n\r\n getMolecule() {\r\n return this._molecule;\r\n }\r\n\r\n getType() {\r\n return this._type;\r\n }\r\n\r\n getSequence() {\r\n return this._sequence;\r\n }\r\n\r\n getSecondary() {\r\n return this._secondary;\r\n }\r\n\r\n getICode() {\r\n return this._icode;\r\n }\r\n\r\n // Other methods\r\n\r\n addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge) {\r\n const atom = new Atom(this, name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n const complex = this._chain.getComplex();\r\n complex.addAtom(atom);\r\n this._atoms.push(atom);\r\n this._het = this._het || het;\r\n return atom;\r\n }\r\n\r\n getAtomCount() {\r\n return this._atoms.length;\r\n }\r\n\r\n forEachAtom(process) {\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n if (process(atoms[i])) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n _findAtomByName(name) {\r\n let res = null;\r\n this.forEachAtom((atom) => {\r\n if (atom.name === name) {\r\n res = atom;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return res;\r\n }\r\n\r\n _findFirstAtomInList(names) {\r\n let res = null;\r\n for (let i = 0; i < names.length; ++i) {\r\n res = this._findAtomByName(names[i]);\r\n if (res !== null) {\r\n return res;\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n mask &= atoms[i].mask;\r\n }\r\n this._mask = mask;\r\n }\r\n\r\n getCylinderTargetList() {\r\n const type = this._type._name;\r\n for (let i = 0, n = cCylinderTarget.length; i < n; ++i) {\r\n for (let j = 0, m = cCylinderTarget[i].types.length; j < m; ++j) {\r\n if (type === cCylinderTarget[i].types[j]) {\r\n return cCylinderTarget[i].atoms;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _detectLeadWing(dst, next, getAtomPosition) {\r\n const leadAtom = this._findFirstAtomInList(cNucleicControlNames);\r\n let wingStart = this._findFirstAtomInList(cNucleicWing1Names);\r\n let wingEnd = this._findFirstAtomInList(cNucleicWing2Names);\r\n\r\n if (wingStart === null && next !== null) {\r\n wingStart = next._findFirstAtomInList(cNucleicWing1Names);\r\n }\r\n\r\n if (wingEnd === null && next !== null) {\r\n wingEnd = next._findFirstAtomInList(cNucleicWing2Names);\r\n }\r\n\r\n if (leadAtom === null || wingStart === null || wingEnd === null) {\r\n return;\r\n }\r\n\r\n dst._leadAtom = leadAtom;\r\n dst._controlPoint = getAtomPosition(leadAtom);\r\n dst._wingVector = getAtomPosition(wingEnd).clone().sub(getAtomPosition(wingStart));\r\n dst._isValid = true;\r\n\r\n const cylSource = this._findFirstAtomInList(cCylinderSource);\r\n const targetList = this.getCylinderTargetList();\r\n const cylTarget = targetList !== null ? this._findFirstAtomInList(targetList) : null;\r\n if (cylSource === null || cylTarget === null) {\r\n return;\r\n }\r\n dst._cylinders = [getAtomPosition(cylSource), getAtomPosition(cylTarget)];\r\n }\r\n\r\n calcWing(prevLeadPos, currLeadPos, prevWingPos, prevWing) {\r\n const vectorA = currLeadPos.clone().sub(prevLeadPos);\r\n const vectorB = prevLeadPos.clone().sub(prevWingPos);\r\n vectorB.crossVectors(vectorA, vectorB);\r\n vectorB.crossVectors(vectorA, vectorB).normalize();\r\n if (prevWing !== null && prevWing.length() > 0.0001) {\r\n const needToNegate = vectorB.length() > 0.0001 && Math.abs(prevWing.angleTo(vectorB)) > Math.PI / 2;\r\n if (needToNegate) {\r\n vectorB.negate();\r\n }\r\n }\r\n return vectorB;\r\n }\r\n\r\n _innerFinalize(prevRes, prev, nextRes, dst, chainAsNucleic, getAtomPosition) {\r\n const bFirstInChain = prev === null;\r\n\r\n const lp = getAtomPosition(this._leadAtom);\r\n const currLeadPos = new THREE.Vector3(lp.x, lp.y, lp.z);\r\n if (chainAsNucleic) {\r\n this._detectLeadWing(dst, nextRes, getAtomPosition);\r\n return;\r\n }\r\n\r\n if (bFirstInChain) { // for first one in chain\r\n dst._midPoint = getAtomPosition(this._firstAtom).clone();\r\n } else {\r\n const prevLeadPos = prev._controlPoint; // lead point of previous monomer\r\n dst._midPoint = prevLeadPos.clone().lerp(currLeadPos, 0.5);\r\n dst._wingVector = this.calcWing(prevLeadPos, currLeadPos, getAtomPosition(prevRes._wingAtom), prev._wingVector);\r\n }\r\n dst._controlPoint = currLeadPos;\r\n }\r\n\r\n _finalize2(prev, next, asNucleic) {\r\n // Should be called AFTER first finalize\r\n this._innerFinalize(prev, prev, next, this, asNucleic, (atom) => atom.position);\r\n }\r\n\r\n isConnected(anotherResidue) {\r\n if (this._chain !== anotherResidue._chain) {\r\n return false;\r\n }\r\n if (this === anotherResidue) {\r\n return true;\r\n }\r\n let res = false;\r\n this.forEachAtom((atom) => {\r\n const { bonds } = atom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n const bond = bonds[i];\r\n if (bond._left.residue === anotherResidue || bond._right.residue === anotherResidue) {\r\n res = true;\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n return res;\r\n }\r\n\r\n _finalize() {\r\n const self = this;\r\n [this._firstAtom] = this._atoms;\r\n this._lastAtom = this._atoms[this._atoms.length - 1];\r\n\r\n this._leadAtom = null;\r\n this._wingAtom = null;\r\n\r\n let tempCount = 0;\r\n let temperature = 0; // average temperature\r\n let occupCount = 0;\r\n let occupancy = 0; // average occupancy\r\n this.forEachAtom((a) => {\r\n if (self._leadAtom === null) {\r\n if (a.role === Element.Constants.Lead) {\r\n self._leadAtom = a;\r\n }\r\n }\r\n if (self._wingAtom === null) {\r\n if (a.role === Element.Constants.Wing) {\r\n self._wingAtom = a;\r\n }\r\n }\r\n if (a.temperature) {\r\n temperature += a.temperature;\r\n tempCount++;\r\n }\r\n if (a.occupancy) {\r\n occupancy += a.occupancy;\r\n occupCount++;\r\n }\r\n return (self._leadAtom !== null && self._wingAtom !== null);\r\n });\r\n\r\n if (tempCount > 0) {\r\n this.temperature = temperature / tempCount;\r\n }\r\n if (occupCount > 0) {\r\n this.occupancy = occupancy / occupCount;\r\n }\r\n\r\n // Still try to make monomer look valid\r\n if (this._leadAtom === null || this._wingAtom === null) {\r\n this._isValid = false;\r\n }\r\n if (this._leadAtom === null) {\r\n this._leadAtom = this._firstAtom;\r\n }\r\n if (this._wingAtom === null) {\r\n this._wingAtom = this._lastAtom;\r\n }\r\n }\r\n}\r\n\r\nexport default Residue;\r\n","/**\r\n * Residue type.\r\n *\r\n * Predefined acid or created with HET, HETNAM, etc.\r\n *\r\n * @param {string} name - Short name, either standard (ALA, MET, etc.) or non-standard one.\r\n * @param {string} fullName - Full residue name.\r\n * @param {string} letterCode - 1-letter symbol.\r\n *\r\n * @exports ResidueType\r\n * @constructor\r\n */\r\nclass ResidueType {\r\n constructor(name, fullName, letterCode) {\r\n this._name = name;\r\n this._fullName = fullName;\r\n this.letterCode = letterCode;\r\n this.flags = 0x0000;\r\n }\r\n\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\n static StandardTypes = {\r\n /* eslint-disable no-magic-numbers */\r\n ALA: new ResidueType('ALA', 'Alanine', 'A'),\r\n ARG: new ResidueType('ARG', 'Arginine', 'R'),\r\n ASN: new ResidueType('ASN', 'Asparagine', 'N'),\r\n ASP: new ResidueType('ASP', 'Aspartic Acid', 'D'),\r\n CYS: new ResidueType('CYS', 'Cysteine', 'C'),\r\n GLN: new ResidueType('GLN', 'Glutamine', 'Q'),\r\n GLU: new ResidueType('GLU', 'Glutamic Acid', 'E'),\r\n GLY: new ResidueType('GLY', 'Glycine', 'G'),\r\n HIS: new ResidueType('HIS', 'Histidine', 'H'),\r\n ILE: new ResidueType('ILE', 'Isoleucine', 'I'),\r\n LEU: new ResidueType('LEU', 'Leucine', 'L'),\r\n LYS: new ResidueType('LYS', 'Lysine', 'K'),\r\n MET: new ResidueType('MET', 'Methionine', 'M'),\r\n PHE: new ResidueType('PHE', 'Phenylalanine', 'F'),\r\n PRO: new ResidueType('PRO', 'Proline', 'P'),\r\n PYL: new ResidueType('PYL', 'Pyrrolysine', 'O'),\r\n SEC: new ResidueType('SEC', 'Selenocysteine', 'U'),\r\n SER: new ResidueType('SER', 'Serine', 'S'),\r\n THR: new ResidueType('THR', 'Threonine', 'T'),\r\n TRP: new ResidueType('TRP', 'Tryptophan', 'W'),\r\n TYR: new ResidueType('TYR', 'Tyrosine', 'Y'),\r\n VAL: new ResidueType('VAL', 'Valine', 'V'),\r\n A: new ResidueType('A', 'Adenine', 'A'),\r\n C: new ResidueType('C', 'Cytosine', 'C'),\r\n G: new ResidueType('G', 'Guanine', 'G'),\r\n I: new ResidueType('I', 'Inosine', 'I'),\r\n T: new ResidueType('T', 'Thymine', 'T'),\r\n U: new ResidueType('U', 'Uracil', 'U'),\r\n DA: new ResidueType('DA', 'Adenine', 'A'),\r\n DC: new ResidueType('DC', 'Cytosine', 'C'),\r\n DG: new ResidueType('DG', 'Guanine', 'G'),\r\n DI: new ResidueType('DI', 'Inosine', 'I'),\r\n DT: new ResidueType('DT', 'Thymine', 'T'),\r\n DU: new ResidueType('DU', 'Uracil', 'U'),\r\n '+A': new ResidueType('+A', 'Adenine', 'A'),\r\n '+C': new ResidueType('+C', 'Cytosine', 'C'),\r\n '+G': new ResidueType('+G', 'Guanine', 'G'),\r\n '+I': new ResidueType('+I', 'Inosine', 'I'),\r\n '+T': new ResidueType('+T', 'Thymine', 'T'),\r\n '+U': new ResidueType('+U', 'Uracil', 'U'),\r\n WAT: new ResidueType('WAT', 'Water', ''),\r\n H2O: new ResidueType('H2O', 'Water', ''),\r\n HOH: new ResidueType('HOH', 'Water', ''),\r\n DOD: new ResidueType('DOD', 'Water', ''),\r\n UNK: new ResidueType('UNK', 'Unknown', ''),\r\n UNL: new ResidueType('UNL', 'Unknown Ligand', ''),\r\n /* eslint-enable no-magic-numbers */\r\n };\r\n\r\n /**\r\n * Enumeration of residue flag values.\r\n *\r\n * @enum {number}\r\n * @readonly\r\n */\r\n static Flags = {\r\n // Amino acids\r\n /** Amino acid residue */\r\n PROTEIN: 0x0001,\r\n /** Basic amino acid residue */\r\n BASIC: 0x0002,\r\n /** Acidic amino acid residue */\r\n ACIDIC: 0x0004,\r\n /** Polar uncharged side chain amino acid residue */\r\n POLAR: 0x0008,\r\n /** Non-polar hydrophobic side chain amino acid residue */\r\n NONPOLAR: 0x0010,\r\n /** Aromatic amino acid residue */\r\n AROMATIC: 0x0020,\r\n\r\n // Nucleic acids\r\n\r\n /** Nucleic residue */\r\n NUCLEIC: 0x0100,\r\n /** Purine nucleic residue */\r\n PURINE: 0x0200,\r\n /** Pyrimidine nucleic residue */\r\n PYRIMIDINE: 0x0400,\r\n /** DNA */\r\n DNA: 0x0800,\r\n /** RNA */\r\n RNA: 0x1000,\r\n\r\n /** Water */\r\n WATER: 0x10000,\r\n };\r\n}\r\n\r\n// Flag combinations\r\nfunction _addFlag(flag, list) {\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n const res = ResidueType.StandardTypes[list[i]];\r\n if (res) {\r\n res.flags |= flag;\r\n }\r\n }\r\n}\r\n\r\nconst { Flags } = ResidueType;\r\n_addFlag(Flags.WATER, ['WAT', 'H2O', 'HOH', 'DOD']);\r\n\r\n_addFlag(Flags.PROTEIN, [\r\n 'ALA', 'ARG', 'ASN', 'ASP', 'CYS', 'GLY', 'GLU', 'GLN', 'HIS', 'ILE',\r\n 'LEU', 'LYS', 'MET', 'PHE', 'PRO', 'PYL', 'SEC', 'SER', 'THR', 'TRP',\r\n 'TYR', 'VAL',\r\n]);\r\n_addFlag(Flags.BASIC, ['ARG', 'HIS', 'LYS']);\r\n_addFlag(Flags.ACIDIC, ['ASP', 'GLU']);\r\n_addFlag(Flags.POLAR, ['ASN', 'CYS', 'GLN', 'SER', 'THR', 'TYR']);\r\n_addFlag(Flags.NONPOLAR, ['ALA', 'ILE', 'LEU', 'MET', 'PHE', 'PRO', 'TRP', 'VAL', 'GLY']);\r\n_addFlag(Flags.AROMATIC, ['PHE', 'TRP', 'TYR']);\r\n\r\n_addFlag(Flags.NUCLEIC, [\r\n 'A', 'G', 'I', 'DA', 'DG', 'DI', '+A', '+G', '+I',\r\n 'C', 'T', 'U', 'DC', 'DT', 'DU', '+C', '+T', '+U',\r\n]);\r\n_addFlag(Flags.PURINE, ['A', 'G', 'I', 'DA', 'DG', 'DI', '+A', '+G', '+I']);\r\n_addFlag(Flags.PYRIMIDINE, ['C', 'T', 'U', 'DC', 'DT', 'DU', '+C', '+T', '+U']);\r\n_addFlag(Flags.DNA, ['DA', 'DG', 'DI', 'DC', 'DT', 'DU']);\r\n_addFlag(Flags.RNA, ['A', 'G', 'I', 'C', 'T', 'U']);\r\n// Table of kdHydrophobicity\r\nconst hydro = {\r\n ILE: 4.5,\r\n VAL: 4.2,\r\n LEU: 3.8,\r\n PHE: 2.8,\r\n CYS: 2.5,\r\n MET: 1.9,\r\n ALA: 1.8,\r\n GLY: -0.4,\r\n THR: -0.7,\r\n SER: -0.8,\r\n TRP: -0.9,\r\n TYR: -1.3,\r\n PRO: -1.6,\r\n HIS: -3.2,\r\n GLU: -3.5,\r\n GLN: -3.5,\r\n ASP: -3.5,\r\n ASN: -3.5,\r\n LYS: -3.9,\r\n ARG: -4.5,\r\n};\r\n\r\nfunction _addParam(param, list) {\r\n const keys = Object.keys(list);\r\n for (let i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n const value = list[key];\r\n ResidueType.StandardTypes[key][param] = value;\r\n }\r\n}\r\n\r\n_addParam('hydrophobicity', hydro);\r\n\r\nexport default ResidueType;\r\n","import * as THREE from 'three';\r\nimport Residue from './Residue';\r\nimport ResidueType from './ResidueType';\r\n\r\n/**\r\n * Residues in chain are either amino acid either nucleic acid (and water)\r\n * There might be some modified/mutated residues, which type could not be determined by their name (nucleic or amino); In this\r\n * case firstly program definites the chain type (by well-known residues) and then definites modified/mutated residues\r\n */\r\nconst ChainType = {\r\n UNKNOWN: 0,\r\n PROTEIN: 1,\r\n NUCLEIC: 2,\r\n};\r\n\r\n/**\r\n * Residue chain.\r\n *\r\n * @param {Complex} complex - Molecular complex this chain belongs to.\r\n * @param {string} name - One character identifier (usually space, A-Z, 0-9, or a-z).\r\n *\r\n * @exports Chain\r\n * @constructor\r\n */\r\nclass Chain {\r\n constructor(complex, name) {\r\n this._complex = complex;\r\n this._name = name;\r\n this._mask = 1 | 0;\r\n this._index = -1;\r\n this._residues = [];\r\n\r\n this.minSequence = Number.POSITIVE_INFINITY;\r\n this.maxSequence = Number.NEGATIVE_INFINITY;\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getResidues() {\r\n return this._residues;\r\n }\r\n\r\n _determineType() {\r\n const residues = this._residues;\r\n\r\n const { PROTEIN, NUCLEIC } = ResidueType.Flags;\r\n\r\n this.type = ChainType.UNKNOWN;\r\n\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const { flags } = residues[i]._type;\r\n\r\n if ((flags & NUCLEIC) !== 0) {\r\n this.type = ChainType.NUCLEIC;\r\n break;\r\n } else if ((flags & PROTEIN) !== 0) {\r\n this.type = ChainType.PROTEIN;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Finds thre residue with specified sequence number and inserion code\r\n * @param {Number} seqNum sequence number\r\n * @param {string} iCode insertion code\r\n * @returns {*} Residue or null if not found\r\n */\r\n findResidue(seqNum, iCode) {\r\n const residues = this._residues;\r\n\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const res = residues[i];\r\n if (res._sequence === seqNum && res._icode === iCode) {\r\n return [res, i];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _finalize() {\r\n this._determineType();\r\n\r\n const residues = this._residues;\r\n\r\n let prev = null;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const next = (i + 1 < n) ? residues[i + 1] : null;\r\n const curr = residues[i];\r\n // TODO: skip invalid residues\r\n if (1 /* curr._isValid */) { // eslint-disable-line no-constant-condition\r\n curr._finalize2(prev, next, this.type === ChainType.NUCLEIC);\r\n prev = curr;\r\n }\r\n }\r\n\r\n // fix very first wing\r\n if (residues.length > 1 && residues[1]._wingVector) {\r\n const p = residues[1]._wingVector;\r\n residues[0]._wingVector = new THREE.Vector3(p.x, p.y, p.z);\r\n } else if (residues.length > 0) {\r\n residues[0]._wingVector = new THREE.Vector3(1, 0, 0);\r\n }\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const residues = this._residues;\r\n let prev = null;\r\n let prevData = null;\r\n const frameRes = frameData._residues;\r\n const n = residues.length;\r\n function getAtomPos(atom) {\r\n return frameData.getAtomPos(atom.index);\r\n }\r\n\r\n for (let i = 0; i < n; ++i) {\r\n const curr = residues[i];\r\n const currData = frameRes[curr._index];\r\n const nextRes = (i + 1 < n) ? residues[i + 1] : null;\r\n curr._innerFinalize(prev, prevData, nextRes, currData, this.type === ChainType.NUCLEIC, getAtomPos);\r\n prev = curr;\r\n prevData = currData;\r\n }\r\n\r\n frameRes[residues[0]._index]._wingVector = n > 1\r\n ? frameRes[residues[1]._index]._wingVector\r\n : new THREE.Vector3(1, 0, 0);\r\n }\r\n\r\n /**\r\n * Create a new residue.\r\n *\r\n * @param {string} name - Residue name.\r\n * @param {number} sequence - Residue sequence number.\r\n * @param {string} iCode - Insertion code.\r\n * @returns {Residue} - Newly created residue instance.\r\n */\r\n addResidue(name, sequence, iCode) {\r\n let type = this._complex.getResidueType(name);\r\n if (type === null) {\r\n type = this._complex.addResidueType(name);\r\n }\r\n const residue = new Residue(this, type, sequence, iCode);\r\n this._complex.addResidue(residue);\r\n this._residues.push(residue);\r\n\r\n if (type.flags & (ResidueType.Flags.NUCLEIC | ResidueType.Flags.PROTEIN)) {\r\n if (this.maxSequence < sequence) {\r\n this.maxSequence = sequence;\r\n }\r\n if (this.minSequence > sequence) {\r\n this.minSequence = sequence;\r\n }\r\n }\r\n\r\n return residue;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residues.length;\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n mask &= residues[i]._mask;\r\n }\r\n this._mask = mask;\r\n }\r\n}\r\n\r\nexport default Chain;\r\n","import Residue from './Residue';\r\n\r\n/** An element of protein secondary structure. */\r\nclass StructuralElement {\r\n /**\r\n * Create a secondary structural element of the specified type.\r\n *\r\n * @param {StructuralElement.Type} type Secondary structure type.\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n */\r\n constructor(type, init, term) {\r\n /**\r\n * Secondary structure type.\r\n * @type {StructuralElement.Type}\r\n */\r\n this.type = type;\r\n /**\r\n * Generic secondary structure type.\r\n * @type {StructuralElement.Generic}\r\n */\r\n this.generic = StructuralElement.genericByType[this.type] || 'loop';\r\n /**\r\n * Initial residue.\r\n * @type Residue\r\n */\r\n this.init = init;\r\n /**\r\n * Terminal residue.\r\n * @type Residue\r\n */\r\n this.term = term;\r\n }\r\n\r\n /**\r\n * An internal method for making a final pass over the complex to set all required references.\r\n *\r\n * **NOTE:** I'm sorry. It's a legacy code waiting for refactoring.\r\n * Just copying it as-is right now and hoping for the best.\r\n *\r\n * @param {object} serialAtomMap A dictionary of atoms\r\n * @param {object} residueHash A dictionary of hashed residues to check.\r\n * @param {Complex} complex The molecular complex this element belongs to.\r\n */\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n if (this.init instanceof Residue && this.term instanceof Residue) {\r\n return;\r\n }\r\n\r\n // Link all intermediate residues to this structural element\r\n const start = complex.splitUnifiedSerial(this.init);\r\n const end = complex.splitUnifiedSerial(this.term);\r\n for (let chainId = start.chain; chainId <= end.chain; chainId++) {\r\n for (let serialId = start.serial; serialId <= end.serial; serialId++) {\r\n for (let { iCode } = start; iCode <= end.iCode; iCode++) {\r\n const hashCode = complex.getUnifiedSerial(chainId, serialId, iCode);\r\n if (residueHash[hashCode]) {\r\n residueHash[hashCode]._secondary = this;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Replace unfined serials by objects\r\n this.init = residueHash[this.init];\r\n this.term = residueHash[this.term];\r\n }\r\n}\r\n\r\n/**\r\n * Specific type of a secondary structural element.\r\n * @enum {string}\r\n * @see StructuralElement.Generic\r\n */\r\nStructuralElement.Type = {\r\n /** A strand of a [beta-sheet](https://en.wikipedia.org/wiki/Beta_sheet). */\r\n STRAND: 'E',\r\n /** An isolated beta-bridge (too small for a beta-sheet). */\r\n BRIDGE: 'B',\r\n\r\n /** A [3/10 helix](https://en.wikipedia.org/wiki/310_helix) (hydrogen bonding is 3 residues apart). */\r\n HELIX_310: 'G',\r\n /** An [alpha-helix](https://en.wikipedia.org/wiki/Alpha_helix) (hydrogen bonding is 4 residues apart). */\r\n HELIX_ALPHA: 'H',\r\n /** A [pi-helix](https://en.wikipedia.org/wiki/Pi_helix) (hydrogen bonding is 5 residues apart). */\r\n HELIX_PI: 'I',\r\n /** A generic helix of unspecified bonding distance. */\r\n HELIX: 'X',\r\n\r\n /** An isolated 3/10-like helical turn. */\r\n TURN_310: '3',\r\n /** An isolated alpha-like helical turn. */\r\n TURN_ALPHA: '4',\r\n /** An isolated pi-like helical turn. */\r\n TURN_PI: '5',\r\n /** An isolated helical [turn](https://en.wikipedia.org/wiki/Turn_(biochemistry)) of unspecified bonding distance. */\r\n TURN: 'T',\r\n\r\n /** A bend (a region of high curvature). */\r\n BEND: 'S',\r\n /** Just a protein section with no particular conformation. */\r\n COIL: 'C',\r\n};\r\n\r\n/**\r\n * Generic type of a secondary structural element.\r\n * @enum {string}\r\n * @see StructuralElement.Type\r\n */\r\nStructuralElement.Generic = {\r\n /** A strand of a sheet. */\r\n STRAND: 'strand',\r\n /** A helix. */\r\n HELIX: 'helix',\r\n /** Just a protein section with no particular conformation. */\r\n LOOP: 'loop',\r\n};\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\nconst StructuralElementGeneric = StructuralElement.Generic;\r\n\r\n/**\r\n * A mapping from specific types to generic ones.\r\n * @type {Object}\r\n */\r\nStructuralElement.genericByType = {\r\n [StructuralElementType.STRAND]: StructuralElementGeneric.STRAND,\r\n [StructuralElementType.HELIX_310]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX_ALPHA]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX_PI]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX]: StructuralElementGeneric.HELIX,\r\n};\r\n\r\nexport default StructuralElement;\r\n","import StructuralElement from './StructuralElement';\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\nexport const typeByPDBHelixClass = {\r\n 1: StructuralElementType.HELIX_ALPHA,\r\n 3: StructuralElementType.HELIX_PI,\r\n 5: StructuralElementType.HELIX_310,\r\n};\r\n\r\n/**\r\n * Helical secondary structure of a protein.\r\n * @extends StructuralElement\r\n */\r\nclass Helix extends StructuralElement {\r\n /**\r\n * Create a helix.\r\n *\r\n * @param {number} helixClass A helix class according to the\r\n * [PDB Format](http://www.wwpdb.org/documentation/file-format-content/format33/sect5.html#HELIX).\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n * @param {number} serial Serial number of the helix (see PDB Format).\r\n * @param {string} name Helix identifier (see PDB Format).\r\n * @param {string} comment Comment about this helix (see PDB Format).\r\n * @param {number} length Length of this helix, in residues (see PDB Format).\r\n */\r\n constructor(helixClass, init, term, serial, name, comment, length) {\r\n super(typeByPDBHelixClass[helixClass] || StructuralElement.Type.HELIX, init, term);\r\n\r\n /**\r\n * Serial number of the helix (see PDB Format).\r\n * @type {number}\r\n */\r\n this.serial = serial;\r\n /**\r\n * Helix identifier (see PDB Format).\r\n * @type {string}\r\n */\r\n this.name = name;\r\n /**\r\n * Comment about this helix (see PDB Format).\r\n * @type {string}\r\n */\r\n this.comment = comment;\r\n /**\r\n * Length of this helix, in residues (see PDB Format).\r\n * @type {number}\r\n */\r\n this.length = length;\r\n }\r\n}\r\n\r\nexport default Helix;\r\n","import StructuralElement from './StructuralElement';\r\n\r\n/**\r\n * A single strand of a sheet in a protein secondary structure.\r\n * @extends StructuralElement\r\n */\r\nclass Strand extends StructuralElement {\r\n /**\r\n * Create a strand.\r\n *\r\n * @param {Sheet} sheet Parent sheet this strand belongs to.\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n * @param {number} sense Sense of strand with respect to previous strand in the sheet.\r\n * - 0 if the first strand,\r\n * - 1 if parallel, and\r\n * - -1 if anti-parallel.\r\n * @param {Atom} atomCur Atom in current strand (see PDB Format).\r\n * @param {Atom} atomPrev Atom in previous strand (see PDB Format).\r\n */\r\n constructor(sheet, init, term, sense, atomCur, atomPrev) {\r\n super(StructuralElement.Type.STRAND, init, term);\r\n\r\n /**\r\n * Parent sheet this strand belongs to.\r\n * @type {Sheet}\r\n */\r\n this.sheet = sheet;\r\n /**\r\n * Sense of strand with respect to previous strand in the sheet.\r\n * - 0 if the first strand,\r\n * - 1 if parallel, and\r\n * - -1 if anti-parallel.\r\n * @type {number}\r\n */\r\n this.sense = sense;\r\n /**\r\n * Atom in current strand (see PDB Format).\r\n * @type {Atom}\r\n */\r\n this.atomCur = atomCur;\r\n /**\r\n * Atom in previous strand (see PDB Format).\r\n * @type {Atom}\r\n */\r\n this.atomPrev = atomPrev;\r\n }\r\n\r\n /**\r\n * An internal method for making a final pass over the complex to set all required references.\r\n *\r\n * **NOTE:** I'm sorry. It's a legacy code waiting for refactoring.\r\n * Just copying it as-is right now and hoping for the best.\r\n *\r\n * @param {object} serialAtomMap A dictionary of atoms\r\n * @param {object} residueHash A dictionary of hashed residues to check.\r\n * @param {Complex} complex The molecular complex this element belongs to.\r\n *\r\n * @override\r\n */\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n super._finalize(serialAtomMap, residueHash, complex);\r\n\r\n let as = this.atomCur;\r\n if (as !== null && !Number.isNaN(as)) {\r\n this.atomCur = serialAtomMap[as];\r\n }\r\n as = this.atomPrev;\r\n if (as !== null && !Number.isNaN(as)) {\r\n this.atomPrev = serialAtomMap[as];\r\n }\r\n }\r\n}\r\n\r\nexport default Strand;\r\n","import Strand from './Strand';\r\n\r\n/**\r\n * Sheet secondary structure of a protein.\r\n *\r\n * @param {string} name -\r\n * @param {number} width -\r\n *\r\n * @exports Sheet\r\n * @constructor\r\n */\r\nclass Sheet {\r\n constructor(name, width) {\r\n this._name = name;\r\n this._width = width;\r\n\r\n this._strands = [];\r\n }\r\n\r\n // Getters and setters\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getWidth() {\r\n return this._width;\r\n }\r\n\r\n addStrand(strand) {\r\n this._strands.push(strand);\r\n this._width = this._strands.length;\r\n }\r\n\r\n addEmptyStrand() {\r\n this._strands.push(new Strand(null, null, null, null, null, null));\r\n }\r\n\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n const s = this._strands;\r\n for (let i = 0, n = s.length; i < n; ++i) {\r\n s[i]._finalize(serialAtomMap, residueHash, complex);\r\n }\r\n if (!this._width) {\r\n this._width = s.length;\r\n }\r\n if (s.length !== this._width) {\r\n throw new Error(`Sheet ${this._name} is inconsistent.`);\r\n }\r\n }\r\n}\r\n\r\nexport default Sheet;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Atom measurements.\r\n *\r\n * @param {string} id - SGroup id\r\n * @param {string} name - Name of the group\r\n * @param {THREE.Vector3} position - Registered coordinates\r\n * @param {array} atoms - Atoms group consists of\r\n * @param {object} saveNode - XML node from file for saving\r\n *\r\n * @exports SGroup\r\n * @constructor\r\n */\r\nclass SGroup {\r\n constructor(id, name, position, atoms, saveNode) {\r\n this._id = id;\r\n this._name = name;\r\n this._position = position || new THREE.Vector3();\r\n this._atoms = atoms || [];\r\n this._charge = 0; // default group charge\r\n this._repeat = 1; // how many times group repeated: always > 0\r\n this._center = null;\r\n this.xmlNodeRef = saveNode || null;\r\n }\r\n\r\n /**\r\n * Get atom full name.\r\n * @returns {string} Atom full name.\r\n */\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getPosition() {\r\n return this._position;\r\n }\r\n\r\n getCentralPoint() {\r\n return this._center;\r\n }\r\n\r\n _rebuildSGroupOnAtomChange() {\r\n const nLimon = 100000000;\r\n if (this._center === null) {\r\n return; // nothing to do if we are not relative\r\n }\r\n\r\n const bLow = new THREE.Vector3(nLimon, nLimon, nLimon);\r\n const bHight = new THREE.Vector3(-nLimon, -nLimon, -nLimon);\r\n for (let j = 0, n = this._atoms.length; j < n; j++) {\r\n const aPos = this._atoms[j].position;\r\n bLow.set(Math.min(bLow.x, aPos.x), Math.min(bLow.y, aPos.y), Math.min(bLow.z, aPos.z));\r\n bHight.set(Math.max(bHight.x, aPos.x), Math.max(bHight.y, aPos.y), Math.max(bHight.z, aPos.z));\r\n }\r\n this._center.addVectors(bLow, bHight);\r\n this._center.multiplyScalar(0.5);\r\n }\r\n}\r\n\r\nexport default SGroup;\r\n","import utils from '../../utils';\r\n\r\n//----------------------------------------------------------------------------\r\nclass Range {\r\n constructor(min, max) {\r\n this.min = min;\r\n this.max = typeof max === 'undefined' ? min : max;\r\n }\r\n\r\n includes(value) {\r\n return this.min <= value && value <= this.max;\r\n }\r\n\r\n toString() {\r\n const { min, max } = this;\r\n return min === max ? String(min) : [min, max].join(':');\r\n }\r\n\r\n toJSON() {\r\n return [this.min, this.max];\r\n }\r\n}\r\n\r\n// ////////////////////////////////////////////////////////////////////////////\r\n\r\nclass List {\r\n constructor(arg) {\r\n if (arg instanceof this.constructor) {\r\n // delegate construction to a different class\r\n // eslint-disable-next-line no-constructor-return\r\n return arg;\r\n }\r\n if (arg instanceof Array) {\r\n this._values = arg.slice(0);\r\n } else if (arg) {\r\n this._values = [arg];\r\n } else {\r\n this._values = [];\r\n }\r\n }\r\n\r\n append(value) {\r\n const values = this._values;\r\n values[values.length] = value;\r\n return this;\r\n }\r\n\r\n remove(value) {\r\n const values = this._values;\r\n const index = values.indexOf(value);\r\n if (index >= 0) {\r\n values.splice(index, 1);\r\n }\r\n return this;\r\n }\r\n\r\n toString() {\r\n return this._values.join(',');\r\n }\r\n\r\n toJSON() {\r\n const values = this._values;\r\n const result = [];\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n const value = values[i];\r\n result[i] = value.toJSON ? value.toJSON() : value;\r\n }\r\n return result;\r\n }\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n\r\nclass RangeList extends List {\r\n includes(value) {\r\n const list = this._values;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n if (list[i].includes(value)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n\r\nconst valuesArray = [];\r\n\r\nclass ValueList extends List {\r\n constructor(arg, upperOnly) {\r\n const list = super(arg);\r\n if (upperOnly) {\r\n this.upperOnly = true;\r\n const values = list._values;\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n const value = values[i];\r\n if (typeof value === 'string') {\r\n values[i] = value.toUpperCase();\r\n }\r\n }\r\n } else {\r\n this.upperOnly = false;\r\n }\r\n // return constructed object\r\n // eslint-disable-next-line no-constructor-return\r\n return list;\r\n }\r\n\r\n includes(value) {\r\n // we do not convert to upper case here for perfomance reasons\r\n // if list is upper case only, value must be converted before it is sent up to here\r\n return this._values.indexOf(value) !== -1;\r\n }\r\n\r\n toString() {\r\n // Quote values that are not correct identifiers\r\n const values = this._values;\r\n valuesArray.length = 0;\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n valuesArray[i] = utils.correctSelectorIdentifier(String(values[i]));\r\n }\r\n return valuesArray.join(',');\r\n }\r\n\r\n _validate(value) {\r\n return (this.upperOnly && typeof value === 'string') ? value.toUpperCase() : value;\r\n }\r\n\r\n append(value) {\r\n super.append(this._validate(value));\r\n return this;\r\n }\r\n\r\n remove(value) {\r\n super.remove(this._validate(value));\r\n return this;\r\n }\r\n}\r\n\r\nexport {\r\n Range,\r\n List,\r\n RangeList,\r\n ValueList,\r\n};\r\n","import { RangeList, ValueList } from './selectArgs';\r\n\r\n/** Base class for atom selectors. */\r\nclass Selector {\r\n toString() {\r\n return this.keyword;\r\n }\r\n\r\n toJSON() {\r\n return [this.name];\r\n }\r\n}\r\n\r\nSelector.prototype.name = 'Error';\r\nSelector.prototype.keyword = 'error';\r\n\r\n/** Base class for list-based atom selectors. */\r\nclass ListSelector extends Selector {\r\n constructor(list) {\r\n super();\r\n this.list = list;\r\n }\r\n\r\n toString() {\r\n return `${this.keyword} ${this.list}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.list.toJSON()];\r\n }\r\n}\r\n\r\nclass RangeListSelector extends ListSelector {\r\n constructor(arg) {\r\n super(new RangeList(arg));\r\n }\r\n}\r\n\r\nclass ValueListSelector extends ListSelector {\r\n constructor(arg, caseSensitive) {\r\n super(new ValueList(arg, !caseSensitive));\r\n }\r\n}\r\n\r\nclass NoneSelector extends Selector {\r\n includesAtom(_atom) {\r\n return false;\r\n }\r\n}\r\n\r\nNoneSelector.prototype.name = 'None';\r\nNoneSelector.prototype.keyword = 'none';\r\n\r\nclass AllSelector extends Selector {\r\n includesAtom(_atom) {\r\n return true;\r\n }\r\n}\r\n\r\nAllSelector.prototype.name = 'All';\r\nAllSelector.prototype.keyword = 'all';\r\n\r\nexport {\r\n Selector,\r\n ListSelector,\r\n RangeListSelector,\r\n ValueListSelector,\r\n NoneSelector,\r\n AllSelector,\r\n};\r\n","import { Selector, NoneSelector } from './selectorsBase';\r\n\r\n//----------------------------------------------------------------------------\r\n// Operators\r\n//----------------------------------------------------------------------------\r\nconst none = new NoneSelector();\r\n\r\nclass PrefixOperator extends Selector {\r\n constructor(rhs) {\r\n super();\r\n this.rhs = rhs || none;\r\n }\r\n\r\n toString() {\r\n const rhs = this.rhs.priority && this.rhs.priority > this.priority ? `(${this.rhs})` : this.rhs;\r\n return `${this.keyword} ${rhs}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.rhs.toJSON()];\r\n }\r\n}\r\n\r\nPrefixOperator.prototype.priority = 1;\r\n\r\nclass InfixOperator extends Selector {\r\n constructor(lhs, rhs) {\r\n super();\r\n this.lhs = lhs || none;\r\n this.rhs = rhs || none;\r\n }\r\n\r\n toString() {\r\n const lhs = this.lhs.priority && this.lhs.priority > this.priority ? `(${this.lhs})` : this.lhs;\r\n const rhs = this.rhs.priority && this.rhs.priority > this.priority ? `(${this.rhs})` : this.rhs;\r\n return `${lhs} ${this.keyword} ${rhs}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.lhs.toJSON(), this.rhs.toJSON()];\r\n }\r\n}\r\n\r\nInfixOperator.prototype.priority = 1000;\r\n\r\nexport { PrefixOperator, InfixOperator };\r\n","import Atom from './Atom';\r\nimport ResidueType from './ResidueType';\r\nimport { parser } from '../utils/SelectionParser';\r\nimport { Range, RangeList, ValueList } from './selectors/selectArgs';\r\nimport { PrefixOperator, InfixOperator } from './selectors/selectOps';\r\nimport {\r\n Selector,\r\n RangeListSelector,\r\n ValueListSelector,\r\n NoneSelector,\r\n AllSelector,\r\n} from './selectors/selectorsBase';\r\n\r\nconst keywords = {};\r\n\r\n//----------------------------------------------------------------------------\r\n// Named selectors\r\n//----------------------------------------------------------------------------\r\n\r\nfunction defineSelector(name, SelectorClass) {\r\n const keyword = name.toLowerCase();\r\n SelectorClass.prototype.keyword = keyword;\r\n SelectorClass.prototype.name = name;\r\n\r\n const factory = ((...args) => new SelectorClass(...args));\r\n factory.SelectorClass = SelectorClass;\r\n keywords[keyword] = factory;\r\n\r\n return SelectorClass;\r\n}\r\n\r\ndefineSelector('Serial', class SerialSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.serial);\r\n }\r\n});\r\n\r\ndefineSelector('Name', class NameSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.name);\r\n }\r\n});\r\n\r\ndefineSelector('AltLoc', class AltLocSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(String.fromCharCode(atom.location));\r\n }\r\n});\r\n\r\ndefineSelector('Elem', class ElemSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.element.name);\r\n }\r\n});\r\n\r\ndefineSelector('Residue', class ResidueSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._type._name);\r\n }\r\n});\r\n\r\ndefineSelector('Sequence', class SequenceSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._sequence);\r\n }\r\n});\r\n\r\ndefineSelector('ICode', class ICodeSelector extends ValueListSelector {\r\n constructor(arg) {\r\n super(arg, true);\r\n }\r\n\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._icode);\r\n }\r\n});\r\n\r\ndefineSelector('ResIdx', class ResIdxSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._index);\r\n }\r\n});\r\n\r\ndefineSelector('Chain', class ChainSelector extends ValueListSelector {\r\n constructor(arg) {\r\n super(arg, true);\r\n }\r\n\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._chain._name);\r\n }\r\n});\r\n\r\ndefineSelector('Hetatm', class HetatmSelector extends Selector {\r\n includesAtom(atom) {\r\n return atom.het;\r\n }\r\n});\r\n\r\ndefineSelector('PolarH', class PolarHSelector extends Selector {\r\n includesAtom(atom) {\r\n return (atom.flags & Atom.Flags.NONPOLARH) === Atom.Flags.HYDROGEN;\r\n }\r\n});\r\n\r\ndefineSelector('NonPolarH', class NonPolarHSelector extends Selector {\r\n includesAtom(atom) {\r\n return (atom.flags & Atom.Flags.NONPOLARH) === Atom.Flags.NONPOLARH;\r\n }\r\n});\r\n\r\ndefineSelector('All', AllSelector);\r\n\r\ndefineSelector('None', NoneSelector);\r\n\r\nconst NULL_SELECTOR = keywords.none();\r\n\r\n//----------------------------------------------------------------------------\r\n// Named operators\r\n//----------------------------------------------------------------------------\r\n\r\nfunction defineOperator(name, priority, OperatorClass) {\r\n OperatorClass.prototype.priority = priority;\r\n return defineSelector(name, OperatorClass);\r\n}\r\ndefineOperator('Not', 1, class NotOperator extends PrefixOperator {\r\n includesAtom(atom) {\r\n return !this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\ndefineOperator('And', 2, class AndOperator extends InfixOperator {\r\n includesAtom(atom) {\r\n return this.lhs.includesAtom(atom) && this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\ndefineOperator('Or', 3, class OrOperator extends InfixOperator {\r\n includesAtom(atom) {\r\n return this.lhs.includesAtom(atom) || this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\n//----------------------------------------------------------------------------\r\n// Flag selectors\r\n//----------------------------------------------------------------------------\r\n\r\nfunction byResidueTypeFlag(flag, name) {\r\n return defineSelector(name, class extends Selector {\r\n includesAtom(atom) {\r\n return (atom.residue._type.flags & flag) !== 0;\r\n }\r\n });\r\n}\r\n\r\nbyResidueTypeFlag(ResidueType.Flags.PROTEIN, 'Protein');\r\nbyResidueTypeFlag(ResidueType.Flags.BASIC, 'Basic');\r\nbyResidueTypeFlag(ResidueType.Flags.ACIDIC, 'Acidic');\r\nbyResidueTypeFlag(ResidueType.Flags.BASIC | ResidueType.Flags.ACIDIC, 'Charged');\r\nbyResidueTypeFlag(ResidueType.Flags.POLAR, 'Polar');\r\nbyResidueTypeFlag(ResidueType.Flags.NONPOLAR, 'NonPolar');\r\nbyResidueTypeFlag(ResidueType.Flags.AROMATIC, 'Aromatic');\r\nbyResidueTypeFlag(ResidueType.Flags.NUCLEIC, 'Nucleic');\r\nbyResidueTypeFlag(ResidueType.Flags.PURINE, 'Purine');\r\nbyResidueTypeFlag(ResidueType.Flags.PYRIMIDINE, 'Pyrimidine');\r\nbyResidueTypeFlag(ResidueType.Flags.WATER, 'Water');\r\n\r\n//----------------------------------------------------------------------------\r\nconst selectors = Object.create(keywords);\r\n\r\nselectors.Selector = Selector;\r\nselectors.RangeListSelector = RangeListSelector;\r\nselectors.ValueListSelector = ValueListSelector;\r\nselectors.Range = Range;\r\nselectors.RangeList = RangeList;\r\nselectors.ValueList = ValueList;\r\nselectors.PrefixOperator = PrefixOperator;\r\nselectors.InfixOperator = InfixOperator;\r\nselectors.Context = Object.create({});\r\n\r\nselectors.GetSelector = function (key) {\r\n if (!selectors.Context.hasOwnProperty(key)) {\r\n const exc = { message: `selector ${key} is not registered` };\r\n throw exc;\r\n }\r\n return selectors.Context[key] || NULL_SELECTOR;\r\n};\r\n\r\nselectors.ClearContext = function () {\r\n Object.keys(selectors.Context).forEach((k) => { delete selectors.Context[k]; });\r\n};\r\n\r\nselectors.keyword = function (key) {\r\n return keywords[key.toLowerCase()] || keywords.none;\r\n};\r\n\r\nselectors.parse = function (str) {\r\n const res = {};\r\n try {\r\n res.selector = parser.parse(str);\r\n } catch (e) {\r\n res.selector = NULL_SELECTOR;\r\n res.error = e.message;\r\n }\r\n return res;\r\n};\r\n\r\nparser.yy = selectors;\r\nparser.yy.parseError = parser.parseError; // workaround for incorrect JISON parser generator for AMD module\r\n\r\nexport default selectors;\r\n","import * as THREE from 'three';\r\nimport selectors from './selectors';\r\n\r\n/**\r\n * Basic biological unit class.\r\n *\r\n * @exports BiologicalUnit\r\n * @constructor\r\n */\r\nclass BiologicalUnit {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._selector = selectors.keyword('All')();\r\n this._boundaries = {\r\n boundingBox: new THREE.Box3(),\r\n boundingSphere: new THREE.Sphere(),\r\n };\r\n }\r\n\r\n computeBoundaries() {\r\n const atoms = this._complex._atoms;\r\n const n = atoms.length;\r\n const selector = this._selector;\r\n\r\n const { boundingBox } = this._boundaries;\r\n boundingBox.makeEmpty();\r\n if (n === 1) {\r\n boundingBox.expandByPoint(atoms[0].position);\r\n const bbc = new THREE.Vector3();\r\n boundingBox.getCenter(bbc);\r\n const s = 2 * atoms[0].element.radius;\r\n boundingBox.setFromCenterAndSize(bbc, new THREE.Vector3(s, s, s));\r\n } else {\r\n for (let i = 0; i < n; ++i) {\r\n if (selector.includesAtom(atoms[i])) {\r\n boundingBox.expandByPoint(atoms[i].position);\r\n }\r\n }\r\n }\r\n\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n if (n === 1) {\r\n this._boundaries.boundingSphere.set(center, atoms[0].element.radius);\r\n } else {\r\n for (let i = 0; i < n; ++i) {\r\n if (!selector.includesAtom(atoms[i])) {\r\n continue;\r\n }\r\n const pos = atoms[i].position;\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n this._boundaries.boundingSphere.set(center, Math.sqrt(radiusSquared));\r\n }\r\n }\r\n\r\n getTransforms() {\r\n return [];\r\n }\r\n\r\n getSelector() {\r\n return this._selector;\r\n }\r\n\r\n getBoundaries() {\r\n return this._boundaries;\r\n }\r\n\r\n finalize() {\r\n }\r\n}\r\n\r\nexport default BiologicalUnit;\r\n","import * as THREE from 'three';\r\nimport selectors from './selectors';\r\nimport BiologicalUnit from './BiologicalUnit';\r\n\r\n/**\r\n * Biological assembly.\r\n *\r\n * @exports Assembly\r\n * @constructor\r\n */\r\n\r\nclass Assembly extends BiologicalUnit {\r\n constructor(complex) {\r\n super(complex);\r\n this.chains = [];\r\n this.matrices = [];\r\n }\r\n\r\n computeBoundaries() {\r\n super.computeBoundaries();\r\n // fix up the boundaries\r\n const { matrices } = this;\r\n const oldCenter = this._boundaries.boundingSphere.center;\r\n const oldRad = this._boundaries.boundingSphere.radius;\r\n const boundingBox = this._boundaries.boundingBox = new THREE.Box3();\r\n boundingBox.makeEmpty();\r\n for (let i = 0, n = matrices.length; i < n; ++i) {\r\n boundingBox.expandByPoint(oldCenter.clone().applyMatrix4(matrices[i]));\r\n }\r\n\r\n const newRad = boundingBox.max.distanceTo(boundingBox.min) / 2 + oldRad;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n this._boundaries.boundingSphere = new THREE.Sphere().set(center, newRad);\r\n boundingBox.max.addScalar(oldRad);\r\n boundingBox.min.subScalar(oldRad);\r\n }\r\n\r\n /**\r\n * Mark a chain as belonging to this biological assembly.\r\n * @param {string} chain - chain identifier, usually a single letter\r\n */\r\n addChain(chain) {\r\n this.chains[this.chains.length] = chain;\r\n }\r\n\r\n /**\r\n * Add a transformation matrix.\r\n * @param {THREE.Matrix4} matrix - transformation matrix\r\n */\r\n addMatrix(matrix) {\r\n this.matrices[this.matrices.length] = matrix;\r\n }\r\n\r\n getTransforms() {\r\n return this.matrices;\r\n }\r\n\r\n finalize() {\r\n if (this.chains.length > 0) {\r\n this._selector = selectors.keyword('Chain')(this.chains);\r\n } else {\r\n this._selector = selectors.keyword('None')();\r\n }\r\n }\r\n}\r\n\r\nexport default Assembly;\r\n","/**\r\n * This class represents connected component as a part of a complex.\r\n * WARNING! The whole component entity is build under the assumption that residues\r\n * are placed in the chains and complex in ascending order of indices\r\n *\r\n * @param {Complex} complex - Molecular complex this chain belongs to.\r\n *\r\n * @exports Component\r\n * @constructor\r\n */\r\nclass Component {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._index = -1;\r\n this._residueIndices = [];\r\n this._cycles = [];\r\n this._subDivs = [];\r\n this._residueCount = 0;\r\n }\r\n\r\n getResidues() {\r\n return this._complex._residues;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residueCount;\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._complex._residues;\r\n const resIdc = this._residueIndices;\r\n for (let idIdc = 0, idCount = resIdc.length; idIdc < idCount; ++idIdc) {\r\n for (let idx = resIdc[idIdc].start, last = resIdc[idIdc].end; idx <= last; ++idx) {\r\n process(residues[idx]);\r\n }\r\n }\r\n }\r\n\r\n setSubDivs(subDivs) {\r\n this._subDivs = subDivs;\r\n let curr = 0;\r\n const resIdc = [];\r\n let resCnt = 0;\r\n for (let i = 0, n = subDivs.length; i < n; ++i) {\r\n if (i === n - 1 || subDivs[i].end + 1 !== subDivs[i + 1].start) {\r\n const { start } = subDivs[curr];\r\n const { end } = subDivs[i];\r\n resIdc[resIdc.length] = {\r\n start,\r\n end,\r\n };\r\n resCnt += end - start + 1;\r\n curr = i + 1;\r\n }\r\n }\r\n\r\n this._residueIndices = resIdc;\r\n this._residueCount = resCnt;\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n forEachBond(process) {\r\n const bonds = this._complex._bonds;\r\n\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n const bond = bonds[i];\r\n if (bond._left.residue._component === this) {\r\n process(bond);\r\n }\r\n }\r\n }\r\n\r\n update() {\r\n this.forEachCycle((cycle) => {\r\n cycle.update();\r\n });\r\n }\r\n\r\n forEachAtom(process) {\r\n this.forEachResidue((residue) => {\r\n residue.forEachAtom(process);\r\n });\r\n }\r\n\r\n addCycle(cycle) {\r\n this._cycles.push(cycle);\r\n }\r\n\r\n forEachCycle(process) {\r\n const cycles = this._cycles;\r\n for (let i = 0, n = cycles.length; i < n; ++i) {\r\n process(cycles[i]);\r\n }\r\n }\r\n\r\n markResidues() {\r\n const self = this;\r\n self.forEachResidue((residue) => {\r\n residue._component = self;\r\n });\r\n }\r\n\r\n _forEachSubChain(mask, process) {\r\n const residues = this._complex._residues;\r\n const subs = this._subDivs;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n for (let idx = subs[i].start, last = subs[i].end; idx <= last; ++idx) {\r\n const currRes = residues[idx];\r\n if (mask & currRes._mask && currRes._isValid) {\r\n let end = idx + 1;\r\n for (; end <= last; ++end) {\r\n const endRes = residues[end];\r\n if (!(mask & endRes._mask && endRes._isValid)) {\r\n break;\r\n }\r\n }\r\n process(i, idx, end - 1);\r\n idx = end;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getMaskedSequences(mask) {\r\n const subs = [];\r\n let idx = 0;\r\n this._forEachSubChain(mask, (_subIdx, start, end) => {\r\n subs[idx++] = { start, end };\r\n });\r\n\r\n return subs;\r\n }\r\n\r\n getMaskedSubdivSequences(mask) {\r\n const subs = [];\r\n let currIdx = -1;\r\n let lastSubIdx = -1;\r\n const subDivs = this._subDivs;\r\n\r\n this._forEachSubChain(mask, (subIdx, start, end) => {\r\n if (lastSubIdx !== subIdx) {\r\n ++currIdx;\r\n subs[currIdx] = {\r\n arr: [],\r\n boundaries: subDivs[subIdx],\r\n };\r\n lastSubIdx = subIdx;\r\n }\r\n subs[currIdx].arr[subs[currIdx].arr.length] = { start, end };\r\n });\r\n\r\n return subs;\r\n }\r\n}\r\n\r\nexport default Component;\r\n","import utils from '../utils';\r\n\r\nconst cMaxPairsForHashCode = 32;\r\nconst cHashTableSize = 1024 * 1024;\r\nconst cNumbersPerPair = 4;\r\nconst cMaxNeighbours = 14;\r\nconst cInvalidVal = -1;\r\n// 89237 is a large simple number, can be used for pseudo random hash code create\r\nconst cBigPrime = 89237;\r\n\r\nclass AtomPairs {\r\n constructor(maxPairsEstimate) {\r\n this.numPairs = 0;\r\n this.numMaxPairs = maxPairsEstimate;\r\n this.intBuffer = utils.allocateTyped(Int32Array, maxPairsEstimate * cNumbersPerPair);\r\n for (let i = 0; i < maxPairsEstimate * cNumbersPerPair; i++) {\r\n this.intBuffer[i] = cInvalidVal;\r\n }\r\n this.hashBuffer = utils.allocateTyped(Int32Array, cHashTableSize * cMaxPairsForHashCode);\r\n for (let i = 0; i < cHashTableSize * cMaxPairsForHashCode; i++) {\r\n this.hashBuffer[i] = cInvalidVal;\r\n }\r\n }\r\n\r\n /**\r\n * Destroy all pairs memory\r\n */\r\n destroy() {\r\n this.intBuffer = null;\r\n this.hashBuffer = null;\r\n }\r\n\r\n /**\r\n * Add pair of atoms to collection\r\n * @param {number} indexA - Index of the 1st vertex.\r\n * @param {number} indexB - Index of the 2nd vertex.\r\n */\r\n addPair(indexA, indexB) {\r\n const ia = (indexA < indexB) ? indexA : indexB;\r\n const ib = (indexA > indexB) ? indexA : indexB;\r\n const codeToAdd = ia + (ib << cMaxNeighbours);\r\n\r\n const hashCode = (ia + (ib * cBigPrime)) & (cHashTableSize - 1);\r\n let j = hashCode * cMaxPairsForHashCode;\r\n let apI = 0;\r\n for (; apI < cMaxPairsForHashCode; apI++) {\r\n const code = this.hashBuffer[j + apI];\r\n if (code === cInvalidVal) {\r\n break;\r\n }\r\n if (code === codeToAdd) {\r\n return false;\r\n }\r\n }\r\n // add this new hash code\r\n if (apI >= cMaxPairsForHashCode) {\r\n throw new Error('addPair: increase cMaxPairsForHashCode');\r\n }\r\n this.hashBuffer[j + apI] = codeToAdd;\r\n\r\n // actually add\r\n if (this.numPairs >= this.numMaxPairs) {\r\n throw new Error('addPair: increase num pairs');\r\n }\r\n j = this.numPairs * cNumbersPerPair;\r\n this.intBuffer[j] = ia;\r\n this.intBuffer[j + 1] = ib;\r\n this.intBuffer[j + 2] = codeToAdd;\r\n this.numPairs++;\r\n return true;\r\n }\r\n}\r\n\r\nexport default AtomPairs;\r\n","import AtomPairs from './AtomPairs';\r\nimport Bond from './Bond';\r\n\r\nconst cProfileBondBuilder = false;\r\nconst cEstBondsMultiplier = 4;\r\nconst cSpaceCode = 32;\r\nconst cBondTolerance = 0.45;\r\nconst cVMDTolerance = 0.6;\r\nconst cBondRadInJMOL = true;\r\nconst cEpsilon = 0.001;\r\n\r\n/**\r\n * Get radius used for building bonds.\r\n *\r\n * @param {Atom} atom - Atom object.\r\n * @returns {number} special value for bonding radius for this atom\r\n */\r\nfunction _getBondingRadius(atom) {\r\n const { element } = atom;\r\n if (element) {\r\n return element.radiusBonding;\r\n }\r\n throw new Error('_getBondingRadius: Logic error.');\r\n}\r\n\r\nfunction _isAtomEligible(atom) {\r\n // build for all non-hetatm and for hetatm without bonds\r\n return !atom.isHet() || (atom.bonds && atom.bonds.length === 0);\r\n}\r\n\r\n/**\r\n * Bond between atoms.\r\n *\r\n * @param {Complex} complex molecular complex\r\n\r\n * @exports AutoBond\r\n * @constructor\r\n */\r\nclass AutoBond {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._maxRad = 1.8;\r\n const bBox = this._complex.getDefaultBoundaries().boundingBox;\r\n this._vBoxMin = bBox.min.clone();\r\n this._vBoxMax = bBox.max.clone();\r\n\r\n this._pairCollection = null;\r\n }\r\n\r\n /**\r\n * Add existing pairs of connectors (from pdb file after its reading)\r\n * @returns {number} 0\r\n */\r\n _addExistingPairs() {\r\n const atoms = this._complex.getAtoms();\r\n const numAtoms = atoms.length;\r\n let aInd = 0;\r\n const collection = this._pairCollection;\r\n\r\n for (; aInd < numAtoms; aInd++) {\r\n const { bonds } = atoms[aInd];\r\n const numBondsForAtom = bonds.length;\r\n for (let bInd = 0; bInd < numBondsForAtom; bInd++) {\r\n const bond = bonds[bInd];\r\n const indTo = bond._left.index;\r\n if (indTo === aInd) {\r\n collection.addPair(aInd, bond._right.index);\r\n }\r\n } // for (b) all bonds in atom\r\n } // for (a)\r\n return 0;\r\n }\r\n\r\n _findPairs() {\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return;\r\n }\r\n\r\n const atoms = this._complex._atoms;\r\n const atomsNum = atoms.length;\r\n const self = this;\r\n\r\n let rA;\r\n let isHydrogenA;\r\n let posA;\r\n let locationA;\r\n let atomA;\r\n\r\n const processAtom = function (atomB) {\r\n if (isHydrogenA && atomB.isHydrogen()) {\r\n return;\r\n }\r\n\r\n const locationB = atomB.location;\r\n if ((locationA !== cSpaceCode)\r\n && (locationB !== cSpaceCode)\r\n && (locationA !== locationB)) {\r\n return;\r\n }\r\n\r\n const dist2 = posA.distanceToSquared(atomB.position);\r\n const rB = atomB.element.radiusBonding;\r\n const maxAcceptable = cBondRadInJMOL ? rA + rB + cBondTolerance : cVMDTolerance * (rA + rB);\r\n\r\n if (dist2 > (maxAcceptable * maxAcceptable)) {\r\n return;\r\n }\r\n\r\n if (dist2 < cEpsilon) {\r\n return;\r\n }\r\n\r\n self._pairCollection.addPair(atomA.index, atomB.index);\r\n };\r\n\r\n for (let i = 0; i < atomsNum; ++i) {\r\n atomA = atoms[i];\r\n if (!_isAtomEligible(atomA)) {\r\n continue;\r\n }\r\n\r\n rA = atomA.element.radiusBonding;\r\n isHydrogenA = atomA.isHydrogen();\r\n posA = atomA.position;\r\n locationA = atomA.location;\r\n\r\n vw.forEachAtomWithinRadius(posA, 2 * this._maxRad + cBondTolerance, processAtom);\r\n }\r\n }\r\n\r\n _addPairs() {\r\n const atoms = this._complex._atoms;\r\n\r\n for (let i = 0, k = 0; i < this._pairCollection.numPairs; i++, k += 4) {\r\n const iA = this._pairCollection.intBuffer[k];\r\n const iB = this._pairCollection.intBuffer[k + 1];\r\n this._addPair(atoms[iA], atoms[iB]);\r\n }\r\n }\r\n\r\n _addPair(atomA, atomB) {\r\n const bondsA = atomA.bonds;\r\n const indexA = atomA.index;\r\n const indexB = atomB.index;\r\n for (let j = 0, numBonds = bondsA.length; j < numBonds; ++j) {\r\n const bond = bondsA[j];\r\n if (bond._left.index === indexB || bond._right.index === indexB) {\r\n return;\r\n }\r\n }\r\n const left = indexA < indexB ? atomA : atomB;\r\n const right = indexA < indexB ? atomB : atomA;\r\n const newBond = this._complex.addBond(left, right, 0, Bond.BondType.UNKNOWN, false);\r\n bondsA.push(newBond);\r\n atomB.bonds.push(newBond);\r\n }\r\n\r\n build() {\r\n if (cProfileBondBuilder) {\r\n console.time('Bonds Builder');\r\n }\r\n this._buildInner();\r\n\r\n if (cProfileBondBuilder) {\r\n console.timeEnd('Bonds Builder');\r\n }\r\n }\r\n\r\n _buildInner() {\r\n const atoms = this._complex._atoms;\r\n if (atoms.length < 2) {\r\n return;\r\n }\r\n if (atoms[0].index < 0) {\r\n throw new Error('AutoBond: Atoms in complex were not indexed.');\r\n }\r\n\r\n this._calcBoundingBox();\r\n this._pairCollection = new AtomPairs(atoms.length * cEstBondsMultiplier);\r\n this._addExistingPairs();\r\n this._findPairs();\r\n this._addPairs();\r\n }\r\n\r\n _calcBoundingBox() {\r\n const atoms = this._complex._atoms;\r\n const nAtoms = atoms.length;\r\n let maxRad = _getBondingRadius(atoms[0]);\r\n for (let i = 1; i < nAtoms; ++i) {\r\n maxRad = Math.max(maxRad, _getBondingRadius(atoms[i]));\r\n }\r\n this._vBoxMax.addScalar(maxRad);\r\n this._vBoxMin.addScalar(-maxRad);\r\n this._maxRad = maxRad * 1.2;\r\n }\r\n\r\n destroy() {\r\n if (this._pairCollection) {\r\n this._pairCollection.destroy();\r\n }\r\n }\r\n}\r\n\r\nexport default AutoBond;\r\n","import * as THREE from 'three';\r\nimport Bond from './Bond';\r\nimport Element from './Element';\r\n\r\nconst cCrossThresh = 0.1;\r\nconst cAromaticType = Bond.BondType.AROMATIC;\r\nconst cAromaticAtoms = [\r\n Element.ByName.C.number,\r\n Element.ByName.N.number,\r\n // Element.ByName.O.number,\r\n // Element.ByName.S.number,\r\n];\r\n\r\n/** Conditions for bonds:\r\n * - Cross product with each subsequent bond to add is collinear and point to the same direction\r\n * - Each pair of a adjacent bonds belong to not more than one cycle\r\n * - If there is more than one candidates we try them in ascending order of angle values\r\n */\r\n\r\nconst _coDirVectors = (function () {\r\n const v1Tmp = new THREE.Vector3();\r\n const v2Tmp = new THREE.Vector3();\r\n const cp = new THREE.Vector3();\r\n return function (v1, v2) {\r\n v1Tmp.copy(v1).normalize();\r\n v2Tmp.copy(v2).normalize();\r\n cp.crossVectors(v1Tmp, v2Tmp);\r\n if (cp.length() > cCrossThresh) {\r\n return false;\r\n }\r\n // zero vector in out terms must be collinear to any\r\n return v1Tmp.dot(v2Tmp) >= 0;\r\n };\r\n}());\r\n\r\nfunction _insertAscending(arr, val) {\r\n let idx = 0;\r\n while (idx < arr.length && arr[idx] < val) {\r\n ++idx;\r\n }\r\n arr.splice(idx, 0, val);\r\n}\r\n\r\nfunction _anotherAtom(bond, currAtom) {\r\n return bond._left === currAtom ? bond._right : bond._left;\r\n}\r\n\r\nfunction _cosBetween(v1, v2) {\r\n const theta = v1.dot(v2) / (Math.sqrt(v1.lengthSq() * v2.lengthSq()));\r\n return THREE.MathUtils.clamp(theta, -1, 1);\r\n}\r\n\r\nfunction _markAromatic(bond) {\r\n bond._type = cAromaticType;\r\n}\r\n\r\nclass Cycle {\r\n constructor(atomsList) {\r\n this.atoms = atomsList;\r\n this.update();\r\n }\r\n\r\n update() {\r\n const { atoms } = this;\r\n const center = new THREE.Vector3();\r\n const nA = atoms.length;\r\n for (let j = 0; j < nA; ++j) {\r\n center.add(atoms[j].position);\r\n }\r\n center.multiplyScalar(1.0 / nA);\r\n this.center = center;\r\n this.radius = center.distanceTo(atoms[0].position.clone().lerp(atoms[1].position, 0.5));\r\n }\r\n\r\n forEachBond(process) {\r\n const { atoms } = this;\r\n const nA = atoms.length;\r\n let currAtom = atoms[0];\r\n let nextAtom;\r\n\r\n function checkBond(bond) {\r\n if (bond._left === nextAtom || bond._right === nextAtom) {\r\n process(bond);\r\n }\r\n }\r\n\r\n for (let i = 0; i < nA; ++i) {\r\n nextAtom = atoms[(i + 1) % nA];\r\n currAtom.forEachBond(checkBond);\r\n currAtom = nextAtom;\r\n }\r\n }\r\n}\r\n\r\nfunction _isAromatic(bond) {\r\n return bond._type === cAromaticType;\r\n}\r\n\r\nfunction _isPossibleAromatic(bond) {\r\n if (bond.type === cAromaticType) {\r\n return true;\r\n }\r\n const rightIdx = cAromaticAtoms.indexOf(bond._right.element.number);\r\n const leftIdx = cAromaticAtoms.indexOf(bond._left.element.number);\r\n return rightIdx !== -1 && leftIdx !== -1;\r\n}\r\n\r\nfunction _checkCycleSimple(cycle) {\r\n return cycle.length > 3;\r\n}\r\n\r\nfunction _checkCycleComplex(cycle) {\r\n console.assert(cycle.length > 2);\r\n return true;\r\n}\r\n\r\nclass AromaticLoopsMarker {\r\n constructor(complex) {\r\n this._complex = complex;\r\n const bondsData = new Array(complex._bonds.length);\r\n const bondMarks = new Array(complex._bonds.length);\r\n for (let i = 0, n = bondsData.length; i < n; ++i) {\r\n bondsData[i] = [];\r\n bondMarks[i] = false;\r\n }\r\n this._bondsData = bondsData;\r\n this._bondMarks = bondMarks;\r\n this._resetCycles();\r\n }\r\n\r\n _resetCycles() {\r\n this._cycles = [];\r\n this._currIdx = -1;\r\n }\r\n\r\n _haveSameCycle(bondsData, bond1, bond2) {\r\n const arr1 = bondsData[bond1._index];\r\n const arr2 = bondsData[bond2._index];\r\n const n1 = arr1.length;\r\n const n2 = arr2.length;\r\n let i1 = 0;\r\n let i2 = 0;\r\n while (i1 < n1 && i2 < n2) {\r\n if (arr1[i1] === arr2[i2]) {\r\n return true;\r\n }\r\n if (arr1[i1] > arr2[i2]) {\r\n ++i2;\r\n } else {\r\n ++i1;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n _tryBond(prevBond, currRight, currDir) {\r\n const bondsOrder = [];\r\n const bondsData = this._bondsData;\r\n const currLeft = _anotherAtom(prevBond, currRight);\r\n const currVec = currRight.position.clone().sub(currLeft.position);\r\n const startAtomRef = this._currStart;\r\n const self = this;\r\n const bondMarks = this._bondMarks;\r\n let checkAromatic = this._checkBond;\r\n bondMarks[prevBond._index] = true;\r\n checkAromatic = checkAromatic === undefined ? _isAromatic : checkAromatic;\r\n currRight.forEachBond((newBond) => {\r\n if (!checkAromatic(newBond)\r\n || newBond === prevBond\r\n || bondMarks[newBond._index]\r\n || self._haveSameCycle(bondsData, prevBond, newBond)) {\r\n return;\r\n }\r\n const anotherAtom = _anotherAtom(newBond, currRight);\r\n const anotherVec = anotherAtom.position.clone().sub(currRight.position);\r\n const val = anotherAtom === startAtomRef ? -2.0 : 1 - _cosBetween(currVec, anotherVec);\r\n const newDir = anotherVec.cross(currVec);\r\n if (!_coDirVectors(newDir, currDir)) {\r\n return;\r\n }\r\n let idx = 0;\r\n while (idx < bondsOrder.length && bondsOrder[idx].val < val) {\r\n ++idx;\r\n }\r\n bondsOrder.splice(idx, 0, { bond: newBond, val, dir: newDir });\r\n });\r\n\r\n for (let i = 0, n = bondsOrder.length; i < n; ++i) {\r\n const { bond } = bondsOrder[i];\r\n const newRight = bond._left === currRight ? bond._right : bond._left;\r\n if (newRight === startAtomRef) {\r\n ++this._currIdx;\r\n this._cycles.push([currRight]);\r\n bondMarks[prevBond._index] = false;\r\n return true;\r\n }\r\n if (this._tryBond(bond, newRight, bondsOrder[i].dir)) {\r\n _insertAscending(bondsData[bond._index], this._currIdx);\r\n this._cycles[this._currIdx].push(currRight);\r\n bondMarks[prevBond._index] = false;\r\n return true;\r\n }\r\n }\r\n bondMarks[prevBond._index] = false;\r\n return false;\r\n }\r\n\r\n _startCycle(bond) {\r\n // start from left to right\r\n this._currStart = bond._left;\r\n if (this._tryBond(bond, bond._right, new THREE.Vector3())) {\r\n _insertAscending(this._bondsData[bond._index], this._currIdx);\r\n this._cycles[this._currIdx].push(bond._left);\r\n }\r\n }\r\n\r\n _findLoops(checkBond, checkCycle) {\r\n this._checkBond = checkBond;\r\n const complex = this._complex;\r\n const self = this;\r\n\r\n complex.forEachComponent((component) => {\r\n self._resetCycles();\r\n component.forEachBond((bond) => {\r\n if (checkBond(bond)) {\r\n self._startCycle(bond);\r\n }\r\n });\r\n const cycles = self._cycles;\r\n for (let i = 0, n = cycles.length; i < n; ++i) {\r\n const cycle = cycles[i];\r\n if (!checkCycle(cycle)) {\r\n continue;\r\n }\r\n const newCycle = new Cycle(cycle);\r\n newCycle.forEachBond(_markAromatic);\r\n component.addCycle(newCycle);\r\n }\r\n });\r\n }\r\n\r\n markCycles() {\r\n this._findLoops(_isAromatic, _checkCycleSimple);\r\n }\r\n\r\n detectCycles() {\r\n this._findLoops(_isPossibleAromatic, _checkCycleComplex);\r\n }\r\n}\r\n\r\nexport default AromaticLoopsMarker;\r\n","import * as THREE from 'three';\r\nimport utils from '../utils';\r\n\r\n/**\r\n * Calculate min & max radius of a sphere slice between zMin & zMax\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {number} zMin - lower bound of the slice\r\n * @param {number} zMax - upper bound of the slice\r\n */\r\nfunction _getSphereSliceRadiusRange(center, radius, zMin, zMax) {\r\n const dzMin = zMin - center.z;\r\n const dzMax = zMax - center.z;\r\n const rzMin = Math.sqrt(Math.max(radius * radius - dzMin * dzMin, 0.0));\r\n const rzMax = Math.sqrt(Math.max(radius * radius - dzMax * dzMax, 0.0));\r\n\r\n const rMin = Math.min(rzMin, rzMax);\r\n let rMax;\r\n\r\n if (zMin <= center.z && zMax >= center.z) {\r\n // sphere's main diameter is inside slice\r\n rMax = radius;\r\n } else {\r\n rMax = Math.max(rzMin, rzMax);\r\n }\r\n\r\n return [rMin, rMax];\r\n}\r\n\r\n/**\r\n * Calculate min & max radius of a circle slice between yMin & yMax.\r\n *\r\n * To maintain analogy with _getSphereSliceRadiusRange we call radius what in fact is\r\n * half-width (along X axis) of the slice, i.e. 1D-sphere radius.\r\n *\r\n * @param {Vector3} center - center of the circle (z can be ignored)\r\n * @param {number} radius - circle radius\r\n * @param {number} yMin - lower bound of the slice\r\n * @param {number} yMax - upper bound of the slice\r\n * @returns {Array} - array of two numbers (min & max radius, or half-width)\r\n */\r\nfunction _getCircleSliceRadiusRange(center, radius, yMin, yMax) {\r\n const dyMin = yMin - center.y;\r\n const dyMax = yMax - center.y;\r\n const ryMin = Math.sqrt(Math.max(radius * radius - dyMin * dyMin, 0.0));\r\n const ryMax = Math.sqrt(Math.max(radius * radius - dyMax * dyMax, 0.0));\r\n\r\n const rMin = Math.min(ryMin, ryMax);\r\n let rMax;\r\n\r\n if (yMin <= center.y && yMax >= center.y) {\r\n // slice's main diameter is inside slice\r\n rMax = radius;\r\n } else {\r\n rMax = Math.max(ryMin, ryMax);\r\n }\r\n\r\n return [rMin, rMax];\r\n}\r\n\r\n/**\r\n * VoxelWorld constructor\r\n *\r\n * @param {Box3} box - bounding box of the volume to be partitioned\r\n * @param {Vector3} vCellSizeHint - target voxel size (actual voxel size may differ from this)\r\n */\r\nclass VoxelWorld {\r\n constructor(box, vCellSizeHint) {\r\n this._box = box.clone();\r\n const size = new THREE.Vector3();\r\n box.getSize(size);\r\n this._count = size.clone().divide(vCellSizeHint).floor().max(new THREE.Vector3(1, 1, 1));\r\n this._last = this._count.clone().subScalar(1);\r\n this._cellSize = size.clone().divide(this._count);\r\n this._cellInnerR = 0.5 * Math.min(Math.min(this._cellSize.x, this._cellSize.y), this._cellSize.z);\r\n this._cellOuterR = 0.5 * Math.sqrt(this._cellSize.dot(this._cellSize));\r\n\r\n // array of voxels, each element contains index of first atom in voxel\r\n const numVoxels = this._count.x * this._count.y * this._count.z;\r\n this._voxels = utils.allocateTyped(Int32Array, numVoxels);\r\n for (let i = 0; i < numVoxels; ++i) {\r\n this._voxels[i] = -1;\r\n }\r\n\r\n // array of atoms that stores multiple single-linked lists\r\n // two elements for each atom: Atom ref, index of next atom (in this array\r\n this._atoms = [];\r\n }\r\n\r\n /**\r\n * Add all atoms from a complex to voxel world\r\n *\r\n * @param {Complex} complex - complex\r\n */\r\n addAtoms(complex) {\r\n const self = this;\r\n\r\n let idx = this._atoms.length;\r\n\r\n // resize array of atoms\r\n this._atoms.length += 2 * complex.getAtomCount();\r\n\r\n complex.forEachAtom((atom) => {\r\n // find which voxel contains this atom\r\n const voxelIdx = self._findVoxel(atom.position);\r\n\r\n // push current atom to the head of voxel's atom list\r\n self._atoms[idx] = atom;\r\n self._atoms[idx + 1] = self._voxels[voxelIdx];\r\n self._voxels[voxelIdx] = idx;\r\n\r\n idx += 2;\r\n });\r\n }\r\n\r\n /**\r\n * Get voxel that contains specified 3D point (we use clamp at the edges)\r\n *\r\n * @param {Vector3} point - a point in 3D\r\n * @returns {number} - index of voxel\r\n */\r\n static _zero = new THREE.Vector3(0, 0, 0);\r\n\r\n static _voxel = new THREE.Vector3();\r\n\r\n _findVoxel(point) {\r\n const zero = VoxelWorld._zero;\r\n const voxel = VoxelWorld._voxel;\r\n voxel.copy(point)\r\n .sub(this._box.min)\r\n .divide(this._cellSize)\r\n .floor()\r\n .clamp(zero, this._last);\r\n return voxel.x + this._count.x * (voxel.y + this._count.y * voxel.z);\r\n }\r\n\r\n /**\r\n * Call a function for each atom in voxel\r\n *\r\n * @param {number} voxel - index of voxel\r\n * @param {function(Atom)} process - function to call\r\n */\r\n _forEachAtomInVoxel(voxel, process) {\r\n for (let i = this._voxels[voxel]; i >= 0; i = this._atoms[i + 1]) {\r\n process(this._atoms[i]);\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each voxel that is touched by given sphere. Callback also takes flag\r\n * isInside specifying whether voxel lies inside the sphere entirely.\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside\r\n */\r\n\r\n static _xRange = new THREE.Vector2();\r\n\r\n static _yRange = new THREE.Vector2();\r\n\r\n static _zRange = new THREE.Vector2();\r\n\r\n _forEachVoxelWithinRadius(center, radius, process) {\r\n const xRange = VoxelWorld._xRange;\r\n const yRange = VoxelWorld._yRange;\r\n const zRange = VoxelWorld._zRange;\r\n\r\n // switch to a faster method unless cell size is much smaller than sphere radius\r\n if (radius / this._cellInnerR < 10) {\r\n this._forEachVoxelWithinRadiusSimple(center, radius, process);\r\n return;\r\n }\r\n\r\n let rRangeXY;\r\n let rRangeX;\r\n let xVal;\r\n let yVal;\r\n let zVal;\r\n let isInsideX;\r\n let isInsideY;\r\n let isInsideZ;\r\n\r\n zRange.set(center.z - radius, center.z + radius);\r\n zRange.subScalar(this._box.min.z)\r\n .divideScalar(this._cellSize.z)\r\n .floor()\r\n .clampScalar(0, this._count.z - 1);\r\n\r\n for (let z = zRange.x; z <= zRange.y; ++z) {\r\n zVal = [this._box.min.z + z * this._cellSize.z,\r\n this._box.min.z + (z + 1) * this._cellSize.z];\r\n\r\n isInsideZ = (center.z - radius <= zVal[0]) && (zVal[1] <= center.z + radius);\r\n\r\n rRangeXY = _getSphereSliceRadiusRange(center, radius, zVal[0], zVal[1]);\r\n\r\n yRange.set(center.y - rRangeXY[1], center.y + rRangeXY[1]);\r\n yRange.subScalar(this._box.min.y)\r\n .divideScalar(this._cellSize.y)\r\n .floor()\r\n .clampScalar(0, this._count.y - 1);\r\n\r\n for (let y = yRange.x; y <= yRange.y; ++y) {\r\n yVal = [this._box.min.y + y * this._cellSize.y,\r\n this._box.min.y + (y + 1) * this._cellSize.y];\r\n\r\n isInsideY = (center.y - rRangeXY[0] <= yVal[0]) && (yVal[1] <= center.y + rRangeXY[0]);\r\n\r\n rRangeX = _getCircleSliceRadiusRange(center, rRangeXY[1], yVal[0], yVal[1]);\r\n\r\n xRange.set(center.x - rRangeX[1], center.x + rRangeX[1]);\r\n xRange.subScalar(this._box.min.x)\r\n .divideScalar(this._cellSize.x)\r\n .floor()\r\n .clampScalar(0, this._count.x - 1);\r\n\r\n for (let { x } = xRange; x <= xRange.y; ++x) {\r\n xVal = [this._box.min.x + x * this._cellSize.x,\r\n this._box.min.x + (x + 1) * this._cellSize.x];\r\n isInsideX = (center.x - rRangeX[0] <= xVal[0]) && (xVal[1] <= center.x + rRangeX[0]);\r\n\r\n process(x + this._count.x * (y + this._count.y * z), isInsideX && isInsideY && isInsideZ);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each voxel that is touched by given sphere. Callback also takes flag\r\n * isInside specifying whether voxel lies inside the sphere entirely.\r\n * This is a version of method that doesn't try to \"calculate\" what voxels fall inside radius\r\n * but instead just checks all voxels inside sphere's bounding box. This should be faster\r\n * unless cell size is much smaller than sphere radius.\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside\r\n */\r\n\r\n static _vCenter = new THREE.Vector3();\r\n\r\n _forEachVoxelWithinRadiusSimple(center, radius, process) {\r\n const xRange = VoxelWorld._xRange;\r\n const yRange = VoxelWorld._yRange;\r\n const zRange = VoxelWorld._zRange;\r\n const vCenter = VoxelWorld._vCenter;\r\n\r\n const distTouch2 = (radius + this._cellOuterR) * (radius + this._cellOuterR);\r\n let distInside2 = -1.0;\r\n if (radius > this._cellOuterR) {\r\n distInside2 = (radius - this._cellOuterR) * (radius - this._cellOuterR);\r\n }\r\n\r\n // calculate bounding box for the sphere\r\n xRange.set(center.x - radius, center.x + radius);\r\n xRange.subScalar(this._box.min.x)\r\n .divideScalar(this._cellSize.x)\r\n .floor();\r\n xRange.x = Math.min(Math.max(xRange.x, 0), this._count.x - 1);\r\n xRange.y = Math.min(Math.max(xRange.y, 0), this._count.x - 1);\r\n\r\n yRange.set(center.y - radius, center.y + radius);\r\n yRange.subScalar(this._box.min.y)\r\n .divideScalar(this._cellSize.y)\r\n .floor();\r\n yRange.x = Math.min(Math.max(yRange.x, 0), this._count.y - 1);\r\n yRange.y = Math.min(Math.max(yRange.y, 0), this._count.y - 1);\r\n\r\n zRange.set(center.z - radius, center.z + radius);\r\n zRange.subScalar(this._box.min.z)\r\n .divideScalar(this._cellSize.z)\r\n .floor();\r\n zRange.x = Math.min(Math.max(zRange.x, 0), this._count.z - 1);\r\n zRange.y = Math.min(Math.max(zRange.y, 0), this._count.z - 1);\r\n\r\n for (let z = zRange.x; z <= zRange.y; ++z) {\r\n const zVal = [this._box.min.z + z * this._cellSize.z,\r\n this._box.min.z + (z + 1) * this._cellSize.z];\r\n vCenter.z = 0.5 * (zVal[0] + zVal[1]);\r\n\r\n for (let y = yRange.x; y <= yRange.y; ++y) {\r\n const yVal = [this._box.min.y + y * this._cellSize.y,\r\n this._box.min.y + (y + 1) * this._cellSize.y];\r\n vCenter.y = 0.5 * (yVal[0] + yVal[1]);\r\n\r\n for (let { x } = xRange; x <= xRange.y; ++x) {\r\n const xVal = [this._box.min.x + x * this._cellSize.x,\r\n this._box.min.x + (x + 1) * this._cellSize.x];\r\n vCenter.x = 0.5 * (xVal[0] + xVal[1]);\r\n\r\n const d2 = center.distanceToSquared(vCenter);\r\n if (d2 <= distTouch2) {\r\n process(x + this._count.x * (y + this._count.y * z), d2 <= distInside2);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each atom within given sphere\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinRadius(center, radius, process) {\r\n const self = this;\r\n const r2 = radius * radius;\r\n\r\n self._forEachVoxelWithinRadius(center, radius, (voxel, isInside) => {\r\n if (isInside) {\r\n self._forEachAtomInVoxel(voxel, process);\r\n } else {\r\n self._forEachAtomInVoxel(voxel, (atom) => {\r\n if (center.distanceToSquared(atom.position) <= r2) {\r\n process(atom);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms defined by mask\r\n *\r\n * @param {Complex} complex - complex\r\n * @param {number} mask - bit mask\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinDistFromMasked(complex, mask, dist, process) {\r\n this._forEachAtomWithinDistFromGroup((atomProc) => {\r\n complex.forEachAtom((atom) => {\r\n if ((atom.mask & mask) !== 0) {\r\n atomProc(atom);\r\n }\r\n });\r\n }, dist, process);\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms defined by selector\r\n *\r\n * @param {Complex} complex - complex\r\n * @param {number} selector - selector\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinDistFromSelected(complex, selector, dist, process) {\r\n this._forEachAtomWithinDistFromGroup((atomProc) => {\r\n complex.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom)) {\r\n atomProc(atom);\r\n }\r\n });\r\n }, dist, process);\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms\r\n *\r\n * @param {function} forEachAtom - enumerator of atoms in the group\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n _forEachAtomWithinDistFromGroup(forEachAtom, dist, process) {\r\n const self = this;\r\n const r2 = dist * dist;\r\n\r\n const voxels = [];\r\n const atoms = [];\r\n let idx = 0;\r\n\r\n // build \"within radius\" atom list for each voxel\r\n forEachAtom((atom) => {\r\n self._forEachVoxelWithinRadius(atom.position, dist, (voxel, isInside) => {\r\n if (isInside) {\r\n // this voxel is inside circle -- no check will be required\r\n voxels[voxel] = -1;\r\n } else if (typeof voxels[voxel] === 'undefined') {\r\n // this voxel isn't covered yet -- start building list of atoms\r\n atoms.push(atom);\r\n atoms.push(-1);\r\n voxels[voxel] = idx;\r\n idx += 2;\r\n } else if (voxels[voxel] !== -1) {\r\n // this voxel has a list of atoms required for distance check -- add atom to the list\r\n atoms.push(atom);\r\n atoms.push(voxels[voxel]);\r\n voxels[voxel] = idx;\r\n idx += 2;\r\n }\r\n });\r\n });\r\n\r\n let voxel;\r\n\r\n const processIfWithin = function (atom) {\r\n if (typeof voxels[voxel] === 'undefined') {\r\n return;\r\n }\r\n\r\n idx = voxels[voxel];\r\n if (idx === -1) {\r\n // this voxel is fully covered\r\n process(atom);\r\n return;\r\n }\r\n\r\n // check distance to each atom within radius from this voxel\r\n for (; idx >= 0; idx = atoms[idx + 1]) {\r\n if (atom.position.distanceToSquared(atoms[idx].position) < r2) {\r\n process(atom);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n // for each marked voxel\r\n for (voxel in voxels) {\r\n if (voxels.hasOwnProperty(voxel)) {\r\n self._forEachAtomInVoxel(voxel, processIfWithin);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default VoxelWorld;\r\n","import ResidueType from './ResidueType';\r\nimport PairCollection from './AtomPairs';\r\n\r\nconst MINIMAL_DISTANCE = 0.5;\r\nconst MIN_HBOND_ENERGY = -9.9;\r\nconst MAX_HBOND_ENERGY = -0.5;\r\nconst COUPLING_CONSTANT = -27.888; // = -332 * 0.42 * 0.2\r\nconst MAX_COUPLING_DISTANCE = 5.0; // how far is the closest atom of a potential partner residue from CA atom\r\nconst MAX_RESIDUES_THRESHOLD = 1000;\r\n\r\nexport default class HBondInfo {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._hbonds = []; // array of bond info for each residue\r\n if (this._complex._residues.length > MAX_RESIDUES_THRESHOLD) {\r\n this._buildVW(); // optimized version using voxel grid\r\n } else {\r\n this._build(); // test all pairs of residues\r\n }\r\n }\r\n\r\n isBond(from, to) {\r\n if (this._hbonds[from]) {\r\n const [acc0, acc1] = this._hbonds[from].acceptor;\r\n if (acc0 && acc0.residue === to && acc0.energy < MAX_HBOND_ENERGY) {\r\n return true;\r\n }\r\n if (acc1 && acc1.residue === to && acc1.energy < MAX_HBOND_ENERGY) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n _build() {\r\n const self = this;\r\n\r\n for (let i = 0; i < this._complex._residues.length - 1; ++i) {\r\n const ri = this._complex._residues[i];\r\n if ((ri.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n let preri = null;\r\n if (i > 0 && (this._complex._residues[i - 1].getType().flags & ResidueType.Flags.PROTEIN)\r\n && ri._sequence === this._complex._residues[i - 1]._sequence + 1) {\r\n preri = this._complex._residues[i - 1];\r\n }\r\n\r\n for (let j = i + 1; j < this._complex._residues.length; ++j) {\r\n const rj = this._complex._residues[j];\r\n if ((rj.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n let prerj = null;\r\n if ((this._complex._residues[j - 1].getType().flags & ResidueType.Flags.PROTEIN)\r\n && rj._sequence === this._complex._residues[j - 1]._sequence + 1) {\r\n prerj = this._complex._residues[j - 1];\r\n }\r\n\r\n self._calcHBondEnergy(preri, ri, rj);\r\n if (j !== i + 1) {\r\n self._calcHBondEnergy(prerj, rj, ri);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _buildVW() {\r\n const self = this;\r\n const residues = this._complex._residues;\r\n let ri;\r\n let preri;\r\n\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return;\r\n }\r\n\r\n const pairs = new PairCollection(this._complex._residues.length * this._complex._residues.length / 2);\r\n\r\n function processAtom(atom) {\r\n const rj = atom.residue;\r\n\r\n if (rj._index === ri._index) {\r\n return;\r\n }\r\n\r\n if ((rj.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n return;\r\n }\r\n\r\n if (!pairs.addPair(ri._index, rj._index)) {\r\n // we've seen this pair\r\n return;\r\n }\r\n\r\n // get predecessor in chain\r\n let prerj = rj._index > 0 ? residues[rj._index - 1] : null;\r\n if (prerj\r\n && ((prerj.getType().flags & ResidueType.Flags.PROTEIN) === 0 || rj._sequence !== prerj._sequence + 1)) {\r\n prerj = null;\r\n }\r\n\r\n self._calcHBondEnergy(preri, ri, rj);\r\n if (rj._index !== ri._index + 1) {\r\n self._calcHBondEnergy(prerj, rj, ri);\r\n }\r\n }\r\n\r\n for (let i = 0; i < residues.length - 1; ++i) {\r\n ri = residues[i];\r\n if ((ri.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n preri = i > 0 ? residues[i - 1] : null;\r\n if (preri\r\n && ((preri.getType().flags & ResidueType.Flags.PROTEIN) === 0 || ri._sequence !== preri._sequence + 1)) {\r\n preri = null;\r\n }\r\n\r\n vw.forEachAtomWithinRadius(this._residueGetCAlpha(ri), MAX_COUPLING_DISTANCE, processAtom);\r\n }\r\n }\r\n\r\n _residueGetCAlpha(res) {\r\n for (let i = 0; i < res._atoms.length; ++i) {\r\n const { name } = res._atoms[i];\r\n if (name === 'CA'\r\n || name === 'C1') {\r\n return res._atoms[i].position;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _residueGetCO(res) {\r\n let c = null;\r\n let o = null;\r\n\r\n res.forEachAtom((a) => {\r\n if (a.name === 'C') {\r\n c = a.position;\r\n } else if (a.name === 'O') {\r\n o = a.position;\r\n }\r\n });\r\n\r\n return [c, o];\r\n }\r\n\r\n // TODO Support hydrogen defined in complex\r\n _residueGetNH(prev, res) {\r\n const [c, o] = this._residueGetCO(prev);\r\n\r\n let n;\r\n res.forEachAtom((a) => {\r\n if (a.name === 'N') {\r\n n = a.position;\r\n }\r\n });\r\n\r\n if (c && o && n) {\r\n // calculate hydrogen position\r\n const h = c.clone();\r\n h.sub(o);\r\n h.multiplyScalar(1.0 / h.length());\r\n h.add(n);\r\n\r\n return [n, h];\r\n }\r\n\r\n return [null, null];\r\n }\r\n\r\n _calcHBondEnergy(predonor, donor, acceptor) {\r\n let result = 0;\r\n\r\n if (predonor === null) {\r\n return result;\r\n }\r\n\r\n if (donor.getType().getName() !== 'PRO') {\r\n const [n, h] = this._residueGetNH(predonor, donor);\r\n const [c, o] = this._residueGetCO(acceptor);\r\n\r\n if (n === null || h === null || c === null || o === null) {\r\n return result;\r\n }\r\n\r\n const distanceHO = h.distanceTo(o);\r\n const distanceHC = h.distanceTo(c);\r\n const distanceNC = n.distanceTo(c);\r\n const distanceNO = n.distanceTo(o);\r\n\r\n if (distanceHO < MINIMAL_DISTANCE || distanceHC < MINIMAL_DISTANCE\r\n || distanceNC < MINIMAL_DISTANCE || distanceNO < MINIMAL_DISTANCE) {\r\n result = MIN_HBOND_ENERGY;\r\n } else {\r\n result = COUPLING_CONSTANT / distanceHO - COUPLING_CONSTANT / distanceHC\r\n + COUPLING_CONSTANT / distanceNC - COUPLING_CONSTANT / distanceNO;\r\n }\r\n\r\n // DSSP compatibility mode:\r\n result = Math.round(result * 1000) / 1000;\r\n\r\n if (result < MIN_HBOND_ENERGY) {\r\n result = MIN_HBOND_ENERGY;\r\n }\r\n }\r\n\r\n // update donor\r\n if (typeof this._hbonds[donor._index] === 'undefined') {\r\n this._hbonds[donor._index] = {\r\n donor: [],\r\n acceptor: [],\r\n };\r\n }\r\n const donorInfo = this._hbonds[donor._index];\r\n\r\n if (donorInfo.acceptor.length < 2) {\r\n donorInfo.acceptor.push({\r\n residue: acceptor._index,\r\n energy: result,\r\n });\r\n }\r\n\r\n if (donorInfo.acceptor.length > 1) {\r\n if (result < donorInfo.acceptor[0].energy) {\r\n donorInfo.acceptor[1].residue = donorInfo.acceptor[0].residue;\r\n donorInfo.acceptor[1].energy = donorInfo.acceptor[0].energy;\r\n donorInfo.acceptor[0].residue = acceptor._index;\r\n donorInfo.acceptor[0].energy = result;\r\n } else if (result < donorInfo.acceptor[1].energy) {\r\n donorInfo.acceptor[1].residue = acceptor._index;\r\n donorInfo.acceptor[1].energy = result;\r\n }\r\n }\r\n\r\n // update acceptor\r\n if (typeof this._hbonds[acceptor._index] === 'undefined') {\r\n this._hbonds[acceptor._index] = {\r\n donor: [],\r\n acceptor: [],\r\n };\r\n }\r\n const accInfo = this._hbonds[acceptor._index];\r\n\r\n if (accInfo.donor.length < 2) {\r\n accInfo.donor.push({\r\n residue: donor._index,\r\n energy: result,\r\n });\r\n }\r\n\r\n if (accInfo.donor.length > 1) {\r\n if (result < accInfo.donor[0].energy) {\r\n accInfo.donor[1].residue = accInfo.donor[0].residue;\r\n accInfo.donor[1].energy = accInfo.donor[0].energy;\r\n accInfo.donor[0].residue = donor._index;\r\n accInfo.donor[0].energy = result;\r\n } else if (result < accInfo.donor[1].energy) {\r\n accInfo.donor[1].residue = donor._index;\r\n accInfo.donor[1].energy = result;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import HBondInfo from './HBondInfo';\r\nimport ResidueType from './ResidueType';\r\n\r\nconst BridgeType = Object.freeze({\r\n NO_BRIDGE: 0,\r\n PARALLEL: 1,\r\n ANTI_PARALLEL: 2,\r\n});\r\n\r\nconst HelixFlag = Object.freeze({\r\n START: 1,\r\n MIDDLE: 2,\r\n END: 3,\r\n START_AND_END: 4,\r\n});\r\n\r\nconst StructureType = Object.freeze({\r\n STRAND: 'E',\r\n BRIDGE: 'B',\r\n HELIX_310: 'G',\r\n HELIX_ALPHA: 'H',\r\n HELIX_PI: 'I',\r\n TURN: 'T',\r\n BEND: 'S',\r\n LOOP: ' ',\r\n});\r\n\r\nexport default class SecondaryStructureMap {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._build();\r\n }\r\n\r\n _build() {\r\n const self = this;\r\n this._hbonds = new HBondInfo(this._complex);\r\n this._ss = []; // DSSP map by residue\r\n\r\n // auxilliary data\r\n this._sheet = [];\r\n this._betaPartners = [];\r\n this._bend = [];\r\n for (let i = 0; i < this._complex.getResidues().length; ++i) {\r\n this._betaPartners[i] = [];\r\n }\r\n this._helixFlags = [];\r\n this._helixFlags[3] = [];\r\n this._helixFlags[4] = [];\r\n this._helixFlags[5] = [];\r\n\r\n // calculate peptide chain lengths\r\n this._chainLengths = [];\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i].getResidues();\r\n let len = 0;\r\n for (; len < chain.length; ++len) {\r\n if ((chain[len].getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n break;\r\n }\r\n }\r\n this._chainLengths[i] = len;\r\n }\r\n\r\n this._buildBetaSheets();\r\n\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n self._buildAlphaHelices(this._complex._chains[i].getResidues(), this._chainLengths[i], false);\r\n }\r\n }\r\n\r\n _buildAlphaHelices(inResidues, chainLength, inPreferPiHelices) {\r\n // Helix and Turn\r\n for (let stride = 3; stride <= 5; ++stride) {\r\n if (inResidues.length < stride) {\r\n break;\r\n }\r\n\r\n for (let i = 0; i + stride < chainLength; ++i) {\r\n if (this._hbonds.isBond(inResidues[i + stride]._index, inResidues[i]._index)\r\n /* && NoChainBreak(res[i], res[i + stride]) */) {\r\n this._helixFlags[stride][inResidues[i + stride]._index] = HelixFlag.END;\r\n for (let j = i + 1; j < i + stride; ++j) {\r\n if (typeof this._helixFlags[stride][inResidues[j]._index] === 'undefined') {\r\n this._helixFlags[stride][inResidues[j]._index] = HelixFlag.MIDDLE;\r\n }\r\n }\r\n\r\n if (this._helixFlags[stride][inResidues[i]._index] === HelixFlag.END) {\r\n this._helixFlags[stride][inResidues[i]._index] = HelixFlag.START_AND_END;\r\n } else {\r\n this._helixFlags[stride][inResidues[i]._index] = HelixFlag.START;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 2; i < chainLength - 2; ++i) {\r\n const kappa = this._kappa(inResidues[i - 2], inResidues[i], inResidues[i + 2]);\r\n this._bend[inResidues[i]._index] = (kappa !== 360 && kappa > 70);\r\n }\r\n\r\n for (let i = 1; i + 4 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 4) && this._isHelixStart(inResidues[i - 1]._index, 4)) {\r\n for (let j = i; j <= i + 3; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_ALPHA;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 3 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 3) && this._isHelixStart(inResidues[i - 1]._index, 3)) {\r\n let empty = true;\r\n for (let j = i; empty && j <= i + 2; ++j) {\r\n empty = typeof this._ss[inResidues[j]._index] === 'undefined'\r\n || this._ss[inResidues[j]._index] === StructureType.HELIX_310;\r\n }\r\n if (empty) {\r\n for (let j = i; j <= i + 2; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_310;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 5 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 5) && this._isHelixStart(inResidues[i - 1]._index, 5)) {\r\n let empty = true;\r\n for (let j = i; empty && j <= i + 4; ++j) {\r\n empty = typeof this._ss[inResidues[j]._index] === 'undefined'\r\n || this._ss[inResidues[j]._index] === StructureType.HELIX_PI\r\n || (inPreferPiHelices && this._ss[inResidues[j]._index] === StructureType.HELIX_ALPHA);\r\n }\r\n if (empty) {\r\n for (let j = i; j <= i + 4; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_PI;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 1 < chainLength; ++i) {\r\n if (typeof this._ss[inResidues[i]._index] === 'undefined') {\r\n let isTurn = false;\r\n for (let stride = 3; stride <= 5 && !isTurn; ++stride) {\r\n for (let k = 1; k < stride && !isTurn; ++k) {\r\n isTurn = (i >= k) && this._isHelixStart(inResidues[i - k]._index, stride);\r\n }\r\n }\r\n\r\n if (isTurn) {\r\n this._ss[inResidues[i]._index] = StructureType.TURN;\r\n } else if (this._bend[inResidues[i]._index]) {\r\n this._ss[inResidues[i]._index] = StructureType.BEND;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _residueGetCAlpha(res) {\r\n for (let i = 0; i < res._atoms.length; ++i) {\r\n const { name } = res._atoms[i];\r\n if (name === 'CA'\r\n || name === 'C1') {\r\n return res._atoms[i].position;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _cosinusAngle(p1, p2, p3, p4) {\r\n const v12 = p1.clone().sub(p2);\r\n const v34 = p3.clone().sub(p4);\r\n\r\n let result = 0;\r\n\r\n const x = v12.dot(v12) * v34.dot(v34);\r\n if (x > 0) {\r\n result = v12.dot(v34) / Math.sqrt(x);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _kappa(prevPrev, res, nextNext) {\r\n const curCA = this._residueGetCAlpha(res);\r\n const ppCA = this._residueGetCAlpha(prevPrev);\r\n const nnCA = this._residueGetCAlpha(nextNext);\r\n if (curCA === null || ppCA === null || nnCA === null) {\r\n return 180;\r\n }\r\n\r\n const ckap = this._cosinusAngle(curCA, ppCA, nnCA, curCA);\r\n const skap = Math.sqrt(1 - ckap * ckap);\r\n return Math.atan2(skap, ckap) * 180 / Math.PI;\r\n }\r\n\r\n _isHelixStart(res, stride) {\r\n return (this._helixFlags[stride][res] === HelixFlag.START\r\n || this._helixFlags[stride][res] === HelixFlag.START_AND_END);\r\n }\r\n\r\n _buildBetaSheets() {\r\n // find bridges\r\n // check each chain against each other chain, and against itself\r\n const bridges = [];\r\n for (let a = 0; a < this._complex._chains.length; ++a) {\r\n const lenA = this._chainLengths[a];\r\n if (lenA <= 4) {\r\n continue;\r\n }\r\n\r\n const chainA = this._complex._chains[a].getResidues();\r\n\r\n for (let b = a; b < this._complex._chains.length; ++b) {\r\n const lenB = this._chainLengths[b];\r\n if (lenB <= 4) {\r\n continue;\r\n }\r\n\r\n const chainB = this._complex._chains[b].getResidues();\r\n\r\n for (let i = 1; i + 1 < lenA; ++i) {\r\n const ri = chainA[i];\r\n\r\n let j = 1;\r\n if (b === a) {\r\n j = i + 3; // check for self-bridges forward down the chain\r\n }\r\n\r\n for (; j + 1 < lenB; ++j) {\r\n const rj = chainB[j];\r\n\r\n const type = this._testBridge(chainA, i, chainB, j);\r\n if (type === BridgeType.NO_BRIDGE) {\r\n continue;\r\n }\r\n\r\n // there is a bridge, try to attach it to previously found sequence\r\n let found = false;\r\n for (const bridge of bridges) {\r\n if (type !== bridge.type || ri._index !== bridge.i[bridge.i.length - 1] + 1) {\r\n continue;\r\n }\r\n\r\n if (type === BridgeType.PARALLEL && bridge.j[bridge.j.length - 1] + 1 === rj._index) {\r\n bridge.i.push(ri._index);\r\n bridge.j.push(rj._index);\r\n found = true;\r\n break;\r\n }\r\n\r\n if (type === BridgeType.ANTI_PARALLEL && bridge.j[0] - 1 === rj._index) {\r\n bridge.i.push(ri._index);\r\n bridge.j.unshift(rj._index);\r\n found = true;\r\n break;\r\n }\r\n }\r\n\r\n // this bridge cannot be attached anywhere, start a new sequence\r\n if (!found) {\r\n bridges.push({\r\n type,\r\n i: [ri._index],\r\n chainI: ri.getChain()._index,\r\n j: [rj._index],\r\n chainJ: rj.getChain()._index,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // extend ladders\r\n bridges.sort((a, b) => {\r\n if (a.chainI < b.chainI || (a.chainI === b.chainI && a.i[0] < b.i[0])) {\r\n return -1;\r\n }\r\n return 1;\r\n });\r\n\r\n for (let i = 0; i < bridges.length; ++i) {\r\n for (let j = i + 1; j < bridges.length; ++j) {\r\n const ibi = bridges[i].i[0];\r\n const iei = bridges[i].i[bridges[i].i.length - 1];\r\n const jbi = bridges[i].j[0];\r\n const jei = bridges[i].j[bridges[i].j.length - 1];\r\n const ibj = bridges[j].i[0];\r\n const iej = bridges[j].i[bridges[j].i.length - 1];\r\n const jbj = bridges[j].j[0];\r\n const jej = bridges[j].j[bridges[j].j.length - 1];\r\n\r\n if (bridges[i].type !== bridges[j].type\r\n || this._hasChainBreak(Math.min(ibi, ibj), Math.max(iei, iej))\r\n || this._hasChainBreak(Math.min(jbi, jbj), Math.max(jei, jej))\r\n || ibj - iei >= 6 || (iei >= ibj && ibi <= iej)) {\r\n continue;\r\n }\r\n\r\n let bulge = false;\r\n if (bridges[i].type === BridgeType.PARALLEL) {\r\n bulge = ((jbj - jei < 6 && ibj - iei < 3) || (jbj - jei < 3));\r\n } else {\r\n bulge = ((jbi - jej < 6 && ibj - iei < 3) || (jbi - jej < 3));\r\n }\r\n\r\n if (bulge) {\r\n bridges[i].i = bridges[i].i.concat(bridges[j].i);\r\n if (bridges[i].type === BridgeType.PARALLEL) {\r\n bridges[i].j = bridges[i].j.concat(bridges[j].j);\r\n } else {\r\n bridges[i].j = bridges[j].j.concat(bridges[i].j);\r\n }\r\n bridges.splice(j--, 1);\r\n }\r\n }\r\n }\r\n\r\n // Sheet\r\n const ladderset = new Set();\r\n for (let i = 0; i < bridges.length; ++i) {\r\n ladderset.add(bridges[i]);\r\n }\r\n\r\n let sheet = 1;\r\n let ladder = 0;\r\n while (ladderset.size > 0) {\r\n let bridge = ladderset.values().next().value;\r\n ladderset.delete(bridge);\r\n\r\n const sheetset = new Set();\r\n sheetset.add(bridge);\r\n\r\n let toMove;\r\n do {\r\n toMove = new Set();\r\n for (const a of sheetset.values()) {\r\n for (const b of ladderset.values()) {\r\n if (this._areBridgesLinked(a, b)) {\r\n toMove.add(b);\r\n }\r\n }\r\n }\r\n for (bridge of toMove.values()) {\r\n sheetset.add(bridge);\r\n ladderset.delete(bridge);\r\n }\r\n } while (toMove.size > 0);\r\n\r\n for (bridge of sheetset.values()) {\r\n bridge.ladder = ladder;\r\n bridge.sheet = sheet;\r\n bridge.link = sheetset;\r\n ++ladder;\r\n }\r\n\r\n ++sheet;\r\n }\r\n\r\n for (let i = 0; i < bridges.length; ++i) {\r\n const bridge = bridges[i];\r\n\r\n // find out if any of the i and j set members already have\r\n // a bridge assigned, if so, we're assigning bridge 2\r\n\r\n let betai = 0;\r\n let betaj = 0;\r\n\r\n for (let l = 0; l < bridge.i.length; ++l) {\r\n if (this._betaPartners[bridge.i[l]][0]) {\r\n betai = 1;\r\n break;\r\n }\r\n }\r\n\r\n for (let l = 0; l < bridge.j.length; ++l) {\r\n if (this._betaPartners[bridge.j[l]][0]) {\r\n betaj = 1;\r\n break;\r\n }\r\n }\r\n\r\n let ss = StructureType.BRIDGE;\r\n if (bridge.i.length > 1) {\r\n ss = StructureType.STRAND;\r\n }\r\n\r\n if (bridge.type === BridgeType.PARALLEL) {\r\n let j = 0;\r\n for (let k = 0; k < bridge.i.length; ++k) {\r\n this._betaPartners[bridge.i[k]][betai] = {\r\n residue: bridge.j[j++],\r\n ladder: bridge.ladder,\r\n parallel: true,\r\n };\r\n }\r\n\r\n j = 0;\r\n for (let k = 0; k < bridge.j.length; ++k) {\r\n this._betaPartners[bridge.j[k]][betaj] = {\r\n residue: bridge.i[j++],\r\n ladder: bridge.ladder,\r\n parallel: true,\r\n };\r\n }\r\n } else {\r\n let j = bridge.j.length - 1;\r\n for (let k = 0; k < bridge.i.length; ++k) {\r\n this._betaPartners[bridge.i[k]][betai] = {\r\n residue: bridge.j[j--],\r\n ladder: bridge.ladder,\r\n parallel: false,\r\n };\r\n }\r\n\r\n j = bridge.i.length - 1;\r\n for (let k = 0; k < bridge.j.length; ++k) {\r\n this._betaPartners[bridge.j[k]][betaj] = {\r\n residue: bridge.i[j--],\r\n ladder: bridge.ladder,\r\n parallel: false,\r\n };\r\n }\r\n }\r\n\r\n for (let k = bridge.i[0]; k <= bridge.i[bridge.i.length - 1]; ++k) {\r\n if (this._ss[k] !== StructureType.STRAND) {\r\n this._ss[k] = ss;\r\n this._sheet[k] = bridge.sheet;\r\n }\r\n }\r\n\r\n for (let k = bridge.j[0]; k <= bridge.j[bridge.j.length - 1]; ++k) {\r\n if (this._ss[k] !== StructureType.STRAND) {\r\n this._ss[k] = ss;\r\n this._sheet[k] = bridge.sheet;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _testBridge(chainA, from, chainB, to) {\r\n let result = BridgeType.NO_BRIDGE;\r\n\r\n const a = chainA[from - 1]._index;\r\n const b = chainA[from]._index;\r\n const c = chainA[from + 1]._index;\r\n const d = chainB[to - 1]._index;\r\n const e = chainB[to]._index;\r\n const f = chainB[to + 1]._index;\r\n\r\n const isBond = this._hbonds.isBond.bind(this._hbonds);\r\n if ((isBond(c, e) && isBond(e, a)) || (isBond(f, b) && isBond(b, d))) {\r\n result = BridgeType.PARALLEL;\r\n } else if ((isBond(c, d) && isBond(f, a)) || (isBond(e, b) && isBond(b, e))) {\r\n result = BridgeType.ANTI_PARALLEL;\r\n }\r\n return result;\r\n }\r\n\r\n // return true if any of the residues in bridge a is identical to any of the residues in bridge b\r\n _areBridgesLinked(a, b) {\r\n const ai = new Set(a.i);\r\n const aj = new Set(a.j);\r\n\r\n for (const i of b.i) {\r\n if (ai.has(i) || aj.has(i)) {\r\n return true;\r\n }\r\n }\r\n\r\n for (const i of b.j) {\r\n if (ai.has(i) || aj.has(i)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _hasChainBreak(from, to) {\r\n for (let i = from + 1; i <= to; ++i) {\r\n if (this._complex._residues[i]._sequence !== this._complex._residues[i - 1]._sequence + 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nSecondaryStructureMap.StructureType = StructureType;\r\n","import * as THREE from 'three';\r\nimport logger from '../utils/logger';\r\nimport Atom from './Atom';\r\nimport Chain from './Chain';\r\nimport Helix from './Helix';\r\nimport Strand from './Strand';\r\nimport Sheet from './Sheet';\r\nimport Component from './Component';\r\nimport ResidueType from './ResidueType';\r\nimport Bond from './Bond';\r\nimport AutoBond from './AutoBond';\r\nimport AromaticLoopsMarker from './AromaticLoopsMarker';\r\nimport BiologicalUnit from './BiologicalUnit';\r\nimport selectors from './selectors';\r\nimport VoxelWorld from './VoxelWorld';\r\nimport SecondaryStructureMap from './SecondaryStructureMap';\r\nimport StructuralElement from './StructuralElement';\r\n\r\nconst VOXEL_SIZE = 5.0;\r\n\r\nconst { StructureType } = SecondaryStructureMap;\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\n// see http://www.wwpdb.org/documentation/file-format-content/format33/sect5.html#HELIX\r\nconst helixClassMap = {\r\n [StructureType.HELIX_ALPHA]: 1,\r\n [StructureType.HELIX_PI]: 3,\r\n [StructureType.HELIX_310]: 5,\r\n};\r\n\r\nconst loopMap = {\r\n [StructureType.BRIDGE]: StructuralElementType.BRIDGE,\r\n [StructureType.TURN]: StructuralElementType.TURN,\r\n [StructureType.BEND]: StructuralElementType.BEND,\r\n [StructureType.LOOP]: StructuralElementType.COIL,\r\n};\r\n\r\n/**\r\n * The entire complex of the molecules under study.\r\n *\r\n * @exports Complex\r\n * @constructor\r\n */\r\nclass Complex {\r\n constructor() {\r\n this._chains = [];\r\n this._components = [];\r\n this._helices = [];\r\n this._sheets = [];\r\n this.structures = [];\r\n\r\n this._residueTypes = Object.create(ResidueType.StandardTypes);\r\n this._atoms = [];\r\n this._residues = [];\r\n this._bonds = [];\r\n this._sgroups = [];\r\n this._molecules = [];\r\n this._maskNeedsUpdate = false;\r\n\r\n this.metadata = {};\r\n\r\n this.symmetry = [];\r\n this.units = [new BiologicalUnit(this)];\r\n this._currentUnit = 0; // default biological unit is the asymmetric unit\r\n }\r\n\r\n addAtom(atom) {\r\n const index = this._atoms.length;\r\n this._atoms.push(atom);\r\n return index;\r\n }\r\n\r\n addSheet(sheet) {\r\n const index = this._sheets.length;\r\n this._sheets.push(sheet);\r\n return index;\r\n }\r\n\r\n addHelix(helix) {\r\n const index = this._helices.length;\r\n this._helices.push(helix);\r\n return index;\r\n }\r\n\r\n getAtoms() {\r\n return this._atoms;\r\n }\r\n\r\n getBonds() {\r\n return this._bonds;\r\n }\r\n\r\n getAtomCount() {\r\n return this._atoms.length;\r\n }\r\n\r\n addResidue(residue) {\r\n const index = this._residues.length;\r\n this._residues.push(residue);\r\n return index;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n this.forEachChain((chain) => {\r\n chain.updateToFrame(frameData);\r\n });\r\n }\r\n\r\n addResidueType(resName) {\r\n const rt = this._residueTypes[resName] = new ResidueType(resName, 'Unknown', '');\r\n return rt;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residues.length;\r\n }\r\n\r\n getResidues() {\r\n return this._residues;\r\n }\r\n\r\n getSGroupCount() {\r\n return this._sgroups.length;\r\n }\r\n\r\n getSGroups() {\r\n return this._sgroups;\r\n }\r\n\r\n /*\r\n Extract atom by its fullname: #chainName#.#residueId#.#atomName#\r\n */\r\n getAtomByFullname(fullName) {\r\n const parts = fullName.split('.');\r\n if (parts.length !== 3) {\r\n return null;\r\n }\r\n\r\n const chainName = parts[0];\r\n const resId = parseInt(parts[1], 10);\r\n if (Number.isNaN(resId)) {\r\n return null;\r\n }\r\n const atomName = parts[2].toUpperCase();\r\n\r\n let currAtom = null;\r\n this.forEachChain((chain) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (chain._name.localeCompare(chainName) === 0) {\r\n chain.forEachResidue((residue) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (residue._sequence === resId) {\r\n residue.forEachAtom((atom) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (atomName.localeCompare(atom.name) === 0) {\r\n currAtom = atom;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n return currAtom;\r\n }\r\n\r\n /**\r\n * Create a new chain.\r\n *\r\n * @param {string} name - Chain name.\r\n * @returns {Chain} - Newly created chain.\r\n */\r\n addChain(name) {\r\n const result = new Chain(this, name);\r\n this._chains.push(result);\r\n return result;\r\n }\r\n\r\n getChain(name) {\r\n for (let i = 0, n = this._chains.length; i < n; ++i) {\r\n const chain = this._chains[i];\r\n if (chain.getName() === name) {\r\n return chain;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getChainCount() {\r\n return this._chains.length;\r\n }\r\n\r\n getMolecules() {\r\n return this._molecules;\r\n }\r\n\r\n getMoleculeCount() {\r\n return this._molecules.length;\r\n }\r\n\r\n forEachAtom(process) {\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n process(atoms[i]);\r\n }\r\n }\r\n\r\n forEachBond(process) {\r\n const bonds = this._bonds;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]);\r\n }\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n forEachChain(process) {\r\n const chains = this._chains;\r\n for (let i = 0, n = chains.length; i < n; ++i) {\r\n process(chains[i]);\r\n }\r\n }\r\n\r\n forEachMolecule(process) {\r\n const molecules = this._molecules;\r\n const n = molecules.length;\r\n for (let i = 0; i < n; ++i) {\r\n process(molecules[i]);\r\n }\r\n }\r\n\r\n forEachSGroup(process) {\r\n const groups = this._sgroups;\r\n for (let i = 0, n = groups.length; i < n; ++i) {\r\n process(groups[i]);\r\n }\r\n }\r\n\r\n forEachComponent(process) {\r\n const components = this._components;\r\n for (let i = 0, n = components.length; i < n; ++i) {\r\n process(components[i]);\r\n }\r\n }\r\n\r\n forEachVisibleComponent(process) {\r\n const components = this._components;\r\n for (let i = 0, n = components.length; i < n; ++i) {\r\n process(components[i]);\r\n }\r\n }\r\n\r\n addBond(left, right, order, type, fixed) {\r\n const bond = new Bond(left, right, order, type, fixed);\r\n this._bonds.push(bond);\r\n return bond;\r\n }\r\n\r\n getBondCount() {\r\n return this._bonds.length;\r\n }\r\n\r\n getResidueType(name) {\r\n return this._residueTypes[name] || null;\r\n }\r\n\r\n getUnifiedSerial(chain, serial, iCode) {\r\n /* eslint-disable no-magic-numbers */\r\n const maxSerial = 65536;\r\n const chainShift = maxSerial * 256;\r\n /* eslint-enable no-magic-numbers */\r\n return serial + iCode * maxSerial + chain * chainShift;\r\n }\r\n\r\n splitUnifiedSerial(uniSerial) {\r\n /* eslint-disable no-magic-numbers */\r\n const maxSerial = 65536;\r\n const chainShift = maxSerial * 256;\r\n /* eslint-enable no-magic-numbers */\r\n const chainId = Math.floor(uniSerial / chainShift);\r\n const remnant = uniSerial - chainId * chainShift;\r\n const insCode = Math.floor(remnant / maxSerial);\r\n const ser = remnant - insCode * maxSerial;\r\n return { chain: chainId, serial: ser, iCode: insCode };\r\n }\r\n\r\n _fillCmpEdit() {\r\n const self = this;\r\n const components = this._components;\r\n\r\n function addComp() {\r\n const comp = new Component(self);\r\n comp._index = components.length;\r\n components[comp._index] = comp;\r\n return comp;\r\n }\r\n\r\n this.forEachChain((chain) => {\r\n const residues = chain._residues;\r\n const resCount = residues.length;\r\n if (resCount < 1) {\r\n return;\r\n }\r\n let comp = addComp();\r\n let currStart = residues[0]._index;\r\n\r\n for (let i = 0; i < resCount; ++i) {\r\n const currRes = residues[i];\r\n currRes._component = comp;\r\n\r\n const nextRes = i === resCount - 1 ? null : residues[i + 1];\r\n if (!nextRes\r\n || !currRes.isConnected(nextRes)\r\n || currRes._index !== nextRes._index - 1) {\r\n // the last condition is broken and incorrect\r\n // the refactoring of the Component is required in order to fix this issue\r\n comp.setSubDivs([{\r\n start: currStart,\r\n end: currRes._index,\r\n }]);\r\n if (nextRes) {\r\n currStart = nextRes._index;\r\n comp = addComp();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n // This function was added in the moment of despair\r\n // It was the dark times for miew\r\n _fillCmpNoedit() {\r\n const comp = new Component(this);\r\n comp._index = 0;\r\n\r\n const residues = this._residues;\r\n const resCount = residues.length;\r\n if (resCount === 0) {\r\n return;\r\n }\r\n\r\n const currSubDivs = [];\r\n let currStart = 0;\r\n for (let i = 0; i < resCount; ++i) {\r\n const currRes = residues[i];\r\n currRes._component = comp;\r\n\r\n const nextRes = i === resCount - 1 ? null : residues[i + 1];\r\n if (!nextRes\r\n || !currRes.isConnected(nextRes)) {\r\n // wrap up this interval\r\n currSubDivs[currSubDivs.length] = {\r\n start: currStart,\r\n end: i,\r\n };\r\n if (nextRes) {\r\n currStart = i + 1;\r\n }\r\n }\r\n }\r\n\r\n comp.setSubDivs(currSubDivs);\r\n this._components[comp._index] = comp;\r\n }\r\n\r\n /**\r\n * Fill components information.\r\n * @param {boolean} enableEditing - Restructure Complex to enable per-component editing.\r\n */\r\n _fillComponents(enableEditing) {\r\n if (enableEditing) {\r\n this._fillCmpEdit();\r\n } else {\r\n this._fillCmpNoedit();\r\n }\r\n }\r\n\r\n getCurrentUnit() {\r\n return this._currentUnit;\r\n }\r\n\r\n getDefaultBoundaries() {\r\n return this.units[0].getBoundaries();\r\n }\r\n\r\n getBoundaries() {\r\n return this.units[this._currentUnit].getBoundaries();\r\n }\r\n\r\n getTransforms() {\r\n return this.units[this._currentUnit].getTransforms();\r\n }\r\n\r\n getSelector() {\r\n return this.units[this._currentUnit].getSelector();\r\n }\r\n\r\n resetCurrentUnit() {\r\n this._currentUnit = 0;\r\n this.setCurrentUnit(1);\r\n }\r\n\r\n setCurrentUnit(newUnit) {\r\n if (newUnit !== null && newUnit !== undefined\r\n && newUnit !== this._currentUnit\r\n && newUnit >= 0\r\n && newUnit < this.units.length) {\r\n this._currentUnit = newUnit;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n _computeBounds() {\r\n const { units } = this;\r\n for (let i = 0, n = units.length; i < n; ++i) {\r\n units[i].computeBoundaries();\r\n }\r\n }\r\n\r\n onAtomPositionChanged() {\r\n this.forEachChain((a) => {\r\n a._finalize();\r\n });\r\n this.forEachComponent((c) => {\r\n c.update();\r\n });\r\n // Update bounding sphere and box\r\n this._computeBounds();\r\n this._finalizeBonds();\r\n this.forEachSGroup((s) => {\r\n s._rebuildSGroupOnAtomChange();\r\n });\r\n }\r\n\r\n update() {\r\n if (this._maskNeedsUpdate) {\r\n this.updateStructuresMask();\r\n this._maskNeedsUpdate = false;\r\n }\r\n }\r\n\r\n _finalizeBonds() {\r\n const bonds = this.getBonds();\r\n const n = bonds.length;\r\n for (let i = 0; i < n; ++i) {\r\n bonds[i]._index = i;\r\n }\r\n }\r\n\r\n /**\r\n * Finalizes complex's inner data(i.e. after parsing).\r\n * @param {objects} opts - Build bonds automatically.\r\n * @param {boolean} opts.needAutoBonding - Build bonds automatically.\r\n * @param {boolean} opts.detectAromaticLoops - Find/mark aromatic loops.\r\n * @param {boolean} opts.enableEditing - Restructure Complex to enable per-component editing.\r\n * @param {Array} [opts.serialAtomMap] - Array of atoms ordered by their serials.\r\n */\r\n finalize(opts) {\r\n opts = opts || {};\r\n // Put bonds into atoms\r\n const bonds = this._bonds;\r\n let i;\r\n let n;\r\n // remove invalid bonds\r\n for (i = bonds.length - 1; i >= 0; i--) {\r\n const bond = bonds[i];\r\n if (bond._left === null || bond._right === null) {\r\n bonds.splice(i, 1);\r\n } else {\r\n bond._left.bonds.push(bond);\r\n bond._right.bonds.push(bond);\r\n }\r\n }\r\n\r\n const residues = this._residues;\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n residues[i]._finalize();\r\n }\r\n\r\n this.forEachChain((a) => {\r\n a._finalize();\r\n });\r\n\r\n // WARNING! this MUST be done BEFORE computeBounds is called\r\n const { units } = this;\r\n for (i = 0, n = units.length; i < n; ++i) {\r\n units[i].finalize();\r\n }\r\n // try setting first biomolecule by defaults\r\n this.setCurrentUnit(1);\r\n\r\n const residueHash = {};\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n const res = residues[i];\r\n // This code is extremely dangerous for non-PDB formats\r\n residueHash[this.getUnifiedSerial(\r\n res.getChain().getName().charCodeAt(0),\r\n res.getSequence(),\r\n res.getICode().charCodeAt(0),\r\n )] = res;\r\n }\r\n\r\n const { structures } = this;\r\n for (i = 0, n = structures.length; i < n; ++i) {\r\n structures[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n const helices = this._helices;\r\n for (i = 0, n = helices.length; i < n; ++i) {\r\n helices[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n const sheets = this._sheets;\r\n for (i = 0, n = sheets.length; i < n; ++i) {\r\n sheets[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n // Update bounding sphere and box\r\n this._computeBounds();\r\n\r\n const atoms = this._atoms;\r\n for (i = 0, n = atoms.length; i < n; ++i) {\r\n const currAtom = atoms[i];\r\n currAtom.index = i;\r\n }\r\n\r\n if (opts.needAutoBonding) {\r\n // Ignore errors during autobonding\r\n try {\r\n const autoConnector = new AutoBond(this);\r\n autoConnector.build();\r\n autoConnector.destroy();\r\n } catch (e) {\r\n console.warn('Autobonding failed:', e);\r\n }\r\n }\r\n\r\n const chains = this._chains;\r\n for (i = 0, n = chains.length; i < n; ++i) {\r\n chains[i]._index = i;\r\n }\r\n\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n residues[i]._index = i;\r\n }\r\n\r\n // mark non-polar hydrogens\r\n for (i = 0, n = atoms.length; i < n; ++i) {\r\n const atom = atoms[i];\r\n if (atom.flags & Atom.Flags.HYDROGEN && atom.bonds.length === 1) {\r\n const bond = atom.bonds[0];\r\n const other = (bond._left !== atom && bond._left) || bond._right;\r\n if (other.flags & Atom.Flags.CARBON) {\r\n atom.flags |= Atom.Flags.NONPOLARH;\r\n }\r\n }\r\n }\r\n\r\n this._finalizeBonds();\r\n this._fillComponents(opts.enableEditing);\r\n\r\n const marker = new AromaticLoopsMarker(this);\r\n marker.markCycles();\r\n if (opts.detectAromaticLoops) { // TODO remove this condition clause, it is for debug purposes only!\r\n marker.detectCycles(); // TODO add conditional detection\r\n }\r\n\r\n this._finalizeMolecules();\r\n }\r\n\r\n _finalizeMolecules() {\r\n // add reference to molecule into residue\r\n for (let i = 0; i < this._molecules.length; i++) {\r\n const molecule = this._molecules[i];\r\n const count = molecule.residues.length;\r\n for (let j = 0; j < count; j++) {\r\n const residue = molecule.residues[j];\r\n residue._molecule = molecule;\r\n }\r\n }\r\n }\r\n\r\n updateStructuresMask() {\r\n const updater = (structure) => structure.collectMask();\r\n this.forEachResidue(updater);\r\n this.forEachChain(updater);\r\n this.forEachMolecule(updater);\r\n }\r\n\r\n countAtomsByMask(mask) {\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if ((atom.mask & mask) !== 0) {\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n getNumAtomsBySelector(selector) {\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom)) {\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n resetAtomMask(mask) {\r\n this.forEachAtom((atom) => {\r\n atom.mask = mask;\r\n });\r\n }\r\n\r\n markAtoms(selector, mask) {\r\n const setMask = mask;\r\n const clearMask = ~setMask;\r\n let count = 0;\r\n const totalSelector = selectors.keyword('And')(selector, this.getSelector());\r\n\r\n this.forEachAtom((atom) => {\r\n if (totalSelector.includesAtom(atom)) {\r\n atom.mask |= setMask;\r\n count++;\r\n } else {\r\n atom.mask &= clearMask;\r\n }\r\n });\r\n this._maskNeedsUpdate = true;\r\n\r\n return count;\r\n }\r\n\r\n markAtomsAdditionally(selector, mask) {\r\n const setMask = mask;\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom) && (atom.mask & mask) !== mask) {\r\n atom.mask |= setMask;\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n clearAtomBits(mask) {\r\n const clearMask = ~mask;\r\n this.forEachAtom((atom) => {\r\n atom.mask &= clearMask;\r\n });\r\n const reseter = (a) => {\r\n a._mask &= clearMask;\r\n };\r\n this.forEachAtom(reseter);\r\n this.forEachResidue(reseter);\r\n this.forEachChain(reseter);\r\n this.forEachMolecule(reseter);\r\n }\r\n\r\n getAtomNames() {\r\n if (this.hasOwnProperty('_atomNames')) {\r\n return this._atomNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[atom.name] = 1;\r\n });\r\n this._atomNames = Object.keys(dict);\r\n\r\n return this._atomNames;\r\n }\r\n\r\n getElements() {\r\n if (this.hasOwnProperty('_elements')) {\r\n return this._elements;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[atom.element.name] = 1;\r\n });\r\n this._elements = Object.keys(dict);\r\n\r\n return this._elements;\r\n }\r\n\r\n getResidueNames() {\r\n if (this.hasOwnProperty('_residueNames')) {\r\n return this._residueNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachResidue((res) => {\r\n dict[res._type._name] = 1;\r\n });\r\n this._residueNames = Object.keys(dict);\r\n\r\n return this._residueNames;\r\n }\r\n\r\n getChainNames() {\r\n if (this.hasOwnProperty('_chainNames')) {\r\n return this._chainNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachChain((chain) => {\r\n dict[chain._name] = 1;\r\n });\r\n this._chainNames = Object.keys(dict);\r\n\r\n return this._chainNames;\r\n }\r\n\r\n getAltLocNames() {\r\n if (this.hasOwnProperty('_altlocNames')) {\r\n return this._altlocNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[String.fromCharCode(atom.location)] = 1;\r\n });\r\n this._altlocNames = Object.keys(dict);\r\n\r\n return this._altlocNames;\r\n }\r\n\r\n getVoxelWorld() {\r\n if (!this.hasOwnProperty('_voxelWorld')) {\r\n try {\r\n this._voxelWorld = new VoxelWorld(\r\n this.getDefaultBoundaries().boundingBox,\r\n new THREE.Vector3(VOXEL_SIZE, VOXEL_SIZE, VOXEL_SIZE),\r\n );\r\n this._voxelWorld.addAtoms(this);\r\n } catch (e) {\r\n logger.warn('Unable to create voxel world');\r\n this._voxelWorld = null;\r\n }\r\n }\r\n\r\n return this._voxelWorld;\r\n }\r\n\r\n /**\r\n * Simple function to make unified routine procedure without code duplication.\r\n * @param {Array} srcArray - Source chemical structure array (will be part of resulting chemical structure array).\r\n * @param {Array} dstArray - Resulting chemical structure array.\r\n * @param {number} param - Parameter for processor.\r\n * @param {function} functor - Processor for every element in array.\r\n */\r\n addElement(srcArray, dstArray, param, functor) {\r\n const { length } = srcArray;\r\n for (let i = 0; i < length; ++i) {\r\n const elem = srcArray[i];\r\n functor(elem, param);\r\n dstArray.push(elem);\r\n }\r\n }\r\n\r\n // this function joins multiple complexes into one (this)\r\n // atom, bond, ... objects are reused -- so input complexes are no longer valid\r\n joinComplexes(complexes) {\r\n // clear target complex\r\n this._chains = [];\r\n this._components = [];\r\n this._helices = [];\r\n this._sheets = [];\r\n this.structures = [];\r\n this._atoms = [];\r\n this._residues = [];\r\n this._bonds = [];\r\n this._sgroups = [];\r\n\r\n const self = this;\r\n let atomBias = 0;\r\n let bondBias = 0;\r\n let residueBias = 0;\r\n let chainBias = 0;\r\n let componentBias = 0;\r\n\r\n function processAtom(atom, bias) {\r\n atom.serial += bias;\r\n atom.index += bias;\r\n }\r\n\r\n function processBond(bond, bias) {\r\n bond._index += bias;\r\n }\r\n\r\n function processResidue(residue, bias) {\r\n residue._index += bias;\r\n }\r\n\r\n function processChain(chain, bias) {\r\n chain._complex = self;\r\n chain._index += bias;\r\n }\r\n\r\n function processComponent(component, bias) {\r\n component._complex = self;\r\n component._index += bias;\r\n }\r\n\r\n /**\r\n * Simple function to do nothing.\r\n */\r\n function doNothing() {\r\n }\r\n\r\n for (let i = 0; i < complexes.length; ++i) {\r\n const c = complexes[i];\r\n this.addElement(c._atoms, this._atoms, atomBias, processAtom);\r\n this.addElement(c._bonds, this._bonds, bondBias, processBond);\r\n this.addElement(c._residues, this._residues, residueBias, processResidue);\r\n this.addElement(c._chains, this._chains, chainBias, processChain);\r\n this.addElement(c._sheets, this._sheets, 0, doNothing);\r\n this.addElement(c._helices, this._helices, 0, doNothing);\r\n this.addElement(c._sgroups, this._sgroups, 0, doNothing);\r\n this.addElement(c._components, this._components, componentBias, processComponent);\r\n this.addElement(c.structures, this.structures, 0, doNothing);\r\n // merge residue types\r\n for (const rt in c._residueTypes) {\r\n if (c._residueTypes.hasOwnProperty(rt)) {\r\n this._residueTypes[rt] = c._residueTypes[rt];\r\n }\r\n }\r\n\r\n atomBias += c._atoms.length;\r\n bondBias += c._bonds.length;\r\n residueBias += c._residues.length;\r\n chainBias += c._chains.length;\r\n componentBias += c._components.length;\r\n }\r\n\r\n this._computeBounds();\r\n }\r\n\r\n /**\r\n * Replace secondary structure with calculated one.\r\n *\r\n * DSSP algorithm implementation is used.\r\n *\r\n * Kabsch W, Sander C. 1983. Dictionary of protein secondary structure: pattern recognition of hydrogen-bonded and\r\n * geometrical features. Biopolymers. 22(12):2577-2637. doi:10.1002/bip.360221211.\r\n */\r\n dssp() {\r\n const ssMap = new SecondaryStructureMap(this);\r\n\r\n const structures = this.structures = [];\r\n const helices = this._helices = [];\r\n const sheets = this._sheets = [];\r\n\r\n const getSheet = (index) => {\r\n let item = sheets[index];\r\n if (!item) {\r\n item = sheets[index] = new Sheet(String(index), 0);\r\n }\r\n return item;\r\n };\r\n\r\n let lastCode;\r\n let lastSheetIndex;\r\n let lastHelixIndex = 0;\r\n let curStructure = null;\r\n for (let i = 0, n = this._residues.length; i < n; ++i) {\r\n const curCode = ssMap._ss[i];\r\n const curResidue = this._residues[i];\r\n const curSheetIndex = ssMap._sheet[i];\r\n\r\n // expand the last structure\r\n if (curCode === lastCode && curSheetIndex === lastSheetIndex) {\r\n curResidue._secondary = curStructure;\r\n if (curStructure) {\r\n curStructure.term = curResidue;\r\n }\r\n if (curStructure instanceof Helix) {\r\n curStructure.length++;\r\n }\r\n continue;\r\n }\r\n\r\n // create a new structure\r\n const helixClass = helixClassMap[curCode];\r\n const loopType = loopMap[curCode];\r\n if (curCode === StructureType.STRAND) {\r\n const curSheet = getSheet(curSheetIndex);\r\n curStructure = new Strand(curSheet, curResidue, curResidue, 0, null, null);\r\n curSheet.addStrand(curStructure);\r\n } else if (helixClass !== undefined) {\r\n lastHelixIndex++;\r\n curStructure = new Helix(helixClass, curResidue, curResidue, lastHelixIndex, String(lastHelixIndex), '', 1);\r\n helices.push(curStructure);\r\n } else if (loopType !== undefined) {\r\n curStructure = new StructuralElement(loopType, curResidue, curResidue);\r\n } else {\r\n curStructure = null;\r\n }\r\n\r\n if (curStructure) {\r\n structures.push(curStructure);\r\n }\r\n\r\n curResidue._secondary = curStructure;\r\n\r\n lastCode = curCode;\r\n lastSheetIndex = curSheetIndex;\r\n }\r\n\r\n this._sheets = sheets.filter((_sheet) => true); // squeeze sheets array\r\n }\r\n}\r\n\r\nComplex.prototype.id = 'Complex';\r\nComplex.prototype.name = '';\r\n\r\nexport default Complex;\r\n","import * as THREE from 'three';\r\nimport utils from '../utils';\r\n\r\nfunction pow2ceil(v) {\r\n let p = 2;\r\n v = (v - 1) >> 1;\r\n while (v) {\r\n p <<= 1;\r\n v >>= 1;\r\n }\r\n return p;\r\n}\r\n\r\n/**\r\n * Volume constructor\r\n *\r\n * @param {Object} type - Float32Array, Int8Array, etc...\r\n * @param {Object|Array} dimensions - number of data points on each axis (x, y, z)\r\n * @param {Box3} box - bounding box defining data place in metric space,\r\n * it's corners correspond to extreme data points\r\n * @param {Number} vecSize - dimension of the field data point (1 = scalar, 3 = 3D vector)\r\n * @param {Object} data - typed array of the same type as specified by the 1st parameter,\r\n * layout: point by point along X,\r\n * row by row along Y,\r\n * plane by plane along Z\r\n * @param {Number} volumeInfo - volume info values to define threshold to filter the noise\r\n */\r\n\r\nclass Volume {\r\n constructor(type, dimensions, box, vecSize, data, volumeInfo) {\r\n this._box = box.clone();\r\n this._dimVec = Math.max(Math.floor(vecSize || 1), 1);\r\n this._volumeInfo = volumeInfo;\r\n\r\n if (dimensions instanceof Array) {\r\n [this._dimX, this._dimY, this._dimZ] = dimensions;\r\n } else {\r\n this._dimX = dimensions.x;\r\n this._dimY = dimensions.y;\r\n this._dimZ = dimensions.z;\r\n }\r\n this._dimX = Math.max(Math.floor(this._dimX), 1);\r\n this._dimY = Math.max(Math.floor(this._dimY), 1);\r\n this._dimZ = Math.max(Math.floor(this._dimZ), 1);\r\n\r\n this._rowElements = this._dimVec * this._dimX;\r\n this._planeElements = this._rowElements * this._dimY;\r\n this._totalElements = this._planeElements * this._dimZ;\r\n\r\n this._data = data || utils.allocateTyped(type, this._totalElements);\r\n\r\n // override getter/setter for vector fields\r\n switch (this._dimVec) {\r\n case 1:\r\n break;\r\n\r\n case 2:\r\n this.getValue = function (x, y, z) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n return [this._data[idx], this._data[idx + 1]];\r\n };\r\n\r\n this.setValue = function (x, y, z, a, b) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] = a;\r\n this._data[idx + 1] = b;\r\n };\r\n\r\n this.addValue = function (x, y, z, a, b) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] += a;\r\n this._data[idx + 1] += b;\r\n };\r\n break;\r\n\r\n case 3:\r\n this.getValue = function (x, y, z) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n return [this._data[idx], this._data[idx + 1], this._data[idx + 2]];\r\n };\r\n\r\n this.setValue = function (x, y, z, a, b, c) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] = a;\r\n this._data[idx + 1] = b;\r\n this._data[idx + 2] = c;\r\n };\r\n\r\n this.addValue = function (x, y, z, a, b, c) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] += a;\r\n this._data[idx + 1] += b;\r\n this._data[idx + 2] += c;\r\n };\r\n break;\r\n\r\n default:\r\n throw new Error('Volume: invalid vector dimension');\r\n }\r\n }\r\n\r\n // default getter assumes it's a scalar field\r\n getValue(x, y, z) {\r\n return this._data[x + y * this._rowElements + z * this._planeElements];\r\n }\r\n\r\n // default setter assumes it's a scalar field\r\n setValue(x, y, z, val) {\r\n this._data[x + y * this._rowElements + z * this._planeElements] = val;\r\n }\r\n\r\n // default adder assumes it's a scalar field\r\n addValue(x, y, z, val) {\r\n this._data[x + y * this._rowElements + z * this._planeElements] += val;\r\n }\r\n\r\n getDimensions() {\r\n return [this._dimX, this._dimY, this._dimZ];\r\n }\r\n\r\n getBox() {\r\n return this._box;\r\n }\r\n\r\n getVolumeInfo() {\r\n return this._volumeInfo;\r\n }\r\n\r\n getCellSize() {\r\n const boxSize = new THREE.Vector3();\r\n this._box.getSize(boxSize);\r\n const res = new THREE.Vector3();\r\n res.x = this._dimX > 1 ? boxSize.x / (this._dimX - 1) : 0;\r\n res.y = this._dimY > 1 ? boxSize.y / (this._dimY - 1) : 0;\r\n res.z = this._dimZ > 1 ? boxSize.z / (this._dimZ - 1) : 0;\r\n return res;\r\n }\r\n\r\n computeGradient() {\r\n if (this._dimVec !== 1) {\r\n // gradient can only be computed for scalar fields\r\n return null;\r\n }\r\n\r\n // create a 3D vector field of gradients\r\n const gradient = new Volume(Float32Array, [this._dimX, this._dimY, this._dimZ], this._box, 3);\r\n\r\n // calculate cell side lengths\r\n const vl = this.getCellSize();\r\n\r\n // gradient axis scaling values and averaging factors, to correctly\r\n // calculate the gradient for volumes with irregular cell spacing\r\n const vs = new THREE.Vector3(-0.5 / vl.x, -0.5 / vl.y, -0.5 / vl.z);\r\n\r\n // TODO Check for intended bug in VMD (min is zero)\r\n function clamp(val, min, max) {\r\n return Math.min(max, Math.max(min, val));\r\n }\r\n\r\n const xSize = this._dimX;\r\n const ySize = this._dimY;\r\n const zSize = this._dimZ;\r\n const volMap = this._data;\r\n\r\n function _voxelValue(x, y, z) {\r\n return volMap[z * xSize * ySize + y * xSize + x];\r\n }\r\n\r\n for (let zi = 0; zi < zSize; ++zi) {\r\n const zm = clamp(zi - 1, 0, zSize - 1);\r\n const zp = clamp(zi + 1, 0, zSize - 1);\r\n\r\n for (let yi = 0; yi < ySize; ++yi) {\r\n const ym = clamp(yi - 1, 0, ySize - 1);\r\n const yp = clamp(yi + 1, 0, ySize - 1);\r\n\r\n for (let xi = 0; xi < xSize; ++xi) {\r\n const xm = clamp(xi - 1, 0, xSize - 1);\r\n const xp = clamp(xi + 1, 0, xSize - 1);\r\n\r\n // Calculate the volume gradient at each grid cell.\r\n // Gradients are now stored unnormalized, since we need them in pure\r\n // form in order to draw field lines etc. Shading code will now have\r\n // to do renormalization for itself on-the-fly.\r\n\r\n // XXX this gradient is only correct for orthogonal grids, since\r\n // we're using the array index offsets rather to calculate the gradient\r\n // rather than voxel coordinate offsets. This will have to be\r\n // re-worked for non-orthogonal datasets.\r\n\r\n gradient.setValue(\r\n xi,\r\n yi,\r\n zi,\r\n (_voxelValue(xp, yi, zi) - _voxelValue(xm, yi, zi)) * vs.x,\r\n (_voxelValue(xi, yp, zi) - _voxelValue(xi, ym, zi)) * vs.y,\r\n (_voxelValue(xi, yi, zp) - _voxelValue(xi, yi, zm)) * vs.z,\r\n );\r\n }\r\n }\r\n }\r\n\r\n return gradient;\r\n }\r\n\r\n normalize() {\r\n const data = this._data;\r\n\r\n // get min/max\r\n let min = data[0];\r\n let max = data[0];\r\n for (let i = 1; i < data.length; ++i) {\r\n min = Math.min(min, data[i]);\r\n max = Math.max(max, data[i]);\r\n }\r\n\r\n const d = 1.0 / (max - min);\r\n if (d === 0) {\r\n return;\r\n }\r\n\r\n // normalize\r\n for (let i = 0; i < data.length; ++i) {\r\n data[i] = d * (data[i] - min);\r\n }\r\n }\r\n\r\n getTiledTextureStride() {\r\n return [this._dimX + 2, this._dimY + 2];\r\n }\r\n\r\n buildTiledTexture() {\r\n let tilesX = Math.ceil(Math.sqrt(this._dimZ * this._dimY / this._dimX));\r\n\r\n let width = tilesX * (this._dimX + 2) - 1;\r\n width = pow2ceil(width);\r\n tilesX = Math.floor(width / (this._dimX + 2));\r\n\r\n const tilesY = Math.ceil(this._dimZ / tilesX);\r\n let height = tilesY * (this._dimY + 2) - 1;\r\n height = pow2ceil(height);\r\n\r\n const data = new Uint8Array(width * height);\r\n\r\n let src;\r\n let dst;\r\n for (let tileRow = 0; tileRow < tilesY; ++tileRow) {\r\n // process each pixel row of this tile row\r\n for (let row = 0; row < this._dimY; ++row) {\r\n src = tileRow * tilesX * this._planeElements + row * this._rowElements;\r\n dst = width * (tileRow * (this._dimY + 2) + row);\r\n // copy a series of rows through several XY planes\r\n for (let t = 0; t < tilesX; ++t) {\r\n // copy one row of one XY plane\r\n for (let x = 0; x < this._dimX; ++x) {\r\n data[dst++] = 255.0 * this._data[src++];\r\n }\r\n\r\n // repeat last pixel of previous tile\r\n data[dst++] = 255.0 * this._data[src - 1];\r\n\r\n if (t < tilesX - 1) {\r\n // skip to the same row of next XY plane\r\n src += this._planeElements - this._rowElements;\r\n // repeat first pixel of next tile\r\n data[dst++] = 255.0 * this._data[src];\r\n }\r\n }\r\n }\r\n }\r\n\r\n // fill pixels between tile rows with copy of edge pixels\r\n for (let tileRow = 0; tileRow < tilesY; ++tileRow) {\r\n // copy last pixel row of this tile row to the following pixel row of the texture\r\n src = width * (tileRow * (this._dimY + 2) + this._dimY - 1);\r\n dst = src + width;\r\n for (let x = 0; x < width; ++x) {\r\n data[dst++] = data[src++];\r\n }\r\n if (tileRow < tilesY - 1) {\r\n // copy first pixel row of next tile row to the preceding pixel row of the texture\r\n src = width * (tileRow + 1) * (this._dimY + 2);\r\n dst = src - width;\r\n for (let x = 0; x < width; ++x) {\r\n data[dst++] = data[src++];\r\n }\r\n }\r\n }\r\n\r\n const texture = new THREE.DataTexture(\r\n data,\r\n width,\r\n height,\r\n THREE.LuminanceFormat,\r\n THREE.UnsignedByteType,\r\n THREE.UVMapping,\r\n THREE.ClampToEdgeWrapping,\r\n THREE.ClampToEdgeWrapping,\r\n THREE.LinearFilter,\r\n THREE.LinearFilter,\r\n );\r\n texture.needsUpdate = true;\r\n return texture;\r\n }\r\n\r\n /* ********************************************************************************\r\n *\r\n * Methods that provide direct access to internal array (for better performance)\r\n *\r\n ******************************************************************************** */\r\n\r\n getData() {\r\n return this._data;\r\n }\r\n\r\n getDirectIdx(x, y, z) {\r\n return x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n }\r\n\r\n getStrideX() {\r\n return this._dimVec;\r\n }\r\n\r\n getStrideY() {\r\n return this._rowElements;\r\n }\r\n\r\n getStrideZ() {\r\n return this._planeElements;\r\n }\r\n}\r\n\r\nVolume.prototype.id = 'Volume';\r\n\r\nexport default Volume;\r\n","/**\r\n * Residue Molecule.\r\n *\r\n * @param {Complex} complex - Molecular complex this Molecule belongs to.\r\n * @param {String} name - Molecule's name.\r\n * @param {Integer} index - Molecule's index in file.\r\n *\r\n * @exports Molecule\r\n * @constructor\r\n */\r\nclass Molecule {\r\n constructor(complex, name, index) {\r\n this.complex = complex;\r\n this.name = name || '';\r\n this.residues = [];\r\n this.mask = 1 | 0;\r\n this.index = index || -1; // start with 1\r\n }\r\n\r\n forEachResidue(process) {\r\n const { residues } = this;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const { residues } = this;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n mask &= residues[i]._mask;\r\n }\r\n this.mask = mask;\r\n }\r\n}\r\n\r\nexport default Molecule;\r\n","import Atom from './chem/Atom';\r\nimport Element from './chem/Element';\r\nimport Bond from './chem/Bond';\r\nimport Residue from './chem/Residue';\r\nimport ResidueType from './chem/ResidueType';\r\nimport Chain from './chem/Chain';\r\nimport Helix from './chem/Helix';\r\nimport Strand from './chem/Strand';\r\nimport Sheet from './chem/Sheet';\r\nimport SGroup from './chem/SGroup';\r\nimport Assembly from './chem/Assembly';\r\nimport Complex from './chem/Complex';\r\nimport Volume from './chem/Volume';\r\nimport VoxelWorld from './chem/VoxelWorld';\r\nimport selectors from './chem/selectors';\r\nimport Molecule from './chem/Molecule';\r\n\r\nexport default {\r\n Atom,\r\n Element,\r\n Bond,\r\n Residue,\r\n ResidueType,\r\n Chain,\r\n Helix,\r\n Strand,\r\n Sheet,\r\n SGroup,\r\n Assembly,\r\n Complex,\r\n Volume,\r\n VoxelWorld,\r\n selectors,\r\n Molecule,\r\n};\r\n","/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nimport * as THREE from 'three';\r\n\r\nclass CSS2DObject extends THREE.Object3D {\r\n constructor(element) {\r\n super();\r\n const self = this;\r\n this._element = element;\r\n this._element.style.position = 'absolute';\r\n this.addEventListener('removed', () => {\r\n if (self._element.parentNode !== null) {\r\n self._element.parentNode.removeChild(self._element);\r\n }\r\n });\r\n }\r\n\r\n getElement() {\r\n return this._element;\r\n }\r\n\r\n /**\r\n * Sets label transparency.\r\n *\r\n * @param {number} transp - in [0; 1] 1 means fully transparent\r\n */\r\n setTransparency(transp) {\r\n const el = this.getElement();\r\n if (el === null) {\r\n return;\r\n }\r\n if (transp === 1.0) {\r\n el.style.display = 'none';\r\n return;\r\n }\r\n el.style.display = 'inline';\r\n const op = 1.0 - transp;\r\n const top = op.toString();\r\n const op100 = op * 100;\r\n el.style.opacity = top;\r\n el.style.filter = `alpha(opacity=${op100})`; // IE fallback\r\n }\r\n\r\n clone() {\r\n const obj = new CSS2DObject(this._element);\r\n obj.copy(this);\r\n return obj;\r\n }\r\n}\r\n\r\nexport default CSS2DObject;\r\n","import * as THREE from 'three';\r\n\r\nclass RCGroup extends THREE.Group {\r\n raycast(raycaster, intersects) {\r\n if (!this.visible) {\r\n return;\r\n }\r\n\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n children[i].raycast(raycaster, intersects);\r\n }\r\n }\r\n\r\n enableSubset(mask, innerOnly) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].enableSubset) {\r\n children[i].enableSubset(mask, innerOnly);\r\n }\r\n }\r\n }\r\n\r\n disableSubset(mask, innerOnly) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].disableSubset) {\r\n children[i].disableSubset(mask, innerOnly);\r\n }\r\n }\r\n }\r\n\r\n isEmpty() {\r\n return this.children.length === 0;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].updateToFrame) {\r\n children[i].updateToFrame(frameData);\r\n }\r\n }\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n Array.prototype.push.apply(totalSubset, children[i].getSubset(mask, innerOnly));\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default RCGroup;\r\n","/* eslint-disable no-magic-numbers */\r\nimport * as THREE from 'three';\r\nimport logger from '../utils/logger';\r\nimport CSS2DObject from './CSS2DObject';\r\nimport RCGroup from './RCGroup';\r\nimport vertexScreenQuadShader from './shaders/ScreenQuad.vert';\r\nimport fragmentScreenQuadFromTex from './shaders/ScreenQuadFromTex.frag';\r\nimport fragmentScreenQuadFromTexWithDistortion from './shaders/ScreenQuadFromTexWithDistortion.frag';\r\n\r\nconst LAYERS = {\r\n DEFAULT: 0, VOLUME: 1, TRANSPARENT: 2, PREPASS_TRANSPARENT: 3, VOLUME_BFPLANE: 4, COLOR_FROM_POSITION: 5, SHADOWMAP: 6,\r\n};\r\n\r\nconst SELECTION_LAYERS = [ // These layers, that are used in the selection by ray casting\r\n LAYERS.DEFAULT, LAYERS.TRANSPARENT,\r\n];\r\n\r\nTHREE.Object3D.prototype.resetTransform = function () {\r\n this.position.set(0, 0, 0);\r\n this.quaternion.set(0, 0, 0, 1);\r\n this.scale.set(1, 1, 1);\r\n};\r\n\r\n// update world matrix of this object and all its ancestors\r\nTHREE.Object3D.prototype.updateMatrixWorldRecursive = function () {\r\n if (this.parent != null) {\r\n this.parent.updateMatrixWorldRecursive();\r\n }\r\n this.updateMatrixWorld();\r\n};\r\n// add object to parent, saving objects' world transform\r\nTHREE.Object3D.prototype.addSavingWorldTransform = (function () {\r\n const _worldMatrixInverse = new THREE.Matrix4();\r\n\r\n return function (object) {\r\n if (object instanceof THREE.Object3D) {\r\n _worldMatrixInverse.copy(this.matrixWorld).invert();\r\n _worldMatrixInverse.multiply(object.matrixWorld);\r\n object.matrix.copy(_worldMatrixInverse);\r\n object.matrix.decompose(object.position, object.quaternion, object.scale);\r\n this.add(object);\r\n }\r\n };\r\n}());\r\n\r\n// render a tiny transparent quad in the center of the screen\r\nTHREE.WebGLRenderer.prototype.renderDummyQuad = (function () {\r\n const _material = new THREE.MeshBasicMaterial({ transparent: true, opacity: 0.0, depthWrite: false });\r\n\r\n const _scene = new THREE.Scene();\r\n const _quad = new THREE.Mesh(new THREE.PlaneGeometry(0.01, 0.01), _material);\r\n _scene.add(_quad);\r\n\r\n const _camera = new THREE.OrthographicCamera(-0.5, 0.5, 0.5, -0.5, -10000, 10000);\r\n _camera.position.z = 100;\r\n\r\n return function () {\r\n this.render(_scene, _camera);\r\n };\r\n}());\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuad = (function () {\r\n const _scene = new THREE.Scene();\r\n const _quad = new THREE.Mesh(new THREE.PlaneGeometry(1.0, 1.0));\r\n _scene.add(_quad);\r\n\r\n const _camera = new THREE.OrthographicCamera(-0.5, 0.5, 0.5, -0.5, -10000, 10000);\r\n _camera.position.z = 100;\r\n\r\n return function (material) {\r\n _quad.material = material;\r\n this.render(_scene, _camera);\r\n };\r\n}());\r\n\r\nTHREE.Matrix4.prototype.isIdentity = (function () {\r\n const identity = new THREE.Matrix4();\r\n return function () {\r\n return identity.equals(this);\r\n };\r\n}());\r\n\r\nTHREE.Matrix4.prototype.applyToPointsArray = function (array, stride, w) {\r\n if (!array || !stride || stride < 3) {\r\n return array;\r\n }\r\n w = w || 0; // use point as normal by default\r\n const e = this.elements;\r\n for (let i = 0; i < array.length; i += stride) {\r\n const x = array[i];\r\n const y = array[i + 1];\r\n const z = array[i + 2];\r\n\r\n const persp = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\r\n\r\n array[i] = (e[0] * x + e[4] * y + e[8] * z + e[12] * w) * persp;\r\n array[i + 1] = (e[1] * x + e[5] * y + e[9] * z + e[13] * w) * persp;\r\n array[i + 2] = (e[2] * x + e[6] * y + e[10] * z + e[14] * w) * persp;\r\n }\r\n return array;\r\n};\r\n\r\nclass ScreenQuadMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n if (params.uniforms === undefined) {\r\n params.uniforms = {};\r\n }\r\n params.uniforms.srcTex = { type: 't', value: null };\r\n params.vertexShader = vertexScreenQuadShader;\r\n params.transparent = false;\r\n params.depthTest = false;\r\n params.depthWrite = false;\r\n super(params);\r\n }\r\n}\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuadFromTex = (function () {\r\n const _material = new ScreenQuadMaterial({\r\n uniforms: { opacity: { type: 'f', value: 1.0 } },\r\n fragmentShader: fragmentScreenQuadFromTex,\r\n transparent: true,\r\n });\r\n\r\n return function (srcTex, opacity) {\r\n _material.uniforms.srcTex.value = srcTex;\r\n _material.transparent = (opacity < 1.0);\r\n _material.uniforms.opacity.value = opacity;\r\n this.renderScreenQuad(_material);\r\n };\r\n}());\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuadFromTexWithDistortion = (function () {\r\n const _material = new ScreenQuadMaterial({\r\n uniforms: { coef: { type: 'f', value: 1.0 } },\r\n fragmentShader: fragmentScreenQuadFromTexWithDistortion,\r\n });\r\n\r\n return function (srcTex, coef) {\r\n _material.uniforms.srcTex.value = srcTex;\r\n _material.uniforms.coef.value = coef;\r\n this.renderScreenQuad(_material);\r\n };\r\n}());\r\n\r\n/**\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.PerspectiveCamera.prototype.setMinimalFov = function (angle) {\r\n if (this.aspect >= 1.0) {\r\n this.fov = angle;\r\n } else {\r\n this.fov = THREE.MathUtils.radToDeg(2 * Math.atan(Math.tan(THREE.MathUtils.degToRad(angle) * 0.5) / this.aspect));\r\n }\r\n};\r\n\r\n/**\r\n * @param {THREE.PerspectiveCamera} camera - Base camera for this stereo camera.\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.StereoCamera.prototype.updateHalfSized = function (camera, angle) {\r\n const originalAspect = camera.aspect;\r\n const originalFov = camera.fov;\r\n\r\n camera.aspect = originalAspect / 2.0;\r\n camera.setMinimalFov(angle);\r\n camera.updateProjectionMatrix();\r\n\r\n this.update(camera);\r\n\r\n camera.aspect = originalAspect;\r\n camera.fov = originalFov;\r\n camera.updateProjectionMatrix();\r\n};\r\n\r\n/**\r\n * @param {number} radius - Radius of bounding sphere in angstroms to fit on screen.\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.PerspectiveCamera.prototype.setDistanceToFit = function (radius, angle) {\r\n this.position.z = radius / Math.sin(0.5 * THREE.MathUtils.degToRad(angle));\r\n};\r\n\r\n/**\r\n * @param {RCGroup} gfxObj - All objects on scene.\r\n * @param {THREE.PerspectiveCamera} camera - Camera used for rendering.\r\n * @param {number} clipPlane - Distance to clip plane.\r\n * @param {number} fogFarPlane - Distance to fog far plane.\r\n */\r\nTHREE.Raycaster.prototype.intersectVisibleObject = function (gfxObj, camera, clipPlane, fogFarPlane) {\r\n const intersects = this.intersectObject(gfxObj, false);\r\n if (intersects.length === 0) {\r\n return null;\r\n }\r\n\r\n // find point closest to camera that doesn't get clipped by camera near plane or clipPlane (if it exists)\r\n const nearPlane = Math.min(camera.near, clipPlane);\r\n let i;\r\n let p = intersects[0];\r\n const v = new THREE.Vector3();\r\n for (i = 0; i < intersects.length; ++i) {\r\n p = intersects[i];\r\n v.copy(p.point);\r\n v.applyMatrix4(camera.matrixWorldInverse);\r\n if (v.z <= -nearPlane) {\r\n break;\r\n }\r\n }\r\n if (i === intersects.length) {\r\n return null;\r\n }\r\n\r\n // check that selected intersection point is not clipped by camera far plane or occluded by fog (if it exists)\r\n const farPlane = Math.min(camera.far, fogFarPlane);\r\n v.copy(p.point);\r\n v.applyMatrix4(camera.matrixWorldInverse);\r\n if (v.z <= -farPlane) {\r\n return null;\r\n }\r\n return p;\r\n};\r\n\r\nTHREE.Matrix4.prototype.extractScale = (function () {\r\n const _v = new THREE.Vector3();\r\n\r\n return function (scale) {\r\n if (scale === undefined) {\r\n logger.debug('extractScale(): new is too expensive operation to do it on-the-fly');\r\n scale = _v.clone();\r\n }\r\n\r\n const te = this.elements;\r\n scale.x = _v.set(te[0], te[1], te[2]).length();\r\n scale.y = _v.set(te[4], te[5], te[6]).length();\r\n scale.z = _v.set(te[8], te[9], te[10]).length();\r\n\r\n // if determine is negative, we need to invert one scale\r\n const det = this.determinant();\r\n if (det < 0) {\r\n scale.x = -scale.x;\r\n }\r\n return scale;\r\n };\r\n}());\r\n\r\nfunction _calcCylinderMatrix(posBegin, posEnd, radius) {\r\n const posCenter = posBegin.clone().lerp(posEnd, 0.5);\r\n const matScale = new THREE.Matrix4();\r\n matScale.makeScale(radius, posBegin.distanceTo(posEnd), radius);\r\n\r\n const matRotHalf = new THREE.Matrix4();\r\n matRotHalf.makeRotationX(Math.PI / 2);\r\n\r\n const matRotLook = new THREE.Matrix4();\r\n const vUp = new THREE.Vector3(0, 1, 0);\r\n matRotLook.lookAt(posCenter, posEnd, vUp);\r\n\r\n matRotLook.multiply(matRotHalf);\r\n matRotLook.multiply(matScale);\r\n matRotLook.setPosition(posCenter);\r\n return matRotLook;\r\n}\r\n\r\nfunction _calcChunkMatrix(eye, target, up, rad) {\r\n const matScale = new THREE.Matrix4();\r\n matScale.makeScale(rad.x, rad.y, 0);\r\n\r\n const matRotLook = new THREE.Matrix4();\r\n matRotLook.lookAt(eye, target, up);\r\n matRotLook.multiply(matScale);\r\n matRotLook.setPosition(eye);\r\n\r\n return matRotLook;\r\n}\r\n\r\nfunction _groupHasGeometryToRender(group) {\r\n let hasGeoms = false;\r\n group.traverse((node) => {\r\n if (node.hasOwnProperty('geometry') || node instanceof CSS2DObject) {\r\n hasGeoms = true;\r\n }\r\n });\r\n return hasGeoms;\r\n}\r\n\r\nfunction _buildDistorionMesh(widthSegments, heightSegements, coef) {\r\n // solve equation r_u = r_d * (1 + k * r_d^2)\r\n // for r_d using iterations\r\n // takes: r_u^2\r\n // returns: r_d / r_u factor that can be used to distort point coords\r\n function calcInverseBarrel(r2) {\r\n const epsilon = 1e-5;\r\n let prevR2 = 0.0;\r\n let curR2 = r2;\r\n let dr = 1.0;\r\n while (Math.abs(curR2 - prevR2) > epsilon) {\r\n dr = 1.0 + coef * curR2;\r\n prevR2 = curR2;\r\n curR2 = r2 / (dr * dr);\r\n }\r\n\r\n return 1.0 / dr;\r\n }\r\n\r\n const geo = new THREE.PlaneGeometry(2.0, 2.0, widthSegments, heightSegements);\r\n\r\n const pos = geo.getAttribute('position');\r\n for (let i = 0; i < pos.count; ++i) {\r\n const x = pos.array[3 * i];\r\n const y = pos.array[3 * i + 1];\r\n const c = calcInverseBarrel(x * x + y * y);\r\n pos.setXY(i, c * x, c * y);\r\n }\r\n\r\n return geo;\r\n}\r\n\r\nTHREE.BufferAttribute.prototype.copyAtList = function (attribute, indexList) {\r\n console.assert(\r\n this.itemSize === attribute.itemSize,\r\n 'DEBUG: BufferAttribute.copyAtList buffers have different item size.',\r\n );\r\n const { itemSize } = this;\r\n for (let i = 0, n = indexList.length; i < n; ++i) {\r\n for (let j = 0; j < itemSize; ++j) {\r\n this.array[i * itemSize + j] = attribute.array[indexList[i] * itemSize + j];\r\n }\r\n }\r\n return this;\r\n};\r\n\r\nfunction fillArray(array, value, startIndex, endIndex) {\r\n startIndex = (typeof startIndex !== 'undefined') ? startIndex : 0;\r\n endIndex = (typeof endIndex !== 'undefined') ? endIndex : array.length;\r\n for (let i = startIndex; i < endIndex; ++i) {\r\n array[i] = value;\r\n }\r\n}\r\n\r\n/** @param {THREE.Object3D} object - Parent object. */\r\nfunction removeChildren(object) {\r\n const { children } = object;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n child.parent = null;\r\n child.dispatchEvent({ type: 'removed' });\r\n }\r\n object.children = [];\r\n}\r\n\r\nfunction clearTree(object) {\r\n object.traverse((obj) => {\r\n if (obj instanceof THREE.Mesh || obj instanceof THREE.LineSegments || obj instanceof THREE.Line) {\r\n obj.geometry.dispose();\r\n }\r\n });\r\n removeChildren(object);\r\n}\r\n\r\nfunction destroyObject(object) {\r\n clearTree(object);\r\n if (object.parent) {\r\n object.parent.remove(object);\r\n } else {\r\n object.dispatchEvent({ type: 'removed' });\r\n }\r\n}\r\n\r\nfunction belongToSelectLayers(object) {\r\n for (let i = 0; i < SELECTION_LAYERS.length; i++) {\r\n if (((object.layers.mask >> SELECTION_LAYERS[i]) & 1) === 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction processObjRenderOrder(root, idMaterial) {\r\n // set renderOrder to 0 for Backdrop and to 1 in other cases to render Backdrop earlier all other materials\r\n const renderOrder = +(idMaterial !== 'BA');\r\n root.traverse((object) => {\r\n if (object.isGroup) {\r\n object.renderOrder = renderOrder;\r\n }\r\n });\r\n}\r\n\r\nfunction applySelectionMaterial(geo) {\r\n geo.traverse((node) => {\r\n if ('material' in node) {\r\n node.material = node.material.clone(true);\r\n // using z-offset to magically fix selection rendering artifact (on z-sprites)\r\n node.material.setValues({\r\n depthFunc: THREE.LessEqualDepth,\r\n overrideColor: true,\r\n fog: false,\r\n lights: false,\r\n shadowmap: false,\r\n });\r\n node.material.setUberOptions({ fixedColor: new THREE.Color(0xFFFF00), zOffset: -1e-6 });\r\n }\r\n });\r\n}\r\n\r\nfunction getMiddlePoint(point1, point2, optionalTarget) {\r\n const result = optionalTarget || new THREE.Vector3();\r\n\r\n result.set(0, 0, 0);\r\n result.addScaledVector(point1, 0.5);\r\n result.addScaledVector(point2, 0.5);\r\n\r\n return result;\r\n}\r\n\r\n// Monkey-patch for \"InstancedBufferGeometry.instanceCount becomes undefined after copy()\"\r\n// https://github.com/mrdoob/three.js/issues/22151\r\nconst _oldInstancedBufferGeometryCopy = THREE.InstancedBufferGeometry.prototype.copy;\r\n\r\nTHREE.InstancedBufferGeometry.prototype.copy = function (source) {\r\n _oldInstancedBufferGeometryCopy.call(this, source);\r\n if (this.instanceCount === undefined) {\r\n this.instanceCount = Infinity;\r\n }\r\n};\r\n\r\nexport default {\r\n calcCylinderMatrix: _calcCylinderMatrix,\r\n calcChunkMatrix: _calcChunkMatrix,\r\n groupHasGeometryToRender: _groupHasGeometryToRender,\r\n buildDistorionMesh: _buildDistorionMesh,\r\n RCGroup,\r\n fillArray,\r\n clearTree,\r\n destroyObject,\r\n belongToSelectLayers,\r\n processObjRenderOrder,\r\n applySelectionMaterial,\r\n getMiddlePoint,\r\n LAYERS,\r\n};\r\n","import * as THREE from 'three';\r\nimport gfxutils from './gfx/gfxutils';\r\n\r\nconst _defaultBoundaries = {\r\n boundingBox: new THREE.Box3(new THREE.Vector3(-1, -1, -1), new THREE.Vector3(1, 1, 1)),\r\n boundingSphere: new THREE.Sphere(new THREE.Vector3(0, 0, 0), 1),\r\n};\r\n\r\nclass Visual extends gfxutils.RCGroup {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this.name = name;\r\n this._dataSource = dataSource;\r\n }\r\n\r\n release() {\r\n if (this.parent) {\r\n this.parent.remove(this);\r\n }\r\n }\r\n\r\n getDataSource() {\r\n return this._dataSource;\r\n }\r\n\r\n getBoundaries() {\r\n return _defaultBoundaries;\r\n }\r\n}\r\n\r\nexport default Visual;\r\n","function _ensureArray(x) {\r\n if (x === null || x === undefined || Array.isArray(x)) {\r\n return x;\r\n }\r\n return [x];\r\n}\r\n\r\n/** An indexed list of objects or classes. */\r\nclass EntityList {\r\n /**\r\n * Create a list of objects.\r\n * The objects can be indexed by one or more properties for the later retrieval.\r\n *\r\n * @param {!Array=} entities A list of objects to automatically register at creation time.\r\n * @param {!Array=} indices A list of property names to use for case-insensitive indexing.\r\n * By default, a single `.id` property is used.\r\n * @see EntityList#register\r\n */\r\n constructor(entities = [], indices = ['id']) {\r\n this._list = [];\r\n this._dict = {};\r\n this._indices = [...indices];\r\n this._indices.forEach((index) => {\r\n this._dict[index] = {};\r\n });\r\n\r\n entities.forEach((entity) => this.register(entity));\r\n }\r\n\r\n /**\r\n * Add a value to the end of a list.\r\n * The list will contain only one copy of the value.\r\n *\r\n * @param {!Array} list An array.\r\n * @param {*} value A value to add.\r\n * @see EntityList.unregisterFromList\r\n * @see EntityList.registerInDict\r\n */\r\n static registerInList(list, value) {\r\n if (!list.includes(value)) {\r\n list.push(value);\r\n }\r\n }\r\n\r\n /**\r\n * Remove a value from a list if it is there.\r\n *\r\n * @param {!Array} list An array.\r\n * @param {*} value A value to remove.\r\n * @see EntityList.registerInList\r\n */\r\n static unregisterFromList(list, value) {\r\n const pos = list.indexOf(value);\r\n if (pos !== -1) {\r\n list.splice(pos, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Add a value to a dictionary.\r\n * The value may be stored under multiple different keys (aliases).\r\n * There might be multiples values stored under the same key.\r\n *\r\n * @param {!Object} dict A dictionary.\r\n * @param {!Array} keys An array of keys.\r\n * @param {*} value A value to add.\r\n * @see EntityList.unregisterFromDict\r\n * @see EntityList.registerInList\r\n */\r\n static registerInDict(dict, keys, value) {\r\n keys.forEach((key) => {\r\n key = key.toLowerCase();\r\n const list = dict[key] = dict[key] || [];\r\n if (!list.includes(value)) {\r\n list.push(value);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove a value from a dictionary.\r\n * The value may be stored under multiple different keys (aliases).\r\n * There might be multiples values stored under the same key.\r\n *\r\n * @param {!Object} dict A dictionary.\r\n * @param {!Array} keys An array of keys.\r\n * @param {*} value A value to add.\r\n * @see EntityList.registerInDict\r\n */\r\n static unregisterFromDict(dict, keys, value) {\r\n keys.forEach((key) => {\r\n key = key.toLowerCase();\r\n const list = dict[key];\r\n if (list) {\r\n const pos = list.indexOf(value);\r\n if (pos !== -1) {\r\n list.splice(pos, 1);\r\n }\r\n if (list.length === 0) {\r\n delete dict[key];\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Add an entity to this list.\r\n *\r\n * @param {!Object} entity An object or a class to register. The object must include all\r\n * properties specified as indices on construction.\r\n * @see EntityList#unregister\r\n */\r\n register(entity) {\r\n EntityList.registerInList(this._list, entity);\r\n this._indices.forEach((index) => {\r\n EntityList.registerInDict(this._dict[index], _ensureArray(entity[index]), entity);\r\n });\r\n }\r\n\r\n /**\r\n * Remove an entity from this list.\r\n *\r\n * @param {!Object} entity An object or a class to unregister. The object may be\r\n * missing from the list but it must include all properties specified as indices\r\n * on construction.\r\n * @see EntityList#register\r\n */\r\n unregister(entity) {\r\n EntityList.unregisterFromList(this._list, entity);\r\n this._indices.forEach((index) => {\r\n EntityList.unregisterFromDict(this._dict[index], _ensureArray(entity[index]), entity);\r\n });\r\n }\r\n\r\n /**\r\n * An ordered list of all registered entities.\r\n * It is a read-only copy, use {@link EntityList#register} and {@link EntityList#unregister}\r\n * to modify it.\r\n *\r\n * @type {!Array}\r\n */\r\n get all() {\r\n return [...this._list];\r\n }\r\n\r\n /**\r\n * The first registered entity.\r\n * Use it if you do not care which entity you are referring to.\r\n *\r\n * @type {Object=}\r\n */\r\n get first() {\r\n return this._list[0];\r\n }\r\n\r\n /**\r\n * Retrieve a list of keys for the index.\r\n *\r\n * @param {string=} index One of the indices specified during the list construction. If omitted,\r\n * the first of the indices is used.\r\n * @returns {!Array} An unordered list of keys in the index, i.e. particular property\r\n * values for all registered entities.\r\n */\r\n keys(index) {\r\n return Object.keys(this._dict[index || this._indices[0]]);\r\n }\r\n\r\n /**\r\n * Retrieve an entity by its key.\r\n *\r\n * @param {string} key A case-insensitive property value to look-up.\r\n * @param {string=} index One of the indices specified during the list construction. If omitted,\r\n * the first of the indices is used.\r\n * @returns {Object=} An object registered in the index under the key. If there are multiple\r\n * objects under the same key, the first one is returned.\r\n */\r\n get(key, index) {\r\n const dict = this._dict[index || this._indices[0]];\r\n if (dict) {\r\n const values = dict[key && key.toLowerCase()];\r\n return values && values.length > 0 ? values[0] : undefined;\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nexport default EntityList;\r\n","import settings from '../settings';\r\nimport logger from './logger';\r\n\r\nfunction makeContextDependent(prototype) {\r\n Object.defineProperties(prototype, {\r\n logger: {\r\n get() {\r\n return this.context && this.context.logger ? this.context.logger : logger;\r\n },\r\n },\r\n settings: {\r\n get() {\r\n return this.context && this.context.settings ? this.context.settings : settings;\r\n },\r\n },\r\n });\r\n}\r\n\r\nexport default makeContextDependent;\r\n","import * as THREE from 'three';\r\n\r\nclass CollisionSphere {\r\n constructor(position, radius) {\r\n this._position = position;\r\n this._radius = radius;\r\n }\r\n\r\n static _sphere = new THREE.Sphere();\r\n\r\n raycast(raycaster) {\r\n const sphere = CollisionSphere._sphere;\r\n sphere.set(this._position, this._radius);\r\n\r\n const p = new THREE.Vector3();\r\n if (raycaster.ray.intersectSphere(sphere, p)) {\r\n return {\r\n distance: raycaster.ray.origin.distanceTo(p),\r\n point: p,\r\n };\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nconst SphereCollisionGeo = (base) => class extends base {\r\n constructor(count, ...args) {\r\n super(...args);\r\n this._objects = new Array(count);\r\n this.boundingSphere = null;\r\n this.boundingBox = null;\r\n }\r\n\r\n setSphere(idx, position, radius) {\r\n this._objects[idx] = new CollisionSphere(position, radius);\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n // TODO raycast with bounding sphere? How to deal with updates?\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const inters = this._objects[i].raycast(raycaster);\r\n if (inters) {\r\n inters.chunkIdx = i;\r\n intersects.push(inters);\r\n }\r\n }\r\n }\r\n\r\n computeBoundingBox() {\r\n const objects = this._objects;\r\n let { boundingBox } = this;\r\n if (boundingBox === null) {\r\n this.boundingBox = boundingBox = new THREE.Box3();\r\n }\r\n boundingBox.makeEmpty();\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n boundingBox.expandByPoint(objects[i]._position);\r\n }\r\n }\r\n\r\n computeBoundingSphere() {\r\n this.computeBoundingBox();\r\n const objects = this._objects;\r\n const { boundingBox } = this;\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n const pos = objects[i]._position;\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n if (this.boundingSphere === null) {\r\n this.boundingSphere = new THREE.Sphere();\r\n }\r\n this.boundingSphere.set(center, Math.sqrt(radiusSquared));\r\n }\r\n};\r\nexport default SphereCollisionGeo;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst tmpColor = new THREE.Color();\r\n\r\nconst OFFSET_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst { copySubArrays } = utils;\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\nclass InstancedSpheresGeometry extends SphereCollisionGeo(THREE.InstancedBufferGeometry) {\r\n constructor(spheresCount, sphereComplexity, useZSprites) {\r\n super(spheresCount);\r\n this._sphGeometry = useZSprites ? new THREE.PlaneGeometry(2, 2, 1, 1)\r\n : new THREE.SphereBufferGeometry(1, sphereComplexity * 2, sphereComplexity, 0, Math.PI * 2, 0, Math.PI);\r\n this._init(spheresCount, this._sphGeometry);\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n setArrayXYZW(this._offsets, itemIdx * OFFSET_SIZE, itemPos.x, itemPos.y, itemPos.z, itemRad);\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n }\r\n\r\n setColor(itemIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n setArrayXYZ(this._colors, itemIdx * COLOR_SIZE, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('offset').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n alphaArr[chunkIndices[i]] = value;\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const geom = new THREE.InstancedBufferGeometry();\r\n this._init.call(geom, instanceCount, this._sphGeometry);\r\n\r\n copySubArrays(this._offsets, geom._offsets, chunkIndices, OFFSET_SIZE);\r\n copySubArrays(this._colors, geom._colors, chunkIndices, COLOR_SIZE);\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n _init(spheresCount, sphereGeo) {\r\n this.copy(sphereGeo);\r\n\r\n this._offsets = utils.allocateTyped(Float32Array, spheresCount * OFFSET_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, spheresCount * COLOR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, spheresCount);\r\n _.fill(alpha, 1.0);\r\n\r\n this.setAttribute('offset', new THREE.InstancedBufferAttribute(this._offsets, OFFSET_SIZE, false, 1));\r\n this.setAttribute('color', new THREE.InstancedBufferAttribute(this._colors, COLOR_SIZE, false, 1));\r\n this.setAttribute('alphaColor', new THREE.InstancedBufferAttribute(alpha, 1, false, 1));\r\n }\r\n}\r\nexport default InstancedSpheresGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_IDC_16BIT = 65535;\r\nconst VEC_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\n\r\n/**\r\n * This class represents geometry which consists of separate chunks.\r\n * Each chunk has same index and similar geometry with equal points and faces count.\r\n * Each chunk has by default only one color.\r\n * @constructor\r\n */\r\n\r\nclass ChunkedObjectsGeometry extends THREE.BufferGeometry {\r\n constructor(chunkGeo, chunksCount) {\r\n super();\r\n\r\n if (this.constructor === ChunkedObjectsGeometry) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n\r\n this._chunkGeo = chunkGeo;\r\n\r\n this._init(chunkGeo, chunksCount);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('position').needsUpdate = true;\r\n this.getAttribute('normal').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n const colors = this._colors;\r\n const chunkSize = this._chunkSize;\r\n for (let i = chunkIdx * chunkSize, end = i + chunkSize; i < end; ++i) {\r\n const idx = i * VEC_SIZE;\r\n colors[idx] = tmpColor.r;\r\n colors[idx + 1] = tmpColor.g;\r\n colors[idx + 2] = tmpColor.b;\r\n }\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n const chunkSize = this._chunkSize;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const left = chunkIndices[i] * chunkSize;\r\n _.fill(alphaArr, value, left, left + chunkSize);\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const inters = [];\r\n // use THREE.Mesh raycasting interface for the Geometry. The Mesh is\r\n // created with existed geometry and default material, so it doesn't slowdown.\r\n const mesh = new THREE.Mesh();\r\n mesh.geometry = this;\r\n mesh.raycast(raycaster, inters);\r\n\r\n const facesPerChunk = this._chunkGeo.index.count / 3;\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('faceIndex')) {\r\n continue;\r\n }\r\n inters[i].chunkIdx = Math.floor(inters[i].faceIndex / facesPerChunk);\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const geom = new THREE.BufferGeometry();\r\n this._init.call(geom, this._chunkGeo, instanceCount);\r\n\r\n const srcPos = this._positions;\r\n const srcNorm = this._normals;\r\n const srcColor = this._colors;\r\n\r\n const dstPos = geom._positions;\r\n const dstNorm = geom._normals;\r\n const dstColor = geom._colors;\r\n\r\n const chunkSize = this._chunkSize * VEC_SIZE;\r\n\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const dstPtOffset = i * chunkSize;\r\n const ptIdxBegin = chunkIndices[i] * chunkSize;\r\n const ptIdxEnd = ptIdxBegin + chunkSize;\r\n dstPos.set(srcPos.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n dstNorm.set(srcNorm.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n dstColor.set(srcColor.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n }\r\n\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n _init(chunkGeo, chunksCount) {\r\n const chunkSize = this._chunkSize = chunkGeo.attributes.position.count;\r\n const chunkIndex = chunkGeo.index.array;\r\n const chunkIndexSize = chunkIndex.length;\r\n const pointsCount = this._chunkSize * chunksCount;\r\n const use32bitIndex = pointsCount > MAX_IDC_16BIT;\r\n const indexSize = chunkIndexSize * chunksCount;\r\n const index = this._index = utils.allocateTyped(use32bitIndex ? Uint32Array : Uint16Array, indexSize);\r\n this._positions = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n this._normals = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, pointsCount);\r\n _.fill(alpha, 1.0);\r\n\r\n for (let i = 0; i < chunksCount; ++i) {\r\n const offset = i * chunkIndexSize;\r\n const posOffset = i * chunkSize;\r\n index.set(chunkIndex, offset);\r\n for (let j = 0; j < chunkIndexSize; ++j) {\r\n index[offset + j] += posOffset;\r\n }\r\n }\r\n\r\n this.setIndex(new THREE.BufferAttribute(this._index, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(this._positions, VEC_SIZE));\r\n this.setAttribute('normal', new THREE.BufferAttribute(this._normals, VEC_SIZE));\r\n this.setAttribute('color', new THREE.BufferAttribute(this._colors, VEC_SIZE));\r\n this.setAttribute('alphaColor', new THREE.BufferAttribute(alpha, 1));\r\n }\r\n}\r\nexport default ChunkedObjectsGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst VEC_SIZE = 3;\r\n\r\nclass SimpleSpheresGeometry extends SphereCollisionGeo(ChunkedObjectsGeometry) {\r\n constructor(spheresCount, sphereComplexity) {\r\n const sphGeometry = new THREE.SphereBufferGeometry(\r\n 1,\r\n sphereComplexity * 2,\r\n sphereComplexity,\r\n 0,\r\n Math.PI * 2,\r\n 0,\r\n Math.PI,\r\n );\r\n super(spheresCount, sphGeometry, spheresCount);\r\n\r\n const normals = this._normals;\r\n const geoNormals = sphGeometry.attributes.normal.array;\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._tmpPositions = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n for (let i = 0; i < spheresCount; ++i) {\r\n normals.set(geoNormals, chunkSize * VEC_SIZE * i);\r\n }\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n const tmpPos = this._tmpPositions;\r\n const chunkSize = this._chunkSize;\r\n const geoPos = this._chunkPos;\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n const idx = i * 3;\r\n tmpPos[idx] = itemPos.x + geoPos[idx] * itemRad;\r\n tmpPos[idx + 1] = itemPos.y + geoPos[idx + 1] * itemRad;\r\n tmpPos[idx + 2] = itemPos.z + geoPos[idx + 2] * itemRad;\r\n }\r\n\r\n this._positions.set(tmpPos, chunkSize * itemIdx * VEC_SIZE);\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n }\r\n}\r\nexport default SimpleSpheresGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst centerPos = new THREE.Vector3();\r\nconst tmpVector = new THREE.Vector3();\r\nconst normMtx = new THREE.Matrix3();\r\n\r\nclass Simple2CCylindersGeometry extends ChunkedObjectsGeometry {\r\n constructor(instanceCount, polyComplexity) {\r\n const cylGeometry = new THREE.CylinderGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, true);\r\n super(cylGeometry, 2 * instanceCount);\r\n\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._chunkNorms = this._chunkGeo.attributes.normal.array;\r\n this._tmpVector = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const chunkSize = this._chunkSize;\r\n const firstOffset = chunkSize * 2 * itemIdx * VEC_SIZE;\r\n const secondOffset = firstOffset + chunkSize * VEC_SIZE;\r\n\r\n const tmpArray = this._tmpVector;\r\n const geoPos = this._chunkPos;\r\n const geoNorm = this._chunkNorms;\r\n\r\n centerPos.lerpVectors(botPos, topPos, 0.5);\r\n const mtx1 = gfxutils.calcCylinderMatrix(botPos, centerPos, itemRad);\r\n normMtx.getNormalMatrix(mtx1);\r\n\r\n let idx;\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoPos, idx);\r\n tmpVector.applyMatrix4(mtx1);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._positions.set(tmpArray, firstOffset);\r\n\r\n // now shift center to get another part of the cylinder\r\n centerPos.sub(botPos);\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpArray[idx] += centerPos.x;\r\n tmpArray[idx + 1] += centerPos.y;\r\n tmpArray[idx + 2] += centerPos.z;\r\n }\r\n this._positions.set(tmpArray, secondOffset);\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoNorm, idx);\r\n tmpVector.applyMatrix3(normMtx);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._normals.set(tmpArray, firstOffset);\r\n this._normals.set(tmpArray, secondOffset);\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const first = 2 * itemIdx;\r\n super.setColor(first, colorVal1);\r\n\r\n const second = first + 1;\r\n super.setColor(second, colorVal2);\r\n }\r\n}\r\n\r\nexport default Simple2CCylindersGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_POINTS_COUNT_16BIT = 65536;\r\nconst PTS_PER_TRIANGLE = 3;\r\n\r\nclass CylinderBufferGeometry extends THREE.BufferGeometry {\r\n constructor(\r\n radiusTop,\r\n radiusBottom,\r\n height,\r\n radialSegments,\r\n heightSegments,\r\n openEnded,\r\n ) {\r\n super();\r\n\r\n const thetaStart = 0;\r\n const thetaLength = 2 * Math.PI;\r\n\r\n this.type = 'CylinderBufferGeometry';\r\n\r\n this.parameters = {\r\n radiusTop,\r\n radiusBottom,\r\n height,\r\n radialSegments,\r\n heightSegments,\r\n openEnded,\r\n };\r\n\r\n const hasTop = openEnded === false && radiusTop > 0;\r\n const hasBottom = openEnded === false && radiusBottom > 0;\r\n const vertexCount = (heightSegments + 1) * radialSegments\r\n + hasTop * (radialSegments + 1)\r\n + hasBottom * (radialSegments + 1);\r\n const facesCount = (2 * heightSegments + hasTop + hasBottom) * radialSegments;\r\n\r\n const heightHalf = height / 2;\r\n\r\n /* eslint-disable no-magic-numbers */\r\n const positions = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3);\r\n const normals = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3);\r\n const indices = new THREE.Uint16BufferAttribute(utils.allocateTyped(Uint16Array, facesCount * PTS_PER_TRIANGLE), 1);\r\n /* eslint-enable no-magic-numbers */\r\n\r\n const uvs = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 2), 2);\r\n console.assert(vertexCount < MAX_POINTS_COUNT_16BIT, 'DEBUG: Cylinder Geometry has too many vertices (65536 max).');\r\n\r\n let currVtxIdx = 0;\r\n let currFaceIdx = 0;\r\n const tanTheta = -(radiusBottom - radiusTop) / height;\r\n\r\n // setup cylinder data\r\n for (let y = 0; y <= heightSegments; y++) {\r\n // faces\r\n if (y !== heightSegments) {\r\n for (let i = 0; i < radialSegments; i++) {\r\n const v1 = currVtxIdx + i;\r\n const v2 = currVtxIdx + radialSegments + i;\r\n const v3 = currVtxIdx + radialSegments + ((i + 1) % radialSegments);\r\n const v4 = currVtxIdx + ((i + 1) % radialSegments);\r\n\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, v1, v4, v2);\r\n currFaceIdx++;\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, v2, v4, v3);\r\n currFaceIdx++;\r\n }\r\n }\r\n\r\n // vertices\r\n const v = y / heightSegments;\r\n const radius = v * (radiusBottom - radiusTop) + radiusTop;\r\n\r\n for (let x = 0; x < radialSegments; x++) {\r\n const u = x / radialSegments;\r\n\r\n const vx = radius * Math.sin(u * thetaLength + thetaStart);\r\n const vy = v * height - heightHalf;\r\n const vz = radius * Math.cos(u * thetaLength + thetaStart);\r\n\r\n const normal = new THREE.Vector3(\r\n vx,\r\n Math.sqrt(vx * vx + vz * vz) * tanTheta,\r\n vz,\r\n ).normalize();\r\n\r\n positions.setXYZ(currVtxIdx, vx, vy, vz);\r\n normals.setXYZ(currVtxIdx, normal.x, normal.y, normal.z);\r\n uvs.setXY(currVtxIdx, u, v);\r\n ++currVtxIdx;\r\n }\r\n }\r\n\r\n // top cap\r\n if (hasTop) {\r\n const startTIdx = currVtxIdx;\r\n const lastIdx = currVtxIdx + radialSegments;\r\n for (let fTIdx = 0; fTIdx < radialSegments; ++fTIdx) {\r\n const currSrcIdx = currVtxIdx - radialSegments;\r\n positions.setXYZ(\r\n currVtxIdx,\r\n positions.getX(currSrcIdx),\r\n positions.getY(currSrcIdx),\r\n positions.getZ(currSrcIdx),\r\n );\r\n normals.setXYZ(currVtxIdx, 0, 1, 0);\r\n uvs.setXY(currVtxIdx, 1, 1);\r\n\r\n const nextTVtx = startTIdx + ((fTIdx + 1) % radialSegments);\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, currVtxIdx, nextTVtx, lastIdx);\r\n currFaceIdx++;\r\n currVtxIdx++;\r\n }\r\n\r\n positions.setXYZ(currVtxIdx, 0, heightHalf, 0);\r\n normals.setXYZ(currVtxIdx, 0, 1, 0);\r\n uvs.setXY(currVtxIdx, 1, 1);\r\n ++currVtxIdx;\r\n }\r\n\r\n // bottom cap\r\n if (hasBottom) {\r\n const startBIdx = currVtxIdx;\r\n const lastBIdx = currVtxIdx + radialSegments;\r\n for (let fBIdx = 0; fBIdx < radialSegments; ++fBIdx) {\r\n const currSrcBIdx = fBIdx;\r\n positions.setXYZ(\r\n currVtxIdx,\r\n positions.getX(currSrcBIdx),\r\n positions.getY(currSrcBIdx),\r\n positions.getZ(currSrcBIdx),\r\n );\r\n normals.setXYZ(currVtxIdx, 0, -1, 0);\r\n uvs.setXY(currVtxIdx, 0, 0);\r\n\r\n const nextBVtx = startBIdx + ((fBIdx + 1) % radialSegments);\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, nextBVtx, currVtxIdx, lastBIdx);\r\n currFaceIdx++;\r\n currVtxIdx++;\r\n }\r\n\r\n positions.setXYZ(currVtxIdx, 0, -heightHalf, 0);\r\n normals.setXYZ(currVtxIdx, 0, -1, 0);\r\n uvs.setXY(currVtxIdx, 0, 0);\r\n }\r\n\r\n this.setIndex(indices);\r\n this.setAttribute('position', positions);\r\n this.setAttribute('normal', normals);\r\n this.setAttribute('uv', uvs);\r\n }\r\n\r\n clone() {\r\n const { parameters } = this;\r\n\r\n return new CylinderBufferGeometry(\r\n parameters.radiusTop,\r\n parameters.radiusBottom,\r\n parameters.height,\r\n parameters.radialSegments,\r\n parameters.heightSegments,\r\n parameters.openEnded,\r\n );\r\n }\r\n}\r\n\r\nexport default CylinderBufferGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\nimport CylinderBufferGeometry from './CylinderBufferGeometry';\r\n\r\nconst tmpColor = new THREE.Color();\r\nconst invMatrix = new THREE.Matrix4();\r\n\r\nconst OFFSET_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst { copySubArrays } = utils;\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\n\r\nfunction sortNumber(a, b) {\r\n return a - b;\r\n}\r\n\r\nfunction _prepareCylinderInfo(chunkIndices) {\r\n chunkIndices.sort(sortNumber);\r\n const chunksIdx = [];\r\n const cylinderInfo = [];\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const val = chunkIndices[i];\r\n const even = (val | 0) % 2 === 0;\r\n const newPar = {\r\n first: false,\r\n second: false,\r\n };\r\n if (even) {\r\n newPar.first = true;\r\n newPar.second = i + 1 < n && chunkIndices[i + 1] === chunkIndices[i] + 1;\r\n if (newPar.second) {\r\n ++i;\r\n }\r\n } else {\r\n newPar.second = true;\r\n }\r\n chunksIdx.push(Math.floor(val / 2));\r\n cylinderInfo.push(newPar);\r\n }\r\n return { indices: chunksIdx, cylinderInfo };\r\n}\r\n\r\nfunction _assignOpacity(cylinderInfo, color1, color2) {\r\n for (let i = 0, n = cylinderInfo.length; i < n; ++i) {\r\n const info = cylinderInfo[i];\r\n if (!info.first) {\r\n color1[COLOR_SIZE * i] = -0.5;\r\n }\r\n if (!info.second) {\r\n color2[COLOR_SIZE * i] = -0.5;\r\n }\r\n }\r\n}\r\nclass Instanced2CCylindersGeometry extends THREE.InstancedBufferGeometry {\r\n constructor(instanceCount, polyComplexity, useZSprites, openEnded) {\r\n super();\r\n this._useZSprites = useZSprites;\r\n this._cylGeometry = useZSprites ? new THREE.PlaneGeometry(2, 2, 1, 1)\r\n : new CylinderBufferGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, openEnded);\r\n this._init(instanceCount, this._cylGeometry, this._useZSprites);\r\n\r\n this._collisionGeo = new Simple2CCylindersGeometry(instanceCount, 3);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const matrix = gfxutils.calcCylinderMatrix(botPos, topPos, itemRad);\r\n let me = matrix.elements;\r\n const mtxOffset = itemIdx * OFFSET_SIZE;\r\n\r\n this._collisionGeo.setItem(itemIdx, botPos, topPos, itemRad);\r\n setArrayXYZW(this._matVector1, mtxOffset, me[0], me[4], me[8], me[12]);\r\n setArrayXYZW(this._matVector2, mtxOffset, me[1], me[5], me[9], me[13]);\r\n setArrayXYZW(this._matVector3, mtxOffset, me[2], me[6], me[10], me[14]);\r\n\r\n if (this._useZSprites) {\r\n invMatrix.copy(matrix).invert();\r\n me = invMatrix.elements;\r\n setArrayXYZW(this._invmatVector1, mtxOffset, me[0], me[4], me[8], me[12]);\r\n setArrayXYZW(this._invmatVector2, mtxOffset, me[1], me[5], me[9], me[13]);\r\n setArrayXYZW(this._invmatVector3, mtxOffset, me[2], me[6], me[10], me[14]);\r\n }\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const colorIdx = itemIdx * COLOR_SIZE;\r\n tmpColor.set(colorVal1);\r\n setArrayXYZ(this._color1, colorIdx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n tmpColor.set(colorVal2);\r\n setArrayXYZ(this._color2, colorIdx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n computeBoundingSphere() {\r\n this._collisionGeo.computeBoundingSphere();\r\n this.boundingSphere = this._collisionGeo.boundingSphere;\r\n }\r\n\r\n computeBoundingBox() {\r\n this._collisionGeo.computeBoundingBox();\r\n this.boundingBox = this._collisionGeo.boundingBox;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('matVector1').needsUpdate = true;\r\n this.getAttribute('matVector2').needsUpdate = true;\r\n this.getAttribute('matVector3').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n this.getAttribute('color2').needsUpdate = true;\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n if (this._useZSprites) {\r\n this.getAttribute('invmatVector1').needsUpdate = true;\r\n this.getAttribute('invmatVector2').needsUpdate = true;\r\n this.getAttribute('invmatVector3').needsUpdate = true;\r\n }\r\n\r\n this._collisionGeo.finishUpdate();\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n alphaArr[Math.floor(chunkIndices[i] / 2)] = value;\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const info = _prepareCylinderInfo(chunkIndices);\r\n const cylinderIndices = info.indices;\r\n const instanceCount = cylinderIndices.length;\r\n const geom = new THREE.InstancedBufferGeometry();\r\n this._init.call(geom, instanceCount, this._cylGeometry, this._useZSprites);\r\n\r\n copySubArrays(this._matVector1, geom._matVector1, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._matVector2, geom._matVector2, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._matVector3, geom._matVector3, cylinderIndices, OFFSET_SIZE);\r\n\r\n if (this._useZSprites) {\r\n copySubArrays(this._invmatVector1, geom._invmatVector1, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._invmatVector2, geom._invmatVector2, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._invmatVector3, geom._invmatVector3, cylinderIndices, OFFSET_SIZE);\r\n }\r\n\r\n copySubArrays(this._color1, geom._color1, cylinderIndices, COLOR_SIZE);\r\n copySubArrays(this._color2, geom._color2, cylinderIndices, COLOR_SIZE);\r\n _assignOpacity(info.cylinderInfo, geom._color1, geom._color2);\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n getGeoParams() {\r\n return this._cylGeometry.parameters;\r\n }\r\n\r\n _init(instanceCount, cylinderGeo, useZSprites) {\r\n this.copy(cylinderGeo);\r\n this._matVector1 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._matVector2 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._matVector3 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._color1 = utils.allocateTyped(Float32Array, instanceCount * COLOR_SIZE);\r\n this._color2 = utils.allocateTyped(Float32Array, instanceCount * COLOR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, instanceCount);\r\n _.fill(alpha, 1.0);\r\n\r\n this.setAttribute('matVector1', new THREE.InstancedBufferAttribute(this._matVector1, OFFSET_SIZE, false, 1));\r\n this.setAttribute('matVector2', new THREE.InstancedBufferAttribute(this._matVector2, OFFSET_SIZE, false, 1));\r\n this.setAttribute('matVector3', new THREE.InstancedBufferAttribute(this._matVector3, OFFSET_SIZE, false, 1));\r\n this.setAttribute('color', new THREE.InstancedBufferAttribute(this._color1, COLOR_SIZE, false, 1));\r\n this.setAttribute('color2', new THREE.InstancedBufferAttribute(this._color2, COLOR_SIZE, false, 1));\r\n\r\n this.setAttribute('alphaColor', new THREE.InstancedBufferAttribute(this._alpha, 1, false, 1));\r\n\r\n if (useZSprites) {\r\n this._invmatVector1 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._invmatVector2 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._invmatVector3 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n\r\n this.setAttribute(\r\n 'invmatVector1',\r\n new THREE.InstancedBufferAttribute(this._invmatVector1, OFFSET_SIZE, false, 1),\r\n );\r\n this.setAttribute(\r\n 'invmatVector2',\r\n new THREE.InstancedBufferAttribute(this._invmatVector2, OFFSET_SIZE, false, 1),\r\n );\r\n this.setAttribute(\r\n 'invmatVector3',\r\n new THREE.InstancedBufferAttribute(this._invmatVector3, OFFSET_SIZE, false, 1),\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport default Instanced2CCylindersGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst TRI_SIZE = 3;\r\nconst tmpPrev = new THREE.Vector3();\r\nconst tmpNext = new THREE.Vector3();\r\nconst tmpRes = new THREE.Vector3();\r\nconst simpleNormal = new THREE.Vector3(1.0, 0.0, 0.0);\r\nconst normalOnCut = new THREE.Vector3();\r\nconst nearRingPt = new THREE.Vector3();\r\n\r\nfunction _createExtrudedChunkGeometry(shape, ringsCount) {\r\n const geo = new THREE.BufferGeometry();\r\n const ptsCount = shape.length;\r\n const totalPts = ptsCount * ringsCount;\r\n const type = totalPts <= 65536 ? Uint16Array : Uint32Array;\r\n const facesPerChunk = (ringsCount - 1) * ptsCount * 2;\r\n const indices = new THREE.BufferAttribute(utils.allocateTyped(type, facesPerChunk * TRI_SIZE), 1);\r\n\r\n let currVtxIdx = 0;\r\n let currFaceIdx = 0;\r\n for (let y = 0; y < ringsCount; y++) {\r\n // faces\r\n if (y !== ringsCount - 1) {\r\n for (let i = 0; i < ptsCount; i++) {\r\n const v1 = currVtxIdx + i;\r\n const v2 = currVtxIdx + ptsCount + i;\r\n const v3 = currVtxIdx + ptsCount + ((i + 1) % ptsCount);\r\n const v4 = currVtxIdx + ((i + 1) % ptsCount);\r\n\r\n indices.setXYZ(currFaceIdx * TRI_SIZE, v1, v4, v2);\r\n currFaceIdx++;\r\n indices.setXYZ(currFaceIdx * TRI_SIZE, v2, v4, v3);\r\n currFaceIdx++;\r\n }\r\n }\r\n\r\n currVtxIdx += ptsCount;\r\n }\r\n\r\n geo.setIndex(indices);\r\n const pos = utils.allocateTyped(Float32Array, totalPts * VEC_SIZE);\r\n geo.setAttribute('position', new THREE.BufferAttribute(pos, VEC_SIZE));\r\n\r\n geo._positions = shape;\r\n\r\n return geo;\r\n}\r\n\r\nclass ExtrudedObjectsGeometry extends ChunkedObjectsGeometry {\r\n constructor(shape, ringsCount, chunksCount) {\r\n const chunkGeo = _createExtrudedChunkGeometry(shape, ringsCount);\r\n super(chunkGeo, chunksCount);\r\n this._ringsCount = ringsCount;\r\n\r\n const tmpShape = this._tmpShape = [];\r\n for (let i = 0; i < shape.length; ++i) {\r\n tmpShape[i] = new THREE.Vector3();\r\n }\r\n }\r\n\r\n setItem(itemIdx, matrices, hasSlope = false, hasCut = false) {\r\n const ptsCount = this._chunkGeo._positions.length;\r\n const ringsCount = this._ringsCount;\r\n const chunkStartIdx = ptsCount * this._ringsCount * itemIdx * VEC_SIZE;\r\n\r\n this._setPoints(matrices, ptsCount, ringsCount, chunkStartIdx);\r\n\r\n if (hasSlope) {\r\n this._setSlopeNormals(ptsCount, ringsCount, chunkStartIdx);\r\n } else {\r\n this._setBaseNormals(ptsCount, ringsCount, chunkStartIdx);\r\n }\r\n\r\n if (hasCut) {\r\n this._addCut(ptsCount, ringsCount, chunkStartIdx);\r\n }\r\n }\r\n\r\n _setPoints(matrices, ptsCount, ringsCount, chunkStartIdx) {\r\n const tmpShape = this._tmpShape;\r\n const positions = this._positions;\r\n const shape = this._chunkGeo._positions;\r\n\r\n for (let i = 0, vtxIdx = chunkStartIdx; i < ringsCount; ++i) {\r\n const mtx = matrices[i];\r\n\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpShape[j].copy(shape[j]).applyMatrix4(mtx).toArray(positions, vtxIdx);\r\n }\r\n }\r\n }\r\n\r\n _setBaseNormals(ptsCount, ringsCount, chunkStartIdx) {\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n for (let i = 0, vtxIdx = chunkStartIdx; i < ringsCount; ++i, vtxIdx += nPtsInRing) {\r\n this._countNormalsInRing(ptsCount, vtxIdx, false);\r\n }\r\n }\r\n\r\n _setSlopeNormals(ptsCount, ringsCount, chunkStartIdx) {\r\n const normals = this._normals;\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n let vtxIdx = chunkStartIdx;\r\n // First ring\r\n // In all cases, besides cut, second ring is coincident to first. So values of first ring's normals doesn't\r\n // matter (In the cut case special handler will be applied later and will set them to correct values)\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n simpleNormal.toArray(normals, vtxIdx);\r\n }\r\n // second ring\r\n // If it isn't first Item we take normals' values from the last ring of the previous item (these rings are coincident)\r\n // else we count normals' values based on next ring information\r\n if (vtxIdx - 2 * nPtsInRing > 0) {\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpRes.fromArray(normals, vtxIdx - 2 * nPtsInRing).toArray(normals, vtxIdx);\r\n }\r\n } else {\r\n this._countNormalsInRing(ptsCount, vtxIdx, true, +nPtsInRing);\r\n vtxIdx += nPtsInRing;\r\n }\r\n // other rings\r\n // we count normals' values based on previous ring information\r\n for (let i = 2; i < ringsCount; ++i, vtxIdx += nPtsInRing) {\r\n this._countNormalsInRing(ptsCount, vtxIdx, true, -nPtsInRing);\r\n }\r\n }\r\n\r\n // Counting normals:\r\n // - Slope\r\n // Radius changes throught part => normals aren't parallel with the plane contains section points\r\n // normal = vTangentInSectionPlane x vToSuchPointInPrevSection (all vectors are scaled for being 1 in length)\r\n // - No slope\r\n // Radius doesn't change throught part => normals are parallel with the plane contains section points\r\n // normal = vToPrevPointInSection + vToNextPointInSection (all vectors are scaled for being 1 in length)\r\n _countNormalsInRing(ptsCount, vtxIdx, isSlope, shiftToExtraPt) {\r\n const tmpShape = this._tmpShape;\r\n const normals = this._normals;\r\n\r\n tmpShape[0].fromArray(this._positions, vtxIdx);\r\n tmpShape[ptsCount - 1].fromArray(this._positions, vtxIdx + (ptsCount - 1) * VEC_SIZE);\r\n\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n if (j < ptsCount - 1) {\r\n tmpShape[j + 1].fromArray(this._positions, vtxIdx + VEC_SIZE);\r\n }\r\n\r\n if (isSlope) {\r\n nearRingPt.fromArray(this._positions, vtxIdx + shiftToExtraPt);\r\n\r\n tmpPrev.subVectors(tmpShape[(j + ptsCount - 1) % ptsCount], tmpShape[(j + 1) % ptsCount]).normalize();\r\n tmpNext.subVectors(tmpShape[j], nearRingPt).normalize();\r\n tmpRes.crossVectors(tmpNext, tmpPrev).normalize().toArray(normals, vtxIdx);\r\n } else {\r\n tmpPrev.subVectors(tmpShape[j], tmpShape[(j + ptsCount - 1) % ptsCount]).normalize();\r\n tmpNext.subVectors(tmpShape[j], tmpShape[(j + 1) % ptsCount]).normalize();\r\n tmpRes.addVectors(tmpPrev, tmpNext).normalize().toArray(normals, vtxIdx);\r\n }\r\n }\r\n }\r\n\r\n _addCut(ptsCount, ringsCount, chunkStartIdx) {\r\n // Nothing to do if item is flat or only line\r\n if (ptsCount < 3 || ringsCount < 2) {\r\n return;\r\n }\r\n const positions = this._positions;\r\n const normals = this._normals;\r\n const tmpShape = this._tmpShape;\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n // Normal to the cut plane is equal to cross product of two vectors which are lying in it\r\n tmpShape[0].fromArray(positions, chunkStartIdx);\r\n tmpShape[1].fromArray(positions, chunkStartIdx + VEC_SIZE);\r\n tmpShape[2].fromArray(positions, chunkStartIdx + 2 * VEC_SIZE);\r\n\r\n tmpPrev.subVectors(tmpShape[1], tmpShape[0]).normalize();\r\n tmpNext.subVectors(tmpShape[1], tmpShape[2]).normalize();\r\n normalOnCut.crossVectors(tmpPrev, tmpNext).normalize();\r\n\r\n let vtxIdx = chunkStartIdx;\r\n // First and second rings normals' values are equal to value of normal to the cutting plane\r\n for (let j = 0; j < ptsCount * 2; ++j, vtxIdx += VEC_SIZE) {\r\n normalOnCut.toArray(normals, vtxIdx);\r\n }\r\n if (ringsCount > 2) {\r\n // Third ring points are coincident to first ring points, but have different normals. It makes sharp angle near cut\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpRes.fromArray(positions, vtxIdx - nPtsInRing).toArray(positions, vtxIdx);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default ExtrudedObjectsGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_IDC_16BIT = 65535;\r\nconst VERTEX_PER_SEGMENT = 4;\r\nconst POS_SIZE = 4;\r\nconst DIR_SIZE = 3;\r\nconst COL_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\nconst direction = new THREE.Vector3();\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\n\r\nfunction getSubset(arr, startSegmentIdx, segmentsCount, elemSize) {\r\n const start = startSegmentIdx * VERTEX_PER_SEGMENT;\r\n const end = start + segmentsCount * VERTEX_PER_SEGMENT;\r\n return arr.subarray(start * elemSize, end * elemSize);\r\n}\r\n\r\n/**\r\n * This class represents lines geometry which consists of screen-aligned narrow quad of variable width.\r\n *\r\n * @constructor\r\n *\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n * collision geometry.\r\n */\r\n\r\nclass ThickLinesGeometry extends THREE.BufferGeometry {\r\n constructor(segmentsCount) {\r\n super();\r\n this._initVertices(segmentsCount);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('position').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n this.getAttribute('direction').needsUpdate = true;\r\n }\r\n\r\n setColor(segmentIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n let idx = segmentIdx * VERTEX_PER_SEGMENT * COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n setSegment(segmentIdx, pos1, pos2) {\r\n direction.subVectors(pos1, pos2);\r\n direction.normalize();\r\n const positions = this._positions;\r\n const directions = this._directions;\r\n let idx = segmentIdx * VERTEX_PER_SEGMENT * POS_SIZE;\r\n let dirIdx = segmentIdx * VERTEX_PER_SEGMENT * DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos1.x, pos1.y, pos1.z, 0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos1.x, pos1.y, pos1.z, -0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos2.x, pos2.y, pos2.z, 0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos2.x, pos2.y, pos2.z, -0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n }\r\n\r\n setOpacity(startSegIdx, endSegIdx, value) {\r\n const start = startSegIdx * VERTEX_PER_SEGMENT;\r\n const end = endSegIdx * VERTEX_PER_SEGMENT;\r\n _.fill(this.alpha, value, end, start);\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubsetSegments(startSegmentIdx, segmentsCount) {\r\n return [\r\n getSubset(this._positions, startSegmentIdx, segmentsCount, POS_SIZE),\r\n getSubset(this._directions, startSegmentIdx, segmentsCount, DIR_SIZE),\r\n ];\r\n }\r\n\r\n getSubsetColors(startSegmentIdx, segmentsCount) {\r\n return getSubset(this._colors, startSegmentIdx, segmentsCount, COL_SIZE);\r\n }\r\n\r\n getSubsetOpacities(startSegmentIdx, segmentsCount) {\r\n return getSubset(this._alpha, startSegmentIdx, segmentsCount, 1);\r\n }\r\n\r\n getNumVertexPerSegment() {\r\n return VERTEX_PER_SEGMENT;\r\n }\r\n\r\n getPositionSize() {\r\n return POS_SIZE;\r\n }\r\n\r\n setSegments(startSegmentIdx, positions) {\r\n const startPos = startSegmentIdx * VERTEX_PER_SEGMENT * POS_SIZE;\r\n if (positions instanceof Array && positions.length === 2) {\r\n this._positions.set(positions[0], startPos);\r\n const startDir = startSegmentIdx * VERTEX_PER_SEGMENT * DIR_SIZE;\r\n this._directions.set(positions[1], startDir); // dirs are geo part of vertex\r\n } else {\r\n this._positions.set(positions, startPos);\r\n }\r\n }\r\n\r\n setColors(startSegmentIdx, colors) {\r\n const start = startSegmentIdx * VERTEX_PER_SEGMENT * COL_SIZE;\r\n this._colors.set(colors, start);\r\n }\r\n\r\n _initVertices(segmentsCount) {\r\n this._buffersSize = segmentsCount * VERTEX_PER_SEGMENT;\r\n const pointsCount = this._buffersSize;\r\n const use32bitIndex = pointsCount > MAX_IDC_16BIT;\r\n this._index = utils.allocateTyped(use32bitIndex ? Uint32Array : Uint16Array, segmentsCount * 6);\r\n this._positions = utils.allocateTyped(Float32Array, pointsCount * POS_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, pointsCount * COL_SIZE);\r\n this._directions = utils.allocateTyped(Float32Array, pointsCount * DIR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, pointsCount);\r\n _.fill(alpha, 1.0);\r\n\r\n const index = this._index;\r\n let indexOffset = 0;\r\n let pointOffset = 0;\r\n for (let j = 0; j < segmentsCount; j++, indexOffset += 6, pointOffset += VERTEX_PER_SEGMENT) {\r\n index[indexOffset] = pointOffset;\r\n index[indexOffset + 1] = pointOffset + 1;\r\n index[indexOffset + 2] = pointOffset + 3;\r\n index[indexOffset + 3] = pointOffset;\r\n index[indexOffset + 4] = pointOffset + 2;\r\n index[indexOffset + 5] = pointOffset + 3;\r\n }\r\n this.setIndex(new THREE.BufferAttribute(this._index, 1));\r\n\r\n this.setAttribute('position', new THREE.BufferAttribute(this._positions, POS_SIZE));\r\n this.setAttribute('color', new THREE.BufferAttribute(this._colors, COL_SIZE));\r\n this.setAttribute('alphaColor', new THREE.BufferAttribute(alpha, 1));\r\n this.setAttribute('direction', new THREE.BufferAttribute(this._directions, DIR_SIZE));\r\n }\r\n}\r\n\r\nexport default ThickLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport BaseLinesGeometry from './ThickLinesGeometry';\r\n\r\n/**\r\n * This class represents geometry which consists lines. This can build bounding volumes\r\n * @constructor\r\n *\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n */\r\nclass LinesGeometry extends BaseLinesGeometry {\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n computeBoundingSphere() {\r\n const { boundingBox } = this;\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n if (boundingBox) {\r\n boundingBox.getCenter(center);\r\n }\r\n const positions = this._positions;\r\n const sphere = this.boundingSphere || new THREE.Sphere();\r\n const size = this._positions.length;\r\n const pos = new THREE.Vector3();\r\n const posSize = this.getPositionSize();\r\n for (let i = 0; i < size; i += posSize) {\r\n pos.set(positions[i], positions[i + 1], positions[i + 2]);\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n sphere.set(center, Math.sqrt(radiusSquared));\r\n this.boundingSphere = sphere;\r\n }\r\n\r\n computeBoundingBox() {\r\n const positions = this._positions;\r\n const box = new THREE.Box3();\r\n const size = this._positions.length;\r\n const tmpVec = new THREE.Vector3();\r\n const posSize = this.getPositionSize();\r\n for (let i = 0; i < size; i += posSize) {\r\n tmpVec.set(positions[i], positions[i + 1], positions[i + 2]);\r\n box.expandByPoint(tmpVec);\r\n }\r\n this.boundingBox = box;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n}\r\n\r\nexport default LinesGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst tmpVector = new THREE.Vector3();\r\nconst normMtx = new THREE.Matrix3();\r\n\r\nclass CylinderCollisionGeo extends ChunkedObjectsGeometry {\r\n constructor(instanceCount, polyComplexity) {\r\n const cylGeometry = new THREE.CylinderGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, true);\r\n super(cylGeometry, instanceCount);\r\n\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._chunkNorms = this._chunkGeo.attributes.normal.array;\r\n this._tmpVector = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const chunkSize = this._chunkSize;\r\n const itemOffset = chunkSize * itemIdx * VEC_SIZE;\r\n\r\n const tmpArray = this._tmpVector;\r\n const geoPos = this._chunkPos;\r\n const geoNorm = this._chunkNorms;\r\n\r\n const mtx1 = gfxutils.calcCylinderMatrix(botPos, topPos, itemRad);\r\n normMtx.getNormalMatrix(mtx1);\r\n let idx;\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoPos, idx);\r\n tmpVector.applyMatrix4(mtx1);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._positions.set(tmpArray, itemOffset);\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoNorm, idx);\r\n tmpVector.applyMatrix3(normMtx);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._normals.set(tmpArray, itemOffset);\r\n }\r\n}\r\nexport default CylinderCollisionGeo;\r\n","import LinesGeometry from './LinesGeometry';\r\nimport CylinderCollisionGeo from './CylinderCollisionGeo';\r\n\r\nconst COLLISION_RAD = 0.1;\r\n\r\n/**\r\n * This class represents geometry which consists of separate chunks.\r\n * Each chunk has same index and similar geometry with equal points and faces count.\r\n * Each chunk has by default only one color.\r\n * @constructor\r\n *\r\n * @param {number} chunksCount Total chunks count.\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n * @param {boolean} enableCollision Enable or disable collision where each segment is\r\n * a collidable cylinder.\r\n * collision geometry.\r\n */\r\nclass ChunkedLinesGeometry extends LinesGeometry {\r\n constructor(chunksCount, segmentsCount, enableCollision) {\r\n super(chunksCount * segmentsCount);\r\n this._init(segmentsCount);\r\n this._collisionGeo = enableCollision ? new CylinderCollisionGeo(chunksCount * segmentsCount, 3) : null;\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n computeBoundingSphere() {\r\n const collisionGeo = this._collisionGeo;\r\n if (collisionGeo) {\r\n collisionGeo.computeBoundingSphere();\r\n this.boundingSphere = collisionGeo.boundingSphere;\r\n return;\r\n }\r\n super.computeBoundingSphere();\r\n }\r\n\r\n computeBoundingBox() {\r\n const collisionGeo = this._collisionGeo;\r\n if (collisionGeo) {\r\n collisionGeo.computeBoundingBox();\r\n this.boundingBox = collisionGeo.boundingBox;\r\n return;\r\n }\r\n super.computeBoundingBox();\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const collisionGeo = this._collisionGeo;\r\n if (!collisionGeo) {\r\n return;\r\n }\r\n const segCount = this._chunkSize;\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n for (let i = 0, n = intersects.length; i < n; ++i) {\r\n let { chunkIdx } = intersects[i];\r\n if (chunkIdx === undefined) {\r\n continue;\r\n }\r\n chunkIdx = (chunkIdx / segCount) | 0;\r\n intersects[i].chunkIdx = chunkIdx;\r\n }\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n const chunkSize = this._chunkSize;\r\n for (let i = chunkIdx * chunkSize, end = i + chunkSize; i < end; ++i) {\r\n super.setColor(i, colorVal);\r\n }\r\n }\r\n\r\n setSegment(chunkIdx, segIdx, pos1, pos2) {\r\n const chunkSize = this._chunkSize;\r\n const idx = chunkIdx * chunkSize + segIdx;\r\n super.setSegment(idx, pos1, pos2);\r\n if (this._collisionGeo) {\r\n this._collisionGeo.setItem(chunkIdx * chunkSize + segIdx, pos1, pos2, COLLISION_RAD);\r\n }\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const chunkSize = this._chunkSize;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const left = chunkIndices[i] * chunkSize;\r\n super.setOpacity(left, left + chunkSize - 1, value);\r\n }\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const chunkSize = this._chunkSize;\r\n const subset = new ChunkedLinesGeometry(instanceCount, chunkSize, false);\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const dstPtOffset = i * chunkSize;\r\n const startSegIdx = chunkIndices[i] * chunkSize;\r\n subset.setSegments(dstPtOffset, this.getSubsetSegments(startSegIdx, chunkSize));\r\n subset.setColors(dstPtOffset, this.getSubsetColors(startSegIdx, chunkSize));\r\n }\r\n\r\n subset.boundingSphere = this.boundingSphere;\r\n subset.boundingBox = this.boundingBox;\r\n return [subset];\r\n }\r\n\r\n _init(chunkSize) {\r\n this._chunkSize = chunkSize;\r\n }\r\n}\r\n\r\nexport default ChunkedLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport LinesGeometry from './LinesGeometry';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\n\r\nconst COLLISION_RAD = 0.3;\r\nconst tmpVector = new THREE.Vector3();\r\n\r\nclass TwoColorLinesGeometry extends LinesGeometry {\r\n constructor(segmentsCount) {\r\n super(segmentsCount * 2);\r\n this._init(segmentsCount);\r\n this._collisionGeo = new Simple2CCylindersGeometry(segmentsCount, 3);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos) {\r\n this._collisionGeo.setItem(itemIdx, botPos, topPos, COLLISION_RAD);\r\n const offset = 2 * itemIdx;// there are two points per segment\r\n tmpVector.lerpVectors(botPos, topPos, 0.5);\r\n super.setSegment(offset, botPos, tmpVector);\r\n super.setSegment(offset + 1, tmpVector, topPos);\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const offset = 2 * itemIdx;// there are two points per segment\r\n super.setColor(offset, colorVal1);\r\n super.setColor(offset + 1, colorVal2);\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n if (this._collisionGeo) {\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n }\r\n }\r\n\r\n getSubset(segmentIndices) {\r\n const instanceCount = segmentIndices.length;\r\n const subset = new TwoColorLinesGeometry(instanceCount, false);\r\n for (let i = 0, n = instanceCount; i < n; ++i) {\r\n const startSegIdx = segmentIndices[i];\r\n subset.setSegments(i, this.getSubsetSegments(startSegIdx, 1));\r\n subset.setColors(i, this.getSubsetColors(startSegIdx, 1));\r\n }\r\n\r\n subset.boundingSphere = this.boundingSphere;\r\n subset.boundingBox = this.boundingBox;\r\n return [subset];\r\n }\r\n\r\n _init(segmentsCount) {\r\n this._segCounts = segmentsCount * 2;\r\n }\r\n}\r\n// (???)parent = LinesGeometry.prototype;\r\n\r\nexport default TwoColorLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport ChunkedLinesGeometry from './ChunkedLinesGeometry';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst vectors = [\r\n new THREE.Vector3(1, 0, 0),\r\n new THREE.Vector3(-1, 0, 0),\r\n new THREE.Vector3(0, 1, 0),\r\n new THREE.Vector3(0, -1, 0),\r\n new THREE.Vector3(0, 0, 1),\r\n new THREE.Vector3(0, 0, -1),\r\n];\r\nconst vecCount = vectors.length;\r\nconst tempPos1 = new THREE.Vector3();\r\nconst tempPos2 = new THREE.Vector3();\r\n\r\nclass CrossGeometry extends SphereCollisionGeo(ChunkedLinesGeometry) {\r\n constructor(chunksCount) {\r\n super(chunksCount, chunksCount, (vecCount / 2) | 0, false);\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n\r\n for (let i = 0; i < vecCount / 2; ++i) {\r\n const first = i * 2;\r\n tempPos1.x = itemPos.x + vectors[first].x * itemRad;\r\n tempPos1.y = itemPos.y + vectors[first].y * itemRad;\r\n tempPos1.z = itemPos.z + vectors[first].z * itemRad;\r\n const second = first + 1;\r\n tempPos2.x = itemPos.x + vectors[second].x * itemRad;\r\n tempPos2.y = itemPos.y + vectors[second].y * itemRad;\r\n tempPos2.z = itemPos.z + vectors[second].z * itemRad;\r\n this.setSegment(itemIdx, i, tempPos1, tempPos2);\r\n }\r\n }\r\n}\r\nexport default CrossGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst POS_RAD_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\n\r\n/**\r\n * This is a base class for isosurface algorithms.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\nclass IsoSurfaceGeometry extends THREE.BufferGeometry {\r\n constructor(spheresCount, opts) {\r\n super();\r\n\r\n this._opts = opts;\r\n this.zClip = this._opts.zClip;\r\n this._posRad = utils.allocateTyped(Float32Array, spheresCount * POS_RAD_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, spheresCount * COLOR_SIZE);\r\n }\r\n\r\n setItem(chunkIdx, pos, radius) {\r\n const posRad = this._posRad;\r\n let idx = POS_RAD_SIZE * chunkIdx;\r\n posRad[idx++] = pos.x;\r\n posRad[idx++] = pos.y;\r\n posRad[idx++] = pos.z;\r\n posRad[idx] = radius;\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n const colors = this._colors;\r\n let idx = COLOR_SIZE * chunkIdx;\r\n colors[idx++] = tmpColor.r;\r\n colors[idx++] = tmpColor.g;\r\n colors[idx] = tmpColor.b;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n finishUpdate() {\r\n this._build();\r\n }\r\n\r\n setOpacity() {\r\n // not implemented\r\n }\r\n\r\n raycast() {\r\n }\r\n\r\n getSubset() {\r\n return [];\r\n }\r\n}\r\nexport default IsoSurfaceGeometry;\r\n","import utils from '../../utils';\r\n\r\n/**\r\n * Class for marching cube\r\n * Stores 8 points and 8 float values are stored together in linear array\r\n * Int values for has intersection or not - in integer32 linear array\r\n * Int values for bits flags - in integer32 linear array\r\n *\r\n */\r\nclass IsoSurfaceMarchCube {\r\n constructor() {\r\n this.pointsValuesLinear = null;\r\n this.hasIntersection = null;\r\n this.bitsInside = null;\r\n }\r\n\r\n create(numCellsPerSide) {\r\n const vx7000000 = 0x7000000;\r\n const n3 = numCellsPerSide * numCellsPerSide * numCellsPerSide;\r\n if (n3 > vx7000000) {\r\n throw new Error('Too large cube dimension: lead to memory huge uasge');\r\n }\r\n this.pointsValuesLinear = utils.allocateTyped(Float32Array, (2 << (2 + 2)) * n3);\r\n this.hasIntersection = utils.allocateTyped(Int32Array, n3);\r\n this.bitsInside = utils.allocateTyped(Int32Array, n3);\r\n return 0;\r\n }\r\n\r\n destroy() {\r\n this.bitsInside = null;\r\n this.hasIntersection = null;\r\n this.pointsValuesLinear = null;\r\n }\r\n}\r\n\r\n/* eslint-disable no-magic-numbers */\r\nIsoSurfaceMarchCube.prototype.striIndicesMarchCube = [\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1,\r\n 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1,\r\n 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1,\r\n 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1,\r\n 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1,\r\n 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1,\r\n 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1,\r\n 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1,\r\n 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1,\r\n 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1,\r\n 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1,\r\n 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1,\r\n 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1,\r\n 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1,\r\n 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1,\r\n 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1,\r\n 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1,\r\n 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1,\r\n 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1,\r\n 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1,\r\n 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1,\r\n 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1,\r\n 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1,\r\n 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1,\r\n 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1,\r\n 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1,\r\n 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1,\r\n 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1,\r\n 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1,\r\n 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1,\r\n 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1,\r\n 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1,\r\n 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1,\r\n 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1,\r\n 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1,\r\n 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1,\r\n 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1,\r\n 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1,\r\n 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1,\r\n 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1,\r\n 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1,\r\n 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1,\r\n 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1,\r\n 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1,\r\n 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1,\r\n 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1,\r\n 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1,\r\n 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1,\r\n 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1,\r\n 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1,\r\n 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1,\r\n 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1,\r\n 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1,\r\n 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1,\r\n 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1,\r\n 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1,\r\n 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1,\r\n 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1,\r\n 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1,\r\n 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1,\r\n 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1,\r\n 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1,\r\n 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1,\r\n 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1,\r\n 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1,\r\n 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1,\r\n 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1,\r\n 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1,\r\n 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1,\r\n 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1,\r\n 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1,\r\n 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1,\r\n 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1,\r\n 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1,\r\n 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1,\r\n 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1,\r\n 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1,\r\n 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1,\r\n 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1,\r\n 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1,\r\n 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1,\r\n 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1,\r\n 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1,\r\n 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1,\r\n 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1,\r\n 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1,\r\n 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1,\r\n 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1,\r\n 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1,\r\n 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1,\r\n 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1,\r\n 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1,\r\n 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1,\r\n 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1,\r\n 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1,\r\n 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1,\r\n 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1,\r\n 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1,\r\n 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1,\r\n 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1,\r\n 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1,\r\n 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1,\r\n 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1,\r\n 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1,\r\n 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1,\r\n 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1,\r\n 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1,\r\n 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1,\r\n 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n];\r\n/* eslint-enable no-magic-numbers */\r\n\r\nexport default IsoSurfaceMarchCube;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceMarchCube from './IsoSurfaceMarchCube';\r\nimport utils from '../../utils';\r\n\r\nconst edgeTable = [\r\n 0x0, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c,\r\n 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,\r\n 0x190, 0x99, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c,\r\n 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,\r\n 0x230, 0x339, 0x33, 0x13a, 0x636, 0x73f, 0x435, 0x53c,\r\n 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,\r\n 0x3a0, 0x2a9, 0x1a3, 0xaa, 0x7a6, 0x6af, 0x5a5, 0x4ac,\r\n 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,\r\n 0x460, 0x569, 0x663, 0x76a, 0x66, 0x16f, 0x265, 0x36c,\r\n 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,\r\n 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff, 0x3f5, 0x2fc,\r\n 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,\r\n 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55, 0x15c,\r\n 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,\r\n 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc,\r\n 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,\r\n 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc,\r\n 0xcc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,\r\n 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c,\r\n 0x15c, 0x55, 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,\r\n 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc,\r\n 0x2fc, 0x3f5, 0xff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,\r\n 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c,\r\n 0x36c, 0x265, 0x16f, 0x66, 0x76a, 0x663, 0x569, 0x460,\r\n 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac,\r\n 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa, 0x1a3, 0x2a9, 0x3a0,\r\n 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c,\r\n 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33, 0x339, 0x230,\r\n 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c,\r\n 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99, 0x190,\r\n 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c,\r\n 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0];\r\n\r\nfunction _voxelGradientFast(v, point, grad) {\r\n const g = v.getValue(point.x, point.y, point.z);\r\n grad.set(g[0], g[1], g[2]);\r\n}\r\n\r\n// Helper class GridCell\r\nclass GridCell {\r\n constructor() {\r\n this._arrSize = 8;\r\n this.p = new Array(this._arrSize);\r\n this.g = new Array(this._arrSize);\r\n this.val = new Array(this._arrSize);\r\n for (let i = 0; i < this._arrSize; ++i) {\r\n this.p[i] = new THREE.Vector3();\r\n this.g[i] = new THREE.Vector3();\r\n }\r\n this.cubeIndex = 0;\r\n }\r\n}\r\n\r\n// Helper class Triangle\r\nclass Triangle {\r\n constructor() {\r\n this.a = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n\r\n this.b = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n\r\n this.c = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n }\r\n}\r\n\r\nfunction createArray(arrSize) {\r\n const arr = new Array(arrSize);\r\n for (let i = 0; i < arrSize; ++i) {\r\n arr[i] = new THREE.Vector3();\r\n }\r\n\r\n return arr;\r\n}\r\n\r\nclass IsoSurface {\r\n constructor() {\r\n this._numTriangles = 0;\r\n this._numVertices = 0;\r\n this._position = [];\r\n this._normals = [];\r\n this._colors = null;\r\n this._indices = [];\r\n this._volumetricData = null;\r\n this._xAxis = new THREE.Vector3();\r\n this._yAxis = new THREE.Vector3();\r\n this._zAxis = new THREE.Vector3();\r\n this._xDir = new THREE.Vector3();\r\n this._yDir = new THREE.Vector3();\r\n this._zDir = new THREE.Vector3();\r\n }\r\n\r\n _prepareAxesAndDirs() {\r\n const volData = this._volumetricData;\r\n\r\n const cellSize = volData.getCellSize();\r\n\r\n // calculate cell axes\r\n const xAxis = this._xAxis;\r\n const yAxis = this._yAxis;\r\n const zAxis = this._zAxis;\r\n const xDir = this._xDir;\r\n const yDir = this._yDir;\r\n const zDir = this._zDir;\r\n\r\n xAxis.set(cellSize.x, 0, 0);\r\n yAxis.set(0, cellSize.y, 0);\r\n zAxis.set(0, 0, cellSize.z);\r\n\r\n xDir.set(1, 0, 0);\r\n yDir.set(0, 1, 0);\r\n zDir.set(0, 0, 1);\r\n\r\n // flip normals if coordinate system is in the wrong handedness\r\n const tmp = new THREE.Vector3();\r\n tmp.crossVectors(xDir, yDir);\r\n if (tmp.dot(zDir) < 0) {\r\n xDir.negate();\r\n yDir.negate();\r\n zDir.negate();\r\n }\r\n\r\n // check that the grid is in the all-positive octant of the coordinate system\r\n if (xDir.x < 0 || xDir.y < 0 || xDir.z < 0\r\n || yDir.x < 0 || yDir.y < 0 || yDir.z < 0\r\n || zDir.x < 0 || zDir.y < 0 || zDir.z < 0) {\r\n return false;\r\n }\r\n\r\n // check that the grid is axis-aligned\r\n const notZero = (axe) => Math.abs(axe) > Number.EPSILON;\r\n return !(notZero(xAxis.y) || notZero(xAxis.z)\r\n || notZero(yAxis.x) || notZero(yAxis.z)\r\n || notZero(zAxis.x) || notZero(zAxis.y));\r\n }\r\n\r\n _vertexInterp(isoLevel, grid, ind1, ind2, vertex, normal) {\r\n const p1 = grid.p[ind1];\r\n const p2 = grid.p[ind2];\r\n const n1 = grid.g[ind1];\r\n const n2 = grid.g[ind2];\r\n const valP1 = grid.val[ind1];\r\n const valP2 = grid.val[ind2];\r\n const isoDiffP1 = isoLevel - valP1;\r\n const diffValP2P1 = valP2 - valP1;\r\n\r\n let mu = 0.0;\r\n\r\n if (Math.abs(diffValP2P1) > 0.0) {\r\n mu = isoDiffP1 / diffValP2P1;\r\n }\r\n mu = mu > 1.0 ? 1.0 : mu;\r\n vertex.lerpVectors(p1, p2, mu);\r\n normal.lerpVectors(n1, n2, mu);\r\n }\r\n\r\n static _triTable = IsoSurfaceMarchCube.prototype.striIndicesMarchCube;\r\n\r\n static _arrSize = 12;\r\n\r\n static _firstIndices = [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3];\r\n\r\n static _secondIndices = [1, 2, 3, 0, 5, 6, 7, 4, 4, 5, 6, 7];\r\n\r\n static _vertexList = createArray(IsoSurface._arrSize);\r\n\r\n static _normalList = createArray(IsoSurface._arrSize);\r\n\r\n _polygonize(grid, isoLevel, triangles) {\r\n const { cubeIndex } = grid;\r\n let i = 0;\r\n const arrSize = IsoSurface._arrSize;\r\n const firstIndices = IsoSurface._firstIndices;\r\n const secondIndices = IsoSurface._secondIndices;\r\n const vertexList = IsoSurface._vertexList;\r\n const normalList = IsoSurface._normalList;\r\n\r\n for (; i < arrSize; ++i) {\r\n if (edgeTable[cubeIndex] & (1 << i)) {\r\n this._vertexInterp(\r\n isoLevel,\r\n grid,\r\n firstIndices[i],\r\n secondIndices[i],\r\n vertexList[i],\r\n normalList[i],\r\n );\r\n }\r\n }\r\n\r\n let triCount = 0;\r\n const triTblIdx = cubeIndex * 16;\r\n const triTable = IsoSurface._triTable;\r\n\r\n for (i = 0; triTable[triTblIdx + i] !== -1; i += 3) {\r\n triangles[triCount].a.p.copy(vertexList[triTable[triTblIdx + i]]);\r\n triangles[triCount].a.n.copy(normalList[triTable[triTblIdx + i]]);\r\n\r\n triangles[triCount].b.p.copy(vertexList[triTable[triTblIdx + i + 1]]);\r\n triangles[triCount].b.n.copy(normalList[triTable[triTblIdx + i + 1]]);\r\n\r\n triangles[triCount].c.p.copy(vertexList[triTable[triTblIdx + i + 2]]);\r\n triangles[triCount].c.n.copy(normalList[triTable[triTblIdx + i + 2]]);\r\n ++triCount;\r\n }\r\n\r\n return triCount;\r\n }\r\n\r\n _doGridPosNorms(isoValue, step, appendSimple) {\r\n const vol = this._volumetricData;\r\n const volData = this._volumetricData.getData();\r\n const dim = vol.getDimensions();\r\n const xSize = dim[0];\r\n const ySize = dim[1];\r\n const zSize = dim[2];\r\n const stepX = step * vol.getStrideX();\r\n const stepY = step * vol.getStrideY();\r\n const stepZ = step * vol.getStrideZ();\r\n\r\n const gc = new GridCell();\r\n const gcVal = gc.val;\r\n const gcValSize = gc.val.length;\r\n const additions = [\r\n new THREE.Vector3(0, 0, 0), // 0\r\n new THREE.Vector3(step, 0, 0), // 1\r\n new THREE.Vector3(step, step, 0), // 2\r\n new THREE.Vector3(0, step, 0), // 3\r\n new THREE.Vector3(0, 0, step), // 4\r\n new THREE.Vector3(step, 0, step), // 5\r\n new THREE.Vector3(step, step, step), // 6\r\n new THREE.Vector3(0, step, step), // 7\r\n ];\r\n\r\n const tmpTriCount = 5;\r\n const triangles = new Array(tmpTriCount);\r\n for (let j = 0; j < tmpTriCount; ++j) {\r\n triangles[j] = new Triangle();\r\n }\r\n\r\n let appendVertex;\r\n const self = this;\r\n const positions = this._position;\r\n const normals = this._normals;\r\n if (appendSimple) {\r\n // Special case for axis-aligned grid with positive unit vector normals\r\n appendVertex = (function () {\r\n const axis = new THREE.Vector3(self._xAxis.x, self._yAxis.y, self._zAxis.z);\r\n return function (triVertex) {\r\n const vertex = triVertex.p.clone();\r\n vertex.multiply(axis);\r\n positions.push(vertex.add(self._origin));\r\n normals.push(triVertex.n.clone());\r\n };\r\n }());\r\n } else {\r\n appendVertex = (function () {\r\n const posMtx = new THREE.Matrix3();\r\n posMtx.set(\r\n self._xAxis.x,\r\n self._yAxis.x,\r\n self._zAxis.x,\r\n self._xAxis.y,\r\n self._yAxis.y,\r\n self._zAxis.y,\r\n self._xAxis.z,\r\n self._yAxis.z,\r\n self._zAxis.z,\r\n );\r\n const normMtx = new THREE.Matrix3();\r\n normMtx.set(\r\n self._xDir.x,\r\n self._yDir.x,\r\n self._zDir.x,\r\n self._xDir.y,\r\n self._yDir.y,\r\n self._zDir.y,\r\n self._xDir.z,\r\n self._yDir.z,\r\n self._zDir.z,\r\n );\r\n\r\n return function (triVertex) {\r\n positions.push(triVertex.p.clone().applyMatrix3(posMtx).add(self._origin));\r\n normals.push(triVertex.n.clone().applyMatrix3(normMtx));\r\n };\r\n }());\r\n }\r\n const indices = this._indices;\r\n\r\n let globTriCount = 0;\r\n\r\n for (let z = 0; z < (zSize - step); z += step) {\r\n for (let y = 0; y < (ySize - step); y += step) {\r\n let idx = vol.getDirectIdx(0, y, z);\r\n for (let x = 0; x < (xSize - step); x += step, idx += stepX) {\r\n /* eslint-disable no-multi-spaces */\r\n /* eslint-disable computed-property-spacing */\r\n gcVal[0] = volData[idx];\r\n gcVal[1] = volData[idx + stepX];\r\n gcVal[3] = volData[idx + stepY];\r\n gcVal[2] = volData[idx + stepX + stepY];\r\n gcVal[4] = volData[idx + stepZ];\r\n gcVal[5] = volData[idx + stepX + stepZ];\r\n gcVal[7] = volData[idx + stepY + stepZ];\r\n gcVal[6] = volData[idx + stepX + stepY + stepZ];\r\n /* eslint-enable no-multi-spaces */\r\n /* eslint-enable computed-property-spacing */\r\n\r\n // Determine the index into the edge table which\r\n // tells us which vertices are inside of the surface\r\n let cubeIndex = 0;\r\n let i = 0;\r\n for (; i < gcValSize; ++i) {\r\n if (gcVal[i] < isoValue) {\r\n cubeIndex |= (1 << i);\r\n }\r\n }\r\n\r\n if (edgeTable[cubeIndex] === 0) {\r\n continue;\r\n }\r\n\r\n gc.cubeIndex = cubeIndex;\r\n for (i = 0; i < gcValSize; ++i) {\r\n gc.p[i].set(x + additions[i].x, y + additions[i].y, z + additions[i].z);\r\n _voxelGradientFast(this._gradient, gc.p[i], gc.g[i]);\r\n }\r\n\r\n // calculate vertices and facets for this cube,\r\n // calculate normals by interpolating between the negated\r\n // normalized volume gradients for the 8 reference voxels\r\n const triCount = this._polygonize(gc, isoValue, triangles);\r\n globTriCount += triCount;\r\n\r\n // append triangles using different techniques\r\n for (i = 0; i < triCount; ++i) {\r\n indices.push(this._numTriangles * 3);\r\n indices.push(this._numTriangles * 3 + 1);\r\n indices.push(this._numTriangles * 3 + 2);\r\n ++this._numTriangles;\r\n\r\n appendVertex(triangles[i].a);\r\n appendVertex(triangles[i].b);\r\n appendVertex(triangles[i].c);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return globTriCount;\r\n }\r\n\r\n compute(volData, origin, isoValue, step) {\r\n this._volumetricData = volData;\r\n this._origin = origin;\r\n\r\n this._gradient = volData.computeGradient();\r\n\r\n this._doGridPosNorms(isoValue, step, this._prepareAxesAndDirs());\r\n }\r\n\r\n _remapIndices(vertexMap, idcCount) {\r\n const indices = this._indices;\r\n const newIndices = utils.allocateTyped(Uint32Array, idcCount);\r\n for (let i = 0; i < idcCount; ++i) {\r\n indices[i] = vertexMap[indices[i]];\r\n newIndices[i] = indices[i];\r\n }\r\n this._indices = newIndices;\r\n }\r\n\r\n _remapVertices(vertices, normals, count) {\r\n const newPositions = utils.allocateTyped(Float32Array, count * 3);\r\n const newNormals = utils.allocateTyped(Float32Array, count * 3);\r\n for (let i = 0; i < count; ++i) {\r\n const pos = vertices[i];\r\n newPositions[i * 3] = pos.x;\r\n newPositions[i * 3 + 1] = pos.y;\r\n newPositions[i * 3 + 2] = pos.z;\r\n const norm = normals[i].normalize();\r\n newNormals[i * 3] = norm.x;\r\n newNormals[i * 3 + 1] = norm.y;\r\n newNormals[i * 3 + 2] = norm.z;\r\n }\r\n this._position = newPositions;\r\n this._normals = newNormals;\r\n }\r\n\r\n vertexFusion(offset, len) {\r\n const faceVer = this._indices.length;\r\n const vertices = this._position;\r\n const normals = this._normals;\r\n const oldVerCount = vertices.length | 0;\r\n if (faceVer === 0 || oldVerCount === 0) {\r\n return;\r\n }\r\n const vMap = utils.allocateTyped(Uint32Array, oldVerCount);\r\n vMap[0] = 0;\r\n let newVer = 1;\r\n\r\n let i = 1;\r\n for (; i < oldVerCount; ++i) {\r\n const start = newVer - offset < 0 ? 0 : newVer - offset;\r\n const end = start + len > newVer ? newVer : start + len;\r\n let matchedIndex = -1;\r\n\r\n for (let j = start; j < end; ++j) {\r\n if (Math.abs(vertices[i] - vertices[j]) < Number.EPSILON) {\r\n matchedIndex = j;\r\n break;\r\n }\r\n }\r\n\r\n if (matchedIndex !== -1) {\r\n vMap[i] = matchedIndex;\r\n } else {\r\n vertices[newVer].copy(vertices[i]);\r\n normals[newVer].copy(normals[i]);\r\n vMap[i] = newVer;\r\n ++newVer;\r\n }\r\n }\r\n\r\n this._remapIndices(vMap, faceVer);\r\n this._remapVertices(vertices, normals, newVer);\r\n }\r\n\r\n // Assign per-vertex colors from a volumetric texture map (same dimensions as the original volumetric data).\r\n // Along with color dominating atom is determined for each vertex\r\n // and vertices with atom out of \"visible\" subset get filtered out.\r\n // XXX only handles orthogonal volumes currently\r\n setColorVolTex(colorMap, atomMap, atomWeightMap, visibilitySelector) {\r\n let i;\r\n let idx;\r\n const numVerts = this._position.length / 3;\r\n const vertices = this._position;\r\n const origin = this._origin;\r\n const dim = this._volumetricData.getDimensions();\r\n const xs = dim[0] - 1;\r\n const ys = dim[1] - 1;\r\n const zs = dim[2] - 1;\r\n\r\n const colorData = colorMap.getData();\r\n const strideX = colorMap.getStrideX();\r\n const strideY = colorMap.getStrideY();\r\n const strideZ = colorMap.getStrideZ();\r\n\r\n let atomWeightData;\r\n let atomStrideX;\r\n let atomStrideY;\r\n let atomStrideZ;\r\n\r\n if (visibilitySelector !== null) {\r\n atomWeightData = atomWeightMap.getData();\r\n atomStrideX = atomWeightMap.getStrideX();\r\n atomStrideY = atomWeightMap.getStrideY();\r\n atomStrideZ = atomWeightMap.getStrideZ();\r\n }\r\n\r\n const xInv = 1.0 / this._xAxis.x;\r\n const yInv = 1.0 / this._yAxis.y;\r\n const zInv = 1.0 / this._zAxis.z;\r\n\r\n let atomLookup = [];\r\n let atomWeights = [];\r\n const colors = utils.allocateTyped(Float32Array, numVerts * 3);\r\n\r\n function interp(mu, idx1, idx2, c) {\r\n c[0] = (1 - mu) * colorData[idx1] + mu * colorData[idx2];\r\n c[1] = (1 - mu) * colorData[idx1 + 1] + mu * colorData[idx2 + 1];\r\n c[2] = (1 - mu) * colorData[idx1 + 2] + mu * colorData[idx2 + 2];\r\n }\r\n\r\n function collectWeight(ai, coefX, coefY, coefZ) {\r\n const a = atomMap[ai]; // atomWeightMap is a scalar field, so index into atom map should be the same\r\n if (a != null) {\r\n atomLookup[a.index] = a;\r\n const w = coefX * coefY * coefZ * atomWeightData[ai];\r\n if (typeof atomWeights[a.index] === 'undefined') {\r\n atomWeights[a.index] = w;\r\n } else {\r\n atomWeights[a.index] += w;\r\n }\r\n }\r\n }\r\n\r\n const vMap = utils.allocateTyped(Int32Array, numVerts);\r\n let newVerCount = 0;\r\n\r\n for (i = 0; i < numVerts; i++) {\r\n const ind = i * 3;\r\n const vx = (vertices[ind] - origin.x) * xInv;\r\n const vy = (vertices[ind + 1] - origin.y) * yInv;\r\n const vz = (vertices[ind + 2] - origin.z) * zInv;\r\n const x = Math.min(Math.max(vx, 0), xs) | 0;\r\n const y = Math.min(Math.max(vy, 0), ys) | 0;\r\n const z = Math.min(Math.max(vz, 0), zs) | 0;\r\n\r\n const mux = (vx - x);\r\n const muy = (vy - y);\r\n const muz = (vz - z);\r\n\r\n if (visibilitySelector != null) {\r\n // collect atom weights\r\n atomLookup = [];\r\n atomWeights = [];\r\n idx = atomWeightMap.getDirectIdx(x, y, z);\r\n collectWeight(idx, 1 - mux, 1 - muy, 1 - muz);\r\n collectWeight(idx + atomStrideX, mux, 1 - muy, 1 - muz);\r\n collectWeight(idx + atomStrideY, 1 - mux, muy, 1 - muz);\r\n collectWeight(idx + atomStrideX + atomStrideY, mux, muy, 1 - muz);\r\n collectWeight(idx + atomStrideZ, 1 - mux, 1 - muy, muz);\r\n collectWeight(idx + atomStrideX + atomStrideZ, mux, 1 - muy, muz);\r\n collectWeight(idx + atomStrideY + atomStrideZ, 1 - mux, muy, muz);\r\n collectWeight(idx + atomStrideX + atomStrideY + atomStrideZ, mux, muy, muz);\r\n\r\n // find dominant atom\r\n let maxWeight = 0.0;\r\n let dominantIdx = -1;\r\n for (const atomIdx in atomWeights) {\r\n if (atomWeights[atomIdx] > maxWeight) {\r\n dominantIdx = atomIdx;\r\n maxWeight = atomWeights[atomIdx];\r\n }\r\n }\r\n\r\n if (dominantIdx < 0 || !visibilitySelector.includesAtom(atomLookup[dominantIdx])) {\r\n // this vertex doesn't belong to visible subset and will be skipped\r\n vMap[i] = -1;\r\n continue;\r\n }\r\n }\r\n\r\n vMap[i] = newVerCount++;\r\n\r\n // color tri-linear interpolation\r\n const dx = (x < xs) ? strideX : 0;\r\n const dy = (y < ys) ? strideY : 0;\r\n const dz = (z < zs) ? strideZ : 0;\r\n\r\n const c0 = [0, 0, 0];\r\n const c1 = [0, 0, 0];\r\n const c2 = [0, 0, 0];\r\n const c3 = [0, 0, 0];\r\n\r\n idx = colorMap.getDirectIdx(x, y, z);\r\n interp(mux, idx, idx + dx, c0);\r\n interp(mux, idx + dy, idx + dx + dy, c1);\r\n interp(mux, idx + dz, idx + dx + dz, c2);\r\n interp(mux, idx + dy + dz, idx + dx + dy + dz, c3);\r\n\r\n const cz0 = [0, 0, 0];\r\n cz0[0] = (1 - muy) * c0[0] + muy * c1[0];\r\n cz0[1] = (1 - muy) * c0[1] + muy * c1[1];\r\n cz0[2] = (1 - muy) * c0[2] + muy * c1[2];\r\n\r\n const cz1 = [0, 0, 0];\r\n cz1[0] = (1 - muy) * c2[0] + muy * c3[0];\r\n cz1[1] = (1 - muy) * c2[1] + muy * c3[1];\r\n cz1[2] = (1 - muy) * c2[2] + muy * c3[2];\r\n\r\n colors[ind] = (1 - muz) * cz0[0] + muz * cz1[0];\r\n colors[ind + 1] = (1 - muz) * cz0[1] + muz * cz1[1];\r\n colors[ind + 2] = (1 - muz) * cz0[2] + muz * cz1[2];\r\n }\r\n this._colors = colors;\r\n\r\n if (visibilitySelector != null) {\r\n // shift visible vertices towards beginning of array\r\n for (i = 0; i < numVerts; ++i) {\r\n const j = vMap[i];\r\n if (j < 0) {\r\n continue;\r\n }\r\n\r\n // assert: j <= i\r\n this._position[j * 3] = this._position[i * 3];\r\n this._position[j * 3 + 1] = this._position[i * 3 + 1];\r\n this._position[j * 3 + 2] = this._position[i * 3 + 2];\r\n this._normals[j * 3] = this._normals[i * 3];\r\n this._normals[j * 3 + 1] = this._normals[i * 3 + 1];\r\n this._normals[j * 3 + 2] = this._normals[i * 3 + 2];\r\n this._colors[j * 3] = this._colors[i * 3];\r\n this._colors[j * 3 + 1] = this._colors[i * 3 + 1];\r\n this._colors[j * 3 + 2] = this._colors[i * 3 + 2];\r\n }\r\n\r\n // rebuild index list\r\n const numTriangles = this._indices.length / 3;\r\n let newTriCount = 0;\r\n for (i = 0; i < numTriangles; ++i) {\r\n const i0 = vMap[this._indices[3 * i]];\r\n const i1 = vMap[this._indices[3 * i + 1]];\r\n const i2 = vMap[this._indices[3 * i + 2]];\r\n if (i0 >= 0 && i1 >= 0 && i2 >= 0) {\r\n this._indices[3 * newTriCount] = i0;\r\n this._indices[3 * newTriCount + 1] = i1;\r\n this._indices[3 * newTriCount + 2] = i2;\r\n ++newTriCount;\r\n }\r\n }\r\n\r\n // shrink arrays to data size\r\n this._position = new Float32Array(this._position.buffer.slice(0, newVerCount * 3 * 4));\r\n this._normals = new Float32Array(this._normals.buffer.slice(0, newVerCount * 3 * 4));\r\n this._colors = new Float32Array(this._colors.buffer.slice(0, newVerCount * 3 * 4));\r\n this._indices = new Uint32Array(this._indices.buffer.slice(0, newTriCount * 3 * 4));\r\n }\r\n }\r\n\r\n toMesh() {\r\n const geo = new THREE.BufferGeometry();\r\n geo.setIndex(new THREE.BufferAttribute(this._indices, 1));\r\n geo.setAttribute('position', new THREE.BufferAttribute(this._position, 3));\r\n geo.setAttribute('normal', new THREE.BufferAttribute(this._normals, 3));\r\n geo.setAttribute('color', new THREE.BufferAttribute(this._colors, 3));\r\n geo.computeBoundingSphere();\r\n return geo;\r\n }\r\n}\r\nexport default IsoSurface;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceGeometry from './IsoSurfaceGeometry';\r\nimport IsoSurface from './IsoSurface';\r\nimport utils from '../../utils';\r\n\r\n/**\r\n * This is a base class for volumetric maps based isosurface algorithms.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass VolumeSurfaceGeometry extends IsoSurfaceGeometry {\r\n _build() {\r\n const params = this._opts;\r\n this.numVoxels = [128, 128, 128];\r\n this.xAxis = new THREE.Vector3(1.0, 0.0, 0.0);\r\n this.yAxis = new THREE.Vector3(0.0, 1.0, 0.0);\r\n this.zAxis = new THREE.Vector3(0.0, 0.0, 1.0);\r\n\r\n this.origin = new THREE.Vector3(0.0, 0.0, 0.0);\r\n this._visibilitySelector = params.visibilitySelector;\r\n\r\n this._calcSurface(params);\r\n }\r\n\r\n _findMinMax(posRadArray) {\r\n const itemSize = 4;\r\n const itemsCount = posRadArray.length / itemSize;\r\n const maxPosRad = [posRadArray[0], posRadArray[1], posRadArray[2], posRadArray[3]];\r\n const minPosRad = [posRadArray[0], posRadArray[1], posRadArray[2], posRadArray[3]];\r\n for (let i = 1; i < itemsCount; ++i) {\r\n const ind = i * itemSize;\r\n\r\n for (let itemIdx = 0; itemIdx < itemSize; ++itemIdx) {\r\n const tmpVal = posRadArray[ind + itemIdx];\r\n maxPosRad[itemIdx] = Math.max(tmpVal, maxPosRad[itemIdx]);\r\n minPosRad[itemIdx] = Math.min(tmpVal, minPosRad[itemIdx]);\r\n }\r\n }\r\n return { maxPosRad, minPosRad };\r\n }\r\n\r\n _findNumVoxels(posRadArray, params) {\r\n const { numVoxels } = this;\r\n const minMaxValues = this._findMinMax(posRadArray);\r\n const minCoordRad = minMaxValues.minPosRad;\r\n const maxCoordRad = minMaxValues.maxPosRad;\r\n\r\n // minrad\r\n if (minCoordRad[3] > 4.0) {\r\n params.gridSpacing *= minCoordRad[3];\r\n }\r\n\r\n let gridPadding = params.radScale * maxCoordRad[3] * 1.7;\r\n let padRad = gridPadding;\r\n padRad = 0.65 * Math.sqrt(4.0 / 3.0 * Math.PI * padRad * padRad * padRad);\r\n gridPadding = Math.max(gridPadding, padRad);\r\n\r\n let i = 0;\r\n for (; i < 3; ++i) {\r\n minCoordRad[i] -= gridPadding;\r\n maxCoordRad[i] += gridPadding;\r\n }\r\n\r\n for (i = 0; i < 3; ++i) {\r\n numVoxels[i] = Math.ceil((maxCoordRad[i] - minCoordRad[i]) / params.gridSpacing);\r\n }\r\n this.xAxis.x = (numVoxels[0] - 1) * params.gridSpacing;\r\n this.yAxis.y = (numVoxels[1] - 1) * params.gridSpacing;\r\n this.zAxis.z = (numVoxels[2] - 1) * params.gridSpacing;\r\n\r\n [this.origin.x, this.origin.y, this.origin.z] = minCoordRad;\r\n\r\n return { bbox: minMaxValues, dim: numVoxels };\r\n }\r\n\r\n _makeSurface(surface, params) {\r\n const isoSurf = new IsoSurface();\r\n isoSurf.compute(surface.volMap, this.origin, params.isoValue, 1);\r\n isoSurf.vertexFusion(9, 9);// normalization is included\r\n\r\n if (isoSurf._numTriangles > 0) {\r\n isoSurf.setColorVolTex(surface.volTexMap, surface.atomMap, surface.atomWeightMap, this._visibilitySelector);\r\n this.setIndex(new THREE.BufferAttribute(isoSurf._indices, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(isoSurf._position, 3));\r\n this.setAttribute('normal', new THREE.BufferAttribute(isoSurf._normals, 3));\r\n this.setAttribute('color', new THREE.BufferAttribute(isoSurf._colors, 3));\r\n } else { // geometry should have at least empty position attributes to be processed in wireframe mode by three.js\r\n this.setAttribute('position', new THREE.BufferAttribute(utils.allocateTyped(Float32Array, 0), 3));\r\n }\r\n }\r\n\r\n _calcSurface(params) {\r\n const packedArrays = {\r\n posRad: this._posRad,\r\n colors: this._colors,\r\n atoms: this._opts.atoms,\r\n };\r\n\r\n if (packedArrays.posRad.length === 0) {\r\n return;\r\n }\r\n const boundaries = this._findNumVoxels(packedArrays.posRad, params);\r\n\r\n const box = new THREE.Box3(\r\n this.origin,\r\n new THREE.Vector3(this.xAxis.x, this.yAxis.y, this.zAxis.z).add(this.origin),\r\n );\r\n const surface = this._computeSurface(packedArrays, box, boundaries, params);\r\n\r\n this._makeSurface(surface, params);\r\n }\r\n}\r\n\r\nexport default VolumeSurfaceGeometry;\r\n","import VolumeSurfaceGeometry from './VolumeSurfaceGeometry';\r\nimport chem from '../../chem';\r\n\r\nconst { Volume } = chem;\r\n\r\n/**\r\n * This class implements 'quick' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass QuickSurfGeometry extends VolumeSurfaceGeometry {\r\n _computeSurface(packedArrays, box, boundaries, params) {\r\n // beware of shifting this multiple times!\r\n this._shiftByOrigin(packedArrays.posRad);\r\n\r\n const surface = {\r\n volMap: new Volume(Float32Array, this.numVoxels, box),\r\n volTexMap: new Volume(Float32Array, this.numVoxels, box, 3),\r\n };\r\n\r\n if (this._visibilitySelector != null) {\r\n surface.atomMap = [];\r\n surface.atomWeightMap = new Volume(Float32Array, this.numVoxels, box);\r\n }\r\n\r\n this.gaussdensity(surface, packedArrays, null, params);\r\n return surface;\r\n }\r\n\r\n gaussdensity(surface, packedArrays, atomicNum, params) {\r\n const numAtoms = packedArrays.posRad.length / 4;\r\n const { posRad, colors } = packedArrays;\r\n const { numVoxels } = this;\r\n const { radScale, gaussLim, gridSpacing } = params;\r\n const invIsoValue = 1.0 / params.isoValue;\r\n const invGridSpacing = 1.0 / gridSpacing;\r\n const maxVoxelX = numVoxels[0] - 1;\r\n const maxVoxelY = numVoxels[1] - 1;\r\n const maxVoxelZ = numVoxels[2] - 1;\r\n // TODO is densityMap and volTexMap initialized?\r\n\r\n const { volMap, volTexMap } = surface;\r\n const volData = volMap.getData();\r\n const strideX = volMap.getStrideX();\r\n\r\n const volTexData = volTexMap.getData();\r\n const texStrideX = volTexMap.getStrideX();\r\n\r\n let atomWeightData;\r\n if (this._visibilitySelector != null) {\r\n atomWeightData = surface.atomWeightMap.getData();\r\n }\r\n\r\n const { atomMap } = surface;\r\n\r\n for (let i = 0; i < numAtoms; ++i) {\r\n const ind = i * 4;\r\n const scaledRad = posRad[ind + 3] * radScale;\r\n const atomicNumFactor = atomicNum === null ? 1.0 : atomicNum[i];\r\n const radInv = 1 / (2 * scaledRad * scaledRad);\r\n let radLim = gaussLim * scaledRad;\r\n const radLim2 = radLim * radLim;\r\n radLim *= invGridSpacing;\r\n\r\n let tmp = posRad[ind] * invGridSpacing;\r\n const xMin = Math.max((tmp - radLim) | 0, 0);\r\n const xMax = Math.min((tmp + radLim) | 0, maxVoxelX);\r\n tmp = posRad[ind + 1] * invGridSpacing;\r\n const yMin = Math.max((tmp - radLim) | 0, 0);\r\n const yMax = Math.min((tmp + radLim) | 0, maxVoxelY);\r\n tmp = posRad[ind + 2] * invGridSpacing;\r\n const zMin = Math.max((tmp - radLim) | 0, 0);\r\n const zMax = Math.min((tmp + radLim) | 0, maxVoxelZ);\r\n\r\n let dz = zMin * gridSpacing - posRad[ind + 2];\r\n for (let z = zMin; z <= zMax; ++z, dz += gridSpacing) {\r\n let dy = yMin * gridSpacing - posRad[ind + 1];\r\n for (let y = yMin; y <= yMax; ++y, dy += gridSpacing) {\r\n const dy2dz2 = dy * dy + dz * dz;\r\n\r\n if (dy2dz2 >= radLim2) {\r\n continue;\r\n }\r\n\r\n let addr = volMap.getDirectIdx(xMin, y, z);\r\n let texAddr = volTexMap.getDirectIdx(xMin, y, z);\r\n let dx = xMin * gridSpacing - posRad[ind];\r\n for (let x = xMin; x <= xMax; ++x, dx += gridSpacing, addr += strideX, texAddr += texStrideX) {\r\n const r2 = dx * dx + dy2dz2;\r\n const expVal = -r2 * radInv;\r\n\r\n let density = Math.exp(expVal) * atomicNumFactor;\r\n\r\n // store most relevant atom (with highest density)\r\n if (this._visibilitySelector != null\r\n && density > atomWeightData[addr]) { // NOSONAR\r\n atomWeightData[addr] = density;\r\n // we use same index into atom map and atomWeightMap\r\n atomMap[addr] = packedArrays.atoms[i];\r\n }\r\n\r\n volData[addr] += density;\r\n\r\n // TODO check for volTexMap routine?\r\n density *= invIsoValue;\r\n const colInd = i * 3;\r\n volTexData[texAddr] += density * colors[colInd];\r\n volTexData[texAddr + 1] += density * colors[colInd + 1];\r\n volTexData[texAddr + 2] += density * colors[colInd + 2];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _shiftByOrigin(posRadArray) {\r\n const originX = this.origin.x;\r\n const originY = this.origin.y;\r\n const originZ = this.origin.z;\r\n\r\n const itemSize = 4;\r\n const itemsCount = posRadArray.length / itemSize;\r\n for (let i = 0; i < itemsCount; ++i) {\r\n const ind = i * itemSize;\r\n\r\n posRadArray[ind] -= originX;\r\n posRadArray[ind + 1] -= originY;\r\n posRadArray[ind + 2] -= originZ;\r\n }\r\n }\r\n}\r\n\r\nexport default QuickSurfGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\n/**\r\n * Modifed from SpatialHash\r\n *\r\n * Main differences are:\r\n * - Optimized grid size to ensure we only ever need to look +/-1 cell\r\n * - Aware of atomic radii and will only output atoms within rAtom + rExtra\r\n * (see withinRadii method)\r\n *\r\n * (Uses rounding rather than bitshifting as consequence of arbitrary grid size)\r\n * @class\r\n * @param {Float32Array} posRad - x, y, z coordinates and radiuses\r\n * @param {Float32Array} min - xyz min coordinates\r\n * @param {Float32Array} max - xyz max coordinates\r\n * @param {number} maxDistance - max distance\r\n */\r\nfunction AVHash(posRad, min, max, maxDistance) {\r\n const itemSize = 4;\r\n const nAtoms = posRad.length / itemSize;\r\n\r\n const minX = min[0];\r\n const minY = min[1];\r\n const minZ = min[2];\r\n\r\n const maxX = max[0];\r\n const maxY = max[1];\r\n const maxZ = max[2];\r\n\r\n function hashFunc(w, minW) {\r\n return Math.floor((w - minW) / maxDistance);\r\n }\r\n\r\n const iDim = hashFunc(maxX, minX) + 1;\r\n const jDim = hashFunc(maxY, minY) + 1;\r\n const kDim = hashFunc(maxZ, minZ) + 1;\r\n\r\n const nCells = iDim * jDim * kDim;\r\n\r\n const jkDim = jDim * kDim;\r\n\r\n /* Get cellID for cartesian x,y,z */\r\n const cellID = function (x, y, z) {\r\n return (((hashFunc(x, minX) * jDim) + hashFunc(y, minY)) * kDim) + hashFunc(z, minZ);\r\n };\r\n\r\n /* Initial building, could probably be optimized further */\r\n const preHash = [];\r\n let i;\r\n let cid;\r\n for (i = 0; i < nAtoms; i++) {\r\n const iIdx = itemSize * i;\r\n cid = cellID(posRad[iIdx], posRad[iIdx + 1], posRad[iIdx + 2]);\r\n\r\n if (preHash[cid] === undefined) {\r\n preHash[cid] = [i];\r\n } else {\r\n preHash[cid].push(i);\r\n }\r\n }\r\n\r\n const cellOffsets = utils.allocateTyped(Uint32Array, nCells);\r\n const cellLengths = utils.allocateTyped(Uint16Array, nCells);\r\n const data = utils.allocateTyped(Uint32Array, nAtoms);\r\n\r\n let offset = 0;\r\n let maxCellLength = 0;\r\n let j;\r\n for (i = 0; i < nCells; i++) {\r\n const start = cellOffsets[i] = offset;\r\n\r\n const subArray = preHash[i];\r\n\r\n if (subArray !== undefined) {\r\n for (j = 0; j < subArray.length; j++) {\r\n data[offset] = subArray[j];\r\n offset++;\r\n }\r\n }\r\n\r\n const cellLength = offset - start;\r\n cellLengths[i] = cellLength;\r\n\r\n if (cellLength > maxCellLength) {\r\n maxCellLength = cellLength;\r\n }\r\n }\r\n\r\n // Maximum number of neighbours we could ever produce (27 adjacent cells of equal population)\r\n this.neighbourListLength = (27 * maxCellLength) + 1;\r\n\r\n /**\r\n * Populate the supplied out array with atom indices that are within rAtom + rExtra\r\n * of x,y,z\r\n *\r\n * -1 in out array indicates the end of the list\r\n *\r\n * @param {number} x - x coordinate\r\n * @param {number} y - y coordinate\r\n * @param {number} z - z coordinate\r\n * @param {number} rExtra - additional radius\r\n * @param {Float32Array} out - pre-allocated output array\r\n * @return {undefined}\r\n */\r\n this.withinRadii = function (x, y, z, rExtra, out) {\r\n let outIdx = 0;\r\n\r\n const nearI = hashFunc(x, minX);\r\n const nearJ = hashFunc(y, minY);\r\n const nearK = hashFunc(z, minZ);\r\n\r\n const loI = Math.max(0, nearI - 1);\r\n const loJ = Math.max(0, nearJ - 1);\r\n const loK = Math.max(0, nearK - 1);\r\n\r\n const hiI = Math.min(iDim - 1, nearI + 1);\r\n const hiJ = Math.min(jDim - 1, nearJ + 1);\r\n const hiK = Math.min(kDim - 1, nearK + 1);\r\n\r\n for (i = loI; i <= hiI; ++i) {\r\n const iOffset = i * jkDim;\r\n\r\n for (j = loJ; j <= hiJ; ++j) {\r\n const jOffset = j * kDim;\r\n\r\n for (let k = loK; k <= hiK; ++k) {\r\n cid = iOffset + jOffset + k;\r\n\r\n const cellStart = cellOffsets[cid];\r\n const cellEnd = cellStart + cellLengths[cid];\r\n\r\n for (let dataIndex = cellStart; dataIndex < cellEnd; dataIndex++) {\r\n const atomIndex = data[dataIndex];\r\n const baseIndex = itemSize * atomIndex;\r\n const dx = posRad[baseIndex] - x;\r\n const dy = posRad[baseIndex + 1] - y;\r\n const dz = posRad[baseIndex + 2] - z;\r\n const rSum = posRad[baseIndex + 3] + rExtra;\r\n\r\n if ((dx * dx + dy * dy + dz * dz) <= (rSum * rSum)) {\r\n out[outIdx++] = data[dataIndex];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // Add terminator\r\n out[outIdx] = -1;\r\n };\r\n}\r\nfunction ContactSurface(packedArrays, boundaries, params, _indexList) {\r\n // Field generation method adapted from AstexViewer (Mike Hartshorn)\r\n // by Fred Ludlow.\r\n // Other parts based heavily on NGL (Alexander Rose) EDT Surface class\r\n //\r\n // Should work as a drop-in alternative to EDTSurface (though some of\r\n // the EDT paramters are not relevant in this method).\r\n\r\n const itemSize = 4;\r\n const { posRad, colors, atoms } = packedArrays;\r\n const nAtoms = posRad.length / itemSize;\r\n\r\n const { bbox } = boundaries;\r\n\r\n const min = bbox.minPosRad;\r\n const max = bbox.maxPosRad;\r\n\r\n let r2; // Atom positions, expanded radii (squared)\r\n let maxRadius;\r\n\r\n // Parameters\r\n let probeRadius;\r\n let scaleFactor;\r\n let probePositions;\r\n\r\n // Cache last value for obscured test\r\n let lastClip = -1;\r\n\r\n // Grid params\r\n let dim;\r\n let grid;\r\n let volTex;\r\n let weights;\r\n let weightsMap = null;\r\n let atomMap = null;\r\n let visibilitySelector = null;\r\n\r\n // grid indices -> xyz coords\r\n let gridx;\r\n let gridy;\r\n let gridz;\r\n\r\n // Lookup tables:\r\n let sinTable;\r\n let cosTable;\r\n\r\n // Spatial Hash\r\n let hash;\r\n\r\n // Neighbour array to be filled by hash\r\n let neighbours;\r\n\r\n // Vectors for Torus Projection\r\n const mid = new THREE.Vector3(0.0, 0.0, 0.0);\r\n const n1 = new THREE.Vector3(0.0, 0.0, 0.0);\r\n const n2 = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n let ngTorus;\r\n\r\n function uniformArray(TypeName, n, a) {\r\n const array = utils.allocateTyped(TypeName, n);\r\n for (let innI = 0; innI < n; ++innI) {\r\n array[innI] = a;\r\n }\r\n\r\n return array;\r\n }\r\n\r\n function fillGridDim(a, start, step) {\r\n for (let innI = 0; innI < a.length; innI++) {\r\n a[innI] = start + (step * innI);\r\n }\r\n }\r\n\r\n function initializeGrid() {\r\n ({ scaleFactor } = params);\r\n ({ dim } = boundaries);\r\n\r\n ngTorus = Math.min(5, 2 + Math.floor(probeRadius * scaleFactor));\r\n\r\n const gridSize = dim[0] * dim[1] * dim[2];\r\n grid = uniformArray(Float32Array, gridSize, -1001.0);\r\n volTex = utils.allocateTyped(Float32Array, gridSize * 3);\r\n weights = utils.allocateTyped(Float32Array, gridSize);\r\n if (visibilitySelector) {\r\n weightsMap = utils.allocateTyped(Float32Array, gridSize);\r\n atomMap = [];\r\n }\r\n\r\n gridx = utils.allocateTyped(Float32Array, dim[0]);\r\n gridy = utils.allocateTyped(Float32Array, dim[1]);\r\n gridz = utils.allocateTyped(Float32Array, dim[2]);\r\n\r\n fillGridDim(gridx, min[0], 1 / scaleFactor);\r\n fillGridDim(gridy, min[1], 1 / scaleFactor);\r\n fillGridDim(gridz, min[2], 1 / scaleFactor);\r\n }\r\n\r\n function initializeAngleTables() {\r\n let theta = 0.0;\r\n const step = 2 * Math.PI / probePositions;\r\n\r\n cosTable = utils.allocateTyped(Float32Array, probePositions);\r\n sinTable = utils.allocateTyped(Float32Array, probePositions);\r\n for (let innI = 0; innI < probePositions; innI++) {\r\n cosTable[innI] = Math.cos(theta);\r\n sinTable[innI] = Math.sin(theta);\r\n theta += step;\r\n }\r\n }\r\n\r\n function initializeHash() {\r\n hash = new AVHash(posRad, min, max, 2.01 * maxRadius);\r\n neighbours = new Int32Array(hash.neighbourListLength);\r\n }\r\n\r\n function init() {\r\n ({\r\n probeRadius,\r\n scaleFactor,\r\n probePositions,\r\n visibilitySelector,\r\n } = params);\r\n r2 = utils.allocateTyped(Float32Array, nAtoms);\r\n maxRadius = 0;\r\n for (let innI = 0; innI < nAtoms; ++innI) {\r\n const rExt = posRad[innI * itemSize + 3] += probeRadius;\r\n if (rExt > maxRadius) {\r\n maxRadius = rExt;\r\n }\r\n r2[innI] = rExt * rExt;\r\n }\r\n\r\n initializeGrid();\r\n initializeAngleTables();\r\n initializeHash();\r\n\r\n lastClip = -1;\r\n }\r\n\r\n function singleAtomObscures(ai, innX, innY, innZ) {\r\n const innCI = itemSize * ai;\r\n const ra2 = r2[ai];\r\n const dx = posRad[innCI] - innX;\r\n const dy = posRad[innCI + 1] - innY;\r\n const dz = posRad[innCI + 2] - innZ;\r\n const d2 = dx * dx + dy * dy + dz * dz;\r\n\r\n return d2 < ra2;\r\n }\r\n\r\n function obscured(innX, innY, innZ, a, b) {\r\n // Is the point at x,y,z obscured by any of the atoms\r\n // specifeid by indices in neighbours. Ignore indices\r\n // a and b (these are the relevant atoms in projectPoints/Torii)\r\n\r\n // Cache the last clipped atom (as very often the same one in\r\n // subsequent calls)\r\n let ai;\r\n\r\n if (lastClip !== -1) {\r\n ai = lastClip;\r\n if (ai !== a && ai !== b && singleAtomObscures(ai, innX, innY, innZ)) {\r\n return ai;\r\n }\r\n lastClip = -1;\r\n }\r\n\r\n let ni = 0;\r\n ai = neighbours[ni];\r\n while (ai >= 0) {\r\n if (ai !== a && ai !== b && singleAtomObscures(ai, innX, innY, innZ)) {\r\n lastClip = ai;\r\n return ai;\r\n }\r\n ai = neighbours[++ni];\r\n }\r\n\r\n lastClip = -1;\r\n\r\n return -1;\r\n }\r\n\r\n function projectPoints() {\r\n // For each atom:\r\n // Iterate over a subsection of the grid, for each point:\r\n // If current value < 0.0, unvisited, set positive\r\n //\r\n // In any case: Project this point onto surface of the atomic sphere\r\n // If this projected point is not obscured by any other atom\r\n // Calcualte delta distance and set grid value to minimum of\r\n // itself and delta\r\n\r\n // Should we alias frequently accessed closure constiables??\r\n // Assume JS engine capable of optimizing this\r\n // anyway...\r\n const maxRad = 4.0;\r\n const sigma = (maxRad) / 3;\r\n const sigma2Inv = 1 / (2 * sigma * sigma);\r\n\r\n for (let innI = 0; innI < nAtoms; innI++) {\r\n const innCI = itemSize * innI;\r\n const ax = posRad[innCI];\r\n const ay = posRad[innCI + 1];\r\n const az = posRad[innCI + 2];\r\n const ar = posRad[innCI + 3];\r\n const ar2 = r2[innI];\r\n\r\n hash.withinRadii(ax, ay, az, ar, neighbours);\r\n\r\n // Number of grid points, round this up...\r\n const ng = Math.ceil(ar * scaleFactor);\r\n\r\n // Center of the atom, mapped to grid points (take floor)\r\n const iax = Math.floor(scaleFactor * (ax - min[0]));\r\n const iay = Math.floor(scaleFactor * (ay - min[1]));\r\n const iaz = Math.floor(scaleFactor * (az - min[2]));\r\n\r\n // Extents of grid to consider for this atom\r\n const minx = Math.max(0, iax - ng);\r\n const miny = Math.max(0, iay - ng);\r\n const minz = Math.max(0, iaz - ng);\r\n\r\n // Add two to these points:\r\n // - iax are floor'd values so this ensures coverage\r\n // - these are loop limits (exclusive)\r\n const maxx = Math.min(dim[0], iax + ng + 2);\r\n const maxy = Math.min(dim[1], iay + ng + 2);\r\n const maxz = Math.min(dim[2], iaz + ng + 2);\r\n\r\n const colIdx = innI * 3;\r\n const cr = colors[colIdx];\r\n const cg = colors[colIdx + 1];\r\n const cb = colors[colIdx + 2];\r\n\r\n for (let iz = minz; iz < maxz; iz++) {\r\n const dz = gridz[iz] - az;\r\n const zOffset = dim[1] * dim[0] * iz;\r\n\r\n for (let iy = miny; iy < maxy; iy++) {\r\n const dy = gridy[iy] - ay;\r\n const dzy2 = dz * dz + dy * dy;\r\n const zyOffset = zOffset + dim[0] * iy;\r\n\r\n for (let ix = minx; ix < maxx; ix++) {\r\n const idx = ix + zyOffset;\r\n const dx = gridx[ix] - ax;\r\n const d2 = dzy2 + dx * dx;\r\n\r\n if (d2 < ar2) {\r\n const w = Math.exp(-d2 * sigma2Inv);\r\n const cIdx = idx * 3;\r\n volTex[cIdx] += cr * w;\r\n volTex[cIdx + 1] += cg * w;\r\n volTex[cIdx + 2] += cb * w;\r\n weights[idx] += w;\r\n if (visibilitySelector !== null && w > weightsMap[idx]) {\r\n weightsMap[idx] = w;\r\n atomMap[idx] = atoms[innI];\r\n }\r\n\r\n if (grid[idx] < 0.0) {\r\n // Unvisited, make positive\r\n grid[idx] = -grid[idx];\r\n }\r\n // Project on to the surface of the sphere\r\n // sp is the projected point ( dx, dy, dz ) * ( ra / d )\r\n const d = Math.sqrt(d2);\r\n const ap = ar / d;\r\n let spx = dx * ap;\r\n let spy = dy * ap;\r\n let spz = dz * ap;\r\n\r\n spx += ax;\r\n spy += ay;\r\n spz += az;\r\n\r\n if (obscured(spx, spy, spz, innI, -1) === -1) {\r\n const dd = ar - d;\r\n if (dd < grid[idx]) {\r\n grid[idx] = dd;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function normalToLine(out, p) {\r\n out.x = out.y = out.z = 1.0;\r\n if (p.x !== 0) {\r\n out.x = (p.y + p.z) / -p.x;\r\n } else if (p.y !== 0) {\r\n out.y = (p.x + p.z) / -p.y;\r\n } else if (p.z !== 0) {\r\n out.z = (p.x + p.y) / -p.z;\r\n }\r\n return out;\r\n }\r\n\r\n function projectTorus(a, b) {\r\n const aIdx = itemSize * a;\r\n const bIdx = itemSize * b;\r\n const xa = posRad[aIdx];\r\n const ya = posRad[aIdx + 1];\r\n const za = posRad[aIdx + 2];\r\n const r1 = posRad[aIdx + 3];\r\n let dx = mid.x = posRad[bIdx] - xa;\r\n let dy = mid.y = posRad[bIdx + 1] - ya;\r\n let dz = mid.z = posRad[bIdx + 2] - za;\r\n const innR2 = posRad[bIdx + 3];\r\n let d2 = dx * dx + dy * dy + dz * dz;\r\n\r\n // This check now redundant as already done in AVHash.withinRadii\r\n // if( d2 > (( r1 + r2 ) * ( r1 + r2 )) ){ return; }\r\n\r\n const d = Math.sqrt(d2);\r\n\r\n // Find angle between a->b vector and the circle\r\n // of their intersection by cosine rule\r\n const cosA = (r1 * r1 + d * d - innR2 * innR2) / (2.0 * r1 * d);\r\n\r\n // distance along a->b at intersection\r\n const dmp = r1 * cosA;\r\n\r\n mid.normalize();\r\n\r\n // Create normal to line\r\n normalToLine(n1, mid);\r\n n1.normalize();\r\n\r\n // Cross together for second normal vector\r\n n2.crossVectors(mid, n1);\r\n n2.normalize();\r\n\r\n // r is radius of circle of intersection\r\n const rInt = Math.sqrt(r1 * r1 - dmp * dmp);\r\n\r\n n1.multiplyScalar(rInt);\r\n n2.multiplyScalar(rInt);\r\n mid.multiplyScalar(dmp);\r\n\r\n mid.x += xa;\r\n mid.y += ya;\r\n mid.z += za;\r\n\r\n lastClip = -1;\r\n\r\n const ng = ngTorus;\r\n\r\n for (let innI = 0; innI < probePositions; innI++) {\r\n const cost = cosTable[innI];\r\n const sint = sinTable[innI];\r\n\r\n const px = mid.x + cost * n1.x + sint * n2.x;\r\n const py = mid.y + cost * n1.y + sint * n2.y;\r\n const pz = mid.z + cost * n1.z + sint * n2.z;\r\n\r\n if (obscured(px, py, pz, a, b) === -1) {\r\n // As above, iterate over our grid...\r\n // px, py, pz in grid coords\r\n const iax = Math.floor(scaleFactor * (px - min[0]));\r\n const iay = Math.floor(scaleFactor * (py - min[1]));\r\n const iaz = Math.floor(scaleFactor * (pz - min[2]));\r\n\r\n const minx = Math.max(0, iax - ng);\r\n const miny = Math.max(0, iay - ng);\r\n const minz = Math.max(0, iaz - ng);\r\n\r\n const maxx = Math.min(dim[0], iax + ng + 2);\r\n const maxy = Math.min(dim[1], iay + ng + 2);\r\n const maxz = Math.min(dim[2], iaz + ng + 2);\r\n\r\n for (let iz = minz; iz < maxz; iz++) {\r\n dz = pz - gridz[iz];\r\n const zOffset = dim[1] * dim[0] * iz;\r\n for (let iy = miny; iy < maxy; iy++) {\r\n dy = py - gridy[iy];\r\n const dzy2 = dz * dz + dy * dy;\r\n const zyOffset = zOffset + dim[0] * iy;\r\n for (let ix = minx; ix < maxx; ix++) {\r\n dx = px - gridx[ix];\r\n d2 = dzy2 + dx * dx;\r\n const idx = ix + zyOffset;\r\n const current = grid[idx];\r\n\r\n if (current > 0.0 && d2 < (current * current)) {\r\n grid[idx] = Math.sqrt(d2);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function projectTorii() {\r\n for (let innI = 0; innI < nAtoms; innI++) {\r\n const innIdx = itemSize * innI;\r\n hash.withinRadii(\r\n posRad[innIdx],\r\n posRad[innIdx + 1],\r\n posRad[innIdx + 2],\r\n posRad[innIdx + 3],\r\n neighbours,\r\n );\r\n let ia = 0;\r\n let ni = neighbours[ia];\r\n while (ni >= 0) {\r\n if (innI < ni) {\r\n projectTorus(innI, ni);\r\n }\r\n ni = neighbours[++ia];\r\n }\r\n }\r\n }\r\n\r\n function fixNegatives() {\r\n for (let innI = 0, n = grid.length; innI < n; innI++) {\r\n if (grid[innI] < 0) grid[innI] = 0;\r\n let w = weights[innI];\r\n if (w > 0) {\r\n w = 1 / w;\r\n const innInnI = innI * 3;\r\n volTex[innInnI] *= w;\r\n volTex[innInnI + 1] *= w;\r\n volTex[innInnI + 2] *= w;\r\n }\r\n }\r\n }\r\n\r\n function getVolume() {\r\n // Basic steps are:\r\n // 1) Initialize\r\n // 2) Project points\r\n // 3) Project torii\r\n console.time('ContactSurface.getVolume');\r\n\r\n console.time('ContactSurface.init');\r\n init();\r\n console.timeEnd('ContactSurface.init');\r\n\r\n console.time('ContactSurface.projectPoints');\r\n projectPoints();\r\n console.timeEnd('ContactSurface.projectPoints');\r\n\r\n console.time('ContactSurface.projectTorii');\r\n projectTorii();\r\n console.timeEnd('ContactSurface.projectTorii');\r\n fixNegatives();\r\n console.timeEnd('ContactSurface.getVolume');\r\n }\r\n\r\n this.build = function () {\r\n // type and cutoff left in for compatibility with EDTSurface.getSurface\r\n // function signature\r\n getVolume();\r\n this.volTexMap = volTex;\r\n this.weightsMap = weightsMap;\r\n this.atomMap = atomMap;\r\n this.volMap = grid;\r\n };\r\n}\r\nexport default ContactSurface;\r\n","import VolumeSurfaceGeometry from './VolumeSurfaceGeometry';\r\nimport ContactSurface from './ContactSurface';\r\nimport chem from '../../chem';\r\n\r\nconst { Volume } = chem;\r\n\r\n/**\r\n * This class implements 'contact' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass ContactSurfaceGeometry extends VolumeSurfaceGeometry {\r\n _computeSurface(packedArrays, box, boundaries, params) {\r\n const contactSurface = new ContactSurface(packedArrays, boundaries, params);\r\n contactSurface.build();\r\n\r\n const surface = {\r\n volMap: new Volume(Float32Array, this.numVoxels, box, 1, contactSurface.volMap),\r\n volTexMap: new Volume(Float32Array, this.numVoxels, box, 3, contactSurface.volTexMap),\r\n atomMap: contactSurface.atomMap,\r\n atomWeightMap: new Volume(Float32Array, this.numVoxels, box, 1, contactSurface.weightsMap),\r\n };\r\n return surface;\r\n }\r\n}\r\n\r\nexport default ContactSurfaceGeometry;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Class for colored atom. Need for atom structure clusterization\r\n *\r\n * @param {Vector3} vCenter Center of atom\r\n * @param {number} radiusAt Radius of atom\r\n */\r\nclass IsoSurfaceAtomColored {\r\n constructor(vCenter, radiusAt) {\r\n this.coord = new THREE.Vector3();\r\n this.coord.copy(vCenter);\r\n this.radius = radiusAt;\r\n this.colorX = 0.99999;\r\n this.colorY = 0.0;\r\n this.colorZ = 0.0;\r\n this.atomType = 0;\r\n this.srcAtom = null;\r\n }\r\n}\r\nexport default IsoSurfaceAtomColored;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\n// suppress some JSHint warnings\r\n/* jshint bitwise: false */\r\n\r\n/**\r\n * Build normals for isosurface, using atoms information\r\n *\r\n * @param {number} numAtoms - Number of atoms in molecule\r\n * @param {Element} atoms - Array of atoms\r\n * @param {Vector3} vBoxMin - Bounding box min\r\n * @param {Vector3} vBoxMax - Bounding box max\r\n * @param {number} probeRadius - Normals for output\r\n *\r\n */\r\nclass IsosurfaceBuildNormals {\r\n constructor(numAtoms, atoms, vBoxMin, vBoxMax, probeRadius) {\r\n this._numAtoms = numAtoms;\r\n this._atoms = atoms;\r\n this._vBoxMin = new THREE.Vector3();\r\n this._vBoxMax = new THREE.Vector3();\r\n this._vBoxMin.copy(vBoxMin);\r\n this._vBoxMax.copy(vBoxMax);\r\n this._probeRadius = probeRadius;\r\n\r\n this._atomsList = null;\r\n this._voxelList = null;\r\n }\r\n\r\n createVoxels() {\r\n let numAtomsRefs;\r\n let rad;\r\n const ATOM_VOXEL_REF_SCALE = 4.5;\r\n\r\n const numAtoms = this._numAtoms | 0;\r\n const atoms = this._atoms;\r\n const dx = this._vBoxMax.x - this._vBoxMin.x;\r\n const dy = this._vBoxMax.y - this._vBoxMin.y;\r\n const dz = this._vBoxMax.z - this._vBoxMin.z;\r\n let w = (dx < dy) ? dx : dy;\r\n w = (dz < w) ? dz : w;\r\n let maxRad = 0.0;\r\n let aveRad = 0.0;\r\n\r\n let i;\r\n for (i = 0; i < numAtoms; i++) {\r\n rad = (atoms[i].radius + this._probeRadius) * 2.0;\r\n maxRad = (rad > maxRad) ? rad : maxRad;\r\n aveRad += rad;\r\n }\r\n let numCells = Math.floor(w / maxRad);\r\n if (numCells < 2) {\r\n numCells = 2;\r\n }\r\n aveRad /= numAtoms;\r\n\r\n this._numCells = numCells;\r\n this._aveRad = aveRad;\r\n this._maxRad = maxRad;\r\n\r\n const side = numCells;\r\n const side2 = numCells * numCells;\r\n const side3 = numCells * numCells * numCells;\r\n\r\n const xScale = this._xScale = 1.0 / (this._vBoxMax.x - this._vBoxMin.x);\r\n const yScale = this._yScale = 1.0 / (this._vBoxMax.y - this._vBoxMin.y);\r\n const zScale = this._zScale = 1.0 / (this._vBoxMax.z - this._vBoxMin.z);\r\n\r\n // estimate number of individual atom refs in each voxel list\r\n let maxAtomsRefs = 0;\r\n\r\n const xNumVoxMult = xScale * numCells;\r\n const yNumVoxMult = yScale * numCells;\r\n const zNumVoxMult = zScale * numCells;\r\n\r\n for (i = 0; i < numAtoms; i++) {\r\n const radAffect = (atoms[i].radius + this._probeRadius) * ATOM_VOXEL_REF_SCALE;\r\n const diaAffect = radAffect * 2.0;\r\n let numVoxX = Math.floor(xNumVoxMult * diaAffect + 0.8);\r\n let numVoxY = Math.floor(yNumVoxMult * diaAffect + 0.8);\r\n let numVoxZ = Math.floor(zNumVoxMult * diaAffect + 0.8);\r\n // avoid case numVox? == 0\r\n // also use loop i <=\r\n numVoxX++;\r\n numVoxY++;\r\n numVoxZ++;\r\n maxAtomsRefs += numVoxX * numVoxY * numVoxZ;\r\n } // for (i)\r\n // maxAtomsRefs = numAtoms * MAX_ATOMS_IN_SINGLE_VOXEL;\r\n\r\n this._voxelList = utils.allocateTyped(Int32Array, side3);\r\n const atomsList = [];\r\n atomsList.length = maxAtomsRefs;\r\n if ((this._voxelList === null) || (atomsList === null)) {\r\n return 0 - 1;\r\n }\r\n // init voxel list\r\n for (i = 0; i < side3; i++) {\r\n this._voxelList[i] = -1;\r\n }\r\n numAtomsRefs = 0;\r\n\r\n // create voxel lists\r\n for (i = 0; i < numAtoms; i++) {\r\n // use multiplier 4 to locate this atom in different voxels\r\n rad = (atoms[i].radius + this._probeRadius) * ATOM_VOXEL_REF_SCALE;\r\n let xIndMin = Math.floor((atoms[i].coord.x - this._vBoxMin.x - rad) * numCells * xScale);\r\n let yIndMin = Math.floor((atoms[i].coord.y - this._vBoxMin.y - rad) * numCells * yScale);\r\n let zIndMin = Math.floor((atoms[i].coord.z - this._vBoxMin.z - rad) * numCells * zScale);\r\n let xIndMax = Math.floor((atoms[i].coord.x - this._vBoxMin.x + rad) * numCells * xScale);\r\n let yIndMax = Math.floor((atoms[i].coord.y - this._vBoxMin.y + rad) * numCells * yScale);\r\n let zIndMax = Math.floor((atoms[i].coord.z - this._vBoxMin.z + rad) * numCells * zScale);\r\n\r\n xIndMin = (xIndMin >= 0) ? xIndMin : 0;\r\n yIndMin = (yIndMin >= 0) ? yIndMin : 0;\r\n zIndMin = (zIndMin >= 0) ? zIndMin : 0;\r\n\r\n xIndMax = (xIndMax < numCells) ? xIndMax : (numCells - 1);\r\n yIndMax = (yIndMax < numCells) ? yIndMax : (numCells - 1);\r\n zIndMax = (zIndMax < numCells) ? zIndMax : (numCells - 1);\r\n\r\n for (let z = zIndMin; z <= zIndMax; z++) {\r\n for (let y = yIndMin; y <= yIndMax; y++) {\r\n for (let x = xIndMin; x <= xIndMax; x++) {\r\n // add atom with index \"i\" to this voxel list\r\n const indVoxel = x + y * side + z * side2;\r\n // assert indVoxel >= 0\r\n // assert indVoxel < side3\r\n\r\n // add first\r\n if (this._voxelList[indVoxel] < 0) {\r\n atomsList[numAtomsRefs * 2 + 0] = i;\r\n atomsList[numAtomsRefs * 2 + 1] = 0 - 1;\r\n this._voxelList[indVoxel] = numAtomsRefs;\r\n numAtomsRefs++;\r\n // assert numAtomsRefs < maxAtomsRefs - 1\r\n continue;\r\n }\r\n // insert into head of list\r\n const indexNext = this._voxelList[indVoxel];\r\n this._voxelList[indVoxel] = numAtomsRefs;\r\n atomsList[numAtomsRefs * 2 + 0] = i;\r\n atomsList[numAtomsRefs * 2 + 1] = indexNext;\r\n numAtomsRefs++;\r\n } // for (x)\r\n } // for (y)\r\n } // for (z)\r\n } // for (i)\r\n\r\n // convert Array to Int32Array\r\n this._atomsList = Int32Array.from(atomsList);\r\n\r\n return 0;\r\n }\r\n\r\n destroyVoxels() {\r\n this._atomsList = null;\r\n this._voxelList = null;\r\n\r\n this._atoms = null;\r\n this._vertices = null;\r\n this._vBoxMin = null;\r\n this._vBoxMax = null;\r\n }\r\n\r\n /**\r\n * Enumerate all atoms affecting specified point\r\n *\r\n * @param {Vector3} point - point in 3D\r\n * @param {func(atom)} process - function to call for each atom\r\n */\r\n forEachRelatedAtom(point, process) {\r\n // find corresponding voxel\r\n const xInd = Math.floor((point.x - this._vBoxMin.x) * this._numCells * this._xScale);\r\n const yInd = Math.floor((point.y - this._vBoxMin.y) * this._numCells * this._yScale);\r\n const zInd = Math.floor((point.z - this._vBoxMin.z) * this._numCells * this._zScale);\r\n const indVoxel = xInd + yInd * this._numCells + zInd * this._numCells * this._numCells;\r\n\r\n // run through atoms affecting this voxel\r\n const atoms = this._atoms;\r\n for (let ref = this._voxelList[indVoxel]; ref >= 0; ref = this._atomsList[ref * 2 + 1]) {\r\n const indexAtom = this._atomsList[ref * 2];\r\n process(atoms[indexAtom]);\r\n }\r\n }\r\n\r\n /**\r\n * Get atom closest to specified point\r\n *\r\n * @param {Vector3} point - point in 3D\r\n *\r\n * @returns {IsoSurfaceAtomColored} atom, or null if not found\r\n */\r\n getClosestAtom(point) {\r\n let closest = null;\r\n let minDist2 = Number.MAX_VALUE;\r\n\r\n this.forEachRelatedAtom(point, (atom) => {\r\n const dist2 = point.distanceToSquared(atom.coord);\r\n if (dist2 < minDist2) {\r\n minDist2 = dist2;\r\n closest = atom;\r\n }\r\n });\r\n\r\n return closest;\r\n }\r\n\r\n /**\r\n * Build normals for isosurface, using atoms information\r\n *\r\n * @param {number} numVertices - Number of vertices in final geometry (to render)\r\n * @param {Vector3} vertices - Geometry vertices (3d coordinates array)\r\n * @param {Vector3} normals - Normals for output\r\n *\r\n * @returns {number} 0, if success\r\n */\r\n buildNormals(numVertices, vertices, normals) {\r\n const self = this;\r\n let numCloseAtoms = 0;\r\n let vx = 0;\r\n let vy = 0;\r\n let vz = 0;\r\n let dist2;\r\n let vNormalX = 0;\r\n let vNormalY = 0;\r\n let vNormalZ = 0;\r\n let koef = 0;\r\n let w = 0;\r\n const r25 = 2.5;\r\n const r01 = 0.1;\r\n\r\n const maxRadAffect = this._aveRad * r25;\r\n const maxRadAffect2 = maxRadAffect * maxRadAffect;\r\n const expScale = -this._aveRad * r01;\r\n\r\n // some stats\r\n // numSlowAtoms = 0;\r\n\r\n const gatherNormals = function (atom) {\r\n const dx = vx - atom.coord.x;\r\n const dy = vy - atom.coord.y;\r\n const dz = vz - atom.coord.z;\r\n dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 > maxRadAffect2) {\r\n return;\r\n }\r\n\r\n // get weight for gaussian smoothing\r\n const rad = atom.radius + self._probeRadius;\r\n koef = dist2 - (rad * rad);\r\n if (koef < 0.0) {\r\n koef = -koef;\r\n }\r\n w = Math.exp(expScale * koef);\r\n\r\n vNormalX += dx * w;\r\n vNormalY += dy * w;\r\n vNormalZ += dz * w;\r\n numCloseAtoms++;\r\n };\r\n\r\n let maxClosedAtoms = 0;\r\n // process all vertices, one by one\r\n for (let i = 0; i < numVertices; i++) {\r\n vx = vertices[i].x;\r\n vy = vertices[i].y;\r\n vz = vertices[i].z;\r\n\r\n numCloseAtoms = 0;\r\n vNormalX = vNormalY = vNormalZ = 0.0;\r\n\r\n this.forEachRelatedAtom(vertices[i], gatherNormals);\r\n\r\n maxClosedAtoms = (numCloseAtoms > maxClosedAtoms) ? numCloseAtoms : maxClosedAtoms;\r\n\r\n // normalize vNormal\r\n dist2 = vNormalX * vNormalX + vNormalY * vNormalY + vNormalZ * vNormalZ;\r\n if (numCloseAtoms > 0) {\r\n koef = 1.0 / Math.sqrt(dist2);\r\n vNormalX *= koef;\r\n vNormalY *= koef;\r\n vNormalZ *= koef;\r\n }\r\n normals[i].x = vNormalX;\r\n normals[i].y = vNormalY;\r\n normals[i].z = vNormalZ;\r\n } // for (i) all vertices\r\n\r\n return 0;\r\n }\r\n\r\n /**\r\n * Build vertex colors for isosurface, using atoms information\r\n *\r\n * @param {number} numVertices - Number of vertices in final geometry (to render)\r\n * @param {Vector3} vertices - Geometry vertices (3d coordinates array)\r\n * @param {Vector3} colors - Colors for output\r\n * @param {number} radiusColorSmoothness - Radius of smoothness sphere\r\n *\r\n * @returns {number} 0, if success\r\n */\r\n buildColors(numVertices, vertices, colors, radiusColorSmoothness) {\r\n const self = this;\r\n let vx = 0.0;\r\n let vy = 0.0;\r\n let vz = 0.0;\r\n let koef = 0.0;\r\n let w = 0.0;\r\n const KOEF_ADD = 0.8;\r\n\r\n const maxRadAffect = radiusColorSmoothness;\r\n const maxRadAffect2 = maxRadAffect * maxRadAffect;\r\n\r\n let colorsClose = [];\r\n let weights = [];\r\n let weightsSum = 0;\r\n\r\n const gatherColors = function (atom) {\r\n const dx = vx - atom.coord.x;\r\n const dy = vy - atom.coord.y;\r\n const dz = vz - atom.coord.z;\r\n const dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 > maxRadAffect2) {\r\n return;\r\n }\r\n\r\n // get weight for gaussian smoothing\r\n const rad = atom.radius + self._probeRadius;\r\n koef = dist2 - (rad * rad);\r\n if (koef < 0.0) {\r\n koef = -koef;\r\n }\r\n w = 1.0 / (KOEF_ADD + koef);\r\n\r\n colorsClose.push([atom.colorX, atom.colorY, atom.colorZ]);\r\n weights.push(w); // save weights for use\r\n weightsSum += w; // calc sum of weights fo further normalization\r\n };\r\n\r\n // process all vertices, one by one\r\n for (let i = 0; i < numVertices; i++) {\r\n vx = vertices[i].x;\r\n vy = vertices[i].y;\r\n vz = vertices[i].z;\r\n\r\n colorsClose = [];\r\n weights = [];\r\n weightsSum = 0;\r\n\r\n this.forEachRelatedAtom(vertices[i], gatherColors);\r\n\r\n // normalized weighted sum of colors\r\n for (let j = 0; j < colorsClose.length; ++j) {\r\n const weightNormalized = weights[j] / weightsSum;\r\n colors[i].x += colorsClose[j][0] * weightNormalized;\r\n colors[i].y += colorsClose[j][1] * weightNormalized;\r\n colors[i].z += colorsClose[j][2] * weightNormalized;\r\n }\r\n } // for (i) all vertices\r\n return 0;\r\n }\r\n}\r\nexport default IsosurfaceBuildNormals;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Class for geometry (triangle mesh) representation\r\n *\r\n *\r\n * @param {number} maxNumVertices Maximum possible number of vertices in mesh\r\n * @param {number} maxNumTriangles Maximum possible number of triangles in mesh\r\n * @param {boolean} needVertexColors Obvious\r\n */\r\nclass IsoSurfaceGeo {\r\n constructor(maxNumVertices, maxNumTriangles, needVertexColors) {\r\n this._maxNumVertices = maxNumVertices;\r\n this._maxNumTriangles = maxNumTriangles;\r\n this._vertices = new Array(maxNumVertices);\r\n this._normals = new Array(maxNumVertices);\r\n this._colors = null;\r\n if (needVertexColors) {\r\n this._colors = new Array(maxNumVertices);\r\n }\r\n this._indices = new Array(maxNumTriangles * (1 + 2));\r\n this._numVertices = 0;\r\n this._numTriangles = 0;\r\n\r\n let i;\r\n for (i = 0; i < maxNumVertices; i++) {\r\n this._vertices[i] = new THREE.Vector3();\r\n this._normals[i] = new THREE.Vector3();\r\n }\r\n for (i = 0; i < maxNumTriangles * (1 + 2); i++) {\r\n this._indices[i] = -1;\r\n }\r\n if (needVertexColors) {\r\n for (i = 0; i < maxNumVertices; i++) {\r\n this._colors[i] = new THREE.Vector3();\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n this._vertices = null;\r\n this._normals = null;\r\n this._indices = null;\r\n }\r\n}\r\nexport default IsoSurfaceGeo;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceGeometry from './IsoSurfaceGeometry';\r\nimport IsoSurfaceAtomColored from './IsoSurfaceAtomColored';\r\nimport IsosurfaceBuildNormals from './IsosurfaceBuildNormals';\r\nimport IsoSurfaceMarchCube from './IsoSurfaceMarchCube';\r\nimport IsoSurfaceGeo from './IsoSurfaceGeo';\r\nimport chem from '../../chem';\r\nimport utils from '../../utils';\r\n\r\nconst COLOR_SIZE = 3;\r\nconst HASH_SIZE = 32768;\r\nconst { Element } = chem;\r\n\r\n/**\r\n * This class implements 'quick' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass SSIsosurfaceGeometry extends IsoSurfaceGeometry {\r\n _build() {\r\n // convert geoOut into arrays of positions, indices, normals\r\n this._innerBuild();\r\n const geoOut = this.getGeo();\r\n this.destroy();\r\n this._fromGeo(geoOut);\r\n }\r\n\r\n _fromGeo(geoOut) {\r\n let colors = null;\r\n const positions = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n const normals = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n if (geoOut._colors !== null) {\r\n colors = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n }\r\n const indices = utils.allocateTyped(Uint32Array, (1 + 2) * geoOut._numTriangles);\r\n\r\n for (let i = 0, j = 0; i < geoOut._numVertices; i++) {\r\n positions[j + 0] = (geoOut._vertices[i].x);\r\n positions[j + 1] = (geoOut._vertices[i].y);\r\n positions[j + 2] = (geoOut._vertices[i].z);\r\n normals[j + 0] = geoOut._normals[i].x;\r\n normals[j + 1] = geoOut._normals[i].y;\r\n normals[j + 2] = geoOut._normals[i].z;\r\n j += 3;\r\n }\r\n if (colors !== null) {\r\n for (let i = 0, j = 0; i < geoOut._numVertices; i++, j += 3) {\r\n colors[j + 0] = geoOut._colors[i].x;\r\n colors[j + 1] = geoOut._colors[i].y;\r\n colors[j + 2] = geoOut._colors[i].z;\r\n }\r\n }\r\n\r\n const numTri3 = geoOut._numTriangles * (1 + 2);\r\n for (let i = 0; i < numTri3; i++) {\r\n indices[i] = geoOut._indices[i];\r\n }\r\n\r\n this.setIndex(new THREE.BufferAttribute(indices, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(positions, 3));\r\n this.setAttribute('normal', new THREE.BufferAttribute(normals, 3));\r\n this.setAttribute('color', new THREE.BufferAttribute(colors, 3));\r\n this.computeBoundingBox();\r\n this.computeBoundingSphere();\r\n\r\n geoOut.destroy();\r\n }\r\n\r\n convertToAtomsColored(packedArrays, atomsColored) {\r\n const { atoms, colors } = packedArrays;\r\n for (let i = 0, numAtoms = atoms.length; i < numAtoms; i++) {\r\n const vCenter = atoms[i].position;\r\n const { radius } = atoms[i].element;\r\n atomsColored[i] = new IsoSurfaceAtomColored(vCenter, radius);\r\n const nm = atoms[i].element.number;\r\n atomsColored[i].atomType = this.getType(nm);\r\n let cIdx = COLOR_SIZE * i;\r\n atomsColored[i].colorX = colors[cIdx++];\r\n atomsColored[i].colorY = colors[cIdx++];\r\n atomsColored[i].colorZ = colors[cIdx];\r\n atomsColored[i].srcAtom = atoms[i];\r\n }\r\n }\r\n\r\n getGeo() {\r\n return this.geoOut;\r\n }\r\n\r\n destroy() {\r\n this.atoms = null;\r\n\r\n this.hashLines = null;\r\n this.hashEntries = null;\r\n }\r\n\r\n /**\r\n * Calculates bounding box for array with spheres (atoms)\r\n *\r\n * @param {Object} atoms Atoms array\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n */\r\n getBoundingBox(atoms, vBoxMin, vBoxMax) {\r\n const bigNum = 10000000.0;\r\n\r\n vBoxMin.x = vBoxMin.y = vBoxMin.z = bigNum;\r\n vBoxMax.x = vBoxMax.y = vBoxMax.z = 0 - bigNum;\r\n\r\n const probeRadius2 = this.probeRadius * this.atomRadiusScale;\r\n let radMax = 0.0;\r\n for (let i = 0, num = atoms.length; i < num; i++) {\r\n const vCenter = atoms[i].coord;\r\n const rad = atoms[i].radius + probeRadius2;\r\n radMax = (rad > radMax) ? rad : radMax;\r\n if (vCenter.x - rad < vBoxMin.x) {\r\n vBoxMin.x = vCenter.x - rad;\r\n }\r\n if (vCenter.y - rad < vBoxMin.y) {\r\n vBoxMin.y = vCenter.y - rad;\r\n }\r\n if (vCenter.z - rad < vBoxMin.z) {\r\n vBoxMin.z = vCenter.z - rad;\r\n }\r\n if (vCenter.x + rad > vBoxMax.x) {\r\n vBoxMax.x = vCenter.x + rad;\r\n }\r\n if (vCenter.y + rad > vBoxMax.y) {\r\n vBoxMax.y = vCenter.y + rad;\r\n }\r\n if (vCenter.z + rad > vBoxMax.z) {\r\n vBoxMax.z = vCenter.z + rad;\r\n }\r\n }\r\n vBoxMin.x -= radMax;\r\n vBoxMin.y -= radMax;\r\n vBoxMin.z -= radMax;\r\n vBoxMax.x += radMax;\r\n vBoxMax.y += radMax;\r\n vBoxMax.z += radMax;\r\n }\r\n\r\n /**\r\n * Calculate (x,y,z) cordinate of the cell corner point\r\n *\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n * @param {number} x Cell integer x coordinate\r\n * @param {number} y Cell integer y coordinate\r\n * @param {number} z Cell integer z coordinate\r\n * @param {number} numPoints NUm points in cell on side\r\n * @param {Vector3} vOut Output vector\r\n */\r\n getCornerCoord(vBoxMin, vBoxMax, x, y, z, numPoints, vOut) {\r\n const invNP = 1.0 / (numPoints - 1.0);\r\n const tx = x * invNP;\r\n const ty = y * invNP;\r\n const tz = z * invNP;\r\n\r\n vOut.x = vBoxMin.x * (1.0 - tx) + vBoxMax.x * tx;\r\n vOut.y = vBoxMin.y * (1.0 - ty) + vBoxMax.y * ty;\r\n vOut.z = vBoxMin.z * (1.0 - tz) + vBoxMax.z * tz;\r\n }\r\n\r\n /**\r\n * Calculate point of intersection of sphere surface\r\n * and cell edge, given by [indexA, indexB] line\r\n *\r\n * @param {number} indexA Cell vertex index in [0..11]\r\n * @param {number} indexB Cell vertex index in [0..11]\r\n * @param {array} sign Sign array for all 8 vertices\r\n * @param {object} cube Cube\r\n * @param {number} indexPointValue for value placement\r\n * @param {Vector3} vOut Point of intersection\r\n */\r\n buildEdgePoint(indexA, indexB, sign, cube, indexPointValue, vOut) {\r\n if (sign[indexA] ^ sign[indexB]) {\r\n const cTwentyFour = 24;\r\n const t = (0 - cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexA])\r\n / (cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexB]\r\n - cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexA]);\r\n const xa = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 0];\r\n const ya = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 1];\r\n const za = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 2];\r\n const xb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 0];\r\n const yb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 1];\r\n const zb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 2];\r\n\r\n vOut.x = xa * (1.0 - t) + xb * t;\r\n vOut.y = ya * (1.0 - t) + yb * t;\r\n vOut.z = za * (1.0 - t) + zb * t;\r\n }\r\n }\r\n\r\n /**\r\n * Check if triangle is visible (vertices are close to atoms included in visibility set)\r\n *\r\n * @param {Vector3} v0 Vertex #0\r\n * @param {Vector3} v1 Vertex #1\r\n * @param {Vector3} v2 Vertex #2\r\n * @returns {boolean} true if triangle is visible\r\n */\r\n isTriangleVisible(v0, v1, v2) {\r\n const a0 = this.voxelWorld.getClosestAtom(v0);\r\n const a1 = this.voxelWorld.getClosestAtom(v1);\r\n const a2 = this.voxelWorld.getClosestAtom(v2);\r\n if (a0 === null || a1 === null || a2 === null\r\n || a0.srcAtom === null || a1.srcAtom === null || a2.srcAtom === null) {\r\n return false;\r\n }\r\n\r\n return this.visibilitySelector.includesAtom(a0.srcAtom)\r\n && this.visibilitySelector.includesAtom(a1.srcAtom)\r\n && this.visibilitySelector.includesAtom(a2.srcAtom);\r\n }\r\n\r\n /**\r\n * Add triangle to result geometry\r\n *\r\n * @param {Vector3} v0 Vertex #0\r\n * @param {Vector3} v1 Vertex #1\r\n * @param {Vector3} v2 Vertex #2\r\n * @returns {boolean} false if no more triangles can be added\r\n */\r\n addTriangle(v0, v1, v2) {\r\n if (this.visibilitySelector && !this.isTriangleVisible(v0, v1, v2)) {\r\n return true;\r\n }\r\n\r\n const geo = this.geoOut;\r\n\r\n if (geo._numTriangles >= this.maxNumTriangles) {\r\n return false;\r\n }\r\n\r\n // Add vertex with optimize\r\n const indInGeo0 = this.addVertexToGeo(geo, v0);\r\n const indInGeo1 = this.addVertexToGeo(geo, v1);\r\n const indInGeo2 = this.addVertexToGeo(geo, v2);\r\n if ((indInGeo0 | indInGeo1 | indInGeo2) < 0) {\r\n return false;\r\n }\r\n\r\n const itr = 3 * geo._numTriangles;\r\n geo._indices[itr + 0] = indInGeo0;\r\n geo._indices[itr + 1] = indInGeo1;\r\n geo._indices[itr + 2] = indInGeo2;\r\n geo._numTriangles++;\r\n return true;\r\n }\r\n\r\n /**\r\n * Build result geometry (triangle mesh) from marching cube cells\r\n *\r\n * @param {number} meshRes Marchnig cube vertex count on each side\r\n * @param {Vector3} vBoxMin Bounding box point min\r\n * @param {Vector3} vBoxMax Bounding box point max\r\n * @param {number} corners float values array for each cube point\r\n * @param {Vector3} vCellStep vector to next cube cell diagonal point\r\n * @param {object} cube IsoSurfaceMarchCube object\r\n * @returns {number} 0, if success (<0) is error\r\n */\r\n buildGeoFromCorners(meshRes, vBoxMin, vBoxMax, corners, vCellStep, cube) {\r\n const arrSize = 12;\r\n const cNumVerts = 8;\r\n const numCells = meshRes - 1;\r\n const side = meshRes;\r\n const side2 = meshRes * meshRes;\r\n\r\n const vaEdges = new Array(arrSize);\r\n for (let i = 0; i < arrSize; i++) {\r\n vaEdges[i] = new THREE.Vector3();\r\n }\r\n const sign = [];\r\n for (let i = 0; i < cNumVerts; i++) {\r\n sign[i] = 1.0;\r\n }\r\n const vCorner = new THREE.Vector3();\r\n let indCell = 0;\r\n let indY = 0;\r\n for (let y = 0; y < numCells; y++, indY += side2) {\r\n let indZ = 0;\r\n for (let z = 0; z < numCells; z++, indZ += side) {\r\n for (let x = 0; x < numCells; x++) {\r\n if (!cube.hasIntersection[indCell]) {\r\n // next cell\r\n indCell++;\r\n continue;\r\n }\r\n const bitsInside = cube.bitsInside[indCell];\r\n\r\n this.getCornerCoord(vBoxMin, vBoxMax, x, y, z, meshRes, vCorner);\r\n\r\n const indPointValues = indCell * (2 << (2 + 2));\r\n for (let i = 0, j = 0; i < cNumVerts; i++) {\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.x;\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.y;\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.z;\r\n }\r\n\r\n cube.pointsValuesLinear[indPointValues + 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 2 * 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 5 * 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3] += vCellStep.x;\r\n\r\n cube.pointsValuesLinear[indPointValues + 2 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 3 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 7 * 3 + 2] += vCellStep.z;\r\n\r\n cube.pointsValuesLinear[indPointValues + 4 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 5 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 7 * 3 + 1] += vCellStep.y;\r\n\r\n // now current cell has intersections (from -x to +x) on some cube edges\r\n const indValues = indPointValues + 24;\r\n for (let i = 0; i < cNumVerts; ++i) {\r\n sign[i] = (cube.pointsValuesLinear[indValues + i] < 0.0) ? 1 : 0;\r\n }\r\n\r\n this.buildEdgePoint(0, 1, sign, cube, indPointValues, vaEdges[0]);\r\n this.buildEdgePoint(1, 2, sign, cube, indPointValues, vaEdges[1]);\r\n this.buildEdgePoint(2, 3, sign, cube, indPointValues, vaEdges[2]);\r\n this.buildEdgePoint(3, 0, sign, cube, indPointValues, vaEdges[3]);\r\n\r\n this.buildEdgePoint(4, 5, sign, cube, indPointValues, vaEdges[4]);\r\n this.buildEdgePoint(5, 6, sign, cube, indPointValues, vaEdges[5]);\r\n this.buildEdgePoint(6, 7, sign, cube, indPointValues, vaEdges[6]);\r\n this.buildEdgePoint(7, 4, sign, cube, indPointValues, vaEdges[7]);\r\n\r\n this.buildEdgePoint(0, 4, sign, cube, indPointValues, vaEdges[8]);\r\n this.buildEdgePoint(1, 5, sign, cube, indPointValues, vaEdges[9]);\r\n this.buildEdgePoint(2, 6, sign, cube, indPointValues, vaEdges[10]);\r\n this.buildEdgePoint(3, 7, sign, cube, indPointValues, vaEdges[11]);\r\n\r\n const offs = bitsInside * (2 << (1 + 2));\r\n for (let numTri = 0, indTri = 0; numTri < (2 + 2 + 2); numTri++, indTri += 3) {\r\n // s_triIndicesMarchCube is external array, defined in mold_ind.js\r\n const i0 = cube.striIndicesMarchCube[offs + indTri];\r\n if (i0 < 0) {\r\n break;\r\n }\r\n const i1 = cube.striIndicesMarchCube[offs + indTri + 1];\r\n const i2 = cube.striIndicesMarchCube[offs + indTri + 2];\r\n\r\n if (!this.addTriangle(vaEdges[i0], vaEdges[i1], vaEdges[i2])) {\r\n return 0 - 2;\r\n }\r\n } // for numTri\r\n\r\n // next cell (cube)\r\n indCell++;\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n return 0;\r\n }\r\n\r\n /**\r\n * Returns number of cell with intersection with at least one sphere.\r\n * Using this number, we can estimate required number of vertices\r\n * and triangles to build result mesh.\r\n *\r\n * @param {number} side Number of points in cube voxels\r\n * @param {number} numCells Number of cells in cube voxels (per direction)\r\n * @param {array} corners Array of float values for cube corner points\r\n * @param {object} cube IsoSurfaceMarchCube object\r\n * @returns {number} numIntersectedCells\r\n */\r\n getNumIntersectedCells(side, numCells, corners, cube) {\r\n const side2 = side * side;\r\n const cNumVerts = 8;\r\n let numIntersectedCells = 0;\r\n\r\n let indCell = 0;\r\n let indY = 0;\r\n for (let y = 0; y < numCells; y++, indY += side2) {\r\n let indZ = 0;\r\n for (let z = 0; z < numCells; z++, indZ += side) {\r\n for (let x = 0; x < numCells; x++) {\r\n const cubeValuesIndex = indCell * (2 << (2 + 2)) + 24;\r\n const indCorner = x + indZ + indY;\r\n\r\n cube.pointsValuesLinear[cubeValuesIndex] = corners[indCorner];\r\n cube.pointsValuesLinear[cubeValuesIndex + 1] = corners[indCorner + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 2] = corners[indCorner + side + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 3] = corners[indCorner + side];\r\n cube.pointsValuesLinear[cubeValuesIndex + 4] = corners[side2 + indCorner];\r\n cube.pointsValuesLinear[cubeValuesIndex + 5] = corners[side2 + indCorner + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 6] = corners[side2 + indCorner + side + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 7] = corners[side2 + indCorner + side];\r\n\r\n // check read exception\r\n // assert(side2 + indCorner + side + 1 < side3);\r\n\r\n // get bit flags inside\r\n let bitsInside = 0;\r\n for (let i = 0; i < cNumVerts; ++i) {\r\n if (cube.pointsValuesLinear[cubeValuesIndex + i] < 0.0) {\r\n bitsInside |= (1 << i);\r\n }\r\n }\r\n\r\n if ((bitsInside === 0) || (bitsInside === ((1 << cNumVerts) - 1))) {\r\n cube.hasIntersection[indCell] = false;\r\n } else {\r\n cube.hasIntersection[indCell] = true;\r\n numIntersectedCells++;\r\n }\r\n cube.bitsInside[indCell] = bitsInside;\r\n // next cell\r\n indCell++;\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n return numIntersectedCells;\r\n }\r\n\r\n getType(letter) {\r\n /* eslint-disable no-magic-numbers */\r\n const atomT = [0, 0, 1, 1, 2, 6, 3, 6, 4, 6, 5, 6, 6, 0, 7, 3, 8, 2, 9, 6, 10, 6, 11, 6, 12, 6, 13, 6, 14, 6, 15, 4,\r\n 16, 5, 17, 6, 18, 6, 19, 6, 20, 6, 21, 6, 22, 6, 23, 6, 24, 6, 25, 6, 26, 6, 27, 6, 28, 6, 29, 6, 30, 6, 31, 6,\r\n 32, 6, 33, 6, 34, 6, 35, 6, 36, 6, 37, 6, 38, 6, 39, 6, 40, 6, 41, 6, 42, 6, 43, 6, 44, 6, 45, 6, 46, 6, 47, 6,\r\n 48, 6, 49, 6, 50, 6, 51, 6, 52, 6, 53, 6, 54, 6, 55, 6, 56, 6, 57, 6, 58, 6, 59, 6, 60, 6, 61, 6, 62, 6, 63, 6,\r\n 64, 6, 65, 6, 66, 6, 67, 6, 68, 6, 69, 6, 70, 6, 71, 6, 72, 6, 73, 6, 74, 6, 75, 6, 76, 6, 77, 6, 78, 6, 79, 6,\r\n 80, 6, 81, 6, 82, 6, 83, 6, 84, 6, 85, 6, 86, 6, 87, 6, 88, 6, 89, 6, 90, 6, 91, 6, 92, 6, 93, 6, 94, 6, 95, 6,\r\n 96, 6, 97, 6, 98, 6, 99, 6, 100, 6, 101, 6, 102, 6, 103, 6, 104, 6, 105, 6, 106, 6, 107, 6, 108, 6, 109, 6];\r\n /* eslint-enable no-magic-numbers */\r\n\r\n if (letter < 1 || letter > atomT.length / 2\r\n || (Object.keys(Element.ByAtomicNumber).length * 2) !== atomT.length) {\r\n throw new Error('atomT.length should be equal Element.ByAtomicNumber.length * 2');\r\n }\r\n return atomT[letter * 2];\r\n }\r\n\r\n /**\r\n * Calculate values for marching cube grid points\r\n * positive values are outside sphere, negative - is inside\r\n *\r\n * @param {array} corners array of float values\r\n * @param {number} side Number of point in cube in 1 dimennsion\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n * @param {array} atoms Array of input atoms\r\n * @param {number} probeRad radius for atom probing\r\n */\r\n calculateGridCorners(corners, side, vBoxMin, vBoxMax, atoms, probeRad) {\r\n const side2 = side * side;\r\n const side3 = side2 * side;\r\n const vCorner = new THREE.Vector3();\r\n const vDif = new THREE.Vector3();\r\n /* eslint-disable no-magic-numbers */\r\n const aLot = +1.0e12;\r\n /* eslint-enable no-magic-numbers */\r\n\r\n for (let i = 0; i < side3; i++) {\r\n corners[i] = aLot; // to large value\r\n }\r\n\r\n const xScale = (side - 1) / (vBoxMax.x - vBoxMin.x);\r\n const yScale = (side - 1) / (vBoxMax.y - vBoxMin.y);\r\n const zScale = (side - 1) / (vBoxMax.z - vBoxMin.z);\r\n\r\n for (let s = 0, numAtoms = atoms.length; s < numAtoms; s++) {\r\n const atom = atoms[s];\r\n const radius = atom.radius + probeRad;\r\n\r\n const fx = ((atom.coord.x - radius) - vBoxMin.x) * xScale;\r\n const fy = ((atom.coord.y - radius) - vBoxMin.y) * yScale;\r\n const fz = ((atom.coord.z - radius) - vBoxMin.z) * zScale;\r\n\r\n const indXMin = Math.floor(fx);\r\n const indYMin = Math.floor(fy);\r\n const indZMin = Math.floor(fz);\r\n\r\n let indXMax = Math.floor(((atom.coord.x + radius) - vBoxMin.x) * xScale);\r\n let indYMax = Math.floor(((atom.coord.y + radius) - vBoxMin.y) * yScale);\r\n let indZMax = Math.floor(((atom.coord.z + radius) - vBoxMin.z) * zScale);\r\n\r\n indXMax++;\r\n indYMax++;\r\n indZMax++;\r\n indXMax = (indXMax <= (side - 1)) ? indXMax : (side - 1);\r\n indYMax = (indYMax <= (side - 1)) ? indYMax : (side - 1);\r\n indZMax = (indZMax <= (side - 1)) ? indZMax : (side - 1);\r\n\r\n for (let y = indYMin; y <= indYMax; y++) {\r\n const indY = y * side2;\r\n for (let z = indZMin; z <= indZMax; z++) {\r\n const indZ = z * side;\r\n for (let x = indXMin; x <= indXMax; x++) {\r\n const ind = indY + indZ + x;\r\n this.getCornerCoord(vBoxMin, vBoxMax, x, y, z, side, vCorner);\r\n vDif.x = vCorner.x - atom.coord.x;\r\n vDif.y = vCorner.y - atom.coord.y;\r\n vDif.z = vCorner.z - atom.coord.z;\r\n const distToSphere = Math.sqrt(vDif.x * vDif.x + vDif.y * vDif.y + vDif.z * vDif.z);\r\n // val: < 0, if inside sphere\r\n // val: > 0, if outside sphere\r\n const val = distToSphere - radius;\r\n if (val < corners[ind]) {\r\n corners[ind] = val;\r\n }\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n } // for (s)\r\n }\r\n\r\n /**\r\n * Create memory pool for vertex hash management\r\n *\r\n * @param {number} maxNumVertices Maximum possible number of vertices (that will be build)\r\n * @param {number} maxNumTriangles Maximum possible number of triangles (that will be build)\r\n * @returns {number} 0, if success. (<0) is non memory\r\n */\r\n createVertexHash(maxNumVertices, maxNumTriangles) {\r\n this.hashLines = utils.allocateTyped(Int32Array, HASH_SIZE * 2);\r\n if (this.hashLines === null) {\r\n return 0 - 1;\r\n }\r\n for (let i = 0, j = 0; i < HASH_SIZE; i++) {\r\n this.hashLines[j++] = 0; // num vertices in this hash line\r\n this.hashLines[j++] = 0 - 1; // index of the first entry\r\n }\r\n\r\n this.maxNumVertices = maxNumVertices;\r\n this.maxNumTriangles = maxNumTriangles;\r\n\r\n this.numHashEtriesAllocated = maxNumVertices;\r\n this.hashEntries = utils.allocateTyped(Int32Array, 2 * this.numHashEtriesAllocated);\r\n if (this.hashEntries === null) {\r\n return 0 - 1;\r\n }\r\n for (let i = 0, j = 0; i < this.numHashEtriesAllocated; i++) {\r\n this.hashEntries[j++] = 0 - 1; // index of vertex\r\n this.hashEntries[j++] = 0 - 1; // next hash entry index\r\n }\r\n this.numHashEntryIndex = 0;\r\n return 0;\r\n }\r\n\r\n /**\r\n * Allocate and return new hash entry. Just check possible amount.\r\n *\r\n * @returns {number} index of hash entry, that can be used for geometry add vertex functionality\r\n */\r\n getNewHashEntry() {\r\n if (this.numHashEntryIndex < this.numHashEtriesAllocated) {\r\n const i = this.numHashEntryIndex;\r\n this.numHashEntryIndex++;\r\n return i;\r\n }\r\n return 0 - 1;\r\n }\r\n\r\n /**\r\n * Add vertex to geometry structure\r\n * using vertex hash table to quickly check, is this vertex already exist in geometry\r\n *\r\n * @param {object} geoOut Geometry to build\r\n * @param {Vector3} vAdd Vertex to add\r\n * @returns {number} index of added (or existing) vertex in geometry.\r\n */\r\n addVertexToGeo(geoOut, vAdd) {\r\n let entry;\r\n const oneHynberes = 0.01;\r\n const n815851 = 815851;\r\n const n37633 = 37633;\r\n const n2453543 = 2453543;\r\n const r106 = 1.0e-6;\r\n\r\n const hashResolution = this.marCubeResoultion << 2;\r\n const v = new THREE.Vector3();\r\n const ix = Math.floor(hashResolution * (vAdd.x - this.vBoxMin.x) / (this.vBoxMax.x + oneHynberes - this.vBoxMin.x));\r\n const iy = Math.floor(hashResolution * (vAdd.y - this.vBoxMin.y) / (this.vBoxMax.y + oneHynberes - this.vBoxMin.y));\r\n const iz = Math.floor(hashResolution * (vAdd.z - this.vBoxMin.z) / (this.vBoxMax.z + oneHynberes - this.vBoxMin.z));\r\n let iHash = ix * n815851 + iz * n37633 + iy * n2453543;\r\n iHash &= (HASH_SIZE - 1);\r\n const hLineIndex = iHash + iHash;\r\n\r\n // search vertex via hash\r\n // search in hash list\r\n if (this.vBoxMin !== null && this.vBoxMax !== null) {\r\n for (entry = this.hashLines[hLineIndex + 1]; entry >= 0; entry = this.hashEntries[entry * 2 + 1]) {\r\n const ind = this.hashEntries[entry * 2 + 0]; // vertex index\r\n v.copy(geoOut._vertices[ind]);\r\n v.x -= vAdd.x;\r\n v.y -= vAdd.y;\r\n v.z -= vAdd.z;\r\n const dot2 = v.x * v.x + v.y * v.y + v.z * v.z;\r\n if (dot2 < r106) {\r\n return ind;\r\n } // if (found)\r\n } // for (entry)\r\n } // search\r\n\r\n // add new vertex to geometry\r\n if (geoOut._numVertices >= this.maxNumVertices) {\r\n return 0 - 1;\r\n }\r\n\r\n const iVertAdd = geoOut._numVertices;\r\n geoOut._vertices[iVertAdd].copy(vAdd);\r\n\r\n // add to hash\r\n if (this.vBoxMin !== null && this.vBoxMax !== null) {\r\n entry = this.getNewHashEntry();\r\n if (entry < 0) {\r\n return 0 - 1;\r\n }\r\n const entryFirst = this.hashLines[hLineIndex + 1];\r\n this.hashLines[hLineIndex + 1] = entry;\r\n this.hashEntries[entry * 2 + 0] = iVertAdd;\r\n this.hashEntries[entry * 2 + 1] = entryFirst;\r\n\r\n this.hashLines[hLineIndex + 0]++; // num vertices in line ++\r\n }\r\n geoOut._numVertices++;\r\n return iVertAdd;\r\n }\r\n\r\n /**\r\n *\r\n * @param {number} side some placeholder description\r\n * @param {number} probeSphereRadius some placeholder description\r\n * @param {object} vBoxMin some placeholder description\r\n * @param {object} vBoxMax some placeholder description\r\n * @param {object} geoOut some placeholder description\r\n * @param {object} corners some placeholder description\r\n * @returns {number} always 0\r\n */\r\n modifyExcludedFromGeo(\r\n side,\r\n probeSphereRadius,\r\n vBoxMin,\r\n vBoxMax,\r\n geoOut,\r\n corners,\r\n ) {\r\n let ind;\r\n let distToSphere;\r\n let distToBorder;\r\n const r11 = 1.1;\r\n\r\n function innerBlockWorkAround() {\r\n if (distToBorder > 0.0) {\r\n // point is inside probe sphere\r\n if (corners[ind] < 0.0) {\r\n corners[ind] = distToBorder; // was inside surface, now is oustide ( > 0)\r\n }\r\n if (distToBorder > corners[ind]) {\r\n corners[ind] = distToBorder; // find positive maximum\r\n }\r\n } else if (distToBorder > corners[ind]) { // point is outside sphere\r\n corners[ind] = distToBorder; // find negative maximum\r\n }\r\n }\r\n\r\n const side2 = side * side;\r\n const xScale = (side - 1) / (vBoxMax.x - vBoxMin.x);\r\n const yScale = (side - 1) / (vBoxMax.y - vBoxMin.y);\r\n const zScale = (side - 1) / (vBoxMax.z - vBoxMin.z);\r\n\r\n const probeSpRad2 = (probeSphereRadius * 2) * (probeSphereRadius * 2);\r\n const sideInv = 1.0 / (side - 1);\r\n\r\n for (let i = 0; i < geoOut._numVertices; i++) {\r\n const vCenter = geoOut._vertices[i];\r\n\r\n const radEst = probeSphereRadius * r11;\r\n\r\n let indXMin = Math.floor(((vCenter.x - radEst) - vBoxMin.x) * xScale);\r\n let indYMin = Math.floor(((vCenter.y - radEst) - vBoxMin.y) * yScale);\r\n let indZMin = Math.floor(((vCenter.z - radEst) - vBoxMin.z) * zScale);\r\n\r\n let indXMax = Math.floor(((vCenter.x + radEst) - vBoxMin.x) * xScale);\r\n let indYMax = Math.floor(((vCenter.y + radEst) - vBoxMin.y) * yScale);\r\n let indZMax = Math.floor(((vCenter.z + radEst) - vBoxMin.z) * zScale);\r\n\r\n indXMin = (indXMin >= 0) ? indXMin : 0;\r\n indYMin = (indYMin >= 0) ? indYMin : 0;\r\n indZMin = (indZMin >= 0) ? indZMin : 0;\r\n indXMax = (indXMax <= (side - 1)) ? indXMax : (side - 1);\r\n indYMax = (indYMax <= (side - 1)) ? indYMax : (side - 1);\r\n indZMax = (indZMax <= (side - 1)) ? indZMax : (side - 1);\r\n\r\n for (let iy = indYMin; iy <= indYMax; iy++) {\r\n const indY = iy * side2;\r\n for (let iz = indZMin; iz <= indZMax; iz++) {\r\n const indZ = iz * side;\r\n for (let ix = indXMin; ix <= indXMax; ix++) {\r\n ind = indY + indZ + ix;\r\n // getCornerCoord(vBoxMin, vBoxMax, ix, iy, iz, side, &vCorner);\r\n let t = ix * sideInv;\r\n const xCorner = vBoxMin.x * (1.0 - t) + vBoxMax.x * t;\r\n t = iy * sideInv;\r\n const yCorner = vBoxMin.y * (1.0 - t) + vBoxMax.y * t;\r\n t = iz * sideInv;\r\n const zCorner = vBoxMin.z * (1.0 - t) + vBoxMax.z * t;\r\n\r\n const dx = xCorner - vCenter.x;\r\n const dy = yCorner - vCenter.y;\r\n const dz = zCorner - vCenter.z;\r\n const dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 < probeSpRad2) {\r\n distToSphere = Math.sqrt(dist2);\r\n distToBorder = -(distToSphere - probeSphereRadius);\r\n innerBlockWorkAround();\r\n } // if (dist from corner point to sphere center more 2 radiuses)\r\n } // for (ix)\r\n } // for (iz)\r\n } // for (iy)\r\n } // for (i) all geo vertices\r\n return 0;\r\n }\r\n\r\n _innerBuild() {\r\n let ok;\r\n const expandFactor = 1.2;\r\n\r\n // performance test\r\n // this.performanceTest();\r\n\r\n // Create temporary atoms (but colored)\r\n const packedArrays = {\r\n posRad: this._posRad,\r\n colors: this._colors,\r\n atoms: this._opts.atoms,\r\n };\r\n this.complex = this._opts.parent;\r\n this.atoms = packedArrays.atoms;\r\n this.meshResolution = this._opts.gridSpacing;\r\n this.atomRadiusScale = this._opts.radScale;\r\n this.colorMode = this._opts.colorMode;\r\n this.probeRadius = this._opts.probeRadius;\r\n this.useVertexColors = true;\r\n this.excludeProbe = this._opts.excludeProbe;\r\n this.visibilitySelector = this._opts.visibilitySelector;\r\n\r\n this.geoOut = null;\r\n\r\n this.hashLines = null;\r\n this.hashEntries = null;\r\n this.numHashEtriesAllocated = 0;\r\n this.numHashEntryIndex = 0;\r\n this.maxNumVertices = 0;\r\n this.maxNumTriangles = 0;\r\n\r\n const atomsColored = new Array(this.atoms.length);\r\n this.convertToAtomsColored(packedArrays, atomsColored);\r\n\r\n // find bbox for spheres scene\r\n const vBoxMin = this.vBoxMin = new THREE.Vector3();\r\n const vBoxMax = this.vBoxMax = new THREE.Vector3();\r\n this.getBoundingBox(atomsColored, vBoxMin, vBoxMax);\r\n\r\n const marCubeResoultion = this.marCubeResoultion = this.meshResolution * (2 + 2);\r\n\r\n // build grid corners for Marching cube algorithm\r\n const side = marCubeResoultion;\r\n const side2 = side * side;\r\n const side3 = side2 * side;\r\n const corners = utils.allocateTyped(Float32Array, side3);\r\n const rProbeRadius = this.probeRadius * this.atomRadiusScale;\r\n\r\n this.calculateGridCorners(corners, side, vBoxMin, vBoxMax, atomsColored, rProbeRadius);\r\n\r\n const numCells = marCubeResoultion - 1;\r\n const cube = new IsoSurfaceMarchCube();\r\n ok = cube.create(numCells);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n // copy corners to cells\r\n const vCellStep = new THREE.Vector3();\r\n vCellStep.x = (vBoxMax.x - vBoxMin.x) / numCells;\r\n vCellStep.y = (vBoxMax.y - vBoxMin.y) / numCells;\r\n vCellStep.z = (vBoxMax.z - vBoxMin.z) / numCells;\r\n\r\n let numIntersectedCellsEstim = this.getNumIntersectedCells(side, numCells, corners, cube);\r\n let maxNumVertices = Math.floor(numIntersectedCellsEstim * expandFactor);\r\n let maxNumTriangles = Math.floor(numIntersectedCellsEstim * expandFactor * 2);\r\n\r\n this.geoOut = new IsoSurfaceGeo(maxNumVertices, maxNumTriangles, this.useVertexColors);\r\n\r\n ok = this.createVertexHash(maxNumVertices, maxNumTriangles);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n\r\n // build voxel world (used to check triangle-to-atom tie and to calculate normals and colors)\r\n let probeRadForNormalsColors = rProbeRadius;\r\n if (this.excludeProbe) {\r\n probeRadForNormalsColors = 0.01;\r\n }\r\n this.voxelWorld = new IsosurfaceBuildNormals(\r\n atomsColored.length,\r\n atomsColored,\r\n vBoxMin,\r\n vBoxMax,\r\n probeRadForNormalsColors,\r\n );\r\n this.voxelWorld.createVoxels();\r\n\r\n ok = this.buildGeoFromCorners(marCubeResoultion, vBoxMin, vBoxMax, corners, vCellStep, cube);\r\n if (this.excludeProbe) {\r\n // using 3d mesh (geoOut) as a surface points\r\n // move probe sphere and try to minimuze corners values\r\n this.modifyExcludedFromGeo(side, rProbeRadius, vBoxMin, vBoxMax, this.geoOut, corners);\r\n\r\n // delete old builded geo\r\n this.geoOut._vertices = null;\r\n this.geoOut._colors = null;\r\n this.geoOut._indices = null;\r\n this.geoOut._normals = null;\r\n this.geoOut._numVertices = 0;\r\n this.geoOut._numTriangles = 0;\r\n this.geoOut = null;\r\n\r\n // estimage geo vertices budget again\r\n numIntersectedCellsEstim = this.getNumIntersectedCells(side, numCells, corners, cube);\r\n maxNumVertices = Math.floor(numIntersectedCellsEstim * expandFactor);\r\n maxNumTriangles = Math.floor(numIntersectedCellsEstim * expandFactor * 2);\r\n\r\n // creates empty new geometry\r\n this.geoOut = new IsoSurfaceGeo(maxNumVertices, maxNumTriangles, this.useVertexColors);\r\n ok = this.createVertexHash(maxNumVertices, maxNumTriangles);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n // build vertices and triangles from corners values\r\n ok = this.buildGeoFromCorners(side, vBoxMin, vBoxMax, corners, vCellStep, cube);\r\n }\r\n\r\n // build vertex normals\r\n this.voxelWorld.buildNormals(this.geoOut._vertices.length, this.geoOut._vertices, this.geoOut._normals);\r\n // More value : more smooth color mixing\r\n // value about 0.7: very rough colors borders\r\n let radiusColorSmoothness = 6.5;\r\n if (this.excludeProbe) {\r\n radiusColorSmoothness -= 1.5;\r\n }\r\n if (this.useVertexColors) {\r\n this.voxelWorld.buildColors(\r\n this.geoOut._vertices.length,\r\n this.geoOut._vertices,\r\n this.geoOut._colors,\r\n radiusColorSmoothness,\r\n );\r\n }\r\n this.voxelWorld.destroyVoxels();\r\n this.voxelWorld = null;\r\n\r\n // remove objects\r\n cube.destroy();\r\n\r\n return ok;\r\n }\r\n}\r\n\r\n// All code below must be erased from every device and each developer's memory\r\n\r\nexport default SSIsosurfaceGeometry;\r\n","import * as THREE from 'three';\r\nimport EventDispatcher from '../../utils/EventDispatcher';\r\n\r\nfunction createLabel(fieldTxt, className) {\r\n const text = document.createElement('div');\r\n text.className = className;\r\n\r\n if (typeof fieldTxt === 'string') {\r\n const spanText = document.createElement('span');\r\n spanText.style.fontSize = '150%';\r\n const strings = fieldTxt.split('\\n');\r\n\r\n for (let i = 0, n = strings.length; i < n; ++i) {\r\n const spanNodeP = document.createElement('span');\r\n const spanNodeText = document.createTextNode(strings[i]);\r\n spanNodeP.appendChild(spanNodeText);\r\n spanText.appendChild(spanNodeP);\r\n if (i < n - 1) {\r\n spanText.appendChild(document.createElement('br'));\r\n }\r\n }\r\n\r\n text.appendChild(spanText);\r\n } else {\r\n text.appendChild(fieldTxt);\r\n }\r\n text.worldPos = new THREE.Vector3();\r\n return text;\r\n}\r\nclass LabelsGeometry extends EventDispatcher {\r\n constructor(instanceCount, opts) {\r\n super();\r\n this._opts = opts;\r\n this.items = [];\r\n this.needsUpdate = false;\r\n\r\n let xTranslation = -50;\r\n let yTranslation = -50;\r\n switch (opts.horizontalAlign) {\r\n case 'left':\r\n xTranslation = 0;\r\n break;\r\n case 'right':\r\n xTranslation = -100;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n switch (opts.verticalAlign) {\r\n case 'top':\r\n yTranslation = -100;\r\n break;\r\n case 'bottom':\r\n yTranslation = 0;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n const deltaPos = new THREE.Vector3(opts.dx || 0, opts.dy || 0, opts.dz || 0);\r\n this.userData = {\r\n translation: `translate(${xTranslation}%, ${yTranslation}%)`,\r\n offset: deltaPos,\r\n };\r\n }\r\n\r\n setItem(itemIdx, itemPos, fieldTxt) {\r\n const opts = this._opts;\r\n const text = this.items[itemIdx] || createLabel(fieldTxt, 'label');\r\n\r\n text.worldPos.copy(itemPos);\r\n text.style.textAlign = opts.horizontalAlign;\r\n text.style.verticalAlign = opts.verticalAlign;\r\n this.items[itemIdx] = text;\r\n }\r\n\r\n setColor(itemIdx, fColor, bColor) {\r\n const text = this.items[itemIdx];\r\n text.opts = {\r\n color: fColor,\r\n background: bColor,\r\n };\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.needsUpdate = true;\r\n this.dispatchEvent({ type: 'update' });\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n }\r\n\r\n // unimplemented functions\r\n raycast() {\r\n }\r\n\r\n setOpacity() {\r\n\r\n }\r\n\r\n getSubset() {\r\n return [];\r\n }\r\n}\r\n\r\nexport default LabelsGeometry;\r\n","import InstancedSpheresGeometry from './InstancedSpheresGeometry';\r\nimport SimpleSpheresGeometry from './SimpleSpheresGeometry';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\nimport Instanced2CCylindersGeometry from './Instanced2CCylindersGeometry';\r\nimport ExtrudedObjectsGeometry from './ExtrudedObjectsGeometry';\r\nimport ChunkedLinesGeometry from './ChunkedLinesGeometry';\r\nimport TwoColorLinesGeometry from './TwoColorLinesGeometry';\r\nimport CrossGeometry from './CrossGeometry';\r\nimport QuickSurfGeometry from './QuickSurfGeometry';\r\nimport ContactSurfaceGeometry from './ContactSurfaceGeometry';\r\nimport SSIsosurfaceGeometry from './SSIsosurfaceGeometry';\r\nimport LabelsGeometry from './LabelsGeometry';\r\n\r\nexport default {\r\n InstancedSpheresGeometry,\r\n SimpleSpheresGeometry,\r\n Simple2CCylindersGeometry,\r\n Instanced2CCylindersGeometry,\r\n ExtrudedObjectsGeometry,\r\n ChunkedLinesGeometry,\r\n TwoColorLinesGeometry,\r\n CrossGeometry,\r\n QuickSurfGeometry,\r\n ContactSurfaceGeometry,\r\n SSIsosurfaceGeometry,\r\n LabelsGeometry,\r\n};\r\n","export default {\r\n\r\n precision: 'mediump',\r\n\r\n /**\r\n *\r\n * @param {THREE.WebGLRenderer} renderer\r\n */\r\n init(renderer) {\r\n this.precision = renderer.capabilities.getMaxPrecision('highp');\r\n },\r\n};\r\n","import * as THREE from 'three';\r\n\r\nconst noiseWidth = 4;\r\nconst noiseHeight = 4;\r\nconst _noiseData = new Uint8Array([\r\n 24, 52, 0, 255, 254, 145, 0, 255, 122, 0, 0, 255, 7, 170, 0, 255,\r\n 34, 214, 0, 255, 173, 8, 0, 255, 86, 249, 0, 255, 160, 4, 0, 255,\r\n 226, 46, 0, 255, 224, 211, 0, 255, 3, 157, 0, 255, 174, 247, 0, 255,\r\n 12, 182, 0, 255, 220, 216, 0, 255, 1, 109, 0, 255, 253, 154, 0, 255,\r\n]);\r\nconst _noiseWrapS = THREE.RepeatWrapping;\r\nconst _noiseWrapT = THREE.RepeatWrapping;\r\nconst _noiseMinFilter = THREE.NearestFilter;\r\nconst _noiseMagFilter = THREE.NearestFilter;\r\nconst _noiseMapping = THREE.UVMapping;\r\nconst noiseTexture = new THREE.DataTexture(\r\n _noiseData,\r\n noiseWidth,\r\n noiseHeight,\r\n THREE.RGBAFormat,\r\n THREE.UnsignedByteType,\r\n _noiseMapping,\r\n _noiseWrapS,\r\n _noiseWrapT,\r\n _noiseMagFilter,\r\n _noiseMinFilter,\r\n 1,\r\n);\r\nnoiseTexture.needsUpdate = true;\r\n\r\nexport default {\r\n noiseWidth,\r\n noiseHeight,\r\n noiseTexture,\r\n};\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './Uber.vert';\r\nimport fragmentShader from './Uber.frag';\r\nimport capabilities from '../capabilities';\r\nimport noise from '../noiseTexture';\r\n\r\n// Length of _samplesKernel is used in Uber.frag\r\n// If you want to change length of _samplesKernel, please, remember change it in Uber.frag too.\r\n// You can easy find places for replace using word:_samplesKernel\r\nconst _samplesKernel = [\r\n new THREE.Vector2(-0.541978, 0.840393),\r\n new THREE.Vector2(0.125533, -0.992089),\r\n new THREE.Vector2(0.374329, 0.927296),\r\n new THREE.Vector2(-0.105475, 0.994422),\r\n];\r\n\r\nconst defaultUniforms = THREE.UniformsUtils.merge([\r\n\r\n THREE.UniformsLib.fog,\r\n THREE.UniformsLib.lights,\r\n\r\n {\r\n // are updated automatically by three.js (see THREE.ShaderLib.common)\r\n diffuse: { value: new THREE.Color(0xeeeeee) },\r\n opacity: { value: 1.0 },\r\n\r\n specular: { type: 'c', value: new THREE.Color(0x111111) },\r\n shininess: { type: 'f', value: 30 },\r\n fixedColor: { type: 'c', value: new THREE.Color(0xffffff) },\r\n zOffset: { type: 'f', value: 0.0 },\r\n zClipValue: { type: 'f', value: 0.0 },\r\n clipPlaneValue: { type: 'f', value: 0.0 },\r\n nearPlaneValue: { type: 'f', value: -0.5 },\r\n invModelViewMatrix: { type: '4fv', value: new THREE.Matrix4() },\r\n world2colorMatrix: { type: '4fv', value: new THREE.Matrix4() },\r\n dashedLineSize: { type: 'f', value: 0.1 },\r\n dashedLinePeriod: { type: 'f', value: 0.2 },\r\n projMatrixInv: { type: '4fv', value: new THREE.Matrix4() },\r\n viewport: { type: 'v2', value: new THREE.Vector2() },\r\n lineWidth: { type: 'f', value: 2.0 },\r\n // default value must be the same as settings\r\n fogAlpha: { type: 'f', value: 1.0 },\r\n samplesKernel: { type: 'v2v', value: null },\r\n noiseTex: { type: 't', value: null },\r\n noiseTexelSize: { type: 'v2', value: null },\r\n srcTexelSize: { type: 'v2', value: null },\r\n },\r\n\r\n]);\r\n\r\nconst uberOptionNames = [\r\n 'shininess',\r\n 'opacity',\r\n 'zOffset',\r\n 'diffuse',\r\n 'specular',\r\n 'fixedColor',\r\n 'zClipCoef',\r\n 'zClipValue',\r\n 'clipPlaneValue',\r\n 'world2colorMatrix',\r\n 'dashedLineSize',\r\n 'dashedLinePeriod',\r\n 'projMatrixInv',\r\n 'viewport',\r\n 'lineWidth',\r\n 'fogAlpha',\r\n 'samplesKernel',\r\n 'noiseTex',\r\n 'noiseTexelSize',\r\n 'srcTexelSize',\r\n];\r\n\r\n// properties that convert to uniforms\r\nconst uberOptions = {\r\n diffuse: new THREE.Color(0xffffff), // used in phong lighting\r\n specular: new THREE.Color(0x111111), // used in phong lighting\r\n shininess: 30, // used in phong lighting\r\n opacity: 1, // set mesh opacity\r\n fixedColor: new THREE.Color(0xffffff), // color to override (see OVERRIDE_COLOR)\r\n zOffset: 0.0, // used fo zsprites (see SPHERE_SPRITE CYLINDER_SPRITE)\r\n zClipCoef: 2.0, // use for Surfs clipping (mesh param, isn't used in shader) FIXME move to representation param\r\n zClipValue: 0.0, // value to clip Surfs in shader (see ZCLIP)\r\n clipPlaneValue: 0.0, // value to clip scene globally (see CLIPPLANE)\r\n world2colorMatrix: new THREE.Matrix4(),\r\n dashedLineSize: 0.1,\r\n dashedLinePeriod: 0.3,\r\n projMatrixInv: new THREE.Matrix4(),\r\n viewport: new THREE.Vector2(800, 600),\r\n lineWidth: 2.0,\r\n fogAlpha: 1.0,\r\n samplesKernel: _samplesKernel,\r\n noiseTex: noise.noiseTexture,\r\n noiseTexelSize: new THREE.Vector2(1.0 / noise.noiseWidth, 1.0 / noise.noiseHeight),\r\n srcTexelSize: new THREE.Vector2(1.0 / 800.0, 1.0 / 600.0),\r\n copy(source) {\r\n this.diffuse.copy(source.diffuse);\r\n this.specular.copy(source.specular);\r\n this.shininess = source.shininess;\r\n this.opacity = source.opacity;\r\n this.fixedColor.copy(source.fixedColor);\r\n this.zOffset = source.zOffset;\r\n this.zClipCoef = source.zClipCoef;\r\n this.zClipValue = source.zClipValue;\r\n this.clipPlaneValue = source.clipPlaneValue;\r\n this.world2colorMatrix.copy(source.world2colorMatrix);\r\n this.dashedLineSize = source.dashedLineSize;\r\n this.dashedLinePeriod = source.dashedLinePeriod;\r\n this.projMatrixInv = source.projMatrixInv;\r\n this.viewport = source.viewport;\r\n this.lineWidth = source.lineWidth; // used for thick lines only\r\n this.toonShading = source.toonShading;\r\n this.fogAlpha = source.fogAlpha;\r\n this.samplesKernel = source.samplesKernel;\r\n this.noiseTex = source.noiseTex;\r\n this.noiseTexelSize = source.noiseTexelSize;\r\n this.srcTexelSize = source.srcTexelSize;\r\n },\r\n};\r\n\r\nclass UberMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // add fog\r\n this.fog = true;\r\n // used for instanced geometry\r\n this.instancedPos = false;\r\n this.instancedMatrix = false;\r\n // atoms and links color\r\n this.attrColor = false;\r\n // second link color for cylinders\r\n this.attrColor2 = false;\r\n //\r\n this.attrAlphaColor = false;\r\n // overrides color for all vertices (used in selection)\r\n this.overrideColor = false;\r\n // zsrpites\r\n this.sphereSprite = false;\r\n this.cylinderSprite = false;\r\n // clip Surfs individually\r\n this.zClip = false;\r\n // clip scene with global clip plane\r\n this.clipPlane = false;\r\n // enable fake (chess-like) opacity\r\n this.fakeOpacity = false;\r\n // render only depth, don't take care about the pixel color (used for transparency depth prepass)\r\n this.prepassTransparancy = false;\r\n // used to render pixel positions\r\n this.colorFromPos = false;\r\n // used to render shadowmap\r\n this.shadowmap = false;\r\n // used to describe shadowmap type\r\n this.shadowmapType = 'random';\r\n // used to render pixel view deph\r\n this.colorFromDepth = false;\r\n // mark that rendering is for orthographic camera\r\n this.orthoCam = false;\r\n // used to render dashed line\r\n this.dashedLine = false;\r\n // mark as transparent\r\n this.transparent = true;\r\n // mark as thick lines\r\n this.thickLine = false;\r\n // makes fog begin transparency (required for transparent background)\r\n this.fogTransparent = false;\r\n // used to render surface normals to G buffer for ssao effect\r\n this.normalsToGBuffer = false;\r\n // used for toon material\r\n this.toonShading = false;\r\n\r\n // uber options of \"root\" materials are inherited from single uber-options object that resides in prototype\r\n this.uberOptions = Object.create(UberMaterial.prototype.uberOptions);\r\n\r\n // set default values\r\n super.setValues({\r\n uniforms: THREE.UniformsUtils.clone(defaultUniforms),\r\n vertexShader: this.precisionString() + vertexShader,\r\n fragmentShader: this.precisionString() + fragmentShader,\r\n lights: true,\r\n fog: true,\r\n side: THREE.DoubleSide,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n precisionString() {\r\n const { precision } = capabilities;\r\n const str = `precision ${precision} float;\\n`\r\n + `precision ${precision} int;\\n\\n`;\r\n return str;\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n\r\n this.fragmentShader = source.fragmentShader;\r\n this.vertexShader = source.vertexShader;\r\n\r\n this.uniforms = THREE.UniformsUtils.clone(source.uniforms);\r\n this.defines = { ...source.defines };\r\n this.extensions = source.extensions;\r\n\r\n this.fog = source.fog;\r\n this.instancedPos = source.instancedPos;\r\n this.instancedMatrix = source.instancedMatrix;\r\n this.attrColor = source.attrColor;\r\n this.attrColor2 = source.attrColor2;\r\n this.attrAlphaColor = source.attrAlphaColor;\r\n this.overrideColor = source.overrideColor;\r\n this.sphereSprite = source.sphereSprite;\r\n this.cylinderSprite = source.cylinderSprite;\r\n this.zClip = source.zClip;\r\n this.clipPlane = source.clipPlane;\r\n this.fakeOpacity = source.fakeOpacity;\r\n this.colorFromPos = source.colorFromPos;\r\n this.shadowmap = source.shadowmap;\r\n this.shadowmapType = source.shadowmapType;\r\n this.colorFromDepth = source.colorFromDepth;\r\n this.orthoCam = source.orthoCam;\r\n this.prepassTransparancy = source.prepassTransparancy;\r\n this.dashedLine = source.dashedLine;\r\n this.thickLine = source.thickLine;\r\n this.fogTransparent = source.fogTransparent;\r\n this.normalsToGBuffer = source.normalsToGBuffer;\r\n this.toonShading = source.toonShading;\r\n\r\n this.uberOptions.copy(source.uberOptions);\r\n\r\n return this;\r\n }\r\n\r\n // create copy of this material\r\n // its options are prototyped after this material's options\r\n createInstance() {\r\n const inst = new UberMaterial();\r\n inst.copy(this);\r\n inst.uberOptions = Object.create(this.uberOptions);\r\n return inst;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n const extensions = {};\r\n\r\n if (this.fog) {\r\n defines.USE_FOG = 1;\r\n }\r\n if (this.instancedPos) {\r\n defines.INSTANCED_POS = 1;\r\n }\r\n if (this.instancedMatrix) {\r\n defines.INSTANCED_MATRIX = 1;\r\n }\r\n if (this.attrColor) {\r\n defines.ATTR_COLOR = 1;\r\n }\r\n if (this.attrColor2) {\r\n defines.ATTR_COLOR2 = 1;\r\n }\r\n if (this.attrAlphaColor) {\r\n defines.ATTR_ALPHA_COLOR = 1;\r\n }\r\n if (this.overrideColor) {\r\n defines.OVERRIDE_COLOR = 1;\r\n }\r\n if (this.sphereSprite) {\r\n defines.SPHERE_SPRITE = 1;\r\n extensions.fragDepth = true;\r\n }\r\n if (this.cylinderSprite) {\r\n defines.CYLINDER_SPRITE = 1;\r\n extensions.fragDepth = true;\r\n }\r\n if (this.zClip) {\r\n defines.ZCLIP = 1;\r\n }\r\n if (this.clipPlane) {\r\n defines.CLIP_PLANE = 1;\r\n }\r\n if (this.fakeOpacity) {\r\n defines.FAKE_OPACITY = 1;\r\n }\r\n if (this.lights) {\r\n defines.USE_LIGHTS = 1;\r\n }\r\n if (this.colorFromPos) {\r\n defines.COLOR_FROM_POS = 1;\r\n }\r\n if (this.shadowmap) {\r\n defines.SHADOWMAP = 1;\r\n if (this.shadowmapType === 'pcf') {\r\n defines.SHADOWMAP_PCF_SHARP = 1;\r\n } else if (this.shadowmapType === 'random') {\r\n defines.SHADOWMAP_PCF_RAND = 1;\r\n } else {\r\n defines.SHADOWMAP_BASIC = 1;\r\n }\r\n }\r\n if (this.colorFromDepth) {\r\n defines.COLOR_FROM_DEPTH = 1;\r\n }\r\n if (this.orthoCam) {\r\n defines.ORTHOGRAPHIC_CAMERA = 1;\r\n }\r\n if (this.prepassTransparancy) {\r\n defines.PREPASS_TRANSP = 1;\r\n }\r\n if (this.dashedLine) {\r\n defines.DASHED_LINE = 1;\r\n }\r\n if (this.thickLine) {\r\n defines.THICK_LINE = 1;\r\n }\r\n if (this.fogTransparent) {\r\n defines.FOG_TRANSPARENT = 1;\r\n }\r\n if (this.normalsToGBuffer) {\r\n extensions.drawBuffers = true;\r\n defines.NORMALS_TO_G_BUFFER = 1;\r\n }\r\n if (this.toonShading) {\r\n defines.TOON_SHADING = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n this.extensions = extensions;\r\n }\r\n\r\n setUberOptions(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n for (const key in values) {\r\n if (!values.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n\r\n if (this.uberOptions[key] instanceof THREE.Color) {\r\n this.uberOptions[key] = values[key].clone();\r\n } else {\r\n this.uberOptions[key] = values[key];\r\n }\r\n }\r\n }\r\n\r\n clone(shallow) {\r\n if (!shallow) {\r\n return super.clone();\r\n }\r\n return this.createInstance();\r\n }\r\n\r\n updateUniforms() {\r\n const self = this;\r\n\r\n uberOptionNames.forEach((p) => {\r\n if (self.uniforms.hasOwnProperty(p)) {\r\n if (self.uberOptions[p] instanceof THREE.Color\r\n || self.uberOptions[p] instanceof THREE.Matrix4) {\r\n self.uniforms[p].value = self.uberOptions[p].clone();\r\n } else {\r\n self.uniforms[p].value = self.uberOptions[p];\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\nUberMaterial.prototype.uberOptions = uberOptions;\r\n\r\nexport default UberMaterial;\r\n","import UberMaterial from '../shaders/UberMaterial';\r\n\r\nexport default function (SuperClass) {\r\n class NewObjectType extends SuperClass {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.onBeforeRender = NewObjectType.prototype.onBeforeRender;\r\n }\r\n\r\n onBeforeRender(renderer, scene, camera, geometry, material, group) {\r\n this._onBeforeRender(renderer, scene, camera, geometry, material, group);\r\n this._update();\r\n }\r\n\r\n _onBeforeRender() {\r\n }\r\n\r\n _update() {\r\n const { material } = this;\r\n if (!material) {\r\n return;\r\n }\r\n\r\n if (material instanceof UberMaterial) {\r\n material.updateUniforms();\r\n }\r\n }\r\n }\r\n\r\n return NewObjectType;\r\n}\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass ZSpriteMesh extends Mesh {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n\r\n _onBeforeRender(renderer, scene, camera, _geometry, _material, _group) {\r\n Mesh.prototype._onBeforeRender.call(this, renderer, scene, camera);\r\n const { material } = this;\r\n if (!material) {\r\n return;\r\n }\r\n\r\n if (material.uniforms.invModelViewMatrix) {\r\n // NOTE: update of modelViewMatrix inside threejs is done after onBeforeRender call,\r\n // so we have to do it manually in that place\r\n this.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, this.matrixWorld);\r\n // get inverse matrix\r\n material.uniforms.invModelViewMatrix.value.copy(this.modelViewMatrix).invert();\r\n material.uniforms.nearPlaneValue.value = camera.near;\r\n material.uniformsNeedUpdate = true;\r\n }\r\n }\r\n}\r\n\r\nexport default ZSpriteMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass ZClippedMesh extends Mesh {\r\n constructor(geometry, material) {\r\n super(geometry, material);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n\r\n static _mvLength = new THREE.Vector3();\r\n\r\n static _center = new THREE.Vector3();\r\n\r\n static _modelView = new THREE.Matrix4();\r\n\r\n _onBeforeRender(renderer, scene, camera) {\r\n Mesh.prototype._onBeforeRender.call(this, renderer, scene, camera);\r\n\r\n const geo = this.geometry;\r\n const { material } = this;\r\n if (!geo.zClip || !material.uberOptions) {\r\n return;\r\n }\r\n\r\n const zClipCoef = 0.5;\r\n\r\n const modelView = ZClippedMesh._modelView;\r\n const mvLength = ZClippedMesh._mvLength;\r\n const center = ZClippedMesh._center;\r\n\r\n modelView.multiplyMatrices(this.matrixWorld, camera.matrixWorldInverse);\r\n const s = mvLength.setFromMatrixColumn(modelView, 0).length();\r\n center.copy(geo.boundingSphere.center);\r\n\r\n this.localToWorld(center);\r\n material.uberOptions.zClipValue = camera.position.z - center.z\r\n - s * (zClipCoef * geo.boundingSphere.radius);\r\n }\r\n}\r\n\r\nexport default ZClippedMesh;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport CSS2DObject from '../CSS2DObject';\r\nimport utils from '../../utils';\r\n\r\nclass TextMesh extends THREE.Group {\r\n constructor(geometry, _material) {\r\n super();\r\n this.geometry = geometry;\r\n\r\n const self = this;\r\n self.initialized = false;\r\n this.geometry.addEventListener('update', () => {\r\n self.update();\r\n });\r\n }\r\n\r\n init() {\r\n const { children } = this;\r\n for (let i = children.length - 1; i >= 0; --i) {\r\n this.remove(children[i]);\r\n }\r\n\r\n const { items, userData } = this.geometry;\r\n for (let i = 0, n = items.length; i < n; ++i) {\r\n const srcItem = items[i];\r\n if (!srcItem) {\r\n continue;\r\n }\r\n const item = utils.shallowCloneNode(srcItem);\r\n const label = new CSS2DObject(item);\r\n label.userData = _.clone(userData);\r\n const el = label.getElement();\r\n el.style.visibility = 'visible';\r\n label.source = srcItem;\r\n this.add(label);\r\n }\r\n this.initialized = true;\r\n }\r\n\r\n update() {\r\n const geo = this.geometry;\r\n if (!geo.needsUpdate) {\r\n return;\r\n }\r\n const { children } = this;\r\n if (!this.initialized) {\r\n this.init();\r\n }\r\n\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n const item = child.source;\r\n child.position.copy(item.worldPos);\r\n child.userData.color = item.opts.color;\r\n child.userData.background = item.opts.background;\r\n }\r\n }\r\n}\r\n\r\nexport default TextMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass SimpleMesh extends Mesh {\r\n constructor(geometry, material) {\r\n super(geometry, material);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n}\r\n\r\nexport default SimpleMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\nconst _viewport = new THREE.Vector2();\r\n\r\nclass ThickLineMesh extends Mesh {\r\n _onBeforeRender(renderer, scene, camera, _geometry, _material, _group) {\r\n const { material } = this;\r\n if (!material.uberOptions) {\r\n return;\r\n }\r\n\r\n material.uberOptions.projMatrixInv.copy(camera.projectionMatrix).invert();\r\n renderer.getSize(_viewport);\r\n material.uberOptions.viewport.set(_viewport.width, _viewport.height);\r\n }\r\n}\r\n\r\nexport default ThickLineMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass InstancedMesh extends Mesh {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n}\r\n\r\nexport default InstancedMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\nimport ZSpriteMesh from './ZSpriteMesh';\r\nimport ZClippedMesh from './ZClippedMesh';\r\nimport TextMesh from './TextMesh';\r\nimport SimpleMesh from './SimpleMesh';\r\nimport ThickLineMesh from './ThickLineMesh';\r\nimport InstancedMesh from './InstancedMesh';\r\n\r\nexport default {\r\n ZClipped: ZClippedMesh,\r\n ZSprite: ZSpriteMesh,\r\n Text: TextMesh,\r\n Line: UberObject(THREE.Line),\r\n LineSegments: UberObject(THREE.LineSegments),\r\n Mesh: SimpleMesh,\r\n ThickLineMesh,\r\n Instanced: InstancedMesh,\r\n};\r\n","import geometries from '../geometries/geometries';\r\nimport meshes from './meshes';\r\nimport ThickLinesGeometry from '../geometries/ThickLinesGeometry';\r\n\r\nfunction setMatParams(params, uniforms) {\r\n return function (material) {\r\n material.setValues(params);\r\n material.setUberOptions(uniforms);\r\n };\r\n}\r\n\r\nfunction _createInstancedCylinders(useZSprites, openEnded) {\r\n function Geometry(a, b) {\r\n return new geometries.Instanced2CCylindersGeometry(a, b, useZSprites, openEnded);\r\n }\r\n return {\r\n Geometry,\r\n Object: useZSprites ? meshes.ZSprite : meshes.Instanced,\r\n initMaterial: setMatParams({\r\n instancedMatrix: true,\r\n attrColor: true,\r\n attrColor2: true,\r\n attrAlphaColor: true,\r\n cylinderSprite: useZSprites,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createLineSegmentsGeoTriplet(geo, renderParams) {\r\n const thickLines = geo.prototype instanceof ThickLinesGeometry;\r\n const lineWidth = renderParams.lineWidth || 0;\r\n return {\r\n Geometry: geo,\r\n Object: thickLines ? meshes.ThickLineMesh : meshes.LineSegments,\r\n initMaterial: setMatParams({\r\n lights: false,\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n thickLine: thickLines,\r\n }, {\r\n lineWidth,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createSimpleGeoTriplet(geoClass) {\r\n return {\r\n Geometry: geoClass,\r\n Object: meshes.Mesh,\r\n initMaterial: setMatParams({\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createIsoSurfaceGeoTriplet(geoClass, caps, settings, renderParams) {\r\n const surfaceOpts = {\r\n wireframe: !!renderParams.wireframe,\r\n fakeOpacity: settings.now.isoSurfaceFakeOpacity,\r\n zClip: renderParams.zClip,\r\n };\r\n return {\r\n Geometry: geoClass,\r\n Object: meshes.ZClipped,\r\n initMaterial: setMatParams({\r\n attrColor: true,\r\n attrAlphaColor: false,\r\n wireframe: surfaceOpts.wireframe,\r\n fakeOpacity: surfaceOpts.fakeOpacity,\r\n zClip: surfaceOpts.zClip,\r\n }),\r\n };\r\n}\r\n\r\nclass MeshCreator {\r\n static createSpheres(caps, settings) {\r\n const useZSprites = settings.now.zSprites;\r\n function Geometry(a, b) {\r\n return new geometries.InstancedSpheresGeometry(a, b, useZSprites);\r\n }\r\n return {\r\n Geometry,\r\n Object: useZSprites ? meshes.ZSprite : meshes.Instanced,\r\n initMaterial: setMatParams({\r\n instancedPos: true,\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n sphereSprite: useZSprites,\r\n }),\r\n };\r\n }\r\n\r\n static create2CClosedCylinders(_caps, _settings) {\r\n return _createInstancedCylinders(false, false);\r\n }\r\n\r\n static create2CCylinders(caps, settings) {\r\n return _createInstancedCylinders(settings.now.zSprites, true);\r\n }\r\n\r\n static create2CLines(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.TwoColorLinesGeometry, renderParams);\r\n }\r\n\r\n static createCrosses(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.CrossGeometry, renderParams);\r\n }\r\n\r\n static createExtrudedChains(_caps, _settings) {\r\n return _createSimpleGeoTriplet(geometries.ExtrudedObjectsGeometry);\r\n }\r\n\r\n static createChunkedLines(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.ChunkedLinesGeometry, renderParams);\r\n }\r\n\r\n static createQuickSurface(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.QuickSurfGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createContactSurface(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.ContactSurfaceGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createSASSES(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.SSIsosurfaceGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createLabels(_caps, _settings) {\r\n return {\r\n Geometry: geometries.LabelsGeometry,\r\n Object: meshes.Text,\r\n initMaterial() {\r\n },\r\n };\r\n }\r\n}\r\n\r\nexport default MeshCreator;\r\n","import * as THREE from 'three';\r\nimport gfxutils from '../gfxutils';\r\n\r\nclass TransformGroup extends THREE.Object3D {\r\n static _inverseMatrix = new THREE.Matrix4();\r\n\r\n static _ray = new THREE.Ray();\r\n\r\n constructor(geometry, geoParams, material, transforms) {\r\n super();\r\n this._geometry = geometry;\r\n this._geoParams = geoParams;\r\n const mat = material.createInstance();\r\n geoParams.initMaterial(mat);\r\n this._material = mat;\r\n this._transforms = transforms.length > 0 ? transforms : [new THREE.Matrix4()];\r\n const meshes = this._createMeshes(geometry);\r\n for (let i = 0, n = meshes.length; i < n; ++i) {\r\n this.add(meshes[i]);\r\n }\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const ray = TransformGroup._ray;\r\n const inverseMatrix = TransformGroup._inverseMatrix;\r\n const { children } = this;\r\n ray.copy(raycaster.ray);\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n\r\n if (!gfxutils.belongToSelectLayers(child)) {\r\n continue;\r\n }\r\n\r\n child.updateMatrixWorld();\r\n const mtx = child.matrixWorld;\r\n inverseMatrix.copy(mtx).invert();\r\n raycaster.ray.copy(ray).applyMatrix4(inverseMatrix);\r\n const childIntersects = [];\r\n this._geometry.raycast(raycaster, childIntersects);\r\n\r\n for (let j = 0, ciCount = childIntersects.length; j < ciCount; ++j) {\r\n const inters = childIntersects[j];\r\n if (inters.point) {\r\n inters.point.applyMatrix4(mtx);\r\n inters.distance = ray.origin.distanceTo(inters.point);\r\n }\r\n inters.object = child;\r\n intersects[intersects.length] = inters;\r\n }\r\n }\r\n raycaster.ray.copy(ray);\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const geos = this._geometry.getSubset(chunkIndices);\r\n const subset = [];\r\n let subIdx = 0;\r\n\r\n for (let i = 0, n = geos.length; i < n; ++i) {\r\n const meshes = this._createMeshes(geos[i]);\r\n for (let j = 0, meshCnt = meshes.length; j < meshCnt; ++j) {\r\n subset[subIdx++] = meshes[j];\r\n }\r\n }\r\n\r\n return subset;\r\n }\r\n\r\n _createMeshes(geometry) {\r\n const transforms = this._transforms;\r\n const Mesh = this._geoParams.Object;\r\n const material = this._material;\r\n const meshes = [];\r\n for (let i = 0, n = transforms.length; i < n; ++i) {\r\n const mesh = new Mesh(geometry, material);\r\n mesh.applyMatrix4(transforms[i]);\r\n meshes[i] = mesh;\r\n }\r\n\r\n return meshes;\r\n }\r\n}\r\n\r\nexport default TransformGroup;\r\n","import RCGroup from '../../RCGroup';\r\nimport TransformGroup from '../../meshes/TransformGroup';\r\n\r\nfunction wrapper(Name, args) {\r\n const params = [Name].concat(args);\r\n return Name.bind(...params);\r\n}\r\n\r\nclass ChemGroup extends RCGroup {\r\n constructor(geoParams, selection, colorer, mode, transforms, polyComplexity, material) {\r\n super();\r\n if (this.constructor === ChemGroup) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n this._selection = selection;\r\n this._mode = mode;\r\n this._colorer = colorer;\r\n this._chunksIdc = selection.chunks;\r\n this._polyComplexity = polyComplexity;\r\n this._geo = new (wrapper(geoParams.Geometry, this._makeGeoArgs()))();\r\n this._mesh = new TransformGroup(this._geo, geoParams, material, transforms);\r\n this.add(this._mesh);\r\n this._build();\r\n }\r\n\r\n _makeGeoArgs() {\r\n throw new Error('ChemGroup subclass must override _makeGeoArgs() method');\r\n }\r\n\r\n /**\r\n * Builds subset geometry by ATOMS index list\r\n *\r\n * @param {Number} mask - Representation mask\r\n * @param {Boolean} innerOnly - if true returns inner bonds only - without halves\r\n * @returns {Array} Subset geometry\r\n */\r\n getSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : false;\r\n const chunksList = this._calcChunksList(mask, innerOnly);\r\n if (chunksList.length === 0) {\r\n return [];\r\n }\r\n return this._mesh.getSubset(chunksList);\r\n }\r\n\r\n _changeSubsetOpacity(mask, value, innerOnly) {\r\n const chunksList = this._calcChunksList(mask, innerOnly);\r\n if (chunksList.length === 0) {\r\n return;\r\n }\r\n this._geo.setOpacity(chunksList, value);\r\n }\r\n\r\n enableSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : true;\r\n this._changeSubsetOpacity(mask, 1.0, innerOnly);\r\n }\r\n\r\n disableSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : true;\r\n this._changeSubsetOpacity(mask, 0.0, innerOnly);\r\n }\r\n}\r\n\r\nexport default ChemGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass AtomsGroup extends ChemGroup {\r\n raycast(raycaster, intersects) {\r\n const { atoms } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const atomsIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const atomIdx = atomsIdc[inters[i].chunkIdx];\r\n if (atomIdx < atoms.length) {\r\n inters[i].atom = atoms[atomIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const { atoms } = this._selection;\r\n const atomsIdc = this._chunksIdc;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n if ((atom.mask & mask) !== 0) {\r\n chunksList.push(i);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default AtomsGroup;\r\n","import AtomsGroup from './AtomsGroup';\r\n\r\nclass AtomsSphereGroup extends AtomsGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length, this._polyComplexity];\r\n }\r\n\r\n _build() {\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n geo.setItem(i, atom.position, mode.calcAtomRadius(atom));\r\n geo.setColor(i, colorer.getAtomColor(atom, parent));\r\n }\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n geo.setItem(i, frameData.getAtomPos(atomsIdc[i]), mode.calcAtomRadius(atom));\r\n if (updateColor) {\r\n geo.setColor(i, frameData.getAtomColor(colorer, atom));\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default AtomsSphereGroup;\r\n","import AtomsSphereGroup from './AtomsSphereGroup';\r\n\r\nclass AtomsSurfaceGroup extends AtomsSphereGroup {\r\n _makeGeoArgs() {\r\n const selectedAtoms = [];\r\n const { atoms, chunks } = this._selection;\r\n const n = chunks.length;\r\n for (let i = 0; i < n; ++i) {\r\n selectedAtoms[i] = atoms[chunks[i]];\r\n }\r\n const opts = this._mode.getSurfaceOpts();\r\n opts.atoms = selectedAtoms;\r\n return [n, opts];\r\n }\r\n}\r\nexport default AtomsSurfaceGroup;\r\n","/* This is a stub class keep it until SAS/SES is refactored */\r\n\r\nimport AtomsSphereGroup from './AtomsSphereGroup';\r\n\r\nclass AtomsSASSESGroupStub extends AtomsSphereGroup {\r\n _makeGeoArgs() {\r\n const selectedAtoms = [];\r\n const { atoms, chunks } = this._selection;\r\n const n = chunks.length;\r\n for (let i = 0; i < n; ++i) {\r\n selectedAtoms[i] = atoms[chunks[i]];\r\n }\r\n const opts = this._mode.getSurfaceOpts();\r\n opts.atoms = selectedAtoms;\r\n opts.selection = this._selection;\r\n opts.colorMode = this._colorer;\r\n return [n, opts];\r\n }\r\n}\r\n\r\nexport default AtomsSASSESGroupStub;\r\n","import AtomsGroup from './AtomsGroup';\r\nimport utils from '../../../utils';\r\n\r\nfunction adjustColor(color) {\r\n let r = (color >> 16) & 255;\r\n let g = (color >> 8) & 255;\r\n let b = color & 255;\r\n\r\n if (0.2126 * r + 0.7152 * g + 0.0722 * b > 127) {\r\n r = r * 3 / 10;\r\n g = g * 3 / 10;\r\n b = b * 3 / 10;\r\n } else {\r\n r = 255 - ((255 - r) * 3 / 10);\r\n g = 255 - ((255 - g) * 3 / 10);\r\n b = 255 - ((255 - b) * 3 / 10);\r\n }\r\n\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\nfunction inverseColor(color) {\r\n const r = (color >> 16) & 255;\r\n const g = (color >> 8) & 255;\r\n const b = color & 255;\r\n\r\n return ((255 - r) << 16) | ((255 - g) << 8) | (255 - b);\r\n}\r\n\r\nfunction getAtomText(atom) {\r\n if (atom.name.getNode() !== null) {\r\n return atom.name.getNode();\r\n }\r\n\r\n return atom.getVisualName();\r\n}\r\n\r\nconst colorMappings = {\r\n none(c) {\r\n return c;\r\n },\r\n adjust: adjustColor,\r\n inverse: inverseColor,\r\n};\r\n\r\nfunction propagateColor(color, rule) {\r\n let result;\r\n if (colorMappings.hasOwnProperty(rule)) {\r\n result = utils.hexColor(colorMappings[rule](color));\r\n } else {\r\n const val = parseInt(rule, 16);\r\n if (!Number.isNaN(val) && rule.toLowerCase().startsWith('0x')) {\r\n result = utils.hexColor(val);\r\n } else {\r\n result = '#000000';\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nconst templateMappings = {\r\n serial(a) {\r\n return a.serial;\r\n },\r\n name(a) {\r\n return a.getVisualName();\r\n },\r\n elem(a) {\r\n return a.element.name;\r\n },\r\n residue(a) {\r\n return a.residue.getType().getName();\r\n },\r\n sequence(a) {\r\n return a.residue.getSequence();\r\n },\r\n chain(a) {\r\n return a.residue.getChain().getName();\r\n },\r\n hetatm(a) {\r\n return a.isHet();\r\n },\r\n water(a) {\r\n return a.residue.getType().getName() === 'HOH' || a.residue.getType().getName() === 'WAT';\r\n },\r\n};\r\n\r\nconst parseTemplate = function (atom, str) {\r\n return str.replace(/\\{\\{(\\s*\\w+\\s*)\\}\\}/g, (m) => {\r\n let key = m.replace(/\\s+/g, '');\r\n key = key.substring(2, key.length - 2).toLowerCase();\r\n\r\n if (templateMappings.hasOwnProperty(key)) {\r\n return templateMappings[key](atom);\r\n }\r\n return 'null';\r\n });\r\n};\r\n\r\nclass AtomsTextGroup extends AtomsGroup {\r\n _makeGeoArgs() {\r\n const opts = this._mode.getLabelOpts();\r\n return [this._selection.chunks.length, opts];\r\n }\r\n\r\n _build() {\r\n const opts = this._mode.getLabelOpts();\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms, parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n const text = opts.template ? parseTemplate(atom, opts.template) : getAtomText(atom);\r\n if (!text) {\r\n continue;\r\n }\r\n const color = colorer.getAtomColor(atom, parent);\r\n const fgColor = parseInt(propagateColor(color, opts.fg).substring(1), 16);\r\n const bgColor = opts.showBg ? parseInt(propagateColor(color, opts.bg).substring(1), 16) : 'transparent';\r\n geo.setItem(i, atom.position, text);\r\n geo.setColor(i, fgColor, bgColor);\r\n }\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const opts = this._mode.getLabelOpts();\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n const text = opts.template ? parseTemplate(atom, opts.template) : getAtomText(atom);\r\n if (!text) {\r\n continue;\r\n }\r\n const color = frameData.getAtomColor(colorer, atom);\r\n const fgColor = parseInt(propagateColor(color, opts.fg).substring(1), 16);\r\n const bgColor = opts.showBg ? parseInt(propagateColor(color, opts.bg).substring(1), 16) : 'transparent';\r\n geo.setItem(i, frameData.getAtomPos(atomsIdc[i]), text);\r\n if (updateColor) {\r\n geo.setColor(i, fgColor, bgColor);\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default AtomsTextGroup;\r\n","import * as THREE from 'three';\r\nimport AtomsGroup from './AtomsGroup';\r\n\r\nfunction _slerp(omega, v1, v2, t) {\r\n const oSin = Math.sin(omega);\r\n return v1.clone().multiplyScalar(Math.sin((1 - t) * omega) / oSin).addScaledVector(v2, Math.sin(t * omega) / oSin);\r\n}\r\n\r\nclass AromaticGroup extends AtomsGroup {\r\n _buildInner(radOffset, addChunk) {\r\n const chunksToIdx = this._selection.chunks;\r\n\r\n const prevVector = new THREE.Vector3();\r\n const currVector = new THREE.Vector3();\r\n const segmentsHeight = this._segmentsHeight;\r\n const leprStep = 1.0 / segmentsHeight;\r\n const colorer = this._colorer;\r\n\r\n const { cycles, parent } = this._selection;\r\n let chunkIdx = 0;\r\n let currAtomIdx = chunksToIdx[chunkIdx];\r\n\r\n for (let cIdx = 0, cCount = cycles.length; cIdx < cCount; ++cIdx) {\r\n const cycle = cycles[cIdx];\r\n const cycAtoms = cycle.atoms;\r\n const chunkPoints = [];\r\n const tmpDir = [];\r\n const { center } = cycle;\r\n const cycleRad = cycle.radius - radOffset;\r\n const n = cycAtoms.length;\r\n let i = 0;\r\n const prevPos = cycAtoms[n - 1].position;\r\n let currPos = cycAtoms[i].position;\r\n prevVector.subVectors(prevPos, center);\r\n currVector.subVectors(currPos, center);\r\n const upDir = currVector.clone().cross(prevVector).normalize();\r\n\r\n for (; i < n; ++i) {\r\n const omega = prevVector.angleTo(currVector);\r\n tmpDir[i] = _slerp(omega, prevVector, currVector, 0.5).normalize();\r\n currPos = cycAtoms[(i + 1) % n].position;\r\n prevVector.copy(currVector);\r\n currVector.subVectors(currPos, center);\r\n }\r\n\r\n for (i = 0; i < n; ++i) {\r\n if (cycAtoms[i].index !== currAtomIdx) {\r\n continue;\r\n }\r\n const start = tmpDir[i];\r\n const end = tmpDir[(i + 1) % n];\r\n const color = colorer.getAtomColor(cycAtoms[i], parent);\r\n const currAngle = start.angleTo(end);\r\n\r\n for (let j = 0; j <= segmentsHeight; ++j) {\r\n chunkPoints[j] = _slerp(currAngle, start, end, j * leprStep).multiplyScalar(cycleRad).add(center);\r\n }\r\n\r\n addChunk(chunkIdx++, color, chunkPoints, center, upDir);\r\n currAtomIdx = chunksToIdx[chunkIdx];\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default AromaticGroup;\r\n","import * as THREE from 'three';\r\nimport gfxutils from '../../gfxutils';\r\nimport AromaticGroup from './AromaticGroup';\r\n\r\nfunction _createShape(rad, parts) {\r\n const pts = [];\r\n for (let i = 0; i < parts; ++i) {\r\n const a = -2 * i / parts * Math.PI;\r\n pts.push(new THREE.Vector3(Math.cos(a) * rad, Math.sin(a) * rad, 0));\r\n }\r\n return pts;\r\n}\r\nconst { calcChunkMatrix } = gfxutils;\r\n\r\nclass AromaticTorusGroup extends AromaticGroup {\r\n _build() {\r\n const segmentsHeight = this._segmentsHeight;\r\n const torusRad = this._mode.getAromRadius();\r\n const radiusV = new THREE.Vector2(torusRad, torusRad);\r\n const radOffset = this._mode.calcStickRadius() + 2 * torusRad;\r\n const lookAtVector = new THREE.Vector3();\r\n const mtc = [];\r\n const geo = this._geo;\r\n this._buildInner(radOffset, (chunkIdx, color, points, center, upDir) => {\r\n for (let j = 0; j <= segmentsHeight; ++j) {\r\n const currPoint = points[j];\r\n const currDir = currPoint.clone().sub(center).cross(upDir);\r\n lookAtVector.addVectors(currPoint, currDir);\r\n mtc[j] = calcChunkMatrix(currPoint, lookAtVector, upDir, radiusV);\r\n }\r\n geo.setItem(chunkIdx, mtc);\r\n geo.setColor(chunkIdx, color);\r\n });\r\n geo.finalize();\r\n }\r\n\r\n _makeGeoArgs() {\r\n this._segmentsHeight = this._polyComplexity;\r\n return [_createShape(1.0, this._polyComplexity), this._segmentsHeight + 1, this._selection.chunks.length];\r\n }\r\n}\r\n\r\nexport default AromaticTorusGroup;\r\n","import AromaticGroup from './AromaticGroup';\r\n\r\nclass AromaticLinesGroup extends AromaticGroup {\r\n _build() {\r\n const geo = this._geo;\r\n const radOffset = this._mode.getAromaticOffset();\r\n this._buildInner(radOffset, (chunkIdx, color, points) => {\r\n let prevPt = points[0];// do not replace with start\r\n for (let j = 1; j <= this._segmentsHeight; ++j) {\r\n const currPoint = points[j];\r\n geo.setSegment(chunkIdx, j - 1, prevPt, currPoint);\r\n prevPt = currPoint;\r\n }\r\n geo.setColor(chunkIdx, color);\r\n });\r\n geo.finalize();\r\n }\r\n\r\n _makeGeoArgs() {\r\n this._segmentsHeight = this._mode.getAromaticArcChunks();\r\n return [this._selection.chunks.length, this._segmentsHeight, true];\r\n }\r\n}\r\n\r\nexport default AromaticLinesGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass ResiduesGroup extends ChemGroup {\r\n raycast(raycaster, intersects) {\r\n const { residues } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const resIdx = chunksIdc[inters[i].chunkIdx];\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const { residues } = this._selection;\r\n const resIdc = this._chunksIdc;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n if ((res._mask & mask) !== 0) {\r\n chunksList.push(i);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default ResiduesGroup;\r\n","import ResiduesGroup from './ResiduesGroup';\r\n\r\nclass NucleicItemGroup extends ResiduesGroup {\r\n raycast(raycaster, intersects) {\r\n const { residues } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const resIdx = chunksIdc[Math.floor(inters[i].chunkIdx / 2)];\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const stickRad = this._mode.calcStickRadius();\r\n let chunkIdx = 0;\r\n\r\n const resIdc = this._selection.chunks;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n const color = colorer.getResidueColor(res, parent);\r\n this._processItem(chunkIdx++, res._cylinders[0], res._cylinders[1], stickRad, color);\r\n }\r\n geo.finalize();\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n let chunkIdx = 0;\r\n const { residues } = this._selection;\r\n const resIdc = this._chunksIdc;\r\n\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n if ((res._mask & mask) !== 0) {\r\n chunksList[chunkIdx++] = 2 * i;\r\n chunksList[chunkIdx++] = 2 * i + 1;\r\n }\r\n }\r\n return chunksList;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const residues = frameData.getResidues();\r\n const { parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const stickRad = this._mode.calcStickRadius();\r\n let chunkIdx = 0;\r\n\r\n const resIdc = this._selection.chunks;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n const color = colorer.getResidueColor(res, parent);\r\n this._processItem(chunkIdx++, res._cylinders[0], res._cylinders[1], stickRad, color);\r\n }\r\n geo.finishUpdate();\r\n }\r\n}\r\n\r\nexport default NucleicItemGroup;\r\n","import NucleicItemGroup from './NucleicItemGroup';\r\n\r\nclass NucleicCylindersGroup extends NucleicItemGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length, this._polyComplexity];\r\n }\r\n\r\n _processItem(chunkIdx, cyl1, cyl2, stickRad, color) {\r\n const geo = this._geo;\r\n geo.setItem(chunkIdx, cyl1, cyl2, stickRad);\r\n geo.setColor(chunkIdx, color, color);\r\n }\r\n}\r\n\r\nexport default NucleicCylindersGroup;\r\n","import NucleicItemGroup from './NucleicItemGroup';\r\n\r\nclass NucleicSpheresGroup extends NucleicItemGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length * 2, this._polyComplexity];\r\n }\r\n\r\n _processItem(chunkIdx, cyl1, cyl2, stickRad, color) {\r\n const geo = this._geo;\r\n let idx = chunkIdx * 2;\r\n geo.setItem(idx, cyl1, stickRad);\r\n geo.setColor(idx, color);\r\n idx++;\r\n geo.setItem(idx, cyl2, stickRad);\r\n geo.setColor(idx, color);\r\n }\r\n}\r\n\r\nexport default NucleicSpheresGroup;\r\n","import * as THREE from 'three';\r\nimport { Smooth } from '../../../../vendor/js/Smooth';\r\nimport gfxutils from '../../gfxutils';\r\nimport chem from '../../../chem';\r\n\r\nconst { ResidueType } = chem;\r\n\r\nconst calcMatrix = gfxutils.calcChunkMatrix;\r\n\r\nfunction _buildStructureInterpolator(points, tension) {\r\n const path = Smooth(points, {\r\n method: Smooth.METHOD_CUBIC,\r\n clip: Smooth.CLIP_CLAMP,\r\n cubicTension: tension,\r\n scaleTo: 1,\r\n });\r\n\r\n return function (t, argTrans) {\r\n let transformT = argTrans;\r\n if (transformT === null) {\r\n // map our range to the [second .. last but one]\r\n transformT = function (tt) {\r\n return (tt * ((points.length - 1) - 2) + 1) / (points.length - 1);\r\n };\r\n }\r\n const newt = transformT(t);\r\n const ans = path(newt);\r\n return new THREE.Vector3(ans[0], ans[1], ans[2]);\r\n };\r\n}\r\n\r\nfunction _addPoints(centerPoints, topPoints, idx, residue) {\r\n if (!residue._isValid) {\r\n centerPoints[idx] = centerPoints[idx - 1];\r\n topPoints[idx] = topPoints[idx - 1];\r\n return;\r\n }\r\n const cp = residue._controlPoint;\r\n centerPoints[idx] = [cp.x, cp.y, cp.z];\r\n const tp = cp.clone().add(residue._wingVector);\r\n topPoints[idx] = [tp.x, tp.y, tp.z];\r\n}\r\n\r\nfunction _addPointsForLoneResidue(centerPoints, topPoints, idx, residue) {\r\n const nucleic = (residue._type.flags & ResidueType.Flags.NUCLEIC) !== 0;\r\n const nameFrom = nucleic ? 'C5\\'' : 'N';\r\n const nameTo = nucleic ? 'C3\\'' : 'C';\r\n\r\n let posFrom;\r\n let posTo;\r\n residue.forEachAtom((atom) => {\r\n const name = atom.getVisualName();\r\n if (!posFrom && name === nameFrom) {\r\n posFrom = atom.position;\r\n } else if (!posTo && name === nameTo) {\r\n posTo = atom.position;\r\n }\r\n });\r\n\r\n // provide a fallback for unknown residues\r\n if (!(posFrom && posTo)) {\r\n posFrom = residue._firstAtom.position;\r\n posTo = residue._lastAtom.position;\r\n }\r\n\r\n if (posFrom && posTo) {\r\n const shift = posTo.clone().sub(posFrom);\r\n\r\n const wing = residue._wingVector;\r\n const cp = residue._controlPoint;\r\n const tp = cp.clone().add(wing);\r\n\r\n const cpPrev = cp.clone().sub(shift);\r\n const tpPrev = cpPrev.clone().add(wing);\r\n centerPoints[idx] = [cpPrev.x, cpPrev.y, cpPrev.z];\r\n topPoints[idx] = [tpPrev.x, tpPrev.y, tpPrev.z];\r\n ++idx;\r\n centerPoints[idx] = [cpPrev.x, cpPrev.y, cpPrev.z];\r\n topPoints[idx] = [tpPrev.x, tpPrev.y, tpPrev.z];\r\n ++idx;\r\n\r\n centerPoints[idx] = [cp.x, cp.y, cp.z];\r\n topPoints[idx] = [tp.x, tp.y, tp.z];\r\n ++idx;\r\n\r\n const cpNext = cp.clone().add(shift);\r\n const tpNext = cpNext.clone().add(wing);\r\n centerPoints[idx] = [cpNext.x, cpNext.y, cpNext.z];\r\n topPoints[idx] = [tpNext.x, tpNext.y, tpNext.z];\r\n ++idx;\r\n centerPoints[idx] = [cpNext.x, cpNext.y, cpNext.z];\r\n topPoints[idx] = [tpNext.x, tpNext.y, tpNext.z];\r\n }\r\n}\r\n\r\nfunction _calcPoints(residues, firstIdx, lastIdx, boundaries) {\r\n const left = boundaries.start;\r\n const right = boundaries.end;\r\n function _prevIdx(idx) {\r\n return idx > left && residues[idx - 1]._isValid ? idx - 1 : idx;\r\n }\r\n function _nextIdx(idx) {\r\n return idx < right && residues[idx + 1]._isValid ? idx + 1 : idx;\r\n }\r\n\r\n const topPoints = [];\r\n const centerPoints = [];\r\n let arrIdx = 0;\r\n function _extrapolate2(currIdx, otherIdx) {\r\n const cp = residues[currIdx]._controlPoint.clone().lerp(residues[otherIdx]._controlPoint, -0.25);\r\n const tp = cp.clone().add(residues[currIdx]._wingVector);\r\n centerPoints[arrIdx] = [cp.x, cp.y, cp.z];\r\n topPoints[arrIdx++] = [tp.x, tp.y, tp.z];\r\n centerPoints[arrIdx] = [cp.x, cp.y, cp.z];\r\n topPoints[arrIdx++] = [tp.x, tp.y, tp.z];\r\n }\r\n\r\n // a single disconnected residue\r\n const prevIdx = _prevIdx(firstIdx);\r\n const nextIdx = _nextIdx(lastIdx);\r\n if (prevIdx === nextIdx) {\r\n _addPointsForLoneResidue(centerPoints, topPoints, arrIdx, residues[firstIdx]);\r\n return { centerPoints, topPoints };\r\n }\r\n\r\n // Two points (prev-prev and next-next) are added to support edge conditions for cubic splines, they are ignored\r\n // Another two (prev and next) were added to support the outside of the sub chain\r\n\r\n // prev and prev-prev\r\n if (firstIdx === prevIdx) {\r\n // do the extrapolation\r\n _extrapolate2(firstIdx, _nextIdx(firstIdx));\r\n } else {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[_prevIdx(prevIdx)]);\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[prevIdx]);\r\n }\r\n\r\n // main loop\r\n for (let idx = firstIdx; idx <= lastIdx; ++idx) {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[idx]);\r\n }\r\n\r\n // next and next-next\r\n if (nextIdx === _nextIdx(nextIdx)) {\r\n // do the extrapolation\r\n _extrapolate2(lastIdx, _prevIdx(lastIdx));\r\n } else {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[nextIdx]);\r\n _addPoints(centerPoints, topPoints, arrIdx, residues[_nextIdx(nextIdx)]);\r\n }\r\n return { centerPoints, topPoints };\r\n}\r\n\r\nclass CartoonHelper {\r\n constructor(residues, startIdx, endIdx, segmentsCount, tension, boundaries) {\r\n const pointsArrays = _calcPoints(residues, startIdx, endIdx, boundaries);\r\n this._topInterp = _buildStructureInterpolator(pointsArrays.topPoints, tension);\r\n this._centerInterp = _buildStructureInterpolator(pointsArrays.centerPoints, tension);\r\n\r\n this._shift = 0.5 / (endIdx - startIdx + 2);\r\n this._valueStep = (1.0 - 2 * this._shift) / (2 * (endIdx - startIdx + 1) * (segmentsCount - 1));\r\n this._segmentsCount = segmentsCount;\r\n }\r\n\r\n prepareMatrices(idx, firstRad, secondRad) {\r\n const mtcCount = this._segmentsCount;\r\n const outMtc = new Array(mtcCount);\r\n const currRad = new THREE.Vector2(0, 0);\r\n\r\n const topInterp = this._topInterp;\r\n const cenInterp = this._centerInterp;\r\n\r\n let currentValue = this._shift + this._valueStep * (mtcCount - 1) * idx;\r\n\r\n for (let mtxIdx = 0; mtxIdx < mtcCount; ++mtxIdx) {\r\n const lerpVal = Math.min(1.0, mtxIdx / (mtcCount - 1));\r\n currRad.lerpVectors(firstRad, secondRad, lerpVal);\r\n\r\n const currTop = topInterp(currentValue, null);\r\n const currCenter = cenInterp(currentValue, null);\r\n currentValue += this._valueStep;\r\n const nextCenter = cenInterp(currentValue, null);\r\n\r\n outMtc[mtxIdx] = calcMatrix(currCenter.clone(), nextCenter.clone(), currTop.clone().sub(currCenter), currRad);\r\n }\r\n\r\n return outMtc;\r\n }\r\n}\r\n\r\nexport default CartoonHelper;\r\n","import * as THREE from 'three';\r\nimport ResiduesGroup from './ResiduesGroup';\r\nimport CartoonHelper from './CartoonHelper';\r\n\r\nfunction _createShape(rad, parts) {\r\n const pts = [];\r\n\r\n for (let i = 0; i < parts; ++i) {\r\n // starts from pi/2 because it's important that points are lied on the angles of arrows (visual issues if not)\r\n const a = Math.PI / 2.0 - 2 * Math.PI * i / parts;\r\n\r\n pts.push(new THREE.Vector3(Math.cos(a) * rad, Math.sin(a) * rad, 0));\r\n }\r\n return pts;\r\n}\r\n\r\nfunction _loopThrough(subDiv, residues, segmentsHeight, tension, mode, callback) {\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n const { boundaries } = subDiv[subDivI];\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const idc = [subs[i].start, subs[i].end];\r\n const matrixHelper = new CartoonHelper(residues, idc[0], idc[1], segmentsHeight, tension, boundaries);\r\n let prevLast = null;\r\n const startIdx = subs[i].start * 2;\r\n const endIdx = subs[i].end * 2 + 1;\r\n let prevSecondRad = mode.getResidueRadius(residues[0], 0);\r\n for (let idx = startIdx; idx <= endIdx; ++idx) {\r\n const resIdx = (idx / 2 | 0);\r\n const currRes = residues[resIdx];\r\n const firstRad = mode.getResidueRadius(currRes, idx % 2);\r\n const secondRad = mode.getResidueRadius(currRes, 1 + (idx % 2));\r\n\r\n const mtc = matrixHelper.prepareMatrices(idx - idc[0] * 2, firstRad, secondRad);\r\n mtc.unshift(prevLast === null ? mtc[0] : prevLast);\r\n\r\n // Slope - radius is changed along this residue part\r\n const hasSlope = (firstRad.x !== secondRad.x) || (firstRad.y !== secondRad.y);\r\n // Cut - end radius of previous part not equal to start radius of this part. First section of this part lies in the orthogonal plane\r\n const hasCut = (firstRad.x !== prevSecondRad.x) || (firstRad.y !== prevSecondRad.y);\r\n\r\n callback(currRes, mtc, hasSlope, hasCut);\r\n\r\n prevLast = mtc[segmentsHeight];\r\n prevSecondRad = secondRad;\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass ResiduesSubseqGroup extends ResiduesGroup {\r\n _makeGeoArgs() {\r\n const cmpMultiplier = this._mode.getHeightSegmentsRatio();\r\n this._segmentsHeight = this._polyComplexity * cmpMultiplier | 0;\r\n return [_createShape(1.0, this._polyComplexity), this._segmentsHeight + 1, this._selection.chunks.length * 2];\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const tension = mode.getTension();\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const chunkIdc = [];\r\n _loopThrough(this._selection.subdivs, residues, this._segmentsHeight, tension, mode, (currRes, mtc, hasSlope = false, hasCut = false) => {\r\n const color = colorer.getResidueColor(currRes, parent);\r\n chunkIdc[chunkIdx] = currRes._index;\r\n geo.setItem(chunkIdx, mtc, hasSlope, hasCut);\r\n geo.setColor(chunkIdx++, color);\r\n });\r\n this._chunksIdc = chunkIdc;\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const { parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const tension = mode.getTension();\r\n const geo = this._geo;\r\n const frameRes = frameData.getResidues();\r\n let chunkIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n _loopThrough(this._selection.subdivs, frameRes, this._segmentsHeight, tension, mode, (currRes, mtc) => {\r\n geo.setItem(chunkIdx, mtc);\r\n if (updateColor) {\r\n geo.setColor(chunkIdx, colorer.getResidueColor(currRes, parent));\r\n }\r\n chunkIdx++;\r\n });\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default ResiduesSubseqGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass ResiduesTraceGroup extends ChemGroup {\r\n _makeGeoArgs() {\r\n const subDiv = this._selection.subdivs;\r\n let chunksCount = 0;\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n chunksCount += subs[i].end - subs[i].start;\r\n }\r\n }\r\n return [chunksCount, this._polyComplexity];\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const chunkIdc = [];\r\n const subDiv = this._selection.subdivs;\r\n const stickRad = mode.calcStickRadius();\r\n\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const startIdx = subs[i].start;\r\n const endIdx = subs[i].end;\r\n let prevRes = residues[startIdx];\r\n for (let idx = startIdx + 1; idx <= endIdx; ++idx) {\r\n const currRes = residues[idx];\r\n chunkIdc[chunkIdx] = { first: prevRes._index, second: currRes._index };\r\n geo.setItem(chunkIdx, prevRes._controlPoint, currRes._controlPoint, stickRad);\r\n geo.setColor(chunkIdx, colorer.getResidueColor(prevRes, parent), colorer.getResidueColor(currRes, parent));\r\n chunkIdx++;\r\n prevRes = currRes;\r\n }\r\n }\r\n }\r\n\r\n this._chunksIdc = chunkIdc;\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n\r\n const residues = frameData.getResidues();\r\n const { parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const subDiv = this._selection.subdivs;\r\n const stickRad = mode.calcStickRadius();\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const startIdx = subs[i].start;\r\n const endIdx = subs[i].end;\r\n let prevRes = residues[startIdx];\r\n for (let idx = startIdx + 1; idx <= endIdx; ++idx) {\r\n const currRes = residues[idx];\r\n geo.setItem(chunkIdx, prevRes._controlPoint, currRes._controlPoint, stickRad);\r\n if (updateColor) {\r\n geo.setColor(chunkIdx, colorer.getResidueColor(prevRes, parent), colorer.getResidueColor(currRes, parent));\r\n }\r\n chunkIdx++;\r\n prevRes = currRes;\r\n }\r\n }\r\n }\r\n\r\n geo.finalize();\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const inters = [];\r\n const { residues } = this._selection;\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksToIdx = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const { chunkIdx } = inters[i];\r\n const chunk = chunksToIdx[Math.floor(chunkIdx / 2)];\r\n const resIdx = chunkIdx % 2 === 0 ? chunk.first : chunk.second;\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const chunksToIdx = this._chunksIdc;\r\n const { residues } = this._selection;\r\n for (let i = 0, n = chunksToIdx.length; i < n; ++i) {\r\n const chunk = chunksToIdx[i];\r\n if (residues[chunk.first]._mask & mask) {\r\n chunksList.push(i * 2);\r\n }\r\n if (residues[chunk.second]._mask & mask) {\r\n chunksList.push(i * 2 + 1);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default ResiduesTraceGroup;\r\n","import ChemGroup from './ChemGroup';\r\nimport Bond from '../../../chem/Bond';\r\n\r\nfunction getCylinderCount(bondOrder) {\r\n return bondOrder < 2 ? 1 : bondOrder;\r\n}\r\n\r\nclass BondsGroup extends ChemGroup {\r\n _makeGeoArgs() {\r\n const drawMultiple = this._mode.drawMultiorderBonds();\r\n const showAromatic = this._mode.showAromaticLoops();\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n let bondsCount = 0;\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n bondsCount += this.getBondOrder(bonds[bondsIdc[i]], drawMultiple, showAromatic);\r\n }\r\n return [bondsCount, this._polyComplexity];\r\n }\r\n\r\n getBondOrder(bond, drawMultiple, showAromatic) {\r\n let bondOrder = 1;\r\n if (drawMultiple && (!showAromatic || bond._type !== Bond.BondType.AROMATIC)) {\r\n bondOrder = getCylinderCount(bond._order);\r\n }\r\n return bondOrder;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const { bonds } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const bondsIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const { chunkIdx } = inters[i];\r\n const bondIdx = bondsIdc[Math.floor(chunkIdx / 2)];\r\n if (bondIdx < bonds.length) {\r\n const bond = bonds[bondIdx];\r\n inters[i].atom = chunkIdx % 2 === 0 ? bond._left : bond._right;\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask, innerOnly) {\r\n const chunksList = [];\r\n const { bonds } = this._selection;\r\n const chunksToIdx = this._chunksIdc;\r\n for (let i = 0, n = chunksToIdx.length; i < n; ++i) {\r\n const bond = bonds[chunksToIdx[i]];\r\n if ((bond._left.mask & mask) && (!innerOnly || (bond._right.mask & mask))) {\r\n chunksList.push(2 * i);\r\n }\r\n if ((bond._right.mask & mask) && (!innerOnly || (bond._left.mask & mask))) {\r\n chunksList.push(2 * i + 1);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default BondsGroup;\r\n","import * as THREE from 'three';\r\nimport BondsGroup from './BondsGroup';\r\n\r\nclass BondsCylinderGroup extends BondsGroup {\r\n _build() {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const stickRad = mode.calcStickRadius();\r\n const emptyOffset = mode.calcSpaceFraction();\r\n let normDir;\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const chunksToIdx = [];\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = atom1.position;\r\n const a2Pos = atom2.position;\r\n normDir = bond.calcNormalDir();\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n const minRad = Math.min(mode.calcAtomRadius(atom1), mode.calcAtomRadius(atom2));\r\n const dist = 2 * minRad / order;\r\n const currStickRad = drawMultiple ? Math.min(stickRad, dist * 0.5 * (1.0 - emptyOffset)) : stickRad;\r\n\r\n for (let j = 0; j < order; ++j) {\r\n const scale = dist * (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n chunksToIdx[currBondIdx] = bond._index;\r\n leftPos.copy(a1Pos);\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.copy(a2Pos);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos, currStickRad);\r\n geo.setColor(currBondIdx++, colorer.getAtomColor(atom1, parent), colorer.getAtomColor(atom2, parent));\r\n }\r\n }\r\n\r\n geo.finalize();\r\n this._chunksIdc = chunksToIdx;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const stickRad = mode.calcStickRadius();\r\n const emptyOffset = mode.calcSpaceFraction();\r\n let normDir;\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = frameData.getAtomPos(atom1.index).clone();\r\n const a2Pos = frameData.getAtomPos(atom2.index);\r\n normDir = bond.calcNormalDir();\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n const minRad = Math.min(mode.calcAtomRadius(atom1), mode.calcAtomRadius(atom2));\r\n const dist = 2 * minRad / order;\r\n const currStickRad = drawMultiple ? Math.min(stickRad, dist * 0.5 * (1.0 - emptyOffset)) : stickRad;\r\n\r\n for (let j = 0; j < order; ++j) {\r\n const scale = dist * (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n leftPos.copy(a1Pos);\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.copy(a2Pos);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos, currStickRad);\r\n if (updateColor) {\r\n geo.setColor(currBondIdx, frameData.getAtomColor(colorer, atom1), frameData.getAtomColor(colorer, atom2));\r\n }\r\n currBondIdx++;\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default BondsCylinderGroup;\r\n","import * as THREE from 'three';\r\nimport BondsGroup from './BondsGroup';\r\n\r\nconst STEP_SIZE = 0.15;\r\n\r\nclass BondsLinesGroup extends BondsGroup {\r\n _build() {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const bondDir = new THREE.Vector3();\r\n\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const chunksToIdx = [];\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = atom1.position;\r\n const a2Pos = atom2.position;\r\n const a1Hangs = atom1.bonds.length === 1;\r\n const a2Hangs = atom2.bonds.length === 1;\r\n bondDir.subVectors(a2Pos, a1Pos);\r\n const len = bondDir.length();\r\n const normDir = bond.calcNormalDir();\r\n\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n\r\n for (let j = 0; j < order; ++j) {\r\n leftPos.copy(a1Pos);\r\n rightPos.copy(a2Pos);\r\n let scale = (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n chunksToIdx[currBondIdx] = bond._index;\r\n if (order === 2 && (!a1Hangs && !a2Hangs)) {\r\n scale -= 0.5;\r\n scale *= -1;\r\n }\r\n\r\n if (!a1Hangs && !a2Hangs && order > 1 && scale !== 0) {\r\n leftPos.lerpVectors(a1Pos, a2Pos, STEP_SIZE / (len));\r\n rightPos.lerpVectors(a1Pos, a2Pos, 1.0 - STEP_SIZE / (len));\r\n }\r\n\r\n scale *= STEP_SIZE;\r\n\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos);\r\n geo.setColor(currBondIdx++, colorer.getAtomColor(atom1, parent), colorer.getAtomColor(atom2, parent));\r\n }\r\n }\r\n geo.finalize();\r\n this._chunksIdc = chunksToIdx;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const bondDir = new THREE.Vector3();\r\n\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = frameData.getAtomPos(atom1.index).clone();\r\n const a2Pos = frameData.getAtomPos(atom2.index);\r\n const a1Hangs = atom1.bonds.length === 1;\r\n const a2Hangs = atom2.bonds.length === 1;\r\n bondDir.subVectors(a2Pos, a1Pos);\r\n const len = bondDir.length();\r\n const normDir = bond.calcNormalDir();\r\n\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n\r\n for (let j = 0; j < order; ++j) {\r\n leftPos.copy(a1Pos);\r\n rightPos.copy(a2Pos);\r\n let scale = (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n if (order === 2 && (!a1Hangs && !a2Hangs)) {\r\n scale -= 0.5;\r\n scale *= -1;\r\n }\r\n\r\n if (!a1Hangs && !a2Hangs && order > 1 && scale !== 0) {\r\n leftPos.lerpVectors(a1Pos, a2Pos, STEP_SIZE / (len));\r\n rightPos.lerpVectors(a1Pos, a2Pos, 1.0 - STEP_SIZE / (len));\r\n }\r\n\r\n scale *= STEP_SIZE;\r\n\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos);\r\n if (updateColor) {\r\n geo.setColor(currBondIdx, frameData.getAtomColor(colorer, atom1), frameData.getAtomColor(colorer, atom2));\r\n }\r\n currBondIdx++;\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default BondsLinesGroup;\r\n","import AtomsSphereGroup from './AtomsSphereGroup';\r\nimport AtomsSurfaceGroup from './AtomsSurfaceGroup';\r\nimport AtomsSASSESGroupStub from './AtomsSASSESGroupStub';\r\nimport AtomsTextGroup from './AtomsTextGroup';\r\nimport AromaticTorusGroup from './AromaticTorusGroup';\r\nimport AromaticLinesGroup from './AromaticLinesGroup';\r\nimport NucleicCylindersGroup from './NucleicCylindersGroup';\r\nimport NucleicSpheresGroup from './NucleicSpheresGroup';\r\nimport ResiduesSubseqGroup from './ResiduesSubseqGroup';\r\nimport ResiduesTraceGroup from './ResiduesTraceGroup';\r\nimport BondsCylinderGroup from './BondsCylinderGroup';\r\nimport BondsLinesGroup from './BondsLinesGroup';\r\n\r\nexport default {\r\n AtomsSphereGroup,\r\n AtomsSurfaceGroup,\r\n AtomsSASSESGroupStub,\r\n AtomsTextGroup,\r\n AromaticTorusGroup,\r\n AromaticLinesGroup,\r\n NucleicCylindersGroup,\r\n NucleicSpheresGroup,\r\n ResiduesSubseqGroup,\r\n ResiduesTraceGroup,\r\n BondsCylinderGroup,\r\n BondsLinesGroup,\r\n};\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass AtomsProcessor extends RCGroup {\r\n constructor(AtomsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n this._mode = mode;\r\n const atoms = complex.getAtoms();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const atomsIdc = [];\r\n let atomCount = 0;\r\n component.forEachAtom((atom) => {\r\n if (!self._checkAtom(atom, mask)) {\r\n return;\r\n }\r\n atomsIdc[atomCount++] = atom.index;\r\n });\r\n if (atomCount === 0) {\r\n return;\r\n }\r\n const atomsGroup = new AtomsGroup(geoParams, {\r\n atoms,\r\n chunks: atomsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n atomsGroup._component = component;\r\n self.add(atomsGroup);\r\n });\r\n }\r\n\r\n _checkAtom(atom, mask) {\r\n return atom.mask & mask;\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default AtomsProcessor;\r\n","import AtomsProcessor from './AtomsProcessor';\r\n\r\nclass OrphanAtomsProcessor extends AtomsProcessor {\r\n _checkAtom(atom, mask) {\r\n if (!(atom.mask & mask)) {\r\n return false;\r\n }\r\n\r\n const { bonds } = atom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n if ((bonds[i]._left.mask & mask) && (bonds[i]._right.mask & mask)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\nexport default OrphanAtomsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass ResiduesProcessor extends RCGroup {\r\n constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const residues = complex.getResidues();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n let chunksCount = 0;\r\n const resIdc = [];\r\n component.forEachResidue((residue) => {\r\n if (self._checkResidue(residue, mask)) {\r\n resIdc[chunksCount++] = residue._index;\r\n }\r\n });\r\n\r\n if (chunksCount === 0) {\r\n return;\r\n }\r\n const residuesGroup = new ResidueGroup(geoParams, {\r\n residues,\r\n chunks: resIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n residuesGroup._component = component;\r\n self.add(residuesGroup);\r\n });\r\n }\r\n\r\n checkResidue(residue, mask) {\r\n return residue._mask & mask;\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default ResiduesProcessor;\r\n","import ResidueProcessor from './ResiduesProcessor';\r\n\r\nclass NucleicProcessor extends ResidueProcessor {\r\n _checkResidue(residue, mask) {\r\n return mask & residue._mask && residue._cylinders !== null;\r\n }\r\n}\r\nexport default NucleicProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass SubseqsProcessor extends RCGroup {\r\n constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const residues = complex.getResidues();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const subDivs = component.getMaskedSubdivSequences(mask);\r\n\r\n let chunksCount = 0;\r\n const resIdc = [];\r\n for (let subDivI = 0, subDivN = subDivs.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDivs[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n for (let j = subs[i].start, jEnd = subs[i].end; j <= jEnd; ++j) {\r\n resIdc[chunksCount++] = residues[j]._index;\r\n }\r\n }\r\n }\r\n\r\n if (chunksCount === 0) {\r\n return;\r\n }\r\n const residuesGroup = new ResidueGroup(geoParams, {\r\n residues,\r\n chunks: resIdc,\r\n subdivs: subDivs,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n residuesGroup._component = component;\r\n self.add(residuesGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default SubseqsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass BondsProcessor extends RCGroup {\r\n constructor(BondsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const bonds = complex.getBonds();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const bondsIdc = [];\r\n let bondsCount = 0;\r\n component.forEachBond((bond) => {\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n if (!(atom1.mask & mask) || !(atom2.mask & mask)) {\r\n return;\r\n }\r\n bondsIdc[bondsCount++] = bond._index;\r\n });\r\n if (bondsCount === 0) {\r\n return;\r\n }\r\n const bondsGroup = new BondsGroup(geoParams, {\r\n bonds,\r\n chunks: bondsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n bondsGroup._component = component;\r\n self.add(bondsGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default BondsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass AromaticProcessor extends RCGroup {\r\n constructor(AromaticGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const atoms = complex.getAtoms();\r\n const transforms = complex.getTransforms();\r\n if (!mode.showAromaticLoops()) {\r\n return;\r\n }\r\n\r\n complex.forEachComponent((component) => {\r\n const atomsIdc = [];\r\n let chunksCount = 0;\r\n const cycles = [];\r\n let cycleIdx = 0;\r\n component.forEachCycle((cycle) => {\r\n const cycAtoms = cycle.atoms;\r\n let perCycle = 0;\r\n for (let i = 0, n = cycAtoms.length; i < n; ++i) {\r\n if ((cycAtoms[i].mask & mask) !== 0) {\r\n ++perCycle;\r\n atomsIdc[chunksCount++] = cycAtoms[i].index;\r\n }\r\n }\r\n if (perCycle > 0) {\r\n cycles[cycleIdx++] = cycle;\r\n }\r\n });\r\n\r\n const atomsGroup = new AromaticGroup(geoParams, {\r\n cycles,\r\n atoms,\r\n chunks: atomsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n atomsGroup._component = component;\r\n self.add(atomsGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default AromaticProcessor;\r\n","import AtomsProcessor from './AtomsProcessor';\r\nimport OrphanAtomsProcessor from './OrphanAtomsProcessor';\r\nimport ResiduesProcessor from './ResiduesProcessor';\r\nimport NucleicProcessor from './NucleicProcessor';\r\nimport SubseqsProcessor from './SubseqsProcessor';\r\nimport BondsProcessor from './BondsProcessor';\r\nimport AromaticProcessor from './AromaticProcessor';\r\n\r\nexport default {\r\n Atoms: AtomsProcessor,\r\n OrphanAtoms: OrphanAtomsProcessor,\r\n Residues: ResiduesProcessor,\r\n Nucleic: NucleicProcessor,\r\n Subseqs: SubseqsProcessor,\r\n Bonds: BondsProcessor,\r\n Aromatic: AromaticProcessor,\r\n};\r\n","import MeshCreator from '../../meshes/MeshCreator';\r\nimport groups from './groups';\r\nimport processors from '../processors/processors';\r\n\r\nfunction _bakeGroup(triplet, Processor, Group) {\r\n return function (complex, colorer, mode, polyComplexity, mask, material) {\r\n return new Processor(Group, triplet, complex, colorer, mode, polyComplexity, mask, material);\r\n };\r\n}\r\n\r\nclass GroupsFactory {\r\n static AtomsSpheres(caps, settings) {\r\n const gfxTriplet = MeshCreator.createSpheres(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSphereGroup);\r\n }\r\n\r\n static OrphanedAtomsCrosses(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createCrosses(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.OrphanAtoms, groups.AtomsSphereGroup);\r\n }\r\n\r\n static BondsCylinders(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Bonds, groups.BondsCylinderGroup);\r\n }\r\n\r\n static BondsLines(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.create2CLines(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Bonds, groups.BondsLinesGroup);\r\n }\r\n\r\n static CartoonChains(caps, settings) {\r\n const gfxTriplet = MeshCreator.createExtrudedChains(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Subseqs, groups.ResiduesSubseqGroup);\r\n }\r\n\r\n static TraceChains(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CClosedCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Subseqs, groups.ResiduesTraceGroup);\r\n }\r\n\r\n static NucleicSpheres(caps, settings) {\r\n const gfxTriplet = MeshCreator.createSpheres(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Nucleic, groups.NucleicSpheresGroup);\r\n }\r\n\r\n static NucleicCylinders(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Nucleic, groups.NucleicCylindersGroup);\r\n }\r\n\r\n static ALoopsTorus(caps, settings) {\r\n const gfxTriplet = MeshCreator.createExtrudedChains(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Aromatic, groups.AromaticTorusGroup);\r\n }\r\n\r\n static ALoopsLines(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createChunkedLines(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Aromatic, groups.AromaticLinesGroup);\r\n }\r\n\r\n static QuickSurfGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createQuickSurface(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSurfaceGroup);\r\n }\r\n\r\n static ContactSurfaceGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createContactSurface(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSurfaceGroup);\r\n }\r\n\r\n static SASSESSurfaceGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createSASSES(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSASSESGroupStub);\r\n }\r\n\r\n static TextLabelsGeo(caps, settings) {\r\n const gfxTriplet = MeshCreator.createLabels(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsTextGroup);\r\n }\r\n}\r\n\r\nexport default GroupsFactory;\r\n","import _ from 'lodash';\r\nimport makeContextDependent from '../../utils/makeContextDependent';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport factory from './groups/GroupsFactory';\r\n\r\n/**\r\n * Create new mode.\r\n *\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the mode after its creation.\r\n *\r\n * @exports Mode\r\n * @this Mode\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all available modes used for building and displaying molecule geometry.\r\n */\r\nclass Mode {\r\n constructor(opts) {\r\n if (this.constructor === Mode) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Mode options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.opts = _.merge(utils.deriveDeep(this.settings.now.modes[this.id], true), opts);\r\n }\r\n\r\n /**\r\n * Get mode identification, probably with options.\r\n * @returns {string|Array} Mode identifier string ({@link Mode#id}) or two-element array containing both mode\r\n * identifier and options ({@link Mode#opts}).\r\n * Options are returned if they were changed during or after the mode creation.\r\n */\r\n identify() {\r\n const diff = utils.objectsDiff(this.opts, this.settings.now.modes[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n return [this.id, diff];\r\n }\r\n return this.id;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const polyComplexity = this.opts.polyComplexity ? this.opts.polyComplexity[this.settings.now.resolution] : 0;\r\n const groupList = this.depGroups;\r\n const groupCount = groupList.length;\r\n const group = new gfxutils.RCGroup();\r\n const self = this;\r\n for (let i = 0; i < groupCount; ++i) {\r\n let currGroup = groupList[i];\r\n let renderParams = {};\r\n if (_.isArray(currGroup)) {\r\n renderParams = currGroup[1].call(this);\r\n [currGroup] = currGroup;\r\n }\r\n const Group = factory[currGroup](null, this.settings, renderParams);\r\n const newGroup = new Group(complex, colorer, self, polyComplexity, mask, material);\r\n if (newGroup.children.length > 0) {\r\n group.add(newGroup);\r\n }\r\n }\r\n return group;\r\n }\r\n}\r\n\r\nmakeContextDependent(Mode.prototype);\r\n\r\n/**\r\n* Mode identifier.\r\n* @type {string}\r\n*/\r\nMode.prototype.id = '__';\r\n\r\n/**\r\n * Mode geo groups.\r\n * @type {Array}\r\n */\r\nMode.prototype.depGroups = [];\r\n\r\nexport default Mode;\r\n","import Mode from './Mode';\r\n\r\nfunction getRenderParams() {\r\n return {\r\n lineWidth: this.opts.lineWidth,\r\n };\r\n}\r\n\r\nclass LinesMode extends Mode {\r\n static id = 'LN';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n this.depGroups = this.depGroups.slice(0); // clone depGroups to prevent prototype edits\r\n const groups = this.depGroups;\r\n for (let i = 0, n = groups.length; i < n; ++i) {\r\n groups[i] = [groups[i], getRenderParams];\r\n }\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n\r\n calcAtomRadius() {\r\n return this.opts.atom;\r\n }\r\n\r\n getAromaticOffset() {\r\n return this.opts.offsarom;\r\n }\r\n\r\n getAromaticArcChunks() {\r\n return this.opts.chunkarom;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n}\r\n\r\nLinesMode.prototype.id = 'LN';\r\nLinesMode.prototype.name = 'Lines';\r\nLinesMode.prototype.shortName = 'Lines';\r\nLinesMode.prototype.depGroups = [\r\n 'ALoopsLines',\r\n 'BondsLines',\r\n 'OrphanedAtomsCrosses',\r\n];\r\n\r\nexport default LinesMode;\r\n","/* eslint-disable no-magic-numbers */\r\nimport Mode from './Mode';\r\n\r\nclass LicoriceMode extends Mode {\r\n static id = 'LC';\r\n\r\n calcAtomRadius(_atom) {\r\n return this.opts.bond;\r\n }\r\n\r\n calcStickRadius() {\r\n return this.opts.bond;\r\n }\r\n\r\n calcSpaceFraction() {\r\n return this.opts.space;\r\n }\r\n\r\n getAromRadius() {\r\n return this.opts.aromrad;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n}\r\n\r\nLicoriceMode.prototype.id = 'LC';\r\nLicoriceMode.prototype.name = 'Licorice';\r\nLicoriceMode.prototype.shortName = 'Licorice';\r\nLicoriceMode.prototype.depGroups = [\r\n 'AtomsSpheres',\r\n 'BondsCylinders',\r\n 'ALoopsTorus',\r\n];\r\n\r\nexport default LicoriceMode;\r\n","/* eslint-disable no-magic-numbers */\r\nimport Mode from './Mode';\r\n\r\nclass BallsAndSticksMode extends Mode {\r\n static id = 'BS';\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius * this.opts.atom;\r\n }\r\n\r\n calcStickRadius() {\r\n return this.opts.bond;\r\n }\r\n\r\n getAromRadius() {\r\n return this.opts.aromrad;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n\r\n calcSpaceFraction() {\r\n return this.opts.space;\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n}\r\n\r\nBallsAndSticksMode.prototype.id = 'BS';\r\nBallsAndSticksMode.prototype.name = 'Balls and Sticks';\r\nBallsAndSticksMode.prototype.shortName = 'Balls';\r\nBallsAndSticksMode.prototype.depGroups = [\r\n 'AtomsSpheres',\r\n 'BondsCylinders',\r\n 'ALoopsTorus',\r\n];\r\n\r\nexport default BallsAndSticksMode;\r\n","import Mode from './Mode';\r\n\r\nclass VanDerWaalsMode extends Mode {\r\n static id = 'VW';\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n}\r\n\r\nVanDerWaalsMode.prototype.id = 'VW';\r\nVanDerWaalsMode.prototype.name = 'Van der Waals';\r\nVanDerWaalsMode.prototype.shortName = 'VDW';\r\nVanDerWaalsMode.prototype.depGroups = ['AtomsSpheres'];\r\n\r\nexport default VanDerWaalsMode;\r\n","import Mode from './Mode';\r\n\r\nclass TraceMode extends Mode {\r\n static id = 'TR';\r\n\r\n calcStickRadius() {\r\n return this.opts.radius;\r\n }\r\n}\r\n\r\nTraceMode.prototype.id = 'TR';\r\nTraceMode.prototype.name = 'Trace';\r\nTraceMode.prototype.shortName = 'Trace';\r\nTraceMode.prototype.depGroups = ['TraceChains'];\r\n\r\nexport default TraceMode;\r\n","import * as THREE from 'three';\r\nimport Mode from './Mode';\r\n\r\nclass TubeMode extends Mode {\r\n static id = 'TU';\r\n\r\n getResidueRadius(_residue) {\r\n return this.TUBE_RADIUS;\r\n }\r\n\r\n getHeightSegmentsRatio() {\r\n return this.opts.heightSegmentsRatio;\r\n }\r\n\r\n getTension() {\r\n return this.opts.tension;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const rad = this.opts.radius;\r\n this.TUBE_RADIUS = new THREE.Vector2(rad, rad);\r\n\r\n return Mode.prototype.buildGeometry.call(this, complex, colorer, mask, material);\r\n }\r\n}\r\n\r\nTubeMode.prototype.id = 'TU';\r\nTubeMode.prototype.name = 'Tube';\r\nTubeMode.prototype.shortName = 'Tube';\r\nTubeMode.prototype.depGroups = ['CartoonChains'];\r\n\r\nexport default TubeMode;\r\n","import * as THREE from 'three';\r\nimport Mode from './Mode';\r\n\r\nclass CartoonMode extends Mode {\r\n static id = 'CA';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n // cache for secondary structure options\r\n this.secCache = {};\r\n }\r\n\r\n getResidueStartRadius(residue) {\r\n const second = residue.getSecondary();\r\n if (!second || !second.generic) {\r\n return this.TUBE_RADIUS;\r\n }\r\n const secOpts = this.secCache[second.generic];\r\n if (!secOpts) {\r\n return this.TUBE_RADIUS;\r\n }\r\n if (second.term === residue) {\r\n return secOpts.start;\r\n }\r\n return secOpts.center;\r\n }\r\n\r\n getResidueEndRadius(residue) {\r\n const second = residue.getSecondary();\r\n if (second === null || !second.generic) {\r\n return this.TUBE_RADIUS;\r\n }\r\n const secOpts = this.secCache[second.generic];\r\n if (!secOpts) {\r\n return this.TUBE_RADIUS;\r\n }\r\n if (second.term === residue) {\r\n return this.ARROW_END;\r\n }\r\n return secOpts.center;\r\n }\r\n\r\n getResidueRadius(residue, val) {\r\n const startRad = this.getResidueStartRadius(residue);\r\n if (val === 0) {\r\n return startRad;\r\n }\r\n\r\n const endRad = this.getResidueEndRadius(residue);\r\n if (val === 2) {\r\n return endRad;\r\n }\r\n\r\n return startRad.clone().lerp(endRad, val / 2.0);\r\n }\r\n\r\n calcStickRadius(_res) {\r\n return this.opts.radius;\r\n }\r\n\r\n getHeightSegmentsRatio() {\r\n return this.opts.heightSegmentsRatio;\r\n }\r\n\r\n getTension() {\r\n return this.opts.tension;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const tubeRad = this.opts.radius;\r\n const secHeight = this.opts.depth;\r\n\r\n this.TUBE_RADIUS = new THREE.Vector2(tubeRad, tubeRad);\r\n this.ARROW_END = new THREE.Vector2(secHeight, tubeRad);\r\n const secCache = {};\r\n const secData = this.opts.ss;\r\n /* eslint-disable guard-for-in */\r\n for (const prop in secData) {\r\n secCache[prop] = {\r\n center: new THREE.Vector2(secHeight, secData[prop].width),\r\n start: new THREE.Vector2(secHeight, secData[prop].arrow),\r\n };\r\n }\r\n this.secCache = secCache;\r\n /* eslint-enable guard-for-in */\r\n\r\n return Mode.prototype.buildGeometry.call(this, complex, colorer, mask, material);\r\n }\r\n}\r\n\r\nCartoonMode.prototype.id = 'CA';\r\nCartoonMode.prototype.name = 'Cartoon';\r\nCartoonMode.prototype.shortName = 'Cartoon';\r\nCartoonMode.prototype.depGroups = [\r\n 'CartoonChains',\r\n 'NucleicSpheres',\r\n 'NucleicCylinders',\r\n];\r\n\r\nexport default CartoonMode;\r\n","import chem from '../../chem';\r\nimport Mode from './Mode';\r\n\r\nconst { selectors } = chem;\r\n\r\nfunction getRenderParams() {\r\n return {\r\n wireframe: this.opts.wireframe,\r\n zClip: this.opts.zClip,\r\n };\r\n}\r\n\r\nclass SurfaceMode extends Mode {\r\n constructor(opts) {\r\n super(opts);\r\n this.depGroups = this.depGroups.slice(0); // clone depGroups to prevent prototype edits\r\n const surfaces = this.surfaceNames;\r\n const groups = this.depGroups;\r\n for (let i = 0, n = surfaces.length; i < n; ++i) {\r\n groups[groups.length] = [surfaces[i], getRenderParams];\r\n }\r\n }\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n\r\n getVisibilitySelector() {\r\n let visibilitySelector = null;\r\n if (this.opts.subset !== '') {\r\n const res = selectors.parse(this.opts.subset);\r\n if (!res.error) {\r\n visibilitySelector = res.selector;\r\n }\r\n }\r\n return visibilitySelector;\r\n }\r\n}\r\n\r\nSurfaceMode.prototype.isSurface = true;\r\nSurfaceMode.prototype.surfaceNames = [];\r\n\r\nexport default SurfaceMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass QuickSurfaceMode extends SurfaceMode {\r\n static id = 'QS';\r\n\r\n getSurfaceOpts() {\r\n return {\r\n useBeads: false,\r\n isoValue: this.opts.isoValue,\r\n gaussLim: this.opts.gaussLim[this.settings.now.resolution],\r\n radScale: this.opts.scale,\r\n gridSpacing: this.opts.gridSpacing[this.settings.now.resolution],\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n };\r\n }\r\n}\r\n\r\nQuickSurfaceMode.prototype.id = 'QS';\r\nQuickSurfaceMode.prototype.name = 'Quick Surface';\r\nQuickSurfaceMode.prototype.shortName = 'Quick Surf';\r\nQuickSurfaceMode.prototype.surfaceNames = ['QuickSurfGeo'];\r\n\r\nexport default QuickSurfaceMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass IsoSurfaceMode extends SurfaceMode {\r\n constructor(excludeProbe, opts) {\r\n super(opts);\r\n this._excludeProbe = excludeProbe;\r\n }\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n\r\n getSurfaceOpts() {\r\n return {\r\n gridSpacing: this.opts.polyComplexity[this.settings.now.resolution],\r\n radScale: this._radScale,\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n probeRadius: this.opts.probeRadius,\r\n excludeProbe: this._excludeProbe,\r\n };\r\n }\r\n}\r\n\r\nIsoSurfaceMode.prototype.id = 'SU';\r\nIsoSurfaceMode.prototype.name = 'Surface';\r\nIsoSurfaceMode.prototype.shortName = 'Surface';\r\nIsoSurfaceMode.prototype.surfaceNames = ['SASSESSurfaceGeo'];\r\n\r\nIsoSurfaceMode.prototype._radScale = 1;\r\nIsoSurfaceMode.prototype._excludeProbe = false;\r\n\r\nexport default IsoSurfaceMode;\r\n","import IsoSurfaceMode from './IsoSurfaceMode';\r\n\r\nclass IsoSurfaceSASMode extends IsoSurfaceMode {\r\n static id = 'SA';\r\n\r\n constructor(opts) {\r\n super(false, opts);\r\n }\r\n}\r\n\r\nIsoSurfaceSASMode.prototype.id = 'SA';\r\nIsoSurfaceSASMode.prototype.name = 'Solvent Accessible Surface';\r\nIsoSurfaceSASMode.prototype.shortName = 'SAS';\r\n\r\nexport default IsoSurfaceSASMode;\r\n","import IsoSurfaceMode from './IsoSurfaceMode';\r\n\r\nclass IsoSurfaceSESMode extends IsoSurfaceMode {\r\n static id = 'SE';\r\n\r\n constructor(opts) {\r\n super(true, opts);\r\n }\r\n}\r\n\r\nIsoSurfaceSESMode.prototype.id = 'SE';\r\nIsoSurfaceSESMode.prototype.name = 'Solvent Excluded Surface';\r\nIsoSurfaceSESMode.prototype.shortName = 'SES';\r\n\r\nexport default IsoSurfaceSESMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass ContactSurfaceMode extends SurfaceMode {\r\n static id = 'CS';\r\n\r\n getSurfaceOpts() {\r\n return {\r\n probeRadius: this.opts.probeRadius,\r\n radScale: this.opts.polyComplexity[this.settings.now.resolution],\r\n scaleFactor: this.opts.polyComplexity[this.settings.now.resolution],\r\n gridSpacing: 1.0 / this.opts.polyComplexity[this.settings.now.resolution],\r\n isoValue: this.opts.isoValue,\r\n probePositions: this.opts.probePositions,\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n };\r\n }\r\n}\r\n\r\nContactSurfaceMode.prototype.id = 'CS';\r\nContactSurfaceMode.prototype.name = 'Contact Surface';\r\nContactSurfaceMode.prototype.shortName = 'Contact Surf';\r\nContactSurfaceMode.prototype.isSurface = true;\r\nContactSurfaceMode.prototype.surfaceNames = ['ContactSurfaceGeo'];\r\n\r\nexport default ContactSurfaceMode;\r\n","import _ from 'lodash';\r\nimport Mode from './Mode';\r\n\r\nclass TextMode extends Mode {\r\n static id = 'TX';\r\n\r\n getTemplateOptions() {\r\n return this.opts.template;\r\n }\r\n\r\n getLabelOpts() {\r\n return _.merge(this.opts, {\r\n colors: true,\r\n adjustColor: true,\r\n transparent: true,\r\n });\r\n }\r\n}\r\n\r\nTextMode.prototype.id = 'TX';\r\nTextMode.prototype.name = 'Text mode';\r\nTextMode.prototype.shortName = 'Text';\r\nTextMode.prototype.depGroups = ['TextLabelsGeo'];\r\n\r\nexport default TextMode;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport LinesMode from './modes/LinesMode';\r\nimport LicoriceMode from './modes/LicoriceMode';\r\nimport BallsAndSticksMode from './modes/BallsAndSticksMode';\r\nimport VanDerWaalsMode from './modes/VanDerWaalsMode';\r\nimport TraceMode from './modes/TraceMode';\r\nimport TubeMode from './modes/TubeMode';\r\nimport CartoonMode from './modes/CartoonMode';\r\nimport QuickSurfaceMode from './modes/QuickSurfaceMode';\r\nimport IsoSurfaceSASMode from './modes/IsoSurfaceSASMode';\r\nimport IsoSurfaceSESMode from './modes/IsoSurfaceSESMode';\r\nimport ContactSurfaceMode from './modes/ContactSurfaceMode';\r\nimport TextMode from './modes/TextMode';\r\n\r\nconst modes = new EntityList([\r\n LinesMode,\r\n LicoriceMode,\r\n BallsAndSticksMode,\r\n VanDerWaalsMode,\r\n TraceMode,\r\n TubeMode,\r\n CartoonMode,\r\n QuickSurfaceMode,\r\n IsoSurfaceSASMode,\r\n IsoSurfaceSESMode,\r\n ContactSurfaceMode,\r\n TextMode,\r\n]);\r\n\r\nexport default modes;\r\n","import _ from 'lodash';\r\n\r\nfunction clamp(x, a, b) {\r\n return x <= b ? x < 0 ? 0 : x : b;\r\n}\r\n\r\nfunction lerpColor(c1, c2, alpha) {\r\n const beta = 1 - alpha;\r\n const r1 = (c1 >> 16) & 0xff;\r\n const g1 = (c1 >> 8) & 0xff;\r\n const b1 = c1 & 0xff;\r\n const r2 = (c2 >> 16) & 0xff;\r\n const g2 = (c2 >> 8) & 0xff;\r\n const b2 = c2 & 0xff;\r\n const r = beta * r1 + alpha * r2;\r\n const g = beta * g1 + alpha * g2;\r\n const b = beta * b1 + alpha * b2;\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\nclass Palette {\r\n constructor(name, id) {\r\n this.name = name || 'Custom';\r\n this.id = id || 'CP';\r\n }\r\n\r\n getElementColor(name, asIs = false) {\r\n const color = this.elementColors[name];\r\n return color === undefined && !asIs ? this.defaultElementColor : color;\r\n }\r\n\r\n getResidueColor(name, asIs = false) {\r\n const color = this.residueColors[name];\r\n return color === undefined && !asIs ? this.defaultResidueColor : color;\r\n }\r\n\r\n getChainColor(name) {\r\n let chain = name.charCodeAt(0);\r\n chain = ((chain < 0 ? 0 : chain >= 256 ? chain - 256 : chain) & 0x1F)\r\n % this.chainColors.length;\r\n return this.chainColors[chain];\r\n }\r\n\r\n getSecondaryColor(type, asIs = false) {\r\n const color = this.secondaryColors[type];\r\n return color === undefined && !asIs ? this.defaultSecondaryColor : color;\r\n }\r\n\r\n getSequentialColor(index) {\r\n const { colors } = this;\r\n const len = colors.length;\r\n return index < 0 ? colors[(index % len) + len] : colors[index % len];\r\n }\r\n\r\n getGradientColor(value, gradientName) {\r\n const gradient = this.gradients[gradientName];\r\n if (!gradient) {\r\n return this.defaultNamedColor;\r\n }\r\n const count = gradient.length;\r\n const index = value * (count - 1);\r\n let left = Math.floor(index);\r\n const right = clamp(left + 1, 0, count - 1);\r\n left = clamp(left, 0, count - 1);\r\n return lerpColor(gradient[left], gradient[right], index - left);\r\n }\r\n\r\n getNamedColor(name, asIs = false) {\r\n const color = this.namedColors[name];\r\n return color === undefined && !asIs ? this.defaultNamedColor : color;\r\n }\r\n}\r\n\r\n_.assign(Palette.prototype, {\r\n colors: [0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0x808080],\r\n\r\n minRangeColor: 0x000000,\r\n midRangeColor: 0x7F7F7F,\r\n maxRangeColor: 0xFFFFFF,\r\n\r\n defaultElementColor: 0xFFFFFF,\r\n elementColors: {},\r\n\r\n defaultResidueColor: 0xFFFFFF,\r\n residueColors: {},\r\n\r\n chainColors: [0xFFFFFF],\r\n\r\n defaultSecondaryColor: 0xFFFFFF,\r\n secondaryColors: {},\r\n\r\n defaultGradientColor: 0x000000,\r\n\r\n defaultNamedColor: 0xFFFFFF,\r\n namedColorsArray: [\r\n /* eslint-disable no-multi-spaces */\r\n ['indianred', 0xcd5c5c],\r\n ['lightcoral', 0xf08080],\r\n ['salmon', 0xfa8072],\r\n ['darksalmon', 0xe9967a],\r\n ['lightsalmon', 0xffa07a],\r\n ['crimson', 0xdc143c],\r\n ['red', 0xff0000],\r\n ['firebrick', 0xb22222],\r\n ['darkred', 0x8b0000],\r\n ['pink', 0xffc0cb],\r\n ['lightpink', 0xffb6c1],\r\n ['hotpink', 0xff69b4],\r\n ['deeppink', 0xff1493],\r\n ['mediumvioletred', 0xc71585],\r\n ['palevioletred', 0xdb7093],\r\n ['coral', 0xff7f50],\r\n ['tomato', 0xff6347],\r\n ['orangered', 0xff4500],\r\n ['darkorange', 0xff8c00],\r\n ['orange', 0xffa500],\r\n ['gold', 0xffd700],\r\n ['yellow', 0xffff00],\r\n ['lightyellow', 0xffffe0],\r\n ['lemonchiffon', 0xfffacd],\r\n ['lightgoldenrodyellow', 0xfafad2],\r\n ['papayawhip', 0xffefd5],\r\n ['moccasin', 0xffe4b5],\r\n ['peachpuff', 0xffdab9],\r\n ['palegoldenrod', 0xeee8aa],\r\n ['khaki', 0xf0e68c],\r\n ['darkkhaki', 0xbdb76b],\r\n ['lavender', 0xe6e6fa],\r\n ['thistle', 0xd8bfd8],\r\n ['plum', 0xdda0dd],\r\n ['violet', 0xee82ee],\r\n ['orchid', 0xda70d6],\r\n ['fuchsia', 0xff00ff],\r\n ['magenta', 0xff00ff],\r\n ['mediumorchid', 0xba55d3],\r\n ['mediumpurple', 0x9370db],\r\n ['rebeccapurple', 0x663399],\r\n ['blueviolet', 0x8a2be2],\r\n ['darkviolet', 0x9400d3],\r\n ['darkorchid', 0x9932cc],\r\n ['darkmagenta', 0x8b008b],\r\n ['purple', 0x800080],\r\n ['indigo', 0x4b0082],\r\n ['slateblue', 0x6a5acd],\r\n ['mediumslateblue', 0x7b68ee],\r\n ['darkslateblue', 0x483d8b],\r\n ['greenyellow', 0xadff2f],\r\n ['chartreuse', 0x7fff00],\r\n ['lawngreen', 0x7cfc00],\r\n ['lime', 0x00ff00],\r\n ['limegreen', 0x32cd32],\r\n ['palegreen', 0x98fb98],\r\n ['lightgreen', 0x90ee90],\r\n ['mediumspringgreen', 0x00fa9a],\r\n ['springgreen', 0x00ff7f],\r\n ['mediumseagreen', 0x3cb371],\r\n ['seagreen', 0x2e8b57],\r\n ['forestgreen', 0x228b22],\r\n ['green', 0x008000],\r\n ['darkgreen', 0x006400],\r\n ['yellowgreen', 0x9acd32],\r\n ['olivedrab', 0x6b8e23],\r\n ['olive', 0x808000],\r\n ['darkolivegreen', 0x556b2f],\r\n ['mediumaquamarine', 0x66cdaa],\r\n ['darkseagreen', 0x8fbc8f],\r\n ['lightseagreen', 0x20b2aa],\r\n ['darkcyan', 0x008b8b],\r\n ['teal', 0x008080],\r\n ['aqua', 0x00ffff],\r\n ['cyan', 0x00ffff],\r\n ['lightcyan', 0xe0ffff],\r\n ['paleturquoise', 0xafeeee],\r\n ['aquamarine', 0x7fffd4],\r\n ['turquoise', 0x40e0d0],\r\n ['mediumturquoise', 0x48d1cc],\r\n ['darkturquoise', 0x00ced1],\r\n ['cadetblue', 0x5f9ea0],\r\n ['steelblue', 0x4682b4],\r\n ['lightsteelblue', 0xb0c4de],\r\n ['powderblue', 0xb0e0e6],\r\n ['lightblue', 0xadd8e6],\r\n ['skyblue', 0x87ceeb],\r\n ['lightskyblue', 0x87cefa],\r\n ['deepskyblue', 0x00bfff],\r\n ['dodgerblue', 0x1e90ff],\r\n ['cornflowerblue', 0x6495ed],\r\n ['royalblue', 0x4169e1],\r\n ['blue', 0x0000ff],\r\n ['mediumblue', 0x0000cd],\r\n ['darkblue', 0x00008b],\r\n ['navy', 0x000080],\r\n ['midnightblue', 0x191970],\r\n ['cornsilk', 0xfff8dc],\r\n ['blanchedalmond', 0xffebcd],\r\n ['bisque', 0xffe4c4],\r\n ['navajowhite', 0xffdead],\r\n ['wheat', 0xf5deb3],\r\n ['burlywood', 0xdeb887],\r\n ['tan', 0xd2b48c],\r\n ['rosybrown', 0xbc8f8f],\r\n ['sandybrown', 0xf4a460],\r\n ['goldenrod', 0xdaa520],\r\n ['darkgoldenrod', 0xb8860b],\r\n ['peru', 0xcd853f],\r\n ['chocolate', 0xd2691e],\r\n ['saddlebrown', 0x8b4513],\r\n ['sienna', 0xa0522d],\r\n ['brown', 0xa52a2a],\r\n ['maroon', 0x800000],\r\n ['white', 0xffffff],\r\n ['snow', 0xfffafa],\r\n ['honeydew', 0xf0fff0],\r\n ['mintcream', 0xf5fffa],\r\n ['azure', 0xf0ffff],\r\n ['aliceblue', 0xf0f8ff],\r\n ['ghostwhite', 0xf8f8ff],\r\n ['whitesmoke', 0xf5f5f5],\r\n ['seashell', 0xfff5ee],\r\n ['beige', 0xf5f5dc],\r\n ['oldlace', 0xfdf5e6],\r\n ['floralwhite', 0xfffaf0],\r\n ['ivory', 0xfffff0],\r\n ['antiquewhite', 0xfaebd7],\r\n ['linen', 0xfaf0e6],\r\n ['lavenderblush', 0xfff0f5],\r\n ['mistyrose', 0xffe4e1],\r\n ['gainsboro', 0xdcdcdc],\r\n ['lightgray', 0xd3d3d3],\r\n ['silver', 0xc0c0c0],\r\n ['darkgray', 0xa9a9a9],\r\n ['gray', 0x808080],\r\n ['dimgray', 0x696969],\r\n ['lightslategray', 0x778899],\r\n ['slategray', 0x708090],\r\n ['darkslategray', 0x2f4f4f],\r\n ['black', 0x000000],\r\n /* eslint-enable no-multi-spaces */\r\n ],\r\n\r\n namedColors: {},\r\n /* eslint-enable no-magic-numbers */\r\n\r\n gradients: {\r\n rainbow: [\r\n 0x0000ff, // blue\r\n 0x00ffff, // cyan\r\n 0x00ff00, // green\r\n 0xffff00, // yellow\r\n 0xff0000, // red\r\n ],\r\n temp: [\r\n 0x0000ff, // blue\r\n 0x007fff, // light-blue\r\n 0xffffff, // white\r\n 0xff7f00, // orange\r\n 0xff0000, // red\r\n ],\r\n hot: [\r\n 0xffffff, // white\r\n 0xff7f00, // orange\r\n 0xff0000, // red\r\n ],\r\n cold: [\r\n 0xffffff, // white\r\n 0x007fff, // light-blue\r\n 0x0000ff, // blue\r\n ],\r\n 'blue-red': [\r\n 0x0000ff, // blue\r\n 0xffffff, // white\r\n 0xff0000, // red\r\n ],\r\n reds: [\r\n 0xffffff, // white\r\n 0xff0000, // red\r\n ],\r\n blues: [\r\n 0xffffff, // white\r\n 0x0000ff, // blue\r\n ],\r\n },\r\n});\r\n\r\nconst { namedColorsArray, namedColors } = Palette.prototype;\r\n\r\nfor (let i = 0, { length } = namedColorsArray; i < length; ++i) {\r\n const [name, value] = namedColorsArray[i];\r\n namedColors[name] = value;\r\n}\r\n\r\nexport default Palette;\r\n","import Palette from './Palette';\r\n\r\nconst palette = new Palette('CPK', 'CP');\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n /* eslint-disable no-magic-numbers */\r\n H: 0xFFFFFF,\r\n C: 0x202020,\r\n N: 0x2060FF,\r\n O: 0xEE2010,\r\n F: 0x00FF00,\r\n P: 0x8020FF,\r\n S: 0xFFFF00,\r\n CL: 0x00BB00,\r\n FE: 0xD0D0D0,\r\n CO: 0xD0D0D0,\r\n NI: 0xD0D0D0,\r\n CU: 0xD0D0D0,\r\n BR: 0x008800,\r\n I: 0x005500,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\nexport default palette;\r\n","import Palette from './Palette';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst palette = new Palette('Jmol', 'JM');\r\n\r\npalette.colors = [\r\n /* eslint-disable no-magic-numbers */\r\n 0x0000FF, // blue\r\n 0x0055FF, //\r\n 0x00ABFF, //\r\n 0x00FFFF, // cyan\r\n 0x00FFAB, //\r\n 0x00FF55, //\r\n 0x00FF00, // green\r\n 0x55FF00, //\r\n 0xABFF00, //\r\n 0xFFFF00, // yellow\r\n 0xFFAB00, //\r\n 0xFF5500, //\r\n 0xFF0000, // red\r\n 0xFF0055, //\r\n 0xFF00AB, //\r\n 0xFF00FF, // magenta\r\n 0xAB00FF, //\r\n 0x5500FF, //\r\n /* eslint-enable no-magic-numbers */\r\n];\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n /* eslint-disable no-magic-numbers */\r\n H: 0xFFFFFF,\r\n D: 0xFFFFC0,\r\n T: 0xFFFFA0,\r\n HE: 0xD9FFFF,\r\n LI: 0xCC80FF,\r\n BE: 0xC2FF00,\r\n B: 0xFFB5B5,\r\n C: 0x909090,\r\n N: 0x3050F8,\r\n O: 0xFF0D0D,\r\n F: 0x90E050,\r\n NE: 0xB3E3F5,\r\n NA: 0xAB5CF2,\r\n MG: 0x8AFF00,\r\n AL: 0xBFA6A6,\r\n SI: 0xF0C8A0,\r\n P: 0xFF8000,\r\n S: 0xFFFF30,\r\n CL: 0x1FF01F,\r\n AR: 0x80D1E3,\r\n K: 0x8F40D4,\r\n CA: 0x3DFF00,\r\n SC: 0xE6E6E6,\r\n TI: 0xBFC2C7,\r\n V: 0xA6A6AB,\r\n CR: 0x8A99C7,\r\n MN: 0x9C7AC7,\r\n FE: 0xE06633,\r\n CO: 0xF090A0,\r\n NI: 0x50D050,\r\n CU: 0xC88033,\r\n ZN: 0x7D80B0,\r\n GA: 0xC28F8F,\r\n GE: 0x668F8F,\r\n AS: 0xBD80E3,\r\n SE: 0xFFA100,\r\n BR: 0xA62929,\r\n KR: 0x5CB8D1,\r\n RB: 0x702EB0,\r\n SR: 0x00FF00,\r\n Y: 0x94FFFF,\r\n ZR: 0x94E0E0,\r\n NB: 0x73C2C9,\r\n MO: 0x54B5B5,\r\n TC: 0x3B9E9E,\r\n RU: 0x248F8F,\r\n RH: 0x0A7D8C,\r\n PD: 0x006985,\r\n AG: 0xC0C0C0,\r\n CD: 0xFFD98F,\r\n IN: 0xA67573,\r\n SN: 0x668080,\r\n SB: 0x9E63B5,\r\n TE: 0xD47A00,\r\n I: 0x940094,\r\n XE: 0x429EB0,\r\n CS: 0x57178F,\r\n BA: 0x00C900,\r\n LA: 0x70D4FF,\r\n CE: 0xFFFFC7,\r\n PR: 0xD9FFC7,\r\n ND: 0xC7FFC7,\r\n PM: 0xA3FFC7,\r\n SM: 0x8FFFC7,\r\n EU: 0x61FFC7,\r\n GD: 0x45FFC7,\r\n TB: 0x30FFC7,\r\n DY: 0x1FFFC7,\r\n HO: 0x00FF9C,\r\n ER: 0x00E675,\r\n TM: 0x00D452,\r\n YB: 0x00BF38,\r\n LU: 0x00AB24,\r\n HF: 0x4DC2FF,\r\n TA: 0x4DA6FF,\r\n W: 0x2194D6,\r\n RE: 0x267DAB,\r\n OS: 0x266696,\r\n IR: 0x175487,\r\n PT: 0xD0D0E0,\r\n AU: 0xFFD123,\r\n HG: 0xB8B8D0,\r\n TL: 0xA6544D,\r\n PB: 0x575961,\r\n BI: 0x9E4FB5,\r\n PO: 0xAB5C00,\r\n AT: 0x754F45,\r\n RN: 0x428296,\r\n FR: 0x420066,\r\n RA: 0x007D00,\r\n AC: 0x70ABFA,\r\n TH: 0x00BAFF,\r\n PA: 0x00A1FF,\r\n U: 0x008FFF,\r\n NP: 0x0080FF,\r\n PU: 0x006BFF,\r\n AM: 0x545CF2,\r\n CM: 0x785CE3,\r\n BK: 0x8A4FE3,\r\n CF: 0xA136D4,\r\n ES: 0xB31FD4,\r\n FM: 0xB31FBA,\r\n MD: 0xB30DA6,\r\n NO: 0xBD0D87,\r\n LR: 0xC70066,\r\n RF: 0xCC0059,\r\n DB: 0xD1004F,\r\n SG: 0xD90045,\r\n BH: 0xE00038,\r\n HS: 0xE6002E,\r\n MT: 0xEB0026,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\npalette.defaultResidueColor = 0xBEA06E;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\npalette.residueColors = {\r\n /* eslint-disable no-magic-numbers */\r\n ALA: 0xC8C8C8,\r\n ARG: 0x145AFF,\r\n ASN: 0x00DCDC,\r\n ASP: 0xE60A0A,\r\n CYS: 0xE6E600,\r\n GLN: 0x00DCDC,\r\n GLU: 0xE60A0A,\r\n GLY: 0xEBEBEB,\r\n HIS: 0x8282D2,\r\n ILE: 0x0F820F,\r\n LEU: 0x0F820F,\r\n LYS: 0x145AFF,\r\n MET: 0xE6E600,\r\n PHE: 0x3232AA,\r\n PRO: 0xDC9682,\r\n SER: 0xFA9600,\r\n THR: 0xFA9600,\r\n TRP: 0xB45AB4,\r\n TYR: 0x3232AA,\r\n VAL: 0x0F820F,\r\n A: 0xA0A0FF,\r\n C: 0xFF8C4B,\r\n G: 0xFF7070,\r\n I: 0x80FFFF,\r\n T: 0xA0FFA0,\r\n U: 0xFF8080,\r\n DA: 0xA0A0FF,\r\n DC: 0xFF8C4B,\r\n DG: 0xFF7070,\r\n DI: 0x80FFFF,\r\n DT: 0xA0FFA0,\r\n DU: 0xFF8080,\r\n '+A': 0xA0A0FF,\r\n '+C': 0xFF8C4B,\r\n '+G': 0xFF7070,\r\n '+I': 0x80FFFF,\r\n '+T': 0xA0FFA0,\r\n '+U': 0xFF8080,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\npalette.chainColors = [\r\n // ' '->0 'A'->1, 'B'->2\r\n 0xFFffffff, // ' ' & '0' white\r\n //\r\n 0xFFC0D0FF, // skyblue\r\n 0xFFB0FFB0, // pastel green\r\n 0xFFFFC0C8, // pink\r\n 0xFFFFFF80, // pastel yellow\r\n 0xFFFFC0FF, // pastel magenta\r\n 0xFFB0F0F0, // pastel cyan\r\n 0xFFFFD070, // pastel gold\r\n 0xFFF08080, // lightcoral\r\n\r\n 0xFFF5DEB3, // wheat\r\n 0xFF00BFFF, // deepskyblue\r\n 0xFFCD5C5C, // indianred\r\n 0xFF66CDAA, // mediumaquamarine\r\n 0xFF9ACD32, // yellowgreen\r\n 0xFFEE82EE, // violet\r\n 0xFF00CED1, // darkturquoise\r\n 0xFF00FF7F, // springgreen\r\n 0xFF3CB371, // mediumseagreen\r\n\r\n 0xFF00008B, // darkblue\r\n 0xFFBDB76B, // darkkhaki\r\n 0xFF006400, // darkgreen\r\n 0xFF800000, // maroon\r\n 0xFF808000, // olive\r\n 0xFF800080, // purple\r\n 0xFF008080, // teal\r\n 0xFFB8860B, // darkgoldenrod\r\n 0xFFB22222, // firebrick\r\n];\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\npalette.secondaryColors = {\r\n [StructuralElementType.HELIX_ALPHA]: 0xFF0080,\r\n [StructuralElementType.HELIX_PI]: 0x600080,\r\n [StructuralElementType.HELIX_310]: 0xA00080,\r\n [StructuralElementType.STRAND]: 0xFFC800,\r\n [StructuralElementType.TURN]: 0x6080FF,\r\n dna: 0xAE00FE,\r\n rna: 0xFD0162,\r\n};\r\n\r\nexport default palette;\r\n","import Palette from './Palette';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst palette = new Palette('VMD', 'VM');\r\n\r\npalette.colors = [\r\n /* eslint-disable no-magic-numbers */\r\n 0x0000FF, // blue\r\n 0xFF0000, // red\r\n 0x606060, // gray\r\n 0xFF8000, // orange\r\n 0xFFFF00, // yellow\r\n 0x808033, // tan\r\n 0x999999, // silver\r\n 0x00FF00, // green\r\n 0xFFFFFF, // white\r\n 0xFF9999, // pink\r\n 0x40C0C0, // cyan\r\n 0xA600A6, // purple\r\n 0x80E666, // lime\r\n 0xE666B3, // mauve\r\n 0x804D00, // ochre\r\n 0x8080C0, // ice blue\r\n /* eslint-enable no-magic-numbers */\r\n];\r\n\r\npalette.defaultElementColor = 0x804D00;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n /* eslint-disable no-magic-numbers */\r\n H: 0xFFFFFF,\r\n C: 0x40BFBF,\r\n N: 0x0000FF,\r\n O: 0xFF0000,\r\n P: 0x808033,\r\n S: 0xFFFF00,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\npalette.defaultResidueColor = 0x40C0C0;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\npalette.residueColors = {\r\n /* eslint-disable no-magic-numbers */\r\n ALA: 0x0000FF,\r\n ARG: 0xFFFFFF,\r\n ASN: 0x808033,\r\n ASP: 0xFF0000,\r\n CYS: 0xFFFF00,\r\n GLN: 0xFF8000,\r\n GLU: 0xFF9999,\r\n GLY: 0xFFFFFF,\r\n HIS: 0x40C0C0,\r\n ILE: 0x00FF00,\r\n LEU: 0xFF9999,\r\n LYS: 0x40C0C0,\r\n MET: 0xFFFF00,\r\n PHE: 0xA600A6,\r\n PRO: 0x804C00,\r\n SER: 0xFFFF00,\r\n THR: 0xE666B3,\r\n TRP: 0x999999,\r\n TYR: 0x00FF00,\r\n VAL: 0x808033,\r\n A: 0x0000FF,\r\n C: 0xFF8000,\r\n G: 0xFFFF00,\r\n T: 0xA600A6,\r\n U: 0x00FF00,\r\n DA: 0x0000FF,\r\n DC: 0xFF8000,\r\n DG: 0xFFFF00,\r\n DT: 0xA600A6,\r\n DU: 0x00FF00,\r\n '+A': 0x0000FF,\r\n '+C': 0xFF8000,\r\n '+G': 0xFFFF00,\r\n '+T': 0xA600A6,\r\n '+U': 0x00FF00,\r\n WAT: 0x40C0C0,\r\n H2O: 0x40C0C0,\r\n HOH: 0x40C0C0,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\npalette.chainColors = [0xFFFFFF].concat(palette.colors);\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\npalette.secondaryColors = {\r\n [StructuralElementType.HELIX_ALPHA]: 0xA600A6,\r\n [StructuralElementType.HELIX_310]: 0x0000FF,\r\n [StructuralElementType.HELIX_PI]: 0xFF0000,\r\n [StructuralElementType.STRAND]: 0xFFFF00,\r\n [StructuralElementType.BRIDGE]: 0x808033,\r\n [StructuralElementType.TURN]: 0x40C0C0,\r\n};\r\n\r\nexport default palette;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport cpkPalette from './palettes/cpkPalette';\r\nimport jmolPalette from './palettes/jmolPalette';\r\nimport vmdPalette from './palettes/vmdPalette';\r\n\r\nconst palettes = new EntityList([\r\n cpkPalette,\r\n jmolPalette,\r\n vmdPalette,\r\n]);\r\n\r\nexport default palettes;\r\n","import _ from 'lodash';\r\nimport settings from '../../settings';\r\nimport utils from '../../utils';\r\nimport palettes from '../palettes';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the colorer after its creation.\r\n *\r\n * @exports Colorer\r\n * @this Colorer\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all available coloring algorithms used for building and displaying molecule geometry.\r\n */\r\nclass Colorer {\r\n constructor(opts) {\r\n if (this.constructor === Colorer) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Colorer options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.opts = _.merge(utils.deriveDeep(settings.now.colorers[this.id], true), opts);\r\n /**\r\n * Palette in use.\r\n * @type {Palette}\r\n */\r\n this.palette = palettes.first;\r\n }\r\n\r\n /**\r\n * Get Colorer identification, probably with options.\r\n * @returns {string|Array} Colorer identifier string ({@link Colorer#id}) or two-element array containing both colorer\r\n * identifier and options ({@link Colorer#opts}).\r\n * Options are returned if they were changed during or after colorer creation.\r\n */\r\n identify() {\r\n const diff = utils.objectsDiff(this.opts, settings.now.colorers[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n return [this.id, diff];\r\n }\r\n return this.id;\r\n }\r\n}\r\n\r\n/**\r\n * Colorer identifier.\r\n * @type {string}\r\n */\r\n\r\nColorer.prototype.id = '__';\r\n\r\nexport default Colorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Element\r\n *\r\n * @exports ElementColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Coloring algorithm based on chemical element.\r\n */\r\nclass ElementColorer extends Colorer {\r\n static id = 'EL';\r\n\r\n getAtomColor(atom, _complex) {\r\n const type = atom.element.name;\r\n if (type === 'C' && this.opts.carbon >= 0) {\r\n return this.opts.carbon;\r\n }\r\n return this.palette.getElementColor(type);\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.palette.defaultResidueColor;\r\n }\r\n}\r\n\r\nElementColorer.prototype.id = 'EL';\r\nElementColorer.prototype.name = 'Element';\r\nElementColorer.prototype.shortName = 'Element';\r\n\r\nexport default ElementColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Coloring algorithm based on residue type.\r\n *\r\n * @see ResidueType\r\n *\r\n * @exports ResidueTypeColorer\r\n * @constructor\r\n */\r\nclass ResidueTypeColorer extends Colorer {\r\n static id = 'RT';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n return this.palette.getResidueColor(residue._type._name);\r\n }\r\n}\r\n\r\nResidueTypeColorer.prototype.id = 'RT';\r\nResidueTypeColorer.prototype.name = 'Residue Type';\r\nResidueTypeColorer.prototype.shortName = 'Residue';\r\n\r\nexport default ResidueTypeColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass SequenceColorer extends Colorer {\r\n static id = 'SQ';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const chain = residue._chain;\r\n if (chain.minSequence === Number.POSITIVE_INFINITY && chain.maxSequence === Number.NEGATIVE_INFINITY) {\r\n return this.palette.defaultNamedColor;\r\n }\r\n const min = chain.minSequence;\r\n const max = chain.maxSequence > min ? chain.maxSequence : min + 1;\r\n return this.palette.getGradientColor((residue._sequence - min) / (max - min), this.opts.gradient);\r\n }\r\n}\r\n\r\nSequenceColorer.prototype.id = 'SQ';\r\nSequenceColorer.prototype.name = 'Sequence';\r\nSequenceColorer.prototype.shortName = 'Sequence';\r\n\r\nexport default SequenceColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass ChainColorer extends Colorer {\r\n static id = 'CH';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n return this.palette.getChainColor(residue.getChain()._name);\r\n }\r\n}\r\n\r\nChainColorer.prototype.id = 'CH';\r\nChainColorer.prototype.name = 'Chain';\r\nChainColorer.prototype.shortName = 'Chain';\r\n\r\nexport default ChainColorer;\r\n","import Colorer from './Colorer';\r\nimport ResidueType from '../../chem/ResidueType';\r\n\r\nclass SecondaryStructureColorer extends Colorer {\r\n static id = 'SS';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n if (residue._type.flags & ResidueType.Flags.DNA) {\r\n return this.palette.getSecondaryColor('dna');\r\n }\r\n if (residue._type.flags & ResidueType.Flags.RNA) {\r\n return this.palette.getSecondaryColor('rna');\r\n }\r\n const secondary = residue.getSecondary();\r\n if (secondary) {\r\n let color = this.palette.getSecondaryColor(secondary.type, true);\r\n if (color === undefined) {\r\n color = this.palette.getSecondaryColor(secondary.generic);\r\n }\r\n return color;\r\n }\r\n return this.palette.defaultSecondaryColor;\r\n }\r\n}\r\n\r\nSecondaryStructureColorer.prototype.id = 'SS';\r\nSecondaryStructureColorer.prototype.name = 'Secondary Structure';\r\nSecondaryStructureColorer.prototype.shortName = 'Structure';\r\n\r\nexport default SecondaryStructureColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass UniformColorer extends Colorer {\r\n static id = 'UN';\r\n\r\n getAtomColor(_atom, _complex) {\r\n return this.opts.color;\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nUniformColorer.prototype.id = 'UN';\r\nUniformColorer.prototype.name = 'Uniform';\r\nUniformColorer.prototype.shortName = 'Uniform';\r\n\r\nexport default UniformColorer;\r\n","import Colorer from './Colorer';\r\nimport selectors from '../../chem/selectors';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @exports ConditionalColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Bicolor coloring algorithm based on a selector string used as a condition.\r\n */\r\nclass ConditionalColorer extends Colorer {\r\n static id = 'CO';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n const parsed = selectors.parse(this.opts.subset);\r\n this._subsetCached = parsed.error ? selectors.none() : parsed.selector;\r\n }\r\n\r\n getAtomColor(atom, _complex) {\r\n return this._subsetCached.includesAtom(atom) ? this.opts.color : this.opts.baseColor;\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const subset = this._subsetCached;\r\n const atoms = residue._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n if (!subset.includesAtom(atoms[i])) {\r\n return this.opts.baseColor;\r\n }\r\n }\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nConditionalColorer.prototype.id = 'CO';\r\nConditionalColorer.prototype.name = 'Conditional';\r\nConditionalColorer.prototype.shortName = 'Conditional';\r\n\r\nexport default ConditionalColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass ConformationColorer extends Colorer {\r\n static id = 'CF';\r\n\r\n getAtomColor(atom, _complex) {\r\n return this.palette.getChainColor(String.fromCharCode(atom.location));\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.palette.defaultResidueColor;\r\n }\r\n}\r\n\r\nConformationColorer.prototype.id = 'CF';\r\nConformationColorer.prototype.name = 'Conformation';\r\nConformationColorer.prototype.shortName = 'Conformation';\r\n\r\nexport default ConformationColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Temperature\r\n *\r\n * @exports TemperatureColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Coloring algorithm based on temperature of chemical element.\r\n */\r\nclass TemperatureColorer extends Colorer {\r\n static id = 'TM';\r\n\r\n getAtomColor(atom, _complex) {\r\n const { opts } = this;\r\n let factor = 1;\r\n if (atom.temperature && opts) {\r\n if (opts.min === opts.max) {\r\n factor = atom.temperature > opts.max ? 1 : 0;\r\n } else {\r\n factor = (atom.temperature - opts.min) / (opts.max - opts.min);\r\n }\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const { opts } = this;\r\n if (!opts) {\r\n return this.palette.defaultGradientColor;\r\n }\r\n if (residue.temperature) {\r\n let factor = 0;\r\n if (opts.min === opts.max) {\r\n factor = residue.temperature > opts.max ? 1 : 0;\r\n } else {\r\n factor = (residue.temperature - opts.min) / (opts.max - opts.min);\r\n }\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n}\r\n\r\nTemperatureColorer.prototype.id = 'TM'; // [T]e[M]perature\r\nTemperatureColorer.prototype.name = 'Temperature';\r\nTemperatureColorer.prototype.shortName = 'Temperature';\r\n\r\nexport default TemperatureColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Occupancy\r\n *\r\n * @exports OccupancyColorer\r\n * @augments Occupancy\r\n * @constructor\r\n * @classdesc Coloring algorithm based on occupancy of chemical element.\r\n */\r\nclass OccupancyColorer extends Colorer {\r\n static id = 'OC';\r\n\r\n _getColorByOccupancy(occupancy, opts) {\r\n if (occupancy !== undefined) {\r\n const factor = 1 - occupancy;\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n\r\n getAtomColor(atom, _complex) {\r\n const { opts } = this;\r\n return this._getColorByOccupancy(atom.occupancy, opts);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const { opts } = this;\r\n return this._getColorByOccupancy(residue.occupancy, opts);\r\n }\r\n}\r\n\r\nOccupancyColorer.prototype.id = 'OC'; // [OC]cupancy\r\nOccupancyColorer.prototype.name = 'Occupancy';\r\nOccupancyColorer.prototype.shortName = 'Occupancy';\r\n\r\nexport default OccupancyColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass HydrophobicityColorer extends Colorer {\r\n static id = 'HY';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n let color = this.palette.defaultResidueColor;\r\n if (residue._type.hydrophobicity !== undefined) {\r\n // Kyte Doolitle hydro [-4.5,4.5]->[0.1]\r\n const min = -4.5;\r\n const max = 4.5;\r\n color = this.palette.getGradientColor((residue._type.hydrophobicity - min) / (max - min), this.opts.gradient);\r\n }\r\n return color;\r\n }\r\n}\r\n\r\nHydrophobicityColorer.prototype.id = 'HY';\r\nHydrophobicityColorer.prototype.name = 'Hydrophobicity';\r\nHydrophobicityColorer.prototype.shortName = 'Hydrophobicity';\r\n\r\nexport default HydrophobicityColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass MoleculeColorer extends Colorer {\r\n static id = 'MO';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const molecule = residue._molecule;\r\n const count = _complex.getMoleculeCount();\r\n if (count > 1) {\r\n return this.palette.getGradientColor((molecule.index - 1) / (count - 1), this.opts.gradient);\r\n }\r\n return this.palette.getGradientColor(0, this.opts.gradient);\r\n }\r\n}\r\n\r\nMoleculeColorer.prototype.id = 'MO';\r\nMoleculeColorer.prototype.name = 'Molecule';\r\nMoleculeColorer.prototype.shortName = 'Molecule';\r\n\r\nexport default MoleculeColorer;\r\n","import Colorer from './Colorer';\r\nimport Atom from '../../chem/Atom';\r\n\r\nfunction scaleColor(c, factor) {\r\n const r1 = (c >> 16) & 0xff;\r\n const g1 = (c >> 8) & 0xff;\r\n const b1 = c & 0xff;\r\n const r = factor * r1;\r\n const g = factor * g1;\r\n const b = factor * b1;\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @exports CarbonColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Bicolor coloring algorithm based on selection carbon atoms.\r\n */\r\nclass CarbonColorer extends Colorer {\r\n static id = 'CB';\r\n\r\n getAtomColor(atom, _complex) {\r\n const colorCarbon = this.opts.color;\r\n const colorNotCarbon = scaleColor(colorCarbon, this.opts.factor);\r\n return (atom.flags & Atom.Flags.CARBON) ? colorCarbon : colorNotCarbon;\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nCarbonColorer.prototype.id = 'CB';\r\nCarbonColorer.prototype.name = 'Carbon';\r\nCarbonColorer.prototype.shortName = 'Carbon';\r\n\r\nexport default CarbonColorer;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport ElementColorer from './colorers/ElementColorer';\r\nimport ResidueTypeColorer from './colorers/ResidueTypeColorer';\r\nimport SequenceColorer from './colorers/SequenceColorer';\r\nimport ChainColorer from './colorers/ChainColorer';\r\nimport SecondaryStructureColorer from './colorers/SecondaryStructureColorer';\r\nimport UniformColorer from './colorers/UniformColorer';\r\nimport ConditionalColorer from './colorers/ConditionalColorer';\r\nimport ConformationColorer from './colorers/ConformationColorer';\r\nimport TemperatureColorer from './colorers/TemperatureColorer';\r\nimport OccupancyColorer from './colorers/OccupancyColorer';\r\nimport HydrophobicityColorer from './colorers/HydrophobicityColorer';\r\nimport MoleculeColorer from './colorers/MoleculeColorer';\r\nimport CarbonColorer from './colorers/CarbonColorer';\r\n\r\nconst colorers = new EntityList([\r\n ElementColorer,\r\n ResidueTypeColorer,\r\n SequenceColorer,\r\n ChainColorer,\r\n SecondaryStructureColorer,\r\n UniformColorer,\r\n ConditionalColorer,\r\n ConformationColorer,\r\n TemperatureColorer,\r\n OccupancyColorer,\r\n HydrophobicityColorer,\r\n MoleculeColorer,\r\n CarbonColorer,\r\n]);\r\n\r\nexport default colorers;\r\n","import * as THREE from 'three';\r\nimport EntityList from '../utils/EntityList';\r\n\r\nfunction neutralColor(intensity) {\r\n return new THREE.Color(intensity, intensity, intensity);\r\n}\r\n\r\nconst materialList = [\r\n {\r\n id: 'DF',\r\n name: 'Diffuse',\r\n shortName: 'Diffuse',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'SF',\r\n name: 'Soft Plastic',\r\n shortName: 'Soft',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.1),\r\n shininess: 30,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'PL',\r\n name: 'Glossy Plastic',\r\n shortName: 'Glossy',\r\n uberOptions: {\r\n diffuse: neutralColor(0.56),\r\n specular: neutralColor(0.28),\r\n shininess: 100,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'ME',\r\n name: 'Metal',\r\n shortName: 'Metal',\r\n uberOptions: {\r\n diffuse: neutralColor(0.56),\r\n specular: neutralColor(0.55),\r\n shininess: 30,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'TR',\r\n name: 'Transparent',\r\n shortName: 'Transparent',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 0.5,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: true,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'GL',\r\n name: 'Glass',\r\n shortName: 'Glass',\r\n uberOptions: {\r\n diffuse: neutralColor(0.50),\r\n specular: neutralColor(0.65),\r\n shininess: 100,\r\n opacity: 0.5,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: true,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'BA',\r\n name: 'Backdrop',\r\n shortName: 'Backdrop',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: false,\r\n fog: false,\r\n depthWrite: false,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'TN',\r\n name: 'Toon',\r\n shortName: 'Toon',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: true,\r\n },\r\n }, {\r\n id: 'FL',\r\n name: 'Flat',\r\n shortName: 'Flat',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 0,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: false,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n },\r\n },\r\n];\r\n\r\nconst materials = new EntityList(materialList);\r\n\r\nexport default materials;\r\n","/**\r\n * Utils functions which is worked with meshes\r\n *\r\n * functions for doing something with all/specified meshes\r\n * functions for traversihg tree and create auxiliary meshes for transparency/shadowmaps...\r\n * functions for calculating data connected with meshes\r\n */\r\nimport * as THREE from 'three';\r\nimport UberMaterial from './shaders/UberMaterial';\r\nimport gfxutils from './gfxutils';\r\n\r\nfunction _gatherObjects(root, meshTypes) {\r\n const meshes = [];\r\n root.traverse((object) => {\r\n for (let i = 0; i < meshTypes.length; i++) {\r\n if (object instanceof meshTypes[i]) {\r\n meshes[meshes.length] = object;\r\n break;\r\n }\r\n }\r\n });\r\n return meshes;\r\n}\r\n\r\n// new mesh with the same geometry and specified material values and layer\r\nfunction createDerivativeMesh(mesh, values, layer) {\r\n const material = mesh.material.createInstance();\r\n material.setValues(values);\r\n\r\n const newMesh = new mesh.constructor(mesh.geometry, material);\r\n newMesh.material.needsUpdate = true;\r\n newMesh.applyMatrix4(mesh.matrix);\r\n newMesh.layers.set(layer);\r\n return newMesh;\r\n}\r\n\r\nfunction traverseMeshes(root, meshTypes, func) {\r\n const meshes = _gatherObjects(root, meshTypes);\r\n\r\n for (let i = 0, n = meshes.length; i < n; ++i) {\r\n const mesh = meshes[i];\r\n if (!mesh.parent) {\r\n continue;\r\n }\r\n func(mesh);\r\n }\r\n}\r\n\r\nfunction applyTransformsToMeshes(root, mtc) {\r\n const mtcCount = mtc.length;\r\n if (mtcCount < 1) {\r\n return;\r\n }\r\n\r\n const meshTypes = [THREE.Mesh, THREE.LineSegments, THREE.Line];\r\n traverseMeshes(root, meshTypes, (mesh) => {\r\n mesh.applyMatrix4(mtc[0]);\r\n for (let j = 1; j < mtcCount; ++j) {\r\n const newMesh = new mesh.constructor(mesh.geometry, mesh.material);\r\n mesh.parent.add(newMesh);\r\n newMesh.applyMatrix4(mtc[j]);\r\n }\r\n });\r\n}\r\n\r\nconst processTransparentMaterial = (function () {\r\n const matValues = {\r\n prepassTransparancy: true,\r\n fakeOpacity: false,\r\n transparent: false,\r\n colorFromDepth: false,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n mesh.material.setValues({ prepassTransparancy: false, fakeOpacity: false });\r\n mesh.material.needsUpdate = true;\r\n mesh.layers.set(gfxutils.LAYERS.TRANSPARENT);\r\n\r\n const prepassTranspMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.PREPASS_TRANSPARENT);\r\n mesh.parent.add(prepassTranspMesh);\r\n });\r\n };\r\n}());\r\n\r\nconst processColFromPosMaterial = (function () {\r\n const matValues = {\r\n colorFromPos: true,\r\n transparent: false,\r\n colorFromDepth: false,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n overrideColor: false,\r\n fogTransparent: false,\r\n attrColor: false,\r\n attrColor2: false,\r\n attrAlphaColor: false,\r\n fakeOpacity: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n const colFromPosMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.COLOR_FROM_POSITION);\r\n mesh.parent.add(colFromPosMesh);\r\n });\r\n };\r\n}());\r\n\r\nconst createShadowmapMaterial = (function () {\r\n const matValues = {\r\n colorFromDepth: true,\r\n orthoCam: true,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n if (!mesh.receiveShadow && mesh.material.shadowmap) { // remove shadow from non-receivers\r\n mesh.material.setValues({ shadowmap: false });\r\n }\r\n if (!mesh.material.lights) { // skip creating shadowmap meshes for materials without lighting\r\n return;\r\n }\r\n if (!mesh.castShadow) { // skip creating shadowmap meshes for non-casters\r\n return;\r\n }\r\n if (!gfxutils.belongToSelectLayers(mesh)) { // skip creating shadowmap meshes for selection layer\r\n return;\r\n }\r\n\r\n const shadowmapMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.SHADOWMAP);\r\n shadowmapMesh.isShadowmapMesh = true;\r\n mesh.parent.add(shadowmapMesh);\r\n });\r\n };\r\n}());\r\n\r\nfunction removeShadowmapMaterial(root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n if (mesh.isShadowmapMesh) {\r\n mesh.parent.remove(mesh);\r\n }\r\n });\r\n}\r\n\r\nfunction forEachMeshInGroup(group, process) {\r\n function processObj(object) {\r\n if (object instanceof THREE.Mesh) {\r\n process(object);\r\n }\r\n for (let i = 0, l = object.children.length; i < l; i++) {\r\n processObj(object.children[i]);\r\n }\r\n }\r\n processObj(group);\r\n}\r\n\r\nfunction _countMeshTriangles(mesh) {\r\n const geom = mesh.geometry;\r\n if (geom instanceof THREE.InstancedBufferGeometry) {\r\n const attribs = geom.attributes;\r\n for (const property in attribs) {\r\n if (attribs.hasOwnProperty(property) && attribs[property] instanceof THREE.InstancedBufferAttribute) {\r\n const currAttr = attribs[property];\r\n const indexSize = geom.index ? geom.index.array.length / 3 : 0;\r\n return indexSize * currAttr.array.length / currAttr.itemSize;\r\n }\r\n }\r\n return 0;\r\n }\r\n if (geom instanceof THREE.BufferGeometry) {\r\n return geom.index ? geom.index.array.length / 3 : 0;\r\n }\r\n return geom.faces ? geom.faces.length : 0;\r\n}\r\n\r\nfunction countTriangles(group) {\r\n let totalCount = 0;\r\n forEachMeshInGroup(group, (mesh) => {\r\n totalCount += _countMeshTriangles(mesh);\r\n });\r\n return totalCount;\r\n}\r\n\r\nexport default {\r\n applyTransformsToMeshes,\r\n processTransparentMaterial,\r\n processColFromPosMaterial,\r\n createShadowmapMaterial,\r\n removeShadowmapMaterial,\r\n forEachMeshInGroup,\r\n countTriangles,\r\n};\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport UberMaterial from './shaders/UberMaterial';\r\nimport gfxutils from './gfxutils';\r\nimport meshutils from './meshutils';\r\nimport settings from '../settings';\r\nimport materials from './materials';\r\nimport chem from '../chem';\r\n\r\nconst { selectors } = chem;\r\n\r\nclass Representation {\r\n constructor(index, mode, colorer, selector) {\r\n const startMaterialValues = {\r\n clipPlane: settings.now.draft.clipPlane,\r\n fogTransparent: settings.now.bg.transparent,\r\n shadowmap: settings.now.shadow.on,\r\n shadowmapType: settings.now.shadow.type,\r\n };\r\n this.index = index;\r\n this.mode = mode;\r\n this.colorer = colorer;\r\n this.selector = selector;\r\n this.selectorString = '';\r\n this.count = 0;\r\n this.material = new UberMaterial();\r\n this.material.setValues(startMaterialValues);\r\n this.material.setUberOptions({ fogAlpha: settings.now.fogAlpha });\r\n this.materialPreset = materials.first;\r\n this.needsRebuild = true;\r\n this.visible = true;\r\n\r\n // apply mode params & preset\r\n this.setMode(mode);\r\n }\r\n\r\n markAtoms(complex) {\r\n this.count = complex.markAtoms(this.selector, 1 << this.index);\r\n this.needsRebuild = true;\r\n return this.count;\r\n }\r\n\r\n unmarkAtoms(complex) {\r\n complex.clearAtomBits(1 << this.index);\r\n this.count = 0;\r\n }\r\n\r\n setMode(mode) {\r\n this.mode = mode;\r\n }\r\n\r\n setMaterialPreset(preset) {\r\n this.materialPreset = preset;\r\n this.material.setUberOptions(preset.uberOptions);\r\n this.material.setValues(preset.values);\r\n }\r\n\r\n reset() {\r\n this.geo = null;\r\n this.selectionGeo = null;\r\n }\r\n\r\n buildGeometry(complex) {\r\n this.reset();\r\n this.needsRebuild = false;\r\n\r\n if (settings.now.ao) {\r\n this.material.setValues({ normalsToGBuffer: settings.now.ao });\r\n }\r\n\r\n this.geo = this.mode.buildGeometry(complex, this.colorer, 1 << this.index, this.material);\r\n\r\n if (this.material.uberOptions.opacity < 0.99 && settings.now.transparency === 'prepass') {\r\n meshutils.processTransparentMaterial(this.geo, this.material);\r\n }\r\n this.geo.visible = this.visible;\r\n\r\n gfxutils.processObjRenderOrder(this.geo, this.materialPreset.id);\r\n meshutils.processColFromPosMaterial(this.geo, this.material);\r\n\r\n if (settings.now.shadow.on) {\r\n meshutils.createShadowmapMaterial(this.geo, this.material);\r\n }\r\n\r\n return this.geo;\r\n }\r\n\r\n buildSelectionGeometry(mask) {\r\n let sg = null;\r\n\r\n if (this.geo && ('getSubset' in this.geo)) {\r\n const meshes = this.geo.getSubset(mask);\r\n if (meshes && meshes.length > 0) {\r\n sg = new THREE.Group();\r\n sg.matrixAutoUpdate = false;\r\n sg.matrix = this.geo.matrix;\r\n\r\n for (let j = 0; j < meshes.length; j++) {\r\n const m = meshes[j];\r\n sg.add(m);\r\n }\r\n }\r\n }\r\n\r\n if (sg) {\r\n sg.visible = this.visible;\r\n }\r\n\r\n this.selectionGeo = sg;\r\n return this.selectionGeo;\r\n }\r\n\r\n /**\r\n * Create object that represents difference between current and another rep\r\n * anotherRep could be undefined. In this case everything is reported.\r\n */\r\n compare(repSettings) {\r\n const diff = {};\r\n\r\n const selStr = String(this.selector);\r\n if (!repSettings || selStr.valueOf() !== String(repSettings.selector).valueOf()) {\r\n diff.selector = selStr;\r\n }\r\n\r\n const modeDiff = this.mode.identify();\r\n if (!repSettings || Array.isArray(modeDiff) || modeDiff !== repSettings.mode) {\r\n diff.mode = modeDiff;\r\n }\r\n\r\n const colorerDiff = this.colorer.identify();\r\n if (!repSettings || Array.isArray(colorerDiff) || colorerDiff !== repSettings.colorer) {\r\n diff.colorer = colorerDiff;\r\n }\r\n\r\n if (!repSettings || this.materialPreset.id !== repSettings.material) {\r\n diff.material = this.materialPreset.id;\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n /**\r\n * Change representation. Write fields what was changed into new object, return it.\r\n */\r\n change(repSettings, complex, mode, color) {\r\n const diff = {};\r\n\r\n // modify selector\r\n if (repSettings.selector) {\r\n const newSelectorObject = selectors.parse(repSettings.selector).selector;\r\n const newSelector = String(newSelectorObject);\r\n if (this.selectorString !== newSelector) {\r\n diff.selector = newSelector;\r\n this.selectorString = newSelector;\r\n this.selector = newSelectorObject;\r\n this.markAtoms(complex);\r\n }\r\n }\r\n\r\n // modify mode\r\n if (repSettings.mode) {\r\n const newMode = repSettings.mode;\r\n if (!_.isEqual(this.mode.identify(), newMode)) {\r\n diff.mode = newMode;\r\n this.setMode(mode);\r\n }\r\n }\r\n\r\n // modify colorer\r\n if (repSettings.colorer) {\r\n const newColorer = repSettings.colorer;\r\n if (!_.isEqual(this.colorer.identify(), newColorer)) {\r\n diff.colorer = newColorer;\r\n this.colorer = color;\r\n }\r\n }\r\n\r\n // modify material\r\n if (repSettings.material) {\r\n const newMaterial = repSettings.material;\r\n if (!_.isEqual(this.materialPreset.id, newMaterial)) {\r\n diff.material = newMaterial;\r\n this.setMaterialPreset(materials.get(repSettings.material));\r\n }\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n show(visible) {\r\n this.visible = visible;\r\n if (this.geo) {\r\n this.geo.visible = visible;\r\n }\r\n if (this.selectionGeo) {\r\n this.selectionGeo.visible = visible;\r\n }\r\n }\r\n}\r\n\r\nexport default Representation;\r\n","import * as THREE from 'three';\r\nimport logger from './utils/logger';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport './gfx/modes';\r\n\r\nfunction _traverseComponentGroups(root, component, callback) {\r\n const { children } = root;\r\n if (!children) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n if (child._component === component) {\r\n callback(child);\r\n }\r\n if (child instanceof gfxutils.RCGroup) {\r\n _traverseComponentGroups(child, component, callback);\r\n }\r\n }\r\n}\r\n\r\nfunction ComplexEditor() {\r\n}\r\n\r\nclass ComplexComponentEditor extends ComplexEditor {\r\n constructor(complexVisual) {\r\n super();\r\n this._complexVisual = complexVisual;\r\n this._inProgress = false;\r\n }\r\n\r\n begin() {\r\n const complex = this._complexVisual.getComplex();\r\n\r\n // init component matrices\r\n this._componentTransforms = [];\r\n for (let i = 0; i < complex._components.length; ++i) {\r\n const component = complex._components[i];\r\n this._componentTransforms[component._index] = new THREE.Object3D();\r\n }\r\n\r\n this._inProgress = true;\r\n\r\n return true;\r\n }\r\n\r\n apply() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const complex = this._complexVisual.getComplex();\r\n\r\n for (let i = 0; i < complex._components.length; ++i) {\r\n this._bakeComponentTransform(complex._components[i]);\r\n }\r\n\r\n complex.onAtomPositionChanged();\r\n\r\n this._resetComponentTransform();\r\n\r\n this._complexVisual.finalizeEdit();\r\n }\r\n\r\n discard() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n this._resetComponentTransform();\r\n\r\n this._complexVisual.finalizeEdit();\r\n }\r\n\r\n getAltObj() {\r\n const res = {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n\r\n const visual = this._complexVisual;\r\n const component = visual.getSelectedComponent();\r\n\r\n if (component === null) {\r\n return res;\r\n }\r\n\r\n const selection = this._complexVisual.getSelectionGeo();\r\n const selectionMask = 1 << visual.getSelectionBit();\r\n let i;\r\n let j;\r\n let reprNode;\r\n let geo;\r\n\r\n // find all geo nodes for this component\r\n _traverseComponentGroups(visual, component, (child) => {\r\n res.objects.push(child);\r\n });\r\n\r\n // find all selection nodes for this component\r\n for (i = 0; i < selection.children.length; ++i) {\r\n reprNode = selection.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component') && geo._component === component) {\r\n res.objects.push(geo);\r\n }\r\n }\r\n }\r\n\r\n // add dummy object that stores component transformation\r\n res.objects.push(this._componentTransforms[component._index]);\r\n\r\n const bbmin = new THREE.Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n const bbmax = new THREE.Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n\r\n component.forEachResidue((residue) => {\r\n const atoms = residue._atoms;\r\n for (j = 0; j < atoms.length; ++j) {\r\n if (atoms[j].mask & selectionMask) {\r\n bbmin.min(atoms[j].position);\r\n bbmax.max(atoms[j].position);\r\n }\r\n }\r\n });\r\n\r\n res.pivot.lerpVectors(bbmin, bbmax, 0.5);\r\n return res;\r\n }\r\n\r\n _bakeComponentTransform(component) {\r\n const t = this._componentTransforms[component._index];\r\n if (t && (!(t.position.x === 0 && t.position.y === 0 && t.position.z === 0)\r\n || !(t.quaternion.x === 0 && t.quaternion.y === 0 && t.quaternion.z === 0 && t.quaternion.w === 1))) {\r\n t.updateMatrix();\r\n\r\n component.forEachResidue((residue) => {\r\n const atoms = residue._atoms;\r\n for (let j = 0; j < atoms.length; ++j) {\r\n atoms[j].position.applyMatrix4(t.matrix);\r\n }\r\n });\r\n }\r\n }\r\n\r\n _resetComponentTransform() {\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n let i;\r\n let j;\r\n let reprNode;\r\n let geo;\r\n\r\n for (i = 0; i < this._componentTransforms.length; ++i) {\r\n geo = this._componentTransforms[i];\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n\r\n // reset all geo nodes\r\n for (i = 0; i < visual.children.length; ++i) {\r\n reprNode = visual.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component')) {\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n }\r\n }\r\n\r\n // reset all selection nodes\r\n for (i = 0; i < selection.children.length; ++i) {\r\n reprNode = selection.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component')) {\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass ComplexFragmentEditor extends ComplexEditor {\r\n constructor(complexVisual) {\r\n super();\r\n this._complexVisual = complexVisual;\r\n this._inProgress = false;\r\n }\r\n\r\n begin() {\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n\r\n const atoms = this._getSelectionBorderAtoms();\r\n if (atoms.length < 1 || atoms.length > 2) {\r\n logger.error('Can only edit fragments with one or two bound atoms.');\r\n return false;\r\n }\r\n\r\n this._fragmentBoundAtoms = atoms;\r\n\r\n const selectionMask = 1 << visual.getSelectionBit();\r\n\r\n // hide selected fragment in main model\r\n visual.disableSubset(selectionMask, true);\r\n\r\n // hide selection geo in main model\r\n for (let k = 0; k < selection.children.length; ++k) {\r\n selection.children[k].visible = false;\r\n }\r\n\r\n // create visible fragment representation to rotate\r\n const pivotPos = atoms[0].position.clone();\r\n\r\n if (atoms.length === 2) {\r\n pivotPos.lerp(atoms[1].position, 0.5);\r\n }\r\n\r\n this._fragmentGeo = new THREE.Group();\r\n visual.add(this._fragmentGeo);\r\n this._fragmentGeo.position.copy(pivotPos);\r\n\r\n this._fragmentSelectionGeo = new THREE.Group();\r\n selection.add(this._fragmentSelectionGeo);\r\n this._fragmentSelectionGeo.position.copy(pivotPos);\r\n\r\n const offset = pivotPos.clone();\r\n offset.negate();\r\n\r\n for (let i = 0; i < visual.children.length; ++i) {\r\n const g = visual.children[i];\r\n if (!('getSubset' in g)) {\r\n continue;\r\n }\r\n\r\n const vg = new THREE.Group();\r\n this._fragmentGeo.add(vg);\r\n\r\n const sg = new THREE.Group();\r\n this._fragmentSelectionGeo.add(sg);\r\n\r\n const meshes = g.getSubset(selectionMask, true);\r\n for (let j = 0; j < meshes.length; j++) {\r\n const m = meshes[j];\r\n vg.add(m);\r\n m.position.copy(offset);\r\n }\r\n\r\n const smeshes = g.getSubset(selectionMask, true);\r\n for (let h = 0; h < smeshes.length; h++) {\r\n const sm = smeshes[h];\r\n sg.add(sm);\r\n sm.position.copy(offset);\r\n }\r\n }\r\n\r\n gfxutils.applySelectionMaterial(this._fragmentSelectionGeo);\r\n\r\n this._inProgress = true;\r\n return true;\r\n }\r\n\r\n apply() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const visual = this._complexVisual;\r\n const selectionBit = visual.getSelectionBit();\r\n\r\n const p = this._fragmentGeo.position;\r\n const m = this._fragmentGeo.matrix.clone();\r\n m.multiply(new THREE.Matrix4().makeTranslation(-p.x, -p.y, -p.z));\r\n\r\n this._bakeAtomTransform(m, 1 << selectionBit);\r\n\r\n // show selected fragment in main model\r\n visual.enableSubset(1 << selectionBit, true);\r\n\r\n visual.getComplex().onAtomPositionChanged();\r\n\r\n visual.finalizeEdit();\r\n }\r\n\r\n discard() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n\r\n this._fragmentGeo.parent.remove(this._fragmentGeo);\r\n\r\n // show selected fragment in main model\r\n visual.enableSubset(1 << visual.getSelectionBit(), true);\r\n\r\n // show selection geo in main model (+ remove fragment selection geo)\r\n for (let i = 0; i < selection.children.length; ++i) {\r\n const node = selection.children[i];\r\n if (node.visible) {\r\n selection.remove(node);\r\n } else {\r\n node.visible = true;\r\n }\r\n }\r\n\r\n visual.finalizeEdit();\r\n }\r\n\r\n isFreeRotationAllowed() {\r\n return (this._fragmentBoundAtoms.length < 2);\r\n }\r\n\r\n getAltObj() {\r\n const res = {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n\r\n res.objects.push(this._fragmentGeo, this._fragmentSelectionGeo);\r\n\r\n const boundAtoms = this._fragmentBoundAtoms;\r\n if (boundAtoms.length === 1) {\r\n if (boundAtoms[0].bonds.length === 1) {\r\n // single external bond allows rotation about bond axis\r\n const bond = boundAtoms[0].bonds[0];\r\n res.axis = new THREE.Vector3().subVectors(bond._right.position, bond._left.position);\r\n res.axis.normalize();\r\n res.axis.transformDirection(this._complexVisual.matrixWorld);\r\n }\r\n } else if (boundAtoms.length === 2) {\r\n // two bound atoms allow rotation only about axis running through their centers\r\n res.axis = new THREE.Vector3().subVectors(boundAtoms[1].position, boundAtoms[0].position);\r\n res.axis.normalize();\r\n res.axis.transformDirection(this._complexVisual.matrixWorld);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n _getSelectionBorderAtoms() {\r\n const complex = this._complexVisual.getComplex();\r\n\r\n const selectionMask = 1 << this._complexVisual.getSelectionBit();\r\n const atomHash = {};\r\n\r\n complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n atomHash[bond._left.index] = 1;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n atomHash[bond._right.index] = 1;\r\n }\r\n });\r\n\r\n const atoms = [];\r\n const keys = Object.keys(atomHash);\r\n for (let i = 0, n = keys.length; i < n; ++i) {\r\n const idx = keys[i];\r\n atoms.push(complex._atoms[idx]);\r\n }\r\n\r\n return atoms;\r\n }\r\n\r\n _bakeAtomTransform(matrix, mask) {\r\n this._complexVisual.getComplex().forEachAtom((atom) => {\r\n if (atom.mask & mask) {\r\n atom.position.applyMatrix4(matrix);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default {\r\n ComponentEditor: ComplexComponentEditor,\r\n FragmentEditor: ComplexFragmentEditor,\r\n};\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from './utils';\r\nimport logger from './utils/logger';\r\nimport chem from './chem';\r\nimport settings from './settings';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport modes from './gfx/modes';\r\nimport colorers from './gfx/colorers';\r\nimport palettes from './gfx/palettes';\r\nimport materials from './gfx/materials';\r\nimport Representation from './gfx/Representation';\r\nimport Visual from './Visual';\r\nimport ComplexVisualEdit from './ComplexVisualEdit';\r\nimport meshutils from './gfx/meshutils';\r\n\r\nconst { selectors } = chem;\r\n\r\nfunction lookupAndCreate(entityList, specs) {\r\n if (!Array.isArray(specs)) {\r\n specs = [specs];\r\n }\r\n const [id, opts] = specs;\r\n const Entity = entityList.get(id) || entityList.first;\r\n return new Entity(opts);\r\n}\r\n\r\nclass ComplexVisual extends Visual {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this._complex = dataSource;\r\n\r\n /** @type {Representation[]} */\r\n this._reprList = [];\r\n /** @type {?Representation} */\r\n this._repr = null;\r\n this._reprListChanged = true;\r\n\r\n this._selectionBit = 0;\r\n this._reprUsedBits = 0;\r\n this._selectionCount = 0;\r\n\r\n this._selectionGeometry = new THREE.Group();\r\n }\r\n\r\n getBoundaries() {\r\n return this._complex.getBoundaries();\r\n }\r\n\r\n release() {\r\n if (this._selectionGeometry.parent) {\r\n this._selectionGeometry.remove(this._selectionGeometry);\r\n }\r\n Visual.prototype.release.call(this);\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n getSelectionCount() {\r\n return this._selectionCount;\r\n }\r\n\r\n getSelectionGeo() {\r\n return this._selectionGeometry;\r\n }\r\n\r\n getSelectionBit() {\r\n return this._selectionBit;\r\n }\r\n\r\n getEditor() {\r\n return this._editor;\r\n }\r\n\r\n resetReps(reps) {\r\n // Create all necessary representations\r\n if (this._complex) {\r\n this._complex.clearAtomBits(~0);\r\n }\r\n this._reprListChanged = true;\r\n this._reprUsedBits = 0;\r\n this._reprList.length = reps.length;\r\n for (let i = 0, n = reps.length; i < n; ++i) {\r\n const rep = reps[i];\r\n\r\n let selector;\r\n let selectorString;\r\n if (typeof rep.selector === 'string') {\r\n selectorString = rep.selector;\r\n ({ selector } = selectors.parse(selectorString));\r\n } else if (typeof rep.selector === 'undefined') {\r\n selectorString = settings.now.presets.default[0].selector;\r\n ({ selector } = selectors.parse(selectorString));\r\n } else {\r\n ({ selector } = rep);\r\n selectorString = selector.toString();\r\n }\r\n const mode = lookupAndCreate(modes, rep.mode);\r\n const colorer = lookupAndCreate(colorers, rep.colorer);\r\n const material = materials.get(rep.material) || materials.first;\r\n\r\n this._reprList[i] = new Representation(i, mode, colorer, selector);\r\n this._reprList[i].setMaterialPreset(material);\r\n this._reprList[i].selectorString = selectorString;\r\n\r\n if (this._complex) {\r\n this._complex.markAtoms(selector, 1 << i);\r\n }\r\n\r\n this._reprUsedBits |= 1 << i;\r\n }\r\n this._repr = reps.length > 0 ? this._reprList[0] : null;\r\n\r\n this._selectionBit = reps.length;\r\n this._reprUsedBits |= 1 << this._selectionBit; // selection uses one bit\r\n this._selectionCount = 0;\r\n\r\n if (this._complex) {\r\n this._complex.update();\r\n }\r\n }\r\n\r\n /**\r\n * Get number of representations created so far.\r\n * @returns {number} Number of reps.\r\n */\r\n repCount() {\r\n return this._reprList.length;\r\n }\r\n\r\n /**\r\n * Get or set the current representation index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @returns {number} The current index.\r\n */\r\n repCurrent(index) {\r\n if (index >= 0 && index < this._reprList.length) {\r\n this._repr = this._reprList[index];\r\n } else {\r\n index = this._reprList.indexOf(this._repr);\r\n }\r\n return index;\r\n }\r\n\r\n /**\r\n * Get or set representation by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @param {object=} rep - Optional representation description.\r\n * @param {string=} rep.selector - Selector string.\r\n * @param {string=} rep.mode - Mode id.\r\n * @param {string=} rep.colorer - Colorer id.\r\n * @param {string=} rep.material - Material id.\r\n * @returns {Object} {desc, index, status} field desc contains rep description, index - index of correspondent rep,\r\n * status - one of three strings: 'created', 'changed', ''. 'created' means new rep was created during this function,\r\n * 'changed' - rep was changed during this function. '' - something else.\r\n */\r\n rep(index, rep) {\r\n // if index is missing then it is the current\r\n if (!rep && (index === undefined || index instanceof Object)) {\r\n rep = index;\r\n index = this.repCurrent();\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index > this._reprList.length) {\r\n logger.error(`Rep ${index} does not exist!`);\r\n return null;\r\n }\r\n\r\n // a special case of adding just after the end\r\n if (index === this._reprList.length) {\r\n const res = this.repAdd(rep);\r\n logger.warn(`Rep ${index} does not exist! New representation was created.`);\r\n return { desc: res.desc, index, status: 'created' };\r\n }\r\n\r\n // gather description\r\n const target = this._reprList[index];\r\n const desc = {\r\n selector: target.selectorString,\r\n mode: target.mode.identify(),\r\n colorer: target.colorer.identify(),\r\n material: target.materialPreset.id,\r\n };\r\n\r\n // modification is requested\r\n if (rep) {\r\n // modify\r\n const diff = target.change(\r\n rep,\r\n this._complex,\r\n lookupAndCreate(modes, rep.mode),\r\n lookupAndCreate(colorers, rep.colorer),\r\n );\r\n\r\n // something was changed\r\n if (!_.isEmpty(diff)) {\r\n target.needsRebuild = true;\r\n for (const key in diff) {\r\n if (diff.hasOwnProperty(key)) {\r\n desc[key] = diff[key];\r\n logger.debug(`rep[${index}].${key} changed to ${diff[key]}`);\r\n }\r\n }\r\n\r\n // safety trick: lower resolution for surface modes\r\n if (diff.mode && target.mode.isSurface\r\n && (settings.now.resolution === 'ultra' || settings.now.resolution === 'high')) {\r\n logger.report('Surface resolution was changed to \"medium\" to avoid hang-ups.');\r\n settings.set('resolution', 'medium');\r\n }\r\n return { desc, index, status: 'changed' };\r\n }\r\n }\r\n return { desc, index, status: '' };\r\n }\r\n\r\n /**\r\n * Get representation (not just description) by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @returns {?object} Representation.\r\n */\r\n repGet(index) {\r\n // if index is missing then it is the current\r\n if (index === undefined || index instanceof Object) {\r\n index = this.repCurrent();\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index >= this._reprList.length) {\r\n return null;\r\n }\r\n\r\n return this._reprList[index];\r\n }\r\n\r\n _getFreeReprIdx() {\r\n let bits = this._reprUsedBits;\r\n for (let i = 0; i <= ComplexVisual.NUM_REPRESENTATION_BITS; ++i, bits >>= 1) {\r\n if ((bits & 1) === 0) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * Add new representation.\r\n * @param {object=} rep - Representation description.\r\n * @returns {Object} {desc, index} field desc contains added rep description, index - index of this rep.\r\n */\r\n repAdd(rep) {\r\n if (this._reprList.length >= ComplexVisual.NUM_REPRESENTATION_BITS) {\r\n return null;\r\n }\r\n\r\n const newSelectionBit = this._getFreeReprIdx();\r\n if (newSelectionBit < 0) {\r\n return null; // no more slots for representations\r\n }\r\n\r\n const originalSelection = this.buildSelectorFromMask(1 << this._selectionBit);\r\n\r\n // Fill in default values\r\n const def = settings.now.presets.default[0];\r\n const desc = _.merge({\r\n selector: def.selector,\r\n mode: def.mode,\r\n colorer: def.colorer,\r\n material: def.material,\r\n }, rep);\r\n\r\n const selector = (typeof desc.selector === 'string') ? selectors.parse(desc.selector).selector : desc.selector;\r\n const target = new Representation(\r\n this._selectionBit,\r\n lookupAndCreate(modes, desc.mode),\r\n lookupAndCreate(colorers, desc.colorer),\r\n selector,\r\n );\r\n target.selectorString = selector.toString();\r\n target.setMaterialPreset(materials.get(desc.material));\r\n target.markAtoms(this._complex);\r\n this._reprList.push(target);\r\n\r\n // change selection bit\r\n this._selectionBit = newSelectionBit;\r\n this._reprUsedBits |= 1 << this._selectionBit;\r\n\r\n // restore selection using new selection bit\r\n this._complex.markAtoms(originalSelection, 1 << this._selectionBit);\r\n\r\n return { desc, index: this._reprList.length - 1 };\r\n }\r\n\r\n /**\r\n * Remove representation.\r\n * @param {number=} index - Zero-based representation index.\r\n */\r\n repRemove(index) {\r\n if (index === undefined) {\r\n index = this.repCurrent();\r\n }\r\n\r\n // catch out of bounds case\r\n let count = this._reprList.length;\r\n if (index < 0 || index >= count || count <= 1) { // do not allow to remove the single rep\r\n return;\r\n }\r\n\r\n const target = this._reprList[index];\r\n target.unmarkAtoms(this._complex);\r\n this._reprUsedBits &= ~(1 << target.index);\r\n\r\n this._reprList.splice(index, 1);\r\n\r\n // update current rep\r\n if (target === this._repr) {\r\n --count;\r\n index = index < count ? index : count - 1;\r\n this._repr = this._reprList[index];\r\n }\r\n this._reprListChanged = true;\r\n }\r\n\r\n /**\r\n * Hide representation.\r\n * @param {number} index - Zero-based representation index.\r\n * @param {boolean=} hide - Specify false to make rep visible, true to hide (by default).\r\n */\r\n repHide(index, hide) {\r\n if (hide === undefined) {\r\n hide = true;\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index >= this._reprList.length) {\r\n return;\r\n }\r\n\r\n const target = this._reprList[index];\r\n target.show(!hide);\r\n }\r\n\r\n /**\r\n * Select atoms with selector\r\n * @param {Selector} selector - selector\r\n * @param {boolean=} append - true to append selection atoms to current selection, false to rewrite selection\r\n */\r\n select(selector, append) {\r\n if (append) {\r\n this._selectionCount += this._complex.markAtomsAdditionally(selector, 1 << this._selectionBit);\r\n } else {\r\n this._selectionCount = this._complex.markAtoms(selector, 1 << this._selectionBit);\r\n }\r\n this._complex.updateStructuresMask();\r\n this.rebuildSelectionGeometry();\r\n }\r\n\r\n resetSelectionMask() {\r\n if (this._selectionCount !== 0) {\r\n this._selectionCount = 0;\r\n if (this._complex) {\r\n this._complex.clearAtomBits(1 << this._selectionBit);\r\n }\r\n }\r\n }\r\n\r\n updateSelectionMask(pickedObj) {\r\n const self = this;\r\n const { atom } = pickedObj;\r\n let { residue, chain, molecule } = pickedObj;\r\n const setMask = 1 << this._selectionBit;\r\n const clearMask = ~setMask;\r\n\r\n if (atom) {\r\n residue = atom.residue;\r\n chain = residue._chain;\r\n molecule = residue._molecule;\r\n\r\n if (atom.mask & setMask) {\r\n atom.mask &= clearMask;\r\n residue._mask &= clearMask;\r\n chain._mask &= clearMask;\r\n if (molecule) {\r\n molecule.mask &= clearMask;\r\n }\r\n this._selectionCount--;\r\n } else {\r\n atom.mask |= setMask;\r\n this._selectionCount++;\r\n\r\n // select residue if all atoms in it are selected\r\n residue.collectMask();\r\n // select chain and molecule if all residues in it are selected\r\n chain.collectMask();\r\n if (molecule) {\r\n molecule.collectMask();\r\n }\r\n }\r\n } else if (residue) {\r\n chain = residue._chain;\r\n molecule = residue._molecule;\r\n\r\n if (residue._mask & setMask) {\r\n residue._mask &= clearMask;\r\n chain._mask &= clearMask;\r\n residue.forEachAtom((a) => {\r\n if (a.mask & setMask) {\r\n a.mask &= clearMask;\r\n self._selectionCount--;\r\n }\r\n });\r\n } else {\r\n residue._mask |= setMask;\r\n residue.forEachAtom((a) => {\r\n if (!(a.mask & setMask)) {\r\n a.mask |= setMask;\r\n self._selectionCount++;\r\n }\r\n });\r\n\r\n // select chain and molecule if all residues in it are selected\r\n chain.collectMask();\r\n if (molecule) {\r\n molecule.collectMask();\r\n }\r\n }\r\n } else if (chain || molecule) {\r\n const obj = chain || molecule;\r\n if (obj._mask & setMask) {\r\n obj._mask &= clearMask;\r\n obj.forEachResidue((r) => {\r\n if (r._mask & setMask) {\r\n r._mask &= clearMask;\r\n r.forEachAtom((a) => {\r\n if (a.mask & setMask) {\r\n a.mask &= clearMask;\r\n self._selectionCount--;\r\n }\r\n });\r\n r._mask &= clearMask;\r\n }\r\n });\r\n } else {\r\n obj._mask |= setMask;\r\n obj.forEachResidue((r) => {\r\n if (!(r._mask & setMask)) {\r\n r._mask |= setMask;\r\n r.forEachAtom((a) => {\r\n if (!(a.mask & setMask)) {\r\n a.mask |= setMask;\r\n self._selectionCount++;\r\n }\r\n });\r\n const otherObj = chain ? r.getMolecule() : r.getChain();\r\n if (otherObj) {\r\n otherObj.collectMask();\r\n }\r\n }\r\n });\r\n }\r\n } else {\r\n this.resetSelectionMask();\r\n }\r\n }\r\n\r\n expandSelection() {\r\n const self = this;\r\n const selectionMask = 1 << this._selectionBit;\r\n const tmpMask = 1 << 31;\r\n\r\n // mark atoms to add\r\n this._complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n bond._right.mask |= tmpMask;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n bond._left.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // select marked atoms\r\n const deselectionMask = ~tmpMask;\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & tmpMask) {\r\n atom.mask = (atom.mask & deselectionMask) | selectionMask;\r\n ++self._selectionCount;\r\n }\r\n });\r\n\r\n this._complex.updateStructuresMask();\r\n }\r\n\r\n shrinkSelection() {\r\n const self = this;\r\n const selectionMask = 1 << this._selectionBit;\r\n const tmpMask = 1 << 31;\r\n\r\n // mark atoms neighbouring to unselected ones\r\n this._complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n bond._left.mask |= tmpMask;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n bond._right.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // mark hanging atoms\r\n this._complex.forEachAtom((atom) => {\r\n if ((atom.mask & selectionMask) && (atom.bonds.length === 1)) {\r\n atom.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // deselect marked atoms\r\n const deselectionMask = ~(selectionMask | tmpMask);\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & tmpMask) {\r\n atom.mask &= deselectionMask;\r\n --self._selectionCount;\r\n }\r\n });\r\n\r\n this._complex.updateStructuresMask();\r\n }\r\n\r\n getSelectedComponent() {\r\n const selectionMask = 1 << this._selectionBit;\r\n\r\n let component = null;\r\n let multiple = false;\r\n\r\n // find which component is selected (exclusively)\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & selectionMask) {\r\n if (component === null) {\r\n component = atom.residue._component;\r\n } else if (component !== atom.residue._component) {\r\n multiple = true;\r\n }\r\n }\r\n });\r\n\r\n return multiple ? null : component;\r\n }\r\n\r\n getSelectionCenter(center, includesAtom, selRule) {\r\n center.set(0.0, 0.0, 0.0);\r\n let count = 0;\r\n\r\n this._complex.forEachAtom((atom) => {\r\n if (includesAtom(atom, selRule)) {\r\n center.add(atom.position);\r\n count++;\r\n }\r\n });\r\n if (count === 0) {\r\n return false;\r\n }\r\n center.divideScalar(count);\r\n center.applyMatrix4(this.matrix);\r\n return true;\r\n }\r\n\r\n needsRebuild() {\r\n if (this._reprListChanged) {\r\n return true;\r\n }\r\n const reprList = this._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n if (repr.needsRebuild) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Rebuild molecule geometry asynchronously.\r\n */\r\n rebuild() {\r\n const self = this;\r\n\r\n // Destroy current geometry\r\n gfxutils.clearTree(this);\r\n\r\n return new Promise(((resolve) => {\r\n // Nothing to do?\r\n const complex = self._complex;\r\n if (!complex) {\r\n resolve();\r\n return;\r\n }\r\n\r\n let errorOccured = false;\r\n setTimeout(() => {\r\n console.time('build');\r\n const reprList = self._reprList;\r\n const palette = palettes.get(settings.now.palette) || palettes.first;\r\n let hasGeometry = false;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n repr.colorer.palette = palette;\r\n\r\n if (repr.needsRebuild) {\r\n repr.reset();\r\n\r\n try {\r\n repr.buildGeometry(complex);\r\n } catch (e) {\r\n if (e instanceof utils.OutOfMemoryError) {\r\n repr.needsRebuild = false;\r\n repr.reset();\r\n logger.error(`Not enough memory to build geometry for representation ${repr.index + 1}`);\r\n errorOccured = true;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n\r\n if (DEBUG && !errorOccured) {\r\n logger.debug(`Triangles count: ${meshutils.countTriangles(repr.geo)}`);\r\n }\r\n }\r\n\r\n hasGeometry = errorOccured || hasGeometry || gfxutils.groupHasGeometryToRender(repr.geo);\r\n\r\n if (repr.geo) {\r\n self.add(repr.geo);\r\n }\r\n }\r\n\r\n self._reprListChanged = false;\r\n\r\n console.timeEnd('build');\r\n resolve();\r\n }, 10);\r\n }));\r\n }\r\n\r\n setNeedsRebuild() {\r\n // invalidate all representations\r\n const reprList = this._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n reprList[i].needsRebuild = true;\r\n }\r\n }\r\n\r\n rebuildSelectionGeometry() {\r\n const mask = 1 << this._selectionBit;\r\n\r\n gfxutils.clearTree(this._selectionGeometry);\r\n\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const repr = this._reprList[i];\r\n const sg = repr.buildSelectionGeometry(mask);\r\n if (!sg) {\r\n continue;\r\n }\r\n\r\n this._selectionGeometry.add(sg);\r\n for (let j = 0; j < sg.children.length; j++) {\r\n const m = sg.children[j];\r\n\r\n // copy component transform (that's not applied yet)\r\n // TODO make this code obsolete, accessing editor is bad\r\n if (this._editor && this._editor._componentTransforms) {\r\n const t = this._editor._componentTransforms[m._component._index];\r\n if (t) {\r\n m.position.copy(t.position);\r\n m.quaternion.copy(t.quaternion);\r\n }\r\n }\r\n }\r\n\r\n gfxutils.applySelectionMaterial(sg);\r\n }\r\n }\r\n\r\n _buildSelectorFromSortedLists(atoms, residues, chains) {\r\n const complex = this._complex;\r\n\r\n function optimizeList(list) {\r\n const result = [];\r\n let k = 0;\r\n let first = NaN;\r\n let last = NaN;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n const value = list[i];\r\n if (value === last + 1) {\r\n last = value;\r\n } else {\r\n if (!Number.isNaN(first)) {\r\n result[k++] = new selectors.Range(first, last);\r\n }\r\n first = last = value;\r\n }\r\n }\r\n if (!Number.isNaN(first)) {\r\n result[k] = new selectors.Range(first, last);\r\n }\r\n return result;\r\n }\r\n\r\n let expression = null;\r\n if (chains.length === complex._chains.length) {\r\n expression = selectors.all();\r\n } else {\r\n let selector;\r\n if (chains.length > 0) {\r\n selector = selectors.chain(chains);\r\n expression = expression ? selectors.or(expression, selector) : selector;// NOSONAR\r\n }\r\n if (Object.keys(residues).length > 0) {\r\n for (const ch in residues) {\r\n if (residues.hasOwnProperty(ch)) {\r\n selector = selectors.and(\r\n selectors.chain(ch),\r\n selectors.residx(optimizeList(residues[ch])),\r\n );\r\n expression = expression ? selectors.or(expression, selector) : selector;\r\n }\r\n }\r\n }\r\n if (atoms.length > 0) {\r\n selector = selectors.serial(optimizeList(atoms));\r\n expression = expression ? selectors.or(expression, selector) : selector;\r\n }\r\n\r\n if (!expression) {\r\n expression = selectors.none();\r\n }\r\n }\r\n\r\n return expression;\r\n }\r\n\r\n buildSelectorFromMask(mask) {\r\n const complex = this._complex;\r\n const chains = [];\r\n const residues = {};\r\n const atoms = [];\r\n\r\n complex.forEachChain((chain) => {\r\n if (chain._mask & mask) {\r\n chains.push(chain._name);\r\n }\r\n });\r\n\r\n complex.forEachResidue((residue) => {\r\n if (residue._mask & mask && !(residue._chain._mask & mask)) {\r\n const c = residue._chain._name;\r\n if (!(c in residues)) {\r\n residues[c] = [residue._index];\r\n } else {\r\n residues[c].push(residue._index);\r\n }\r\n }\r\n });\r\n\r\n complex.forEachAtom((atom) => {\r\n if (atom.mask & mask && !(atom.residue._mask & mask)) {\r\n atoms.push(atom.serial);\r\n }\r\n });\r\n\r\n return this._buildSelectorFromSortedLists(atoms, residues, chains);\r\n }\r\n\r\n forSelectedResidues(process) {\r\n const selectionMask = 1 << this._selectionBit;\r\n this._complex.forEachResidue((residue) => {\r\n if (residue._mask & selectionMask) {\r\n process(residue);\r\n }\r\n });\r\n }\r\n\r\n beginComponentEdit() {\r\n if (this._editor) {\r\n return null;\r\n }\r\n\r\n const editor = new ComplexVisualEdit.ComponentEditor(this);\r\n if (!editor.begin()) {\r\n return null;\r\n }\r\n\r\n this._editor = editor;\r\n return editor;\r\n }\r\n\r\n beginFragmentEdit() {\r\n if (this._editor) {\r\n return null;\r\n }\r\n\r\n const editor = new ComplexVisualEdit.FragmentEditor(this);\r\n if (!editor.begin()) {\r\n return null;\r\n }\r\n\r\n this._editor = editor;\r\n return editor;\r\n }\r\n\r\n // should only be called by editors\r\n finalizeEdit() {\r\n this._editor = null;\r\n }\r\n\r\n setMaterialValues(values, needTraverse = false, process = undefined) {\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const rep = this._reprList[i];\r\n rep.material.setValues(values);\r\n if (needTraverse) {\r\n rep.geo.traverse((object) => {\r\n if (object instanceof THREE.Mesh) {\r\n object.material.setValues(values);\r\n\r\n if (process !== undefined) {\r\n process(object);\r\n }\r\n\r\n object.material.needsUpdate = true;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n setUberOptions(values) {\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const rep = this._reprList[i];\r\n rep.material.setUberOptions(values);\r\n }\r\n }\r\n\r\n /**\r\n * Build selector that contains all atoms within given distance from group of atoms\r\n * @param {Selector} selector - selector describing source group of atoms\r\n * @param {number} radius - distance\r\n * @returns {Selector} selector describing result group of atoms\r\n */\r\n within(selector, radius) {\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return false;\r\n }\r\n\r\n // mark atoms of the group as selected\r\n const selectionMask = 1 << this._selectionBit;\r\n this._complex.markAtoms(selector, selectionMask);\r\n\r\n // mark all atoms within distance as selected\r\n if (vw) {\r\n vw.forEachAtomWithinDistFromMasked(this._complex, selectionMask, Number(radius), (atom) => {\r\n atom.mask |= selectionMask;\r\n });\r\n }\r\n\r\n // update selection count\r\n this._selectionCount = this._complex.countAtomsByMask(selectionMask);\r\n\r\n // update secondary structure mask\r\n this._complex.updateStructuresMask();\r\n\r\n return this.buildSelectorFromMask(selectionMask);\r\n }\r\n}\r\n// 32 bits = 30 bits for reps + 1 for selection + 1 for selection expansion\r\nComplexVisual.NUM_REPRESENTATION_BITS = 30;\r\n\r\nexport default ComplexVisual;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexVolumeFaces from './VolumeFaces.vert';\r\nimport fragmentVolumeFaces from './VolumeFaces.frag';\r\nimport vertexVolume from './Volume.vert';\r\nimport fragmentVolume from './Volume.frag';\r\nimport vertexFarPlane from './VolumeFarPlane.vert';\r\nimport fragmentFarPlane from './VolumeFarPlane.frag';\r\nimport settings from '../../settings';\r\n\r\nconst volumeUniforms = THREE.UniformsUtils.merge([\r\n {\r\n volumeDim: { type: 'v3', value: new THREE.Vector3(512, 512, 512) },\r\n tileTex: { type: 't', value: null },\r\n tileTexSize: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n tileStride: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n\r\n boxAngles: { type: 'v3', value: new THREE.Vector3(1, 1, 1) },\r\n delta: { type: 'v3', value: new THREE.Vector3(0, 0, 0) },\r\n\r\n _isoLevel0: { type: 'v2', value: new THREE.Vector3(0.5, 0.75, 1.0) },\r\n _flipV: { type: 'f', value: 0.0 },\r\n _BFLeft: { type: 't', value: null },\r\n _BFRight: { type: 't', value: null },\r\n _FFLeft: { type: 't', value: null },\r\n _FFRight: { type: 't', value: null },\r\n _WFFLeft: { type: 't', value: null },\r\n _WFFRight: { type: 't', value: null },\r\n },\r\n]);\r\n\r\nfunction overrideUniforms(params, defUniforms) {\r\n const uniforms = THREE.UniformsUtils.clone(defUniforms);\r\n for (const p in params) {\r\n if (uniforms.hasOwnProperty(p)) {\r\n uniforms[p].value = params[p];\r\n }\r\n }\r\n return uniforms;\r\n}\r\n\r\nfunction facesPosMaterialParams(params, sideType) {\r\n return {\r\n uniforms: overrideUniforms(params, {}),\r\n vertexShader: vertexVolumeFaces,\r\n fragmentShader: fragmentVolumeFaces,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n side: sideType,\r\n };\r\n}\r\n\r\nclass BackFacePosMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const backFaceParams = facesPosMaterialParams(params, THREE.BackSide);\r\n super(backFaceParams);\r\n }\r\n}\r\n\r\nclass ShaderParams {\r\n constructor(params, uniforms, vertexShader, fragmentShader) {\r\n this.uniforms = overrideUniforms(params, uniforms);\r\n this.vertexShader = vertexShader;\r\n this.fragmentShader = fragmentShader;\r\n this.transparent = false;\r\n this.depthTest = false;\r\n this.depthWrite = false;\r\n this.side = THREE.FrontSide;\r\n }\r\n}\r\n\r\nclass BackFacePosMaterialFarPlane extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const matUniforms = THREE.UniformsUtils.merge([\r\n {\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n farZ: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n matWorld2Volume: { type: '4fv', value: new THREE.Matrix4() },\r\n },\r\n ]);\r\n\r\n const shaderParams = new ShaderParams(params, matUniforms, vertexFarPlane, fragmentFarPlane);\r\n super(shaderParams);\r\n }\r\n}\r\n\r\nclass FrontFacePosMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const frontFaceParams = facesPosMaterialParams(params, THREE.FrontSide);\r\n super(frontFaceParams);\r\n }\r\n}\r\n\r\nclass VolumeMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const shaderParams = new ShaderParams(params, volumeUniforms, vertexVolume, fragmentVolume);\r\n shaderParams.transparent = true;\r\n shaderParams.depthTest = true;\r\n\r\n super(shaderParams);\r\n this.updateDefines();\r\n }\r\n\r\n updateDefines() {\r\n this.defines = {\r\n ISO_MODE: settings.now.modes.VD.isoMode,\r\n STEPS_COUNT: settings.now.modes.VD.polyComplexity[settings.now.resolution] * 100,\r\n };\r\n this.needsUpdate = true;\r\n }\r\n}\r\n\r\nexport default {\r\n BackFacePosMaterial,\r\n BackFacePosMaterialFarPlane,\r\n FrontFacePosMaterial,\r\n VolumeMaterial,\r\n};\r\n","import * as THREE from 'three';\r\nimport VolumeMaterial from './shaders/VolumeMaterial';\r\nimport settings from '../settings';\r\n\r\nclass VolumeMesh extends THREE.Mesh {\r\n volumeInfo = {}; // data for noise filter\r\n\r\n constructor() {\r\n const geo = new THREE.BufferGeometry();\r\n super(geo);\r\n this.clipPlane = new THREE.Plane();\r\n const size = new THREE.Vector3(0.5, 0.5, 0.5);\r\n this.size = size;\r\n\r\n this.cullFlag = [\r\n true, true, true, true,\r\n true, true, true, true,\r\n false, false, false, false, false, false,\r\n ];\r\n\r\n this.faces = [\r\n { indices: [], norm: new THREE.Vector3(0, 0, -1) },\r\n { indices: [], norm: new THREE.Vector3(0, 0, 1) },\r\n { indices: [], norm: new THREE.Vector3(0, -1, 0) },\r\n { indices: [], norm: new THREE.Vector3(0, 1, 0) },\r\n { indices: [], norm: new THREE.Vector3(-1, 0, 0) },\r\n { indices: [], norm: new THREE.Vector3(1, 0, 0) },\r\n { indices: [], norm: new THREE.Vector3(0, 0, 0) },\r\n ];\r\n\r\n this.vertices = [\r\n new THREE.Vector3(-size.x, -size.y, -size.z),\r\n new THREE.Vector3(-size.x, size.y, -size.z),\r\n new THREE.Vector3(size.x, -size.y, -size.z),\r\n new THREE.Vector3(size.x, size.y, -size.z),\r\n new THREE.Vector3(-size.x, -size.y, size.z),\r\n new THREE.Vector3(-size.x, size.y, size.z),\r\n new THREE.Vector3(size.x, -size.y, size.z),\r\n new THREE.Vector3(size.x, size.y, size.z),\r\n new THREE.Vector3(0.0, 0.0, 0.0), // Placeholder for section\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n ];\r\n\r\n geo.setAttribute('position', new THREE.BufferAttribute(new Float32Array(this.vertices.length * 3), 3));\r\n\r\n this.name = 'VolumeMesh';\r\n }\r\n\r\n static _corners = [\r\n // x, y, z, edge1, edge2, edge3\r\n [-1, -1, -1, 0, 4, 8],\r\n [1, -1, -1, 0, 5, 9],\r\n [1, 1, -1, 1, 5, 10],\r\n [-1, 1, -1, 1, 4, 11],\r\n [-1, -1, 1, 2, 6, 8],\r\n [1, -1, 1, 2, 7, 9],\r\n [1, 1, 1, 3, 7, 10],\r\n [-1, 1, 1, 3, 6, 11],\r\n ];\r\n\r\n static _edges = [\r\n // corner1, corner2, center_x, center_y, center_z\r\n [0, 1, 0, -1, -1],\r\n [2, 3, 0, 1, -1],\r\n [4, 5, 0, -1, 1],\r\n [6, 7, 0, 1, 1],\r\n [0, 3, -1, 0, -1],\r\n [1, 2, 1, 0, -1],\r\n [4, 7, -1, 0, 1],\r\n [5, 6, 1, 0, 1],\r\n [0, 4, -1, -1, 0],\r\n [1, 5, 1, -1, 0],\r\n [2, 6, -1, 1, 0],\r\n [3, 7, 1, 1, 0],\r\n ];\r\n\r\n static _edgeIntersections = (function () {\r\n const edgeIntersections = [];\r\n for (let j = 0; j < 12; ++j) {\r\n edgeIntersections.push(new THREE.Vector3());\r\n }\r\n return edgeIntersections;\r\n }());\r\n\r\n _updateVertices() {\r\n // Algorithm:\r\n // 1. Get plane parameters\r\n // 2. Compute culling flags for all vertices\r\n // 3. If intersection occurs => compute from 3 to 6 intersection points\r\n const corners = VolumeMesh._corners;\r\n const edges = VolumeMesh._edges;\r\n const edgeIntersections = VolumeMesh._edgeIntersections;\r\n\r\n let i;\r\n\r\n const norm = this.clipPlane.normal;\r\n const D = this.clipPlane.constant;\r\n\r\n const vert = this.vertices;\r\n const { size } = this;\r\n\r\n const cornerMark = [0, 0, 0, 0, 0, 0, 0, 0];\r\n const edgeMark = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\r\n\r\n const curEdge = new THREE.Vector3();\r\n let curEdgeInter = null;\r\n\r\n function CheckX() {\r\n if (norm.x === 0) return 0;\r\n const x = -(norm.dot(curEdge) + D) / norm.x;\r\n if (-size.x <= x && x <= size.x) {\r\n curEdgeInter.set(x, curEdge.y, curEdge.z);\r\n if (x === size.x) return 2;\r\n if (x === -size.x) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n function CheckY() {\r\n if (norm.y === 0) return 0;\r\n const y = -(norm.dot(curEdge) + D) / norm.y;\r\n if (-size.y <= y && y <= size.y) {\r\n curEdgeInter.set(curEdge.x, y, curEdge.z);\r\n if (y === size.y) return 2;\r\n if (y === -size.y) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n function CheckZ() {\r\n if (norm.z === 0) return 0;\r\n const z = -(norm.dot(curEdge) + D) / norm.z;\r\n if (-size.z <= z && z <= size.z) {\r\n curEdgeInter.set(curEdge.x, curEdge.y, z);\r\n if (z === size.z) return 2;\r\n if (z === -size.z) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n // for each edge\r\n for (let curEdgeIdx = 0; curEdgeIdx < 12; ++curEdgeIdx) {\r\n const curEdgeSource = edges[curEdgeIdx];\r\n curEdgeInter = edgeIntersections[curEdgeIdx];\r\n\r\n curEdge.set(curEdgeSource[2], curEdgeSource[3], curEdgeSource[4]);\r\n curEdge.multiply(size);\r\n\r\n // calculate intersection point\r\n let flag = 0;\r\n if (curEdgeSource[2] === 0) flag = CheckX();\r\n if (curEdgeSource[3] === 0) flag = CheckY();\r\n if (curEdgeSource[4] === 0) flag = CheckZ();\r\n\r\n // mark corresponding corner (if plane cuts through one)\r\n if (flag === -2) {\r\n cornerMark[curEdgeSource[0]] = 1;\r\n } else if (flag === 2) {\r\n cornerMark[curEdgeSource[1]] = 1;\r\n } else if (flag === 0) {\r\n // edge is not intersected by the plane (doesn't produce a vertex)\r\n edgeMark[curEdgeIdx] = 0;\r\n }\r\n }\r\n\r\n const face = {\r\n indices: [],\r\n norm: norm.clone().negate(),\r\n };\r\n\r\n let nextVertex = 8;\r\n\r\n // for each marked corner\r\n for (i = 0; i < 8; ++i) {\r\n if (cornerMark[i] === 1) {\r\n // add corner as vertex to the face\r\n vert[nextVertex].set(corners[i][0], corners[i][1], corners[i][2]).multiply(size);\r\n face.indices.push(nextVertex++);\r\n // skip adjacent edges\r\n edgeMark[corners[i][3]] = 0;\r\n edgeMark[corners[i][4]] = 0;\r\n edgeMark[corners[i][5]] = 0;\r\n }\r\n }\r\n\r\n // for each edge that has internal intersection\r\n for (i = 0; i < 12; ++i) {\r\n if (edgeMark[i] === 1) {\r\n // add intersection point as vertex to the face\r\n vert[nextVertex].copy(edgeIntersections[i]);\r\n face.indices.push(nextVertex++);\r\n }\r\n }\r\n\r\n this.faces[6] = face;\r\n\r\n const diff = new THREE.Vector3();\r\n const coplanarPoint = new THREE.Vector3();\r\n this.clipPlane.coplanarPoint(coplanarPoint);\r\n for (i = 0; i < vert.length; ++i) {\r\n this.cullFlag[i] = false;\r\n if (i < 8) {\r\n // corners should be culled by clipping plane\r\n diff.subVectors(vert[i], coplanarPoint);\r\n this.cullFlag[i] = (norm.dot(diff) >= 0.0);\r\n } else if (i < 8 + face.indices.length) {\r\n // cross section vertices don't get culled\r\n this.cullFlag[i] = true;\r\n }\r\n }\r\n\r\n // write data to vertex buffer\r\n const positions = this.geometry.getAttribute('position');\r\n let idx = 0;\r\n for (i = 0; i < vert.length; ++i) {\r\n positions.array[idx++] = vert[i].x;\r\n positions.array[idx++] = vert[i].y;\r\n positions.array[idx++] = vert[i].z;\r\n }\r\n positions.needsUpdate = true;\r\n }\r\n\r\n _collectVertices(face, filter) {\r\n let i;\r\n const vert = this.vertices;\r\n face.indices = [];\r\n for (i = 0; i < vert.length; ++i) {\r\n if (this.cullFlag[i] && filter(vert[i])) {\r\n face.indices.push(i);\r\n }\r\n }\r\n }\r\n\r\n _sortIndices(face, right) {\r\n let i;\r\n let j;\r\n const vert = this.vertices;\r\n const angle = [];\r\n\r\n const dir = new THREE.Vector3();\r\n for (i = 1; i < face.indices.length; ++i) {\r\n dir.subVectors(vert[face.indices[i]], vert[face.indices[0]]);\r\n dir.normalize();\r\n dir.cross(right);\r\n dir.negate();\r\n angle[i] = face.norm.dot(dir);\r\n }\r\n\r\n // Exchange sort\r\n for (i = 1; i < face.indices.length - 1; ++i) {\r\n for (j = i + 1; j < face.indices.length; ++j) {\r\n if (angle[j] < angle[i]) {\r\n // swap\r\n let t = angle[i];\r\n angle[i] = angle[j];\r\n angle[j] = t;\r\n\r\n t = face.indices[i];\r\n face.indices[i] = face.indices[j];\r\n face.indices[j] = t;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _updateIndices() {\r\n // Algorithm:\r\n // 1. Get plane vertices (from 3 to 6 vertices)\r\n // 2. Get \"right\" vector in plane\r\n // 3. Sort vertices using Graham-like method\r\n // 4. Create indices\r\n\r\n let i;\r\n let faceIdx;\r\n let face;\r\n const vert = this.vertices;\r\n const { size } = this;\r\n\r\n this._collectVertices(this.faces[0], (vertex) => vertex.z === -size.z);\r\n this._collectVertices(this.faces[1], (vertex) => vertex.z === size.z);\r\n this._collectVertices(this.faces[2], (vertex) => vertex.y === -size.y);\r\n this._collectVertices(this.faces[3], (vertex) => vertex.y === size.y);\r\n this._collectVertices(this.faces[4], (vertex) => vertex.x === -size.x);\r\n this._collectVertices(this.faces[5], (vertex) => vertex.x === size.x);\r\n\r\n const vCenter = new THREE.Vector3();\r\n const vRight = new THREE.Vector3();\r\n const vDir = new THREE.Vector3();\r\n\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n\r\n if (face.indices.length === 0) continue;\r\n\r\n vCenter.set(0, 0, 0);\r\n for (i = 0; i < face.indices.length; ++i) {\r\n vCenter.add(vert[face.indices[i]]);\r\n }\r\n vCenter.multiplyScalar(1.0 / face.indices.length);\r\n vRight.subVectors(vert[face.indices[0]], vCenter);\r\n vRight.normalize();\r\n\r\n const rightProj = [];\r\n for (i = 0; i < face.indices.length; ++i) {\r\n vDir.subVectors(vert[face.indices[i]], vCenter);\r\n rightProj[i] = vDir.dot(vRight);\r\n }\r\n for (i = 1; i < face.indices.length; ++i) {\r\n if (rightProj[i] < rightProj[0]) {\r\n // swap\r\n let t = rightProj[0];\r\n rightProj[0] = rightProj[i];\r\n rightProj[i] = t;\r\n\r\n [t] = face.indices;\r\n face.indices[0] = face.indices[i];\r\n face.indices[i] = t;\r\n }\r\n }\r\n\r\n this._sortIndices(face, vRight);\r\n }\r\n\r\n let numIndices = 0;\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n if (face.indices.length >= 3) {\r\n numIndices += 3 * (face.indices.length - 2);\r\n }\r\n }\r\n let offset = 0;\r\n const indices = new Uint16Array(numIndices);\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n for (i = 0; i < face.indices.length - 2; ++i) {\r\n indices[offset] = face.indices[0]; // eslint-disable-line prefer-destructuring\r\n indices[offset + 1] = face.indices[i + 1];\r\n indices[offset + 2] = face.indices[i + 2];\r\n offset += 3;\r\n }\r\n }\r\n\r\n this.geometry.setIndex(new THREE.BufferAttribute(indices, 1));\r\n }\r\n\r\n setDataSource(dataSource) {\r\n const vm = new VolumeMaterial.VolumeMaterial();\r\n const dim = dataSource.getDimensions();\r\n const stride = dataSource.getTiledTextureStride();\r\n const texture = dataSource.buildTiledTexture();\r\n const bbox = dataSource.getBox();\r\n vm.uniforms.volumeDim.value.set(dim[0], dim[1], dim[2]);\r\n vm.uniforms.tileTex.value = texture;\r\n vm.uniforms.tileTexSize.value.set(texture.image.width, texture.image.height);\r\n vm.uniforms.tileStride.value.set(stride[0], stride[1]);\r\n Object.assign(this.volumeInfo, dataSource.getVolumeInfo());\r\n\r\n const volInfo = this.volumeInfo;\r\n vm.uniforms.delta.value.copy(volInfo.delta);\r\n vm.uniforms.boxAngles.value.set(volInfo.obtuseAngle[0], volInfo.obtuseAngle[1], volInfo.obtuseAngle[2]);\r\n\r\n this.material = vm;\r\n\r\n bbox.getSize(this.scale);\r\n bbox.getCenter(this.position);\r\n }\r\n\r\n _updateIsoLevel() {\r\n const { kSigma, kSigmaMed, kSigmaMax } = settings.now.modes.VD;\r\n const volInfo = this.volumeInfo;\r\n const mean = volInfo.dmean - volInfo.dmin;\r\n const span = volInfo.dmax - volInfo.dmin;\r\n const level = (k) => (mean + k * volInfo.sd) / span;\r\n this.material.uniforms._isoLevel0.value.set(level(kSigma), level(kSigmaMed), level(kSigmaMax));\r\n }\r\n\r\n static _nearClipPlaneOffset = 0.2;\r\n\r\n static _pos = new THREE.Vector3();\r\n\r\n static _norm = new THREE.Vector3();\r\n\r\n static _norm4D = new THREE.Vector4();\r\n\r\n static _matrixWorldToLocal = new THREE.Matrix4();\r\n\r\n static _clipPlane = new THREE.Plane();\r\n\r\n rebuild(camera) {\r\n const nearClipPlaneOffset = VolumeMesh._nearClipPlaneOffset;\r\n const pos = VolumeMesh._pos;\r\n const norm = VolumeMesh._norm;\r\n const norm4D = VolumeMesh._norm4D;\r\n const matrixWorldToLocal = VolumeMesh._matrixWorldToLocal;\r\n const clipPlane = VolumeMesh._clipPlane;\r\n\r\n this._updateIsoLevel();\r\n\r\n // get clip plane in local space\r\n camera.getWorldDirection(norm);\r\n camera.getWorldPosition(pos);\r\n pos.addScaledVector(norm, camera.near + nearClipPlaneOffset);\r\n\r\n // transform pos to local CS\r\n matrixWorldToLocal.copy(this.matrixWorld).invert();\r\n pos.applyMatrix4(matrixWorldToLocal);\r\n\r\n // transform norm to local CS\r\n norm4D.set(norm.x, norm.y, norm.z, 0.0); // NOTE: use homogeneous norm for proper transformation\r\n norm4D.applyMatrix4(matrixWorldToLocal);\r\n norm.copy(norm4D);\r\n norm.normalize();\r\n\r\n clipPlane.setFromNormalAndCoplanarPoint(norm, pos);\r\n\r\n if (!this.clipPlane.equals(clipPlane)) {\r\n this.clipPlane = clipPlane.clone();\r\n this._updateVertices();\r\n this._updateIndices();\r\n }\r\n }\r\n}\r\n\r\nexport default VolumeMesh;\r\n","import * as THREE from 'three';\r\nimport gfxutils from './gfxutils';\r\n\r\nfunction _flattenArray(input) {\r\n const n = input.length;\r\n const output = new Float32Array(n * 3);\r\n for (let i = 0; i < n; ++i) {\r\n const j = 3 * i;\r\n const v = input[i];\r\n output[j] = v.x;\r\n output[j + 1] = v.y;\r\n output[j + 2] = v.z;\r\n }\r\n return output;\r\n}\r\n\r\nclass VolumeBounds {\r\n static _projectionTable = { // corresponds between (origin axes and angles between them) and between saving vector coordinates\r\n XY: ['x', 2],\r\n XZ: ['y', 1],\r\n YZ: ['z', 0],\r\n };\r\n\r\n constructor(bBox, volInfo) {\r\n const { delta } = volInfo; // {x: XY, y : XZ, z: YZ}\r\n const { obtuseAngle } = volInfo; // 1 - obtuse, 0 - acute\r\n\r\n const bSize = new THREE.Vector3();\r\n bBox.getSize(bSize);\r\n bSize.multiplyScalar(0.5);\r\n\r\n const offsetVert = this._getBaseVertices(delta, obtuseAngle);\r\n\r\n const geometry = new THREE.BufferGeometry();\r\n const vertices = [];\r\n\r\n for (let i = 0; i < 4; i++) {\r\n vertices.push(offsetVert[i].clone().multiply(bSize));\r\n vertices.push(offsetVert[(i + 1) % 4].clone().multiply(bSize));\r\n }\r\n const translation = new THREE.Vector3(2 * bSize.x * (1 - delta.x - delta.y), 0, 0);\r\n for (let i = 0; i < 8; i++) {\r\n vertices.push(vertices[i].clone().add(translation));\r\n }\r\n for (let i = 0; i < 4; i++) {\r\n vertices.push(vertices[i * 2].clone());\r\n vertices.push(vertices[i * 2 + 8].clone());\r\n }\r\n const center = new THREE.Vector3();\r\n bBox.getCenter(center);\r\n vertices.forEach((vertex) => vertex.add(center)); // pivot shift\r\n\r\n const flatVertices = _flattenArray(vertices);\r\n geometry.setAttribute('position', new THREE.BufferAttribute(flatVertices, 3));\r\n\r\n this._lines = new THREE.LineSegments(geometry, new THREE.LineBasicMaterial({ color: 0xFFFFFF }));\r\n this._lines.layers.set(gfxutils.LAYERS.VOLUME);\r\n }\r\n\r\n // Set one edge (4 points) of frame, from which with parallel transfer the rest of the frame points can be obtained\r\n _getBaseVertices(delta, obtuseAngle) {\r\n const projTable = VolumeBounds._projectionTable;\r\n\r\n const proj = ((index, inv) => { // tricky function to take account of projections: their position(related to box) and sign\r\n const currDelta = delta[projTable[index][0]];\r\n const angleValue = -0.5 * (inv - 1) + inv * obtuseAngle[projTable[index][1]];// inv = 1: alpha; inv = -1: 1 - alpha\r\n return angleValue * currDelta;\r\n });\r\n\r\n const offsetVert = [\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', 1) + proj('XY', 1)), -1 + 2 * proj('YZ', 1), -1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', -1) + proj('XY', 1)), -1 + 2 * proj('YZ', -1), 1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', -1) + proj('XY', -1)), 1 - 2 * proj('YZ', 1), 1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', 1) + proj('XY', -1)), 1 - 2 * proj('YZ', -1), -1),\r\n ];\r\n\r\n return offsetVert;\r\n }\r\n\r\n getMesh() {\r\n return this._lines;\r\n }\r\n}\r\n\r\nexport default VolumeBounds;\r\n","import * as THREE from 'three';\r\nimport VolumeMaterial from './shaders/VolumeMaterial';\r\nimport meshes from './meshes/meshes';\r\nimport gfxutils from './gfxutils';\r\n\r\n// Thes geometric far plane is required for correct filling in the BFTexture in case, when far plane cuts the volume\r\n// cube. In cut place of cube there is no correct data in BFTexture and volume rendering integral is calculated\r\n// with errors.\r\n// Far plane cuts the cube in case of large volume scale (zoom), because farplane doesn't change\r\nclass VolumeFarPlane {\r\n // create plane with unit corners coords (for future rescale in vshader according to camera properties)\r\n constructor(volume, width, height) {\r\n const planeGeo = this._initPlaneGeo(width, height);\r\n\r\n const mat = new VolumeMaterial.BackFacePosMaterialFarPlane();\r\n this._plane = new meshes.Mesh(planeGeo, mat);\r\n this._plane.frustumCulled = false;\r\n this._plane.doubleSided = true;\r\n const matWorldToVolume = new THREE.Matrix4();\r\n\r\n this._plane._onBeforeRender = function (_renderer, _scene, camera, _geometry, _material, _group) {\r\n const { material } = this;\r\n if (!volume || !material) {\r\n return;\r\n }\r\n\r\n // count point in world at farplane place\r\n const planeCamPos = new THREE.Vector4(0, 0, -(camera.far - 0.1), 1);\r\n planeCamPos.applyMatrix4(camera.matrixWorld);\r\n\r\n // recalc matrices to make plane be placed as farplane in the World relative to camera\r\n this.matrix.identity();\r\n this.matrix.makeTranslation(planeCamPos.x, planeCamPos.y, planeCamPos.z);\r\n this.matrixWorld.copy(this.matrix);\r\n this.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, this.matrixWorld);\r\n this.normalMatrix.getNormalMatrix(this.modelViewMatrix);\r\n\r\n // build worldToVolume matrix to transform plane into volumeCS (volumeCS coords are written to BackFaceTexture)\r\n const volumeMatrix = volume.matrixWorld;\r\n matWorldToVolume.copy(volumeMatrix).invert();\r\n\r\n // update material props\r\n material.uniforms.aspectRatio.value = camera.aspect;\r\n material.uniforms.farZ.value = camera.far;\r\n material.uniforms.tanHalfFOV.value = Math.tan(THREE.MathUtils.DEG2RAD * 0.5 * camera.fov);\r\n material.uniforms.matWorld2Volume.value = matWorldToVolume;\r\n };\r\n\r\n // set it to special layer to draw only into BFTexture\r\n this._plane.layers.set(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n }\r\n\r\n _initPlaneGeo(width, height) {\r\n const planeGeo = new THREE.BufferGeometry();\r\n\r\n width = width || 1;\r\n height = height || 1;\r\n\r\n const vertices = new Float32Array([\r\n -0.5 * width, 0.5 * height, 0,\r\n 0.5 * width, 0.5 * height, 0,\r\n -0.5 * width, -0.5 * height, 0,\r\n 0.5 * width, -0.5 * height, 0,\r\n ]);\r\n\r\n planeGeo.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n planeGeo.setIndex([0, 2, 1, 2, 3, 1]);\r\n\r\n return planeGeo;\r\n }\r\n\r\n getMesh() {\r\n return this._plane;\r\n }\r\n}\r\n\r\nexport default VolumeFarPlane;\r\n","import * as THREE from 'three';\r\nimport VolumeMesh from './gfx/VolumeMesh';\r\nimport VolumeBounds from './gfx/VolumeBounds';\r\nimport VolumeFarPlane from './gfx/VolumeFarPlane';\r\nimport Visual from './Visual';\r\nimport settings from './settings';\r\n\r\nclass VolumeVisual extends Visual {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this._mesh = new VolumeMesh();\r\n this._mesh.setDataSource(dataSource);\r\n this.add(this._mesh);\r\n\r\n this._frame = new VolumeBounds(this.getBoundaries().boundingBox, this._mesh.volumeInfo);\r\n this.add(this._frame.getMesh());\r\n this.showFrame(settings.now.modes.VD.frame);\r\n\r\n this._farPlane = new VolumeFarPlane(this._mesh, 2, 2);\r\n this.add(this._farPlane.getMesh());\r\n }\r\n\r\n getBoundaries() {\r\n const box = this._dataSource.getBox();\r\n const sphere = new THREE.Sphere();\r\n box.getBoundingSphere(sphere);\r\n\r\n return {\r\n boundingBox: box,\r\n boundingSphere: sphere,\r\n };\r\n }\r\n\r\n getMesh() {\r\n return this._mesh;\r\n }\r\n\r\n showFrame(needShow) {\r\n this._frame.getMesh().material.visible = needShow;\r\n }\r\n}\r\n\r\nexport default VolumeVisual;\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available loaders.\r\n * @extends EntityList\r\n */\r\nclass LoaderList extends EntityList {\r\n /**\r\n * Create a list of loaders.\r\n * The loaders are indexed by supported source types (`.types` property of a Loader\r\n * subclass).\r\n * The loaders can be retrieved later by matching against specs (see {@link LoaderList#find}).\r\n *\r\n * @param {!Array=} someLoaders A list of {@link Loader} subclasses to\r\n * automatically register at creation time.\r\n * @see LoaderList#register\r\n */\r\n constructor(someLoaders = []) {\r\n super(someLoaders, ['types']);\r\n }\r\n\r\n /**\r\n * Find a suitable loader for a source type.\r\n *\r\n * @param {Object} specs Loader specifications.\r\n * @param {string=} specs.type Supported source type.\r\n * @param {*=} specs.source Source to load from.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.type) {\r\n list = this._dict.types[specs.type.toLowerCase()] || [];\r\n } else if (specs.source) {\r\n return this._list.filter((SomeLoader) => SomeLoader.canProbablyLoad && SomeLoader.canProbablyLoad(specs.source));\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default LoaderList;\r\n","import EventDispatcher from '../../utils/EventDispatcher';\r\nimport makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Loader extends EventDispatcher {\r\n constructor(source, options) {\r\n super();\r\n this._source = source;\r\n this._options = options || {};\r\n this._abort = false;\r\n this._agent = null;\r\n }\r\n\r\n load() {\r\n return Promise.reject(new Error('Loading from this source is not implemented'));\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n if (this._agent) {\r\n this._agent.abort();\r\n }\r\n }\r\n\r\n static extractName(_source) {\r\n return undefined;\r\n }\r\n}\r\n\r\nmakeContextDependent(Loader.prototype);\r\n","import Loader from './Loader';\r\n\r\nexport default class FileLoader extends Loader {\r\n constructor(source, options) {\r\n super(source, options);\r\n\r\n options = this._options;\r\n this._binary = options.binary === true;\r\n }\r\n\r\n load() {\r\n return new Promise((resolve, reject) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n\r\n const blob = this._source;\r\n const reader = this._agent = new FileReader();\r\n\r\n reader.addEventListener('load', () => {\r\n resolve(reader.result);\r\n });\r\n reader.addEventListener('error', () => {\r\n reject(reader.error);\r\n });\r\n reader.addEventListener('abort', () => {\r\n reject(new Error('Loading aborted'));\r\n });\r\n reader.addEventListener('progress', (event) => {\r\n this.dispatchEvent(event);\r\n });\r\n\r\n if (this._binary) {\r\n reader.readAsArrayBuffer(blob);\r\n } else {\r\n reader.readAsText(blob);\r\n }\r\n });\r\n }\r\n\r\n static canProbablyLoad(source) {\r\n return (File && source instanceof File) || (Blob && source instanceof Blob);\r\n }\r\n\r\n static extractName(source) {\r\n return source && source.name;\r\n }\r\n}\r\n\r\nFileLoader.types = ['file', 'blob'];\r\n","import _ from 'lodash';\r\nimport Loader from './Loader';\r\n\r\n// we don't need to detect all kinds of URLs, just the evident ones\r\nconst urlStartRegexp = /^(https?|ftp):\\/\\//i;\r\n\r\nexport default class XHRLoader extends Loader {\r\n constructor(source, options) {\r\n super(source, options);\r\n\r\n options = this._options;\r\n this._binary = (options.binary === true);\r\n }\r\n\r\n load() {\r\n return new Promise((resolve, reject) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n\r\n const url = this._source;\r\n const request = this._agent = new XMLHttpRequest();\r\n\r\n request.addEventListener('load', () => {\r\n if (request.status === 200) {\r\n resolve(request.response);\r\n } else {\r\n reject(new Error(`HTTP ${request.status} while fetching ${url}`));\r\n }\r\n });\r\n request.addEventListener('error', () => {\r\n reject(new Error('HTTP request failed'));\r\n });\r\n request.addEventListener('abort', () => {\r\n reject(new Error('Loading aborted'));\r\n });\r\n request.addEventListener('progress', (event) => {\r\n this.dispatchEvent(event);\r\n });\r\n\r\n request.open('GET', url);\r\n if (this._binary) {\r\n request.responseType = 'arraybuffer';\r\n } else {\r\n request.responseType = 'text';\r\n }\r\n request.send();\r\n });\r\n }\r\n\r\n static canProbablyLoad(source) {\r\n return _.isString(source) && urlStartRegexp.test(source);\r\n }\r\n\r\n static extractName(source) {\r\n if (source) {\r\n const last = (source.indexOf('?') + 1 || source.lastIndexOf('#') + 1 || source.length + 1) - 1;\r\n return source.slice(source.lastIndexOf('/', last) + 1, last);\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nXHRLoader.types = ['url'];\r\n","import Loader from './Loader';\r\n\r\nexport default class ImmediateLoader extends Loader {\r\n load() {\r\n return new Promise((resolve) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n resolve(this._source);\r\n });\r\n }\r\n\r\n static canProbablyLoad(_source) {\r\n return false;\r\n }\r\n}\r\n\r\nImmediateLoader.types = ['immediate'];\r\n","import LoaderList from './loaders/LoaderList';\r\n\r\nimport FileLoader from './loaders/FileLoader';\r\nimport XHRLoader from './loaders/XHRLoader';\r\nimport ImmediateLoader from './loaders/ImmediateLoader';\r\n\r\nexport default new LoaderList([\r\n // note: order might be important\r\n FileLoader,\r\n XHRLoader,\r\n ImmediateLoader,\r\n]);\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available parsers.\r\n * @extends EntityList\r\n */\r\nclass ParserList extends EntityList {\r\n /**\r\n * Create a list of parsers.\r\n * The parsers are indexed by supported data formats and file extensions (`.formats` and\r\n * `.extensions` properties of a Parser subclass).\r\n * The parsers can be retrieved later by matching against specs (see {@link ParsrerList#find}).\r\n *\r\n * @param {!Array=} someParsers A list of {@link Parser} subclasses to\r\n * automatically register at creation time.\r\n * @see ParserList#register\r\n */\r\n constructor(someParsers = []) {\r\n super(someParsers, ['formats', 'extensions']);\r\n }\r\n\r\n /**\r\n * Find a suitable parser for data.\r\n *\r\n * @param {Object} specs Parser specifications.\r\n * @param {string=} specs.format Supported data format.\r\n * @param {string=} specs.ext Supported filename extension.\r\n * @param {*=} specs.data Data to parse.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.format) {\r\n list = this._dict.formats[specs.format.toLowerCase()] || [];\r\n } else if (specs.ext) {\r\n list = this._dict.extensions[specs.ext.toLowerCase()] || [];\r\n }\r\n // autodetect only if no format is forced\r\n if (list.length === 0 && !specs.format && specs.data) {\r\n return this._list.filter((SomeParser) => SomeParser.canProbablyParse && SomeParser.canProbablyParse(specs.data));\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default ParserList;\r\n","import makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Parser {\r\n constructor(data, options) {\r\n this._data = data;\r\n this._options = options || {};\r\n this._abort = false;\r\n }\r\n\r\n parseSync() {\r\n throw new Error('Parsing this type of data is not implemented');\r\n }\r\n\r\n parse() {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n try {\r\n if (this._abort) {\r\n return reject(new Error('Parsing aborted'));\r\n }\r\n return resolve(this.parseSync());\r\n } catch (error) {\r\n return reject(error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // only for volume Parsers\r\n getModel() {\r\n this.model._parseHeader(this._data);\r\n return this.model;\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n }\r\n}\r\n\r\nmakeContextDependent(Parser.prototype);\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Parser helper for PDB tag \"REMARK 290\".\r\n *\r\n * @exports Remark290\r\n * @constructor\r\n */\r\nclass Remark290 {\r\n constructor() {\r\n /** @type {THREE.Matrix4[]} */\r\n this.matrices = [];\r\n\r\n /** @type {?THREE.Matrix4} */\r\n this._matrix = null;\r\n /** @type {number} */\r\n this._matrixIndex = -1;\r\n }\r\n\r\n /**\r\n * Parse a single line of a stream.\r\n * @param {PDBStream} stream - stream to parse\r\n */\r\n\r\n parse(stream) {\r\n /** @type {?THREE.Matrix4} */\r\n let matrix = this._matrix;\r\n\r\n if (stream.readString(12, 18) === ' SMTRY') {\r\n const matrixRow = stream.readCharCode(19) - 49; // convert '1', '2', or '3' -> 0, 1, or 2\r\n const matrixData = stream.readString(20, 80).trim().split(/\\s+/);\r\n const matrixIndex = parseInt(matrixData[0], 10);\r\n if (this._matrix === null || matrixIndex !== this._matrixIndex) {\r\n // TODO: assert(matrixIndex === this.matrices.length + 1);\r\n this._matrixIndex = matrixIndex;\r\n this._matrix = matrix = new THREE.Matrix4();\r\n this.matrices[this.matrices.length] = matrix;\r\n }\r\n\r\n const { elements } = matrix;\r\n elements[matrixRow] = parseFloat(matrixData[1]);\r\n elements[matrixRow + 4] = parseFloat(matrixData[2]);\r\n elements[matrixRow + 8] = parseFloat(matrixData[3]);\r\n elements[matrixRow + 12] = parseFloat(matrixData[4]);\r\n }\r\n }\r\n}\r\n\r\nRemark290.prototype.id = 290;\r\n\r\nexport default Remark290;\r\n","import * as THREE from 'three';\r\nimport chem from '../../../chem';\r\n\r\nconst { Assembly } = chem;\r\n\r\n/**\r\n * Parser helper for PDB tag \"REMARK 350\".\r\n *\r\n * @exports Remark350\r\n * @constructor\r\n */\r\nclass Remark350 {\r\n constructor(complex) {\r\n /** @type {Complex} */\r\n this._complex = complex;\r\n /** @type {Assembly[]} */\r\n this.assemblies = [];\r\n\r\n /** @type {?Assembly} */\r\n this._assembly = null;\r\n /** @type {?THREE.Matrix4} */\r\n this._matrix = null;\r\n /** @type {number} */\r\n this._matrixIndex = -1;\r\n }\r\n\r\n /**\r\n * Parse a single line of a stream.\r\n * @param {PDBStream} stream - stream to parse\r\n */\r\n\r\n parse(stream) {\r\n /** @type {?Assembly} */\r\n let assembly = this._assembly;\r\n /** @type {?THREE.Matrix4} */\r\n let matrix = this._matrix;\r\n\r\n if (assembly && stream.readString(12, 18) === ' BIOMT') {\r\n const matrixRow = stream.readCharCode(19) - 49; // convert '1', '2', or '3' -> 0, 1, or 2\r\n const matrixData = stream.readString(20, 80).trim().split(/\\s+/);\r\n const matrixIndex = parseInt(matrixData[0], 10);\r\n if (this._matrix === null || matrixIndex !== this._matrixIndex) {\r\n // TODO: assert(matrixIndex === assembly.matrices.length + 1);\r\n this._matrixIndex = matrixIndex;\r\n this._matrix = matrix = new THREE.Matrix4();\r\n assembly.addMatrix(matrix);\r\n }\r\n\r\n const { elements } = matrix;\r\n elements[matrixRow] = parseFloat(matrixData[1]);\r\n elements[matrixRow + 4] = parseFloat(matrixData[2]);\r\n elements[matrixRow + 8] = parseFloat(matrixData[3]);\r\n elements[matrixRow + 12] = parseFloat(matrixData[4]);\r\n } else if (assembly && stream.readString(35, 41) === 'CHAINS:') {\r\n const entries = stream.readString(42, 80).split(',');\r\n for (let i = 0, n = entries.length; i < n; ++i) {\r\n const chain = entries[i].trim();\r\n if (chain.length > 0) {\r\n assembly.addChain(chain);\r\n }\r\n }\r\n } else if (stream.readString(12, 23) === 'BIOMOLECULE:') {\r\n // assert molIndex === this.assemblies.length + 1\r\n this._matrix = null;\r\n this._matrixIndex = -1;\r\n this._assembly = assembly = new Assembly(this._complex);\r\n this.assemblies.push(assembly);\r\n }\r\n }\r\n}\r\n\r\nRemark350.prototype.id = 350;\r\n\r\nexport default Remark350;\r\n","/** Helper class for stream-like reading input files. */\r\nclass PDBStream {\r\n /**\r\n * Create a stream\r\n * @param {String} data Input data\r\n */\r\n constructor(data) {\r\n /** @type String */\r\n this._data = data; // Input file\r\n /** @type Number */\r\n this._start = 0; // Starting position of line\r\n /** @type Number */\r\n this._nextCR = -1; // Position of next CR (0x0D)\r\n /** @type Number */\r\n this._nextLF = -1; // Position of next LF (0x0A)\r\n /** @type Number */\r\n this._next = -1; // End position of line\r\n /** @type Number */\r\n this._end = data.length; // End of data\r\n\r\n this.next();\r\n }\r\n\r\n /**\r\n * Reading next line.\r\n * @returns {String} Next line in data (ending with LF or CR)\r\n */\r\n readLine() {\r\n return this._data.slice(this._start, this._next);\r\n }\r\n\r\n /**\r\n * Reading character from position.\r\n * @param {Number} pos - Position in current line.\r\n * @returns {String} Character from position\r\n */\r\n readChar(pos) {\r\n pos = this._start + pos - 1;\r\n return pos < this._next ? this._data[pos] : ' ';\r\n }\r\n\r\n /**\r\n * Reading character code from position.\r\n * @param {Number} pos - Position in current line.\r\n * @returns {Number} Character code from position\r\n */\r\n readCharCode(pos) {\r\n pos = this._start + pos - 1;\r\n return pos < this._next ? this._data.charCodeAt(pos) : 32;\r\n }\r\n\r\n /**\r\n * Reading string from begin to end points.\r\n * For a reason unknown, numbering assumed not to start from 0, but from 1.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {String} String from begin to end\r\n */\r\n readString(begin, end) {\r\n const from = this._start + begin - 1;\r\n const to = this._start + end;\r\n return this._data.slice(from, to < this._next ? to : this._next);\r\n }\r\n\r\n /**\r\n * Reading integer from begin to end points.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {Number} Integer from begin to end\r\n */\r\n readInt(begin, end) {\r\n return parseInt(this.readString(begin, end), 10);\r\n }\r\n\r\n /**\r\n * Reading float from begin to end points.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {Number} Float from begin to end\r\n */\r\n readFloat(begin, end) {\r\n return parseFloat(this.readString(begin, end));\r\n }\r\n\r\n /**\r\n * Checking for end of data.\r\n * @returns {boolean} True if data is ended, false otherwise\r\n */\r\n end() {\r\n return this._start >= this._end;\r\n }\r\n\r\n /**\r\n * Procedure to re-arrange current pointers in data.\r\n */\r\n next() {\r\n const start = this._next + 1;\r\n this._start = start < this._end ? start : this._end;\r\n\r\n // support CR, LF, CR+LF line endings\r\n // do not support LF+CR, CR+CR+LF, and other strange combinations\r\n\r\n if (this._start > this._nextCR) {\r\n this._nextCR = (this._data.indexOf('\\r', this._start) + 1 || this._end + 1) - 1;\r\n }\r\n if (this._start > this._nextLF) {\r\n this._nextLF = (this._data.indexOf('\\n', this._start) + 1 || this._end + 1) - 1;\r\n }\r\n this._next = this._nextCR + 1 < this._nextLF ? this._nextCR : this._nextLF;\r\n }\r\n}\r\n\r\nexport default PDBStream;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport Remark290 from './pdb/Remark290';\r\nimport Remark350 from './pdb/Remark350';\r\nimport PDBStream from './PDBStream';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst TAG_LENGTH = 6;\r\n\r\nfunction nameToElement(name) {\r\n // http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM\r\n //\r\n // http://www.cgl.ucsf.edu/chimera/docs/UsersGuide/tutorials/pdbintro.html#note1\r\n //\r\n // Atom names start with element symbols right-justified in columns 13-14\r\n // as permitted by the length of the name. For example, the symbol FE for\r\n // iron appears in columns 13-14, whereas the symbol C for carbon appears\r\n // in column 14 (see Misaligned Atom Names). If an atom name has four\r\n // characters, however, it must start in column 13 even if the element\r\n // symbol is a single character (for example, see Hydrogen Atoms).\r\n\r\n const veryLong = name.trim().length === 4;\r\n return name.slice(0, veryLong ? 1 : 2).trim();\r\n}\r\n\r\n// the most frequently used beginnings; although HEADER is mandatory, it is often missing in handmade files\r\nconst pdbStartRegexp = /^(HEADER\\s|COMPND\\s|REMARK\\s|ATOM {2}|HETATM|MODEL )/i;\r\n\r\nconst remarkParsers = {\r\n // NOTE: please forget the idea to build the method name in runtime, it can be obfuscated.\r\n 290: Remark290,\r\n 350: Remark350,\r\n};\r\n\r\nclass PDBParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._sheet = null;\r\n this._serialAtomMap = null;\r\n this._modelId = 1;\r\n this._compaundFound = false;\r\n this._biomoleculeFound = false;\r\n this._allowedChainsIDs = null;\r\n this._lastMolId = -1;\r\n\r\n this._remarks = {};\r\n this._remark = null;\r\n\r\n this._molecules = [];\r\n this._molecule = null;\r\n this._compndCurrToken = '';\r\n\r\n this._options.fileType = 'pdb';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && pdbStartRegexp.test(data);\r\n }\r\n\r\n _finalize() {\r\n this._fixBondsArray();\r\n this._fixChains();\r\n\r\n // keep crystallographic symmetry transformations\r\n const remark290 = this._remarks[290];\r\n this._complex.symmetry = _.isUndefined(remark290) ? [] : remark290.matrices;\r\n\r\n // add loaded biological assemblies\r\n const remark350 = this._remarks[350];\r\n this._complex.units = this._complex.units.concat(_.isUndefined(remark350) ? [] : remark350.assemblies);\r\n\r\n // add loaded macromolecules\r\n this._finalizeMolecules();\r\n\r\n // create secondary structure etc.\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n _finalizeMolecules() {\r\n // get chains from complex\r\n const chainDict = {};\r\n let i;\r\n const chains = this._complex._chains;\r\n for (i = 0; i < chains.length; ++i) {\r\n const chainObj = chains[i];\r\n const chainName = chainObj._name;\r\n chainDict[chainName] = chainObj;\r\n }\r\n\r\n // aggregate residues from chains\r\n for (i = 0; i < this._molecules.length; i++) {\r\n const m = this._molecules[i];\r\n let residues = [];\r\n for (let j = 0; j < m._chains.length; j++) {\r\n const name = m._chains[j];\r\n const chain = chainDict[name];\r\n residues = residues.concat(chain._residues.slice());\r\n }\r\n const molecule = new Molecule(this._complex, m._name, i + 1);\r\n molecule.residues = residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n _fixChains() {\r\n const idChainMap = {};\r\n const complex = this._complex;\r\n\r\n // prepare\r\n for (let i = 0; i < complex._chains.length; i++) {\r\n const chain = complex._chains[i];\r\n idChainMap[chain._name.charCodeAt(0)] = chain;\r\n }\r\n }\r\n\r\n // FIXME: This function is redundant, CONECT records always follow ATOM and HETATM. Build the map online.\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const complex = this._complex;\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, ni = atoms.length; i < ni; ++i) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n const bonds = complex._bonds;\r\n const { logger } = this;\r\n for (let j = 0, nj = bonds.length; j < nj; ++j) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n logger.debug('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _parseATOM(stream) {\r\n if (this._modelId !== 1) {\r\n return;\r\n }\r\n\r\n /* eslint-disable no-magic-numbers */\r\n const het = stream.readCharCode(1) === 0x48;\r\n\r\n // field names according to wwPDB Format\r\n // NOTE: Chimera allows (nonstandard) use of columns 6-11 for the integer atom serial number in ATOM records.\r\n const serial = het ? stream.readInt(7, 11) : stream.readInt(6, 11);\r\n let name = stream.readString(13, 16);\r\n const altLoc = stream.readChar(17);\r\n const resName = stream.readString(18, 20).trim();\r\n const chainID = stream.readChar(22);\r\n const resSeq = stream.readInt(23, 26);\r\n const iCode = stream.readChar(27);\r\n const x = stream.readFloat(31, 38);\r\n const y = stream.readFloat(39, 46);\r\n const z = stream.readFloat(47, 54);\r\n const occupancy = stream.readFloat(55, 60);\r\n const tempFactor = stream.readFloat(61, 66);\r\n const element = stream.readString(77, 78).trim() || nameToElement(name);\r\n const charge = stream.readInt(79, 80) || 0;\r\n /* eslint-enable no-magic-numbers */\r\n // skip waters (there may be lots of them)\r\n if (this.settings.now.nowater) {\r\n if (resName === 'HOH' || resName === 'WAT') {\r\n return;\r\n }\r\n }\r\n\r\n // PDB uses positional system for atom names. It helps derive element type from the name\r\n // but names may include extra spaces. From this point on we don't need those spaces anymore.\r\n name = name.trim();\r\n\r\n const type = Element.getByName(element);\r\n const role = Element.Role[name]; // FIXME: Maybe should use type as additional index (\" CA \" vs. \"CA \")\r\n\r\n // NOTE: Residues of a particular chain are not required to be listed next to each other.\r\n // https://github.com/biasmv/pv/commit/7319b898b7473ba380c26699e3b028b2b1a7e1a1\r\n let chain = this._chain;\r\n if (!chain || chain.getName() !== chainID) {\r\n this._chain = chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = null;\r\n }\r\n\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n this._residue = residue = chain.addResidue(resName, resSeq, iCode);\r\n }\r\n\r\n const xyz = new THREE.Vector3(x, y, z);\r\n residue.addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n _parseENDMDL() {\r\n this._modelId += 1;\r\n }\r\n\r\n _parseCONECT(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const serial0 = stream.readInt(7, 11);\r\n const serial1 = stream.readInt(12, 16);\r\n const serial2 = stream.readInt(17, 21);\r\n const serial3 = stream.readInt(22, 26);\r\n const serial4 = stream.readInt(27, 31);\r\n /* eslint-enable no-magic-numbers */\r\n\r\n const complex = this._complex;\r\n\r\n // Keep bonds ordered by atom serial\r\n if (serial1 && serial1 > serial0) {\r\n complex.addBond(serial0, serial1, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial2 && serial2 > serial0) {\r\n complex.addBond(serial0, serial2, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial3 && serial3 > serial0) {\r\n complex.addBond(serial0, serial3, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial4 && serial4 > serial0) {\r\n complex.addBond(serial0, serial4, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n }\r\n\r\n _parseCOMPND(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const str = stream.readString(11, 80);\r\n const tokenIdx = str.indexOf(':');\r\n this._compndCurrToken = tokenIdx > 0 ? str.substring(0, tokenIdx).trim() : this._compndCurrToken;\r\n /* eslint-enable no-magic-numbers */\r\n\r\n // start reading new molecule\r\n if (this._compndCurrToken === 'MOL_ID') {\r\n this._molecule = { _index: '', _chains: [] };\r\n this._molecule._index = parseInt(str.substring(tokenIdx + 1, str.indexOf(';')), 10);\r\n this._molecules.push(this._molecule);\r\n // parse molecule name\r\n } else if (this._compndCurrToken === 'MOLECULE' && this._molecule != null) {\r\n this._molecule._name = str.substring(tokenIdx + 1, str.indexOf(';')).trim();\r\n // parse molecule chains\r\n } else if (this._compndCurrToken === 'CHAIN' && this._molecule != null) {\r\n let chainStr = str.substring(tokenIdx + 1, 80).trim();\r\n const lastChar = chainStr[chainStr.length - 1];\r\n if (lastChar === ';' || lastChar === ',') {\r\n chainStr = chainStr.slice(0, -1);\r\n }\r\n chainStr = chainStr.replace(/\\s+/g, '');\r\n const chains = chainStr.split(',');\r\n this._molecule._chains = this._molecule._chains.concat(chains);\r\n }\r\n }\r\n\r\n _parseREMARK(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const remarkNum = stream.readInt(8, 10);\r\n /* eslint-enable no-magic-numbers */\r\n\r\n // create remark parser if needed\r\n let remark = this._remarks[remarkNum];\r\n if (_.isUndefined(remark)) {\r\n const RemarkParser = remarkParsers[remarkNum];\r\n if (_.isFunction(RemarkParser)) {\r\n this._remarks[remarkNum] = remark = new RemarkParser(this._complex);\r\n }\r\n }\r\n\r\n // delegate parsing\r\n if (!_.isUndefined(remark)) {\r\n remark.parse(stream);\r\n }\r\n }\r\n\r\n _parseHELIX(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const fields = [20, 22, 32, 34];\r\n /* eslint-enable no-magic-numbers */\r\n this._parseSTRUCTURE(stream, fields, (obj) => {\r\n this._complex.addHelix(obj);\r\n this._complex.structures.push(obj);\r\n });\r\n }\r\n\r\n _parseSHEET(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const fields = [22, 23, 33, 34];\r\n /* eslint-enable no-magic-numbers */\r\n this._parseSTRUCTURE(stream, fields, (obj) => {\r\n this._complex.addSheet(obj);\r\n });\r\n }\r\n\r\n _parseSTRUCTURE(stream, pars, adder) {\r\n const startId = 0;\r\n const startIndex = 1;\r\n const endId = 2;\r\n const endIndex = 3;\r\n\r\n // identify fields: debugging and stuff\r\n /* eslint-disable no-magic-numbers */\r\n const codeOfS = 0x53;\r\n const serialNumber = stream.readInt(8, 10);\r\n const structureName = stream.readString(12, 14).trim(); // FIXME: LString(3) forbids trim()\r\n const comment = stream.readString(41, 70).trim();\r\n const helLength = stream.readInt(72, 76);\r\n const helixClass = stream.readInt(39, 40);\r\n const shWidth = stream.readInt(15, 16);\r\n const shCur = stream.readInt(42, 45);\r\n const shPrev = stream.readInt(57, 60);\r\n /* eslint-enable no-magic-numbers */\r\n // file fields\r\n const startChainID = stream.readString(pars[startId], pars[endId] + 1).charCodeAt(0);\r\n const endChainID = stream.readString(pars[endId], pars[endId] + 1).charCodeAt(0);\r\n const startSequenceNumber = stream.readInt(pars[startIndex], pars[startIndex] + 3);\r\n let iCodeStr = stream.readString(pars[startIndex] + 4, pars[startIndex] + 4);\r\n let startICode = 0;\r\n\r\n if (iCodeStr.length > 0) {\r\n startICode = iCodeStr.charCodeAt(0);\r\n }\r\n const endSequenceNumber = stream.readInt(pars[endIndex], pars[endIndex] + 3);\r\n iCodeStr = stream.readString(pars[endIndex] + 4, pars[endIndex] + 4);\r\n let endICode = 0;\r\n if (iCodeStr.length > 0) {\r\n endICode = iCodeStr.charCodeAt(0);\r\n }\r\n\r\n let obj;\r\n let cs = this._sheet;\r\n if (stream.readCharCode(1) === codeOfS) {\r\n if (cs !== null && cs.getName() !== structureName) {\r\n cs = null;\r\n this._sheet = null;\r\n }\r\n if (cs === null) {\r\n this._sheet = obj = new Sheet(structureName, shWidth);\r\n adder(obj);\r\n } else {\r\n obj = cs;\r\n }\r\n const strand = new Strand(\r\n obj,\r\n this._complex.getUnifiedSerial(startChainID, startSequenceNumber, startICode),\r\n this._complex.getUnifiedSerial(endChainID, endSequenceNumber, endICode),\r\n helixClass,\r\n shCur,\r\n shPrev,\r\n );\r\n obj.addStrand(strand);\r\n this._complex.structures.push(strand);\r\n } else {\r\n obj = new Helix(\r\n helixClass,\r\n this._complex.getUnifiedSerial(startChainID, startSequenceNumber, startICode),\r\n this._complex.getUnifiedSerial(endChainID, endSequenceNumber, endICode),\r\n serialNumber,\r\n structureName,\r\n comment,\r\n helLength,\r\n );\r\n adder(obj);\r\n }\r\n }\r\n\r\n _parseHEADER(stream) {\r\n const { metadata } = this._complex;\r\n metadata.classification = stream.readString(11, 50).trim();\r\n metadata.date = stream.readString(51, 59).trim();\r\n\r\n const id = stream.readString(63, 66).trim();\r\n metadata.id = id;\r\n if (id) {\r\n this._complex.name = id;\r\n }\r\n metadata.format = 'pdb';\r\n }\r\n\r\n _parseTITLE(stream) {\r\n const { metadata } = this._complex;\r\n metadata.title = metadata.title || [];\r\n\r\n const line = stream.readInt(9, 10) || 1;\r\n metadata.title[line - 1] = stream.readString(11, 80).trim();\r\n }\r\n\r\n static tagParsers = {\r\n HEADER: PDBParser.prototype._parseHEADER,\r\n 'TITLE ': PDBParser.prototype._parseTITLE,\r\n 'ATOM ': PDBParser.prototype._parseATOM,\r\n HETATM: PDBParser.prototype._parseATOM,\r\n ENDMDL: PDBParser.prototype._parseENDMDL,\r\n CONECT: PDBParser.prototype._parseCONECT,\r\n COMPND: PDBParser.prototype._parseCOMPND,\r\n REMARK: PDBParser.prototype._parseREMARK,\r\n // 'SOURCE': PDBParser.prototype._parseSOURCE,\r\n 'HELIX ': PDBParser.prototype._parseHELIX,\r\n 'SHEET ': PDBParser.prototype._parseSHEET,\r\n\r\n // nonstandard extension to allow range 100,000 - 999,999\r\n 'ATOM 1': PDBParser.prototype._parseATOM,\r\n 'ATOM 2': PDBParser.prototype._parseATOM,\r\n 'ATOM 3': PDBParser.prototype._parseATOM,\r\n 'ATOM 4': PDBParser.prototype._parseATOM,\r\n 'ATOM 5': PDBParser.prototype._parseATOM,\r\n 'ATOM 6': PDBParser.prototype._parseATOM,\r\n 'ATOM 7': PDBParser.prototype._parseATOM,\r\n 'ATOM 8': PDBParser.prototype._parseATOM,\r\n 'ATOM 9': PDBParser.prototype._parseATOM,\r\n };\r\n\r\n parseSync() {\r\n const stream = new PDBStream(this._data);\r\n const result = this._complex = new Complex();\r\n\r\n // parse PDB line by line\r\n while (!stream.end()) {\r\n const tag = stream.readString(1, TAG_LENGTH);\r\n const func = PDBParser.tagParsers[tag];\r\n if (_.isFunction(func)) {\r\n func.call(this, stream);\r\n }\r\n stream.next();\r\n }\r\n\r\n // Resolve indices and serials to objects\r\n this._finalize();\r\n\r\n // cleanup\r\n this._serialAtomMap = null;\r\n this._sheet = null;\r\n this._residue = null;\r\n this._chain = null;\r\n this._complex = null;\r\n\r\n if (result.getAtomCount() === 0) {\r\n throw new Error('The data does not contain valid atoms');\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nPDBParser.formats = ['pdb'];\r\nPDBParser.extensions = ['.pdb', '.ent'];\r\n\r\nexport default PDBParser;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n SGroup,\r\n Bond,\r\n} = chem;\r\n\r\nconst cOrderCharCodes = {\r\n A: 0,\r\n S: 1,\r\n D: 2,\r\n T: 3,\r\n};\r\n\r\nconst cmlStartRegexp = /\\s*<\\?xml\\b[^?>]*\\?>\\s*<(?:cml|molecule)\\b/i;\r\n\r\nclass CMLParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._complex = null;\r\n this._residue = null;\r\n this._serialAtomMap = null;\r\n this._modelId = 1;\r\n this._lastMolId = -1;\r\n this._readOnlyOneMolecule = false;\r\n this._options.fileType = 'cml';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && cmlStartRegexp.test(data);\r\n }\r\n\r\n _rebuidBondIndexes(atoms, bonds) {\r\n const count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n const atomId = atoms[i].id;\r\n\r\n const countBonds = bonds.length;\r\n for (let j = 0; j < countBonds; j++) {\r\n const idxs = bonds[j].atomRefs2.split(' ');\r\n if (idxs[0] === atomId) {\r\n bonds[j].start = i;\r\n }\r\n\r\n if (idxs[1] === atomId) {\r\n bonds[j].end = i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _createSGroup(molecule, moleculeArr) {\r\n const newGroup = new SGroup(\r\n molecule.id,\r\n molecule.fieldData,\r\n new THREE.Vector3(parseFloat(molecule.x), parseFloat(molecule.y), 0),\r\n molecule.atomRefs,\r\n molecule,\r\n );\r\n if (molecule.placement === 'Relative') {\r\n newGroup._center = new THREE.Vector3(0, 0, 0);\r\n }\r\n if (molecule.fieldName === 'MDLBG_FRAGMENT_CHARGE') {\r\n newGroup._charge = parseInt(molecule.fieldData, 10) || 0;\r\n }\r\n if (molecule.fieldName === 'MDLBG_FRAGMENT_COEFFICIENT') {\r\n newGroup._repeat = parseInt(molecule.fieldData, 10) || 1;\r\n }\r\n moleculeArr.push(newGroup);\r\n }\r\n\r\n _extractSGroup(molecule, moleculeArr) {\r\n if (!Array.isArray(moleculeArr)) {\r\n moleculeArr = [];\r\n }\r\n\r\n if (molecule) {\r\n if (Array.isArray(molecule)) {\r\n const count = molecule.length;\r\n for (let i = 0; i < count; i++) {\r\n if (molecule[i].molecule) {\r\n moleculeArr = moleculeArr.concat(this._extractSGroup(molecule[i].molecule));\r\n }\r\n this._createSGroup(molecule[i], moleculeArr);\r\n }\r\n } else {\r\n if (molecule.molecule) {\r\n if (molecule.molecule) {\r\n moleculeArr = moleculeArr.concat(this._extractSGroup(molecule.molecule));\r\n }\r\n }\r\n this._createSGroup(molecule, moleculeArr);\r\n }\r\n }\r\n\r\n return moleculeArr;\r\n }\r\n\r\n _extractSGroups(molecule, atoms) {\r\n const moleculeArr = this._extractSGroup(molecule);\r\n\r\n const count = atoms.length;\r\n let i;\r\n let j;\r\n\r\n for (i = 0; i < count; i++) {\r\n const atomId = atoms[i].id;\r\n for (j = 0; j < moleculeArr.length; j++) {\r\n const firstAtomRef = moleculeArr[j]._atoms.split(' ')[0];\r\n if (firstAtomRef === atomId) {\r\n if (!atoms[i].sgroupRef) {\r\n atoms[i].sgroupRef = [];\r\n }\r\n atoms[i].sgroupRef.push(moleculeArr[j]);\r\n }\r\n }\r\n }\r\n // build sGroups centers\r\n let atomMap = {}; // sgrpmap cache\r\n let mapEntry = null;\r\n const nLimon = 100000000;\r\n const bLow = new THREE.Vector3(nLimon, nLimon, nLimon);\r\n const bHight = new THREE.Vector3(-nLimon, -nLimon, -nLimon);\r\n\r\n function cycleFuncInner(e) {\r\n mapEntry = atomMap[e];\r\n if (mapEntry) {\r\n moleculeArr[j]._atoms.push(mapEntry.a);\r\n }\r\n }\r\n\r\n function cycleFunc(e) {\r\n mapEntry = atomMap[e];\r\n if (mapEntry) {\r\n bLow.set(Math.min(bLow.x, mapEntry.x), Math.min(bLow.y, mapEntry.y), Math.min(bLow.z, mapEntry.z));\r\n bHight.set(Math.max(bHight.x, mapEntry.x), Math.max(bHight.y, mapEntry.y), Math.max(bHight.z, mapEntry.z));\r\n cycleFuncInner(e);\r\n }\r\n }\r\n\r\n for (i = 0; i < atoms.length; i++) {\r\n atomMap[atoms[i].id] = {};\r\n atomMap[atoms[i].id].x = atoms[i].x2;\r\n if (atoms[i].x3) {\r\n atomMap[atoms[i].id].x = atoms[i].x3;\r\n }\r\n atomMap[atoms[i].id].x = parseFloat(atomMap[atoms[i].id].x);\r\n atomMap[atoms[i].id].y = atoms[i].y2;\r\n if (atoms[i].y3) {\r\n atomMap[atoms[i].id].y = atoms[i].y3;\r\n }\r\n atomMap[atoms[i].id].y = parseFloat(atomMap[atoms[i].id].y);\r\n atomMap[atoms[i].id].z = '0.0';\r\n if (atoms[i].z3) {\r\n atomMap[atoms[i].id].z = atoms[i].z3;\r\n }\r\n atomMap[atoms[i].id].z = parseFloat(atomMap[atoms[i].id].z);\r\n atomMap[atoms[i].id].a = atoms[i];\r\n }\r\n\r\n let atomsRef;\r\n for (j = 0; j < moleculeArr.length; j++) {\r\n if (moleculeArr[j]._center !== null) {\r\n bLow.set(nLimon, nLimon, nLimon);\r\n bHight.set(-nLimon, -nLimon, -nLimon);\r\n atomsRef = moleculeArr[j]._atoms.split(' ');\r\n moleculeArr[j]._atoms = [];\r\n atomsRef.forEach(cycleFunc);\r\n\r\n moleculeArr[j]._center.addVectors(bLow, bHight);\r\n moleculeArr[j]._center.multiplyScalar(0.5);\r\n } else {\r\n atomsRef = moleculeArr[j]._atoms.split(' ');\r\n moleculeArr[j]._atoms = [];\r\n atomsRef.forEach(cycleFuncInner);\r\n }\r\n }\r\n atomMap = null;\r\n }\r\n\r\n _traverseData(dom) {\r\n function isArray(o) {\r\n return Object.prototype.toString.apply(o) === '[object Array]';\r\n }\r\n\r\n function parseNode(xmlNode, result) {\r\n if (xmlNode.nodeName === '#text' && xmlNode.nodeValue.trim() === '') {\r\n return;\r\n }\r\n\r\n const jsonNode = {};\r\n jsonNode.xmlNode = xmlNode;\r\n const existing = result[xmlNode.nodeName];\r\n if (existing) {\r\n if (!isArray(existing)) {\r\n result[xmlNode.nodeName] = [existing, jsonNode];\r\n } else {\r\n result[xmlNode.nodeName].push(jsonNode);\r\n }\r\n } else {\r\n result[xmlNode.nodeName] = jsonNode;\r\n }\r\n\r\n let length;\r\n let i;\r\n if (xmlNode.attributes) {\r\n ({ length } = xmlNode.attributes);\r\n for (i = 0; i < length; i++) {\r\n const attribute = xmlNode.attributes[i];\r\n jsonNode[attribute.nodeName] = attribute.nodeValue;\r\n }\r\n }\r\n\r\n ({ length } = xmlNode.childNodes);\r\n for (i = 0; i < length; i++) {\r\n parseNode(xmlNode.childNodes[i], jsonNode);\r\n }\r\n }\r\n\r\n const result = {};\r\n if (dom.childNodes.length) {\r\n parseNode(dom.childNodes[0], result);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _findSuitableMolecule(data, molSet) {\r\n for (const key in data) {\r\n if (key === 'xmlNode') {\r\n continue;\r\n } else if (key === 'molecule') {\r\n if (data.molecule) {\r\n if (data.molecule.atomArray && data.molecule.atomArray.atom) {\r\n molSet.push(data);\r\n }\r\n if (Array.isArray(data.molecule)) {\r\n for (let i = 0; i < data.molecule.length; i++) {\r\n if (data.molecule[i].atomArray && data.molecule[i].atomArray.atom) {\r\n molSet.push({ molecule: data.molecule[i] });\r\n }\r\n }\r\n }\r\n }\r\n } else if (data[key] && data[key] !== null && typeof (data[key]) === 'object') {\r\n this._findSuitableMolecule(data[key], molSet);\r\n }\r\n }\r\n }\r\n\r\n _selectComponents(text) {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(text, 'application/xml');\r\n const traversedData = this._traverseData(doc);\r\n let rawData;\r\n const self = this;\r\n\r\n function prepareComponentCompound(data) {\r\n let atoms = [];\r\n if (data.molecule && data.molecule.atomArray && data.molecule.atomArray.atom) {\r\n if (!Array.isArray(data.molecule.atomArray.atom)) {\r\n atoms.push(data.molecule.atomArray.atom);\r\n } else {\r\n atoms = data.molecule.atomArray.atom;\r\n }\r\n } else if (!data.molecule) {\r\n const ret = {};\r\n ret.atomLabels = null;\r\n ret.labelsCount = 1;\r\n return ret;\r\n }\r\n\r\n if (data.molecule.molecule) {\r\n self._extractSGroups(data.molecule.molecule, atoms);\r\n }\r\n\r\n let atom;\r\n let count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n atom = atoms[i];\r\n atom.edges = [];\r\n }\r\n\r\n let localBond = [];\r\n if (data.molecule.bondArray && data.molecule.bondArray.bond) {\r\n if (!Array.isArray(data.molecule.bondArray.bond)) {\r\n localBond.push(data.molecule.bondArray.bond);\r\n } else {\r\n localBond = data.molecule.bondArray.bond;\r\n }\r\n }\r\n let bond;\r\n count = localBond.length;\r\n self._rebuidBondIndexes(atoms, localBond);\r\n\r\n function addCurrBond(index) {\r\n bond = localBond[index];\r\n atom = atoms[bond.start];\r\n if (!atom) {\r\n return false;\r\n }\r\n atom.edges.push(bond.end);\r\n atom = atoms[bond.end];\r\n if (!atom) {\r\n return false;\r\n }\r\n atom.edges.push(bond.start);\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < count; i++) {\r\n if (!addCurrBond(i)) {\r\n // ignore invalid bond\r\n continue;\r\n }\r\n const orderAttr = bond.xmlNode.getAttribute('order');\r\n const tc = parseInt(orderAttr, 10);\r\n // the default bond order is unknown\r\n localBond[i].order = 0;\r\n localBond[i].type = Bond.BondType.UNKNOWN;\r\n if (tc > 1) {\r\n localBond[i].order = tc;\r\n } else {\r\n // another option - bond order is a string\r\n const order = cOrderCharCodes[orderAttr];\r\n if (order !== undefined) {\r\n localBond[i].order = order;\r\n if (orderAttr === 'A') {\r\n localBond[i].type = Bond.BondType.AROMATIC;\r\n }\r\n }\r\n }\r\n }\r\n\r\n count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n atom = atoms[i];\r\n atom.edges.sort();\r\n }\r\n\r\n const labels = self._breadWidthSearch(atoms, 0); // for now\r\n\r\n const retStruct = {};\r\n retStruct.atoms = atoms;\r\n retStruct.bonds = localBond;\r\n retStruct.labels = labels.atomLabels;\r\n retStruct.count = Math.min(1, labels.labelsCount); // for now\r\n retStruct.curr = -1;\r\n retStruct.originalCML = doc;\r\n\r\n return retStruct;\r\n }\r\n\r\n if (traversedData.cml) {\r\n rawData = traversedData.cml;\r\n } else {\r\n rawData = traversedData;\r\n }\r\n const retData = [];\r\n const filteredData = [];\r\n this._findSuitableMolecule(rawData, filteredData);\r\n if (this._readOnlyOneMolecule && filteredData.length > 1) {\r\n filteredData.splice(1, filteredData.length - 1);\r\n }\r\n filteredData.forEach((d) => {\r\n const rd = prepareComponentCompound(d);\r\n if (rd.atoms.length > 0) {\r\n retData.push(rd);\r\n }\r\n });\r\n return retData;\r\n }\r\n\r\n _packLabel(compId, molId) {\r\n const shift = 16;\r\n return (molId << shift) + compId;\r\n }\r\n\r\n _unpackLabel(l) {\r\n const shift = 16;\r\n const mask = (1 << shift) - 1;\r\n return { molId: l >>> shift, compId: l & mask };\r\n }\r\n\r\n _breadWidthSearch(atoms, molID) {\r\n const atomLabels = new Array(atoms.length);\r\n\r\n let id;\r\n for (id = 0; id < atomLabels.length; id++) {\r\n atomLabels[id] = this._packLabel(0, molID);\r\n }\r\n\r\n const breadthQueue = [];\r\n let componentID = 0;\r\n let labeledAtoms = atoms.length;\r\n\r\n while (labeledAtoms > 0) {\r\n componentID++;\r\n\r\n let startID = -1;\r\n for (id = 0; id < atomLabels.length; id++) {\r\n if (this._unpackLabel(atomLabels[id]).compId === 0) {\r\n startID = id;\r\n break;\r\n }\r\n }\r\n\r\n if (startID < 0) {\r\n break;\r\n }\r\n\r\n // Bread first search\r\n breadthQueue.push(atoms[startID]);\r\n atomLabels[startID] = this._packLabel(componentID, molID);\r\n labeledAtoms--;\r\n\r\n while (breadthQueue.length > 0) {\r\n const curr = breadthQueue.shift();\r\n if (!curr) {\r\n continue;\r\n }\r\n\r\n for (let i = 0; i < curr.edges.length; i++) {\r\n if (atomLabels[curr.edges[i]] !== componentID) {\r\n breadthQueue.push(atoms[curr.edges[i]]);\r\n atomLabels[curr.edges[i]] = componentID;\r\n labeledAtoms--;\r\n }\r\n }\r\n }\r\n }\r\n const ret = {};\r\n ret.atomLabels = atomLabels;\r\n ret.labelsCount = componentID;\r\n return ret;\r\n }\r\n\r\n _parseBond(eAtom, mainAtom, order, type) {\r\n if (eAtom >= 0) {\r\n const h = [Math.min(eAtom, mainAtom), Math.max(eAtom, mainAtom)];\r\n this._complex.addBond(h[0], h[1], order, type, true);\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const complex = this._complex;\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, ni = atoms.length; i < ni; ++i) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n const bonds = complex._bonds;\r\n const { logger } = this;\r\n for (let j = 0, nj = bonds.length; j < nj; ++j) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n logger.debug('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _parseSet(varData) {\r\n const complex = this._complex = new Complex();\r\n const data = varData;\r\n const currentLabel = data.curr;\r\n const { atoms, labels } = data;\r\n let atom = null;\r\n let i;\r\n let j;\r\n const count = atoms.length;\r\n\r\n function addFunc(a) {\r\n a.xmlNodeRef = atom;\r\n if (atom.x2) {\r\n atom.x3 = atom.x2;\r\n delete atom.x2;\r\n }\r\n if (atom.y2) {\r\n atom.y3 = atom.y2;\r\n delete atom.y2;\r\n }\r\n if (!(atom.z3)) {\r\n atom.z3 = '0.0';\r\n }\r\n atom.complexAtom = a;\r\n }\r\n\r\n let chains = {};\r\n // parse atoms in label order\r\n const reorder = [];\r\n for (i = 0; i < count; i++) {\r\n reorder.push(i);\r\n }\r\n reorder.sort((a, b) => labels[a] - labels[b]);\r\n for (i = 0; i < count; i++) {\r\n const atomCharge = 0;\r\n const lLabel = labels[reorder[i]];\r\n if (this._unpackLabel(lLabel).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[reorder[i]];\r\n const atomFullNameStruct = atom.elementType;\r\n\r\n if (atom.sgroupRef) {\r\n const countRef = atom.sgroupRef.length;\r\n for (let k = 0; k < countRef; ++k) {\r\n complex._sgroups.push(atom.sgroupRef[k]);\r\n }\r\n }\r\n\r\n if (atom.x3 || atom.x2) {\r\n const currAtomComp = this._unpackLabel(lLabel).compId;\r\n // use ' ' by default instead of synthetic creation of chain names\r\n const chainID = ' '; //= String.fromCharCode('A'.charCodeAt(0) + currAtomComp);\r\n const resSeq = currAtomComp;\r\n const iCode = ' ';\r\n let strLabel = currAtomComp.toString();\r\n if (strLabel.length === 1) {\r\n strLabel = `0${strLabel}`;\r\n }\r\n const resName = `N${strLabel}`;\r\n let chain = chains[chainID];\r\n if (!chain || chain.getName() !== chainID) {\r\n chains[chainID] = chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = null;\r\n }\r\n\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n this._residue = residue = chain.addResidue(resName, resSeq, iCode);\r\n }\r\n\r\n // _x, _y, _z, mname, mindex, atomNameFull, atomName, chainID, serial, isHet, atlLocInd, atomNameToTypeF\r\n let xyz = null;\r\n if (atom.x3) {\r\n xyz = new THREE.Vector3(parseFloat(atom.x3), parseFloat(atom.y3), parseFloat(atom.z3));\r\n } else if (atom.x2) {\r\n xyz = new THREE.Vector3(parseFloat(atom.x2), parseFloat(atom.y2), 0);\r\n }\r\n let element = Element.ByName[atom.elementType.toUpperCase()];\r\n if (!element) {\r\n element = (JSON.parse(JSON.stringify(Element.ByName[\r\n Object.keys(Element.ByName)[Object.keys(Element.ByName).length - 1]])));\r\n element.number += 1;\r\n element.name = atom.elementType.toUpperCase();\r\n element.fullName = 'Unknown';\r\n Element.ByName[atom.elementType.toUpperCase()] = element;\r\n }\r\n const atomSerial = parseInt(atom.id.replace(/[^0-9]/, ''), 10);\r\n const added = residue.addAtom(\r\n atomFullNameStruct,\r\n element,\r\n xyz,\r\n Element.Role.SG,\r\n true,\r\n atomSerial,\r\n ' ',\r\n 1.0,\r\n 0.0,\r\n atomCharge,\r\n );\r\n if (atom.hydrogenCount) {\r\n added.hydrogenCount = parseInt(atom.hydrogenCount, 10);\r\n }\r\n if (atom.mrvValence) {\r\n added.valence = parseInt(atom.mrvValence, 10);\r\n }\r\n addFunc(added);\r\n }\r\n }\r\n }\r\n chains = null;// NOSONAR\r\n for (i = 0; i < data.bonds.length; i++) {\r\n const cb = data.bonds[i];\r\n if (this._unpackLabel(labels[cb.start]).molId === this._unpackLabel(currentLabel).molId\r\n && this._unpackLabel(labels[cb.end]).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[cb.start];\r\n if (!atom || !(atoms[cb.end])) {\r\n continue; // skip invalid\r\n }\r\n this._parseBond(\r\n parseInt(atom.id.replace(/[^0-9]/, ''), 10),\r\n parseInt(atoms[cb.end].id.replace(/[^0-9]/, ''), 10),\r\n cb.order,\r\n cb.type,\r\n );\r\n }\r\n }\r\n\r\n for (i = 0; i < this._complex.getSGroupCount(); i++) {\r\n const sGrp = this._complex.getSGroups()[i];\r\n for (j = 0; j < sGrp._atoms.length; j++) {\r\n sGrp._atoms[j] = sGrp._atoms[j].complexAtom;\r\n }\r\n }\r\n for (i = 0; i < count; i++) {\r\n if (this._unpackLabel(labels[i]).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[i];\r\n atom.complexAtom = null;\r\n delete atom.complexAtom;\r\n }\r\n }\r\n this._complex.originalCML = data.originalCML;\r\n this._fixBondsArray();\r\n complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n this._serialAtomMap = null;\r\n this._complex = null;\r\n return complex;\r\n }\r\n\r\n parseSync() {\r\n const complexes = [];\r\n const self = this;\r\n const moleculaSet = this._selectComponents(this._data);\r\n moleculaSet.forEach((molSet) => {\r\n molSet.curr = 2;\r\n if (molSet.count === 0) {\r\n molSet.count = 1;\r\n }\r\n for (let i = 0; i < molSet.count; i++) {\r\n molSet.curr = (i + 1);\r\n complexes.push(self._parseSet(molSet, false));\r\n }\r\n });\r\n\r\n let totalAtomsParsed = 0;\r\n complexes.forEach((c) => {\r\n totalAtomsParsed += c.getAtomCount();\r\n });\r\n if (totalAtomsParsed <= 0) {\r\n throw new Error('The data does not contain valid atoms');\r\n }\r\n\r\n if (complexes.length > 1) {\r\n const joinedComplex = new Complex();\r\n joinedComplex.joinComplexes(complexes);\r\n joinedComplex.originalCML = complexes[0].originalCML;\r\n return joinedComplex;\r\n }\r\n if (complexes.length === 1) {\r\n return complexes[0];\r\n }\r\n return new Complex();\r\n }\r\n}\r\n\r\nCMLParser.formats = ['cml'];\r\nCMLParser.extensions = ['.cml'];\r\n\r\nexport default CMLParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport MMTF from '../../../vendor/js/mmtf';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst {\r\n Complex,\r\n Chain,\r\n Atom,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Bond,\r\n Assembly,\r\n Molecule,\r\n} = chem;\r\n\r\nclass ArrayComparator {\r\n constructor(original) {\r\n this._original = Array.from(original);\r\n this._original.sort();\r\n\r\n this._sum = 0;\r\n for (let i = 0; i < this._original.length; ++i) {\r\n this._sum += this._original[i];\r\n }\r\n }\r\n\r\n compare(candidate) {\r\n const len = candidate.length;\r\n if (len !== this._original.length) {\r\n return false;\r\n }\r\n\r\n let sum = 0;\r\n let i;\r\n for (i = 0; i < len; ++i) {\r\n sum += candidate[i];\r\n }\r\n\r\n if (sum !== this._sum) {\r\n return false;\r\n }\r\n\r\n const sorted = Array.from(candidate);\r\n sorted.sort();\r\n\r\n for (i = 0; i < len; ++i) {\r\n if (sorted[i] !== this._original[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nArrayComparator.prototype.constructor = ArrayComparator;\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\n// see https://github.com/rcsb/mmtf-javascript/blob/master/src/mmtf-traverse.js\r\nconst secStructToType = [\r\n StructuralElementType.HELIX_PI, // 0\r\n StructuralElementType.BEND, // 1\r\n StructuralElementType.HELIX_ALPHA, // 2\r\n StructuralElementType.STRAND, // 3\r\n StructuralElementType.HELIX_310, // 4\r\n StructuralElementType.BRIDGE, // 5\r\n StructuralElementType.TURN, // 6\r\n StructuralElementType.COIL, // 7\r\n];\r\n\r\nfunction getFirstByte(buf) {\r\n const bytes = new Uint8Array(buf, 0, 1);\r\n return bytes[0];\r\n}\r\n\r\nclass MMTFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'mmtf';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n // check if it's binary MessagePack format containing a map (dictionary)\r\n // see https://github.com/msgpack/msgpack/blob/master/spec.md\r\n return _.isArrayBuffer(data) && ((getFirstByte(data) | 1) === 0xDF);\r\n }\r\n\r\n _onModel(_modelData) {\r\n }\r\n\r\n _onChain(chainData) {\r\n if (chainData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n const chain = new Chain(this._complex, chainData.chainName);\r\n this._complex._chains[chainData.chainIndex] = chain;\r\n chain._index = chainData.chainIndex;\r\n }\r\n\r\n _onGroup(groupData) {\r\n if (groupData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n if (this.settings.now.nowater) {\r\n // skip water\r\n if (groupData.groupName === 'HOH' || groupData.groupName === 'WAT') {\r\n return;\r\n }\r\n }\r\n\r\n const chain = this._complex._chains[groupData.chainIndex];\r\n const icode = !groupData.insCode.charCodeAt(0) ? '' : groupData.insCode;\r\n const residue = chain.addResidue(groupData.groupName, groupData.groupId, icode);\r\n residue._index = groupData.groupIndex;\r\n\r\n this._updateSecStructure(this._complex, residue, groupData);\r\n }\r\n\r\n _onAtom(atomData) {\r\n if (atomData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n const altLoc = !atomData.altLoc.charCodeAt(0) ? '' : atomData.altLoc;\r\n const atom = new Atom(\r\n atomData.groupIndex, // we store residue index here to replace it later with actual reference\r\n atomData.atomName,\r\n Element.getByName(atomData.element.toUpperCase()),\r\n new THREE.Vector3(atomData.xCoord, atomData.yCoord, atomData.zCoord),\r\n Element.Role[atomData.atomName],\r\n false, // hetero atoms will be marked later\r\n atomData.atomId,\r\n altLoc,\r\n atomData.occupancy,\r\n atomData.bFactor,\r\n atomData.formalCharge,\r\n );\r\n\r\n this._complex._atoms[atomData.atomIndex] = atom;\r\n atom.index = atomData.atomIndex;\r\n\r\n this._serialAtomMap[atomData.atomId] = atom;\r\n }\r\n\r\n _onBond(bondData) {\r\n const right = Math.max(bondData.atomIndex1, bondData.atomIndex2);\r\n if (right >= this._complex._atoms.length) {\r\n return;\r\n }\r\n const left = Math.min(bondData.atomIndex1, bondData.atomIndex2);\r\n this._complex.addBond(\r\n this._complex._atoms[left],\r\n this._complex._atoms[right],\r\n bondData.bondOrder,\r\n Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n\r\n _updateSecStructure(complex, residue, groupData) {\r\n const helixClasses = [3, -1, 1, -1, 5];\r\n\r\n if (!_.isUndefined(groupData) && groupData.secStruct === this._ssType) {\r\n residue._secondary = this._ssStruct;\r\n if (this._ssStruct) {\r\n this._ssStruct.term = residue;\r\n }\r\n return;\r\n }\r\n\r\n if (!_.isUndefined(groupData)) {\r\n // start new secondary structure\r\n const type = secStructToType[groupData.secStruct];\r\n this._ssType = groupData.secStruct;\r\n this._ssStart = residue;\r\n\r\n let struct = null;\r\n switch (this._ssType) {\r\n case -1: // undefined\r\n case 7: // coil\r\n break;\r\n case 0: // pi helix\r\n case 2: // alpha helix\r\n case 4: // 3-10 helix\r\n struct = new Helix(helixClasses[this._ssType], residue, residue, 0, '', '', 0);\r\n complex._helices.push(struct);\r\n break;\r\n case 3: { // extended\r\n const sheet = new Sheet('', 0);\r\n complex._sheets.push(sheet);\r\n struct = new Strand(sheet, residue, residue, 0, null, null);\r\n break;\r\n }\r\n default:\r\n if (type !== undefined) {\r\n struct = new StructuralElement(type, residue, residue);\r\n }\r\n break;\r\n }\r\n\r\n this._ssStruct = struct;\r\n residue._secondary = struct;\r\n if (struct) {\r\n complex.structures.push(struct);\r\n }\r\n }\r\n }\r\n\r\n _updateMolecules(mmtfData) {\r\n const entities = mmtfData.entityList;\r\n if (!entities) {\r\n return;\r\n }\r\n\r\n const chainsInModel0 = mmtfData.chainsPerModel[0];\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const chains = entity.chainIndexList;\r\n let residues = [];\r\n for (let j = 0; j < chains.length; j++) {\r\n const chainIndex = chains[j];\r\n // skip chains in models other than the first one\r\n if (chainIndex >= chainsInModel0) {\r\n continue;\r\n }\r\n const chain = this._complex._chains[chainIndex];\r\n residues = residues.concat(chain._residues.slice());\r\n }\r\n const molecule = new Molecule(this._complex, entity.description, i + 1);\r\n molecule.residues = residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n // populate complex with chains, residues and atoms\r\n _traverse(mmtfData) {\r\n const self = this;\r\n\r\n // get metadata\r\n const { metadata } = this._complex;\r\n metadata.id = mmtfData.structureId;\r\n metadata.title = [];\r\n metadata.title[0] = mmtfData.title;\r\n metadata.date = mmtfData.releaseDate;\r\n metadata.format = 'mmtf';\r\n\r\n // create event callback functions\r\n const eventCallbacks = {\r\n onModel(modelData) {\r\n self._onModel(modelData);\r\n },\r\n onChain(chainData) {\r\n self._onChain(chainData);\r\n },\r\n onGroup(groupData) {\r\n self._onGroup(groupData);\r\n },\r\n onAtom(atomData) {\r\n self._onAtom(atomData);\r\n },\r\n onBond(bondData) {\r\n self._onBond(bondData);\r\n },\r\n };\r\n\r\n // temporary variables used during traversal to track secondary structures\r\n this._ssType = -1;\r\n this._ssStruct = null;\r\n this._ssStart = null;\r\n\r\n // traverse the structure and listen to the events\r\n MMTF.traverse(mmtfData, eventCallbacks);\r\n\r\n this._updateSecStructure(this._complex);\r\n this._updateMolecules(mmtfData);\r\n }\r\n\r\n // During traversal atoms and residues don't come sequentially\r\n // so a residue for certain atom can be unavailable. Thus we\r\n // store residue index in atom.\r\n // This function being called after traversal replaces the index\r\n // with actual reference, and also populates atom lists in residues.\r\n _linkAtomsToResidues() {\r\n for (let i = 0; i < this._complex._atoms.length; ++i) {\r\n const atom = this._complex._atoms[i];\r\n const residue = this._complex._residues[atom.residue];\r\n atom.residue = residue;\r\n residue._atoms.push(atom);\r\n }\r\n }\r\n\r\n _findSynonymousChains() {\r\n const named = {};\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i];\r\n const name = chain.getName();\r\n if (!named.hasOwnProperty(name)) {\r\n named[name] = [];\r\n }\r\n\r\n named[name].push(chain._index);\r\n }\r\n\r\n return named;\r\n }\r\n\r\n // NOTE: This function relies on original chain indices, so it must be called before any magic happens to chains.\r\n _parseAssemblyInfo(mmtfData) {\r\n let i;\r\n let j;\r\n let k;\r\n const assemblies = [];\r\n const { logger } = this;\r\n\r\n for (i = 0; i < mmtfData.bioAssemblyList.length; ++i) {\r\n const baInfo = mmtfData.bioAssemblyList[i];\r\n if (baInfo.transformList.length === 0) {\r\n continue;\r\n }\r\n\r\n const chains = baInfo.transformList[0].chainIndexList;\r\n const chainListCheck = new ArrayComparator(chains);\r\n\r\n // build list of chain names\r\n const chainNames = {};\r\n for (j = 0; j < chains.length; ++j) {\r\n chainNames[this._complex._chains[chains[j]].getName()] = 1;\r\n }\r\n\r\n // all chains with the same name should belong to assembly if one of them belongs\r\n const allChains = [];\r\n let name;\r\n for (name in chainNames) {\r\n if (chainNames.hasOwnProperty(name)) {\r\n // just concat arrays -- there should be no duplicates\r\n Array.prototype.push.apply(allChains, this._chainsByName[name]);\r\n }\r\n }\r\n if (!chainListCheck.compare(allChains)) {\r\n // assembly is missing some of the chains\r\n logger.debug('MMTF: Assembly is missing some of the synonymous chains. Skipping...');\r\n }\r\n\r\n const a = new Assembly(this._complex);\r\n\r\n // add chains to assembly\r\n for (name in chainNames) {\r\n if (chainNames.hasOwnProperty(name)) {\r\n a.addChain(name);\r\n }\r\n }\r\n\r\n // add unique matrices to assembly\r\n a.addMatrix(new THREE.Matrix4().fromArray(baInfo.transformList[0].matrix).transpose());\r\n for (j = 1; j < baInfo.transformList.length; ++j) {\r\n const transform = baInfo.transformList[j];\r\n\r\n if (!chainListCheck.compare(transform.chainIndexList)) {\r\n // list of chains for this transform doesn't match that for other transforms\r\n // this is illegal in our structure\r\n logger.debug('MMTF: Chain lists differ for different transforms in one assembly. Skipping...');\r\n continue;\r\n }\r\n\r\n const m = new THREE.Matrix4().fromArray(transform.matrix).transpose();\r\n\r\n // check if matrix is already in the list\r\n for (k = 0; k < a.matrices.length; ++k) {\r\n if (a.matrices[k].equals(m)) {\r\n break;\r\n }\r\n }\r\n\r\n if (k === a.matrices.length) {\r\n a.addMatrix(m);\r\n }\r\n }\r\n\r\n a.finalize();\r\n assemblies.push(a);\r\n }\r\n\r\n return assemblies;\r\n }\r\n\r\n // NOTE: This function relies on original chain indices, so it must be called before any magic happens to chains.\r\n _markHeteroAtoms(mmtfData) {\r\n const chainsInModel0 = mmtfData.chainsPerModel[0];\r\n for (let i = 0; i < mmtfData.entityList.length; ++i) {\r\n const entity = mmtfData.entityList[i];\r\n if (entity.type !== 'polymer') {\r\n for (let j = 0; j < entity.chainIndexList.length; ++j) {\r\n const chainIndex = entity.chainIndexList[j];\r\n // skip chains in models other than the first one\r\n if (chainIndex >= chainsInModel0) {\r\n continue;\r\n }\r\n const chain = this._complex._chains[chainIndex];\r\n for (let k = 0; k < chain._residues.length; ++k) {\r\n const res = chain._residues[k];\r\n for (let m = 0; m < res._atoms.length; ++m) {\r\n res._atoms[m].het = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // joins chains with the same name into single chain\r\n _joinSynonymousChains() {\r\n let i;\r\n let j;\r\n\r\n const primaryChainsArray = [];\r\n const primaryChainsHash = {};\r\n\r\n // join chains\r\n for (i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i];\r\n const name = chain.getName();\r\n if (!primaryChainsHash.hasOwnProperty(name)) {\r\n // new name -- this is a primary chain\r\n primaryChainsHash[name] = chain;\r\n chain._index = primaryChainsArray.length; // update index as this array will later replace original chain list\r\n primaryChainsArray.push(chain);\r\n continue;\r\n }\r\n\r\n // this chain should be joined with the primary chain of the same name\r\n const primary = primaryChainsHash[name];\r\n for (j = 0; j < chain._residues.length; ++j) {\r\n const residue = chain._residues[j];\r\n primary._residues.push(residue);\r\n residue._chain = primary;\r\n }\r\n }\r\n\r\n // replace chains list with one containing only primary chains\r\n // dropping references to all chains but primary\r\n this._complex._chains = primaryChainsArray;\r\n }\r\n\r\n parseSync() {\r\n const mmtfData = MMTF.decode(this._data);\r\n\r\n this._complex = new Complex();\r\n this._serialAtomMap = {}; // filled during traversal\r\n\r\n this._traverse(mmtfData);\r\n this._linkAtomsToResidues();\r\n this._markHeteroAtoms(mmtfData);\r\n this._chainsByName = this._findSynonymousChains();\r\n Array.prototype.push.apply(this._complex.units, this._parseAssemblyInfo(mmtfData));\r\n this._joinSynonymousChains();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n\r\n return this._complex;\r\n }\r\n}\r\n\r\nMMTFParser.formats = ['mmtf'];\r\nMMTFParser.extensions = ['.mmtf'];\r\nMMTFParser.binary = true;\r\n\r\nexport default MMTFParser;\r\n","class ParsingError extends Error {\r\n constructor(message, line, column) {\r\n super(`data:${line}:${column}: ${message}`);\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, ParsingError);\r\n }\r\n\r\n this.name = 'ParsingError';\r\n this.parseLine = line;\r\n this.parseColumn = column;\r\n }\r\n}\r\n\r\nexport default ParsingError;\r\n","import _ from 'lodash';\r\nimport ParsingError from './ParsingError';\r\n\r\n// Implemented and being tested against: https://www.iucr.org/resources/cif/spec/version1.1/cifsyntax\r\n\r\nfunction _isWhitespace(ch) {\r\n return ch === 32 || ch === 10 || ch === 13 || ch === 9;\r\n}\r\n\r\nfunction _inlineIndexOf(ch0, str, idx) {\r\n const len = str.length;\r\n let ch = -1;\r\n while (idx < len) {\r\n ch = str.charCodeAt(idx);\r\n if (ch === ch0 || ch === 10) {\r\n break;\r\n }\r\n ++idx;\r\n }\r\n return ch === ch0 ? idx : -1;\r\n}\r\n\r\nexport default function readCIF(source) {\r\n let i = 0;\r\n let j = 0;\r\n const n = source.length;\r\n let code = NaN;\r\n let newline = true;\r\n let line = 1;\r\n let column = 1;\r\n let begin;\r\n let state = 0; // 0 - start, 1 - block, 2 - item, 3 - loop, 4 - values, 5 - value\r\n const result = {};\r\n let block = {};\r\n let keys = [];\r\n let keysCount = 0;\r\n let key = '';\r\n let values = [];\r\n let valuesCount = 0;\r\n let value;\r\n\r\n function _parseValue() {\r\n let val;\r\n if ((code === 46 || code === 63) && (i + 1 >= n || _isWhitespace(source.charCodeAt(i + 1)))) { // '.' or '?' .....\r\n // it's a missing value\r\n ++column;\r\n ++i;\r\n return undefined;\r\n }\r\n if (newline && code === 59) { // ';' ......................................................................\r\n // parse multi-line string\r\n j = i;\r\n let lines = 0;\r\n do {\r\n j = _inlineIndexOf(10, source, j + 1); // '\\n'\r\n if (j === -1) {\r\n throw new ParsingError('Unterminated text block found', line, column);\r\n }\r\n ++lines;\r\n } while ((j + 1 < n && source.charCodeAt(j + 1) !== code) || j + 1 >= n);\r\n val = source.substring(i + 1, j).replace(/\\r/g, '');\r\n i = j + 2;\r\n line += lines;\r\n column = 1;\r\n newline = false;\r\n return val;\r\n }\r\n if (code === 39 || code === 34) { // ''' or '\"' ...........................................................\r\n // parse quoted string\r\n j = i;\r\n do {\r\n j = _inlineIndexOf(code, source, j + 1);\r\n if (j === -1) {\r\n throw new ParsingError('Unterminated quoted string found', line, column);\r\n }\r\n } while (j + 1 < n && !_isWhitespace(source.charCodeAt(j + 1)));\r\n val = source.substring(i + 1, j);\r\n column += j - i + 1;\r\n i = j + 1;\r\n return val;\r\n } // ......................................................................................................\r\n // parse until the first whitespace\r\n j = i;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n val = source.substring(i, j);\r\n column += j - i;\r\n i = j;\r\n // try to convert to a number\r\n const num = Number(val);\r\n if (!Number.isNaN(num)) {\r\n return num;\r\n }\r\n // or leave as an unquoted string\r\n return val;\r\n }\r\n\r\n function _storeKey(tag) {\r\n keys[keysCount++] = tag;\r\n }\r\n\r\n function _storeValue(val) {\r\n const keyIndex = valuesCount % keysCount;\r\n values[keyIndex].push(val);\r\n ++valuesCount;\r\n return val;\r\n }\r\n\r\n while (i <= n) {\r\n code = source.charCodeAt(i); // 'NaN' in place of ''\r\n if (code === 13) { // '\\r' .......................................................................................\r\n // just ignore\r\n } else if (code === 10) { // '\\n' ................................................................................\r\n // take note of new lines\r\n newline = true;\r\n ++line;\r\n column = 1;\r\n } else {\r\n // process inline characters\r\n if (code === 32 || code === 9) { // ' ' or '\\t' ................................................................\r\n // just ignore\r\n } else if (code === 35) { // '#' ...............................................................................\r\n // skip the comment until before the end of the line\r\n i = _inlineIndexOf(10, source, i + 1); // '\\n'\r\n if (i === -1) {\r\n break;\r\n } else {\r\n continue; // don't forget to process the new line\r\n }\r\n } else if (state === 0) { // start =============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n j = i + 5;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // add new data block\r\n result[source.substring(begin, i)] = block = {};\r\n state = 1; // block\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Data block name missing', line, column);\r\n }\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n break;\r\n } else { // ..................................................................................................\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n }\r\n } else if (state === 1) { // block =============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n state = 0; // start\r\n continue; // parse again in a different state\r\n } else if (code === 95) { // '_' .............................................................................\r\n j = i + 1;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // start new item\r\n key = source.substring(begin, i);\r\n state = 2; // item\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Tag name missing', line, column);\r\n }\r\n } else if ((code === 76 || code === 108) && source.substr(i + 1, 4).toLowerCase() === 'oop_') { // 'loop_' ...\r\n i += 5;\r\n column += 5;\r\n if (i < n && !_isWhitespace(source.charCodeAt(i))) {\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n } else {\r\n // start new loop\r\n keys = [];\r\n keysCount = 0;\r\n values = [];\r\n valuesCount = 0;\r\n state = 3; // loop\r\n continue; // don't forget to process the whitespace\r\n }\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n break;\r\n } else { // ..................................................................................................\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n }\r\n } else if (state === 2) { // item ==============================================================================\r\n if (Number.isNaN(code)) {\r\n break;\r\n }\r\n value = _parseValue();\r\n _.set(block, key, value);\r\n state = 1; // block\r\n continue;\r\n } else if (state === 3) { // loop ==============================================================================\r\n if (code === 95) { // '_' ....................................................................................\r\n j = i + 1;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // add new key\r\n _storeKey(source.substring(begin, i));\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Tag name missing', line, column);\r\n }\r\n } else { // ..................................................................................................\r\n if (keysCount > 0) {\r\n for (let keyIndex = 0; keyIndex < keysCount; ++keyIndex) {\r\n value = [];\r\n values[keyIndex] = value;\r\n _.set(block, keys[keyIndex], value);\r\n }\r\n state = 4;\r\n continue; // parse again in a different state\r\n }\r\n throw new ParsingError('Data tags are missing inside a loop', line, column);\r\n }\r\n } else if (state === 4) { // values ============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n state = 0; // start\r\n } else if (code === 95) { // '_' .............................................................................\r\n state = 1; // block\r\n } else if ((code === 76 || code === 108) && source.substr(i + 1, 4).toLowerCase() === 'oop_') { // 'loop_' ...\r\n state = 1; // block\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n state = 0;\r\n } else { // ..................................................................................................\r\n _storeValue(_parseValue());\r\n }\r\n continue; // parse again in a different state\r\n } else { // ====================================================================================================\r\n throw new ParsingError(`Unexpected internal state ${state}`, line, column);\r\n }\r\n\r\n newline = false;\r\n ++column;\r\n }\r\n ++i;\r\n }\r\n\r\n if (state === 2) { // item\r\n throw new ParsingError(`Unexpected end of file in state ${state}`, line, column);\r\n }\r\n\r\n return result;\r\n}\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\nimport readCIF from './readCIF';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Assembly,\r\n Molecule,\r\n} = chem;\r\n\r\nconst cRequiredAtomFields = [\r\n 'auth_seq_id',\r\n 'Cartn_x',\r\n 'Cartn_y',\r\n 'Cartn_z',\r\n 'label_atom_id',\r\n];\r\n\r\nconst cSecondaryCoding = {\r\n helx: 'helix',\r\n turn: 'turn',\r\n strn: 'strand',\r\n};\r\n\r\nfunction getTypeFromId(string) {\r\n const typeId = /[A-Za-z]+/.exec(string);\r\n if (!typeId) {\r\n return null;\r\n }\r\n\r\n return cSecondaryCoding[typeId[0].toLowerCase()];\r\n}\r\n\r\n/**\r\n * Make valid object an array\r\n * @param arrayLikeObject\r\n * @return {array, object} array or object\r\n */\r\nfunction arrize(arrayLikeObject) {\r\n if (arrayLikeObject === null || arrayLikeObject === undefined || _.isArray(arrayLikeObject)) {\r\n return arrayLikeObject;\r\n }\r\n return [arrayLikeObject];\r\n}\r\n\r\nfunction nameToElement(name) {\r\n // http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM\r\n //\r\n // http://www.cgl.ucsf.edu/chimera/docs/UsersGuide/tutorials/pdbintro.html#note1\r\n //\r\n // Atom names start with element symbols right-justified in columns 13-14\r\n // as permitted by the length of the name. For example, the symbol FE for\r\n // iron appears in columns 13-14, whereas the symbol C for carbon appears\r\n // in column 14 (see Misaligned Atom Names). If an atom name has four\r\n // characters, however, it must start in column 13 even if the element\r\n // symbol is a single character (for example, see Hydrogen Atoms).\r\n\r\n const veryLong = name.trim().length === 4;\r\n return name.slice(0, veryLong ? 1 : 2).trim();\r\n}\r\n\r\nclass AtomDataError extends Error {\r\n constructor(message) {\r\n super();\r\n this.name = 'AtomDataError';\r\n this.message = message;\r\n }\r\n}\r\n\r\nfunction _getOperations(operList) {\r\n if (!operList) {\r\n return null;\r\n }\r\n const idc = arrize(operList.id);\r\n const { matrix, vector } = operList;\r\n if (!idc || !matrix || !vector) {\r\n return null;\r\n }\r\n\r\n const ops = [];\r\n for (let i = 0, n = idc.length; i < n; ++i) {\r\n const mtx = new THREE.Matrix4();\r\n const { elements } = mtx;\r\n\r\n for (let row = 0; row < 3; ++row) {\r\n const matrixData = matrix[row + 1];\r\n elements[row] = arrize(matrixData[1])[i];\r\n elements[row + 4] = arrize(matrixData[2])[i];\r\n elements[row + 8] = arrize(matrixData[3])[i];\r\n elements[row + 12] = arrize(vector[row + 1])[i];\r\n }\r\n ops[idc[i]] = mtx;\r\n }\r\n return ops;\r\n}\r\n\r\nfunction _extractOperations(assemblyGen, opsDict) {\r\n assemblyGen = _.isString(assemblyGen) ? assemblyGen : `${assemblyGen}`;\r\n const l = assemblyGen.replace(/\\)\\s*\\(/g, '!').replace(/[()']/g, '');\r\n const groupStr = l.split('!');\r\n const gps = [];\r\n\r\n for (let grIdx = 0, grCount = groupStr.length; grIdx < grCount; ++grIdx) {\r\n const gr = groupStr[grIdx].split(',');\r\n const gp = [];\r\n let idx = 0;\r\n for (let i = 0, n = gr.length; i < n; ++i) {\r\n const s = gr[i];\r\n if (s.includes('-')) {\r\n const es = s.split('-');\r\n let j = parseInt(es[0], 10);\r\n const m = parseInt(es[1], 10);\r\n for (; j <= m; ++j) {\r\n gp[idx++] = opsDict[j];\r\n }\r\n } else {\r\n gp[idx++] = opsDict[s];\r\n }\r\n }\r\n gps.push(gp);\r\n }\r\n\r\n // traverse all groups from the end of array and make all mults\r\n const matrices = [];\r\n let cnt = 0;\r\n function traverse(level, mtx) {\r\n for (let ii = 0, nn = gps[level].length; ii < nn; ++ii) {\r\n const newMtx = mtx ? mtx.clone() : new THREE.Matrix4();\r\n newMtx.multiplyMatrices(gps[level][ii], newMtx);\r\n if (level === 0) {\r\n matrices[cnt++] = newMtx;\r\n } else {\r\n traverse(level - 1, newMtx);\r\n }\r\n }\r\n }\r\n traverse(gps.length - 1);\r\n return matrices;\r\n}\r\n\r\nclass CIFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this.asymDict = {};\r\n this.molecules = [];\r\n this._options.fileType = 'cif';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && /^\\s*data_/i.test(data);\r\n }\r\n\r\n parseSync() {\r\n this.logger.info('Parsing CIF file..');\r\n const data = readCIF(this._data);\r\n return this._toComplex(data);\r\n }\r\n\r\n /**\r\n * Convert intermediate structure into our valid Complex object\r\n * @param cifData intermediate CIF object\r\n * @returns {Complex} complex\r\n * @private\r\n */\r\n _toComplex(cifData) {\r\n const complex = new Complex();\r\n const complexData = cifData[Object.keys(cifData)[0]];\r\n this._extractAtoms(complex, complexData);\r\n this._extractSecondary(complex, complexData);\r\n this._extractAssemblies(complex, complexData);\r\n this._extractMolecules(complex, complexData);\r\n this._extractMetadata(complex, complexData);\r\n complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n });\r\n\r\n return complex;\r\n }\r\n\r\n /**\r\n * Extract metadata\r\n * @param complex structure to fill\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n\r\n _extractMetadata(complex, complexData) {\r\n const { metadata } = complex;\r\n metadata.id = complexData.entry.id;\r\n metadata.classification = complexData.struct_keywords.pdbx_keywords;\r\n const databaserev = complexData.database_PDB_rev;\r\n metadata.date = (databaserev && databaserev.date_original) ? databaserev.date_original : '';\r\n metadata.format = 'cif';\r\n metadata.title = [];\r\n metadata.title[0] = complexData.struct.title;\r\n }\r\n\r\n /**\r\n * Extract molecules information from CIF structure (should be called strictly after _extractAtoms)\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractMolecules(complex, complexData) {\r\n const molData = complexData.entity;\r\n const names = arrize(molData.pdbx_description);\r\n const count = names.length;\r\n let i;\r\n\r\n // molecules names from cif\r\n for (i = 0; i < count; i++) {\r\n if (this.molecules[i]) { // molecule was created during atoms processing\r\n this.molecules[i].name = names[i];\r\n } else { // molecule wasn't created, because there is no atom which is contained\r\n this.molecules[i] = { name: names[i], residues: [] };\r\n }\r\n }\r\n\r\n // reorganize molecules for complex and check chains\r\n const molecules = complex.getMolecules();\r\n for (i = 0; i < count; i++) {\r\n const molecule = this.molecules[i];\r\n molecules[i] = new Molecule(complex, molecule.name, i + 1);\r\n molecules[i].residues = molecule.residues;\r\n }\r\n }\r\n\r\n /**\r\n * Extract atom information from CIF structure and fill complex\r\n * @param {Complex} complex\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractAtoms(complex, complexData) {\r\n const atomData = complexData.atom_site;\r\n if (!atomData) {\r\n throw new AtomDataError('CIF parsing error: atom_site is not specified!');\r\n }\r\n\r\n for (let f = 0, n = cRequiredAtomFields.length; f < n; ++f) {\r\n if (!atomData[cRequiredAtomFields[f]]) {\r\n throw new AtomDataError(`CIF parsing error: requires field ${cRequiredAtomFields[f]} not found!`);\r\n }\r\n }\r\n\r\n const { asymDict } = this;\r\n // required fields\r\n const resIdc = arrize(atomData.auth_seq_id);\r\n const x = arrize(atomData.Cartn_x);\r\n const y = arrize(atomData.Cartn_y);\r\n const z = arrize(atomData.Cartn_z);\r\n const names = arrize(atomData.label_atom_id);\r\n const count = names.length;\r\n // optional fields\r\n const group = arrize(atomData.group_PDB) || [];\r\n const chainIdc = arrize(atomData.auth_asym_id) || [];\r\n const chainLabelIdc = arrize(atomData.label_asym_id) || [];\r\n const serials = arrize(atomData.id) || [];\r\n const iCodes = arrize(atomData.pdbx_PDB_ins_code) || [];\r\n const resNames = arrize(atomData.label_comp_id) || [];\r\n const elements = arrize(atomData.type_symbol) || [];\r\n const tempFactors = arrize(atomData.B_iso_or_equiv) || [];\r\n const occupancies = arrize(atomData.occupancy) || [];\r\n const charges = arrize(atomData.pdbx_formal_charge) || [];\r\n const altLocs = arrize(atomData.label_alt_id) || [];\r\n const models = arrize(atomData.pdbx_PDB_model_num) || [];\r\n const molecules = arrize(atomData.label_entity_id) || [];\r\n\r\n let chain = null;\r\n let residue = null;\r\n for (let i = 0; i < count; ++i) {\r\n const model = models[i] || 1;\r\n if (model !== 1) {\r\n continue;\r\n }\r\n const chainID = String(chainIdc[i] || ' ');\r\n\r\n if (!chain || chain.getName() !== chainID) {\r\n chain = complex.getChain(chainID) || complex.addChain(chainID);\r\n }\r\n asymDict[String(chainLabelIdc[i] || ' ')] = chainID;\r\n const resSeq = resIdc[i];\r\n const iCode = String(iCodes[i] || ' ');\r\n const resName = String(resNames[i] || '');\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n residue = chain.addResidue(resName, resSeq, iCode);\r\n\r\n // store residue in appropriate molecule\r\n const moleculeIdx = molecules[i] - 1;\r\n let entity = this.molecules[moleculeIdx];\r\n if (!entity) { // create new molecule if it hasn't been created\r\n this.molecules[moleculeIdx] = { name: '', residues: [] };\r\n entity = this.molecules[moleculeIdx];\r\n }\r\n entity.residues.push(residue);\r\n }\r\n\r\n const name = names[i];\r\n const element = elements[i] || nameToElement(name);\r\n const type = Element.getByName(element);\r\n const role = Element.Role[name.trim()];\r\n const xyz = new THREE.Vector3(x[i], y[i], z[i]);\r\n const het = group[i] === 'HETATM' || false;\r\n const serial = serials[i] || i;\r\n const tempFactor = tempFactors[i] || 0.0;\r\n const occupancy = occupancies[i] || 0.0;\r\n const altLoc = String(altLocs[i] || '');\r\n const charge = charges[i] || 0;\r\n\r\n residue.addAtom(\r\n name,\r\n type,\r\n xyz,\r\n role,\r\n het,\r\n serial,\r\n altLoc,\r\n occupancy,\r\n tempFactor,\r\n charge,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Extracts secondary structure information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex - complex to fill\r\n * @param complexData - CIF complex data\r\n * @private\r\n */\r\n _extractSecondary(complex, complexData) {\r\n if (complexData.struct_conf) {\r\n this._extractConfs(complex, complexData.struct_conf);\r\n }\r\n if (complexData.struct_sheet_range) {\r\n this._extractSheets(complex, complexData.struct_sheet_range);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts sheets information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex\r\n * @param sheetData\r\n * @private\r\n */\r\n _extractSheets(complex, sheetData) {\r\n const { asymDict } = this;\r\n if (!sheetData.sheet_id || !sheetData.id || !sheetData.beg_label_seq_id || !sheetData.end_label_seq_id\r\n || !sheetData.beg_label_asym_id) {\r\n return;\r\n }\r\n // Strand(sheet, start, end, sense, cur, prev)\r\n const sheets = complex._sheets;\r\n\r\n function getSheet(name) {\r\n const n = sheets.length;\r\n for (let i = 0; i < n; ++i) {\r\n if (sheets[i]._name === name) {\r\n return sheets[i];\r\n }\r\n }\r\n sheets[n] = new Sheet(name, 0);\r\n return sheets[n];\r\n }\r\n\r\n const sheetNames = arrize(sheetData.sheet_id);\r\n const strandNames = arrize(sheetData.id);\r\n const starts = arrize(sheetData.beg_auth_seq_id);\r\n const ends = arrize(sheetData.end_auth_seq_id);\r\n const chains = arrize(sheetData.beg_label_asym_id);\r\n const stICodes = arrize(sheetData.pdbx_beg_PDB_ins_code) || [];\r\n const endICodes = arrize(sheetData.pdbx_end_PDB_ins_code) || [];\r\n\r\n for (let i = 0, n = strandNames.length; i < n; ++i) {\r\n const chain = complex.getChain(asymDict[chains[i]]);\r\n const sheet = getSheet(sheetNames[i]);\r\n const startIdx = starts[i];\r\n const endIdx = ends[i];\r\n const startICode = stICodes[i] || ' ';\r\n const endICode = endICodes[i] || ' ';\r\n\r\n const start = chain.findResidue(startIdx, startICode);\r\n const end = chain.findResidue(endIdx, endICode);\r\n\r\n // TODO think about last condition\r\n if (!start || !end) {\r\n continue;\r\n }\r\n\r\n const strand = new Strand(sheet, start[0], end[0], 0, null, null);\r\n const residues = chain.getResidues();\r\n for (let r = start[1]; r <= end[1]; ++r) {\r\n residues[r]._secondary = strand;\r\n }\r\n sheet.addStrand(strand);\r\n complex.structures.push(strand);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts helix/turn/strand(?) information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex\r\n * @param helicesData\r\n * @private\r\n */\r\n _extractConfs(complex, helicesData) {\r\n const { asymDict } = this;\r\n if (!helicesData.conf_type_id || !helicesData.beg_label_seq_id || !helicesData.end_label_seq_id\r\n || !helicesData.beg_label_asym_id) {\r\n return;\r\n }\r\n\r\n const types = arrize(helicesData.conf_type_id);\r\n const starts = arrize(helicesData.beg_auth_seq_id);\r\n const stICodes = arrize(helicesData.pdbx_beg_PDB_ins_code) || [];\r\n const ends = arrize(helicesData.end_auth_seq_id);\r\n const endICodes = arrize(helicesData.pdbx_end_PDB_ins_code) || [];\r\n const comments = arrize(helicesData.details) || [];\r\n const lengths = arrize(helicesData.pdbx_PDB_helix_length) || [];\r\n const helixClasses = arrize(helicesData.pdbx_PDB_helix_class) || [];\r\n const names = arrize(helicesData.id) || [];\r\n const chains = arrize(helicesData.beg_label_asym_id);\r\n\r\n for (let i = 0, n = types.length; i < n; ++i) {\r\n const type = getTypeFromId(types[i]);\r\n if (!type) {\r\n continue;\r\n }\r\n const name = names[i] || types[i];\r\n const chain = complex.getChain(asymDict[chains[i]]);\r\n\r\n const startIdx = starts[i];\r\n const endIdx = ends[i];\r\n const startICode = stICodes[i] || ' ';\r\n const endICode = endICodes[i] || ' ';\r\n\r\n const start = chain.findResidue(startIdx, startICode);\r\n const end = chain.findResidue(endIdx, endICode);\r\n\r\n // TODO think about last condition\r\n if (!start || !end) {\r\n continue;\r\n }\r\n const comment = comments[i] || '';\r\n const length = lengths[i] || 0;\r\n const helixClass = helixClasses[i] || ' ';\r\n let struct;\r\n if (type === 'helix') {\r\n const idx = complex._helices.length;\r\n struct = new Helix(helixClass, start[0], end[0], idx, name, comment, length);\r\n complex.addHelix(struct);\r\n complex.structures.push(struct);\r\n } else if (type === 'turn') {\r\n struct = new StructuralElement(StructuralElement.Type.TURN, start[0], end[0]);\r\n complex.structures.push(struct);\r\n } else {\r\n struct = null;\r\n }\r\n if (!struct) {\r\n continue;\r\n }\r\n const residues = chain.getResidues();\r\n for (let r = start[1]; r <= end[1]; ++r) {\r\n residues[r]._secondary = struct;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Extract biological assemblies information from CIF structure and fill complex\r\n * @param {Complex} complex\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractAssemblies(complex, complexData) {\r\n const { asymDict } = this;\r\n const asmGen = complexData.pdbx_struct_assembly_gen;\r\n if (!asmGen) {\r\n return;\r\n }\r\n\r\n const asmIdx = arrize(asmGen.assembly_id);\r\n const asmOper = arrize(asmGen.oper_expression);\r\n const asmList = arrize(asmGen.asym_id_list);\r\n if (!asmIdx || !asmOper || !asmList) {\r\n return;\r\n }\r\n\r\n const operList = _getOperations(complexData.pdbx_struct_oper_list);\r\n if (!operList) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = asmIdx.length; i < n; ++i) {\r\n const asm = new Assembly(complex);\r\n const assemblyOps = _extractOperations(asmOper[i], operList);\r\n const entries = asmList[i].split(',');\r\n for (let ii = 0, nn = entries.length; ii < nn; ++ii) {\r\n const chain = entries[ii].trim();\r\n if (chain.length > 0) {\r\n asm.addChain(asymDict[chain]);\r\n }\r\n }\r\n asm.matrices = assemblyOps;\r\n complex.units.push(asm);\r\n }\r\n }\r\n}\r\n\r\nCIFParser.formats = ['cif', 'mmcif'];\r\nCIFParser.extensions = ['.cif', '.mmcif'];\r\n\r\nexport default CIFParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Volume from '../../chem/Volume';\r\n\r\nexport const valueType = {\r\n singular: 0,\r\n vector: 1,\r\n array: 2,\r\n buffer: 3,\r\n};\r\n\r\nclass VolumeModel {\r\n _xyz2crs = [];\r\n\r\n _origin = new THREE.Vector3(0, 0, 0);\r\n\r\n constructor() {\r\n this._header = {};\r\n this._boxSize = new THREE.Vector3();\r\n this._boxStart = new THREE.Vector3();\r\n this._header.delta = {};\r\n this._header.extent = [];\r\n this._header.nstart = [];\r\n this._header.grid = [];\r\n this._header.crs2xyz = [];\r\n this._header.cellDims = new THREE.Vector3();\r\n this._header.angles = [];\r\n this._header.origin = new THREE.Vector3(0, 0, 0);\r\n this._header.dmin = 0;\r\n this._header.dmean = 0;\r\n this._header.dmax = 0;\r\n }\r\n\r\n _typedCheck() {\r\n if (_.isTypedArray(this._buff)) {\r\n this._buff = this._buff.buffer;\r\n } else if (!_.isArrayBuffer(this._buff)) {\r\n throw new TypeError('Expected ArrayBuffer or TypedArray');\r\n }\r\n }\r\n\r\n _fillHeader(headerFormat, arrays) {\r\n for (const key in headerFormat) {\r\n if (headerFormat.hasOwnProperty(key)) {\r\n switch (headerFormat[key][0]) {\r\n case valueType.singular:\r\n this._header[key] = arrays[headerFormat[key][1]][headerFormat[key][2]];\r\n break;\r\n\r\n case valueType.array:\r\n this._parseArray(this._header[key], arrays[headerFormat[key][1]], headerFormat[key][2]);\r\n break;\r\n\r\n case valueType.vector:\r\n this._parseVector(this._header[key], arrays[headerFormat[key][1]], headerFormat[key][2]);\r\n break;\r\n\r\n case valueType.buffer:\r\n this._header[key] = new Uint8Array(\r\n arrays[headerFormat[key][1]],\r\n [headerFormat[key][2]] * 4,\r\n [headerFormat[key][3]] * 4,\r\n );\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _parseVector(vector, arr, pos) {\r\n [vector.x, vector.y, vector.z] = [arr[pos], arr[pos + 1], arr[pos + 2]];\r\n }\r\n\r\n _parseArray(vector, arr, pos) {\r\n vector[0] = arr[pos];\r\n vector[1] = arr[pos + 1];\r\n vector[2] = arr[pos + 2];\r\n }\r\n\r\n _parseHeader(_buffer) {}\r\n\r\n _setAxisIndices() {}\r\n\r\n _setOrigins() {}\r\n\r\n _getAxis() {\r\n const header = this._header;\r\n\r\n const xScale = header.cellDims.x / header.grid[0];\r\n const yScale = header.cellDims.y / header.grid[1];\r\n const zScale = header.cellDims.z / header.grid[2];\r\n\r\n const [alpha, beta, gamma] = header.angles;\r\n\r\n const z1 = Math.cos(beta);\r\n const z2 = (Math.cos(alpha) - Math.cos(beta)\r\n * Math.cos(gamma)) / Math.sin(gamma);\r\n const z3 = Math.sqrt(1.0 - z1 * z1 - z2 * z2);\r\n\r\n const xaxis = new THREE.Vector3(xScale, 0, 0);\r\n const yaxis = new THREE.Vector3(Math.cos(gamma) * yScale, Math.sin(gamma) * yScale, 0);\r\n const zaxis = new THREE.Vector3(z1 * zScale, z2 * zScale, z3 * zScale);\r\n\r\n return [xaxis, yaxis, zaxis];\r\n }\r\n\r\n _getXYZdim() {\r\n return [this._header.extent[this._xyz2crs[0]],\r\n this._header.extent[this._xyz2crs[1]],\r\n this._header.extent[this._xyz2crs[2]]];\r\n }\r\n\r\n _getVolumeInfo() {\r\n const volInfo = _.pick(this._header, ['dmean', 'dmin', 'dmax', 'sd', 'delta']);\r\n volInfo.obtuseAngle = this._header.angles.map((angle) => Number(angle >= (Math.PI / 2)));\r\n return volInfo;\r\n }\r\n\r\n _setBoxParams(xaxis, yaxis, zaxis) {\r\n // if axes are not orthogonal, the origins might not match with box coordinates - need to make shift\r\n let shiftX = 0;\r\n let shiftY = 0;\r\n const [alpha, beta, gamma] = this._header.angles;\r\n\r\n if (gamma >= Math.PI / 2) {\r\n shiftX += Math.abs(yaxis.x);\r\n }\r\n if (beta >= Math.PI / 2) {\r\n shiftX += Math.abs(zaxis.x);\r\n }\r\n if (alpha >= Math.PI / 2) {\r\n shiftY += Math.abs(zaxis.y);\r\n }\r\n\r\n this._boxStart = new THREE.Vector3(this._origin.x - shiftX, this._origin.y - shiftY, this._origin.z);\r\n this._boxSize = new THREE.Vector3(\r\n Math.abs(xaxis.x) + Math.abs(yaxis.x) + Math.abs(zaxis.x),\r\n Math.abs(yaxis.y) + Math.abs(zaxis.y),\r\n Math.abs(zaxis.z),\r\n );\r\n\r\n const delta = (axe, proj) => (Math.abs(axe[proj]) / this._boxSize[proj]);\r\n this._header.delta.x = delta(yaxis, 'x');\r\n this._header.delta.y = delta(zaxis, 'x');\r\n this._header.delta.z = delta(zaxis, 'y');\r\n }\r\n\r\n _getXYZbox() {\r\n return new THREE.Box3(this._boxStart.clone(), this._boxStart.clone().add(this._boxSize));\r\n }\r\n\r\n _toXYZData() {}\r\n\r\n parse(data) {\r\n this._parseHeader(data);\r\n this._setOrigins();\r\n return new Volume(Float32Array, this._getXYZdim(), this._getXYZbox(), 1, this._toXYZData(), this._getVolumeInfo());\r\n }\r\n}\r\n\r\nexport default VolumeModel;\r\n","import Parser from './Parser';\r\nimport VolumeModel, { valueType } from './VolumeModel';\r\n\r\nconst CCP4Header = {\r\n extent: [valueType.array, 'u32', 0],\r\n type: [valueType.singular, 'u32', 3],\r\n nstart: [valueType.array, 'i32', 4],\r\n grid: [valueType.array, 'u32', 7],\r\n cellDims: [valueType.vector, 'f32', 10],\r\n angles: [valueType.array, 'f32', 13],\r\n crs2xyz: [valueType.array, 'i32', 16],\r\n dmin: [valueType.singular, 'f32', 19],\r\n dmax: [valueType.singular, 'f32', 20],\r\n dmean: [valueType.singular, 'f32', 21],\r\n ispg: [valueType.singular, 'u32', 22],\r\n nsymbt: [valueType.singular, 'u32', 23],\r\n lksflg: [valueType.singular, 'u32', 24],\r\n customData: [valueType.buffer, 'buffer', 25, 9],\r\n origin: [valueType.vector, 'f32', 34],\r\n map: [valueType.buffer, 'buffer', 52, 1],\r\n machine: [valueType.singular, 'u32', 53],\r\n sd: [valueType.singular, 'f32', 54],\r\n nlabel: [valueType.singular, 'f32', 55],\r\n label: [valueType.buffer, 'buffer', 56, 200],\r\n};\r\n\r\nclass Ccp4Model extends VolumeModel {\r\n // read header (http://www.ccp4.ac.uk/html/maplib.html)\r\n _parseHeader(_buffer) {\r\n this._buff = _buffer;\r\n this._typedCheck();\r\n const arrays = {};\r\n arrays.u32 = new Uint32Array(this._buff, 0, 56);\r\n arrays.i32 = new Int32Array(this._buff, 0, 56);\r\n arrays.f32 = new Float32Array(this._buff, 0, 56);\r\n arrays.buffer = this._buff;\r\n const header = this._header;\r\n\r\n this._fillHeader(CCP4Header, arrays);\r\n\r\n // calculate non-orthogonal unit cell coordinates\r\n header.angles.forEach((angle, i, a) => { a[i] *= Math.PI / 180.0; });\r\n }\r\n\r\n _setAxisIndices() {\r\n const header = this._header;\r\n\r\n if (header.cellDims.x === 0.0 && header.cellDims.y === 0.0 && header.cellDims.z === 0.0) {\r\n header.cellDims.set(1.0, 1.0, 1.0);\r\n }\r\n // Apply header conversion\r\n // Mapping between CCP4 column, row, section and VMD x, y, z.\r\n const { crs2xyz } = this._header;\r\n if (crs2xyz[0] === 0 && crs2xyz[1] === 0 && crs2xyz[2] === 0) {\r\n crs2xyz[0] = 1;\r\n crs2xyz[1] = 2;\r\n crs2xyz[2] = 3;\r\n }\r\n\r\n const xyz2crs = this._xyz2crs;\r\n xyz2crs[crs2xyz[0] - 1] = 0; // column\r\n xyz2crs[crs2xyz[1] - 1] = 1; // row\r\n xyz2crs[crs2xyz[2] - 1] = 2; // section\r\n }\r\n\r\n _setOrigins() {\r\n const [xaxis, yaxis, zaxis] = this._getAxis();\r\n this._setAxisIndices();\r\n\r\n const header = this._header;\r\n const xyz2crs = this._xyz2crs;\r\n // Handle both MRC-2000 and older format maps\r\n if (header.origin.x === 0.0 && header.origin.y === 0.0 && header.origin.z === 0.0) {\r\n this._origin.addScaledVector(xaxis, header.nstart[xyz2crs[0]]);\r\n this._origin.addScaledVector(yaxis, header.nstart[xyz2crs[1]]);\r\n this._origin.addScaledVector(zaxis, header.nstart[xyz2crs[2]]);\r\n } else {\r\n this._origin = header.origin;\r\n // Use ORIGIN records rather than old n[xyz]start records\r\n // http://www2.mrc-lmb.cam.ac.uk/image2000.html\r\n // XXX the ORIGIN field is only used by the EM community, and\r\n // has undefined meaning for non-orthogonal maps and/or non-cubic voxels, etc.\r\n }\r\n xaxis.multiplyScalar(header.extent[xyz2crs[0]] - 1);\r\n yaxis.multiplyScalar(header.extent[xyz2crs[1]] - 1);\r\n zaxis.multiplyScalar(header.extent[xyz2crs[2]] - 1);\r\n\r\n if (header.type === 2) {\r\n this._data = new Float32Array(\r\n this._buff,\r\n 1024 + header.nsymbt,\r\n header.extent[0] * header.extent[1] * header.extent[2],\r\n );\r\n } else {\r\n throw new Error(`CCP4: Unsupported format ${header.type}`);\r\n }\r\n\r\n this._setBoxParams(xaxis, yaxis, zaxis);\r\n }\r\n\r\n _toXYZData() {\r\n const header = this._header;\r\n const data = this._data;\r\n const xyz2crs = this._xyz2crs;\r\n const xyzData = new Float32Array(data.length);\r\n\r\n const dim = this._getXYZdim();\r\n const xSize = dim[0];\r\n const ySize = dim[1];\r\n\r\n let crsIdx = 0;\r\n const coord = [];\r\n let x;\r\n let y;\r\n let z;\r\n for (coord[2] = 0; coord[2] < header.extent[2]; coord[2]++) { // Site\r\n for (coord[1] = 0; coord[1] < header.extent[1]; coord[1]++) { // Row\r\n for (coord[0] = 0; coord[0] < header.extent[0]; coord[0]++, crsIdx++) { // Column\r\n x = coord[xyz2crs[0]];\r\n y = coord[xyz2crs[1]];\r\n z = coord[xyz2crs[2]];\r\n xyzData[x + xSize * (y + ySize * z)] = data[crsIdx];\r\n }\r\n }\r\n }\r\n\r\n return xyzData;\r\n }\r\n}\r\n\r\nclass CCP4Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'ccp4';\r\n this.model = new Ccp4Model();\r\n }\r\n\r\n static canProbablyParse(_data) {\r\n return false; // Autodetection is not implemented yet\r\n }\r\n\r\n parseSync() {\r\n return this.model.parse(this._data);\r\n }\r\n}\r\n\r\nCCP4Parser.formats = ['ccp4'];\r\nCCP4Parser.extensions = ['.ccp4', '.map', '.mrc'];\r\nCCP4Parser.binary = true;\r\n\r\nexport default CCP4Parser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst { Complex, Element, Molecule } = chem;\r\n\r\nclass XYZParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._atomsInf = null;\r\n\r\n this._options.fileType = 'xyz';\r\n this._fileName = options.name;\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && /^\\s*\\d+ *\\n[^\\n]*\\n\\s*\\w{1,3}\\s+-?\\d/.test(data);\r\n }\r\n\r\n _parseToAtomsInf(source) {\r\n const endnAtoms = source.indexOf('\\n');\r\n const nAtoms = parseInt(source.substring(0, endnAtoms), 10);\r\n const endComment = source.indexOf('\\n', endnAtoms + 1);\r\n let comment = source.slice(endnAtoms + 1, endComment).trim();\r\n if (comment.length === 0) {\r\n comment = this._fileName;\r\n }\r\n\r\n const startAtomsInf = endComment + source.substring(endComment).search(/\\S/);\r\n this._atomsInf = source.substring(startAtomsInf).split(/[\\s,]*\\n[\\s,]*/);\r\n if (!Number.isNaN(nAtoms) && (this._atomsInf.length - 1 !== nAtoms)) {\r\n this._complex.error = {\r\n message: 'wrong number of atoms',\r\n };\r\n return;\r\n }\r\n\r\n this._complex.metadata.format = 'xyz';\r\n this._complex.name = comment;\r\n }\r\n\r\n _parseAtomsInf() {\r\n const het = true;\r\n const altLoc = ' ';\r\n const occupancy = 1;\r\n const tempFactor = 1;\r\n const charge = 0;\r\n\r\n const chain = this._complex.addChain('A');\r\n const residue = chain.addResidue('UNK', 1, ' ');\r\n\r\n for (let i = 0; i < this._atomsInf.length - 1; i++) {\r\n const words = this._atomsInf[i].split(/[\\s,]+/);\r\n\r\n if (words.length !== 4) {\r\n this._complex.error = {\r\n message: 'missed parameters',\r\n };\r\n break;\r\n }\r\n\r\n const serial = i + 1;\r\n const name = words[0];\r\n const xyz = new THREE.Vector3(parseFloat(words[1]), parseFloat(words[2]), parseFloat(words[3]));\r\n const type = Element.getByName(name);\r\n const role = undefined;\r\n\r\n residue.addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n const molecule = new Molecule(this._complex, this._complex.name, 1);\r\n molecule.residues = residue;\r\n this._complex._molecules[0] = molecule;\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n\r\n this._parseToAtomsInf(this._data);\r\n this._parseAtomsInf();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n\r\n this._complex = null;\r\n this._atomsInf = null;\r\n\r\n if (result.error) {\r\n throw new Error(result.error.message);\r\n }\r\n return result;\r\n }\r\n\r\n static formats = ['xyz'];\r\n\r\n static extensions = ['.xyz'];\r\n}\r\n\r\nexport default XYZParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst { Complex, Element } = chem;\r\n\r\nclass PubChemParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'pubchem+json';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && data[0] === '{';\r\n }\r\n\r\n parseSync() {\r\n this.logger.info('Parsing PubChem JSON file...');\r\n return this._toComplex(JSON.parse(this._data));\r\n }\r\n\r\n _toComplex(jsonData) {\r\n const complex = new Complex();\r\n const complexData = jsonData.PC_Compounds && jsonData.PC_Compounds[0];\r\n if (complexData) {\r\n this._extractAtoms(complex, complexData);\r\n complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n });\r\n }\r\n return complex;\r\n }\r\n\r\n _extractAtoms(complex, complexData) {\r\n let aids = complexData.atoms && complexData.atoms.aid;\r\n let elements = aids && complexData.atoms.element;\r\n if (!elements || aids.length !== elements.length) {\r\n throw new Error('Unable to parse atom elements');\r\n }\r\n elements = _.fromPairs(_.zip(aids, elements));\r\n const atoms = {};\r\n\r\n const coords = complexData.coords && complexData.coords[0];\r\n const model = coords && coords.conformers && coords.conformers[0];\r\n const xs = model && model.x;\r\n const ys = model && model.y;\r\n const zs = (model && model.z) || [];\r\n aids = coords && coords.aid;\r\n if (!aids || !xs || !ys) {\r\n throw new Error('Coordinates are not found in the file');\r\n }\r\n\r\n const chain = complex.addChain(' ');\r\n const residue = chain.addResidue('UNK', 1, ' ');\r\n\r\n for (let i = 0, n = aids.length; i < n; ++i) {\r\n const aid = aids[i];\r\n const element = Element.ByAtomicNumber[elements[aid]];\r\n const xyz = new THREE.Vector3(xs[i], ys[i], zs[i] || 0.0);\r\n atoms[aid] = residue.addAtom(element.name, element, xyz, undefined, true, aid, ' ', 1.0, 0.0, 0);\r\n }\r\n\r\n const aids1 = complexData.bonds && complexData.bonds.aid1;\r\n const aids2 = complexData.bonds && complexData.bonds.aid2;\r\n const orders = (complexData.bonds && complexData.bonds.order) || [];\r\n if (!aids1 || !aids2 || aids1.length !== aids2.length) {\r\n return;\r\n }\r\n\r\n for (let j = 0, m = aids1.length; j < m; ++j) {\r\n complex.addBond(atoms[aids1[j]], atoms[aids2[j]], orders[j] || 1, 0, true);\r\n }\r\n }\r\n}\r\n\r\nPubChemParser.formats = ['pubchem', 'pubchem+json', 'pc'];\r\nPubChemParser.extensions = ['.json'];\r\n\r\nexport default PubChemParser;\r\n","import _ from 'lodash';\r\n\r\nexport default class SDFStream {\r\n constructor(data) {\r\n this._strings = data.split(/\\r?\\n|\\r/);\r\n this._currentStart = 0;\r\n this._currentStringIndx = 0;\r\n }\r\n\r\n setStart(start) {\r\n if (start >= this._strings.length) {\r\n this._currentStart = this._strings.length - 1;\r\n this._currentStringIndx = this._strings.length - 1;\r\n } else {\r\n this._currentStart = start;\r\n this._currentStringIndx = start;\r\n }\r\n }\r\n\r\n getNextString() {\r\n return this._strings[++this._currentStringIndx];\r\n }\r\n\r\n getCurrentString() {\r\n return this._strings[this._currentStringIndx];\r\n }\r\n\r\n getStringFromStart(numb) {\r\n this._currentStringIndx = this._currentStart + numb;\r\n return this._strings[this._currentStart + numb];\r\n }\r\n\r\n findNextDataItem() {\r\n let curStr = this.getNextString();\r\n let res = false;\r\n while (!_.isUndefined(curStr) && curStr.trim() !== '$$$$') {\r\n if (curStr.match(/>\\s+<(.*)>/)) {\r\n res = true;\r\n break;\r\n }\r\n curStr = this.getNextString();\r\n }\r\n\r\n return res;\r\n }\r\n\r\n findNextCompoundStart() {\r\n let curStr = this.getCurrentString();\r\n while (!_.isUndefined(curStr) && curStr.trim() !== '$$$$') {\r\n curStr = this.getNextString();\r\n }\r\n this.setStart(++this._currentStringIndx);\r\n return this.probablyHaveDataToParse();\r\n }\r\n\r\n probablyHaveDataToParse() {\r\n return this._currentStringIndx < this._strings.length - 2;\r\n }\r\n}\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport SDFStream from './SDFStream';\r\nimport Assembly from '../../chem/Assembly';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst chargeMap = [0, 3, 2, 1, 0, -1, -2, -3];\r\nconst orderMap = [0, 1, 2, 3, 1, 1, 1, 2];\r\nconst typeMap = [\r\n Bond.BondType.UNKNOWN, // 0 - error\r\n Bond.BondType.COVALENT, // 1 - single\r\n Bond.BondType.COVALENT, // 2 - double\r\n Bond.BondType.COVALENT, // 3 - triple\r\n Bond.BondType.AROMATIC, // 4 - aromatic\r\n Bond.BondType.UNKNOWN, // 5 - single or double\r\n Bond.BondType.AROMATIC, // 6 - single or aromatic\r\n Bond.BondType.AROMATIC, // 7 - double or aromatic\r\n // 8 - any\r\n // 9 - coordination\r\n // 10 - hydrogen\r\n];\r\n\r\nconst sdfAndMolRegexp = /.*(M\\s\\sEND).*|.*(^$$$$).*|.*>\\s+<(.+)>.*/;\r\nconst sdfRegExp = /.*($$$$).*|.*>\\s+<(.+)>.*/;\r\n\r\nconst fileFormat = { SDF: 'sdf', MOL: 'mol' };\r\n\r\nconst possibleNameTags = ['PUBCHEM_IUPAC_TRADITIONAL_NAME', /PUBCHEM_(.+)_NAME/, /(.+)name/, /(.+)NAME/];\r\nconst possibleIDTags = ['PUBCHEM_COMPOUND_CID', 'id', 'ID', /.*CID/, /.*ID/, /.*id/];\r\nconst possibleTitleTags = ['msg', 'MSG', 'message', 'title', 'description', 'desc'];\r\nconst tagsNames = ['name', 'id', 'title'];\r\nconst tags = { name: possibleNameTags, id: possibleIDTags, title: possibleTitleTags };\r\n\r\nfunction buildChainID(index) {\r\n if (!index) {\r\n return 'A';\r\n }\r\n\r\n const codes = [];\r\n while (index) {\r\n codes.push(65 + (index % 26));\r\n index = Math.trunc(index / 26);\r\n }\r\n if (codes.length > 1) {\r\n codes.reverse();\r\n codes[0] -= 1;\r\n }\r\n\r\n return String.fromCharCode(...codes);\r\n}\r\n\r\nexport default class SDFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._format = 'sdf';\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._molecules = null;\r\n this._metadata = {};\r\n this._metadata.molecules = [];\r\n this._currentMolProps = {};\r\n this._compoundIndx = -1;\r\n this._assemblies = [];\r\n this._atomsParsed = 0;\r\n this._atomsIndexes = [];\r\n }\r\n\r\n canProbablyParse(data) {\r\n return _.isString(data) && sdfAndMolRegexp.test(data);\r\n }\r\n\r\n _parseHeader(stream) {\r\n const molecule = {};\r\n molecule.name = stream.getStringFromStart(0);\r\n const date = parseInt(stream.getStringFromStart(1).substr(10, 6).trim(), 10);\r\n molecule.date = date.toString() || '';\r\n molecule.title = stream.getStringFromStart(2);\r\n this._metadata.molecules.push(molecule);\r\n }\r\n\r\n _parseAtoms(stream, atomsNum) {\r\n let curStr;\r\n let serial = this._atomsParsed;\r\n\r\n // each molecule = chain\\residue\r\n const chainID = buildChainID(this._compoundIndx);\r\n const resName = 'UNK';\r\n const resSeq = 1;\r\n\r\n this._chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = this._chain.addResidue(resName, resSeq, ' ');\r\n\r\n for (let i = 0; i < atomsNum; i++) {\r\n curStr = stream.getNextString();\r\n serial++;\r\n const x = parseFloat(curStr.substr(0, 10));\r\n const y = parseFloat(curStr.substr(10, 10));\r\n const z = parseFloat(curStr.substr(20, 10));\r\n const charge = chargeMap[parseInt(curStr.substr(36, 3), 10)];\r\n const xyz = new THREE.Vector3(x, y, z);\r\n let name = curStr.substr(31, 3).trim().toUpperCase();\r\n const type = Element.getByName(name);\r\n if (!this._atomsIndexes[name]) {\r\n this._atomsIndexes[name] = 0;\r\n }\r\n this._atomsIndexes[name] += 1;\r\n name += this._atomsIndexes[name]; // every atom need to have unique name.\r\n\r\n this._residue.addAtom(name, type, xyz, undefined, true, serial, ' ', 1.0, 0.0, charge);\r\n }\r\n }\r\n\r\n _parseBonds(stream, bondsNum) {\r\n let curStr;\r\n\r\n for (let i = 0; i < bondsNum; i++) {\r\n curStr = stream.getNextString();\r\n let atom1 = parseInt(curStr.substr(0, 3), 10) + this._atomsParsed;\r\n let atom2 = parseInt(curStr.substr(3, 3), 10) + this._atomsParsed;\r\n const bondType = parseInt(curStr.substr(6, 3), 10);\r\n\r\n if (atom1 > atom2) {\r\n [atom1, atom2] = [atom2, atom1];\r\n }\r\n this._complex.addBond(\r\n atom1,\r\n atom2,\r\n orderMap[bondType] || 1,\r\n typeMap[bondType] || Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n }\r\n\r\n _parseMOL(stream) {\r\n this._compoundIndx++;\r\n\r\n this._parseHeader(stream);\r\n const countsLine = stream.getStringFromStart(3);\r\n const atomsNum = parseInt(countsLine.substr(0, 3), 10);\r\n const bondsNum = parseInt(countsLine.substr(3, 3), 10);\r\n this._parseAtoms(stream, atomsNum);\r\n this._parseBonds(stream, bondsNum);\r\n\r\n this._atomsParsed += atomsNum;\r\n\r\n this._metadata.molecules[this._compoundIndx]._residues = [];\r\n this._metadata.molecules[this._compoundIndx]._residues.push(this._residue);\r\n }\r\n\r\n _parseDataItem(stream) {\r\n const tag = stream.getCurrentString();\r\n\r\n let data = [];\r\n let curStr = stream.getNextString();\r\n\r\n // read data\r\n while (curStr.trim() !== '') {\r\n data.push(curStr);\r\n curStr = stream.getNextString();\r\n }\r\n if (data.length === 1) {\r\n [data] = data;\r\n }\r\n this._currentMolProps[tag.replace(/[<>]/g, '').trim()] = data;\r\n }\r\n\r\n _parseCompound(stream) {\r\n this._parseMOL(stream);\r\n\r\n // parse data items block\r\n if (this._format === fileFormat.SDF) {\r\n this._currentMolProps = {};\r\n while (stream.findNextDataItem()) {\r\n this._parseDataItem(stream);\r\n }\r\n if (Object.keys(this._currentMolProps).length !== 0) {\r\n const molecule = this._metadata.molecules[this._compoundIndx];\r\n molecule.props = this._currentMolProps;\r\n this._tryToUpdateMoleculeData(molecule);\r\n }\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap;\r\n const complex = this._complex;\r\n\r\n const bonds = complex._bonds;\r\n for (let j = 0; j < bonds.length; j++) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n console.log('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _buildAssemblies() {\r\n const chains = this._complex._chains;\r\n\r\n if (chains.length === 1) {\r\n return this._assemblies;\r\n }\r\n\r\n for (let i = 0; i < chains.length; i++) {\r\n const assembly = new Assembly(this._complex);\r\n const matrix = new THREE.Matrix4();\r\n assembly.addMatrix(matrix);\r\n assembly.addChain(chains[i]._name);\r\n this._assemblies.push(assembly);\r\n }\r\n\r\n return this._assemblies;\r\n }\r\n\r\n _buildMolecules() {\r\n this._complex._molecules = [];\r\n const { molecules } = this._metadata;\r\n for (let i = 0; i < molecules.length; i++) {\r\n const molecule = new Molecule(this._complex, molecules[i].name, i + 1);\r\n molecule.residues = molecules[i]._residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n\r\n return this._complex._molecules;\r\n }\r\n\r\n _searchTag(tag, props) {\r\n for (let i = 0; i < props.length; i++) {\r\n if ((tag instanceof RegExp && tag.test(props[i].tag)) || tag === props[i].tag) {\r\n return props[i].data;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n _tryToFind(tagsList, props) {\r\n for (let j = 0; j < tagsList.length; j++) {\r\n const res = this._searchTag(tagsList[j], props);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n _tryToUpdateMoleculeData(molecule) {\r\n let res = false;\r\n for (let i = 0; i < tagsNames.length; i++) {\r\n const tagPossibleNames = tags[tagsNames[i]];\r\n const data = this._tryToFind(tagPossibleNames, molecule.props);\r\n if (data) {\r\n molecule[tagsNames[i]] = data;\r\n res = true;\r\n }\r\n }\r\n\r\n molecule.name = molecule.name || molecule.id;\r\n if (molecule.name.match(/^\\d+$/)) {\r\n molecule.name = `CID: ${molecule.name}`;\r\n }\r\n\r\n return res;\r\n }\r\n\r\n _finalizeMetadata() {\r\n const { molecules } = this._metadata;\r\n const { metadata } = this._complex;\r\n const complex = this._complex;\r\n\r\n if (molecules.length === 1) {\r\n complex.name = molecules[0].name;\r\n metadata.title = molecules[0].title;\r\n metadata.date = molecules[0].date;\r\n metadata.properties = molecules[0].props;\r\n } else if (molecules.length > 1) {\r\n metadata.molecules = [];\r\n for (let i = 0; i < molecules.length; i++) {\r\n metadata.molecules.push({\r\n name: molecules[i].name, date: molecules[i].date, title: molecules[i].title, properties: molecules[i].props,\r\n });\r\n }\r\n }\r\n }\r\n\r\n _finalize() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const atoms = this._complex._atoms;\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n this._complex._finalizeBonds();\r\n this._fixBondsArray();\r\n this._finalizeMetadata();\r\n this._buildAssemblies();\r\n this._complex.units = this._complex.units.concat(this._assemblies);\r\n this._buildMolecules();\r\n this._complex.finalize({\r\n needAutoBonding: false, detectAromaticLoops: false, enableEditing: false, serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n defineFormat(data) {\r\n let format;\r\n if (sdfRegExp.test(data)) {\r\n format = fileFormat.SDF;\r\n } else {\r\n format = fileFormat.MOL;\r\n }\r\n\r\n return format;\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n const stream = new SDFStream(this._data);\r\n\r\n this._format = this.defineFormat(this._data);\r\n result.metadata.format = this._format;\r\n\r\n do {\r\n this._parseCompound(stream);\r\n } while (stream.findNextCompoundStart());\r\n\r\n this._finalize();\r\n\r\n return result;\r\n }\r\n}\r\n\r\nSDFParser.formats = ['mol', 'sdf'];\r\nSDFParser.extensions = ['.mol', '.sdf'];\r\n","import * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport VolumeModel, { valueType } from './VolumeModel';\r\n\r\n// http://www.uoxray.uoregon.edu/tnt/manual/node104.html\r\nconst DSN6Header = {\r\n nstart: [valueType.array, 'i16', 0],\r\n extent: [valueType.array, 'i16', 3],\r\n grid: [valueType.array, 'i16', 6],\r\n cellDims: [valueType.vector, 'i16', 9],\r\n angles: [valueType.array, 'i16', 12],\r\n div: [valueType.singular, 'i16', 15],\r\n adder: [valueType.singular, 'i16', 16],\r\n scaleFactor: [valueType.singular, 'i16', 17],\r\n};\r\n\r\nclass DSN6Model extends VolumeModel {\r\n _parseHeader(_buffer) {\r\n this._buff = _buffer;\r\n this._typedCheck();\r\n\r\n const arrays = {};\r\n arrays.i16 = new Int16Array(this._buff);\r\n\r\n // check and reverse if big endian\r\n if (arrays.i16[18] !== 100) {\r\n for (let i = 0, n = arrays.i16.length; i < n; ++i) {\r\n const val = arrays.i16[i];\r\n arrays.i16[i] = ((val & 0xff) << 8) | ((val >> 8) & 0xff);\r\n }\r\n }\r\n if (arrays.i16[18] !== 100) {\r\n throw new Error('DSN6: Incorrect format ');\r\n }\r\n\r\n const header = this._header;\r\n\r\n this._fillHeader(DSN6Header, arrays);\r\n header.cellDims.multiplyScalar(1.0 / header.scaleFactor);\r\n header.angles.forEach((angle, i, a) => { a[i] *= (Math.PI / 180.0) / header.scaleFactor; });\r\n header.div /= 100;\r\n }\r\n\r\n _setAxisIndices() {\r\n this._xyz2crs[0] = 0;\r\n this._xyz2crs[1] = 1;\r\n this._xyz2crs[2] = 2;\r\n }\r\n\r\n _setOrigins() {\r\n const header = this._header;\r\n const [xaxis, yaxis, zaxis] = this._getAxis();\r\n this._setAxisIndices();\r\n\r\n this._origin.addScaledVector(xaxis, header.nstart[0]);\r\n this._origin.addScaledVector(yaxis, header.nstart[1]);\r\n this._origin.addScaledVector(zaxis, header.nstart[2]);\r\n\r\n xaxis.multiplyScalar(header.extent[0]);\r\n yaxis.multiplyScalar(header.extent[1]);\r\n zaxis.multiplyScalar(header.extent[2]);\r\n\r\n this._setBoxParams(xaxis, yaxis, zaxis);\r\n }\r\n\r\n _pointCalculate(xyzData, byteBuffer, z, y, x, pos, i) {\r\n const header = this._header;\r\n\r\n if (x < header.extent[0] && y < header.extent[1] && z < header.extent[2]) {\r\n const idx = x + header.extent[0] * (y + header.extent[1] * z);\r\n xyzData[idx] = (byteBuffer[pos.counter] - header.adder) / header.div;\r\n ++pos.counter;\r\n } else {\r\n pos.counter += 8 - i;\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n _blockCalculate(xyzData, byteBuffer, zBlock, yBlock, xBlock, pos) {\r\n for (let k = 0; k < 8; ++k) {\r\n const z = 8 * zBlock + k;\r\n for (let j = 0; j < 8; ++j) {\r\n const y = 8 * yBlock + j;\r\n let inRange = true;\r\n let i = 0;\r\n while (inRange && i < 8) {\r\n const x = 8 * xBlock + i;\r\n inRange = this._pointCalculate(xyzData, byteBuffer, z, y, x, pos, i);\r\n i++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _toXYZData() {\r\n const header = this._header;\r\n const byteBuffer = new Uint8Array(this._buff);\r\n const xyzData = new Float32Array(header.extent[0] * header.extent[1] * header.extent[2]);\r\n\r\n const blocks = new THREE.Vector3(header.extent[0] / 8, header.extent[1] / 8, header.extent[2] / 8);\r\n\r\n const pos = {};\r\n pos.counter = 512;\r\n\r\n for (let zBlock = 0; zBlock < blocks.z; ++zBlock) {\r\n for (let yBlock = 0; yBlock < blocks.y; ++yBlock) {\r\n for (let xBlock = 0; xBlock < blocks.x; ++xBlock) {\r\n this._blockCalculate(xyzData, byteBuffer, zBlock, yBlock, xBlock, pos);\r\n }\r\n }\r\n }\r\n this._calculateInfoParams(xyzData);\r\n return xyzData;\r\n }\r\n\r\n _calculateInfoParams(xyzData) {\r\n this._header.dmean /= xyzData.length;\r\n let dispersion = 0;\r\n let minDensity = xyzData[0];\r\n let maxDensity = xyzData[0];\r\n for (let j = 0; j < xyzData.length; j++) {\r\n dispersion += (this._header.dmean - xyzData[j]) ** 2;\r\n\r\n if (xyzData[j] < minDensity) {\r\n minDensity = xyzData[j];\r\n }\r\n if (xyzData[j] > maxDensity) {\r\n maxDensity = xyzData[j];\r\n }\r\n }\r\n this._header.sd = Math.sqrt(dispersion / xyzData.length);\r\n this._header.dmax = maxDensity;\r\n this._header.dmin = minDensity;\r\n }\r\n}\r\n\r\nclass DSN6Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'dsn6';\r\n this.model = new DSN6Model();\r\n }\r\n\r\n static canParse(data, options) {\r\n if (!data) {\r\n return false;\r\n }\r\n return data instanceof ArrayBuffer && Parser.checkDataTypeOptions(options, 'dsn6');\r\n }\r\n\r\n static canProbablyParse(_data) {\r\n return false;\r\n }\r\n\r\n parseSync() {\r\n return this.model.parse(this._data);\r\n }\r\n}\r\n\r\nDSN6Parser.formats = ['dsn6'];\r\nDSN6Parser.extensions = ['.dsn6', '.omap'];\r\nDSN6Parser.binary = true;\r\n\r\nexport default DSN6Parser;\r\n","import PDBStream from './PDBStream';\r\n\r\n/**\r\n * Little helper class for GRO Parser usage.\r\n * @extends PDBStream\r\n */\r\nclass GROReader extends PDBStream {\r\n constructor(data) {\r\n super(data);\r\n /** @type Number */\r\n this._next = -1; // End position of line\r\n this.next();\r\n }\r\n\r\n /**\r\n * Getting end of string.\r\n * @returns {Number} Pointer to end of string\r\n */\r\n getNext() {\r\n return this._next;\r\n }\r\n}\r\n\r\nexport default GROReader;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport GROReader from './GROReader';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Molecule,\r\n} = chem;\r\n\r\n/**\r\n * Gromos87 file format parser.\r\n * @extends Parser\r\n */\r\nclass GROParser extends Parser {\r\n /**\r\n * Create parser for .gro file format\r\n *\r\n * @param {String} data Input file\r\n * @param {String} options Input options (optional field)\r\n */\r\n constructor(data, options) {\r\n super(data, options);\r\n /** @type Date */\r\n this._time = null; // Time in ps, optional field for animations\r\n /** @type Number */\r\n this._numAtoms = null; // Number of atoms in complex\r\n /** @type Number */\r\n this._residueNumber = null; // Number of exact residue\r\n /** @type String */\r\n this._residueName = ''; // Scientific name of exact residue\r\n /** @type String */\r\n this._atomName = ''; // Scientific name of exact atom\r\n /** @type Number */\r\n this._atomNumber = null; // Sorted number of exact atom\r\n /** @type Array */\r\n this._atomPosition = []; // Array which contains x, y, z position of exact atom\r\n /** @type Array */\r\n this._atomVelocity = []; // Array which contains x, y, z velocity of exact atom (optional)\r\n /** @type Complex */\r\n this._complex = null; // Complex structure for unified molecule representation\r\n /** @type Vector3 */\r\n this._molecules = []; // Molecules array\r\n /** @type Molecule */\r\n this._molecule = null; // Single molecule\r\n /** @type String */\r\n this._options.filetype = 'gro'; // Extension of data file.\r\n }\r\n\r\n /**\r\n * General check for possibility of parsing.\r\n * @param {String} data - Input file\r\n * @returns {boolean} true if this file is in ascii, false otherwise\r\n */\r\n canProbablyParse(data) {\r\n return _.isString(this._data) && /^\\s*[^\\n]*\\n\\s*\\d+ *\\n\\s*\\d+[^\\n\\d]{3}\\s*\\w+\\s*\\d+\\s*-?\\d/.test(data);\r\n }\r\n\r\n /**\r\n * Parsing title of molecule complex.\r\n * NOTE: that names are ESTIMATES, there is no strict rules in Gromos87 standard for first line in input file.\r\n * @param {GROReader} line - Line containing title and time.\r\n */\r\n _parseTitle(line) {\r\n const { metadata } = this._complex;\r\n metadata.id = line.readLine().trim();\r\n metadata.name = metadata.id.slice(metadata.id.lastIndexOf('\\\\') + 1, metadata.id.lastIndexOf('.'));\r\n metadata.format = 'gro';\r\n }\r\n\r\n /**\r\n * Parsing line containing number of atoms information.\r\n * @param {GROReader} line - Line containing number of atoms.\r\n */\r\n _parseNumberOfAtoms(line) {\r\n this._numAtoms = line.readInt(0, line.getNext());\r\n if (Number.isNaN(this._numAtoms)) {\r\n throw new Error('Line 2 is not representing atom number. Consider checking input file');\r\n }\r\n }\r\n\r\n /**\r\n * Parsing line containing information about residues, atoms etc. Also information about box vectors.\r\n * Format of atoms MUST (by Gromos87 standard) be this: (note that numbering starts not from 0, but from 1!)\r\n * ResidueNumber[1 - 5] ResidueName[6 - 10] AtomName[11 - 15] AtomNumber[16 - 20] Position[21 - 45] Velocity[46 - 69]\r\n * @param {GROReader} line - Line containing information about atom.\r\n */\r\n _parseAtom(line) {\r\n this._residueNumber = line.readInt(1, 5);\r\n this._residueName = line.readString(6, 10).trim();\r\n this._atomName = line.readString(11, 15).trim();\r\n this._atomNumber = line.readInt(16, 20);\r\n const positionX = line.readFloat(21, 28) * 10;\r\n const positionY = line.readFloat(29, 36) * 10;\r\n const positionZ = line.readFloat(37, 45) * 10;\r\n if (Number.isNaN(positionX) || Number.isNaN(positionY) || Number.isNaN(positionZ)) {\r\n this._complex.error = {\r\n message: `Atom position is invalid in \"${line.readLine()}\"`,\r\n };\r\n return;\r\n }\r\n /* const velocityX = line.readFloat(46, 53);\r\n const velocityY = line.readFloat(54, 61);\r\n const velocityZ = line.readFloat(62, 69); */\r\n /* Adding residue and atom to complex structure */\r\n const type = Element.getByName(this._atomName[0]); /* MAGIC 0. REASONS: This name is something like \"CA\", where\r\n C - is an element an A is something else. But what about Calcium? */\r\n if (type.fullName === 'Unknown') {\r\n this._complex.error = {\r\n message: `${this._atomName[0]} hasn't been recognised as an atom name.`,\r\n };\r\n return;\r\n }\r\n const role = Element.Role[this._atomName];\r\n /* Firstly, create a dummy chain */\r\n let chain = this._chain;\r\n if (!chain) {\r\n this._chain = chain = this._complex.addChain('A');\r\n }\r\n /* Secondly, add residue to that chain */\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== this._residueNumber) {\r\n this._residue = residue = chain.addResidue(this._residueName, this._residueNumber, ' ');\r\n }\r\n /* Lastly, add atom to that residue */\r\n this._atomPosition = new THREE.Vector3(positionX, positionY, positionZ);\r\n /* Adding default constants to correct atom addition process */\r\n const het = true;\r\n const altLoc = ' ';\r\n const occupancy = 1;\r\n const tempFactor = 1;\r\n const charge = 0;\r\n residue.addAtom(this._atomName, type, this._atomPosition, role, het, this._atomNumber, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n /**\r\n * Some finalizing procedures. In '.gro' file format there is only 1 chain and 1 molecule.\r\n */\r\n _finalize() {\r\n const molecule = new Molecule(this._complex, this._complex.metadata.name, 1);\r\n // aggregate residues from chain\r\n molecule.residues = this._chain._residues;\r\n molecule._chains = this._chain;\r\n this._complex._molecules[0] = molecule;\r\n this._molecules.push(molecule);\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n /**\r\n * Main parsing procedure.\r\n * @returns {Complex} Complex structure for visualizing.\r\n */\r\n parseSync() {\r\n /* Create \"Complex\" variable */\r\n const result = this._complex = new Complex();\r\n /* Parse input file line-by-line */\r\n const reader = new GROReader(this._data);\r\n let counter = 0; /* Simple counter regarding to format of .gro file */\r\n /* First two lines - technical information, other lines - Atoms */\r\n this._parseTitle(reader);\r\n reader.next();\r\n this._parseNumberOfAtoms(reader);\r\n reader.next();\r\n for (counter = 0; counter < this._numAtoms; ++counter) {\r\n if (!reader.end()) {\r\n this._parseAtom(reader);\r\n reader.next();\r\n } else break;\r\n }\r\n /* If number of atoms in second line is less then actual atoms in file */\r\n if (counter < this._numAtoms) {\r\n this._complex.error = {\r\n message: 'File ended unexpectedly.',\r\n };\r\n }\r\n /* Catch errors occurred in parsing process */\r\n if (result.error) {\r\n throw new Error(result.error.message);\r\n }\r\n\r\n /* Finalizing data */\r\n this._finalize();\r\n\r\n /* Cleaning up */\r\n this._atomPosition = null;\r\n this._complex = null;\r\n this._molecules = null;\r\n this._molecule = null;\r\n\r\n /* Return resulting Complex variable */\r\n return result;\r\n }\r\n}\r\n\r\nGROParser.formats = ['gro'];\r\nGROParser.extensions = ['.gro'];\r\n\r\nexport default GROParser;\r\n","import * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst orderMap = {\r\n un: 0,\r\n 1: 1,\r\n 2: 2,\r\n 3: 3,\r\n ar: 1,\r\n am: 1,\r\n nc: 0,\r\n du: 1,\r\n};\r\nconst typeMap = {\r\n un: Bond.BondType.UNKNOWN, // unknown (cannot be determined from the parameter tables)\r\n 1: Bond.BondType.COVALENT, // single\r\n 2: Bond.BondType.COVALENT, // double\r\n 3: Bond.BondType.COVALENT, // triple\r\n ar: Bond.BondType.AROMATIC, // aromatic\r\n am: Bond.BondType.COVALENT, // amide\r\n nc: Bond.BondType.UNKNOWN, // not connected\r\n du: Bond.BondType.COVALENT, // dummy\r\n};\r\n\r\nconst resNumberRegex = /\\d+$/;\r\nconst spacesRegex = /\\s+/;\r\n\r\nfunction splitToFields(str) {\r\n return str.trim().split(spacesRegex);\r\n}\r\n/* There is no jsdoc documentation because of eslint corrections:\r\n * not all Parser methods are implemented\r\n */\r\n\r\nclass MOL2Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._compoundIndx = -1;\r\n\r\n this._molecules = [];\r\n this._molecule = null;\r\n\r\n this._currPosIdx = 0;\r\n this._currStartIdx = 0;\r\n\r\n this._serialAtomMap = {};\r\n\r\n this._options.fileType = 'mol2';\r\n }\r\n\r\n _parseRawStrings(data) {\r\n return data.split(/\\r?\\n|\\r/);\r\n }\r\n\r\n _toStringFromStart(numb, MOL2Data) {\r\n const newPosIdx = this._currStartIdx + numb;\r\n this._currPosIdx = (newPosIdx < MOL2Data.length) ? newPosIdx : this._currStartIdx;\r\n }\r\n\r\n _toHeaderString(header, MOL2Data) {\r\n this._toStringFromStart(0, MOL2Data);\r\n while (this._currPosIdx < MOL2Data.length) {\r\n if (MOL2Data[this._currPosIdx].match(`@${header}`)) {\r\n return;\r\n }\r\n this._currPosIdx++;\r\n }\r\n this._toStringFromStart(0, MOL2Data);\r\n }\r\n\r\n _toStringFromHeader(header, numb, MOL2Data) {\r\n this._toHeaderString(header, MOL2Data);\r\n const newPosIdx = this._currPosIdx + numb;\r\n\r\n if (MOL2Data[this._currPosIdx].match(`@${header}`) && newPosIdx < MOL2Data.length) {\r\n this._currPosIdx = newPosIdx;\r\n }\r\n }\r\n\r\n _setStart(startPos, MOL2Data) {\r\n if (startPos >= MOL2Data.length) {\r\n this._currStartIdx = this._currPosIdx = MOL2Data.length - 1;\r\n } else {\r\n this._currStartIdx = this._currPosIdx = startPos;\r\n }\r\n }\r\n\r\n _probablyHaveDataToParse(MOL2Data) {\r\n return this._currPosIdx < MOL2Data.length - 2;\r\n }\r\n\r\n _findNextCompoundStart(MOL2Data) {\r\n while (this._currPosIdx < MOL2Data.length && MOL2Data[this._currPosIdx].trim() !== '@MOLECULE>') {\r\n this._currPosIdx++;\r\n }\r\n this._setStart(++this._currPosIdx, MOL2Data);\r\n return this._probablyHaveDataToParse(MOL2Data);\r\n }\r\n\r\n _parseMolecule(MOL2Data) {\r\n this._toHeaderString('MOLECULE', MOL2Data);\r\n\r\n const { metadata } = this._complex;\r\n metadata.name = MOL2Data[++this._currPosIdx];\r\n metadata.format = 'mol2';\r\n\r\n this._molecule = { _index: '', _chains: [] };\r\n this._molecule._index = this._compoundIndx + 1;\r\n this._molecules.push(this._molecule);\r\n }\r\n\r\n /* Atom format description:\r\n * atomId atomName x y z element [resSeq [resName [charge [statusBit]]]]\r\n * statusBits is the internal SYBYL status bits associated with the atom.\r\n * These should never be set by the user.\r\n * Source: http://chemyang.ccnu.edu.cn/ccb/server/AIMMS/mol2.pdf\r\n */\r\n _parseAtoms(atomsNum, MOL2Data) {\r\n this._toHeaderString('ATOM', MOL2Data);\r\n\r\n for (let i = 0; i < atomsNum; i++) {\r\n const parsedStr = splitToFields(MOL2Data[++this._currPosIdx]);\r\n\r\n if (parsedStr.length < 6) {\r\n throw new Error('MOL2 parsing error: Not enough information to create atom!');\r\n }\r\n const atomId = parseInt(parsedStr[0], 10);\r\n const atomName = parsedStr[1];\r\n\r\n const x = parseFloat(parsedStr[2]);\r\n const y = parseFloat(parsedStr[3]);\r\n const z = parseFloat(parsedStr[4]);\r\n\r\n const element = parsedStr[5].split('.')[0].toUpperCase();\r\n\r\n let charge = 0;\r\n if (parsedStr.length >= 9) {\r\n charge = parseFloat(parsedStr[8]) || 0.0;\r\n }\r\n\r\n let chain = this._chain;\r\n if (!chain) {\r\n // .mol2 may contain information about multiple molecules, but they can't be visualized\r\n // at the same time now. There is no need to create different chain IDs then.\r\n this._chain = chain = this._complex.getChain('A') || this._complex.addChain('A');\r\n this._residue = null;\r\n }\r\n if (!this._setResidue(parsedStr)) {\r\n continue;\r\n }\r\n\r\n // These fields are not listed in mol2 format. Set them default.\r\n // Atoms and het atoms doesn't differ in .mol2,\r\n // but het atoms have special residues. It can be used in next updates\r\n const het = false;\r\n const altLoc = ' ';\r\n const occupancy = 1.0;\r\n const tempFactor = 0.0;\r\n const type = Element.getByName(element);\r\n const role = Element.Role[atomName];\r\n\r\n const xyz = new THREE.Vector3(x, y, z);\r\n this._residue.addAtom(atomName, type, xyz, role, het, atomId, altLoc, occupancy, tempFactor, charge);\r\n }\r\n }\r\n\r\n _setResidue(parsedStr) {\r\n let resSeq = 1;\r\n let resName = 'UNK'; // The same meaning has '<0>' in some mol2 files\r\n\r\n if (parsedStr.length >= 7) {\r\n resSeq = parseInt(parsedStr[6], 10);\r\n }\r\n if (parsedStr.length >= 8 && parsedStr[7] !== '<0>') {\r\n resName = parsedStr[7].replace(resNumberRegex, '');\r\n }\r\n if (this.settings.now.nowater) {\r\n if (resName === 'HOH' || resName === 'WAT') {\r\n return false;\r\n }\r\n }\r\n const residue = this._residue;\r\n const chain = this._chain;\r\n if (!residue || residue.getSequence() !== resSeq) {\r\n this._residue = chain.addResidue(resName, resSeq, 'A');\r\n }\r\n return true;\r\n }\r\n\r\n /* Bond format description\r\n * bondId originAtomId targetAtomId bondType [statusBits]\r\n */\r\n _parseBonds(bondsNum, MOL2Data) {\r\n this._toHeaderString('BOND', MOL2Data);\r\n\r\n for (let i = 0; i < bondsNum; i++) {\r\n const parsedStr = splitToFields(MOL2Data[++this._currPosIdx]);\r\n\r\n if (parsedStr.length < 3) {\r\n throw new Error('MOL2 parsing error: Missing information about bonds!');\r\n }\r\n\r\n let originAtomId = parseInt(parsedStr[1], 10);\r\n let targetAtomId = parseInt(parsedStr[2], 10);\r\n const bondType = parsedStr[3];\r\n\r\n if (originAtomId > targetAtomId) {\r\n [originAtomId, targetAtomId] = [targetAtomId, originAtomId];\r\n }\r\n this._complex.addBond(\r\n originAtomId,\r\n targetAtomId,\r\n orderMap[bondType] || 0,\r\n typeMap[bondType] || Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n }\r\n\r\n _fixSerialAtoms() {\r\n const atoms = this._complex._atoms;\r\n for (let i = 0; i < atoms.length; i++) {\r\n const atom = atoms[i];\r\n this._serialAtomMap[atom.serial] = atom;\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap;\r\n const complex = this._complex;\r\n\r\n if (Object.keys(serialAtomMap).length === 0) {\r\n throw new Error('MOL2 parsing error: Missing atom information!');\r\n }\r\n\r\n const bonds = complex._bonds;\r\n for (let j = 0; j < bonds.length; j++) {\r\n const bond = bonds[j];\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _finalizeMolecules() {\r\n // Get chain from complex\r\n const chain = this._complex._chains[0];\r\n this._complex._molecules = [];\r\n\r\n // Aggregate residues from chains\r\n // (to be precise from the chain 'A')\r\n for (let i = 0; i < this._molecules.length; i++) {\r\n const currMolecule = this._molecules[i];\r\n const molResidues = chain._residues;\r\n const molecule = new Molecule(this._complex, currMolecule._name, i + 1);\r\n molecule.residues = molResidues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n _finalize() {\r\n this._complex._finalizeBonds();\r\n this._fixSerialAtoms();\r\n this._fixBondsArray();\r\n this._finalizeMolecules();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n _parseCompound(MOL2Data) {\r\n this._compoundIndx++;\r\n this._parseMolecule(MOL2Data);\r\n\r\n // Ignoring comments and everything before @MOLECULE block\r\n this._toStringFromHeader('MOLECULE', 2, MOL2Data);\r\n\r\n const parsedStr = MOL2Data[this._currPosIdx].trim().split(spacesRegex);\r\n const atomsNum = parsedStr[0];\r\n const bondsNum = parsedStr[1];\r\n\r\n this._parseAtoms(atomsNum, MOL2Data);\r\n this._parseBonds(bondsNum, MOL2Data);\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n const MOL2Data = this._parseRawStrings(this._data);\r\n do {\r\n this._parseCompound(MOL2Data);\r\n } while (this._findNextCompoundStart(MOL2Data));\r\n\r\n this._finalize();\r\n\r\n return result;\r\n }\r\n}\r\n\r\nMOL2Parser.formats = ['mol2'];\r\nMOL2Parser.extensions = ['.mol2', '.ml2', '.sy2'];\r\n\r\nexport default MOL2Parser;\r\n","import ParserList from './parsers/ParserList';\r\n\r\nimport PDBParser from './parsers/PDBParser';\r\nimport CMLParser from './parsers/CMLParser';\r\nimport MMTFParser from './parsers/MMTFParser';\r\nimport CIFParser from './parsers/CIFParser';\r\nimport CCP4Parser from './parsers/CCP4Parser';\r\nimport XYZParser from './parsers/XYZParser';\r\nimport PubChemParser from './parsers/PubChemParser';\r\nimport SDFParser from './parsers/SDFParser';\r\nimport DSN6Parser from './parsers/DSN6Parser';\r\nimport GROParser from './parsers/GROParser';\r\nimport MOL2Parser from './parsers/MOL2Parser';\r\n\r\nexport default new ParserList([\r\n // note: order might be important\r\n PDBParser,\r\n CIFParser,\r\n MMTFParser,\r\n XYZParser,\r\n CMLParser,\r\n PubChemParser,\r\n SDFParser,\r\n CCP4Parser,\r\n DSN6Parser,\r\n GROParser,\r\n MOL2Parser,\r\n]);\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available exporters.\r\n * @extends EntityList\r\n */\r\nclass ExporterList extends EntityList {\r\n /**\r\n * Create a list of exporters.\r\n * The exporters are indexed by supported data formats (`.formats` and\r\n * `.extensions` properties of a Exporter subclass).\r\n * The Exporters can be retrieved later by matching against specs (see {@link ExporterList#find}).\r\n *\r\n * @param {!Array=} someExporters A list of {@link Exporter} subclasses to\r\n * automatically register at creation time.\r\n * @see ExporterList#register\r\n */\r\n constructor(someExporters = []) {\r\n super(someExporters, ['formats']);\r\n }\r\n\r\n /**\r\n * Find a suitable exporter for data.\r\n *\r\n * @param {Object} specs Exporter specifications.\r\n * @param {string=} specs.format Supported data format.\r\n * @param {*=} specs.data Data to export.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.format) {\r\n list = this._dict.formats[specs.format.toLowerCase()] || [];\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default ExporterList;\r\n","import makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Exporter {\r\n constructor(source, options) {\r\n this._source = source;\r\n this._options = options || {};\r\n this._abort = false;\r\n }\r\n\r\n exportSync() {\r\n throw new Error('Exporting to this source is not implemented');\r\n }\r\n\r\n export() {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n try {\r\n if (this._abort) {\r\n return reject(new Error('Export aborted'));\r\n }\r\n return resolve(this.exportSync());\r\n } catch (error) {\r\n return reject(error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n }\r\n}\r\n\r\nmakeContextDependent(Exporter.prototype);\r\n","import _ from 'lodash';\r\nimport { Matrix4 } from 'three';\r\n\r\nexport default class PDBResult {\r\n constructor() {\r\n this._resultArray = [];\r\n this._currentStr = -1;\r\n this._tag = null;\r\n this._fixedNumeration = false;\r\n this._numeration = false;\r\n this._tagStrNum = 0;\r\n }\r\n\r\n getResult() {\r\n this.writeString('\\n', 81, 81);\r\n return this._resultArray.join('');\r\n }\r\n\r\n _currentStrLength() {\r\n const curStr = this._resultArray[this._currentStr];\r\n return curStr ? curStr.length : 0;\r\n }\r\n\r\n // numeration can be number or boolean\r\n // if numeration is number then just put this number to 8-10 pos in string\r\n // if numeration is boolean then increase number for all new strings\r\n newTag(tag, numeration) {\r\n if (!tag) {\r\n this._tag = null;\r\n } else {\r\n this._tag = tag;\r\n }\r\n if (!_.isUndefined(numeration)) {\r\n if (_.isNumber(numeration)) {\r\n this._tagStrNum = numeration;\r\n this._numeration = true;\r\n this._fixedNumeration = true;\r\n } else if (_.isBoolean(numeration)) {\r\n this._tagStrNum = 0;\r\n this._numeration = numeration;\r\n this._fixedNumeration = false;\r\n }\r\n } else {\r\n this._numeration = false;\r\n this._fixedNumeration = false;\r\n this._tagStrNum = 0;\r\n }\r\n }\r\n\r\n newString(tag) {\r\n this.writeString('\\n', 81, 81);\r\n this._currentStr++;\r\n this._resultArray.push('');\r\n\r\n if (tag) {\r\n this.writeString(tag, 1, 6);\r\n } else if (this._tag) {\r\n this.writeString(this._tag, 1, 6);\r\n }\r\n\r\n if (this._numeration) {\r\n if (!this._fixedNumeration) {\r\n this._tagStrNum++;\r\n }\r\n if (this._tagStrNum !== 1) {\r\n this.writeString(this._tagStrNum.toString(), 10, 8);\r\n }\r\n }\r\n }\r\n\r\n writeEntireString(string, maxStrPos, concat) {\r\n if (!maxStrPos) {\r\n maxStrPos = 81;\r\n }\r\n for (let j = 0; j < string.length; j++) {\r\n if (this._currentStrLength() === maxStrPos && j !== string.length - 1) {\r\n this.newString();\r\n if (concat) { // pretty hardcoddy\r\n this.writeString(concat.tag, concat.begin, concat.end);\r\n }\r\n }\r\n if (string[j] === '\\n') {\r\n this.newString();\r\n } else {\r\n this.writeString(string[j]);\r\n }\r\n }\r\n }\r\n\r\n writeString(string, begin, end) {\r\n let curStr = this._resultArray[this._currentStr];\r\n let str;\r\n\r\n const curStrLength = curStr ? curStr.length : 0;\r\n\r\n if (_.isUndefined(string)) {\r\n return;\r\n }\r\n\r\n if (!_.isNumber(begin)) {\r\n begin = curStrLength + 1;\r\n }\r\n\r\n if (!_.isNumber(end)) {\r\n end = curStrLength + string.length;\r\n }\r\n\r\n if (!_.isString(string)) {\r\n str = string.toString();\r\n } else {\r\n str = string;\r\n }\r\n\r\n const finish = begin < end ? end : begin;\r\n const start = begin < end ? begin : end;\r\n\r\n if (str.length > Math.abs(begin - end) + 1) {\r\n str = str.substr(0, Math.abs(begin - end + 1));\r\n }\r\n\r\n // spaces before start of new data\r\n if (start > curStrLength + 1) {\r\n this._resultArray[this._currentStr] += ' '.repeat(start - curStrLength - 1);\r\n } else if (start <= curStrLength) {\r\n const cStr = this._resultArray[this._currentStr];\r\n this._resultArray[this._currentStr] = cStr.slice(0, start - 1);\r\n }\r\n\r\n // if reverse order\r\n // reverse order of end and begin means that user wants to align text right\r\n if (end < begin) {\r\n const len = begin - end + 1;\r\n str = ' '.repeat(len - str.length) + str;\r\n }\r\n\r\n // some hardcode fix for space between string numeration and data\r\n // (see pdb file format description)\r\n if (start === 11 && this._numeration && this._tagStrNum !== 1) {\r\n str = ` ${str}`;\r\n }\r\n\r\n // append new data to string\r\n this._resultArray[this._currentStr] += str;\r\n curStr = this._resultArray[this._currentStr];\r\n\r\n if (finish > curStr.length) {\r\n this._resultArray[this._currentStr] += ' '.repeat(finish - curStr.length);\r\n }\r\n }\r\n\r\n writeBondsArray(bonds, atom) {\r\n const bondsArrays = this._getSubArrays(bonds, 4);\r\n\r\n for (let k = 0; k < bondsArrays.length; k++) {\r\n this.newString();\r\n this.writeString(atom.serial, 11, 7);\r\n\r\n for (let j = 0; j < bondsArrays[k].length; j++) {\r\n const serial = (bondsArrays[k][j]._left.serial === atom.serial)\r\n ? bondsArrays[k][j]._right.serial : bondsArrays[k][j]._left.serial;\r\n\r\n this.writeString(serial, 16 + 5 * j, 12 + 5 * j);\r\n }\r\n }\r\n }\r\n\r\n _getSubArrays(arr, subArraySize) {\r\n const subArrays = [];\r\n for (let i = 0; i < arr.length; i += subArraySize) {\r\n subArrays.push(arr.slice(i, i + subArraySize));\r\n }\r\n return subArrays;\r\n }\r\n\r\n // function for writing matrix in Remark290 and Remark350 tags\r\n // (see pdb file description)\r\n writeMatrix(matrix, matrixIndx, tag) {\r\n for (let j = 0; j < 3; j++) {\r\n this.newString();\r\n this.writeString(tag, 14, 18);\r\n this.writeString((j + 1).toString(), 19, 19);\r\n this.writeString(matrixIndx.toString(), 23, 20);\r\n for (let k = 0; k < 3; k++) {\r\n const numb = parseFloat(matrix.elements[j * 4 + k]).toFixed(6);\r\n this.writeString(numb.toString(), 33 + k * 10, 24 + k * 10);\r\n }\r\n\r\n const numb = parseFloat(matrix.elements[j * 4 + 3]).toFixed(5);\r\n this.writeString(numb.toString(), 68, 55);\r\n }\r\n }\r\n\r\n writeMatrices(matrices, string) {\r\n if (!matrices) {\r\n return;\r\n }\r\n const matrix = new Matrix4();\r\n for (let j = 0; j < matrices.length; j++) {\r\n matrix.copy(matrices[j]).transpose();\r\n this.writeMatrix(matrix, j + 1, string);\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport Complex from '../../chem/Complex';\r\nimport Exporter from './Exporter';\r\nimport PDBResult from './PDBResult';\r\nimport Assembly from '../../chem/Assembly';\r\nimport { typeByPDBHelixClass } from '../../chem/Helix';\r\n\r\nexport default class PDBExporter extends Exporter {\r\n constructor(source, options) {\r\n super(source, options);\r\n this._tags = ['HEADER', 'TITLE', 'COMPND', 'REMARK', 'HELIX', 'SHEET', 'ATOM and HETATM', 'CONECT'];\r\n this._result = null;\r\n this._tagExtractors = {\r\n HEADER: this._extractHEADER,\r\n TITLE: this._extractTITLE,\r\n 'ATOM and HETATM': this._extractATOM,\r\n CONECT: this._extractCONECT,\r\n COMPND: this._extractCOMPND,\r\n REMARK: this._extractREMARK,\r\n HELIX: this._extractHELIX,\r\n SHEET: this._extractSHEET,\r\n };\r\n this._stringForRemark350 = 'COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN\\n'\r\n + 'BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE\\n'\r\n + 'MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS\\n'\r\n + 'GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND\\n'\r\n + 'CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN.';\r\n\r\n this._stringForRemark290 = 'CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS\\n'\r\n + 'THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM\\n'\r\n + 'RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY\\n'\r\n + 'RELATED MOLECULES.';\r\n }\r\n\r\n exportSync() {\r\n const result = new PDBResult();\r\n if (!this._source) {\r\n return this._result;\r\n }\r\n\r\n for (let i = 0; i < this._tags.length; i++) {\r\n const tag = this._tags[i];\r\n const func = this._tagExtractors[tag];\r\n if (_.isFunction(func)) {\r\n func.call(this, result);\r\n }\r\n }\r\n\r\n this._result = result.getResult();\r\n\r\n return this._result;\r\n }\r\n\r\n _extractHEADER(result) {\r\n if (!this._source.metadata) {\r\n return;\r\n }\r\n const { metadata } = this._source;\r\n result.newTag('HEADER');\r\n result.newString();\r\n if (metadata.classification) {\r\n result.writeString(metadata.classification, 11, 50);\r\n }\r\n if (metadata.date) {\r\n result.writeString(metadata.date, 51, 59);\r\n }\r\n if (metadata.id) {\r\n result.writeString(metadata.id, 63, 66);\r\n }\r\n }\r\n\r\n _extractTITLE(result) {\r\n if (!this._source.metadata) {\r\n return;\r\n }\r\n const { metadata } = this._source;\r\n if (!metadata.title) {\r\n return;\r\n }\r\n result.newTag('TITLE', true);\r\n for (let i = 0; i < metadata.title.length; i++) {\r\n result.newString();\r\n result.writeString(metadata.title[i], 11, 80);\r\n }\r\n }\r\n\r\n _extractCONECT(result) {\r\n if (!this._source._atoms) {\r\n return;\r\n }\r\n\r\n const atoms = this._source._atoms;\r\n result.newTag('CONECT');\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const fixedBonds = atoms[i].bonds.filter((bond) => bond._fixed);\r\n if (fixedBonds.length !== 0) {\r\n result.writeBondsArray(fixedBonds.reverse(), atoms[i]);\r\n }\r\n }\r\n }\r\n\r\n _extractSHEET(result) {\r\n if (!this._source._sheets) {\r\n return;\r\n }\r\n\r\n result.newTag('SHEET');\r\n\r\n const sheets = this._source._sheets;\r\n for (let i = 0; i < sheets.length; i++) {\r\n if (sheets[i]._strands) {\r\n const strands = sheets[i]._strands;\r\n for (let j = 0; j < strands.length; j++) {\r\n result.newString();\r\n result.writeString(j + 1, 10, 8);\r\n result.writeString(sheets[i]._name, 14, 12);\r\n result.writeString(strands.length, 16, 15);\r\n result.writeString(strands[j].init._type._name, 18, 20);\r\n result.writeString(strands[j].init._chain._name, 22, 22);\r\n result.writeString(strands[j].init._sequence, 26, 23);\r\n result.writeString(strands[j].init._icode, 27, 27);\r\n result.writeString(strands[j].term._type._name, 29, 31);\r\n result.writeString(strands[j].init._chain._name, 33, 33);\r\n result.writeString(strands[j].term._sequence, 37, 34);\r\n result.writeString(strands[j].term._icode, 38, 38);\r\n result.writeString(strands[j].sense, 40, 39);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _extractHELIX(result) {\r\n if (!this._source._helices) {\r\n return;\r\n }\r\n\r\n result.newTag('HELIX');\r\n const helices = this._source._helices;\r\n for (let i = 0; i < helices.length; i++) {\r\n const helix = helices[i];\r\n const helixClass = _.invert(typeByPDBHelixClass);\r\n result.newString();\r\n result.writeString(helix.serial, 10, 8);\r\n result.writeString(helix.name, 14, 12);\r\n result.writeString(helix.init._type._name, 16, 18);\r\n result.writeString(helix.init._chain._name, 20, 20);\r\n result.writeString(helix.init._sequence, 25, 22);\r\n result.writeString(helix.init._icode, 26, 26);\r\n result.writeString(helix.term._type._name, 28, 30);\r\n result.writeString(helix.term._chain._name, 32, 32);\r\n result.writeString(helix.term._sequence, 37, 34);\r\n result.writeString(helix.term._icode, 38, 38);\r\n result.writeString(helixClass[helix.type], 40, 39);\r\n result.writeString(helix.comment, 41, 70);\r\n result.writeString(helix.length, 76, 72);\r\n }\r\n }\r\n\r\n _extractATOM(result) {\r\n if (!this._source._atoms) {\r\n return;\r\n }\r\n const atoms = this._source._atoms;\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const tag = atoms[i].het ? 'HETATM' : 'ATOM';\r\n result.newString(tag);\r\n const startIndx = (atoms[i].element.name.length > 1 || atoms[i].name.length > 3) ? 13 : 14;\r\n result.writeString(atoms[i].serial, 11, 7);\r\n result.writeString(atoms[i].name, startIndx, 16);\r\n result.writeString(String.fromCharCode(atoms[i].location), 17, 17);\r\n result.writeString(atoms[i].residue._type._name, 20, 18);\r\n result.writeString(atoms[i].residue._chain._name, 22, 22);\r\n result.writeString(atoms[i].residue._sequence, 26, 23);\r\n result.writeString(atoms[i].residue._icode, 27, 27);\r\n result.writeString(atoms[i].position.x.toFixed(3), 38, 31);\r\n result.writeString(atoms[i].position.y.toFixed(3), 46, 39);\r\n result.writeString(atoms[i].position.z.toFixed(3), 54, 47);\r\n result.writeString(atoms[i].occupancy.toFixed(2), 60, 55);\r\n result.writeString(atoms[i].temperature.toFixed(2), 66, 61);\r\n result.writeString(atoms[i].element.name, 78, 77);\r\n if (atoms[i].charge) {\r\n result.writeString(atoms[i].charge, 79, 80);\r\n }\r\n }\r\n }\r\n\r\n _extractCOMPND(result) {\r\n if (!this._source._molecules) {\r\n return;\r\n }\r\n const molecules = this._source._molecules;\r\n result.newTag('COMPND', true);\r\n\r\n for (let i = 0; i < molecules.length; i++) {\r\n const chains = this._getMoleculeChains(molecules[i]);\r\n result.newString();\r\n result.writeString(`MOL_ID: ${molecules[i].index};`, 11, 80);\r\n result.newString();\r\n result.writeString(`MOLECULE: ${molecules[i].name};`, 11, 80);\r\n result.newString();\r\n result.writeString('CHAIN: ', 11, 18);\r\n const chainsString = `${chains.join(', ')};`;\r\n result.writeEntireString(chainsString, 81);\r\n }\r\n }\r\n\r\n _extractREMARK(result) {\r\n this._Remark290(result);\r\n this._Remark350(result);\r\n }\r\n\r\n _Remark290(result) {\r\n if (!this._source.symmetry) {\r\n return;\r\n }\r\n\r\n if (this._source.symmetry.length !== 0) {\r\n const matrices = this._source.symmetry;\r\n result.newTag('REMARK', 290);\r\n result.newString();\r\n result.newString();\r\n result.writeEntireString(this._stringForRemark290);\r\n result.writeMatrices(matrices, 'SMTRY');\r\n result.newString();\r\n result.newString();\r\n result.writeString('REMARK: NULL', 11, 80);\r\n }\r\n }\r\n\r\n _Remark350(result) {\r\n if (!this._source.units) {\r\n return;\r\n }\r\n const { units } = this._source;\r\n let biomolIndx = 0;\r\n\r\n result.newTag('REMARK', 350);\r\n result.newString();\r\n result.newString();\r\n result.writeEntireString(this._stringForRemark350);\r\n\r\n const assemblies = units.filter((unit) => unit instanceof Assembly);\r\n\r\n for (let i = 0; i < assemblies.length; i++) {\r\n result.newString();\r\n result.newString();\r\n biomolIndx++;\r\n result.writeString(`BIOMOLECULE: ${biomolIndx}`, 11, 80);\r\n const chains = assemblies[i].chains.join(', ');\r\n result.newString();\r\n result.writeString('APPLY THE FOLLOWING TO CHAINS: ');\r\n result.writeEntireString(chains, 69, { tag: 'AND CHAINS: ', begin: 31, end: 42 });\r\n\r\n const { matrices } = assemblies[i];\r\n result.writeMatrices(matrices, 'BIOMT');\r\n }\r\n }\r\n\r\n _getMoleculeChains(molecule) {\r\n function getChainName(residue) {\r\n return residue._chain._name;\r\n }\r\n const chainNames = molecule.residues.map(getChainName);\r\n return chainNames.filter((item, pos) => chainNames.indexOf(item) === pos);\r\n }\r\n}\r\n\r\nPDBExporter.formats = ['pdb'];\r\nPDBExporter.SourceClass = Complex;\r\n","import * as THREE from 'three';\r\n\r\nconst FBX_POS_SIZE = 3;\r\nconst FBX_NORM_SIZE = 3;\r\nconst FBX_COL_SIZE = 4;\r\n\r\nfunction copyFbxPoint3(src, srcIdx, dst, dstIdx) {\r\n dst[dstIdx] = src[srcIdx];\r\n dst[dstIdx + 1] = src[srcIdx + 1];\r\n dst[dstIdx + 2] = src[srcIdx + 2];\r\n}\r\n\r\nfunction copyFbxPoint4(src, srcIdx, dst, dstIdx, value) {\r\n dst[dstIdx] = src[srcIdx];\r\n dst[dstIdx + 1] = src[srcIdx + 1];\r\n dst[dstIdx + 2] = src[srcIdx + 2];\r\n dst[dstIdx + 3] = value;\r\n}\r\n\r\nconst vector4 = new THREE.Vector4();\r\nfunction copyTransformedPoint3(src, srcIdx, dst, dstIdx, opts) {\r\n vector4.set(src[srcIdx], src[srcIdx + 1], src[srcIdx + 2], opts.w);\r\n vector4.applyMatrix4(opts.matrix);\r\n dst[dstIdx] = vector4.x;\r\n dst[dstIdx + 1] = vector4.y;\r\n dst[dstIdx + 2] = vector4.z;\r\n}\r\n\r\nfunction setSubArray(src, dst, count, copyFunctor, functorOpts) {\r\n if ((dst.array.length - dst.start) / dst.stride < count\r\n || (src.array.length - src.start) / src.stride < count) {\r\n return; // we've got no space\r\n }\r\n if (src.stride === dst.stride) { // stride is the same\r\n dst.array.set(src.array, dst.start);\r\n } else {\r\n let idx = dst.start;\r\n let arridx = src.start;\r\n for (let i = 0; i < count; ++i, idx += dst.stride, arridx += src.stride) {\r\n copyFunctor(src.array, arridx, dst.array, idx, functorOpts);\r\n }\r\n }\r\n}\r\n\r\nexport default class FBXModel {\r\n constructor() {\r\n this.positions = null;\r\n this.normals = null;\r\n this.colors = null;\r\n this.indices = null;\r\n this.lastPos = 0;\r\n this.lastNorm = 0;\r\n this.lastCol = 0;\r\n this.lastIdx = 0;\r\n }\r\n\r\n init(vertsCount, indsCount) {\r\n this.positions = new Float32Array(vertsCount * FBX_POS_SIZE);\r\n this.normals = new Float32Array(vertsCount * FBX_NORM_SIZE);\r\n this.colors = new Float32Array(vertsCount * FBX_COL_SIZE);\r\n this.indices = new Int32Array(indsCount);\r\n }\r\n\r\n setPositions(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.positions,\r\n start: this.lastPos,\r\n stride: FBX_POS_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint3);\r\n this.lastPos += count * FBX_POS_SIZE;\r\n }\r\n\r\n setTransformedPositions(array, start, count, stride, matrix) {\r\n let idx = this.lastPos;\r\n let arrIdx = start;\r\n const opts = { matrix, w: 1 };\r\n for (let i = 0; i < count; ++i, arrIdx += stride, idx += FBX_POS_SIZE) {\r\n copyTransformedPoint3(array, arrIdx, this.positions, idx, opts);\r\n }\r\n this.lastPos += count * FBX_POS_SIZE;\r\n }\r\n\r\n setNormals(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.normals,\r\n start: this.lastNorm,\r\n stride: FBX_NORM_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint3);\r\n this.lastNorm += count * FBX_NORM_SIZE;\r\n }\r\n\r\n setTransformedNormals(array, start, count, stride, matrix) {\r\n let idx = this.lastNorm;\r\n let arrIdx = start;\r\n const opts = { matrix, w: 0 };\r\n for (let i = 0; i < count; ++i, arrIdx += stride, idx += FBX_NORM_SIZE) {\r\n copyTransformedPoint3(array, arrIdx, this.normals, idx, opts);\r\n }\r\n this.lastNorm += count * FBX_NORM_SIZE;\r\n }\r\n\r\n setColors(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.colors,\r\n start: this.lastCol,\r\n stride: FBX_COL_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint4, 1);\r\n this.lastCol += count * FBX_COL_SIZE;\r\n }\r\n\r\n setIndices(array, start, count) {\r\n this.indices.set(array, this.lastIdx);\r\n this.lastIdx += count;\r\n }\r\n\r\n setShiftedIndices(array, count, shift) {\r\n const shifted = array.map((x) => x + shift);\r\n this.setIndices(shifted, 0, count);\r\n }\r\n\r\n getVerticesNumber() {\r\n return this.lastPos / FBX_POS_SIZE;\r\n }\r\n\r\n addInstance(matrix, geo) {\r\n // add indices at first to take old number of vertices for shift\r\n const currentCount = this.getVerticesNumber();\r\n this.setShiftedIndices(geo.indices, geo.indices.length, currentCount);\r\n // simply write vertices at empty space\r\n const size = geo.itemSize;\r\n this.setTransformedPositions(geo.positions, 0, geo.vertsCount, size.position, matrix);\r\n this.setTransformedNormals(geo.normals, 0, geo.vertsCount, size.normal, matrix);\r\n this.setColors(geo.colors, 0, geo.vertsCount, size.color);\r\n }\r\n}\r\n","/** Base class for fbx geometry contains simply organized attributes: positions+normals+colors, indices. */\r\nexport default class FBXGeometry {\r\n /**\r\n * Create a base geo with necessary members.\r\n */\r\n constructor() {\r\n this.positions = null;\r\n this.normals = null;\r\n this.colors = null;\r\n this.indices = null;\r\n this.vertsCount = 0;\r\n this.itemSize = null;\r\n }\r\n\r\n /**\r\n * Initialize base geo storing items info from attributes.\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n */\r\n init(geo, _info) {\r\n const { attributes } = geo;\r\n // save item size\r\n this.itemSize = {\r\n position: attributes.position.itemSize,\r\n normal: attributes.normal.itemSize,\r\n color: attributes.color.itemSize,\r\n };\r\n }\r\n}\r\n","import FBXGeometry from './FBXGeometry';\r\n\r\n/**\r\n * Fbx geometry, that copies positions+normals, indexes and creates colors filled with defined value.\r\n * @extends FBXGeometry\r\n */\r\nexport default class FBX1CGeometry extends FBXGeometry {\r\n /**\r\n * Initialize geo storing positions, normals, indices and create colors.\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n */\r\n init(geo, _info) {\r\n super.init(geo, _info);\r\n const {\r\n attributes: {\r\n position,\r\n normal,\r\n },\r\n index,\r\n } = geo;\r\n // copy vertices attributes\r\n this.vertsCount = position.count;\r\n this.positions = position.array;\r\n this.normals = normal.array;\r\n // create color array\r\n this.colors = new Float32Array(this.vertsCount * this.itemSize.color);\r\n // indices\r\n this.indices = index.array;\r\n }\r\n\r\n /**\r\n * Set defined color for all items in color attribute\r\n * @param {Object} color - THREE.Color.\r\n */\r\n setColors(color) {\r\n let offset = 0;\r\n for (let i = 0, l = this.colors.length, cl = this.itemSize.color; i < l; i += cl) {\r\n this.colors[offset++] = color.r;\r\n this.colors[offset++] = color.g;\r\n this.colors[offset++] = color.b;\r\n }\r\n }\r\n}\r\n","import FBXGeometry from './FBXGeometry';\r\n\r\n/**\r\n * Fbx geometry, that copies positions+normals, indexes from cylinder geometry and creates colors filled with two\r\n * defined values.\r\n * @extends FBXGeometry\r\n */\r\nexport default class FBX2CCylinder extends FBXGeometry {\r\n constructor() {\r\n super();\r\n this._cutRawStart = 0;\r\n this._cutRawEnd = 0;\r\n this._facesPerSlice = 0;\r\n }\r\n\r\n /**\r\n * Initialize geo by creating new attributes, because we extend number of vertices to make cylinder two-colored.\r\n * Indices remain the same. We process open- end close-ended cylinders and consider cylinders od 2 segments\r\n * in height ONLY.\r\n * NOTE: cylinder consists of 2 height segments and stores parts in the order: tube, topCap, bottomCap\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n * @param {Object} info - information needed for geo extend\r\n */\r\n init(geo, info) {\r\n super.init(geo, info);\r\n const {\r\n attributes: {\r\n position,\r\n },\r\n index,\r\n } = geo;\r\n // extend vertices arrays\r\n this.vertsCount = position.count + info.addPerCylinder;\r\n this._facesPerSlice = info.addPerCylinder;\r\n this.positions = new Float32Array(this.vertsCount * position.itemSize);\r\n this.normals = new Float32Array(this.vertsCount * this.itemSize.normal);\r\n this.colors = new Float32Array(this.vertsCount * this.itemSize.color);\r\n this._extendVertices(geo, info);\r\n // number of indices stays the same\r\n this.indices = new Uint32Array(index.count);\r\n this._extendIndices(geo, info);\r\n }\r\n\r\n /** Extend vertex attributes to have one more slice to make sharp middle startColor-endColor line. */\r\n _extendVertices(geo, info) {\r\n const { position } = geo.attributes;\r\n const { normal } = geo.attributes;\r\n const geoParams = geo.getGeoParams();\r\n const cutRaw = 1; // we expect cylinders of 2 segments in height => so half segment = 1\r\n this._cutRawStart = cutRaw * geoParams.radialSegments;\r\n this._cutRawEnd = this._cutRawStart + info.addPerCylinder;\r\n { // write first half of cylinder\r\n let temp = position.array.slice(0, this._cutRawEnd * position.itemSize);\r\n this.positions.set(temp, 0);\r\n temp = normal.array.slice(0, this._cutRawEnd * normal.itemSize);\r\n this.normals.set(temp, 0);\r\n }\r\n { // write second part of cylinder\r\n let temp = position.array.slice(this._cutRawStart * position.itemSize, position.array.length);\r\n this.positions.set(temp, this._cutRawEnd * position.itemSize);\r\n temp = normal.array.slice(this._cutRawStart * normal.itemSize, normal.array.length);\r\n this.normals.set(temp, this._cutRawEnd * normal.itemSize);\r\n }\r\n }\r\n\r\n /** Shift values of second part (+caps) indices by newly added vertices count. Number of faces remains the same. */\r\n _extendIndices(geo, info) {\r\n const { index } = geo;\r\n const indicesPerQuad = 6; // quad = 2 triangles => 6 indices\r\n const startToShift = info.addPerCylinder * indicesPerQuad;\r\n const shift = info.addPerCylinder;\r\n let shifted = index.array.slice(startToShift, index.count);\r\n shifted = shifted.map((x) => x + shift); // shift only the endings\r\n this.indices.set(index.array, 0);\r\n this.indices.set(shifted, startToShift);\r\n }\r\n\r\n /**\r\n * Set defined colors: (first part + bottom cap), (second part + top cap)\r\n * @param {number} start - start color index\r\n * @param {number} end - start color index\r\n * @param {array} array - array of colors\r\n * @param {array} color - color value components\r\n */\r\n _setColorRange(start, end, array, color) {\r\n const colorSize = color.length;\r\n for (let i = start; i < end; i += colorSize) {\r\n array.set(color, i);\r\n }\r\n }\r\n\r\n /**\r\n * Set defined colors: (first part + bottom cap), (second part + top cap)\r\n * @param {Object} color1 - THREE.Color.\r\n * @param {Object} color2 - THREE.Color.\r\n */\r\n setColors(color1, color2) {\r\n const colorSize = this.itemSize.color;\r\n const part1End = this._cutRawEnd * colorSize;\r\n const part2End = part1End * 2;\r\n this._setColorRange(0, part1End, this.colors, color1.toArray());\r\n this._setColorRange(part1End, part2End, this.colors, color2.toArray());\r\n if (part2End < this.colors.length) { // cylinder has caps, lets paint them\r\n const capSize = (this._facesPerSlice + 1) * colorSize;\r\n const cap1End = part2End + capSize;\r\n this._setColorRange(part2End, cap1End, this.colors, color2.toArray());\r\n const cap2End = cap1End + capSize; // should be equal to this.colors.length;\r\n this._setColorRange(cap1End, cap2End, this.colors, color1.toArray());\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\n\r\nimport utils from '../../../utils';\r\nimport gfxutils from '../../../gfx/gfxutils';\r\nimport logger from '../../../utils/logger';\r\n\r\nimport FBXModel from './FBXModel';\r\nimport ThickLineMesh from '../../../gfx/meshes/ThickLineMesh';\r\nimport ZSpriteMesh from '../../../gfx/meshes/ZSpriteMesh';\r\nimport InstancedSpheresGeometry from '../../../gfx/geometries/InstancedSpheresGeometry';\r\nimport Instanced2CCylindersGeometry from '../../../gfx/geometries/Instanced2CCylindersGeometry';\r\nimport FBX1CGeometry from './FBX1CGeometry';\r\nimport FBX2CCylinder from './FBX2CCylinder';\r\n\r\nexport default class FBXInfoExtractor {\r\n constructor() {\r\n this._materials = [];\r\n this._models = [];\r\n }\r\n\r\n process(data) {\r\n this._extractModelsAndMaterials(data);\r\n const models = this._flattenModels();\r\n\r\n return {\r\n name: data.name,\r\n models,\r\n materials: this._materials,\r\n };\r\n }\r\n\r\n /**\r\n * Extract fbx object information from ComplexVisual\r\n * @param {object} data - complexVisual to get geometry info from\r\n */\r\n _extractModelsAndMaterials(data) {\r\n const layersOfInterest = new THREE.Layers();\r\n layersOfInterest.set(gfxutils.LAYERS.DEFAULT);\r\n layersOfInterest.enable(gfxutils.LAYERS.TRANSPARENT);\r\n data.traverse((object) => {\r\n if (object instanceof THREE.Mesh && object.layers.test(layersOfInterest) && this.checkExportAbility(object)) {\r\n if (object.geometry.type === 'InstancedBufferGeometry') {\r\n this._collectInstancedGeoInfo(object);\r\n } else {\r\n this._collectGeoInfo(object);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Reworking indices buffer, see https://banexdevblog.wordpress.com/2014/06/23/a-quick-tutorial-about-the-fbx-ascii-format/\r\n * basically, every triangle in Miew has been represented hat way (e.g.) : 0,1,7, but we must (for FBX) rework that\r\n * into: 0,1,-8.\r\n * @param {array} indices - belongs to [0, maxVertIndex]\r\n */\r\n _reworkIndices(indices) {\r\n const faceSize = 3;\r\n for (let i = faceSize - 1; i < indices.length; i += faceSize) {\r\n indices[i] *= -1;\r\n indices[i]--;\r\n }\r\n }\r\n\r\n /**\r\n * Combine geometry from several models having the same material into one Model and finally prepare indices\r\n * @returns {array} models, combined by material id\r\n */\r\n _flattenModels() {\r\n let overallVertsCount = 0;\r\n function shift(x) {\r\n return x + overallVertsCount;\r\n }\r\n const combined = [];\r\n // flatten models geometry\r\n for (let i = 0, n = this._models.length; i < n; i++) {\r\n const models = this._models[i];\r\n let indices = [];\r\n let positions = [];\r\n let normals = [];\r\n let colors = [];\r\n // reorganize every attributes as array of arrays\r\n overallVertsCount = 0;\r\n for (let j = 0; j < models.length; j++) {\r\n const m = models[j];\r\n indices.push(m.indices.map(shift));\r\n overallVertsCount += m.getVerticesNumber();\r\n positions.push(m.positions);\r\n normals.push(m.normals);\r\n colors.push(m.colors);\r\n }\r\n // join all subarrays into one\r\n indices = utils.mergeTypedArraysUnsafe(indices);\r\n this._reworkIndices(indices);\r\n positions = utils.mergeTypedArraysUnsafe(positions);\r\n normals = utils.mergeTypedArraysUnsafe(normals);\r\n colors = utils.mergeTypedArraysUnsafe(colors);\r\n combined.push({\r\n indices,\r\n positions,\r\n normals,\r\n colors,\r\n verticesCount: overallVertsCount,\r\n });\r\n }\r\n return combined;\r\n }\r\n\r\n /**\r\n * Check ability to export the kind of mesh.\r\n * @param {object} mesh - given mesh to check\r\n * @returns {boolean} result of check\r\n */\r\n checkExportAbility(mesh) {\r\n // check mesh on not being empty\r\n if (mesh.geometry.attributes.position.count === 0) {\r\n return false;\r\n }\r\n // check type of mesh\r\n // if (mesh.geometry.isInstancedBufferGeometry && settings.now.zSprites) {\r\n if (mesh instanceof ZSpriteMesh) {\r\n logger.warn('Currently we cannot export \\'sprites\\' modes, like BS, WV, LC. Please turn of settings \\'zSprites\\' and try again');\r\n return false;\r\n }\r\n if (mesh instanceof ThickLineMesh) {\r\n logger.warn('Currently we cannot export Lines mode');\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Save geometry info from common mesh, like Surface or Cartoon\r\n */\r\n _collectGeoInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n normal,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const vertCount = position.count;\r\n model.init(vertCount, index.count);\r\n if (matrix.isIdentity()) {\r\n model.setPositions(position.array, 0, vertCount, position.itemSize);\r\n model.setNormals(normal.array, 0, vertCount, normal.itemSize);\r\n } else {\r\n model.setTransformedPositions(position.array, 0, vertCount, position.itemSize, matrix);\r\n model.setTransformedNormals(normal.array, 0, vertCount, normal.itemSize, matrix);\r\n }\r\n model.setColors(color.array, 0, vertCount, color.itemSize);\r\n model.setIndices(index.array, 0, index.count);\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Collect instanced spheres geometry and materials.\r\n * @param {object} mesh - mesh with instanced spheres info\r\n */\r\n _collectSpheresInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const instCount = mesh.geometry.instanceCount;\r\n const vertCount = position.count;\r\n const indsCount = index.count;\r\n model.init(instCount * vertCount, instCount * indsCount);\r\n const geo = new FBX1CGeometry();\r\n geo.init(mesh.geometry);\r\n const instMatrix = new THREE.Matrix4();\r\n const objMatrix = new THREE.Matrix4();\r\n const sphereColor = new THREE.Color();\r\n for (let instanceIndex = 0; instanceIndex < instCount; ++instanceIndex) {\r\n // update colors in geometry\r\n const colorIdx = instanceIndex * color.itemSize;\r\n sphereColor.fromArray(color.array, colorIdx);\r\n geo.setColors(sphereColor);\r\n // add instance to the model\r\n this._getSphereInstanceMatrix(mesh.geometry, instanceIndex, instMatrix);\r\n objMatrix.multiplyMatrices(matrix, instMatrix);\r\n model.addInstance(objMatrix, geo);\r\n }\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Getting all instanced cylinders from given mesh.\r\n * Divide cylinder (add additional vertexes) for prettiness therefore algorithm is a bit complicated\r\n * @param {object} mesh - given mesh with instanced cylinders\r\n */\r\n _collectCylindersInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n color2,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const instCount = mesh.geometry.instanceCount;\r\n const oneCCylinder = new FBX1CGeometry();\r\n oneCCylinder.init(mesh.geometry);\r\n const splittingInfo = this._gatherCylindersColoringInfo(mesh.geometry);\r\n let twoCCylinder = null;\r\n if (splittingInfo.needToSplit > 0) {\r\n twoCCylinder = new FBX2CCylinder();\r\n twoCCylinder.init(mesh.geometry, splittingInfo);\r\n }\r\n const additionalVertsCount = splittingInfo.addPerCylinder * splittingInfo.needToSplit;\r\n const vertCount = position.count;\r\n const indsCount = index.count;\r\n model.init(instCount * vertCount + additionalVertsCount, instCount * indsCount);\r\n const instMatrix = new THREE.Matrix4();\r\n const objMatrix = new THREE.Matrix4();\r\n const colorStart = new THREE.Color();\r\n const colorEnd = new THREE.Color();\r\n let geo = {};\r\n for (let instanceIndex = 0; instanceIndex < instCount; ++instanceIndex) {\r\n // update colors in geometry\r\n const colorIdx = instanceIndex * color.itemSize;\r\n if (splittingInfo.is2Colored[instanceIndex]) {\r\n // .color2 contains starting color, and .color contains starting color (see uber.frag ATTR_COLOR2)\r\n colorStart.fromArray(color2.array, colorIdx);\r\n colorEnd.fromArray(color.array, colorIdx);\r\n if (twoCCylinder) {\r\n twoCCylinder.setColors(colorStart, colorEnd);\r\n geo = twoCCylinder;\r\n }\r\n } else {\r\n // has one color per cylinder\r\n colorStart.fromArray(color.array, colorIdx);\r\n oneCCylinder.setColors(colorStart);\r\n geo = oneCCylinder;\r\n }\r\n // add instance to the model\r\n this._getCylinderInstanceMatrix(mesh.geometry, instanceIndex, instMatrix);\r\n objMatrix.multiplyMatrices(matrix, instMatrix);\r\n model.addInstance(objMatrix, geo);\r\n }\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Adding model to pool of models or extend existing ones\r\n * @param {object} model - model to add\r\n * @param {object} material - material to add\r\n */\r\n _addToPool(model, material) {\r\n const materialIdx = this._checkExistingMaterial(material);\r\n if (materialIdx < 0) { // new model-material pair\r\n this._models.push([model]);\r\n this._materials.push(material);\r\n } else { // add model to existing model-material pair\r\n const models = this._models[materialIdx];\r\n models.push(model);\r\n }\r\n }\r\n\r\n /**\r\n * Checking if given material already was registered in materials pool (no need to create new one)\r\n * @param {object} material - given material\r\n * @returns {number} number of model-material pair\r\n */\r\n _checkExistingMaterial(material) {\r\n return _.findIndex(this._materials, (m) => _.isEqual(m, material));\r\n }\r\n\r\n _gatherCylindersColoringInfo(geo) {\r\n const instCount = geo.instanceCount;\r\n const color1 = geo.attributes.color.array;\r\n const color2 = geo.attributes.color2.array;\r\n const stride = geo.attributes.color.itemSize;\r\n const is2Colored = new Array(instCount);\r\n // analyze color instance attributes\r\n let needToSplit = 0;\r\n let colIdx = 0;\r\n for (let i = 0; i < instCount; i++, colIdx += stride) {\r\n const differs = (Math.abs(color1[colIdx] - color2[colIdx]) > 0.0000001) // compare ending colors\r\n || (Math.abs(color1[colIdx + 1] - color2[colIdx + 1]) > 0.0000001)\r\n || (Math.abs(color1[colIdx + 2] - color2[colIdx + 2]) > 0.0000001);\r\n is2Colored[i] = differs;\r\n needToSplit += differs; // count number of 2-colored cylinders\r\n }\r\n // calc number of vertices to add into 2-colored\r\n const geoParams = geo.getGeoParams();\r\n const addPerCylinder = geoParams.radialSegments;\r\n return { is2Colored, needToSplit, addPerCylinder };\r\n }\r\n\r\n /**\r\n * Collect instanced models and materials.\r\n * @param {object} mesh - given mesh with instanced something (spheres or cylinders)\r\n */\r\n _collectInstancedGeoInfo(mesh) {\r\n if (mesh.geometry instanceof InstancedSpheresGeometry) {\r\n this._collectSpheresInfo(mesh);\r\n } else if (mesh.geometry instanceof Instanced2CCylindersGeometry) {\r\n this._collectCylindersInfo(mesh);\r\n }\r\n }\r\n\r\n /**\r\n * Collect Material info from given mesh.\r\n * @param {object} mesh - given mesh with material info\r\n * @returns {object} material\r\n */\r\n _collectMaterialInfo(mesh) {\r\n const { uberOptions } = mesh.material;\r\n return ({\r\n diffuse: uberOptions.diffuse.toArray(),\r\n opacity: uberOptions.opacity,\r\n shininess: uberOptions.shininess,\r\n specular: uberOptions.specular.toArray(),\r\n });\r\n }\r\n\r\n _getCylinderInstanceMatrix(geo, instIdx, matrix) {\r\n const matVector1 = geo.attributes.matVector1.array;\r\n const matVector2 = geo.attributes.matVector2.array;\r\n const matVector3 = geo.attributes.matVector3.array;\r\n const idxOffset = instIdx * 4; // used 4 because offset arrays are stored in quads\r\n matrix.set(\r\n matVector1[idxOffset],\r\n matVector1[idxOffset + 1],\r\n matVector1[idxOffset + 2],\r\n matVector1[idxOffset + 3],\r\n matVector2[idxOffset],\r\n matVector2[idxOffset + 1],\r\n matVector2[idxOffset + 2],\r\n matVector2[idxOffset + 3],\r\n matVector3[idxOffset],\r\n matVector3[idxOffset + 1],\r\n matVector3[idxOffset + 2],\r\n matVector3[idxOffset + 3],\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n );\r\n }\r\n\r\n _getSphereInstanceMatrix(geo, instIdx, matrix) {\r\n const { offset } = geo.attributes;\r\n const idx = instIdx * offset.itemSize;\r\n const x = offset.array[idx];\r\n const y = offset.array[idx + 1];\r\n const z = offset.array[idx + 2];\r\n const scale = offset.array[idx + 3];\r\n matrix.set(\r\n scale,\r\n 0,\r\n 0,\r\n x,\r\n 0,\r\n scale,\r\n 0,\r\n y,\r\n 0,\r\n 0,\r\n scale,\r\n z,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n );\r\n }\r\n}\r\n","// Forming default definitions block\r\nconst defaultDefinitions = `\r\nDefinitions: {\r\n Version: 100\r\n Count: 3\r\n ObjectType: \"Model\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Geometry\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Material\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Pose\" {\r\n Count: 1\r\n }\r\n ObjectType: \"GlobalSettings\" {\r\n Count: 1\r\n }\r\n} `;\r\n\r\n// Default model properties\r\nconst defaultProperties = `Properties60: {\r\n Property: \"QuaternionInterpolate\", \"bool\", \"\",0\r\n Property: \"Visibility\", \"Visibility\", \"A\",1\r\n Property: \"Lcl Translation\", \"Lcl Translation\", \"A\",0.000000000000000,0.000000000000000,-1789.238037109375000\r\n Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A\",0.000009334667643,-0.000000000000000,0.000000000000000\r\n Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A\",1.000000000000000,1.000000000000000,1.000000000000000\r\n Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\r\n Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\r\n Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationActive\", \"bool\", \"\",0\r\n Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationMinX\", \"bool\", \"\",0\r\n Property: \"TranslationMinY\", \"bool\", \"\",0\r\n Property: \"TranslationMinZ\", \"bool\", \"\",0\r\n Property: \"TranslationMaxX\", \"bool\", \"\",0\r\n Property: \"TranslationMaxY\", \"bool\", \"\",0\r\n Property: \"TranslationMaxZ\", \"bool\", \"\",0\r\n Property: \"RotationOrder\", \"enum\", \"\",0\r\n Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\r\n Property: \"AxisLen\", \"double\", \"\",10\r\n Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationActive\", \"bool\", \"\",0\r\n Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationMinX\", \"bool\", \"\",0\r\n Property: \"RotationMinY\", \"bool\", \"\",0\r\n Property: \"RotationMinZ\", \"bool\", \"\",0\r\n Property: \"RotationMaxX\", \"bool\", \"\",0\r\n Property: \"RotationMaxY\", \"bool\", \"\",0\r\n Property: \"RotationMaxZ\", \"bool\", \"\",0\r\n Property: \"RotationStiffnessX\", \"double\", \"\",0\r\n Property: \"RotationStiffnessY\", \"double\", \"\",0\r\n Property: \"RotationStiffnessZ\", \"double\", \"\",0\r\n Property: \"MinDampRangeX\", \"double\", \"\",0\r\n Property: \"MinDampRangeY\", \"double\", \"\",0\r\n Property: \"MinDampRangeZ\", \"double\", \"\",0\r\n Property: \"MaxDampRangeX\", \"double\", \"\",0\r\n Property: \"MaxDampRangeY\", \"double\", \"\",0\r\n Property: \"MaxDampRangeZ\", \"double\", \"\",0\r\n Property: \"MinDampStrengthX\", \"double\", \"\",0\r\n Property: \"MinDampStrengthY\", \"double\", \"\",0\r\n Property: \"MinDampStrengthZ\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthX\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthY\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthZ\", \"double\", \"\",0\r\n Property: \"PreferedAngleX\", \"double\", \"\",0\r\n Property: \"PreferedAngleY\", \"double\", \"\",0\r\n Property: \"PreferedAngleZ\", \"double\", \"\",0\r\n Property: \"InheritType\", \"enum\", \"\",0\r\n Property: \"ScalingActive\", \"bool\", \"\",0\r\n Property: \"ScalingMin\", \"Vector3D\", \"\",1,1,1\r\n Property: \"ScalingMax\", \"Vector3D\", \"\",1,1,1\r\n Property: \"ScalingMinX\", \"bool\", \"\",0\r\n Property: \"ScalingMinY\", \"bool\", \"\",0\r\n Property: \"ScalingMinZ\", \"bool\", \"\",0\r\n Property: \"ScalingMaxX\", \"bool\", \"\",0\r\n Property: \"ScalingMaxY\", \"bool\", \"\",0\r\n Property: \"ScalingMaxZ\", \"bool\", \"\",0\r\n Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\r\n Property: \"LookAtProperty\", \"object\", \"\"\r\n Property: \"UpVectorProperty\", \"object\", \"\"\r\n Property: \"Show\", \"bool\", \"\",1\r\n Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\r\n Property: \"DefaultAttributeIndex\", \"int\", \"\",0\r\n Property: \"Color\", \"Color\", \"A+\",0,0,0\r\n Property: \"Size\", \"double\", \"\",100\r\n Property: \"Look\", \"enum\", \"\",1\r\n }`;\r\n\r\n// Default materials layer\r\nconst defaultMaterialLayer = `\r\n LayerElementMaterial: 0 {\r\n Version: 101\r\n Name: \"\"\r\n MappingInformationType: \"AllSame\"\r\n ReferenceInformationType: \"Direct\"\r\n Materials: 0\r\n }`;\r\n\r\n// Default layers block\r\nconst defaultLayerBlock = `\r\n Layer: 0 {\r\n Version: 100\r\n LayerElement: {\r\n Type: \"LayerElementNormal\"\r\n TypedIndex: 0\r\n }\r\n LayerElement: {\r\n Type: \"LayerElementColor\"\r\n TypedIndex: 0\r\n }\r\n LayerElement: {\r\n Type: \"LayerElementMaterial\"\r\n TypedIndex: 0\r\n }\r\n }`;\r\n\r\n/**\r\n * globalSettings info in output file.\r\n */\r\nconst globalSettings = `GlobalSettings: {\r\n Version: 1000\r\n Properties60: {\r\n Property: \"UpAxis\", \"int\", \"\",1\r\n Property: \"UpAxisSign\", \"int\", \"\",1\r\n Property: \"FrontAxis\", \"int\", \"\",2\r\n Property: \"FrontAxisSign\", \"int\", \"\",1\r\n Property: \"CoordAxis\", \"int\", \"\",0\r\n Property: \"CoordAxisSign\", \"int\", \"\",1\r\n Property: \"UnitScaleFactor\", \"double\", \"\",1\r\n }\r\n }`;\r\n\r\nexport default class FBXResult {\r\n constructor() {\r\n this._resultArray = [];\r\n this._info = null;\r\n }\r\n\r\n getResult(info) {\r\n this._info = info;\r\n this._resultArray.push(this._writeHeader());\r\n this._resultArray.push(this._writeDefinitions());\r\n this._resultArray.push(this._writeObjects(info.models, info.materials));\r\n this._resultArray.push(this._writeRelations());\r\n this._resultArray.push(this._writeConnections()); // connections between models and materials)\r\n this._info = null;\r\n return this._resultArray.join('');\r\n }\r\n\r\n /**\r\n * Add FBXHeader info to output file.\r\n * Some fields are really confusing, but it seems that all listed fields are very informative\r\n */\r\n _writeHeader() {\r\n const FBXHeaderVersion = 1003; // 1003 is some number which appears to present in many 6.1 ASCII files\r\n const FBXVersion = 6100; // Mandatory and only supported version\r\n const date = new Date();\r\n const timeStampVersion = 1000;\r\n const creator = `Miew FBX Exporter v${this._info.version}`; // Supposed to be an engine\r\n\r\n return `; FBX 6.1.0 project file\r\n; Created by ${creator} Copyright (c) 2015-2024 EPAM Systems, Inc.\r\n; For support please contact miew@epam.com\r\n; ----------------------------------------------------\r\n\r\nFBXHeaderExtension: {\r\n FBXHeaderVersion: ${FBXHeaderVersion}\r\n FBXVersion: ${FBXVersion}\r\n CreationTimeStamp: {\r\n Version: ${timeStampVersion}\r\n Year: ${date.getFullYear()}\r\n Month: ${date.getMonth() + 1}\r\n Day: ${date.getDate()}\r\n Hour: ${date.getHours()}\r\n Minute: ${date.getMinutes()}\r\n Second: ${date.getSeconds()}\r\n Millisecond: ${date.getMilliseconds()}\r\n }\r\n Creator: \"${creator}\"\r\n OtherFlags: {\r\n FlagPLE: 0\r\n }\r\n}\r\nCreationTime: \"${date}\"\r\nCreator: \"${creator}\"\r\n`;\r\n }\r\n\r\n /**\r\n * Add Definitions info to output file.\r\n * Not exactly sure if this section is template section (as it is in 7.4+) or it should every time be like this\r\n */\r\n _writeDefinitions() {\r\n return `\r\n; Object definitions\r\n;------------------------------------------------------------------\r\n\r\n${defaultDefinitions}\r\n`;\r\n }\r\n\r\n /**\r\n * Adding gathered information about Models to resulting string.\r\n * Reminder - there may be more then 1 model in scene, but we must place materials after ALL models.\r\n * @returns {string} string containing all models (vertices, indices, colors, normals etc)\r\n */\r\n _models() {\r\n const modelVersion = 232;\r\n let allModels = '';\r\n const { models } = this._info;\r\n for (let i = 0; i < models.length; ++i) {\r\n const model = models[i];\r\n const vertCount = model.verticesCount;\r\n allModels += `\r\n Model: \"Model::${this._info.name}_${i}\", \"Mesh\" {\r\n Version: ${modelVersion}\r\n ${defaultProperties}\r\n ${this._verticesIndices(model.positions, model.indices)}\r\n ${this._normalLayer(model.normals)}\r\n ${this._colorLayer(model.colors, vertCount)}\r\n ${defaultMaterialLayer}\r\n ${defaultLayerBlock}\r\n }`;\r\n }\r\n return allModels;\r\n }\r\n\r\n /**\r\n * Add Material info to result\r\n */\r\n _materials() {\r\n const materialVersion = 102;\r\n let allMaterials = '';\r\n const { materials } = this._info;\r\n for (let i = 0; i < materials.length; ++i) {\r\n const material = materials[i];\r\n allMaterials += `\r\n Material: \"Material::${this._info.name}_${i}_default\", \"\" {\r\n Version: ${materialVersion}\r\n ShadingModel: \"lambert\"\r\n MultiLayer: 0\r\n ${this._materialProperties(material)}\r\n }`;\r\n }\r\n return allMaterials;\r\n }\r\n\r\n /**\r\n * Add Objects info to output file.\r\n */\r\n _writeObjects() {\r\n return `\r\n; Object properties\r\n;------------------------------------------------------------------\r\n\r\nObjects: {\r\n ${this._models()}\r\n ${this._materials()}\r\n ${globalSettings}\r\n}\r\n`;\r\n }\r\n\r\n /**\r\n * Add Relations info to output file.\r\n */\r\n _writeRelations() {\r\n let modelsList = '';\r\n for (let i = 0; i < this._info.models.length; ++i) {\r\n modelsList += `\r\n Model: \"Model::${this._info.name}_${i}\", \"Mesh\" {\r\n }`;\r\n }\r\n let materialList = '';\r\n for (let i = 0; i < this._info.materials.length; ++i) {\r\n materialList += `\r\n Material: \"Material::${this._info.name}_${i}_default\", \"\" {\r\n }`;\r\n }\r\n\r\n return `\r\n; Object relations\r\n;------------------------------------------------------------------\r\n\r\nRelations: {\r\n ${modelsList}\r\n Model: \"Model::Producer Perspective\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Top\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Bottom\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Front\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Back\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Right\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Left\", \"Camera\" {\r\n }\r\n Model: \"Model::Camera Switcher\", \"CameraSwitcher\" {\r\n }\r\n ${materialList}\r\n}`;\r\n }\r\n\r\n /**\r\n * Add Connections info to output file.\r\n */\r\n _writeConnections() {\r\n let modelsList = '';\r\n const { name } = this._info;\r\n for (let i = 0; i < this._info.models.length; ++i) {\r\n modelsList += `\r\n Connect: \"OO\", \"Model::${name}_${i}\", \"Model::Scene\"`;\r\n }\r\n\r\n let materialList = '';\r\n for (let i = 0; i < this._info.materials.length; ++i) {\r\n materialList += `\r\n Connect: \"OO\", \"Material::${name}_${i}_default\", \"Model::${name}_${i}\"`;\r\n }\r\n\r\n return `\r\n; Object connections\r\n;------------------------------------------------------------------\r\n\r\nConnections: {\r\n ${modelsList}\r\n ${materialList}\r\n}`;\r\n }\r\n\r\n /**\r\n * Write float array to string with limited precision\r\n * @param {Float32Array} array - array to be fixed\r\n * @returns {String} String with fixed floats\r\n */\r\n _floatArrayToString(array) {\r\n const str = [];\r\n for (let i = 0; i < array.length; ++i) {\r\n str[i] = array[i].toFixed(6);\r\n }\r\n return str.join(',');\r\n }\r\n\r\n /**\r\n * Adding color layer to resulting file\r\n * @param {Float32Array} colorArray attribute\r\n * @param {number} vertCount - number of vertices in the model\r\n * @returns {string} color layer info\r\n */\r\n _colorLayer(colorArray, vertCount) {\r\n const layerElementColorNumber = 0;\r\n const layerElementColorVersion = 101;\r\n const layerElementColorName = '';\r\n const colorsStr = this._floatArrayToString(colorArray);\r\n // Mapping Information type and Reference Information type are mandatory for our Miew! Must not be changed\r\n // As said [..Array(...)] - fastest and easiest way to produce [0, 1, .....] array\r\n const colorIndices = [...Array(vertCount).keys()];\r\n return `\r\n LayerElementColor: ${layerElementColorNumber} {\r\n Version: ${layerElementColorVersion}\r\n Name: \"${layerElementColorName}\"\r\n MappingInformationType: \"ByVertice\"\r\n ReferenceInformationType: \"Direct\"\r\n Colors: ${colorsStr}\r\n ColorIndex: ${colorIndices}\r\n }`;\r\n }\r\n\r\n /**\r\n * Adding normal layer to resulting file\r\n * @param {Float32Array} normalArray attribute\r\n * @returns {string} normal layer info\r\n */\r\n _normalLayer(normalArray) {\r\n const layerElementNormalNumber = 0;\r\n const layerElementNormalVersion = 101;\r\n const layerElementNormalName = '';\r\n const normalsStr = this._floatArrayToString(normalArray);\r\n // Mapping Information type and Reference Information type are mandatory for our Miew! Must not be changed\r\n return `\r\n LayerElementNormal: ${layerElementNormalNumber} {\r\n Version: ${layerElementNormalVersion}\r\n Name: \"${layerElementNormalName}\"\r\n MappingInformationType: \"ByVertice\"\r\n ReferenceInformationType: \"Direct\"\r\n Normals: ${normalsStr}\r\n }`;\r\n }\r\n\r\n /**\r\n * Adding vertices and indices to resulting string\r\n * @return {string} resulting string in FBX notation\r\n */\r\n _verticesIndices(positions, indices) {\r\n const multiLayer = 0;\r\n const multiTake = 1;\r\n const shading = 'Y';\r\n const culling = 'CullingOff';\r\n const geometryVersion = 124;\r\n const vertStr = this._floatArrayToString(positions);\r\n /* About _correctArrayNotation: Float32Arrays will contains only Float32 numbers, which implies that it will be floating points with 17 numbers after point.\r\n * We cannot (and it's logically incorrect) save all this information, so we convert this Float32Array into Array-like object with numbers with only 6 numbers after point\r\n * Reminder - this is big memory loss (as we must save at one moment two arrays with similar information) */\r\n return `MultiLayer: ${multiLayer}\r\n MultiTake: ${multiTake}\r\n Shading: ${shading}\r\n Culling: \"${culling}\"\r\n Vertices: ${vertStr}\r\n PolygonVertexIndex: ${indices}\r\n GeometryVersion: ${geometryVersion}`;\r\n }\r\n\r\n /**\r\n * Forming material properties block.\r\n * @param {Object} material - given material of model\r\n * @returns {String} material properties string\r\n */\r\n _materialProperties(material) {\r\n return `Properties60: {\r\n Property: \"ShadingModel\", \"KString\", \"\", \"Lambert\"\r\n Property: \"MultiLayer\", \"bool\", \"\",0\r\n Property: \"EmissiveColor\", \"ColorRGB\", \"\",0,0,0\r\n Property: \"EmissiveFactor\", \"double\", \"\",0.0000\r\n Property: \"AmbientColor\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"AmbientFactor\", \"double\", \"\",0.0000\r\n Property: \"DiffuseColor\", \"ColorRGB\", \"\",${material.diffuse}\r\n Property: \"DiffuseFactor\", \"double\", \"\",1.0000\r\n Property: \"Bump\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TransparentColor\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"TransparencyFactor\", \"double\", \"\",0.0000\r\n Property: \"SpecularColor\", \"ColorRGB\", \"\",${material.specular}\r\n Property: \"SpecularFactor\", \"double\", \"\",1.0000\r\n Property: \"ShininessExponent\", \"double\", \"\",${material.shininess}\r\n Property: \"ReflectionColor\", \"ColorRGB\", \"\",0,0,0\r\n Property: \"ReflectionFactor\", \"double\", \"\",1\r\n Property: \"Ambient\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"Diffuse\", \"ColorRGB\", \"\",${material.diffuse}\r\n Property: \"Specular\", \"ColorRGB\", \"\",${material.specular}\r\n Property: \"Shininess\", \"double\", \"\",${material.shininess}\r\n Property: \"Opacity\", \"double\", \"\",${material.opacity}\r\n Property: \"Reflectivity\", \"double\", \"\",0\r\n }`;\r\n }\r\n}\r\n","import Exporter from './Exporter';\r\nimport FBXInfoExtractor from './fbx/FBXInfoExtractor';\r\nimport FBXResult from './fbx/FBXResult';\r\nimport ComplexVisual from '../../ComplexVisual';\r\n\r\nexport default class FBXExporter extends Exporter {\r\n constructor(source, options) {\r\n super(source, options);\r\n // Data\r\n this._data = source;\r\n this._version = options.miewVersion || '0.0-UNSPECIFIED';\r\n this._extractor = new FBXInfoExtractor();\r\n }\r\n\r\n /**\r\n * Entry point to exporter.\r\n */\r\n exportSync() {\r\n // Creating mandatory blocks\r\n const result = new FBXResult();\r\n if (!this._source) {\r\n return this._result;\r\n }\r\n\r\n const info = this._extractor.process(this._data);\r\n info.version = this._version;\r\n this._result = result.getResult(info);\r\n return this._result;\r\n }\r\n}\r\n\r\nFBXExporter.formats = ['fbx'];\r\nFBXExporter.SourceClass = ComplexVisual;\r\n","import ExporterList from './exporters/ExporterList';\r\n\r\nimport PDBExporter from './exporters/PDBExporter';\r\nimport FBXExporter from './exporters/FBXExporter';\r\n\r\nexport default new ExporterList([\r\n PDBExporter,\r\n FBXExporter,\r\n]);\r\n","import loaders from './loaders';\r\nimport parsers from './parsers';\r\nimport exporters from './exporters';\r\n\r\nexport default {\r\n loaders,\r\n parsers,\r\n exporters,\r\n};\r\n","/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nimport * as THREE from 'three';\r\nimport CSS2DObject from './CSS2DObject';\r\n\r\nconst tempColor = new THREE.Color();\r\n\r\nclass CSS2DRenderer {\r\n constructor() {\r\n this._width = 0;\r\n this._height = 0;\r\n this._widthHalf = 0;\r\n this._heightHalf = 0;\r\n\r\n this._vector = new THREE.Vector3();\r\n this._viewMatrix = new THREE.Matrix4();\r\n this._projectionMatrix = new THREE.Matrix4();\r\n\r\n this._domElement = document.createElement('div');\r\n this._domElement.style.overflow = 'hidden';\r\n this._domElement.style.position = 'absolute';\r\n this._domElement.style.top = '0';\r\n this._domElement.style.zIndex = '0'; // start a new Stacking Context to enclose all z-ordered children\r\n this._domElement.style.pointerEvents = 'none';\r\n }\r\n\r\n getElement() {\r\n return this._domElement;\r\n }\r\n\r\n reset() {\r\n const myNode = this.getElement();\r\n while (myNode.firstChild) {\r\n myNode.removeChild(myNode.firstChild);\r\n }\r\n }\r\n\r\n setSize(width, height) {\r\n this._width = width;\r\n this._height = height;\r\n\r\n this._widthHalf = this._width / 2;\r\n this._heightHalf = this._height / 2;\r\n\r\n this._domElement.style.width = `${width}px`;\r\n this._domElement.style.height = `${height}px`;\r\n }\r\n\r\n _renderObject(object, camera, scene) {\r\n function lerpColorAsHex(a, b, t) {\r\n tempColor.setHex(a);\r\n tempColor.lerp(b, t);\r\n return `#${tempColor.getHexString()}`;\r\n }\r\n\r\n function colorAsHex(a) {\r\n tempColor.setHex(a);\r\n return `#${tempColor.getHexString()}`;\r\n }\r\n\r\n if (object instanceof CSS2DObject) {\r\n this._vector.setFromMatrixPosition(object.matrixWorld);\r\n\r\n if (object.userData !== undefined && object.userData.offset !== undefined) {\r\n const localOffset = new THREE.Vector3(object.userData.offset.x, object.userData.offset.y, 0);\r\n this._vector.add(localOffset.multiplyScalar(object.matrixWorld.getMaxScaleOnAxis()));\r\n }\r\n\r\n this._vector.applyMatrix4(this._viewMatrix);\r\n\r\n const visibility = this._vector.z > -camera.near ? 'hidden' : 'visible';\r\n const zIndex = 10000 * (camera.far - (-this._vector.z)) / (camera.far - camera.near);\r\n\r\n const element = object.getElement();\r\n if (typeof scene.fog === 'undefined') {\r\n element.style.color = colorAsHex(object.userData.color);\r\n if (object.userData.background !== 'transparent') {\r\n element.style.background = colorAsHex(object.userData.background);\r\n }\r\n } else {\r\n const fogFactor = THREE.MathUtils.smoothstep(-this._vector.z, scene.fog.near, scene.fog.far);\r\n element.style.color = lerpColorAsHex(object.userData.color, scene.fog.color, fogFactor);\r\n if (object.userData.background !== 'transparent') {\r\n element.style.background = lerpColorAsHex(object.userData.background, scene.fog.color, fogFactor);\r\n }\r\n }\r\n\r\n this._vector.applyMatrix4(this._projectionMatrix);\r\n\r\n const style = `${object.userData !== {} ? object.userData.translation : 'translate(-50%, -50%) '\r\n }translate(${this._vector.x * this._widthHalf + this._widthHalf}px,${\r\n -this._vector.y * this._heightHalf + this._heightHalf}px)`;\r\n element.style.visibility = visibility;\r\n element.style.WebkitTransform = style;\r\n element.style.MozTransform = style;\r\n element.style.oTransform = style;\r\n element.style.transform = style;\r\n element.style.zIndex = Number(zIndex).toFixed(0);\r\n\r\n if (element.parentNode !== this._domElement) {\r\n this._domElement.appendChild(element);\r\n }\r\n }\r\n\r\n for (let i = 0, l = object.children.length; i < l; i++) {\r\n this._renderObject(object.children[i], camera, scene);\r\n }\r\n }\r\n\r\n render(scene, camera) {\r\n scene.updateMatrixWorld();\r\n\r\n if (camera.parent === null) {\r\n camera.updateMatrixWorld();\r\n }\r\n\r\n camera.matrixWorldInverse.copy(camera.matrixWorld).invert();\r\n\r\n this._viewMatrix.copy(camera.matrixWorldInverse);\r\n this._projectionMatrix.copy(camera.projectionMatrix);\r\n\r\n this._renderObject(scene, camera, scene);\r\n }\r\n}\r\nexport default CSS2DRenderer;\r\n","export default function getTopWindow() {\r\n // intercept the exception if we have cross-origin iframe\r\n try {\r\n if (window.top.location.href !== undefined) {\r\n return window.top;\r\n }\r\n } catch (e) {\r\n // provide fallback\r\n }\r\n return window;\r\n}\r\n","import * as THREE from 'three';\r\nimport Timer from '../Timer';\r\nimport settings from '../settings';\r\nimport EventDispatcher from '../utils/EventDispatcher';\r\nimport getTopWindow from '../utils/getTopWindow';\r\n\r\nconst VK_LEFT = 37;\r\nconst VK_UP = 38;\r\nconst VK_RIGHT = 39;\r\nconst VK_DOWN = 40;\r\n\r\nconst STATE = {\r\n NONE: -1, ROTATE: 0, TRANSLATE: 1, SCALE: 2, TRANSLATE_PIVOT: 3,\r\n};\r\n\r\n// pausing for this amount of time before releasing mouse button prevents inertial rotation (seconds)\r\nconst FULL_STOP_THRESHOLD = 0.1;\r\n\r\nconst quaternion = new THREE.Quaternion();\r\nconst matrix4 = new THREE.Matrix4();\r\n\r\n// pivot -- local offset of the rotation pivot point\r\nfunction ObjectHandler(objects, camera, pivot, options) {\r\n this.objects = objects;\r\n [this.object] = objects;\r\n this.camera = camera;\r\n this.pivot = pivot;\r\n this.axis = new THREE.Vector3(0, 0, 1);\r\n this.options = options;\r\n\r\n this.lastRotation = {\r\n axis: new THREE.Vector3(),\r\n angle: 0.0,\r\n };\r\n}\r\n\r\nObjectHandler.prototype._rotate = (function () {\r\n const p = new THREE.Vector3();\r\n const q = new THREE.Quaternion();\r\n const s = new THREE.Vector3();\r\n\r\n const m = new THREE.Matrix4();\r\n\r\n return function (quat) {\r\n const zeroPivot = (this.pivot.x === 0.0 && this.pivot.y === 0.0 && this.pivot.z === 0.0);\r\n\r\n m.copy(this.object.matrix);\r\n\r\n if (zeroPivot) {\r\n m.multiply(matrix4.makeRotationFromQuaternion(quat));\r\n } else {\r\n m.multiply(matrix4.makeTranslation(this.pivot.x, this.pivot.y, this.pivot.z));\r\n m.multiply(matrix4.makeRotationFromQuaternion(quat));\r\n m.multiply(matrix4.makeTranslation(-this.pivot.x, -this.pivot.y, -this.pivot.z));\r\n }\r\n\r\n m.decompose(p, q, s);\r\n\r\n // update objects\r\n if (!zeroPivot) {\r\n for (let i = 0; i < this.objects.length; ++i) {\r\n this.objects[i].position.copy(p);\r\n }\r\n }\r\n\r\n for (let j = 0; j < this.objects.length; ++j) {\r\n this.objects[j].quaternion.copy(q);\r\n this.objects[j].updateMatrix();\r\n }\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.setObjects = function (objects) {\r\n this.objects = objects;\r\n [this.object] = objects;\r\n};\r\n\r\nObjectHandler.prototype.rotate = (function () {\r\n const rot = {\r\n axis: new THREE.Vector3(),\r\n angle: 0.0,\r\n };\r\n\r\n return function (quat, mousePrevPos, mouseCurPos, aboutAxis) {\r\n this.mouse2rotation(rot, mousePrevPos, mouseCurPos, aboutAxis);\r\n quat.setFromAxisAngle(rot.axis, rot.angle);\r\n\r\n if (rot.angle) {\r\n this._rotate(quat);\r\n }\r\n\r\n this.lastRotation = rot;\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.translate = (function () {\r\n const dir = new THREE.Vector3();\r\n const pivot = new THREE.Vector3();\r\n\r\n return function (delta) {\r\n // reverse-project viewport movement to view coords (compensate for screen aspect ratio)\r\n dir.set(\r\n delta.x / this.camera.projectionMatrix.elements[0],\r\n delta.y / this.camera.projectionMatrix.elements[5],\r\n 0,\r\n );\r\n let dist = dir.length();\r\n dir.normalize();\r\n\r\n // transform movement direction to object local coords\r\n dir.transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n // visible translate distance shouldn't depend on camera-to-object distance\r\n pivot.copy(this.pivot);\r\n this.object.localToWorld(pivot);\r\n dist *= Math.abs(pivot.z - this.camera.position.z);\r\n\r\n // visible translate distance shouldn't depend on object scale\r\n dist /= this.object.matrixWorld.getMaxScaleOnAxis();\r\n\r\n // all objects are translated similar to principal object\r\n // (we assume they all have identical pivot and scale)\r\n for (let i = 0; i < this.objects.length; ++i) {\r\n this.objects[i].translateOnAxis(dir, dist);\r\n }\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.update = (function () {\r\n const axis = new THREE.Vector3();\r\n\r\n return function (timeSinceLastUpdate, timeSinceMove) {\r\n if (settings.now.autoRotation !== 0.0) {\r\n // auto-rotation with constant speed\r\n\r\n // if rotation axis is fixed or hasn't been defined yet\r\n if (settings.now.autoRotationAxisFixed || this.lastRotation.axis.length() === 0.0) {\r\n // use Y-axis (transformed to local object coords)\r\n axis.set(0, 1, 0).transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n } else {\r\n // use axis defined by last user rotation\r\n axis.copy(this.lastRotation.axis);\r\n }\r\n\r\n this._rotate(quaternion.setFromAxisAngle(axis, settings.now.autoRotation * timeSinceLastUpdate));\r\n return true;\r\n }\r\n\r\n if (this.options.intertia && this.lastRotation.angle) {\r\n // inertial object rotation\r\n const angle = this.lastRotation.angle * ((1.0 - this.options.dynamicDampingFactor) ** (40.0 * timeSinceMove));\r\n\r\n if (Math.abs(angle) <= this.options.intertiaThreshold) {\r\n this.lastRotation.angle = 0.0;\r\n } else {\r\n this._rotate(quaternion.setFromAxisAngle(this.lastRotation.axis, angle));\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.stop = function () {\r\n this.lastRotation.angle = 0.0;\r\n};\r\n\r\n// calculate (axis, angle) pair from mouse/touch movement\r\nObjectHandler.prototype.mouse2rotation = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n const eye = new THREE.Vector3();\r\n const eyeDirection = new THREE.Vector3();\r\n\r\n const cameraUpDirection = new THREE.Vector3();\r\n const cameraSidewaysDirection = new THREE.Vector3();\r\n\r\n const moveDirection = new THREE.Vector3();\r\n\r\n const mouseDelta = new THREE.Vector2();\r\n\r\n return function (rot, mousePrev, mouseCur, aboutAxis) {\r\n if (aboutAxis) {\r\n rot.axis.copy(this.axis);\r\n rot.angle = this.options.axisRotateFactor * (mouseCur.y - mousePrev.y);\r\n\r\n /* cool method that allows rotation around Z axis to be \"tied\" to mouse cursor\r\n\r\n res.axis.copy(this.axis);\r\n\r\n var pivot = this.pivot.clone();\r\n this.object.localToWorld(pivot);\r\n pivot.project(this.camera);\r\n\r\n var v1 = new THREE.Vector3(mousePrev.x, mousePrev.y, this.camera.position.z);\r\n v1.sub(pivot);\r\n var v2 = new THREE.Vector3(mouseCur.x, mouseCur.y, this.camera.position.z);\r\n v2.sub(pivot);\r\n\r\n v1.sub(res.axis.clone().multiplyScalar(v1.dot(res.axis)));\r\n v2.sub(res.axis.clone().multiplyScalar(v2.dot(res.axis)));\r\n\r\n var abs = v1.length() * v2.length();\r\n if (abs > 0) {\r\n res.angle = res.axis.dot(v1.cross(v2)) / abs;\r\n }\r\n */\r\n } else {\r\n mouseDelta.subVectors(mouseCur, mousePrev);\r\n const angle = mouseDelta.length();\r\n if (angle === 0.0) {\r\n return;\r\n }\r\n\r\n center.copy(this.pivot);\r\n this.object.localToWorld(center);\r\n eye.subVectors(this.camera.position, center);\r\n eyeDirection.copy(eye).normalize();\r\n\r\n cameraUpDirection.copy(this.camera.up).normalize();\r\n cameraSidewaysDirection.crossVectors(cameraUpDirection, eyeDirection).normalize();\r\n\r\n cameraUpDirection.setLength(mouseDelta.y);\r\n cameraSidewaysDirection.setLength(mouseDelta.x);\r\n\r\n moveDirection.copy(cameraUpDirection.add(cameraSidewaysDirection));\r\n\r\n rot.axis.crossVectors(moveDirection, eye);\r\n\r\n rot.angle = -angle * this.options.rotateFactor;\r\n }\r\n\r\n rot.axis.transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n // make sure angle is always positive (thus 'axis' defines both axis and direction of rotation)\r\n if (rot.angle < 0.0) {\r\n rot.axis.negate();\r\n rot.angle = -rot.angle;\r\n }\r\n };\r\n}());\r\n\r\nfunction ObjectControls(object, objectPivot, camera, domElement, getAltObj) {\r\n EventDispatcher.call(this);\r\n const self = this;\r\n\r\n this.object = object;\r\n this.objectPivot = objectPivot;\r\n this.camera = camera;\r\n this.domElement = (typeof domElement !== 'undefined') ? domElement : document;\r\n this.getAltObj = getAltObj;\r\n\r\n // API\r\n\r\n this.enabled = true;\r\n this.hotkeysEnabled = true;\r\n\r\n this.screen = {\r\n left: 0, top: 0, width: 0, height: 0,\r\n };\r\n\r\n this.options = {\r\n rotateFactor: Math.PI, // full screen slide (along short side) would roughly mean 180 deg. rotation\r\n axisRotateFactor: 4 * Math.PI, // full screen slide (along short side) would roughly mean 720 deg. rotation\r\n intertia: true,\r\n dynamicDampingFactor: 0.1,\r\n intertiaThreshold: 1e-3,\r\n };\r\n\r\n // internals\r\n\r\n this._state = STATE.NONE;\r\n\r\n this._mousePrevPos = new THREE.Vector2();\r\n this._mouseCurPos = new THREE.Vector2();\r\n\r\n this._mainObj = new ObjectHandler([this.object], this.camera, new THREE.Vector3(0, 0, 0), this.options);\r\n this._altObj = new ObjectHandler([this.object], this.camera, new THREE.Vector3(0, 0, 0), this.options);\r\n this._affectedObj = this._mainObj;\r\n this._isAltObjFreeRotationAllowed = true;\r\n this._isTranslationAllowed = true;\r\n this._isKeysTranslatingObj = false;\r\n\r\n this._pressedKeys = [];\r\n\r\n this._clock = new Timer();\r\n this._clock.start();\r\n this._lastUpdateTime = this._clock.getElapsedTime();\r\n\r\n // events\r\n this._listeners = [\r\n {\r\n obj: self.domElement,\r\n type: 'mousedown',\r\n handler(e) {\r\n self.mousedown(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseup',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousemove',\r\n handler(e) {\r\n self.mousemove(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousewheel',\r\n handler(e) {\r\n self.mousewheel(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'DOMMouseScroll',\r\n handler(e) {\r\n self.mousewheel(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseout',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchstart',\r\n handler(e) {\r\n self.touchstartend(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchend',\r\n handler(e) {\r\n self.touchstartend(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchmove',\r\n handler(e) {\r\n self.touchmove(e);\r\n },\r\n },\r\n {\r\n obj: self.getKeyBindObject(),\r\n type: 'keydown',\r\n handler(e) {\r\n self.keydownup(e);\r\n },\r\n },\r\n {\r\n obj: self.getKeyBindObject(),\r\n type: 'keyup',\r\n handler(e) {\r\n self.keydownup(e);\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'resize',\r\n handler() {\r\n self.handleResize();\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'blur',\r\n handler() {\r\n self.resetKeys();\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'contextmenu',\r\n handler(e) {\r\n self.contextmenu(e);\r\n },\r\n }];\r\n\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.addEventListener(l.type, l.handler);\r\n }\r\n\r\n this.handleResize();\r\n\r\n this.resetKeys();\r\n\r\n // force an update at start\r\n this.update();\r\n}\r\n\r\n// methods\r\n\r\nObjectControls.prototype = Object.create(EventDispatcher.prototype);\r\nObjectControls.prototype.constructor = ObjectControls;\r\n\r\nObjectControls.prototype.resetKeys = function () {\r\n this._pressedKeys[VK_LEFT] = false;\r\n this._pressedKeys[VK_UP] = false;\r\n this._pressedKeys[VK_RIGHT] = false;\r\n this._pressedKeys[VK_DOWN] = false;\r\n};\r\n\r\nObjectControls.prototype.contextmenu = function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n};\r\n\r\nObjectControls.prototype.handleResize = function () {\r\n if (this.domElement === document) {\r\n this.screen.left = 0;\r\n this.screen.top = 0;\r\n this.screen.width = window.innerWidth;\r\n this.screen.height = window.innerHeight;\r\n } else {\r\n const box = this.domElement.getBoundingClientRect();\r\n // adjustments come from similar code in the jquery offset() function\r\n const d = this.domElement.ownerDocument.documentElement;\r\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\r\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\r\n this.screen.width = box.width;\r\n this.screen.height = box.height;\r\n }\r\n};\r\n\r\nObjectControls.prototype.enable = function (enable) {\r\n this.enabled = enable;\r\n};\r\n\r\nObjectControls.prototype.enableHotkeys = function (enable) {\r\n this.hotkeysEnabled = enable;\r\n};\r\n\r\nObjectControls.prototype.allowTranslation = function (allow) {\r\n this._isTranslationAllowed = allow;\r\n};\r\n\r\nObjectControls.prototype.allowAltObjFreeRotation = function (allow) {\r\n this._isAltObjFreeRotationAllowed = allow;\r\n};\r\n\r\nObjectControls.prototype.keysTranslateObj = function (on) {\r\n this._isKeysTranslatingObj = on;\r\n};\r\n\r\nObjectControls.prototype.isEditingAltObj = function () {\r\n return ((this._state === STATE.ROTATE) || (this._state === STATE.TRANSLATE))\r\n && (this._affectedObj === this._altObj);\r\n};\r\n\r\n// convert page coords of mouse/touch to uniform coords with smaller side being [-0.5, 0.5]\r\n// (uniform coords keep direct proportion with screen distance travelled by mouse regardless of screen aspect ratio)\r\nObjectControls.prototype.convertMouseToOnCircle = function (coords, pageX, pageY) {\r\n const screenSize = Math.min(this.screen.width, this.screen.height);\r\n\r\n if (screenSize === 0) {\r\n coords.set(0, 0);\r\n return;\r\n }\r\n\r\n coords.set(\r\n ((pageX - this.screen.width * 0.5 - this.screen.left) / screenSize),\r\n ((0.5 * this.screen.height + this.screen.top - pageY) / screenSize),\r\n );\r\n};\r\n\r\n// convert page coords of mouse/touch to viewport coords with both sides being [-1, 1]\r\n// (those are non-uniform coords affected by screen aspect ratio)\r\nObjectControls.prototype.convertMouseToViewport = function (coords, pageX, pageY) {\r\n if (this.screen.width === 0 || this.screen.height === 0) {\r\n coords.set(0, 0);\r\n return;\r\n }\r\n\r\n coords.set(\r\n (2.0 * (pageX - this.screen.width * 0.5 - this.screen.left) / this.screen.width),\r\n (2.0 * (0.5 * this.screen.height + this.screen.top - pageY) / this.screen.height),\r\n );\r\n};\r\n\r\nObjectControls.prototype.stop = function () {\r\n this._mainObj.stop();\r\n this._altObj.stop();\r\n};\r\n\r\n// rotate object based on latest mouse/touch movement\r\nObjectControls.prototype.rotateByMouse = (function () {\r\n const quat = new THREE.Quaternion();\r\n\r\n return function (aboutZAxis) {\r\n this._affectedObj.rotate(quat, this._mousePrevPos, this._mouseCurPos, aboutZAxis);\r\n this.dispatchEvent({ type: 'change', action: 'rotate', quaternion: quat });\r\n };\r\n}());\r\n\r\n// rotate object by specified quaternion\r\nObjectControls.prototype.rotate = function (quat) {\r\n this.object.quaternion.multiply(quat);\r\n this.dispatchEvent({ type: 'change', action: 'rotate', quaternion: quat });\r\n};\r\n\r\n// get object's orientation\r\nObjectControls.prototype.getOrientation = function () {\r\n return this.object.quaternion;\r\n};\r\n\r\n// set object's orientation\r\nObjectControls.prototype.setOrientation = function (quat) {\r\n this.object.quaternion.copy(quat);\r\n};\r\n\r\n// translate object based on latest mouse/touch movement\r\nObjectControls.prototype.translate = (function () {\r\n const delta = new THREE.Vector2();\r\n return function () {\r\n delta.subVectors(this._mouseCurPos, this._mousePrevPos);\r\n this._affectedObj.translate(delta);\r\n this.dispatchEvent({ type: 'change', action: 'translate' });\r\n };\r\n}());\r\n\r\n// get object scale\r\nObjectControls.prototype.getScale = function () {\r\n return this.object.scale.x;\r\n};\r\n\r\n// set uniform object scale\r\nObjectControls.prototype.setScale = function (scale) {\r\n this.object.scale.set(scale, scale, scale);\r\n};\r\n\r\n// scale object by factor (factor should be greater than zero)\r\nObjectControls.prototype.scale = function (factor) {\r\n if (factor <= 0) {\r\n return;\r\n }\r\n this.setScale(this.object.scale.x * factor);\r\n this.dispatchEvent({ type: 'change', action: 'zoom', factor });\r\n};\r\n\r\nObjectControls.prototype.update = (function () {\r\n const shift = new THREE.Vector2();\r\n\r\n return function () {\r\n const curTime = this._clock.getElapsedTime();\r\n const timeSinceLastUpdate = curTime - this._lastUpdateTime;\r\n\r\n // update object handler\r\n if (this._state === STATE.NONE) {\r\n const timeSinceMove = curTime - this._lastMouseMoveTime;\r\n if (this._mainObj.update(timeSinceLastUpdate, timeSinceMove)\r\n || this._altObj.update(timeSinceLastUpdate, timeSinceMove)) {\r\n this.dispatchEvent({ type: 'change', action: 'auto' });\r\n }\r\n }\r\n\r\n // apply arrow keys\r\n if (this._isKeysTranslatingObj) {\r\n const speedX = Number(this._pressedKeys[VK_RIGHT]) - Number(this._pressedKeys[VK_LEFT]);\r\n const speedY = Number(this._pressedKeys[VK_UP]) - Number(this._pressedKeys[VK_DOWN]);\r\n if (speedX !== 0.0 || speedY !== 0.0) {\r\n const delta = timeSinceLastUpdate;\r\n\r\n // update object translation\r\n const altObj = this.getAltObj();\r\n if (altObj.objects.length > 0) {\r\n this._altObj.setObjects(altObj.objects);\r\n this._altObj.pivot = altObj.pivot;\r\n\r\n if ('axis' in altObj) {\r\n this._altObj.axis = altObj.axis.clone();\r\n } else {\r\n this._altObj.axis.set(0, 0, 1);\r\n }\r\n\r\n shift.set(delta * speedX, delta * speedY);\r\n this._altObj.translate(shift);\r\n this.dispatchEvent({ type: 'change', action: 'translate' });\r\n }\r\n }\r\n }\r\n\r\n this._lastUpdateTime = curTime;\r\n };\r\n}());\r\n\r\nObjectControls.prototype.reset = function () {\r\n this._state = STATE.NONE;\r\n\r\n this.object.quaternion.copy(quaternion.set(0, 0, 0, 1));\r\n};\r\n\r\n// listeners\r\n\r\nObjectControls.prototype.mousedown = function (event) {\r\n if (this.enabled === false || this._state !== STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this._state === STATE.NONE) {\r\n if (event.button === 0) {\r\n this._affectedObj.stop(); // can edit only one object at a time\r\n\r\n let workWithAltObj = false;\r\n\r\n if (event.altKey) {\r\n const altObj = this.getAltObj();\r\n workWithAltObj = (altObj.objects.length > 0);\r\n if (workWithAltObj) {\r\n this._altObj.setObjects(altObj.objects);\r\n this._altObj.pivot = altObj.pivot;\r\n\r\n if ('axis' in altObj) {\r\n this._altObj.axis = altObj.axis.clone();\r\n } else {\r\n this._altObj.axis.set(0, 0, 1);\r\n }\r\n }\r\n }\r\n\r\n this._affectedObj = workWithAltObj ? this._altObj : this._mainObj;\r\n\r\n this._state = (workWithAltObj && event.ctrlKey && this._isTranslationAllowed) ? STATE.TRANSLATE : STATE.ROTATE;\r\n } else if (event.button === 2) {\r\n this._state = STATE.TRANSLATE_PIVOT;\r\n }\r\n }\r\n\r\n if (this._state === STATE.ROTATE) {\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.pageX, event.pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n }\r\n\r\n if (this._state === STATE.TRANSLATE || this._state === STATE.TRANSLATE_PIVOT) {\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n }\r\n};\r\n\r\nObjectControls.prototype.mousemove = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (this._state) {\r\n case STATE.ROTATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.pageX, event.pageY);\r\n this.rotateByMouse((event.altKey && !this._isAltObjFreeRotationAllowed) || event.shiftKey);\r\n this._lastMouseMoveTime = this._clock.getElapsedTime();\r\n break;\r\n\r\n case STATE.TRANSLATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this.translate();\r\n break;\r\n\r\n case STATE.TRANSLATE_PIVOT:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this.translatePivotByMouse();\r\n break;\r\n\r\n default: break;\r\n }\r\n};\r\n\r\nObjectControls.prototype.mousewheel = function (event) {\r\n if (this.enabled === false || !settings.now.zooming || this._state !== STATE.NONE || event.shiftKey) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n let delta = 0;\r\n\r\n if (event.wheelDelta) {\r\n // WebKit / Opera / Explorer 9\r\n delta = event.wheelDelta / 40;\r\n } else if (event.detail) {\r\n // Firefox\r\n delta = -event.detail / 3;\r\n }\r\n\r\n let factor = 1.0 + delta * 0.05;\r\n factor = Math.max(factor, 0.01);\r\n this.scale(factor);\r\n};\r\n\r\nObjectControls.prototype.mouseup = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this._state = STATE.NONE;\r\n\r\n if (this._clock.getElapsedTime() - this._lastMouseMoveTime > FULL_STOP_THRESHOLD) {\r\n this._affectedObj.stop();\r\n }\r\n};\r\n\r\nObjectControls.prototype.touchstartend = function (event) {\r\n if (this.enabled === false) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (event.touches.length) {\r\n case 1:\r\n this._state = STATE.ROTATE;\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.touches[0].pageX, event.touches[0].pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n break;\r\n\r\n case 2: {\r\n // prevent inertial rotation\r\n this._mainObj.stop();\r\n this._altObj.stop();\r\n\r\n this._state = STATE.SCALE;\r\n const dx = event.touches[0].pageX - event.touches[1].pageX;\r\n const dy = event.touches[0].pageY - event.touches[1].pageY;\r\n this._touchDistanceCur = this._touchDistanceStart = Math.sqrt(dx * dx + dy * dy);\r\n this._scaleStart = this.object.scale.x;\r\n break;\r\n }\r\n\r\n default:\r\n this._state = STATE.NONE;\r\n }\r\n};\r\n\r\nObjectControls.prototype.touchmove = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (this._state) {\r\n case STATE.ROTATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.touches[0].pageX, event.touches[0].pageY);\r\n this.rotateByMouse(false);\r\n\r\n this._lastMouseMoveTime = this._clock.getElapsedTime();\r\n break;\r\n\r\n case STATE.SCALE:\r\n if (settings.now.zooming) {\r\n // update scale\r\n const dx = event.touches[0].pageX - event.touches[1].pageX;\r\n const dy = event.touches[0].pageY - event.touches[1].pageY;\r\n this._touchDistanceCur = Math.sqrt(dx * dx + dy * dy);\r\n const newScale = this._scaleStart * this._touchDistanceCur / this._touchDistanceStart;\r\n const factor = newScale / this.object.scale.x;\r\n this.scale(factor);\r\n }\r\n break;\r\n\r\n default:\r\n }\r\n};\r\n\r\nObjectControls.prototype.keydownup = function (event) {\r\n if (this.enabled === false || this.hotkeysEnabled === false) {\r\n return;\r\n }\r\n\r\n switch (event.keyCode) {\r\n case VK_LEFT:\r\n case VK_UP:\r\n case VK_RIGHT:\r\n case VK_DOWN:\r\n this._pressedKeys[event.keyCode] = (event.type === 'keydown');\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n default:\r\n }\r\n};\r\n\r\nObjectControls.prototype.getKeyBindObject = function () {\r\n return getTopWindow();\r\n};\r\n\r\nObjectControls.prototype.dispose = function () {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.removeEventListener(l.type, l.handler);\r\n }\r\n};\r\n\r\nObjectControls.prototype.translatePivotByMouse = (function () {\r\n const delta = new THREE.Vector2();\r\n return function () {\r\n delta.subVectors(this._mouseCurPos, this._mousePrevPos);\r\n this.translatePivotInWorld(settings.now.translationSpeed * delta.x, settings.now.translationSpeed * delta.y, 0);\r\n };\r\n}());\r\n\r\n// Translate in WorldCS, translation is scaled with root scale matrix\r\nObjectControls.prototype.translatePivotInWorld = function (x, y, z) {\r\n const pos = this.objectPivot.position;\r\n pos.applyMatrix4(this.object.matrixWorld);\r\n pos.setX(pos.x + x);\r\n pos.setY(pos.y + y);\r\n pos.setZ(pos.z + z);\r\n pos.applyMatrix4(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\n// Translate in ModelCS, x, y, z are Ang\r\nObjectControls.prototype.translatePivot = function (x, y, z) {\r\n const pos = this.objectPivot.position;\r\n pos.setX(pos.x + x);\r\n pos.setY(pos.y + y);\r\n pos.setZ(pos.z + z);\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\n// Set pivot\r\nObjectControls.prototype.setPivot = function (newPivot) {\r\n this.objectPivot.position.copy(newPivot);\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\nexport default ObjectControls;\r\n","import * as THREE from 'three';\r\nimport settings from '../settings';\r\nimport Timer from '../Timer';\r\nimport EventDispatcher from '../utils/EventDispatcher';\r\n\r\nfunction Picker(gfxObj, camera, domElement) {\r\n EventDispatcher.call(this);\r\n const self = this;\r\n\r\n this.gfxObj = gfxObj;\r\n this.camera = camera;\r\n this.domElement = (typeof domElement !== 'undefined') ? domElement : document;\r\n this.screen = {\r\n left: 0, top: 0, width: 0, height: 0,\r\n };\r\n this._lastMousePos = new THREE.Vector2(0, 0);\r\n this._mouseTotalDist = 0.0;\r\n this._lastClickBeginTime = -1000.0;\r\n this._lastClickPos = new THREE.Vector2(0, 0);\r\n this._clickBeginTime = 0.0;\r\n\r\n this._clock = new Timer();\r\n this._clock.start();\r\n\r\n this._listeners = [\r\n {\r\n obj: self.domElement,\r\n type: 'mousedown',\r\n handler(e) {\r\n self.mousedown(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseup',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousemove',\r\n handler(e) {\r\n self.mousemove(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchstart',\r\n handler(e) {\r\n self.touchstart(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchend',\r\n handler(e) {\r\n self.touchend(e);\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'resize',\r\n handler() {\r\n self.handleResize();\r\n },\r\n }];\r\n\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.addEventListener(l.type, l.handler);\r\n }\r\n\r\n this.handleResize();\r\n}\r\n\r\nPicker.prototype = Object.create(EventDispatcher.prototype);\r\nPicker.prototype.constructor = Picker;\r\n\r\nPicker.prototype.reset = function () {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n};\r\n\r\nPicker.prototype.handleResize = function () {\r\n if (this.domElement === document) {\r\n this.screen.left = 0;\r\n this.screen.top = 0;\r\n this.screen.width = window.innerWidth;\r\n this.screen.height = window.innerHeight;\r\n } else {\r\n const box = this.domElement.getBoundingClientRect();\r\n // adjustments come from similar code in the jquery offset() function\r\n const d = this.domElement.ownerDocument.documentElement;\r\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\r\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\r\n this.screen.width = box.width;\r\n this.screen.height = box.height;\r\n }\r\n};\r\n\r\nPicker.prototype.pickObject = function (screenPos) {\r\n if (!this.gfxObj) {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n return;\r\n }\r\n\r\n const { gfxObj } = this;\r\n const rayCaster = new THREE.Raycaster();\r\n rayCaster.ray.origin.setFromMatrixPosition(this.camera.matrixWorld);\r\n rayCaster.ray.direction.set(screenPos.x, screenPos.y, 0.5).unproject(this.camera).sub(rayCaster.ray.origin).normalize();\r\n\r\n const clipPlane = (settings.now.draft.clipPlane && this.clipPlaneValue) ? this.clipPlaneValue : Infinity;\r\n const fogFarPlane = (settings.now.fog && this.fogFarValue) ? this.fogFarValue : Infinity;\r\n const point = rayCaster.intersectVisibleObject(gfxObj, this.camera, clipPlane, fogFarPlane);\r\n if (!point) {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n return;\r\n }\r\n\r\n let picked = {};\r\n if (point.residue || point.atom) {\r\n const residue = point.residue || point.atom.residue;\r\n if (settings.now.pick === 'chain') {\r\n picked = { chain: residue.getChain() };\r\n } else if (settings.now.pick === 'molecule') {\r\n picked = { molecule: residue.getMolecule() };\r\n } else if (point.residue || settings.now.pick === 'residue') {\r\n picked = { residue };\r\n } else if (point.atom) {\r\n picked = { atom: point.atom };\r\n }\r\n }\r\n this.picked = picked;\r\n this.dispatchEvent({ type: 'newpick', obj: picked });\r\n};\r\n\r\nPicker.prototype.getMouseInViewport = function (pageX, pageY) {\r\n return new THREE.Vector2(\r\n (pageX - this.screen.left) / this.screen.width * 2 - 1,\r\n -(pageY - this.screen.top) / this.screen.height * 2 + 1,\r\n );\r\n};\r\n\r\nPicker.prototype.mousedown = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.button === 0) {\r\n this._lastMousePos = this.getMouseInViewport(event.pageX, event.pageY);\r\n this._mouseTotalDist = 0.0;\r\n this._clickBeginTime = this._clock.getElapsedTime();\r\n }\r\n};\r\n\r\nPicker.prototype.mousemove = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const pos = this.getMouseInViewport(event.pageX, event.pageY);\r\n this._mouseTotalDist += pos.sub(this._lastMousePos).length();\r\n};\r\n\r\nPicker.prototype.mouseup = function (event) {\r\n const self = this;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.button === 0) {\r\n if (this._mouseTotalDist < 0.01) {\r\n const curTime = this._clock.getElapsedTime();\r\n const curPos = this.getMouseInViewport(event.pageX, event.pageY);\r\n\r\n const timeSinceLastClickBegin = curTime - this._lastClickBeginTime;\r\n if (timeSinceLastClickBegin < 0.7) {\r\n const clickDist = new THREE.Vector2().subVectors(curPos, this._lastClickPos);\r\n if (clickDist.length() < 0.01) {\r\n // it's a double click\r\n this.dispatchEvent({ type: 'dblclick', obj: this.picked });\r\n\r\n this._lastClickPos = curPos;\r\n this._lastClickBeginTime = -1000; // this click cannot serve as first click in double-click\r\n return;\r\n }\r\n }\r\n\r\n setTimeout(() => {\r\n self.pickObject(curPos);\r\n }, 0);\r\n\r\n this._lastClickPos = curPos;\r\n this._lastClickBeginTime = this._clickBeginTime;\r\n }\r\n }\r\n};\r\n\r\nPicker.prototype.touchstart = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.touches.length === 1) {\r\n this._lastTouchdownPos = this.getMouseInViewport(event.touches[0].pageX, event.touches[0].pageY);\r\n }\r\n};\r\n\r\nPicker.prototype.touchend = function (event) {\r\n const self = this;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.touches.length === 0\r\n && event.changedTouches.length === 1) {\r\n const pos = this.getMouseInViewport(event.changedTouches[0].pageX, event.changedTouches[0].pageY);\r\n const dist = pos.sub(this._lastTouchdownPos).length();\r\n if (dist < 0.01) {\r\n setTimeout(() => {\r\n self.pickObject(self._lastTouchdownPos);\r\n }, 0);\r\n }\r\n }\r\n};\r\n\r\nPicker.prototype.dispose = function () {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.removeEventListener(l.type, l.handler);\r\n }\r\n};\r\n\r\nexport default Picker;\r\n","import * as THREE from 'three';\r\n\r\nclass Axes {\r\n constructor(target, targetCamera) {\r\n this._target = target;\r\n this._targetCamera = targetCamera;\r\n this._camera = new THREE.PerspectiveCamera(targetCamera.fov, targetCamera.aspect, 1, 100);\r\n this._object = new THREE.AxesHelper(1);\r\n this._scene = new THREE.Scene();\r\n this._scene.add(this._object);\r\n this._full = new THREE.Vector2();\r\n\r\n this._update();\r\n }\r\n\r\n _update() {\r\n const { fov } = this._targetCamera;\r\n const camera = this._camera;\r\n camera.aspect = this._targetCamera.aspect;\r\n camera.setMinimalFov(fov);\r\n camera.setDistanceToFit(1.0, fov);\r\n camera.updateProjectionMatrix();\r\n\r\n this._object.quaternion.copy(this._target.quaternion);\r\n }\r\n\r\n render(renderer) {\r\n this._update();\r\n\r\n renderer.getSize(this._full);\r\n const width = this._full.width * 0.25;\r\n const height = this._full.height * 0.25;\r\n\r\n const { autoClear } = renderer;\r\n renderer.autoClear = false;\r\n renderer.setViewport(0.0, 0.0, width, height);\r\n renderer.clear(false, true, false);\r\n renderer.render(this._scene, this._camera);\r\n renderer.setViewport(0, 0, this._full.width, this._full.height);\r\n renderer.autoClear = autoClear;\r\n }\r\n}\r\nexport default Axes;\r\n","import * as THREE from 'three';\r\nimport SecondaryStructureColorer from './colorers/SecondaryStructureColorer';\r\n\r\nconst cDataOffset = 12;\r\nconst cFirstMask = 0x0FFFFF00;\r\nconst cFirstShift = 8;\r\nconst cSecMask1 = 0x000000FF;\r\nconst cSecShift1 = 12;\r\nconst cSecMask2 = 0xFFF00000;\r\nconst cSecShift2 = 20;\r\nconst cThirdMask = 0x000FFFFF;\r\nconst cStrMask = 0xF0000000;\r\nconst cStrShift = 28;\r\nconst c219 = 1 << 19;\r\nconst c220 = 1 << 20;\r\n\r\nconst cHelixIdx = 1;\r\nconst cSheetIdx = 2;\r\nconst secTypes = ['helix', 'strand'];\r\nconst cSecNames = ['fs', 'ps', 'ns', 'us'];\r\n\r\nfunction _createSecondary(strArray, complex) {\r\n const residues = complex._residues;\r\n const nRes = residues.length;\r\n const resid = new Uint8Array(nRes);\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, n = strArray.length; i < n; ++i) {\r\n const atom = atoms[i];\r\n resid[atom.residue._index] = strArray[i];\r\n }\r\n\r\n const secondary = [];\r\n let rIdx = 0;\r\n while (rIdx < nRes) {\r\n if (resid[rIdx] !== 0) {\r\n const start = rIdx;\r\n const val = resid[rIdx];\r\n while (rIdx < nRes - 1 && resid[rIdx + 1] === val\r\n && residues[rIdx].isConnected(residues[rIdx + 1])) {\r\n ++rIdx;\r\n }\r\n secondary.push({ start, end: rIdx, type: secTypes[val - 1] });\r\n }\r\n ++rIdx;\r\n }\r\n return secondary;\r\n}\r\n\r\nfunction fromUInt20ToInt20(uint20) {\r\n return uint20 >= c219 ? uint20 - c220 : uint20;\r\n}\r\n\r\nclass FrameInfo {\r\n constructor(complex, payload, callbacks) {\r\n this._complex = complex;\r\n this._secondary = null;\r\n this.isLoading = false;\r\n this._framesRange = {\r\n start: 0,\r\n end: -1,\r\n };\r\n this.frameIsReady = false;\r\n this._buffer = null;\r\n this._frameRequest = null;\r\n this._callbacks = callbacks;\r\n if (typeof payload === 'function') {\r\n this._framesRequestLength = 1;\r\n this._downloadDataFn = payload;\r\n } else {\r\n this.parseBinaryData(payload, true);\r\n }\r\n this.reset();\r\n this.setFrame(0);\r\n }\r\n\r\n _prepareBuffer(framesStart, framesEnd) {\r\n if (framesStart === undefined || framesStart === null) {\r\n framesStart = 0;\r\n }\r\n if (framesEnd === undefined || framesEnd === null) {\r\n framesEnd = framesStart + this._framesRequestLength;\r\n }\r\n if (this._framesCount !== undefined) {\r\n framesEnd = Math.min(this._framesCount - 1, framesEnd);\r\n }\r\n if (this._downloadDataFn) {\r\n const self = this;\r\n const onDone = function (data) {\r\n self.isLoading = false;\r\n if (self._callbacks && typeof self._callbacks.onLoadStatusChanged === 'function') {\r\n self._callbacks.onLoadStatusChanged();\r\n }\r\n self._buffer = {\r\n data,\r\n state: 'ready',\r\n start: framesStart,\r\n end: framesEnd,\r\n };\r\n if (self._frameRequest !== null) {\r\n const idx = self._frameRequest;\r\n self._frameRequest = null;\r\n self.setFrame(idx);\r\n }\r\n };\r\n const onFail = function () {\r\n self.isLoading = false;\r\n if (self._callbacks && typeof self._callbacks.onError === 'function') {\r\n self._callbacks.onError('Streaming failed');\r\n }\r\n };\r\n if (!this._buffer) {\r\n this._buffer = {};\r\n }\r\n this._buffer.state = 'downloading';\r\n this.isLoading = true;\r\n if (self._callbacks && typeof self._callbacks.onLoadStatusChanged === 'function') {\r\n self._callbacks.onLoadStatusChanged();\r\n }\r\n this._downloadDataFn({ start: framesStart, end: framesEnd + 1 }, onDone, onFail);\r\n }\r\n }\r\n\r\n _parseBuffer() {\r\n if (this._buffer && this._buffer.state === 'ready') {\r\n this._framesRange = {\r\n start: this._buffer.start,\r\n end: this._buffer.end,\r\n };\r\n this.parseBinaryData(this._buffer.data, false);\r\n let _bufferRequestStart = (this._buffer.end + 1) % this._framesCount;\r\n if (_bufferRequestStart >= this._framesCount) {\r\n _bufferRequestStart = 0;\r\n }\r\n this._buffer = {\r\n state: 'none',\r\n };\r\n this._prepareBuffer(_bufferRequestStart, _bufferRequestStart + this._framesRequestLength);\r\n if (this._frameRequest !== null) {\r\n const idx = this._frameRequest;\r\n this._frameRequest = null;\r\n this.setFrame(idx);\r\n }\r\n }\r\n }\r\n\r\n parseBinaryData(arrayBuffer) {\r\n const dataView = new DataView(arrayBuffer);\r\n let offset = 0;\r\n const atomsCount = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const framesCount = dataView.getUint32(offset, true);\r\n this._framesCount = framesCount;\r\n this._framesRange.end = this._framesRange.end > 0\r\n ? Math.min(this._framesRange.end, framesCount - 1) : framesCount - 1;\r\n offset += 4;\r\n this._atomsCount = atomsCount;\r\n const maxSize = 1024 * 1024; // 1 MB\r\n this._framesRequestLength = Math.ceil(maxSize / (atomsCount * 8));\r\n const chunkedFramesCount = this._framesRange.end - this._framesRange.start + 1;\r\n if (atomsCount !== this._complex._atoms.length\r\n || arrayBuffer.byteLength !== cDataOffset + chunkedFramesCount * atomsCount * 8) {\r\n throw new Error();\r\n }\r\n const complex = this._complex;\r\n let timeStep = dataView.getUint32(offset, true);\r\n let iName = 0;\r\n while (timeStep > 1000 && iName < cSecNames.length - 1) {\r\n timeStep /= 1000;\r\n ++iName;\r\n }\r\n\r\n this._timeStep = `${timeStep.toString()} ${cSecNames[iName]}`;\r\n offset += 4;\r\n const secondary = [];\r\n const posData = new Float32Array(chunkedFramesCount * atomsCount * 3);\r\n let coordIdx = 0;\r\n const secondaryArr = new Int8Array(atomsCount);\r\n for (let j = 0; j < chunkedFramesCount; ++j) {\r\n for (let i = 0; i < atomsCount; ++i) {\r\n const hiWord = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const loWord = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const str = (loWord & cStrMask) >>> cStrShift;\r\n const x = fromUInt20ToInt20(((loWord & cFirstMask) >>> cFirstShift) >> 0);\r\n const y = fromUInt20ToInt20((((loWord & cSecMask1) << cSecShift1)\r\n | ((hiWord & cSecMask2) >>> cSecShift2)) >> 0);\r\n const z = fromUInt20ToInt20((hiWord & cThirdMask) >> 0);\r\n secondaryArr[i] = 0;\r\n if (str > 0 && str < 4) {\r\n secondaryArr[i] = cHelixIdx;\r\n } else if (str === 4) {\r\n secondaryArr[i] = cSheetIdx;\r\n }\r\n posData[coordIdx++] = x / 100;\r\n posData[coordIdx++] = y / 100;\r\n posData[coordIdx++] = z / 100;\r\n }\r\n secondary.push(_createSecondary(secondaryArr, complex));\r\n }\r\n this._secondaryData = secondary;\r\n this._data = posData;\r\n }\r\n\r\n nextFrame() {\r\n this.setFrame((this._currFrame + 1) % this._framesCount);\r\n }\r\n\r\n needsColorUpdate(colorer) {\r\n return colorer instanceof SecondaryStructureColorer;\r\n }\r\n\r\n getAtomColor(colorer, atom) {\r\n return colorer.getResidueColor(this._residues[atom.residue._index], this._complex);\r\n }\r\n\r\n getResidueColor(colorer, residue) {\r\n return colorer.getResidueColor(this._residues[residue._index], this._complex);\r\n }\r\n\r\n _updateSecondary() {\r\n let i;\r\n const myResidues = this._residues;\r\n let n = myResidues.length;\r\n for (i = 0; i < n; ++i) {\r\n myResidues[i]._secondary = null;\r\n }\r\n const sec = this._secondaryData[this._currFrame - this._framesRange.start];\r\n for (i = 0, n = sec.length; i < n; ++i) {\r\n const oldSec = sec[i];\r\n const { start, end } = oldSec;\r\n const nSec = {\r\n _start: myResidues[start],\r\n _end: myResidues[end],\r\n type: oldSec.type,\r\n generic: oldSec.generic,\r\n };\r\n for (let j = start; j <= end; ++j) {\r\n myResidues[j]._secondary = nSec;\r\n }\r\n }\r\n }\r\n\r\n reset() {\r\n const compRes = this._complex._residues;\r\n const n = compRes.length;\r\n this._residues = new Array(n);\r\n const myResidues = this._residues;\r\n const getSec = function () {\r\n return this._secondary;\r\n };\r\n for (let i = 0; i < n; ++i) {\r\n myResidues[i] = {\r\n _type: compRes[i]._type,\r\n _isValid: compRes[i]._isValid,\r\n _controlPoint: null,\r\n _wingVector: null,\r\n _secondary: null,\r\n getSecondary: getSec,\r\n };\r\n }\r\n }\r\n\r\n setFrame(frameIdx) {\r\n this.frameIsReady = false;\r\n if (frameIdx >= this._framesRange.start && frameIdx <= this._framesRange.end) {\r\n this._currFrame = frameIdx;\r\n this._cachedResidues = false;\r\n this._updateSecondary();\r\n this.frameIsReady = true;\r\n } else {\r\n this._frameRequest = frameIdx;\r\n if (!this._buffer) {\r\n this._prepareBuffer(frameIdx);\r\n } else {\r\n const self = this;\r\n switch (this._buffer.state) {\r\n case 'none':\r\n this._prepareBuffer(frameIdx);\r\n break;\r\n case 'ready':\r\n self._parseBuffer();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n disableEvents() {\r\n this._callbacks = null;\r\n }\r\n\r\n /**\r\n * Returns link to atom pos vector, clone it if needed\r\n */\r\n\r\n static _vec = new THREE.Vector3();\r\n\r\n getAtomPos(atomIdx) {\r\n const vec = FrameInfo._vec;\r\n const self = this;\r\n const data = self._data;\r\n const idx = (self._atomsCount * (self._currFrame - self._framesRange.start) + atomIdx) * 3;\r\n vec.set(data[idx], data[idx + 1], data[idx + 2]);\r\n return vec;\r\n }\r\n\r\n getResidues() {\r\n if (this._cachedResidues) {\r\n return this._residues;\r\n }\r\n this._complex.updateToFrame(this);\r\n return this._residues;\r\n }\r\n}\r\nexport default FrameInfo;\r\n","import _ from 'lodash';\r\nimport settings from '../../settings';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\n\r\n/**\r\n * Create new scene object.\r\n *\r\n * @param {array=} params - Object required params.\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the colorer after its creation.\r\n *\r\n * @exports SceneObject\r\n * @this SceneObject\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all scene objects that are not reps.\r\n */\r\nclass SceneObject {\r\n constructor(params, opts) {\r\n if (this.constructor === SceneObject) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Object's options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.params = params;\r\n this.opts = _.merge(utils.deriveDeep(settings.now.objects[this.type], true), opts);\r\n this.needsRebuild = false;\r\n this._mesh = null;\r\n this.id = null;\r\n }\r\n\r\n /**\r\n * Get object identification, probably with options.\r\n * @returns {Object} field type contains type information, params - object's formal parameters,\r\n * opts - changed options\r\n * Options are returned if they were changed during or after object creation.\r\n */\r\n identify() {\r\n const result = {\r\n type: this.type,\r\n params: this.params,\r\n };\r\n const diff = utils.objectsDiff(this.opts, settings.now.modes[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n result.opts = diff;\r\n }\r\n return result;\r\n }\r\n\r\n toString() {\r\n const paramsStr = `o=${this.type},${this.params.join(',')}`;\r\n const optsStr = utils.compareOptionsWithDefaults(this.opts, settings.defaults.objects[this.type]);\r\n return paramsStr + optsStr;\r\n }\r\n\r\n getGeometry() {\r\n return this._mesh;\r\n }\r\n\r\n destroy() {\r\n if (this._mesh) {\r\n gfxutils.destroyObject(this._mesh);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Scene object identifier.\r\n * @type {string}\r\n */\r\nSceneObject.prototype.type = '__';\r\n\r\nexport default SceneObject;\r\n","import * as THREE from 'three';\r\nimport SceneObject from './SceneObject';\r\nimport meshutils from '../meshutils';\r\nimport UberMaterial from '../shaders/UberMaterial';\r\nimport meshes from '../meshes/meshes';\r\nimport settings from '../../settings';\r\n\r\nclass LinesObj extends SceneObject {\r\n constructor(params, opts) {\r\n super(params, opts);\r\n if (params.length < 2) {\r\n throw new Error('Wrong number of argumets on line object creation!');\r\n }\r\n [this._id1, this._id2] = params;\r\n }\r\n\r\n _getAtomFromName(complex, atomId) {\r\n const err = ' - Wrong atom format it must be \\'#CHAIN_NAME.#RESIDUE_NUMBER.#ATOM_NAME\\' (e.g. \\'A.38.CO1\\')';\r\n const atom1 = complex.getAtomByFullname(atomId);\r\n if (!atom1) {\r\n throw new Error(atomId + err);\r\n }\r\n return atom1;\r\n }\r\n\r\n build(complex) {\r\n const geom = new THREE.BufferGeometry();\r\n this._atom1 = this._getAtomFromName(complex, this._id1);\r\n this._atom2 = this._getAtomFromName(complex, this._id2);\r\n\r\n const p1 = this._atom1.position;\r\n const p2 = this._atom2.position;\r\n const vertices = new Float32Array([\r\n p1.x, p1.y, p1.z,\r\n p2.x, p2.y, p2.z,\r\n ]);\r\n\r\n geom.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n geom.computeBoundingBox();\r\n\r\n this._line = new meshes.Line(geom, new UberMaterial({\r\n lights: false,\r\n overrideColor: true,\r\n dashedLine: true,\r\n fogTransparent: settings.now.bg.transparent,\r\n }));\r\n this._line.computeLineDistances();\r\n this._line.material.setUberOptions({\r\n fixedColor: new THREE.Color(this.opts.color),\r\n dashedLineSize: this.opts.dashSize,\r\n dashedLinePeriod: this.opts.dashSize + this.opts.gapSize,\r\n });\r\n this._line.material.updateUniforms();\r\n\r\n this._line.raycast = function (_raycaster, _intersects) {};\r\n this._mesh = this._line;\r\n const transforms = complex.getTransforms();\r\n if (transforms.length > 0) {\r\n this._mesh = new THREE.Group();\r\n this._mesh.add(this._line);\r\n meshutils.applyTransformsToMeshes(this._mesh, transforms);\r\n }\r\n }\r\n\r\n updateToFrame(frameData) {\r\n if (!this._atom1 || !this._atom2 || !this._line) {\r\n return;\r\n }\r\n\r\n const geo = this._line.geometry;\r\n geo.vertices[0].copy(frameData.getAtomPos(this._atom1.index));\r\n geo.vertices[1].copy(frameData.getAtomPos(this._atom2.index));\r\n this._line.computeLineDistances();\r\n geo.computeBoundingSphere();\r\n\r\n geo.verticesNeedUpdate = true;\r\n }\r\n}\r\n\r\nLinesObj.prototype.constructor = LinesObj;\r\nLinesObj.prototype.type = 'line';\r\n\r\nexport default LinesObj;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './Outline.frag';\r\n\r\nclass OutlineMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n // add depth outline\r\n super(params);\r\n\r\n const settings = {\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n srcDepthTex: { type: 't', value: null },\r\n srcTexSize: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n color: { type: 'v3', value: null },\r\n threshold: { type: 'f', value: null },\r\n opacity: { type: 'f', value: 1.0 },\r\n thickness: { type: 'v2', value: new THREE.Vector2(1, 1) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: true,\r\n depthTest: false,\r\n depthWrite: false,\r\n };\r\n\r\n this.setValues(settings);\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n this.depth = source.depth;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n const defines = {};\r\n\r\n if (this.depth) {\r\n defines.DEPTH_OUTLINE = 1;\r\n }\r\n\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nOutlineMaterial.prototype.depth = false;\r\n\r\nexport default OutlineMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './FXAA.frag';\r\n\r\nclass FXAAMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n bgColor: { type: 'c', value: new THREE.Color(0xffffff) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n this.depth = source.depth;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n\r\n if (this.bgTransparent) {\r\n defines.BG_TRANSPARENT = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nFXAAMaterial.prototype.bgTransparent = false;\r\n\r\nexport default FXAAMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AO.frag';\r\nimport noise from '../noiseTexture';\r\n\r\nconst _samplesKernel = [\r\n // hemisphere samples adopted to sphere\r\n new THREE.Vector3(0.295184, 0.077723, 0.068429),\r\n new THREE.Vector3(-0.271976, -0.365221, 0.838363),\r\n new THREE.Vector3(0.547713, 0.467576, 0.488515),\r\n new THREE.Vector3(0.662808, -0.031733, 0.584758),\r\n new THREE.Vector3(-0.025717, 0.218955, 0.657094),\r\n new THREE.Vector3(-0.310153, -0.365223, 0.370701),\r\n new THREE.Vector3(-0.101407, -0.006313, 0.747665),\r\n new THREE.Vector3(-0.769138, 0.360399, 0.086847),\r\n new THREE.Vector3(-0.271988, -0.275140, 0.905353),\r\n new THREE.Vector3(0.096740, -0.566901, 0.700151),\r\n new THREE.Vector3(0.562872, -0.735136, 0.094647),\r\n new THREE.Vector3(0.379877, 0.359278, 0.190061),\r\n new THREE.Vector3(0.519064, -0.023055, 0.405068),\r\n new THREE.Vector3(-0.301036, 0.114696, 0.088885),\r\n new THREE.Vector3(-0.282922, 0.598305, 0.487214),\r\n new THREE.Vector3(-0.181859, 0.251670, 0.679702),\r\n new THREE.Vector3(-0.191463, -0.635818, 0.512919),\r\n new THREE.Vector3(-0.293655, 0.427423, 0.078921),\r\n new THREE.Vector3(-0.267983, 0.680534, 0.132880),\r\n new THREE.Vector3(0.139611, 0.319637, 0.477439),\r\n new THREE.Vector3(-0.352086, 0.311040, 0.653913),\r\n new THREE.Vector3(0.321032, 0.805279, 0.487345),\r\n new THREE.Vector3(0.073516, 0.820734, 0.414183),\r\n new THREE.Vector3(-0.155324, 0.589983, 0.411460),\r\n new THREE.Vector3(0.335976, 0.170782, 0.527627),\r\n new THREE.Vector3(0.463460, -0.355658, 0.167689),\r\n new THREE.Vector3(0.222654, 0.596550, 0.769406),\r\n new THREE.Vector3(0.922138, -0.042070, 0.147555),\r\n new THREE.Vector3(-0.727050, -0.329192, 0.369826),\r\n new THREE.Vector3(-0.090731, 0.533820, 0.463767),\r\n new THREE.Vector3(-0.323457, -0.876559, 0.238524),\r\n new THREE.Vector3(-0.663277, -0.372384, 0.342856),\r\n];\r\n\r\nclass AOMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n noiseTexture: { type: 't', value: noise.noiseTexture },\r\n noiseTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / noise.noiseWidth, 1.0 / noise.noiseHeight) },\r\n diffuseTexture: { type: 't', value: null },\r\n normalTexture: { type: 't', value: null },\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n camNearFar: { type: 'v2', value: new THREE.Vector2(1.0, 10.0) },\r\n projMatrix: { type: 'mat4', value: new THREE.Matrix4() },\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n samplesKernel: { type: 'v3v', value: _samplesKernel },\r\n kernelRadius: { type: 'f', value: 1.0 },\r\n depthThreshold: { type: 'f', value: 1.0 },\r\n factor: { type: 'f', value: 1.0 },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n }\r\n}\r\n\r\nexport default AOMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AOHorBlur.frag';\r\n\r\nconst _kernelOffsets = [-2.0, -1.0, 0.0, 1.0, 2.0];\r\n\r\nclass AOHorBlurMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n aoMap: { type: 't', value: null },\r\n samplesOffsets: { type: 'fv1', value: _kernelOffsets },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n }\r\n}\r\n\r\nexport default AOHorBlurMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AOVertBlurWithBlend.frag';\r\n\r\nconst _kernelOffsets = [-2.0, -1.0, 0.0, 1.0, 2.0];\r\n\r\nclass AOVertBlurWithBlendMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n diffuseTexture: { type: 't', value: null },\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n aoMap: { type: 't', value: null },\r\n samplesOffsets: { type: 'fv1', value: _kernelOffsets },\r\n projMatrix: { type: 'mat4', value: new THREE.Matrix4() },\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n fogNearFar: { type: 'v2', value: new THREE.Vector2(100.0, 100.0) },\r\n fogColor: { type: 'v4', value: new THREE.Vector4(0.0, 0.5, 0.0, 1.0) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n\r\n if (this.useFog) {\r\n defines.USE_FOG = 1;\r\n }\r\n if (this.fogTransparent) {\r\n defines.FOG_TRANSPARENT = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nAOVertBlurWithBlendMaterial.prototype.useFog = true;\r\nAOVertBlurWithBlendMaterial.prototype.fogTransparent = false;\r\n\r\nexport default AOVertBlurWithBlendMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './Anaglyph.frag';\r\n\r\nclass AnaglyphMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n const settings = {\r\n uniforms: {\r\n srcL: { type: 't', value: null },\r\n srcR: { type: 't', value: null },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n };\r\n this.setValues(settings);\r\n }\r\n}\r\n\r\nexport default AnaglyphMaterial;\r\n","import * as THREE from 'three';\r\nimport settings from '../settings';\r\n\r\nclass View {\r\n constructor() {\r\n this.position = new THREE.Vector3(0, 0, 0);\r\n this.scale = 1;\r\n this.orientation = new THREE.Quaternion(0, 0, 0, 1);\r\n }\r\n\r\n set(position, scale, orientation) {\r\n this.position = position;\r\n this.scale = scale;\r\n this.orientation = orientation;\r\n }\r\n}\r\n\r\nconst _transitionTime = 1.5; // in seconds\r\n\r\nexport default class ViewInterpolator {\r\n setup(startView, endView) {\r\n this._startTime = undefined;\r\n this._endTime = undefined;\r\n this._isPaused = false;\r\n\r\n this._srcView = startView;\r\n this._dstView = endView;\r\n this._isMoving = false;\r\n }\r\n\r\n isMoving() {\r\n return this._isMoving;\r\n }\r\n\r\n wasStarted() {\r\n return typeof this._startTime !== 'undefined' && typeof this._endTime !== 'undefined';\r\n }\r\n\r\n start() {\r\n this._startTime = Date.now();\r\n const transTime = settings.now.interpolateViews ? _transitionTime * 1000 : 0;\r\n this._endTime = this._startTime + transTime;\r\n this._isMoving = true;\r\n }\r\n\r\n getCurrentView() {\r\n if (typeof this._srcView === 'undefined' || typeof this._dstView === 'undefined'\r\n || !this._isMoving || !this.wasStarted()) {\r\n return { success: false };\r\n }\r\n\r\n let view = this.createView();\r\n const time = Date.now();\r\n if (time > this._endTime) {\r\n view = this._dstView;\r\n this.reset();\r\n return { success: true, view };\r\n }\r\n\r\n const factor = (time - this._startTime) / (this._endTime - this._startTime);\r\n view.position.copy(this._srcView.position);\r\n view.position.lerp(this._dstView.position, factor);\r\n view.scale = (1 - factor) * this._srcView.scale + factor * this._dstView.scale;\r\n view.orientation.copy(this._srcView.orientation);\r\n view.orientation.slerp(this._dstView.orientation, factor);\r\n return { success: true, view };\r\n }\r\n\r\n reset() {\r\n this._startTime = this._endTime = 0;\r\n this._isMoving = false;\r\n }\r\n\r\n pause() {\r\n if (!this._isPaused) {\r\n this.setup(this.getCurrentView().view, this._dstView);\r\n this._isPaused = true;\r\n }\r\n }\r\n\r\n resume() {\r\n this._isPaused = false;\r\n }\r\n\r\n createView() {\r\n return new View();\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport makeContextDependent from './makeContextDependent';\r\n\r\nconst MAX_COOKIE_LEN = 4000;\r\nconst COUNT_SUFFIX = 'Cnt';\r\n\r\nfunction _chunkString(string, chunkLen) {\r\n const l = string.length;\r\n const chunks = [];\r\n for (let c = 0, lc = 0; lc < l; c++, lc += chunkLen) {\r\n chunks[c] = string.slice(lc, lc + chunkLen);\r\n }\r\n return chunks;\r\n}\r\n\r\n/**\r\n * Create new context dependent Cookie holder object.\r\n * @param context\r\n * @param {Object} opts - options\r\n * @param {string} opts.path - cookie path\r\n * @constructor\r\n */\r\nfunction Cookies(context, opts) {\r\n this.context = context;\r\n this._opts = _.merge({\r\n path: '/',\r\n }, opts);\r\n}\r\n\r\nmakeContextDependent(Cookies.prototype);\r\n\r\n/**\r\n * Remove cookie by the name.\r\n * @param key\r\n */\r\nCookies.prototype.removeCookie = function (key) {\r\n const cntKey = this._toCount(key);\r\n let cntVal = this._getSimpleCookie(cntKey);\r\n if (!cntVal) {\r\n this._removeSimpleCookie(key);\r\n return;\r\n }\r\n this._removeSimpleCookie(cntKey);\r\n cntVal = parseInt(cntVal, 10);\r\n for (let i = 0; i < cntVal; ++i) {\r\n this._removeSimpleCookie(key + i);\r\n }\r\n};\r\n\r\n/**\r\n * Set new cookie value. Automatically splits\r\n * values that are too large into multiple cookies.\r\n * @param key\r\n * @param value\r\n */\r\nCookies.prototype.setCookie = function (key, value) {\r\n this.removeCookie(key);\r\n value = encodeURIComponent(value);\r\n const values = _chunkString(value, MAX_COOKIE_LEN - key.length - 1);\r\n const cntVal = values.length;\r\n if (cntVal === 1) {\r\n this._setSimpleCookie(key, value);\r\n return;\r\n }\r\n const cntKey = this._toCount(key);\r\n this._setSimpleCookie(cntKey, cntVal.toString());\r\n for (let i = 0; i < cntVal; ++i) {\r\n this._setSimpleCookie(key + i, values[i]);\r\n }\r\n};\r\n\r\n/**\r\n * Obtain the value of a compound cookie.\r\n * @param key\r\n */\r\nCookies.prototype.getCookie = function (key) {\r\n const cntKey = this._toCount(key);\r\n let cntVal = this._getSimpleCookie(cntKey);\r\n if (!cntVal) {\r\n return this._getSimpleCookie(key);\r\n }\r\n cntVal = parseInt(cntVal, 10);\r\n const value = [];\r\n for (let i = 0; i < cntVal; ++i) {\r\n value[i] = this._getSimpleCookie(key + i);\r\n }\r\n return value.join('');\r\n};\r\n\r\nCookies.prototype._toCount = function (key) {\r\n return key + COUNT_SUFFIX;\r\n};\r\n\r\nCookies.prototype._removeSimpleCookie = function (key) {\r\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;\r\n};\r\n\r\nCookies.prototype._getExpirationDate = function () {\r\n const today = new Date();\r\n const EXP_PERIOD_YEARS = 10;\r\n today.setFullYear(today.getFullYear() + EXP_PERIOD_YEARS);\r\n return today;\r\n};\r\n\r\nCookies.prototype._setSimpleCookie = function (key, value) {\r\n document.cookie = `${key}=${value\r\n };expires=${this._getExpirationDate().toUTCString()\r\n };path=${this._opts.path}`;\r\n};\r\n\r\nCookies.prototype._getSimpleCookie = function (key) {\r\n const matches = document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`));\r\n return matches ? decodeURIComponent(matches[1]) : '';\r\n};\r\n\r\nCookies.prototype._exists = function (key) {\r\n return document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`));\r\n};\r\n\r\nexport default Cookies;\r\n","/*\r\n * Toggling WebVR is done through button.click because of limitations on calling requestPresent in webVR:\r\n * VRDisplay::requestPresent should be called from user gesture:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestPresent\r\n */\r\nexport default function (webVRPoC) {\r\n function showEnterVR(button) {\r\n button.style.display = '';\r\n button.style.cursor = 'pointer';\r\n button.style.left = 'calc(50% - 50px)';\r\n button.style.width = '100px';\r\n\r\n button.textContent = 'ENTER VR';\r\n\r\n let currentSession = null;\r\n\r\n function onSessionEnded(/* event */) {\r\n currentSession.removeEventListener('end', onSessionEnded);\r\n button.textContent = 'ENTER VR';\r\n currentSession = null;\r\n }\r\n\r\n function onSessionStarted(session) {\r\n session.addEventListener('end', onSessionEnded);\r\n webVRPoC._gfx.renderer.xr.setReferenceSpaceType('local');\r\n webVRPoC._gfx.renderer.xr.setSession(session);\r\n button.textContent = 'EXIT VR';\r\n currentSession = session;\r\n }\r\n\r\n button.onmouseenter = function () { button.style.opacity = '1.0'; };\r\n button.onmouseleave = function () { button.style.opacity = '0.5'; };\r\n\r\n button.onclick = function () {\r\n if (currentSession === null) {\r\n // WebXR's requestReferenceSpace only works if the corresponding feature\r\n // was requested at session creation time. For simplicity, just ask for\r\n // the interesting ones as optional features, but be aware that the\r\n // requestReferenceSpace call will fail if it turns out to be unavailable.\r\n // ('local' is always available for immersive sessions and doesn't need to\r\n // be requested separately.)\r\n\r\n const sessionInit = { optionalFeatures: ['local-floor', 'bounded-floor'] };\r\n navigator.xr.requestSession('immersive-vr', sessionInit).then(onSessionStarted);\r\n webVRPoC.moveSceneBehindHeadset();\r\n } else {\r\n currentSession.end();\r\n }\r\n };\r\n }\r\n\r\n function showWebXRNotFound(button) {\r\n button.style.display = '';\r\n button.style.cursor = 'auto';\r\n button.style.left = 'calc(50% - 75px)';\r\n button.style.width = '150px';\r\n button.textContent = 'VR NOT FOUND';\r\n button.onmouseenter = null;\r\n button.onmouseleave = null;\r\n button.onclick = null;\r\n }\r\n\r\n function stylizeElement(element) {\r\n element.style.position = 'absolute';\r\n element.style.bottom = '20px';\r\n element.style.padding = '12px 6px';\r\n element.style.border = '1px solid #fff';\r\n element.style.borderRadius = '4px';\r\n element.style.background = 'transparent';\r\n element.style.color = '#fff';\r\n element.style.font = 'normal 13px sans-serif';\r\n element.style.textAlign = 'center';\r\n element.style.opacity = '0.5';\r\n element.style.outline = 'none';\r\n element.style.zIndex = '999';\r\n }\r\n\r\n if ('xr' in navigator) {\r\n const button = document.createElement('button');\r\n button.style.display = 'none';\r\n stylizeElement(button);\r\n navigator.xr.isSessionSupported('immersive-vr').then((supported) => (\r\n supported ? showEnterVR(button) : showWebXRNotFound(button)\r\n ));\r\n return button;\r\n }\r\n const message = document.createElement('a');\r\n message.href = 'https://webvr.info';\r\n message.innerHTML = 'WEBXR NOT SUPPORTED';\r\n message.style.left = 'calc(50% - 90px)';\r\n message.style.width = '180px';\r\n message.style.textDecoration = 'none';\r\n stylizeElement(message);\r\n return message;\r\n}\r\n","import * as THREE from 'three';\r\nimport createWebVRButton from './createWebVRButton';\r\nimport gfxutils from '../gfxutils';\r\nimport logger from '../../utils/logger';\r\nimport settings from '../../settings';\r\nimport UberMaterial from '../shaders/UberMaterial';\r\n\r\nexport default class WebVRPoC {\r\n constructor(onToggle) {\r\n this._mainCamera = new THREE.PerspectiveCamera();\r\n this._button = null;\r\n this._onToggle = onToggle;\r\n\r\n this._molContainer = new gfxutils.RCGroup();\r\n this._user = new gfxutils.RCGroup();\r\n this._scalingPivot = new THREE.Object3D();\r\n this._user.add(this._scalingPivot);\r\n\r\n this._controller1 = null;\r\n this._controller2 = null;\r\n this._pressedGripsCounter = 0;\r\n this._distance = 0;\r\n\r\n this._gfx = null;\r\n }\r\n\r\n startScalingByControllers() {\r\n // reset scale\r\n this._distance = this._controller1.position.distanceTo(this._controller2.position);\r\n gfxutils.getMiddlePoint(this._controller1.position, this._controller2.position, this._scalingPivot.position);\r\n this._scalingPivot.scale.set(1, 1, 1);\r\n this._scalingPivot.updateMatrix();\r\n this._scalingPivot.updateMatrixWorld();\r\n // link molecule to pivot\r\n this._scalingPivot.addSavingWorldTransform(this._molContainer);\r\n }\r\n\r\n stopScalingByControllers() {\r\n this._gfx.scene.addSavingWorldTransform(this._molContainer);\r\n }\r\n\r\n handleGripsDown(event) {\r\n this._pressedGripsCounter++;\r\n if (this._pressedGripsCounter === 2) {\r\n this.startScalingByControllers();\r\n } else if (this._pressedGripsCounter === 1) {\r\n event.target.addSavingWorldTransform(this._molContainer);\r\n }\r\n }\r\n\r\n handleGripsUp(event) {\r\n this._pressedGripsCounter--;\r\n if (this._pressedGripsCounter === 1) {\r\n this.stopScalingByControllers();\r\n // reattach molecule to other controller\r\n const anotherController = event.target === this._controller1 ? this._controller2 : this._controller1;\r\n anotherController.addSavingWorldTransform(this._molContainer);\r\n } else if (this._pressedGripsCounter === 0) {\r\n this._gfx.scene.addSavingWorldTransform(this._molContainer);\r\n }\r\n }\r\n\r\n enable(gfx) {\r\n if (!gfx) {\r\n logger.warn('WebVR couldn\\'t be enabled, because gfx is not defined');\r\n return;\r\n }\r\n this._gfx = gfx;\r\n const { renderer, camera } = gfx;\r\n if (!renderer) {\r\n throw new Error('No renderer is available to toggle WebVR');\r\n }\r\n if (!camera) {\r\n throw new Error('No camera is available to toggle WebVR');\r\n }\r\n\r\n // enable xr in renderer\r\n renderer.xr.enabled = true;\r\n // add button for turning vr mode\r\n if (!this._button) {\r\n this._button = createWebVRButton(this);\r\n document.body.appendChild(this._button);\r\n } else {\r\n this._button.style.display = 'block';\r\n }\r\n // store fog setting\r\n this._mainFog = settings.now.fog;\r\n settings.set('fog', false);\r\n\r\n this._plugVRNodesIntoScene(gfx, renderer);\r\n this._setControllersListeners();\r\n\r\n // make some Miew job\r\n if (this._onToggle) {\r\n this._onToggle(true);\r\n }\r\n }\r\n\r\n _plugVRNodesIntoScene(gfx, renderer) {\r\n // store common scene camera\r\n this._mainCamera.copy(gfx.camera);\r\n // add hierarchical structure for webVR into scene\r\n gfx.scene.add(this._user);\r\n // turn on webvr transformation\r\n gfx.scene.add(this._molContainer);\r\n this._molContainer.add(gfx.root);\r\n\r\n this._controller1 = renderer.xr.getController(0);\r\n this._controller2 = renderer.xr.getController(1);\r\n const mesh = this._createControllerMesh();\r\n this._controller1.add(mesh);\r\n this._controller2.add(mesh.clone());\r\n this._user.add(this._controller1);\r\n this._user.add(this._controller2);\r\n }\r\n\r\n _setControllersListeners() {\r\n this._controller1.addEventListener('selectstart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller1.addEventListener('selectend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n this._controller2.addEventListener('selectstart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller2.addEventListener('selectend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n\r\n this._controller1.addEventListener('squeezestart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller1.addEventListener('squeezeend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n this._controller2.addEventListener('squeezestart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller2.addEventListener('squeezeend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n }\r\n\r\n disable() {\r\n if (!this._gfx) {\r\n return;\r\n }\r\n const { renderer, camera } = this._gfx;\r\n if (!renderer) {\r\n throw new Error('No renderer is available to toggle WebVR');\r\n }\r\n\r\n // nullify webxr callback for animation frame\r\n renderer.setAnimationLoop(null);\r\n const session = renderer.xr.getSession();\r\n if (session) {\r\n session.end();\r\n }\r\n renderer.xr.enabled = false;\r\n // remove button of VR entering\r\n if (this._button) {\r\n this._button.style.display = 'none';\r\n }\r\n // restore fog param\r\n settings.set('fog', this._mainFog);\r\n\r\n this._unplugVRNodesFromScene(camera);\r\n\r\n // make some Miew job\r\n if (this._onToggle) {\r\n this._onToggle(false);\r\n }\r\n }\r\n\r\n _unplugVRNodesFromScene(camera) {\r\n // restore common camera\r\n if (this._mainCamera && camera) {\r\n camera.copy(this._mainCamera);\r\n }\r\n // turn off webvr transformation\r\n const root = this._molContainer.children[0];\r\n if (root) {\r\n this._gfx.scene.add(root);\r\n }\r\n this._molContainer.parent.remove(this._molContainer);\r\n if (this._user) {\r\n this._gfx.scene.remove(this._user);\r\n }\r\n // free scene nodes\r\n this._molContainer = null;\r\n this._user = null;\r\n this._scalingPivot = null;\r\n this._user = null;\r\n this._controller1 = null;\r\n this._controller2 = null;\r\n }\r\n\r\n _createControllerMesh() {\r\n // visualize controllers with cylinders\r\n const geometry = new THREE.CylinderGeometry(0.04, 0.04, 0.3);\r\n const material = new UberMaterial({ lights: false, overrideColor: true });\r\n material.setUberOptions({ fixedColor: new THREE.Color(0x4444ff) });\r\n material.updateUniforms();\r\n const cylinder = new THREE.Mesh(geometry, material);\r\n cylinder.rotateX(-Math.PI / 2);\r\n return cylinder;\r\n }\r\n\r\n updateMoleculeScale() {\r\n if (!this._controller1 || !this._controller2) {\r\n return;\r\n }\r\n\r\n const self = this;\r\n // update molecule scaling by controllers\r\n if (self._pressedGripsCounter === 2) {\r\n // recalc scaling pivot\r\n gfxutils.getMiddlePoint(self._controller1.position, self._controller2.position, self._scalingPivot.position);\r\n // recalc scaler\r\n const dist = self._controller1.position.distanceTo(self._controller2.position);\r\n const scaler = dist / self._distance;\r\n self._scalingPivot.scale.multiplyScalar(scaler);\r\n // save cur distance for next frame\r\n self._distance = dist;\r\n }\r\n }\r\n\r\n /**\r\n * Reposition molecule right before the camera.\r\n * @note The proper way is to initiate headset in the place of common Miew's camera.\r\n * But threejs limitations on setting new XRReferenceSpace enforce the molecule repositioning\r\n * Hope, something will change.\r\n */\r\n moveSceneBehindHeadset() {\r\n const gfx = this._gfx;\r\n const { camera } = gfx;\r\n\r\n // set container position in camera space\r\n const container = this._molContainer;\r\n container.matrix.identity();\r\n container.position.set(0, 0, -4.0);\r\n container.updateMatrix();\r\n\r\n // update container world matrix\r\n container.matrixWorld.multiplyMatrices(camera.matrixWorld, container.matrix);\r\n // readd to scene\r\n gfx.scene.addSavingWorldTransform(container);\r\n if (this._onToggle) {\r\n this._onToggle(true);\r\n }\r\n }\r\n\r\n getCanvas() {\r\n const gfx = this._gfx;\r\n return (gfx && gfx.renderer) ? gfx.renderer.domElement : null;\r\n }\r\n}\r\n","/* global PACKAGE_VERSION:false */\r\nimport _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport { Spinner } from 'spin.js';\r\nimport Stats from './gfx/Stats';\r\nimport utils from './utils';\r\nimport JobHandle from './utils/JobHandle';\r\nimport options from './options';\r\nimport settings from './settings';\r\nimport chem from './chem';\r\nimport Visual from './Visual';\r\nimport ComplexVisual from './ComplexVisual';\r\nimport Complex from './chem/Complex';\r\nimport VolumeVisual from './VolumeVisual';\r\nimport io from './io/io';\r\nimport modes from './gfx/modes';\r\nimport colorers from './gfx/colorers';\r\nimport palettes from './gfx/palettes';\r\nimport materials from './gfx/materials';\r\nimport Representation from './gfx/Representation';\r\nimport CSS2DRenderer from './gfx/CSS2DRenderer';\r\nimport ObjectControls from './ui/ObjectControls';\r\nimport Picker from './ui/Picker';\r\nimport Axes from './gfx/Axes';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport meshutils from './gfx/meshutils';\r\nimport FrameInfo from './gfx/FrameInfo';\r\nimport meshes from './gfx/meshes/meshes';\r\nimport LinesObject from './gfx/objects/LinesObj';\r\nimport UberMaterial from './gfx/shaders/UberMaterial';\r\nimport OutlineMaterial from './gfx/shaders/OutlineMaterial';\r\nimport FXAAMaterial from './gfx/shaders/FXAAMaterial';\r\nimport AOMaterial from './gfx/shaders/AOMaterial';\r\nimport AOHorBlurMaterial from './gfx/shaders/AOHorBlurMaterial';\r\nimport AOVertBlurWithBlendMaterial from './gfx/shaders/AOVertBlurWithBlendMaterial';\r\nimport AnaglyphMaterial from './gfx/shaders/AnaglyphMaterial';\r\nimport VolumeMaterial from './gfx/shaders/VolumeMaterial';\r\nimport ViewInterpolator from './gfx/ViewInterpolator';\r\nimport EventDispatcher from './utils/EventDispatcher';\r\nimport logger from './utils/logger';\r\nimport Cookies from './utils/Cookies';\r\nimport capabilities from './gfx/capabilities';\r\nimport WebVRPoC from './gfx/vr/WebVRPoC';\r\nimport vertexScreenQuadShader from './gfx/shaders/ScreenQuad.vert';\r\nimport fragmentScreenQuadFromDistTex from './gfx/shaders/ScreenQuadFromDistortionTex.frag';\r\nimport getTopWindow from './utils/getTopWindow';\r\n\r\nconst {\r\n selectors,\r\n Atom,\r\n Residue,\r\n Chain,\r\n Molecule,\r\n} = chem;\r\n\r\nconst EDIT_MODE = { COMPLEX: 0, COMPONENT: 1, FRAGMENT: 2 };\r\n\r\nconst LOADER_NOT_FOUND = 'Could not find suitable loader for this source';\r\nconst PARSER_NOT_FOUND = 'Could not find suitable parser for this source';\r\n\r\n// Color management changed a lot in threejs 152+ version.\r\n// To keep miew colors we disable the new color management system\r\nTHREE.ColorManagement.enabled = false;\r\n\r\nconst { createElement } = utils;\r\n\r\nfunction updateFogRange(fog, center, radius) {\r\n fog.near = center - radius * settings.now.fogNearFactor;\r\n fog.far = center + radius * settings.now.fogFarFactor;\r\n}\r\n\r\nfunction removeExtension(fileName) {\r\n const dot = fileName.lastIndexOf('.');\r\n if (dot >= 0) {\r\n fileName = fileName.substr(0, dot);\r\n }\r\n return fileName;\r\n}\r\n\r\nfunction hasValidResidues(complex) {\r\n let hasValidRes = false;\r\n complex.forEachComponent((component) => {\r\n component.forEachResidue((residue) => {\r\n if (residue._isValid) {\r\n hasValidRes = true;\r\n }\r\n });\r\n });\r\n return hasValidRes;\r\n}\r\n\r\nfunction reportProgress(log, action, percent) {\r\n const TOTAL_PERCENT = 100;\r\n if (percent !== undefined) {\r\n log.debug(`${action}... ${Math.floor(percent * TOTAL_PERCENT)}%`);\r\n } else {\r\n log.debug(`${action}...`);\r\n }\r\n}\r\n\r\nfunction chooseFogColor() {\r\n return settings.now.fogColorEnable ? settings.now.fogColor : settings.now.bg.color;\r\n}\r\n\r\n// ////////////////////////////////////////////////////////////////////////////\r\n\r\n/**\r\n * Main 3D Molecular Viewer class.\r\n *\r\n * @param {object} opts - Viewer options.\r\n * @param {HTMLElement=} opts.container - DOM element that serves as a viewer container.\r\n * @param {object=} opts.settings - An object with properties to override default settings.\r\n * @param {string=} opts.settingsCookie='settings' - The name of the cookie to save current settings to.\r\n * @param {string=} opts.cookiePath='/' - The path option for cookies. Defaults to root.\r\n *\r\n * @exports Miew\r\n * @constructor\r\n */\r\nfunction Miew(opts) {\r\n EventDispatcher.call(this);\r\n this._opts = _.merge({\r\n settingsCookie: 'settings',\r\n cookiePath: '/',\r\n }, opts);\r\n /** @type {?object} */\r\n this._gfx = null;\r\n /** @type {ViewInterpolator} */\r\n this._interpolator = new ViewInterpolator();\r\n /** @type {HTMLElement} */\r\n this._container = (opts && opts.container)\r\n || document.getElementById('miew-container')\r\n || _.head(document.getElementsByClassName('miew-container'))\r\n || document.body;\r\n /** @type {HTMLElement} */\r\n this._containerRoot = this._container;\r\n\r\n /** @type {boolean} */\r\n this._running = false;\r\n /** @type {boolean} */\r\n this._halting = false;\r\n /** @type {boolean} */\r\n this._building = false;\r\n /** @type {boolean} */\r\n this._needRender = true;\r\n /** @type {boolean} */\r\n this._hotKeysEnabled = true;\r\n\r\n /** @type {Settings} */\r\n this.settings = settings;\r\n const log = logger;\r\n log.console = DEBUG;\r\n log.level = DEBUG ? 'debug' : 'info';\r\n /**\r\n * @type {Logger}\r\n * @example\r\n * miew.logger.addEventListener('message', function _onLogMessage(evt) {\r\n * console.log(evt.message);\r\n * });\r\n */\r\n this.logger = log;\r\n\r\n this._cookies = new Cookies(this);\r\n this.restoreSettings();\r\n if (opts && opts.settings) {\r\n this.settings.set(opts.settings);\r\n }\r\n\r\n /** @type {?Spinner} */\r\n this._spinner = null;\r\n /** @type {JobHandle[]} */\r\n this._loading = [];\r\n /** @type {?number}\r\n * @deprecated until Animation system refactoring\r\n */\r\n this._animInterval = null;\r\n\r\n /** @type {object} */\r\n this._visuals = {};\r\n /** @type {?string} */\r\n this._curVisualName = null;\r\n\r\n /** @type {array} */\r\n this._objects = [];\r\n\r\n /** @type {object} */\r\n this._sourceWindow = null;\r\n\r\n this.reset();\r\n\r\n if (this._repr) {\r\n log.debug(`Selected ${this._repr.mode.name} mode with ${this._repr.colorer.name} colorer.`);\r\n }\r\n\r\n const self = this;\r\n Miew.registeredPlugins.forEach((plugin) => {\r\n plugin.call(self);\r\n });\r\n\r\n this._initOnSettingsChanged();\r\n}\r\n\r\nMiew.prototype = Object.create(EventDispatcher.prototype);\r\nMiew.prototype.constructor = Miew;\r\n\r\nMiew.prototype.getMaxRepresentationCount = function () {\r\n return ComplexVisual.NUM_REPRESENTATION_BITS;\r\n};\r\n\r\n/**\r\n * Replace viewer container contents with a DOM element.\r\n * @param {HTMLElement} container - parent container.\r\n * @param {HTMLElement} element - DOM element to show.\r\n * @private\r\n */\r\nfunction _setContainerContents(container, element) {\r\n const parent = container;\r\n while (parent.firstChild) {\r\n parent.removeChild(parent.firstChild);\r\n }\r\n parent.appendChild(element);\r\n}\r\n\r\n/**\r\n * Update Shadow Camera target position and frustum.\r\n * @private\r\n */\r\nMiew.prototype._updateShadowCamera = (function () {\r\n const shadowMatrix = new THREE.Matrix4();\r\n const direction = new THREE.Vector3();\r\n const OBB = { center: new THREE.Vector3(), halfSize: new THREE.Vector3() };\r\n\r\n return function () {\r\n this._gfx.scene.updateMatrixWorld();\r\n for (let i = 0; i < this._gfx.scene.children.length; i++) {\r\n if (this._gfx.scene.children[i].type === 'DirectionalLight') {\r\n const light = this._gfx.scene.children[i];\r\n shadowMatrix.copy(light.shadow.camera.matrixWorldInverse);\r\n this.getOBB(shadowMatrix, OBB);\r\n\r\n direction.subVectors(light.target.position, light.position);\r\n light.position.subVectors(OBB.center, direction);\r\n light.target.position.copy(OBB.center);\r\n\r\n light.shadow.bias = 0.09;\r\n light.shadow.camera.bottom = -OBB.halfSize.y;\r\n light.shadow.camera.top = OBB.halfSize.y;\r\n light.shadow.camera.right = OBB.halfSize.x;\r\n light.shadow.camera.left = -OBB.halfSize.x;\r\n light.shadow.camera.near = direction.length() - OBB.halfSize.z;\r\n light.shadow.camera.far = direction.length() + OBB.halfSize.z;\r\n\r\n light.shadow.camera.updateProjectionMatrix();\r\n }\r\n }\r\n };\r\n}());\r\n\r\n/**\r\n * Initialize the viewer.\r\n * @returns {boolean} true on success.\r\n * @throws Forwards exception raised during initialization.\r\n * @see Miew#term\r\n */\r\nMiew.prototype.init = function () {\r\n const container = this._container;\r\n const elem = utils.createElement('div', { class: 'miew-canvas' });\r\n _setContainerContents(container, elem);\r\n this._container = elem;\r\n\r\n const frag = document.createDocumentFragment();\r\n frag.appendChild(this._msgMode = createElement(\r\n 'div',\r\n { class: 'mode-message overlay' },\r\n createElement('p', {}, 'COMPONENT EDIT MODE'),\r\n ));\r\n frag.appendChild(this._msgAtomInfo = createElement(\r\n 'div',\r\n { class: 'atom-info overlay' },\r\n createElement('p', {}, ''),\r\n ));\r\n container.appendChild(frag);\r\n\r\n if (this._gfx !== null) { // block double init\r\n return true;\r\n }\r\n\r\n const self = this;\r\n this._showMessage('Viewer is being initialized...');\r\n try {\r\n this._initGfx();\r\n\r\n this._initListeners();\r\n this._spinner = new Spinner({\r\n lines: 13,\r\n length: 28,\r\n width: 14,\r\n radius: 42,\r\n color: '#fff',\r\n zIndex: 700,\r\n });\r\n\r\n const target = getTopWindow();\r\n target.addEventListener('keydown', (event) => {\r\n self._onKeyDown(event);\r\n });\r\n\r\n target.addEventListener('keyup', (event) => {\r\n self._onKeyUp(event);\r\n });\r\n\r\n this._objectControls = new ObjectControls(\r\n this._gfx.root,\r\n this._gfx.pivot,\r\n this._gfx.camera,\r\n this._gfx.renderer.domElement,\r\n () => self._getAltObj(),\r\n );\r\n this._objectControls.addEventListener('change', (e) => {\r\n if (settings.now.shadow.on) {\r\n self._updateShadowCamera();\r\n }\r\n // route rotate, zoom, translate and translatePivot events to the external API\r\n switch (e.action) {\r\n case 'rotate':\r\n self.dispatchEvent({ type: 'rotate', quaternion: e.quaternion });\r\n break;\r\n case 'zoom':\r\n self.dispatchEvent({ type: 'zoom', factor: e.factor });\r\n break;\r\n default:\r\n self.dispatchEvent({ type: e.action });\r\n }\r\n self.dispatchEvent({ type: 'transform' });\r\n self._needRender = true;\r\n });\r\n\r\n const gfx = this._gfx;\r\n this._picker = new Picker(gfx.root, gfx.camera, gfx.renderer.domElement);\r\n this._picker.addEventListener('newpick', (event) => {\r\n self._onPick(event);\r\n });\r\n this._picker.addEventListener('dblclick', (event) => {\r\n self.center(event);\r\n });\r\n } catch (error) {\r\n if (error.name === 'TypeError' && error.message === 'Cannot read property \\'getExtension\\' of null') {\r\n this._showMessage('Could not create WebGL context.');\r\n } else if (error.message.search(/webgl/i) > 1) {\r\n this._showMessage(error.message);\r\n } else {\r\n this._showMessage('Viewer initialization failed.');\r\n throw error;\r\n }\r\n return false;\r\n }\r\n\r\n // automatically load default file\r\n const file = this._opts && this._opts.load;\r\n if (file) {\r\n const type = this._opts && this._opts.type;\r\n this.load(file, { fileType: type, keepRepsInfo: true });\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Terminate the viewer completely.\r\n * @see Miew#init\r\n */\r\nMiew.prototype.term = function () {\r\n this._showMessage('Viewer has been terminated.');\r\n this._loading.forEach((job) => {\r\n job.cancel();\r\n });\r\n this._loading.length = 0;\r\n this.halt();\r\n this._gfx = null;\r\n};\r\n\r\n/**\r\n * Display message inside the viewer container, hiding WebGL canvas.\r\n * @param {string} msg - Message to show.\r\n * @private\r\n */\r\nMiew.prototype._showMessage = function (msg) {\r\n const element = document.createElement('div');\r\n element.setAttribute('class', 'miew-message');\r\n element.appendChild(document.createElement('p')).appendChild(document.createTextNode(msg));\r\n _setContainerContents(this._container, element);\r\n};\r\n\r\n/**\r\n * Display WebGL canvas inside the viewer container, hiding any message shown.\r\n * @private\r\n */\r\nMiew.prototype._showCanvas = function () {\r\n _setContainerContents(this._container, this._gfx.renderer.domElement);\r\n};\r\n\r\nMiew.prototype._requestAnimationFrame = function (callback) {\r\n const { xr } = this._gfx.renderer;\r\n if (xr && xr.enabled) {\r\n this._gfx.renderer.setAnimationLoop(callback);\r\n return;\r\n }\r\n requestAnimationFrame(callback);\r\n};\r\n\r\nfunction arezSpritesSupported(context) {\r\n return context.getExtension('EXT_frag_depth');\r\n}\r\n\r\nfunction isAOSupported(context) {\r\n return (context.getExtension('WEBGL_depth_texture')\r\n && context.getExtension('WEBGL_draw_buffers'));\r\n}\r\n\r\n/**\r\n * Initialize WebGL and set 3D scene up.\r\n * @private\r\n */\r\nMiew.prototype._initGfx = function () {\r\n const gfx = {\r\n width: this._container.clientWidth,\r\n height: this._container.clientHeight,\r\n };\r\n\r\n const webGLOptions = { preserveDrawingBuffer: true, alpha: true, premultipliedAlpha: false };\r\n if (settings.now.antialias) {\r\n webGLOptions.antialias = true;\r\n }\r\n\r\n gfx.renderer2d = new CSS2DRenderer();\r\n\r\n gfx.renderer = new THREE.WebGL1Renderer(webGLOptions);\r\n gfx.renderer.shadowMap.enabled = settings.now.shadow.on;\r\n gfx.renderer.shadowMap.autoUpdate = false;\r\n gfx.renderer.shadowMap.type = THREE.PCFShadowMap;\r\n capabilities.init(gfx.renderer);\r\n\r\n // z-sprites and ambient occlusion possibility\r\n if (!arezSpritesSupported(gfx.renderer.getContext())) {\r\n settings.set('zSprites', false);\r\n }\r\n if (!isAOSupported(gfx.renderer.getContext())) {\r\n settings.set('ao', false);\r\n }\r\n\r\n gfx.renderer.autoClear = false;\r\n gfx.renderer.setPixelRatio(window.devicePixelRatio);\r\n gfx.renderer.setSize(gfx.width, gfx.height);\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.clearColor();\r\n\r\n gfx.renderer2d.setSize(gfx.width, gfx.height);\r\n\r\n gfx.camera = new THREE.PerspectiveCamera(\r\n settings.now.camFov,\r\n gfx.width / gfx.height,\r\n settings.now.camNear,\r\n settings.now.camFar,\r\n );\r\n gfx.camera.setMinimalFov(settings.now.camFov);\r\n gfx.camera.position.z = settings.now.camDistance;\r\n gfx.camera.updateProjectionMatrix();\r\n gfx.camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n gfx.camera.layers.enable(gfxutils.LAYERS.VOLUME);\r\n gfx.camera.layers.enable(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n\r\n gfx.stereoCam = new THREE.StereoCamera();\r\n\r\n gfx.scene = new THREE.Scene();\r\n\r\n const color = chooseFogColor();\r\n gfx.scene.fog = new THREE.Fog(color, settings.now.camNear, settings.now.camFar);\r\n\r\n gfx.root = new gfxutils.RCGroup();\r\n gfx.scene.add(gfx.root);\r\n\r\n gfx.pivot = new gfxutils.RCGroup();\r\n gfx.root.add(gfx.pivot);\r\n\r\n gfx.selectionScene = new THREE.Scene();\r\n gfx.selectionRoot = new THREE.Group();\r\n gfx.selectionRoot.matrixAutoUpdate = false;\r\n gfx.selectionScene.add(gfx.selectionRoot);\r\n\r\n gfx.selectionPivot = new THREE.Group();\r\n gfx.selectionPivot.matrixAutoUpdate = false;\r\n gfx.selectionRoot.add(gfx.selectionPivot);\r\n\r\n const light12 = new THREE.DirectionalLight(0xffffff, 0.45);\r\n light12.position.set(0, 0.414, 1);\r\n light12.layers.enable(gfxutils.LAYERS.TRANSPARENT);\r\n light12.castShadow = true;\r\n light12.shadow.bias = 0.09;\r\n light12.shadow.radius = settings.now.shadow.radius;\r\n light12.shadow.camera.layers.set(gfxutils.LAYERS.SHADOWMAP);\r\n\r\n const pixelRatio = gfx.renderer.getPixelRatio();\r\n const shadowMapSize = Math.max(gfx.width, gfx.height) * pixelRatio;\r\n light12.shadow.mapSize.width = shadowMapSize;\r\n light12.shadow.mapSize.height = shadowMapSize;\r\n light12.target.position.set(0.0, 0.0, 0.0);\r\n gfx.scene.add(light12);\r\n gfx.scene.add(light12.target);\r\n\r\n const light3 = new THREE.AmbientLight(0x666666);\r\n light3.layers.enable(gfxutils.LAYERS.TRANSPARENT);\r\n gfx.scene.add(light3);\r\n\r\n // add axes\r\n gfx.axes = new Axes(gfx.root, gfx.camera);\r\n const deviceWidth = gfx.width * pixelRatio;\r\n const deviceHeight = gfx.height * pixelRatio;\r\n\r\n gfx.offscreenBuf = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat, depthBuffer: true,\r\n },\r\n );\r\n\r\n if (gfx.renderer.getContext().getExtension('WEBGL_depth_texture')) {\r\n gfx.offscreenBuf.depthTexture = new THREE.DepthTexture();\r\n gfx.offscreenBuf.depthTexture.type = THREE.UnsignedShortType;\r\n }\r\n\r\n gfx.offscreenBuf2 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf3 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf4 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.volBFTex = gfx.offscreenBuf3;\r\n gfx.volFFTex = gfx.offscreenBuf4;\r\n gfx.volWFFTex = gfx.offscreenBuf;\r\n\r\n // use float textures for volume rendering if possible\r\n if (gfx.renderer.getContext().getExtension('OES_texture_float')) {\r\n gfx.offscreenBuf5 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf6 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf7 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: true,\r\n },\r\n );\r\n\r\n gfx.volBFTex = gfx.offscreenBuf5;\r\n gfx.volFFTex = gfx.offscreenBuf6;\r\n gfx.volWFFTex = gfx.offscreenBuf7;\r\n } else {\r\n this.logger.warn('Device doesn\\'t support OES_texture_float extension');\r\n }\r\n\r\n gfx.stereoBufL = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.stereoBufR = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n this._gfx = gfx;\r\n this._showCanvas();\r\n\r\n this._embedWebXR(settings.now.stereo === 'WEBVR');\r\n\r\n this._container.appendChild(gfx.renderer2d.getElement());\r\n\r\n // add FPS counter\r\n const stats = new Stats();\r\n stats.domElement.style.position = 'absolute';\r\n stats.domElement.style.right = '0';\r\n stats.domElement.style.bottom = '0';\r\n this._container.appendChild(stats.domElement);\r\n this._fps = stats;\r\n this._fps.show(settings.now.fps);\r\n};\r\n\r\n/**\r\n * Setup event listeners.\r\n * @private\r\n */\r\nMiew.prototype._initListeners = function () {\r\n const self = this;\r\n window.addEventListener('resize', () => {\r\n self._onResize();\r\n });\r\n};\r\n\r\n/**\r\n * Try to add numbers to the base name to make it unique among visuals\r\n * @private\r\n */\r\nMiew.prototype._makeUniqueVisualName = function (baseName) {\r\n if (!baseName) {\r\n return Math.random().toString();\r\n }\r\n\r\n let name = baseName;\r\n let suffix = 1;\r\n while (this._visuals.hasOwnProperty(name)) {\r\n name = `${baseName} (${suffix.toString()})`;\r\n suffix++;\r\n }\r\n\r\n return name;\r\n};\r\n\r\n/**\r\n * Add visual to the viewer\r\n * @private\r\n */\r\nMiew.prototype._addVisual = function (visual) {\r\n if (!visual) {\r\n return null;\r\n }\r\n\r\n // change visual name in order to make it unique\r\n const name = this._makeUniqueVisualName(visual.name);\r\n visual.name = name;\r\n\r\n this._visuals[name] = visual;\r\n this._gfx.pivot.add(visual);\r\n if (visual.getSelectionGeo) {\r\n this._gfx.selectionPivot.add(visual.getSelectionGeo());\r\n }\r\n\r\n return name;\r\n};\r\n\r\n/**\r\n * Remove visual from the viewer\r\n * @private\r\n */\r\nMiew.prototype._removeVisual = function (visual) {\r\n let name = '';\r\n let obj = null;\r\n if (visual instanceof Visual) {\r\n ({ name } = visual);\r\n obj = visual;\r\n } else if (typeof visual === 'string') {\r\n name = visual;\r\n obj = this._visuals[name];\r\n }\r\n\r\n if (!obj || !this._visuals.hasOwnProperty(name) || this._visuals[name] !== obj) {\r\n return;\r\n }\r\n\r\n if (name === this._curVisualName) {\r\n this._curVisualName = undefined;\r\n }\r\n\r\n delete this._visuals[name];\r\n obj.release(); // removes nodes from scene\r\n\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Call specified function for each Visual\r\n * @private\r\n */\r\nMiew.prototype._forEachVisual = function (callback) {\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)) {\r\n callback(this._visuals[name]);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Release (destroy) all visuals in the scene\r\n * @private\r\n */\r\nMiew.prototype._releaseAllVisuals = function () {\r\n if (!this._gfx || !this._gfx.pivot) {\r\n return;\r\n }\r\n\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)) {\r\n this._visuals[name].release();\r\n }\r\n }\r\n\r\n this._visuals = {};\r\n};\r\n\r\n/**\r\n * Call specified function for each ComplexVisual\r\n * @private\r\n */\r\nMiew.prototype._forEachComplexVisual = function (callback) {\r\n if (!this._gfx || !this._gfx.pivot) {\r\n return;\r\n }\r\n\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)\r\n && this._visuals[name] instanceof ComplexVisual) {\r\n callback(this._visuals[name]);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Returns ComplexVisual with specified name, or current (if not found), or any, or null\r\n * @private\r\n */\r\nMiew.prototype._getComplexVisual = function (name) {\r\n name = name || this._curVisualName;\r\n let any = null;\r\n let named = null;\r\n this._forEachComplexVisual((visual) => {\r\n any = visual;\r\n if (visual.name === name) {\r\n named = visual;\r\n }\r\n });\r\n return named || any;\r\n};\r\n\r\n/**\r\n * Returns first found VolumeVisual (no more than one should be present actually)\r\n * @private\r\n */\r\nMiew.prototype._getVolumeVisual = function () {\r\n let any = null;\r\n this._forEachVisual((visual) => {\r\n if (visual instanceof VolumeVisual) {\r\n any = visual;\r\n }\r\n });\r\n return any;\r\n};\r\n\r\n/**\r\n * Returns ComplexVisual corresponding to specified complex\r\n * @private\r\n */\r\nMiew.prototype._getVisualForComplex = function (complex) {\r\n if (!complex) {\r\n return null;\r\n }\r\n\r\n let found = null;\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getComplex() === complex) {\r\n found = visual;\r\n }\r\n });\r\n return found;\r\n};\r\n\r\n/*\r\n * Get a list of names of visuals currently shown by the viewer\r\n */\r\nMiew.prototype.getVisuals = function () {\r\n return Object.keys(this._visuals);\r\n};\r\n\r\n/*\r\n * Get complex visuals count\r\n */\r\nMiew.prototype.getComplexVisualsCount = function () {\r\n let count = 0;\r\n this._forEachComplexVisual(() => count++);\r\n return count;\r\n};\r\n\r\n/*\r\n * Get current visual\r\n */\r\nMiew.prototype.getCurrentVisual = function () {\r\n return this._curVisualName;\r\n};\r\n\r\n/*\r\n * Set current visual.\r\n * All further operations will be performed on this visual (complex) if not stated otherwise.\r\n */\r\nMiew.prototype.setCurrentVisual = function (name) {\r\n if (!this._visuals[name]) {\r\n return;\r\n }\r\n\r\n this._curVisualName = name;\r\n};\r\n\r\n/**\r\n * Run the viewer, start processing update/render frames periodically.\r\n * Has no effect if already running.\r\n * @see Miew#halt\r\n */\r\nMiew.prototype.run = function () {\r\n if (!this._running) {\r\n this._running = true;\r\n if (this._halting) {\r\n this._halting = false;\r\n return;\r\n }\r\n\r\n this._objectControls.enable(true);\r\n this._interpolator.resume();\r\n\r\n this._requestAnimationFrame(() => this._onTick());\r\n }\r\n};\r\n\r\n/**\r\n * Request the viewer to stop.\r\n * Will be processed during the next frame.\r\n * @see Miew#run\r\n */\r\nMiew.prototype.halt = function () {\r\n if (this._running) {\r\n this._discardComponentEdit();\r\n this._discardFragmentEdit();\r\n this._objectControls.enable(false);\r\n this._interpolator.pause();\r\n this._halting = true;\r\n }\r\n};\r\n\r\n/**\r\n * Request the viewer to start / stop responsing\r\n * on hot keys.\r\n * @param enabled - start (true) or stop (false) response on hot keys.\r\n */\r\nMiew.prototype.enableHotKeys = function (enabled) {\r\n this._hotKeysEnabled = enabled;\r\n this._objectControls.enableHotkeys(enabled);\r\n};\r\n\r\n/**\r\n * Callback which processes window resize.\r\n * @private\r\n */\r\nMiew.prototype._onResize = function () {\r\n const gfx = this._gfx;\r\n if (!gfx) {\r\n return;\r\n }\r\n\r\n this._needRender = true;\r\n\r\n gfx.width = this._container.clientWidth;\r\n gfx.height = this._container.clientHeight;\r\n\r\n gfx.camera.aspect = gfx.width / gfx.height;\r\n gfx.camera.setMinimalFov(settings.now.camFov);\r\n gfx.camera.updateProjectionMatrix();\r\n\r\n gfx.renderer.setSize(gfx.width, gfx.height);\r\n gfx.renderer2d.setSize(gfx.width, gfx.height);\r\n\r\n this.dispatchEvent({ type: 'resize' });\r\n};\r\n\r\nMiew.prototype._resizeOffscreenBuffers = function (width, height, stereo) {\r\n const gfx = this._gfx;\r\n stereo = stereo || 'NONE';\r\n const isAnaglyph = (stereo === 'NONE' || stereo === 'ANAGLYPH');\r\n const multi = isAnaglyph ? 1 : 0.5;\r\n gfx.offscreenBuf.setSize(multi * width, height);\r\n gfx.offscreenBuf2.setSize(multi * width, height);\r\n gfx.offscreenBuf3.setSize(multi * width, height);\r\n gfx.offscreenBuf4.setSize(multi * width, height);\r\n if (gfx.offscreenBuf5) {\r\n gfx.offscreenBuf5.setSize(multi * width, height);\r\n }\r\n if (gfx.offscreenBuf6) {\r\n gfx.offscreenBuf6.setSize(multi * width, height);\r\n }\r\n if (gfx.offscreenBuf7) {\r\n gfx.offscreenBuf7.setSize(multi * width, height);\r\n }\r\n if (isAnaglyph) {\r\n gfx.stereoBufL.setSize(width, height);\r\n gfx.stereoBufR.setSize(width, height);\r\n }\r\n};\r\n\r\n/**\r\n * Callback which processes update/render frames.\r\n * @private\r\n */\r\nMiew.prototype._onTick = function () {\r\n if (this._halting) {\r\n this._running = false;\r\n this._halting = false;\r\n return;\r\n }\r\n\r\n this._fps.update();\r\n\r\n this._requestAnimationFrame(() => this._onTick());\r\n\r\n this._onUpdate();\r\n if (this._needRender) {\r\n this._onRender();\r\n this._needRender = !settings.now.suspendRender || settings.now.stereo === 'WEBVR';\r\n }\r\n};\r\n\r\nMiew.prototype._getBSphereRadius = function () {\r\n // calculate radius that would include all visuals\r\n let radius = 0;\r\n this._forEachVisual((visual) => {\r\n radius = Math.max(radius, visual.getBoundaries().boundingSphere.radius);\r\n });\r\n return radius * this._objectControls.getScale();\r\n};\r\n\r\n/**\r\n * Calculate bounding box that would include all visuals and being axis aligned in world defined by\r\n * transformation matrix: matrix\r\n * @param {Matrix4} matrix - transformation matrix.\r\n * @param {object} OBB - calculating bounding box.\r\n * @param {Vector3} OBB.center - OBB center.\r\n * @param {Vector3} OBB.halfSize - half magnitude of OBB sizes.\r\n */\r\nMiew.prototype.getOBB = (function () {\r\n const _bSphereForOneVisual = new THREE.Sphere();\r\n const _bBoxForOneVisual = new THREE.Box3();\r\n const _bBox = new THREE.Box3();\r\n\r\n const _invMatrix = new THREE.Matrix4();\r\n\r\n const _points = [\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n ];\r\n\r\n return function (matrix, OBB) {\r\n _bBox.makeEmpty();\r\n\r\n this._forEachVisual((visual) => {\r\n _bSphereForOneVisual.copy(visual.getBoundaries().boundingSphere);\r\n _bSphereForOneVisual.applyMatrix4(visual.matrixWorld).applyMatrix4(matrix);\r\n _bSphereForOneVisual.getBoundingBox(_bBoxForOneVisual);\r\n _bBox.union(_bBoxForOneVisual);\r\n });\r\n _bBox.getCenter(OBB.center);\r\n\r\n _invMatrix.copy(matrix).invert();\r\n OBB.center.applyMatrix4(_invMatrix);\r\n\r\n const { min } = _bBox;\r\n const { max } = _bBox;\r\n _points[0].set(min.x, min.y, min.z); // 000\r\n _points[1].set(max.x, min.y, min.z); // 100\r\n _points[2].set(min.x, max.y, min.z); // 010\r\n _points[3].set(min.x, min.y, max.z); // 001\r\n for (let i = 0, l = _points.length; i < l; i++) {\r\n _points[i].applyMatrix4(_invMatrix);\r\n }\r\n\r\n OBB.halfSize.set(\r\n Math.abs(_points[0].x - _points[1].x),\r\n Math.abs(_points[0].y - _points[2].y),\r\n Math.abs(_points[0].z - _points[3].z),\r\n ).multiplyScalar(0.5);\r\n };\r\n}());\r\n\r\nMiew.prototype._updateFog = function () {\r\n const gfx = this._gfx;\r\n\r\n if (settings.now.fog) {\r\n if (typeof gfx.scene.fog === 'undefined' || gfx.scene.fog === null) {\r\n const color = chooseFogColor();\r\n gfx.scene.fog = new THREE.Fog(color);\r\n this._setUberMaterialValues({ fog: settings.now.fog });\r\n }\r\n updateFogRange(gfx.scene.fog, gfx.camera.position.z, this._getBSphereRadius());\r\n } else if (gfx.scene.fog) {\r\n gfx.scene.fog = undefined;\r\n this._setUberMaterialValues({ fog: settings.now.fog });\r\n }\r\n};\r\n\r\nMiew.prototype._onUpdate = function () {\r\n if (this.isScriptingCommandAvailable !== undefined && this.isScriptingCommandAvailable() && !this._building) {\r\n this.callNextCmd();\r\n }\r\n\r\n this._objectControls.update();\r\n\r\n this._forEachComplexVisual((visual) => {\r\n visual.getComplex().update();\r\n });\r\n\r\n if (settings.now.autobuild && !this._loading.length && !this._building && this._needRebuild()) {\r\n this.rebuild();\r\n }\r\n\r\n if (!this._loading.length && !this._building && !this._needRebuild()) {\r\n this._updateView();\r\n }\r\n\r\n this._updateFog();\r\n\r\n if (this._gfx.renderer.xr.enabled) {\r\n this.webVR.updateMoleculeScale();\r\n }\r\n};\r\n\r\nMiew.prototype._onRender = function () {\r\n const gfx = this._gfx;\r\n\r\n // update all matrices\r\n gfx.scene.updateMatrixWorld();\r\n gfx.camera.updateMatrixWorld();\r\n\r\n this._clipPlaneUpdateValue(this._getBSphereRadius());\r\n this._fogFarUpdateValue();\r\n\r\n gfx.renderer.setRenderTarget(null);\r\n gfx.renderer.clear();\r\n\r\n this._renderFrame(settings.now.stereo);\r\n};\r\n\r\nMiew.prototype._renderFrame = (function () {\r\n const _anaglyphMat = new AnaglyphMaterial();\r\n const _size = new THREE.Vector2();\r\n\r\n return function (stereo) {\r\n const gfx = this._gfx;\r\n const { renderer } = gfx;\r\n\r\n renderer.getSize(_size);\r\n\r\n if (stereo !== 'NONE') {\r\n gfx.camera.focus = gfx.camera.position.z; // set focus to the center of the object\r\n gfx.stereoCam.aspect = 1.0;\r\n\r\n // in anaglyph mode we render full-size image for each eye\r\n // while in other stereo modes only half-size (two images on the screen)\r\n if (stereo === 'ANAGLYPH') {\r\n gfx.stereoCam.update(gfx.camera);\r\n } else {\r\n gfx.stereoCam.updateHalfSized(gfx.camera, settings.now.camFov);\r\n }\r\n }\r\n\r\n // resize offscreen buffers to match the target\r\n const pixelRatio = gfx.renderer.getPixelRatio();\r\n this._resizeOffscreenBuffers(_size.width * pixelRatio, _size.height * pixelRatio, stereo);\r\n\r\n this._renderShadowMap();\r\n\r\n switch (stereo) {\r\n case 'WEBVR':\r\n case 'NONE':\r\n this._renderScene(gfx.camera, false);\r\n break;\r\n case 'SIMPLE':\r\n case 'DISTORTED':\r\n renderer.setScissorTest(true);\r\n\r\n renderer.setScissor(0, 0, _size.width / 2, _size.height);\r\n renderer.setViewport(0, 0, _size.width / 2, _size.height);\r\n this._renderScene(this._gfx.stereoCam.cameraL, stereo === 'DISTORTED');\r\n\r\n renderer.setScissor(_size.width / 2, 0, _size.width / 2, _size.height);\r\n renderer.setViewport(_size.width / 2, 0, _size.width / 2, _size.height);\r\n this._renderScene(this._gfx.stereoCam.cameraR, stereo === 'DISTORTED');\r\n\r\n renderer.setScissorTest(false);\r\n break;\r\n case 'ANAGLYPH':\r\n this._renderScene(this._gfx.stereoCam.cameraL, false, gfx.stereoBufL);\r\n this._renderScene(this._gfx.stereoCam.cameraR, false, gfx.stereoBufR);\r\n renderer.setRenderTarget(null);\r\n _anaglyphMat.uniforms.srcL.value = gfx.stereoBufL.texture;\r\n _anaglyphMat.uniforms.srcR.value = gfx.stereoBufR.texture;\r\n gfx.renderer.renderScreenQuad(_anaglyphMat);\r\n break;\r\n default:\r\n }\r\n\r\n gfx.renderer2d.render(gfx.scene, gfx.camera);\r\n\r\n if (settings.now.axes && gfx.axes && !gfx.renderer.xr.enabled) {\r\n gfx.axes.render(renderer);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._onBgColorChanged = function () {\r\n const gfx = this._gfx;\r\n const color = chooseFogColor();\r\n if (gfx) {\r\n if (gfx.scene.fog) {\r\n gfx.scene.fog.color.set(color);\r\n }\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._onFogColorChanged = function () {\r\n const gfx = this._gfx;\r\n const color = chooseFogColor();\r\n if (gfx && gfx.scene.fog) {\r\n gfx.scene.fog.color.set(color);\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._setUberMaterialValues = function (values) {\r\n this._gfx.root.traverse((obj) => {\r\n if ((obj instanceof THREE.Mesh || obj instanceof THREE.LineSegments || obj instanceof THREE.Line)\r\n && obj.material instanceof UberMaterial) {\r\n obj.material.setValues(values);\r\n obj.material.needsUpdate = true;\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype._enableMRT = function (on, renderBuffer, textureBuffer) {\r\n const gfx = this._gfx;\r\n const gl = gfx.renderer.getContext();\r\n const ext = gl.getExtension('WEBGL_draw_buffers');\r\n const { properties } = gfx.renderer;\r\n\r\n if (!on) {\r\n ext.drawBuffersWEBGL([gl.COLOR_ATTACHMENT0, null]);\r\n return;\r\n }\r\n\r\n // take extra texture from Texture Buffer\r\n gfx.renderer.setRenderTarget(textureBuffer);\r\n const tx8 = properties.get(textureBuffer.texture).__webglTexture;\r\n gl.bindTexture(gl.TEXTURE_2D, tx8);\r\n\r\n // take texture and framebuffer from renderbuffer\r\n gfx.renderer.setRenderTarget(renderBuffer);\r\n const fb = properties.get(renderBuffer).__webglFramebuffer;\r\n const tx = properties.get(renderBuffer.texture).__webglTexture;\r\n\r\n // set framebuffer\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb);\r\n fb.width = renderBuffer.width;\r\n fb.height = renderBuffer.height;\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tx, 0);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, ext.COLOR_ATTACHMENT1_WEBGL, gl.TEXTURE_2D, tx8, 0);\r\n\r\n // mapping textures\r\n ext.drawBuffersWEBGL([gl.COLOR_ATTACHMENT0, ext.COLOR_ATTACHMENT1_WEBGL]);\r\n};\r\n\r\nMiew.prototype._renderScene = (function () {\r\n return function (camera, distortion, target) {\r\n distortion = distortion || false;\r\n target = target || null;\r\n\r\n const gfx = this._gfx;\r\n\r\n // render to offscreen buffer\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(target);\r\n gfx.renderer.clear();\r\n if (gfx.renderer.xr.enabled) {\r\n gfx.renderer.render(gfx.scene, camera);\r\n return;\r\n }\r\n\r\n // clean buffer for normals texture\r\n gfx.renderer.setClearColor(0x000000, 0.0);\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf4);\r\n gfx.renderer.clearColor();\r\n\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.clear();\r\n\r\n const bHaveComplexes = (this._getComplexVisual() !== null);\r\n const volumeVisual = this._getVolumeVisual();\r\n const ssao = bHaveComplexes && settings.now.ao;\r\n\r\n if (ssao) {\r\n this._enableMRT(true, gfx.offscreenBuf, gfx.offscreenBuf4);\r\n }\r\n\r\n if (settings.now.transparency === 'prepass') {\r\n this._renderWithPrepassTransparency(camera, gfx.offscreenBuf);\r\n } else if (settings.now.transparency === 'standard') {\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.render(gfx.scene, camera);\r\n }\r\n\r\n if (ssao) {\r\n this._enableMRT(false, null, null);\r\n }\r\n\r\n // when fxaa we should get resulting image in temp off-screen buff2 for further postprocessing with fxaa filter\r\n // otherwise we render to canvas\r\n const outline = bHaveComplexes && settings.now.outline.on;\r\n const fxaa = bHaveComplexes && settings.now.fxaa;\r\n const volume = (volumeVisual !== null) && (volumeVisual.getMesh().material != null);\r\n let dstBuffer = (ssao || outline || volume || fxaa || distortion) ? gfx.offscreenBuf2 : target;\r\n let srcBuffer = gfx.offscreenBuf;\r\n\r\n if (ssao) {\r\n this._performAO(\r\n srcBuffer,\r\n gfx.offscreenBuf4,\r\n gfx.offscreenBuf.depthTexture,\r\n dstBuffer,\r\n gfx.offscreenBuf3,\r\n gfx.offscreenBuf2,\r\n );\r\n if (!fxaa && !distortion && !volume && !outline) {\r\n srcBuffer = dstBuffer;\r\n dstBuffer = target;\r\n gfx.renderer.setRenderTarget(dstBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 1.0);\r\n }\r\n } else {\r\n // just copy color buffer to dst buffer\r\n gfx.renderer.setRenderTarget(dstBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 1.0);\r\n }\r\n\r\n // outline\r\n if (outline) {\r\n srcBuffer = dstBuffer;\r\n dstBuffer = (volume || fxaa || distortion) ? gfx.offscreenBuf3 : target;\r\n if (srcBuffer != null) {\r\n this._renderOutline(camera, gfx.offscreenBuf, srcBuffer, dstBuffer);\r\n }\r\n }\r\n\r\n // render selected part with outline material\r\n this._renderSelection(camera, gfx.offscreenBuf, dstBuffer);\r\n\r\n if (volume) {\r\n // copy current picture to the buffer that retains depth-data of the original molecule render\r\n // so that volume renderer could use depth-test\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.renderScreenQuadFromTex(dstBuffer.texture, 1.0);\r\n dstBuffer = gfx.offscreenBuf;\r\n this._renderVolume(volumeVisual, camera, dstBuffer, gfx.volBFTex, gfx.volFFTex, gfx.volWFFTex);\r\n\r\n // if this is the last stage -- copy image to target\r\n if (!fxaa && !distortion) {\r\n gfx.renderer.setRenderTarget(target);\r\n gfx.renderer.renderScreenQuadFromTex(dstBuffer.texture, 1.0);\r\n }\r\n }\r\n\r\n srcBuffer = dstBuffer;\r\n\r\n if (fxaa) {\r\n dstBuffer = distortion ? gfx.offscreenBuf4 : target;\r\n this._performFXAA(srcBuffer, dstBuffer);\r\n srcBuffer = dstBuffer;\r\n }\r\n\r\n if (distortion) {\r\n dstBuffer = target;\r\n this._performDistortion(srcBuffer, dstBuffer, true);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._performDistortion = (function () {\r\n const _scene = new THREE.Scene();\r\n const _camera = new THREE.OrthographicCamera(-1.0, 1.0, 1.0, -1.0, -500, 1000);\r\n\r\n const _material = new THREE.RawShaderMaterial({\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n aberration: { type: 'fv3', value: new THREE.Vector3(1.0) },\r\n },\r\n vertexShader: vertexScreenQuadShader,\r\n fragmentShader: fragmentScreenQuadFromDistTex,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n const _geo = gfxutils.buildDistorionMesh(10, 10, settings.now.debug.stereoBarrel);\r\n _scene.add(new meshes.Mesh(_geo, _material));\r\n\r\n return function (srcBuffer, targetBuffer, mesh) {\r\n this._gfx.renderer.setRenderTarget(targetBuffer);\r\n this._gfx.renderer.clear();\r\n\r\n if (mesh) {\r\n _material.uniforms.srcTex.value = srcBuffer.texture;\r\n _material.uniforms.aberration.value.set(0.995, 1.0, 1.01);\r\n this._gfx.renderer.render(_scene, _camera);\r\n } else {\r\n this._gfx.renderer.renderScreenQuadFromTexWithDistortion(srcBuffer, settings.now.debug.stereoBarrel);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._renderOutline = (function () {\r\n const _outlineMaterial = new OutlineMaterial({ depth: true });\r\n\r\n return function (camera, srcDepthBuffer, srcColorBuffer, targetBuffer) {\r\n const self = this;\r\n const gfx = self._gfx;\r\n\r\n // apply Sobel filter -- draw outline\r\n _outlineMaterial.uniforms.srcTex.value = srcColorBuffer.texture;\r\n _outlineMaterial.uniforms.srcDepthTex.value = srcDepthBuffer.depthTexture;\r\n _outlineMaterial.uniforms.srcTexSize.value.set(srcDepthBuffer.width, srcDepthBuffer.height);\r\n _outlineMaterial.uniforms.color.value = new THREE.Color(settings.now.outline.color);\r\n _outlineMaterial.uniforms.threshold.value = settings.now.outline.threshold;\r\n _outlineMaterial.uniforms.thickness.value = new THREE.Vector2(\r\n settings.now.outline.thickness,\r\n settings.now.outline.thickness,\r\n );\r\n\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuad(_outlineMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._renderShadowMap = (function () {\r\n const pars = { minFilter: THREE.NearestFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat };\r\n\r\n return function () {\r\n if (!settings.now.shadow.on) {\r\n return;\r\n }\r\n\r\n const gfx = this._gfx;\r\n const currentRenderTarget = gfx.renderer.getRenderTarget();\r\n const activeCubeFace = gfx.renderer.getActiveCubeFace();\r\n const activeMipmapLevel = gfx.renderer.getActiveMipmapLevel();\r\n\r\n const _state = gfx.renderer.state;\r\n\r\n // Set GL state for depth map.\r\n _state.setBlending(THREE.NoBlending);\r\n _state.buffers.color.setClear(1, 1, 1, 1);\r\n _state.buffers.depth.setTest(true);\r\n _state.setScissorTest(false);\r\n\r\n for (let i = 0; i < gfx.scene.children.length; i++) {\r\n if (gfx.scene.children[i].type === 'DirectionalLight') {\r\n const light = gfx.scene.children[i];\r\n\r\n if (light.shadow.map == null) {\r\n light.shadow.map = new THREE.WebGLRenderTarget(light.shadow.mapSize.width, light.shadow.mapSize.height, pars);\r\n light.shadow.camera.updateProjectionMatrix();\r\n }\r\n light.shadow.updateMatrices(light);\r\n\r\n gfx.renderer.setRenderTarget(light.shadow.map);\r\n gfx.renderer.clear();\r\n\r\n gfx.renderer.render(gfx.scene, light.shadow.camera);\r\n }\r\n }\r\n gfx.renderer.setRenderTarget(currentRenderTarget, activeCubeFace, activeMipmapLevel);\r\n };\r\n}());\r\n\r\n/**\r\n * Check if there is selection which must be rendered or not.\r\n * @private\r\n * @returns {boolean} true on existing selection to render\r\n */\r\nMiew.prototype._hasSelectionToRender = function () {\r\n const selPivot = this._gfx.selectionPivot;\r\n\r\n for (let i = 0; i < selPivot.children.length; i++) {\r\n const selPivotChild = selPivot.children[i];\r\n if (selPivotChild.children.length > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nMiew.prototype._renderSelection = (function () {\r\n const _outlineMaterial = new OutlineMaterial();\r\n\r\n return function (camera, srcBuffer, targetBuffer) {\r\n const self = this;\r\n const gfx = self._gfx;\r\n\r\n // clear offscreen buffer (leave z-buffer intact)\r\n gfx.renderer.setClearColor('black', 0);\r\n\r\n // render selection to offscreen buffer\r\n gfx.renderer.setRenderTarget(srcBuffer);\r\n gfx.renderer.clear(true, false, false);\r\n if (self._hasSelectionToRender()) {\r\n gfx.selectionRoot.matrix = gfx.root.matrix;\r\n gfx.selectionPivot.matrix = gfx.pivot.matrix;\r\n gfx.renderer.render(gfx.selectionScene, camera);\r\n } else {\r\n // just render something to force \"target clear\" operation to finish\r\n gfx.renderer.renderDummyQuad();\r\n }\r\n\r\n // overlay to screen\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 0.6);\r\n\r\n // apply Sobel filter -- draw outline\r\n _outlineMaterial.uniforms.srcTex.value = srcBuffer.texture;\r\n _outlineMaterial.uniforms.srcTexSize.value.set(srcBuffer.width, srcBuffer.height);\r\n gfx.renderer.renderScreenQuad(_outlineMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._checkVolumeRenderingSupport = function (renderTarget) {\r\n if (!renderTarget) {\r\n return false;\r\n }\r\n const gfx = this._gfx;\r\n const oldRT = gfx.renderer.getRenderTarget();\r\n\r\n gfx.renderer.setRenderTarget(renderTarget);\r\n const context = gfx.renderer.getContext();\r\n const result = context.checkFramebufferStatus(context.FRAMEBUFFER);\r\n gfx.renderer.setRenderTarget(oldRT);\r\n if (result !== context.FRAMEBUFFER_COMPLETE) {\r\n // floatFrameBufferWarning = ;\r\n this.logger.warn('Device doesn\\'t support electron density rendering');\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nMiew.prototype._renderVolume = (function () {\r\n const volumeBFMat = new VolumeMaterial.BackFacePosMaterial();\r\n const volumeFFMat = new VolumeMaterial.FrontFacePosMaterial();\r\n const cubeOffsetMat = new THREE.Matrix4().makeTranslation(0.5, 0.5, 0.5);\r\n const world2colorMat = new THREE.Matrix4();\r\n\r\n let volumeRenderingSupported;\r\n\r\n return function (volumeVisual, camera, dstBuf, tmpBuf1, tmpBuf2, tmpBuf3) {\r\n const gfx = this._gfx;\r\n\r\n if (typeof volumeRenderingSupported === 'undefined') {\r\n volumeRenderingSupported = this._checkVolumeRenderingSupport(tmpBuf1);\r\n }\r\n\r\n if (!volumeRenderingSupported) {\r\n return;\r\n }\r\n\r\n const mesh = volumeVisual.getMesh();\r\n\r\n mesh.rebuild(gfx.camera);\r\n\r\n // use main camera to prepare special textures to be used by volumetric rendering\r\n // these textures have the size of the window and are stored in offscreen buffers\r\n gfx.renderer.setClearColor('black', 0);\r\n gfx.renderer.setRenderTarget(tmpBuf1);\r\n gfx.renderer.clear();\r\n gfx.renderer.setRenderTarget(tmpBuf2);\r\n gfx.renderer.clear();\r\n gfx.renderer.setRenderTarget(tmpBuf3);\r\n gfx.renderer.clear();\r\n\r\n gfx.renderer.setRenderTarget(tmpBuf1);\r\n // draw plane with its own material, because it differs slightly from volumeBFMat\r\n camera.layers.set(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.scene.overrideMaterial = volumeBFMat;\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n gfx.renderer.setRenderTarget(tmpBuf2);\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.scene.overrideMaterial = volumeFFMat;\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n gfx.scene.overrideMaterial = null;\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n\r\n // prepare texture that contains molecule positions\r\n world2colorMat.copy(mesh.matrixWorld).invert();\r\n UberMaterial.prototype.uberOptions.world2colorMatrix.multiplyMatrices(cubeOffsetMat, world2colorMat);\r\n camera.layers.set(gfxutils.LAYERS.COLOR_FROM_POSITION);\r\n gfx.renderer.setRenderTarget(tmpBuf3);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // render volume\r\n const vm = mesh.material;\r\n vm.uniforms._BFRight.value = tmpBuf1.texture;\r\n vm.uniforms._FFRight.value = tmpBuf2.texture;\r\n vm.uniforms._WFFRight.value = tmpBuf3.texture;\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.renderer.setRenderTarget(dstBuf);\r\n gfx.renderer.render(gfx.scene, camera);\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n };\r\n}());\r\n\r\n/* Render scene with 'ZPrepass transparency Effect'\r\n * Idea: transparent objects are rendered in two passes. The first one writes result only into depth buffer.\r\n * The second pass reads depth buffer and writes only to color buffer. The method results in\r\n * correct image of front part of the semi-transparent objects, but we can see only front transparent objects\r\n * and opaque objects inside, there is no transparent objects inside.\r\n * Notes: 1. Opaque objects should be rendered strictly before semi-transparent ones.\r\n * 2. Realization doesn't use camera layers because scene traversing is used for material changes and\r\n * we can use it to select needed meshes and don't complicate meshes builders with layers\r\n */\r\nMiew.prototype._renderWithPrepassTransparency = (function () {\r\n return function (camera, targetBuffer) {\r\n const gfx = this._gfx;\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n\r\n // opaque objects\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // transparent objects z prepass\r\n camera.layers.set(gfxutils.LAYERS.PREPASS_TRANSPARENT);\r\n gfx.renderer.getContext().colorMask(false, false, false, false); // don't update color buffer\r\n gfx.renderer.render(gfx.scene, camera);\r\n gfx.renderer.getContext().colorMask(true, true, true, true); // update color buffer\r\n\r\n // transparent objects color pass\r\n camera.layers.set(gfxutils.LAYERS.TRANSPARENT);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // restore default layer\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n };\r\n}());\r\n\r\nMiew.prototype._performFXAA = (function () {\r\n const _fxaaMaterial = new FXAAMaterial();\r\n\r\n return function (srcBuffer, targetBuffer) {\r\n if (typeof srcBuffer === 'undefined' || typeof targetBuffer === 'undefined') {\r\n return;\r\n }\r\n\r\n const gfx = this._gfx;\r\n\r\n // clear canvas\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.clear();\r\n\r\n // do fxaa processing of offscreen buff2\r\n _fxaaMaterial.uniforms.srcTex.value = srcBuffer.texture;\r\n _fxaaMaterial.uniforms.srcTexelSize.value.set(1.0 / srcBuffer.width, 1.0 / srcBuffer.height);\r\n _fxaaMaterial.uniforms.bgColor.value.set(settings.now.bg.color);\r\n\r\n if (_fxaaMaterial.bgTransparent !== settings.now.bg.transparent) {\r\n _fxaaMaterial.setValues({ bgTransparent: settings.now.bg.transparent });\r\n _fxaaMaterial.needsUpdate = true;\r\n }\r\n gfx.renderer.renderScreenQuad(_fxaaMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._performAO = (function () {\r\n const _aoMaterial = new AOMaterial();\r\n const _horBlurMaterial = new AOHorBlurMaterial();\r\n const _vertBlurMaterial = new AOVertBlurWithBlendMaterial();\r\n\r\n const _scale = new THREE.Vector3();\r\n return function (srcColorBuffer, normalBuffer, srcDepthTexture, targetBuffer, tempBuffer, tempBuffer1) {\r\n if (!srcColorBuffer || !normalBuffer || !srcDepthTexture || !targetBuffer || !tempBuffer || !tempBuffer1) {\r\n return;\r\n }\r\n const gfx = this._gfx;\r\n const tanHalfFOV = Math.tan(THREE.MathUtils.DEG2RAD * 0.5 * gfx.camera.fov);\r\n\r\n _aoMaterial.uniforms.diffuseTexture.value = srcColorBuffer.texture;\r\n _aoMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n _aoMaterial.uniforms.normalTexture.value = normalBuffer.texture;\r\n _aoMaterial.uniforms.srcTexelSize.value.set(1.0 / srcColorBuffer.width, 1.0 / srcColorBuffer.height);\r\n _aoMaterial.uniforms.camNearFar.value.set(gfx.camera.near, gfx.camera.far);\r\n _aoMaterial.uniforms.projMatrix.value = gfx.camera.projectionMatrix;\r\n _aoMaterial.uniforms.aspectRatio.value = gfx.camera.aspect;\r\n _aoMaterial.uniforms.tanHalfFOV.value = tanHalfFOV;\r\n gfx.root.matrix.extractScale(_scale);\r\n _aoMaterial.uniforms.kernelRadius.value = settings.now.debug.ssaoKernelRadius * _scale.x;\r\n _aoMaterial.uniforms.depthThreshold.value = 2.0 * this._getBSphereRadius(); // diameter\r\n _aoMaterial.uniforms.factor.value = settings.now.debug.ssaoFactor;\r\n // N: should be tempBuffer1 for proper use of buffers (see buffers using outside the function)\r\n gfx.renderer.setRenderTarget(tempBuffer1);\r\n gfx.renderer.renderScreenQuad(_aoMaterial);\r\n\r\n _horBlurMaterial.uniforms.aoMap.value = tempBuffer1.texture;\r\n _horBlurMaterial.uniforms.srcTexelSize.value.set(1.0 / tempBuffer1.width, 1.0 / tempBuffer1.height);\r\n _horBlurMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n gfx.renderer.setRenderTarget(tempBuffer);\r\n gfx.renderer.renderScreenQuad(_horBlurMaterial);\r\n\r\n _vertBlurMaterial.uniforms.aoMap.value = tempBuffer.texture;\r\n _vertBlurMaterial.uniforms.diffuseTexture.value = srcColorBuffer.texture;\r\n _vertBlurMaterial.uniforms.srcTexelSize.value.set(1.0 / tempBuffer.width, 1.0 / tempBuffer.height);\r\n _vertBlurMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n _vertBlurMaterial.uniforms.projMatrix.value = gfx.camera.projectionMatrix;\r\n _vertBlurMaterial.uniforms.aspectRatio.value = gfx.camera.aspect;\r\n _vertBlurMaterial.uniforms.tanHalfFOV.value = tanHalfFOV;\r\n const { fog } = gfx.scene;\r\n if (fog) {\r\n _vertBlurMaterial.uniforms.fogNearFar.value.set(fog.near, fog.far);\r\n _vertBlurMaterial.uniforms.fogColor.value.set(fog.color.r, fog.color.g, fog.color.b, settings.now.fogAlpha);\r\n }\r\n if ((_vertBlurMaterial.useFog !== settings.now.fog)\r\n || (_vertBlurMaterial.fogTransparent !== settings.now.bg.transparent)) {\r\n _vertBlurMaterial.setValues({ useFog: settings.now.fog, fogTransparent: settings.now.bg.transparent });\r\n _vertBlurMaterial.needsUpdate = true;\r\n }\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuad(_vertBlurMaterial);\r\n };\r\n}());\r\n\r\n/**\r\n * Reset the viewer, unload molecules.\r\n * @param {boolean=} keepReps - Keep representations while resetting viewer state.\r\n */\r\nMiew.prototype.reset = function (/* keepReps */) {\r\n if (this._picker) {\r\n this._picker.reset();\r\n }\r\n this._lastPick = null;\r\n\r\n this._releaseAllVisuals();\r\n\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this._resetObjects();\r\n\r\n if (this._gfx) {\r\n gfxutils.clearTree(this._gfx.pivot);\r\n this._gfx.renderer2d.reset();\r\n }\r\n\r\n this.setNeedRender();\r\n};\r\n\r\nMiew.prototype._resetScene = function () {\r\n this._objectControls.reset();\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n this.resetReps();\r\n this.resetPivot();\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype.resetView = function () {\r\n // reset controls\r\n if (this._picker) {\r\n this._picker.reset();\r\n }\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._resetScene();\r\n\r\n // reset selection\r\n this._forEachComplexVisual((visual) => {\r\n visual.updateSelectionMask({});\r\n visual.rebuildSelectionGeometry();\r\n });\r\n};\r\n\r\nMiew.prototype._export = function (format) {\r\n const TheExporter = _.head(io.exporters.find({ format }));\r\n if (!TheExporter) {\r\n this.logger.error('Could not find suitable exporter for this source');\r\n return Promise.reject(new Error('Could not find suitable exporter for this source'));\r\n }\r\n this.dispatchEvent({ type: 'exporting' });\r\n\r\n if (this._visuals[this._curVisualName] instanceof ComplexVisual) {\r\n let dataSource = null;\r\n if (TheExporter.SourceClass === ComplexVisual) {\r\n dataSource = this._visuals[this._curVisualName];\r\n } else if (TheExporter.SourceClass === Complex) {\r\n dataSource = this._visuals[this._curVisualName]._complex;\r\n }\r\n const exporter = new TheExporter(dataSource, { miewVersion: Miew.VERSION });\r\n return exporter.export().then((data) => data);\r\n }\r\n if (this._visuals[this._curVisualName] instanceof VolumeVisual) {\r\n return Promise.reject(new Error('Sorry, exporter for volume data not implemented yet'));\r\n }\r\n return Promise.reject(new Error('Unexpected format of data'));\r\n};\r\n\r\nconst rePdbId = /^(?:(pdb|cif|ccp4|dsn6):\\s*)?(\\d[a-z\\d]{3})$/i;\r\nconst rePubchem = /^(?:pc|pubchem):\\s*([a-z]+)$/i;\r\nconst reUrlScheme = /^([a-z][a-z\\d\\-+.]*):/i;\r\n\r\nfunction resolveSourceShortcut(source, opts) {\r\n if (!_.isString(source)) {\r\n return source;\r\n }\r\n\r\n // e.g. \"cif:1CRN\"\r\n const matchesPdbId = rePdbId.exec(source);\r\n if (matchesPdbId) {\r\n let [, format = 'pdb', id] = matchesPdbId;\r\n\r\n format = format.toLowerCase();\r\n id = id.toUpperCase();\r\n\r\n switch (format) {\r\n case 'pdb':\r\n source = `https://files.rcsb.org/download/${id}.pdb`;\r\n break;\r\n case 'cif':\r\n source = `https://files.rcsb.org/download/${id}.cif`;\r\n break;\r\n case 'ccp4':\r\n source = `https://www.ebi.ac.uk/pdbe/coordinates/files/${id.toLowerCase()}.ccp4`;\r\n break;\r\n case 'dsn6':\r\n source = `https://edmaps.rcsb.org/maps/${id.toLowerCase()}_2fofc.dsn6`;\r\n break;\r\n default:\r\n throw new Error('Unexpected data format shortcut');\r\n }\r\n\r\n opts.fileType = format;\r\n opts.fileName = `${id}.${format}`;\r\n opts.sourceType = 'url';\r\n return source;\r\n }\r\n\r\n // e.g. \"pc:aspirin\"\r\n const matchesPubchem = rePubchem.exec(source);\r\n if (matchesPubchem) {\r\n const compound = matchesPubchem[1].toLowerCase();\r\n source = `https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/${compound}/JSON?record_type=3d`;\r\n opts.fileType = 'pubchem';\r\n opts.fileName = `${compound}.json`;\r\n opts.sourceType = 'url';\r\n return source;\r\n }\r\n\r\n // otherwise is should be an URL\r\n if (opts.sourceType === 'url' || opts.sourceType === undefined) {\r\n opts.sourceType = 'url';\r\n\r\n // e.g. \"./data/1CRN.pdb\"\r\n if (!reUrlScheme.test(source)) {\r\n source = utils.resolveURL(source);\r\n }\r\n }\r\n\r\n return source;\r\n}\r\n\r\nfunction updateBinaryMode(opts) {\r\n let { binary } = opts;\r\n\r\n // detect by format\r\n if (opts.fileType !== undefined) {\r\n const TheParser = _.head(io.parsers.find({ format: opts.fileType }));\r\n if (TheParser) {\r\n binary = TheParser.binary || false;\r\n } else {\r\n throw new Error('Could not find suitable parser for this format');\r\n }\r\n }\r\n\r\n // detect by file extension\r\n if (binary === undefined && opts.fileExt !== undefined) {\r\n const TheParser = _.head(io.parsers.find({ ext: opts.fileExt }));\r\n if (TheParser) {\r\n binary = TheParser.binary || false;\r\n }\r\n }\r\n\r\n // temporary workaround for animation\r\n if (opts.fileExt !== undefined && opts.fileExt.toLowerCase() === '.man') {\r\n opts.binary = true;\r\n opts.animation = true; // who cares?\r\n }\r\n\r\n // update if detected\r\n if (binary !== undefined) {\r\n if (opts.binary !== undefined && opts.binary !== binary) {\r\n opts.context.logger.warn('Overriding incorrect binary mode');\r\n }\r\n }\r\n\r\n opts.binary = binary || false;\r\n}\r\n\r\nfunction _fetchData(source, opts, job) {\r\n return new Promise(((resolve) => {\r\n if (job.shouldCancel()) {\r\n throw new Error('Operation cancelled');\r\n }\r\n job.notify({ type: 'fetching' });\r\n\r\n // allow for source shortcuts\r\n source = resolveSourceShortcut(source, opts);\r\n\r\n // detect a proper loader\r\n const TheLoader = _.head(io.loaders.find({ type: opts.sourceType, source }));\r\n if (!TheLoader) {\r\n throw new Error(LOADER_NOT_FOUND);\r\n }\r\n\r\n // split file name\r\n const fileName = opts.fileName || TheLoader.extractName(source);\r\n if (fileName) {\r\n const [name, fileExt] = utils.splitFileName(fileName);\r\n _.defaults(opts, { name, fileExt, fileName });\r\n }\r\n\r\n // should it be text or binary?\r\n updateBinaryMode(opts);\r\n\r\n // FIXME: All new settings retrieved from server are applied after the loading is complete. However, we need some\r\n // flags to alter the loading process itself. Here we apply them in advance. Dirty hack. Kill the server, remove\r\n // all hacks and everybody's happy.\r\n let newOptions = _.get(opts, 'preset.expression');\r\n if (!_.isUndefined(newOptions)) {\r\n newOptions = JSON.parse(newOptions);\r\n if (newOptions && newOptions.settings) {\r\n const keys = ['singleUnit'];\r\n for (let keyIndex = 0, keyCount = keys.length; keyIndex < keyCount; ++keyIndex) {\r\n const key = keys[keyIndex];\r\n const value = _.get(newOptions.settings, key);\r\n if (!_.isUndefined(value)) {\r\n settings.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // create a loader\r\n const loader = new TheLoader(source, opts);\r\n loader.context = opts.context;\r\n job.addEventListener('cancel', () => loader.abort());\r\n\r\n loader.addEventListener('progress', (event) => {\r\n if (event.lengthComputable && event.total > 0) {\r\n reportProgress(loader.logger, 'Fetching', event.loaded / event.total);\r\n } else {\r\n reportProgress(loader.logger, 'Fetching');\r\n }\r\n });\r\n\r\n console.time('fetch');\r\n const promise = loader.load()\r\n .then((data) => {\r\n console.timeEnd('fetch');\r\n opts.context.logger.info('Fetching finished');\r\n job.notify({ type: 'fetchingDone', data });\r\n return data;\r\n })\r\n .catch((error) => {\r\n console.timeEnd('fetch');\r\n opts.context.logger.debug(error.message);\r\n if (error.stack) {\r\n opts.context.logger.debug(error.stack);\r\n }\r\n opts.context.logger.error('Fetching failed');\r\n job.notify({ type: 'fetchingDone', error });\r\n throw error;\r\n });\r\n resolve(promise);\r\n }));\r\n}\r\n\r\nfunction _parseData(data, opts, job) {\r\n if (job.shouldCancel()) {\r\n return Promise.reject(new Error('Operation cancelled'));\r\n }\r\n\r\n job.notify({ type: 'parsing' });\r\n\r\n const TheParser = _.head(io.parsers.find({ format: opts.fileType, ext: opts.fileExt, data }));\r\n if (!TheParser) {\r\n return Promise.reject(new Error('Could not find suitable parser'));\r\n }\r\n\r\n const parser = new TheParser(data, opts);\r\n parser.context = opts.context;\r\n job.addEventListener('cancel', () => parser.abort());\r\n\r\n console.time('parse');\r\n return parser.parse()\r\n .then((dataSet) => {\r\n console.timeEnd('parse');\r\n job.notify({ type: 'parsingDone', data: dataSet });\r\n return dataSet;\r\n })\r\n .catch((error) => {\r\n console.timeEnd('parse');\r\n opts.error = error;\r\n opts.context.logger.debug(error.message);\r\n if (error.stack) {\r\n opts.context.logger.debug(error.stack);\r\n }\r\n opts.context.logger.error('Parsing failed');\r\n job.notify({ type: 'parsingDone', error });\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * Load molecule asynchronously.\r\n * @param {string|File} source - Molecule source to load (e.g. PDB ID, URL or File object).\r\n * @param {object=} opts - Options.\r\n * @param {string=} opts.sourceType - Data source type (e.g. 'url', 'file').\r\n * @param {string=} opts.fileType - Data contents type (e.g. 'pdb', 'cml').\r\n * @param {string=} opts.mdFile - .nc file path.\r\n * @param {boolean=} opts.keepRepsInfo - prevent reset of object and reps information.\r\n * @returns {Promise} name of the visual that was added to the viewer\r\n */\r\nMiew.prototype.load = function (source, opts) {\r\n opts = _.merge({}, opts, {\r\n context: this,\r\n });\r\n\r\n // for a single-file scenario\r\n if (!this.settings.now.use.multiFile) {\r\n // abort all loaders in progress\r\n if (this._loading.length) {\r\n this._loading.forEach((job) => {\r\n job.cancel();\r\n });\r\n this._loading.length = 0;\r\n }\r\n\r\n // reset\r\n if (!opts.animation) { // FIXME: sometimes it is set AFTERWARDS!\r\n this.reset(true);\r\n }\r\n }\r\n\r\n this._interpolator.reset();\r\n\r\n this.dispatchEvent({ type: 'loading', options: opts, source });\r\n\r\n const job = new JobHandle();\r\n this._loading.push(job);\r\n job.addEventListener('notification', (e) => {\r\n this.dispatchEvent(e.slaveEvent);\r\n });\r\n\r\n this._spinner.spin(this._container);\r\n\r\n const onLoadEnd = (anything) => {\r\n const jobIndex = this._loading.indexOf(job);\r\n if (jobIndex !== -1) {\r\n this._loading.splice(jobIndex, 1);\r\n }\r\n this._spinner.stop();\r\n this._refreshTitle();\r\n job.notify({ type: 'loadingDone', anything });\r\n return anything;\r\n };\r\n\r\n return _fetchData(source, opts, job)\r\n .then((data) => _parseData(data, opts, job))\r\n .then((object) => {\r\n const name = this._onLoad(object, opts);\r\n return onLoadEnd(name);\r\n })\r\n .catch((err) => {\r\n this.logger.error('Could not load data');\r\n this.logger.debug(err);\r\n throw onLoadEnd(err);\r\n });\r\n};\r\n\r\n/**\r\n * Unload molecule (delete corresponding visual).\r\n * @param {string=} name - name of the visual\r\n */\r\nMiew.prototype.unload = function (name) {\r\n this._removeVisual(name || this.getCurrentVisual());\r\n this.resetPivot();\r\n if (settings.now.shadow.on) {\r\n this._updateShadowCamera();\r\n }\r\n};\r\n\r\n/**\r\n * Start new animation. Now is broken.\r\n * @param fileData - new data to animate\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._startAnimation = function (fileData) {\r\n this._stopAnimation();\r\n const self = this;\r\n const visual = this._getComplexVisual();\r\n if (visual === null) {\r\n this.logger.error('Unable to start animation - no molecule is loaded.');\r\n return;\r\n }\r\n try {\r\n this._frameInfo = new FrameInfo(\r\n visual.getComplex(),\r\n fileData,\r\n {\r\n onLoadStatusChanged() {\r\n self.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: self._isAnimating,\r\n isLoading: self._frameInfo ? self._frameInfo.isLoading : true,\r\n },\r\n });\r\n },\r\n onError(message) {\r\n self._stopAnimation();\r\n self.logger.error(message);\r\n },\r\n },\r\n );\r\n } catch (e) {\r\n this.logger.error('Animation file does not fit to current complex!');\r\n return;\r\n }\r\n this._continueAnimation();\r\n};\r\n\r\n/**\r\n * Pause current animation. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._pauseAnimation = function () {\r\n if (this._animInterval === null) {\r\n return;\r\n }\r\n this._isAnimating = false;\r\n clearInterval(this._animInterval);\r\n this._animInterval = null;\r\n if (this._frameInfo) {\r\n this.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: this._isAnimating,\r\n isLoading: this._frameInfo.isLoading,\r\n },\r\n });\r\n }\r\n};\r\n\r\n/**\r\n * Continue current animation after pausing. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._continueAnimation = function () {\r\n this._isAnimating = true;\r\n let minFrameTime = 1000 / settings.now.maxfps;\r\n minFrameTime = Number.isNaN(minFrameTime) ? 0 : minFrameTime;\r\n const self = this;\r\n const { pivot } = self._gfx;\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n visual.resetSelectionMask();\r\n visual.rebuildSelectionGeometry();\r\n this._msgAtomInfo.style.opacity = 0.0;\r\n }\r\n this._animInterval = setInterval(() => {\r\n self.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: self._isAnimating,\r\n isLoading: self._frameInfo.isLoading,\r\n },\r\n });\r\n if (self._frameInfo.frameIsReady) {\r\n pivot.updateToFrame(self._frameInfo);\r\n self._updateObjsToFrame(self._frameInfo);\r\n self._refreshTitle(` Frame ${self._frameInfo._currFrame} of ${self._frameInfo._framesCount\r\n } time interval - ${self._frameInfo._timeStep}`);\r\n try {\r\n self._frameInfo.nextFrame();\r\n } catch (e) {\r\n self.logger.error('Error during animation');\r\n self._stopAnimation();\r\n return;\r\n }\r\n self._needRender = true;\r\n }\r\n }, minFrameTime);\r\n};\r\n\r\n/**\r\n * Stop current animation. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._stopAnimation = function () {\r\n if (this._animInterval === null) {\r\n return;\r\n }\r\n clearInterval(this._animInterval);\r\n this._frameInfo.disableEvents();\r\n this._frameInfo = null;\r\n this._animInterval = null;\r\n this.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: null,\r\n });\r\n};\r\n\r\n/**\r\n * Invoked upon successful loading of some data source\r\n * @param {DataSource} dataSource - Data source for visualization (molecular complex or other)\r\n * @param {object} opts - Options.\r\n * @private\r\n */\r\nMiew.prototype._onLoad = function (dataSource, opts) {\r\n const gfx = this._gfx;\r\n let visualName = null;\r\n\r\n if (opts.animation) {\r\n this._refreshTitle();\r\n this._startAnimation(dataSource);\r\n return null;\r\n }\r\n this._stopAnimation();\r\n if (!opts || !opts.keepRepsInfo) {\r\n this._opts.reps = null;\r\n this._opts._objects = null;\r\n }\r\n\r\n if (dataSource.id === 'Complex') {\r\n const complex = dataSource;\r\n\r\n // update title\r\n if (opts.fileName) {\r\n complex.name = complex.name || removeExtension(opts.fileName).toUpperCase();\r\n } else if (opts.amberFileName) {\r\n complex.name = complex.name || removeExtension(opts.amberFileName).toUpperCase();\r\n } else {\r\n complex.name = `Dynamic ${opts.fileType} molecule`;\r\n }\r\n\r\n visualName = this._addVisual(new ComplexVisual(complex.name, complex));\r\n this._curVisualName = visualName;\r\n\r\n const desc = this.info();\r\n this.logger.info(`Parsed ${opts.fileName} (${\r\n desc.atoms} atoms, ${\r\n desc.bonds} bonds, ${\r\n desc.residues} residues, ${\r\n desc.chains} chains).`);\r\n\r\n if (_.isNumber(this._opts.unit)) {\r\n complex.setCurrentUnit(this._opts.unit);\r\n }\r\n\r\n if (opts.preset) {\r\n // ...removed server access...\r\n } else if (settings.now.autoPreset) {\r\n switch (opts.fileType) {\r\n case 'cml':\r\n this.resetReps('small');\r\n break;\r\n case 'pdb':\r\n case 'mmtf':\r\n case 'cif':\r\n if (hasValidResidues(complex)) {\r\n this.resetReps('macro');\r\n } else {\r\n this.resetReps('small');\r\n }\r\n break;\r\n default:\r\n this.resetReps('default');\r\n break;\r\n }\r\n } else {\r\n this.resetReps('default');\r\n }\r\n } else if (dataSource.id === 'Volume') {\r\n this.resetEd();\r\n visualName = this._onLoadEd(dataSource);\r\n }\r\n\r\n gfx.camera.updateProjectionMatrix();\r\n this._updateFog();\r\n\r\n // reset global transform\r\n gfx.root.resetTransform();\r\n this.resetPivot();\r\n\r\n // set scale to fit everything on the screen\r\n this._objectControls.setScale(settings.now.radiusToFit / this._getBSphereRadius());\r\n\r\n this._resetObjects();\r\n\r\n if (settings.now.autoResolution) {\r\n this._tweakResolution();\r\n }\r\n\r\n if (settings.now.shadow.on) {\r\n this._updateShadowCamera();\r\n }\r\n\r\n if (this._opts.view) {\r\n this.view(this._opts.view);\r\n delete this._opts.view;\r\n }\r\n\r\n this._refreshTitle();\r\n\r\n return visualName;\r\n};\r\n\r\nMiew.prototype.resetEd = function () {\r\n if (this._edLoader) {\r\n this._edLoader.abort();\r\n this._edLoader = null;\r\n }\r\n\r\n // free all resources\r\n this._removeVisual(this._getVolumeVisual());\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype.loadEd = function (source) {\r\n this.resetEd();\r\n\r\n const TheLoader = _.head(io.loaders.find({ source }));\r\n if (!TheLoader) {\r\n this.logger.error(LOADER_NOT_FOUND);\r\n return Promise.reject(new Error(LOADER_NOT_FOUND));\r\n }\r\n\r\n const loader = this._edLoader = new TheLoader(source, { binary: true });\r\n loader.context = this;\r\n return loader.load().then((data) => {\r\n const TheParser = _.head(io.parsers.find({ format: 'ccp4' }));\r\n if (!TheParser) {\r\n throw new Error(PARSER_NOT_FOUND);\r\n }\r\n const parser = new TheParser(data);\r\n parser.context = this;\r\n return parser.parse().then((dataSource) => {\r\n this._onLoadEd(dataSource);\r\n });\r\n }).catch((error) => {\r\n this.logger.error('Could not load ED data');\r\n this.logger.debug(error);\r\n });\r\n};\r\n\r\nMiew.prototype._onLoadEd = function (dataSource) {\r\n dataSource.normalize();\r\n\r\n const volumeVisual = new VolumeVisual('volume', dataSource);\r\n volumeVisual.getMesh().layers.set(gfxutils.LAYERS.VOLUME); // volume mesh is not visible to common render\r\n const visualName = this._addVisual(volumeVisual);\r\n\r\n this._needRender = true;\r\n return visualName;\r\n};\r\n\r\nMiew.prototype._needRebuild = function () {\r\n let needsRebuild = false;\r\n this._forEachComplexVisual((visual) => {\r\n needsRebuild = needsRebuild || visual.needsRebuild();\r\n });\r\n return needsRebuild;\r\n};\r\n\r\nMiew.prototype._rebuildObjects = function () {\r\n const self = this;\r\n const gfx = this._gfx;\r\n let i;\r\n let n;\r\n\r\n // remove old object geometry\r\n const toRemove = [];\r\n for (i = 0; i < gfx.pivot.children.length; ++i) {\r\n const child = gfx.pivot.children[i];\r\n if (!(child instanceof Visual)) {\r\n toRemove.push(child);\r\n }\r\n }\r\n for (i = 0; i < toRemove.length; ++i) {\r\n toRemove[i].parent.remove(toRemove[i]);\r\n }\r\n\r\n setTimeout(() => {\r\n const objList = self._objects;\r\n for (i = 0, n = objList.length; i < n; ++i) {\r\n const obj = objList[i];\r\n if (obj.needsRebuild) {\r\n obj.build();\r\n }\r\n if (obj.getGeometry()) {\r\n gfx.pivot.add(obj.getGeometry());\r\n }\r\n }\r\n }, 10);\r\n};\r\n\r\nMiew.prototype.changeUnit = function (unitIdx, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n throw new Error('There is no complex to change!');\r\n }\r\n\r\n function currentUnitInfo() {\r\n const unit = visual ? visual.getComplex().getCurrentUnit() : 0;\r\n const type = unit > 0 ? (`Bio molecule ${unit}`) : 'Asymmetric unit';\r\n return `Current unit: ${unit} (${type})`;\r\n }\r\n\r\n if (unitIdx === undefined) {\r\n return currentUnitInfo();\r\n }\r\n if (_.isString(unitIdx)) {\r\n unitIdx = Math.max(parseInt(unitIdx, 10), 0);\r\n }\r\n if (visual.getComplex().setCurrentUnit(unitIdx)) {\r\n this._resetScene();\r\n this._updateInfoPanel();\r\n }\r\n return currentUnitInfo();\r\n};\r\n\r\n/**\r\n * Start to rebuild geometry asynchronously.\r\n */\r\nMiew.prototype.rebuild = function () {\r\n if (this._building) {\r\n this.logger.warn('Miew.rebuild(): already building!');\r\n return;\r\n }\r\n this._building = true;\r\n\r\n this.dispatchEvent({ type: 'rebuilding' });\r\n\r\n this._rebuildObjects();\r\n\r\n this._gfx.renderer2d.reset();\r\n\r\n const rebuildActions = [];\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.needsRebuild()) {\r\n rebuildActions.push(visual.rebuild().then(() => new Promise(((resolve) => {\r\n visual.rebuildSelectionGeometry();\r\n resolve();\r\n }))));\r\n }\r\n });\r\n\r\n // Start asynchronous rebuild\r\n const self = this;\r\n this._spinner.spin(this._container);\r\n Promise.all(rebuildActions).then(() => {\r\n self._spinner.stop();\r\n\r\n self._needRender = true;\r\n\r\n self._refreshTitle();\r\n this.dispatchEvent({ type: 'buildingDone' });\r\n self._building = false;\r\n });\r\n};\r\n\r\n/** Mark all representations for rebuilding */\r\nMiew.prototype.rebuildAll = function () {\r\n this._forEachComplexVisual((visual) => {\r\n visual.setNeedsRebuild();\r\n });\r\n};\r\n\r\nMiew.prototype._refreshTitle = function (appendix) {\r\n let title;\r\n appendix = appendix === undefined ? '' : appendix;\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n title = visual.getComplex().name;\r\n const rep = visual.repGet(visual.repCurrent());\r\n title += (rep ? ` – ${rep.mode.name} Mode` : '');\r\n } else {\r\n title = Object.keys(this._visuals).length > 0 ? 'Unknown' : 'No Data';\r\n }\r\n title += appendix;\r\n\r\n this.dispatchEvent({ type: 'titleChanged', data: title });\r\n};\r\n\r\nMiew.prototype.setNeedRender = function () {\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._extractRepresentation = function () {\r\n const changed = [];\r\n\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getSelectionCount() === 0) {\r\n return;\r\n }\r\n\r\n const selector = visual.buildSelectorFromMask(1 << visual.getSelectionBit());\r\n const defPreset = settings.now.presets.default;\r\n const res = visual.repAdd({\r\n selector,\r\n mode: defPreset[0].mode.id,\r\n colorer: defPreset[0].colorer.id,\r\n material: defPreset[0].material.id,\r\n });\r\n if (!res) {\r\n if (visual.repCount() === ComplexVisual.NUM_REPRESENTATION_BITS) {\r\n this.logger.warn(`Number of representations is limited to ${ComplexVisual.NUM_REPRESENTATION_BITS}`);\r\n }\r\n return;\r\n }\r\n\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name: visual.name });\r\n visual.repCurrent(res.index);\r\n\r\n changed.push(visual.name);\r\n });\r\n\r\n if (changed.length > 0) {\r\n this.logger.report(`New representation from selection for complexes: ${changed.join(', ')}`);\r\n }\r\n};\r\n\r\n/**\r\n * Change current representation list.\r\n * @param {array} reps - Representation list.\r\n */\r\nMiew.prototype._setReps = function (reps) {\r\n reps = reps || (this._opts && this._opts.reps) || [];\r\n this._forEachComplexVisual((visual) => visual.resetReps(reps));\r\n};\r\n\r\n/**\r\n * Apply existing preset to current scene.\r\n * @param preset\r\n */\r\nMiew.prototype.applyPreset = function (preset) {\r\n const { presets } = settings.now;\r\n const presList = [\r\n preset || settings.defaults.preset,\r\n settings.defaults.preset,\r\n Object.keys(presets)[0],\r\n ];\r\n let reps = null;\r\n for (let i = 0; !reps && i < presList.length; ++i) {\r\n settings.set('preset', presList[i]);\r\n reps = presets[settings.now.preset];\r\n if (!reps) {\r\n this.logger.warn(`Unknown preset \"${settings.now.preset}\"`);\r\n }\r\n }\r\n this._setReps(reps);\r\n};\r\n\r\n/**\r\n * Reset current representation list to initial values.\r\n * @param {string} [preset] - The source preset in case of uninitialized representation list.\r\n */\r\nMiew.prototype.resetReps = function (preset) {\r\n const reps = this._opts && this._opts.reps;\r\n if (reps) {\r\n this._setReps(reps);\r\n } else {\r\n this.applyPreset(preset);\r\n }\r\n};\r\n\r\n/**\r\n * Get number of representations created so far.\r\n * @returns {number} Number of reps.\r\n */\r\nMiew.prototype.repCount = function (name) {\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repCount() : 0;\r\n};\r\n\r\n/**\r\n * Get or set the current representation index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @param {string=} [name] - Complex name. Defaults to the current one.\r\n * @returns {number} The current index.\r\n */\r\nMiew.prototype.repCurrent = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n const newIdx = visual ? visual.repCurrent(index) : -1;\r\n if (index && newIdx !== index) {\r\n this.logger.warn(`Representation ${index} was not found. Current rep remains unchanged.`);\r\n }\r\n return newIdx;\r\n};\r\n\r\n/**\r\n * Get or set representation by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount}(). Defaults to the current one.\r\n * @param {object=} rep - Optional representation description.\r\n * @param {string=} rep.selector - Selector string.\r\n * @param {string=} rep.mode - Mode id.\r\n * @param {string=} rep.colorer - Colorer id.\r\n * @param {string=} rep.material - Material id.\r\n * @returns {?object} Representation description.\r\n */\r\nMiew.prototype.rep = function (index, rep) {\r\n const visual = this._getComplexVisual('');\r\n if (!visual) {\r\n return null;\r\n }\r\n const res = visual.rep(index, rep);\r\n if (res.status === 'created') {\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name: visual.name });\r\n } else if (res.status === 'changed') {\r\n this.dispatchEvent({ type: 'repChanged', index: res.index, name: visual.name });\r\n }\r\n return res.desc;\r\n};\r\n\r\n/**\r\n * Get representation (not just description) by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount}(). Defaults to the current one.\r\n * @returns {?object} Representation.\r\n */\r\nMiew.prototype.repGet = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repGet(index) : null;\r\n};\r\n\r\n/**\r\n * Add new representation.\r\n * @param {object=} rep - Representation description.\r\n * @returns {number} Index of the new representation.\r\n */\r\nMiew.prototype.repAdd = function (rep, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return -1;\r\n }\r\n\r\n const res = visual.repAdd(rep);\r\n if (res) {\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name });\r\n return res.index;\r\n }\r\n return -1;\r\n};\r\n\r\n/**\r\n * Remove representation.\r\n * @param {number=} index - Zero-based representation index.\r\n */\r\nMiew.prototype.repRemove = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n visual.repRemove(index);\r\n this.dispatchEvent({ type: 'repRemoved', index, name });\r\n};\r\n\r\n/**\r\n * Hide representation.\r\n * @param {number} index - Zero-based representation index.\r\n * @param {boolean=} hide - Specify false to make rep visible, true to hide (by default).\r\n */\r\nMiew.prototype.repHide = function (index, hide, name) {\r\n this._needRender = true;\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repHide(index, hide) : null;\r\n};\r\n\r\nMiew.prototype._setEditMode = function (mode) {\r\n this._editMode = mode;\r\n\r\n const elem = this._msgMode;\r\n if (elem) {\r\n elem.style.opacity = (mode === EDIT_MODE.COMPLEX) ? 0.0 : 1.0;\r\n\r\n if (mode !== EDIT_MODE.COMPLEX) {\r\n const t = elem.getElementsByTagName('p')[0];\r\n t.innerHTML = (mode === EDIT_MODE.COMPONENT) ? 'COMPONENT EDIT MODE' : 'FRAGMENT EDIT MODE';\r\n }\r\n }\r\n\r\n this.dispatchEvent({ type: 'editModeChanged', data: mode === EDIT_MODE.COMPLEX });\r\n};\r\n\r\nMiew.prototype._enterComponentEditMode = function () {\r\n if (this._editMode !== EDIT_MODE.COMPLEX) {\r\n return;\r\n }\r\n\r\n const editors = [];\r\n this._forEachComplexVisual((visual) => {\r\n const editor = visual.beginComponentEdit();\r\n if (editor) {\r\n editors.push(editor);\r\n }\r\n });\r\n\r\n if (editors === []) {\r\n return;\r\n }\r\n\r\n this._editors = editors;\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- ON');\r\n this._setEditMode(EDIT_MODE.COMPONENT);\r\n this._objectControls.keysTranslateObj(true);\r\n};\r\n\r\nMiew.prototype._applyComponentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.COMPONENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n this._objectControls.keysTranslateObj(false);\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].apply();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- OFF (applied)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._discardComponentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.COMPONENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n this._objectControls.keysTranslateObj(false);\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].discard();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- OFF (discarded)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this._needRender = true;\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._enterFragmentEditMode = function () {\r\n if (this._editMode !== EDIT_MODE.COMPLEX) {\r\n return;\r\n }\r\n\r\n const selectedVisuals = [];\r\n this._forEachComplexVisual((visual) => {\r\n if (visual instanceof ComplexVisual\r\n && visual.getSelectionCount() > 0) {\r\n selectedVisuals.push(visual);\r\n }\r\n });\r\n\r\n if (selectedVisuals.length !== 1) {\r\n // either we have no selection or\r\n // we have selected atoms in two or more visuals -- not supported\r\n return;\r\n }\r\n\r\n const editor = selectedVisuals[0].beginFragmentEdit();\r\n if (!editor) {\r\n return;\r\n }\r\n this._editors = [editor];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- ON (single bond)');\r\n this._setEditMode(EDIT_MODE.FRAGMENT);\r\n this._objectControls.allowTranslation(false);\r\n this._objectControls.allowAltObjFreeRotation(editor.isFreeRotationAllowed());\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._applyFragmentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.FRAGMENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].apply();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- OFF (applied)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._discardFragmentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.FRAGMENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].discard();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- OFF (discarded)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._onPick = function (event) {\r\n if (!settings.now.picking) {\r\n // picking is disabled\r\n return;\r\n }\r\n\r\n if (this._animInterval !== null) {\r\n // animation playback is on\r\n return;\r\n }\r\n\r\n if (this._editMode === EDIT_MODE.FRAGMENT) {\r\n // prevent picking in fragment edit mode\r\n return;\r\n }\r\n\r\n if (this._objectControls.isEditingAltObj()) {\r\n // prevent picking during component rotation\r\n return;\r\n }\r\n\r\n // update last pick & find complex\r\n let complex = null;\r\n if (event.obj.atom) {\r\n complex = event.obj.atom.residue.getChain().getComplex();\r\n this._lastPick = event.obj.atom;\r\n } else if (event.obj.residue) {\r\n complex = event.obj.residue.getChain().getComplex();\r\n this._lastPick = event.obj.residue;\r\n } else if (event.obj.chain) {\r\n complex = event.obj.chain.getComplex();\r\n this._lastPick = event.obj.chain;\r\n } else if (event.obj.molecule) {\r\n complex = event.obj.molecule.complex;\r\n this._lastPick = event.obj.molecule;\r\n } else {\r\n this._lastPick = null;\r\n }\r\n\r\n function _updateSelection(visual) {\r\n visual.updateSelectionMask(event.obj);\r\n visual.rebuildSelectionGeometry();\r\n }\r\n\r\n // update visual\r\n if (complex) {\r\n const visual = this._getVisualForComplex(complex);\r\n if (visual) {\r\n _updateSelection(visual);\r\n this._needRender = true;\r\n }\r\n } else {\r\n this._forEachComplexVisual(_updateSelection);\r\n this._needRender = true;\r\n }\r\n\r\n this._updateInfoPanel();\r\n this.dispatchEvent(event);\r\n};\r\n\r\nMiew.prototype._onKeyDown = function (event) {\r\n if (!this._running || !this._hotKeysEnabled) {\r\n return;\r\n }\r\n\r\n // editing keys\r\n if (settings.now.editing) {\r\n switch (event.code) {\r\n case 'KeyC':\r\n this._enterComponentEditMode();\r\n break;\r\n case 'KeyF':\r\n this._enterFragmentEditMode();\r\n break;\r\n case 'KeyA':\r\n switch (this._editMode) {\r\n case EDIT_MODE.COMPONENT:\r\n this._applyComponentEdit();\r\n break;\r\n case EDIT_MODE.FRAGMENT:\r\n this._applyFragmentEdit();\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n case 'KeyD':\r\n switch (this._editMode) {\r\n case EDIT_MODE.COMPONENT:\r\n this._discardComponentEdit();\r\n break;\r\n case EDIT_MODE.FRAGMENT:\r\n this._discardFragmentEdit();\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n default:\r\n }\r\n }\r\n\r\n // other keys\r\n switch (event.code) {\r\n case 'NumpadAdd':\r\n if (event.altKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._forEachComplexVisual((visual) => {\r\n visual.expandSelection();\r\n visual.rebuildSelectionGeometry();\r\n });\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n }\r\n break;\r\n case 'NumpadSubtract':\r\n if (event.altKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._forEachComplexVisual((visual) => {\r\n visual.shrinkSelection();\r\n visual.rebuildSelectionGeometry();\r\n });\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n }\r\n break;\r\n default:\r\n }\r\n};\r\n\r\nMiew.prototype._onKeyUp = function (event) {\r\n if (!this._running || !this._hotKeysEnabled) {\r\n return;\r\n }\r\n\r\n if (event.code === 'KeyX') {\r\n this._extractRepresentation();\r\n }\r\n};\r\n\r\nMiew.prototype._updateInfoPanel = function () {\r\n const info = this._msgAtomInfo.getElementsByTagName('p')[0];\r\n let atom;\r\n let residue;\r\n\r\n let count = 0;\r\n this._forEachComplexVisual((visual) => {\r\n count += visual.getSelectionCount();\r\n });\r\n\r\n while (info.firstChild) {\r\n info.removeChild(info.firstChild);\r\n }\r\n\r\n if (count === 0) {\r\n this._msgAtomInfo.style.opacity = 0.0;\r\n return;\r\n }\r\n\r\n let firstLine = `${String(count)} atom${count !== 1 ? 's' : ''} selected`;\r\n if (this._lastPick !== null) {\r\n firstLine += ', the last pick:';\r\n }\r\n let secondLine = '';\r\n let aName = '';\r\n let coordLine = '';\r\n\r\n if (this._lastPick instanceof Atom) {\r\n atom = this._lastPick;\r\n residue = atom.residue;\r\n\r\n aName = atom.name;\r\n const location = (atom.location !== 32) ? String.fromCharCode(atom.location) : ''; // 32 is code of white-space\r\n secondLine = `${atom.element.fullName} #${atom.serial}${location}: \\\r\n ${residue._chain._name}.${residue._type._name}${residue._sequence}${residue._icode.trim()}.`;\r\n secondLine += aName;\r\n\r\n coordLine = `Coord: (${atom.position.x.toFixed(2).toString()},\\\r\n ${atom.position.y.toFixed(2).toString()},\\\r\n ${atom.position.z.toFixed(2).toString()})`;\r\n } else if (this._lastPick instanceof Residue) {\r\n residue = this._lastPick;\r\n\r\n secondLine = `${residue._type._fullName}: \\\r\n ${residue._chain._name}.${residue._type._name}${residue._sequence}${residue._icode.trim()}`;\r\n } else if (this._lastPick instanceof Chain) {\r\n secondLine = `chain ${this._lastPick._name}`;\r\n } else if (this._lastPick instanceof Molecule) {\r\n secondLine = `molecule ${this._lastPick._name}`;\r\n }\r\n\r\n info.appendChild(document.createTextNode(firstLine));\r\n\r\n if (secondLine !== '') {\r\n info.appendChild(document.createElement('br'));\r\n info.appendChild(document.createTextNode(secondLine));\r\n }\r\n\r\n if (coordLine !== '') {\r\n info.appendChild(document.createElement('br'));\r\n info.appendChild(document.createTextNode(coordLine));\r\n }\r\n\r\n this._msgAtomInfo.style.opacity = 1.0;\r\n};\r\n\r\nMiew.prototype._getAltObj = function () {\r\n if (this._editors) {\r\n let altObj = null;\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n const nextAltObj = this._editors[i].getAltObj();\r\n if (nextAltObj.objects.length > 0) {\r\n if (altObj) {\r\n // we have selected atoms in two or more visuals -- not supported\r\n altObj = null;\r\n break;\r\n }\r\n altObj = nextAltObj;\r\n }\r\n }\r\n if (altObj) {\r\n return altObj;\r\n }\r\n }\r\n\r\n return {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n};\r\n\r\nMiew.prototype.resetPivot = (function () {\r\n const boundingBox = new THREE.Box3();\r\n const center = new THREE.Vector3();\r\n\r\n return function () {\r\n boundingBox.makeEmpty();\r\n this._forEachVisual((visual) => {\r\n boundingBox.union(visual.getBoundaries().boundingBox);\r\n });\r\n\r\n boundingBox.getCenter(center);\r\n this._objectControls.setPivot(center.negate());\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotResidue = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n return function (residue) {\r\n const visual = this._getVisualForComplex(residue.getChain().getComplex());\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n if (residue._controlPoint) {\r\n center.copy(residue._controlPoint);\r\n } else {\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n const amount = residue._atoms.length;\r\n for (let i = 0; i < amount; ++i) {\r\n const p = residue._atoms[i].position;\r\n x += p.x / amount;\r\n y += p.y / amount;\r\n z += p.z / amount;\r\n }\r\n center.set(x, y, z);\r\n }\r\n center.applyMatrix4(visual.matrix).negate();\r\n this._objectControls.setPivot(center);\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotAtom = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n return function (atom) {\r\n const visual = this._getVisualForComplex(atom.residue.getChain().getComplex());\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n center.copy(atom.position);\r\n center.applyMatrix4(visual.matrix).negate();\r\n this._objectControls.setPivot(center);\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.getSelectionCenter = (function () {\r\n const _centerInVisual = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n return function (center, includesAtom, selector) {\r\n center.set(0.0, 0.0, 0.0);\r\n let count = 0;\r\n\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getSelectionCenter(_centerInVisual, includesAtom, selector || visual.getSelectionBit())) {\r\n center.add(_centerInVisual);\r\n count++;\r\n }\r\n });\r\n if (count === 0) {\r\n return false;\r\n }\r\n center.divideScalar(count);\r\n center.negate();\r\n return true;\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotSubset = (function () {\r\n const _center = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n function _includesInCurSelection(atom, selectionBit) {\r\n return atom.mask & (1 << selectionBit);\r\n }\r\n\r\n function _includesInSelector(atom, selector) {\r\n return selector.selector.includesAtom(atom);\r\n }\r\n\r\n return function (selector) {\r\n const includesAtom = (selector) ? _includesInSelector : _includesInCurSelection;\r\n\r\n if (this.getSelectionCenter(_center, includesAtom, selector)) {\r\n this._objectControls.setPivot(_center);\r\n this.dispatchEvent({ type: 'transform' });\r\n } else {\r\n this.logger.warn('selection is empty. Center operation not performed');\r\n }\r\n };\r\n}());\r\n\r\n/**\r\n * Makes a screenshot.\r\n * @param {number} [width] - Width of an image. Defaults to the canvas width.\r\n * @param {number} [height] - Height of an image. Defaults to the width (square) or canvas height,\r\n * if width is omitted too.\r\n * @returns {string} Data URL representing the image contents.\r\n */\r\nMiew.prototype.screenshot = function (width, height) {\r\n const gfx = this._gfx;\r\n const deviceWidth = gfx.renderer.domElement.width;\r\n const deviceHeight = gfx.renderer.domElement.height;\r\n\r\n function fov2Tan(fov) {\r\n return Math.tan(THREE.MathUtils.degToRad(0.5 * fov));\r\n }\r\n\r\n function tan2Fov(tan) {\r\n return THREE.MathUtils.radToDeg(Math.atan(tan)) * 2.0;\r\n }\r\n\r\n function getDataURL() {\r\n let dataURL;\r\n const currBrowser = utils.getBrowser();\r\n\r\n if (currBrowser === utils.browserType.SAFARI) {\r\n const canvas = document.createElement('canvas');\r\n const canvasContext = canvas.getContext('2d');\r\n\r\n canvas.width = width === undefined ? deviceWidth : width;\r\n canvas.height = height === undefined ? deviceHeight : height;\r\n\r\n canvasContext.drawImage(gfx.renderer.domElement, 0, 0, canvas.width, canvas.height);\r\n dataURL = canvas.toDataURL('image/png');\r\n } else {\r\n // Copy current canvas to screenshot\r\n dataURL = gfx.renderer.domElement.toDataURL('image/png');\r\n }\r\n return dataURL;\r\n }\r\n height = height || width;\r\n\r\n let screenshotURI;\r\n if ((width === undefined && height === undefined)\r\n || (width === deviceWidth && height === deviceHeight)) {\r\n // renderer.domElement.toDataURL('image/png') returns flipped image in Safari\r\n // It hasn't been resolved yet, but getScreenshotSafari()\r\n // fixes it using an extra canvas.\r\n screenshotURI = getDataURL();\r\n } else {\r\n const originalAspect = gfx.camera.aspect;\r\n const originalFov = gfx.camera.fov;\r\n const originalTanFov2 = fov2Tan(gfx.camera.fov);\r\n\r\n // screenshot should contain the principal area of interest (a centered square touching screen sides)\r\n const areaOfInterestSize = Math.min(gfx.width, gfx.height);\r\n const areaOfInterestTanFov2 = originalTanFov2 * areaOfInterestSize / gfx.height;\r\n\r\n // set appropriate camera aspect & FOV\r\n const shotAspect = width / height;\r\n gfx.renderer.setPixelRatio(1);\r\n gfx.camera.aspect = shotAspect;\r\n gfx.camera.fov = tan2Fov(areaOfInterestTanFov2 / Math.min(shotAspect, 1.0));\r\n gfx.camera.updateProjectionMatrix();\r\n\r\n // resize canvas to the required size of screenshot\r\n gfx.renderer.setDrawingBufferSize(width, height, 1);\r\n\r\n // make screenshot\r\n this._renderFrame(settings.now.stereo);\r\n screenshotURI = getDataURL();\r\n\r\n // restore original camera & canvas proportions\r\n gfx.renderer.setPixelRatio(window.devicePixelRatio);\r\n gfx.camera.aspect = originalAspect;\r\n gfx.camera.fov = originalFov;\r\n gfx.camera.updateProjectionMatrix();\r\n gfx.renderer.setDrawingBufferSize(gfx.width, gfx.height, window.devicePixelRatio);\r\n this._needRender = true;\r\n }\r\n\r\n return screenshotURI;\r\n};\r\n\r\n/**\r\n * Makes screenshot and initiates a download.\r\n * @param {string} [filename] - Name of a file. Default to a 'screenshot-XXXXX.png', where XXXXX is a current\r\n * date/time in seconds.\r\n * @param {number} [width] - Width of an image. Defaults to the canvas width.\r\n * @param {number} [height] - Height of an image. Defaults to the width (square) or canvas height,\r\n * if width is omitted too.\r\n */\r\nMiew.prototype.screenshotSave = function (filename, width, height) {\r\n const uri = this.screenshot(width, height);\r\n utils.shotDownload(uri, filename);\r\n};\r\n\r\nMiew.prototype.save = function (opts) {\r\n this._export(opts.fileType).then((dataString) => {\r\n const filename = this._visuals[this._curVisualName]._complex.name;\r\n utils.download(dataString, filename, opts.fileType);\r\n this._refreshTitle();\r\n this.dispatchEvent({ type: 'exportingDone' });\r\n }).catch((error) => {\r\n this.logger.error('Could not export data');\r\n this.logger.debug(error);\r\n this._refreshTitle();\r\n this.dispatchEvent({ type: 'exportingDone', error });\r\n });\r\n};\r\n\r\nMiew.prototype._tweakResolution = function () {\r\n const maxPerf = [\r\n ['poor', 100],\r\n ['low', 500],\r\n ['medium', 1000],\r\n ['high', 5000],\r\n ['ultra', Number.MAX_VALUE],\r\n ];\r\n\r\n let atomCount = 0;\r\n this._forEachComplexVisual((visual) => {\r\n atomCount += visual.getComplex().getAtomCount();\r\n });\r\n\r\n if (atomCount > 0) {\r\n const performance = this._gfxScore * 10e5 / atomCount;\r\n // set resolution based on estimated performance\r\n for (let i = 0; i < maxPerf.length; ++i) {\r\n if (performance < maxPerf[i][1]) {\r\n this._autoChangeResolution(maxPerf[i][0]);\r\n break;\r\n }\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._autoChangeResolution = function (resolution) {\r\n if (resolution !== settings.now.resolution) {\r\n this.logger.report(`Your rendering resolution was changed to \"${resolution}\" for best performance.`);\r\n }\r\n settings.now.resolution = resolution;\r\n};\r\n\r\n/**\r\n * Save current settings to cookies.\r\n */\r\nMiew.prototype.saveSettings = function () {\r\n this._cookies.setCookie(this._opts.settingsCookie, JSON.stringify(this.settings.getDiffs(true)));\r\n};\r\n\r\n/**\r\n * Load settings from cookies.\r\n */\r\nMiew.prototype.restoreSettings = function () {\r\n try {\r\n const cookie = this._cookies.getCookie(this._opts.settingsCookie);\r\n const diffs = cookie ? JSON.parse(cookie) : {};\r\n this.settings.applyDiffs(diffs, true);\r\n } catch (e) {\r\n this.logger.error(`Cookies parse error: ${e.message}`);\r\n }\r\n};\r\n\r\n/**\r\n * Reset current settings to the defaults.\r\n */\r\nMiew.prototype.resetSettings = function () {\r\n this.settings.reset();\r\n};\r\n\r\n/*\r\n * DANGEROUS and TEMPORARY. The method should change or disappear in future versions.\r\n * @param {string|object} opts - See {@link Miew} constructor.\r\n * @see {@link Miew#set}, {@link Miew#repAdd}, {@link Miew#rep}.\r\n */\r\nMiew.prototype.setOptions = function (opts) {\r\n if (typeof opts === 'string') {\r\n opts = Miew.options.fromAttr(opts);\r\n }\r\n if (opts.reps) {\r\n this._opts.reps = null;\r\n }\r\n _.merge(this._opts, opts);\r\n if (opts.settings) {\r\n this.set(opts.settings);\r\n }\r\n\r\n this._opts._objects = opts._objects;\r\n this._resetObjects();\r\n\r\n if (opts.load) {\r\n this.load(opts.load, { fileType: opts.type });\r\n }\r\n\r\n if (opts.preset) {\r\n settings.now.preset = opts.preset;\r\n }\r\n\r\n if (opts.reps) {\r\n this.resetReps(opts.preset);\r\n }\r\n\r\n if (this._opts.view) {\r\n this.view(this._opts.view);\r\n delete this._opts.view;\r\n }\r\n\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n visual.getComplex().resetCurrentUnit();\r\n if (_.isNumber(opts.unit)) {\r\n visual.getComplex().setCurrentUnit(opts.unit);\r\n }\r\n this.resetView();\r\n this.rebuildAll();\r\n }\r\n};\r\n\r\nMiew.prototype.info = function (name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return {};\r\n }\r\n const complex = visual.getComplex();\r\n const { metadata } = complex;\r\n return {\r\n id: metadata.id || complex.name || 'UNKNOWN',\r\n title: (metadata.title && metadata.title.join(' ')) || 'UNKNOWN DATA',\r\n atoms: complex.getAtomCount(),\r\n bonds: complex.getBondCount(),\r\n residues: complex.getResidueCount(),\r\n chains: complex.getChainCount(),\r\n };\r\n};\r\n\r\n/*\r\n * OBJECTS SEGMENT\r\n */\r\n\r\nMiew.prototype.addObject = function (objData, bThrow) {\r\n let Ctor = null;\r\n\r\n if (objData.type === LinesObject.prototype.type) {\r\n Ctor = LinesObject;\r\n }\r\n\r\n if (Ctor === null) {\r\n throw new Error(`Unknown scene object type - ${objData.type}`);\r\n }\r\n\r\n try {\r\n const newObj = new Ctor(objData.params, objData.opts);\r\n this._addSceneObject(newObj);\r\n } catch (error) {\r\n if (!bThrow) {\r\n this.logger.debug(`Error during scene object creation: ${error.message}`);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._addSceneObject = function (sceneObject) {\r\n const visual = this._getComplexVisual();\r\n if (sceneObject.build && visual) {\r\n sceneObject.build(visual.getComplex());\r\n this._gfx.pivot.add(sceneObject.getGeometry());\r\n }\r\n const objects = this._objects;\r\n objects[objects.length] = sceneObject;\r\n};\r\n\r\nMiew.prototype._updateObjsToFrame = function (frameData) {\r\n const objs = this._objects;\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n if (objs[i].updateToFrame) {\r\n objs[i].updateToFrame(frameData);\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._resetObjects = function () {\r\n const objs = this._opts._objects;\r\n\r\n this._objects = [];\r\n if (objs) {\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n this.addObject(objs[i], false);\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype.removeObject = function (index) {\r\n const obj = this._objects[index];\r\n if (!obj) {\r\n throw new Error(`Scene object with index ${index} does not exist`);\r\n }\r\n obj.destroy();\r\n this._objects.splice(index, 1);\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Get a string with a URL to reproduce the current scene.\r\n *\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=false] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=false] - when this flag is true, a view information is included\r\n * @returns {string} URL\r\n */\r\nMiew.prototype.getURL = function (opts) {\r\n return options.toURL(this.getState(_.defaults(opts, {\r\n compact: true,\r\n settings: false,\r\n view: false,\r\n })));\r\n};\r\n\r\n/**\r\n * Get a string with a script to reproduce the current scene.\r\n *\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=true] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=true] - when this flag is true, a view information is included\r\n * @returns {string} script\r\n */\r\nMiew.prototype.getScript = function (opts) {\r\n return options.toScript(this.getState(_.defaults(opts, {\r\n compact: true,\r\n settings: true,\r\n view: true,\r\n })));\r\n};\r\n\r\n/*\r\n * Generates object that represents the current state of representations list\r\n * @param {boolean} compareWithDefaults - when this flag is true, reps list is compared (if possible)\r\n * to preset's defaults and only diffs are generated\r\n */\r\nMiew.prototype._compareReps = function (complexVisual, compareWithDefaults) {\r\n const ans = {};\r\n let repCount = 0;\r\n\r\n if (complexVisual) {\r\n repCount = complexVisual.repCount();\r\n }\r\n\r\n const currPreset = settings.defaults.presets[settings.now.preset];\r\n let compare = compareWithDefaults;\r\n if (currPreset === undefined || currPreset.length > repCount) {\r\n compare = false;\r\n ans.preset = 'empty';\r\n } else if (settings.now.preset !== settings.defaults.preset) {\r\n ans.preset = settings.now.preset;\r\n }\r\n\r\n const repsDiff = [];\r\n let emptyReps = true;\r\n for (let i = 0, n = repCount; i < n; ++i) {\r\n repsDiff[i] = complexVisual.repGet(i).compare(compare ? currPreset[i] : null);\r\n if (!_.isEmpty(repsDiff[i])) {\r\n emptyReps = false;\r\n }\r\n }\r\n if (!emptyReps) {\r\n ans.reps = repsDiff;\r\n }\r\n return ans;\r\n};\r\n\r\n/*\r\n * Obtain object that represents current state of miew (might be used as options in constructor).\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=false] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=false] - when this flag is true, a view information is included\r\n * @returns {Object} State object.\r\n */\r\nMiew.prototype.getState = function (opts) {\r\n const state = {};\r\n\r\n opts = _.defaults(opts, {\r\n compact: true,\r\n settings: false,\r\n view: false,\r\n });\r\n\r\n // load\r\n const visual = this._getComplexVisual();\r\n if (visual !== null) {\r\n const complex = visual.getComplex();\r\n const { metadata } = complex;\r\n if (metadata.id) {\r\n const format = metadata.format ? `${metadata.format}:` : '';\r\n state.load = format + metadata.id;\r\n }\r\n const unit = complex.getCurrentUnit();\r\n if (unit !== 1) {\r\n state.unit = unit;\r\n }\r\n }\r\n\r\n // representations\r\n const repsInfo = this._compareReps(visual, opts.compact);\r\n if (repsInfo.preset) {\r\n state.preset = repsInfo.preset;\r\n }\r\n\r\n if (repsInfo.reps) {\r\n state.reps = repsInfo.reps;\r\n }\r\n\r\n // objects\r\n const objects = this._objects;\r\n const objectsState = [];\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n objectsState[i] = objects[i].identify();\r\n }\r\n if (objects.length > 0) {\r\n state._objects = objectsState;\r\n }\r\n\r\n // view\r\n if (opts.view) {\r\n state.view = this.view();\r\n }\r\n\r\n // settings\r\n if (opts.settings) {\r\n const diff = this.settings.getDiffs(false);\r\n if (!_.isEmpty(diff)) {\r\n state.settings = diff;\r\n }\r\n }\r\n\r\n return state;\r\n};\r\n\r\n/**\r\n * Get parameter value.\r\n * @param {string} param - Parameter name or path (e.g. 'modes.BS.atom').\r\n * @param {*=} value - Default value.\r\n * @returns {*} Parameter value.\r\n */\r\nMiew.prototype.get = function (param, value) {\r\n return settings.get(param, value);\r\n};\r\n\r\nMiew.prototype._clipPlaneUpdateValue = function (radius) {\r\n const clipPlaneValue = Math.max(\r\n this._gfx.camera.position.z - radius * settings.now.draft.clipPlaneFactor,\r\n settings.now.camNear,\r\n );\r\n\r\n const opts = { clipPlaneValue };\r\n this._forEachComplexVisual((visual) => {\r\n visual.setUberOptions(opts);\r\n });\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const obj = this._objects[i];\r\n if (obj._line) {\r\n obj._line.material.setUberOptions(opts);\r\n }\r\n }\r\n if (this._picker !== null) {\r\n this._picker.clipPlaneValue = clipPlaneValue;\r\n }\r\n};\r\n\r\nMiew.prototype._fogFarUpdateValue = function () {\r\n if (this._picker !== null) {\r\n if (this._gfx.scene.fog) {\r\n this._picker.fogFarValue = this._gfx.scene.fog.far;\r\n } else {\r\n this._picker.fogFarValue = undefined;\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._updateShadowmapMeshes = function (process) {\r\n this._forEachComplexVisual((visual) => {\r\n const reprList = visual._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n process(repr.geo, repr.material);\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype._updateMaterials = function (values, needTraverse = false, process = undefined) {\r\n this._forEachComplexVisual((visual) => visual.setMaterialValues(values, needTraverse, process));\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const obj = this._objects[i];\r\n if (obj._line) {\r\n obj._line.material.setValues(values);\r\n obj._line.material.needsUpdate = true;\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._fogAlphaChanged = function () {\r\n this._forEachComplexVisual((visual) => {\r\n visual.setUberOptions({\r\n fogAlpha: settings.now.fogAlpha,\r\n });\r\n });\r\n};\r\n\r\nMiew.prototype._embedWebXR = function () {\r\n // switch off\r\n if (settings.now.stereo !== 'WEBVR') {\r\n if (this.webVR) {\r\n this.webVR.disable();\r\n }\r\n this.webVR = null;\r\n return;\r\n }\r\n // switch on\r\n if (!this.webVR) {\r\n this.webVR = new WebVRPoC(() => {\r\n this._requestAnimationFrame(() => this._onTick());\r\n this._needRender = true;\r\n this._onResize();\r\n });\r\n }\r\n this.webVR.enable(this._gfx);\r\n};\r\n\r\nMiew.prototype._initOnSettingsChanged = function () {\r\n const on = (props, func) => {\r\n props = _.isArray(props) ? props : [props];\r\n props.forEach((prop) => {\r\n this.settings.addEventListener(`change:${prop}`, func);\r\n });\r\n };\r\n\r\n on('modes.VD.frame', () => {\r\n const volume = this._getVolumeVisual();\r\n if (volume === null) return;\r\n\r\n volume.showFrame(settings.now.modes.VD.frame);\r\n this._needRender = true;\r\n });\r\n\r\n on('modes.VD.isoMode', () => {\r\n const volume = this._getVolumeVisual();\r\n if (volume === null) return;\r\n\r\n volume.getMesh().material.updateDefines();\r\n this._needRender = true;\r\n });\r\n\r\n on('bg.color', () => {\r\n this._onBgColorChanged();\r\n });\r\n\r\n on('ao', () => {\r\n if (settings.now.ao && !isAOSupported(this._gfx.renderer.getContext())) {\r\n this.logger.warn('Your device or browser does not support ao');\r\n settings.set('ao', false);\r\n } else {\r\n const values = { normalsToGBuffer: settings.now.ao };\r\n this._setUberMaterialValues(values);\r\n }\r\n });\r\n\r\n on('zSprites', () => {\r\n if (settings.now.zSprites && !arezSpritesSupported(this._gfx.renderer.getContext())) {\r\n this.logger.warn('Your device or browser does not support zSprites');\r\n settings.set('zSprites', false);\r\n }\r\n this.rebuildAll();\r\n });\r\n\r\n on('fogColor', () => {\r\n this._onFogColorChanged();\r\n });\r\n\r\n on('fogColorEnable', () => {\r\n this._onFogColorChanged();\r\n });\r\n\r\n on('bg.transparent', (evt) => {\r\n const gfx = this._gfx;\r\n if (gfx) {\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n }\r\n // update materials\r\n this._updateMaterials({ fogTransparent: evt.value });\r\n this.rebuildAll();\r\n });\r\n\r\n on('draft.clipPlane', (evt) => {\r\n // update materials\r\n this._updateMaterials({ clipPlane: evt.value });\r\n this.rebuildAll();\r\n });\r\n\r\n on('shadow.on', (evt) => {\r\n // update materials\r\n const values = { shadowmap: evt.value, shadowmapType: settings.now.shadow.type };\r\n const gfx = this._gfx;\r\n if (gfx) {\r\n gfx.renderer.shadowMap.enabled = Boolean(values.shadowmap);\r\n }\r\n this._updateMaterials(values, true);\r\n if (values.shadowmap) {\r\n this._updateShadowCamera();\r\n this._updateShadowmapMeshes(meshutils.createShadowmapMaterial);\r\n } else {\r\n this._updateShadowmapMeshes(meshutils.removeShadowmapMaterial);\r\n }\r\n this._needRender = true;\r\n });\r\n\r\n on('shadow.type', (evt) => {\r\n // update materials if shadowmap is enable\r\n if (settings.now.shadow.on) {\r\n this._updateMaterials({ shadowmapType: evt.value }, true);\r\n this._needRender = true;\r\n }\r\n });\r\n\r\n on('shadow.radius', (evt) => {\r\n for (let i = 0; i < this._gfx.scene.children.length; i++) {\r\n if (this._gfx.scene.children[i].shadow !== undefined) {\r\n const light = this._gfx.scene.children[i];\r\n light.shadow.radius = evt.value;\r\n this._needRender = true;\r\n }\r\n }\r\n });\r\n\r\n on('fps', () => {\r\n this._fps.show(settings.now.fps);\r\n });\r\n\r\n on(['fog', 'fogNearFactor', 'fogFarFactor'], () => {\r\n this._updateFog();\r\n this._needRender = true;\r\n });\r\n\r\n on('fogAlpha', () => {\r\n const { fogAlpha } = settings.now;\r\n if (fogAlpha < 0 || fogAlpha > 1) {\r\n this.logger.warn('fogAlpha must belong range [0,1]');\r\n }\r\n this._fogAlphaChanged();\r\n this._needRender = true;\r\n });\r\n\r\n on('autoResolution', (evt) => {\r\n if (evt.value && !this._gfxScore) {\r\n this.logger.warn('Benchmarks are missed, autoresolution will not work! '\r\n + 'Autoresolution should be set during miew startup.');\r\n }\r\n });\r\n\r\n on('stereo', () => {\r\n this._embedWebXR(settings.now.stereo === 'WEBVR');\r\n this._needRender = true;\r\n });\r\n\r\n on(['transparency', 'palette'], () => {\r\n this.rebuildAll();\r\n });\r\n\r\n on('resolution', () => {\r\n // update complex visuals\r\n this.rebuildAll();\r\n\r\n // update volume visual\r\n const volume = this._getVolumeVisual();\r\n if (volume) {\r\n volume.getMesh().material.updateDefines();\r\n this._needRender = true;\r\n }\r\n });\r\n\r\n on(['axes', 'fxaa', 'ao',\r\n 'outline.on', 'outline.color', 'outline.threshold', 'outline.thickness'], () => {\r\n this._needRender = true;\r\n });\r\n};\r\n\r\n/**\r\n * Set parameter value.\r\n * @param {string|object} params - Parameter name or path (e.g. 'modes.BS.atom') or even settings object.\r\n * @param {*=} value - Value.\r\n */\r\nMiew.prototype.set = function (params, value) {\r\n settings.set(params, value);\r\n};\r\n\r\n/**\r\n * Select atoms with selection string.\r\n * @param {string} expression - string expression of selection\r\n * @param {boolean=} append - true to append selection atoms to current selection, false to rewrite selection\r\n */\r\nMiew.prototype.select = function (expression, append) {\r\n const visual = this._getComplexVisual();\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n let sel = expression;\r\n if (_.isString(expression)) {\r\n sel = selectors.parse(expression).selector;\r\n }\r\n\r\n visual.select(sel, append);\r\n this._lastPick = null;\r\n\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n};\r\n\r\nconst VIEW_VERSION = '1';\r\n\r\n/**\r\n * Get or set view info packed into string.\r\n *\r\n * **Note:** view is stored for *left-handed* cs, euler angles are stored in radians and *ZXY-order*,\r\n *\r\n * @param {string=} expression - Optional string encoded the view\r\n */\r\nMiew.prototype.view = function (expression) {\r\n const self = this;\r\n const { pivot } = this._gfx;\r\n let transform = [];\r\n const eulerOrder = 'ZXY';\r\n\r\n function encode() {\r\n const pos = pivot.position;\r\n const scale = self._objectControls.getScale() / settings.now.radiusToFit;\r\n const euler = new THREE.Euler();\r\n euler.setFromQuaternion(self._objectControls.getOrientation(), eulerOrder);\r\n transform = [\r\n pos.x, pos.y, pos.z,\r\n scale,\r\n euler.x, euler.y, euler.z,\r\n ];\r\n return VIEW_VERSION + utils.arrayToBase64(transform, Float32Array);\r\n }\r\n\r\n function decode() {\r\n // backwards compatible: old non-versioned view is the 0th version\r\n if (expression.length === 40) {\r\n expression = `0${expression}`;\r\n }\r\n\r\n const version = expression[0];\r\n transform = utils.arrayFromBase64(expression.substr(1), Float32Array);\r\n\r\n // apply adapter for old versions\r\n if (version !== VIEW_VERSION) {\r\n if (version === '0') {\r\n // cancel radiusToFit included in old views\r\n transform[3] /= 8.0;\r\n } else {\r\n // do nothing\r\n self.logger.warn(`Encoded view version mismatch, stored as ${version} vs ${VIEW_VERSION} expected`);\r\n return;\r\n }\r\n }\r\n\r\n const interpolator = self._interpolator;\r\n const srcView = interpolator.createView();\r\n srcView.position.copy(pivot.position);\r\n srcView.scale = self._objectControls.getScale();\r\n srcView.orientation.copy(self._objectControls.getOrientation());\r\n\r\n const dstView = interpolator.createView();\r\n dstView.position.set(transform[0], transform[1], transform[2]);\r\n\r\n // hack to make preset views work after we moved centering offset to visual nodes\r\n // FIXME should only store main pivot offset in preset\r\n if (self._getComplexVisual()) {\r\n dstView.position.sub(self._getComplexVisual().position);\r\n }\r\n\r\n dstView.scale = transform[3]; // eslint-disable-line prefer-destructuring\r\n dstView.orientation.setFromEuler(new THREE.Euler(transform[4], transform[5], transform[6], eulerOrder));\r\n\r\n interpolator.setup(srcView, dstView);\r\n }\r\n\r\n if (typeof expression === 'undefined') {\r\n return encode();\r\n }\r\n decode();\r\n\r\n return expression;\r\n};\r\n\r\n/*\r\n * Update current view due to viewinterpolator state\r\n */\r\nMiew.prototype._updateView = function () {\r\n const self = this;\r\n const { pivot } = this._gfx;\r\n\r\n const interpolator = this._interpolator;\r\n if (!interpolator.wasStarted()) {\r\n interpolator.start();\r\n }\r\n\r\n if (!interpolator.isMoving()) {\r\n return;\r\n }\r\n\r\n const res = interpolator.getCurrentView();\r\n if (res.success) {\r\n const curr = res.view;\r\n pivot.position.copy(curr.position);\r\n self._objectControls.setScale(curr.scale * settings.now.radiusToFit);\r\n self._objectControls.setOrientation(curr.orientation);\r\n this.dispatchEvent({ type: 'transform' });\r\n self._needRender = true;\r\n }\r\n};\r\n\r\n/**\r\n * Translate object by vector\r\n * @param {number} x - translation value (Ang) along model's X axis\r\n * @param {number} y - translation value (Ang) along model's Y axis\r\n * @param {number} z - translation value (Ang) along model's Z axis\r\n */\r\nMiew.prototype.translate = function (x, y, z) {\r\n this._objectControls.translatePivot(x, y, z);\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Rotate object by Euler angles\r\n * @param {number} x - rotation angle around X axis in radians\r\n * @param {number} y - rotation angle around Y axis in radians\r\n * @param {number} z - rotation angle around Z axis in radians\r\n */\r\nMiew.prototype.rotate = function (x, y, z) {\r\n this._objectControls.rotate(new THREE.Quaternion().setFromEuler(new THREE.Euler(x, y, z, 'XYZ')));\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Scale object by factor\r\n * @param {number} factor - scale multiplier, should greater than zero\r\n */\r\nMiew.prototype.scale = function (factor) {\r\n if (factor <= 0) {\r\n throw new RangeError('Scale should be greater than zero');\r\n }\r\n this._objectControls.scale(factor);\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Center view on selection\r\n * @param {empty | subset | string} selector - defines part of molecule which must be centered (\r\n * empty - center on current selection;\r\n * subset - center on picked atom/residue/molecule;\r\n * string - center on atoms correspond to selection string)\r\n */\r\nMiew.prototype.center = function (selector) {\r\n // no arguments - center on current selection;\r\n if (selector === undefined) {\r\n this.setPivotSubset();\r\n this._needRender = true;\r\n return;\r\n }\r\n // subset with atom or residue - center on picked atom/residue;\r\n if (selector.obj !== undefined && ('atom' in selector.obj || 'residue' in selector.obj)) { // from event with selection\r\n if ('atom' in selector.obj) {\r\n this.setPivotAtom(selector.obj.atom);\r\n } else {\r\n this.setPivotResidue(selector.obj.residue);\r\n }\r\n this._needRender = true;\r\n return;\r\n }\r\n // string - center on atoms correspond to selection string\r\n if (selector.obj === undefined && selector !== '') {\r\n const sel = selectors.parse(selector);\r\n if (sel.error === undefined) {\r\n this.setPivotSubset(sel);\r\n this._needRender = true;\r\n return;\r\n }\r\n }\r\n // empty subset or incorrect/empty string - center on all molecule;\r\n this.resetPivot();\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Build selector that contains all atoms within given distance from group of atoms\r\n * @param {Selector} selector - selector describing source group of atoms\r\n * @param {number} radius - distance\r\n * @returns {Selector} selector describing result group of atoms\r\n */\r\nMiew.prototype.within = function (selector, radius) {\r\n const visual = this._getComplexVisual();\r\n if (!visual) {\r\n return selectors.None();\r\n }\r\n\r\n if (selector instanceof String) {\r\n selector = selectors.parse(selector);\r\n }\r\n\r\n const res = visual.within(selector, radius);\r\n if (res) {\r\n visual.rebuildSelectionGeometry();\r\n this._needRender = true;\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Get atom position in 2D canvas coords\r\n * @param {string} fullAtomName - full atom name, like A.38.CG\r\n * @returns {Object} {x, y} or false if atom not found\r\n */\r\nMiew.prototype.projected = function (fullAtomName, complexName) {\r\n const visual = this._getComplexVisual(complexName);\r\n if (!visual) {\r\n return false;\r\n }\r\n\r\n const atom = visual.getComplex().getAtomByFullname(fullAtomName);\r\n if (atom === null) {\r\n return false;\r\n }\r\n\r\n const pos = atom.position.clone();\r\n // we consider atom position to be affected only by common complex transform\r\n // ignoring any transformations that may add during editing\r\n this._gfx.pivot.updateMatrixWorldRecursive();\r\n this._gfx.camera.updateMatrixWorldRecursive();\r\n this._gfx.pivot.localToWorld(pos);\r\n pos.project(this._gfx.camera);\r\n\r\n return {\r\n x: (pos.x + 1.0) * 0.5 * this._gfx.width,\r\n y: (1.0 - pos.y) * 0.5 * this._gfx.height,\r\n };\r\n};\r\n\r\n/**\r\n * Replace secondary structure with calculated one.\r\n *\r\n * DSSP algorithm implementation is used.\r\n *\r\n * Kabsch W, Sander C. 1983. Dictionary of protein secondary structure: pattern recognition of hydrogen-bonded and\r\n * geometrical features. Biopolymers. 22(12):2577-2637. doi:10.1002/bip.360221211.\r\n *\r\n * @param {string=} complexName - complex name\r\n */\r\nMiew.prototype.dssp = function (complexName) {\r\n const visual = this._getComplexVisual(complexName);\r\n if (!visual) {\r\n return;\r\n }\r\n visual.getComplex().dssp();\r\n\r\n // rebuild dependent representations (cartoon or ss-colored)\r\n visual._reprList.forEach((rep) => {\r\n if (rep.mode.id === 'CA' || rep.colorer.id === 'SS') {\r\n rep.needsRebuild = true;\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype.exportCML = function () {\r\n const self = this;\r\n\r\n function extractRotation(m) {\r\n const xAxis = new THREE.Vector3();\r\n const yAxis = new THREE.Vector3();\r\n const zAxis = new THREE.Vector3();\r\n m.extractBasis(xAxis, yAxis, zAxis);\r\n xAxis.normalize();\r\n yAxis.normalize();\r\n zAxis.normalize();\r\n const retMat = new THREE.Matrix4();\r\n retMat.identity();\r\n retMat.makeBasis(xAxis, yAxis, zAxis);\r\n return retMat;\r\n }\r\n\r\n function updateCMLData(complex) {\r\n const { root } = self._gfx;\r\n const mat = extractRotation(root.matrixWorld);\r\n const v4 = new THREE.Vector4(0, 0, 0, 0);\r\n const vCenter = new THREE.Vector4(0, 0, 0, 0);\r\n let xml = null;\r\n let ap = null;\r\n\r\n // update atoms in cml\r\n complex.forEachAtom((atom) => {\r\n if (atom.xmlNodeRef && atom.xmlNodeRef.xmlNode) {\r\n xml = atom.xmlNodeRef.xmlNode;\r\n ap = atom.position;\r\n v4.set(ap.x, ap.y, ap.z, 1.0);\r\n v4.applyMatrix4(mat);\r\n xml.setAttribute('x3', v4.x.toString());\r\n xml.setAttribute('y3', v4.y.toString());\r\n xml.setAttribute('z3', v4.z.toString());\r\n xml.removeAttribute('x2');\r\n xml.removeAttribute('y2');\r\n }\r\n });\r\n // update stereo groups in cml\r\n complex.forEachSGroup((sGroup) => {\r\n if (sGroup.xmlNodeRef && sGroup.xmlNodeRef.xmlNode) {\r\n xml = sGroup.xmlNodeRef.xmlNode;\r\n ap = sGroup.getPosition();\r\n v4.set(ap.x, ap.y, ap.z, 1.0);\r\n const cp = sGroup.getCentralPoint();\r\n if (cp === null) {\r\n v4.applyMatrix4(mat);\r\n } else {\r\n vCenter.set(cp.x, cp.y, cp.z, 0.0);\r\n v4.add(vCenter);\r\n v4.applyMatrix4(mat); // pos in global space\r\n vCenter.set(cp.x, cp.y, cp.z, 1.0);\r\n vCenter.applyMatrix4(mat);\r\n v4.sub(vCenter);\r\n }\r\n xml.setAttribute('x', v4.x.toString());\r\n xml.setAttribute('y', v4.y.toString());\r\n xml.setAttribute('z', v4.z.toString());\r\n }\r\n });\r\n }\r\n\r\n const visual = self._getComplexVisual();\r\n const complex = visual ? visual.getComplex() : null;\r\n if (complex && complex.originalCML) {\r\n updateCMLData(complex);\r\n\r\n // serialize xml structure to string\r\n const oSerializer = new XMLSerializer();\r\n return oSerializer.serializeToString(complex.originalCML);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Reproduce the RCSB PDB Molecule of the Month style by David S. Goodsell\r\n *\r\n * @see http://pdb101.rcsb.org/motm/motm-about\r\n */\r\nMiew.prototype.motm = function () {\r\n settings.set({\r\n fogColorEnable: true,\r\n fogColor: 0x000000,\r\n outline: { on: true, threshold: 0.01 },\r\n bg: { color: 0xffffff },\r\n });\r\n\r\n this._forEachComplexVisual((visual) => {\r\n const rep = [];\r\n const complex = visual.getComplex();\r\n const palette = palettes.get(settings.now.palette);\r\n for (let i = 0; i < complex.getChainCount(); i++) {\r\n const curChainName = complex._chains[i]._name;\r\n const curChainColor = palette.getChainColor(curChainName);\r\n rep[i] = {\r\n selector: `chain ${curChainName}`,\r\n mode: 'VW',\r\n colorer: ['CB', { color: curChainColor, factor: 0.9 }],\r\n material: 'FL',\r\n };\r\n }\r\n visual.resetReps(rep);\r\n });\r\n};\r\n\r\nMiew.prototype.VERSION = (typeof PACKAGE_VERSION !== 'undefined' && PACKAGE_VERSION) || '0.0.0-dev';\r\n\r\n// Uncomment this to get debug trace:\r\n// Miew.prototype.debugTracer = new utils.DebugTracer(Miew.prototype);\r\n\r\n_.assign(Miew, /** @lends Miew */ {\r\n VERSION: Miew.prototype.VERSION,\r\n\r\n registeredPlugins: [],\r\n\r\n // export namespaces // TODO: WIP: refactoring external interface\r\n chem,\r\n io,\r\n modes,\r\n colorers,\r\n materials,\r\n palettes,\r\n options,\r\n settings,\r\n utils,\r\n gfx: {\r\n Representation,\r\n },\r\n\r\n /**\r\n * Third-party libraries packaged together with Miew.\r\n *\r\n * @property {object} lodash - [Lodash](https://lodash.com/), a modern JavaScript utility library delivering\r\n * modularity, performance & extras.\r\n * @property {object} three - [three.js](https://threejs.org/), JavaScript 3D library.\r\n *\r\n * @example\r\n * var _ = Miew.thirdParty.lodash;\r\n * var opts = _.merge({ ... }, Miew.options.fromURL(window.location.search));\r\n * var miew = new Miew(opts);\r\n */\r\n thirdParty: {\r\n lodash: _,\r\n three: THREE,\r\n },\r\n});\r\n\r\nexport default Miew;\r\n","import palettes from '../gfx/palettes';\r\nimport settings from '../settings';\r\n\r\nconst modeIdDesc = {\r\n $help: [\r\n 'Rendering mode shortcut',\r\n ' BS - balls and sticks mode',\r\n ' LN - lines mode',\r\n ' LC - licorice mode',\r\n ' VW - van der waals mode',\r\n ' TR - trace mode',\r\n ' TU - tube mode',\r\n ' CA - cartoon mode',\r\n ' SA - isosurface mode',\r\n ' QS - quick surface mode',\r\n ' SE - solvent excluded mode',\r\n ' TX - text mode',\r\n ],\r\n BS: {\r\n $help: [\r\n ' Balls and sticks',\r\n ' aromrad = #aromatic radius',\r\n ' atom = #atom radius',\r\n ' bond = #bond radius',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' space = #space value\\n',\r\n ],\r\n },\r\n CA: {\r\n $help: [\r\n ' Cartoon',\r\n ' arrow = #arrow size',\r\n ' depth = #depth of surface',\r\n ' heightSegmentsRatio = ',\r\n ' radius = #tube radius',\r\n ' tension = #',\r\n ' width = #secondary width\\n',\r\n ],\r\n },\r\n LN: {\r\n $help: [\r\n ' Lines',\r\n ' atom = #atom radius',\r\n ' chunkarom = ',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' offsarom = \\n',\r\n ],\r\n },\r\n LC: {\r\n $help: [\r\n ' Licorice',\r\n ' aromrad = #aromatic radius',\r\n ' bond = #bond radius',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' space = #space value\\n',\r\n ],\r\n },\r\n VW: {\r\n $help: [\r\n ' Van der Waals',\r\n ' nothing\\n',\r\n ],\r\n },\r\n TR: {\r\n $help: [\r\n ' Trace',\r\n ' radius = #tube radius\\n',\r\n ],\r\n },\r\n TU: {\r\n $help: [\r\n ' Tube',\r\n ' heightSegmentsRatio = ',\r\n ' radius = #tube radius',\r\n ' tension = \\n',\r\n ],\r\n },\r\n SA: {\r\n $help: [\r\n ' Surface',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n QS: {\r\n $help: [\r\n ' Quick surface',\r\n ' isoValue = ',\r\n ' scale = ',\r\n ' wireframe = ',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n SE: {\r\n $help: [\r\n ' Solvent excluded surface',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n TX: {\r\n $help: [\r\n ' Text mode',\r\n ' template = string that can include \"{{ id }}\"',\r\n ' it will be replaced by value, id can be one of next:',\r\n ' serial, name, type, sequence, residue, chain, hetatm, water\\n',\r\n ' horizontalAlign = {\"left\", \"right\", \"center\"}',\r\n ' verticalAlign = {\"top\", \"bottom\", \"middle\"}',\r\n ' dx = #offset along x',\r\n ' dy = #offset along y',\r\n ' dz = #offset along z',\r\n ' fg = #text color modificator',\r\n ' could be keyword, named color or hex',\r\n ' fg = #back color modificator',\r\n ' could be keyword, named color or hex',\r\n ' showBg = #if set show background',\r\n ' plate under text',\r\n ],\r\n },\r\n};\r\n\r\nconst colorDesc = {\r\n $help: [\r\n 'Coloring mode shortcut',\r\n ' EL - color by element',\r\n ' CH - color by chain',\r\n ' SQ - color by sequence',\r\n ' RT - color by residue type',\r\n ' SS - color by secondary structure',\r\n ' UN - uniform',\r\n ],\r\n UN: {\r\n $help: [\r\n 'Parameters of coloring modes customization',\r\n ' Uniform',\r\n ' color = #RGB->HEX->dec\\n',\r\n ],\r\n color: {\r\n $help: Object.keys(palettes.get(settings.now.palette).namedColors).sort().join('\\n'),\r\n },\r\n },\r\n};\r\n\r\nconst materialDesc = {\r\n $help: [\r\n 'Material shortcut',\r\n ' DF - diffuse',\r\n ' TR - transparent',\r\n ' SF - soft plastic',\r\n ' PL - glossy plastic',\r\n ' ME - metal',\r\n ' GL - glass',\r\n ],\r\n};\r\n\r\nconst addRepDesc = {\r\n $help: [\r\n 'Short (packed) representation description as a set of variables',\r\n ' s=',\r\n ' selector property',\r\n ' m=[!:[,...]]',\r\n ' render mode property',\r\n ' c=[!:[,...]]',\r\n ' color mode property',\r\n ' mt=',\r\n ' material property',\r\n ],\r\n s: {\r\n $help: 'Selection expression string as it is in menu->representations->selection',\r\n },\r\n m: modeIdDesc,\r\n c: colorDesc,\r\n mt: materialDesc,\r\n};\r\n\r\nconst setGetParameterDesc = {\r\n $help: [\r\n 'Parameters of rendering modes customization: modes',\r\n 'Parameters of colorer customization: colorers',\r\n 'Autobuild: autobuild = (|)',\r\n ],\r\n modes: modeIdDesc,\r\n colorers: colorDesc,\r\n};\r\n\r\nconst help = {\r\n $help: [\r\n 'help (| )',\r\n 'You can get detailed information about command options',\r\n ' using \"help cmd.opt.opt.[...]\"\\n',\r\n ' you can use one line comments',\r\n ' everything started from (#|//) will be skipped',\r\n ' Example: >build //some comment\\n',\r\n 'List of available commands:',\r\n ],\r\n reset: {\r\n $help: [\r\n 'Reload current object, delete all representations',\r\n ' Nothing will work until load new object',\r\n ],\r\n },\r\n load: {\r\n $help: [\r\n 'load (||-f [<*.NC FILE URL STRING>])',\r\n ' Load new pdb object from selected source',\r\n ],\r\n PDBID: {\r\n $help: 'pdb id in remote molecule database',\r\n },\r\n URL: {\r\n $help: 'url to source file',\r\n },\r\n f: {\r\n $help: [\r\n 'open file system dialog to fetch local file',\r\n 'optionally you can determine trajectory file',\r\n 'via URL for *.top model',\r\n ],\r\n },\r\n },\r\n clear: {\r\n $help: 'No args. Clear terminal',\r\n },\r\n add: {\r\n $help: [\r\n 'add [] []',\r\n ' Add new item to representation set with',\r\n ' default or params',\r\n ],\r\n REP_NAME: {\r\n $help: 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n },\r\n DESCRIPTION: addRepDesc,\r\n },\r\n rep: {\r\n $help: [\r\n 'rep [|] []',\r\n ' set current representation by name or index',\r\n ' edit current representation by ',\r\n ],\r\n REP_NAME: {\r\n $help: [\r\n 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n 'Must be declared before',\r\n ],\r\n },\r\n REP_INDEX: {\r\n $help: 'Index of available representation',\r\n },\r\n DESCRIPTION: addRepDesc,\r\n },\r\n remove: {\r\n $help: [\r\n 'remove (|)',\r\n 'Remove representation by name or index',\r\n ],\r\n REP_NAME: {\r\n $help: [\r\n 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n 'Must be declared before',\r\n ],\r\n },\r\n REP_INDEX: {\r\n $help: 'Index of available representation',\r\n },\r\n },\r\n selector: {\r\n $help: [\r\n 'selector ',\r\n ' set selector from EXPRESSION to current representation',\r\n ],\r\n EXPRESSION: {\r\n $help: 'Selection expression string as it is in menu->representations->selection',\r\n },\r\n },\r\n mode: {\r\n $help: [\r\n 'mode [=...]',\r\n ' set rendering mode and apply parameters to current representation',\r\n ],\r\n MODE_ID: modeIdDesc,\r\n },\r\n color: {\r\n $help: [\r\n 'color [=...]',\r\n ' set colorer and apply parameters to current representation',\r\n ],\r\n COLORER_ID: colorDesc,\r\n },\r\n material: {\r\n $help: [\r\n 'material ',\r\n ' set material to current representation',\r\n ],\r\n MATERIAL_ID: materialDesc,\r\n },\r\n build: {\r\n $help: 'build help str',\r\n add: {\r\n $help: 'build.add',\r\n new: {\r\n $help: [\r\n 'add.new',\r\n 'add.new new line 1',\r\n 'add.new new line 2',\r\n 'add.new new line 3',\r\n ],\r\n },\r\n },\r\n del: {\r\n $help: 'build.del',\r\n },\r\n },\r\n list: {\r\n $help: [\r\n 'list [-e|-s||]',\r\n 'Print representations if no args print list of representations',\r\n ' -e expand list and show all representations',\r\n ' -s show all user-registered selectors',\r\n ' | show only current representation',\r\n ],\r\n },\r\n hide: {\r\n $help: [\r\n 'hide (|)',\r\n 'Hide representation referenced in args',\r\n ],\r\n },\r\n show: {\r\n $help: [\r\n 'show (|)',\r\n 'Show representation referenced in args',\r\n ],\r\n },\r\n get: {\r\n $help: [\r\n 'get ',\r\n 'Print value',\r\n ' - path to option use get.PARAMETER to get more info',\r\n ],\r\n PARAMETER: setGetParameterDesc,\r\n },\r\n set: {\r\n $help: [\r\n 'set ',\r\n 'Set with ',\r\n ' - path to option use set.PARAMETER to get more info',\r\n ],\r\n PARAMETER: setGetParameterDesc,\r\n },\r\n set_save: {\r\n $help: [\r\n 'set_save',\r\n 'Save current settings to cookie',\r\n ],\r\n },\r\n set_restore: {\r\n $help: [\r\n 'set_restore',\r\n 'Load and apply settings from cookie',\r\n ],\r\n },\r\n set_reset: {\r\n $help: [\r\n 'set_reset',\r\n 'Reset current settings to the defaults',\r\n ],\r\n },\r\n preset: {\r\n $help: [\r\n 'preset []',\r\n 'Reset current representation or set preset to ',\r\n ],\r\n PRESET: {\r\n $help: [\r\n 'default',\r\n 'wire',\r\n 'small',\r\n 'macro',\r\n ],\r\n },\r\n },\r\n unit: {\r\n $help: [\r\n 'unit []',\r\n 'Change current biological structure view. Zero value means asymmetric unit,',\r\n 'positive values set an assembly with corresponding number.',\r\n 'Being called with no parameters command prints current unit information.',\r\n ],\r\n },\r\n view: {\r\n $help: [\r\n 'view []',\r\n 'Get current encoded view or set if ENCODED_VIEW placed as argument',\r\n ],\r\n ENCODED_VIEW: {\r\n $help: [\r\n 'encoded view matrix string (binary code)',\r\n ],\r\n },\r\n },\r\n rotate: {\r\n $help: [\r\n 'rotate (x|y|z) [] [(x|y|z) []]...',\r\n 'Rotate scene',\r\n ],\r\n },\r\n scale: {\r\n $help: [\r\n 'scale ',\r\n 'Scale scene',\r\n ],\r\n },\r\n select: {\r\n $help: [\r\n 'select [as ]',\r\n 'Select atoms using selector defined in SELECTOR_STRING',\r\n ' and if SELECTOR_NAME is defined register it in viewer',\r\n ' you can use it later as a complex selector',\r\n ],\r\n },\r\n within: {\r\n $help: [\r\n 'within of as ',\r\n 'Build within named selector',\r\n ' DISTANCE ',\r\n ' SELECTOR_STRING ',\r\n ' SELECTOR_NAME ',\r\n ],\r\n },\r\n url: {\r\n $help: [\r\n 'url [-s] [-v]',\r\n 'Report URL encoded scene',\r\n ' if -s set that include settings in the URL',\r\n ' if -v set that include view in the URL',\r\n ],\r\n },\r\n screenshot: {\r\n $help: [\r\n 'screenshot [ []]',\r\n 'Make a screenshot of the scene',\r\n ' WIDTH in pixels',\r\n ' HEIGHT in pixels, equal to WIDTH by default',\r\n ],\r\n },\r\n line: {\r\n $help: [\r\n 'line [=]',\r\n 'Draw dashed line between two specified atoms',\r\n ],\r\n },\r\n removeobj: {\r\n $help: [\r\n 'removeobj ',\r\n 'Remove scene object by its index. Indices could be obtained by command',\r\n ],\r\n },\r\n listobj: {\r\n $help: [\r\n 'listobj',\r\n 'Display the list of all existing scene objects',\r\n ],\r\n },\r\n};\r\n\r\nexport default help;\r\n","import _ from 'lodash';\r\nimport Miew from './Miew';\r\nimport { parser as parsercli } from './utils/MiewCLIParser';\r\nimport clihelp from './utils/MiewCLIHelp';\r\nimport logger from './utils/logger';\r\nimport utils from './utils';\r\n\r\nconst {\r\n chem: { selectors },\r\n modes,\r\n colorers,\r\n materials,\r\n palettes,\r\n options,\r\n settings,\r\n} = Miew;\r\n\r\nfunction None() {\r\n}\r\n\r\nconst NULL = (function () {\r\n const obj = new None();\r\n return function () {\r\n return obj;\r\n };\r\n}());\r\n\r\nclass RepresentationMap {\r\n constructor() {\r\n this.representationMap = {};\r\n this.representationID = {};\r\n }\r\n\r\n get(strId) {\r\n return this.representationMap[strId] || this.representationID[strId] || '';\r\n }\r\n\r\n add(strId, index) {\r\n if (strId === -1) {\r\n return 'Can not create representation: there is no data';\r\n }\r\n\r\n if (index !== undefined) {\r\n if (!this.representationMap.hasOwnProperty(strId)) {\r\n this.representationMap[strId.toString()] = index;\r\n this.representationID[index] = strId.toString();\r\n } else {\r\n return 'This name has already existed, registered without name';\r\n }\r\n }\r\n return `Representation ${strId} successfully added`;\r\n }\r\n\r\n remove(index) {\r\n if (index && this.representationID.hasOwnProperty(index)) {\r\n delete this.representationMap[this.representationID[index]];\r\n delete this.representationID[index];\r\n }\r\n\r\n const sortedKeys = Object.keys(this.representationID).sort();\r\n for (const i in sortedKeys) {\r\n if (sortedKeys.hasOwnProperty(i)) {\r\n const id = sortedKeys[i];\r\n if (id > index) {\r\n this.representationID[id - 1] = this.representationID[id];\r\n this.representationMap[this.representationID[id]] -= 1;\r\n delete this.representationID[id];\r\n }\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n this.representationMap = {};\r\n this.representationID = {};\r\n }\r\n}\r\n\r\nconst representationsStorage = new RepresentationMap();\r\n\r\nfunction keyRemap(key) {\r\n const keys = {\r\n s: 'selector',\r\n m: 'mode',\r\n c: 'colorer',\r\n mt: 'material',\r\n mode: 'modes',\r\n color: 'colorers',\r\n colorer: 'colorers',\r\n select: 'selector',\r\n material: 'materials',\r\n selector: 'selector',\r\n };\r\n const ans = keys[key];\r\n return ans === undefined ? key : ans;\r\n}\r\n\r\nclass CLIUtils {\r\n list(miew, repMap, key) {\r\n let ret = '';\r\n if (miew && repMap !== undefined) {\r\n if (key === undefined || key === '-e') {\r\n const count = miew.repCount();\r\n\r\n for (let i = 0; i < count; i++) {\r\n ret += this.listRep(miew, repMap, i, key);\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n listRep(miew, repMap, repIndex, key) {\r\n let ret = '';\r\n const rep = miew.repGet(repIndex);\r\n if (!rep) {\r\n logger.warn(`Rep ${repIndex} does not exist!`);\r\n return ret;\r\n }\r\n const index = repIndex;\r\n const repName = repMap.get(index);\r\n\r\n const { mode, colorer } = rep;\r\n const selectionStr = rep.selectorString;\r\n const material = rep.materialPreset;\r\n\r\n ret += `#${index} : ${mode.name}${repName === '' ? '' : `, ${repName}`}\\n`;\r\n\r\n if (key !== undefined) {\r\n ret += ` selection : \"${selectionStr}\"\\n`;\r\n ret += ` mode : (${mode.id}), ${mode.name}\\n`;\r\n ret += ` colorer : (${colorer.id}), ${colorer.name}\\n`;\r\n ret += ` material : (${material.id}), ${material.name}\\n`;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n listSelector(miew, context) {\r\n let ret = '';\r\n\r\n for (const k in context) {\r\n if (context.hasOwnProperty(k)) {\r\n ret += `${k} : \"${context[k]}\"\\n`;\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n listObjs(miew) {\r\n const objs = miew._objects;\r\n\r\n if (!objs || !Array.isArray(objs) || objs.length === 0) {\r\n return 'There are no objects on the scene';\r\n }\r\n\r\n const strList = [];\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n strList[i] = `${i}: ${objs[i].toString()}`;\r\n }\r\n\r\n return strList.join('\\n');\r\n }\r\n\r\n joinHelpStr(helpData) {\r\n if (helpData instanceof Array) {\r\n return helpData.join('\\n');\r\n }\r\n return helpData;\r\n }\r\n\r\n help(path) {\r\n if (_.isUndefined(path)) {\r\n return `${this.joinHelpStr(clihelp.$help)}\\n${_.slice(_.sortBy(_.keys(clihelp)), 1).join(', ')}\\n`;\r\n }\r\n\r\n const helpItem = _.get(clihelp, path);\r\n return _.isUndefined(helpItem) ? this.help() : `${this.joinHelpStr(helpItem.$help)}\\n`;\r\n }\r\n\r\n load(miew, arg) {\r\n if (miew === undefined || arg === undefined || arg === '-f') {\r\n return;\r\n }\r\n miew.awaitWhileCMDisInProcess();\r\n const finish = () => miew.finishAwaitingCMDInProcess();\r\n miew.load(arg).then(finish, finish);\r\n }\r\n\r\n checkArg(key, arg, modificate) {\r\n if (key !== undefined && arg !== undefined) {\r\n if (keyRemap(key) === 'selector') {\r\n const res = selectors.parse(arg);\r\n\r\n if (res.error !== undefined) {\r\n const selExc = { message: res.error };\r\n throw selExc;\r\n }\r\n\r\n if (modificate !== undefined && modificate) {\r\n return res.selector;\r\n }\r\n return arg;\r\n }\r\n\r\n const modificators = {\r\n colorers,\r\n modes,\r\n materials,\r\n };\r\n\r\n let modificator = key;\r\n let temp;\r\n while (modificator !== temp) {\r\n temp = modificator;\r\n modificator = keyRemap(temp);\r\n }\r\n\r\n if (modificators[modificator].get(arg) === undefined) {\r\n const exc = { message: `${arg} is not existed in ${modificator}` };\r\n throw exc;\r\n }\r\n return arg;\r\n }\r\n return NULL;\r\n }\r\n\r\n propagateProp(path, arg) {\r\n if (path !== undefined) {\r\n let argExc = {};\r\n const adapter = options.adapters[typeof _.get(settings.defaults, path)];\r\n if (adapter === undefined) {\r\n const pathExc = { message: `${path} is not existed` };\r\n throw pathExc;\r\n }\r\n\r\n if ((path.endsWith('.color') || path.endsWith('.baseColor')\r\n || path.endsWith('.EL.carbon')) && typeof arg !== 'number') {\r\n arg = palettes.get(settings.now.palette).getNamedColor(arg);\r\n }\r\n\r\n if (path.endsWith('.fg') || path.endsWith('.bg')) {\r\n if (typeof arg !== 'number') {\r\n const val = palettes.get(settings.now.palette).getNamedColor(arg, true);\r\n if (val !== undefined) {\r\n arg = `0x${val.toString(16)}`;\r\n }\r\n } else {\r\n arg = `0x${arg.toString(16)}`;\r\n }\r\n }\r\n\r\n if (path.endsWith('.template')) {\r\n arg = arg.replace(/\\\\n/g, '\\n');// NOSONAR\r\n }\r\n\r\n if (arg !== undefined && adapter(arg) !== arg && adapter(arg) !== (arg > 0)) {\r\n argExc = { message: `${path} must be a \"${typeof _.get(settings.defaults, path)}\"` };\r\n throw argExc;\r\n }\r\n }\r\n return arg;\r\n }\r\n\r\n unquoteString(value) {\r\n return utils.unquoteString(value);\r\n }\r\n}\r\n// repIndexOrRepMap could be RepresentationMap or index\r\n\r\nconst utilFunctions = new CLIUtils();\r\n\r\nfunction CreateObjectPair(a, b) {\r\n const obj = {};\r\n obj[a] = b;\r\n return obj;\r\n}\r\n\r\nfunction ArgList(arg) {\r\n if (arg instanceof this.constructor) {\r\n return arg;\r\n }\r\n if (arg instanceof Array) {\r\n this._values = arg.slice(0);\r\n } else if (arg) {\r\n this._values = [arg];\r\n } else {\r\n this._values = [];\r\n }\r\n}\r\n\r\nArgList.prototype.append = function (value) {\r\n const values = this._values;\r\n values[values.length] = value;\r\n return this;\r\n};\r\n\r\nArgList.prototype.remove = function (value) {\r\n const values = this._values;\r\n const index = values.indexOf(value);\r\n if (index >= 0) {\r\n values.splice(index, 1);\r\n }\r\n return this;\r\n};\r\n\r\nArgList.prototype.toJSO = function (cliUtils, cmd, arg) {\r\n const res = {};\r\n\r\n const list = this._values;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n _.set(res, list[i].id, cliUtils.propagateProp(`${keyRemap(cmd)}.${arg}.${list[i].id}`, list[i].val));\r\n }\r\n\r\n return res;\r\n};\r\n\r\nfunction Arg(_id, _val) {\r\n this.id = _id;\r\n this.val = _val;\r\n}\r\n\r\nconst cliutils = Object.create({});\r\n\r\ncliutils.Arg = Arg;\r\ncliutils.ArgList = ArgList;\r\n\r\ncliutils.miew = null;\r\ncliutils.echo = null;\r\ncliutils.representations = representationsStorage;\r\ncliutils.utils = utilFunctions;\r\n\r\ncliutils._ = _;\r\ncliutils.CreateObjectPair = CreateObjectPair;\r\ncliutils.keyRemap = keyRemap;\r\ncliutils.Context = selectors.Context;\r\ncliutils.ClearContext = selectors.ClearContext;\r\n\r\ncliutils.NULL = NULL;\r\n\r\ncliutils.notimplemented = function () {\r\n return this.NULL;\r\n};\r\n\r\nMiew.prototype.script = function (script, _printCallback, _errorCallback) {\r\n parsercli.yy.miew = this;\r\n parsercli.yy.echo = _printCallback;\r\n parsercli.yy.error = _errorCallback;\r\n if (this.cmdQueue === undefined) {\r\n this.cmdQueue = [];\r\n }\r\n\r\n if (this.commandInAction === undefined) {\r\n this.commandInAction = false;\r\n }\r\n\r\n this.cmdQueue = this.cmdQueue.concat(script.split('\\n'));\r\n};\r\n\r\nMiew.prototype.awaitWhileCMDisInProcess = function () {\r\n this.commandInAction = true;\r\n};\r\n\r\nMiew.prototype.finishAwaitingCMDInProcess = function () {\r\n this.commandInAction = false;\r\n};\r\n\r\nMiew.prototype.isScriptingCommandAvailable = function () {\r\n return this.commandInAction !== undefined\r\n && !this.commandInAction\r\n && this.cmdQueue !== undefined\r\n && this.cmdQueue.length > 0;\r\n};\r\n\r\nMiew.prototype.callNextCmd = function () {\r\n if (this.isScriptingCommandAvailable()) {\r\n const cmd = this.cmdQueue.shift();\r\n\r\n const res = {};\r\n res.success = false;\r\n try {\r\n parsercli.parse(cmd);\r\n res.success = true;\r\n } catch (e) {\r\n res.error = e.message;\r\n parsercli.yy.error(res.error);\r\n this.finishAwaitingCMDInProcess();\r\n }\r\n return res;\r\n }\r\n return '';\r\n};\r\n\r\nparsercli.yy = cliutils;\r\n// workaround for incorrect JISON parser generator for AMD module\r\nparsercli.yy.parseError = parsercli.parseError;\r\n","import Miew from './Miew';\r\nimport './Miew-cli';\r\n\r\nexport default Miew;\r\n"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE__535__","__WEBPACK_EXTERNAL_MODULE__698__","parser","o","k","v","l","length","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","$VV","$VW","$VX","$VY","$VZ","$V_","$V$","$V01","$V11","$V21","$V31","$V41","$V51","$V61","trace","yy","symbols_","terminals_","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","miew","reset","ClearContext","resetReps","rebuild","rebuildAll","echo","utils","help","toString","motm","propagateProp","get","set","saveSettings","restoreSettings","resetSettings","applyPreset","repRemove","representations","remove","repHide","listRep","list","listSelector","Context","select","checkArg","toLowerCase","rep","repCurrent","selector","within","Number","material","toUpperCase","view","changeUnit","dssp","scale","i","n","rotate","Math","PI","translate","center","addObject","type","params","opts","toJSO","listObjs","removeObject","getURL","settings","screenshotSave","load","clear","add","repAdd","mode","Array","colorer","_","assign","CreateObjectPair","key","val","Object","create","keyRemap","concat","ArgList","append","Arg","parseInt","JSON","parse","String","table","defaultActions","parseError","str","hash","recoverable","error","Error","input","self","stack","tstack","vstack","lstack","recovering","args","slice","call","arguments","lexer","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","push","ranges","options","getPrototypeOf","symbol","preErrorSymbol","state","action","r","p","len","newState","expected","token","yyval","pop","lex","errStr","showPosition","join","text","match","line","loc","first_line","last_line","first_column","last_column","range","apply","EOF","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","unput","lines","split","substr","oldLines","more","reject","backtrack_lexer","less","pastInput","past","replace","upcomingInput","next","pre","c","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","flex","begin","condition","popState","conditions","topState","abs","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","unquoteString","Parser","keyword","GetSelector","RangeList","Range","ValueList","AbstractInterpolator","CubicInterpolator","Enum","LinearInterpolator","NearestInterpolator","SincFilterInterpolator","Smooth","clipClamp","clipMirror","clipPeriodic","defaultConfig","getColumn","getType","isValidNumber","makeLanczosWindow","makeScaledFunction","makeSincKernel","normalizeScaleTo","shallowCopy","sin","sinc","validateNumber","validateVector","__hasProp","__extends","child","parent","ctor","constructor","__super__","method","METHOD_NEAREST","METHOD_LINEAR","METHOD_CUBIC","METHOD_LANCZOS","METHOD_SINC","CLIP_CLAMP","CLIP_ZERO","CLIP_PERIODIC","CLIP_MIRROR","CUBIC_TENSION_DEFAULT","CUBIC_TENSION_CATMULL_ROM","cubicTension","clip","scaleTo","sincFilterSize","sincWindow","max","min","period","array","config","clipHelper","clamp","clipHelperClamp","zero","clipHelperZero","periodic","clipHelperPeriodic","mirror","clipHelperMirror","getClippedInput","interpolate","t","_super","round","floor","tangentFactor","getTangent","m","t2","t3","x","a","window","kernel","sum","_ref","_ref2","arr","row","_i","_len","_results","f","baseScale","scaleRange","scaleFactor","translation","isNaN","isFinite","dimension","s","invalidErr","obj","copy","baseDomainEnd","interpolator","interpolatorClass","interpolators","properties","smoothFunc","lanczosFilterSize","nearest","linear","cubic","lanczos","count","_j","_len2","deepValidation","_k","_len3","domain","sort","e","byteLength","charCodeAt","setUint8","u","setUint16","setUint32","Uint8Array","buffer","setFloat64","setInt8","setInt16","setInt32","isArray","d","keys","ArrayBuffer","DataView","byteOffset","Int8Array","Int32Array","Float32Array","Int16Array","g","L","h","setFloat32","getFloat32","y","U","b","I","w","C","ceil","A","M","F","S","E","N","O","T","getInt32","subarray","j","q","D","P","z","B","V","G","R","rr","forEach","bondAtomList","bondOrderList","xCoordList","yCoordList","zCoordList","bFactorList","atomIdList","altLocList","occupancyList","groupIdList","groupTypeList","secStructList","insCodeList","sequenceIndexList","chainIdList","chainNameList","H","fromCharCode","getInt8","getUint8","getUint16","getUint32","getFloat64","getInt16","W","X","ignoreFields","nr","indexOf","J","K","firstModelOnly","onModel","onChain","onGroup","onAtom","onBond","chainsPerModel","chainCount","modelIndex","groupsPerChain","groupCount","chainIndex","chainId","chainName","groupList","atomNameList","atomCount","groupIndex","groupId","groupType","groupName","singleLetterCode","chemCompType","secStruct","insCode","sequenceIndex","atomIndex","atomId","element","elementList","atomName","formalCharge","formalChargeList","xCoord","yCoord","zCoord","bFactor","altLoc","occupancy","atomIndex1","atomIndex2","bondOrder","Q","Y","Z","response","XMLHttpRequest","addEventListener","responseType","open","send","or","ar","tr","er","ir","encode","decode","traverse","fetch","fetchReduced","version","fetchUrl","fetchReducedUrl","encodeMsgpack","encodeMmtf","decodeMsgpack","decodeMmtf","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","defineProperty","enumerable","prop","__assign","defaults","width","radius","corners","color","fadeColor","animation","direction","speed","zIndex","className","top","left","shadow","position","Spinner","spin","target","stop","el","document","createElement","setAttribute","style","transform","insertBefore","firstChild","borderRadius","shadows","boxShadow","regex","_a","xUnits","yUnits","prefix","end","parseBoxShadow","degrees","backgroundLine","height","background","getColor","transformOrigin","delay","normalizeShadow","appendChild","drawLines","parentNode","removeChild","idx","normalized","shadows_1","xy","convertOffset","radians","cos","Timer","startTime","oldTime","elapsedTime","running","start","now","getElapsedTime","update","delta","newTime","performance","bind","Date","tag","id","css","cssText","domElement","_text","_startTime","_prevTime","_deltas","_index","_total","_count","time","ms","fps","textContent","toPrecision","show","on","display","isUndefOrEqual","param","value","EventDispatcher","_handlers","callback","context","handlers","par","removeEventListener","handler","ev","values","dispatchEvent","event","priorities","debug","info","report","warn","Logger","console","_priority","verify","number","instantiate","level","levels","message","priority","_message","browserType","DEFAULT","SAFARI","decodeQueryComponent","decodeURIComponent","getUrlParameters","url","query","location","search","substring","result","exec","DebugTracer","namespace","enabled","enable","indent","methods","wrap","method_","name_","spaces","logger","_key","name","Function","OutOfMemoryError","super","bytesToBase64","bytes","binary","btoa","bytesFromBase64","atob","isAlmostPlainObject","proto","getFileExtension","fileName","lastIndexOf","Infinity","dataUrlToBlob","parts","partsCount","Blob","unquotedStringRE","enquoteHelper","encodeQueryComponent","excludeExp","encodeURIComponent","code","getUrlParametersAsDict","resolveURL","URL","href","anchor","generateRegExp","symbolStr","symbolList","listStr","RegExp","attrs","content","createTextNode","HTMLElement","deriveClass","cls","base","members","statics","deriveDeep","needZeroOwnProperties","res","hexColor","allocateTyped","TypedArrayName","size","RangeError","arrayFromBase64","TypedArrayClass","arrayToBase64","compareOptionsWithDefaults","defOpts","optsStr","objectsDiff","src","dst","diff","srcValue","dstValue","deepDiff","forInRecursive","object","iterateThrough","newPref","enquoteString","SyntaxError","getBrowser","navigator","vendor","userAgent","shotOpen","write","shotDownload","dataUrl","filename","msSaveBlob","link","download","innerHTML","createObjectURL","body","click","copySubArrays","indices","itemSize","shallowCloneNode","node","newNode","cloneNode","worldPos","correctSelectorIdentifier","test","splitFileName","ext","data","blobData","concatTypedArraysUnsafe","first","second","mergeTypedArraysUnsafe","reduce","acc","cur","JobHandle","_shouldCancel","cancel","shouldCancel","notify","slaveEvent","modes","BS","atom","bond","space","multibond","aromrad","showarom","polyComplexity","poor","low","medium","high","ultra","VW","LN","offsarom","chunkarom","lineWidth","LC","SA","zClip","probeRadius","subset","wireframe","SE","QS","isoValue","gaussLim","gridSpacing","CS","probePositions","TR","TU","heightSegmentsRatio","tension","CA","depth","ss","helix","arrow","strand","TX","template","horizontalAlign","verticalAlign","dx","dy","dz","fg","bg","showBg","VD","kSigma","kSigmaMed","kSigmaMax","frame","isoMode","colorers","EL","carbon","UN","CO","baseColor","CB","factor","SQ","gradient","TM","OC","HY","MO","antialias","camFov","camNear","camFar","camDistance","radiusToFit","fogNearFactor","fogFarFactor","fogAlpha","fogColor","fogColorEnable","palette","resolution","autoResolution","autoPreset","preset","presets","default","empty","wire","small","macro","objects","dashSize","gapSize","transparent","draft","clipPlane","clipPlaneFactor","clipPlaneSpeed","plugins","axes","fog","zSprites","isoSurfaceFakeOpacity","suspendRender","nowater","autobuild","fxaa","outline","threshold","thickness","ao","autoRotation","maxfps","fbxprec","autoRotationAxisFixed","zooming","picking","pick","editing","aromatic","singleUnit","stereo","interpolateViews","transparency","translationSpeed","example","good","ssaoKernelRadius","ssaoFactor","stereoBarrel","use","multiFile","Settings","old","_changed","path","_notifyChange","_notifyChanges","defaultValue","checkpoint","deepValue","deepPath","changed","applyDiffs","diffs","VERSION","getDiffs","versioned","setPluginOpts","plugin","repIndex","asBoolean","adapters","string","boolean","cOptsSep","cL2Ass","cLSep","cCommonIgnoreSymbols","cL1ExclExpr","encodeQueryComponentL1","cL2ExclExpr","encodeQueryComponentL2","ensureRepList","reps","ensureRepAssign","extractArgs","defaultsDict","bang","inputVal","sep","parseParams","arg","pair","adapter","actions","unit","menu","_objects","newOpts","newObj","mt","materials","dup","_fromArray","entries","entry","_processOptsForURL","_processArgsForURL","_processObjForURL","objOpts","_processOptsForScript","_processArgsForScript","_processObjForScript","map","_processRepsForScript","repString","strIdx","localAdd","fromURL","fromAttr","attr","toURL","stringList","checkAndAdd","repList","addReps","objList","addObjects","protocol","host","pathname","toScript","commandsList","command","saveQuotes","quote","trim","Atom","residue","role","het","serial","temperature","charge","mask","hydrogenCount","radicalCount","valence","bonds","flags","Flags","HYDROGEN","CARBON","isHet","isHydrogen","getVisualName","forEachBond","process","getFullName","_chain","getName","_sequence","static","NONPOLARH","Element","fullName","weight","radiusBonding","hValency","hydrogenValency","U1","Lead","U2","Wing","U18","Constants","SG","byAtomicNumber","ByAtomicNumber","byName","ByName","getByName","cBondTypes","UNKNOWN","COVALENT","AROMATIC","getAtomPos","Bond","right","order","fixed","_left","_right","_fixed","_order","_type","getLeft","getRight","getOrder","calcLength","distanceTo","_forEachNeighbour","currAtom","forEachLevelOne","forEachLevelTwo","l2Atom","_fixDir","refPoint","currDir","posGetter","rightCount","leftCount","tmpVec","clone","checkDir","sub","dot","checkCarbon","stages","stageId","multiplyScalar","calcNormalDir","third","maxNeibs","another","secondPos","firstV","secondV","crossVectors","lengthSq","normalize","BondType","cNucleicControlNames","cNucleicWing1Names","cNucleicWing2Names","cCylinderSource","cCylinderTarget","types","atoms","chain","sequence","icode","_component","_icode","_mask","_atoms","_secondary","_firstAtom","_leadAtom","_wingAtom","_lastAtom","_controlPoint","_midPoint","_wingVector","_cylinders","_isValid","_het","_molecule","getChain","getMolecule","getSequence","getSecondary","getICode","addAtom","xyz","tempFactor","getComplex","getAtomCount","forEachAtom","_findAtomByName","_findFirstAtomInList","names","collectMask","getCylinderTargetList","_name","_detectLeadWing","getAtomPosition","leadAtom","wingStart","wingEnd","cylSource","targetList","cylTarget","calcWing","prevLeadPos","currLeadPos","prevWingPos","prevWing","vectorA","vectorB","angleTo","negate","_innerFinalize","prevRes","prev","nextRes","chainAsNucleic","bFirstInChain","lp","THREE","lerp","_finalize2","asNucleic","isConnected","anotherResidue","_finalize","tempCount","occupCount","ResidueType","letterCode","_fullName","ALA","ARG","ASN","ASP","CYS","GLN","GLU","GLY","HIS","ILE","LEU","LYS","MET","PHE","PRO","PYL","SEC","SER","THR","TRP","TYR","VAL","DA","DC","DG","DI","DT","DU","WAT","H2O","HOH","DOD","UNK","UNL","PROTEIN","BASIC","ACIDIC","POLAR","NONPOLAR","NUCLEIC","PURINE","PYRIMIDINE","DNA","RNA","WATER","_addFlag","flag","StandardTypes","_addParam","ChainType","complex","_complex","_residues","minSequence","POSITIVE_INFINITY","maxSequence","NEGATIVE_INFINITY","getResidues","_determineType","residues","findResidue","seqNum","iCode","curr","updateToFrame","frameData","prevData","frameRes","currData","addResidue","getResidueType","addResidueType","Residue","getResidueCount","forEachResidue","StructuralElement","init","term","generic","genericByType","serialAtomMap","residueHash","splitUnifiedSerial","serialId","hashCode","getUnifiedSerial","Type","STRAND","BRIDGE","HELIX_310","HELIX_ALPHA","HELIX_PI","HELIX","TURN_310","TURN_ALPHA","TURN_PI","TURN","BEND","COIL","Generic","LOOP","StructuralElementType","StructuralElementGeneric","typeByPDBHelixClass","helixClass","comment","sheet","sense","atomCur","atomPrev","as","_width","_strands","getWidth","addStrand","addEmptyStrand","Strand","saveNode","_id","_position","_charge","_repeat","_center","xmlNodeRef","getPosition","getCentralPoint","_rebuildSGroupOnAtomChange","nLimon","bLow","bHight","aPos","addVectors","List","_values","splice","toJSON","includes","valuesArray","upperOnly","_validate","Selector","ListSelector","RangeListSelector","ValueListSelector","caseSensitive","NoneSelector","includesAtom","_atom","AllSelector","none","PrefixOperator","rhs","InfixOperator","lhs","keywords","defineSelector","SelectorClass","NULL_SELECTOR","defineOperator","OperatorClass","byResidueTypeFlag","selectors","_selector","_boundaries","boundingBox","boundingSphere","computeBoundaries","makeEmpty","expandByPoint","bbc","getCenter","setFromCenterAndSize","radiusSquared","pos","lengthSquared","distanceToSquared","sqrt","getTransforms","getSelector","getBoundaries","finalize","BiologicalUnit","chains","matrices","oldCenter","oldRad","applyMatrix4","newRad","addScalar","subScalar","addChain","addMatrix","matrix","_residueIndices","_cycles","_subDivs","_residueCount","resIdc","idIdc","idCount","last","setSubDivs","subDivs","resCnt","_bonds","forEachCycle","cycle","addCycle","cycles","markResidues","_forEachSubChain","subs","currRes","endRes","getMaskedSequences","_subIdx","getMaskedSubdivSequences","currIdx","lastSubIdx","subIdx","boundaries","maxPairsEstimate","numPairs","numMaxPairs","intBuffer","hashBuffer","cHashTableSize","destroy","addPair","indexA","indexB","ia","ib","codeToAdd","apI","_getBondingRadius","_maxRad","bBox","getDefaultBoundaries","_vBoxMin","_vBoxMax","_pairCollection","_addExistingPairs","getAtoms","numAtoms","aInd","collection","numBondsForAtom","bInd","_findPairs","vw","getVoxelWorld","atomsNum","rA","isHydrogenA","posA","locationA","atomA","processAtom","atomB","locationB","dist2","rB","maxAcceptable","forEachAtomWithinRadius","_addPairs","iA","iB","_addPair","bondsA","numBonds","newBond","addBond","build","_buildInner","_calcBoundingBox","AtomPairs","nAtoms","maxRad","cAromaticType","cAromaticAtoms","_coDirVectors","v1Tmp","v2Tmp","cp","v1","v2","_insertAscending","_anotherAtom","_markAromatic","Cycle","atomsList","nA","nextAtom","checkBond","_isAromatic","_isPossibleAromatic","rightIdx","leftIdx","_checkCycleSimple","_checkCycleComplex","bondsData","bondMarks","_bondsData","_bondMarks","_resetCycles","_currIdx","_haveSameCycle","bond1","bond2","arr1","arr2","n1","n2","i1","i2","_tryBond","prevBond","currRight","bondsOrder","currLeft","currVec","startAtomRef","_currStart","checkAromatic","_checkBond","anotherAtom","anotherVec","theta","_cosBetween","newDir","cross","dir","newRight","_startCycle","_findLoops","checkCycle","forEachComponent","component","newCycle","markCycles","detectCycles","_getSphereSliceRadiusRange","zMin","zMax","dzMin","dzMax","rzMin","rzMax","rMin","rMax","_getCircleSliceRadiusRange","yMin","yMax","dyMin","dyMax","ryMin","ryMax","VoxelWorld","box","vCellSizeHint","_box","getSize","divide","_last","_cellSize","_cellInnerR","_cellOuterR","numVoxels","_voxels","addAtoms","voxelIdx","_findVoxel","point","_zero","voxel","_voxel","_forEachAtomInVoxel","_forEachVoxelWithinRadius","xRange","_xRange","yRange","_yRange","zRange","_zRange","_forEachVoxelWithinRadiusSimple","rRangeXY","rRangeX","xVal","yVal","zVal","isInsideX","isInsideY","isInsideZ","divideScalar","clampScalar","vCenter","_vCenter","distTouch2","distInside2","d2","r2","isInside","forEachAtomWithinDistFromMasked","dist","_forEachAtomWithinDistFromGroup","atomProc","forEachAtomWithinDistFromSelected","voxels","processIfWithin","MINIMAL_DISTANCE","MIN_HBOND_ENERGY","COUPLING_CONSTANT","HBondInfo","_hbonds","_buildVW","_build","isBond","from","to","acc0","acc1","acceptor","energy","ri","preri","rj","prerj","_calcHBondEnergy","pairs","PairCollection","_residueGetCAlpha","_residueGetCO","_residueGetNH","predonor","donor","distanceHO","distanceHC","distanceNC","distanceNO","donorInfo","accInfo","BridgeType","freeze","NO_BRIDGE","PARALLEL","ANTI_PARALLEL","HelixFlag","START","MIDDLE","END","START_AND_END","StructureType","SecondaryStructureMap","_ss","_sheet","_betaPartners","_bend","_helixFlags","_chainLengths","_chains","_buildBetaSheets","_buildAlphaHelices","inResidues","chainLength","inPreferPiHelices","stride","kappa","_kappa","_isHelixStart","isTurn","_cosinusAngle","p1","p2","p3","p4","v12","v34","prevPrev","nextNext","curCA","ppCA","nnCA","ckap","skap","atan2","bridges","lenA","chainA","lenB","chainB","_testBridge","found","bridge","unshift","chainI","chainJ","ibi","iei","jbi","jei","ibj","iej","jbj","jej","_hasChainBreak","bulge","ladderset","Set","ladder","delete","sheetset","toMove","_areBridgesLinked","betai","betaj","parallel","ai","aj","has","helixClassMap","loopMap","Complex","_components","_helices","_sheets","structures","_residueTypes","_sgroups","_molecules","_maskNeedsUpdate","metadata","symmetry","units","_currentUnit","addSheet","addHelix","getBonds","forEachChain","resName","getSGroupCount","getSGroups","getAtomByFullname","resId","localeCompare","Chain","getChainCount","getMolecules","getMoleculeCount","forEachMolecule","molecules","forEachSGroup","groups","components","forEachVisibleComponent","getBondCount","maxSerial","uniSerial","chainShift","remnant","_fillCmpEdit","addComp","comp","Component","resCount","currStart","_fillCmpNoedit","currSubDivs","_fillComponents","enableEditing","getCurrentUnit","resetCurrentUnit","setCurrentUnit","newUnit","_computeBounds","onAtomPositionChanged","_finalizeBonds","updateStructuresMask","helices","sheets","needAutoBonding","autoConnector","AutoBond","marker","AromaticLoopsMarker","detectAromaticLoops","_finalizeMolecules","molecule","updater","structure","countAtomsByMask","getNumAtomsBySelector","resetAtomMask","markAtoms","setMask","clearMask","totalSelector","markAtomsAdditionally","clearAtomBits","reseter","getAtomNames","_atomNames","dict","getElements","_elements","getResidueNames","_residueNames","getChainNames","_chainNames","getAltLocNames","_altlocNames","_voxelWorld","addElement","srcArray","dstArray","functor","elem","joinComplexes","complexes","atomBias","bondBias","residueBias","chainBias","componentBias","bias","processBond","processResidue","processChain","processComponent","doNothing","rt","ssMap","getSheet","item","Sheet","lastCode","lastSheetIndex","lastHelixIndex","curStructure","curCode","curResidue","curSheetIndex","Helix","loopType","curSheet","filter","pow2ceil","Volume","dimensions","vecSize","volumeInfo","_dimVec","_volumeInfo","_dimX","_dimY","_dimZ","_rowElements","_planeElements","_totalElements","_data","getValue","setValue","addValue","getDimensions","getBox","getVolumeInfo","getCellSize","boxSize","computeGradient","vl","vs","xSize","ySize","zSize","volMap","_voxelValue","zi","zm","zp","yi","ym","yp","xi","xm","xp","getTiledTextureStride","buildTiledTexture","tilesX","tilesY","tileRow","texture","needsUpdate","getData","getDirectIdx","getStrideX","getStrideY","getStrideZ","SGroup","Assembly","Molecule","CSS2DObject","_element","getElement","setTransparency","transp","op","op100","opacity","RCGroup","raycast","raycaster","intersects","visible","children","enableSubset","innerOnly","disableSubset","isEmpty","getSubset","totalSubset","LAYERS","VOLUME","TRANSPARENT","PREPASS_TRANSPARENT","VOLUME_BFPLANE","COLOR_FROM_POSITION","SHADOWMAP","SELECTION_LAYERS","resetTransform","quaternion","updateMatrixWorldRecursive","updateMatrixWorld","addSavingWorldTransform","_worldMatrixInverse","matrixWorld","invert","multiply","decompose","renderDummyQuad","_material","depthWrite","_scene","_quad","_camera","render","renderScreenQuad","isIdentity","identity","equals","applyToPointsArray","elements","persp","ScreenQuadMaterial","uniforms","srcTex","vertexShader","vertexScreenQuadShader","depthTest","clearTree","geometry","dispose","removeChildren","renderScreenQuadFromTex","fragmentShader","renderScreenQuadFromTexWithDistortion","coef","setMinimalFov","angle","aspect","fov","radToDeg","atan","tan","degToRad","updateHalfSized","camera","originalAspect","originalFov","updateProjectionMatrix","setDistanceToFit","intersectVisibleObject","gfxObj","fogFarPlane","intersectObject","nearPlane","near","matrixWorldInverse","farPlane","far","extractScale","_v","te","determinant","copyAtList","attribute","indexList","_oldInstancedBufferGeometryCopy","source","instanceCount","calcCylinderMatrix","posBegin","posEnd","posCenter","matScale","makeScale","matRotHalf","makeRotationX","matRotLook","vUp","lookAt","setPosition","calcChunkMatrix","eye","up","rad","groupHasGeometryToRender","group","hasGeoms","buildDistorionMesh","widthSegments","heightSegements","calcInverseBarrel","prevR2","curR2","dr","geo","getAttribute","setXY","fillArray","startIndex","endIndex","destroyObject","belongToSelectLayers","layers","processObjRenderOrder","idMaterial","renderOrder","isGroup","applySelectionMaterial","setValues","depthFunc","overrideColor","lights","shadowmap","setUberOptions","fixedColor","zOffset","getMiddlePoint","point1","point2","optionalTarget","addScaledVector","_defaultBoundaries","Visual","gfxutils","dataSource","_dataSource","release","getDataSource","_ensureArray","EntityList","entities","_list","_dict","_indices","entity","register","registerInList","unregisterFromList","registerInDict","unregisterFromDict","unregister","all","defineProperties","CollisionSphere","_radius","sphere","_sphere","ray","intersectSphere","distance","origin","setSphere","inters","chunkIdx","computeBoundingBox","computeBoundingSphere","tmpColor","InstancedSpheresGeometry","SphereCollisionGeo","spheresCount","sphereComplexity","useZSprites","_sphGeometry","_init","setItem","itemIdx","itemPos","itemRad","_offsets","setColor","colorVal","_colors","startUpdate","finishUpdate","setOpacity","chunkIndices","alphaArr","_alpha","geom","sphereGeo","alpha","ChunkedObjectsGeometry","chunkGeo","chunksCount","_chunkGeo","colors","chunkSize","_chunkSize","mesh","facesPerChunk","faceIndex","srcPos","_positions","srcNorm","_normals","srcColor","dstPos","dstNorm","dstColor","dstPtOffset","ptIdxBegin","ptIdxEnd","attributes","chunkIndex","chunkIndexSize","pointsCount","use32bitIndex","indexSize","Uint32Array","Uint16Array","posOffset","setIndex","SimpleSpheresGeometry","sphGeometry","normals","geoNormals","normal","_chunkPos","_tmpPositions","tmpPos","geoPos","centerPos","tmpVector","normMtx","_chunkNorms","_tmpVector","botPos","topPos","firstOffset","secondOffset","tmpArray","geoNorm","lerpVectors","mtx1","getNormalMatrix","fromArray","toArray","applyMatrix3","colorVal1","colorVal2","CylinderBufferGeometry","radiusTop","radiusBottom","radialSegments","heightSegments","openEnded","thetaLength","parameters","hasTop","hasBottom","vertexCount","facesCount","heightHalf","positions","uvs","currVtxIdx","currFaceIdx","tanTheta","v3","v4","setXYZ","vx","vy","vz","startTIdx","lastIdx","fTIdx","currSrcIdx","getX","getY","getZ","nextTVtx","startBIdx","lastBIdx","fBIdx","currSrcBIdx","nextBVtx","invMatrix","setArrayXYZ","setArrayXYZW","sortNumber","Instanced2CCylindersGeometry","_useZSprites","_cylGeometry","_collisionGeo","Simple2CCylindersGeometry","me","mtxOffset","_matVector1","_matVector2","_matVector3","_invmatVector1","_invmatVector2","_invmatVector3","colorIdx","_color1","_color2","chunksIdx","cylinderInfo","newPar","_prepareCylinderInfo","cylinderIndices","color1","color2","_assignOpacity","getGeoParams","cylinderGeo","tmpPrev","tmpNext","tmpRes","simpleNormal","normalOnCut","nearRingPt","shape","ringsCount","ptsCount","totalPts","_createExtrudedChunkGeometry","_ringsCount","tmpShape","_tmpShape","hasSlope","hasCut","chunkStartIdx","_setPoints","_setSlopeNormals","_setBaseNormals","_addCut","vtxIdx","mtx","nPtsInRing","_countNormalsInRing","isSlope","shiftToExtraPt","subVectors","startSegmentIdx","segmentsCount","elemSize","ThickLinesGeometry","_initVertices","segmentIdx","setSegment","pos1","pos2","directions","_directions","dirIdx","startSegIdx","endSegIdx","getSubsetSegments","getSubsetColors","getSubsetOpacities","getNumVertexPerSegment","getPositionSize","setSegments","startPos","startDir","setColors","_buffersSize","indexOffset","pointOffset","BaseLinesGeometry","posSize","itemOffset","ChunkedLinesGeometry","LinesGeometry","enableCollision","CylinderCollisionGeo","collisionGeo","segCount","segIdx","TwoColorLinesGeometry","segmentIndices","_segCounts","vectors","vecCount","tempPos1","tempPos2","CrossGeometry","IsoSurfaceGeometry","_opts","_posRad","posRad","IsoSurfaceMarchCube","pointsValuesLinear","hasIntersection","bitsInside","numCellsPerSide","n3","striIndicesMarchCube","edgeTable","_voxelGradientFast","grad","GridCell","_arrSize","cubeIndex","Triangle","createArray","arrSize","IsoSurface","_numTriangles","_numVertices","_volumetricData","_xAxis","_yAxis","_zAxis","_xDir","_yDir","_zDir","_prepareAxesAndDirs","cellSize","xAxis","yAxis","zAxis","xDir","yDir","zDir","tmp","notZero","axe","EPSILON","_vertexInterp","isoLevel","grid","ind1","ind2","vertex","valP1","isoDiffP1","diffValP2P1","mu","_polygonize","triangles","firstIndices","_firstIndices","secondIndices","_secondIndices","vertexList","_vertexList","normalList","_normalList","triCount","triTblIdx","triTable","_triTable","_doGridPosNorms","step","appendSimple","vol","volData","dim","stepX","stepY","stepZ","gc","gcVal","gcValSize","additions","appendVertex","axis","triVertex","_origin","posMtx","globTriCount","_gradient","compute","_remapIndices","vertexMap","idcCount","newIndices","_remapVertices","vertices","newPositions","newNormals","norm","vertexFusion","faceVer","oldVerCount","vMap","newVer","matchedIndex","setColorVolTex","colorMap","atomMap","atomWeightMap","visibilitySelector","numVerts","xs","ys","zs","colorData","strideX","strideY","strideZ","atomWeightData","atomStrideX","atomStrideY","atomStrideZ","xInv","yInv","zInv","atomLookup","atomWeights","interp","idx1","idx2","collectWeight","coefX","coefY","coefZ","newVerCount","ind","mux","muy","muz","maxWeight","dominantIdx","atomIdx","c0","c1","c2","c3","cz0","cz1","numTriangles","newTriCount","i0","toMesh","_visibilitySelector","_calcSurface","_findMinMax","posRadArray","itemsCount","maxPosRad","minPosRad","tmpVal","_findNumVoxels","minMaxValues","minCoordRad","maxCoordRad","gridPadding","radScale","padRad","bbox","_makeSurface","surface","isoSurf","volTexMap","packedArrays","_computeSurface","chem","VolumeSurfaceGeometry","_shiftByOrigin","gaussdensity","atomicNum","invIsoValue","invGridSpacing","maxVoxelX","maxVoxelY","maxVoxelZ","volTexData","texStrideX","scaledRad","atomicNumFactor","radInv","radLim","radLim2","xMin","xMax","dy2dz2","addr","texAddr","expVal","density","exp","colInd","originX","originY","originZ","AVHash","maxDistance","minX","minY","minZ","maxX","maxY","maxZ","hashFunc","minW","iDim","jDim","kDim","nCells","jkDim","preHash","cid","iIdx","cellOffsets","cellLengths","maxCellLength","subArray","cellLength","neighbourListLength","withinRadii","rExtra","out","outIdx","nearI","nearJ","nearK","loI","loJ","loK","hiI","hiJ","hiK","iOffset","jOffset","cellStart","cellEnd","dataIndex","baseIndex","rSum","_indexList","maxRadius","volTex","weights","gridx","gridy","gridz","sinTable","cosTable","neighbours","lastClip","weightsMap","mid","ngTorus","fillGridDim","innI","initializeGrid","gridSize","TypeName","uniformArray","rExt","initializeAngleTables","singleAtomObscures","innX","innY","innZ","innCI","ra2","obscured","ni","projectTorus","aIdx","bIdx","xa","ya","za","r1","innR2","dmp","rInt","ng","cost","sint","px","py","pz","iax","iay","iaz","minx","miny","minz","maxx","maxy","maxz","iz","iy","dzy2","zyOffset","ix","current","getVolume","ax","ay","az","ar2","colIdx","cr","cg","cb","cIdx","ap","spx","spy","spz","dd","projectPoints","innIdx","projectTorii","innInnI","fixNegatives","contactSurface","ContactSurface","radiusAt","coord","colorX","colorY","colorZ","atomType","srcAtom","vBoxMin","vBoxMax","_numAtoms","_probeRadius","_atomsList","_voxelList","createVoxels","numAtomsRefs","aveRad","numCells","_numCells","_aveRad","side","side2","side3","xScale","_xScale","yScale","_yScale","zScale","_zScale","maxAtomsRefs","xNumVoxMult","yNumVoxMult","zNumVoxMult","diaAffect","numVoxX","numVoxY","numVoxZ","xIndMin","yIndMin","zIndMin","xIndMax","yIndMax","zIndMax","indVoxel","indexNext","destroyVoxels","_vertices","forEachRelatedAtom","xInd","yInd","zInd","ref","getClosestAtom","closest","minDist2","MAX_VALUE","buildNormals","numVertices","numCloseAtoms","vNormalX","vNormalY","vNormalZ","koef","maxRadAffect","maxRadAffect2","expScale","gatherNormals","maxClosedAtoms","buildColors","radiusColorSmoothness","colorsClose","weightsSum","gatherColors","weightNormalized","maxNumVertices","maxNumTriangles","needVertexColors","_maxNumVertices","_maxNumTriangles","HASH_SIZE","_innerBuild","geoOut","getGeo","_fromGeo","numTri3","convertToAtomsColored","atomsColored","IsoSurfaceAtomColored","nm","hashLines","hashEntries","getBoundingBox","bigNum","probeRadius2","atomRadiusScale","radMax","num","getCornerCoord","numPoints","vOut","invNP","tx","ty","tz","buildEdgePoint","sign","cube","indexPointValue","cTwentyFour","xb","yb","zb","isTriangleVisible","v0","a0","voxelWorld","a1","a2","addTriangle","indInGeo0","addVertexToGeo","indInGeo1","indInGeo2","itr","buildGeoFromCorners","meshRes","vCellStep","vaEdges","vCorner","indCell","indY","indZ","indPointValues","indValues","offs","numTri","indTri","getNumIntersectedCells","numIntersectedCells","cubeValuesIndex","indCorner","letter","atomT","calculateGridCorners","probeRad","vDif","fx","fy","fz","indXMin","indYMin","indZMin","indXMax","indYMax","indZMax","createVertexHash","numHashEtriesAllocated","numHashEntryIndex","getNewHashEntry","vAdd","oneHynberes","hashResolution","marCubeResoultion","iHash","hLineIndex","iVertAdd","entryFirst","modifyExcludedFromGeo","probeSphereRadius","distToSphere","distToBorder","probeSpRad2","sideInv","radEst","xCorner","yCorner","zCorner","ok","expandFactor","meshResolution","colorMode","useVertexColors","excludeProbe","rProbeRadius","numIntersectedCellsEstim","IsoSurfaceGeo","probeRadForNormalsColors","IsosurfaceBuildNormals","ExtrudedObjectsGeometry","QuickSurfGeometry","ContactSurfaceGeometry","SSIsosurfaceGeometry","LabelsGeometry","items","xTranslation","yTranslation","deltaPos","userData","fieldTxt","spanText","fontSize","strings","spanNodeP","spanNodeText","createLabel","textAlign","fColor","bColor","precision","renderer","capabilities","getMaxPrecision","_noiseData","_noiseWrapS","_noiseWrapT","_noiseMinFilter","_noiseMagFilter","_noiseMapping","noiseTexture","noiseWidth","noiseHeight","_samplesKernel","defaultUniforms","merge","diffuse","specular","shininess","zClipValue","clipPlaneValue","nearPlaneValue","invModelViewMatrix","world2colorMatrix","dashedLineSize","dashedLinePeriod","projMatrixInv","viewport","samplesKernel","noiseTex","noiseTexelSize","srcTexelSize","uberOptionNames","uberOptions","zClipCoef","noise","toonShading","UberMaterial","instancedPos","instancedMatrix","attrColor","attrColor2","attrAlphaColor","sphereSprite","cylinderSprite","fakeOpacity","prepassTransparancy","colorFromPos","shadowmapType","colorFromDepth","orthoCam","dashedLine","thickLine","fogTransparent","normalsToGBuffer","precisionString","defines","extensions","createInstance","inst","USE_FOG","INSTANCED_POS","INSTANCED_MATRIX","ATTR_COLOR","ATTR_COLOR2","ATTR_ALPHA_COLOR","OVERRIDE_COLOR","SPHERE_SPRITE","fragDepth","CYLINDER_SPRITE","ZCLIP","CLIP_PLANE","FAKE_OPACITY","USE_LIGHTS","COLOR_FROM_POS","SHADOWMAP_PCF_SHARP","SHADOWMAP_PCF_RAND","SHADOWMAP_BASIC","COLOR_FROM_DEPTH","ORTHOGRAPHIC_CAMERA","PREPASS_TRANSP","DASHED_LINE","THICK_LINE","FOG_TRANSPARENT","drawBuffers","NORMALS_TO_G_BUFFER","TOON_SHADING","shallow","updateUniforms","SuperClass","NewObjectType","onBeforeRender","scene","_onBeforeRender","_update","Mesh","UberObject","castShadow","receiveShadow","_geometry","_group","modelViewMatrix","multiplyMatrices","uniformsNeedUpdate","ZClippedMesh","modelView","_modelView","mvLength","_mvLength","setFromMatrixColumn","localToWorld","TextMesh","initialized","srcItem","label","visibility","_viewport","projectionMatrix","ZClipped","ZSprite","ZSpriteMesh","Text","Line","LineSegments","SimpleMesh","ThickLineMesh","Instanced","InstancedMesh","setMatParams","_createInstancedCylinders","Geometry","geometries","meshes","initMaterial","_createLineSegmentsGeoTriplet","renderParams","thickLines","_createIsoSurfaceGeoTriplet","geoClass","caps","surfaceOpts","createSpheres","create2CClosedCylinders","_caps","_settings","create2CCylinders","create2CLines","createCrosses","createExtrudedChains","createChunkedLines","createQuickSurface","createContactSurface","createSASSES","createLabels","TransformGroup","geoParams","transforms","_geoParams","mat","_transforms","_createMeshes","_ray","inverseMatrix","_inverseMatrix","childIntersects","ciCount","geos","meshCnt","ChemGroup","selection","_selection","_mode","_colorer","_chunksIdc","chunks","_polyComplexity","_geo","Name","_makeGeoArgs","_mesh","chunksList","_calcChunksList","_changeSubsetOpacity","atomsIdc","AtomsGroup","calcAtomRadius","getAtomColor","updateColor","needsColorUpdate","AtomsSphereGroup","selectedAtoms","getSurfaceOpts","getAtomText","getNode","colorMappings","adjust","inverse","propagateColor","rule","startsWith","templateMappings","hetatm","water","parseTemplate","getLabelOpts","fgColor","bgColor","_slerp","omega","oSin","radOffset","addChunk","chunksToIdx","prevVector","currVector","segmentsHeight","_segmentsHeight","leprStep","currAtomIdx","cCount","cycAtoms","chunkPoints","tmpDir","cycleRad","prevPos","currPos","upDir","currAngle","_createShape","pts","AromaticGroup","torusRad","getAromRadius","radiusV","calcStickRadius","lookAtVector","mtc","points","currPoint","getAromaticOffset","prevPt","getAromaticArcChunks","chunksIdc","resIdx","ResiduesGroup","stickRad","getResidueColor","_processItem","NucleicItemGroup","cyl1","cyl2","calcMatrix","_buildStructureInterpolator","argTrans","transformT","tt","newt","ans","_addPoints","centerPoints","topPoints","tp","_calcPoints","firstIdx","_prevIdx","_nextIdx","arrIdx","_extrapolate2","otherIdx","prevIdx","nextIdx","nucleic","nameFrom","nameTo","posFrom","posTo","shift","wing","cpPrev","tpPrev","cpNext","tpNext","_addPointsForLoneResidue","startIdx","endIdx","pointsArrays","_topInterp","_centerInterp","_shift","_valueStep","_segmentsCount","prepareMatrices","firstRad","secondRad","mtcCount","outMtc","currRad","topInterp","cenInterp","currentValue","mtxIdx","lerpVal","currTop","currCenter","nextCenter","_loopThrough","subDiv","subDivI","subDivN","idc","matrixHelper","CartoonHelper","prevLast","prevSecondRad","getResidueRadius","cmpMultiplier","getHeightSegmentsRatio","getTension","chunkIdc","subdivs","chunk","drawMultiple","drawMultiorderBonds","showAromatic","showAromaticLoops","bondsIdc","bondsCount","getBondOrder","getCylinderCount","bondIdx","BondsGroup","emptyOffset","calcSpaceFraction","normDir","leftPos","rightPos","currBondIdx","atom1","atom2","a1Pos","a2Pos","currStickRad","STEP_SIZE","AtomsSurfaceGroup","AtomsSASSESGroupStub","AtomsTextGroup","AromaticTorusGroup","AromaticLinesGroup","NucleicCylindersGroup","NucleicSpheresGroup","ResiduesSubseqGroup","ResiduesTraceGroup","BondsCylinderGroup","BondsLinesGroup","bondDir","a1Hangs","a2Hangs","_checkAtom","atomsGroup","meshIdx","chSubset","subsetEl","AtomsProcessor","ResidueGroup","_checkResidue","residuesGroup","checkResidue","ResidueProcessor","jEnd","bondsGroup","cycleIdx","perCycle","Atoms","OrphanAtoms","OrphanAtomsProcessor","Residues","ResiduesProcessor","Nucleic","NucleicProcessor","Subseqs","SubseqsProcessor","Bonds","BondsProcessor","Aromatic","AromaticProcessor","_bakeGroup","triplet","Processor","Group","AtomsSpheres","MeshCreator","processors","OrphanedAtomsCrosses","BondsCylinders","BondsLines","CartoonChains","TraceChains","NucleicSpheres","NucleicCylinders","ALoopsTorus","ALoopsLines","QuickSurfGeo","ContactSurfaceGeo","SASSESSurfaceGeo","TextLabelsGeo","Mode","identify","buildGeometry","depGroups","currGroup","newGroup","makeContextDependent","getRenderParams","LinesMode","shortName","LicoriceMode","BallsAndSticksMode","VanDerWaalsMode","TraceMode","TubeMode","_residue","TUBE_RADIUS","CartoonMode","secCache","getResidueStartRadius","secOpts","getResidueEndRadius","ARROW_END","startRad","endRad","_res","tubeRad","secHeight","secData","SurfaceMode","surfaces","surfaceNames","getVisibilitySelector","isSurface","QuickSurfaceMode","useBeads","IsoSurfaceMode","_excludeProbe","_radScale","IsoSurfaceSASMode","IsoSurfaceSESMode","ContactSurfaceMode","TextMode","getTemplateOptions","adjustColor","Palette","getElementColor","asIs","elementColors","defaultElementColor","residueColors","defaultResidueColor","getChainColor","chainColors","getSecondaryColor","secondaryColors","defaultSecondaryColor","getSequentialColor","getGradientColor","gradientName","gradients","defaultNamedColor","beta","lerpColor","getNamedColor","namedColors","minRangeColor","midRangeColor","maxRangeColor","defaultGradientColor","namedColorsArray","rainbow","temp","hot","cold","reds","blues","CL","FE","NI","CU","BR","HE","LI","BE","NE","NA","MG","AL","SI","AR","SC","TI","CR","MN","ZN","GA","GE","AS","KR","RB","SR","ZR","NB","TC","RU","RH","PD","AG","CD","IN","SN","SB","TE","XE","BA","LA","CE","PR","ND","PM","SM","EU","GD","TB","DY","HO","ER","YB","LU","HF","TA","RE","OS","IR","PT","AU","HG","TL","PB","BI","PO","AT","RN","FR","RA","AC","TH","PA","NP","PU","AM","CM","BK","CF","ES","FM","MD","NO","LR","RF","DB","BH","HS","MT","dna","rna","cpkPalette","jmolPalette","Colorer","palettes","ElementColorer","ResidueTypeColorer","SequenceColorer","ChainColorer","SecondaryStructureColorer","secondary","UniformColorer","ConditionalColorer","parsed","_subsetCached","ConformationColorer","TemperatureColorer","OccupancyColorer","_getColorByOccupancy","HydrophobicityColorer","hydrophobicity","MoleculeColorer","CarbonColorer","colorCarbon","colorNotCarbon","neutralColor","intensity","materialList","createDerivativeMesh","layer","newMesh","traverseMeshes","meshTypes","func","_gatherObjects","forEachMeshInGroup","processObj","applyTransformsToMeshes","processTransparentMaterial","matValues","prepassTranspMesh","processColFromPosMaterial","colFromPosMesh","createShadowmapMaterial","shadowmapMesh","isShadowmapMesh","removeShadowmapMaterial","countTriangles","totalCount","attribs","property","currAttr","faces","_countMeshTriangles","startMaterialValues","selectorString","materialPreset","needsRebuild","setMode","unmarkAtoms","setMaterialPreset","selectionGeo","meshutils","buildSelectionGeometry","sg","matrixAutoUpdate","compare","repSettings","selStr","valueOf","modeDiff","colorerDiff","change","newSelectorObject","newSelector","newMode","newColorer","newMaterial","_traverseComponentGroups","ComplexEditor","ComponentEditor","complexVisual","_complexVisual","_inProgress","_componentTransforms","_bakeComponentTransform","_resetComponentTransform","finalizeEdit","discard","getAltObj","pivot","visual","getSelectedComponent","getSelectionGeo","selectionMask","getSelectionBit","reprNode","bbmin","bbmax","updateMatrix","FragmentEditor","_getSelectionBorderAtoms","_fragmentBoundAtoms","pivotPos","_fragmentGeo","_fragmentSelectionGeo","vg","smeshes","sm","selectionBit","makeTranslation","_bakeAtomTransform","isFreeRotationAllowed","boundAtoms","transformDirection","atomHash","lookupAndCreate","entityList","specs","ComplexVisual","_reprList","_repr","_reprListChanged","_selectionBit","_reprUsedBits","_selectionCount","_selectionGeometry","getSelectionCount","getEditor","_editor","Representation","repCount","desc","status","repGet","_getFreeReprIdx","bits","NUM_REPRESENTATION_BITS","newSelectionBit","originalSelection","buildSelectorFromMask","def","hide","rebuildSelectionGeometry","resetSelectionMask","updateSelectionMask","pickedObj","otherObj","expandSelection","tmpMask","shrinkSelection","deselectionMask","multiple","getSelectionCenter","selRule","reprList","Promise","resolve","errorOccured","setTimeout","hasGeometry","repr","DEBUG","setNeedsRebuild","_buildSelectorFromSortedLists","optimizeList","NaN","expression","and","residx","forSelectedResidues","beginComponentEdit","editor","ComplexVisualEdit","beginFragmentEdit","setMaterialValues","needTraverse","volumeUniforms","volumeDim","tileTex","tileTexSize","tileStride","boxAngles","_isoLevel0","_flipV","_BFLeft","_BFRight","_FFLeft","_FFRight","_WFFLeft","_WFFRight","overrideUniforms","defUniforms","facesPosMaterialParams","sideType","BackFacePosMaterial","ShaderParams","BackFacePosMaterialFarPlane","matUniforms","aspectRatio","farZ","tanHalfFOV","matWorld2Volume","FrontFacePosMaterial","VolumeMaterial","shaderParams","updateDefines","ISO_MODE","STEPS_COUNT","VolumeMesh","cullFlag","edgeIntersections","_updateVertices","_corners","edges","_edges","_edgeIntersections","constant","vert","cornerMark","edgeMark","curEdge","curEdgeInter","CheckX","CheckY","CheckZ","curEdgeIdx","curEdgeSource","face","nextVertex","coplanarPoint","_collectVertices","_sortIndices","_updateIndices","faceIdx","vRight","vDir","rightProj","numIndices","setDataSource","vm","image","volInfo","obtuseAngle","_updateIsoLevel","mean","dmean","dmin","span","dmax","sd","nearClipPlaneOffset","_nearClipPlaneOffset","_pos","_norm","norm4D","_norm4D","matrixWorldToLocal","_matrixWorldToLocal","_clipPlane","getWorldDirection","getWorldPosition","setFromNormalAndCoplanarPoint","VolumeBounds","XY","XZ","YZ","bSize","offsetVert","_getBaseVertices","flatVertices","output","_flattenArray","_lines","projTable","_projectionTable","proj","inv","currDelta","getMesh","volume","planeGeo","_initPlaneGeo","_plane","frustumCulled","doubleSided","matWorldToVolume","_renderer","planeCamPos","normalMatrix","volumeMatrix","DEG2RAD","_frame","showFrame","_farPlane","VolumeFarPlane","getBoundingSphere","needShow","find","SomeLoader","canProbablyLoad","Loader","_source","_options","_abort","_agent","abort","extractName","FileLoader","_binary","blob","reader","FileReader","readAsArrayBuffer","readAsText","File","urlStartRegexp","XHRLoader","request","ImmediateLoader","LoaderList","format","formats","SomeParser","canProbablyParse","parseSync","getModel","model","_parseHeader","Remark290","_matrix","_matrixIndex","stream","readString","matrixRow","readCharCode","matrixData","matrixIndex","parseFloat","Remark350","assemblies","_assembly","assembly","_start","_nextCR","_nextLF","_next","_end","readLine","readChar","readInt","readFloat","pdbStartRegexp","remarkParsers","PDBParser","_serialAtomMap","_modelId","_compaundFound","_biomoleculeFound","_allowedChainsIDs","_lastMolId","_remarks","_remark","_compndCurrToken","fileType","_fixBondsArray","_fixChains","remark290","remark350","chainDict","chainObj","idChainMap","nj","_parseATOM","chainID","resSeq","veryLong","nameToElement","Role","_parseENDMDL","_parseCONECT","serial0","serial1","serial2","serial3","serial4","_parseCOMPND","tokenIdx","chainStr","lastChar","_parseREMARK","remarkNum","remark","RemarkParser","_parseHELIX","_parseSTRUCTURE","_parseSHEET","pars","adder","serialNumber","structureName","helLength","shWidth","shCur","shPrev","startChainID","endChainID","startSequenceNumber","iCodeStr","startICode","endSequenceNumber","endICode","cs","_parseHEADER","classification","date","_parseTITLE","title","HEADER","HETATM","ENDMDL","CONECT","COMPND","REMARK","PDBStream","tagParsers","cOrderCharCodes","cmlStartRegexp","CMLParser","_readOnlyOneMolecule","_rebuidBondIndexes","countBonds","idxs","atomRefs2","_createSGroup","moleculeArr","fieldData","atomRefs","placement","fieldName","_extractSGroup","_extractSGroups","sgroupRef","mapEntry","cycleFuncInner","cycleFunc","x2","x3","y2","y3","z3","atomsRef","_traverseData","dom","childNodes","parseNode","xmlNode","nodeName","nodeValue","jsonNode","existing","_findSuitableMolecule","molSet","atomArray","_selectComponents","doc","DOMParser","parseFromString","traversedData","rawData","cml","retData","filteredData","rd","ret","localBond","bondArray","orderAttr","tc","labels","_breadWidthSearch","retStruct","atomLabels","labelsCount","originalCML","prepareComponentCompound","_packLabel","compId","molId","_unpackLabel","molID","breadthQueue","componentID","labeledAtoms","startID","_parseBond","eAtom","mainAtom","_parseSet","varData","currentLabel","reorder","atomCharge","lLabel","atomFullNameStruct","elementType","countRef","currAtomComp","strLabel","stringify","atomSerial","added","mrvValence","complexAtom","sGrp","totalAtomsParsed","joinedComplex","ArrayComparator","original","_original","_sum","candidate","sorted","secStructToType","MMTFParser","_onModel","_modelData","_onChain","chainData","_onGroup","groupData","_updateSecStructure","_onAtom","atomData","_onBond","bondData","helixClasses","_ssType","_ssStruct","_ssStart","struct","_updateMolecules","mmtfData","chainsInModel0","chainIndexList","description","_traverse","structureId","releaseDate","eventCallbacks","modelData","MMTF","_linkAtomsToResidues","_findSynonymousChains","named","_parseAssemblyInfo","bioAssemblyList","baInfo","transformList","chainListCheck","chainNames","allChains","_chainsByName","transpose","_markHeteroAtoms","_joinSynonymousChains","primaryChainsArray","primaryChainsHash","primary","ParsingError","column","captureStackTrace","parseLine","parseColumn","_isWhitespace","_inlineIndexOf","ch0","cRequiredAtomFields","cSecondaryCoding","helx","turn","strn","getTypeFromId","typeId","arrize","arrayLikeObject","AtomDataError","_extractOperations","assemblyGen","opsDict","groupStr","gps","grIdx","grCount","gr","gp","es","cnt","ii","nn","newMtx","CIFParser","asymDict","newline","block","keysCount","valuesCount","_parseValue","keyIndex","readCIF","_toComplex","cifData","complexData","_extractAtoms","_extractSecondary","_extractAssemblies","_extractMolecules","_extractMetadata","struct_keywords","pdbx_keywords","databaserev","database_PDB_rev","date_original","pdbx_description","atom_site","auth_seq_id","Cartn_x","Cartn_y","Cartn_z","label_atom_id","group_PDB","chainIdc","auth_asym_id","chainLabelIdc","label_asym_id","serials","iCodes","pdbx_PDB_ins_code","resNames","label_comp_id","type_symbol","tempFactors","B_iso_or_equiv","occupancies","charges","pdbx_formal_charge","altLocs","label_alt_id","models","pdbx_PDB_model_num","label_entity_id","moleculeIdx","struct_conf","_extractConfs","struct_sheet_range","_extractSheets","sheetData","sheet_id","beg_label_seq_id","end_label_seq_id","beg_label_asym_id","sheetNames","strandNames","starts","beg_auth_seq_id","ends","end_auth_seq_id","stICodes","pdbx_beg_PDB_ins_code","endICodes","pdbx_end_PDB_ins_code","helicesData","conf_type_id","comments","details","lengths","pdbx_PDB_helix_length","pdbx_PDB_helix_class","asmGen","pdbx_struct_assembly_gen","asmIdx","assembly_id","asmOper","oper_expression","asmList","asym_id_list","operList","vector","ops","_getOperations","pdbx_struct_oper_list","asm","assemblyOps","valueType","_xyz2crs","_header","_boxSize","_boxStart","extent","nstart","crs2xyz","cellDims","angles","_typedCheck","_buff","TypeError","_fillHeader","headerFormat","arrays","_parseArray","_parseVector","_buffer","_setAxisIndices","_setOrigins","_getAxis","header","gamma","z1","z2","_getXYZdim","_getVolumeInfo","_setBoxParams","xaxis","yaxis","zaxis","shiftX","shiftY","_getXYZbox","_toXYZData","CCP4Header","ispg","nsymbt","lksflg","customData","machine","nlabel","Ccp4Model","VolumeModel","u32","i32","f32","xyz2crs","xyzData","crsIdx","CCP4Parser","_atomsInf","_fileName","_parseToAtomsInf","endnAtoms","endComment","startAtomsInf","_parseAtomsInf","words","PubChemParser","jsonData","PC_Compounds","aids","aid","coords","conformers","aids1","aid1","aids2","aid2","orders","SDFStream","_strings","_currentStart","_currentStringIndx","setStart","getNextString","getCurrentString","getStringFromStart","numb","findNextDataItem","curStr","findNextCompoundStart","probablyHaveDataToParse","chargeMap","orderMap","typeMap","sdfAndMolRegexp","sdfRegExp","fileFormat","tagsNames","tags","SDFParser","_format","_metadata","_currentMolProps","_compoundIndx","_assemblies","_atomsParsed","_atomsIndexes","_parseAtoms","codes","trunc","reverse","buildChainID","_parseBonds","bondsNum","bondType","_parseMOL","countsLine","_parseDataItem","_parseCompound","props","_tryToUpdateMoleculeData","_buildAssemblies","_buildMolecules","_searchTag","_tryToFind","tagsList","tagPossibleNames","_finalizeMetadata","defineFormat","DSN6Header","div","DSN6Model","i16","_pointCalculate","byteBuffer","counter","_blockCalculate","zBlock","yBlock","xBlock","inRange","blocks","_calculateInfoParams","dispersion","minDensity","maxDensity","DSN6Parser","canParse","checkDataTypeOptions","getNext","GROParser","_time","_residueNumber","_residueName","_atomName","_atomNumber","_atomPosition","_atomVelocity","filetype","_parseTitle","_parseNumberOfAtoms","_parseAtom","positionX","positionY","positionZ","GROReader","un","am","nc","du","resNumberRegex","spacesRegex","splitToFields","MOL2Parser","_currPosIdx","_currStartIdx","_parseRawStrings","_toStringFromStart","MOL2Data","newPosIdx","_toHeaderString","_toStringFromHeader","_setStart","_probablyHaveDataToParse","_findNextCompoundStart","_parseMolecule","parsedStr","_setResidue","originAtomId","targetAtomId","_fixSerialAtoms","currMolecule","molResidues","ParserList","XYZParser","Exporter","exportSync","export","PDBResult","_resultArray","_currentStr","_tag","_fixedNumeration","_numeration","_tagStrNum","getResult","writeString","_currentStrLength","newTag","numeration","newString","writeEntireString","maxStrPos","curStrLength","finish","repeat","cStr","writeBondsArray","bondsArrays","_getSubArrays","subArraySize","subArrays","writeMatrix","matrixIndx","toFixed","writeMatrices","Matrix4","PDBExporter","_tags","_result","_tagExtractors","_extractHEADER","TITLE","_extractTITLE","_extractATOM","_extractCONECT","_extractCOMPND","_extractREMARK","_extractHELIX","SHEET","_extractSHEET","_stringForRemark350","_stringForRemark290","fixedBonds","strands","startIndx","_getMoleculeChains","chainsString","_Remark290","_Remark350","biomolIndx","SourceClass","copyFbxPoint3","srcIdx","dstIdx","copyFbxPoint4","vector4","copyTransformedPoint3","setSubArray","copyFunctor","functorOpts","arridx","FBXModel","lastPos","lastNorm","lastCol","vertsCount","indsCount","setPositions","setTransformedPositions","setNormals","setTransformedNormals","setIndices","setShiftedIndices","shifted","getVerticesNumber","addInstance","currentCount","FBXGeometry","_info","FBX1CGeometry","cl","FBX2CCylinder","_cutRawStart","_cutRawEnd","_facesPerSlice","addPerCylinder","_extendVertices","_extendIndices","startToShift","_setColorRange","colorSize","part1End","part2End","capSize","cap1End","cap2End","FBXInfoExtractor","_materials","_models","_extractModelsAndMaterials","_flattenModels","layersOfInterest","checkExportAbility","_collectInstancedGeoInfo","_collectGeoInfo","_reworkIndices","faceSize","overallVertsCount","combined","verticesCount","vertCount","_collectMaterialInfo","_addToPool","_collectSpheresInfo","instCount","instMatrix","objMatrix","sphereColor","instanceIndex","_getSphereInstanceMatrix","_collectCylindersInfo","oneCCylinder","splittingInfo","_gatherCylindersColoringInfo","twoCCylinder","needToSplit","additionalVertsCount","colorStart","colorEnd","is2Colored","_getCylinderInstanceMatrix","materialIdx","_checkExistingMaterial","differs","instIdx","matVector1","matVector2","matVector3","idxOffset","FBXResult","_writeHeader","_writeDefinitions","_writeObjects","_writeRelations","_writeConnections","creator","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","allModels","_verticesIndices","_normalLayer","_colorLayer","allMaterials","_materialProperties","modelsList","_floatArrayToString","colorArray","normalArray","FBXExporter","_version","miewVersion","_extractor","loaders","parsers","exporters","ExporterList","tempColor","_height","_widthHalf","_heightHalf","_vector","_viewMatrix","_projectionMatrix","_domElement","overflow","pointerEvents","myNode","setSize","_renderObject","lerpColorAsHex","setHex","getHexString","colorAsHex","setFromMatrixPosition","localOffset","getMaxScaleOnAxis","fogFactor","smoothstep","WebkitTransform","MozTransform","oTransform","getTopWindow","STATE","matrix4","ObjectHandler","lastRotation","ObjectControls","objectPivot","hotkeysEnabled","screen","rotateFactor","axisRotateFactor","intertia","dynamicDampingFactor","intertiaThreshold","_state","_mousePrevPos","_mouseCurPos","_mainObj","_altObj","_affectedObj","_isAltObjFreeRotationAllowed","_isTranslationAllowed","_isKeysTranslatingObj","_pressedKeys","_clock","_lastUpdateTime","_listeners","mousedown","mouseup","mousemove","mousewheel","touchstartend","touchmove","getKeyBindObject","keydownup","handleResize","resetKeys","contextmenu","_rotate","quat","zeroPivot","makeRotationFromQuaternion","setObjects","rot","mousePrevPos","mouseCurPos","aboutAxis","mouse2rotation","setFromAxisAngle","translateOnAxis","timeSinceLastUpdate","timeSinceMove","eyeDirection","cameraUpDirection","cameraSidewaysDirection","moveDirection","mouseDelta","mousePrev","mouseCur","setLength","stopPropagation","preventDefault","innerWidth","innerHeight","getBoundingClientRect","ownerDocument","documentElement","pageXOffset","clientLeft","pageYOffset","clientTop","enableHotkeys","allowTranslation","allow","allowAltObjFreeRotation","keysTranslateObj","isEditingAltObj","convertMouseToOnCircle","pageX","pageY","screenSize","convertMouseToViewport","rotateByMouse","aboutZAxis","getOrientation","setOrientation","getScale","setScale","curTime","_lastMouseMoveTime","speedX","speedY","altObj","button","workWithAltObj","altKey","ctrlKey","shiftKey","translatePivotByMouse","wheelDelta","detail","touches","_touchDistanceCur","_touchDistanceStart","_scaleStart","keyCode","translatePivotInWorld","setX","setY","setZ","translatePivot","setPivot","newPivot","Picker","_lastMousePos","_mouseTotalDist","_lastClickBeginTime","_lastClickPos","_clickBeginTime","touchstart","touchend","picked","pickObject","screenPos","rayCaster","unproject","fogFarValue","getMouseInViewport","curPos","_lastTouchdownPos","changedTouches","targetCamera","_target","_targetCamera","_object","_full","autoClear","setViewport","secTypes","cSecNames","_createSecondary","strArray","nRes","resid","rIdx","fromUInt20ToInt20","uint20","FrameInfo","payload","callbacks","isLoading","_framesRange","frameIsReady","_frameRequest","_callbacks","_framesRequestLength","_downloadDataFn","parseBinaryData","setFrame","_prepareBuffer","framesStart","framesEnd","_framesCount","onDone","onLoadStatusChanged","onFail","onError","_parseBuffer","_bufferRequestStart","arrayBuffer","dataView","atomsCount","framesCount","_atomsCount","chunkedFramesCount","timeStep","iName","_timeStep","posData","coordIdx","secondaryArr","hiWord","loWord","_secondaryData","nextFrame","_currFrame","_updateSecondary","myResidues","sec","oldSec","nSec","compRes","getSec","frameIdx","_cachedResidues","disableEvents","vec","_vec","SceneObject","getGeometry","LinesObj","_id1","_id2","_getAtomFromName","_atom1","_atom2","_line","computeLineDistances","_raycaster","_intersects","verticesNeedUpdate","OutlineMaterial","srcDepthTex","srcTexSize","DEPTH_OUTLINE","FXAAMaterial","bgTransparent","BG_TRANSPARENT","AOMaterial","diffuseTexture","normalTexture","depthTexture","camNearFar","projMatrix","kernelRadius","depthThreshold","_kernelOffsets","AOHorBlurMaterial","aoMap","samplesOffsets","AOVertBlurWithBlendMaterial","fogNearFar","useFog","AnaglyphMaterial","srcL","srcR","View","orientation","ViewInterpolator","setup","startView","endView","_endTime","_isPaused","_srcView","_dstView","_isMoving","isMoving","wasStarted","transTime","_transitionTime","getCurrentView","success","createView","slerp","pause","resume","Cookies","removeCookie","cntKey","_toCount","cntVal","_getSimpleCookie","_removeSimpleCookie","setCookie","chunkLen","lc","_chunkString","_setSimpleCookie","getCookie","cookie","_getExpirationDate","today","setFullYear","toUTCString","_exists","webVRPoC","stylizeElement","bottom","padding","border","font","xr","isSessionSupported","then","supported","cursor","currentSession","onSessionEnded","onSessionStarted","session","_gfx","setReferenceSpaceType","setSession","onmouseenter","onmouseleave","onclick","sessionInit","optionalFeatures","requestSession","moveSceneBehindHeadset","showEnterVR","showWebXRNotFound","textDecoration","WebVRPoC","onToggle","_mainCamera","_button","_onToggle","_molContainer","_user","_scalingPivot","_controller1","_controller2","_pressedGripsCounter","_distance","startScalingByControllers","stopScalingByControllers","handleGripsDown","handleGripsUp","gfx","createWebVRButton","_mainFog","_plugVRNodesIntoScene","_setControllersListeners","getController","_createControllerMesh","disable","setAnimationLoop","getSession","_unplugVRNodesFromScene","cylinder","rotateX","updateMoleculeScale","scaler","container","getCanvas","EDIT_MODE","LOADER_NOT_FOUND","removeExtension","reportProgress","log","percent","chooseFogColor","Miew","settingsCookie","cookiePath","_interpolator","_container","getElementById","getElementsByClassName","_containerRoot","_running","_halting","_building","_needRender","_hotKeysEnabled","_cookies","_spinner","_loading","_animInterval","_visuals","_curVisualName","_sourceWindow","registeredPlugins","_initOnSettingsChanged","_setContainerContents","arezSpritesSupported","getExtension","isAOSupported","getMaxRepresentationCount","_updateShadowCamera","shadowMatrix","OBB","halfSize","light","getOBB","class","frag","createDocumentFragment","_msgMode","_msgAtomInfo","_showMessage","_initGfx","_initListeners","_onKeyDown","_onKeyUp","_objectControls","_getAltObj","_picker","_onPick","file","keepRepsInfo","job","halt","msg","_showCanvas","_requestAnimationFrame","requestAnimationFrame","clientWidth","clientHeight","webGLOptions","preserveDrawingBuffer","premultipliedAlpha","renderer2d","CSS2DRenderer","shadowMap","autoUpdate","getContext","setPixelRatio","devicePixelRatio","setClearColor","clearColor","stereoCam","selectionScene","selectionRoot","selectionPivot","light12","pixelRatio","getPixelRatio","shadowMapSize","mapSize","light3","Axes","deviceWidth","deviceHeight","offscreenBuf","minFilter","magFilter","depthBuffer","offscreenBuf2","offscreenBuf3","offscreenBuf4","volBFTex","volFFTex","volWFFTex","offscreenBuf5","offscreenBuf6","offscreenBuf7","stereoBufL","stereoBufR","_embedWebXR","stats","Stats","_fps","_onResize","_makeUniqueVisualName","baseName","random","suffix","_addVisual","_removeVisual","_forEachVisual","_releaseAllVisuals","_forEachComplexVisual","_getComplexVisual","any","_getVolumeVisual","VolumeVisual","_getVisualForComplex","getVisuals","getComplexVisualsCount","getCurrentVisual","setCurrentVisual","run","_onTick","_discardComponentEdit","_discardFragmentEdit","enableHotKeys","_resizeOffscreenBuffers","isAnaglyph","multi","_onUpdate","_onRender","_getBSphereRadius","_bSphereForOneVisual","_bBoxForOneVisual","_bBox","_invMatrix","_points","union","_updateFog","_setUberMaterialValues","isScriptingCommandAvailable","callNextCmd","_needRebuild","_updateView","webVR","_clipPlaneUpdateValue","_fogFarUpdateValue","setRenderTarget","_renderFrame","_anaglyphMat","_size","focus","_renderShadowMap","_renderScene","setScissorTest","setScissor","cameraL","cameraR","_onBgColorChanged","_onFogColorChanged","_enableMRT","renderBuffer","textureBuffer","gl","drawBuffersWEBGL","COLOR_ATTACHMENT0","tx8","__webglTexture","bindTexture","TEXTURE_2D","fb","__webglFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT1_WEBGL","distortion","bHaveComplexes","volumeVisual","ssao","_renderWithPrepassTransparency","dstBuffer","srcBuffer","_performAO","_renderOutline","_renderSelection","_renderVolume","_performFXAA","_performDistortion","aberration","targetBuffer","_outlineMaterial","srcDepthBuffer","srcColorBuffer","currentRenderTarget","getRenderTarget","activeCubeFace","getActiveCubeFace","activeMipmapLevel","getActiveMipmapLevel","setBlending","buffers","setClear","setTest","updateMatrices","_hasSelectionToRender","selPivot","_checkVolumeRenderingSupport","renderTarget","oldRT","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","volumeBFMat","volumeFFMat","cubeOffsetMat","world2colorMat","volumeRenderingSupported","dstBuf","tmpBuf1","tmpBuf2","tmpBuf3","overrideMaterial","colorMask","_fxaaMaterial","_aoMaterial","_horBlurMaterial","_vertBlurMaterial","_scale","normalBuffer","srcDepthTexture","tempBuffer","tempBuffer1","_lastPick","_setEditMode","_resetObjects","setNeedRender","_resetScene","resetPivot","resetView","_export","TheExporter","io","rePdbId","rePubchem","reUrlScheme","_fetchData","matchesPdbId","sourceType","matchesPubchem","compound","resolveSourceShortcut","TheLoader","fileExt","TheParser","updateBinaryMode","newOptions","keyCount","loader","lengthComputable","total","loaded","catch","onLoadEnd","anything","jobIndex","_refreshTitle","dataSet","_parseData","_onLoad","err","unload","_startAnimation","fileData","_stopAnimation","_frameInfo","isPlaying","_isAnimating","_continueAnimation","_pauseAnimation","clearInterval","minFrameTime","setInterval","_updateObjsToFrame","visualName","amberFileName","hasValidRes","hasValidResidues","resetEd","_onLoadEd","_tweakResolution","_edLoader","loadEd","_rebuildObjects","toRemove","unitIdx","currentUnitInfo","_updateInfoPanel","rebuildActions","appendix","_extractRepresentation","defPreset","_setReps","presList","newIdx","_editMode","getElementsByTagName","_enterComponentEditMode","editors","_editors","_applyComponentEdit","_enterFragmentEditMode","selectedVisuals","_applyFragmentEdit","_updateSelection","firstLine","secondLine","aName","coordLine","nextAltObj","setPivotResidue","amount","setPivotAtom","_centerInVisual","setPivotSubset","_includesInCurSelection","_includesInSelector","screenshot","getDataURL","dataURL","canvas","canvasContext","drawImage","toDataURL","screenshotURI","areaOfInterestTanFov2","shotAspect","setDrawingBufferSize","uri","save","dataString","maxPerf","_gfxScore","_autoChangeResolution","setOptions","objData","bThrow","Ctor","LinesObject","_addSceneObject","sceneObject","objs","getState","compact","getScript","_compareReps","compareWithDefaults","currPreset","repsDiff","emptyReps","repsInfo","objectsState","_updateShadowmapMeshes","_updateMaterials","_fogAlphaChanged","evt","Boolean","sel","euler","setFromQuaternion","srcView","dstView","setFromEuler","None","projected","fullAtomName","complexName","project","exportCML","extractBasis","retMat","makeBasis","extractRotation","xml","removeAttribute","sGroup","updateCMLData","XMLSerializer","serializeToString","curChainName","curChainColor","PACKAGE_VERSION","thirdParty","lodash","three","modeIdDesc","$help","colorDesc","materialDesc","addRepDesc","setGetParameterDesc","PDBID","REP_NAME","DESCRIPTION","REP_INDEX","EXPRESSION","MODE_ID","COLORER_ID","MATERIAL_ID","new","del","PARAMETER","set_save","set_restore","set_reset","PRESET","ENCODED_VIEW","removeobj","listobj","NULL","representationsStorage","representationMap","representationID","strId","sortedKeys","utilFunctions","repMap","repName","selectionStr","strList","joinHelpStr","helpData","clihelp","helpItem","awaitWhileCMDisInProcess","finishAwaitingCMDInProcess","modificate","modificators","modificator","argExc","endsWith","cliUtils","cmd","cliutils","_val","notimplemented","script","_printCallback","_errorCallback","parsercli","cmdQueue","commandInAction"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"dist/Miew.min.js","mappings":";CAAA,SAAAA,EAAAC,GACA,iBAAAC,SAAA,iBAAAC,OACAA,OAAAD,QAAAD,EAAAG,QAAA,UAAAA,QAAA,UACA,mBAAAC,QAAAA,OAAAC,IACAD,OAAA,mBAAAJ,GACA,iBAAAC,QACAA,QAAA,KAAAD,EAAAG,QAAA,UAAAA,QAAA,UAEAJ,EAAA,KAAAC,EAAAD,EAAA,EAAAA,EAAA,MACC,CATD,CASCO,MAAA,CAAAC,EAAAC,uBCkED,IAAIC,EAAU,WACd,IAAIC,EAAE,SAASC,EAAEC,EAAEF,EAAEG,GAAG,IAAIH,EAAEA,GAAG,CAAC,EAAEG,EAAEF,EAAEG,OAAOD,IAAIH,EAAEC,EAAEE,IAAID,GAAG,OAAOF,CAAC,EAAEK,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,GAAI,CAAC,EAAE,IAAIC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAI,CAAC,EAAE,KAAKC,GAAK,CAAC,EAAE,KAAKC,GAAK,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAKC,GAAK,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAKC,GAAK,C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AAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,G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C,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAMvE,EAAEuE,GAAK,CAAC,EAAE,MAAM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,GAAI,EAClD,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,EACpD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACpD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACpD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACvD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACrD,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAClD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAClD,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,EAClD,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG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","sources":["webpack://Miew/webpack/universalModuleDefinition","webpack://Miew/./src/utils/MiewCLIParser.js","webpack://Miew/./src/utils/SelectionParser.js","webpack://Miew/./vendor/js/Smooth.js","webpack://Miew/./vendor/js/mmtf.js","webpack://Miew/external umd {\"module\":\"lodash\",\"commonjs\":\"lodash\",\"commonjs2\":\"lodash\",\"amd\":\"lodash\",\"root\":\"_\"}","webpack://Miew/external umd {\"module\":\"three\",\"commonjs\":\"three\",\"commonjs2\":\"three\",\"amd\":\"three\",\"root\":\"THREE\"}","webpack://Miew/webpack/bootstrap","webpack://Miew/webpack/runtime/compat get default export","webpack://Miew/webpack/runtime/define property getters","webpack://Miew/webpack/runtime/hasOwnProperty shorthand","webpack://Miew/../node_modules/spin.js/spin.js","webpack://Miew/./src/Timer.js","webpack://Miew/./src/gfx/Stats.js","webpack://Miew/./src/utils/EventDispatcher.js","webpack://Miew/./src/utils/logger.js","webpack://Miew/./src/utils.js","webpack://Miew/./src/utils/JobHandle.js","webpack://Miew/./src/settings.js","webpack://Miew/./src/options.js","webpack://Miew/./src/chem/Atom.js","webpack://Miew/./src/chem/Element.js","webpack://Miew/./src/chem/Bond.js","webpack://Miew/./src/chem/Residue.js","webpack://Miew/./src/chem/ResidueType.js","webpack://Miew/./src/chem/Chain.js","webpack://Miew/./src/chem/StructuralElement.js","webpack://Miew/./src/chem/Helix.js","webpack://Miew/./src/chem/Strand.js","webpack://Miew/./src/chem/Sheet.js","webpack://Miew/./src/chem/SGroup.js","webpack://Miew/./src/chem/selectors/selectArgs.js","webpack://Miew/./src/chem/selectors/selectorsBase.js","webpack://Miew/./src/chem/selectors/selectOps.js","webpack://Miew/./src/chem/selectors.js","webpack://Miew/./src/chem/BiologicalUnit.js","webpack://Miew/./src/chem/Assembly.js","webpack://Miew/./src/chem/Component.js","webpack://Miew/./src/chem/AtomPairs.js","webpack://Miew/./src/chem/AutoBond.js","webpack://Miew/./src/chem/AromaticLoopsMarker.js","webpack://Miew/./src/chem/VoxelWorld.js","webpack://Miew/./src/chem/HBondInfo.js","webpack://Miew/./src/chem/SecondaryStructureMap.js","webpack://Miew/./src/chem/Complex.js","webpack://Miew/./src/chem/Volume.js","webpack://Miew/./src/chem/Molecule.js","webpack://Miew/./src/chem.js","webpack://Miew/./src/gfx/CSS2DObject.js","webpack://Miew/./src/gfx/RCGroup.js","webpack://Miew/./src/gfx/gfxutils.js","webpack://Miew/./src/Visual.js","webpack://Miew/./src/utils/EntityList.js","webpack://Miew/./src/utils/makeContextDependent.js","webpack://Miew/./src/gfx/geometries/SphereCollisionGeo.js","webpack://Miew/./src/gfx/geometries/InstancedSpheresGeometry.js","webpack://Miew/./src/gfx/geometries/ChunkedObjectsGeometry.js","webpack://Miew/./src/gfx/geometries/SimpleSpheresGeometry.js","webpack://Miew/./src/gfx/geometries/Simple2CCylindersGeometry.js","webpack://Miew/./src/gfx/geometries/CylinderBufferGeometry.js","webpack://Miew/./src/gfx/geometries/Instanced2CCylindersGeometry.js","webpack://Miew/./src/gfx/geometries/ExtrudedObjectsGeometry.js","webpack://Miew/./src/gfx/geometries/ThickLinesGeometry.js","webpack://Miew/./src/gfx/geometries/LinesGeometry.js","webpack://Miew/./src/gfx/geometries/CylinderCollisionGeo.js","webpack://Miew/./src/gfx/geometries/ChunkedLinesGeometry.js","webpack://Miew/./src/gfx/geometries/TwoColorLinesGeometry.js","webpack://Miew/./src/gfx/geometries/CrossGeometry.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceMarchCube.js","webpack://Miew/./src/gfx/geometries/IsoSurface.js","webpack://Miew/./src/gfx/geometries/VolumeSurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/QuickSurfGeometry.js","webpack://Miew/./src/gfx/geometries/ContactSurface.js","webpack://Miew/./src/gfx/geometries/ContactSurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceAtomColored.js","webpack://Miew/./src/gfx/geometries/IsosurfaceBuildNormals.js","webpack://Miew/./src/gfx/geometries/IsoSurfaceGeo.js","webpack://Miew/./src/gfx/geometries/SSIsosurfaceGeometry.js","webpack://Miew/./src/gfx/geometries/LabelsGeometry.js","webpack://Miew/./src/gfx/geometries/geometries.js","webpack://Miew/./src/gfx/capabilities.js","webpack://Miew/./src/gfx/noiseTexture.js","webpack://Miew/./src/gfx/shaders/UberMaterial.js","webpack://Miew/./src/gfx/meshes/UberObject.js","webpack://Miew/./src/gfx/meshes/ZSpriteMesh.js","webpack://Miew/./src/gfx/meshes/ZClippedMesh.js","webpack://Miew/./src/gfx/meshes/TextMesh.js","webpack://Miew/./src/gfx/meshes/SimpleMesh.js","webpack://Miew/./src/gfx/meshes/ThickLineMesh.js","webpack://Miew/./src/gfx/meshes/InstancedMesh.js","webpack://Miew/./src/gfx/meshes/meshes.js","webpack://Miew/./src/gfx/meshes/MeshCreator.js","webpack://Miew/./src/gfx/meshes/TransformGroup.js","webpack://Miew/./src/gfx/modes/groups/ChemGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsSphereGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsSurfaceGroup.js","webpack://Miew/./src/gfx/modes/groups/AtomsSASSESGroupStub.js","webpack://Miew/./src/gfx/modes/groups/AtomsTextGroup.js","webpack://Miew/./src/gfx/modes/groups/AromaticGroup.js","webpack://Miew/./src/gfx/modes/groups/AromaticTorusGroup.js","webpack://Miew/./src/gfx/modes/groups/AromaticLinesGroup.js","webpack://Miew/./src/gfx/modes/groups/ResiduesGroup.js","webpack://Miew/./src/gfx/modes/groups/NucleicItemGroup.js","webpack://Miew/./src/gfx/modes/groups/NucleicCylindersGroup.js","webpack://Miew/./src/gfx/modes/groups/NucleicSpheresGroup.js","webpack://Miew/./src/gfx/modes/groups/CartoonHelper.js","webpack://Miew/./src/gfx/modes/groups/ResiduesSubseqGroup.js","webpack://Miew/./src/gfx/modes/groups/ResiduesTraceGroup.js","webpack://Miew/./src/gfx/modes/groups/BondsGroup.js","webpack://Miew/./src/gfx/modes/groups/BondsCylinderGroup.js","webpack://Miew/./src/gfx/modes/groups/BondsLinesGroup.js","webpack://Miew/./src/gfx/modes/groups/groups.js","webpack://Miew/./src/gfx/modes/processors/AtomsProcessor.js","webpack://Miew/./src/gfx/modes/processors/OrphanAtomsProcessor.js","webpack://Miew/./src/gfx/modes/processors/ResiduesProcessor.js","webpack://Miew/./src/gfx/modes/processors/NucleicProcessor.js","webpack://Miew/./src/gfx/modes/processors/SubseqsProcessor.js","webpack://Miew/./src/gfx/modes/processors/BondsProcessor.js","webpack://Miew/./src/gfx/modes/processors/AromaticProcessor.js","webpack://Miew/./src/gfx/modes/processors/processors.js","webpack://Miew/./src/gfx/modes/groups/GroupsFactory.js","webpack://Miew/./src/gfx/modes/Mode.js","webpack://Miew/./src/gfx/modes/LinesMode.js","webpack://Miew/./src/gfx/modes/LicoriceMode.js","webpack://Miew/./src/gfx/modes/BallsAndSticksMode.js","webpack://Miew/./src/gfx/modes/VanDerWaalsMode.js","webpack://Miew/./src/gfx/modes/TraceMode.js","webpack://Miew/./src/gfx/modes/TubeMode.js","webpack://Miew/./src/gfx/modes/CartoonMode.js","webpack://Miew/./src/gfx/modes/SurfaceMode.js","webpack://Miew/./src/gfx/modes/QuickSurfaceMode.js","webpack://Miew/./src/gfx/modes/IsoSurfaceMode.js","webpack://Miew/./src/gfx/modes/IsoSurfaceSASMode.js","webpack://Miew/./src/gfx/modes/IsoSurfaceSESMode.js","webpack://Miew/./src/gfx/modes/ContactSurfaceMode.js","webpack://Miew/./src/gfx/modes/TextMode.js","webpack://Miew/./src/gfx/modes.js","webpack://Miew/./src/gfx/palettes/Palette.js","webpack://Miew/./src/gfx/palettes/cpkPalette.js","webpack://Miew/./src/gfx/palettes/jmolPalette.js","webpack://Miew/./src/gfx/palettes/vmdPalette.js","webpack://Miew/./src/gfx/palettes.js","webpack://Miew/./src/gfx/colorers/Colorer.js","webpack://Miew/./src/gfx/colorers/ElementColorer.js","webpack://Miew/./src/gfx/colorers/ResidueTypeColorer.js","webpack://Miew/./src/gfx/colorers/SequenceColorer.js","webpack://Miew/./src/gfx/colorers/ChainColorer.js","webpack://Miew/./src/gfx/colorers/SecondaryStructureColorer.js","webpack://Miew/./src/gfx/colorers/UniformColorer.js","webpack://Miew/./src/gfx/colorers/ConditionalColorer.js","webpack://Miew/./src/gfx/colorers/ConformationColorer.js","webpack://Miew/./src/gfx/colorers/TemperatureColorer.js","webpack://Miew/./src/gfx/colorers/OccupancyColorer.js","webpack://Miew/./src/gfx/colorers/HydrophobicityColorer.js","webpack://Miew/./src/gfx/colorers/MoleculeColorer.js","webpack://Miew/./src/gfx/colorers/CarbonColorer.js","webpack://Miew/./src/gfx/colorers.js","webpack://Miew/./src/gfx/materials.js","webpack://Miew/./src/gfx/meshutils.js","webpack://Miew/./src/gfx/Representation.js","webpack://Miew/./src/ComplexVisualEdit.js","webpack://Miew/./src/ComplexVisual.js","webpack://Miew/./src/gfx/shaders/VolumeMaterial.js","webpack://Miew/./src/gfx/VolumeMesh.js","webpack://Miew/./src/gfx/VolumeBounds.js","webpack://Miew/./src/gfx/VolumeFarPlane.js","webpack://Miew/./src/VolumeVisual.js","webpack://Miew/./src/io/loaders/LoaderList.js","webpack://Miew/./src/io/loaders/Loader.js","webpack://Miew/./src/io/loaders/FileLoader.js","webpack://Miew/./src/io/loaders/XHRLoader.js","webpack://Miew/./src/io/loaders/ImmediateLoader.js","webpack://Miew/./src/io/loaders.js","webpack://Miew/./src/io/parsers/ParserList.js","webpack://Miew/./src/io/parsers/Parser.js","webpack://Miew/./src/io/parsers/pdb/Remark290.js","webpack://Miew/./src/io/parsers/pdb/Remark350.js","webpack://Miew/./src/io/parsers/PDBStream.js","webpack://Miew/./src/io/parsers/PDBParser.js","webpack://Miew/./src/io/parsers/CMLParser.js","webpack://Miew/./src/io/parsers/MMTFParser.js","webpack://Miew/./src/io/parsers/ParsingError.js","webpack://Miew/./src/io/parsers/readCIF.js","webpack://Miew/./src/io/parsers/CIFParser.js","webpack://Miew/./src/io/parsers/VolumeModel.js","webpack://Miew/./src/io/parsers/CCP4Parser.js","webpack://Miew/./src/io/parsers/XYZParser.js","webpack://Miew/./src/io/parsers/PubChemParser.js","webpack://Miew/./src/io/parsers/SDFStream.js","webpack://Miew/./src/io/parsers/SDFParser.js","webpack://Miew/./src/io/parsers/DSN6Parser.js","webpack://Miew/./src/io/parsers/GROReader.js","webpack://Miew/./src/io/parsers/GROParser.js","webpack://Miew/./src/io/parsers/MOL2Parser.js","webpack://Miew/./src/io/parsers.js","webpack://Miew/./src/io/exporters/ExporterList.js","webpack://Miew/./src/io/exporters/Exporter.js","webpack://Miew/./src/io/exporters/PDBResult.js","webpack://Miew/./src/io/exporters/PDBExporter.js","webpack://Miew/./src/io/exporters/fbx/FBXModel.js","webpack://Miew/./src/io/exporters/fbx/FBXGeometry.js","webpack://Miew/./src/io/exporters/fbx/FBX1CGeometry.js","webpack://Miew/./src/io/exporters/fbx/FBX2CCylinder.js","webpack://Miew/./src/io/exporters/fbx/FBXInfoExtractor.js","webpack://Miew/./src/io/exporters/fbx/FBXResult.js","webpack://Miew/./src/io/exporters/FBXExporter.js","webpack://Miew/./src/io/exporters.js","webpack://Miew/./src/io/io.js","webpack://Miew/./src/gfx/CSS2DRenderer.js","webpack://Miew/./src/utils/getTopWindow.js","webpack://Miew/./src/ui/ObjectControls.js","webpack://Miew/./src/ui/Picker.js","webpack://Miew/./src/gfx/Axes.js","webpack://Miew/./src/gfx/FrameInfo.js","webpack://Miew/./src/gfx/objects/SceneObject.js","webpack://Miew/./src/gfx/objects/LinesObj.js","webpack://Miew/./src/gfx/shaders/OutlineMaterial.js","webpack://Miew/./src/gfx/shaders/FXAAMaterial.js","webpack://Miew/./src/gfx/shaders/AOMaterial.js","webpack://Miew/./src/gfx/shaders/AOHorBlurMaterial.js","webpack://Miew/./src/gfx/shaders/AOVertBlurWithBlendMaterial.js","webpack://Miew/./src/gfx/shaders/AnaglyphMaterial.js","webpack://Miew/./src/gfx/ViewInterpolator.js","webpack://Miew/./src/utils/Cookies.js","webpack://Miew/./src/gfx/vr/createWebVRButton.js","webpack://Miew/./src/gfx/vr/WebVRPoC.js","webpack://Miew/./src/Miew.js","webpack://Miew/./src/utils/MiewCLIHelp.js","webpack://Miew/./src/Miew-cli.js","webpack://Miew/./src/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"lodash\"), require(\"three\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"lodash\", \"three\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Miew\"] = factory(require(\"lodash\"), require(\"three\"));\n\telse\n\t\troot[\"Miew\"] = factory(root[\"_\"], root[\"THREE\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE__535__, __WEBPACK_EXTERNAL_MODULE__698__) => {\nreturn ","/* eslint-disable */\r\n// DO NOT EDIT! Automatically generated from .jison\r\n/* parser generated by jison 0.4.18 */\r\n/*\r\n Returns a Parser object of the following structure:\r\n\r\n Parser: {\r\n yy: {}\r\n }\r\n\r\n Parser.prototype: {\r\n yy: {},\r\n trace: function(),\r\n symbols_: {associative list: name ==> number},\r\n terminals_: {associative list: number ==> name},\r\n productions_: [...],\r\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\r\n table: [...],\r\n defaultActions: {...},\r\n parseError: function(str, hash),\r\n parse: function(input),\r\n\r\n lexer: {\r\n EOF: 1,\r\n parseError: function(str, hash),\r\n setInput: function(input),\r\n input: function(),\r\n unput: function(str),\r\n more: function(),\r\n less: function(n),\r\n pastInput: function(),\r\n upcomingInput: function(),\r\n showPosition: function(),\r\n test_match: function(regex_match_array, rule_index),\r\n next: function(),\r\n lex: function(),\r\n begin: function(condition),\r\n popState: function(),\r\n _currentRules: function(),\r\n topState: function(),\r\n pushState: function(condition),\r\n\r\n options: {\r\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\r\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\r\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\r\n },\r\n\r\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\r\n rules: [...],\r\n conditions: {associative list: name ==> set},\r\n }\r\n }\r\n\r\n\r\n token location info (@$, _$, etc.): {\r\n first_line: n,\r\n last_line: n,\r\n first_column: n,\r\n last_column: n,\r\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\r\n }\r\n\r\n\r\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\r\n text: (matched text)\r\n token: (the produced terminal token, if any)\r\n line: (yylineno)\r\n }\r\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\r\n loc: (yylloc)\r\n expected: (string describing the set of expected tokens)\r\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\r\n }\r\n*/\r\nvar parser = (function(){\r\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,60],$V1=[1,62],$V2=[1,63],$V3=[1,65],$V4=[1,66],$V5=[1,67],$V6=[1,68],$V7=[1,69],$V8=[1,80],$V9=[1,72],$Va=[1,73],$Vb=[1,74],$Vc=[1,75],$Vd=[1,99],$Ve=[1,76],$Vf=[1,100],$Vg=[1,79],$Vh=[1,51],$Vi=[1,81],$Vj=[1,82],$Vk=[1,84],$Vl=[1,83],$Vm=[1,85],$Vn=[1,96],$Vo=[1,97],$Vp=[1,98],$Vq=[1,86],$Vr=[1,87],$Vs=[1,64],$Vt=[1,70],$Vu=[1,71],$Vv=[1,77],$Vw=[1,78],$Vx=[1,53],$Vy=[1,54],$Vz=[1,55],$VA=[1,61],$VB=[1,88],$VC=[1,89],$VD=[1,90],$VE=[1,91],$VF=[1,92],$VG=[1,93],$VH=[1,94],$VI=[1,95],$VJ=[1,101],$VK=[1,102],$VL=[1,103],$VM=[1,104],$VN=[1,105],$VO=[1,56],$VP=[1,57],$VQ=[1,58],$VR=[1,59],$VS=[1,115],$VT=[1,111],$VU=[1,114],$VV=[1,112],$VW=[1,113],$VX=[1,118],$VY=[1,117],$VZ=[1,134],$V_=[1,149],$V$=[1,150],$V01=[1,157],$V11=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],$V21=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,71,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],$V31=[5,6,7,9,13,15,17,18,19,20,23,25,26,27,30,33,34,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,82,83,84,85,86,87,88,89,90,91,92,93,94,95],$V41=[5,70,72],$V51=[5,74],$V61=[71,101];\r\nvar parser = {trace: function trace () { },\r\nyy: {},\r\nsymbols_: {\"error\":2,\"Program\":3,\"Command\":4,\"EOF\":5,\"RESET\":6,\"BUILD\":7,\"ALL\":8,\"HELP\":9,\"Path\":10,\"MOTM\":11,\"OneArgCommand\":12,\"GET\":13,\"STRING\":14,\"SET\":15,\"Value\":16,\"SET_SAVE\":17,\"SET_RESTORE\":18,\"SET_RESET\":19,\"PRESET\":20,\"AddRepresentation\":21,\"EditRepresentation\":22,\"REMOVE\":23,\"RepresentationReference\":24,\"HIDE\":25,\"SHOW\":26,\"LIST\":27,\"EXPAND_KEY\":28,\"SELECTOR_KEY\":29,\"SELECT\":30,\"AS\":31,\"WordAll\":32,\"SELECTOR\":33,\"WITHIN\":34,\"NUMBER\":35,\"OF\":36,\"MATERIAL\":37,\"IDENTIFIER\":38,\"ModeCMD\":39,\"ColorCMD\":40,\"VIEW\":41,\"BASE_64\":42,\"UNIT\":43,\"DSSP\":44,\"SCALE\":45,\"ROTATE\":46,\"AxesList\":47,\"TRANSLATE\":48,\"CENTER\":49,\"GetURLBranch\":50,\"Screenshot\":51,\"LINE\":52,\"ArgList\":53,\"LISTOBJ\":54,\"REMOVEOBJ\":55,\"URL\":56,\"VIEW_KEY\":57,\"SCREENSHOT\":58,\"LOAD\":59,\"Url\":60,\"FILE_KEY\":61,\"ADD\":62,\"Description\":63,\"REP\":64,\"MODE\":65,\"COLOR\":66,\"Descriptor\":67,\"RepresentationOwnProperty\":68,\"RepresentationOwnPropertyOpts\":69,\"DESC_KEY\":70,\"=\":71,\"DESC_KEY_OPTS\":72,\"AxesArg\":73,\"DESC_KEY_AXES\":74,\"Arg\":75,\"PathWoDescKey\":76,\"HEX\":77,\"BOOL\":78,\"Word\":79,\"CommandSetWoDESC_KEY\":80,\"DescKeys\":81,\"CLEAR\":82,\"FILE_LIST\":83,\"FILE_REGISTER\":84,\"FILE_DELETE\":85,\"PRESET_ADD\":86,\"PRESET_DELETE\":87,\"PRESET_UPDATE\":88,\"PRESET_RENAME\":89,\"PRESET_OPEN\":90,\"CREATE_SCENARIO\":91,\"RESET_SCENARIO\":92,\"DELETE_SCENARIO\":93,\"ADD_SCENARIO_ITEM\":94,\"LIST_SCENARIO\":95,\"PDB_KEY\":96,\"DELAY_KEY\":97,\"PRST_KEY\":98,\"DESCRIPTION_KEY\":99,\"CommandSet\":100,\".\":101,\"PresetPath\":102,\"/\":103,\"HexOrNumber\":104,\"$accept\":0,\"$end\":1},\r\nterminals_: {2:\"error\",5:\"EOF\",6:\"RESET\",7:\"BUILD\",8:\"ALL\",9:\"HELP\",11:\"MOTM\",13:\"GET\",14:\"STRING\",15:\"SET\",17:\"SET_SAVE\",18:\"SET_RESTORE\",19:\"SET_RESET\",20:\"PRESET\",23:\"REMOVE\",25:\"HIDE\",26:\"SHOW\",27:\"LIST\",28:\"EXPAND_KEY\",29:\"SELECTOR_KEY\",30:\"SELECT\",31:\"AS\",33:\"SELECTOR\",34:\"WITHIN\",35:\"NUMBER\",36:\"OF\",37:\"MATERIAL\",38:\"IDENTIFIER\",41:\"VIEW\",42:\"BASE_64\",43:\"UNIT\",44:\"DSSP\",45:\"SCALE\",46:\"ROTATE\",48:\"TRANSLATE\",49:\"CENTER\",52:\"LINE\",54:\"LISTOBJ\",55:\"REMOVEOBJ\",56:\"URL\",57:\"VIEW_KEY\",58:\"SCREENSHOT\",59:\"LOAD\",61:\"FILE_KEY\",62:\"ADD\",64:\"REP\",65:\"MODE\",66:\"COLOR\",70:\"DESC_KEY\",71:\"=\",72:\"DESC_KEY_OPTS\",74:\"DESC_KEY_AXES\",77:\"HEX\",78:\"BOOL\",82:\"CLEAR\",83:\"FILE_LIST\",84:\"FILE_REGISTER\",85:\"FILE_DELETE\",86:\"PRESET_ADD\",87:\"PRESET_DELETE\",88:\"PRESET_UPDATE\",89:\"PRESET_RENAME\",90:\"PRESET_OPEN\",91:\"CREATE_SCENARIO\",92:\"RESET_SCENARIO\",93:\"DELETE_SCENARIO\",94:\"ADD_SCENARIO_ITEM\",95:\"LIST_SCENARIO\",96:\"PDB_KEY\",97:\"DELAY_KEY\",98:\"PRST_KEY\",99:\"DESCRIPTION_KEY\",101:\".\",103:\"/\"},\r\nproductions_: [0,[3,2],[3,1],[4,1],[4,1],[4,2],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,3],[4,3],[4,1],[4,1],[4,1],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,2],[4,2],[4,1],[4,2],[4,2],[4,2],[4,4],[4,2],[4,6],[4,2],[4,1],[4,1],[4,1],[4,2],[4,2],[4,1],[4,2],[4,1],[4,2],[4,2],[4,2],[4,1],[4,2],[4,1],[4,1],[4,3],[4,3],[4,4],[4,4],[4,1],[4,2],[50,1],[50,2],[50,2],[50,3],[50,3],[51,1],[51,2],[51,3],[12,2],[12,2],[12,2],[21,1],[21,2],[21,2],[21,3],[22,2],[22,3],[39,2],[39,3],[40,2],[40,3],[24,1],[24,1],[63,1],[63,2],[63,3],[63,4],[67,1],[67,1],[67,2],[68,3],[69,3],[47,1],[47,2],[73,2],[53,1],[53,2],[75,3],[16,1],[16,1],[16,1],[16,1],[16,1],[79,1],[79,1],[32,1],[32,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[100,1],[100,1],[76,1],[76,3],[76,3],[10,1],[10,1],[10,3],[10,3],[10,3],[60,1],[102,1],[102,3],[104,1],[104,1]],\r\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\r\n/* this == yyval */\r\n\r\nvar $0 = $$.length - 1;\r\nswitch (yystate) {\r\ncase 1:\r\n return $$[$0-1]; \r\nbreak;\r\ncase 3:\r\nthis.$ = yy.miew.reset(false); yy.ClearContext(); yy.miew.resetReps(\"empty\");\r\nbreak;\r\ncase 4:\r\nthis.$ = yy.miew.rebuild();\r\nbreak;\r\ncase 5:\r\nthis.$ = yy.miew.rebuildAll(); yy.miew.rebuild();\r\nbreak;\r\ncase 6:\r\nthis.$ = yy.echo(yy.utils.help().toString());\r\nbreak;\r\ncase 7:\r\nthis.$ = yy.echo(yy.utils.help($$[$0]).toString());\r\nbreak;\r\ncase 8:\r\nthis.$ = yy.miew.motm();\r\nbreak;\r\ncase 10: case 11:\r\nthis.$ = yy.utils.propagateProp($$[$0]); yy.echo(yy.miew.get($$[$0]).toString());\r\nbreak;\r\ncase 12: case 13:\r\nthis.$ = yy.miew.set($$[$0-1], yy.utils.propagateProp($$[$0-1], $$[$0]));;\r\nbreak;\r\ncase 14:\r\nthis.$ = yy.miew.saveSettings();;\r\nbreak;\r\ncase 15:\r\nthis.$ = yy.miew.restoreSettings();;\r\nbreak;\r\ncase 16:\r\nthis.$ = yy.miew.resetSettings();;\r\nbreak;\r\ncase 17:\r\nthis.$ = yy.miew.resetReps();\r\nbreak;\r\ncase 18:\r\nthis.$ = yy.miew.applyPreset($$[$0]);\r\nbreak;\r\ncase 21:\r\nthis.$ = yy.miew.repRemove($$[$0]); yy.representations.remove($$[$0]);\r\nbreak;\r\ncase 22:\r\nthis.$ = yy.miew.repHide($$[$0]);\r\nbreak;\r\ncase 23:\r\nthis.$ = yy.miew.repHide($$[$0], false);\r\nbreak;\r\ncase 24:\r\nthis.$ = yy.echo(yy.utils.listRep(yy.miew, yy.representations, $$[$0], '-e'));\r\nbreak;\r\ncase 25:\r\nthis.$ = yy.echo(yy.utils.list(yy.miew, yy.representations));\r\nbreak;\r\ncase 26:\r\nthis.$ = yy.echo(yy.utils.list(yy.miew, yy.representations, $$[$0]));\r\nbreak;\r\ncase 27:\r\nthis.$ = yy.echo(yy.utils.listSelector(yy.miew, yy.Context));\r\nbreak;\r\ncase 28:\r\nthis.$ = yy.miew.select(yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0], true));\r\nbreak;\r\ncase 29:\r\nthis.$ = yy.Context[$$[$0].toLowerCase()] = yy.utils.checkArg($$[$0-3].toLowerCase(), $$[$0-2], true); yy.miew.select(yy.Context[$$[$0].toLowerCase()]);\r\nbreak;\r\ncase 30:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {selector : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0])});\r\nbreak;\r\ncase 31:\r\nthis.$ = yy.Context[$$[$0].toLowerCase()] = yy.miew.within(yy.utils.checkArg(\"select\", $$[$0-2], true), Number($$[$0-4]));\r\nbreak;\r\ncase 32:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {material : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 35:\r\nthis.$ = yy.echo(yy.miew.view());\r\nbreak;\r\ncase 36: case 37:\r\nthis.$ = yy.miew.view($$[$0]);\r\nbreak;\r\ncase 38:\r\nthis.$ = yy.echo(yy.miew.changeUnit());\r\nbreak;\r\ncase 39:\r\nthis.$ = yy.echo(yy.miew.changeUnit($$[$0]));\r\nbreak;\r\ncase 40:\r\nthis.$ = yy.miew.dssp();\r\nbreak;\r\ncase 41:\r\nthis.$ = yy.miew.scale($$[$0]);\r\nbreak;\r\ncase 42:\r\n for (var i = 0, n = $$[$0].length; i < n; i++) {yy.miew.rotate($$[$0][i]['x'] * Math.PI / 180.0, $$[$0][i]['y'] * Math.PI / 180.0, $$[$0][i]['z'] * Math.PI / 180.0)} \r\nbreak;\r\ncase 43:\r\n for (var i = 0, n = $$[$0].length; i < n; i++) {yy.miew.translate($$[$0][i]['x'] || 0, $$[$0][i]['y'] || 0, $$[$0][i]['z'] || 0)} \r\nbreak;\r\ncase 44:\r\nthis.$ = yy.miew.center();\r\nbreak;\r\ncase 45:\r\nthis.$ = yy.miew.center($$[$0]);\r\nbreak;\r\ncase 48: case 49:\r\nthis.$ = yy.miew.addObject({type: 'line', params: [$$[$0-1], $$[$0]]}, true);\r\nbreak;\r\ncase 50: case 51:\r\nthis.$ = yy.miew.addObject({type: 'line', params: [$$[$0-2], $$[$0-1]], opts:$$[$0].toJSO(yy.utils, 'objects', 'line')}, true);\r\nbreak;\r\ncase 52:\r\nthis.$ = yy.echo(yy.utils.listObjs(yy.miew));\r\nbreak;\r\ncase 53:\r\nthis.$ = yy.miew.removeObject($$[$0]);\r\nbreak;\r\ncase 54:\r\nthis.$ = yy.echo(yy.miew.getURL({view: false, settings: false}));\r\nbreak;\r\ncase 55:\r\nthis.$ = yy.echo(yy.miew.getURL({view: false, settings: true}));\r\nbreak;\r\ncase 56:\r\nthis.$ = yy.echo(yy.miew.getURL({view: true, settings: false}));\r\nbreak;\r\ncase 57: case 58:\r\nthis.$ = yy.echo(yy.miew.getURL({view: true, settings: true}));\r\nbreak;\r\ncase 59:\r\nthis.$ = yy.miew.screenshotSave();\r\nbreak;\r\ncase 60:\r\nthis.$ = yy.miew.screenshotSave('', Number($$[$0]));\r\nbreak;\r\ncase 61:\r\nthis.$ = yy.miew.screenshotSave('', Number($$[$0-1]), Number($$[$0]));\r\nbreak;\r\ncase 62: case 63: case 64:\r\nthis.$ = yy.utils.load(yy.miew, $$[$0]); yy.representations.clear();\r\nbreak;\r\ncase 65:\r\nthis.$ = yy.echo(yy.representations.add(yy.miew.repAdd()));\r\nbreak;\r\ncase 66:\r\nthis.$ = yy.echo(yy.representations.add($$[$0], yy.miew.repAdd()));\r\nbreak;\r\ncase 67:\r\nthis.$ = yy.echo(yy.representations.add(yy.miew.repAdd($$[$0])));\r\nbreak;\r\ncase 68:\r\nthis.$ = yy.echo(yy.representations.add($$[$0-1], yy.miew.repAdd($$[$0])));\r\nbreak;\r\ncase 69:\r\nthis.$ = yy.miew.rep($$[$0]); yy.miew.repCurrent($$[$0]);\r\nbreak;\r\ncase 70:\r\nthis.$ = yy.miew.rep($$[$0-1], $$[$0]); yy.miew.repCurrent($$[$0-1]);\r\nbreak;\r\ncase 71:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {mode : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 72:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {mode : new Array(yy.utils.checkArg($$[$0-2].toLowerCase(), $$[$0-1].toUpperCase()), $$[$0].toJSO(yy.utils, $$[$0-2], $$[$0-1].toUpperCase()))});\r\nbreak;\r\ncase 73:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {colorer : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 74:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {colorer : new Array(yy.utils.checkArg($$[$0-2].toLowerCase(), $$[$0-1].toUpperCase()), $$[$0].toJSO(yy.utils, $$[$0-2], $$[$0-1].toUpperCase()))});\r\nbreak;\r\ncase 75:\r\nthis.$ = Number(yy.representations.get($$[$0]));\r\nbreak;\r\ncase 76: case 92:\r\nthis.$ = Number($$[$0]);\r\nbreak;\r\ncase 77:\r\nthis.$ = $$[$0];\r\nbreak;\r\ncase 78:\r\nthis.$ = yy._.assign($$[$0-1], $$[$0]);\r\nbreak;\r\ncase 79:\r\nthis.$ = yy._.assign($$[$0-2], $$[$0-1], $$[$0]);\r\nbreak;\r\ncase 80:\r\nthis.$ = yy._.assign($$[$0-3], $$[$0-2], $$[$0-1], $$[$0]);\r\nbreak;\r\ncase 81: case 82:\r\nthis.$ = yy.CreateObjectPair($$[$0].key, $$[$0].val);\r\nbreak;\r\ncase 83:\r\nthis.$ = yy.CreateObjectPair($$[$0-1].key, new Array($$[$0-1].val, $$[$0].toJSO(yy.utils, $$[$0-1].key, $$[$0-1].val)));\r\nbreak;\r\ncase 84: case 85:\r\nthis.$ = Object.create({'key': yy.keyRemap($$[$0-2]), 'val': yy.utils.checkArg($$[$0-2], $$[$0])});\r\nbreak;\r\ncase 86:\r\nthis.$ = [$$[$0]];\r\nbreak;\r\ncase 87:\r\nthis.$ = $$[$0-1].concat($$[$0]);\r\nbreak;\r\ncase 88:\r\nthis.$ = yy.CreateObjectPair($$[$0-1].toLowerCase(), Number($$[$0]));\r\nbreak;\r\ncase 89:\r\nthis.$ = new yy.ArgList($$[$0]);\r\nbreak;\r\ncase 90:\r\nthis.$ = $$[$0-1].append($$[$0]);\r\nbreak;\r\ncase 91:\r\nthis.$ = new yy.Arg($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 93:\r\nthis.$ = parseInt($$[$0]);\r\nbreak;\r\ncase 94:\r\nthis.$ = JSON.parse($$[$0]);\r\nbreak;\r\ncase 95: case 96:\r\nthis.$ = String($$[$0]);\r\nbreak;\r\ncase 157: case 158: case 161: case 162: case 163:\r\nthis.$ = $$[$0-2] + $$[$0-1] + $$[$0] //cause of could be color word in path;\r\nbreak;\r\ncase 166:\r\nthis.$ = $$[$0-2] = $$[$0-2] + $$[$0-1] + $$[$0];\r\nbreak;\r\n}\r\n},\r\ntable: [{3:1,4:2,5:[1,3],6:[1,4],7:[1,5],9:[1,6],11:[1,7],12:8,13:[1,9],15:[1,10],17:[1,11],18:[1,12],19:[1,13],20:[1,14],21:15,22:16,23:[1,17],25:[1,18],26:[1,19],27:[1,20],30:[1,21],33:[1,22],34:[1,23],37:[1,24],39:25,40:26,41:[1,27],43:[1,28],44:[1,29],45:[1,30],46:[1,31],48:[1,32],49:[1,33],50:34,51:35,52:[1,36],54:[1,37],55:[1,38],56:[1,44],58:[1,45],59:[1,39],62:[1,40],64:[1,41],65:[1,42],66:[1,43]},{1:[3]},{5:[1,46]},{1:[2,2]},{5:[2,3]},{5:[2,4],8:[1,47]},{5:[2,6],6:$V0,7:$V1,9:$V2,10:48,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,8]},{5:[2,9]},{6:$V0,7:$V1,9:$V2,10:106,13:$V3,14:[1,107],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{6:$V0,7:$V1,9:$V2,10:108,13:$V3,14:[1,109],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,14]},{5:[2,15]},{5:[2,16]},{5:[2,17],14:$VS,16:110,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,19]},{5:[2,20]},{24:116,35:$VX,38:$VY},{24:119,35:$VX,38:$VY},{24:120,35:$VX,38:$VY},{5:[2,25],24:121,28:[1,122],29:[1,123],35:$VX,38:$VY},{14:[1,124]},{14:[1,125]},{35:[1,126]},{38:[1,127]},{5:[2,33]},{5:[2,34]},{5:[2,35],14:[1,128],42:[1,129]},{5:[2,38],35:[1,130]},{5:[2,40]},{35:[1,131]},{47:132,73:133,74:$VZ},{47:135,73:133,74:$VZ},{5:[2,44],14:[1,136]},{5:[2,46]},{5:[2,47]},{6:$V0,7:$V1,9:$V2,10:138,13:$V3,14:[1,137],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,52]},{35:[1,139]},{14:[1,143],38:[1,141],60:140,61:[1,142]},{5:[2,65],38:[1,144],63:145,67:146,68:147,69:148,70:$V_,72:$V$},{24:151,35:$VX,38:$VY},{38:[1,152]},{38:[1,153]},{5:[2,54],29:[1,154],57:[1,155]},{5:[2,59],35:[1,156]},{1:[2,1]},{5:[2,5]},{5:[2,7],101:$V01},o($V11,[2,159]),o($V11,[2,160]),o($V21,[2,97]),o($V21,[2,98]),o($V11,[2,147]),o($V11,[2,148]),o($V11,[2,149]),o($V11,[2,150]),o($V11,[2,151]),o($V11,[2,152]),o($V11,[2,153]),o($V21,[2,101]),o($V21,[2,102]),o($V21,[2,103]),o($V21,[2,104]),o($V21,[2,105]),o($V21,[2,106]),o($V21,[2,107]),o($V21,[2,108]),o($V21,[2,109]),o($V21,[2,110]),o($V21,[2,111]),o($V21,[2,112]),o($V21,[2,113]),o($V21,[2,114]),o($V21,[2,115]),o($V21,[2,116]),o($V21,[2,117]),o($V21,[2,118]),o($V21,[2,119]),o($V21,[2,120]),o($V21,[2,121]),o($V21,[2,122]),o($V21,[2,123]),o($V21,[2,124]),o($V21,[2,125]),o($V21,[2,126]),o($V21,[2,127]),o($V21,[2,128]),o($V21,[2,129]),o($V21,[2,130]),o($V21,[2,131]),o($V21,[2,132]),o($V21,[2,133]),o($V21,[2,134]),o($V21,[2,135]),o($V21,[2,136]),o($V21,[2,137]),o($V21,[2,138]),o($V21,[2,139]),o($V21,[2,140]),o($V21,[2,141]),o($V21,[2,142]),o($V21,[2,143]),o($V21,[2,144]),o($V21,[2,145]),o($V21,[2,146]),{5:[2,10],101:$V01},{5:[2,11]},{14:$VS,16:158,35:$VT,38:$VU,77:$VV,78:$VW,101:$V01},{14:$VS,16:159,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,18]},o($V31,[2,92]),o($V31,[2,93]),o($V31,[2,94]),o($V31,[2,95]),o($V31,[2,96]),{5:[2,21]},o($V41,[2,75]),o($V41,[2,76]),{5:[2,22]},{5:[2,23]},{5:[2,24]},{5:[2,26]},{5:[2,27]},{5:[2,28],31:[1,160]},{5:[2,30]},{36:[1,161]},{5:[2,32]},{5:[2,36]},{5:[2,37]},{5:[2,39]},{5:[2,41]},{5:[2,42],73:162,74:$VZ},o($V51,[2,86]),{35:[1,163]},{5:[2,43],73:162,74:$VZ},{5:[2,45]},{14:[1,164]},{6:$V0,7:$V1,9:$V2,10:165,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR,101:$V01},{5:[2,53]},{5:[2,62]},{5:[2,63]},{5:[2,64]},{5:[2,164]},{5:[2,66],63:166,67:146,68:147,69:148,70:$V_,72:$V$},{5:[2,67]},{5:[2,77],67:167,68:147,69:148,70:$V_,72:$V$},o($V41,[2,81]),o($V41,[2,82],{80:52,53:168,75:169,76:170,79:171,6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN}),{71:[1,172]},{71:[1,173]},{5:[2,69],63:174,67:146,68:147,69:148,70:$V_,72:$V$},{5:[2,71],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:175,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,73],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:176,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,55],57:[1,177]},{5:[2,56],29:[1,178]},{5:[2,60],35:[1,179]},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,35:[1,181],37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:180,80:52,81:182,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,12]},{5:[2,13]},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,32:183,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:184,80:52,81:185,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{14:[1,186]},o($V51,[2,87]),o($V51,[2,88]),{5:[2,48],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:187,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,49],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:188,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,101:$V01},{5:[2,68]},{5:[2,78],67:189,68:147,69:148,70:$V_,72:$V$},o($V41,[2,83],{80:52,76:170,79:171,75:190,6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN}),o($V31,[2,89]),{71:[1,191],101:[1,192]},o($V61,[2,156]),{14:$VS,16:193,35:$VT,38:$VU,77:$VV,78:$VW},{14:$VS,16:194,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,70]},{5:[2,72],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,74],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,57]},{5:[2,58]},{5:[2,61]},o($V11,[2,161]),o($V11,[2,162]),o($V11,[2,163]),{5:[2,29]},{5:[2,99]},{5:[2,100]},{31:[1,195]},{5:[2,50],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,51],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,79],67:196,68:147,69:148,70:$V_,72:$V$},o($V31,[2,90]),{14:$VS,16:197,35:$VT,38:$VU,77:$VV,78:$VW},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,35:[1,199],37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,79:198,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},o($V41,[2,84]),o($V31,[2,85]),{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,32:200,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:184,80:52,81:185,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,80]},o($V31,[2,91]),o($V61,[2,157]),o($V61,[2,158]),{5:[2,31]}],\r\ndefaultActions: {3:[2,2],4:[2,3],7:[2,8],8:[2,9],11:[2,14],12:[2,15],13:[2,16],15:[2,19],16:[2,20],25:[2,33],26:[2,34],29:[2,40],34:[2,46],35:[2,47],37:[2,52],46:[2,1],47:[2,5],107:[2,11],110:[2,18],116:[2,21],119:[2,22],120:[2,23],121:[2,24],122:[2,26],123:[2,27],125:[2,30],127:[2,32],128:[2,36],129:[2,37],130:[2,39],131:[2,41],136:[2,45],139:[2,53],140:[2,62],141:[2,63],142:[2,64],143:[2,164],145:[2,67],158:[2,12],159:[2,13],166:[2,68],174:[2,70],177:[2,57],178:[2,58],179:[2,61],183:[2,29],184:[2,99],185:[2,100],196:[2,80],200:[2,31]},\r\nparseError: function parseError (str, hash) {\r\n if (hash.recoverable) {\r\n this.trace(str);\r\n } else {\r\n var error = new Error(str);\r\n error.hash = hash;\r\n throw error;\r\n }\r\n},\r\nparse: function parse(input) {\r\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\r\n var args = lstack.slice.call(arguments, 1);\r\n var lexer = Object.create(this.lexer);\r\n var sharedState = { yy: {} };\r\n for (var k in this.yy) {\r\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\r\n sharedState.yy[k] = this.yy[k];\r\n }\r\n }\r\n lexer.setInput(input, sharedState.yy);\r\n sharedState.yy.lexer = lexer;\r\n sharedState.yy.parser = this;\r\n if (typeof lexer.yylloc == 'undefined') {\r\n lexer.yylloc = {};\r\n }\r\n var yyloc = lexer.yylloc;\r\n lstack.push(yyloc);\r\n var ranges = lexer.options && lexer.options.ranges;\r\n if (typeof sharedState.yy.parseError === 'function') {\r\n this.parseError = sharedState.yy.parseError;\r\n } else {\r\n this.parseError = Object.getPrototypeOf(this).parseError;\r\n }\r\n function popStack(n) {\r\n stack.length = stack.length - 2 * n;\r\n vstack.length = vstack.length - n;\r\n lstack.length = lstack.length - n;\r\n }\r\n function lex() {\r\n var token;\r\n token = tstack.pop() || lexer.lex() || EOF;\r\n if (typeof token !== 'number') {\r\n if (token instanceof Array) {\r\n tstack = token;\r\n token = tstack.pop();\r\n }\r\n token = self.symbols_[token] || token;\r\n }\r\n return token;\r\n }\r\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\r\n while (true) {\r\n state = stack[stack.length - 1];\r\n if (this.defaultActions[state]) {\r\n action = this.defaultActions[state];\r\n } else {\r\n if (symbol === null || typeof symbol == 'undefined') {\r\n symbol = lex();\r\n }\r\n action = table[state] && table[state][symbol];\r\n }\r\n if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n var errStr = '';\r\n expected = [];\r\n for (p in table[state]) {\r\n if (this.terminals_[p] && p > TERROR) {\r\n expected.push('\\'' + this.terminals_[p] + '\\'');\r\n }\r\n }\r\n if (lexer.showPosition) {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\r\n } else {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\r\n }\r\n this.parseError(errStr, {\r\n text: lexer.match,\r\n token: this.terminals_[symbol] || symbol,\r\n line: lexer.yylineno,\r\n loc: yyloc,\r\n expected: expected\r\n });\r\n }\r\n if (action[0] instanceof Array && action.length > 1) {\r\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\r\n }\r\n switch (action[0]) {\r\n case 1:\r\n stack.push(symbol);\r\n vstack.push(lexer.yytext);\r\n lstack.push(lexer.yylloc);\r\n stack.push(action[1]);\r\n symbol = null;\r\n if (!preErrorSymbol) {\r\n yyleng = lexer.yyleng;\r\n yytext = lexer.yytext;\r\n yylineno = lexer.yylineno;\r\n yyloc = lexer.yylloc;\r\n if (recovering > 0) {\r\n recovering--;\r\n }\r\n } else {\r\n symbol = preErrorSymbol;\r\n preErrorSymbol = null;\r\n }\r\n break;\r\n case 2:\r\n len = this.productions_[action[1]][1];\r\n yyval.$ = vstack[vstack.length - len];\r\n yyval._$ = {\r\n first_line: lstack[lstack.length - (len || 1)].first_line,\r\n last_line: lstack[lstack.length - 1].last_line,\r\n first_column: lstack[lstack.length - (len || 1)].first_column,\r\n last_column: lstack[lstack.length - 1].last_column\r\n };\r\n if (ranges) {\r\n yyval._$.range = [\r\n lstack[lstack.length - (len || 1)].range[0],\r\n lstack[lstack.length - 1].range[1]\r\n ];\r\n }\r\n r = this.performAction.apply(yyval, [\r\n yytext,\r\n yyleng,\r\n yylineno,\r\n sharedState.yy,\r\n action[1],\r\n vstack,\r\n lstack\r\n ].concat(args));\r\n if (typeof r !== 'undefined') {\r\n return r;\r\n }\r\n if (len) {\r\n stack = stack.slice(0, -1 * len * 2);\r\n vstack = vstack.slice(0, -1 * len);\r\n lstack = lstack.slice(0, -1 * len);\r\n }\r\n stack.push(this.productions_[action[1]][0]);\r\n vstack.push(yyval.$);\r\n lstack.push(yyval._$);\r\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\r\n stack.push(newState);\r\n break;\r\n case 3:\r\n return true;\r\n }\r\n }\r\n return true;\r\n}};\r\n\r\n\r\n/* generated by jison-lex 0.3.4 */\r\nvar lexer = (function(){\r\nvar lexer = ({\r\n\r\nEOF:1,\r\n\r\nparseError:function parseError(str, hash) {\r\n if (this.yy.parser) {\r\n this.yy.parser.parseError(str, hash);\r\n } else {\r\n throw new Error(str);\r\n }\r\n },\r\n\r\n// resets the lexer, sets new input\r\nsetInput:function (input, yy) {\r\n this.yy = yy || this.yy || {};\r\n this._input = input;\r\n this._more = this._backtrack = this.done = false;\r\n this.yylineno = this.yyleng = 0;\r\n this.yytext = this.matched = this.match = '';\r\n this.conditionStack = ['INITIAL'];\r\n this.yylloc = {\r\n first_line: 1,\r\n first_column: 0,\r\n last_line: 1,\r\n last_column: 0\r\n };\r\n if (this.options.ranges) {\r\n this.yylloc.range = [0,0];\r\n }\r\n this.offset = 0;\r\n return this;\r\n },\r\n\r\n// consumes and returns one char from the input\r\ninput:function () {\r\n var ch = this._input[0];\r\n this.yytext += ch;\r\n this.yyleng++;\r\n this.offset++;\r\n this.match += ch;\r\n this.matched += ch;\r\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno++;\r\n this.yylloc.last_line++;\r\n } else {\r\n this.yylloc.last_column++;\r\n }\r\n if (this.options.ranges) {\r\n this.yylloc.range[1]++;\r\n }\r\n\r\n this._input = this._input.slice(1);\r\n return ch;\r\n },\r\n\r\n// unshifts one char (or a string) into the input\r\nunput:function (ch) {\r\n var len = ch.length;\r\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\r\n\r\n this._input = ch + this._input;\r\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\r\n //this.yyleng -= len;\r\n this.offset -= len;\r\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\r\n this.match = this.match.substr(0, this.match.length - 1);\r\n this.matched = this.matched.substr(0, this.matched.length - 1);\r\n\r\n if (lines.length - 1) {\r\n this.yylineno -= lines.length - 1;\r\n }\r\n var r = this.yylloc.range;\r\n\r\n this.yylloc = {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.first_column,\r\n last_column: lines ?\r\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\r\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\r\n this.yylloc.first_column - len\r\n };\r\n\r\n if (this.options.ranges) {\r\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\r\n }\r\n this.yyleng = this.yytext.length;\r\n return this;\r\n },\r\n\r\n// When called from action, caches matched text and appends it on next action\r\nmore:function () {\r\n this._more = true;\r\n return this;\r\n },\r\n\r\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\r\nreject:function () {\r\n if (this.options.backtrack_lexer) {\r\n this._backtrack = true;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n\r\n }\r\n return this;\r\n },\r\n\r\n// retain first n characters of the match\r\nless:function (n) {\r\n this.unput(this.match.slice(n));\r\n },\r\n\r\n// displays already matched input, i.e. for error messages\r\npastInput:function () {\r\n var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays upcoming input, i.e. for error messages\r\nupcomingInput:function () {\r\n var next = this.match;\r\n if (next.length < 20) {\r\n next += this._input.substr(0, 20-next.length);\r\n }\r\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays the character position where the lexing error occurred, i.e. for error messages\r\nshowPosition:function () {\r\n var pre = this.pastInput();\r\n var c = new Array(pre.length + 1).join(\"-\");\r\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\r\n },\r\n\r\n// test the lexed token: return FALSE when not a match, otherwise return token\r\ntest_match:function(match, indexed_rule) {\r\n var token,\r\n lines,\r\n backup;\r\n\r\n if (this.options.backtrack_lexer) {\r\n // save context\r\n backup = {\r\n yylineno: this.yylineno,\r\n yylloc: {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.last_line,\r\n first_column: this.yylloc.first_column,\r\n last_column: this.yylloc.last_column\r\n },\r\n yytext: this.yytext,\r\n match: this.match,\r\n matches: this.matches,\r\n matched: this.matched,\r\n yyleng: this.yyleng,\r\n offset: this.offset,\r\n _more: this._more,\r\n _input: this._input,\r\n yy: this.yy,\r\n conditionStack: this.conditionStack.slice(0),\r\n done: this.done\r\n };\r\n if (this.options.ranges) {\r\n backup.yylloc.range = this.yylloc.range.slice(0);\r\n }\r\n }\r\n\r\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno += lines.length;\r\n }\r\n this.yylloc = {\r\n first_line: this.yylloc.last_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.last_column,\r\n last_column: lines ?\r\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\r\n this.yylloc.last_column + match[0].length\r\n };\r\n this.yytext += match[0];\r\n this.match += match[0];\r\n this.matches = match;\r\n this.yyleng = this.yytext.length;\r\n if (this.options.ranges) {\r\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\r\n }\r\n this._more = false;\r\n this._backtrack = false;\r\n this._input = this._input.slice(match[0].length);\r\n this.matched += match[0];\r\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\r\n if (this.done && this._input) {\r\n this.done = false;\r\n }\r\n if (token) {\r\n return token;\r\n } else if (this._backtrack) {\r\n // recover context\r\n for (var k in backup) {\r\n this[k] = backup[k];\r\n }\r\n return false; // rule action called reject() implying the next rule should be tested instead.\r\n }\r\n return false;\r\n },\r\n\r\n// return next match in input\r\nnext:function () {\r\n if (this.done) {\r\n return this.EOF;\r\n }\r\n if (!this._input) {\r\n this.done = true;\r\n }\r\n\r\n var token,\r\n match,\r\n tempMatch,\r\n index;\r\n if (!this._more) {\r\n this.yytext = '';\r\n this.match = '';\r\n }\r\n var rules = this._currentRules();\r\n for (var i = 0; i < rules.length; i++) {\r\n tempMatch = this._input.match(this.rules[rules[i]]);\r\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n match = tempMatch;\r\n index = i;\r\n if (this.options.backtrack_lexer) {\r\n token = this.test_match(tempMatch, rules[i]);\r\n if (token !== false) {\r\n return token;\r\n } else if (this._backtrack) {\r\n match = false;\r\n continue; // rule action called reject() implying a rule MISmatch.\r\n } else {\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n } else if (!this.options.flex) {\r\n break;\r\n }\r\n }\r\n }\r\n if (match) {\r\n token = this.test_match(match, rules[index]);\r\n if (token !== false) {\r\n return token;\r\n }\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n if (this._input === \"\") {\r\n return this.EOF;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n }\r\n },\r\n\r\n// return next match that has a token\r\nlex:function lex () {\r\n var r = this.next();\r\n if (r) {\r\n return r;\r\n } else {\r\n return this.lex();\r\n }\r\n },\r\n\r\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\r\nbegin:function begin (condition) {\r\n this.conditionStack.push(condition);\r\n },\r\n\r\n// pop the previously active lexer condition state off the condition stack\r\npopState:function popState () {\r\n var n = this.conditionStack.length - 1;\r\n if (n > 0) {\r\n return this.conditionStack.pop();\r\n } else {\r\n return this.conditionStack[0];\r\n }\r\n },\r\n\r\n// produce the lexer rule set which is active for the currently active lexer condition state\r\n_currentRules:function _currentRules () {\r\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\r\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\r\n } else {\r\n return this.conditions[\"INITIAL\"].rules;\r\n }\r\n },\r\n\r\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\r\ntopState:function topState (n) {\r\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\r\n if (n >= 0) {\r\n return this.conditionStack[n];\r\n } else {\r\n return \"INITIAL\";\r\n }\r\n },\r\n\r\n// alias for begin(condition)\r\npushState:function pushState (condition) {\r\n this.begin(condition);\r\n },\r\n\r\n// return the number of states currently on the stack\r\nstateStackSize:function stateStackSize() {\r\n return this.conditionStack.length;\r\n },\r\noptions: {\"case-insensitive\":true},\r\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\nvar YYSTATE=YY_START;\r\nswitch($avoiding_name_collisions) {\r\ncase 0:/* ignore whitespace */\r\nbreak;\r\ncase 1:return '';\r\nbreak;\r\ncase 2:return '';\r\nbreak;\r\ncase 3:return 42;\r\nbreak;\r\ncase 4:return 35;\r\nbreak;\r\ncase 5:return 77;\r\nbreak;\r\ncase 6:return 78;\r\nbreak;\r\ncase 7:return 78;\r\nbreak;\r\ncase 8:return 8;\r\nbreak;\r\ncase 9:return 6;\r\nbreak;\r\ncase 10:return 82;\r\nbreak;\r\ncase 11:return 7;\r\nbreak;\r\ncase 12:return 9;\r\nbreak;\r\ncase 13:return 59;\r\nbreak;\r\ncase 14:return 13\r\nbreak;\r\ncase 15:return 15\r\nbreak;\r\ncase 16:return 17\r\nbreak;\r\ncase 17:return 18\r\nbreak;\r\ncase 18:return 19\r\nbreak;\r\ncase 19:return 20\r\nbreak;\r\ncase 20:return 11\r\nbreak;\r\ncase 21:return 62\r\nbreak;\r\ncase 22:return 64\r\nbreak;\r\ncase 23:return 23\r\nbreak;\r\ncase 24:return 25\r\nbreak;\r\ncase 25:return 26\r\nbreak;\r\ncase 26:return 27\r\nbreak;\r\ncase 27:return 30\r\nbreak;\r\ncase 28:return 34\r\nbreak;\r\ncase 29:return 33\r\nbreak;\r\ncase 30:return 65\r\nbreak;\r\ncase 31:return 66\r\nbreak;\r\ncase 32:return 37\r\nbreak;\r\ncase 33:return 41\r\nbreak;\r\ncase 34:return 43\r\nbreak;\r\ncase 35:return 52\r\nbreak;\r\ncase 36:return 54\r\nbreak;\r\ncase 37:return 55\r\nbreak;\r\ncase 38:return 46\r\nbreak;\r\ncase 39:return 48\r\nbreak;\r\ncase 40:return 45\r\nbreak;\r\ncase 41:return 49\r\nbreak;\r\ncase 42:return 56\r\nbreak;\r\ncase 43:return 58;\r\nbreak;\r\ncase 44:return 44\r\nbreak;\r\ncase 45:return 83\r\nbreak;\r\ncase 46:return 84\r\nbreak;\r\ncase 47:return 85\r\nbreak;\r\ncase 48:return 86\r\nbreak;\r\ncase 49:return 87\r\nbreak;\r\ncase 50:return 88\r\nbreak;\r\ncase 51:return 89\r\nbreak;\r\ncase 52:return 90\r\nbreak;\r\ncase 53:return 91\r\nbreak;\r\ncase 54:return 92\r\nbreak;\r\ncase 55:return 93\r\nbreak;\r\ncase 56:return 94\r\nbreak;\r\ncase 57:return 95\r\nbreak;\r\ncase 58:return 70\r\nbreak;\r\ncase 59:return 70\r\nbreak;\r\ncase 60:return 72\r\nbreak;\r\ncase 61:return 72\r\nbreak;\r\ncase 62:return 74\r\nbreak;\r\ncase 63:return 74\r\nbreak;\r\ncase 64:return 74\r\nbreak;\r\ncase 65:return 31\r\nbreak;\r\ncase 66:return 36\r\nbreak;\r\ncase 67:return 96\r\nbreak;\r\ncase 68:return 97\r\nbreak;\r\ncase 69:return 98\r\nbreak;\r\ncase 70:return 99\r\nbreak;\r\ncase 71:yy_.yytext = yy.utils.unquoteString(yy_.yytext); return 14;\r\nbreak;\r\ncase 72:return 38;\r\nbreak;\r\ncase 73:return 5;\r\nbreak;\r\ncase 74:return 101;\r\nbreak;\r\ncase 75:return 103;\r\nbreak;\r\ncase 76:return '\\\\';\r\nbreak;\r\ncase 77:return 28\r\nbreak;\r\ncase 78:return 61\r\nbreak;\r\ncase 79:return 29\r\nbreak;\r\ncase 80:return 57\r\nbreak;\r\ncase 81:return 71\r\nbreak;\r\n}\r\n},\r\nrules: [/^(?:\\s+)/i,/^(?:[#].*)/i,/^(?:\\/\\/.*)/i,/^(?:([_A-Z0-9\\/\\+]+==))/i,/^(?:-?[0-9]+(\\.[0-9]+)?\\b)/i,/^(?:0[xX][0-9A-F]+\\b)/i,/^(?:false\\b)/i,/^(?:true\\b)/i,/^(?:all\\b)/i,/^(?:reset\\b)/i,/^(?:clear\\b)/i,/^(?:build\\b)/i,/^(?:help\\b)/i,/^(?:load\\b)/i,/^(?:get\\b)/i,/^(?:set\\b)/i,/^(?:set_save\\b)/i,/^(?:set_restore\\b)/i,/^(?:set_reset\\b)/i,/^(?:preset\\b)/i,/^(?:motm\\b)/i,/^(?:add\\b)/i,/^(?:rep\\b)/i,/^(?:remove\\b)/i,/^(?:hide\\b)/i,/^(?:show\\b)/i,/^(?:list\\b)/i,/^(?:select\\b)/i,/^(?:within\\b)/i,/^(?:selector\\b)/i,/^(?:mode\\b)/i,/^(?:color\\b)/i,/^(?:material\\b)/i,/^(?:view\\b)/i,/^(?:unit\\b)/i,/^(?:line\\b)/i,/^(?:listobj\\b)/i,/^(?:removeobj\\b)/i,/^(?:rotate\\b)/i,/^(?:translate\\b)/i,/^(?:scale\\b)/i,/^(?:center\\b)/i,/^(?:url\\b)/i,/^(?:screenshot\\b)/i,/^(?:dssp\\b)/i,/^(?:file_list\\b)/i,/^(?:file_register\\b)/i,/^(?:file_delete\\b)/i,/^(?:preset_add\\b)/i,/^(?:preset_delete\\b)/i,/^(?:preset_update\\b)/i,/^(?:preset_rename\\b)/i,/^(?:preset_open\\b)/i,/^(?:create_scenario\\b)/i,/^(?:reset_scenario\\b)/i,/^(?:delete_scenario\\b)/i,/^(?:add_scenario_item\\b)/i,/^(?:list_scenario\\b)/i,/^(?:s\\b)/i,/^(?:mt\\b)/i,/^(?:m\\b)/i,/^(?:c\\b)/i,/^(?:x\\b)/i,/^(?:y\\b)/i,/^(?:z\\b)/i,/^(?:as\\b)/i,/^(?:of\\b)/i,/^(?:pdb\\b)/i,/^(?:delay\\b)/i,/^(?:prst\\b)/i,/^(?:desc\\b)/i,/^(?:((?:\"(?:\\\\.|[^\\\\\"])*\"|'(?:\\\\.|[^\\\\'])*')))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:\\.)/i,/^(?:\\/)/i,/^(?:\\\\)/i,/^(?:-e\\b)/i,/^(?:-f\\b)/i,/^(?:-s\\b)/i,/^(?:-v\\b)/i,/^(?:=)/i],\r\nconditions: {\"INITIAL\":{\"rules\":[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,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,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81],\"inclusive\":true}}\r\n});\r\nreturn lexer;\r\n})();\r\nparser.lexer = lexer;\r\nfunction Parser () {\r\n this.yy = {};\r\n}\r\nParser.prototype = parser;parser.Parser = Parser;\r\nreturn new Parser;\r\n})();\r\n\r\nmodule.exports = {parser: parser};\r\n","/* eslint-disable */\r\n// DO NOT EDIT! Automatically generated from .jison\r\n/* parser generated by jison 0.4.18 */\r\n/*\r\n Returns a Parser object of the following structure:\r\n\r\n Parser: {\r\n yy: {}\r\n }\r\n\r\n Parser.prototype: {\r\n yy: {},\r\n trace: function(),\r\n symbols_: {associative list: name ==> number},\r\n terminals_: {associative list: number ==> name},\r\n productions_: [...],\r\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\r\n table: [...],\r\n defaultActions: {...},\r\n parseError: function(str, hash),\r\n parse: function(input),\r\n\r\n lexer: {\r\n EOF: 1,\r\n parseError: function(str, hash),\r\n setInput: function(input),\r\n input: function(),\r\n unput: function(str),\r\n more: function(),\r\n less: function(n),\r\n pastInput: function(),\r\n upcomingInput: function(),\r\n showPosition: function(),\r\n test_match: function(regex_match_array, rule_index),\r\n next: function(),\r\n lex: function(),\r\n begin: function(condition),\r\n popState: function(),\r\n _currentRules: function(),\r\n topState: function(),\r\n pushState: function(condition),\r\n\r\n options: {\r\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\r\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\r\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\r\n },\r\n\r\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\r\n rules: [...],\r\n conditions: {associative list: name ==> set},\r\n }\r\n }\r\n\r\n\r\n token location info (@$, _$, etc.): {\r\n first_line: n,\r\n last_line: n,\r\n first_column: n,\r\n last_column: n,\r\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\r\n }\r\n\r\n\r\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\r\n text: (matched text)\r\n token: (the produced terminal token, if any)\r\n line: (yylineno)\r\n }\r\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\r\n loc: (yylloc)\r\n expected: (string describing the set of expected tokens)\r\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\r\n }\r\n*/\r\nvar parser = (function(){\r\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,5],$V2=[1,6],$V3=[1,7],$V4=[1,8],$V5=[1,9],$V6=[1,11],$V7=[1,12],$V8=[5,7,8,11],$V9=[1,17],$Va=[1,22],$Vb=[1,20],$Vc=[1,21],$Vd=[5,7,8,11,19];\r\nvar parser = {trace: function trace() { },\r\nyy: {},\r\nsymbols_: {\"error\":2,\"Program\":3,\"Expression\":4,\"EOF\":5,\"Selector\":6,\"OR\":7,\"AND\":8,\"NOT\":9,\"(\":10,\")\":11,\"SELECTOR\":12,\"NAMED_SELECTOR\":13,\"SELECTOR_RANGED\":14,\"RangeList\":15,\"SELECTOR_NAMED\":16,\"NameList\":17,\"Range\":18,\",\":19,\"NUMBER\":20,\":\":21,\"Name\":22,\"IDENTIFIER\":23,\"STRING\":24,\"$accept\":0,\"$end\":1},\r\nterminals_: {2:\"error\",5:\"EOF\",7:\"OR\",8:\"AND\",9:\"NOT\",10:\"(\",11:\")\",12:\"SELECTOR\",13:\"NAMED_SELECTOR\",14:\"SELECTOR_RANGED\",16:\"SELECTOR_NAMED\",19:\",\",20:\"NUMBER\",21:\":\",23:\"IDENTIFIER\",24:\"STRING\"},\r\nproductions_: [0,[3,2],[4,1],[4,3],[4,3],[4,2],[4,3],[6,1],[6,1],[6,2],[6,2],[15,1],[15,3],[18,1],[18,3],[17,1],[17,3],[22,1],[22,1],[22,1]],\r\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\r\n/* this == yyval */\r\n\r\nvar $0 = $$.length - 1;\r\nswitch (yystate) {\r\ncase 1:\r\n return $$[$0-1]; \r\nbreak;\r\ncase 3:\r\nthis.$ = yy.keyword('or')($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 4:\r\nthis.$ = yy.keyword('and')($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 5:\r\nthis.$ = yy.keyword('not')($$[$0]);\r\nbreak;\r\ncase 6:\r\nthis.$ = $$[$0-1];\r\nbreak;\r\ncase 7:\r\nthis.$ = yy.keyword($$[$0])();\r\nbreak;\r\ncase 8:\r\nthis.$ = yy.GetSelector($$[$0].toLowerCase().slice(1, $$[$0].length));\r\nbreak;\r\ncase 9: case 10:\r\nthis.$ = yy.keyword($$[$0-1])($$[$0]);\r\nbreak;\r\ncase 11:\r\nthis.$ = new yy.RangeList($$[$0]);\r\nbreak;\r\ncase 12: case 16:\r\nthis.$ = $$[$0-2].append($$[$0]);\r\nbreak;\r\ncase 13:\r\nthis.$ = new yy.Range(Number($$[$0]));\r\nbreak;\r\ncase 14:\r\nthis.$ = new yy.Range(Number($$[$0-2]), Number($$[$0]));\r\nbreak;\r\ncase 15:\r\nthis.$ = new yy.ValueList($$[$0]);\r\nbreak;\r\n}\r\n},\r\ntable: [{3:1,4:2,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{1:[3]},{5:[1,10],7:$V6,8:$V7},o($V8,[2,2]),{4:13,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{4:14,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},o($V8,[2,7]),o($V8,[2,8]),{15:15,18:16,20:$V9},{17:18,20:$Va,22:19,23:$Vb,24:$Vc},{1:[2,1]},{4:23,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{4:24,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},o($V8,[2,5]),{7:$V6,8:$V7,11:[1,25]},o($V8,[2,9],{19:[1,26]}),o($Vd,[2,11]),o($Vd,[2,13],{21:[1,27]}),o($V8,[2,10],{19:[1,28]}),o($Vd,[2,15]),o($Vd,[2,17]),o($Vd,[2,18]),o($Vd,[2,19]),o([5,7,11],[2,3],{8:$V7}),o($V8,[2,4]),o($V8,[2,6]),{18:29,20:$V9},{20:[1,30]},{20:$Va,22:31,23:$Vb,24:$Vc},o($Vd,[2,12]),o($Vd,[2,14]),o($Vd,[2,16])],\r\ndefaultActions: {10:[2,1]},\r\nparseError: function parseError(str, hash) {\r\n if (hash.recoverable) {\r\n this.trace(str);\r\n } else {\r\n var error = new Error(str);\r\n error.hash = hash;\r\n throw error;\r\n }\r\n},\r\nparse: function parse(input) {\r\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\r\n var args = lstack.slice.call(arguments, 1);\r\n var lexer = Object.create(this.lexer);\r\n var sharedState = { yy: {} };\r\n for (var k in this.yy) {\r\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\r\n sharedState.yy[k] = this.yy[k];\r\n }\r\n }\r\n lexer.setInput(input, sharedState.yy);\r\n sharedState.yy.lexer = lexer;\r\n sharedState.yy.parser = this;\r\n if (typeof lexer.yylloc == 'undefined') {\r\n lexer.yylloc = {};\r\n }\r\n var yyloc = lexer.yylloc;\r\n lstack.push(yyloc);\r\n var ranges = lexer.options && lexer.options.ranges;\r\n if (typeof sharedState.yy.parseError === 'function') {\r\n this.parseError = sharedState.yy.parseError;\r\n } else {\r\n this.parseError = Object.getPrototypeOf(this).parseError;\r\n }\r\n function popStack(n) {\r\n stack.length = stack.length - 2 * n;\r\n vstack.length = vstack.length - n;\r\n lstack.length = lstack.length - n;\r\n }\r\n function lex() {\r\n var token;\r\n token = tstack.pop() || lexer.lex() || EOF;\r\n if (typeof token !== 'number') {\r\n if (token instanceof Array) {\r\n tstack = token;\r\n token = tstack.pop();\r\n }\r\n token = self.symbols_[token] || token;\r\n }\r\n return token;\r\n }\r\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\r\n while (true) {\r\n state = stack[stack.length - 1];\r\n if (this.defaultActions[state]) {\r\n action = this.defaultActions[state];\r\n } else {\r\n if (symbol === null || typeof symbol == 'undefined') {\r\n symbol = lex();\r\n }\r\n action = table[state] && table[state][symbol];\r\n }\r\n if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n var errStr = '';\r\n expected = [];\r\n for (p in table[state]) {\r\n if (this.terminals_[p] && p > TERROR) {\r\n expected.push('\\'' + this.terminals_[p] + '\\'');\r\n }\r\n }\r\n if (lexer.showPosition) {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\r\n } else {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\r\n }\r\n this.parseError(errStr, {\r\n text: lexer.match,\r\n token: this.terminals_[symbol] || symbol,\r\n line: lexer.yylineno,\r\n loc: yyloc,\r\n expected: expected\r\n });\r\n }\r\n if (action[0] instanceof Array && action.length > 1) {\r\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\r\n }\r\n switch (action[0]) {\r\n case 1:\r\n stack.push(symbol);\r\n vstack.push(lexer.yytext);\r\n lstack.push(lexer.yylloc);\r\n stack.push(action[1]);\r\n symbol = null;\r\n if (!preErrorSymbol) {\r\n yyleng = lexer.yyleng;\r\n yytext = lexer.yytext;\r\n yylineno = lexer.yylineno;\r\n yyloc = lexer.yylloc;\r\n if (recovering > 0) {\r\n recovering--;\r\n }\r\n } else {\r\n symbol = preErrorSymbol;\r\n preErrorSymbol = null;\r\n }\r\n break;\r\n case 2:\r\n len = this.productions_[action[1]][1];\r\n yyval.$ = vstack[vstack.length - len];\r\n yyval._$ = {\r\n first_line: lstack[lstack.length - (len || 1)].first_line,\r\n last_line: lstack[lstack.length - 1].last_line,\r\n first_column: lstack[lstack.length - (len || 1)].first_column,\r\n last_column: lstack[lstack.length - 1].last_column\r\n };\r\n if (ranges) {\r\n yyval._$.range = [\r\n lstack[lstack.length - (len || 1)].range[0],\r\n lstack[lstack.length - 1].range[1]\r\n ];\r\n }\r\n r = this.performAction.apply(yyval, [\r\n yytext,\r\n yyleng,\r\n yylineno,\r\n sharedState.yy,\r\n action[1],\r\n vstack,\r\n lstack\r\n ].concat(args));\r\n if (typeof r !== 'undefined') {\r\n return r;\r\n }\r\n if (len) {\r\n stack = stack.slice(0, -1 * len * 2);\r\n vstack = vstack.slice(0, -1 * len);\r\n lstack = lstack.slice(0, -1 * len);\r\n }\r\n stack.push(this.productions_[action[1]][0]);\r\n vstack.push(yyval.$);\r\n lstack.push(yyval._$);\r\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\r\n stack.push(newState);\r\n break;\r\n case 3:\r\n return true;\r\n }\r\n }\r\n return true;\r\n}};\r\n\r\n\r\n/* generated by jison-lex 0.3.4 */\r\nvar lexer = (function(){\r\nvar lexer = ({\r\n\r\nEOF:1,\r\n\r\nparseError:function parseError(str, hash) {\r\n if (this.yy.parser) {\r\n this.yy.parser.parseError(str, hash);\r\n } else {\r\n throw new Error(str);\r\n }\r\n },\r\n\r\n// resets the lexer, sets new input\r\nsetInput:function (input, yy) {\r\n this.yy = yy || this.yy || {};\r\n this._input = input;\r\n this._more = this._backtrack = this.done = false;\r\n this.yylineno = this.yyleng = 0;\r\n this.yytext = this.matched = this.match = '';\r\n this.conditionStack = ['INITIAL'];\r\n this.yylloc = {\r\n first_line: 1,\r\n first_column: 0,\r\n last_line: 1,\r\n last_column: 0\r\n };\r\n if (this.options.ranges) {\r\n this.yylloc.range = [0,0];\r\n }\r\n this.offset = 0;\r\n return this;\r\n },\r\n\r\n// consumes and returns one char from the input\r\ninput:function () {\r\n var ch = this._input[0];\r\n this.yytext += ch;\r\n this.yyleng++;\r\n this.offset++;\r\n this.match += ch;\r\n this.matched += ch;\r\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno++;\r\n this.yylloc.last_line++;\r\n } else {\r\n this.yylloc.last_column++;\r\n }\r\n if (this.options.ranges) {\r\n this.yylloc.range[1]++;\r\n }\r\n\r\n this._input = this._input.slice(1);\r\n return ch;\r\n },\r\n\r\n// unshifts one char (or a string) into the input\r\nunput:function (ch) {\r\n var len = ch.length;\r\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\r\n\r\n this._input = ch + this._input;\r\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\r\n //this.yyleng -= len;\r\n this.offset -= len;\r\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\r\n this.match = this.match.substr(0, this.match.length - 1);\r\n this.matched = this.matched.substr(0, this.matched.length - 1);\r\n\r\n if (lines.length - 1) {\r\n this.yylineno -= lines.length - 1;\r\n }\r\n var r = this.yylloc.range;\r\n\r\n this.yylloc = {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.first_column,\r\n last_column: lines ?\r\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\r\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\r\n this.yylloc.first_column - len\r\n };\r\n\r\n if (this.options.ranges) {\r\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\r\n }\r\n this.yyleng = this.yytext.length;\r\n return this;\r\n },\r\n\r\n// When called from action, caches matched text and appends it on next action\r\nmore:function () {\r\n this._more = true;\r\n return this;\r\n },\r\n\r\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\r\nreject:function () {\r\n if (this.options.backtrack_lexer) {\r\n this._backtrack = true;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n\r\n }\r\n return this;\r\n },\r\n\r\n// retain first n characters of the match\r\nless:function (n) {\r\n this.unput(this.match.slice(n));\r\n },\r\n\r\n// displays already matched input, i.e. for error messages\r\npastInput:function () {\r\n var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays upcoming input, i.e. for error messages\r\nupcomingInput:function () {\r\n var next = this.match;\r\n if (next.length < 20) {\r\n next += this._input.substr(0, 20-next.length);\r\n }\r\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays the character position where the lexing error occurred, i.e. for error messages\r\nshowPosition:function () {\r\n var pre = this.pastInput();\r\n var c = new Array(pre.length + 1).join(\"-\");\r\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\r\n },\r\n\r\n// test the lexed token: return FALSE when not a match, otherwise return token\r\ntest_match:function (match, indexed_rule) {\r\n var token,\r\n lines,\r\n backup;\r\n\r\n if (this.options.backtrack_lexer) {\r\n // save context\r\n backup = {\r\n yylineno: this.yylineno,\r\n yylloc: {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.last_line,\r\n first_column: this.yylloc.first_column,\r\n last_column: this.yylloc.last_column\r\n },\r\n yytext: this.yytext,\r\n match: this.match,\r\n matches: this.matches,\r\n matched: this.matched,\r\n yyleng: this.yyleng,\r\n offset: this.offset,\r\n _more: this._more,\r\n _input: this._input,\r\n yy: this.yy,\r\n conditionStack: this.conditionStack.slice(0),\r\n done: this.done\r\n };\r\n if (this.options.ranges) {\r\n backup.yylloc.range = this.yylloc.range.slice(0);\r\n }\r\n }\r\n\r\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno += lines.length;\r\n }\r\n this.yylloc = {\r\n first_line: this.yylloc.last_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.last_column,\r\n last_column: lines ?\r\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\r\n this.yylloc.last_column + match[0].length\r\n };\r\n this.yytext += match[0];\r\n this.match += match[0];\r\n this.matches = match;\r\n this.yyleng = this.yytext.length;\r\n if (this.options.ranges) {\r\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\r\n }\r\n this._more = false;\r\n this._backtrack = false;\r\n this._input = this._input.slice(match[0].length);\r\n this.matched += match[0];\r\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\r\n if (this.done && this._input) {\r\n this.done = false;\r\n }\r\n if (token) {\r\n return token;\r\n } else if (this._backtrack) {\r\n // recover context\r\n for (var k in backup) {\r\n this[k] = backup[k];\r\n }\r\n return false; // rule action called reject() implying the next rule should be tested instead.\r\n }\r\n return false;\r\n },\r\n\r\n// return next match in input\r\nnext:function () {\r\n if (this.done) {\r\n return this.EOF;\r\n }\r\n if (!this._input) {\r\n this.done = true;\r\n }\r\n\r\n var token,\r\n match,\r\n tempMatch,\r\n index;\r\n if (!this._more) {\r\n this.yytext = '';\r\n this.match = '';\r\n }\r\n var rules = this._currentRules();\r\n for (var i = 0; i < rules.length; i++) {\r\n tempMatch = this._input.match(this.rules[rules[i]]);\r\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n match = tempMatch;\r\n index = i;\r\n if (this.options.backtrack_lexer) {\r\n token = this.test_match(tempMatch, rules[i]);\r\n if (token !== false) {\r\n return token;\r\n } else if (this._backtrack) {\r\n match = false;\r\n continue; // rule action called reject() implying a rule MISmatch.\r\n } else {\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n } else if (!this.options.flex) {\r\n break;\r\n }\r\n }\r\n }\r\n if (match) {\r\n token = this.test_match(match, rules[index]);\r\n if (token !== false) {\r\n return token;\r\n }\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n if (this._input === \"\") {\r\n return this.EOF;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n }\r\n },\r\n\r\n// return next match that has a token\r\nlex:function lex() {\r\n var r = this.next();\r\n if (r) {\r\n return r;\r\n } else {\r\n return this.lex();\r\n }\r\n },\r\n\r\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\r\nbegin:function begin(condition) {\r\n this.conditionStack.push(condition);\r\n },\r\n\r\n// pop the previously active lexer condition state off the condition stack\r\npopState:function popState() {\r\n var n = this.conditionStack.length - 1;\r\n if (n > 0) {\r\n return this.conditionStack.pop();\r\n } else {\r\n return this.conditionStack[0];\r\n }\r\n },\r\n\r\n// produce the lexer rule set which is active for the currently active lexer condition state\r\n_currentRules:function _currentRules() {\r\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\r\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\r\n } else {\r\n return this.conditions[\"INITIAL\"].rules;\r\n }\r\n },\r\n\r\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\r\ntopState:function topState(n) {\r\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\r\n if (n >= 0) {\r\n return this.conditionStack[n];\r\n } else {\r\n return \"INITIAL\";\r\n }\r\n },\r\n\r\n// alias for begin(condition)\r\npushState:function pushState(condition) {\r\n this.begin(condition);\r\n },\r\n\r\n// return the number of states currently on the stack\r\nstateStackSize:function stateStackSize() {\r\n return this.conditionStack.length;\r\n },\r\noptions: {\"case-insensitive\":true},\r\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\nvar YYSTATE=YY_START;\r\nswitch($avoiding_name_collisions) {\r\ncase 0:/* skip whitespace */\r\nbreak;\r\ncase 1:return 20;\r\nbreak;\r\ncase 2:return 7;\r\nbreak;\r\ncase 3:return 8;\r\nbreak;\r\ncase 4:return 9;\r\nbreak;\r\ncase 5:return 12;\r\nbreak;\r\ncase 6:return 16;\r\nbreak;\r\ncase 7:return 14;\r\nbreak;\r\ncase 8:return 10;\r\nbreak;\r\ncase 9:return 11;\r\nbreak;\r\ncase 10:return 19;\r\nbreak;\r\ncase 11:return 21;\r\nbreak;\r\ncase 12:return '<=';\r\nbreak;\r\ncase 13:return '>=';\r\nbreak;\r\ncase 14:return '<';\r\nbreak;\r\ncase 15:return '>';\r\nbreak;\r\ncase 16:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 24;\r\nbreak;\r\ncase 17:return 13;\r\nbreak;\r\ncase 18:return 23;\r\nbreak;\r\ncase 19:return 5;\r\nbreak;\r\ncase 20:return 'INVALID';\r\nbreak;\r\n}\r\n},\r\nrules: [/^(?:\\s+)/i,/^(?:(-?(?:[1-9][0-9]+|[0-9]))\\b)/i,/^(?:OR\\b)/i,/^(?:AND\\b)/i,/^(?:NOT\\b)/i,/^(?:((ALL|NONE|HETATM|PROTEIN|BASIC|ACIDIC|CHARGED|POLAR|NONPOLAR|AROMATIC|NUCLEIC|PURINE|PYRIMIDINE|WATER|POLARH|NONPOLARH))\\b)/i,/^(?:((NAME|ELEM|TYPE|RESIDUE|ICODE|CHAIN|ALTLOC))\\b)/i,/^(?:((SERIAL|SEQUENCE|RESIDX))\\b)/i,/^(?:\\()/i,/^(?:\\))/i,/^(?:,)/i,/^(?::)/i,/^(?:<=)/i,/^(?:>=)/i,/^(?:<)/i,/^(?:>)/i,/^(?:((?:\"(?:\\\\.|[^\\\\\"])*\"|'(?:\\\\.|[^\\\\'])*')))/i,/^(?:(@[_A-Z0-9]+))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:.)/i],\r\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],\"inclusive\":true}}\r\n});\r\nreturn lexer;\r\n})();\r\nparser.lexer = lexer;\r\nfunction Parser () {\r\n this.yy = {};\r\n}\r\nParser.prototype = parser;parser.Parser = Parser;\r\nreturn new Parser;\r\n})();\r\n\r\nmodule.exports = {parser: parser};\r\n","\r\n/*\r\nSmooth.js version 0.1.7\r\n\r\nTurn arrays into smooth functions.\r\n\r\nCopyright 2012 Spencer Cohen\r\nLicensed under MIT license (see \"Smooth.js MIT license.txt\")\r\n*/\r\n\r\n/*Constants (these are accessible by Smooth.WHATEVER in user space)\r\n*/\r\n\r\n(function() {\r\n var AbstractInterpolator, CubicInterpolator, Enum, LinearInterpolator, NearestInterpolator, PI, SincFilterInterpolator, Smooth, clipClamp, clipMirror, clipPeriodic, defaultConfig, getColumn, getType, isValidNumber, k, makeLanczosWindow, makeScaledFunction, makeSincKernel, normalizeScaleTo, shallowCopy, sin, sinc, v, validateNumber, validateVector,\r\n __hasProp = Object.prototype.hasOwnProperty,\r\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; };\r\n\r\n Enum = {\r\n /*Interpolation methods\r\n */\r\n METHOD_NEAREST: 'nearest',\r\n METHOD_LINEAR: 'linear',\r\n METHOD_CUBIC: 'cubic',\r\n METHOD_LANCZOS: 'lanczos',\r\n METHOD_SINC: 'sinc',\r\n /*Input clipping modes\r\n */\r\n CLIP_CLAMP: 'clamp',\r\n CLIP_ZERO: 'zero',\r\n CLIP_PERIODIC: 'periodic',\r\n CLIP_MIRROR: 'mirror',\r\n /* Constants for control over the cubic interpolation tension\r\n */\r\n CUBIC_TENSION_DEFAULT: 0,\r\n CUBIC_TENSION_CATMULL_ROM: 0\r\n };\r\n\r\n defaultConfig = {\r\n method: Enum.METHOD_CUBIC,\r\n cubicTension: Enum.CUBIC_TENSION_DEFAULT,\r\n clip: Enum.CLIP_CLAMP,\r\n scaleTo: 0,\r\n sincFilterSize: 2,\r\n sincWindow: void 0\r\n };\r\n\r\n /*Index clipping functions\r\n */\r\n\r\n clipClamp = function(i, n) {\r\n return Math.max(0, Math.min(i, n - 1));\r\n };\r\n\r\n clipPeriodic = function(i, n) {\r\n i = i % n;\r\n if (i < 0) i += n;\r\n return i;\r\n };\r\n\r\n clipMirror = function(i, n) {\r\n var period;\r\n period = 2 * (n - 1);\r\n i = clipPeriodic(i, period);\r\n if (i > n - 1) i = period - i;\r\n return i;\r\n };\r\n\r\n /*\r\n Abstract scalar interpolation class which provides common functionality for all interpolators\r\n \r\n Subclasses must override interpolate().\r\n */\r\n\r\n AbstractInterpolator = (function() {\r\n\r\n function AbstractInterpolator(array, config) {\r\n this.array = array.slice(0);\r\n this.length = this.array.length;\r\n if (!(this.clipHelper = {\r\n clamp: this.clipHelperClamp,\r\n zero: this.clipHelperZero,\r\n periodic: this.clipHelperPeriodic,\r\n mirror: this.clipHelperMirror\r\n }[config.clip])) {\r\n throw \"Invalid clip: \" + config.clip;\r\n }\r\n }\r\n\r\n AbstractInterpolator.prototype.getClippedInput = function(i) {\r\n if ((0 <= i && i < this.length)) {\r\n return this.array[i];\r\n } else {\r\n return this.clipHelper(i);\r\n }\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperClamp = function(i) {\r\n return this.array[clipClamp(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperZero = function(i) {\r\n return 0;\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperPeriodic = function(i) {\r\n return this.array[clipPeriodic(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperMirror = function(i) {\r\n return this.array[clipMirror(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.interpolate = function(t) {\r\n throw 'Subclasses of AbstractInterpolator must override the interpolate() method.';\r\n };\r\n\r\n return AbstractInterpolator;\r\n\r\n })();\r\n\r\n NearestInterpolator = (function(_super) {\r\n\r\n __extends(NearestInterpolator, _super);\r\n\r\n function NearestInterpolator() {\r\n NearestInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n NearestInterpolator.prototype.interpolate = function(t) {\r\n return this.getClippedInput(Math.round(t));\r\n };\r\n\r\n return NearestInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n LinearInterpolator = (function(_super) {\r\n\r\n __extends(LinearInterpolator, _super);\r\n\r\n function LinearInterpolator() {\r\n LinearInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n LinearInterpolator.prototype.interpolate = function(t) {\r\n var k;\r\n k = Math.floor(t);\r\n t -= k;\r\n return (1 - t) * this.getClippedInput(k) + t * this.getClippedInput(k + 1);\r\n };\r\n\r\n return LinearInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n CubicInterpolator = (function(_super) {\r\n\r\n __extends(CubicInterpolator, _super);\r\n\r\n function CubicInterpolator(array, config) {\r\n this.tangentFactor = 1 - Math.max(-1, Math.min(1, config.cubicTension));\r\n CubicInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n CubicInterpolator.prototype.getTangent = function(k) {\r\n return this.tangentFactor * (this.getClippedInput(k + 1) - this.getClippedInput(k - 1)) / 2;\r\n };\r\n\r\n CubicInterpolator.prototype.interpolate = function(t) {\r\n var k, m, p, t2, t3;\r\n k = Math.floor(t);\r\n m = [this.getTangent(k), this.getTangent(k + 1)];\r\n p = [this.getClippedInput(k), this.getClippedInput(k + 1)];\r\n t -= k;\r\n t2 = t * t;\r\n t3 = t * t2;\r\n return (2 * t3 - 3 * t2 + 1) * p[0] + (t3 - 2 * t2 + t) * m[0] + (-2 * t3 + 3 * t2) * p[1] + (t3 - t2) * m[1];\r\n };\r\n\r\n return CubicInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n sin = Math.sin, PI = Math.PI;\r\n\r\n sinc = function(x) {\r\n if (x === 0) {\r\n return 1;\r\n } else {\r\n return sin(PI * x) / (PI * x);\r\n }\r\n };\r\n\r\n makeLanczosWindow = function(a) {\r\n return function(x) {\r\n return sinc(x / a);\r\n };\r\n };\r\n\r\n makeSincKernel = function(window) {\r\n return function(x) {\r\n return sinc(x) * window(x);\r\n };\r\n };\r\n\r\n SincFilterInterpolator = (function(_super) {\r\n\r\n __extends(SincFilterInterpolator, _super);\r\n\r\n function SincFilterInterpolator(array, config) {\r\n SincFilterInterpolator.__super__.constructor.apply(this, arguments);\r\n this.a = config.sincFilterSize;\r\n if (!config.sincWindow) throw 'No sincWindow provided';\r\n this.kernel = makeSincKernel(config.sincWindow);\r\n }\r\n\r\n SincFilterInterpolator.prototype.interpolate = function(t) {\r\n var k, n, sum, _ref, _ref2;\r\n k = Math.floor(t);\r\n sum = 0;\r\n for (n = _ref = k - this.a + 1, _ref2 = k + this.a; _ref <= _ref2 ? n <= _ref2 : n >= _ref2; _ref <= _ref2 ? n++ : n--) {\r\n sum += this.kernel(t - n) * this.getClippedInput(n);\r\n }\r\n return sum;\r\n };\r\n\r\n return SincFilterInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n getColumn = function(arr, i) {\r\n var row, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = arr.length; _i < _len; _i++) {\r\n row = arr[_i];\r\n _results.push(row[i]);\r\n }\r\n return _results;\r\n };\r\n\r\n makeScaledFunction = function(f, baseScale, scaleRange) {\r\n var scaleFactor, translation;\r\n if (scaleRange.join === '0,1') {\r\n return f;\r\n } else {\r\n scaleFactor = baseScale / (scaleRange[1] - scaleRange[0]);\r\n translation = scaleRange[0];\r\n return function(t) {\r\n return f(scaleFactor * (t - translation));\r\n };\r\n }\r\n };\r\n\r\n getType = function(x) {\r\n return Object.prototype.toString.call(x).slice('[object '.length, -1);\r\n };\r\n\r\n validateNumber = function(n) {\r\n if (isNaN(n)) throw 'NaN in Smooth() input';\r\n if (getType(n) !== 'Number') throw 'Non-number in Smooth() input';\r\n if (!isFinite(n)) throw 'Infinity in Smooth() input';\r\n };\r\n\r\n validateVector = function(v, dimension) {\r\n var n, _i, _len;\r\n if (getType(v) !== 'Array') throw 'Non-vector in Smooth() input';\r\n if (v.length !== dimension) throw 'Inconsistent dimension in Smooth() input';\r\n for (_i = 0, _len = v.length; _i < _len; _i++) {\r\n n = v[_i];\r\n validateNumber(n);\r\n }\r\n };\r\n\r\n isValidNumber = function(n) {\r\n return (getType(n) === 'Number') && isFinite(n) && !isNaN(n);\r\n };\r\n\r\n normalizeScaleTo = function(s) {\r\n var invalidErr;\r\n invalidErr = \"scaleTo param must be number or array of two numbers\";\r\n switch (getType(s)) {\r\n case 'Number':\r\n if (!isValidNumber(s)) throw invalidErr;\r\n s = [0, s];\r\n break;\r\n case 'Array':\r\n if (s.length !== 2) throw invalidErr;\r\n if (!(isValidNumber(s[0]) && isValidNumber(s[1]))) throw invalidErr;\r\n break;\r\n default:\r\n throw invalidErr;\r\n }\r\n return s;\r\n };\r\n\r\n shallowCopy = function(obj) {\r\n var copy, k, v;\r\n copy = {};\r\n for (k in obj) {\r\n if (!__hasProp.call(obj, k)) continue;\r\n v = obj[k];\r\n copy[k] = v;\r\n }\r\n return copy;\r\n };\r\n\r\n Smooth = function(arr, config) {\r\n var baseDomainEnd, dimension, i, interpolator, interpolatorClass, interpolators, k, n, properties, smoothFunc, v;\r\n if (config == null) config = {};\r\n properties = {};\r\n config = shallowCopy(config);\r\n properties.config = shallowCopy(config);\r\n if (config.scaleTo == null) config.scaleTo = config.period;\r\n if (config.sincFilterSize == null) {\r\n config.sincFilterSize = config.lanczosFilterSize;\r\n }\r\n for (k in defaultConfig) {\r\n if (!__hasProp.call(defaultConfig, k)) continue;\r\n v = defaultConfig[k];\r\n if (config[k] == null) config[k] = v;\r\n }\r\n if (!(interpolatorClass = {\r\n nearest: NearestInterpolator,\r\n linear: LinearInterpolator,\r\n cubic: CubicInterpolator,\r\n lanczos: SincFilterInterpolator,\r\n sinc: SincFilterInterpolator\r\n }[config.method])) {\r\n throw \"Invalid method: \" + config.method;\r\n }\r\n if (config.method === 'lanczos') {\r\n config.sincWindow = makeLanczosWindow(config.sincFilterSize);\r\n }\r\n if (arr.length < 2) throw 'Array must have at least two elements';\r\n properties.count = arr.length;\r\n smoothFunc = (function() {\r\n var _i, _j, _len, _len2;\r\n switch (getType(arr[0])) {\r\n case 'Number':\r\n properties.dimension = 'scalar';\r\n if (Smooth.deepValidation) {\r\n for (_i = 0, _len = arr.length; _i < _len; _i++) {\r\n n = arr[_i];\r\n validateNumber(n);\r\n }\r\n }\r\n interpolator = new interpolatorClass(arr, config);\r\n return function(t) {\r\n return interpolator.interpolate(t);\r\n };\r\n case 'Array':\r\n properties.dimension = dimension = arr[0].length;\r\n if (!dimension) throw 'Vectors must be non-empty';\r\n if (Smooth.deepValidation) {\r\n for (_j = 0, _len2 = arr.length; _j < _len2; _j++) {\r\n v = arr[_j];\r\n validateVector(v, dimension);\r\n }\r\n }\r\n interpolators = (function() {\r\n var _results;\r\n _results = [];\r\n for (i = 0; 0 <= dimension ? i < dimension : i > dimension; 0 <= dimension ? i++ : i--) {\r\n _results.push(new interpolatorClass(getColumn(arr, i), config));\r\n }\r\n return _results;\r\n })();\r\n return function(t) {\r\n var interpolator, _k, _len3, _results;\r\n _results = [];\r\n for (_k = 0, _len3 = interpolators.length; _k < _len3; _k++) {\r\n interpolator = interpolators[_k];\r\n _results.push(interpolator.interpolate(t));\r\n }\r\n return _results;\r\n };\r\n default:\r\n throw \"Invalid element type: \" + (getType(arr[0]));\r\n }\r\n })();\r\n if (config.clip === 'periodic') {\r\n baseDomainEnd = arr.length;\r\n } else {\r\n baseDomainEnd = arr.length - 1;\r\n }\r\n config.scaleTo || (config.scaleTo = baseDomainEnd);\r\n properties.domain = normalizeScaleTo(config.scaleTo);\r\n smoothFunc = makeScaledFunction(smoothFunc, baseDomainEnd, properties.domain);\r\n properties.domain.sort();\r\n /*copy properties\r\n */\r\n for (k in properties) {\r\n if (!__hasProp.call(properties, k)) continue;\r\n v = properties[k];\r\n smoothFunc[k] = v;\r\n }\r\n return smoothFunc;\r\n };\r\n\r\n for (k in Enum) {\r\n if (!__hasProp.call(Enum, k)) continue;\r\n v = Enum[k];\r\n Smooth[k] = v;\r\n }\r\n\r\n Smooth.deepValidation = true;\r\n\r\n (typeof exports !== \"undefined\" && exports !== null ? exports : window).Smooth = Smooth;\r\n\r\n}).call(this);\r\n","!function(r,t){if(\"function\"==typeof define&&define.amd)define([\"exports\"],t);else if(\"object\"==typeof exports&&\"undefined\"!=typeof module)t(exports);else t(r.MMTF=r.MMTF||{})}(this,function(r){\"use strict\";function t(r,t,n){for(var e=(r.byteLength,0),i=n.length;i>e;e++){var o=n.charCodeAt(e);if(128>o)r.setUint8(t++,o>>>0&127|0);else if(2048>o)r.setUint8(t++,o>>>6&31|192),r.setUint8(t++,o>>>0&63|128);else if(65536>o)r.setUint8(t++,o>>>12&15|224),r.setUint8(t++,o>>>6&63|128),r.setUint8(t++,o>>>0&63|128);else{if(!(1114112>o))throw new Error(\"bad codepoint \"+o);r.setUint8(t++,o>>>18&7|240),r.setUint8(t++,o>>>12&63|128),r.setUint8(t++,o>>>6&63|128),r.setUint8(t++,o>>>0&63|128)}}}function n(r){for(var t=0,n=0,e=r.length;e>n;n++){var i=r.charCodeAt(n);if(128>i)t+=1;else if(2048>i)t+=2;else if(65536>i)t+=3;else{if(!(1114112>i))throw new Error(\"bad codepoint \"+i);t+=4}}return t}function e(r,i,o){var a=typeof r;if(\"string\"===a){var u=n(r);if(32>u)return i.setUint8(o,160|u),t(i,o+1,r),1+u;if(256>u)return i.setUint8(o,217),i.setUint8(o+1,u),t(i,o+2,r),2+u;if(65536>u)return i.setUint8(o,218),i.setUint16(o+1,u),t(i,o+3,r),3+u;if(4294967296>u)return i.setUint8(o,219),i.setUint32(o+1,u),t(i,o+5,r),5+u}if(r instanceof Uint8Array){var u=r.byteLength,s=new Uint8Array(i.buffer);if(256>u)return i.setUint8(o,196),i.setUint8(o+1,u),s.set(r,o+2),2+u;if(65536>u)return i.setUint8(o,197),i.setUint16(o+1,u),s.set(r,o+3),3+u;if(4294967296>u)return i.setUint8(o,198),i.setUint32(o+1,u),s.set(r,o+5),5+u}if(\"number\"===a){if(!isFinite(r))throw new Error(\"Number not finite: \"+r);if(Math.floor(r)!==r)return i.setUint8(o,203),i.setFloat64(o+1,r),9;if(r>=0){if(128>r)return i.setUint8(o,r),1;if(256>r)return i.setUint8(o,204),i.setUint8(o+1,r),2;if(65536>r)return i.setUint8(o,205),i.setUint16(o+1,r),3;if(4294967296>r)return i.setUint8(o,206),i.setUint32(o+1,r),5;throw new Error(\"Number too big 0x\"+r.toString(16))}if(r>=-32)return i.setInt8(o,r),1;if(r>=-128)return i.setUint8(o,208),i.setInt8(o+1,r),2;if(r>=-32768)return i.setUint8(o,209),i.setInt16(o+1,r),3;if(r>=-2147483648)return i.setUint8(o,210),i.setInt32(o+1,r),5;throw new Error(\"Number too small -0x\"+(-r).toString(16).substr(1))}if(null===r)return i.setUint8(o,192),1;if(\"boolean\"===a)return i.setUint8(o,r?195:194),1;if(\"object\"===a){var u,f=0,c=Array.isArray(r);if(c)u=r.length;else{var d=Object.keys(r);u=d.length}var f;if(16>u?(i.setUint8(o,u|(c?144:128)),f=1):65536>u?(i.setUint8(o,c?220:222),i.setUint16(o+1,u),f=3):4294967296>u&&(i.setUint8(o,c?221:223),i.setUint32(o+1,u),f=5),c)for(var l=0;u>l;l++)f+=e(r[l],i,o+f);else for(var l=0;u>l;l++){var v=d[l];f+=e(v,i,o+f),f+=e(r[v],i,o+f)}return f}throw new Error(\"Unknown type \"+a)}function i(r){var t=typeof r;if(\"string\"===t){var e=n(r);if(32>e)return 1+e;if(256>e)return 2+e;if(65536>e)return 3+e;if(4294967296>e)return 5+e}if(r instanceof Uint8Array){var e=r.byteLength;if(256>e)return 2+e;if(65536>e)return 3+e;if(4294967296>e)return 5+e}if(\"number\"===t){if(Math.floor(r)!==r)return 9;if(r>=0){if(128>r)return 1;if(256>r)return 2;if(65536>r)return 3;if(4294967296>r)return 5;throw new Error(\"Number too big 0x\"+r.toString(16))}if(r>=-32)return 1;if(r>=-128)return 2;if(r>=-32768)return 3;if(r>=-2147483648)return 5;throw new Error(\"Number too small -0x\"+r.toString(16).substr(1))}if(\"boolean\"===t||null===r)return 1;if(\"object\"===t){var e,o=0;if(Array.isArray(r)){e=r.length;for(var a=0;e>a;a++)o+=i(r[a])}else{var u=Object.keys(r);e=u.length;for(var a=0;e>a;a++){var s=u[a];o+=i(s)+i(r[s])}}if(16>e)return 1+o;if(65536>e)return 3+o;if(4294967296>e)return 5+o;throw new Error(\"Array or object too long 0x\"+e.toString(16))}throw new Error(\"Unknown type \"+t)}function o(r){var t=new ArrayBuffer(i(r)),n=new DataView(t);return e(r,n,0),new Uint8Array(t)}function a(r,t,n){return t?new r(t.buffer,t.byteOffset,t.byteLength/(n||1)):void 0}function u(r){return a(DataView,r)}function s(r){return a(Uint8Array,r)}function f(r){return a(Int8Array,r)}function c(r){return a(Int32Array,r,4)}function d(r){return a(Float32Array,r,4)}function l(r,t){var n=r.length/2;t||(t=new Int16Array(n));for(var e=0,i=0;n>e;++e,i+=2)t[e]=r[i]<<8^r[i+1]<<0;return t}function v(r,t){var n=r.length;t||(t=new Uint8Array(2*n));for(var e=u(t),i=0;n>i;++i)e.setInt16(2*i,r[i]);return s(t)}function g(r,t){var n=r.length/4;t||(t=new Int32Array(n));for(var e=0,i=0;n>e;++e,i+=4)t[e]=r[i]<<24^r[i+1]<<16^r[i+2]<<8^r[i+3]<<0;return t}function L(r,t){var n=r.length;t||(t=new Uint8Array(4*n));for(var e=u(t),i=0;n>i;++i)e.setInt32(4*i,r[i]);return s(t)}function h(r,t){var n=r.length;t||(t=new Float32Array(n/4));for(var e=u(t),i=u(r),o=0,a=0,s=n/4;s>o;++o,a+=4)e.setFloat32(a,i.getFloat32(a),!0);return t}function y(r,t,n){var e=r.length,i=1/t;n||(n=new Float32Array(e));for(var o=0;e>o;++o)n[o]=r[o]*i;return n}function m(r,t,n){var e=r.length;n||(n=new Int32Array(e));for(var i=0;e>i;++i)n[i]=Math.round(r[i]*t);return n}function p(r,t){var n,e;if(!t){var i=0;for(n=0,e=r.length;e>n;n+=2)i+=r[n+1];t=new r.constructor(i)}var o=0;for(n=0,e=r.length;e>n;n+=2)for(var a=r[n],u=r[n+1],s=0;u>s;++s)t[o]=a,++o;return t}function U(r){if(0===r.length)return new Int32Array;var t,n,e=2;for(t=1,n=r.length;n>t;++t)r[t-1]!==r[t]&&(e+=2);var i=new Int32Array(e),o=0,a=1;for(t=1,n=r.length;n>t;++t)r[t-1]!==r[t]?(i[o]=r[t-1],i[o+1]=a,a=1,o+=2):++a;return i[o]=r[r.length-1],i[o+1]=a,i}function b(r,t){var n=r.length;t||(t=new r.constructor(n)),n&&(t[0]=r[0]);for(var e=1;n>e;++e)t[e]=r[e]+t[e-1];return t}function I(r,t){var n=r.length;t||(t=new r.constructor(n)),t[0]=r[0];for(var e=1;n>e;++e)t[e]=r[e]-r[e-1];return t}function w(r,t){var n,e,i=r instanceof Int8Array?127:32767,o=-i-1,a=r.length;if(!t){var u=0;for(n=0;a>n;++n)r[n]o&&++u;t=new Int32Array(u)}for(n=0,e=0;a>n;){for(var s=0;r[n]===i||r[n]===o;)s+=r[n],++n;s+=r[n],++n,t[e]=s,++e}return t}function C(r,t){var n,e=t?127:32767,i=-e-1,o=r.length,a=0;for(n=0;o>n;++n){var u=r[n];0===u?++a:a+=u===e||u===i?2:u>0?Math.ceil(u/e):Math.ceil(u/i)}var s=t?new Int8Array(a):new Int16Array(a),f=0;for(n=0;o>n;++n){var u=r[n];if(u>=0)for(;u>=e;)s[f]=e,++f,u-=e;else for(;i>=u;)s[f]=i,++f,u-=i;s[f]=u,++f}return s}function A(r,t){return b(p(r),t)}function x(r){return U(I(r))}function M(r,t,n){return y(p(r,c(n)),t,n)}function F(r,t){return U(m(r,t))}function S(r,t,n){return y(b(r,c(n)),t,n)}function E(r,t,n){return I(m(r,t),n)}function N(r,t,n){return y(w(r,c(n)),t,n)}function O(r,t,n){var e=w(r,c(n));return S(e,t,d(e))}function T(r,t,n){return C(E(r,t),n)}function k(r){var t=u(r),n=t.getInt32(0),e=t.getInt32(4),i=r.subarray(8,12),r=r.subarray(12);return[n,r,e,i]}function j(r,t,n,e){var i=new ArrayBuffer(12+e.byteLength),o=new Uint8Array(i),a=new DataView(i);return a.setInt32(0,r),a.setInt32(4,t),n&&o.set(n,8),o.set(e,12),o}function q(r){var t=r.length,n=s(r);return j(2,t,void 0,n)}function D(r){var t=r.length,n=L(r);return j(4,t,void 0,n)}function P(r,t){var n=r.length/t,e=L([t]),i=s(r);return j(5,n,e,i)}function z(r){var t=r.length,n=L(U(r));return j(6,t,void 0,n)}function B(r){var t=r.length,n=L(x(r));return j(8,t,void 0,n)}function V(r,t){var n=r.length,e=L([t]),i=L(F(r,t));return j(9,n,e,i)}function G(r,t){var n=r.length,e=L([t]),i=v(T(r,t));return j(10,n,e,i)}function R(r){var t={};return rr.forEach(function(n){void 0!==r[n]&&(t[n]=r[n])}),r.bondAtomList&&(t.bondAtomList=D(r.bondAtomList)),r.bondOrderList&&(t.bondOrderList=q(r.bondOrderList)),t.xCoordList=G(r.xCoordList,1e3),t.yCoordList=G(r.yCoordList,1e3),t.zCoordList=G(r.zCoordList,1e3),r.bFactorList&&(t.bFactorList=G(r.bFactorList,100)),r.atomIdList&&(t.atomIdList=B(r.atomIdList)),r.altLocList&&(t.altLocList=z(r.altLocList)),r.occupancyList&&(t.occupancyList=V(r.occupancyList,100)),t.groupIdList=B(r.groupIdList),t.groupTypeList=D(r.groupTypeList),r.secStructList&&(t.secStructList=q(r.secStructList,1)),r.insCodeList&&(t.insCodeList=z(r.insCodeList)),r.sequenceIndexList&&(t.sequenceIndexList=B(r.sequenceIndexList)),t.chainIdList=P(r.chainIdList,4),r.chainNameList&&(t.chainNameList=P(r.chainNameList,4)),t}function H(r){function t(r){for(var t={},n=0;r>n;n++){var e=o();t[e]=o()}return t}function n(t){var n=r.subarray(a,a+t);return a+=t,n}function e(t){var n=r.subarray(a,a+t);a+=t;var e=65535;if(t>e){for(var i=[],o=0;on;n++)t[n]=o();return t}function o(){var o,s,f=r[a];if(0===(128&f))return a++,f;if(128===(240&f))return s=15&f,a++,t(s);if(144===(240&f))return s=15&f,a++,i(s);if(160===(224&f))return s=31&f,a++,e(s);if(224===(224&f))return o=u.getInt8(a),a++,o;switch(f){case 192:return a++,null;case 194:return a++,!1;case 195:return a++,!0;case 196:return s=u.getUint8(a+1),a+=2,n(s);case 197:return s=u.getUint16(a+1),a+=3,n(s);case 198:return s=u.getUint32(a+1),a+=5,n(s);case 202:return o=u.getFloat32(a+1),a+=5,o;case 203:return o=u.getFloat64(a+1),a+=9,o;case 204:return o=r[a+1],a+=2,o;case 205:return o=u.getUint16(a+1),a+=3,o;case 206:return o=u.getUint32(a+1),a+=5,o;case 208:return o=u.getInt8(a+1),a+=2,o;case 209:return o=u.getInt16(a+1),a+=3,o;case 210:return o=u.getInt32(a+1),a+=5,o;case 217:return s=u.getUint8(a+1),a+=2,e(s);case 218:return s=u.getUint16(a+1),a+=3,e(s);case 219:return s=u.getUint32(a+1),a+=5,e(s);case 220:return s=u.getUint16(a+1),a+=3,i(s);case 221:return s=u.getUint32(a+1),a+=5,i(s);case 222:return s=u.getUint16(a+1),a+=3,t(s);case 223:return s=u.getUint32(a+1),a+=5,t(s)}throw new Error(\"Unknown type 0x\"+f.toString(16))}var a=0,u=new DataView(r.buffer);return o()}function W(r,t,n,e){switch(r){case 1:return h(t);case 2:return f(t);case 3:return l(t);case 4:return g(t);case 5:return s(t);case 6:return p(g(t),new Uint8Array(n));case 7:return p(g(t));case 8:return A(g(t));case 9:return M(g(t),g(e)[0]);case 10:return O(l(t),g(e)[0]);case 11:return y(l(t),g(e)[0]);case 12:return N(l(t),g(e)[0]);case 13:return N(f(t),g(e)[0]);case 14:return w(l(t));case 15:return w(f(t))}}function X(r,t){t=t||{};var n=t.ignoreFields,e={};return nr.forEach(function(t){var i=n?-1!==n.indexOf(t):!1,o=r[t];i||void 0===o||(o instanceof Uint8Array?e[t]=W.apply(null,k(o)):e[t]=o)}),e}function J(r){return String.fromCharCode.apply(null,r).replace(/\\0/g,\"\")}function K(r,t,n){n=n||{};var e,i,o,a,u,s,f=n.firstModelOnly,c=t.onModel,d=t.onChain,l=t.onGroup,v=t.onAtom,g=t.onBond,L=0,h=0,y=0,m=0,p=0,U=-1,b=r.chainNameList,I=r.secStructList,w=r.insCodeList,C=r.sequenceIndexList,A=r.atomIdList,x=r.bFactorList,M=r.altLocList,F=r.occupancyList,S=r.bondAtomList,E=r.bondOrderList;for(e=0,i=r.chainsPerModel.length;i>e&&!(f&&L>0);++e){var N=r.chainsPerModel[L];for(c&&c({chainCount:N,modelIndex:L}),o=0;N>o;++o){var O=r.groupsPerChain[h];if(d){var T=J(r.chainIdList.subarray(4*h,4*h+4)),k=null;b&&(k=J(b.subarray(4*h,4*h+4))),d({groupCount:O,chainIndex:h,modelIndex:L,chainId:T,chainName:k})}for(a=0;O>a;++a){var j=r.groupList[r.groupTypeList[y]],q=j.atomNameList.length;if(l){var D=null;I&&(D=I[y]);var P=null;r.insCodeList&&(P=String.fromCharCode(w[y]));var z=null;C&&(z=C[y]),l({atomCount:q,groupIndex:y,chainIndex:h,modelIndex:L,groupId:r.groupIdList[y],groupType:r.groupTypeList[y],groupName:j.groupName,singleLetterCode:j.singleLetterCode,chemCompType:j.chemCompType,secStruct:D,insCode:P,sequenceIndex:z})}for(u=0;q>u;++u){if(v){var B=null;A&&(B=A[m]);var V=null;x&&(V=x[m]);var G=null;M&&(G=String.fromCharCode(M[m]));var R=null;F&&(R=F[m]),v({atomIndex:m,groupIndex:y,chainIndex:h,modelIndex:L,atomId:B,element:j.elementList[u],atomName:j.atomNameList[u],formalCharge:j.formalChargeList[u],xCoord:r.xCoordList[m],yCoord:r.yCoordList[m],zCoord:r.zCoordList[m],bFactor:V,altLoc:G,occupancy:R})}m+=1}if(g){var H=j.bondAtomList;for(u=0,s=j.bondOrderList.length;s>u;++u)g({atomIndex1:m-q+H[2*u],atomIndex2:m-q+H[2*u+1],bondOrder:j.bondOrderList[u]})}y+=1}h+=1}if(p=U+1,U=m-1,g&&S)for(u=0,s=S.length;s>u;u+=2){var W=S[u],X=S[u+1];(W>=p&&U>=W||X>=p&&U>=X)&&g({atomIndex1:W,atomIndex2:X,bondOrder:E?E[u/2]:null})}L+=1}}function Q(r){return o(R(r))}function Y(r,t){r instanceof ArrayBuffer&&(r=new Uint8Array(r));var n;return n=r instanceof Uint8Array?H(r):r,X(n,t)}function Z(r,t,n,e){function i(){try{var r=Y(o.response);n(r)}catch(t){e(t)}}var o=new XMLHttpRequest;o.addEventListener(\"load\",i,!0),o.addEventListener(\"error\",e,!0),o.responseType=\"arraybuffer\",o.open(\"GET\",t+r.toUpperCase()),o.send()}function $(r,t,n){Z(r,or,t,n)}function _(r,t,n){Z(r,ar,t,n)}var rr=[\"mmtfVersion\",\"mmtfProducer\",\"unitCell\",\"spaceGroup\",\"structureId\",\"title\",\"depositionDate\",\"releaseDate\",\"experimentalMethods\",\"resolution\",\"rFree\",\"rWork\",\"bioAssemblyList\",\"ncsOperatorList\",\"entityList\",\"groupList\",\"numBonds\",\"numAtoms\",\"numGroups\",\"numChains\",\"numModels\",\"groupsPerChain\",\"chainsPerModel\"],tr=[\"xCoordList\",\"yCoordList\",\"zCoordList\",\"groupIdList\",\"groupTypeList\",\"chainIdList\",\"bFactorList\",\"atomIdList\",\"altLocList\",\"occupancyList\",\"secStructList\",\"insCodeList\",\"sequenceIndexList\",\"chainNameList\",\"bondAtomList\",\"bondOrderList\"],nr=rr.concat(tr),er=\"v1.1.0dev\",ir=\"//mmtf.rcsb.org/v1.0/\",or=ir+\"full/\",ar=ir+\"reduced/\";r.encode=Q,r.decode=Y,r.traverse=K,r.fetch=$,r.fetchReduced=_,r.version=er,r.fetchUrl=or,r.fetchReducedUrl=ar,r.encodeMsgpack=o,r.encodeMmtf=R,r.decodeMsgpack=H,r.decodeMmtf=X});","module.exports = __WEBPACK_EXTERNAL_MODULE__535__;","module.exports = __WEBPACK_EXTERNAL_MODULE__698__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar defaults = {\n lines: 12,\n length: 7,\n width: 5,\n radius: 10,\n scale: 1.0,\n corners: 1,\n color: '#000',\n fadeColor: 'transparent',\n animation: 'spinner-line-fade-default',\n rotate: 0,\n direction: 1,\n speed: 1,\n zIndex: 2e9,\n className: 'spinner',\n top: '50%',\n left: '50%',\n shadow: '0 0 1px transparent', // prevent aliased lines\n position: 'absolute',\n};\nvar Spinner = /** @class */ (function () {\n function Spinner(opts) {\n if (opts === void 0) { opts = {}; }\n this.opts = __assign(__assign({}, defaults), opts);\n }\n /**\n * Adds the spinner to the given target element. If this instance is already\n * spinning, it is automatically removed from its previous target by calling\n * stop() internally.\n */\n Spinner.prototype.spin = function (target) {\n this.stop();\n this.el = document.createElement('div');\n this.el.className = this.opts.className;\n this.el.setAttribute('role', 'progressbar');\n this.el.style.position = this.opts.position;\n this.el.style.width = \"0\";\n this.el.style.zIndex = this.opts.zIndex.toString();\n this.el.style.left = this.opts.left;\n this.el.style.top = this.opts.top;\n this.el.style.transform = \"scale(\".concat(this.opts.scale, \")\");\n if (target) {\n target.insertBefore(this.el, target.firstChild || null);\n }\n drawLines(this.el, this.opts);\n return this;\n };\n /**\n * Stops and removes the Spinner.\n * Stopped spinners may be reused by calling spin() again.\n */\n Spinner.prototype.stop = function () {\n if (this.el) {\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n this.el = undefined;\n }\n return this;\n };\n return Spinner;\n}());\nexport { Spinner };\n/**\n * Returns the line color from the given string or array.\n */\nfunction getColor(color, idx) {\n return typeof color == 'string' ? color : color[idx % color.length];\n}\n/**\n * Internal method that draws the individual lines.\n */\nfunction drawLines(el, opts) {\n var borderRadius = (Math.round(opts.corners * opts.width * 500) / 1000) + 'px';\n var shadow = 'none';\n if (opts.shadow === true) {\n shadow = '0 2px 4px #000'; // default shadow\n }\n else if (typeof opts.shadow === 'string') {\n shadow = opts.shadow;\n }\n var shadows = parseBoxShadow(shadow);\n for (var i = 0; i < opts.lines; i++) {\n var degrees = ~~(360 / opts.lines * i + opts.rotate);\n var backgroundLine = document.createElement('div');\n backgroundLine.style.position = 'absolute';\n backgroundLine.style.top = \"\".concat(-opts.width / 2, \"px\");\n backgroundLine.style.width = (opts.length + opts.width) + 'px';\n backgroundLine.style.height = opts.width + 'px';\n backgroundLine.style.background = getColor(opts.fadeColor, i);\n backgroundLine.style.borderRadius = borderRadius;\n backgroundLine.style.transformOrigin = 'left';\n backgroundLine.style.transform = \"rotate(\".concat(degrees, \"deg) translateX(\").concat(opts.radius, \"px)\");\n var delay = i * opts.direction / opts.lines / opts.speed;\n delay -= 1 / opts.speed; // so initial animation state will include trail\n var line = document.createElement('div');\n line.style.width = '100%';\n line.style.height = '100%';\n line.style.background = getColor(opts.color, i);\n line.style.borderRadius = borderRadius;\n line.style.boxShadow = normalizeShadow(shadows, degrees);\n line.style.animation = \"\".concat(1 / opts.speed, \"s linear \").concat(delay, \"s infinite \").concat(opts.animation);\n backgroundLine.appendChild(line);\n el.appendChild(backgroundLine);\n }\n}\nfunction parseBoxShadow(boxShadow) {\n var regex = /^\\s*([a-zA-Z]+\\s+)?(-?\\d+(\\.\\d+)?)([a-zA-Z]*)\\s+(-?\\d+(\\.\\d+)?)([a-zA-Z]*)(.*)$/;\n var shadows = [];\n for (var _i = 0, _a = boxShadow.split(','); _i < _a.length; _i++) {\n var shadow = _a[_i];\n var matches = shadow.match(regex);\n if (matches === null) {\n continue; // invalid syntax\n }\n var x = +matches[2];\n var y = +matches[5];\n var xUnits = matches[4];\n var yUnits = matches[7];\n if (x === 0 && !xUnits) {\n xUnits = yUnits;\n }\n if (y === 0 && !yUnits) {\n yUnits = xUnits;\n }\n if (xUnits !== yUnits) {\n continue; // units must match to use as coordinates\n }\n shadows.push({\n prefix: matches[1] || '', // could have value of 'inset' or undefined\n x: x,\n y: y,\n xUnits: xUnits,\n yUnits: yUnits,\n end: matches[8],\n });\n }\n return shadows;\n}\n/**\n * Modify box-shadow x/y offsets to counteract rotation\n */\nfunction normalizeShadow(shadows, degrees) {\n var normalized = [];\n for (var _i = 0, shadows_1 = shadows; _i < shadows_1.length; _i++) {\n var shadow = shadows_1[_i];\n var xy = convertOffset(shadow.x, shadow.y, degrees);\n normalized.push(shadow.prefix + xy[0] + shadow.xUnits + ' ' + xy[1] + shadow.yUnits + shadow.end);\n }\n return normalized.join(', ');\n}\nfunction convertOffset(x, y, degrees) {\n var radians = degrees * Math.PI / 180;\n var sin = Math.sin(radians);\n var cos = Math.cos(radians);\n return [\n Math.round((x * cos + y * sin) * 1000) / 1000,\n Math.round((-x * sin + y * cos) * 1000) / 1000,\n ];\n}\n","//----------------------------------------------------------------------------\r\n// Timer\r\n\r\nexport default class Timer {\r\n constructor() {\r\n this.startTime = 0;\r\n this.oldTime = 0;\r\n this.elapsedTime = 0;\r\n this.running = false;\r\n }\r\n\r\n start() {\r\n this.startTime = Timer.now();\r\n this.oldTime = this.startTime;\r\n this.running = true;\r\n }\r\n\r\n stop() {\r\n this.getElapsedTime();\r\n this.running = false;\r\n }\r\n\r\n getElapsedTime() {\r\n this.update();\r\n return this.elapsedTime;\r\n }\r\n\r\n update() {\r\n let delta = 0;\r\n if (this.running) {\r\n const newTime = Timer.now();\r\n delta = 0.001 * (newTime - this.oldTime);\r\n this.oldTime = newTime;\r\n this.elapsedTime += delta;\r\n }\r\n\r\n return delta;\r\n }\r\n}\r\n\r\nTimer.now = (function () {\r\n const p = typeof window !== 'undefined' && window.performance;\r\n return (p && p.now) ? p.now.bind(p) : Date.now;\r\n}());\r\n","import Timer from '../Timer';\r\n\r\nconst { now } = Timer;\r\n\r\nfunction createElement(tag, id, css) {\r\n const element = document.createElement(tag);\r\n element.id = id;\r\n element.style.cssText = css;\r\n return element;\r\n}\r\n\r\nclass Stats {\r\n constructor() {\r\n this.domElement = createElement('div', 'stats', 'padding:8px');\r\n this._text = createElement('p', 'fps', 'margin:0;color:silver;font-size:large');\r\n this.domElement.appendChild(this._text);\r\n\r\n this._startTime = now();\r\n this._prevTime = this._startTime;\r\n\r\n this._deltas = new Array(20);\r\n this._index = 0;\r\n this._total = 0.0;\r\n this._count = 0;\r\n }\r\n\r\n end() {\r\n const time = now();\r\n const delta = time - this._startTime;\r\n\r\n if (this._count < this._deltas.length) {\r\n this._count++;\r\n } else {\r\n this._total -= this._deltas[this._index];\r\n }\r\n this._total += delta;\r\n this._deltas[this._index] = delta;\r\n this._index = (this._index + 1) % this._deltas.length;\r\n\r\n this.ms = this._total / this._count;\r\n this.fps = 1000 / this.ms;\r\n\r\n if (time > this._prevTime + 1000) {\r\n this._text.textContent = this.fps.toPrecision(2);\r\n this._prevTime = time;\r\n }\r\n\r\n return time;\r\n }\r\n\r\n update() {\r\n this._startTime = this.end();\r\n }\r\n\r\n show(on) {\r\n if (on === undefined) {\r\n on = true;\r\n }\r\n this.domElement.style.display = on ? 'block' : 'none';\r\n }\r\n}\r\n\r\nexport default Stats;\r\n","/**\r\n * This class introduces the simplest event system.\r\n */\r\n\r\nimport _ from 'lodash';\r\n\r\nfunction isUndefOrEqual(param, value) {\r\n return !param || param === value;\r\n}\r\n\r\n/**\r\n * Creates empty dispatcher.\r\n *\r\n * @exports EventDispatcher\r\n * @constructor\r\n */\r\nfunction EventDispatcher() {\r\n this._handlers = {};\r\n}\r\n\r\n/**\r\n * Binds callback on specific event type. Optional `context` parameter\r\n * could be used as 'this' for the `callback`.\r\n * @param {string} type Event name.\r\n * @param {function} callback Callback function.\r\n * @param {Object} [context] 'This' object for the callback.\r\n */\r\nEventDispatcher.prototype.addEventListener = function (type, callback, context) {\r\n let handlers = this._handlers[type];\r\n\r\n if (!handlers) {\r\n this._handlers[type] = [];\r\n handlers = this._handlers[type];\r\n }\r\n\r\n const params = [callback, context];\r\n function _checkPar(par) {\r\n return par[0] === params[0] && par[1] === params[1];\r\n }\r\n\r\n if (_.find(handlers, _checkPar) === undefined) {\r\n handlers.push(params);\r\n }\r\n};\r\n\r\n/**\r\n * Removes a previously-bound callback function from an object.\r\n * If no `context` is specified, all versions of the `callback` with different\r\n * contexts will be removed.\r\n * If no `callback` is specified, all callbacks of the `type` will be removed.\r\n * If no `type` is specified, callbacks for all events will be removed.\r\n * @param {?string} [type] Event type.\r\n * @param {function} [callback] Callback function.\r\n * @param {Object} [context] 'This' object for the callback.\r\n */\r\nEventDispatcher.prototype.removeEventListener = function (type, callback, context) {\r\n const self = this;\r\n _.forEach(self._handlers, (handler, ev) => {\r\n _.remove(handler, (values) => isUndefOrEqual(type, ev)\r\n && isUndefOrEqual(callback, values[0])\r\n && isUndefOrEqual(context, values[1] || self));\r\n });\r\n\r\n this._handlers = _.omitBy(self._handlers, (handler) => handler.length === 0);\r\n};\r\n\r\n/**\r\n * Makes all the callbacks for the specific `event` to trigger.\r\n * @param {Object} event Event.\r\n * @param {string} event.type Type of the event.\r\n */\r\nEventDispatcher.prototype.dispatchEvent = function (event) {\r\n const self = this;\r\n\r\n _.forEach(this._handlers[event.type], (callback) => {\r\n const context = callback[1] || self;\r\n callback[0].apply(context, [event]);\r\n });\r\n};\r\n\r\nexport default EventDispatcher;\r\n","/**\r\n * This module contains class for logging.\r\n * Returns an instance of a logger that have already been created.\r\n * Allows users to log messages for five different levels,\r\n * enable console output and catch signal on each message.\r\n */\r\nimport _ from 'lodash';\r\nimport EventDispatcher from './EventDispatcher';\r\n\r\nconst priorities = {\r\n debug: 0,\r\n info: 1,\r\n report: 2,\r\n warn: 3,\r\n error: 4,\r\n};\r\n\r\n/**\r\n * Create new Logger.\r\n *\r\n * @exports Logger\r\n * @extends EventDispatcher\r\n * @constructor\r\n */\r\nfunction Logger() {\r\n EventDispatcher.call(this);\r\n /** Boolean flag that toggles output to browser console.\r\n * @type {boolean}\r\n */\r\n this.console = false;\r\n this._priority = priorities.warn;\r\n}\r\n\r\nLogger.prototype = Object.create(EventDispatcher.prototype);\r\nLogger.prototype.constructor = Logger;\r\n\r\n/**\r\n * Create new clean instance of the logger.\r\n * @returns {Logger}\r\n */\r\nLogger.prototype.instantiate = function () {\r\n return new Logger();\r\n};\r\n\r\nfunction verify(number) {\r\n if (!_.isNumber(number)) {\r\n throw new Error('Wrong log level specified!');\r\n }\r\n return number;\r\n}\r\n\r\n/**\r\n * @property {string} current threshold for signals and console output.\r\n * @name Logger#level\r\n */\r\nObject.defineProperty(Logger.prototype, 'level', {\r\n get() {\r\n return _.findKey(priorities, (value) => value === this._priority);\r\n },\r\n set(level) {\r\n this._priority = verify(priorities[level]);\r\n },\r\n});\r\n\r\n/**\r\n * Returns the list of all possible level values.\r\n * @returns {Array}\r\n */\r\nLogger.prototype.levels = function () {\r\n return Object.keys(priorities);\r\n};\r\n\r\n/**\r\n * Add new message with specified level.\r\n * @param {string} level - level of the message, must be one of the\r\n * {'debug' | 'info' | 'report' | 'warn' | 'error'}\r\n * @param {string} message\r\n */\r\nLogger.prototype.message = function (level, message) {\r\n const priority = verify(priorities[level]);\r\n this._message(priority, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('debug', ...);\r\n * @param message\r\n */\r\nLogger.prototype.debug = function (message) {\r\n this._message(priorities.debug, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('info', ...);\r\n * @param message\r\n */\r\nLogger.prototype.info = function (message) {\r\n this._message(priorities.info, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('report', ...);\r\n * @param message\r\n */\r\nLogger.prototype.report = function (message) {\r\n this._message(priorities.report, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('warn', ...);\r\n * @param message\r\n */\r\nLogger.prototype.warn = function (message) {\r\n this._message(priorities.warn, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('error', ...);\r\n * @param message\r\n */\r\nLogger.prototype.error = function (message) {\r\n this._message(priorities.error, message);\r\n};\r\n\r\n/**\r\n * Add new message with specified priority.\r\n * @param {number} priority - priority of the message\r\n * @param {string} message\r\n * @private\r\n */\r\nLogger.prototype._message = function (priority, message) {\r\n if (priority < this._priority) {\r\n return;\r\n }\r\n const level = _.findKey(priorities, (value) => value === priority);\r\n message = String(message);\r\n if (this.console) {\r\n const output = `miew:${level}: ${message}`;\r\n if (level === 'error') {\r\n console.error(output); // NOSONAR\r\n } else if (level === 'warn') {\r\n console.warn(output); // NOSONAR\r\n } else {\r\n console.log(output); // NOSONAR\r\n }\r\n }\r\n this.dispatchEvent({ type: 'message', level, message });\r\n};\r\n\r\nexport default new Logger();\r\n","import _ from 'lodash';\r\nimport logger from './utils/logger';\r\n\r\nconst browserType = {\r\n DEFAULT: 0,\r\n SAFARI: 1,\r\n};\r\n//----------------------------------------------------------------------------\r\n// Query string\r\n\r\n/**\r\n * Escape only dangerous chars in a query string component, use a plus instead of a space.\r\n *\r\n * [RFC 3986](https://tools.ietf.org/html/rfc3986) allows the following chars in the query (see 3.4):\r\n *\r\n * A-Z a-z 0-9 - _ . ~ ! $ & ' ( ) * + , ; = : @ / ?\r\n *\r\n * For query string elements we need to escape ampersand, equal sign, and plus,\r\n * but encodeURIComponent() function encodes anything except for the following:\r\n *\r\n * A-Z a-z 0-9 - _ . ~ ! ' ( ) *\r\n *\r\n * @param {string} text - key or value to encode\r\n * @param {string} excludeExp - regexp for symbols to exclude from encoding\r\n * @returns {string} encoded string\r\n */\r\nfunction encodeQueryComponent(text, excludeExp) {\r\n const encode = (code) => String.fromCharCode(parseInt(code.substr(1), 16));\r\n return encodeURIComponent(text).replace(excludeExp, encode).replace(/%20/g, '+');\r\n}\r\n\r\n/**\r\n * Unescape dangerous chars in a query string component.\r\n *\r\n * @param {string} text - encoded key or value\r\n * @returns {string} decoded string\r\n * @see {@link encodeQueryComponent}\r\n */\r\nfunction decodeQueryComponent(text) {\r\n return decodeURIComponent(text.replace(/\\+/g, ' '));\r\n}\r\n\r\n/**\r\n * Parse URL and extract an array of parameters.\r\n * @param {string?} url - URL or query string to parse\r\n * @returns {Array} array of (key, value) pairs.\r\n */\r\nfunction getUrlParameters(url) {\r\n url = url || window.location.search;\r\n\r\n const query = url.substring(url.indexOf('?') + 1);\r\n const search = /([^&=]+)=?([^&]*)/g;\r\n const result = [];\r\n let match;\r\n\r\n while ((match = search.exec(query)) !== null) { // eslint-disable-line no-cond-assign\r\n result.push([decodeQueryComponent(match[1]), decodeQueryComponent(match[2])]);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Parse URL and extract an array of parameters as a hash.\r\n * @param {string?} url - URL or query string to parse\r\n * @returns {Object}\r\n */\r\nfunction getUrlParametersAsDict(url) {\r\n const result = {};\r\n const a = getUrlParameters(url);\r\n for (let i = 0; i < a.length; ++i) {\r\n const [key, value] = a[i];\r\n result[key] = value;\r\n }\r\n return result;\r\n}\r\n\r\nfunction resolveURL(str) {\r\n if (typeof URL !== 'undefined') {\r\n try {\r\n if (typeof window !== 'undefined') {\r\n return new URL(str, window.location).href;\r\n }\r\n return new URL(str).href;\r\n } catch {\r\n // IE 11 has a URL object with no constructor available so just try a different approach instead\r\n }\r\n }\r\n if (typeof document !== 'undefined') {\r\n const anchor = document.createElement('a');\r\n anchor.href = str;\r\n return anchor.href;\r\n }\r\n return str;\r\n}\r\n\r\n/**\r\n * Generates regular expression object that includes all symbols\r\n * listed in the argument\r\n * @param symbolStr {string} - String containing characters list.\r\n * @returns {RegExp} - Regular expression.\r\n */\r\nfunction generateRegExp(symbolStr) {\r\n const symbolList = [];\r\n\r\n for (let i = 0, n = symbolStr.length; i < n; ++i) {\r\n symbolList[symbolList.length] = symbolStr[i].charCodeAt(0).toString(16);\r\n }\r\n\r\n const listStr = symbolList.join('|');\r\n\r\n return new RegExp(`%(?:${listStr})`, 'gi');\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Create HTML element\r\n\r\nfunction createElement(tag, attrs, content) {\r\n const element = document.createElement(tag);\r\n let i;\r\n let n;\r\n if (attrs) {\r\n const keys = Object.keys(attrs);\r\n for (i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n element.setAttribute(key, attrs[key]);\r\n }\r\n }\r\n if (content) {\r\n if (!(content instanceof Array)) {\r\n content = [content];\r\n }\r\n for (i = 0, n = content.length; i < n; ++i) {\r\n const child = content[i];\r\n if (typeof child === 'string') {\r\n element.appendChild(document.createTextNode(child));\r\n } else if (child instanceof HTMLElement) {\r\n element.appendChild(child);\r\n }\r\n }\r\n }\r\n return element;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Easy inheritance\r\n\r\n/**\r\n * Derive the class from the base.\r\n * @param cls {function} - Class (constructor) to derive.\r\n * @param base {function} - Class (constructor) to derive from.\r\n * @param members {object=} - Optional instance members to add.\r\n * @param statics {object=} - Optional static class members to add.\r\n * @returns {function} Original class.\r\n */\r\nfunction deriveClass(cls, base, members, statics) {\r\n cls.prototype = _.assign(Object.create(base.prototype), { constructor: cls }, members);\r\n if (statics) {\r\n _.assign(cls, statics);\r\n }\r\n return cls;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Deep prototyping\r\n\r\nfunction deriveDeep(obj, needZeroOwnProperties) {\r\n let res = obj;\r\n let i;\r\n let n;\r\n if (obj instanceof Array) {\r\n res = new Array(obj.length);\r\n for (i = 0, n = obj.length; i < n; ++i) {\r\n res[i] = deriveDeep(obj[i]);\r\n }\r\n } else if (obj instanceof Object) {\r\n res = Object.create(obj);\r\n const keys = Object.keys(obj);\r\n for (i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n const value = obj[key];\r\n const copy = deriveDeep(value);\r\n if (copy !== value) {\r\n res[key] = copy;\r\n }\r\n }\r\n if (needZeroOwnProperties && Object.keys(res).length > 0) {\r\n res = Object.create(res);\r\n }\r\n }\r\n return res;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Colors\r\n\r\nfunction hexColor(color) {\r\n const hex = (`0000000${color.toString(16)}`).substr(-6);\r\n return `#${hex}`;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Debug tracing\r\n\r\nfunction DebugTracer(namespace) {\r\n let enabled = false;\r\n\r\n this.enable = function (on) {\r\n enabled = on;\r\n };\r\n\r\n let indent = 0;\r\n const methods = Object.keys(namespace);\r\n\r\n function wrap(method_, name_) {\r\n return function (...args) {\r\n const spaces = DebugTracer.spaces.substr(0, indent * 2);\r\n if (enabled) {\r\n logger.debug(`${spaces + name_} {`);\r\n }\r\n indent++;\r\n const result = method_.apply(this, args);\r\n indent--;\r\n if (enabled) {\r\n logger.debug(`${spaces}} // ${name_}`);\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n for (let i = 0, n = methods.length; i < n; ++i) {\r\n const name = methods[i];\r\n const method = namespace[name];\r\n if (method instanceof Function && name !== 'constructor') {\r\n namespace[name] = wrap(method, name);\r\n }\r\n }\r\n}\r\n\r\nDebugTracer.spaces = ' ';\r\n\r\nclass OutOfMemoryError extends Error {\r\n constructor(message) {\r\n super();\r\n this.name = 'OutOfMemoryError';\r\n this.message = message;\r\n }\r\n}\r\n\r\nfunction allocateTyped(TypedArrayName, size) {\r\n let result = null;\r\n try {\r\n result = new TypedArrayName(size);\r\n } catch (e) {\r\n if (e instanceof RangeError) {\r\n throw new OutOfMemoryError(e.message);\r\n } else {\r\n throw e;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Float array conversion\r\n\r\nfunction bytesToBase64(/** ArrayBuffer */ buffer) {\r\n const bytes = new Uint8Array(buffer);\r\n let binary = '';\r\n for (let i = 0; i < bytes.byteLength; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return window.btoa(binary);\r\n}\r\n\r\nfunction bytesFromBase64(/** string */ str) {\r\n const binary = window.atob(str);\r\n const bytes = new Uint8Array(binary.length);\r\n for (let i = 0; i < bytes.length; ++i) {\r\n bytes[i] = binary[i].charCodeAt(0);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\nfunction arrayToBase64(/** number[] */ array, /** function */ TypedArrayClass) {\r\n return bytesToBase64(new TypedArrayClass(array).buffer);\r\n}\r\n\r\nfunction arrayFromBase64(/** string */ str, /** function */ TypedArrayClass) {\r\n return Array.prototype.slice.call(new TypedArrayClass(bytesFromBase64(str)));\r\n}\r\n\r\n// NOTE: this is 1-level comparison\r\nfunction compareOptionsWithDefaults(opts, defOpts) {\r\n const optsStr = [];\r\n if (defOpts && opts) {\r\n const keys = Object.keys(opts);\r\n for (let p = 0; p < keys.length; ++p) {\r\n const key = keys[p];\r\n const value = opts[key];\r\n // TODO add processing for tree structure\r\n if (!(value instanceof Object) && typeof defOpts[key] !== 'undefined' && defOpts[key] !== value) {\r\n optsStr.push(`${key}:${value}`);\r\n }\r\n }\r\n if (optsStr.length > 0) {\r\n return `!${optsStr.join()}`;\r\n }\r\n }\r\n return '';\r\n}\r\n\r\nfunction isAlmostPlainObject(o) {\r\n if (_.isPlainObject(o)) {\r\n return true;\r\n }\r\n const proto = o && Object.getPrototypeOf(o);\r\n return !!proto && !proto.hasOwnProperty('constructor') && isAlmostPlainObject(proto);\r\n}\r\n\r\n/**\r\n * Build an object that contains properties (and subproperties) of `src` different from those\r\n * in `dst`. Objects are parsed recursively, other values (including arrays) are compared for\r\n * equality using `_.isEqual()`.\r\n * @param {!object} src - a new object to compare, may contain changed or new properties\r\n * @param {!object} dst - an old reference object\r\n */\r\nfunction objectsDiff(src, dst) {\r\n const diff = {};\r\n _.forIn(src, (srcValue, key) => {\r\n const dstValue = dst[key];\r\n if (isAlmostPlainObject(srcValue) && isAlmostPlainObject(dstValue)) {\r\n const deepDiff = objectsDiff(srcValue, dstValue);\r\n if (!_.isEmpty(deepDiff)) {\r\n diff[key] = deepDiff;\r\n }\r\n } else if (!_.isEqual(srcValue, dstValue)) {\r\n diff[key] = srcValue;\r\n }\r\n });\r\n return diff;\r\n}\r\n\r\nfunction forInRecursive(object, callback) {\r\n function iterateThrough(obj, prefix) {\r\n _.forIn(obj, (value, key) => {\r\n const newPref = prefix + (prefix.length > 0 ? '.' : '');\r\n if (value instanceof Object) {\r\n iterateThrough(value, newPref + key);\r\n } else if (value !== undefined) {\r\n callback(value, newPref + key);\r\n }\r\n });\r\n }\r\n iterateThrough(object, '');\r\n}\r\n\r\nfunction enquoteString(value) {\r\n if (_.isString(value)) {\r\n return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\r\n }\r\n return value;\r\n}\r\n\r\nfunction unquoteString(value) {\r\n if (!_.isString(value)) {\r\n return value;\r\n }\r\n if (value[0] === '\"' && value[value.length - 1] === '\"') {\r\n value = value.slice(1, value.length - 1);\r\n return value.replace(/\\\\\"/g, '\"');\r\n }\r\n if (value[0] === \"'\" && value[value.length - 1] === \"'\") {\r\n value = value.slice(1, value.length - 1);\r\n return value.replace(/\\\\'/g, \"'\");\r\n }\r\n throw new SyntaxError('Incorrect string format, can\\'t unqute it');\r\n}\r\n\r\nfunction getFileExtension(fileName) {\r\n return fileName.slice((Math.max(0, fileName.lastIndexOf('.')) || Infinity));\r\n}\r\n\r\nfunction splitFileName(fileName) {\r\n const ext = getFileExtension(fileName);\r\n const name = fileName.slice(0, fileName.length - ext.length);\r\n return [name, ext];\r\n}\r\n\r\nfunction dataUrlToBlob(url) {\r\n const parts = url.split(/[:;,]/);\r\n const partsCount = parts.length;\r\n if (partsCount >= 3 && parts[partsCount - 2] === 'base64') {\r\n return new Blob([bytesFromBase64(parts[partsCount - 1])]);\r\n }\r\n return null;\r\n}\r\n\r\nfunction getBrowser() {\r\n if (navigator.vendor && navigator.vendor.indexOf('Apple') > -1\r\n && navigator.userAgent\r\n && navigator.userAgent.indexOf('CriOS') === -1\r\n && navigator.userAgent.indexOf('FxiOS') === -1) {\r\n return browserType.SAFARI;\r\n }\r\n return browserType.DEFAULT;\r\n}\r\n\r\nfunction shotOpen(url) {\r\n if (typeof window !== 'undefined') {\r\n window.open().document.write(``);\r\n }\r\n}\r\n\r\nfunction shotDownload(dataUrl, filename) {\r\n if (!dataUrl || dataUrl.substr(0, 5) !== 'data:') {\r\n return;\r\n }\r\n if (!filename) {\r\n filename = ['screenshot-', +new Date(), '.png'].join('');\r\n }\r\n if (typeof window !== 'undefined' && window.navigator && window.navigator.msSaveBlob) {\r\n window.navigator.msSaveBlob(dataUrlToBlob(dataUrl), filename);\r\n } else if (typeof document !== 'undefined') {\r\n const link = document.createElement('a');\r\n link.download = filename;\r\n link.innerHTML = 'download';\r\n link.href = window.URL.createObjectURL(dataUrlToBlob(dataUrl));\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n}\r\n\r\nfunction download(data, filename, type) {\r\n const blobData = new Blob([data]);\r\n\r\n if (!filename) {\r\n filename = ['data', +new Date()].join('');\r\n }\r\n\r\n if (!type) {\r\n filename += blobData.type || '.bin';\r\n } else {\r\n filename += `.${type}`;\r\n }\r\n\r\n if (typeof window !== 'undefined' && window.navigator && window.navigator.msSaveBlob) {\r\n window.navigator.msSaveBlob(blobData, filename);\r\n } else if (typeof document !== 'undefined') {\r\n const link = document.createElement('a');\r\n link.download = filename;\r\n link.innerHTML = 'download';\r\n link.href = window.URL.createObjectURL(blobData);\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n}\r\n\r\nfunction copySubArrays(src, dst, indices, itemSize) {\r\n for (let i = 0, n = indices.length; i < n; ++i) {\r\n for (let j = 0; j < itemSize; ++j) {\r\n dst[i * itemSize + j] = src[indices[i] * itemSize + j];\r\n }\r\n }\r\n}\r\n\r\nfunction shallowCloneNode(node) {\r\n const newNode = node.cloneNode(true);\r\n newNode.worldPos = node.worldPos;\r\n // .style property is readonly, so \"newNode.style = node.style;\" won't work (and we don't need it, right?)\r\n return newNode;\r\n}\r\n\r\nconst unquotedStringRE = /^[a-zA-Z0-9_]*$/;\r\nconst enquoteHelper = ['\"', '', '\"'];\r\n\r\n// verify and correct if needed selctor identifier\r\nfunction correctSelectorIdentifier(value) {\r\n if (unquotedStringRE.test(value)) {\r\n return value;\r\n }\r\n // quote incorrect identifier\r\n enquoteHelper[1] = value;\r\n return enquoteHelper.join('');\r\n}\r\n\r\n/**\r\n * Concatenates two TypedArray. Doesn't check null refs o type equality\r\n * Attention! It must be use very rarely because requires memory reallocation every time. Use MergeTypedArraysUnsafe to\r\n * unite array of subarrays.\r\n * @param{TypedArray} first - destination array\r\n * @param{TypedArray} second - source array\r\n * @returns{TypedArray} resulting concatenated array\r\n */\r\nfunction concatTypedArraysUnsafe(first, second) {\r\n const result = new first.constructor(first.length + second.length);\r\n result.set(first);\r\n result.set(second, first.length);\r\n return result;\r\n}\r\n\r\n/**\r\n * Merges array of TypedArray into TypedArray. Doesn't check null refs o type equality\r\n * @param{array} array - source array of subarrays\r\n * @returns{TypedArray} resulting merged array\r\n */\r\nfunction mergeTypedArraysUnsafe(array) {\r\n if (array.length <= 0) {\r\n return null;\r\n }\r\n // count the size\r\n const size = array.reduce((acc, cur) => acc + cur.length, 0);\r\n // create combined array\r\n const result = new array[0].constructor(size);\r\n for (let i = 0, start = 0; i < array.length; i++) {\r\n const count = array[i].length;\r\n result.set(array[i], start);\r\n start += count;\r\n }\r\n return result;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Exports\r\n\r\nexport default {\r\n browserType,\r\n encodeQueryComponent,\r\n decodeQueryComponent,\r\n getUrlParameters,\r\n getUrlParametersAsDict,\r\n resolveURL,\r\n generateRegExp,\r\n createElement,\r\n deriveClass,\r\n deriveDeep,\r\n hexColor,\r\n DebugTracer,\r\n OutOfMemoryError,\r\n allocateTyped,\r\n bytesFromBase64,\r\n bytesToBase64,\r\n arrayFromBase64,\r\n arrayToBase64,\r\n compareOptionsWithDefaults,\r\n objectsDiff,\r\n forInRecursive,\r\n enquoteString,\r\n unquoteString,\r\n getBrowser,\r\n shotOpen,\r\n shotDownload,\r\n copySubArrays,\r\n shallowCloneNode,\r\n correctSelectorIdentifier,\r\n getFileExtension,\r\n splitFileName,\r\n download,\r\n concatTypedArraysUnsafe,\r\n mergeTypedArraysUnsafe,\r\n};\r\n","import EventDispatcher from './EventDispatcher';\r\n\r\nexport default class JobHandle extends EventDispatcher {\r\n constructor() {\r\n super();\r\n this._shouldCancel = false;\r\n }\r\n\r\n cancel() {\r\n this._shouldCancel = true;\r\n this.dispatchEvent({ type: 'cancel' });\r\n }\r\n\r\n shouldCancel() {\r\n return this._shouldCancel;\r\n }\r\n\r\n // slaves use this to notify master about their events\r\n // master routes these notifications to a single event slot\r\n notify(event) {\r\n this.dispatchEvent({ type: 'notification', slaveEvent: event });\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport utils from './utils';\r\nimport EventDispatcher from './utils/EventDispatcher';\r\n\r\nconst VERSION = 0;\r\n\r\n//----------------------------------------------------------------------------\r\n// DEFAULT SETTINGS\r\n//----------------------------------------------------------------------------\r\n\r\n/**\r\n * Polygonal complexity settings.\r\n *\r\n * @typedef PolyComplexity\r\n * @property {number} poor\r\n * @property {number} low\r\n * @property {number} medium\r\n * @property {number} high\r\n * @property {number} ultra\r\n */\r\n\r\n/**\r\n * @alias SettingsObject\r\n * @namespace\r\n */\r\nconst defaults = {\r\n /**\r\n * Default options for all available modes.\r\n * Use {@link Mode.id} as a dictionary key to access mode options.\r\n *\r\n * Usually you don't need to override these settings. You may specify mode options as a parameter during\r\n * {@link Mode} construction.\r\n *\r\n * @memberof SettingsObject#\r\n * @type {Object.}\r\n *\r\n * @property {LinesModeOptions} LN - Lines mode options.\r\n * @property {LicoriceModeOptions} LC - Licorice mode options.\r\n * @property {BallsAndSticksModeOptions} BS - Balls and Sticks mode options.\r\n * @property {VanDerWaalsModeOptions} VW - Van der Waals mode options.\r\n * @property {TraceModeOptions} TR - Trace mode options.\r\n * @property {TubeModeOptions} TU - Tube mode options.\r\n * @property {CartoonModeOptions} CA - Cartoon mode options.\r\n * @property {QuickSurfaceModeOptions} QS - Contact Surface mode options.\r\n * @property {IsoSurfaceSASModeOptions} SA - Solvent Accessible Surface mode options.\r\n * @property {IsoSurfaceSESModeOptions} SE - Solvent Excluded Surface mode options.\r\n * @property {ContactSurfaceModeOptions} CS - Contact Surface mode options.\r\n * @property {TextModeOptions} TX - Text mode options.\r\n * @property {VolumeDensityModeOptions} VD - Volume Density mode options.\r\n */\r\n modes: {\r\n //----------------------------------------------------------------------------\r\n // BALLS AND STICKS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Balls and Sticks mode options.\r\n *\r\n * @typedef BallsAndSticksModeOptions\r\n *\r\n * @property {number} atom - Sphere radius as a fraction of Van der Waals atom radius.\r\n * @property {number} bond - Cylinder radius in angstroms.\r\n * @property {number} space - Fraction of the space around one cylinder. Zero means that cylinder fills all\r\n * available space.\r\n * @property {boolean} multibond - Toggles rendering of multiple ordered bonds.\r\n * @property {number} aromrad - Minor radius of a torus for aromatic loops.\r\n * @property {boolean} showarom - Toggles rendering of aromatic loops.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n BS: {\r\n atom: 0.23,\r\n bond: 0.15,\r\n space: 0.5,\r\n multibond: true,\r\n aromrad: 0.1,\r\n showarom: true,\r\n polyComplexity: {\r\n poor: 3,\r\n low: 4,\r\n medium: 6,\r\n high: 12,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // VAN DER WAALS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Van der Waals mode options.\r\n *\r\n * @typedef VanDerWaalsModeOptions\r\n *\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n VW: {\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 8,\r\n high: 16,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // LINES\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Lines mode options.\r\n *\r\n * @typedef LinesModeOptions\r\n *\r\n * @property {boolean} multibond - Flag, that toggles rendering of multiple ordered bonds.\r\n * @property {boolean} showarom - Flag, that toggles rendering of aromatic loops.\r\n * @property {number} offsarom - Offset between bonds and aromatic cycle.\r\n * @property {number} chunkarom - Number of pieces in a-loop arc, corresponding to atom.\r\n * @property {number} atom - Collision radius for atoms picking.\r\n * @property {number} lineWidth - Line width in pixels (not used in thin lines).\r\n */\r\n LN: {\r\n multibond: true,\r\n showarom: true,\r\n offsarom: 0.2,\r\n chunkarom: 10,\r\n atom: 0.23,\r\n lineWidth: 2,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // LICORICE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Licorice mode options.\r\n *\r\n * @typedef LicoriceModeOptions\r\n *\r\n * @property {number} bond - Bond cylinder radius.\r\n * @property {number} space - Fraction of the space around one cylinder. Zero means that cylinder fills all\r\n * available space.\r\n * @property {boolean} multibond - Flag, that toggles rendering of multiple ordered bonds.\r\n * @property {number} aromrad - Minor radius of a torus for aromatic loops.\r\n * @property {boolean} showarom - Flag, that toggles rendering of aromatic loops.\r\n * @property {PolyComplexity} polyComplexity - Poly complexity values for render modes.\r\n */\r\n LC: {\r\n bond: 0.20,\r\n space: 0.0,\r\n multibond: true,\r\n aromrad: 0.1,\r\n showarom: true,\r\n polyComplexity: {\r\n poor: 3,\r\n low: 4,\r\n medium: 6,\r\n high: 12,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // SURFACE SAS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Solvent Accessible Surface mode options.\r\n *\r\n * @typedef IsoSurfaceSASModeOptions\r\n *\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {number} probeRadius - Radius of the probe.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n SA: {\r\n zClip: false,\r\n probeRadius: 1.5,\r\n subset: '',\r\n wireframe: false,\r\n polyComplexity: {\r\n poor: 6,\r\n low: 8,\r\n medium: 16,\r\n high: 30,\r\n ultra: 60,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // SURFACE SES\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Solvent Excluded Surface mode options.\r\n *\r\n * @typedef IsoSurfaceSESModeOptions\r\n *\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {number} probeRadius - Radius of the probe.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n SE: {\r\n zClip: false,\r\n probeRadius: 1.5,\r\n subset: '',\r\n wireframe: false,\r\n polyComplexity: {\r\n poor: 6,\r\n low: 8,\r\n medium: 16,\r\n high: 30,\r\n ultra: 60,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // QUICK SURFACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Quick Surface mode options.\r\n *\r\n * @typedef QuickSurfaceModeOptions\r\n *\r\n * @property {number} isoValue - Isovalue of the surface to extract.\r\n * @property {number} scale - Radius scale for the surface being built.\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} gaussLim - Gauss lim for coloring the bigger the value, the smoother our colors are.\r\n * @property {PolyComplexity} gridSpacing - Poly complexity values for render modes. In this case the value\r\n * corresponds to the grid density.\r\n */\r\n QS: {\r\n isoValue: 0.5,\r\n gaussLim: {\r\n poor: 1.5,\r\n low: 2.0,\r\n medium: 2.5,\r\n high: 3.0,\r\n ultra: 4.0,\r\n },\r\n scale: 1.0,\r\n wireframe: false,\r\n gridSpacing: {\r\n poor: 2,\r\n low: 1.5,\r\n medium: 1,\r\n high: 0.5,\r\n ultra: 0.25,\r\n },\r\n subset: '',\r\n zClip: false,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // CONTACT SURFACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Contact Surface mode options.\r\n *\r\n * @typedef ContactSurfaceModeOptions\r\n *\r\n * @property {number} isoValue - Isovalue of the surface to extract.\r\n * @property {number} probeRadius - Probe radius.\r\n * @property {number} probePositions\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Radius scale for the surface being built.\r\n * Poly complexity values for render modes. In this case the value corresponds to the grid density.\r\n */\r\n CS: {\r\n probeRadius: 1.4,\r\n isoValue: 1.5,\r\n wireframe: false,\r\n probePositions: 30,\r\n polyComplexity: {\r\n poor: 0.5,\r\n low: 1.0,\r\n medium: 1.5,\r\n high: 1.75,\r\n ultra: 2.0,\r\n },\r\n subset: '',\r\n zClip: false,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TRACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Trace mode options.\r\n *\r\n * @typedef TraceModeOptions\r\n *\r\n * @property {number} radius - Cylinder radius.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n TR: {\r\n radius: 0.30,\r\n polyComplexity: {\r\n poor: 12,\r\n low: 16,\r\n medium: 32,\r\n high: 64,\r\n ultra: 64,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TUBE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Tube mode options.\r\n *\r\n * @typedef TubeModeOptions\r\n *\r\n * @property {number} radius - Cylinder radius.\r\n * @property {number} tension - Tension for interpolation.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n * @property {number} heightSegmentsRatio - Poly complexity multiplier for height segments.\r\n */\r\n TU: {\r\n radius: 0.30,\r\n heightSegmentsRatio: 1.5,\r\n tension: -0.7,\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 10,\r\n high: 18,\r\n ultra: 34,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // CARTOON\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Cartoon mode options.\r\n *\r\n * @typedef CartoonModeOptions\r\n *\r\n * @property {number} radius - Standard tube radius.\r\n * @property {number} depth - Height of the secondary structure ribbon.\r\n * @property {number} tension - Tension for interpolation.\r\n * @proprety {object} ss - Secondary structure parameters.\r\n * @proprety {object} ss.helix - Options for helices render.\r\n * @proprety {number} ss.helix.width - Width of the secondary structure ribbon.\r\n * @proprety {number} ss.helix.arrow - Secondary structure's arrow width.\r\n * @proprety {object} ss.strand - Options for strands render.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n * polyComplexity must be even for producing symmetric arrows.\r\n * @property {number} heightSegmentsRatio - Poly complexity multiplier for height segments.\r\n */\r\n CA: {\r\n radius: 0.30,\r\n depth: 0.25,\r\n ss: {\r\n helix: {\r\n width: 1.0,\r\n arrow: 2.0,\r\n },\r\n strand: {\r\n width: 1.0,\r\n arrow: 2.0,\r\n },\r\n },\r\n heightSegmentsRatio: 1.5,\r\n tension: -0.7,\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 10,\r\n high: 18,\r\n ultra: 34,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TEXT\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Text mode options.\r\n *\r\n * @typedef TextModeOptions\r\n *\r\n * @property {string} template - Format string for building output text.\r\n * @property {string} horizontalAlign - Text alignment ('left', 'right', 'center').\r\n * @property {string} verticalAlign - Vertical text box alignment ('top', 'bottom', 'middle').\r\n * @property {number} dx - Text offset x in angstroms.\r\n * @property {number} dy - Text offset y in angstroms.\r\n * @property {number} dz - Text offset z in angstroms.\r\n * @property {string} fg - Color rule for foreground.\r\n * @property {string} bg - Color rule for background.\r\n * @property {boolean} showBg - Flag, that toggles background rendering.\r\n *\r\n */\r\n TX: {\r\n template: '{{Chain}}.{{Residue}}{{Sequence}}.{{Name}}',\r\n horizontalAlign: 'center',\r\n verticalAlign: 'middle',\r\n dx: 0,\r\n dy: 0,\r\n dz: 1,\r\n fg: 'none',\r\n bg: '0x202020',\r\n showBg: true,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // VOLUME DENSITY\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Volume density mode options.\r\n *\r\n * @typedef VolumeDensityModeOptions\r\n *\r\n * @property {number} kSigma - Noise threshold coefficient.\r\n * @property {boolean} frame - flag, that turns on box frame painting.\r\n * @property {boolean} isoMode - flag, that turns on IsoSurface mode instead of Volume Rendering.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n VD: {\r\n kSigma: 1.0,\r\n kSigmaMed: 2.0,\r\n kSigmaMax: 4.0,\r\n frame: true,\r\n isoMode: false,\r\n polyComplexity: {\r\n poor: 2,\r\n low: 3,\r\n medium: 4,\r\n high: 8,\r\n ultra: 10,\r\n },\r\n },\r\n },\r\n\r\n /**\r\n * Default options for all available colorers.\r\n * Use {@link Colorer.id} as a dictionary key to access colorer options.\r\n *\r\n * Usually you don't need to override these settings. You may specify colorer options as a parameter during\r\n * {@link Colorer} construction.\r\n *\r\n * Not all colorers have options.\r\n *\r\n * @memberof SettingsObject#\r\n * @type {Object.}\r\n *\r\n * @property {ElementColorerOptions} EL - Element colorer options.\r\n * @property {SequenceColorerOptions} SQ - Sequence colorer options.\r\n * @property {MoleculeColorerOptions} MO - Molecule colorer options.\r\n * @property {UniformColorerOptions} UN - Uniform colorer options.\r\n * @property {ConditionalColorerOptions} CO - Conditional colorer options.\r\n * @property {TemperatureColorerOptions} TM - Temperature colorer options.\r\n * @property {OccupancyColorerOptions} OC - Occupancy colorer options.\r\n * @property {HydrophobicityColorerOptions} HY - Hydrophobicity colorer options.\r\n */\r\n colorers: {\r\n /**\r\n * Element colorer options.\r\n *\r\n * @typedef ElementColorerOptions\r\n *\r\n * @property {number} carbon - Carbon color or -1 to use default.\r\n */\r\n EL: {\r\n carbon: -1,\r\n },\r\n\r\n /**\r\n * Uniform colorer options.\r\n *\r\n * @typedef UniformColorerOptions\r\n *\r\n * @property {number} color - Single color to paint with.\r\n */\r\n UN: {\r\n color: 0xFFFFFF,\r\n },\r\n\r\n /**\r\n * Conditional colorer options.\r\n *\r\n * @typedef ConditionalColorerOptions\r\n *\r\n * @property {string} subset - Selector string.\r\n * @property {number} color - Color of selected atoms.\r\n * @property {number} baseColor - Color of other atoms.\r\n */\r\n CO: {\r\n subset: 'charged',\r\n color: 0xFF0000,\r\n baseColor: 0xFFFFFF,\r\n },\r\n\r\n /**\r\n * Carbon colorer options.\r\n *\r\n * @typedef CarbonColorerOptions\r\n *\r\n * @property {number} color - Single color to paint carbons\r\n * @property {number} factor - Color factor for not carbon atoms.\r\n */\r\n CB: {\r\n color: 0x909090,\r\n factor: 0.6,\r\n },\r\n\r\n /**\r\n * Sequence colorer options.\r\n *\r\n * @typedef SequenceColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n SQ: {\r\n gradient: 'rainbow',\r\n },\r\n\r\n /**\r\n * Temperature colorer options.\r\n *\r\n * @typedef TemperatureColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n * @property {number} min - Minimal temperature.\r\n * @property {number} max - Maximal temperature.\r\n */\r\n TM: {\r\n gradient: 'temp',\r\n min: 5,\r\n max: 40,\r\n },\r\n\r\n /**\r\n * Occupancy colorer options.\r\n *\r\n * @typedef OccupancyColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n OC: {\r\n gradient: 'reds',\r\n },\r\n\r\n /**\r\n * Hydrophobicity colorer options.\r\n *\r\n * @typedef HydrophobicityColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n HY: {\r\n gradient: 'blue-red',\r\n },\r\n\r\n /**\r\n * Molecule colorer options.\r\n *\r\n * @typedef MoleculeColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n MO: {\r\n gradient: 'rainbow',\r\n },\r\n },\r\n\r\n /*\r\n * Use antialiasing in WebGL.\r\n * @type {boolean}\r\n */\r\n antialias: true,\r\n\r\n /*\r\n * Camera field of view in degrees.\r\n * @type {number}\r\n */\r\n camFov: 45.0,\r\n\r\n /*\r\n * Camera near plane distance.\r\n * @type {number}\r\n */\r\n camNear: 0.5,\r\n\r\n /*\r\n * Camera far plane distance.\r\n * @type {number}\r\n */\r\n camFar: 100.0,\r\n\r\n camDistance: 2.5,\r\n\r\n radiusToFit: 1.0,\r\n\r\n /**\r\n * @type {number}\r\n * @instance\r\n */\r\n fogNearFactor: 0.5, // [0, 1]\r\n\r\n /**\r\n * @type {number}\r\n * @instance\r\n */\r\n fogFarFactor: 1, // [0, 1]\r\n fogAlpha: 1.0,\r\n fogColor: 0x000000,\r\n fogColorEnable: false,\r\n\r\n /**\r\n * Palette used for molecule coloring.\r\n * @type {string}\r\n */\r\n palette: 'JM',\r\n\r\n /*\r\n * Geometry resolution.\r\n * @type {string}\r\n */\r\n resolution: 'medium',\r\n\r\n autoResolution: false/* true */,\r\n\r\n autoPreset: true,\r\n\r\n preset: 'default', // TODO: remove 'preset' from settings, implement autodetection\r\n\r\n presets: {\r\n // Default\r\n default: [{\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n empty: [],\r\n\r\n // Wireframe\r\n wire: [{\r\n mode: 'LN',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n // Small molecules\r\n small: [{\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n // Proteins, nucleic acids etc.\r\n macro: [{\r\n mode: 'CA',\r\n colorer: 'SS',\r\n selector: 'not hetatm',\r\n material: 'SF',\r\n }, {\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'hetatm and not water',\r\n material: 'SF',\r\n }],\r\n },\r\n\r\n objects: {\r\n line: {\r\n color: 0xFFFFFFFF,\r\n dashSize: 0.3,\r\n gapSize: 0.05,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n\r\n bg: {\r\n color: 0x202020,\r\n transparent: false,\r\n },\r\n\r\n draft: {\r\n clipPlane: false,\r\n clipPlaneFactor: 0.5,\r\n clipPlaneSpeed: 0.00003,\r\n },\r\n\r\n /*\r\n * Separate group for plugins.\r\n * Each plugin handles its field by itself.\r\n */\r\n plugins: {\r\n\r\n },\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n axes: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fog: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fps: true,\r\n\r\n /**\r\n * Switch using of z-sprites for sphere and cylinder geometry\r\n * @type {boolean}\r\n * @instance\r\n */\r\n zSprites: true,\r\n\r\n isoSurfaceFakeOpacity: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n suspendRender: true,\r\n\r\n nowater: false,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n autobuild: true,\r\n\r\n /**\r\n * Anti-aliasing.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fxaa: true,\r\n /**\r\n * Outline depths\r\n * @type {boolean}\r\n * @instance\r\n */\r\n outline: {\r\n on: false,\r\n color: 0x000000,\r\n threshold: 0.1,\r\n thickness: 1,\r\n },\r\n\r\n /**\r\n * Ambient Occlusion special effect.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n ao: false,\r\n\r\n /**\r\n * Shadows options.\r\n *\r\n * @property {boolean} shadowMap - enable/disable.\r\n * @property {string} basic/percentage-closer filtering/non-uniform randomizing pcf.\r\n * @property {number} radius for percentage-closer filtering.\r\n */\r\n shadow: {\r\n on: false,\r\n type: 'random'/* basic, pcf, random */,\r\n radius: 1.0,\r\n },\r\n\r\n /**\r\n * Auto-rotation with constant speed.\r\n * @type {number}\r\n * @instance\r\n */\r\n autoRotation: 0.0,\r\n\r\n /**\r\n * Set maximum fps for animation.\r\n * @type {number}\r\n * @instance\r\n */\r\n maxfps: 30,\r\n\r\n /**\r\n * Set fbx output precision.\r\n * @type {number}\r\n * @instance\r\n */\r\n fbxprec: 4,\r\n\r\n /**\r\n * Auto-rotation axis.\r\n *\r\n * - true: complex auto-rotation is about vertical axis\r\n * - false: rotation axis is defined by last user rotation\r\n *\r\n * @type {boolean}\r\n * @instance\r\n */\r\n autoRotationAxisFixed: true,\r\n\r\n /**\r\n * Enable zooming with mouse wheel or pinch gesture.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n zooming: true,\r\n\r\n /**\r\n * Enable picking atoms & residues with left mouse button or touch.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n picking: true,\r\n\r\n /**\r\n * Set picking mode ('atom', 'residue', 'chain', 'molecule').\r\n * @type {string}\r\n * @instance\r\n */\r\n pick: 'atom',\r\n\r\n /**\r\n * Make \"component\" and \"fragment\" editing modes available.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n editing: false,\r\n\r\n /**\r\n * Detect aromatic loops.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n aromatic: false,\r\n\r\n /**\r\n * Load only one biological unit from all those described in PDB file.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n singleUnit: true,\r\n\r\n /**\r\n * Set stereo mode ('NONE', 'SIMPLE', 'DISTORTED', 'ANAGLYPH', 'WEBVR').\r\n * @type {string}\r\n * @instance\r\n */\r\n stereo: 'NONE',\r\n\r\n /**\r\n * Enable smooth transition between views\r\n * @type {boolean}\r\n * @instance\r\n */\r\n interpolateViews: true,\r\n\r\n /**\r\n * Set transparency mode ('standard', 'prepass').\r\n * @type {string}\r\n * @instance\r\n */\r\n transparency: 'prepass',\r\n\r\n /**\r\n * Mouse translation speed.\r\n * @type {number}\r\n * @instance\r\n */\r\n translationSpeed: 2,\r\n\r\n debug: {\r\n example: 3.5,\r\n text: 'hello!',\r\n good: true,\r\n ssaoKernelRadius: 0.7,\r\n ssaoFactor: 0.7,\r\n stereoBarrel: 0.25,\r\n },\r\n use: {\r\n multiFile: false,\r\n },\r\n};\r\n\r\n//----------------------------------------------------------------------------\r\n// SETTINGS CLASS\r\n//----------------------------------------------------------------------------\r\n\r\nfunction Settings() {\r\n EventDispatcher.call(this);\r\n\r\n this.old = null;\r\n this.now = {};\r\n this._changed = {};\r\n\r\n this.reset();\r\n}\r\n\r\nutils.deriveClass(Settings, EventDispatcher, {\r\n defaults,\r\n\r\n set(path, value) {\r\n if (_.isString(path)) {\r\n const oldValue = _.get(this.now, path);\r\n if (oldValue !== value) {\r\n _.set(this.now, path, value);\r\n this._notifyChange(path, value);\r\n }\r\n } else {\r\n const diff = utils.objectsDiff(path, this.now);\r\n if (!_.isEmpty(diff)) {\r\n _.merge(this.now, diff);\r\n this._notifyChanges(diff);\r\n }\r\n }\r\n },\r\n\r\n get(path, defaultValue) {\r\n return _.get(this.now, path, defaultValue);\r\n },\r\n\r\n reset() {\r\n const diff = utils.objectsDiff(defaults, this.now);\r\n this.now = _.cloneDeep(defaults);\r\n this.old = null;\r\n this._notifyChanges(diff);\r\n this._changed = {};\r\n },\r\n\r\n checkpoint() {\r\n this.old = _.cloneDeep(this.now);\r\n this._changed = {};\r\n },\r\n\r\n _notifyChange(path, value) {\r\n this._changed[path] = true;\r\n this.dispatchEvent({ type: `change:${path}`, value });\r\n },\r\n\r\n _notifyChanges(diff) {\r\n utils.forInRecursive(diff, (deepValue, deepPath) => {\r\n this._notifyChange(deepPath, deepValue);\r\n });\r\n },\r\n\r\n changed() {\r\n if (!this.old) {\r\n return [];\r\n }\r\n const { old, now } = this;\r\n const keys = _.filter(Object.keys(this._changed), (key) => _.get(old, key) !== _.get(now, key));\r\n return keys;\r\n },\r\n\r\n applyDiffs(diffs) {\r\n if (diffs.hasOwnProperty('VERSION') && diffs.VERSION !== VERSION) {\r\n throw new Error('Settings version does not match!');\r\n }\r\n // VERSION shouldn't be presented inside settings structure\r\n delete diffs.VERSION;\r\n this.reset();\r\n this.set(diffs);\r\n },\r\n\r\n getDiffs(versioned) {\r\n const diffs = utils.objectsDiff(this.now, defaults);\r\n if (versioned) {\r\n diffs.VERSION = VERSION;\r\n }\r\n return diffs;\r\n },\r\n\r\n setPluginOpts(plugin, opts) {\r\n defaults.plugins[plugin] = _.cloneDeep(opts);\r\n this.now.plugins[plugin] = _.cloneDeep(opts);\r\n },\r\n});\r\n\r\nexport default new Settings();\r\n","import _ from 'lodash';\r\nimport settings from './settings';\r\nimport utils from './utils';\r\nimport logger from './utils/logger';\r\n\r\nlet repIndex = 0;\r\n\r\nfunction asBoolean(value) {\r\n return !(!value || value === '0' || (_.isString(value) && value.toLowerCase() === 'false'));\r\n}\r\n\r\nconst adapters = {\r\n string: String,\r\n number: Number,\r\n boolean: asBoolean,\r\n};\r\n\r\n// Level 1 assignment symbol\r\nconst cL1Ass = '=';\r\n\r\nconst cOptsSep = '!';\r\n// Level 2 (options) assignment symbol\r\nconst cL2Ass = ':';\r\n// Level 2 (options) separator symbol\r\nconst cLSep = ',';\r\n\r\nconst cCommonIgnoreSymbols = '$;@/?';\r\n/**\r\n * We may (and should) leave as is for better readability:\r\n *\r\n * $ , ; : @ / ?\r\n */\r\n/**\r\n * Generate regular expression for symbols excluded for first level encryption\r\n */\r\nfunction getLevel1ExcludedExpr() {\r\n const cLevel1Ignores = ':,';\r\n return utils.generateRegExp(cCommonIgnoreSymbols + cLevel1Ignores);\r\n}\r\n\r\n/**\r\n * Generate regular expression for symbols excluded for first level encryption\r\n * (options, etc, ..)\r\n */\r\nfunction getLevel2ExcludedExpr() {\r\n const cLevel2Ignores = ' ';\r\n return utils.generateRegExp(cCommonIgnoreSymbols + cLevel2Ignores);\r\n}\r\n\r\nconst cL1ExclExpr = getLevel1ExcludedExpr();\r\nfunction encodeQueryComponentL1(value) {\r\n return utils.encodeQueryComponent(value, cL1ExclExpr);\r\n}\r\n\r\nconst cL2ExclExpr = getLevel2ExcludedExpr();\r\nfunction encodeQueryComponentL2(value) {\r\n return utils.encodeQueryComponent(value, cL2ExclExpr);\r\n}\r\n\r\nfunction ensureRepList(opts) {\r\n let { reps } = opts;\r\n if (!reps) {\r\n const { presets } = settings.now;\r\n let preset = opts.preset || settings.now.preset;\r\n reps = presets[preset];\r\n if (!reps) {\r\n logger.warn(`Unknown preset \"${preset}\"`);\r\n [preset] = Object.keys(presets);\r\n reps = presets[preset]; // fall back to any preset\r\n }\r\n opts.preset = preset;\r\n opts.reps = utils.deriveDeep(reps, true);\r\n }\r\n}\r\n\r\nfunction ensureRepAssign(opts, prop, value) {\r\n ensureRepList(opts);\r\n const rep = opts.reps[repIndex];\r\n // prop specified twice therefore start new rep by cloning the current\r\n if (rep.hasOwnProperty(prop)) {\r\n repIndex = opts.reps.length;\r\n opts.reps[repIndex] = utils.deriveDeep(rep, true);\r\n }\r\n if (value !== undefined) {\r\n opts.reps[repIndex][prop] = value;\r\n }\r\n}\r\n\r\nfunction addObject(opts, params, options) {\r\n if (opts._objects === undefined) {\r\n opts._objects = [];\r\n }\r\n\r\n const [type, newOpts] = options;\r\n const newObj = {\r\n type,\r\n params,\r\n };\r\n\r\n if (newOpts !== undefined) {\r\n newObj.opts = newOpts;\r\n }\r\n\r\n opts._objects[opts._objects.length] = newObj;\r\n}\r\n\r\nfunction parseParams(str, params) {\r\n const sep = str.indexOf(',');\r\n if (sep >= 0) {\r\n params.push(str.substr(sep + 1).split(','));\r\n return str.substr(0, sep);\r\n }\r\n // keep this untouched if no params were extracted\r\n return str;\r\n}\r\n\r\nfunction extractArgs(input, defaultsDict, params) {\r\n if (input) {\r\n const bang = input.indexOf(cOptsSep);\r\n const inputVal = parseParams(input.substr(0, bang >= 0 ? bang : undefined), params);\r\n if (bang >= 0) {\r\n const args = input.substr(bang + 1).split(cLSep);\r\n input = inputVal;\r\n if (defaultsDict) {\r\n const defaults = defaultsDict[input];\r\n const opts = utils.deriveDeep(defaults, true);\r\n args.forEach((arg) => {\r\n const pair = arg.split(cL2Ass, 2);\r\n const key = decodeURIComponent(pair[0]);\r\n const value = decodeURIComponent(pair[1]);\r\n const adapter = adapters[typeof _.get(defaults, key)];\r\n if (adapter) {\r\n _.set(opts, key, adapter(value));\r\n } else {\r\n logger.warn(`Unknown argument \"${key}\" for option \"${input}\"`);\r\n }\r\n });\r\n if (Object.keys(opts).length > 0) {\r\n input = [input, opts];\r\n }\r\n }\r\n } else {\r\n input = inputVal;\r\n }\r\n }\r\n return input;\r\n}\r\n\r\nconst actions = {\r\n\r\n l: 'load',\r\n load: String,\r\n t: 'type',\r\n type: String,\r\n v: 'view',\r\n view: String,\r\n u: 'unit',\r\n unit: Number,\r\n menu: asBoolean,\r\n\r\n // Commands\r\n\r\n o: 'object',\r\n object(value, opts) {\r\n const params = [];\r\n let options = extractArgs(value, settings.defaults.objects, params);\r\n if (!Array.isArray(options)) {\r\n options = [options];\r\n }\r\n addObject(opts, params[0], options);\r\n },\r\n\r\n p: 'preset',\r\n preset(value, opts) {\r\n opts.preset = value;\r\n opts.reps = null;\r\n ensureRepList(opts);\r\n },\r\n\r\n r: 'rep',\r\n rep(value, opts) {\r\n ensureRepList(opts);\r\n repIndex = Number(value);\r\n // clamp the index to one greater than the last\r\n repIndex = repIndex <= opts.reps.length ? (repIndex < 0 ? 0 : repIndex) : opts.reps.length;\r\n // create a new rep if it is adjacent to the existing ones\r\n if (repIndex === opts.reps.length) {\r\n // if there is no rep to derive from, derive from the first rep of the default\r\n opts.reps[repIndex] = repIndex > 0 ? utils.deriveDeep(opts.reps[repIndex - 1], true)\r\n : utils.deriveDeep(settings.defaults.presets.default[0], true);\r\n }\r\n },\r\n\r\n s: 'select',\r\n select(value, opts) {\r\n ensureRepAssign(opts, 'selector', value);\r\n },\r\n\r\n m: 'mode',\r\n mode(value, opts) {\r\n ensureRepAssign(opts, 'mode', extractArgs(value, settings.defaults.modes));\r\n },\r\n\r\n c: 'color',\r\n color(value, opts) {\r\n ensureRepAssign(opts, 'colorer', extractArgs(value, settings.defaults.colorers));\r\n },\r\n\r\n mt: 'material',\r\n material(value, opts) {\r\n ensureRepAssign(opts, 'material', extractArgs(value, settings.defaults.materials));\r\n },\r\n\r\n dup(value, opts) {\r\n ensureRepList(opts);\r\n const { reps } = opts;\r\n const rep = reps[repIndex];\r\n repIndex = reps.length;\r\n reps[repIndex] = utils.deriveDeep(rep, true);\r\n },\r\n\r\n // Settings shortcuts\r\n\r\n ar: 'autoResolution',\r\n};\r\n\r\nfunction _fromArray(entries) {\r\n repIndex = 0;\r\n\r\n const opts = {};\r\n for (let i = 0, n = entries.length; i < n; ++i) {\r\n const /** string[] */ entry = entries[i];\r\n let /** string? */ key = entry[0];\r\n const /** string? */ value = entry[1];\r\n let /** function|string? */ action = actions[key];\r\n\r\n // unwind shortcuts and aliases\r\n while (_.isString(action)) {\r\n key = action;\r\n action = actions[key];\r\n }\r\n\r\n // either set a property or use specialized parser\r\n if (!action) {\r\n const adapter = adapters[typeof _.get(settings.defaults, key)];\r\n if (adapter) {\r\n _.set(opts, `settings.${key}`, adapter(value));\r\n } else {\r\n logger.warn(`Unknown option \"${key}\"`);\r\n }\r\n } else if (_.isFunction(action)) {\r\n const result = action(value, opts);\r\n if (result !== undefined) {\r\n opts[key] = result;\r\n }\r\n }\r\n }\r\n\r\n return opts;\r\n}\r\n\r\nfunction fromAttr(attr) {\r\n return _fromArray(utils.getUrlParameters(`?${attr || ''}`));\r\n}\r\n\r\nfunction fromURL(url) {\r\n return _fromArray(utils.getUrlParameters(url));\r\n}\r\n\r\nfunction _processOptsForURL(opts) {\r\n const str = [];\r\n let i = 0;\r\n utils.forInRecursive(opts, (value, key) => {\r\n str[i++] = encodeQueryComponentL2(key) + cL2Ass + encodeQueryComponentL2(value);\r\n });\r\n return str.join(cLSep);\r\n}\r\n\r\nfunction _processArgsForURL(args) {\r\n if (!_.isArray(args)) {\r\n return args;\r\n }\r\n if (args.length < 2) {\r\n return args[0];\r\n }\r\n return `${args[0]}${cOptsSep}${_processOptsForURL(args[1])}`;\r\n}\r\n\r\nfunction _processObjForURL(objOpts) {\r\n if (!objOpts || !objOpts.type) {\r\n return undefined;\r\n }\r\n let res = objOpts.type;\r\n if (_.isArray(objOpts.params) && objOpts.params.length > 0) {\r\n res += `,${objOpts.params.join(',')}`;\r\n }\r\n if (objOpts.opts) {\r\n res += cOptsSep + _processOptsForURL(objOpts.opts);\r\n }\r\n return res;\r\n}\r\n\r\nfunction toURL(opts) {\r\n const stringList = [];\r\n let idx = 0;\r\n\r\n function checkAndAdd(prefix, value) {\r\n if (value !== null && value !== undefined) {\r\n stringList[idx++] = encodeQueryComponentL1(prefix)\r\n + cL1Ass + encodeQueryComponentL1(value);\r\n }\r\n }\r\n\r\n function addReps(repList) {\r\n if (!repList) {\r\n return;\r\n }\r\n for (let i = 0, n = repList.length; i < n; ++i) {\r\n if (_.isEmpty(repList[i])) {\r\n continue;\r\n }\r\n checkAndAdd('r', i);\r\n checkAndAdd('s', repList[i].selector);\r\n checkAndAdd('m', _processArgsForURL(repList[i].mode));\r\n checkAndAdd('c', _processArgsForURL(repList[i].colorer));\r\n checkAndAdd('mt', _processArgsForURL(repList[i].material));\r\n }\r\n }\r\n\r\n function addObjects(objList) {\r\n if (!objList) {\r\n return;\r\n }\r\n for (let i = 0, n = objList.length; i < n; ++i) {\r\n checkAndAdd('o', _processObjForURL(objList[i]));\r\n }\r\n }\r\n\r\n checkAndAdd('l', opts.load);\r\n checkAndAdd('u', opts.unit);\r\n checkAndAdd('p', opts.preset);\r\n addReps(opts.reps);\r\n addObjects(opts._objects);\r\n\r\n checkAndAdd('v', opts.view);\r\n\r\n utils.forInRecursive(opts.settings, (value, key) => {\r\n // I heard these lines in the whispers of the Gods\r\n // Handle preset setting in reps\r\n if (key === 'preset') {\r\n return;\r\n }\r\n checkAndAdd(key, value);\r\n });\r\n\r\n let url = '';\r\n if (typeof window !== 'undefined') {\r\n const { location } = window;\r\n url = `${location.protocol}//${location.host}${location.pathname}`;\r\n }\r\n if (stringList.length > 0) {\r\n url += `?${stringList.join('&')}`;\r\n }\r\n\r\n return url;\r\n}\r\n\r\nfunction _processOptsForScript(opts) {\r\n const str = [];\r\n let i = 0;\r\n utils.forInRecursive(opts, (value, key) => {\r\n str[i++] = `${key}=${utils.enquoteString(value)}`;\r\n });\r\n return str.join(' ');\r\n}\r\n\r\nfunction _processArgsForScript(args) {\r\n if (!_.isArray(args)) {\r\n return args;\r\n }\r\n if (args.length < 2) {\r\n return args[0];\r\n }\r\n return `${args[0]} ${_processOptsForScript(args[1])}`;\r\n}\r\n\r\nfunction _processObjForScript(objOpts) {\r\n if (!objOpts || !objOpts.type) {\r\n return undefined;\r\n }\r\n let res = objOpts.type;\r\n if (_.isArray(objOpts.params) && objOpts.params.length > 0) {\r\n res += ` ${objOpts.params.map(utils.enquoteString).join(' ')}`;\r\n }\r\n if (objOpts.opts) {\r\n res += ` ${_processOptsForScript(objOpts.opts)}`;\r\n }\r\n return res;\r\n}\r\n\r\nfunction _processRepsForScript(rep, index) {\r\n const repString = [];\r\n let strIdx = 0;\r\n function localAdd(prefix, value) {\r\n if (value !== null && value !== undefined) {\r\n repString[strIdx++] = prefix + value;\r\n }\r\n }\r\n if (_.isEmpty(rep)) {\r\n return null;\r\n }\r\n localAdd('', index);\r\n localAdd('s=', utils.enquoteString(rep.selector));\r\n localAdd('m=', _processArgsForScript(rep.mode));\r\n localAdd('c=', _processArgsForScript(rep.colorer));\r\n localAdd('mt=', _processArgsForScript(rep.material));\r\n return repString.join(' ');\r\n}\r\n\r\nfunction toScript(opts) {\r\n const commandsList = [];\r\n let idx = 0;\r\n function checkAndAdd(command, value, saveQuotes) {\r\n if (value !== null && value !== undefined) {\r\n const quote = (typeof value === 'string' && saveQuotes) ? '\"' : '';\r\n commandsList[idx++] = `${command} ${quote}${value}${quote}`.trim();\r\n }\r\n }\r\n\r\n function addReps(repList) {\r\n if (!repList) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = repList.length; i < n; ++i) {\r\n checkAndAdd('rep', _processRepsForScript(repList[i], i));\r\n }\r\n }\r\n\r\n function addObjects(objList) {\r\n if (!objList) {\r\n return;\r\n }\r\n for (let i = 0, n = objList.length; i < n; ++i) {\r\n checkAndAdd('', _processObjForScript(objList[i]));\r\n }\r\n }\r\n\r\n checkAndAdd('set', 'autobuild false');\r\n checkAndAdd('load', opts.load, true);\r\n checkAndAdd('unit', opts.unit);\r\n checkAndAdd('preset', opts.preset);\r\n addReps(opts.reps);\r\n addObjects(opts._objects);\r\n\r\n utils.forInRecursive(opts.settings, (value, key) => {\r\n // I heard these lines in the whispers of the Gods\r\n // Handle preset setting in reps\r\n if (key === 'preset') {\r\n return;\r\n }\r\n checkAndAdd(`set ${key}`, value, true);\r\n });\r\n checkAndAdd('view', opts.view);\r\n checkAndAdd('set', 'autobuild true');\r\n return commandsList.join('\\n');\r\n}\r\n\r\nexport default {\r\n fromURL,\r\n fromAttr,\r\n adapters,\r\n toURL,\r\n toScript,\r\n};\r\n","/**\r\n * Atom measurements.\r\n *\r\n * @param {Residue} residue - (required) Residue containing the atom\r\n * @param {string} name - (required) Name, unique in the residue\r\n * @param {Element} type - (required) Chemical element reference\r\n * @param {THREE.Vector3} position - Registered coordinates\r\n *\r\n * @param {number} role - Role of atom inside monomer: Lead and wing are particularity interesting\r\n * @param {boolean} het - Non-standard residue indicator\r\n *\r\n * @param {number} serial - Serial number, unique in the model\r\n * @param {string} location - Alternative location indicator (usually space or A-Z)\r\n * @param {number} occupancy - Occupancy percentage, from 0 to 1\r\n * @param {number} temperature - Temperature\r\n * @param {number} charge - Charge\r\n *\r\n * @exports Atom\r\n * @constructor\r\n */\r\n\r\nclass Atom {\r\n constructor(residue, name, type, position, role, het, serial, location, occupancy, temperature, charge) {\r\n this.index = -1;\r\n this.residue = residue;\r\n this.name = name;\r\n this.element = type;\r\n this.position = position;\r\n this.role = role;\r\n this.mask = 1 | 0;\r\n\r\n this.het = het;\r\n\r\n this.serial = serial;\r\n this.location = (location || ' ').charCodeAt(0);\r\n this.occupancy = occupancy || 1;\r\n this.temperature = temperature;\r\n this.charge = charge;\r\n this.hydrogenCount = -1; // explicitly invalid\r\n this.radicalCount = 0;\r\n this.valence = -1; // explicitly invalid\r\n\r\n this.bonds = [];\r\n\r\n this.flags = 0x0000;\r\n if (type.name === 'H') {\r\n this.flags |= Atom.Flags.HYDROGEN;\r\n } else if (type.name === 'C') {\r\n this.flags |= Atom.Flags.CARBON;\r\n }\r\n }\r\n\r\n isHet() {\r\n return this.het;\r\n }\r\n\r\n isHydrogen() {\r\n return this.element.number === 1;\r\n }\r\n\r\n getVisualName() {\r\n const { name } = this;\r\n if (name.length > 0) {\r\n return name;\r\n }\r\n return this.element.name.trim();\r\n }\r\n\r\n forEachBond(process) {\r\n const { bonds } = this;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]);\r\n }\r\n }\r\n\r\n getFullName() {\r\n let name = '';\r\n if (this.residue !== null) {\r\n if (this.residue._chain !== null) {\r\n name += `${this.residue._chain.getName()}.`;\r\n }\r\n name += `${this.residue._sequence}.`;\r\n }\r\n name += this.name;\r\n return name;\r\n }\r\n\r\n /**\r\n * Enumeration of atom flag values.\r\n *\r\n * @enum {number}\r\n * @readonly\r\n */\r\n static Flags = {\r\n CARBON: 0x0001,\r\n // OXYGEN: 0x0002,\r\n // NITROGEN: 0x0004,\r\n HYDROGEN: 0x0008,\r\n /** Non-polar hydrogen (it is also a HYDROGEN) */\r\n NONPOLARH: 0x1008,\r\n };\r\n}\r\n\r\nexport default Atom;\r\n","class Element {\r\n constructor(number, name, fullName, weight, radius, radiusBonding, hValency) {\r\n this.number = number;\r\n this.name = name;\r\n this.fullName = fullName;\r\n this.weight = weight;\r\n this.radius = radius;\r\n this.radiusBonding = radiusBonding;\r\n this.hydrogenValency = hValency;\r\n }\r\n\r\n static Constants = {\r\n\r\n U1: 1,\r\n Lead: 2,\r\n U2: 3,\r\n Wing: 4,\r\n U18: 18,\r\n\r\n };\r\n\r\n static Role = {\r\n\r\n N: Element.Constants.U1,\r\n CA: Element.Constants.Lead,\r\n C: Element.Constants.U2,\r\n O: Element.Constants.Wing,\r\n SG: Element.Constants.U18,\r\n\r\n };\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\n static ByAtomicNumber = [\r\n\r\n null,\r\n new Element(1, 'H', 'Hydrogen', 1.008, 1.2, 0.23, [1]),\r\n new Element(2, 'HE', 'Helium', 4.003, 1.4, 0.93, [0]),\r\n new Element(3, 'LI', 'Lithium', 6.941, 1.82, 0.68, [1]),\r\n new Element(4, 'BE', 'Beryllium', 9.012, 1.7, 0.35, [2]),\r\n new Element(5, 'B', 'Boron', 10.81, 2.08, 0.83, [3]),\r\n new Element(6, 'C', 'Carbon', 12.011, 1.95, 0.68, [4]),\r\n new Element(7, 'N', 'Nitrogen', 14.007, 1.85, 0.68, [3, 5]),\r\n new Element(8, 'O', 'Oxygen', 15.999, 1.7, 0.68, [2, 4]),\r\n new Element(9, 'F', 'Fluorine', 18.998, 1.73, 0.64, [1]),\r\n new Element(10, 'NE', 'Neon', 20.18, 1.54, 1.12, [0]),\r\n new Element(11, 'NA', 'Sodium', 22.99, 2.27, 0.97, [1]),\r\n new Element(12, 'MG', 'Magnesium', 24.305, 1.73, 1.1, [2]),\r\n new Element(13, 'AL', 'Aluminum', 26.981, 2.05, 1.35, [3]),\r\n new Element(14, 'SI', 'Silicon', 28.086, 2.1, 1.2, [4]),\r\n new Element(15, 'P', 'Phosphorus', 30.974, 2.08, 0.75, [3, 5]),\r\n new Element(16, 'S', 'Sulfur', 32.07, 2, 1.02, [2, 4, 6]),\r\n new Element(17, 'CL', 'Chlorine', 35.453, 1.97, 0.99, [1, 3, 5, 7]),\r\n new Element(18, 'AR', 'Argon', 39.948, 1.88, 1.57, [0]),\r\n new Element(19, 'K', 'Potassium', 39.1, 2.75, 1.33, [1]),\r\n new Element(20, 'CA', 'Calcium', 40.08, 1.973, 0.99, [2]),\r\n new Element(21, 'SC', 'Scandium', 44.956, 1.7, 1.44, [0]),\r\n new Element(22, 'TI', 'Titanium', 47.88, 1.7, 1.47, [0]),\r\n new Element(23, 'V', 'Vanadium', 50.941, 1.7, 1.33, [0]),\r\n new Element(24, 'CR', 'Chromium', 52, 1.7, 1.35, [0]),\r\n new Element(25, 'MN', 'Manganese', 54.938, 1.7, 1.35, [0]),\r\n new Element(26, 'FE', 'Iron', 55.847, 1.7, 1.34, [0]),\r\n new Element(27, 'CO', 'Cobalt', 58.93, 1.7, 1.33, [0]),\r\n new Element(28, 'NI', 'Nickel', 58.69, 1.63, 1.5, [0]),\r\n new Element(29, 'CU', 'Copper', 63.55, 1.4, 1.52, [0]),\r\n new Element(30, 'ZN', 'Zinc', 65.39, 1.39, 1.45, [0]),\r\n new Element(31, 'GA', 'Gallium', 69.72, 1.87, 1.22, [3]),\r\n new Element(32, 'GE', 'Germanium', 72.61, 1.7, 1.17, [4]),\r\n new Element(33, 'AS', 'Arsenic', 74.92, 1.85, 1.21, [3, 5]),\r\n new Element(34, 'SE', 'Selenium', 78.96, 1.9, 1.22, [2, 4, 6]),\r\n new Element(35, 'BR', 'Bromine', 79.9, 2.1, 1.21, [1, 3, 5, 7]),\r\n new Element(36, 'KR', 'Krypton', 83.8, 2.02, 1.91, [0]),\r\n new Element(37, 'RB', 'Rubidium', 85.47, 1.7, 1.47, [1]),\r\n new Element(38, 'SR', 'Strontium', 87.62, 1.7, 1.12, [2]),\r\n new Element(39, 'Y', 'Yttrium', 88.91, 1.7, 1.78, [0]),\r\n new Element(40, 'ZR', 'Zirconium', 91.22, 1.7, 1.56, [0]),\r\n new Element(41, 'NB', 'Niobium', 92.91, 1.7, 1.48, [0]),\r\n new Element(42, 'MO', 'Molybdenum', 95.94, 1.7, 1.47, [0]),\r\n new Element(43, 'TC', 'Technetium', 98.91, 1.7, 1.35, [0]),\r\n new Element(44, 'RU', 'Ruthenium', 101.07, 1.7, 1.4, [0]),\r\n new Element(45, 'RH', 'Rhodium', 102.91, 1.7, 1.45, [0]),\r\n new Element(46, 'PD', 'Palladium', 106.42, 1.63, 1.5, [0]),\r\n new Element(47, 'AG', 'Silver', 107.87, 1.72, 1.59, [0]),\r\n new Element(48, 'CD', 'Cadmium', 112.41, 1.58, 1.69, [0]),\r\n new Element(49, 'IN', 'Indium', 114.82, 1.93, 1.63, [3]),\r\n new Element(50, 'SN', 'Tin', 118.71, 2.17, 1.46, [2, 4]),\r\n new Element(51, 'SB', 'Antimony', 121.75, 2.2, 1.46, [3, 5]),\r\n new Element(52, 'TE', 'Tellurium', 127.6, 2.06, 1.47, [2, 4, 6]),\r\n new Element(53, 'I', 'Iodine', 126.91, 2.15, 1.4, [1, 3, 5, 7]),\r\n new Element(54, 'XE', 'Xenon', 131.29, 2.16, 1.98, [0]),\r\n new Element(55, 'CS', 'Cesium', 132.91, 1.7, 1.67, [1]),\r\n new Element(56, 'BA', 'Barium', 137.33, 1.7, 1.34, [2]),\r\n new Element(57, 'LA', 'Lanthanum', 138.91, 1.7, 1.87, [0]),\r\n new Element(58, 'CE', 'Cerium', 140.12, 1.7, 1.83, [0]),\r\n new Element(59, 'PR', 'Praseodymium', 140.91, 1.7, 1.82, [0]),\r\n new Element(60, 'ND', 'Neodymium', 144.24, 1.7, 1.81, [0]),\r\n new Element(61, 'PM', 'Promethium', 144.9, 1.7, 1.8, [0]),\r\n new Element(62, 'SM', 'Samarium', 150.36, 1.7, 1.8, [0]),\r\n new Element(63, 'EU', 'Europium', 151.96, 1.7, 1.99, [0]),\r\n new Element(64, 'GD', 'Gadolinium', 157.25, 1.7, 1.79, [0]),\r\n new Element(65, 'TB', 'Terbium', 158.93, 1.7, 1.76, [0]),\r\n new Element(66, 'DY', 'Dysprosium', 162.5, 1.7, 1.75, [0]),\r\n new Element(67, 'HO', 'Holmium', 164.93, 1.7, 1.74, [0]),\r\n new Element(68, 'ER', 'Erbium', 167.26, 1.7, 1.73, [0]),\r\n new Element(69, 'TM', 'Thulium', 168.93, 1.7, 1.72, [0]),\r\n new Element(70, 'YB', 'Ytterbium', 173.04, 1.7, 1.94, [0]),\r\n new Element(71, 'LU', 'Lutetium', 174.97, 1.7, 1.72, [0]),\r\n new Element(72, 'HF', 'Hafnium', 178.49, 1.7, 1.57, [0]),\r\n new Element(73, 'TA', 'Tantalum', 180.95, 1.7, 1.43, [0]),\r\n new Element(74, 'W', 'Tungsten', 183.85, 1.7, 1.37, [0]),\r\n new Element(75, 'RE', 'Rhenium', 186.21, 1.7, 1.35, [0]),\r\n new Element(76, 'OS', 'Osmium', 190.2, 1.7, 1.37, [0]),\r\n new Element(77, 'IR', 'Iridium', 192.22, 1.7, 1.32, [0]),\r\n new Element(78, 'PT', 'Platinum', 195.08, 1.72, 1.5, [0]),\r\n new Element(79, 'AU', 'Gold', 196.97, 1.66, 1.5, [0]),\r\n new Element(80, 'HG', 'Mercury', 200.59, 1.55, 1.7, [0]),\r\n new Element(81, 'TL', 'Thallium', 204.38, 1.96, 1.55, [1, 3]),\r\n new Element(82, 'PB', 'Lead', 207.2, 2.02, 1.54, [2, 4]),\r\n new Element(83, 'BI', 'Bismuth', 208.98, 1.7, 1.54, [3, 5]),\r\n new Element(84, 'PO', 'Polonium', 210, 1.7, 1.68, [2, 4, 6]),\r\n new Element(85, 'AT', 'Astatine', 210, 1.7, 1.7, [1, 3, 5, 7]),\r\n new Element(86, 'RN', 'Radon', 222, 1.7, 2.4, [0]),\r\n new Element(87, 'FR', 'Francium', 223, 1.7, 2, [1]),\r\n new Element(88, 'RA', 'Radium', 226.03, 1.7, 1.9, [2]),\r\n new Element(89, 'AC', 'Actinium', 227.03, 1.7, 1.88, [0]),\r\n new Element(90, 'TH', 'Thorium', 232.04, 1.7, 1.79, [0]),\r\n new Element(91, 'PA', 'Protactinium', 231.04, 1.7, 1.61, [0]),\r\n new Element(92, 'U', 'Uranium', 238.03, 1.86, 1.58, [0]),\r\n new Element(93, 'NP', 'Neptunium', 237.05, 1.7, 1.55, [0]),\r\n new Element(94, 'PU', 'Plutonium', 239.1, 1.7, 1.53, [0]),\r\n new Element(95, 'AM', 'Americium', 243.1, 1.7, 1.51, [0]),\r\n new Element(96, 'CM', 'Curium', 247.1, 1.7, 1.5, [0]),\r\n new Element(97, 'BK', 'Berkelium', 247.1, 1.7, 1.5, [0]),\r\n new Element(98, 'CF', 'Californium', 252.1, 1.7, 1.5, [0]),\r\n new Element(99, 'ES', 'Einsteinium', 252.1, 1.7, 1.5, [0]),\r\n new Element(100, 'FM', 'Fermium', 257.1, 1.7, 1.5, [0]),\r\n new Element(101, 'MD', 'Mendelevium', 256.1, 1.7, 1.5, [0]),\r\n new Element(102, 'NO', 'Nobelium', 259.1, 1.7, 1.5, [0]),\r\n new Element(103, 'LR', 'Lawrencium', 260.1, 1.7, 1.5, [0]),\r\n new Element(104, 'RF', 'Rutherfordium', 261, 1.7, 1.6, [0]),\r\n new Element(105, 'DB', 'Dubnium', 262, 1.7, 1.6, [0]),\r\n new Element(106, 'SG', 'Seaborgium', 263, 1.7, 1.6, [0]),\r\n new Element(107, 'BH', 'Bohrium', 262, 1.7, 1.6, [0]),\r\n new Element(108, 'HS', 'Hassium', 265, 1.7, 1.6, [0]),\r\n new Element(109, 'MT', 'Meitnerium', 268, 1.7, 1.6, [0]),\r\n\r\n ];\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\n static ByName = {\r\n // Duplicate atomic numbers (isotopes)\r\n\r\n D: new Element(1, 'D', 'Deuterium', 2.014, 1.2, 0.23, [1]),\r\n T: new Element(1, 'T', 'Tritium', 3.016, 1.2, 0.23, [1]),\r\n\r\n // All regular elements will be added later, automatically\r\n };\r\n}\r\n\r\n(function () {\r\n const byAtomicNumber = Element.ByAtomicNumber;\r\n const byName = Element.ByName;\r\n for (let i = 0, n = byAtomicNumber.length; i < n; ++i) {\r\n const element = byAtomicNumber[i];\r\n if (element) {\r\n byName[element.name] = element;\r\n }\r\n }\r\n}());\r\n\r\n// find atom type by chemical element (or create if missing)\r\nElement.getByName = function (element) {\r\n let type = Element.ByName[element];\r\n if (!type) {\r\n type = Element.ByName[element] = new Element(0, element, 'Unknown', 0, 1.0, 0.01, [0]);\r\n }\r\n return type;\r\n};\r\n\r\nexport default Element;\r\n","const cBondTypes = {\r\n /** Was generated manually */\r\n UNKNOWN: 0,\r\n /** Simple covalent bond */\r\n COVALENT: 1,\r\n /** Aromatic bond */\r\n AROMATIC: 2,\r\n};\r\n\r\nfunction getAtomPos(atom) {\r\n return atom.position;\r\n}\r\n\r\n/**\r\n * Bond between atoms.\r\n *\r\n * @param {Atom} left - The first atom.\r\n * @param {Atom} right - The second atom.\r\n * @param {number} order - Order of current bond.\r\n * @param {number} type - Bond type.\r\n * @param {boolean} fixed - Indicator of a pre-specified connection (in contrast with guessed one).\r\n *\r\n * @exports Bond\r\n * @constructor\r\n */\r\nclass Bond {\r\n constructor(left, right, order, type, fixed) {\r\n this._left = left;\r\n this._right = right;\r\n this._fixed = fixed;\r\n this._index = -1;\r\n if (left > right) {\r\n throw new Error('In a bond atom indices must be in increasing order');\r\n }\r\n this._order = order;\r\n this._type = type;\r\n }\r\n\r\n getLeft() {\r\n return this._left;\r\n }\r\n\r\n getRight() {\r\n return this._right;\r\n }\r\n\r\n getOrder() {\r\n return this._order;\r\n }\r\n\r\n calcLength() {\r\n return this._left.position.distanceTo(this._right.position);\r\n }\r\n\r\n _forEachNeighbour(currAtom, process) {\r\n const { bonds } = currAtom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]._left !== currAtom ? bonds[i]._left : bonds[i]._right);\r\n }\r\n }\r\n\r\n forEachLevelOne(process) {\r\n const left = this._left;\r\n const right = this._right;\r\n this._forEachNeighbour(left, (atom) => {\r\n if (atom === right) {\r\n return;\r\n }\r\n process(atom);\r\n });\r\n this._forEachNeighbour(right, (atom) => {\r\n if (atom === left) {\r\n return;\r\n }\r\n process(atom);\r\n });\r\n }\r\n\r\n forEachLevelTwo(process) {\r\n // TODO refactor this piece of an art?\r\n const left = this._left;\r\n const right = this._right;\r\n const self = this;\r\n self._forEachNeighbour(left, (atom) => {\r\n if (atom === right) {\r\n return;\r\n }\r\n self._forEachNeighbour(atom, (l2Atom) => {\r\n if (l2Atom === left) {\r\n return;\r\n }\r\n process(l2Atom);\r\n });\r\n });\r\n self._forEachNeighbour(right, (atom) => {\r\n if (atom === left) {\r\n return;\r\n }\r\n self._forEachNeighbour(atom, (l2Atom) => {\r\n if (l2Atom === right) {\r\n return;\r\n }\r\n process(l2Atom);\r\n });\r\n });\r\n }\r\n\r\n _fixDir(refPoint, currDir, posGetter) {\r\n // count atoms to the right and to the left of the current plane\r\n let rightCount = 0;\r\n let leftCount = 0;\r\n const tmpVec = refPoint.clone();\r\n function checkDir(atom) {\r\n tmpVec.copy(posGetter(atom));\r\n tmpVec.sub(refPoint);\r\n const dotProd = currDir.dot(tmpVec);\r\n if (dotProd > 0) {\r\n ++rightCount;\r\n } else {\r\n ++leftCount;\r\n }\r\n }\r\n function checkCarbon(atom) {\r\n if (atom.element.name === 'C') {\r\n checkDir(atom);\r\n }\r\n }\r\n // count all atoms to the left and right of our plane, start from level 1 and carbons\r\n const stages = [\r\n [this.forEachLevelOne, checkCarbon],\r\n [this.forEachLevelOne, checkDir],\r\n [this.forEachLevelTwo, checkCarbon],\r\n [this.forEachLevelTwo, checkDir],\r\n ];\r\n\r\n for (let stageId = 0; stageId < stages.length; ++stageId) {\r\n stages[stageId][0].call(this, stages[stageId][1]);\r\n if (leftCount > rightCount) {\r\n return currDir.multiplyScalar(-1);\r\n }\r\n if (leftCount < rightCount) {\r\n return currDir;\r\n }\r\n }\r\n return currDir;\r\n }\r\n\r\n calcNormalDir(posGetter) {\r\n const left = this._left;\r\n const right = this._right;\r\n let first = left;\r\n let second = right;\r\n posGetter = posGetter === undefined ? getAtomPos : posGetter;\r\n if (left.bonds.length > right.bonds.length) {\r\n first = right;\r\n second = left;\r\n }\r\n let third = first;\r\n let maxNeibs = 0;\r\n const { bonds } = second;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n let another = bonds[i]._left;\r\n if (bonds[i]._left === second) {\r\n another = bonds[i]._right;\r\n }\r\n if (another.bonds.length > maxNeibs && another !== first) {\r\n third = another;\r\n maxNeibs = another.bonds.length;\r\n }\r\n }\r\n const secondPos = posGetter(second);\r\n const firstV = posGetter(first).clone().sub(secondPos);\r\n const secondV = posGetter(third).clone().sub(secondPos);\r\n secondV.crossVectors(firstV, secondV);\r\n if (secondV.lengthSq() < 0.0001) {\r\n secondV.set(0, 1, 0);\r\n }\r\n firstV.normalize();\r\n secondV.normalize();\r\n firstV.crossVectors(secondV, firstV);\r\n if (firstV.lengthSq() < 0.0001) {\r\n firstV.set(0, 1, 0);\r\n }\r\n firstV.normalize();\r\n return this._fixDir(secondPos, firstV, posGetter);\r\n }\r\n\r\n static BondType = cBondTypes;\r\n}\r\n\r\nBond.prototype.BondType = cBondTypes;\r\n\r\nexport default Bond;\r\n","import * as THREE from 'three';\r\nimport Atom from './Atom';\r\nimport Element from './Element';\r\n\r\nconst cNucleicControlNames = ['C3\\'', 'C3*', 'P', 'H5T', 'H3T'];\r\nconst cNucleicWing1Names = ['OP1', 'O1P'];\r\nconst cNucleicWing2Names = ['OP2', 'O2P'];\r\n\r\nconst cCylinderSource = ['C3\\'', 'C3*', 'C1', 'C1\\'', 'C1*', 'P'];\r\nconst cCylinderTarget = [{\r\n types: ['A', 'DA', 'G', 'DG'],\r\n atoms: ['N1'],\r\n}, {\r\n types: ['C', 'DC'],\r\n atoms: ['N3'],\r\n}, {\r\n types: ['T', 'DT', 'U', 'DU'],\r\n atoms: ['O4'],\r\n}];\r\n\r\n/**\r\n * Residue instance.\r\n *\r\n * @param {Chain} chain - Chain this residue belongs to.\r\n * @param {ResidueType} type - Generic residue instance type.\r\n * @param {number} sequence - Sequence ID.\r\n * @param {string} icode - One character insertion code (usually space or A-Z).\r\n *\r\n * @exports Residue\r\n * @constructor\r\n */\r\nclass Residue {\r\n constructor(chain, type, sequence, icode) {\r\n this._chain = chain;\r\n this._component = null;\r\n this._type = type;\r\n this._sequence = sequence;\r\n this._icode = icode;\r\n this._mask = 1 | 0;\r\n this._index = -1;\r\n\r\n this._atoms = [];\r\n this._secondary = null;\r\n this._firstAtom = null;\r\n this._leadAtom = null;\r\n this._wingAtom = null;\r\n this._lastAtom = null;\r\n this._controlPoint = null;\r\n this._midPoint = null;\r\n this._wingVector = null;\r\n this._cylinders = null;\r\n this._isValid = true;\r\n this._het = false;\r\n this._molecule = null;\r\n this.temperature = null;\r\n this.occupancy = null;\r\n }\r\n\r\n // Getters and setters\r\n getChain() {\r\n return this._chain;\r\n }\r\n\r\n getMolecule() {\r\n return this._molecule;\r\n }\r\n\r\n getType() {\r\n return this._type;\r\n }\r\n\r\n getSequence() {\r\n return this._sequence;\r\n }\r\n\r\n getSecondary() {\r\n return this._secondary;\r\n }\r\n\r\n getICode() {\r\n return this._icode;\r\n }\r\n\r\n // Other methods\r\n\r\n addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge) {\r\n const atom = new Atom(this, name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n const complex = this._chain.getComplex();\r\n complex.addAtom(atom);\r\n this._atoms.push(atom);\r\n this._het = this._het || het;\r\n return atom;\r\n }\r\n\r\n getAtomCount() {\r\n return this._atoms.length;\r\n }\r\n\r\n forEachAtom(process) {\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n if (process(atoms[i])) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n _findAtomByName(name) {\r\n let res = null;\r\n this.forEachAtom((atom) => {\r\n if (atom.name === name) {\r\n res = atom;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return res;\r\n }\r\n\r\n _findFirstAtomInList(names) {\r\n let res = null;\r\n for (let i = 0; i < names.length; ++i) {\r\n res = this._findAtomByName(names[i]);\r\n if (res !== null) {\r\n return res;\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n mask &= atoms[i].mask;\r\n }\r\n this._mask = mask;\r\n }\r\n\r\n getCylinderTargetList() {\r\n const type = this._type._name;\r\n for (let i = 0, n = cCylinderTarget.length; i < n; ++i) {\r\n for (let j = 0, m = cCylinderTarget[i].types.length; j < m; ++j) {\r\n if (type === cCylinderTarget[i].types[j]) {\r\n return cCylinderTarget[i].atoms;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _detectLeadWing(dst, next, getAtomPosition) {\r\n const leadAtom = this._findFirstAtomInList(cNucleicControlNames);\r\n let wingStart = this._findFirstAtomInList(cNucleicWing1Names);\r\n let wingEnd = this._findFirstAtomInList(cNucleicWing2Names);\r\n\r\n if (wingStart === null && next !== null) {\r\n wingStart = next._findFirstAtomInList(cNucleicWing1Names);\r\n }\r\n\r\n if (wingEnd === null && next !== null) {\r\n wingEnd = next._findFirstAtomInList(cNucleicWing2Names);\r\n }\r\n\r\n if (leadAtom === null || wingStart === null || wingEnd === null) {\r\n return;\r\n }\r\n\r\n dst._leadAtom = leadAtom;\r\n dst._controlPoint = getAtomPosition(leadAtom);\r\n dst._wingVector = getAtomPosition(wingEnd).clone().sub(getAtomPosition(wingStart));\r\n dst._isValid = true;\r\n\r\n const cylSource = this._findFirstAtomInList(cCylinderSource);\r\n const targetList = this.getCylinderTargetList();\r\n const cylTarget = targetList !== null ? this._findFirstAtomInList(targetList) : null;\r\n if (cylSource === null || cylTarget === null) {\r\n return;\r\n }\r\n dst._cylinders = [getAtomPosition(cylSource), getAtomPosition(cylTarget)];\r\n }\r\n\r\n calcWing(prevLeadPos, currLeadPos, prevWingPos, prevWing) {\r\n const vectorA = currLeadPos.clone().sub(prevLeadPos);\r\n const vectorB = prevLeadPos.clone().sub(prevWingPos);\r\n vectorB.crossVectors(vectorA, vectorB);\r\n vectorB.crossVectors(vectorA, vectorB).normalize();\r\n if (prevWing !== null && prevWing.length() > 0.0001) {\r\n const needToNegate = vectorB.length() > 0.0001 && Math.abs(prevWing.angleTo(vectorB)) > Math.PI / 2;\r\n if (needToNegate) {\r\n vectorB.negate();\r\n }\r\n }\r\n return vectorB;\r\n }\r\n\r\n _innerFinalize(prevRes, prev, nextRes, dst, chainAsNucleic, getAtomPosition) {\r\n const bFirstInChain = prev === null;\r\n\r\n const lp = getAtomPosition(this._leadAtom);\r\n const currLeadPos = new THREE.Vector3(lp.x, lp.y, lp.z);\r\n if (chainAsNucleic) {\r\n this._detectLeadWing(dst, nextRes, getAtomPosition);\r\n return;\r\n }\r\n\r\n if (bFirstInChain) { // for first one in chain\r\n dst._midPoint = getAtomPosition(this._firstAtom).clone();\r\n } else {\r\n const prevLeadPos = prev._controlPoint; // lead point of previous monomer\r\n dst._midPoint = prevLeadPos.clone().lerp(currLeadPos, 0.5);\r\n dst._wingVector = this.calcWing(prevLeadPos, currLeadPos, getAtomPosition(prevRes._wingAtom), prev._wingVector);\r\n }\r\n dst._controlPoint = currLeadPos;\r\n }\r\n\r\n _finalize2(prev, next, asNucleic) {\r\n // Should be called AFTER first finalize\r\n this._innerFinalize(prev, prev, next, this, asNucleic, (atom) => atom.position);\r\n }\r\n\r\n isConnected(anotherResidue) {\r\n if (this._chain !== anotherResidue._chain) {\r\n return false;\r\n }\r\n if (this === anotherResidue) {\r\n return true;\r\n }\r\n let res = false;\r\n this.forEachAtom((atom) => {\r\n const { bonds } = atom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n const bond = bonds[i];\r\n if (bond._left.residue === anotherResidue || bond._right.residue === anotherResidue) {\r\n res = true;\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n return res;\r\n }\r\n\r\n _finalize() {\r\n const self = this;\r\n [this._firstAtom] = this._atoms;\r\n this._lastAtom = this._atoms[this._atoms.length - 1];\r\n\r\n this._leadAtom = null;\r\n this._wingAtom = null;\r\n\r\n let tempCount = 0;\r\n let temperature = 0; // average temperature\r\n let occupCount = 0;\r\n let occupancy = 0; // average occupancy\r\n this.forEachAtom((a) => {\r\n if (self._leadAtom === null) {\r\n if (a.role === Element.Constants.Lead) {\r\n self._leadAtom = a;\r\n }\r\n }\r\n if (self._wingAtom === null) {\r\n if (a.role === Element.Constants.Wing) {\r\n self._wingAtom = a;\r\n }\r\n }\r\n if (a.temperature) {\r\n temperature += a.temperature;\r\n tempCount++;\r\n }\r\n if (a.occupancy) {\r\n occupancy += a.occupancy;\r\n occupCount++;\r\n }\r\n return (self._leadAtom !== null && self._wingAtom !== null);\r\n });\r\n\r\n if (tempCount > 0) {\r\n this.temperature = temperature / tempCount;\r\n }\r\n if (occupCount > 0) {\r\n this.occupancy = occupancy / occupCount;\r\n }\r\n\r\n // Still try to make monomer look valid\r\n if (this._leadAtom === null || this._wingAtom === null) {\r\n this._isValid = false;\r\n }\r\n if (this._leadAtom === null) {\r\n this._leadAtom = this._firstAtom;\r\n }\r\n if (this._wingAtom === null) {\r\n this._wingAtom = this._lastAtom;\r\n }\r\n }\r\n}\r\n\r\nexport default Residue;\r\n","/**\r\n * Residue type.\r\n *\r\n * Predefined acid or created with HET, HETNAM, etc.\r\n *\r\n * @param {string} name - Short name, either standard (ALA, MET, etc.) or non-standard one.\r\n * @param {string} fullName - Full residue name.\r\n * @param {string} letterCode - 1-letter symbol.\r\n *\r\n * @exports ResidueType\r\n * @constructor\r\n */\r\nclass ResidueType {\r\n constructor(name, fullName, letterCode) {\r\n this._name = name;\r\n this._fullName = fullName;\r\n this.letterCode = letterCode;\r\n this.flags = 0x0000;\r\n }\r\n\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\n static StandardTypes = {\r\n\r\n ALA: new ResidueType('ALA', 'Alanine', 'A'),\r\n ARG: new ResidueType('ARG', 'Arginine', 'R'),\r\n ASN: new ResidueType('ASN', 'Asparagine', 'N'),\r\n ASP: new ResidueType('ASP', 'Aspartic Acid', 'D'),\r\n CYS: new ResidueType('CYS', 'Cysteine', 'C'),\r\n GLN: new ResidueType('GLN', 'Glutamine', 'Q'),\r\n GLU: new ResidueType('GLU', 'Glutamic Acid', 'E'),\r\n GLY: new ResidueType('GLY', 'Glycine', 'G'),\r\n HIS: new ResidueType('HIS', 'Histidine', 'H'),\r\n ILE: new ResidueType('ILE', 'Isoleucine', 'I'),\r\n LEU: new ResidueType('LEU', 'Leucine', 'L'),\r\n LYS: new ResidueType('LYS', 'Lysine', 'K'),\r\n MET: new ResidueType('MET', 'Methionine', 'M'),\r\n PHE: new ResidueType('PHE', 'Phenylalanine', 'F'),\r\n PRO: new ResidueType('PRO', 'Proline', 'P'),\r\n PYL: new ResidueType('PYL', 'Pyrrolysine', 'O'),\r\n SEC: new ResidueType('SEC', 'Selenocysteine', 'U'),\r\n SER: new ResidueType('SER', 'Serine', 'S'),\r\n THR: new ResidueType('THR', 'Threonine', 'T'),\r\n TRP: new ResidueType('TRP', 'Tryptophan', 'W'),\r\n TYR: new ResidueType('TYR', 'Tyrosine', 'Y'),\r\n VAL: new ResidueType('VAL', 'Valine', 'V'),\r\n A: new ResidueType('A', 'Adenine', 'A'),\r\n C: new ResidueType('C', 'Cytosine', 'C'),\r\n G: new ResidueType('G', 'Guanine', 'G'),\r\n I: new ResidueType('I', 'Inosine', 'I'),\r\n T: new ResidueType('T', 'Thymine', 'T'),\r\n U: new ResidueType('U', 'Uracil', 'U'),\r\n DA: new ResidueType('DA', 'Adenine', 'A'),\r\n DC: new ResidueType('DC', 'Cytosine', 'C'),\r\n DG: new ResidueType('DG', 'Guanine', 'G'),\r\n DI: new ResidueType('DI', 'Inosine', 'I'),\r\n DT: new ResidueType('DT', 'Thymine', 'T'),\r\n DU: new ResidueType('DU', 'Uracil', 'U'),\r\n '+A': new ResidueType('+A', 'Adenine', 'A'),\r\n '+C': new ResidueType('+C', 'Cytosine', 'C'),\r\n '+G': new ResidueType('+G', 'Guanine', 'G'),\r\n '+I': new ResidueType('+I', 'Inosine', 'I'),\r\n '+T': new ResidueType('+T', 'Thymine', 'T'),\r\n '+U': new ResidueType('+U', 'Uracil', 'U'),\r\n WAT: new ResidueType('WAT', 'Water', ''),\r\n H2O: new ResidueType('H2O', 'Water', ''),\r\n HOH: new ResidueType('HOH', 'Water', ''),\r\n DOD: new ResidueType('DOD', 'Water', ''),\r\n UNK: new ResidueType('UNK', 'Unknown', ''),\r\n UNL: new ResidueType('UNL', 'Unknown Ligand', ''),\r\n\r\n };\r\n\r\n /**\r\n * Enumeration of residue flag values.\r\n *\r\n * @enum {number}\r\n * @readonly\r\n */\r\n static Flags = {\r\n // Amino acids\r\n /** Amino acid residue */\r\n PROTEIN: 0x0001,\r\n /** Basic amino acid residue */\r\n BASIC: 0x0002,\r\n /** Acidic amino acid residue */\r\n ACIDIC: 0x0004,\r\n /** Polar uncharged side chain amino acid residue */\r\n POLAR: 0x0008,\r\n /** Non-polar hydrophobic side chain amino acid residue */\r\n NONPOLAR: 0x0010,\r\n /** Aromatic amino acid residue */\r\n AROMATIC: 0x0020,\r\n\r\n // Nucleic acids\r\n\r\n /** Nucleic residue */\r\n NUCLEIC: 0x0100,\r\n /** Purine nucleic residue */\r\n PURINE: 0x0200,\r\n /** Pyrimidine nucleic residue */\r\n PYRIMIDINE: 0x0400,\r\n /** DNA */\r\n DNA: 0x0800,\r\n /** RNA */\r\n RNA: 0x1000,\r\n\r\n /** Water */\r\n WATER: 0x10000,\r\n };\r\n}\r\n\r\n// Flag combinations\r\nfunction _addFlag(flag, list) {\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n const res = ResidueType.StandardTypes[list[i]];\r\n if (res) {\r\n res.flags |= flag;\r\n }\r\n }\r\n}\r\n\r\nconst { Flags } = ResidueType;\r\n_addFlag(Flags.WATER, ['WAT', 'H2O', 'HOH', 'DOD']);\r\n\r\n_addFlag(Flags.PROTEIN, [\r\n 'ALA', 'ARG', 'ASN', 'ASP', 'CYS', 'GLY', 'GLU', 'GLN', 'HIS', 'ILE',\r\n 'LEU', 'LYS', 'MET', 'PHE', 'PRO', 'PYL', 'SEC', 'SER', 'THR', 'TRP',\r\n 'TYR', 'VAL',\r\n]);\r\n_addFlag(Flags.BASIC, ['ARG', 'HIS', 'LYS']);\r\n_addFlag(Flags.ACIDIC, ['ASP', 'GLU']);\r\n_addFlag(Flags.POLAR, ['ASN', 'CYS', 'GLN', 'SER', 'THR', 'TYR']);\r\n_addFlag(Flags.NONPOLAR, ['ALA', 'ILE', 'LEU', 'MET', 'PHE', 'PRO', 'TRP', 'VAL', 'GLY']);\r\n_addFlag(Flags.AROMATIC, ['PHE', 'TRP', 'TYR']);\r\n\r\n_addFlag(Flags.NUCLEIC, [\r\n 'A', 'G', 'I', 'DA', 'DG', 'DI', '+A', '+G', '+I',\r\n 'C', 'T', 'U', 'DC', 'DT', 'DU', '+C', '+T', '+U',\r\n]);\r\n_addFlag(Flags.PURINE, ['A', 'G', 'I', 'DA', 'DG', 'DI', '+A', '+G', '+I']);\r\n_addFlag(Flags.PYRIMIDINE, ['C', 'T', 'U', 'DC', 'DT', 'DU', '+C', '+T', '+U']);\r\n_addFlag(Flags.DNA, ['DA', 'DG', 'DI', 'DC', 'DT', 'DU']);\r\n_addFlag(Flags.RNA, ['A', 'G', 'I', 'C', 'T', 'U']);\r\n// Table of kdHydrophobicity\r\nconst hydro = {\r\n ILE: 4.5,\r\n VAL: 4.2,\r\n LEU: 3.8,\r\n PHE: 2.8,\r\n CYS: 2.5,\r\n MET: 1.9,\r\n ALA: 1.8,\r\n GLY: -0.4,\r\n THR: -0.7,\r\n SER: -0.8,\r\n TRP: -0.9,\r\n TYR: -1.3,\r\n PRO: -1.6,\r\n HIS: -3.2,\r\n GLU: -3.5,\r\n GLN: -3.5,\r\n ASP: -3.5,\r\n ASN: -3.5,\r\n LYS: -3.9,\r\n ARG: -4.5,\r\n};\r\n\r\nfunction _addParam(param, list) {\r\n const keys = Object.keys(list);\r\n for (let i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n const value = list[key];\r\n ResidueType.StandardTypes[key][param] = value;\r\n }\r\n}\r\n\r\n_addParam('hydrophobicity', hydro);\r\n\r\nexport default ResidueType;\r\n","import * as THREE from 'three';\r\nimport Residue from './Residue';\r\nimport ResidueType from './ResidueType';\r\n\r\n/**\r\n * Residues in chain are either amino acid either nucleic acid (and water)\r\n * There might be some modified/mutated residues, which type could not be determined by their name (nucleic or amino); In this\r\n * case firstly program definites the chain type (by well-known residues) and then definites modified/mutated residues\r\n */\r\nconst ChainType = {\r\n UNKNOWN: 0,\r\n PROTEIN: 1,\r\n NUCLEIC: 2,\r\n};\r\n\r\n/**\r\n * Residue chain.\r\n *\r\n * @param {Complex} complex - Molecular complex this chain belongs to.\r\n * @param {string} name - One character identifier (usually space, A-Z, 0-9, or a-z).\r\n *\r\n * @exports Chain\r\n * @constructor\r\n */\r\nclass Chain {\r\n constructor(complex, name) {\r\n this._complex = complex;\r\n this._name = name;\r\n this._mask = 1 | 0;\r\n this._index = -1;\r\n this._residues = [];\r\n\r\n this.minSequence = Number.POSITIVE_INFINITY;\r\n this.maxSequence = Number.NEGATIVE_INFINITY;\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getResidues() {\r\n return this._residues;\r\n }\r\n\r\n _determineType() {\r\n const residues = this._residues;\r\n\r\n const { PROTEIN, NUCLEIC } = ResidueType.Flags;\r\n\r\n this.type = ChainType.UNKNOWN;\r\n\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const { flags } = residues[i]._type;\r\n\r\n if ((flags & NUCLEIC) !== 0) {\r\n this.type = ChainType.NUCLEIC;\r\n break;\r\n } else if ((flags & PROTEIN) !== 0) {\r\n this.type = ChainType.PROTEIN;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Finds thre residue with specified sequence number and inserion code\r\n * @param {Number} seqNum sequence number\r\n * @param {string} iCode insertion code\r\n * @returns {*} Residue or null if not found\r\n */\r\n findResidue(seqNum, iCode) {\r\n const residues = this._residues;\r\n\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const res = residues[i];\r\n if (res._sequence === seqNum && res._icode === iCode) {\r\n return [res, i];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _finalize() {\r\n this._determineType();\r\n\r\n const residues = this._residues;\r\n\r\n let prev = null;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const next = (i + 1 < n) ? residues[i + 1] : null;\r\n const curr = residues[i];\r\n // TODO: skip invalid residues\r\n if (1 /* curr._isValid */) { // eslint-disable-line no-constant-condition\r\n curr._finalize2(prev, next, this.type === ChainType.NUCLEIC);\r\n prev = curr;\r\n }\r\n }\r\n\r\n // fix very first wing\r\n if (residues.length > 1 && residues[1]._wingVector) {\r\n const p = residues[1]._wingVector;\r\n residues[0]._wingVector = new THREE.Vector3(p.x, p.y, p.z);\r\n } else if (residues.length > 0) {\r\n residues[0]._wingVector = new THREE.Vector3(1, 0, 0);\r\n }\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const residues = this._residues;\r\n let prev = null;\r\n let prevData = null;\r\n const frameRes = frameData._residues;\r\n const n = residues.length;\r\n function getAtomPos(atom) {\r\n return frameData.getAtomPos(atom.index);\r\n }\r\n\r\n for (let i = 0; i < n; ++i) {\r\n const curr = residues[i];\r\n const currData = frameRes[curr._index];\r\n const nextRes = (i + 1 < n) ? residues[i + 1] : null;\r\n curr._innerFinalize(prev, prevData, nextRes, currData, this.type === ChainType.NUCLEIC, getAtomPos);\r\n prev = curr;\r\n prevData = currData;\r\n }\r\n\r\n frameRes[residues[0]._index]._wingVector = n > 1\r\n ? frameRes[residues[1]._index]._wingVector\r\n : new THREE.Vector3(1, 0, 0);\r\n }\r\n\r\n /**\r\n * Create a new residue.\r\n *\r\n * @param {string} name - Residue name.\r\n * @param {number} sequence - Residue sequence number.\r\n * @param {string} iCode - Insertion code.\r\n * @returns {Residue} - Newly created residue instance.\r\n */\r\n addResidue(name, sequence, iCode) {\r\n let type = this._complex.getResidueType(name);\r\n if (type === null) {\r\n type = this._complex.addResidueType(name);\r\n }\r\n const residue = new Residue(this, type, sequence, iCode);\r\n this._complex.addResidue(residue);\r\n this._residues.push(residue);\r\n\r\n if (type.flags & (ResidueType.Flags.NUCLEIC | ResidueType.Flags.PROTEIN)) {\r\n if (this.maxSequence < sequence) {\r\n this.maxSequence = sequence;\r\n }\r\n if (this.minSequence > sequence) {\r\n this.minSequence = sequence;\r\n }\r\n }\r\n\r\n return residue;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residues.length;\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n mask &= residues[i]._mask;\r\n }\r\n this._mask = mask;\r\n }\r\n}\r\n\r\nexport default Chain;\r\n","import Residue from './Residue';\r\n\r\n/** An element of protein secondary structure. */\r\nclass StructuralElement {\r\n /**\r\n * Create a secondary structural element of the specified type.\r\n *\r\n * @param {StructuralElement.Type} type Secondary structure type.\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n */\r\n constructor(type, init, term) {\r\n /**\r\n * Secondary structure type.\r\n * @type {StructuralElement.Type}\r\n */\r\n this.type = type;\r\n /**\r\n * Generic secondary structure type.\r\n * @type {StructuralElement.Generic}\r\n */\r\n this.generic = StructuralElement.genericByType[this.type] || 'loop';\r\n /**\r\n * Initial residue.\r\n * @type Residue\r\n */\r\n this.init = init;\r\n /**\r\n * Terminal residue.\r\n * @type Residue\r\n */\r\n this.term = term;\r\n }\r\n\r\n /**\r\n * An internal method for making a final pass over the complex to set all required references.\r\n *\r\n * **NOTE:** I'm sorry. It's a legacy code waiting for refactoring.\r\n * Just copying it as-is right now and hoping for the best.\r\n *\r\n * @param {object} serialAtomMap A dictionary of atoms\r\n * @param {object} residueHash A dictionary of hashed residues to check.\r\n * @param {Complex} complex The molecular complex this element belongs to.\r\n */\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n if (this.init instanceof Residue && this.term instanceof Residue) {\r\n return;\r\n }\r\n\r\n // Link all intermediate residues to this structural element\r\n const start = complex.splitUnifiedSerial(this.init);\r\n const end = complex.splitUnifiedSerial(this.term);\r\n for (let chainId = start.chain; chainId <= end.chain; chainId++) {\r\n for (let serialId = start.serial; serialId <= end.serial; serialId++) {\r\n for (let { iCode } = start; iCode <= end.iCode; iCode++) {\r\n const hashCode = complex.getUnifiedSerial(chainId, serialId, iCode);\r\n if (residueHash[hashCode]) {\r\n residueHash[hashCode]._secondary = this;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Replace unfined serials by objects\r\n this.init = residueHash[this.init];\r\n this.term = residueHash[this.term];\r\n }\r\n}\r\n\r\n/**\r\n * Specific type of a secondary structural element.\r\n * @enum {string}\r\n * @see StructuralElement.Generic\r\n */\r\nStructuralElement.Type = {\r\n /** A strand of a [beta-sheet](https://en.wikipedia.org/wiki/Beta_sheet). */\r\n STRAND: 'E',\r\n /** An isolated beta-bridge (too small for a beta-sheet). */\r\n BRIDGE: 'B',\r\n\r\n /** A [3/10 helix](https://en.wikipedia.org/wiki/310_helix) (hydrogen bonding is 3 residues apart). */\r\n HELIX_310: 'G',\r\n /** An [alpha-helix](https://en.wikipedia.org/wiki/Alpha_helix) (hydrogen bonding is 4 residues apart). */\r\n HELIX_ALPHA: 'H',\r\n /** A [pi-helix](https://en.wikipedia.org/wiki/Pi_helix) (hydrogen bonding is 5 residues apart). */\r\n HELIX_PI: 'I',\r\n /** A generic helix of unspecified bonding distance. */\r\n HELIX: 'X',\r\n\r\n /** An isolated 3/10-like helical turn. */\r\n TURN_310: '3',\r\n /** An isolated alpha-like helical turn. */\r\n TURN_ALPHA: '4',\r\n /** An isolated pi-like helical turn. */\r\n TURN_PI: '5',\r\n /** An isolated helical [turn](https://en.wikipedia.org/wiki/Turn_(biochemistry)) of unspecified bonding distance. */\r\n TURN: 'T',\r\n\r\n /** A bend (a region of high curvature). */\r\n BEND: 'S',\r\n /** Just a protein section with no particular conformation. */\r\n COIL: 'C',\r\n};\r\n\r\n/**\r\n * Generic type of a secondary structural element.\r\n * @enum {string}\r\n * @see StructuralElement.Type\r\n */\r\nStructuralElement.Generic = {\r\n /** A strand of a sheet. */\r\n STRAND: 'strand',\r\n /** A helix. */\r\n HELIX: 'helix',\r\n /** Just a protein section with no particular conformation. */\r\n LOOP: 'loop',\r\n};\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\nconst StructuralElementGeneric = StructuralElement.Generic;\r\n\r\n/**\r\n * A mapping from specific types to generic ones.\r\n * @type {Object}\r\n */\r\nStructuralElement.genericByType = {\r\n [StructuralElementType.STRAND]: StructuralElementGeneric.STRAND,\r\n [StructuralElementType.HELIX_310]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX_ALPHA]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX_PI]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX]: StructuralElementGeneric.HELIX,\r\n};\r\n\r\nexport default StructuralElement;\r\n","import StructuralElement from './StructuralElement';\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\nexport const typeByPDBHelixClass = {\r\n 1: StructuralElementType.HELIX_ALPHA,\r\n 3: StructuralElementType.HELIX_PI,\r\n 5: StructuralElementType.HELIX_310,\r\n};\r\n\r\n/**\r\n * Helical secondary structure of a protein.\r\n * @extends StructuralElement\r\n */\r\nclass Helix extends StructuralElement {\r\n /**\r\n * Create a helix.\r\n *\r\n * @param {number} helixClass A helix class according to the\r\n * [PDB Format](http://www.wwpdb.org/documentation/file-format-content/format33/sect5.html#HELIX).\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n * @param {number} serial Serial number of the helix (see PDB Format).\r\n * @param {string} name Helix identifier (see PDB Format).\r\n * @param {string} comment Comment about this helix (see PDB Format).\r\n * @param {number} length Length of this helix, in residues (see PDB Format).\r\n */\r\n constructor(helixClass, init, term, serial, name, comment, length) {\r\n super(typeByPDBHelixClass[helixClass] || StructuralElement.Type.HELIX, init, term);\r\n\r\n /**\r\n * Serial number of the helix (see PDB Format).\r\n * @type {number}\r\n */\r\n this.serial = serial;\r\n /**\r\n * Helix identifier (see PDB Format).\r\n * @type {string}\r\n */\r\n this.name = name;\r\n /**\r\n * Comment about this helix (see PDB Format).\r\n * @type {string}\r\n */\r\n this.comment = comment;\r\n /**\r\n * Length of this helix, in residues (see PDB Format).\r\n * @type {number}\r\n */\r\n this.length = length;\r\n }\r\n}\r\n\r\nexport default Helix;\r\n","import StructuralElement from './StructuralElement';\r\n\r\n/**\r\n * A single strand of a sheet in a protein secondary structure.\r\n * @extends StructuralElement\r\n */\r\nclass Strand extends StructuralElement {\r\n /**\r\n * Create a strand.\r\n *\r\n * @param {Sheet} sheet Parent sheet this strand belongs to.\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n * @param {number} sense Sense of strand with respect to previous strand in the sheet.\r\n * - 0 if the first strand,\r\n * - 1 if parallel, and\r\n * - -1 if anti-parallel.\r\n * @param {Atom} atomCur Atom in current strand (see PDB Format).\r\n * @param {Atom} atomPrev Atom in previous strand (see PDB Format).\r\n */\r\n constructor(sheet, init, term, sense, atomCur, atomPrev) {\r\n super(StructuralElement.Type.STRAND, init, term);\r\n\r\n /**\r\n * Parent sheet this strand belongs to.\r\n * @type {Sheet}\r\n */\r\n this.sheet = sheet;\r\n /**\r\n * Sense of strand with respect to previous strand in the sheet.\r\n * - 0 if the first strand,\r\n * - 1 if parallel, and\r\n * - -1 if anti-parallel.\r\n * @type {number}\r\n */\r\n this.sense = sense;\r\n /**\r\n * Atom in current strand (see PDB Format).\r\n * @type {Atom}\r\n */\r\n this.atomCur = atomCur;\r\n /**\r\n * Atom in previous strand (see PDB Format).\r\n * @type {Atom}\r\n */\r\n this.atomPrev = atomPrev;\r\n }\r\n\r\n /**\r\n * An internal method for making a final pass over the complex to set all required references.\r\n *\r\n * **NOTE:** I'm sorry. It's a legacy code waiting for refactoring.\r\n * Just copying it as-is right now and hoping for the best.\r\n *\r\n * @param {object} serialAtomMap A dictionary of atoms\r\n * @param {object} residueHash A dictionary of hashed residues to check.\r\n * @param {Complex} complex The molecular complex this element belongs to.\r\n *\r\n * @override\r\n */\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n super._finalize(serialAtomMap, residueHash, complex);\r\n\r\n let as = this.atomCur;\r\n if (as !== null && !Number.isNaN(as)) {\r\n this.atomCur = serialAtomMap[as];\r\n }\r\n as = this.atomPrev;\r\n if (as !== null && !Number.isNaN(as)) {\r\n this.atomPrev = serialAtomMap[as];\r\n }\r\n }\r\n}\r\n\r\nexport default Strand;\r\n","import Strand from './Strand';\r\n\r\n/**\r\n * Sheet secondary structure of a protein.\r\n *\r\n * @param {string} name -\r\n * @param {number} width -\r\n *\r\n * @exports Sheet\r\n * @constructor\r\n */\r\nclass Sheet {\r\n constructor(name, width) {\r\n this._name = name;\r\n this._width = width;\r\n\r\n this._strands = [];\r\n }\r\n\r\n // Getters and setters\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getWidth() {\r\n return this._width;\r\n }\r\n\r\n addStrand(strand) {\r\n this._strands.push(strand);\r\n this._width = this._strands.length;\r\n }\r\n\r\n addEmptyStrand() {\r\n this._strands.push(new Strand(null, null, null, null, null, null));\r\n }\r\n\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n const s = this._strands;\r\n for (let i = 0, n = s.length; i < n; ++i) {\r\n s[i]._finalize(serialAtomMap, residueHash, complex);\r\n }\r\n if (!this._width) {\r\n this._width = s.length;\r\n }\r\n if (s.length !== this._width) {\r\n throw new Error(`Sheet ${this._name} is inconsistent.`);\r\n }\r\n }\r\n}\r\n\r\nexport default Sheet;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Atom measurements.\r\n *\r\n * @param {string} id - SGroup id\r\n * @param {string} name - Name of the group\r\n * @param {THREE.Vector3} position - Registered coordinates\r\n * @param {array} atoms - Atoms group consists of\r\n * @param {object} saveNode - XML node from file for saving\r\n *\r\n * @exports SGroup\r\n * @constructor\r\n */\r\nclass SGroup {\r\n constructor(id, name, position, atoms, saveNode) {\r\n this._id = id;\r\n this._name = name;\r\n this._position = position || new THREE.Vector3();\r\n this._atoms = atoms || [];\r\n this._charge = 0; // default group charge\r\n this._repeat = 1; // how many times group repeated: always > 0\r\n this._center = null;\r\n this.xmlNodeRef = saveNode || null;\r\n }\r\n\r\n /**\r\n * Get atom full name.\r\n * @returns {string} Atom full name.\r\n */\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getPosition() {\r\n return this._position;\r\n }\r\n\r\n getCentralPoint() {\r\n return this._center;\r\n }\r\n\r\n _rebuildSGroupOnAtomChange() {\r\n const nLimon = 100000000;\r\n if (this._center === null) {\r\n return; // nothing to do if we are not relative\r\n }\r\n\r\n const bLow = new THREE.Vector3(nLimon, nLimon, nLimon);\r\n const bHight = new THREE.Vector3(-nLimon, -nLimon, -nLimon);\r\n for (let j = 0, n = this._atoms.length; j < n; j++) {\r\n const aPos = this._atoms[j].position;\r\n bLow.set(Math.min(bLow.x, aPos.x), Math.min(bLow.y, aPos.y), Math.min(bLow.z, aPos.z));\r\n bHight.set(Math.max(bHight.x, aPos.x), Math.max(bHight.y, aPos.y), Math.max(bHight.z, aPos.z));\r\n }\r\n this._center.addVectors(bLow, bHight);\r\n this._center.multiplyScalar(0.5);\r\n }\r\n}\r\n\r\nexport default SGroup;\r\n","import utils from '../../utils';\r\n\r\n//----------------------------------------------------------------------------\r\nclass Range {\r\n constructor(min, max) {\r\n this.min = min;\r\n this.max = typeof max === 'undefined' ? min : max;\r\n }\r\n\r\n includes(value) {\r\n return this.min <= value && value <= this.max;\r\n }\r\n\r\n toString() {\r\n const { min, max } = this;\r\n return min === max ? String(min) : [min, max].join(':');\r\n }\r\n\r\n toJSON() {\r\n return [this.min, this.max];\r\n }\r\n}\r\n\r\n// ////////////////////////////////////////////////////////////////////////////\r\n\r\nclass List {\r\n constructor(arg) {\r\n if (arg instanceof this.constructor) {\r\n // delegate construction to a different class\r\n // eslint-disable-next-line no-constructor-return\r\n return arg;\r\n }\r\n if (arg instanceof Array) {\r\n this._values = arg.slice(0);\r\n } else if (arg) {\r\n this._values = [arg];\r\n } else {\r\n this._values = [];\r\n }\r\n }\r\n\r\n append(value) {\r\n const values = this._values;\r\n values[values.length] = value;\r\n return this;\r\n }\r\n\r\n remove(value) {\r\n const values = this._values;\r\n const index = values.indexOf(value);\r\n if (index >= 0) {\r\n values.splice(index, 1);\r\n }\r\n return this;\r\n }\r\n\r\n toString() {\r\n return this._values.join(',');\r\n }\r\n\r\n toJSON() {\r\n const values = this._values;\r\n const result = [];\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n const value = values[i];\r\n result[i] = value.toJSON ? value.toJSON() : value;\r\n }\r\n return result;\r\n }\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n\r\nclass RangeList extends List {\r\n includes(value) {\r\n const list = this._values;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n if (list[i].includes(value)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n\r\nconst valuesArray = [];\r\n\r\nclass ValueList extends List {\r\n constructor(arg, upperOnly) {\r\n const list = super(arg);\r\n if (upperOnly) {\r\n this.upperOnly = true;\r\n const values = list._values;\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n const value = values[i];\r\n if (typeof value === 'string') {\r\n values[i] = value.toUpperCase();\r\n }\r\n }\r\n } else {\r\n this.upperOnly = false;\r\n }\r\n // return constructed object\r\n // eslint-disable-next-line no-constructor-return\r\n return list;\r\n }\r\n\r\n includes(value) {\r\n // we do not convert to upper case here for perfomance reasons\r\n // if list is upper case only, value must be converted before it is sent up to here\r\n return this._values.indexOf(value) !== -1;\r\n }\r\n\r\n toString() {\r\n // Quote values that are not correct identifiers\r\n const values = this._values;\r\n valuesArray.length = 0;\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n valuesArray[i] = utils.correctSelectorIdentifier(String(values[i]));\r\n }\r\n return valuesArray.join(',');\r\n }\r\n\r\n _validate(value) {\r\n return (this.upperOnly && typeof value === 'string') ? value.toUpperCase() : value;\r\n }\r\n\r\n append(value) {\r\n super.append(this._validate(value));\r\n return this;\r\n }\r\n\r\n remove(value) {\r\n super.remove(this._validate(value));\r\n return this;\r\n }\r\n}\r\n\r\nexport {\r\n Range,\r\n List,\r\n RangeList,\r\n ValueList,\r\n};\r\n","import { RangeList, ValueList } from './selectArgs';\r\n\r\n/** Base class for atom selectors. */\r\nclass Selector {\r\n toString() {\r\n return this.keyword;\r\n }\r\n\r\n toJSON() {\r\n return [this.name];\r\n }\r\n}\r\n\r\nSelector.prototype.name = 'Error';\r\nSelector.prototype.keyword = 'error';\r\n\r\n/** Base class for list-based atom selectors. */\r\nclass ListSelector extends Selector {\r\n constructor(list) {\r\n super();\r\n this.list = list;\r\n }\r\n\r\n toString() {\r\n return `${this.keyword} ${this.list}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.list.toJSON()];\r\n }\r\n}\r\n\r\nclass RangeListSelector extends ListSelector {\r\n constructor(arg) {\r\n super(new RangeList(arg));\r\n }\r\n}\r\n\r\nclass ValueListSelector extends ListSelector {\r\n constructor(arg, caseSensitive) {\r\n super(new ValueList(arg, !caseSensitive));\r\n }\r\n}\r\n\r\nclass NoneSelector extends Selector {\r\n includesAtom(_atom) {\r\n return false;\r\n }\r\n}\r\n\r\nNoneSelector.prototype.name = 'None';\r\nNoneSelector.prototype.keyword = 'none';\r\n\r\nclass AllSelector extends Selector {\r\n includesAtom(_atom) {\r\n return true;\r\n }\r\n}\r\n\r\nAllSelector.prototype.name = 'All';\r\nAllSelector.prototype.keyword = 'all';\r\n\r\nexport {\r\n Selector,\r\n ListSelector,\r\n RangeListSelector,\r\n ValueListSelector,\r\n NoneSelector,\r\n AllSelector,\r\n};\r\n","import { Selector, NoneSelector } from './selectorsBase';\r\n\r\n//----------------------------------------------------------------------------\r\n// Operators\r\n//----------------------------------------------------------------------------\r\nconst none = new NoneSelector();\r\n\r\nclass PrefixOperator extends Selector {\r\n constructor(rhs) {\r\n super();\r\n this.rhs = rhs || none;\r\n }\r\n\r\n toString() {\r\n const rhs = this.rhs.priority && this.rhs.priority > this.priority ? `(${this.rhs})` : this.rhs;\r\n return `${this.keyword} ${rhs}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.rhs.toJSON()];\r\n }\r\n}\r\n\r\nPrefixOperator.prototype.priority = 1;\r\n\r\nclass InfixOperator extends Selector {\r\n constructor(lhs, rhs) {\r\n super();\r\n this.lhs = lhs || none;\r\n this.rhs = rhs || none;\r\n }\r\n\r\n toString() {\r\n const lhs = this.lhs.priority && this.lhs.priority > this.priority ? `(${this.lhs})` : this.lhs;\r\n const rhs = this.rhs.priority && this.rhs.priority > this.priority ? `(${this.rhs})` : this.rhs;\r\n return `${lhs} ${this.keyword} ${rhs}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.lhs.toJSON(), this.rhs.toJSON()];\r\n }\r\n}\r\n\r\nInfixOperator.prototype.priority = 1000;\r\n\r\nexport { PrefixOperator, InfixOperator };\r\n","import Atom from './Atom';\r\nimport ResidueType from './ResidueType';\r\nimport { parser } from '../utils/SelectionParser';\r\nimport { Range, RangeList, ValueList } from './selectors/selectArgs';\r\nimport { PrefixOperator, InfixOperator } from './selectors/selectOps';\r\nimport {\r\n Selector,\r\n RangeListSelector,\r\n ValueListSelector,\r\n NoneSelector,\r\n AllSelector,\r\n} from './selectors/selectorsBase';\r\n\r\nconst keywords = {};\r\n\r\n//----------------------------------------------------------------------------\r\n// Named selectors\r\n//----------------------------------------------------------------------------\r\n\r\nfunction defineSelector(name, SelectorClass) {\r\n const keyword = name.toLowerCase();\r\n SelectorClass.prototype.keyword = keyword;\r\n SelectorClass.prototype.name = name;\r\n\r\n const factory = ((...args) => new SelectorClass(...args));\r\n factory.SelectorClass = SelectorClass;\r\n keywords[keyword] = factory;\r\n\r\n return SelectorClass;\r\n}\r\n\r\ndefineSelector('Serial', class SerialSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.serial);\r\n }\r\n});\r\n\r\ndefineSelector('Name', class NameSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.name);\r\n }\r\n});\r\n\r\ndefineSelector('AltLoc', class AltLocSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(String.fromCharCode(atom.location));\r\n }\r\n});\r\n\r\ndefineSelector('Elem', class ElemSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.element.name);\r\n }\r\n});\r\n\r\ndefineSelector('Residue', class ResidueSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._type._name);\r\n }\r\n});\r\n\r\ndefineSelector('Sequence', class SequenceSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._sequence);\r\n }\r\n});\r\n\r\ndefineSelector('ICode', class ICodeSelector extends ValueListSelector {\r\n constructor(arg) {\r\n super(arg, true);\r\n }\r\n\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._icode);\r\n }\r\n});\r\n\r\ndefineSelector('ResIdx', class ResIdxSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._index);\r\n }\r\n});\r\n\r\ndefineSelector('Chain', class ChainSelector extends ValueListSelector {\r\n constructor(arg) {\r\n super(arg, true);\r\n }\r\n\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._chain._name);\r\n }\r\n});\r\n\r\ndefineSelector('Hetatm', class HetatmSelector extends Selector {\r\n includesAtom(atom) {\r\n return atom.het;\r\n }\r\n});\r\n\r\ndefineSelector('PolarH', class PolarHSelector extends Selector {\r\n includesAtom(atom) {\r\n return (atom.flags & Atom.Flags.NONPOLARH) === Atom.Flags.HYDROGEN;\r\n }\r\n});\r\n\r\ndefineSelector('NonPolarH', class NonPolarHSelector extends Selector {\r\n includesAtom(atom) {\r\n return (atom.flags & Atom.Flags.NONPOLARH) === Atom.Flags.NONPOLARH;\r\n }\r\n});\r\n\r\ndefineSelector('All', AllSelector);\r\n\r\ndefineSelector('None', NoneSelector);\r\n\r\nconst NULL_SELECTOR = keywords.none();\r\n\r\n//----------------------------------------------------------------------------\r\n// Named operators\r\n//----------------------------------------------------------------------------\r\n\r\nfunction defineOperator(name, priority, OperatorClass) {\r\n OperatorClass.prototype.priority = priority;\r\n return defineSelector(name, OperatorClass);\r\n}\r\ndefineOperator('Not', 1, class NotOperator extends PrefixOperator {\r\n includesAtom(atom) {\r\n return !this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\ndefineOperator('And', 2, class AndOperator extends InfixOperator {\r\n includesAtom(atom) {\r\n return this.lhs.includesAtom(atom) && this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\ndefineOperator('Or', 3, class OrOperator extends InfixOperator {\r\n includesAtom(atom) {\r\n return this.lhs.includesAtom(atom) || this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\n//----------------------------------------------------------------------------\r\n// Flag selectors\r\n//----------------------------------------------------------------------------\r\n\r\nfunction byResidueTypeFlag(flag, name) {\r\n return defineSelector(name, class extends Selector {\r\n includesAtom(atom) {\r\n return (atom.residue._type.flags & flag) !== 0;\r\n }\r\n });\r\n}\r\n\r\nbyResidueTypeFlag(ResidueType.Flags.PROTEIN, 'Protein');\r\nbyResidueTypeFlag(ResidueType.Flags.BASIC, 'Basic');\r\nbyResidueTypeFlag(ResidueType.Flags.ACIDIC, 'Acidic');\r\nbyResidueTypeFlag(ResidueType.Flags.BASIC | ResidueType.Flags.ACIDIC, 'Charged');\r\nbyResidueTypeFlag(ResidueType.Flags.POLAR, 'Polar');\r\nbyResidueTypeFlag(ResidueType.Flags.NONPOLAR, 'NonPolar');\r\nbyResidueTypeFlag(ResidueType.Flags.AROMATIC, 'Aromatic');\r\nbyResidueTypeFlag(ResidueType.Flags.NUCLEIC, 'Nucleic');\r\nbyResidueTypeFlag(ResidueType.Flags.PURINE, 'Purine');\r\nbyResidueTypeFlag(ResidueType.Flags.PYRIMIDINE, 'Pyrimidine');\r\nbyResidueTypeFlag(ResidueType.Flags.WATER, 'Water');\r\n\r\n//----------------------------------------------------------------------------\r\nconst selectors = Object.create(keywords);\r\n\r\nselectors.Selector = Selector;\r\nselectors.RangeListSelector = RangeListSelector;\r\nselectors.ValueListSelector = ValueListSelector;\r\nselectors.Range = Range;\r\nselectors.RangeList = RangeList;\r\nselectors.ValueList = ValueList;\r\nselectors.PrefixOperator = PrefixOperator;\r\nselectors.InfixOperator = InfixOperator;\r\nselectors.Context = Object.create({});\r\n\r\nselectors.GetSelector = function (key) {\r\n if (!selectors.Context.hasOwnProperty(key)) {\r\n const exc = { message: `selector ${key} is not registered` };\r\n throw exc;\r\n }\r\n return selectors.Context[key] || NULL_SELECTOR;\r\n};\r\n\r\nselectors.ClearContext = function () {\r\n Object.keys(selectors.Context).forEach((k) => { delete selectors.Context[k]; });\r\n};\r\n\r\nselectors.keyword = function (key) {\r\n return keywords[key.toLowerCase()] || keywords.none;\r\n};\r\n\r\nselectors.parse = function (str) {\r\n const res = {};\r\n try {\r\n res.selector = parser.parse(str);\r\n } catch (e) {\r\n res.selector = NULL_SELECTOR;\r\n res.error = e.message;\r\n }\r\n return res;\r\n};\r\n\r\nparser.yy = selectors;\r\nparser.yy.parseError = parser.parseError; // workaround for incorrect JISON parser generator for AMD module\r\n\r\nexport default selectors;\r\n","import * as THREE from 'three';\r\nimport selectors from './selectors';\r\n\r\n/**\r\n * Basic biological unit class.\r\n *\r\n * @exports BiologicalUnit\r\n * @constructor\r\n */\r\nclass BiologicalUnit {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._selector = selectors.keyword('All')();\r\n this._boundaries = {\r\n boundingBox: new THREE.Box3(),\r\n boundingSphere: new THREE.Sphere(),\r\n };\r\n }\r\n\r\n computeBoundaries() {\r\n const atoms = this._complex._atoms;\r\n const n = atoms.length;\r\n const selector = this._selector;\r\n\r\n const { boundingBox } = this._boundaries;\r\n boundingBox.makeEmpty();\r\n if (n === 1) {\r\n boundingBox.expandByPoint(atoms[0].position);\r\n const bbc = new THREE.Vector3();\r\n boundingBox.getCenter(bbc);\r\n const s = 2 * atoms[0].element.radius;\r\n boundingBox.setFromCenterAndSize(bbc, new THREE.Vector3(s, s, s));\r\n } else {\r\n for (let i = 0; i < n; ++i) {\r\n if (selector.includesAtom(atoms[i])) {\r\n boundingBox.expandByPoint(atoms[i].position);\r\n }\r\n }\r\n }\r\n\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n if (n === 1) {\r\n this._boundaries.boundingSphere.set(center, atoms[0].element.radius);\r\n } else {\r\n for (let i = 0; i < n; ++i) {\r\n if (!selector.includesAtom(atoms[i])) {\r\n continue;\r\n }\r\n const pos = atoms[i].position;\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n this._boundaries.boundingSphere.set(center, Math.sqrt(radiusSquared));\r\n }\r\n }\r\n\r\n getTransforms() {\r\n return [];\r\n }\r\n\r\n getSelector() {\r\n return this._selector;\r\n }\r\n\r\n getBoundaries() {\r\n return this._boundaries;\r\n }\r\n\r\n finalize() {\r\n }\r\n}\r\n\r\nexport default BiologicalUnit;\r\n","import * as THREE from 'three';\r\nimport selectors from './selectors';\r\nimport BiologicalUnit from './BiologicalUnit';\r\n\r\n/**\r\n * Biological assembly.\r\n *\r\n * @exports Assembly\r\n * @constructor\r\n */\r\n\r\nclass Assembly extends BiologicalUnit {\r\n constructor(complex) {\r\n super(complex);\r\n this.chains = [];\r\n this.matrices = [];\r\n }\r\n\r\n computeBoundaries() {\r\n super.computeBoundaries();\r\n // fix up the boundaries\r\n const { matrices } = this;\r\n const oldCenter = this._boundaries.boundingSphere.center;\r\n const oldRad = this._boundaries.boundingSphere.radius;\r\n const boundingBox = this._boundaries.boundingBox = new THREE.Box3();\r\n boundingBox.makeEmpty();\r\n for (let i = 0, n = matrices.length; i < n; ++i) {\r\n boundingBox.expandByPoint(oldCenter.clone().applyMatrix4(matrices[i]));\r\n }\r\n\r\n const newRad = boundingBox.max.distanceTo(boundingBox.min) / 2 + oldRad;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n this._boundaries.boundingSphere = new THREE.Sphere().set(center, newRad);\r\n boundingBox.max.addScalar(oldRad);\r\n boundingBox.min.subScalar(oldRad);\r\n }\r\n\r\n /**\r\n * Mark a chain as belonging to this biological assembly.\r\n * @param {string} chain - chain identifier, usually a single letter\r\n */\r\n addChain(chain) {\r\n this.chains[this.chains.length] = chain;\r\n }\r\n\r\n /**\r\n * Add a transformation matrix.\r\n * @param {THREE.Matrix4} matrix - transformation matrix\r\n */\r\n addMatrix(matrix) {\r\n this.matrices[this.matrices.length] = matrix;\r\n }\r\n\r\n getTransforms() {\r\n return this.matrices;\r\n }\r\n\r\n finalize() {\r\n if (this.chains.length > 0) {\r\n this._selector = selectors.keyword('Chain')(this.chains);\r\n } else {\r\n this._selector = selectors.keyword('None')();\r\n }\r\n }\r\n}\r\n\r\nexport default Assembly;\r\n","/**\r\n * This class represents connected component as a part of a complex.\r\n * WARNING! The whole component entity is build under the assumption that residues\r\n * are placed in the chains and complex in ascending order of indices\r\n *\r\n * @param {Complex} complex - Molecular complex this chain belongs to.\r\n *\r\n * @exports Component\r\n * @constructor\r\n */\r\nclass Component {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._index = -1;\r\n this._residueIndices = [];\r\n this._cycles = [];\r\n this._subDivs = [];\r\n this._residueCount = 0;\r\n }\r\n\r\n getResidues() {\r\n return this._complex._residues;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residueCount;\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._complex._residues;\r\n const resIdc = this._residueIndices;\r\n for (let idIdc = 0, idCount = resIdc.length; idIdc < idCount; ++idIdc) {\r\n for (let idx = resIdc[idIdc].start, last = resIdc[idIdc].end; idx <= last; ++idx) {\r\n process(residues[idx]);\r\n }\r\n }\r\n }\r\n\r\n setSubDivs(subDivs) {\r\n this._subDivs = subDivs;\r\n let curr = 0;\r\n const resIdc = [];\r\n let resCnt = 0;\r\n for (let i = 0, n = subDivs.length; i < n; ++i) {\r\n if (i === n - 1 || subDivs[i].end + 1 !== subDivs[i + 1].start) {\r\n const { start } = subDivs[curr];\r\n const { end } = subDivs[i];\r\n resIdc[resIdc.length] = {\r\n start,\r\n end,\r\n };\r\n resCnt += end - start + 1;\r\n curr = i + 1;\r\n }\r\n }\r\n\r\n this._residueIndices = resIdc;\r\n this._residueCount = resCnt;\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n forEachBond(process) {\r\n const bonds = this._complex._bonds;\r\n\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n const bond = bonds[i];\r\n if (bond._left.residue._component === this) {\r\n process(bond);\r\n }\r\n }\r\n }\r\n\r\n update() {\r\n this.forEachCycle((cycle) => {\r\n cycle.update();\r\n });\r\n }\r\n\r\n forEachAtom(process) {\r\n this.forEachResidue((residue) => {\r\n residue.forEachAtom(process);\r\n });\r\n }\r\n\r\n addCycle(cycle) {\r\n this._cycles.push(cycle);\r\n }\r\n\r\n forEachCycle(process) {\r\n const cycles = this._cycles;\r\n for (let i = 0, n = cycles.length; i < n; ++i) {\r\n process(cycles[i]);\r\n }\r\n }\r\n\r\n markResidues() {\r\n const self = this;\r\n self.forEachResidue((residue) => {\r\n residue._component = self;\r\n });\r\n }\r\n\r\n _forEachSubChain(mask, process) {\r\n const residues = this._complex._residues;\r\n const subs = this._subDivs;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n for (let idx = subs[i].start, last = subs[i].end; idx <= last; ++idx) {\r\n const currRes = residues[idx];\r\n if (mask & currRes._mask && currRes._isValid) {\r\n let end = idx + 1;\r\n for (; end <= last; ++end) {\r\n const endRes = residues[end];\r\n if (!(mask & endRes._mask && endRes._isValid)) {\r\n break;\r\n }\r\n }\r\n process(i, idx, end - 1);\r\n idx = end;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getMaskedSequences(mask) {\r\n const subs = [];\r\n let idx = 0;\r\n this._forEachSubChain(mask, (_subIdx, start, end) => {\r\n subs[idx++] = { start, end };\r\n });\r\n\r\n return subs;\r\n }\r\n\r\n getMaskedSubdivSequences(mask) {\r\n const subs = [];\r\n let currIdx = -1;\r\n let lastSubIdx = -1;\r\n const subDivs = this._subDivs;\r\n\r\n this._forEachSubChain(mask, (subIdx, start, end) => {\r\n if (lastSubIdx !== subIdx) {\r\n ++currIdx;\r\n subs[currIdx] = {\r\n arr: [],\r\n boundaries: subDivs[subIdx],\r\n };\r\n lastSubIdx = subIdx;\r\n }\r\n subs[currIdx].arr[subs[currIdx].arr.length] = { start, end };\r\n });\r\n\r\n return subs;\r\n }\r\n}\r\n\r\nexport default Component;\r\n","import utils from '../utils';\r\n\r\nconst cMaxPairsForHashCode = 32;\r\nconst cHashTableSize = 1024 * 1024;\r\nconst cNumbersPerPair = 4;\r\nconst cMaxNeighbours = 14;\r\nconst cInvalidVal = -1;\r\n// 89237 is a large simple number, can be used for pseudo random hash code create\r\nconst cBigPrime = 89237;\r\n\r\nclass AtomPairs {\r\n constructor(maxPairsEstimate) {\r\n this.numPairs = 0;\r\n this.numMaxPairs = maxPairsEstimate;\r\n this.intBuffer = utils.allocateTyped(Int32Array, maxPairsEstimate * cNumbersPerPair);\r\n for (let i = 0; i < maxPairsEstimate * cNumbersPerPair; i++) {\r\n this.intBuffer[i] = cInvalidVal;\r\n }\r\n this.hashBuffer = utils.allocateTyped(Int32Array, cHashTableSize * cMaxPairsForHashCode);\r\n for (let i = 0; i < cHashTableSize * cMaxPairsForHashCode; i++) {\r\n this.hashBuffer[i] = cInvalidVal;\r\n }\r\n }\r\n\r\n /**\r\n * Destroy all pairs memory\r\n */\r\n destroy() {\r\n this.intBuffer = null;\r\n this.hashBuffer = null;\r\n }\r\n\r\n /**\r\n * Add pair of atoms to collection\r\n * @param {number} indexA - Index of the 1st vertex.\r\n * @param {number} indexB - Index of the 2nd vertex.\r\n */\r\n addPair(indexA, indexB) {\r\n const ia = (indexA < indexB) ? indexA : indexB;\r\n const ib = (indexA > indexB) ? indexA : indexB;\r\n const codeToAdd = ia + (ib << cMaxNeighbours);\r\n\r\n const hashCode = (ia + (ib * cBigPrime)) & (cHashTableSize - 1);\r\n let j = hashCode * cMaxPairsForHashCode;\r\n let apI = 0;\r\n for (; apI < cMaxPairsForHashCode; apI++) {\r\n const code = this.hashBuffer[j + apI];\r\n if (code === cInvalidVal) {\r\n break;\r\n }\r\n if (code === codeToAdd) {\r\n return false;\r\n }\r\n }\r\n // add this new hash code\r\n if (apI >= cMaxPairsForHashCode) {\r\n throw new Error('addPair: increase cMaxPairsForHashCode');\r\n }\r\n this.hashBuffer[j + apI] = codeToAdd;\r\n\r\n // actually add\r\n if (this.numPairs >= this.numMaxPairs) {\r\n throw new Error('addPair: increase num pairs');\r\n }\r\n j = this.numPairs * cNumbersPerPair;\r\n this.intBuffer[j] = ia;\r\n this.intBuffer[j + 1] = ib;\r\n this.intBuffer[j + 2] = codeToAdd;\r\n this.numPairs++;\r\n return true;\r\n }\r\n}\r\n\r\nexport default AtomPairs;\r\n","import AtomPairs from './AtomPairs';\r\nimport Bond from './Bond';\r\n\r\nconst cProfileBondBuilder = false;\r\nconst cEstBondsMultiplier = 4;\r\nconst cSpaceCode = 32;\r\nconst cBondTolerance = 0.45;\r\nconst cVMDTolerance = 0.6;\r\nconst cBondRadInJMOL = true;\r\nconst cEpsilon = 0.001;\r\n\r\n/**\r\n * Get radius used for building bonds.\r\n *\r\n * @param {Atom} atom - Atom object.\r\n * @returns {number} special value for bonding radius for this atom\r\n */\r\nfunction _getBondingRadius(atom) {\r\n const { element } = atom;\r\n if (element) {\r\n return element.radiusBonding;\r\n }\r\n throw new Error('_getBondingRadius: Logic error.');\r\n}\r\n\r\nfunction _isAtomEligible(atom) {\r\n // build for all non-hetatm and for hetatm without bonds\r\n return !atom.isHet() || (atom.bonds && atom.bonds.length === 0);\r\n}\r\n\r\n/**\r\n * Bond between atoms.\r\n *\r\n * @param {Complex} complex molecular complex\r\n\r\n * @exports AutoBond\r\n * @constructor\r\n */\r\nclass AutoBond {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._maxRad = 1.8;\r\n const bBox = this._complex.getDefaultBoundaries().boundingBox;\r\n this._vBoxMin = bBox.min.clone();\r\n this._vBoxMax = bBox.max.clone();\r\n\r\n this._pairCollection = null;\r\n }\r\n\r\n /**\r\n * Add existing pairs of connectors (from pdb file after its reading)\r\n * @returns {number} 0\r\n */\r\n _addExistingPairs() {\r\n const atoms = this._complex.getAtoms();\r\n const numAtoms = atoms.length;\r\n let aInd = 0;\r\n const collection = this._pairCollection;\r\n\r\n for (; aInd < numAtoms; aInd++) {\r\n const { bonds } = atoms[aInd];\r\n const numBondsForAtom = bonds.length;\r\n for (let bInd = 0; bInd < numBondsForAtom; bInd++) {\r\n const bond = bonds[bInd];\r\n const indTo = bond._left.index;\r\n if (indTo === aInd) {\r\n collection.addPair(aInd, bond._right.index);\r\n }\r\n } // for (b) all bonds in atom\r\n } // for (a)\r\n return 0;\r\n }\r\n\r\n _findPairs() {\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return;\r\n }\r\n\r\n const atoms = this._complex._atoms;\r\n const atomsNum = atoms.length;\r\n const self = this;\r\n\r\n let rA;\r\n let isHydrogenA;\r\n let posA;\r\n let locationA;\r\n let atomA;\r\n\r\n const processAtom = function (atomB) {\r\n if (isHydrogenA && atomB.isHydrogen()) {\r\n return;\r\n }\r\n\r\n const locationB = atomB.location;\r\n if ((locationA !== cSpaceCode)\r\n && (locationB !== cSpaceCode)\r\n && (locationA !== locationB)) {\r\n return;\r\n }\r\n\r\n const dist2 = posA.distanceToSquared(atomB.position);\r\n const rB = atomB.element.radiusBonding;\r\n const maxAcceptable = cBondRadInJMOL ? rA + rB + cBondTolerance : cVMDTolerance * (rA + rB);\r\n\r\n if (dist2 > (maxAcceptable * maxAcceptable)) {\r\n return;\r\n }\r\n\r\n if (dist2 < cEpsilon) {\r\n return;\r\n }\r\n\r\n self._pairCollection.addPair(atomA.index, atomB.index);\r\n };\r\n\r\n for (let i = 0; i < atomsNum; ++i) {\r\n atomA = atoms[i];\r\n if (!_isAtomEligible(atomA)) {\r\n continue;\r\n }\r\n\r\n rA = atomA.element.radiusBonding;\r\n isHydrogenA = atomA.isHydrogen();\r\n posA = atomA.position;\r\n locationA = atomA.location;\r\n\r\n vw.forEachAtomWithinRadius(posA, 2 * this._maxRad + cBondTolerance, processAtom);\r\n }\r\n }\r\n\r\n _addPairs() {\r\n const atoms = this._complex._atoms;\r\n\r\n for (let i = 0, k = 0; i < this._pairCollection.numPairs; i++, k += 4) {\r\n const iA = this._pairCollection.intBuffer[k];\r\n const iB = this._pairCollection.intBuffer[k + 1];\r\n this._addPair(atoms[iA], atoms[iB]);\r\n }\r\n }\r\n\r\n _addPair(atomA, atomB) {\r\n const bondsA = atomA.bonds;\r\n const indexA = atomA.index;\r\n const indexB = atomB.index;\r\n for (let j = 0, numBonds = bondsA.length; j < numBonds; ++j) {\r\n const bond = bondsA[j];\r\n if (bond._left.index === indexB || bond._right.index === indexB) {\r\n return;\r\n }\r\n }\r\n const left = indexA < indexB ? atomA : atomB;\r\n const right = indexA < indexB ? atomB : atomA;\r\n const newBond = this._complex.addBond(left, right, 0, Bond.BondType.UNKNOWN, false);\r\n bondsA.push(newBond);\r\n atomB.bonds.push(newBond);\r\n }\r\n\r\n build() {\r\n if (cProfileBondBuilder) {\r\n console.time('Bonds Builder');\r\n }\r\n this._buildInner();\r\n\r\n if (cProfileBondBuilder) {\r\n console.timeEnd('Bonds Builder');\r\n }\r\n }\r\n\r\n _buildInner() {\r\n const atoms = this._complex._atoms;\r\n if (atoms.length < 2) {\r\n return;\r\n }\r\n if (atoms[0].index < 0) {\r\n throw new Error('AutoBond: Atoms in complex were not indexed.');\r\n }\r\n\r\n this._calcBoundingBox();\r\n this._pairCollection = new AtomPairs(atoms.length * cEstBondsMultiplier);\r\n this._addExistingPairs();\r\n this._findPairs();\r\n this._addPairs();\r\n }\r\n\r\n _calcBoundingBox() {\r\n const atoms = this._complex._atoms;\r\n const nAtoms = atoms.length;\r\n let maxRad = _getBondingRadius(atoms[0]);\r\n for (let i = 1; i < nAtoms; ++i) {\r\n maxRad = Math.max(maxRad, _getBondingRadius(atoms[i]));\r\n }\r\n this._vBoxMax.addScalar(maxRad);\r\n this._vBoxMin.addScalar(-maxRad);\r\n this._maxRad = maxRad * 1.2;\r\n }\r\n\r\n destroy() {\r\n if (this._pairCollection) {\r\n this._pairCollection.destroy();\r\n }\r\n }\r\n}\r\n\r\nexport default AutoBond;\r\n","import * as THREE from 'three';\r\nimport Bond from './Bond';\r\nimport Element from './Element';\r\n\r\nconst cCrossThresh = 0.1;\r\nconst cAromaticType = Bond.BondType.AROMATIC;\r\nconst cAromaticAtoms = [\r\n Element.ByName.C.number,\r\n Element.ByName.N.number,\r\n // Element.ByName.O.number,\r\n // Element.ByName.S.number,\r\n];\r\n\r\n/** Conditions for bonds:\r\n * - Cross product with each subsequent bond to add is collinear and point to the same direction\r\n * - Each pair of a adjacent bonds belong to not more than one cycle\r\n * - If there is more than one candidates we try them in ascending order of angle values\r\n */\r\n\r\nconst _coDirVectors = (function () {\r\n const v1Tmp = new THREE.Vector3();\r\n const v2Tmp = new THREE.Vector3();\r\n const cp = new THREE.Vector3();\r\n return function (v1, v2) {\r\n v1Tmp.copy(v1).normalize();\r\n v2Tmp.copy(v2).normalize();\r\n cp.crossVectors(v1Tmp, v2Tmp);\r\n if (cp.length() > cCrossThresh) {\r\n return false;\r\n }\r\n // zero vector in out terms must be collinear to any\r\n return v1Tmp.dot(v2Tmp) >= 0;\r\n };\r\n}());\r\n\r\nfunction _insertAscending(arr, val) {\r\n let idx = 0;\r\n while (idx < arr.length && arr[idx] < val) {\r\n ++idx;\r\n }\r\n arr.splice(idx, 0, val);\r\n}\r\n\r\nfunction _anotherAtom(bond, currAtom) {\r\n return bond._left === currAtom ? bond._right : bond._left;\r\n}\r\n\r\nfunction _cosBetween(v1, v2) {\r\n const theta = v1.dot(v2) / (Math.sqrt(v1.lengthSq() * v2.lengthSq()));\r\n return THREE.MathUtils.clamp(theta, -1, 1);\r\n}\r\n\r\nfunction _markAromatic(bond) {\r\n bond._type = cAromaticType;\r\n}\r\n\r\nclass Cycle {\r\n constructor(atomsList) {\r\n this.atoms = atomsList;\r\n this.update();\r\n }\r\n\r\n update() {\r\n const { atoms } = this;\r\n const center = new THREE.Vector3();\r\n const nA = atoms.length;\r\n for (let j = 0; j < nA; ++j) {\r\n center.add(atoms[j].position);\r\n }\r\n center.multiplyScalar(1.0 / nA);\r\n this.center = center;\r\n this.radius = center.distanceTo(atoms[0].position.clone().lerp(atoms[1].position, 0.5));\r\n }\r\n\r\n forEachBond(process) {\r\n const { atoms } = this;\r\n const nA = atoms.length;\r\n let currAtom = atoms[0];\r\n let nextAtom;\r\n\r\n function checkBond(bond) {\r\n if (bond._left === nextAtom || bond._right === nextAtom) {\r\n process(bond);\r\n }\r\n }\r\n\r\n for (let i = 0; i < nA; ++i) {\r\n nextAtom = atoms[(i + 1) % nA];\r\n currAtom.forEachBond(checkBond);\r\n currAtom = nextAtom;\r\n }\r\n }\r\n}\r\n\r\nfunction _isAromatic(bond) {\r\n return bond._type === cAromaticType;\r\n}\r\n\r\nfunction _isPossibleAromatic(bond) {\r\n if (bond.type === cAromaticType) {\r\n return true;\r\n }\r\n const rightIdx = cAromaticAtoms.indexOf(bond._right.element.number);\r\n const leftIdx = cAromaticAtoms.indexOf(bond._left.element.number);\r\n return rightIdx !== -1 && leftIdx !== -1;\r\n}\r\n\r\nfunction _checkCycleSimple(cycle) {\r\n return cycle.length > 3;\r\n}\r\n\r\nfunction _checkCycleComplex(cycle) {\r\n console.assert(cycle.length > 2);\r\n return true;\r\n}\r\n\r\nclass AromaticLoopsMarker {\r\n constructor(complex) {\r\n this._complex = complex;\r\n const bondsData = new Array(complex._bonds.length);\r\n const bondMarks = new Array(complex._bonds.length);\r\n for (let i = 0, n = bondsData.length; i < n; ++i) {\r\n bondsData[i] = [];\r\n bondMarks[i] = false;\r\n }\r\n this._bondsData = bondsData;\r\n this._bondMarks = bondMarks;\r\n this._resetCycles();\r\n }\r\n\r\n _resetCycles() {\r\n this._cycles = [];\r\n this._currIdx = -1;\r\n }\r\n\r\n _haveSameCycle(bondsData, bond1, bond2) {\r\n const arr1 = bondsData[bond1._index];\r\n const arr2 = bondsData[bond2._index];\r\n const n1 = arr1.length;\r\n const n2 = arr2.length;\r\n let i1 = 0;\r\n let i2 = 0;\r\n while (i1 < n1 && i2 < n2) {\r\n if (arr1[i1] === arr2[i2]) {\r\n return true;\r\n }\r\n if (arr1[i1] > arr2[i2]) {\r\n ++i2;\r\n } else {\r\n ++i1;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n _tryBond(prevBond, currRight, currDir) {\r\n const bondsOrder = [];\r\n const bondsData = this._bondsData;\r\n const currLeft = _anotherAtom(prevBond, currRight);\r\n const currVec = currRight.position.clone().sub(currLeft.position);\r\n const startAtomRef = this._currStart;\r\n const self = this;\r\n const bondMarks = this._bondMarks;\r\n let checkAromatic = this._checkBond;\r\n bondMarks[prevBond._index] = true;\r\n checkAromatic = checkAromatic === undefined ? _isAromatic : checkAromatic;\r\n currRight.forEachBond((newBond) => {\r\n if (!checkAromatic(newBond)\r\n || newBond === prevBond\r\n || bondMarks[newBond._index]\r\n || self._haveSameCycle(bondsData, prevBond, newBond)) {\r\n return;\r\n }\r\n const anotherAtom = _anotherAtom(newBond, currRight);\r\n const anotherVec = anotherAtom.position.clone().sub(currRight.position);\r\n const val = anotherAtom === startAtomRef ? -2.0 : 1 - _cosBetween(currVec, anotherVec);\r\n const newDir = anotherVec.cross(currVec);\r\n if (!_coDirVectors(newDir, currDir)) {\r\n return;\r\n }\r\n let idx = 0;\r\n while (idx < bondsOrder.length && bondsOrder[idx].val < val) {\r\n ++idx;\r\n }\r\n bondsOrder.splice(idx, 0, { bond: newBond, val, dir: newDir });\r\n });\r\n\r\n for (let i = 0, n = bondsOrder.length; i < n; ++i) {\r\n const { bond } = bondsOrder[i];\r\n const newRight = bond._left === currRight ? bond._right : bond._left;\r\n if (newRight === startAtomRef) {\r\n ++this._currIdx;\r\n this._cycles.push([currRight]);\r\n bondMarks[prevBond._index] = false;\r\n return true;\r\n }\r\n if (this._tryBond(bond, newRight, bondsOrder[i].dir)) {\r\n _insertAscending(bondsData[bond._index], this._currIdx);\r\n this._cycles[this._currIdx].push(currRight);\r\n bondMarks[prevBond._index] = false;\r\n return true;\r\n }\r\n }\r\n bondMarks[prevBond._index] = false;\r\n return false;\r\n }\r\n\r\n _startCycle(bond) {\r\n // start from left to right\r\n this._currStart = bond._left;\r\n if (this._tryBond(bond, bond._right, new THREE.Vector3())) {\r\n _insertAscending(this._bondsData[bond._index], this._currIdx);\r\n this._cycles[this._currIdx].push(bond._left);\r\n }\r\n }\r\n\r\n _findLoops(checkBond, checkCycle) {\r\n this._checkBond = checkBond;\r\n const complex = this._complex;\r\n const self = this;\r\n\r\n complex.forEachComponent((component) => {\r\n self._resetCycles();\r\n component.forEachBond((bond) => {\r\n if (checkBond(bond)) {\r\n self._startCycle(bond);\r\n }\r\n });\r\n const cycles = self._cycles;\r\n for (let i = 0, n = cycles.length; i < n; ++i) {\r\n const cycle = cycles[i];\r\n if (!checkCycle(cycle)) {\r\n continue;\r\n }\r\n const newCycle = new Cycle(cycle);\r\n newCycle.forEachBond(_markAromatic);\r\n component.addCycle(newCycle);\r\n }\r\n });\r\n }\r\n\r\n markCycles() {\r\n this._findLoops(_isAromatic, _checkCycleSimple);\r\n }\r\n\r\n detectCycles() {\r\n this._findLoops(_isPossibleAromatic, _checkCycleComplex);\r\n }\r\n}\r\n\r\nexport default AromaticLoopsMarker;\r\n","import * as THREE from 'three';\r\nimport utils from '../utils';\r\n\r\n/**\r\n * Calculate min & max radius of a sphere slice between zMin & zMax\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {number} zMin - lower bound of the slice\r\n * @param {number} zMax - upper bound of the slice\r\n */\r\nfunction _getSphereSliceRadiusRange(center, radius, zMin, zMax) {\r\n const dzMin = zMin - center.z;\r\n const dzMax = zMax - center.z;\r\n const rzMin = Math.sqrt(Math.max(radius * radius - dzMin * dzMin, 0.0));\r\n const rzMax = Math.sqrt(Math.max(radius * radius - dzMax * dzMax, 0.0));\r\n\r\n const rMin = Math.min(rzMin, rzMax);\r\n let rMax;\r\n\r\n if (zMin <= center.z && zMax >= center.z) {\r\n // sphere's main diameter is inside slice\r\n rMax = radius;\r\n } else {\r\n rMax = Math.max(rzMin, rzMax);\r\n }\r\n\r\n return [rMin, rMax];\r\n}\r\n\r\n/**\r\n * Calculate min & max radius of a circle slice between yMin & yMax.\r\n *\r\n * To maintain analogy with _getSphereSliceRadiusRange we call radius what in fact is\r\n * half-width (along X axis) of the slice, i.e. 1D-sphere radius.\r\n *\r\n * @param {Vector3} center - center of the circle (z can be ignored)\r\n * @param {number} radius - circle radius\r\n * @param {number} yMin - lower bound of the slice\r\n * @param {number} yMax - upper bound of the slice\r\n * @returns {Array} - array of two numbers (min & max radius, or half-width)\r\n */\r\nfunction _getCircleSliceRadiusRange(center, radius, yMin, yMax) {\r\n const dyMin = yMin - center.y;\r\n const dyMax = yMax - center.y;\r\n const ryMin = Math.sqrt(Math.max(radius * radius - dyMin * dyMin, 0.0));\r\n const ryMax = Math.sqrt(Math.max(radius * radius - dyMax * dyMax, 0.0));\r\n\r\n const rMin = Math.min(ryMin, ryMax);\r\n let rMax;\r\n\r\n if (yMin <= center.y && yMax >= center.y) {\r\n // slice's main diameter is inside slice\r\n rMax = radius;\r\n } else {\r\n rMax = Math.max(ryMin, ryMax);\r\n }\r\n\r\n return [rMin, rMax];\r\n}\r\n\r\n/**\r\n * VoxelWorld constructor\r\n *\r\n * @param {Box3} box - bounding box of the volume to be partitioned\r\n * @param {Vector3} vCellSizeHint - target voxel size (actual voxel size may differ from this)\r\n */\r\nclass VoxelWorld {\r\n constructor(box, vCellSizeHint) {\r\n this._box = box.clone();\r\n const size = new THREE.Vector3();\r\n box.getSize(size);\r\n this._count = size.clone().divide(vCellSizeHint).floor().max(new THREE.Vector3(1, 1, 1));\r\n this._last = this._count.clone().subScalar(1);\r\n this._cellSize = size.clone().divide(this._count);\r\n this._cellInnerR = 0.5 * Math.min(Math.min(this._cellSize.x, this._cellSize.y), this._cellSize.z);\r\n this._cellOuterR = 0.5 * Math.sqrt(this._cellSize.dot(this._cellSize));\r\n\r\n // array of voxels, each element contains index of first atom in voxel\r\n const numVoxels = this._count.x * this._count.y * this._count.z;\r\n this._voxels = utils.allocateTyped(Int32Array, numVoxels);\r\n for (let i = 0; i < numVoxels; ++i) {\r\n this._voxels[i] = -1;\r\n }\r\n\r\n // array of atoms that stores multiple single-linked lists\r\n // two elements for each atom: Atom ref, index of next atom (in this array\r\n this._atoms = [];\r\n }\r\n\r\n /**\r\n * Add all atoms from a complex to voxel world\r\n *\r\n * @param {Complex} complex - complex\r\n */\r\n addAtoms(complex) {\r\n const self = this;\r\n\r\n let idx = this._atoms.length;\r\n\r\n // resize array of atoms\r\n this._atoms.length += 2 * complex.getAtomCount();\r\n\r\n complex.forEachAtom((atom) => {\r\n // find which voxel contains this atom\r\n const voxelIdx = self._findVoxel(atom.position);\r\n\r\n // push current atom to the head of voxel's atom list\r\n self._atoms[idx] = atom;\r\n self._atoms[idx + 1] = self._voxels[voxelIdx];\r\n self._voxels[voxelIdx] = idx;\r\n\r\n idx += 2;\r\n });\r\n }\r\n\r\n /**\r\n * Get voxel that contains specified 3D point (we use clamp at the edges)\r\n *\r\n * @param {Vector3} point - a point in 3D\r\n * @returns {number} - index of voxel\r\n */\r\n static _zero = new THREE.Vector3(0, 0, 0);\r\n\r\n static _voxel = new THREE.Vector3();\r\n\r\n _findVoxel(point) {\r\n const zero = VoxelWorld._zero;\r\n const voxel = VoxelWorld._voxel;\r\n voxel.copy(point)\r\n .sub(this._box.min)\r\n .divide(this._cellSize)\r\n .floor()\r\n .clamp(zero, this._last);\r\n return voxel.x + this._count.x * (voxel.y + this._count.y * voxel.z);\r\n }\r\n\r\n /**\r\n * Call a function for each atom in voxel\r\n *\r\n * @param {number} voxel - index of voxel\r\n * @param {function(Atom)} process - function to call\r\n */\r\n _forEachAtomInVoxel(voxel, process) {\r\n for (let i = this._voxels[voxel]; i >= 0; i = this._atoms[i + 1]) {\r\n process(this._atoms[i]);\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each voxel that is touched by given sphere. Callback also takes flag\r\n * isInside specifying whether voxel lies inside the sphere entirely.\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside\r\n */\r\n\r\n static _xRange = new THREE.Vector2();\r\n\r\n static _yRange = new THREE.Vector2();\r\n\r\n static _zRange = new THREE.Vector2();\r\n\r\n _forEachVoxelWithinRadius(center, radius, process) {\r\n const xRange = VoxelWorld._xRange;\r\n const yRange = VoxelWorld._yRange;\r\n const zRange = VoxelWorld._zRange;\r\n\r\n // switch to a faster method unless cell size is much smaller than sphere radius\r\n if (radius / this._cellInnerR < 10) {\r\n this._forEachVoxelWithinRadiusSimple(center, radius, process);\r\n return;\r\n }\r\n\r\n let rRangeXY;\r\n let rRangeX;\r\n let xVal;\r\n let yVal;\r\n let zVal;\r\n let isInsideX;\r\n let isInsideY;\r\n let isInsideZ;\r\n\r\n zRange.set(center.z - radius, center.z + radius);\r\n zRange.subScalar(this._box.min.z)\r\n .divideScalar(this._cellSize.z)\r\n .floor()\r\n .clampScalar(0, this._count.z - 1);\r\n\r\n for (let z = zRange.x; z <= zRange.y; ++z) {\r\n zVal = [this._box.min.z + z * this._cellSize.z,\r\n this._box.min.z + (z + 1) * this._cellSize.z];\r\n\r\n isInsideZ = (center.z - radius <= zVal[0]) && (zVal[1] <= center.z + radius);\r\n\r\n rRangeXY = _getSphereSliceRadiusRange(center, radius, zVal[0], zVal[1]);\r\n\r\n yRange.set(center.y - rRangeXY[1], center.y + rRangeXY[1]);\r\n yRange.subScalar(this._box.min.y)\r\n .divideScalar(this._cellSize.y)\r\n .floor()\r\n .clampScalar(0, this._count.y - 1);\r\n\r\n for (let y = yRange.x; y <= yRange.y; ++y) {\r\n yVal = [this._box.min.y + y * this._cellSize.y,\r\n this._box.min.y + (y + 1) * this._cellSize.y];\r\n\r\n isInsideY = (center.y - rRangeXY[0] <= yVal[0]) && (yVal[1] <= center.y + rRangeXY[0]);\r\n\r\n rRangeX = _getCircleSliceRadiusRange(center, rRangeXY[1], yVal[0], yVal[1]);\r\n\r\n xRange.set(center.x - rRangeX[1], center.x + rRangeX[1]);\r\n xRange.subScalar(this._box.min.x)\r\n .divideScalar(this._cellSize.x)\r\n .floor()\r\n .clampScalar(0, this._count.x - 1);\r\n\r\n for (let { x } = xRange; x <= xRange.y; ++x) {\r\n xVal = [this._box.min.x + x * this._cellSize.x,\r\n this._box.min.x + (x + 1) * this._cellSize.x];\r\n isInsideX = (center.x - rRangeX[0] <= xVal[0]) && (xVal[1] <= center.x + rRangeX[0]);\r\n\r\n process(x + this._count.x * (y + this._count.y * z), isInsideX && isInsideY && isInsideZ);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each voxel that is touched by given sphere. Callback also takes flag\r\n * isInside specifying whether voxel lies inside the sphere entirely.\r\n * This is a version of method that doesn't try to \"calculate\" what voxels fall inside radius\r\n * but instead just checks all voxels inside sphere's bounding box. This should be faster\r\n * unless cell size is much smaller than sphere radius.\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside\r\n */\r\n\r\n static _vCenter = new THREE.Vector3();\r\n\r\n _forEachVoxelWithinRadiusSimple(center, radius, process) {\r\n const xRange = VoxelWorld._xRange;\r\n const yRange = VoxelWorld._yRange;\r\n const zRange = VoxelWorld._zRange;\r\n const vCenter = VoxelWorld._vCenter;\r\n\r\n const distTouch2 = (radius + this._cellOuterR) * (radius + this._cellOuterR);\r\n let distInside2 = -1.0;\r\n if (radius > this._cellOuterR) {\r\n distInside2 = (radius - this._cellOuterR) * (radius - this._cellOuterR);\r\n }\r\n\r\n // calculate bounding box for the sphere\r\n xRange.set(center.x - radius, center.x + radius);\r\n xRange.subScalar(this._box.min.x)\r\n .divideScalar(this._cellSize.x)\r\n .floor();\r\n xRange.x = Math.min(Math.max(xRange.x, 0), this._count.x - 1);\r\n xRange.y = Math.min(Math.max(xRange.y, 0), this._count.x - 1);\r\n\r\n yRange.set(center.y - radius, center.y + radius);\r\n yRange.subScalar(this._box.min.y)\r\n .divideScalar(this._cellSize.y)\r\n .floor();\r\n yRange.x = Math.min(Math.max(yRange.x, 0), this._count.y - 1);\r\n yRange.y = Math.min(Math.max(yRange.y, 0), this._count.y - 1);\r\n\r\n zRange.set(center.z - radius, center.z + radius);\r\n zRange.subScalar(this._box.min.z)\r\n .divideScalar(this._cellSize.z)\r\n .floor();\r\n zRange.x = Math.min(Math.max(zRange.x, 0), this._count.z - 1);\r\n zRange.y = Math.min(Math.max(zRange.y, 0), this._count.z - 1);\r\n\r\n for (let z = zRange.x; z <= zRange.y; ++z) {\r\n const zVal = [this._box.min.z + z * this._cellSize.z,\r\n this._box.min.z + (z + 1) * this._cellSize.z];\r\n vCenter.z = 0.5 * (zVal[0] + zVal[1]);\r\n\r\n for (let y = yRange.x; y <= yRange.y; ++y) {\r\n const yVal = [this._box.min.y + y * this._cellSize.y,\r\n this._box.min.y + (y + 1) * this._cellSize.y];\r\n vCenter.y = 0.5 * (yVal[0] + yVal[1]);\r\n\r\n for (let { x } = xRange; x <= xRange.y; ++x) {\r\n const xVal = [this._box.min.x + x * this._cellSize.x,\r\n this._box.min.x + (x + 1) * this._cellSize.x];\r\n vCenter.x = 0.5 * (xVal[0] + xVal[1]);\r\n\r\n const d2 = center.distanceToSquared(vCenter);\r\n if (d2 <= distTouch2) {\r\n process(x + this._count.x * (y + this._count.y * z), d2 <= distInside2);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each atom within given sphere\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinRadius(center, radius, process) {\r\n const self = this;\r\n const r2 = radius * radius;\r\n\r\n self._forEachVoxelWithinRadius(center, radius, (voxel, isInside) => {\r\n if (isInside) {\r\n self._forEachAtomInVoxel(voxel, process);\r\n } else {\r\n self._forEachAtomInVoxel(voxel, (atom) => {\r\n if (center.distanceToSquared(atom.position) <= r2) {\r\n process(atom);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms defined by mask\r\n *\r\n * @param {Complex} complex - complex\r\n * @param {number} mask - bit mask\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinDistFromMasked(complex, mask, dist, process) {\r\n this._forEachAtomWithinDistFromGroup((atomProc) => {\r\n complex.forEachAtom((atom) => {\r\n if ((atom.mask & mask) !== 0) {\r\n atomProc(atom);\r\n }\r\n });\r\n }, dist, process);\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms defined by selector\r\n *\r\n * @param {Complex} complex - complex\r\n * @param {number} selector - selector\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinDistFromSelected(complex, selector, dist, process) {\r\n this._forEachAtomWithinDistFromGroup((atomProc) => {\r\n complex.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom)) {\r\n atomProc(atom);\r\n }\r\n });\r\n }, dist, process);\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms\r\n *\r\n * @param {function} forEachAtom - enumerator of atoms in the group\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n _forEachAtomWithinDistFromGroup(forEachAtom, dist, process) {\r\n const self = this;\r\n const r2 = dist * dist;\r\n\r\n const voxels = [];\r\n const atoms = [];\r\n let idx = 0;\r\n\r\n // build \"within radius\" atom list for each voxel\r\n forEachAtom((atom) => {\r\n self._forEachVoxelWithinRadius(atom.position, dist, (voxel, isInside) => {\r\n if (isInside) {\r\n // this voxel is inside circle -- no check will be required\r\n voxels[voxel] = -1;\r\n } else if (typeof voxels[voxel] === 'undefined') {\r\n // this voxel isn't covered yet -- start building list of atoms\r\n atoms.push(atom);\r\n atoms.push(-1);\r\n voxels[voxel] = idx;\r\n idx += 2;\r\n } else if (voxels[voxel] !== -1) {\r\n // this voxel has a list of atoms required for distance check -- add atom to the list\r\n atoms.push(atom);\r\n atoms.push(voxels[voxel]);\r\n voxels[voxel] = idx;\r\n idx += 2;\r\n }\r\n });\r\n });\r\n\r\n let voxel;\r\n\r\n const processIfWithin = function (atom) {\r\n if (typeof voxels[voxel] === 'undefined') {\r\n return;\r\n }\r\n\r\n idx = voxels[voxel];\r\n if (idx === -1) {\r\n // this voxel is fully covered\r\n process(atom);\r\n return;\r\n }\r\n\r\n // check distance to each atom within radius from this voxel\r\n for (; idx >= 0; idx = atoms[idx + 1]) {\r\n if (atom.position.distanceToSquared(atoms[idx].position) < r2) {\r\n process(atom);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n // for each marked voxel\r\n for (voxel in voxels) {\r\n if (voxels.hasOwnProperty(voxel)) {\r\n self._forEachAtomInVoxel(voxel, processIfWithin);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default VoxelWorld;\r\n","import ResidueType from './ResidueType';\r\nimport PairCollection from './AtomPairs';\r\n\r\nconst MINIMAL_DISTANCE = 0.5;\r\nconst MIN_HBOND_ENERGY = -9.9;\r\nconst MAX_HBOND_ENERGY = -0.5;\r\nconst COUPLING_CONSTANT = -27.888; // = -332 * 0.42 * 0.2\r\nconst MAX_COUPLING_DISTANCE = 5.0; // how far is the closest atom of a potential partner residue from CA atom\r\nconst MAX_RESIDUES_THRESHOLD = 1000;\r\n\r\nexport default class HBondInfo {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._hbonds = []; // array of bond info for each residue\r\n if (this._complex._residues.length > MAX_RESIDUES_THRESHOLD) {\r\n this._buildVW(); // optimized version using voxel grid\r\n } else {\r\n this._build(); // test all pairs of residues\r\n }\r\n }\r\n\r\n isBond(from, to) {\r\n if (this._hbonds[from]) {\r\n const [acc0, acc1] = this._hbonds[from].acceptor;\r\n if (acc0 && acc0.residue === to && acc0.energy < MAX_HBOND_ENERGY) {\r\n return true;\r\n }\r\n if (acc1 && acc1.residue === to && acc1.energy < MAX_HBOND_ENERGY) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n _build() {\r\n const self = this;\r\n\r\n for (let i = 0; i < this._complex._residues.length - 1; ++i) {\r\n const ri = this._complex._residues[i];\r\n if ((ri.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n let preri = null;\r\n if (i > 0 && (this._complex._residues[i - 1].getType().flags & ResidueType.Flags.PROTEIN)\r\n && ri._sequence === this._complex._residues[i - 1]._sequence + 1) {\r\n preri = this._complex._residues[i - 1];\r\n }\r\n\r\n for (let j = i + 1; j < this._complex._residues.length; ++j) {\r\n const rj = this._complex._residues[j];\r\n if ((rj.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n let prerj = null;\r\n if ((this._complex._residues[j - 1].getType().flags & ResidueType.Flags.PROTEIN)\r\n && rj._sequence === this._complex._residues[j - 1]._sequence + 1) {\r\n prerj = this._complex._residues[j - 1];\r\n }\r\n\r\n self._calcHBondEnergy(preri, ri, rj);\r\n if (j !== i + 1) {\r\n self._calcHBondEnergy(prerj, rj, ri);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _buildVW() {\r\n const self = this;\r\n const residues = this._complex._residues;\r\n let ri;\r\n let preri;\r\n\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return;\r\n }\r\n\r\n const pairs = new PairCollection(this._complex._residues.length * this._complex._residues.length / 2);\r\n\r\n function processAtom(atom) {\r\n const rj = atom.residue;\r\n\r\n if (rj._index === ri._index) {\r\n return;\r\n }\r\n\r\n if ((rj.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n return;\r\n }\r\n\r\n if (!pairs.addPair(ri._index, rj._index)) {\r\n // we've seen this pair\r\n return;\r\n }\r\n\r\n // get predecessor in chain\r\n let prerj = rj._index > 0 ? residues[rj._index - 1] : null;\r\n if (prerj\r\n && ((prerj.getType().flags & ResidueType.Flags.PROTEIN) === 0 || rj._sequence !== prerj._sequence + 1)) {\r\n prerj = null;\r\n }\r\n\r\n self._calcHBondEnergy(preri, ri, rj);\r\n if (rj._index !== ri._index + 1) {\r\n self._calcHBondEnergy(prerj, rj, ri);\r\n }\r\n }\r\n\r\n for (let i = 0; i < residues.length - 1; ++i) {\r\n ri = residues[i];\r\n if ((ri.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n preri = i > 0 ? residues[i - 1] : null;\r\n if (preri\r\n && ((preri.getType().flags & ResidueType.Flags.PROTEIN) === 0 || ri._sequence !== preri._sequence + 1)) {\r\n preri = null;\r\n }\r\n\r\n vw.forEachAtomWithinRadius(this._residueGetCAlpha(ri), MAX_COUPLING_DISTANCE, processAtom);\r\n }\r\n }\r\n\r\n _residueGetCAlpha(res) {\r\n for (let i = 0; i < res._atoms.length; ++i) {\r\n const { name } = res._atoms[i];\r\n if (name === 'CA'\r\n || name === 'C1') {\r\n return res._atoms[i].position;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _residueGetCO(res) {\r\n let c = null;\r\n let o = null;\r\n\r\n res.forEachAtom((a) => {\r\n if (a.name === 'C') {\r\n c = a.position;\r\n } else if (a.name === 'O') {\r\n o = a.position;\r\n }\r\n });\r\n\r\n return [c, o];\r\n }\r\n\r\n // TODO Support hydrogen defined in complex\r\n _residueGetNH(prev, res) {\r\n const [c, o] = this._residueGetCO(prev);\r\n\r\n let n;\r\n res.forEachAtom((a) => {\r\n if (a.name === 'N') {\r\n n = a.position;\r\n }\r\n });\r\n\r\n if (c && o && n) {\r\n // calculate hydrogen position\r\n const h = c.clone();\r\n h.sub(o);\r\n h.multiplyScalar(1.0 / h.length());\r\n h.add(n);\r\n\r\n return [n, h];\r\n }\r\n\r\n return [null, null];\r\n }\r\n\r\n _calcHBondEnergy(predonor, donor, acceptor) {\r\n let result = 0;\r\n\r\n if (predonor === null) {\r\n return result;\r\n }\r\n\r\n if (donor.getType().getName() !== 'PRO') {\r\n const [n, h] = this._residueGetNH(predonor, donor);\r\n const [c, o] = this._residueGetCO(acceptor);\r\n\r\n if (n === null || h === null || c === null || o === null) {\r\n return result;\r\n }\r\n\r\n const distanceHO = h.distanceTo(o);\r\n const distanceHC = h.distanceTo(c);\r\n const distanceNC = n.distanceTo(c);\r\n const distanceNO = n.distanceTo(o);\r\n\r\n if (distanceHO < MINIMAL_DISTANCE || distanceHC < MINIMAL_DISTANCE\r\n || distanceNC < MINIMAL_DISTANCE || distanceNO < MINIMAL_DISTANCE) {\r\n result = MIN_HBOND_ENERGY;\r\n } else {\r\n result = COUPLING_CONSTANT / distanceHO - COUPLING_CONSTANT / distanceHC\r\n + COUPLING_CONSTANT / distanceNC - COUPLING_CONSTANT / distanceNO;\r\n }\r\n\r\n // DSSP compatibility mode:\r\n result = Math.round(result * 1000) / 1000;\r\n\r\n if (result < MIN_HBOND_ENERGY) {\r\n result = MIN_HBOND_ENERGY;\r\n }\r\n }\r\n\r\n // update donor\r\n if (typeof this._hbonds[donor._index] === 'undefined') {\r\n this._hbonds[donor._index] = {\r\n donor: [],\r\n acceptor: [],\r\n };\r\n }\r\n const donorInfo = this._hbonds[donor._index];\r\n\r\n if (donorInfo.acceptor.length < 2) {\r\n donorInfo.acceptor.push({\r\n residue: acceptor._index,\r\n energy: result,\r\n });\r\n }\r\n\r\n if (donorInfo.acceptor.length > 1) {\r\n if (result < donorInfo.acceptor[0].energy) {\r\n donorInfo.acceptor[1].residue = donorInfo.acceptor[0].residue;\r\n donorInfo.acceptor[1].energy = donorInfo.acceptor[0].energy;\r\n donorInfo.acceptor[0].residue = acceptor._index;\r\n donorInfo.acceptor[0].energy = result;\r\n } else if (result < donorInfo.acceptor[1].energy) {\r\n donorInfo.acceptor[1].residue = acceptor._index;\r\n donorInfo.acceptor[1].energy = result;\r\n }\r\n }\r\n\r\n // update acceptor\r\n if (typeof this._hbonds[acceptor._index] === 'undefined') {\r\n this._hbonds[acceptor._index] = {\r\n donor: [],\r\n acceptor: [],\r\n };\r\n }\r\n const accInfo = this._hbonds[acceptor._index];\r\n\r\n if (accInfo.donor.length < 2) {\r\n accInfo.donor.push({\r\n residue: donor._index,\r\n energy: result,\r\n });\r\n }\r\n\r\n if (accInfo.donor.length > 1) {\r\n if (result < accInfo.donor[0].energy) {\r\n accInfo.donor[1].residue = accInfo.donor[0].residue;\r\n accInfo.donor[1].energy = accInfo.donor[0].energy;\r\n accInfo.donor[0].residue = donor._index;\r\n accInfo.donor[0].energy = result;\r\n } else if (result < accInfo.donor[1].energy) {\r\n accInfo.donor[1].residue = donor._index;\r\n accInfo.donor[1].energy = result;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import HBondInfo from './HBondInfo';\r\nimport ResidueType from './ResidueType';\r\n\r\nconst BridgeType = Object.freeze({\r\n NO_BRIDGE: 0,\r\n PARALLEL: 1,\r\n ANTI_PARALLEL: 2,\r\n});\r\n\r\nconst HelixFlag = Object.freeze({\r\n START: 1,\r\n MIDDLE: 2,\r\n END: 3,\r\n START_AND_END: 4,\r\n});\r\n\r\nconst StructureType = Object.freeze({\r\n STRAND: 'E',\r\n BRIDGE: 'B',\r\n HELIX_310: 'G',\r\n HELIX_ALPHA: 'H',\r\n HELIX_PI: 'I',\r\n TURN: 'T',\r\n BEND: 'S',\r\n LOOP: ' ',\r\n});\r\n\r\nexport default class SecondaryStructureMap {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._build();\r\n }\r\n\r\n _build() {\r\n const self = this;\r\n this._hbonds = new HBondInfo(this._complex);\r\n this._ss = []; // DSSP map by residue\r\n\r\n // auxilliary data\r\n this._sheet = [];\r\n this._betaPartners = [];\r\n this._bend = [];\r\n for (let i = 0; i < this._complex.getResidues().length; ++i) {\r\n this._betaPartners[i] = [];\r\n }\r\n this._helixFlags = [];\r\n this._helixFlags[3] = [];\r\n this._helixFlags[4] = [];\r\n this._helixFlags[5] = [];\r\n\r\n // calculate peptide chain lengths\r\n this._chainLengths = [];\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i].getResidues();\r\n let len = 0;\r\n for (; len < chain.length; ++len) {\r\n if ((chain[len].getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n break;\r\n }\r\n }\r\n this._chainLengths[i] = len;\r\n }\r\n\r\n this._buildBetaSheets();\r\n\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n self._buildAlphaHelices(this._complex._chains[i].getResidues(), this._chainLengths[i], false);\r\n }\r\n }\r\n\r\n _buildAlphaHelices(inResidues, chainLength, inPreferPiHelices) {\r\n // Helix and Turn\r\n for (let stride = 3; stride <= 5; ++stride) {\r\n if (inResidues.length < stride) {\r\n break;\r\n }\r\n\r\n for (let i = 0; i + stride < chainLength; ++i) {\r\n if (this._hbonds.isBond(inResidues[i + stride]._index, inResidues[i]._index)\r\n /* && NoChainBreak(res[i], res[i + stride]) */) {\r\n this._helixFlags[stride][inResidues[i + stride]._index] = HelixFlag.END;\r\n for (let j = i + 1; j < i + stride; ++j) {\r\n if (typeof this._helixFlags[stride][inResidues[j]._index] === 'undefined') {\r\n this._helixFlags[stride][inResidues[j]._index] = HelixFlag.MIDDLE;\r\n }\r\n }\r\n\r\n if (this._helixFlags[stride][inResidues[i]._index] === HelixFlag.END) {\r\n this._helixFlags[stride][inResidues[i]._index] = HelixFlag.START_AND_END;\r\n } else {\r\n this._helixFlags[stride][inResidues[i]._index] = HelixFlag.START;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 2; i < chainLength - 2; ++i) {\r\n const kappa = this._kappa(inResidues[i - 2], inResidues[i], inResidues[i + 2]);\r\n this._bend[inResidues[i]._index] = (kappa !== 360 && kappa > 70);\r\n }\r\n\r\n for (let i = 1; i + 4 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 4) && this._isHelixStart(inResidues[i - 1]._index, 4)) {\r\n for (let j = i; j <= i + 3; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_ALPHA;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 3 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 3) && this._isHelixStart(inResidues[i - 1]._index, 3)) {\r\n let empty = true;\r\n for (let j = i; empty && j <= i + 2; ++j) {\r\n empty = typeof this._ss[inResidues[j]._index] === 'undefined'\r\n || this._ss[inResidues[j]._index] === StructureType.HELIX_310;\r\n }\r\n if (empty) {\r\n for (let j = i; j <= i + 2; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_310;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 5 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 5) && this._isHelixStart(inResidues[i - 1]._index, 5)) {\r\n let empty = true;\r\n for (let j = i; empty && j <= i + 4; ++j) {\r\n empty = typeof this._ss[inResidues[j]._index] === 'undefined'\r\n || this._ss[inResidues[j]._index] === StructureType.HELIX_PI\r\n || (inPreferPiHelices && this._ss[inResidues[j]._index] === StructureType.HELIX_ALPHA);\r\n }\r\n if (empty) {\r\n for (let j = i; j <= i + 4; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_PI;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 1 < chainLength; ++i) {\r\n if (typeof this._ss[inResidues[i]._index] === 'undefined') {\r\n let isTurn = false;\r\n for (let stride = 3; stride <= 5 && !isTurn; ++stride) {\r\n for (let k = 1; k < stride && !isTurn; ++k) {\r\n isTurn = (i >= k) && this._isHelixStart(inResidues[i - k]._index, stride);\r\n }\r\n }\r\n\r\n if (isTurn) {\r\n this._ss[inResidues[i]._index] = StructureType.TURN;\r\n } else if (this._bend[inResidues[i]._index]) {\r\n this._ss[inResidues[i]._index] = StructureType.BEND;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _residueGetCAlpha(res) {\r\n for (let i = 0; i < res._atoms.length; ++i) {\r\n const { name } = res._atoms[i];\r\n if (name === 'CA'\r\n || name === 'C1') {\r\n return res._atoms[i].position;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _cosinusAngle(p1, p2, p3, p4) {\r\n const v12 = p1.clone().sub(p2);\r\n const v34 = p3.clone().sub(p4);\r\n\r\n let result = 0;\r\n\r\n const x = v12.dot(v12) * v34.dot(v34);\r\n if (x > 0) {\r\n result = v12.dot(v34) / Math.sqrt(x);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _kappa(prevPrev, res, nextNext) {\r\n const curCA = this._residueGetCAlpha(res);\r\n const ppCA = this._residueGetCAlpha(prevPrev);\r\n const nnCA = this._residueGetCAlpha(nextNext);\r\n if (curCA === null || ppCA === null || nnCA === null) {\r\n return 180;\r\n }\r\n\r\n const ckap = this._cosinusAngle(curCA, ppCA, nnCA, curCA);\r\n const skap = Math.sqrt(1 - ckap * ckap);\r\n return Math.atan2(skap, ckap) * 180 / Math.PI;\r\n }\r\n\r\n _isHelixStart(res, stride) {\r\n return (this._helixFlags[stride][res] === HelixFlag.START\r\n || this._helixFlags[stride][res] === HelixFlag.START_AND_END);\r\n }\r\n\r\n _buildBetaSheets() {\r\n // find bridges\r\n // check each chain against each other chain, and against itself\r\n const bridges = [];\r\n for (let a = 0; a < this._complex._chains.length; ++a) {\r\n const lenA = this._chainLengths[a];\r\n if (lenA <= 4) {\r\n continue;\r\n }\r\n\r\n const chainA = this._complex._chains[a].getResidues();\r\n\r\n for (let b = a; b < this._complex._chains.length; ++b) {\r\n const lenB = this._chainLengths[b];\r\n if (lenB <= 4) {\r\n continue;\r\n }\r\n\r\n const chainB = this._complex._chains[b].getResidues();\r\n\r\n for (let i = 1; i + 1 < lenA; ++i) {\r\n const ri = chainA[i];\r\n\r\n let j = 1;\r\n if (b === a) {\r\n j = i + 3; // check for self-bridges forward down the chain\r\n }\r\n\r\n for (; j + 1 < lenB; ++j) {\r\n const rj = chainB[j];\r\n\r\n const type = this._testBridge(chainA, i, chainB, j);\r\n if (type === BridgeType.NO_BRIDGE) {\r\n continue;\r\n }\r\n\r\n // there is a bridge, try to attach it to previously found sequence\r\n let found = false;\r\n for (const bridge of bridges) {\r\n if (type !== bridge.type || ri._index !== bridge.i[bridge.i.length - 1] + 1) {\r\n continue;\r\n }\r\n\r\n if (type === BridgeType.PARALLEL && bridge.j[bridge.j.length - 1] + 1 === rj._index) {\r\n bridge.i.push(ri._index);\r\n bridge.j.push(rj._index);\r\n found = true;\r\n break;\r\n }\r\n\r\n if (type === BridgeType.ANTI_PARALLEL && bridge.j[0] - 1 === rj._index) {\r\n bridge.i.push(ri._index);\r\n bridge.j.unshift(rj._index);\r\n found = true;\r\n break;\r\n }\r\n }\r\n\r\n // this bridge cannot be attached anywhere, start a new sequence\r\n if (!found) {\r\n bridges.push({\r\n type,\r\n i: [ri._index],\r\n chainI: ri.getChain()._index,\r\n j: [rj._index],\r\n chainJ: rj.getChain()._index,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // extend ladders\r\n bridges.sort((a, b) => {\r\n if (a.chainI < b.chainI || (a.chainI === b.chainI && a.i[0] < b.i[0])) {\r\n return -1;\r\n }\r\n return 1;\r\n });\r\n\r\n for (let i = 0; i < bridges.length; ++i) {\r\n for (let j = i + 1; j < bridges.length; ++j) {\r\n const ibi = bridges[i].i[0];\r\n const iei = bridges[i].i[bridges[i].i.length - 1];\r\n const jbi = bridges[i].j[0];\r\n const jei = bridges[i].j[bridges[i].j.length - 1];\r\n const ibj = bridges[j].i[0];\r\n const iej = bridges[j].i[bridges[j].i.length - 1];\r\n const jbj = bridges[j].j[0];\r\n const jej = bridges[j].j[bridges[j].j.length - 1];\r\n\r\n if (bridges[i].type !== bridges[j].type\r\n || this._hasChainBreak(Math.min(ibi, ibj), Math.max(iei, iej))\r\n || this._hasChainBreak(Math.min(jbi, jbj), Math.max(jei, jej))\r\n || ibj - iei >= 6 || (iei >= ibj && ibi <= iej)) {\r\n continue;\r\n }\r\n\r\n let bulge = false;\r\n if (bridges[i].type === BridgeType.PARALLEL) {\r\n bulge = ((jbj - jei < 6 && ibj - iei < 3) || (jbj - jei < 3));\r\n } else {\r\n bulge = ((jbi - jej < 6 && ibj - iei < 3) || (jbi - jej < 3));\r\n }\r\n\r\n if (bulge) {\r\n bridges[i].i = bridges[i].i.concat(bridges[j].i);\r\n if (bridges[i].type === BridgeType.PARALLEL) {\r\n bridges[i].j = bridges[i].j.concat(bridges[j].j);\r\n } else {\r\n bridges[i].j = bridges[j].j.concat(bridges[i].j);\r\n }\r\n bridges.splice(j--, 1);\r\n }\r\n }\r\n }\r\n\r\n // Sheet\r\n const ladderset = new Set();\r\n for (let i = 0; i < bridges.length; ++i) {\r\n ladderset.add(bridges[i]);\r\n }\r\n\r\n let sheet = 1;\r\n let ladder = 0;\r\n while (ladderset.size > 0) {\r\n let bridge = ladderset.values().next().value;\r\n ladderset.delete(bridge);\r\n\r\n const sheetset = new Set();\r\n sheetset.add(bridge);\r\n\r\n let toMove;\r\n do {\r\n toMove = new Set();\r\n for (const a of sheetset.values()) {\r\n for (const b of ladderset.values()) {\r\n if (this._areBridgesLinked(a, b)) {\r\n toMove.add(b);\r\n }\r\n }\r\n }\r\n for (bridge of toMove.values()) {\r\n sheetset.add(bridge);\r\n ladderset.delete(bridge);\r\n }\r\n } while (toMove.size > 0);\r\n\r\n for (bridge of sheetset.values()) {\r\n bridge.ladder = ladder;\r\n bridge.sheet = sheet;\r\n bridge.link = sheetset;\r\n ++ladder;\r\n }\r\n\r\n ++sheet;\r\n }\r\n\r\n for (let i = 0; i < bridges.length; ++i) {\r\n const bridge = bridges[i];\r\n\r\n // find out if any of the i and j set members already have\r\n // a bridge assigned, if so, we're assigning bridge 2\r\n\r\n let betai = 0;\r\n let betaj = 0;\r\n\r\n for (let l = 0; l < bridge.i.length; ++l) {\r\n if (this._betaPartners[bridge.i[l]][0]) {\r\n betai = 1;\r\n break;\r\n }\r\n }\r\n\r\n for (let l = 0; l < bridge.j.length; ++l) {\r\n if (this._betaPartners[bridge.j[l]][0]) {\r\n betaj = 1;\r\n break;\r\n }\r\n }\r\n\r\n let ss = StructureType.BRIDGE;\r\n if (bridge.i.length > 1) {\r\n ss = StructureType.STRAND;\r\n }\r\n\r\n if (bridge.type === BridgeType.PARALLEL) {\r\n let j = 0;\r\n for (let k = 0; k < bridge.i.length; ++k) {\r\n this._betaPartners[bridge.i[k]][betai] = {\r\n residue: bridge.j[j++],\r\n ladder: bridge.ladder,\r\n parallel: true,\r\n };\r\n }\r\n\r\n j = 0;\r\n for (let k = 0; k < bridge.j.length; ++k) {\r\n this._betaPartners[bridge.j[k]][betaj] = {\r\n residue: bridge.i[j++],\r\n ladder: bridge.ladder,\r\n parallel: true,\r\n };\r\n }\r\n } else {\r\n let j = bridge.j.length - 1;\r\n for (let k = 0; k < bridge.i.length; ++k) {\r\n this._betaPartners[bridge.i[k]][betai] = {\r\n residue: bridge.j[j--],\r\n ladder: bridge.ladder,\r\n parallel: false,\r\n };\r\n }\r\n\r\n j = bridge.i.length - 1;\r\n for (let k = 0; k < bridge.j.length; ++k) {\r\n this._betaPartners[bridge.j[k]][betaj] = {\r\n residue: bridge.i[j--],\r\n ladder: bridge.ladder,\r\n parallel: false,\r\n };\r\n }\r\n }\r\n\r\n for (let k = bridge.i[0]; k <= bridge.i[bridge.i.length - 1]; ++k) {\r\n if (this._ss[k] !== StructureType.STRAND) {\r\n this._ss[k] = ss;\r\n this._sheet[k] = bridge.sheet;\r\n }\r\n }\r\n\r\n for (let k = bridge.j[0]; k <= bridge.j[bridge.j.length - 1]; ++k) {\r\n if (this._ss[k] !== StructureType.STRAND) {\r\n this._ss[k] = ss;\r\n this._sheet[k] = bridge.sheet;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _testBridge(chainA, from, chainB, to) {\r\n let result = BridgeType.NO_BRIDGE;\r\n\r\n const a = chainA[from - 1]._index;\r\n const b = chainA[from]._index;\r\n const c = chainA[from + 1]._index;\r\n const d = chainB[to - 1]._index;\r\n const e = chainB[to]._index;\r\n const f = chainB[to + 1]._index;\r\n\r\n const isBond = this._hbonds.isBond.bind(this._hbonds);\r\n if ((isBond(c, e) && isBond(e, a)) || (isBond(f, b) && isBond(b, d))) {\r\n result = BridgeType.PARALLEL;\r\n } else if ((isBond(c, d) && isBond(f, a)) || (isBond(e, b) && isBond(b, e))) {\r\n result = BridgeType.ANTI_PARALLEL;\r\n }\r\n return result;\r\n }\r\n\r\n // return true if any of the residues in bridge a is identical to any of the residues in bridge b\r\n _areBridgesLinked(a, b) {\r\n const ai = new Set(a.i);\r\n const aj = new Set(a.j);\r\n\r\n for (const i of b.i) {\r\n if (ai.has(i) || aj.has(i)) {\r\n return true;\r\n }\r\n }\r\n\r\n for (const i of b.j) {\r\n if (ai.has(i) || aj.has(i)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _hasChainBreak(from, to) {\r\n for (let i = from + 1; i <= to; ++i) {\r\n if (this._complex._residues[i]._sequence !== this._complex._residues[i - 1]._sequence + 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nSecondaryStructureMap.StructureType = StructureType;\r\n","import * as THREE from 'three';\r\nimport logger from '../utils/logger';\r\nimport Atom from './Atom';\r\nimport Chain from './Chain';\r\nimport Helix from './Helix';\r\nimport Strand from './Strand';\r\nimport Sheet from './Sheet';\r\nimport Component from './Component';\r\nimport ResidueType from './ResidueType';\r\nimport Bond from './Bond';\r\nimport AutoBond from './AutoBond';\r\nimport AromaticLoopsMarker from './AromaticLoopsMarker';\r\nimport BiologicalUnit from './BiologicalUnit';\r\nimport selectors from './selectors';\r\nimport VoxelWorld from './VoxelWorld';\r\nimport SecondaryStructureMap from './SecondaryStructureMap';\r\nimport StructuralElement from './StructuralElement';\r\n\r\nconst VOXEL_SIZE = 5.0;\r\n\r\nconst { StructureType } = SecondaryStructureMap;\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\n// see http://www.wwpdb.org/documentation/file-format-content/format33/sect5.html#HELIX\r\nconst helixClassMap = {\r\n [StructureType.HELIX_ALPHA]: 1,\r\n [StructureType.HELIX_PI]: 3,\r\n [StructureType.HELIX_310]: 5,\r\n};\r\n\r\nconst loopMap = {\r\n [StructureType.BRIDGE]: StructuralElementType.BRIDGE,\r\n [StructureType.TURN]: StructuralElementType.TURN,\r\n [StructureType.BEND]: StructuralElementType.BEND,\r\n [StructureType.LOOP]: StructuralElementType.COIL,\r\n};\r\n\r\n/**\r\n * The entire complex of the molecules under study.\r\n *\r\n * @exports Complex\r\n * @constructor\r\n */\r\nclass Complex {\r\n constructor() {\r\n this._chains = [];\r\n this._components = [];\r\n this._helices = [];\r\n this._sheets = [];\r\n this.structures = [];\r\n\r\n this._residueTypes = Object.create(ResidueType.StandardTypes);\r\n this._atoms = [];\r\n this._residues = [];\r\n this._bonds = [];\r\n this._sgroups = [];\r\n this._molecules = [];\r\n this._maskNeedsUpdate = false;\r\n\r\n this.metadata = {};\r\n\r\n this.symmetry = [];\r\n this.units = [new BiologicalUnit(this)];\r\n this._currentUnit = 0; // default biological unit is the asymmetric unit\r\n }\r\n\r\n addAtom(atom) {\r\n const index = this._atoms.length;\r\n this._atoms.push(atom);\r\n return index;\r\n }\r\n\r\n addSheet(sheet) {\r\n const index = this._sheets.length;\r\n this._sheets.push(sheet);\r\n return index;\r\n }\r\n\r\n addHelix(helix) {\r\n const index = this._helices.length;\r\n this._helices.push(helix);\r\n return index;\r\n }\r\n\r\n getAtoms() {\r\n return this._atoms;\r\n }\r\n\r\n getBonds() {\r\n return this._bonds;\r\n }\r\n\r\n getAtomCount() {\r\n return this._atoms.length;\r\n }\r\n\r\n addResidue(residue) {\r\n const index = this._residues.length;\r\n this._residues.push(residue);\r\n return index;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n this.forEachChain((chain) => {\r\n chain.updateToFrame(frameData);\r\n });\r\n }\r\n\r\n addResidueType(resName) {\r\n const rt = this._residueTypes[resName] = new ResidueType(resName, 'Unknown', '');\r\n return rt;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residues.length;\r\n }\r\n\r\n getResidues() {\r\n return this._residues;\r\n }\r\n\r\n getSGroupCount() {\r\n return this._sgroups.length;\r\n }\r\n\r\n getSGroups() {\r\n return this._sgroups;\r\n }\r\n\r\n /*\r\n Extract atom by its fullname: #chainName#.#residueId#.#atomName#\r\n */\r\n getAtomByFullname(fullName) {\r\n const parts = fullName.split('.');\r\n if (parts.length !== 3) {\r\n return null;\r\n }\r\n\r\n const chainName = parts[0];\r\n const resId = parseInt(parts[1], 10);\r\n if (Number.isNaN(resId)) {\r\n return null;\r\n }\r\n const atomName = parts[2].toUpperCase();\r\n\r\n let currAtom = null;\r\n this.forEachChain((chain) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (chain._name.localeCompare(chainName) === 0) {\r\n chain.forEachResidue((residue) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (residue._sequence === resId) {\r\n residue.forEachAtom((atom) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (atomName.localeCompare(atom.name) === 0) {\r\n currAtom = atom;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n return currAtom;\r\n }\r\n\r\n /**\r\n * Create a new chain.\r\n *\r\n * @param {string} name - Chain name.\r\n * @returns {Chain} - Newly created chain.\r\n */\r\n addChain(name) {\r\n const result = new Chain(this, name);\r\n this._chains.push(result);\r\n return result;\r\n }\r\n\r\n getChain(name) {\r\n for (let i = 0, n = this._chains.length; i < n; ++i) {\r\n const chain = this._chains[i];\r\n if (chain.getName() === name) {\r\n return chain;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getChainCount() {\r\n return this._chains.length;\r\n }\r\n\r\n getMolecules() {\r\n return this._molecules;\r\n }\r\n\r\n getMoleculeCount() {\r\n return this._molecules.length;\r\n }\r\n\r\n forEachAtom(process) {\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n process(atoms[i]);\r\n }\r\n }\r\n\r\n forEachBond(process) {\r\n const bonds = this._bonds;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]);\r\n }\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n forEachChain(process) {\r\n const chains = this._chains;\r\n for (let i = 0, n = chains.length; i < n; ++i) {\r\n process(chains[i]);\r\n }\r\n }\r\n\r\n forEachMolecule(process) {\r\n const molecules = this._molecules;\r\n const n = molecules.length;\r\n for (let i = 0; i < n; ++i) {\r\n process(molecules[i]);\r\n }\r\n }\r\n\r\n forEachSGroup(process) {\r\n const groups = this._sgroups;\r\n for (let i = 0, n = groups.length; i < n; ++i) {\r\n process(groups[i]);\r\n }\r\n }\r\n\r\n forEachComponent(process) {\r\n const components = this._components;\r\n for (let i = 0, n = components.length; i < n; ++i) {\r\n process(components[i]);\r\n }\r\n }\r\n\r\n forEachVisibleComponent(process) {\r\n const components = this._components;\r\n for (let i = 0, n = components.length; i < n; ++i) {\r\n process(components[i]);\r\n }\r\n }\r\n\r\n addBond(left, right, order, type, fixed) {\r\n const bond = new Bond(left, right, order, type, fixed);\r\n this._bonds.push(bond);\r\n return bond;\r\n }\r\n\r\n getBondCount() {\r\n return this._bonds.length;\r\n }\r\n\r\n getResidueType(name) {\r\n return this._residueTypes[name] || null;\r\n }\r\n\r\n getUnifiedSerial(chain, serial, iCode) {\r\n const maxSerial = 65536;\r\n const chainShift = maxSerial * 256;\r\n return serial + iCode * maxSerial + chain * chainShift;\r\n }\r\n\r\n splitUnifiedSerial(uniSerial) {\r\n const maxSerial = 65536;\r\n const chainShift = maxSerial * 256;\r\n const chainId = Math.floor(uniSerial / chainShift);\r\n const remnant = uniSerial - chainId * chainShift;\r\n const insCode = Math.floor(remnant / maxSerial);\r\n const ser = remnant - insCode * maxSerial;\r\n return { chain: chainId, serial: ser, iCode: insCode };\r\n }\r\n\r\n _fillCmpEdit() {\r\n const self = this;\r\n const components = this._components;\r\n\r\n function addComp() {\r\n const comp = new Component(self);\r\n comp._index = components.length;\r\n components[comp._index] = comp;\r\n return comp;\r\n }\r\n\r\n this.forEachChain((chain) => {\r\n const residues = chain._residues;\r\n const resCount = residues.length;\r\n if (resCount < 1) {\r\n return;\r\n }\r\n let comp = addComp();\r\n let currStart = residues[0]._index;\r\n\r\n for (let i = 0; i < resCount; ++i) {\r\n const currRes = residues[i];\r\n currRes._component = comp;\r\n\r\n const nextRes = i === resCount - 1 ? null : residues[i + 1];\r\n if (!nextRes\r\n || !currRes.isConnected(nextRes)\r\n || currRes._index !== nextRes._index - 1) {\r\n // the last condition is broken and incorrect\r\n // the refactoring of the Component is required in order to fix this issue\r\n comp.setSubDivs([{\r\n start: currStart,\r\n end: currRes._index,\r\n }]);\r\n if (nextRes) {\r\n currStart = nextRes._index;\r\n comp = addComp();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n // This function was added in the moment of despair\r\n // It was the dark times for miew\r\n _fillCmpNoedit() {\r\n const comp = new Component(this);\r\n comp._index = 0;\r\n\r\n const residues = this._residues;\r\n const resCount = residues.length;\r\n if (resCount === 0) {\r\n return;\r\n }\r\n\r\n const currSubDivs = [];\r\n let currStart = 0;\r\n for (let i = 0; i < resCount; ++i) {\r\n const currRes = residues[i];\r\n currRes._component = comp;\r\n\r\n const nextRes = i === resCount - 1 ? null : residues[i + 1];\r\n if (!nextRes\r\n || !currRes.isConnected(nextRes)) {\r\n // wrap up this interval\r\n currSubDivs[currSubDivs.length] = {\r\n start: currStart,\r\n end: i,\r\n };\r\n if (nextRes) {\r\n currStart = i + 1;\r\n }\r\n }\r\n }\r\n\r\n comp.setSubDivs(currSubDivs);\r\n this._components[comp._index] = comp;\r\n }\r\n\r\n /**\r\n * Fill components information.\r\n * @param {boolean} enableEditing - Restructure Complex to enable per-component editing.\r\n */\r\n _fillComponents(enableEditing) {\r\n if (enableEditing) {\r\n this._fillCmpEdit();\r\n } else {\r\n this._fillCmpNoedit();\r\n }\r\n }\r\n\r\n getCurrentUnit() {\r\n return this._currentUnit;\r\n }\r\n\r\n getDefaultBoundaries() {\r\n return this.units[0].getBoundaries();\r\n }\r\n\r\n getBoundaries() {\r\n return this.units[this._currentUnit].getBoundaries();\r\n }\r\n\r\n getTransforms() {\r\n return this.units[this._currentUnit].getTransforms();\r\n }\r\n\r\n getSelector() {\r\n return this.units[this._currentUnit].getSelector();\r\n }\r\n\r\n resetCurrentUnit() {\r\n this._currentUnit = 0;\r\n this.setCurrentUnit(1);\r\n }\r\n\r\n setCurrentUnit(newUnit) {\r\n if (newUnit !== null && newUnit !== undefined\r\n && newUnit !== this._currentUnit\r\n && newUnit >= 0\r\n && newUnit < this.units.length) {\r\n this._currentUnit = newUnit;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n _computeBounds() {\r\n const { units } = this;\r\n for (let i = 0, n = units.length; i < n; ++i) {\r\n units[i].computeBoundaries();\r\n }\r\n }\r\n\r\n onAtomPositionChanged() {\r\n this.forEachChain((a) => {\r\n a._finalize();\r\n });\r\n this.forEachComponent((c) => {\r\n c.update();\r\n });\r\n // Update bounding sphere and box\r\n this._computeBounds();\r\n this._finalizeBonds();\r\n this.forEachSGroup((s) => {\r\n s._rebuildSGroupOnAtomChange();\r\n });\r\n }\r\n\r\n update() {\r\n if (this._maskNeedsUpdate) {\r\n this.updateStructuresMask();\r\n this._maskNeedsUpdate = false;\r\n }\r\n }\r\n\r\n _finalizeBonds() {\r\n const bonds = this.getBonds();\r\n const n = bonds.length;\r\n for (let i = 0; i < n; ++i) {\r\n bonds[i]._index = i;\r\n }\r\n }\r\n\r\n /**\r\n * Finalizes complex's inner data(i.e. after parsing).\r\n * @param {objects} opts - Build bonds automatically.\r\n * @param {boolean} opts.needAutoBonding - Build bonds automatically.\r\n * @param {boolean} opts.detectAromaticLoops - Find/mark aromatic loops.\r\n * @param {boolean} opts.enableEditing - Restructure Complex to enable per-component editing.\r\n * @param {Array} [opts.serialAtomMap] - Array of atoms ordered by their serials.\r\n */\r\n finalize(opts) {\r\n opts = opts || {};\r\n // Put bonds into atoms\r\n const bonds = this._bonds;\r\n let i;\r\n let n;\r\n // remove invalid bonds\r\n for (i = bonds.length - 1; i >= 0; i--) {\r\n const bond = bonds[i];\r\n if (bond._left === null || bond._right === null) {\r\n bonds.splice(i, 1);\r\n } else {\r\n bond._left.bonds.push(bond);\r\n bond._right.bonds.push(bond);\r\n }\r\n }\r\n\r\n const residues = this._residues;\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n residues[i]._finalize();\r\n }\r\n\r\n this.forEachChain((a) => {\r\n a._finalize();\r\n });\r\n\r\n // WARNING! this MUST be done BEFORE computeBounds is called\r\n const { units } = this;\r\n for (i = 0, n = units.length; i < n; ++i) {\r\n units[i].finalize();\r\n }\r\n // try setting first biomolecule by defaults\r\n this.setCurrentUnit(1);\r\n\r\n const residueHash = {};\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n const res = residues[i];\r\n // This code is extremely dangerous for non-PDB formats\r\n residueHash[this.getUnifiedSerial(\r\n res.getChain().getName().charCodeAt(0),\r\n res.getSequence(),\r\n res.getICode().charCodeAt(0),\r\n )] = res;\r\n }\r\n\r\n const { structures } = this;\r\n for (i = 0, n = structures.length; i < n; ++i) {\r\n structures[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n const helices = this._helices;\r\n for (i = 0, n = helices.length; i < n; ++i) {\r\n helices[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n const sheets = this._sheets;\r\n for (i = 0, n = sheets.length; i < n; ++i) {\r\n sheets[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n // Update bounding sphere and box\r\n this._computeBounds();\r\n\r\n const atoms = this._atoms;\r\n for (i = 0, n = atoms.length; i < n; ++i) {\r\n const currAtom = atoms[i];\r\n currAtom.index = i;\r\n }\r\n\r\n if (opts.needAutoBonding) {\r\n // Ignore errors during autobonding\r\n try {\r\n const autoConnector = new AutoBond(this);\r\n autoConnector.build();\r\n autoConnector.destroy();\r\n } catch (e) {\r\n console.warn('Autobonding failed:', e);\r\n }\r\n }\r\n\r\n const chains = this._chains;\r\n for (i = 0, n = chains.length; i < n; ++i) {\r\n chains[i]._index = i;\r\n }\r\n\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n residues[i]._index = i;\r\n }\r\n\r\n // mark non-polar hydrogens\r\n for (i = 0, n = atoms.length; i < n; ++i) {\r\n const atom = atoms[i];\r\n if (atom.flags & Atom.Flags.HYDROGEN && atom.bonds.length === 1) {\r\n const bond = atom.bonds[0];\r\n const other = (bond._left !== atom && bond._left) || bond._right;\r\n if (other.flags & Atom.Flags.CARBON) {\r\n atom.flags |= Atom.Flags.NONPOLARH;\r\n }\r\n }\r\n }\r\n\r\n this._finalizeBonds();\r\n this._fillComponents(opts.enableEditing);\r\n\r\n const marker = new AromaticLoopsMarker(this);\r\n marker.markCycles();\r\n if (opts.detectAromaticLoops) { // TODO remove this condition clause, it is for debug purposes only!\r\n marker.detectCycles(); // TODO add conditional detection\r\n }\r\n\r\n this._finalizeMolecules();\r\n }\r\n\r\n _finalizeMolecules() {\r\n // add reference to molecule into residue\r\n for (let i = 0; i < this._molecules.length; i++) {\r\n const molecule = this._molecules[i];\r\n const count = molecule.residues.length;\r\n for (let j = 0; j < count; j++) {\r\n const residue = molecule.residues[j];\r\n residue._molecule = molecule;\r\n }\r\n }\r\n }\r\n\r\n updateStructuresMask() {\r\n const updater = (structure) => structure.collectMask();\r\n this.forEachResidue(updater);\r\n this.forEachChain(updater);\r\n this.forEachMolecule(updater);\r\n }\r\n\r\n countAtomsByMask(mask) {\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if ((atom.mask & mask) !== 0) {\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n getNumAtomsBySelector(selector) {\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom)) {\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n resetAtomMask(mask) {\r\n this.forEachAtom((atom) => {\r\n atom.mask = mask;\r\n });\r\n }\r\n\r\n markAtoms(selector, mask) {\r\n const setMask = mask;\r\n const clearMask = ~setMask;\r\n let count = 0;\r\n const totalSelector = selectors.keyword('And')(selector, this.getSelector());\r\n\r\n this.forEachAtom((atom) => {\r\n if (totalSelector.includesAtom(atom)) {\r\n atom.mask |= setMask;\r\n count++;\r\n } else {\r\n atom.mask &= clearMask;\r\n }\r\n });\r\n this._maskNeedsUpdate = true;\r\n\r\n return count;\r\n }\r\n\r\n markAtomsAdditionally(selector, mask) {\r\n const setMask = mask;\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom) && (atom.mask & mask) !== mask) {\r\n atom.mask |= setMask;\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n clearAtomBits(mask) {\r\n const clearMask = ~mask;\r\n this.forEachAtom((atom) => {\r\n atom.mask &= clearMask;\r\n });\r\n const reseter = (a) => {\r\n a._mask &= clearMask;\r\n };\r\n this.forEachAtom(reseter);\r\n this.forEachResidue(reseter);\r\n this.forEachChain(reseter);\r\n this.forEachMolecule(reseter);\r\n }\r\n\r\n getAtomNames() {\r\n if (this.hasOwnProperty('_atomNames')) {\r\n return this._atomNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[atom.name] = 1;\r\n });\r\n this._atomNames = Object.keys(dict);\r\n\r\n return this._atomNames;\r\n }\r\n\r\n getElements() {\r\n if (this.hasOwnProperty('_elements')) {\r\n return this._elements;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[atom.element.name] = 1;\r\n });\r\n this._elements = Object.keys(dict);\r\n\r\n return this._elements;\r\n }\r\n\r\n getResidueNames() {\r\n if (this.hasOwnProperty('_residueNames')) {\r\n return this._residueNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachResidue((res) => {\r\n dict[res._type._name] = 1;\r\n });\r\n this._residueNames = Object.keys(dict);\r\n\r\n return this._residueNames;\r\n }\r\n\r\n getChainNames() {\r\n if (this.hasOwnProperty('_chainNames')) {\r\n return this._chainNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachChain((chain) => {\r\n dict[chain._name] = 1;\r\n });\r\n this._chainNames = Object.keys(dict);\r\n\r\n return this._chainNames;\r\n }\r\n\r\n getAltLocNames() {\r\n if (this.hasOwnProperty('_altlocNames')) {\r\n return this._altlocNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[String.fromCharCode(atom.location)] = 1;\r\n });\r\n this._altlocNames = Object.keys(dict);\r\n\r\n return this._altlocNames;\r\n }\r\n\r\n getVoxelWorld() {\r\n if (!this.hasOwnProperty('_voxelWorld')) {\r\n try {\r\n this._voxelWorld = new VoxelWorld(\r\n this.getDefaultBoundaries().boundingBox,\r\n new THREE.Vector3(VOXEL_SIZE, VOXEL_SIZE, VOXEL_SIZE),\r\n );\r\n this._voxelWorld.addAtoms(this);\r\n } catch {\r\n logger.warn('Unable to create voxel world');\r\n this._voxelWorld = null;\r\n }\r\n }\r\n\r\n return this._voxelWorld;\r\n }\r\n\r\n /**\r\n * Simple function to make unified routine procedure without code duplication.\r\n * @param {Array} srcArray - Source chemical structure array (will be part of resulting chemical structure array).\r\n * @param {Array} dstArray - Resulting chemical structure array.\r\n * @param {number} param - Parameter for processor.\r\n * @param {function} functor - Processor for every element in array.\r\n */\r\n addElement(srcArray, dstArray, param, functor) {\r\n const { length } = srcArray;\r\n for (let i = 0; i < length; ++i) {\r\n const elem = srcArray[i];\r\n functor(elem, param);\r\n dstArray.push(elem);\r\n }\r\n }\r\n\r\n // this function joins multiple complexes into one (this)\r\n // atom, bond, ... objects are reused -- so input complexes are no longer valid\r\n joinComplexes(complexes) {\r\n // clear target complex\r\n this._chains = [];\r\n this._components = [];\r\n this._helices = [];\r\n this._sheets = [];\r\n this.structures = [];\r\n this._atoms = [];\r\n this._residues = [];\r\n this._bonds = [];\r\n this._sgroups = [];\r\n\r\n const self = this;\r\n let atomBias = 0;\r\n let bondBias = 0;\r\n let residueBias = 0;\r\n let chainBias = 0;\r\n let componentBias = 0;\r\n\r\n function processAtom(atom, bias) {\r\n atom.serial += bias;\r\n atom.index += bias;\r\n }\r\n\r\n function processBond(bond, bias) {\r\n bond._index += bias;\r\n }\r\n\r\n function processResidue(residue, bias) {\r\n residue._index += bias;\r\n }\r\n\r\n function processChain(chain, bias) {\r\n chain._complex = self;\r\n chain._index += bias;\r\n }\r\n\r\n function processComponent(component, bias) {\r\n component._complex = self;\r\n component._index += bias;\r\n }\r\n\r\n /**\r\n * Simple function to do nothing.\r\n */\r\n function doNothing() {\r\n }\r\n\r\n for (let i = 0; i < complexes.length; ++i) {\r\n const c = complexes[i];\r\n this.addElement(c._atoms, this._atoms, atomBias, processAtom);\r\n this.addElement(c._bonds, this._bonds, bondBias, processBond);\r\n this.addElement(c._residues, this._residues, residueBias, processResidue);\r\n this.addElement(c._chains, this._chains, chainBias, processChain);\r\n this.addElement(c._sheets, this._sheets, 0, doNothing);\r\n this.addElement(c._helices, this._helices, 0, doNothing);\r\n this.addElement(c._sgroups, this._sgroups, 0, doNothing);\r\n this.addElement(c._components, this._components, componentBias, processComponent);\r\n this.addElement(c.structures, this.structures, 0, doNothing);\r\n // merge residue types\r\n for (const rt in c._residueTypes) {\r\n if (c._residueTypes.hasOwnProperty(rt)) {\r\n this._residueTypes[rt] = c._residueTypes[rt];\r\n }\r\n }\r\n\r\n atomBias += c._atoms.length;\r\n bondBias += c._bonds.length;\r\n residueBias += c._residues.length;\r\n chainBias += c._chains.length;\r\n componentBias += c._components.length;\r\n }\r\n\r\n this._computeBounds();\r\n }\r\n\r\n /**\r\n * Replace secondary structure with calculated one.\r\n *\r\n * DSSP algorithm implementation is used.\r\n *\r\n * Kabsch W, Sander C. 1983. Dictionary of protein secondary structure: pattern recognition of hydrogen-bonded and\r\n * geometrical features. Biopolymers. 22(12):2577-2637. doi:10.1002/bip.360221211.\r\n */\r\n dssp() {\r\n const ssMap = new SecondaryStructureMap(this);\r\n\r\n const structures = this.structures = [];\r\n const helices = this._helices = [];\r\n const sheets = this._sheets = [];\r\n\r\n const getSheet = (index) => {\r\n let item = sheets[index];\r\n if (!item) {\r\n item = sheets[index] = new Sheet(String(index), 0);\r\n }\r\n return item;\r\n };\r\n\r\n let lastCode;\r\n let lastSheetIndex;\r\n let lastHelixIndex = 0;\r\n let curStructure = null;\r\n for (let i = 0, n = this._residues.length; i < n; ++i) {\r\n const curCode = ssMap._ss[i];\r\n const curResidue = this._residues[i];\r\n const curSheetIndex = ssMap._sheet[i];\r\n\r\n // expand the last structure\r\n if (curCode === lastCode && curSheetIndex === lastSheetIndex) {\r\n curResidue._secondary = curStructure;\r\n if (curStructure) {\r\n curStructure.term = curResidue;\r\n }\r\n if (curStructure instanceof Helix) {\r\n curStructure.length++;\r\n }\r\n continue;\r\n }\r\n\r\n // create a new structure\r\n const helixClass = helixClassMap[curCode];\r\n const loopType = loopMap[curCode];\r\n if (curCode === StructureType.STRAND) {\r\n const curSheet = getSheet(curSheetIndex);\r\n curStructure = new Strand(curSheet, curResidue, curResidue, 0, null, null);\r\n curSheet.addStrand(curStructure);\r\n } else if (helixClass !== undefined) {\r\n lastHelixIndex++;\r\n curStructure = new Helix(helixClass, curResidue, curResidue, lastHelixIndex, String(lastHelixIndex), '', 1);\r\n helices.push(curStructure);\r\n } else if (loopType !== undefined) {\r\n curStructure = new StructuralElement(loopType, curResidue, curResidue);\r\n } else {\r\n curStructure = null;\r\n }\r\n\r\n if (curStructure) {\r\n structures.push(curStructure);\r\n }\r\n\r\n curResidue._secondary = curStructure;\r\n\r\n lastCode = curCode;\r\n lastSheetIndex = curSheetIndex;\r\n }\r\n\r\n this._sheets = sheets.filter((_sheet) => true); // squeeze sheets array\r\n }\r\n}\r\n\r\nComplex.prototype.id = 'Complex';\r\nComplex.prototype.name = '';\r\n\r\nexport default Complex;\r\n","import * as THREE from 'three';\r\nimport utils from '../utils';\r\n\r\nfunction pow2ceil(v) {\r\n let p = 2;\r\n v = (v - 1) >> 1;\r\n while (v) {\r\n p <<= 1;\r\n v >>= 1;\r\n }\r\n return p;\r\n}\r\n\r\n/**\r\n * Volume constructor\r\n *\r\n * @param {Object} type - Float32Array, Int8Array, etc...\r\n * @param {Object|Array} dimensions - number of data points on each axis (x, y, z)\r\n * @param {Box3} box - bounding box defining data place in metric space,\r\n * it's corners correspond to extreme data points\r\n * @param {Number} vecSize - dimension of the field data point (1 = scalar, 3 = 3D vector)\r\n * @param {Object} data - typed array of the same type as specified by the 1st parameter,\r\n * layout: point by point along X,\r\n * row by row along Y,\r\n * plane by plane along Z\r\n * @param {Number} volumeInfo - volume info values to define threshold to filter the noise\r\n */\r\n\r\nclass Volume {\r\n constructor(type, dimensions, box, vecSize, data, volumeInfo) {\r\n this._box = box.clone();\r\n this._dimVec = Math.max(Math.floor(vecSize || 1), 1);\r\n this._volumeInfo = volumeInfo;\r\n\r\n if (dimensions instanceof Array) {\r\n [this._dimX, this._dimY, this._dimZ] = dimensions;\r\n } else {\r\n this._dimX = dimensions.x;\r\n this._dimY = dimensions.y;\r\n this._dimZ = dimensions.z;\r\n }\r\n this._dimX = Math.max(Math.floor(this._dimX), 1);\r\n this._dimY = Math.max(Math.floor(this._dimY), 1);\r\n this._dimZ = Math.max(Math.floor(this._dimZ), 1);\r\n\r\n this._rowElements = this._dimVec * this._dimX;\r\n this._planeElements = this._rowElements * this._dimY;\r\n this._totalElements = this._planeElements * this._dimZ;\r\n\r\n this._data = data || utils.allocateTyped(type, this._totalElements);\r\n\r\n // override getter/setter for vector fields\r\n switch (this._dimVec) {\r\n case 1:\r\n break;\r\n\r\n case 2:\r\n this.getValue = function (x, y, z) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n return [this._data[idx], this._data[idx + 1]];\r\n };\r\n\r\n this.setValue = function (x, y, z, a, b) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] = a;\r\n this._data[idx + 1] = b;\r\n };\r\n\r\n this.addValue = function (x, y, z, a, b) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] += a;\r\n this._data[idx + 1] += b;\r\n };\r\n break;\r\n\r\n case 3:\r\n this.getValue = function (x, y, z) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n return [this._data[idx], this._data[idx + 1], this._data[idx + 2]];\r\n };\r\n\r\n this.setValue = function (x, y, z, a, b, c) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] = a;\r\n this._data[idx + 1] = b;\r\n this._data[idx + 2] = c;\r\n };\r\n\r\n this.addValue = function (x, y, z, a, b, c) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] += a;\r\n this._data[idx + 1] += b;\r\n this._data[idx + 2] += c;\r\n };\r\n break;\r\n\r\n default:\r\n throw new Error('Volume: invalid vector dimension');\r\n }\r\n }\r\n\r\n // default getter assumes it's a scalar field\r\n getValue(x, y, z) {\r\n return this._data[x + y * this._rowElements + z * this._planeElements];\r\n }\r\n\r\n // default setter assumes it's a scalar field\r\n setValue(x, y, z, val) {\r\n this._data[x + y * this._rowElements + z * this._planeElements] = val;\r\n }\r\n\r\n // default adder assumes it's a scalar field\r\n addValue(x, y, z, val) {\r\n this._data[x + y * this._rowElements + z * this._planeElements] += val;\r\n }\r\n\r\n getDimensions() {\r\n return [this._dimX, this._dimY, this._dimZ];\r\n }\r\n\r\n getBox() {\r\n return this._box;\r\n }\r\n\r\n getVolumeInfo() {\r\n return this._volumeInfo;\r\n }\r\n\r\n getCellSize() {\r\n const boxSize = new THREE.Vector3();\r\n this._box.getSize(boxSize);\r\n const res = new THREE.Vector3();\r\n res.x = this._dimX > 1 ? boxSize.x / (this._dimX - 1) : 0;\r\n res.y = this._dimY > 1 ? boxSize.y / (this._dimY - 1) : 0;\r\n res.z = this._dimZ > 1 ? boxSize.z / (this._dimZ - 1) : 0;\r\n return res;\r\n }\r\n\r\n computeGradient() {\r\n if (this._dimVec !== 1) {\r\n // gradient can only be computed for scalar fields\r\n return null;\r\n }\r\n\r\n // create a 3D vector field of gradients\r\n const gradient = new Volume(Float32Array, [this._dimX, this._dimY, this._dimZ], this._box, 3);\r\n\r\n // calculate cell side lengths\r\n const vl = this.getCellSize();\r\n\r\n // gradient axis scaling values and averaging factors, to correctly\r\n // calculate the gradient for volumes with irregular cell spacing\r\n const vs = new THREE.Vector3(-0.5 / vl.x, -0.5 / vl.y, -0.5 / vl.z);\r\n\r\n // TODO Check for intended bug in VMD (min is zero)\r\n function clamp(val, min, max) {\r\n return Math.min(max, Math.max(min, val));\r\n }\r\n\r\n const xSize = this._dimX;\r\n const ySize = this._dimY;\r\n const zSize = this._dimZ;\r\n const volMap = this._data;\r\n\r\n function _voxelValue(x, y, z) {\r\n return volMap[z * xSize * ySize + y * xSize + x];\r\n }\r\n\r\n for (let zi = 0; zi < zSize; ++zi) {\r\n const zm = clamp(zi - 1, 0, zSize - 1);\r\n const zp = clamp(zi + 1, 0, zSize - 1);\r\n\r\n for (let yi = 0; yi < ySize; ++yi) {\r\n const ym = clamp(yi - 1, 0, ySize - 1);\r\n const yp = clamp(yi + 1, 0, ySize - 1);\r\n\r\n for (let xi = 0; xi < xSize; ++xi) {\r\n const xm = clamp(xi - 1, 0, xSize - 1);\r\n const xp = clamp(xi + 1, 0, xSize - 1);\r\n\r\n // Calculate the volume gradient at each grid cell.\r\n // Gradients are now stored unnormalized, since we need them in pure\r\n // form in order to draw field lines etc. Shading code will now have\r\n // to do renormalization for itself on-the-fly.\r\n\r\n // XXX this gradient is only correct for orthogonal grids, since\r\n // we're using the array index offsets rather to calculate the gradient\r\n // rather than voxel coordinate offsets. This will have to be\r\n // re-worked for non-orthogonal datasets.\r\n\r\n gradient.setValue(\r\n xi,\r\n yi,\r\n zi,\r\n (_voxelValue(xp, yi, zi) - _voxelValue(xm, yi, zi)) * vs.x,\r\n (_voxelValue(xi, yp, zi) - _voxelValue(xi, ym, zi)) * vs.y,\r\n (_voxelValue(xi, yi, zp) - _voxelValue(xi, yi, zm)) * vs.z,\r\n );\r\n }\r\n }\r\n }\r\n\r\n return gradient;\r\n }\r\n\r\n normalize() {\r\n const data = this._data;\r\n\r\n // get min/max\r\n let min = data[0];\r\n let max = data[0];\r\n for (let i = 1; i < data.length; ++i) {\r\n min = Math.min(min, data[i]);\r\n max = Math.max(max, data[i]);\r\n }\r\n\r\n const d = 1.0 / (max - min);\r\n if (d === 0) {\r\n return;\r\n }\r\n\r\n // normalize\r\n for (let i = 0; i < data.length; ++i) {\r\n data[i] = d * (data[i] - min);\r\n }\r\n }\r\n\r\n getTiledTextureStride() {\r\n return [this._dimX + 2, this._dimY + 2];\r\n }\r\n\r\n buildTiledTexture() {\r\n let tilesX = Math.ceil(Math.sqrt(this._dimZ * this._dimY / this._dimX));\r\n\r\n let width = tilesX * (this._dimX + 2) - 1;\r\n width = pow2ceil(width);\r\n tilesX = Math.floor(width / (this._dimX + 2));\r\n\r\n const tilesY = Math.ceil(this._dimZ / tilesX);\r\n let height = tilesY * (this._dimY + 2) - 1;\r\n height = pow2ceil(height);\r\n\r\n const data = new Uint8Array(width * height);\r\n\r\n let src;\r\n let dst;\r\n for (let tileRow = 0; tileRow < tilesY; ++tileRow) {\r\n // process each pixel row of this tile row\r\n for (let row = 0; row < this._dimY; ++row) {\r\n src = tileRow * tilesX * this._planeElements + row * this._rowElements;\r\n dst = width * (tileRow * (this._dimY + 2) + row);\r\n // copy a series of rows through several XY planes\r\n for (let t = 0; t < tilesX; ++t) {\r\n // copy one row of one XY plane\r\n for (let x = 0; x < this._dimX; ++x) {\r\n data[dst++] = 255.0 * this._data[src++];\r\n }\r\n\r\n // repeat last pixel of previous tile\r\n data[dst++] = 255.0 * this._data[src - 1];\r\n\r\n if (t < tilesX - 1) {\r\n // skip to the same row of next XY plane\r\n src += this._planeElements - this._rowElements;\r\n // repeat first pixel of next tile\r\n data[dst++] = 255.0 * this._data[src];\r\n }\r\n }\r\n }\r\n }\r\n\r\n // fill pixels between tile rows with copy of edge pixels\r\n for (let tileRow = 0; tileRow < tilesY; ++tileRow) {\r\n // copy last pixel row of this tile row to the following pixel row of the texture\r\n src = width * (tileRow * (this._dimY + 2) + this._dimY - 1);\r\n dst = src + width;\r\n for (let x = 0; x < width; ++x) {\r\n data[dst++] = data[src++];\r\n }\r\n if (tileRow < tilesY - 1) {\r\n // copy first pixel row of next tile row to the preceding pixel row of the texture\r\n src = width * (tileRow + 1) * (this._dimY + 2);\r\n dst = src - width;\r\n for (let x = 0; x < width; ++x) {\r\n data[dst++] = data[src++];\r\n }\r\n }\r\n }\r\n\r\n const texture = new THREE.DataTexture(\r\n data,\r\n width,\r\n height,\r\n THREE.RedFormat,\r\n THREE.UnsignedByteType,\r\n THREE.UVMapping,\r\n THREE.ClampToEdgeWrapping,\r\n THREE.ClampToEdgeWrapping,\r\n THREE.LinearFilter,\r\n THREE.LinearFilter,\r\n );\r\n texture.needsUpdate = true;\r\n return texture;\r\n }\r\n\r\n /* ********************************************************************************\r\n *\r\n * Methods that provide direct access to internal array (for better performance)\r\n *\r\n ******************************************************************************** */\r\n\r\n getData() {\r\n return this._data;\r\n }\r\n\r\n getDirectIdx(x, y, z) {\r\n return x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n }\r\n\r\n getStrideX() {\r\n return this._dimVec;\r\n }\r\n\r\n getStrideY() {\r\n return this._rowElements;\r\n }\r\n\r\n getStrideZ() {\r\n return this._planeElements;\r\n }\r\n}\r\n\r\nVolume.prototype.id = 'Volume';\r\n\r\nexport default Volume;\r\n","/**\r\n * Residue Molecule.\r\n *\r\n * @param {Complex} complex - Molecular complex this Molecule belongs to.\r\n * @param {String} name - Molecule's name.\r\n * @param {Integer} index - Molecule's index in file.\r\n *\r\n * @exports Molecule\r\n * @constructor\r\n */\r\nclass Molecule {\r\n constructor(complex, name, index) {\r\n this.complex = complex;\r\n this.name = name || '';\r\n this.residues = [];\r\n this.mask = 1 | 0;\r\n this.index = index || -1; // start with 1\r\n }\r\n\r\n forEachResidue(process) {\r\n const { residues } = this;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const { residues } = this;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n mask &= residues[i]._mask;\r\n }\r\n this.mask = mask;\r\n }\r\n}\r\n\r\nexport default Molecule;\r\n","import Atom from './chem/Atom';\r\nimport Element from './chem/Element';\r\nimport Bond from './chem/Bond';\r\nimport Residue from './chem/Residue';\r\nimport ResidueType from './chem/ResidueType';\r\nimport Chain from './chem/Chain';\r\nimport Helix from './chem/Helix';\r\nimport Strand from './chem/Strand';\r\nimport Sheet from './chem/Sheet';\r\nimport SGroup from './chem/SGroup';\r\nimport Assembly from './chem/Assembly';\r\nimport Complex from './chem/Complex';\r\nimport Volume from './chem/Volume';\r\nimport VoxelWorld from './chem/VoxelWorld';\r\nimport selectors from './chem/selectors';\r\nimport Molecule from './chem/Molecule';\r\n\r\nexport default {\r\n Atom,\r\n Element,\r\n Bond,\r\n Residue,\r\n ResidueType,\r\n Chain,\r\n Helix,\r\n Strand,\r\n Sheet,\r\n SGroup,\r\n Assembly,\r\n Complex,\r\n Volume,\r\n VoxelWorld,\r\n selectors,\r\n Molecule,\r\n};\r\n","/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nimport * as THREE from 'three';\r\n\r\nclass CSS2DObject extends THREE.Object3D {\r\n constructor(element) {\r\n super();\r\n const self = this;\r\n this._element = element;\r\n this._element.style.position = 'absolute';\r\n this.addEventListener('removed', () => {\r\n if (self._element.parentNode !== null) {\r\n self._element.parentNode.removeChild(self._element);\r\n }\r\n });\r\n }\r\n\r\n getElement() {\r\n return this._element;\r\n }\r\n\r\n /**\r\n * Sets label transparency.\r\n *\r\n * @param {number} transp - in [0; 1] 1 means fully transparent\r\n */\r\n setTransparency(transp) {\r\n const el = this.getElement();\r\n if (el === null) {\r\n return;\r\n }\r\n if (transp === 1.0) {\r\n el.style.display = 'none';\r\n return;\r\n }\r\n el.style.display = 'inline';\r\n const op = 1.0 - transp;\r\n const top = op.toString();\r\n const op100 = op * 100;\r\n el.style.opacity = top;\r\n el.style.filter = `alpha(opacity=${op100})`; // IE fallback\r\n }\r\n\r\n clone() {\r\n const obj = new CSS2DObject(this._element);\r\n obj.copy(this);\r\n return obj;\r\n }\r\n}\r\n\r\nexport default CSS2DObject;\r\n","import * as THREE from 'three';\r\n\r\nclass RCGroup extends THREE.Group {\r\n raycast(raycaster, intersects) {\r\n if (!this.visible) {\r\n return;\r\n }\r\n\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n children[i].raycast(raycaster, intersects);\r\n }\r\n }\r\n\r\n enableSubset(mask, innerOnly) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].enableSubset) {\r\n children[i].enableSubset(mask, innerOnly);\r\n }\r\n }\r\n }\r\n\r\n disableSubset(mask, innerOnly) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].disableSubset) {\r\n children[i].disableSubset(mask, innerOnly);\r\n }\r\n }\r\n }\r\n\r\n isEmpty() {\r\n return this.children.length === 0;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].updateToFrame) {\r\n children[i].updateToFrame(frameData);\r\n }\r\n }\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n Array.prototype.push.apply(totalSubset, children[i].getSubset(mask, innerOnly));\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default RCGroup;\r\n","import * as THREE from 'three';\r\nimport logger from '../utils/logger';\r\nimport CSS2DObject from './CSS2DObject';\r\nimport RCGroup from './RCGroup';\r\nimport vertexScreenQuadShader from './shaders/ScreenQuad.vert';\r\nimport fragmentScreenQuadFromTex from './shaders/ScreenQuadFromTex.frag';\r\nimport fragmentScreenQuadFromTexWithDistortion from './shaders/ScreenQuadFromTexWithDistortion.frag';\r\n\r\nconst LAYERS = {\r\n DEFAULT: 0, VOLUME: 1, TRANSPARENT: 2, PREPASS_TRANSPARENT: 3, VOLUME_BFPLANE: 4, COLOR_FROM_POSITION: 5, SHADOWMAP: 6,\r\n};\r\n\r\nconst SELECTION_LAYERS = [ // These layers, that are used in the selection by ray casting\r\n LAYERS.DEFAULT, LAYERS.TRANSPARENT,\r\n];\r\n\r\nTHREE.Object3D.prototype.resetTransform = function () {\r\n this.position.set(0, 0, 0);\r\n this.quaternion.set(0, 0, 0, 1);\r\n this.scale.set(1, 1, 1);\r\n};\r\n\r\n// update world matrix of this object and all its ancestors\r\nTHREE.Object3D.prototype.updateMatrixWorldRecursive = function () {\r\n if (this.parent != null) {\r\n this.parent.updateMatrixWorldRecursive();\r\n }\r\n this.updateMatrixWorld();\r\n};\r\n// add object to parent, saving objects' world transform\r\nTHREE.Object3D.prototype.addSavingWorldTransform = (function () {\r\n const _worldMatrixInverse = new THREE.Matrix4();\r\n\r\n return function (object) {\r\n if (object instanceof THREE.Object3D) {\r\n _worldMatrixInverse.copy(this.matrixWorld).invert();\r\n _worldMatrixInverse.multiply(object.matrixWorld);\r\n object.matrix.copy(_worldMatrixInverse);\r\n object.matrix.decompose(object.position, object.quaternion, object.scale);\r\n this.add(object);\r\n }\r\n };\r\n}());\r\n\r\n// render a tiny transparent quad in the center of the screen\r\nTHREE.WebGLRenderer.prototype.renderDummyQuad = (function () {\r\n const _material = new THREE.MeshBasicMaterial({ transparent: true, opacity: 0.0, depthWrite: false });\r\n\r\n const _scene = new THREE.Scene();\r\n const _quad = new THREE.Mesh(new THREE.PlaneGeometry(0.01, 0.01), _material);\r\n _scene.add(_quad);\r\n\r\n const _camera = new THREE.OrthographicCamera(-0.5, 0.5, 0.5, -0.5, -10000, 10000);\r\n _camera.position.z = 100;\r\n\r\n return function () {\r\n this.render(_scene, _camera);\r\n };\r\n}());\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuad = (function () {\r\n const _scene = new THREE.Scene();\r\n const _quad = new THREE.Mesh(new THREE.PlaneGeometry(1.0, 1.0));\r\n _scene.add(_quad);\r\n\r\n const _camera = new THREE.OrthographicCamera(-0.5, 0.5, 0.5, -0.5, -10000, 10000);\r\n _camera.position.z = 100;\r\n\r\n return function (material) {\r\n _quad.material = material;\r\n this.render(_scene, _camera);\r\n };\r\n}());\r\n\r\nTHREE.Matrix4.prototype.isIdentity = (function () {\r\n const identity = new THREE.Matrix4();\r\n return function () {\r\n return identity.equals(this);\r\n };\r\n}());\r\n\r\nTHREE.Matrix4.prototype.applyToPointsArray = function (array, stride, w) {\r\n if (!array || !stride || stride < 3) {\r\n return array;\r\n }\r\n w = w || 0; // use point as normal by default\r\n const e = this.elements;\r\n for (let i = 0; i < array.length; i += stride) {\r\n const x = array[i];\r\n const y = array[i + 1];\r\n const z = array[i + 2];\r\n\r\n const persp = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\r\n\r\n array[i] = (e[0] * x + e[4] * y + e[8] * z + e[12] * w) * persp;\r\n array[i + 1] = (e[1] * x + e[5] * y + e[9] * z + e[13] * w) * persp;\r\n array[i + 2] = (e[2] * x + e[6] * y + e[10] * z + e[14] * w) * persp;\r\n }\r\n return array;\r\n};\r\n\r\nclass ScreenQuadMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n if (params.uniforms === undefined) {\r\n params.uniforms = {};\r\n }\r\n params.uniforms.srcTex = { type: 't', value: null };\r\n params.vertexShader = vertexScreenQuadShader;\r\n params.transparent = false;\r\n params.depthTest = false;\r\n params.depthWrite = false;\r\n super(params);\r\n }\r\n}\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuadFromTex = (function () {\r\n const _material = new ScreenQuadMaterial({\r\n uniforms: { opacity: { type: 'f', value: 1.0 } },\r\n fragmentShader: fragmentScreenQuadFromTex,\r\n transparent: true,\r\n });\r\n\r\n return function (srcTex, opacity) {\r\n _material.uniforms.srcTex.value = srcTex;\r\n _material.transparent = (opacity < 1.0);\r\n _material.uniforms.opacity.value = opacity;\r\n this.renderScreenQuad(_material);\r\n };\r\n}());\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuadFromTexWithDistortion = (function () {\r\n const _material = new ScreenQuadMaterial({\r\n uniforms: { coef: { type: 'f', value: 1.0 } },\r\n fragmentShader: fragmentScreenQuadFromTexWithDistortion,\r\n });\r\n\r\n return function (srcTex, coef) {\r\n _material.uniforms.srcTex.value = srcTex;\r\n _material.uniforms.coef.value = coef;\r\n this.renderScreenQuad(_material);\r\n };\r\n}());\r\n\r\n/**\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.PerspectiveCamera.prototype.setMinimalFov = function (angle) {\r\n if (this.aspect >= 1.0) {\r\n this.fov = angle;\r\n } else {\r\n this.fov = THREE.MathUtils.radToDeg(2 * Math.atan(Math.tan(THREE.MathUtils.degToRad(angle) * 0.5) / this.aspect));\r\n }\r\n};\r\n\r\n/**\r\n * @param {THREE.PerspectiveCamera} camera - Base camera for this stereo camera.\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.StereoCamera.prototype.updateHalfSized = function (camera, angle) {\r\n const originalAspect = camera.aspect;\r\n const originalFov = camera.fov;\r\n\r\n camera.aspect = originalAspect / 2.0;\r\n camera.setMinimalFov(angle);\r\n camera.updateProjectionMatrix();\r\n\r\n this.update(camera);\r\n\r\n camera.aspect = originalAspect;\r\n camera.fov = originalFov;\r\n camera.updateProjectionMatrix();\r\n};\r\n\r\n/**\r\n * @param {number} radius - Radius of bounding sphere in angstroms to fit on screen.\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.PerspectiveCamera.prototype.setDistanceToFit = function (radius, angle) {\r\n this.position.z = radius / Math.sin(0.5 * THREE.MathUtils.degToRad(angle));\r\n};\r\n\r\n/**\r\n * @param {RCGroup} gfxObj - All objects on scene.\r\n * @param {THREE.PerspectiveCamera} camera - Camera used for rendering.\r\n * @param {number} clipPlane - Distance to clip plane.\r\n * @param {number} fogFarPlane - Distance to fog far plane.\r\n */\r\nTHREE.Raycaster.prototype.intersectVisibleObject = function (gfxObj, camera, clipPlane, fogFarPlane) {\r\n const intersects = this.intersectObject(gfxObj, false);\r\n if (intersects.length === 0) {\r\n return null;\r\n }\r\n\r\n // find point closest to camera that doesn't get clipped by camera near plane or clipPlane (if it exists)\r\n const nearPlane = Math.min(camera.near, clipPlane);\r\n let i;\r\n let p = intersects[0];\r\n const v = new THREE.Vector3();\r\n for (i = 0; i < intersects.length; ++i) {\r\n p = intersects[i];\r\n v.copy(p.point);\r\n v.applyMatrix4(camera.matrixWorldInverse);\r\n if (v.z <= -nearPlane) {\r\n break;\r\n }\r\n }\r\n if (i === intersects.length) {\r\n return null;\r\n }\r\n\r\n // check that selected intersection point is not clipped by camera far plane or occluded by fog (if it exists)\r\n const farPlane = Math.min(camera.far, fogFarPlane);\r\n v.copy(p.point);\r\n v.applyMatrix4(camera.matrixWorldInverse);\r\n if (v.z <= -farPlane) {\r\n return null;\r\n }\r\n return p;\r\n};\r\n\r\nTHREE.Matrix4.prototype.extractScale = (function () {\r\n const _v = new THREE.Vector3();\r\n\r\n return function (scale) {\r\n if (scale === undefined) {\r\n logger.debug('extractScale(): new is too expensive operation to do it on-the-fly');\r\n scale = _v.clone();\r\n }\r\n\r\n const te = this.elements;\r\n scale.x = _v.set(te[0], te[1], te[2]).length();\r\n scale.y = _v.set(te[4], te[5], te[6]).length();\r\n scale.z = _v.set(te[8], te[9], te[10]).length();\r\n\r\n // if determine is negative, we need to invert one scale\r\n const det = this.determinant();\r\n if (det < 0) {\r\n scale.x = -scale.x;\r\n }\r\n return scale;\r\n };\r\n}());\r\n\r\nfunction _calcCylinderMatrix(posBegin, posEnd, radius) {\r\n const posCenter = posBegin.clone().lerp(posEnd, 0.5);\r\n const matScale = new THREE.Matrix4();\r\n matScale.makeScale(radius, posBegin.distanceTo(posEnd), radius);\r\n\r\n const matRotHalf = new THREE.Matrix4();\r\n matRotHalf.makeRotationX(Math.PI / 2);\r\n\r\n const matRotLook = new THREE.Matrix4();\r\n const vUp = new THREE.Vector3(0, 1, 0);\r\n matRotLook.lookAt(posCenter, posEnd, vUp);\r\n\r\n matRotLook.multiply(matRotHalf);\r\n matRotLook.multiply(matScale);\r\n matRotLook.setPosition(posCenter);\r\n return matRotLook;\r\n}\r\n\r\nfunction _calcChunkMatrix(eye, target, up, rad) {\r\n const matScale = new THREE.Matrix4();\r\n matScale.makeScale(rad.x, rad.y, 0);\r\n\r\n const matRotLook = new THREE.Matrix4();\r\n matRotLook.lookAt(eye, target, up);\r\n matRotLook.multiply(matScale);\r\n matRotLook.setPosition(eye);\r\n\r\n return matRotLook;\r\n}\r\n\r\nfunction _groupHasGeometryToRender(group) {\r\n let hasGeoms = false;\r\n group.traverse((node) => {\r\n if (node.hasOwnProperty('geometry') || node instanceof CSS2DObject) {\r\n hasGeoms = true;\r\n }\r\n });\r\n return hasGeoms;\r\n}\r\n\r\nfunction _buildDistorionMesh(widthSegments, heightSegements, coef) {\r\n // solve equation r_u = r_d * (1 + k * r_d^2)\r\n // for r_d using iterations\r\n // takes: r_u^2\r\n // returns: r_d / r_u factor that can be used to distort point coords\r\n function calcInverseBarrel(r2) {\r\n const epsilon = 1e-5;\r\n let prevR2 = 0.0;\r\n let curR2 = r2;\r\n let dr = 1.0;\r\n while (Math.abs(curR2 - prevR2) > epsilon) {\r\n dr = 1.0 + coef * curR2;\r\n prevR2 = curR2;\r\n curR2 = r2 / (dr * dr);\r\n }\r\n\r\n return 1.0 / dr;\r\n }\r\n\r\n const geo = new THREE.PlaneGeometry(2.0, 2.0, widthSegments, heightSegements);\r\n\r\n const pos = geo.getAttribute('position');\r\n for (let i = 0; i < pos.count; ++i) {\r\n const x = pos.array[3 * i];\r\n const y = pos.array[3 * i + 1];\r\n const c = calcInverseBarrel(x * x + y * y);\r\n pos.setXY(i, c * x, c * y);\r\n }\r\n\r\n return geo;\r\n}\r\n\r\nTHREE.BufferAttribute.prototype.copyAtList = function (attribute, indexList) {\r\n console.assert(\r\n this.itemSize === attribute.itemSize,\r\n 'DEBUG: BufferAttribute.copyAtList buffers have different item size.',\r\n );\r\n const { itemSize } = this;\r\n for (let i = 0, n = indexList.length; i < n; ++i) {\r\n for (let j = 0; j < itemSize; ++j) {\r\n this.array[i * itemSize + j] = attribute.array[indexList[i] * itemSize + j];\r\n }\r\n }\r\n return this;\r\n};\r\n\r\nfunction fillArray(array, value, startIndex, endIndex) {\r\n startIndex = (typeof startIndex !== 'undefined') ? startIndex : 0;\r\n endIndex = (typeof endIndex !== 'undefined') ? endIndex : array.length;\r\n for (let i = startIndex; i < endIndex; ++i) {\r\n array[i] = value;\r\n }\r\n}\r\n\r\n/** @param {THREE.Object3D} object - Parent object. */\r\nfunction removeChildren(object) {\r\n const { children } = object;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n child.parent = null;\r\n child.dispatchEvent({ type: 'removed' });\r\n }\r\n object.children = [];\r\n}\r\n\r\nfunction clearTree(object) {\r\n object.traverse((obj) => {\r\n if (obj instanceof THREE.Mesh || obj instanceof THREE.LineSegments || obj instanceof THREE.Line) {\r\n obj.geometry.dispose();\r\n }\r\n });\r\n removeChildren(object);\r\n}\r\n\r\nfunction destroyObject(object) {\r\n clearTree(object);\r\n if (object.parent) {\r\n object.parent.remove(object);\r\n } else {\r\n object.dispatchEvent({ type: 'removed' });\r\n }\r\n}\r\n\r\nfunction belongToSelectLayers(object) {\r\n for (let i = 0; i < SELECTION_LAYERS.length; i++) {\r\n if (((object.layers.mask >> SELECTION_LAYERS[i]) & 1) === 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction processObjRenderOrder(root, idMaterial) {\r\n // set renderOrder to 0 for Backdrop and to 1 in other cases to render Backdrop earlier all other materials\r\n const renderOrder = +(idMaterial !== 'BA');\r\n root.traverse((object) => {\r\n if (object.isGroup) {\r\n object.renderOrder = renderOrder;\r\n }\r\n });\r\n}\r\n\r\nfunction applySelectionMaterial(geo) {\r\n geo.traverse((node) => {\r\n if ('material' in node) {\r\n node.material = node.material.clone(true);\r\n // using z-offset to magically fix selection rendering artifact (on z-sprites)\r\n node.material.setValues({\r\n depthFunc: THREE.LessEqualDepth,\r\n overrideColor: true,\r\n fog: false,\r\n lights: false,\r\n shadowmap: false,\r\n });\r\n node.material.setUberOptions({ fixedColor: new THREE.Color(0xFFFF00), zOffset: -1e-6 });\r\n }\r\n });\r\n}\r\n\r\nfunction getMiddlePoint(point1, point2, optionalTarget) {\r\n const result = optionalTarget || new THREE.Vector3();\r\n\r\n result.set(0, 0, 0);\r\n result.addScaledVector(point1, 0.5);\r\n result.addScaledVector(point2, 0.5);\r\n\r\n return result;\r\n}\r\n\r\n// Monkey-patch for \"InstancedBufferGeometry.instanceCount becomes undefined after copy()\"\r\n// https://github.com/mrdoob/three.js/issues/22151\r\nconst _oldInstancedBufferGeometryCopy = THREE.InstancedBufferGeometry.prototype.copy;\r\n\r\nTHREE.InstancedBufferGeometry.prototype.copy = function (source) {\r\n _oldInstancedBufferGeometryCopy.call(this, source);\r\n if (this.instanceCount === undefined) {\r\n this.instanceCount = Infinity;\r\n }\r\n};\r\n\r\nexport default {\r\n calcCylinderMatrix: _calcCylinderMatrix,\r\n calcChunkMatrix: _calcChunkMatrix,\r\n groupHasGeometryToRender: _groupHasGeometryToRender,\r\n buildDistorionMesh: _buildDistorionMesh,\r\n RCGroup,\r\n fillArray,\r\n clearTree,\r\n destroyObject,\r\n belongToSelectLayers,\r\n processObjRenderOrder,\r\n applySelectionMaterial,\r\n getMiddlePoint,\r\n LAYERS,\r\n};\r\n","import * as THREE from 'three';\r\nimport gfxutils from './gfx/gfxutils';\r\n\r\nconst _defaultBoundaries = {\r\n boundingBox: new THREE.Box3(new THREE.Vector3(-1, -1, -1), new THREE.Vector3(1, 1, 1)),\r\n boundingSphere: new THREE.Sphere(new THREE.Vector3(0, 0, 0), 1),\r\n};\r\n\r\nclass Visual extends gfxutils.RCGroup {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this.name = name;\r\n this._dataSource = dataSource;\r\n }\r\n\r\n release() {\r\n if (this.parent) {\r\n this.parent.remove(this);\r\n }\r\n }\r\n\r\n getDataSource() {\r\n return this._dataSource;\r\n }\r\n\r\n getBoundaries() {\r\n return _defaultBoundaries;\r\n }\r\n}\r\n\r\nexport default Visual;\r\n","function _ensureArray(x) {\r\n if (x === null || x === undefined || Array.isArray(x)) {\r\n return x;\r\n }\r\n return [x];\r\n}\r\n\r\n/** An indexed list of objects or classes. */\r\nclass EntityList {\r\n /**\r\n * Create a list of objects.\r\n * The objects can be indexed by one or more properties for the later retrieval.\r\n *\r\n * @param {!Array=} entities A list of objects to automatically register at creation time.\r\n * @param {!Array=} indices A list of property names to use for case-insensitive indexing.\r\n * By default, a single `.id` property is used.\r\n * @see EntityList#register\r\n */\r\n constructor(entities = [], indices = ['id']) {\r\n this._list = [];\r\n this._dict = {};\r\n this._indices = [...indices];\r\n this._indices.forEach((index) => {\r\n this._dict[index] = {};\r\n });\r\n\r\n entities.forEach((entity) => this.register(entity));\r\n }\r\n\r\n /**\r\n * Add a value to the end of a list.\r\n * The list will contain only one copy of the value.\r\n *\r\n * @param {!Array} list An array.\r\n * @param {*} value A value to add.\r\n * @see EntityList.unregisterFromList\r\n * @see EntityList.registerInDict\r\n */\r\n static registerInList(list, value) {\r\n if (!list.includes(value)) {\r\n list.push(value);\r\n }\r\n }\r\n\r\n /**\r\n * Remove a value from a list if it is there.\r\n *\r\n * @param {!Array} list An array.\r\n * @param {*} value A value to remove.\r\n * @see EntityList.registerInList\r\n */\r\n static unregisterFromList(list, value) {\r\n const pos = list.indexOf(value);\r\n if (pos !== -1) {\r\n list.splice(pos, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Add a value to a dictionary.\r\n * The value may be stored under multiple different keys (aliases).\r\n * There might be multiples values stored under the same key.\r\n *\r\n * @param {!Object} dict A dictionary.\r\n * @param {!Array} keys An array of keys.\r\n * @param {*} value A value to add.\r\n * @see EntityList.unregisterFromDict\r\n * @see EntityList.registerInList\r\n */\r\n static registerInDict(dict, keys, value) {\r\n keys.forEach((key) => {\r\n key = key.toLowerCase();\r\n const list = dict[key] = dict[key] || [];\r\n if (!list.includes(value)) {\r\n list.push(value);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove a value from a dictionary.\r\n * The value may be stored under multiple different keys (aliases).\r\n * There might be multiples values stored under the same key.\r\n *\r\n * @param {!Object} dict A dictionary.\r\n * @param {!Array} keys An array of keys.\r\n * @param {*} value A value to add.\r\n * @see EntityList.registerInDict\r\n */\r\n static unregisterFromDict(dict, keys, value) {\r\n keys.forEach((key) => {\r\n key = key.toLowerCase();\r\n const list = dict[key];\r\n if (list) {\r\n const pos = list.indexOf(value);\r\n if (pos !== -1) {\r\n list.splice(pos, 1);\r\n }\r\n if (list.length === 0) {\r\n delete dict[key];\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Add an entity to this list.\r\n *\r\n * @param {!Object} entity An object or a class to register. The object must include all\r\n * properties specified as indices on construction.\r\n * @see EntityList#unregister\r\n */\r\n register(entity) {\r\n EntityList.registerInList(this._list, entity);\r\n this._indices.forEach((index) => {\r\n EntityList.registerInDict(this._dict[index], _ensureArray(entity[index]), entity);\r\n });\r\n }\r\n\r\n /**\r\n * Remove an entity from this list.\r\n *\r\n * @param {!Object} entity An object or a class to unregister. The object may be\r\n * missing from the list but it must include all properties specified as indices\r\n * on construction.\r\n * @see EntityList#register\r\n */\r\n unregister(entity) {\r\n EntityList.unregisterFromList(this._list, entity);\r\n this._indices.forEach((index) => {\r\n EntityList.unregisterFromDict(this._dict[index], _ensureArray(entity[index]), entity);\r\n });\r\n }\r\n\r\n /**\r\n * An ordered list of all registered entities.\r\n * It is a read-only copy, use {@link EntityList#register} and {@link EntityList#unregister}\r\n * to modify it.\r\n *\r\n * @type {!Array}\r\n */\r\n get all() {\r\n return [...this._list];\r\n }\r\n\r\n /**\r\n * The first registered entity.\r\n * Use it if you do not care which entity you are referring to.\r\n *\r\n * @type {Object=}\r\n */\r\n get first() {\r\n return this._list[0];\r\n }\r\n\r\n /**\r\n * Retrieve a list of keys for the index.\r\n *\r\n * @param {string=} index One of the indices specified during the list construction. If omitted,\r\n * the first of the indices is used.\r\n * @returns {!Array} An unordered list of keys in the index, i.e. particular property\r\n * values for all registered entities.\r\n */\r\n keys(index) {\r\n return Object.keys(this._dict[index || this._indices[0]]);\r\n }\r\n\r\n /**\r\n * Retrieve an entity by its key.\r\n *\r\n * @param {string} key A case-insensitive property value to look-up.\r\n * @param {string=} index One of the indices specified during the list construction. If omitted,\r\n * the first of the indices is used.\r\n * @returns {Object=} An object registered in the index under the key. If there are multiple\r\n * objects under the same key, the first one is returned.\r\n */\r\n get(key, index) {\r\n const dict = this._dict[index || this._indices[0]];\r\n if (dict) {\r\n const values = dict[key && key.toLowerCase()];\r\n return values && values.length > 0 ? values[0] : undefined;\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nexport default EntityList;\r\n","import settings from '../settings';\r\nimport logger from './logger';\r\n\r\nfunction makeContextDependent(prototype) {\r\n Object.defineProperties(prototype, {\r\n logger: {\r\n get() {\r\n return this.context && this.context.logger ? this.context.logger : logger;\r\n },\r\n },\r\n settings: {\r\n get() {\r\n return this.context && this.context.settings ? this.context.settings : settings;\r\n },\r\n },\r\n });\r\n}\r\n\r\nexport default makeContextDependent;\r\n","import * as THREE from 'three';\r\n\r\nclass CollisionSphere {\r\n constructor(position, radius) {\r\n this._position = position;\r\n this._radius = radius;\r\n }\r\n\r\n static _sphere = new THREE.Sphere();\r\n\r\n raycast(raycaster) {\r\n const sphere = CollisionSphere._sphere;\r\n sphere.set(this._position, this._radius);\r\n\r\n const p = new THREE.Vector3();\r\n if (raycaster.ray.intersectSphere(sphere, p)) {\r\n return {\r\n distance: raycaster.ray.origin.distanceTo(p),\r\n point: p,\r\n };\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nconst SphereCollisionGeo = (base) => class extends base {\r\n constructor(count, ...args) {\r\n super(...args);\r\n this._objects = new Array(count);\r\n this.boundingSphere = null;\r\n this.boundingBox = null;\r\n }\r\n\r\n setSphere(idx, position, radius) {\r\n this._objects[idx] = new CollisionSphere(position, radius);\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n // TODO raycast with bounding sphere? How to deal with updates?\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const inters = this._objects[i].raycast(raycaster);\r\n if (inters) {\r\n inters.chunkIdx = i;\r\n intersects.push(inters);\r\n }\r\n }\r\n }\r\n\r\n computeBoundingBox() {\r\n const objects = this._objects;\r\n let { boundingBox } = this;\r\n if (boundingBox === null) {\r\n this.boundingBox = boundingBox = new THREE.Box3();\r\n }\r\n boundingBox.makeEmpty();\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n boundingBox.expandByPoint(objects[i]._position);\r\n }\r\n }\r\n\r\n computeBoundingSphere() {\r\n this.computeBoundingBox();\r\n const objects = this._objects;\r\n const { boundingBox } = this;\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n const pos = objects[i]._position;\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n if (this.boundingSphere === null) {\r\n this.boundingSphere = new THREE.Sphere();\r\n }\r\n this.boundingSphere.set(center, Math.sqrt(radiusSquared));\r\n }\r\n};\r\nexport default SphereCollisionGeo;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst tmpColor = new THREE.Color();\r\n\r\nconst OFFSET_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst { copySubArrays } = utils;\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\nclass InstancedSpheresGeometry extends SphereCollisionGeo(THREE.InstancedBufferGeometry) {\r\n constructor(spheresCount, sphereComplexity, useZSprites) {\r\n super(spheresCount);\r\n this._sphGeometry = useZSprites ? new THREE.PlaneGeometry(2, 2, 1, 1)\r\n : new THREE.SphereGeometry(1, sphereComplexity * 2, sphereComplexity, 0, Math.PI * 2, 0, Math.PI);\r\n this._init(spheresCount, this._sphGeometry);\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n setArrayXYZW(this._offsets, itemIdx * OFFSET_SIZE, itemPos.x, itemPos.y, itemPos.z, itemRad);\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n }\r\n\r\n setColor(itemIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n setArrayXYZ(this._colors, itemIdx * COLOR_SIZE, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('offset').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n alphaArr[chunkIndices[i]] = value;\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const geom = new THREE.InstancedBufferGeometry();\r\n this._init.call(geom, instanceCount, this._sphGeometry);\r\n\r\n copySubArrays(this._offsets, geom._offsets, chunkIndices, OFFSET_SIZE);\r\n copySubArrays(this._colors, geom._colors, chunkIndices, COLOR_SIZE);\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n _init(spheresCount, sphereGeo) {\r\n this.copy(sphereGeo);\r\n\r\n this._offsets = utils.allocateTyped(Float32Array, spheresCount * OFFSET_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, spheresCount * COLOR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, spheresCount);\r\n _.fill(alpha, 1.0);\r\n\r\n this.setAttribute('offset', new THREE.InstancedBufferAttribute(this._offsets, OFFSET_SIZE, false, 1));\r\n this.setAttribute('color', new THREE.InstancedBufferAttribute(this._colors, COLOR_SIZE, false, 1));\r\n this.setAttribute('alphaColor', new THREE.InstancedBufferAttribute(alpha, 1, false, 1));\r\n }\r\n}\r\nexport default InstancedSpheresGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_IDC_16BIT = 65535;\r\nconst VEC_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\n\r\n/**\r\n * This class represents geometry which consists of separate chunks.\r\n * Each chunk has same index and similar geometry with equal points and faces count.\r\n * Each chunk has by default only one color.\r\n * @constructor\r\n */\r\n\r\nclass ChunkedObjectsGeometry extends THREE.BufferGeometry {\r\n constructor(chunkGeo, chunksCount) {\r\n super();\r\n\r\n if (this.constructor === ChunkedObjectsGeometry) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n\r\n this._chunkGeo = chunkGeo;\r\n\r\n this._init(chunkGeo, chunksCount);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('position').needsUpdate = true;\r\n this.getAttribute('normal').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n const colors = this._colors;\r\n const chunkSize = this._chunkSize;\r\n for (let i = chunkIdx * chunkSize, end = i + chunkSize; i < end; ++i) {\r\n const idx = i * VEC_SIZE;\r\n colors[idx] = tmpColor.r;\r\n colors[idx + 1] = tmpColor.g;\r\n colors[idx + 2] = tmpColor.b;\r\n }\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n const chunkSize = this._chunkSize;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const left = chunkIndices[i] * chunkSize;\r\n _.fill(alphaArr, value, left, left + chunkSize);\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const inters = [];\r\n // use THREE.Mesh raycasting interface for the Geometry. The Mesh is\r\n // created with existed geometry and default material, so it doesn't slowdown.\r\n const mesh = new THREE.Mesh();\r\n mesh.geometry = this;\r\n mesh.raycast(raycaster, inters);\r\n\r\n const facesPerChunk = this._chunkGeo.index.count / 3;\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('faceIndex')) {\r\n continue;\r\n }\r\n inters[i].chunkIdx = Math.floor(inters[i].faceIndex / facesPerChunk);\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const geom = new THREE.BufferGeometry();\r\n this._init.call(geom, this._chunkGeo, instanceCount);\r\n\r\n const srcPos = this._positions;\r\n const srcNorm = this._normals;\r\n const srcColor = this._colors;\r\n\r\n const dstPos = geom._positions;\r\n const dstNorm = geom._normals;\r\n const dstColor = geom._colors;\r\n\r\n const chunkSize = this._chunkSize * VEC_SIZE;\r\n\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const dstPtOffset = i * chunkSize;\r\n const ptIdxBegin = chunkIndices[i] * chunkSize;\r\n const ptIdxEnd = ptIdxBegin + chunkSize;\r\n dstPos.set(srcPos.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n dstNorm.set(srcNorm.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n dstColor.set(srcColor.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n }\r\n\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n _init(chunkGeo, chunksCount) {\r\n const chunkSize = this._chunkSize = chunkGeo.attributes.position.count;\r\n const chunkIndex = chunkGeo.index.array;\r\n const chunkIndexSize = chunkIndex.length;\r\n const pointsCount = this._chunkSize * chunksCount;\r\n const use32bitIndex = pointsCount > MAX_IDC_16BIT;\r\n const indexSize = chunkIndexSize * chunksCount;\r\n const index = this._index = utils.allocateTyped(use32bitIndex ? Uint32Array : Uint16Array, indexSize);\r\n this._positions = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n this._normals = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, pointsCount);\r\n _.fill(alpha, 1.0);\r\n\r\n for (let i = 0; i < chunksCount; ++i) {\r\n const offset = i * chunkIndexSize;\r\n const posOffset = i * chunkSize;\r\n index.set(chunkIndex, offset);\r\n for (let j = 0; j < chunkIndexSize; ++j) {\r\n index[offset + j] += posOffset;\r\n }\r\n }\r\n\r\n this.setIndex(new THREE.BufferAttribute(this._index, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(this._positions, VEC_SIZE));\r\n this.setAttribute('normal', new THREE.BufferAttribute(this._normals, VEC_SIZE));\r\n this.setAttribute('color', new THREE.BufferAttribute(this._colors, VEC_SIZE));\r\n this.setAttribute('alphaColor', new THREE.BufferAttribute(alpha, 1));\r\n }\r\n}\r\nexport default ChunkedObjectsGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst VEC_SIZE = 3;\r\n\r\nclass SimpleSpheresGeometry extends SphereCollisionGeo(ChunkedObjectsGeometry) {\r\n constructor(spheresCount, sphereComplexity) {\r\n const sphGeometry = new THREE.SphereGeometry(\r\n 1,\r\n sphereComplexity * 2,\r\n sphereComplexity,\r\n 0,\r\n Math.PI * 2,\r\n 0,\r\n Math.PI,\r\n );\r\n super(spheresCount, sphGeometry, spheresCount);\r\n\r\n const normals = this._normals;\r\n const geoNormals = sphGeometry.attributes.normal.array;\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._tmpPositions = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n for (let i = 0; i < spheresCount; ++i) {\r\n normals.set(geoNormals, chunkSize * VEC_SIZE * i);\r\n }\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n const tmpPos = this._tmpPositions;\r\n const chunkSize = this._chunkSize;\r\n const geoPos = this._chunkPos;\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n const idx = i * 3;\r\n tmpPos[idx] = itemPos.x + geoPos[idx] * itemRad;\r\n tmpPos[idx + 1] = itemPos.y + geoPos[idx + 1] * itemRad;\r\n tmpPos[idx + 2] = itemPos.z + geoPos[idx + 2] * itemRad;\r\n }\r\n\r\n this._positions.set(tmpPos, chunkSize * itemIdx * VEC_SIZE);\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n }\r\n}\r\nexport default SimpleSpheresGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst centerPos = new THREE.Vector3();\r\nconst tmpVector = new THREE.Vector3();\r\nconst normMtx = new THREE.Matrix3();\r\n\r\nclass Simple2CCylindersGeometry extends ChunkedObjectsGeometry {\r\n constructor(instanceCount, polyComplexity) {\r\n const cylGeometry = new THREE.CylinderGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, true);\r\n super(cylGeometry, 2 * instanceCount);\r\n\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._chunkNorms = this._chunkGeo.attributes.normal.array;\r\n this._tmpVector = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const chunkSize = this._chunkSize;\r\n const firstOffset = chunkSize * 2 * itemIdx * VEC_SIZE;\r\n const secondOffset = firstOffset + chunkSize * VEC_SIZE;\r\n\r\n const tmpArray = this._tmpVector;\r\n const geoPos = this._chunkPos;\r\n const geoNorm = this._chunkNorms;\r\n\r\n centerPos.lerpVectors(botPos, topPos, 0.5);\r\n const mtx1 = gfxutils.calcCylinderMatrix(botPos, centerPos, itemRad);\r\n normMtx.getNormalMatrix(mtx1);\r\n\r\n let idx;\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoPos, idx);\r\n tmpVector.applyMatrix4(mtx1);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._positions.set(tmpArray, firstOffset);\r\n\r\n // now shift center to get another part of the cylinder\r\n centerPos.sub(botPos);\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpArray[idx] += centerPos.x;\r\n tmpArray[idx + 1] += centerPos.y;\r\n tmpArray[idx + 2] += centerPos.z;\r\n }\r\n this._positions.set(tmpArray, secondOffset);\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoNorm, idx);\r\n tmpVector.applyMatrix3(normMtx);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._normals.set(tmpArray, firstOffset);\r\n this._normals.set(tmpArray, secondOffset);\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const first = 2 * itemIdx;\r\n super.setColor(first, colorVal1);\r\n\r\n const second = first + 1;\r\n super.setColor(second, colorVal2);\r\n }\r\n}\r\n\r\nexport default Simple2CCylindersGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_POINTS_COUNT_16BIT = 65536;\r\nconst PTS_PER_TRIANGLE = 3;\r\n\r\nclass CylinderBufferGeometry extends THREE.BufferGeometry {\r\n constructor(\r\n radiusTop,\r\n radiusBottom,\r\n height,\r\n radialSegments,\r\n heightSegments,\r\n openEnded,\r\n ) {\r\n super();\r\n\r\n const thetaStart = 0;\r\n const thetaLength = 2 * Math.PI;\r\n\r\n this.type = 'CylinderBufferGeometry';\r\n\r\n this.parameters = {\r\n radiusTop,\r\n radiusBottom,\r\n height,\r\n radialSegments,\r\n heightSegments,\r\n openEnded,\r\n };\r\n\r\n const hasTop = openEnded === false && radiusTop > 0;\r\n const hasBottom = openEnded === false && radiusBottom > 0;\r\n const vertexCount = (heightSegments + 1) * radialSegments\r\n + hasTop * (radialSegments + 1)\r\n + hasBottom * (radialSegments + 1);\r\n const facesCount = (2 * heightSegments + hasTop + hasBottom) * radialSegments;\r\n\r\n const heightHalf = height / 2;\r\n\r\n const positions = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3);\r\n const normals = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3);\r\n const indices = new THREE.Uint16BufferAttribute(utils.allocateTyped(Uint16Array, facesCount * PTS_PER_TRIANGLE), 1);\r\n\r\n const uvs = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 2), 2);\r\n console.assert(vertexCount < MAX_POINTS_COUNT_16BIT, 'DEBUG: Cylinder Geometry has too many vertices (65536 max).');\r\n\r\n let currVtxIdx = 0;\r\n let currFaceIdx = 0;\r\n const tanTheta = -(radiusBottom - radiusTop) / height;\r\n\r\n // setup cylinder data\r\n for (let y = 0; y <= heightSegments; y++) {\r\n // faces\r\n if (y !== heightSegments) {\r\n for (let i = 0; i < radialSegments; i++) {\r\n const v1 = currVtxIdx + i;\r\n const v2 = currVtxIdx + radialSegments + i;\r\n const v3 = currVtxIdx + radialSegments + ((i + 1) % radialSegments);\r\n const v4 = currVtxIdx + ((i + 1) % radialSegments);\r\n\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, v1, v4, v2);\r\n currFaceIdx++;\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, v2, v4, v3);\r\n currFaceIdx++;\r\n }\r\n }\r\n\r\n // vertices\r\n const v = y / heightSegments;\r\n const radius = v * (radiusBottom - radiusTop) + radiusTop;\r\n\r\n for (let x = 0; x < radialSegments; x++) {\r\n const u = x / radialSegments;\r\n\r\n const vx = radius * Math.sin(u * thetaLength + thetaStart);\r\n const vy = v * height - heightHalf;\r\n const vz = radius * Math.cos(u * thetaLength + thetaStart);\r\n\r\n const normal = new THREE.Vector3(\r\n vx,\r\n Math.sqrt(vx * vx + vz * vz) * tanTheta,\r\n vz,\r\n ).normalize();\r\n\r\n positions.setXYZ(currVtxIdx, vx, vy, vz);\r\n normals.setXYZ(currVtxIdx, normal.x, normal.y, normal.z);\r\n uvs.setXY(currVtxIdx, u, v);\r\n ++currVtxIdx;\r\n }\r\n }\r\n\r\n // top cap\r\n if (hasTop) {\r\n const startTIdx = currVtxIdx;\r\n const lastIdx = currVtxIdx + radialSegments;\r\n for (let fTIdx = 0; fTIdx < radialSegments; ++fTIdx) {\r\n const currSrcIdx = currVtxIdx - radialSegments;\r\n positions.setXYZ(\r\n currVtxIdx,\r\n positions.getX(currSrcIdx),\r\n positions.getY(currSrcIdx),\r\n positions.getZ(currSrcIdx),\r\n );\r\n normals.setXYZ(currVtxIdx, 0, 1, 0);\r\n uvs.setXY(currVtxIdx, 1, 1);\r\n\r\n const nextTVtx = startTIdx + ((fTIdx + 1) % radialSegments);\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, currVtxIdx, nextTVtx, lastIdx);\r\n currFaceIdx++;\r\n currVtxIdx++;\r\n }\r\n\r\n positions.setXYZ(currVtxIdx, 0, heightHalf, 0);\r\n normals.setXYZ(currVtxIdx, 0, 1, 0);\r\n uvs.setXY(currVtxIdx, 1, 1);\r\n ++currVtxIdx;\r\n }\r\n\r\n // bottom cap\r\n if (hasBottom) {\r\n const startBIdx = currVtxIdx;\r\n const lastBIdx = currVtxIdx + radialSegments;\r\n for (let fBIdx = 0; fBIdx < radialSegments; ++fBIdx) {\r\n const currSrcBIdx = fBIdx;\r\n positions.setXYZ(\r\n currVtxIdx,\r\n positions.getX(currSrcBIdx),\r\n positions.getY(currSrcBIdx),\r\n positions.getZ(currSrcBIdx),\r\n );\r\n normals.setXYZ(currVtxIdx, 0, -1, 0);\r\n uvs.setXY(currVtxIdx, 0, 0);\r\n\r\n const nextBVtx = startBIdx + ((fBIdx + 1) % radialSegments);\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, nextBVtx, currVtxIdx, lastBIdx);\r\n currFaceIdx++;\r\n currVtxIdx++;\r\n }\r\n\r\n positions.setXYZ(currVtxIdx, 0, -heightHalf, 0);\r\n normals.setXYZ(currVtxIdx, 0, -1, 0);\r\n uvs.setXY(currVtxIdx, 0, 0);\r\n }\r\n\r\n this.setIndex(indices);\r\n this.setAttribute('position', positions);\r\n this.setAttribute('normal', normals);\r\n this.setAttribute('uv', uvs);\r\n }\r\n\r\n clone() {\r\n const { parameters } = this;\r\n\r\n return new CylinderBufferGeometry(\r\n parameters.radiusTop,\r\n parameters.radiusBottom,\r\n parameters.height,\r\n parameters.radialSegments,\r\n parameters.heightSegments,\r\n parameters.openEnded,\r\n );\r\n }\r\n}\r\n\r\nexport default CylinderBufferGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\nimport CylinderBufferGeometry from './CylinderBufferGeometry';\r\n\r\nconst tmpColor = new THREE.Color();\r\nconst invMatrix = new THREE.Matrix4();\r\n\r\nconst OFFSET_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst { copySubArrays } = utils;\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\n\r\nfunction sortNumber(a, b) {\r\n return a - b;\r\n}\r\n\r\nfunction _prepareCylinderInfo(chunkIndices) {\r\n chunkIndices.sort(sortNumber);\r\n const chunksIdx = [];\r\n const cylinderInfo = [];\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const val = chunkIndices[i];\r\n const even = (val | 0) % 2 === 0;\r\n const newPar = {\r\n first: false,\r\n second: false,\r\n };\r\n if (even) {\r\n newPar.first = true;\r\n newPar.second = i + 1 < n && chunkIndices[i + 1] === chunkIndices[i] + 1;\r\n if (newPar.second) {\r\n ++i;\r\n }\r\n } else {\r\n newPar.second = true;\r\n }\r\n chunksIdx.push(Math.floor(val / 2));\r\n cylinderInfo.push(newPar);\r\n }\r\n return { indices: chunksIdx, cylinderInfo };\r\n}\r\n\r\nfunction _assignOpacity(cylinderInfo, color1, color2) {\r\n for (let i = 0, n = cylinderInfo.length; i < n; ++i) {\r\n const info = cylinderInfo[i];\r\n if (!info.first) {\r\n color1[COLOR_SIZE * i] = -0.5;\r\n }\r\n if (!info.second) {\r\n color2[COLOR_SIZE * i] = -0.5;\r\n }\r\n }\r\n}\r\nclass Instanced2CCylindersGeometry extends THREE.InstancedBufferGeometry {\r\n constructor(instanceCount, polyComplexity, useZSprites, openEnded) {\r\n super();\r\n this._useZSprites = useZSprites;\r\n this._cylGeometry = useZSprites ? new THREE.PlaneGeometry(2, 2, 1, 1)\r\n : new CylinderBufferGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, openEnded);\r\n this._init(instanceCount, this._cylGeometry, this._useZSprites);\r\n\r\n this._collisionGeo = new Simple2CCylindersGeometry(instanceCount, 3);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const matrix = gfxutils.calcCylinderMatrix(botPos, topPos, itemRad);\r\n let me = matrix.elements;\r\n const mtxOffset = itemIdx * OFFSET_SIZE;\r\n\r\n this._collisionGeo.setItem(itemIdx, botPos, topPos, itemRad);\r\n setArrayXYZW(this._matVector1, mtxOffset, me[0], me[4], me[8], me[12]);\r\n setArrayXYZW(this._matVector2, mtxOffset, me[1], me[5], me[9], me[13]);\r\n setArrayXYZW(this._matVector3, mtxOffset, me[2], me[6], me[10], me[14]);\r\n\r\n if (this._useZSprites) {\r\n invMatrix.copy(matrix).invert();\r\n me = invMatrix.elements;\r\n setArrayXYZW(this._invmatVector1, mtxOffset, me[0], me[4], me[8], me[12]);\r\n setArrayXYZW(this._invmatVector2, mtxOffset, me[1], me[5], me[9], me[13]);\r\n setArrayXYZW(this._invmatVector3, mtxOffset, me[2], me[6], me[10], me[14]);\r\n }\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const colorIdx = itemIdx * COLOR_SIZE;\r\n tmpColor.set(colorVal1);\r\n setArrayXYZ(this._color1, colorIdx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n tmpColor.set(colorVal2);\r\n setArrayXYZ(this._color2, colorIdx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n computeBoundingSphere() {\r\n this._collisionGeo.computeBoundingSphere();\r\n this.boundingSphere = this._collisionGeo.boundingSphere;\r\n }\r\n\r\n computeBoundingBox() {\r\n this._collisionGeo.computeBoundingBox();\r\n this.boundingBox = this._collisionGeo.boundingBox;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('matVector1').needsUpdate = true;\r\n this.getAttribute('matVector2').needsUpdate = true;\r\n this.getAttribute('matVector3').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n this.getAttribute('color2').needsUpdate = true;\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n if (this._useZSprites) {\r\n this.getAttribute('invmatVector1').needsUpdate = true;\r\n this.getAttribute('invmatVector2').needsUpdate = true;\r\n this.getAttribute('invmatVector3').needsUpdate = true;\r\n }\r\n\r\n this._collisionGeo.finishUpdate();\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n alphaArr[Math.floor(chunkIndices[i] / 2)] = value;\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const info = _prepareCylinderInfo(chunkIndices);\r\n const cylinderIndices = info.indices;\r\n const instanceCount = cylinderIndices.length;\r\n const geom = new THREE.InstancedBufferGeometry();\r\n this._init.call(geom, instanceCount, this._cylGeometry, this._useZSprites);\r\n\r\n copySubArrays(this._matVector1, geom._matVector1, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._matVector2, geom._matVector2, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._matVector3, geom._matVector3, cylinderIndices, OFFSET_SIZE);\r\n\r\n if (this._useZSprites) {\r\n copySubArrays(this._invmatVector1, geom._invmatVector1, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._invmatVector2, geom._invmatVector2, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._invmatVector3, geom._invmatVector3, cylinderIndices, OFFSET_SIZE);\r\n }\r\n\r\n copySubArrays(this._color1, geom._color1, cylinderIndices, COLOR_SIZE);\r\n copySubArrays(this._color2, geom._color2, cylinderIndices, COLOR_SIZE);\r\n _assignOpacity(info.cylinderInfo, geom._color1, geom._color2);\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n getGeoParams() {\r\n return this._cylGeometry.parameters;\r\n }\r\n\r\n _init(instanceCount, cylinderGeo, useZSprites) {\r\n this.copy(cylinderGeo);\r\n this._matVector1 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._matVector2 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._matVector3 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._color1 = utils.allocateTyped(Float32Array, instanceCount * COLOR_SIZE);\r\n this._color2 = utils.allocateTyped(Float32Array, instanceCount * COLOR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, instanceCount);\r\n _.fill(alpha, 1.0);\r\n\r\n this.setAttribute('matVector1', new THREE.InstancedBufferAttribute(this._matVector1, OFFSET_SIZE, false, 1));\r\n this.setAttribute('matVector2', new THREE.InstancedBufferAttribute(this._matVector2, OFFSET_SIZE, false, 1));\r\n this.setAttribute('matVector3', new THREE.InstancedBufferAttribute(this._matVector3, OFFSET_SIZE, false, 1));\r\n this.setAttribute('color', new THREE.InstancedBufferAttribute(this._color1, COLOR_SIZE, false, 1));\r\n this.setAttribute('color2', new THREE.InstancedBufferAttribute(this._color2, COLOR_SIZE, false, 1));\r\n\r\n this.setAttribute('alphaColor', new THREE.InstancedBufferAttribute(this._alpha, 1, false, 1));\r\n\r\n if (useZSprites) {\r\n this._invmatVector1 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._invmatVector2 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._invmatVector3 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n\r\n this.setAttribute(\r\n 'invmatVector1',\r\n new THREE.InstancedBufferAttribute(this._invmatVector1, OFFSET_SIZE, false, 1),\r\n );\r\n this.setAttribute(\r\n 'invmatVector2',\r\n new THREE.InstancedBufferAttribute(this._invmatVector2, OFFSET_SIZE, false, 1),\r\n );\r\n this.setAttribute(\r\n 'invmatVector3',\r\n new THREE.InstancedBufferAttribute(this._invmatVector3, OFFSET_SIZE, false, 1),\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport default Instanced2CCylindersGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst TRI_SIZE = 3;\r\nconst tmpPrev = new THREE.Vector3();\r\nconst tmpNext = new THREE.Vector3();\r\nconst tmpRes = new THREE.Vector3();\r\nconst simpleNormal = new THREE.Vector3(1.0, 0.0, 0.0);\r\nconst normalOnCut = new THREE.Vector3();\r\nconst nearRingPt = new THREE.Vector3();\r\n\r\nfunction _createExtrudedChunkGeometry(shape, ringsCount) {\r\n const geo = new THREE.BufferGeometry();\r\n const ptsCount = shape.length;\r\n const totalPts = ptsCount * ringsCount;\r\n const type = totalPts <= 65536 ? Uint16Array : Uint32Array;\r\n const facesPerChunk = (ringsCount - 1) * ptsCount * 2;\r\n const indices = new THREE.BufferAttribute(utils.allocateTyped(type, facesPerChunk * TRI_SIZE), 1);\r\n\r\n let currVtxIdx = 0;\r\n let currFaceIdx = 0;\r\n for (let y = 0; y < ringsCount; y++) {\r\n // faces\r\n if (y !== ringsCount - 1) {\r\n for (let i = 0; i < ptsCount; i++) {\r\n const v1 = currVtxIdx + i;\r\n const v2 = currVtxIdx + ptsCount + i;\r\n const v3 = currVtxIdx + ptsCount + ((i + 1) % ptsCount);\r\n const v4 = currVtxIdx + ((i + 1) % ptsCount);\r\n\r\n indices.setXYZ(currFaceIdx * TRI_SIZE, v1, v4, v2);\r\n currFaceIdx++;\r\n indices.setXYZ(currFaceIdx * TRI_SIZE, v2, v4, v3);\r\n currFaceIdx++;\r\n }\r\n }\r\n\r\n currVtxIdx += ptsCount;\r\n }\r\n\r\n geo.setIndex(indices);\r\n const pos = utils.allocateTyped(Float32Array, totalPts * VEC_SIZE);\r\n geo.setAttribute('position', new THREE.BufferAttribute(pos, VEC_SIZE));\r\n\r\n geo._positions = shape;\r\n\r\n return geo;\r\n}\r\n\r\nclass ExtrudedObjectsGeometry extends ChunkedObjectsGeometry {\r\n constructor(shape, ringsCount, chunksCount) {\r\n const chunkGeo = _createExtrudedChunkGeometry(shape, ringsCount);\r\n super(chunkGeo, chunksCount);\r\n this._ringsCount = ringsCount;\r\n\r\n const tmpShape = this._tmpShape = [];\r\n for (let i = 0; i < shape.length; ++i) {\r\n tmpShape[i] = new THREE.Vector3();\r\n }\r\n }\r\n\r\n setItem(itemIdx, matrices, hasSlope = false, hasCut = false) {\r\n const ptsCount = this._chunkGeo._positions.length;\r\n const ringsCount = this._ringsCount;\r\n const chunkStartIdx = ptsCount * this._ringsCount * itemIdx * VEC_SIZE;\r\n\r\n this._setPoints(matrices, ptsCount, ringsCount, chunkStartIdx);\r\n\r\n if (hasSlope) {\r\n this._setSlopeNormals(ptsCount, ringsCount, chunkStartIdx);\r\n } else {\r\n this._setBaseNormals(ptsCount, ringsCount, chunkStartIdx);\r\n }\r\n\r\n if (hasCut) {\r\n this._addCut(ptsCount, ringsCount, chunkStartIdx);\r\n }\r\n }\r\n\r\n _setPoints(matrices, ptsCount, ringsCount, chunkStartIdx) {\r\n const tmpShape = this._tmpShape;\r\n const positions = this._positions;\r\n const shape = this._chunkGeo._positions;\r\n\r\n for (let i = 0, vtxIdx = chunkStartIdx; i < ringsCount; ++i) {\r\n const mtx = matrices[i];\r\n\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpShape[j].copy(shape[j]).applyMatrix4(mtx).toArray(positions, vtxIdx);\r\n }\r\n }\r\n }\r\n\r\n _setBaseNormals(ptsCount, ringsCount, chunkStartIdx) {\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n for (let i = 0, vtxIdx = chunkStartIdx; i < ringsCount; ++i, vtxIdx += nPtsInRing) {\r\n this._countNormalsInRing(ptsCount, vtxIdx, false);\r\n }\r\n }\r\n\r\n _setSlopeNormals(ptsCount, ringsCount, chunkStartIdx) {\r\n const normals = this._normals;\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n let vtxIdx = chunkStartIdx;\r\n // First ring\r\n // In all cases, besides cut, second ring is coincident to first. So values of first ring's normals doesn't\r\n // matter (In the cut case special handler will be applied later and will set them to correct values)\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n simpleNormal.toArray(normals, vtxIdx);\r\n }\r\n // second ring\r\n // If it isn't first Item we take normals' values from the last ring of the previous item (these rings are coincident)\r\n // else we count normals' values based on next ring information\r\n if (vtxIdx - 2 * nPtsInRing > 0) {\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpRes.fromArray(normals, vtxIdx - 2 * nPtsInRing).toArray(normals, vtxIdx);\r\n }\r\n } else {\r\n this._countNormalsInRing(ptsCount, vtxIdx, true, +nPtsInRing);\r\n vtxIdx += nPtsInRing;\r\n }\r\n // other rings\r\n // we count normals' values based on previous ring information\r\n for (let i = 2; i < ringsCount; ++i, vtxIdx += nPtsInRing) {\r\n this._countNormalsInRing(ptsCount, vtxIdx, true, -nPtsInRing);\r\n }\r\n }\r\n\r\n // Counting normals:\r\n // - Slope\r\n // Radius changes throught part => normals aren't parallel with the plane contains section points\r\n // normal = vTangentInSectionPlane x vToSuchPointInPrevSection (all vectors are scaled for being 1 in length)\r\n // - No slope\r\n // Radius doesn't change throught part => normals are parallel with the plane contains section points\r\n // normal = vToPrevPointInSection + vToNextPointInSection (all vectors are scaled for being 1 in length)\r\n _countNormalsInRing(ptsCount, vtxIdx, isSlope, shiftToExtraPt) {\r\n const tmpShape = this._tmpShape;\r\n const normals = this._normals;\r\n\r\n tmpShape[0].fromArray(this._positions, vtxIdx);\r\n tmpShape[ptsCount - 1].fromArray(this._positions, vtxIdx + (ptsCount - 1) * VEC_SIZE);\r\n\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n if (j < ptsCount - 1) {\r\n tmpShape[j + 1].fromArray(this._positions, vtxIdx + VEC_SIZE);\r\n }\r\n\r\n if (isSlope) {\r\n nearRingPt.fromArray(this._positions, vtxIdx + shiftToExtraPt);\r\n\r\n tmpPrev.subVectors(tmpShape[(j + ptsCount - 1) % ptsCount], tmpShape[(j + 1) % ptsCount]).normalize();\r\n tmpNext.subVectors(tmpShape[j], nearRingPt).normalize();\r\n tmpRes.crossVectors(tmpNext, tmpPrev).normalize().toArray(normals, vtxIdx);\r\n } else {\r\n tmpPrev.subVectors(tmpShape[j], tmpShape[(j + ptsCount - 1) % ptsCount]).normalize();\r\n tmpNext.subVectors(tmpShape[j], tmpShape[(j + 1) % ptsCount]).normalize();\r\n tmpRes.addVectors(tmpPrev, tmpNext).normalize().toArray(normals, vtxIdx);\r\n }\r\n }\r\n }\r\n\r\n _addCut(ptsCount, ringsCount, chunkStartIdx) {\r\n // Nothing to do if item is flat or only line\r\n if (ptsCount < 3 || ringsCount < 2) {\r\n return;\r\n }\r\n const positions = this._positions;\r\n const normals = this._normals;\r\n const tmpShape = this._tmpShape;\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n // Normal to the cut plane is equal to cross product of two vectors which are lying in it\r\n tmpShape[0].fromArray(positions, chunkStartIdx);\r\n tmpShape[1].fromArray(positions, chunkStartIdx + VEC_SIZE);\r\n tmpShape[2].fromArray(positions, chunkStartIdx + 2 * VEC_SIZE);\r\n\r\n tmpPrev.subVectors(tmpShape[1], tmpShape[0]).normalize();\r\n tmpNext.subVectors(tmpShape[1], tmpShape[2]).normalize();\r\n normalOnCut.crossVectors(tmpPrev, tmpNext).normalize();\r\n\r\n let vtxIdx = chunkStartIdx;\r\n // First and second rings normals' values are equal to value of normal to the cutting plane\r\n for (let j = 0; j < ptsCount * 2; ++j, vtxIdx += VEC_SIZE) {\r\n normalOnCut.toArray(normals, vtxIdx);\r\n }\r\n if (ringsCount > 2) {\r\n // Third ring points are coincident to first ring points, but have different normals. It makes sharp angle near cut\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpRes.fromArray(positions, vtxIdx - nPtsInRing).toArray(positions, vtxIdx);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default ExtrudedObjectsGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_IDC_16BIT = 65535;\r\nconst VERTEX_PER_SEGMENT = 4;\r\nconst POS_SIZE = 4;\r\nconst DIR_SIZE = 3;\r\nconst COL_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\nconst direction = new THREE.Vector3();\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\n\r\nfunction getSubset(arr, startSegmentIdx, segmentsCount, elemSize) {\r\n const start = startSegmentIdx * VERTEX_PER_SEGMENT;\r\n const end = start + segmentsCount * VERTEX_PER_SEGMENT;\r\n return arr.subarray(start * elemSize, end * elemSize);\r\n}\r\n\r\n/**\r\n * This class represents lines geometry which consists of screen-aligned narrow quad of variable width.\r\n *\r\n * @constructor\r\n *\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n * collision geometry.\r\n */\r\n\r\nclass ThickLinesGeometry extends THREE.BufferGeometry {\r\n constructor(segmentsCount) {\r\n super();\r\n this._initVertices(segmentsCount);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('position').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n this.getAttribute('direction').needsUpdate = true;\r\n }\r\n\r\n setColor(segmentIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n let idx = segmentIdx * VERTEX_PER_SEGMENT * COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n setSegment(segmentIdx, pos1, pos2) {\r\n direction.subVectors(pos1, pos2);\r\n direction.normalize();\r\n const positions = this._positions;\r\n const directions = this._directions;\r\n let idx = segmentIdx * VERTEX_PER_SEGMENT * POS_SIZE;\r\n let dirIdx = segmentIdx * VERTEX_PER_SEGMENT * DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos1.x, pos1.y, pos1.z, 0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos1.x, pos1.y, pos1.z, -0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos2.x, pos2.y, pos2.z, 0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos2.x, pos2.y, pos2.z, -0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n }\r\n\r\n setOpacity(startSegIdx, endSegIdx, value) {\r\n const start = startSegIdx * VERTEX_PER_SEGMENT;\r\n const end = endSegIdx * VERTEX_PER_SEGMENT;\r\n _.fill(this.alpha, value, end, start);\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubsetSegments(startSegmentIdx, segmentsCount) {\r\n return [\r\n getSubset(this._positions, startSegmentIdx, segmentsCount, POS_SIZE),\r\n getSubset(this._directions, startSegmentIdx, segmentsCount, DIR_SIZE),\r\n ];\r\n }\r\n\r\n getSubsetColors(startSegmentIdx, segmentsCount) {\r\n return getSubset(this._colors, startSegmentIdx, segmentsCount, COL_SIZE);\r\n }\r\n\r\n getSubsetOpacities(startSegmentIdx, segmentsCount) {\r\n return getSubset(this._alpha, startSegmentIdx, segmentsCount, 1);\r\n }\r\n\r\n getNumVertexPerSegment() {\r\n return VERTEX_PER_SEGMENT;\r\n }\r\n\r\n getPositionSize() {\r\n return POS_SIZE;\r\n }\r\n\r\n setSegments(startSegmentIdx, positions) {\r\n const startPos = startSegmentIdx * VERTEX_PER_SEGMENT * POS_SIZE;\r\n if (positions instanceof Array && positions.length === 2) {\r\n this._positions.set(positions[0], startPos);\r\n const startDir = startSegmentIdx * VERTEX_PER_SEGMENT * DIR_SIZE;\r\n this._directions.set(positions[1], startDir); // dirs are geo part of vertex\r\n } else {\r\n this._positions.set(positions, startPos);\r\n }\r\n }\r\n\r\n setColors(startSegmentIdx, colors) {\r\n const start = startSegmentIdx * VERTEX_PER_SEGMENT * COL_SIZE;\r\n this._colors.set(colors, start);\r\n }\r\n\r\n _initVertices(segmentsCount) {\r\n this._buffersSize = segmentsCount * VERTEX_PER_SEGMENT;\r\n const pointsCount = this._buffersSize;\r\n const use32bitIndex = pointsCount > MAX_IDC_16BIT;\r\n this._index = utils.allocateTyped(use32bitIndex ? Uint32Array : Uint16Array, segmentsCount * 6);\r\n this._positions = utils.allocateTyped(Float32Array, pointsCount * POS_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, pointsCount * COL_SIZE);\r\n this._directions = utils.allocateTyped(Float32Array, pointsCount * DIR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, pointsCount);\r\n _.fill(alpha, 1.0);\r\n\r\n const index = this._index;\r\n let indexOffset = 0;\r\n let pointOffset = 0;\r\n for (let j = 0; j < segmentsCount; j++, indexOffset += 6, pointOffset += VERTEX_PER_SEGMENT) {\r\n index[indexOffset] = pointOffset;\r\n index[indexOffset + 1] = pointOffset + 1;\r\n index[indexOffset + 2] = pointOffset + 3;\r\n index[indexOffset + 3] = pointOffset;\r\n index[indexOffset + 4] = pointOffset + 2;\r\n index[indexOffset + 5] = pointOffset + 3;\r\n }\r\n this.setIndex(new THREE.BufferAttribute(this._index, 1));\r\n\r\n this.setAttribute('position', new THREE.BufferAttribute(this._positions, POS_SIZE));\r\n this.setAttribute('color', new THREE.BufferAttribute(this._colors, COL_SIZE));\r\n this.setAttribute('alphaColor', new THREE.BufferAttribute(alpha, 1));\r\n this.setAttribute('direction', new THREE.BufferAttribute(this._directions, DIR_SIZE));\r\n }\r\n}\r\n\r\nexport default ThickLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport BaseLinesGeometry from './ThickLinesGeometry';\r\n\r\n/**\r\n * This class represents geometry which consists lines. This can build bounding volumes\r\n * @constructor\r\n *\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n */\r\nclass LinesGeometry extends BaseLinesGeometry {\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n computeBoundingSphere() {\r\n const { boundingBox } = this;\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n if (boundingBox) {\r\n boundingBox.getCenter(center);\r\n }\r\n const positions = this._positions;\r\n const sphere = this.boundingSphere || new THREE.Sphere();\r\n const size = this._positions.length;\r\n const pos = new THREE.Vector3();\r\n const posSize = this.getPositionSize();\r\n for (let i = 0; i < size; i += posSize) {\r\n pos.set(positions[i], positions[i + 1], positions[i + 2]);\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n sphere.set(center, Math.sqrt(radiusSquared));\r\n this.boundingSphere = sphere;\r\n }\r\n\r\n computeBoundingBox() {\r\n const positions = this._positions;\r\n const box = new THREE.Box3();\r\n const size = this._positions.length;\r\n const tmpVec = new THREE.Vector3();\r\n const posSize = this.getPositionSize();\r\n for (let i = 0; i < size; i += posSize) {\r\n tmpVec.set(positions[i], positions[i + 1], positions[i + 2]);\r\n box.expandByPoint(tmpVec);\r\n }\r\n this.boundingBox = box;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n}\r\n\r\nexport default LinesGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst tmpVector = new THREE.Vector3();\r\nconst normMtx = new THREE.Matrix3();\r\n\r\nclass CylinderCollisionGeo extends ChunkedObjectsGeometry {\r\n constructor(instanceCount, polyComplexity) {\r\n const cylGeometry = new THREE.CylinderGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, true);\r\n super(cylGeometry, instanceCount);\r\n\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._chunkNorms = this._chunkGeo.attributes.normal.array;\r\n this._tmpVector = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const chunkSize = this._chunkSize;\r\n const itemOffset = chunkSize * itemIdx * VEC_SIZE;\r\n\r\n const tmpArray = this._tmpVector;\r\n const geoPos = this._chunkPos;\r\n const geoNorm = this._chunkNorms;\r\n\r\n const mtx1 = gfxutils.calcCylinderMatrix(botPos, topPos, itemRad);\r\n normMtx.getNormalMatrix(mtx1);\r\n let idx;\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoPos, idx);\r\n tmpVector.applyMatrix4(mtx1);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._positions.set(tmpArray, itemOffset);\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoNorm, idx);\r\n tmpVector.applyMatrix3(normMtx);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._normals.set(tmpArray, itemOffset);\r\n }\r\n}\r\nexport default CylinderCollisionGeo;\r\n","import LinesGeometry from './LinesGeometry';\r\nimport CylinderCollisionGeo from './CylinderCollisionGeo';\r\n\r\nconst COLLISION_RAD = 0.1;\r\n\r\n/**\r\n * This class represents geometry which consists of separate chunks.\r\n * Each chunk has same index and similar geometry with equal points and faces count.\r\n * Each chunk has by default only one color.\r\n * @constructor\r\n *\r\n * @param {number} chunksCount Total chunks count.\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n * @param {boolean} enableCollision Enable or disable collision where each segment is\r\n * a collidable cylinder.\r\n * collision geometry.\r\n */\r\nclass ChunkedLinesGeometry extends LinesGeometry {\r\n constructor(chunksCount, segmentsCount, enableCollision) {\r\n super(chunksCount * segmentsCount);\r\n this._init(segmentsCount);\r\n this._collisionGeo = enableCollision ? new CylinderCollisionGeo(chunksCount * segmentsCount, 3) : null;\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n computeBoundingSphere() {\r\n const collisionGeo = this._collisionGeo;\r\n if (collisionGeo) {\r\n collisionGeo.computeBoundingSphere();\r\n this.boundingSphere = collisionGeo.boundingSphere;\r\n return;\r\n }\r\n super.computeBoundingSphere();\r\n }\r\n\r\n computeBoundingBox() {\r\n const collisionGeo = this._collisionGeo;\r\n if (collisionGeo) {\r\n collisionGeo.computeBoundingBox();\r\n this.boundingBox = collisionGeo.boundingBox;\r\n return;\r\n }\r\n super.computeBoundingBox();\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const collisionGeo = this._collisionGeo;\r\n if (!collisionGeo) {\r\n return;\r\n }\r\n const segCount = this._chunkSize;\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n for (let i = 0, n = intersects.length; i < n; ++i) {\r\n let { chunkIdx } = intersects[i];\r\n if (chunkIdx === undefined) {\r\n continue;\r\n }\r\n chunkIdx = (chunkIdx / segCount) | 0;\r\n intersects[i].chunkIdx = chunkIdx;\r\n }\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n const chunkSize = this._chunkSize;\r\n for (let i = chunkIdx * chunkSize, end = i + chunkSize; i < end; ++i) {\r\n super.setColor(i, colorVal);\r\n }\r\n }\r\n\r\n setSegment(chunkIdx, segIdx, pos1, pos2) {\r\n const chunkSize = this._chunkSize;\r\n const idx = chunkIdx * chunkSize + segIdx;\r\n super.setSegment(idx, pos1, pos2);\r\n if (this._collisionGeo) {\r\n this._collisionGeo.setItem(chunkIdx * chunkSize + segIdx, pos1, pos2, COLLISION_RAD);\r\n }\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const chunkSize = this._chunkSize;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const left = chunkIndices[i] * chunkSize;\r\n super.setOpacity(left, left + chunkSize - 1, value);\r\n }\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const chunkSize = this._chunkSize;\r\n const subset = new ChunkedLinesGeometry(instanceCount, chunkSize, false);\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const dstPtOffset = i * chunkSize;\r\n const startSegIdx = chunkIndices[i] * chunkSize;\r\n subset.setSegments(dstPtOffset, this.getSubsetSegments(startSegIdx, chunkSize));\r\n subset.setColors(dstPtOffset, this.getSubsetColors(startSegIdx, chunkSize));\r\n }\r\n\r\n subset.boundingSphere = this.boundingSphere;\r\n subset.boundingBox = this.boundingBox;\r\n return [subset];\r\n }\r\n\r\n _init(chunkSize) {\r\n this._chunkSize = chunkSize;\r\n }\r\n}\r\n\r\nexport default ChunkedLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport LinesGeometry from './LinesGeometry';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\n\r\nconst COLLISION_RAD = 0.3;\r\nconst tmpVector = new THREE.Vector3();\r\n\r\nclass TwoColorLinesGeometry extends LinesGeometry {\r\n constructor(segmentsCount) {\r\n super(segmentsCount * 2);\r\n this._init(segmentsCount);\r\n this._collisionGeo = new Simple2CCylindersGeometry(segmentsCount, 3);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos) {\r\n this._collisionGeo.setItem(itemIdx, botPos, topPos, COLLISION_RAD);\r\n const offset = 2 * itemIdx;// there are two points per segment\r\n tmpVector.lerpVectors(botPos, topPos, 0.5);\r\n super.setSegment(offset, botPos, tmpVector);\r\n super.setSegment(offset + 1, tmpVector, topPos);\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const offset = 2 * itemIdx;// there are two points per segment\r\n super.setColor(offset, colorVal1);\r\n super.setColor(offset + 1, colorVal2);\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n if (this._collisionGeo) {\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n }\r\n }\r\n\r\n getSubset(segmentIndices) {\r\n const instanceCount = segmentIndices.length;\r\n const subset = new TwoColorLinesGeometry(instanceCount, false);\r\n for (let i = 0, n = instanceCount; i < n; ++i) {\r\n const startSegIdx = segmentIndices[i];\r\n subset.setSegments(i, this.getSubsetSegments(startSegIdx, 1));\r\n subset.setColors(i, this.getSubsetColors(startSegIdx, 1));\r\n }\r\n\r\n subset.boundingSphere = this.boundingSphere;\r\n subset.boundingBox = this.boundingBox;\r\n return [subset];\r\n }\r\n\r\n _init(segmentsCount) {\r\n this._segCounts = segmentsCount * 2;\r\n }\r\n}\r\n// (???)parent = LinesGeometry.prototype;\r\n\r\nexport default TwoColorLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport ChunkedLinesGeometry from './ChunkedLinesGeometry';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst vectors = [\r\n new THREE.Vector3(1, 0, 0),\r\n new THREE.Vector3(-1, 0, 0),\r\n new THREE.Vector3(0, 1, 0),\r\n new THREE.Vector3(0, -1, 0),\r\n new THREE.Vector3(0, 0, 1),\r\n new THREE.Vector3(0, 0, -1),\r\n];\r\nconst vecCount = vectors.length;\r\nconst tempPos1 = new THREE.Vector3();\r\nconst tempPos2 = new THREE.Vector3();\r\n\r\nclass CrossGeometry extends SphereCollisionGeo(ChunkedLinesGeometry) {\r\n constructor(chunksCount) {\r\n super(chunksCount, chunksCount, (vecCount / 2) | 0, false);\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n\r\n for (let i = 0; i < vecCount / 2; ++i) {\r\n const first = i * 2;\r\n tempPos1.x = itemPos.x + vectors[first].x * itemRad;\r\n tempPos1.y = itemPos.y + vectors[first].y * itemRad;\r\n tempPos1.z = itemPos.z + vectors[first].z * itemRad;\r\n const second = first + 1;\r\n tempPos2.x = itemPos.x + vectors[second].x * itemRad;\r\n tempPos2.y = itemPos.y + vectors[second].y * itemRad;\r\n tempPos2.z = itemPos.z + vectors[second].z * itemRad;\r\n this.setSegment(itemIdx, i, tempPos1, tempPos2);\r\n }\r\n }\r\n}\r\nexport default CrossGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst POS_RAD_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\n\r\n/**\r\n * This is a base class for isosurface algorithms.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\nclass IsoSurfaceGeometry extends THREE.BufferGeometry {\r\n constructor(spheresCount, opts) {\r\n super();\r\n\r\n this._opts = opts;\r\n this.zClip = this._opts.zClip;\r\n this._posRad = utils.allocateTyped(Float32Array, spheresCount * POS_RAD_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, spheresCount * COLOR_SIZE);\r\n }\r\n\r\n setItem(chunkIdx, pos, radius) {\r\n const posRad = this._posRad;\r\n let idx = POS_RAD_SIZE * chunkIdx;\r\n posRad[idx++] = pos.x;\r\n posRad[idx++] = pos.y;\r\n posRad[idx++] = pos.z;\r\n posRad[idx] = radius;\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n const colors = this._colors;\r\n let idx = COLOR_SIZE * chunkIdx;\r\n colors[idx++] = tmpColor.r;\r\n colors[idx++] = tmpColor.g;\r\n colors[idx] = tmpColor.b;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n finishUpdate() {\r\n this._build();\r\n }\r\n\r\n setOpacity() {\r\n // not implemented\r\n }\r\n\r\n raycast() {\r\n }\r\n\r\n getSubset() {\r\n return [];\r\n }\r\n}\r\nexport default IsoSurfaceGeometry;\r\n","import utils from '../../utils';\r\n\r\n/**\r\n * Class for marching cube\r\n * Stores 8 points and 8 float values are stored together in linear array\r\n * Int values for has intersection or not - in integer32 linear array\r\n * Int values for bits flags - in integer32 linear array\r\n *\r\n */\r\nclass IsoSurfaceMarchCube {\r\n constructor() {\r\n this.pointsValuesLinear = null;\r\n this.hasIntersection = null;\r\n this.bitsInside = null;\r\n }\r\n\r\n create(numCellsPerSide) {\r\n const vx7000000 = 0x7000000;\r\n const n3 = numCellsPerSide * numCellsPerSide * numCellsPerSide;\r\n if (n3 > vx7000000) {\r\n throw new Error('Too large cube dimension: lead to memory huge uasge');\r\n }\r\n this.pointsValuesLinear = utils.allocateTyped(Float32Array, (2 << (2 + 2)) * n3);\r\n this.hasIntersection = utils.allocateTyped(Int32Array, n3);\r\n this.bitsInside = utils.allocateTyped(Int32Array, n3);\r\n return 0;\r\n }\r\n\r\n destroy() {\r\n this.bitsInside = null;\r\n this.hasIntersection = null;\r\n this.pointsValuesLinear = null;\r\n }\r\n}\r\n\r\nIsoSurfaceMarchCube.prototype.striIndicesMarchCube = [\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1,\r\n 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1,\r\n 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1,\r\n 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1,\r\n 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1,\r\n 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1,\r\n 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1,\r\n 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1,\r\n 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1,\r\n 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1,\r\n 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1,\r\n 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1,\r\n 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1,\r\n 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1,\r\n 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1,\r\n 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1,\r\n 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1,\r\n 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1,\r\n 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1,\r\n 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1,\r\n 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1,\r\n 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1,\r\n 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1,\r\n 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1,\r\n 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1,\r\n 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1,\r\n 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1,\r\n 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1,\r\n 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1,\r\n 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1,\r\n 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1,\r\n 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1,\r\n 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1,\r\n 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1,\r\n 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1,\r\n 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1,\r\n 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1,\r\n 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1,\r\n 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1,\r\n 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1,\r\n 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1,\r\n 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1,\r\n 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1,\r\n 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1,\r\n 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1,\r\n 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1,\r\n 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1,\r\n 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1,\r\n 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1,\r\n 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1,\r\n 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1,\r\n 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1,\r\n 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1,\r\n 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1,\r\n 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1,\r\n 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1,\r\n 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1,\r\n 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1,\r\n 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1,\r\n 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1,\r\n 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1,\r\n 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1,\r\n 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1,\r\n 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1,\r\n 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1,\r\n 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1,\r\n 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1,\r\n 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1,\r\n 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1,\r\n 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1,\r\n 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1,\r\n 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1,\r\n 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1,\r\n 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1,\r\n 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1,\r\n 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1,\r\n 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1,\r\n 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1,\r\n 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1,\r\n 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1,\r\n 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1,\r\n 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1,\r\n 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1,\r\n 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1,\r\n 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1,\r\n 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1,\r\n 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1,\r\n 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1,\r\n 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1,\r\n 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1,\r\n 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1,\r\n 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1,\r\n 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1,\r\n 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1,\r\n 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1,\r\n 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1,\r\n 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1,\r\n 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1,\r\n 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1,\r\n 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1,\r\n 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1,\r\n 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1,\r\n 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1,\r\n 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1,\r\n 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1,\r\n 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1,\r\n 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1,\r\n 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1,\r\n 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n];\r\n\r\nexport default IsoSurfaceMarchCube;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceMarchCube from './IsoSurfaceMarchCube';\r\nimport utils from '../../utils';\r\n\r\nconst edgeTable = [\r\n 0x0, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c,\r\n 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,\r\n 0x190, 0x99, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c,\r\n 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,\r\n 0x230, 0x339, 0x33, 0x13a, 0x636, 0x73f, 0x435, 0x53c,\r\n 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,\r\n 0x3a0, 0x2a9, 0x1a3, 0xaa, 0x7a6, 0x6af, 0x5a5, 0x4ac,\r\n 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,\r\n 0x460, 0x569, 0x663, 0x76a, 0x66, 0x16f, 0x265, 0x36c,\r\n 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,\r\n 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff, 0x3f5, 0x2fc,\r\n 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,\r\n 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55, 0x15c,\r\n 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,\r\n 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc,\r\n 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,\r\n 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc,\r\n 0xcc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,\r\n 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c,\r\n 0x15c, 0x55, 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,\r\n 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc,\r\n 0x2fc, 0x3f5, 0xff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,\r\n 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c,\r\n 0x36c, 0x265, 0x16f, 0x66, 0x76a, 0x663, 0x569, 0x460,\r\n 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac,\r\n 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa, 0x1a3, 0x2a9, 0x3a0,\r\n 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c,\r\n 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33, 0x339, 0x230,\r\n 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c,\r\n 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99, 0x190,\r\n 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c,\r\n 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0];\r\n\r\nfunction _voxelGradientFast(v, point, grad) {\r\n const g = v.getValue(point.x, point.y, point.z);\r\n grad.set(g[0], g[1], g[2]);\r\n}\r\n\r\n// Helper class GridCell\r\nclass GridCell {\r\n constructor() {\r\n this._arrSize = 8;\r\n this.p = new Array(this._arrSize);\r\n this.g = new Array(this._arrSize);\r\n this.val = new Array(this._arrSize);\r\n for (let i = 0; i < this._arrSize; ++i) {\r\n this.p[i] = new THREE.Vector3();\r\n this.g[i] = new THREE.Vector3();\r\n }\r\n this.cubeIndex = 0;\r\n }\r\n}\r\n\r\n// Helper class Triangle\r\nclass Triangle {\r\n constructor() {\r\n this.a = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n\r\n this.b = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n\r\n this.c = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n }\r\n}\r\n\r\nfunction createArray(arrSize) {\r\n const arr = new Array(arrSize);\r\n for (let i = 0; i < arrSize; ++i) {\r\n arr[i] = new THREE.Vector3();\r\n }\r\n\r\n return arr;\r\n}\r\n\r\nclass IsoSurface {\r\n constructor() {\r\n this._numTriangles = 0;\r\n this._numVertices = 0;\r\n this._position = [];\r\n this._normals = [];\r\n this._colors = null;\r\n this._indices = [];\r\n this._volumetricData = null;\r\n this._xAxis = new THREE.Vector3();\r\n this._yAxis = new THREE.Vector3();\r\n this._zAxis = new THREE.Vector3();\r\n this._xDir = new THREE.Vector3();\r\n this._yDir = new THREE.Vector3();\r\n this._zDir = new THREE.Vector3();\r\n }\r\n\r\n _prepareAxesAndDirs() {\r\n const volData = this._volumetricData;\r\n\r\n const cellSize = volData.getCellSize();\r\n\r\n // calculate cell axes\r\n const xAxis = this._xAxis;\r\n const yAxis = this._yAxis;\r\n const zAxis = this._zAxis;\r\n const xDir = this._xDir;\r\n const yDir = this._yDir;\r\n const zDir = this._zDir;\r\n\r\n xAxis.set(cellSize.x, 0, 0);\r\n yAxis.set(0, cellSize.y, 0);\r\n zAxis.set(0, 0, cellSize.z);\r\n\r\n xDir.set(1, 0, 0);\r\n yDir.set(0, 1, 0);\r\n zDir.set(0, 0, 1);\r\n\r\n // flip normals if coordinate system is in the wrong handedness\r\n const tmp = new THREE.Vector3();\r\n tmp.crossVectors(xDir, yDir);\r\n if (tmp.dot(zDir) < 0) {\r\n xDir.negate();\r\n yDir.negate();\r\n zDir.negate();\r\n }\r\n\r\n // check that the grid is in the all-positive octant of the coordinate system\r\n if (xDir.x < 0 || xDir.y < 0 || xDir.z < 0\r\n || yDir.x < 0 || yDir.y < 0 || yDir.z < 0\r\n || zDir.x < 0 || zDir.y < 0 || zDir.z < 0) {\r\n return false;\r\n }\r\n\r\n // check that the grid is axis-aligned\r\n const notZero = (axe) => Math.abs(axe) > Number.EPSILON;\r\n return !(notZero(xAxis.y) || notZero(xAxis.z)\r\n || notZero(yAxis.x) || notZero(yAxis.z)\r\n || notZero(zAxis.x) || notZero(zAxis.y));\r\n }\r\n\r\n _vertexInterp(isoLevel, grid, ind1, ind2, vertex, normal) {\r\n const p1 = grid.p[ind1];\r\n const p2 = grid.p[ind2];\r\n const n1 = grid.g[ind1];\r\n const n2 = grid.g[ind2];\r\n const valP1 = grid.val[ind1];\r\n const valP2 = grid.val[ind2];\r\n const isoDiffP1 = isoLevel - valP1;\r\n const diffValP2P1 = valP2 - valP1;\r\n\r\n let mu = 0.0;\r\n\r\n if (Math.abs(diffValP2P1) > 0.0) {\r\n mu = isoDiffP1 / diffValP2P1;\r\n }\r\n mu = mu > 1.0 ? 1.0 : mu;\r\n vertex.lerpVectors(p1, p2, mu);\r\n normal.lerpVectors(n1, n2, mu);\r\n }\r\n\r\n static _triTable = IsoSurfaceMarchCube.prototype.striIndicesMarchCube;\r\n\r\n static _arrSize = 12;\r\n\r\n static _firstIndices = [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3];\r\n\r\n static _secondIndices = [1, 2, 3, 0, 5, 6, 7, 4, 4, 5, 6, 7];\r\n\r\n static _vertexList = createArray(IsoSurface._arrSize);\r\n\r\n static _normalList = createArray(IsoSurface._arrSize);\r\n\r\n _polygonize(grid, isoLevel, triangles) {\r\n const { cubeIndex } = grid;\r\n let i = 0;\r\n const arrSize = IsoSurface._arrSize;\r\n const firstIndices = IsoSurface._firstIndices;\r\n const secondIndices = IsoSurface._secondIndices;\r\n const vertexList = IsoSurface._vertexList;\r\n const normalList = IsoSurface._normalList;\r\n\r\n for (; i < arrSize; ++i) {\r\n if (edgeTable[cubeIndex] & (1 << i)) {\r\n this._vertexInterp(\r\n isoLevel,\r\n grid,\r\n firstIndices[i],\r\n secondIndices[i],\r\n vertexList[i],\r\n normalList[i],\r\n );\r\n }\r\n }\r\n\r\n let triCount = 0;\r\n const triTblIdx = cubeIndex * 16;\r\n const triTable = IsoSurface._triTable;\r\n\r\n for (i = 0; triTable[triTblIdx + i] !== -1; i += 3) {\r\n triangles[triCount].a.p.copy(vertexList[triTable[triTblIdx + i]]);\r\n triangles[triCount].a.n.copy(normalList[triTable[triTblIdx + i]]);\r\n\r\n triangles[triCount].b.p.copy(vertexList[triTable[triTblIdx + i + 1]]);\r\n triangles[triCount].b.n.copy(normalList[triTable[triTblIdx + i + 1]]);\r\n\r\n triangles[triCount].c.p.copy(vertexList[triTable[triTblIdx + i + 2]]);\r\n triangles[triCount].c.n.copy(normalList[triTable[triTblIdx + i + 2]]);\r\n ++triCount;\r\n }\r\n\r\n return triCount;\r\n }\r\n\r\n _doGridPosNorms(isoValue, step, appendSimple) {\r\n const vol = this._volumetricData;\r\n const volData = this._volumetricData.getData();\r\n const dim = vol.getDimensions();\r\n const xSize = dim[0];\r\n const ySize = dim[1];\r\n const zSize = dim[2];\r\n const stepX = step * vol.getStrideX();\r\n const stepY = step * vol.getStrideY();\r\n const stepZ = step * vol.getStrideZ();\r\n\r\n const gc = new GridCell();\r\n const gcVal = gc.val;\r\n const gcValSize = gc.val.length;\r\n const additions = [\r\n new THREE.Vector3(0, 0, 0), // 0\r\n new THREE.Vector3(step, 0, 0), // 1\r\n new THREE.Vector3(step, step, 0), // 2\r\n new THREE.Vector3(0, step, 0), // 3\r\n new THREE.Vector3(0, 0, step), // 4\r\n new THREE.Vector3(step, 0, step), // 5\r\n new THREE.Vector3(step, step, step), // 6\r\n new THREE.Vector3(0, step, step), // 7\r\n ];\r\n\r\n const tmpTriCount = 5;\r\n const triangles = new Array(tmpTriCount);\r\n for (let j = 0; j < tmpTriCount; ++j) {\r\n triangles[j] = new Triangle();\r\n }\r\n\r\n let appendVertex;\r\n const self = this;\r\n const positions = this._position;\r\n const normals = this._normals;\r\n if (appendSimple) {\r\n // Special case for axis-aligned grid with positive unit vector normals\r\n appendVertex = (function () {\r\n const axis = new THREE.Vector3(self._xAxis.x, self._yAxis.y, self._zAxis.z);\r\n return function (triVertex) {\r\n const vertex = triVertex.p.clone();\r\n vertex.multiply(axis);\r\n positions.push(vertex.add(self._origin));\r\n normals.push(triVertex.n.clone());\r\n };\r\n }());\r\n } else {\r\n appendVertex = (function () {\r\n const posMtx = new THREE.Matrix3();\r\n posMtx.set(\r\n self._xAxis.x,\r\n self._yAxis.x,\r\n self._zAxis.x,\r\n self._xAxis.y,\r\n self._yAxis.y,\r\n self._zAxis.y,\r\n self._xAxis.z,\r\n self._yAxis.z,\r\n self._zAxis.z,\r\n );\r\n const normMtx = new THREE.Matrix3();\r\n normMtx.set(\r\n self._xDir.x,\r\n self._yDir.x,\r\n self._zDir.x,\r\n self._xDir.y,\r\n self._yDir.y,\r\n self._zDir.y,\r\n self._xDir.z,\r\n self._yDir.z,\r\n self._zDir.z,\r\n );\r\n\r\n return function (triVertex) {\r\n positions.push(triVertex.p.clone().applyMatrix3(posMtx).add(self._origin));\r\n normals.push(triVertex.n.clone().applyMatrix3(normMtx));\r\n };\r\n }());\r\n }\r\n const indices = this._indices;\r\n\r\n let globTriCount = 0;\r\n\r\n for (let z = 0; z < (zSize - step); z += step) {\r\n for (let y = 0; y < (ySize - step); y += step) {\r\n let idx = vol.getDirectIdx(0, y, z);\r\n for (let x = 0; x < (xSize - step); x += step, idx += stepX) {\r\n gcVal[0] = volData[idx];\r\n gcVal[1] = volData[idx + stepX];\r\n gcVal[3] = volData[idx + stepY];\r\n gcVal[2] = volData[idx + stepX + stepY];\r\n gcVal[4] = volData[idx + stepZ];\r\n gcVal[5] = volData[idx + stepX + stepZ];\r\n gcVal[7] = volData[idx + stepY + stepZ];\r\n gcVal[6] = volData[idx + stepX + stepY + stepZ];\r\n\r\n // Determine the index into the edge table which\r\n // tells us which vertices are inside of the surface\r\n let cubeIndex = 0;\r\n let i = 0;\r\n for (; i < gcValSize; ++i) {\r\n if (gcVal[i] < isoValue) {\r\n cubeIndex |= (1 << i);\r\n }\r\n }\r\n\r\n if (edgeTable[cubeIndex] === 0) {\r\n continue;\r\n }\r\n\r\n gc.cubeIndex = cubeIndex;\r\n for (i = 0; i < gcValSize; ++i) {\r\n gc.p[i].set(x + additions[i].x, y + additions[i].y, z + additions[i].z);\r\n _voxelGradientFast(this._gradient, gc.p[i], gc.g[i]);\r\n }\r\n\r\n // calculate vertices and facets for this cube,\r\n // calculate normals by interpolating between the negated\r\n // normalized volume gradients for the 8 reference voxels\r\n const triCount = this._polygonize(gc, isoValue, triangles);\r\n globTriCount += triCount;\r\n\r\n // append triangles using different techniques\r\n for (i = 0; i < triCount; ++i) {\r\n indices.push(this._numTriangles * 3);\r\n indices.push(this._numTriangles * 3 + 1);\r\n indices.push(this._numTriangles * 3 + 2);\r\n ++this._numTriangles;\r\n\r\n appendVertex(triangles[i].a);\r\n appendVertex(triangles[i].b);\r\n appendVertex(triangles[i].c);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return globTriCount;\r\n }\r\n\r\n compute(volData, origin, isoValue, step) {\r\n this._volumetricData = volData;\r\n this._origin = origin;\r\n\r\n this._gradient = volData.computeGradient();\r\n\r\n this._doGridPosNorms(isoValue, step, this._prepareAxesAndDirs());\r\n }\r\n\r\n _remapIndices(vertexMap, idcCount) {\r\n const indices = this._indices;\r\n const newIndices = utils.allocateTyped(Uint32Array, idcCount);\r\n for (let i = 0; i < idcCount; ++i) {\r\n indices[i] = vertexMap[indices[i]];\r\n newIndices[i] = indices[i];\r\n }\r\n this._indices = newIndices;\r\n }\r\n\r\n _remapVertices(vertices, normals, count) {\r\n const newPositions = utils.allocateTyped(Float32Array, count * 3);\r\n const newNormals = utils.allocateTyped(Float32Array, count * 3);\r\n for (let i = 0; i < count; ++i) {\r\n const pos = vertices[i];\r\n newPositions[i * 3] = pos.x;\r\n newPositions[i * 3 + 1] = pos.y;\r\n newPositions[i * 3 + 2] = pos.z;\r\n const norm = normals[i].normalize();\r\n newNormals[i * 3] = norm.x;\r\n newNormals[i * 3 + 1] = norm.y;\r\n newNormals[i * 3 + 2] = norm.z;\r\n }\r\n this._position = newPositions;\r\n this._normals = newNormals;\r\n }\r\n\r\n vertexFusion(offset, len) {\r\n const faceVer = this._indices.length;\r\n const vertices = this._position;\r\n const normals = this._normals;\r\n const oldVerCount = vertices.length | 0;\r\n if (faceVer === 0 || oldVerCount === 0) {\r\n return;\r\n }\r\n const vMap = utils.allocateTyped(Uint32Array, oldVerCount);\r\n vMap[0] = 0;\r\n let newVer = 1;\r\n\r\n let i = 1;\r\n for (; i < oldVerCount; ++i) {\r\n const start = newVer - offset < 0 ? 0 : newVer - offset;\r\n const end = start + len > newVer ? newVer : start + len;\r\n let matchedIndex = -1;\r\n\r\n for (let j = start; j < end; ++j) {\r\n if (Math.abs(vertices[i] - vertices[j]) < Number.EPSILON) {\r\n matchedIndex = j;\r\n break;\r\n }\r\n }\r\n\r\n if (matchedIndex !== -1) {\r\n vMap[i] = matchedIndex;\r\n } else {\r\n vertices[newVer].copy(vertices[i]);\r\n normals[newVer].copy(normals[i]);\r\n vMap[i] = newVer;\r\n ++newVer;\r\n }\r\n }\r\n\r\n this._remapIndices(vMap, faceVer);\r\n this._remapVertices(vertices, normals, newVer);\r\n }\r\n\r\n // Assign per-vertex colors from a volumetric texture map (same dimensions as the original volumetric data).\r\n // Along with color dominating atom is determined for each vertex\r\n // and vertices with atom out of \"visible\" subset get filtered out.\r\n // XXX only handles orthogonal volumes currently\r\n setColorVolTex(colorMap, atomMap, atomWeightMap, visibilitySelector) {\r\n let i;\r\n let idx;\r\n const numVerts = this._position.length / 3;\r\n const vertices = this._position;\r\n const origin = this._origin;\r\n const dim = this._volumetricData.getDimensions();\r\n const xs = dim[0] - 1;\r\n const ys = dim[1] - 1;\r\n const zs = dim[2] - 1;\r\n\r\n const colorData = colorMap.getData();\r\n const strideX = colorMap.getStrideX();\r\n const strideY = colorMap.getStrideY();\r\n const strideZ = colorMap.getStrideZ();\r\n\r\n let atomWeightData;\r\n let atomStrideX;\r\n let atomStrideY;\r\n let atomStrideZ;\r\n\r\n if (visibilitySelector !== null) {\r\n atomWeightData = atomWeightMap.getData();\r\n atomStrideX = atomWeightMap.getStrideX();\r\n atomStrideY = atomWeightMap.getStrideY();\r\n atomStrideZ = atomWeightMap.getStrideZ();\r\n }\r\n\r\n const xInv = 1.0 / this._xAxis.x;\r\n const yInv = 1.0 / this._yAxis.y;\r\n const zInv = 1.0 / this._zAxis.z;\r\n\r\n let atomLookup = [];\r\n let atomWeights = [];\r\n const colors = utils.allocateTyped(Float32Array, numVerts * 3);\r\n\r\n function interp(mu, idx1, idx2, c) {\r\n c[0] = (1 - mu) * colorData[idx1] + mu * colorData[idx2];\r\n c[1] = (1 - mu) * colorData[idx1 + 1] + mu * colorData[idx2 + 1];\r\n c[2] = (1 - mu) * colorData[idx1 + 2] + mu * colorData[idx2 + 2];\r\n }\r\n\r\n function collectWeight(ai, coefX, coefY, coefZ) {\r\n const a = atomMap[ai]; // atomWeightMap is a scalar field, so index into atom map should be the same\r\n if (a != null) {\r\n atomLookup[a.index] = a;\r\n const w = coefX * coefY * coefZ * atomWeightData[ai];\r\n if (typeof atomWeights[a.index] === 'undefined') {\r\n atomWeights[a.index] = w;\r\n } else {\r\n atomWeights[a.index] += w;\r\n }\r\n }\r\n }\r\n\r\n const vMap = utils.allocateTyped(Int32Array, numVerts);\r\n let newVerCount = 0;\r\n\r\n for (i = 0; i < numVerts; i++) {\r\n const ind = i * 3;\r\n const vx = (vertices[ind] - origin.x) * xInv;\r\n const vy = (vertices[ind + 1] - origin.y) * yInv;\r\n const vz = (vertices[ind + 2] - origin.z) * zInv;\r\n const x = Math.min(Math.max(vx, 0), xs) | 0;\r\n const y = Math.min(Math.max(vy, 0), ys) | 0;\r\n const z = Math.min(Math.max(vz, 0), zs) | 0;\r\n\r\n const mux = (vx - x);\r\n const muy = (vy - y);\r\n const muz = (vz - z);\r\n\r\n if (visibilitySelector != null) {\r\n // collect atom weights\r\n atomLookup = [];\r\n atomWeights = [];\r\n idx = atomWeightMap.getDirectIdx(x, y, z);\r\n collectWeight(idx, 1 - mux, 1 - muy, 1 - muz);\r\n collectWeight(idx + atomStrideX, mux, 1 - muy, 1 - muz);\r\n collectWeight(idx + atomStrideY, 1 - mux, muy, 1 - muz);\r\n collectWeight(idx + atomStrideX + atomStrideY, mux, muy, 1 - muz);\r\n collectWeight(idx + atomStrideZ, 1 - mux, 1 - muy, muz);\r\n collectWeight(idx + atomStrideX + atomStrideZ, mux, 1 - muy, muz);\r\n collectWeight(idx + atomStrideY + atomStrideZ, 1 - mux, muy, muz);\r\n collectWeight(idx + atomStrideX + atomStrideY + atomStrideZ, mux, muy, muz);\r\n\r\n // find dominant atom\r\n let maxWeight = 0.0;\r\n let dominantIdx = -1;\r\n for (const atomIdx in atomWeights) {\r\n if (atomWeights[atomIdx] > maxWeight) {\r\n dominantIdx = atomIdx;\r\n maxWeight = atomWeights[atomIdx];\r\n }\r\n }\r\n\r\n if (dominantIdx < 0 || !visibilitySelector.includesAtom(atomLookup[dominantIdx])) {\r\n // this vertex doesn't belong to visible subset and will be skipped\r\n vMap[i] = -1;\r\n continue;\r\n }\r\n }\r\n\r\n vMap[i] = newVerCount++;\r\n\r\n // color tri-linear interpolation\r\n const dx = (x < xs) ? strideX : 0;\r\n const dy = (y < ys) ? strideY : 0;\r\n const dz = (z < zs) ? strideZ : 0;\r\n\r\n const c0 = [0, 0, 0];\r\n const c1 = [0, 0, 0];\r\n const c2 = [0, 0, 0];\r\n const c3 = [0, 0, 0];\r\n\r\n idx = colorMap.getDirectIdx(x, y, z);\r\n interp(mux, idx, idx + dx, c0);\r\n interp(mux, idx + dy, idx + dx + dy, c1);\r\n interp(mux, idx + dz, idx + dx + dz, c2);\r\n interp(mux, idx + dy + dz, idx + dx + dy + dz, c3);\r\n\r\n const cz0 = [0, 0, 0];\r\n cz0[0] = (1 - muy) * c0[0] + muy * c1[0];\r\n cz0[1] = (1 - muy) * c0[1] + muy * c1[1];\r\n cz0[2] = (1 - muy) * c0[2] + muy * c1[2];\r\n\r\n const cz1 = [0, 0, 0];\r\n cz1[0] = (1 - muy) * c2[0] + muy * c3[0];\r\n cz1[1] = (1 - muy) * c2[1] + muy * c3[1];\r\n cz1[2] = (1 - muy) * c2[2] + muy * c3[2];\r\n\r\n colors[ind] = (1 - muz) * cz0[0] + muz * cz1[0];\r\n colors[ind + 1] = (1 - muz) * cz0[1] + muz * cz1[1];\r\n colors[ind + 2] = (1 - muz) * cz0[2] + muz * cz1[2];\r\n }\r\n this._colors = colors;\r\n\r\n if (visibilitySelector != null) {\r\n // shift visible vertices towards beginning of array\r\n for (i = 0; i < numVerts; ++i) {\r\n const j = vMap[i];\r\n if (j < 0) {\r\n continue;\r\n }\r\n\r\n // assert: j <= i\r\n this._position[j * 3] = this._position[i * 3];\r\n this._position[j * 3 + 1] = this._position[i * 3 + 1];\r\n this._position[j * 3 + 2] = this._position[i * 3 + 2];\r\n this._normals[j * 3] = this._normals[i * 3];\r\n this._normals[j * 3 + 1] = this._normals[i * 3 + 1];\r\n this._normals[j * 3 + 2] = this._normals[i * 3 + 2];\r\n this._colors[j * 3] = this._colors[i * 3];\r\n this._colors[j * 3 + 1] = this._colors[i * 3 + 1];\r\n this._colors[j * 3 + 2] = this._colors[i * 3 + 2];\r\n }\r\n\r\n // rebuild index list\r\n const numTriangles = this._indices.length / 3;\r\n let newTriCount = 0;\r\n for (i = 0; i < numTriangles; ++i) {\r\n const i0 = vMap[this._indices[3 * i]];\r\n const i1 = vMap[this._indices[3 * i + 1]];\r\n const i2 = vMap[this._indices[3 * i + 2]];\r\n if (i0 >= 0 && i1 >= 0 && i2 >= 0) {\r\n this._indices[3 * newTriCount] = i0;\r\n this._indices[3 * newTriCount + 1] = i1;\r\n this._indices[3 * newTriCount + 2] = i2;\r\n ++newTriCount;\r\n }\r\n }\r\n\r\n // shrink arrays to data size\r\n this._position = new Float32Array(this._position.buffer.slice(0, newVerCount * 3 * 4));\r\n this._normals = new Float32Array(this._normals.buffer.slice(0, newVerCount * 3 * 4));\r\n this._colors = new Float32Array(this._colors.buffer.slice(0, newVerCount * 3 * 4));\r\n this._indices = new Uint32Array(this._indices.buffer.slice(0, newTriCount * 3 * 4));\r\n }\r\n }\r\n\r\n toMesh() {\r\n const geo = new THREE.BufferGeometry();\r\n geo.setIndex(new THREE.BufferAttribute(this._indices, 1));\r\n geo.setAttribute('position', new THREE.BufferAttribute(this._position, 3));\r\n geo.setAttribute('normal', new THREE.BufferAttribute(this._normals, 3));\r\n geo.setAttribute('color', new THREE.BufferAttribute(this._colors, 3));\r\n geo.computeBoundingSphere();\r\n return geo;\r\n }\r\n}\r\nexport default IsoSurface;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceGeometry from './IsoSurfaceGeometry';\r\nimport IsoSurface from './IsoSurface';\r\nimport utils from '../../utils';\r\n\r\n/**\r\n * This is a base class for volumetric maps based isosurface algorithms.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass VolumeSurfaceGeometry extends IsoSurfaceGeometry {\r\n _build() {\r\n const params = this._opts;\r\n this.numVoxels = [128, 128, 128];\r\n this.xAxis = new THREE.Vector3(1.0, 0.0, 0.0);\r\n this.yAxis = new THREE.Vector3(0.0, 1.0, 0.0);\r\n this.zAxis = new THREE.Vector3(0.0, 0.0, 1.0);\r\n\r\n this.origin = new THREE.Vector3(0.0, 0.0, 0.0);\r\n this._visibilitySelector = params.visibilitySelector;\r\n\r\n this._calcSurface(params);\r\n }\r\n\r\n _findMinMax(posRadArray) {\r\n const itemSize = 4;\r\n const itemsCount = posRadArray.length / itemSize;\r\n const maxPosRad = [posRadArray[0], posRadArray[1], posRadArray[2], posRadArray[3]];\r\n const minPosRad = [posRadArray[0], posRadArray[1], posRadArray[2], posRadArray[3]];\r\n for (let i = 1; i < itemsCount; ++i) {\r\n const ind = i * itemSize;\r\n\r\n for (let itemIdx = 0; itemIdx < itemSize; ++itemIdx) {\r\n const tmpVal = posRadArray[ind + itemIdx];\r\n maxPosRad[itemIdx] = Math.max(tmpVal, maxPosRad[itemIdx]);\r\n minPosRad[itemIdx] = Math.min(tmpVal, minPosRad[itemIdx]);\r\n }\r\n }\r\n return { maxPosRad, minPosRad };\r\n }\r\n\r\n _findNumVoxels(posRadArray, params) {\r\n const { numVoxels } = this;\r\n const minMaxValues = this._findMinMax(posRadArray);\r\n const minCoordRad = minMaxValues.minPosRad;\r\n const maxCoordRad = minMaxValues.maxPosRad;\r\n\r\n // minrad\r\n if (minCoordRad[3] > 4.0) {\r\n params.gridSpacing *= minCoordRad[3];\r\n }\r\n\r\n let gridPadding = params.radScale * maxCoordRad[3] * 1.7;\r\n let padRad = gridPadding;\r\n padRad = 0.65 * Math.sqrt(4.0 / 3.0 * Math.PI * padRad * padRad * padRad);\r\n gridPadding = Math.max(gridPadding, padRad);\r\n\r\n let i = 0;\r\n for (; i < 3; ++i) {\r\n minCoordRad[i] -= gridPadding;\r\n maxCoordRad[i] += gridPadding;\r\n }\r\n\r\n for (i = 0; i < 3; ++i) {\r\n numVoxels[i] = Math.ceil((maxCoordRad[i] - minCoordRad[i]) / params.gridSpacing);\r\n }\r\n this.xAxis.x = (numVoxels[0] - 1) * params.gridSpacing;\r\n this.yAxis.y = (numVoxels[1] - 1) * params.gridSpacing;\r\n this.zAxis.z = (numVoxels[2] - 1) * params.gridSpacing;\r\n\r\n [this.origin.x, this.origin.y, this.origin.z] = minCoordRad;\r\n\r\n return { bbox: minMaxValues, dim: numVoxels };\r\n }\r\n\r\n _makeSurface(surface, params) {\r\n const isoSurf = new IsoSurface();\r\n isoSurf.compute(surface.volMap, this.origin, params.isoValue, 1);\r\n isoSurf.vertexFusion(9, 9);// normalization is included\r\n\r\n if (isoSurf._numTriangles > 0) {\r\n isoSurf.setColorVolTex(surface.volTexMap, surface.atomMap, surface.atomWeightMap, this._visibilitySelector);\r\n this.setIndex(new THREE.BufferAttribute(isoSurf._indices, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(isoSurf._position, 3));\r\n this.setAttribute('normal', new THREE.BufferAttribute(isoSurf._normals, 3));\r\n this.setAttribute('color', new THREE.BufferAttribute(isoSurf._colors, 3));\r\n } else { // geometry should have at least empty position attributes to be processed in wireframe mode by three.js\r\n this.setAttribute('position', new THREE.BufferAttribute(utils.allocateTyped(Float32Array, 0), 3));\r\n }\r\n }\r\n\r\n _calcSurface(params) {\r\n const packedArrays = {\r\n posRad: this._posRad,\r\n colors: this._colors,\r\n atoms: this._opts.atoms,\r\n };\r\n\r\n if (packedArrays.posRad.length === 0) {\r\n return;\r\n }\r\n const boundaries = this._findNumVoxels(packedArrays.posRad, params);\r\n\r\n const box = new THREE.Box3(\r\n this.origin,\r\n new THREE.Vector3(this.xAxis.x, this.yAxis.y, this.zAxis.z).add(this.origin),\r\n );\r\n const surface = this._computeSurface(packedArrays, box, boundaries, params);\r\n\r\n this._makeSurface(surface, params);\r\n }\r\n}\r\n\r\nexport default VolumeSurfaceGeometry;\r\n","import VolumeSurfaceGeometry from './VolumeSurfaceGeometry';\r\nimport chem from '../../chem';\r\n\r\nconst { Volume } = chem;\r\n\r\n/**\r\n * This class implements 'quick' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass QuickSurfGeometry extends VolumeSurfaceGeometry {\r\n _computeSurface(packedArrays, box, boundaries, params) {\r\n // beware of shifting this multiple times!\r\n this._shiftByOrigin(packedArrays.posRad);\r\n\r\n const surface = {\r\n volMap: new Volume(Float32Array, this.numVoxels, box),\r\n volTexMap: new Volume(Float32Array, this.numVoxels, box, 3),\r\n };\r\n\r\n if (this._visibilitySelector != null) {\r\n surface.atomMap = [];\r\n surface.atomWeightMap = new Volume(Float32Array, this.numVoxels, box);\r\n }\r\n\r\n this.gaussdensity(surface, packedArrays, null, params);\r\n return surface;\r\n }\r\n\r\n gaussdensity(surface, packedArrays, atomicNum, params) {\r\n const numAtoms = packedArrays.posRad.length / 4;\r\n const { posRad, colors } = packedArrays;\r\n const { numVoxels } = this;\r\n const { radScale, gaussLim, gridSpacing } = params;\r\n const invIsoValue = 1.0 / params.isoValue;\r\n const invGridSpacing = 1.0 / gridSpacing;\r\n const maxVoxelX = numVoxels[0] - 1;\r\n const maxVoxelY = numVoxels[1] - 1;\r\n const maxVoxelZ = numVoxels[2] - 1;\r\n // TODO is densityMap and volTexMap initialized?\r\n\r\n const { volMap, volTexMap } = surface;\r\n const volData = volMap.getData();\r\n const strideX = volMap.getStrideX();\r\n\r\n const volTexData = volTexMap.getData();\r\n const texStrideX = volTexMap.getStrideX();\r\n\r\n let atomWeightData;\r\n if (this._visibilitySelector != null) {\r\n atomWeightData = surface.atomWeightMap.getData();\r\n }\r\n\r\n const { atomMap } = surface;\r\n\r\n for (let i = 0; i < numAtoms; ++i) {\r\n const ind = i * 4;\r\n const scaledRad = posRad[ind + 3] * radScale;\r\n const atomicNumFactor = atomicNum === null ? 1.0 : atomicNum[i];\r\n const radInv = 1 / (2 * scaledRad * scaledRad);\r\n let radLim = gaussLim * scaledRad;\r\n const radLim2 = radLim * radLim;\r\n radLim *= invGridSpacing;\r\n\r\n let tmp = posRad[ind] * invGridSpacing;\r\n const xMin = Math.max((tmp - radLim) | 0, 0);\r\n const xMax = Math.min((tmp + radLim) | 0, maxVoxelX);\r\n tmp = posRad[ind + 1] * invGridSpacing;\r\n const yMin = Math.max((tmp - radLim) | 0, 0);\r\n const yMax = Math.min((tmp + radLim) | 0, maxVoxelY);\r\n tmp = posRad[ind + 2] * invGridSpacing;\r\n const zMin = Math.max((tmp - radLim) | 0, 0);\r\n const zMax = Math.min((tmp + radLim) | 0, maxVoxelZ);\r\n\r\n let dz = zMin * gridSpacing - posRad[ind + 2];\r\n for (let z = zMin; z <= zMax; ++z, dz += gridSpacing) {\r\n let dy = yMin * gridSpacing - posRad[ind + 1];\r\n for (let y = yMin; y <= yMax; ++y, dy += gridSpacing) {\r\n const dy2dz2 = dy * dy + dz * dz;\r\n\r\n if (dy2dz2 >= radLim2) {\r\n continue;\r\n }\r\n\r\n let addr = volMap.getDirectIdx(xMin, y, z);\r\n let texAddr = volTexMap.getDirectIdx(xMin, y, z);\r\n let dx = xMin * gridSpacing - posRad[ind];\r\n for (let x = xMin; x <= xMax; ++x, dx += gridSpacing, addr += strideX, texAddr += texStrideX) {\r\n const r2 = dx * dx + dy2dz2;\r\n const expVal = -r2 * radInv;\r\n\r\n let density = Math.exp(expVal) * atomicNumFactor;\r\n\r\n // store most relevant atom (with highest density)\r\n if (this._visibilitySelector != null\r\n && density > atomWeightData[addr]) { // NOSONAR\r\n atomWeightData[addr] = density;\r\n // we use same index into atom map and atomWeightMap\r\n atomMap[addr] = packedArrays.atoms[i];\r\n }\r\n\r\n volData[addr] += density;\r\n\r\n // TODO check for volTexMap routine?\r\n density *= invIsoValue;\r\n const colInd = i * 3;\r\n volTexData[texAddr] += density * colors[colInd];\r\n volTexData[texAddr + 1] += density * colors[colInd + 1];\r\n volTexData[texAddr + 2] += density * colors[colInd + 2];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _shiftByOrigin(posRadArray) {\r\n const originX = this.origin.x;\r\n const originY = this.origin.y;\r\n const originZ = this.origin.z;\r\n\r\n const itemSize = 4;\r\n const itemsCount = posRadArray.length / itemSize;\r\n for (let i = 0; i < itemsCount; ++i) {\r\n const ind = i * itemSize;\r\n\r\n posRadArray[ind] -= originX;\r\n posRadArray[ind + 1] -= originY;\r\n posRadArray[ind + 2] -= originZ;\r\n }\r\n }\r\n}\r\n\r\nexport default QuickSurfGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\n/**\r\n * Modifed from SpatialHash\r\n *\r\n * Main differences are:\r\n * - Optimized grid size to ensure we only ever need to look +/-1 cell\r\n * - Aware of atomic radii and will only output atoms within rAtom + rExtra\r\n * (see withinRadii method)\r\n *\r\n * (Uses rounding rather than bitshifting as consequence of arbitrary grid size)\r\n * @class\r\n * @param {Float32Array} posRad - x, y, z coordinates and radiuses\r\n * @param {Float32Array} min - xyz min coordinates\r\n * @param {Float32Array} max - xyz max coordinates\r\n * @param {number} maxDistance - max distance\r\n */\r\nfunction AVHash(posRad, min, max, maxDistance) {\r\n const itemSize = 4;\r\n const nAtoms = posRad.length / itemSize;\r\n\r\n const minX = min[0];\r\n const minY = min[1];\r\n const minZ = min[2];\r\n\r\n const maxX = max[0];\r\n const maxY = max[1];\r\n const maxZ = max[2];\r\n\r\n function hashFunc(w, minW) {\r\n return Math.floor((w - minW) / maxDistance);\r\n }\r\n\r\n const iDim = hashFunc(maxX, minX) + 1;\r\n const jDim = hashFunc(maxY, minY) + 1;\r\n const kDim = hashFunc(maxZ, minZ) + 1;\r\n\r\n const nCells = iDim * jDim * kDim;\r\n\r\n const jkDim = jDim * kDim;\r\n\r\n /* Get cellID for cartesian x,y,z */\r\n const cellID = function (x, y, z) {\r\n return (((hashFunc(x, minX) * jDim) + hashFunc(y, minY)) * kDim) + hashFunc(z, minZ);\r\n };\r\n\r\n /* Initial building, could probably be optimized further */\r\n const preHash = [];\r\n let i;\r\n let cid;\r\n for (i = 0; i < nAtoms; i++) {\r\n const iIdx = itemSize * i;\r\n cid = cellID(posRad[iIdx], posRad[iIdx + 1], posRad[iIdx + 2]);\r\n\r\n if (preHash[cid] === undefined) {\r\n preHash[cid] = [i];\r\n } else {\r\n preHash[cid].push(i);\r\n }\r\n }\r\n\r\n const cellOffsets = utils.allocateTyped(Uint32Array, nCells);\r\n const cellLengths = utils.allocateTyped(Uint16Array, nCells);\r\n const data = utils.allocateTyped(Uint32Array, nAtoms);\r\n\r\n let offset = 0;\r\n let maxCellLength = 0;\r\n let j;\r\n for (i = 0; i < nCells; i++) {\r\n const start = cellOffsets[i] = offset;\r\n\r\n const subArray = preHash[i];\r\n\r\n if (subArray !== undefined) {\r\n for (j = 0; j < subArray.length; j++) {\r\n data[offset] = subArray[j];\r\n offset++;\r\n }\r\n }\r\n\r\n const cellLength = offset - start;\r\n cellLengths[i] = cellLength;\r\n\r\n if (cellLength > maxCellLength) {\r\n maxCellLength = cellLength;\r\n }\r\n }\r\n\r\n // Maximum number of neighbours we could ever produce (27 adjacent cells of equal population)\r\n this.neighbourListLength = (27 * maxCellLength) + 1;\r\n\r\n /**\r\n * Populate the supplied out array with atom indices that are within rAtom + rExtra\r\n * of x,y,z\r\n *\r\n * -1 in out array indicates the end of the list\r\n *\r\n * @param {number} x - x coordinate\r\n * @param {number} y - y coordinate\r\n * @param {number} z - z coordinate\r\n * @param {number} rExtra - additional radius\r\n * @param {Float32Array} out - pre-allocated output array\r\n * @return {undefined}\r\n */\r\n this.withinRadii = function (x, y, z, rExtra, out) {\r\n let outIdx = 0;\r\n\r\n const nearI = hashFunc(x, minX);\r\n const nearJ = hashFunc(y, minY);\r\n const nearK = hashFunc(z, minZ);\r\n\r\n const loI = Math.max(0, nearI - 1);\r\n const loJ = Math.max(0, nearJ - 1);\r\n const loK = Math.max(0, nearK - 1);\r\n\r\n const hiI = Math.min(iDim - 1, nearI + 1);\r\n const hiJ = Math.min(jDim - 1, nearJ + 1);\r\n const hiK = Math.min(kDim - 1, nearK + 1);\r\n\r\n for (i = loI; i <= hiI; ++i) {\r\n const iOffset = i * jkDim;\r\n\r\n for (j = loJ; j <= hiJ; ++j) {\r\n const jOffset = j * kDim;\r\n\r\n for (let k = loK; k <= hiK; ++k) {\r\n cid = iOffset + jOffset + k;\r\n\r\n const cellStart = cellOffsets[cid];\r\n const cellEnd = cellStart + cellLengths[cid];\r\n\r\n for (let dataIndex = cellStart; dataIndex < cellEnd; dataIndex++) {\r\n const atomIndex = data[dataIndex];\r\n const baseIndex = itemSize * atomIndex;\r\n const dx = posRad[baseIndex] - x;\r\n const dy = posRad[baseIndex + 1] - y;\r\n const dz = posRad[baseIndex + 2] - z;\r\n const rSum = posRad[baseIndex + 3] + rExtra;\r\n\r\n if ((dx * dx + dy * dy + dz * dz) <= (rSum * rSum)) {\r\n out[outIdx++] = data[dataIndex];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // Add terminator\r\n out[outIdx] = -1;\r\n };\r\n}\r\nfunction ContactSurface(packedArrays, boundaries, params, _indexList) {\r\n // Field generation method adapted from AstexViewer (Mike Hartshorn)\r\n // by Fred Ludlow.\r\n // Other parts based heavily on NGL (Alexander Rose) EDT Surface class\r\n //\r\n // Should work as a drop-in alternative to EDTSurface (though some of\r\n // the EDT paramters are not relevant in this method).\r\n\r\n const itemSize = 4;\r\n const { posRad, colors, atoms } = packedArrays;\r\n const nAtoms = posRad.length / itemSize;\r\n\r\n const { bbox } = boundaries;\r\n\r\n const min = bbox.minPosRad;\r\n const max = bbox.maxPosRad;\r\n\r\n let r2; // Atom positions, expanded radii (squared)\r\n let maxRadius;\r\n\r\n // Parameters\r\n let probeRadius;\r\n let scaleFactor;\r\n let probePositions;\r\n\r\n // Cache last value for obscured test\r\n let lastClip = -1;\r\n\r\n // Grid params\r\n let dim;\r\n let grid;\r\n let volTex;\r\n let weights;\r\n let weightsMap = null;\r\n let atomMap = null;\r\n let visibilitySelector = null;\r\n\r\n // grid indices -> xyz coords\r\n let gridx;\r\n let gridy;\r\n let gridz;\r\n\r\n // Lookup tables:\r\n let sinTable;\r\n let cosTable;\r\n\r\n // Spatial Hash\r\n let hash;\r\n\r\n // Neighbour array to be filled by hash\r\n let neighbours;\r\n\r\n // Vectors for Torus Projection\r\n const mid = new THREE.Vector3(0.0, 0.0, 0.0);\r\n const n1 = new THREE.Vector3(0.0, 0.0, 0.0);\r\n const n2 = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n let ngTorus;\r\n\r\n function uniformArray(TypeName, n, a) {\r\n const array = utils.allocateTyped(TypeName, n);\r\n for (let innI = 0; innI < n; ++innI) {\r\n array[innI] = a;\r\n }\r\n\r\n return array;\r\n }\r\n\r\n function fillGridDim(a, start, step) {\r\n for (let innI = 0; innI < a.length; innI++) {\r\n a[innI] = start + (step * innI);\r\n }\r\n }\r\n\r\n function initializeGrid() {\r\n ({ scaleFactor } = params);\r\n ({ dim } = boundaries);\r\n\r\n ngTorus = Math.min(5, 2 + Math.floor(probeRadius * scaleFactor));\r\n\r\n const gridSize = dim[0] * dim[1] * dim[2];\r\n grid = uniformArray(Float32Array, gridSize, -1001.0);\r\n volTex = utils.allocateTyped(Float32Array, gridSize * 3);\r\n weights = utils.allocateTyped(Float32Array, gridSize);\r\n if (visibilitySelector) {\r\n weightsMap = utils.allocateTyped(Float32Array, gridSize);\r\n atomMap = [];\r\n }\r\n\r\n gridx = utils.allocateTyped(Float32Array, dim[0]);\r\n gridy = utils.allocateTyped(Float32Array, dim[1]);\r\n gridz = utils.allocateTyped(Float32Array, dim[2]);\r\n\r\n fillGridDim(gridx, min[0], 1 / scaleFactor);\r\n fillGridDim(gridy, min[1], 1 / scaleFactor);\r\n fillGridDim(gridz, min[2], 1 / scaleFactor);\r\n }\r\n\r\n function initializeAngleTables() {\r\n let theta = 0.0;\r\n const step = 2 * Math.PI / probePositions;\r\n\r\n cosTable = utils.allocateTyped(Float32Array, probePositions);\r\n sinTable = utils.allocateTyped(Float32Array, probePositions);\r\n for (let innI = 0; innI < probePositions; innI++) {\r\n cosTable[innI] = Math.cos(theta);\r\n sinTable[innI] = Math.sin(theta);\r\n theta += step;\r\n }\r\n }\r\n\r\n function initializeHash() {\r\n hash = new AVHash(posRad, min, max, 2.01 * maxRadius);\r\n neighbours = new Int32Array(hash.neighbourListLength);\r\n }\r\n\r\n function init() {\r\n ({\r\n probeRadius,\r\n scaleFactor,\r\n probePositions,\r\n visibilitySelector,\r\n } = params);\r\n r2 = utils.allocateTyped(Float32Array, nAtoms);\r\n maxRadius = 0;\r\n for (let innI = 0; innI < nAtoms; ++innI) {\r\n const rExt = posRad[innI * itemSize + 3] += probeRadius;\r\n if (rExt > maxRadius) {\r\n maxRadius = rExt;\r\n }\r\n r2[innI] = rExt * rExt;\r\n }\r\n\r\n initializeGrid();\r\n initializeAngleTables();\r\n initializeHash();\r\n\r\n lastClip = -1;\r\n }\r\n\r\n function singleAtomObscures(ai, innX, innY, innZ) {\r\n const innCI = itemSize * ai;\r\n const ra2 = r2[ai];\r\n const dx = posRad[innCI] - innX;\r\n const dy = posRad[innCI + 1] - innY;\r\n const dz = posRad[innCI + 2] - innZ;\r\n const d2 = dx * dx + dy * dy + dz * dz;\r\n\r\n return d2 < ra2;\r\n }\r\n\r\n function obscured(innX, innY, innZ, a, b) {\r\n // Is the point at x,y,z obscured by any of the atoms\r\n // specifeid by indices in neighbours. Ignore indices\r\n // a and b (these are the relevant atoms in projectPoints/Torii)\r\n\r\n // Cache the last clipped atom (as very often the same one in\r\n // subsequent calls)\r\n let ai;\r\n\r\n if (lastClip !== -1) {\r\n ai = lastClip;\r\n if (ai !== a && ai !== b && singleAtomObscures(ai, innX, innY, innZ)) {\r\n return ai;\r\n }\r\n lastClip = -1;\r\n }\r\n\r\n let ni = 0;\r\n ai = neighbours[ni];\r\n while (ai >= 0) {\r\n if (ai !== a && ai !== b && singleAtomObscures(ai, innX, innY, innZ)) {\r\n lastClip = ai;\r\n return ai;\r\n }\r\n ai = neighbours[++ni];\r\n }\r\n\r\n lastClip = -1;\r\n\r\n return -1;\r\n }\r\n\r\n function projectPoints() {\r\n // For each atom:\r\n // Iterate over a subsection of the grid, for each point:\r\n // If current value < 0.0, unvisited, set positive\r\n //\r\n // In any case: Project this point onto surface of the atomic sphere\r\n // If this projected point is not obscured by any other atom\r\n // Calcualte delta distance and set grid value to minimum of\r\n // itself and delta\r\n\r\n // Should we alias frequently accessed closure constiables??\r\n // Assume JS engine capable of optimizing this\r\n // anyway...\r\n const maxRad = 4.0;\r\n const sigma = (maxRad) / 3;\r\n const sigma2Inv = 1 / (2 * sigma * sigma);\r\n\r\n for (let innI = 0; innI < nAtoms; innI++) {\r\n const innCI = itemSize * innI;\r\n const ax = posRad[innCI];\r\n const ay = posRad[innCI + 1];\r\n const az = posRad[innCI + 2];\r\n const ar = posRad[innCI + 3];\r\n const ar2 = r2[innI];\r\n\r\n hash.withinRadii(ax, ay, az, ar, neighbours);\r\n\r\n // Number of grid points, round this up...\r\n const ng = Math.ceil(ar * scaleFactor);\r\n\r\n // Center of the atom, mapped to grid points (take floor)\r\n const iax = Math.floor(scaleFactor * (ax - min[0]));\r\n const iay = Math.floor(scaleFactor * (ay - min[1]));\r\n const iaz = Math.floor(scaleFactor * (az - min[2]));\r\n\r\n // Extents of grid to consider for this atom\r\n const minx = Math.max(0, iax - ng);\r\n const miny = Math.max(0, iay - ng);\r\n const minz = Math.max(0, iaz - ng);\r\n\r\n // Add two to these points:\r\n // - iax are floor'd values so this ensures coverage\r\n // - these are loop limits (exclusive)\r\n const maxx = Math.min(dim[0], iax + ng + 2);\r\n const maxy = Math.min(dim[1], iay + ng + 2);\r\n const maxz = Math.min(dim[2], iaz + ng + 2);\r\n\r\n const colIdx = innI * 3;\r\n const cr = colors[colIdx];\r\n const cg = colors[colIdx + 1];\r\n const cb = colors[colIdx + 2];\r\n\r\n for (let iz = minz; iz < maxz; iz++) {\r\n const dz = gridz[iz] - az;\r\n const zOffset = dim[1] * dim[0] * iz;\r\n\r\n for (let iy = miny; iy < maxy; iy++) {\r\n const dy = gridy[iy] - ay;\r\n const dzy2 = dz * dz + dy * dy;\r\n const zyOffset = zOffset + dim[0] * iy;\r\n\r\n for (let ix = minx; ix < maxx; ix++) {\r\n const idx = ix + zyOffset;\r\n const dx = gridx[ix] - ax;\r\n const d2 = dzy2 + dx * dx;\r\n\r\n if (d2 < ar2) {\r\n const w = Math.exp(-d2 * sigma2Inv);\r\n const cIdx = idx * 3;\r\n volTex[cIdx] += cr * w;\r\n volTex[cIdx + 1] += cg * w;\r\n volTex[cIdx + 2] += cb * w;\r\n weights[idx] += w;\r\n if (visibilitySelector !== null && w > weightsMap[idx]) {\r\n weightsMap[idx] = w;\r\n atomMap[idx] = atoms[innI];\r\n }\r\n\r\n if (grid[idx] < 0.0) {\r\n // Unvisited, make positive\r\n grid[idx] = -grid[idx];\r\n }\r\n // Project on to the surface of the sphere\r\n // sp is the projected point ( dx, dy, dz ) * ( ra / d )\r\n const d = Math.sqrt(d2);\r\n const ap = ar / d;\r\n let spx = dx * ap;\r\n let spy = dy * ap;\r\n let spz = dz * ap;\r\n\r\n spx += ax;\r\n spy += ay;\r\n spz += az;\r\n\r\n if (obscured(spx, spy, spz, innI, -1) === -1) {\r\n const dd = ar - d;\r\n if (dd < grid[idx]) {\r\n grid[idx] = dd;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function normalToLine(out, p) {\r\n out.x = out.y = out.z = 1.0;\r\n if (p.x !== 0) {\r\n out.x = (p.y + p.z) / -p.x;\r\n } else if (p.y !== 0) {\r\n out.y = (p.x + p.z) / -p.y;\r\n } else if (p.z !== 0) {\r\n out.z = (p.x + p.y) / -p.z;\r\n }\r\n return out;\r\n }\r\n\r\n function projectTorus(a, b) {\r\n const aIdx = itemSize * a;\r\n const bIdx = itemSize * b;\r\n const xa = posRad[aIdx];\r\n const ya = posRad[aIdx + 1];\r\n const za = posRad[aIdx + 2];\r\n const r1 = posRad[aIdx + 3];\r\n let dx = mid.x = posRad[bIdx] - xa;\r\n let dy = mid.y = posRad[bIdx + 1] - ya;\r\n let dz = mid.z = posRad[bIdx + 2] - za;\r\n const innR2 = posRad[bIdx + 3];\r\n let d2 = dx * dx + dy * dy + dz * dz;\r\n\r\n // This check now redundant as already done in AVHash.withinRadii\r\n // if( d2 > (( r1 + r2 ) * ( r1 + r2 )) ){ return; }\r\n\r\n const d = Math.sqrt(d2);\r\n\r\n // Find angle between a->b vector and the circle\r\n // of their intersection by cosine rule\r\n const cosA = (r1 * r1 + d * d - innR2 * innR2) / (2.0 * r1 * d);\r\n\r\n // distance along a->b at intersection\r\n const dmp = r1 * cosA;\r\n\r\n mid.normalize();\r\n\r\n // Create normal to line\r\n normalToLine(n1, mid);\r\n n1.normalize();\r\n\r\n // Cross together for second normal vector\r\n n2.crossVectors(mid, n1);\r\n n2.normalize();\r\n\r\n // r is radius of circle of intersection\r\n const rInt = Math.sqrt(r1 * r1 - dmp * dmp);\r\n\r\n n1.multiplyScalar(rInt);\r\n n2.multiplyScalar(rInt);\r\n mid.multiplyScalar(dmp);\r\n\r\n mid.x += xa;\r\n mid.y += ya;\r\n mid.z += za;\r\n\r\n lastClip = -1;\r\n\r\n const ng = ngTorus;\r\n\r\n for (let innI = 0; innI < probePositions; innI++) {\r\n const cost = cosTable[innI];\r\n const sint = sinTable[innI];\r\n\r\n const px = mid.x + cost * n1.x + sint * n2.x;\r\n const py = mid.y + cost * n1.y + sint * n2.y;\r\n const pz = mid.z + cost * n1.z + sint * n2.z;\r\n\r\n if (obscured(px, py, pz, a, b) === -1) {\r\n // As above, iterate over our grid...\r\n // px, py, pz in grid coords\r\n const iax = Math.floor(scaleFactor * (px - min[0]));\r\n const iay = Math.floor(scaleFactor * (py - min[1]));\r\n const iaz = Math.floor(scaleFactor * (pz - min[2]));\r\n\r\n const minx = Math.max(0, iax - ng);\r\n const miny = Math.max(0, iay - ng);\r\n const minz = Math.max(0, iaz - ng);\r\n\r\n const maxx = Math.min(dim[0], iax + ng + 2);\r\n const maxy = Math.min(dim[1], iay + ng + 2);\r\n const maxz = Math.min(dim[2], iaz + ng + 2);\r\n\r\n for (let iz = minz; iz < maxz; iz++) {\r\n dz = pz - gridz[iz];\r\n const zOffset = dim[1] * dim[0] * iz;\r\n for (let iy = miny; iy < maxy; iy++) {\r\n dy = py - gridy[iy];\r\n const dzy2 = dz * dz + dy * dy;\r\n const zyOffset = zOffset + dim[0] * iy;\r\n for (let ix = minx; ix < maxx; ix++) {\r\n dx = px - gridx[ix];\r\n d2 = dzy2 + dx * dx;\r\n const idx = ix + zyOffset;\r\n const current = grid[idx];\r\n\r\n if (current > 0.0 && d2 < (current * current)) {\r\n grid[idx] = Math.sqrt(d2);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function projectTorii() {\r\n for (let innI = 0; innI < nAtoms; innI++) {\r\n const innIdx = itemSize * innI;\r\n hash.withinRadii(\r\n posRad[innIdx],\r\n posRad[innIdx + 1],\r\n posRad[innIdx + 2],\r\n posRad[innIdx + 3],\r\n neighbours,\r\n );\r\n let ia = 0;\r\n let ni = neighbours[ia];\r\n while (ni >= 0) {\r\n if (innI < ni) {\r\n projectTorus(innI, ni);\r\n }\r\n ni = neighbours[++ia];\r\n }\r\n }\r\n }\r\n\r\n function fixNegatives() {\r\n for (let innI = 0, n = grid.length; innI < n; innI++) {\r\n if (grid[innI] < 0) grid[innI] = 0;\r\n let w = weights[innI];\r\n if (w > 0) {\r\n w = 1 / w;\r\n const innInnI = innI * 3;\r\n volTex[innInnI] *= w;\r\n volTex[innInnI + 1] *= w;\r\n volTex[innInnI + 2] *= w;\r\n }\r\n }\r\n }\r\n\r\n function getVolume() {\r\n // Basic steps are:\r\n // 1) Initialize\r\n // 2) Project points\r\n // 3) Project torii\r\n console.time('ContactSurface.getVolume');\r\n\r\n console.time('ContactSurface.init');\r\n init();\r\n console.timeEnd('ContactSurface.init');\r\n\r\n console.time('ContactSurface.projectPoints');\r\n projectPoints();\r\n console.timeEnd('ContactSurface.projectPoints');\r\n\r\n console.time('ContactSurface.projectTorii');\r\n projectTorii();\r\n console.timeEnd('ContactSurface.projectTorii');\r\n fixNegatives();\r\n console.timeEnd('ContactSurface.getVolume');\r\n }\r\n\r\n this.build = function () {\r\n // type and cutoff left in for compatibility with EDTSurface.getSurface\r\n // function signature\r\n getVolume();\r\n this.volTexMap = volTex;\r\n this.weightsMap = weightsMap;\r\n this.atomMap = atomMap;\r\n this.volMap = grid;\r\n };\r\n}\r\nexport default ContactSurface;\r\n","import VolumeSurfaceGeometry from './VolumeSurfaceGeometry';\r\nimport ContactSurface from './ContactSurface';\r\nimport chem from '../../chem';\r\n\r\nconst { Volume } = chem;\r\n\r\n/**\r\n * This class implements 'contact' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass ContactSurfaceGeometry extends VolumeSurfaceGeometry {\r\n _computeSurface(packedArrays, box, boundaries, params) {\r\n const contactSurface = new ContactSurface(packedArrays, boundaries, params);\r\n contactSurface.build();\r\n\r\n const surface = {\r\n volMap: new Volume(Float32Array, this.numVoxels, box, 1, contactSurface.volMap),\r\n volTexMap: new Volume(Float32Array, this.numVoxels, box, 3, contactSurface.volTexMap),\r\n atomMap: contactSurface.atomMap,\r\n atomWeightMap: new Volume(Float32Array, this.numVoxels, box, 1, contactSurface.weightsMap),\r\n };\r\n return surface;\r\n }\r\n}\r\n\r\nexport default ContactSurfaceGeometry;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Class for colored atom. Need for atom structure clusterization\r\n *\r\n * @param {Vector3} vCenter Center of atom\r\n * @param {number} radiusAt Radius of atom\r\n */\r\nclass IsoSurfaceAtomColored {\r\n constructor(vCenter, radiusAt) {\r\n this.coord = new THREE.Vector3();\r\n this.coord.copy(vCenter);\r\n this.radius = radiusAt;\r\n this.colorX = 0.99999;\r\n this.colorY = 0.0;\r\n this.colorZ = 0.0;\r\n this.atomType = 0;\r\n this.srcAtom = null;\r\n }\r\n}\r\nexport default IsoSurfaceAtomColored;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\n// suppress some JSHint warnings\r\n/* jshint bitwise: false */\r\n\r\n/**\r\n * Build normals for isosurface, using atoms information\r\n *\r\n * @param {number} numAtoms - Number of atoms in molecule\r\n * @param {Element} atoms - Array of atoms\r\n * @param {Vector3} vBoxMin - Bounding box min\r\n * @param {Vector3} vBoxMax - Bounding box max\r\n * @param {number} probeRadius - Normals for output\r\n *\r\n */\r\nclass IsosurfaceBuildNormals {\r\n constructor(numAtoms, atoms, vBoxMin, vBoxMax, probeRadius) {\r\n this._numAtoms = numAtoms;\r\n this._atoms = atoms;\r\n this._vBoxMin = new THREE.Vector3();\r\n this._vBoxMax = new THREE.Vector3();\r\n this._vBoxMin.copy(vBoxMin);\r\n this._vBoxMax.copy(vBoxMax);\r\n this._probeRadius = probeRadius;\r\n\r\n this._atomsList = null;\r\n this._voxelList = null;\r\n }\r\n\r\n createVoxels() {\r\n let numAtomsRefs;\r\n let rad;\r\n const ATOM_VOXEL_REF_SCALE = 4.5;\r\n\r\n const numAtoms = this._numAtoms | 0;\r\n const atoms = this._atoms;\r\n const dx = this._vBoxMax.x - this._vBoxMin.x;\r\n const dy = this._vBoxMax.y - this._vBoxMin.y;\r\n const dz = this._vBoxMax.z - this._vBoxMin.z;\r\n let w = (dx < dy) ? dx : dy;\r\n w = (dz < w) ? dz : w;\r\n let maxRad = 0.0;\r\n let aveRad = 0.0;\r\n\r\n let i;\r\n for (i = 0; i < numAtoms; i++) {\r\n rad = (atoms[i].radius + this._probeRadius) * 2.0;\r\n maxRad = (rad > maxRad) ? rad : maxRad;\r\n aveRad += rad;\r\n }\r\n let numCells = Math.floor(w / maxRad);\r\n if (numCells < 2) {\r\n numCells = 2;\r\n }\r\n aveRad /= numAtoms;\r\n\r\n this._numCells = numCells;\r\n this._aveRad = aveRad;\r\n this._maxRad = maxRad;\r\n\r\n const side = numCells;\r\n const side2 = numCells * numCells;\r\n const side3 = numCells * numCells * numCells;\r\n\r\n const xScale = this._xScale = 1.0 / (this._vBoxMax.x - this._vBoxMin.x);\r\n const yScale = this._yScale = 1.0 / (this._vBoxMax.y - this._vBoxMin.y);\r\n const zScale = this._zScale = 1.0 / (this._vBoxMax.z - this._vBoxMin.z);\r\n\r\n // estimate number of individual atom refs in each voxel list\r\n let maxAtomsRefs = 0;\r\n\r\n const xNumVoxMult = xScale * numCells;\r\n const yNumVoxMult = yScale * numCells;\r\n const zNumVoxMult = zScale * numCells;\r\n\r\n for (i = 0; i < numAtoms; i++) {\r\n const radAffect = (atoms[i].radius + this._probeRadius) * ATOM_VOXEL_REF_SCALE;\r\n const diaAffect = radAffect * 2.0;\r\n let numVoxX = Math.floor(xNumVoxMult * diaAffect + 0.8);\r\n let numVoxY = Math.floor(yNumVoxMult * diaAffect + 0.8);\r\n let numVoxZ = Math.floor(zNumVoxMult * diaAffect + 0.8);\r\n // avoid case numVox? == 0\r\n // also use loop i <=\r\n numVoxX++;\r\n numVoxY++;\r\n numVoxZ++;\r\n maxAtomsRefs += numVoxX * numVoxY * numVoxZ;\r\n } // for (i)\r\n // maxAtomsRefs = numAtoms * MAX_ATOMS_IN_SINGLE_VOXEL;\r\n\r\n this._voxelList = utils.allocateTyped(Int32Array, side3);\r\n const atomsList = [];\r\n atomsList.length = maxAtomsRefs;\r\n if ((this._voxelList === null) || (atomsList === null)) {\r\n return 0 - 1;\r\n }\r\n // init voxel list\r\n for (i = 0; i < side3; i++) {\r\n this._voxelList[i] = -1;\r\n }\r\n numAtomsRefs = 0;\r\n\r\n // create voxel lists\r\n for (i = 0; i < numAtoms; i++) {\r\n // use multiplier 4 to locate this atom in different voxels\r\n rad = (atoms[i].radius + this._probeRadius) * ATOM_VOXEL_REF_SCALE;\r\n let xIndMin = Math.floor((atoms[i].coord.x - this._vBoxMin.x - rad) * numCells * xScale);\r\n let yIndMin = Math.floor((atoms[i].coord.y - this._vBoxMin.y - rad) * numCells * yScale);\r\n let zIndMin = Math.floor((atoms[i].coord.z - this._vBoxMin.z - rad) * numCells * zScale);\r\n let xIndMax = Math.floor((atoms[i].coord.x - this._vBoxMin.x + rad) * numCells * xScale);\r\n let yIndMax = Math.floor((atoms[i].coord.y - this._vBoxMin.y + rad) * numCells * yScale);\r\n let zIndMax = Math.floor((atoms[i].coord.z - this._vBoxMin.z + rad) * numCells * zScale);\r\n\r\n xIndMin = (xIndMin >= 0) ? xIndMin : 0;\r\n yIndMin = (yIndMin >= 0) ? yIndMin : 0;\r\n zIndMin = (zIndMin >= 0) ? zIndMin : 0;\r\n\r\n xIndMax = (xIndMax < numCells) ? xIndMax : (numCells - 1);\r\n yIndMax = (yIndMax < numCells) ? yIndMax : (numCells - 1);\r\n zIndMax = (zIndMax < numCells) ? zIndMax : (numCells - 1);\r\n\r\n for (let z = zIndMin; z <= zIndMax; z++) {\r\n for (let y = yIndMin; y <= yIndMax; y++) {\r\n for (let x = xIndMin; x <= xIndMax; x++) {\r\n // add atom with index \"i\" to this voxel list\r\n const indVoxel = x + y * side + z * side2;\r\n // assert indVoxel >= 0\r\n // assert indVoxel < side3\r\n\r\n // add first\r\n if (this._voxelList[indVoxel] < 0) {\r\n atomsList[numAtomsRefs * 2 + 0] = i;\r\n atomsList[numAtomsRefs * 2 + 1] = 0 - 1;\r\n this._voxelList[indVoxel] = numAtomsRefs;\r\n numAtomsRefs++;\r\n // assert numAtomsRefs < maxAtomsRefs - 1\r\n continue;\r\n }\r\n // insert into head of list\r\n const indexNext = this._voxelList[indVoxel];\r\n this._voxelList[indVoxel] = numAtomsRefs;\r\n atomsList[numAtomsRefs * 2 + 0] = i;\r\n atomsList[numAtomsRefs * 2 + 1] = indexNext;\r\n numAtomsRefs++;\r\n } // for (x)\r\n } // for (y)\r\n } // for (z)\r\n } // for (i)\r\n\r\n // convert Array to Int32Array\r\n this._atomsList = Int32Array.from(atomsList);\r\n\r\n return 0;\r\n }\r\n\r\n destroyVoxels() {\r\n this._atomsList = null;\r\n this._voxelList = null;\r\n\r\n this._atoms = null;\r\n this._vertices = null;\r\n this._vBoxMin = null;\r\n this._vBoxMax = null;\r\n }\r\n\r\n /**\r\n * Enumerate all atoms affecting specified point\r\n *\r\n * @param {Vector3} point - point in 3D\r\n * @param {func(atom)} process - function to call for each atom\r\n */\r\n forEachRelatedAtom(point, process) {\r\n // find corresponding voxel\r\n const xInd = Math.floor((point.x - this._vBoxMin.x) * this._numCells * this._xScale);\r\n const yInd = Math.floor((point.y - this._vBoxMin.y) * this._numCells * this._yScale);\r\n const zInd = Math.floor((point.z - this._vBoxMin.z) * this._numCells * this._zScale);\r\n const indVoxel = xInd + yInd * this._numCells + zInd * this._numCells * this._numCells;\r\n\r\n // run through atoms affecting this voxel\r\n const atoms = this._atoms;\r\n for (let ref = this._voxelList[indVoxel]; ref >= 0; ref = this._atomsList[ref * 2 + 1]) {\r\n const indexAtom = this._atomsList[ref * 2];\r\n process(atoms[indexAtom]);\r\n }\r\n }\r\n\r\n /**\r\n * Get atom closest to specified point\r\n *\r\n * @param {Vector3} point - point in 3D\r\n *\r\n * @returns {IsoSurfaceAtomColored} atom, or null if not found\r\n */\r\n getClosestAtom(point) {\r\n let closest = null;\r\n let minDist2 = Number.MAX_VALUE;\r\n\r\n this.forEachRelatedAtom(point, (atom) => {\r\n const dist2 = point.distanceToSquared(atom.coord);\r\n if (dist2 < minDist2) {\r\n minDist2 = dist2;\r\n closest = atom;\r\n }\r\n });\r\n\r\n return closest;\r\n }\r\n\r\n /**\r\n * Build normals for isosurface, using atoms information\r\n *\r\n * @param {number} numVertices - Number of vertices in final geometry (to render)\r\n * @param {Vector3} vertices - Geometry vertices (3d coordinates array)\r\n * @param {Vector3} normals - Normals for output\r\n *\r\n * @returns {number} 0, if success\r\n */\r\n buildNormals(numVertices, vertices, normals) {\r\n const self = this;\r\n let numCloseAtoms = 0;\r\n let vx = 0;\r\n let vy = 0;\r\n let vz = 0;\r\n let dist2;\r\n let vNormalX = 0;\r\n let vNormalY = 0;\r\n let vNormalZ = 0;\r\n let koef = 0;\r\n let w = 0;\r\n const r25 = 2.5;\r\n const r01 = 0.1;\r\n\r\n const maxRadAffect = this._aveRad * r25;\r\n const maxRadAffect2 = maxRadAffect * maxRadAffect;\r\n const expScale = -this._aveRad * r01;\r\n\r\n // some stats\r\n // numSlowAtoms = 0;\r\n\r\n const gatherNormals = function (atom) {\r\n const dx = vx - atom.coord.x;\r\n const dy = vy - atom.coord.y;\r\n const dz = vz - atom.coord.z;\r\n dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 > maxRadAffect2) {\r\n return;\r\n }\r\n\r\n // get weight for gaussian smoothing\r\n const rad = atom.radius + self._probeRadius;\r\n koef = dist2 - (rad * rad);\r\n if (koef < 0.0) {\r\n koef = -koef;\r\n }\r\n w = Math.exp(expScale * koef);\r\n\r\n vNormalX += dx * w;\r\n vNormalY += dy * w;\r\n vNormalZ += dz * w;\r\n numCloseAtoms++;\r\n };\r\n\r\n let maxClosedAtoms = 0;\r\n // process all vertices, one by one\r\n for (let i = 0; i < numVertices; i++) {\r\n vx = vertices[i].x;\r\n vy = vertices[i].y;\r\n vz = vertices[i].z;\r\n\r\n numCloseAtoms = 0;\r\n vNormalX = vNormalY = vNormalZ = 0.0;\r\n\r\n this.forEachRelatedAtom(vertices[i], gatherNormals);\r\n\r\n maxClosedAtoms = (numCloseAtoms > maxClosedAtoms) ? numCloseAtoms : maxClosedAtoms;\r\n\r\n // normalize vNormal\r\n dist2 = vNormalX * vNormalX + vNormalY * vNormalY + vNormalZ * vNormalZ;\r\n if (numCloseAtoms > 0) {\r\n koef = 1.0 / Math.sqrt(dist2);\r\n vNormalX *= koef;\r\n vNormalY *= koef;\r\n vNormalZ *= koef;\r\n }\r\n normals[i].x = vNormalX;\r\n normals[i].y = vNormalY;\r\n normals[i].z = vNormalZ;\r\n } // for (i) all vertices\r\n\r\n return 0;\r\n }\r\n\r\n /**\r\n * Build vertex colors for isosurface, using atoms information\r\n *\r\n * @param {number} numVertices - Number of vertices in final geometry (to render)\r\n * @param {Vector3} vertices - Geometry vertices (3d coordinates array)\r\n * @param {Vector3} colors - Colors for output\r\n * @param {number} radiusColorSmoothness - Radius of smoothness sphere\r\n *\r\n * @returns {number} 0, if success\r\n */\r\n buildColors(numVertices, vertices, colors, radiusColorSmoothness) {\r\n const self = this;\r\n let vx = 0.0;\r\n let vy = 0.0;\r\n let vz = 0.0;\r\n let koef = 0.0;\r\n let w = 0.0;\r\n const KOEF_ADD = 0.8;\r\n\r\n const maxRadAffect = radiusColorSmoothness;\r\n const maxRadAffect2 = maxRadAffect * maxRadAffect;\r\n\r\n let colorsClose = [];\r\n let weights = [];\r\n let weightsSum = 0;\r\n\r\n const gatherColors = function (atom) {\r\n const dx = vx - atom.coord.x;\r\n const dy = vy - atom.coord.y;\r\n const dz = vz - atom.coord.z;\r\n const dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 > maxRadAffect2) {\r\n return;\r\n }\r\n\r\n // get weight for gaussian smoothing\r\n const rad = atom.radius + self._probeRadius;\r\n koef = dist2 - (rad * rad);\r\n if (koef < 0.0) {\r\n koef = -koef;\r\n }\r\n w = 1.0 / (KOEF_ADD + koef);\r\n\r\n colorsClose.push([atom.colorX, atom.colorY, atom.colorZ]);\r\n weights.push(w); // save weights for use\r\n weightsSum += w; // calc sum of weights fo further normalization\r\n };\r\n\r\n // process all vertices, one by one\r\n for (let i = 0; i < numVertices; i++) {\r\n vx = vertices[i].x;\r\n vy = vertices[i].y;\r\n vz = vertices[i].z;\r\n\r\n colorsClose = [];\r\n weights = [];\r\n weightsSum = 0;\r\n\r\n this.forEachRelatedAtom(vertices[i], gatherColors);\r\n\r\n // normalized weighted sum of colors\r\n for (let j = 0; j < colorsClose.length; ++j) {\r\n const weightNormalized = weights[j] / weightsSum;\r\n colors[i].x += colorsClose[j][0] * weightNormalized;\r\n colors[i].y += colorsClose[j][1] * weightNormalized;\r\n colors[i].z += colorsClose[j][2] * weightNormalized;\r\n }\r\n } // for (i) all vertices\r\n return 0;\r\n }\r\n}\r\nexport default IsosurfaceBuildNormals;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Class for geometry (triangle mesh) representation\r\n *\r\n *\r\n * @param {number} maxNumVertices Maximum possible number of vertices in mesh\r\n * @param {number} maxNumTriangles Maximum possible number of triangles in mesh\r\n * @param {boolean} needVertexColors Obvious\r\n */\r\nclass IsoSurfaceGeo {\r\n constructor(maxNumVertices, maxNumTriangles, needVertexColors) {\r\n this._maxNumVertices = maxNumVertices;\r\n this._maxNumTriangles = maxNumTriangles;\r\n this._vertices = new Array(maxNumVertices);\r\n this._normals = new Array(maxNumVertices);\r\n this._colors = null;\r\n if (needVertexColors) {\r\n this._colors = new Array(maxNumVertices);\r\n }\r\n this._indices = new Array(maxNumTriangles * (1 + 2));\r\n this._numVertices = 0;\r\n this._numTriangles = 0;\r\n\r\n let i;\r\n for (i = 0; i < maxNumVertices; i++) {\r\n this._vertices[i] = new THREE.Vector3();\r\n this._normals[i] = new THREE.Vector3();\r\n }\r\n for (i = 0; i < maxNumTriangles * (1 + 2); i++) {\r\n this._indices[i] = -1;\r\n }\r\n if (needVertexColors) {\r\n for (i = 0; i < maxNumVertices; i++) {\r\n this._colors[i] = new THREE.Vector3();\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n this._vertices = null;\r\n this._normals = null;\r\n this._indices = null;\r\n }\r\n}\r\nexport default IsoSurfaceGeo;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceGeometry from './IsoSurfaceGeometry';\r\nimport IsoSurfaceAtomColored from './IsoSurfaceAtomColored';\r\nimport IsosurfaceBuildNormals from './IsosurfaceBuildNormals';\r\nimport IsoSurfaceMarchCube from './IsoSurfaceMarchCube';\r\nimport IsoSurfaceGeo from './IsoSurfaceGeo';\r\nimport chem from '../../chem';\r\nimport utils from '../../utils';\r\n\r\nconst COLOR_SIZE = 3;\r\nconst HASH_SIZE = 32768;\r\nconst { Element } = chem;\r\n\r\n/**\r\n * This class implements 'quick' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass SSIsosurfaceGeometry extends IsoSurfaceGeometry {\r\n _build() {\r\n // convert geoOut into arrays of positions, indices, normals\r\n this._innerBuild();\r\n const geoOut = this.getGeo();\r\n this.destroy();\r\n this._fromGeo(geoOut);\r\n }\r\n\r\n _fromGeo(geoOut) {\r\n let colors = null;\r\n const positions = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n const normals = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n if (geoOut._colors !== null) {\r\n colors = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n }\r\n const indices = utils.allocateTyped(Uint32Array, (1 + 2) * geoOut._numTriangles);\r\n\r\n for (let i = 0, j = 0; i < geoOut._numVertices; i++) {\r\n positions[j + 0] = (geoOut._vertices[i].x);\r\n positions[j + 1] = (geoOut._vertices[i].y);\r\n positions[j + 2] = (geoOut._vertices[i].z);\r\n normals[j + 0] = geoOut._normals[i].x;\r\n normals[j + 1] = geoOut._normals[i].y;\r\n normals[j + 2] = geoOut._normals[i].z;\r\n j += 3;\r\n }\r\n if (colors !== null) {\r\n for (let i = 0, j = 0; i < geoOut._numVertices; i++, j += 3) {\r\n colors[j + 0] = geoOut._colors[i].x;\r\n colors[j + 1] = geoOut._colors[i].y;\r\n colors[j + 2] = geoOut._colors[i].z;\r\n }\r\n }\r\n\r\n const numTri3 = geoOut._numTriangles * (1 + 2);\r\n for (let i = 0; i < numTri3; i++) {\r\n indices[i] = geoOut._indices[i];\r\n }\r\n\r\n this.setIndex(new THREE.BufferAttribute(indices, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(positions, 3));\r\n this.setAttribute('normal', new THREE.BufferAttribute(normals, 3));\r\n this.setAttribute('color', new THREE.BufferAttribute(colors, 3));\r\n this.computeBoundingBox();\r\n this.computeBoundingSphere();\r\n\r\n geoOut.destroy();\r\n }\r\n\r\n convertToAtomsColored(packedArrays, atomsColored) {\r\n const { atoms, colors } = packedArrays;\r\n for (let i = 0, numAtoms = atoms.length; i < numAtoms; i++) {\r\n const vCenter = atoms[i].position;\r\n const { radius } = atoms[i].element;\r\n atomsColored[i] = new IsoSurfaceAtomColored(vCenter, radius);\r\n const nm = atoms[i].element.number;\r\n atomsColored[i].atomType = this.getType(nm);\r\n let cIdx = COLOR_SIZE * i;\r\n atomsColored[i].colorX = colors[cIdx++];\r\n atomsColored[i].colorY = colors[cIdx++];\r\n atomsColored[i].colorZ = colors[cIdx];\r\n atomsColored[i].srcAtom = atoms[i];\r\n }\r\n }\r\n\r\n getGeo() {\r\n return this.geoOut;\r\n }\r\n\r\n destroy() {\r\n this.atoms = null;\r\n\r\n this.hashLines = null;\r\n this.hashEntries = null;\r\n }\r\n\r\n /**\r\n * Calculates bounding box for array with spheres (atoms)\r\n *\r\n * @param {Object} atoms Atoms array\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n */\r\n getBoundingBox(atoms, vBoxMin, vBoxMax) {\r\n const bigNum = 10000000.0;\r\n\r\n vBoxMin.x = vBoxMin.y = vBoxMin.z = bigNum;\r\n vBoxMax.x = vBoxMax.y = vBoxMax.z = 0 - bigNum;\r\n\r\n const probeRadius2 = this.probeRadius * this.atomRadiusScale;\r\n let radMax = 0.0;\r\n for (let i = 0, num = atoms.length; i < num; i++) {\r\n const vCenter = atoms[i].coord;\r\n const rad = atoms[i].radius + probeRadius2;\r\n radMax = (rad > radMax) ? rad : radMax;\r\n if (vCenter.x - rad < vBoxMin.x) {\r\n vBoxMin.x = vCenter.x - rad;\r\n }\r\n if (vCenter.y - rad < vBoxMin.y) {\r\n vBoxMin.y = vCenter.y - rad;\r\n }\r\n if (vCenter.z - rad < vBoxMin.z) {\r\n vBoxMin.z = vCenter.z - rad;\r\n }\r\n if (vCenter.x + rad > vBoxMax.x) {\r\n vBoxMax.x = vCenter.x + rad;\r\n }\r\n if (vCenter.y + rad > vBoxMax.y) {\r\n vBoxMax.y = vCenter.y + rad;\r\n }\r\n if (vCenter.z + rad > vBoxMax.z) {\r\n vBoxMax.z = vCenter.z + rad;\r\n }\r\n }\r\n vBoxMin.x -= radMax;\r\n vBoxMin.y -= radMax;\r\n vBoxMin.z -= radMax;\r\n vBoxMax.x += radMax;\r\n vBoxMax.y += radMax;\r\n vBoxMax.z += radMax;\r\n }\r\n\r\n /**\r\n * Calculate (x,y,z) cordinate of the cell corner point\r\n *\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n * @param {number} x Cell integer x coordinate\r\n * @param {number} y Cell integer y coordinate\r\n * @param {number} z Cell integer z coordinate\r\n * @param {number} numPoints NUm points in cell on side\r\n * @param {Vector3} vOut Output vector\r\n */\r\n getCornerCoord(vBoxMin, vBoxMax, x, y, z, numPoints, vOut) {\r\n const invNP = 1.0 / (numPoints - 1.0);\r\n const tx = x * invNP;\r\n const ty = y * invNP;\r\n const tz = z * invNP;\r\n\r\n vOut.x = vBoxMin.x * (1.0 - tx) + vBoxMax.x * tx;\r\n vOut.y = vBoxMin.y * (1.0 - ty) + vBoxMax.y * ty;\r\n vOut.z = vBoxMin.z * (1.0 - tz) + vBoxMax.z * tz;\r\n }\r\n\r\n /**\r\n * Calculate point of intersection of sphere surface\r\n * and cell edge, given by [indexA, indexB] line\r\n *\r\n * @param {number} indexA Cell vertex index in [0..11]\r\n * @param {number} indexB Cell vertex index in [0..11]\r\n * @param {array} sign Sign array for all 8 vertices\r\n * @param {object} cube Cube\r\n * @param {number} indexPointValue for value placement\r\n * @param {Vector3} vOut Point of intersection\r\n */\r\n buildEdgePoint(indexA, indexB, sign, cube, indexPointValue, vOut) {\r\n if (sign[indexA] ^ sign[indexB]) {\r\n const cTwentyFour = 24;\r\n const t = (0 - cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexA])\r\n / (cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexB]\r\n - cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexA]);\r\n const xa = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 0];\r\n const ya = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 1];\r\n const za = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 2];\r\n const xb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 0];\r\n const yb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 1];\r\n const zb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 2];\r\n\r\n vOut.x = xa * (1.0 - t) + xb * t;\r\n vOut.y = ya * (1.0 - t) + yb * t;\r\n vOut.z = za * (1.0 - t) + zb * t;\r\n }\r\n }\r\n\r\n /**\r\n * Check if triangle is visible (vertices are close to atoms included in visibility set)\r\n *\r\n * @param {Vector3} v0 Vertex #0\r\n * @param {Vector3} v1 Vertex #1\r\n * @param {Vector3} v2 Vertex #2\r\n * @returns {boolean} true if triangle is visible\r\n */\r\n isTriangleVisible(v0, v1, v2) {\r\n const a0 = this.voxelWorld.getClosestAtom(v0);\r\n const a1 = this.voxelWorld.getClosestAtom(v1);\r\n const a2 = this.voxelWorld.getClosestAtom(v2);\r\n if (a0 === null || a1 === null || a2 === null\r\n || a0.srcAtom === null || a1.srcAtom === null || a2.srcAtom === null) {\r\n return false;\r\n }\r\n\r\n return this.visibilitySelector.includesAtom(a0.srcAtom)\r\n && this.visibilitySelector.includesAtom(a1.srcAtom)\r\n && this.visibilitySelector.includesAtom(a2.srcAtom);\r\n }\r\n\r\n /**\r\n * Add triangle to result geometry\r\n *\r\n * @param {Vector3} v0 Vertex #0\r\n * @param {Vector3} v1 Vertex #1\r\n * @param {Vector3} v2 Vertex #2\r\n * @returns {boolean} false if no more triangles can be added\r\n */\r\n addTriangle(v0, v1, v2) {\r\n if (this.visibilitySelector && !this.isTriangleVisible(v0, v1, v2)) {\r\n return true;\r\n }\r\n\r\n const geo = this.geoOut;\r\n\r\n if (geo._numTriangles >= this.maxNumTriangles) {\r\n return false;\r\n }\r\n\r\n // Add vertex with optimize\r\n const indInGeo0 = this.addVertexToGeo(geo, v0);\r\n const indInGeo1 = this.addVertexToGeo(geo, v1);\r\n const indInGeo2 = this.addVertexToGeo(geo, v2);\r\n if ((indInGeo0 | indInGeo1 | indInGeo2) < 0) {\r\n return false;\r\n }\r\n\r\n const itr = 3 * geo._numTriangles;\r\n geo._indices[itr + 0] = indInGeo0;\r\n geo._indices[itr + 1] = indInGeo1;\r\n geo._indices[itr + 2] = indInGeo2;\r\n geo._numTriangles++;\r\n return true;\r\n }\r\n\r\n /**\r\n * Build result geometry (triangle mesh) from marching cube cells\r\n *\r\n * @param {number} meshRes Marchnig cube vertex count on each side\r\n * @param {Vector3} vBoxMin Bounding box point min\r\n * @param {Vector3} vBoxMax Bounding box point max\r\n * @param {number} corners float values array for each cube point\r\n * @param {Vector3} vCellStep vector to next cube cell diagonal point\r\n * @param {object} cube IsoSurfaceMarchCube object\r\n * @returns {number} 0, if success (<0) is error\r\n */\r\n buildGeoFromCorners(meshRes, vBoxMin, vBoxMax, corners, vCellStep, cube) {\r\n const arrSize = 12;\r\n const cNumVerts = 8;\r\n const numCells = meshRes - 1;\r\n const side = meshRes;\r\n const side2 = meshRes * meshRes;\r\n\r\n const vaEdges = new Array(arrSize);\r\n for (let i = 0; i < arrSize; i++) {\r\n vaEdges[i] = new THREE.Vector3();\r\n }\r\n const sign = [];\r\n for (let i = 0; i < cNumVerts; i++) {\r\n sign[i] = 1.0;\r\n }\r\n const vCorner = new THREE.Vector3();\r\n let indCell = 0;\r\n let indY = 0;\r\n for (let y = 0; y < numCells; y++, indY += side2) {\r\n let indZ = 0;\r\n for (let z = 0; z < numCells; z++, indZ += side) {\r\n for (let x = 0; x < numCells; x++) {\r\n if (!cube.hasIntersection[indCell]) {\r\n // next cell\r\n indCell++;\r\n continue;\r\n }\r\n const bitsInside = cube.bitsInside[indCell];\r\n\r\n this.getCornerCoord(vBoxMin, vBoxMax, x, y, z, meshRes, vCorner);\r\n\r\n const indPointValues = indCell * (2 << (2 + 2));\r\n for (let i = 0, j = 0; i < cNumVerts; i++) {\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.x;\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.y;\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.z;\r\n }\r\n\r\n cube.pointsValuesLinear[indPointValues + 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 2 * 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 5 * 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3] += vCellStep.x;\r\n\r\n cube.pointsValuesLinear[indPointValues + 2 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 3 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 7 * 3 + 2] += vCellStep.z;\r\n\r\n cube.pointsValuesLinear[indPointValues + 4 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 5 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 7 * 3 + 1] += vCellStep.y;\r\n\r\n // now current cell has intersections (from -x to +x) on some cube edges\r\n const indValues = indPointValues + 24;\r\n for (let i = 0; i < cNumVerts; ++i) {\r\n sign[i] = (cube.pointsValuesLinear[indValues + i] < 0.0) ? 1 : 0;\r\n }\r\n\r\n this.buildEdgePoint(0, 1, sign, cube, indPointValues, vaEdges[0]);\r\n this.buildEdgePoint(1, 2, sign, cube, indPointValues, vaEdges[1]);\r\n this.buildEdgePoint(2, 3, sign, cube, indPointValues, vaEdges[2]);\r\n this.buildEdgePoint(3, 0, sign, cube, indPointValues, vaEdges[3]);\r\n\r\n this.buildEdgePoint(4, 5, sign, cube, indPointValues, vaEdges[4]);\r\n this.buildEdgePoint(5, 6, sign, cube, indPointValues, vaEdges[5]);\r\n this.buildEdgePoint(6, 7, sign, cube, indPointValues, vaEdges[6]);\r\n this.buildEdgePoint(7, 4, sign, cube, indPointValues, vaEdges[7]);\r\n\r\n this.buildEdgePoint(0, 4, sign, cube, indPointValues, vaEdges[8]);\r\n this.buildEdgePoint(1, 5, sign, cube, indPointValues, vaEdges[9]);\r\n this.buildEdgePoint(2, 6, sign, cube, indPointValues, vaEdges[10]);\r\n this.buildEdgePoint(3, 7, sign, cube, indPointValues, vaEdges[11]);\r\n\r\n const offs = bitsInside * (2 << (1 + 2));\r\n for (let numTri = 0, indTri = 0; numTri < (2 + 2 + 2); numTri++, indTri += 3) {\r\n // s_triIndicesMarchCube is external array, defined in mold_ind.js\r\n const i0 = cube.striIndicesMarchCube[offs + indTri];\r\n if (i0 < 0) {\r\n break;\r\n }\r\n const i1 = cube.striIndicesMarchCube[offs + indTri + 1];\r\n const i2 = cube.striIndicesMarchCube[offs + indTri + 2];\r\n\r\n if (!this.addTriangle(vaEdges[i0], vaEdges[i1], vaEdges[i2])) {\r\n return 0 - 2;\r\n }\r\n } // for numTri\r\n\r\n // next cell (cube)\r\n indCell++;\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n return 0;\r\n }\r\n\r\n /**\r\n * Returns number of cell with intersection with at least one sphere.\r\n * Using this number, we can estimate required number of vertices\r\n * and triangles to build result mesh.\r\n *\r\n * @param {number} side Number of points in cube voxels\r\n * @param {number} numCells Number of cells in cube voxels (per direction)\r\n * @param {array} corners Array of float values for cube corner points\r\n * @param {object} cube IsoSurfaceMarchCube object\r\n * @returns {number} numIntersectedCells\r\n */\r\n getNumIntersectedCells(side, numCells, corners, cube) {\r\n const side2 = side * side;\r\n const cNumVerts = 8;\r\n let numIntersectedCells = 0;\r\n\r\n let indCell = 0;\r\n let indY = 0;\r\n for (let y = 0; y < numCells; y++, indY += side2) {\r\n let indZ = 0;\r\n for (let z = 0; z < numCells; z++, indZ += side) {\r\n for (let x = 0; x < numCells; x++) {\r\n const cubeValuesIndex = indCell * (2 << (2 + 2)) + 24;\r\n const indCorner = x + indZ + indY;\r\n\r\n cube.pointsValuesLinear[cubeValuesIndex] = corners[indCorner];\r\n cube.pointsValuesLinear[cubeValuesIndex + 1] = corners[indCorner + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 2] = corners[indCorner + side + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 3] = corners[indCorner + side];\r\n cube.pointsValuesLinear[cubeValuesIndex + 4] = corners[side2 + indCorner];\r\n cube.pointsValuesLinear[cubeValuesIndex + 5] = corners[side2 + indCorner + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 6] = corners[side2 + indCorner + side + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 7] = corners[side2 + indCorner + side];\r\n\r\n // check read exception\r\n // assert(side2 + indCorner + side + 1 < side3);\r\n\r\n // get bit flags inside\r\n let bitsInside = 0;\r\n for (let i = 0; i < cNumVerts; ++i) {\r\n if (cube.pointsValuesLinear[cubeValuesIndex + i] < 0.0) {\r\n bitsInside |= (1 << i);\r\n }\r\n }\r\n\r\n if ((bitsInside === 0) || (bitsInside === ((1 << cNumVerts) - 1))) {\r\n cube.hasIntersection[indCell] = false;\r\n } else {\r\n cube.hasIntersection[indCell] = true;\r\n numIntersectedCells++;\r\n }\r\n cube.bitsInside[indCell] = bitsInside;\r\n // next cell\r\n indCell++;\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n return numIntersectedCells;\r\n }\r\n\r\n getType(letter) {\r\n const atomT = [0, 0, 1, 1, 2, 6, 3, 6, 4, 6, 5, 6, 6, 0, 7, 3, 8, 2, 9, 6, 10, 6, 11, 6, 12, 6, 13, 6, 14, 6, 15, 4,\r\n 16, 5, 17, 6, 18, 6, 19, 6, 20, 6, 21, 6, 22, 6, 23, 6, 24, 6, 25, 6, 26, 6, 27, 6, 28, 6, 29, 6, 30, 6, 31, 6,\r\n 32, 6, 33, 6, 34, 6, 35, 6, 36, 6, 37, 6, 38, 6, 39, 6, 40, 6, 41, 6, 42, 6, 43, 6, 44, 6, 45, 6, 46, 6, 47, 6,\r\n 48, 6, 49, 6, 50, 6, 51, 6, 52, 6, 53, 6, 54, 6, 55, 6, 56, 6, 57, 6, 58, 6, 59, 6, 60, 6, 61, 6, 62, 6, 63, 6,\r\n 64, 6, 65, 6, 66, 6, 67, 6, 68, 6, 69, 6, 70, 6, 71, 6, 72, 6, 73, 6, 74, 6, 75, 6, 76, 6, 77, 6, 78, 6, 79, 6,\r\n 80, 6, 81, 6, 82, 6, 83, 6, 84, 6, 85, 6, 86, 6, 87, 6, 88, 6, 89, 6, 90, 6, 91, 6, 92, 6, 93, 6, 94, 6, 95, 6,\r\n 96, 6, 97, 6, 98, 6, 99, 6, 100, 6, 101, 6, 102, 6, 103, 6, 104, 6, 105, 6, 106, 6, 107, 6, 108, 6, 109, 6];\r\n\r\n if (letter < 1 || letter > atomT.length / 2\r\n || (Object.keys(Element.ByAtomicNumber).length * 2) !== atomT.length) {\r\n throw new Error('atomT.length should be equal Element.ByAtomicNumber.length * 2');\r\n }\r\n return atomT[letter * 2];\r\n }\r\n\r\n /**\r\n * Calculate values for marching cube grid points\r\n * positive values are outside sphere, negative - is inside\r\n *\r\n * @param {array} corners array of float values\r\n * @param {number} side Number of point in cube in 1 dimennsion\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n * @param {array} atoms Array of input atoms\r\n * @param {number} probeRad radius for atom probing\r\n */\r\n calculateGridCorners(corners, side, vBoxMin, vBoxMax, atoms, probeRad) {\r\n const side2 = side * side;\r\n const side3 = side2 * side;\r\n const vCorner = new THREE.Vector3();\r\n const vDif = new THREE.Vector3();\r\n\r\n const aLot = +1.0e12;\r\n\r\n for (let i = 0; i < side3; i++) {\r\n corners[i] = aLot; // to large value\r\n }\r\n\r\n const xScale = (side - 1) / (vBoxMax.x - vBoxMin.x);\r\n const yScale = (side - 1) / (vBoxMax.y - vBoxMin.y);\r\n const zScale = (side - 1) / (vBoxMax.z - vBoxMin.z);\r\n\r\n for (let s = 0, numAtoms = atoms.length; s < numAtoms; s++) {\r\n const atom = atoms[s];\r\n const radius = atom.radius + probeRad;\r\n\r\n const fx = ((atom.coord.x - radius) - vBoxMin.x) * xScale;\r\n const fy = ((atom.coord.y - radius) - vBoxMin.y) * yScale;\r\n const fz = ((atom.coord.z - radius) - vBoxMin.z) * zScale;\r\n\r\n const indXMin = Math.floor(fx);\r\n const indYMin = Math.floor(fy);\r\n const indZMin = Math.floor(fz);\r\n\r\n let indXMax = Math.floor(((atom.coord.x + radius) - vBoxMin.x) * xScale);\r\n let indYMax = Math.floor(((atom.coord.y + radius) - vBoxMin.y) * yScale);\r\n let indZMax = Math.floor(((atom.coord.z + radius) - vBoxMin.z) * zScale);\r\n\r\n indXMax++;\r\n indYMax++;\r\n indZMax++;\r\n indXMax = (indXMax <= (side - 1)) ? indXMax : (side - 1);\r\n indYMax = (indYMax <= (side - 1)) ? indYMax : (side - 1);\r\n indZMax = (indZMax <= (side - 1)) ? indZMax : (side - 1);\r\n\r\n for (let y = indYMin; y <= indYMax; y++) {\r\n const indY = y * side2;\r\n for (let z = indZMin; z <= indZMax; z++) {\r\n const indZ = z * side;\r\n for (let x = indXMin; x <= indXMax; x++) {\r\n const ind = indY + indZ + x;\r\n this.getCornerCoord(vBoxMin, vBoxMax, x, y, z, side, vCorner);\r\n vDif.x = vCorner.x - atom.coord.x;\r\n vDif.y = vCorner.y - atom.coord.y;\r\n vDif.z = vCorner.z - atom.coord.z;\r\n const distToSphere = Math.sqrt(vDif.x * vDif.x + vDif.y * vDif.y + vDif.z * vDif.z);\r\n // val: < 0, if inside sphere\r\n // val: > 0, if outside sphere\r\n const val = distToSphere - radius;\r\n if (val < corners[ind]) {\r\n corners[ind] = val;\r\n }\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n } // for (s)\r\n }\r\n\r\n /**\r\n * Create memory pool for vertex hash management\r\n *\r\n * @param {number} maxNumVertices Maximum possible number of vertices (that will be build)\r\n * @param {number} maxNumTriangles Maximum possible number of triangles (that will be build)\r\n * @returns {number} 0, if success. (<0) is non memory\r\n */\r\n createVertexHash(maxNumVertices, maxNumTriangles) {\r\n this.hashLines = utils.allocateTyped(Int32Array, HASH_SIZE * 2);\r\n if (this.hashLines === null) {\r\n return 0 - 1;\r\n }\r\n for (let i = 0, j = 0; i < HASH_SIZE; i++) {\r\n this.hashLines[j++] = 0; // num vertices in this hash line\r\n this.hashLines[j++] = 0 - 1; // index of the first entry\r\n }\r\n\r\n this.maxNumVertices = maxNumVertices;\r\n this.maxNumTriangles = maxNumTriangles;\r\n\r\n this.numHashEtriesAllocated = maxNumVertices;\r\n this.hashEntries = utils.allocateTyped(Int32Array, 2 * this.numHashEtriesAllocated);\r\n if (this.hashEntries === null) {\r\n return 0 - 1;\r\n }\r\n for (let i = 0, j = 0; i < this.numHashEtriesAllocated; i++) {\r\n this.hashEntries[j++] = 0 - 1; // index of vertex\r\n this.hashEntries[j++] = 0 - 1; // next hash entry index\r\n }\r\n this.numHashEntryIndex = 0;\r\n return 0;\r\n }\r\n\r\n /**\r\n * Allocate and return new hash entry. Just check possible amount.\r\n *\r\n * @returns {number} index of hash entry, that can be used for geometry add vertex functionality\r\n */\r\n getNewHashEntry() {\r\n if (this.numHashEntryIndex < this.numHashEtriesAllocated) {\r\n const i = this.numHashEntryIndex;\r\n this.numHashEntryIndex++;\r\n return i;\r\n }\r\n return 0 - 1;\r\n }\r\n\r\n /**\r\n * Add vertex to geometry structure\r\n * using vertex hash table to quickly check, is this vertex already exist in geometry\r\n *\r\n * @param {object} geoOut Geometry to build\r\n * @param {Vector3} vAdd Vertex to add\r\n * @returns {number} index of added (or existing) vertex in geometry.\r\n */\r\n addVertexToGeo(geoOut, vAdd) {\r\n let entry;\r\n const oneHynberes = 0.01;\r\n const n815851 = 815851;\r\n const n37633 = 37633;\r\n const n2453543 = 2453543;\r\n const r106 = 1.0e-6;\r\n\r\n const hashResolution = this.marCubeResoultion << 2;\r\n const v = new THREE.Vector3();\r\n const ix = Math.floor(hashResolution * (vAdd.x - this.vBoxMin.x) / (this.vBoxMax.x + oneHynberes - this.vBoxMin.x));\r\n const iy = Math.floor(hashResolution * (vAdd.y - this.vBoxMin.y) / (this.vBoxMax.y + oneHynberes - this.vBoxMin.y));\r\n const iz = Math.floor(hashResolution * (vAdd.z - this.vBoxMin.z) / (this.vBoxMax.z + oneHynberes - this.vBoxMin.z));\r\n let iHash = ix * n815851 + iz * n37633 + iy * n2453543;\r\n iHash &= (HASH_SIZE - 1);\r\n const hLineIndex = iHash + iHash;\r\n\r\n // search vertex via hash\r\n // search in hash list\r\n if (this.vBoxMin !== null && this.vBoxMax !== null) {\r\n for (entry = this.hashLines[hLineIndex + 1]; entry >= 0; entry = this.hashEntries[entry * 2 + 1]) {\r\n const ind = this.hashEntries[entry * 2 + 0]; // vertex index\r\n v.copy(geoOut._vertices[ind]);\r\n v.x -= vAdd.x;\r\n v.y -= vAdd.y;\r\n v.z -= vAdd.z;\r\n const dot2 = v.x * v.x + v.y * v.y + v.z * v.z;\r\n if (dot2 < r106) {\r\n return ind;\r\n } // if (found)\r\n } // for (entry)\r\n } // search\r\n\r\n // add new vertex to geometry\r\n if (geoOut._numVertices >= this.maxNumVertices) {\r\n return 0 - 1;\r\n }\r\n\r\n const iVertAdd = geoOut._numVertices;\r\n geoOut._vertices[iVertAdd].copy(vAdd);\r\n\r\n // add to hash\r\n if (this.vBoxMin !== null && this.vBoxMax !== null) {\r\n entry = this.getNewHashEntry();\r\n if (entry < 0) {\r\n return 0 - 1;\r\n }\r\n const entryFirst = this.hashLines[hLineIndex + 1];\r\n this.hashLines[hLineIndex + 1] = entry;\r\n this.hashEntries[entry * 2 + 0] = iVertAdd;\r\n this.hashEntries[entry * 2 + 1] = entryFirst;\r\n\r\n this.hashLines[hLineIndex + 0]++; // num vertices in line ++\r\n }\r\n geoOut._numVertices++;\r\n return iVertAdd;\r\n }\r\n\r\n /**\r\n *\r\n * @param {number} side some placeholder description\r\n * @param {number} probeSphereRadius some placeholder description\r\n * @param {object} vBoxMin some placeholder description\r\n * @param {object} vBoxMax some placeholder description\r\n * @param {object} geoOut some placeholder description\r\n * @param {object} corners some placeholder description\r\n * @returns {number} always 0\r\n */\r\n modifyExcludedFromGeo(\r\n side,\r\n probeSphereRadius,\r\n vBoxMin,\r\n vBoxMax,\r\n geoOut,\r\n corners,\r\n ) {\r\n let ind;\r\n let distToSphere;\r\n let distToBorder;\r\n const r11 = 1.1;\r\n\r\n function innerBlockWorkAround() {\r\n if (distToBorder > 0.0) {\r\n // point is inside probe sphere\r\n if (corners[ind] < 0.0) {\r\n corners[ind] = distToBorder; // was inside surface, now is oustide ( > 0)\r\n }\r\n if (distToBorder > corners[ind]) {\r\n corners[ind] = distToBorder; // find positive maximum\r\n }\r\n } else if (distToBorder > corners[ind]) { // point is outside sphere\r\n corners[ind] = distToBorder; // find negative maximum\r\n }\r\n }\r\n\r\n const side2 = side * side;\r\n const xScale = (side - 1) / (vBoxMax.x - vBoxMin.x);\r\n const yScale = (side - 1) / (vBoxMax.y - vBoxMin.y);\r\n const zScale = (side - 1) / (vBoxMax.z - vBoxMin.z);\r\n\r\n const probeSpRad2 = (probeSphereRadius * 2) * (probeSphereRadius * 2);\r\n const sideInv = 1.0 / (side - 1);\r\n\r\n for (let i = 0; i < geoOut._numVertices; i++) {\r\n const vCenter = geoOut._vertices[i];\r\n\r\n const radEst = probeSphereRadius * r11;\r\n\r\n let indXMin = Math.floor(((vCenter.x - radEst) - vBoxMin.x) * xScale);\r\n let indYMin = Math.floor(((vCenter.y - radEst) - vBoxMin.y) * yScale);\r\n let indZMin = Math.floor(((vCenter.z - radEst) - vBoxMin.z) * zScale);\r\n\r\n let indXMax = Math.floor(((vCenter.x + radEst) - vBoxMin.x) * xScale);\r\n let indYMax = Math.floor(((vCenter.y + radEst) - vBoxMin.y) * yScale);\r\n let indZMax = Math.floor(((vCenter.z + radEst) - vBoxMin.z) * zScale);\r\n\r\n indXMin = (indXMin >= 0) ? indXMin : 0;\r\n indYMin = (indYMin >= 0) ? indYMin : 0;\r\n indZMin = (indZMin >= 0) ? indZMin : 0;\r\n indXMax = (indXMax <= (side - 1)) ? indXMax : (side - 1);\r\n indYMax = (indYMax <= (side - 1)) ? indYMax : (side - 1);\r\n indZMax = (indZMax <= (side - 1)) ? indZMax : (side - 1);\r\n\r\n for (let iy = indYMin; iy <= indYMax; iy++) {\r\n const indY = iy * side2;\r\n for (let iz = indZMin; iz <= indZMax; iz++) {\r\n const indZ = iz * side;\r\n for (let ix = indXMin; ix <= indXMax; ix++) {\r\n ind = indY + indZ + ix;\r\n // getCornerCoord(vBoxMin, vBoxMax, ix, iy, iz, side, &vCorner);\r\n let t = ix * sideInv;\r\n const xCorner = vBoxMin.x * (1.0 - t) + vBoxMax.x * t;\r\n t = iy * sideInv;\r\n const yCorner = vBoxMin.y * (1.0 - t) + vBoxMax.y * t;\r\n t = iz * sideInv;\r\n const zCorner = vBoxMin.z * (1.0 - t) + vBoxMax.z * t;\r\n\r\n const dx = xCorner - vCenter.x;\r\n const dy = yCorner - vCenter.y;\r\n const dz = zCorner - vCenter.z;\r\n const dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 < probeSpRad2) {\r\n distToSphere = Math.sqrt(dist2);\r\n distToBorder = -(distToSphere - probeSphereRadius);\r\n innerBlockWorkAround();\r\n } // if (dist from corner point to sphere center more 2 radiuses)\r\n } // for (ix)\r\n } // for (iz)\r\n } // for (iy)\r\n } // for (i) all geo vertices\r\n return 0;\r\n }\r\n\r\n _innerBuild() {\r\n let ok;\r\n const expandFactor = 1.2;\r\n\r\n // performance test\r\n // this.performanceTest();\r\n\r\n // Create temporary atoms (but colored)\r\n const packedArrays = {\r\n posRad: this._posRad,\r\n colors: this._colors,\r\n atoms: this._opts.atoms,\r\n };\r\n this.complex = this._opts.parent;\r\n this.atoms = packedArrays.atoms;\r\n this.meshResolution = this._opts.gridSpacing;\r\n this.atomRadiusScale = this._opts.radScale;\r\n this.colorMode = this._opts.colorMode;\r\n this.probeRadius = this._opts.probeRadius;\r\n this.useVertexColors = true;\r\n this.excludeProbe = this._opts.excludeProbe;\r\n this.visibilitySelector = this._opts.visibilitySelector;\r\n\r\n this.geoOut = null;\r\n\r\n this.hashLines = null;\r\n this.hashEntries = null;\r\n this.numHashEtriesAllocated = 0;\r\n this.numHashEntryIndex = 0;\r\n this.maxNumVertices = 0;\r\n this.maxNumTriangles = 0;\r\n\r\n const atomsColored = new Array(this.atoms.length);\r\n this.convertToAtomsColored(packedArrays, atomsColored);\r\n\r\n // find bbox for spheres scene\r\n const vBoxMin = this.vBoxMin = new THREE.Vector3();\r\n const vBoxMax = this.vBoxMax = new THREE.Vector3();\r\n this.getBoundingBox(atomsColored, vBoxMin, vBoxMax);\r\n\r\n const marCubeResoultion = this.marCubeResoultion = this.meshResolution * (2 + 2);\r\n\r\n // build grid corners for Marching cube algorithm\r\n const side = marCubeResoultion;\r\n const side2 = side * side;\r\n const side3 = side2 * side;\r\n const corners = utils.allocateTyped(Float32Array, side3);\r\n const rProbeRadius = this.probeRadius * this.atomRadiusScale;\r\n\r\n this.calculateGridCorners(corners, side, vBoxMin, vBoxMax, atomsColored, rProbeRadius);\r\n\r\n const numCells = marCubeResoultion - 1;\r\n const cube = new IsoSurfaceMarchCube();\r\n ok = cube.create(numCells);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n // copy corners to cells\r\n const vCellStep = new THREE.Vector3();\r\n vCellStep.x = (vBoxMax.x - vBoxMin.x) / numCells;\r\n vCellStep.y = (vBoxMax.y - vBoxMin.y) / numCells;\r\n vCellStep.z = (vBoxMax.z - vBoxMin.z) / numCells;\r\n\r\n let numIntersectedCellsEstim = this.getNumIntersectedCells(side, numCells, corners, cube);\r\n let maxNumVertices = Math.floor(numIntersectedCellsEstim * expandFactor);\r\n let maxNumTriangles = Math.floor(numIntersectedCellsEstim * expandFactor * 2);\r\n\r\n this.geoOut = new IsoSurfaceGeo(maxNumVertices, maxNumTriangles, this.useVertexColors);\r\n\r\n ok = this.createVertexHash(maxNumVertices, maxNumTriangles);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n\r\n // build voxel world (used to check triangle-to-atom tie and to calculate normals and colors)\r\n let probeRadForNormalsColors = rProbeRadius;\r\n if (this.excludeProbe) {\r\n probeRadForNormalsColors = 0.01;\r\n }\r\n this.voxelWorld = new IsosurfaceBuildNormals(\r\n atomsColored.length,\r\n atomsColored,\r\n vBoxMin,\r\n vBoxMax,\r\n probeRadForNormalsColors,\r\n );\r\n this.voxelWorld.createVoxels();\r\n\r\n ok = this.buildGeoFromCorners(marCubeResoultion, vBoxMin, vBoxMax, corners, vCellStep, cube);\r\n if (this.excludeProbe) {\r\n // using 3d mesh (geoOut) as a surface points\r\n // move probe sphere and try to minimuze corners values\r\n this.modifyExcludedFromGeo(side, rProbeRadius, vBoxMin, vBoxMax, this.geoOut, corners);\r\n\r\n // delete old builded geo\r\n this.geoOut._vertices = null;\r\n this.geoOut._colors = null;\r\n this.geoOut._indices = null;\r\n this.geoOut._normals = null;\r\n this.geoOut._numVertices = 0;\r\n this.geoOut._numTriangles = 0;\r\n this.geoOut = null;\r\n\r\n // estimage geo vertices budget again\r\n numIntersectedCellsEstim = this.getNumIntersectedCells(side, numCells, corners, cube);\r\n maxNumVertices = Math.floor(numIntersectedCellsEstim * expandFactor);\r\n maxNumTriangles = Math.floor(numIntersectedCellsEstim * expandFactor * 2);\r\n\r\n // creates empty new geometry\r\n this.geoOut = new IsoSurfaceGeo(maxNumVertices, maxNumTriangles, this.useVertexColors);\r\n ok = this.createVertexHash(maxNumVertices, maxNumTriangles);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n // build vertices and triangles from corners values\r\n ok = this.buildGeoFromCorners(side, vBoxMin, vBoxMax, corners, vCellStep, cube);\r\n }\r\n\r\n // build vertex normals\r\n this.voxelWorld.buildNormals(this.geoOut._vertices.length, this.geoOut._vertices, this.geoOut._normals);\r\n // More value : more smooth color mixing\r\n // value about 0.7: very rough colors borders\r\n let radiusColorSmoothness = 6.5;\r\n if (this.excludeProbe) {\r\n radiusColorSmoothness -= 1.5;\r\n }\r\n if (this.useVertexColors) {\r\n this.voxelWorld.buildColors(\r\n this.geoOut._vertices.length,\r\n this.geoOut._vertices,\r\n this.geoOut._colors,\r\n radiusColorSmoothness,\r\n );\r\n }\r\n this.voxelWorld.destroyVoxels();\r\n this.voxelWorld = null;\r\n\r\n // remove objects\r\n cube.destroy();\r\n\r\n return ok;\r\n }\r\n}\r\n\r\n// All code below must be erased from every device and each developer's memory\r\n\r\nexport default SSIsosurfaceGeometry;\r\n","import * as THREE from 'three';\r\nimport EventDispatcher from '../../utils/EventDispatcher';\r\n\r\nfunction createLabel(fieldTxt, className) {\r\n const text = document.createElement('div');\r\n text.className = className;\r\n\r\n if (typeof fieldTxt === 'string') {\r\n const spanText = document.createElement('span');\r\n spanText.style.fontSize = '150%';\r\n const strings = fieldTxt.split('\\n');\r\n\r\n for (let i = 0, n = strings.length; i < n; ++i) {\r\n const spanNodeP = document.createElement('span');\r\n const spanNodeText = document.createTextNode(strings[i]);\r\n spanNodeP.appendChild(spanNodeText);\r\n spanText.appendChild(spanNodeP);\r\n if (i < n - 1) {\r\n spanText.appendChild(document.createElement('br'));\r\n }\r\n }\r\n\r\n text.appendChild(spanText);\r\n } else {\r\n text.appendChild(fieldTxt);\r\n }\r\n text.worldPos = new THREE.Vector3();\r\n return text;\r\n}\r\nclass LabelsGeometry extends EventDispatcher {\r\n constructor(instanceCount, opts) {\r\n super();\r\n this._opts = opts;\r\n this.items = [];\r\n this.needsUpdate = false;\r\n\r\n let xTranslation = -50;\r\n let yTranslation = -50;\r\n switch (opts.horizontalAlign) {\r\n case 'left':\r\n xTranslation = 0;\r\n break;\r\n case 'right':\r\n xTranslation = -100;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n switch (opts.verticalAlign) {\r\n case 'top':\r\n yTranslation = -100;\r\n break;\r\n case 'bottom':\r\n yTranslation = 0;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n const deltaPos = new THREE.Vector3(opts.dx || 0, opts.dy || 0, opts.dz || 0);\r\n this.userData = {\r\n translation: `translate(${xTranslation}%, ${yTranslation}%)`,\r\n offset: deltaPos,\r\n };\r\n }\r\n\r\n setItem(itemIdx, itemPos, fieldTxt) {\r\n const opts = this._opts;\r\n const text = this.items[itemIdx] || createLabel(fieldTxt, 'label');\r\n\r\n text.worldPos.copy(itemPos);\r\n text.style.textAlign = opts.horizontalAlign;\r\n text.style.verticalAlign = opts.verticalAlign;\r\n this.items[itemIdx] = text;\r\n }\r\n\r\n setColor(itemIdx, fColor, bColor) {\r\n const text = this.items[itemIdx];\r\n text.opts = {\r\n color: fColor,\r\n background: bColor,\r\n };\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.needsUpdate = true;\r\n this.dispatchEvent({ type: 'update' });\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n }\r\n\r\n // unimplemented functions\r\n raycast() {\r\n }\r\n\r\n setOpacity() {\r\n\r\n }\r\n\r\n getSubset() {\r\n return [];\r\n }\r\n}\r\n\r\nexport default LabelsGeometry;\r\n","import InstancedSpheresGeometry from './InstancedSpheresGeometry';\r\nimport SimpleSpheresGeometry from './SimpleSpheresGeometry';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\nimport Instanced2CCylindersGeometry from './Instanced2CCylindersGeometry';\r\nimport ExtrudedObjectsGeometry from './ExtrudedObjectsGeometry';\r\nimport ChunkedLinesGeometry from './ChunkedLinesGeometry';\r\nimport TwoColorLinesGeometry from './TwoColorLinesGeometry';\r\nimport CrossGeometry from './CrossGeometry';\r\nimport QuickSurfGeometry from './QuickSurfGeometry';\r\nimport ContactSurfaceGeometry from './ContactSurfaceGeometry';\r\nimport SSIsosurfaceGeometry from './SSIsosurfaceGeometry';\r\nimport LabelsGeometry from './LabelsGeometry';\r\n\r\nexport default {\r\n InstancedSpheresGeometry,\r\n SimpleSpheresGeometry,\r\n Simple2CCylindersGeometry,\r\n Instanced2CCylindersGeometry,\r\n ExtrudedObjectsGeometry,\r\n ChunkedLinesGeometry,\r\n TwoColorLinesGeometry,\r\n CrossGeometry,\r\n QuickSurfGeometry,\r\n ContactSurfaceGeometry,\r\n SSIsosurfaceGeometry,\r\n LabelsGeometry,\r\n};\r\n","export default {\r\n\r\n precision: 'mediump',\r\n\r\n /**\r\n *\r\n * @param {THREE.WebGLRenderer} renderer\r\n */\r\n init(renderer) {\r\n this.precision = renderer.capabilities.getMaxPrecision('highp');\r\n },\r\n};\r\n","import * as THREE from 'three';\r\n\r\nconst noiseWidth = 4;\r\nconst noiseHeight = 4;\r\nconst _noiseData = new Uint8Array([\r\n 24, 52, 0, 255, 254, 145, 0, 255, 122, 0, 0, 255, 7, 170, 0, 255,\r\n 34, 214, 0, 255, 173, 8, 0, 255, 86, 249, 0, 255, 160, 4, 0, 255,\r\n 226, 46, 0, 255, 224, 211, 0, 255, 3, 157, 0, 255, 174, 247, 0, 255,\r\n 12, 182, 0, 255, 220, 216, 0, 255, 1, 109, 0, 255, 253, 154, 0, 255,\r\n]);\r\nconst _noiseWrapS = THREE.RepeatWrapping;\r\nconst _noiseWrapT = THREE.RepeatWrapping;\r\nconst _noiseMinFilter = THREE.NearestFilter;\r\nconst _noiseMagFilter = THREE.NearestFilter;\r\nconst _noiseMapping = THREE.UVMapping;\r\nconst noiseTexture = new THREE.DataTexture(\r\n _noiseData,\r\n noiseWidth,\r\n noiseHeight,\r\n THREE.RGBAFormat,\r\n THREE.UnsignedByteType,\r\n _noiseMapping,\r\n _noiseWrapS,\r\n _noiseWrapT,\r\n _noiseMagFilter,\r\n _noiseMinFilter,\r\n 1,\r\n);\r\nnoiseTexture.needsUpdate = true;\r\n\r\nexport default {\r\n noiseWidth,\r\n noiseHeight,\r\n noiseTexture,\r\n};\r\n","import * as THREE from 'three';\r\nimport vertexShader from './Uber.vert';\r\nimport fragmentShader from './Uber.frag';\r\nimport capabilities from '../capabilities';\r\nimport noise from '../noiseTexture';\r\n\r\n// Length of _samplesKernel is used in Uber.frag\r\n// If you want to change length of _samplesKernel, please, remember change it in Uber.frag too.\r\n// You can easy find places for replace using word:_samplesKernel\r\nconst _samplesKernel = [\r\n new THREE.Vector2(-0.541978, 0.840393),\r\n new THREE.Vector2(0.125533, -0.992089),\r\n new THREE.Vector2(0.374329, 0.927296),\r\n new THREE.Vector2(-0.105475, 0.994422),\r\n];\r\n\r\nconst defaultUniforms = THREE.UniformsUtils.merge([\r\n\r\n THREE.UniformsLib.fog,\r\n THREE.UniformsLib.lights,\r\n\r\n {\r\n // are updated automatically by three.js (see THREE.ShaderLib.common)\r\n diffuse: { value: new THREE.Color(0xeeeeee) },\r\n opacity: { value: 1.0 },\r\n\r\n specular: { type: 'c', value: new THREE.Color(0x111111) },\r\n shininess: { type: 'f', value: 30 },\r\n fixedColor: { type: 'c', value: new THREE.Color(0xffffff) },\r\n zOffset: { type: 'f', value: 0.0 },\r\n zClipValue: { type: 'f', value: 0.0 },\r\n clipPlaneValue: { type: 'f', value: 0.0 },\r\n nearPlaneValue: { type: 'f', value: -0.5 },\r\n invModelViewMatrix: { type: '4fv', value: new THREE.Matrix4() },\r\n world2colorMatrix: { type: '4fv', value: new THREE.Matrix4() },\r\n dashedLineSize: { type: 'f', value: 0.1 },\r\n dashedLinePeriod: { type: 'f', value: 0.2 },\r\n projMatrixInv: { type: '4fv', value: new THREE.Matrix4() },\r\n viewport: { type: 'v2', value: new THREE.Vector2() },\r\n lineWidth: { type: 'f', value: 2.0 },\r\n // default value must be the same as settings\r\n fogAlpha: { type: 'f', value: 1.0 },\r\n samplesKernel: { type: 'v2v', value: null },\r\n noiseTex: { type: 't', value: null },\r\n noiseTexelSize: { type: 'v2', value: null },\r\n srcTexelSize: { type: 'v2', value: null },\r\n },\r\n\r\n]);\r\n\r\nconst uberOptionNames = [\r\n 'shininess',\r\n 'opacity',\r\n 'zOffset',\r\n 'diffuse',\r\n 'specular',\r\n 'fixedColor',\r\n 'zClipCoef',\r\n 'zClipValue',\r\n 'clipPlaneValue',\r\n 'world2colorMatrix',\r\n 'dashedLineSize',\r\n 'dashedLinePeriod',\r\n 'projMatrixInv',\r\n 'viewport',\r\n 'lineWidth',\r\n 'fogAlpha',\r\n 'samplesKernel',\r\n 'noiseTex',\r\n 'noiseTexelSize',\r\n 'srcTexelSize',\r\n];\r\n\r\n// properties that convert to uniforms\r\nconst uberOptions = {\r\n diffuse: new THREE.Color(0xffffff), // used in phong lighting\r\n specular: new THREE.Color(0x111111), // used in phong lighting\r\n shininess: 30, // used in phong lighting\r\n opacity: 1, // set mesh opacity\r\n fixedColor: new THREE.Color(0xffffff), // color to override (see OVERRIDE_COLOR)\r\n zOffset: 0.0, // used fo zsprites (see SPHERE_SPRITE CYLINDER_SPRITE)\r\n zClipCoef: 2.0, // use for Surfs clipping (mesh param, isn't used in shader) FIXME move to representation param\r\n zClipValue: 0.0, // value to clip Surfs in shader (see ZCLIP)\r\n clipPlaneValue: 0.0, // value to clip scene globally (see CLIPPLANE)\r\n world2colorMatrix: new THREE.Matrix4(),\r\n dashedLineSize: 0.1,\r\n dashedLinePeriod: 0.3,\r\n projMatrixInv: new THREE.Matrix4(),\r\n viewport: new THREE.Vector2(800, 600),\r\n lineWidth: 2.0,\r\n fogAlpha: 1.0,\r\n samplesKernel: _samplesKernel,\r\n noiseTex: noise.noiseTexture,\r\n noiseTexelSize: new THREE.Vector2(1.0 / noise.noiseWidth, 1.0 / noise.noiseHeight),\r\n srcTexelSize: new THREE.Vector2(1.0 / 800.0, 1.0 / 600.0),\r\n copy(source) {\r\n this.diffuse.copy(source.diffuse);\r\n this.specular.copy(source.specular);\r\n this.shininess = source.shininess;\r\n this.opacity = source.opacity;\r\n this.fixedColor.copy(source.fixedColor);\r\n this.zOffset = source.zOffset;\r\n this.zClipCoef = source.zClipCoef;\r\n this.zClipValue = source.zClipValue;\r\n this.clipPlaneValue = source.clipPlaneValue;\r\n this.world2colorMatrix.copy(source.world2colorMatrix);\r\n this.dashedLineSize = source.dashedLineSize;\r\n this.dashedLinePeriod = source.dashedLinePeriod;\r\n this.projMatrixInv = source.projMatrixInv;\r\n this.viewport = source.viewport;\r\n this.lineWidth = source.lineWidth; // used for thick lines only\r\n this.toonShading = source.toonShading;\r\n this.fogAlpha = source.fogAlpha;\r\n this.samplesKernel = source.samplesKernel;\r\n this.noiseTex = source.noiseTex;\r\n this.noiseTexelSize = source.noiseTexelSize;\r\n this.srcTexelSize = source.srcTexelSize;\r\n },\r\n};\r\n\r\nclass UberMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // add fog\r\n this.fog = true;\r\n // used for instanced geometry\r\n this.instancedPos = false;\r\n this.instancedMatrix = false;\r\n // atoms and links color\r\n this.attrColor = false;\r\n // second link color for cylinders\r\n this.attrColor2 = false;\r\n //\r\n this.attrAlphaColor = false;\r\n // overrides color for all vertices (used in selection)\r\n this.overrideColor = false;\r\n // zsrpites\r\n this.sphereSprite = false;\r\n this.cylinderSprite = false;\r\n // clip Surfs individually\r\n this.zClip = false;\r\n // clip scene with global clip plane\r\n this.clipPlane = false;\r\n // enable fake (chess-like) opacity\r\n this.fakeOpacity = false;\r\n // render only depth, don't take care about the pixel color (used for transparency depth prepass)\r\n this.prepassTransparancy = false;\r\n // used to render pixel positions\r\n this.colorFromPos = false;\r\n // used to render shadowmap\r\n this.shadowmap = false;\r\n // used to describe shadowmap type\r\n this.shadowmapType = 'random';\r\n // used to render pixel view deph\r\n this.colorFromDepth = false;\r\n // mark that rendering is for orthographic camera\r\n this.orthoCam = false;\r\n // used to render dashed line\r\n this.dashedLine = false;\r\n // mark as transparent\r\n this.transparent = true;\r\n // mark as thick lines\r\n this.thickLine = false;\r\n // makes fog begin transparency (required for transparent background)\r\n this.fogTransparent = false;\r\n // used to render surface normals to G buffer for ssao effect\r\n this.normalsToGBuffer = false;\r\n // used for toon material\r\n this.toonShading = false;\r\n\r\n // uber options of \"root\" materials are inherited from single uber-options object that resides in prototype\r\n this.uberOptions = Object.create(UberMaterial.prototype.uberOptions);\r\n\r\n // set default values\r\n super.setValues({\r\n glslVersion: THREE.GLSL3,\r\n vertexShader: this.precisionString() + vertexShader,\r\n fragmentShader: this.precisionString() + fragmentShader,\r\n uniforms: THREE.UniformsUtils.clone(defaultUniforms),\r\n lights: true,\r\n fog: true,\r\n side: THREE.DoubleSide,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n precisionString() {\r\n const { precision } = capabilities;\r\n const str = `precision ${precision} float;\\n`\r\n + `precision ${precision} int;\\n\\n`;\r\n return str;\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n\r\n this.fragmentShader = source.fragmentShader;\r\n this.vertexShader = source.vertexShader;\r\n\r\n this.uniforms = THREE.UniformsUtils.clone(source.uniforms);\r\n this.defines = { ...source.defines };\r\n this.extensions = source.extensions;\r\n\r\n this.fog = source.fog;\r\n this.instancedPos = source.instancedPos;\r\n this.instancedMatrix = source.instancedMatrix;\r\n this.attrColor = source.attrColor;\r\n this.attrColor2 = source.attrColor2;\r\n this.attrAlphaColor = source.attrAlphaColor;\r\n this.overrideColor = source.overrideColor;\r\n this.sphereSprite = source.sphereSprite;\r\n this.cylinderSprite = source.cylinderSprite;\r\n this.zClip = source.zClip;\r\n this.clipPlane = source.clipPlane;\r\n this.fakeOpacity = source.fakeOpacity;\r\n this.colorFromPos = source.colorFromPos;\r\n this.shadowmap = source.shadowmap;\r\n this.shadowmapType = source.shadowmapType;\r\n this.colorFromDepth = source.colorFromDepth;\r\n this.orthoCam = source.orthoCam;\r\n this.prepassTransparancy = source.prepassTransparancy;\r\n this.dashedLine = source.dashedLine;\r\n this.thickLine = source.thickLine;\r\n this.fogTransparent = source.fogTransparent;\r\n this.normalsToGBuffer = source.normalsToGBuffer;\r\n this.toonShading = source.toonShading;\r\n\r\n this.uberOptions.copy(source.uberOptions);\r\n\r\n return this;\r\n }\r\n\r\n // create copy of this material\r\n // its options are prototyped after this material's options\r\n createInstance() {\r\n const inst = new UberMaterial();\r\n inst.copy(this);\r\n inst.uberOptions = Object.create(this.uberOptions);\r\n return inst;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n const extensions = {};\r\n\r\n if (this.fog) {\r\n defines.USE_FOG = 1;\r\n }\r\n if (this.instancedPos) {\r\n defines.INSTANCED_POS = 1;\r\n }\r\n if (this.instancedMatrix) {\r\n defines.INSTANCED_MATRIX = 1;\r\n }\r\n if (this.attrColor) {\r\n defines.ATTR_COLOR = 1;\r\n }\r\n if (this.attrColor2) {\r\n defines.ATTR_COLOR2 = 1;\r\n }\r\n if (this.attrAlphaColor) {\r\n defines.ATTR_ALPHA_COLOR = 1;\r\n }\r\n if (this.overrideColor) {\r\n defines.OVERRIDE_COLOR = 1;\r\n }\r\n if (this.sphereSprite) {\r\n defines.SPHERE_SPRITE = 1;\r\n extensions.fragDepth = true;\r\n }\r\n if (this.cylinderSprite) {\r\n defines.CYLINDER_SPRITE = 1;\r\n extensions.fragDepth = true;\r\n }\r\n if (this.zClip) {\r\n defines.ZCLIP = 1;\r\n }\r\n if (this.clipPlane) {\r\n defines.CLIP_PLANE = 1;\r\n }\r\n if (this.fakeOpacity) {\r\n defines.FAKE_OPACITY = 1;\r\n }\r\n if (this.lights) {\r\n defines.USE_LIGHTS = 1;\r\n }\r\n if (this.colorFromPos) {\r\n defines.COLOR_FROM_POS = 1;\r\n }\r\n if (this.shadowmap) {\r\n defines.SHADOWMAP = 1;\r\n if (this.shadowmapType === 'pcf') {\r\n defines.SHADOWMAP_PCF_SHARP = 1;\r\n } else if (this.shadowmapType === 'random') {\r\n defines.SHADOWMAP_PCF_RAND = 1;\r\n } else {\r\n defines.SHADOWMAP_BASIC = 1;\r\n }\r\n }\r\n if (this.colorFromDepth) {\r\n defines.COLOR_FROM_DEPTH = 1;\r\n }\r\n if (this.orthoCam) {\r\n defines.ORTHOGRAPHIC_CAMERA = 1;\r\n }\r\n if (this.prepassTransparancy) {\r\n defines.PREPASS_TRANSP = 1;\r\n }\r\n if (this.dashedLine) {\r\n defines.DASHED_LINE = 1;\r\n }\r\n if (this.thickLine) {\r\n defines.THICK_LINE = 1;\r\n }\r\n if (this.fogTransparent) {\r\n defines.FOG_TRANSPARENT = 1;\r\n }\r\n if (this.normalsToGBuffer) {\r\n extensions.drawBuffers = true;\r\n defines.NORMALS_TO_G_BUFFER = 1;\r\n }\r\n if (this.toonShading) {\r\n defines.TOON_SHADING = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n this.extensions = extensions;\r\n }\r\n\r\n setUberOptions(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n for (const key in values) {\r\n if (!values.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n\r\n if (this.uberOptions[key] instanceof THREE.Color) {\r\n this.uberOptions[key] = values[key].clone();\r\n } else {\r\n this.uberOptions[key] = values[key];\r\n }\r\n }\r\n }\r\n\r\n clone(shallow) {\r\n if (!shallow) {\r\n return super.clone();\r\n }\r\n return this.createInstance();\r\n }\r\n\r\n updateUniforms() {\r\n const self = this;\r\n\r\n uberOptionNames.forEach((p) => {\r\n if (self.uniforms.hasOwnProperty(p)) {\r\n if (self.uberOptions[p] instanceof THREE.Color\r\n || self.uberOptions[p] instanceof THREE.Matrix4) {\r\n self.uniforms[p].value = self.uberOptions[p].clone();\r\n } else {\r\n self.uniforms[p].value = self.uberOptions[p];\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\nUberMaterial.prototype.uberOptions = uberOptions;\r\n\r\nexport default UberMaterial;\r\n","import UberMaterial from '../shaders/UberMaterial';\r\n\r\nexport default function (SuperClass) {\r\n class NewObjectType extends SuperClass {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.onBeforeRender = NewObjectType.prototype.onBeforeRender;\r\n }\r\n\r\n onBeforeRender(renderer, scene, camera, geometry, material, group) {\r\n this._onBeforeRender(renderer, scene, camera, geometry, material, group);\r\n this._update();\r\n }\r\n\r\n _onBeforeRender() {\r\n }\r\n\r\n _update() {\r\n const { material } = this;\r\n if (!material) {\r\n return;\r\n }\r\n\r\n if (material instanceof UberMaterial) {\r\n material.updateUniforms();\r\n }\r\n }\r\n }\r\n\r\n return NewObjectType;\r\n}\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass ZSpriteMesh extends Mesh {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n\r\n _onBeforeRender(renderer, scene, camera, _geometry, _material, _group) {\r\n Mesh.prototype._onBeforeRender.call(this, renderer, scene, camera);\r\n const { material } = this;\r\n if (!material) {\r\n return;\r\n }\r\n\r\n if (material.uniforms.invModelViewMatrix) {\r\n // NOTE: update of modelViewMatrix inside threejs is done after onBeforeRender call,\r\n // so we have to do it manually in that place\r\n this.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, this.matrixWorld);\r\n // get inverse matrix\r\n material.uniforms.invModelViewMatrix.value.copy(this.modelViewMatrix).invert();\r\n material.uniforms.nearPlaneValue.value = camera.near;\r\n material.uniformsNeedUpdate = true;\r\n }\r\n }\r\n}\r\n\r\nexport default ZSpriteMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass ZClippedMesh extends Mesh {\r\n constructor(geometry, material) {\r\n super(geometry, material);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n\r\n static _mvLength = new THREE.Vector3();\r\n\r\n static _center = new THREE.Vector3();\r\n\r\n static _modelView = new THREE.Matrix4();\r\n\r\n _onBeforeRender(renderer, scene, camera) {\r\n Mesh.prototype._onBeforeRender.call(this, renderer, scene, camera);\r\n\r\n const geo = this.geometry;\r\n const { material } = this;\r\n if (!geo.zClip || !material.uberOptions) {\r\n return;\r\n }\r\n\r\n const zClipCoef = 0.5;\r\n\r\n const modelView = ZClippedMesh._modelView;\r\n const mvLength = ZClippedMesh._mvLength;\r\n const center = ZClippedMesh._center;\r\n\r\n modelView.multiplyMatrices(this.matrixWorld, camera.matrixWorldInverse);\r\n const s = mvLength.setFromMatrixColumn(modelView, 0).length();\r\n center.copy(geo.boundingSphere.center);\r\n\r\n this.localToWorld(center);\r\n material.uberOptions.zClipValue = camera.position.z - center.z\r\n - s * (zClipCoef * geo.boundingSphere.radius);\r\n }\r\n}\r\n\r\nexport default ZClippedMesh;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport CSS2DObject from '../CSS2DObject';\r\nimport utils from '../../utils';\r\n\r\nclass TextMesh extends THREE.Group {\r\n constructor(geometry, _material) {\r\n super();\r\n this.geometry = geometry;\r\n\r\n const self = this;\r\n self.initialized = false;\r\n this.geometry.addEventListener('update', () => {\r\n self.update();\r\n });\r\n }\r\n\r\n init() {\r\n const { children } = this;\r\n for (let i = children.length - 1; i >= 0; --i) {\r\n this.remove(children[i]);\r\n }\r\n\r\n const { items, userData } = this.geometry;\r\n for (let i = 0, n = items.length; i < n; ++i) {\r\n const srcItem = items[i];\r\n if (!srcItem) {\r\n continue;\r\n }\r\n const item = utils.shallowCloneNode(srcItem);\r\n const label = new CSS2DObject(item);\r\n label.userData = _.clone(userData);\r\n const el = label.getElement();\r\n el.style.visibility = 'visible';\r\n label.source = srcItem;\r\n this.add(label);\r\n }\r\n this.initialized = true;\r\n }\r\n\r\n update() {\r\n const geo = this.geometry;\r\n if (!geo.needsUpdate) {\r\n return;\r\n }\r\n const { children } = this;\r\n if (!this.initialized) {\r\n this.init();\r\n }\r\n\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n const item = child.source;\r\n child.position.copy(item.worldPos);\r\n child.userData.color = item.opts.color;\r\n child.userData.background = item.opts.background;\r\n }\r\n }\r\n}\r\n\r\nexport default TextMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass SimpleMesh extends Mesh {\r\n constructor(geometry, material) {\r\n super(geometry, material);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n}\r\n\r\nexport default SimpleMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\nconst _viewport = new THREE.Vector2();\r\n\r\nclass ThickLineMesh extends Mesh {\r\n _onBeforeRender(renderer, scene, camera, _geometry, _material, _group) {\r\n const { material } = this;\r\n if (!material.uberOptions) {\r\n return;\r\n }\r\n\r\n material.uberOptions.projMatrixInv.copy(camera.projectionMatrix).invert();\r\n renderer.getSize(_viewport);\r\n material.uberOptions.viewport.set(_viewport.width, _viewport.height);\r\n }\r\n}\r\n\r\nexport default ThickLineMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass InstancedMesh extends Mesh {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n}\r\n\r\nexport default InstancedMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\nimport ZSpriteMesh from './ZSpriteMesh';\r\nimport ZClippedMesh from './ZClippedMesh';\r\nimport TextMesh from './TextMesh';\r\nimport SimpleMesh from './SimpleMesh';\r\nimport ThickLineMesh from './ThickLineMesh';\r\nimport InstancedMesh from './InstancedMesh';\r\n\r\nexport default {\r\n ZClipped: ZClippedMesh,\r\n ZSprite: ZSpriteMesh,\r\n Text: TextMesh,\r\n Line: UberObject(THREE.Line),\r\n LineSegments: UberObject(THREE.LineSegments),\r\n Mesh: SimpleMesh,\r\n ThickLineMesh,\r\n Instanced: InstancedMesh,\r\n};\r\n","import geometries from '../geometries/geometries';\r\nimport meshes from './meshes';\r\nimport ThickLinesGeometry from '../geometries/ThickLinesGeometry';\r\n\r\nfunction setMatParams(params, uniforms) {\r\n return function (material) {\r\n material.setValues(params);\r\n material.setUberOptions(uniforms);\r\n };\r\n}\r\n\r\nfunction _createInstancedCylinders(useZSprites, openEnded) {\r\n function Geometry(a, b) {\r\n return new geometries.Instanced2CCylindersGeometry(a, b, useZSprites, openEnded);\r\n }\r\n return {\r\n Geometry,\r\n Object: useZSprites ? meshes.ZSprite : meshes.Instanced,\r\n initMaterial: setMatParams({\r\n instancedMatrix: true,\r\n attrColor: true,\r\n attrColor2: true,\r\n attrAlphaColor: true,\r\n cylinderSprite: useZSprites,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createLineSegmentsGeoTriplet(geo, renderParams) {\r\n const thickLines = geo.prototype instanceof ThickLinesGeometry;\r\n const lineWidth = renderParams.lineWidth || 0;\r\n return {\r\n Geometry: geo,\r\n Object: thickLines ? meshes.ThickLineMesh : meshes.LineSegments,\r\n initMaterial: setMatParams({\r\n lights: false,\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n thickLine: thickLines,\r\n }, {\r\n lineWidth,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createSimpleGeoTriplet(geoClass) {\r\n return {\r\n Geometry: geoClass,\r\n Object: meshes.Mesh,\r\n initMaterial: setMatParams({\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createIsoSurfaceGeoTriplet(geoClass, caps, settings, renderParams) {\r\n const surfaceOpts = {\r\n wireframe: !!renderParams.wireframe,\r\n fakeOpacity: settings.now.isoSurfaceFakeOpacity,\r\n zClip: renderParams.zClip,\r\n };\r\n return {\r\n Geometry: geoClass,\r\n Object: meshes.ZClipped,\r\n initMaterial: setMatParams({\r\n attrColor: true,\r\n attrAlphaColor: false,\r\n wireframe: surfaceOpts.wireframe,\r\n fakeOpacity: surfaceOpts.fakeOpacity,\r\n zClip: surfaceOpts.zClip,\r\n }),\r\n };\r\n}\r\n\r\nclass MeshCreator {\r\n static createSpheres(caps, settings) {\r\n const useZSprites = settings.now.zSprites;\r\n function Geometry(a, b) {\r\n return new geometries.InstancedSpheresGeometry(a, b, useZSprites);\r\n }\r\n return {\r\n Geometry,\r\n Object: useZSprites ? meshes.ZSprite : meshes.Instanced,\r\n initMaterial: setMatParams({\r\n instancedPos: true,\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n sphereSprite: useZSprites,\r\n }),\r\n };\r\n }\r\n\r\n static create2CClosedCylinders(_caps, _settings) {\r\n return _createInstancedCylinders(false, false);\r\n }\r\n\r\n static create2CCylinders(caps, settings) {\r\n return _createInstancedCylinders(settings.now.zSprites, true);\r\n }\r\n\r\n static create2CLines(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.TwoColorLinesGeometry, renderParams);\r\n }\r\n\r\n static createCrosses(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.CrossGeometry, renderParams);\r\n }\r\n\r\n static createExtrudedChains(_caps, _settings) {\r\n return _createSimpleGeoTriplet(geometries.ExtrudedObjectsGeometry);\r\n }\r\n\r\n static createChunkedLines(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.ChunkedLinesGeometry, renderParams);\r\n }\r\n\r\n static createQuickSurface(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.QuickSurfGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createContactSurface(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.ContactSurfaceGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createSASSES(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.SSIsosurfaceGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createLabels(_caps, _settings) {\r\n return {\r\n Geometry: geometries.LabelsGeometry,\r\n Object: meshes.Text,\r\n initMaterial() {\r\n },\r\n };\r\n }\r\n}\r\n\r\nexport default MeshCreator;\r\n","import * as THREE from 'three';\r\nimport gfxutils from '../gfxutils';\r\n\r\nclass TransformGroup extends THREE.Object3D {\r\n static _inverseMatrix = new THREE.Matrix4();\r\n\r\n static _ray = new THREE.Ray();\r\n\r\n constructor(geometry, geoParams, material, transforms) {\r\n super();\r\n this._geometry = geometry;\r\n this._geoParams = geoParams;\r\n const mat = material.createInstance();\r\n geoParams.initMaterial(mat);\r\n this._material = mat;\r\n this._transforms = transforms.length > 0 ? transforms : [new THREE.Matrix4()];\r\n const meshes = this._createMeshes(geometry);\r\n for (let i = 0, n = meshes.length; i < n; ++i) {\r\n this.add(meshes[i]);\r\n }\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const ray = TransformGroup._ray;\r\n const inverseMatrix = TransformGroup._inverseMatrix;\r\n const { children } = this;\r\n ray.copy(raycaster.ray);\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n\r\n if (!gfxutils.belongToSelectLayers(child)) {\r\n continue;\r\n }\r\n\r\n child.updateMatrixWorld();\r\n const mtx = child.matrixWorld;\r\n inverseMatrix.copy(mtx).invert();\r\n raycaster.ray.copy(ray).applyMatrix4(inverseMatrix);\r\n const childIntersects = [];\r\n this._geometry.raycast(raycaster, childIntersects);\r\n\r\n for (let j = 0, ciCount = childIntersects.length; j < ciCount; ++j) {\r\n const inters = childIntersects[j];\r\n if (inters.point) {\r\n inters.point.applyMatrix4(mtx);\r\n inters.distance = ray.origin.distanceTo(inters.point);\r\n }\r\n inters.object = child;\r\n intersects[intersects.length] = inters;\r\n }\r\n }\r\n raycaster.ray.copy(ray);\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const geos = this._geometry.getSubset(chunkIndices);\r\n const subset = [];\r\n let subIdx = 0;\r\n\r\n for (let i = 0, n = geos.length; i < n; ++i) {\r\n const meshes = this._createMeshes(geos[i]);\r\n for (let j = 0, meshCnt = meshes.length; j < meshCnt; ++j) {\r\n subset[subIdx++] = meshes[j];\r\n }\r\n }\r\n\r\n return subset;\r\n }\r\n\r\n _createMeshes(geometry) {\r\n const transforms = this._transforms;\r\n const Mesh = this._geoParams.Object;\r\n const material = this._material;\r\n const meshes = [];\r\n for (let i = 0, n = transforms.length; i < n; ++i) {\r\n const mesh = new Mesh(geometry, material);\r\n mesh.applyMatrix4(transforms[i]);\r\n meshes[i] = mesh;\r\n }\r\n\r\n return meshes;\r\n }\r\n}\r\n\r\nexport default TransformGroup;\r\n","import RCGroup from '../../RCGroup';\r\nimport TransformGroup from '../../meshes/TransformGroup';\r\n\r\nfunction wrapper(Name, args) {\r\n const params = [Name].concat(args);\r\n return Name.bind(...params);\r\n}\r\n\r\nclass ChemGroup extends RCGroup {\r\n constructor(geoParams, selection, colorer, mode, transforms, polyComplexity, material) {\r\n super();\r\n if (this.constructor === ChemGroup) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n this._selection = selection;\r\n this._mode = mode;\r\n this._colorer = colorer;\r\n this._chunksIdc = selection.chunks;\r\n this._polyComplexity = polyComplexity;\r\n this._geo = new (wrapper(geoParams.Geometry, this._makeGeoArgs()))();\r\n this._mesh = new TransformGroup(this._geo, geoParams, material, transforms);\r\n this.add(this._mesh);\r\n this._build();\r\n }\r\n\r\n _makeGeoArgs() {\r\n throw new Error('ChemGroup subclass must override _makeGeoArgs() method');\r\n }\r\n\r\n /**\r\n * Builds subset geometry by ATOMS index list\r\n *\r\n * @param {Number} mask - Representation mask\r\n * @param {Boolean} innerOnly - if true returns inner bonds only - without halves\r\n * @returns {Array} Subset geometry\r\n */\r\n getSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : false;\r\n const chunksList = this._calcChunksList(mask, innerOnly);\r\n if (chunksList.length === 0) {\r\n return [];\r\n }\r\n return this._mesh.getSubset(chunksList);\r\n }\r\n\r\n _changeSubsetOpacity(mask, value, innerOnly) {\r\n const chunksList = this._calcChunksList(mask, innerOnly);\r\n if (chunksList.length === 0) {\r\n return;\r\n }\r\n this._geo.setOpacity(chunksList, value);\r\n }\r\n\r\n enableSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : true;\r\n this._changeSubsetOpacity(mask, 1.0, innerOnly);\r\n }\r\n\r\n disableSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : true;\r\n this._changeSubsetOpacity(mask, 0.0, innerOnly);\r\n }\r\n}\r\n\r\nexport default ChemGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass AtomsGroup extends ChemGroup {\r\n raycast(raycaster, intersects) {\r\n const { atoms } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const atomsIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const atomIdx = atomsIdc[inters[i].chunkIdx];\r\n if (atomIdx < atoms.length) {\r\n inters[i].atom = atoms[atomIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const { atoms } = this._selection;\r\n const atomsIdc = this._chunksIdc;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n if ((atom.mask & mask) !== 0) {\r\n chunksList.push(i);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default AtomsGroup;\r\n","import AtomsGroup from './AtomsGroup';\r\n\r\nclass AtomsSphereGroup extends AtomsGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length, this._polyComplexity];\r\n }\r\n\r\n _build() {\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n geo.setItem(i, atom.position, mode.calcAtomRadius(atom));\r\n geo.setColor(i, colorer.getAtomColor(atom, parent));\r\n }\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n geo.setItem(i, frameData.getAtomPos(atomsIdc[i]), mode.calcAtomRadius(atom));\r\n if (updateColor) {\r\n geo.setColor(i, frameData.getAtomColor(colorer, atom));\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default AtomsSphereGroup;\r\n","import AtomsSphereGroup from './AtomsSphereGroup';\r\n\r\nclass AtomsSurfaceGroup extends AtomsSphereGroup {\r\n _makeGeoArgs() {\r\n const selectedAtoms = [];\r\n const { atoms, chunks } = this._selection;\r\n const n = chunks.length;\r\n for (let i = 0; i < n; ++i) {\r\n selectedAtoms[i] = atoms[chunks[i]];\r\n }\r\n const opts = this._mode.getSurfaceOpts();\r\n opts.atoms = selectedAtoms;\r\n return [n, opts];\r\n }\r\n}\r\nexport default AtomsSurfaceGroup;\r\n","/* This is a stub class keep it until SAS/SES is refactored */\r\n\r\nimport AtomsSphereGroup from './AtomsSphereGroup';\r\n\r\nclass AtomsSASSESGroupStub extends AtomsSphereGroup {\r\n _makeGeoArgs() {\r\n const selectedAtoms = [];\r\n const { atoms, chunks } = this._selection;\r\n const n = chunks.length;\r\n for (let i = 0; i < n; ++i) {\r\n selectedAtoms[i] = atoms[chunks[i]];\r\n }\r\n const opts = this._mode.getSurfaceOpts();\r\n opts.atoms = selectedAtoms;\r\n opts.selection = this._selection;\r\n opts.colorMode = this._colorer;\r\n return [n, opts];\r\n }\r\n}\r\n\r\nexport default AtomsSASSESGroupStub;\r\n","import AtomsGroup from './AtomsGroup';\r\nimport utils from '../../../utils';\r\n\r\nfunction adjustColor(color) {\r\n let r = (color >> 16) & 255;\r\n let g = (color >> 8) & 255;\r\n let b = color & 255;\r\n\r\n if (0.2126 * r + 0.7152 * g + 0.0722 * b > 127) {\r\n r = r * 3 / 10;\r\n g = g * 3 / 10;\r\n b = b * 3 / 10;\r\n } else {\r\n r = 255 - ((255 - r) * 3 / 10);\r\n g = 255 - ((255 - g) * 3 / 10);\r\n b = 255 - ((255 - b) * 3 / 10);\r\n }\r\n\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\nfunction inverseColor(color) {\r\n const r = (color >> 16) & 255;\r\n const g = (color >> 8) & 255;\r\n const b = color & 255;\r\n\r\n return ((255 - r) << 16) | ((255 - g) << 8) | (255 - b);\r\n}\r\n\r\nfunction getAtomText(atom) {\r\n if (atom.name.getNode() !== null) {\r\n return atom.name.getNode();\r\n }\r\n\r\n return atom.getVisualName();\r\n}\r\n\r\nconst colorMappings = {\r\n none(c) {\r\n return c;\r\n },\r\n adjust: adjustColor,\r\n inverse: inverseColor,\r\n};\r\n\r\nfunction propagateColor(color, rule) {\r\n let result;\r\n if (colorMappings.hasOwnProperty(rule)) {\r\n result = utils.hexColor(colorMappings[rule](color));\r\n } else {\r\n const val = parseInt(rule, 16);\r\n if (!Number.isNaN(val) && rule.toLowerCase().startsWith('0x')) {\r\n result = utils.hexColor(val);\r\n } else {\r\n result = '#000000';\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nconst templateMappings = {\r\n serial(a) {\r\n return a.serial;\r\n },\r\n name(a) {\r\n return a.getVisualName();\r\n },\r\n elem(a) {\r\n return a.element.name;\r\n },\r\n residue(a) {\r\n return a.residue.getType().getName();\r\n },\r\n sequence(a) {\r\n return a.residue.getSequence();\r\n },\r\n chain(a) {\r\n return a.residue.getChain().getName();\r\n },\r\n hetatm(a) {\r\n return a.isHet();\r\n },\r\n water(a) {\r\n return a.residue.getType().getName() === 'HOH' || a.residue.getType().getName() === 'WAT';\r\n },\r\n};\r\n\r\nconst parseTemplate = function (atom, str) {\r\n return str.replace(/\\{\\{(\\s*\\w+\\s*)\\}\\}/g, (m) => {\r\n let key = m.replace(/\\s+/g, '');\r\n key = key.substring(2, key.length - 2).toLowerCase();\r\n\r\n if (templateMappings.hasOwnProperty(key)) {\r\n return templateMappings[key](atom);\r\n }\r\n return 'null';\r\n });\r\n};\r\n\r\nclass AtomsTextGroup extends AtomsGroup {\r\n _makeGeoArgs() {\r\n const opts = this._mode.getLabelOpts();\r\n return [this._selection.chunks.length, opts];\r\n }\r\n\r\n _build() {\r\n const opts = this._mode.getLabelOpts();\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms, parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n const text = opts.template ? parseTemplate(atom, opts.template) : getAtomText(atom);\r\n if (!text) {\r\n continue;\r\n }\r\n const color = colorer.getAtomColor(atom, parent);\r\n const fgColor = parseInt(propagateColor(color, opts.fg).substring(1), 16);\r\n const bgColor = opts.showBg ? parseInt(propagateColor(color, opts.bg).substring(1), 16) : 'transparent';\r\n geo.setItem(i, atom.position, text);\r\n geo.setColor(i, fgColor, bgColor);\r\n }\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const opts = this._mode.getLabelOpts();\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n const text = opts.template ? parseTemplate(atom, opts.template) : getAtomText(atom);\r\n if (!text) {\r\n continue;\r\n }\r\n const color = frameData.getAtomColor(colorer, atom);\r\n const fgColor = parseInt(propagateColor(color, opts.fg).substring(1), 16);\r\n const bgColor = opts.showBg ? parseInt(propagateColor(color, opts.bg).substring(1), 16) : 'transparent';\r\n geo.setItem(i, frameData.getAtomPos(atomsIdc[i]), text);\r\n if (updateColor) {\r\n geo.setColor(i, fgColor, bgColor);\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default AtomsTextGroup;\r\n","import * as THREE from 'three';\r\nimport AtomsGroup from './AtomsGroup';\r\n\r\nfunction _slerp(omega, v1, v2, t) {\r\n const oSin = Math.sin(omega);\r\n return v1.clone().multiplyScalar(Math.sin((1 - t) * omega) / oSin).addScaledVector(v2, Math.sin(t * omega) / oSin);\r\n}\r\n\r\nclass AromaticGroup extends AtomsGroup {\r\n _buildInner(radOffset, addChunk) {\r\n const chunksToIdx = this._selection.chunks;\r\n\r\n const prevVector = new THREE.Vector3();\r\n const currVector = new THREE.Vector3();\r\n const segmentsHeight = this._segmentsHeight;\r\n const leprStep = 1.0 / segmentsHeight;\r\n const colorer = this._colorer;\r\n\r\n const { cycles, parent } = this._selection;\r\n let chunkIdx = 0;\r\n let currAtomIdx = chunksToIdx[chunkIdx];\r\n\r\n for (let cIdx = 0, cCount = cycles.length; cIdx < cCount; ++cIdx) {\r\n const cycle = cycles[cIdx];\r\n const cycAtoms = cycle.atoms;\r\n const chunkPoints = [];\r\n const tmpDir = [];\r\n const { center } = cycle;\r\n const cycleRad = cycle.radius - radOffset;\r\n const n = cycAtoms.length;\r\n let i = 0;\r\n const prevPos = cycAtoms[n - 1].position;\r\n let currPos = cycAtoms[i].position;\r\n prevVector.subVectors(prevPos, center);\r\n currVector.subVectors(currPos, center);\r\n const upDir = currVector.clone().cross(prevVector).normalize();\r\n\r\n for (; i < n; ++i) {\r\n const omega = prevVector.angleTo(currVector);\r\n tmpDir[i] = _slerp(omega, prevVector, currVector, 0.5).normalize();\r\n currPos = cycAtoms[(i + 1) % n].position;\r\n prevVector.copy(currVector);\r\n currVector.subVectors(currPos, center);\r\n }\r\n\r\n for (i = 0; i < n; ++i) {\r\n if (cycAtoms[i].index !== currAtomIdx) {\r\n continue;\r\n }\r\n const start = tmpDir[i];\r\n const end = tmpDir[(i + 1) % n];\r\n const color = colorer.getAtomColor(cycAtoms[i], parent);\r\n const currAngle = start.angleTo(end);\r\n\r\n for (let j = 0; j <= segmentsHeight; ++j) {\r\n chunkPoints[j] = _slerp(currAngle, start, end, j * leprStep).multiplyScalar(cycleRad).add(center);\r\n }\r\n\r\n addChunk(chunkIdx++, color, chunkPoints, center, upDir);\r\n currAtomIdx = chunksToIdx[chunkIdx];\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default AromaticGroup;\r\n","import * as THREE from 'three';\r\nimport gfxutils from '../../gfxutils';\r\nimport AromaticGroup from './AromaticGroup';\r\n\r\nfunction _createShape(rad, parts) {\r\n const pts = [];\r\n for (let i = 0; i < parts; ++i) {\r\n const a = -2 * i / parts * Math.PI;\r\n pts.push(new THREE.Vector3(Math.cos(a) * rad, Math.sin(a) * rad, 0));\r\n }\r\n return pts;\r\n}\r\nconst { calcChunkMatrix } = gfxutils;\r\n\r\nclass AromaticTorusGroup extends AromaticGroup {\r\n _build() {\r\n const segmentsHeight = this._segmentsHeight;\r\n const torusRad = this._mode.getAromRadius();\r\n const radiusV = new THREE.Vector2(torusRad, torusRad);\r\n const radOffset = this._mode.calcStickRadius() + 2 * torusRad;\r\n const lookAtVector = new THREE.Vector3();\r\n const mtc = [];\r\n const geo = this._geo;\r\n this._buildInner(radOffset, (chunkIdx, color, points, center, upDir) => {\r\n for (let j = 0; j <= segmentsHeight; ++j) {\r\n const currPoint = points[j];\r\n const currDir = currPoint.clone().sub(center).cross(upDir);\r\n lookAtVector.addVectors(currPoint, currDir);\r\n mtc[j] = calcChunkMatrix(currPoint, lookAtVector, upDir, radiusV);\r\n }\r\n geo.setItem(chunkIdx, mtc);\r\n geo.setColor(chunkIdx, color);\r\n });\r\n geo.finalize();\r\n }\r\n\r\n _makeGeoArgs() {\r\n this._segmentsHeight = this._polyComplexity;\r\n return [_createShape(1.0, this._polyComplexity), this._segmentsHeight + 1, this._selection.chunks.length];\r\n }\r\n}\r\n\r\nexport default AromaticTorusGroup;\r\n","import AromaticGroup from './AromaticGroup';\r\n\r\nclass AromaticLinesGroup extends AromaticGroup {\r\n _build() {\r\n const geo = this._geo;\r\n const radOffset = this._mode.getAromaticOffset();\r\n this._buildInner(radOffset, (chunkIdx, color, points) => {\r\n let prevPt = points[0];// do not replace with start\r\n for (let j = 1; j <= this._segmentsHeight; ++j) {\r\n const currPoint = points[j];\r\n geo.setSegment(chunkIdx, j - 1, prevPt, currPoint);\r\n prevPt = currPoint;\r\n }\r\n geo.setColor(chunkIdx, color);\r\n });\r\n geo.finalize();\r\n }\r\n\r\n _makeGeoArgs() {\r\n this._segmentsHeight = this._mode.getAromaticArcChunks();\r\n return [this._selection.chunks.length, this._segmentsHeight, true];\r\n }\r\n}\r\n\r\nexport default AromaticLinesGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass ResiduesGroup extends ChemGroup {\r\n raycast(raycaster, intersects) {\r\n const { residues } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const resIdx = chunksIdc[inters[i].chunkIdx];\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const { residues } = this._selection;\r\n const resIdc = this._chunksIdc;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n if ((res._mask & mask) !== 0) {\r\n chunksList.push(i);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default ResiduesGroup;\r\n","import ResiduesGroup from './ResiduesGroup';\r\n\r\nclass NucleicItemGroup extends ResiduesGroup {\r\n raycast(raycaster, intersects) {\r\n const { residues } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const resIdx = chunksIdc[Math.floor(inters[i].chunkIdx / 2)];\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const stickRad = this._mode.calcStickRadius();\r\n let chunkIdx = 0;\r\n\r\n const resIdc = this._selection.chunks;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n const color = colorer.getResidueColor(res, parent);\r\n this._processItem(chunkIdx++, res._cylinders[0], res._cylinders[1], stickRad, color);\r\n }\r\n geo.finalize();\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n let chunkIdx = 0;\r\n const { residues } = this._selection;\r\n const resIdc = this._chunksIdc;\r\n\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n if ((res._mask & mask) !== 0) {\r\n chunksList[chunkIdx++] = 2 * i;\r\n chunksList[chunkIdx++] = 2 * i + 1;\r\n }\r\n }\r\n return chunksList;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const residues = frameData.getResidues();\r\n const { parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const stickRad = this._mode.calcStickRadius();\r\n let chunkIdx = 0;\r\n\r\n const resIdc = this._selection.chunks;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n const color = colorer.getResidueColor(res, parent);\r\n this._processItem(chunkIdx++, res._cylinders[0], res._cylinders[1], stickRad, color);\r\n }\r\n geo.finishUpdate();\r\n }\r\n}\r\n\r\nexport default NucleicItemGroup;\r\n","import NucleicItemGroup from './NucleicItemGroup';\r\n\r\nclass NucleicCylindersGroup extends NucleicItemGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length, this._polyComplexity];\r\n }\r\n\r\n _processItem(chunkIdx, cyl1, cyl2, stickRad, color) {\r\n const geo = this._geo;\r\n geo.setItem(chunkIdx, cyl1, cyl2, stickRad);\r\n geo.setColor(chunkIdx, color, color);\r\n }\r\n}\r\n\r\nexport default NucleicCylindersGroup;\r\n","import NucleicItemGroup from './NucleicItemGroup';\r\n\r\nclass NucleicSpheresGroup extends NucleicItemGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length * 2, this._polyComplexity];\r\n }\r\n\r\n _processItem(chunkIdx, cyl1, cyl2, stickRad, color) {\r\n const geo = this._geo;\r\n let idx = chunkIdx * 2;\r\n geo.setItem(idx, cyl1, stickRad);\r\n geo.setColor(idx, color);\r\n idx++;\r\n geo.setItem(idx, cyl2, stickRad);\r\n geo.setColor(idx, color);\r\n }\r\n}\r\n\r\nexport default NucleicSpheresGroup;\r\n","import * as THREE from 'three';\r\nimport { Smooth } from '../../../../vendor/js/Smooth';\r\nimport gfxutils from '../../gfxutils';\r\nimport chem from '../../../chem';\r\n\r\nconst { ResidueType } = chem;\r\n\r\nconst calcMatrix = gfxutils.calcChunkMatrix;\r\n\r\nfunction _buildStructureInterpolator(points, tension) {\r\n const path = Smooth(points, {\r\n method: Smooth.METHOD_CUBIC,\r\n clip: Smooth.CLIP_CLAMP,\r\n cubicTension: tension,\r\n scaleTo: 1,\r\n });\r\n\r\n return function (t, argTrans) {\r\n let transformT = argTrans;\r\n if (transformT === null) {\r\n // map our range to the [second .. last but one]\r\n transformT = function (tt) {\r\n return (tt * ((points.length - 1) - 2) + 1) / (points.length - 1);\r\n };\r\n }\r\n const newt = transformT(t);\r\n const ans = path(newt);\r\n return new THREE.Vector3(ans[0], ans[1], ans[2]);\r\n };\r\n}\r\n\r\nfunction _addPoints(centerPoints, topPoints, idx, residue) {\r\n if (!residue._isValid) {\r\n centerPoints[idx] = centerPoints[idx - 1];\r\n topPoints[idx] = topPoints[idx - 1];\r\n return;\r\n }\r\n const cp = residue._controlPoint;\r\n centerPoints[idx] = [cp.x, cp.y, cp.z];\r\n const tp = cp.clone().add(residue._wingVector);\r\n topPoints[idx] = [tp.x, tp.y, tp.z];\r\n}\r\n\r\nfunction _addPointsForLoneResidue(centerPoints, topPoints, idx, residue) {\r\n const nucleic = (residue._type.flags & ResidueType.Flags.NUCLEIC) !== 0;\r\n const nameFrom = nucleic ? 'C5\\'' : 'N';\r\n const nameTo = nucleic ? 'C3\\'' : 'C';\r\n\r\n let posFrom;\r\n let posTo;\r\n residue.forEachAtom((atom) => {\r\n const name = atom.getVisualName();\r\n if (!posFrom && name === nameFrom) {\r\n posFrom = atom.position;\r\n } else if (!posTo && name === nameTo) {\r\n posTo = atom.position;\r\n }\r\n });\r\n\r\n // provide a fallback for unknown residues\r\n if (!(posFrom && posTo)) {\r\n posFrom = residue._firstAtom.position;\r\n posTo = residue._lastAtom.position;\r\n }\r\n\r\n if (posFrom && posTo) {\r\n const shift = posTo.clone().sub(posFrom);\r\n\r\n const wing = residue._wingVector;\r\n const cp = residue._controlPoint;\r\n const tp = cp.clone().add(wing);\r\n\r\n const cpPrev = cp.clone().sub(shift);\r\n const tpPrev = cpPrev.clone().add(wing);\r\n centerPoints[idx] = [cpPrev.x, cpPrev.y, cpPrev.z];\r\n topPoints[idx] = [tpPrev.x, tpPrev.y, tpPrev.z];\r\n ++idx;\r\n centerPoints[idx] = [cpPrev.x, cpPrev.y, cpPrev.z];\r\n topPoints[idx] = [tpPrev.x, tpPrev.y, tpPrev.z];\r\n ++idx;\r\n\r\n centerPoints[idx] = [cp.x, cp.y, cp.z];\r\n topPoints[idx] = [tp.x, tp.y, tp.z];\r\n ++idx;\r\n\r\n const cpNext = cp.clone().add(shift);\r\n const tpNext = cpNext.clone().add(wing);\r\n centerPoints[idx] = [cpNext.x, cpNext.y, cpNext.z];\r\n topPoints[idx] = [tpNext.x, tpNext.y, tpNext.z];\r\n ++idx;\r\n centerPoints[idx] = [cpNext.x, cpNext.y, cpNext.z];\r\n topPoints[idx] = [tpNext.x, tpNext.y, tpNext.z];\r\n }\r\n}\r\n\r\nfunction _calcPoints(residues, firstIdx, lastIdx, boundaries) {\r\n const left = boundaries.start;\r\n const right = boundaries.end;\r\n function _prevIdx(idx) {\r\n return idx > left && residues[idx - 1]._isValid ? idx - 1 : idx;\r\n }\r\n function _nextIdx(idx) {\r\n return idx < right && residues[idx + 1]._isValid ? idx + 1 : idx;\r\n }\r\n\r\n const topPoints = [];\r\n const centerPoints = [];\r\n let arrIdx = 0;\r\n function _extrapolate2(currIdx, otherIdx) {\r\n const cp = residues[currIdx]._controlPoint.clone().lerp(residues[otherIdx]._controlPoint, -0.25);\r\n const tp = cp.clone().add(residues[currIdx]._wingVector);\r\n centerPoints[arrIdx] = [cp.x, cp.y, cp.z];\r\n topPoints[arrIdx++] = [tp.x, tp.y, tp.z];\r\n centerPoints[arrIdx] = [cp.x, cp.y, cp.z];\r\n topPoints[arrIdx++] = [tp.x, tp.y, tp.z];\r\n }\r\n\r\n // a single disconnected residue\r\n const prevIdx = _prevIdx(firstIdx);\r\n const nextIdx = _nextIdx(lastIdx);\r\n if (prevIdx === nextIdx) {\r\n _addPointsForLoneResidue(centerPoints, topPoints, arrIdx, residues[firstIdx]);\r\n return { centerPoints, topPoints };\r\n }\r\n\r\n // Two points (prev-prev and next-next) are added to support edge conditions for cubic splines, they are ignored\r\n // Another two (prev and next) were added to support the outside of the sub chain\r\n\r\n // prev and prev-prev\r\n if (firstIdx === prevIdx) {\r\n // do the extrapolation\r\n _extrapolate2(firstIdx, _nextIdx(firstIdx));\r\n } else {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[_prevIdx(prevIdx)]);\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[prevIdx]);\r\n }\r\n\r\n // main loop\r\n for (let idx = firstIdx; idx <= lastIdx; ++idx) {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[idx]);\r\n }\r\n\r\n // next and next-next\r\n if (nextIdx === _nextIdx(nextIdx)) {\r\n // do the extrapolation\r\n _extrapolate2(lastIdx, _prevIdx(lastIdx));\r\n } else {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[nextIdx]);\r\n _addPoints(centerPoints, topPoints, arrIdx, residues[_nextIdx(nextIdx)]);\r\n }\r\n return { centerPoints, topPoints };\r\n}\r\n\r\nclass CartoonHelper {\r\n constructor(residues, startIdx, endIdx, segmentsCount, tension, boundaries) {\r\n const pointsArrays = _calcPoints(residues, startIdx, endIdx, boundaries);\r\n this._topInterp = _buildStructureInterpolator(pointsArrays.topPoints, tension);\r\n this._centerInterp = _buildStructureInterpolator(pointsArrays.centerPoints, tension);\r\n\r\n this._shift = 0.5 / (endIdx - startIdx + 2);\r\n this._valueStep = (1.0 - 2 * this._shift) / (2 * (endIdx - startIdx + 1) * (segmentsCount - 1));\r\n this._segmentsCount = segmentsCount;\r\n }\r\n\r\n prepareMatrices(idx, firstRad, secondRad) {\r\n const mtcCount = this._segmentsCount;\r\n const outMtc = new Array(mtcCount);\r\n const currRad = new THREE.Vector2(0, 0);\r\n\r\n const topInterp = this._topInterp;\r\n const cenInterp = this._centerInterp;\r\n\r\n let currentValue = this._shift + this._valueStep * (mtcCount - 1) * idx;\r\n\r\n for (let mtxIdx = 0; mtxIdx < mtcCount; ++mtxIdx) {\r\n const lerpVal = Math.min(1.0, mtxIdx / (mtcCount - 1));\r\n currRad.lerpVectors(firstRad, secondRad, lerpVal);\r\n\r\n const currTop = topInterp(currentValue, null);\r\n const currCenter = cenInterp(currentValue, null);\r\n currentValue += this._valueStep;\r\n const nextCenter = cenInterp(currentValue, null);\r\n\r\n outMtc[mtxIdx] = calcMatrix(currCenter.clone(), nextCenter.clone(), currTop.clone().sub(currCenter), currRad);\r\n }\r\n\r\n return outMtc;\r\n }\r\n}\r\n\r\nexport default CartoonHelper;\r\n","import * as THREE from 'three';\r\nimport ResiduesGroup from './ResiduesGroup';\r\nimport CartoonHelper from './CartoonHelper';\r\n\r\nfunction _createShape(rad, parts) {\r\n const pts = [];\r\n\r\n for (let i = 0; i < parts; ++i) {\r\n // starts from pi/2 because it's important that points are lied on the angles of arrows (visual issues if not)\r\n const a = Math.PI / 2.0 - 2 * Math.PI * i / parts;\r\n\r\n pts.push(new THREE.Vector3(Math.cos(a) * rad, Math.sin(a) * rad, 0));\r\n }\r\n return pts;\r\n}\r\n\r\nfunction _loopThrough(subDiv, residues, segmentsHeight, tension, mode, callback) {\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n const { boundaries } = subDiv[subDivI];\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const idc = [subs[i].start, subs[i].end];\r\n const matrixHelper = new CartoonHelper(residues, idc[0], idc[1], segmentsHeight, tension, boundaries);\r\n let prevLast = null;\r\n const startIdx = subs[i].start * 2;\r\n const endIdx = subs[i].end * 2 + 1;\r\n let prevSecondRad = mode.getResidueRadius(residues[0], 0);\r\n for (let idx = startIdx; idx <= endIdx; ++idx) {\r\n const resIdx = (idx / 2 | 0);\r\n const currRes = residues[resIdx];\r\n const firstRad = mode.getResidueRadius(currRes, idx % 2);\r\n const secondRad = mode.getResidueRadius(currRes, 1 + (idx % 2));\r\n\r\n const mtc = matrixHelper.prepareMatrices(idx - idc[0] * 2, firstRad, secondRad);\r\n mtc.unshift(prevLast === null ? mtc[0] : prevLast);\r\n\r\n // Slope - radius is changed along this residue part\r\n const hasSlope = (firstRad.x !== secondRad.x) || (firstRad.y !== secondRad.y);\r\n // Cut - end radius of previous part not equal to start radius of this part. First section of this part lies in the orthogonal plane\r\n const hasCut = (firstRad.x !== prevSecondRad.x) || (firstRad.y !== prevSecondRad.y);\r\n\r\n callback(currRes, mtc, hasSlope, hasCut);\r\n\r\n prevLast = mtc[segmentsHeight];\r\n prevSecondRad = secondRad;\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass ResiduesSubseqGroup extends ResiduesGroup {\r\n _makeGeoArgs() {\r\n const cmpMultiplier = this._mode.getHeightSegmentsRatio();\r\n this._segmentsHeight = this._polyComplexity * cmpMultiplier | 0;\r\n return [_createShape(1.0, this._polyComplexity), this._segmentsHeight + 1, this._selection.chunks.length * 2];\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const tension = mode.getTension();\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const chunkIdc = [];\r\n _loopThrough(this._selection.subdivs, residues, this._segmentsHeight, tension, mode, (currRes, mtc, hasSlope = false, hasCut = false) => {\r\n const color = colorer.getResidueColor(currRes, parent);\r\n chunkIdc[chunkIdx] = currRes._index;\r\n geo.setItem(chunkIdx, mtc, hasSlope, hasCut);\r\n geo.setColor(chunkIdx++, color);\r\n });\r\n this._chunksIdc = chunkIdc;\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const { parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const tension = mode.getTension();\r\n const geo = this._geo;\r\n const frameRes = frameData.getResidues();\r\n let chunkIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n _loopThrough(this._selection.subdivs, frameRes, this._segmentsHeight, tension, mode, (currRes, mtc) => {\r\n geo.setItem(chunkIdx, mtc);\r\n if (updateColor) {\r\n geo.setColor(chunkIdx, colorer.getResidueColor(currRes, parent));\r\n }\r\n chunkIdx++;\r\n });\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default ResiduesSubseqGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass ResiduesTraceGroup extends ChemGroup {\r\n _makeGeoArgs() {\r\n const subDiv = this._selection.subdivs;\r\n let chunksCount = 0;\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n chunksCount += subs[i].end - subs[i].start;\r\n }\r\n }\r\n return [chunksCount, this._polyComplexity];\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const chunkIdc = [];\r\n const subDiv = this._selection.subdivs;\r\n const stickRad = mode.calcStickRadius();\r\n\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const startIdx = subs[i].start;\r\n const endIdx = subs[i].end;\r\n let prevRes = residues[startIdx];\r\n for (let idx = startIdx + 1; idx <= endIdx; ++idx) {\r\n const currRes = residues[idx];\r\n chunkIdc[chunkIdx] = { first: prevRes._index, second: currRes._index };\r\n geo.setItem(chunkIdx, prevRes._controlPoint, currRes._controlPoint, stickRad);\r\n geo.setColor(chunkIdx, colorer.getResidueColor(prevRes, parent), colorer.getResidueColor(currRes, parent));\r\n chunkIdx++;\r\n prevRes = currRes;\r\n }\r\n }\r\n }\r\n\r\n this._chunksIdc = chunkIdc;\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n\r\n const residues = frameData.getResidues();\r\n const { parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const subDiv = this._selection.subdivs;\r\n const stickRad = mode.calcStickRadius();\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const startIdx = subs[i].start;\r\n const endIdx = subs[i].end;\r\n let prevRes = residues[startIdx];\r\n for (let idx = startIdx + 1; idx <= endIdx; ++idx) {\r\n const currRes = residues[idx];\r\n geo.setItem(chunkIdx, prevRes._controlPoint, currRes._controlPoint, stickRad);\r\n if (updateColor) {\r\n geo.setColor(chunkIdx, colorer.getResidueColor(prevRes, parent), colorer.getResidueColor(currRes, parent));\r\n }\r\n chunkIdx++;\r\n prevRes = currRes;\r\n }\r\n }\r\n }\r\n\r\n geo.finalize();\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const inters = [];\r\n const { residues } = this._selection;\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksToIdx = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const { chunkIdx } = inters[i];\r\n const chunk = chunksToIdx[Math.floor(chunkIdx / 2)];\r\n const resIdx = chunkIdx % 2 === 0 ? chunk.first : chunk.second;\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const chunksToIdx = this._chunksIdc;\r\n const { residues } = this._selection;\r\n for (let i = 0, n = chunksToIdx.length; i < n; ++i) {\r\n const chunk = chunksToIdx[i];\r\n if (residues[chunk.first]._mask & mask) {\r\n chunksList.push(i * 2);\r\n }\r\n if (residues[chunk.second]._mask & mask) {\r\n chunksList.push(i * 2 + 1);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default ResiduesTraceGroup;\r\n","import ChemGroup from './ChemGroup';\r\nimport Bond from '../../../chem/Bond';\r\n\r\nfunction getCylinderCount(bondOrder) {\r\n return bondOrder < 2 ? 1 : bondOrder;\r\n}\r\n\r\nclass BondsGroup extends ChemGroup {\r\n _makeGeoArgs() {\r\n const drawMultiple = this._mode.drawMultiorderBonds();\r\n const showAromatic = this._mode.showAromaticLoops();\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n let bondsCount = 0;\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n bondsCount += this.getBondOrder(bonds[bondsIdc[i]], drawMultiple, showAromatic);\r\n }\r\n return [bondsCount, this._polyComplexity];\r\n }\r\n\r\n getBondOrder(bond, drawMultiple, showAromatic) {\r\n let bondOrder = 1;\r\n if (drawMultiple && (!showAromatic || bond._type !== Bond.BondType.AROMATIC)) {\r\n bondOrder = getCylinderCount(bond._order);\r\n }\r\n return bondOrder;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const { bonds } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const bondsIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const { chunkIdx } = inters[i];\r\n const bondIdx = bondsIdc[Math.floor(chunkIdx / 2)];\r\n if (bondIdx < bonds.length) {\r\n const bond = bonds[bondIdx];\r\n inters[i].atom = chunkIdx % 2 === 0 ? bond._left : bond._right;\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask, innerOnly) {\r\n const chunksList = [];\r\n const { bonds } = this._selection;\r\n const chunksToIdx = this._chunksIdc;\r\n for (let i = 0, n = chunksToIdx.length; i < n; ++i) {\r\n const bond = bonds[chunksToIdx[i]];\r\n if ((bond._left.mask & mask) && (!innerOnly || (bond._right.mask & mask))) {\r\n chunksList.push(2 * i);\r\n }\r\n if ((bond._right.mask & mask) && (!innerOnly || (bond._left.mask & mask))) {\r\n chunksList.push(2 * i + 1);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default BondsGroup;\r\n","import * as THREE from 'three';\r\nimport BondsGroup from './BondsGroup';\r\n\r\nclass BondsCylinderGroup extends BondsGroup {\r\n _build() {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const stickRad = mode.calcStickRadius();\r\n const emptyOffset = mode.calcSpaceFraction();\r\n let normDir;\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const chunksToIdx = [];\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = atom1.position;\r\n const a2Pos = atom2.position;\r\n normDir = bond.calcNormalDir();\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n const minRad = Math.min(mode.calcAtomRadius(atom1), mode.calcAtomRadius(atom2));\r\n const dist = 2 * minRad / order;\r\n const currStickRad = drawMultiple ? Math.min(stickRad, dist * 0.5 * (1.0 - emptyOffset)) : stickRad;\r\n\r\n for (let j = 0; j < order; ++j) {\r\n const scale = dist * (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n chunksToIdx[currBondIdx] = bond._index;\r\n leftPos.copy(a1Pos);\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.copy(a2Pos);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos, currStickRad);\r\n geo.setColor(currBondIdx++, colorer.getAtomColor(atom1, parent), colorer.getAtomColor(atom2, parent));\r\n }\r\n }\r\n\r\n geo.finalize();\r\n this._chunksIdc = chunksToIdx;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const stickRad = mode.calcStickRadius();\r\n const emptyOffset = mode.calcSpaceFraction();\r\n let normDir;\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = frameData.getAtomPos(atom1.index).clone();\r\n const a2Pos = frameData.getAtomPos(atom2.index);\r\n normDir = bond.calcNormalDir();\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n const minRad = Math.min(mode.calcAtomRadius(atom1), mode.calcAtomRadius(atom2));\r\n const dist = 2 * minRad / order;\r\n const currStickRad = drawMultiple ? Math.min(stickRad, dist * 0.5 * (1.0 - emptyOffset)) : stickRad;\r\n\r\n for (let j = 0; j < order; ++j) {\r\n const scale = dist * (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n leftPos.copy(a1Pos);\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.copy(a2Pos);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos, currStickRad);\r\n if (updateColor) {\r\n geo.setColor(currBondIdx, frameData.getAtomColor(colorer, atom1), frameData.getAtomColor(colorer, atom2));\r\n }\r\n currBondIdx++;\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default BondsCylinderGroup;\r\n","import * as THREE from 'three';\r\nimport BondsGroup from './BondsGroup';\r\n\r\nconst STEP_SIZE = 0.15;\r\n\r\nclass BondsLinesGroup extends BondsGroup {\r\n _build() {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const bondDir = new THREE.Vector3();\r\n\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const chunksToIdx = [];\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = atom1.position;\r\n const a2Pos = atom2.position;\r\n const a1Hangs = atom1.bonds.length === 1;\r\n const a2Hangs = atom2.bonds.length === 1;\r\n bondDir.subVectors(a2Pos, a1Pos);\r\n const len = bondDir.length();\r\n const normDir = bond.calcNormalDir();\r\n\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n\r\n for (let j = 0; j < order; ++j) {\r\n leftPos.copy(a1Pos);\r\n rightPos.copy(a2Pos);\r\n let scale = (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n chunksToIdx[currBondIdx] = bond._index;\r\n if (order === 2 && (!a1Hangs && !a2Hangs)) {\r\n scale -= 0.5;\r\n scale *= -1;\r\n }\r\n\r\n if (!a1Hangs && !a2Hangs && order > 1 && scale !== 0) {\r\n leftPos.lerpVectors(a1Pos, a2Pos, STEP_SIZE / (len));\r\n rightPos.lerpVectors(a1Pos, a2Pos, 1.0 - STEP_SIZE / (len));\r\n }\r\n\r\n scale *= STEP_SIZE;\r\n\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos);\r\n geo.setColor(currBondIdx++, colorer.getAtomColor(atom1, parent), colorer.getAtomColor(atom2, parent));\r\n }\r\n }\r\n geo.finalize();\r\n this._chunksIdc = chunksToIdx;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const bondDir = new THREE.Vector3();\r\n\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = frameData.getAtomPos(atom1.index).clone();\r\n const a2Pos = frameData.getAtomPos(atom2.index);\r\n const a1Hangs = atom1.bonds.length === 1;\r\n const a2Hangs = atom2.bonds.length === 1;\r\n bondDir.subVectors(a2Pos, a1Pos);\r\n const len = bondDir.length();\r\n const normDir = bond.calcNormalDir();\r\n\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n\r\n for (let j = 0; j < order; ++j) {\r\n leftPos.copy(a1Pos);\r\n rightPos.copy(a2Pos);\r\n let scale = (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n if (order === 2 && (!a1Hangs && !a2Hangs)) {\r\n scale -= 0.5;\r\n scale *= -1;\r\n }\r\n\r\n if (!a1Hangs && !a2Hangs && order > 1 && scale !== 0) {\r\n leftPos.lerpVectors(a1Pos, a2Pos, STEP_SIZE / (len));\r\n rightPos.lerpVectors(a1Pos, a2Pos, 1.0 - STEP_SIZE / (len));\r\n }\r\n\r\n scale *= STEP_SIZE;\r\n\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos);\r\n if (updateColor) {\r\n geo.setColor(currBondIdx, frameData.getAtomColor(colorer, atom1), frameData.getAtomColor(colorer, atom2));\r\n }\r\n currBondIdx++;\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default BondsLinesGroup;\r\n","import AtomsSphereGroup from './AtomsSphereGroup';\r\nimport AtomsSurfaceGroup from './AtomsSurfaceGroup';\r\nimport AtomsSASSESGroupStub from './AtomsSASSESGroupStub';\r\nimport AtomsTextGroup from './AtomsTextGroup';\r\nimport AromaticTorusGroup from './AromaticTorusGroup';\r\nimport AromaticLinesGroup from './AromaticLinesGroup';\r\nimport NucleicCylindersGroup from './NucleicCylindersGroup';\r\nimport NucleicSpheresGroup from './NucleicSpheresGroup';\r\nimport ResiduesSubseqGroup from './ResiduesSubseqGroup';\r\nimport ResiduesTraceGroup from './ResiduesTraceGroup';\r\nimport BondsCylinderGroup from './BondsCylinderGroup';\r\nimport BondsLinesGroup from './BondsLinesGroup';\r\n\r\nexport default {\r\n AtomsSphereGroup,\r\n AtomsSurfaceGroup,\r\n AtomsSASSESGroupStub,\r\n AtomsTextGroup,\r\n AromaticTorusGroup,\r\n AromaticLinesGroup,\r\n NucleicCylindersGroup,\r\n NucleicSpheresGroup,\r\n ResiduesSubseqGroup,\r\n ResiduesTraceGroup,\r\n BondsCylinderGroup,\r\n BondsLinesGroup,\r\n};\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass AtomsProcessor extends RCGroup {\r\n constructor(AtomsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n this._mode = mode;\r\n const atoms = complex.getAtoms();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const atomsIdc = [];\r\n let atomCount = 0;\r\n component.forEachAtom((atom) => {\r\n if (!self._checkAtom(atom, mask)) {\r\n return;\r\n }\r\n atomsIdc[atomCount++] = atom.index;\r\n });\r\n if (atomCount === 0) {\r\n return;\r\n }\r\n const atomsGroup = new AtomsGroup(geoParams, {\r\n atoms,\r\n chunks: atomsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n atomsGroup._component = component;\r\n self.add(atomsGroup);\r\n });\r\n }\r\n\r\n _checkAtom(atom, mask) {\r\n return atom.mask & mask;\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default AtomsProcessor;\r\n","import AtomsProcessor from './AtomsProcessor';\r\n\r\nclass OrphanAtomsProcessor extends AtomsProcessor {\r\n _checkAtom(atom, mask) {\r\n if (!(atom.mask & mask)) {\r\n return false;\r\n }\r\n\r\n const { bonds } = atom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n if ((bonds[i]._left.mask & mask) && (bonds[i]._right.mask & mask)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\nexport default OrphanAtomsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass ResiduesProcessor extends RCGroup {\r\n constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const residues = complex.getResidues();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n let chunksCount = 0;\r\n const resIdc = [];\r\n component.forEachResidue((residue) => {\r\n if (self._checkResidue(residue, mask)) {\r\n resIdc[chunksCount++] = residue._index;\r\n }\r\n });\r\n\r\n if (chunksCount === 0) {\r\n return;\r\n }\r\n const residuesGroup = new ResidueGroup(geoParams, {\r\n residues,\r\n chunks: resIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n residuesGroup._component = component;\r\n self.add(residuesGroup);\r\n });\r\n }\r\n\r\n checkResidue(residue, mask) {\r\n return residue._mask & mask;\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default ResiduesProcessor;\r\n","import ResidueProcessor from './ResiduesProcessor';\r\n\r\nclass NucleicProcessor extends ResidueProcessor {\r\n _checkResidue(residue, mask) {\r\n return mask & residue._mask && residue._cylinders !== null;\r\n }\r\n}\r\nexport default NucleicProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass SubseqsProcessor extends RCGroup {\r\n constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const residues = complex.getResidues();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const subDivs = component.getMaskedSubdivSequences(mask);\r\n\r\n let chunksCount = 0;\r\n const resIdc = [];\r\n for (let subDivI = 0, subDivN = subDivs.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDivs[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n for (let j = subs[i].start, jEnd = subs[i].end; j <= jEnd; ++j) {\r\n resIdc[chunksCount++] = residues[j]._index;\r\n }\r\n }\r\n }\r\n\r\n if (chunksCount === 0) {\r\n return;\r\n }\r\n const residuesGroup = new ResidueGroup(geoParams, {\r\n residues,\r\n chunks: resIdc,\r\n subdivs: subDivs,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n residuesGroup._component = component;\r\n self.add(residuesGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default SubseqsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass BondsProcessor extends RCGroup {\r\n constructor(BondsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const bonds = complex.getBonds();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const bondsIdc = [];\r\n let bondsCount = 0;\r\n component.forEachBond((bond) => {\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n if (!(atom1.mask & mask) || !(atom2.mask & mask)) {\r\n return;\r\n }\r\n bondsIdc[bondsCount++] = bond._index;\r\n });\r\n if (bondsCount === 0) {\r\n return;\r\n }\r\n const bondsGroup = new BondsGroup(geoParams, {\r\n bonds,\r\n chunks: bondsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n bondsGroup._component = component;\r\n self.add(bondsGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default BondsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass AromaticProcessor extends RCGroup {\r\n constructor(AromaticGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const atoms = complex.getAtoms();\r\n const transforms = complex.getTransforms();\r\n if (!mode.showAromaticLoops()) {\r\n return;\r\n }\r\n\r\n complex.forEachComponent((component) => {\r\n const atomsIdc = [];\r\n let chunksCount = 0;\r\n const cycles = [];\r\n let cycleIdx = 0;\r\n component.forEachCycle((cycle) => {\r\n const cycAtoms = cycle.atoms;\r\n let perCycle = 0;\r\n for (let i = 0, n = cycAtoms.length; i < n; ++i) {\r\n if ((cycAtoms[i].mask & mask) !== 0) {\r\n ++perCycle;\r\n atomsIdc[chunksCount++] = cycAtoms[i].index;\r\n }\r\n }\r\n if (perCycle > 0) {\r\n cycles[cycleIdx++] = cycle;\r\n }\r\n });\r\n\r\n const atomsGroup = new AromaticGroup(geoParams, {\r\n cycles,\r\n atoms,\r\n chunks: atomsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n atomsGroup._component = component;\r\n self.add(atomsGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default AromaticProcessor;\r\n","import AtomsProcessor from './AtomsProcessor';\r\nimport OrphanAtomsProcessor from './OrphanAtomsProcessor';\r\nimport ResiduesProcessor from './ResiduesProcessor';\r\nimport NucleicProcessor from './NucleicProcessor';\r\nimport SubseqsProcessor from './SubseqsProcessor';\r\nimport BondsProcessor from './BondsProcessor';\r\nimport AromaticProcessor from './AromaticProcessor';\r\n\r\nexport default {\r\n Atoms: AtomsProcessor,\r\n OrphanAtoms: OrphanAtomsProcessor,\r\n Residues: ResiduesProcessor,\r\n Nucleic: NucleicProcessor,\r\n Subseqs: SubseqsProcessor,\r\n Bonds: BondsProcessor,\r\n Aromatic: AromaticProcessor,\r\n};\r\n","import MeshCreator from '../../meshes/MeshCreator';\r\nimport groups from './groups';\r\nimport processors from '../processors/processors';\r\n\r\nfunction _bakeGroup(triplet, Processor, Group) {\r\n return function (complex, colorer, mode, polyComplexity, mask, material) {\r\n return new Processor(Group, triplet, complex, colorer, mode, polyComplexity, mask, material);\r\n };\r\n}\r\n\r\nclass GroupsFactory {\r\n static AtomsSpheres(caps, settings) {\r\n const gfxTriplet = MeshCreator.createSpheres(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSphereGroup);\r\n }\r\n\r\n static OrphanedAtomsCrosses(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createCrosses(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.OrphanAtoms, groups.AtomsSphereGroup);\r\n }\r\n\r\n static BondsCylinders(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Bonds, groups.BondsCylinderGroup);\r\n }\r\n\r\n static BondsLines(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.create2CLines(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Bonds, groups.BondsLinesGroup);\r\n }\r\n\r\n static CartoonChains(caps, settings) {\r\n const gfxTriplet = MeshCreator.createExtrudedChains(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Subseqs, groups.ResiduesSubseqGroup);\r\n }\r\n\r\n static TraceChains(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CClosedCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Subseqs, groups.ResiduesTraceGroup);\r\n }\r\n\r\n static NucleicSpheres(caps, settings) {\r\n const gfxTriplet = MeshCreator.createSpheres(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Nucleic, groups.NucleicSpheresGroup);\r\n }\r\n\r\n static NucleicCylinders(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Nucleic, groups.NucleicCylindersGroup);\r\n }\r\n\r\n static ALoopsTorus(caps, settings) {\r\n const gfxTriplet = MeshCreator.createExtrudedChains(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Aromatic, groups.AromaticTorusGroup);\r\n }\r\n\r\n static ALoopsLines(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createChunkedLines(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Aromatic, groups.AromaticLinesGroup);\r\n }\r\n\r\n static QuickSurfGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createQuickSurface(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSurfaceGroup);\r\n }\r\n\r\n static ContactSurfaceGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createContactSurface(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSurfaceGroup);\r\n }\r\n\r\n static SASSESSurfaceGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createSASSES(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSASSESGroupStub);\r\n }\r\n\r\n static TextLabelsGeo(caps, settings) {\r\n const gfxTriplet = MeshCreator.createLabels(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsTextGroup);\r\n }\r\n}\r\n\r\nexport default GroupsFactory;\r\n","import _ from 'lodash';\r\nimport makeContextDependent from '../../utils/makeContextDependent';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport factory from './groups/GroupsFactory';\r\n\r\n/**\r\n * Create new mode.\r\n *\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the mode after its creation.\r\n *\r\n * @exports Mode\r\n * @this Mode\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all available modes used for building and displaying molecule geometry.\r\n */\r\nclass Mode {\r\n constructor(opts) {\r\n if (this.constructor === Mode) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Mode options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.opts = _.merge(utils.deriveDeep(this.settings.now.modes[this.id], true), opts);\r\n }\r\n\r\n /**\r\n * Get mode identification, probably with options.\r\n * @returns {string|Array} Mode identifier string ({@link Mode#id}) or two-element array containing both mode\r\n * identifier and options ({@link Mode#opts}).\r\n * Options are returned if they were changed during or after the mode creation.\r\n */\r\n identify() {\r\n const diff = utils.objectsDiff(this.opts, this.settings.now.modes[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n return [this.id, diff];\r\n }\r\n return this.id;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const polyComplexity = this.opts.polyComplexity ? this.opts.polyComplexity[this.settings.now.resolution] : 0;\r\n const groupList = this.depGroups;\r\n const groupCount = groupList.length;\r\n const group = new gfxutils.RCGroup();\r\n const self = this;\r\n for (let i = 0; i < groupCount; ++i) {\r\n let currGroup = groupList[i];\r\n let renderParams = {};\r\n if (_.isArray(currGroup)) {\r\n renderParams = currGroup[1].call(this);\r\n [currGroup] = currGroup;\r\n }\r\n const Group = factory[currGroup](null, this.settings, renderParams);\r\n const newGroup = new Group(complex, colorer, self, polyComplexity, mask, material);\r\n if (newGroup.children.length > 0) {\r\n group.add(newGroup);\r\n }\r\n }\r\n return group;\r\n }\r\n}\r\n\r\nmakeContextDependent(Mode.prototype);\r\n\r\n/**\r\n* Mode identifier.\r\n* @type {string}\r\n*/\r\nMode.prototype.id = '__';\r\n\r\n/**\r\n * Mode geo groups.\r\n * @type {Array}\r\n */\r\nMode.prototype.depGroups = [];\r\n\r\nexport default Mode;\r\n","import Mode from './Mode';\r\n\r\nfunction getRenderParams() {\r\n return {\r\n lineWidth: this.opts.lineWidth,\r\n };\r\n}\r\n\r\nclass LinesMode extends Mode {\r\n static id = 'LN';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n this.depGroups = this.depGroups.slice(0); // clone depGroups to prevent prototype edits\r\n const groups = this.depGroups;\r\n for (let i = 0, n = groups.length; i < n; ++i) {\r\n groups[i] = [groups[i], getRenderParams];\r\n }\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n\r\n calcAtomRadius() {\r\n return this.opts.atom;\r\n }\r\n\r\n getAromaticOffset() {\r\n return this.opts.offsarom;\r\n }\r\n\r\n getAromaticArcChunks() {\r\n return this.opts.chunkarom;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n}\r\n\r\nLinesMode.prototype.id = 'LN';\r\nLinesMode.prototype.name = 'Lines';\r\nLinesMode.prototype.shortName = 'Lines';\r\nLinesMode.prototype.depGroups = [\r\n 'ALoopsLines',\r\n 'BondsLines',\r\n 'OrphanedAtomsCrosses',\r\n];\r\n\r\nexport default LinesMode;\r\n","import Mode from './Mode';\r\n\r\nclass LicoriceMode extends Mode {\r\n static id = 'LC';\r\n\r\n calcAtomRadius(_atom) {\r\n return this.opts.bond;\r\n }\r\n\r\n calcStickRadius() {\r\n return this.opts.bond;\r\n }\r\n\r\n calcSpaceFraction() {\r\n return this.opts.space;\r\n }\r\n\r\n getAromRadius() {\r\n return this.opts.aromrad;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n}\r\n\r\nLicoriceMode.prototype.id = 'LC';\r\nLicoriceMode.prototype.name = 'Licorice';\r\nLicoriceMode.prototype.shortName = 'Licorice';\r\nLicoriceMode.prototype.depGroups = [\r\n 'AtomsSpheres',\r\n 'BondsCylinders',\r\n 'ALoopsTorus',\r\n];\r\n\r\nexport default LicoriceMode;\r\n","import Mode from './Mode';\r\n\r\nclass BallsAndSticksMode extends Mode {\r\n static id = 'BS';\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius * this.opts.atom;\r\n }\r\n\r\n calcStickRadius() {\r\n return this.opts.bond;\r\n }\r\n\r\n getAromRadius() {\r\n return this.opts.aromrad;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n\r\n calcSpaceFraction() {\r\n return this.opts.space;\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n}\r\n\r\nBallsAndSticksMode.prototype.id = 'BS';\r\nBallsAndSticksMode.prototype.name = 'Balls and Sticks';\r\nBallsAndSticksMode.prototype.shortName = 'Balls';\r\nBallsAndSticksMode.prototype.depGroups = [\r\n 'AtomsSpheres',\r\n 'BondsCylinders',\r\n 'ALoopsTorus',\r\n];\r\n\r\nexport default BallsAndSticksMode;\r\n","import Mode from './Mode';\r\n\r\nclass VanDerWaalsMode extends Mode {\r\n static id = 'VW';\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n}\r\n\r\nVanDerWaalsMode.prototype.id = 'VW';\r\nVanDerWaalsMode.prototype.name = 'Van der Waals';\r\nVanDerWaalsMode.prototype.shortName = 'VDW';\r\nVanDerWaalsMode.prototype.depGroups = ['AtomsSpheres'];\r\n\r\nexport default VanDerWaalsMode;\r\n","import Mode from './Mode';\r\n\r\nclass TraceMode extends Mode {\r\n static id = 'TR';\r\n\r\n calcStickRadius() {\r\n return this.opts.radius;\r\n }\r\n}\r\n\r\nTraceMode.prototype.id = 'TR';\r\nTraceMode.prototype.name = 'Trace';\r\nTraceMode.prototype.shortName = 'Trace';\r\nTraceMode.prototype.depGroups = ['TraceChains'];\r\n\r\nexport default TraceMode;\r\n","import * as THREE from 'three';\r\nimport Mode from './Mode';\r\n\r\nclass TubeMode extends Mode {\r\n static id = 'TU';\r\n\r\n getResidueRadius(_residue) {\r\n return this.TUBE_RADIUS;\r\n }\r\n\r\n getHeightSegmentsRatio() {\r\n return this.opts.heightSegmentsRatio;\r\n }\r\n\r\n getTension() {\r\n return this.opts.tension;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const rad = this.opts.radius;\r\n this.TUBE_RADIUS = new THREE.Vector2(rad, rad);\r\n\r\n return Mode.prototype.buildGeometry.call(this, complex, colorer, mask, material);\r\n }\r\n}\r\n\r\nTubeMode.prototype.id = 'TU';\r\nTubeMode.prototype.name = 'Tube';\r\nTubeMode.prototype.shortName = 'Tube';\r\nTubeMode.prototype.depGroups = ['CartoonChains'];\r\n\r\nexport default TubeMode;\r\n","import * as THREE from 'three';\r\nimport Mode from './Mode';\r\n\r\nclass CartoonMode extends Mode {\r\n static id = 'CA';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n // cache for secondary structure options\r\n this.secCache = {};\r\n }\r\n\r\n getResidueStartRadius(residue) {\r\n const second = residue.getSecondary();\r\n if (!second || !second.generic) {\r\n return this.TUBE_RADIUS;\r\n }\r\n const secOpts = this.secCache[second.generic];\r\n if (!secOpts) {\r\n return this.TUBE_RADIUS;\r\n }\r\n if (second.term === residue) {\r\n return secOpts.start;\r\n }\r\n return secOpts.center;\r\n }\r\n\r\n getResidueEndRadius(residue) {\r\n const second = residue.getSecondary();\r\n if (second === null || !second.generic) {\r\n return this.TUBE_RADIUS;\r\n }\r\n const secOpts = this.secCache[second.generic];\r\n if (!secOpts) {\r\n return this.TUBE_RADIUS;\r\n }\r\n if (second.term === residue) {\r\n return this.ARROW_END;\r\n }\r\n return secOpts.center;\r\n }\r\n\r\n getResidueRadius(residue, val) {\r\n const startRad = this.getResidueStartRadius(residue);\r\n if (val === 0) {\r\n return startRad;\r\n }\r\n\r\n const endRad = this.getResidueEndRadius(residue);\r\n if (val === 2) {\r\n return endRad;\r\n }\r\n\r\n return startRad.clone().lerp(endRad, val / 2.0);\r\n }\r\n\r\n calcStickRadius(_res) {\r\n return this.opts.radius;\r\n }\r\n\r\n getHeightSegmentsRatio() {\r\n return this.opts.heightSegmentsRatio;\r\n }\r\n\r\n getTension() {\r\n return this.opts.tension;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const tubeRad = this.opts.radius;\r\n const secHeight = this.opts.depth;\r\n\r\n this.TUBE_RADIUS = new THREE.Vector2(tubeRad, tubeRad);\r\n this.ARROW_END = new THREE.Vector2(secHeight, tubeRad);\r\n const secCache = {};\r\n const secData = this.opts.ss;\r\n /* eslint-disable guard-for-in */\r\n for (const prop in secData) {\r\n secCache[prop] = {\r\n center: new THREE.Vector2(secHeight, secData[prop].width),\r\n start: new THREE.Vector2(secHeight, secData[prop].arrow),\r\n };\r\n }\r\n this.secCache = secCache;\r\n /* eslint-enable guard-for-in */\r\n\r\n return Mode.prototype.buildGeometry.call(this, complex, colorer, mask, material);\r\n }\r\n}\r\n\r\nCartoonMode.prototype.id = 'CA';\r\nCartoonMode.prototype.name = 'Cartoon';\r\nCartoonMode.prototype.shortName = 'Cartoon';\r\nCartoonMode.prototype.depGroups = [\r\n 'CartoonChains',\r\n 'NucleicSpheres',\r\n 'NucleicCylinders',\r\n];\r\n\r\nexport default CartoonMode;\r\n","import chem from '../../chem';\r\nimport Mode from './Mode';\r\n\r\nconst { selectors } = chem;\r\n\r\nfunction getRenderParams() {\r\n return {\r\n wireframe: this.opts.wireframe,\r\n zClip: this.opts.zClip,\r\n };\r\n}\r\n\r\nclass SurfaceMode extends Mode {\r\n constructor(opts) {\r\n super(opts);\r\n this.depGroups = this.depGroups.slice(0); // clone depGroups to prevent prototype edits\r\n const surfaces = this.surfaceNames;\r\n const groups = this.depGroups;\r\n for (let i = 0, n = surfaces.length; i < n; ++i) {\r\n groups[groups.length] = [surfaces[i], getRenderParams];\r\n }\r\n }\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n\r\n getVisibilitySelector() {\r\n let visibilitySelector = null;\r\n if (this.opts.subset !== '') {\r\n const res = selectors.parse(this.opts.subset);\r\n if (!res.error) {\r\n visibilitySelector = res.selector;\r\n }\r\n }\r\n return visibilitySelector;\r\n }\r\n}\r\n\r\nSurfaceMode.prototype.isSurface = true;\r\nSurfaceMode.prototype.surfaceNames = [];\r\n\r\nexport default SurfaceMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass QuickSurfaceMode extends SurfaceMode {\r\n static id = 'QS';\r\n\r\n getSurfaceOpts() {\r\n return {\r\n useBeads: false,\r\n isoValue: this.opts.isoValue,\r\n gaussLim: this.opts.gaussLim[this.settings.now.resolution],\r\n radScale: this.opts.scale,\r\n gridSpacing: this.opts.gridSpacing[this.settings.now.resolution],\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n };\r\n }\r\n}\r\n\r\nQuickSurfaceMode.prototype.id = 'QS';\r\nQuickSurfaceMode.prototype.name = 'Quick Surface';\r\nQuickSurfaceMode.prototype.shortName = 'Quick Surf';\r\nQuickSurfaceMode.prototype.surfaceNames = ['QuickSurfGeo'];\r\n\r\nexport default QuickSurfaceMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass IsoSurfaceMode extends SurfaceMode {\r\n constructor(excludeProbe, opts) {\r\n super(opts);\r\n this._excludeProbe = excludeProbe;\r\n }\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n\r\n getSurfaceOpts() {\r\n return {\r\n gridSpacing: this.opts.polyComplexity[this.settings.now.resolution],\r\n radScale: this._radScale,\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n probeRadius: this.opts.probeRadius,\r\n excludeProbe: this._excludeProbe,\r\n };\r\n }\r\n}\r\n\r\nIsoSurfaceMode.prototype.id = 'SU';\r\nIsoSurfaceMode.prototype.name = 'Surface';\r\nIsoSurfaceMode.prototype.shortName = 'Surface';\r\nIsoSurfaceMode.prototype.surfaceNames = ['SASSESSurfaceGeo'];\r\n\r\nIsoSurfaceMode.prototype._radScale = 1;\r\nIsoSurfaceMode.prototype._excludeProbe = false;\r\n\r\nexport default IsoSurfaceMode;\r\n","import IsoSurfaceMode from './IsoSurfaceMode';\r\n\r\nclass IsoSurfaceSASMode extends IsoSurfaceMode {\r\n static id = 'SA';\r\n\r\n constructor(opts) {\r\n super(false, opts);\r\n }\r\n}\r\n\r\nIsoSurfaceSASMode.prototype.id = 'SA';\r\nIsoSurfaceSASMode.prototype.name = 'Solvent Accessible Surface';\r\nIsoSurfaceSASMode.prototype.shortName = 'SAS';\r\n\r\nexport default IsoSurfaceSASMode;\r\n","import IsoSurfaceMode from './IsoSurfaceMode';\r\n\r\nclass IsoSurfaceSESMode extends IsoSurfaceMode {\r\n static id = 'SE';\r\n\r\n constructor(opts) {\r\n super(true, opts);\r\n }\r\n}\r\n\r\nIsoSurfaceSESMode.prototype.id = 'SE';\r\nIsoSurfaceSESMode.prototype.name = 'Solvent Excluded Surface';\r\nIsoSurfaceSESMode.prototype.shortName = 'SES';\r\n\r\nexport default IsoSurfaceSESMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass ContactSurfaceMode extends SurfaceMode {\r\n static id = 'CS';\r\n\r\n getSurfaceOpts() {\r\n return {\r\n probeRadius: this.opts.probeRadius,\r\n radScale: this.opts.polyComplexity[this.settings.now.resolution],\r\n scaleFactor: this.opts.polyComplexity[this.settings.now.resolution],\r\n gridSpacing: 1.0 / this.opts.polyComplexity[this.settings.now.resolution],\r\n isoValue: this.opts.isoValue,\r\n probePositions: this.opts.probePositions,\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n };\r\n }\r\n}\r\n\r\nContactSurfaceMode.prototype.id = 'CS';\r\nContactSurfaceMode.prototype.name = 'Contact Surface';\r\nContactSurfaceMode.prototype.shortName = 'Contact Surf';\r\nContactSurfaceMode.prototype.isSurface = true;\r\nContactSurfaceMode.prototype.surfaceNames = ['ContactSurfaceGeo'];\r\n\r\nexport default ContactSurfaceMode;\r\n","import _ from 'lodash';\r\nimport Mode from './Mode';\r\n\r\nclass TextMode extends Mode {\r\n static id = 'TX';\r\n\r\n getTemplateOptions() {\r\n return this.opts.template;\r\n }\r\n\r\n getLabelOpts() {\r\n return _.merge(this.opts, {\r\n colors: true,\r\n adjustColor: true,\r\n transparent: true,\r\n });\r\n }\r\n}\r\n\r\nTextMode.prototype.id = 'TX';\r\nTextMode.prototype.name = 'Text mode';\r\nTextMode.prototype.shortName = 'Text';\r\nTextMode.prototype.depGroups = ['TextLabelsGeo'];\r\n\r\nexport default TextMode;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport LinesMode from './modes/LinesMode';\r\nimport LicoriceMode from './modes/LicoriceMode';\r\nimport BallsAndSticksMode from './modes/BallsAndSticksMode';\r\nimport VanDerWaalsMode from './modes/VanDerWaalsMode';\r\nimport TraceMode from './modes/TraceMode';\r\nimport TubeMode from './modes/TubeMode';\r\nimport CartoonMode from './modes/CartoonMode';\r\nimport QuickSurfaceMode from './modes/QuickSurfaceMode';\r\nimport IsoSurfaceSASMode from './modes/IsoSurfaceSASMode';\r\nimport IsoSurfaceSESMode from './modes/IsoSurfaceSESMode';\r\nimport ContactSurfaceMode from './modes/ContactSurfaceMode';\r\nimport TextMode from './modes/TextMode';\r\n\r\nconst modes = new EntityList([\r\n LinesMode,\r\n LicoriceMode,\r\n BallsAndSticksMode,\r\n VanDerWaalsMode,\r\n TraceMode,\r\n TubeMode,\r\n CartoonMode,\r\n QuickSurfaceMode,\r\n IsoSurfaceSASMode,\r\n IsoSurfaceSESMode,\r\n ContactSurfaceMode,\r\n TextMode,\r\n]);\r\n\r\nexport default modes;\r\n","import _ from 'lodash';\r\n\r\nfunction clamp(x, a, b) {\r\n return x <= b ? x < 0 ? 0 : x : b;\r\n}\r\n\r\nfunction lerpColor(c1, c2, alpha) {\r\n const beta = 1 - alpha;\r\n const r1 = (c1 >> 16) & 0xff;\r\n const g1 = (c1 >> 8) & 0xff;\r\n const b1 = c1 & 0xff;\r\n const r2 = (c2 >> 16) & 0xff;\r\n const g2 = (c2 >> 8) & 0xff;\r\n const b2 = c2 & 0xff;\r\n const r = beta * r1 + alpha * r2;\r\n const g = beta * g1 + alpha * g2;\r\n const b = beta * b1 + alpha * b2;\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\nclass Palette {\r\n constructor(name, id) {\r\n this.name = name || 'Custom';\r\n this.id = id || 'CP';\r\n }\r\n\r\n getElementColor(name, asIs = false) {\r\n const color = this.elementColors[name];\r\n return color === undefined && !asIs ? this.defaultElementColor : color;\r\n }\r\n\r\n getResidueColor(name, asIs = false) {\r\n const color = this.residueColors[name];\r\n return color === undefined && !asIs ? this.defaultResidueColor : color;\r\n }\r\n\r\n getChainColor(name) {\r\n let chain = name.charCodeAt(0);\r\n chain = ((chain < 0 ? 0 : chain >= 256 ? chain - 256 : chain) & 0x1F)\r\n % this.chainColors.length;\r\n return this.chainColors[chain];\r\n }\r\n\r\n getSecondaryColor(type, asIs = false) {\r\n const color = this.secondaryColors[type];\r\n return color === undefined && !asIs ? this.defaultSecondaryColor : color;\r\n }\r\n\r\n getSequentialColor(index) {\r\n const { colors } = this;\r\n const len = colors.length;\r\n return index < 0 ? colors[(index % len) + len] : colors[index % len];\r\n }\r\n\r\n getGradientColor(value, gradientName) {\r\n const gradient = this.gradients[gradientName];\r\n if (!gradient) {\r\n return this.defaultNamedColor;\r\n }\r\n const count = gradient.length;\r\n const index = value * (count - 1);\r\n let left = Math.floor(index);\r\n const right = clamp(left + 1, 0, count - 1);\r\n left = clamp(left, 0, count - 1);\r\n return lerpColor(gradient[left], gradient[right], index - left);\r\n }\r\n\r\n getNamedColor(name, asIs = false) {\r\n const color = this.namedColors[name];\r\n return color === undefined && !asIs ? this.defaultNamedColor : color;\r\n }\r\n}\r\n\r\n_.assign(Palette.prototype, {\r\n colors: [0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0x808080],\r\n\r\n minRangeColor: 0x000000,\r\n midRangeColor: 0x7F7F7F,\r\n maxRangeColor: 0xFFFFFF,\r\n\r\n defaultElementColor: 0xFFFFFF,\r\n elementColors: {},\r\n\r\n defaultResidueColor: 0xFFFFFF,\r\n residueColors: {},\r\n\r\n chainColors: [0xFFFFFF],\r\n\r\n defaultSecondaryColor: 0xFFFFFF,\r\n secondaryColors: {},\r\n\r\n defaultGradientColor: 0x000000,\r\n\r\n defaultNamedColor: 0xFFFFFF,\r\n namedColorsArray: [\r\n /* eslint-disable no-multi-spaces */\r\n ['indianred', 0xcd5c5c],\r\n ['lightcoral', 0xf08080],\r\n ['salmon', 0xfa8072],\r\n ['darksalmon', 0xe9967a],\r\n ['lightsalmon', 0xffa07a],\r\n ['crimson', 0xdc143c],\r\n ['red', 0xff0000],\r\n ['firebrick', 0xb22222],\r\n ['darkred', 0x8b0000],\r\n ['pink', 0xffc0cb],\r\n ['lightpink', 0xffb6c1],\r\n ['hotpink', 0xff69b4],\r\n ['deeppink', 0xff1493],\r\n ['mediumvioletred', 0xc71585],\r\n ['palevioletred', 0xdb7093],\r\n ['coral', 0xff7f50],\r\n ['tomato', 0xff6347],\r\n ['orangered', 0xff4500],\r\n ['darkorange', 0xff8c00],\r\n ['orange', 0xffa500],\r\n ['gold', 0xffd700],\r\n ['yellow', 0xffff00],\r\n ['lightyellow', 0xffffe0],\r\n ['lemonchiffon', 0xfffacd],\r\n ['lightgoldenrodyellow', 0xfafad2],\r\n ['papayawhip', 0xffefd5],\r\n ['moccasin', 0xffe4b5],\r\n ['peachpuff', 0xffdab9],\r\n ['palegoldenrod', 0xeee8aa],\r\n ['khaki', 0xf0e68c],\r\n ['darkkhaki', 0xbdb76b],\r\n ['lavender', 0xe6e6fa],\r\n ['thistle', 0xd8bfd8],\r\n ['plum', 0xdda0dd],\r\n ['violet', 0xee82ee],\r\n ['orchid', 0xda70d6],\r\n ['fuchsia', 0xff00ff],\r\n ['magenta', 0xff00ff],\r\n ['mediumorchid', 0xba55d3],\r\n ['mediumpurple', 0x9370db],\r\n ['rebeccapurple', 0x663399],\r\n ['blueviolet', 0x8a2be2],\r\n ['darkviolet', 0x9400d3],\r\n ['darkorchid', 0x9932cc],\r\n ['darkmagenta', 0x8b008b],\r\n ['purple', 0x800080],\r\n ['indigo', 0x4b0082],\r\n ['slateblue', 0x6a5acd],\r\n ['mediumslateblue', 0x7b68ee],\r\n ['darkslateblue', 0x483d8b],\r\n ['greenyellow', 0xadff2f],\r\n ['chartreuse', 0x7fff00],\r\n ['lawngreen', 0x7cfc00],\r\n ['lime', 0x00ff00],\r\n ['limegreen', 0x32cd32],\r\n ['palegreen', 0x98fb98],\r\n ['lightgreen', 0x90ee90],\r\n ['mediumspringgreen', 0x00fa9a],\r\n ['springgreen', 0x00ff7f],\r\n ['mediumseagreen', 0x3cb371],\r\n ['seagreen', 0x2e8b57],\r\n ['forestgreen', 0x228b22],\r\n ['green', 0x008000],\r\n ['darkgreen', 0x006400],\r\n ['yellowgreen', 0x9acd32],\r\n ['olivedrab', 0x6b8e23],\r\n ['olive', 0x808000],\r\n ['darkolivegreen', 0x556b2f],\r\n ['mediumaquamarine', 0x66cdaa],\r\n ['darkseagreen', 0x8fbc8f],\r\n ['lightseagreen', 0x20b2aa],\r\n ['darkcyan', 0x008b8b],\r\n ['teal', 0x008080],\r\n ['aqua', 0x00ffff],\r\n ['cyan', 0x00ffff],\r\n ['lightcyan', 0xe0ffff],\r\n ['paleturquoise', 0xafeeee],\r\n ['aquamarine', 0x7fffd4],\r\n ['turquoise', 0x40e0d0],\r\n ['mediumturquoise', 0x48d1cc],\r\n ['darkturquoise', 0x00ced1],\r\n ['cadetblue', 0x5f9ea0],\r\n ['steelblue', 0x4682b4],\r\n ['lightsteelblue', 0xb0c4de],\r\n ['powderblue', 0xb0e0e6],\r\n ['lightblue', 0xadd8e6],\r\n ['skyblue', 0x87ceeb],\r\n ['lightskyblue', 0x87cefa],\r\n ['deepskyblue', 0x00bfff],\r\n ['dodgerblue', 0x1e90ff],\r\n ['cornflowerblue', 0x6495ed],\r\n ['royalblue', 0x4169e1],\r\n ['blue', 0x0000ff],\r\n ['mediumblue', 0x0000cd],\r\n ['darkblue', 0x00008b],\r\n ['navy', 0x000080],\r\n ['midnightblue', 0x191970],\r\n ['cornsilk', 0xfff8dc],\r\n ['blanchedalmond', 0xffebcd],\r\n ['bisque', 0xffe4c4],\r\n ['navajowhite', 0xffdead],\r\n ['wheat', 0xf5deb3],\r\n ['burlywood', 0xdeb887],\r\n ['tan', 0xd2b48c],\r\n ['rosybrown', 0xbc8f8f],\r\n ['sandybrown', 0xf4a460],\r\n ['goldenrod', 0xdaa520],\r\n ['darkgoldenrod', 0xb8860b],\r\n ['peru', 0xcd853f],\r\n ['chocolate', 0xd2691e],\r\n ['saddlebrown', 0x8b4513],\r\n ['sienna', 0xa0522d],\r\n ['brown', 0xa52a2a],\r\n ['maroon', 0x800000],\r\n ['white', 0xffffff],\r\n ['snow', 0xfffafa],\r\n ['honeydew', 0xf0fff0],\r\n ['mintcream', 0xf5fffa],\r\n ['azure', 0xf0ffff],\r\n ['aliceblue', 0xf0f8ff],\r\n ['ghostwhite', 0xf8f8ff],\r\n ['whitesmoke', 0xf5f5f5],\r\n ['seashell', 0xfff5ee],\r\n ['beige', 0xf5f5dc],\r\n ['oldlace', 0xfdf5e6],\r\n ['floralwhite', 0xfffaf0],\r\n ['ivory', 0xfffff0],\r\n ['antiquewhite', 0xfaebd7],\r\n ['linen', 0xfaf0e6],\r\n ['lavenderblush', 0xfff0f5],\r\n ['mistyrose', 0xffe4e1],\r\n ['gainsboro', 0xdcdcdc],\r\n ['lightgray', 0xd3d3d3],\r\n ['silver', 0xc0c0c0],\r\n ['darkgray', 0xa9a9a9],\r\n ['gray', 0x808080],\r\n ['dimgray', 0x696969],\r\n ['lightslategray', 0x778899],\r\n ['slategray', 0x708090],\r\n ['darkslategray', 0x2f4f4f],\r\n ['black', 0x000000],\r\n /* eslint-enable no-multi-spaces */\r\n ],\r\n\r\n namedColors: {},\r\n\r\n gradients: {\r\n rainbow: [\r\n 0x0000ff, // blue\r\n 0x00ffff, // cyan\r\n 0x00ff00, // green\r\n 0xffff00, // yellow\r\n 0xff0000, // red\r\n ],\r\n temp: [\r\n 0x0000ff, // blue\r\n 0x007fff, // light-blue\r\n 0xffffff, // white\r\n 0xff7f00, // orange\r\n 0xff0000, // red\r\n ],\r\n hot: [\r\n 0xffffff, // white\r\n 0xff7f00, // orange\r\n 0xff0000, // red\r\n ],\r\n cold: [\r\n 0xffffff, // white\r\n 0x007fff, // light-blue\r\n 0x0000ff, // blue\r\n ],\r\n 'blue-red': [\r\n 0x0000ff, // blue\r\n 0xffffff, // white\r\n 0xff0000, // red\r\n ],\r\n reds: [\r\n 0xffffff, // white\r\n 0xff0000, // red\r\n ],\r\n blues: [\r\n 0xffffff, // white\r\n 0x0000ff, // blue\r\n ],\r\n },\r\n});\r\n\r\nconst { namedColorsArray, namedColors } = Palette.prototype;\r\n\r\nfor (let i = 0, { length } = namedColorsArray; i < length; ++i) {\r\n const [name, value] = namedColorsArray[i];\r\n namedColors[name] = value;\r\n}\r\n\r\nexport default Palette;\r\n","import Palette from './Palette';\r\n\r\nconst palette = new Palette('CPK', 'CP');\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n\r\n H: 0xFFFFFF,\r\n C: 0x202020,\r\n N: 0x2060FF,\r\n O: 0xEE2010,\r\n F: 0x00FF00,\r\n P: 0x8020FF,\r\n S: 0xFFFF00,\r\n CL: 0x00BB00,\r\n FE: 0xD0D0D0,\r\n CO: 0xD0D0D0,\r\n NI: 0xD0D0D0,\r\n CU: 0xD0D0D0,\r\n BR: 0x008800,\r\n I: 0x005500,\r\n\r\n};\r\n\r\nexport default palette;\r\n","import Palette from './Palette';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst palette = new Palette('Jmol', 'JM');\r\n\r\npalette.colors = [\r\n\r\n 0x0000FF, // blue\r\n 0x0055FF, //\r\n 0x00ABFF, //\r\n 0x00FFFF, // cyan\r\n 0x00FFAB, //\r\n 0x00FF55, //\r\n 0x00FF00, // green\r\n 0x55FF00, //\r\n 0xABFF00, //\r\n 0xFFFF00, // yellow\r\n 0xFFAB00, //\r\n 0xFF5500, //\r\n 0xFF0000, // red\r\n 0xFF0055, //\r\n 0xFF00AB, //\r\n 0xFF00FF, // magenta\r\n 0xAB00FF, //\r\n 0x5500FF, //\r\n\r\n];\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n\r\n H: 0xFFFFFF,\r\n D: 0xFFFFC0,\r\n T: 0xFFFFA0,\r\n HE: 0xD9FFFF,\r\n LI: 0xCC80FF,\r\n BE: 0xC2FF00,\r\n B: 0xFFB5B5,\r\n C: 0x909090,\r\n N: 0x3050F8,\r\n O: 0xFF0D0D,\r\n F: 0x90E050,\r\n NE: 0xB3E3F5,\r\n NA: 0xAB5CF2,\r\n MG: 0x8AFF00,\r\n AL: 0xBFA6A6,\r\n SI: 0xF0C8A0,\r\n P: 0xFF8000,\r\n S: 0xFFFF30,\r\n CL: 0x1FF01F,\r\n AR: 0x80D1E3,\r\n K: 0x8F40D4,\r\n CA: 0x3DFF00,\r\n SC: 0xE6E6E6,\r\n TI: 0xBFC2C7,\r\n V: 0xA6A6AB,\r\n CR: 0x8A99C7,\r\n MN: 0x9C7AC7,\r\n FE: 0xE06633,\r\n CO: 0xF090A0,\r\n NI: 0x50D050,\r\n CU: 0xC88033,\r\n ZN: 0x7D80B0,\r\n GA: 0xC28F8F,\r\n GE: 0x668F8F,\r\n AS: 0xBD80E3,\r\n SE: 0xFFA100,\r\n BR: 0xA62929,\r\n KR: 0x5CB8D1,\r\n RB: 0x702EB0,\r\n SR: 0x00FF00,\r\n Y: 0x94FFFF,\r\n ZR: 0x94E0E0,\r\n NB: 0x73C2C9,\r\n MO: 0x54B5B5,\r\n TC: 0x3B9E9E,\r\n RU: 0x248F8F,\r\n RH: 0x0A7D8C,\r\n PD: 0x006985,\r\n AG: 0xC0C0C0,\r\n CD: 0xFFD98F,\r\n IN: 0xA67573,\r\n SN: 0x668080,\r\n SB: 0x9E63B5,\r\n TE: 0xD47A00,\r\n I: 0x940094,\r\n XE: 0x429EB0,\r\n CS: 0x57178F,\r\n BA: 0x00C900,\r\n LA: 0x70D4FF,\r\n CE: 0xFFFFC7,\r\n PR: 0xD9FFC7,\r\n ND: 0xC7FFC7,\r\n PM: 0xA3FFC7,\r\n SM: 0x8FFFC7,\r\n EU: 0x61FFC7,\r\n GD: 0x45FFC7,\r\n TB: 0x30FFC7,\r\n DY: 0x1FFFC7,\r\n HO: 0x00FF9C,\r\n ER: 0x00E675,\r\n TM: 0x00D452,\r\n YB: 0x00BF38,\r\n LU: 0x00AB24,\r\n HF: 0x4DC2FF,\r\n TA: 0x4DA6FF,\r\n W: 0x2194D6,\r\n RE: 0x267DAB,\r\n OS: 0x266696,\r\n IR: 0x175487,\r\n PT: 0xD0D0E0,\r\n AU: 0xFFD123,\r\n HG: 0xB8B8D0,\r\n TL: 0xA6544D,\r\n PB: 0x575961,\r\n BI: 0x9E4FB5,\r\n PO: 0xAB5C00,\r\n AT: 0x754F45,\r\n RN: 0x428296,\r\n FR: 0x420066,\r\n RA: 0x007D00,\r\n AC: 0x70ABFA,\r\n TH: 0x00BAFF,\r\n PA: 0x00A1FF,\r\n U: 0x008FFF,\r\n NP: 0x0080FF,\r\n PU: 0x006BFF,\r\n AM: 0x545CF2,\r\n CM: 0x785CE3,\r\n BK: 0x8A4FE3,\r\n CF: 0xA136D4,\r\n ES: 0xB31FD4,\r\n FM: 0xB31FBA,\r\n MD: 0xB30DA6,\r\n NO: 0xBD0D87,\r\n LR: 0xC70066,\r\n RF: 0xCC0059,\r\n DB: 0xD1004F,\r\n SG: 0xD90045,\r\n BH: 0xE00038,\r\n HS: 0xE6002E,\r\n MT: 0xEB0026,\r\n\r\n};\r\n\r\npalette.defaultResidueColor = 0xBEA06E;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\npalette.residueColors = {\r\n\r\n ALA: 0xC8C8C8,\r\n ARG: 0x145AFF,\r\n ASN: 0x00DCDC,\r\n ASP: 0xE60A0A,\r\n CYS: 0xE6E600,\r\n GLN: 0x00DCDC,\r\n GLU: 0xE60A0A,\r\n GLY: 0xEBEBEB,\r\n HIS: 0x8282D2,\r\n ILE: 0x0F820F,\r\n LEU: 0x0F820F,\r\n LYS: 0x145AFF,\r\n MET: 0xE6E600,\r\n PHE: 0x3232AA,\r\n PRO: 0xDC9682,\r\n SER: 0xFA9600,\r\n THR: 0xFA9600,\r\n TRP: 0xB45AB4,\r\n TYR: 0x3232AA,\r\n VAL: 0x0F820F,\r\n A: 0xA0A0FF,\r\n C: 0xFF8C4B,\r\n G: 0xFF7070,\r\n I: 0x80FFFF,\r\n T: 0xA0FFA0,\r\n U: 0xFF8080,\r\n DA: 0xA0A0FF,\r\n DC: 0xFF8C4B,\r\n DG: 0xFF7070,\r\n DI: 0x80FFFF,\r\n DT: 0xA0FFA0,\r\n DU: 0xFF8080,\r\n '+A': 0xA0A0FF,\r\n '+C': 0xFF8C4B,\r\n '+G': 0xFF7070,\r\n '+I': 0x80FFFF,\r\n '+T': 0xA0FFA0,\r\n '+U': 0xFF8080,\r\n\r\n};\r\n\r\npalette.chainColors = [\r\n // ' '->0 'A'->1, 'B'->2\r\n 0xFFffffff, // ' ' & '0' white\r\n //\r\n 0xFFC0D0FF, // skyblue\r\n 0xFFB0FFB0, // pastel green\r\n 0xFFFFC0C8, // pink\r\n 0xFFFFFF80, // pastel yellow\r\n 0xFFFFC0FF, // pastel magenta\r\n 0xFFB0F0F0, // pastel cyan\r\n 0xFFFFD070, // pastel gold\r\n 0xFFF08080, // lightcoral\r\n\r\n 0xFFF5DEB3, // wheat\r\n 0xFF00BFFF, // deepskyblue\r\n 0xFFCD5C5C, // indianred\r\n 0xFF66CDAA, // mediumaquamarine\r\n 0xFF9ACD32, // yellowgreen\r\n 0xFFEE82EE, // violet\r\n 0xFF00CED1, // darkturquoise\r\n 0xFF00FF7F, // springgreen\r\n 0xFF3CB371, // mediumseagreen\r\n\r\n 0xFF00008B, // darkblue\r\n 0xFFBDB76B, // darkkhaki\r\n 0xFF006400, // darkgreen\r\n 0xFF800000, // maroon\r\n 0xFF808000, // olive\r\n 0xFF800080, // purple\r\n 0xFF008080, // teal\r\n 0xFFB8860B, // darkgoldenrod\r\n 0xFFB22222, // firebrick\r\n];\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\npalette.secondaryColors = {\r\n [StructuralElementType.HELIX_ALPHA]: 0xFF0080,\r\n [StructuralElementType.HELIX_PI]: 0x600080,\r\n [StructuralElementType.HELIX_310]: 0xA00080,\r\n [StructuralElementType.STRAND]: 0xFFC800,\r\n [StructuralElementType.TURN]: 0x6080FF,\r\n dna: 0xAE00FE,\r\n rna: 0xFD0162,\r\n};\r\n\r\nexport default palette;\r\n","import Palette from './Palette';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst palette = new Palette('VMD', 'VM');\r\n\r\npalette.colors = [\r\n\r\n 0x0000FF, // blue\r\n 0xFF0000, // red\r\n 0x606060, // gray\r\n 0xFF8000, // orange\r\n 0xFFFF00, // yellow\r\n 0x808033, // tan\r\n 0x999999, // silver\r\n 0x00FF00, // green\r\n 0xFFFFFF, // white\r\n 0xFF9999, // pink\r\n 0x40C0C0, // cyan\r\n 0xA600A6, // purple\r\n 0x80E666, // lime\r\n 0xE666B3, // mauve\r\n 0x804D00, // ochre\r\n 0x8080C0, // ice blue\r\n\r\n];\r\n\r\npalette.defaultElementColor = 0x804D00;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n\r\n H: 0xFFFFFF,\r\n C: 0x40BFBF,\r\n N: 0x0000FF,\r\n O: 0xFF0000,\r\n P: 0x808033,\r\n S: 0xFFFF00,\r\n\r\n};\r\n\r\npalette.defaultResidueColor = 0x40C0C0;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\npalette.residueColors = {\r\n\r\n ALA: 0x0000FF,\r\n ARG: 0xFFFFFF,\r\n ASN: 0x808033,\r\n ASP: 0xFF0000,\r\n CYS: 0xFFFF00,\r\n GLN: 0xFF8000,\r\n GLU: 0xFF9999,\r\n GLY: 0xFFFFFF,\r\n HIS: 0x40C0C0,\r\n ILE: 0x00FF00,\r\n LEU: 0xFF9999,\r\n LYS: 0x40C0C0,\r\n MET: 0xFFFF00,\r\n PHE: 0xA600A6,\r\n PRO: 0x804C00,\r\n SER: 0xFFFF00,\r\n THR: 0xE666B3,\r\n TRP: 0x999999,\r\n TYR: 0x00FF00,\r\n VAL: 0x808033,\r\n A: 0x0000FF,\r\n C: 0xFF8000,\r\n G: 0xFFFF00,\r\n T: 0xA600A6,\r\n U: 0x00FF00,\r\n DA: 0x0000FF,\r\n DC: 0xFF8000,\r\n DG: 0xFFFF00,\r\n DT: 0xA600A6,\r\n DU: 0x00FF00,\r\n '+A': 0x0000FF,\r\n '+C': 0xFF8000,\r\n '+G': 0xFFFF00,\r\n '+T': 0xA600A6,\r\n '+U': 0x00FF00,\r\n WAT: 0x40C0C0,\r\n H2O: 0x40C0C0,\r\n HOH: 0x40C0C0,\r\n\r\n};\r\n\r\npalette.chainColors = [0xFFFFFF].concat(palette.colors);\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\npalette.secondaryColors = {\r\n [StructuralElementType.HELIX_ALPHA]: 0xA600A6,\r\n [StructuralElementType.HELIX_310]: 0x0000FF,\r\n [StructuralElementType.HELIX_PI]: 0xFF0000,\r\n [StructuralElementType.STRAND]: 0xFFFF00,\r\n [StructuralElementType.BRIDGE]: 0x808033,\r\n [StructuralElementType.TURN]: 0x40C0C0,\r\n};\r\n\r\nexport default palette;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport cpkPalette from './palettes/cpkPalette';\r\nimport jmolPalette from './palettes/jmolPalette';\r\nimport vmdPalette from './palettes/vmdPalette';\r\n\r\nconst palettes = new EntityList([\r\n cpkPalette,\r\n jmolPalette,\r\n vmdPalette,\r\n]);\r\n\r\nexport default palettes;\r\n","import _ from 'lodash';\r\nimport settings from '../../settings';\r\nimport utils from '../../utils';\r\nimport palettes from '../palettes';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the colorer after its creation.\r\n *\r\n * @exports Colorer\r\n * @this Colorer\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all available coloring algorithms used for building and displaying molecule geometry.\r\n */\r\nclass Colorer {\r\n constructor(opts) {\r\n if (this.constructor === Colorer) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Colorer options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.opts = _.merge(utils.deriveDeep(settings.now.colorers[this.id], true), opts);\r\n /**\r\n * Palette in use.\r\n * @type {Palette}\r\n */\r\n this.palette = palettes.first;\r\n }\r\n\r\n /**\r\n * Get Colorer identification, probably with options.\r\n * @returns {string|Array} Colorer identifier string ({@link Colorer#id}) or two-element array containing both colorer\r\n * identifier and options ({@link Colorer#opts}).\r\n * Options are returned if they were changed during or after colorer creation.\r\n */\r\n identify() {\r\n const diff = utils.objectsDiff(this.opts, settings.now.colorers[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n return [this.id, diff];\r\n }\r\n return this.id;\r\n }\r\n}\r\n\r\n/**\r\n * Colorer identifier.\r\n * @type {string}\r\n */\r\n\r\nColorer.prototype.id = '__';\r\n\r\nexport default Colorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Element\r\n *\r\n * @exports ElementColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Coloring algorithm based on chemical element.\r\n */\r\nclass ElementColorer extends Colorer {\r\n static id = 'EL';\r\n\r\n getAtomColor(atom, _complex) {\r\n const type = atom.element.name;\r\n if (type === 'C' && this.opts.carbon >= 0) {\r\n return this.opts.carbon;\r\n }\r\n return this.palette.getElementColor(type);\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.palette.defaultResidueColor;\r\n }\r\n}\r\n\r\nElementColorer.prototype.id = 'EL';\r\nElementColorer.prototype.name = 'Element';\r\nElementColorer.prototype.shortName = 'Element';\r\n\r\nexport default ElementColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Coloring algorithm based on residue type.\r\n *\r\n * @see ResidueType\r\n *\r\n * @exports ResidueTypeColorer\r\n * @constructor\r\n */\r\nclass ResidueTypeColorer extends Colorer {\r\n static id = 'RT';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n return this.palette.getResidueColor(residue._type._name);\r\n }\r\n}\r\n\r\nResidueTypeColorer.prototype.id = 'RT';\r\nResidueTypeColorer.prototype.name = 'Residue Type';\r\nResidueTypeColorer.prototype.shortName = 'Residue';\r\n\r\nexport default ResidueTypeColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass SequenceColorer extends Colorer {\r\n static id = 'SQ';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const chain = residue._chain;\r\n if (chain.minSequence === Number.POSITIVE_INFINITY && chain.maxSequence === Number.NEGATIVE_INFINITY) {\r\n return this.palette.defaultNamedColor;\r\n }\r\n const min = chain.minSequence;\r\n const max = chain.maxSequence > min ? chain.maxSequence : min + 1;\r\n return this.palette.getGradientColor((residue._sequence - min) / (max - min), this.opts.gradient);\r\n }\r\n}\r\n\r\nSequenceColorer.prototype.id = 'SQ';\r\nSequenceColorer.prototype.name = 'Sequence';\r\nSequenceColorer.prototype.shortName = 'Sequence';\r\n\r\nexport default SequenceColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass ChainColorer extends Colorer {\r\n static id = 'CH';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n return this.palette.getChainColor(residue.getChain()._name);\r\n }\r\n}\r\n\r\nChainColorer.prototype.id = 'CH';\r\nChainColorer.prototype.name = 'Chain';\r\nChainColorer.prototype.shortName = 'Chain';\r\n\r\nexport default ChainColorer;\r\n","import Colorer from './Colorer';\r\nimport ResidueType from '../../chem/ResidueType';\r\n\r\nclass SecondaryStructureColorer extends Colorer {\r\n static id = 'SS';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n if (residue._type.flags & ResidueType.Flags.DNA) {\r\n return this.palette.getSecondaryColor('dna');\r\n }\r\n if (residue._type.flags & ResidueType.Flags.RNA) {\r\n return this.palette.getSecondaryColor('rna');\r\n }\r\n const secondary = residue.getSecondary();\r\n if (secondary) {\r\n let color = this.palette.getSecondaryColor(secondary.type, true);\r\n if (color === undefined) {\r\n color = this.palette.getSecondaryColor(secondary.generic);\r\n }\r\n return color;\r\n }\r\n return this.palette.defaultSecondaryColor;\r\n }\r\n}\r\n\r\nSecondaryStructureColorer.prototype.id = 'SS';\r\nSecondaryStructureColorer.prototype.name = 'Secondary Structure';\r\nSecondaryStructureColorer.prototype.shortName = 'Structure';\r\n\r\nexport default SecondaryStructureColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass UniformColorer extends Colorer {\r\n static id = 'UN';\r\n\r\n getAtomColor(_atom, _complex) {\r\n return this.opts.color;\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nUniformColorer.prototype.id = 'UN';\r\nUniformColorer.prototype.name = 'Uniform';\r\nUniformColorer.prototype.shortName = 'Uniform';\r\n\r\nexport default UniformColorer;\r\n","import Colorer from './Colorer';\r\nimport selectors from '../../chem/selectors';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @exports ConditionalColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Bicolor coloring algorithm based on a selector string used as a condition.\r\n */\r\nclass ConditionalColorer extends Colorer {\r\n static id = 'CO';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n const parsed = selectors.parse(this.opts.subset);\r\n this._subsetCached = parsed.error ? selectors.none() : parsed.selector;\r\n }\r\n\r\n getAtomColor(atom, _complex) {\r\n return this._subsetCached.includesAtom(atom) ? this.opts.color : this.opts.baseColor;\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const subset = this._subsetCached;\r\n const atoms = residue._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n if (!subset.includesAtom(atoms[i])) {\r\n return this.opts.baseColor;\r\n }\r\n }\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nConditionalColorer.prototype.id = 'CO';\r\nConditionalColorer.prototype.name = 'Conditional';\r\nConditionalColorer.prototype.shortName = 'Conditional';\r\n\r\nexport default ConditionalColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass ConformationColorer extends Colorer {\r\n static id = 'CF';\r\n\r\n getAtomColor(atom, _complex) {\r\n return this.palette.getChainColor(String.fromCharCode(atom.location));\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.palette.defaultResidueColor;\r\n }\r\n}\r\n\r\nConformationColorer.prototype.id = 'CF';\r\nConformationColorer.prototype.name = 'Conformation';\r\nConformationColorer.prototype.shortName = 'Conformation';\r\n\r\nexport default ConformationColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Temperature\r\n *\r\n * @exports TemperatureColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Coloring algorithm based on temperature of chemical element.\r\n */\r\nclass TemperatureColorer extends Colorer {\r\n static id = 'TM';\r\n\r\n getAtomColor(atom, _complex) {\r\n const { opts } = this;\r\n let factor = 1;\r\n if (atom.temperature && opts) {\r\n if (opts.min === opts.max) {\r\n factor = atom.temperature > opts.max ? 1 : 0;\r\n } else {\r\n factor = (atom.temperature - opts.min) / (opts.max - opts.min);\r\n }\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const { opts } = this;\r\n if (!opts) {\r\n return this.palette.defaultGradientColor;\r\n }\r\n if (residue.temperature) {\r\n let factor = 0;\r\n if (opts.min === opts.max) {\r\n factor = residue.temperature > opts.max ? 1 : 0;\r\n } else {\r\n factor = (residue.temperature - opts.min) / (opts.max - opts.min);\r\n }\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n}\r\n\r\nTemperatureColorer.prototype.id = 'TM'; // [T]e[M]perature\r\nTemperatureColorer.prototype.name = 'Temperature';\r\nTemperatureColorer.prototype.shortName = 'Temperature';\r\n\r\nexport default TemperatureColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Occupancy\r\n *\r\n * @exports OccupancyColorer\r\n * @augments Occupancy\r\n * @constructor\r\n * @classdesc Coloring algorithm based on occupancy of chemical element.\r\n */\r\nclass OccupancyColorer extends Colorer {\r\n static id = 'OC';\r\n\r\n _getColorByOccupancy(occupancy, opts) {\r\n if (occupancy !== undefined) {\r\n const factor = 1 - occupancy;\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n\r\n getAtomColor(atom, _complex) {\r\n const { opts } = this;\r\n return this._getColorByOccupancy(atom.occupancy, opts);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const { opts } = this;\r\n return this._getColorByOccupancy(residue.occupancy, opts);\r\n }\r\n}\r\n\r\nOccupancyColorer.prototype.id = 'OC'; // [OC]cupancy\r\nOccupancyColorer.prototype.name = 'Occupancy';\r\nOccupancyColorer.prototype.shortName = 'Occupancy';\r\n\r\nexport default OccupancyColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass HydrophobicityColorer extends Colorer {\r\n static id = 'HY';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n let color = this.palette.defaultResidueColor;\r\n if (residue._type.hydrophobicity !== undefined) {\r\n // Kyte Doolitle hydro [-4.5,4.5]->[0.1]\r\n const min = -4.5;\r\n const max = 4.5;\r\n color = this.palette.getGradientColor((residue._type.hydrophobicity - min) / (max - min), this.opts.gradient);\r\n }\r\n return color;\r\n }\r\n}\r\n\r\nHydrophobicityColorer.prototype.id = 'HY';\r\nHydrophobicityColorer.prototype.name = 'Hydrophobicity';\r\nHydrophobicityColorer.prototype.shortName = 'Hydrophobicity';\r\n\r\nexport default HydrophobicityColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass MoleculeColorer extends Colorer {\r\n static id = 'MO';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const molecule = residue._molecule;\r\n const count = _complex.getMoleculeCount();\r\n if (count > 1) {\r\n return this.palette.getGradientColor((molecule.index - 1) / (count - 1), this.opts.gradient);\r\n }\r\n return this.palette.getGradientColor(0, this.opts.gradient);\r\n }\r\n}\r\n\r\nMoleculeColorer.prototype.id = 'MO';\r\nMoleculeColorer.prototype.name = 'Molecule';\r\nMoleculeColorer.prototype.shortName = 'Molecule';\r\n\r\nexport default MoleculeColorer;\r\n","import Colorer from './Colorer';\r\nimport Atom from '../../chem/Atom';\r\n\r\nfunction scaleColor(c, factor) {\r\n const r1 = (c >> 16) & 0xff;\r\n const g1 = (c >> 8) & 0xff;\r\n const b1 = c & 0xff;\r\n const r = factor * r1;\r\n const g = factor * g1;\r\n const b = factor * b1;\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @exports CarbonColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Bicolor coloring algorithm based on selection carbon atoms.\r\n */\r\nclass CarbonColorer extends Colorer {\r\n static id = 'CB';\r\n\r\n getAtomColor(atom, _complex) {\r\n const colorCarbon = this.opts.color;\r\n const colorNotCarbon = scaleColor(colorCarbon, this.opts.factor);\r\n return (atom.flags & Atom.Flags.CARBON) ? colorCarbon : colorNotCarbon;\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nCarbonColorer.prototype.id = 'CB';\r\nCarbonColorer.prototype.name = 'Carbon';\r\nCarbonColorer.prototype.shortName = 'Carbon';\r\n\r\nexport default CarbonColorer;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport ElementColorer from './colorers/ElementColorer';\r\nimport ResidueTypeColorer from './colorers/ResidueTypeColorer';\r\nimport SequenceColorer from './colorers/SequenceColorer';\r\nimport ChainColorer from './colorers/ChainColorer';\r\nimport SecondaryStructureColorer from './colorers/SecondaryStructureColorer';\r\nimport UniformColorer from './colorers/UniformColorer';\r\nimport ConditionalColorer from './colorers/ConditionalColorer';\r\nimport ConformationColorer from './colorers/ConformationColorer';\r\nimport TemperatureColorer from './colorers/TemperatureColorer';\r\nimport OccupancyColorer from './colorers/OccupancyColorer';\r\nimport HydrophobicityColorer from './colorers/HydrophobicityColorer';\r\nimport MoleculeColorer from './colorers/MoleculeColorer';\r\nimport CarbonColorer from './colorers/CarbonColorer';\r\n\r\nconst colorers = new EntityList([\r\n ElementColorer,\r\n ResidueTypeColorer,\r\n SequenceColorer,\r\n ChainColorer,\r\n SecondaryStructureColorer,\r\n UniformColorer,\r\n ConditionalColorer,\r\n ConformationColorer,\r\n TemperatureColorer,\r\n OccupancyColorer,\r\n HydrophobicityColorer,\r\n MoleculeColorer,\r\n CarbonColorer,\r\n]);\r\n\r\nexport default colorers;\r\n","import * as THREE from 'three';\r\nimport EntityList from '../utils/EntityList';\r\n\r\nfunction neutralColor(intensity) {\r\n return new THREE.Color(intensity, intensity, intensity);\r\n}\r\n\r\nconst materialList = [\r\n {\r\n id: 'DF',\r\n name: 'Diffuse',\r\n shortName: 'Diffuse',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'SF',\r\n name: 'Soft Plastic',\r\n shortName: 'Soft',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.1),\r\n shininess: 30,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'PL',\r\n name: 'Glossy Plastic',\r\n shortName: 'Glossy',\r\n uberOptions: {\r\n diffuse: neutralColor(0.56),\r\n specular: neutralColor(0.28),\r\n shininess: 100,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'ME',\r\n name: 'Metal',\r\n shortName: 'Metal',\r\n uberOptions: {\r\n diffuse: neutralColor(0.56),\r\n specular: neutralColor(0.55),\r\n shininess: 30,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'TR',\r\n name: 'Transparent',\r\n shortName: 'Transparent',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 0.5,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: true,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'GL',\r\n name: 'Glass',\r\n shortName: 'Glass',\r\n uberOptions: {\r\n diffuse: neutralColor(0.50),\r\n specular: neutralColor(0.65),\r\n shininess: 100,\r\n opacity: 0.5,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: true,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'BA',\r\n name: 'Backdrop',\r\n shortName: 'Backdrop',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: false,\r\n fog: false,\r\n depthWrite: false,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'TN',\r\n name: 'Toon',\r\n shortName: 'Toon',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: true,\r\n },\r\n }, {\r\n id: 'FL',\r\n name: 'Flat',\r\n shortName: 'Flat',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 0,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: false,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n },\r\n },\r\n];\r\n\r\nconst materials = new EntityList(materialList);\r\n\r\nexport default materials;\r\n","/**\r\n * Utils functions which is worked with meshes\r\n *\r\n * functions for doing something with all/specified meshes\r\n * functions for traversihg tree and create auxiliary meshes for transparency/shadowmaps...\r\n * functions for calculating data connected with meshes\r\n */\r\nimport * as THREE from 'three';\r\nimport UberMaterial from './shaders/UberMaterial';\r\nimport gfxutils from './gfxutils';\r\n\r\nfunction _gatherObjects(root, meshTypes) {\r\n const meshes = [];\r\n root.traverse((object) => {\r\n for (let i = 0; i < meshTypes.length; i++) {\r\n if (object instanceof meshTypes[i]) {\r\n meshes[meshes.length] = object;\r\n break;\r\n }\r\n }\r\n });\r\n return meshes;\r\n}\r\n\r\n// new mesh with the same geometry and specified material values and layer\r\nfunction createDerivativeMesh(mesh, values, layer) {\r\n const material = mesh.material.createInstance();\r\n material.setValues(values);\r\n\r\n const newMesh = new mesh.constructor(mesh.geometry, material);\r\n newMesh.material.needsUpdate = true;\r\n newMesh.applyMatrix4(mesh.matrix);\r\n newMesh.layers.set(layer);\r\n return newMesh;\r\n}\r\n\r\nfunction traverseMeshes(root, meshTypes, func) {\r\n const meshes = _gatherObjects(root, meshTypes);\r\n\r\n for (let i = 0, n = meshes.length; i < n; ++i) {\r\n const mesh = meshes[i];\r\n if (!mesh.parent) {\r\n continue;\r\n }\r\n func(mesh);\r\n }\r\n}\r\n\r\nfunction applyTransformsToMeshes(root, mtc) {\r\n const mtcCount = mtc.length;\r\n if (mtcCount < 1) {\r\n return;\r\n }\r\n\r\n const meshTypes = [THREE.Mesh, THREE.LineSegments, THREE.Line];\r\n traverseMeshes(root, meshTypes, (mesh) => {\r\n mesh.applyMatrix4(mtc[0]);\r\n for (let j = 1; j < mtcCount; ++j) {\r\n const newMesh = new mesh.constructor(mesh.geometry, mesh.material);\r\n mesh.parent.add(newMesh);\r\n newMesh.applyMatrix4(mtc[j]);\r\n }\r\n });\r\n}\r\n\r\nconst processTransparentMaterial = (function () {\r\n const matValues = {\r\n prepassTransparancy: true,\r\n fakeOpacity: false,\r\n transparent: false,\r\n colorFromDepth: false,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n mesh.material.setValues({ prepassTransparancy: false, fakeOpacity: false });\r\n mesh.material.needsUpdate = true;\r\n mesh.layers.set(gfxutils.LAYERS.TRANSPARENT);\r\n\r\n const prepassTranspMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.PREPASS_TRANSPARENT);\r\n mesh.parent.add(prepassTranspMesh);\r\n });\r\n };\r\n}());\r\n\r\nconst processColFromPosMaterial = (function () {\r\n const matValues = {\r\n colorFromPos: true,\r\n transparent: false,\r\n colorFromDepth: false,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n overrideColor: false,\r\n fogTransparent: false,\r\n attrColor: false,\r\n attrColor2: false,\r\n attrAlphaColor: false,\r\n fakeOpacity: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n const colFromPosMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.COLOR_FROM_POSITION);\r\n mesh.parent.add(colFromPosMesh);\r\n });\r\n };\r\n}());\r\n\r\nconst createShadowmapMaterial = (function () {\r\n const matValues = {\r\n colorFromDepth: true,\r\n orthoCam: true,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n if (!mesh.receiveShadow && mesh.material.shadowmap) { // remove shadow from non-receivers\r\n mesh.material.setValues({ shadowmap: false });\r\n }\r\n if (!mesh.material.lights) { // skip creating shadowmap meshes for materials without lighting\r\n return;\r\n }\r\n if (!mesh.castShadow) { // skip creating shadowmap meshes for non-casters\r\n return;\r\n }\r\n if (!gfxutils.belongToSelectLayers(mesh)) { // skip creating shadowmap meshes for selection layer\r\n return;\r\n }\r\n\r\n const shadowmapMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.SHADOWMAP);\r\n shadowmapMesh.isShadowmapMesh = true;\r\n mesh.parent.add(shadowmapMesh);\r\n });\r\n };\r\n}());\r\n\r\nfunction removeShadowmapMaterial(root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n if (mesh.isShadowmapMesh) {\r\n mesh.parent.remove(mesh);\r\n }\r\n });\r\n}\r\n\r\nfunction forEachMeshInGroup(group, process) {\r\n function processObj(object) {\r\n if (object instanceof THREE.Mesh) {\r\n process(object);\r\n }\r\n for (let i = 0, l = object.children.length; i < l; i++) {\r\n processObj(object.children[i]);\r\n }\r\n }\r\n processObj(group);\r\n}\r\n\r\nfunction _countMeshTriangles(mesh) {\r\n const geom = mesh.geometry;\r\n if (geom instanceof THREE.InstancedBufferGeometry) {\r\n const attribs = geom.attributes;\r\n for (const property in attribs) {\r\n if (attribs.hasOwnProperty(property) && attribs[property] instanceof THREE.InstancedBufferAttribute) {\r\n const currAttr = attribs[property];\r\n const indexSize = geom.index ? geom.index.array.length / 3 : 0;\r\n return indexSize * currAttr.array.length / currAttr.itemSize;\r\n }\r\n }\r\n return 0;\r\n }\r\n if (geom instanceof THREE.BufferGeometry) {\r\n return geom.index ? geom.index.array.length / 3 : 0;\r\n }\r\n return geom.faces ? geom.faces.length : 0;\r\n}\r\n\r\nfunction countTriangles(group) {\r\n let totalCount = 0;\r\n forEachMeshInGroup(group, (mesh) => {\r\n totalCount += _countMeshTriangles(mesh);\r\n });\r\n return totalCount;\r\n}\r\n\r\nexport default {\r\n applyTransformsToMeshes,\r\n processTransparentMaterial,\r\n processColFromPosMaterial,\r\n createShadowmapMaterial,\r\n removeShadowmapMaterial,\r\n forEachMeshInGroup,\r\n countTriangles,\r\n};\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport UberMaterial from './shaders/UberMaterial';\r\nimport gfxutils from './gfxutils';\r\nimport meshutils from './meshutils';\r\nimport settings from '../settings';\r\nimport materials from './materials';\r\nimport chem from '../chem';\r\n\r\nconst { selectors } = chem;\r\n\r\nclass Representation {\r\n constructor(index, mode, colorer, selector) {\r\n const startMaterialValues = {\r\n clipPlane: settings.now.draft.clipPlane,\r\n fogTransparent: settings.now.bg.transparent,\r\n shadowmap: settings.now.shadow.on,\r\n shadowmapType: settings.now.shadow.type,\r\n };\r\n this.index = index;\r\n this.mode = mode;\r\n this.colorer = colorer;\r\n this.selector = selector;\r\n this.selectorString = '';\r\n this.count = 0;\r\n this.material = new UberMaterial();\r\n this.material.setValues(startMaterialValues);\r\n this.material.setUberOptions({ fogAlpha: settings.now.fogAlpha });\r\n this.materialPreset = materials.first;\r\n this.needsRebuild = true;\r\n this.visible = true;\r\n\r\n // apply mode params & preset\r\n this.setMode(mode);\r\n }\r\n\r\n markAtoms(complex) {\r\n this.count = complex.markAtoms(this.selector, 1 << this.index);\r\n this.needsRebuild = true;\r\n return this.count;\r\n }\r\n\r\n unmarkAtoms(complex) {\r\n complex.clearAtomBits(1 << this.index);\r\n this.count = 0;\r\n }\r\n\r\n setMode(mode) {\r\n this.mode = mode;\r\n }\r\n\r\n setMaterialPreset(preset) {\r\n this.materialPreset = preset;\r\n this.material.setUberOptions(preset.uberOptions);\r\n this.material.setValues(preset.values);\r\n }\r\n\r\n reset() {\r\n this.geo = null;\r\n this.selectionGeo = null;\r\n }\r\n\r\n buildGeometry(complex) {\r\n this.reset();\r\n this.needsRebuild = false;\r\n\r\n if (settings.now.ao) {\r\n this.material.setValues({ normalsToGBuffer: settings.now.ao });\r\n }\r\n\r\n this.geo = this.mode.buildGeometry(complex, this.colorer, 1 << this.index, this.material);\r\n\r\n if (this.material.uberOptions.opacity < 0.99 && settings.now.transparency === 'prepass') {\r\n meshutils.processTransparentMaterial(this.geo, this.material);\r\n }\r\n this.geo.visible = this.visible;\r\n\r\n gfxutils.processObjRenderOrder(this.geo, this.materialPreset.id);\r\n meshutils.processColFromPosMaterial(this.geo, this.material);\r\n\r\n if (settings.now.shadow.on) {\r\n meshutils.createShadowmapMaterial(this.geo, this.material);\r\n }\r\n\r\n return this.geo;\r\n }\r\n\r\n buildSelectionGeometry(mask) {\r\n let sg = null;\r\n\r\n if (this.geo && ('getSubset' in this.geo)) {\r\n const meshes = this.geo.getSubset(mask);\r\n if (meshes && meshes.length > 0) {\r\n sg = new THREE.Group();\r\n sg.matrixAutoUpdate = false;\r\n sg.matrix = this.geo.matrix;\r\n\r\n for (let j = 0; j < meshes.length; j++) {\r\n const m = meshes[j];\r\n sg.add(m);\r\n }\r\n }\r\n }\r\n\r\n if (sg) {\r\n sg.visible = this.visible;\r\n }\r\n\r\n this.selectionGeo = sg;\r\n return this.selectionGeo;\r\n }\r\n\r\n /**\r\n * Create object that represents difference between current and another rep\r\n * anotherRep could be undefined. In this case everything is reported.\r\n */\r\n compare(repSettings) {\r\n const diff = {};\r\n\r\n const selStr = String(this.selector);\r\n if (!repSettings || selStr.valueOf() !== String(repSettings.selector).valueOf()) {\r\n diff.selector = selStr;\r\n }\r\n\r\n const modeDiff = this.mode.identify();\r\n if (!repSettings || Array.isArray(modeDiff) || modeDiff !== repSettings.mode) {\r\n diff.mode = modeDiff;\r\n }\r\n\r\n const colorerDiff = this.colorer.identify();\r\n if (!repSettings || Array.isArray(colorerDiff) || colorerDiff !== repSettings.colorer) {\r\n diff.colorer = colorerDiff;\r\n }\r\n\r\n if (!repSettings || this.materialPreset.id !== repSettings.material) {\r\n diff.material = this.materialPreset.id;\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n /**\r\n * Change representation. Write fields what was changed into new object, return it.\r\n */\r\n change(repSettings, complex, mode, color) {\r\n const diff = {};\r\n\r\n // modify selector\r\n if (repSettings.selector) {\r\n const newSelectorObject = selectors.parse(repSettings.selector).selector;\r\n const newSelector = String(newSelectorObject);\r\n if (this.selectorString !== newSelector) {\r\n diff.selector = newSelector;\r\n this.selectorString = newSelector;\r\n this.selector = newSelectorObject;\r\n this.markAtoms(complex);\r\n }\r\n }\r\n\r\n // modify mode\r\n if (repSettings.mode) {\r\n const newMode = repSettings.mode;\r\n if (!_.isEqual(this.mode.identify(), newMode)) {\r\n diff.mode = newMode;\r\n this.setMode(mode);\r\n }\r\n }\r\n\r\n // modify colorer\r\n if (repSettings.colorer) {\r\n const newColorer = repSettings.colorer;\r\n if (!_.isEqual(this.colorer.identify(), newColorer)) {\r\n diff.colorer = newColorer;\r\n this.colorer = color;\r\n }\r\n }\r\n\r\n // modify material\r\n if (repSettings.material) {\r\n const newMaterial = repSettings.material;\r\n if (!_.isEqual(this.materialPreset.id, newMaterial)) {\r\n diff.material = newMaterial;\r\n this.setMaterialPreset(materials.get(repSettings.material));\r\n }\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n show(visible) {\r\n this.visible = visible;\r\n if (this.geo) {\r\n this.geo.visible = visible;\r\n }\r\n if (this.selectionGeo) {\r\n this.selectionGeo.visible = visible;\r\n }\r\n }\r\n}\r\n\r\nexport default Representation;\r\n","import * as THREE from 'three';\r\nimport logger from './utils/logger';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport './gfx/modes';\r\n\r\nfunction _traverseComponentGroups(root, component, callback) {\r\n const { children } = root;\r\n if (!children) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n if (child._component === component) {\r\n callback(child);\r\n }\r\n if (child instanceof gfxutils.RCGroup) {\r\n _traverseComponentGroups(child, component, callback);\r\n }\r\n }\r\n}\r\n\r\nfunction ComplexEditor() {\r\n}\r\n\r\nclass ComplexComponentEditor extends ComplexEditor {\r\n constructor(complexVisual) {\r\n super();\r\n this._complexVisual = complexVisual;\r\n this._inProgress = false;\r\n }\r\n\r\n begin() {\r\n const complex = this._complexVisual.getComplex();\r\n\r\n // init component matrices\r\n this._componentTransforms = [];\r\n for (let i = 0; i < complex._components.length; ++i) {\r\n const component = complex._components[i];\r\n this._componentTransforms[component._index] = new THREE.Object3D();\r\n }\r\n\r\n this._inProgress = true;\r\n\r\n return true;\r\n }\r\n\r\n apply() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const complex = this._complexVisual.getComplex();\r\n\r\n for (let i = 0; i < complex._components.length; ++i) {\r\n this._bakeComponentTransform(complex._components[i]);\r\n }\r\n\r\n complex.onAtomPositionChanged();\r\n\r\n this._resetComponentTransform();\r\n\r\n this._complexVisual.finalizeEdit();\r\n }\r\n\r\n discard() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n this._resetComponentTransform();\r\n\r\n this._complexVisual.finalizeEdit();\r\n }\r\n\r\n getAltObj() {\r\n const res = {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n\r\n const visual = this._complexVisual;\r\n const component = visual.getSelectedComponent();\r\n\r\n if (component === null) {\r\n return res;\r\n }\r\n\r\n const selection = this._complexVisual.getSelectionGeo();\r\n const selectionMask = 1 << visual.getSelectionBit();\r\n let i;\r\n let j;\r\n let reprNode;\r\n let geo;\r\n\r\n // find all geo nodes for this component\r\n _traverseComponentGroups(visual, component, (child) => {\r\n res.objects.push(child);\r\n });\r\n\r\n // find all selection nodes for this component\r\n for (i = 0; i < selection.children.length; ++i) {\r\n reprNode = selection.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component') && geo._component === component) {\r\n res.objects.push(geo);\r\n }\r\n }\r\n }\r\n\r\n // add dummy object that stores component transformation\r\n res.objects.push(this._componentTransforms[component._index]);\r\n\r\n const bbmin = new THREE.Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n const bbmax = new THREE.Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n\r\n component.forEachResidue((residue) => {\r\n const atoms = residue._atoms;\r\n for (j = 0; j < atoms.length; ++j) {\r\n if (atoms[j].mask & selectionMask) {\r\n bbmin.min(atoms[j].position);\r\n bbmax.max(atoms[j].position);\r\n }\r\n }\r\n });\r\n\r\n res.pivot.lerpVectors(bbmin, bbmax, 0.5);\r\n return res;\r\n }\r\n\r\n _bakeComponentTransform(component) {\r\n const t = this._componentTransforms[component._index];\r\n if (t && (!(t.position.x === 0 && t.position.y === 0 && t.position.z === 0)\r\n || !(t.quaternion.x === 0 && t.quaternion.y === 0 && t.quaternion.z === 0 && t.quaternion.w === 1))) {\r\n t.updateMatrix();\r\n\r\n component.forEachResidue((residue) => {\r\n const atoms = residue._atoms;\r\n for (let j = 0; j < atoms.length; ++j) {\r\n atoms[j].position.applyMatrix4(t.matrix);\r\n }\r\n });\r\n }\r\n }\r\n\r\n _resetComponentTransform() {\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n let i;\r\n let j;\r\n let reprNode;\r\n let geo;\r\n\r\n for (i = 0; i < this._componentTransforms.length; ++i) {\r\n geo = this._componentTransforms[i];\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n\r\n // reset all geo nodes\r\n for (i = 0; i < visual.children.length; ++i) {\r\n reprNode = visual.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component')) {\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n }\r\n }\r\n\r\n // reset all selection nodes\r\n for (i = 0; i < selection.children.length; ++i) {\r\n reprNode = selection.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component')) {\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass ComplexFragmentEditor extends ComplexEditor {\r\n constructor(complexVisual) {\r\n super();\r\n this._complexVisual = complexVisual;\r\n this._inProgress = false;\r\n }\r\n\r\n begin() {\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n\r\n const atoms = this._getSelectionBorderAtoms();\r\n if (atoms.length < 1 || atoms.length > 2) {\r\n logger.error('Can only edit fragments with one or two bound atoms.');\r\n return false;\r\n }\r\n\r\n this._fragmentBoundAtoms = atoms;\r\n\r\n const selectionMask = 1 << visual.getSelectionBit();\r\n\r\n // hide selected fragment in main model\r\n visual.disableSubset(selectionMask, true);\r\n\r\n // hide selection geo in main model\r\n for (let k = 0; k < selection.children.length; ++k) {\r\n selection.children[k].visible = false;\r\n }\r\n\r\n // create visible fragment representation to rotate\r\n const pivotPos = atoms[0].position.clone();\r\n\r\n if (atoms.length === 2) {\r\n pivotPos.lerp(atoms[1].position, 0.5);\r\n }\r\n\r\n this._fragmentGeo = new THREE.Group();\r\n visual.add(this._fragmentGeo);\r\n this._fragmentGeo.position.copy(pivotPos);\r\n\r\n this._fragmentSelectionGeo = new THREE.Group();\r\n selection.add(this._fragmentSelectionGeo);\r\n this._fragmentSelectionGeo.position.copy(pivotPos);\r\n\r\n const offset = pivotPos.clone();\r\n offset.negate();\r\n\r\n for (let i = 0; i < visual.children.length; ++i) {\r\n const g = visual.children[i];\r\n if (!('getSubset' in g)) {\r\n continue;\r\n }\r\n\r\n const vg = new THREE.Group();\r\n this._fragmentGeo.add(vg);\r\n\r\n const sg = new THREE.Group();\r\n this._fragmentSelectionGeo.add(sg);\r\n\r\n const meshes = g.getSubset(selectionMask, true);\r\n for (let j = 0; j < meshes.length; j++) {\r\n const m = meshes[j];\r\n vg.add(m);\r\n m.position.copy(offset);\r\n }\r\n\r\n const smeshes = g.getSubset(selectionMask, true);\r\n for (let h = 0; h < smeshes.length; h++) {\r\n const sm = smeshes[h];\r\n sg.add(sm);\r\n sm.position.copy(offset);\r\n }\r\n }\r\n\r\n gfxutils.applySelectionMaterial(this._fragmentSelectionGeo);\r\n\r\n this._inProgress = true;\r\n return true;\r\n }\r\n\r\n apply() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const visual = this._complexVisual;\r\n const selectionBit = visual.getSelectionBit();\r\n\r\n const p = this._fragmentGeo.position;\r\n const m = this._fragmentGeo.matrix.clone();\r\n m.multiply(new THREE.Matrix4().makeTranslation(-p.x, -p.y, -p.z));\r\n\r\n this._bakeAtomTransform(m, 1 << selectionBit);\r\n\r\n // show selected fragment in main model\r\n visual.enableSubset(1 << selectionBit, true);\r\n\r\n visual.getComplex().onAtomPositionChanged();\r\n\r\n visual.finalizeEdit();\r\n }\r\n\r\n discard() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n\r\n this._fragmentGeo.parent.remove(this._fragmentGeo);\r\n\r\n // show selected fragment in main model\r\n visual.enableSubset(1 << visual.getSelectionBit(), true);\r\n\r\n // show selection geo in main model (+ remove fragment selection geo)\r\n for (let i = 0; i < selection.children.length; ++i) {\r\n const node = selection.children[i];\r\n if (node.visible) {\r\n selection.remove(node);\r\n } else {\r\n node.visible = true;\r\n }\r\n }\r\n\r\n visual.finalizeEdit();\r\n }\r\n\r\n isFreeRotationAllowed() {\r\n return (this._fragmentBoundAtoms.length < 2);\r\n }\r\n\r\n getAltObj() {\r\n const res = {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n\r\n res.objects.push(this._fragmentGeo, this._fragmentSelectionGeo);\r\n\r\n const boundAtoms = this._fragmentBoundAtoms;\r\n if (boundAtoms.length === 1) {\r\n if (boundAtoms[0].bonds.length === 1) {\r\n // single external bond allows rotation about bond axis\r\n const bond = boundAtoms[0].bonds[0];\r\n res.axis = new THREE.Vector3().subVectors(bond._right.position, bond._left.position);\r\n res.axis.normalize();\r\n res.axis.transformDirection(this._complexVisual.matrixWorld);\r\n }\r\n } else if (boundAtoms.length === 2) {\r\n // two bound atoms allow rotation only about axis running through their centers\r\n res.axis = new THREE.Vector3().subVectors(boundAtoms[1].position, boundAtoms[0].position);\r\n res.axis.normalize();\r\n res.axis.transformDirection(this._complexVisual.matrixWorld);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n _getSelectionBorderAtoms() {\r\n const complex = this._complexVisual.getComplex();\r\n\r\n const selectionMask = 1 << this._complexVisual.getSelectionBit();\r\n const atomHash = {};\r\n\r\n complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n atomHash[bond._left.index] = 1;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n atomHash[bond._right.index] = 1;\r\n }\r\n });\r\n\r\n const atoms = [];\r\n const keys = Object.keys(atomHash);\r\n for (let i = 0, n = keys.length; i < n; ++i) {\r\n const idx = keys[i];\r\n atoms.push(complex._atoms[idx]);\r\n }\r\n\r\n return atoms;\r\n }\r\n\r\n _bakeAtomTransform(matrix, mask) {\r\n this._complexVisual.getComplex().forEachAtom((atom) => {\r\n if (atom.mask & mask) {\r\n atom.position.applyMatrix4(matrix);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default {\r\n ComponentEditor: ComplexComponentEditor,\r\n FragmentEditor: ComplexFragmentEditor,\r\n};\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from './utils';\r\nimport logger from './utils/logger';\r\nimport chem from './chem';\r\nimport settings from './settings';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport modes from './gfx/modes';\r\nimport colorers from './gfx/colorers';\r\nimport palettes from './gfx/palettes';\r\nimport materials from './gfx/materials';\r\nimport Representation from './gfx/Representation';\r\nimport Visual from './Visual';\r\nimport ComplexVisualEdit from './ComplexVisualEdit';\r\nimport meshutils from './gfx/meshutils';\r\n\r\nconst { selectors } = chem;\r\n\r\nfunction lookupAndCreate(entityList, specs) {\r\n if (!Array.isArray(specs)) {\r\n specs = [specs];\r\n }\r\n const [id, opts] = specs;\r\n const Entity = entityList.get(id) || entityList.first;\r\n return new Entity(opts);\r\n}\r\n\r\nclass ComplexVisual extends Visual {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this._complex = dataSource;\r\n\r\n /** @type {Representation[]} */\r\n this._reprList = [];\r\n /** @type {?Representation} */\r\n this._repr = null;\r\n this._reprListChanged = true;\r\n\r\n this._selectionBit = 0;\r\n this._reprUsedBits = 0;\r\n this._selectionCount = 0;\r\n\r\n this._selectionGeometry = new THREE.Group();\r\n }\r\n\r\n getBoundaries() {\r\n return this._complex.getBoundaries();\r\n }\r\n\r\n release() {\r\n if (this._selectionGeometry.parent) {\r\n this._selectionGeometry.remove(this._selectionGeometry);\r\n }\r\n Visual.prototype.release.call(this);\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n getSelectionCount() {\r\n return this._selectionCount;\r\n }\r\n\r\n getSelectionGeo() {\r\n return this._selectionGeometry;\r\n }\r\n\r\n getSelectionBit() {\r\n return this._selectionBit;\r\n }\r\n\r\n getEditor() {\r\n return this._editor;\r\n }\r\n\r\n resetReps(reps) {\r\n // Create all necessary representations\r\n if (this._complex) {\r\n this._complex.clearAtomBits(~0);\r\n }\r\n this._reprListChanged = true;\r\n this._reprUsedBits = 0;\r\n this._reprList.length = reps.length;\r\n for (let i = 0, n = reps.length; i < n; ++i) {\r\n const rep = reps[i];\r\n\r\n let selector;\r\n let selectorString;\r\n if (typeof rep.selector === 'string') {\r\n selectorString = rep.selector;\r\n ({ selector } = selectors.parse(selectorString));\r\n } else if (typeof rep.selector === 'undefined') {\r\n selectorString = settings.now.presets.default[0].selector;\r\n ({ selector } = selectors.parse(selectorString));\r\n } else {\r\n ({ selector } = rep);\r\n selectorString = selector.toString();\r\n }\r\n const mode = lookupAndCreate(modes, rep.mode);\r\n const colorer = lookupAndCreate(colorers, rep.colorer);\r\n const material = materials.get(rep.material) || materials.first;\r\n\r\n this._reprList[i] = new Representation(i, mode, colorer, selector);\r\n this._reprList[i].setMaterialPreset(material);\r\n this._reprList[i].selectorString = selectorString;\r\n\r\n if (this._complex) {\r\n this._complex.markAtoms(selector, 1 << i);\r\n }\r\n\r\n this._reprUsedBits |= 1 << i;\r\n }\r\n this._repr = reps.length > 0 ? this._reprList[0] : null;\r\n\r\n this._selectionBit = reps.length;\r\n this._reprUsedBits |= 1 << this._selectionBit; // selection uses one bit\r\n this._selectionCount = 0;\r\n\r\n if (this._complex) {\r\n this._complex.update();\r\n }\r\n }\r\n\r\n /**\r\n * Get number of representations created so far.\r\n * @returns {number} Number of reps.\r\n */\r\n repCount() {\r\n return this._reprList.length;\r\n }\r\n\r\n /**\r\n * Get or set the current representation index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @returns {number} The current index.\r\n */\r\n repCurrent(index) {\r\n if (index >= 0 && index < this._reprList.length) {\r\n this._repr = this._reprList[index];\r\n } else {\r\n index = this._reprList.indexOf(this._repr);\r\n }\r\n return index;\r\n }\r\n\r\n /**\r\n * Get or set representation by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @param {object=} rep - Optional representation description.\r\n * @param {string=} rep.selector - Selector string.\r\n * @param {string=} rep.mode - Mode id.\r\n * @param {string=} rep.colorer - Colorer id.\r\n * @param {string=} rep.material - Material id.\r\n * @returns {Object} {desc, index, status} field desc contains rep description, index - index of correspondent rep,\r\n * status - one of three strings: 'created', 'changed', ''. 'created' means new rep was created during this function,\r\n * 'changed' - rep was changed during this function. '' - something else.\r\n */\r\n rep(index, rep) {\r\n // if index is missing then it is the current\r\n if (!rep && (index === undefined || index instanceof Object)) {\r\n rep = index;\r\n index = this.repCurrent();\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index > this._reprList.length) {\r\n logger.error(`Rep ${index} does not exist!`);\r\n return null;\r\n }\r\n\r\n // a special case of adding just after the end\r\n if (index === this._reprList.length) {\r\n const res = this.repAdd(rep);\r\n logger.warn(`Rep ${index} does not exist! New representation was created.`);\r\n return { desc: res.desc, index, status: 'created' };\r\n }\r\n\r\n // gather description\r\n const target = this._reprList[index];\r\n const desc = {\r\n selector: target.selectorString,\r\n mode: target.mode.identify(),\r\n colorer: target.colorer.identify(),\r\n material: target.materialPreset.id,\r\n };\r\n\r\n // modification is requested\r\n if (rep) {\r\n // modify\r\n const diff = target.change(\r\n rep,\r\n this._complex,\r\n lookupAndCreate(modes, rep.mode),\r\n lookupAndCreate(colorers, rep.colorer),\r\n );\r\n\r\n // something was changed\r\n if (!_.isEmpty(diff)) {\r\n target.needsRebuild = true;\r\n for (const key in diff) {\r\n if (diff.hasOwnProperty(key)) {\r\n desc[key] = diff[key];\r\n logger.debug(`rep[${index}].${key} changed to ${diff[key]}`);\r\n }\r\n }\r\n\r\n // safety trick: lower resolution for surface modes\r\n if (diff.mode && target.mode.isSurface\r\n && (settings.now.resolution === 'ultra' || settings.now.resolution === 'high')) {\r\n logger.report('Surface resolution was changed to \"medium\" to avoid hang-ups.');\r\n settings.set('resolution', 'medium');\r\n }\r\n return { desc, index, status: 'changed' };\r\n }\r\n }\r\n return { desc, index, status: '' };\r\n }\r\n\r\n /**\r\n * Get representation (not just description) by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @returns {?object} Representation.\r\n */\r\n repGet(index) {\r\n // if index is missing then it is the current\r\n if (index === undefined || index instanceof Object) {\r\n index = this.repCurrent();\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index >= this._reprList.length) {\r\n return null;\r\n }\r\n\r\n return this._reprList[index];\r\n }\r\n\r\n _getFreeReprIdx() {\r\n let bits = this._reprUsedBits;\r\n for (let i = 0; i <= ComplexVisual.NUM_REPRESENTATION_BITS; ++i, bits >>= 1) {\r\n if ((bits & 1) === 0) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * Add new representation.\r\n * @param {object=} rep - Representation description.\r\n * @returns {Object} {desc, index} field desc contains added rep description, index - index of this rep.\r\n */\r\n repAdd(rep) {\r\n if (this._reprList.length >= ComplexVisual.NUM_REPRESENTATION_BITS) {\r\n return null;\r\n }\r\n\r\n const newSelectionBit = this._getFreeReprIdx();\r\n if (newSelectionBit < 0) {\r\n return null; // no more slots for representations\r\n }\r\n\r\n const originalSelection = this.buildSelectorFromMask(1 << this._selectionBit);\r\n\r\n // Fill in default values\r\n const def = settings.now.presets.default[0];\r\n const desc = _.merge({\r\n selector: def.selector,\r\n mode: def.mode,\r\n colorer: def.colorer,\r\n material: def.material,\r\n }, rep);\r\n\r\n const selector = (typeof desc.selector === 'string') ? selectors.parse(desc.selector).selector : desc.selector;\r\n const target = new Representation(\r\n this._selectionBit,\r\n lookupAndCreate(modes, desc.mode),\r\n lookupAndCreate(colorers, desc.colorer),\r\n selector,\r\n );\r\n target.selectorString = selector.toString();\r\n target.setMaterialPreset(materials.get(desc.material));\r\n target.markAtoms(this._complex);\r\n this._reprList.push(target);\r\n\r\n // change selection bit\r\n this._selectionBit = newSelectionBit;\r\n this._reprUsedBits |= 1 << this._selectionBit;\r\n\r\n // restore selection using new selection bit\r\n this._complex.markAtoms(originalSelection, 1 << this._selectionBit);\r\n\r\n return { desc, index: this._reprList.length - 1 };\r\n }\r\n\r\n /**\r\n * Remove representation.\r\n * @param {number=} index - Zero-based representation index.\r\n */\r\n repRemove(index) {\r\n if (index === undefined) {\r\n index = this.repCurrent();\r\n }\r\n\r\n // catch out of bounds case\r\n let count = this._reprList.length;\r\n if (index < 0 || index >= count || count <= 1) { // do not allow to remove the single rep\r\n return;\r\n }\r\n\r\n const target = this._reprList[index];\r\n target.unmarkAtoms(this._complex);\r\n this._reprUsedBits &= ~(1 << target.index);\r\n\r\n this._reprList.splice(index, 1);\r\n\r\n // update current rep\r\n if (target === this._repr) {\r\n --count;\r\n index = index < count ? index : count - 1;\r\n this._repr = this._reprList[index];\r\n }\r\n this._reprListChanged = true;\r\n }\r\n\r\n /**\r\n * Hide representation.\r\n * @param {number} index - Zero-based representation index.\r\n * @param {boolean=} hide - Specify false to make rep visible, true to hide (by default).\r\n */\r\n repHide(index, hide) {\r\n if (hide === undefined) {\r\n hide = true;\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index >= this._reprList.length) {\r\n return;\r\n }\r\n\r\n const target = this._reprList[index];\r\n target.show(!hide);\r\n }\r\n\r\n /**\r\n * Select atoms with selector\r\n * @param {Selector} selector - selector\r\n * @param {boolean=} append - true to append selection atoms to current selection, false to rewrite selection\r\n */\r\n select(selector, append) {\r\n if (append) {\r\n this._selectionCount += this._complex.markAtomsAdditionally(selector, 1 << this._selectionBit);\r\n } else {\r\n this._selectionCount = this._complex.markAtoms(selector, 1 << this._selectionBit);\r\n }\r\n this._complex.updateStructuresMask();\r\n this.rebuildSelectionGeometry();\r\n }\r\n\r\n resetSelectionMask() {\r\n if (this._selectionCount !== 0) {\r\n this._selectionCount = 0;\r\n if (this._complex) {\r\n this._complex.clearAtomBits(1 << this._selectionBit);\r\n }\r\n }\r\n }\r\n\r\n updateSelectionMask(pickedObj) {\r\n const self = this;\r\n const { atom } = pickedObj;\r\n let { residue, chain, molecule } = pickedObj;\r\n const setMask = 1 << this._selectionBit;\r\n const clearMask = ~setMask;\r\n\r\n if (atom) {\r\n residue = atom.residue;\r\n chain = residue._chain;\r\n molecule = residue._molecule;\r\n\r\n if (atom.mask & setMask) {\r\n atom.mask &= clearMask;\r\n residue._mask &= clearMask;\r\n chain._mask &= clearMask;\r\n if (molecule) {\r\n molecule.mask &= clearMask;\r\n }\r\n this._selectionCount--;\r\n } else {\r\n atom.mask |= setMask;\r\n this._selectionCount++;\r\n\r\n // select residue if all atoms in it are selected\r\n residue.collectMask();\r\n // select chain and molecule if all residues in it are selected\r\n chain.collectMask();\r\n if (molecule) {\r\n molecule.collectMask();\r\n }\r\n }\r\n } else if (residue) {\r\n chain = residue._chain;\r\n molecule = residue._molecule;\r\n\r\n if (residue._mask & setMask) {\r\n residue._mask &= clearMask;\r\n chain._mask &= clearMask;\r\n residue.forEachAtom((a) => {\r\n if (a.mask & setMask) {\r\n a.mask &= clearMask;\r\n self._selectionCount--;\r\n }\r\n });\r\n } else {\r\n residue._mask |= setMask;\r\n residue.forEachAtom((a) => {\r\n if (!(a.mask & setMask)) {\r\n a.mask |= setMask;\r\n self._selectionCount++;\r\n }\r\n });\r\n\r\n // select chain and molecule if all residues in it are selected\r\n chain.collectMask();\r\n if (molecule) {\r\n molecule.collectMask();\r\n }\r\n }\r\n } else if (chain || molecule) {\r\n const obj = chain || molecule;\r\n if (obj._mask & setMask) {\r\n obj._mask &= clearMask;\r\n obj.forEachResidue((r) => {\r\n if (r._mask & setMask) {\r\n r._mask &= clearMask;\r\n r.forEachAtom((a) => {\r\n if (a.mask & setMask) {\r\n a.mask &= clearMask;\r\n self._selectionCount--;\r\n }\r\n });\r\n r._mask &= clearMask;\r\n }\r\n });\r\n } else {\r\n obj._mask |= setMask;\r\n obj.forEachResidue((r) => {\r\n if (!(r._mask & setMask)) {\r\n r._mask |= setMask;\r\n r.forEachAtom((a) => {\r\n if (!(a.mask & setMask)) {\r\n a.mask |= setMask;\r\n self._selectionCount++;\r\n }\r\n });\r\n const otherObj = chain ? r.getMolecule() : r.getChain();\r\n if (otherObj) {\r\n otherObj.collectMask();\r\n }\r\n }\r\n });\r\n }\r\n } else {\r\n this.resetSelectionMask();\r\n }\r\n }\r\n\r\n expandSelection() {\r\n const self = this;\r\n const selectionMask = 1 << this._selectionBit;\r\n const tmpMask = 1 << 31;\r\n\r\n // mark atoms to add\r\n this._complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n bond._right.mask |= tmpMask;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n bond._left.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // select marked atoms\r\n const deselectionMask = ~tmpMask;\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & tmpMask) {\r\n atom.mask = (atom.mask & deselectionMask) | selectionMask;\r\n ++self._selectionCount;\r\n }\r\n });\r\n\r\n this._complex.updateStructuresMask();\r\n }\r\n\r\n shrinkSelection() {\r\n const self = this;\r\n const selectionMask = 1 << this._selectionBit;\r\n const tmpMask = 1 << 31;\r\n\r\n // mark atoms neighbouring to unselected ones\r\n this._complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n bond._left.mask |= tmpMask;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n bond._right.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // mark hanging atoms\r\n this._complex.forEachAtom((atom) => {\r\n if ((atom.mask & selectionMask) && (atom.bonds.length === 1)) {\r\n atom.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // deselect marked atoms\r\n const deselectionMask = ~(selectionMask | tmpMask);\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & tmpMask) {\r\n atom.mask &= deselectionMask;\r\n --self._selectionCount;\r\n }\r\n });\r\n\r\n this._complex.updateStructuresMask();\r\n }\r\n\r\n getSelectedComponent() {\r\n const selectionMask = 1 << this._selectionBit;\r\n\r\n let component = null;\r\n let multiple = false;\r\n\r\n // find which component is selected (exclusively)\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & selectionMask) {\r\n if (component === null) {\r\n component = atom.residue._component;\r\n } else if (component !== atom.residue._component) {\r\n multiple = true;\r\n }\r\n }\r\n });\r\n\r\n return multiple ? null : component;\r\n }\r\n\r\n getSelectionCenter(center, includesAtom, selRule) {\r\n center.set(0.0, 0.0, 0.0);\r\n let count = 0;\r\n\r\n this._complex.forEachAtom((atom) => {\r\n if (includesAtom(atom, selRule)) {\r\n center.add(atom.position);\r\n count++;\r\n }\r\n });\r\n if (count === 0) {\r\n return false;\r\n }\r\n center.divideScalar(count);\r\n center.applyMatrix4(this.matrix);\r\n return true;\r\n }\r\n\r\n needsRebuild() {\r\n if (this._reprListChanged) {\r\n return true;\r\n }\r\n const reprList = this._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n if (repr.needsRebuild) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Rebuild molecule geometry asynchronously.\r\n */\r\n rebuild() {\r\n const self = this;\r\n\r\n // Destroy current geometry\r\n gfxutils.clearTree(this);\r\n\r\n return new Promise(((resolve) => {\r\n // Nothing to do?\r\n const complex = self._complex;\r\n if (!complex) {\r\n resolve();\r\n return;\r\n }\r\n\r\n let errorOccured = false;\r\n setTimeout(() => {\r\n console.time('build');\r\n const reprList = self._reprList;\r\n const palette = palettes.get(settings.now.palette) || palettes.first;\r\n let hasGeometry = false;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n repr.colorer.palette = palette;\r\n\r\n if (repr.needsRebuild) {\r\n repr.reset();\r\n\r\n try {\r\n repr.buildGeometry(complex);\r\n } catch (e) {\r\n if (e instanceof utils.OutOfMemoryError) {\r\n repr.needsRebuild = false;\r\n repr.reset();\r\n logger.error(`Not enough memory to build geometry for representation ${repr.index + 1}`);\r\n errorOccured = true;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n\r\n if (DEBUG && !errorOccured) {\r\n logger.debug(`Triangles count: ${meshutils.countTriangles(repr.geo)}`);\r\n }\r\n }\r\n\r\n hasGeometry = errorOccured || hasGeometry || gfxutils.groupHasGeometryToRender(repr.geo);\r\n\r\n if (repr.geo) {\r\n self.add(repr.geo);\r\n }\r\n }\r\n\r\n self._reprListChanged = false;\r\n\r\n console.timeEnd('build');\r\n resolve();\r\n }, 10);\r\n }));\r\n }\r\n\r\n setNeedsRebuild() {\r\n // invalidate all representations\r\n const reprList = this._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n reprList[i].needsRebuild = true;\r\n }\r\n }\r\n\r\n rebuildSelectionGeometry() {\r\n const mask = 1 << this._selectionBit;\r\n\r\n gfxutils.clearTree(this._selectionGeometry);\r\n\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const repr = this._reprList[i];\r\n const sg = repr.buildSelectionGeometry(mask);\r\n if (!sg) {\r\n continue;\r\n }\r\n\r\n this._selectionGeometry.add(sg);\r\n for (let j = 0; j < sg.children.length; j++) {\r\n const m = sg.children[j];\r\n\r\n // copy component transform (that's not applied yet)\r\n // TODO make this code obsolete, accessing editor is bad\r\n if (this._editor && this._editor._componentTransforms) {\r\n const t = this._editor._componentTransforms[m._component._index];\r\n if (t) {\r\n m.position.copy(t.position);\r\n m.quaternion.copy(t.quaternion);\r\n }\r\n }\r\n }\r\n\r\n gfxutils.applySelectionMaterial(sg);\r\n }\r\n }\r\n\r\n _buildSelectorFromSortedLists(atoms, residues, chains) {\r\n const complex = this._complex;\r\n\r\n function optimizeList(list) {\r\n const result = [];\r\n let k = 0;\r\n let first = NaN;\r\n let last = NaN;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n const value = list[i];\r\n if (value === last + 1) {\r\n last = value;\r\n } else {\r\n if (!Number.isNaN(first)) {\r\n result[k++] = new selectors.Range(first, last);\r\n }\r\n first = last = value;\r\n }\r\n }\r\n if (!Number.isNaN(first)) {\r\n result[k] = new selectors.Range(first, last);\r\n }\r\n return result;\r\n }\r\n\r\n let expression = null;\r\n if (chains.length === complex._chains.length) {\r\n expression = selectors.all();\r\n } else {\r\n let selector;\r\n if (chains.length > 0) {\r\n selector = selectors.chain(chains);\r\n expression = expression ? selectors.or(expression, selector) : selector;// NOSONAR\r\n }\r\n if (Object.keys(residues).length > 0) {\r\n for (const ch in residues) {\r\n if (residues.hasOwnProperty(ch)) {\r\n selector = selectors.and(\r\n selectors.chain(ch),\r\n selectors.residx(optimizeList(residues[ch])),\r\n );\r\n expression = expression ? selectors.or(expression, selector) : selector;\r\n }\r\n }\r\n }\r\n if (atoms.length > 0) {\r\n selector = selectors.serial(optimizeList(atoms));\r\n expression = expression ? selectors.or(expression, selector) : selector;\r\n }\r\n\r\n if (!expression) {\r\n expression = selectors.none();\r\n }\r\n }\r\n\r\n return expression;\r\n }\r\n\r\n buildSelectorFromMask(mask) {\r\n const complex = this._complex;\r\n const chains = [];\r\n const residues = {};\r\n const atoms = [];\r\n\r\n complex.forEachChain((chain) => {\r\n if (chain._mask & mask) {\r\n chains.push(chain._name);\r\n }\r\n });\r\n\r\n complex.forEachResidue((residue) => {\r\n if (residue._mask & mask && !(residue._chain._mask & mask)) {\r\n const c = residue._chain._name;\r\n if (!(c in residues)) {\r\n residues[c] = [residue._index];\r\n } else {\r\n residues[c].push(residue._index);\r\n }\r\n }\r\n });\r\n\r\n complex.forEachAtom((atom) => {\r\n if (atom.mask & mask && !(atom.residue._mask & mask)) {\r\n atoms.push(atom.serial);\r\n }\r\n });\r\n\r\n return this._buildSelectorFromSortedLists(atoms, residues, chains);\r\n }\r\n\r\n forSelectedResidues(process) {\r\n const selectionMask = 1 << this._selectionBit;\r\n this._complex.forEachResidue((residue) => {\r\n if (residue._mask & selectionMask) {\r\n process(residue);\r\n }\r\n });\r\n }\r\n\r\n beginComponentEdit() {\r\n if (this._editor) {\r\n return null;\r\n }\r\n\r\n const editor = new ComplexVisualEdit.ComponentEditor(this);\r\n if (!editor.begin()) {\r\n return null;\r\n }\r\n\r\n this._editor = editor;\r\n return editor;\r\n }\r\n\r\n beginFragmentEdit() {\r\n if (this._editor) {\r\n return null;\r\n }\r\n\r\n const editor = new ComplexVisualEdit.FragmentEditor(this);\r\n if (!editor.begin()) {\r\n return null;\r\n }\r\n\r\n this._editor = editor;\r\n return editor;\r\n }\r\n\r\n // should only be called by editors\r\n finalizeEdit() {\r\n this._editor = null;\r\n }\r\n\r\n setMaterialValues(values, needTraverse = false, process = undefined) {\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const rep = this._reprList[i];\r\n rep.material.setValues(values);\r\n if (needTraverse) {\r\n rep.geo.traverse((object) => {\r\n if (object instanceof THREE.Mesh) {\r\n object.material.setValues(values);\r\n\r\n if (process !== undefined) {\r\n process(object);\r\n }\r\n\r\n object.material.needsUpdate = true;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n setUberOptions(values) {\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const rep = this._reprList[i];\r\n rep.material.setUberOptions(values);\r\n }\r\n }\r\n\r\n /**\r\n * Build selector that contains all atoms within given distance from group of atoms\r\n * @param {Selector} selector - selector describing source group of atoms\r\n * @param {number} radius - distance\r\n * @returns {Selector} selector describing result group of atoms\r\n */\r\n within(selector, radius) {\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return false;\r\n }\r\n\r\n // mark atoms of the group as selected\r\n const selectionMask = 1 << this._selectionBit;\r\n this._complex.markAtoms(selector, selectionMask);\r\n\r\n // mark all atoms within distance as selected\r\n if (vw) {\r\n vw.forEachAtomWithinDistFromMasked(this._complex, selectionMask, Number(radius), (atom) => {\r\n atom.mask |= selectionMask;\r\n });\r\n }\r\n\r\n // update selection count\r\n this._selectionCount = this._complex.countAtomsByMask(selectionMask);\r\n\r\n // update secondary structure mask\r\n this._complex.updateStructuresMask();\r\n\r\n return this.buildSelectorFromMask(selectionMask);\r\n }\r\n}\r\n// 32 bits = 30 bits for reps + 1 for selection + 1 for selection expansion\r\nComplexVisual.NUM_REPRESENTATION_BITS = 30;\r\n\r\nexport default ComplexVisual;\r\n","import * as THREE from 'three';\r\nimport vertexVolumeFaces from './VolumeFaces.vert';\r\nimport fragmentVolumeFaces from './VolumeFaces.frag';\r\nimport vertexVolume from './Volume.vert';\r\nimport fragmentVolume from './Volume.frag';\r\nimport vertexFarPlane from './VolumeFarPlane.vert';\r\nimport fragmentFarPlane from './VolumeFarPlane.frag';\r\nimport settings from '../../settings';\r\n\r\nconst volumeUniforms = THREE.UniformsUtils.merge([\r\n {\r\n volumeDim: { type: 'v3', value: new THREE.Vector3(512, 512, 512) },\r\n tileTex: { type: 't', value: null },\r\n tileTexSize: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n tileStride: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n\r\n boxAngles: { type: 'v3', value: new THREE.Vector3(1, 1, 1) },\r\n delta: { type: 'v3', value: new THREE.Vector3(0, 0, 0) },\r\n\r\n _isoLevel0: { type: 'v2', value: new THREE.Vector3(0.5, 0.75, 1.0) },\r\n _flipV: { type: 'f', value: 0.0 },\r\n _BFLeft: { type: 't', value: null },\r\n _BFRight: { type: 't', value: null },\r\n _FFLeft: { type: 't', value: null },\r\n _FFRight: { type: 't', value: null },\r\n _WFFLeft: { type: 't', value: null },\r\n _WFFRight: { type: 't', value: null },\r\n },\r\n]);\r\n\r\nfunction overrideUniforms(params, defUniforms) {\r\n const uniforms = THREE.UniformsUtils.clone(defUniforms);\r\n for (const p in params) {\r\n if (uniforms.hasOwnProperty(p)) {\r\n uniforms[p].value = params[p];\r\n }\r\n }\r\n return uniforms;\r\n}\r\n\r\nfunction facesPosMaterialParams(params, sideType) {\r\n return {\r\n uniforms: overrideUniforms(params, {}),\r\n vertexShader: vertexVolumeFaces,\r\n fragmentShader: fragmentVolumeFaces,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n side: sideType,\r\n };\r\n}\r\n\r\nclass BackFacePosMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const backFaceParams = facesPosMaterialParams(params, THREE.BackSide);\r\n super(backFaceParams);\r\n }\r\n}\r\n\r\nclass ShaderParams {\r\n constructor(params, uniforms, vertexShader, fragmentShader) {\r\n this.uniforms = overrideUniforms(params, uniforms);\r\n this.vertexShader = vertexShader;\r\n this.fragmentShader = fragmentShader;\r\n this.transparent = false;\r\n this.depthTest = false;\r\n this.depthWrite = false;\r\n this.side = THREE.FrontSide;\r\n }\r\n}\r\n\r\nclass BackFacePosMaterialFarPlane extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const matUniforms = THREE.UniformsUtils.merge([\r\n {\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n farZ: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n matWorld2Volume: { type: '4fv', value: new THREE.Matrix4() },\r\n },\r\n ]);\r\n\r\n const shaderParams = new ShaderParams(params, matUniforms, vertexFarPlane, fragmentFarPlane);\r\n super(shaderParams);\r\n }\r\n}\r\n\r\nclass FrontFacePosMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const frontFaceParams = facesPosMaterialParams(params, THREE.FrontSide);\r\n super(frontFaceParams);\r\n }\r\n}\r\n\r\nclass VolumeMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const shaderParams = new ShaderParams(params, volumeUniforms, vertexVolume, fragmentVolume);\r\n shaderParams.transparent = true;\r\n shaderParams.depthTest = true;\r\n\r\n super(shaderParams);\r\n this.updateDefines();\r\n }\r\n\r\n updateDefines() {\r\n this.defines = {\r\n ISO_MODE: settings.now.modes.VD.isoMode,\r\n STEPS_COUNT: settings.now.modes.VD.polyComplexity[settings.now.resolution] * 100,\r\n };\r\n this.needsUpdate = true;\r\n }\r\n}\r\n\r\nexport default {\r\n BackFacePosMaterial,\r\n BackFacePosMaterialFarPlane,\r\n FrontFacePosMaterial,\r\n VolumeMaterial,\r\n};\r\n","import * as THREE from 'three';\r\nimport VolumeMaterial from './shaders/VolumeMaterial';\r\nimport settings from '../settings';\r\n\r\nclass VolumeMesh extends THREE.Mesh {\r\n volumeInfo = {}; // data for noise filter\r\n\r\n constructor() {\r\n const geo = new THREE.BufferGeometry();\r\n super(geo);\r\n this.clipPlane = new THREE.Plane();\r\n const size = new THREE.Vector3(0.5, 0.5, 0.5);\r\n this.size = size;\r\n\r\n this.cullFlag = [\r\n true, true, true, true,\r\n true, true, true, true,\r\n false, false, false, false, false, false,\r\n ];\r\n\r\n this.faces = [\r\n { indices: [], norm: new THREE.Vector3(0, 0, -1) },\r\n { indices: [], norm: new THREE.Vector3(0, 0, 1) },\r\n { indices: [], norm: new THREE.Vector3(0, -1, 0) },\r\n { indices: [], norm: new THREE.Vector3(0, 1, 0) },\r\n { indices: [], norm: new THREE.Vector3(-1, 0, 0) },\r\n { indices: [], norm: new THREE.Vector3(1, 0, 0) },\r\n { indices: [], norm: new THREE.Vector3(0, 0, 0) },\r\n ];\r\n\r\n this.vertices = [\r\n new THREE.Vector3(-size.x, -size.y, -size.z),\r\n new THREE.Vector3(-size.x, size.y, -size.z),\r\n new THREE.Vector3(size.x, -size.y, -size.z),\r\n new THREE.Vector3(size.x, size.y, -size.z),\r\n new THREE.Vector3(-size.x, -size.y, size.z),\r\n new THREE.Vector3(-size.x, size.y, size.z),\r\n new THREE.Vector3(size.x, -size.y, size.z),\r\n new THREE.Vector3(size.x, size.y, size.z),\r\n new THREE.Vector3(0.0, 0.0, 0.0), // Placeholder for section\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n ];\r\n\r\n geo.setAttribute('position', new THREE.BufferAttribute(new Float32Array(this.vertices.length * 3), 3));\r\n\r\n this.name = 'VolumeMesh';\r\n }\r\n\r\n static _corners = [\r\n // x, y, z, edge1, edge2, edge3\r\n [-1, -1, -1, 0, 4, 8],\r\n [1, -1, -1, 0, 5, 9],\r\n [1, 1, -1, 1, 5, 10],\r\n [-1, 1, -1, 1, 4, 11],\r\n [-1, -1, 1, 2, 6, 8],\r\n [1, -1, 1, 2, 7, 9],\r\n [1, 1, 1, 3, 7, 10],\r\n [-1, 1, 1, 3, 6, 11],\r\n ];\r\n\r\n static _edges = [\r\n // corner1, corner2, center_x, center_y, center_z\r\n [0, 1, 0, -1, -1],\r\n [2, 3, 0, 1, -1],\r\n [4, 5, 0, -1, 1],\r\n [6, 7, 0, 1, 1],\r\n [0, 3, -1, 0, -1],\r\n [1, 2, 1, 0, -1],\r\n [4, 7, -1, 0, 1],\r\n [5, 6, 1, 0, 1],\r\n [0, 4, -1, -1, 0],\r\n [1, 5, 1, -1, 0],\r\n [2, 6, -1, 1, 0],\r\n [3, 7, 1, 1, 0],\r\n ];\r\n\r\n static _edgeIntersections = (function () {\r\n const edgeIntersections = [];\r\n for (let j = 0; j < 12; ++j) {\r\n edgeIntersections.push(new THREE.Vector3());\r\n }\r\n return edgeIntersections;\r\n }());\r\n\r\n _updateVertices() {\r\n // Algorithm:\r\n // 1. Get plane parameters\r\n // 2. Compute culling flags for all vertices\r\n // 3. If intersection occurs => compute from 3 to 6 intersection points\r\n const corners = VolumeMesh._corners;\r\n const edges = VolumeMesh._edges;\r\n const edgeIntersections = VolumeMesh._edgeIntersections;\r\n\r\n let i;\r\n\r\n const norm = this.clipPlane.normal;\r\n const D = this.clipPlane.constant;\r\n\r\n const vert = this.vertices;\r\n const { size } = this;\r\n\r\n const cornerMark = [0, 0, 0, 0, 0, 0, 0, 0];\r\n const edgeMark = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\r\n\r\n const curEdge = new THREE.Vector3();\r\n let curEdgeInter = null;\r\n\r\n function CheckX() {\r\n if (norm.x === 0) return 0;\r\n const x = -(norm.dot(curEdge) + D) / norm.x;\r\n if (-size.x <= x && x <= size.x) {\r\n curEdgeInter.set(x, curEdge.y, curEdge.z);\r\n if (x === size.x) return 2;\r\n if (x === -size.x) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n function CheckY() {\r\n if (norm.y === 0) return 0;\r\n const y = -(norm.dot(curEdge) + D) / norm.y;\r\n if (-size.y <= y && y <= size.y) {\r\n curEdgeInter.set(curEdge.x, y, curEdge.z);\r\n if (y === size.y) return 2;\r\n if (y === -size.y) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n function CheckZ() {\r\n if (norm.z === 0) return 0;\r\n const z = -(norm.dot(curEdge) + D) / norm.z;\r\n if (-size.z <= z && z <= size.z) {\r\n curEdgeInter.set(curEdge.x, curEdge.y, z);\r\n if (z === size.z) return 2;\r\n if (z === -size.z) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n // for each edge\r\n for (let curEdgeIdx = 0; curEdgeIdx < 12; ++curEdgeIdx) {\r\n const curEdgeSource = edges[curEdgeIdx];\r\n curEdgeInter = edgeIntersections[curEdgeIdx];\r\n\r\n curEdge.set(curEdgeSource[2], curEdgeSource[3], curEdgeSource[4]);\r\n curEdge.multiply(size);\r\n\r\n // calculate intersection point\r\n let flag = 0;\r\n if (curEdgeSource[2] === 0) flag = CheckX();\r\n if (curEdgeSource[3] === 0) flag = CheckY();\r\n if (curEdgeSource[4] === 0) flag = CheckZ();\r\n\r\n // mark corresponding corner (if plane cuts through one)\r\n if (flag === -2) {\r\n cornerMark[curEdgeSource[0]] = 1;\r\n } else if (flag === 2) {\r\n cornerMark[curEdgeSource[1]] = 1;\r\n } else if (flag === 0) {\r\n // edge is not intersected by the plane (doesn't produce a vertex)\r\n edgeMark[curEdgeIdx] = 0;\r\n }\r\n }\r\n\r\n const face = {\r\n indices: [],\r\n norm: norm.clone().negate(),\r\n };\r\n\r\n let nextVertex = 8;\r\n\r\n // for each marked corner\r\n for (i = 0; i < 8; ++i) {\r\n if (cornerMark[i] === 1) {\r\n // add corner as vertex to the face\r\n vert[nextVertex].set(corners[i][0], corners[i][1], corners[i][2]).multiply(size);\r\n face.indices.push(nextVertex++);\r\n // skip adjacent edges\r\n edgeMark[corners[i][3]] = 0;\r\n edgeMark[corners[i][4]] = 0;\r\n edgeMark[corners[i][5]] = 0;\r\n }\r\n }\r\n\r\n // for each edge that has internal intersection\r\n for (i = 0; i < 12; ++i) {\r\n if (edgeMark[i] === 1) {\r\n // add intersection point as vertex to the face\r\n vert[nextVertex].copy(edgeIntersections[i]);\r\n face.indices.push(nextVertex++);\r\n }\r\n }\r\n\r\n this.faces[6] = face;\r\n\r\n const diff = new THREE.Vector3();\r\n const coplanarPoint = new THREE.Vector3();\r\n this.clipPlane.coplanarPoint(coplanarPoint);\r\n for (i = 0; i < vert.length; ++i) {\r\n this.cullFlag[i] = false;\r\n if (i < 8) {\r\n // corners should be culled by clipping plane\r\n diff.subVectors(vert[i], coplanarPoint);\r\n this.cullFlag[i] = (norm.dot(diff) >= 0.0);\r\n } else if (i < 8 + face.indices.length) {\r\n // cross section vertices don't get culled\r\n this.cullFlag[i] = true;\r\n }\r\n }\r\n\r\n // write data to vertex buffer\r\n const positions = this.geometry.getAttribute('position');\r\n let idx = 0;\r\n for (i = 0; i < vert.length; ++i) {\r\n positions.array[idx++] = vert[i].x;\r\n positions.array[idx++] = vert[i].y;\r\n positions.array[idx++] = vert[i].z;\r\n }\r\n positions.needsUpdate = true;\r\n }\r\n\r\n _collectVertices(face, filter) {\r\n let i;\r\n const vert = this.vertices;\r\n face.indices = [];\r\n for (i = 0; i < vert.length; ++i) {\r\n if (this.cullFlag[i] && filter(vert[i])) {\r\n face.indices.push(i);\r\n }\r\n }\r\n }\r\n\r\n _sortIndices(face, right) {\r\n let i;\r\n let j;\r\n const vert = this.vertices;\r\n const angle = [];\r\n\r\n const dir = new THREE.Vector3();\r\n for (i = 1; i < face.indices.length; ++i) {\r\n dir.subVectors(vert[face.indices[i]], vert[face.indices[0]]);\r\n dir.normalize();\r\n dir.cross(right);\r\n dir.negate();\r\n angle[i] = face.norm.dot(dir);\r\n }\r\n\r\n // Exchange sort\r\n for (i = 1; i < face.indices.length - 1; ++i) {\r\n for (j = i + 1; j < face.indices.length; ++j) {\r\n if (angle[j] < angle[i]) {\r\n // swap\r\n let t = angle[i];\r\n angle[i] = angle[j];\r\n angle[j] = t;\r\n\r\n t = face.indices[i];\r\n face.indices[i] = face.indices[j];\r\n face.indices[j] = t;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _updateIndices() {\r\n // Algorithm:\r\n // 1. Get plane vertices (from 3 to 6 vertices)\r\n // 2. Get \"right\" vector in plane\r\n // 3. Sort vertices using Graham-like method\r\n // 4. Create indices\r\n\r\n let i;\r\n let faceIdx;\r\n let face;\r\n const vert = this.vertices;\r\n const { size } = this;\r\n\r\n this._collectVertices(this.faces[0], (vertex) => vertex.z === -size.z);\r\n this._collectVertices(this.faces[1], (vertex) => vertex.z === size.z);\r\n this._collectVertices(this.faces[2], (vertex) => vertex.y === -size.y);\r\n this._collectVertices(this.faces[3], (vertex) => vertex.y === size.y);\r\n this._collectVertices(this.faces[4], (vertex) => vertex.x === -size.x);\r\n this._collectVertices(this.faces[5], (vertex) => vertex.x === size.x);\r\n\r\n const vCenter = new THREE.Vector3();\r\n const vRight = new THREE.Vector3();\r\n const vDir = new THREE.Vector3();\r\n\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n\r\n if (face.indices.length === 0) continue;\r\n\r\n vCenter.set(0, 0, 0);\r\n for (i = 0; i < face.indices.length; ++i) {\r\n vCenter.add(vert[face.indices[i]]);\r\n }\r\n vCenter.multiplyScalar(1.0 / face.indices.length);\r\n vRight.subVectors(vert[face.indices[0]], vCenter);\r\n vRight.normalize();\r\n\r\n const rightProj = [];\r\n for (i = 0; i < face.indices.length; ++i) {\r\n vDir.subVectors(vert[face.indices[i]], vCenter);\r\n rightProj[i] = vDir.dot(vRight);\r\n }\r\n for (i = 1; i < face.indices.length; ++i) {\r\n if (rightProj[i] < rightProj[0]) {\r\n // swap\r\n let t = rightProj[0];\r\n rightProj[0] = rightProj[i];\r\n rightProj[i] = t;\r\n\r\n [t] = face.indices;\r\n face.indices[0] = face.indices[i];\r\n face.indices[i] = t;\r\n }\r\n }\r\n\r\n this._sortIndices(face, vRight);\r\n }\r\n\r\n let numIndices = 0;\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n if (face.indices.length >= 3) {\r\n numIndices += 3 * (face.indices.length - 2);\r\n }\r\n }\r\n let offset = 0;\r\n const indices = new Uint16Array(numIndices);\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n for (i = 0; i < face.indices.length - 2; ++i) {\r\n indices[offset] = face.indices[0]; // eslint-disable-line prefer-destructuring\r\n indices[offset + 1] = face.indices[i + 1];\r\n indices[offset + 2] = face.indices[i + 2];\r\n offset += 3;\r\n }\r\n }\r\n\r\n this.geometry.setIndex(new THREE.BufferAttribute(indices, 1));\r\n }\r\n\r\n setDataSource(dataSource) {\r\n const vm = new VolumeMaterial.VolumeMaterial();\r\n const dim = dataSource.getDimensions();\r\n const stride = dataSource.getTiledTextureStride();\r\n const texture = dataSource.buildTiledTexture();\r\n const bbox = dataSource.getBox();\r\n vm.uniforms.volumeDim.value.set(dim[0], dim[1], dim[2]);\r\n vm.uniforms.tileTex.value = texture;\r\n vm.uniforms.tileTexSize.value.set(texture.image.width, texture.image.height);\r\n vm.uniforms.tileStride.value.set(stride[0], stride[1]);\r\n Object.assign(this.volumeInfo, dataSource.getVolumeInfo());\r\n\r\n const volInfo = this.volumeInfo;\r\n vm.uniforms.delta.value.copy(volInfo.delta);\r\n vm.uniforms.boxAngles.value.set(volInfo.obtuseAngle[0], volInfo.obtuseAngle[1], volInfo.obtuseAngle[2]);\r\n\r\n this.material = vm;\r\n\r\n bbox.getSize(this.scale);\r\n bbox.getCenter(this.position);\r\n }\r\n\r\n _updateIsoLevel() {\r\n const { kSigma, kSigmaMed, kSigmaMax } = settings.now.modes.VD;\r\n const volInfo = this.volumeInfo;\r\n const mean = volInfo.dmean - volInfo.dmin;\r\n const span = volInfo.dmax - volInfo.dmin;\r\n const level = (k) => (mean + k * volInfo.sd) / span;\r\n this.material.uniforms._isoLevel0.value.set(level(kSigma), level(kSigmaMed), level(kSigmaMax));\r\n }\r\n\r\n static _nearClipPlaneOffset = 0.2;\r\n\r\n static _pos = new THREE.Vector3();\r\n\r\n static _norm = new THREE.Vector3();\r\n\r\n static _norm4D = new THREE.Vector4();\r\n\r\n static _matrixWorldToLocal = new THREE.Matrix4();\r\n\r\n static _clipPlane = new THREE.Plane();\r\n\r\n rebuild(camera) {\r\n const nearClipPlaneOffset = VolumeMesh._nearClipPlaneOffset;\r\n const pos = VolumeMesh._pos;\r\n const norm = VolumeMesh._norm;\r\n const norm4D = VolumeMesh._norm4D;\r\n const matrixWorldToLocal = VolumeMesh._matrixWorldToLocal;\r\n const clipPlane = VolumeMesh._clipPlane;\r\n\r\n this._updateIsoLevel();\r\n\r\n // get clip plane in local space\r\n camera.getWorldDirection(norm);\r\n camera.getWorldPosition(pos);\r\n pos.addScaledVector(norm, camera.near + nearClipPlaneOffset);\r\n\r\n // transform pos to local CS\r\n matrixWorldToLocal.copy(this.matrixWorld).invert();\r\n pos.applyMatrix4(matrixWorldToLocal);\r\n\r\n // transform norm to local CS\r\n norm4D.set(norm.x, norm.y, norm.z, 0.0); // NOTE: use homogeneous norm for proper transformation\r\n norm4D.applyMatrix4(matrixWorldToLocal);\r\n norm.copy(norm4D);\r\n norm.normalize();\r\n\r\n clipPlane.setFromNormalAndCoplanarPoint(norm, pos);\r\n\r\n if (!this.clipPlane.equals(clipPlane)) {\r\n this.clipPlane = clipPlane.clone();\r\n this._updateVertices();\r\n this._updateIndices();\r\n }\r\n }\r\n}\r\n\r\nexport default VolumeMesh;\r\n","import * as THREE from 'three';\r\nimport gfxutils from './gfxutils';\r\n\r\nfunction _flattenArray(input) {\r\n const n = input.length;\r\n const output = new Float32Array(n * 3);\r\n for (let i = 0; i < n; ++i) {\r\n const j = 3 * i;\r\n const v = input[i];\r\n output[j] = v.x;\r\n output[j + 1] = v.y;\r\n output[j + 2] = v.z;\r\n }\r\n return output;\r\n}\r\n\r\nclass VolumeBounds {\r\n static _projectionTable = { // corresponds between (origin axes and angles between them) and between saving vector coordinates\r\n XY: ['x', 2],\r\n XZ: ['y', 1],\r\n YZ: ['z', 0],\r\n };\r\n\r\n constructor(bBox, volInfo) {\r\n const { delta } = volInfo; // {x: XY, y : XZ, z: YZ}\r\n const { obtuseAngle } = volInfo; // 1 - obtuse, 0 - acute\r\n\r\n const bSize = new THREE.Vector3();\r\n bBox.getSize(bSize);\r\n bSize.multiplyScalar(0.5);\r\n\r\n const offsetVert = this._getBaseVertices(delta, obtuseAngle);\r\n\r\n const geometry = new THREE.BufferGeometry();\r\n const vertices = [];\r\n\r\n for (let i = 0; i < 4; i++) {\r\n vertices.push(offsetVert[i].clone().multiply(bSize));\r\n vertices.push(offsetVert[(i + 1) % 4].clone().multiply(bSize));\r\n }\r\n const translation = new THREE.Vector3(2 * bSize.x * (1 - delta.x - delta.y), 0, 0);\r\n for (let i = 0; i < 8; i++) {\r\n vertices.push(vertices[i].clone().add(translation));\r\n }\r\n for (let i = 0; i < 4; i++) {\r\n vertices.push(vertices[i * 2].clone());\r\n vertices.push(vertices[i * 2 + 8].clone());\r\n }\r\n const center = new THREE.Vector3();\r\n bBox.getCenter(center);\r\n vertices.forEach((vertex) => vertex.add(center)); // pivot shift\r\n\r\n const flatVertices = _flattenArray(vertices);\r\n geometry.setAttribute('position', new THREE.BufferAttribute(flatVertices, 3));\r\n\r\n this._lines = new THREE.LineSegments(geometry, new THREE.LineBasicMaterial({ color: 0xFFFFFF }));\r\n this._lines.layers.set(gfxutils.LAYERS.VOLUME);\r\n }\r\n\r\n // Set one edge (4 points) of frame, from which with parallel transfer the rest of the frame points can be obtained\r\n _getBaseVertices(delta, obtuseAngle) {\r\n const projTable = VolumeBounds._projectionTable;\r\n\r\n const proj = ((index, inv) => { // tricky function to take account of projections: their position(related to box) and sign\r\n const currDelta = delta[projTable[index][0]];\r\n const angleValue = -0.5 * (inv - 1) + inv * obtuseAngle[projTable[index][1]];// inv = 1: alpha; inv = -1: 1 - alpha\r\n return angleValue * currDelta;\r\n });\r\n\r\n const offsetVert = [\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', 1) + proj('XY', 1)), -1 + 2 * proj('YZ', 1), -1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', -1) + proj('XY', 1)), -1 + 2 * proj('YZ', -1), 1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', -1) + proj('XY', -1)), 1 - 2 * proj('YZ', 1), 1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', 1) + proj('XY', -1)), 1 - 2 * proj('YZ', -1), -1),\r\n ];\r\n\r\n return offsetVert;\r\n }\r\n\r\n getMesh() {\r\n return this._lines;\r\n }\r\n}\r\n\r\nexport default VolumeBounds;\r\n","import * as THREE from 'three';\r\nimport VolumeMaterial from './shaders/VolumeMaterial';\r\nimport meshes from './meshes/meshes';\r\nimport gfxutils from './gfxutils';\r\n\r\n// Thes geometric far plane is required for correct filling in the BFTexture in case, when far plane cuts the volume\r\n// cube. In cut place of cube there is no correct data in BFTexture and volume rendering integral is calculated\r\n// with errors.\r\n// Far plane cuts the cube in case of large volume scale (zoom), because farplane doesn't change\r\nclass VolumeFarPlane {\r\n // create plane with unit corners coords (for future rescale in vshader according to camera properties)\r\n constructor(volume, width, height) {\r\n const planeGeo = this._initPlaneGeo(width, height);\r\n\r\n const mat = new VolumeMaterial.BackFacePosMaterialFarPlane();\r\n this._plane = new meshes.Mesh(planeGeo, mat);\r\n this._plane.frustumCulled = false;\r\n this._plane.doubleSided = true;\r\n const matWorldToVolume = new THREE.Matrix4();\r\n\r\n this._plane._onBeforeRender = function (_renderer, _scene, camera, _geometry, _material, _group) {\r\n const { material } = this;\r\n if (!volume || !material) {\r\n return;\r\n }\r\n\r\n // count point in world at farplane place\r\n const planeCamPos = new THREE.Vector4(0, 0, -(camera.far - 0.1), 1);\r\n planeCamPos.applyMatrix4(camera.matrixWorld);\r\n\r\n // recalc matrices to make plane be placed as farplane in the World relative to camera\r\n this.matrix.identity();\r\n this.matrix.makeTranslation(planeCamPos.x, planeCamPos.y, planeCamPos.z);\r\n this.matrixWorld.copy(this.matrix);\r\n this.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, this.matrixWorld);\r\n this.normalMatrix.getNormalMatrix(this.modelViewMatrix);\r\n\r\n // build worldToVolume matrix to transform plane into volumeCS (volumeCS coords are written to BackFaceTexture)\r\n const volumeMatrix = volume.matrixWorld;\r\n matWorldToVolume.copy(volumeMatrix).invert();\r\n\r\n // update material props\r\n material.uniforms.aspectRatio.value = camera.aspect;\r\n material.uniforms.farZ.value = camera.far;\r\n material.uniforms.tanHalfFOV.value = Math.tan(THREE.MathUtils.DEG2RAD * 0.5 * camera.fov);\r\n material.uniforms.matWorld2Volume.value = matWorldToVolume;\r\n };\r\n\r\n // set it to special layer to draw only into BFTexture\r\n this._plane.layers.set(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n }\r\n\r\n _initPlaneGeo(width, height) {\r\n const planeGeo = new THREE.BufferGeometry();\r\n\r\n width = width || 1;\r\n height = height || 1;\r\n\r\n const vertices = new Float32Array([\r\n -0.5 * width, 0.5 * height, 0,\r\n 0.5 * width, 0.5 * height, 0,\r\n -0.5 * width, -0.5 * height, 0,\r\n 0.5 * width, -0.5 * height, 0,\r\n ]);\r\n\r\n planeGeo.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n planeGeo.setIndex([0, 2, 1, 2, 3, 1]);\r\n\r\n return planeGeo;\r\n }\r\n\r\n getMesh() {\r\n return this._plane;\r\n }\r\n}\r\n\r\nexport default VolumeFarPlane;\r\n","import * as THREE from 'three';\r\nimport VolumeMesh from './gfx/VolumeMesh';\r\nimport VolumeBounds from './gfx/VolumeBounds';\r\nimport VolumeFarPlane from './gfx/VolumeFarPlane';\r\nimport Visual from './Visual';\r\nimport settings from './settings';\r\n\r\nclass VolumeVisual extends Visual {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this._mesh = new VolumeMesh();\r\n this._mesh.setDataSource(dataSource);\r\n this.add(this._mesh);\r\n\r\n this._frame = new VolumeBounds(this.getBoundaries().boundingBox, this._mesh.volumeInfo);\r\n this.add(this._frame.getMesh());\r\n this.showFrame(settings.now.modes.VD.frame);\r\n\r\n this._farPlane = new VolumeFarPlane(this._mesh, 2, 2);\r\n this.add(this._farPlane.getMesh());\r\n }\r\n\r\n getBoundaries() {\r\n const box = this._dataSource.getBox();\r\n const sphere = new THREE.Sphere();\r\n box.getBoundingSphere(sphere);\r\n\r\n return {\r\n boundingBox: box,\r\n boundingSphere: sphere,\r\n };\r\n }\r\n\r\n getMesh() {\r\n return this._mesh;\r\n }\r\n\r\n showFrame(needShow) {\r\n this._frame.getMesh().material.visible = needShow;\r\n }\r\n}\r\n\r\nexport default VolumeVisual;\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available loaders.\r\n * @extends EntityList\r\n */\r\nclass LoaderList extends EntityList {\r\n /**\r\n * Create a list of loaders.\r\n * The loaders are indexed by supported source types (`.types` property of a Loader\r\n * subclass).\r\n * The loaders can be retrieved later by matching against specs (see {@link LoaderList#find}).\r\n *\r\n * @param {!Array=} someLoaders A list of {@link Loader} subclasses to\r\n * automatically register at creation time.\r\n * @see LoaderList#register\r\n */\r\n constructor(someLoaders = []) {\r\n super(someLoaders, ['types']);\r\n }\r\n\r\n /**\r\n * Find a suitable loader for a source type.\r\n *\r\n * @param {Object} specs Loader specifications.\r\n * @param {string=} specs.type Supported source type.\r\n * @param {*=} specs.source Source to load from.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.type) {\r\n list = this._dict.types[specs.type.toLowerCase()] || [];\r\n } else if (specs.source) {\r\n return this._list.filter((SomeLoader) => SomeLoader.canProbablyLoad && SomeLoader.canProbablyLoad(specs.source));\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default LoaderList;\r\n","import EventDispatcher from '../../utils/EventDispatcher';\r\nimport makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Loader extends EventDispatcher {\r\n constructor(source, options) {\r\n super();\r\n this._source = source;\r\n this._options = options || {};\r\n this._abort = false;\r\n this._agent = null;\r\n }\r\n\r\n load() {\r\n return Promise.reject(new Error('Loading from this source is not implemented'));\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n if (this._agent) {\r\n this._agent.abort();\r\n }\r\n }\r\n\r\n static extractName(_source) {\r\n return undefined;\r\n }\r\n}\r\n\r\nmakeContextDependent(Loader.prototype);\r\n","import Loader from './Loader';\r\n\r\nexport default class FileLoader extends Loader {\r\n constructor(source, options) {\r\n super(source, options);\r\n\r\n options = this._options;\r\n this._binary = options.binary === true;\r\n }\r\n\r\n load() {\r\n return new Promise((resolve, reject) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n\r\n const blob = this._source;\r\n const reader = this._agent = new FileReader();\r\n\r\n reader.addEventListener('load', () => {\r\n resolve(reader.result);\r\n });\r\n reader.addEventListener('error', () => {\r\n reject(reader.error);\r\n });\r\n reader.addEventListener('abort', () => {\r\n reject(new Error('Loading aborted'));\r\n });\r\n reader.addEventListener('progress', (event) => {\r\n this.dispatchEvent(event);\r\n });\r\n\r\n if (this._binary) {\r\n reader.readAsArrayBuffer(blob);\r\n } else {\r\n reader.readAsText(blob);\r\n }\r\n });\r\n }\r\n\r\n static canProbablyLoad(source) {\r\n return (File && source instanceof File) || (Blob && source instanceof Blob);\r\n }\r\n\r\n static extractName(source) {\r\n return source && source.name;\r\n }\r\n}\r\n\r\nFileLoader.types = ['file', 'blob'];\r\n","import _ from 'lodash';\r\nimport Loader from './Loader';\r\n\r\n// we don't need to detect all kinds of URLs, just the evident ones\r\nconst urlStartRegexp = /^(https?|ftp):\\/\\//i;\r\n\r\nexport default class XHRLoader extends Loader {\r\n constructor(source, options) {\r\n super(source, options);\r\n\r\n options = this._options;\r\n this._binary = (options.binary === true);\r\n }\r\n\r\n load() {\r\n return new Promise((resolve, reject) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n\r\n const url = this._source;\r\n const request = this._agent = new XMLHttpRequest();\r\n\r\n request.addEventListener('load', () => {\r\n if (request.status === 200) {\r\n resolve(request.response);\r\n } else {\r\n reject(new Error(`HTTP ${request.status} while fetching ${url}`));\r\n }\r\n });\r\n request.addEventListener('error', () => {\r\n reject(new Error('HTTP request failed'));\r\n });\r\n request.addEventListener('abort', () => {\r\n reject(new Error('Loading aborted'));\r\n });\r\n request.addEventListener('progress', (event) => {\r\n this.dispatchEvent(event);\r\n });\r\n\r\n request.open('GET', url);\r\n if (this._binary) {\r\n request.responseType = 'arraybuffer';\r\n } else {\r\n request.responseType = 'text';\r\n }\r\n request.send();\r\n });\r\n }\r\n\r\n static canProbablyLoad(source) {\r\n return _.isString(source) && urlStartRegexp.test(source);\r\n }\r\n\r\n static extractName(source) {\r\n if (source) {\r\n const last = (source.indexOf('?') + 1 || source.lastIndexOf('#') + 1 || source.length + 1) - 1;\r\n return source.slice(source.lastIndexOf('/', last) + 1, last);\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nXHRLoader.types = ['url'];\r\n","import Loader from './Loader';\r\n\r\nexport default class ImmediateLoader extends Loader {\r\n load() {\r\n return new Promise((resolve) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n resolve(this._source);\r\n });\r\n }\r\n\r\n static canProbablyLoad(_source) {\r\n return false;\r\n }\r\n}\r\n\r\nImmediateLoader.types = ['immediate'];\r\n","import LoaderList from './loaders/LoaderList';\r\n\r\nimport FileLoader from './loaders/FileLoader';\r\nimport XHRLoader from './loaders/XHRLoader';\r\nimport ImmediateLoader from './loaders/ImmediateLoader';\r\n\r\nexport default new LoaderList([\r\n // note: order might be important\r\n FileLoader,\r\n XHRLoader,\r\n ImmediateLoader,\r\n]);\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available parsers.\r\n * @extends EntityList\r\n */\r\nclass ParserList extends EntityList {\r\n /**\r\n * Create a list of parsers.\r\n * The parsers are indexed by supported data formats and file extensions (`.formats` and\r\n * `.extensions` properties of a Parser subclass).\r\n * The parsers can be retrieved later by matching against specs (see {@link ParsrerList#find}).\r\n *\r\n * @param {!Array=} someParsers A list of {@link Parser} subclasses to\r\n * automatically register at creation time.\r\n * @see ParserList#register\r\n */\r\n constructor(someParsers = []) {\r\n super(someParsers, ['formats', 'extensions']);\r\n }\r\n\r\n /**\r\n * Find a suitable parser for data.\r\n *\r\n * @param {Object} specs Parser specifications.\r\n * @param {string=} specs.format Supported data format.\r\n * @param {string=} specs.ext Supported filename extension.\r\n * @param {*=} specs.data Data to parse.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.format) {\r\n list = this._dict.formats[specs.format.toLowerCase()] || [];\r\n } else if (specs.ext) {\r\n list = this._dict.extensions[specs.ext.toLowerCase()] || [];\r\n }\r\n // autodetect only if no format is forced\r\n if (list.length === 0 && !specs.format && specs.data) {\r\n return this._list.filter((SomeParser) => SomeParser.canProbablyParse && SomeParser.canProbablyParse(specs.data));\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default ParserList;\r\n","import makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Parser {\r\n constructor(data, options) {\r\n this._data = data;\r\n this._options = options || {};\r\n this._abort = false;\r\n }\r\n\r\n parseSync() {\r\n throw new Error('Parsing this type of data is not implemented');\r\n }\r\n\r\n parse() {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n try {\r\n if (this._abort) {\r\n return reject(new Error('Parsing aborted'));\r\n }\r\n return resolve(this.parseSync());\r\n } catch (error) {\r\n return reject(error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // only for volume Parsers\r\n getModel() {\r\n this.model._parseHeader(this._data);\r\n return this.model;\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n }\r\n}\r\n\r\nmakeContextDependent(Parser.prototype);\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Parser helper for PDB tag \"REMARK 290\".\r\n *\r\n * @exports Remark290\r\n * @constructor\r\n */\r\nclass Remark290 {\r\n constructor() {\r\n /** @type {THREE.Matrix4[]} */\r\n this.matrices = [];\r\n\r\n /** @type {?THREE.Matrix4} */\r\n this._matrix = null;\r\n /** @type {number} */\r\n this._matrixIndex = -1;\r\n }\r\n\r\n /**\r\n * Parse a single line of a stream.\r\n * @param {PDBStream} stream - stream to parse\r\n */\r\n\r\n parse(stream) {\r\n /** @type {?THREE.Matrix4} */\r\n let matrix = this._matrix;\r\n\r\n if (stream.readString(12, 18) === ' SMTRY') {\r\n const matrixRow = stream.readCharCode(19) - 49; // convert '1', '2', or '3' -> 0, 1, or 2\r\n const matrixData = stream.readString(20, 80).trim().split(/\\s+/);\r\n const matrixIndex = parseInt(matrixData[0], 10);\r\n if (this._matrix === null || matrixIndex !== this._matrixIndex) {\r\n // TODO: assert(matrixIndex === this.matrices.length + 1);\r\n this._matrixIndex = matrixIndex;\r\n this._matrix = matrix = new THREE.Matrix4();\r\n this.matrices[this.matrices.length] = matrix;\r\n }\r\n\r\n const { elements } = matrix;\r\n elements[matrixRow] = parseFloat(matrixData[1]);\r\n elements[matrixRow + 4] = parseFloat(matrixData[2]);\r\n elements[matrixRow + 8] = parseFloat(matrixData[3]);\r\n elements[matrixRow + 12] = parseFloat(matrixData[4]);\r\n }\r\n }\r\n}\r\n\r\nRemark290.prototype.id = 290;\r\n\r\nexport default Remark290;\r\n","import * as THREE from 'three';\r\nimport chem from '../../../chem';\r\n\r\nconst { Assembly } = chem;\r\n\r\n/**\r\n * Parser helper for PDB tag \"REMARK 350\".\r\n *\r\n * @exports Remark350\r\n * @constructor\r\n */\r\nclass Remark350 {\r\n constructor(complex) {\r\n /** @type {Complex} */\r\n this._complex = complex;\r\n /** @type {Assembly[]} */\r\n this.assemblies = [];\r\n\r\n /** @type {?Assembly} */\r\n this._assembly = null;\r\n /** @type {?THREE.Matrix4} */\r\n this._matrix = null;\r\n /** @type {number} */\r\n this._matrixIndex = -1;\r\n }\r\n\r\n /**\r\n * Parse a single line of a stream.\r\n * @param {PDBStream} stream - stream to parse\r\n */\r\n\r\n parse(stream) {\r\n /** @type {?Assembly} */\r\n let assembly = this._assembly;\r\n /** @type {?THREE.Matrix4} */\r\n let matrix = this._matrix;\r\n\r\n if (assembly && stream.readString(12, 18) === ' BIOMT') {\r\n const matrixRow = stream.readCharCode(19) - 49; // convert '1', '2', or '3' -> 0, 1, or 2\r\n const matrixData = stream.readString(20, 80).trim().split(/\\s+/);\r\n const matrixIndex = parseInt(matrixData[0], 10);\r\n if (this._matrix === null || matrixIndex !== this._matrixIndex) {\r\n // TODO: assert(matrixIndex === assembly.matrices.length + 1);\r\n this._matrixIndex = matrixIndex;\r\n this._matrix = matrix = new THREE.Matrix4();\r\n assembly.addMatrix(matrix);\r\n }\r\n\r\n const { elements } = matrix;\r\n elements[matrixRow] = parseFloat(matrixData[1]);\r\n elements[matrixRow + 4] = parseFloat(matrixData[2]);\r\n elements[matrixRow + 8] = parseFloat(matrixData[3]);\r\n elements[matrixRow + 12] = parseFloat(matrixData[4]);\r\n } else if (assembly && stream.readString(35, 41) === 'CHAINS:') {\r\n const entries = stream.readString(42, 80).split(',');\r\n for (let i = 0, n = entries.length; i < n; ++i) {\r\n const chain = entries[i].trim();\r\n if (chain.length > 0) {\r\n assembly.addChain(chain);\r\n }\r\n }\r\n } else if (stream.readString(12, 23) === 'BIOMOLECULE:') {\r\n // assert molIndex === this.assemblies.length + 1\r\n this._matrix = null;\r\n this._matrixIndex = -1;\r\n this._assembly = assembly = new Assembly(this._complex);\r\n this.assemblies.push(assembly);\r\n }\r\n }\r\n}\r\n\r\nRemark350.prototype.id = 350;\r\n\r\nexport default Remark350;\r\n","/** Helper class for stream-like reading input files. */\r\nclass PDBStream {\r\n /**\r\n * Create a stream\r\n * @param {String} data Input data\r\n */\r\n constructor(data) {\r\n /** @type String */\r\n this._data = data; // Input file\r\n /** @type Number */\r\n this._start = 0; // Starting position of line\r\n /** @type Number */\r\n this._nextCR = -1; // Position of next CR (0x0D)\r\n /** @type Number */\r\n this._nextLF = -1; // Position of next LF (0x0A)\r\n /** @type Number */\r\n this._next = -1; // End position of line\r\n /** @type Number */\r\n this._end = data.length; // End of data\r\n\r\n this.next();\r\n }\r\n\r\n /**\r\n * Reading next line.\r\n * @returns {String} Next line in data (ending with LF or CR)\r\n */\r\n readLine() {\r\n return this._data.slice(this._start, this._next);\r\n }\r\n\r\n /**\r\n * Reading character from position.\r\n * @param {Number} pos - Position in current line.\r\n * @returns {String} Character from position\r\n */\r\n readChar(pos) {\r\n pos = this._start + pos - 1;\r\n return pos < this._next ? this._data[pos] : ' ';\r\n }\r\n\r\n /**\r\n * Reading character code from position.\r\n * @param {Number} pos - Position in current line.\r\n * @returns {Number} Character code from position\r\n */\r\n readCharCode(pos) {\r\n pos = this._start + pos - 1;\r\n return pos < this._next ? this._data.charCodeAt(pos) : 32;\r\n }\r\n\r\n /**\r\n * Reading string from begin to end points.\r\n * For a reason unknown, numbering assumed not to start from 0, but from 1.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {String} String from begin to end\r\n */\r\n readString(begin, end) {\r\n const from = this._start + begin - 1;\r\n const to = this._start + end;\r\n return this._data.slice(from, to < this._next ? to : this._next);\r\n }\r\n\r\n /**\r\n * Reading integer from begin to end points.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {Number} Integer from begin to end\r\n */\r\n readInt(begin, end) {\r\n return parseInt(this.readString(begin, end), 10);\r\n }\r\n\r\n /**\r\n * Reading float from begin to end points.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {Number} Float from begin to end\r\n */\r\n readFloat(begin, end) {\r\n return parseFloat(this.readString(begin, end));\r\n }\r\n\r\n /**\r\n * Checking for end of data.\r\n * @returns {boolean} True if data is ended, false otherwise\r\n */\r\n end() {\r\n return this._start >= this._end;\r\n }\r\n\r\n /**\r\n * Procedure to re-arrange current pointers in data.\r\n */\r\n next() {\r\n const start = this._next + 1;\r\n this._start = start < this._end ? start : this._end;\r\n\r\n // support CR, LF, CR+LF line endings\r\n // do not support LF+CR, CR+CR+LF, and other strange combinations\r\n\r\n if (this._start > this._nextCR) {\r\n this._nextCR = (this._data.indexOf('\\r', this._start) + 1 || this._end + 1) - 1;\r\n }\r\n if (this._start > this._nextLF) {\r\n this._nextLF = (this._data.indexOf('\\n', this._start) + 1 || this._end + 1) - 1;\r\n }\r\n this._next = this._nextCR + 1 < this._nextLF ? this._nextCR : this._nextLF;\r\n }\r\n}\r\n\r\nexport default PDBStream;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport Remark290 from './pdb/Remark290';\r\nimport Remark350 from './pdb/Remark350';\r\nimport PDBStream from './PDBStream';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst TAG_LENGTH = 6;\r\n\r\nfunction nameToElement(name) {\r\n // http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM\r\n //\r\n // http://www.cgl.ucsf.edu/chimera/docs/UsersGuide/tutorials/pdbintro.html#note1\r\n //\r\n // Atom names start with element symbols right-justified in columns 13-14\r\n // as permitted by the length of the name. For example, the symbol FE for\r\n // iron appears in columns 13-14, whereas the symbol C for carbon appears\r\n // in column 14 (see Misaligned Atom Names). If an atom name has four\r\n // characters, however, it must start in column 13 even if the element\r\n // symbol is a single character (for example, see Hydrogen Atoms).\r\n\r\n const veryLong = name.trim().length === 4;\r\n return name.slice(0, veryLong ? 1 : 2).trim();\r\n}\r\n\r\n// the most frequently used beginnings; although HEADER is mandatory, it is often missing in handmade files\r\nconst pdbStartRegexp = /^(HEADER\\s|COMPND\\s|REMARK\\s|ATOM {2}|HETATM|MODEL )/i;\r\n\r\nconst remarkParsers = {\r\n // NOTE: please forget the idea to build the method name in runtime, it can be obfuscated.\r\n 290: Remark290,\r\n 350: Remark350,\r\n};\r\n\r\nclass PDBParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._sheet = null;\r\n this._serialAtomMap = null;\r\n this._modelId = 1;\r\n this._compaundFound = false;\r\n this._biomoleculeFound = false;\r\n this._allowedChainsIDs = null;\r\n this._lastMolId = -1;\r\n\r\n this._remarks = {};\r\n this._remark = null;\r\n\r\n this._molecules = [];\r\n this._molecule = null;\r\n this._compndCurrToken = '';\r\n\r\n this._options.fileType = 'pdb';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && pdbStartRegexp.test(data);\r\n }\r\n\r\n _finalize() {\r\n this._fixBondsArray();\r\n this._fixChains();\r\n\r\n // keep crystallographic symmetry transformations\r\n const remark290 = this._remarks[290];\r\n this._complex.symmetry = _.isUndefined(remark290) ? [] : remark290.matrices;\r\n\r\n // add loaded biological assemblies\r\n const remark350 = this._remarks[350];\r\n this._complex.units = this._complex.units.concat(_.isUndefined(remark350) ? [] : remark350.assemblies);\r\n\r\n // add loaded macromolecules\r\n this._finalizeMolecules();\r\n\r\n // create secondary structure etc.\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n _finalizeMolecules() {\r\n // get chains from complex\r\n const chainDict = {};\r\n let i;\r\n const chains = this._complex._chains;\r\n for (i = 0; i < chains.length; ++i) {\r\n const chainObj = chains[i];\r\n const chainName = chainObj._name;\r\n chainDict[chainName] = chainObj;\r\n }\r\n\r\n // aggregate residues from chains\r\n for (i = 0; i < this._molecules.length; i++) {\r\n const m = this._molecules[i];\r\n let residues = [];\r\n for (let j = 0; j < m._chains.length; j++) {\r\n const name = m._chains[j];\r\n const chain = chainDict[name];\r\n residues = residues.concat(chain._residues.slice());\r\n }\r\n const molecule = new Molecule(this._complex, m._name, i + 1);\r\n molecule.residues = residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n _fixChains() {\r\n const idChainMap = {};\r\n const complex = this._complex;\r\n\r\n // prepare\r\n for (let i = 0; i < complex._chains.length; i++) {\r\n const chain = complex._chains[i];\r\n idChainMap[chain._name.charCodeAt(0)] = chain;\r\n }\r\n }\r\n\r\n // FIXME: This function is redundant, CONECT records always follow ATOM and HETATM. Build the map online.\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const complex = this._complex;\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, ni = atoms.length; i < ni; ++i) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n const bonds = complex._bonds;\r\n const { logger } = this;\r\n for (let j = 0, nj = bonds.length; j < nj; ++j) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n logger.debug('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _parseATOM(stream) {\r\n if (this._modelId !== 1) {\r\n return;\r\n }\r\n\r\n const het = stream.readCharCode(1) === 0x48;\r\n\r\n // field names according to wwPDB Format\r\n // NOTE: Chimera allows (nonstandard) use of columns 6-11 for the integer atom serial number in ATOM records.\r\n const serial = het ? stream.readInt(7, 11) : stream.readInt(6, 11);\r\n let name = stream.readString(13, 16);\r\n const altLoc = stream.readChar(17);\r\n const resName = stream.readString(18, 20).trim();\r\n const chainID = stream.readChar(22);\r\n const resSeq = stream.readInt(23, 26);\r\n const iCode = stream.readChar(27);\r\n const x = stream.readFloat(31, 38);\r\n const y = stream.readFloat(39, 46);\r\n const z = stream.readFloat(47, 54);\r\n const occupancy = stream.readFloat(55, 60);\r\n const tempFactor = stream.readFloat(61, 66);\r\n const element = stream.readString(77, 78).trim() || nameToElement(name);\r\n const charge = stream.readInt(79, 80) || 0;\r\n\r\n // skip waters (there may be lots of them)\r\n if (this.settings.now.nowater) {\r\n if (resName === 'HOH' || resName === 'WAT') {\r\n return;\r\n }\r\n }\r\n\r\n // PDB uses positional system for atom names. It helps derive element type from the name\r\n // but names may include extra spaces. From this point on we don't need those spaces anymore.\r\n name = name.trim();\r\n\r\n const type = Element.getByName(element);\r\n const role = Element.Role[name]; // FIXME: Maybe should use type as additional index (\" CA \" vs. \"CA \")\r\n\r\n // NOTE: Residues of a particular chain are not required to be listed next to each other.\r\n // https://github.com/biasmv/pv/commit/7319b898b7473ba380c26699e3b028b2b1a7e1a1\r\n let chain = this._chain;\r\n if (!chain || chain.getName() !== chainID) {\r\n this._chain = chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = null;\r\n }\r\n\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n this._residue = residue = chain.addResidue(resName, resSeq, iCode);\r\n }\r\n\r\n const xyz = new THREE.Vector3(x, y, z);\r\n residue.addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n _parseENDMDL() {\r\n this._modelId += 1;\r\n }\r\n\r\n _parseCONECT(stream) {\r\n const serial0 = stream.readInt(7, 11);\r\n const serial1 = stream.readInt(12, 16);\r\n const serial2 = stream.readInt(17, 21);\r\n const serial3 = stream.readInt(22, 26);\r\n const serial4 = stream.readInt(27, 31);\r\n\r\n const complex = this._complex;\r\n\r\n // Keep bonds ordered by atom serial\r\n if (serial1 && serial1 > serial0) {\r\n complex.addBond(serial0, serial1, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial2 && serial2 > serial0) {\r\n complex.addBond(serial0, serial2, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial3 && serial3 > serial0) {\r\n complex.addBond(serial0, serial3, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial4 && serial4 > serial0) {\r\n complex.addBond(serial0, serial4, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n }\r\n\r\n _parseCOMPND(stream) {\r\n const str = stream.readString(11, 80);\r\n const tokenIdx = str.indexOf(':');\r\n this._compndCurrToken = tokenIdx > 0 ? str.substring(0, tokenIdx).trim() : this._compndCurrToken;\r\n\r\n // start reading new molecule\r\n if (this._compndCurrToken === 'MOL_ID') {\r\n this._molecule = { _index: '', _chains: [] };\r\n this._molecule._index = parseInt(str.substring(tokenIdx + 1, str.indexOf(';')), 10);\r\n this._molecules.push(this._molecule);\r\n // parse molecule name\r\n } else if (this._compndCurrToken === 'MOLECULE' && this._molecule != null) {\r\n this._molecule._name = str.substring(tokenIdx + 1, str.indexOf(';')).trim();\r\n // parse molecule chains\r\n } else if (this._compndCurrToken === 'CHAIN' && this._molecule != null) {\r\n let chainStr = str.substring(tokenIdx + 1, 80).trim();\r\n const lastChar = chainStr[chainStr.length - 1];\r\n if (lastChar === ';' || lastChar === ',') {\r\n chainStr = chainStr.slice(0, -1);\r\n }\r\n chainStr = chainStr.replace(/\\s+/g, '');\r\n const chains = chainStr.split(',');\r\n this._molecule._chains = this._molecule._chains.concat(chains);\r\n }\r\n }\r\n\r\n _parseREMARK(stream) {\r\n const remarkNum = stream.readInt(8, 10);\r\n\r\n // create remark parser if needed\r\n let remark = this._remarks[remarkNum];\r\n if (_.isUndefined(remark)) {\r\n const RemarkParser = remarkParsers[remarkNum];\r\n if (_.isFunction(RemarkParser)) {\r\n this._remarks[remarkNum] = remark = new RemarkParser(this._complex);\r\n }\r\n }\r\n\r\n // delegate parsing\r\n if (!_.isUndefined(remark)) {\r\n remark.parse(stream);\r\n }\r\n }\r\n\r\n _parseHELIX(stream) {\r\n const fields = [20, 22, 32, 34];\r\n\r\n this._parseSTRUCTURE(stream, fields, (obj) => {\r\n this._complex.addHelix(obj);\r\n this._complex.structures.push(obj);\r\n });\r\n }\r\n\r\n _parseSHEET(stream) {\r\n const fields = [22, 23, 33, 34];\r\n\r\n this._parseSTRUCTURE(stream, fields, (obj) => {\r\n this._complex.addSheet(obj);\r\n });\r\n }\r\n\r\n _parseSTRUCTURE(stream, pars, adder) {\r\n const startId = 0;\r\n const startIndex = 1;\r\n const endId = 2;\r\n const endIndex = 3;\r\n\r\n // identify fields: debugging and stuff\r\n\r\n const codeOfS = 0x53;\r\n const serialNumber = stream.readInt(8, 10);\r\n const structureName = stream.readString(12, 14).trim(); // FIXME: LString(3) forbids trim()\r\n const comment = stream.readString(41, 70).trim();\r\n const helLength = stream.readInt(72, 76);\r\n const helixClass = stream.readInt(39, 40);\r\n const shWidth = stream.readInt(15, 16);\r\n const shCur = stream.readInt(42, 45);\r\n const shPrev = stream.readInt(57, 60);\r\n\r\n // file fields\r\n const startChainID = stream.readString(pars[startId], pars[endId] + 1).charCodeAt(0);\r\n const endChainID = stream.readString(pars[endId], pars[endId] + 1).charCodeAt(0);\r\n const startSequenceNumber = stream.readInt(pars[startIndex], pars[startIndex] + 3);\r\n let iCodeStr = stream.readString(pars[startIndex] + 4, pars[startIndex] + 4);\r\n let startICode = 0;\r\n\r\n if (iCodeStr.length > 0) {\r\n startICode = iCodeStr.charCodeAt(0);\r\n }\r\n const endSequenceNumber = stream.readInt(pars[endIndex], pars[endIndex] + 3);\r\n iCodeStr = stream.readString(pars[endIndex] + 4, pars[endIndex] + 4);\r\n let endICode = 0;\r\n if (iCodeStr.length > 0) {\r\n endICode = iCodeStr.charCodeAt(0);\r\n }\r\n\r\n let obj;\r\n let cs = this._sheet;\r\n if (stream.readCharCode(1) === codeOfS) {\r\n if (cs !== null && cs.getName() !== structureName) {\r\n cs = null;\r\n this._sheet = null;\r\n }\r\n if (cs === null) {\r\n this._sheet = obj = new Sheet(structureName, shWidth);\r\n adder(obj);\r\n } else {\r\n obj = cs;\r\n }\r\n const strand = new Strand(\r\n obj,\r\n this._complex.getUnifiedSerial(startChainID, startSequenceNumber, startICode),\r\n this._complex.getUnifiedSerial(endChainID, endSequenceNumber, endICode),\r\n helixClass,\r\n shCur,\r\n shPrev,\r\n );\r\n obj.addStrand(strand);\r\n this._complex.structures.push(strand);\r\n } else {\r\n obj = new Helix(\r\n helixClass,\r\n this._complex.getUnifiedSerial(startChainID, startSequenceNumber, startICode),\r\n this._complex.getUnifiedSerial(endChainID, endSequenceNumber, endICode),\r\n serialNumber,\r\n structureName,\r\n comment,\r\n helLength,\r\n );\r\n adder(obj);\r\n }\r\n }\r\n\r\n _parseHEADER(stream) {\r\n const { metadata } = this._complex;\r\n metadata.classification = stream.readString(11, 50).trim();\r\n metadata.date = stream.readString(51, 59).trim();\r\n\r\n const id = stream.readString(63, 66).trim();\r\n metadata.id = id;\r\n if (id) {\r\n this._complex.name = id;\r\n }\r\n metadata.format = 'pdb';\r\n }\r\n\r\n _parseTITLE(stream) {\r\n const { metadata } = this._complex;\r\n metadata.title = metadata.title || [];\r\n\r\n const line = stream.readInt(9, 10) || 1;\r\n metadata.title[line - 1] = stream.readString(11, 80).trim();\r\n }\r\n\r\n static tagParsers = {\r\n HEADER: PDBParser.prototype._parseHEADER,\r\n 'TITLE ': PDBParser.prototype._parseTITLE,\r\n 'ATOM ': PDBParser.prototype._parseATOM,\r\n HETATM: PDBParser.prototype._parseATOM,\r\n ENDMDL: PDBParser.prototype._parseENDMDL,\r\n CONECT: PDBParser.prototype._parseCONECT,\r\n COMPND: PDBParser.prototype._parseCOMPND,\r\n REMARK: PDBParser.prototype._parseREMARK,\r\n // 'SOURCE': PDBParser.prototype._parseSOURCE,\r\n 'HELIX ': PDBParser.prototype._parseHELIX,\r\n 'SHEET ': PDBParser.prototype._parseSHEET,\r\n\r\n // nonstandard extension to allow range 100,000 - 999,999\r\n 'ATOM 1': PDBParser.prototype._parseATOM,\r\n 'ATOM 2': PDBParser.prototype._parseATOM,\r\n 'ATOM 3': PDBParser.prototype._parseATOM,\r\n 'ATOM 4': PDBParser.prototype._parseATOM,\r\n 'ATOM 5': PDBParser.prototype._parseATOM,\r\n 'ATOM 6': PDBParser.prototype._parseATOM,\r\n 'ATOM 7': PDBParser.prototype._parseATOM,\r\n 'ATOM 8': PDBParser.prototype._parseATOM,\r\n 'ATOM 9': PDBParser.prototype._parseATOM,\r\n };\r\n\r\n parseSync() {\r\n const stream = new PDBStream(this._data);\r\n const result = this._complex = new Complex();\r\n\r\n // parse PDB line by line\r\n while (!stream.end()) {\r\n const tag = stream.readString(1, TAG_LENGTH);\r\n const func = PDBParser.tagParsers[tag];\r\n if (_.isFunction(func)) {\r\n func.call(this, stream);\r\n }\r\n stream.next();\r\n }\r\n\r\n // Resolve indices and serials to objects\r\n this._finalize();\r\n\r\n // cleanup\r\n this._serialAtomMap = null;\r\n this._sheet = null;\r\n this._residue = null;\r\n this._chain = null;\r\n this._complex = null;\r\n\r\n if (result.getAtomCount() === 0) {\r\n throw new Error('The data does not contain valid atoms');\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nPDBParser.formats = ['pdb'];\r\nPDBParser.extensions = ['.pdb', '.ent'];\r\n\r\nexport default PDBParser;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n SGroup,\r\n Bond,\r\n} = chem;\r\n\r\nconst cOrderCharCodes = {\r\n A: 0,\r\n S: 1,\r\n D: 2,\r\n T: 3,\r\n};\r\n\r\nconst cmlStartRegexp = /\\s*<\\?xml\\b[^?>]*\\?>\\s*<(?:cml|molecule)\\b/i;\r\n\r\nclass CMLParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._complex = null;\r\n this._residue = null;\r\n this._serialAtomMap = null;\r\n this._modelId = 1;\r\n this._lastMolId = -1;\r\n this._readOnlyOneMolecule = false;\r\n this._options.fileType = 'cml';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && cmlStartRegexp.test(data);\r\n }\r\n\r\n _rebuidBondIndexes(atoms, bonds) {\r\n const count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n const atomId = atoms[i].id;\r\n\r\n const countBonds = bonds.length;\r\n for (let j = 0; j < countBonds; j++) {\r\n const idxs = bonds[j].atomRefs2.split(' ');\r\n if (idxs[0] === atomId) {\r\n bonds[j].start = i;\r\n }\r\n\r\n if (idxs[1] === atomId) {\r\n bonds[j].end = i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _createSGroup(molecule, moleculeArr) {\r\n const newGroup = new SGroup(\r\n molecule.id,\r\n molecule.fieldData,\r\n new THREE.Vector3(parseFloat(molecule.x), parseFloat(molecule.y), 0),\r\n molecule.atomRefs,\r\n molecule,\r\n );\r\n if (molecule.placement === 'Relative') {\r\n newGroup._center = new THREE.Vector3(0, 0, 0);\r\n }\r\n if (molecule.fieldName === 'MDLBG_FRAGMENT_CHARGE') {\r\n newGroup._charge = parseInt(molecule.fieldData, 10) || 0;\r\n }\r\n if (molecule.fieldName === 'MDLBG_FRAGMENT_COEFFICIENT') {\r\n newGroup._repeat = parseInt(molecule.fieldData, 10) || 1;\r\n }\r\n moleculeArr.push(newGroup);\r\n }\r\n\r\n _extractSGroup(molecule, moleculeArr) {\r\n if (!Array.isArray(moleculeArr)) {\r\n moleculeArr = [];\r\n }\r\n\r\n if (molecule) {\r\n if (Array.isArray(molecule)) {\r\n const count = molecule.length;\r\n for (let i = 0; i < count; i++) {\r\n if (molecule[i].molecule) {\r\n moleculeArr = moleculeArr.concat(this._extractSGroup(molecule[i].molecule));\r\n }\r\n this._createSGroup(molecule[i], moleculeArr);\r\n }\r\n } else {\r\n if (molecule.molecule) {\r\n if (molecule.molecule) {\r\n moleculeArr = moleculeArr.concat(this._extractSGroup(molecule.molecule));\r\n }\r\n }\r\n this._createSGroup(molecule, moleculeArr);\r\n }\r\n }\r\n\r\n return moleculeArr;\r\n }\r\n\r\n _extractSGroups(molecule, atoms) {\r\n const moleculeArr = this._extractSGroup(molecule);\r\n\r\n const count = atoms.length;\r\n let i;\r\n let j;\r\n\r\n for (i = 0; i < count; i++) {\r\n const atomId = atoms[i].id;\r\n for (j = 0; j < moleculeArr.length; j++) {\r\n const firstAtomRef = moleculeArr[j]._atoms.split(' ')[0];\r\n if (firstAtomRef === atomId) {\r\n if (!atoms[i].sgroupRef) {\r\n atoms[i].sgroupRef = [];\r\n }\r\n atoms[i].sgroupRef.push(moleculeArr[j]);\r\n }\r\n }\r\n }\r\n // build sGroups centers\r\n let atomMap = {}; // sgrpmap cache\r\n let mapEntry = null;\r\n const nLimon = 100000000;\r\n const bLow = new THREE.Vector3(nLimon, nLimon, nLimon);\r\n const bHight = new THREE.Vector3(-nLimon, -nLimon, -nLimon);\r\n\r\n function cycleFuncInner(e) {\r\n mapEntry = atomMap[e];\r\n if (mapEntry) {\r\n moleculeArr[j]._atoms.push(mapEntry.a);\r\n }\r\n }\r\n\r\n function cycleFunc(e) {\r\n mapEntry = atomMap[e];\r\n if (mapEntry) {\r\n bLow.set(Math.min(bLow.x, mapEntry.x), Math.min(bLow.y, mapEntry.y), Math.min(bLow.z, mapEntry.z));\r\n bHight.set(Math.max(bHight.x, mapEntry.x), Math.max(bHight.y, mapEntry.y), Math.max(bHight.z, mapEntry.z));\r\n cycleFuncInner(e);\r\n }\r\n }\r\n\r\n for (i = 0; i < atoms.length; i++) {\r\n atomMap[atoms[i].id] = {};\r\n atomMap[atoms[i].id].x = atoms[i].x2;\r\n if (atoms[i].x3) {\r\n atomMap[atoms[i].id].x = atoms[i].x3;\r\n }\r\n atomMap[atoms[i].id].x = parseFloat(atomMap[atoms[i].id].x);\r\n atomMap[atoms[i].id].y = atoms[i].y2;\r\n if (atoms[i].y3) {\r\n atomMap[atoms[i].id].y = atoms[i].y3;\r\n }\r\n atomMap[atoms[i].id].y = parseFloat(atomMap[atoms[i].id].y);\r\n atomMap[atoms[i].id].z = '0.0';\r\n if (atoms[i].z3) {\r\n atomMap[atoms[i].id].z = atoms[i].z3;\r\n }\r\n atomMap[atoms[i].id].z = parseFloat(atomMap[atoms[i].id].z);\r\n atomMap[atoms[i].id].a = atoms[i];\r\n }\r\n\r\n let atomsRef;\r\n for (j = 0; j < moleculeArr.length; j++) {\r\n if (moleculeArr[j]._center !== null) {\r\n bLow.set(nLimon, nLimon, nLimon);\r\n bHight.set(-nLimon, -nLimon, -nLimon);\r\n atomsRef = moleculeArr[j]._atoms.split(' ');\r\n moleculeArr[j]._atoms = [];\r\n atomsRef.forEach(cycleFunc);\r\n\r\n moleculeArr[j]._center.addVectors(bLow, bHight);\r\n moleculeArr[j]._center.multiplyScalar(0.5);\r\n } else {\r\n atomsRef = moleculeArr[j]._atoms.split(' ');\r\n moleculeArr[j]._atoms = [];\r\n atomsRef.forEach(cycleFuncInner);\r\n }\r\n }\r\n atomMap = null;\r\n }\r\n\r\n _traverseData(dom) {\r\n function isArray(o) {\r\n return Object.prototype.toString.apply(o) === '[object Array]';\r\n }\r\n\r\n function parseNode(xmlNode, result) {\r\n if (xmlNode.nodeName === '#text' && xmlNode.nodeValue.trim() === '') {\r\n return;\r\n }\r\n\r\n const jsonNode = {};\r\n jsonNode.xmlNode = xmlNode;\r\n const existing = result[xmlNode.nodeName];\r\n if (existing) {\r\n if (!isArray(existing)) {\r\n result[xmlNode.nodeName] = [existing, jsonNode];\r\n } else {\r\n result[xmlNode.nodeName].push(jsonNode);\r\n }\r\n } else {\r\n result[xmlNode.nodeName] = jsonNode;\r\n }\r\n\r\n let length;\r\n let i;\r\n if (xmlNode.attributes) {\r\n ({ length } = xmlNode.attributes);\r\n for (i = 0; i < length; i++) {\r\n const attribute = xmlNode.attributes[i];\r\n jsonNode[attribute.nodeName] = attribute.nodeValue;\r\n }\r\n }\r\n\r\n ({ length } = xmlNode.childNodes);\r\n for (i = 0; i < length; i++) {\r\n parseNode(xmlNode.childNodes[i], jsonNode);\r\n }\r\n }\r\n\r\n const result = {};\r\n if (dom.childNodes.length) {\r\n parseNode(dom.childNodes[0], result);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _findSuitableMolecule(data, molSet) {\r\n for (const key in data) {\r\n if (key === 'xmlNode') {\r\n continue;\r\n } else if (key === 'molecule') {\r\n if (data.molecule) {\r\n if (data.molecule.atomArray && data.molecule.atomArray.atom) {\r\n molSet.push(data);\r\n }\r\n if (Array.isArray(data.molecule)) {\r\n for (let i = 0; i < data.molecule.length; i++) {\r\n if (data.molecule[i].atomArray && data.molecule[i].atomArray.atom) {\r\n molSet.push({ molecule: data.molecule[i] });\r\n }\r\n }\r\n }\r\n }\r\n } else if (data[key] && data[key] !== null && typeof (data[key]) === 'object') {\r\n this._findSuitableMolecule(data[key], molSet);\r\n }\r\n }\r\n }\r\n\r\n _selectComponents(text) {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(text, 'application/xml');\r\n const traversedData = this._traverseData(doc);\r\n let rawData;\r\n const self = this;\r\n\r\n function prepareComponentCompound(data) {\r\n let atoms = [];\r\n if (data.molecule && data.molecule.atomArray && data.molecule.atomArray.atom) {\r\n if (!Array.isArray(data.molecule.atomArray.atom)) {\r\n atoms.push(data.molecule.atomArray.atom);\r\n } else {\r\n atoms = data.molecule.atomArray.atom;\r\n }\r\n } else if (!data.molecule) {\r\n const ret = {};\r\n ret.atomLabels = null;\r\n ret.labelsCount = 1;\r\n return ret;\r\n }\r\n\r\n if (data.molecule.molecule) {\r\n self._extractSGroups(data.molecule.molecule, atoms);\r\n }\r\n\r\n let atom;\r\n let count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n atom = atoms[i];\r\n atom.edges = [];\r\n }\r\n\r\n let localBond = [];\r\n if (data.molecule.bondArray && data.molecule.bondArray.bond) {\r\n if (!Array.isArray(data.molecule.bondArray.bond)) {\r\n localBond.push(data.molecule.bondArray.bond);\r\n } else {\r\n localBond = data.molecule.bondArray.bond;\r\n }\r\n }\r\n let bond;\r\n count = localBond.length;\r\n self._rebuidBondIndexes(atoms, localBond);\r\n\r\n function addCurrBond(index) {\r\n bond = localBond[index];\r\n atom = atoms[bond.start];\r\n if (!atom) {\r\n return false;\r\n }\r\n atom.edges.push(bond.end);\r\n atom = atoms[bond.end];\r\n if (!atom) {\r\n return false;\r\n }\r\n atom.edges.push(bond.start);\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < count; i++) {\r\n if (!addCurrBond(i)) {\r\n // ignore invalid bond\r\n continue;\r\n }\r\n const orderAttr = bond.xmlNode.getAttribute('order');\r\n const tc = parseInt(orderAttr, 10);\r\n // the default bond order is unknown\r\n localBond[i].order = 0;\r\n localBond[i].type = Bond.BondType.UNKNOWN;\r\n if (tc > 1) {\r\n localBond[i].order = tc;\r\n } else {\r\n // another option - bond order is a string\r\n const order = cOrderCharCodes[orderAttr];\r\n if (order !== undefined) {\r\n localBond[i].order = order;\r\n if (orderAttr === 'A') {\r\n localBond[i].type = Bond.BondType.AROMATIC;\r\n }\r\n }\r\n }\r\n }\r\n\r\n count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n atom = atoms[i];\r\n atom.edges.sort();\r\n }\r\n\r\n const labels = self._breadWidthSearch(atoms, 0); // for now\r\n\r\n const retStruct = {};\r\n retStruct.atoms = atoms;\r\n retStruct.bonds = localBond;\r\n retStruct.labels = labels.atomLabels;\r\n retStruct.count = Math.min(1, labels.labelsCount); // for now\r\n retStruct.curr = -1;\r\n retStruct.originalCML = doc;\r\n\r\n return retStruct;\r\n }\r\n\r\n if (traversedData.cml) {\r\n rawData = traversedData.cml;\r\n } else {\r\n rawData = traversedData;\r\n }\r\n const retData = [];\r\n const filteredData = [];\r\n this._findSuitableMolecule(rawData, filteredData);\r\n if (this._readOnlyOneMolecule && filteredData.length > 1) {\r\n filteredData.splice(1, filteredData.length - 1);\r\n }\r\n filteredData.forEach((d) => {\r\n const rd = prepareComponentCompound(d);\r\n if (rd.atoms.length > 0) {\r\n retData.push(rd);\r\n }\r\n });\r\n return retData;\r\n }\r\n\r\n _packLabel(compId, molId) {\r\n const shift = 16;\r\n return (molId << shift) + compId;\r\n }\r\n\r\n _unpackLabel(l) {\r\n const shift = 16;\r\n const mask = (1 << shift) - 1;\r\n return { molId: l >>> shift, compId: l & mask };\r\n }\r\n\r\n _breadWidthSearch(atoms, molID) {\r\n const atomLabels = new Array(atoms.length);\r\n\r\n let id;\r\n for (id = 0; id < atomLabels.length; id++) {\r\n atomLabels[id] = this._packLabel(0, molID);\r\n }\r\n\r\n const breadthQueue = [];\r\n let componentID = 0;\r\n let labeledAtoms = atoms.length;\r\n\r\n while (labeledAtoms > 0) {\r\n componentID++;\r\n\r\n let startID = -1;\r\n for (id = 0; id < atomLabels.length; id++) {\r\n if (this._unpackLabel(atomLabels[id]).compId === 0) {\r\n startID = id;\r\n break;\r\n }\r\n }\r\n\r\n if (startID < 0) {\r\n break;\r\n }\r\n\r\n // Bread first search\r\n breadthQueue.push(atoms[startID]);\r\n atomLabels[startID] = this._packLabel(componentID, molID);\r\n labeledAtoms--;\r\n\r\n while (breadthQueue.length > 0) {\r\n const curr = breadthQueue.shift();\r\n if (!curr) {\r\n continue;\r\n }\r\n\r\n for (let i = 0; i < curr.edges.length; i++) {\r\n if (atomLabels[curr.edges[i]] !== componentID) {\r\n breadthQueue.push(atoms[curr.edges[i]]);\r\n atomLabels[curr.edges[i]] = componentID;\r\n labeledAtoms--;\r\n }\r\n }\r\n }\r\n }\r\n const ret = {};\r\n ret.atomLabels = atomLabels;\r\n ret.labelsCount = componentID;\r\n return ret;\r\n }\r\n\r\n _parseBond(eAtom, mainAtom, order, type) {\r\n if (eAtom >= 0) {\r\n const h = [Math.min(eAtom, mainAtom), Math.max(eAtom, mainAtom)];\r\n this._complex.addBond(h[0], h[1], order, type, true);\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const complex = this._complex;\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, ni = atoms.length; i < ni; ++i) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n const bonds = complex._bonds;\r\n const { logger } = this;\r\n for (let j = 0, nj = bonds.length; j < nj; ++j) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n logger.debug('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _parseSet(varData) {\r\n const complex = this._complex = new Complex();\r\n const data = varData;\r\n const currentLabel = data.curr;\r\n const { atoms, labels } = data;\r\n let atom = null;\r\n let i;\r\n let j;\r\n const count = atoms.length;\r\n\r\n function addFunc(a) {\r\n a.xmlNodeRef = atom;\r\n if (atom.x2) {\r\n atom.x3 = atom.x2;\r\n delete atom.x2;\r\n }\r\n if (atom.y2) {\r\n atom.y3 = atom.y2;\r\n delete atom.y2;\r\n }\r\n if (!(atom.z3)) {\r\n atom.z3 = '0.0';\r\n }\r\n atom.complexAtom = a;\r\n }\r\n\r\n let chains = {};\r\n // parse atoms in label order\r\n const reorder = [];\r\n for (i = 0; i < count; i++) {\r\n reorder.push(i);\r\n }\r\n reorder.sort((a, b) => labels[a] - labels[b]);\r\n for (i = 0; i < count; i++) {\r\n const atomCharge = 0;\r\n const lLabel = labels[reorder[i]];\r\n if (this._unpackLabel(lLabel).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[reorder[i]];\r\n const atomFullNameStruct = atom.elementType;\r\n\r\n if (atom.sgroupRef) {\r\n const countRef = atom.sgroupRef.length;\r\n for (let k = 0; k < countRef; ++k) {\r\n complex._sgroups.push(atom.sgroupRef[k]);\r\n }\r\n }\r\n\r\n if (atom.x3 || atom.x2) {\r\n const currAtomComp = this._unpackLabel(lLabel).compId;\r\n // use ' ' by default instead of synthetic creation of chain names\r\n const chainID = ' '; //= String.fromCharCode('A'.charCodeAt(0) + currAtomComp);\r\n const resSeq = currAtomComp;\r\n const iCode = ' ';\r\n let strLabel = currAtomComp.toString();\r\n if (strLabel.length === 1) {\r\n strLabel = `0${strLabel}`;\r\n }\r\n const resName = `N${strLabel}`;\r\n let chain = chains[chainID];\r\n if (!chain || chain.getName() !== chainID) {\r\n chains[chainID] = chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = null;\r\n }\r\n\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n this._residue = residue = chain.addResidue(resName, resSeq, iCode);\r\n }\r\n\r\n // _x, _y, _z, mname, mindex, atomNameFull, atomName, chainID, serial, isHet, atlLocInd, atomNameToTypeF\r\n let xyz = null;\r\n if (atom.x3) {\r\n xyz = new THREE.Vector3(parseFloat(atom.x3), parseFloat(atom.y3), parseFloat(atom.z3));\r\n } else if (atom.x2) {\r\n xyz = new THREE.Vector3(parseFloat(atom.x2), parseFloat(atom.y2), 0);\r\n }\r\n let element = Element.ByName[atom.elementType.toUpperCase()];\r\n if (!element) {\r\n element = (JSON.parse(JSON.stringify(Element.ByName[\r\n Object.keys(Element.ByName)[Object.keys(Element.ByName).length - 1]])));\r\n element.number += 1;\r\n element.name = atom.elementType.toUpperCase();\r\n element.fullName = 'Unknown';\r\n Element.ByName[atom.elementType.toUpperCase()] = element;\r\n }\r\n const atomSerial = parseInt(atom.id.replace(/[^0-9]/, ''), 10);\r\n const added = residue.addAtom(\r\n atomFullNameStruct,\r\n element,\r\n xyz,\r\n Element.Role.SG,\r\n true,\r\n atomSerial,\r\n ' ',\r\n 1.0,\r\n 0.0,\r\n atomCharge,\r\n );\r\n if (atom.hydrogenCount) {\r\n added.hydrogenCount = parseInt(atom.hydrogenCount, 10);\r\n }\r\n if (atom.mrvValence) {\r\n added.valence = parseInt(atom.mrvValence, 10);\r\n }\r\n addFunc(added);\r\n }\r\n }\r\n }\r\n chains = null;// NOSONAR\r\n for (i = 0; i < data.bonds.length; i++) {\r\n const cb = data.bonds[i];\r\n if (this._unpackLabel(labels[cb.start]).molId === this._unpackLabel(currentLabel).molId\r\n && this._unpackLabel(labels[cb.end]).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[cb.start];\r\n if (!atom || !(atoms[cb.end])) {\r\n continue; // skip invalid\r\n }\r\n this._parseBond(\r\n parseInt(atom.id.replace(/[^0-9]/, ''), 10),\r\n parseInt(atoms[cb.end].id.replace(/[^0-9]/, ''), 10),\r\n cb.order,\r\n cb.type,\r\n );\r\n }\r\n }\r\n\r\n for (i = 0; i < this._complex.getSGroupCount(); i++) {\r\n const sGrp = this._complex.getSGroups()[i];\r\n for (j = 0; j < sGrp._atoms.length; j++) {\r\n sGrp._atoms[j] = sGrp._atoms[j].complexAtom;\r\n }\r\n }\r\n for (i = 0; i < count; i++) {\r\n if (this._unpackLabel(labels[i]).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[i];\r\n atom.complexAtom = null;\r\n delete atom.complexAtom;\r\n }\r\n }\r\n this._complex.originalCML = data.originalCML;\r\n this._fixBondsArray();\r\n complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n this._serialAtomMap = null;\r\n this._complex = null;\r\n return complex;\r\n }\r\n\r\n parseSync() {\r\n const complexes = [];\r\n const self = this;\r\n const moleculaSet = this._selectComponents(this._data);\r\n moleculaSet.forEach((molSet) => {\r\n molSet.curr = 2;\r\n if (molSet.count === 0) {\r\n molSet.count = 1;\r\n }\r\n for (let i = 0; i < molSet.count; i++) {\r\n molSet.curr = (i + 1);\r\n complexes.push(self._parseSet(molSet, false));\r\n }\r\n });\r\n\r\n let totalAtomsParsed = 0;\r\n complexes.forEach((c) => {\r\n totalAtomsParsed += c.getAtomCount();\r\n });\r\n if (totalAtomsParsed <= 0) {\r\n throw new Error('The data does not contain valid atoms');\r\n }\r\n\r\n if (complexes.length > 1) {\r\n const joinedComplex = new Complex();\r\n joinedComplex.joinComplexes(complexes);\r\n joinedComplex.originalCML = complexes[0].originalCML;\r\n return joinedComplex;\r\n }\r\n if (complexes.length === 1) {\r\n return complexes[0];\r\n }\r\n return new Complex();\r\n }\r\n}\r\n\r\nCMLParser.formats = ['cml'];\r\nCMLParser.extensions = ['.cml'];\r\n\r\nexport default CMLParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport MMTF from '../../../vendor/js/mmtf';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst {\r\n Complex,\r\n Chain,\r\n Atom,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Bond,\r\n Assembly,\r\n Molecule,\r\n} = chem;\r\n\r\nclass ArrayComparator {\r\n constructor(original) {\r\n this._original = Array.from(original);\r\n this._original.sort();\r\n\r\n this._sum = 0;\r\n for (let i = 0; i < this._original.length; ++i) {\r\n this._sum += this._original[i];\r\n }\r\n }\r\n\r\n compare(candidate) {\r\n const len = candidate.length;\r\n if (len !== this._original.length) {\r\n return false;\r\n }\r\n\r\n let sum = 0;\r\n let i;\r\n for (i = 0; i < len; ++i) {\r\n sum += candidate[i];\r\n }\r\n\r\n if (sum !== this._sum) {\r\n return false;\r\n }\r\n\r\n const sorted = Array.from(candidate);\r\n sorted.sort();\r\n\r\n for (i = 0; i < len; ++i) {\r\n if (sorted[i] !== this._original[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nArrayComparator.prototype.constructor = ArrayComparator;\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\n// see https://github.com/rcsb/mmtf-javascript/blob/master/src/mmtf-traverse.js\r\nconst secStructToType = [\r\n StructuralElementType.HELIX_PI, // 0\r\n StructuralElementType.BEND, // 1\r\n StructuralElementType.HELIX_ALPHA, // 2\r\n StructuralElementType.STRAND, // 3\r\n StructuralElementType.HELIX_310, // 4\r\n StructuralElementType.BRIDGE, // 5\r\n StructuralElementType.TURN, // 6\r\n StructuralElementType.COIL, // 7\r\n];\r\n\r\nfunction getFirstByte(buf) {\r\n const bytes = new Uint8Array(buf, 0, 1);\r\n return bytes[0];\r\n}\r\n\r\nclass MMTFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'mmtf';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n // check if it's binary MessagePack format containing a map (dictionary)\r\n // see https://github.com/msgpack/msgpack/blob/master/spec.md\r\n return _.isArrayBuffer(data) && ((getFirstByte(data) | 1) === 0xDF);\r\n }\r\n\r\n _onModel(_modelData) {\r\n }\r\n\r\n _onChain(chainData) {\r\n if (chainData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n const chain = new Chain(this._complex, chainData.chainName);\r\n this._complex._chains[chainData.chainIndex] = chain;\r\n chain._index = chainData.chainIndex;\r\n }\r\n\r\n _onGroup(groupData) {\r\n if (groupData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n if (this.settings.now.nowater) {\r\n // skip water\r\n if (groupData.groupName === 'HOH' || groupData.groupName === 'WAT') {\r\n return;\r\n }\r\n }\r\n\r\n const chain = this._complex._chains[groupData.chainIndex];\r\n const icode = !groupData.insCode.charCodeAt(0) ? '' : groupData.insCode;\r\n const residue = chain.addResidue(groupData.groupName, groupData.groupId, icode);\r\n residue._index = groupData.groupIndex;\r\n\r\n this._updateSecStructure(this._complex, residue, groupData);\r\n }\r\n\r\n _onAtom(atomData) {\r\n if (atomData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n const altLoc = !atomData.altLoc.charCodeAt(0) ? '' : atomData.altLoc;\r\n const atom = new Atom(\r\n atomData.groupIndex, // we store residue index here to replace it later with actual reference\r\n atomData.atomName,\r\n Element.getByName(atomData.element.toUpperCase()),\r\n new THREE.Vector3(atomData.xCoord, atomData.yCoord, atomData.zCoord),\r\n Element.Role[atomData.atomName],\r\n false, // hetero atoms will be marked later\r\n atomData.atomId,\r\n altLoc,\r\n atomData.occupancy,\r\n atomData.bFactor,\r\n atomData.formalCharge,\r\n );\r\n\r\n this._complex._atoms[atomData.atomIndex] = atom;\r\n atom.index = atomData.atomIndex;\r\n\r\n this._serialAtomMap[atomData.atomId] = atom;\r\n }\r\n\r\n _onBond(bondData) {\r\n const right = Math.max(bondData.atomIndex1, bondData.atomIndex2);\r\n if (right >= this._complex._atoms.length) {\r\n return;\r\n }\r\n const left = Math.min(bondData.atomIndex1, bondData.atomIndex2);\r\n this._complex.addBond(\r\n this._complex._atoms[left],\r\n this._complex._atoms[right],\r\n bondData.bondOrder,\r\n Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n\r\n _updateSecStructure(complex, residue, groupData) {\r\n const helixClasses = [3, -1, 1, -1, 5];\r\n\r\n if (!_.isUndefined(groupData) && groupData.secStruct === this._ssType) {\r\n residue._secondary = this._ssStruct;\r\n if (this._ssStruct) {\r\n this._ssStruct.term = residue;\r\n }\r\n return;\r\n }\r\n\r\n if (!_.isUndefined(groupData)) {\r\n // start new secondary structure\r\n const type = secStructToType[groupData.secStruct];\r\n this._ssType = groupData.secStruct;\r\n this._ssStart = residue;\r\n\r\n let struct = null;\r\n switch (this._ssType) {\r\n case -1: // undefined\r\n case 7: // coil\r\n break;\r\n case 0: // pi helix\r\n case 2: // alpha helix\r\n case 4: // 3-10 helix\r\n struct = new Helix(helixClasses[this._ssType], residue, residue, 0, '', '', 0);\r\n complex._helices.push(struct);\r\n break;\r\n case 3: { // extended\r\n const sheet = new Sheet('', 0);\r\n complex._sheets.push(sheet);\r\n struct = new Strand(sheet, residue, residue, 0, null, null);\r\n break;\r\n }\r\n default:\r\n if (type !== undefined) {\r\n struct = new StructuralElement(type, residue, residue);\r\n }\r\n break;\r\n }\r\n\r\n this._ssStruct = struct;\r\n residue._secondary = struct;\r\n if (struct) {\r\n complex.structures.push(struct);\r\n }\r\n }\r\n }\r\n\r\n _updateMolecules(mmtfData) {\r\n const entities = mmtfData.entityList;\r\n if (!entities) {\r\n return;\r\n }\r\n\r\n const chainsInModel0 = mmtfData.chainsPerModel[0];\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const chains = entity.chainIndexList;\r\n let residues = [];\r\n for (let j = 0; j < chains.length; j++) {\r\n const chainIndex = chains[j];\r\n // skip chains in models other than the first one\r\n if (chainIndex >= chainsInModel0) {\r\n continue;\r\n }\r\n const chain = this._complex._chains[chainIndex];\r\n residues = residues.concat(chain._residues.slice());\r\n }\r\n const molecule = new Molecule(this._complex, entity.description, i + 1);\r\n molecule.residues = residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n // populate complex with chains, residues and atoms\r\n _traverse(mmtfData) {\r\n const self = this;\r\n\r\n // get metadata\r\n const { metadata } = this._complex;\r\n metadata.id = mmtfData.structureId;\r\n metadata.title = [];\r\n metadata.title[0] = mmtfData.title;\r\n metadata.date = mmtfData.releaseDate;\r\n metadata.format = 'mmtf';\r\n\r\n // create event callback functions\r\n const eventCallbacks = {\r\n onModel(modelData) {\r\n self._onModel(modelData);\r\n },\r\n onChain(chainData) {\r\n self._onChain(chainData);\r\n },\r\n onGroup(groupData) {\r\n self._onGroup(groupData);\r\n },\r\n onAtom(atomData) {\r\n self._onAtom(atomData);\r\n },\r\n onBond(bondData) {\r\n self._onBond(bondData);\r\n },\r\n };\r\n\r\n // temporary variables used during traversal to track secondary structures\r\n this._ssType = -1;\r\n this._ssStruct = null;\r\n this._ssStart = null;\r\n\r\n // traverse the structure and listen to the events\r\n MMTF.traverse(mmtfData, eventCallbacks);\r\n\r\n this._updateSecStructure(this._complex);\r\n this._updateMolecules(mmtfData);\r\n }\r\n\r\n // During traversal atoms and residues don't come sequentially\r\n // so a residue for certain atom can be unavailable. Thus we\r\n // store residue index in atom.\r\n // This function being called after traversal replaces the index\r\n // with actual reference, and also populates atom lists in residues.\r\n _linkAtomsToResidues() {\r\n for (let i = 0; i < this._complex._atoms.length; ++i) {\r\n const atom = this._complex._atoms[i];\r\n const residue = this._complex._residues[atom.residue];\r\n atom.residue = residue;\r\n residue._atoms.push(atom);\r\n }\r\n }\r\n\r\n _findSynonymousChains() {\r\n const named = {};\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i];\r\n const name = chain.getName();\r\n if (!named.hasOwnProperty(name)) {\r\n named[name] = [];\r\n }\r\n\r\n named[name].push(chain._index);\r\n }\r\n\r\n return named;\r\n }\r\n\r\n // NOTE: This function relies on original chain indices, so it must be called before any magic happens to chains.\r\n _parseAssemblyInfo(mmtfData) {\r\n let i;\r\n let j;\r\n let k;\r\n const assemblies = [];\r\n const { logger } = this;\r\n\r\n for (i = 0; i < mmtfData.bioAssemblyList.length; ++i) {\r\n const baInfo = mmtfData.bioAssemblyList[i];\r\n if (baInfo.transformList.length === 0) {\r\n continue;\r\n }\r\n\r\n const chains = baInfo.transformList[0].chainIndexList;\r\n const chainListCheck = new ArrayComparator(chains);\r\n\r\n // build list of chain names\r\n const chainNames = {};\r\n for (j = 0; j < chains.length; ++j) {\r\n chainNames[this._complex._chains[chains[j]].getName()] = 1;\r\n }\r\n\r\n // all chains with the same name should belong to assembly if one of them belongs\r\n const allChains = [];\r\n let name;\r\n for (name in chainNames) {\r\n if (chainNames.hasOwnProperty(name)) {\r\n // just concat arrays -- there should be no duplicates\r\n Array.prototype.push.apply(allChains, this._chainsByName[name]);\r\n }\r\n }\r\n if (!chainListCheck.compare(allChains)) {\r\n // assembly is missing some of the chains\r\n logger.debug('MMTF: Assembly is missing some of the synonymous chains. Skipping...');\r\n }\r\n\r\n const a = new Assembly(this._complex);\r\n\r\n // add chains to assembly\r\n for (name in chainNames) {\r\n if (chainNames.hasOwnProperty(name)) {\r\n a.addChain(name);\r\n }\r\n }\r\n\r\n // add unique matrices to assembly\r\n a.addMatrix(new THREE.Matrix4().fromArray(baInfo.transformList[0].matrix).transpose());\r\n for (j = 1; j < baInfo.transformList.length; ++j) {\r\n const transform = baInfo.transformList[j];\r\n\r\n if (!chainListCheck.compare(transform.chainIndexList)) {\r\n // list of chains for this transform doesn't match that for other transforms\r\n // this is illegal in our structure\r\n logger.debug('MMTF: Chain lists differ for different transforms in one assembly. Skipping...');\r\n continue;\r\n }\r\n\r\n const m = new THREE.Matrix4().fromArray(transform.matrix).transpose();\r\n\r\n // check if matrix is already in the list\r\n for (k = 0; k < a.matrices.length; ++k) {\r\n if (a.matrices[k].equals(m)) {\r\n break;\r\n }\r\n }\r\n\r\n if (k === a.matrices.length) {\r\n a.addMatrix(m);\r\n }\r\n }\r\n\r\n a.finalize();\r\n assemblies.push(a);\r\n }\r\n\r\n return assemblies;\r\n }\r\n\r\n // NOTE: This function relies on original chain indices, so it must be called before any magic happens to chains.\r\n _markHeteroAtoms(mmtfData) {\r\n const chainsInModel0 = mmtfData.chainsPerModel[0];\r\n for (let i = 0; i < mmtfData.entityList.length; ++i) {\r\n const entity = mmtfData.entityList[i];\r\n if (entity.type !== 'polymer') {\r\n for (let j = 0; j < entity.chainIndexList.length; ++j) {\r\n const chainIndex = entity.chainIndexList[j];\r\n // skip chains in models other than the first one\r\n if (chainIndex >= chainsInModel0) {\r\n continue;\r\n }\r\n const chain = this._complex._chains[chainIndex];\r\n for (let k = 0; k < chain._residues.length; ++k) {\r\n const res = chain._residues[k];\r\n for (let m = 0; m < res._atoms.length; ++m) {\r\n res._atoms[m].het = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // joins chains with the same name into single chain\r\n _joinSynonymousChains() {\r\n let i;\r\n let j;\r\n\r\n const primaryChainsArray = [];\r\n const primaryChainsHash = {};\r\n\r\n // join chains\r\n for (i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i];\r\n const name = chain.getName();\r\n if (!primaryChainsHash.hasOwnProperty(name)) {\r\n // new name -- this is a primary chain\r\n primaryChainsHash[name] = chain;\r\n chain._index = primaryChainsArray.length; // update index as this array will later replace original chain list\r\n primaryChainsArray.push(chain);\r\n continue;\r\n }\r\n\r\n // this chain should be joined with the primary chain of the same name\r\n const primary = primaryChainsHash[name];\r\n for (j = 0; j < chain._residues.length; ++j) {\r\n const residue = chain._residues[j];\r\n primary._residues.push(residue);\r\n residue._chain = primary;\r\n }\r\n }\r\n\r\n // replace chains list with one containing only primary chains\r\n // dropping references to all chains but primary\r\n this._complex._chains = primaryChainsArray;\r\n }\r\n\r\n parseSync() {\r\n const mmtfData = MMTF.decode(this._data);\r\n\r\n this._complex = new Complex();\r\n this._serialAtomMap = {}; // filled during traversal\r\n\r\n this._traverse(mmtfData);\r\n this._linkAtomsToResidues();\r\n this._markHeteroAtoms(mmtfData);\r\n this._chainsByName = this._findSynonymousChains();\r\n Array.prototype.push.apply(this._complex.units, this._parseAssemblyInfo(mmtfData));\r\n this._joinSynonymousChains();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n\r\n return this._complex;\r\n }\r\n}\r\n\r\nMMTFParser.formats = ['mmtf'];\r\nMMTFParser.extensions = ['.mmtf'];\r\nMMTFParser.binary = true;\r\n\r\nexport default MMTFParser;\r\n","class ParsingError extends Error {\r\n constructor(message, line, column) {\r\n super(`data:${line}:${column}: ${message}`);\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, ParsingError);\r\n }\r\n\r\n this.name = 'ParsingError';\r\n this.parseLine = line;\r\n this.parseColumn = column;\r\n }\r\n}\r\n\r\nexport default ParsingError;\r\n","import _ from 'lodash';\r\nimport ParsingError from './ParsingError';\r\n\r\n// Implemented and being tested against: https://www.iucr.org/resources/cif/spec/version1.1/cifsyntax\r\n\r\nfunction _isWhitespace(ch) {\r\n return ch === 32 || ch === 10 || ch === 13 || ch === 9;\r\n}\r\n\r\nfunction _inlineIndexOf(ch0, str, idx) {\r\n const len = str.length;\r\n let ch = -1;\r\n while (idx < len) {\r\n ch = str.charCodeAt(idx);\r\n if (ch === ch0 || ch === 10) {\r\n break;\r\n }\r\n ++idx;\r\n }\r\n return ch === ch0 ? idx : -1;\r\n}\r\n\r\nexport default function readCIF(source) {\r\n let i = 0;\r\n let j = 0;\r\n const n = source.length;\r\n let code = NaN;\r\n let newline = true;\r\n let line = 1;\r\n let column = 1;\r\n let begin;\r\n let state = 0; // 0 - start, 1 - block, 2 - item, 3 - loop, 4 - values, 5 - value\r\n const result = {};\r\n let block = {};\r\n let keys = [];\r\n let keysCount = 0;\r\n let key = '';\r\n let values = [];\r\n let valuesCount = 0;\r\n let value;\r\n\r\n function _parseValue() {\r\n let val;\r\n if ((code === 46 || code === 63) && (i + 1 >= n || _isWhitespace(source.charCodeAt(i + 1)))) { // '.' or '?' .....\r\n // it's a missing value\r\n ++column;\r\n ++i;\r\n return undefined;\r\n }\r\n if (newline && code === 59) { // ';' ......................................................................\r\n // parse multi-line string\r\n j = i;\r\n let lines = 0;\r\n do {\r\n j = _inlineIndexOf(10, source, j + 1); // '\\n'\r\n if (j === -1) {\r\n throw new ParsingError('Unterminated text block found', line, column);\r\n }\r\n ++lines;\r\n } while ((j + 1 < n && source.charCodeAt(j + 1) !== code) || j + 1 >= n);\r\n val = source.substring(i + 1, j).replace(/\\r/g, '');\r\n i = j + 2;\r\n line += lines;\r\n column = 1;\r\n newline = false;\r\n return val;\r\n }\r\n if (code === 39 || code === 34) { // ''' or '\"' ...........................................................\r\n // parse quoted string\r\n j = i;\r\n do {\r\n j = _inlineIndexOf(code, source, j + 1);\r\n if (j === -1) {\r\n throw new ParsingError('Unterminated quoted string found', line, column);\r\n }\r\n } while (j + 1 < n && !_isWhitespace(source.charCodeAt(j + 1)));\r\n val = source.substring(i + 1, j);\r\n column += j - i + 1;\r\n i = j + 1;\r\n return val;\r\n } // ......................................................................................................\r\n // parse until the first whitespace\r\n j = i;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n val = source.substring(i, j);\r\n column += j - i;\r\n i = j;\r\n // try to convert to a number\r\n const num = Number(val);\r\n if (!Number.isNaN(num)) {\r\n return num;\r\n }\r\n // or leave as an unquoted string\r\n return val;\r\n }\r\n\r\n function _storeKey(tag) {\r\n keys[keysCount++] = tag;\r\n }\r\n\r\n function _storeValue(val) {\r\n const keyIndex = valuesCount % keysCount;\r\n values[keyIndex].push(val);\r\n ++valuesCount;\r\n return val;\r\n }\r\n\r\n while (i <= n) {\r\n code = source.charCodeAt(i); // 'NaN' in place of ''\r\n if (code === 13) { // '\\r' .......................................................................................\r\n // just ignore\r\n } else if (code === 10) { // '\\n' ................................................................................\r\n // take note of new lines\r\n newline = true;\r\n ++line;\r\n column = 1;\r\n } else {\r\n // process inline characters\r\n if (code === 32 || code === 9) { // ' ' or '\\t' ................................................................\r\n // just ignore\r\n } else if (code === 35) { // '#' ...............................................................................\r\n // skip the comment until before the end of the line\r\n i = _inlineIndexOf(10, source, i + 1); // '\\n'\r\n if (i === -1) {\r\n break;\r\n } else {\r\n continue; // don't forget to process the new line\r\n }\r\n } else if (state === 0) { // start =============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n j = i + 5;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // add new data block\r\n result[source.substring(begin, i)] = block = {};\r\n state = 1; // block\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Data block name missing', line, column);\r\n }\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n break;\r\n } else { // ..................................................................................................\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n }\r\n } else if (state === 1) { // block =============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n state = 0; // start\r\n continue; // parse again in a different state\r\n } else if (code === 95) { // '_' .............................................................................\r\n j = i + 1;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // start new item\r\n key = source.substring(begin, i);\r\n state = 2; // item\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Tag name missing', line, column);\r\n }\r\n } else if ((code === 76 || code === 108) && source.substr(i + 1, 4).toLowerCase() === 'oop_') { // 'loop_' ...\r\n i += 5;\r\n column += 5;\r\n if (i < n && !_isWhitespace(source.charCodeAt(i))) {\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n } else {\r\n // start new loop\r\n keys = [];\r\n keysCount = 0;\r\n values = [];\r\n valuesCount = 0;\r\n state = 3; // loop\r\n continue; // don't forget to process the whitespace\r\n }\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n break;\r\n } else { // ..................................................................................................\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n }\r\n } else if (state === 2) { // item ==============================================================================\r\n if (Number.isNaN(code)) {\r\n break;\r\n }\r\n value = _parseValue();\r\n _.set(block, key, value);\r\n state = 1; // block\r\n continue;\r\n } else if (state === 3) { // loop ==============================================================================\r\n if (code === 95) { // '_' ....................................................................................\r\n j = i + 1;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // add new key\r\n _storeKey(source.substring(begin, i));\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Tag name missing', line, column);\r\n }\r\n } else { // ..................................................................................................\r\n if (keysCount > 0) {\r\n for (let keyIndex = 0; keyIndex < keysCount; ++keyIndex) {\r\n value = [];\r\n values[keyIndex] = value;\r\n _.set(block, keys[keyIndex], value);\r\n }\r\n state = 4;\r\n continue; // parse again in a different state\r\n }\r\n throw new ParsingError('Data tags are missing inside a loop', line, column);\r\n }\r\n } else if (state === 4) { // values ============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n state = 0; // start\r\n } else if (code === 95) { // '_' .............................................................................\r\n state = 1; // block\r\n } else if ((code === 76 || code === 108) && source.substr(i + 1, 4).toLowerCase() === 'oop_') { // 'loop_' ...\r\n state = 1; // block\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n state = 0;\r\n } else { // ..................................................................................................\r\n _storeValue(_parseValue());\r\n }\r\n continue; // parse again in a different state\r\n } else { // ====================================================================================================\r\n throw new ParsingError(`Unexpected internal state ${state}`, line, column);\r\n }\r\n\r\n newline = false;\r\n ++column;\r\n }\r\n ++i;\r\n }\r\n\r\n if (state === 2) { // item\r\n throw new ParsingError(`Unexpected end of file in state ${state}`, line, column);\r\n }\r\n\r\n return result;\r\n}\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\nimport readCIF from './readCIF';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Assembly,\r\n Molecule,\r\n} = chem;\r\n\r\nconst cRequiredAtomFields = [\r\n 'auth_seq_id',\r\n 'Cartn_x',\r\n 'Cartn_y',\r\n 'Cartn_z',\r\n 'label_atom_id',\r\n];\r\n\r\nconst cSecondaryCoding = {\r\n helx: 'helix',\r\n turn: 'turn',\r\n strn: 'strand',\r\n};\r\n\r\nfunction getTypeFromId(string) {\r\n const typeId = /[A-Za-z]+/.exec(string);\r\n if (!typeId) {\r\n return null;\r\n }\r\n\r\n return cSecondaryCoding[typeId[0].toLowerCase()];\r\n}\r\n\r\n/**\r\n * Make valid object an array\r\n * @param arrayLikeObject\r\n * @return {array, object} array or object\r\n */\r\nfunction arrize(arrayLikeObject) {\r\n if (arrayLikeObject === null || arrayLikeObject === undefined || _.isArray(arrayLikeObject)) {\r\n return arrayLikeObject;\r\n }\r\n return [arrayLikeObject];\r\n}\r\n\r\nfunction nameToElement(name) {\r\n // http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM\r\n //\r\n // http://www.cgl.ucsf.edu/chimera/docs/UsersGuide/tutorials/pdbintro.html#note1\r\n //\r\n // Atom names start with element symbols right-justified in columns 13-14\r\n // as permitted by the length of the name. For example, the symbol FE for\r\n // iron appears in columns 13-14, whereas the symbol C for carbon appears\r\n // in column 14 (see Misaligned Atom Names). If an atom name has four\r\n // characters, however, it must start in column 13 even if the element\r\n // symbol is a single character (for example, see Hydrogen Atoms).\r\n\r\n const veryLong = name.trim().length === 4;\r\n return name.slice(0, veryLong ? 1 : 2).trim();\r\n}\r\n\r\nclass AtomDataError extends Error {\r\n constructor(message) {\r\n super();\r\n this.name = 'AtomDataError';\r\n this.message = message;\r\n }\r\n}\r\n\r\nfunction _getOperations(operList) {\r\n if (!operList) {\r\n return null;\r\n }\r\n const idc = arrize(operList.id);\r\n const { matrix, vector } = operList;\r\n if (!idc || !matrix || !vector) {\r\n return null;\r\n }\r\n\r\n const ops = [];\r\n for (let i = 0, n = idc.length; i < n; ++i) {\r\n const mtx = new THREE.Matrix4();\r\n const { elements } = mtx;\r\n\r\n for (let row = 0; row < 3; ++row) {\r\n const matrixData = matrix[row + 1];\r\n elements[row] = arrize(matrixData[1])[i];\r\n elements[row + 4] = arrize(matrixData[2])[i];\r\n elements[row + 8] = arrize(matrixData[3])[i];\r\n elements[row + 12] = arrize(vector[row + 1])[i];\r\n }\r\n ops[idc[i]] = mtx;\r\n }\r\n return ops;\r\n}\r\n\r\nfunction _extractOperations(assemblyGen, opsDict) {\r\n assemblyGen = _.isString(assemblyGen) ? assemblyGen : `${assemblyGen}`;\r\n const l = assemblyGen.replace(/\\)\\s*\\(/g, '!').replace(/[()']/g, '');\r\n const groupStr = l.split('!');\r\n const gps = [];\r\n\r\n for (let grIdx = 0, grCount = groupStr.length; grIdx < grCount; ++grIdx) {\r\n const gr = groupStr[grIdx].split(',');\r\n const gp = [];\r\n let idx = 0;\r\n for (let i = 0, n = gr.length; i < n; ++i) {\r\n const s = gr[i];\r\n if (s.includes('-')) {\r\n const es = s.split('-');\r\n let j = parseInt(es[0], 10);\r\n const m = parseInt(es[1], 10);\r\n for (; j <= m; ++j) {\r\n gp[idx++] = opsDict[j];\r\n }\r\n } else {\r\n gp[idx++] = opsDict[s];\r\n }\r\n }\r\n gps.push(gp);\r\n }\r\n\r\n // traverse all groups from the end of array and make all mults\r\n const matrices = [];\r\n let cnt = 0;\r\n function traverse(level, mtx) {\r\n for (let ii = 0, nn = gps[level].length; ii < nn; ++ii) {\r\n const newMtx = mtx ? mtx.clone() : new THREE.Matrix4();\r\n newMtx.multiplyMatrices(gps[level][ii], newMtx);\r\n if (level === 0) {\r\n matrices[cnt++] = newMtx;\r\n } else {\r\n traverse(level - 1, newMtx);\r\n }\r\n }\r\n }\r\n traverse(gps.length - 1);\r\n return matrices;\r\n}\r\n\r\nclass CIFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this.asymDict = {};\r\n this.molecules = [];\r\n this._options.fileType = 'cif';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && /^\\s*data_/i.test(data);\r\n }\r\n\r\n parseSync() {\r\n this.logger.info('Parsing CIF file..');\r\n const data = readCIF(this._data);\r\n return this._toComplex(data);\r\n }\r\n\r\n /**\r\n * Convert intermediate structure into our valid Complex object\r\n * @param cifData intermediate CIF object\r\n * @returns {Complex} complex\r\n * @private\r\n */\r\n _toComplex(cifData) {\r\n const complex = new Complex();\r\n const complexData = cifData[Object.keys(cifData)[0]];\r\n this._extractAtoms(complex, complexData);\r\n this._extractSecondary(complex, complexData);\r\n this._extractAssemblies(complex, complexData);\r\n this._extractMolecules(complex, complexData);\r\n this._extractMetadata(complex, complexData);\r\n complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n });\r\n\r\n return complex;\r\n }\r\n\r\n /**\r\n * Extract metadata\r\n * @param complex structure to fill\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n\r\n _extractMetadata(complex, complexData) {\r\n const { metadata } = complex;\r\n metadata.id = complexData.entry.id;\r\n metadata.classification = complexData.struct_keywords.pdbx_keywords;\r\n const databaserev = complexData.database_PDB_rev;\r\n metadata.date = (databaserev && databaserev.date_original) ? databaserev.date_original : '';\r\n metadata.format = 'cif';\r\n metadata.title = [];\r\n metadata.title[0] = complexData.struct.title;\r\n }\r\n\r\n /**\r\n * Extract molecules information from CIF structure (should be called strictly after _extractAtoms)\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractMolecules(complex, complexData) {\r\n const molData = complexData.entity;\r\n const names = arrize(molData.pdbx_description);\r\n const count = names.length;\r\n let i;\r\n\r\n // molecules names from cif\r\n for (i = 0; i < count; i++) {\r\n if (this.molecules[i]) { // molecule was created during atoms processing\r\n this.molecules[i].name = names[i];\r\n } else { // molecule wasn't created, because there is no atom which is contained\r\n this.molecules[i] = { name: names[i], residues: [] };\r\n }\r\n }\r\n\r\n // reorganize molecules for complex and check chains\r\n const molecules = complex.getMolecules();\r\n for (i = 0; i < count; i++) {\r\n const molecule = this.molecules[i];\r\n molecules[i] = new Molecule(complex, molecule.name, i + 1);\r\n molecules[i].residues = molecule.residues;\r\n }\r\n }\r\n\r\n /**\r\n * Extract atom information from CIF structure and fill complex\r\n * @param {Complex} complex\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractAtoms(complex, complexData) {\r\n const atomData = complexData.atom_site;\r\n if (!atomData) {\r\n throw new AtomDataError('CIF parsing error: atom_site is not specified!');\r\n }\r\n\r\n for (let f = 0, n = cRequiredAtomFields.length; f < n; ++f) {\r\n if (!atomData[cRequiredAtomFields[f]]) {\r\n throw new AtomDataError(`CIF parsing error: requires field ${cRequiredAtomFields[f]} not found!`);\r\n }\r\n }\r\n\r\n const { asymDict } = this;\r\n // required fields\r\n const resIdc = arrize(atomData.auth_seq_id);\r\n const x = arrize(atomData.Cartn_x);\r\n const y = arrize(atomData.Cartn_y);\r\n const z = arrize(atomData.Cartn_z);\r\n const names = arrize(atomData.label_atom_id);\r\n const count = names.length;\r\n // optional fields\r\n const group = arrize(atomData.group_PDB) || [];\r\n const chainIdc = arrize(atomData.auth_asym_id) || [];\r\n const chainLabelIdc = arrize(atomData.label_asym_id) || [];\r\n const serials = arrize(atomData.id) || [];\r\n const iCodes = arrize(atomData.pdbx_PDB_ins_code) || [];\r\n const resNames = arrize(atomData.label_comp_id) || [];\r\n const elements = arrize(atomData.type_symbol) || [];\r\n const tempFactors = arrize(atomData.B_iso_or_equiv) || [];\r\n const occupancies = arrize(atomData.occupancy) || [];\r\n const charges = arrize(atomData.pdbx_formal_charge) || [];\r\n const altLocs = arrize(atomData.label_alt_id) || [];\r\n const models = arrize(atomData.pdbx_PDB_model_num) || [];\r\n const molecules = arrize(atomData.label_entity_id) || [];\r\n\r\n let chain = null;\r\n let residue = null;\r\n for (let i = 0; i < count; ++i) {\r\n const model = models[i] || 1;\r\n if (model !== 1) {\r\n continue;\r\n }\r\n const chainID = String(chainIdc[i] || ' ');\r\n\r\n if (!chain || chain.getName() !== chainID) {\r\n chain = complex.getChain(chainID) || complex.addChain(chainID);\r\n }\r\n asymDict[String(chainLabelIdc[i] || ' ')] = chainID;\r\n const resSeq = resIdc[i];\r\n const iCode = String(iCodes[i] || ' ');\r\n const resName = String(resNames[i] || '');\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n residue = chain.addResidue(resName, resSeq, iCode);\r\n\r\n // store residue in appropriate molecule\r\n const moleculeIdx = molecules[i] - 1;\r\n let entity = this.molecules[moleculeIdx];\r\n if (!entity) { // create new molecule if it hasn't been created\r\n this.molecules[moleculeIdx] = { name: '', residues: [] };\r\n entity = this.molecules[moleculeIdx];\r\n }\r\n entity.residues.push(residue);\r\n }\r\n\r\n const name = names[i];\r\n const element = elements[i] || nameToElement(name);\r\n const type = Element.getByName(element);\r\n const role = Element.Role[name.trim()];\r\n const xyz = new THREE.Vector3(x[i], y[i], z[i]);\r\n const het = group[i] === 'HETATM' || false;\r\n const serial = serials[i] || i;\r\n const tempFactor = tempFactors[i] || 0.0;\r\n const occupancy = occupancies[i] || 0.0;\r\n const altLoc = String(altLocs[i] || '');\r\n const charge = charges[i] || 0;\r\n\r\n residue.addAtom(\r\n name,\r\n type,\r\n xyz,\r\n role,\r\n het,\r\n serial,\r\n altLoc,\r\n occupancy,\r\n tempFactor,\r\n charge,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Extracts secondary structure information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex - complex to fill\r\n * @param complexData - CIF complex data\r\n * @private\r\n */\r\n _extractSecondary(complex, complexData) {\r\n if (complexData.struct_conf) {\r\n this._extractConfs(complex, complexData.struct_conf);\r\n }\r\n if (complexData.struct_sheet_range) {\r\n this._extractSheets(complex, complexData.struct_sheet_range);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts sheets information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex\r\n * @param sheetData\r\n * @private\r\n */\r\n _extractSheets(complex, sheetData) {\r\n const { asymDict } = this;\r\n if (!sheetData.sheet_id || !sheetData.id || !sheetData.beg_label_seq_id || !sheetData.end_label_seq_id\r\n || !sheetData.beg_label_asym_id) {\r\n return;\r\n }\r\n // Strand(sheet, start, end, sense, cur, prev)\r\n const sheets = complex._sheets;\r\n\r\n function getSheet(name) {\r\n const n = sheets.length;\r\n for (let i = 0; i < n; ++i) {\r\n if (sheets[i]._name === name) {\r\n return sheets[i];\r\n }\r\n }\r\n sheets[n] = new Sheet(name, 0);\r\n return sheets[n];\r\n }\r\n\r\n const sheetNames = arrize(sheetData.sheet_id);\r\n const strandNames = arrize(sheetData.id);\r\n const starts = arrize(sheetData.beg_auth_seq_id);\r\n const ends = arrize(sheetData.end_auth_seq_id);\r\n const chains = arrize(sheetData.beg_label_asym_id);\r\n const stICodes = arrize(sheetData.pdbx_beg_PDB_ins_code) || [];\r\n const endICodes = arrize(sheetData.pdbx_end_PDB_ins_code) || [];\r\n\r\n for (let i = 0, n = strandNames.length; i < n; ++i) {\r\n const chain = complex.getChain(asymDict[chains[i]]);\r\n const sheet = getSheet(sheetNames[i]);\r\n const startIdx = starts[i];\r\n const endIdx = ends[i];\r\n const startICode = stICodes[i] || ' ';\r\n const endICode = endICodes[i] || ' ';\r\n\r\n const start = chain.findResidue(startIdx, startICode);\r\n const end = chain.findResidue(endIdx, endICode);\r\n\r\n // TODO think about last condition\r\n if (!start || !end) {\r\n continue;\r\n }\r\n\r\n const strand = new Strand(sheet, start[0], end[0], 0, null, null);\r\n const residues = chain.getResidues();\r\n for (let r = start[1]; r <= end[1]; ++r) {\r\n residues[r]._secondary = strand;\r\n }\r\n sheet.addStrand(strand);\r\n complex.structures.push(strand);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts helix/turn/strand(?) information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex\r\n * @param helicesData\r\n * @private\r\n */\r\n _extractConfs(complex, helicesData) {\r\n const { asymDict } = this;\r\n if (!helicesData.conf_type_id || !helicesData.beg_label_seq_id || !helicesData.end_label_seq_id\r\n || !helicesData.beg_label_asym_id) {\r\n return;\r\n }\r\n\r\n const types = arrize(helicesData.conf_type_id);\r\n const starts = arrize(helicesData.beg_auth_seq_id);\r\n const stICodes = arrize(helicesData.pdbx_beg_PDB_ins_code) || [];\r\n const ends = arrize(helicesData.end_auth_seq_id);\r\n const endICodes = arrize(helicesData.pdbx_end_PDB_ins_code) || [];\r\n const comments = arrize(helicesData.details) || [];\r\n const lengths = arrize(helicesData.pdbx_PDB_helix_length) || [];\r\n const helixClasses = arrize(helicesData.pdbx_PDB_helix_class) || [];\r\n const names = arrize(helicesData.id) || [];\r\n const chains = arrize(helicesData.beg_label_asym_id);\r\n\r\n for (let i = 0, n = types.length; i < n; ++i) {\r\n const type = getTypeFromId(types[i]);\r\n if (!type) {\r\n continue;\r\n }\r\n const name = names[i] || types[i];\r\n const chain = complex.getChain(asymDict[chains[i]]);\r\n\r\n const startIdx = starts[i];\r\n const endIdx = ends[i];\r\n const startICode = stICodes[i] || ' ';\r\n const endICode = endICodes[i] || ' ';\r\n\r\n const start = chain.findResidue(startIdx, startICode);\r\n const end = chain.findResidue(endIdx, endICode);\r\n\r\n // TODO think about last condition\r\n if (!start || !end) {\r\n continue;\r\n }\r\n const comment = comments[i] || '';\r\n const length = lengths[i] || 0;\r\n const helixClass = helixClasses[i] || ' ';\r\n let struct;\r\n if (type === 'helix') {\r\n const idx = complex._helices.length;\r\n struct = new Helix(helixClass, start[0], end[0], idx, name, comment, length);\r\n complex.addHelix(struct);\r\n complex.structures.push(struct);\r\n } else if (type === 'turn') {\r\n struct = new StructuralElement(StructuralElement.Type.TURN, start[0], end[0]);\r\n complex.structures.push(struct);\r\n } else {\r\n struct = null;\r\n }\r\n if (!struct) {\r\n continue;\r\n }\r\n const residues = chain.getResidues();\r\n for (let r = start[1]; r <= end[1]; ++r) {\r\n residues[r]._secondary = struct;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Extract biological assemblies information from CIF structure and fill complex\r\n * @param {Complex} complex\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractAssemblies(complex, complexData) {\r\n const { asymDict } = this;\r\n const asmGen = complexData.pdbx_struct_assembly_gen;\r\n if (!asmGen) {\r\n return;\r\n }\r\n\r\n const asmIdx = arrize(asmGen.assembly_id);\r\n const asmOper = arrize(asmGen.oper_expression);\r\n const asmList = arrize(asmGen.asym_id_list);\r\n if (!asmIdx || !asmOper || !asmList) {\r\n return;\r\n }\r\n\r\n const operList = _getOperations(complexData.pdbx_struct_oper_list);\r\n if (!operList) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = asmIdx.length; i < n; ++i) {\r\n const asm = new Assembly(complex);\r\n const assemblyOps = _extractOperations(asmOper[i], operList);\r\n const entries = asmList[i].split(',');\r\n for (let ii = 0, nn = entries.length; ii < nn; ++ii) {\r\n const chain = entries[ii].trim();\r\n if (chain.length > 0) {\r\n asm.addChain(asymDict[chain]);\r\n }\r\n }\r\n asm.matrices = assemblyOps;\r\n complex.units.push(asm);\r\n }\r\n }\r\n}\r\n\r\nCIFParser.formats = ['cif', 'mmcif'];\r\nCIFParser.extensions = ['.cif', '.mmcif'];\r\n\r\nexport default CIFParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Volume from '../../chem/Volume';\r\n\r\nexport const valueType = {\r\n singular: 0,\r\n vector: 1,\r\n array: 2,\r\n buffer: 3,\r\n};\r\n\r\nclass VolumeModel {\r\n _xyz2crs = [];\r\n\r\n _origin = new THREE.Vector3(0, 0, 0);\r\n\r\n constructor() {\r\n this._header = {};\r\n this._boxSize = new THREE.Vector3();\r\n this._boxStart = new THREE.Vector3();\r\n this._header.delta = {};\r\n this._header.extent = [];\r\n this._header.nstart = [];\r\n this._header.grid = [];\r\n this._header.crs2xyz = [];\r\n this._header.cellDims = new THREE.Vector3();\r\n this._header.angles = [];\r\n this._header.origin = new THREE.Vector3(0, 0, 0);\r\n this._header.dmin = 0;\r\n this._header.dmean = 0;\r\n this._header.dmax = 0;\r\n }\r\n\r\n _typedCheck() {\r\n if (_.isTypedArray(this._buff)) {\r\n this._buff = this._buff.buffer;\r\n } else if (!_.isArrayBuffer(this._buff)) {\r\n throw new TypeError('Expected ArrayBuffer or TypedArray');\r\n }\r\n }\r\n\r\n _fillHeader(headerFormat, arrays) {\r\n for (const key in headerFormat) {\r\n if (headerFormat.hasOwnProperty(key)) {\r\n switch (headerFormat[key][0]) {\r\n case valueType.singular:\r\n this._header[key] = arrays[headerFormat[key][1]][headerFormat[key][2]];\r\n break;\r\n\r\n case valueType.array:\r\n this._parseArray(this._header[key], arrays[headerFormat[key][1]], headerFormat[key][2]);\r\n break;\r\n\r\n case valueType.vector:\r\n this._parseVector(this._header[key], arrays[headerFormat[key][1]], headerFormat[key][2]);\r\n break;\r\n\r\n case valueType.buffer:\r\n this._header[key] = new Uint8Array(\r\n arrays[headerFormat[key][1]],\r\n [headerFormat[key][2]] * 4,\r\n [headerFormat[key][3]] * 4,\r\n );\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _parseVector(vector, arr, pos) {\r\n [vector.x, vector.y, vector.z] = [arr[pos], arr[pos + 1], arr[pos + 2]];\r\n }\r\n\r\n _parseArray(vector, arr, pos) {\r\n vector[0] = arr[pos];\r\n vector[1] = arr[pos + 1];\r\n vector[2] = arr[pos + 2];\r\n }\r\n\r\n _parseHeader(_buffer) {}\r\n\r\n _setAxisIndices() {}\r\n\r\n _setOrigins() {}\r\n\r\n _getAxis() {\r\n const header = this._header;\r\n\r\n const xScale = header.cellDims.x / header.grid[0];\r\n const yScale = header.cellDims.y / header.grid[1];\r\n const zScale = header.cellDims.z / header.grid[2];\r\n\r\n const [alpha, beta, gamma] = header.angles;\r\n\r\n const z1 = Math.cos(beta);\r\n const z2 = (Math.cos(alpha) - Math.cos(beta)\r\n * Math.cos(gamma)) / Math.sin(gamma);\r\n const z3 = Math.sqrt(1.0 - z1 * z1 - z2 * z2);\r\n\r\n const xaxis = new THREE.Vector3(xScale, 0, 0);\r\n const yaxis = new THREE.Vector3(Math.cos(gamma) * yScale, Math.sin(gamma) * yScale, 0);\r\n const zaxis = new THREE.Vector3(z1 * zScale, z2 * zScale, z3 * zScale);\r\n\r\n return [xaxis, yaxis, zaxis];\r\n }\r\n\r\n _getXYZdim() {\r\n return [this._header.extent[this._xyz2crs[0]],\r\n this._header.extent[this._xyz2crs[1]],\r\n this._header.extent[this._xyz2crs[2]]];\r\n }\r\n\r\n _getVolumeInfo() {\r\n const volInfo = _.pick(this._header, ['dmean', 'dmin', 'dmax', 'sd', 'delta']);\r\n volInfo.obtuseAngle = this._header.angles.map((angle) => Number(angle >= (Math.PI / 2)));\r\n return volInfo;\r\n }\r\n\r\n _setBoxParams(xaxis, yaxis, zaxis) {\r\n // if axes are not orthogonal, the origins might not match with box coordinates - need to make shift\r\n let shiftX = 0;\r\n let shiftY = 0;\r\n const [alpha, beta, gamma] = this._header.angles;\r\n\r\n if (gamma >= Math.PI / 2) {\r\n shiftX += Math.abs(yaxis.x);\r\n }\r\n if (beta >= Math.PI / 2) {\r\n shiftX += Math.abs(zaxis.x);\r\n }\r\n if (alpha >= Math.PI / 2) {\r\n shiftY += Math.abs(zaxis.y);\r\n }\r\n\r\n this._boxStart = new THREE.Vector3(this._origin.x - shiftX, this._origin.y - shiftY, this._origin.z);\r\n this._boxSize = new THREE.Vector3(\r\n Math.abs(xaxis.x) + Math.abs(yaxis.x) + Math.abs(zaxis.x),\r\n Math.abs(yaxis.y) + Math.abs(zaxis.y),\r\n Math.abs(zaxis.z),\r\n );\r\n\r\n const delta = (axe, proj) => (Math.abs(axe[proj]) / this._boxSize[proj]);\r\n this._header.delta.x = delta(yaxis, 'x');\r\n this._header.delta.y = delta(zaxis, 'x');\r\n this._header.delta.z = delta(zaxis, 'y');\r\n }\r\n\r\n _getXYZbox() {\r\n return new THREE.Box3(this._boxStart.clone(), this._boxStart.clone().add(this._boxSize));\r\n }\r\n\r\n _toXYZData() {}\r\n\r\n parse(data) {\r\n this._parseHeader(data);\r\n this._setOrigins();\r\n return new Volume(Float32Array, this._getXYZdim(), this._getXYZbox(), 1, this._toXYZData(), this._getVolumeInfo());\r\n }\r\n}\r\n\r\nexport default VolumeModel;\r\n","import Parser from './Parser';\r\nimport VolumeModel, { valueType } from './VolumeModel';\r\n\r\nconst CCP4Header = {\r\n extent: [valueType.array, 'u32', 0],\r\n type: [valueType.singular, 'u32', 3],\r\n nstart: [valueType.array, 'i32', 4],\r\n grid: [valueType.array, 'u32', 7],\r\n cellDims: [valueType.vector, 'f32', 10],\r\n angles: [valueType.array, 'f32', 13],\r\n crs2xyz: [valueType.array, 'i32', 16],\r\n dmin: [valueType.singular, 'f32', 19],\r\n dmax: [valueType.singular, 'f32', 20],\r\n dmean: [valueType.singular, 'f32', 21],\r\n ispg: [valueType.singular, 'u32', 22],\r\n nsymbt: [valueType.singular, 'u32', 23],\r\n lksflg: [valueType.singular, 'u32', 24],\r\n customData: [valueType.buffer, 'buffer', 25, 9],\r\n origin: [valueType.vector, 'f32', 34],\r\n map: [valueType.buffer, 'buffer', 52, 1],\r\n machine: [valueType.singular, 'u32', 53],\r\n sd: [valueType.singular, 'f32', 54],\r\n nlabel: [valueType.singular, 'f32', 55],\r\n label: [valueType.buffer, 'buffer', 56, 200],\r\n};\r\n\r\nclass Ccp4Model extends VolumeModel {\r\n // read header (http://www.ccp4.ac.uk/html/maplib.html)\r\n _parseHeader(_buffer) {\r\n this._buff = _buffer;\r\n this._typedCheck();\r\n const arrays = {};\r\n arrays.u32 = new Uint32Array(this._buff, 0, 56);\r\n arrays.i32 = new Int32Array(this._buff, 0, 56);\r\n arrays.f32 = new Float32Array(this._buff, 0, 56);\r\n arrays.buffer = this._buff;\r\n const header = this._header;\r\n\r\n this._fillHeader(CCP4Header, arrays);\r\n\r\n // calculate non-orthogonal unit cell coordinates\r\n header.angles.forEach((angle, i, a) => { a[i] *= Math.PI / 180.0; });\r\n }\r\n\r\n _setAxisIndices() {\r\n const header = this._header;\r\n\r\n if (header.cellDims.x === 0.0 && header.cellDims.y === 0.0 && header.cellDims.z === 0.0) {\r\n header.cellDims.set(1.0, 1.0, 1.0);\r\n }\r\n // Apply header conversion\r\n // Mapping between CCP4 column, row, section and VMD x, y, z.\r\n const { crs2xyz } = this._header;\r\n if (crs2xyz[0] === 0 && crs2xyz[1] === 0 && crs2xyz[2] === 0) {\r\n crs2xyz[0] = 1;\r\n crs2xyz[1] = 2;\r\n crs2xyz[2] = 3;\r\n }\r\n\r\n const xyz2crs = this._xyz2crs;\r\n xyz2crs[crs2xyz[0] - 1] = 0; // column\r\n xyz2crs[crs2xyz[1] - 1] = 1; // row\r\n xyz2crs[crs2xyz[2] - 1] = 2; // section\r\n }\r\n\r\n _setOrigins() {\r\n const [xaxis, yaxis, zaxis] = this._getAxis();\r\n this._setAxisIndices();\r\n\r\n const header = this._header;\r\n const xyz2crs = this._xyz2crs;\r\n // Handle both MRC-2000 and older format maps\r\n if (header.origin.x === 0.0 && header.origin.y === 0.0 && header.origin.z === 0.0) {\r\n this._origin.addScaledVector(xaxis, header.nstart[xyz2crs[0]]);\r\n this._origin.addScaledVector(yaxis, header.nstart[xyz2crs[1]]);\r\n this._origin.addScaledVector(zaxis, header.nstart[xyz2crs[2]]);\r\n } else {\r\n this._origin = header.origin;\r\n // Use ORIGIN records rather than old n[xyz]start records\r\n // http://www2.mrc-lmb.cam.ac.uk/image2000.html\r\n // XXX the ORIGIN field is only used by the EM community, and\r\n // has undefined meaning for non-orthogonal maps and/or non-cubic voxels, etc.\r\n }\r\n xaxis.multiplyScalar(header.extent[xyz2crs[0]] - 1);\r\n yaxis.multiplyScalar(header.extent[xyz2crs[1]] - 1);\r\n zaxis.multiplyScalar(header.extent[xyz2crs[2]] - 1);\r\n\r\n if (header.type === 2) {\r\n this._data = new Float32Array(\r\n this._buff,\r\n 1024 + header.nsymbt,\r\n header.extent[0] * header.extent[1] * header.extent[2],\r\n );\r\n } else {\r\n throw new Error(`CCP4: Unsupported format ${header.type}`);\r\n }\r\n\r\n this._setBoxParams(xaxis, yaxis, zaxis);\r\n }\r\n\r\n _toXYZData() {\r\n const header = this._header;\r\n const data = this._data;\r\n const xyz2crs = this._xyz2crs;\r\n const xyzData = new Float32Array(data.length);\r\n\r\n const dim = this._getXYZdim();\r\n const xSize = dim[0];\r\n const ySize = dim[1];\r\n\r\n let crsIdx = 0;\r\n const coord = [];\r\n let x;\r\n let y;\r\n let z;\r\n for (coord[2] = 0; coord[2] < header.extent[2]; coord[2]++) { // Site\r\n for (coord[1] = 0; coord[1] < header.extent[1]; coord[1]++) { // Row\r\n for (coord[0] = 0; coord[0] < header.extent[0]; coord[0]++, crsIdx++) { // Column\r\n x = coord[xyz2crs[0]];\r\n y = coord[xyz2crs[1]];\r\n z = coord[xyz2crs[2]];\r\n xyzData[x + xSize * (y + ySize * z)] = data[crsIdx];\r\n }\r\n }\r\n }\r\n\r\n return xyzData;\r\n }\r\n}\r\n\r\nclass CCP4Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'ccp4';\r\n this.model = new Ccp4Model();\r\n }\r\n\r\n static canProbablyParse(_data) {\r\n return false; // Autodetection is not implemented yet\r\n }\r\n\r\n parseSync() {\r\n return this.model.parse(this._data);\r\n }\r\n}\r\n\r\nCCP4Parser.formats = ['ccp4'];\r\nCCP4Parser.extensions = ['.ccp4', '.map', '.mrc'];\r\nCCP4Parser.binary = true;\r\n\r\nexport default CCP4Parser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst { Complex, Element, Molecule } = chem;\r\n\r\nclass XYZParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._atomsInf = null;\r\n\r\n this._options.fileType = 'xyz';\r\n this._fileName = options.name;\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && /^\\s*\\d+ *\\n[^\\n]*\\n\\s*\\w{1,3}\\s+-?\\d/.test(data);\r\n }\r\n\r\n _parseToAtomsInf(source) {\r\n const endnAtoms = source.indexOf('\\n');\r\n const nAtoms = parseInt(source.substring(0, endnAtoms), 10);\r\n const endComment = source.indexOf('\\n', endnAtoms + 1);\r\n let comment = source.slice(endnAtoms + 1, endComment).trim();\r\n if (comment.length === 0) {\r\n comment = this._fileName;\r\n }\r\n\r\n const startAtomsInf = endComment + source.substring(endComment).search(/\\S/);\r\n this._atomsInf = source.substring(startAtomsInf).split(/[\\s,]*\\n[\\s,]*/);\r\n if (!Number.isNaN(nAtoms) && (this._atomsInf.length - 1 !== nAtoms)) {\r\n this._complex.error = {\r\n message: 'wrong number of atoms',\r\n };\r\n return;\r\n }\r\n\r\n this._complex.metadata.format = 'xyz';\r\n this._complex.name = comment;\r\n }\r\n\r\n _parseAtomsInf() {\r\n const het = true;\r\n const altLoc = ' ';\r\n const occupancy = 1;\r\n const tempFactor = 1;\r\n const charge = 0;\r\n\r\n const chain = this._complex.addChain('A');\r\n const residue = chain.addResidue('UNK', 1, ' ');\r\n\r\n for (let i = 0; i < this._atomsInf.length - 1; i++) {\r\n const words = this._atomsInf[i].split(/[\\s,]+/);\r\n\r\n if (words.length !== 4) {\r\n this._complex.error = {\r\n message: 'missed parameters',\r\n };\r\n break;\r\n }\r\n\r\n const serial = i + 1;\r\n const name = words[0];\r\n const xyz = new THREE.Vector3(parseFloat(words[1]), parseFloat(words[2]), parseFloat(words[3]));\r\n const type = Element.getByName(name);\r\n const role = undefined;\r\n\r\n residue.addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n const molecule = new Molecule(this._complex, this._complex.name, 1);\r\n molecule.residues = residue;\r\n this._complex._molecules[0] = molecule;\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n\r\n this._parseToAtomsInf(this._data);\r\n this._parseAtomsInf();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n\r\n this._complex = null;\r\n this._atomsInf = null;\r\n\r\n if (result.error) {\r\n throw new Error(result.error.message);\r\n }\r\n return result;\r\n }\r\n\r\n static formats = ['xyz'];\r\n\r\n static extensions = ['.xyz'];\r\n}\r\n\r\nexport default XYZParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst { Complex, Element } = chem;\r\n\r\nclass PubChemParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'pubchem+json';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && data[0] === '{';\r\n }\r\n\r\n parseSync() {\r\n this.logger.info('Parsing PubChem JSON file...');\r\n return this._toComplex(JSON.parse(this._data));\r\n }\r\n\r\n _toComplex(jsonData) {\r\n const complex = new Complex();\r\n const complexData = jsonData.PC_Compounds && jsonData.PC_Compounds[0];\r\n if (complexData) {\r\n this._extractAtoms(complex, complexData);\r\n complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n });\r\n }\r\n return complex;\r\n }\r\n\r\n _extractAtoms(complex, complexData) {\r\n let aids = complexData.atoms && complexData.atoms.aid;\r\n let elements = aids && complexData.atoms.element;\r\n if (!elements || aids.length !== elements.length) {\r\n throw new Error('Unable to parse atom elements');\r\n }\r\n elements = _.fromPairs(_.zip(aids, elements));\r\n const atoms = {};\r\n\r\n const coords = complexData.coords && complexData.coords[0];\r\n const model = coords && coords.conformers && coords.conformers[0];\r\n const xs = model && model.x;\r\n const ys = model && model.y;\r\n const zs = (model && model.z) || [];\r\n aids = coords && coords.aid;\r\n if (!aids || !xs || !ys) {\r\n throw new Error('Coordinates are not found in the file');\r\n }\r\n\r\n const chain = complex.addChain(' ');\r\n const residue = chain.addResidue('UNK', 1, ' ');\r\n\r\n for (let i = 0, n = aids.length; i < n; ++i) {\r\n const aid = aids[i];\r\n const element = Element.ByAtomicNumber[elements[aid]];\r\n const xyz = new THREE.Vector3(xs[i], ys[i], zs[i] || 0.0);\r\n atoms[aid] = residue.addAtom(element.name, element, xyz, undefined, true, aid, ' ', 1.0, 0.0, 0);\r\n }\r\n\r\n const aids1 = complexData.bonds && complexData.bonds.aid1;\r\n const aids2 = complexData.bonds && complexData.bonds.aid2;\r\n const orders = (complexData.bonds && complexData.bonds.order) || [];\r\n if (!aids1 || !aids2 || aids1.length !== aids2.length) {\r\n return;\r\n }\r\n\r\n for (let j = 0, m = aids1.length; j < m; ++j) {\r\n complex.addBond(atoms[aids1[j]], atoms[aids2[j]], orders[j] || 1, 0, true);\r\n }\r\n }\r\n}\r\n\r\nPubChemParser.formats = ['pubchem', 'pubchem+json', 'pc'];\r\nPubChemParser.extensions = ['.json'];\r\n\r\nexport default PubChemParser;\r\n","import _ from 'lodash';\r\n\r\nexport default class SDFStream {\r\n constructor(data) {\r\n this._strings = data.split(/\\r?\\n|\\r/);\r\n this._currentStart = 0;\r\n this._currentStringIndx = 0;\r\n }\r\n\r\n setStart(start) {\r\n if (start >= this._strings.length) {\r\n this._currentStart = this._strings.length - 1;\r\n this._currentStringIndx = this._strings.length - 1;\r\n } else {\r\n this._currentStart = start;\r\n this._currentStringIndx = start;\r\n }\r\n }\r\n\r\n getNextString() {\r\n return this._strings[++this._currentStringIndx];\r\n }\r\n\r\n getCurrentString() {\r\n return this._strings[this._currentStringIndx];\r\n }\r\n\r\n getStringFromStart(numb) {\r\n this._currentStringIndx = this._currentStart + numb;\r\n return this._strings[this._currentStart + numb];\r\n }\r\n\r\n findNextDataItem() {\r\n let curStr = this.getNextString();\r\n let res = false;\r\n while (!_.isUndefined(curStr) && curStr.trim() !== '$$$$') {\r\n if (curStr.match(/>\\s+<(.*)>/)) {\r\n res = true;\r\n break;\r\n }\r\n curStr = this.getNextString();\r\n }\r\n\r\n return res;\r\n }\r\n\r\n findNextCompoundStart() {\r\n let curStr = this.getCurrentString();\r\n while (!_.isUndefined(curStr) && curStr.trim() !== '$$$$') {\r\n curStr = this.getNextString();\r\n }\r\n this.setStart(++this._currentStringIndx);\r\n return this.probablyHaveDataToParse();\r\n }\r\n\r\n probablyHaveDataToParse() {\r\n return this._currentStringIndx < this._strings.length - 2;\r\n }\r\n}\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport SDFStream from './SDFStream';\r\nimport Assembly from '../../chem/Assembly';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst chargeMap = [0, 3, 2, 1, 0, -1, -2, -3];\r\nconst orderMap = [0, 1, 2, 3, 1, 1, 1, 2];\r\nconst typeMap = [\r\n Bond.BondType.UNKNOWN, // 0 - error\r\n Bond.BondType.COVALENT, // 1 - single\r\n Bond.BondType.COVALENT, // 2 - double\r\n Bond.BondType.COVALENT, // 3 - triple\r\n Bond.BondType.AROMATIC, // 4 - aromatic\r\n Bond.BondType.UNKNOWN, // 5 - single or double\r\n Bond.BondType.AROMATIC, // 6 - single or aromatic\r\n Bond.BondType.AROMATIC, // 7 - double or aromatic\r\n // 8 - any\r\n // 9 - coordination\r\n // 10 - hydrogen\r\n];\r\n\r\nconst sdfAndMolRegexp = /.*(M\\s\\sEND).*|.*(^$$$$).*|.*>\\s+<(.+)>.*/;\r\nconst sdfRegExp = /.*($$$$).*|.*>\\s+<(.+)>.*/;\r\n\r\nconst fileFormat = { SDF: 'sdf', MOL: 'mol' };\r\n\r\nconst possibleNameTags = ['PUBCHEM_IUPAC_TRADITIONAL_NAME', /PUBCHEM_(.+)_NAME/, /(.+)name/, /(.+)NAME/];\r\nconst possibleIDTags = ['PUBCHEM_COMPOUND_CID', 'id', 'ID', /.*CID/, /.*ID/, /.*id/];\r\nconst possibleTitleTags = ['msg', 'MSG', 'message', 'title', 'description', 'desc'];\r\nconst tagsNames = ['name', 'id', 'title'];\r\nconst tags = { name: possibleNameTags, id: possibleIDTags, title: possibleTitleTags };\r\n\r\nfunction buildChainID(index) {\r\n if (!index) {\r\n return 'A';\r\n }\r\n\r\n const codes = [];\r\n while (index) {\r\n codes.push(65 + (index % 26));\r\n index = Math.trunc(index / 26);\r\n }\r\n if (codes.length > 1) {\r\n codes.reverse();\r\n codes[0] -= 1;\r\n }\r\n\r\n return String.fromCharCode(...codes);\r\n}\r\n\r\nexport default class SDFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._format = 'sdf';\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._molecules = null;\r\n this._metadata = {};\r\n this._metadata.molecules = [];\r\n this._currentMolProps = {};\r\n this._compoundIndx = -1;\r\n this._assemblies = [];\r\n this._atomsParsed = 0;\r\n this._atomsIndexes = [];\r\n }\r\n\r\n canProbablyParse(data) {\r\n return _.isString(data) && sdfAndMolRegexp.test(data);\r\n }\r\n\r\n _parseHeader(stream) {\r\n const molecule = {};\r\n molecule.name = stream.getStringFromStart(0);\r\n const date = parseInt(stream.getStringFromStart(1).substr(10, 6).trim(), 10);\r\n molecule.date = date.toString() || '';\r\n molecule.title = stream.getStringFromStart(2);\r\n this._metadata.molecules.push(molecule);\r\n }\r\n\r\n _parseAtoms(stream, atomsNum) {\r\n let curStr;\r\n let serial = this._atomsParsed;\r\n\r\n // each molecule = chain\\residue\r\n const chainID = buildChainID(this._compoundIndx);\r\n const resName = 'UNK';\r\n const resSeq = 1;\r\n\r\n this._chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = this._chain.addResidue(resName, resSeq, ' ');\r\n\r\n for (let i = 0; i < atomsNum; i++) {\r\n curStr = stream.getNextString();\r\n serial++;\r\n const x = parseFloat(curStr.substr(0, 10));\r\n const y = parseFloat(curStr.substr(10, 10));\r\n const z = parseFloat(curStr.substr(20, 10));\r\n const charge = chargeMap[parseInt(curStr.substr(36, 3), 10)];\r\n const xyz = new THREE.Vector3(x, y, z);\r\n let name = curStr.substr(31, 3).trim().toUpperCase();\r\n const type = Element.getByName(name);\r\n if (!this._atomsIndexes[name]) {\r\n this._atomsIndexes[name] = 0;\r\n }\r\n this._atomsIndexes[name] += 1;\r\n name += this._atomsIndexes[name]; // every atom need to have unique name.\r\n\r\n this._residue.addAtom(name, type, xyz, undefined, true, serial, ' ', 1.0, 0.0, charge);\r\n }\r\n }\r\n\r\n _parseBonds(stream, bondsNum) {\r\n let curStr;\r\n\r\n for (let i = 0; i < bondsNum; i++) {\r\n curStr = stream.getNextString();\r\n let atom1 = parseInt(curStr.substr(0, 3), 10) + this._atomsParsed;\r\n let atom2 = parseInt(curStr.substr(3, 3), 10) + this._atomsParsed;\r\n const bondType = parseInt(curStr.substr(6, 3), 10);\r\n\r\n if (atom1 > atom2) {\r\n [atom1, atom2] = [atom2, atom1];\r\n }\r\n this._complex.addBond(\r\n atom1,\r\n atom2,\r\n orderMap[bondType] || 1,\r\n typeMap[bondType] || Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n }\r\n\r\n _parseMOL(stream) {\r\n this._compoundIndx++;\r\n\r\n this._parseHeader(stream);\r\n const countsLine = stream.getStringFromStart(3);\r\n const atomsNum = parseInt(countsLine.substr(0, 3), 10);\r\n const bondsNum = parseInt(countsLine.substr(3, 3), 10);\r\n this._parseAtoms(stream, atomsNum);\r\n this._parseBonds(stream, bondsNum);\r\n\r\n this._atomsParsed += atomsNum;\r\n\r\n this._metadata.molecules[this._compoundIndx]._residues = [];\r\n this._metadata.molecules[this._compoundIndx]._residues.push(this._residue);\r\n }\r\n\r\n _parseDataItem(stream) {\r\n const tag = stream.getCurrentString();\r\n\r\n let data = [];\r\n let curStr = stream.getNextString();\r\n\r\n // read data\r\n while (curStr.trim() !== '') {\r\n data.push(curStr);\r\n curStr = stream.getNextString();\r\n }\r\n if (data.length === 1) {\r\n [data] = data;\r\n }\r\n this._currentMolProps[tag.replace(/[<>]/g, '').trim()] = data;\r\n }\r\n\r\n _parseCompound(stream) {\r\n this._parseMOL(stream);\r\n\r\n // parse data items block\r\n if (this._format === fileFormat.SDF) {\r\n this._currentMolProps = {};\r\n while (stream.findNextDataItem()) {\r\n this._parseDataItem(stream);\r\n }\r\n if (Object.keys(this._currentMolProps).length !== 0) {\r\n const molecule = this._metadata.molecules[this._compoundIndx];\r\n molecule.props = this._currentMolProps;\r\n this._tryToUpdateMoleculeData(molecule);\r\n }\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap;\r\n const complex = this._complex;\r\n\r\n const bonds = complex._bonds;\r\n for (let j = 0; j < bonds.length; j++) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n console.log('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _buildAssemblies() {\r\n const chains = this._complex._chains;\r\n\r\n if (chains.length === 1) {\r\n return this._assemblies;\r\n }\r\n\r\n for (let i = 0; i < chains.length; i++) {\r\n const assembly = new Assembly(this._complex);\r\n const matrix = new THREE.Matrix4();\r\n assembly.addMatrix(matrix);\r\n assembly.addChain(chains[i]._name);\r\n this._assemblies.push(assembly);\r\n }\r\n\r\n return this._assemblies;\r\n }\r\n\r\n _buildMolecules() {\r\n this._complex._molecules = [];\r\n const { molecules } = this._metadata;\r\n for (let i = 0; i < molecules.length; i++) {\r\n const molecule = new Molecule(this._complex, molecules[i].name, i + 1);\r\n molecule.residues = molecules[i]._residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n\r\n return this._complex._molecules;\r\n }\r\n\r\n _searchTag(tag, props) {\r\n for (let i = 0; i < props.length; i++) {\r\n if ((tag instanceof RegExp && tag.test(props[i].tag)) || tag === props[i].tag) {\r\n return props[i].data;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n _tryToFind(tagsList, props) {\r\n for (let j = 0; j < tagsList.length; j++) {\r\n const res = this._searchTag(tagsList[j], props);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n _tryToUpdateMoleculeData(molecule) {\r\n let res = false;\r\n for (let i = 0; i < tagsNames.length; i++) {\r\n const tagPossibleNames = tags[tagsNames[i]];\r\n const data = this._tryToFind(tagPossibleNames, molecule.props);\r\n if (data) {\r\n molecule[tagsNames[i]] = data;\r\n res = true;\r\n }\r\n }\r\n\r\n molecule.name = molecule.name || molecule.id;\r\n if (molecule.name.match(/^\\d+$/)) {\r\n molecule.name = `CID: ${molecule.name}`;\r\n }\r\n\r\n return res;\r\n }\r\n\r\n _finalizeMetadata() {\r\n const { molecules } = this._metadata;\r\n const { metadata } = this._complex;\r\n const complex = this._complex;\r\n\r\n if (molecules.length === 1) {\r\n complex.name = molecules[0].name;\r\n metadata.title = molecules[0].title;\r\n metadata.date = molecules[0].date;\r\n metadata.properties = molecules[0].props;\r\n } else if (molecules.length > 1) {\r\n metadata.molecules = [];\r\n for (let i = 0; i < molecules.length; i++) {\r\n metadata.molecules.push({\r\n name: molecules[i].name, date: molecules[i].date, title: molecules[i].title, properties: molecules[i].props,\r\n });\r\n }\r\n }\r\n }\r\n\r\n _finalize() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const atoms = this._complex._atoms;\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n this._complex._finalizeBonds();\r\n this._fixBondsArray();\r\n this._finalizeMetadata();\r\n this._buildAssemblies();\r\n this._complex.units = this._complex.units.concat(this._assemblies);\r\n this._buildMolecules();\r\n this._complex.finalize({\r\n needAutoBonding: false, detectAromaticLoops: false, enableEditing: false, serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n defineFormat(data) {\r\n let format;\r\n if (sdfRegExp.test(data)) {\r\n format = fileFormat.SDF;\r\n } else {\r\n format = fileFormat.MOL;\r\n }\r\n\r\n return format;\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n const stream = new SDFStream(this._data);\r\n\r\n this._format = this.defineFormat(this._data);\r\n result.metadata.format = this._format;\r\n\r\n do {\r\n this._parseCompound(stream);\r\n } while (stream.findNextCompoundStart());\r\n\r\n this._finalize();\r\n\r\n return result;\r\n }\r\n}\r\n\r\nSDFParser.formats = ['mol', 'sdf'];\r\nSDFParser.extensions = ['.mol', '.sdf'];\r\n","import * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport VolumeModel, { valueType } from './VolumeModel';\r\n\r\n// http://www.uoxray.uoregon.edu/tnt/manual/node104.html\r\nconst DSN6Header = {\r\n nstart: [valueType.array, 'i16', 0],\r\n extent: [valueType.array, 'i16', 3],\r\n grid: [valueType.array, 'i16', 6],\r\n cellDims: [valueType.vector, 'i16', 9],\r\n angles: [valueType.array, 'i16', 12],\r\n div: [valueType.singular, 'i16', 15],\r\n adder: [valueType.singular, 'i16', 16],\r\n scaleFactor: [valueType.singular, 'i16', 17],\r\n};\r\n\r\nclass DSN6Model extends VolumeModel {\r\n _parseHeader(_buffer) {\r\n this._buff = _buffer;\r\n this._typedCheck();\r\n\r\n const arrays = {};\r\n arrays.i16 = new Int16Array(this._buff);\r\n\r\n // check and reverse if big endian\r\n if (arrays.i16[18] !== 100) {\r\n for (let i = 0, n = arrays.i16.length; i < n; ++i) {\r\n const val = arrays.i16[i];\r\n arrays.i16[i] = ((val & 0xff) << 8) | ((val >> 8) & 0xff);\r\n }\r\n }\r\n if (arrays.i16[18] !== 100) {\r\n throw new Error('DSN6: Incorrect format ');\r\n }\r\n\r\n const header = this._header;\r\n\r\n this._fillHeader(DSN6Header, arrays);\r\n header.cellDims.multiplyScalar(1.0 / header.scaleFactor);\r\n header.angles.forEach((angle, i, a) => { a[i] *= (Math.PI / 180.0) / header.scaleFactor; });\r\n header.div /= 100;\r\n }\r\n\r\n _setAxisIndices() {\r\n this._xyz2crs[0] = 0;\r\n this._xyz2crs[1] = 1;\r\n this._xyz2crs[2] = 2;\r\n }\r\n\r\n _setOrigins() {\r\n const header = this._header;\r\n const [xaxis, yaxis, zaxis] = this._getAxis();\r\n this._setAxisIndices();\r\n\r\n this._origin.addScaledVector(xaxis, header.nstart[0]);\r\n this._origin.addScaledVector(yaxis, header.nstart[1]);\r\n this._origin.addScaledVector(zaxis, header.nstart[2]);\r\n\r\n xaxis.multiplyScalar(header.extent[0]);\r\n yaxis.multiplyScalar(header.extent[1]);\r\n zaxis.multiplyScalar(header.extent[2]);\r\n\r\n this._setBoxParams(xaxis, yaxis, zaxis);\r\n }\r\n\r\n _pointCalculate(xyzData, byteBuffer, z, y, x, pos, i) {\r\n const header = this._header;\r\n\r\n if (x < header.extent[0] && y < header.extent[1] && z < header.extent[2]) {\r\n const idx = x + header.extent[0] * (y + header.extent[1] * z);\r\n xyzData[idx] = (byteBuffer[pos.counter] - header.adder) / header.div;\r\n ++pos.counter;\r\n } else {\r\n pos.counter += 8 - i;\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n _blockCalculate(xyzData, byteBuffer, zBlock, yBlock, xBlock, pos) {\r\n for (let k = 0; k < 8; ++k) {\r\n const z = 8 * zBlock + k;\r\n for (let j = 0; j < 8; ++j) {\r\n const y = 8 * yBlock + j;\r\n let inRange = true;\r\n let i = 0;\r\n while (inRange && i < 8) {\r\n const x = 8 * xBlock + i;\r\n inRange = this._pointCalculate(xyzData, byteBuffer, z, y, x, pos, i);\r\n i++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _toXYZData() {\r\n const header = this._header;\r\n const byteBuffer = new Uint8Array(this._buff);\r\n const xyzData = new Float32Array(header.extent[0] * header.extent[1] * header.extent[2]);\r\n\r\n const blocks = new THREE.Vector3(header.extent[0] / 8, header.extent[1] / 8, header.extent[2] / 8);\r\n\r\n const pos = {};\r\n pos.counter = 512;\r\n\r\n for (let zBlock = 0; zBlock < blocks.z; ++zBlock) {\r\n for (let yBlock = 0; yBlock < blocks.y; ++yBlock) {\r\n for (let xBlock = 0; xBlock < blocks.x; ++xBlock) {\r\n this._blockCalculate(xyzData, byteBuffer, zBlock, yBlock, xBlock, pos);\r\n }\r\n }\r\n }\r\n this._calculateInfoParams(xyzData);\r\n return xyzData;\r\n }\r\n\r\n _calculateInfoParams(xyzData) {\r\n this._header.dmean /= xyzData.length;\r\n let dispersion = 0;\r\n let minDensity = xyzData[0];\r\n let maxDensity = xyzData[0];\r\n for (let j = 0; j < xyzData.length; j++) {\r\n dispersion += (this._header.dmean - xyzData[j]) ** 2;\r\n\r\n if (xyzData[j] < minDensity) {\r\n minDensity = xyzData[j];\r\n }\r\n if (xyzData[j] > maxDensity) {\r\n maxDensity = xyzData[j];\r\n }\r\n }\r\n this._header.sd = Math.sqrt(dispersion / xyzData.length);\r\n this._header.dmax = maxDensity;\r\n this._header.dmin = minDensity;\r\n }\r\n}\r\n\r\nclass DSN6Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'dsn6';\r\n this.model = new DSN6Model();\r\n }\r\n\r\n static canParse(data, options) {\r\n if (!data) {\r\n return false;\r\n }\r\n return data instanceof ArrayBuffer && Parser.checkDataTypeOptions(options, 'dsn6');\r\n }\r\n\r\n static canProbablyParse(_data) {\r\n return false;\r\n }\r\n\r\n parseSync() {\r\n return this.model.parse(this._data);\r\n }\r\n}\r\n\r\nDSN6Parser.formats = ['dsn6'];\r\nDSN6Parser.extensions = ['.dsn6', '.omap'];\r\nDSN6Parser.binary = true;\r\n\r\nexport default DSN6Parser;\r\n","import PDBStream from './PDBStream';\r\n\r\n/**\r\n * Little helper class for GRO Parser usage.\r\n * @extends PDBStream\r\n */\r\nclass GROReader extends PDBStream {\r\n constructor(data) {\r\n super(data);\r\n /** @type Number */\r\n this._next = -1; // End position of line\r\n this.next();\r\n }\r\n\r\n /**\r\n * Getting end of string.\r\n * @returns {Number} Pointer to end of string\r\n */\r\n getNext() {\r\n return this._next;\r\n }\r\n}\r\n\r\nexport default GROReader;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport GROReader from './GROReader';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Molecule,\r\n} = chem;\r\n\r\n/**\r\n * Gromos87 file format parser.\r\n * @extends Parser\r\n */\r\nclass GROParser extends Parser {\r\n /**\r\n * Create parser for .gro file format\r\n *\r\n * @param {String} data Input file\r\n * @param {String} options Input options (optional field)\r\n */\r\n constructor(data, options) {\r\n super(data, options);\r\n /** @type Date */\r\n this._time = null; // Time in ps, optional field for animations\r\n /** @type Number */\r\n this._numAtoms = null; // Number of atoms in complex\r\n /** @type Number */\r\n this._residueNumber = null; // Number of exact residue\r\n /** @type String */\r\n this._residueName = ''; // Scientific name of exact residue\r\n /** @type String */\r\n this._atomName = ''; // Scientific name of exact atom\r\n /** @type Number */\r\n this._atomNumber = null; // Sorted number of exact atom\r\n /** @type Array */\r\n this._atomPosition = []; // Array which contains x, y, z position of exact atom\r\n /** @type Array */\r\n this._atomVelocity = []; // Array which contains x, y, z velocity of exact atom (optional)\r\n /** @type Complex */\r\n this._complex = null; // Complex structure for unified molecule representation\r\n /** @type Vector3 */\r\n this._molecules = []; // Molecules array\r\n /** @type Molecule */\r\n this._molecule = null; // Single molecule\r\n /** @type String */\r\n this._options.filetype = 'gro'; // Extension of data file.\r\n }\r\n\r\n /**\r\n * General check for possibility of parsing.\r\n * @param {String} data - Input file\r\n * @returns {boolean} true if this file is in ascii, false otherwise\r\n */\r\n canProbablyParse(data) {\r\n return _.isString(this._data) && /^\\s*[^\\n]*\\n\\s*\\d+ *\\n\\s*\\d+[^\\n\\d]{3}\\s*\\w+\\s*\\d+\\s*-?\\d/.test(data);\r\n }\r\n\r\n /**\r\n * Parsing title of molecule complex.\r\n * NOTE: that names are ESTIMATES, there is no strict rules in Gromos87 standard for first line in input file.\r\n * @param {GROReader} line - Line containing title and time.\r\n */\r\n _parseTitle(line) {\r\n const { metadata } = this._complex;\r\n metadata.id = line.readLine().trim();\r\n metadata.name = metadata.id.slice(metadata.id.lastIndexOf('\\\\') + 1, metadata.id.lastIndexOf('.'));\r\n metadata.format = 'gro';\r\n }\r\n\r\n /**\r\n * Parsing line containing number of atoms information.\r\n * @param {GROReader} line - Line containing number of atoms.\r\n */\r\n _parseNumberOfAtoms(line) {\r\n this._numAtoms = line.readInt(0, line.getNext());\r\n if (Number.isNaN(this._numAtoms)) {\r\n throw new Error('Line 2 is not representing atom number. Consider checking input file');\r\n }\r\n }\r\n\r\n /**\r\n * Parsing line containing information about residues, atoms etc. Also information about box vectors.\r\n * Format of atoms MUST (by Gromos87 standard) be this: (note that numbering starts not from 0, but from 1!)\r\n * ResidueNumber[1 - 5] ResidueName[6 - 10] AtomName[11 - 15] AtomNumber[16 - 20] Position[21 - 45] Velocity[46 - 69]\r\n * @param {GROReader} line - Line containing information about atom.\r\n */\r\n _parseAtom(line) {\r\n this._residueNumber = line.readInt(1, 5);\r\n this._residueName = line.readString(6, 10).trim();\r\n this._atomName = line.readString(11, 15).trim();\r\n this._atomNumber = line.readInt(16, 20);\r\n const positionX = line.readFloat(21, 28) * 10;\r\n const positionY = line.readFloat(29, 36) * 10;\r\n const positionZ = line.readFloat(37, 45) * 10;\r\n if (Number.isNaN(positionX) || Number.isNaN(positionY) || Number.isNaN(positionZ)) {\r\n this._complex.error = {\r\n message: `Atom position is invalid in \"${line.readLine()}\"`,\r\n };\r\n return;\r\n }\r\n /* const velocityX = line.readFloat(46, 53);\r\n const velocityY = line.readFloat(54, 61);\r\n const velocityZ = line.readFloat(62, 69); */\r\n /* Adding residue and atom to complex structure */\r\n const type = Element.getByName(this._atomName[0]); /* MAGIC 0. REASONS: This name is something like \"CA\", where\r\n C - is an element an A is something else. But what about Calcium? */\r\n if (type.fullName === 'Unknown') {\r\n this._complex.error = {\r\n message: `${this._atomName[0]} hasn't been recognised as an atom name.`,\r\n };\r\n return;\r\n }\r\n const role = Element.Role[this._atomName];\r\n /* Firstly, create a dummy chain */\r\n let chain = this._chain;\r\n if (!chain) {\r\n this._chain = chain = this._complex.addChain('A');\r\n }\r\n /* Secondly, add residue to that chain */\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== this._residueNumber) {\r\n this._residue = residue = chain.addResidue(this._residueName, this._residueNumber, ' ');\r\n }\r\n /* Lastly, add atom to that residue */\r\n this._atomPosition = new THREE.Vector3(positionX, positionY, positionZ);\r\n /* Adding default constants to correct atom addition process */\r\n const het = true;\r\n const altLoc = ' ';\r\n const occupancy = 1;\r\n const tempFactor = 1;\r\n const charge = 0;\r\n residue.addAtom(this._atomName, type, this._atomPosition, role, het, this._atomNumber, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n /**\r\n * Some finalizing procedures. In '.gro' file format there is only 1 chain and 1 molecule.\r\n */\r\n _finalize() {\r\n const molecule = new Molecule(this._complex, this._complex.metadata.name, 1);\r\n // aggregate residues from chain\r\n molecule.residues = this._chain._residues;\r\n molecule._chains = this._chain;\r\n this._complex._molecules[0] = molecule;\r\n this._molecules.push(molecule);\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n /**\r\n * Main parsing procedure.\r\n * @returns {Complex} Complex structure for visualizing.\r\n */\r\n parseSync() {\r\n /* Create \"Complex\" variable */\r\n const result = this._complex = new Complex();\r\n /* Parse input file line-by-line */\r\n const reader = new GROReader(this._data);\r\n let counter = 0; /* Simple counter regarding to format of .gro file */\r\n /* First two lines - technical information, other lines - Atoms */\r\n this._parseTitle(reader);\r\n reader.next();\r\n this._parseNumberOfAtoms(reader);\r\n reader.next();\r\n for (counter = 0; counter < this._numAtoms; ++counter) {\r\n if (!reader.end()) {\r\n this._parseAtom(reader);\r\n reader.next();\r\n } else break;\r\n }\r\n /* If number of atoms in second line is less then actual atoms in file */\r\n if (counter < this._numAtoms) {\r\n this._complex.error = {\r\n message: 'File ended unexpectedly.',\r\n };\r\n }\r\n /* Catch errors occurred in parsing process */\r\n if (result.error) {\r\n throw new Error(result.error.message);\r\n }\r\n\r\n /* Finalizing data */\r\n this._finalize();\r\n\r\n /* Cleaning up */\r\n this._atomPosition = null;\r\n this._complex = null;\r\n this._molecules = null;\r\n this._molecule = null;\r\n\r\n /* Return resulting Complex variable */\r\n return result;\r\n }\r\n}\r\n\r\nGROParser.formats = ['gro'];\r\nGROParser.extensions = ['.gro'];\r\n\r\nexport default GROParser;\r\n","import * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst orderMap = {\r\n un: 0,\r\n 1: 1,\r\n 2: 2,\r\n 3: 3,\r\n ar: 1,\r\n am: 1,\r\n nc: 0,\r\n du: 1,\r\n};\r\nconst typeMap = {\r\n un: Bond.BondType.UNKNOWN, // unknown (cannot be determined from the parameter tables)\r\n 1: Bond.BondType.COVALENT, // single\r\n 2: Bond.BondType.COVALENT, // double\r\n 3: Bond.BondType.COVALENT, // triple\r\n ar: Bond.BondType.AROMATIC, // aromatic\r\n am: Bond.BondType.COVALENT, // amide\r\n nc: Bond.BondType.UNKNOWN, // not connected\r\n du: Bond.BondType.COVALENT, // dummy\r\n};\r\n\r\nconst resNumberRegex = /\\d+$/;\r\nconst spacesRegex = /\\s+/;\r\n\r\nfunction splitToFields(str) {\r\n return str.trim().split(spacesRegex);\r\n}\r\n/* There is no jsdoc documentation because of eslint corrections:\r\n * not all Parser methods are implemented\r\n */\r\n\r\nclass MOL2Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._compoundIndx = -1;\r\n\r\n this._molecules = [];\r\n this._molecule = null;\r\n\r\n this._currPosIdx = 0;\r\n this._currStartIdx = 0;\r\n\r\n this._serialAtomMap = {};\r\n\r\n this._options.fileType = 'mol2';\r\n }\r\n\r\n _parseRawStrings(data) {\r\n return data.split(/\\r?\\n|\\r/);\r\n }\r\n\r\n _toStringFromStart(numb, MOL2Data) {\r\n const newPosIdx = this._currStartIdx + numb;\r\n this._currPosIdx = (newPosIdx < MOL2Data.length) ? newPosIdx : this._currStartIdx;\r\n }\r\n\r\n _toHeaderString(header, MOL2Data) {\r\n this._toStringFromStart(0, MOL2Data);\r\n while (this._currPosIdx < MOL2Data.length) {\r\n if (MOL2Data[this._currPosIdx].match(`@${header}`)) {\r\n return;\r\n }\r\n this._currPosIdx++;\r\n }\r\n this._toStringFromStart(0, MOL2Data);\r\n }\r\n\r\n _toStringFromHeader(header, numb, MOL2Data) {\r\n this._toHeaderString(header, MOL2Data);\r\n const newPosIdx = this._currPosIdx + numb;\r\n\r\n if (MOL2Data[this._currPosIdx].match(`@${header}`) && newPosIdx < MOL2Data.length) {\r\n this._currPosIdx = newPosIdx;\r\n }\r\n }\r\n\r\n _setStart(startPos, MOL2Data) {\r\n if (startPos >= MOL2Data.length) {\r\n this._currStartIdx = this._currPosIdx = MOL2Data.length - 1;\r\n } else {\r\n this._currStartIdx = this._currPosIdx = startPos;\r\n }\r\n }\r\n\r\n _probablyHaveDataToParse(MOL2Data) {\r\n return this._currPosIdx < MOL2Data.length - 2;\r\n }\r\n\r\n _findNextCompoundStart(MOL2Data) {\r\n while (this._currPosIdx < MOL2Data.length && MOL2Data[this._currPosIdx].trim() !== '@MOLECULE>') {\r\n this._currPosIdx++;\r\n }\r\n this._setStart(++this._currPosIdx, MOL2Data);\r\n return this._probablyHaveDataToParse(MOL2Data);\r\n }\r\n\r\n _parseMolecule(MOL2Data) {\r\n this._toHeaderString('MOLECULE', MOL2Data);\r\n\r\n const { metadata } = this._complex;\r\n metadata.name = MOL2Data[++this._currPosIdx];\r\n metadata.format = 'mol2';\r\n\r\n this._molecule = { _index: '', _chains: [] };\r\n this._molecule._index = this._compoundIndx + 1;\r\n this._molecules.push(this._molecule);\r\n }\r\n\r\n /* Atom format description:\r\n * atomId atomName x y z element [resSeq [resName [charge [statusBit]]]]\r\n * statusBits is the internal SYBYL status bits associated with the atom.\r\n * These should never be set by the user.\r\n * Source: http://chemyang.ccnu.edu.cn/ccb/server/AIMMS/mol2.pdf\r\n */\r\n _parseAtoms(atomsNum, MOL2Data) {\r\n this._toHeaderString('ATOM', MOL2Data);\r\n\r\n for (let i = 0; i < atomsNum; i++) {\r\n const parsedStr = splitToFields(MOL2Data[++this._currPosIdx]);\r\n\r\n if (parsedStr.length < 6) {\r\n throw new Error('MOL2 parsing error: Not enough information to create atom!');\r\n }\r\n const atomId = parseInt(parsedStr[0], 10);\r\n const atomName = parsedStr[1];\r\n\r\n const x = parseFloat(parsedStr[2]);\r\n const y = parseFloat(parsedStr[3]);\r\n const z = parseFloat(parsedStr[4]);\r\n\r\n const element = parsedStr[5].split('.')[0].toUpperCase();\r\n\r\n let charge = 0;\r\n if (parsedStr.length >= 9) {\r\n charge = parseFloat(parsedStr[8]) || 0.0;\r\n }\r\n\r\n let chain = this._chain;\r\n if (!chain) {\r\n // .mol2 may contain information about multiple molecules, but they can't be visualized\r\n // at the same time now. There is no need to create different chain IDs then.\r\n this._chain = chain = this._complex.getChain('A') || this._complex.addChain('A');\r\n this._residue = null;\r\n }\r\n if (!this._setResidue(parsedStr)) {\r\n continue;\r\n }\r\n\r\n // These fields are not listed in mol2 format. Set them default.\r\n // Atoms and het atoms doesn't differ in .mol2,\r\n // but het atoms have special residues. It can be used in next updates\r\n const het = false;\r\n const altLoc = ' ';\r\n const occupancy = 1.0;\r\n const tempFactor = 0.0;\r\n const type = Element.getByName(element);\r\n const role = Element.Role[atomName];\r\n\r\n const xyz = new THREE.Vector3(x, y, z);\r\n this._residue.addAtom(atomName, type, xyz, role, het, atomId, altLoc, occupancy, tempFactor, charge);\r\n }\r\n }\r\n\r\n _setResidue(parsedStr) {\r\n let resSeq = 1;\r\n let resName = 'UNK'; // The same meaning has '<0>' in some mol2 files\r\n\r\n if (parsedStr.length >= 7) {\r\n resSeq = parseInt(parsedStr[6], 10);\r\n }\r\n if (parsedStr.length >= 8 && parsedStr[7] !== '<0>') {\r\n resName = parsedStr[7].replace(resNumberRegex, '');\r\n }\r\n if (this.settings.now.nowater) {\r\n if (resName === 'HOH' || resName === 'WAT') {\r\n return false;\r\n }\r\n }\r\n const residue = this._residue;\r\n const chain = this._chain;\r\n if (!residue || residue.getSequence() !== resSeq) {\r\n this._residue = chain.addResidue(resName, resSeq, 'A');\r\n }\r\n return true;\r\n }\r\n\r\n /* Bond format description\r\n * bondId originAtomId targetAtomId bondType [statusBits]\r\n */\r\n _parseBonds(bondsNum, MOL2Data) {\r\n this._toHeaderString('BOND', MOL2Data);\r\n\r\n for (let i = 0; i < bondsNum; i++) {\r\n const parsedStr = splitToFields(MOL2Data[++this._currPosIdx]);\r\n\r\n if (parsedStr.length < 3) {\r\n throw new Error('MOL2 parsing error: Missing information about bonds!');\r\n }\r\n\r\n let originAtomId = parseInt(parsedStr[1], 10);\r\n let targetAtomId = parseInt(parsedStr[2], 10);\r\n const bondType = parsedStr[3];\r\n\r\n if (originAtomId > targetAtomId) {\r\n [originAtomId, targetAtomId] = [targetAtomId, originAtomId];\r\n }\r\n this._complex.addBond(\r\n originAtomId,\r\n targetAtomId,\r\n orderMap[bondType] || 0,\r\n typeMap[bondType] || Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n }\r\n\r\n _fixSerialAtoms() {\r\n const atoms = this._complex._atoms;\r\n for (let i = 0; i < atoms.length; i++) {\r\n const atom = atoms[i];\r\n this._serialAtomMap[atom.serial] = atom;\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap;\r\n const complex = this._complex;\r\n\r\n if (Object.keys(serialAtomMap).length === 0) {\r\n throw new Error('MOL2 parsing error: Missing atom information!');\r\n }\r\n\r\n const bonds = complex._bonds;\r\n for (let j = 0; j < bonds.length; j++) {\r\n const bond = bonds[j];\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _finalizeMolecules() {\r\n // Get chain from complex\r\n const chain = this._complex._chains[0];\r\n this._complex._molecules = [];\r\n\r\n // Aggregate residues from chains\r\n // (to be precise from the chain 'A')\r\n for (let i = 0; i < this._molecules.length; i++) {\r\n const currMolecule = this._molecules[i];\r\n const molResidues = chain._residues;\r\n const molecule = new Molecule(this._complex, currMolecule._name, i + 1);\r\n molecule.residues = molResidues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n _finalize() {\r\n this._complex._finalizeBonds();\r\n this._fixSerialAtoms();\r\n this._fixBondsArray();\r\n this._finalizeMolecules();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n _parseCompound(MOL2Data) {\r\n this._compoundIndx++;\r\n this._parseMolecule(MOL2Data);\r\n\r\n // Ignoring comments and everything before @MOLECULE block\r\n this._toStringFromHeader('MOLECULE', 2, MOL2Data);\r\n\r\n const parsedStr = MOL2Data[this._currPosIdx].trim().split(spacesRegex);\r\n const atomsNum = parsedStr[0];\r\n const bondsNum = parsedStr[1];\r\n\r\n this._parseAtoms(atomsNum, MOL2Data);\r\n this._parseBonds(bondsNum, MOL2Data);\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n const MOL2Data = this._parseRawStrings(this._data);\r\n do {\r\n this._parseCompound(MOL2Data);\r\n } while (this._findNextCompoundStart(MOL2Data));\r\n\r\n this._finalize();\r\n\r\n return result;\r\n }\r\n}\r\n\r\nMOL2Parser.formats = ['mol2'];\r\nMOL2Parser.extensions = ['.mol2', '.ml2', '.sy2'];\r\n\r\nexport default MOL2Parser;\r\n","import ParserList from './parsers/ParserList';\r\n\r\nimport PDBParser from './parsers/PDBParser';\r\nimport CMLParser from './parsers/CMLParser';\r\nimport MMTFParser from './parsers/MMTFParser';\r\nimport CIFParser from './parsers/CIFParser';\r\nimport CCP4Parser from './parsers/CCP4Parser';\r\nimport XYZParser from './parsers/XYZParser';\r\nimport PubChemParser from './parsers/PubChemParser';\r\nimport SDFParser from './parsers/SDFParser';\r\nimport DSN6Parser from './parsers/DSN6Parser';\r\nimport GROParser from './parsers/GROParser';\r\nimport MOL2Parser from './parsers/MOL2Parser';\r\n\r\nexport default new ParserList([\r\n // note: order might be important\r\n PDBParser,\r\n CIFParser,\r\n MMTFParser,\r\n XYZParser,\r\n CMLParser,\r\n PubChemParser,\r\n SDFParser,\r\n CCP4Parser,\r\n DSN6Parser,\r\n GROParser,\r\n MOL2Parser,\r\n]);\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available exporters.\r\n * @extends EntityList\r\n */\r\nclass ExporterList extends EntityList {\r\n /**\r\n * Create a list of exporters.\r\n * The exporters are indexed by supported data formats (`.formats` and\r\n * `.extensions` properties of a Exporter subclass).\r\n * The Exporters can be retrieved later by matching against specs (see {@link ExporterList#find}).\r\n *\r\n * @param {!Array=} someExporters A list of {@link Exporter} subclasses to\r\n * automatically register at creation time.\r\n * @see ExporterList#register\r\n */\r\n constructor(someExporters = []) {\r\n super(someExporters, ['formats']);\r\n }\r\n\r\n /**\r\n * Find a suitable exporter for data.\r\n *\r\n * @param {Object} specs Exporter specifications.\r\n * @param {string=} specs.format Supported data format.\r\n * @param {*=} specs.data Data to export.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.format) {\r\n list = this._dict.formats[specs.format.toLowerCase()] || [];\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default ExporterList;\r\n","import makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Exporter {\r\n constructor(source, options) {\r\n this._source = source;\r\n this._options = options || {};\r\n this._abort = false;\r\n }\r\n\r\n exportSync() {\r\n throw new Error('Exporting to this source is not implemented');\r\n }\r\n\r\n export() {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n try {\r\n if (this._abort) {\r\n return reject(new Error('Export aborted'));\r\n }\r\n return resolve(this.exportSync());\r\n } catch (error) {\r\n return reject(error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n }\r\n}\r\n\r\nmakeContextDependent(Exporter.prototype);\r\n","import _ from 'lodash';\r\nimport { Matrix4 } from 'three';\r\n\r\nexport default class PDBResult {\r\n constructor() {\r\n this._resultArray = [];\r\n this._currentStr = -1;\r\n this._tag = null;\r\n this._fixedNumeration = false;\r\n this._numeration = false;\r\n this._tagStrNum = 0;\r\n }\r\n\r\n getResult() {\r\n this.writeString('\\n', 81, 81);\r\n return this._resultArray.join('');\r\n }\r\n\r\n _currentStrLength() {\r\n const curStr = this._resultArray[this._currentStr];\r\n return curStr ? curStr.length : 0;\r\n }\r\n\r\n // numeration can be number or boolean\r\n // if numeration is number then just put this number to 8-10 pos in string\r\n // if numeration is boolean then increase number for all new strings\r\n newTag(tag, numeration) {\r\n if (!tag) {\r\n this._tag = null;\r\n } else {\r\n this._tag = tag;\r\n }\r\n if (!_.isUndefined(numeration)) {\r\n if (_.isNumber(numeration)) {\r\n this._tagStrNum = numeration;\r\n this._numeration = true;\r\n this._fixedNumeration = true;\r\n } else if (_.isBoolean(numeration)) {\r\n this._tagStrNum = 0;\r\n this._numeration = numeration;\r\n this._fixedNumeration = false;\r\n }\r\n } else {\r\n this._numeration = false;\r\n this._fixedNumeration = false;\r\n this._tagStrNum = 0;\r\n }\r\n }\r\n\r\n newString(tag) {\r\n this.writeString('\\n', 81, 81);\r\n this._currentStr++;\r\n this._resultArray.push('');\r\n\r\n if (tag) {\r\n this.writeString(tag, 1, 6);\r\n } else if (this._tag) {\r\n this.writeString(this._tag, 1, 6);\r\n }\r\n\r\n if (this._numeration) {\r\n if (!this._fixedNumeration) {\r\n this._tagStrNum++;\r\n }\r\n if (this._tagStrNum !== 1) {\r\n this.writeString(this._tagStrNum.toString(), 10, 8);\r\n }\r\n }\r\n }\r\n\r\n writeEntireString(string, maxStrPos, concat) {\r\n if (!maxStrPos) {\r\n maxStrPos = 81;\r\n }\r\n for (let j = 0; j < string.length; j++) {\r\n if (this._currentStrLength() === maxStrPos && j !== string.length - 1) {\r\n this.newString();\r\n if (concat) { // pretty hardcoddy\r\n this.writeString(concat.tag, concat.begin, concat.end);\r\n }\r\n }\r\n if (string[j] === '\\n') {\r\n this.newString();\r\n } else {\r\n this.writeString(string[j]);\r\n }\r\n }\r\n }\r\n\r\n writeString(string, begin, end) {\r\n let curStr = this._resultArray[this._currentStr];\r\n let str;\r\n\r\n const curStrLength = curStr ? curStr.length : 0;\r\n\r\n if (_.isUndefined(string)) {\r\n return;\r\n }\r\n\r\n if (!_.isNumber(begin)) {\r\n begin = curStrLength + 1;\r\n }\r\n\r\n if (!_.isNumber(end)) {\r\n end = curStrLength + string.length;\r\n }\r\n\r\n if (!_.isString(string)) {\r\n str = string.toString();\r\n } else {\r\n str = string;\r\n }\r\n\r\n const finish = begin < end ? end : begin;\r\n const start = begin < end ? begin : end;\r\n\r\n if (str.length > Math.abs(begin - end) + 1) {\r\n str = str.substr(0, Math.abs(begin - end + 1));\r\n }\r\n\r\n // spaces before start of new data\r\n if (start > curStrLength + 1) {\r\n this._resultArray[this._currentStr] += ' '.repeat(start - curStrLength - 1);\r\n } else if (start <= curStrLength) {\r\n const cStr = this._resultArray[this._currentStr];\r\n this._resultArray[this._currentStr] = cStr.slice(0, start - 1);\r\n }\r\n\r\n // if reverse order\r\n // reverse order of end and begin means that user wants to align text right\r\n if (end < begin) {\r\n const len = begin - end + 1;\r\n str = ' '.repeat(len - str.length) + str;\r\n }\r\n\r\n // some hardcode fix for space between string numeration and data\r\n // (see pdb file format description)\r\n if (start === 11 && this._numeration && this._tagStrNum !== 1) {\r\n str = ` ${str}`;\r\n }\r\n\r\n // append new data to string\r\n this._resultArray[this._currentStr] += str;\r\n curStr = this._resultArray[this._currentStr];\r\n\r\n if (finish > curStr.length) {\r\n this._resultArray[this._currentStr] += ' '.repeat(finish - curStr.length);\r\n }\r\n }\r\n\r\n writeBondsArray(bonds, atom) {\r\n const bondsArrays = this._getSubArrays(bonds, 4);\r\n\r\n for (let k = 0; k < bondsArrays.length; k++) {\r\n this.newString();\r\n this.writeString(atom.serial, 11, 7);\r\n\r\n for (let j = 0; j < bondsArrays[k].length; j++) {\r\n const serial = (bondsArrays[k][j]._left.serial === atom.serial)\r\n ? bondsArrays[k][j]._right.serial : bondsArrays[k][j]._left.serial;\r\n\r\n this.writeString(serial, 16 + 5 * j, 12 + 5 * j);\r\n }\r\n }\r\n }\r\n\r\n _getSubArrays(arr, subArraySize) {\r\n const subArrays = [];\r\n for (let i = 0; i < arr.length; i += subArraySize) {\r\n subArrays.push(arr.slice(i, i + subArraySize));\r\n }\r\n return subArrays;\r\n }\r\n\r\n // function for writing matrix in Remark290 and Remark350 tags\r\n // (see pdb file description)\r\n writeMatrix(matrix, matrixIndx, tag) {\r\n for (let j = 0; j < 3; j++) {\r\n this.newString();\r\n this.writeString(tag, 14, 18);\r\n this.writeString((j + 1).toString(), 19, 19);\r\n this.writeString(matrixIndx.toString(), 23, 20);\r\n for (let k = 0; k < 3; k++) {\r\n const numb = parseFloat(matrix.elements[j * 4 + k]).toFixed(6);\r\n this.writeString(numb.toString(), 33 + k * 10, 24 + k * 10);\r\n }\r\n\r\n const numb = parseFloat(matrix.elements[j * 4 + 3]).toFixed(5);\r\n this.writeString(numb.toString(), 68, 55);\r\n }\r\n }\r\n\r\n writeMatrices(matrices, string) {\r\n if (!matrices) {\r\n return;\r\n }\r\n const matrix = new Matrix4();\r\n for (let j = 0; j < matrices.length; j++) {\r\n matrix.copy(matrices[j]).transpose();\r\n this.writeMatrix(matrix, j + 1, string);\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport Complex from '../../chem/Complex';\r\nimport Exporter from './Exporter';\r\nimport PDBResult from './PDBResult';\r\nimport Assembly from '../../chem/Assembly';\r\nimport { typeByPDBHelixClass } from '../../chem/Helix';\r\n\r\nexport default class PDBExporter extends Exporter {\r\n constructor(source, options) {\r\n super(source, options);\r\n this._tags = ['HEADER', 'TITLE', 'COMPND', 'REMARK', 'HELIX', 'SHEET', 'ATOM and HETATM', 'CONECT'];\r\n this._result = null;\r\n this._tagExtractors = {\r\n HEADER: this._extractHEADER,\r\n TITLE: this._extractTITLE,\r\n 'ATOM and HETATM': this._extractATOM,\r\n CONECT: this._extractCONECT,\r\n COMPND: this._extractCOMPND,\r\n REMARK: this._extractREMARK,\r\n HELIX: this._extractHELIX,\r\n SHEET: this._extractSHEET,\r\n };\r\n this._stringForRemark350 = 'COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN\\n'\r\n + 'BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE\\n'\r\n + 'MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS\\n'\r\n + 'GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND\\n'\r\n + 'CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN.';\r\n\r\n this._stringForRemark290 = 'CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS\\n'\r\n + 'THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM\\n'\r\n + 'RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY\\n'\r\n + 'RELATED MOLECULES.';\r\n }\r\n\r\n exportSync() {\r\n const result = new PDBResult();\r\n if (!this._source) {\r\n return this._result;\r\n }\r\n\r\n for (let i = 0; i < this._tags.length; i++) {\r\n const tag = this._tags[i];\r\n const func = this._tagExtractors[tag];\r\n if (_.isFunction(func)) {\r\n func.call(this, result);\r\n }\r\n }\r\n\r\n this._result = result.getResult();\r\n\r\n return this._result;\r\n }\r\n\r\n _extractHEADER(result) {\r\n if (!this._source.metadata) {\r\n return;\r\n }\r\n const { metadata } = this._source;\r\n result.newTag('HEADER');\r\n result.newString();\r\n if (metadata.classification) {\r\n result.writeString(metadata.classification, 11, 50);\r\n }\r\n if (metadata.date) {\r\n result.writeString(metadata.date, 51, 59);\r\n }\r\n if (metadata.id) {\r\n result.writeString(metadata.id, 63, 66);\r\n }\r\n }\r\n\r\n _extractTITLE(result) {\r\n if (!this._source.metadata) {\r\n return;\r\n }\r\n const { metadata } = this._source;\r\n if (!metadata.title) {\r\n return;\r\n }\r\n result.newTag('TITLE', true);\r\n for (let i = 0; i < metadata.title.length; i++) {\r\n result.newString();\r\n result.writeString(metadata.title[i], 11, 80);\r\n }\r\n }\r\n\r\n _extractCONECT(result) {\r\n if (!this._source._atoms) {\r\n return;\r\n }\r\n\r\n const atoms = this._source._atoms;\r\n result.newTag('CONECT');\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const fixedBonds = atoms[i].bonds.filter((bond) => bond._fixed);\r\n if (fixedBonds.length !== 0) {\r\n result.writeBondsArray(fixedBonds.reverse(), atoms[i]);\r\n }\r\n }\r\n }\r\n\r\n _extractSHEET(result) {\r\n if (!this._source._sheets) {\r\n return;\r\n }\r\n\r\n result.newTag('SHEET');\r\n\r\n const sheets = this._source._sheets;\r\n for (let i = 0; i < sheets.length; i++) {\r\n if (sheets[i]._strands) {\r\n const strands = sheets[i]._strands;\r\n for (let j = 0; j < strands.length; j++) {\r\n result.newString();\r\n result.writeString(j + 1, 10, 8);\r\n result.writeString(sheets[i]._name, 14, 12);\r\n result.writeString(strands.length, 16, 15);\r\n result.writeString(strands[j].init._type._name, 18, 20);\r\n result.writeString(strands[j].init._chain._name, 22, 22);\r\n result.writeString(strands[j].init._sequence, 26, 23);\r\n result.writeString(strands[j].init._icode, 27, 27);\r\n result.writeString(strands[j].term._type._name, 29, 31);\r\n result.writeString(strands[j].init._chain._name, 33, 33);\r\n result.writeString(strands[j].term._sequence, 37, 34);\r\n result.writeString(strands[j].term._icode, 38, 38);\r\n result.writeString(strands[j].sense, 40, 39);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _extractHELIX(result) {\r\n if (!this._source._helices) {\r\n return;\r\n }\r\n\r\n result.newTag('HELIX');\r\n const helices = this._source._helices;\r\n for (let i = 0; i < helices.length; i++) {\r\n const helix = helices[i];\r\n const helixClass = _.invert(typeByPDBHelixClass);\r\n result.newString();\r\n result.writeString(helix.serial, 10, 8);\r\n result.writeString(helix.name, 14, 12);\r\n result.writeString(helix.init._type._name, 16, 18);\r\n result.writeString(helix.init._chain._name, 20, 20);\r\n result.writeString(helix.init._sequence, 25, 22);\r\n result.writeString(helix.init._icode, 26, 26);\r\n result.writeString(helix.term._type._name, 28, 30);\r\n result.writeString(helix.term._chain._name, 32, 32);\r\n result.writeString(helix.term._sequence, 37, 34);\r\n result.writeString(helix.term._icode, 38, 38);\r\n result.writeString(helixClass[helix.type], 40, 39);\r\n result.writeString(helix.comment, 41, 70);\r\n result.writeString(helix.length, 76, 72);\r\n }\r\n }\r\n\r\n _extractATOM(result) {\r\n if (!this._source._atoms) {\r\n return;\r\n }\r\n const atoms = this._source._atoms;\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const tag = atoms[i].het ? 'HETATM' : 'ATOM';\r\n result.newString(tag);\r\n const startIndx = (atoms[i].element.name.length > 1 || atoms[i].name.length > 3) ? 13 : 14;\r\n result.writeString(atoms[i].serial, 11, 7);\r\n result.writeString(atoms[i].name, startIndx, 16);\r\n result.writeString(String.fromCharCode(atoms[i].location), 17, 17);\r\n result.writeString(atoms[i].residue._type._name, 20, 18);\r\n result.writeString(atoms[i].residue._chain._name, 22, 22);\r\n result.writeString(atoms[i].residue._sequence, 26, 23);\r\n result.writeString(atoms[i].residue._icode, 27, 27);\r\n result.writeString(atoms[i].position.x.toFixed(3), 38, 31);\r\n result.writeString(atoms[i].position.y.toFixed(3), 46, 39);\r\n result.writeString(atoms[i].position.z.toFixed(3), 54, 47);\r\n result.writeString(atoms[i].occupancy.toFixed(2), 60, 55);\r\n result.writeString(atoms[i].temperature.toFixed(2), 66, 61);\r\n result.writeString(atoms[i].element.name, 78, 77);\r\n if (atoms[i].charge) {\r\n result.writeString(atoms[i].charge, 79, 80);\r\n }\r\n }\r\n }\r\n\r\n _extractCOMPND(result) {\r\n if (!this._source._molecules) {\r\n return;\r\n }\r\n const molecules = this._source._molecules;\r\n result.newTag('COMPND', true);\r\n\r\n for (let i = 0; i < molecules.length; i++) {\r\n const chains = this._getMoleculeChains(molecules[i]);\r\n result.newString();\r\n result.writeString(`MOL_ID: ${molecules[i].index};`, 11, 80);\r\n result.newString();\r\n result.writeString(`MOLECULE: ${molecules[i].name};`, 11, 80);\r\n result.newString();\r\n result.writeString('CHAIN: ', 11, 18);\r\n const chainsString = `${chains.join(', ')};`;\r\n result.writeEntireString(chainsString, 81);\r\n }\r\n }\r\n\r\n _extractREMARK(result) {\r\n this._Remark290(result);\r\n this._Remark350(result);\r\n }\r\n\r\n _Remark290(result) {\r\n if (!this._source.symmetry) {\r\n return;\r\n }\r\n\r\n if (this._source.symmetry.length !== 0) {\r\n const matrices = this._source.symmetry;\r\n result.newTag('REMARK', 290);\r\n result.newString();\r\n result.newString();\r\n result.writeEntireString(this._stringForRemark290);\r\n result.writeMatrices(matrices, 'SMTRY');\r\n result.newString();\r\n result.newString();\r\n result.writeString('REMARK: NULL', 11, 80);\r\n }\r\n }\r\n\r\n _Remark350(result) {\r\n if (!this._source.units) {\r\n return;\r\n }\r\n const { units } = this._source;\r\n let biomolIndx = 0;\r\n\r\n result.newTag('REMARK', 350);\r\n result.newString();\r\n result.newString();\r\n result.writeEntireString(this._stringForRemark350);\r\n\r\n const assemblies = units.filter((unit) => unit instanceof Assembly);\r\n\r\n for (let i = 0; i < assemblies.length; i++) {\r\n result.newString();\r\n result.newString();\r\n biomolIndx++;\r\n result.writeString(`BIOMOLECULE: ${biomolIndx}`, 11, 80);\r\n const chains = assemblies[i].chains.join(', ');\r\n result.newString();\r\n result.writeString('APPLY THE FOLLOWING TO CHAINS: ');\r\n result.writeEntireString(chains, 69, { tag: 'AND CHAINS: ', begin: 31, end: 42 });\r\n\r\n const { matrices } = assemblies[i];\r\n result.writeMatrices(matrices, 'BIOMT');\r\n }\r\n }\r\n\r\n _getMoleculeChains(molecule) {\r\n function getChainName(residue) {\r\n return residue._chain._name;\r\n }\r\n const chainNames = molecule.residues.map(getChainName);\r\n return chainNames.filter((item, pos) => chainNames.indexOf(item) === pos);\r\n }\r\n}\r\n\r\nPDBExporter.formats = ['pdb'];\r\nPDBExporter.SourceClass = Complex;\r\n","import * as THREE from 'three';\r\n\r\nconst FBX_POS_SIZE = 3;\r\nconst FBX_NORM_SIZE = 3;\r\nconst FBX_COL_SIZE = 4;\r\n\r\nfunction copyFbxPoint3(src, srcIdx, dst, dstIdx) {\r\n dst[dstIdx] = src[srcIdx];\r\n dst[dstIdx + 1] = src[srcIdx + 1];\r\n dst[dstIdx + 2] = src[srcIdx + 2];\r\n}\r\n\r\nfunction copyFbxPoint4(src, srcIdx, dst, dstIdx, value) {\r\n dst[dstIdx] = src[srcIdx];\r\n dst[dstIdx + 1] = src[srcIdx + 1];\r\n dst[dstIdx + 2] = src[srcIdx + 2];\r\n dst[dstIdx + 3] = value;\r\n}\r\n\r\nconst vector4 = new THREE.Vector4();\r\nfunction copyTransformedPoint3(src, srcIdx, dst, dstIdx, opts) {\r\n vector4.set(src[srcIdx], src[srcIdx + 1], src[srcIdx + 2], opts.w);\r\n vector4.applyMatrix4(opts.matrix);\r\n dst[dstIdx] = vector4.x;\r\n dst[dstIdx + 1] = vector4.y;\r\n dst[dstIdx + 2] = vector4.z;\r\n}\r\n\r\nfunction setSubArray(src, dst, count, copyFunctor, functorOpts) {\r\n if ((dst.array.length - dst.start) / dst.stride < count\r\n || (src.array.length - src.start) / src.stride < count) {\r\n return; // we've got no space\r\n }\r\n if (src.stride === dst.stride) { // stride is the same\r\n dst.array.set(src.array, dst.start);\r\n } else {\r\n let idx = dst.start;\r\n let arridx = src.start;\r\n for (let i = 0; i < count; ++i, idx += dst.stride, arridx += src.stride) {\r\n copyFunctor(src.array, arridx, dst.array, idx, functorOpts);\r\n }\r\n }\r\n}\r\n\r\nexport default class FBXModel {\r\n constructor() {\r\n this.positions = null;\r\n this.normals = null;\r\n this.colors = null;\r\n this.indices = null;\r\n this.lastPos = 0;\r\n this.lastNorm = 0;\r\n this.lastCol = 0;\r\n this.lastIdx = 0;\r\n }\r\n\r\n init(vertsCount, indsCount) {\r\n this.positions = new Float32Array(vertsCount * FBX_POS_SIZE);\r\n this.normals = new Float32Array(vertsCount * FBX_NORM_SIZE);\r\n this.colors = new Float32Array(vertsCount * FBX_COL_SIZE);\r\n this.indices = new Int32Array(indsCount);\r\n }\r\n\r\n setPositions(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.positions,\r\n start: this.lastPos,\r\n stride: FBX_POS_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint3);\r\n this.lastPos += count * FBX_POS_SIZE;\r\n }\r\n\r\n setTransformedPositions(array, start, count, stride, matrix) {\r\n let idx = this.lastPos;\r\n let arrIdx = start;\r\n const opts = { matrix, w: 1 };\r\n for (let i = 0; i < count; ++i, arrIdx += stride, idx += FBX_POS_SIZE) {\r\n copyTransformedPoint3(array, arrIdx, this.positions, idx, opts);\r\n }\r\n this.lastPos += count * FBX_POS_SIZE;\r\n }\r\n\r\n setNormals(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.normals,\r\n start: this.lastNorm,\r\n stride: FBX_NORM_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint3);\r\n this.lastNorm += count * FBX_NORM_SIZE;\r\n }\r\n\r\n setTransformedNormals(array, start, count, stride, matrix) {\r\n let idx = this.lastNorm;\r\n let arrIdx = start;\r\n const opts = { matrix, w: 0 };\r\n for (let i = 0; i < count; ++i, arrIdx += stride, idx += FBX_NORM_SIZE) {\r\n copyTransformedPoint3(array, arrIdx, this.normals, idx, opts);\r\n }\r\n this.lastNorm += count * FBX_NORM_SIZE;\r\n }\r\n\r\n setColors(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.colors,\r\n start: this.lastCol,\r\n stride: FBX_COL_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint4, 1);\r\n this.lastCol += count * FBX_COL_SIZE;\r\n }\r\n\r\n setIndices(array, start, count) {\r\n this.indices.set(array, this.lastIdx);\r\n this.lastIdx += count;\r\n }\r\n\r\n setShiftedIndices(array, count, shift) {\r\n const shifted = array.map((x) => x + shift);\r\n this.setIndices(shifted, 0, count);\r\n }\r\n\r\n getVerticesNumber() {\r\n return this.lastPos / FBX_POS_SIZE;\r\n }\r\n\r\n addInstance(matrix, geo) {\r\n // add indices at first to take old number of vertices for shift\r\n const currentCount = this.getVerticesNumber();\r\n this.setShiftedIndices(geo.indices, geo.indices.length, currentCount);\r\n // simply write vertices at empty space\r\n const size = geo.itemSize;\r\n this.setTransformedPositions(geo.positions, 0, geo.vertsCount, size.position, matrix);\r\n this.setTransformedNormals(geo.normals, 0, geo.vertsCount, size.normal, matrix);\r\n this.setColors(geo.colors, 0, geo.vertsCount, size.color);\r\n }\r\n}\r\n","/** Base class for fbx geometry contains simply organized attributes: positions+normals+colors, indices. */\r\nexport default class FBXGeometry {\r\n /**\r\n * Create a base geo with necessary members.\r\n */\r\n constructor() {\r\n this.positions = null;\r\n this.normals = null;\r\n this.colors = null;\r\n this.indices = null;\r\n this.vertsCount = 0;\r\n this.itemSize = null;\r\n }\r\n\r\n /**\r\n * Initialize base geo storing items info from attributes.\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n */\r\n init(geo, _info) {\r\n const { attributes } = geo;\r\n // save item size\r\n this.itemSize = {\r\n position: attributes.position.itemSize,\r\n normal: attributes.normal.itemSize,\r\n color: attributes.color.itemSize,\r\n };\r\n }\r\n}\r\n","import FBXGeometry from './FBXGeometry';\r\n\r\n/**\r\n * Fbx geometry, that copies positions+normals, indexes and creates colors filled with defined value.\r\n * @extends FBXGeometry\r\n */\r\nexport default class FBX1CGeometry extends FBXGeometry {\r\n /**\r\n * Initialize geo storing positions, normals, indices and create colors.\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n */\r\n init(geo, _info) {\r\n super.init(geo, _info);\r\n const {\r\n attributes: {\r\n position,\r\n normal,\r\n },\r\n index,\r\n } = geo;\r\n // copy vertices attributes\r\n this.vertsCount = position.count;\r\n this.positions = position.array;\r\n this.normals = normal.array;\r\n // create color array\r\n this.colors = new Float32Array(this.vertsCount * this.itemSize.color);\r\n // indices\r\n this.indices = index.array;\r\n }\r\n\r\n /**\r\n * Set defined color for all items in color attribute\r\n * @param {Object} color - THREE.Color.\r\n */\r\n setColors(color) {\r\n let offset = 0;\r\n for (let i = 0, l = this.colors.length, cl = this.itemSize.color; i < l; i += cl) {\r\n this.colors[offset++] = color.r;\r\n this.colors[offset++] = color.g;\r\n this.colors[offset++] = color.b;\r\n }\r\n }\r\n}\r\n","import FBXGeometry from './FBXGeometry';\r\n\r\n/**\r\n * Fbx geometry, that copies positions+normals, indexes from cylinder geometry and creates colors filled with two\r\n * defined values.\r\n * @extends FBXGeometry\r\n */\r\nexport default class FBX2CCylinder extends FBXGeometry {\r\n constructor() {\r\n super();\r\n this._cutRawStart = 0;\r\n this._cutRawEnd = 0;\r\n this._facesPerSlice = 0;\r\n }\r\n\r\n /**\r\n * Initialize geo by creating new attributes, because we extend number of vertices to make cylinder two-colored.\r\n * Indices remain the same. We process open- end close-ended cylinders and consider cylinders od 2 segments\r\n * in height ONLY.\r\n * NOTE: cylinder consists of 2 height segments and stores parts in the order: tube, topCap, bottomCap\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n * @param {Object} info - information needed for geo extend\r\n */\r\n init(geo, info) {\r\n super.init(geo, info);\r\n const {\r\n attributes: {\r\n position,\r\n },\r\n index,\r\n } = geo;\r\n // extend vertices arrays\r\n this.vertsCount = position.count + info.addPerCylinder;\r\n this._facesPerSlice = info.addPerCylinder;\r\n this.positions = new Float32Array(this.vertsCount * position.itemSize);\r\n this.normals = new Float32Array(this.vertsCount * this.itemSize.normal);\r\n this.colors = new Float32Array(this.vertsCount * this.itemSize.color);\r\n this._extendVertices(geo, info);\r\n // number of indices stays the same\r\n this.indices = new Uint32Array(index.count);\r\n this._extendIndices(geo, info);\r\n }\r\n\r\n /** Extend vertex attributes to have one more slice to make sharp middle startColor-endColor line. */\r\n _extendVertices(geo, info) {\r\n const { position } = geo.attributes;\r\n const { normal } = geo.attributes;\r\n const geoParams = geo.getGeoParams();\r\n const cutRaw = 1; // we expect cylinders of 2 segments in height => so half segment = 1\r\n this._cutRawStart = cutRaw * geoParams.radialSegments;\r\n this._cutRawEnd = this._cutRawStart + info.addPerCylinder;\r\n { // write first half of cylinder\r\n let temp = position.array.slice(0, this._cutRawEnd * position.itemSize);\r\n this.positions.set(temp, 0);\r\n temp = normal.array.slice(0, this._cutRawEnd * normal.itemSize);\r\n this.normals.set(temp, 0);\r\n }\r\n { // write second part of cylinder\r\n let temp = position.array.slice(this._cutRawStart * position.itemSize, position.array.length);\r\n this.positions.set(temp, this._cutRawEnd * position.itemSize);\r\n temp = normal.array.slice(this._cutRawStart * normal.itemSize, normal.array.length);\r\n this.normals.set(temp, this._cutRawEnd * normal.itemSize);\r\n }\r\n }\r\n\r\n /** Shift values of second part (+caps) indices by newly added vertices count. Number of faces remains the same. */\r\n _extendIndices(geo, info) {\r\n const { index } = geo;\r\n const indicesPerQuad = 6; // quad = 2 triangles => 6 indices\r\n const startToShift = info.addPerCylinder * indicesPerQuad;\r\n const shift = info.addPerCylinder;\r\n let shifted = index.array.slice(startToShift, index.count);\r\n shifted = shifted.map((x) => x + shift); // shift only the endings\r\n this.indices.set(index.array, 0);\r\n this.indices.set(shifted, startToShift);\r\n }\r\n\r\n /**\r\n * Set defined colors: (first part + bottom cap), (second part + top cap)\r\n * @param {number} start - start color index\r\n * @param {number} end - start color index\r\n * @param {array} array - array of colors\r\n * @param {array} color - color value components\r\n */\r\n _setColorRange(start, end, array, color) {\r\n const colorSize = color.length;\r\n for (let i = start; i < end; i += colorSize) {\r\n array.set(color, i);\r\n }\r\n }\r\n\r\n /**\r\n * Set defined colors: (first part + bottom cap), (second part + top cap)\r\n * @param {Object} color1 - THREE.Color.\r\n * @param {Object} color2 - THREE.Color.\r\n */\r\n setColors(color1, color2) {\r\n const colorSize = this.itemSize.color;\r\n const part1End = this._cutRawEnd * colorSize;\r\n const part2End = part1End * 2;\r\n this._setColorRange(0, part1End, this.colors, color1.toArray());\r\n this._setColorRange(part1End, part2End, this.colors, color2.toArray());\r\n if (part2End < this.colors.length) { // cylinder has caps, lets paint them\r\n const capSize = (this._facesPerSlice + 1) * colorSize;\r\n const cap1End = part2End + capSize;\r\n this._setColorRange(part2End, cap1End, this.colors, color2.toArray());\r\n const cap2End = cap1End + capSize; // should be equal to this.colors.length;\r\n this._setColorRange(cap1End, cap2End, this.colors, color1.toArray());\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\n\r\nimport utils from '../../../utils';\r\nimport gfxutils from '../../../gfx/gfxutils';\r\nimport logger from '../../../utils/logger';\r\n\r\nimport FBXModel from './FBXModel';\r\nimport ThickLineMesh from '../../../gfx/meshes/ThickLineMesh';\r\nimport ZSpriteMesh from '../../../gfx/meshes/ZSpriteMesh';\r\nimport InstancedSpheresGeometry from '../../../gfx/geometries/InstancedSpheresGeometry';\r\nimport Instanced2CCylindersGeometry from '../../../gfx/geometries/Instanced2CCylindersGeometry';\r\nimport FBX1CGeometry from './FBX1CGeometry';\r\nimport FBX2CCylinder from './FBX2CCylinder';\r\n\r\nexport default class FBXInfoExtractor {\r\n constructor() {\r\n this._materials = [];\r\n this._models = [];\r\n }\r\n\r\n process(data) {\r\n this._extractModelsAndMaterials(data);\r\n const models = this._flattenModels();\r\n\r\n return {\r\n name: data.name,\r\n models,\r\n materials: this._materials,\r\n };\r\n }\r\n\r\n /**\r\n * Extract fbx object information from ComplexVisual\r\n * @param {object} data - complexVisual to get geometry info from\r\n */\r\n _extractModelsAndMaterials(data) {\r\n const layersOfInterest = new THREE.Layers();\r\n layersOfInterest.set(gfxutils.LAYERS.DEFAULT);\r\n layersOfInterest.enable(gfxutils.LAYERS.TRANSPARENT);\r\n data.traverse((object) => {\r\n if (object instanceof THREE.Mesh && object.layers.test(layersOfInterest) && this.checkExportAbility(object)) {\r\n if (object.geometry.type === 'InstancedBufferGeometry') {\r\n this._collectInstancedGeoInfo(object);\r\n } else {\r\n this._collectGeoInfo(object);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Reworking indices buffer, see https://banexdevblog.wordpress.com/2014/06/23/a-quick-tutorial-about-the-fbx-ascii-format/\r\n * basically, every triangle in Miew has been represented hat way (e.g.) : 0,1,7, but we must (for FBX) rework that\r\n * into: 0,1,-8.\r\n * @param {array} indices - belongs to [0, maxVertIndex]\r\n */\r\n _reworkIndices(indices) {\r\n const faceSize = 3;\r\n for (let i = faceSize - 1; i < indices.length; i += faceSize) {\r\n indices[i] *= -1;\r\n indices[i]--;\r\n }\r\n }\r\n\r\n /**\r\n * Combine geometry from several models having the same material into one Model and finally prepare indices\r\n * @returns {array} models, combined by material id\r\n */\r\n _flattenModels() {\r\n let overallVertsCount = 0;\r\n function shift(x) {\r\n return x + overallVertsCount;\r\n }\r\n const combined = [];\r\n // flatten models geometry\r\n for (let i = 0, n = this._models.length; i < n; i++) {\r\n const models = this._models[i];\r\n let indices = [];\r\n let positions = [];\r\n let normals = [];\r\n let colors = [];\r\n // reorganize every attributes as array of arrays\r\n overallVertsCount = 0;\r\n for (let j = 0; j < models.length; j++) {\r\n const m = models[j];\r\n indices.push(m.indices.map(shift));\r\n overallVertsCount += m.getVerticesNumber();\r\n positions.push(m.positions);\r\n normals.push(m.normals);\r\n colors.push(m.colors);\r\n }\r\n // join all subarrays into one\r\n indices = utils.mergeTypedArraysUnsafe(indices);\r\n this._reworkIndices(indices);\r\n positions = utils.mergeTypedArraysUnsafe(positions);\r\n normals = utils.mergeTypedArraysUnsafe(normals);\r\n colors = utils.mergeTypedArraysUnsafe(colors);\r\n combined.push({\r\n indices,\r\n positions,\r\n normals,\r\n colors,\r\n verticesCount: overallVertsCount,\r\n });\r\n }\r\n return combined;\r\n }\r\n\r\n /**\r\n * Check ability to export the kind of mesh.\r\n * @param {object} mesh - given mesh to check\r\n * @returns {boolean} result of check\r\n */\r\n checkExportAbility(mesh) {\r\n // check mesh on not being empty\r\n if (mesh.geometry.attributes.position.count === 0) {\r\n return false;\r\n }\r\n // check type of mesh\r\n // if (mesh.geometry.isInstancedBufferGeometry && settings.now.zSprites) {\r\n if (mesh instanceof ZSpriteMesh) {\r\n logger.warn('Currently we cannot export \\'sprites\\' modes, like BS, WV, LC. Please turn of settings \\'zSprites\\' and try again');\r\n return false;\r\n }\r\n if (mesh instanceof ThickLineMesh) {\r\n logger.warn('Currently we cannot export Lines mode');\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Save geometry info from common mesh, like Surface or Cartoon\r\n */\r\n _collectGeoInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n normal,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const vertCount = position.count;\r\n model.init(vertCount, index.count);\r\n if (matrix.isIdentity()) {\r\n model.setPositions(position.array, 0, vertCount, position.itemSize);\r\n model.setNormals(normal.array, 0, vertCount, normal.itemSize);\r\n } else {\r\n model.setTransformedPositions(position.array, 0, vertCount, position.itemSize, matrix);\r\n model.setTransformedNormals(normal.array, 0, vertCount, normal.itemSize, matrix);\r\n }\r\n model.setColors(color.array, 0, vertCount, color.itemSize);\r\n model.setIndices(index.array, 0, index.count);\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Collect instanced spheres geometry and materials.\r\n * @param {object} mesh - mesh with instanced spheres info\r\n */\r\n _collectSpheresInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const instCount = mesh.geometry.instanceCount;\r\n const vertCount = position.count;\r\n const indsCount = index.count;\r\n model.init(instCount * vertCount, instCount * indsCount);\r\n const geo = new FBX1CGeometry();\r\n geo.init(mesh.geometry);\r\n const instMatrix = new THREE.Matrix4();\r\n const objMatrix = new THREE.Matrix4();\r\n const sphereColor = new THREE.Color();\r\n for (let instanceIndex = 0; instanceIndex < instCount; ++instanceIndex) {\r\n // update colors in geometry\r\n const colorIdx = instanceIndex * color.itemSize;\r\n sphereColor.fromArray(color.array, colorIdx);\r\n geo.setColors(sphereColor);\r\n // add instance to the model\r\n this._getSphereInstanceMatrix(mesh.geometry, instanceIndex, instMatrix);\r\n objMatrix.multiplyMatrices(matrix, instMatrix);\r\n model.addInstance(objMatrix, geo);\r\n }\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Getting all instanced cylinders from given mesh.\r\n * Divide cylinder (add additional vertexes) for prettiness therefore algorithm is a bit complicated\r\n * @param {object} mesh - given mesh with instanced cylinders\r\n */\r\n _collectCylindersInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n color2,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const instCount = mesh.geometry.instanceCount;\r\n const oneCCylinder = new FBX1CGeometry();\r\n oneCCylinder.init(mesh.geometry);\r\n const splittingInfo = this._gatherCylindersColoringInfo(mesh.geometry);\r\n let twoCCylinder = null;\r\n if (splittingInfo.needToSplit > 0) {\r\n twoCCylinder = new FBX2CCylinder();\r\n twoCCylinder.init(mesh.geometry, splittingInfo);\r\n }\r\n const additionalVertsCount = splittingInfo.addPerCylinder * splittingInfo.needToSplit;\r\n const vertCount = position.count;\r\n const indsCount = index.count;\r\n model.init(instCount * vertCount + additionalVertsCount, instCount * indsCount);\r\n const instMatrix = new THREE.Matrix4();\r\n const objMatrix = new THREE.Matrix4();\r\n const colorStart = new THREE.Color();\r\n const colorEnd = new THREE.Color();\r\n let geo = {};\r\n for (let instanceIndex = 0; instanceIndex < instCount; ++instanceIndex) {\r\n // update colors in geometry\r\n const colorIdx = instanceIndex * color.itemSize;\r\n if (splittingInfo.is2Colored[instanceIndex]) {\r\n // .color2 contains starting color, and .color contains starting color (see uber.frag ATTR_COLOR2)\r\n colorStart.fromArray(color2.array, colorIdx);\r\n colorEnd.fromArray(color.array, colorIdx);\r\n if (twoCCylinder) {\r\n twoCCylinder.setColors(colorStart, colorEnd);\r\n geo = twoCCylinder;\r\n }\r\n } else {\r\n // has one color per cylinder\r\n colorStart.fromArray(color.array, colorIdx);\r\n oneCCylinder.setColors(colorStart);\r\n geo = oneCCylinder;\r\n }\r\n // add instance to the model\r\n this._getCylinderInstanceMatrix(mesh.geometry, instanceIndex, instMatrix);\r\n objMatrix.multiplyMatrices(matrix, instMatrix);\r\n model.addInstance(objMatrix, geo);\r\n }\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Adding model to pool of models or extend existing ones\r\n * @param {object} model - model to add\r\n * @param {object} material - material to add\r\n */\r\n _addToPool(model, material) {\r\n const materialIdx = this._checkExistingMaterial(material);\r\n if (materialIdx < 0) { // new model-material pair\r\n this._models.push([model]);\r\n this._materials.push(material);\r\n } else { // add model to existing model-material pair\r\n const models = this._models[materialIdx];\r\n models.push(model);\r\n }\r\n }\r\n\r\n /**\r\n * Checking if given material already was registered in materials pool (no need to create new one)\r\n * @param {object} material - given material\r\n * @returns {number} number of model-material pair\r\n */\r\n _checkExistingMaterial(material) {\r\n return _.findIndex(this._materials, (m) => _.isEqual(m, material));\r\n }\r\n\r\n _gatherCylindersColoringInfo(geo) {\r\n const instCount = geo.instanceCount;\r\n const color1 = geo.attributes.color.array;\r\n const color2 = geo.attributes.color2.array;\r\n const stride = geo.attributes.color.itemSize;\r\n const is2Colored = new Array(instCount);\r\n // analyze color instance attributes\r\n let needToSplit = 0;\r\n let colIdx = 0;\r\n for (let i = 0; i < instCount; i++, colIdx += stride) {\r\n const differs = (Math.abs(color1[colIdx] - color2[colIdx]) > 0.0000001) // compare ending colors\r\n || (Math.abs(color1[colIdx + 1] - color2[colIdx + 1]) > 0.0000001)\r\n || (Math.abs(color1[colIdx + 2] - color2[colIdx + 2]) > 0.0000001);\r\n is2Colored[i] = differs;\r\n needToSplit += differs; // count number of 2-colored cylinders\r\n }\r\n // calc number of vertices to add into 2-colored\r\n const geoParams = geo.getGeoParams();\r\n const addPerCylinder = geoParams.radialSegments;\r\n return { is2Colored, needToSplit, addPerCylinder };\r\n }\r\n\r\n /**\r\n * Collect instanced models and materials.\r\n * @param {object} mesh - given mesh with instanced something (spheres or cylinders)\r\n */\r\n _collectInstancedGeoInfo(mesh) {\r\n if (mesh.geometry instanceof InstancedSpheresGeometry) {\r\n this._collectSpheresInfo(mesh);\r\n } else if (mesh.geometry instanceof Instanced2CCylindersGeometry) {\r\n this._collectCylindersInfo(mesh);\r\n }\r\n }\r\n\r\n /**\r\n * Collect Material info from given mesh.\r\n * @param {object} mesh - given mesh with material info\r\n * @returns {object} material\r\n */\r\n _collectMaterialInfo(mesh) {\r\n const { uberOptions } = mesh.material;\r\n return ({\r\n diffuse: uberOptions.diffuse.toArray(),\r\n opacity: uberOptions.opacity,\r\n shininess: uberOptions.shininess,\r\n specular: uberOptions.specular.toArray(),\r\n });\r\n }\r\n\r\n _getCylinderInstanceMatrix(geo, instIdx, matrix) {\r\n const matVector1 = geo.attributes.matVector1.array;\r\n const matVector2 = geo.attributes.matVector2.array;\r\n const matVector3 = geo.attributes.matVector3.array;\r\n const idxOffset = instIdx * 4; // used 4 because offset arrays are stored in quads\r\n matrix.set(\r\n matVector1[idxOffset],\r\n matVector1[idxOffset + 1],\r\n matVector1[idxOffset + 2],\r\n matVector1[idxOffset + 3],\r\n matVector2[idxOffset],\r\n matVector2[idxOffset + 1],\r\n matVector2[idxOffset + 2],\r\n matVector2[idxOffset + 3],\r\n matVector3[idxOffset],\r\n matVector3[idxOffset + 1],\r\n matVector3[idxOffset + 2],\r\n matVector3[idxOffset + 3],\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n );\r\n }\r\n\r\n _getSphereInstanceMatrix(geo, instIdx, matrix) {\r\n const { offset } = geo.attributes;\r\n const idx = instIdx * offset.itemSize;\r\n const x = offset.array[idx];\r\n const y = offset.array[idx + 1];\r\n const z = offset.array[idx + 2];\r\n const scale = offset.array[idx + 3];\r\n matrix.set(\r\n scale,\r\n 0,\r\n 0,\r\n x,\r\n 0,\r\n scale,\r\n 0,\r\n y,\r\n 0,\r\n 0,\r\n scale,\r\n z,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n );\r\n }\r\n}\r\n","// Forming default definitions block\r\nconst defaultDefinitions = `\r\nDefinitions: {\r\n Version: 100\r\n Count: 3\r\n ObjectType: \"Model\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Geometry\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Material\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Pose\" {\r\n Count: 1\r\n }\r\n ObjectType: \"GlobalSettings\" {\r\n Count: 1\r\n }\r\n} `;\r\n\r\n// Default model properties\r\nconst defaultProperties = `Properties60: {\r\n Property: \"QuaternionInterpolate\", \"bool\", \"\",0\r\n Property: \"Visibility\", \"Visibility\", \"A\",1\r\n Property: \"Lcl Translation\", \"Lcl Translation\", \"A\",0.000000000000000,0.000000000000000,-1789.238037109375000\r\n Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A\",0.000009334667643,-0.000000000000000,0.000000000000000\r\n Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A\",1.000000000000000,1.000000000000000,1.000000000000000\r\n Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\r\n Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\r\n Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationActive\", \"bool\", \"\",0\r\n Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationMinX\", \"bool\", \"\",0\r\n Property: \"TranslationMinY\", \"bool\", \"\",0\r\n Property: \"TranslationMinZ\", \"bool\", \"\",0\r\n Property: \"TranslationMaxX\", \"bool\", \"\",0\r\n Property: \"TranslationMaxY\", \"bool\", \"\",0\r\n Property: \"TranslationMaxZ\", \"bool\", \"\",0\r\n Property: \"RotationOrder\", \"enum\", \"\",0\r\n Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\r\n Property: \"AxisLen\", \"double\", \"\",10\r\n Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationActive\", \"bool\", \"\",0\r\n Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationMinX\", \"bool\", \"\",0\r\n Property: \"RotationMinY\", \"bool\", \"\",0\r\n Property: \"RotationMinZ\", \"bool\", \"\",0\r\n Property: \"RotationMaxX\", \"bool\", \"\",0\r\n Property: \"RotationMaxY\", \"bool\", \"\",0\r\n Property: \"RotationMaxZ\", \"bool\", \"\",0\r\n Property: \"RotationStiffnessX\", \"double\", \"\",0\r\n Property: \"RotationStiffnessY\", \"double\", \"\",0\r\n Property: \"RotationStiffnessZ\", \"double\", \"\",0\r\n Property: \"MinDampRangeX\", \"double\", \"\",0\r\n Property: \"MinDampRangeY\", \"double\", \"\",0\r\n Property: \"MinDampRangeZ\", \"double\", \"\",0\r\n Property: \"MaxDampRangeX\", \"double\", \"\",0\r\n Property: \"MaxDampRangeY\", \"double\", \"\",0\r\n Property: \"MaxDampRangeZ\", \"double\", \"\",0\r\n Property: \"MinDampStrengthX\", \"double\", \"\",0\r\n Property: \"MinDampStrengthY\", \"double\", \"\",0\r\n Property: \"MinDampStrengthZ\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthX\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthY\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthZ\", \"double\", \"\",0\r\n Property: \"PreferedAngleX\", \"double\", \"\",0\r\n Property: \"PreferedAngleY\", \"double\", \"\",0\r\n Property: \"PreferedAngleZ\", \"double\", \"\",0\r\n Property: \"InheritType\", \"enum\", \"\",0\r\n Property: \"ScalingActive\", \"bool\", \"\",0\r\n Property: \"ScalingMin\", \"Vector3D\", \"\",1,1,1\r\n Property: \"ScalingMax\", \"Vector3D\", \"\",1,1,1\r\n Property: \"ScalingMinX\", \"bool\", \"\",0\r\n Property: \"ScalingMinY\", \"bool\", \"\",0\r\n Property: \"ScalingMinZ\", \"bool\", \"\",0\r\n Property: \"ScalingMaxX\", \"bool\", \"\",0\r\n Property: \"ScalingMaxY\", \"bool\", \"\",0\r\n Property: \"ScalingMaxZ\", \"bool\", \"\",0\r\n Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\r\n Property: \"LookAtProperty\", \"object\", \"\"\r\n Property: \"UpVectorProperty\", \"object\", \"\"\r\n Property: \"Show\", \"bool\", \"\",1\r\n Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\r\n Property: \"DefaultAttributeIndex\", \"int\", \"\",0\r\n Property: \"Color\", \"Color\", \"A+\",0,0,0\r\n Property: \"Size\", \"double\", \"\",100\r\n Property: \"Look\", \"enum\", \"\",1\r\n }`;\r\n\r\n// Default materials layer\r\nconst defaultMaterialLayer = `\r\n LayerElementMaterial: 0 {\r\n Version: 101\r\n Name: \"\"\r\n MappingInformationType: \"AllSame\"\r\n ReferenceInformationType: \"Direct\"\r\n Materials: 0\r\n }`;\r\n\r\n// Default layers block\r\nconst defaultLayerBlock = `\r\n Layer: 0 {\r\n Version: 100\r\n LayerElement: {\r\n Type: \"LayerElementNormal\"\r\n TypedIndex: 0\r\n }\r\n LayerElement: {\r\n Type: \"LayerElementColor\"\r\n TypedIndex: 0\r\n }\r\n LayerElement: {\r\n Type: \"LayerElementMaterial\"\r\n TypedIndex: 0\r\n }\r\n }`;\r\n\r\n/**\r\n * globalSettings info in output file.\r\n */\r\nconst globalSettings = `GlobalSettings: {\r\n Version: 1000\r\n Properties60: {\r\n Property: \"UpAxis\", \"int\", \"\",1\r\n Property: \"UpAxisSign\", \"int\", \"\",1\r\n Property: \"FrontAxis\", \"int\", \"\",2\r\n Property: \"FrontAxisSign\", \"int\", \"\",1\r\n Property: \"CoordAxis\", \"int\", \"\",0\r\n Property: \"CoordAxisSign\", \"int\", \"\",1\r\n Property: \"UnitScaleFactor\", \"double\", \"\",1\r\n }\r\n }`;\r\n\r\nexport default class FBXResult {\r\n constructor() {\r\n this._resultArray = [];\r\n this._info = null;\r\n }\r\n\r\n getResult(info) {\r\n this._info = info;\r\n this._resultArray.push(this._writeHeader());\r\n this._resultArray.push(this._writeDefinitions());\r\n this._resultArray.push(this._writeObjects(info.models, info.materials));\r\n this._resultArray.push(this._writeRelations());\r\n this._resultArray.push(this._writeConnections()); // connections between models and materials)\r\n this._info = null;\r\n return this._resultArray.join('');\r\n }\r\n\r\n /**\r\n * Add FBXHeader info to output file.\r\n * Some fields are really confusing, but it seems that all listed fields are very informative\r\n */\r\n _writeHeader() {\r\n const FBXHeaderVersion = 1003; // 1003 is some number which appears to present in many 6.1 ASCII files\r\n const FBXVersion = 6100; // Mandatory and only supported version\r\n const date = new Date();\r\n const timeStampVersion = 1000;\r\n const creator = `Miew FBX Exporter v${this._info.version}`; // Supposed to be an engine\r\n\r\n return `; FBX 6.1.0 project file\r\n; Created by ${creator} Copyright (c) 2015-2026 EPAM Systems, Inc.\r\n; For support please contact miew@epam.com\r\n; ----------------------------------------------------\r\n\r\nFBXHeaderExtension: {\r\n FBXHeaderVersion: ${FBXHeaderVersion}\r\n FBXVersion: ${FBXVersion}\r\n CreationTimeStamp: {\r\n Version: ${timeStampVersion}\r\n Year: ${date.getFullYear()}\r\n Month: ${date.getMonth() + 1}\r\n Day: ${date.getDate()}\r\n Hour: ${date.getHours()}\r\n Minute: ${date.getMinutes()}\r\n Second: ${date.getSeconds()}\r\n Millisecond: ${date.getMilliseconds()}\r\n }\r\n Creator: \"${creator}\"\r\n OtherFlags: {\r\n FlagPLE: 0\r\n }\r\n}\r\nCreationTime: \"${date}\"\r\nCreator: \"${creator}\"\r\n`;\r\n }\r\n\r\n /**\r\n * Add Definitions info to output file.\r\n * Not exactly sure if this section is template section (as it is in 7.4+) or it should every time be like this\r\n */\r\n _writeDefinitions() {\r\n return `\r\n; Object definitions\r\n;------------------------------------------------------------------\r\n\r\n${defaultDefinitions}\r\n`;\r\n }\r\n\r\n /**\r\n * Adding gathered information about Models to resulting string.\r\n * Reminder - there may be more then 1 model in scene, but we must place materials after ALL models.\r\n * @returns {string} string containing all models (vertices, indices, colors, normals etc)\r\n */\r\n _models() {\r\n const modelVersion = 232;\r\n let allModels = '';\r\n const { models } = this._info;\r\n for (let i = 0; i < models.length; ++i) {\r\n const model = models[i];\r\n const vertCount = model.verticesCount;\r\n allModels += `\r\n Model: \"Model::${this._info.name}_${i}\", \"Mesh\" {\r\n Version: ${modelVersion}\r\n ${defaultProperties}\r\n ${this._verticesIndices(model.positions, model.indices)}\r\n ${this._normalLayer(model.normals)}\r\n ${this._colorLayer(model.colors, vertCount)}\r\n ${defaultMaterialLayer}\r\n ${defaultLayerBlock}\r\n }`;\r\n }\r\n return allModels;\r\n }\r\n\r\n /**\r\n * Add Material info to result\r\n */\r\n _materials() {\r\n const materialVersion = 102;\r\n let allMaterials = '';\r\n const { materials } = this._info;\r\n for (let i = 0; i < materials.length; ++i) {\r\n const material = materials[i];\r\n allMaterials += `\r\n Material: \"Material::${this._info.name}_${i}_default\", \"\" {\r\n Version: ${materialVersion}\r\n ShadingModel: \"lambert\"\r\n MultiLayer: 0\r\n ${this._materialProperties(material)}\r\n }`;\r\n }\r\n return allMaterials;\r\n }\r\n\r\n /**\r\n * Add Objects info to output file.\r\n */\r\n _writeObjects() {\r\n return `\r\n; Object properties\r\n;------------------------------------------------------------------\r\n\r\nObjects: {\r\n ${this._models()}\r\n ${this._materials()}\r\n ${globalSettings}\r\n}\r\n`;\r\n }\r\n\r\n /**\r\n * Add Relations info to output file.\r\n */\r\n _writeRelations() {\r\n let modelsList = '';\r\n for (let i = 0; i < this._info.models.length; ++i) {\r\n modelsList += `\r\n Model: \"Model::${this._info.name}_${i}\", \"Mesh\" {\r\n }`;\r\n }\r\n let materialList = '';\r\n for (let i = 0; i < this._info.materials.length; ++i) {\r\n materialList += `\r\n Material: \"Material::${this._info.name}_${i}_default\", \"\" {\r\n }`;\r\n }\r\n\r\n return `\r\n; Object relations\r\n;------------------------------------------------------------------\r\n\r\nRelations: {\r\n ${modelsList}\r\n Model: \"Model::Producer Perspective\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Top\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Bottom\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Front\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Back\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Right\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Left\", \"Camera\" {\r\n }\r\n Model: \"Model::Camera Switcher\", \"CameraSwitcher\" {\r\n }\r\n ${materialList}\r\n}`;\r\n }\r\n\r\n /**\r\n * Add Connections info to output file.\r\n */\r\n _writeConnections() {\r\n let modelsList = '';\r\n const { name } = this._info;\r\n for (let i = 0; i < this._info.models.length; ++i) {\r\n modelsList += `\r\n Connect: \"OO\", \"Model::${name}_${i}\", \"Model::Scene\"`;\r\n }\r\n\r\n let materialList = '';\r\n for (let i = 0; i < this._info.materials.length; ++i) {\r\n materialList += `\r\n Connect: \"OO\", \"Material::${name}_${i}_default\", \"Model::${name}_${i}\"`;\r\n }\r\n\r\n return `\r\n; Object connections\r\n;------------------------------------------------------------------\r\n\r\nConnections: {\r\n ${modelsList}\r\n ${materialList}\r\n}`;\r\n }\r\n\r\n /**\r\n * Write float array to string with limited precision\r\n * @param {Float32Array} array - array to be fixed\r\n * @returns {String} String with fixed floats\r\n */\r\n _floatArrayToString(array) {\r\n const str = [];\r\n for (let i = 0; i < array.length; ++i) {\r\n str[i] = array[i].toFixed(6);\r\n }\r\n return str.join(',');\r\n }\r\n\r\n /**\r\n * Adding color layer to resulting file\r\n * @param {Float32Array} colorArray attribute\r\n * @param {number} vertCount - number of vertices in the model\r\n * @returns {string} color layer info\r\n */\r\n _colorLayer(colorArray, vertCount) {\r\n const layerElementColorNumber = 0;\r\n const layerElementColorVersion = 101;\r\n const layerElementColorName = '';\r\n const colorsStr = this._floatArrayToString(colorArray);\r\n // Mapping Information type and Reference Information type are mandatory for our Miew! Must not be changed\r\n // As said [..Array(...)] - fastest and easiest way to produce [0, 1, .....] array\r\n const colorIndices = [...Array(vertCount).keys()];\r\n return `\r\n LayerElementColor: ${layerElementColorNumber} {\r\n Version: ${layerElementColorVersion}\r\n Name: \"${layerElementColorName}\"\r\n MappingInformationType: \"ByVertice\"\r\n ReferenceInformationType: \"Direct\"\r\n Colors: ${colorsStr}\r\n ColorIndex: ${colorIndices}\r\n }`;\r\n }\r\n\r\n /**\r\n * Adding normal layer to resulting file\r\n * @param {Float32Array} normalArray attribute\r\n * @returns {string} normal layer info\r\n */\r\n _normalLayer(normalArray) {\r\n const layerElementNormalNumber = 0;\r\n const layerElementNormalVersion = 101;\r\n const layerElementNormalName = '';\r\n const normalsStr = this._floatArrayToString(normalArray);\r\n // Mapping Information type and Reference Information type are mandatory for our Miew! Must not be changed\r\n return `\r\n LayerElementNormal: ${layerElementNormalNumber} {\r\n Version: ${layerElementNormalVersion}\r\n Name: \"${layerElementNormalName}\"\r\n MappingInformationType: \"ByVertice\"\r\n ReferenceInformationType: \"Direct\"\r\n Normals: ${normalsStr}\r\n }`;\r\n }\r\n\r\n /**\r\n * Adding vertices and indices to resulting string\r\n * @return {string} resulting string in FBX notation\r\n */\r\n _verticesIndices(positions, indices) {\r\n const multiLayer = 0;\r\n const multiTake = 1;\r\n const shading = 'Y';\r\n const culling = 'CullingOff';\r\n const geometryVersion = 124;\r\n const vertStr = this._floatArrayToString(positions);\r\n /* About _correctArrayNotation: Float32Arrays will contains only Float32 numbers, which implies that it will be floating points with 17 numbers after point.\r\n * We cannot (and it's logically incorrect) save all this information, so we convert this Float32Array into Array-like object with numbers with only 6 numbers after point\r\n * Reminder - this is big memory loss (as we must save at one moment two arrays with similar information) */\r\n return `MultiLayer: ${multiLayer}\r\n MultiTake: ${multiTake}\r\n Shading: ${shading}\r\n Culling: \"${culling}\"\r\n Vertices: ${vertStr}\r\n PolygonVertexIndex: ${indices}\r\n GeometryVersion: ${geometryVersion}`;\r\n }\r\n\r\n /**\r\n * Forming material properties block.\r\n * @param {Object} material - given material of model\r\n * @returns {String} material properties string\r\n */\r\n _materialProperties(material) {\r\n return `Properties60: {\r\n Property: \"ShadingModel\", \"KString\", \"\", \"Lambert\"\r\n Property: \"MultiLayer\", \"bool\", \"\",0\r\n Property: \"EmissiveColor\", \"ColorRGB\", \"\",0,0,0\r\n Property: \"EmissiveFactor\", \"double\", \"\",0.0000\r\n Property: \"AmbientColor\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"AmbientFactor\", \"double\", \"\",0.0000\r\n Property: \"DiffuseColor\", \"ColorRGB\", \"\",${material.diffuse}\r\n Property: \"DiffuseFactor\", \"double\", \"\",1.0000\r\n Property: \"Bump\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TransparentColor\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"TransparencyFactor\", \"double\", \"\",0.0000\r\n Property: \"SpecularColor\", \"ColorRGB\", \"\",${material.specular}\r\n Property: \"SpecularFactor\", \"double\", \"\",1.0000\r\n Property: \"ShininessExponent\", \"double\", \"\",${material.shininess}\r\n Property: \"ReflectionColor\", \"ColorRGB\", \"\",0,0,0\r\n Property: \"ReflectionFactor\", \"double\", \"\",1\r\n Property: \"Ambient\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"Diffuse\", \"ColorRGB\", \"\",${material.diffuse}\r\n Property: \"Specular\", \"ColorRGB\", \"\",${material.specular}\r\n Property: \"Shininess\", \"double\", \"\",${material.shininess}\r\n Property: \"Opacity\", \"double\", \"\",${material.opacity}\r\n Property: \"Reflectivity\", \"double\", \"\",0\r\n }`;\r\n }\r\n}\r\n","import Exporter from './Exporter';\r\nimport FBXInfoExtractor from './fbx/FBXInfoExtractor';\r\nimport FBXResult from './fbx/FBXResult';\r\nimport ComplexVisual from '../../ComplexVisual';\r\n\r\nexport default class FBXExporter extends Exporter {\r\n constructor(source, options) {\r\n super(source, options);\r\n // Data\r\n this._data = source;\r\n this._version = options.miewVersion || '0.0-UNSPECIFIED';\r\n this._extractor = new FBXInfoExtractor();\r\n }\r\n\r\n /**\r\n * Entry point to exporter.\r\n */\r\n exportSync() {\r\n // Creating mandatory blocks\r\n const result = new FBXResult();\r\n if (!this._source) {\r\n return this._result;\r\n }\r\n\r\n const info = this._extractor.process(this._data);\r\n info.version = this._version;\r\n this._result = result.getResult(info);\r\n return this._result;\r\n }\r\n}\r\n\r\nFBXExporter.formats = ['fbx'];\r\nFBXExporter.SourceClass = ComplexVisual;\r\n","import ExporterList from './exporters/ExporterList';\r\n\r\nimport PDBExporter from './exporters/PDBExporter';\r\nimport FBXExporter from './exporters/FBXExporter';\r\n\r\nexport default new ExporterList([\r\n PDBExporter,\r\n FBXExporter,\r\n]);\r\n","import loaders from './loaders';\r\nimport parsers from './parsers';\r\nimport exporters from './exporters';\r\n\r\nexport default {\r\n loaders,\r\n parsers,\r\n exporters,\r\n};\r\n","/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nimport * as THREE from 'three';\r\nimport CSS2DObject from './CSS2DObject';\r\n\r\nconst tempColor = new THREE.Color();\r\n\r\nclass CSS2DRenderer {\r\n constructor() {\r\n this._width = 0;\r\n this._height = 0;\r\n this._widthHalf = 0;\r\n this._heightHalf = 0;\r\n\r\n this._vector = new THREE.Vector3();\r\n this._viewMatrix = new THREE.Matrix4();\r\n this._projectionMatrix = new THREE.Matrix4();\r\n\r\n this._domElement = document.createElement('div');\r\n this._domElement.style.overflow = 'hidden';\r\n this._domElement.style.position = 'absolute';\r\n this._domElement.style.top = '0';\r\n this._domElement.style.zIndex = '0'; // start a new Stacking Context to enclose all z-ordered children\r\n this._domElement.style.pointerEvents = 'none';\r\n }\r\n\r\n getElement() {\r\n return this._domElement;\r\n }\r\n\r\n reset() {\r\n const myNode = this.getElement();\r\n while (myNode.firstChild) {\r\n myNode.removeChild(myNode.firstChild);\r\n }\r\n }\r\n\r\n setSize(width, height) {\r\n this._width = width;\r\n this._height = height;\r\n\r\n this._widthHalf = this._width / 2;\r\n this._heightHalf = this._height / 2;\r\n\r\n this._domElement.style.width = `${width}px`;\r\n this._domElement.style.height = `${height}px`;\r\n }\r\n\r\n _renderObject(object, camera, scene) {\r\n function lerpColorAsHex(a, b, t) {\r\n tempColor.setHex(a);\r\n tempColor.lerp(b, t);\r\n return `#${tempColor.getHexString()}`;\r\n }\r\n\r\n function colorAsHex(a) {\r\n tempColor.setHex(a);\r\n return `#${tempColor.getHexString()}`;\r\n }\r\n\r\n if (object instanceof CSS2DObject) {\r\n this._vector.setFromMatrixPosition(object.matrixWorld);\r\n\r\n if (object.userData !== undefined && object.userData.offset !== undefined) {\r\n const localOffset = new THREE.Vector3(object.userData.offset.x, object.userData.offset.y, 0);\r\n this._vector.add(localOffset.multiplyScalar(object.matrixWorld.getMaxScaleOnAxis()));\r\n }\r\n\r\n this._vector.applyMatrix4(this._viewMatrix);\r\n\r\n const visibility = this._vector.z > -camera.near ? 'hidden' : 'visible';\r\n const zIndex = 10000 * (camera.far - (-this._vector.z)) / (camera.far - camera.near);\r\n\r\n const element = object.getElement();\r\n if (typeof scene.fog === 'undefined') {\r\n element.style.color = colorAsHex(object.userData.color);\r\n if (object.userData.background !== 'transparent') {\r\n element.style.background = colorAsHex(object.userData.background);\r\n }\r\n } else {\r\n const fogFactor = THREE.MathUtils.smoothstep(-this._vector.z, scene.fog.near, scene.fog.far);\r\n element.style.color = lerpColorAsHex(object.userData.color, scene.fog.color, fogFactor);\r\n if (object.userData.background !== 'transparent') {\r\n element.style.background = lerpColorAsHex(object.userData.background, scene.fog.color, fogFactor);\r\n }\r\n }\r\n\r\n this._vector.applyMatrix4(this._projectionMatrix);\r\n\r\n const style = `${object.userData !== {} ? object.userData.translation : 'translate(-50%, -50%) '\r\n }translate(${this._vector.x * this._widthHalf + this._widthHalf}px,${\r\n -this._vector.y * this._heightHalf + this._heightHalf}px)`;\r\n element.style.visibility = visibility;\r\n element.style.WebkitTransform = style;\r\n element.style.MozTransform = style;\r\n element.style.oTransform = style;\r\n element.style.transform = style;\r\n element.style.zIndex = Number(zIndex).toFixed(0);\r\n\r\n if (element.parentNode !== this._domElement) {\r\n this._domElement.appendChild(element);\r\n }\r\n }\r\n\r\n for (let i = 0, l = object.children.length; i < l; i++) {\r\n this._renderObject(object.children[i], camera, scene);\r\n }\r\n }\r\n\r\n render(scene, camera) {\r\n scene.updateMatrixWorld();\r\n\r\n if (camera.parent === null) {\r\n camera.updateMatrixWorld();\r\n }\r\n\r\n camera.matrixWorldInverse.copy(camera.matrixWorld).invert();\r\n\r\n this._viewMatrix.copy(camera.matrixWorldInverse);\r\n this._projectionMatrix.copy(camera.projectionMatrix);\r\n\r\n this._renderObject(scene, camera, scene);\r\n }\r\n}\r\nexport default CSS2DRenderer;\r\n","export default function getTopWindow() {\r\n // intercept the exception if we have cross-origin iframe\r\n try {\r\n if (window.top.location.href !== undefined) {\r\n return window.top;\r\n }\r\n } catch {\r\n // provide fallback\r\n }\r\n return window;\r\n}\r\n","import * as THREE from 'three';\r\nimport Timer from '../Timer';\r\nimport settings from '../settings';\r\nimport EventDispatcher from '../utils/EventDispatcher';\r\nimport getTopWindow from '../utils/getTopWindow';\r\n\r\nconst VK_LEFT = 37;\r\nconst VK_UP = 38;\r\nconst VK_RIGHT = 39;\r\nconst VK_DOWN = 40;\r\n\r\nconst STATE = {\r\n NONE: -1, ROTATE: 0, TRANSLATE: 1, SCALE: 2, TRANSLATE_PIVOT: 3,\r\n};\r\n\r\n// pausing for this amount of time before releasing mouse button prevents inertial rotation (seconds)\r\nconst FULL_STOP_THRESHOLD = 0.1;\r\n\r\nconst quaternion = new THREE.Quaternion();\r\nconst matrix4 = new THREE.Matrix4();\r\n\r\n// pivot -- local offset of the rotation pivot point\r\nfunction ObjectHandler(objects, camera, pivot, options) {\r\n this.objects = objects;\r\n [this.object] = objects;\r\n this.camera = camera;\r\n this.pivot = pivot;\r\n this.axis = new THREE.Vector3(0, 0, 1);\r\n this.options = options;\r\n\r\n this.lastRotation = {\r\n axis: new THREE.Vector3(),\r\n angle: 0.0,\r\n };\r\n}\r\n\r\nObjectHandler.prototype._rotate = (function () {\r\n const p = new THREE.Vector3();\r\n const q = new THREE.Quaternion();\r\n const s = new THREE.Vector3();\r\n\r\n const m = new THREE.Matrix4();\r\n\r\n return function (quat) {\r\n const zeroPivot = (this.pivot.x === 0.0 && this.pivot.y === 0.0 && this.pivot.z === 0.0);\r\n\r\n m.copy(this.object.matrix);\r\n\r\n if (zeroPivot) {\r\n m.multiply(matrix4.makeRotationFromQuaternion(quat));\r\n } else {\r\n m.multiply(matrix4.makeTranslation(this.pivot.x, this.pivot.y, this.pivot.z));\r\n m.multiply(matrix4.makeRotationFromQuaternion(quat));\r\n m.multiply(matrix4.makeTranslation(-this.pivot.x, -this.pivot.y, -this.pivot.z));\r\n }\r\n\r\n m.decompose(p, q, s);\r\n\r\n // update objects\r\n if (!zeroPivot) {\r\n for (let i = 0; i < this.objects.length; ++i) {\r\n this.objects[i].position.copy(p);\r\n }\r\n }\r\n\r\n for (let j = 0; j < this.objects.length; ++j) {\r\n this.objects[j].quaternion.copy(q);\r\n this.objects[j].updateMatrix();\r\n }\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.setObjects = function (objects) {\r\n this.objects = objects;\r\n [this.object] = objects;\r\n};\r\n\r\nObjectHandler.prototype.rotate = (function () {\r\n const rot = {\r\n axis: new THREE.Vector3(),\r\n angle: 0.0,\r\n };\r\n\r\n return function (quat, mousePrevPos, mouseCurPos, aboutAxis) {\r\n this.mouse2rotation(rot, mousePrevPos, mouseCurPos, aboutAxis);\r\n quat.setFromAxisAngle(rot.axis, rot.angle);\r\n\r\n if (rot.angle) {\r\n this._rotate(quat);\r\n }\r\n\r\n this.lastRotation = rot;\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.translate = (function () {\r\n const dir = new THREE.Vector3();\r\n const pivot = new THREE.Vector3();\r\n\r\n return function (delta) {\r\n // reverse-project viewport movement to view coords (compensate for screen aspect ratio)\r\n dir.set(\r\n delta.x / this.camera.projectionMatrix.elements[0],\r\n delta.y / this.camera.projectionMatrix.elements[5],\r\n 0,\r\n );\r\n let dist = dir.length();\r\n dir.normalize();\r\n\r\n // transform movement direction to object local coords\r\n dir.transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n // visible translate distance shouldn't depend on camera-to-object distance\r\n pivot.copy(this.pivot);\r\n this.object.localToWorld(pivot);\r\n dist *= Math.abs(pivot.z - this.camera.position.z);\r\n\r\n // visible translate distance shouldn't depend on object scale\r\n dist /= this.object.matrixWorld.getMaxScaleOnAxis();\r\n\r\n // all objects are translated similar to principal object\r\n // (we assume they all have identical pivot and scale)\r\n for (let i = 0; i < this.objects.length; ++i) {\r\n this.objects[i].translateOnAxis(dir, dist);\r\n }\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.update = (function () {\r\n const axis = new THREE.Vector3();\r\n\r\n return function (timeSinceLastUpdate, timeSinceMove) {\r\n if (settings.now.autoRotation !== 0.0) {\r\n // auto-rotation with constant speed\r\n\r\n // if rotation axis is fixed or hasn't been defined yet\r\n if (settings.now.autoRotationAxisFixed || this.lastRotation.axis.length() === 0.0) {\r\n // use Y-axis (transformed to local object coords)\r\n axis.set(0, 1, 0).transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n } else {\r\n // use axis defined by last user rotation\r\n axis.copy(this.lastRotation.axis);\r\n }\r\n\r\n this._rotate(quaternion.setFromAxisAngle(axis, settings.now.autoRotation * timeSinceLastUpdate));\r\n return true;\r\n }\r\n\r\n if (this.options.intertia && this.lastRotation.angle) {\r\n // inertial object rotation\r\n const angle = this.lastRotation.angle * ((1.0 - this.options.dynamicDampingFactor) ** (40.0 * timeSinceMove));\r\n\r\n if (Math.abs(angle) <= this.options.intertiaThreshold) {\r\n this.lastRotation.angle = 0.0;\r\n } else {\r\n this._rotate(quaternion.setFromAxisAngle(this.lastRotation.axis, angle));\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.stop = function () {\r\n this.lastRotation.angle = 0.0;\r\n};\r\n\r\n// calculate (axis, angle) pair from mouse/touch movement\r\nObjectHandler.prototype.mouse2rotation = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n const eye = new THREE.Vector3();\r\n const eyeDirection = new THREE.Vector3();\r\n\r\n const cameraUpDirection = new THREE.Vector3();\r\n const cameraSidewaysDirection = new THREE.Vector3();\r\n\r\n const moveDirection = new THREE.Vector3();\r\n\r\n const mouseDelta = new THREE.Vector2();\r\n\r\n return function (rot, mousePrev, mouseCur, aboutAxis) {\r\n if (aboutAxis) {\r\n rot.axis.copy(this.axis);\r\n rot.angle = this.options.axisRotateFactor * (mouseCur.y - mousePrev.y);\r\n\r\n /* cool method that allows rotation around Z axis to be \"tied\" to mouse cursor\r\n\r\n res.axis.copy(this.axis);\r\n\r\n var pivot = this.pivot.clone();\r\n this.object.localToWorld(pivot);\r\n pivot.project(this.camera);\r\n\r\n var v1 = new THREE.Vector3(mousePrev.x, mousePrev.y, this.camera.position.z);\r\n v1.sub(pivot);\r\n var v2 = new THREE.Vector3(mouseCur.x, mouseCur.y, this.camera.position.z);\r\n v2.sub(pivot);\r\n\r\n v1.sub(res.axis.clone().multiplyScalar(v1.dot(res.axis)));\r\n v2.sub(res.axis.clone().multiplyScalar(v2.dot(res.axis)));\r\n\r\n var abs = v1.length() * v2.length();\r\n if (abs > 0) {\r\n res.angle = res.axis.dot(v1.cross(v2)) / abs;\r\n }\r\n */\r\n } else {\r\n mouseDelta.subVectors(mouseCur, mousePrev);\r\n const angle = mouseDelta.length();\r\n if (angle === 0.0) {\r\n return;\r\n }\r\n\r\n center.copy(this.pivot);\r\n this.object.localToWorld(center);\r\n eye.subVectors(this.camera.position, center);\r\n eyeDirection.copy(eye).normalize();\r\n\r\n cameraUpDirection.copy(this.camera.up).normalize();\r\n cameraSidewaysDirection.crossVectors(cameraUpDirection, eyeDirection).normalize();\r\n\r\n cameraUpDirection.setLength(mouseDelta.y);\r\n cameraSidewaysDirection.setLength(mouseDelta.x);\r\n\r\n moveDirection.copy(cameraUpDirection.add(cameraSidewaysDirection));\r\n\r\n rot.axis.crossVectors(moveDirection, eye);\r\n\r\n rot.angle = -angle * this.options.rotateFactor;\r\n }\r\n\r\n rot.axis.transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n // make sure angle is always positive (thus 'axis' defines both axis and direction of rotation)\r\n if (rot.angle < 0.0) {\r\n rot.axis.negate();\r\n rot.angle = -rot.angle;\r\n }\r\n };\r\n}());\r\n\r\nfunction ObjectControls(object, objectPivot, camera, domElement, getAltObj) {\r\n EventDispatcher.call(this);\r\n const self = this;\r\n\r\n this.object = object;\r\n this.objectPivot = objectPivot;\r\n this.camera = camera;\r\n this.domElement = (typeof domElement !== 'undefined') ? domElement : document;\r\n this.getAltObj = getAltObj;\r\n\r\n // API\r\n\r\n this.enabled = true;\r\n this.hotkeysEnabled = true;\r\n\r\n this.screen = {\r\n left: 0, top: 0, width: 0, height: 0,\r\n };\r\n\r\n this.options = {\r\n rotateFactor: Math.PI, // full screen slide (along short side) would roughly mean 180 deg. rotation\r\n axisRotateFactor: 4 * Math.PI, // full screen slide (along short side) would roughly mean 720 deg. rotation\r\n intertia: true,\r\n dynamicDampingFactor: 0.1,\r\n intertiaThreshold: 1e-3,\r\n };\r\n\r\n // internals\r\n\r\n this._state = STATE.NONE;\r\n\r\n this._mousePrevPos = new THREE.Vector2();\r\n this._mouseCurPos = new THREE.Vector2();\r\n\r\n this._mainObj = new ObjectHandler([this.object], this.camera, new THREE.Vector3(0, 0, 0), this.options);\r\n this._altObj = new ObjectHandler([this.object], this.camera, new THREE.Vector3(0, 0, 0), this.options);\r\n this._affectedObj = this._mainObj;\r\n this._isAltObjFreeRotationAllowed = true;\r\n this._isTranslationAllowed = true;\r\n this._isKeysTranslatingObj = false;\r\n\r\n this._pressedKeys = [];\r\n\r\n this._clock = new Timer();\r\n this._clock.start();\r\n this._lastUpdateTime = this._clock.getElapsedTime();\r\n\r\n // events\r\n this._listeners = [\r\n {\r\n obj: self.domElement,\r\n type: 'mousedown',\r\n handler(e) {\r\n self.mousedown(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseup',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousemove',\r\n handler(e) {\r\n self.mousemove(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousewheel',\r\n handler(e) {\r\n self.mousewheel(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'DOMMouseScroll',\r\n handler(e) {\r\n self.mousewheel(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseout',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchstart',\r\n handler(e) {\r\n self.touchstartend(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchend',\r\n handler(e) {\r\n self.touchstartend(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchmove',\r\n handler(e) {\r\n self.touchmove(e);\r\n },\r\n },\r\n {\r\n obj: self.getKeyBindObject(),\r\n type: 'keydown',\r\n handler(e) {\r\n self.keydownup(e);\r\n },\r\n },\r\n {\r\n obj: self.getKeyBindObject(),\r\n type: 'keyup',\r\n handler(e) {\r\n self.keydownup(e);\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'resize',\r\n handler() {\r\n self.handleResize();\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'blur',\r\n handler() {\r\n self.resetKeys();\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'contextmenu',\r\n handler(e) {\r\n self.contextmenu(e);\r\n },\r\n }];\r\n\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.addEventListener(l.type, l.handler);\r\n }\r\n\r\n this.handleResize();\r\n\r\n this.resetKeys();\r\n\r\n // force an update at start\r\n this.update();\r\n}\r\n\r\n// methods\r\n\r\nObjectControls.prototype = Object.create(EventDispatcher.prototype);\r\nObjectControls.prototype.constructor = ObjectControls;\r\n\r\nObjectControls.prototype.resetKeys = function () {\r\n this._pressedKeys[VK_LEFT] = false;\r\n this._pressedKeys[VK_UP] = false;\r\n this._pressedKeys[VK_RIGHT] = false;\r\n this._pressedKeys[VK_DOWN] = false;\r\n};\r\n\r\nObjectControls.prototype.contextmenu = function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n};\r\n\r\nObjectControls.prototype.handleResize = function () {\r\n if (this.domElement === document) {\r\n this.screen.left = 0;\r\n this.screen.top = 0;\r\n this.screen.width = window.innerWidth;\r\n this.screen.height = window.innerHeight;\r\n } else {\r\n const box = this.domElement.getBoundingClientRect();\r\n // adjustments come from similar code in the jquery offset() function\r\n const d = this.domElement.ownerDocument.documentElement;\r\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\r\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\r\n this.screen.width = box.width;\r\n this.screen.height = box.height;\r\n }\r\n};\r\n\r\nObjectControls.prototype.enable = function (enable) {\r\n this.enabled = enable;\r\n};\r\n\r\nObjectControls.prototype.enableHotkeys = function (enable) {\r\n this.hotkeysEnabled = enable;\r\n};\r\n\r\nObjectControls.prototype.allowTranslation = function (allow) {\r\n this._isTranslationAllowed = allow;\r\n};\r\n\r\nObjectControls.prototype.allowAltObjFreeRotation = function (allow) {\r\n this._isAltObjFreeRotationAllowed = allow;\r\n};\r\n\r\nObjectControls.prototype.keysTranslateObj = function (on) {\r\n this._isKeysTranslatingObj = on;\r\n};\r\n\r\nObjectControls.prototype.isEditingAltObj = function () {\r\n return ((this._state === STATE.ROTATE) || (this._state === STATE.TRANSLATE))\r\n && (this._affectedObj === this._altObj);\r\n};\r\n\r\n// convert page coords of mouse/touch to uniform coords with smaller side being [-0.5, 0.5]\r\n// (uniform coords keep direct proportion with screen distance travelled by mouse regardless of screen aspect ratio)\r\nObjectControls.prototype.convertMouseToOnCircle = function (coords, pageX, pageY) {\r\n const screenSize = Math.min(this.screen.width, this.screen.height);\r\n\r\n if (screenSize === 0) {\r\n coords.set(0, 0);\r\n return;\r\n }\r\n\r\n coords.set(\r\n ((pageX - this.screen.width * 0.5 - this.screen.left) / screenSize),\r\n ((0.5 * this.screen.height + this.screen.top - pageY) / screenSize),\r\n );\r\n};\r\n\r\n// convert page coords of mouse/touch to viewport coords with both sides being [-1, 1]\r\n// (those are non-uniform coords affected by screen aspect ratio)\r\nObjectControls.prototype.convertMouseToViewport = function (coords, pageX, pageY) {\r\n if (this.screen.width === 0 || this.screen.height === 0) {\r\n coords.set(0, 0);\r\n return;\r\n }\r\n\r\n coords.set(\r\n (2.0 * (pageX - this.screen.width * 0.5 - this.screen.left) / this.screen.width),\r\n (2.0 * (0.5 * this.screen.height + this.screen.top - pageY) / this.screen.height),\r\n );\r\n};\r\n\r\nObjectControls.prototype.stop = function () {\r\n this._mainObj.stop();\r\n this._altObj.stop();\r\n};\r\n\r\n// rotate object based on latest mouse/touch movement\r\nObjectControls.prototype.rotateByMouse = (function () {\r\n const quat = new THREE.Quaternion();\r\n\r\n return function (aboutZAxis) {\r\n this._affectedObj.rotate(quat, this._mousePrevPos, this._mouseCurPos, aboutZAxis);\r\n this.dispatchEvent({ type: 'change', action: 'rotate', quaternion: quat });\r\n };\r\n}());\r\n\r\n// rotate object by specified quaternion\r\nObjectControls.prototype.rotate = function (quat) {\r\n this.object.quaternion.multiply(quat);\r\n this.dispatchEvent({ type: 'change', action: 'rotate', quaternion: quat });\r\n};\r\n\r\n// get object's orientation\r\nObjectControls.prototype.getOrientation = function () {\r\n return this.object.quaternion;\r\n};\r\n\r\n// set object's orientation\r\nObjectControls.prototype.setOrientation = function (quat) {\r\n this.object.quaternion.copy(quat);\r\n};\r\n\r\n// translate object based on latest mouse/touch movement\r\nObjectControls.prototype.translate = (function () {\r\n const delta = new THREE.Vector2();\r\n return function () {\r\n delta.subVectors(this._mouseCurPos, this._mousePrevPos);\r\n this._affectedObj.translate(delta);\r\n this.dispatchEvent({ type: 'change', action: 'translate' });\r\n };\r\n}());\r\n\r\n// get object scale\r\nObjectControls.prototype.getScale = function () {\r\n return this.object.scale.x;\r\n};\r\n\r\n// set uniform object scale\r\nObjectControls.prototype.setScale = function (scale) {\r\n this.object.scale.set(scale, scale, scale);\r\n};\r\n\r\n// scale object by factor (factor should be greater than zero)\r\nObjectControls.prototype.scale = function (factor) {\r\n if (factor <= 0) {\r\n return;\r\n }\r\n this.setScale(this.object.scale.x * factor);\r\n this.dispatchEvent({ type: 'change', action: 'zoom', factor });\r\n};\r\n\r\nObjectControls.prototype.update = (function () {\r\n const shift = new THREE.Vector2();\r\n\r\n return function () {\r\n const curTime = this._clock.getElapsedTime();\r\n const timeSinceLastUpdate = curTime - this._lastUpdateTime;\r\n\r\n // update object handler\r\n if (this._state === STATE.NONE) {\r\n const timeSinceMove = curTime - this._lastMouseMoveTime;\r\n if (this._mainObj.update(timeSinceLastUpdate, timeSinceMove)\r\n || this._altObj.update(timeSinceLastUpdate, timeSinceMove)) {\r\n this.dispatchEvent({ type: 'change', action: 'auto' });\r\n }\r\n }\r\n\r\n // apply arrow keys\r\n if (this._isKeysTranslatingObj) {\r\n const speedX = Number(this._pressedKeys[VK_RIGHT]) - Number(this._pressedKeys[VK_LEFT]);\r\n const speedY = Number(this._pressedKeys[VK_UP]) - Number(this._pressedKeys[VK_DOWN]);\r\n if (speedX !== 0.0 || speedY !== 0.0) {\r\n const delta = timeSinceLastUpdate;\r\n\r\n // update object translation\r\n const altObj = this.getAltObj();\r\n if (altObj.objects.length > 0) {\r\n this._altObj.setObjects(altObj.objects);\r\n this._altObj.pivot = altObj.pivot;\r\n\r\n if ('axis' in altObj) {\r\n this._altObj.axis = altObj.axis.clone();\r\n } else {\r\n this._altObj.axis.set(0, 0, 1);\r\n }\r\n\r\n shift.set(delta * speedX, delta * speedY);\r\n this._altObj.translate(shift);\r\n this.dispatchEvent({ type: 'change', action: 'translate' });\r\n }\r\n }\r\n }\r\n\r\n this._lastUpdateTime = curTime;\r\n };\r\n}());\r\n\r\nObjectControls.prototype.reset = function () {\r\n this._state = STATE.NONE;\r\n\r\n this.object.quaternion.copy(quaternion.set(0, 0, 0, 1));\r\n};\r\n\r\n// listeners\r\n\r\nObjectControls.prototype.mousedown = function (event) {\r\n if (this.enabled === false || this._state !== STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this._state === STATE.NONE) {\r\n if (event.button === 0) {\r\n this._affectedObj.stop(); // can edit only one object at a time\r\n\r\n let workWithAltObj = false;\r\n\r\n if (event.altKey) {\r\n const altObj = this.getAltObj();\r\n workWithAltObj = (altObj.objects.length > 0);\r\n if (workWithAltObj) {\r\n this._altObj.setObjects(altObj.objects);\r\n this._altObj.pivot = altObj.pivot;\r\n\r\n if ('axis' in altObj) {\r\n this._altObj.axis = altObj.axis.clone();\r\n } else {\r\n this._altObj.axis.set(0, 0, 1);\r\n }\r\n }\r\n }\r\n\r\n this._affectedObj = workWithAltObj ? this._altObj : this._mainObj;\r\n\r\n this._state = (workWithAltObj && event.ctrlKey && this._isTranslationAllowed) ? STATE.TRANSLATE : STATE.ROTATE;\r\n } else if (event.button === 2) {\r\n this._state = STATE.TRANSLATE_PIVOT;\r\n }\r\n }\r\n\r\n if (this._state === STATE.ROTATE) {\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.pageX, event.pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n }\r\n\r\n if (this._state === STATE.TRANSLATE || this._state === STATE.TRANSLATE_PIVOT) {\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n }\r\n};\r\n\r\nObjectControls.prototype.mousemove = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (this._state) {\r\n case STATE.ROTATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.pageX, event.pageY);\r\n this.rotateByMouse((event.altKey && !this._isAltObjFreeRotationAllowed) || event.shiftKey);\r\n this._lastMouseMoveTime = this._clock.getElapsedTime();\r\n break;\r\n\r\n case STATE.TRANSLATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this.translate();\r\n break;\r\n\r\n case STATE.TRANSLATE_PIVOT:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this.translatePivotByMouse();\r\n break;\r\n\r\n default: break;\r\n }\r\n};\r\n\r\nObjectControls.prototype.mousewheel = function (event) {\r\n if (this.enabled === false || !settings.now.zooming || this._state !== STATE.NONE || event.shiftKey) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n let delta = 0;\r\n\r\n if (event.wheelDelta) {\r\n // WebKit / Opera / Explorer 9\r\n delta = event.wheelDelta / 40;\r\n } else if (event.detail) {\r\n // Firefox\r\n delta = -event.detail / 3;\r\n }\r\n\r\n let factor = 1.0 + delta * 0.05;\r\n factor = Math.max(factor, 0.01);\r\n this.scale(factor);\r\n};\r\n\r\nObjectControls.prototype.mouseup = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this._state = STATE.NONE;\r\n\r\n if (this._clock.getElapsedTime() - this._lastMouseMoveTime > FULL_STOP_THRESHOLD) {\r\n this._affectedObj.stop();\r\n }\r\n};\r\n\r\nObjectControls.prototype.touchstartend = function (event) {\r\n if (this.enabled === false) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (event.touches.length) {\r\n case 1:\r\n this._state = STATE.ROTATE;\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.touches[0].pageX, event.touches[0].pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n break;\r\n\r\n case 2: {\r\n // prevent inertial rotation\r\n this._mainObj.stop();\r\n this._altObj.stop();\r\n\r\n this._state = STATE.SCALE;\r\n const dx = event.touches[0].pageX - event.touches[1].pageX;\r\n const dy = event.touches[0].pageY - event.touches[1].pageY;\r\n this._touchDistanceCur = this._touchDistanceStart = Math.sqrt(dx * dx + dy * dy);\r\n this._scaleStart = this.object.scale.x;\r\n break;\r\n }\r\n\r\n default:\r\n this._state = STATE.NONE;\r\n }\r\n};\r\n\r\nObjectControls.prototype.touchmove = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (this._state) {\r\n case STATE.ROTATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.touches[0].pageX, event.touches[0].pageY);\r\n this.rotateByMouse(false);\r\n\r\n this._lastMouseMoveTime = this._clock.getElapsedTime();\r\n break;\r\n\r\n case STATE.SCALE:\r\n if (settings.now.zooming) {\r\n // update scale\r\n const dx = event.touches[0].pageX - event.touches[1].pageX;\r\n const dy = event.touches[0].pageY - event.touches[1].pageY;\r\n this._touchDistanceCur = Math.sqrt(dx * dx + dy * dy);\r\n const newScale = this._scaleStart * this._touchDistanceCur / this._touchDistanceStart;\r\n const factor = newScale / this.object.scale.x;\r\n this.scale(factor);\r\n }\r\n break;\r\n\r\n default:\r\n }\r\n};\r\n\r\nObjectControls.prototype.keydownup = function (event) {\r\n if (this.enabled === false || this.hotkeysEnabled === false) {\r\n return;\r\n }\r\n\r\n switch (event.keyCode) {\r\n case VK_LEFT:\r\n case VK_UP:\r\n case VK_RIGHT:\r\n case VK_DOWN:\r\n this._pressedKeys[event.keyCode] = (event.type === 'keydown');\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n default:\r\n }\r\n};\r\n\r\nObjectControls.prototype.getKeyBindObject = function () {\r\n return getTopWindow();\r\n};\r\n\r\nObjectControls.prototype.dispose = function () {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.removeEventListener(l.type, l.handler);\r\n }\r\n};\r\n\r\nObjectControls.prototype.translatePivotByMouse = (function () {\r\n const delta = new THREE.Vector2();\r\n return function () {\r\n delta.subVectors(this._mouseCurPos, this._mousePrevPos);\r\n this.translatePivotInWorld(settings.now.translationSpeed * delta.x, settings.now.translationSpeed * delta.y, 0);\r\n };\r\n}());\r\n\r\n// Translate in WorldCS, translation is scaled with root scale matrix\r\nObjectControls.prototype.translatePivotInWorld = function (x, y, z) {\r\n const pos = this.objectPivot.position;\r\n pos.applyMatrix4(this.object.matrixWorld);\r\n pos.setX(pos.x + x);\r\n pos.setY(pos.y + y);\r\n pos.setZ(pos.z + z);\r\n pos.applyMatrix4(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\n// Translate in ModelCS, x, y, z are Ang\r\nObjectControls.prototype.translatePivot = function (x, y, z) {\r\n const pos = this.objectPivot.position;\r\n pos.setX(pos.x + x);\r\n pos.setY(pos.y + y);\r\n pos.setZ(pos.z + z);\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\n// Set pivot\r\nObjectControls.prototype.setPivot = function (newPivot) {\r\n this.objectPivot.position.copy(newPivot);\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\nexport default ObjectControls;\r\n","import * as THREE from 'three';\r\nimport settings from '../settings';\r\nimport Timer from '../Timer';\r\nimport EventDispatcher from '../utils/EventDispatcher';\r\n\r\nfunction Picker(gfxObj, camera, domElement) {\r\n EventDispatcher.call(this);\r\n const self = this;\r\n\r\n this.gfxObj = gfxObj;\r\n this.camera = camera;\r\n this.domElement = (typeof domElement !== 'undefined') ? domElement : document;\r\n this.screen = {\r\n left: 0, top: 0, width: 0, height: 0,\r\n };\r\n this._lastMousePos = new THREE.Vector2(0, 0);\r\n this._mouseTotalDist = 0.0;\r\n this._lastClickBeginTime = -1000.0;\r\n this._lastClickPos = new THREE.Vector2(0, 0);\r\n this._clickBeginTime = 0.0;\r\n\r\n this._clock = new Timer();\r\n this._clock.start();\r\n\r\n this._listeners = [\r\n {\r\n obj: self.domElement,\r\n type: 'mousedown',\r\n handler(e) {\r\n self.mousedown(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseup',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousemove',\r\n handler(e) {\r\n self.mousemove(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchstart',\r\n handler(e) {\r\n self.touchstart(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchend',\r\n handler(e) {\r\n self.touchend(e);\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'resize',\r\n handler() {\r\n self.handleResize();\r\n },\r\n }];\r\n\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.addEventListener(l.type, l.handler);\r\n }\r\n\r\n this.handleResize();\r\n}\r\n\r\nPicker.prototype = Object.create(EventDispatcher.prototype);\r\nPicker.prototype.constructor = Picker;\r\n\r\nPicker.prototype.reset = function () {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n};\r\n\r\nPicker.prototype.handleResize = function () {\r\n if (this.domElement === document) {\r\n this.screen.left = 0;\r\n this.screen.top = 0;\r\n this.screen.width = window.innerWidth;\r\n this.screen.height = window.innerHeight;\r\n } else {\r\n const box = this.domElement.getBoundingClientRect();\r\n // adjustments come from similar code in the jquery offset() function\r\n const d = this.domElement.ownerDocument.documentElement;\r\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\r\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\r\n this.screen.width = box.width;\r\n this.screen.height = box.height;\r\n }\r\n};\r\n\r\nPicker.prototype.pickObject = function (screenPos) {\r\n if (!this.gfxObj) {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n return;\r\n }\r\n\r\n const { gfxObj } = this;\r\n const rayCaster = new THREE.Raycaster();\r\n rayCaster.ray.origin.setFromMatrixPosition(this.camera.matrixWorld);\r\n rayCaster.ray.direction.set(screenPos.x, screenPos.y, 0.5).unproject(this.camera).sub(rayCaster.ray.origin).normalize();\r\n\r\n const clipPlane = (settings.now.draft.clipPlane && this.clipPlaneValue) ? this.clipPlaneValue : Infinity;\r\n const fogFarPlane = (settings.now.fog && this.fogFarValue) ? this.fogFarValue : Infinity;\r\n const point = rayCaster.intersectVisibleObject(gfxObj, this.camera, clipPlane, fogFarPlane);\r\n if (!point) {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n return;\r\n }\r\n\r\n let picked = {};\r\n if (point.residue || point.atom) {\r\n const residue = point.residue || point.atom.residue;\r\n if (settings.now.pick === 'chain') {\r\n picked = { chain: residue.getChain() };\r\n } else if (settings.now.pick === 'molecule') {\r\n picked = { molecule: residue.getMolecule() };\r\n } else if (point.residue || settings.now.pick === 'residue') {\r\n picked = { residue };\r\n } else if (point.atom) {\r\n picked = { atom: point.atom };\r\n }\r\n }\r\n this.picked = picked;\r\n this.dispatchEvent({ type: 'newpick', obj: picked });\r\n};\r\n\r\nPicker.prototype.getMouseInViewport = function (pageX, pageY) {\r\n return new THREE.Vector2(\r\n (pageX - this.screen.left) / this.screen.width * 2 - 1,\r\n -(pageY - this.screen.top) / this.screen.height * 2 + 1,\r\n );\r\n};\r\n\r\nPicker.prototype.mousedown = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.button === 0) {\r\n this._lastMousePos = this.getMouseInViewport(event.pageX, event.pageY);\r\n this._mouseTotalDist = 0.0;\r\n this._clickBeginTime = this._clock.getElapsedTime();\r\n }\r\n};\r\n\r\nPicker.prototype.mousemove = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const pos = this.getMouseInViewport(event.pageX, event.pageY);\r\n this._mouseTotalDist += pos.sub(this._lastMousePos).length();\r\n};\r\n\r\nPicker.prototype.mouseup = function (event) {\r\n const self = this;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.button === 0) {\r\n if (this._mouseTotalDist < 0.01) {\r\n const curTime = this._clock.getElapsedTime();\r\n const curPos = this.getMouseInViewport(event.pageX, event.pageY);\r\n\r\n const timeSinceLastClickBegin = curTime - this._lastClickBeginTime;\r\n if (timeSinceLastClickBegin < 0.7) {\r\n const clickDist = new THREE.Vector2().subVectors(curPos, this._lastClickPos);\r\n if (clickDist.length() < 0.01) {\r\n // it's a double click\r\n this.dispatchEvent({ type: 'dblclick', obj: this.picked });\r\n\r\n this._lastClickPos = curPos;\r\n this._lastClickBeginTime = -1000; // this click cannot serve as first click in double-click\r\n return;\r\n }\r\n }\r\n\r\n setTimeout(() => {\r\n self.pickObject(curPos);\r\n }, 0);\r\n\r\n this._lastClickPos = curPos;\r\n this._lastClickBeginTime = this._clickBeginTime;\r\n }\r\n }\r\n};\r\n\r\nPicker.prototype.touchstart = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.touches.length === 1) {\r\n this._lastTouchdownPos = this.getMouseInViewport(event.touches[0].pageX, event.touches[0].pageY);\r\n }\r\n};\r\n\r\nPicker.prototype.touchend = function (event) {\r\n const self = this;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.touches.length === 0\r\n && event.changedTouches.length === 1) {\r\n const pos = this.getMouseInViewport(event.changedTouches[0].pageX, event.changedTouches[0].pageY);\r\n const dist = pos.sub(this._lastTouchdownPos).length();\r\n if (dist < 0.01) {\r\n setTimeout(() => {\r\n self.pickObject(self._lastTouchdownPos);\r\n }, 0);\r\n }\r\n }\r\n};\r\n\r\nPicker.prototype.dispose = function () {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.removeEventListener(l.type, l.handler);\r\n }\r\n};\r\n\r\nexport default Picker;\r\n","import * as THREE from 'three';\r\n\r\nclass Axes {\r\n constructor(target, targetCamera) {\r\n this._target = target;\r\n this._targetCamera = targetCamera;\r\n this._camera = new THREE.PerspectiveCamera(targetCamera.fov, targetCamera.aspect, 1, 100);\r\n this._object = new THREE.AxesHelper(1);\r\n this._scene = new THREE.Scene();\r\n this._scene.add(this._object);\r\n this._full = new THREE.Vector2();\r\n\r\n this._update();\r\n }\r\n\r\n _update() {\r\n const { fov } = this._targetCamera;\r\n const camera = this._camera;\r\n camera.aspect = this._targetCamera.aspect;\r\n camera.setMinimalFov(fov);\r\n camera.setDistanceToFit(1.0, fov);\r\n camera.updateProjectionMatrix();\r\n\r\n this._object.quaternion.copy(this._target.quaternion);\r\n }\r\n\r\n render(renderer) {\r\n this._update();\r\n\r\n renderer.getSize(this._full);\r\n const width = this._full.width * 0.25;\r\n const height = this._full.height * 0.25;\r\n\r\n const { autoClear } = renderer;\r\n renderer.autoClear = false;\r\n renderer.setViewport(0.0, 0.0, width, height);\r\n renderer.clear(false, true, false);\r\n renderer.render(this._scene, this._camera);\r\n renderer.setViewport(0, 0, this._full.width, this._full.height);\r\n renderer.autoClear = autoClear;\r\n }\r\n}\r\nexport default Axes;\r\n","import * as THREE from 'three';\r\nimport SecondaryStructureColorer from './colorers/SecondaryStructureColorer';\r\n\r\nconst cDataOffset = 12;\r\nconst cFirstMask = 0x0FFFFF00;\r\nconst cFirstShift = 8;\r\nconst cSecMask1 = 0x000000FF;\r\nconst cSecShift1 = 12;\r\nconst cSecMask2 = 0xFFF00000;\r\nconst cSecShift2 = 20;\r\nconst cThirdMask = 0x000FFFFF;\r\nconst cStrMask = 0xF0000000;\r\nconst cStrShift = 28;\r\nconst c219 = 1 << 19;\r\nconst c220 = 1 << 20;\r\n\r\nconst cHelixIdx = 1;\r\nconst cSheetIdx = 2;\r\nconst secTypes = ['helix', 'strand'];\r\nconst cSecNames = ['fs', 'ps', 'ns', 'us'];\r\n\r\nfunction _createSecondary(strArray, complex) {\r\n const residues = complex._residues;\r\n const nRes = residues.length;\r\n const resid = new Uint8Array(nRes);\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, n = strArray.length; i < n; ++i) {\r\n const atom = atoms[i];\r\n resid[atom.residue._index] = strArray[i];\r\n }\r\n\r\n const secondary = [];\r\n let rIdx = 0;\r\n while (rIdx < nRes) {\r\n if (resid[rIdx] !== 0) {\r\n const start = rIdx;\r\n const val = resid[rIdx];\r\n while (rIdx < nRes - 1 && resid[rIdx + 1] === val\r\n && residues[rIdx].isConnected(residues[rIdx + 1])) {\r\n ++rIdx;\r\n }\r\n secondary.push({ start, end: rIdx, type: secTypes[val - 1] });\r\n }\r\n ++rIdx;\r\n }\r\n return secondary;\r\n}\r\n\r\nfunction fromUInt20ToInt20(uint20) {\r\n return uint20 >= c219 ? uint20 - c220 : uint20;\r\n}\r\n\r\nclass FrameInfo {\r\n constructor(complex, payload, callbacks) {\r\n this._complex = complex;\r\n this._secondary = null;\r\n this.isLoading = false;\r\n this._framesRange = {\r\n start: 0,\r\n end: -1,\r\n };\r\n this.frameIsReady = false;\r\n this._buffer = null;\r\n this._frameRequest = null;\r\n this._callbacks = callbacks;\r\n if (typeof payload === 'function') {\r\n this._framesRequestLength = 1;\r\n this._downloadDataFn = payload;\r\n } else {\r\n this.parseBinaryData(payload, true);\r\n }\r\n this.reset();\r\n this.setFrame(0);\r\n }\r\n\r\n _prepareBuffer(framesStart, framesEnd) {\r\n if (framesStart === undefined || framesStart === null) {\r\n framesStart = 0;\r\n }\r\n if (framesEnd === undefined || framesEnd === null) {\r\n framesEnd = framesStart + this._framesRequestLength;\r\n }\r\n if (this._framesCount !== undefined) {\r\n framesEnd = Math.min(this._framesCount - 1, framesEnd);\r\n }\r\n if (this._downloadDataFn) {\r\n const self = this;\r\n const onDone = function (data) {\r\n self.isLoading = false;\r\n if (self._callbacks && typeof self._callbacks.onLoadStatusChanged === 'function') {\r\n self._callbacks.onLoadStatusChanged();\r\n }\r\n self._buffer = {\r\n data,\r\n state: 'ready',\r\n start: framesStart,\r\n end: framesEnd,\r\n };\r\n if (self._frameRequest !== null) {\r\n const idx = self._frameRequest;\r\n self._frameRequest = null;\r\n self.setFrame(idx);\r\n }\r\n };\r\n const onFail = function () {\r\n self.isLoading = false;\r\n if (self._callbacks && typeof self._callbacks.onError === 'function') {\r\n self._callbacks.onError('Streaming failed');\r\n }\r\n };\r\n if (!this._buffer) {\r\n this._buffer = {};\r\n }\r\n this._buffer.state = 'downloading';\r\n this.isLoading = true;\r\n if (self._callbacks && typeof self._callbacks.onLoadStatusChanged === 'function') {\r\n self._callbacks.onLoadStatusChanged();\r\n }\r\n this._downloadDataFn({ start: framesStart, end: framesEnd + 1 }, onDone, onFail);\r\n }\r\n }\r\n\r\n _parseBuffer() {\r\n if (this._buffer && this._buffer.state === 'ready') {\r\n this._framesRange = {\r\n start: this._buffer.start,\r\n end: this._buffer.end,\r\n };\r\n this.parseBinaryData(this._buffer.data, false);\r\n let _bufferRequestStart = (this._buffer.end + 1) % this._framesCount;\r\n if (_bufferRequestStart >= this._framesCount) {\r\n _bufferRequestStart = 0;\r\n }\r\n this._buffer = {\r\n state: 'none',\r\n };\r\n this._prepareBuffer(_bufferRequestStart, _bufferRequestStart + this._framesRequestLength);\r\n if (this._frameRequest !== null) {\r\n const idx = this._frameRequest;\r\n this._frameRequest = null;\r\n this.setFrame(idx);\r\n }\r\n }\r\n }\r\n\r\n parseBinaryData(arrayBuffer) {\r\n const dataView = new DataView(arrayBuffer);\r\n let offset = 0;\r\n const atomsCount = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const framesCount = dataView.getUint32(offset, true);\r\n this._framesCount = framesCount;\r\n this._framesRange.end = this._framesRange.end > 0\r\n ? Math.min(this._framesRange.end, framesCount - 1) : framesCount - 1;\r\n offset += 4;\r\n this._atomsCount = atomsCount;\r\n const maxSize = 1024 * 1024; // 1 MB\r\n this._framesRequestLength = Math.ceil(maxSize / (atomsCount * 8));\r\n const chunkedFramesCount = this._framesRange.end - this._framesRange.start + 1;\r\n if (atomsCount !== this._complex._atoms.length\r\n || arrayBuffer.byteLength !== cDataOffset + chunkedFramesCount * atomsCount * 8) {\r\n throw new Error();\r\n }\r\n const complex = this._complex;\r\n let timeStep = dataView.getUint32(offset, true);\r\n let iName = 0;\r\n while (timeStep > 1000 && iName < cSecNames.length - 1) {\r\n timeStep /= 1000;\r\n ++iName;\r\n }\r\n\r\n this._timeStep = `${timeStep.toString()} ${cSecNames[iName]}`;\r\n offset += 4;\r\n const secondary = [];\r\n const posData = new Float32Array(chunkedFramesCount * atomsCount * 3);\r\n let coordIdx = 0;\r\n const secondaryArr = new Int8Array(atomsCount);\r\n for (let j = 0; j < chunkedFramesCount; ++j) {\r\n for (let i = 0; i < atomsCount; ++i) {\r\n const hiWord = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const loWord = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const str = (loWord & cStrMask) >>> cStrShift;\r\n const x = fromUInt20ToInt20(((loWord & cFirstMask) >>> cFirstShift) >> 0);\r\n const y = fromUInt20ToInt20((((loWord & cSecMask1) << cSecShift1)\r\n | ((hiWord & cSecMask2) >>> cSecShift2)) >> 0);\r\n const z = fromUInt20ToInt20((hiWord & cThirdMask) >> 0);\r\n secondaryArr[i] = 0;\r\n if (str > 0 && str < 4) {\r\n secondaryArr[i] = cHelixIdx;\r\n } else if (str === 4) {\r\n secondaryArr[i] = cSheetIdx;\r\n }\r\n posData[coordIdx++] = x / 100;\r\n posData[coordIdx++] = y / 100;\r\n posData[coordIdx++] = z / 100;\r\n }\r\n secondary.push(_createSecondary(secondaryArr, complex));\r\n }\r\n this._secondaryData = secondary;\r\n this._data = posData;\r\n }\r\n\r\n nextFrame() {\r\n this.setFrame((this._currFrame + 1) % this._framesCount);\r\n }\r\n\r\n needsColorUpdate(colorer) {\r\n return colorer instanceof SecondaryStructureColorer;\r\n }\r\n\r\n getAtomColor(colorer, atom) {\r\n return colorer.getResidueColor(this._residues[atom.residue._index], this._complex);\r\n }\r\n\r\n getResidueColor(colorer, residue) {\r\n return colorer.getResidueColor(this._residues[residue._index], this._complex);\r\n }\r\n\r\n _updateSecondary() {\r\n let i;\r\n const myResidues = this._residues;\r\n let n = myResidues.length;\r\n for (i = 0; i < n; ++i) {\r\n myResidues[i]._secondary = null;\r\n }\r\n const sec = this._secondaryData[this._currFrame - this._framesRange.start];\r\n for (i = 0, n = sec.length; i < n; ++i) {\r\n const oldSec = sec[i];\r\n const { start, end } = oldSec;\r\n const nSec = {\r\n _start: myResidues[start],\r\n _end: myResidues[end],\r\n type: oldSec.type,\r\n generic: oldSec.generic,\r\n };\r\n for (let j = start; j <= end; ++j) {\r\n myResidues[j]._secondary = nSec;\r\n }\r\n }\r\n }\r\n\r\n reset() {\r\n const compRes = this._complex._residues;\r\n const n = compRes.length;\r\n this._residues = new Array(n);\r\n const myResidues = this._residues;\r\n const getSec = function () {\r\n return this._secondary;\r\n };\r\n for (let i = 0; i < n; ++i) {\r\n myResidues[i] = {\r\n _type: compRes[i]._type,\r\n _isValid: compRes[i]._isValid,\r\n _controlPoint: null,\r\n _wingVector: null,\r\n _secondary: null,\r\n getSecondary: getSec,\r\n };\r\n }\r\n }\r\n\r\n setFrame(frameIdx) {\r\n this.frameIsReady = false;\r\n if (frameIdx >= this._framesRange.start && frameIdx <= this._framesRange.end) {\r\n this._currFrame = frameIdx;\r\n this._cachedResidues = false;\r\n this._updateSecondary();\r\n this.frameIsReady = true;\r\n } else {\r\n this._frameRequest = frameIdx;\r\n if (!this._buffer) {\r\n this._prepareBuffer(frameIdx);\r\n } else {\r\n const self = this;\r\n switch (this._buffer.state) {\r\n case 'none':\r\n this._prepareBuffer(frameIdx);\r\n break;\r\n case 'ready':\r\n self._parseBuffer();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n disableEvents() {\r\n this._callbacks = null;\r\n }\r\n\r\n /**\r\n * Returns link to atom pos vector, clone it if needed\r\n */\r\n\r\n static _vec = new THREE.Vector3();\r\n\r\n getAtomPos(atomIdx) {\r\n const vec = FrameInfo._vec;\r\n const self = this;\r\n const data = self._data;\r\n const idx = (self._atomsCount * (self._currFrame - self._framesRange.start) + atomIdx) * 3;\r\n vec.set(data[idx], data[idx + 1], data[idx + 2]);\r\n return vec;\r\n }\r\n\r\n getResidues() {\r\n if (this._cachedResidues) {\r\n return this._residues;\r\n }\r\n this._complex.updateToFrame(this);\r\n return this._residues;\r\n }\r\n}\r\nexport default FrameInfo;\r\n","import _ from 'lodash';\r\nimport settings from '../../settings';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\n\r\n/**\r\n * Create new scene object.\r\n *\r\n * @param {array=} params - Object required params.\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the colorer after its creation.\r\n *\r\n * @exports SceneObject\r\n * @this SceneObject\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all scene objects that are not reps.\r\n */\r\nclass SceneObject {\r\n constructor(params, opts) {\r\n if (this.constructor === SceneObject) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Object's options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.params = params;\r\n this.opts = _.merge(utils.deriveDeep(settings.now.objects[this.type], true), opts);\r\n this.needsRebuild = false;\r\n this._mesh = null;\r\n this.id = null;\r\n }\r\n\r\n /**\r\n * Get object identification, probably with options.\r\n * @returns {Object} field type contains type information, params - object's formal parameters,\r\n * opts - changed options\r\n * Options are returned if they were changed during or after object creation.\r\n */\r\n identify() {\r\n const result = {\r\n type: this.type,\r\n params: this.params,\r\n };\r\n const diff = utils.objectsDiff(this.opts, settings.now.modes[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n result.opts = diff;\r\n }\r\n return result;\r\n }\r\n\r\n toString() {\r\n const paramsStr = `o=${this.type},${this.params.join(',')}`;\r\n const optsStr = utils.compareOptionsWithDefaults(this.opts, settings.defaults.objects[this.type]);\r\n return paramsStr + optsStr;\r\n }\r\n\r\n getGeometry() {\r\n return this._mesh;\r\n }\r\n\r\n destroy() {\r\n if (this._mesh) {\r\n gfxutils.destroyObject(this._mesh);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Scene object identifier.\r\n * @type {string}\r\n */\r\nSceneObject.prototype.type = '__';\r\n\r\nexport default SceneObject;\r\n","import * as THREE from 'three';\r\nimport SceneObject from './SceneObject';\r\nimport meshutils from '../meshutils';\r\nimport UberMaterial from '../shaders/UberMaterial';\r\nimport meshes from '../meshes/meshes';\r\nimport settings from '../../settings';\r\n\r\nclass LinesObj extends SceneObject {\r\n constructor(params, opts) {\r\n super(params, opts);\r\n if (params.length < 2) {\r\n throw new Error('Wrong number of argumets on line object creation!');\r\n }\r\n [this._id1, this._id2] = params;\r\n }\r\n\r\n _getAtomFromName(complex, atomId) {\r\n const err = ' - Wrong atom format it must be \\'#CHAIN_NAME.#RESIDUE_NUMBER.#ATOM_NAME\\' (e.g. \\'A.38.CO1\\')';\r\n const atom1 = complex.getAtomByFullname(atomId);\r\n if (!atom1) {\r\n throw new Error(atomId + err);\r\n }\r\n return atom1;\r\n }\r\n\r\n build(complex) {\r\n const geom = new THREE.BufferGeometry();\r\n this._atom1 = this._getAtomFromName(complex, this._id1);\r\n this._atom2 = this._getAtomFromName(complex, this._id2);\r\n\r\n const p1 = this._atom1.position;\r\n const p2 = this._atom2.position;\r\n const vertices = new Float32Array([\r\n p1.x, p1.y, p1.z,\r\n p2.x, p2.y, p2.z,\r\n ]);\r\n\r\n geom.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n geom.computeBoundingBox();\r\n\r\n this._line = new meshes.Line(geom, new UberMaterial({\r\n lights: false,\r\n overrideColor: true,\r\n dashedLine: true,\r\n fogTransparent: settings.now.bg.transparent,\r\n }));\r\n this._line.computeLineDistances();\r\n this._line.material.setUberOptions({\r\n fixedColor: new THREE.Color(this.opts.color),\r\n dashedLineSize: this.opts.dashSize,\r\n dashedLinePeriod: this.opts.dashSize + this.opts.gapSize,\r\n });\r\n this._line.material.updateUniforms();\r\n\r\n this._line.raycast = function (_raycaster, _intersects) {};\r\n this._mesh = this._line;\r\n const transforms = complex.getTransforms();\r\n if (transforms.length > 0) {\r\n this._mesh = new THREE.Group();\r\n this._mesh.add(this._line);\r\n meshutils.applyTransformsToMeshes(this._mesh, transforms);\r\n }\r\n }\r\n\r\n updateToFrame(frameData) {\r\n if (!this._atom1 || !this._atom2 || !this._line) {\r\n return;\r\n }\r\n\r\n const geo = this._line.geometry;\r\n geo.vertices[0].copy(frameData.getAtomPos(this._atom1.index));\r\n geo.vertices[1].copy(frameData.getAtomPos(this._atom2.index));\r\n this._line.computeLineDistances();\r\n geo.computeBoundingSphere();\r\n\r\n geo.verticesNeedUpdate = true;\r\n }\r\n}\r\n\r\nLinesObj.prototype.constructor = LinesObj;\r\nLinesObj.prototype.type = 'line';\r\n\r\nexport default LinesObj;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './Outline.frag';\r\n\r\nclass OutlineMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n // add depth outline\r\n super(params);\r\n\r\n const settings = {\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n srcDepthTex: { type: 't', value: null },\r\n srcTexSize: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n color: { type: 'v3', value: null },\r\n threshold: { type: 'f', value: null },\r\n opacity: { type: 'f', value: 1.0 },\r\n thickness: { type: 'v2', value: new THREE.Vector2(1, 1) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: true,\r\n depthTest: false,\r\n depthWrite: false,\r\n };\r\n\r\n this.setValues(settings);\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n this.depth = source.depth;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n const defines = {};\r\n\r\n if (this.depth) {\r\n defines.DEPTH_OUTLINE = 1;\r\n }\r\n\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nOutlineMaterial.prototype.depth = false;\r\n\r\nexport default OutlineMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './FXAA.frag';\r\n\r\nclass FXAAMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n bgColor: { type: 'c', value: new THREE.Color(0xffffff) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n this.depth = source.depth;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n\r\n if (this.bgTransparent) {\r\n defines.BG_TRANSPARENT = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nFXAAMaterial.prototype.bgTransparent = false;\r\n\r\nexport default FXAAMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AO.frag';\r\nimport noise from '../noiseTexture';\r\n\r\nconst _samplesKernel = [\r\n // hemisphere samples adopted to sphere\r\n new THREE.Vector3(0.295184, 0.077723, 0.068429),\r\n new THREE.Vector3(-0.271976, -0.365221, 0.838363),\r\n new THREE.Vector3(0.547713, 0.467576, 0.488515),\r\n new THREE.Vector3(0.662808, -0.031733, 0.584758),\r\n new THREE.Vector3(-0.025717, 0.218955, 0.657094),\r\n new THREE.Vector3(-0.310153, -0.365223, 0.370701),\r\n new THREE.Vector3(-0.101407, -0.006313, 0.747665),\r\n new THREE.Vector3(-0.769138, 0.360399, 0.086847),\r\n new THREE.Vector3(-0.271988, -0.275140, 0.905353),\r\n new THREE.Vector3(0.096740, -0.566901, 0.700151),\r\n new THREE.Vector3(0.562872, -0.735136, 0.094647),\r\n new THREE.Vector3(0.379877, 0.359278, 0.190061),\r\n new THREE.Vector3(0.519064, -0.023055, 0.405068),\r\n new THREE.Vector3(-0.301036, 0.114696, 0.088885),\r\n new THREE.Vector3(-0.282922, 0.598305, 0.487214),\r\n new THREE.Vector3(-0.181859, 0.251670, 0.679702),\r\n new THREE.Vector3(-0.191463, -0.635818, 0.512919),\r\n new THREE.Vector3(-0.293655, 0.427423, 0.078921),\r\n new THREE.Vector3(-0.267983, 0.680534, 0.132880),\r\n new THREE.Vector3(0.139611, 0.319637, 0.477439),\r\n new THREE.Vector3(-0.352086, 0.311040, 0.653913),\r\n new THREE.Vector3(0.321032, 0.805279, 0.487345),\r\n new THREE.Vector3(0.073516, 0.820734, 0.414183),\r\n new THREE.Vector3(-0.155324, 0.589983, 0.411460),\r\n new THREE.Vector3(0.335976, 0.170782, 0.527627),\r\n new THREE.Vector3(0.463460, -0.355658, 0.167689),\r\n new THREE.Vector3(0.222654, 0.596550, 0.769406),\r\n new THREE.Vector3(0.922138, -0.042070, 0.147555),\r\n new THREE.Vector3(-0.727050, -0.329192, 0.369826),\r\n new THREE.Vector3(-0.090731, 0.533820, 0.463767),\r\n new THREE.Vector3(-0.323457, -0.876559, 0.238524),\r\n new THREE.Vector3(-0.663277, -0.372384, 0.342856),\r\n];\r\n\r\nclass AOMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n noiseTexture: { type: 't', value: noise.noiseTexture },\r\n noiseTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / noise.noiseWidth, 1.0 / noise.noiseHeight) },\r\n diffuseTexture: { type: 't', value: null },\r\n normalTexture: { type: 't', value: null },\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n camNearFar: { type: 'v2', value: new THREE.Vector2(1.0, 10.0) },\r\n projMatrix: { type: 'mat4', value: new THREE.Matrix4() },\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n samplesKernel: { type: 'v3v', value: _samplesKernel },\r\n kernelRadius: { type: 'f', value: 1.0 },\r\n depthThreshold: { type: 'f', value: 1.0 },\r\n factor: { type: 'f', value: 1.0 },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n }\r\n}\r\n\r\nexport default AOMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AOHorBlur.frag';\r\n\r\nconst _kernelOffsets = [-2.0, -1.0, 0.0, 1.0, 2.0];\r\n\r\nclass AOHorBlurMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n aoMap: { type: 't', value: null },\r\n samplesOffsets: { type: 'fv1', value: _kernelOffsets },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n }\r\n}\r\n\r\nexport default AOHorBlurMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AOVertBlurWithBlend.frag';\r\n\r\nconst _kernelOffsets = [-2.0, -1.0, 0.0, 1.0, 2.0];\r\n\r\nclass AOVertBlurWithBlendMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n diffuseTexture: { type: 't', value: null },\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n aoMap: { type: 't', value: null },\r\n samplesOffsets: { type: 'fv1', value: _kernelOffsets },\r\n projMatrix: { type: 'mat4', value: new THREE.Matrix4() },\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n fogNearFar: { type: 'v2', value: new THREE.Vector2(100.0, 100.0) },\r\n fogColor: { type: 'v4', value: new THREE.Vector4(0.0, 0.5, 0.0, 1.0) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n\r\n if (this.useFog) {\r\n defines.USE_FOG = 1;\r\n }\r\n if (this.fogTransparent) {\r\n defines.FOG_TRANSPARENT = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nAOVertBlurWithBlendMaterial.prototype.useFog = true;\r\nAOVertBlurWithBlendMaterial.prototype.fogTransparent = false;\r\n\r\nexport default AOVertBlurWithBlendMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './Anaglyph.frag';\r\n\r\nclass AnaglyphMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n const settings = {\r\n uniforms: {\r\n srcL: { type: 't', value: null },\r\n srcR: { type: 't', value: null },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n };\r\n this.setValues(settings);\r\n }\r\n}\r\n\r\nexport default AnaglyphMaterial;\r\n","import * as THREE from 'three';\r\nimport settings from '../settings';\r\n\r\nclass View {\r\n constructor() {\r\n this.position = new THREE.Vector3(0, 0, 0);\r\n this.scale = 1;\r\n this.orientation = new THREE.Quaternion(0, 0, 0, 1);\r\n }\r\n\r\n set(position, scale, orientation) {\r\n this.position = position;\r\n this.scale = scale;\r\n this.orientation = orientation;\r\n }\r\n}\r\n\r\nconst _transitionTime = 1.5; // in seconds\r\n\r\nexport default class ViewInterpolator {\r\n setup(startView, endView) {\r\n this._startTime = undefined;\r\n this._endTime = undefined;\r\n this._isPaused = false;\r\n\r\n this._srcView = startView;\r\n this._dstView = endView;\r\n this._isMoving = false;\r\n }\r\n\r\n isMoving() {\r\n return this._isMoving;\r\n }\r\n\r\n wasStarted() {\r\n return typeof this._startTime !== 'undefined' && typeof this._endTime !== 'undefined';\r\n }\r\n\r\n start() {\r\n this._startTime = Date.now();\r\n const transTime = settings.now.interpolateViews ? _transitionTime * 1000 : 0;\r\n this._endTime = this._startTime + transTime;\r\n this._isMoving = true;\r\n }\r\n\r\n getCurrentView() {\r\n if (typeof this._srcView === 'undefined' || typeof this._dstView === 'undefined'\r\n || !this._isMoving || !this.wasStarted()) {\r\n return { success: false };\r\n }\r\n\r\n let view = this.createView();\r\n const time = Date.now();\r\n if (time > this._endTime) {\r\n view = this._dstView;\r\n this.reset();\r\n return { success: true, view };\r\n }\r\n\r\n const factor = (time - this._startTime) / (this._endTime - this._startTime);\r\n view.position.copy(this._srcView.position);\r\n view.position.lerp(this._dstView.position, factor);\r\n view.scale = (1 - factor) * this._srcView.scale + factor * this._dstView.scale;\r\n view.orientation.copy(this._srcView.orientation);\r\n view.orientation.slerp(this._dstView.orientation, factor);\r\n return { success: true, view };\r\n }\r\n\r\n reset() {\r\n this._startTime = this._endTime = 0;\r\n this._isMoving = false;\r\n }\r\n\r\n pause() {\r\n if (!this._isPaused) {\r\n this.setup(this.getCurrentView().view, this._dstView);\r\n this._isPaused = true;\r\n }\r\n }\r\n\r\n resume() {\r\n this._isPaused = false;\r\n }\r\n\r\n createView() {\r\n return new View();\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport makeContextDependent from './makeContextDependent';\r\n\r\nconst MAX_COOKIE_LEN = 4000;\r\nconst COUNT_SUFFIX = 'Cnt';\r\n\r\nfunction _chunkString(string, chunkLen) {\r\n const l = string.length;\r\n const chunks = [];\r\n for (let c = 0, lc = 0; lc < l; c++, lc += chunkLen) {\r\n chunks[c] = string.slice(lc, lc + chunkLen);\r\n }\r\n return chunks;\r\n}\r\n\r\n/**\r\n * Create new context dependent Cookie holder object.\r\n * @param context\r\n * @param {Object} opts - options\r\n * @param {string} opts.path - cookie path\r\n * @constructor\r\n */\r\nfunction Cookies(context, opts) {\r\n this.context = context;\r\n this._opts = _.merge({\r\n path: '/',\r\n }, opts);\r\n}\r\n\r\nmakeContextDependent(Cookies.prototype);\r\n\r\n/**\r\n * Remove cookie by the name.\r\n * @param key\r\n */\r\nCookies.prototype.removeCookie = function (key) {\r\n const cntKey = this._toCount(key);\r\n let cntVal = this._getSimpleCookie(cntKey);\r\n if (!cntVal) {\r\n this._removeSimpleCookie(key);\r\n return;\r\n }\r\n this._removeSimpleCookie(cntKey);\r\n cntVal = parseInt(cntVal, 10);\r\n for (let i = 0; i < cntVal; ++i) {\r\n this._removeSimpleCookie(key + i);\r\n }\r\n};\r\n\r\n/**\r\n * Set new cookie value. Automatically splits\r\n * values that are too large into multiple cookies.\r\n * @param key\r\n * @param value\r\n */\r\nCookies.prototype.setCookie = function (key, value) {\r\n this.removeCookie(key);\r\n value = encodeURIComponent(value);\r\n const values = _chunkString(value, MAX_COOKIE_LEN - key.length - 1);\r\n const cntVal = values.length;\r\n if (cntVal === 1) {\r\n this._setSimpleCookie(key, value);\r\n return;\r\n }\r\n const cntKey = this._toCount(key);\r\n this._setSimpleCookie(cntKey, cntVal.toString());\r\n for (let i = 0; i < cntVal; ++i) {\r\n this._setSimpleCookie(key + i, values[i]);\r\n }\r\n};\r\n\r\n/**\r\n * Obtain the value of a compound cookie.\r\n * @param key\r\n */\r\nCookies.prototype.getCookie = function (key) {\r\n const cntKey = this._toCount(key);\r\n let cntVal = this._getSimpleCookie(cntKey);\r\n if (!cntVal) {\r\n return this._getSimpleCookie(key);\r\n }\r\n cntVal = parseInt(cntVal, 10);\r\n const value = [];\r\n for (let i = 0; i < cntVal; ++i) {\r\n value[i] = this._getSimpleCookie(key + i);\r\n }\r\n return value.join('');\r\n};\r\n\r\nCookies.prototype._toCount = function (key) {\r\n return key + COUNT_SUFFIX;\r\n};\r\n\r\nCookies.prototype._removeSimpleCookie = function (key) {\r\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;\r\n};\r\n\r\nCookies.prototype._getExpirationDate = function () {\r\n const today = new Date();\r\n const EXP_PERIOD_YEARS = 10;\r\n today.setFullYear(today.getFullYear() + EXP_PERIOD_YEARS);\r\n return today;\r\n};\r\n\r\nCookies.prototype._setSimpleCookie = function (key, value) {\r\n document.cookie = `${key}=${value\r\n };expires=${this._getExpirationDate().toUTCString()\r\n };path=${this._opts.path}`;\r\n};\r\n\r\nCookies.prototype._getSimpleCookie = function (key) {\r\n const matches = document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`));\r\n return matches ? decodeURIComponent(matches[1]) : '';\r\n};\r\n\r\nCookies.prototype._exists = function (key) {\r\n return document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`));\r\n};\r\n\r\nexport default Cookies;\r\n","/*\r\n * Toggling WebVR is done through button.click because of limitations on calling requestPresent in webVR:\r\n * VRDisplay::requestPresent should be called from user gesture:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestPresent\r\n */\r\nexport default function (webVRPoC) {\r\n function showEnterVR(button) {\r\n button.style.display = '';\r\n button.style.cursor = 'pointer';\r\n button.style.left = 'calc(50% - 50px)';\r\n button.style.width = '100px';\r\n\r\n button.textContent = 'ENTER VR';\r\n\r\n let currentSession = null;\r\n\r\n function onSessionEnded(/* event */) {\r\n currentSession.removeEventListener('end', onSessionEnded);\r\n button.textContent = 'ENTER VR';\r\n currentSession = null;\r\n }\r\n\r\n function onSessionStarted(session) {\r\n session.addEventListener('end', onSessionEnded);\r\n webVRPoC._gfx.renderer.xr.setReferenceSpaceType('local');\r\n webVRPoC._gfx.renderer.xr.setSession(session);\r\n button.textContent = 'EXIT VR';\r\n currentSession = session;\r\n }\r\n\r\n button.onmouseenter = function () { button.style.opacity = '1.0'; };\r\n button.onmouseleave = function () { button.style.opacity = '0.5'; };\r\n\r\n button.onclick = function () {\r\n if (currentSession === null) {\r\n // WebXR's requestReferenceSpace only works if the corresponding feature\r\n // was requested at session creation time. For simplicity, just ask for\r\n // the interesting ones as optional features, but be aware that the\r\n // requestReferenceSpace call will fail if it turns out to be unavailable.\r\n // ('local' is always available for immersive sessions and doesn't need to\r\n // be requested separately.)\r\n\r\n const sessionInit = { optionalFeatures: ['local-floor', 'bounded-floor'] };\r\n navigator.xr.requestSession('immersive-vr', sessionInit).then(onSessionStarted);\r\n webVRPoC.moveSceneBehindHeadset();\r\n } else {\r\n currentSession.end();\r\n }\r\n };\r\n }\r\n\r\n function showWebXRNotFound(button) {\r\n button.style.display = '';\r\n button.style.cursor = 'auto';\r\n button.style.left = 'calc(50% - 75px)';\r\n button.style.width = '150px';\r\n button.textContent = 'VR NOT FOUND';\r\n button.onmouseenter = null;\r\n button.onmouseleave = null;\r\n button.onclick = null;\r\n }\r\n\r\n function stylizeElement(element) {\r\n element.style.position = 'absolute';\r\n element.style.bottom = '20px';\r\n element.style.padding = '12px 6px';\r\n element.style.border = '1px solid #fff';\r\n element.style.borderRadius = '4px';\r\n element.style.background = 'transparent';\r\n element.style.color = '#fff';\r\n element.style.font = 'normal 13px sans-serif';\r\n element.style.textAlign = 'center';\r\n element.style.opacity = '0.5';\r\n element.style.outline = 'none';\r\n element.style.zIndex = '999';\r\n }\r\n\r\n if ('xr' in navigator) {\r\n const button = document.createElement('button');\r\n button.style.display = 'none';\r\n stylizeElement(button);\r\n navigator.xr.isSessionSupported('immersive-vr').then((supported) => (\r\n supported ? showEnterVR(button) : showWebXRNotFound(button)\r\n ));\r\n return button;\r\n }\r\n const message = document.createElement('a');\r\n message.href = 'https://webvr.info';\r\n message.innerHTML = 'WEBXR NOT SUPPORTED';\r\n message.style.left = 'calc(50% - 90px)';\r\n message.style.width = '180px';\r\n message.style.textDecoration = 'none';\r\n stylizeElement(message);\r\n return message;\r\n}\r\n","import * as THREE from 'three';\r\nimport createWebVRButton from './createWebVRButton';\r\nimport gfxutils from '../gfxutils';\r\nimport logger from '../../utils/logger';\r\nimport settings from '../../settings';\r\nimport UberMaterial from '../shaders/UberMaterial';\r\n\r\nexport default class WebVRPoC {\r\n constructor(onToggle) {\r\n this._mainCamera = new THREE.PerspectiveCamera();\r\n this._button = null;\r\n this._onToggle = onToggle;\r\n\r\n this._molContainer = new gfxutils.RCGroup();\r\n this._user = new gfxutils.RCGroup();\r\n this._scalingPivot = new THREE.Object3D();\r\n this._user.add(this._scalingPivot);\r\n\r\n this._controller1 = null;\r\n this._controller2 = null;\r\n this._pressedGripsCounter = 0;\r\n this._distance = 0;\r\n\r\n this._gfx = null;\r\n }\r\n\r\n startScalingByControllers() {\r\n // reset scale\r\n this._distance = this._controller1.position.distanceTo(this._controller2.position);\r\n gfxutils.getMiddlePoint(this._controller1.position, this._controller2.position, this._scalingPivot.position);\r\n this._scalingPivot.scale.set(1, 1, 1);\r\n this._scalingPivot.updateMatrix();\r\n this._scalingPivot.updateMatrixWorld();\r\n // link molecule to pivot\r\n this._scalingPivot.addSavingWorldTransform(this._molContainer);\r\n }\r\n\r\n stopScalingByControllers() {\r\n this._gfx.scene.addSavingWorldTransform(this._molContainer);\r\n }\r\n\r\n handleGripsDown(event) {\r\n this._pressedGripsCounter++;\r\n if (this._pressedGripsCounter === 2) {\r\n this.startScalingByControllers();\r\n } else if (this._pressedGripsCounter === 1) {\r\n event.target.addSavingWorldTransform(this._molContainer);\r\n }\r\n }\r\n\r\n handleGripsUp(event) {\r\n this._pressedGripsCounter--;\r\n if (this._pressedGripsCounter === 1) {\r\n this.stopScalingByControllers();\r\n // reattach molecule to other controller\r\n const anotherController = event.target === this._controller1 ? this._controller2 : this._controller1;\r\n anotherController.addSavingWorldTransform(this._molContainer);\r\n } else if (this._pressedGripsCounter === 0) {\r\n this._gfx.scene.addSavingWorldTransform(this._molContainer);\r\n }\r\n }\r\n\r\n enable(gfx) {\r\n if (!gfx) {\r\n logger.warn('WebVR couldn\\'t be enabled, because gfx is not defined');\r\n return;\r\n }\r\n this._gfx = gfx;\r\n const { renderer, camera } = gfx;\r\n if (!renderer) {\r\n throw new Error('No renderer is available to toggle WebVR');\r\n }\r\n if (!camera) {\r\n throw new Error('No camera is available to toggle WebVR');\r\n }\r\n\r\n // enable xr in renderer\r\n renderer.xr.enabled = true;\r\n // add button for turning vr mode\r\n if (!this._button) {\r\n this._button = createWebVRButton(this);\r\n document.body.appendChild(this._button);\r\n } else {\r\n this._button.style.display = 'block';\r\n }\r\n // store fog setting\r\n this._mainFog = settings.now.fog;\r\n settings.set('fog', false);\r\n\r\n this._plugVRNodesIntoScene(gfx, renderer);\r\n this._setControllersListeners();\r\n\r\n // make some Miew job\r\n if (this._onToggle) {\r\n this._onToggle(true);\r\n }\r\n }\r\n\r\n _plugVRNodesIntoScene(gfx, renderer) {\r\n // store common scene camera\r\n this._mainCamera.copy(gfx.camera);\r\n // add hierarchical structure for webVR into scene\r\n gfx.scene.add(this._user);\r\n // turn on webvr transformation\r\n gfx.scene.add(this._molContainer);\r\n this._molContainer.add(gfx.root);\r\n\r\n this._controller1 = renderer.xr.getController(0);\r\n this._controller2 = renderer.xr.getController(1);\r\n const mesh = this._createControllerMesh();\r\n this._controller1.add(mesh);\r\n this._controller2.add(mesh.clone());\r\n this._user.add(this._controller1);\r\n this._user.add(this._controller2);\r\n }\r\n\r\n _setControllersListeners() {\r\n this._controller1.addEventListener('selectstart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller1.addEventListener('selectend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n this._controller2.addEventListener('selectstart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller2.addEventListener('selectend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n\r\n this._controller1.addEventListener('squeezestart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller1.addEventListener('squeezeend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n this._controller2.addEventListener('squeezestart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller2.addEventListener('squeezeend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n }\r\n\r\n disable() {\r\n if (!this._gfx) {\r\n return;\r\n }\r\n const { renderer, camera } = this._gfx;\r\n if (!renderer) {\r\n throw new Error('No renderer is available to toggle WebVR');\r\n }\r\n\r\n // nullify webxr callback for animation frame\r\n renderer.setAnimationLoop(null);\r\n const session = renderer.xr.getSession();\r\n if (session) {\r\n session.end();\r\n }\r\n renderer.xr.enabled = false;\r\n // remove button of VR entering\r\n if (this._button) {\r\n this._button.style.display = 'none';\r\n }\r\n // restore fog param\r\n settings.set('fog', this._mainFog);\r\n\r\n this._unplugVRNodesFromScene(camera);\r\n\r\n // make some Miew job\r\n if (this._onToggle) {\r\n this._onToggle(false);\r\n }\r\n }\r\n\r\n _unplugVRNodesFromScene(camera) {\r\n // restore common camera\r\n if (this._mainCamera && camera) {\r\n camera.copy(this._mainCamera);\r\n }\r\n // turn off webvr transformation\r\n const root = this._molContainer.children[0];\r\n if (root) {\r\n this._gfx.scene.add(root);\r\n }\r\n this._molContainer.parent.remove(this._molContainer);\r\n if (this._user) {\r\n this._gfx.scene.remove(this._user);\r\n }\r\n // free scene nodes\r\n this._molContainer = null;\r\n this._user = null;\r\n this._scalingPivot = null;\r\n this._user = null;\r\n this._controller1 = null;\r\n this._controller2 = null;\r\n }\r\n\r\n _createControllerMesh() {\r\n // visualize controllers with cylinders\r\n const geometry = new THREE.CylinderGeometry(0.04, 0.04, 0.3);\r\n const material = new UberMaterial({ lights: false, overrideColor: true });\r\n material.setUberOptions({ fixedColor: new THREE.Color(0x4444ff) });\r\n material.updateUniforms();\r\n const cylinder = new THREE.Mesh(geometry, material);\r\n cylinder.rotateX(-Math.PI / 2);\r\n return cylinder;\r\n }\r\n\r\n updateMoleculeScale() {\r\n if (!this._controller1 || !this._controller2) {\r\n return;\r\n }\r\n\r\n const self = this;\r\n // update molecule scaling by controllers\r\n if (self._pressedGripsCounter === 2) {\r\n // recalc scaling pivot\r\n gfxutils.getMiddlePoint(self._controller1.position, self._controller2.position, self._scalingPivot.position);\r\n // recalc scaler\r\n const dist = self._controller1.position.distanceTo(self._controller2.position);\r\n const scaler = dist / self._distance;\r\n self._scalingPivot.scale.multiplyScalar(scaler);\r\n // save cur distance for next frame\r\n self._distance = dist;\r\n }\r\n }\r\n\r\n /**\r\n * Reposition molecule right before the camera.\r\n * @note The proper way is to initiate headset in the place of common Miew's camera.\r\n * But threejs limitations on setting new XRReferenceSpace enforce the molecule repositioning\r\n * Hope, something will change.\r\n */\r\n moveSceneBehindHeadset() {\r\n const gfx = this._gfx;\r\n const { camera } = gfx;\r\n\r\n // set container position in camera space\r\n const container = this._molContainer;\r\n container.matrix.identity();\r\n container.position.set(0, 0, -4.0);\r\n container.updateMatrix();\r\n\r\n // update container world matrix\r\n container.matrixWorld.multiplyMatrices(camera.matrixWorld, container.matrix);\r\n // readd to scene\r\n gfx.scene.addSavingWorldTransform(container);\r\n if (this._onToggle) {\r\n this._onToggle(true);\r\n }\r\n }\r\n\r\n getCanvas() {\r\n const gfx = this._gfx;\r\n return (gfx && gfx.renderer) ? gfx.renderer.domElement : null;\r\n }\r\n}\r\n","/* global PACKAGE_VERSION:false */\r\nimport _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport { Spinner } from 'spin.js';\r\nimport Stats from './gfx/Stats';\r\nimport utils from './utils';\r\nimport JobHandle from './utils/JobHandle';\r\nimport options from './options';\r\nimport settings from './settings';\r\nimport chem from './chem';\r\nimport Visual from './Visual';\r\nimport ComplexVisual from './ComplexVisual';\r\nimport Complex from './chem/Complex';\r\nimport VolumeVisual from './VolumeVisual';\r\nimport io from './io/io';\r\nimport modes from './gfx/modes';\r\nimport colorers from './gfx/colorers';\r\nimport palettes from './gfx/palettes';\r\nimport materials from './gfx/materials';\r\nimport Representation from './gfx/Representation';\r\nimport CSS2DRenderer from './gfx/CSS2DRenderer';\r\nimport ObjectControls from './ui/ObjectControls';\r\nimport Picker from './ui/Picker';\r\nimport Axes from './gfx/Axes';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport meshutils from './gfx/meshutils';\r\nimport FrameInfo from './gfx/FrameInfo';\r\nimport meshes from './gfx/meshes/meshes';\r\nimport LinesObject from './gfx/objects/LinesObj';\r\nimport UberMaterial from './gfx/shaders/UberMaterial';\r\nimport OutlineMaterial from './gfx/shaders/OutlineMaterial';\r\nimport FXAAMaterial from './gfx/shaders/FXAAMaterial';\r\nimport AOMaterial from './gfx/shaders/AOMaterial';\r\nimport AOHorBlurMaterial from './gfx/shaders/AOHorBlurMaterial';\r\nimport AOVertBlurWithBlendMaterial from './gfx/shaders/AOVertBlurWithBlendMaterial';\r\nimport AnaglyphMaterial from './gfx/shaders/AnaglyphMaterial';\r\nimport VolumeMaterial from './gfx/shaders/VolumeMaterial';\r\nimport ViewInterpolator from './gfx/ViewInterpolator';\r\nimport EventDispatcher from './utils/EventDispatcher';\r\nimport logger from './utils/logger';\r\nimport Cookies from './utils/Cookies';\r\nimport capabilities from './gfx/capabilities';\r\nimport WebVRPoC from './gfx/vr/WebVRPoC';\r\nimport vertexScreenQuadShader from './gfx/shaders/ScreenQuad.vert';\r\nimport fragmentScreenQuadFromDistTex from './gfx/shaders/ScreenQuadFromDistortionTex.frag';\r\nimport getTopWindow from './utils/getTopWindow';\r\n\r\nconst {\r\n selectors,\r\n Atom,\r\n Residue,\r\n Chain,\r\n Molecule,\r\n} = chem;\r\n\r\nconst EDIT_MODE = { COMPLEX: 0, COMPONENT: 1, FRAGMENT: 2 };\r\n\r\nconst LOADER_NOT_FOUND = 'Could not find suitable loader for this source';\r\nconst PARSER_NOT_FOUND = 'Could not find suitable parser for this source';\r\n\r\n// Color management changed a lot in threejs 152+ version.\r\n// To keep miew colors we disable the new color management system\r\nTHREE.ColorManagement.enabled = false;\r\n\r\nconst { createElement } = utils;\r\n\r\nfunction updateFogRange(fog, center, radius) {\r\n fog.near = center - radius * settings.now.fogNearFactor;\r\n fog.far = center + radius * settings.now.fogFarFactor;\r\n}\r\n\r\nfunction removeExtension(fileName) {\r\n const dot = fileName.lastIndexOf('.');\r\n if (dot >= 0) {\r\n fileName = fileName.substr(0, dot);\r\n }\r\n return fileName;\r\n}\r\n\r\nfunction hasValidResidues(complex) {\r\n let hasValidRes = false;\r\n complex.forEachComponent((component) => {\r\n component.forEachResidue((residue) => {\r\n if (residue._isValid) {\r\n hasValidRes = true;\r\n }\r\n });\r\n });\r\n return hasValidRes;\r\n}\r\n\r\nfunction reportProgress(log, action, percent) {\r\n const TOTAL_PERCENT = 100;\r\n if (percent !== undefined) {\r\n log.debug(`${action}... ${Math.floor(percent * TOTAL_PERCENT)}%`);\r\n } else {\r\n log.debug(`${action}...`);\r\n }\r\n}\r\n\r\nfunction chooseFogColor() {\r\n return settings.now.fogColorEnable ? settings.now.fogColor : settings.now.bg.color;\r\n}\r\n\r\n// ////////////////////////////////////////////////////////////////////////////\r\n\r\n/**\r\n * Main 3D Molecular Viewer class.\r\n *\r\n * @param {object} opts - Viewer options.\r\n * @param {HTMLElement=} opts.container - DOM element that serves as a viewer container.\r\n * @param {object=} opts.settings - An object with properties to override default settings.\r\n * @param {string=} opts.settingsCookie='settings' - The name of the cookie to save current settings to.\r\n * @param {string=} opts.cookiePath='/' - The path option for cookies. Defaults to root.\r\n *\r\n * @exports Miew\r\n * @constructor\r\n */\r\nfunction Miew(opts) {\r\n EventDispatcher.call(this);\r\n this._opts = _.merge({\r\n settingsCookie: 'settings',\r\n cookiePath: '/',\r\n }, opts);\r\n /** @type {?object} */\r\n this._gfx = null;\r\n /** @type {ViewInterpolator} */\r\n this._interpolator = new ViewInterpolator();\r\n /** @type {HTMLElement} */\r\n this._container = (opts && opts.container)\r\n || document.getElementById('miew-container')\r\n || _.head(document.getElementsByClassName('miew-container'))\r\n || document.body;\r\n /** @type {HTMLElement} */\r\n this._containerRoot = this._container;\r\n\r\n /** @type {boolean} */\r\n this._running = false;\r\n /** @type {boolean} */\r\n this._halting = false;\r\n /** @type {boolean} */\r\n this._building = false;\r\n /** @type {boolean} */\r\n this._needRender = true;\r\n /** @type {boolean} */\r\n this._hotKeysEnabled = true;\r\n\r\n /** @type {Settings} */\r\n this.settings = settings;\r\n const log = logger;\r\n log.console = DEBUG;\r\n log.level = DEBUG ? 'debug' : 'info';\r\n /**\r\n * @type {Logger}\r\n * @example\r\n * miew.logger.addEventListener('message', function _onLogMessage(evt) {\r\n * console.log(evt.message);\r\n * });\r\n */\r\n this.logger = log;\r\n\r\n this._cookies = new Cookies(this);\r\n this.restoreSettings();\r\n if (opts && opts.settings) {\r\n this.settings.set(opts.settings);\r\n }\r\n\r\n /** @type {?Spinner} */\r\n this._spinner = null;\r\n /** @type {JobHandle[]} */\r\n this._loading = [];\r\n /** @type {?number}\r\n * @deprecated until Animation system refactoring\r\n */\r\n this._animInterval = null;\r\n\r\n /** @type {object} */\r\n this._visuals = {};\r\n /** @type {?string} */\r\n this._curVisualName = null;\r\n\r\n /** @type {array} */\r\n this._objects = [];\r\n\r\n /** @type {object} */\r\n this._sourceWindow = null;\r\n\r\n this.reset();\r\n\r\n if (this._repr) {\r\n log.debug(`Selected ${this._repr.mode.name} mode with ${this._repr.colorer.name} colorer.`);\r\n }\r\n\r\n const self = this;\r\n Miew.registeredPlugins.forEach((plugin) => {\r\n plugin.call(self);\r\n });\r\n\r\n this._initOnSettingsChanged();\r\n}\r\n\r\nMiew.prototype = Object.create(EventDispatcher.prototype);\r\nMiew.prototype.constructor = Miew;\r\n\r\nMiew.prototype.getMaxRepresentationCount = function () {\r\n return ComplexVisual.NUM_REPRESENTATION_BITS;\r\n};\r\n\r\n/**\r\n * Replace viewer container contents with a DOM element.\r\n * @param {HTMLElement} container - parent container.\r\n * @param {HTMLElement} element - DOM element to show.\r\n * @private\r\n */\r\nfunction _setContainerContents(container, element) {\r\n const parent = container;\r\n while (parent.firstChild) {\r\n parent.removeChild(parent.firstChild);\r\n }\r\n parent.appendChild(element);\r\n}\r\n\r\n/**\r\n * Update Shadow Camera target position and frustum.\r\n * @private\r\n */\r\nMiew.prototype._updateShadowCamera = (function () {\r\n const shadowMatrix = new THREE.Matrix4();\r\n const direction = new THREE.Vector3();\r\n const OBB = { center: new THREE.Vector3(), halfSize: new THREE.Vector3() };\r\n\r\n return function () {\r\n this._gfx.scene.updateMatrixWorld();\r\n for (let i = 0; i < this._gfx.scene.children.length; i++) {\r\n if (this._gfx.scene.children[i].type === 'DirectionalLight') {\r\n const light = this._gfx.scene.children[i];\r\n shadowMatrix.copy(light.shadow.camera.matrixWorldInverse);\r\n this.getOBB(shadowMatrix, OBB);\r\n\r\n direction.subVectors(light.target.position, light.position);\r\n light.position.subVectors(OBB.center, direction);\r\n light.target.position.copy(OBB.center);\r\n\r\n light.shadow.bias = 0.09;\r\n light.shadow.camera.bottom = -OBB.halfSize.y;\r\n light.shadow.camera.top = OBB.halfSize.y;\r\n light.shadow.camera.right = OBB.halfSize.x;\r\n light.shadow.camera.left = -OBB.halfSize.x;\r\n light.shadow.camera.near = direction.length() - OBB.halfSize.z;\r\n light.shadow.camera.far = direction.length() + OBB.halfSize.z;\r\n\r\n light.shadow.camera.updateProjectionMatrix();\r\n }\r\n }\r\n };\r\n}());\r\n\r\n/**\r\n * Initialize the viewer.\r\n * @returns {boolean} true on success.\r\n * @throws Forwards exception raised during initialization.\r\n * @see Miew#term\r\n */\r\nMiew.prototype.init = function () {\r\n const container = this._container;\r\n const elem = utils.createElement('div', { class: 'miew-canvas' });\r\n _setContainerContents(container, elem);\r\n this._container = elem;\r\n\r\n const frag = document.createDocumentFragment();\r\n frag.appendChild(this._msgMode = createElement(\r\n 'div',\r\n { class: 'mode-message overlay' },\r\n createElement('p', {}, 'COMPONENT EDIT MODE'),\r\n ));\r\n frag.appendChild(this._msgAtomInfo = createElement(\r\n 'div',\r\n { class: 'atom-info overlay' },\r\n createElement('p', {}, ''),\r\n ));\r\n container.appendChild(frag);\r\n\r\n if (this._gfx !== null) { // block double init\r\n return true;\r\n }\r\n\r\n const self = this;\r\n this._showMessage('Viewer is being initialized...');\r\n try {\r\n this._initGfx();\r\n\r\n this._initListeners();\r\n this._spinner = new Spinner({\r\n lines: 13,\r\n length: 28,\r\n width: 14,\r\n radius: 42,\r\n color: '#fff',\r\n zIndex: 700,\r\n });\r\n\r\n const target = getTopWindow();\r\n target.addEventListener('keydown', (event) => {\r\n self._onKeyDown(event);\r\n });\r\n\r\n target.addEventListener('keyup', (event) => {\r\n self._onKeyUp(event);\r\n });\r\n\r\n this._objectControls = new ObjectControls(\r\n this._gfx.root,\r\n this._gfx.pivot,\r\n this._gfx.camera,\r\n this._gfx.renderer.domElement,\r\n () => self._getAltObj(),\r\n );\r\n this._objectControls.addEventListener('change', (e) => {\r\n if (settings.now.shadow.on) {\r\n self._updateShadowCamera();\r\n }\r\n // route rotate, zoom, translate and translatePivot events to the external API\r\n switch (e.action) {\r\n case 'rotate':\r\n self.dispatchEvent({ type: 'rotate', quaternion: e.quaternion });\r\n break;\r\n case 'zoom':\r\n self.dispatchEvent({ type: 'zoom', factor: e.factor });\r\n break;\r\n default:\r\n self.dispatchEvent({ type: e.action });\r\n }\r\n self.dispatchEvent({ type: 'transform' });\r\n self._needRender = true;\r\n });\r\n\r\n const gfx = this._gfx;\r\n this._picker = new Picker(gfx.root, gfx.camera, gfx.renderer.domElement);\r\n this._picker.addEventListener('newpick', (event) => {\r\n self._onPick(event);\r\n });\r\n this._picker.addEventListener('dblclick', (event) => {\r\n self.center(event);\r\n });\r\n } catch (error) {\r\n if (error.name === 'TypeError' && error.message === 'Cannot read property \\'getExtension\\' of null') {\r\n this._showMessage('Could not create WebGL context.');\r\n } else if (error.message.search(/webgl/i) > 1) {\r\n this._showMessage(error.message);\r\n } else {\r\n this._showMessage('Viewer initialization failed.');\r\n throw error;\r\n }\r\n return false;\r\n }\r\n\r\n // automatically load default file\r\n const file = this._opts && this._opts.load;\r\n if (file) {\r\n const type = this._opts && this._opts.type;\r\n this.load(file, { fileType: type, keepRepsInfo: true });\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Terminate the viewer completely.\r\n * @see Miew#init\r\n */\r\nMiew.prototype.term = function () {\r\n this._showMessage('Viewer has been terminated.');\r\n this._loading.forEach((job) => {\r\n job.cancel();\r\n });\r\n this._loading.length = 0;\r\n this.halt();\r\n this._gfx = null;\r\n};\r\n\r\n/**\r\n * Display message inside the viewer container, hiding WebGL canvas.\r\n * @param {string} msg - Message to show.\r\n * @private\r\n */\r\nMiew.prototype._showMessage = function (msg) {\r\n const element = document.createElement('div');\r\n element.setAttribute('class', 'miew-message');\r\n element.appendChild(document.createElement('p')).appendChild(document.createTextNode(msg));\r\n _setContainerContents(this._container, element);\r\n};\r\n\r\n/**\r\n * Display WebGL canvas inside the viewer container, hiding any message shown.\r\n * @private\r\n */\r\nMiew.prototype._showCanvas = function () {\r\n _setContainerContents(this._container, this._gfx.renderer.domElement);\r\n};\r\n\r\nMiew.prototype._requestAnimationFrame = function (callback) {\r\n const { xr } = this._gfx.renderer;\r\n if (xr && xr.enabled) {\r\n this._gfx.renderer.setAnimationLoop(callback);\r\n return;\r\n }\r\n requestAnimationFrame(callback);\r\n};\r\n\r\n/**\r\n * Initialize WebGL and set 3D scene up.\r\n * @private\r\n */\r\nMiew.prototype._initGfx = function () {\r\n const gfx = {\r\n width: this._container.clientWidth,\r\n height: this._container.clientHeight,\r\n };\r\n\r\n const webGLOptions = { preserveDrawingBuffer: true, alpha: true, premultipliedAlpha: false };\r\n if (settings.now.antialias) {\r\n webGLOptions.antialias = true;\r\n }\r\n\r\n gfx.renderer2d = new CSS2DRenderer();\r\n\r\n gfx.renderer = new THREE.WebGLRenderer(webGLOptions);\r\n gfx.renderer.shadowMap.enabled = settings.now.shadow.on;\r\n gfx.renderer.shadowMap.autoUpdate = false;\r\n gfx.renderer.shadowMap.type = THREE.PCFShadowMap;\r\n capabilities.init(gfx.renderer);\r\n\r\n gfx.renderer.autoClear = false;\r\n gfx.renderer.setPixelRatio(window.devicePixelRatio);\r\n gfx.renderer.setSize(gfx.width, gfx.height);\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.clearColor();\r\n\r\n gfx.renderer2d.setSize(gfx.width, gfx.height);\r\n\r\n gfx.camera = new THREE.PerspectiveCamera(\r\n settings.now.camFov,\r\n gfx.width / gfx.height,\r\n settings.now.camNear,\r\n settings.now.camFar,\r\n );\r\n gfx.camera.setMinimalFov(settings.now.camFov);\r\n gfx.camera.position.z = settings.now.camDistance;\r\n gfx.camera.updateProjectionMatrix();\r\n gfx.camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n gfx.camera.layers.enable(gfxutils.LAYERS.VOLUME);\r\n gfx.camera.layers.enable(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n\r\n gfx.stereoCam = new THREE.StereoCamera();\r\n\r\n gfx.scene = new THREE.Scene();\r\n\r\n const color = chooseFogColor();\r\n gfx.scene.fog = new THREE.Fog(color, settings.now.camNear, settings.now.camFar);\r\n\r\n gfx.root = new gfxutils.RCGroup();\r\n gfx.scene.add(gfx.root);\r\n\r\n gfx.pivot = new gfxutils.RCGroup();\r\n gfx.root.add(gfx.pivot);\r\n\r\n gfx.selectionScene = new THREE.Scene();\r\n gfx.selectionRoot = new THREE.Group();\r\n gfx.selectionRoot.matrixAutoUpdate = false;\r\n gfx.selectionScene.add(gfx.selectionRoot);\r\n\r\n gfx.selectionPivot = new THREE.Group();\r\n gfx.selectionPivot.matrixAutoUpdate = false;\r\n gfx.selectionRoot.add(gfx.selectionPivot);\r\n\r\n const light12 = new THREE.DirectionalLight(0xffffff, 0.45);\r\n light12.position.set(0, 0.414, 1);\r\n light12.layers.enable(gfxutils.LAYERS.TRANSPARENT);\r\n light12.castShadow = true;\r\n light12.shadow.bias = 0.09;\r\n light12.shadow.radius = settings.now.shadow.radius;\r\n light12.shadow.camera.layers.set(gfxutils.LAYERS.SHADOWMAP);\r\n\r\n const pixelRatio = gfx.renderer.getPixelRatio();\r\n const shadowMapSize = Math.max(gfx.width, gfx.height) * pixelRatio;\r\n light12.shadow.mapSize.width = shadowMapSize;\r\n light12.shadow.mapSize.height = shadowMapSize;\r\n light12.target.position.set(0.0, 0.0, 0.0);\r\n gfx.scene.add(light12);\r\n gfx.scene.add(light12.target);\r\n\r\n const light3 = new THREE.AmbientLight(0x666666);\r\n light3.layers.enable(gfxutils.LAYERS.TRANSPARENT);\r\n gfx.scene.add(light3);\r\n\r\n // add axes\r\n gfx.axes = new Axes(gfx.root, gfx.camera);\r\n const deviceWidth = gfx.width * pixelRatio;\r\n const deviceHeight = gfx.height * pixelRatio;\r\n\r\n gfx.offscreenBuf = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat, depthBuffer: true,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf.depthTexture = new THREE.DepthTexture();\r\n gfx.offscreenBuf.depthTexture.type = THREE.UnsignedShortType;\r\n\r\n gfx.offscreenBuf2 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf3 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf4 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.volBFTex = gfx.offscreenBuf3;\r\n gfx.volFFTex = gfx.offscreenBuf4;\r\n gfx.volWFFTex = gfx.offscreenBuf;\r\n\r\n // use float textures for volume rendering (WebGL2 core feature)\r\n gfx.offscreenBuf5 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf6 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf7 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: true,\r\n },\r\n );\r\n\r\n gfx.volBFTex = gfx.offscreenBuf5;\r\n gfx.volFFTex = gfx.offscreenBuf6;\r\n gfx.volWFFTex = gfx.offscreenBuf7;\r\n\r\n gfx.stereoBufL = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.stereoBufR = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n this._gfx = gfx;\r\n this._showCanvas();\r\n\r\n this._embedWebXR(settings.now.stereo === 'WEBVR');\r\n\r\n this._container.appendChild(gfx.renderer2d.getElement());\r\n\r\n // add FPS counter\r\n const stats = new Stats();\r\n stats.domElement.style.position = 'absolute';\r\n stats.domElement.style.right = '0';\r\n stats.domElement.style.bottom = '0';\r\n this._container.appendChild(stats.domElement);\r\n this._fps = stats;\r\n this._fps.show(settings.now.fps);\r\n};\r\n\r\n/**\r\n * Setup event listeners.\r\n * @private\r\n */\r\nMiew.prototype._initListeners = function () {\r\n const self = this;\r\n window.addEventListener('resize', () => {\r\n self._onResize();\r\n });\r\n};\r\n\r\n/**\r\n * Try to add numbers to the base name to make it unique among visuals\r\n * @private\r\n */\r\nMiew.prototype._makeUniqueVisualName = function (baseName) {\r\n if (!baseName) {\r\n return Math.random().toString();\r\n }\r\n\r\n let name = baseName;\r\n let suffix = 1;\r\n while (this._visuals.hasOwnProperty(name)) {\r\n name = `${baseName} (${suffix.toString()})`;\r\n suffix++;\r\n }\r\n\r\n return name;\r\n};\r\n\r\n/**\r\n * Add visual to the viewer\r\n * @private\r\n */\r\nMiew.prototype._addVisual = function (visual) {\r\n if (!visual) {\r\n return null;\r\n }\r\n\r\n // change visual name in order to make it unique\r\n const name = this._makeUniqueVisualName(visual.name);\r\n visual.name = name;\r\n\r\n this._visuals[name] = visual;\r\n this._gfx.pivot.add(visual);\r\n if (visual.getSelectionGeo) {\r\n this._gfx.selectionPivot.add(visual.getSelectionGeo());\r\n }\r\n\r\n return name;\r\n};\r\n\r\n/**\r\n * Remove visual from the viewer\r\n * @private\r\n */\r\nMiew.prototype._removeVisual = function (visual) {\r\n let name = '';\r\n let obj = null;\r\n if (visual instanceof Visual) {\r\n ({ name } = visual);\r\n obj = visual;\r\n } else if (typeof visual === 'string') {\r\n name = visual;\r\n obj = this._visuals[name];\r\n }\r\n\r\n if (!obj || !this._visuals.hasOwnProperty(name) || this._visuals[name] !== obj) {\r\n return;\r\n }\r\n\r\n if (name === this._curVisualName) {\r\n this._curVisualName = undefined;\r\n }\r\n\r\n delete this._visuals[name];\r\n obj.release(); // removes nodes from scene\r\n\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Call specified function for each Visual\r\n * @private\r\n */\r\nMiew.prototype._forEachVisual = function (callback) {\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)) {\r\n callback(this._visuals[name]);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Release (destroy) all visuals in the scene\r\n * @private\r\n */\r\nMiew.prototype._releaseAllVisuals = function () {\r\n if (!this._gfx || !this._gfx.pivot) {\r\n return;\r\n }\r\n\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)) {\r\n this._visuals[name].release();\r\n }\r\n }\r\n\r\n this._visuals = {};\r\n};\r\n\r\n/**\r\n * Call specified function for each ComplexVisual\r\n * @private\r\n */\r\nMiew.prototype._forEachComplexVisual = function (callback) {\r\n if (!this._gfx || !this._gfx.pivot) {\r\n return;\r\n }\r\n\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)\r\n && this._visuals[name] instanceof ComplexVisual) {\r\n callback(this._visuals[name]);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Returns ComplexVisual with specified name, or current (if not found), or any, or null\r\n * @private\r\n */\r\nMiew.prototype._getComplexVisual = function (name) {\r\n name = name || this._curVisualName;\r\n let any = null;\r\n let named = null;\r\n this._forEachComplexVisual((visual) => {\r\n any = visual;\r\n if (visual.name === name) {\r\n named = visual;\r\n }\r\n });\r\n return named || any;\r\n};\r\n\r\n/**\r\n * Returns first found VolumeVisual (no more than one should be present actually)\r\n * @private\r\n */\r\nMiew.prototype._getVolumeVisual = function () {\r\n let any = null;\r\n this._forEachVisual((visual) => {\r\n if (visual instanceof VolumeVisual) {\r\n any = visual;\r\n }\r\n });\r\n return any;\r\n};\r\n\r\n/**\r\n * Returns ComplexVisual corresponding to specified complex\r\n * @private\r\n */\r\nMiew.prototype._getVisualForComplex = function (complex) {\r\n if (!complex) {\r\n return null;\r\n }\r\n\r\n let found = null;\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getComplex() === complex) {\r\n found = visual;\r\n }\r\n });\r\n return found;\r\n};\r\n\r\n/*\r\n * Get a list of names of visuals currently shown by the viewer\r\n */\r\nMiew.prototype.getVisuals = function () {\r\n return Object.keys(this._visuals);\r\n};\r\n\r\n/*\r\n * Get complex visuals count\r\n */\r\nMiew.prototype.getComplexVisualsCount = function () {\r\n let count = 0;\r\n this._forEachComplexVisual(() => count++);\r\n return count;\r\n};\r\n\r\n/*\r\n * Get current visual\r\n */\r\nMiew.prototype.getCurrentVisual = function () {\r\n return this._curVisualName;\r\n};\r\n\r\n/*\r\n * Set current visual.\r\n * All further operations will be performed on this visual (complex) if not stated otherwise.\r\n */\r\nMiew.prototype.setCurrentVisual = function (name) {\r\n if (!this._visuals[name]) {\r\n return;\r\n }\r\n\r\n this._curVisualName = name;\r\n};\r\n\r\n/**\r\n * Run the viewer, start processing update/render frames periodically.\r\n * Has no effect if already running.\r\n * @see Miew#halt\r\n */\r\nMiew.prototype.run = function () {\r\n if (!this._running) {\r\n this._running = true;\r\n if (this._halting) {\r\n this._halting = false;\r\n return;\r\n }\r\n\r\n this._objectControls.enable(true);\r\n this._interpolator.resume();\r\n\r\n this._requestAnimationFrame(() => this._onTick());\r\n }\r\n};\r\n\r\n/**\r\n * Request the viewer to stop.\r\n * Will be processed during the next frame.\r\n * @see Miew#run\r\n */\r\nMiew.prototype.halt = function () {\r\n if (this._running) {\r\n this._discardComponentEdit();\r\n this._discardFragmentEdit();\r\n this._objectControls.enable(false);\r\n this._interpolator.pause();\r\n this._halting = true;\r\n }\r\n};\r\n\r\n/**\r\n * Request the viewer to start / stop responsing\r\n * on hot keys.\r\n * @param enabled - start (true) or stop (false) response on hot keys.\r\n */\r\nMiew.prototype.enableHotKeys = function (enabled) {\r\n this._hotKeysEnabled = enabled;\r\n this._objectControls.enableHotkeys(enabled);\r\n};\r\n\r\n/**\r\n * Callback which processes window resize.\r\n * @private\r\n */\r\nMiew.prototype._onResize = function () {\r\n const gfx = this._gfx;\r\n if (!gfx) {\r\n return;\r\n }\r\n\r\n this._needRender = true;\r\n\r\n gfx.width = this._container.clientWidth;\r\n gfx.height = this._container.clientHeight;\r\n\r\n gfx.camera.aspect = gfx.width / gfx.height;\r\n gfx.camera.setMinimalFov(settings.now.camFov);\r\n gfx.camera.updateProjectionMatrix();\r\n\r\n gfx.renderer.setSize(gfx.width, gfx.height);\r\n gfx.renderer2d.setSize(gfx.width, gfx.height);\r\n\r\n this.dispatchEvent({ type: 'resize' });\r\n};\r\n\r\nMiew.prototype._resizeOffscreenBuffers = function (width, height, stereo) {\r\n const gfx = this._gfx;\r\n stereo = stereo || 'NONE';\r\n const isAnaglyph = (stereo === 'NONE' || stereo === 'ANAGLYPH');\r\n const multi = isAnaglyph ? 1 : 0.5;\r\n gfx.offscreenBuf.setSize(multi * width, height);\r\n gfx.offscreenBuf2.setSize(multi * width, height);\r\n gfx.offscreenBuf3.setSize(multi * width, height);\r\n gfx.offscreenBuf4.setSize(multi * width, height);\r\n if (gfx.offscreenBuf5) {\r\n gfx.offscreenBuf5.setSize(multi * width, height);\r\n }\r\n if (gfx.offscreenBuf6) {\r\n gfx.offscreenBuf6.setSize(multi * width, height);\r\n }\r\n if (gfx.offscreenBuf7) {\r\n gfx.offscreenBuf7.setSize(multi * width, height);\r\n }\r\n if (isAnaglyph) {\r\n gfx.stereoBufL.setSize(width, height);\r\n gfx.stereoBufR.setSize(width, height);\r\n }\r\n};\r\n\r\n/**\r\n * Callback which processes update/render frames.\r\n * @private\r\n */\r\nMiew.prototype._onTick = function () {\r\n if (this._halting) {\r\n this._running = false;\r\n this._halting = false;\r\n return;\r\n }\r\n\r\n this._fps.update();\r\n\r\n this._requestAnimationFrame(() => this._onTick());\r\n\r\n this._onUpdate();\r\n if (this._needRender) {\r\n this._onRender();\r\n this._needRender = !settings.now.suspendRender || settings.now.stereo === 'WEBVR';\r\n }\r\n};\r\n\r\nMiew.prototype._getBSphereRadius = function () {\r\n // calculate radius that would include all visuals\r\n let radius = 0;\r\n this._forEachVisual((visual) => {\r\n radius = Math.max(radius, visual.getBoundaries().boundingSphere.radius);\r\n });\r\n return radius * this._objectControls.getScale();\r\n};\r\n\r\n/**\r\n * Calculate bounding box that would include all visuals and being axis aligned in world defined by\r\n * transformation matrix: matrix\r\n * @param {Matrix4} matrix - transformation matrix.\r\n * @param {object} OBB - calculating bounding box.\r\n * @param {Vector3} OBB.center - OBB center.\r\n * @param {Vector3} OBB.halfSize - half magnitude of OBB sizes.\r\n */\r\nMiew.prototype.getOBB = (function () {\r\n const _bSphereForOneVisual = new THREE.Sphere();\r\n const _bBoxForOneVisual = new THREE.Box3();\r\n const _bBox = new THREE.Box3();\r\n\r\n const _invMatrix = new THREE.Matrix4();\r\n\r\n const _points = [\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n ];\r\n\r\n return function (matrix, OBB) {\r\n _bBox.makeEmpty();\r\n\r\n this._forEachVisual((visual) => {\r\n _bSphereForOneVisual.copy(visual.getBoundaries().boundingSphere);\r\n _bSphereForOneVisual.applyMatrix4(visual.matrixWorld).applyMatrix4(matrix);\r\n _bSphereForOneVisual.getBoundingBox(_bBoxForOneVisual);\r\n _bBox.union(_bBoxForOneVisual);\r\n });\r\n _bBox.getCenter(OBB.center);\r\n\r\n _invMatrix.copy(matrix).invert();\r\n OBB.center.applyMatrix4(_invMatrix);\r\n\r\n const { min } = _bBox;\r\n const { max } = _bBox;\r\n _points[0].set(min.x, min.y, min.z); // 000\r\n _points[1].set(max.x, min.y, min.z); // 100\r\n _points[2].set(min.x, max.y, min.z); // 010\r\n _points[3].set(min.x, min.y, max.z); // 001\r\n for (let i = 0, l = _points.length; i < l; i++) {\r\n _points[i].applyMatrix4(_invMatrix);\r\n }\r\n\r\n OBB.halfSize.set(\r\n Math.abs(_points[0].x - _points[1].x),\r\n Math.abs(_points[0].y - _points[2].y),\r\n Math.abs(_points[0].z - _points[3].z),\r\n ).multiplyScalar(0.5);\r\n };\r\n}());\r\n\r\nMiew.prototype._updateFog = function () {\r\n const gfx = this._gfx;\r\n\r\n if (settings.now.fog) {\r\n if (typeof gfx.scene.fog === 'undefined' || gfx.scene.fog === null) {\r\n const color = chooseFogColor();\r\n gfx.scene.fog = new THREE.Fog(color);\r\n this._setUberMaterialValues({ fog: settings.now.fog });\r\n }\r\n updateFogRange(gfx.scene.fog, gfx.camera.position.z, this._getBSphereRadius());\r\n } else if (gfx.scene.fog) {\r\n gfx.scene.fog = undefined;\r\n this._setUberMaterialValues({ fog: settings.now.fog });\r\n }\r\n};\r\n\r\nMiew.prototype._onUpdate = function () {\r\n if (this.isScriptingCommandAvailable !== undefined && this.isScriptingCommandAvailable() && !this._building) {\r\n this.callNextCmd();\r\n }\r\n\r\n this._objectControls.update();\r\n\r\n this._forEachComplexVisual((visual) => {\r\n visual.getComplex().update();\r\n });\r\n\r\n if (settings.now.autobuild && !this._loading.length && !this._building && this._needRebuild()) {\r\n this.rebuild();\r\n }\r\n\r\n if (!this._loading.length && !this._building && !this._needRebuild()) {\r\n this._updateView();\r\n }\r\n\r\n this._updateFog();\r\n\r\n if (this._gfx.renderer.xr.enabled) {\r\n this.webVR.updateMoleculeScale();\r\n }\r\n};\r\n\r\nMiew.prototype._onRender = function () {\r\n const gfx = this._gfx;\r\n\r\n // update all matrices\r\n gfx.scene.updateMatrixWorld();\r\n gfx.camera.updateMatrixWorld();\r\n\r\n this._clipPlaneUpdateValue(this._getBSphereRadius());\r\n this._fogFarUpdateValue();\r\n\r\n gfx.renderer.setRenderTarget(null);\r\n gfx.renderer.clear();\r\n\r\n this._renderFrame(settings.now.stereo);\r\n};\r\n\r\nMiew.prototype._renderFrame = (function () {\r\n const _anaglyphMat = new AnaglyphMaterial();\r\n const _size = new THREE.Vector2();\r\n\r\n return function (stereo) {\r\n const gfx = this._gfx;\r\n const { renderer } = gfx;\r\n\r\n renderer.getSize(_size);\r\n\r\n if (stereo !== 'NONE') {\r\n gfx.camera.focus = gfx.camera.position.z; // set focus to the center of the object\r\n gfx.stereoCam.aspect = 1.0;\r\n\r\n // in anaglyph mode we render full-size image for each eye\r\n // while in other stereo modes only half-size (two images on the screen)\r\n if (stereo === 'ANAGLYPH') {\r\n gfx.stereoCam.update(gfx.camera);\r\n } else {\r\n gfx.stereoCam.updateHalfSized(gfx.camera, settings.now.camFov);\r\n }\r\n }\r\n\r\n // resize offscreen buffers to match the target\r\n const pixelRatio = gfx.renderer.getPixelRatio();\r\n this._resizeOffscreenBuffers(_size.width * pixelRatio, _size.height * pixelRatio, stereo);\r\n\r\n this._renderShadowMap();\r\n\r\n switch (stereo) {\r\n case 'WEBVR':\r\n case 'NONE':\r\n this._renderScene(gfx.camera, false);\r\n break;\r\n case 'SIMPLE':\r\n case 'DISTORTED':\r\n renderer.setScissorTest(true);\r\n\r\n renderer.setScissor(0, 0, _size.width / 2, _size.height);\r\n renderer.setViewport(0, 0, _size.width / 2, _size.height);\r\n this._renderScene(this._gfx.stereoCam.cameraL, stereo === 'DISTORTED');\r\n\r\n renderer.setScissor(_size.width / 2, 0, _size.width / 2, _size.height);\r\n renderer.setViewport(_size.width / 2, 0, _size.width / 2, _size.height);\r\n this._renderScene(this._gfx.stereoCam.cameraR, stereo === 'DISTORTED');\r\n\r\n renderer.setScissorTest(false);\r\n break;\r\n case 'ANAGLYPH':\r\n this._renderScene(this._gfx.stereoCam.cameraL, false, gfx.stereoBufL);\r\n this._renderScene(this._gfx.stereoCam.cameraR, false, gfx.stereoBufR);\r\n renderer.setRenderTarget(null);\r\n _anaglyphMat.uniforms.srcL.value = gfx.stereoBufL.texture;\r\n _anaglyphMat.uniforms.srcR.value = gfx.stereoBufR.texture;\r\n gfx.renderer.renderScreenQuad(_anaglyphMat);\r\n break;\r\n default:\r\n }\r\n\r\n gfx.renderer2d.render(gfx.scene, gfx.camera);\r\n\r\n if (settings.now.axes && gfx.axes && !gfx.renderer.xr.enabled) {\r\n gfx.axes.render(renderer);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._onBgColorChanged = function () {\r\n const gfx = this._gfx;\r\n const color = chooseFogColor();\r\n if (gfx) {\r\n if (gfx.scene.fog) {\r\n gfx.scene.fog.color.set(color);\r\n }\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._onFogColorChanged = function () {\r\n const gfx = this._gfx;\r\n const color = chooseFogColor();\r\n if (gfx && gfx.scene.fog) {\r\n gfx.scene.fog.color.set(color);\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._setUberMaterialValues = function (values) {\r\n this._gfx.root.traverse((obj) => {\r\n if ((obj instanceof THREE.Mesh || obj instanceof THREE.LineSegments || obj instanceof THREE.Line)\r\n && obj.material instanceof UberMaterial) {\r\n obj.material.setValues(values);\r\n obj.material.needsUpdate = true;\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype._enableMRT = function (on, renderBuffer, textureBuffer) {\r\n const gfx = this._gfx;\r\n const gl = gfx.renderer.getContext();\r\n const { properties } = gfx.renderer;\r\n\r\n if (!on) {\r\n gl.drawBuffers([gl.COLOR_ATTACHMENT0, null]);\r\n return;\r\n }\r\n\r\n // take extra texture from Texture Buffer\r\n gfx.renderer.setRenderTarget(textureBuffer);\r\n const tx8 = properties.get(textureBuffer.texture).__webglTexture;\r\n gl.bindTexture(gl.TEXTURE_2D, tx8);\r\n\r\n // take texture and framebuffer from renderbuffer\r\n gfx.renderer.setRenderTarget(renderBuffer);\r\n const fb = properties.get(renderBuffer).__webglFramebuffer;\r\n const tx = properties.get(renderBuffer.texture).__webglTexture;\r\n\r\n // set framebuffer\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb);\r\n fb.width = renderBuffer.width;\r\n fb.height = renderBuffer.height;\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tx, 0);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, tx8, 0);\r\n\r\n // mapping textures (MRT is core feature in WebGL2)\r\n gl.drawBuffers([gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]);\r\n};\r\n\r\nMiew.prototype._renderScene = (function () {\r\n return function (camera, distortion, target) {\r\n distortion = distortion || false;\r\n target = target || null;\r\n\r\n const gfx = this._gfx;\r\n\r\n // render to offscreen buffer\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(target);\r\n gfx.renderer.clear();\r\n if (gfx.renderer.xr.enabled) {\r\n gfx.renderer.render(gfx.scene, camera);\r\n return;\r\n }\r\n\r\n // clean buffer for normals texture\r\n gfx.renderer.setClearColor(0x000000, 0.0);\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf4);\r\n gfx.renderer.clearColor();\r\n\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.clear();\r\n\r\n const bHaveComplexes = (this._getComplexVisual() !== null);\r\n const volumeVisual = this._getVolumeVisual();\r\n const ssao = bHaveComplexes && settings.now.ao;\r\n\r\n if (ssao) {\r\n this._enableMRT(true, gfx.offscreenBuf, gfx.offscreenBuf4);\r\n }\r\n\r\n if (settings.now.transparency === 'prepass') {\r\n this._renderWithPrepassTransparency(camera, gfx.offscreenBuf);\r\n } else if (settings.now.transparency === 'standard') {\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.render(gfx.scene, camera);\r\n }\r\n\r\n if (ssao) {\r\n this._enableMRT(false, null, null);\r\n }\r\n\r\n // when fxaa we should get resulting image in temp off-screen buff2 for further postprocessing with fxaa filter\r\n // otherwise we render to canvas\r\n const outline = bHaveComplexes && settings.now.outline.on;\r\n const fxaa = bHaveComplexes && settings.now.fxaa;\r\n const volume = (volumeVisual !== null) && (volumeVisual.getMesh().material != null);\r\n let dstBuffer = (ssao || outline || volume || fxaa || distortion) ? gfx.offscreenBuf2 : target;\r\n let srcBuffer = gfx.offscreenBuf;\r\n\r\n if (ssao) {\r\n this._performAO(\r\n srcBuffer,\r\n gfx.offscreenBuf4,\r\n gfx.offscreenBuf.depthTexture,\r\n dstBuffer,\r\n gfx.offscreenBuf3,\r\n gfx.offscreenBuf2,\r\n );\r\n if (!fxaa && !distortion && !volume && !outline) {\r\n srcBuffer = dstBuffer;\r\n dstBuffer = target;\r\n gfx.renderer.setRenderTarget(dstBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 1.0);\r\n }\r\n } else {\r\n // just copy color buffer to dst buffer\r\n gfx.renderer.setRenderTarget(dstBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 1.0);\r\n }\r\n\r\n // outline\r\n if (outline) {\r\n srcBuffer = dstBuffer;\r\n dstBuffer = (volume || fxaa || distortion) ? gfx.offscreenBuf3 : target;\r\n if (srcBuffer != null) {\r\n this._renderOutline(camera, gfx.offscreenBuf, srcBuffer, dstBuffer);\r\n }\r\n }\r\n\r\n // render selected part with outline material\r\n this._renderSelection(camera, gfx.offscreenBuf, dstBuffer);\r\n\r\n if (volume) {\r\n // copy current picture to the buffer that retains depth-data of the original molecule render\r\n // so that volume renderer could use depth-test\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.renderScreenQuadFromTex(dstBuffer.texture, 1.0);\r\n dstBuffer = gfx.offscreenBuf;\r\n this._renderVolume(volumeVisual, camera, dstBuffer, gfx.volBFTex, gfx.volFFTex, gfx.volWFFTex);\r\n\r\n // if this is the last stage -- copy image to target\r\n if (!fxaa && !distortion) {\r\n gfx.renderer.setRenderTarget(target);\r\n gfx.renderer.renderScreenQuadFromTex(dstBuffer.texture, 1.0);\r\n }\r\n }\r\n\r\n srcBuffer = dstBuffer;\r\n\r\n if (fxaa) {\r\n dstBuffer = distortion ? gfx.offscreenBuf4 : target;\r\n this._performFXAA(srcBuffer, dstBuffer);\r\n srcBuffer = dstBuffer;\r\n }\r\n\r\n if (distortion) {\r\n dstBuffer = target;\r\n this._performDistortion(srcBuffer, dstBuffer, true);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._performDistortion = (function () {\r\n const _scene = new THREE.Scene();\r\n const _camera = new THREE.OrthographicCamera(-1.0, 1.0, 1.0, -1.0, -500, 1000);\r\n\r\n const _material = new THREE.RawShaderMaterial({\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n aberration: { type: 'fv3', value: new THREE.Vector3(1.0) },\r\n },\r\n vertexShader: vertexScreenQuadShader,\r\n fragmentShader: fragmentScreenQuadFromDistTex,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n const _geo = gfxutils.buildDistorionMesh(10, 10, settings.now.debug.stereoBarrel);\r\n _scene.add(new meshes.Mesh(_geo, _material));\r\n\r\n return function (srcBuffer, targetBuffer, mesh) {\r\n this._gfx.renderer.setRenderTarget(targetBuffer);\r\n this._gfx.renderer.clear();\r\n\r\n if (mesh) {\r\n _material.uniforms.srcTex.value = srcBuffer.texture;\r\n _material.uniforms.aberration.value.set(0.995, 1.0, 1.01);\r\n this._gfx.renderer.render(_scene, _camera);\r\n } else {\r\n this._gfx.renderer.renderScreenQuadFromTexWithDistortion(srcBuffer, settings.now.debug.stereoBarrel);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._renderOutline = (function () {\r\n const _outlineMaterial = new OutlineMaterial({ depth: true });\r\n\r\n return function (camera, srcDepthBuffer, srcColorBuffer, targetBuffer) {\r\n const self = this;\r\n const gfx = self._gfx;\r\n\r\n // apply Sobel filter -- draw outline\r\n _outlineMaterial.uniforms.srcTex.value = srcColorBuffer.texture;\r\n _outlineMaterial.uniforms.srcDepthTex.value = srcDepthBuffer.depthTexture;\r\n _outlineMaterial.uniforms.srcTexSize.value.set(srcDepthBuffer.width, srcDepthBuffer.height);\r\n _outlineMaterial.uniforms.color.value = new THREE.Color(settings.now.outline.color);\r\n _outlineMaterial.uniforms.threshold.value = settings.now.outline.threshold;\r\n _outlineMaterial.uniforms.thickness.value = new THREE.Vector2(\r\n settings.now.outline.thickness,\r\n settings.now.outline.thickness,\r\n );\r\n\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuad(_outlineMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._renderShadowMap = (function () {\r\n const pars = { minFilter: THREE.NearestFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat };\r\n\r\n return function () {\r\n if (!settings.now.shadow.on) {\r\n return;\r\n }\r\n\r\n const gfx = this._gfx;\r\n const currentRenderTarget = gfx.renderer.getRenderTarget();\r\n const activeCubeFace = gfx.renderer.getActiveCubeFace();\r\n const activeMipmapLevel = gfx.renderer.getActiveMipmapLevel();\r\n\r\n const _state = gfx.renderer.state;\r\n\r\n // Set GL state for depth map.\r\n _state.setBlending(THREE.NoBlending);\r\n _state.buffers.color.setClear(1, 1, 1, 1);\r\n _state.buffers.depth.setTest(true);\r\n _state.setScissorTest(false);\r\n\r\n for (let i = 0; i < gfx.scene.children.length; i++) {\r\n if (gfx.scene.children[i].type === 'DirectionalLight') {\r\n const light = gfx.scene.children[i];\r\n\r\n if (light.shadow.map == null) {\r\n light.shadow.map = new THREE.WebGLRenderTarget(light.shadow.mapSize.width, light.shadow.mapSize.height, pars);\r\n light.shadow.camera.updateProjectionMatrix();\r\n }\r\n light.shadow.updateMatrices(light);\r\n\r\n gfx.renderer.setRenderTarget(light.shadow.map);\r\n gfx.renderer.clear();\r\n\r\n gfx.renderer.render(gfx.scene, light.shadow.camera);\r\n }\r\n }\r\n gfx.renderer.setRenderTarget(currentRenderTarget, activeCubeFace, activeMipmapLevel);\r\n };\r\n}());\r\n\r\n/**\r\n * Check if there is selection which must be rendered or not.\r\n * @private\r\n * @returns {boolean} true on existing selection to render\r\n */\r\nMiew.prototype._hasSelectionToRender = function () {\r\n const selPivot = this._gfx.selectionPivot;\r\n\r\n for (let i = 0; i < selPivot.children.length; i++) {\r\n const selPivotChild = selPivot.children[i];\r\n if (selPivotChild.children.length > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nMiew.prototype._renderSelection = (function () {\r\n const _outlineMaterial = new OutlineMaterial();\r\n\r\n return function (camera, srcBuffer, targetBuffer) {\r\n const self = this;\r\n const gfx = self._gfx;\r\n\r\n // clear offscreen buffer (leave z-buffer intact)\r\n gfx.renderer.setClearColor('black', 0);\r\n\r\n // render selection to offscreen buffer\r\n gfx.renderer.setRenderTarget(srcBuffer);\r\n gfx.renderer.clear(true, false, false);\r\n if (self._hasSelectionToRender()) {\r\n gfx.selectionRoot.matrix = gfx.root.matrix;\r\n gfx.selectionPivot.matrix = gfx.pivot.matrix;\r\n gfx.renderer.render(gfx.selectionScene, camera);\r\n } else {\r\n // just render something to force \"target clear\" operation to finish\r\n gfx.renderer.renderDummyQuad();\r\n }\r\n\r\n // overlay to screen\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 0.6);\r\n\r\n // apply Sobel filter -- draw outline\r\n _outlineMaterial.uniforms.srcTex.value = srcBuffer.texture;\r\n _outlineMaterial.uniforms.srcTexSize.value.set(srcBuffer.width, srcBuffer.height);\r\n gfx.renderer.renderScreenQuad(_outlineMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._checkVolumeRenderingSupport = function (renderTarget) {\r\n if (!renderTarget) {\r\n return false;\r\n }\r\n const gfx = this._gfx;\r\n const oldRT = gfx.renderer.getRenderTarget();\r\n\r\n gfx.renderer.setRenderTarget(renderTarget);\r\n const context = gfx.renderer.getContext();\r\n const result = context.checkFramebufferStatus(context.FRAMEBUFFER);\r\n gfx.renderer.setRenderTarget(oldRT);\r\n if (result !== context.FRAMEBUFFER_COMPLETE) {\r\n // floatFrameBufferWarning = ;\r\n this.logger.warn('Device doesn\\'t support electron density rendering');\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nMiew.prototype._renderVolume = (function () {\r\n const volumeBFMat = new VolumeMaterial.BackFacePosMaterial();\r\n const volumeFFMat = new VolumeMaterial.FrontFacePosMaterial();\r\n const cubeOffsetMat = new THREE.Matrix4().makeTranslation(0.5, 0.5, 0.5);\r\n const world2colorMat = new THREE.Matrix4();\r\n\r\n let volumeRenderingSupported;\r\n\r\n return function (volumeVisual, camera, dstBuf, tmpBuf1, tmpBuf2, tmpBuf3) {\r\n const gfx = this._gfx;\r\n\r\n if (typeof volumeRenderingSupported === 'undefined') {\r\n volumeRenderingSupported = this._checkVolumeRenderingSupport(tmpBuf1);\r\n }\r\n\r\n if (!volumeRenderingSupported) {\r\n return;\r\n }\r\n\r\n const mesh = volumeVisual.getMesh();\r\n\r\n mesh.rebuild(gfx.camera);\r\n\r\n // use main camera to prepare special textures to be used by volumetric rendering\r\n // these textures have the size of the window and are stored in offscreen buffers\r\n gfx.renderer.setClearColor('black', 0);\r\n gfx.renderer.setRenderTarget(tmpBuf1);\r\n gfx.renderer.clear();\r\n gfx.renderer.setRenderTarget(tmpBuf2);\r\n gfx.renderer.clear();\r\n gfx.renderer.setRenderTarget(tmpBuf3);\r\n gfx.renderer.clear();\r\n\r\n gfx.renderer.setRenderTarget(tmpBuf1);\r\n // draw plane with its own material, because it differs slightly from volumeBFMat\r\n camera.layers.set(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.scene.overrideMaterial = volumeBFMat;\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n gfx.renderer.setRenderTarget(tmpBuf2);\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.scene.overrideMaterial = volumeFFMat;\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n gfx.scene.overrideMaterial = null;\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n\r\n // prepare texture that contains molecule positions\r\n world2colorMat.copy(mesh.matrixWorld).invert();\r\n UberMaterial.prototype.uberOptions.world2colorMatrix.multiplyMatrices(cubeOffsetMat, world2colorMat);\r\n camera.layers.set(gfxutils.LAYERS.COLOR_FROM_POSITION);\r\n gfx.renderer.setRenderTarget(tmpBuf3);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // render volume\r\n const vm = mesh.material;\r\n vm.uniforms._BFRight.value = tmpBuf1.texture;\r\n vm.uniforms._FFRight.value = tmpBuf2.texture;\r\n vm.uniforms._WFFRight.value = tmpBuf3.texture;\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.renderer.setRenderTarget(dstBuf);\r\n gfx.renderer.render(gfx.scene, camera);\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n };\r\n}());\r\n\r\n/* Render scene with 'ZPrepass transparency Effect'\r\n * Idea: transparent objects are rendered in two passes. The first one writes result only into depth buffer.\r\n * The second pass reads depth buffer and writes only to color buffer. The method results in\r\n * correct image of front part of the semi-transparent objects, but we can see only front transparent objects\r\n * and opaque objects inside, there is no transparent objects inside.\r\n * Notes: 1. Opaque objects should be rendered strictly before semi-transparent ones.\r\n * 2. Realization doesn't use camera layers because scene traversing is used for material changes and\r\n * we can use it to select needed meshes and don't complicate meshes builders with layers\r\n */\r\nMiew.prototype._renderWithPrepassTransparency = (function () {\r\n return function (camera, targetBuffer) {\r\n const gfx = this._gfx;\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n\r\n // opaque objects\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // transparent objects z prepass\r\n camera.layers.set(gfxutils.LAYERS.PREPASS_TRANSPARENT);\r\n gfx.renderer.getContext().colorMask(false, false, false, false); // don't update color buffer\r\n gfx.renderer.render(gfx.scene, camera);\r\n gfx.renderer.getContext().colorMask(true, true, true, true); // update color buffer\r\n\r\n // transparent objects color pass\r\n camera.layers.set(gfxutils.LAYERS.TRANSPARENT);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // restore default layer\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n };\r\n}());\r\n\r\nMiew.prototype._performFXAA = (function () {\r\n const _fxaaMaterial = new FXAAMaterial();\r\n\r\n return function (srcBuffer, targetBuffer) {\r\n if (typeof srcBuffer === 'undefined' || typeof targetBuffer === 'undefined') {\r\n return;\r\n }\r\n\r\n const gfx = this._gfx;\r\n\r\n // clear canvas\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.clear();\r\n\r\n // do fxaa processing of offscreen buff2\r\n _fxaaMaterial.uniforms.srcTex.value = srcBuffer.texture;\r\n _fxaaMaterial.uniforms.srcTexelSize.value.set(1.0 / srcBuffer.width, 1.0 / srcBuffer.height);\r\n _fxaaMaterial.uniforms.bgColor.value.set(settings.now.bg.color);\r\n\r\n if (_fxaaMaterial.bgTransparent !== settings.now.bg.transparent) {\r\n _fxaaMaterial.setValues({ bgTransparent: settings.now.bg.transparent });\r\n _fxaaMaterial.needsUpdate = true;\r\n }\r\n gfx.renderer.renderScreenQuad(_fxaaMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._performAO = (function () {\r\n const _aoMaterial = new AOMaterial();\r\n const _horBlurMaterial = new AOHorBlurMaterial();\r\n const _vertBlurMaterial = new AOVertBlurWithBlendMaterial();\r\n\r\n const _scale = new THREE.Vector3();\r\n return function (srcColorBuffer, normalBuffer, srcDepthTexture, targetBuffer, tempBuffer, tempBuffer1) {\r\n if (!srcColorBuffer || !normalBuffer || !srcDepthTexture || !targetBuffer || !tempBuffer || !tempBuffer1) {\r\n return;\r\n }\r\n const gfx = this._gfx;\r\n const tanHalfFOV = Math.tan(THREE.MathUtils.DEG2RAD * 0.5 * gfx.camera.fov);\r\n\r\n _aoMaterial.uniforms.diffuseTexture.value = srcColorBuffer.texture;\r\n _aoMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n _aoMaterial.uniforms.normalTexture.value = normalBuffer.texture;\r\n _aoMaterial.uniforms.srcTexelSize.value.set(1.0 / srcColorBuffer.width, 1.0 / srcColorBuffer.height);\r\n _aoMaterial.uniforms.camNearFar.value.set(gfx.camera.near, gfx.camera.far);\r\n _aoMaterial.uniforms.projMatrix.value = gfx.camera.projectionMatrix;\r\n _aoMaterial.uniforms.aspectRatio.value = gfx.camera.aspect;\r\n _aoMaterial.uniforms.tanHalfFOV.value = tanHalfFOV;\r\n gfx.root.matrix.extractScale(_scale);\r\n _aoMaterial.uniforms.kernelRadius.value = settings.now.debug.ssaoKernelRadius * _scale.x;\r\n _aoMaterial.uniforms.depthThreshold.value = 2.0 * this._getBSphereRadius(); // diameter\r\n _aoMaterial.uniforms.factor.value = settings.now.debug.ssaoFactor;\r\n // N: should be tempBuffer1 for proper use of buffers (see buffers using outside the function)\r\n gfx.renderer.setRenderTarget(tempBuffer1);\r\n gfx.renderer.renderScreenQuad(_aoMaterial);\r\n\r\n _horBlurMaterial.uniforms.aoMap.value = tempBuffer1.texture;\r\n _horBlurMaterial.uniforms.srcTexelSize.value.set(1.0 / tempBuffer1.width, 1.0 / tempBuffer1.height);\r\n _horBlurMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n gfx.renderer.setRenderTarget(tempBuffer);\r\n gfx.renderer.renderScreenQuad(_horBlurMaterial);\r\n\r\n _vertBlurMaterial.uniforms.aoMap.value = tempBuffer.texture;\r\n _vertBlurMaterial.uniforms.diffuseTexture.value = srcColorBuffer.texture;\r\n _vertBlurMaterial.uniforms.srcTexelSize.value.set(1.0 / tempBuffer.width, 1.0 / tempBuffer.height);\r\n _vertBlurMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n _vertBlurMaterial.uniforms.projMatrix.value = gfx.camera.projectionMatrix;\r\n _vertBlurMaterial.uniforms.aspectRatio.value = gfx.camera.aspect;\r\n _vertBlurMaterial.uniforms.tanHalfFOV.value = tanHalfFOV;\r\n const { fog } = gfx.scene;\r\n if (fog) {\r\n _vertBlurMaterial.uniforms.fogNearFar.value.set(fog.near, fog.far);\r\n _vertBlurMaterial.uniforms.fogColor.value.set(fog.color.r, fog.color.g, fog.color.b, settings.now.fogAlpha);\r\n }\r\n if ((_vertBlurMaterial.useFog !== settings.now.fog)\r\n || (_vertBlurMaterial.fogTransparent !== settings.now.bg.transparent)) {\r\n _vertBlurMaterial.setValues({ useFog: settings.now.fog, fogTransparent: settings.now.bg.transparent });\r\n _vertBlurMaterial.needsUpdate = true;\r\n }\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuad(_vertBlurMaterial);\r\n };\r\n}());\r\n\r\n/**\r\n * Reset the viewer, unload molecules.\r\n * @param {boolean=} keepReps - Keep representations while resetting viewer state.\r\n */\r\nMiew.prototype.reset = function (/* keepReps */) {\r\n if (this._picker) {\r\n this._picker.reset();\r\n }\r\n this._lastPick = null;\r\n\r\n this._releaseAllVisuals();\r\n\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this._resetObjects();\r\n\r\n if (this._gfx) {\r\n gfxutils.clearTree(this._gfx.pivot);\r\n this._gfx.renderer2d.reset();\r\n }\r\n\r\n this.setNeedRender();\r\n};\r\n\r\nMiew.prototype._resetScene = function () {\r\n this._objectControls.reset();\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n this.resetReps();\r\n this.resetPivot();\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype.resetView = function () {\r\n // reset controls\r\n if (this._picker) {\r\n this._picker.reset();\r\n }\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._resetScene();\r\n\r\n // reset selection\r\n this._forEachComplexVisual((visual) => {\r\n visual.updateSelectionMask({});\r\n visual.rebuildSelectionGeometry();\r\n });\r\n};\r\n\r\nMiew.prototype._export = function (format) {\r\n const TheExporter = _.head(io.exporters.find({ format }));\r\n if (!TheExporter) {\r\n this.logger.error('Could not find suitable exporter for this source');\r\n return Promise.reject(new Error('Could not find suitable exporter for this source'));\r\n }\r\n this.dispatchEvent({ type: 'exporting' });\r\n\r\n if (this._visuals[this._curVisualName] instanceof ComplexVisual) {\r\n let dataSource = null;\r\n if (TheExporter.SourceClass === ComplexVisual) {\r\n dataSource = this._visuals[this._curVisualName];\r\n } else if (TheExporter.SourceClass === Complex) {\r\n dataSource = this._visuals[this._curVisualName]._complex;\r\n }\r\n const exporter = new TheExporter(dataSource, { miewVersion: Miew.VERSION });\r\n return exporter.export().then((data) => data);\r\n }\r\n if (this._visuals[this._curVisualName] instanceof VolumeVisual) {\r\n return Promise.reject(new Error('Sorry, exporter for volume data not implemented yet'));\r\n }\r\n return Promise.reject(new Error('Unexpected format of data'));\r\n};\r\n\r\nconst rePdbId = /^(?:(pdb|cif|ccp4|dsn6):\\s*)?(\\d[a-z\\d]{3})$/i;\r\nconst rePubchem = /^(?:pc|pubchem):\\s*([a-z]+)$/i;\r\nconst reUrlScheme = /^([a-z][a-z\\d\\-+.]*):/i;\r\n\r\nfunction resolveSourceShortcut(source, opts) {\r\n if (!_.isString(source)) {\r\n return source;\r\n }\r\n\r\n // e.g. \"cif:1CRN\"\r\n const matchesPdbId = rePdbId.exec(source);\r\n if (matchesPdbId) {\r\n let [, format = 'pdb', id] = matchesPdbId;\r\n\r\n format = format.toLowerCase();\r\n id = id.toUpperCase();\r\n\r\n switch (format) {\r\n case 'pdb':\r\n source = `https://files.rcsb.org/download/${id}.pdb`;\r\n break;\r\n case 'cif':\r\n source = `https://files.rcsb.org/download/${id}.cif`;\r\n break;\r\n case 'ccp4':\r\n source = `https://www.ebi.ac.uk/pdbe/coordinates/files/${id.toLowerCase()}.ccp4`;\r\n break;\r\n case 'dsn6':\r\n source = `https://edmaps.rcsb.org/maps/${id.toLowerCase()}_2fofc.dsn6`;\r\n break;\r\n default:\r\n throw new Error('Unexpected data format shortcut');\r\n }\r\n\r\n opts.fileType = format;\r\n opts.fileName = `${id}.${format}`;\r\n opts.sourceType = 'url';\r\n return source;\r\n }\r\n\r\n // e.g. \"pc:aspirin\"\r\n const matchesPubchem = rePubchem.exec(source);\r\n if (matchesPubchem) {\r\n const compound = matchesPubchem[1].toLowerCase();\r\n source = `https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/${compound}/JSON?record_type=3d`;\r\n opts.fileType = 'pubchem';\r\n opts.fileName = `${compound}.json`;\r\n opts.sourceType = 'url';\r\n return source;\r\n }\r\n\r\n // otherwise is should be an URL\r\n if (opts.sourceType === 'url' || opts.sourceType === undefined) {\r\n opts.sourceType = 'url';\r\n\r\n // e.g. \"./data/1CRN.pdb\"\r\n if (!reUrlScheme.test(source)) {\r\n source = utils.resolveURL(source);\r\n }\r\n }\r\n\r\n return source;\r\n}\r\n\r\nfunction updateBinaryMode(opts) {\r\n let { binary } = opts;\r\n\r\n // detect by format\r\n if (opts.fileType !== undefined) {\r\n const TheParser = _.head(io.parsers.find({ format: opts.fileType }));\r\n if (TheParser) {\r\n binary = TheParser.binary || false;\r\n } else {\r\n throw new Error('Could not find suitable parser for this format');\r\n }\r\n }\r\n\r\n // detect by file extension\r\n if (binary === undefined && opts.fileExt !== undefined) {\r\n const TheParser = _.head(io.parsers.find({ ext: opts.fileExt }));\r\n if (TheParser) {\r\n binary = TheParser.binary || false;\r\n }\r\n }\r\n\r\n // temporary workaround for animation\r\n if (opts.fileExt !== undefined && opts.fileExt.toLowerCase() === '.man') {\r\n opts.binary = true;\r\n opts.animation = true; // who cares?\r\n }\r\n\r\n // update if detected\r\n if (binary !== undefined) {\r\n if (opts.binary !== undefined && opts.binary !== binary) {\r\n opts.context.logger.warn('Overriding incorrect binary mode');\r\n }\r\n }\r\n\r\n opts.binary = binary || false;\r\n}\r\n\r\nfunction _fetchData(source, opts, job) {\r\n return new Promise(((resolve) => {\r\n if (job.shouldCancel()) {\r\n throw new Error('Operation cancelled');\r\n }\r\n job.notify({ type: 'fetching' });\r\n\r\n // allow for source shortcuts\r\n source = resolveSourceShortcut(source, opts);\r\n\r\n // detect a proper loader\r\n const TheLoader = _.head(io.loaders.find({ type: opts.sourceType, source }));\r\n if (!TheLoader) {\r\n throw new Error(LOADER_NOT_FOUND);\r\n }\r\n\r\n // split file name\r\n const fileName = opts.fileName || TheLoader.extractName(source);\r\n if (fileName) {\r\n const [name, fileExt] = utils.splitFileName(fileName);\r\n _.defaults(opts, { name, fileExt, fileName });\r\n }\r\n\r\n // should it be text or binary?\r\n updateBinaryMode(opts);\r\n\r\n // FIXME: All new settings retrieved from server are applied after the loading is complete. However, we need some\r\n // flags to alter the loading process itself. Here we apply them in advance. Dirty hack. Kill the server, remove\r\n // all hacks and everybody's happy.\r\n let newOptions = _.get(opts, 'preset.expression');\r\n if (!_.isUndefined(newOptions)) {\r\n newOptions = JSON.parse(newOptions);\r\n if (newOptions && newOptions.settings) {\r\n const keys = ['singleUnit'];\r\n for (let keyIndex = 0, keyCount = keys.length; keyIndex < keyCount; ++keyIndex) {\r\n const key = keys[keyIndex];\r\n const value = _.get(newOptions.settings, key);\r\n if (!_.isUndefined(value)) {\r\n settings.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // create a loader\r\n const loader = new TheLoader(source, opts);\r\n loader.context = opts.context;\r\n job.addEventListener('cancel', () => loader.abort());\r\n\r\n loader.addEventListener('progress', (event) => {\r\n if (event.lengthComputable && event.total > 0) {\r\n reportProgress(loader.logger, 'Fetching', event.loaded / event.total);\r\n } else {\r\n reportProgress(loader.logger, 'Fetching');\r\n }\r\n });\r\n\r\n console.time('fetch');\r\n const promise = loader.load()\r\n .then((data) => {\r\n console.timeEnd('fetch');\r\n opts.context.logger.info('Fetching finished');\r\n job.notify({ type: 'fetchingDone', data });\r\n return data;\r\n })\r\n .catch((error) => {\r\n console.timeEnd('fetch');\r\n opts.context.logger.debug(error.message);\r\n if (error.stack) {\r\n opts.context.logger.debug(error.stack);\r\n }\r\n opts.context.logger.error('Fetching failed');\r\n job.notify({ type: 'fetchingDone', error });\r\n throw error;\r\n });\r\n resolve(promise);\r\n }));\r\n}\r\n\r\nfunction _parseData(data, opts, job) {\r\n if (job.shouldCancel()) {\r\n return Promise.reject(new Error('Operation cancelled'));\r\n }\r\n\r\n job.notify({ type: 'parsing' });\r\n\r\n const TheParser = _.head(io.parsers.find({ format: opts.fileType, ext: opts.fileExt, data }));\r\n if (!TheParser) {\r\n return Promise.reject(new Error('Could not find suitable parser'));\r\n }\r\n\r\n const parser = new TheParser(data, opts);\r\n parser.context = opts.context;\r\n job.addEventListener('cancel', () => parser.abort());\r\n\r\n console.time('parse');\r\n return parser.parse()\r\n .then((dataSet) => {\r\n console.timeEnd('parse');\r\n job.notify({ type: 'parsingDone', data: dataSet });\r\n return dataSet;\r\n })\r\n .catch((error) => {\r\n console.timeEnd('parse');\r\n opts.error = error;\r\n opts.context.logger.debug(error.message);\r\n if (error.stack) {\r\n opts.context.logger.debug(error.stack);\r\n }\r\n opts.context.logger.error('Parsing failed');\r\n job.notify({ type: 'parsingDone', error });\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * Load molecule asynchronously.\r\n * @param {string|File} source - Molecule source to load (e.g. PDB ID, URL or File object).\r\n * @param {object=} opts - Options.\r\n * @param {string=} opts.sourceType - Data source type (e.g. 'url', 'file').\r\n * @param {string=} opts.fileType - Data contents type (e.g. 'pdb', 'cml').\r\n * @param {string=} opts.mdFile - .nc file path.\r\n * @param {boolean=} opts.keepRepsInfo - prevent reset of object and reps information.\r\n * @returns {Promise} name of the visual that was added to the viewer\r\n */\r\nMiew.prototype.load = function (source, opts) {\r\n opts = _.merge({}, opts, {\r\n context: this,\r\n });\r\n\r\n // for a single-file scenario\r\n if (!this.settings.now.use.multiFile) {\r\n // abort all loaders in progress\r\n if (this._loading.length) {\r\n this._loading.forEach((job) => {\r\n job.cancel();\r\n });\r\n this._loading.length = 0;\r\n }\r\n\r\n // reset\r\n if (!opts.animation) { // FIXME: sometimes it is set AFTERWARDS!\r\n this.reset(true);\r\n }\r\n }\r\n\r\n this._interpolator.reset();\r\n\r\n this.dispatchEvent({ type: 'loading', options: opts, source });\r\n\r\n const job = new JobHandle();\r\n this._loading.push(job);\r\n job.addEventListener('notification', (e) => {\r\n this.dispatchEvent(e.slaveEvent);\r\n });\r\n\r\n this._spinner.spin(this._container);\r\n\r\n const onLoadEnd = (anything) => {\r\n const jobIndex = this._loading.indexOf(job);\r\n if (jobIndex !== -1) {\r\n this._loading.splice(jobIndex, 1);\r\n }\r\n this._spinner.stop();\r\n this._refreshTitle();\r\n job.notify({ type: 'loadingDone', anything });\r\n return anything;\r\n };\r\n\r\n return _fetchData(source, opts, job)\r\n .then((data) => _parseData(data, opts, job))\r\n .then((object) => {\r\n const name = this._onLoad(object, opts);\r\n return onLoadEnd(name);\r\n })\r\n .catch((err) => {\r\n this.logger.error('Could not load data');\r\n this.logger.debug(err);\r\n throw onLoadEnd(err);\r\n });\r\n};\r\n\r\n/**\r\n * Unload molecule (delete corresponding visual).\r\n * @param {string=} name - name of the visual\r\n */\r\nMiew.prototype.unload = function (name) {\r\n this._removeVisual(name || this.getCurrentVisual());\r\n this.resetPivot();\r\n if (settings.now.shadow.on) {\r\n this._updateShadowCamera();\r\n }\r\n};\r\n\r\n/**\r\n * Start new animation. Now is broken.\r\n * @param fileData - new data to animate\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._startAnimation = function (fileData) {\r\n this._stopAnimation();\r\n const self = this;\r\n const visual = this._getComplexVisual();\r\n if (visual === null) {\r\n this.logger.error('Unable to start animation - no molecule is loaded.');\r\n return;\r\n }\r\n try {\r\n this._frameInfo = new FrameInfo(\r\n visual.getComplex(),\r\n fileData,\r\n {\r\n onLoadStatusChanged() {\r\n self.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: self._isAnimating,\r\n isLoading: self._frameInfo ? self._frameInfo.isLoading : true,\r\n },\r\n });\r\n },\r\n onError(message) {\r\n self._stopAnimation();\r\n self.logger.error(message);\r\n },\r\n },\r\n );\r\n } catch {\r\n this.logger.error('Animation file does not fit to current complex!');\r\n return;\r\n }\r\n this._continueAnimation();\r\n};\r\n\r\n/**\r\n * Pause current animation. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._pauseAnimation = function () {\r\n if (this._animInterval === null) {\r\n return;\r\n }\r\n this._isAnimating = false;\r\n clearInterval(this._animInterval);\r\n this._animInterval = null;\r\n if (this._frameInfo) {\r\n this.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: this._isAnimating,\r\n isLoading: this._frameInfo.isLoading,\r\n },\r\n });\r\n }\r\n};\r\n\r\n/**\r\n * Continue current animation after pausing. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._continueAnimation = function () {\r\n this._isAnimating = true;\r\n let minFrameTime = 1000 / settings.now.maxfps;\r\n minFrameTime = Number.isNaN(minFrameTime) ? 0 : minFrameTime;\r\n const self = this;\r\n const { pivot } = self._gfx;\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n visual.resetSelectionMask();\r\n visual.rebuildSelectionGeometry();\r\n this._msgAtomInfo.style.opacity = 0.0;\r\n }\r\n this._animInterval = setInterval(() => {\r\n self.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: self._isAnimating,\r\n isLoading: self._frameInfo.isLoading,\r\n },\r\n });\r\n if (self._frameInfo.frameIsReady) {\r\n pivot.updateToFrame(self._frameInfo);\r\n self._updateObjsToFrame(self._frameInfo);\r\n self._refreshTitle(` Frame ${self._frameInfo._currFrame} of ${self._frameInfo._framesCount\r\n } time interval - ${self._frameInfo._timeStep}`);\r\n try {\r\n self._frameInfo.nextFrame();\r\n } catch {\r\n self.logger.error('Error during animation');\r\n self._stopAnimation();\r\n return;\r\n }\r\n self._needRender = true;\r\n }\r\n }, minFrameTime);\r\n};\r\n\r\n/**\r\n * Stop current animation. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._stopAnimation = function () {\r\n if (this._animInterval === null) {\r\n return;\r\n }\r\n clearInterval(this._animInterval);\r\n this._frameInfo.disableEvents();\r\n this._frameInfo = null;\r\n this._animInterval = null;\r\n this.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: null,\r\n });\r\n};\r\n\r\n/**\r\n * Invoked upon successful loading of some data source\r\n * @param {DataSource} dataSource - Data source for visualization (molecular complex or other)\r\n * @param {object} opts - Options.\r\n * @private\r\n */\r\nMiew.prototype._onLoad = function (dataSource, opts) {\r\n const gfx = this._gfx;\r\n let visualName = null;\r\n\r\n if (opts.animation) {\r\n this._refreshTitle();\r\n this._startAnimation(dataSource);\r\n return null;\r\n }\r\n this._stopAnimation();\r\n if (!opts || !opts.keepRepsInfo) {\r\n this._opts.reps = null;\r\n this._opts._objects = null;\r\n }\r\n\r\n if (dataSource.id === 'Complex') {\r\n const complex = dataSource;\r\n\r\n // update title\r\n if (opts.fileName) {\r\n complex.name = complex.name || removeExtension(opts.fileName).toUpperCase();\r\n } else if (opts.amberFileName) {\r\n complex.name = complex.name || removeExtension(opts.amberFileName).toUpperCase();\r\n } else {\r\n complex.name = `Dynamic ${opts.fileType} molecule`;\r\n }\r\n\r\n visualName = this._addVisual(new ComplexVisual(complex.name, complex));\r\n this._curVisualName = visualName;\r\n\r\n const desc = this.info();\r\n this.logger.info(`Parsed ${opts.fileName} (${\r\n desc.atoms} atoms, ${\r\n desc.bonds} bonds, ${\r\n desc.residues} residues, ${\r\n desc.chains} chains).`);\r\n\r\n if (_.isNumber(this._opts.unit)) {\r\n complex.setCurrentUnit(this._opts.unit);\r\n }\r\n\r\n if (opts.preset) {\r\n // ...removed server access...\r\n } else if (settings.now.autoPreset) {\r\n switch (opts.fileType) {\r\n case 'cml':\r\n this.resetReps('small');\r\n break;\r\n case 'pdb':\r\n case 'mmtf':\r\n case 'cif':\r\n if (hasValidResidues(complex)) {\r\n this.resetReps('macro');\r\n } else {\r\n this.resetReps('small');\r\n }\r\n break;\r\n default:\r\n this.resetReps('default');\r\n break;\r\n }\r\n } else {\r\n this.resetReps('default');\r\n }\r\n } else if (dataSource.id === 'Volume') {\r\n this.resetEd();\r\n visualName = this._onLoadEd(dataSource);\r\n }\r\n\r\n gfx.camera.updateProjectionMatrix();\r\n this._updateFog();\r\n\r\n // reset global transform\r\n gfx.root.resetTransform();\r\n this.resetPivot();\r\n\r\n // set scale to fit everything on the screen\r\n this._objectControls.setScale(settings.now.radiusToFit / this._getBSphereRadius());\r\n\r\n this._resetObjects();\r\n\r\n if (settings.now.autoResolution) {\r\n this._tweakResolution();\r\n }\r\n\r\n if (settings.now.shadow.on) {\r\n this._updateShadowCamera();\r\n }\r\n\r\n if (this._opts.view) {\r\n this.view(this._opts.view);\r\n delete this._opts.view;\r\n }\r\n\r\n this._refreshTitle();\r\n\r\n return visualName;\r\n};\r\n\r\nMiew.prototype.resetEd = function () {\r\n if (this._edLoader) {\r\n this._edLoader.abort();\r\n this._edLoader = null;\r\n }\r\n\r\n // free all resources\r\n this._removeVisual(this._getVolumeVisual());\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype.loadEd = function (source) {\r\n this.resetEd();\r\n\r\n const TheLoader = _.head(io.loaders.find({ source }));\r\n if (!TheLoader) {\r\n this.logger.error(LOADER_NOT_FOUND);\r\n return Promise.reject(new Error(LOADER_NOT_FOUND));\r\n }\r\n\r\n const loader = this._edLoader = new TheLoader(source, { binary: true });\r\n loader.context = this;\r\n return loader.load().then((data) => {\r\n const TheParser = _.head(io.parsers.find({ format: 'ccp4' }));\r\n if (!TheParser) {\r\n throw new Error(PARSER_NOT_FOUND);\r\n }\r\n const parser = new TheParser(data);\r\n parser.context = this;\r\n return parser.parse().then((dataSource) => {\r\n this._onLoadEd(dataSource);\r\n });\r\n }).catch((error) => {\r\n this.logger.error('Could not load ED data');\r\n this.logger.debug(error);\r\n });\r\n};\r\n\r\nMiew.prototype._onLoadEd = function (dataSource) {\r\n dataSource.normalize();\r\n\r\n const volumeVisual = new VolumeVisual('volume', dataSource);\r\n volumeVisual.getMesh().layers.set(gfxutils.LAYERS.VOLUME); // volume mesh is not visible to common render\r\n const visualName = this._addVisual(volumeVisual);\r\n\r\n this._needRender = true;\r\n return visualName;\r\n};\r\n\r\nMiew.prototype._needRebuild = function () {\r\n let needsRebuild = false;\r\n this._forEachComplexVisual((visual) => {\r\n needsRebuild = needsRebuild || visual.needsRebuild();\r\n });\r\n return needsRebuild;\r\n};\r\n\r\nMiew.prototype._rebuildObjects = function () {\r\n const self = this;\r\n const gfx = this._gfx;\r\n let i;\r\n let n;\r\n\r\n // remove old object geometry\r\n const toRemove = [];\r\n for (i = 0; i < gfx.pivot.children.length; ++i) {\r\n const child = gfx.pivot.children[i];\r\n if (!(child instanceof Visual)) {\r\n toRemove.push(child);\r\n }\r\n }\r\n for (i = 0; i < toRemove.length; ++i) {\r\n toRemove[i].parent.remove(toRemove[i]);\r\n }\r\n\r\n setTimeout(() => {\r\n const objList = self._objects;\r\n for (i = 0, n = objList.length; i < n; ++i) {\r\n const obj = objList[i];\r\n if (obj.needsRebuild) {\r\n obj.build();\r\n }\r\n if (obj.getGeometry()) {\r\n gfx.pivot.add(obj.getGeometry());\r\n }\r\n }\r\n }, 10);\r\n};\r\n\r\nMiew.prototype.changeUnit = function (unitIdx, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n throw new Error('There is no complex to change!');\r\n }\r\n\r\n function currentUnitInfo() {\r\n const unit = visual ? visual.getComplex().getCurrentUnit() : 0;\r\n const type = unit > 0 ? (`Bio molecule ${unit}`) : 'Asymmetric unit';\r\n return `Current unit: ${unit} (${type})`;\r\n }\r\n\r\n if (unitIdx === undefined) {\r\n return currentUnitInfo();\r\n }\r\n if (_.isString(unitIdx)) {\r\n unitIdx = Math.max(parseInt(unitIdx, 10), 0);\r\n }\r\n if (visual.getComplex().setCurrentUnit(unitIdx)) {\r\n this._resetScene();\r\n this._updateInfoPanel();\r\n }\r\n return currentUnitInfo();\r\n};\r\n\r\n/**\r\n * Start to rebuild geometry asynchronously.\r\n */\r\nMiew.prototype.rebuild = function () {\r\n if (this._building) {\r\n this.logger.warn('Miew.rebuild(): already building!');\r\n return;\r\n }\r\n this._building = true;\r\n\r\n this.dispatchEvent({ type: 'rebuilding' });\r\n\r\n this._rebuildObjects();\r\n\r\n this._gfx.renderer2d.reset();\r\n\r\n const rebuildActions = [];\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.needsRebuild()) {\r\n rebuildActions.push(visual.rebuild().then(() => new Promise(((resolve) => {\r\n visual.rebuildSelectionGeometry();\r\n resolve();\r\n }))));\r\n }\r\n });\r\n\r\n // Start asynchronous rebuild\r\n const self = this;\r\n this._spinner.spin(this._container);\r\n Promise.all(rebuildActions).then(() => {\r\n self._spinner.stop();\r\n\r\n self._needRender = true;\r\n\r\n self._refreshTitle();\r\n this.dispatchEvent({ type: 'buildingDone' });\r\n self._building = false;\r\n });\r\n};\r\n\r\n/** Mark all representations for rebuilding */\r\nMiew.prototype.rebuildAll = function () {\r\n this._forEachComplexVisual((visual) => {\r\n visual.setNeedsRebuild();\r\n });\r\n};\r\n\r\nMiew.prototype._refreshTitle = function (appendix) {\r\n let title;\r\n appendix = appendix === undefined ? '' : appendix;\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n title = visual.getComplex().name;\r\n const rep = visual.repGet(visual.repCurrent());\r\n title += (rep ? ` – ${rep.mode.name} Mode` : '');\r\n } else {\r\n title = Object.keys(this._visuals).length > 0 ? 'Unknown' : 'No Data';\r\n }\r\n title += appendix;\r\n\r\n this.dispatchEvent({ type: 'titleChanged', data: title });\r\n};\r\n\r\nMiew.prototype.setNeedRender = function () {\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._extractRepresentation = function () {\r\n const changed = [];\r\n\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getSelectionCount() === 0) {\r\n return;\r\n }\r\n\r\n const selector = visual.buildSelectorFromMask(1 << visual.getSelectionBit());\r\n const defPreset = settings.now.presets.default;\r\n const res = visual.repAdd({\r\n selector,\r\n mode: defPreset[0].mode.id,\r\n colorer: defPreset[0].colorer.id,\r\n material: defPreset[0].material.id,\r\n });\r\n if (!res) {\r\n if (visual.repCount() === ComplexVisual.NUM_REPRESENTATION_BITS) {\r\n this.logger.warn(`Number of representations is limited to ${ComplexVisual.NUM_REPRESENTATION_BITS}`);\r\n }\r\n return;\r\n }\r\n\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name: visual.name });\r\n visual.repCurrent(res.index);\r\n\r\n changed.push(visual.name);\r\n });\r\n\r\n if (changed.length > 0) {\r\n this.logger.report(`New representation from selection for complexes: ${changed.join(', ')}`);\r\n }\r\n};\r\n\r\n/**\r\n * Change current representation list.\r\n * @param {array} reps - Representation list.\r\n */\r\nMiew.prototype._setReps = function (reps) {\r\n reps = reps || (this._opts && this._opts.reps) || [];\r\n this._forEachComplexVisual((visual) => visual.resetReps(reps));\r\n};\r\n\r\n/**\r\n * Apply existing preset to current scene.\r\n * @param preset\r\n */\r\nMiew.prototype.applyPreset = function (preset) {\r\n const { presets } = settings.now;\r\n const presList = [\r\n preset || settings.defaults.preset,\r\n settings.defaults.preset,\r\n Object.keys(presets)[0],\r\n ];\r\n let reps = null;\r\n for (let i = 0; !reps && i < presList.length; ++i) {\r\n settings.set('preset', presList[i]);\r\n reps = presets[settings.now.preset];\r\n if (!reps) {\r\n this.logger.warn(`Unknown preset \"${settings.now.preset}\"`);\r\n }\r\n }\r\n this._setReps(reps);\r\n};\r\n\r\n/**\r\n * Reset current representation list to initial values.\r\n * @param {string} [preset] - The source preset in case of uninitialized representation list.\r\n */\r\nMiew.prototype.resetReps = function (preset) {\r\n const reps = this._opts && this._opts.reps;\r\n if (reps) {\r\n this._setReps(reps);\r\n } else {\r\n this.applyPreset(preset);\r\n }\r\n};\r\n\r\n/**\r\n * Get number of representations created so far.\r\n * @returns {number} Number of reps.\r\n */\r\nMiew.prototype.repCount = function (name) {\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repCount() : 0;\r\n};\r\n\r\n/**\r\n * Get or set the current representation index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @param {string=} [name] - Complex name. Defaults to the current one.\r\n * @returns {number} The current index.\r\n */\r\nMiew.prototype.repCurrent = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n const newIdx = visual ? visual.repCurrent(index) : -1;\r\n if (index && newIdx !== index) {\r\n this.logger.warn(`Representation ${index} was not found. Current rep remains unchanged.`);\r\n }\r\n return newIdx;\r\n};\r\n\r\n/**\r\n * Get or set representation by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount}(). Defaults to the current one.\r\n * @param {object=} rep - Optional representation description.\r\n * @param {string=} rep.selector - Selector string.\r\n * @param {string=} rep.mode - Mode id.\r\n * @param {string=} rep.colorer - Colorer id.\r\n * @param {string=} rep.material - Material id.\r\n * @returns {?object} Representation description.\r\n */\r\nMiew.prototype.rep = function (index, rep) {\r\n const visual = this._getComplexVisual('');\r\n if (!visual) {\r\n return null;\r\n }\r\n const res = visual.rep(index, rep);\r\n if (res.status === 'created') {\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name: visual.name });\r\n } else if (res.status === 'changed') {\r\n this.dispatchEvent({ type: 'repChanged', index: res.index, name: visual.name });\r\n }\r\n return res.desc;\r\n};\r\n\r\n/**\r\n * Get representation (not just description) by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount}(). Defaults to the current one.\r\n * @returns {?object} Representation.\r\n */\r\nMiew.prototype.repGet = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repGet(index) : null;\r\n};\r\n\r\n/**\r\n * Add new representation.\r\n * @param {object=} rep - Representation description.\r\n * @returns {number} Index of the new representation.\r\n */\r\nMiew.prototype.repAdd = function (rep, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return -1;\r\n }\r\n\r\n const res = visual.repAdd(rep);\r\n if (res) {\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name });\r\n return res.index;\r\n }\r\n return -1;\r\n};\r\n\r\n/**\r\n * Remove representation.\r\n * @param {number=} index - Zero-based representation index.\r\n */\r\nMiew.prototype.repRemove = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n visual.repRemove(index);\r\n this.dispatchEvent({ type: 'repRemoved', index, name });\r\n};\r\n\r\n/**\r\n * Hide representation.\r\n * @param {number} index - Zero-based representation index.\r\n * @param {boolean=} hide - Specify false to make rep visible, true to hide (by default).\r\n */\r\nMiew.prototype.repHide = function (index, hide, name) {\r\n this._needRender = true;\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repHide(index, hide) : null;\r\n};\r\n\r\nMiew.prototype._setEditMode = function (mode) {\r\n this._editMode = mode;\r\n\r\n const elem = this._msgMode;\r\n if (elem) {\r\n elem.style.opacity = (mode === EDIT_MODE.COMPLEX) ? 0.0 : 1.0;\r\n\r\n if (mode !== EDIT_MODE.COMPLEX) {\r\n const t = elem.getElementsByTagName('p')[0];\r\n t.innerHTML = (mode === EDIT_MODE.COMPONENT) ? 'COMPONENT EDIT MODE' : 'FRAGMENT EDIT MODE';\r\n }\r\n }\r\n\r\n this.dispatchEvent({ type: 'editModeChanged', data: mode === EDIT_MODE.COMPLEX });\r\n};\r\n\r\nMiew.prototype._enterComponentEditMode = function () {\r\n if (this._editMode !== EDIT_MODE.COMPLEX) {\r\n return;\r\n }\r\n\r\n const editors = [];\r\n this._forEachComplexVisual((visual) => {\r\n const editor = visual.beginComponentEdit();\r\n if (editor) {\r\n editors.push(editor);\r\n }\r\n });\r\n\r\n if (editors.length === 0) {\r\n return;\r\n }\r\n\r\n this._editors = editors;\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- ON');\r\n this._setEditMode(EDIT_MODE.COMPONENT);\r\n this._objectControls.keysTranslateObj(true);\r\n};\r\n\r\nMiew.prototype._applyComponentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.COMPONENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n this._objectControls.keysTranslateObj(false);\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].apply();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- OFF (applied)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._discardComponentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.COMPONENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n this._objectControls.keysTranslateObj(false);\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].discard();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- OFF (discarded)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this._needRender = true;\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._enterFragmentEditMode = function () {\r\n if (this._editMode !== EDIT_MODE.COMPLEX) {\r\n return;\r\n }\r\n\r\n const selectedVisuals = [];\r\n this._forEachComplexVisual((visual) => {\r\n if (visual instanceof ComplexVisual\r\n && visual.getSelectionCount() > 0) {\r\n selectedVisuals.push(visual);\r\n }\r\n });\r\n\r\n if (selectedVisuals.length !== 1) {\r\n // either we have no selection or\r\n // we have selected atoms in two or more visuals -- not supported\r\n return;\r\n }\r\n\r\n const editor = selectedVisuals[0].beginFragmentEdit();\r\n if (!editor) {\r\n return;\r\n }\r\n this._editors = [editor];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- ON (single bond)');\r\n this._setEditMode(EDIT_MODE.FRAGMENT);\r\n this._objectControls.allowTranslation(false);\r\n this._objectControls.allowAltObjFreeRotation(editor.isFreeRotationAllowed());\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._applyFragmentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.FRAGMENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].apply();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- OFF (applied)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._discardFragmentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.FRAGMENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].discard();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- OFF (discarded)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._onPick = function (event) {\r\n if (!settings.now.picking) {\r\n // picking is disabled\r\n return;\r\n }\r\n\r\n if (this._animInterval !== null) {\r\n // animation playback is on\r\n return;\r\n }\r\n\r\n if (this._editMode === EDIT_MODE.FRAGMENT) {\r\n // prevent picking in fragment edit mode\r\n return;\r\n }\r\n\r\n if (this._objectControls.isEditingAltObj()) {\r\n // prevent picking during component rotation\r\n return;\r\n }\r\n\r\n // update last pick & find complex\r\n let complex = null;\r\n if (event.obj.atom) {\r\n complex = event.obj.atom.residue.getChain().getComplex();\r\n this._lastPick = event.obj.atom;\r\n } else if (event.obj.residue) {\r\n complex = event.obj.residue.getChain().getComplex();\r\n this._lastPick = event.obj.residue;\r\n } else if (event.obj.chain) {\r\n complex = event.obj.chain.getComplex();\r\n this._lastPick = event.obj.chain;\r\n } else if (event.obj.molecule) {\r\n complex = event.obj.molecule.complex;\r\n this._lastPick = event.obj.molecule;\r\n } else {\r\n this._lastPick = null;\r\n }\r\n\r\n function _updateSelection(visual) {\r\n visual.updateSelectionMask(event.obj);\r\n visual.rebuildSelectionGeometry();\r\n }\r\n\r\n // update visual\r\n if (complex) {\r\n const visual = this._getVisualForComplex(complex);\r\n if (visual) {\r\n _updateSelection(visual);\r\n this._needRender = true;\r\n }\r\n } else {\r\n this._forEachComplexVisual(_updateSelection);\r\n this._needRender = true;\r\n }\r\n\r\n this._updateInfoPanel();\r\n this.dispatchEvent(event);\r\n};\r\n\r\nMiew.prototype._onKeyDown = function (event) {\r\n if (!this._running || !this._hotKeysEnabled) {\r\n return;\r\n }\r\n\r\n // editing keys\r\n if (settings.now.editing) {\r\n switch (event.code) {\r\n case 'KeyC':\r\n this._enterComponentEditMode();\r\n break;\r\n case 'KeyF':\r\n this._enterFragmentEditMode();\r\n break;\r\n case 'KeyA':\r\n switch (this._editMode) {\r\n case EDIT_MODE.COMPONENT:\r\n this._applyComponentEdit();\r\n break;\r\n case EDIT_MODE.FRAGMENT:\r\n this._applyFragmentEdit();\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n case 'KeyD':\r\n switch (this._editMode) {\r\n case EDIT_MODE.COMPONENT:\r\n this._discardComponentEdit();\r\n break;\r\n case EDIT_MODE.FRAGMENT:\r\n this._discardFragmentEdit();\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n default:\r\n }\r\n }\r\n\r\n // other keys\r\n switch (event.code) {\r\n case 'NumpadAdd':\r\n if (event.altKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._forEachComplexVisual((visual) => {\r\n visual.expandSelection();\r\n visual.rebuildSelectionGeometry();\r\n });\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n }\r\n break;\r\n case 'NumpadSubtract':\r\n if (event.altKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._forEachComplexVisual((visual) => {\r\n visual.shrinkSelection();\r\n visual.rebuildSelectionGeometry();\r\n });\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n }\r\n break;\r\n default:\r\n }\r\n};\r\n\r\nMiew.prototype._onKeyUp = function (event) {\r\n if (!this._running || !this._hotKeysEnabled) {\r\n return;\r\n }\r\n\r\n if (event.code === 'KeyX') {\r\n this._extractRepresentation();\r\n }\r\n};\r\n\r\nMiew.prototype._updateInfoPanel = function () {\r\n const info = this._msgAtomInfo.getElementsByTagName('p')[0];\r\n let atom;\r\n let residue;\r\n\r\n let count = 0;\r\n this._forEachComplexVisual((visual) => {\r\n count += visual.getSelectionCount();\r\n });\r\n\r\n while (info.firstChild) {\r\n info.removeChild(info.firstChild);\r\n }\r\n\r\n if (count === 0) {\r\n this._msgAtomInfo.style.opacity = 0.0;\r\n return;\r\n }\r\n\r\n let firstLine = `${String(count)} atom${count !== 1 ? 's' : ''} selected`;\r\n if (this._lastPick !== null) {\r\n firstLine += ', the last pick:';\r\n }\r\n let secondLine = '';\r\n let aName = '';\r\n let coordLine = '';\r\n\r\n if (this._lastPick instanceof Atom) {\r\n atom = this._lastPick;\r\n residue = atom.residue;\r\n\r\n aName = atom.name;\r\n const location = (atom.location !== 32) ? String.fromCharCode(atom.location) : ''; // 32 is code of white-space\r\n secondLine = `${atom.element.fullName} #${atom.serial}${location}: \\\r\n ${residue._chain._name}.${residue._type._name}${residue._sequence}${residue._icode.trim()}.`;\r\n secondLine += aName;\r\n\r\n coordLine = `Coord: (${atom.position.x.toFixed(2).toString()},\\\r\n ${atom.position.y.toFixed(2).toString()},\\\r\n ${atom.position.z.toFixed(2).toString()})`;\r\n } else if (this._lastPick instanceof Residue) {\r\n residue = this._lastPick;\r\n\r\n secondLine = `${residue._type._fullName}: \\\r\n ${residue._chain._name}.${residue._type._name}${residue._sequence}${residue._icode.trim()}`;\r\n } else if (this._lastPick instanceof Chain) {\r\n secondLine = `chain ${this._lastPick._name}`;\r\n } else if (this._lastPick instanceof Molecule) {\r\n secondLine = `molecule ${this._lastPick._name}`;\r\n }\r\n\r\n info.appendChild(document.createTextNode(firstLine));\r\n\r\n if (secondLine !== '') {\r\n info.appendChild(document.createElement('br'));\r\n info.appendChild(document.createTextNode(secondLine));\r\n }\r\n\r\n if (coordLine !== '') {\r\n info.appendChild(document.createElement('br'));\r\n info.appendChild(document.createTextNode(coordLine));\r\n }\r\n\r\n this._msgAtomInfo.style.opacity = 1.0;\r\n};\r\n\r\nMiew.prototype._getAltObj = function () {\r\n if (this._editors) {\r\n let altObj = null;\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n const nextAltObj = this._editors[i].getAltObj();\r\n if (nextAltObj.objects.length > 0) {\r\n if (altObj) {\r\n // we have selected atoms in two or more visuals -- not supported\r\n altObj = null;\r\n break;\r\n }\r\n altObj = nextAltObj;\r\n }\r\n }\r\n if (altObj) {\r\n return altObj;\r\n }\r\n }\r\n\r\n return {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n};\r\n\r\nMiew.prototype.resetPivot = (function () {\r\n const boundingBox = new THREE.Box3();\r\n const center = new THREE.Vector3();\r\n\r\n return function () {\r\n boundingBox.makeEmpty();\r\n this._forEachVisual((visual) => {\r\n boundingBox.union(visual.getBoundaries().boundingBox);\r\n });\r\n\r\n boundingBox.getCenter(center);\r\n this._objectControls.setPivot(center.negate());\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotResidue = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n return function (residue) {\r\n const visual = this._getVisualForComplex(residue.getChain().getComplex());\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n if (residue._controlPoint) {\r\n center.copy(residue._controlPoint);\r\n } else {\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n const amount = residue._atoms.length;\r\n for (let i = 0; i < amount; ++i) {\r\n const p = residue._atoms[i].position;\r\n x += p.x / amount;\r\n y += p.y / amount;\r\n z += p.z / amount;\r\n }\r\n center.set(x, y, z);\r\n }\r\n center.applyMatrix4(visual.matrix).negate();\r\n this._objectControls.setPivot(center);\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotAtom = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n return function (atom) {\r\n const visual = this._getVisualForComplex(atom.residue.getChain().getComplex());\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n center.copy(atom.position);\r\n center.applyMatrix4(visual.matrix).negate();\r\n this._objectControls.setPivot(center);\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.getSelectionCenter = (function () {\r\n const _centerInVisual = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n return function (center, includesAtom, selector) {\r\n center.set(0.0, 0.0, 0.0);\r\n let count = 0;\r\n\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getSelectionCenter(_centerInVisual, includesAtom, selector || visual.getSelectionBit())) {\r\n center.add(_centerInVisual);\r\n count++;\r\n }\r\n });\r\n if (count === 0) {\r\n return false;\r\n }\r\n center.divideScalar(count);\r\n center.negate();\r\n return true;\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotSubset = (function () {\r\n const _center = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n function _includesInCurSelection(atom, selectionBit) {\r\n return atom.mask & (1 << selectionBit);\r\n }\r\n\r\n function _includesInSelector(atom, selector) {\r\n return selector.selector.includesAtom(atom);\r\n }\r\n\r\n return function (selector) {\r\n const includesAtom = (selector) ? _includesInSelector : _includesInCurSelection;\r\n\r\n if (this.getSelectionCenter(_center, includesAtom, selector)) {\r\n this._objectControls.setPivot(_center);\r\n this.dispatchEvent({ type: 'transform' });\r\n } else {\r\n this.logger.warn('selection is empty. Center operation not performed');\r\n }\r\n };\r\n}());\r\n\r\n/**\r\n * Makes a screenshot.\r\n * @param {number} [width] - Width of an image. Defaults to the canvas width.\r\n * @param {number} [height] - Height of an image. Defaults to the width (square) or canvas height,\r\n * if width is omitted too.\r\n * @returns {string} Data URL representing the image contents.\r\n */\r\nMiew.prototype.screenshot = function (width, height) {\r\n const gfx = this._gfx;\r\n const deviceWidth = gfx.renderer.domElement.width;\r\n const deviceHeight = gfx.renderer.domElement.height;\r\n\r\n function fov2Tan(fov) {\r\n return Math.tan(THREE.MathUtils.degToRad(0.5 * fov));\r\n }\r\n\r\n function tan2Fov(tan) {\r\n return THREE.MathUtils.radToDeg(Math.atan(tan)) * 2.0;\r\n }\r\n\r\n function getDataURL() {\r\n let dataURL;\r\n const currBrowser = utils.getBrowser();\r\n\r\n if (currBrowser === utils.browserType.SAFARI) {\r\n const canvas = document.createElement('canvas');\r\n const canvasContext = canvas.getContext('2d');\r\n\r\n canvas.width = width === undefined ? deviceWidth : width;\r\n canvas.height = height === undefined ? deviceHeight : height;\r\n\r\n canvasContext.drawImage(gfx.renderer.domElement, 0, 0, canvas.width, canvas.height);\r\n dataURL = canvas.toDataURL('image/png');\r\n } else {\r\n // Copy current canvas to screenshot\r\n dataURL = gfx.renderer.domElement.toDataURL('image/png');\r\n }\r\n return dataURL;\r\n }\r\n height = height || width;\r\n\r\n let screenshotURI;\r\n if ((width === undefined && height === undefined)\r\n || (width === deviceWidth && height === deviceHeight)) {\r\n // renderer.domElement.toDataURL('image/png') returns flipped image in Safari\r\n // It hasn't been resolved yet, but getScreenshotSafari()\r\n // fixes it using an extra canvas.\r\n screenshotURI = getDataURL();\r\n } else {\r\n const originalAspect = gfx.camera.aspect;\r\n const originalFov = gfx.camera.fov;\r\n const originalTanFov2 = fov2Tan(gfx.camera.fov);\r\n\r\n // screenshot should contain the principal area of interest (a centered square touching screen sides)\r\n const areaOfInterestSize = Math.min(gfx.width, gfx.height);\r\n const areaOfInterestTanFov2 = originalTanFov2 * areaOfInterestSize / gfx.height;\r\n\r\n // set appropriate camera aspect & FOV\r\n const shotAspect = width / height;\r\n gfx.renderer.setPixelRatio(1);\r\n gfx.camera.aspect = shotAspect;\r\n gfx.camera.fov = tan2Fov(areaOfInterestTanFov2 / Math.min(shotAspect, 1.0));\r\n gfx.camera.updateProjectionMatrix();\r\n\r\n // resize canvas to the required size of screenshot\r\n gfx.renderer.setDrawingBufferSize(width, height, 1);\r\n\r\n // make screenshot\r\n this._renderFrame(settings.now.stereo);\r\n screenshotURI = getDataURL();\r\n\r\n // restore original camera & canvas proportions\r\n gfx.renderer.setPixelRatio(window.devicePixelRatio);\r\n gfx.camera.aspect = originalAspect;\r\n gfx.camera.fov = originalFov;\r\n gfx.camera.updateProjectionMatrix();\r\n gfx.renderer.setDrawingBufferSize(gfx.width, gfx.height, window.devicePixelRatio);\r\n this._needRender = true;\r\n }\r\n\r\n return screenshotURI;\r\n};\r\n\r\n/**\r\n * Makes screenshot and initiates a download.\r\n * @param {string} [filename] - Name of a file. Default to a 'screenshot-XXXXX.png', where XXXXX is a current\r\n * date/time in seconds.\r\n * @param {number} [width] - Width of an image. Defaults to the canvas width.\r\n * @param {number} [height] - Height of an image. Defaults to the width (square) or canvas height,\r\n * if width is omitted too.\r\n */\r\nMiew.prototype.screenshotSave = function (filename, width, height) {\r\n const uri = this.screenshot(width, height);\r\n utils.shotDownload(uri, filename);\r\n};\r\n\r\nMiew.prototype.save = function (opts) {\r\n this._export(opts.fileType).then((dataString) => {\r\n const filename = this._visuals[this._curVisualName]._complex.name;\r\n utils.download(dataString, filename, opts.fileType);\r\n this._refreshTitle();\r\n this.dispatchEvent({ type: 'exportingDone' });\r\n }).catch((error) => {\r\n this.logger.error('Could not export data');\r\n this.logger.debug(error);\r\n this._refreshTitle();\r\n this.dispatchEvent({ type: 'exportingDone', error });\r\n });\r\n};\r\n\r\nMiew.prototype._tweakResolution = function () {\r\n const maxPerf = [\r\n ['poor', 100],\r\n ['low', 500],\r\n ['medium', 1000],\r\n ['high', 5000],\r\n ['ultra', Number.MAX_VALUE],\r\n ];\r\n\r\n let atomCount = 0;\r\n this._forEachComplexVisual((visual) => {\r\n atomCount += visual.getComplex().getAtomCount();\r\n });\r\n\r\n if (atomCount > 0) {\r\n const performance = this._gfxScore * 10e5 / atomCount;\r\n // set resolution based on estimated performance\r\n for (let i = 0; i < maxPerf.length; ++i) {\r\n if (performance < maxPerf[i][1]) {\r\n this._autoChangeResolution(maxPerf[i][0]);\r\n break;\r\n }\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._autoChangeResolution = function (resolution) {\r\n if (resolution !== settings.now.resolution) {\r\n this.logger.report(`Your rendering resolution was changed to \"${resolution}\" for best performance.`);\r\n }\r\n settings.now.resolution = resolution;\r\n};\r\n\r\n/**\r\n * Save current settings to cookies.\r\n */\r\nMiew.prototype.saveSettings = function () {\r\n this._cookies.setCookie(this._opts.settingsCookie, JSON.stringify(this.settings.getDiffs(true)));\r\n};\r\n\r\n/**\r\n * Load settings from cookies.\r\n */\r\nMiew.prototype.restoreSettings = function () {\r\n try {\r\n const cookie = this._cookies.getCookie(this._opts.settingsCookie);\r\n const diffs = cookie ? JSON.parse(cookie) : {};\r\n this.settings.applyDiffs(diffs, true);\r\n } catch (e) {\r\n this.logger.error(`Cookies parse error: ${e.message}`);\r\n }\r\n};\r\n\r\n/**\r\n * Reset current settings to the defaults.\r\n */\r\nMiew.prototype.resetSettings = function () {\r\n this.settings.reset();\r\n};\r\n\r\n/*\r\n * DANGEROUS and TEMPORARY. The method should change or disappear in future versions.\r\n * @param {string|object} opts - See {@link Miew} constructor.\r\n * @see {@link Miew#set}, {@link Miew#repAdd}, {@link Miew#rep}.\r\n */\r\nMiew.prototype.setOptions = function (opts) {\r\n if (typeof opts === 'string') {\r\n opts = Miew.options.fromAttr(opts);\r\n }\r\n if (opts.reps) {\r\n this._opts.reps = null;\r\n }\r\n _.merge(this._opts, opts);\r\n if (opts.settings) {\r\n this.set(opts.settings);\r\n }\r\n\r\n this._opts._objects = opts._objects;\r\n this._resetObjects();\r\n\r\n if (opts.load) {\r\n this.load(opts.load, { fileType: opts.type });\r\n }\r\n\r\n if (opts.preset) {\r\n settings.now.preset = opts.preset;\r\n }\r\n\r\n if (opts.reps) {\r\n this.resetReps(opts.preset);\r\n }\r\n\r\n if (this._opts.view) {\r\n this.view(this._opts.view);\r\n delete this._opts.view;\r\n }\r\n\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n visual.getComplex().resetCurrentUnit();\r\n if (_.isNumber(opts.unit)) {\r\n visual.getComplex().setCurrentUnit(opts.unit);\r\n }\r\n this.resetView();\r\n this.rebuildAll();\r\n }\r\n};\r\n\r\nMiew.prototype.info = function (name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return {};\r\n }\r\n const complex = visual.getComplex();\r\n const { metadata } = complex;\r\n return {\r\n id: metadata.id || complex.name || 'UNKNOWN',\r\n title: (metadata.title && metadata.title.join(' ')) || 'UNKNOWN DATA',\r\n atoms: complex.getAtomCount(),\r\n bonds: complex.getBondCount(),\r\n residues: complex.getResidueCount(),\r\n chains: complex.getChainCount(),\r\n };\r\n};\r\n\r\n/*\r\n * OBJECTS SEGMENT\r\n */\r\n\r\nMiew.prototype.addObject = function (objData, bThrow) {\r\n let Ctor = null;\r\n\r\n if (objData.type === LinesObject.prototype.type) {\r\n Ctor = LinesObject;\r\n }\r\n\r\n if (Ctor === null) {\r\n throw new Error(`Unknown scene object type - ${objData.type}`);\r\n }\r\n\r\n try {\r\n const newObj = new Ctor(objData.params, objData.opts);\r\n this._addSceneObject(newObj);\r\n } catch (error) {\r\n if (!bThrow) {\r\n this.logger.debug(`Error during scene object creation: ${error.message}`);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._addSceneObject = function (sceneObject) {\r\n const visual = this._getComplexVisual();\r\n if (sceneObject.build && visual) {\r\n sceneObject.build(visual.getComplex());\r\n this._gfx.pivot.add(sceneObject.getGeometry());\r\n }\r\n const objects = this._objects;\r\n objects[objects.length] = sceneObject;\r\n};\r\n\r\nMiew.prototype._updateObjsToFrame = function (frameData) {\r\n const objs = this._objects;\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n if (objs[i].updateToFrame) {\r\n objs[i].updateToFrame(frameData);\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._resetObjects = function () {\r\n const objs = this._opts._objects;\r\n\r\n this._objects = [];\r\n if (objs) {\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n this.addObject(objs[i], false);\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype.removeObject = function (index) {\r\n const obj = this._objects[index];\r\n if (!obj) {\r\n throw new Error(`Scene object with index ${index} does not exist`);\r\n }\r\n obj.destroy();\r\n this._objects.splice(index, 1);\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Get a string with a URL to reproduce the current scene.\r\n *\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=false] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=false] - when this flag is true, a view information is included\r\n * @returns {string} URL\r\n */\r\nMiew.prototype.getURL = function (opts) {\r\n return options.toURL(this.getState(_.defaults(opts, {\r\n compact: true,\r\n settings: false,\r\n view: false,\r\n })));\r\n};\r\n\r\n/**\r\n * Get a string with a script to reproduce the current scene.\r\n *\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=true] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=true] - when this flag is true, a view information is included\r\n * @returns {string} script\r\n */\r\nMiew.prototype.getScript = function (opts) {\r\n return options.toScript(this.getState(_.defaults(opts, {\r\n compact: true,\r\n settings: true,\r\n view: true,\r\n })));\r\n};\r\n\r\n/*\r\n * Generates object that represents the current state of representations list\r\n * @param {boolean} compareWithDefaults - when this flag is true, reps list is compared (if possible)\r\n * to preset's defaults and only diffs are generated\r\n */\r\nMiew.prototype._compareReps = function (complexVisual, compareWithDefaults) {\r\n const ans = {};\r\n let repCount = 0;\r\n\r\n if (complexVisual) {\r\n repCount = complexVisual.repCount();\r\n }\r\n\r\n const currPreset = settings.defaults.presets[settings.now.preset];\r\n let compare = compareWithDefaults;\r\n if (currPreset === undefined || currPreset.length > repCount) {\r\n compare = false;\r\n ans.preset = 'empty';\r\n } else if (settings.now.preset !== settings.defaults.preset) {\r\n ans.preset = settings.now.preset;\r\n }\r\n\r\n const repsDiff = [];\r\n let emptyReps = true;\r\n for (let i = 0, n = repCount; i < n; ++i) {\r\n repsDiff[i] = complexVisual.repGet(i).compare(compare ? currPreset[i] : null);\r\n if (!_.isEmpty(repsDiff[i])) {\r\n emptyReps = false;\r\n }\r\n }\r\n if (!emptyReps) {\r\n ans.reps = repsDiff;\r\n }\r\n return ans;\r\n};\r\n\r\n/*\r\n * Obtain object that represents current state of miew (might be used as options in constructor).\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=false] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=false] - when this flag is true, a view information is included\r\n * @returns {Object} State object.\r\n */\r\nMiew.prototype.getState = function (opts) {\r\n const state = {};\r\n\r\n opts = _.defaults(opts, {\r\n compact: true,\r\n settings: false,\r\n view: false,\r\n });\r\n\r\n // load\r\n const visual = this._getComplexVisual();\r\n if (visual !== null) {\r\n const complex = visual.getComplex();\r\n const { metadata } = complex;\r\n if (metadata.id) {\r\n const format = metadata.format ? `${metadata.format}:` : '';\r\n state.load = format + metadata.id;\r\n }\r\n const unit = complex.getCurrentUnit();\r\n if (unit !== 1) {\r\n state.unit = unit;\r\n }\r\n }\r\n\r\n // representations\r\n const repsInfo = this._compareReps(visual, opts.compact);\r\n if (repsInfo.preset) {\r\n state.preset = repsInfo.preset;\r\n }\r\n\r\n if (repsInfo.reps) {\r\n state.reps = repsInfo.reps;\r\n }\r\n\r\n // objects\r\n const objects = this._objects;\r\n const objectsState = [];\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n objectsState[i] = objects[i].identify();\r\n }\r\n if (objects.length > 0) {\r\n state._objects = objectsState;\r\n }\r\n\r\n // view\r\n if (opts.view) {\r\n state.view = this.view();\r\n }\r\n\r\n // settings\r\n if (opts.settings) {\r\n const diff = this.settings.getDiffs(false);\r\n if (!_.isEmpty(diff)) {\r\n state.settings = diff;\r\n }\r\n }\r\n\r\n return state;\r\n};\r\n\r\n/**\r\n * Get parameter value.\r\n * @param {string} param - Parameter name or path (e.g. 'modes.BS.atom').\r\n * @param {*=} value - Default value.\r\n * @returns {*} Parameter value.\r\n */\r\nMiew.prototype.get = function (param, value) {\r\n return settings.get(param, value);\r\n};\r\n\r\nMiew.prototype._clipPlaneUpdateValue = function (radius) {\r\n const clipPlaneValue = Math.max(\r\n this._gfx.camera.position.z - radius * settings.now.draft.clipPlaneFactor,\r\n settings.now.camNear,\r\n );\r\n\r\n const opts = { clipPlaneValue };\r\n this._forEachComplexVisual((visual) => {\r\n visual.setUberOptions(opts);\r\n });\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const obj = this._objects[i];\r\n if (obj._line) {\r\n obj._line.material.setUberOptions(opts);\r\n }\r\n }\r\n if (this._picker !== null) {\r\n this._picker.clipPlaneValue = clipPlaneValue;\r\n }\r\n};\r\n\r\nMiew.prototype._fogFarUpdateValue = function () {\r\n if (this._picker !== null) {\r\n if (this._gfx.scene.fog) {\r\n this._picker.fogFarValue = this._gfx.scene.fog.far;\r\n } else {\r\n this._picker.fogFarValue = undefined;\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._updateShadowmapMeshes = function (process) {\r\n this._forEachComplexVisual((visual) => {\r\n const reprList = visual._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n process(repr.geo, repr.material);\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype._updateMaterials = function (values, needTraverse = false, process = undefined) {\r\n this._forEachComplexVisual((visual) => visual.setMaterialValues(values, needTraverse, process));\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const obj = this._objects[i];\r\n if (obj._line) {\r\n obj._line.material.setValues(values);\r\n obj._line.material.needsUpdate = true;\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._fogAlphaChanged = function () {\r\n this._forEachComplexVisual((visual) => {\r\n visual.setUberOptions({\r\n fogAlpha: settings.now.fogAlpha,\r\n });\r\n });\r\n};\r\n\r\nMiew.prototype._embedWebXR = function () {\r\n // switch off\r\n if (settings.now.stereo !== 'WEBVR') {\r\n if (this.webVR) {\r\n this.webVR.disable();\r\n }\r\n this.webVR = null;\r\n return;\r\n }\r\n // switch on\r\n if (!this.webVR) {\r\n this.webVR = new WebVRPoC(() => {\r\n this._requestAnimationFrame(() => this._onTick());\r\n this._needRender = true;\r\n this._onResize();\r\n });\r\n }\r\n this.webVR.enable(this._gfx);\r\n};\r\n\r\nMiew.prototype._initOnSettingsChanged = function () {\r\n const on = (props, func) => {\r\n props = _.isArray(props) ? props : [props];\r\n props.forEach((prop) => {\r\n this.settings.addEventListener(`change:${prop}`, func);\r\n });\r\n };\r\n\r\n on('modes.VD.frame', () => {\r\n const volume = this._getVolumeVisual();\r\n if (volume === null) return;\r\n\r\n volume.showFrame(settings.now.modes.VD.frame);\r\n this._needRender = true;\r\n });\r\n\r\n on('modes.VD.isoMode', () => {\r\n const volume = this._getVolumeVisual();\r\n if (volume === null) return;\r\n\r\n volume.getMesh().material.updateDefines();\r\n this._needRender = true;\r\n });\r\n\r\n on('bg.color', () => {\r\n this._onBgColorChanged();\r\n });\r\n\r\n on('ao', () => {\r\n const values = { normalsToGBuffer: settings.now.ao };\r\n this._setUberMaterialValues(values);\r\n });\r\n\r\n on('zSprites', () => {\r\n this.rebuildAll();\r\n });\r\n\r\n on('fogColor', () => {\r\n this._onFogColorChanged();\r\n });\r\n\r\n on('fogColorEnable', () => {\r\n this._onFogColorChanged();\r\n });\r\n\r\n on('bg.transparent', (evt) => {\r\n const gfx = this._gfx;\r\n if (gfx) {\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n }\r\n // update materials\r\n this._updateMaterials({ fogTransparent: evt.value });\r\n this.rebuildAll();\r\n });\r\n\r\n on('draft.clipPlane', (evt) => {\r\n // update materials\r\n this._updateMaterials({ clipPlane: evt.value });\r\n this.rebuildAll();\r\n });\r\n\r\n on('shadow.on', (evt) => {\r\n // update materials\r\n const values = { shadowmap: evt.value, shadowmapType: settings.now.shadow.type };\r\n const gfx = this._gfx;\r\n if (gfx) {\r\n gfx.renderer.shadowMap.enabled = Boolean(values.shadowmap);\r\n }\r\n this._updateMaterials(values, true);\r\n if (values.shadowmap) {\r\n this._updateShadowCamera();\r\n this._updateShadowmapMeshes(meshutils.createShadowmapMaterial);\r\n } else {\r\n this._updateShadowmapMeshes(meshutils.removeShadowmapMaterial);\r\n }\r\n this._needRender = true;\r\n });\r\n\r\n on('shadow.type', (evt) => {\r\n // update materials if shadowmap is enable\r\n if (settings.now.shadow.on) {\r\n this._updateMaterials({ shadowmapType: evt.value }, true);\r\n this._needRender = true;\r\n }\r\n });\r\n\r\n on('shadow.radius', (evt) => {\r\n for (let i = 0; i < this._gfx.scene.children.length; i++) {\r\n if (this._gfx.scene.children[i].shadow !== undefined) {\r\n const light = this._gfx.scene.children[i];\r\n light.shadow.radius = evt.value;\r\n this._needRender = true;\r\n }\r\n }\r\n });\r\n\r\n on('fps', () => {\r\n this._fps.show(settings.now.fps);\r\n });\r\n\r\n on(['fog', 'fogNearFactor', 'fogFarFactor'], () => {\r\n this._updateFog();\r\n this._needRender = true;\r\n });\r\n\r\n on('fogAlpha', () => {\r\n const { fogAlpha } = settings.now;\r\n if (fogAlpha < 0 || fogAlpha > 1) {\r\n this.logger.warn('fogAlpha must belong range [0,1]');\r\n }\r\n this._fogAlphaChanged();\r\n this._needRender = true;\r\n });\r\n\r\n on('autoResolution', (evt) => {\r\n if (evt.value && !this._gfxScore) {\r\n this.logger.warn('Benchmarks are missed, autoresolution will not work! '\r\n + 'Autoresolution should be set during miew startup.');\r\n }\r\n });\r\n\r\n on('stereo', () => {\r\n this._embedWebXR(settings.now.stereo === 'WEBVR');\r\n this._needRender = true;\r\n });\r\n\r\n on(['transparency', 'palette'], () => {\r\n this.rebuildAll();\r\n });\r\n\r\n on('resolution', () => {\r\n // update complex visuals\r\n this.rebuildAll();\r\n\r\n // update volume visual\r\n const volume = this._getVolumeVisual();\r\n if (volume) {\r\n volume.getMesh().material.updateDefines();\r\n this._needRender = true;\r\n }\r\n });\r\n\r\n on(['axes', 'fxaa', 'ao',\r\n 'outline.on', 'outline.color', 'outline.threshold', 'outline.thickness'], () => {\r\n this._needRender = true;\r\n });\r\n};\r\n\r\n/**\r\n * Set parameter value.\r\n * @param {string|object} params - Parameter name or path (e.g. 'modes.BS.atom') or even settings object.\r\n * @param {*=} value - Value.\r\n */\r\nMiew.prototype.set = function (params, value) {\r\n settings.set(params, value);\r\n};\r\n\r\n/**\r\n * Select atoms with selection string.\r\n * @param {string} expression - string expression of selection\r\n * @param {boolean=} append - true to append selection atoms to current selection, false to rewrite selection\r\n */\r\nMiew.prototype.select = function (expression, append) {\r\n const visual = this._getComplexVisual();\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n let sel = expression;\r\n if (_.isString(expression)) {\r\n sel = selectors.parse(expression).selector;\r\n }\r\n\r\n visual.select(sel, append);\r\n this._lastPick = null;\r\n\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n};\r\n\r\nconst VIEW_VERSION = '1';\r\n\r\n/**\r\n * Get or set view info packed into string.\r\n *\r\n * **Note:** view is stored for *left-handed* cs, euler angles are stored in radians and *ZXY-order*,\r\n *\r\n * @param {string=} expression - Optional string encoded the view\r\n */\r\nMiew.prototype.view = function (expression) {\r\n const self = this;\r\n const { pivot } = this._gfx;\r\n let transform = [];\r\n const eulerOrder = 'ZXY';\r\n\r\n function encode() {\r\n const pos = pivot.position;\r\n const scale = self._objectControls.getScale() / settings.now.radiusToFit;\r\n const euler = new THREE.Euler();\r\n euler.setFromQuaternion(self._objectControls.getOrientation(), eulerOrder);\r\n transform = [\r\n pos.x, pos.y, pos.z,\r\n scale,\r\n euler.x, euler.y, euler.z,\r\n ];\r\n return VIEW_VERSION + utils.arrayToBase64(transform, Float32Array);\r\n }\r\n\r\n function decode() {\r\n // backwards compatible: old non-versioned view is the 0th version\r\n if (expression.length === 40) {\r\n expression = `0${expression}`;\r\n }\r\n\r\n const version = expression[0];\r\n transform = utils.arrayFromBase64(expression.substr(1), Float32Array);\r\n\r\n // apply adapter for old versions\r\n if (version !== VIEW_VERSION) {\r\n if (version === '0') {\r\n // cancel radiusToFit included in old views\r\n transform[3] /= 8.0;\r\n } else {\r\n // do nothing\r\n self.logger.warn(`Encoded view version mismatch, stored as ${version} vs ${VIEW_VERSION} expected`);\r\n return;\r\n }\r\n }\r\n\r\n const interpolator = self._interpolator;\r\n const srcView = interpolator.createView();\r\n srcView.position.copy(pivot.position);\r\n srcView.scale = self._objectControls.getScale();\r\n srcView.orientation.copy(self._objectControls.getOrientation());\r\n\r\n const dstView = interpolator.createView();\r\n dstView.position.set(transform[0], transform[1], transform[2]);\r\n\r\n // hack to make preset views work after we moved centering offset to visual nodes\r\n // FIXME should only store main pivot offset in preset\r\n if (self._getComplexVisual()) {\r\n dstView.position.sub(self._getComplexVisual().position);\r\n }\r\n\r\n dstView.scale = transform[3]; // eslint-disable-line prefer-destructuring\r\n dstView.orientation.setFromEuler(new THREE.Euler(transform[4], transform[5], transform[6], eulerOrder));\r\n\r\n interpolator.setup(srcView, dstView);\r\n }\r\n\r\n if (typeof expression === 'undefined') {\r\n return encode();\r\n }\r\n decode();\r\n\r\n return expression;\r\n};\r\n\r\n/*\r\n * Update current view due to viewinterpolator state\r\n */\r\nMiew.prototype._updateView = function () {\r\n const self = this;\r\n const { pivot } = this._gfx;\r\n\r\n const interpolator = this._interpolator;\r\n if (!interpolator.wasStarted()) {\r\n interpolator.start();\r\n }\r\n\r\n if (!interpolator.isMoving()) {\r\n return;\r\n }\r\n\r\n const res = interpolator.getCurrentView();\r\n if (res.success) {\r\n const curr = res.view;\r\n pivot.position.copy(curr.position);\r\n self._objectControls.setScale(curr.scale * settings.now.radiusToFit);\r\n self._objectControls.setOrientation(curr.orientation);\r\n this.dispatchEvent({ type: 'transform' });\r\n self._needRender = true;\r\n }\r\n};\r\n\r\n/**\r\n * Translate object by vector\r\n * @param {number} x - translation value (Ang) along model's X axis\r\n * @param {number} y - translation value (Ang) along model's Y axis\r\n * @param {number} z - translation value (Ang) along model's Z axis\r\n */\r\nMiew.prototype.translate = function (x, y, z) {\r\n this._objectControls.translatePivot(x, y, z);\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Rotate object by Euler angles\r\n * @param {number} x - rotation angle around X axis in radians\r\n * @param {number} y - rotation angle around Y axis in radians\r\n * @param {number} z - rotation angle around Z axis in radians\r\n */\r\nMiew.prototype.rotate = function (x, y, z) {\r\n this._objectControls.rotate(new THREE.Quaternion().setFromEuler(new THREE.Euler(x, y, z, 'XYZ')));\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Scale object by factor\r\n * @param {number} factor - scale multiplier, should greater than zero\r\n */\r\nMiew.prototype.scale = function (factor) {\r\n if (factor <= 0) {\r\n throw new RangeError('Scale should be greater than zero');\r\n }\r\n this._objectControls.scale(factor);\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Center view on selection\r\n * @param {empty | subset | string} selector - defines part of molecule which must be centered (\r\n * empty - center on current selection;\r\n * subset - center on picked atom/residue/molecule;\r\n * string - center on atoms correspond to selection string)\r\n */\r\nMiew.prototype.center = function (selector) {\r\n // no arguments - center on current selection;\r\n if (selector === undefined) {\r\n this.setPivotSubset();\r\n this._needRender = true;\r\n return;\r\n }\r\n // subset with atom or residue - center on picked atom/residue;\r\n if (selector.obj !== undefined && ('atom' in selector.obj || 'residue' in selector.obj)) { // from event with selection\r\n if ('atom' in selector.obj) {\r\n this.setPivotAtom(selector.obj.atom);\r\n } else {\r\n this.setPivotResidue(selector.obj.residue);\r\n }\r\n this._needRender = true;\r\n return;\r\n }\r\n // string - center on atoms correspond to selection string\r\n if (selector.obj === undefined && selector !== '') {\r\n const sel = selectors.parse(selector);\r\n if (sel.error === undefined) {\r\n this.setPivotSubset(sel);\r\n this._needRender = true;\r\n return;\r\n }\r\n }\r\n // empty subset or incorrect/empty string - center on all molecule;\r\n this.resetPivot();\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Build selector that contains all atoms within given distance from group of atoms\r\n * @param {Selector} selector - selector describing source group of atoms\r\n * @param {number} radius - distance\r\n * @returns {Selector} selector describing result group of atoms\r\n */\r\nMiew.prototype.within = function (selector, radius) {\r\n const visual = this._getComplexVisual();\r\n if (!visual) {\r\n return selectors.None();\r\n }\r\n\r\n if (selector instanceof String) {\r\n selector = selectors.parse(selector);\r\n }\r\n\r\n const res = visual.within(selector, radius);\r\n if (res) {\r\n visual.rebuildSelectionGeometry();\r\n this._needRender = true;\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Get atom position in 2D canvas coords\r\n * @param {string} fullAtomName - full atom name, like A.38.CG\r\n * @returns {Object} {x, y} or false if atom not found\r\n */\r\nMiew.prototype.projected = function (fullAtomName, complexName) {\r\n const visual = this._getComplexVisual(complexName);\r\n if (!visual) {\r\n return false;\r\n }\r\n\r\n const atom = visual.getComplex().getAtomByFullname(fullAtomName);\r\n if (atom === null) {\r\n return false;\r\n }\r\n\r\n const pos = atom.position.clone();\r\n // we consider atom position to be affected only by common complex transform\r\n // ignoring any transformations that may add during editing\r\n this._gfx.pivot.updateMatrixWorldRecursive();\r\n this._gfx.camera.updateMatrixWorldRecursive();\r\n this._gfx.pivot.localToWorld(pos);\r\n pos.project(this._gfx.camera);\r\n\r\n return {\r\n x: (pos.x + 1.0) * 0.5 * this._gfx.width,\r\n y: (1.0 - pos.y) * 0.5 * this._gfx.height,\r\n };\r\n};\r\n\r\n/**\r\n * Replace secondary structure with calculated one.\r\n *\r\n * DSSP algorithm implementation is used.\r\n *\r\n * Kabsch W, Sander C. 1983. Dictionary of protein secondary structure: pattern recognition of hydrogen-bonded and\r\n * geometrical features. Biopolymers. 22(12):2577-2637. doi:10.1002/bip.360221211.\r\n *\r\n * @param {string=} complexName - complex name\r\n */\r\nMiew.prototype.dssp = function (complexName) {\r\n const visual = this._getComplexVisual(complexName);\r\n if (!visual) {\r\n return;\r\n }\r\n visual.getComplex().dssp();\r\n\r\n // rebuild dependent representations (cartoon or ss-colored)\r\n visual._reprList.forEach((rep) => {\r\n if (rep.mode.id === 'CA' || rep.colorer.id === 'SS') {\r\n rep.needsRebuild = true;\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype.exportCML = function () {\r\n const self = this;\r\n\r\n function extractRotation(m) {\r\n const xAxis = new THREE.Vector3();\r\n const yAxis = new THREE.Vector3();\r\n const zAxis = new THREE.Vector3();\r\n m.extractBasis(xAxis, yAxis, zAxis);\r\n xAxis.normalize();\r\n yAxis.normalize();\r\n zAxis.normalize();\r\n const retMat = new THREE.Matrix4();\r\n retMat.identity();\r\n retMat.makeBasis(xAxis, yAxis, zAxis);\r\n return retMat;\r\n }\r\n\r\n function updateCMLData(complex) {\r\n const { root } = self._gfx;\r\n const mat = extractRotation(root.matrixWorld);\r\n const v4 = new THREE.Vector4(0, 0, 0, 0);\r\n const vCenter = new THREE.Vector4(0, 0, 0, 0);\r\n let xml = null;\r\n let ap = null;\r\n\r\n // update atoms in cml\r\n complex.forEachAtom((atom) => {\r\n if (atom.xmlNodeRef && atom.xmlNodeRef.xmlNode) {\r\n xml = atom.xmlNodeRef.xmlNode;\r\n ap = atom.position;\r\n v4.set(ap.x, ap.y, ap.z, 1.0);\r\n v4.applyMatrix4(mat);\r\n xml.setAttribute('x3', v4.x.toString());\r\n xml.setAttribute('y3', v4.y.toString());\r\n xml.setAttribute('z3', v4.z.toString());\r\n xml.removeAttribute('x2');\r\n xml.removeAttribute('y2');\r\n }\r\n });\r\n // update stereo groups in cml\r\n complex.forEachSGroup((sGroup) => {\r\n if (sGroup.xmlNodeRef && sGroup.xmlNodeRef.xmlNode) {\r\n xml = sGroup.xmlNodeRef.xmlNode;\r\n ap = sGroup.getPosition();\r\n v4.set(ap.x, ap.y, ap.z, 1.0);\r\n const cp = sGroup.getCentralPoint();\r\n if (cp === null) {\r\n v4.applyMatrix4(mat);\r\n } else {\r\n vCenter.set(cp.x, cp.y, cp.z, 0.0);\r\n v4.add(vCenter);\r\n v4.applyMatrix4(mat); // pos in global space\r\n vCenter.set(cp.x, cp.y, cp.z, 1.0);\r\n vCenter.applyMatrix4(mat);\r\n v4.sub(vCenter);\r\n }\r\n xml.setAttribute('x', v4.x.toString());\r\n xml.setAttribute('y', v4.y.toString());\r\n xml.setAttribute('z', v4.z.toString());\r\n }\r\n });\r\n }\r\n\r\n const visual = self._getComplexVisual();\r\n const complex = visual ? visual.getComplex() : null;\r\n if (complex && complex.originalCML) {\r\n updateCMLData(complex);\r\n\r\n // serialize xml structure to string\r\n const oSerializer = new XMLSerializer();\r\n return oSerializer.serializeToString(complex.originalCML);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Reproduce the RCSB PDB Molecule of the Month style by David S. Goodsell\r\n *\r\n * @see http://pdb101.rcsb.org/motm/motm-about\r\n */\r\nMiew.prototype.motm = function () {\r\n settings.set({\r\n fogColorEnable: true,\r\n fogColor: 0x000000,\r\n outline: { on: true, threshold: 0.01 },\r\n bg: { color: 0xffffff },\r\n });\r\n\r\n this._forEachComplexVisual((visual) => {\r\n const rep = [];\r\n const complex = visual.getComplex();\r\n const palette = palettes.get(settings.now.palette);\r\n for (let i = 0; i < complex.getChainCount(); i++) {\r\n const curChainName = complex._chains[i]._name;\r\n const curChainColor = palette.getChainColor(curChainName);\r\n rep[i] = {\r\n selector: `chain ${curChainName}`,\r\n mode: 'VW',\r\n colorer: ['CB', { color: curChainColor, factor: 0.9 }],\r\n material: 'FL',\r\n };\r\n }\r\n visual.resetReps(rep);\r\n });\r\n};\r\n\r\nMiew.prototype.VERSION = (typeof PACKAGE_VERSION !== 'undefined' && PACKAGE_VERSION) || '0.0.0-dev';\r\n\r\n// Uncomment this to get debug trace:\r\n// Miew.prototype.debugTracer = new utils.DebugTracer(Miew.prototype);\r\n\r\n_.assign(Miew, /** @lends Miew */ {\r\n VERSION: Miew.prototype.VERSION,\r\n\r\n registeredPlugins: [],\r\n\r\n // export namespaces // TODO: WIP: refactoring external interface\r\n chem,\r\n io,\r\n modes,\r\n colorers,\r\n materials,\r\n palettes,\r\n options,\r\n settings,\r\n utils,\r\n gfx: {\r\n Representation,\r\n },\r\n\r\n /**\r\n * Third-party libraries packaged together with Miew.\r\n *\r\n * @property {object} lodash - [Lodash](https://lodash.com/), a modern JavaScript utility library delivering\r\n * modularity, performance & extras.\r\n * @property {object} three - [three.js](https://threejs.org/), JavaScript 3D library.\r\n *\r\n * @example\r\n * var _ = Miew.thirdParty.lodash;\r\n * var opts = _.merge({ ... }, Miew.options.fromURL(window.location.search));\r\n * var miew = new Miew(opts);\r\n */\r\n thirdParty: {\r\n lodash: _,\r\n three: THREE,\r\n },\r\n});\r\n\r\nexport default Miew;\r\n","import palettes from '../gfx/palettes';\r\nimport settings from '../settings';\r\n\r\nconst modeIdDesc = {\r\n $help: [\r\n 'Rendering mode shortcut',\r\n ' BS - balls and sticks mode',\r\n ' LN - lines mode',\r\n ' LC - licorice mode',\r\n ' VW - van der waals mode',\r\n ' TR - trace mode',\r\n ' TU - tube mode',\r\n ' CA - cartoon mode',\r\n ' SA - isosurface mode',\r\n ' QS - quick surface mode',\r\n ' SE - solvent excluded mode',\r\n ' TX - text mode',\r\n ],\r\n BS: {\r\n $help: [\r\n ' Balls and sticks',\r\n ' aromrad = #aromatic radius',\r\n ' atom = #atom radius',\r\n ' bond = #bond radius',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' space = #space value\\n',\r\n ],\r\n },\r\n CA: {\r\n $help: [\r\n ' Cartoon',\r\n ' arrow = #arrow size',\r\n ' depth = #depth of surface',\r\n ' heightSegmentsRatio = ',\r\n ' radius = #tube radius',\r\n ' tension = #',\r\n ' width = #secondary width\\n',\r\n ],\r\n },\r\n LN: {\r\n $help: [\r\n ' Lines',\r\n ' atom = #atom radius',\r\n ' chunkarom = ',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' offsarom = \\n',\r\n ],\r\n },\r\n LC: {\r\n $help: [\r\n ' Licorice',\r\n ' aromrad = #aromatic radius',\r\n ' bond = #bond radius',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' space = #space value\\n',\r\n ],\r\n },\r\n VW: {\r\n $help: [\r\n ' Van der Waals',\r\n ' nothing\\n',\r\n ],\r\n },\r\n TR: {\r\n $help: [\r\n ' Trace',\r\n ' radius = #tube radius\\n',\r\n ],\r\n },\r\n TU: {\r\n $help: [\r\n ' Tube',\r\n ' heightSegmentsRatio = ',\r\n ' radius = #tube radius',\r\n ' tension = \\n',\r\n ],\r\n },\r\n SA: {\r\n $help: [\r\n ' Surface',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n QS: {\r\n $help: [\r\n ' Quick surface',\r\n ' isoValue = ',\r\n ' scale = ',\r\n ' wireframe = ',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n SE: {\r\n $help: [\r\n ' Solvent excluded surface',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n TX: {\r\n $help: [\r\n ' Text mode',\r\n ' template = string that can include \"{{ id }}\"',\r\n ' it will be replaced by value, id can be one of next:',\r\n ' serial, name, type, sequence, residue, chain, hetatm, water\\n',\r\n ' horizontalAlign = {\"left\", \"right\", \"center\"}',\r\n ' verticalAlign = {\"top\", \"bottom\", \"middle\"}',\r\n ' dx = #offset along x',\r\n ' dy = #offset along y',\r\n ' dz = #offset along z',\r\n ' fg = #text color modificator',\r\n ' could be keyword, named color or hex',\r\n ' fg = #back color modificator',\r\n ' could be keyword, named color or hex',\r\n ' showBg = #if set show background',\r\n ' plate under text',\r\n ],\r\n },\r\n};\r\n\r\nconst colorDesc = {\r\n $help: [\r\n 'Coloring mode shortcut',\r\n ' EL - color by element',\r\n ' CH - color by chain',\r\n ' SQ - color by sequence',\r\n ' RT - color by residue type',\r\n ' SS - color by secondary structure',\r\n ' UN - uniform',\r\n ],\r\n UN: {\r\n $help: [\r\n 'Parameters of coloring modes customization',\r\n ' Uniform',\r\n ' color = #RGB->HEX->dec\\n',\r\n ],\r\n color: {\r\n $help: Object.keys(palettes.get(settings.now.palette).namedColors).sort().join('\\n'),\r\n },\r\n },\r\n};\r\n\r\nconst materialDesc = {\r\n $help: [\r\n 'Material shortcut',\r\n ' DF - diffuse',\r\n ' TR - transparent',\r\n ' SF - soft plastic',\r\n ' PL - glossy plastic',\r\n ' ME - metal',\r\n ' GL - glass',\r\n ],\r\n};\r\n\r\nconst addRepDesc = {\r\n $help: [\r\n 'Short (packed) representation description as a set of variables',\r\n ' s=',\r\n ' selector property',\r\n ' m=[!:[,...]]',\r\n ' render mode property',\r\n ' c=[!:[,...]]',\r\n ' color mode property',\r\n ' mt=',\r\n ' material property',\r\n ],\r\n s: {\r\n $help: 'Selection expression string as it is in menu->representations->selection',\r\n },\r\n m: modeIdDesc,\r\n c: colorDesc,\r\n mt: materialDesc,\r\n};\r\n\r\nconst setGetParameterDesc = {\r\n $help: [\r\n 'Parameters of rendering modes customization: modes',\r\n 'Parameters of colorer customization: colorers',\r\n 'Autobuild: autobuild = (|)',\r\n ],\r\n modes: modeIdDesc,\r\n colorers: colorDesc,\r\n};\r\n\r\nconst help = {\r\n $help: [\r\n 'help (| )',\r\n 'You can get detailed information about command options',\r\n ' using \"help cmd.opt.opt.[...]\"\\n',\r\n ' you can use one line comments',\r\n ' everything started from (#|//) will be skipped',\r\n ' Example: >build //some comment\\n',\r\n 'List of available commands:',\r\n ],\r\n reset: {\r\n $help: [\r\n 'Reload current object, delete all representations',\r\n ' Nothing will work until load new object',\r\n ],\r\n },\r\n load: {\r\n $help: [\r\n 'load (||-f [<*.NC FILE URL STRING>])',\r\n ' Load new pdb object from selected source',\r\n ],\r\n PDBID: {\r\n $help: 'pdb id in remote molecule database',\r\n },\r\n URL: {\r\n $help: 'url to source file',\r\n },\r\n f: {\r\n $help: [\r\n 'open file system dialog to fetch local file',\r\n 'optionally you can determine trajectory file',\r\n 'via URL for *.top model',\r\n ],\r\n },\r\n },\r\n clear: {\r\n $help: 'No args. Clear terminal',\r\n },\r\n add: {\r\n $help: [\r\n 'add [] []',\r\n ' Add new item to representation set with',\r\n ' default or params',\r\n ],\r\n REP_NAME: {\r\n $help: 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n },\r\n DESCRIPTION: addRepDesc,\r\n },\r\n rep: {\r\n $help: [\r\n 'rep [|] []',\r\n ' set current representation by name or index',\r\n ' edit current representation by ',\r\n ],\r\n REP_NAME: {\r\n $help: [\r\n 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n 'Must be declared before',\r\n ],\r\n },\r\n REP_INDEX: {\r\n $help: 'Index of available representation',\r\n },\r\n DESCRIPTION: addRepDesc,\r\n },\r\n remove: {\r\n $help: [\r\n 'remove (|)',\r\n 'Remove representation by name or index',\r\n ],\r\n REP_NAME: {\r\n $help: [\r\n 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n 'Must be declared before',\r\n ],\r\n },\r\n REP_INDEX: {\r\n $help: 'Index of available representation',\r\n },\r\n },\r\n selector: {\r\n $help: [\r\n 'selector ',\r\n ' set selector from EXPRESSION to current representation',\r\n ],\r\n EXPRESSION: {\r\n $help: 'Selection expression string as it is in menu->representations->selection',\r\n },\r\n },\r\n mode: {\r\n $help: [\r\n 'mode [=...]',\r\n ' set rendering mode and apply parameters to current representation',\r\n ],\r\n MODE_ID: modeIdDesc,\r\n },\r\n color: {\r\n $help: [\r\n 'color [=...]',\r\n ' set colorer and apply parameters to current representation',\r\n ],\r\n COLORER_ID: colorDesc,\r\n },\r\n material: {\r\n $help: [\r\n 'material ',\r\n ' set material to current representation',\r\n ],\r\n MATERIAL_ID: materialDesc,\r\n },\r\n build: {\r\n $help: 'build help str',\r\n add: {\r\n $help: 'build.add',\r\n new: {\r\n $help: [\r\n 'add.new',\r\n 'add.new new line 1',\r\n 'add.new new line 2',\r\n 'add.new new line 3',\r\n ],\r\n },\r\n },\r\n del: {\r\n $help: 'build.del',\r\n },\r\n },\r\n list: {\r\n $help: [\r\n 'list [-e|-s||]',\r\n 'Print representations if no args print list of representations',\r\n ' -e expand list and show all representations',\r\n ' -s show all user-registered selectors',\r\n ' | show only current representation',\r\n ],\r\n },\r\n hide: {\r\n $help: [\r\n 'hide (|)',\r\n 'Hide representation referenced in args',\r\n ],\r\n },\r\n show: {\r\n $help: [\r\n 'show (|)',\r\n 'Show representation referenced in args',\r\n ],\r\n },\r\n get: {\r\n $help: [\r\n 'get ',\r\n 'Print value',\r\n ' - path to option use get.PARAMETER to get more info',\r\n ],\r\n PARAMETER: setGetParameterDesc,\r\n },\r\n set: {\r\n $help: [\r\n 'set ',\r\n 'Set with ',\r\n ' - path to option use set.PARAMETER to get more info',\r\n ],\r\n PARAMETER: setGetParameterDesc,\r\n },\r\n set_save: {\r\n $help: [\r\n 'set_save',\r\n 'Save current settings to cookie',\r\n ],\r\n },\r\n set_restore: {\r\n $help: [\r\n 'set_restore',\r\n 'Load and apply settings from cookie',\r\n ],\r\n },\r\n set_reset: {\r\n $help: [\r\n 'set_reset',\r\n 'Reset current settings to the defaults',\r\n ],\r\n },\r\n preset: {\r\n $help: [\r\n 'preset []',\r\n 'Reset current representation or set preset to ',\r\n ],\r\n PRESET: {\r\n $help: [\r\n 'default',\r\n 'wire',\r\n 'small',\r\n 'macro',\r\n ],\r\n },\r\n },\r\n unit: {\r\n $help: [\r\n 'unit []',\r\n 'Change current biological structure view. Zero value means asymmetric unit,',\r\n 'positive values set an assembly with corresponding number.',\r\n 'Being called with no parameters command prints current unit information.',\r\n ],\r\n },\r\n view: {\r\n $help: [\r\n 'view []',\r\n 'Get current encoded view or set if ENCODED_VIEW placed as argument',\r\n ],\r\n ENCODED_VIEW: {\r\n $help: [\r\n 'encoded view matrix string (binary code)',\r\n ],\r\n },\r\n },\r\n rotate: {\r\n $help: [\r\n 'rotate (x|y|z) [] [(x|y|z) []]...',\r\n 'Rotate scene',\r\n ],\r\n },\r\n scale: {\r\n $help: [\r\n 'scale ',\r\n 'Scale scene',\r\n ],\r\n },\r\n select: {\r\n $help: [\r\n 'select [as ]',\r\n 'Select atoms using selector defined in SELECTOR_STRING',\r\n ' and if SELECTOR_NAME is defined register it in viewer',\r\n ' you can use it later as a complex selector',\r\n ],\r\n },\r\n within: {\r\n $help: [\r\n 'within of as ',\r\n 'Build within named selector',\r\n ' DISTANCE ',\r\n ' SELECTOR_STRING ',\r\n ' SELECTOR_NAME ',\r\n ],\r\n },\r\n url: {\r\n $help: [\r\n 'url [-s] [-v]',\r\n 'Report URL encoded scene',\r\n ' if -s set that include settings in the URL',\r\n ' if -v set that include view in the URL',\r\n ],\r\n },\r\n screenshot: {\r\n $help: [\r\n 'screenshot [ []]',\r\n 'Make a screenshot of the scene',\r\n ' WIDTH in pixels',\r\n ' HEIGHT in pixels, equal to WIDTH by default',\r\n ],\r\n },\r\n line: {\r\n $help: [\r\n 'line [=]',\r\n 'Draw dashed line between two specified atoms',\r\n ],\r\n },\r\n removeobj: {\r\n $help: [\r\n 'removeobj ',\r\n 'Remove scene object by its index. Indices could be obtained by command',\r\n ],\r\n },\r\n listobj: {\r\n $help: [\r\n 'listobj',\r\n 'Display the list of all existing scene objects',\r\n ],\r\n },\r\n};\r\n\r\nexport default help;\r\n","import _ from 'lodash';\r\nimport Miew from './Miew';\r\nimport { parser as parsercli } from './utils/MiewCLIParser';\r\nimport clihelp from './utils/MiewCLIHelp';\r\nimport logger from './utils/logger';\r\nimport utils from './utils';\r\n\r\nconst {\r\n chem: { selectors },\r\n modes,\r\n colorers,\r\n materials,\r\n palettes,\r\n options,\r\n settings,\r\n} = Miew;\r\n\r\nfunction None() {\r\n}\r\n\r\nconst NULL = (function () {\r\n const obj = new None();\r\n return function () {\r\n return obj;\r\n };\r\n}());\r\n\r\nclass RepresentationMap {\r\n constructor() {\r\n this.representationMap = {};\r\n this.representationID = {};\r\n }\r\n\r\n get(strId) {\r\n return this.representationMap[strId] || this.representationID[strId] || '';\r\n }\r\n\r\n add(strId, index) {\r\n if (strId === -1) {\r\n return 'Can not create representation: there is no data';\r\n }\r\n\r\n if (index !== undefined) {\r\n if (!this.representationMap.hasOwnProperty(strId)) {\r\n this.representationMap[strId.toString()] = index;\r\n this.representationID[index] = strId.toString();\r\n } else {\r\n return 'This name has already existed, registered without name';\r\n }\r\n }\r\n return `Representation ${strId} successfully added`;\r\n }\r\n\r\n remove(index) {\r\n if (index && this.representationID.hasOwnProperty(index)) {\r\n delete this.representationMap[this.representationID[index]];\r\n delete this.representationID[index];\r\n }\r\n\r\n const sortedKeys = Object.keys(this.representationID).sort();\r\n for (const i in sortedKeys) {\r\n if (sortedKeys.hasOwnProperty(i)) {\r\n const id = sortedKeys[i];\r\n if (id > index) {\r\n this.representationID[id - 1] = this.representationID[id];\r\n this.representationMap[this.representationID[id]] -= 1;\r\n delete this.representationID[id];\r\n }\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n this.representationMap = {};\r\n this.representationID = {};\r\n }\r\n}\r\n\r\nconst representationsStorage = new RepresentationMap();\r\n\r\nfunction keyRemap(key) {\r\n const keys = {\r\n s: 'selector',\r\n m: 'mode',\r\n c: 'colorer',\r\n mt: 'material',\r\n mode: 'modes',\r\n color: 'colorers',\r\n colorer: 'colorers',\r\n select: 'selector',\r\n material: 'materials',\r\n selector: 'selector',\r\n };\r\n const ans = keys[key];\r\n return ans === undefined ? key : ans;\r\n}\r\n\r\nclass CLIUtils {\r\n list(miew, repMap, key) {\r\n let ret = '';\r\n if (miew && repMap !== undefined) {\r\n if (key === undefined || key === '-e') {\r\n const count = miew.repCount();\r\n\r\n for (let i = 0; i < count; i++) {\r\n ret += this.listRep(miew, repMap, i, key);\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n listRep(miew, repMap, repIndex, key) {\r\n let ret = '';\r\n const rep = miew.repGet(repIndex);\r\n if (!rep) {\r\n logger.warn(`Rep ${repIndex} does not exist!`);\r\n return ret;\r\n }\r\n const index = repIndex;\r\n const repName = repMap.get(index);\r\n\r\n const { mode, colorer } = rep;\r\n const selectionStr = rep.selectorString;\r\n const material = rep.materialPreset;\r\n\r\n ret += `#${index} : ${mode.name}${repName === '' ? '' : `, ${repName}`}\\n`;\r\n\r\n if (key !== undefined) {\r\n ret += ` selection : \"${selectionStr}\"\\n`;\r\n ret += ` mode : (${mode.id}), ${mode.name}\\n`;\r\n ret += ` colorer : (${colorer.id}), ${colorer.name}\\n`;\r\n ret += ` material : (${material.id}), ${material.name}\\n`;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n listSelector(miew, context) {\r\n let ret = '';\r\n\r\n for (const k in context) {\r\n if (context.hasOwnProperty(k)) {\r\n ret += `${k} : \"${context[k]}\"\\n`;\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n listObjs(miew) {\r\n const objs = miew._objects;\r\n\r\n if (!objs || !Array.isArray(objs) || objs.length === 0) {\r\n return 'There are no objects on the scene';\r\n }\r\n\r\n const strList = [];\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n strList[i] = `${i}: ${objs[i].toString()}`;\r\n }\r\n\r\n return strList.join('\\n');\r\n }\r\n\r\n joinHelpStr(helpData) {\r\n if (helpData instanceof Array) {\r\n return helpData.join('\\n');\r\n }\r\n return helpData;\r\n }\r\n\r\n help(path) {\r\n if (_.isUndefined(path)) {\r\n return `${this.joinHelpStr(clihelp.$help)}\\n${_.slice(_.sortBy(_.keys(clihelp)), 1).join(', ')}\\n`;\r\n }\r\n\r\n const helpItem = _.get(clihelp, path);\r\n return _.isUndefined(helpItem) ? this.help() : `${this.joinHelpStr(helpItem.$help)}\\n`;\r\n }\r\n\r\n load(miew, arg) {\r\n if (miew === undefined || arg === undefined || arg === '-f') {\r\n return;\r\n }\r\n miew.awaitWhileCMDisInProcess();\r\n const finish = () => miew.finishAwaitingCMDInProcess();\r\n miew.load(arg).then(finish, finish);\r\n }\r\n\r\n checkArg(key, arg, modificate) {\r\n if (key !== undefined && arg !== undefined) {\r\n if (keyRemap(key) === 'selector') {\r\n const res = selectors.parse(arg);\r\n\r\n if (res.error !== undefined) {\r\n const selExc = { message: res.error };\r\n throw selExc;\r\n }\r\n\r\n if (modificate !== undefined && modificate) {\r\n return res.selector;\r\n }\r\n return arg;\r\n }\r\n\r\n const modificators = {\r\n colorers,\r\n modes,\r\n materials,\r\n };\r\n\r\n let modificator = key;\r\n let temp;\r\n while (modificator !== temp) {\r\n temp = modificator;\r\n modificator = keyRemap(temp);\r\n }\r\n\r\n if (modificators[modificator].get(arg) === undefined) {\r\n const exc = { message: `${arg} is not existed in ${modificator}` };\r\n throw exc;\r\n }\r\n return arg;\r\n }\r\n return NULL;\r\n }\r\n\r\n propagateProp(path, arg) {\r\n if (path !== undefined) {\r\n let argExc = {};\r\n const adapter = options.adapters[typeof _.get(settings.defaults, path)];\r\n if (adapter === undefined) {\r\n const pathExc = { message: `${path} is not existed` };\r\n throw pathExc;\r\n }\r\n\r\n if ((path.endsWith('.color') || path.endsWith('.baseColor')\r\n || path.endsWith('.EL.carbon')) && typeof arg !== 'number') {\r\n arg = palettes.get(settings.now.palette).getNamedColor(arg);\r\n }\r\n\r\n if (path.endsWith('.fg') || path.endsWith('.bg')) {\r\n if (typeof arg !== 'number') {\r\n const val = palettes.get(settings.now.palette).getNamedColor(arg, true);\r\n if (val !== undefined) {\r\n arg = `0x${val.toString(16)}`;\r\n }\r\n } else {\r\n arg = `0x${arg.toString(16)}`;\r\n }\r\n }\r\n\r\n if (path.endsWith('.template')) {\r\n arg = arg.replace(/\\\\n/g, '\\n');// NOSONAR\r\n }\r\n\r\n if (arg !== undefined && adapter(arg) !== arg && adapter(arg) !== (arg > 0)) {\r\n argExc = { message: `${path} must be a \"${typeof _.get(settings.defaults, path)}\"` };\r\n throw argExc;\r\n }\r\n }\r\n return arg;\r\n }\r\n\r\n unquoteString(value) {\r\n return utils.unquoteString(value);\r\n }\r\n}\r\n// repIndexOrRepMap could be RepresentationMap or index\r\n\r\nconst utilFunctions = new CLIUtils();\r\n\r\nfunction CreateObjectPair(a, b) {\r\n const obj = {};\r\n obj[a] = b;\r\n return obj;\r\n}\r\n\r\nfunction ArgList(arg) {\r\n if (arg instanceof this.constructor) {\r\n return arg;\r\n }\r\n if (arg instanceof Array) {\r\n this._values = arg.slice(0);\r\n } else if (arg) {\r\n this._values = [arg];\r\n } else {\r\n this._values = [];\r\n }\r\n}\r\n\r\nArgList.prototype.append = function (value) {\r\n const values = this._values;\r\n values[values.length] = value;\r\n return this;\r\n};\r\n\r\nArgList.prototype.remove = function (value) {\r\n const values = this._values;\r\n const index = values.indexOf(value);\r\n if (index >= 0) {\r\n values.splice(index, 1);\r\n }\r\n return this;\r\n};\r\n\r\nArgList.prototype.toJSO = function (cliUtils, cmd, arg) {\r\n const res = {};\r\n\r\n const list = this._values;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n _.set(res, list[i].id, cliUtils.propagateProp(`${keyRemap(cmd)}.${arg}.${list[i].id}`, list[i].val));\r\n }\r\n\r\n return res;\r\n};\r\n\r\nfunction Arg(_id, _val) {\r\n this.id = _id;\r\n this.val = _val;\r\n}\r\n\r\nconst cliutils = Object.create({});\r\n\r\ncliutils.Arg = Arg;\r\ncliutils.ArgList = ArgList;\r\n\r\ncliutils.miew = null;\r\ncliutils.echo = null;\r\ncliutils.representations = representationsStorage;\r\ncliutils.utils = utilFunctions;\r\n\r\ncliutils._ = _;\r\ncliutils.CreateObjectPair = CreateObjectPair;\r\ncliutils.keyRemap = keyRemap;\r\ncliutils.Context = selectors.Context;\r\ncliutils.ClearContext = selectors.ClearContext;\r\n\r\ncliutils.NULL = NULL;\r\n\r\ncliutils.notimplemented = function () {\r\n return this.NULL;\r\n};\r\n\r\nMiew.prototype.script = function (script, _printCallback, _errorCallback) {\r\n parsercli.yy.miew = this;\r\n parsercli.yy.echo = _printCallback;\r\n parsercli.yy.error = _errorCallback;\r\n if (this.cmdQueue === undefined) {\r\n this.cmdQueue = [];\r\n }\r\n\r\n if (this.commandInAction === undefined) {\r\n this.commandInAction = false;\r\n }\r\n\r\n this.cmdQueue = this.cmdQueue.concat(script.split('\\n'));\r\n};\r\n\r\nMiew.prototype.awaitWhileCMDisInProcess = function () {\r\n this.commandInAction = true;\r\n};\r\n\r\nMiew.prototype.finishAwaitingCMDInProcess = function () {\r\n this.commandInAction = false;\r\n};\r\n\r\nMiew.prototype.isScriptingCommandAvailable = function () {\r\n return this.commandInAction !== undefined\r\n && !this.commandInAction\r\n && this.cmdQueue !== undefined\r\n && this.cmdQueue.length > 0;\r\n};\r\n\r\nMiew.prototype.callNextCmd = function () {\r\n if (this.isScriptingCommandAvailable()) {\r\n const cmd = this.cmdQueue.shift();\r\n\r\n const res = {};\r\n res.success = false;\r\n try {\r\n parsercli.parse(cmd);\r\n res.success = true;\r\n } catch (e) {\r\n res.error = e.message;\r\n parsercli.yy.error(res.error);\r\n this.finishAwaitingCMDInProcess();\r\n }\r\n return res;\r\n }\r\n return '';\r\n};\r\n\r\nparsercli.yy = cliutils;\r\n// workaround for incorrect JISON parser generator for AMD module\r\nparsercli.yy.parseError = parsercli.parseError;\r\n","import Miew from './Miew';\r\nimport './Miew-cli';\r\n\r\nexport default Miew;\r\n"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE__535__","__WEBPACK_EXTERNAL_MODULE__698__","parser","o","k","v","l","length","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","$VV","$VW","$VX","$VY","$VZ","$V_","$V$","$V01","$V11","$V21","$V31","$V41","$V51","$V61","trace","yy","symbols_","error","Program","Command","EOF","RESET","BUILD","ALL","HELP","Path","MOTM","OneArgCommand","GET","STRING","SET","Value","SET_SAVE","SET_RESTORE","SET_RESET","PRESET","AddRepresentation","EditRepresentation","REMOVE","RepresentationReference","HIDE","SHOW","LIST","EXPAND_KEY","SELECTOR_KEY","SELECT","AS","WordAll","SELECTOR","WITHIN","NUMBER","OF","MATERIAL","IDENTIFIER","ModeCMD","ColorCMD","VIEW","BASE_64","UNIT","DSSP","SCALE","ROTATE","AxesList","TRANSLATE","CENTER","GetURLBranch","Screenshot","LINE","ArgList","LISTOBJ","REMOVEOBJ","URL","VIEW_KEY","SCREENSHOT","LOAD","Url","FILE_KEY","ADD","Description","REP","MODE","COLOR","Descriptor","RepresentationOwnProperty","RepresentationOwnPropertyOpts","DESC_KEY","DESC_KEY_OPTS","AxesArg","DESC_KEY_AXES","Arg","PathWoDescKey","HEX","BOOL","Word","CommandSetWoDESC_KEY","DescKeys","CLEAR","FILE_LIST","FILE_REGISTER","FILE_DELETE","PRESET_ADD","PRESET_DELETE","PRESET_UPDATE","PRESET_RENAME","PRESET_OPEN","CREATE_SCENARIO","RESET_SCENARIO","DELETE_SCENARIO","ADD_SCENARIO_ITEM","LIST_SCENARIO","PDB_KEY","DELAY_KEY","PRST_KEY","DESCRIPTION_KEY","CommandSet","PresetPath","HexOrNumber","$accept","$end","terminals_","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","miew","reset","ClearContext","resetReps","rebuild","rebuildAll","echo","utils","help","toString","motm","propagateProp","get","set","saveSettings","restoreSettings","resetSettings","applyPreset","repRemove","representations","remove","repHide","listRep","list","listSelector","Context","select","checkArg","toLowerCase","rep","repCurrent","selector","within","Number","material","toUpperCase","view","changeUnit","dssp","scale","i","n","rotate","Math","PI","translate","center","addObject","type","params","opts","toJSO","listObjs","removeObject","getURL","settings","screenshotSave","load","clear","add","repAdd","mode","Array","colorer","_","assign","CreateObjectPair","key","val","Object","create","keyRemap","concat","append","parseInt","JSON","parse","String","table","defaultActions","parseError","str","hash","recoverable","Error","input","self","stack","tstack","vstack","lstack","recovering","args","slice","call","arguments","lexer","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","push","ranges","options","getPrototypeOf","symbol","preErrorSymbol","state","action","r","p","len","newState","expected","token","yyval","pop","lex","errStr","showPosition","join","text","match","line","loc","first_line","last_line","first_column","last_column","range","apply","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","unput","lines","split","substr","oldLines","more","reject","backtrack_lexer","less","pastInput","past","replace","upcomingInput","next","pre","c","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","flex","begin","condition","popState","conditions","topState","abs","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","unquoteString","INITIAL","inclusive","Parser","Expression","Selector","OR","AND","NOT","NAMED_SELECTOR","SELECTOR_RANGED","RangeList","SELECTOR_NAMED","NameList","Range","Name","keyword","GetSelector","ValueList","AbstractInterpolator","CubicInterpolator","Enum","LinearInterpolator","NearestInterpolator","SincFilterInterpolator","Smooth","clipClamp","clipMirror","clipPeriodic","defaultConfig","getColumn","getType","isValidNumber","makeLanczosWindow","makeScaledFunction","makeSincKernel","normalizeScaleTo","shallowCopy","sin","sinc","validateNumber","validateVector","__hasProp","__extends","child","parent","ctor","constructor","__super__","method","METHOD_NEAREST","METHOD_LINEAR","METHOD_CUBIC","METHOD_LANCZOS","METHOD_SINC","CLIP_CLAMP","CLIP_ZERO","CLIP_PERIODIC","CLIP_MIRROR","CUBIC_TENSION_DEFAULT","CUBIC_TENSION_CATMULL_ROM","cubicTension","clip","scaleTo","sincFilterSize","sincWindow","max","min","period","array","config","clipHelper","clamp","clipHelperClamp","zero","clipHelperZero","periodic","clipHelperPeriodic","mirror","clipHelperMirror","getClippedInput","interpolate","t","_super","round","floor","tangentFactor","getTangent","m","t2","t3","x","a","window","kernel","sum","_ref","_ref2","arr","row","_i","_len","_results","f","baseScale","scaleRange","scaleFactor","translation","isNaN","isFinite","dimension","s","invalidErr","obj","copy","baseDomainEnd","interpolator","interpolatorClass","interpolators","properties","smoothFunc","lanczosFilterSize","nearest","linear","cubic","lanczos","count","_j","_len2","deepValidation","_k","_len3","domain","sort","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","undefined","e","byteLength","charCodeAt","setUint8","u","setUint16","setUint32","Uint8Array","buffer","setFloat64","setInt8","setInt16","setInt32","isArray","d","keys","ArrayBuffer","DataView","byteOffset","Int8Array","Int32Array","Float32Array","Int16Array","g","L","h","setFloat32","getFloat32","y","U","b","I","w","C","ceil","A","M","F","S","E","N","O","T","getInt32","subarray","j","q","D","P","z","B","V","G","R","rr","forEach","bondAtomList","bondOrderList","xCoordList","yCoordList","zCoordList","bFactorList","atomIdList","altLocList","occupancyList","groupIdList","groupTypeList","secStructList","insCodeList","sequenceIndexList","chainIdList","chainNameList","H","fromCharCode","getInt8","getUint8","getUint16","getUint32","getFloat64","getInt16","W","X","ignoreFields","nr","indexOf","J","K","firstModelOnly","onModel","onChain","onGroup","onAtom","onBond","chainsPerModel","chainCount","modelIndex","groupsPerChain","groupCount","chainIndex","chainId","chainName","groupList","atomNameList","atomCount","groupIndex","groupId","groupType","groupName","singleLetterCode","chemCompType","secStruct","insCode","sequenceIndex","atomIndex","atomId","element","elementList","atomName","formalCharge","formalChargeList","xCoord","yCoord","zCoord","bFactor","altLoc","occupancy","atomIndex1","atomIndex2","bondOrder","Q","Y","Z","response","XMLHttpRequest","addEventListener","responseType","open","send","or","ar","tr","er","ir","encode","decode","traverse","fetch","fetchReduced","version","fetchUrl","fetchReducedUrl","encodeMsgpack","encodeMmtf","decodeMsgpack","decodeMmtf","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","definition","defineProperty","enumerable","prop","__assign","defaults","width","radius","corners","color","fadeColor","animation","direction","speed","zIndex","className","top","left","shadow","position","Spinner","spin","target","stop","el","document","createElement","setAttribute","style","transform","insertBefore","firstChild","borderRadius","shadows","boxShadow","regex","_a","xUnits","yUnits","prefix","end","parseBoxShadow","degrees","backgroundLine","height","background","getColor","transformOrigin","delay","normalizeShadow","appendChild","drawLines","parentNode","removeChild","idx","normalized","shadows_1","xy","convertOffset","radians","cos","Timer","startTime","oldTime","elapsedTime","running","start","now","getElapsedTime","update","delta","newTime","performance","bind","Date","tag","id","css","cssText","gfx_Stats","domElement","_text","_startTime","_prevTime","_deltas","_index","_total","_count","time","ms","fps","textContent","toPrecision","show","on","display","isUndefOrEqual","param","value","EventDispatcher","_handlers","callback","context","handlers","par","removeEventListener","handler","ev","values","dispatchEvent","event","utils_EventDispatcher","priorities","debug","info","report","warn","Logger","console","_priority","verify","number","instantiate","level","levels","message","priority","_message","logger","browserType","DEFAULT","SAFARI","decodeQueryComponent","decodeURIComponent","getUrlParameters","url","query","location","search","substring","result","exec","DebugTracer","namespace","enabled","enable","indent","methods","wrap","method_","name_","spaces","name","Function","OutOfMemoryError","super","bytesToBase64","bytes","binary","btoa","bytesFromBase64","atob","isAlmostPlainObject","proto","getFileExtension","fileName","lastIndexOf","Infinity","dataUrlToBlob","parts","partsCount","Blob","unquotedStringRE","enquoteHelper","encodeQueryComponent","excludeExp","encodeURIComponent","code","getUrlParametersAsDict","resolveURL","href","anchor","generateRegExp","symbolStr","symbolList","listStr","RegExp","attrs","content","createTextNode","HTMLElement","deriveClass","cls","base","members","statics","deriveDeep","needZeroOwnProperties","res","hexColor","allocateTyped","TypedArrayName","size","RangeError","arrayFromBase64","TypedArrayClass","arrayToBase64","compareOptionsWithDefaults","defOpts","optsStr","objectsDiff","src","dst","diff","srcValue","dstValue","deepDiff","forInRecursive","object","iterateThrough","newPref","enquoteString","SyntaxError","getBrowser","navigator","vendor","userAgent","shotOpen","write","shotDownload","dataUrl","filename","msSaveBlob","link","download","innerHTML","createObjectURL","body","click","copySubArrays","indices","itemSize","shallowCloneNode","node","newNode","cloneNode","worldPos","correctSelectorIdentifier","test","splitFileName","ext","data","blobData","concatTypedArraysUnsafe","first","second","mergeTypedArraysUnsafe","reduce","acc","cur","JobHandle","_shouldCancel","cancel","shouldCancel","notify","slaveEvent","modes","BS","atom","bond","space","multibond","aromrad","showarom","polyComplexity","poor","low","medium","high","ultra","VW","LN","offsarom","chunkarom","lineWidth","LC","SA","zClip","probeRadius","subset","wireframe","SE","QS","isoValue","gaussLim","gridSpacing","CS","probePositions","TR","TU","heightSegmentsRatio","tension","CA","depth","ss","helix","arrow","strand","TX","template","horizontalAlign","verticalAlign","dx","dy","dz","fg","bg","showBg","VD","kSigma","kSigmaMed","kSigmaMax","frame","isoMode","colorers","EL","carbon","UN","CO","baseColor","CB","factor","SQ","gradient","TM","OC","HY","MO","antialias","camFov","camNear","camFar","camDistance","radiusToFit","fogNearFactor","fogFarFactor","fogAlpha","fogColor","fogColorEnable","palette","resolution","autoResolution","autoPreset","preset","presets","default","empty","wire","small","macro","objects","dashSize","gapSize","transparent","draft","clipPlane","clipPlaneFactor","clipPlaneSpeed","plugins","axes","fog","zSprites","isoSurfaceFakeOpacity","suspendRender","nowater","autobuild","fxaa","outline","threshold","thickness","ao","autoRotation","maxfps","fbxprec","autoRotationAxisFixed","zooming","picking","pick","editing","aromatic","singleUnit","stereo","interpolateViews","transparency","translationSpeed","example","good","ssaoKernelRadius","ssaoFactor","stereoBarrel","use","multiFile","Settings","old","_changed","settings_defaults","path","_notifyChange","_notifyChanges","defaultValue","checkpoint","deepValue","deepPath","changed","applyDiffs","diffs","VERSION","getDiffs","versioned","setPluginOpts","plugin","repIndex","asBoolean","adapters","string","boolean","cCommonIgnoreSymbols","cL1ExclExpr","encodeQueryComponentL1","cL2ExclExpr","encodeQueryComponentL2","ensureRepList","reps","ensureRepAssign","extractArgs","defaultsDict","bang","inputVal","sep","parseParams","arg","pair","adapter","actions","unit","menu","_objects","newOpts","newObj","mt","materials","dup","_fromArray","entries","entry","_processOptsForURL","_processArgsForURL","_processObjForURL","objOpts","_processOptsForScript","_processArgsForScript","_processObjForScript","map","_processRepsForScript","repString","strIdx","localAdd","fromURL","fromAttr","attr","toURL","stringList","checkAndAdd","repList","addReps","objList","addObjects","protocol","host","pathname","toScript","commandsList","command","saveQuotes","quote","trim","Atom","residue","role","het","serial","temperature","charge","mask","hydrogenCount","radicalCount","valence","bonds","flags","Flags","HYDROGEN","CARBON","isHet","isHydrogen","getVisualName","forEachBond","process","getFullName","_chain","getName","_sequence","static","NONPOLARH","chem_Atom","Element","fullName","weight","radiusBonding","hValency","hydrogenValency","U1","Lead","U2","Wing","U18","Constants","SG","byAtomicNumber","ByAtomicNumber","byName","ByName","getByName","chem_Element","cBondTypes","UNKNOWN","COVALENT","AROMATIC","getAtomPos","Bond","right","order","fixed","_left","_right","_fixed","_order","_type","getLeft","getRight","getOrder","calcLength","distanceTo","_forEachNeighbour","currAtom","forEachLevelOne","forEachLevelTwo","l2Atom","_fixDir","refPoint","currDir","posGetter","rightCount","leftCount","tmpVec","clone","checkDir","sub","dot","checkCarbon","stages","stageId","multiplyScalar","calcNormalDir","third","maxNeibs","another","secondPos","firstV","secondV","crossVectors","lengthSq","normalize","BondType","chem_Bond","cNucleicControlNames","cNucleicWing1Names","cNucleicWing2Names","cCylinderSource","cCylinderTarget","types","atoms","chem_Residue","chain","sequence","icode","_component","_icode","_mask","_atoms","_secondary","_firstAtom","_leadAtom","_wingAtom","_lastAtom","_controlPoint","_midPoint","_wingVector","_cylinders","_isValid","_het","_molecule","getChain","getMolecule","getSequence","getSecondary","getICode","addAtom","xyz","tempFactor","getComplex","getAtomCount","forEachAtom","_findAtomByName","_findFirstAtomInList","names","collectMask","getCylinderTargetList","_name","_detectLeadWing","getAtomPosition","leadAtom","wingStart","wingEnd","cylSource","targetList","cylTarget","calcWing","prevLeadPos","currLeadPos","prevWingPos","prevWing","vectorA","vectorB","angleTo","negate","_innerFinalize","prevRes","prev","nextRes","chainAsNucleic","bFirstInChain","lp","THREE","lerp","_finalize2","asNucleic","isConnected","anotherResidue","_finalize","tempCount","occupCount","ResidueType","letterCode","_fullName","ALA","ARG","ASN","ASP","CYS","GLN","GLU","GLY","HIS","ILE","LEU","LYS","MET","PHE","PRO","PYL","SEC","SER","THR","TRP","TYR","VAL","DA","DC","DG","DI","DT","DU","WAT","H2O","HOH","DOD","UNK","UNL","PROTEIN","BASIC","ACIDIC","POLAR","NONPOLAR","NUCLEIC","PURINE","PYRIMIDINE","DNA","RNA","WATER","_addFlag","flag","StandardTypes","_addParam","chem_ResidueType","ChainType","chem_Chain","complex","_complex","_residues","minSequence","POSITIVE_INFINITY","maxSequence","NEGATIVE_INFINITY","getResidues","_determineType","residues","findResidue","seqNum","iCode","curr","updateToFrame","frameData","prevData","frameRes","currData","addResidue","getResidueType","addResidueType","Residue","getResidueCount","forEachResidue","StructuralElement","init","term","generic","genericByType","serialAtomMap","residueHash","splitUnifiedSerial","serialId","hashCode","getUnifiedSerial","Type","STRAND","BRIDGE","HELIX_310","HELIX_ALPHA","HELIX_PI","HELIX","TURN_310","TURN_ALPHA","TURN_PI","TURN","BEND","COIL","Generic","LOOP","StructuralElementType","StructuralElementGeneric","chem_StructuralElement","typeByPDBHelixClass","chem_Helix","helixClass","comment","chem_Strand","sheet","sense","atomCur","atomPrev","as","chem_Sheet","_width","_strands","getWidth","addStrand","addEmptyStrand","Strand","chem_SGroup","saveNode","_id","_position","_charge","_repeat","_center","xmlNodeRef","getPosition","getCentralPoint","_rebuildSGroupOnAtomChange","nLimon","bLow","bHight","aPos","addVectors","List","_values","splice","toJSON","includes","valuesArray","upperOnly","_validate","ListSelector","RangeListSelector","ValueListSelector","caseSensitive","NoneSelector","includesAtom","_atom","AllSelector","none","PrefixOperator","rhs","InfixOperator","lhs","keywords","defineSelector","SelectorClass","NULL_SELECTOR","defineOperator","OperatorClass","byResidueTypeFlag","selectors","chem_selectors","chem_BiologicalUnit","_selector","_boundaries","boundingBox","boundingSphere","computeBoundaries","makeEmpty","expandByPoint","bbc","getCenter","setFromCenterAndSize","radiusSquared","pos","lengthSquared","distanceToSquared","sqrt","getTransforms","getSelector","getBoundaries","finalize","chem_Assembly","BiologicalUnit","chains","matrices","oldCenter","oldRad","applyMatrix4","newRad","addScalar","subScalar","addChain","addMatrix","matrix","chem_Component","_residueIndices","_cycles","_subDivs","_residueCount","resIdc","idIdc","idCount","last","setSubDivs","subDivs","resCnt","_bonds","forEachCycle","cycle","addCycle","cycles","markResidues","_forEachSubChain","subs","currRes","endRes","getMaskedSequences","_subIdx","getMaskedSubdivSequences","currIdx","lastSubIdx","subIdx","boundaries","chem_AtomPairs","maxPairsEstimate","numPairs","numMaxPairs","intBuffer","hashBuffer","cHashTableSize","destroy","addPair","indexA","indexB","ia","ib","codeToAdd","apI","_getBondingRadius","chem_AutoBond","_maxRad","bBox","getDefaultBoundaries","_vBoxMin","_vBoxMax","_pairCollection","_addExistingPairs","getAtoms","numAtoms","aInd","collection","numBondsForAtom","bInd","_findPairs","vw","getVoxelWorld","atomsNum","rA","isHydrogenA","posA","locationA","atomA","processAtom","atomB","locationB","dist2","rB","maxAcceptable","forEachAtomWithinRadius","_addPairs","iA","iB","_addPair","bondsA","numBonds","newBond","addBond","build","_buildInner","_calcBoundingBox","AtomPairs","nAtoms","maxRad","cAromaticType","cAromaticAtoms","_coDirVectors","v1Tmp","v2Tmp","cp","v1","v2","_insertAscending","_anotherAtom","_markAromatic","Cycle","atomsList","nA","nextAtom","checkBond","_isAromatic","_isPossibleAromatic","rightIdx","leftIdx","_checkCycleSimple","_checkCycleComplex","chem_AromaticLoopsMarker","bondsData","bondMarks","_bondsData","_bondMarks","_resetCycles","_currIdx","_haveSameCycle","bond1","bond2","arr1","arr2","n1","n2","i1","i2","_tryBond","prevBond","currRight","bondsOrder","currLeft","currVec","startAtomRef","_currStart","checkAromatic","_checkBond","anotherAtom","anotherVec","theta","_cosBetween","newDir","cross","dir","newRight","_startCycle","_findLoops","checkCycle","forEachComponent","component","newCycle","markCycles","detectCycles","_getSphereSliceRadiusRange","zMin","zMax","dzMin","dzMax","rzMin","rzMax","rMin","rMax","_getCircleSliceRadiusRange","yMin","yMax","dyMin","dyMax","ryMin","ryMax","VoxelWorld","box","vCellSizeHint","_box","getSize","divide","_last","_cellSize","_cellInnerR","_cellOuterR","numVoxels","_voxels","addAtoms","voxelIdx","_findVoxel","point","_zero","voxel","_voxel","_forEachAtomInVoxel","_forEachVoxelWithinRadius","xRange","_xRange","yRange","_yRange","zRange","_zRange","_forEachVoxelWithinRadiusSimple","rRangeXY","rRangeX","xVal","yVal","zVal","isInsideX","isInsideY","isInsideZ","divideScalar","clampScalar","vCenter","_vCenter","distTouch2","distInside2","d2","r2","isInside","forEachAtomWithinDistFromMasked","dist","_forEachAtomWithinDistFromGroup","atomProc","forEachAtomWithinDistFromSelected","voxels","processIfWithin","chem_VoxelWorld","MINIMAL_DISTANCE","MIN_HBOND_ENERGY","COUPLING_CONSTANT","HBondInfo","_hbonds","_buildVW","_build","isBond","from","to","acc0","acc1","acceptor","energy","ri","preri","rj","prerj","_calcHBondEnergy","pairs","PairCollection","_residueGetCAlpha","_residueGetCO","_residueGetNH","predonor","donor","distanceHO","distanceHC","distanceNC","distanceNO","donorInfo","accInfo","BridgeType","freeze","NO_BRIDGE","PARALLEL","ANTI_PARALLEL","HelixFlag","START","MIDDLE","END","START_AND_END","StructureType","SecondaryStructureMap","_ss","_sheet","_betaPartners","_bend","_helixFlags","_chainLengths","_chains","_buildBetaSheets","_buildAlphaHelices","inResidues","chainLength","inPreferPiHelices","stride","kappa","_kappa","_isHelixStart","isTurn","_cosinusAngle","p1","p2","p3","p4","v12","v34","prevPrev","nextNext","curCA","ppCA","nnCA","ckap","skap","atan2","bridges","lenA","chainA","lenB","chainB","_testBridge","found","bridge","unshift","chainI","chainJ","ibi","iei","jbi","jei","ibj","iej","jbj","jej","_hasChainBreak","bulge","ladderset","Set","ladder","delete","sheetset","toMove","_areBridgesLinked","betai","betaj","parallel","ai","aj","has","helixClassMap","loopMap","Complex","_components","_helices","_sheets","structures","_residueTypes","_sgroups","_molecules","_maskNeedsUpdate","metadata","symmetry","units","_currentUnit","addSheet","addHelix","getBonds","forEachChain","resName","getSGroupCount","getSGroups","getAtomByFullname","resId","localeCompare","Chain","getChainCount","getMolecules","getMoleculeCount","forEachMolecule","molecules","forEachSGroup","groups","components","forEachVisibleComponent","getBondCount","maxSerial","uniSerial","chainShift","remnant","_fillCmpEdit","addComp","comp","Component","resCount","currStart","_fillCmpNoedit","currSubDivs","_fillComponents","enableEditing","getCurrentUnit","resetCurrentUnit","setCurrentUnit","newUnit","_computeBounds","onAtomPositionChanged","_finalizeBonds","updateStructuresMask","helices","sheets","needAutoBonding","autoConnector","AutoBond","marker","AromaticLoopsMarker","detectAromaticLoops","_finalizeMolecules","molecule","updater","structure","countAtomsByMask","getNumAtomsBySelector","resetAtomMask","markAtoms","setMask","clearMask","totalSelector","markAtomsAdditionally","clearAtomBits","reseter","getAtomNames","_atomNames","dict","getElements","_elements","getResidueNames","_residueNames","getChainNames","_chainNames","getAltLocNames","_altlocNames","_voxelWorld","addElement","srcArray","dstArray","functor","elem","joinComplexes","complexes","atomBias","bondBias","residueBias","chainBias","componentBias","bias","processBond","processResidue","processChain","processComponent","doNothing","rt","ssMap","getSheet","item","Sheet","lastCode","lastSheetIndex","lastHelixIndex","curStructure","curCode","curResidue","curSheetIndex","Helix","loopType","curSheet","filter","chem_Complex","pow2ceil","Volume","dimensions","vecSize","volumeInfo","_dimVec","_volumeInfo","_dimX","_dimY","_dimZ","_rowElements","_planeElements","_totalElements","_data","getValue","setValue","addValue","getDimensions","getBox","getVolumeInfo","getCellSize","boxSize","computeGradient","vl","vs","xSize","ySize","zSize","volMap","_voxelValue","zi","zm","zp","yi","ym","yp","xi","xm","xp","getTiledTextureStride","buildTiledTexture","tilesX","tilesY","tileRow","texture","needsUpdate","getData","getDirectIdx","getStrideX","getStrideY","getStrideZ","chem_Volume","chem","SGroup","Assembly","Molecule","CSS2DObject","_element","getElement","setTransparency","transp","op","op100","opacity","gfx_CSS2DObject","RCGroup","raycast","raycaster","intersects","visible","children","enableSubset","innerOnly","disableSubset","isEmpty","getSubset","totalSubset","gfx_RCGroup","LAYERS","VOLUME","TRANSPARENT","PREPASS_TRANSPARENT","VOLUME_BFPLANE","COLOR_FROM_POSITION","SHADOWMAP","SELECTION_LAYERS","resetTransform","quaternion","updateMatrixWorldRecursive","updateMatrixWorld","addSavingWorldTransform","_worldMatrixInverse","matrixWorld","invert","multiply","decompose","renderDummyQuad","_material","depthWrite","_scene","_quad","_camera","render","renderScreenQuad","isIdentity","identity","equals","applyToPointsArray","elements","persp","ScreenQuadMaterial","uniforms","srcTex","vertexShader","vertexScreenQuadShader","depthTest","clearTree","geometry","dispose","removeChildren","renderScreenQuadFromTex","fragmentShader","renderScreenQuadFromTexWithDistortion","coef","setMinimalFov","angle","aspect","fov","radToDeg","atan","tan","degToRad","updateHalfSized","camera","originalAspect","originalFov","updateProjectionMatrix","setDistanceToFit","intersectVisibleObject","gfxObj","fogFarPlane","intersectObject","nearPlane","near","matrixWorldInverse","farPlane","far","extractScale","_v","te","determinant","copyAtList","attribute","indexList","_oldInstancedBufferGeometryCopy","source","instanceCount","gfxutils","calcCylinderMatrix","posBegin","posEnd","posCenter","matScale","makeScale","matRotHalf","makeRotationX","matRotLook","vUp","lookAt","setPosition","calcChunkMatrix","eye","up","rad","groupHasGeometryToRender","group","hasGeoms","buildDistorionMesh","widthSegments","heightSegements","calcInverseBarrel","prevR2","curR2","dr","geo","getAttribute","setXY","fillArray","startIndex","endIndex","destroyObject","belongToSelectLayers","layers","processObjRenderOrder","idMaterial","renderOrder","isGroup","applySelectionMaterial","setValues","depthFunc","overrideColor","lights","shadowmap","setUberOptions","fixedColor","zOffset","getMiddlePoint","point1","point2","optionalTarget","addScaledVector","_defaultBoundaries","Visual","dataSource","_dataSource","release","getDataSource","src_Visual","_ensureArray","EntityList","entities","_list","_dict","_indices","entity","register","registerInList","unregisterFromList","registerInDict","unregisterFromDict","unregister","all","utils_EntityList","utils_makeContextDependent","defineProperties","CollisionSphere","_radius","sphere","_sphere","ray","intersectSphere","distance","origin","geometries_SphereCollisionGeo","setSphere","inters","chunkIdx","computeBoundingBox","computeBoundingSphere","tmpColor","InstancedSpheresGeometry","SphereCollisionGeo","spheresCount","sphereComplexity","useZSprites","_sphGeometry","_init","setItem","itemIdx","itemPos","itemRad","_offsets","setColor","colorVal","_colors","startUpdate","finishUpdate","setOpacity","chunkIndices","alphaArr","_alpha","geom","sphereGeo","alpha","geometries_InstancedSpheresGeometry","ChunkedObjectsGeometry","chunkGeo","chunksCount","_chunkGeo","colors","chunkSize","_chunkSize","mesh","facesPerChunk","faceIndex","srcPos","_positions","srcNorm","_normals","srcColor","dstPos","dstNorm","dstColor","dstPtOffset","ptIdxBegin","ptIdxEnd","attributes","chunkIndex","chunkIndexSize","pointsCount","use32bitIndex","indexSize","Uint32Array","Uint16Array","posOffset","setIndex","geometries_ChunkedObjectsGeometry","SimpleSpheresGeometry","sphGeometry","normals","geoNormals","normal","_chunkPos","_tmpPositions","tmpPos","geoPos","geometries_SimpleSpheresGeometry","centerPos","tmpVector","normMtx","geometries_Simple2CCylindersGeometry","_chunkNorms","_tmpVector","botPos","topPos","firstOffset","secondOffset","tmpArray","geoNorm","lerpVectors","mtx1","getNormalMatrix","fromArray","toArray","applyMatrix3","colorVal1","colorVal2","CylinderBufferGeometry","radiusTop","radiusBottom","radialSegments","heightSegments","openEnded","thetaLength","parameters","hasTop","hasBottom","vertexCount","facesCount","heightHalf","positions","uvs","currVtxIdx","currFaceIdx","tanTheta","v3","v4","setXYZ","vx","vy","vz","startTIdx","lastIdx","fTIdx","currSrcIdx","getX","getY","getZ","nextTVtx","startBIdx","lastBIdx","fBIdx","currSrcBIdx","nextBVtx","geometries_CylinderBufferGeometry","invMatrix","setArrayXYZ","setArrayXYZW","sortNumber","Instanced2CCylindersGeometry","_useZSprites","_cylGeometry","_collisionGeo","Simple2CCylindersGeometry","me","mtxOffset","_matVector1","_matVector2","_matVector3","_invmatVector1","_invmatVector2","_invmatVector3","colorIdx","_color1","_color2","chunksIdx","cylinderInfo","newPar","_prepareCylinderInfo","cylinderIndices","color1","color2","_assignOpacity","getGeoParams","cylinderGeo","geometries_Instanced2CCylindersGeometry","tmpPrev","tmpNext","tmpRes","simpleNormal","normalOnCut","nearRingPt","geometries_ExtrudedObjectsGeometry","shape","ringsCount","ptsCount","totalPts","_createExtrudedChunkGeometry","_ringsCount","tmpShape","_tmpShape","hasSlope","hasCut","chunkStartIdx","_setPoints","_setSlopeNormals","_setBaseNormals","_addCut","vtxIdx","mtx","nPtsInRing","_countNormalsInRing","isSlope","shiftToExtraPt","subVectors","startSegmentIdx","segmentsCount","elemSize","ThickLinesGeometry","_initVertices","segmentIdx","setSegment","pos1","pos2","directions","_directions","dirIdx","startSegIdx","endSegIdx","getSubsetSegments","getSubsetColors","getSubsetOpacities","getNumVertexPerSegment","getPositionSize","setSegments","startPos","startDir","setColors","_buffersSize","indexOffset","pointOffset","geometries_ThickLinesGeometry","geometries_LinesGeometry","BaseLinesGeometry","posSize","geometries_CylinderCollisionGeo","itemOffset","ChunkedLinesGeometry","LinesGeometry","enableCollision","CylinderCollisionGeo","collisionGeo","segCount","segIdx","geometries_ChunkedLinesGeometry","TwoColorLinesGeometry","segmentIndices","_segCounts","geometries_TwoColorLinesGeometry","vectors","vecCount","tempPos1","tempPos2","CrossGeometry","geometries_CrossGeometry","IsoSurfaceGeometry","_opts","_posRad","posRad","geometries_IsoSurfaceGeometry","IsoSurfaceMarchCube","pointsValuesLinear","hasIntersection","bitsInside","numCellsPerSide","n3","striIndicesMarchCube","geometries_IsoSurfaceMarchCube","edgeTable","_voxelGradientFast","grad","GridCell","_arrSize","cubeIndex","Triangle","createArray","arrSize","IsoSurface","_numTriangles","_numVertices","_volumetricData","_xAxis","_yAxis","_zAxis","_xDir","_yDir","_zDir","_prepareAxesAndDirs","cellSize","xAxis","yAxis","zAxis","xDir","yDir","zDir","tmp","notZero","axe","EPSILON","_vertexInterp","isoLevel","grid","ind1","ind2","vertex","valP1","isoDiffP1","diffValP2P1","mu","_polygonize","triangles","firstIndices","_firstIndices","secondIndices","_secondIndices","vertexList","_vertexList","normalList","_normalList","triCount","triTblIdx","triTable","_triTable","_doGridPosNorms","step","appendSimple","vol","volData","dim","stepX","stepY","stepZ","gc","gcVal","gcValSize","additions","appendVertex","axis","triVertex","_origin","posMtx","globTriCount","_gradient","compute","_remapIndices","vertexMap","idcCount","newIndices","_remapVertices","vertices","newPositions","newNormals","norm","vertexFusion","faceVer","oldVerCount","vMap","newVer","matchedIndex","setColorVolTex","colorMap","atomMap","atomWeightMap","visibilitySelector","numVerts","xs","ys","zs","colorData","strideX","strideY","strideZ","atomWeightData","atomStrideX","atomStrideY","atomStrideZ","xInv","yInv","zInv","atomLookup","atomWeights","interp","idx1","idx2","collectWeight","coefX","coefY","coefZ","newVerCount","ind","mux","muy","muz","maxWeight","dominantIdx","atomIdx","c0","c1","c2","c3","cz0","cz1","numTriangles","newTriCount","i0","toMesh","geometries_IsoSurface","geometries_VolumeSurfaceGeometry","_visibilitySelector","_calcSurface","_findMinMax","posRadArray","itemsCount","maxPosRad","minPosRad","tmpVal","_findNumVoxels","minMaxValues","minCoordRad","maxCoordRad","gridPadding","radScale","padRad","bbox","_makeSurface","surface","isoSurf","volTexMap","packedArrays","_computeSurface","geometries_QuickSurfGeometry","VolumeSurfaceGeometry","_shiftByOrigin","gaussdensity","atomicNum","invIsoValue","invGridSpacing","maxVoxelX","maxVoxelY","maxVoxelZ","volTexData","texStrideX","scaledRad","atomicNumFactor","radInv","radLim","radLim2","xMin","xMax","dy2dz2","addr","texAddr","expVal","density","exp","colInd","originX","originY","originZ","AVHash","maxDistance","minX","minY","minZ","maxX","maxY","maxZ","hashFunc","minW","iDim","jDim","kDim","nCells","jkDim","preHash","cid","iIdx","cellOffsets","cellLengths","maxCellLength","subArray","cellLength","neighbourListLength","withinRadii","rExtra","out","outIdx","nearI","nearJ","nearK","loI","loJ","loK","hiI","hiJ","hiK","iOffset","jOffset","cellStart","cellEnd","dataIndex","baseIndex","rSum","geometries_ContactSurface","_indexList","maxRadius","volTex","weights","gridx","gridy","gridz","sinTable","cosTable","neighbours","lastClip","weightsMap","mid","ngTorus","fillGridDim","innI","initializeGrid","gridSize","TypeName","uniformArray","rExt","initializeAngleTables","singleAtomObscures","innX","innY","innZ","innCI","ra2","obscured","ni","projectTorus","aIdx","bIdx","xa","ya","za","r1","innR2","dmp","rInt","ng","cost","sint","px","py","pz","iax","iay","iaz","minx","miny","minz","maxx","maxy","maxz","iz","iy","dzy2","zyOffset","ix","current","getVolume","ax","ay","az","ar2","colIdx","cr","cg","cb","cIdx","ap","spx","spy","spz","dd","projectPoints","innIdx","projectTorii","innInnI","fixNegatives","geometries_ContactSurfaceGeometry","contactSurface","ContactSurface","geometries_IsoSurfaceAtomColored","radiusAt","coord","colorX","colorY","colorZ","atomType","srcAtom","geometries_IsosurfaceBuildNormals","vBoxMin","vBoxMax","_numAtoms","_probeRadius","_atomsList","_voxelList","createVoxels","numAtomsRefs","aveRad","numCells","_numCells","_aveRad","side","side2","side3","xScale","_xScale","yScale","_yScale","zScale","_zScale","maxAtomsRefs","xNumVoxMult","yNumVoxMult","zNumVoxMult","diaAffect","numVoxX","numVoxY","numVoxZ","xIndMin","yIndMin","zIndMin","xIndMax","yIndMax","zIndMax","indVoxel","indexNext","destroyVoxels","_vertices","forEachRelatedAtom","xInd","yInd","zInd","ref","getClosestAtom","closest","minDist2","MAX_VALUE","buildNormals","numVertices","numCloseAtoms","vNormalX","vNormalY","vNormalZ","koef","maxRadAffect","maxRadAffect2","expScale","gatherNormals","maxClosedAtoms","buildColors","radiusColorSmoothness","colorsClose","weightsSum","gatherColors","weightNormalized","geometries_IsoSurfaceGeo","maxNumVertices","maxNumTriangles","needVertexColors","_maxNumVertices","_maxNumTriangles","HASH_SIZE","geometries_SSIsosurfaceGeometry","_innerBuild","geoOut","getGeo","_fromGeo","numTri3","convertToAtomsColored","atomsColored","IsoSurfaceAtomColored","nm","hashLines","hashEntries","getBoundingBox","bigNum","probeRadius2","atomRadiusScale","radMax","num","getCornerCoord","numPoints","vOut","invNP","tx","ty","tz","buildEdgePoint","sign","cube","indexPointValue","cTwentyFour","xb","yb","zb","isTriangleVisible","v0","a0","voxelWorld","a1","a2","addTriangle","indInGeo0","addVertexToGeo","indInGeo1","indInGeo2","itr","buildGeoFromCorners","meshRes","vCellStep","vaEdges","vCorner","indCell","indY","indZ","indPointValues","indValues","offs","numTri","indTri","getNumIntersectedCells","numIntersectedCells","cubeValuesIndex","indCorner","letter","atomT","calculateGridCorners","probeRad","vDif","fx","fy","fz","indXMin","indYMin","indZMin","indXMax","indYMax","indZMax","createVertexHash","numHashEtriesAllocated","numHashEntryIndex","getNewHashEntry","vAdd","oneHynberes","hashResolution","marCubeResoultion","iHash","hLineIndex","iVertAdd","entryFirst","modifyExcludedFromGeo","probeSphereRadius","distToSphere","distToBorder","probeSpRad2","sideInv","radEst","xCorner","yCorner","zCorner","ok","expandFactor","meshResolution","colorMode","useVertexColors","excludeProbe","rProbeRadius","numIntersectedCellsEstim","IsoSurfaceGeo","probeRadForNormalsColors","IsosurfaceBuildNormals","geometries","ExtrudedObjectsGeometry","QuickSurfGeometry","ContactSurfaceGeometry","SSIsosurfaceGeometry","LabelsGeometry","items","xTranslation","yTranslation","deltaPos","userData","fieldTxt","spanText","fontSize","strings","spanNodeP","spanNodeText","createLabel","textAlign","fColor","bColor","capabilities","precision","renderer","getMaxPrecision","_noiseData","_noiseWrapS","_noiseWrapT","_noiseMinFilter","_noiseMagFilter","_noiseMapping","noiseTexture","gfx_noiseTexture","noiseWidth","noiseHeight","_samplesKernel","defaultUniforms","merge","diffuse","specular","shininess","zClipValue","clipPlaneValue","nearPlaneValue","invModelViewMatrix","world2colorMatrix","dashedLineSize","dashedLinePeriod","projMatrixInv","viewport","samplesKernel","noiseTex","noiseTexelSize","srcTexelSize","uberOptionNames","uberOptions","zClipCoef","noise","toonShading","UberMaterial","instancedPos","instancedMatrix","attrColor","attrColor2","attrAlphaColor","sphereSprite","cylinderSprite","fakeOpacity","prepassTransparancy","colorFromPos","shadowmapType","colorFromDepth","orthoCam","dashedLine","thickLine","fogTransparent","normalsToGBuffer","glslVersion","precisionString","defines","extensions","createInstance","inst","USE_FOG","INSTANCED_POS","INSTANCED_MATRIX","ATTR_COLOR","ATTR_COLOR2","ATTR_ALPHA_COLOR","OVERRIDE_COLOR","SPHERE_SPRITE","fragDepth","CYLINDER_SPRITE","ZCLIP","CLIP_PLANE","FAKE_OPACITY","USE_LIGHTS","COLOR_FROM_POS","SHADOWMAP_PCF_SHARP","SHADOWMAP_PCF_RAND","SHADOWMAP_BASIC","COLOR_FROM_DEPTH","ORTHOGRAPHIC_CAMERA","PREPASS_TRANSP","DASHED_LINE","THICK_LINE","FOG_TRANSPARENT","drawBuffers","NORMALS_TO_G_BUFFER","TOON_SHADING","shallow","updateUniforms","shaders_UberMaterial","UberObject","SuperClass","NewObjectType","rest","onBeforeRender","scene","_onBeforeRender","_update","Mesh","meshes_ZSpriteMesh","castShadow","receiveShadow","_geometry","_group","modelViewMatrix","multiplyMatrices","uniformsNeedUpdate","ZClippedMesh","modelView","_modelView","mvLength","_mvLength","setFromMatrixColumn","localToWorld","meshes_ZClippedMesh","TextMesh","initialized","srcItem","label","visibility","meshes_TextMesh","meshes_SimpleMesh","_viewport","meshes_ThickLineMesh","projectionMatrix","meshes_InstancedMesh","meshes","ZClipped","ZSprite","ZSpriteMesh","Text","Line","LineSegments","SimpleMesh","ThickLineMesh","Instanced","InstancedMesh","setMatParams","_createInstancedCylinders","Geometry","initMaterial","_createLineSegmentsGeoTriplet","renderParams","thickLines","_createIsoSurfaceGeoTriplet","geoClass","caps","surfaceOpts","meshes_MeshCreator","createSpheres","create2CClosedCylinders","_caps","_settings","create2CCylinders","create2CLines","createCrosses","createExtrudedChains","createChunkedLines","createQuickSurface","createContactSurface","createSASSES","createLabels","TransformGroup","geoParams","transforms","_geoParams","mat","_transforms","_createMeshes","_ray","inverseMatrix","_inverseMatrix","childIntersects","ciCount","geos","meshCnt","meshes_TransformGroup","ChemGroup","selection","_selection","_mode","_colorer","_chunksIdc","chunks","_polyComplexity","_geo","_makeGeoArgs","_mesh","chunksList","_calcChunksList","_changeSubsetOpacity","groups_ChemGroup","groups_AtomsGroup","atomsIdc","groups_AtomsSphereGroup","AtomsGroup","calcAtomRadius","getAtomColor","updateColor","needsColorUpdate","groups_AtomsSurfaceGroup","AtomsSphereGroup","selectedAtoms","getSurfaceOpts","groups_AtomsSASSESGroupStub","getAtomText","getNode","colorMappings","adjust","inverse","propagateColor","rule","startsWith","templateMappings","hetatm","water","parseTemplate","groups_AtomsTextGroup","getLabelOpts","fgColor","bgColor","_slerp","omega","oSin","groups_AromaticGroup","radOffset","addChunk","chunksToIdx","prevVector","currVector","segmentsHeight","_segmentsHeight","leprStep","currAtomIdx","cCount","cycAtoms","chunkPoints","tmpDir","cycleRad","prevPos","currPos","upDir","currAngle","_createShape","pts","groups_AromaticTorusGroup","AromaticGroup","torusRad","getAromRadius","radiusV","calcStickRadius","lookAtVector","mtc","points","currPoint","groups_AromaticLinesGroup","getAromaticOffset","prevPt","getAromaticArcChunks","groups_ResiduesGroup","chunksIdc","resIdx","groups_NucleicItemGroup","ResiduesGroup","stickRad","getResidueColor","_processItem","groups_NucleicCylindersGroup","NucleicItemGroup","cyl1","cyl2","groups_NucleicSpheresGroup","calcMatrix","_buildStructureInterpolator","argTrans","transformT","tt","newt","ans","_addPoints","centerPoints","topPoints","tp","_calcPoints","firstIdx","_prevIdx","_nextIdx","arrIdx","_extrapolate2","otherIdx","prevIdx","nextIdx","nucleic","nameFrom","nameTo","posFrom","posTo","shift","wing","cpPrev","tpPrev","cpNext","tpNext","_addPointsForLoneResidue","groups_CartoonHelper","startIdx","endIdx","pointsArrays","_topInterp","_centerInterp","_shift","_valueStep","_segmentsCount","prepareMatrices","firstRad","secondRad","mtcCount","outMtc","currRad","topInterp","cenInterp","currentValue","mtxIdx","lerpVal","currTop","currCenter","nextCenter","_loopThrough","subDiv","subDivI","subDivN","idc","matrixHelper","CartoonHelper","prevLast","prevSecondRad","getResidueRadius","groups_ResiduesSubseqGroup","cmpMultiplier","getHeightSegmentsRatio","getTension","chunkIdc","subdivs","groups_ResiduesTraceGroup","chunk","groups_BondsGroup","drawMultiple","drawMultiorderBonds","showAromatic","showAromaticLoops","bondsIdc","bondsCount","getBondOrder","getCylinderCount","bondIdx","groups_BondsCylinderGroup","BondsGroup","emptyOffset","calcSpaceFraction","normDir","leftPos","rightPos","currBondIdx","atom1","atom2","a1Pos","a2Pos","currStickRad","STEP_SIZE","AtomsSurfaceGroup","AtomsSASSESGroupStub","AtomsTextGroup","AromaticTorusGroup","AromaticLinesGroup","NucleicCylindersGroup","NucleicSpheresGroup","ResiduesSubseqGroup","ResiduesTraceGroup","BondsCylinderGroup","BondsLinesGroup","bondDir","a1Hangs","a2Hangs","processors_AtomsProcessor","_checkAtom","atomsGroup","meshIdx","chSubset","subsetEl","processors_OrphanAtomsProcessor","AtomsProcessor","processors_ResiduesProcessor","ResidueGroup","_checkResidue","residuesGroup","checkResidue","processors_NucleicProcessor","ResidueProcessor","processors_SubseqsProcessor","jEnd","processors_BondsProcessor","bondsGroup","processors_AromaticProcessor","cycleIdx","perCycle","processors","Atoms","OrphanAtoms","OrphanAtomsProcessor","Residues","ResiduesProcessor","Nucleic","NucleicProcessor","Subseqs","SubseqsProcessor","Bonds","BondsProcessor","Aromatic","AromaticProcessor","_bakeGroup","triplet","Processor","Group","groups_GroupsFactory","AtomsSpheres","MeshCreator","OrphanedAtomsCrosses","BondsCylinders","BondsLines","CartoonChains","TraceChains","NucleicSpheres","NucleicCylinders","ALoopsTorus","ALoopsLines","QuickSurfGeo","ContactSurfaceGeo","SASSESSurfaceGeo","TextLabelsGeo","Mode","identify","buildGeometry","depGroups","currGroup","newGroup","makeContextDependent","modes_Mode","getRenderParams","LinesMode","shortName","modes_LinesMode","LicoriceMode","modes_LicoriceMode","BallsAndSticksMode","modes_BallsAndSticksMode","VanDerWaalsMode","modes_VanDerWaalsMode","TraceMode","modes_TraceMode","TubeMode","_residue","TUBE_RADIUS","modes_TubeMode","CartoonMode","secCache","getResidueStartRadius","secOpts","getResidueEndRadius","ARROW_END","startRad","endRad","_res","tubeRad","secHeight","secData","modes_CartoonMode","SurfaceMode","surfaces","surfaceNames","getVisibilitySelector","isSurface","modes_SurfaceMode","QuickSurfaceMode","useBeads","modes_QuickSurfaceMode","IsoSurfaceMode","_excludeProbe","_radScale","modes_IsoSurfaceMode","IsoSurfaceSASMode","modes_IsoSurfaceSASMode","IsoSurfaceSESMode","modes_IsoSurfaceSESMode","ContactSurfaceMode","modes_ContactSurfaceMode","TextMode","getTemplateOptions","adjustColor","gfx_modes","Palette","getElementColor","asIs","elementColors","defaultElementColor","residueColors","defaultResidueColor","getChainColor","chainColors","getSecondaryColor","secondaryColors","defaultSecondaryColor","getSequentialColor","getGradientColor","gradientName","gradients","defaultNamedColor","beta","lerpColor","getNamedColor","namedColors","minRangeColor","midRangeColor","maxRangeColor","defaultGradientColor","namedColorsArray","rainbow","temp","hot","cold","reds","blues","palettes_Palette","CL","FE","NI","CU","BR","cpkPalette","HE","LI","BE","NE","NA","MG","AL","SI","AR","SC","TI","CR","MN","ZN","GA","GE","KR","RB","SR","ZR","NB","TC","RU","RH","PD","AG","CD","IN","SN","SB","TE","XE","BA","LA","CE","PR","ND","PM","SM","EU","GD","TB","DY","HO","ER","YB","LU","HF","TA","RE","OS","IR","PT","AU","HG","TL","PB","BI","PO","AT","RN","FR","RA","AC","TH","PA","NP","PU","AM","CM","BK","CF","ES","FM","MD","NO","LR","RF","DB","BH","HS","MT","dna","rna","jmolPalette","gfx_palettes","Colorer","palettes","colorers_Colorer","ElementColorer","colorers_ElementColorer","ResidueTypeColorer","colorers_ResidueTypeColorer","SequenceColorer","colorers_SequenceColorer","ChainColorer","colorers_ChainColorer","SecondaryStructureColorer","secondary","colorers_SecondaryStructureColorer","UniformColorer","colorers_UniformColorer","ConditionalColorer","parsed","_subsetCached","colorers_ConditionalColorer","ConformationColorer","colorers_ConformationColorer","TemperatureColorer","colorers_TemperatureColorer","OccupancyColorer","_getColorByOccupancy","colorers_OccupancyColorer","HydrophobicityColorer","hydrophobicity","colorers_HydrophobicityColorer","MoleculeColorer","colorers_MoleculeColorer","CarbonColorer","colorCarbon","colorNotCarbon","gfx_colorers","neutralColor","intensity","materialList","gfx_materials","createDerivativeMesh","layer","newMesh","traverseMeshes","meshTypes","func","_gatherObjects","forEachMeshInGroup","processObj","meshutils","applyTransformsToMeshes","processTransparentMaterial","matValues","prepassTranspMesh","processColFromPosMaterial","colFromPosMesh","createShadowmapMaterial","shadowmapMesh","isShadowmapMesh","removeShadowmapMaterial","countTriangles","totalCount","attribs","property","currAttr","faces","_countMeshTriangles","gfx_Representation","startMaterialValues","selectorString","materialPreset","needsRebuild","setMode","unmarkAtoms","setMaterialPreset","selectionGeo","buildSelectionGeometry","sg","matrixAutoUpdate","compare","repSettings","selStr","valueOf","modeDiff","colorerDiff","change","newSelectorObject","newSelector","newMode","newColorer","newMaterial","_traverseComponentGroups","ComplexEditor","ComplexVisualEdit","ComponentEditor","complexVisual","_complexVisual","_inProgress","_componentTransforms","_bakeComponentTransform","_resetComponentTransform","finalizeEdit","discard","getAltObj","pivot","visual","getSelectedComponent","getSelectionGeo","selectionMask","getSelectionBit","reprNode","bbmin","bbmax","updateMatrix","FragmentEditor","_getSelectionBorderAtoms","_fragmentBoundAtoms","pivotPos","_fragmentGeo","_fragmentSelectionGeo","vg","smeshes","sm","selectionBit","makeTranslation","_bakeAtomTransform","isFreeRotationAllowed","boundAtoms","transformDirection","atomHash","lookupAndCreate","entityList","specs","ComplexVisual","_reprList","_repr","_reprListChanged","_selectionBit","_reprUsedBits","_selectionCount","_selectionGeometry","getSelectionCount","getEditor","_editor","Representation","repCount","desc","status","repGet","_getFreeReprIdx","bits","NUM_REPRESENTATION_BITS","newSelectionBit","originalSelection","buildSelectorFromMask","def","hide","rebuildSelectionGeometry","resetSelectionMask","updateSelectionMask","pickedObj","otherObj","expandSelection","tmpMask","deselectionMask","shrinkSelection","multiple","getSelectionCenter","selRule","reprList","Promise","resolve","errorOccured","setTimeout","hasGeometry","repr","DEBUG","setNeedsRebuild","_buildSelectorFromSortedLists","optimizeList","NaN","expression","and","residx","forSelectedResidues","beginComponentEdit","editor","beginFragmentEdit","setMaterialValues","needTraverse","src_ComplexVisual","volumeUniforms","volumeDim","tileTex","tileTexSize","tileStride","boxAngles","_isoLevel0","_flipV","_BFLeft","_BFRight","_FFLeft","_FFRight","_WFFLeft","_WFFRight","overrideUniforms","defUniforms","facesPosMaterialParams","sideType","BackFacePosMaterial","ShaderParams","BackFacePosMaterialFarPlane","matUniforms","aspectRatio","farZ","tanHalfFOV","matWorld2Volume","FrontFacePosMaterial","VolumeMaterial","shaderParams","updateDefines","ISO_MODE","STEPS_COUNT","shaders_VolumeMaterial","VolumeMesh","cullFlag","edgeIntersections","_updateVertices","_corners","edges","_edges","_edgeIntersections","constant","vert","cornerMark","edgeMark","curEdge","curEdgeInter","CheckX","CheckY","CheckZ","curEdgeIdx","curEdgeSource","face","nextVertex","coplanarPoint","_collectVertices","_sortIndices","_updateIndices","faceIdx","vRight","vDir","rightProj","numIndices","setDataSource","vm","image","volInfo","obtuseAngle","_updateIsoLevel","mean","dmean","dmin","span","dmax","sd","nearClipPlaneOffset","_nearClipPlaneOffset","_pos","_norm","norm4D","_norm4D","matrixWorldToLocal","_matrixWorldToLocal","_clipPlane","getWorldDirection","getWorldPosition","setFromNormalAndCoplanarPoint","gfx_VolumeMesh","VolumeBounds","XY","XZ","YZ","bSize","offsetVert","_getBaseVertices","flatVertices","output","_flattenArray","_lines","projTable","_projectionTable","proj","inv","currDelta","getMesh","gfx_VolumeBounds","gfx_VolumeFarPlane","volume","planeGeo","_initPlaneGeo","_plane","frustumCulled","doubleSided","matWorldToVolume","_renderer","planeCamPos","normalMatrix","volumeMatrix","DEG2RAD","src_VolumeVisual","_frame","showFrame","_farPlane","VolumeFarPlane","getBoundingSphere","needShow","loaders_LoaderList","someLoaders","find","SomeLoader","canProbablyLoad","Loader","_source","_options","_abort","_agent","abort","extractName","FileLoader","_binary","blob","reader","FileReader","readAsArrayBuffer","readAsText","File","urlStartRegexp","XHRLoader","request","ImmediateLoader","loaders","LoaderList","parsers_ParserList","someParsers","format","formats","SomeParser","canProbablyParse","parseSync","getModel","model","_parseHeader","Remark290","_matrix","_matrixIndex","stream","readString","matrixRow","readCharCode","matrixData","matrixIndex","parseFloat","pdb_Remark290","Remark350","assemblies","_assembly","assembly","pdb_Remark350","parsers_PDBStream","_start","_nextCR","_nextLF","_next","_end","readLine","readChar","readInt","readFloat","PDBParser_Complex","PDBParser_Element","PDBParser_Helix","PDBParser_Sheet","PDBParser_Strand","PDBParser_Bond","pdbStartRegexp","remarkParsers","PDBParser","_serialAtomMap","_modelId","_compaundFound","_biomoleculeFound","_allowedChainsIDs","_lastMolId","_remarks","_remark","_compndCurrToken","fileType","_fixBondsArray","_fixChains","remark290","remark350","chainDict","chainObj","idChainMap","nj","_parseATOM","chainID","resSeq","veryLong","nameToElement","Role","_parseENDMDL","_parseCONECT","serial0","serial1","serial2","serial3","serial4","_parseCOMPND","tokenIdx","chainStr","lastChar","_parseREMARK","remarkNum","remark","RemarkParser","_parseHELIX","_parseSTRUCTURE","_parseSHEET","pars","adder","serialNumber","structureName","helLength","shWidth","shCur","shPrev","startChainID","endChainID","startSequenceNumber","iCodeStr","startICode","endSequenceNumber","endICode","cs","_parseHEADER","classification","date","_parseTITLE","title","HEADER","HETATM","ENDMDL","CONECT","COMPND","REMARK","PDBStream","tagParsers","parsers_PDBParser","CMLParser_Complex","CMLParser_Element","CMLParser_SGroup","cOrderCharCodes","cmlStartRegexp","CMLParser","_readOnlyOneMolecule","_rebuidBondIndexes","countBonds","idxs","atomRefs2","_createSGroup","moleculeArr","fieldData","atomRefs","placement","fieldName","_extractSGroup","_extractSGroups","sgroupRef","mapEntry","cycleFuncInner","cycleFunc","x2","x3","y2","y3","z3","atomsRef","_traverseData","dom","childNodes","parseNode","xmlNode","nodeName","nodeValue","jsonNode","existing","_findSuitableMolecule","molSet","atomArray","_selectComponents","doc","DOMParser","parseFromString","traversedData","rawData","cml","retData","filteredData","rd","ret","localBond","bondArray","orderAttr","tc","labels","_breadWidthSearch","retStruct","atomLabels","labelsCount","originalCML","prepareComponentCompound","_packLabel","compId","molId","_unpackLabel","molID","breadthQueue","componentID","labeledAtoms","startID","_parseBond","eAtom","mainAtom","_parseSet","varData","currentLabel","reorder","atomCharge","lLabel","atomFullNameStruct","elementType","countRef","currAtomComp","strLabel","stringify","atomSerial","added","mrvValence","complexAtom","sGrp","totalAtomsParsed","joinedComplex","parsers_CMLParser","MMTFParser_Complex","MMTFParser_Chain","MMTFParser_Atom","MMTFParser_Element","MMTFParser_Helix","MMTFParser_Sheet","MMTFParser_Strand","MMTFParser_Bond","MMTFParser_Assembly","ArrayComparator","original","_original","_sum","candidate","sorted","secStructToType","MMTFParser","_onModel","_modelData","_onChain","chainData","_onGroup","groupData","_updateSecStructure","_onAtom","atomData","_onBond","bondData","helixClasses","_ssType","_ssStruct","_ssStart","struct","_updateMolecules","mmtfData","chainsInModel0","chainIndexList","description","_traverse","structureId","releaseDate","eventCallbacks","modelData","MMTF","_linkAtomsToResidues","_findSynonymousChains","named","_parseAssemblyInfo","bioAssemblyList","baInfo","transformList","chainListCheck","chainNames","allChains","_chainsByName","transpose","_markHeteroAtoms","_joinSynonymousChains","primaryChainsArray","primaryChainsHash","primary","parsers_MMTFParser","ParsingError","column","captureStackTrace","parseLine","parseColumn","parsers_ParsingError","_isWhitespace","_inlineIndexOf","ch0","CIFParser_Complex","CIFParser_Element","CIFParser_Helix","CIFParser_Sheet","CIFParser_Strand","CIFParser_Assembly","cRequiredAtomFields","cSecondaryCoding","helx","turn","strn","getTypeFromId","typeId","arrize","arrayLikeObject","AtomDataError","_extractOperations","assemblyGen","opsDict","groupStr","gps","grIdx","grCount","gr","gp","es","cnt","ii","nn","newMtx","CIFParser","asymDict","newline","block","keysCount","valuesCount","_parseValue","keyIndex","readCIF","_toComplex","cifData","complexData","_extractAtoms","_extractSecondary","_extractAssemblies","_extractMolecules","_extractMetadata","struct_keywords","pdbx_keywords","databaserev","database_PDB_rev","date_original","pdbx_description","atom_site","auth_seq_id","Cartn_x","Cartn_y","Cartn_z","label_atom_id","group_PDB","chainIdc","auth_asym_id","chainLabelIdc","label_asym_id","serials","iCodes","pdbx_PDB_ins_code","resNames","label_comp_id","type_symbol","tempFactors","B_iso_or_equiv","occupancies","charges","pdbx_formal_charge","altLocs","label_alt_id","models","pdbx_PDB_model_num","label_entity_id","moleculeIdx","struct_conf","_extractConfs","struct_sheet_range","_extractSheets","sheetData","sheet_id","beg_label_seq_id","end_label_seq_id","beg_label_asym_id","sheetNames","strandNames","starts","beg_auth_seq_id","ends","end_auth_seq_id","stICodes","pdbx_beg_PDB_ins_code","endICodes","pdbx_end_PDB_ins_code","helicesData","conf_type_id","comments","details","lengths","pdbx_PDB_helix_length","pdbx_PDB_helix_class","asmGen","pdbx_struct_assembly_gen","asmIdx","assembly_id","asmOper","oper_expression","asmList","asym_id_list","operList","vector","ops","_getOperations","pdbx_struct_oper_list","asm","assemblyOps","parsers_CIFParser","valueType","parsers_VolumeModel","_xyz2crs","_header","_boxSize","_boxStart","extent","nstart","crs2xyz","cellDims","angles","_typedCheck","_buff","TypeError","_fillHeader","headerFormat","arrays","_parseArray","_parseVector","_buffer","_setAxisIndices","_setOrigins","_getAxis","header","gamma","z1","z2","_getXYZdim","_getVolumeInfo","_setBoxParams","xaxis","yaxis","zaxis","shiftX","shiftY","_getXYZbox","_toXYZData","CCP4Header","ispg","nsymbt","lksflg","customData","machine","nlabel","Ccp4Model","VolumeModel","u32","i32","f32","xyz2crs","xyzData","crsIdx","CCP4Parser","parsers_CCP4Parser","XYZParser_Complex","XYZParser_Element","parsers_XYZParser","_atomsInf","_fileName","_parseToAtomsInf","endnAtoms","endComment","startAtomsInf","_parseAtomsInf","words","PubChemParser_Complex","PubChemParser","jsonData","PC_Compounds","aids","aid","coords","conformers","aids1","aid1","aids2","aid2","orders","parsers_PubChemParser","SDFStream","_strings","_currentStart","_currentStringIndx","setStart","getNextString","getCurrentString","getStringFromStart","numb","findNextDataItem","curStr","findNextCompoundStart","probablyHaveDataToParse","SDFParser_Complex","SDFParser_Element","SDFParser_Bond","chargeMap","orderMap","typeMap","sdfAndMolRegexp","sdfRegExp","fileFormat","tagsNames","tags","SDFParser","_format","_metadata","_currentMolProps","_compoundIndx","_assemblies","_atomsParsed","_atomsIndexes","_parseAtoms","codes","trunc","reverse","buildChainID","_parseBonds","bondsNum","bondType","_parseMOL","countsLine","_parseDataItem","_parseCompound","props","_tryToUpdateMoleculeData","_buildAssemblies","_buildMolecules","_searchTag","_tryToFind","tagsList","tagPossibleNames","_finalizeMetadata","defineFormat","DSN6Header","div","DSN6Model","i16","_pointCalculate","byteBuffer","counter","_blockCalculate","zBlock","yBlock","xBlock","inRange","blocks","_calculateInfoParams","dispersion","minDensity","maxDensity","DSN6Parser","canParse","checkDataTypeOptions","parsers_DSN6Parser","parsers_GROReader","getNext","GROParser_Complex","GROParser_Element","GROParser","_time","_residueNumber","_residueName","_atomName","_atomNumber","_atomPosition","_atomVelocity","filetype","_parseTitle","_parseNumberOfAtoms","_parseAtom","positionX","positionY","positionZ","GROReader","parsers_GROParser","MOL2Parser_Complex","MOL2Parser_Element","MOL2Parser_Bond","un","am","nc","du","resNumberRegex","spacesRegex","splitToFields","MOL2Parser","_currPosIdx","_currStartIdx","_parseRawStrings","_toStringFromStart","MOL2Data","newPosIdx","_toHeaderString","_toStringFromHeader","_setStart","_probablyHaveDataToParse","_findNextCompoundStart","_parseMolecule","parsedStr","_setResidue","originAtomId","targetAtomId","_fixSerialAtoms","currMolecule","molResidues","parsers","ParserList","XYZParser","exporters_ExporterList","someExporters","Exporter","exportSync","export","PDBResult","_resultArray","_currentStr","_tag","_fixedNumeration","_numeration","_tagStrNum","getResult","writeString","_currentStrLength","newTag","numeration","newString","writeEntireString","maxStrPos","curStrLength","finish","repeat","cStr","writeBondsArray","bondsArrays","_getSubArrays","subArraySize","subArrays","writeMatrix","matrixIndx","toFixed","writeMatrices","Matrix4","PDBExporter","_tags","_result","_tagExtractors","_extractHEADER","TITLE","_extractTITLE","_extractATOM","_extractCONECT","_extractCOMPND","_extractREMARK","_extractHELIX","SHEET","_extractSHEET","_stringForRemark350","_stringForRemark290","fixedBonds","strands","startIndx","_getMoleculeChains","chainsString","_Remark290","_Remark350","biomolIndx","SourceClass","copyFbxPoint3","srcIdx","dstIdx","copyFbxPoint4","vector4","copyTransformedPoint3","setSubArray","copyFunctor","functorOpts","arridx","FBXModel","lastPos","lastNorm","lastCol","vertsCount","indsCount","setPositions","setTransformedPositions","setNormals","setTransformedNormals","setIndices","setShiftedIndices","shifted","getVerticesNumber","addInstance","currentCount","FBXGeometry","_info","FBX1CGeometry","cl","FBX2CCylinder","_cutRawStart","_cutRawEnd","_facesPerSlice","addPerCylinder","_extendVertices","_extendIndices","startToShift","_setColorRange","colorSize","part1End","part2End","capSize","cap1End","cap2End","FBXInfoExtractor","_materials","_models","_extractModelsAndMaterials","_flattenModels","layersOfInterest","checkExportAbility","_collectInstancedGeoInfo","_collectGeoInfo","_reworkIndices","faceSize","overallVertsCount","combined","verticesCount","vertCount","_collectMaterialInfo","_addToPool","_collectSpheresInfo","instCount","instMatrix","objMatrix","sphereColor","instanceIndex","_getSphereInstanceMatrix","_collectCylindersInfo","oneCCylinder","splittingInfo","_gatherCylindersColoringInfo","twoCCylinder","needToSplit","additionalVertsCount","colorStart","colorEnd","is2Colored","_getCylinderInstanceMatrix","materialIdx","_checkExistingMaterial","differs","instIdx","matVector1","matVector2","matVector3","idxOffset","FBXResult","_writeHeader","_writeDefinitions","_writeObjects","_writeRelations","_writeConnections","creator","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","allModels","_verticesIndices","_normalLayer","_colorLayer","allMaterials","_materialProperties","modelsList","_floatArrayToString","colorArray","normalArray","FBXExporter","_version","miewVersion","_extractor","io","exporters","ExporterList","tempColor","gfx_CSS2DRenderer","_height","_widthHalf","_heightHalf","_vector","_viewMatrix","_projectionMatrix","_domElement","overflow","pointerEvents","myNode","setSize","_renderObject","lerpColorAsHex","setHex","getHexString","colorAsHex","setFromMatrixPosition","localOffset","getMaxScaleOnAxis","fogFactor","smoothstep","WebkitTransform","MozTransform","oTransform","getTopWindow","STATE","matrix4","ObjectHandler","lastRotation","ObjectControls","objectPivot","hotkeysEnabled","screen","rotateFactor","axisRotateFactor","intertia","dynamicDampingFactor","intertiaThreshold","_state","_mousePrevPos","_mouseCurPos","_mainObj","_altObj","_affectedObj","_isAltObjFreeRotationAllowed","_isTranslationAllowed","_isKeysTranslatingObj","_pressedKeys","_clock","_lastUpdateTime","_listeners","mousedown","mouseup","mousemove","mousewheel","touchstartend","touchmove","getKeyBindObject","keydownup","handleResize","resetKeys","contextmenu","_rotate","quat","zeroPivot","makeRotationFromQuaternion","setObjects","rot","mousePrevPos","mouseCurPos","aboutAxis","mouse2rotation","setFromAxisAngle","translateOnAxis","timeSinceLastUpdate","timeSinceMove","eyeDirection","cameraUpDirection","cameraSidewaysDirection","moveDirection","mouseDelta","mousePrev","mouseCur","setLength","stopPropagation","preventDefault","innerWidth","innerHeight","getBoundingClientRect","ownerDocument","documentElement","pageXOffset","clientLeft","pageYOffset","clientTop","enableHotkeys","allowTranslation","allow","allowAltObjFreeRotation","keysTranslateObj","isEditingAltObj","convertMouseToOnCircle","pageX","pageY","screenSize","convertMouseToViewport","rotateByMouse","aboutZAxis","getOrientation","setOrientation","getScale","setScale","curTime","_lastMouseMoveTime","speedX","speedY","altObj","button","workWithAltObj","altKey","ctrlKey","shiftKey","translatePivotByMouse","wheelDelta","detail","touches","_touchDistanceCur","_touchDistanceStart","_scaleStart","keyCode","translatePivotInWorld","setX","setY","setZ","translatePivot","setPivot","newPivot","ui_ObjectControls","Picker","_lastMousePos","_mouseTotalDist","_lastClickBeginTime","_lastClickPos","_clickBeginTime","touchstart","touchend","picked","pickObject","screenPos","rayCaster","unproject","fogFarValue","getMouseInViewport","curPos","_lastTouchdownPos","changedTouches","ui_Picker","gfx_Axes","targetCamera","_target","_targetCamera","_object","_full","autoClear","setViewport","secTypes","cSecNames","_createSecondary","strArray","nRes","resid","rIdx","fromUInt20ToInt20","uint20","FrameInfo","payload","callbacks","isLoading","_framesRange","frameIsReady","_frameRequest","_callbacks","_framesRequestLength","_downloadDataFn","parseBinaryData","setFrame","_prepareBuffer","framesStart","framesEnd","_framesCount","onDone","onLoadStatusChanged","onFail","onError","_parseBuffer","_bufferRequestStart","arrayBuffer","dataView","atomsCount","framesCount","_atomsCount","chunkedFramesCount","timeStep","iName","_timeStep","posData","coordIdx","secondaryArr","hiWord","loWord","_secondaryData","nextFrame","_currFrame","_updateSecondary","myResidues","sec","oldSec","nSec","compRes","getSec","frameIdx","_cachedResidues","disableEvents","vec","_vec","gfx_FrameInfo","SceneObject","getGeometry","objects_SceneObject","LinesObj","_id1","_id2","_getAtomFromName","_atom1","_atom2","_line","computeLineDistances","_raycaster","_intersects","verticesNeedUpdate","objects_LinesObj","OutlineMaterial","srcDepthTex","srcTexSize","ScreenQuad_namespaceObject","DEPTH_OUTLINE","shaders_OutlineMaterial","FXAAMaterial","bgTransparent","BG_TRANSPARENT","shaders_FXAAMaterial","AOMaterial","diffuseTexture","normalTexture","depthTexture","camNearFar","projMatrix","kernelRadius","depthThreshold","shaders_AOMaterial","_kernelOffsets","AOHorBlurMaterial","aoMap","samplesOffsets","shaders_AOHorBlurMaterial","AOVertBlurWithBlendMaterial","fogNearFar","useFog","shaders_AOVertBlurWithBlendMaterial","AnaglyphMaterial","srcL","srcR","shaders_AnaglyphMaterial","View","orientation","ViewInterpolator","setup","startView","endView","_endTime","_isPaused","_srcView","_dstView","_isMoving","isMoving","wasStarted","transTime","_transitionTime","getCurrentView","success","createView","slerp","pause","resume","Cookies","removeCookie","cntKey","_toCount","cntVal","_getSimpleCookie","_removeSimpleCookie","setCookie","chunkLen","lc","_chunkString","_setSimpleCookie","getCookie","cookie","_getExpirationDate","today","setFullYear","toUTCString","_exists","utils_Cookies","createWebVRButton","webVRPoC","stylizeElement","bottom","padding","border","font","xr","isSessionSupported","then","supported","cursor","currentSession","onSessionEnded","onSessionStarted","session","_gfx","setReferenceSpaceType","setSession","onmouseenter","onmouseleave","onclick","sessionInit","optionalFeatures","requestSession","moveSceneBehindHeadset","showEnterVR","showWebXRNotFound","textDecoration","WebVRPoC","onToggle","_mainCamera","_button","_onToggle","_molContainer","_user","_scalingPivot","_controller1","_controller2","_pressedGripsCounter","_distance","startScalingByControllers","stopScalingByControllers","handleGripsDown","handleGripsUp","gfx","_mainFog","_plugVRNodesIntoScene","_setControllersListeners","getController","_createControllerMesh","disable","setAnimationLoop","getSession","_unplugVRNodesFromScene","cylinder","rotateX","updateMoleculeScale","scaler","container","getCanvas","Miew_selectors","Miew_Atom","Miew_Residue","Miew_Chain","EDIT_MODE","LOADER_NOT_FOUND","removeExtension","reportProgress","log","percent","chooseFogColor","Miew","settingsCookie","cookiePath","_interpolator","_container","getElementById","getElementsByClassName","_containerRoot","_running","_halting","_building","_needRender","_hotKeysEnabled","_cookies","_spinner","_loading","_animInterval","_visuals","_curVisualName","_sourceWindow","registeredPlugins","_initOnSettingsChanged","_setContainerContents","getMaxRepresentationCount","_updateShadowCamera","shadowMatrix","OBB","halfSize","light","getOBB","class","frag","createDocumentFragment","_msgMode","_msgAtomInfo","_showMessage","_initGfx","_initListeners","_onKeyDown","_onKeyUp","_objectControls","_getAltObj","_picker","_onPick","file","keepRepsInfo","job","halt","msg","_showCanvas","_requestAnimationFrame","requestAnimationFrame","clientWidth","clientHeight","webGLOptions","preserveDrawingBuffer","premultipliedAlpha","renderer2d","CSS2DRenderer","shadowMap","autoUpdate","setPixelRatio","devicePixelRatio","setClearColor","clearColor","stereoCam","selectionScene","selectionRoot","selectionPivot","light12","pixelRatio","getPixelRatio","shadowMapSize","mapSize","light3","Axes","deviceWidth","deviceHeight","offscreenBuf","minFilter","magFilter","depthBuffer","offscreenBuf2","offscreenBuf3","offscreenBuf4","volBFTex","volFFTex","volWFFTex","offscreenBuf5","offscreenBuf6","offscreenBuf7","stereoBufL","stereoBufR","_embedWebXR","stats","Stats","_fps","_onResize","_makeUniqueVisualName","baseName","random","suffix","_addVisual","_removeVisual","_forEachVisual","_releaseAllVisuals","_forEachComplexVisual","_getComplexVisual","any","_getVolumeVisual","VolumeVisual","_getVisualForComplex","getVisuals","getComplexVisualsCount","getCurrentVisual","setCurrentVisual","run","_onTick","_discardComponentEdit","_discardFragmentEdit","enableHotKeys","_resizeOffscreenBuffers","isAnaglyph","multi","_onUpdate","_onRender","_getBSphereRadius","_bSphereForOneVisual","_bBoxForOneVisual","_bBox","_invMatrix","_points","union","_updateFog","_setUberMaterialValues","isScriptingCommandAvailable","callNextCmd","_needRebuild","_updateView","webVR","_clipPlaneUpdateValue","_fogFarUpdateValue","setRenderTarget","_renderFrame","_anaglyphMat","_size","focus","_renderShadowMap","_renderScene","setScissorTest","setScissor","cameraL","cameraR","_onBgColorChanged","_onFogColorChanged","_enableMRT","renderBuffer","textureBuffer","gl","getContext","COLOR_ATTACHMENT0","tx8","__webglTexture","bindTexture","TEXTURE_2D","fb","__webglFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT1","distortion","bHaveComplexes","volumeVisual","ssao","_renderWithPrepassTransparency","dstBuffer","srcBuffer","_performAO","_renderOutline","_renderSelection","_renderVolume","_performFXAA","_performDistortion","aberration","targetBuffer","_outlineMaterial","srcDepthBuffer","srcColorBuffer","currentRenderTarget","getRenderTarget","activeCubeFace","getActiveCubeFace","activeMipmapLevel","getActiveMipmapLevel","setBlending","buffers","setClear","setTest","updateMatrices","_hasSelectionToRender","selPivot","_checkVolumeRenderingSupport","renderTarget","oldRT","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","volumeBFMat","volumeFFMat","cubeOffsetMat","world2colorMat","volumeRenderingSupported","dstBuf","tmpBuf1","tmpBuf2","tmpBuf3","overrideMaterial","colorMask","_fxaaMaterial","_aoMaterial","_horBlurMaterial","_vertBlurMaterial","_scale","normalBuffer","srcDepthTexture","tempBuffer","tempBuffer1","_lastPick","_setEditMode","_resetObjects","setNeedRender","_resetScene","resetPivot","resetView","_export","TheExporter","rePdbId","rePubchem","reUrlScheme","_fetchData","matchesPdbId","sourceType","matchesPubchem","compound","resolveSourceShortcut","TheLoader","fileExt","TheParser","updateBinaryMode","newOptions","keyCount","loader","lengthComputable","total","loaded","catch","onLoadEnd","anything","jobIndex","_refreshTitle","dataSet","_parseData","_onLoad","err","unload","_startAnimation","fileData","_stopAnimation","_frameInfo","isPlaying","_isAnimating","_continueAnimation","_pauseAnimation","clearInterval","minFrameTime","setInterval","_updateObjsToFrame","visualName","amberFileName","hasValidRes","hasValidResidues","resetEd","_onLoadEd","_tweakResolution","_edLoader","loadEd","_rebuildObjects","toRemove","unitIdx","currentUnitInfo","_updateInfoPanel","rebuildActions","appendix","_extractRepresentation","defPreset","_setReps","presList","newIdx","_editMode","getElementsByTagName","_enterComponentEditMode","editors","_editors","_applyComponentEdit","_enterFragmentEditMode","selectedVisuals","_applyFragmentEdit","_updateSelection","firstLine","secondLine","aName","coordLine","nextAltObj","setPivotResidue","amount","setPivotAtom","_centerInVisual","setPivotSubset","_includesInCurSelection","_includesInSelector","screenshot","getDataURL","dataURL","canvas","canvasContext","drawImage","toDataURL","screenshotURI","areaOfInterestTanFov2","shotAspect","setDrawingBufferSize","uri","save","dataString","maxPerf","_gfxScore","_autoChangeResolution","setOptions","objData","bThrow","Ctor","LinesObject","_addSceneObject","sceneObject","objs","getState","compact","getScript","_compareReps","compareWithDefaults","currPreset","repsDiff","emptyReps","repsInfo","objectsState","_updateShadowmapMeshes","_updateMaterials","_fogAlphaChanged","evt","Boolean","sel","euler","setFromQuaternion","srcView","dstView","setFromEuler","None","projected","fullAtomName","complexName","project","exportCML","extractBasis","retMat","makeBasis","extractRotation","xml","removeAttribute","sGroup","updateCMLData","XMLSerializer","serializeToString","curChainName","curChainColor","PACKAGE_VERSION","thirdParty","lodash","three","src_Miew","modeIdDesc","$help","colorDesc","materialDesc","addRepDesc","setGetParameterDesc","MiewCLIHelp","PDBID","REP_NAME","DESCRIPTION","REP_INDEX","EXPRESSION","MODE_ID","COLORER_ID","MATERIAL_ID","new","del","PARAMETER","set_save","set_restore","set_reset","ENCODED_VIEW","removeobj","listobj","Miew_cli_modes","Miew_cli_colorers","Miew_cli_materials","Miew_cli_palettes","Miew_cli_options","NULL","representationsStorage","representationMap","representationID","strId","sortedKeys","utilFunctions","repMap","repName","selectionStr","strList","joinHelpStr","helpData","clihelp","helpItem","awaitWhileCMDisInProcess","finishAwaitingCMDInProcess","modificate","modificators","modificator","argExc","endsWith","cliUtils","cmd","cliutils","_val","notimplemented","script","_printCallback","_errorCallback","parsercli","cmdQueue","commandInAction"],"sourceRoot":""} \ No newline at end of file diff --git a/packages/miew/dist/Miew.module.js b/packages/miew/dist/Miew.module.js index 4bab14eb..13761d20 100644 --- a/packages/miew/dist/Miew.module.js +++ b/packages/miew/dist/Miew.module.js @@ -1,10 +1,10 @@ -/*! Miew - 3D Molecular Viewer v0.11.1 Copyright (c) 2015-2025 EPAM Systems, Inc. */ -import * as __WEBPACK_EXTERNAL_MODULE_lodash__ from "lodash"; +/*! Miew - 3D Molecular Viewer v0.12.0 Copyright (c) 2015-2026 EPAM Systems, Inc. */ +import { default as __WEBPACK_EXTERNAL_MODULE_lodash_default__ } from "lodash"; import * as __WEBPACK_EXTERNAL_MODULE_three__ from "three"; /******/ var __webpack_modules__ = ({ -/***/ 89: -/***/ ((module) => { +/***/ 89 +(module) { /* eslint-disable */ // DO NOT EDIT! Automatically generated from .jison @@ -351,7 +351,8 @@ var parser = function () { switch (yystate) { case 1: return $$[$0 - 1]; - break; + // removed by dead control flow + case 3: this.$ = yy.miew.reset(false); yy.ClearContext(); @@ -2581,248 +2582,329 @@ var parser = function () { break; case 1: return ''; - break; + // removed by dead control flow + case 2: return ''; - break; + // removed by dead control flow + case 3: return 42; - break; + // removed by dead control flow + case 4: return 35; - break; + // removed by dead control flow + case 5: return 77; - break; + // removed by dead control flow + case 6: return 78; - break; + // removed by dead control flow + case 7: return 78; - break; + // removed by dead control flow + case 8: return 8; - break; + // removed by dead control flow + case 9: return 6; - break; + // removed by dead control flow + case 10: return 82; - break; + // removed by dead control flow + case 11: return 7; - break; + // removed by dead control flow + case 12: return 9; - break; + // removed by dead control flow + case 13: return 59; - break; + // removed by dead control flow + case 14: return 13; - break; + // removed by dead control flow + case 15: return 15; - break; + // removed by dead control flow + case 16: return 17; - break; + // removed by dead control flow + case 17: return 18; - break; + // removed by dead control flow + case 18: return 19; - break; + // removed by dead control flow + case 19: return 20; - break; + // removed by dead control flow + case 20: return 11; - break; + // removed by dead control flow + case 21: return 62; - break; + // removed by dead control flow + case 22: return 64; - break; + // removed by dead control flow + case 23: return 23; - break; + // removed by dead control flow + case 24: return 25; - break; + // removed by dead control flow + case 25: return 26; - break; + // removed by dead control flow + case 26: return 27; - break; + // removed by dead control flow + case 27: return 30; - break; + // removed by dead control flow + case 28: return 34; - break; + // removed by dead control flow + case 29: return 33; - break; + // removed by dead control flow + case 30: return 65; - break; + // removed by dead control flow + case 31: return 66; - break; + // removed by dead control flow + case 32: return 37; - break; + // removed by dead control flow + case 33: return 41; - break; + // removed by dead control flow + case 34: return 43; - break; + // removed by dead control flow + case 35: return 52; - break; + // removed by dead control flow + case 36: return 54; - break; + // removed by dead control flow + case 37: return 55; - break; + // removed by dead control flow + case 38: return 46; - break; + // removed by dead control flow + case 39: return 48; - break; + // removed by dead control flow + case 40: return 45; - break; + // removed by dead control flow + case 41: return 49; - break; + // removed by dead control flow + case 42: return 56; - break; + // removed by dead control flow + case 43: return 58; - break; + // removed by dead control flow + case 44: return 44; - break; + // removed by dead control flow + case 45: return 83; - break; + // removed by dead control flow + case 46: return 84; - break; + // removed by dead control flow + case 47: return 85; - break; + // removed by dead control flow + case 48: return 86; - break; + // removed by dead control flow + case 49: return 87; - break; + // removed by dead control flow + case 50: return 88; - break; + // removed by dead control flow + case 51: return 89; - break; + // removed by dead control flow + case 52: return 90; - break; + // removed by dead control flow + case 53: return 91; - break; + // removed by dead control flow + case 54: return 92; - break; + // removed by dead control flow + case 55: return 93; - break; + // removed by dead control flow + case 56: return 94; - break; + // removed by dead control flow + case 57: return 95; - break; + // removed by dead control flow + case 58: return 70; - break; + // removed by dead control flow + case 59: return 70; - break; + // removed by dead control flow + case 60: return 72; - break; + // removed by dead control flow + case 61: return 72; - break; + // removed by dead control flow + case 62: return 74; - break; + // removed by dead control flow + case 63: return 74; - break; + // removed by dead control flow + case 64: return 74; - break; + // removed by dead control flow + case 65: return 31; - break; + // removed by dead control flow + case 66: return 36; - break; + // removed by dead control flow + case 67: return 96; - break; + // removed by dead control flow + case 68: return 97; - break; + // removed by dead control flow + case 69: return 98; - break; + // removed by dead control flow + case 70: return 99; - break; + // removed by dead control flow + case 71: yy_.yytext = yy.utils.unquoteString(yy_.yytext); return 14; - break; + // removed by dead control flow + case 72: return 38; - break; + // removed by dead control flow + case 73: return 5; - break; + // removed by dead control flow + case 74: return 101; - break; + // removed by dead control flow + case 75: return 103; - break; + // removed by dead control flow + case 76: return '\\'; - break; + // removed by dead control flow + case 77: return 28; - break; + // removed by dead control flow + case 78: return 61; - break; + // removed by dead control flow + case 79: return 29; - break; + // removed by dead control flow + case 80: return 57; - break; + // removed by dead control flow + case 81: return 71; - break; + // removed by dead control flow + } }, rules: [/^(?:\s+)/i, /^(?:[#].*)/i, /^(?:\/\/.*)/i, /^(?:([_A-Z0-9\/\+]+==))/i, /^(?:-?[0-9]+(\.[0-9]+)?\b)/i, /^(?:0[xX][0-9A-F]+\b)/i, /^(?:false\b)/i, /^(?:true\b)/i, /^(?:all\b)/i, /^(?:reset\b)/i, /^(?:clear\b)/i, /^(?:build\b)/i, /^(?:help\b)/i, /^(?:load\b)/i, /^(?:get\b)/i, /^(?:set\b)/i, /^(?:set_save\b)/i, /^(?:set_restore\b)/i, /^(?:set_reset\b)/i, /^(?:preset\b)/i, /^(?:motm\b)/i, /^(?:add\b)/i, /^(?:rep\b)/i, /^(?:remove\b)/i, /^(?:hide\b)/i, /^(?:show\b)/i, /^(?:list\b)/i, /^(?:select\b)/i, /^(?:within\b)/i, /^(?:selector\b)/i, /^(?:mode\b)/i, /^(?:color\b)/i, /^(?:material\b)/i, /^(?:view\b)/i, /^(?:unit\b)/i, /^(?:line\b)/i, /^(?:listobj\b)/i, /^(?:removeobj\b)/i, /^(?:rotate\b)/i, /^(?:translate\b)/i, /^(?:scale\b)/i, /^(?:center\b)/i, /^(?:url\b)/i, /^(?:screenshot\b)/i, /^(?:dssp\b)/i, /^(?:file_list\b)/i, /^(?:file_register\b)/i, /^(?:file_delete\b)/i, /^(?:preset_add\b)/i, /^(?:preset_delete\b)/i, /^(?:preset_update\b)/i, /^(?:preset_rename\b)/i, /^(?:preset_open\b)/i, /^(?:create_scenario\b)/i, /^(?:reset_scenario\b)/i, /^(?:delete_scenario\b)/i, /^(?:add_scenario_item\b)/i, /^(?:list_scenario\b)/i, /^(?:s\b)/i, /^(?:mt\b)/i, /^(?:m\b)/i, /^(?:c\b)/i, /^(?:x\b)/i, /^(?:y\b)/i, /^(?:z\b)/i, /^(?:as\b)/i, /^(?:of\b)/i, /^(?:pdb\b)/i, /^(?:delay\b)/i, /^(?:prst\b)/i, /^(?:desc\b)/i, /^(?:((?:"(?:\\.|[^\\"])*"|'(?:\\.|[^\\'])*')))/i, /^(?:([_A-Z0-9]+))/i, /^(?:$)/i, /^(?:\.)/i, /^(?:\/)/i, /^(?:\\)/i, /^(?:-e\b)/i, /^(?:-f\b)/i, /^(?:-s\b)/i, /^(?:-v\b)/i, /^(?:=)/i], @@ -2847,10 +2929,10 @@ module.exports = { parser: parser }; -/***/ }), +/***/ }, -/***/ 99: -/***/ ((module) => { +/***/ 99 +(module) { /* eslint-disable */ // DO NOT EDIT! Automatically generated from .jison @@ -3002,7 +3084,8 @@ var parser = function () { switch (yystate) { case 1: return $$[$0 - 1]; - break; + // removed by dead control flow + case 3: this.$ = yy.keyword('or')($$[$0 - 2], $$[$0]); break; @@ -3592,65 +3675,85 @@ var parser = function () { break; case 1: return 20; - break; + // removed by dead control flow + case 2: return 7; - break; + // removed by dead control flow + case 3: return 8; - break; + // removed by dead control flow + case 4: return 9; - break; + // removed by dead control flow + case 5: return 12; - break; + // removed by dead control flow + case 6: return 16; - break; + // removed by dead control flow + case 7: return 14; - break; + // removed by dead control flow + case 8: return 10; - break; + // removed by dead control flow + case 9: return 11; - break; + // removed by dead control flow + case 10: return 19; - break; + // removed by dead control flow + case 11: return 21; - break; + // removed by dead control flow + case 12: return '<='; - break; + // removed by dead control flow + case 13: return '>='; - break; + // removed by dead control flow + case 14: return '<'; - break; + // removed by dead control flow + case 15: return '>'; - break; + // removed by dead control flow + case 16: yy_.yytext = yy_.yytext.substr(1, yy_.yyleng - 2); return 24; - break; + // removed by dead control flow + case 17: return 13; - break; + // removed by dead control flow + case 18: return 23; - break; + // removed by dead control flow + case 19: return 5; - break; + // removed by dead control flow + case 20: return 'INVALID'; - break; + // removed by dead control flow + } }, rules: [/^(?:\s+)/i, /^(?:(-?(?:[1-9][0-9]+|[0-9]))\b)/i, /^(?:OR\b)/i, /^(?:AND\b)/i, /^(?:NOT\b)/i, /^(?:((ALL|NONE|HETATM|PROTEIN|BASIC|ACIDIC|CHARGED|POLAR|NONPOLAR|AROMATIC|NUCLEIC|PURINE|PYRIMIDINE|WATER|POLARH|NONPOLARH))\b)/i, /^(?:((NAME|ELEM|TYPE|RESIDUE|ICODE|CHAIN|ALTLOC))\b)/i, /^(?:((SERIAL|SEQUENCE|RESIDX))\b)/i, /^(?:\()/i, /^(?:\))/i, /^(?:,)/i, /^(?::)/i, /^(?:<=)/i, /^(?:>=)/i, /^(?:<)/i, /^(?:>)/i, /^(?:((?:"(?:\\.|[^\\"])*"|'(?:\\.|[^\\'])*')))/i, /^(?:(@[_A-Z0-9]+))/i, /^(?:([_A-Z0-9]+))/i, /^(?:$)/i, /^(?:.)/i], @@ -3675,10 +3778,10 @@ module.exports = { parser: parser }; -/***/ }), +/***/ }, -/***/ 690: -/***/ (function(__unused_webpack_module, exports) { +/***/ 690 +(__unused_webpack_module, exports) { /* Smooth.js version 0.1.7 @@ -4072,16 +4175,17 @@ Licensed under MIT license (see "Smooth.js MIT license.txt") ( true && exports !== null ? exports : window).Smooth = Smooth; }).call(this); -/***/ }), +/***/ }, -/***/ 660: -/***/ (function(module, exports) { +/***/ 660 +(module, exports) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!function (r, t) { if (true) !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (t), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else {} + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // removed by dead control flow +{} }(this, function (r) { "use strict"; @@ -4722,7 +4826,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ r.encode = Q, r.decode = Y, r.traverse = K, r.fetch = $, r.fetchReduced = _, r.version = er, r.fetchUrl = or, r.fetchReducedUrl = ar, r.encodeMsgpack = o, r.encodeMmtf = R, r.decodeMsgpack = H, r.decodeMmtf = X; }); -/***/ }) +/***/ } /******/ }); /************************************************************************/ @@ -4781,22 +4885,12 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ /******/ })(); /******/ /************************************************************************/ -var __webpack_exports__ = {}; -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - A: () => (/* binding */ src) -}); +;// external {"module":"lodash","commonjs":"lodash","commonjs2":"lodash","amd":"lodash","root":"_"} -;// CONCATENATED MODULE: external {"module":"lodash","commonjs":"lodash","commonjs2":"lodash","amd":"lodash","root":"_"} -var x = (y) => { - var x = {}; __webpack_require__.d(x, y); return x -} -var y = (x) => (() => (x)) -const external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject = x({ ["default"]: () => (__WEBPACK_EXTERNAL_MODULE_lodash__["default"]) }); -;// CONCATENATED MODULE: external {"module":"three","commonjs":"three","commonjs2":"three","amd":"three","root":"THREE"} +;// external {"module":"three","commonjs":"three","commonjs2":"three","amd":"three","root":"THREE"} const external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject = __WEBPACK_EXTERNAL_MODULE_three__; -;// CONCATENATED MODULE: ../../node_modules/spin.js/spin.js +;// ../../node_modules/spin.js/spin.js var __assign = undefined && undefined.__assign || function () { __assign = Object.assign || function (t) { for (var s, i = 1, n = arguments.length; i < n; i++) { @@ -4967,7 +5061,7 @@ function convertOffset(x, y, degrees) { var cos = Math.cos(radians); return [Math.round((x * cos + y * sin) * 1000) / 1000, Math.round((-x * sin + y * cos) * 1000) / 1000]; } -;// CONCATENATED MODULE: ./src/Timer.js +;// ./src/Timer.js //---------------------------------------------------------------------------- // Timer @@ -5006,7 +5100,7 @@ Timer.now = function () { const p = typeof window !== 'undefined' && window.performance; return p && p.now ? p.now.bind(p) : Date.now; }(); -;// CONCATENATED MODULE: ./src/gfx/Stats.js +;// ./src/gfx/Stats.js const { now @@ -5059,7 +5153,7 @@ class Stats { } } /* harmony default export */ const gfx_Stats = (Stats); -;// CONCATENATED MODULE: ./src/utils/EventDispatcher.js +;// ./src/utils/EventDispatcher.js /** * This class introduces the simplest event system. */ @@ -5096,7 +5190,7 @@ EventDispatcher.prototype.addEventListener = function (type, callback, context) function _checkPar(par) { return par[0] === params[0] && par[1] === params[1]; } - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].find(handlers, _checkPar) === undefined) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.find(handlers, _checkPar) === undefined) { handlers.push(params); } }; @@ -5113,10 +5207,10 @@ EventDispatcher.prototype.addEventListener = function (type, callback, context) */ EventDispatcher.prototype.removeEventListener = function (type, callback, context) { const self = this; - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].forEach(self._handlers, (handler, ev) => { - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].remove(handler, values => isUndefOrEqual(type, ev) && isUndefOrEqual(callback, values[0]) && isUndefOrEqual(context, values[1] || self)); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.forEach(self._handlers, (handler, ev) => { + __WEBPACK_EXTERNAL_MODULE_lodash_default__.remove(handler, values => isUndefOrEqual(type, ev) && isUndefOrEqual(callback, values[0]) && isUndefOrEqual(context, values[1] || self)); }); - this._handlers = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].omitBy(self._handlers, handler => handler.length === 0); + this._handlers = __WEBPACK_EXTERNAL_MODULE_lodash_default__.omitBy(self._handlers, handler => handler.length === 0); }; /** @@ -5126,13 +5220,13 @@ EventDispatcher.prototype.removeEventListener = function (type, callback, contex */ EventDispatcher.prototype.dispatchEvent = function (event) { const self = this; - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].forEach(this._handlers[event.type], callback => { + __WEBPACK_EXTERNAL_MODULE_lodash_default__.forEach(this._handlers[event.type], callback => { const context = callback[1] || self; callback[0].apply(context, [event]); }); }; /* harmony default export */ const utils_EventDispatcher = (EventDispatcher); -;// CONCATENATED MODULE: ./src/utils/logger.js +;// ./src/utils/logger.js /** * This module contains class for logging. * Returns an instance of a logger that have already been created. @@ -5175,7 +5269,7 @@ Logger.prototype.instantiate = function () { return new Logger(); }; function verify(number) { - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isNumber(number)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isNumber(number)) { throw new Error('Wrong log level specified!'); } return number; @@ -5187,7 +5281,7 @@ function verify(number) { */ Object.defineProperty(Logger.prototype, 'level', { get() { - return external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].findKey(priorities, value => value === this._priority); + return __WEBPACK_EXTERNAL_MODULE_lodash_default__.findKey(priorities, value => value === this._priority); }, set(level) { this._priority = verify(priorities[level]); @@ -5263,7 +5357,7 @@ Logger.prototype._message = function (priority, message) { if (priority < this._priority) { return; } - const level = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].findKey(priorities, value => value === priority); + const level = __WEBPACK_EXTERNAL_MODULE_lodash_default__.findKey(priorities, value => value === priority); message = String(message); if (this.console) { const output = `miew:${level}: ${message}`; @@ -5282,7 +5376,7 @@ Logger.prototype._message = function (priority, message) { }); }; /* harmony default export */ const logger = (new Logger()); -;// CONCATENATED MODULE: ./src/utils.js +;// ./src/utils.js const browserType = { @@ -5363,7 +5457,7 @@ function resolveURL(str) { return new URL(str, window.location).href; } return new URL(str).href; - } catch (error) { + } catch { // IE 11 has a URL object with no constructor available so just try a different approach instead } } @@ -5432,11 +5526,11 @@ function utils_createElement(tag, attrs, content) { * @returns {function} Original class. */ function deriveClass(cls, base, members, statics) { - cls.prototype = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].assign(Object.create(base.prototype), { + cls.prototype = __WEBPACK_EXTERNAL_MODULE_lodash_default__.assign(Object.create(base.prototype), { constructor: cls }, members); if (statics) { - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].assign(cls, statics); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.assign(cls, statics); } return cls; } @@ -5490,16 +5584,13 @@ function DebugTracer(namespace) { let indent = 0; const methods = Object.keys(namespace); function wrap(method_, name_) { - return function () { + return function (...args) { const spaces = DebugTracer.spaces.substr(0, indent * 2); if (enabled) { logger.debug(`${spaces + name_} {`); } indent++; - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - const result = method_.apply(this, args); // eslint-disable-line no-invalid-this + const result = method_.apply(this, args); indent--; if (enabled) { logger.debug(`${spaces}} // ${name_}`); @@ -5540,7 +5631,7 @@ function allocateTyped(TypedArrayName, size) { //---------------------------------------------------------------------------- // Float array conversion -function bytesToBase64( /** ArrayBuffer */buffer) { +function bytesToBase64(/** ArrayBuffer */buffer) { const bytes = new Uint8Array(buffer); let binary = ''; for (let i = 0; i < bytes.byteLength; i++) { @@ -5548,7 +5639,7 @@ function bytesToBase64( /** ArrayBuffer */buffer) { } return window.btoa(binary); } -function bytesFromBase64( /** string */str) { +function bytesFromBase64(/** string */str) { const binary = window.atob(str); const bytes = new Uint8Array(binary.length); for (let i = 0; i < bytes.length; ++i) { @@ -5556,10 +5647,10 @@ function bytesFromBase64( /** string */str) { } return bytes.buffer; } -function arrayToBase64( /** number[] */array, /** function */TypedArrayClass) { +function arrayToBase64(/** number[] */array, /** function */TypedArrayClass) { return bytesToBase64(new TypedArrayClass(array).buffer); } -function arrayFromBase64( /** string */str, /** function */TypedArrayClass) { +function arrayFromBase64(/** string */str, /** function */TypedArrayClass) { return Array.prototype.slice.call(new TypedArrayClass(bytesFromBase64(str))); } @@ -5583,7 +5674,7 @@ function compareOptionsWithDefaults(opts, defOpts) { return ''; } function isAlmostPlainObject(o) { - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isPlainObject(o)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isPlainObject(o)) { return true; } const proto = o && Object.getPrototypeOf(o); @@ -5599,14 +5690,14 @@ function isAlmostPlainObject(o) { */ function objectsDiff(src, dst) { const diff = {}; - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].forIn(src, (srcValue, key) => { + __WEBPACK_EXTERNAL_MODULE_lodash_default__.forIn(src, (srcValue, key) => { const dstValue = dst[key]; if (isAlmostPlainObject(srcValue) && isAlmostPlainObject(dstValue)) { const deepDiff = objectsDiff(srcValue, dstValue); - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEmpty(deepDiff)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isEmpty(deepDiff)) { diff[key] = deepDiff; } - } else if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEqual(srcValue, dstValue)) { + } else if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isEqual(srcValue, dstValue)) { diff[key] = srcValue; } }); @@ -5614,7 +5705,7 @@ function objectsDiff(src, dst) { } function forInRecursive(object, callback) { function iterateThrough(obj, prefix) { - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].forIn(obj, (value, key) => { + __WEBPACK_EXTERNAL_MODULE_lodash_default__.forIn(obj, (value, key) => { const newPref = prefix + (prefix.length > 0 ? '.' : ''); if (value instanceof Object) { iterateThrough(value, newPref + key); @@ -5626,13 +5717,13 @@ function forInRecursive(object, callback) { iterateThrough(object, ''); } function enquoteString(value) { - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(value)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(value)) { return `"${value.replace(/"/g, '\\"')}"`; } return value; } function unquoteString(value) { - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(value)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(value)) { return value; } if (value[0] === '"' && value[value.length - 1] === '"') { @@ -5814,7 +5905,7 @@ function mergeTypedArraysUnsafe(array) { concatTypedArraysUnsafe, mergeTypedArraysUnsafe }); -;// CONCATENATED MODULE: ./src/utils/JobHandle.js +;// ./src/utils/JobHandle.js class JobHandle extends utils_EventDispatcher { constructor() { @@ -5840,7 +5931,7 @@ class JobHandle extends utils_EventDispatcher { }); } } -;// CONCATENATED MODULE: ./src/settings.js +;// ./src/settings.js @@ -6702,32 +6793,32 @@ function Settings() { utils.deriveClass(Settings, utils_EventDispatcher, { defaults: settings_defaults, set(path, value) { - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(path)) { - const oldValue = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].get(this.now, path); + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(path)) { + const oldValue = __WEBPACK_EXTERNAL_MODULE_lodash_default__.get(this.now, path); if (oldValue !== value) { - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].set(this.now, path, value); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.set(this.now, path, value); this._notifyChange(path, value); } } else { const diff = utils.objectsDiff(path, this.now); - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEmpty(diff)) { - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].merge(this.now, diff); + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isEmpty(diff)) { + __WEBPACK_EXTERNAL_MODULE_lodash_default__.merge(this.now, diff); this._notifyChanges(diff); } } }, get(path, defaultValue) { - return external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].get(this.now, path, defaultValue); + return __WEBPACK_EXTERNAL_MODULE_lodash_default__.get(this.now, path, defaultValue); }, reset() { const diff = utils.objectsDiff(settings_defaults, this.now); - this.now = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].cloneDeep(settings_defaults); + this.now = __WEBPACK_EXTERNAL_MODULE_lodash_default__.cloneDeep(settings_defaults); this.old = null; this._notifyChanges(diff); this._changed = {}; }, checkpoint() { - this.old = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].cloneDeep(this.now); + this.old = __WEBPACK_EXTERNAL_MODULE_lodash_default__.cloneDeep(this.now); this._changed = {}; }, _notifyChange(path, value) { @@ -6750,7 +6841,7 @@ utils.deriveClass(Settings, utils_EventDispatcher, { old, now } = this; - const keys = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].filter(Object.keys(this._changed), key => external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].get(old, key) !== external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].get(now, key)); + const keys = __WEBPACK_EXTERNAL_MODULE_lodash_default__.filter(Object.keys(this._changed), key => __WEBPACK_EXTERNAL_MODULE_lodash_default__.get(old, key) !== __WEBPACK_EXTERNAL_MODULE_lodash_default__.get(now, key)); return keys; }, applyDiffs(diffs) { @@ -6770,19 +6861,19 @@ utils.deriveClass(Settings, utils_EventDispatcher, { return diffs; }, setPluginOpts(plugin, opts) { - settings_defaults.plugins[plugin] = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].cloneDeep(opts); - this.now.plugins[plugin] = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].cloneDeep(opts); + settings_defaults.plugins[plugin] = __WEBPACK_EXTERNAL_MODULE_lodash_default__.cloneDeep(opts); + this.now.plugins[plugin] = __WEBPACK_EXTERNAL_MODULE_lodash_default__.cloneDeep(opts); } }); /* harmony default export */ const settings = (new Settings()); -;// CONCATENATED MODULE: ./src/options.js +;// ./src/options.js let repIndex = 0; function asBoolean(value) { - return !(!value || value === '0' || external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(value) && value.toLowerCase() === 'false'); + return !(!value || value === '0' || __WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(value) && value.toLowerCase() === 'false'); } const adapters = { string: String, @@ -6895,9 +6986,9 @@ function extractArgs(input, defaultsDict, params) { const pair = arg.split(cL2Ass, 2); const key = decodeURIComponent(pair[0]); const value = decodeURIComponent(pair[1]); - const adapter = adapters[typeof external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].get(defaults, key)]; + const adapter = adapters[typeof __WEBPACK_EXTERNAL_MODULE_lodash_default__.get(defaults, key)]; if (adapter) { - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].set(opts, key, adapter(value)); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.set(opts, key, adapter(value)); } else { logger.warn(`Unknown argument "${key}" for option "${input}"`); } @@ -6990,20 +7081,20 @@ function _fromArray(entries) { let /** function|string? */action = actions[key]; // unwind shortcuts and aliases - while (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(action)) { + while (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(action)) { key = action; action = actions[key]; } // either set a property or use specialized parser if (!action) { - const adapter = adapters[typeof external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].get(settings.defaults, key)]; + const adapter = adapters[typeof __WEBPACK_EXTERNAL_MODULE_lodash_default__.get(settings.defaults, key)]; if (adapter) { - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].set(opts, `settings.${key}`, adapter(value)); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.set(opts, `settings.${key}`, adapter(value)); } else { logger.warn(`Unknown option "${key}"`); } - } else if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isFunction(action)) { + } else if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isFunction(action)) { const result = action(value, opts); if (result !== undefined) { opts[key] = result; @@ -7027,7 +7118,7 @@ function _processOptsForURL(opts) { return str.join(cLSep); } function _processArgsForURL(args) { - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isArray(args)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isArray(args)) { return args; } if (args.length < 2) { @@ -7040,7 +7131,7 @@ function _processObjForURL(objOpts) { return undefined; } let res = objOpts.type; - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isArray(objOpts.params) && objOpts.params.length > 0) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isArray(objOpts.params) && objOpts.params.length > 0) { res += `,${objOpts.params.join(',')}`; } if (objOpts.opts) { @@ -7061,7 +7152,7 @@ function toURL(opts) { return; } for (let i = 0, n = repList.length; i < n; ++i) { - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEmpty(repList[i])) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isEmpty(repList[i])) { continue; } checkAndAdd('r', i); @@ -7114,7 +7205,7 @@ function _processOptsForScript(opts) { return str.join(' '); } function _processArgsForScript(args) { - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isArray(args)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isArray(args)) { return args; } if (args.length < 2) { @@ -7127,7 +7218,7 @@ function _processObjForScript(objOpts) { return undefined; } let res = objOpts.type; - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isArray(objOpts.params) && objOpts.params.length > 0) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isArray(objOpts.params) && objOpts.params.length > 0) { res += ` ${objOpts.params.map(utils.enquoteString).join(' ')}`; } if (objOpts.opts) { @@ -7143,7 +7234,7 @@ function _processRepsForScript(rep, index) { repString[strIdx++] = prefix + value; } } - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEmpty(rep)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isEmpty(rep)) { return null; } localAdd('', index); @@ -7203,7 +7294,7 @@ function toScript(opts) { toURL, toScript }); -;// CONCATENATED MODULE: ./src/chem/Atom.js +;// ./src/chem/Atom.js /** * Atom measurements. * @@ -7303,7 +7394,7 @@ class Atom { }; } /* harmony default export */ const chem_Atom = (Atom); -;// CONCATENATED MODULE: ./src/chem/Element.js +;// ./src/chem/Element.js class Element { constructor(number, name, fullName, weight, radius, radiusBonding, hValency) { this.number = number; @@ -7315,39 +7406,32 @@ class Element { this.hydrogenValency = hValency; } static Constants = { - /* eslint-disable no-magic-numbers */ U1: 1, Lead: 2, U2: 3, Wing: 4, U18: 18 - /* eslint-enable no-magic-numbers */ }; - static Role = (() => ({ - /* eslint-disable no-magic-numbers */ + static Role = { N: Element.Constants.U1, CA: Element.Constants.Lead, C: Element.Constants.U2, O: Element.Constants.Wing, SG: Element.Constants.U18 - /* eslint-enable no-magic-numbers */ - }))(); + }; // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py. - static ByAtomicNumber = (() => [/* eslint-disable no-magic-numbers */ - null, new Element(1, 'H', 'Hydrogen', 1.008, 1.2, 0.23, [1]), new Element(2, 'HE', 'Helium', 4.003, 1.4, 0.93, [0]), new Element(3, 'LI', 'Lithium', 6.941, 1.82, 0.68, [1]), new Element(4, 'BE', 'Beryllium', 9.012, 1.7, 0.35, [2]), new Element(5, 'B', 'Boron', 10.81, 2.08, 0.83, [3]), new Element(6, 'C', 'Carbon', 12.011, 1.95, 0.68, [4]), new Element(7, 'N', 'Nitrogen', 14.007, 1.85, 0.68, [3, 5]), new Element(8, 'O', 'Oxygen', 15.999, 1.7, 0.68, [2, 4]), new Element(9, 'F', 'Fluorine', 18.998, 1.73, 0.64, [1]), new Element(10, 'NE', 'Neon', 20.18, 1.54, 1.12, [0]), new Element(11, 'NA', 'Sodium', 22.99, 2.27, 0.97, [1]), new Element(12, 'MG', 'Magnesium', 24.305, 1.73, 1.1, [2]), new Element(13, 'AL', 'Aluminum', 26.981, 2.05, 1.35, [3]), new Element(14, 'SI', 'Silicon', 28.086, 2.1, 1.2, [4]), new Element(15, 'P', 'Phosphorus', 30.974, 2.08, 0.75, [3, 5]), new Element(16, 'S', 'Sulfur', 32.07, 2, 1.02, [2, 4, 6]), new Element(17, 'CL', 'Chlorine', 35.453, 1.97, 0.99, [1, 3, 5, 7]), new Element(18, 'AR', 'Argon', 39.948, 1.88, 1.57, [0]), new Element(19, 'K', 'Potassium', 39.1, 2.75, 1.33, [1]), new Element(20, 'CA', 'Calcium', 40.08, 1.973, 0.99, [2]), new Element(21, 'SC', 'Scandium', 44.956, 1.7, 1.44, [0]), new Element(22, 'TI', 'Titanium', 47.88, 1.7, 1.47, [0]), new Element(23, 'V', 'Vanadium', 50.941, 1.7, 1.33, [0]), new Element(24, 'CR', 'Chromium', 52, 1.7, 1.35, [0]), new Element(25, 'MN', 'Manganese', 54.938, 1.7, 1.35, [0]), new Element(26, 'FE', 'Iron', 55.847, 1.7, 1.34, [0]), new Element(27, 'CO', 'Cobalt', 58.93, 1.7, 1.33, [0]), new Element(28, 'NI', 'Nickel', 58.69, 1.63, 1.5, [0]), new Element(29, 'CU', 'Copper', 63.55, 1.4, 1.52, [0]), new Element(30, 'ZN', 'Zinc', 65.39, 1.39, 1.45, [0]), new Element(31, 'GA', 'Gallium', 69.72, 1.87, 1.22, [3]), new Element(32, 'GE', 'Germanium', 72.61, 1.7, 1.17, [4]), new Element(33, 'AS', 'Arsenic', 74.92, 1.85, 1.21, [3, 5]), new Element(34, 'SE', 'Selenium', 78.96, 1.9, 1.22, [2, 4, 6]), new Element(35, 'BR', 'Bromine', 79.9, 2.1, 1.21, [1, 3, 5, 7]), new Element(36, 'KR', 'Krypton', 83.8, 2.02, 1.91, [0]), new Element(37, 'RB', 'Rubidium', 85.47, 1.7, 1.47, [1]), new Element(38, 'SR', 'Strontium', 87.62, 1.7, 1.12, [2]), new Element(39, 'Y', 'Yttrium', 88.91, 1.7, 1.78, [0]), new Element(40, 'ZR', 'Zirconium', 91.22, 1.7, 1.56, [0]), new Element(41, 'NB', 'Niobium', 92.91, 1.7, 1.48, [0]), new Element(42, 'MO', 'Molybdenum', 95.94, 1.7, 1.47, [0]), new Element(43, 'TC', 'Technetium', 98.91, 1.7, 1.35, [0]), new Element(44, 'RU', 'Ruthenium', 101.07, 1.7, 1.4, [0]), new Element(45, 'RH', 'Rhodium', 102.91, 1.7, 1.45, [0]), new Element(46, 'PD', 'Palladium', 106.42, 1.63, 1.5, [0]), new Element(47, 'AG', 'Silver', 107.87, 1.72, 1.59, [0]), new Element(48, 'CD', 'Cadmium', 112.41, 1.58, 1.69, [0]), new Element(49, 'IN', 'Indium', 114.82, 1.93, 1.63, [3]), new Element(50, 'SN', 'Tin', 118.71, 2.17, 1.46, [2, 4]), new Element(51, 'SB', 'Antimony', 121.75, 2.2, 1.46, [3, 5]), new Element(52, 'TE', 'Tellurium', 127.6, 2.06, 1.47, [2, 4, 6]), new Element(53, 'I', 'Iodine', 126.91, 2.15, 1.4, [1, 3, 5, 7]), new Element(54, 'XE', 'Xenon', 131.29, 2.16, 1.98, [0]), new Element(55, 'CS', 'Cesium', 132.91, 1.7, 1.67, [1]), new Element(56, 'BA', 'Barium', 137.33, 1.7, 1.34, [2]), new Element(57, 'LA', 'Lanthanum', 138.91, 1.7, 1.87, [0]), new Element(58, 'CE', 'Cerium', 140.12, 1.7, 1.83, [0]), new Element(59, 'PR', 'Praseodymium', 140.91, 1.7, 1.82, [0]), new Element(60, 'ND', 'Neodymium', 144.24, 1.7, 1.81, [0]), new Element(61, 'PM', 'Promethium', 144.9, 1.7, 1.8, [0]), new Element(62, 'SM', 'Samarium', 150.36, 1.7, 1.8, [0]), new Element(63, 'EU', 'Europium', 151.96, 1.7, 1.99, [0]), new Element(64, 'GD', 'Gadolinium', 157.25, 1.7, 1.79, [0]), new Element(65, 'TB', 'Terbium', 158.93, 1.7, 1.76, [0]), new Element(66, 'DY', 'Dysprosium', 162.5, 1.7, 1.75, [0]), new Element(67, 'HO', 'Holmium', 164.93, 1.7, 1.74, [0]), new Element(68, 'ER', 'Erbium', 167.26, 1.7, 1.73, [0]), new Element(69, 'TM', 'Thulium', 168.93, 1.7, 1.72, [0]), new Element(70, 'YB', 'Ytterbium', 173.04, 1.7, 1.94, [0]), new Element(71, 'LU', 'Lutetium', 174.97, 1.7, 1.72, [0]), new Element(72, 'HF', 'Hafnium', 178.49, 1.7, 1.57, [0]), new Element(73, 'TA', 'Tantalum', 180.95, 1.7, 1.43, [0]), new Element(74, 'W', 'Tungsten', 183.85, 1.7, 1.37, [0]), new Element(75, 'RE', 'Rhenium', 186.21, 1.7, 1.35, [0]), new Element(76, 'OS', 'Osmium', 190.2, 1.7, 1.37, [0]), new Element(77, 'IR', 'Iridium', 192.22, 1.7, 1.32, [0]), new Element(78, 'PT', 'Platinum', 195.08, 1.72, 1.5, [0]), new Element(79, 'AU', 'Gold', 196.97, 1.66, 1.5, [0]), new Element(80, 'HG', 'Mercury', 200.59, 1.55, 1.7, [0]), new Element(81, 'TL', 'Thallium', 204.38, 1.96, 1.55, [1, 3]), new Element(82, 'PB', 'Lead', 207.2, 2.02, 1.54, [2, 4]), new Element(83, 'BI', 'Bismuth', 208.98, 1.7, 1.54, [3, 5]), new Element(84, 'PO', 'Polonium', 210, 1.7, 1.68, [2, 4, 6]), new Element(85, 'AT', 'Astatine', 210, 1.7, 1.7, [1, 3, 5, 7]), new Element(86, 'RN', 'Radon', 222, 1.7, 2.4, [0]), new Element(87, 'FR', 'Francium', 223, 1.7, 2, [1]), new Element(88, 'RA', 'Radium', 226.03, 1.7, 1.9, [2]), new Element(89, 'AC', 'Actinium', 227.03, 1.7, 1.88, [0]), new Element(90, 'TH', 'Thorium', 232.04, 1.7, 1.79, [0]), new Element(91, 'PA', 'Protactinium', 231.04, 1.7, 1.61, [0]), new Element(92, 'U', 'Uranium', 238.03, 1.86, 1.58, [0]), new Element(93, 'NP', 'Neptunium', 237.05, 1.7, 1.55, [0]), new Element(94, 'PU', 'Plutonium', 239.1, 1.7, 1.53, [0]), new Element(95, 'AM', 'Americium', 243.1, 1.7, 1.51, [0]), new Element(96, 'CM', 'Curium', 247.1, 1.7, 1.5, [0]), new Element(97, 'BK', 'Berkelium', 247.1, 1.7, 1.5, [0]), new Element(98, 'CF', 'Californium', 252.1, 1.7, 1.5, [0]), new Element(99, 'ES', 'Einsteinium', 252.1, 1.7, 1.5, [0]), new Element(100, 'FM', 'Fermium', 257.1, 1.7, 1.5, [0]), new Element(101, 'MD', 'Mendelevium', 256.1, 1.7, 1.5, [0]), new Element(102, 'NO', 'Nobelium', 259.1, 1.7, 1.5, [0]), new Element(103, 'LR', 'Lawrencium', 260.1, 1.7, 1.5, [0]), new Element(104, 'RF', 'Rutherfordium', 261, 1.7, 1.6, [0]), new Element(105, 'DB', 'Dubnium', 262, 1.7, 1.6, [0]), new Element(106, 'SG', 'Seaborgium', 263, 1.7, 1.6, [0]), new Element(107, 'BH', 'Bohrium', 262, 1.7, 1.6, [0]), new Element(108, 'HS', 'Hassium', 265, 1.7, 1.6, [0]), new Element(109, 'MT', 'Meitnerium', 268, 1.7, 1.6, [0]) - /* eslint-enable no-magic-numbers */])(); + static ByAtomicNumber = [null, new Element(1, 'H', 'Hydrogen', 1.008, 1.2, 0.23, [1]), new Element(2, 'HE', 'Helium', 4.003, 1.4, 0.93, [0]), new Element(3, 'LI', 'Lithium', 6.941, 1.82, 0.68, [1]), new Element(4, 'BE', 'Beryllium', 9.012, 1.7, 0.35, [2]), new Element(5, 'B', 'Boron', 10.81, 2.08, 0.83, [3]), new Element(6, 'C', 'Carbon', 12.011, 1.95, 0.68, [4]), new Element(7, 'N', 'Nitrogen', 14.007, 1.85, 0.68, [3, 5]), new Element(8, 'O', 'Oxygen', 15.999, 1.7, 0.68, [2, 4]), new Element(9, 'F', 'Fluorine', 18.998, 1.73, 0.64, [1]), new Element(10, 'NE', 'Neon', 20.18, 1.54, 1.12, [0]), new Element(11, 'NA', 'Sodium', 22.99, 2.27, 0.97, [1]), new Element(12, 'MG', 'Magnesium', 24.305, 1.73, 1.1, [2]), new Element(13, 'AL', 'Aluminum', 26.981, 2.05, 1.35, [3]), new Element(14, 'SI', 'Silicon', 28.086, 2.1, 1.2, [4]), new Element(15, 'P', 'Phosphorus', 30.974, 2.08, 0.75, [3, 5]), new Element(16, 'S', 'Sulfur', 32.07, 2, 1.02, [2, 4, 6]), new Element(17, 'CL', 'Chlorine', 35.453, 1.97, 0.99, [1, 3, 5, 7]), new Element(18, 'AR', 'Argon', 39.948, 1.88, 1.57, [0]), new Element(19, 'K', 'Potassium', 39.1, 2.75, 1.33, [1]), new Element(20, 'CA', 'Calcium', 40.08, 1.973, 0.99, [2]), new Element(21, 'SC', 'Scandium', 44.956, 1.7, 1.44, [0]), new Element(22, 'TI', 'Titanium', 47.88, 1.7, 1.47, [0]), new Element(23, 'V', 'Vanadium', 50.941, 1.7, 1.33, [0]), new Element(24, 'CR', 'Chromium', 52, 1.7, 1.35, [0]), new Element(25, 'MN', 'Manganese', 54.938, 1.7, 1.35, [0]), new Element(26, 'FE', 'Iron', 55.847, 1.7, 1.34, [0]), new Element(27, 'CO', 'Cobalt', 58.93, 1.7, 1.33, [0]), new Element(28, 'NI', 'Nickel', 58.69, 1.63, 1.5, [0]), new Element(29, 'CU', 'Copper', 63.55, 1.4, 1.52, [0]), new Element(30, 'ZN', 'Zinc', 65.39, 1.39, 1.45, [0]), new Element(31, 'GA', 'Gallium', 69.72, 1.87, 1.22, [3]), new Element(32, 'GE', 'Germanium', 72.61, 1.7, 1.17, [4]), new Element(33, 'AS', 'Arsenic', 74.92, 1.85, 1.21, [3, 5]), new Element(34, 'SE', 'Selenium', 78.96, 1.9, 1.22, [2, 4, 6]), new Element(35, 'BR', 'Bromine', 79.9, 2.1, 1.21, [1, 3, 5, 7]), new Element(36, 'KR', 'Krypton', 83.8, 2.02, 1.91, [0]), new Element(37, 'RB', 'Rubidium', 85.47, 1.7, 1.47, [1]), new Element(38, 'SR', 'Strontium', 87.62, 1.7, 1.12, [2]), new Element(39, 'Y', 'Yttrium', 88.91, 1.7, 1.78, [0]), new Element(40, 'ZR', 'Zirconium', 91.22, 1.7, 1.56, [0]), new Element(41, 'NB', 'Niobium', 92.91, 1.7, 1.48, [0]), new Element(42, 'MO', 'Molybdenum', 95.94, 1.7, 1.47, [0]), new Element(43, 'TC', 'Technetium', 98.91, 1.7, 1.35, [0]), new Element(44, 'RU', 'Ruthenium', 101.07, 1.7, 1.4, [0]), new Element(45, 'RH', 'Rhodium', 102.91, 1.7, 1.45, [0]), new Element(46, 'PD', 'Palladium', 106.42, 1.63, 1.5, [0]), new Element(47, 'AG', 'Silver', 107.87, 1.72, 1.59, [0]), new Element(48, 'CD', 'Cadmium', 112.41, 1.58, 1.69, [0]), new Element(49, 'IN', 'Indium', 114.82, 1.93, 1.63, [3]), new Element(50, 'SN', 'Tin', 118.71, 2.17, 1.46, [2, 4]), new Element(51, 'SB', 'Antimony', 121.75, 2.2, 1.46, [3, 5]), new Element(52, 'TE', 'Tellurium', 127.6, 2.06, 1.47, [2, 4, 6]), new Element(53, 'I', 'Iodine', 126.91, 2.15, 1.4, [1, 3, 5, 7]), new Element(54, 'XE', 'Xenon', 131.29, 2.16, 1.98, [0]), new Element(55, 'CS', 'Cesium', 132.91, 1.7, 1.67, [1]), new Element(56, 'BA', 'Barium', 137.33, 1.7, 1.34, [2]), new Element(57, 'LA', 'Lanthanum', 138.91, 1.7, 1.87, [0]), new Element(58, 'CE', 'Cerium', 140.12, 1.7, 1.83, [0]), new Element(59, 'PR', 'Praseodymium', 140.91, 1.7, 1.82, [0]), new Element(60, 'ND', 'Neodymium', 144.24, 1.7, 1.81, [0]), new Element(61, 'PM', 'Promethium', 144.9, 1.7, 1.8, [0]), new Element(62, 'SM', 'Samarium', 150.36, 1.7, 1.8, [0]), new Element(63, 'EU', 'Europium', 151.96, 1.7, 1.99, [0]), new Element(64, 'GD', 'Gadolinium', 157.25, 1.7, 1.79, [0]), new Element(65, 'TB', 'Terbium', 158.93, 1.7, 1.76, [0]), new Element(66, 'DY', 'Dysprosium', 162.5, 1.7, 1.75, [0]), new Element(67, 'HO', 'Holmium', 164.93, 1.7, 1.74, [0]), new Element(68, 'ER', 'Erbium', 167.26, 1.7, 1.73, [0]), new Element(69, 'TM', 'Thulium', 168.93, 1.7, 1.72, [0]), new Element(70, 'YB', 'Ytterbium', 173.04, 1.7, 1.94, [0]), new Element(71, 'LU', 'Lutetium', 174.97, 1.7, 1.72, [0]), new Element(72, 'HF', 'Hafnium', 178.49, 1.7, 1.57, [0]), new Element(73, 'TA', 'Tantalum', 180.95, 1.7, 1.43, [0]), new Element(74, 'W', 'Tungsten', 183.85, 1.7, 1.37, [0]), new Element(75, 'RE', 'Rhenium', 186.21, 1.7, 1.35, [0]), new Element(76, 'OS', 'Osmium', 190.2, 1.7, 1.37, [0]), new Element(77, 'IR', 'Iridium', 192.22, 1.7, 1.32, [0]), new Element(78, 'PT', 'Platinum', 195.08, 1.72, 1.5, [0]), new Element(79, 'AU', 'Gold', 196.97, 1.66, 1.5, [0]), new Element(80, 'HG', 'Mercury', 200.59, 1.55, 1.7, [0]), new Element(81, 'TL', 'Thallium', 204.38, 1.96, 1.55, [1, 3]), new Element(82, 'PB', 'Lead', 207.2, 2.02, 1.54, [2, 4]), new Element(83, 'BI', 'Bismuth', 208.98, 1.7, 1.54, [3, 5]), new Element(84, 'PO', 'Polonium', 210, 1.7, 1.68, [2, 4, 6]), new Element(85, 'AT', 'Astatine', 210, 1.7, 1.7, [1, 3, 5, 7]), new Element(86, 'RN', 'Radon', 222, 1.7, 2.4, [0]), new Element(87, 'FR', 'Francium', 223, 1.7, 2, [1]), new Element(88, 'RA', 'Radium', 226.03, 1.7, 1.9, [2]), new Element(89, 'AC', 'Actinium', 227.03, 1.7, 1.88, [0]), new Element(90, 'TH', 'Thorium', 232.04, 1.7, 1.79, [0]), new Element(91, 'PA', 'Protactinium', 231.04, 1.7, 1.61, [0]), new Element(92, 'U', 'Uranium', 238.03, 1.86, 1.58, [0]), new Element(93, 'NP', 'Neptunium', 237.05, 1.7, 1.55, [0]), new Element(94, 'PU', 'Plutonium', 239.1, 1.7, 1.53, [0]), new Element(95, 'AM', 'Americium', 243.1, 1.7, 1.51, [0]), new Element(96, 'CM', 'Curium', 247.1, 1.7, 1.5, [0]), new Element(97, 'BK', 'Berkelium', 247.1, 1.7, 1.5, [0]), new Element(98, 'CF', 'Californium', 252.1, 1.7, 1.5, [0]), new Element(99, 'ES', 'Einsteinium', 252.1, 1.7, 1.5, [0]), new Element(100, 'FM', 'Fermium', 257.1, 1.7, 1.5, [0]), new Element(101, 'MD', 'Mendelevium', 256.1, 1.7, 1.5, [0]), new Element(102, 'NO', 'Nobelium', 259.1, 1.7, 1.5, [0]), new Element(103, 'LR', 'Lawrencium', 260.1, 1.7, 1.5, [0]), new Element(104, 'RF', 'Rutherfordium', 261, 1.7, 1.6, [0]), new Element(105, 'DB', 'Dubnium', 262, 1.7, 1.6, [0]), new Element(106, 'SG', 'Seaborgium', 263, 1.7, 1.6, [0]), new Element(107, 'BH', 'Bohrium', 262, 1.7, 1.6, [0]), new Element(108, 'HS', 'Hassium', 265, 1.7, 1.6, [0]), new Element(109, 'MT', 'Meitnerium', 268, 1.7, 1.6, [0])]; // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py. - static ByName = (() => ({ + static ByName = { // Duplicate atomic numbers (isotopes) - /* eslint-disable no-magic-numbers */ + D: new Element(1, 'D', 'Deuterium', 2.014, 1.2, 0.23, [1]), T: new Element(1, 'T', 'Tritium', 3.016, 1.2, 0.23, [1]) - /* eslint-enable no-magic-numbers */ // All regular elements will be added later, automatically - }))(); + }; } (function () { const byAtomicNumber = Element.ByAtomicNumber; @@ -7369,7 +7453,7 @@ Element.getByName = function (element) { return type; }; /* harmony default export */ const chem_Element = (Element); -;// CONCATENATED MODULE: ./src/chem/Bond.js +;// ./src/chem/Bond.js const cBondTypes = { /** Was generated manually */ UNKNOWN: 0, @@ -7544,11 +7628,11 @@ class Bond { firstV.normalize(); return this._fixDir(secondPos, firstV, posGetter); } - static BondType = (() => cBondTypes)(); + static BondType = cBondTypes; } Bond.prototype.BondType = cBondTypes; /* harmony default export */ const chem_Bond = (Bond); -;// CONCATENATED MODULE: ./src/chem/Residue.js +;// ./src/chem/Residue.js @@ -7819,7 +7903,7 @@ class Residue { } } /* harmony default export */ const chem_Residue = (Residue); -;// CONCATENATED MODULE: ./src/chem/ResidueType.js +;// ./src/chem/ResidueType.js /** * Residue type. * @@ -7844,8 +7928,7 @@ class ResidueType { } // DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py. - static StandardTypes = (() => ({ - /* eslint-disable no-magic-numbers */ + static StandardTypes = { ALA: new ResidueType('ALA', 'Alanine', 'A'), ARG: new ResidueType('ARG', 'Arginine', 'R'), ASN: new ResidueType('ASN', 'Asparagine', 'N'), @@ -7892,8 +7975,7 @@ class ResidueType { DOD: new ResidueType('DOD', 'Water', ''), UNK: new ResidueType('UNK', 'Unknown', ''), UNL: new ResidueType('UNL', 'Unknown Ligand', '') - /* eslint-enable no-magic-numbers */ - }))(); + }; /** * Enumeration of residue flag values. @@ -7989,7 +8071,7 @@ function _addParam(param, list) { } _addParam('hydrophobicity', hydro); /* harmony default export */ const chem_ResidueType = (ResidueType); -;// CONCATENATED MODULE: ./src/chem/Chain.js +;// ./src/chem/Chain.js @@ -8158,7 +8240,7 @@ class Chain { } } /* harmony default export */ const chem_Chain = (Chain); -;// CONCATENATED MODULE: ./src/chem/StructuralElement.js +;// ./src/chem/StructuralElement.js /** An element of protein secondary structure. */ @@ -8290,7 +8372,7 @@ StructuralElement.genericByType = { [StructuralElementType.HELIX]: StructuralElementGeneric.HELIX }; /* harmony default export */ const chem_StructuralElement = (StructuralElement); -;// CONCATENATED MODULE: ./src/chem/Helix.js +;// ./src/chem/Helix.js const Helix_StructuralElementType = chem_StructuralElement.Type; const typeByPDBHelixClass = { @@ -8342,7 +8424,7 @@ class Helix extends chem_StructuralElement { } } /* harmony default export */ const chem_Helix = (Helix); -;// CONCATENATED MODULE: ./src/chem/Strand.js +;// ./src/chem/Strand.js /** @@ -8416,7 +8498,7 @@ class Strand extends chem_StructuralElement { } } /* harmony default export */ const chem_Strand = (Strand); -;// CONCATENATED MODULE: ./src/chem/Sheet.js +;// ./src/chem/Sheet.js /** @@ -8463,7 +8545,7 @@ class Sheet { } } /* harmony default export */ const chem_Sheet = (Sheet); -;// CONCATENATED MODULE: ./src/chem/SGroup.js +;// ./src/chem/SGroup.js /** @@ -8522,7 +8604,7 @@ class SGroup { /* harmony default export */ const chem_SGroup = (SGroup); // EXTERNAL MODULE: ./src/utils/SelectionParser.js var SelectionParser = __webpack_require__(99); -;// CONCATENATED MODULE: ./src/chem/selectors/selectArgs.js +;// ./src/chem/selectors/selectArgs.js //---------------------------------------------------------------------------- @@ -8653,7 +8735,7 @@ class ValueList extends List { } } -;// CONCATENATED MODULE: ./src/chem/selectors/selectorsBase.js +;// ./src/chem/selectors/selectorsBase.js /** Base class for atom selectors. */ @@ -8706,7 +8788,7 @@ class AllSelector extends Selector { AllSelector.prototype.name = 'All'; AllSelector.prototype.keyword = 'all'; -;// CONCATENATED MODULE: ./src/chem/selectors/selectOps.js +;// ./src/chem/selectors/selectOps.js //---------------------------------------------------------------------------- @@ -8744,7 +8826,7 @@ class InfixOperator extends Selector { } InfixOperator.prototype.priority = 1000; -;// CONCATENATED MODULE: ./src/chem/selectors.js +;// ./src/chem/selectors.js @@ -8761,12 +8843,7 @@ function defineSelector(name, SelectorClass) { const keyword = name.toLowerCase(); SelectorClass.prototype.keyword = keyword; SelectorClass.prototype.name = name; - const factory = function () { - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - return new SelectorClass(...args); - }; + const factory = (...args) => new SelectorClass(...args); factory.SelectorClass = SelectorClass; keywords[keyword] = factory; return SelectorClass; @@ -8930,7 +9007,7 @@ SelectionParser.parser.yy = selectors; SelectionParser.parser.yy.parseError = SelectionParser.parser.parseError; // workaround for incorrect JISON parser generator for AMD module /* harmony default export */ const chem_selectors = (selectors); -;// CONCATENATED MODULE: ./src/chem/BiologicalUnit.js +;// ./src/chem/BiologicalUnit.js @@ -9003,7 +9080,7 @@ class BiologicalUnit { finalize() {} } /* harmony default export */ const chem_BiologicalUnit = (BiologicalUnit); -;// CONCATENATED MODULE: ./src/chem/Assembly.js +;// ./src/chem/Assembly.js @@ -9069,7 +9146,7 @@ class Assembly extends chem_BiologicalUnit { } } /* harmony default export */ const chem_Assembly = (Assembly); -;// CONCATENATED MODULE: ./src/chem/Component.js +;// ./src/chem/Component.js /** * This class represents connected component as a part of a complex. * WARNING! The whole component entity is build under the assumption that residues @@ -9219,7 +9296,7 @@ class Component { } } /* harmony default export */ const chem_Component = (Component); -;// CONCATENATED MODULE: ./src/chem/AtomPairs.js +;// ./src/chem/AtomPairs.js const cMaxPairsForHashCode = 32; const cHashTableSize = 1024 * 1024; @@ -9290,7 +9367,7 @@ class AtomPairs { } } /* harmony default export */ const chem_AtomPairs = (AtomPairs); -;// CONCATENATED MODULE: ./src/chem/AutoBond.js +;// ./src/chem/AutoBond.js const cProfileBondBuilder = false; @@ -9472,7 +9549,7 @@ class AutoBond { } } /* harmony default export */ const chem_AutoBond = (AutoBond); -;// CONCATENATED MODULE: ./src/chem/AromaticLoopsMarker.js +;// ./src/chem/AromaticLoopsMarker.js @@ -9704,7 +9781,7 @@ class AromaticLoopsMarker { } } /* harmony default export */ const chem_AromaticLoopsMarker = (AromaticLoopsMarker); -;// CONCATENATED MODULE: ./src/chem/VoxelWorld.js +;// ./src/chem/VoxelWorld.js @@ -9818,8 +9895,8 @@ class VoxelWorld { * @param {Vector3} point - a point in 3D * @returns {number} - index of voxel */ - static _zero = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(0, 0, 0))(); - static _voxel = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3())(); + static _zero = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(0, 0, 0); + static _voxel = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(); _findVoxel(point) { const zero = VoxelWorld._zero; const voxel = VoxelWorld._voxel; @@ -9848,9 +9925,9 @@ class VoxelWorld { * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside */ - static _xRange = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector2())(); - static _yRange = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector2())(); - static _zRange = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector2())(); + static _xRange = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector2(); + static _yRange = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector2(); + static _zRange = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector2(); _forEachVoxelWithinRadius(center, radius, process) { const xRange = VoxelWorld._xRange; const yRange = VoxelWorld._yRange; @@ -9906,7 +9983,7 @@ class VoxelWorld { * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside */ - static _vCenter = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3())(); + static _vCenter = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(); _forEachVoxelWithinRadiusSimple(center, radius, process) { const xRange = VoxelWorld._xRange; const yRange = VoxelWorld._yRange; @@ -10075,7 +10152,7 @@ class VoxelWorld { } } /* harmony default export */ const chem_VoxelWorld = (VoxelWorld); -;// CONCATENATED MODULE: ./src/chem/HBondInfo.js +;// ./src/chem/HBondInfo.js const MINIMAL_DISTANCE = 0.5; @@ -10309,7 +10386,7 @@ class HBondInfo { return result; } } -;// CONCATENATED MODULE: ./src/chem/SecondaryStructureMap.js +;// ./src/chem/SecondaryStructureMap.js const BridgeType = Object.freeze({ @@ -10736,7 +10813,7 @@ class SecondaryStructureMap { } } SecondaryStructureMap.StructureType = StructureType; -;// CONCATENATED MODULE: ./src/chem/Complex.js +;// ./src/chem/Complex.js @@ -10979,17 +11056,13 @@ class Complex { return this._residueTypes[name] || null; } getUnifiedSerial(chain, serial, iCode) { - /* eslint-disable no-magic-numbers */ const maxSerial = 65536; const chainShift = maxSerial * 256; - /* eslint-enable no-magic-numbers */ return serial + iCode * maxSerial + chain * chainShift; } splitUnifiedSerial(uniSerial) { - /* eslint-disable no-magic-numbers */ const maxSerial = 65536; const chainShift = maxSerial * 256; - /* eslint-enable no-magic-numbers */ const chainId = Math.floor(uniSerial / chainShift); const remnant = uniSerial - chainId * chainShift; const insCode = Math.floor(remnant / maxSerial); @@ -11389,7 +11462,7 @@ class Complex { try { this._voxelWorld = new chem_VoxelWorld(this.getDefaultBoundaries().boundingBox, new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(VOXEL_SIZE, VOXEL_SIZE, VOXEL_SIZE)); this._voxelWorld.addAtoms(this); - } catch (e) { + } catch { logger.warn('Unable to create voxel world'); this._voxelWorld = null; } @@ -11553,7 +11626,7 @@ class Complex { Complex.prototype.id = 'Complex'; Complex.prototype.name = ''; /* harmony default export */ const chem_Complex = (Complex); -;// CONCATENATED MODULE: ./src/chem/Volume.js +;// ./src/chem/Volume.js function pow2ceil(v) { @@ -11804,7 +11877,7 @@ class Volume { } } } - const texture = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.DataTexture(data, width, height, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LuminanceFormat, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.UnsignedByteType, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.UVMapping, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.ClampToEdgeWrapping, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.ClampToEdgeWrapping, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter); + const texture = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.DataTexture(data, width, height, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.RedFormat, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.UnsignedByteType, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.UVMapping, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.ClampToEdgeWrapping, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.ClampToEdgeWrapping, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter); texture.needsUpdate = true; return texture; } @@ -11833,7 +11906,7 @@ class Volume { } Volume.prototype.id = 'Volume'; /* harmony default export */ const chem_Volume = (Volume); -;// CONCATENATED MODULE: ./src/chem/Molecule.js +;// ./src/chem/Molecule.js /** * Residue Molecule. * @@ -11872,7 +11945,7 @@ class Molecule { } } /* harmony default export */ const chem_Molecule = (Molecule); -;// CONCATENATED MODULE: ./src/chem.js +;// ./src/chem.js @@ -11907,7 +11980,7 @@ class Molecule { selectors: chem_selectors, Molecule: chem_Molecule }); -;// CONCATENATED MODULE: ./src/gfx/CSS2DObject.js +;// ./src/gfx/CSS2DObject.js /** * @author mrdoob / http://mrdoob.com/ */ @@ -11957,7 +12030,7 @@ class CSS2DObject extends external_module_three_commonjs_three_commonjs2_three_a } } /* harmony default export */ const gfx_CSS2DObject = (CSS2DObject); -;// CONCATENATED MODULE: ./src/gfx/RCGroup.js +;// ./src/gfx/RCGroup.js class RCGroup extends external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Group { raycast(raycaster, intersects) { @@ -12018,14 +12091,13 @@ class RCGroup extends external_module_three_commonjs_three_commonjs2_three_amd_t } } /* harmony default export */ const gfx_RCGroup = (RCGroup); -;// CONCATENATED MODULE: ./src/gfx/shaders/ScreenQuad.vert -const ScreenQuad_namespaceObject = "uniform mat4 projectionMatrix;\r\nuniform mat4 modelViewMatrix;\r\n\r\nattribute vec2 uv;\r\nattribute vec3 position;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n vUv = uv;\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/ScreenQuadFromTex.frag -const ScreenQuadFromTex_namespaceObject = "precision highp float;\r\n\r\nvarying vec2 vUv;\r\nuniform sampler2D srcTex;\r\nuniform float opacity;\r\n\r\nvoid main() {\r\n vec4 color = texture2D(srcTex, vUv);\r\n gl_FragColor = vec4(color.xyz, color.a * opacity);\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/ScreenQuadFromTexWithDistortion.frag -const ScreenQuadFromTexWithDistortion_namespaceObject = "precision highp float;\r\n\r\nvarying vec2 vUv;\r\nuniform sampler2D srcTex;\r\nuniform float coef;\r\n\r\nvoid main() {\r\n vec2 uv = vUv * 2.0 - 1.0;\r\n float r2 = dot(uv, uv);\r\n vec2 tc = uv * (1.0 + coef * r2);\r\n if (!all(lessThan(abs(tc), vec2(1.0))))\r\n discard;\r\n tc = 0.5 * (tc + 1.0);\r\n gl_FragColor = texture2D(srcTex, tc);\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/gfxutils.js -/* eslint-disable no-magic-numbers */ +;// ./src/gfx/shaders/ScreenQuad.vert +const ScreenQuad_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nuniform mat4 projectionMatrix;\r\nuniform mat4 modelViewMatrix;\r\n\r\nattribute vec2 uv;\r\nattribute vec3 position;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n vUv = uv;\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\r\n}\r\n"; +;// ./src/gfx/shaders/ScreenQuadFromTex.frag +const ScreenQuadFromTex_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\nvarying vec2 vUv;\r\nuniform sampler2D srcTex;\r\nuniform float opacity;\r\n\r\nvoid main() {\r\n vec4 color = texture2D(srcTex, vUv);\r\n gl_FragColor = vec4(color.xyz, color.a * opacity);\r\n}\r\n"; +;// ./src/gfx/shaders/ScreenQuadFromTexWithDistortion.frag +const ScreenQuadFromTexWithDistortion_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\nvarying vec2 vUv;\r\nuniform sampler2D srcTex;\r\nuniform float coef;\r\n\r\nvoid main() {\r\n vec2 uv = vUv * 2.0 - 1.0;\r\n float r2 = dot(uv, uv);\r\n vec2 tc = uv * (1.0 + coef * r2);\r\n if (!all(lessThan(abs(tc), vec2(1.0))))\r\n discard;\r\n tc = 0.5 * (tc + 1.0);\r\n gl_FragColor = texture2D(srcTex, tc);\r\n}\r\n"; +;// ./src/gfx/gfxutils.js @@ -12445,7 +12517,7 @@ external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namesp getMiddlePoint, LAYERS }); -;// CONCATENATED MODULE: ./src/Visual.js +;// ./src/Visual.js const _defaultBoundaries = { @@ -12471,7 +12543,7 @@ class Visual extends gfxutils.RCGroup { } } /* harmony default export */ const src_Visual = (Visual); -;// CONCATENATED MODULE: ./src/utils/EntityList.js +;// ./src/utils/EntityList.js function _ensureArray(x) { if (x === null || x === undefined || Array.isArray(x)) { return x; @@ -12490,9 +12562,7 @@ class EntityList { * By default, a single `.id` property is used. * @see EntityList#register */ - constructor() { - let entities = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - let indices = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ['id']; + constructor(entities = [], indices = ['id']) { this._list = []; this._dict = {}; this._indices = [...indices]; @@ -12659,7 +12729,7 @@ class EntityList { } } /* harmony default export */ const utils_EntityList = (EntityList); -;// CONCATENATED MODULE: ./src/utils/makeContextDependent.js +;// ./src/utils/makeContextDependent.js function makeContextDependent(prototype) { @@ -12677,14 +12747,14 @@ function makeContextDependent(prototype) { }); } /* harmony default export */ const utils_makeContextDependent = (makeContextDependent); -;// CONCATENATED MODULE: ./src/gfx/geometries/SphereCollisionGeo.js +;// ./src/gfx/geometries/SphereCollisionGeo.js class CollisionSphere { constructor(position, radius) { this._position = position; this._radius = radius; } - static _sphere = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Sphere())(); + static _sphere = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Sphere(); raycast(raycaster) { const sphere = CollisionSphere._sphere; sphere.set(this._position, this._radius); @@ -12699,10 +12769,7 @@ class CollisionSphere { } } const SphereCollisionGeo = base => class extends base { - constructor(count) { - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } + constructor(count, ...args) { super(...args); this._objects = new Array(count); this.boundingSphere = null; @@ -12758,7 +12825,7 @@ const SphereCollisionGeo = base => class extends base { } }; /* harmony default export */ const geometries_SphereCollisionGeo = (SphereCollisionGeo); -;// CONCATENATED MODULE: ./src/gfx/geometries/InstancedSpheresGeometry.js +;// ./src/gfx/geometries/InstancedSpheresGeometry.js @@ -12783,7 +12850,7 @@ function setArrayXYZW(arr, idx, x, y, z, w) { class InstancedSpheresGeometry extends geometries_SphereCollisionGeo(external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.InstancedBufferGeometry) { constructor(spheresCount, sphereComplexity, useZSprites) { super(spheresCount); - this._sphGeometry = useZSprites ? new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.PlaneGeometry(2, 2, 1, 1) : new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.SphereBufferGeometry(1, sphereComplexity * 2, sphereComplexity, 0, Math.PI * 2, 0, Math.PI); + this._sphGeometry = useZSprites ? new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.PlaneGeometry(2, 2, 1, 1) : new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.SphereGeometry(1, sphereComplexity * 2, sphereComplexity, 0, Math.PI * 2, 0, Math.PI); this._init(spheresCount, this._sphGeometry); } setItem(itemIdx, itemPos, itemRad) { @@ -12827,14 +12894,14 @@ class InstancedSpheresGeometry extends geometries_SphereCollisionGeo(external_mo this._offsets = utils.allocateTyped(Float32Array, spheresCount * OFFSET_SIZE); this._colors = utils.allocateTyped(Float32Array, spheresCount * COLOR_SIZE); const alpha = this._alpha = utils.allocateTyped(Float32Array, spheresCount); - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].fill(alpha, 1.0); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.fill(alpha, 1.0); this.setAttribute('offset', new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.InstancedBufferAttribute(this._offsets, OFFSET_SIZE, false, 1)); this.setAttribute('color', new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.InstancedBufferAttribute(this._colors, COLOR_SIZE, false, 1)); this.setAttribute('alphaColor', new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.InstancedBufferAttribute(alpha, 1, false, 1)); } } /* harmony default export */ const geometries_InstancedSpheresGeometry = (InstancedSpheresGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/ChunkedObjectsGeometry.js +;// ./src/gfx/geometries/ChunkedObjectsGeometry.js @@ -12886,7 +12953,7 @@ class ChunkedObjectsGeometry extends external_module_three_commonjs_three_common const chunkSize = this._chunkSize; for (let i = 0, n = chunkIndices.length; i < n; ++i) { const left = chunkIndices[i] * chunkSize; - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].fill(alphaArr, value, left, left + chunkSize); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.fill(alphaArr, value, left, left + chunkSize); } this.getAttribute('alphaColor').needsUpdate = true; } @@ -12941,7 +13008,7 @@ class ChunkedObjectsGeometry extends external_module_three_commonjs_three_common this._normals = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE); this._colors = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE); const alpha = this._alpha = utils.allocateTyped(Float32Array, pointsCount); - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].fill(alpha, 1.0); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.fill(alpha, 1.0); for (let i = 0; i < chunksCount; ++i) { const offset = i * chunkIndexSize; const posOffset = i * chunkSize; @@ -12958,7 +13025,7 @@ class ChunkedObjectsGeometry extends external_module_three_commonjs_three_common } } /* harmony default export */ const geometries_ChunkedObjectsGeometry = (ChunkedObjectsGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/SimpleSpheresGeometry.js +;// ./src/gfx/geometries/SimpleSpheresGeometry.js @@ -12966,7 +13033,7 @@ class ChunkedObjectsGeometry extends external_module_three_commonjs_three_common const SimpleSpheresGeometry_VEC_SIZE = 3; class SimpleSpheresGeometry extends geometries_SphereCollisionGeo(geometries_ChunkedObjectsGeometry) { constructor(spheresCount, sphereComplexity) { - const sphGeometry = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.SphereBufferGeometry(1, sphereComplexity * 2, sphereComplexity, 0, Math.PI * 2, 0, Math.PI); + const sphGeometry = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.SphereGeometry(1, sphereComplexity * 2, sphereComplexity, 0, Math.PI * 2, 0, Math.PI); super(spheresCount, sphGeometry, spheresCount); const normals = this._normals; const geoNormals = sphGeometry.attributes.normal.array; @@ -12992,7 +13059,7 @@ class SimpleSpheresGeometry extends geometries_SphereCollisionGeo(geometries_Chu } } /* harmony default export */ const geometries_SimpleSpheresGeometry = (SimpleSpheresGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/Simple2CCylindersGeometry.js +;// ./src/gfx/geometries/Simple2CCylindersGeometry.js @@ -13055,7 +13122,7 @@ class Simple2CCylindersGeometry extends geometries_ChunkedObjectsGeometry { } } /* harmony default export */ const geometries_Simple2CCylindersGeometry = (Simple2CCylindersGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/CylinderBufferGeometry.js +;// ./src/gfx/geometries/CylinderBufferGeometry.js const MAX_POINTS_COUNT_16BIT = 65536; @@ -13079,13 +13146,9 @@ class CylinderBufferGeometry extends external_module_three_commonjs_three_common const vertexCount = (heightSegments + 1) * radialSegments + hasTop * (radialSegments + 1) + hasBottom * (radialSegments + 1); const facesCount = (2 * heightSegments + hasTop + hasBottom) * radialSegments; const heightHalf = height / 2; - - /* eslint-disable no-magic-numbers */ const positions = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3); const normals = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3); const indices = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Uint16BufferAttribute(utils.allocateTyped(Uint16Array, facesCount * PTS_PER_TRIANGLE), 1); - /* eslint-enable no-magic-numbers */ - const uvs = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 2), 2); console.assert(vertexCount < MAX_POINTS_COUNT_16BIT, 'DEBUG: Cylinder Geometry has too many vertices (65536 max).'); let currVtxIdx = 0; @@ -13175,7 +13238,7 @@ class CylinderBufferGeometry extends external_module_three_commonjs_three_common } } /* harmony default export */ const geometries_CylinderBufferGeometry = (CylinderBufferGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/Instanced2CCylindersGeometry.js +;// ./src/gfx/geometries/Instanced2CCylindersGeometry.js @@ -13344,7 +13407,7 @@ class Instanced2CCylindersGeometry extends external_module_three_commonjs_three_ this._color1 = utils.allocateTyped(Float32Array, instanceCount * Instanced2CCylindersGeometry_COLOR_SIZE); this._color2 = utils.allocateTyped(Float32Array, instanceCount * Instanced2CCylindersGeometry_COLOR_SIZE); const alpha = this._alpha = utils.allocateTyped(Float32Array, instanceCount); - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].fill(alpha, 1.0); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.fill(alpha, 1.0); this.setAttribute('matVector1', new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.InstancedBufferAttribute(this._matVector1, Instanced2CCylindersGeometry_OFFSET_SIZE, false, 1)); this.setAttribute('matVector2', new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.InstancedBufferAttribute(this._matVector2, Instanced2CCylindersGeometry_OFFSET_SIZE, false, 1)); this.setAttribute('matVector3', new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.InstancedBufferAttribute(this._matVector3, Instanced2CCylindersGeometry_OFFSET_SIZE, false, 1)); @@ -13362,7 +13425,7 @@ class Instanced2CCylindersGeometry extends external_module_three_commonjs_three_ } } /* harmony default export */ const geometries_Instanced2CCylindersGeometry = (Instanced2CCylindersGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/ExtrudedObjectsGeometry.js +;// ./src/gfx/geometries/ExtrudedObjectsGeometry.js @@ -13415,9 +13478,7 @@ class ExtrudedObjectsGeometry extends geometries_ChunkedObjectsGeometry { tmpShape[i] = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(); } } - setItem(itemIdx, matrices) { - let hasSlope = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - let hasCut = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + setItem(itemIdx, matrices, hasSlope = false, hasCut = false) { const ptsCount = this._chunkGeo._positions.length; const ringsCount = this._ringsCount; const chunkStartIdx = ptsCount * this._ringsCount * itemIdx * ExtrudedObjectsGeometry_VEC_SIZE; @@ -13535,7 +13596,7 @@ class ExtrudedObjectsGeometry extends geometries_ChunkedObjectsGeometry { } } /* harmony default export */ const geometries_ExtrudedObjectsGeometry = (ExtrudedObjectsGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/ThickLinesGeometry.js +;// ./src/gfx/geometries/ThickLinesGeometry.js @@ -13622,7 +13683,7 @@ class ThickLinesGeometry extends external_module_three_commonjs_three_commonjs2_ setOpacity(startSegIdx, endSegIdx, value) { const start = startSegIdx * VERTEX_PER_SEGMENT; const end = endSegIdx * VERTEX_PER_SEGMENT; - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].fill(this.alpha, value, end, start); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.fill(this.alpha, value, end, start); this.getAttribute('alphaColor').needsUpdate = true; } getSubsetSegments(startSegmentIdx, segmentsCount) { @@ -13663,7 +13724,7 @@ class ThickLinesGeometry extends external_module_three_commonjs_three_commonjs2_ this._colors = utils.allocateTyped(Float32Array, pointsCount * COL_SIZE); this._directions = utils.allocateTyped(Float32Array, pointsCount * DIR_SIZE); const alpha = this._alpha = utils.allocateTyped(Float32Array, pointsCount); - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].fill(alpha, 1.0); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.fill(alpha, 1.0); const index = this._index; let indexOffset = 0; let pointOffset = 0; @@ -13683,7 +13744,7 @@ class ThickLinesGeometry extends external_module_three_commonjs_three_commonjs2_ } } /* harmony default export */ const geometries_ThickLinesGeometry = (ThickLinesGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/LinesGeometry.js +;// ./src/gfx/geometries/LinesGeometry.js @@ -13740,7 +13801,7 @@ class LinesGeometry extends geometries_ThickLinesGeometry { } } /* harmony default export */ const geometries_LinesGeometry = (LinesGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/CylinderCollisionGeo.js +;// ./src/gfx/geometries/CylinderCollisionGeo.js @@ -13783,7 +13844,7 @@ class CylinderCollisionGeo extends geometries_ChunkedObjectsGeometry { } } /* harmony default export */ const geometries_CylinderCollisionGeo = (CylinderCollisionGeo); -;// CONCATENATED MODULE: ./src/gfx/geometries/ChunkedLinesGeometry.js +;// ./src/gfx/geometries/ChunkedLinesGeometry.js const COLLISION_RAD = 0.1; @@ -13889,7 +13950,7 @@ class ChunkedLinesGeometry extends geometries_LinesGeometry { } } /* harmony default export */ const geometries_ChunkedLinesGeometry = (ChunkedLinesGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/TwoColorLinesGeometry.js +;// ./src/gfx/geometries/TwoColorLinesGeometry.js @@ -13937,7 +13998,7 @@ class TwoColorLinesGeometry extends geometries_LinesGeometry { // (???)parent = LinesGeometry.prototype; /* harmony default export */ const geometries_TwoColorLinesGeometry = (TwoColorLinesGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/CrossGeometry.js +;// ./src/gfx/geometries/CrossGeometry.js @@ -13965,7 +14026,7 @@ class CrossGeometry extends geometries_SphereCollisionGeo(geometries_ChunkedLine } } /* harmony default export */ const geometries_CrossGeometry = (CrossGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/IsoSurfaceGeometry.js +;// ./src/gfx/geometries/IsoSurfaceGeometry.js const POS_RAD_SIZE = 4; @@ -14018,7 +14079,7 @@ class IsoSurfaceGeometry extends external_module_three_commonjs_three_commonjs2_ } } /* harmony default export */ const geometries_IsoSurfaceGeometry = (IsoSurfaceGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/IsoSurfaceMarchCube.js +;// ./src/gfx/geometries/IsoSurfaceMarchCube.js /** @@ -14051,13 +14112,9 @@ class IsoSurfaceMarchCube { this.pointsValuesLinear = null; } } - -/* eslint-disable no-magic-numbers */ IsoSurfaceMarchCube.prototype.striIndicesMarchCube = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1, 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1, 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1, 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1, 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1, 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1, 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1, 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1, 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1, 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1, 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1, 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1, 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1, 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1, 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1, 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1, 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1, 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1, 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1, 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1, 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1, 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1, 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1, 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1, 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1, 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1, 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1, 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1, 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1, 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1, 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1, 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1, 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1, 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1, 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1, 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1, 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1, 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1, 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1, 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1, 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1, 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1, 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1, 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1, 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1, 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1, 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1, 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1, 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1, 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1, 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1, 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1, 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1, 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1, 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1, 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1, 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1, 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1, 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1, 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1, 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1, 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1, 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1, 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1, 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1, 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1, 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1, 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1, 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1, 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1, 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1, 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1, 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1, 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1, 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1, 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1, 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1, 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1, 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1, 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1, 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1, 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1, 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1, 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1, 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1, 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1, 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1, 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1, 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1, 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1, 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1, 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1, 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1, 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1, 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1, 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1, 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1, 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1, 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1, 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1, 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1, 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1, 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1, 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1, 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1, 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1, 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1, 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1, 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1, 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1, 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1, 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1, 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1, 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1, 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1, 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1, 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1, 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1, 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1, 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1, 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1, 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1, 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1, 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1, 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1, 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1, 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1, 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1, 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1, 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1, 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1, 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1, 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1, 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1, 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1, 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1, 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1, 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1, 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1, 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1, 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1, 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1, 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1, 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1, 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1, 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1, 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1, 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1, 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1, 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1, 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1, 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1, 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1, 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1, 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; -/* eslint-enable no-magic-numbers */ - /* harmony default export */ const geometries_IsoSurfaceMarchCube = (IsoSurfaceMarchCube); -;// CONCATENATED MODULE: ./src/gfx/geometries/IsoSurface.js +;// ./src/gfx/geometries/IsoSurface.js @@ -14175,12 +14232,12 @@ class IsoSurface { vertex.lerpVectors(p1, p2, mu); normal.lerpVectors(n1, n2, mu); } - static _triTable = (() => geometries_IsoSurfaceMarchCube.prototype.striIndicesMarchCube)(); + static _triTable = geometries_IsoSurfaceMarchCube.prototype.striIndicesMarchCube; static _arrSize = 12; static _firstIndices = [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3]; static _secondIndices = [1, 2, 3, 0, 5, 6, 7, 4, 4, 5, 6, 7]; - static _vertexList = (() => createArray(IsoSurface._arrSize))(); - static _normalList = (() => createArray(IsoSurface._arrSize))(); + static _vertexList = createArray(IsoSurface._arrSize); + static _normalList = createArray(IsoSurface._arrSize); _polygonize(grid, isoLevel, triangles) { const { cubeIndex @@ -14277,8 +14334,6 @@ class IsoSurface { for (let y = 0; y < ySize - step; y += step) { let idx = vol.getDirectIdx(0, y, z); for (let x = 0; x < xSize - step; x += step, idx += stepX) { - /* eslint-disable no-multi-spaces */ - /* eslint-disable computed-property-spacing */ gcVal[0] = volData[idx]; gcVal[1] = volData[idx + stepX]; gcVal[3] = volData[idx + stepY]; @@ -14287,8 +14342,6 @@ class IsoSurface { gcVal[5] = volData[idx + stepX + stepZ]; gcVal[7] = volData[idx + stepY + stepZ]; gcVal[6] = volData[idx + stepX + stepY + stepZ]; - /* eslint-enable no-multi-spaces */ - /* eslint-enable computed-property-spacing */ // Determine the index into the edge table which // tells us which vertices are inside of the surface @@ -14569,7 +14622,7 @@ class IsoSurface { } } /* harmony default export */ const geometries_IsoSurface = (IsoSurface); -;// CONCATENATED MODULE: ./src/gfx/geometries/VolumeSurfaceGeometry.js +;// ./src/gfx/geometries/VolumeSurfaceGeometry.js @@ -14676,7 +14729,7 @@ class VolumeSurfaceGeometry extends geometries_IsoSurfaceGeometry { } } /* harmony default export */ const geometries_VolumeSurfaceGeometry = (VolumeSurfaceGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/QuickSurfGeometry.js +;// ./src/gfx/geometries/QuickSurfGeometry.js const { @@ -14809,7 +14862,7 @@ class QuickSurfGeometry extends geometries_VolumeSurfaceGeometry { } } /* harmony default export */ const geometries_QuickSurfGeometry = (QuickSurfGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/ContactSurface.js +;// ./src/gfx/geometries/ContactSurface.js @@ -15352,7 +15405,7 @@ function ContactSurface(packedArrays, boundaries, params, _indexList) { }; } /* harmony default export */ const geometries_ContactSurface = (ContactSurface); -;// CONCATENATED MODULE: ./src/gfx/geometries/ContactSurfaceGeometry.js +;// ./src/gfx/geometries/ContactSurfaceGeometry.js @@ -15381,7 +15434,7 @@ class ContactSurfaceGeometry extends geometries_VolumeSurfaceGeometry { } } /* harmony default export */ const geometries_ContactSurfaceGeometry = (ContactSurfaceGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/IsoSurfaceAtomColored.js +;// ./src/gfx/geometries/IsoSurfaceAtomColored.js /** @@ -15403,7 +15456,7 @@ class IsoSurfaceAtomColored { } } /* harmony default export */ const geometries_IsoSurfaceAtomColored = (IsoSurfaceAtomColored); -;// CONCATENATED MODULE: ./src/gfx/geometries/IsosurfaceBuildNormals.js +;// ./src/gfx/geometries/IsosurfaceBuildNormals.js @@ -15740,7 +15793,7 @@ class IsosurfaceBuildNormals { } } /* harmony default export */ const geometries_IsosurfaceBuildNormals = (IsosurfaceBuildNormals); -;// CONCATENATED MODULE: ./src/gfx/geometries/IsoSurfaceGeo.js +;// ./src/gfx/geometries/IsoSurfaceGeo.js /** @@ -15785,7 +15838,7 @@ class IsoSurfaceGeo { } } /* harmony default export */ const geometries_IsoSurfaceGeo = (IsoSurfaceGeo); -;// CONCATENATED MODULE: ./src/gfx/geometries/SSIsosurfaceGeometry.js +;// ./src/gfx/geometries/SSIsosurfaceGeometry.js @@ -16176,10 +16229,7 @@ class SSIsosurfaceGeometry extends geometries_IsoSurfaceGeometry { return numIntersectedCells; } getType(letter) { - /* eslint-disable no-magic-numbers */ const atomT = [0, 0, 1, 1, 2, 6, 3, 6, 4, 6, 5, 6, 6, 0, 7, 3, 8, 2, 9, 6, 10, 6, 11, 6, 12, 6, 13, 6, 14, 6, 15, 4, 16, 5, 17, 6, 18, 6, 19, 6, 20, 6, 21, 6, 22, 6, 23, 6, 24, 6, 25, 6, 26, 6, 27, 6, 28, 6, 29, 6, 30, 6, 31, 6, 32, 6, 33, 6, 34, 6, 35, 6, 36, 6, 37, 6, 38, 6, 39, 6, 40, 6, 41, 6, 42, 6, 43, 6, 44, 6, 45, 6, 46, 6, 47, 6, 48, 6, 49, 6, 50, 6, 51, 6, 52, 6, 53, 6, 54, 6, 55, 6, 56, 6, 57, 6, 58, 6, 59, 6, 60, 6, 61, 6, 62, 6, 63, 6, 64, 6, 65, 6, 66, 6, 67, 6, 68, 6, 69, 6, 70, 6, 71, 6, 72, 6, 73, 6, 74, 6, 75, 6, 76, 6, 77, 6, 78, 6, 79, 6, 80, 6, 81, 6, 82, 6, 83, 6, 84, 6, 85, 6, 86, 6, 87, 6, 88, 6, 89, 6, 90, 6, 91, 6, 92, 6, 93, 6, 94, 6, 95, 6, 96, 6, 97, 6, 98, 6, 99, 6, 100, 6, 101, 6, 102, 6, 103, 6, 104, 6, 105, 6, 106, 6, 107, 6, 108, 6, 109, 6]; - /* eslint-enable no-magic-numbers */ - if (letter < 1 || letter > atomT.length / 2 || Object.keys(SSIsosurfaceGeometry_Element.ByAtomicNumber).length * 2 !== atomT.length) { throw new Error('atomT.length should be equal Element.ByAtomicNumber.length * 2'); } @@ -16202,10 +16252,7 @@ class SSIsosurfaceGeometry extends geometries_IsoSurfaceGeometry { const side3 = side2 * side; const vCorner = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(); const vDif = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(); - /* eslint-disable no-magic-numbers */ const aLot = +1.0e12; - /* eslint-enable no-magic-numbers */ - for (let i = 0; i < side3; i++) { corners[i] = aLot; // to large value } @@ -16564,7 +16611,7 @@ class SSIsosurfaceGeometry extends geometries_IsoSurfaceGeometry { // All code below must be erased from every device and each developer's memory /* harmony default export */ const geometries_SSIsosurfaceGeometry = (SSIsosurfaceGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/LabelsGeometry.js +;// ./src/gfx/geometries/LabelsGeometry.js function createLabel(fieldTxt, className) { @@ -16660,7 +16707,7 @@ class LabelsGeometry extends utils_EventDispatcher { } } /* harmony default export */ const geometries_LabelsGeometry = (LabelsGeometry); -;// CONCATENATED MODULE: ./src/gfx/geometries/geometries.js +;// ./src/gfx/geometries/geometries.js @@ -16687,11 +16734,11 @@ class LabelsGeometry extends utils_EventDispatcher { SSIsosurfaceGeometry: geometries_SSIsosurfaceGeometry, LabelsGeometry: geometries_LabelsGeometry }); -;// CONCATENATED MODULE: ./src/gfx/shaders/Uber.vert -const Uber_namespaceObject = "float INSTANCED_SPRITE_OVERSCALE = 1.3;\r\n\r\nattribute vec3 normal;\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n varying vec3 viewNormal;\r\n#endif\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n varying vec3 vNormal;\r\n#endif\r\n\r\n#ifdef THICK_LINE\r\n attribute vec4 position; // W contains vert pos or neg offset\r\n#else\r\n attribute vec3 position;\r\n#endif\r\n\r\nvarying vec3 vWorldPosition;\r\nvarying vec3 vViewPosition;\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n attribute float alphaColor;\r\n varying float alphaCol;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\r\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\r\n\t\tvarying vec3 vDirectionalShadowNormal[ NUM_DIR_LIGHTS ];\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n attribute vec3 color;\r\n varying vec3 vColor;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n attribute vec3 color2;\r\n varying vec3 vColor2;\r\n attribute vec2 uv;\r\n #ifndef CYLINDER_SPRITE\r\n varying vec2 vUv;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_POS\r\n attribute vec4 offset;\r\n #ifdef SPHERE_SPRITE\r\n varying vec4 instOffset;\r\n varying vec4 spritePosEye;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n attribute vec4 matVector1;\r\n attribute vec4 matVector2;\r\n attribute vec4 matVector3;\r\n attribute vec4 invmatVector1;\r\n attribute vec4 invmatVector2;\r\n attribute vec4 invmatVector3;\r\n\r\n #ifdef CYLINDER_SPRITE\r\n varying vec4 matVec1;\r\n varying vec4 matVec2;\r\n varying vec4 matVec3;\r\n varying vec4 invmatVec1;\r\n varying vec4 invmatVec2;\r\n varying vec4 invmatVec3;\r\n varying vec4 spritePosEye;\r\n #endif\r\n#endif\r\n\r\nuniform mat4 modelViewMatrix; // optional\r\nuniform mat4 projectionMatrix; // optional\r\nuniform mat3 normalMatrix; // optional\r\nuniform mat4 modelMatrix; // optional\r\n\r\n#ifdef DASHED_LINE\r\n attribute float lineDistance;\r\n varying float vLineDistance;\r\n#endif\r\n\r\n#ifdef THICK_LINE\r\n attribute vec3 direction;\r\n uniform mat4 projMatrixInv;\r\n uniform vec2 viewport;\r\n uniform float lineWidth;\r\n\r\n vec4 transform(vec4 coord){\r\n return projectionMatrix * modelViewMatrix * coord;\r\n }\r\n\r\n vec2 project(vec4 device){\r\n vec3 device_normal = device.xyz/device.w;\r\n vec2 clip_pos = (device_normal*0.5+0.5).xy;\r\n return clip_pos * viewport;\r\n }\r\n\r\n vec4 unproject(vec2 screen, float z, float w){\r\n vec2 clip_pos = screen/viewport;\r\n vec2 device_normal = clip_pos*2.0-1.0;\r\n return vec4(device_normal*w, z, w);\r\n }\r\n#endif\r\n\r\n\r\n/////////////////////////////////////////// Main ///////////////////////////////////////////////\r\nvoid main() {\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n alphaCol = alphaColor;\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n vec3 objectNormal = vec3(\r\n dot(normal, matVector1.xyz),\r\n dot(normal, matVector2.xyz),\r\n dot(normal, matVector3.xyz));\r\n#else\r\n vec3 objectNormal = vec3( normal );\r\n#endif\r\n\r\nvec3 transformedNormal = normalMatrix * objectNormal;\r\n\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n vNormal = normalize(transformedNormal);\r\n#endif\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n viewNormal = normalize(mat3(modelViewMatrix)*objectNormal);\r\n#endif\r\n\r\n vec4 localPos = vec4(position.xyz, 1.0);\r\n vec4 worldPos = modelMatrix * localPos;\r\n vec4 mvPosition = modelViewMatrix * localPos;\r\n\r\n// make thick line offset\r\n#ifdef THICK_LINE\r\n // get screen pos\r\n vec4 dPos = transform(vec4(position.xyz, 1.0));\r\n vec2 sPos = project(dPos);\r\n // move pos forward\r\n vec3 position2 = position.xyz + direction.xyz * 0.5;\r\n // get screen offset pos\r\n vec4 dPos2 = transform(vec4(position2.xyz, 1.0));\r\n vec2 sPos2 = project(dPos2);\r\n // screen line direction\r\n vec2 sDir = normalize(sPos2 - sPos);\r\n // vertex offset (orthogonal to line direction)\r\n vec2 offset1 = vec2(-sDir.y, sDir.x);\r\n // move screen vertex\r\n vec2 newPos = sPos + offset1 * position.w * lineWidth;\r\n // get moved pos in view space\r\n vec4 dNewPos = unproject(newPos, dPos.z, dPos.w);\r\n mvPosition.xyz = (projMatrixInv * dNewPos).xyz;\r\n#endif // THICK_LINE\r\n\r\n#ifdef INSTANCED_POS\r\n #ifdef SPHERE_SPRITE\r\n instOffset = offset;\r\n\r\n vec4 posEye = modelViewMatrix * vec4( offset.xyz, 1.0 );\r\n float scale = length(modelViewMatrix[0]);\r\n mvPosition = posEye + vec4( position.xyz * offset.w * scale * INSTANCED_SPRITE_OVERSCALE, 0.0 );\r\n posEye.w = offset.w * scale;\r\n\r\n spritePosEye = posEye;\r\n #else\r\n localPos = vec4( offset.xyz + position.xyz * offset.w, 1.0 );\r\n worldPos = modelMatrix * localPos;\r\n mvPosition = modelViewMatrix * localPos;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n #ifdef CYLINDER_SPRITE\r\n matVec1 = matVector1;\r\n matVec2 = matVector2;\r\n matVec3 = matVector3;\r\n invmatVec1 = invmatVector1;\r\n invmatVec2 = invmatVector2;\r\n invmatVec3 = invmatVector3;\r\n\r\n // calculate eye coords of cylinder endpoints\r\n vec4 v = vec4(0, -0.5, 0, 1);\r\n vec4 p1 = modelViewMatrix * vec4(dot(v, matVector1), dot(v, matVector2), dot(v, matVector3), 1.0);\r\n v.y = 0.5;\r\n vec4 p2 = modelViewMatrix * vec4(dot(v, matVector1), dot(v, matVector2), dot(v, matVector3), 1.0);\r\n\r\n // sprite is placed at the center of cylinder\r\n vec4 posEye;\r\n posEye.xyz = mix(p1.xyz, p2.xyz, 0.5);\r\n posEye.w = 1.0;\r\n spritePosEye = posEye;\r\n\r\n // cylinder radius in eye space\r\n float rad = length(modelViewMatrix[0]) * length(vec3(matVector1.x, matVector2.x, matVector3.x));\r\n vec2 spriteSize;\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // In ortho projection we skip z coordinate\r\n // basic sprite size at screen plane (covers only cylinder axis)\r\n vec2 spriteSizeScreen = abs(p2.xy - p1.xy);\r\n\r\n spriteSize = vec2(1.0, 1.0) * INSTANCED_SPRITE_OVERSCALE * (spriteSizeScreen + 2.0 * rad);\r\n #else\r\n // basic sprite size at screen plane (covers only cylinder axis)\r\n vec2 spriteSizeScreen = abs(p2.xy / p2.z - p1.xy / p1.z);\r\n\r\n // full sprite size in eye coords\r\n float minZ = min(abs(p1.z), abs(p2.z));\r\n spriteSize = vec2(1.0, 1.0) * INSTANCED_SPRITE_OVERSCALE * abs(posEye.z) * (spriteSizeScreen + 2.0 * rad / minZ);\r\n #endif\r\n\r\n mvPosition = posEye + vec4( position.xy * 0.5 * spriteSize, 0, 0 );\r\n #else\r\n localPos = vec4(dot(localPos, matVector1), dot(localPos, matVector2), dot(localPos, matVector3), 1.0);\r\n worldPos = modelMatrix * localPos;\r\n mvPosition = modelViewMatrix * localPos;\r\n #endif\r\n#endif\r\n\r\n gl_Position = projectionMatrix * mvPosition;\r\n\r\n vWorldPosition = worldPos.xyz;\r\n vViewPosition = - mvPosition.xyz;\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t vec4 worldPosition;\r\n\t // see THREE.WebGLProgram.unrollLoops\r\n\t #pragma unroll_loop_start\r\n\t for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * vec4(vWorldPosition, 1.0);\r\n vDirectionalShadowNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(objectNormal, 0.0))).xyz;\r\n\t }\r\n\t #pragma unroll_loop_end\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n vColor = color.xyz;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n vColor2 = color2;\r\n #ifndef CYLINDER_SPRITE\r\n vUv = uv;\r\n #endif\r\n#endif\r\n\r\n#ifdef DASHED_LINE\r\n vLineDistance = lineDistance;\r\n#endif\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/Uber.frag -const gfx_shaders_Uber_namespaceObject = "#if defined (NORMALS_TO_G_BUFFER)\r\n #define fragColor gl_FragData[0]\r\n#else\r\n #define fragColor gl_FragColor\r\n#endif\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n varying float alphaCol;\r\n#endif\r\n\r\n#ifdef COLOR_FROM_POS\r\n uniform mat4 world2colorMatrix;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\r\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ]; //only for sprites\r\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\r\n\t\tvarying vec3 vDirectionalShadowNormal[ NUM_DIR_LIGHTS ];\r\n vec4 vDirLightWorldCoord[ NUM_DIR_LIGHTS ];\r\n vec3 vDirLightWorldNormal[ NUM_DIR_LIGHTS ];\r\n\r\n #ifdef SHADOWMAP_PCF_RAND\r\n // We use 4 instead uniform variable or define because this value is used in for(... i < value; ...) with\r\n // unroll_loop and unroll_loop has pattern:\r\n // /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g\r\n uniform vec2 samplesKernel[4]; // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n uniform sampler2D noiseTex;\r\n uniform vec2 noiseTexelSize;\r\n uniform vec2 srcTexelSize;\r\n uniform mat4 projectionMatrix;\r\n #endif\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n varying vec3 vColor;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n varying vec3 vColor2;\r\n #ifndef CYLINDER_SPRITE\r\n varying vec2 vUv;\r\n #endif\r\n#endif\r\n\r\nuniform vec3 diffuse;\r\nuniform vec3 emissive;\r\nuniform vec3 specular;\r\nuniform float shininess;\r\nuniform vec3 fixedColor;\r\nuniform float opacity;\r\nuniform float zClipValue;\r\nuniform float clipPlaneValue;\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n varying vec3 viewNormal;\r\n#endif\r\n\r\n#define RECIPROCAL_PI 0.31830988618\r\n#define saturate(a) clamp( a, 0.0, 1.0 )\r\n\r\n#ifdef USE_FOG\r\n uniform vec3 fogColor;\r\n uniform float fogAlpha;\r\n uniform float fogNear;\r\n uniform float fogFar;\r\n#endif\r\n\r\nvarying vec3 vWorldPosition; // world position of the pixel (invalid when INSTANCED_SPRITE is defined)\r\nvarying vec3 vViewPosition;\r\n\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n varying vec3 vNormal;\r\n#endif\r\n\r\n/////////////////////////////////////////// ZSprites ////////////////////////////////////////////////\r\n#if defined (SPHERE_SPRITE) || defined (CYLINDER_SPRITE)\r\n uniform float nearPlaneValue;\r\n#endif\r\n\r\n#ifdef SPHERE_SPRITE\r\n varying vec4 spritePosEye;\r\n#endif\r\n\r\n#if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n uniform float zOffset;\r\n\r\n #if !defined(USE_LIGHTS) || !defined(SHADOWMAP) || !defined(SHADOWMAP_PCF_RAND) || !(NUM_DIR_LIGHTS > 0)\r\n uniform mat4 projectionMatrix;\r\n #endif\r\n\r\n float calcDepthForSprites(vec4 pixelPosEye, float zOffset, mat4 projMatrix) {\r\n vec4 pixelPosScreen = projMatrix * pixelPosEye;\r\n return 0.5 * (pixelPosScreen.z / pixelPosScreen.w + 1.0) + zOffset;\r\n }\r\n#endif\r\n\r\n#ifdef SPHERE_SPRITE\r\n varying vec4 instOffset;\r\n uniform mat4 modelMatrix;\r\n uniform mat4 modelViewMatrix;\r\n uniform mat4 invModelViewMatrix;\r\n uniform mat3 normalMatrix;\r\n\r\n\r\n bool intersect_ray_sphere(in vec3 origin, in vec3 ray, out vec3 point, out float frontFaced) {\r\n\r\n // intersect XZ-projected ray with circle\r\n float a = dot(ray, ray);\r\n float b = dot(ray, origin);\r\n float c = dot(origin, origin) - 1.0;\r\n float det = b * b - a * c;\r\n if (det < 0.0) return false;\r\n float t1 = (-b - sqrt(det)) / a;\r\n float t2 = (-b + sqrt(det)) / a;\r\n\r\n // calculate both intersection points\r\n vec3 p1 = origin + ray * t1;\r\n vec3 p2 = origin + ray * t2;\r\n\r\n // choose nearest point inside frustum\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // orthografic camera is used for dirLight sources. So in it for all spheres the point with smaller 't' is visible\r\n // t1 is always smaller than t2 (from calculations)\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n #else\r\n // for perspective camera first intersection can be in front of near plane. If not intersection is p1 else - p2\r\n // t* = 0.0 corresponds to point of intersection near plane by the ray from camera to curPixel\r\n if (t1 >= 0.0) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (t2 >= 0.0) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #endif\r\n\r\n return false;\r\n }\r\n\r\n bool get_sphere_point(in vec3 pixelPosEye, out vec3 point, out float frontFaced) {\r\n vec3 origin, ray;\r\n\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // transform vector from sprite center to curPixel into sphere local coords\r\n origin = pixelPosEye.xyz - spritePosEye.xyz;\r\n origin = (invModelViewMatrix * vec4(origin, 0.0)).xyz / instOffset.w;\r\n\r\n // transform camera orientation vector into sphere local coords\r\n ray = (invModelViewMatrix * vec4(0.0, 0.0, -1.0, 0.0)).xyz;\r\n #else\r\n // find point of intersection near plane by the ray from camera to curPixel\r\n vec4 v = vec4(-(nearPlaneValue / pixelPosEye.z) * pixelPosEye, 1.0);\r\n\r\n // transform intersection point into sphere local coords\r\n v = invModelViewMatrix * v;\r\n origin = (v.xyz - instOffset.xyz) / instOffset.w;\r\n\r\n // transform vector from camera pos to curPixel into sphere local coords\r\n ray = (invModelViewMatrix * vec4(pixelPosEye, 0.0)).xyz;\r\n #endif\r\n ray = normalize(ray);\r\n\r\n return intersect_ray_sphere(origin, ray, point, frontFaced);\r\n }\r\n#endif\r\n\r\n#ifdef CYLINDER_SPRITE\r\n varying vec4 matVec1;\r\n varying vec4 matVec2;\r\n varying vec4 matVec3;\r\n varying vec4 invmatVec1;\r\n varying vec4 invmatVec2;\r\n varying vec4 invmatVec3;\r\n\r\n uniform mat4 modelMatrix;\r\n uniform mat4 modelViewMatrix;\r\n uniform mat4 invModelViewMatrix;\r\n uniform mat3 normalMatrix;\r\n\r\n varying vec4 spritePosEye;\r\n\r\n bool intersect_ray_cylinder(in vec3 origin, in vec3 ray, out vec3 point, out float frontFaced) {\r\n\r\n // intersect XZ-projected ray with circle\r\n float a = dot(ray.xz, ray.xz);\r\n float b = dot(ray.xz, origin.xz);\r\n float c = dot(origin.xz, origin.xz) - 1.0;\r\n float det = b * b - a * c;\r\n if (det < 0.0) return false;\r\n float t1 = (-b - sqrt(det)) / a;\r\n float t2 = (-b + sqrt(det)) / a;\r\n\r\n // calculate both intersection points\r\n vec3 p1 = origin + ray * t1;\r\n vec3 p2 = origin + ray * t2;\r\n\r\n float halfHeight = 0.5;\r\n\r\n // choose nearest point\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // orthografic camera is used for dirLight sources. So in it for all cylinders the point with smaller 't' is visible\r\n // if it is not outside of cylinnder (t1 is always smaller than t2).\r\n if (p1.y >= -halfHeight && p1.y <= halfHeight) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (p2.y >= -halfHeight && p2.y <= halfHeight) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #else\r\n // for perspective camera first intersection can be in front of near plane. If not intersection is p1 else - p2\r\n // t* = 0.0 corresponds to point of intersection near plane by the ray from camera to curPixel\r\n if (t1 >= 0.0 && p1.y >= -halfHeight && p1.y <= halfHeight) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (t2 >= 0.0 && p2.y >= -halfHeight && p2.y <= halfHeight) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #endif\r\n\r\n return false;\r\n }\r\n\r\n bool get_cylinder_point(in vec3 pixelPosEye, out vec3 point, out float frontFaced) {\r\n vec3 origin, ray;\r\n vec4 v;\r\n\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // transform vector from sprite center to curPixel into cylinder local coords\r\n v = invModelViewMatrix * vec4(pixelPosEye.xyz - spritePosEye.xyz, 0.0);\r\n origin = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n\r\n // transform camera orientation vector into cylinder local coords\r\n v = invModelViewMatrix * vec4(0.0, 0.0, -1.0, 0.0);\r\n ray = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n #else\r\n // find point of intersection near plane by the ray from camera to curPixel\r\n v = vec4(-(nearPlaneValue / pixelPosEye.z) * pixelPosEye, 1.0);\r\n\r\n // transform intersection point into cylinder local coords\r\n v = invModelViewMatrix * v;\r\n origin = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n\r\n // transform vector from camera pos to curPixel into cylinder local coords\r\n v = invModelViewMatrix * vec4(pixelPosEye, 0.0);\r\n ray = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n #endif\r\n ray = normalize(ray);\r\n\r\n return intersect_ray_cylinder(origin, ray, point, frontFaced);\r\n }\r\n#endif\r\n\r\n///////////////////////////////////// Pack and unpack ///////////////////////////////////////////////\r\nconst float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1)\r\nconst float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1)\r\n\r\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\r\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\r\n\r\n\r\nconst float ShiftRight8 = 1. / 256.;\r\n\r\nvec4 packDepthToRGBA( const in float v ) {\r\n vec4 r = vec4( fract( v * PackFactors ), v );\r\n r.yzw -= r.xyz * ShiftRight8; // tidy overflow\r\n return r * PackUpscale;\r\n}\r\n\r\nfloat unpackRGBAToDepth( const in vec4 v ) {\r\n return dot( v, UnpackFactors );\r\n}\r\n\r\n////////////////////////////////////////// All Lighting /////////////////////////////////////////////////\r\n#ifdef TOON_SHADING\r\n #define LOW_TOON_BORDER 0.0\r\n #define MEDIUM_TOON_BORDER 0.7\r\n #define HIGH_TOON_BORDER 1.0\r\n\r\n #define MEDIUM_TOON_RANGE 0.5\r\n #define HIGH_TOON_RANGE 0.95\r\n#endif\r\n#if defined(USE_LIGHTS) && NUM_DIR_LIGHTS > 0\r\n struct ReflectedLight {\r\n vec3 directDiffuse;\r\n vec3 directSpecular;\r\n vec3 indirectDiffuse;\r\n };\r\n\r\n struct BlinnPhongMaterial {\r\n vec3 diffuseColor;\r\n vec3 specularColor;\r\n float specularShininess;\r\n };\r\n\r\n struct GeometricContext {\r\n vec3 normal;\r\n vec3 viewDir;\r\n };\r\n\r\n struct DirectionalLight {\r\n vec3 direction;\r\n vec3 color;\r\n };\r\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\r\n\r\n struct DirectionalLightShadow {\r\n vec2 shadowMapSize;\r\n float shadowBias;\r\n float shadowRadius;\r\n };\r\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHTS ];\r\n\r\n uniform vec3 ambientLightColor;\r\n\r\n /////////////////////////////////////////// Shadowmap ////////////////////////////////////////////////\r\n\r\n #if defined(SHADOWMAP)\r\n \tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\r\n \t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\r\n \t}\r\n\r\n float getShadow( sampler2D shadowMap, DirectionalLightShadow dirLight, vec4 shadowCoord, vec3 vViewPosition, vec3 vNormal ) {\r\n \t float shadow = 0.0;\r\n\r\n // When shadows for sprites will appear use here for them normals as it done for G-buffer\r\n shadowCoord.xyz += dirLight.shadowBias * vNormal;\r\n shadowCoord.xyz /= shadowCoord.w;\r\n\r\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\r\n bool inFrustum = all( inFrustumVec );\r\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\r\n bool frustumTest = all( frustumTestVec );\r\n\r\n if ( frustumTest ) {\r\n #ifdef SHADOWMAP_BASIC\r\n \t shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\r\n \t#endif\r\n\r\n \t#ifdef SHADOWMAP_PCF_SHARP\r\n \t vec2 texelSize = vec2( 1.0 ) / dirLight.shadowMapSize;\r\n\r\n float dx0 = - texelSize.x * dirLight.shadowRadius;\r\n float dy0 = - texelSize.y * dirLight.shadowRadius;\r\n float dx1 = + texelSize.x * dirLight.shadowRadius;\r\n float dy1 = + texelSize.y * dirLight.shadowRadius;\r\n\r\n shadow = (\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\r\n ) * ( 1.0 / 9.0 );\r\n #endif\r\n\r\n #ifdef SHADOWMAP_PCF_RAND\r\n vec2 texelSize = vec2( 1.0 ) / dirLight.shadowMapSize;\r\n\r\n vec4 vUv = ((projectionMatrix * vec4(vViewPosition, 1.0)) + 1.0) / 2.0;\r\n vec2 vUvNoise = vUv.xy / srcTexelSize * noiseTexelSize;\r\n\r\n vec2 noiseVec = normalize(texture2D(noiseTex, vUvNoise).rg);\r\n mat2 mNoise = mat2(noiseVec.x, noiseVec.y, -noiseVec.y, noiseVec.x);\r\n\r\n vec2 offset;\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < 4; i ++ ) { // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n offset = mNoise * ( normalize( samplesKernel[ i ]) * texelSize * dirLight.shadowRadius );\r\n shadow += texture2DCompare( shadowMap, shadowCoord.xy + offset, shadowCoord.z );\r\n }\r\n #pragma unroll_loop_end\r\n shadow /= float( 4 ); // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n #endif\r\n }\r\n return shadow;//(shadow != 1.0) ? 0.5 : 1.0;//vec4(shadow, shadow, shadow, 1.0);\r\n }\r\n #endif\r\n\r\n /////////////////////////////////////////// Lighting /////////////////////////////////////////////////\r\n\r\n vec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\r\n return RECIPROCAL_PI * diffuseColor;\r\n } // validated\r\n\r\n vec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\r\n // Original approximation by Christophe Schlick '94\r\n //;float fresnel = pow( 1.0 - dotLH, 5.0 );\r\n // Optimized variant (presented by Epic at SIGGRAPH '13)\r\n float fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\r\n return ( 1.0 - specularColor ) * fresnel + specularColor;\r\n } // validated\r\n\r\n float G_BlinnPhong_Implicit( /* const in float dotNL, const in float dotNV */ ) {\r\n // geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v)\r\n return 0.25;\r\n }\r\n\r\n float D_BlinnPhong( const in float shininess, const in float dotNH ) {\r\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\r\n }\r\n\r\n vec3 BRDF_Specular_BlinnPhong( const in DirectionalLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\r\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\r\n float dotNH = saturate(dot( geometry.normal, halfDir ));\r\n float dotLH = saturate(dot( incidentLight.direction, halfDir ));\r\n\r\n vec3 F = F_Schlick( specularColor, dotLH );\r\n float G = G_BlinnPhong_Implicit( /* dotNL, dotNV */ );\r\n float D = D_BlinnPhong( shininess, dotNH );\r\n\r\n return F * ( G * D );\r\n } // validated\r\n\r\n void RE_Direct_BlinnPhong( const in DirectionalLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight, float penumbra ) {\r\n\r\n float dotNL = saturate( dot( geometry.normal, directLight.direction ));\r\n #ifdef TOON_SHADING\r\n if(dotNL < MEDIUM_TOON_RANGE){\r\n dotNL = LOW_TOON_BORDER;\r\n }\r\n else if(dotNL < HIGH_TOON_RANGE){\r\n dotNL = MEDIUM_TOON_BORDER;\r\n }\r\n else{\r\n dotNL = HIGH_TOON_BORDER;\r\n }\r\n #endif\r\n\r\n vec3 irradiance = dotNL * directLight.color;\r\n reflectedLight.directDiffuse += penumbra * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\r\n reflectedLight.directSpecular += penumbra * irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess );\r\n }\r\n\r\n void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\r\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\r\n }\r\n\r\n vec3 calcLighting(const in GeometricContext geometry, const in BlinnPhongMaterial material, vec3 vViewPosition) {\r\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ));\r\n vec3 irradiance = ambientLightColor;\r\n\r\n float shadowMask = 1.0;\r\n // see THREE.WebGLProgram.unrollLoops\r\n \t#pragma unroll_loop_start\r\n \t for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n \t #ifdef SHADOWMAP\r\n \t shadowMask = getShadow( directionalShadowMap[ i ], directionalLightShadows[ i ], vDirLightWorldCoord[ i ], vViewPosition, vDirLightWorldNormal[ i ] );\r\n #endif\r\n\r\n \t\t if ( shadowMask > 0.0 ) RE_Direct_BlinnPhong( directionalLights[ i ], geometry, material, reflectedLight, shadowMask );\r\n \t\t}\r\n \t\t#pragma unroll_loop_end\r\n\r\n RE_IndirectDiffuse_BlinnPhong(irradiance, material, reflectedLight);\r\n\r\n return saturate(reflectedLight.indirectDiffuse + reflectedLight.directDiffuse + reflectedLight.directSpecular);\r\n }\r\n#endif\r\n\r\n/////////////////////////////////////////// Dashed Line ///////////////////////////////////////////////\r\n#ifdef DASHED_LINE\r\n uniform float dashedLineSize;\r\n uniform float dashedLinePeriod;\r\n varying float vLineDistance;\r\n#endif\r\n\r\n/////////////////////////////////////////// Main ///////////////////////////////////////////////\r\nvoid main() {\r\n\r\n#ifdef CLIP_PLANE\r\n if (vViewPosition.z < clipPlaneValue) discard;\r\n#endif\r\n\r\n#ifdef ZCLIP\r\n if (vViewPosition.z < zClipValue) discard;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = vDirectionalShadowCoord[ i ];\r\n vDirLightWorldNormal[ i ] = vDirectionalShadowNormal[ i ];\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n#endif\r\n\r\n vec4 pixelPosWorld = vec4(vWorldPosition, 1.0);\r\n vec4 pixelPosEye;\r\n\r\n#ifdef SPHERE_SPRITE\r\n\r\n vec3 viewNormalSprites;\r\n float frontFaced = 1.0;\r\n vec3 normal;\r\n\r\n/* quick-and-dirty method\r\n normal.xy = ' + INSTANCED_SPRITE_OVERSCALE + ' * (2.0 * vUv - 1.0);\r\n float r2 = dot(normal.xy, normal.xy);\r\n if (r2 > 1.0) discard;\r\n float normalZ = sqrt(1.0 - r2);\r\n normal.z = normalZ;\r\n normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\r\n pixelPosEye = vec4(spritePosEye.xyz, 1.0);\r\n pixelPosEye.z += spritePosEye.w * normalZ;\r\n*/\r\n\r\n // ray-trace sphere surface\r\n {\r\n vec3 p;\r\n if (!get_sphere_point(-vViewPosition, p, frontFaced)) discard;\r\n vec4 v = vec4(instOffset.xyz + p * instOffset.w, 1.0);\r\n pixelPosWorld = modelMatrix * v;\r\n pixelPosEye = modelViewMatrix * v;\r\n normal = normalize(normalMatrix * p);\r\n #ifdef NORMALS_TO_G_BUFFER\r\n viewNormalSprites = normalize(mat3(modelViewMatrix)*p);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = directionalShadowMatrix[ i ] * pixelPosWorld;\r\n vDirLightWorldNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(p, 0.0))).xyz;\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n #endif\r\n }\r\n#endif\r\n\r\n#ifdef CYLINDER_SPRITE\r\n vec3 normal;\r\n vec3 viewNormalSprites;\r\n float frontFaced = 1.0;\r\n float cylinderY = 0.0;\r\n\r\n // ray-trace cylinder surface\r\n {\r\n vec3 p;\r\n if (!get_cylinder_point(-vViewPosition, p, frontFaced)) discard;\r\n\r\n cylinderY = 0.5 * (p.y + 1.0);\r\n\r\n vec4 v = vec4(p, 1.0);\r\n v = vec4(dot(v, matVec1), dot(v, matVec2), dot(v, matVec3), 1.0);\r\n pixelPosWorld = modelMatrix * v;\r\n pixelPosEye = modelViewMatrix * v;\r\n\r\n vec3 localNormal = normalize(vec3(p.x, 0.0, p.z));\r\n normal = vec3(\r\n dot(localNormal, matVec1.xyz),\r\n dot(localNormal, matVec2.xyz),\r\n dot(localNormal, matVec3.xyz));\r\n #ifdef NORMALS_TO_G_BUFFER\r\n viewNormalSprites = normalize(mat3(modelViewMatrix)*normal);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = directionalShadowMatrix[ i ] * pixelPosWorld;\r\n vDirLightWorldNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(normal, 0.0))).xyz;\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n #endif\r\n\r\n normal = normalize(normalMatrix * normal);\r\n }\r\n#endif\r\n\r\n #ifdef ATTR_COLOR\r\n vec3 vertexColor = vColor;\r\n #else\r\n vec3 vertexColor = vec3(1.0, 1.0, 1.0);\r\n #endif\r\n\r\n #ifdef ATTR_COLOR2\r\n #ifdef CYLINDER_SPRITE\r\n float colorCoef = cylinderY; // cylinder parameter is calculated from ray-tracing\r\n #else\r\n float colorCoef = vUv.y; // cylinder parameter is interpolated as tex coord\r\n #endif\r\n // choose either color or color2\r\n vertexColor = mix(vColor2, vColor, step(0.5, colorCoef));\r\n #endif\r\n\r\n // negative red component is a special condition\r\n if (vertexColor.x < 0.0) discard;\r\n\r\n #ifdef DASHED_LINE\r\n if ( mod( vLineDistance, dashedLinePeriod ) > dashedLineSize ) discard;\r\n #endif\r\n\r\n // transparency prepass writes only z, so we don't need to calc the color\r\n #ifdef PREPASS_TRANSP\r\n fragColor = vec4(1.0, 1.0, 1.0, 1.0);\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepthEXT = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n #endif\r\n return;\r\n #endif\r\n\r\n float totalOpacity = opacity;\r\n\r\n #ifdef ATTR_ALPHA_COLOR\r\n totalOpacity *= alphaCol;\r\n #endif\r\n\r\n // discard fully transparent pixels\r\n if (totalOpacity == 0.0) discard;\r\n\r\n #ifdef FAKE_OPACITY\r\n // discard pixels in checker pattern\r\n vec2 dm_coord = floor(gl_FragCoord.xy);\r\n dm_coord = fract(dm_coord * 0.5);\r\n if (totalOpacity < 1.0 && (dm_coord.x < 0.5 ^^ dm_coord.y < 0.5)) discard;\r\n vec4 diffuseColor = vec4(diffuse, 1.0);\r\n #else\r\n vec4 diffuseColor = vec4(diffuse, totalOpacity);\r\n #endif\r\n\r\n float flipNormal;\r\n #if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n flipNormal = 1.0;\r\n #ifdef DOUBLE_SIDED\r\n flipNormal = float( gl_FrontFacing );\r\n #endif\r\n vec3 normal = normalize( vNormal ) * flipNormal;\r\n #endif\r\n\r\n diffuseColor.rgb *= vertexColor;\r\n\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepthEXT = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n #endif\r\n\r\n #ifdef NORMALS_TO_G_BUFFER\r\n #if defined (SPHERE_SPRITE) || defined (CYLINDER_SPRITE)\r\n vec3 viewNormaInColor = viewNormalSprites;\r\n #else\r\n vec3 viewNormaInColor = viewNormal;\r\n float frontFaced = float( gl_FrontFacing );\r\n #endif\r\n // [-1, 1] -> [0, 1]\r\n viewNormaInColor = 0.5 * viewNormaInColor + 0.5;\r\n gl_FragData[1] = vec4(viewNormaInColor, frontFaced);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && NUM_DIR_LIGHTS > 0\r\n vec3 viewDir;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n viewDir = -pixelPosEye.xyz;\r\n #else\r\n viewDir = vViewPosition;\r\n #endif\r\n GeometricContext geometry = GeometricContext(normal, normalize( viewDir ));\r\n BlinnPhongMaterial material = BlinnPhongMaterial(diffuseColor.rgb, specular, shininess);\r\n vec3 outgoingLight = calcLighting(geometry, material, viewDir);\r\n #else\r\n vec3 outgoingLight = diffuseColor.rgb;\r\n #endif\r\n\r\n #ifdef COLOR_FROM_DEPTH\r\n float depth = 0.0;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepthEXT = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n depth = gl_FragDepthEXT;\r\n #else\r\n depth = gl_FragCoord.z;\r\n #endif\r\n fragColor = packDepthToRGBA(depth);\r\n return;\r\n #endif\r\n\r\n #ifdef COLOR_FROM_POS\r\n fragColor = world2colorMatrix * pixelPosWorld;\r\n #else\r\n #ifdef OVERRIDE_COLOR\r\n fragColor = vec4(fixedColor, diffuseColor.a);\r\n #else\r\n fragColor = vec4(outgoingLight, diffuseColor.a);//vec4(vNormal, 1.0);\r\n #endif\r\n\r\n #ifdef USE_FOG\r\n float viewDistance;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n viewDistance = abs(pixelPosEye.z);\r\n #else\r\n viewDistance = vViewPosition.z;\r\n #endif\r\n float fogFactor = smoothstep( fogNear, fogFar, viewDistance) * fogAlpha;\r\n #ifdef FOG_TRANSPARENT\r\n fragColor.a = fragColor.a * (1.0 - fogFactor);\r\n #else\r\n fragColor.rgb = mix( fragColor.rgb, fogColor, fogFactor );\r\n #endif\r\n #endif\r\n\r\n #endif\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/capabilities.js +;// ./src/gfx/shaders/Uber.vert +const Uber_namespaceObject = "/*\r\n * GLSL Version: ES 3.00 (WebGL 2.0 compatible)\r\n * No #version directive in this file (injected by Three.js).\r\n * Use GLSL3 semantics (`in`/`out`).\r\n * Set `glslVersion: THREE.GLSL3` in ShaderMaterial/RawShaderMaterial.\r\n */\r\n\r\nfloat INSTANCED_SPRITE_OVERSCALE = 1.3;\r\n\r\nin vec3 normal;\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n out vec3 viewNormal;\r\n#endif\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n out vec3 vNormal;\r\n#endif\r\n\r\n#ifdef THICK_LINE\r\n in vec4 position; // W contains vert pos or neg offset\r\n#else\r\n in vec3 position;\r\n#endif\r\n\r\nout vec3 vWorldPosition;\r\nout vec3 vViewPosition;\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n in float alphaColor;\r\n out float alphaCol;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\r\n\t\tout vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\r\n\t\tout vec3 vDirectionalShadowNormal[ NUM_DIR_LIGHTS ];\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n in vec3 color;\r\n out vec3 vColor;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n in vec3 color2;\r\n out vec3 vColor2;\r\n in vec2 uv;\r\n #ifndef CYLINDER_SPRITE\r\n out vec2 vUv;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_POS\r\n in vec4 offset;\r\n #ifdef SPHERE_SPRITE\r\n out vec4 instOffset;\r\n out vec4 spritePosEye;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n in vec4 matVector1;\r\n in vec4 matVector2;\r\n in vec4 matVector3;\r\n in vec4 invmatVector1;\r\n in vec4 invmatVector2;\r\n in vec4 invmatVector3;\r\n\r\n #ifdef CYLINDER_SPRITE\r\n out vec4 matVec1;\r\n out vec4 matVec2;\r\n out vec4 matVec3;\r\n out vec4 invmatVec1;\r\n out vec4 invmatVec2;\r\n out vec4 invmatVec3;\r\n out vec4 spritePosEye;\r\n #endif\r\n#endif\r\n\r\nuniform mat4 modelViewMatrix; // optional\r\nuniform mat4 projectionMatrix; // optional\r\nuniform mat3 normalMatrix; // optional\r\nuniform mat4 modelMatrix; // optional\r\n\r\n#ifdef DASHED_LINE\r\n in float lineDistance;\r\n out float vLineDistance;\r\n#endif\r\n\r\n#ifdef THICK_LINE\r\n in vec3 direction;\r\n uniform mat4 projMatrixInv;\r\n uniform vec2 viewport;\r\n uniform float lineWidth;\r\n\r\n vec4 transform(vec4 coord){\r\n return projectionMatrix * modelViewMatrix * coord;\r\n }\r\n\r\n vec2 project(vec4 device){\r\n vec3 device_normal = device.xyz/device.w;\r\n vec2 clip_pos = (device_normal*0.5+0.5).xy;\r\n return clip_pos * viewport;\r\n }\r\n\r\n vec4 unproject(vec2 screen, float z, float w){\r\n vec2 clip_pos = screen/viewport;\r\n vec2 device_normal = clip_pos*2.0-1.0;\r\n return vec4(device_normal*w, z, w);\r\n }\r\n#endif\r\n\r\n\r\n/////////////////////////////////////////// Main ///////////////////////////////////////////////\r\nvoid main() {\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n alphaCol = alphaColor;\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n vec3 objectNormal = vec3(\r\n dot(normal, matVector1.xyz),\r\n dot(normal, matVector2.xyz),\r\n dot(normal, matVector3.xyz));\r\n#else\r\n vec3 objectNormal = vec3( normal );\r\n#endif\r\n\r\nvec3 transformedNormal = normalMatrix * objectNormal;\r\n\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n vNormal = normalize(transformedNormal);\r\n#endif\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n viewNormal = normalize(mat3(modelViewMatrix)*objectNormal);\r\n#endif\r\n\r\n vec4 localPos = vec4(position.xyz, 1.0);\r\n vec4 worldPos = modelMatrix * localPos;\r\n vec4 mvPosition = modelViewMatrix * localPos;\r\n\r\n// make thick line offset\r\n#ifdef THICK_LINE\r\n // get screen pos\r\n vec4 dPos = transform(vec4(position.xyz, 1.0));\r\n vec2 sPos = project(dPos);\r\n // move pos forward\r\n vec3 position2 = position.xyz + direction.xyz * 0.5;\r\n // get screen offset pos\r\n vec4 dPos2 = transform(vec4(position2.xyz, 1.0));\r\n vec2 sPos2 = project(dPos2);\r\n // screen line direction\r\n vec2 sDir = normalize(sPos2 - sPos);\r\n // vertex offset (orthogonal to line direction)\r\n vec2 offset1 = vec2(-sDir.y, sDir.x);\r\n // move screen vertex\r\n vec2 newPos = sPos + offset1 * position.w * lineWidth;\r\n // get moved pos in view space\r\n vec4 dNewPos = unproject(newPos, dPos.z, dPos.w);\r\n mvPosition.xyz = (projMatrixInv * dNewPos).xyz;\r\n#endif // THICK_LINE\r\n\r\n#ifdef INSTANCED_POS\r\n #ifdef SPHERE_SPRITE\r\n instOffset = offset;\r\n\r\n vec4 posEye = modelViewMatrix * vec4( offset.xyz, 1.0 );\r\n float scale = length(modelViewMatrix[0]);\r\n mvPosition = posEye + vec4( position.xyz * offset.w * scale * INSTANCED_SPRITE_OVERSCALE, 0.0 );\r\n posEye.w = offset.w * scale;\r\n\r\n spritePosEye = posEye;\r\n #else\r\n localPos = vec4( offset.xyz + position.xyz * offset.w, 1.0 );\r\n worldPos = modelMatrix * localPos;\r\n mvPosition = modelViewMatrix * localPos;\r\n #endif\r\n#endif\r\n\r\n#ifdef INSTANCED_MATRIX\r\n #ifdef CYLINDER_SPRITE\r\n matVec1 = matVector1;\r\n matVec2 = matVector2;\r\n matVec3 = matVector3;\r\n invmatVec1 = invmatVector1;\r\n invmatVec2 = invmatVector2;\r\n invmatVec3 = invmatVector3;\r\n\r\n // calculate eye coords of cylinder endpoints\r\n vec4 v = vec4(0, -0.5, 0, 1);\r\n vec4 p1 = modelViewMatrix * vec4(dot(v, matVector1), dot(v, matVector2), dot(v, matVector3), 1.0);\r\n v.y = 0.5;\r\n vec4 p2 = modelViewMatrix * vec4(dot(v, matVector1), dot(v, matVector2), dot(v, matVector3), 1.0);\r\n\r\n // sprite is placed at the center of cylinder\r\n vec4 posEye;\r\n posEye.xyz = mix(p1.xyz, p2.xyz, 0.5);\r\n posEye.w = 1.0;\r\n spritePosEye = posEye;\r\n\r\n // cylinder radius in eye space\r\n float rad = length(modelViewMatrix[0]) * length(vec3(matVector1.x, matVector2.x, matVector3.x));\r\n vec2 spriteSize;\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // In ortho projection we skip z coordinate\r\n // basic sprite size at screen plane (covers only cylinder axis)\r\n vec2 spriteSizeScreen = abs(p2.xy - p1.xy);\r\n\r\n spriteSize = vec2(1.0, 1.0) * INSTANCED_SPRITE_OVERSCALE * (spriteSizeScreen + 2.0 * rad);\r\n #else\r\n // basic sprite size at screen plane (covers only cylinder axis)\r\n vec2 spriteSizeScreen = abs(p2.xy / p2.z - p1.xy / p1.z);\r\n\r\n // full sprite size in eye coords\r\n float minZ = min(abs(p1.z), abs(p2.z));\r\n spriteSize = vec2(1.0, 1.0) * INSTANCED_SPRITE_OVERSCALE * abs(posEye.z) * (spriteSizeScreen + 2.0 * rad / minZ);\r\n #endif\r\n\r\n mvPosition = posEye + vec4( position.xy * 0.5 * spriteSize, 0, 0 );\r\n #else\r\n localPos = vec4(dot(localPos, matVector1), dot(localPos, matVector2), dot(localPos, matVector3), 1.0);\r\n worldPos = modelMatrix * localPos;\r\n mvPosition = modelViewMatrix * localPos;\r\n #endif\r\n#endif\r\n\r\n gl_Position = projectionMatrix * mvPosition;\r\n\r\n vWorldPosition = worldPos.xyz;\r\n vViewPosition = - mvPosition.xyz;\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t vec4 worldPosition;\r\n\t // see THREE.WebGLProgram.unrollLoops\r\n\t #pragma unroll_loop_start\r\n\t for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * vec4(vWorldPosition, 1.0);\r\n vDirectionalShadowNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(objectNormal, 0.0))).xyz;\r\n\t }\r\n\t #pragma unroll_loop_end\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n vColor = color.xyz;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n vColor2 = color2;\r\n #ifndef CYLINDER_SPRITE\r\n vUv = uv;\r\n #endif\r\n#endif\r\n\r\n#ifdef DASHED_LINE\r\n vLineDistance = lineDistance;\r\n#endif\r\n}\r\n"; +;// ./src/gfx/shaders/Uber.frag +const gfx_shaders_Uber_namespaceObject = "/*\r\n * GLSL Version: ES 3.00 (WebGL 2.0 compatible)\r\n * No #version directive in this file (injected by Three.js).\r\n * Use GLSL3 semantics (`in`/`out`, `layout(location=...)`, `texture`).\r\n * Set `glslVersion: THREE.GLSL3` in ShaderMaterial/RawShaderMaterial.\r\n */\r\n\r\n#if defined (NORMALS_TO_G_BUFFER)\r\n layout(location = 0) out vec4 fragColor;\r\n layout(location = 1) out vec4 fragNormal;\r\n#else\r\n out vec4 fragColor;\r\n#endif\r\n\r\n#ifdef ATTR_ALPHA_COLOR\r\n in float alphaCol;\r\n#endif\r\n\r\n#ifdef COLOR_FROM_POS\r\n uniform mat4 world2colorMatrix;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n\t#if NUM_DIR_LIGHTS > 0\r\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\r\n uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ]; //only for sprites\r\n\t\tin vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\r\n\t\tin vec3 vDirectionalShadowNormal[ NUM_DIR_LIGHTS ];\r\n vec4 vDirLightWorldCoord[ NUM_DIR_LIGHTS ];\r\n vec3 vDirLightWorldNormal[ NUM_DIR_LIGHTS ];\r\n\r\n #ifdef SHADOWMAP_PCF_RAND\r\n // We use 4 instead uniform variable or define because this value is used in for(... i < value; ...) with\r\n // unroll_loop and unroll_loop has pattern:\r\n // /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g\r\n uniform vec2 samplesKernel[4]; // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n uniform sampler2D noiseTex;\r\n uniform vec2 noiseTexelSize;\r\n uniform vec2 srcTexelSize;\r\n uniform mat4 projectionMatrix;\r\n #endif\r\n\t#endif\r\n#endif\r\n\r\n#ifdef ATTR_COLOR\r\n in vec3 vColor;\r\n#endif\r\n\r\n#ifdef ATTR_COLOR2\r\n in vec3 vColor2;\r\n #ifndef CYLINDER_SPRITE\r\n in vec2 vUv;\r\n #endif\r\n#endif\r\n\r\nuniform vec3 diffuse;\r\nuniform vec3 emissive;\r\nuniform vec3 specular;\r\nuniform float shininess;\r\nuniform vec3 fixedColor;\r\nuniform float opacity;\r\nuniform float zClipValue;\r\nuniform float clipPlaneValue;\r\n\r\n#ifdef NORMALS_TO_G_BUFFER\r\n in vec3 viewNormal;\r\n#endif\r\n\r\n#define RECIPROCAL_PI 0.31830988618\r\n#define saturate(a) clamp( a, 0.0, 1.0 )\r\n\r\n#ifdef USE_FOG\r\n uniform vec3 fogColor;\r\n uniform float fogAlpha;\r\n uniform float fogNear;\r\n uniform float fogFar;\r\n#endif\r\n\r\nin vec3 vWorldPosition; // world position of the pixel (invalid when INSTANCED_SPRITE is defined)\r\nin vec3 vViewPosition;\r\n\r\n#if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n in vec3 vNormal;\r\n#endif\r\n\r\n/////////////////////////////////////////// ZSprites ////////////////////////////////////////////////\r\n#if defined (SPHERE_SPRITE) || defined (CYLINDER_SPRITE)\r\n uniform float nearPlaneValue;\r\n#endif\r\n\r\n#ifdef SPHERE_SPRITE\r\n in vec4 spritePosEye;\r\n#endif\r\n\r\n#if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n uniform float zOffset;\r\n\r\n #if !defined(USE_LIGHTS) || !defined(SHADOWMAP) || !defined(SHADOWMAP_PCF_RAND) || !(NUM_DIR_LIGHTS > 0)\r\n uniform mat4 projectionMatrix;\r\n #endif\r\n\r\n float calcDepthForSprites(vec4 pixelPosEye, float zOffset, mat4 projMatrix) {\r\n vec4 pixelPosScreen = projMatrix * pixelPosEye;\r\n return 0.5 * (pixelPosScreen.z / pixelPosScreen.w + 1.0) + zOffset;\r\n }\r\n#endif\r\n\r\n#ifdef SPHERE_SPRITE\r\n in vec4 instOffset;\r\n uniform mat4 modelMatrix;\r\n uniform mat4 modelViewMatrix;\r\n uniform mat4 invModelViewMatrix;\r\n uniform mat3 normalMatrix;\r\n\r\n\r\n bool intersect_ray_sphere(in vec3 origin, in vec3 ray, out vec3 point, out float frontFaced) {\r\n\r\n // intersect XZ-projected ray with circle\r\n float a = dot(ray, ray);\r\n float b = dot(ray, origin);\r\n float c = dot(origin, origin) - 1.0;\r\n float det = b * b - a * c;\r\n if (det < 0.0) return false;\r\n float t1 = (-b - sqrt(det)) / a;\r\n float t2 = (-b + sqrt(det)) / a;\r\n\r\n // calculate both intersection points\r\n vec3 p1 = origin + ray * t1;\r\n vec3 p2 = origin + ray * t2;\r\n\r\n // choose nearest point inside frustum\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // orthografic camera is used for dirLight sources. So in it for all spheres the point with smaller 't' is visible\r\n // t1 is always smaller than t2 (from calculations)\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n #else\r\n // for perspective camera first intersection can be in front of near plane. If not intersection is p1 else - p2\r\n // t* = 0.0 corresponds to point of intersection near plane by the ray from camera to curPixel\r\n if (t1 >= 0.0) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (t2 >= 0.0) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #endif\r\n\r\n return false;\r\n }\r\n\r\n bool get_sphere_point(in vec3 pixelPosEye, out vec3 point, out float frontFaced) {\r\n vec3 origin, ray;\r\n\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // transform vector from sprite center to curPixel into sphere local coords\r\n origin = pixelPosEye.xyz - spritePosEye.xyz;\r\n origin = (invModelViewMatrix * vec4(origin, 0.0)).xyz / instOffset.w;\r\n\r\n // transform camera orientation vector into sphere local coords\r\n ray = (invModelViewMatrix * vec4(0.0, 0.0, -1.0, 0.0)).xyz;\r\n #else\r\n // find point of intersection near plane by the ray from camera to curPixel\r\n vec4 v = vec4(-(nearPlaneValue / pixelPosEye.z) * pixelPosEye, 1.0);\r\n\r\n // transform intersection point into sphere local coords\r\n v = invModelViewMatrix * v;\r\n origin = (v.xyz - instOffset.xyz) / instOffset.w;\r\n\r\n // transform vector from camera pos to curPixel into sphere local coords\r\n ray = (invModelViewMatrix * vec4(pixelPosEye, 0.0)).xyz;\r\n #endif\r\n ray = normalize(ray);\r\n\r\n return intersect_ray_sphere(origin, ray, point, frontFaced);\r\n }\r\n#endif\r\n\r\n#ifdef CYLINDER_SPRITE\r\n in vec4 matVec1;\r\n in vec4 matVec2;\r\n in vec4 matVec3;\r\n in vec4 invmatVec1;\r\n in vec4 invmatVec2;\r\n in vec4 invmatVec3;\r\n\r\n uniform mat4 modelMatrix;\r\n uniform mat4 modelViewMatrix;\r\n uniform mat4 invModelViewMatrix;\r\n uniform mat3 normalMatrix;\r\n\r\n in vec4 spritePosEye;\r\n\r\n bool intersect_ray_cylinder(in vec3 origin, in vec3 ray, out vec3 point, out float frontFaced) {\r\n\r\n // intersect XZ-projected ray with circle\r\n float a = dot(ray.xz, ray.xz);\r\n float b = dot(ray.xz, origin.xz);\r\n float c = dot(origin.xz, origin.xz) - 1.0;\r\n float det = b * b - a * c;\r\n if (det < 0.0) return false;\r\n float t1 = (-b - sqrt(det)) / a;\r\n float t2 = (-b + sqrt(det)) / a;\r\n\r\n // calculate both intersection points\r\n vec3 p1 = origin + ray * t1;\r\n vec3 p2 = origin + ray * t2;\r\n\r\n float halfHeight = 0.5;\r\n\r\n // choose nearest point\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // orthografic camera is used for dirLight sources. So in it for all cylinders the point with smaller 't' is visible\r\n // if it is not outside of cylinnder (t1 is always smaller than t2).\r\n if (p1.y >= -halfHeight && p1.y <= halfHeight) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (p2.y >= -halfHeight && p2.y <= halfHeight) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #else\r\n // for perspective camera first intersection can be in front of near plane. If not intersection is p1 else - p2\r\n // t* = 0.0 corresponds to point of intersection near plane by the ray from camera to curPixel\r\n if (t1 >= 0.0 && p1.y >= -halfHeight && p1.y <= halfHeight) {\r\n point = p1;\r\n frontFaced = 1.0;\r\n return true;\r\n }\r\n if (t2 >= 0.0 && p2.y >= -halfHeight && p2.y <= halfHeight) {\r\n point = p2;\r\n frontFaced = -1.0;\r\n return true;\r\n }\r\n #endif\r\n\r\n return false;\r\n }\r\n\r\n bool get_cylinder_point(in vec3 pixelPosEye, out vec3 point, out float frontFaced) {\r\n vec3 origin, ray;\r\n vec4 v;\r\n\r\n #ifdef ORTHOGRAPHIC_CAMERA\r\n // transform vector from sprite center to curPixel into cylinder local coords\r\n v = invModelViewMatrix * vec4(pixelPosEye.xyz - spritePosEye.xyz, 0.0);\r\n origin = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n\r\n // transform camera orientation vector into cylinder local coords\r\n v = invModelViewMatrix * vec4(0.0, 0.0, -1.0, 0.0);\r\n ray = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n #else\r\n // find point of intersection near plane by the ray from camera to curPixel\r\n v = vec4(-(nearPlaneValue / pixelPosEye.z) * pixelPosEye, 1.0);\r\n\r\n // transform intersection point into cylinder local coords\r\n v = invModelViewMatrix * v;\r\n origin = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n\r\n // transform vector from camera pos to curPixel into cylinder local coords\r\n v = invModelViewMatrix * vec4(pixelPosEye, 0.0);\r\n ray = vec3(dot(v, invmatVec1), dot(v, invmatVec2), dot(v, invmatVec3));\r\n #endif\r\n ray = normalize(ray);\r\n\r\n return intersect_ray_cylinder(origin, ray, point, frontFaced);\r\n }\r\n#endif\r\n\r\n///////////////////////////////////// Pack and unpack ///////////////////////////////////////////////\r\nconst float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1)\r\nconst float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1)\r\n\r\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\r\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\r\n\r\n\r\nconst float ShiftRight8 = 1. / 256.;\r\n\r\nvec4 packDepthToRGBA( const in float v ) {\r\n vec4 r = vec4( fract( v * PackFactors ), v );\r\n r.yzw -= r.xyz * ShiftRight8; // tidy overflow\r\n return r * PackUpscale;\r\n}\r\n\r\nfloat unpackRGBAToDepth( const in vec4 v ) {\r\n return dot( v, UnpackFactors );\r\n}\r\n\r\n////////////////////////////////////////// All Lighting /////////////////////////////////////////////////\r\n#ifdef TOON_SHADING\r\n #define LOW_TOON_BORDER 0.0\r\n #define MEDIUM_TOON_BORDER 0.7\r\n #define HIGH_TOON_BORDER 1.0\r\n\r\n #define MEDIUM_TOON_RANGE 0.5\r\n #define HIGH_TOON_RANGE 0.95\r\n#endif\r\n#if defined(USE_LIGHTS) && NUM_DIR_LIGHTS > 0\r\n struct ReflectedLight {\r\n vec3 directDiffuse;\r\n vec3 directSpecular;\r\n vec3 indirectDiffuse;\r\n };\r\n\r\n struct BlinnPhongMaterial {\r\n vec3 diffuseColor;\r\n vec3 specularColor;\r\n float specularShininess;\r\n };\r\n\r\n struct GeometricContext {\r\n vec3 normal;\r\n vec3 viewDir;\r\n };\r\n\r\n struct DirectionalLight {\r\n vec3 direction;\r\n vec3 color;\r\n };\r\n uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\r\n\r\n struct DirectionalLightShadow {\r\n vec2 shadowMapSize;\r\n float shadowBias;\r\n float shadowRadius;\r\n };\r\n uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHTS ];\r\n\r\n uniform vec3 ambientLightColor;\r\n\r\n /////////////////////////////////////////// Shadowmap ////////////////////////////////////////////////\r\n\r\n #if defined(SHADOWMAP)\r\n \tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\r\n \t\treturn step( compare, unpackRGBAToDepth( texture( depths, uv ) ) );\r\n \t}\r\n\r\n float getShadow( sampler2D shadowMap, DirectionalLightShadow dirLight, vec4 shadowCoord, vec3 vViewPosition, vec3 vNormal ) {\r\n \t float shadow = 0.0;\r\n\r\n // When shadows for sprites will appear use here for them normals as it done for G-buffer\r\n shadowCoord.xyz += dirLight.shadowBias * vNormal;\r\n shadowCoord.xyz /= shadowCoord.w;\r\n\r\n bvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\r\n bool inFrustum = all( inFrustumVec );\r\n bvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\r\n bool frustumTest = all( frustumTestVec );\r\n\r\n if ( frustumTest ) {\r\n #ifdef SHADOWMAP_BASIC\r\n \t shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\r\n \t#endif\r\n\r\n \t#ifdef SHADOWMAP_PCF_SHARP\r\n \t vec2 texelSize = vec2( 1.0 ) / dirLight.shadowMapSize;\r\n\r\n float dx0 = - texelSize.x * dirLight.shadowRadius;\r\n float dy0 = - texelSize.y * dirLight.shadowRadius;\r\n float dx1 = + texelSize.x * dirLight.shadowRadius;\r\n float dy1 = + texelSize.y * dirLight.shadowRadius;\r\n\r\n shadow = (\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\r\n \ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\r\n ) * ( 1.0 / 9.0 );\r\n #endif\r\n\r\n #ifdef SHADOWMAP_PCF_RAND\r\n vec2 texelSize = vec2( 1.0 ) / dirLight.shadowMapSize;\r\n\r\n vec4 vUv = ((projectionMatrix * vec4(vViewPosition, 1.0)) + 1.0) / 2.0;\r\n vec2 vUvNoise = vUv.xy / srcTexelSize * noiseTexelSize;\r\n\r\n vec2 noiseVec = normalize(texture(noiseTex, vUvNoise).rg);\r\n mat2 mNoise = mat2(noiseVec.x, noiseVec.y, -noiseVec.y, noiseVec.x);\r\n\r\n vec2 offset;\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < 4; i ++ ) { // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n offset = mNoise * ( normalize( samplesKernel[ i ]) * texelSize * dirLight.shadowRadius );\r\n shadow += texture2DCompare( shadowMap, shadowCoord.xy + offset, shadowCoord.z );\r\n }\r\n #pragma unroll_loop_end\r\n shadow /= float( 4 ); // 4 is length of _samplesKernel which is defined in UberMaterial.js\r\n #endif\r\n }\r\n return shadow;//(shadow != 1.0) ? 0.5 : 1.0;//vec4(shadow, shadow, shadow, 1.0);\r\n }\r\n #endif\r\n\r\n /////////////////////////////////////////// Lighting /////////////////////////////////////////////////\r\n\r\n vec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\r\n return RECIPROCAL_PI * diffuseColor;\r\n } // validated\r\n\r\n vec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\r\n // Original approximation by Christophe Schlick '94\r\n //;float fresnel = pow( 1.0 - dotLH, 5.0 );\r\n // Optimized variant (presented by Epic at SIGGRAPH '13)\r\n float fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\r\n return ( 1.0 - specularColor ) * fresnel + specularColor;\r\n } // validated\r\n\r\n float G_BlinnPhong_Implicit( /* const in float dotNL, const in float dotNV */ ) {\r\n // geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v)\r\n return 0.25;\r\n }\r\n\r\n float D_BlinnPhong( const in float shininess, const in float dotNH ) {\r\n return RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\r\n }\r\n\r\n vec3 BRDF_Specular_BlinnPhong( const in DirectionalLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\r\n vec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\r\n float dotNH = saturate(dot( geometry.normal, halfDir ));\r\n float dotLH = saturate(dot( incidentLight.direction, halfDir ));\r\n\r\n vec3 F = F_Schlick( specularColor, dotLH );\r\n float G = G_BlinnPhong_Implicit( /* dotNL, dotNV */ );\r\n float D = D_BlinnPhong( shininess, dotNH );\r\n\r\n return F * ( G * D );\r\n } // validated\r\n\r\n void RE_Direct_BlinnPhong( const in DirectionalLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight, float penumbra ) {\r\n\r\n float dotNL = saturate( dot( geometry.normal, directLight.direction ));\r\n #ifdef TOON_SHADING\r\n if(dotNL < MEDIUM_TOON_RANGE){\r\n dotNL = LOW_TOON_BORDER;\r\n }\r\n else if(dotNL < HIGH_TOON_RANGE){\r\n dotNL = MEDIUM_TOON_BORDER;\r\n }\r\n else{\r\n dotNL = HIGH_TOON_BORDER;\r\n }\r\n #endif\r\n\r\n vec3 irradiance = dotNL * directLight.color;\r\n reflectedLight.directDiffuse += penumbra * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\r\n reflectedLight.directSpecular += penumbra * irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess );\r\n }\r\n\r\n void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\r\n reflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\r\n }\r\n\r\n vec3 calcLighting(const in GeometricContext geometry, const in BlinnPhongMaterial material, vec3 vViewPosition) {\r\n ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ));\r\n vec3 irradiance = ambientLightColor;\r\n\r\n float shadowMask = 1.0;\r\n // see THREE.WebGLProgram.unrollLoops\r\n \t#pragma unroll_loop_start\r\n \t for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n \t #ifdef SHADOWMAP\r\n \t shadowMask = getShadow( directionalShadowMap[ i ], directionalLightShadows[ i ], vDirLightWorldCoord[ i ], vViewPosition, vDirLightWorldNormal[ i ] );\r\n #endif\r\n\r\n \t\t if ( shadowMask > 0.0 ) RE_Direct_BlinnPhong( directionalLights[ i ], geometry, material, reflectedLight, shadowMask );\r\n \t\t}\r\n \t\t#pragma unroll_loop_end\r\n\r\n RE_IndirectDiffuse_BlinnPhong(irradiance, material, reflectedLight);\r\n\r\n return saturate(reflectedLight.indirectDiffuse + reflectedLight.directDiffuse + reflectedLight.directSpecular);\r\n }\r\n#endif\r\n\r\n/////////////////////////////////////////// Dashed Line ///////////////////////////////////////////////\r\n#ifdef DASHED_LINE\r\n uniform float dashedLineSize;\r\n uniform float dashedLinePeriod;\r\n in float vLineDistance;\r\n#endif\r\n\r\n/////////////////////////////////////////// Main ///////////////////////////////////////////////\r\nvoid main() {\r\n\r\n#ifdef CLIP_PLANE\r\n if (vViewPosition.z < clipPlaneValue) discard;\r\n#endif\r\n\r\n#ifdef ZCLIP\r\n if (vViewPosition.z < zClipValue) discard;\r\n#endif\r\n\r\n#if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = vDirectionalShadowCoord[ i ];\r\n vDirLightWorldNormal[ i ] = vDirectionalShadowNormal[ i ];\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n#endif\r\n\r\n vec4 pixelPosWorld = vec4(vWorldPosition, 1.0);\r\n vec4 pixelPosEye;\r\n\r\n#ifdef SPHERE_SPRITE\r\n\r\n vec3 viewNormalSprites;\r\n float frontFaced = 1.0;\r\n vec3 normal;\r\n\r\n/* quick-and-dirty method\r\n normal.xy = ' + INSTANCED_SPRITE_OVERSCALE + ' * (2.0 * vUv - 1.0);\r\n float r2 = dot(normal.xy, normal.xy);\r\n if (r2 > 1.0) discard;\r\n float normalZ = sqrt(1.0 - r2);\r\n normal.z = normalZ;\r\n normal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\r\n pixelPosEye = vec4(spritePosEye.xyz, 1.0);\r\n pixelPosEye.z += spritePosEye.w * normalZ;\r\n*/\r\n\r\n // ray-trace sphere surface\r\n {\r\n vec3 p;\r\n if (!get_sphere_point(-vViewPosition, p, frontFaced)) discard;\r\n vec4 v = vec4(instOffset.xyz + p * instOffset.w, 1.0);\r\n pixelPosWorld = modelMatrix * v;\r\n pixelPosEye = modelViewMatrix * v;\r\n normal = normalize(normalMatrix * p);\r\n #ifdef NORMALS_TO_G_BUFFER\r\n viewNormalSprites = normalize(mat3(modelViewMatrix)*p);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = directionalShadowMatrix[ i ] * pixelPosWorld;\r\n vDirLightWorldNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(p, 0.0))).xyz;\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n #endif\r\n }\r\n#endif\r\n\r\n#ifdef CYLINDER_SPRITE\r\n vec3 normal;\r\n vec3 viewNormalSprites;\r\n float frontFaced = 1.0;\r\n float cylinderY = 0.0;\r\n\r\n // ray-trace cylinder surface\r\n {\r\n vec3 p;\r\n if (!get_cylinder_point(-vViewPosition, p, frontFaced)) discard;\r\n\r\n cylinderY = 0.5 * (p.y + 1.0);\r\n\r\n vec4 v = vec4(p, 1.0);\r\n v = vec4(dot(v, matVec1), dot(v, matVec2), dot(v, matVec3), 1.0);\r\n pixelPosWorld = modelMatrix * v;\r\n pixelPosEye = modelViewMatrix * v;\r\n\r\n vec3 localNormal = normalize(vec3(p.x, 0.0, p.z));\r\n normal = vec3(\r\n dot(localNormal, matVec1.xyz),\r\n dot(localNormal, matVec2.xyz),\r\n dot(localNormal, matVec3.xyz));\r\n #ifdef NORMALS_TO_G_BUFFER\r\n viewNormalSprites = normalize(mat3(modelViewMatrix)*normal);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && defined(SHADOWMAP)\r\n #if NUM_DIR_LIGHTS > 0\r\n // see THREE.WebGLProgram.unrollLoops\r\n #pragma unroll_loop_start\r\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\r\n vDirLightWorldCoord[ i ] = directionalShadowMatrix[ i ] * pixelPosWorld;\r\n vDirLightWorldNormal[ i ] = (directionalShadowMatrix[ i ] * (modelMatrix * vec4(normal, 0.0))).xyz;\r\n }\r\n #pragma unroll_loop_end\r\n #endif\r\n #endif\r\n\r\n normal = normalize(normalMatrix * normal);\r\n }\r\n#endif\r\n\r\n #ifdef ATTR_COLOR\r\n vec3 vertexColor = vColor;\r\n #else\r\n vec3 vertexColor = vec3(1.0, 1.0, 1.0);\r\n #endif\r\n\r\n #ifdef ATTR_COLOR2\r\n #ifdef CYLINDER_SPRITE\r\n float colorCoef = cylinderY; // cylinder parameter is calculated from ray-tracing\r\n #else\r\n float colorCoef = vUv.y; // cylinder parameter is interpolated as tex coord\r\n #endif\r\n // choose either color or color2\r\n vertexColor = mix(vColor2, vColor, step(0.5, colorCoef));\r\n #endif\r\n\r\n // negative red component is a special condition\r\n if (vertexColor.x < 0.0) discard;\r\n\r\n #ifdef DASHED_LINE\r\n if ( mod( vLineDistance, dashedLinePeriod ) > dashedLineSize ) discard;\r\n #endif\r\n\r\n // transparency prepass writes only z, so we don't need to calc the color\r\n #ifdef PREPASS_TRANSP\r\n fragColor = vec4(1.0, 1.0, 1.0, 1.0);\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepth = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n #endif\r\n return;\r\n #endif\r\n\r\n float totalOpacity = opacity;\r\n\r\n #ifdef ATTR_ALPHA_COLOR\r\n totalOpacity *= alphaCol;\r\n #endif\r\n\r\n // discard fully transparent pixels\r\n if (totalOpacity == 0.0) discard;\r\n\r\n #ifdef FAKE_OPACITY\r\n // discard pixels in checker pattern\r\n vec2 dm_coord = floor(gl_FragCoord.xy);\r\n dm_coord = fract(dm_coord * 0.5);\r\n if (totalOpacity < 1.0 && (dm_coord.x < 0.5 ^^ dm_coord.y < 0.5)) discard;\r\n vec4 diffuseColor = vec4(diffuse, 1.0);\r\n #else\r\n vec4 diffuseColor = vec4(diffuse, totalOpacity);\r\n #endif\r\n\r\n float flipNormal;\r\n #if !defined (SPHERE_SPRITE) && !defined (CYLINDER_SPRITE)\r\n flipNormal = 1.0;\r\n #ifdef DOUBLE_SIDED\r\n flipNormal = float( gl_FrontFacing );\r\n #endif\r\n vec3 normal = normalize( vNormal ) * flipNormal;\r\n #endif\r\n\r\n diffuseColor.rgb *= vertexColor;\r\n\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepth = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n #endif\r\n\r\n #ifdef NORMALS_TO_G_BUFFER\r\n #if defined (SPHERE_SPRITE) || defined (CYLINDER_SPRITE)\r\n vec3 viewNormaInColor = viewNormalSprites;\r\n #else\r\n vec3 viewNormaInColor = viewNormal;\r\n float frontFaced = float( gl_FrontFacing );\r\n #endif\r\n // [-1, 1] -> [0, 1]\r\n viewNormaInColor = 0.5 * viewNormaInColor + 0.5;\r\n fragNormal = vec4(viewNormaInColor, frontFaced);\r\n #endif\r\n\r\n #if defined(USE_LIGHTS) && NUM_DIR_LIGHTS > 0\r\n vec3 viewDir;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n viewDir = -pixelPosEye.xyz;\r\n #else\r\n viewDir = vViewPosition;\r\n #endif\r\n GeometricContext geometry = GeometricContext(normal, normalize( viewDir ));\r\n BlinnPhongMaterial material = BlinnPhongMaterial(diffuseColor.rgb, specular, shininess);\r\n vec3 outgoingLight = calcLighting(geometry, material, viewDir);\r\n #else\r\n vec3 outgoingLight = diffuseColor.rgb;\r\n #endif\r\n\r\n #ifdef COLOR_FROM_DEPTH\r\n float depth = 0.0;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n gl_FragDepth = calcDepthForSprites(pixelPosEye, zOffset, projectionMatrix);\r\n depth = gl_FragDepth;\r\n #else\r\n depth = gl_FragCoord.z;\r\n #endif\r\n fragColor = packDepthToRGBA(depth);\r\n return;\r\n #endif\r\n\r\n #ifdef COLOR_FROM_POS\r\n fragColor = world2colorMatrix * pixelPosWorld;\r\n #else\r\n #ifdef OVERRIDE_COLOR\r\n fragColor = vec4(fixedColor, diffuseColor.a);\r\n #else\r\n fragColor = vec4(outgoingLight, diffuseColor.a);//vec4(vNormal, 1.0);\r\n #endif\r\n\r\n #ifdef USE_FOG\r\n float viewDistance;\r\n #if defined(SPHERE_SPRITE) || defined(CYLINDER_SPRITE)\r\n viewDistance = abs(pixelPosEye.z);\r\n #else\r\n viewDistance = vViewPosition.z;\r\n #endif\r\n float fogFactor = smoothstep( fogNear, fogFar, viewDistance) * fogAlpha;\r\n #ifdef FOG_TRANSPARENT\r\n fragColor.a = fragColor.a * (1.0 - fogFactor);\r\n #else\r\n fragColor.rgb = mix( fragColor.rgb, fogColor, fogFactor );\r\n #endif\r\n #endif\r\n\r\n #endif\r\n}\r\n"; +;// ./src/gfx/capabilities.js /* harmony default export */ const capabilities = ({ precision: 'mediump', /** @@ -16702,7 +16749,7 @@ const gfx_shaders_Uber_namespaceObject = "#if defined (NORMALS_TO_G_BUFFER)\r\n this.precision = renderer.capabilities.getMaxPrecision('highp'); } }); -;// CONCATENATED MODULE: ./src/gfx/noiseTexture.js +;// ./src/gfx/noiseTexture.js const noiseWidth = 4; const noiseHeight = 4; @@ -16719,9 +16766,7 @@ noiseTexture.needsUpdate = true; noiseHeight, noiseTexture }); -;// CONCATENATED MODULE: ./src/gfx/shaders/UberMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/UberMaterial.js @@ -16931,9 +16976,10 @@ class UberMaterial extends external_module_three_commonjs_three_commonjs2_three_ // set default values super.setValues({ - uniforms: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.UniformsUtils.clone(defaultUniforms), + glslVersion: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.GLSL3, vertexShader: this.precisionString() + Uber_namespaceObject, fragmentShader: this.precisionString() + gfx_shaders_Uber_namespaceObject, + uniforms: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.UniformsUtils.clone(defaultUniforms), lights: true, fog: true, side: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.DoubleSide @@ -17119,12 +17165,12 @@ class UberMaterial extends external_module_three_commonjs_three_commonjs2_three_ } UberMaterial.prototype.uberOptions = uberOptions; /* harmony default export */ const shaders_UberMaterial = (UberMaterial); -;// CONCATENATED MODULE: ./src/gfx/meshes/UberObject.js +;// ./src/gfx/meshes/UberObject.js /* harmony default export */ function UberObject(SuperClass) { class NewObjectType extends SuperClass { - constructor() { - super(...arguments); + constructor(...rest) { + super(...rest); this.onBeforeRender = NewObjectType.prototype.onBeforeRender; } onBeforeRender(renderer, scene, camera, geometry, material, group) { @@ -17146,13 +17192,13 @@ UberMaterial.prototype.uberOptions = uberOptions; } return NewObjectType; } -;// CONCATENATED MODULE: ./src/gfx/meshes/ZSpriteMesh.js +;// ./src/gfx/meshes/ZSpriteMesh.js const Mesh = UberObject(external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Mesh); class ZSpriteMesh extends Mesh { - constructor() { - super(...arguments); + constructor(...rest) { + super(...rest); this.castShadow = true; this.receiveShadow = true; } @@ -17176,7 +17222,7 @@ class ZSpriteMesh extends Mesh { } } /* harmony default export */ const meshes_ZSpriteMesh = (ZSpriteMesh); -;// CONCATENATED MODULE: ./src/gfx/meshes/ZClippedMesh.js +;// ./src/gfx/meshes/ZClippedMesh.js const ZClippedMesh_Mesh = UberObject(external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Mesh); @@ -17186,9 +17232,9 @@ class ZClippedMesh extends ZClippedMesh_Mesh { this.castShadow = true; this.receiveShadow = true; } - static _mvLength = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3())(); - static _center = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3())(); - static _modelView = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Matrix4())(); + static _mvLength = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(); + static _center = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(); + static _modelView = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Matrix4(); _onBeforeRender(renderer, scene, camera) { ZClippedMesh_Mesh.prototype._onBeforeRender.call(this, renderer, scene, camera); const geo = this.geometry; @@ -17210,7 +17256,7 @@ class ZClippedMesh extends ZClippedMesh_Mesh { } } /* harmony default export */ const meshes_ZClippedMesh = (ZClippedMesh); -;// CONCATENATED MODULE: ./src/gfx/meshes/TextMesh.js +;// ./src/gfx/meshes/TextMesh.js @@ -17243,7 +17289,7 @@ class TextMesh extends external_module_three_commonjs_three_commonjs2_three_amd_ } const item = utils.shallowCloneNode(srcItem); const label = new gfx_CSS2DObject(item); - label.userData = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].clone(userData); + label.userData = __WEBPACK_EXTERNAL_MODULE_lodash_default__.clone(userData); const el = label.getElement(); el.style.visibility = 'visible'; label.source = srcItem; @@ -17272,7 +17318,7 @@ class TextMesh extends external_module_three_commonjs_three_commonjs2_three_amd_ } } /* harmony default export */ const meshes_TextMesh = (TextMesh); -;// CONCATENATED MODULE: ./src/gfx/meshes/SimpleMesh.js +;// ./src/gfx/meshes/SimpleMesh.js const SimpleMesh_Mesh = UberObject(external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Mesh); @@ -17284,7 +17330,7 @@ class SimpleMesh extends SimpleMesh_Mesh { } } /* harmony default export */ const meshes_SimpleMesh = (SimpleMesh); -;// CONCATENATED MODULE: ./src/gfx/meshes/ThickLineMesh.js +;// ./src/gfx/meshes/ThickLineMesh.js const ThickLineMesh_Mesh = UberObject(external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Mesh); @@ -17303,19 +17349,19 @@ class ThickLineMesh extends ThickLineMesh_Mesh { } } /* harmony default export */ const meshes_ThickLineMesh = (ThickLineMesh); -;// CONCATENATED MODULE: ./src/gfx/meshes/InstancedMesh.js +;// ./src/gfx/meshes/InstancedMesh.js const InstancedMesh_Mesh = UberObject(external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Mesh); class InstancedMesh extends InstancedMesh_Mesh { - constructor() { - super(...arguments); + constructor(...rest) { + super(...rest); this.castShadow = true; this.receiveShadow = true; } } /* harmony default export */ const meshes_InstancedMesh = (InstancedMesh); -;// CONCATENATED MODULE: ./src/gfx/meshes/meshes.js +;// ./src/gfx/meshes/meshes.js @@ -17334,7 +17380,7 @@ class InstancedMesh extends InstancedMesh_Mesh { ThickLineMesh: meshes_ThickLineMesh, Instanced: meshes_InstancedMesh }); -;// CONCATENATED MODULE: ./src/gfx/meshes/MeshCreator.js +;// ./src/gfx/meshes/MeshCreator.js @@ -17457,12 +17503,12 @@ class MeshCreator { } } /* harmony default export */ const meshes_MeshCreator = (MeshCreator); -;// CONCATENATED MODULE: ./src/gfx/meshes/TransformGroup.js +;// ./src/gfx/meshes/TransformGroup.js class TransformGroup extends external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Object3D { - static _inverseMatrix = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Matrix4())(); - static _ray = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Ray())(); + static _inverseMatrix = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Matrix4(); + static _ray = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Ray(); constructor(geometry, geoParams, material, transforms) { super(); this._geometry = geometry; @@ -17532,7 +17578,7 @@ class TransformGroup extends external_module_three_commonjs_three_commonjs2_thre } } /* harmony default export */ const meshes_TransformGroup = (TransformGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/ChemGroup.js +;// ./src/gfx/modes/groups/ChemGroup.js function wrapper(Name, args) { @@ -17591,7 +17637,7 @@ class ChemGroup extends gfx_RCGroup { } } /* harmony default export */ const groups_ChemGroup = (ChemGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AtomsGroup.js +;// ./src/gfx/modes/groups/AtomsGroup.js class AtomsGroup extends groups_ChemGroup { raycast(raycaster, intersects) { @@ -17629,7 +17675,7 @@ class AtomsGroup extends groups_ChemGroup { } } /* harmony default export */ const groups_AtomsGroup = (AtomsGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AtomsSphereGroup.js +;// ./src/gfx/modes/groups/AtomsSphereGroup.js class AtomsSphereGroup extends groups_AtomsGroup { _makeGeoArgs() { @@ -17673,7 +17719,7 @@ class AtomsSphereGroup extends groups_AtomsGroup { } } /* harmony default export */ const groups_AtomsSphereGroup = (AtomsSphereGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AtomsSurfaceGroup.js +;// ./src/gfx/modes/groups/AtomsSurfaceGroup.js class AtomsSurfaceGroup extends groups_AtomsSphereGroup { _makeGeoArgs() { @@ -17692,7 +17738,7 @@ class AtomsSurfaceGroup extends groups_AtomsSphereGroup { } } /* harmony default export */ const groups_AtomsSurfaceGroup = (AtomsSurfaceGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AtomsSASSESGroupStub.js +;// ./src/gfx/modes/groups/AtomsSASSESGroupStub.js /* This is a stub class keep it until SAS/SES is refactored */ @@ -17715,7 +17761,7 @@ class AtomsSASSESGroupStub extends groups_AtomsSphereGroup { } } /* harmony default export */ const groups_AtomsSASSESGroupStub = (AtomsSASSESGroupStub); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AtomsTextGroup.js +;// ./src/gfx/modes/groups/AtomsTextGroup.js function adjustColor(color) { @@ -17859,7 +17905,7 @@ class AtomsTextGroup extends groups_AtomsGroup { } } /* harmony default export */ const groups_AtomsTextGroup = (AtomsTextGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AromaticGroup.js +;// ./src/gfx/modes/groups/AromaticGroup.js function _slerp(omega, v1, v2, t) { @@ -17921,7 +17967,7 @@ class AromaticGroup extends groups_AtomsGroup { } } /* harmony default export */ const groups_AromaticGroup = (AromaticGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AromaticTorusGroup.js +;// ./src/gfx/modes/groups/AromaticTorusGroup.js @@ -17963,7 +18009,7 @@ class AromaticTorusGroup extends groups_AromaticGroup { } } /* harmony default export */ const groups_AromaticTorusGroup = (AromaticTorusGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/AromaticLinesGroup.js +;// ./src/gfx/modes/groups/AromaticLinesGroup.js class AromaticLinesGroup extends groups_AromaticGroup { _build() { @@ -17986,7 +18032,7 @@ class AromaticLinesGroup extends groups_AromaticGroup { } } /* harmony default export */ const groups_AromaticLinesGroup = (AromaticLinesGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/ResiduesGroup.js +;// ./src/gfx/modes/groups/ResiduesGroup.js class ResiduesGroup extends groups_ChemGroup { raycast(raycaster, intersects) { @@ -18024,7 +18070,7 @@ class ResiduesGroup extends groups_ChemGroup { } } /* harmony default export */ const groups_ResiduesGroup = (ResiduesGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/NucleicItemGroup.js +;// ./src/gfx/modes/groups/NucleicItemGroup.js class NucleicItemGroup extends groups_ResiduesGroup { raycast(raycaster, intersects) { @@ -18100,7 +18146,7 @@ class NucleicItemGroup extends groups_ResiduesGroup { } } /* harmony default export */ const groups_NucleicItemGroup = (NucleicItemGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/NucleicCylindersGroup.js +;// ./src/gfx/modes/groups/NucleicCylindersGroup.js class NucleicCylindersGroup extends groups_NucleicItemGroup { _makeGeoArgs() { @@ -18113,7 +18159,7 @@ class NucleicCylindersGroup extends groups_NucleicItemGroup { } } /* harmony default export */ const groups_NucleicCylindersGroup = (NucleicCylindersGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/NucleicSpheresGroup.js +;// ./src/gfx/modes/groups/NucleicSpheresGroup.js class NucleicSpheresGroup extends groups_NucleicItemGroup { _makeGeoArgs() { @@ -18132,7 +18178,7 @@ class NucleicSpheresGroup extends groups_NucleicItemGroup { /* harmony default export */ const groups_NucleicSpheresGroup = (NucleicSpheresGroup); // EXTERNAL MODULE: ./vendor/js/Smooth.js var Smooth = __webpack_require__(690); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/CartoonHelper.js +;// ./src/gfx/modes/groups/CartoonHelper.js @@ -18308,7 +18354,7 @@ class CartoonHelper { } } /* harmony default export */ const groups_CartoonHelper = (CartoonHelper); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/ResiduesSubseqGroup.js +;// ./src/gfx/modes/groups/ResiduesSubseqGroup.js @@ -18370,9 +18416,7 @@ class ResiduesSubseqGroup extends groups_ResiduesGroup { const geo = this._geo; let chunkIdx = 0; const chunkIdc = []; - _loopThrough(this._selection.subdivs, residues, this._segmentsHeight, tension, mode, function (currRes, mtc) { - let hasSlope = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - let hasCut = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; + _loopThrough(this._selection.subdivs, residues, this._segmentsHeight, tension, mode, (currRes, mtc, hasSlope = false, hasCut = false) => { const color = colorer.getResidueColor(currRes, parent); chunkIdc[chunkIdx] = currRes._index; geo.setItem(chunkIdx, mtc, hasSlope, hasCut); @@ -18405,7 +18449,7 @@ class ResiduesSubseqGroup extends groups_ResiduesGroup { } } /* harmony default export */ const groups_ResiduesSubseqGroup = (ResiduesSubseqGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/ResiduesTraceGroup.js +;// ./src/gfx/modes/groups/ResiduesTraceGroup.js class ResiduesTraceGroup extends groups_ChemGroup { _makeGeoArgs() { @@ -18529,7 +18573,7 @@ class ResiduesTraceGroup extends groups_ChemGroup { } } /* harmony default export */ const groups_ResiduesTraceGroup = (ResiduesTraceGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/BondsGroup.js +;// ./src/gfx/modes/groups/BondsGroup.js function getCylinderCount(bondOrder) { @@ -18598,7 +18642,7 @@ class BondsGroup extends groups_ChemGroup { } } /* harmony default export */ const groups_BondsGroup = (BondsGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/BondsCylinderGroup.js +;// ./src/gfx/modes/groups/BondsCylinderGroup.js class BondsCylinderGroup extends groups_BondsGroup { @@ -18690,7 +18734,7 @@ class BondsCylinderGroup extends groups_BondsGroup { } } /* harmony default export */ const groups_BondsCylinderGroup = (BondsCylinderGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/BondsLinesGroup.js +;// ./src/gfx/modes/groups/BondsLinesGroup.js const STEP_SIZE = 0.15; @@ -18801,7 +18845,7 @@ class BondsLinesGroup extends groups_BondsGroup { } } /* harmony default export */ const groups_BondsLinesGroup = (BondsLinesGroup); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/groups.js +;// ./src/gfx/modes/groups/groups.js @@ -18828,7 +18872,7 @@ class BondsLinesGroup extends groups_BondsGroup { BondsCylinderGroup: groups_BondsCylinderGroup, BondsLinesGroup: groups_BondsLinesGroup }); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/AtomsProcessor.js +;// ./src/gfx/modes/processors/AtomsProcessor.js class AtomsProcessor extends gfx_RCGroup { constructor(AtomsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) { @@ -18882,7 +18926,7 @@ class AtomsProcessor extends gfx_RCGroup { } } /* harmony default export */ const processors_AtomsProcessor = (AtomsProcessor); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/OrphanAtomsProcessor.js +;// ./src/gfx/modes/processors/OrphanAtomsProcessor.js class OrphanAtomsProcessor extends processors_AtomsProcessor { _checkAtom(atom, mask) { @@ -18901,7 +18945,7 @@ class OrphanAtomsProcessor extends processors_AtomsProcessor { } } /* harmony default export */ const processors_OrphanAtomsProcessor = (OrphanAtomsProcessor); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/ResiduesProcessor.js +;// ./src/gfx/modes/processors/ResiduesProcessor.js class ResiduesProcessor extends gfx_RCGroup { constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) { @@ -18953,7 +18997,7 @@ class ResiduesProcessor extends gfx_RCGroup { } } /* harmony default export */ const processors_ResiduesProcessor = (ResiduesProcessor); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/NucleicProcessor.js +;// ./src/gfx/modes/processors/NucleicProcessor.js class NucleicProcessor extends processors_ResiduesProcessor { _checkResidue(residue, mask) { @@ -18961,7 +19005,7 @@ class NucleicProcessor extends processors_ResiduesProcessor { } } /* harmony default export */ const processors_NucleicProcessor = (NucleicProcessor); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/SubseqsProcessor.js +;// ./src/gfx/modes/processors/SubseqsProcessor.js class SubseqsProcessor extends gfx_RCGroup { constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) { @@ -19015,7 +19059,7 @@ class SubseqsProcessor extends gfx_RCGroup { } } /* harmony default export */ const processors_SubseqsProcessor = (SubseqsProcessor); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/BondsProcessor.js +;// ./src/gfx/modes/processors/BondsProcessor.js class BondsProcessor extends gfx_RCGroup { constructor(BondsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) { @@ -19067,7 +19111,7 @@ class BondsProcessor extends gfx_RCGroup { } } /* harmony default export */ const processors_BondsProcessor = (BondsProcessor); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/AromaticProcessor.js +;// ./src/gfx/modes/processors/AromaticProcessor.js class AromaticProcessor extends gfx_RCGroup { constructor(AromaticGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) { @@ -19127,7 +19171,7 @@ class AromaticProcessor extends gfx_RCGroup { } } /* harmony default export */ const processors_AromaticProcessor = (AromaticProcessor); -;// CONCATENATED MODULE: ./src/gfx/modes/processors/processors.js +;// ./src/gfx/modes/processors/processors.js @@ -19144,7 +19188,7 @@ class AromaticProcessor extends gfx_RCGroup { Bonds: processors_BondsProcessor, Aromatic: processors_AromaticProcessor }); -;// CONCATENATED MODULE: ./src/gfx/modes/groups/GroupsFactory.js +;// ./src/gfx/modes/groups/GroupsFactory.js @@ -19212,7 +19256,7 @@ class GroupsFactory { } } /* harmony default export */ const groups_GroupsFactory = (GroupsFactory); -;// CONCATENATED MODULE: ./src/gfx/modes/Mode.js +;// ./src/gfx/modes/Mode.js @@ -19242,7 +19286,7 @@ class Mode { * Mode options inherited (prototyped) from defaults. * @type {object} */ - this.opts = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].merge(utils.deriveDeep(this.settings.now.modes[this.id], true), opts); + this.opts = __WEBPACK_EXTERNAL_MODULE_lodash_default__.merge(utils.deriveDeep(this.settings.now.modes[this.id], true), opts); } /** @@ -19253,7 +19297,7 @@ class Mode { */ identify() { const diff = utils.objectsDiff(this.opts, this.settings.now.modes[this.id]); - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEmpty(diff)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isEmpty(diff)) { return [this.id, diff]; } return this.id; @@ -19267,7 +19311,7 @@ class Mode { for (let i = 0; i < groupCount; ++i) { let currGroup = groupList[i]; let renderParams = {}; - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isArray(currGroup)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isArray(currGroup)) { renderParams = currGroup[1].call(this); [currGroup] = currGroup; } @@ -19294,7 +19338,7 @@ Mode.prototype.id = '__'; */ Mode.prototype.depGroups = []; /* harmony default export */ const modes_Mode = (Mode); -;// CONCATENATED MODULE: ./src/gfx/modes/LinesMode.js +;// ./src/gfx/modes/LinesMode.js function getRenderParams() { return { @@ -19332,8 +19376,7 @@ LinesMode.prototype.name = 'Lines'; LinesMode.prototype.shortName = 'Lines'; LinesMode.prototype.depGroups = ['ALoopsLines', 'BondsLines', 'OrphanedAtomsCrosses']; /* harmony default export */ const modes_LinesMode = (LinesMode); -;// CONCATENATED MODULE: ./src/gfx/modes/LicoriceMode.js -/* eslint-disable no-magic-numbers */ +;// ./src/gfx/modes/LicoriceMode.js class LicoriceMode extends modes_Mode { static id = 'LC'; @@ -19361,8 +19404,7 @@ LicoriceMode.prototype.name = 'Licorice'; LicoriceMode.prototype.shortName = 'Licorice'; LicoriceMode.prototype.depGroups = ['AtomsSpheres', 'BondsCylinders', 'ALoopsTorus']; /* harmony default export */ const modes_LicoriceMode = (LicoriceMode); -;// CONCATENATED MODULE: ./src/gfx/modes/BallsAndSticksMode.js -/* eslint-disable no-magic-numbers */ +;// ./src/gfx/modes/BallsAndSticksMode.js class BallsAndSticksMode extends modes_Mode { static id = 'BS'; @@ -19390,7 +19432,7 @@ BallsAndSticksMode.prototype.name = 'Balls and Sticks'; BallsAndSticksMode.prototype.shortName = 'Balls'; BallsAndSticksMode.prototype.depGroups = ['AtomsSpheres', 'BondsCylinders', 'ALoopsTorus']; /* harmony default export */ const modes_BallsAndSticksMode = (BallsAndSticksMode); -;// CONCATENATED MODULE: ./src/gfx/modes/VanDerWaalsMode.js +;// ./src/gfx/modes/VanDerWaalsMode.js class VanDerWaalsMode extends modes_Mode { static id = 'VW'; @@ -19403,7 +19445,7 @@ VanDerWaalsMode.prototype.name = 'Van der Waals'; VanDerWaalsMode.prototype.shortName = 'VDW'; VanDerWaalsMode.prototype.depGroups = ['AtomsSpheres']; /* harmony default export */ const modes_VanDerWaalsMode = (VanDerWaalsMode); -;// CONCATENATED MODULE: ./src/gfx/modes/TraceMode.js +;// ./src/gfx/modes/TraceMode.js class TraceMode extends modes_Mode { static id = 'TR'; @@ -19416,7 +19458,7 @@ TraceMode.prototype.name = 'Trace'; TraceMode.prototype.shortName = 'Trace'; TraceMode.prototype.depGroups = ['TraceChains']; /* harmony default export */ const modes_TraceMode = (TraceMode); -;// CONCATENATED MODULE: ./src/gfx/modes/TubeMode.js +;// ./src/gfx/modes/TubeMode.js class TubeMode extends modes_Mode { @@ -19441,7 +19483,7 @@ TubeMode.prototype.name = 'Tube'; TubeMode.prototype.shortName = 'Tube'; TubeMode.prototype.depGroups = ['CartoonChains']; /* harmony default export */ const modes_TubeMode = (TubeMode); -;// CONCATENATED MODULE: ./src/gfx/modes/CartoonMode.js +;// ./src/gfx/modes/CartoonMode.js class CartoonMode extends modes_Mode { @@ -19524,7 +19566,7 @@ CartoonMode.prototype.name = 'Cartoon'; CartoonMode.prototype.shortName = 'Cartoon'; CartoonMode.prototype.depGroups = ['CartoonChains', 'NucleicSpheres', 'NucleicCylinders']; /* harmony default export */ const modes_CartoonMode = (CartoonMode); -;// CONCATENATED MODULE: ./src/gfx/modes/SurfaceMode.js +;// ./src/gfx/modes/SurfaceMode.js const { @@ -19563,7 +19605,7 @@ class SurfaceMode extends modes_Mode { SurfaceMode.prototype.isSurface = true; SurfaceMode.prototype.surfaceNames = []; /* harmony default export */ const modes_SurfaceMode = (SurfaceMode); -;// CONCATENATED MODULE: ./src/gfx/modes/QuickSurfaceMode.js +;// ./src/gfx/modes/QuickSurfaceMode.js class QuickSurfaceMode extends modes_SurfaceMode { static id = 'QS'; @@ -19584,7 +19626,7 @@ QuickSurfaceMode.prototype.name = 'Quick Surface'; QuickSurfaceMode.prototype.shortName = 'Quick Surf'; QuickSurfaceMode.prototype.surfaceNames = ['QuickSurfGeo']; /* harmony default export */ const modes_QuickSurfaceMode = (QuickSurfaceMode); -;// CONCATENATED MODULE: ./src/gfx/modes/IsoSurfaceMode.js +;// ./src/gfx/modes/IsoSurfaceMode.js class IsoSurfaceMode extends modes_SurfaceMode { constructor(excludeProbe, opts) { @@ -19612,7 +19654,7 @@ IsoSurfaceMode.prototype.surfaceNames = ['SASSESSurfaceGeo']; IsoSurfaceMode.prototype._radScale = 1; IsoSurfaceMode.prototype._excludeProbe = false; /* harmony default export */ const modes_IsoSurfaceMode = (IsoSurfaceMode); -;// CONCATENATED MODULE: ./src/gfx/modes/IsoSurfaceSASMode.js +;// ./src/gfx/modes/IsoSurfaceSASMode.js class IsoSurfaceSASMode extends modes_IsoSurfaceMode { static id = 'SA'; @@ -19624,7 +19666,7 @@ IsoSurfaceSASMode.prototype.id = 'SA'; IsoSurfaceSASMode.prototype.name = 'Solvent Accessible Surface'; IsoSurfaceSASMode.prototype.shortName = 'SAS'; /* harmony default export */ const modes_IsoSurfaceSASMode = (IsoSurfaceSASMode); -;// CONCATENATED MODULE: ./src/gfx/modes/IsoSurfaceSESMode.js +;// ./src/gfx/modes/IsoSurfaceSESMode.js class IsoSurfaceSESMode extends modes_IsoSurfaceMode { static id = 'SE'; @@ -19636,7 +19678,7 @@ IsoSurfaceSESMode.prototype.id = 'SE'; IsoSurfaceSESMode.prototype.name = 'Solvent Excluded Surface'; IsoSurfaceSESMode.prototype.shortName = 'SES'; /* harmony default export */ const modes_IsoSurfaceSESMode = (IsoSurfaceSESMode); -;// CONCATENATED MODULE: ./src/gfx/modes/ContactSurfaceMode.js +;// ./src/gfx/modes/ContactSurfaceMode.js class ContactSurfaceMode extends modes_SurfaceMode { static id = 'CS'; @@ -19659,7 +19701,7 @@ ContactSurfaceMode.prototype.shortName = 'Contact Surf'; ContactSurfaceMode.prototype.isSurface = true; ContactSurfaceMode.prototype.surfaceNames = ['ContactSurfaceGeo']; /* harmony default export */ const modes_ContactSurfaceMode = (ContactSurfaceMode); -;// CONCATENATED MODULE: ./src/gfx/modes/TextMode.js +;// ./src/gfx/modes/TextMode.js class TextMode extends modes_Mode { @@ -19668,7 +19710,7 @@ class TextMode extends modes_Mode { return this.opts.template; } getLabelOpts() { - return external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].merge(this.opts, { + return __WEBPACK_EXTERNAL_MODULE_lodash_default__.merge(this.opts, { colors: true, adjustColor: true, transparent: true @@ -19680,7 +19722,7 @@ TextMode.prototype.name = 'Text mode'; TextMode.prototype.shortName = 'Text'; TextMode.prototype.depGroups = ['TextLabelsGeo']; /* harmony default export */ const modes_TextMode = (TextMode); -;// CONCATENATED MODULE: ./src/gfx/modes.js +;// ./src/gfx/modes.js @@ -19696,7 +19738,7 @@ TextMode.prototype.depGroups = ['TextLabelsGeo']; const modes = new utils_EntityList([modes_LinesMode, modes_LicoriceMode, modes_BallsAndSticksMode, modes_VanDerWaalsMode, modes_TraceMode, modes_TubeMode, modes_CartoonMode, modes_QuickSurfaceMode, modes_IsoSurfaceSASMode, modes_IsoSurfaceSESMode, modes_ContactSurfaceMode, modes_TextMode]); /* harmony default export */ const gfx_modes = (modes); -;// CONCATENATED MODULE: ./src/gfx/palettes/Palette.js +;// ./src/gfx/palettes/Palette.js function clamp(x, a, b) { return x <= b ? x < 0 ? 0 : x : b; @@ -19719,13 +19761,11 @@ class Palette { this.name = name || 'Custom'; this.id = id || 'CP'; } - getElementColor(name) { - let asIs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + getElementColor(name, asIs = false) { const color = this.elementColors[name]; return color === undefined && !asIs ? this.defaultElementColor : color; } - getResidueColor(name) { - let asIs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + getResidueColor(name, asIs = false) { const color = this.residueColors[name]; return color === undefined && !asIs ? this.defaultResidueColor : color; } @@ -19734,8 +19774,7 @@ class Palette { chain = ((chain < 0 ? 0 : chain >= 256 ? chain - 256 : chain) & 0x1F) % this.chainColors.length; return this.chainColors[chain]; } - getSecondaryColor(type) { - let asIs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + getSecondaryColor(type, asIs = false) { const color = this.secondaryColors[type]; return color === undefined && !asIs ? this.defaultSecondaryColor : color; } @@ -19758,13 +19797,12 @@ class Palette { left = clamp(left, 0, count - 1); return lerpColor(gradient[left], gradient[right], index - left); } - getNamedColor(name) { - let asIs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + getNamedColor(name, asIs = false) { const color = this.namedColors[name]; return color === undefined && !asIs ? this.defaultNamedColor : color; } } -external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].assign(Palette.prototype, { +__WEBPACK_EXTERNAL_MODULE_lodash_default__.assign(Palette.prototype, { colors: [0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0x808080], minRangeColor: 0x000000, midRangeColor: 0x7F7F7F, @@ -19782,8 +19820,6 @@ external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespac ['indianred', 0xcd5c5c], ['lightcoral', 0xf08080], ['salmon', 0xfa8072], ['darksalmon', 0xe9967a], ['lightsalmon', 0xffa07a], ['crimson', 0xdc143c], ['red', 0xff0000], ['firebrick', 0xb22222], ['darkred', 0x8b0000], ['pink', 0xffc0cb], ['lightpink', 0xffb6c1], ['hotpink', 0xff69b4], ['deeppink', 0xff1493], ['mediumvioletred', 0xc71585], ['palevioletred', 0xdb7093], ['coral', 0xff7f50], ['tomato', 0xff6347], ['orangered', 0xff4500], ['darkorange', 0xff8c00], ['orange', 0xffa500], ['gold', 0xffd700], ['yellow', 0xffff00], ['lightyellow', 0xffffe0], ['lemonchiffon', 0xfffacd], ['lightgoldenrodyellow', 0xfafad2], ['papayawhip', 0xffefd5], ['moccasin', 0xffe4b5], ['peachpuff', 0xffdab9], ['palegoldenrod', 0xeee8aa], ['khaki', 0xf0e68c], ['darkkhaki', 0xbdb76b], ['lavender', 0xe6e6fa], ['thistle', 0xd8bfd8], ['plum', 0xdda0dd], ['violet', 0xee82ee], ['orchid', 0xda70d6], ['fuchsia', 0xff00ff], ['magenta', 0xff00ff], ['mediumorchid', 0xba55d3], ['mediumpurple', 0x9370db], ['rebeccapurple', 0x663399], ['blueviolet', 0x8a2be2], ['darkviolet', 0x9400d3], ['darkorchid', 0x9932cc], ['darkmagenta', 0x8b008b], ['purple', 0x800080], ['indigo', 0x4b0082], ['slateblue', 0x6a5acd], ['mediumslateblue', 0x7b68ee], ['darkslateblue', 0x483d8b], ['greenyellow', 0xadff2f], ['chartreuse', 0x7fff00], ['lawngreen', 0x7cfc00], ['lime', 0x00ff00], ['limegreen', 0x32cd32], ['palegreen', 0x98fb98], ['lightgreen', 0x90ee90], ['mediumspringgreen', 0x00fa9a], ['springgreen', 0x00ff7f], ['mediumseagreen', 0x3cb371], ['seagreen', 0x2e8b57], ['forestgreen', 0x228b22], ['green', 0x008000], ['darkgreen', 0x006400], ['yellowgreen', 0x9acd32], ['olivedrab', 0x6b8e23], ['olive', 0x808000], ['darkolivegreen', 0x556b2f], ['mediumaquamarine', 0x66cdaa], ['darkseagreen', 0x8fbc8f], ['lightseagreen', 0x20b2aa], ['darkcyan', 0x008b8b], ['teal', 0x008080], ['aqua', 0x00ffff], ['cyan', 0x00ffff], ['lightcyan', 0xe0ffff], ['paleturquoise', 0xafeeee], ['aquamarine', 0x7fffd4], ['turquoise', 0x40e0d0], ['mediumturquoise', 0x48d1cc], ['darkturquoise', 0x00ced1], ['cadetblue', 0x5f9ea0], ['steelblue', 0x4682b4], ['lightsteelblue', 0xb0c4de], ['powderblue', 0xb0e0e6], ['lightblue', 0xadd8e6], ['skyblue', 0x87ceeb], ['lightskyblue', 0x87cefa], ['deepskyblue', 0x00bfff], ['dodgerblue', 0x1e90ff], ['cornflowerblue', 0x6495ed], ['royalblue', 0x4169e1], ['blue', 0x0000ff], ['mediumblue', 0x0000cd], ['darkblue', 0x00008b], ['navy', 0x000080], ['midnightblue', 0x191970], ['cornsilk', 0xfff8dc], ['blanchedalmond', 0xffebcd], ['bisque', 0xffe4c4], ['navajowhite', 0xffdead], ['wheat', 0xf5deb3], ['burlywood', 0xdeb887], ['tan', 0xd2b48c], ['rosybrown', 0xbc8f8f], ['sandybrown', 0xf4a460], ['goldenrod', 0xdaa520], ['darkgoldenrod', 0xb8860b], ['peru', 0xcd853f], ['chocolate', 0xd2691e], ['saddlebrown', 0x8b4513], ['sienna', 0xa0522d], ['brown', 0xa52a2a], ['maroon', 0x800000], ['white', 0xffffff], ['snow', 0xfffafa], ['honeydew', 0xf0fff0], ['mintcream', 0xf5fffa], ['azure', 0xf0ffff], ['aliceblue', 0xf0f8ff], ['ghostwhite', 0xf8f8ff], ['whitesmoke', 0xf5f5f5], ['seashell', 0xfff5ee], ['beige', 0xf5f5dc], ['oldlace', 0xfdf5e6], ['floralwhite', 0xfffaf0], ['ivory', 0xfffff0], ['antiquewhite', 0xfaebd7], ['linen', 0xfaf0e6], ['lavenderblush', 0xfff0f5], ['mistyrose', 0xffe4e1], ['gainsboro', 0xdcdcdc], ['lightgray', 0xd3d3d3], ['silver', 0xc0c0c0], ['darkgray', 0xa9a9a9], ['gray', 0x808080], ['dimgray', 0x696969], ['lightslategray', 0x778899], ['slategray', 0x708090], ['darkslategray', 0x2f4f4f], ['black', 0x000000] /* eslint-enable no-multi-spaces */], namedColors: {}, - /* eslint-enable no-magic-numbers */ - gradients: { rainbow: [0x0000ff, // blue @@ -19844,13 +19880,12 @@ for (let i = 0, { namedColors[name] = value; } /* harmony default export */ const palettes_Palette = (Palette); -;// CONCATENATED MODULE: ./src/gfx/palettes/cpkPalette.js +;// ./src/gfx/palettes/cpkPalette.js const palette = new palettes_Palette('CPK', 'CP'); // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py. palette.elementColors = { - /* eslint-disable no-magic-numbers */ H: 0xFFFFFF, C: 0x202020, N: 0x2060FF, @@ -19865,15 +19900,13 @@ palette.elementColors = { CU: 0xD0D0D0, BR: 0x008800, I: 0x005500 - /* eslint-enable no-magic-numbers */ }; /* harmony default export */ const cpkPalette = (palette); -;// CONCATENATED MODULE: ./src/gfx/palettes/jmolPalette.js +;// ./src/gfx/palettes/jmolPalette.js const jmolPalette_palette = new palettes_Palette('Jmol', 'JM'); -jmolPalette_palette.colors = [/* eslint-disable no-magic-numbers */ -0x0000FF, +jmolPalette_palette.colors = [0x0000FF, // blue 0x0055FF, // @@ -19908,11 +19941,10 @@ jmolPalette_palette.colors = [/* eslint-disable no-magic-numbers */ 0xAB00FF, // 0x5500FF // -/* eslint-enable no-magic-numbers */]; +]; // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py. jmolPalette_palette.elementColors = { - /* eslint-disable no-magic-numbers */ H: 0xFFFFFF, D: 0xFFFFC0, T: 0xFFFFA0, @@ -20024,13 +20056,11 @@ jmolPalette_palette.elementColors = { BH: 0xE00038, HS: 0xE6002E, MT: 0xEB0026 - /* eslint-enable no-magic-numbers */ }; jmolPalette_palette.defaultResidueColor = 0xBEA06E; // DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py. jmolPalette_palette.residueColors = { - /* eslint-disable no-magic-numbers */ ALA: 0xC8C8C8, ARG: 0x145AFF, ASN: 0x00DCDC, @@ -20069,7 +20099,6 @@ jmolPalette_palette.residueColors = { '+I': 0x80FFFF, '+T': 0xA0FFA0, '+U': 0xFF8080 - /* eslint-enable no-magic-numbers */ }; jmolPalette_palette.chainColors = [ // ' '->0 'A'->1, 'B'->2 @@ -20141,12 +20170,11 @@ jmolPalette_palette.secondaryColors = { rna: 0xFD0162 }; /* harmony default export */ const jmolPalette = (jmolPalette_palette); -;// CONCATENATED MODULE: ./src/gfx/palettes/vmdPalette.js +;// ./src/gfx/palettes/vmdPalette.js const vmdPalette_palette = new palettes_Palette('VMD', 'VM'); -vmdPalette_palette.colors = [/* eslint-disable no-magic-numbers */ -0x0000FF, +vmdPalette_palette.colors = [0x0000FF, // blue 0xFF0000, // red @@ -20177,25 +20205,22 @@ vmdPalette_palette.colors = [/* eslint-disable no-magic-numbers */ 0x804D00, // ochre 0x8080C0 // ice blue -/* eslint-enable no-magic-numbers */]; +]; vmdPalette_palette.defaultElementColor = 0x804D00; // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py. vmdPalette_palette.elementColors = { - /* eslint-disable no-magic-numbers */ H: 0xFFFFFF, C: 0x40BFBF, N: 0x0000FF, O: 0xFF0000, P: 0x808033, S: 0xFFFF00 - /* eslint-enable no-magic-numbers */ }; vmdPalette_palette.defaultResidueColor = 0x40C0C0; // DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py. vmdPalette_palette.residueColors = { - /* eslint-disable no-magic-numbers */ ALA: 0x0000FF, ARG: 0xFFFFFF, ASN: 0x808033, @@ -20234,7 +20259,6 @@ vmdPalette_palette.residueColors = { WAT: 0x40C0C0, H2O: 0x40C0C0, HOH: 0x40C0C0 - /* eslint-enable no-magic-numbers */ }; vmdPalette_palette.chainColors = [0xFFFFFF].concat(vmdPalette_palette.colors); const vmdPalette_StructuralElementType = chem_StructuralElement.Type; @@ -20247,14 +20271,14 @@ vmdPalette_palette.secondaryColors = { [vmdPalette_StructuralElementType.TURN]: 0x40C0C0 }; /* harmony default export */ const vmdPalette = (vmdPalette_palette); -;// CONCATENATED MODULE: ./src/gfx/palettes.js +;// ./src/gfx/palettes.js const palettes = new utils_EntityList([cpkPalette, jmolPalette, vmdPalette]); /* harmony default export */ const gfx_palettes = (palettes); -;// CONCATENATED MODULE: ./src/gfx/colorers/Colorer.js +;// ./src/gfx/colorers/Colorer.js @@ -20283,7 +20307,7 @@ class Colorer { * Colorer options inherited (prototyped) from defaults. * @type {object} */ - this.opts = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].merge(utils.deriveDeep(settings.now.colorers[this.id], true), opts); + this.opts = __WEBPACK_EXTERNAL_MODULE_lodash_default__.merge(utils.deriveDeep(settings.now.colorers[this.id], true), opts); /** * Palette in use. * @type {Palette} @@ -20299,7 +20323,7 @@ class Colorer { */ identify() { const diff = utils.objectsDiff(this.opts, settings.now.colorers[this.id]); - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEmpty(diff)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isEmpty(diff)) { return [this.id, diff]; } return this.id; @@ -20313,7 +20337,7 @@ class Colorer { Colorer.prototype.id = '__'; /* harmony default export */ const colorers_Colorer = (Colorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/ElementColorer.js +;// ./src/gfx/colorers/ElementColorer.js /** @@ -20345,7 +20369,7 @@ ElementColorer.prototype.id = 'EL'; ElementColorer.prototype.name = 'Element'; ElementColorer.prototype.shortName = 'Element'; /* harmony default export */ const colorers_ElementColorer = (ElementColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/ResidueTypeColorer.js +;// ./src/gfx/colorers/ResidueTypeColorer.js /** @@ -20369,7 +20393,7 @@ ResidueTypeColorer.prototype.id = 'RT'; ResidueTypeColorer.prototype.name = 'Residue Type'; ResidueTypeColorer.prototype.shortName = 'Residue'; /* harmony default export */ const colorers_ResidueTypeColorer = (ResidueTypeColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/SequenceColorer.js +;// ./src/gfx/colorers/SequenceColorer.js class SequenceColorer extends colorers_Colorer { static id = 'SQ'; @@ -20390,7 +20414,7 @@ SequenceColorer.prototype.id = 'SQ'; SequenceColorer.prototype.name = 'Sequence'; SequenceColorer.prototype.shortName = 'Sequence'; /* harmony default export */ const colorers_SequenceColorer = (SequenceColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/ChainColorer.js +;// ./src/gfx/colorers/ChainColorer.js class ChainColorer extends colorers_Colorer { static id = 'CH'; @@ -20405,7 +20429,7 @@ ChainColorer.prototype.id = 'CH'; ChainColorer.prototype.name = 'Chain'; ChainColorer.prototype.shortName = 'Chain'; /* harmony default export */ const colorers_ChainColorer = (ChainColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/SecondaryStructureColorer.js +;// ./src/gfx/colorers/SecondaryStructureColorer.js class SecondaryStructureColorer extends colorers_Colorer { @@ -20435,7 +20459,7 @@ SecondaryStructureColorer.prototype.id = 'SS'; SecondaryStructureColorer.prototype.name = 'Secondary Structure'; SecondaryStructureColorer.prototype.shortName = 'Structure'; /* harmony default export */ const colorers_SecondaryStructureColorer = (SecondaryStructureColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/UniformColorer.js +;// ./src/gfx/colorers/UniformColorer.js class UniformColorer extends colorers_Colorer { static id = 'UN'; @@ -20450,7 +20474,7 @@ UniformColorer.prototype.id = 'UN'; UniformColorer.prototype.name = 'Uniform'; UniformColorer.prototype.shortName = 'Uniform'; /* harmony default export */ const colorers_UniformColorer = (UniformColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/ConditionalColorer.js +;// ./src/gfx/colorers/ConditionalColorer.js @@ -20489,7 +20513,7 @@ ConditionalColorer.prototype.id = 'CO'; ConditionalColorer.prototype.name = 'Conditional'; ConditionalColorer.prototype.shortName = 'Conditional'; /* harmony default export */ const colorers_ConditionalColorer = (ConditionalColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/ConformationColorer.js +;// ./src/gfx/colorers/ConformationColorer.js class ConformationColorer extends colorers_Colorer { static id = 'CF'; @@ -20504,7 +20528,7 @@ ConformationColorer.prototype.id = 'CF'; ConformationColorer.prototype.name = 'Conformation'; ConformationColorer.prototype.shortName = 'Conformation'; /* harmony default export */ const colorers_ConformationColorer = (ConformationColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/TemperatureColorer.js +;// ./src/gfx/colorers/TemperatureColorer.js /** @@ -20559,7 +20583,7 @@ TemperatureColorer.prototype.id = 'TM'; // [T]e[M]perature TemperatureColorer.prototype.name = 'Temperature'; TemperatureColorer.prototype.shortName = 'Temperature'; /* harmony default export */ const colorers_TemperatureColorer = (TemperatureColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/OccupancyColorer.js +;// ./src/gfx/colorers/OccupancyColorer.js /** @@ -20600,7 +20624,7 @@ OccupancyColorer.prototype.id = 'OC'; // [OC]cupancy OccupancyColorer.prototype.name = 'Occupancy'; OccupancyColorer.prototype.shortName = 'Occupancy'; /* harmony default export */ const colorers_OccupancyColorer = (OccupancyColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/HydrophobicityColorer.js +;// ./src/gfx/colorers/HydrophobicityColorer.js class HydrophobicityColorer extends colorers_Colorer { static id = 'HY'; @@ -20622,7 +20646,7 @@ HydrophobicityColorer.prototype.id = 'HY'; HydrophobicityColorer.prototype.name = 'Hydrophobicity'; HydrophobicityColorer.prototype.shortName = 'Hydrophobicity'; /* harmony default export */ const colorers_HydrophobicityColorer = (HydrophobicityColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/MoleculeColorer.js +;// ./src/gfx/colorers/MoleculeColorer.js class MoleculeColorer extends colorers_Colorer { static id = 'MO'; @@ -20642,7 +20666,7 @@ MoleculeColorer.prototype.id = 'MO'; MoleculeColorer.prototype.name = 'Molecule'; MoleculeColorer.prototype.shortName = 'Molecule'; /* harmony default export */ const colorers_MoleculeColorer = (MoleculeColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers/CarbonColorer.js +;// ./src/gfx/colorers/CarbonColorer.js function scaleColor(c, factor) { @@ -20680,7 +20704,7 @@ CarbonColorer.prototype.id = 'CB'; CarbonColorer.prototype.name = 'Carbon'; CarbonColorer.prototype.shortName = 'Carbon'; /* harmony default export */ const colorers_CarbonColorer = (CarbonColorer); -;// CONCATENATED MODULE: ./src/gfx/colorers.js +;// ./src/gfx/colorers.js @@ -20697,7 +20721,7 @@ CarbonColorer.prototype.shortName = 'Carbon'; const colorers = new utils_EntityList([colorers_ElementColorer, colorers_ResidueTypeColorer, colorers_SequenceColorer, colorers_ChainColorer, colorers_SecondaryStructureColorer, colorers_UniformColorer, colorers_ConditionalColorer, colorers_ConformationColorer, colorers_TemperatureColorer, colorers_OccupancyColorer, colorers_HydrophobicityColorer, colorers_MoleculeColorer, colorers_CarbonColorer]); /* harmony default export */ const gfx_colorers = (colorers); -;// CONCATENATED MODULE: ./src/gfx/materials.js +;// ./src/gfx/materials.js function neutralColor(intensity) { @@ -20858,7 +20882,7 @@ const materialList = [{ }]; const materials = new utils_EntityList(materialList); /* harmony default export */ const gfx_materials = (materials); -;// CONCATENATED MODULE: ./src/gfx/meshutils.js +;// ./src/gfx/meshutils.js /** * Utils functions which is worked with meshes * @@ -21060,7 +21084,7 @@ function countTriangles(group) { forEachMeshInGroup, countTriangles }); -;// CONCATENATED MODULE: ./src/gfx/Representation.js +;// ./src/gfx/Representation.js @@ -21205,7 +21229,7 @@ class Representation { // modify mode if (repSettings.mode) { const newMode = repSettings.mode; - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEqual(this.mode.identify(), newMode)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isEqual(this.mode.identify(), newMode)) { diff.mode = newMode; this.setMode(mode); } @@ -21214,7 +21238,7 @@ class Representation { // modify colorer if (repSettings.colorer) { const newColorer = repSettings.colorer; - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEqual(this.colorer.identify(), newColorer)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isEqual(this.colorer.identify(), newColorer)) { diff.colorer = newColorer; this.colorer = color; } @@ -21223,7 +21247,7 @@ class Representation { // modify material if (repSettings.material) { const newMaterial = repSettings.material; - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEqual(this.materialPreset.id, newMaterial)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isEqual(this.materialPreset.id, newMaterial)) { diff.material = newMaterial; this.setMaterialPreset(gfx_materials.get(repSettings.material)); } @@ -21241,7 +21265,7 @@ class Representation { } } /* harmony default export */ const gfx_Representation = (Representation); -;// CONCATENATED MODULE: ./src/ComplexVisualEdit.js +;// ./src/ComplexVisualEdit.js @@ -21561,7 +21585,7 @@ class ComplexFragmentEditor extends ComplexEditor { ComponentEditor: ComplexComponentEditor, FragmentEditor: ComplexFragmentEditor }); -;// CONCATENATED MODULE: ./src/ComplexVisual.js +;// ./src/ComplexVisual.js @@ -21748,7 +21772,7 @@ class ComplexVisual extends src_Visual { const diff = target.change(rep, this._complex, lookupAndCreate(gfx_modes, rep.mode), lookupAndCreate(gfx_colorers, rep.colorer)); // something was changed - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEmpty(diff)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isEmpty(diff)) { target.needsRebuild = true; for (const key in diff) { if (diff.hasOwnProperty(key)) { @@ -21820,7 +21844,7 @@ class ComplexVisual extends src_Visual { // Fill in default values const def = settings.now.presets.default[0]; - const desc = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].merge({ + const desc = __WEBPACK_EXTERNAL_MODULE_lodash_default__.merge({ selector: def.selector, mode: def.mode, colorer: def.colorer, @@ -22159,7 +22183,8 @@ class ComplexVisual extends src_Visual { throw e; } } - if (false) {} + if (false) // removed by dead control flow +{} } hasGeometry = errorOccured || hasGeometry || gfxutils.groupHasGeometryToRender(repr.geo); if (repr.geo) { @@ -22317,9 +22342,7 @@ class ComplexVisual extends src_Visual { finalizeEdit() { this._editor = null; } - setMaterialValues(values) { - let needTraverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - let process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; + setMaterialValues(values, needTraverse = false, process = undefined) { for (let i = 0, n = this._reprList.length; i < n; ++i) { const rep = this._reprList[i]; rep.material.setValues(values); @@ -22377,21 +22400,19 @@ class ComplexVisual extends src_Visual { // 32 bits = 30 bits for reps + 1 for selection + 1 for selection expansion ComplexVisual.NUM_REPRESENTATION_BITS = 30; /* harmony default export */ const src_ComplexVisual = (ComplexVisual); -;// CONCATENATED MODULE: ./src/gfx/shaders/VolumeFaces.vert -const VolumeFaces_namespaceObject = "varying vec3 pos;\r\n\r\nvoid main() {\r\n // we're assuming local position is in [-0.5, 0.5]\r\n // we need to offset it to be represented in RGB\r\n pos = position.xyz + 0.5;\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n}"; -;// CONCATENATED MODULE: ./src/gfx/shaders/VolumeFaces.frag -const gfx_shaders_VolumeFaces_namespaceObject = "varying vec3 pos;\r\n\r\nvoid main() {\r\n gl_FragColor = vec4(pos, 0.5);\r\n}"; -;// CONCATENATED MODULE: ./src/gfx/shaders/Volume.vert -const shaders_Volume_namespaceObject = "varying vec4 screenSpacePos;\r\n\r\nvoid main() {\r\n screenSpacePos = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n gl_Position = screenSpacePos;\r\n}"; -;// CONCATENATED MODULE: ./src/gfx/shaders/Volume.frag -const src_gfx_shaders_Volume_namespaceObject = "uniform mat4 projectionMatrix;\r\n\r\n// 3D volume texture\r\nuniform vec3 volumeDim; // volume dimensions, pixels\r\nuniform sampler2D tileTex; // tiled texture containing all Z-slices of a 3D data\r\nuniform vec2 tileTexSize; // size of tiled texture, pixels\r\nuniform vec2 tileStride; // UV stride between slices in tile tex, pixels\r\n\r\nuniform vec3 boxAngles;//value of angles({x: alpha, y:beta, z:gamma}) types 1 - if angle is obtuse, 0 - if acute\r\nuniform vec3 delta; //Projection box delta's from non-orthogonal origin axes; {x: XY, y : XZ, z: YZ}\r\n\r\nuniform vec3 _isoLevel0;\r\nuniform float _flipV;\r\nuniform sampler2D _BFLeft;\r\nuniform sampler2D _BFRight;\r\nuniform sampler2D _FFLeft;\r\nuniform sampler2D _FFRight;\r\nuniform sampler2D _WFFLeft;\r\nuniform sampler2D _WFFRight;\r\n\r\nvarying vec4 screenSpacePos;\r\n\r\n#define NO_COLOR vec4(0., 0., 0., 0.)\r\n\r\nvec4 sample3DTexture(vec3 texCoord) {\r\n // a pair of Z slices is determined by nearest slice border\r\n float zSliceBorder = floor(texCoord.z * volumeDim.z + 0.5);\r\n float zSliceNumber1 = max(zSliceBorder - 1.0, 0.0);\r\n float zSliceNumber2 = min(zSliceBorder, volumeDim.z - 1.0);\r\n\r\n float rowTiles = floor(tileTexSize.x / tileStride.x);\r\n\r\n // calculate coords in tile texture for both slices\r\n vec2 tileOffset = vec2(mod(zSliceNumber1, rowTiles), floor(zSliceNumber1 / rowTiles));\r\n vec2 texCoordSlice1 = (texCoord.xy * volumeDim.xy + tileOffset * tileStride) / tileTexSize.xy;\r\n tileOffset = vec2(mod(zSliceNumber2, rowTiles), floor(zSliceNumber2 / rowTiles));\r\n vec2 texCoordSlice2 = (texCoord.xy * volumeDim.xy + tileOffset * tileStride) / tileTexSize.xy;\r\n\r\n // bilinear filtering\r\n vec4 colorSlice1 = texture2D(tileTex, texCoordSlice1);\r\n vec4 colorSlice2 = texture2D(tileTex, texCoordSlice2);\r\n float weightSlice2 = texCoord.z * volumeDim.z - (zSliceNumber1 + 0.5);\r\n return mix(colorSlice1, colorSlice2, weightSlice2);\r\n}\r\n\r\nvec4 sample3DTextureInclined(vec3 boxCoord) { // delta:{ x: XY, y : XZ, z: YZ }\r\n vec3 textCoord = boxCoord;\r\n vec2 currDelta = mix(boxCoord.zz, vec2(1., 1.) - boxCoord.zz, boxAngles.yx) * delta.yz;\r\n\r\n textCoord.y = (boxCoord.y - currDelta.y) / (1. - delta.z);\r\n if (textCoord.y < 0.0 || textCoord.y > 1.0)\r\n return NO_COLOR;\r\n\r\n currDelta.x += mix(textCoord.y, 1.0 - textCoord.y, boxAngles.z) * delta.x;\r\n\r\n textCoord.x = (boxCoord.x - currDelta.x) / (1. - delta.x - delta.y);\r\n if (textCoord.x < 0.0 || textCoord.x > 1.0)\r\n return NO_COLOR;\r\n\r\n return sample3DTexture(textCoord);\r\n}\r\n\r\nfloat CalcColor(vec3 iter, vec3 dir) {\r\n float d = 1. / 128.;\r\n vec3 dx = vec3(d, 0.0, 0.0);\r\n vec3 dy = vec3(0.0, d, 0.0);\r\n vec3 dz = vec3(0.0, 0.0, d);\r\n\r\n // #Opt: coordInc.x:(iter + dx).x > 1. ? 0.: sample3DTextureInclined(iter + dx).x,\r\n vec3 coordInc = mix(\r\n vec3(\r\n sample3DTextureInclined(iter + dx).x,\r\n sample3DTextureInclined(iter + dy).x,\r\n sample3DTextureInclined(iter + dz).x\r\n ),\r\n vec3(0. ,0. , 0.),\r\n vec3(floor((iter + dx).x), floor((iter + dy).y), floor((iter + dz).z))\r\n );\r\n\r\n // #Opt: coordDec.x:(iter - dx).x < 0. ? 0.: sample3DTextureInclined(iter - dx).x,\r\n vec3 coordDec = mix(\r\n vec3(0. ,0. , 0.),\r\n vec3(\r\n sample3DTextureInclined(iter - dx).x,\r\n sample3DTextureInclined(iter - dy).x,\r\n sample3DTextureInclined(iter - dz).x\r\n ),\r\n vec3(ceil((iter - dx).x), ceil((iter - dy).y), ceil((iter - dz).z))\r\n );\r\n\r\n vec3 N = normalize(coordInc - coordDec);\r\n float dif = max(0.0, dot(N, dir));\r\n return dif;\r\n}\r\n\r\nvec3 AccuracyIso(vec3 left, vec3 right, float volLeft, float threshold) {\r\n for (int i = 0; i < 5; i++) {\r\n vec3 iterator = 0.5 * (left + right);\r\n float vol = sample3DTextureInclined(iterator).r;\r\n if ((volLeft - threshold) * (vol - threshold) < 0.)\r\n right = iterator;\r\n else\r\n left = iterator;\r\n }\r\n return 0.5 * (left + right);\r\n}\r\n\r\nvec3 CorrectIso(vec3 left, vec3 right, float tr) {\r\n for (int j = 0; j < 5; j++) {\r\n vec3 iterator = 0.5 * (left + right);\r\n float vol = sample3DTextureInclined(iterator).r;\r\n if (vol < tr)\r\n right = iterator;\r\n else\r\n left = iterator;\r\n }\r\n return 0.5 * (left + right);\r\n}\r\n\r\nvec4 GetIso1(vec3 start, vec3 back, float molDist, vec3 dir, float tr, int count) {\r\n float vol, stepSize = (float(count) + 2.) / float(STEPS_COUNT);\r\n vec3 step = stepSize * dir, iterator = start, left, right;\r\n vec4 acc = NO_COLOR;\r\n\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n iterator = iterator + step;\r\n vol = sample3DTextureInclined(iterator).r;\r\n if (length(iterator - back) <= stepSize || (vol > tr))\r\n break;\r\n }\r\n\r\n if (vol > tr)\r\n acc = vec4(CorrectIso(iterator, iterator - step, tr).xyz, 1.);\r\n\r\n return acc;\r\n}\r\n\r\nfloat easeOut(float x0, float x1, float x) {\r\n float t = clamp((x - x0) / (x1 - x0), 0.0, 1.0);\r\n return 1.0 - (1.0 - t) * (1.0 - t);\r\n}\r\n\r\nfloat easeIn(float x0, float x1, float x) {\r\n float t = clamp((x - x0) / (x1 - x0), 0.0, 1.0);\r\n return t * t;\r\n}\r\n\r\nvec3 GetColSimple(float vol) {\r\n float t = easeOut(_isoLevel0.x, _isoLevel0.y, vol);\r\n float s = easeIn(_isoLevel0.y, _isoLevel0.z, vol);\r\n return vec3(0.5, 0.6, 0.7) * (1.0 - t) + 2.0 * vec3(s, 0, 0);\r\n}\r\n\r\nvec4 VolRender(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n vec4 acc = NO_COLOR, iso;\r\n vec3 iterator = start, sumColor = vec3(0., 0., 0.);\r\n float stepSize, alpha, sumAlpha = 0.0, vol, curStepSize, molD;\r\n vec3 step, col, colOld, right;\r\n float tr0 = _isoLevel0.x;\r\n float dif, r, kd, finish;\r\n int count = 0, stopMol = 0;\r\n\r\n for (int k = 0; k < 3; k++) {\r\n stepSize = (float(k) + 2.) / float(STEPS_COUNT);\r\n kd = 140. * tr0 * stepSize;\r\n r = 1. - kd;\r\n step = stepSize * dir;\r\n iso = GetIso1(iterator, back, molDist, dir, tr0, k);\r\n if (iso.a < 0.1 || length(iso.xyz - start) > molDist)\r\n break;\r\n iterator = iso.xyz;\r\n dif = 1.;// CalcColor(iterator, dir);\r\n colOld = GetColSimple(tr0);\r\n curStepSize = stepSize;\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n iterator = iterator + step;\r\n molD = length(iterator - start);\r\n vol = sample3DTextureInclined(iterator).r;\r\n finish = distance(iterator, back) - stepSize;\r\n if (finish < 0.0 || vol < tr0 || (sumAlpha > 0.97) || molD > molDist)\r\n break;\r\n alpha = (1. - r);\r\n col = GetColSimple(vol);\r\n vol = sample3DTextureInclined(iterator - 0.5 * step).r;\r\n vec3 colMid = GetColSimple(vol);\r\n sumColor += (1. - sumAlpha) * (colOld + 4.* colMid + col) * alpha / 6.;\r\n sumAlpha += (1. - sumAlpha) * alpha;// *(1. - 1.0*dif*dif);\r\n colOld = col;\r\n } // for i\r\n\r\n if (finish < 0.0 || sumAlpha > 0.97)\r\n break;\r\n\r\n if (molD > molDist) {\r\n curStepSize = stepSize - (molD - molDist);\r\n right = iterator - (molD - molDist) * dir;\r\n vol = sample3DTextureInclined(right).r;\r\n } else {\r\n vec3 left = iterator - step;\r\n right = CorrectIso(left, iterator, tr0);\r\n curStepSize = distance(left, right);\r\n vol = tr0;\r\n }\r\n\r\n alpha = (1. - r) * curStepSize / stepSize;\r\n dif = 1.;// CalcColor(right, dir);\r\n col = GetColSimple(vol);\r\n vol = sample3DTextureInclined(iterator - 0.5 * curStepSize / stepSize * step).r;\r\n vec3 colMid = GetColSimple(vol);\r\n sumColor += (1. - sumAlpha) * (colOld + 4. * colMid + col) * alpha / 6.;\r\n sumAlpha += (1. - sumAlpha) * alpha;// *(1. - 1.0*dif*dif);\r\n\r\n if (molD > molDist)\r\n break;\r\n } // for k\r\n acc.rgb = 1. * sumColor / sumAlpha;\r\n acc.a = sumAlpha;\r\n return acc;\r\n}\r\n\r\nvec4 VolRender1(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n float stepSize = 1.0 / float(STEPS_COUNT);\r\n float len = length(back - start);\r\n vec3 step = stepSize * dir;\r\n vec3 iterator = start;\r\n float acc = 0.0;\r\n\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n if (float(i) * stepSize > len)\r\n break;\r\n iterator = iterator + step;\r\n if (sample3DTextureInclined(iterator).r > _isoLevel0.x)\r\n acc += 10. * sample3DTextureInclined(iterator).r / float(STEPS_COUNT);\r\n }\r\n\r\n return vec4(1.,1.,1., acc);\r\n}\r\n\r\nvec4 IsoRender(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n vec4 tst = GetIso1(start, back, 2., dir, _isoLevel0.x, 0);\r\n vec4 col = NO_COLOR;\r\n\r\n if (length(tst.xyz - start) < molDist && tst.a > 0.1) {\r\n float dif = CalcColor(tst.xyz, dir);\r\n dif = 0.9 * dif * dif;\r\n col = vec4(dif, dif, dif, 1);\r\n }\r\n return col;\r\n}\r\n\r\nvec4 VolRender2(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n return sample3DTexture(start);\r\n}\r\n\r\nvoid main() {\r\n vec3 tc = screenSpacePos.xyz / screenSpacePos.w * 0.5 + 0.5;\r\n\r\n if (_flipV > 0.0) {\r\n tc.y = 1.0 - tc.y;\r\n }\r\n\r\n vec3 start;\r\n vec3 back;\r\n vec3 molBack;\r\n if (projectionMatrix[0][2] < 0.0) {\r\n start = texture2D(_FFLeft, tc.xy).xyz;\r\n back = texture2D(_BFLeft, tc.xy).xyz;\r\n molBack = texture2D(_WFFLeft, tc.xy).xyz;\r\n } else {\r\n start = texture2D(_FFRight, tc.xy).xyz;\r\n back = texture2D(_BFRight, tc.xy).xyz;\r\n molBack = texture2D(_WFFRight, tc.xy).xyz;\r\n }\r\n\r\n vec3 dir = normalize(back - start);\r\n\r\n float molDist = 2.0;\r\n if (length(molBack) > 0.001) {\r\n molDist = distance(start, molBack);\r\n }\r\n\r\n #ifdef ISO_MODE\r\n gl_FragColor = IsoRender(start, back, molDist, dir);\r\n #else\r\n gl_FragColor = VolRender(start, back, molDist, dir);\r\n #endif\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/VolumeFarPlane.vert -const VolumeFarPlane_namespaceObject = "varying vec4 volPos;\r\nuniform float aspectRatio;\r\nuniform float farZ;\r\nuniform float tanHalfFOV;\r\nuniform mat4 matWorld2Volume;\r\n\r\nvoid main() {\r\n // rescale plane to fill in the whole far plane area seen from camera\r\n vec3 pos = position.xyz;\r\n pos.x = pos.x * tanHalfFOV * farZ * aspectRatio;\r\n pos.y = pos.y * tanHalfFOV * farZ;\r\n // common transformation\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);\r\n // calc pos in volume CS\r\n volPos = matWorld2Volume * modelMatrix * vec4(pos, 1.0);\r\n // we're assuming local position is in [-0.5, 0.5]\r\n // we need to offset it to be represented in RGB\r\n volPos = volPos + 0.5;\r\n volPos.w = 0.5;\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/VolumeFarPlane.frag -const gfx_shaders_VolumeFarPlane_namespaceObject = "varying vec4 volPos;\r\n\r\nvoid main() {\r\n gl_FragColor = volPos;\r\n}"; -;// CONCATENATED MODULE: ./src/gfx/shaders/VolumeMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/VolumeFaces.vert +const VolumeFaces_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec3 pos;\r\n\r\nvoid main() {\r\n // we're assuming local position is in [-0.5, 0.5]\r\n // we need to offset it to be represented in RGB\r\n pos = position.xyz + 0.5;\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n}"; +;// ./src/gfx/shaders/VolumeFaces.frag +const gfx_shaders_VolumeFaces_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec3 pos;\r\n\r\nvoid main() {\r\n gl_FragColor = vec4(pos, 0.5);\r\n}"; +;// ./src/gfx/shaders/Volume.vert +const shaders_Volume_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec4 screenSpacePos;\r\n\r\nvoid main() {\r\n screenSpacePos = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n gl_Position = screenSpacePos;\r\n}"; +;// ./src/gfx/shaders/Volume.frag +const src_gfx_shaders_Volume_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nuniform mat4 projectionMatrix;\r\n\r\n// 3D volume texture\r\nuniform vec3 volumeDim; // volume dimensions, pixels\r\nuniform sampler2D tileTex; // tiled texture containing all Z-slices of a 3D data\r\nuniform vec2 tileTexSize; // size of tiled texture, pixels\r\nuniform vec2 tileStride; // UV stride between slices in tile tex, pixels\r\n\r\nuniform vec3 boxAngles;//value of angles({x: alpha, y:beta, z:gamma}) types 1 - if angle is obtuse, 0 - if acute\r\nuniform vec3 delta; //Projection box delta's from non-orthogonal origin axes; {x: XY, y : XZ, z: YZ}\r\n\r\nuniform vec3 _isoLevel0;\r\nuniform float _flipV;\r\nuniform sampler2D _BFLeft;\r\nuniform sampler2D _BFRight;\r\nuniform sampler2D _FFLeft;\r\nuniform sampler2D _FFRight;\r\nuniform sampler2D _WFFLeft;\r\nuniform sampler2D _WFFRight;\r\n\r\nvarying vec4 screenSpacePos;\r\n\r\n#define NO_COLOR vec4(0., 0., 0., 0.)\r\n\r\nvec4 sample3DTexture(vec3 texCoord) {\r\n // a pair of Z slices is determined by nearest slice border\r\n float zSliceBorder = floor(texCoord.z * volumeDim.z + 0.5);\r\n float zSliceNumber1 = max(zSliceBorder - 1.0, 0.0);\r\n float zSliceNumber2 = min(zSliceBorder, volumeDim.z - 1.0);\r\n\r\n float rowTiles = floor(tileTexSize.x / tileStride.x);\r\n\r\n // calculate coords in tile texture for both slices\r\n vec2 tileOffset = vec2(mod(zSliceNumber1, rowTiles), floor(zSliceNumber1 / rowTiles));\r\n vec2 texCoordSlice1 = (texCoord.xy * volumeDim.xy + tileOffset * tileStride) / tileTexSize.xy;\r\n tileOffset = vec2(mod(zSliceNumber2, rowTiles), floor(zSliceNumber2 / rowTiles));\r\n vec2 texCoordSlice2 = (texCoord.xy * volumeDim.xy + tileOffset * tileStride) / tileTexSize.xy;\r\n\r\n // bilinear filtering\r\n vec4 colorSlice1 = texture2D(tileTex, texCoordSlice1);\r\n vec4 colorSlice2 = texture2D(tileTex, texCoordSlice2);\r\n float weightSlice2 = texCoord.z * volumeDim.z - (zSliceNumber1 + 0.5);\r\n return mix(colorSlice1, colorSlice2, weightSlice2);\r\n}\r\n\r\nvec4 sample3DTextureInclined(vec3 boxCoord) { // delta:{ x: XY, y : XZ, z: YZ }\r\n vec3 textCoord = boxCoord;\r\n vec2 currDelta = mix(boxCoord.zz, vec2(1., 1.) - boxCoord.zz, boxAngles.yx) * delta.yz;\r\n\r\n textCoord.y = (boxCoord.y - currDelta.y) / (1. - delta.z);\r\n if (textCoord.y < 0.0 || textCoord.y > 1.0)\r\n return NO_COLOR;\r\n\r\n currDelta.x += mix(textCoord.y, 1.0 - textCoord.y, boxAngles.z) * delta.x;\r\n\r\n textCoord.x = (boxCoord.x - currDelta.x) / (1. - delta.x - delta.y);\r\n if (textCoord.x < 0.0 || textCoord.x > 1.0)\r\n return NO_COLOR;\r\n\r\n return sample3DTexture(textCoord);\r\n}\r\n\r\nfloat CalcColor(vec3 iter, vec3 dir) {\r\n float d = 1. / 128.;\r\n vec3 dx = vec3(d, 0.0, 0.0);\r\n vec3 dy = vec3(0.0, d, 0.0);\r\n vec3 dz = vec3(0.0, 0.0, d);\r\n\r\n // #Opt: coordInc.x:(iter + dx).x > 1. ? 0.: sample3DTextureInclined(iter + dx).x,\r\n vec3 coordInc = mix(\r\n vec3(\r\n sample3DTextureInclined(iter + dx).x,\r\n sample3DTextureInclined(iter + dy).x,\r\n sample3DTextureInclined(iter + dz).x\r\n ),\r\n vec3(0. ,0. , 0.),\r\n vec3(floor((iter + dx).x), floor((iter + dy).y), floor((iter + dz).z))\r\n );\r\n\r\n // #Opt: coordDec.x:(iter - dx).x < 0. ? 0.: sample3DTextureInclined(iter - dx).x,\r\n vec3 coordDec = mix(\r\n vec3(0. ,0. , 0.),\r\n vec3(\r\n sample3DTextureInclined(iter - dx).x,\r\n sample3DTextureInclined(iter - dy).x,\r\n sample3DTextureInclined(iter - dz).x\r\n ),\r\n vec3(ceil((iter - dx).x), ceil((iter - dy).y), ceil((iter - dz).z))\r\n );\r\n\r\n vec3 N = normalize(coordInc - coordDec);\r\n float dif = max(0.0, dot(N, dir));\r\n return dif;\r\n}\r\n\r\nvec3 AccuracyIso(vec3 left, vec3 right, float volLeft, float threshold) {\r\n for (int i = 0; i < 5; i++) {\r\n vec3 iterator = 0.5 * (left + right);\r\n float vol = sample3DTextureInclined(iterator).r;\r\n if ((volLeft - threshold) * (vol - threshold) < 0.)\r\n right = iterator;\r\n else\r\n left = iterator;\r\n }\r\n return 0.5 * (left + right);\r\n}\r\n\r\nvec3 CorrectIso(vec3 left, vec3 right, float tr) {\r\n for (int j = 0; j < 5; j++) {\r\n vec3 iterator = 0.5 * (left + right);\r\n float vol = sample3DTextureInclined(iterator).r;\r\n if (vol < tr)\r\n right = iterator;\r\n else\r\n left = iterator;\r\n }\r\n return 0.5 * (left + right);\r\n}\r\n\r\nvec4 GetIso1(vec3 start, vec3 back, float molDist, vec3 dir, float tr, int count) {\r\n float vol, stepSize = (float(count) + 2.) / float(STEPS_COUNT);\r\n vec3 step = stepSize * dir, iterator = start, left, right;\r\n vec4 acc = NO_COLOR;\r\n\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n iterator = iterator + step;\r\n vol = sample3DTextureInclined(iterator).r;\r\n if (length(iterator - back) <= stepSize || (vol > tr))\r\n break;\r\n }\r\n\r\n if (vol > tr)\r\n acc = vec4(CorrectIso(iterator, iterator - step, tr).xyz, 1.);\r\n\r\n return acc;\r\n}\r\n\r\nfloat easeOut(float x0, float x1, float x) {\r\n float t = clamp((x - x0) / (x1 - x0), 0.0, 1.0);\r\n return 1.0 - (1.0 - t) * (1.0 - t);\r\n}\r\n\r\nfloat easeIn(float x0, float x1, float x) {\r\n float t = clamp((x - x0) / (x1 - x0), 0.0, 1.0);\r\n return t * t;\r\n}\r\n\r\nvec3 GetColSimple(float vol) {\r\n float t = easeOut(_isoLevel0.x, _isoLevel0.y, vol);\r\n float s = easeIn(_isoLevel0.y, _isoLevel0.z, vol);\r\n return vec3(0.5, 0.6, 0.7) * (1.0 - t) + 2.0 * vec3(s, 0, 0);\r\n}\r\n\r\nvec4 VolRender(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n vec4 acc = NO_COLOR, iso;\r\n vec3 iterator = start, sumColor = vec3(0., 0., 0.);\r\n float stepSize, alpha, sumAlpha = 0.0, vol, curStepSize, molD;\r\n vec3 step, col, colOld, right;\r\n float tr0 = _isoLevel0.x;\r\n float dif, r, kd, finish;\r\n int count = 0, stopMol = 0;\r\n\r\n for (int k = 0; k < 3; k++) {\r\n stepSize = (float(k) + 2.) / float(STEPS_COUNT);\r\n kd = 140. * tr0 * stepSize;\r\n r = 1. - kd;\r\n step = stepSize * dir;\r\n iso = GetIso1(iterator, back, molDist, dir, tr0, k);\r\n if (iso.a < 0.1 || length(iso.xyz - start) > molDist)\r\n break;\r\n iterator = iso.xyz;\r\n dif = 1.;// CalcColor(iterator, dir);\r\n colOld = GetColSimple(tr0);\r\n curStepSize = stepSize;\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n iterator = iterator + step;\r\n molD = length(iterator - start);\r\n vol = sample3DTextureInclined(iterator).r;\r\n finish = distance(iterator, back) - stepSize;\r\n if (finish < 0.0 || vol < tr0 || (sumAlpha > 0.97) || molD > molDist)\r\n break;\r\n alpha = (1. - r);\r\n col = GetColSimple(vol);\r\n vol = sample3DTextureInclined(iterator - 0.5 * step).r;\r\n vec3 colMid = GetColSimple(vol);\r\n sumColor += (1. - sumAlpha) * (colOld + 4.* colMid + col) * alpha / 6.;\r\n sumAlpha += (1. - sumAlpha) * alpha;// *(1. - 1.0*dif*dif);\r\n colOld = col;\r\n } // for i\r\n\r\n if (finish < 0.0 || sumAlpha > 0.97)\r\n break;\r\n\r\n if (molD > molDist) {\r\n curStepSize = stepSize - (molD - molDist);\r\n right = iterator - (molD - molDist) * dir;\r\n vol = sample3DTextureInclined(right).r;\r\n } else {\r\n vec3 left = iterator - step;\r\n right = CorrectIso(left, iterator, tr0);\r\n curStepSize = distance(left, right);\r\n vol = tr0;\r\n }\r\n\r\n alpha = (1. - r) * curStepSize / stepSize;\r\n dif = 1.;// CalcColor(right, dir);\r\n col = GetColSimple(vol);\r\n vol = sample3DTextureInclined(iterator - 0.5 * curStepSize / stepSize * step).r;\r\n vec3 colMid = GetColSimple(vol);\r\n sumColor += (1. - sumAlpha) * (colOld + 4. * colMid + col) * alpha / 6.;\r\n sumAlpha += (1. - sumAlpha) * alpha;// *(1. - 1.0*dif*dif);\r\n\r\n if (molD > molDist)\r\n break;\r\n } // for k\r\n acc.rgb = 1. * sumColor / sumAlpha;\r\n acc.a = sumAlpha;\r\n return acc;\r\n}\r\n\r\nvec4 VolRender1(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n float stepSize = 1.0 / float(STEPS_COUNT);\r\n float len = length(back - start);\r\n vec3 step = stepSize * dir;\r\n vec3 iterator = start;\r\n float acc = 0.0;\r\n\r\n for (int i = 0; i < STEPS_COUNT; i++) {\r\n if (float(i) * stepSize > len)\r\n break;\r\n iterator = iterator + step;\r\n if (sample3DTextureInclined(iterator).r > _isoLevel0.x)\r\n acc += 10. * sample3DTextureInclined(iterator).r / float(STEPS_COUNT);\r\n }\r\n\r\n return vec4(1.,1.,1., acc);\r\n}\r\n\r\nvec4 IsoRender(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n vec4 tst = GetIso1(start, back, 2., dir, _isoLevel0.x, 0);\r\n vec4 col = NO_COLOR;\r\n\r\n if (length(tst.xyz - start) < molDist && tst.a > 0.1) {\r\n float dif = CalcColor(tst.xyz, dir);\r\n dif = 0.9 * dif * dif;\r\n col = vec4(dif, dif, dif, 1);\r\n }\r\n return col;\r\n}\r\n\r\nvec4 VolRender2(vec3 start, vec3 back, float molDist, vec3 dir) {\r\n return sample3DTexture(start);\r\n}\r\n\r\nvoid main() {\r\n vec3 tc = screenSpacePos.xyz / screenSpacePos.w * 0.5 + 0.5;\r\n\r\n if (_flipV > 0.0) {\r\n tc.y = 1.0 - tc.y;\r\n }\r\n\r\n vec3 start;\r\n vec3 back;\r\n vec3 molBack;\r\n if (projectionMatrix[0][2] < 0.0) {\r\n start = texture2D(_FFLeft, tc.xy).xyz;\r\n back = texture2D(_BFLeft, tc.xy).xyz;\r\n molBack = texture2D(_WFFLeft, tc.xy).xyz;\r\n } else {\r\n start = texture2D(_FFRight, tc.xy).xyz;\r\n back = texture2D(_BFRight, tc.xy).xyz;\r\n molBack = texture2D(_WFFRight, tc.xy).xyz;\r\n }\r\n\r\n vec3 dir = normalize(back - start);\r\n\r\n float molDist = 2.0;\r\n if (length(molBack) > 0.001) {\r\n molDist = distance(start, molBack);\r\n }\r\n\r\n #ifdef ISO_MODE\r\n gl_FragColor = IsoRender(start, back, molDist, dir);\r\n #else\r\n gl_FragColor = VolRender(start, back, molDist, dir);\r\n #endif\r\n}\r\n"; +;// ./src/gfx/shaders/VolumeFarPlane.vert +const VolumeFarPlane_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec4 volPos;\r\nuniform float aspectRatio;\r\nuniform float farZ;\r\nuniform float tanHalfFOV;\r\nuniform mat4 matWorld2Volume;\r\n\r\nvoid main() {\r\n // rescale plane to fill in the whole far plane area seen from camera\r\n vec3 pos = position.xyz;\r\n pos.x = pos.x * tanHalfFOV * farZ * aspectRatio;\r\n pos.y = pos.y * tanHalfFOV * farZ;\r\n // common transformation\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);\r\n // calc pos in volume CS\r\n volPos = matWorld2Volume * modelMatrix * vec4(pos, 1.0);\r\n // we're assuming local position is in [-0.5, 0.5]\r\n // we need to offset it to be represented in RGB\r\n volPos = volPos + 0.5;\r\n volPos.w = 0.5;\r\n}\r\n"; +;// ./src/gfx/shaders/VolumeFarPlane.frag +const gfx_shaders_VolumeFarPlane_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nvarying vec4 volPos;\r\n\r\nvoid main() {\r\n gl_FragColor = volPos;\r\n}"; +;// ./src/gfx/shaders/VolumeMaterial.js @@ -22547,7 +22568,7 @@ class VolumeMaterial extends external_module_three_commonjs_three_commonjs2_thre FrontFacePosMaterial, VolumeMaterial }); -;// CONCATENATED MODULE: ./src/gfx/VolumeMesh.js +;// ./src/gfx/VolumeMesh.js @@ -22589,12 +22610,12 @@ class VolumeMesh extends external_module_three_commonjs_three_commonjs2_three_am geo.setAttribute('position', new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.BufferAttribute(new Float32Array(this.vertices.length * 3), 3)); this.name = 'VolumeMesh'; } - static _corners = (() => [ + static _corners = [ // x, y, z, edge1, edge2, edge3 - [-1, -1, -1, 0, 4, 8], [1, -1, -1, 0, 5, 9], [1, 1, -1, 1, 5, 10], [-1, 1, -1, 1, 4, 11], [-1, -1, 1, 2, 6, 8], [1, -1, 1, 2, 7, 9], [1, 1, 1, 3, 7, 10], [-1, 1, 1, 3, 6, 11]])(); - static _edges = (() => [ + [-1, -1, -1, 0, 4, 8], [1, -1, -1, 0, 5, 9], [1, 1, -1, 1, 5, 10], [-1, 1, -1, 1, 4, 11], [-1, -1, 1, 2, 6, 8], [1, -1, 1, 2, 7, 9], [1, 1, 1, 3, 7, 10], [-1, 1, 1, 3, 6, 11]]; + static _edges = [ // corner1, corner2, center_x, center_y, center_z - [0, 1, 0, -1, -1], [2, 3, 0, 1, -1], [4, 5, 0, -1, 1], [6, 7, 0, 1, 1], [0, 3, -1, 0, -1], [1, 2, 1, 0, -1], [4, 7, -1, 0, 1], [5, 6, 1, 0, 1], [0, 4, -1, -1, 0], [1, 5, 1, -1, 0], [2, 6, -1, 1, 0], [3, 7, 1, 1, 0]])(); + [0, 1, 0, -1, -1], [2, 3, 0, 1, -1], [4, 5, 0, -1, 1], [6, 7, 0, 1, 1], [0, 3, -1, 0, -1], [1, 2, 1, 0, -1], [4, 7, -1, 0, 1], [5, 6, 1, 0, 1], [0, 4, -1, -1, 0], [1, 5, 1, -1, 0], [2, 6, -1, 1, 0], [3, 7, 1, 1, 0]]; static _edgeIntersections = function () { const edgeIntersections = []; for (let j = 0; j < 12; ++j) { @@ -22872,11 +22893,11 @@ class VolumeMesh extends external_module_three_commonjs_three_commonjs2_three_am this.material.uniforms._isoLevel0.value.set(level(kSigma), level(kSigmaMed), level(kSigmaMax)); } static _nearClipPlaneOffset = 0.2; - static _pos = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3())(); - static _norm = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3())(); - static _norm4D = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector4())(); - static _matrixWorldToLocal = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Matrix4())(); - static _clipPlane = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Plane())(); + static _pos = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(); + static _norm = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(); + static _norm4D = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector4(); + static _matrixWorldToLocal = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Matrix4(); + static _clipPlane = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Plane(); rebuild(camera) { const nearClipPlaneOffset = VolumeMesh._nearClipPlaneOffset; const pos = VolumeMesh._pos; @@ -22909,7 +22930,7 @@ class VolumeMesh extends external_module_three_commonjs_three_commonjs2_three_am } } /* harmony default export */ const gfx_VolumeMesh = (VolumeMesh); -;// CONCATENATED MODULE: ./src/gfx/VolumeBounds.js +;// ./src/gfx/VolumeBounds.js function _flattenArray(input) { @@ -22986,7 +23007,7 @@ class VolumeBounds { } } /* harmony default export */ const gfx_VolumeBounds = (VolumeBounds); -;// CONCATENATED MODULE: ./src/gfx/VolumeFarPlane.js +;// ./src/gfx/VolumeFarPlane.js @@ -23052,7 +23073,7 @@ class VolumeFarPlane { } } /* harmony default export */ const gfx_VolumeFarPlane = (VolumeFarPlane); -;// CONCATENATED MODULE: ./src/VolumeVisual.js +;// ./src/VolumeVisual.js @@ -23088,7 +23109,7 @@ class VolumeVisual extends src_Visual { } } /* harmony default export */ const src_VolumeVisual = (VolumeVisual); -;// CONCATENATED MODULE: ./src/io/loaders/LoaderList.js +;// ./src/io/loaders/LoaderList.js /** @@ -23106,8 +23127,7 @@ class LoaderList extends utils_EntityList { * automatically register at creation time. * @see LoaderList#register */ - constructor() { - let someLoaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + constructor(someLoaders = []) { super(someLoaders, ['types']); } @@ -23129,7 +23149,7 @@ class LoaderList extends utils_EntityList { } } /* harmony default export */ const loaders_LoaderList = (LoaderList); -;// CONCATENATED MODULE: ./src/io/loaders/Loader.js +;// ./src/io/loaders/Loader.js class Loader extends utils_EventDispatcher { @@ -23154,7 +23174,7 @@ class Loader extends utils_EventDispatcher { } } utils_makeContextDependent(Loader.prototype); -;// CONCATENATED MODULE: ./src/io/loaders/FileLoader.js +;// ./src/io/loaders/FileLoader.js class FileLoader extends Loader { constructor(source, options) { @@ -23196,7 +23216,7 @@ class FileLoader extends Loader { } } FileLoader.types = ['file', 'blob']; -;// CONCATENATED MODULE: ./src/io/loaders/XHRLoader.js +;// ./src/io/loaders/XHRLoader.js @@ -23241,7 +23261,7 @@ class XHRLoader extends Loader { }); } static canProbablyLoad(source) { - return external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(source) && urlStartRegexp.test(source); + return __WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(source) && urlStartRegexp.test(source); } static extractName(source) { if (source) { @@ -23252,7 +23272,7 @@ class XHRLoader extends Loader { } } XHRLoader.types = ['url']; -;// CONCATENATED MODULE: ./src/io/loaders/ImmediateLoader.js +;// ./src/io/loaders/ImmediateLoader.js class ImmediateLoader extends Loader { load() { @@ -23268,7 +23288,7 @@ class ImmediateLoader extends Loader { } } ImmediateLoader.types = ['immediate']; -;// CONCATENATED MODULE: ./src/io/loaders.js +;// ./src/io/loaders.js @@ -23276,7 +23296,7 @@ ImmediateLoader.types = ['immediate']; /* harmony default export */ const loaders = (new loaders_LoaderList([ // note: order might be important FileLoader, XHRLoader, ImmediateLoader])); -;// CONCATENATED MODULE: ./src/io/parsers/ParserList.js +;// ./src/io/parsers/ParserList.js /** @@ -23294,8 +23314,7 @@ class ParserList extends utils_EntityList { * automatically register at creation time. * @see ParserList#register */ - constructor() { - let someParsers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + constructor(someParsers = []) { super(someParsers, ['formats', 'extensions']); } @@ -23322,7 +23341,7 @@ class ParserList extends utils_EntityList { } } /* harmony default export */ const parsers_ParserList = (ParserList); -;// CONCATENATED MODULE: ./src/io/parsers/Parser.js +;// ./src/io/parsers/Parser.js class Parser { constructor(data, options) { @@ -23358,7 +23377,7 @@ class Parser { } } utils_makeContextDependent(Parser.prototype); -;// CONCATENATED MODULE: ./src/io/parsers/pdb/Remark290.js +;// ./src/io/parsers/pdb/Remark290.js /** @@ -23408,7 +23427,7 @@ class Remark290 { } Remark290.prototype.id = 290; /* harmony default export */ const pdb_Remark290 = (Remark290); -;// CONCATENATED MODULE: ./src/io/parsers/pdb/Remark350.js +;// ./src/io/parsers/pdb/Remark350.js const { @@ -23482,7 +23501,7 @@ class Remark350 { } Remark350.prototype.id = 350; /* harmony default export */ const pdb_Remark350 = (Remark350); -;// CONCATENATED MODULE: ./src/io/parsers/PDBStream.js +;// ./src/io/parsers/PDBStream.js /** Helper class for stream-like reading input files. */ class PDBStream { /** @@ -23595,7 +23614,7 @@ class PDBStream { } } /* harmony default export */ const parsers_PDBStream = (PDBStream); -;// CONCATENATED MODULE: ./src/io/parsers/PDBParser.js +;// ./src/io/parsers/PDBParser.js @@ -23657,7 +23676,7 @@ class PDBParser extends Parser { this._options.fileType = 'pdb'; } static canProbablyParse(data) { - return external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(data) && pdbStartRegexp.test(data); + return __WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(data) && pdbStartRegexp.test(data); } _finalize() { this._fixBondsArray(); @@ -23665,11 +23684,11 @@ class PDBParser extends Parser { // keep crystallographic symmetry transformations const remark290 = this._remarks[290]; - this._complex.symmetry = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isUndefined(remark290) ? [] : remark290.matrices; + this._complex.symmetry = __WEBPACK_EXTERNAL_MODULE_lodash_default__.isUndefined(remark290) ? [] : remark290.matrices; // add loaded biological assemblies const remark350 = this._remarks[350]; - this._complex.units = this._complex.units.concat(external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isUndefined(remark350) ? [] : remark350.assemblies); + this._complex.units = this._complex.units.concat(__WEBPACK_EXTERNAL_MODULE_lodash_default__.isUndefined(remark350) ? [] : remark350.assemblies); // add loaded macromolecules this._finalizeMolecules(); @@ -23744,8 +23763,6 @@ class PDBParser extends Parser { if (this._modelId !== 1) { return; } - - /* eslint-disable no-magic-numbers */ const het = stream.readCharCode(1) === 0x48; // field names according to wwPDB Format @@ -23764,7 +23781,7 @@ class PDBParser extends Parser { const tempFactor = stream.readFloat(61, 66); const element = stream.readString(77, 78).trim() || nameToElement(name); const charge = stream.readInt(79, 80) || 0; - /* eslint-enable no-magic-numbers */ + // skip waters (there may be lots of them) if (this.settings.now.nowater) { if (resName === 'HOH' || resName === 'WAT') { @@ -23796,14 +23813,11 @@ class PDBParser extends Parser { this._modelId += 1; } _parseCONECT(stream) { - /* eslint-disable no-magic-numbers */ const serial0 = stream.readInt(7, 11); const serial1 = stream.readInt(12, 16); const serial2 = stream.readInt(17, 21); const serial3 = stream.readInt(22, 26); const serial4 = stream.readInt(27, 31); - /* eslint-enable no-magic-numbers */ - const complex = this._complex; // Keep bonds ordered by atom serial @@ -23821,11 +23835,9 @@ class PDBParser extends Parser { } } _parseCOMPND(stream) { - /* eslint-disable no-magic-numbers */ const str = stream.readString(11, 80); const tokenIdx = str.indexOf(':'); this._compndCurrToken = tokenIdx > 0 ? str.substring(0, tokenIdx).trim() : this._compndCurrToken; - /* eslint-enable no-magic-numbers */ // start reading new molecule if (this._compndCurrToken === 'MOL_ID') { @@ -23851,37 +23863,31 @@ class PDBParser extends Parser { } } _parseREMARK(stream) { - /* eslint-disable no-magic-numbers */ const remarkNum = stream.readInt(8, 10); - /* eslint-enable no-magic-numbers */ // create remark parser if needed let remark = this._remarks[remarkNum]; - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isUndefined(remark)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isUndefined(remark)) { const RemarkParser = remarkParsers[remarkNum]; - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isFunction(RemarkParser)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isFunction(RemarkParser)) { this._remarks[remarkNum] = remark = new RemarkParser(this._complex); } } // delegate parsing - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isUndefined(remark)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isUndefined(remark)) { remark.parse(stream); } } _parseHELIX(stream) { - /* eslint-disable no-magic-numbers */ const fields = [20, 22, 32, 34]; - /* eslint-enable no-magic-numbers */ this._parseSTRUCTURE(stream, fields, obj => { this._complex.addHelix(obj); this._complex.structures.push(obj); }); } _parseSHEET(stream) { - /* eslint-disable no-magic-numbers */ const fields = [22, 23, 33, 34]; - /* eslint-enable no-magic-numbers */ this._parseSTRUCTURE(stream, fields, obj => { this._complex.addSheet(obj); }); @@ -23893,7 +23899,7 @@ class PDBParser extends Parser { const endIndex = 3; // identify fields: debugging and stuff - /* eslint-disable no-magic-numbers */ + const codeOfS = 0x53; const serialNumber = stream.readInt(8, 10); const structureName = stream.readString(12, 14).trim(); // FIXME: LString(3) forbids trim() @@ -23903,7 +23909,7 @@ class PDBParser extends Parser { const shWidth = stream.readInt(15, 16); const shCur = stream.readInt(42, 45); const shPrev = stream.readInt(57, 60); - /* eslint-enable no-magic-numbers */ + // file fields const startChainID = stream.readString(pars[startId], pars[endId] + 1).charCodeAt(0); const endChainID = stream.readString(pars[endId], pars[endId] + 1).charCodeAt(0); @@ -23961,7 +23967,7 @@ class PDBParser extends Parser { const line = stream.readInt(9, 10) || 1; metadata.title[line - 1] = stream.readString(11, 80).trim(); } - static tagParsers = (() => ({ + static tagParsers = { HEADER: PDBParser.prototype._parseHEADER, 'TITLE ': PDBParser.prototype._parseTITLE, 'ATOM ': PDBParser.prototype._parseATOM, @@ -23983,7 +23989,7 @@ class PDBParser extends Parser { 'ATOM 7': PDBParser.prototype._parseATOM, 'ATOM 8': PDBParser.prototype._parseATOM, 'ATOM 9': PDBParser.prototype._parseATOM - }))(); + }; parseSync() { const stream = new parsers_PDBStream(this._data); const result = this._complex = new PDBParser_Complex(); @@ -23992,7 +23998,7 @@ class PDBParser extends Parser { while (!stream.end()) { const tag = stream.readString(1, TAG_LENGTH); const func = PDBParser.tagParsers[tag]; - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isFunction(func)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isFunction(func)) { func.call(this, stream); } stream.next(); @@ -24016,7 +24022,7 @@ class PDBParser extends Parser { PDBParser.formats = ['pdb']; PDBParser.extensions = ['.pdb', '.ent']; /* harmony default export */ const parsers_PDBParser = (PDBParser); -;// CONCATENATED MODULE: ./src/io/parsers/CMLParser.js +;// ./src/io/parsers/CMLParser.js @@ -24046,7 +24052,7 @@ class CMLParser extends Parser { this._options.fileType = 'cml'; } static canProbablyParse(data) { - return external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(data) && cmlStartRegexp.test(data); + return __WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(data) && cmlStartRegexp.test(data); } _rebuidBondIndexes(atoms, bonds) { const count = atoms.length; @@ -24608,7 +24614,7 @@ CMLParser.extensions = ['.cml']; // EXTERNAL MODULE: ./vendor/js/mmtf.js var mmtf = __webpack_require__(660); var mmtf_default = /*#__PURE__*/__webpack_require__.n(mmtf); -;// CONCATENATED MODULE: ./src/io/parsers/MMTFParser.js +;// ./src/io/parsers/MMTFParser.js @@ -24691,7 +24697,7 @@ class MMTFParser extends Parser { static canProbablyParse(data) { // check if it's binary MessagePack format containing a map (dictionary) // see https://github.com/msgpack/msgpack/blob/master/spec.md - return external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isArrayBuffer(data) && (getFirstByte(data) | 1) === 0xDF; + return __WEBPACK_EXTERNAL_MODULE_lodash_default__.isArrayBuffer(data) && (getFirstByte(data) | 1) === 0xDF; } _onModel(_modelData) {} _onChain(chainData) { @@ -24742,14 +24748,14 @@ class MMTFParser extends Parser { } _updateSecStructure(complex, residue, groupData) { const helixClasses = [3, -1, 1, -1, 5]; - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isUndefined(groupData) && groupData.secStruct === this._ssType) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isUndefined(groupData) && groupData.secStruct === this._ssType) { residue._secondary = this._ssStruct; if (this._ssStruct) { this._ssStruct.term = residue; } return; } - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isUndefined(groupData)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isUndefined(groupData)) { // start new secondary structure const type = secStructToType[groupData.secStruct]; this._ssType = groupData.secStruct; @@ -25036,7 +25042,7 @@ MMTFParser.formats = ['mmtf']; MMTFParser.extensions = ['.mmtf']; MMTFParser.binary = true; /* harmony default export */ const parsers_MMTFParser = (MMTFParser); -;// CONCATENATED MODULE: ./src/io/parsers/ParsingError.js +;// ./src/io/parsers/ParsingError.js class ParsingError extends Error { constructor(message, line, column) { super(`data:${line}:${column}: ${message}`); @@ -25049,7 +25055,7 @@ class ParsingError extends Error { } } /* harmony default export */ const parsers_ParsingError = (ParsingError); -;// CONCATENATED MODULE: ./src/io/parsers/readCIF.js +;// ./src/io/parsers/readCIF.js @@ -25256,7 +25262,7 @@ function readCIF(source) { break; } value = _parseValue(); - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].set(block, key, value); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.set(block, key, value); state = 1; // block continue; } else if (state === 3) { @@ -25283,7 +25289,7 @@ function readCIF(source) { for (let keyIndex = 0; keyIndex < keysCount; ++keyIndex) { value = []; values[keyIndex] = value; - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].set(block, keys[keyIndex], value); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.set(block, keys[keyIndex], value); } state = 4; continue; // parse again in a different state @@ -25324,7 +25330,7 @@ function readCIF(source) { } return result; } -;// CONCATENATED MODULE: ./src/io/parsers/CIFParser.js +;// ./src/io/parsers/CIFParser.js @@ -25360,7 +25366,7 @@ function getTypeFromId(string) { * @return {array, object} array or object */ function arrize(arrayLikeObject) { - if (arrayLikeObject === null || arrayLikeObject === undefined || external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isArray(arrayLikeObject)) { + if (arrayLikeObject === null || arrayLikeObject === undefined || __WEBPACK_EXTERNAL_MODULE_lodash_default__.isArray(arrayLikeObject)) { return arrayLikeObject; } return [arrayLikeObject]; @@ -25417,7 +25423,7 @@ function _getOperations(operList) { return ops; } function _extractOperations(assemblyGen, opsDict) { - assemblyGen = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(assemblyGen) ? assemblyGen : `${assemblyGen}`; + assemblyGen = __WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(assemblyGen) ? assemblyGen : `${assemblyGen}`; const l = assemblyGen.replace(/\)\s*\(/g, '!').replace(/[()']/g, ''); const groupStr = l.split('!'); const gps = []; @@ -25466,7 +25472,7 @@ class CIFParser extends Parser { this._options.fileType = 'cif'; } static canProbablyParse(data) { - return external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(data) && /^\s*data_/i.test(data); + return __WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(data) && /^\s*data_/i.test(data); } parseSync() { this.logger.info('Parsing CIF file..'); @@ -25818,7 +25824,7 @@ class CIFParser extends Parser { CIFParser.formats = ['cif', 'mmcif']; CIFParser.extensions = ['.cif', '.mmcif']; /* harmony default export */ const parsers_CIFParser = (CIFParser); -;// CONCATENATED MODULE: ./src/io/parsers/VolumeModel.js +;// ./src/io/parsers/VolumeModel.js @@ -25830,7 +25836,7 @@ const valueType = { }; class VolumeModel { _xyz2crs = []; - _origin = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(0, 0, 0))(); + _origin = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(0, 0, 0); constructor() { this._header = {}; this._boxSize = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(); @@ -25848,9 +25854,9 @@ class VolumeModel { this._header.dmax = 0; } _typedCheck() { - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isTypedArray(this._buff)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isTypedArray(this._buff)) { this._buff = this._buff.buffer; - } else if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isArrayBuffer(this._buff)) { + } else if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isArrayBuffer(this._buff)) { throw new TypeError('Expected ArrayBuffer or TypedArray'); } } @@ -25905,7 +25911,7 @@ class VolumeModel { return [this._header.extent[this._xyz2crs[0]], this._header.extent[this._xyz2crs[1]], this._header.extent[this._xyz2crs[2]]]; } _getVolumeInfo() { - const volInfo = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].pick(this._header, ['dmean', 'dmin', 'dmax', 'sd', 'delta']); + const volInfo = __WEBPACK_EXTERNAL_MODULE_lodash_default__.pick(this._header, ['dmean', 'dmin', 'dmax', 'sd', 'delta']); volInfo.obtuseAngle = this._header.angles.map(angle => Number(angle >= Math.PI / 2)); return volInfo; } @@ -25941,7 +25947,7 @@ class VolumeModel { } } /* harmony default export */ const parsers_VolumeModel = (VolumeModel); -;// CONCATENATED MODULE: ./src/io/parsers/CCP4Parser.js +;// ./src/io/parsers/CCP4Parser.js const CCP4Header = { @@ -26077,7 +26083,7 @@ CCP4Parser.formats = ['ccp4']; CCP4Parser.extensions = ['.ccp4', '.map', '.mrc']; CCP4Parser.binary = true; /* harmony default export */ const parsers_CCP4Parser = (CCP4Parser); -;// CONCATENATED MODULE: ./src/io/parsers/XYZParser.js +;// ./src/io/parsers/XYZParser.js @@ -26096,7 +26102,7 @@ class XYZParser extends Parser { this._fileName = options.name; } static canProbablyParse(data) { - return external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(data) && /^\s*\d+ *\n[^\n]*\n\s*\w{1,3}\s+-?\d/.test(data); + return __WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(data) && /^\s*\d+ *\n[^\n]*\n\s*\w{1,3}\s+-?\d/.test(data); } _parseToAtomsInf(source) { const endnAtoms = source.indexOf('\n'); @@ -26165,7 +26171,7 @@ class XYZParser extends Parser { static extensions = ['.xyz']; } /* harmony default export */ const parsers_XYZParser = (XYZParser); -;// CONCATENATED MODULE: ./src/io/parsers/PubChemParser.js +;// ./src/io/parsers/PubChemParser.js @@ -26180,7 +26186,7 @@ class PubChemParser extends Parser { this._options.fileType = 'pubchem+json'; } static canProbablyParse(data) { - return external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(data) && data[0] === '{'; + return __WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(data) && data[0] === '{'; } parseSync() { this.logger.info('Parsing PubChem JSON file...'); @@ -26205,7 +26211,7 @@ class PubChemParser extends Parser { if (!elements || aids.length !== elements.length) { throw new Error('Unable to parse atom elements'); } - elements = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].fromPairs(external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].zip(aids, elements)); + elements = __WEBPACK_EXTERNAL_MODULE_lodash_default__.fromPairs(__WEBPACK_EXTERNAL_MODULE_lodash_default__.zip(aids, elements)); const atoms = {}; const coords = complexData.coords && complexData.coords[0]; const model = coords && coords.conformers && coords.conformers[0]; @@ -26238,7 +26244,7 @@ class PubChemParser extends Parser { PubChemParser.formats = ['pubchem', 'pubchem+json', 'pc']; PubChemParser.extensions = ['.json']; /* harmony default export */ const parsers_PubChemParser = (PubChemParser); -;// CONCATENATED MODULE: ./src/io/parsers/SDFStream.js +;// ./src/io/parsers/SDFStream.js class SDFStream { constructor(data) { @@ -26268,7 +26274,7 @@ class SDFStream { findNextDataItem() { let curStr = this.getNextString(); let res = false; - while (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isUndefined(curStr) && curStr.trim() !== '$$$$') { + while (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isUndefined(curStr) && curStr.trim() !== '$$$$') { if (curStr.match(/>\s+<(.*)>/)) { res = true; break; @@ -26279,7 +26285,7 @@ class SDFStream { } findNextCompoundStart() { let curStr = this.getCurrentString(); - while (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isUndefined(curStr) && curStr.trim() !== '$$$$') { + while (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isUndefined(curStr) && curStr.trim() !== '$$$$') { curStr = this.getNextString(); } this.setStart(++this._currentStringIndx); @@ -26289,7 +26295,7 @@ class SDFStream { return this._currentStringIndx < this._strings.length - 2; } } -;// CONCATENATED MODULE: ./src/io/parsers/SDFParser.js +;// ./src/io/parsers/SDFParser.js @@ -26370,7 +26376,7 @@ class SDFParser extends Parser { this._atomsIndexes = []; } canProbablyParse(data) { - return external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(data) && sdfAndMolRegexp.test(data); + return __WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(data) && sdfAndMolRegexp.test(data); } _parseHeader(stream) { const molecule = {}; @@ -26605,7 +26611,7 @@ class SDFParser extends Parser { } SDFParser.formats = ['mol', 'sdf']; SDFParser.extensions = ['.mol', '.sdf']; -;// CONCATENATED MODULE: ./src/io/parsers/DSN6Parser.js +;// ./src/io/parsers/DSN6Parser.js @@ -26749,7 +26755,7 @@ DSN6Parser.formats = ['dsn6']; DSN6Parser.extensions = ['.dsn6', '.omap']; DSN6Parser.binary = true; /* harmony default export */ const parsers_DSN6Parser = (DSN6Parser); -;// CONCATENATED MODULE: ./src/io/parsers/GROReader.js +;// ./src/io/parsers/GROReader.js /** @@ -26773,7 +26779,7 @@ class GROReader extends parsers_PDBStream { } } /* harmony default export */ const parsers_GROReader = (GROReader); -;// CONCATENATED MODULE: ./src/io/parsers/GROParser.js +;// ./src/io/parsers/GROParser.js @@ -26830,7 +26836,7 @@ class GROParser extends Parser { * @returns {boolean} true if this file is in ascii, false otherwise */ canProbablyParse(data) { - return external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(this._data) && /^\s*[^\n]*\n\s*\d+ *\n\s*\d+[^\n\d]{3}\s*\w+\s*\d+\s*-?\d/.test(data); + return __WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(this._data) && /^\s*[^\n]*\n\s*\d+ *\n\s*\d+[^\n\d]{3}\s*\w+\s*\d+\s*-?\d/.test(data); } /** @@ -26978,7 +26984,7 @@ class GROParser extends Parser { GROParser.formats = ['gro']; GROParser.extensions = ['.gro']; /* harmony default export */ const parsers_GROParser = (GROParser); -;// CONCATENATED MODULE: ./src/io/parsers/MOL2Parser.js +;// ./src/io/parsers/MOL2Parser.js @@ -27255,7 +27261,7 @@ class MOL2Parser extends Parser { MOL2Parser.formats = ['mol2']; MOL2Parser.extensions = ['.mol2', '.ml2', '.sy2']; /* harmony default export */ const parsers_MOL2Parser = (MOL2Parser); -;// CONCATENATED MODULE: ./src/io/parsers.js +;// ./src/io/parsers.js @@ -27271,7 +27277,7 @@ MOL2Parser.extensions = ['.mol2', '.ml2', '.sy2']; /* harmony default export */ const parsers = (new parsers_ParserList([ // note: order might be important parsers_PDBParser, parsers_CIFParser, parsers_MMTFParser, parsers_XYZParser, parsers_CMLParser, parsers_PubChemParser, SDFParser, parsers_CCP4Parser, parsers_DSN6Parser, parsers_GROParser, parsers_MOL2Parser])); -;// CONCATENATED MODULE: ./src/io/exporters/ExporterList.js +;// ./src/io/exporters/ExporterList.js /** @@ -27289,8 +27295,7 @@ class ExporterList extends utils_EntityList { * automatically register at creation time. * @see ExporterList#register */ - constructor() { - let someExporters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + constructor(someExporters = []) { super(someExporters, ['formats']); } @@ -27310,7 +27315,7 @@ class ExporterList extends utils_EntityList { } } /* harmony default export */ const exporters_ExporterList = (ExporterList); -;// CONCATENATED MODULE: ./src/io/exporters/Exporter.js +;// ./src/io/exporters/Exporter.js class Exporter { constructor(source, options) { @@ -27340,7 +27345,7 @@ class Exporter { } } utils_makeContextDependent(Exporter.prototype); -;// CONCATENATED MODULE: ./src/io/exporters/PDBResult.js +;// ./src/io/exporters/PDBResult.js class PDBResult { @@ -27370,12 +27375,12 @@ class PDBResult { } else { this._tag = tag; } - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isUndefined(numeration)) { - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isNumber(numeration)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isUndefined(numeration)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isNumber(numeration)) { this._tagStrNum = numeration; this._numeration = true; this._fixedNumeration = true; - } else if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isBoolean(numeration)) { + } else if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isBoolean(numeration)) { this._tagStrNum = 0; this._numeration = numeration; this._fixedNumeration = false; @@ -27427,16 +27432,16 @@ class PDBResult { let curStr = this._resultArray[this._currentStr]; let str; const curStrLength = curStr ? curStr.length : 0; - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isUndefined(string)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isUndefined(string)) { return; } - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isNumber(begin)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isNumber(begin)) { begin = curStrLength + 1; } - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isNumber(end)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isNumber(end)) { end = curStrLength + string.length; } - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(string)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(string)) { str = string.toString(); } else { str = string; @@ -27521,7 +27526,7 @@ class PDBResult { } } } -;// CONCATENATED MODULE: ./src/io/exporters/PDBExporter.js +;// ./src/io/exporters/PDBExporter.js @@ -27554,7 +27559,7 @@ class PDBExporter extends Exporter { for (let i = 0; i < this._tags.length; i++) { const tag = this._tags[i]; const func = this._tagExtractors[tag]; - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isFunction(func)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isFunction(func)) { func.call(this, result); } } @@ -27644,7 +27649,7 @@ class PDBExporter extends Exporter { const helices = this._source._helices; for (let i = 0; i < helices.length; i++) { const helix = helices[i]; - const helixClass = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].invert(typeByPDBHelixClass); + const helixClass = __WEBPACK_EXTERNAL_MODULE_lodash_default__.invert(typeByPDBHelixClass); result.newString(); result.writeString(helix.serial, 10, 8); result.writeString(helix.name, 14, 12); @@ -27768,7 +27773,7 @@ class PDBExporter extends Exporter { } PDBExporter.formats = ['pdb']; PDBExporter.SourceClass = chem_Complex; -;// CONCATENATED MODULE: ./src/io/exporters/fbx/FBXModel.js +;// ./src/io/exporters/fbx/FBXModel.js const FBX_POS_SIZE = 3; const FBX_NORM_SIZE = 3; @@ -27912,7 +27917,7 @@ class FBXModel { this.setColors(geo.colors, 0, geo.vertsCount, size.color); } } -;// CONCATENATED MODULE: ./src/io/exporters/fbx/FBXGeometry.js +;// ./src/io/exporters/fbx/FBXGeometry.js /** Base class for fbx geometry contains simply organized attributes: positions+normals+colors, indices. */ class FBXGeometry { /** @@ -27943,7 +27948,7 @@ class FBXGeometry { }; } } -;// CONCATENATED MODULE: ./src/io/exporters/fbx/FBX1CGeometry.js +;// ./src/io/exporters/fbx/FBX1CGeometry.js /** @@ -27987,7 +27992,7 @@ class FBX1CGeometry extends FBXGeometry { } } } -;// CONCATENATED MODULE: ./src/io/exporters/fbx/FBX2CCylinder.js +;// ./src/io/exporters/fbx/FBX2CCylinder.js /** @@ -28108,7 +28113,7 @@ class FBX2CCylinder extends FBXGeometry { } } } -;// CONCATENATED MODULE: ./src/io/exporters/fbx/FBXInfoExtractor.js +;// ./src/io/exporters/fbx/FBXInfoExtractor.js @@ -28392,7 +28397,7 @@ class FBXInfoExtractor { * @returns {number} number of model-material pair */ _checkExistingMaterial(material) { - return external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].findIndex(this._materials, m => external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEqual(m, material)); + return __WEBPACK_EXTERNAL_MODULE_lodash_default__.findIndex(this._materials, m => __WEBPACK_EXTERNAL_MODULE_lodash_default__.isEqual(m, material)); } _gatherCylindersColoringInfo(geo) { const instCount = geo.instanceCount; @@ -28466,7 +28471,7 @@ class FBXInfoExtractor { matrix.set(scale, 0, 0, x, 0, scale, 0, y, 0, 0, scale, z, 0, 0, 0, 1); } } -;// CONCATENATED MODULE: ./src/io/exporters/fbx/FBXResult.js +;// ./src/io/exporters/fbx/FBXResult.js // Forming default definitions block const defaultDefinitions = ` Definitions: { @@ -28635,7 +28640,7 @@ class FBXResult { const creator = `Miew FBX Exporter v${this._info.version}`; // Supposed to be an engine return `; FBX 6.1.0 project file -; Created by ${creator} Copyright (c) 2015-2024 EPAM Systems, Inc. +; Created by ${creator} Copyright (c) 2015-2026 EPAM Systems, Inc. ; For support please contact miew@epam.com ; ---------------------------------------------------- @@ -28924,7 +28929,7 @@ Connections: { }`; } } -;// CONCATENATED MODULE: ./src/io/exporters/FBXExporter.js +;// ./src/io/exporters/FBXExporter.js @@ -28955,12 +28960,12 @@ class FBXExporter extends Exporter { } FBXExporter.formats = ['fbx']; FBXExporter.SourceClass = src_ComplexVisual; -;// CONCATENATED MODULE: ./src/io/exporters.js +;// ./src/io/exporters.js /* harmony default export */ const exporters = (new exporters_ExporterList([PDBExporter, FBXExporter])); -;// CONCATENATED MODULE: ./src/io/io.js +;// ./src/io/io.js @@ -28969,7 +28974,7 @@ FBXExporter.SourceClass = src_ComplexVisual; parsers: parsers, exporters: exporters }); -;// CONCATENATED MODULE: ./src/gfx/CSS2DRenderer.js +;// ./src/gfx/CSS2DRenderer.js /** * @author mrdoob / http://mrdoob.com/ */ @@ -29070,19 +29075,19 @@ class CSS2DRenderer { } } /* harmony default export */ const gfx_CSS2DRenderer = (CSS2DRenderer); -;// CONCATENATED MODULE: ./src/utils/getTopWindow.js +;// ./src/utils/getTopWindow.js function getTopWindow() { // intercept the exception if we have cross-origin iframe try { if (window.top.location.href !== undefined) { return window.top; } - } catch (e) { + } catch { // provide fallback } return window; } -;// CONCATENATED MODULE: ./src/ui/ObjectControls.js +;// ./src/ui/ObjectControls.js @@ -29837,7 +29842,7 @@ ObjectControls.prototype.setPivot = function (newPivot) { }); }; /* harmony default export */ const ui_ObjectControls = (ObjectControls); -;// CONCATENATED MODULE: ./src/ui/Picker.js +;// ./src/ui/Picker.js @@ -30058,7 +30063,7 @@ Picker.prototype.dispose = function () { } }; /* harmony default export */ const ui_Picker = (Picker); -;// CONCATENATED MODULE: ./src/gfx/Axes.js +;// ./src/gfx/Axes.js class Axes { constructor(target, targetCamera) { @@ -30099,7 +30104,7 @@ class Axes { } } /* harmony default export */ const gfx_Axes = (Axes); -;// CONCATENATED MODULE: ./src/gfx/FrameInfo.js +;// ./src/gfx/FrameInfo.js const cDataOffset = 12; @@ -30386,7 +30391,7 @@ class FrameInfo { * Returns link to atom pos vector, clone it if needed */ - static _vec = (() => new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3())(); + static _vec = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.Vector3(); getAtomPos(atomIdx) { const vec = FrameInfo._vec; const self = this; @@ -30404,7 +30409,7 @@ class FrameInfo { } } /* harmony default export */ const gfx_FrameInfo = (FrameInfo); -;// CONCATENATED MODULE: ./src/gfx/objects/SceneObject.js +;// ./src/gfx/objects/SceneObject.js @@ -30435,7 +30440,7 @@ class SceneObject { * @type {object} */ this.params = params; - this.opts = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].merge(utils.deriveDeep(settings.now.objects[this.type], true), opts); + this.opts = __WEBPACK_EXTERNAL_MODULE_lodash_default__.merge(utils.deriveDeep(settings.now.objects[this.type], true), opts); this.needsRebuild = false; this._mesh = null; this.id = null; @@ -30453,7 +30458,7 @@ class SceneObject { params: this.params }; const diff = utils.objectsDiff(this.opts, settings.now.modes[this.id]); - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEmpty(diff)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isEmpty(diff)) { result.opts = diff; } return result; @@ -30479,7 +30484,7 @@ class SceneObject { */ SceneObject.prototype.type = '__'; /* harmony default export */ const objects_SceneObject = (SceneObject); -;// CONCATENATED MODULE: ./src/gfx/objects/LinesObj.js +;// ./src/gfx/objects/LinesObj.js @@ -30548,11 +30553,9 @@ class LinesObj extends objects_SceneObject { LinesObj.prototype.constructor = LinesObj; LinesObj.prototype.type = 'line'; /* harmony default export */ const objects_LinesObj = (LinesObj); -;// CONCATENATED MODULE: ./src/gfx/shaders/Outline.frag -const Outline_namespaceObject = "precision highp float;\r\n\r\nuniform sampler2D srcTex;\r\nuniform vec2 srcTexSize;\r\nuniform vec2 thickness;\r\nvarying vec2 vUv;\r\n\r\n#ifdef DEPTH_OUTLINE\r\n uniform sampler2D srcDepthTex; //depthTexture\r\n uniform vec3 color;\r\n uniform float threshold;\r\n#endif\r\n\r\nvoid main() {\r\n\r\n vec2 pixelSize = thickness / srcTexSize;\r\n\r\n #ifdef DEPTH_OUTLINE\r\n float c00 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,-pixelSize.y)).x;\r\n float c01 = texture2D(srcDepthTex, vUv + vec2(0,-pixelSize.y)).x;\r\n float c02 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,-pixelSize.y)).x;\r\n float c10 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,0)).x;\r\n float c12 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,0)).x;\r\n float c20 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,pixelSize.y)).x;\r\n float c21 = texture2D(srcDepthTex, vUv + vec2(0,pixelSize.y)).x;\r\n float c22 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,pixelSize.y)).x;\r\n\r\n float horizEdge = - c00 - 2.0 * c01 - c02 + c20 + 2.0 * c21 + c22;\r\n float vertEdge = - c00 - 2.0 * c10 - c20 + c02 + 2.0 * c12 + c22;\r\n\r\n float grad = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\r\n\r\n gl_FragColor = ( grad > threshold ) ? vec4(color.rgb, 1.0) : gl_FragColor = texture2D(srcTex, vUv);\r\n\r\n #else\r\n vec4 c00 = texture2D(srcTex, vUv + vec2(-pixelSize.x,-pixelSize.y));\r\n vec4 c01 = texture2D(srcTex, vUv + vec2(0,-pixelSize.y));\r\n vec4 c02 = texture2D(srcTex, vUv + vec2(pixelSize.x,-pixelSize.y));\r\n vec4 c10 = texture2D(srcTex, vUv + vec2(-pixelSize.x,0));\r\n vec4 c12 = texture2D(srcTex, vUv + vec2(pixelSize.x,0));\r\n vec4 c20 = texture2D(srcTex, vUv + vec2(-pixelSize.x,pixelSize.y));\r\n vec4 c21 = texture2D(srcTex, vUv + vec2(0,pixelSize.y));\r\n vec4 c22 = texture2D(srcTex, vUv + vec2(pixelSize.x,pixelSize.y));\r\n\r\n vec4 horizEdge = - c00 - 2.0 * c01 - c02 + c20 + 2.0 * c21 + c22;\r\n vec4 vertEdge = - c00 - 2.0 * c10 - c20 + c02 + 2.0 * c12 + c22;\r\n\r\n vec4 grad = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\r\n gl_FragColor = grad;\r\n #endif\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/OutlineMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/Outline.frag +const Outline_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\nuniform sampler2D srcTex;\r\nuniform vec2 srcTexSize;\r\nuniform vec2 thickness;\r\nvarying vec2 vUv;\r\n\r\n#ifdef DEPTH_OUTLINE\r\n uniform sampler2D srcDepthTex; //depthTexture\r\n uniform vec3 color;\r\n uniform float threshold;\r\n#endif\r\n\r\nvoid main() {\r\n\r\n vec2 pixelSize = thickness / srcTexSize;\r\n\r\n #ifdef DEPTH_OUTLINE\r\n float c00 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,-pixelSize.y)).x;\r\n float c01 = texture2D(srcDepthTex, vUv + vec2(0,-pixelSize.y)).x;\r\n float c02 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,-pixelSize.y)).x;\r\n float c10 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,0)).x;\r\n float c12 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,0)).x;\r\n float c20 = texture2D(srcDepthTex, vUv + vec2(-pixelSize.x,pixelSize.y)).x;\r\n float c21 = texture2D(srcDepthTex, vUv + vec2(0,pixelSize.y)).x;\r\n float c22 = texture2D(srcDepthTex, vUv + vec2(pixelSize.x,pixelSize.y)).x;\r\n\r\n float horizEdge = - c00 - 2.0 * c01 - c02 + c20 + 2.0 * c21 + c22;\r\n float vertEdge = - c00 - 2.0 * c10 - c20 + c02 + 2.0 * c12 + c22;\r\n\r\n float grad = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\r\n\r\n gl_FragColor = ( grad > threshold ) ? vec4(color.rgb, 1.0) : gl_FragColor = texture2D(srcTex, vUv);\r\n\r\n #else\r\n vec4 c00 = texture2D(srcTex, vUv + vec2(-pixelSize.x,-pixelSize.y));\r\n vec4 c01 = texture2D(srcTex, vUv + vec2(0,-pixelSize.y));\r\n vec4 c02 = texture2D(srcTex, vUv + vec2(pixelSize.x,-pixelSize.y));\r\n vec4 c10 = texture2D(srcTex, vUv + vec2(-pixelSize.x,0));\r\n vec4 c12 = texture2D(srcTex, vUv + vec2(pixelSize.x,0));\r\n vec4 c20 = texture2D(srcTex, vUv + vec2(-pixelSize.x,pixelSize.y));\r\n vec4 c21 = texture2D(srcTex, vUv + vec2(0,pixelSize.y));\r\n vec4 c22 = texture2D(srcTex, vUv + vec2(pixelSize.x,pixelSize.y));\r\n\r\n vec4 horizEdge = - c00 - 2.0 * c01 - c02 + c20 + 2.0 * c21 + c22;\r\n vec4 vertEdge = - c00 - 2.0 * c10 - c20 + c02 + 2.0 * c12 + c22;\r\n\r\n vec4 grad = sqrt(horizEdge * horizEdge + vertEdge * vertEdge);\r\n gl_FragColor = grad;\r\n #endif\r\n}\r\n"; +;// ./src/gfx/shaders/OutlineMaterial.js @@ -30621,11 +30624,9 @@ class OutlineMaterial extends external_module_three_commonjs_three_commonjs2_thr } OutlineMaterial.prototype.depth = false; /* harmony default export */ const shaders_OutlineMaterial = (OutlineMaterial); -;// CONCATENATED MODULE: ./src/gfx/shaders/FXAA.frag -const FXAA_namespaceObject = "precision highp float;\r\n\r\n// edge end finding algorithm parameters\r\n#define FXAA_QUALITY_PS 8\r\n#define FXAA_QUALITY_P0 1.0\r\n#define FXAA_QUALITY_P1 1.5\r\n#define FXAA_QUALITY_P2 2.0\r\n#define FXAA_QUALITY_P3 2.0\r\n#define FXAA_QUALITY_P4 2.0\r\n#define FXAA_QUALITY_P5 2.0\r\n#define FXAA_QUALITY_P6 4.0\r\n#define FXAA_QUALITY_P7 12.0\r\n// constants\r\nfloat fxaaQualityEdgeThreshold = 0.125;\r\nfloat fxaaQualityEdgeThresholdMin = 0.0625;\r\nfloat fxaaQualitySubpix = 0.7; //0.65;\r\n// global params\r\nuniform sampler2D srcTex;\r\nuniform vec2 srcTexelSize;\r\nuniform vec3 bgColor;\r\n// from vs\r\nvarying vec2 vUv;\r\n//=====================================================================//\r\n// calc luminance from rgb\r\n//'float FxaaLuma(vec3 rgb) {return rgb.y * (0.587/0.299) + rgb.x; } // Lotte's idea about game luminance\r\nfloat FxaaLuma(vec3 rgb) {return dot(rgb, vec3(0.299, 0.587, 0.114)); } // real luminance calculation\r\n // for non-real scene rendering\r\n// texture sampling by pixel position(coords) and offset(in pixels)\r\n vec3 FxaaTex(sampler2D tex, vec2 pos, vec2 off, vec2 res ) {\r\n #ifdef BG_TRANSPARENT\r\n vec4 color = texture2D( tex, pos + off * res );\r\n return mix(color.rgb, bgColor, 1.0 - color.a);\r\n #else\r\n return texture2D( tex, pos + off * res ).xyz;\r\n #endif\r\n}\r\nvec3 FxaaTexTop(sampler2D tex, vec2 pos) {\r\n #ifdef BG_TRANSPARENT\r\n vec4 color = texture2D( tex, pos );\r\n return mix(color.rgb, bgColor, 1.0 - color.a);\r\n #else\r\n return texture2D( tex, pos).xyz;\r\n #endif\r\n}\r\nvec4 FxaaTexTopAlpha(sampler2D tex, vec2 pos) {\r\n return texture2D( tex, pos);\r\n}\r\n\r\n//=====================================================================//\r\nvoid main() {\r\n // renaming\r\n vec2 posM = vUv;\r\n // get luminance for neighbours\r\n float lumaS = FxaaLuma(FxaaTex(srcTex, posM, vec2( 0.0, 1.0 ), srcTexelSize));\r\n float lumaE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, 0.0 ), srcTexelSize));\r\n float lumaN = FxaaLuma(FxaaTex(srcTex, posM, vec2( 0.0, -1.0 ), srcTexelSize));\r\n float lumaW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, 0.0 ), srcTexelSize));\r\n float lumaM = FxaaLuma(FxaaTexTop(srcTex, posM));\r\n // find max and min luminance\r\n float rangeMax = max(max(lumaN, lumaW), max(lumaE, max(lumaS, lumaM)));\r\n float rangeMin = min(min(lumaN, lumaW), min(lumaE, min(lumaS, lumaM)));\r\n // calc maximum non-edge range\r\n float rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\r\n float range = rangeMax - rangeMin;\r\n float rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\r\n // exit when luma contrast is small (is not edge)\r\n if(range < rangeMaxClamped){\r\n gl_FragColor = FxaaTexTopAlpha(srcTex, posM);\r\n return;\r\n }\r\n float subpixRcpRange = 1.0/range;\r\n // note: the sampling coordinates can be calculated in vertex shader but the approach doesn't affect performance\r\n // visibly, thus we decided to leave calculation here for better readability.\r\n // calc other neighbours luminance\r\n float lumaNE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, -1.0 ), srcTexelSize));\r\n float lumaSW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, 1.0 ), srcTexelSize));\r\n float lumaSE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, 1.0 ), srcTexelSize));\r\n float lumaNW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, -1.0 ), srcTexelSize));\r\n/*--------------span calculation and subpix amount calulation-----------------*/\r\n float lumaNS = lumaN + lumaS;\r\n float lumaWE = lumaW + lumaE;\r\n float subpixNSWE = lumaNS + lumaWE;\r\n float edgeHorz1 = (-2.0 * lumaM) + lumaNS;\r\n float edgeVert1 = (-2.0 * lumaM) + lumaWE;\r\n/*--------------------------------------------------------------------------*/\r\n float lumaNESE = lumaNE + lumaSE;\r\n float lumaNWNE = lumaNW + lumaNE;\r\n float edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\r\n float edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\r\n/*--------------------------------------------------------------------------*/\r\n float lumaNWSW = lumaNW + lumaSW;\r\n float lumaSWSE = lumaSW + lumaSE;\r\n float edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\r\n float edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\r\n float edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\r\n float edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\r\n float edgeHorz = abs(edgeHorz3) + edgeHorz4;\r\n float edgeVert = abs(edgeVert3) + edgeVert4;\r\n/*--------------------subpix amount calulation------------------------------*/\r\n float subpixNWSWNESE = lumaNWSW + lumaNESE;\r\n float lengthSign = srcTexelSize.x;\r\n bool horzSpan = edgeHorz >= edgeVert;\r\n // debug code edge span visualization\r\n/*' if (horzSpan)\r\n gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);\r\n else\r\n gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\r\n return;*/\r\n float subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\r\n/*--------------------------------------------------------------------------*/\r\n if(!horzSpan) lumaN = lumaW;\r\n if(!horzSpan) lumaS = lumaE;\r\n if(horzSpan) lengthSign = srcTexelSize.y;\r\n float subpixB = (subpixA * (1.0/12.0)) - lumaM;\r\n/*--------------------------------------------------------------------------*/\r\n float gradientN = lumaN - lumaM;\r\n float gradientS = lumaS - lumaM;\r\n float lumaNN = lumaN + lumaM;\r\n float lumaSS = lumaS + lumaM;\r\n bool pairN = abs(gradientN) >= abs(gradientS);\r\n float gradient = max(abs(gradientN), abs(gradientS));\r\n if(pairN) lengthSign = -lengthSign;\r\n float subpixC = clamp(abs(subpixB) * subpixRcpRange, 0.0, 1.0);\r\n/*--------------------------------------------------------------------------*/\r\n vec2 posB;\r\n posB = posM;\r\n vec2 offNP;\r\n offNP.x = (!horzSpan) ? 0.0 : srcTexelSize.x;\r\n offNP.y = ( horzSpan) ? 0.0 : srcTexelSize.y;\r\n if(!horzSpan) posB.x += lengthSign * 0.5;\r\n if( horzSpan) posB.y += lengthSign * 0.5;\r\n/*--------------------------------------------------------------------------*/\r\n vec2 posN;\r\n posN = posB - offNP * FXAA_QUALITY_P0;\r\n vec2 posP;\r\n posP = posB + offNP * FXAA_QUALITY_P0;\r\n float subpixD = ((-2.0)*subpixC) + 3.0;\r\n float lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN));\r\n float subpixE = subpixC * subpixC;\r\n float lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP));\r\n/*--------------------------------------------------------------------------*/\r\n if(!pairN) lumaNN = lumaSS;\r\n float gradientScaled = gradient * 1.0/4.0;\r\n float lumaMM = lumaM - lumaNN * 0.5;\r\n float subpixF = subpixD * subpixE;\r\n bool lumaMLTZero = lumaMM < 0.0;\r\n/*---------------------looped edge-end search-------------------------------*/\r\n lumaEndN -= lumaNN * 0.5;\r\n lumaEndP -= lumaNN * 0.5;\r\n bool doneN = abs(lumaEndN) >= gradientScaled;\r\n bool doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P1;\r\n bool doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P1;\r\n/*--------------------------------------------------------------------------*/\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P2;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P2;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 3)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P3;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P3;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 4)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P4;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P4;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 5)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P5;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P5;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 6)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P6;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P6;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 7)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P7;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P7;\r\n/*--------------------------------------------------------------------------*/\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n/*----------------calculate subpix offset due to edge ends-------------------*/\r\n float dstN = posM.x - posN.x;\r\n float dstP = posP.x - posM.x;\r\n if(!horzSpan) dstN = posM.y - posN.y;\r\n if(!horzSpan) dstP = posP.y - posM.y;\r\n/*--------------------------------------------------------------------------*/\r\n bool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\r\n float spanLength = (dstP + dstN);\r\n bool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\r\n float spanLengthRcp = 1.0 / spanLength;\r\n/*--------------------------------------------------------------------------*/\r\n bool directionN = dstN < dstP;\r\n float dst = min(dstN, dstP);\r\n bool goodSpan = directionN ? goodSpanN : goodSpanP;\r\n float subpixG = subpixF * subpixF;\r\n float pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\r\n float subpixH = subpixG * fxaaQualitySubpix;\r\n/*-----------------calc texture offest using subpix-------------------------*/\r\n float pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\r\n float pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\r\n\r\n float offset = pixelOffsetSubpix * lengthSign;\r\n #ifdef BG_TRANSPARENT\r\n // get original texel\r\n vec4 rgbaA = FxaaTexTopAlpha(srcTex, posM);\r\n // calc step to blended texel\r\n vec2 step = sign((!horzSpan) ? vec2 (offset, 0.0) : vec2 (0.0, offset));\r\n // get neighboring texel\r\n vec4 rgbaB = FxaaTexTopAlpha(srcTex, posM + step * srcTexelSize);\r\n // calc blend factor from offset\r\n float f = (!horzSpan) ? offset / srcTexelSize.x : offset / srcTexelSize.y;\r\n f = abs(f);\r\n // calc alpha (special formula to emulate blending with bg)\r\n gl_FragColor.a = 1.0 - mix(1.0 - rgbaA.a, 1.0 - rgbaB.a, f);\r\n // calc color (special formula to emulate blending with bg)\r\n gl_FragColor.rgb = mix(rgbaA.rgb * rgbaA.a, rgbaB.rgb * rgbaB.a, f) / gl_FragColor.a;\r\n #else\r\n if(!horzSpan) {\r\n posM.x += offset;\r\n } else {\r\n posM.y += offset;\r\n }\r\n gl_FragColor = FxaaTexTopAlpha(srcTex, posM);\r\n #endif\r\n return;\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/FXAAMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/FXAA.frag +const FXAA_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\n// edge end finding algorithm parameters\r\n#define FXAA_QUALITY_PS 8\r\n#define FXAA_QUALITY_P0 1.0\r\n#define FXAA_QUALITY_P1 1.5\r\n#define FXAA_QUALITY_P2 2.0\r\n#define FXAA_QUALITY_P3 2.0\r\n#define FXAA_QUALITY_P4 2.0\r\n#define FXAA_QUALITY_P5 2.0\r\n#define FXAA_QUALITY_P6 4.0\r\n#define FXAA_QUALITY_P7 12.0\r\n// constants\r\nfloat fxaaQualityEdgeThreshold = 0.125;\r\nfloat fxaaQualityEdgeThresholdMin = 0.0625;\r\nfloat fxaaQualitySubpix = 0.7; //0.65;\r\n// global params\r\nuniform sampler2D srcTex;\r\nuniform vec2 srcTexelSize;\r\nuniform vec3 bgColor;\r\n// from vs\r\nvarying vec2 vUv;\r\n//=====================================================================//\r\n// calc luminance from rgb\r\n//'float FxaaLuma(vec3 rgb) {return rgb.y * (0.587/0.299) + rgb.x; } // Lotte's idea about game luminance\r\nfloat FxaaLuma(vec3 rgb) {return dot(rgb, vec3(0.299, 0.587, 0.114)); } // real luminance calculation\r\n // for non-real scene rendering\r\n// texture sampling by pixel position(coords) and offset(in pixels)\r\n vec3 FxaaTex(sampler2D tex, vec2 pos, vec2 off, vec2 res ) {\r\n #ifdef BG_TRANSPARENT\r\n vec4 color = texture2D( tex, pos + off * res );\r\n return mix(color.rgb, bgColor, 1.0 - color.a);\r\n #else\r\n return texture2D( tex, pos + off * res ).xyz;\r\n #endif\r\n}\r\nvec3 FxaaTexTop(sampler2D tex, vec2 pos) {\r\n #ifdef BG_TRANSPARENT\r\n vec4 color = texture2D( tex, pos );\r\n return mix(color.rgb, bgColor, 1.0 - color.a);\r\n #else\r\n return texture2D( tex, pos).xyz;\r\n #endif\r\n}\r\nvec4 FxaaTexTopAlpha(sampler2D tex, vec2 pos) {\r\n return texture2D( tex, pos);\r\n}\r\n\r\n//=====================================================================//\r\nvoid main() {\r\n // renaming\r\n vec2 posM = vUv;\r\n // get luminance for neighbours\r\n float lumaS = FxaaLuma(FxaaTex(srcTex, posM, vec2( 0.0, 1.0 ), srcTexelSize));\r\n float lumaE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, 0.0 ), srcTexelSize));\r\n float lumaN = FxaaLuma(FxaaTex(srcTex, posM, vec2( 0.0, -1.0 ), srcTexelSize));\r\n float lumaW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, 0.0 ), srcTexelSize));\r\n float lumaM = FxaaLuma(FxaaTexTop(srcTex, posM));\r\n // find max and min luminance\r\n float rangeMax = max(max(lumaN, lumaW), max(lumaE, max(lumaS, lumaM)));\r\n float rangeMin = min(min(lumaN, lumaW), min(lumaE, min(lumaS, lumaM)));\r\n // calc maximum non-edge range\r\n float rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\r\n float range = rangeMax - rangeMin;\r\n float rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\r\n // exit when luma contrast is small (is not edge)\r\n if(range < rangeMaxClamped){\r\n gl_FragColor = FxaaTexTopAlpha(srcTex, posM);\r\n return;\r\n }\r\n float subpixRcpRange = 1.0/range;\r\n // note: the sampling coordinates can be calculated in vertex shader but the approach doesn't affect performance\r\n // visibly, thus we decided to leave calculation here for better readability.\r\n // calc other neighbours luminance\r\n float lumaNE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, -1.0 ), srcTexelSize));\r\n float lumaSW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, 1.0 ), srcTexelSize));\r\n float lumaSE = FxaaLuma(FxaaTex(srcTex, posM, vec2( 1.0, 1.0 ), srcTexelSize));\r\n float lumaNW = FxaaLuma(FxaaTex(srcTex, posM, vec2( -1.0, -1.0 ), srcTexelSize));\r\n/*--------------span calculation and subpix amount calulation-----------------*/\r\n float lumaNS = lumaN + lumaS;\r\n float lumaWE = lumaW + lumaE;\r\n float subpixNSWE = lumaNS + lumaWE;\r\n float edgeHorz1 = (-2.0 * lumaM) + lumaNS;\r\n float edgeVert1 = (-2.0 * lumaM) + lumaWE;\r\n/*--------------------------------------------------------------------------*/\r\n float lumaNESE = lumaNE + lumaSE;\r\n float lumaNWNE = lumaNW + lumaNE;\r\n float edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\r\n float edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\r\n/*--------------------------------------------------------------------------*/\r\n float lumaNWSW = lumaNW + lumaSW;\r\n float lumaSWSE = lumaSW + lumaSE;\r\n float edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\r\n float edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\r\n float edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\r\n float edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\r\n float edgeHorz = abs(edgeHorz3) + edgeHorz4;\r\n float edgeVert = abs(edgeVert3) + edgeVert4;\r\n/*--------------------subpix amount calulation------------------------------*/\r\n float subpixNWSWNESE = lumaNWSW + lumaNESE;\r\n float lengthSign = srcTexelSize.x;\r\n bool horzSpan = edgeHorz >= edgeVert;\r\n // debug code edge span visualization\r\n/*' if (horzSpan)\r\n gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);\r\n else\r\n gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\r\n return;*/\r\n float subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\r\n/*--------------------------------------------------------------------------*/\r\n if(!horzSpan) lumaN = lumaW;\r\n if(!horzSpan) lumaS = lumaE;\r\n if(horzSpan) lengthSign = srcTexelSize.y;\r\n float subpixB = (subpixA * (1.0/12.0)) - lumaM;\r\n/*--------------------------------------------------------------------------*/\r\n float gradientN = lumaN - lumaM;\r\n float gradientS = lumaS - lumaM;\r\n float lumaNN = lumaN + lumaM;\r\n float lumaSS = lumaS + lumaM;\r\n bool pairN = abs(gradientN) >= abs(gradientS);\r\n float gradient = max(abs(gradientN), abs(gradientS));\r\n if(pairN) lengthSign = -lengthSign;\r\n float subpixC = clamp(abs(subpixB) * subpixRcpRange, 0.0, 1.0);\r\n/*--------------------------------------------------------------------------*/\r\n vec2 posB;\r\n posB = posM;\r\n vec2 offNP;\r\n offNP.x = (!horzSpan) ? 0.0 : srcTexelSize.x;\r\n offNP.y = ( horzSpan) ? 0.0 : srcTexelSize.y;\r\n if(!horzSpan) posB.x += lengthSign * 0.5;\r\n if( horzSpan) posB.y += lengthSign * 0.5;\r\n/*--------------------------------------------------------------------------*/\r\n vec2 posN;\r\n posN = posB - offNP * FXAA_QUALITY_P0;\r\n vec2 posP;\r\n posP = posB + offNP * FXAA_QUALITY_P0;\r\n float subpixD = ((-2.0)*subpixC) + 3.0;\r\n float lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN));\r\n float subpixE = subpixC * subpixC;\r\n float lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP));\r\n/*--------------------------------------------------------------------------*/\r\n if(!pairN) lumaNN = lumaSS;\r\n float gradientScaled = gradient * 1.0/4.0;\r\n float lumaMM = lumaM - lumaNN * 0.5;\r\n float subpixF = subpixD * subpixE;\r\n bool lumaMLTZero = lumaMM < 0.0;\r\n/*---------------------looped edge-end search-------------------------------*/\r\n lumaEndN -= lumaNN * 0.5;\r\n lumaEndP -= lumaNN * 0.5;\r\n bool doneN = abs(lumaEndN) >= gradientScaled;\r\n bool doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P1;\r\n bool doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P1;\r\n/*--------------------------------------------------------------------------*/\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P2;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P2;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 3)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P3;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P3;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 4)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P4;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P4;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 5)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P5;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P5;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 6)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P6;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P6;\r\n/*--------------------------------------------------------------------------*/\r\n #if (FXAA_QUALITY_PS > 7)\r\n if(doneNP) {\r\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(srcTex, posN.xy));\r\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(srcTex, posP.xy));\r\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\r\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\r\n doneN = abs(lumaEndN) >= gradientScaled;\r\n doneP = abs(lumaEndP) >= gradientScaled;\r\n if(!doneN) posN -= offNP * FXAA_QUALITY_P7;\r\n doneNP = (!doneN) || (!doneP);\r\n if(!doneP) posP += offNP * FXAA_QUALITY_P7;\r\n/*--------------------------------------------------------------------------*/\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n #endif\r\n }\r\n/*----------------calculate subpix offset due to edge ends-------------------*/\r\n float dstN = posM.x - posN.x;\r\n float dstP = posP.x - posM.x;\r\n if(!horzSpan) dstN = posM.y - posN.y;\r\n if(!horzSpan) dstP = posP.y - posM.y;\r\n/*--------------------------------------------------------------------------*/\r\n bool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\r\n float spanLength = (dstP + dstN);\r\n bool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\r\n float spanLengthRcp = 1.0 / spanLength;\r\n/*--------------------------------------------------------------------------*/\r\n bool directionN = dstN < dstP;\r\n float dst = min(dstN, dstP);\r\n bool goodSpan = directionN ? goodSpanN : goodSpanP;\r\n float subpixG = subpixF * subpixF;\r\n float pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\r\n float subpixH = subpixG * fxaaQualitySubpix;\r\n/*-----------------calc texture offest using subpix-------------------------*/\r\n float pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\r\n float pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\r\n\r\n float offset = pixelOffsetSubpix * lengthSign;\r\n #ifdef BG_TRANSPARENT\r\n // get original texel\r\n vec4 rgbaA = FxaaTexTopAlpha(srcTex, posM);\r\n // calc step to blended texel\r\n vec2 step = sign((!horzSpan) ? vec2 (offset, 0.0) : vec2 (0.0, offset));\r\n // get neighboring texel\r\n vec4 rgbaB = FxaaTexTopAlpha(srcTex, posM + step * srcTexelSize);\r\n // calc blend factor from offset\r\n float f = (!horzSpan) ? offset / srcTexelSize.x : offset / srcTexelSize.y;\r\n f = abs(f);\r\n // calc alpha (special formula to emulate blending with bg)\r\n gl_FragColor.a = 1.0 - mix(1.0 - rgbaA.a, 1.0 - rgbaB.a, f);\r\n // calc color (special formula to emulate blending with bg)\r\n gl_FragColor.rgb = mix(rgbaA.rgb * rgbaA.a, rgbaB.rgb * rgbaB.a, f) / gl_FragColor.a;\r\n #else\r\n if(!horzSpan) {\r\n posM.x += offset;\r\n } else {\r\n posM.y += offset;\r\n }\r\n gl_FragColor = FxaaTexTopAlpha(srcTex, posM);\r\n #endif\r\n return;\r\n}\r\n"; +;// ./src/gfx/shaders/FXAAMaterial.js @@ -30678,11 +30679,9 @@ class FXAAMaterial extends external_module_three_commonjs_three_commonjs2_three_ } FXAAMaterial.prototype.bgTransparent = false; /* harmony default export */ const shaders_FXAAMaterial = (FXAAMaterial); -;// CONCATENATED MODULE: ./src/gfx/shaders/AO.frag -const AO_namespaceObject = "precision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 32\r\nuniform vec3 samplesKernel[MAX_SAMPLES_COUNT];\r\nuniform sampler2D noiseTexture;\r\nuniform vec2 noiseTexelSize;\r\nuniform sampler2D diffuseTexture;\r\nuniform sampler2D depthTexture;\r\nuniform sampler2D normalTexture;\r\nuniform vec2 srcTexelSize;\r\nuniform vec2 camNearFar;\r\nuniform mat4 projMatrix;\r\n\r\nuniform float aspectRatio;\r\nuniform float tanHalfFOV;\r\n\r\nuniform float kernelRadius;\r\nuniform float depthThreshold;\r\nuniform float factor;\r\n\r\nvarying vec2 vUv;\r\n\r\nfloat CalcViewZ(vec2 screenPos)\r\n{\r\n float depth = texture2D(depthTexture, screenPos).x;\r\n // [0, 1]->[-1, 1]\r\n float clipedZ = 2.0 * depth - 1.0;\r\n // see THREE.js camera.makeFrustum for projection details\r\n return (-projMatrix[3][2] / (clipedZ + projMatrix[2][2]));\r\n}\r\n\r\nvec3 ViewPosFromDepth(vec2 screenPos)\r\n{\r\n vec3 viewPos;\r\n viewPos.z = CalcViewZ(screenPos);\r\n //[0, 1]->[-1, 1]\r\n vec2 projPos = 2.0 * screenPos - 1.0;\r\n // reconstruct viewposition in right-handed sc with z to viewer\r\n viewPos.xy = vec2(\r\n projPos.x * aspectRatio * tanHalfFOV * abs(viewPos.z),\r\n projPos.y * tanHalfFOV * abs(viewPos.z)\r\n );\r\n return viewPos;\r\n}\r\n\r\nvoid main() {\r\n vec3 viewPos = ViewPosFromDepth(vUv);\r\n // remap coordinates to prevent noise exture rescale\r\n vec2 vUvNoise = vUv / srcTexelSize * noiseTexelSize;\r\n vec4 normalData = texture2D(normalTexture, vUv);\r\n // return for background fragments (their normals are zero vectors)\r\n if (length(normalData.rgb) < EPSILON) {\r\n // 0.0 in alpha component means that it is background fragment\r\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\r\n return;\r\n }\r\n //[0, 1] -> [-1, 1]\r\n vec3 normal = (normalData.rgb * 2.0 - 1.0);\r\n // normalData.a store 1.0 if normal was build for frontfaced surface\r\n // and 0.0 in other case\r\n if (normalData.a < EPSILON) {\r\n normal *= -1.0;\r\n }\r\n // get random vector for sampling sphere rotation\r\n vec3 randN = texture2D(noiseTexture, vUvNoise).rgb * 2.0 - 1.0;\r\n randN = normalize(randN);\r\n // build TBN (randomly rotated around normal)\r\n vec3 tangent = normalize(randN - normal * dot(randN, normal));\r\n vec3 bitangent = cross(tangent, normal);\r\n mat3 TBN = mat3(tangent, bitangent, normal);\r\n // calc AO value\r\n float AO = 0.0;\r\n for (int i = 0 ; i < MAX_SAMPLES_COUNT ; i++) {\r\n // rotate sampling kernel around normal\r\n vec3 reflectedSample = TBN * samplesKernel[i];\r\n // get sample\r\n vec3 samplePos = viewPos + reflectedSample * kernelRadius;\r\n\r\n // project sample to screen to get sample's screen pos\r\n vec4 SampleScrPos = vec4(samplePos, 1.0);\r\n // eye -> clip\r\n SampleScrPos = projMatrix * SampleScrPos;\r\n // normalize\r\n SampleScrPos.xy /= SampleScrPos.w;\r\n //[-1, 1] -> [0, 1]\r\n SampleScrPos.xy = (SampleScrPos.xy + vec2(1.0)) * 0.5;\r\n\r\n // get view z for sample projected to the objct surface\r\n float sampleDepth = CalcViewZ(SampleScrPos.xy);\r\n // calc occlusion made by object surface at the sample\r\n AO += step(samplePos.z, sampleDepth);\r\n }\r\n // calc result AO-map color\r\n AO = 1.0 - max(0.0, AO / float(MAX_SAMPLES_COUNT) * factor);\r\n // write value to AO-map\r\n gl_FragColor = vec4(AO, AO, AO, 1.0);\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/AOMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/AO.frag +const AO_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 32\r\nuniform vec3 samplesKernel[MAX_SAMPLES_COUNT];\r\nuniform sampler2D noiseTexture;\r\nuniform vec2 noiseTexelSize;\r\nuniform sampler2D diffuseTexture;\r\nuniform sampler2D depthTexture;\r\nuniform sampler2D normalTexture;\r\nuniform vec2 srcTexelSize;\r\nuniform vec2 camNearFar;\r\nuniform mat4 projMatrix;\r\n\r\nuniform float aspectRatio;\r\nuniform float tanHalfFOV;\r\n\r\nuniform float kernelRadius;\r\nuniform float depthThreshold;\r\nuniform float factor;\r\n\r\nvarying vec2 vUv;\r\n\r\nfloat CalcViewZ(vec2 screenPos)\r\n{\r\n float depth = texture2D(depthTexture, screenPos).x;\r\n // [0, 1]->[-1, 1]\r\n float clipedZ = 2.0 * depth - 1.0;\r\n // see THREE.js camera.makeFrustum for projection details\r\n return (-projMatrix[3][2] / (clipedZ + projMatrix[2][2]));\r\n}\r\n\r\nvec3 ViewPosFromDepth(vec2 screenPos)\r\n{\r\n vec3 viewPos;\r\n viewPos.z = CalcViewZ(screenPos);\r\n //[0, 1]->[-1, 1]\r\n vec2 projPos = 2.0 * screenPos - 1.0;\r\n // reconstruct viewposition in right-handed sc with z to viewer\r\n viewPos.xy = vec2(\r\n projPos.x * aspectRatio * tanHalfFOV * abs(viewPos.z),\r\n projPos.y * tanHalfFOV * abs(viewPos.z)\r\n );\r\n return viewPos;\r\n}\r\n\r\nvoid main() {\r\n vec3 viewPos = ViewPosFromDepth(vUv);\r\n // remap coordinates to prevent noise exture rescale\r\n vec2 vUvNoise = vUv / srcTexelSize * noiseTexelSize;\r\n vec4 normalData = texture2D(normalTexture, vUv);\r\n // return for background fragments (their normals are zero vectors)\r\n if (length(normalData.rgb) < EPSILON) {\r\n // 0.0 in alpha component means that it is background fragment\r\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\r\n return;\r\n }\r\n //[0, 1] -> [-1, 1]\r\n vec3 normal = (normalData.rgb * 2.0 - 1.0);\r\n // normalData.a store 1.0 if normal was build for frontfaced surface\r\n // and 0.0 in other case\r\n if (normalData.a < EPSILON) {\r\n normal *= -1.0;\r\n }\r\n // get random vector for sampling sphere rotation\r\n vec3 randN = texture2D(noiseTexture, vUvNoise).rgb * 2.0 - 1.0;\r\n randN = normalize(randN);\r\n // build TBN (randomly rotated around normal)\r\n vec3 tangent = normalize(randN - normal * dot(randN, normal));\r\n vec3 bitangent = cross(tangent, normal);\r\n mat3 TBN = mat3(tangent, bitangent, normal);\r\n // calc AO value\r\n float AO = 0.0;\r\n for (int i = 0 ; i < MAX_SAMPLES_COUNT ; i++) {\r\n // rotate sampling kernel around normal\r\n vec3 reflectedSample = TBN * samplesKernel[i];\r\n // get sample\r\n vec3 samplePos = viewPos + reflectedSample * kernelRadius;\r\n\r\n // project sample to screen to get sample's screen pos\r\n vec4 SampleScrPos = vec4(samplePos, 1.0);\r\n // eye -> clip\r\n SampleScrPos = projMatrix * SampleScrPos;\r\n // normalize\r\n SampleScrPos.xy /= SampleScrPos.w;\r\n //[-1, 1] -> [0, 1]\r\n SampleScrPos.xy = (SampleScrPos.xy + vec2(1.0)) * 0.5;\r\n\r\n // get view z for sample projected to the objct surface\r\n float sampleDepth = CalcViewZ(SampleScrPos.xy);\r\n // calc occlusion made by object surface at the sample\r\n AO += step(samplePos.z, sampleDepth);\r\n }\r\n // calc result AO-map color\r\n AO = 1.0 - max(0.0, AO / float(MAX_SAMPLES_COUNT) * factor);\r\n // write value to AO-map\r\n gl_FragColor = vec4(AO, AO, AO, 1.0);\r\n}\r\n"; +;// ./src/gfx/shaders/AOMaterial.js @@ -30763,11 +30762,9 @@ class AOMaterial extends external_module_three_commonjs_three_commonjs2_three_am } } /* harmony default export */ const shaders_AOMaterial = (AOMaterial); -;// CONCATENATED MODULE: ./src/gfx/shaders/AOHorBlur.frag -const AOHorBlur_namespaceObject = "precision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 5\r\nuniform float samplesOffsets[MAX_SAMPLES_COUNT];\r\nuniform sampler2D aoMap;\r\nuniform sampler2D depthTexture;\r\nuniform vec2 srcTexelSize;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n float x = vUv.x;\r\n float y = vUv.y;\r\n vec4 res = vec4(0.0);\r\n res.a = texture2D(aoMap, vec2(x, y )).a;\r\n // return for background fragments (0.0 in alpha component means that it is background fragment)\r\n if (res.a < EPSILON) {\r\n gl_FragColor = res;\r\n return;\r\n }\r\n\r\n float pixelDepth = texture2D(depthTexture, vec2(x, y)).x;\r\n float weightSum = 0.0;\r\n for (int i = 0; i < MAX_SAMPLES_COUNT; ++i) {\r\n if (texture2D(aoMap, vec2(x + samplesOffsets[i] * srcTexelSize.x, y )).a < EPSILON) {\r\n continue;\r\n }\r\n vec2 samplePos = vec2(x + samplesOffsets[i] * srcTexelSize.x, y);\r\n float depth = texture2D(depthTexture, samplePos).x;\r\n float weight = (1.0 / (0.0001 + abs(depth - pixelDepth)));\r\n res.rgb += texture2D(aoMap, vec2(x + samplesOffsets[i] * srcTexelSize.x, y )).rgb * weight;\r\n weightSum += weight;\r\n }\r\n res.rgb = res.rgb / weightSum;\r\n gl_FragColor = res;\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/AOHorBlurMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/AOHorBlur.frag +const AOHorBlur_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 5\r\nuniform float samplesOffsets[MAX_SAMPLES_COUNT];\r\nuniform sampler2D aoMap;\r\nuniform sampler2D depthTexture;\r\nuniform vec2 srcTexelSize;\r\n\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n float x = vUv.x;\r\n float y = vUv.y;\r\n vec4 res = vec4(0.0);\r\n res.a = texture2D(aoMap, vec2(x, y )).a;\r\n // return for background fragments (0.0 in alpha component means that it is background fragment)\r\n if (res.a < EPSILON) {\r\n gl_FragColor = res;\r\n return;\r\n }\r\n\r\n float pixelDepth = texture2D(depthTexture, vec2(x, y)).x;\r\n float weightSum = 0.0;\r\n for (int i = 0; i < MAX_SAMPLES_COUNT; ++i) {\r\n if (texture2D(aoMap, vec2(x + samplesOffsets[i] * srcTexelSize.x, y )).a < EPSILON) {\r\n continue;\r\n }\r\n vec2 samplePos = vec2(x + samplesOffsets[i] * srcTexelSize.x, y);\r\n float depth = texture2D(depthTexture, samplePos).x;\r\n float weight = (1.0 / (0.0001 + abs(depth - pixelDepth)));\r\n res.rgb += texture2D(aoMap, vec2(x + samplesOffsets[i] * srcTexelSize.x, y )).rgb * weight;\r\n weightSum += weight;\r\n }\r\n res.rgb = res.rgb / weightSum;\r\n gl_FragColor = res;\r\n}\r\n"; +;// ./src/gfx/shaders/AOHorBlurMaterial.js @@ -30805,11 +30802,9 @@ class AOHorBlurMaterial extends external_module_three_commonjs_three_commonjs2_t } } /* harmony default export */ const shaders_AOHorBlurMaterial = (AOHorBlurMaterial); -;// CONCATENATED MODULE: ./src/gfx/shaders/AOVertBlurWithBlend.frag -const AOVertBlurWithBlend_namespaceObject = "precision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 5\r\nuniform float samplesOffsets[MAX_SAMPLES_COUNT];\r\nuniform sampler2D diffuseTexture;\r\nuniform sampler2D aoMap;\r\nuniform sampler2D depthTexture;\r\nuniform vec2 srcTexelSize;\r\n\r\nuniform mat4 projMatrix;\r\nuniform float aspectRatio;\r\nuniform float tanHalfFOV;\r\n\r\n#ifdef USE_FOG\r\n uniform vec2 fogNearFar;\r\n uniform vec4 fogColor;\r\n#endif\r\nvarying vec2 vUv;\r\n\r\nfloat CalcViewZ(vec2 screenPos)\r\n{\r\n float depth = texture2D(depthTexture, screenPos).x;\r\n // [0, 1]->[-1, 1]\r\n float clipedZ = 2.0 * depth - 1.0;\r\n // see THREE.js camera.makeFrustum for projection details\r\n return (-projMatrix[3][2] / (clipedZ + projMatrix[2][2]));\r\n}\r\n\r\nvec3 ViewPosFromDepth(vec2 screenPos)\r\n{\r\n vec3 viewPos;\r\n viewPos.z = CalcViewZ(screenPos);\r\n //[0, 1]->[-1, 1]\r\n vec2 projPos = 2.0 * screenPos - 1.0;\r\n // reconstruct viewposition in right-handed sc with z to viewer\r\n viewPos.xy = vec2(\r\n projPos.x * aspectRatio * tanHalfFOV * abs(viewPos.z),\r\n projPos.y * tanHalfFOV * abs(viewPos.z)\r\n );\r\n return viewPos;\r\n}\r\n\r\nvoid main() {\r\n vec3 viewPos = ViewPosFromDepth(vUv);\r\n float x = vUv.x;\r\n float y = vUv.y;\r\n vec4 color = texture2D(diffuseTexture, vec2(x, y));\r\n vec4 res = vec4(0.0);\r\n res.a = texture2D(aoMap, vec2(x, y )).a;\r\n // return for background fragments (0.0 in alpha component means that it is background fragment)\r\n if (res.a < EPSILON) {\r\n gl_FragColor = color;\r\n return;\r\n }\r\n\r\n float pixelDepth = texture2D(depthTexture, vec2(x, y)).x;\r\n float weightSum = 0.0;\r\n for (int i = 0; i < MAX_SAMPLES_COUNT; ++i) {\r\n if (texture2D(aoMap, vec2(x, y + samplesOffsets[i] * srcTexelSize.y)).a < EPSILON) {\r\n continue;\r\n }\r\n vec2 samplePos = vec2(x, y + samplesOffsets[i] * srcTexelSize.y);\r\n float depth = texture2D(depthTexture, samplePos).x;\r\n float weight = (1.0 / (0.0001 + abs(depth - pixelDepth)));\r\n res.rgb += texture2D(aoMap, vec2(x, y + samplesOffsets[i] * srcTexelSize.y)).rgb * weight;\r\n weightSum += weight;\r\n }\r\n res.rgb /= weightSum;\r\n\r\n #if defined(USE_FOG) && !defined(FOG_TRANSPARENT)\r\n // Add fog to the result value\r\n // Proper way to get an image with fog and ao requires formula:\r\n // gl_FragColor = fragColor*AO*(1-fogFactor) + fogColor*fogFactor\r\n // But we have already fogged molecule to add AO too. Let's split the straight formula into our real steps!\r\n // We have: AO, fogFactor, fogColor,\r\n // color = fragColor*(1-fogFactor) + fogColor*fogFactor (it comes from diffuseTexture,\r\n // where molecule has been already drawn with fog)\r\n // Transform:\r\n // fragColor*AO*(1-fogFactor) + fogColor*fogFactor =\r\n // = [fragColor*(1-fogFactor) = color - fogColor*fogFactor] =\r\n // = (color - fogColor*fogFactor)*AO + fogColor*fogFactor =\r\n // = color*AO + fogColor*fogFactor*(1 - AO)\r\n // Result: gl_FragColor = color*AO + fogColor*fogFactor*(1 - AO)\r\n float fogFactor = smoothstep(fogNearFar.x, fogNearFar.y, - viewPos.z) * fogColor.a;\r\n gl_FragColor.rgb = color.rgb * res.rgb + fogColor.rgb * fogFactor *(vec3(1.0, 1.0, 1.0) - res.rgb);\r\n #else\r\n gl_FragColor.rgb = color.rgb * res.rgb;\r\n #endif\r\n gl_FragColor.a = color.a;\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/AOVertBlurWithBlendMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/AOVertBlurWithBlend.frag +const AOVertBlurWithBlend_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n#define EPSILON 0.0000001\r\n\r\n#define MAX_SAMPLES_COUNT 5\r\nuniform float samplesOffsets[MAX_SAMPLES_COUNT];\r\nuniform sampler2D diffuseTexture;\r\nuniform sampler2D aoMap;\r\nuniform sampler2D depthTexture;\r\nuniform vec2 srcTexelSize;\r\n\r\nuniform mat4 projMatrix;\r\nuniform float aspectRatio;\r\nuniform float tanHalfFOV;\r\n\r\n#ifdef USE_FOG\r\n uniform vec2 fogNearFar;\r\n uniform vec4 fogColor;\r\n#endif\r\nvarying vec2 vUv;\r\n\r\nfloat CalcViewZ(vec2 screenPos)\r\n{\r\n float depth = texture2D(depthTexture, screenPos).x;\r\n // [0, 1]->[-1, 1]\r\n float clipedZ = 2.0 * depth - 1.0;\r\n // see THREE.js camera.makeFrustum for projection details\r\n return (-projMatrix[3][2] / (clipedZ + projMatrix[2][2]));\r\n}\r\n\r\nvec3 ViewPosFromDepth(vec2 screenPos)\r\n{\r\n vec3 viewPos;\r\n viewPos.z = CalcViewZ(screenPos);\r\n //[0, 1]->[-1, 1]\r\n vec2 projPos = 2.0 * screenPos - 1.0;\r\n // reconstruct viewposition in right-handed sc with z to viewer\r\n viewPos.xy = vec2(\r\n projPos.x * aspectRatio * tanHalfFOV * abs(viewPos.z),\r\n projPos.y * tanHalfFOV * abs(viewPos.z)\r\n );\r\n return viewPos;\r\n}\r\n\r\nvoid main() {\r\n vec3 viewPos = ViewPosFromDepth(vUv);\r\n float x = vUv.x;\r\n float y = vUv.y;\r\n vec4 color = texture2D(diffuseTexture, vec2(x, y));\r\n vec4 res = vec4(0.0);\r\n res.a = texture2D(aoMap, vec2(x, y )).a;\r\n // return for background fragments (0.0 in alpha component means that it is background fragment)\r\n if (res.a < EPSILON) {\r\n gl_FragColor = color;\r\n return;\r\n }\r\n\r\n float pixelDepth = texture2D(depthTexture, vec2(x, y)).x;\r\n float weightSum = 0.0;\r\n for (int i = 0; i < MAX_SAMPLES_COUNT; ++i) {\r\n if (texture2D(aoMap, vec2(x, y + samplesOffsets[i] * srcTexelSize.y)).a < EPSILON) {\r\n continue;\r\n }\r\n vec2 samplePos = vec2(x, y + samplesOffsets[i] * srcTexelSize.y);\r\n float depth = texture2D(depthTexture, samplePos).x;\r\n float weight = (1.0 / (0.0001 + abs(depth - pixelDepth)));\r\n res.rgb += texture2D(aoMap, vec2(x, y + samplesOffsets[i] * srcTexelSize.y)).rgb * weight;\r\n weightSum += weight;\r\n }\r\n res.rgb /= weightSum;\r\n\r\n #if defined(USE_FOG) && !defined(FOG_TRANSPARENT)\r\n // Add fog to the result value\r\n // Proper way to get an image with fog and ao requires formula:\r\n // gl_FragColor = fragColor*AO*(1-fogFactor) + fogColor*fogFactor\r\n // But we have already fogged molecule to add AO too. Let's split the straight formula into our real steps!\r\n // We have: AO, fogFactor, fogColor,\r\n // color = fragColor*(1-fogFactor) + fogColor*fogFactor (it comes from diffuseTexture,\r\n // where molecule has been already drawn with fog)\r\n // Transform:\r\n // fragColor*AO*(1-fogFactor) + fogColor*fogFactor =\r\n // = [fragColor*(1-fogFactor) = color - fogColor*fogFactor] =\r\n // = (color - fogColor*fogFactor)*AO + fogColor*fogFactor =\r\n // = color*AO + fogColor*fogFactor*(1 - AO)\r\n // Result: gl_FragColor = color*AO + fogColor*fogFactor*(1 - AO)\r\n float fogFactor = smoothstep(fogNearFar.x, fogNearFar.y, - viewPos.z) * fogColor.a;\r\n gl_FragColor.rgb = color.rgb * res.rgb + fogColor.rgb * fogFactor *(vec3(1.0, 1.0, 1.0) - res.rgb);\r\n #else\r\n gl_FragColor.rgb = color.rgb * res.rgb;\r\n #endif\r\n gl_FragColor.a = color.a;\r\n}\r\n"; +;// ./src/gfx/shaders/AOVertBlurWithBlendMaterial.js @@ -30891,11 +30886,9 @@ class AOVertBlurWithBlendMaterial extends external_module_three_commonjs_three_c AOVertBlurWithBlendMaterial.prototype.useFog = true; AOVertBlurWithBlendMaterial.prototype.fogTransparent = false; /* harmony default export */ const shaders_AOVertBlurWithBlendMaterial = (AOVertBlurWithBlendMaterial); -;// CONCATENATED MODULE: ./src/gfx/shaders/Anaglyph.frag -const Anaglyph_namespaceObject = "precision highp float;\r\n\r\nuniform sampler2D srcL;\r\nuniform sampler2D srcR;\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n vec4 l = texture2D(srcL, vUv);\r\n vec4 r = texture2D(srcR, vUv);\r\n gl_FragColor = vec4(l.r, r.g, r.b, 1.0);\r\n}\r\n"; -;// CONCATENATED MODULE: ./src/gfx/shaders/AnaglyphMaterial.js -/* eslint-disable no-magic-numbers */ -/* eslint-disable guard-for-in */ +;// ./src/gfx/shaders/Anaglyph.frag +const Anaglyph_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\nuniform sampler2D srcL;\r\nuniform sampler2D srcR;\r\nvarying vec2 vUv;\r\n\r\nvoid main() {\r\n vec4 l = texture2D(srcL, vUv);\r\n vec4 r = texture2D(srcR, vUv);\r\n gl_FragColor = vec4(l.r, r.g, r.b, 1.0);\r\n}\r\n"; +;// ./src/gfx/shaders/AnaglyphMaterial.js @@ -30923,7 +30916,7 @@ class AnaglyphMaterial extends external_module_three_commonjs_three_commonjs2_th } } /* harmony default export */ const shaders_AnaglyphMaterial = (AnaglyphMaterial); -;// CONCATENATED MODULE: ./src/gfx/ViewInterpolator.js +;// ./src/gfx/ViewInterpolator.js class View { @@ -31005,7 +30998,7 @@ class ViewInterpolator { return new View(); } } -;// CONCATENATED MODULE: ./src/utils/Cookies.js +;// ./src/utils/Cookies.js const MAX_COOKIE_LEN = 4000; @@ -31028,7 +31021,7 @@ function _chunkString(string, chunkLen) { */ function Cookies(context, opts) { this.context = context; - this._opts = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].merge({ + this._opts = __WEBPACK_EXTERNAL_MODULE_lodash_default__.merge({ path: '/' }, opts); } @@ -31114,7 +31107,7 @@ Cookies.prototype._exists = function (key) { return document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`)); }; /* harmony default export */ const utils_Cookies = (Cookies); -;// CONCATENATED MODULE: ./src/gfx/vr/createWebVRButton.js +;// ./src/gfx/vr/createWebVRButton.js /* * Toggling WebVR is done through button.click because of limitations on calling requestPresent in webVR: * VRDisplay::requestPresent should be called from user gesture: @@ -31128,7 +31121,7 @@ Cookies.prototype._exists = function (key) { button.style.width = '100px'; button.textContent = 'ENTER VR'; let currentSession = null; - function onSessionEnded( /* event */ + function onSessionEnded(/* event */ ) { currentSession.removeEventListener('end', onSessionEnded); button.textContent = 'ENTER VR'; @@ -31206,7 +31199,7 @@ Cookies.prototype._exists = function (key) { stylizeElement(message); return message; } -;// CONCATENATED MODULE: ./src/gfx/vr/WebVRPoC.js +;// ./src/gfx/vr/WebVRPoC.js @@ -31457,9 +31450,9 @@ class WebVRPoC { return gfx && gfx.renderer ? gfx.renderer.domElement : null; } } -;// CONCATENATED MODULE: ./src/gfx/shaders/ScreenQuadFromDistortionTex.frag -const ScreenQuadFromDistortionTex_namespaceObject = "precision highp float;\r\n\r\nvarying vec2 vUv;\r\nuniform sampler2D srcTex;\r\nuniform vec3 aberration;\r\n\r\nvoid main() {\r\n vec2 uv = vUv * 2.0 - 1.0;\r\n \r\n gl_FragColor.r = texture2D(srcTex, 0.5 * (uv * aberration[0] + 1.0)).r;\r\n gl_FragColor.g = texture2D(srcTex, 0.5 * (uv * aberration[1] + 1.0)).g;\r\n gl_FragColor.b = texture2D(srcTex, 0.5 * (uv * aberration[2] + 1.0)).b;\r\n gl_FragColor.a = 1.0;\r\n}"; -;// CONCATENATED MODULE: ./src/Miew.js +;// ./src/gfx/shaders/ScreenQuadFromDistortionTex.frag +const ScreenQuadFromDistortionTex_namespaceObject = "/*\r\n * GLSL Version: ES 1.00 (WebGL 1.0 compatible)\r\n * No #version directive in this file.\r\n * Use GLSL1 semantics (`attribute`/`varying`, `texture2D`, `gl_FragColor`).\r\n * Keep `glslVersion` as default (GLSL1) or set `THREE.GLSL1` explicitly.\r\n */\r\n\r\nprecision highp float;\r\n\r\nvarying vec2 vUv;\r\nuniform sampler2D srcTex;\r\nuniform vec3 aberration;\r\n\r\nvoid main() {\r\n vec2 uv = vUv * 2.0 - 1.0;\r\n \r\n gl_FragColor.r = texture2D(srcTex, 0.5 * (uv * aberration[0] + 1.0)).r;\r\n gl_FragColor.g = texture2D(srcTex, 0.5 * (uv * aberration[1] + 1.0)).g;\r\n gl_FragColor.b = texture2D(srcTex, 0.5 * (uv * aberration[2] + 1.0)).b;\r\n gl_FragColor.a = 1.0;\r\n}"; +;// ./src/Miew.js /* global PACKAGE_VERSION:false */ @@ -31577,7 +31570,7 @@ function chooseFogColor() { */ function Miew(opts) { utils_EventDispatcher.call(this); - this._opts = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].merge({ + this._opts = __WEBPACK_EXTERNAL_MODULE_lodash_default__.merge({ settingsCookie: 'settings', cookiePath: '/' }, opts); @@ -31586,7 +31579,7 @@ function Miew(opts) { /** @type {ViewInterpolator} */ this._interpolator = new ViewInterpolator(); /** @type {HTMLElement} */ - this._container = opts && opts.container || document.getElementById('miew-container') || external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].head(document.getElementsByClassName('miew-container')) || document.body; + this._container = opts && opts.container || document.getElementById('miew-container') || __WEBPACK_EXTERNAL_MODULE_lodash_default__.head(document.getElementsByClassName('miew-container')) || document.body; /** @type {HTMLElement} */ this._containerRoot = this._container; @@ -31852,12 +31845,6 @@ Miew.prototype._requestAnimationFrame = function (callback) { } requestAnimationFrame(callback); }; -function arezSpritesSupported(context) { - return context.getExtension('EXT_frag_depth'); -} -function isAOSupported(context) { - return context.getExtension('WEBGL_depth_texture') && context.getExtension('WEBGL_draw_buffers'); -} /** * Initialize WebGL and set 3D scene up. @@ -31877,19 +31864,11 @@ Miew.prototype._initGfx = function () { webGLOptions.antialias = true; } gfx.renderer2d = new gfx_CSS2DRenderer(); - gfx.renderer = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.WebGL1Renderer(webGLOptions); + gfx.renderer = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.WebGLRenderer(webGLOptions); gfx.renderer.shadowMap.enabled = settings.now.shadow.on; gfx.renderer.shadowMap.autoUpdate = false; gfx.renderer.shadowMap.type = external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.PCFShadowMap; capabilities.init(gfx.renderer); - - // z-sprites and ambient occlusion possibility - if (!arezSpritesSupported(gfx.renderer.getContext())) { - settings.set('zSprites', false); - } - if (!isAOSupported(gfx.renderer.getContext())) { - settings.set('ao', false); - } gfx.renderer.autoClear = false; gfx.renderer.setPixelRatio(window.devicePixelRatio); gfx.renderer.setSize(gfx.width, gfx.height); @@ -31946,10 +31925,8 @@ Miew.prototype._initGfx = function () { format: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.RGBAFormat, depthBuffer: true }); - if (gfx.renderer.getContext().getExtension('WEBGL_depth_texture')) { - gfx.offscreenBuf.depthTexture = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.DepthTexture(); - gfx.offscreenBuf.depthTexture.type = external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.UnsignedShortType; - } + gfx.offscreenBuf.depthTexture = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.DepthTexture(); + gfx.offscreenBuf.depthTexture.type = external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.UnsignedShortType; gfx.offscreenBuf2 = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.WebGLRenderTarget(deviceWidth, deviceHeight, { minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, @@ -31972,35 +31949,31 @@ Miew.prototype._initGfx = function () { gfx.volFFTex = gfx.offscreenBuf4; gfx.volWFFTex = gfx.offscreenBuf; - // use float textures for volume rendering if possible - if (gfx.renderer.getContext().getExtension('OES_texture_float')) { - gfx.offscreenBuf5 = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.WebGLRenderTarget(deviceWidth, deviceHeight, { - minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, - magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, - format: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.RGBAFormat, - type: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.FloatType, - depthBuffer: false - }); - gfx.offscreenBuf6 = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.WebGLRenderTarget(deviceWidth, deviceHeight, { - minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, - magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, - format: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.RGBAFormat, - type: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.FloatType, - depthBuffer: false - }); - gfx.offscreenBuf7 = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.WebGLRenderTarget(deviceWidth, deviceHeight, { - minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, - magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, - format: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.RGBAFormat, - type: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.FloatType, - depthBuffer: true - }); - gfx.volBFTex = gfx.offscreenBuf5; - gfx.volFFTex = gfx.offscreenBuf6; - gfx.volWFFTex = gfx.offscreenBuf7; - } else { - this.logger.warn('Device doesn\'t support OES_texture_float extension'); - } + // use float textures for volume rendering (WebGL2 core feature) + gfx.offscreenBuf5 = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.WebGLRenderTarget(deviceWidth, deviceHeight, { + minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, + magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, + format: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.RGBAFormat, + type: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.FloatType, + depthBuffer: false + }); + gfx.offscreenBuf6 = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.WebGLRenderTarget(deviceWidth, deviceHeight, { + minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, + magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, + format: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.RGBAFormat, + type: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.FloatType, + depthBuffer: false + }); + gfx.offscreenBuf7 = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.WebGLRenderTarget(deviceWidth, deviceHeight, { + minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, + magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, + format: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.RGBAFormat, + type: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.FloatType, + depthBuffer: true + }); + gfx.volBFTex = gfx.offscreenBuf5; + gfx.volFFTex = gfx.offscreenBuf6; + gfx.volWFFTex = gfx.offscreenBuf7; gfx.stereoBufL = new external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.WebGLRenderTarget(deviceWidth, deviceHeight, { minFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, magFilter: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject.LinearFilter, @@ -32522,12 +32495,11 @@ Miew.prototype._setUberMaterialValues = function (values) { Miew.prototype._enableMRT = function (on, renderBuffer, textureBuffer) { const gfx = this._gfx; const gl = gfx.renderer.getContext(); - const ext = gl.getExtension('WEBGL_draw_buffers'); const { properties } = gfx.renderer; if (!on) { - ext.drawBuffersWEBGL([gl.COLOR_ATTACHMENT0, null]); + gl.drawBuffers([gl.COLOR_ATTACHMENT0, null]); return; } @@ -32546,10 +32518,10 @@ Miew.prototype._enableMRT = function (on, renderBuffer, textureBuffer) { fb.width = renderBuffer.width; fb.height = renderBuffer.height; gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tx, 0); - gl.framebufferTexture2D(gl.FRAMEBUFFER, ext.COLOR_ATTACHMENT1_WEBGL, gl.TEXTURE_2D, tx8, 0); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, tx8, 0); - // mapping textures - ext.drawBuffersWEBGL([gl.COLOR_ATTACHMENT0, ext.COLOR_ATTACHMENT1_WEBGL]); + // mapping textures (MRT is core feature in WebGL2) + gl.drawBuffers([gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]); }; Miew.prototype._renderScene = function () { return function (camera, distortion, target) { @@ -33017,7 +32989,7 @@ Miew.prototype.resetView = function () { }); }; Miew.prototype._export = function (format) { - const TheExporter = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].head(io.exporters.find({ + const TheExporter = __WEBPACK_EXTERNAL_MODULE_lodash_default__.head(io.exporters.find({ format })); if (!TheExporter) { @@ -33048,7 +33020,7 @@ const rePdbId = /^(?:(pdb|cif|ccp4|dsn6):\s*)?(\d[a-z\d]{3})$/i; const rePubchem = /^(?:pc|pubchem):\s*([a-z]+)$/i; const reUrlScheme = /^([a-z][a-z\d\-+.]*):/i; function resolveSourceShortcut(source, opts) { - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(source)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(source)) { return source; } @@ -33109,7 +33081,7 @@ function updateBinaryMode(opts) { // detect by format if (opts.fileType !== undefined) { - const TheParser = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].head(io.parsers.find({ + const TheParser = __WEBPACK_EXTERNAL_MODULE_lodash_default__.head(io.parsers.find({ format: opts.fileType })); if (TheParser) { @@ -33121,7 +33093,7 @@ function updateBinaryMode(opts) { // detect by file extension if (binary === undefined && opts.fileExt !== undefined) { - const TheParser = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].head(io.parsers.find({ + const TheParser = __WEBPACK_EXTERNAL_MODULE_lodash_default__.head(io.parsers.find({ ext: opts.fileExt })); if (TheParser) { @@ -33156,7 +33128,7 @@ function _fetchData(source, opts, job) { source = resolveSourceShortcut(source, opts); // detect a proper loader - const TheLoader = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].head(io.loaders.find({ + const TheLoader = __WEBPACK_EXTERNAL_MODULE_lodash_default__.head(io.loaders.find({ type: opts.sourceType, source })); @@ -33168,7 +33140,7 @@ function _fetchData(source, opts, job) { const fileName = opts.fileName || TheLoader.extractName(source); if (fileName) { const [name, fileExt] = utils.splitFileName(fileName); - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].defaults(opts, { + __WEBPACK_EXTERNAL_MODULE_lodash_default__.defaults(opts, { name, fileExt, fileName @@ -33181,15 +33153,15 @@ function _fetchData(source, opts, job) { // FIXME: All new settings retrieved from server are applied after the loading is complete. However, we need some // flags to alter the loading process itself. Here we apply them in advance. Dirty hack. Kill the server, remove // all hacks and everybody's happy. - let newOptions = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].get(opts, 'preset.expression'); - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isUndefined(newOptions)) { + let newOptions = __WEBPACK_EXTERNAL_MODULE_lodash_default__.get(opts, 'preset.expression'); + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isUndefined(newOptions)) { newOptions = JSON.parse(newOptions); if (newOptions && newOptions.settings) { const keys = ['singleUnit']; for (let keyIndex = 0, keyCount = keys.length; keyIndex < keyCount; ++keyIndex) { const key = keys[keyIndex]; - const value = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].get(newOptions.settings, key); - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isUndefined(value)) { + const value = __WEBPACK_EXTERNAL_MODULE_lodash_default__.get(newOptions.settings, key); + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isUndefined(value)) { settings.set(key, value); } } @@ -33239,7 +33211,7 @@ function _parseData(data, opts, job) { job.notify({ type: 'parsing' }); - const TheParser = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].head(io.parsers.find({ + const TheParser = __WEBPACK_EXTERNAL_MODULE_lodash_default__.head(io.parsers.find({ format: opts.fileType, ext: opts.fileExt, data @@ -33285,7 +33257,7 @@ function _parseData(data, opts, job) { * @returns {Promise} name of the visual that was added to the viewer */ Miew.prototype.load = function (source, opts) { - opts = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].merge({}, opts, { + opts = __WEBPACK_EXTERNAL_MODULE_lodash_default__.merge({}, opts, { context: this }); @@ -33382,7 +33354,7 @@ Miew.prototype._startAnimation = function (fileData) { self.logger.error(message); } }); - } catch (e) { + } catch { this.logger.error('Animation file does not fit to current complex!'); return; } @@ -33445,7 +33417,7 @@ Miew.prototype._continueAnimation = function () { self._refreshTitle(` Frame ${self._frameInfo._currFrame} of ${self._frameInfo._framesCount} time interval - ${self._frameInfo._timeStep}`); try { self._frameInfo.nextFrame(); - } catch (e) { + } catch { self.logger.error('Error during animation'); self._stopAnimation(); return; @@ -33508,7 +33480,7 @@ Miew.prototype._onLoad = function (dataSource, opts) { this._curVisualName = visualName; const desc = this.info(); this.logger.info(`Parsed ${opts.fileName} (${desc.atoms} atoms, ${desc.bonds} bonds, ${desc.residues} residues, ${desc.chains} chains).`); - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isNumber(this._opts.unit)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isNumber(this._opts.unit)) { complex.setCurrentUnit(this._opts.unit); } if (opts.preset) { @@ -33573,7 +33545,7 @@ Miew.prototype.resetEd = function () { }; Miew.prototype.loadEd = function (source) { this.resetEd(); - const TheLoader = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].head(io.loaders.find({ + const TheLoader = __WEBPACK_EXTERNAL_MODULE_lodash_default__.head(io.loaders.find({ source })); if (!TheLoader) { @@ -33585,7 +33557,7 @@ Miew.prototype.loadEd = function (source) { }); loader.context = this; return loader.load().then(data => { - const TheParser = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].head(io.parsers.find({ + const TheParser = __WEBPACK_EXTERNAL_MODULE_lodash_default__.head(io.parsers.find({ format: 'ccp4' })); if (!TheParser) { @@ -33659,7 +33631,7 @@ Miew.prototype.changeUnit = function (unitIdx, name) { if (unitIdx === undefined) { return currentUnitInfo(); } - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(unitIdx)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(unitIdx)) { unitIdx = Math.max(parseInt(unitIdx, 10), 0); } if (visual.getComplex().setCurrentUnit(unitIdx)) { @@ -33949,7 +33921,7 @@ Miew.prototype._enterComponentEditMode = function () { editors.push(editor); } }); - if (editors === []) { + if (editors.length === 0) { return; } this._editors = editors; @@ -34517,7 +34489,7 @@ Miew.prototype.setOptions = function (opts) { if (opts.reps) { this._opts.reps = null; } - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].merge(this._opts, opts); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.merge(this._opts, opts); if (opts.settings) { this.set(opts.settings); } @@ -34541,7 +34513,7 @@ Miew.prototype.setOptions = function (opts) { const visual = this._getComplexVisual(); if (visual) { visual.getComplex().resetCurrentUnit(); - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isNumber(opts.unit)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isNumber(opts.unit)) { visual.getComplex().setCurrentUnit(opts.unit); } this.resetView(); @@ -34637,7 +34609,7 @@ Miew.prototype.removeObject = function (index) { * @returns {string} URL */ Miew.prototype.getURL = function (opts) { - return options.toURL(this.getState(external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].defaults(opts, { + return options.toURL(this.getState(__WEBPACK_EXTERNAL_MODULE_lodash_default__.defaults(opts, { compact: true, settings: false, view: false @@ -34654,7 +34626,7 @@ Miew.prototype.getURL = function (opts) { * @returns {string} script */ Miew.prototype.getScript = function (opts) { - return options.toScript(this.getState(external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].defaults(opts, { + return options.toScript(this.getState(__WEBPACK_EXTERNAL_MODULE_lodash_default__.defaults(opts, { compact: true, settings: true, view: true @@ -34684,7 +34656,7 @@ Miew.prototype._compareReps = function (complexVisual, compareWithDefaults) { let emptyReps = true; for (let i = 0, n = repCount; i < n; ++i) { repsDiff[i] = complexVisual.repGet(i).compare(compare ? currPreset[i] : null); - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEmpty(repsDiff[i])) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isEmpty(repsDiff[i])) { emptyReps = false; } } @@ -34704,7 +34676,7 @@ Miew.prototype._compareReps = function (complexVisual, compareWithDefaults) { */ Miew.prototype.getState = function (opts) { const state = {}; - opts = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].defaults(opts, { + opts = __WEBPACK_EXTERNAL_MODULE_lodash_default__.defaults(opts, { compact: true, settings: false, view: false @@ -34754,7 +34726,7 @@ Miew.prototype.getState = function (opts) { // settings if (opts.settings) { const diff = this.settings.getDiffs(false); - if (!external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isEmpty(diff)) { + if (!__WEBPACK_EXTERNAL_MODULE_lodash_default__.isEmpty(diff)) { state.settings = diff; } } @@ -34806,9 +34778,7 @@ Miew.prototype._updateShadowmapMeshes = function (process) { } }); }; -Miew.prototype._updateMaterials = function (values) { - let needTraverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - let process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; +Miew.prototype._updateMaterials = function (values, needTraverse = false, process = undefined) { this._forEachComplexVisual(visual => visual.setMaterialValues(values, needTraverse, process)); for (let i = 0, n = this._objects.length; i < n; ++i) { const obj = this._objects[i]; @@ -34846,7 +34816,7 @@ Miew.prototype._embedWebXR = function () { }; Miew.prototype._initOnSettingsChanged = function () { const on = (props, func) => { - props = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isArray(props) ? props : [props]; + props = __WEBPACK_EXTERNAL_MODULE_lodash_default__.isArray(props) ? props : [props]; props.forEach(prop => { this.settings.addEventListener(`change:${prop}`, func); }); @@ -34867,21 +34837,12 @@ Miew.prototype._initOnSettingsChanged = function () { this._onBgColorChanged(); }); on('ao', () => { - if (settings.now.ao && !isAOSupported(this._gfx.renderer.getContext())) { - this.logger.warn('Your device or browser does not support ao'); - settings.set('ao', false); - } else { - const values = { - normalsToGBuffer: settings.now.ao - }; - this._setUberMaterialValues(values); - } + const values = { + normalsToGBuffer: settings.now.ao + }; + this._setUberMaterialValues(values); }); on('zSprites', () => { - if (settings.now.zSprites && !arezSpritesSupported(this._gfx.renderer.getContext())) { - this.logger.warn('Your device or browser does not support zSprites'); - settings.set('zSprites', false); - } this.rebuildAll(); }); on('fogColor', () => { @@ -35010,7 +34971,7 @@ Miew.prototype.select = function (expression, append) { return; } let sel = expression; - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isString(expression)) { + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isString(expression)) { sel = Miew_selectors.parse(expression).selector; } visual.select(sel, append); @@ -35379,12 +35340,12 @@ Miew.prototype.motm = function () { visual.resetReps(rep); }); }; -Miew.prototype.VERSION = true && "0.11.1" || 0; +Miew.prototype.VERSION = true && "0.12.0" || 0; // Uncomment this to get debug trace: // Miew.prototype.debugTracer = new utils.DebugTracer(Miew.prototype); -external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].assign(Miew, /** @lends Miew */{ +__WEBPACK_EXTERNAL_MODULE_lodash_default__.assign(Miew, /** @lends Miew */{ VERSION: Miew.prototype.VERSION, registeredPlugins: [], // export namespaces // TODO: WIP: refactoring external interface @@ -35413,14 +35374,14 @@ external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespac * var miew = new Miew(opts); */ thirdParty: { - lodash: external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"], + lodash: __WEBPACK_EXTERNAL_MODULE_lodash_default__, three: external_module_three_commonjs_three_commonjs2_three_amd_three_root_THREE_namespaceObject } }); /* harmony default export */ const src_Miew = (Miew); // EXTERNAL MODULE: ./src/utils/MiewCLIParser.js var MiewCLIParser = __webpack_require__(89); -;// CONCATENATED MODULE: ./src/utils/MiewCLIHelp.js +;// ./src/utils/MiewCLIHelp.js const modeIdDesc = { @@ -35631,7 +35592,7 @@ const help = { } }; /* harmony default export */ const MiewCLIHelp = (help); -;// CONCATENATED MODULE: ./src/Miew-cli.js +;// ./src/Miew-cli.js @@ -35781,11 +35742,11 @@ class CLIUtils { return helpData; } help(path) { - if (external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isUndefined(path)) { - return `${this.joinHelpStr(MiewCLIHelp.$help)}\n${external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].slice(external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].sortBy(external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].keys(MiewCLIHelp)), 1).join(', ')}\n`; + if (__WEBPACK_EXTERNAL_MODULE_lodash_default__.isUndefined(path)) { + return `${this.joinHelpStr(MiewCLIHelp.$help)}\n${__WEBPACK_EXTERNAL_MODULE_lodash_default__.slice(__WEBPACK_EXTERNAL_MODULE_lodash_default__.sortBy(__WEBPACK_EXTERNAL_MODULE_lodash_default__.keys(MiewCLIHelp)), 1).join(', ')}\n`; } - const helpItem = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].get(MiewCLIHelp, path); - return external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].isUndefined(helpItem) ? this.help() : `${this.joinHelpStr(helpItem.$help)}\n`; + const helpItem = __WEBPACK_EXTERNAL_MODULE_lodash_default__.get(MiewCLIHelp, path); + return __WEBPACK_EXTERNAL_MODULE_lodash_default__.isUndefined(helpItem) ? this.help() : `${this.joinHelpStr(helpItem.$help)}\n`; } load(miew, arg) { if (miew === undefined || arg === undefined || arg === '-f') { @@ -35834,7 +35795,7 @@ class CLIUtils { propagateProp(path, arg) { if (path !== undefined) { let argExc = {}; - const adapter = Miew_cli_options.adapters[typeof external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].get(Miew_cli_settings.defaults, path)]; + const adapter = Miew_cli_options.adapters[typeof __WEBPACK_EXTERNAL_MODULE_lodash_default__.get(Miew_cli_settings.defaults, path)]; if (adapter === undefined) { const pathExc = { message: `${path} is not existed` @@ -35859,7 +35820,7 @@ class CLIUtils { } if (arg !== undefined && adapter(arg) !== arg && adapter(arg) !== arg > 0) { argExc = { - message: `${path} must be a "${typeof external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].get(Miew_cli_settings.defaults, path)}"` + message: `${path} must be a "${typeof __WEBPACK_EXTERNAL_MODULE_lodash_default__.get(Miew_cli_settings.defaults, path)}"` }; throw argExc; } @@ -35907,7 +35868,7 @@ ArgList.prototype.toJSO = function (cliUtils, cmd, arg) { const res = {}; const list = this._values; for (let i = 0, n = list.length; i < n; ++i) { - external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"].set(res, list[i].id, cliUtils.propagateProp(`${keyRemap(cmd)}.${arg}.${list[i].id}`, list[i].val)); + __WEBPACK_EXTERNAL_MODULE_lodash_default__.set(res, list[i].id, cliUtils.propagateProp(`${keyRemap(cmd)}.${arg}.${list[i].id}`, list[i].val)); } return res; }; @@ -35922,7 +35883,7 @@ cliutils.miew = null; cliutils.echo = null; cliutils.representations = representationsStorage; cliutils.utils = utilFunctions; -cliutils._ = external_module_lodash_commonjs_lodash_commonjs2_lodash_amd_lodash_root_namespaceObject["default"]; +cliutils._ = __WEBPACK_EXTERNAL_MODULE_lodash_default__; cliutils.CreateObjectPair = CreateObjectPair; cliutils.keyRemap = keyRemap; cliutils.Context = Miew_cli_selectors.Context; @@ -35972,11 +35933,10 @@ src_Miew.prototype.callNextCmd = function () { MiewCLIParser.parser.yy = cliutils; // workaround for incorrect JISON parser generator for AMD module MiewCLIParser.parser.yy.parseError = MiewCLIParser.parser.parseError; -;// CONCATENATED MODULE: ./src/index.js +;// ./src/index.js /* harmony default export */ const src = (src_Miew); -var __webpack_exports__default = __webpack_exports__.A; -export { __webpack_exports__default as default }; +export { src as default }; //# sourceMappingURL=Miew.module.js.map \ No newline at end of file diff --git a/packages/miew/dist/Miew.module.js.map b/packages/miew/dist/Miew.module.js.map index f193adce..5931714b 100644 --- a/packages/miew/dist/Miew.module.js.map +++ b/packages/miew/dist/Miew.module.js.map @@ -1 +1 @@ -{"version":3,"file":"dist/Miew.module.js","mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIA,MAAM,GAAI,YAAU;EACxB,IAAIC,CAAC,GAAC,SAAAA,CAASC,CAAC,EAACC,CAAC,EAACF,CAAC,EAACG,CAAC,EAAC;MAAC,KAAIH,CAAC,GAACA,CAAC,IAAE,CAAC,CAAC,EAACG,CAAC,GAACF,CAAC,CAACG,MAAM,EAACD,CAAC,EAAE,EAACH,CAAC,CAACC,CAAC,CAACE,CAAC,CAAC,CAAC,GAACD,CAAC,CAAC;MAAC,OAAOF,CAAC;IAAA,CAAC;IAACK,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,EAAE,EAAC,EAAE,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,IAAI,GAAC,CAAC,EAAE,EAAC,GAAG,CAAC;EACz1C,IAAI5E,MAAM,GAAG;IAAC6E,KAAK,EAAE,SAASA,KAAKA,CAAA,EAAI,CAAE,CAAC;IAC1CC,EAAE,EAAE,CAAC,CAAC;IACNC,QAAQ,EAAE;MAAC,OAAO,EAAC,CAAC;MAAC,SAAS,EAAC,CAAC;MAAC,SAAS,EAAC,CAAC;MAAC,KAAK,EAAC,CAAC;MAAC,OAAO,EAAC,CAAC;MAAC,OAAO,EAAC,CAAC;MAAC,KAAK,EAAC,CAAC;MAAC,MAAM,EAAC,CAAC;MAAC,MAAM,EAAC,EAAE;MAAC,MAAM,EAAC,EAAE;MAAC,eAAe,EAAC,EAAE;MAAC,KAAK,EAAC,EAAE;MAAC,QAAQ,EAAC,EAAE;MAAC,KAAK,EAAC,EAAE;MAAC,OAAO,EAAC,EAAE;MAAC,UAAU,EAAC,EAAE;MAAC,aAAa,EAAC,EAAE;MAAC,WAAW,EAAC,EAAE;MAAC,QAAQ,EAAC,EAAE;MAAC,mBAAmB,EAAC,EAAE;MAAC,oBAAoB,EAAC,EAAE;MAAC,QAAQ,EAAC,EAAE;MAAC,yBAAyB,EAAC,EAAE;MAAC,MAAM,EAAC,EAAE;MAAC,MAAM,EAAC,EAAE;MAAC,MAAM,EAAC,EAAE;MAAC,YAAY,EAAC,EAAE;MAAC,cAAc,EAAC,EAAE;MAAC,QAAQ,EAAC,EAAE;MAAC,IAAI,EAAC,EAAE;MAAC,SAAS,EAAC,EAAE;MAAC,UAAU,EAAC,EAAE;MAAC,QAAQ,EAAC,EAAE;MAAC,QAAQ,EAAC,EAAE;MAAC,IAAI,EAAC,EAAE;MAAC,UAAU,EAAC,EAAE;MAAC,YAAY,EAAC,EAAE;MAAC,SAAS,EAAC,EAAE;MAAC,UAAU,EAAC,EAAE;MAAC,MAAM,EAAC,EAAE;MAAC,SAAS,EAAC,EAAE;MAAC,MAAM,EAAC,EAAE;MAAC,MAAM,EAAC,EAAE;MAAC,OAAO,EAAC,EAAE;MAAC,QAAQ,EAAC,EAAE;MAAC,UAAU,EAAC,EAAE;MAAC,WAAW,EAAC,EAAE;MAAC,QAAQ,EAAC,EAAE;MAAC,cAAc,EAAC,EAAE;MAAC,YAAY,EAAC,EAAE;MAAC,MAAM,EAAC,EAAE;MAAC,SAAS,EAAC,EAAE;MAAC,SAAS,EAAC,EAAE;MAAC,WAAW,EAAC,EAAE;MAAC,KAAK,EAAC,EAAE;MAAC,UAAU,EAAC,EAAE;MAAC,YAAY,EAAC,EAAE;MAAC,MAAM,EAAC,EAAE;MAAC,KAAK,EAAC,EAAE;MAAC,UAAU,EAAC,EAAE;MAAC,KAAK,EAAC,EAAE;MAAC,aAAa,EAAC,EAAE;MAAC,KAAK,EAAC,EAAE;MAAC,MAAM,EAAC,EAAE;MAAC,OAAO,EAAC,EAAE;MAAC,YAAY,EAAC,EAAE;MAAC,2BAA2B,EAAC,EAAE;MAAC,+BAA+B,EAAC,EAAE;MAAC,UAAU,EAAC,EAAE;MAAC,GAAG,EAAC,EAAE;MAAC,eAAe,EAAC,EAAE;MAAC,SAAS,EAAC,EAAE;MAAC,eAAe,EAAC,EAAE;MAAC,KAAK,EAAC,EAAE;MAAC,eAAe,EAAC,EAAE;MAAC,KAAK,EAAC,EAAE;MAAC,MAAM,EAAC,EAAE;MAAC,MAAM,EAAC,EAAE;MAAC,sBAAsB,EAAC,EAAE;MAAC,UAAU,EAAC,EAAE;MAAC,OAAO,EAAC,EAAE;MAAC,WAAW,EAAC,EAAE;MAAC,eAAe,EAAC,EAAE;MAAC,aAAa,EAAC,EAAE;MAAC,YAAY,EAAC,EAAE;MAAC,eAAe,EAAC,EAAE;MAAC,eAAe,EAAC,EAAE;MAAC,eAAe,EAAC,EAAE;MAAC,aAAa,EAAC,EAAE;MAAC,iBAAiB,EAAC,EAAE;MAAC,gBAAgB,EAAC,EAAE;MAAC,iBAAiB,EAAC,EAAE;MAAC,mBAAmB,EAAC,EAAE;MAAC,eAAe,EAAC,EAAE;MAAC,SAAS,EAAC,EAAE;MAAC,WAAW,EAAC,EAAE;MAAC,UAAU,EAAC,EAAE;MAAC,iBAAiB,EAAC,EAAE;MAAC,YAAY,EAAC,GAAG;MAAC,GAAG,EAAC,GAAG;MAAC,YAAY,EAAC,GAAG;MAAC,GAAG,EAAC,GAAG;MAAC,aAAa,EAAC,GAAG;MAAC,SAAS,EAAC,CAAC;MAAC,MAAM,EAAC;IAAC,CAAC;IACv9CC,UAAU,EAAE;MAAC,CAAC,EAAC,OAAO;MAAC,CAAC,EAAC,KAAK;MAAC,CAAC,EAAC,OAAO;MAAC,CAAC,EAAC,OAAO;MAAC,CAAC,EAAC,KAAK;MAAC,CAAC,EAAC,MAAM;MAAC,EAAE,EAAC,MAAM;MAAC,EAAE,EAAC,KAAK;MAAC,EAAE,EAAC,QAAQ;MAAC,EAAE,EAAC,KAAK;MAAC,EAAE,EAAC,UAAU;MAAC,EAAE,EAAC,aAAa;MAAC,EAAE,EAAC,WAAW;MAAC,EAAE,EAAC,QAAQ;MAAC,EAAE,EAAC,QAAQ;MAAC,EAAE,EAAC,MAAM;MAAC,EAAE,EAAC,MAAM;MAAC,EAAE,EAAC,MAAM;MAAC,EAAE,EAAC,YAAY;MAAC,EAAE,EAAC,cAAc;MAAC,EAAE,EAAC,QAAQ;MAAC,EAAE,EAAC,IAAI;MAAC,EAAE,EAAC,UAAU;MAAC,EAAE,EAAC,QAAQ;MAAC,EAAE,EAAC,QAAQ;MAAC,EAAE,EAAC,IAAI;MAAC,EAAE,EAAC,UAAU;MAAC,EAAE,EAAC,YAAY;MAAC,EAAE,EAAC,MAAM;MAAC,EAAE,EAAC,SAAS;MAAC,EAAE,EAAC,MAAM;MAAC,EAAE,EAAC,MAAM;MAAC,EAAE,EAAC,OAAO;MAAC,EAAE,EAAC,QAAQ;MAAC,EAAE,EAAC,WAAW;MAAC,EAAE,EAAC,QAAQ;MAAC,EAAE,EAAC,MAAM;MAAC,EAAE,EAAC,SAAS;MAAC,EAAE,EAAC,WAAW;MAAC,EAAE,EAAC,KAAK;MAAC,EAAE,EAAC,UAAU;MAAC,EAAE,EAAC,YAAY;MAAC,EAAE,EAAC,MAAM;MAAC,EAAE,EAAC,UAAU;MAAC,EAAE,EAAC,KAAK;MAAC,EAAE,EAAC,KAAK;MAAC,EAAE,EAAC,MAAM;MAAC,EAAE,EAAC,OAAO;MAAC,EAAE,EAAC,UAAU;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,eAAe;MAAC,EAAE,EAAC,eAAe;MAAC,EAAE,EAAC,KAAK;MAAC,EAAE,EAAC,MAAM;MAAC,EAAE,EAAC,OAAO;MAAC,EAAE,EAAC,WAAW;MAAC,EAAE,EAAC,eAAe;MAAC,EAAE,EAAC,aAAa;MAAC,EAAE,EAAC,YAAY;MAAC,EAAE,EAAC,eAAe;MAAC,EAAE,EAAC,eAAe;MAAC,EAAE,EAAC,eAAe;MAAC,EAAE,EAAC,aAAa;MAAC,EAAE,EAAC,iBAAiB;MAAC,EAAE,EAAC,gBAAgB;MAAC,EAAE,EAAC,iBAAiB;MAAC,EAAE,EAAC,mBAAmB;MAAC,EAAE,EAAC,eAAe;MAAC,EAAE,EAAC,SAAS;MAAC,EAAE,EAAC,WAAW;MAAC,EAAE,EAAC,UAAU;MAAC,EAAE,EAAC,iBAAiB;MAAC,GAAG,EAAC,GAAG;MAAC,GAAG,EAAC;IAAG,CAAC;IACx9BC,YAAY,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAA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,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,CAAC,EAACtK,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAACrD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAACrD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACD,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACD,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACD,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACA;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC7D,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACS,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACJ,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,GAAG,EAACI;IAAI,CAAC,EAACrE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAACvE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAA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G;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,CAAC,EAACjD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACI,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAACjD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAACrD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC1D,CAAC,CAAC0E,IAAI,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAAC1E,CAAC,CAAC0E,IAAI,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,CAAC,EAACrE,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACI,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,CAAC,EAACjD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAA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GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,CAAC,EAACjD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACI,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC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AAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,E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,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;UACA,KAAK,EAAE;Y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ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAMpR,iBAAQ,GAAG;EACf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEqR,KAAK,EAAE;IACL;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFC,IAAI,EAAE,IAAI;MACVC,IAAI,EAAE,IAAI;MACVC,KAAK,EAAE,GAAG;MACVC,SAAS,EAAE,IAAI;MACfC,OAAO,EAAE,GAAG;MACZC,QAAQ,EAAE,IAAI;MACdC,cAAc,EAAE;QACdC,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE,CAAC;QACTC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT;IACF,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFN,cAAc,EAAE;QACdC,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE,CAAC;QACTC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT;IACF,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIE,EAAE,EAAE;MACFV,SAAS,EAAE,IAAI;MACfE,QAAQ,EAAE,IAAI;MACdS,QAAQ,EAAE,GAAG;MACbC,SAAS,EAAE,EAAE;MACbf,IAAI,EAAE,IAAI;MACVgB,SAAS,EAAE;IACb,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFhB,IAAI,EAAE,IAAI;MACVC,KAAK,EAAE,GAAG;MACVC,SAAS,EAAE,IAAI;MACfC,OAAO,EAAE,GAAG;MACZC,QAAQ,E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ACV4T,KAAK,EAAE;QACT;MACF,CAAC;MACDN,mBAAmB,EAAE,GAAG;MACxBC,OAAO,EAAE,CAAC,GAAG;MACb3B,cAAc,EAAE;QACdC,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE,EAAE;QACVC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT;IACF,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI6B,EAAE,EAAE;MACFC,QAAQ,EAAE,4CAA4C;MACtDC,eAAe,EAAE,QAAQ;MACzBC,aAAa,EAAE,QAAQ;MACvBC,EAAE,EAAE,CAAC;MACLC,EAAE,EAAE,CAAC;MACLC,EAAE,EAAE,CAAC;MACLC,EAAE,EAAE,MAAM;MACVC,EAAE,EAAE,UAAU;MACdC,MAAM,EAAE;IACV,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFC,MAAM,EAAE,GAAG;MACXC,SAAS,EAAE,GAAG;MACdC,SAAS,EAAE,GAAG;MACdC,KAAK,EAAE,IAAI;MACXC,OAAO,EAAE,KAAK;MACdjD,cAAc,EAAE;QACdC,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE,CAAC;QACTC,IAAI,EAAE,CAAC;QACPC,KAAK,EAAE;MACT;IACF;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE6C,QAAQ,EAAE;IACR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFC,MAAM,EAAE,CAAC;IACX,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACF9U,KAAK,EAAE;IACT,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI+U,EAAE,EAAE;MACFvC,MAAM,EAAE,SAAS;MACjBxS,KAAK,EAAE,QAAQ;MACfgV,SAAS,EAAE;IACb,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFjV,KAAK,EAAE,QAAQ;MACfkV,MAAM,EAAE;IACV,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFC,QAAQ,EAAE;IACZ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFD,QAAQ,EAAE,MAAM;MAChBzjB,GAAG,EAAE,CAAC;MACND,GAAG,EAAE;IACP,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACI4jB,EAAE,EAAE;MACFF,QAAQ,EAAE;IACZ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACIG,EAAE,EAAE;MACFH,QAAQ,EAAE;IACZ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACII,EAAE,EAAE;MACFJ,QAAQ,EAAE;IACZ;EACF,CAAC;EAED;AACF;AACA;AACA;EACEK,SAAS,EAAE,IAAI;EAEf;AACF;AACA;AACA;EACEC,MAAM,EAAE,IAAI;EAEZ;AACF;AACA;AACA;EACEC,OAAO,EAAE,GAAG;EAEZ;AACF;AACA;AACA;EACEC,MAAM,EAAE,KAAK;EAEbC,WAAW,EAAE,GAAG;EAEhBC,WAAW,EAAE,GAAG;EAEhB;AACF;AACA;AACA;EACEC,aAAa,EAAE,GAAG;EAAE;;EAEpB;AACF;AACA;AACA;EACEC,YAAY,EAAE,CAAC;EAAE;EACjBC,QAAQ,EAAE,GAAG;EACbC,QAAQ,EAAE,QAAQ;EAClBC,cAAc,EAAE,KAAK;EAErB;AACF;AACA;AACA;EACEC,OAAO,EAAE,IAAI;EAEb;AACF;AACA;AACA;EACEC,UAAU,EAAE,QAAQ;EAEpBC,cAAc,EAAE,KAAK;;EAErBC,UAAU,EAAE,IAAI;EAEhBC,MAAM,EAAE,SAAS;EAAE;;EAEnBC,OAAO,EAAE;IACP;IACAC,OAAO,EAAE,CAAC;MACRpwB,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,KAAK;MACfG,QAAQ,EAAE;IACZ,CAAC,CAAC;IAEFgyB,KAAK,EAAE,EAAE;IAET;IACAC,IAAI,EAAE,CAAC;MACLtwB,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,KAAK;MACfG,QAAQ,EAAE;IACZ,CAAC,CAAC;IAEF;IACAkyB,KAAK,EAAE,CAAC;MACNvwB,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,KAAK;MACfG,QAAQ,EAAE;IACZ,CAAC,CAAC;IAEF;IACAmyB,KAAK,EAAE,CAAC;MACNxwB,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,YAAY;MACtBG,QAAQ,EAAE;IACZ,CAAC,EAAE;MACD2B,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,sBAAsB;MAChCG,QAAQ,EAAE;IACZ,CAAC;EACH,CAAC;EAEDoyB,OAAO,EAAE;IACPlsB,IAAI,EAAE;MACJmV,KAAK,EAAE,UAAU;MACjBgX,QAAQ,EAAE,GAAG;MACbC,OAAO,EAAE;IACX;EACF,CAAC;EAED;;EAEA9C,EAAE,EAAE;IACFnU,KAAK,EAAE,QAAQ;IACfkX,WAAW,EAAE;EACf,CAAC;EAEDC,KAAK,EAAE;IACLC,SAAS,EAAE,KAAK;IAChBC,eAAe,EAAE,GAAG;IACpBC,cAAc,EAAE;EAClB,CAAC;EAED;AACF;AACA;AACA;EACEC,OAAO,EAAE,CAET,CAAC;EAED;AACF;AACA;AACA;EACEC,IAAI,EAAE,IAAI;EAEV;AACF;AACA;AACA;EACEC,GAAG,EAAE,IAAI;EAET;AACF;AACA;AACA;EACEvS,GAAG,EAAE,IAAI;EAET;AACF;AACA;AACA;AACA;EACEwS,QAAQ,EAAE,IAAI;EAEdC,qBAAqB,EAAE,IAAI;EAE3B;AACF;AACA;AACA;EACEC,aAAa,EAAE,IAAI;EAEnBC,OAAO,EAAE,KAAK;EAEd;AACF;AACA;AACA;EACEC,SAAS,EAAE,IAAI;EAEf;AACF;AACA;AACA;AACA;EACEC,IAAI,EAAE,IAAI;EACV;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE;IACP1S,EAAE,EAAE,KAAK;IACTtF,KAAK,EAAE,QAAQ;IACfiY,SAAS,EAAE,GAAG;IACdC,SAAS,EAAE;EACb,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,EAAE,EAAE,KAAK;EAET;AACF;AACA;AACA;AACA;AACA;AACA;EACE1X,MAAM,EAAE;IACN6E,EAAE,EAAE,KAAK;IACT7f,IAAI,EAAE,QAAQ;IACdqa,MAAM,EAAE;EACV,CAAC;EAED;AACF;AACA;AACA;AACA;EACEsY,YAAY,EAAE,GAAG;EAEjB;AACF;AACA;AACA;AACA;EACEC,MAAM,EAAE,EAAE;EAEV;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,CAAC;EAEV;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,qBAAqB,EAAE,IAAI;EAE3B;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,IAAI;EAEb;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,IAAI;EAEb;AACF;AACA;AACA;AACA;EACEC,IAAI,EAAE,MAAM;EAEZ;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,KAAK;EAEd;AACF;AACA;AACA;AACA;EACEC,QAAQ,EAAE,KAAK;EAEf;AACF;AACA;AACA;AACA;EACEC,UAAU,EAAE,IAAI;EAEhB;AACF;AACA;AACA;AACA;EACEC,MAAM,EAAE,MAAM;EAEd;AACF;AACA;AACA;AACA;EACEC,gBAAgB,EAAE,IAAI;EAEtB;AACF;AACA;AACA;AACA;EACEC,YAAY,EAAE,SAAS;EAEvB;AACF;AACA;AACA;AACA;EACEC,gBAAgB,EAAE,CAAC;EAEnBtS,KAAK,EAAE;IACLuS,OAAO,EAAE,GAAG;IACZvuB,IAAI,EAAE,QAAQ;IACdwuB,IAAI,EAAE,IAAI;IACVC,gBAAgB,EAAE,GAAG;IACrBC,UAAU,EAAE,GAAG;IACfC,YAAY,EAAE;EAChB,CAAC;EACDC,GAAG,EAAE;IACHC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AAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAC/D;AACD;;AAEA,qEAAeP,mBAAmB;;ACxSH;AACyB;AACxB;AAEhC,MAAMQ,SAAS,GAAG,CAChB,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACpD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,K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E,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA,MAAMC,oBAAoB,GAAG;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA,MAAMC,iBAAiB,GAAG;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA,MAAMC,cAAc,GAAG;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AAEW,MAAMC,SAAS,CAAC;EAC7BhxI,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACsnI,YAAY,GAAG,EAAE;IACtB,IAAI,CAACoF,KAAK,GAAG,IAAI;EACnB;EAEA9E,SAASA,CAACvxH,IAAI,EAAE;IACd,IAAI,CAACq2H,KAAK,GAAGr2H,IAAI;IACjB,IAAI,CAACixH,YAAY,CAACxuI,IAAI,CAAC,IAAI,CAACm4I,YAAY,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC3J,YAAY,CAACxuI,IAAI,CAAC,IAAI,CAACo4I,iBAAiB,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC5J,YAAY,CAACxuI,IAAI,CAAC,IAAI,CAACq4I,aAAa,CAAC96H,IAAI,CAAC6hH,MAAM,EAAE7hH,IAAI,CAACwW,SAAS,CAAC,CAAC;IACvE,IAAI,CAACy6G,YAAY,CAACxuI,IAAI,CAAC,IAAI,CAACs4I,eAAe,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC9J,YAAY,CAACxuI,IAAI,CAAC,IAAI,CAACu4I,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC3E,KAAK,GAAG,IAAI;IACjB,OAAO,IAAI,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","sources":["webpack://miew/./src/utils/MiewCLIParser.js","webpack://miew/./src/utils/SelectionParser.js","webpack://miew/./vendor/js/Smooth.js","webpack://miew/./vendor/js/mmtf.js","webpack://miew/webpack/bootstrap","webpack://miew/webpack/runtime/compat get default export","webpack://miew/webpack/runtime/define property getters","webpack://miew/webpack/runtime/hasOwnProperty shorthand","webpack://miew/external module {\"module\":\"lodash\",\"commonjs\":\"lodash\",\"commonjs2\":\"lodash\",\"amd\":\"lodash\",\"root\":\"_\"}","webpack://miew/external module {\"module\":\"three\",\"commonjs\":\"three\",\"commonjs2\":\"three\",\"amd\":\"three\",\"root\":\"THREE\"}","webpack://miew/../../node_modules/spin.js/spin.js","webpack://miew/./src/Timer.js","webpack://miew/./src/gfx/Stats.js","webpack://miew/./src/utils/EventDispatcher.js","webpack://miew/./src/utils/logger.js","webpack://miew/./src/utils.js","webpack://miew/./src/utils/JobHandle.js","webpack://miew/./src/settings.js","webpack://miew/./src/options.js","webpack://miew/./src/chem/Atom.js","webpack://miew/./src/chem/Element.js","webpack://miew/./src/chem/Bond.js","webpack://miew/./src/chem/Residue.js","webpack://miew/./src/chem/ResidueType.js","webpack://miew/./src/chem/Chain.js","webpack://miew/./src/chem/StructuralElement.js","webpack://miew/./src/chem/Helix.js","webpack://miew/./src/chem/Strand.js","webpack://miew/./src/chem/Sheet.js","webpack://miew/./src/chem/SGroup.js","webpack://miew/./src/chem/selectors/selectArgs.js","webpack://miew/./src/chem/selectors/selectorsBase.js","webpack://miew/./src/chem/selectors/selectOps.js","webpack://miew/./src/chem/selectors.js","webpack://miew/./src/chem/BiologicalUnit.js","webpack://miew/./src/chem/Assembly.js","webpack://miew/./src/chem/Component.js","webpack://miew/./src/chem/AtomPairs.js","webpack://miew/./src/chem/AutoBond.js","webpack://miew/./src/chem/AromaticLoopsMarker.js","webpack://miew/./src/chem/VoxelWorld.js","webpack://miew/./src/chem/HBondInfo.js","webpack://miew/./src/chem/SecondaryStructureMap.js","webpack://miew/./src/chem/Complex.js","webpack://miew/./src/chem/Volume.js","webpack://miew/./src/chem/Molecule.js","webpack://miew/./src/chem.js","webpack://miew/./src/gfx/CSS2DObject.js","webpack://miew/./src/gfx/RCGroup.js","webpack://miew/./src/gfx/gfxutils.js","webpack://miew/./src/Visual.js","webpack://miew/./src/utils/EntityList.js","webpack://miew/./src/utils/makeContextDependent.js","webpack://miew/./src/gfx/geometries/SphereCollisionGeo.js","webpack://miew/./src/gfx/geometries/InstancedSpheresGeometry.js","webpack://miew/./src/gfx/geometries/ChunkedObjectsGeometry.js","webpack://miew/./src/gfx/geometries/SimpleSpheresGeometry.js","webpack://miew/./src/gfx/geometries/Simple2CCylindersGeometry.js","webpack://miew/./src/gfx/geometries/CylinderBufferGeometry.js","webpack://miew/./src/gfx/geometries/Instanced2CCylindersGeometry.js","webpack://miew/./src/gfx/geometries/ExtrudedObjectsGeometry.js","webpack://miew/./src/gfx/geometries/ThickLinesGeometry.js","webpack://miew/./src/gfx/geometries/LinesGeometry.js","webpack://miew/./src/gfx/geometries/CylinderCollisionGeo.js","webpack://miew/./src/gfx/geometries/ChunkedLinesGeometry.js","webpack://miew/./src/gfx/geometries/TwoColorLinesGeometry.js","webpack://miew/./src/gfx/geometries/CrossGeometry.js","webpack://miew/./src/gfx/geometries/IsoSurfaceGeometry.js","webpack://miew/./src/gfx/geometries/IsoSurfaceMarchCube.js","webpack://miew/./src/gfx/geometries/IsoSurface.js","webpack://miew/./src/gfx/geometries/VolumeSurfaceGeometry.js","webpack://miew/./src/gfx/geometries/QuickSurfGeometry.js","webpack://miew/./src/gfx/geometries/ContactSurface.js","webpack://miew/./src/gfx/geometries/ContactSurfaceGeometry.js","webpack://miew/./src/gfx/geometries/IsoSurfaceAtomColored.js","webpack://miew/./src/gfx/geometries/IsosurfaceBuildNormals.js","webpack://miew/./src/gfx/geometries/IsoSurfaceGeo.js","webpack://miew/./src/gfx/geometries/SSIsosurfaceGeometry.js","webpack://miew/./src/gfx/geometries/LabelsGeometry.js","webpack://miew/./src/gfx/geometries/geometries.js","webpack://miew/./src/gfx/capabilities.js","webpack://miew/./src/gfx/noiseTexture.js","webpack://miew/./src/gfx/shaders/UberMaterial.js","webpack://miew/./src/gfx/meshes/UberObject.js","webpack://miew/./src/gfx/meshes/ZSpriteMesh.js","webpack://miew/./src/gfx/meshes/ZClippedMesh.js","webpack://miew/./src/gfx/meshes/TextMesh.js","webpack://miew/./src/gfx/meshes/SimpleMesh.js","webpack://miew/./src/gfx/meshes/ThickLineMesh.js","webpack://miew/./src/gfx/meshes/InstancedMesh.js","webpack://miew/./src/gfx/meshes/meshes.js","webpack://miew/./src/gfx/meshes/MeshCreator.js","webpack://miew/./src/gfx/meshes/TransformGroup.js","webpack://miew/./src/gfx/modes/groups/ChemGroup.js","webpack://miew/./src/gfx/modes/groups/AtomsGroup.js","webpack://miew/./src/gfx/modes/groups/AtomsSphereGroup.js","webpack://miew/./src/gfx/modes/groups/AtomsSurfaceGroup.js","webpack://miew/./src/gfx/modes/groups/AtomsSASSESGroupStub.js","webpack://miew/./src/gfx/modes/groups/AtomsTextGroup.js","webpack://miew/./src/gfx/modes/groups/AromaticGroup.js","webpack://miew/./src/gfx/modes/groups/AromaticTorusGroup.js","webpack://miew/./src/gfx/modes/groups/AromaticLinesGroup.js","webpack://miew/./src/gfx/modes/groups/ResiduesGroup.js","webpack://miew/./src/gfx/modes/groups/NucleicItemGroup.js","webpack://miew/./src/gfx/modes/groups/NucleicCylindersGroup.js","webpack://miew/./src/gfx/modes/groups/NucleicSpheresGroup.js","webpack://miew/./src/gfx/modes/groups/CartoonHelper.js","webpack://miew/./src/gfx/modes/groups/ResiduesSubseqGroup.js","webpack://miew/./src/gfx/modes/groups/ResiduesTraceGroup.js","webpack://miew/./src/gfx/modes/groups/BondsGroup.js","webpack://miew/./src/gfx/modes/groups/BondsCylinderGroup.js","webpack://miew/./src/gfx/modes/groups/BondsLinesGroup.js","webpack://miew/./src/gfx/modes/groups/groups.js","webpack://miew/./src/gfx/modes/processors/AtomsProcessor.js","webpack://miew/./src/gfx/modes/processors/OrphanAtomsProcessor.js","webpack://miew/./src/gfx/modes/processors/ResiduesProcessor.js","webpack://miew/./src/gfx/modes/processors/NucleicProcessor.js","webpack://miew/./src/gfx/modes/processors/SubseqsProcessor.js","webpack://miew/./src/gfx/modes/processors/BondsProcessor.js","webpack://miew/./src/gfx/modes/processors/AromaticProcessor.js","webpack://miew/./src/gfx/modes/processors/processors.js","webpack://miew/./src/gfx/modes/groups/GroupsFactory.js","webpack://miew/./src/gfx/modes/Mode.js","webpack://miew/./src/gfx/modes/LinesMode.js","webpack://miew/./src/gfx/modes/LicoriceMode.js","webpack://miew/./src/gfx/modes/BallsAndSticksMode.js","webpack://miew/./src/gfx/modes/VanDerWaalsMode.js","webpack://miew/./src/gfx/modes/TraceMode.js","webpack://miew/./src/gfx/modes/TubeMode.js","webpack://miew/./src/gfx/modes/CartoonMode.js","webpack://miew/./src/gfx/modes/SurfaceMode.js","webpack://miew/./src/gfx/modes/QuickSurfaceMode.js","webpack://miew/./src/gfx/modes/IsoSurfaceMode.js","webpack://miew/./src/gfx/modes/IsoSurfaceSASMode.js","webpack://miew/./src/gfx/modes/IsoSurfaceSESMode.js","webpack://miew/./src/gfx/modes/ContactSurfaceMode.js","webpack://miew/./src/gfx/modes/TextMode.js","webpack://miew/./src/gfx/modes.js","webpack://miew/./src/gfx/palettes/Palette.js","webpack://miew/./src/gfx/palettes/cpkPalette.js","webpack://miew/./src/gfx/palettes/jmolPalette.js","webpack://miew/./src/gfx/palettes/vmdPalette.js","webpack://miew/./src/gfx/palettes.js","webpack://miew/./src/gfx/colorers/Colorer.js","webpack://miew/./src/gfx/colorers/ElementColorer.js","webpack://miew/./src/gfx/colorers/ResidueTypeColorer.js","webpack://miew/./src/gfx/colorers/SequenceColorer.js","webpack://miew/./src/gfx/colorers/ChainColorer.js","webpack://miew/./src/gfx/colorers/SecondaryStructureColorer.js","webpack://miew/./src/gfx/colorers/UniformColorer.js","webpack://miew/./src/gfx/colorers/ConditionalColorer.js","webpack://miew/./src/gfx/colorers/ConformationColorer.js","webpack://miew/./src/gfx/colorers/TemperatureColorer.js","webpack://miew/./src/gfx/colorers/OccupancyColorer.js","webpack://miew/./src/gfx/colorers/HydrophobicityColorer.js","webpack://miew/./src/gfx/colorers/MoleculeColorer.js","webpack://miew/./src/gfx/colorers/CarbonColorer.js","webpack://miew/./src/gfx/colorers.js","webpack://miew/./src/gfx/materials.js","webpack://miew/./src/gfx/meshutils.js","webpack://miew/./src/gfx/Representation.js","webpack://miew/./src/ComplexVisualEdit.js","webpack://miew/./src/ComplexVisual.js","webpack://miew/./src/gfx/shaders/VolumeMaterial.js","webpack://miew/./src/gfx/VolumeMesh.js","webpack://miew/./src/gfx/VolumeBounds.js","webpack://miew/./src/gfx/VolumeFarPlane.js","webpack://miew/./src/VolumeVisual.js","webpack://miew/./src/io/loaders/LoaderList.js","webpack://miew/./src/io/loaders/Loader.js","webpack://miew/./src/io/loaders/FileLoader.js","webpack://miew/./src/io/loaders/XHRLoader.js","webpack://miew/./src/io/loaders/ImmediateLoader.js","webpack://miew/./src/io/loaders.js","webpack://miew/./src/io/parsers/ParserList.js","webpack://miew/./src/io/parsers/Parser.js","webpack://miew/./src/io/parsers/pdb/Remark290.js","webpack://miew/./src/io/parsers/pdb/Remark350.js","webpack://miew/./src/io/parsers/PDBStream.js","webpack://miew/./src/io/parsers/PDBParser.js","webpack://miew/./src/io/parsers/CMLParser.js","webpack://miew/./src/io/parsers/MMTFParser.js","webpack://miew/./src/io/parsers/ParsingError.js","webpack://miew/./src/io/parsers/readCIF.js","webpack://miew/./src/io/parsers/CIFParser.js","webpack://miew/./src/io/parsers/VolumeModel.js","webpack://miew/./src/io/parsers/CCP4Parser.js","webpack://miew/./src/io/parsers/XYZParser.js","webpack://miew/./src/io/parsers/PubChemParser.js","webpack://miew/./src/io/parsers/SDFStream.js","webpack://miew/./src/io/parsers/SDFParser.js","webpack://miew/./src/io/parsers/DSN6Parser.js","webpack://miew/./src/io/parsers/GROReader.js","webpack://miew/./src/io/parsers/GROParser.js","webpack://miew/./src/io/parsers/MOL2Parser.js","webpack://miew/./src/io/parsers.js","webpack://miew/./src/io/exporters/ExporterList.js","webpack://miew/./src/io/exporters/Exporter.js","webpack://miew/./src/io/exporters/PDBResult.js","webpack://miew/./src/io/exporters/PDBExporter.js","webpack://miew/./src/io/exporters/fbx/FBXModel.js","webpack://miew/./src/io/exporters/fbx/FBXGeometry.js","webpack://miew/./src/io/exporters/fbx/FBX1CGeometry.js","webpack://miew/./src/io/exporters/fbx/FBX2CCylinder.js","webpack://miew/./src/io/exporters/fbx/FBXInfoExtractor.js","webpack://miew/./src/io/exporters/fbx/FBXResult.js","webpack://miew/./src/io/exporters/FBXExporter.js","webpack://miew/./src/io/exporters.js","webpack://miew/./src/io/io.js","webpack://miew/./src/gfx/CSS2DRenderer.js","webpack://miew/./src/utils/getTopWindow.js","webpack://miew/./src/ui/ObjectControls.js","webpack://miew/./src/ui/Picker.js","webpack://miew/./src/gfx/Axes.js","webpack://miew/./src/gfx/FrameInfo.js","webpack://miew/./src/gfx/objects/SceneObject.js","webpack://miew/./src/gfx/objects/LinesObj.js","webpack://miew/./src/gfx/shaders/OutlineMaterial.js","webpack://miew/./src/gfx/shaders/FXAAMaterial.js","webpack://miew/./src/gfx/shaders/AOMaterial.js","webpack://miew/./src/gfx/shaders/AOHorBlurMaterial.js","webpack://miew/./src/gfx/shaders/AOVertBlurWithBlendMaterial.js","webpack://miew/./src/gfx/shaders/AnaglyphMaterial.js","webpack://miew/./src/gfx/ViewInterpolator.js","webpack://miew/./src/utils/Cookies.js","webpack://miew/./src/gfx/vr/createWebVRButton.js","webpack://miew/./src/gfx/vr/WebVRPoC.js","webpack://miew/./src/Miew.js","webpack://miew/./src/utils/MiewCLIHelp.js","webpack://miew/./src/Miew-cli.js","webpack://miew/./src/index.js"],"sourcesContent":["/* eslint-disable */\r\n// DO NOT EDIT! Automatically generated from .jison\r\n/* parser generated by jison 0.4.18 */\r\n/*\r\n Returns a Parser object of the following structure:\r\n\r\n Parser: {\r\n yy: {}\r\n }\r\n\r\n Parser.prototype: {\r\n yy: {},\r\n trace: function(),\r\n symbols_: {associative list: name ==> number},\r\n terminals_: {associative list: number ==> name},\r\n productions_: [...],\r\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\r\n table: [...],\r\n defaultActions: {...},\r\n parseError: function(str, hash),\r\n parse: function(input),\r\n\r\n lexer: {\r\n EOF: 1,\r\n parseError: function(str, hash),\r\n setInput: function(input),\r\n input: function(),\r\n unput: function(str),\r\n more: function(),\r\n less: function(n),\r\n pastInput: function(),\r\n upcomingInput: function(),\r\n showPosition: function(),\r\n test_match: function(regex_match_array, rule_index),\r\n next: function(),\r\n lex: function(),\r\n begin: function(condition),\r\n popState: function(),\r\n _currentRules: function(),\r\n topState: function(),\r\n pushState: function(condition),\r\n\r\n options: {\r\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\r\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\r\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\r\n },\r\n\r\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\r\n rules: [...],\r\n conditions: {associative list: name ==> set},\r\n }\r\n }\r\n\r\n\r\n token location info (@$, _$, etc.): {\r\n first_line: n,\r\n last_line: n,\r\n first_column: n,\r\n last_column: n,\r\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\r\n }\r\n\r\n\r\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\r\n text: (matched text)\r\n token: (the produced terminal token, if any)\r\n line: (yylineno)\r\n }\r\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\r\n loc: (yylloc)\r\n expected: (string describing the set of expected tokens)\r\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\r\n }\r\n*/\r\nvar parser = (function(){\r\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,60],$V1=[1,62],$V2=[1,63],$V3=[1,65],$V4=[1,66],$V5=[1,67],$V6=[1,68],$V7=[1,69],$V8=[1,80],$V9=[1,72],$Va=[1,73],$Vb=[1,74],$Vc=[1,75],$Vd=[1,99],$Ve=[1,76],$Vf=[1,100],$Vg=[1,79],$Vh=[1,51],$Vi=[1,81],$Vj=[1,82],$Vk=[1,84],$Vl=[1,83],$Vm=[1,85],$Vn=[1,96],$Vo=[1,97],$Vp=[1,98],$Vq=[1,86],$Vr=[1,87],$Vs=[1,64],$Vt=[1,70],$Vu=[1,71],$Vv=[1,77],$Vw=[1,78],$Vx=[1,53],$Vy=[1,54],$Vz=[1,55],$VA=[1,61],$VB=[1,88],$VC=[1,89],$VD=[1,90],$VE=[1,91],$VF=[1,92],$VG=[1,93],$VH=[1,94],$VI=[1,95],$VJ=[1,101],$VK=[1,102],$VL=[1,103],$VM=[1,104],$VN=[1,105],$VO=[1,56],$VP=[1,57],$VQ=[1,58],$VR=[1,59],$VS=[1,115],$VT=[1,111],$VU=[1,114],$VV=[1,112],$VW=[1,113],$VX=[1,118],$VY=[1,117],$VZ=[1,134],$V_=[1,149],$V$=[1,150],$V01=[1,157],$V11=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],$V21=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,71,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],$V31=[5,6,7,9,13,15,17,18,19,20,23,25,26,27,30,33,34,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,82,83,84,85,86,87,88,89,90,91,92,93,94,95],$V41=[5,70,72],$V51=[5,74],$V61=[71,101];\r\nvar parser = {trace: function trace () { },\r\nyy: {},\r\nsymbols_: {\"error\":2,\"Program\":3,\"Command\":4,\"EOF\":5,\"RESET\":6,\"BUILD\":7,\"ALL\":8,\"HELP\":9,\"Path\":10,\"MOTM\":11,\"OneArgCommand\":12,\"GET\":13,\"STRING\":14,\"SET\":15,\"Value\":16,\"SET_SAVE\":17,\"SET_RESTORE\":18,\"SET_RESET\":19,\"PRESET\":20,\"AddRepresentation\":21,\"EditRepresentation\":22,\"REMOVE\":23,\"RepresentationReference\":24,\"HIDE\":25,\"SHOW\":26,\"LIST\":27,\"EXPAND_KEY\":28,\"SELECTOR_KEY\":29,\"SELECT\":30,\"AS\":31,\"WordAll\":32,\"SELECTOR\":33,\"WITHIN\":34,\"NUMBER\":35,\"OF\":36,\"MATERIAL\":37,\"IDENTIFIER\":38,\"ModeCMD\":39,\"ColorCMD\":40,\"VIEW\":41,\"BASE_64\":42,\"UNIT\":43,\"DSSP\":44,\"SCALE\":45,\"ROTATE\":46,\"AxesList\":47,\"TRANSLATE\":48,\"CENTER\":49,\"GetURLBranch\":50,\"Screenshot\":51,\"LINE\":52,\"ArgList\":53,\"LISTOBJ\":54,\"REMOVEOBJ\":55,\"URL\":56,\"VIEW_KEY\":57,\"SCREENSHOT\":58,\"LOAD\":59,\"Url\":60,\"FILE_KEY\":61,\"ADD\":62,\"Description\":63,\"REP\":64,\"MODE\":65,\"COLOR\":66,\"Descriptor\":67,\"RepresentationOwnProperty\":68,\"RepresentationOwnPropertyOpts\":69,\"DESC_KEY\":70,\"=\":71,\"DESC_KEY_OPTS\":72,\"AxesArg\":73,\"DESC_KEY_AXES\":74,\"Arg\":75,\"PathWoDescKey\":76,\"HEX\":77,\"BOOL\":78,\"Word\":79,\"CommandSetWoDESC_KEY\":80,\"DescKeys\":81,\"CLEAR\":82,\"FILE_LIST\":83,\"FILE_REGISTER\":84,\"FILE_DELETE\":85,\"PRESET_ADD\":86,\"PRESET_DELETE\":87,\"PRESET_UPDATE\":88,\"PRESET_RENAME\":89,\"PRESET_OPEN\":90,\"CREATE_SCENARIO\":91,\"RESET_SCENARIO\":92,\"DELETE_SCENARIO\":93,\"ADD_SCENARIO_ITEM\":94,\"LIST_SCENARIO\":95,\"PDB_KEY\":96,\"DELAY_KEY\":97,\"PRST_KEY\":98,\"DESCRIPTION_KEY\":99,\"CommandSet\":100,\".\":101,\"PresetPath\":102,\"/\":103,\"HexOrNumber\":104,\"$accept\":0,\"$end\":1},\r\nterminals_: {2:\"error\",5:\"EOF\",6:\"RESET\",7:\"BUILD\",8:\"ALL\",9:\"HELP\",11:\"MOTM\",13:\"GET\",14:\"STRING\",15:\"SET\",17:\"SET_SAVE\",18:\"SET_RESTORE\",19:\"SET_RESET\",20:\"PRESET\",23:\"REMOVE\",25:\"HIDE\",26:\"SHOW\",27:\"LIST\",28:\"EXPAND_KEY\",29:\"SELECTOR_KEY\",30:\"SELECT\",31:\"AS\",33:\"SELECTOR\",34:\"WITHIN\",35:\"NUMBER\",36:\"OF\",37:\"MATERIAL\",38:\"IDENTIFIER\",41:\"VIEW\",42:\"BASE_64\",43:\"UNIT\",44:\"DSSP\",45:\"SCALE\",46:\"ROTATE\",48:\"TRANSLATE\",49:\"CENTER\",52:\"LINE\",54:\"LISTOBJ\",55:\"REMOVEOBJ\",56:\"URL\",57:\"VIEW_KEY\",58:\"SCREENSHOT\",59:\"LOAD\",61:\"FILE_KEY\",62:\"ADD\",64:\"REP\",65:\"MODE\",66:\"COLOR\",70:\"DESC_KEY\",71:\"=\",72:\"DESC_KEY_OPTS\",74:\"DESC_KEY_AXES\",77:\"HEX\",78:\"BOOL\",82:\"CLEAR\",83:\"FILE_LIST\",84:\"FILE_REGISTER\",85:\"FILE_DELETE\",86:\"PRESET_ADD\",87:\"PRESET_DELETE\",88:\"PRESET_UPDATE\",89:\"PRESET_RENAME\",90:\"PRESET_OPEN\",91:\"CREATE_SCENARIO\",92:\"RESET_SCENARIO\",93:\"DELETE_SCENARIO\",94:\"ADD_SCENARIO_ITEM\",95:\"LIST_SCENARIO\",96:\"PDB_KEY\",97:\"DELAY_KEY\",98:\"PRST_KEY\",99:\"DESCRIPTION_KEY\",101:\".\",103:\"/\"},\r\nproductions_: [0,[3,2],[3,1],[4,1],[4,1],[4,2],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,3],[4,3],[4,1],[4,1],[4,1],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,2],[4,2],[4,1],[4,2],[4,2],[4,2],[4,4],[4,2],[4,6],[4,2],[4,1],[4,1],[4,1],[4,2],[4,2],[4,1],[4,2],[4,1],[4,2],[4,2],[4,2],[4,1],[4,2],[4,1],[4,1],[4,3],[4,3],[4,4],[4,4],[4,1],[4,2],[50,1],[50,2],[50,2],[50,3],[50,3],[51,1],[51,2],[51,3],[12,2],[12,2],[12,2],[21,1],[21,2],[21,2],[21,3],[22,2],[22,3],[39,2],[39,3],[40,2],[40,3],[24,1],[24,1],[63,1],[63,2],[63,3],[63,4],[67,1],[67,1],[67,2],[68,3],[69,3],[47,1],[47,2],[73,2],[53,1],[53,2],[75,3],[16,1],[16,1],[16,1],[16,1],[16,1],[79,1],[79,1],[32,1],[32,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[100,1],[100,1],[76,1],[76,3],[76,3],[10,1],[10,1],[10,3],[10,3],[10,3],[60,1],[102,1],[102,3],[104,1],[104,1]],\r\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\r\n/* this == yyval */\r\n\r\nvar $0 = $$.length - 1;\r\nswitch (yystate) {\r\ncase 1:\r\n return $$[$0-1]; \r\nbreak;\r\ncase 3:\r\nthis.$ = yy.miew.reset(false); yy.ClearContext(); yy.miew.resetReps(\"empty\");\r\nbreak;\r\ncase 4:\r\nthis.$ = yy.miew.rebuild();\r\nbreak;\r\ncase 5:\r\nthis.$ = yy.miew.rebuildAll(); yy.miew.rebuild();\r\nbreak;\r\ncase 6:\r\nthis.$ = yy.echo(yy.utils.help().toString());\r\nbreak;\r\ncase 7:\r\nthis.$ = yy.echo(yy.utils.help($$[$0]).toString());\r\nbreak;\r\ncase 8:\r\nthis.$ = yy.miew.motm();\r\nbreak;\r\ncase 10: case 11:\r\nthis.$ = yy.utils.propagateProp($$[$0]); yy.echo(yy.miew.get($$[$0]).toString());\r\nbreak;\r\ncase 12: case 13:\r\nthis.$ = yy.miew.set($$[$0-1], yy.utils.propagateProp($$[$0-1], $$[$0]));;\r\nbreak;\r\ncase 14:\r\nthis.$ = yy.miew.saveSettings();;\r\nbreak;\r\ncase 15:\r\nthis.$ = yy.miew.restoreSettings();;\r\nbreak;\r\ncase 16:\r\nthis.$ = yy.miew.resetSettings();;\r\nbreak;\r\ncase 17:\r\nthis.$ = yy.miew.resetReps();\r\nbreak;\r\ncase 18:\r\nthis.$ = yy.miew.applyPreset($$[$0]);\r\nbreak;\r\ncase 21:\r\nthis.$ = yy.miew.repRemove($$[$0]); yy.representations.remove($$[$0]);\r\nbreak;\r\ncase 22:\r\nthis.$ = yy.miew.repHide($$[$0]);\r\nbreak;\r\ncase 23:\r\nthis.$ = yy.miew.repHide($$[$0], false);\r\nbreak;\r\ncase 24:\r\nthis.$ = yy.echo(yy.utils.listRep(yy.miew, yy.representations, $$[$0], '-e'));\r\nbreak;\r\ncase 25:\r\nthis.$ = yy.echo(yy.utils.list(yy.miew, yy.representations));\r\nbreak;\r\ncase 26:\r\nthis.$ = yy.echo(yy.utils.list(yy.miew, yy.representations, $$[$0]));\r\nbreak;\r\ncase 27:\r\nthis.$ = yy.echo(yy.utils.listSelector(yy.miew, yy.Context));\r\nbreak;\r\ncase 28:\r\nthis.$ = yy.miew.select(yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0], true));\r\nbreak;\r\ncase 29:\r\nthis.$ = yy.Context[$$[$0].toLowerCase()] = yy.utils.checkArg($$[$0-3].toLowerCase(), $$[$0-2], true); yy.miew.select(yy.Context[$$[$0].toLowerCase()]);\r\nbreak;\r\ncase 30:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {selector : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0])});\r\nbreak;\r\ncase 31:\r\nthis.$ = yy.Context[$$[$0].toLowerCase()] = yy.miew.within(yy.utils.checkArg(\"select\", $$[$0-2], true), Number($$[$0-4]));\r\nbreak;\r\ncase 32:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {material : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 35:\r\nthis.$ = yy.echo(yy.miew.view());\r\nbreak;\r\ncase 36: case 37:\r\nthis.$ = yy.miew.view($$[$0]);\r\nbreak;\r\ncase 38:\r\nthis.$ = yy.echo(yy.miew.changeUnit());\r\nbreak;\r\ncase 39:\r\nthis.$ = yy.echo(yy.miew.changeUnit($$[$0]));\r\nbreak;\r\ncase 40:\r\nthis.$ = yy.miew.dssp();\r\nbreak;\r\ncase 41:\r\nthis.$ = yy.miew.scale($$[$0]);\r\nbreak;\r\ncase 42:\r\n for (var i = 0, n = $$[$0].length; i < n; i++) {yy.miew.rotate($$[$0][i]['x'] * Math.PI / 180.0, $$[$0][i]['y'] * Math.PI / 180.0, $$[$0][i]['z'] * Math.PI / 180.0)} \r\nbreak;\r\ncase 43:\r\n for (var i = 0, n = $$[$0].length; i < n; i++) {yy.miew.translate($$[$0][i]['x'] || 0, $$[$0][i]['y'] || 0, $$[$0][i]['z'] || 0)} \r\nbreak;\r\ncase 44:\r\nthis.$ = yy.miew.center();\r\nbreak;\r\ncase 45:\r\nthis.$ = yy.miew.center($$[$0]);\r\nbreak;\r\ncase 48: case 49:\r\nthis.$ = yy.miew.addObject({type: 'line', params: [$$[$0-1], $$[$0]]}, true);\r\nbreak;\r\ncase 50: case 51:\r\nthis.$ = yy.miew.addObject({type: 'line', params: [$$[$0-2], $$[$0-1]], opts:$$[$0].toJSO(yy.utils, 'objects', 'line')}, true);\r\nbreak;\r\ncase 52:\r\nthis.$ = yy.echo(yy.utils.listObjs(yy.miew));\r\nbreak;\r\ncase 53:\r\nthis.$ = yy.miew.removeObject($$[$0]);\r\nbreak;\r\ncase 54:\r\nthis.$ = yy.echo(yy.miew.getURL({view: false, settings: false}));\r\nbreak;\r\ncase 55:\r\nthis.$ = yy.echo(yy.miew.getURL({view: false, settings: true}));\r\nbreak;\r\ncase 56:\r\nthis.$ = yy.echo(yy.miew.getURL({view: true, settings: false}));\r\nbreak;\r\ncase 57: case 58:\r\nthis.$ = yy.echo(yy.miew.getURL({view: true, settings: true}));\r\nbreak;\r\ncase 59:\r\nthis.$ = yy.miew.screenshotSave();\r\nbreak;\r\ncase 60:\r\nthis.$ = yy.miew.screenshotSave('', Number($$[$0]));\r\nbreak;\r\ncase 61:\r\nthis.$ = yy.miew.screenshotSave('', Number($$[$0-1]), Number($$[$0]));\r\nbreak;\r\ncase 62: case 63: case 64:\r\nthis.$ = yy.utils.load(yy.miew, $$[$0]); yy.representations.clear();\r\nbreak;\r\ncase 65:\r\nthis.$ = yy.echo(yy.representations.add(yy.miew.repAdd()));\r\nbreak;\r\ncase 66:\r\nthis.$ = yy.echo(yy.representations.add($$[$0], yy.miew.repAdd()));\r\nbreak;\r\ncase 67:\r\nthis.$ = yy.echo(yy.representations.add(yy.miew.repAdd($$[$0])));\r\nbreak;\r\ncase 68:\r\nthis.$ = yy.echo(yy.representations.add($$[$0-1], yy.miew.repAdd($$[$0])));\r\nbreak;\r\ncase 69:\r\nthis.$ = yy.miew.rep($$[$0]); yy.miew.repCurrent($$[$0]);\r\nbreak;\r\ncase 70:\r\nthis.$ = yy.miew.rep($$[$0-1], $$[$0]); yy.miew.repCurrent($$[$0-1]);\r\nbreak;\r\ncase 71:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {mode : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 72:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {mode : new Array(yy.utils.checkArg($$[$0-2].toLowerCase(), $$[$0-1].toUpperCase()), $$[$0].toJSO(yy.utils, $$[$0-2], $$[$0-1].toUpperCase()))});\r\nbreak;\r\ncase 73:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {colorer : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 74:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {colorer : new Array(yy.utils.checkArg($$[$0-2].toLowerCase(), $$[$0-1].toUpperCase()), $$[$0].toJSO(yy.utils, $$[$0-2], $$[$0-1].toUpperCase()))});\r\nbreak;\r\ncase 75:\r\nthis.$ = Number(yy.representations.get($$[$0]));\r\nbreak;\r\ncase 76: case 92:\r\nthis.$ = Number($$[$0]);\r\nbreak;\r\ncase 77:\r\nthis.$ = $$[$0];\r\nbreak;\r\ncase 78:\r\nthis.$ = yy._.assign($$[$0-1], $$[$0]);\r\nbreak;\r\ncase 79:\r\nthis.$ = yy._.assign($$[$0-2], $$[$0-1], $$[$0]);\r\nbreak;\r\ncase 80:\r\nthis.$ = yy._.assign($$[$0-3], $$[$0-2], $$[$0-1], $$[$0]);\r\nbreak;\r\ncase 81: case 82:\r\nthis.$ = yy.CreateObjectPair($$[$0].key, $$[$0].val);\r\nbreak;\r\ncase 83:\r\nthis.$ = yy.CreateObjectPair($$[$0-1].key, new Array($$[$0-1].val, $$[$0].toJSO(yy.utils, $$[$0-1].key, $$[$0-1].val)));\r\nbreak;\r\ncase 84: case 85:\r\nthis.$ = Object.create({'key': yy.keyRemap($$[$0-2]), 'val': yy.utils.checkArg($$[$0-2], $$[$0])});\r\nbreak;\r\ncase 86:\r\nthis.$ = [$$[$0]];\r\nbreak;\r\ncase 87:\r\nthis.$ = $$[$0-1].concat($$[$0]);\r\nbreak;\r\ncase 88:\r\nthis.$ = yy.CreateObjectPair($$[$0-1].toLowerCase(), Number($$[$0]));\r\nbreak;\r\ncase 89:\r\nthis.$ = new yy.ArgList($$[$0]);\r\nbreak;\r\ncase 90:\r\nthis.$ = $$[$0-1].append($$[$0]);\r\nbreak;\r\ncase 91:\r\nthis.$ = new yy.Arg($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 93:\r\nthis.$ = parseInt($$[$0]);\r\nbreak;\r\ncase 94:\r\nthis.$ = JSON.parse($$[$0]);\r\nbreak;\r\ncase 95: case 96:\r\nthis.$ = String($$[$0]);\r\nbreak;\r\ncase 157: case 158: case 161: case 162: case 163:\r\nthis.$ = $$[$0-2] + $$[$0-1] + $$[$0] //cause of could be color word in path;\r\nbreak;\r\ncase 166:\r\nthis.$ = $$[$0-2] = $$[$0-2] + $$[$0-1] + $$[$0];\r\nbreak;\r\n}\r\n},\r\ntable: [{3:1,4:2,5:[1,3],6:[1,4],7:[1,5],9:[1,6],11:[1,7],12:8,13:[1,9],15:[1,10],17:[1,11],18:[1,12],19:[1,13],20:[1,14],21:15,22:16,23:[1,17],25:[1,18],26:[1,19],27:[1,20],30:[1,21],33:[1,22],34:[1,23],37:[1,24],39:25,40:26,41:[1,27],43:[1,28],44:[1,29],45:[1,30],46:[1,31],48:[1,32],49:[1,33],50:34,51:35,52:[1,36],54:[1,37],55:[1,38],56:[1,44],58:[1,45],59:[1,39],62:[1,40],64:[1,41],65:[1,42],66:[1,43]},{1:[3]},{5:[1,46]},{1:[2,2]},{5:[2,3]},{5:[2,4],8:[1,47]},{5:[2,6],6:$V0,7:$V1,9:$V2,10:48,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,8]},{5:[2,9]},{6:$V0,7:$V1,9:$V2,10:106,13:$V3,14:[1,107],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{6:$V0,7:$V1,9:$V2,10:108,13:$V3,14:[1,109],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,14]},{5:[2,15]},{5:[2,16]},{5:[2,17],14:$VS,16:110,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,19]},{5:[2,20]},{24:116,35:$VX,38:$VY},{24:119,35:$VX,38:$VY},{24:120,35:$VX,38:$VY},{5:[2,25],24:121,28:[1,122],29:[1,123],35:$VX,38:$VY},{14:[1,124]},{14:[1,125]},{35:[1,126]},{38:[1,127]},{5:[2,33]},{5:[2,34]},{5:[2,35],14:[1,128],42:[1,129]},{5:[2,38],35:[1,130]},{5:[2,40]},{35:[1,131]},{47:132,73:133,74:$VZ},{47:135,73:133,74:$VZ},{5:[2,44],14:[1,136]},{5:[2,46]},{5:[2,47]},{6:$V0,7:$V1,9:$V2,10:138,13:$V3,14:[1,137],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,52]},{35:[1,139]},{14:[1,143],38:[1,141],60:140,61:[1,142]},{5:[2,65],38:[1,144],63:145,67:146,68:147,69:148,70:$V_,72:$V$},{24:151,35:$VX,38:$VY},{38:[1,152]},{38:[1,153]},{5:[2,54],29:[1,154],57:[1,155]},{5:[2,59],35:[1,156]},{1:[2,1]},{5:[2,5]},{5:[2,7],101:$V01},o($V11,[2,159]),o($V11,[2,160]),o($V21,[2,97]),o($V21,[2,98]),o($V11,[2,147]),o($V11,[2,148]),o($V11,[2,149]),o($V11,[2,150]),o($V11,[2,151]),o($V11,[2,152]),o($V11,[2,153]),o($V21,[2,101]),o($V21,[2,102]),o($V21,[2,103]),o($V21,[2,104]),o($V21,[2,105]),o($V21,[2,106]),o($V21,[2,107]),o($V21,[2,108]),o($V21,[2,109]),o($V21,[2,110]),o($V21,[2,111]),o($V21,[2,112]),o($V21,[2,113]),o($V21,[2,114]),o($V21,[2,115]),o($V21,[2,116]),o($V21,[2,117]),o($V21,[2,118]),o($V21,[2,119]),o($V21,[2,120]),o($V21,[2,121]),o($V21,[2,122]),o($V21,[2,123]),o($V21,[2,124]),o($V21,[2,125]),o($V21,[2,126]),o($V21,[2,127]),o($V21,[2,128]),o($V21,[2,129]),o($V21,[2,130]),o($V21,[2,131]),o($V21,[2,132]),o($V21,[2,133]),o($V21,[2,134]),o($V21,[2,135]),o($V21,[2,136]),o($V21,[2,137]),o($V21,[2,138]),o($V21,[2,139]),o($V21,[2,140]),o($V21,[2,141]),o($V21,[2,142]),o($V21,[2,143]),o($V21,[2,144]),o($V21,[2,145]),o($V21,[2,146]),{5:[2,10],101:$V01},{5:[2,11]},{14:$VS,16:158,35:$VT,38:$VU,77:$VV,78:$VW,101:$V01},{14:$VS,16:159,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,18]},o($V31,[2,92]),o($V31,[2,93]),o($V31,[2,94]),o($V31,[2,95]),o($V31,[2,96]),{5:[2,21]},o($V41,[2,75]),o($V41,[2,76]),{5:[2,22]},{5:[2,23]},{5:[2,24]},{5:[2,26]},{5:[2,27]},{5:[2,28],31:[1,160]},{5:[2,30]},{36:[1,161]},{5:[2,32]},{5:[2,36]},{5:[2,37]},{5:[2,39]},{5:[2,41]},{5:[2,42],73:162,74:$VZ},o($V51,[2,86]),{35:[1,163]},{5:[2,43],73:162,74:$VZ},{5:[2,45]},{14:[1,164]},{6:$V0,7:$V1,9:$V2,10:165,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR,101:$V01},{5:[2,53]},{5:[2,62]},{5:[2,63]},{5:[2,64]},{5:[2,164]},{5:[2,66],63:166,67:146,68:147,69:148,70:$V_,72:$V$},{5:[2,67]},{5:[2,77],67:167,68:147,69:148,70:$V_,72:$V$},o($V41,[2,81]),o($V41,[2,82],{80:52,53:168,75:169,76:170,79:171,6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN}),{71:[1,172]},{71:[1,173]},{5:[2,69],63:174,67:146,68:147,69:148,70:$V_,72:$V$},{5:[2,71],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:175,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,73],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:176,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,55],57:[1,177]},{5:[2,56],29:[1,178]},{5:[2,60],35:[1,179]},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,35:[1,181],37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:180,80:52,81:182,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,12]},{5:[2,13]},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,32:183,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:184,80:52,81:185,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{14:[1,186]},o($V51,[2,87]),o($V51,[2,88]),{5:[2,48],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:187,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,49],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:188,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,101:$V01},{5:[2,68]},{5:[2,78],67:189,68:147,69:148,70:$V_,72:$V$},o($V41,[2,83],{80:52,76:170,79:171,75:190,6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN}),o($V31,[2,89]),{71:[1,191],101:[1,192]},o($V61,[2,156]),{14:$VS,16:193,35:$VT,38:$VU,77:$VV,78:$VW},{14:$VS,16:194,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,70]},{5:[2,72],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,74],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,57]},{5:[2,58]},{5:[2,61]},o($V11,[2,161]),o($V11,[2,162]),o($V11,[2,163]),{5:[2,29]},{5:[2,99]},{5:[2,100]},{31:[1,195]},{5:[2,50],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,51],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,79],67:196,68:147,69:148,70:$V_,72:$V$},o($V31,[2,90]),{14:$VS,16:197,35:$VT,38:$VU,77:$VV,78:$VW},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,35:[1,199],37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,79:198,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},o($V41,[2,84]),o($V31,[2,85]),{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,32:200,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:184,80:52,81:185,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,80]},o($V31,[2,91]),o($V61,[2,157]),o($V61,[2,158]),{5:[2,31]}],\r\ndefaultActions: {3:[2,2],4:[2,3],7:[2,8],8:[2,9],11:[2,14],12:[2,15],13:[2,16],15:[2,19],16:[2,20],25:[2,33],26:[2,34],29:[2,40],34:[2,46],35:[2,47],37:[2,52],46:[2,1],47:[2,5],107:[2,11],110:[2,18],116:[2,21],119:[2,22],120:[2,23],121:[2,24],122:[2,26],123:[2,27],125:[2,30],127:[2,32],128:[2,36],129:[2,37],130:[2,39],131:[2,41],136:[2,45],139:[2,53],140:[2,62],141:[2,63],142:[2,64],143:[2,164],145:[2,67],158:[2,12],159:[2,13],166:[2,68],174:[2,70],177:[2,57],178:[2,58],179:[2,61],183:[2,29],184:[2,99],185:[2,100],196:[2,80],200:[2,31]},\r\nparseError: function parseError (str, hash) {\r\n if (hash.recoverable) {\r\n this.trace(str);\r\n } else {\r\n var error = new Error(str);\r\n error.hash = hash;\r\n throw error;\r\n }\r\n},\r\nparse: function parse(input) {\r\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\r\n var args = lstack.slice.call(arguments, 1);\r\n var lexer = Object.create(this.lexer);\r\n var sharedState = { yy: {} };\r\n for (var k in this.yy) {\r\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\r\n sharedState.yy[k] = this.yy[k];\r\n }\r\n }\r\n lexer.setInput(input, sharedState.yy);\r\n sharedState.yy.lexer = lexer;\r\n sharedState.yy.parser = this;\r\n if (typeof lexer.yylloc == 'undefined') {\r\n lexer.yylloc = {};\r\n }\r\n var yyloc = lexer.yylloc;\r\n lstack.push(yyloc);\r\n var ranges = lexer.options && lexer.options.ranges;\r\n if (typeof sharedState.yy.parseError === 'function') {\r\n this.parseError = sharedState.yy.parseError;\r\n } else {\r\n this.parseError = Object.getPrototypeOf(this).parseError;\r\n }\r\n function popStack(n) {\r\n stack.length = stack.length - 2 * n;\r\n vstack.length = vstack.length - n;\r\n lstack.length = lstack.length - n;\r\n }\r\n function lex() {\r\n var token;\r\n token = tstack.pop() || lexer.lex() || EOF;\r\n if (typeof token !== 'number') {\r\n if (token instanceof Array) {\r\n tstack = token;\r\n token = tstack.pop();\r\n }\r\n token = self.symbols_[token] || token;\r\n }\r\n return token;\r\n }\r\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\r\n while (true) {\r\n state = stack[stack.length - 1];\r\n if (this.defaultActions[state]) {\r\n action = this.defaultActions[state];\r\n } else {\r\n if (symbol === null || typeof symbol == 'undefined') {\r\n symbol = lex();\r\n }\r\n action = table[state] && table[state][symbol];\r\n }\r\n if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n var errStr = '';\r\n expected = [];\r\n for (p in table[state]) {\r\n if (this.terminals_[p] && p > TERROR) {\r\n expected.push('\\'' + this.terminals_[p] + '\\'');\r\n }\r\n }\r\n if (lexer.showPosition) {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\r\n } else {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\r\n }\r\n this.parseError(errStr, {\r\n text: lexer.match,\r\n token: this.terminals_[symbol] || symbol,\r\n line: lexer.yylineno,\r\n loc: yyloc,\r\n expected: expected\r\n });\r\n }\r\n if (action[0] instanceof Array && action.length > 1) {\r\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\r\n }\r\n switch (action[0]) {\r\n case 1:\r\n stack.push(symbol);\r\n vstack.push(lexer.yytext);\r\n lstack.push(lexer.yylloc);\r\n stack.push(action[1]);\r\n symbol = null;\r\n if (!preErrorSymbol) {\r\n yyleng = lexer.yyleng;\r\n yytext = lexer.yytext;\r\n yylineno = lexer.yylineno;\r\n yyloc = lexer.yylloc;\r\n if (recovering > 0) {\r\n recovering--;\r\n }\r\n } else {\r\n symbol = preErrorSymbol;\r\n preErrorSymbol = null;\r\n }\r\n break;\r\n case 2:\r\n len = this.productions_[action[1]][1];\r\n yyval.$ = vstack[vstack.length - len];\r\n yyval._$ = {\r\n first_line: lstack[lstack.length - (len || 1)].first_line,\r\n last_line: lstack[lstack.length - 1].last_line,\r\n first_column: lstack[lstack.length - (len || 1)].first_column,\r\n last_column: lstack[lstack.length - 1].last_column\r\n };\r\n if (ranges) {\r\n yyval._$.range = [\r\n lstack[lstack.length - (len || 1)].range[0],\r\n lstack[lstack.length - 1].range[1]\r\n ];\r\n }\r\n r = this.performAction.apply(yyval, [\r\n yytext,\r\n yyleng,\r\n yylineno,\r\n sharedState.yy,\r\n action[1],\r\n vstack,\r\n lstack\r\n ].concat(args));\r\n if (typeof r !== 'undefined') {\r\n return r;\r\n }\r\n if (len) {\r\n stack = stack.slice(0, -1 * len * 2);\r\n vstack = vstack.slice(0, -1 * len);\r\n lstack = lstack.slice(0, -1 * len);\r\n }\r\n stack.push(this.productions_[action[1]][0]);\r\n vstack.push(yyval.$);\r\n lstack.push(yyval._$);\r\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\r\n stack.push(newState);\r\n break;\r\n case 3:\r\n return true;\r\n }\r\n }\r\n return true;\r\n}};\r\n\r\n\r\n/* generated by jison-lex 0.3.4 */\r\nvar lexer = (function(){\r\nvar lexer = ({\r\n\r\nEOF:1,\r\n\r\nparseError:function parseError(str, hash) {\r\n if (this.yy.parser) {\r\n this.yy.parser.parseError(str, hash);\r\n } else {\r\n throw new Error(str);\r\n }\r\n },\r\n\r\n// resets the lexer, sets new input\r\nsetInput:function (input, yy) {\r\n this.yy = yy || this.yy || {};\r\n this._input = input;\r\n this._more = this._backtrack = this.done = false;\r\n this.yylineno = this.yyleng = 0;\r\n this.yytext = this.matched = this.match = '';\r\n this.conditionStack = ['INITIAL'];\r\n this.yylloc = {\r\n first_line: 1,\r\n first_column: 0,\r\n last_line: 1,\r\n last_column: 0\r\n };\r\n if (this.options.ranges) {\r\n this.yylloc.range = [0,0];\r\n }\r\n this.offset = 0;\r\n return this;\r\n },\r\n\r\n// consumes and returns one char from the input\r\ninput:function () {\r\n var ch = this._input[0];\r\n this.yytext += ch;\r\n this.yyleng++;\r\n this.offset++;\r\n this.match += ch;\r\n this.matched += ch;\r\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno++;\r\n this.yylloc.last_line++;\r\n } else {\r\n this.yylloc.last_column++;\r\n }\r\n if (this.options.ranges) {\r\n this.yylloc.range[1]++;\r\n }\r\n\r\n this._input = this._input.slice(1);\r\n return ch;\r\n },\r\n\r\n// unshifts one char (or a string) into the input\r\nunput:function (ch) {\r\n var len = ch.length;\r\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\r\n\r\n this._input = ch + this._input;\r\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\r\n //this.yyleng -= len;\r\n this.offset -= len;\r\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\r\n this.match = this.match.substr(0, this.match.length - 1);\r\n this.matched = this.matched.substr(0, this.matched.length - 1);\r\n\r\n if (lines.length - 1) {\r\n this.yylineno -= lines.length - 1;\r\n }\r\n var r = this.yylloc.range;\r\n\r\n this.yylloc = {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.first_column,\r\n last_column: lines ?\r\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\r\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\r\n this.yylloc.first_column - len\r\n };\r\n\r\n if (this.options.ranges) {\r\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\r\n }\r\n this.yyleng = this.yytext.length;\r\n return this;\r\n },\r\n\r\n// When called from action, caches matched text and appends it on next action\r\nmore:function () {\r\n this._more = true;\r\n return this;\r\n },\r\n\r\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\r\nreject:function () {\r\n if (this.options.backtrack_lexer) {\r\n this._backtrack = true;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n\r\n }\r\n return this;\r\n },\r\n\r\n// retain first n characters of the match\r\nless:function (n) {\r\n this.unput(this.match.slice(n));\r\n },\r\n\r\n// displays already matched input, i.e. for error messages\r\npastInput:function () {\r\n var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays upcoming input, i.e. for error messages\r\nupcomingInput:function () {\r\n var next = this.match;\r\n if (next.length < 20) {\r\n next += this._input.substr(0, 20-next.length);\r\n }\r\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays the character position where the lexing error occurred, i.e. for error messages\r\nshowPosition:function () {\r\n var pre = this.pastInput();\r\n var c = new Array(pre.length + 1).join(\"-\");\r\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\r\n },\r\n\r\n// test the lexed token: return FALSE when not a match, otherwise return token\r\ntest_match:function(match, indexed_rule) {\r\n var token,\r\n lines,\r\n backup;\r\n\r\n if (this.options.backtrack_lexer) {\r\n // save context\r\n backup = {\r\n yylineno: this.yylineno,\r\n yylloc: {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.last_line,\r\n first_column: this.yylloc.first_column,\r\n last_column: this.yylloc.last_column\r\n },\r\n yytext: this.yytext,\r\n match: this.match,\r\n matches: this.matches,\r\n matched: this.matched,\r\n yyleng: this.yyleng,\r\n offset: this.offset,\r\n _more: this._more,\r\n _input: this._input,\r\n yy: this.yy,\r\n conditionStack: this.conditionStack.slice(0),\r\n done: this.done\r\n };\r\n if (this.options.ranges) {\r\n backup.yylloc.range = this.yylloc.range.slice(0);\r\n }\r\n }\r\n\r\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno += lines.length;\r\n }\r\n this.yylloc = {\r\n first_line: this.yylloc.last_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.last_column,\r\n last_column: lines ?\r\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\r\n this.yylloc.last_column + match[0].length\r\n };\r\n this.yytext += match[0];\r\n this.match += match[0];\r\n this.matches = match;\r\n this.yyleng = this.yytext.length;\r\n if (this.options.ranges) {\r\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\r\n }\r\n this._more = false;\r\n this._backtrack = false;\r\n this._input = this._input.slice(match[0].length);\r\n this.matched += match[0];\r\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\r\n if (this.done && this._input) {\r\n this.done = false;\r\n }\r\n if (token) {\r\n return token;\r\n } else if (this._backtrack) {\r\n // recover context\r\n for (var k in backup) {\r\n this[k] = backup[k];\r\n }\r\n return false; // rule action called reject() implying the next rule should be tested instead.\r\n }\r\n return false;\r\n },\r\n\r\n// return next match in input\r\nnext:function () {\r\n if (this.done) {\r\n return this.EOF;\r\n }\r\n if (!this._input) {\r\n this.done = true;\r\n }\r\n\r\n var token,\r\n match,\r\n tempMatch,\r\n index;\r\n if (!this._more) {\r\n this.yytext = '';\r\n this.match = '';\r\n }\r\n var rules = this._currentRules();\r\n for (var i = 0; i < rules.length; i++) {\r\n tempMatch = this._input.match(this.rules[rules[i]]);\r\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n match = tempMatch;\r\n index = i;\r\n if (this.options.backtrack_lexer) {\r\n token = this.test_match(tempMatch, rules[i]);\r\n if (token !== false) {\r\n return token;\r\n } else if (this._backtrack) {\r\n match = false;\r\n continue; // rule action called reject() implying a rule MISmatch.\r\n } else {\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n } else if (!this.options.flex) {\r\n break;\r\n }\r\n }\r\n }\r\n if (match) {\r\n token = this.test_match(match, rules[index]);\r\n if (token !== false) {\r\n return token;\r\n }\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n if (this._input === \"\") {\r\n return this.EOF;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n }\r\n },\r\n\r\n// return next match that has a token\r\nlex:function lex () {\r\n var r = this.next();\r\n if (r) {\r\n return r;\r\n } else {\r\n return this.lex();\r\n }\r\n },\r\n\r\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\r\nbegin:function begin (condition) {\r\n this.conditionStack.push(condition);\r\n },\r\n\r\n// pop the previously active lexer condition state off the condition stack\r\npopState:function popState () {\r\n var n = this.conditionStack.length - 1;\r\n if (n > 0) {\r\n return this.conditionStack.pop();\r\n } else {\r\n return this.conditionStack[0];\r\n }\r\n },\r\n\r\n// produce the lexer rule set which is active for the currently active lexer condition state\r\n_currentRules:function _currentRules () {\r\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\r\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\r\n } else {\r\n return this.conditions[\"INITIAL\"].rules;\r\n }\r\n },\r\n\r\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\r\ntopState:function topState (n) {\r\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\r\n if (n >= 0) {\r\n return this.conditionStack[n];\r\n } else {\r\n return \"INITIAL\";\r\n }\r\n },\r\n\r\n// alias for begin(condition)\r\npushState:function pushState (condition) {\r\n this.begin(condition);\r\n },\r\n\r\n// return the number of states currently on the stack\r\nstateStackSize:function stateStackSize() {\r\n return this.conditionStack.length;\r\n },\r\noptions: {\"case-insensitive\":true},\r\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\nvar YYSTATE=YY_START;\r\nswitch($avoiding_name_collisions) {\r\ncase 0:/* ignore whitespace */\r\nbreak;\r\ncase 1:return '';\r\nbreak;\r\ncase 2:return '';\r\nbreak;\r\ncase 3:return 42;\r\nbreak;\r\ncase 4:return 35;\r\nbreak;\r\ncase 5:return 77;\r\nbreak;\r\ncase 6:return 78;\r\nbreak;\r\ncase 7:return 78;\r\nbreak;\r\ncase 8:return 8;\r\nbreak;\r\ncase 9:return 6;\r\nbreak;\r\ncase 10:return 82;\r\nbreak;\r\ncase 11:return 7;\r\nbreak;\r\ncase 12:return 9;\r\nbreak;\r\ncase 13:return 59;\r\nbreak;\r\ncase 14:return 13\r\nbreak;\r\ncase 15:return 15\r\nbreak;\r\ncase 16:return 17\r\nbreak;\r\ncase 17:return 18\r\nbreak;\r\ncase 18:return 19\r\nbreak;\r\ncase 19:return 20\r\nbreak;\r\ncase 20:return 11\r\nbreak;\r\ncase 21:return 62\r\nbreak;\r\ncase 22:return 64\r\nbreak;\r\ncase 23:return 23\r\nbreak;\r\ncase 24:return 25\r\nbreak;\r\ncase 25:return 26\r\nbreak;\r\ncase 26:return 27\r\nbreak;\r\ncase 27:return 30\r\nbreak;\r\ncase 28:return 34\r\nbreak;\r\ncase 29:return 33\r\nbreak;\r\ncase 30:return 65\r\nbreak;\r\ncase 31:return 66\r\nbreak;\r\ncase 32:return 37\r\nbreak;\r\ncase 33:return 41\r\nbreak;\r\ncase 34:return 43\r\nbreak;\r\ncase 35:return 52\r\nbreak;\r\ncase 36:return 54\r\nbreak;\r\ncase 37:return 55\r\nbreak;\r\ncase 38:return 46\r\nbreak;\r\ncase 39:return 48\r\nbreak;\r\ncase 40:return 45\r\nbreak;\r\ncase 41:return 49\r\nbreak;\r\ncase 42:return 56\r\nbreak;\r\ncase 43:return 58;\r\nbreak;\r\ncase 44:return 44\r\nbreak;\r\ncase 45:return 83\r\nbreak;\r\ncase 46:return 84\r\nbreak;\r\ncase 47:return 85\r\nbreak;\r\ncase 48:return 86\r\nbreak;\r\ncase 49:return 87\r\nbreak;\r\ncase 50:return 88\r\nbreak;\r\ncase 51:return 89\r\nbreak;\r\ncase 52:return 90\r\nbreak;\r\ncase 53:return 91\r\nbreak;\r\ncase 54:return 92\r\nbreak;\r\ncase 55:return 93\r\nbreak;\r\ncase 56:return 94\r\nbreak;\r\ncase 57:return 95\r\nbreak;\r\ncase 58:return 70\r\nbreak;\r\ncase 59:return 70\r\nbreak;\r\ncase 60:return 72\r\nbreak;\r\ncase 61:return 72\r\nbreak;\r\ncase 62:return 74\r\nbreak;\r\ncase 63:return 74\r\nbreak;\r\ncase 64:return 74\r\nbreak;\r\ncase 65:return 31\r\nbreak;\r\ncase 66:return 36\r\nbreak;\r\ncase 67:return 96\r\nbreak;\r\ncase 68:return 97\r\nbreak;\r\ncase 69:return 98\r\nbreak;\r\ncase 70:return 99\r\nbreak;\r\ncase 71:yy_.yytext = yy.utils.unquoteString(yy_.yytext); return 14;\r\nbreak;\r\ncase 72:return 38;\r\nbreak;\r\ncase 73:return 5;\r\nbreak;\r\ncase 74:return 101;\r\nbreak;\r\ncase 75:return 103;\r\nbreak;\r\ncase 76:return '\\\\';\r\nbreak;\r\ncase 77:return 28\r\nbreak;\r\ncase 78:return 61\r\nbreak;\r\ncase 79:return 29\r\nbreak;\r\ncase 80:return 57\r\nbreak;\r\ncase 81:return 71\r\nbreak;\r\n}\r\n},\r\nrules: [/^(?:\\s+)/i,/^(?:[#].*)/i,/^(?:\\/\\/.*)/i,/^(?:([_A-Z0-9\\/\\+]+==))/i,/^(?:-?[0-9]+(\\.[0-9]+)?\\b)/i,/^(?:0[xX][0-9A-F]+\\b)/i,/^(?:false\\b)/i,/^(?:true\\b)/i,/^(?:all\\b)/i,/^(?:reset\\b)/i,/^(?:clear\\b)/i,/^(?:build\\b)/i,/^(?:help\\b)/i,/^(?:load\\b)/i,/^(?:get\\b)/i,/^(?:set\\b)/i,/^(?:set_save\\b)/i,/^(?:set_restore\\b)/i,/^(?:set_reset\\b)/i,/^(?:preset\\b)/i,/^(?:motm\\b)/i,/^(?:add\\b)/i,/^(?:rep\\b)/i,/^(?:remove\\b)/i,/^(?:hide\\b)/i,/^(?:show\\b)/i,/^(?:list\\b)/i,/^(?:select\\b)/i,/^(?:within\\b)/i,/^(?:selector\\b)/i,/^(?:mode\\b)/i,/^(?:color\\b)/i,/^(?:material\\b)/i,/^(?:view\\b)/i,/^(?:unit\\b)/i,/^(?:line\\b)/i,/^(?:listobj\\b)/i,/^(?:removeobj\\b)/i,/^(?:rotate\\b)/i,/^(?:translate\\b)/i,/^(?:scale\\b)/i,/^(?:center\\b)/i,/^(?:url\\b)/i,/^(?:screenshot\\b)/i,/^(?:dssp\\b)/i,/^(?:file_list\\b)/i,/^(?:file_register\\b)/i,/^(?:file_delete\\b)/i,/^(?:preset_add\\b)/i,/^(?:preset_delete\\b)/i,/^(?:preset_update\\b)/i,/^(?:preset_rename\\b)/i,/^(?:preset_open\\b)/i,/^(?:create_scenario\\b)/i,/^(?:reset_scenario\\b)/i,/^(?:delete_scenario\\b)/i,/^(?:add_scenario_item\\b)/i,/^(?:list_scenario\\b)/i,/^(?:s\\b)/i,/^(?:mt\\b)/i,/^(?:m\\b)/i,/^(?:c\\b)/i,/^(?:x\\b)/i,/^(?:y\\b)/i,/^(?:z\\b)/i,/^(?:as\\b)/i,/^(?:of\\b)/i,/^(?:pdb\\b)/i,/^(?:delay\\b)/i,/^(?:prst\\b)/i,/^(?:desc\\b)/i,/^(?:((?:\"(?:\\\\.|[^\\\\\"])*\"|'(?:\\\\.|[^\\\\'])*')))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:\\.)/i,/^(?:\\/)/i,/^(?:\\\\)/i,/^(?:-e\\b)/i,/^(?:-f\\b)/i,/^(?:-s\\b)/i,/^(?:-v\\b)/i,/^(?:=)/i],\r\nconditions: {\"INITIAL\":{\"rules\":[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,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,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81],\"inclusive\":true}}\r\n});\r\nreturn lexer;\r\n})();\r\nparser.lexer = lexer;\r\nfunction Parser () {\r\n this.yy = {};\r\n}\r\nParser.prototype = parser;parser.Parser = Parser;\r\nreturn new Parser;\r\n})();\r\n\r\nmodule.exports = {parser: parser};\r\n","/* eslint-disable */\r\n// DO NOT EDIT! Automatically generated from .jison\r\n/* parser generated by jison 0.4.18 */\r\n/*\r\n Returns a Parser object of the following structure:\r\n\r\n Parser: {\r\n yy: {}\r\n }\r\n\r\n Parser.prototype: {\r\n yy: {},\r\n trace: function(),\r\n symbols_: {associative list: name ==> number},\r\n terminals_: {associative list: number ==> name},\r\n productions_: [...],\r\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\r\n table: [...],\r\n defaultActions: {...},\r\n parseError: function(str, hash),\r\n parse: function(input),\r\n\r\n lexer: {\r\n EOF: 1,\r\n parseError: function(str, hash),\r\n setInput: function(input),\r\n input: function(),\r\n unput: function(str),\r\n more: function(),\r\n less: function(n),\r\n pastInput: function(),\r\n upcomingInput: function(),\r\n showPosition: function(),\r\n test_match: function(regex_match_array, rule_index),\r\n next: function(),\r\n lex: function(),\r\n begin: function(condition),\r\n popState: function(),\r\n _currentRules: function(),\r\n topState: function(),\r\n pushState: function(condition),\r\n\r\n options: {\r\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\r\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\r\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\r\n },\r\n\r\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\r\n rules: [...],\r\n conditions: {associative list: name ==> set},\r\n }\r\n }\r\n\r\n\r\n token location info (@$, _$, etc.): {\r\n first_line: n,\r\n last_line: n,\r\n first_column: n,\r\n last_column: n,\r\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\r\n }\r\n\r\n\r\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\r\n text: (matched text)\r\n token: (the produced terminal token, if any)\r\n line: (yylineno)\r\n }\r\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\r\n loc: (yylloc)\r\n expected: (string describing the set of expected tokens)\r\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\r\n }\r\n*/\r\nvar parser = (function(){\r\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,5],$V2=[1,6],$V3=[1,7],$V4=[1,8],$V5=[1,9],$V6=[1,11],$V7=[1,12],$V8=[5,7,8,11],$V9=[1,17],$Va=[1,22],$Vb=[1,20],$Vc=[1,21],$Vd=[5,7,8,11,19];\r\nvar parser = {trace: function trace() { },\r\nyy: {},\r\nsymbols_: {\"error\":2,\"Program\":3,\"Expression\":4,\"EOF\":5,\"Selector\":6,\"OR\":7,\"AND\":8,\"NOT\":9,\"(\":10,\")\":11,\"SELECTOR\":12,\"NAMED_SELECTOR\":13,\"SELECTOR_RANGED\":14,\"RangeList\":15,\"SELECTOR_NAMED\":16,\"NameList\":17,\"Range\":18,\",\":19,\"NUMBER\":20,\":\":21,\"Name\":22,\"IDENTIFIER\":23,\"STRING\":24,\"$accept\":0,\"$end\":1},\r\nterminals_: {2:\"error\",5:\"EOF\",7:\"OR\",8:\"AND\",9:\"NOT\",10:\"(\",11:\")\",12:\"SELECTOR\",13:\"NAMED_SELECTOR\",14:\"SELECTOR_RANGED\",16:\"SELECTOR_NAMED\",19:\",\",20:\"NUMBER\",21:\":\",23:\"IDENTIFIER\",24:\"STRING\"},\r\nproductions_: [0,[3,2],[4,1],[4,3],[4,3],[4,2],[4,3],[6,1],[6,1],[6,2],[6,2],[15,1],[15,3],[18,1],[18,3],[17,1],[17,3],[22,1],[22,1],[22,1]],\r\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\r\n/* this == yyval */\r\n\r\nvar $0 = $$.length - 1;\r\nswitch (yystate) {\r\ncase 1:\r\n return $$[$0-1]; \r\nbreak;\r\ncase 3:\r\nthis.$ = yy.keyword('or')($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 4:\r\nthis.$ = yy.keyword('and')($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 5:\r\nthis.$ = yy.keyword('not')($$[$0]);\r\nbreak;\r\ncase 6:\r\nthis.$ = $$[$0-1];\r\nbreak;\r\ncase 7:\r\nthis.$ = yy.keyword($$[$0])();\r\nbreak;\r\ncase 8:\r\nthis.$ = yy.GetSelector($$[$0].toLowerCase().slice(1, $$[$0].length));\r\nbreak;\r\ncase 9: case 10:\r\nthis.$ = yy.keyword($$[$0-1])($$[$0]);\r\nbreak;\r\ncase 11:\r\nthis.$ = new yy.RangeList($$[$0]);\r\nbreak;\r\ncase 12: case 16:\r\nthis.$ = $$[$0-2].append($$[$0]);\r\nbreak;\r\ncase 13:\r\nthis.$ = new yy.Range(Number($$[$0]));\r\nbreak;\r\ncase 14:\r\nthis.$ = new yy.Range(Number($$[$0-2]), Number($$[$0]));\r\nbreak;\r\ncase 15:\r\nthis.$ = new yy.ValueList($$[$0]);\r\nbreak;\r\n}\r\n},\r\ntable: [{3:1,4:2,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{1:[3]},{5:[1,10],7:$V6,8:$V7},o($V8,[2,2]),{4:13,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{4:14,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},o($V8,[2,7]),o($V8,[2,8]),{15:15,18:16,20:$V9},{17:18,20:$Va,22:19,23:$Vb,24:$Vc},{1:[2,1]},{4:23,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{4:24,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},o($V8,[2,5]),{7:$V6,8:$V7,11:[1,25]},o($V8,[2,9],{19:[1,26]}),o($Vd,[2,11]),o($Vd,[2,13],{21:[1,27]}),o($V8,[2,10],{19:[1,28]}),o($Vd,[2,15]),o($Vd,[2,17]),o($Vd,[2,18]),o($Vd,[2,19]),o([5,7,11],[2,3],{8:$V7}),o($V8,[2,4]),o($V8,[2,6]),{18:29,20:$V9},{20:[1,30]},{20:$Va,22:31,23:$Vb,24:$Vc},o($Vd,[2,12]),o($Vd,[2,14]),o($Vd,[2,16])],\r\ndefaultActions: {10:[2,1]},\r\nparseError: function parseError(str, hash) {\r\n if (hash.recoverable) {\r\n this.trace(str);\r\n } else {\r\n var error = new Error(str);\r\n error.hash = hash;\r\n throw error;\r\n }\r\n},\r\nparse: function parse(input) {\r\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\r\n var args = lstack.slice.call(arguments, 1);\r\n var lexer = Object.create(this.lexer);\r\n var sharedState = { yy: {} };\r\n for (var k in this.yy) {\r\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\r\n sharedState.yy[k] = this.yy[k];\r\n }\r\n }\r\n lexer.setInput(input, sharedState.yy);\r\n sharedState.yy.lexer = lexer;\r\n sharedState.yy.parser = this;\r\n if (typeof lexer.yylloc == 'undefined') {\r\n lexer.yylloc = {};\r\n }\r\n var yyloc = lexer.yylloc;\r\n lstack.push(yyloc);\r\n var ranges = lexer.options && lexer.options.ranges;\r\n if (typeof sharedState.yy.parseError === 'function') {\r\n this.parseError = sharedState.yy.parseError;\r\n } else {\r\n this.parseError = Object.getPrototypeOf(this).parseError;\r\n }\r\n function popStack(n) {\r\n stack.length = stack.length - 2 * n;\r\n vstack.length = vstack.length - n;\r\n lstack.length = lstack.length - n;\r\n }\r\n function lex() {\r\n var token;\r\n token = tstack.pop() || lexer.lex() || EOF;\r\n if (typeof token !== 'number') {\r\n if (token instanceof Array) {\r\n tstack = token;\r\n token = tstack.pop();\r\n }\r\n token = self.symbols_[token] || token;\r\n }\r\n return token;\r\n }\r\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\r\n while (true) {\r\n state = stack[stack.length - 1];\r\n if (this.defaultActions[state]) {\r\n action = this.defaultActions[state];\r\n } else {\r\n if (symbol === null || typeof symbol == 'undefined') {\r\n symbol = lex();\r\n }\r\n action = table[state] && table[state][symbol];\r\n }\r\n if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n var errStr = '';\r\n expected = [];\r\n for (p in table[state]) {\r\n if (this.terminals_[p] && p > TERROR) {\r\n expected.push('\\'' + this.terminals_[p] + '\\'');\r\n }\r\n }\r\n if (lexer.showPosition) {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\r\n } else {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\r\n }\r\n this.parseError(errStr, {\r\n text: lexer.match,\r\n token: this.terminals_[symbol] || symbol,\r\n line: lexer.yylineno,\r\n loc: yyloc,\r\n expected: expected\r\n });\r\n }\r\n if (action[0] instanceof Array && action.length > 1) {\r\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\r\n }\r\n switch (action[0]) {\r\n case 1:\r\n stack.push(symbol);\r\n vstack.push(lexer.yytext);\r\n lstack.push(lexer.yylloc);\r\n stack.push(action[1]);\r\n symbol = null;\r\n if (!preErrorSymbol) {\r\n yyleng = lexer.yyleng;\r\n yytext = lexer.yytext;\r\n yylineno = lexer.yylineno;\r\n yyloc = lexer.yylloc;\r\n if (recovering > 0) {\r\n recovering--;\r\n }\r\n } else {\r\n symbol = preErrorSymbol;\r\n preErrorSymbol = null;\r\n }\r\n break;\r\n case 2:\r\n len = this.productions_[action[1]][1];\r\n yyval.$ = vstack[vstack.length - len];\r\n yyval._$ = {\r\n first_line: lstack[lstack.length - (len || 1)].first_line,\r\n last_line: lstack[lstack.length - 1].last_line,\r\n first_column: lstack[lstack.length - (len || 1)].first_column,\r\n last_column: lstack[lstack.length - 1].last_column\r\n };\r\n if (ranges) {\r\n yyval._$.range = [\r\n lstack[lstack.length - (len || 1)].range[0],\r\n lstack[lstack.length - 1].range[1]\r\n ];\r\n }\r\n r = this.performAction.apply(yyval, [\r\n yytext,\r\n yyleng,\r\n yylineno,\r\n sharedState.yy,\r\n action[1],\r\n vstack,\r\n lstack\r\n ].concat(args));\r\n if (typeof r !== 'undefined') {\r\n return r;\r\n }\r\n if (len) {\r\n stack = stack.slice(0, -1 * len * 2);\r\n vstack = vstack.slice(0, -1 * len);\r\n lstack = lstack.slice(0, -1 * len);\r\n }\r\n stack.push(this.productions_[action[1]][0]);\r\n vstack.push(yyval.$);\r\n lstack.push(yyval._$);\r\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\r\n stack.push(newState);\r\n break;\r\n case 3:\r\n return true;\r\n }\r\n }\r\n return true;\r\n}};\r\n\r\n\r\n/* generated by jison-lex 0.3.4 */\r\nvar lexer = (function(){\r\nvar lexer = ({\r\n\r\nEOF:1,\r\n\r\nparseError:function parseError(str, hash) {\r\n if (this.yy.parser) {\r\n this.yy.parser.parseError(str, hash);\r\n } else {\r\n throw new Error(str);\r\n }\r\n },\r\n\r\n// resets the lexer, sets new input\r\nsetInput:function (input, yy) {\r\n this.yy = yy || this.yy || {};\r\n this._input = input;\r\n this._more = this._backtrack = this.done = false;\r\n this.yylineno = this.yyleng = 0;\r\n this.yytext = this.matched = this.match = '';\r\n this.conditionStack = ['INITIAL'];\r\n this.yylloc = {\r\n first_line: 1,\r\n first_column: 0,\r\n last_line: 1,\r\n last_column: 0\r\n };\r\n if (this.options.ranges) {\r\n this.yylloc.range = [0,0];\r\n }\r\n this.offset = 0;\r\n return this;\r\n },\r\n\r\n// consumes and returns one char from the input\r\ninput:function () {\r\n var ch = this._input[0];\r\n this.yytext += ch;\r\n this.yyleng++;\r\n this.offset++;\r\n this.match += ch;\r\n this.matched += ch;\r\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno++;\r\n this.yylloc.last_line++;\r\n } else {\r\n this.yylloc.last_column++;\r\n }\r\n if (this.options.ranges) {\r\n this.yylloc.range[1]++;\r\n }\r\n\r\n this._input = this._input.slice(1);\r\n return ch;\r\n },\r\n\r\n// unshifts one char (or a string) into the input\r\nunput:function (ch) {\r\n var len = ch.length;\r\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\r\n\r\n this._input = ch + this._input;\r\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\r\n //this.yyleng -= len;\r\n this.offset -= len;\r\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\r\n this.match = this.match.substr(0, this.match.length - 1);\r\n this.matched = this.matched.substr(0, this.matched.length - 1);\r\n\r\n if (lines.length - 1) {\r\n this.yylineno -= lines.length - 1;\r\n }\r\n var r = this.yylloc.range;\r\n\r\n this.yylloc = {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.first_column,\r\n last_column: lines ?\r\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\r\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\r\n this.yylloc.first_column - len\r\n };\r\n\r\n if (this.options.ranges) {\r\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\r\n }\r\n this.yyleng = this.yytext.length;\r\n return this;\r\n },\r\n\r\n// When called from action, caches matched text and appends it on next action\r\nmore:function () {\r\n this._more = true;\r\n return this;\r\n },\r\n\r\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\r\nreject:function () {\r\n if (this.options.backtrack_lexer) {\r\n this._backtrack = true;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n\r\n }\r\n return this;\r\n },\r\n\r\n// retain first n characters of the match\r\nless:function (n) {\r\n this.unput(this.match.slice(n));\r\n },\r\n\r\n// displays already matched input, i.e. for error messages\r\npastInput:function () {\r\n var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays upcoming input, i.e. for error messages\r\nupcomingInput:function () {\r\n var next = this.match;\r\n if (next.length < 20) {\r\n next += this._input.substr(0, 20-next.length);\r\n }\r\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays the character position where the lexing error occurred, i.e. for error messages\r\nshowPosition:function () {\r\n var pre = this.pastInput();\r\n var c = new Array(pre.length + 1).join(\"-\");\r\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\r\n },\r\n\r\n// test the lexed token: return FALSE when not a match, otherwise return token\r\ntest_match:function (match, indexed_rule) {\r\n var token,\r\n lines,\r\n backup;\r\n\r\n if (this.options.backtrack_lexer) {\r\n // save context\r\n backup = {\r\n yylineno: this.yylineno,\r\n yylloc: {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.last_line,\r\n first_column: this.yylloc.first_column,\r\n last_column: this.yylloc.last_column\r\n },\r\n yytext: this.yytext,\r\n match: this.match,\r\n matches: this.matches,\r\n matched: this.matched,\r\n yyleng: this.yyleng,\r\n offset: this.offset,\r\n _more: this._more,\r\n _input: this._input,\r\n yy: this.yy,\r\n conditionStack: this.conditionStack.slice(0),\r\n done: this.done\r\n };\r\n if (this.options.ranges) {\r\n backup.yylloc.range = this.yylloc.range.slice(0);\r\n }\r\n }\r\n\r\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno += lines.length;\r\n }\r\n this.yylloc = {\r\n first_line: this.yylloc.last_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.last_column,\r\n last_column: lines ?\r\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\r\n this.yylloc.last_column + match[0].length\r\n };\r\n this.yytext += match[0];\r\n this.match += match[0];\r\n this.matches = match;\r\n this.yyleng = this.yytext.length;\r\n if (this.options.ranges) {\r\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\r\n }\r\n this._more = false;\r\n this._backtrack = false;\r\n this._input = this._input.slice(match[0].length);\r\n this.matched += match[0];\r\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\r\n if (this.done && this._input) {\r\n this.done = false;\r\n }\r\n if (token) {\r\n return token;\r\n } else if (this._backtrack) {\r\n // recover context\r\n for (var k in backup) {\r\n this[k] = backup[k];\r\n }\r\n return false; // rule action called reject() implying the next rule should be tested instead.\r\n }\r\n return false;\r\n },\r\n\r\n// return next match in input\r\nnext:function () {\r\n if (this.done) {\r\n return this.EOF;\r\n }\r\n if (!this._input) {\r\n this.done = true;\r\n }\r\n\r\n var token,\r\n match,\r\n tempMatch,\r\n index;\r\n if (!this._more) {\r\n this.yytext = '';\r\n this.match = '';\r\n }\r\n var rules = this._currentRules();\r\n for (var i = 0; i < rules.length; i++) {\r\n tempMatch = this._input.match(this.rules[rules[i]]);\r\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n match = tempMatch;\r\n index = i;\r\n if (this.options.backtrack_lexer) {\r\n token = this.test_match(tempMatch, rules[i]);\r\n if (token !== false) {\r\n return token;\r\n } else if (this._backtrack) {\r\n match = false;\r\n continue; // rule action called reject() implying a rule MISmatch.\r\n } else {\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n } else if (!this.options.flex) {\r\n break;\r\n }\r\n }\r\n }\r\n if (match) {\r\n token = this.test_match(match, rules[index]);\r\n if (token !== false) {\r\n return token;\r\n }\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n if (this._input === \"\") {\r\n return this.EOF;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n }\r\n },\r\n\r\n// return next match that has a token\r\nlex:function lex() {\r\n var r = this.next();\r\n if (r) {\r\n return r;\r\n } else {\r\n return this.lex();\r\n }\r\n },\r\n\r\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\r\nbegin:function begin(condition) {\r\n this.conditionStack.push(condition);\r\n },\r\n\r\n// pop the previously active lexer condition state off the condition stack\r\npopState:function popState() {\r\n var n = this.conditionStack.length - 1;\r\n if (n > 0) {\r\n return this.conditionStack.pop();\r\n } else {\r\n return this.conditionStack[0];\r\n }\r\n },\r\n\r\n// produce the lexer rule set which is active for the currently active lexer condition state\r\n_currentRules:function _currentRules() {\r\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\r\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\r\n } else {\r\n return this.conditions[\"INITIAL\"].rules;\r\n }\r\n },\r\n\r\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\r\ntopState:function topState(n) {\r\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\r\n if (n >= 0) {\r\n return this.conditionStack[n];\r\n } else {\r\n return \"INITIAL\";\r\n }\r\n },\r\n\r\n// alias for begin(condition)\r\npushState:function pushState(condition) {\r\n this.begin(condition);\r\n },\r\n\r\n// return the number of states currently on the stack\r\nstateStackSize:function stateStackSize() {\r\n return this.conditionStack.length;\r\n },\r\noptions: {\"case-insensitive\":true},\r\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\nvar YYSTATE=YY_START;\r\nswitch($avoiding_name_collisions) {\r\ncase 0:/* skip whitespace */\r\nbreak;\r\ncase 1:return 20;\r\nbreak;\r\ncase 2:return 7;\r\nbreak;\r\ncase 3:return 8;\r\nbreak;\r\ncase 4:return 9;\r\nbreak;\r\ncase 5:return 12;\r\nbreak;\r\ncase 6:return 16;\r\nbreak;\r\ncase 7:return 14;\r\nbreak;\r\ncase 8:return 10;\r\nbreak;\r\ncase 9:return 11;\r\nbreak;\r\ncase 10:return 19;\r\nbreak;\r\ncase 11:return 21;\r\nbreak;\r\ncase 12:return '<=';\r\nbreak;\r\ncase 13:return '>=';\r\nbreak;\r\ncase 14:return '<';\r\nbreak;\r\ncase 15:return '>';\r\nbreak;\r\ncase 16:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 24;\r\nbreak;\r\ncase 17:return 13;\r\nbreak;\r\ncase 18:return 23;\r\nbreak;\r\ncase 19:return 5;\r\nbreak;\r\ncase 20:return 'INVALID';\r\nbreak;\r\n}\r\n},\r\nrules: [/^(?:\\s+)/i,/^(?:(-?(?:[1-9][0-9]+|[0-9]))\\b)/i,/^(?:OR\\b)/i,/^(?:AND\\b)/i,/^(?:NOT\\b)/i,/^(?:((ALL|NONE|HETATM|PROTEIN|BASIC|ACIDIC|CHARGED|POLAR|NONPOLAR|AROMATIC|NUCLEIC|PURINE|PYRIMIDINE|WATER|POLARH|NONPOLARH))\\b)/i,/^(?:((NAME|ELEM|TYPE|RESIDUE|ICODE|CHAIN|ALTLOC))\\b)/i,/^(?:((SERIAL|SEQUENCE|RESIDX))\\b)/i,/^(?:\\()/i,/^(?:\\))/i,/^(?:,)/i,/^(?::)/i,/^(?:<=)/i,/^(?:>=)/i,/^(?:<)/i,/^(?:>)/i,/^(?:((?:\"(?:\\\\.|[^\\\\\"])*\"|'(?:\\\\.|[^\\\\'])*')))/i,/^(?:(@[_A-Z0-9]+))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:.)/i],\r\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],\"inclusive\":true}}\r\n});\r\nreturn lexer;\r\n})();\r\nparser.lexer = lexer;\r\nfunction Parser () {\r\n this.yy = {};\r\n}\r\nParser.prototype = parser;parser.Parser = Parser;\r\nreturn new Parser;\r\n})();\r\n\r\nmodule.exports = {parser: parser};\r\n","\r\n/*\r\nSmooth.js version 0.1.7\r\n\r\nTurn arrays into smooth functions.\r\n\r\nCopyright 2012 Spencer Cohen\r\nLicensed under MIT license (see \"Smooth.js MIT license.txt\")\r\n*/\r\n\r\n/*Constants (these are accessible by Smooth.WHATEVER in user space)\r\n*/\r\n\r\n(function() {\r\n var AbstractInterpolator, CubicInterpolator, Enum, LinearInterpolator, NearestInterpolator, PI, SincFilterInterpolator, Smooth, clipClamp, clipMirror, clipPeriodic, defaultConfig, getColumn, getType, isValidNumber, k, makeLanczosWindow, makeScaledFunction, makeSincKernel, normalizeScaleTo, shallowCopy, sin, sinc, v, validateNumber, validateVector,\r\n __hasProp = Object.prototype.hasOwnProperty,\r\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; };\r\n\r\n Enum = {\r\n /*Interpolation methods\r\n */\r\n METHOD_NEAREST: 'nearest',\r\n METHOD_LINEAR: 'linear',\r\n METHOD_CUBIC: 'cubic',\r\n METHOD_LANCZOS: 'lanczos',\r\n METHOD_SINC: 'sinc',\r\n /*Input clipping modes\r\n */\r\n CLIP_CLAMP: 'clamp',\r\n CLIP_ZERO: 'zero',\r\n CLIP_PERIODIC: 'periodic',\r\n CLIP_MIRROR: 'mirror',\r\n /* Constants for control over the cubic interpolation tension\r\n */\r\n CUBIC_TENSION_DEFAULT: 0,\r\n CUBIC_TENSION_CATMULL_ROM: 0\r\n };\r\n\r\n defaultConfig = {\r\n method: Enum.METHOD_CUBIC,\r\n cubicTension: Enum.CUBIC_TENSION_DEFAULT,\r\n clip: Enum.CLIP_CLAMP,\r\n scaleTo: 0,\r\n sincFilterSize: 2,\r\n sincWindow: void 0\r\n };\r\n\r\n /*Index clipping functions\r\n */\r\n\r\n clipClamp = function(i, n) {\r\n return Math.max(0, Math.min(i, n - 1));\r\n };\r\n\r\n clipPeriodic = function(i, n) {\r\n i = i % n;\r\n if (i < 0) i += n;\r\n return i;\r\n };\r\n\r\n clipMirror = function(i, n) {\r\n var period;\r\n period = 2 * (n - 1);\r\n i = clipPeriodic(i, period);\r\n if (i > n - 1) i = period - i;\r\n return i;\r\n };\r\n\r\n /*\r\n Abstract scalar interpolation class which provides common functionality for all interpolators\r\n \r\n Subclasses must override interpolate().\r\n */\r\n\r\n AbstractInterpolator = (function() {\r\n\r\n function AbstractInterpolator(array, config) {\r\n this.array = array.slice(0);\r\n this.length = this.array.length;\r\n if (!(this.clipHelper = {\r\n clamp: this.clipHelperClamp,\r\n zero: this.clipHelperZero,\r\n periodic: this.clipHelperPeriodic,\r\n mirror: this.clipHelperMirror\r\n }[config.clip])) {\r\n throw \"Invalid clip: \" + config.clip;\r\n }\r\n }\r\n\r\n AbstractInterpolator.prototype.getClippedInput = function(i) {\r\n if ((0 <= i && i < this.length)) {\r\n return this.array[i];\r\n } else {\r\n return this.clipHelper(i);\r\n }\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperClamp = function(i) {\r\n return this.array[clipClamp(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperZero = function(i) {\r\n return 0;\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperPeriodic = function(i) {\r\n return this.array[clipPeriodic(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperMirror = function(i) {\r\n return this.array[clipMirror(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.interpolate = function(t) {\r\n throw 'Subclasses of AbstractInterpolator must override the interpolate() method.';\r\n };\r\n\r\n return AbstractInterpolator;\r\n\r\n })();\r\n\r\n NearestInterpolator = (function(_super) {\r\n\r\n __extends(NearestInterpolator, _super);\r\n\r\n function NearestInterpolator() {\r\n NearestInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n NearestInterpolator.prototype.interpolate = function(t) {\r\n return this.getClippedInput(Math.round(t));\r\n };\r\n\r\n return NearestInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n LinearInterpolator = (function(_super) {\r\n\r\n __extends(LinearInterpolator, _super);\r\n\r\n function LinearInterpolator() {\r\n LinearInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n LinearInterpolator.prototype.interpolate = function(t) {\r\n var k;\r\n k = Math.floor(t);\r\n t -= k;\r\n return (1 - t) * this.getClippedInput(k) + t * this.getClippedInput(k + 1);\r\n };\r\n\r\n return LinearInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n CubicInterpolator = (function(_super) {\r\n\r\n __extends(CubicInterpolator, _super);\r\n\r\n function CubicInterpolator(array, config) {\r\n this.tangentFactor = 1 - Math.max(-1, Math.min(1, config.cubicTension));\r\n CubicInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n CubicInterpolator.prototype.getTangent = function(k) {\r\n return this.tangentFactor * (this.getClippedInput(k + 1) - this.getClippedInput(k - 1)) / 2;\r\n };\r\n\r\n CubicInterpolator.prototype.interpolate = function(t) {\r\n var k, m, p, t2, t3;\r\n k = Math.floor(t);\r\n m = [this.getTangent(k), this.getTangent(k + 1)];\r\n p = [this.getClippedInput(k), this.getClippedInput(k + 1)];\r\n t -= k;\r\n t2 = t * t;\r\n t3 = t * t2;\r\n return (2 * t3 - 3 * t2 + 1) * p[0] + (t3 - 2 * t2 + t) * m[0] + (-2 * t3 + 3 * t2) * p[1] + (t3 - t2) * m[1];\r\n };\r\n\r\n return CubicInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n sin = Math.sin, PI = Math.PI;\r\n\r\n sinc = function(x) {\r\n if (x === 0) {\r\n return 1;\r\n } else {\r\n return sin(PI * x) / (PI * x);\r\n }\r\n };\r\n\r\n makeLanczosWindow = function(a) {\r\n return function(x) {\r\n return sinc(x / a);\r\n };\r\n };\r\n\r\n makeSincKernel = function(window) {\r\n return function(x) {\r\n return sinc(x) * window(x);\r\n };\r\n };\r\n\r\n SincFilterInterpolator = (function(_super) {\r\n\r\n __extends(SincFilterInterpolator, _super);\r\n\r\n function SincFilterInterpolator(array, config) {\r\n SincFilterInterpolator.__super__.constructor.apply(this, arguments);\r\n this.a = config.sincFilterSize;\r\n if (!config.sincWindow) throw 'No sincWindow provided';\r\n this.kernel = makeSincKernel(config.sincWindow);\r\n }\r\n\r\n SincFilterInterpolator.prototype.interpolate = function(t) {\r\n var k, n, sum, _ref, _ref2;\r\n k = Math.floor(t);\r\n sum = 0;\r\n for (n = _ref = k - this.a + 1, _ref2 = k + this.a; _ref <= _ref2 ? n <= _ref2 : n >= _ref2; _ref <= _ref2 ? n++ : n--) {\r\n sum += this.kernel(t - n) * this.getClippedInput(n);\r\n }\r\n return sum;\r\n };\r\n\r\n return SincFilterInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n getColumn = function(arr, i) {\r\n var row, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = arr.length; _i < _len; _i++) {\r\n row = arr[_i];\r\n _results.push(row[i]);\r\n }\r\n return _results;\r\n };\r\n\r\n makeScaledFunction = function(f, baseScale, scaleRange) {\r\n var scaleFactor, translation;\r\n if (scaleRange.join === '0,1') {\r\n return f;\r\n } else {\r\n scaleFactor = baseScale / (scaleRange[1] - scaleRange[0]);\r\n translation = scaleRange[0];\r\n return function(t) {\r\n return f(scaleFactor * (t - translation));\r\n };\r\n }\r\n };\r\n\r\n getType = function(x) {\r\n return Object.prototype.toString.call(x).slice('[object '.length, -1);\r\n };\r\n\r\n validateNumber = function(n) {\r\n if (isNaN(n)) throw 'NaN in Smooth() input';\r\n if (getType(n) !== 'Number') throw 'Non-number in Smooth() input';\r\n if (!isFinite(n)) throw 'Infinity in Smooth() input';\r\n };\r\n\r\n validateVector = function(v, dimension) {\r\n var n, _i, _len;\r\n if (getType(v) !== 'Array') throw 'Non-vector in Smooth() input';\r\n if (v.length !== dimension) throw 'Inconsistent dimension in Smooth() input';\r\n for (_i = 0, _len = v.length; _i < _len; _i++) {\r\n n = v[_i];\r\n validateNumber(n);\r\n }\r\n };\r\n\r\n isValidNumber = function(n) {\r\n return (getType(n) === 'Number') && isFinite(n) && !isNaN(n);\r\n };\r\n\r\n normalizeScaleTo = function(s) {\r\n var invalidErr;\r\n invalidErr = \"scaleTo param must be number or array of two numbers\";\r\n switch (getType(s)) {\r\n case 'Number':\r\n if (!isValidNumber(s)) throw invalidErr;\r\n s = [0, s];\r\n break;\r\n case 'Array':\r\n if (s.length !== 2) throw invalidErr;\r\n if (!(isValidNumber(s[0]) && isValidNumber(s[1]))) throw invalidErr;\r\n break;\r\n default:\r\n throw invalidErr;\r\n }\r\n return s;\r\n };\r\n\r\n shallowCopy = function(obj) {\r\n var copy, k, v;\r\n copy = {};\r\n for (k in obj) {\r\n if (!__hasProp.call(obj, k)) continue;\r\n v = obj[k];\r\n copy[k] = v;\r\n }\r\n return copy;\r\n };\r\n\r\n Smooth = function(arr, config) {\r\n var baseDomainEnd, dimension, i, interpolator, interpolatorClass, interpolators, k, n, properties, smoothFunc, v;\r\n if (config == null) config = {};\r\n properties = {};\r\n config = shallowCopy(config);\r\n properties.config = shallowCopy(config);\r\n if (config.scaleTo == null) config.scaleTo = config.period;\r\n if (config.sincFilterSize == null) {\r\n config.sincFilterSize = config.lanczosFilterSize;\r\n }\r\n for (k in defaultConfig) {\r\n if (!__hasProp.call(defaultConfig, k)) continue;\r\n v = defaultConfig[k];\r\n if (config[k] == null) config[k] = v;\r\n }\r\n if (!(interpolatorClass = {\r\n nearest: NearestInterpolator,\r\n linear: LinearInterpolator,\r\n cubic: CubicInterpolator,\r\n lanczos: SincFilterInterpolator,\r\n sinc: SincFilterInterpolator\r\n }[config.method])) {\r\n throw \"Invalid method: \" + config.method;\r\n }\r\n if (config.method === 'lanczos') {\r\n config.sincWindow = makeLanczosWindow(config.sincFilterSize);\r\n }\r\n if (arr.length < 2) throw 'Array must have at least two elements';\r\n properties.count = arr.length;\r\n smoothFunc = (function() {\r\n var _i, _j, _len, _len2;\r\n switch (getType(arr[0])) {\r\n case 'Number':\r\n properties.dimension = 'scalar';\r\n if (Smooth.deepValidation) {\r\n for (_i = 0, _len = arr.length; _i < _len; _i++) {\r\n n = arr[_i];\r\n validateNumber(n);\r\n }\r\n }\r\n interpolator = new interpolatorClass(arr, config);\r\n return function(t) {\r\n return interpolator.interpolate(t);\r\n };\r\n case 'Array':\r\n properties.dimension = dimension = arr[0].length;\r\n if (!dimension) throw 'Vectors must be non-empty';\r\n if (Smooth.deepValidation) {\r\n for (_j = 0, _len2 = arr.length; _j < _len2; _j++) {\r\n v = arr[_j];\r\n validateVector(v, dimension);\r\n }\r\n }\r\n interpolators = (function() {\r\n var _results;\r\n _results = [];\r\n for (i = 0; 0 <= dimension ? i < dimension : i > dimension; 0 <= dimension ? i++ : i--) {\r\n _results.push(new interpolatorClass(getColumn(arr, i), config));\r\n }\r\n return _results;\r\n })();\r\n return function(t) {\r\n var interpolator, _k, _len3, _results;\r\n _results = [];\r\n for (_k = 0, _len3 = interpolators.length; _k < _len3; _k++) {\r\n interpolator = interpolators[_k];\r\n _results.push(interpolator.interpolate(t));\r\n }\r\n return _results;\r\n };\r\n default:\r\n throw \"Invalid element type: \" + (getType(arr[0]));\r\n }\r\n })();\r\n if (config.clip === 'periodic') {\r\n baseDomainEnd = arr.length;\r\n } else {\r\n baseDomainEnd = arr.length - 1;\r\n }\r\n config.scaleTo || (config.scaleTo = baseDomainEnd);\r\n properties.domain = normalizeScaleTo(config.scaleTo);\r\n smoothFunc = makeScaledFunction(smoothFunc, baseDomainEnd, properties.domain);\r\n properties.domain.sort();\r\n /*copy properties\r\n */\r\n for (k in properties) {\r\n if (!__hasProp.call(properties, k)) continue;\r\n v = properties[k];\r\n smoothFunc[k] = v;\r\n }\r\n return smoothFunc;\r\n };\r\n\r\n for (k in Enum) {\r\n if (!__hasProp.call(Enum, k)) continue;\r\n v = Enum[k];\r\n Smooth[k] = v;\r\n }\r\n\r\n Smooth.deepValidation = true;\r\n\r\n (typeof exports !== \"undefined\" && exports !== null ? exports : window).Smooth = Smooth;\r\n\r\n}).call(this);\r\n","!function(r,t){if(\"function\"==typeof define&&define.amd)define([\"exports\"],t);else if(\"object\"==typeof exports&&\"undefined\"!=typeof module)t(exports);else t(r.MMTF=r.MMTF||{})}(this,function(r){\"use strict\";function t(r,t,n){for(var e=(r.byteLength,0),i=n.length;i>e;e++){var o=n.charCodeAt(e);if(128>o)r.setUint8(t++,o>>>0&127|0);else if(2048>o)r.setUint8(t++,o>>>6&31|192),r.setUint8(t++,o>>>0&63|128);else if(65536>o)r.setUint8(t++,o>>>12&15|224),r.setUint8(t++,o>>>6&63|128),r.setUint8(t++,o>>>0&63|128);else{if(!(1114112>o))throw new Error(\"bad codepoint \"+o);r.setUint8(t++,o>>>18&7|240),r.setUint8(t++,o>>>12&63|128),r.setUint8(t++,o>>>6&63|128),r.setUint8(t++,o>>>0&63|128)}}}function n(r){for(var t=0,n=0,e=r.length;e>n;n++){var i=r.charCodeAt(n);if(128>i)t+=1;else if(2048>i)t+=2;else if(65536>i)t+=3;else{if(!(1114112>i))throw new Error(\"bad codepoint \"+i);t+=4}}return t}function e(r,i,o){var a=typeof r;if(\"string\"===a){var u=n(r);if(32>u)return i.setUint8(o,160|u),t(i,o+1,r),1+u;if(256>u)return i.setUint8(o,217),i.setUint8(o+1,u),t(i,o+2,r),2+u;if(65536>u)return i.setUint8(o,218),i.setUint16(o+1,u),t(i,o+3,r),3+u;if(4294967296>u)return i.setUint8(o,219),i.setUint32(o+1,u),t(i,o+5,r),5+u}if(r instanceof Uint8Array){var u=r.byteLength,s=new Uint8Array(i.buffer);if(256>u)return i.setUint8(o,196),i.setUint8(o+1,u),s.set(r,o+2),2+u;if(65536>u)return i.setUint8(o,197),i.setUint16(o+1,u),s.set(r,o+3),3+u;if(4294967296>u)return i.setUint8(o,198),i.setUint32(o+1,u),s.set(r,o+5),5+u}if(\"number\"===a){if(!isFinite(r))throw new Error(\"Number not finite: \"+r);if(Math.floor(r)!==r)return i.setUint8(o,203),i.setFloat64(o+1,r),9;if(r>=0){if(128>r)return i.setUint8(o,r),1;if(256>r)return i.setUint8(o,204),i.setUint8(o+1,r),2;if(65536>r)return i.setUint8(o,205),i.setUint16(o+1,r),3;if(4294967296>r)return i.setUint8(o,206),i.setUint32(o+1,r),5;throw new Error(\"Number too big 0x\"+r.toString(16))}if(r>=-32)return i.setInt8(o,r),1;if(r>=-128)return i.setUint8(o,208),i.setInt8(o+1,r),2;if(r>=-32768)return i.setUint8(o,209),i.setInt16(o+1,r),3;if(r>=-2147483648)return i.setUint8(o,210),i.setInt32(o+1,r),5;throw new Error(\"Number too small -0x\"+(-r).toString(16).substr(1))}if(null===r)return i.setUint8(o,192),1;if(\"boolean\"===a)return i.setUint8(o,r?195:194),1;if(\"object\"===a){var u,f=0,c=Array.isArray(r);if(c)u=r.length;else{var d=Object.keys(r);u=d.length}var f;if(16>u?(i.setUint8(o,u|(c?144:128)),f=1):65536>u?(i.setUint8(o,c?220:222),i.setUint16(o+1,u),f=3):4294967296>u&&(i.setUint8(o,c?221:223),i.setUint32(o+1,u),f=5),c)for(var l=0;u>l;l++)f+=e(r[l],i,o+f);else for(var l=0;u>l;l++){var v=d[l];f+=e(v,i,o+f),f+=e(r[v],i,o+f)}return f}throw new Error(\"Unknown type \"+a)}function i(r){var t=typeof r;if(\"string\"===t){var e=n(r);if(32>e)return 1+e;if(256>e)return 2+e;if(65536>e)return 3+e;if(4294967296>e)return 5+e}if(r instanceof Uint8Array){var e=r.byteLength;if(256>e)return 2+e;if(65536>e)return 3+e;if(4294967296>e)return 5+e}if(\"number\"===t){if(Math.floor(r)!==r)return 9;if(r>=0){if(128>r)return 1;if(256>r)return 2;if(65536>r)return 3;if(4294967296>r)return 5;throw new Error(\"Number too big 0x\"+r.toString(16))}if(r>=-32)return 1;if(r>=-128)return 2;if(r>=-32768)return 3;if(r>=-2147483648)return 5;throw new Error(\"Number too small -0x\"+r.toString(16).substr(1))}if(\"boolean\"===t||null===r)return 1;if(\"object\"===t){var e,o=0;if(Array.isArray(r)){e=r.length;for(var a=0;e>a;a++)o+=i(r[a])}else{var u=Object.keys(r);e=u.length;for(var a=0;e>a;a++){var s=u[a];o+=i(s)+i(r[s])}}if(16>e)return 1+o;if(65536>e)return 3+o;if(4294967296>e)return 5+o;throw new Error(\"Array or object too long 0x\"+e.toString(16))}throw new Error(\"Unknown type \"+t)}function o(r){var t=new ArrayBuffer(i(r)),n=new DataView(t);return e(r,n,0),new Uint8Array(t)}function a(r,t,n){return t?new r(t.buffer,t.byteOffset,t.byteLength/(n||1)):void 0}function u(r){return a(DataView,r)}function s(r){return a(Uint8Array,r)}function f(r){return a(Int8Array,r)}function c(r){return a(Int32Array,r,4)}function d(r){return a(Float32Array,r,4)}function l(r,t){var n=r.length/2;t||(t=new Int16Array(n));for(var e=0,i=0;n>e;++e,i+=2)t[e]=r[i]<<8^r[i+1]<<0;return t}function v(r,t){var n=r.length;t||(t=new Uint8Array(2*n));for(var e=u(t),i=0;n>i;++i)e.setInt16(2*i,r[i]);return s(t)}function g(r,t){var n=r.length/4;t||(t=new Int32Array(n));for(var e=0,i=0;n>e;++e,i+=4)t[e]=r[i]<<24^r[i+1]<<16^r[i+2]<<8^r[i+3]<<0;return t}function L(r,t){var n=r.length;t||(t=new Uint8Array(4*n));for(var e=u(t),i=0;n>i;++i)e.setInt32(4*i,r[i]);return s(t)}function h(r,t){var n=r.length;t||(t=new Float32Array(n/4));for(var e=u(t),i=u(r),o=0,a=0,s=n/4;s>o;++o,a+=4)e.setFloat32(a,i.getFloat32(a),!0);return t}function y(r,t,n){var e=r.length,i=1/t;n||(n=new Float32Array(e));for(var o=0;e>o;++o)n[o]=r[o]*i;return n}function m(r,t,n){var e=r.length;n||(n=new Int32Array(e));for(var i=0;e>i;++i)n[i]=Math.round(r[i]*t);return n}function p(r,t){var n,e;if(!t){var i=0;for(n=0,e=r.length;e>n;n+=2)i+=r[n+1];t=new r.constructor(i)}var o=0;for(n=0,e=r.length;e>n;n+=2)for(var a=r[n],u=r[n+1],s=0;u>s;++s)t[o]=a,++o;return t}function U(r){if(0===r.length)return new Int32Array;var t,n,e=2;for(t=1,n=r.length;n>t;++t)r[t-1]!==r[t]&&(e+=2);var i=new Int32Array(e),o=0,a=1;for(t=1,n=r.length;n>t;++t)r[t-1]!==r[t]?(i[o]=r[t-1],i[o+1]=a,a=1,o+=2):++a;return i[o]=r[r.length-1],i[o+1]=a,i}function b(r,t){var n=r.length;t||(t=new r.constructor(n)),n&&(t[0]=r[0]);for(var e=1;n>e;++e)t[e]=r[e]+t[e-1];return t}function I(r,t){var n=r.length;t||(t=new r.constructor(n)),t[0]=r[0];for(var e=1;n>e;++e)t[e]=r[e]-r[e-1];return t}function w(r,t){var n,e,i=r instanceof Int8Array?127:32767,o=-i-1,a=r.length;if(!t){var u=0;for(n=0;a>n;++n)r[n]o&&++u;t=new Int32Array(u)}for(n=0,e=0;a>n;){for(var s=0;r[n]===i||r[n]===o;)s+=r[n],++n;s+=r[n],++n,t[e]=s,++e}return t}function C(r,t){var n,e=t?127:32767,i=-e-1,o=r.length,a=0;for(n=0;o>n;++n){var u=r[n];0===u?++a:a+=u===e||u===i?2:u>0?Math.ceil(u/e):Math.ceil(u/i)}var s=t?new Int8Array(a):new Int16Array(a),f=0;for(n=0;o>n;++n){var u=r[n];if(u>=0)for(;u>=e;)s[f]=e,++f,u-=e;else for(;i>=u;)s[f]=i,++f,u-=i;s[f]=u,++f}return s}function A(r,t){return b(p(r),t)}function x(r){return U(I(r))}function M(r,t,n){return y(p(r,c(n)),t,n)}function F(r,t){return U(m(r,t))}function S(r,t,n){return y(b(r,c(n)),t,n)}function E(r,t,n){return I(m(r,t),n)}function N(r,t,n){return y(w(r,c(n)),t,n)}function O(r,t,n){var e=w(r,c(n));return S(e,t,d(e))}function T(r,t,n){return C(E(r,t),n)}function k(r){var t=u(r),n=t.getInt32(0),e=t.getInt32(4),i=r.subarray(8,12),r=r.subarray(12);return[n,r,e,i]}function j(r,t,n,e){var i=new ArrayBuffer(12+e.byteLength),o=new Uint8Array(i),a=new DataView(i);return a.setInt32(0,r),a.setInt32(4,t),n&&o.set(n,8),o.set(e,12),o}function q(r){var t=r.length,n=s(r);return j(2,t,void 0,n)}function D(r){var t=r.length,n=L(r);return j(4,t,void 0,n)}function P(r,t){var n=r.length/t,e=L([t]),i=s(r);return j(5,n,e,i)}function z(r){var t=r.length,n=L(U(r));return j(6,t,void 0,n)}function B(r){var t=r.length,n=L(x(r));return j(8,t,void 0,n)}function V(r,t){var n=r.length,e=L([t]),i=L(F(r,t));return j(9,n,e,i)}function G(r,t){var n=r.length,e=L([t]),i=v(T(r,t));return j(10,n,e,i)}function R(r){var t={};return rr.forEach(function(n){void 0!==r[n]&&(t[n]=r[n])}),r.bondAtomList&&(t.bondAtomList=D(r.bondAtomList)),r.bondOrderList&&(t.bondOrderList=q(r.bondOrderList)),t.xCoordList=G(r.xCoordList,1e3),t.yCoordList=G(r.yCoordList,1e3),t.zCoordList=G(r.zCoordList,1e3),r.bFactorList&&(t.bFactorList=G(r.bFactorList,100)),r.atomIdList&&(t.atomIdList=B(r.atomIdList)),r.altLocList&&(t.altLocList=z(r.altLocList)),r.occupancyList&&(t.occupancyList=V(r.occupancyList,100)),t.groupIdList=B(r.groupIdList),t.groupTypeList=D(r.groupTypeList),r.secStructList&&(t.secStructList=q(r.secStructList,1)),r.insCodeList&&(t.insCodeList=z(r.insCodeList)),r.sequenceIndexList&&(t.sequenceIndexList=B(r.sequenceIndexList)),t.chainIdList=P(r.chainIdList,4),r.chainNameList&&(t.chainNameList=P(r.chainNameList,4)),t}function H(r){function t(r){for(var t={},n=0;r>n;n++){var e=o();t[e]=o()}return t}function n(t){var n=r.subarray(a,a+t);return a+=t,n}function e(t){var n=r.subarray(a,a+t);a+=t;var e=65535;if(t>e){for(var i=[],o=0;on;n++)t[n]=o();return t}function o(){var o,s,f=r[a];if(0===(128&f))return a++,f;if(128===(240&f))return s=15&f,a++,t(s);if(144===(240&f))return s=15&f,a++,i(s);if(160===(224&f))return s=31&f,a++,e(s);if(224===(224&f))return o=u.getInt8(a),a++,o;switch(f){case 192:return a++,null;case 194:return a++,!1;case 195:return a++,!0;case 196:return s=u.getUint8(a+1),a+=2,n(s);case 197:return s=u.getUint16(a+1),a+=3,n(s);case 198:return s=u.getUint32(a+1),a+=5,n(s);case 202:return o=u.getFloat32(a+1),a+=5,o;case 203:return o=u.getFloat64(a+1),a+=9,o;case 204:return o=r[a+1],a+=2,o;case 205:return o=u.getUint16(a+1),a+=3,o;case 206:return o=u.getUint32(a+1),a+=5,o;case 208:return o=u.getInt8(a+1),a+=2,o;case 209:return o=u.getInt16(a+1),a+=3,o;case 210:return o=u.getInt32(a+1),a+=5,o;case 217:return s=u.getUint8(a+1),a+=2,e(s);case 218:return s=u.getUint16(a+1),a+=3,e(s);case 219:return s=u.getUint32(a+1),a+=5,e(s);case 220:return s=u.getUint16(a+1),a+=3,i(s);case 221:return s=u.getUint32(a+1),a+=5,i(s);case 222:return s=u.getUint16(a+1),a+=3,t(s);case 223:return s=u.getUint32(a+1),a+=5,t(s)}throw new Error(\"Unknown type 0x\"+f.toString(16))}var a=0,u=new DataView(r.buffer);return o()}function W(r,t,n,e){switch(r){case 1:return h(t);case 2:return f(t);case 3:return l(t);case 4:return g(t);case 5:return s(t);case 6:return p(g(t),new Uint8Array(n));case 7:return p(g(t));case 8:return A(g(t));case 9:return M(g(t),g(e)[0]);case 10:return O(l(t),g(e)[0]);case 11:return y(l(t),g(e)[0]);case 12:return N(l(t),g(e)[0]);case 13:return N(f(t),g(e)[0]);case 14:return w(l(t));case 15:return w(f(t))}}function X(r,t){t=t||{};var n=t.ignoreFields,e={};return nr.forEach(function(t){var i=n?-1!==n.indexOf(t):!1,o=r[t];i||void 0===o||(o instanceof Uint8Array?e[t]=W.apply(null,k(o)):e[t]=o)}),e}function J(r){return String.fromCharCode.apply(null,r).replace(/\\0/g,\"\")}function K(r,t,n){n=n||{};var e,i,o,a,u,s,f=n.firstModelOnly,c=t.onModel,d=t.onChain,l=t.onGroup,v=t.onAtom,g=t.onBond,L=0,h=0,y=0,m=0,p=0,U=-1,b=r.chainNameList,I=r.secStructList,w=r.insCodeList,C=r.sequenceIndexList,A=r.atomIdList,x=r.bFactorList,M=r.altLocList,F=r.occupancyList,S=r.bondAtomList,E=r.bondOrderList;for(e=0,i=r.chainsPerModel.length;i>e&&!(f&&L>0);++e){var N=r.chainsPerModel[L];for(c&&c({chainCount:N,modelIndex:L}),o=0;N>o;++o){var O=r.groupsPerChain[h];if(d){var T=J(r.chainIdList.subarray(4*h,4*h+4)),k=null;b&&(k=J(b.subarray(4*h,4*h+4))),d({groupCount:O,chainIndex:h,modelIndex:L,chainId:T,chainName:k})}for(a=0;O>a;++a){var j=r.groupList[r.groupTypeList[y]],q=j.atomNameList.length;if(l){var D=null;I&&(D=I[y]);var P=null;r.insCodeList&&(P=String.fromCharCode(w[y]));var z=null;C&&(z=C[y]),l({atomCount:q,groupIndex:y,chainIndex:h,modelIndex:L,groupId:r.groupIdList[y],groupType:r.groupTypeList[y],groupName:j.groupName,singleLetterCode:j.singleLetterCode,chemCompType:j.chemCompType,secStruct:D,insCode:P,sequenceIndex:z})}for(u=0;q>u;++u){if(v){var B=null;A&&(B=A[m]);var V=null;x&&(V=x[m]);var G=null;M&&(G=String.fromCharCode(M[m]));var R=null;F&&(R=F[m]),v({atomIndex:m,groupIndex:y,chainIndex:h,modelIndex:L,atomId:B,element:j.elementList[u],atomName:j.atomNameList[u],formalCharge:j.formalChargeList[u],xCoord:r.xCoordList[m],yCoord:r.yCoordList[m],zCoord:r.zCoordList[m],bFactor:V,altLoc:G,occupancy:R})}m+=1}if(g){var H=j.bondAtomList;for(u=0,s=j.bondOrderList.length;s>u;++u)g({atomIndex1:m-q+H[2*u],atomIndex2:m-q+H[2*u+1],bondOrder:j.bondOrderList[u]})}y+=1}h+=1}if(p=U+1,U=m-1,g&&S)for(u=0,s=S.length;s>u;u+=2){var W=S[u],X=S[u+1];(W>=p&&U>=W||X>=p&&U>=X)&&g({atomIndex1:W,atomIndex2:X,bondOrder:E?E[u/2]:null})}L+=1}}function Q(r){return o(R(r))}function Y(r,t){r instanceof ArrayBuffer&&(r=new Uint8Array(r));var n;return n=r instanceof Uint8Array?H(r):r,X(n,t)}function Z(r,t,n,e){function i(){try{var r=Y(o.response);n(r)}catch(t){e(t)}}var o=new XMLHttpRequest;o.addEventListener(\"load\",i,!0),o.addEventListener(\"error\",e,!0),o.responseType=\"arraybuffer\",o.open(\"GET\",t+r.toUpperCase()),o.send()}function $(r,t,n){Z(r,or,t,n)}function _(r,t,n){Z(r,ar,t,n)}var rr=[\"mmtfVersion\",\"mmtfProducer\",\"unitCell\",\"spaceGroup\",\"structureId\",\"title\",\"depositionDate\",\"releaseDate\",\"experimentalMethods\",\"resolution\",\"rFree\",\"rWork\",\"bioAssemblyList\",\"ncsOperatorList\",\"entityList\",\"groupList\",\"numBonds\",\"numAtoms\",\"numGroups\",\"numChains\",\"numModels\",\"groupsPerChain\",\"chainsPerModel\"],tr=[\"xCoordList\",\"yCoordList\",\"zCoordList\",\"groupIdList\",\"groupTypeList\",\"chainIdList\",\"bFactorList\",\"atomIdList\",\"altLocList\",\"occupancyList\",\"secStructList\",\"insCodeList\",\"sequenceIndexList\",\"chainNameList\",\"bondAtomList\",\"bondOrderList\"],nr=rr.concat(tr),er=\"v1.1.0dev\",ir=\"//mmtf.rcsb.org/v1.0/\",or=ir+\"full/\",ar=ir+\"reduced/\";r.encode=Q,r.decode=Y,r.traverse=K,r.fetch=$,r.fetchReduced=_,r.version=er,r.fetchUrl=or,r.fetchReducedUrl=ar,r.encodeMsgpack=o,r.encodeMmtf=R,r.decodeMsgpack=H,r.decodeMmtf=X});","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var x = (y) => {\n\tvar x = {}; __webpack_require__.d(x, y); return x\n} \nvar y = (x) => (() => (x))\nconst __WEBPACK_NAMESPACE_OBJECT__ = x({ [\"default\"]: () => (__WEBPACK_EXTERNAL_MODULE_lodash__[\"default\"]) });","const __WEBPACK_NAMESPACE_OBJECT__ = __WEBPACK_EXTERNAL_MODULE_three__;","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar defaults = {\n lines: 12,\n length: 7,\n width: 5,\n radius: 10,\n scale: 1.0,\n corners: 1,\n color: '#000',\n fadeColor: 'transparent',\n animation: 'spinner-line-fade-default',\n rotate: 0,\n direction: 1,\n speed: 1,\n zIndex: 2e9,\n className: 'spinner',\n top: '50%',\n left: '50%',\n shadow: '0 0 1px transparent', // prevent aliased lines\n position: 'absolute',\n};\nvar Spinner = /** @class */ (function () {\n function Spinner(opts) {\n if (opts === void 0) { opts = {}; }\n this.opts = __assign(__assign({}, defaults), opts);\n }\n /**\n * Adds the spinner to the given target element. If this instance is already\n * spinning, it is automatically removed from its previous target by calling\n * stop() internally.\n */\n Spinner.prototype.spin = function (target) {\n this.stop();\n this.el = document.createElement('div');\n this.el.className = this.opts.className;\n this.el.setAttribute('role', 'progressbar');\n this.el.style.position = this.opts.position;\n this.el.style.width = \"0\";\n this.el.style.zIndex = this.opts.zIndex.toString();\n this.el.style.left = this.opts.left;\n this.el.style.top = this.opts.top;\n this.el.style.transform = \"scale(\".concat(this.opts.scale, \")\");\n if (target) {\n target.insertBefore(this.el, target.firstChild || null);\n }\n drawLines(this.el, this.opts);\n return this;\n };\n /**\n * Stops and removes the Spinner.\n * Stopped spinners may be reused by calling spin() again.\n */\n Spinner.prototype.stop = function () {\n if (this.el) {\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n this.el = undefined;\n }\n return this;\n };\n return Spinner;\n}());\nexport { Spinner };\n/**\n * Returns the line color from the given string or array.\n */\nfunction getColor(color, idx) {\n return typeof color == 'string' ? color : color[idx % color.length];\n}\n/**\n * Internal method that draws the individual lines.\n */\nfunction drawLines(el, opts) {\n var borderRadius = (Math.round(opts.corners * opts.width * 500) / 1000) + 'px';\n var shadow = 'none';\n if (opts.shadow === true) {\n shadow = '0 2px 4px #000'; // default shadow\n }\n else if (typeof opts.shadow === 'string') {\n shadow = opts.shadow;\n }\n var shadows = parseBoxShadow(shadow);\n for (var i = 0; i < opts.lines; i++) {\n var degrees = ~~(360 / opts.lines * i + opts.rotate);\n var backgroundLine = document.createElement('div');\n backgroundLine.style.position = 'absolute';\n backgroundLine.style.top = \"\".concat(-opts.width / 2, \"px\");\n backgroundLine.style.width = (opts.length + opts.width) + 'px';\n backgroundLine.style.height = opts.width + 'px';\n backgroundLine.style.background = getColor(opts.fadeColor, i);\n backgroundLine.style.borderRadius = borderRadius;\n backgroundLine.style.transformOrigin = 'left';\n backgroundLine.style.transform = \"rotate(\".concat(degrees, \"deg) translateX(\").concat(opts.radius, \"px)\");\n var delay = i * opts.direction / opts.lines / opts.speed;\n delay -= 1 / opts.speed; // so initial animation state will include trail\n var line = document.createElement('div');\n line.style.width = '100%';\n line.style.height = '100%';\n line.style.background = getColor(opts.color, i);\n line.style.borderRadius = borderRadius;\n line.style.boxShadow = normalizeShadow(shadows, degrees);\n line.style.animation = \"\".concat(1 / opts.speed, \"s linear \").concat(delay, \"s infinite \").concat(opts.animation);\n backgroundLine.appendChild(line);\n el.appendChild(backgroundLine);\n }\n}\nfunction parseBoxShadow(boxShadow) {\n var regex = /^\\s*([a-zA-Z]+\\s+)?(-?\\d+(\\.\\d+)?)([a-zA-Z]*)\\s+(-?\\d+(\\.\\d+)?)([a-zA-Z]*)(.*)$/;\n var shadows = [];\n for (var _i = 0, _a = boxShadow.split(','); _i < _a.length; _i++) {\n var shadow = _a[_i];\n var matches = shadow.match(regex);\n if (matches === null) {\n continue; // invalid syntax\n }\n var x = +matches[2];\n var y = +matches[5];\n var xUnits = matches[4];\n var yUnits = matches[7];\n if (x === 0 && !xUnits) {\n xUnits = yUnits;\n }\n if (y === 0 && !yUnits) {\n yUnits = xUnits;\n }\n if (xUnits !== yUnits) {\n continue; // units must match to use as coordinates\n }\n shadows.push({\n prefix: matches[1] || '', // could have value of 'inset' or undefined\n x: x,\n y: y,\n xUnits: xUnits,\n yUnits: yUnits,\n end: matches[8],\n });\n }\n return shadows;\n}\n/**\n * Modify box-shadow x/y offsets to counteract rotation\n */\nfunction normalizeShadow(shadows, degrees) {\n var normalized = [];\n for (var _i = 0, shadows_1 = shadows; _i < shadows_1.length; _i++) {\n var shadow = shadows_1[_i];\n var xy = convertOffset(shadow.x, shadow.y, degrees);\n normalized.push(shadow.prefix + xy[0] + shadow.xUnits + ' ' + xy[1] + shadow.yUnits + shadow.end);\n }\n return normalized.join(', ');\n}\nfunction convertOffset(x, y, degrees) {\n var radians = degrees * Math.PI / 180;\n var sin = Math.sin(radians);\n var cos = Math.cos(radians);\n return [\n Math.round((x * cos + y * sin) * 1000) / 1000,\n Math.round((-x * sin + y * cos) * 1000) / 1000,\n ];\n}\n","//----------------------------------------------------------------------------\r\n// Timer\r\n\r\nexport default class Timer {\r\n constructor() {\r\n this.startTime = 0;\r\n this.oldTime = 0;\r\n this.elapsedTime = 0;\r\n this.running = false;\r\n }\r\n\r\n start() {\r\n this.startTime = Timer.now();\r\n this.oldTime = this.startTime;\r\n this.running = true;\r\n }\r\n\r\n stop() {\r\n this.getElapsedTime();\r\n this.running = false;\r\n }\r\n\r\n getElapsedTime() {\r\n this.update();\r\n return this.elapsedTime;\r\n }\r\n\r\n update() {\r\n let delta = 0;\r\n if (this.running) {\r\n const newTime = Timer.now();\r\n delta = 0.001 * (newTime - this.oldTime);\r\n this.oldTime = newTime;\r\n this.elapsedTime += delta;\r\n }\r\n\r\n return delta;\r\n }\r\n}\r\n\r\nTimer.now = (function () {\r\n const p = typeof window !== 'undefined' && window.performance;\r\n return (p && p.now) ? p.now.bind(p) : Date.now;\r\n}());\r\n","import Timer from '../Timer';\r\n\r\nconst { now } = Timer;\r\n\r\nfunction createElement(tag, id, css) {\r\n const element = document.createElement(tag);\r\n element.id = id;\r\n element.style.cssText = css;\r\n return element;\r\n}\r\n\r\nclass Stats {\r\n constructor() {\r\n this.domElement = createElement('div', 'stats', 'padding:8px');\r\n this._text = createElement('p', 'fps', 'margin:0;color:silver;font-size:large');\r\n this.domElement.appendChild(this._text);\r\n\r\n this._startTime = now();\r\n this._prevTime = this._startTime;\r\n\r\n this._deltas = new Array(20);\r\n this._index = 0;\r\n this._total = 0.0;\r\n this._count = 0;\r\n }\r\n\r\n end() {\r\n const time = now();\r\n const delta = time - this._startTime;\r\n\r\n if (this._count < this._deltas.length) {\r\n this._count++;\r\n } else {\r\n this._total -= this._deltas[this._index];\r\n }\r\n this._total += delta;\r\n this._deltas[this._index] = delta;\r\n this._index = (this._index + 1) % this._deltas.length;\r\n\r\n this.ms = this._total / this._count;\r\n this.fps = 1000 / this.ms;\r\n\r\n if (time > this._prevTime + 1000) {\r\n this._text.textContent = this.fps.toPrecision(2);\r\n this._prevTime = time;\r\n }\r\n\r\n return time;\r\n }\r\n\r\n update() {\r\n this._startTime = this.end();\r\n }\r\n\r\n show(on) {\r\n if (on === undefined) {\r\n on = true;\r\n }\r\n this.domElement.style.display = on ? 'block' : 'none';\r\n }\r\n}\r\n\r\nexport default Stats;\r\n","/**\r\n * This class introduces the simplest event system.\r\n */\r\n\r\nimport _ from 'lodash';\r\n\r\nfunction isUndefOrEqual(param, value) {\r\n return !param || param === value;\r\n}\r\n\r\n/**\r\n * Creates empty dispatcher.\r\n *\r\n * @exports EventDispatcher\r\n * @constructor\r\n */\r\nfunction EventDispatcher() {\r\n this._handlers = {};\r\n}\r\n\r\n/**\r\n * Binds callback on specific event type. Optional `context` parameter\r\n * could be used as 'this' for the `callback`.\r\n * @param {string} type Event name.\r\n * @param {function} callback Callback function.\r\n * @param {Object} [context] 'This' object for the callback.\r\n */\r\nEventDispatcher.prototype.addEventListener = function (type, callback, context) {\r\n let handlers = this._handlers[type];\r\n\r\n if (!handlers) {\r\n this._handlers[type] = [];\r\n handlers = this._handlers[type];\r\n }\r\n\r\n const params = [callback, context];\r\n function _checkPar(par) {\r\n return par[0] === params[0] && par[1] === params[1];\r\n }\r\n\r\n if (_.find(handlers, _checkPar) === undefined) {\r\n handlers.push(params);\r\n }\r\n};\r\n\r\n/**\r\n * Removes a previously-bound callback function from an object.\r\n * If no `context` is specified, all versions of the `callback` with different\r\n * contexts will be removed.\r\n * If no `callback` is specified, all callbacks of the `type` will be removed.\r\n * If no `type` is specified, callbacks for all events will be removed.\r\n * @param {?string} [type] Event type.\r\n * @param {function} [callback] Callback function.\r\n * @param {Object} [context] 'This' object for the callback.\r\n */\r\nEventDispatcher.prototype.removeEventListener = function (type, callback, context) {\r\n const self = this;\r\n _.forEach(self._handlers, (handler, ev) => {\r\n _.remove(handler, (values) => isUndefOrEqual(type, ev)\r\n && isUndefOrEqual(callback, values[0])\r\n && isUndefOrEqual(context, values[1] || self));\r\n });\r\n\r\n this._handlers = _.omitBy(self._handlers, (handler) => handler.length === 0);\r\n};\r\n\r\n/**\r\n * Makes all the callbacks for the specific `event` to trigger.\r\n * @param {Object} event Event.\r\n * @param {string} event.type Type of the event.\r\n */\r\nEventDispatcher.prototype.dispatchEvent = function (event) {\r\n const self = this;\r\n\r\n _.forEach(this._handlers[event.type], (callback) => {\r\n const context = callback[1] || self;\r\n callback[0].apply(context, [event]);\r\n });\r\n};\r\n\r\nexport default EventDispatcher;\r\n","/**\r\n * This module contains class for logging.\r\n * Returns an instance of a logger that have already been created.\r\n * Allows users to log messages for five different levels,\r\n * enable console output and catch signal on each message.\r\n */\r\nimport _ from 'lodash';\r\nimport EventDispatcher from './EventDispatcher';\r\n\r\nconst priorities = {\r\n debug: 0,\r\n info: 1,\r\n report: 2,\r\n warn: 3,\r\n error: 4,\r\n};\r\n\r\n/**\r\n * Create new Logger.\r\n *\r\n * @exports Logger\r\n * @extends EventDispatcher\r\n * @constructor\r\n */\r\nfunction Logger() {\r\n EventDispatcher.call(this);\r\n /** Boolean flag that toggles output to browser console.\r\n * @type {boolean}\r\n */\r\n this.console = false;\r\n this._priority = priorities.warn;\r\n}\r\n\r\nLogger.prototype = Object.create(EventDispatcher.prototype);\r\nLogger.prototype.constructor = Logger;\r\n\r\n/**\r\n * Create new clean instance of the logger.\r\n * @returns {Logger}\r\n */\r\nLogger.prototype.instantiate = function () {\r\n return new Logger();\r\n};\r\n\r\nfunction verify(number) {\r\n if (!_.isNumber(number)) {\r\n throw new Error('Wrong log level specified!');\r\n }\r\n return number;\r\n}\r\n\r\n/**\r\n * @property {string} current threshold for signals and console output.\r\n * @name Logger#level\r\n */\r\nObject.defineProperty(Logger.prototype, 'level', {\r\n get() {\r\n return _.findKey(priorities, (value) => value === this._priority);\r\n },\r\n set(level) {\r\n this._priority = verify(priorities[level]);\r\n },\r\n});\r\n\r\n/**\r\n * Returns the list of all possible level values.\r\n * @returns {Array}\r\n */\r\nLogger.prototype.levels = function () {\r\n return Object.keys(priorities);\r\n};\r\n\r\n/**\r\n * Add new message with specified level.\r\n * @param {string} level - level of the message, must be one of the\r\n * {'debug' | 'info' | 'report' | 'warn' | 'error'}\r\n * @param {string} message\r\n */\r\nLogger.prototype.message = function (level, message) {\r\n const priority = verify(priorities[level]);\r\n this._message(priority, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('debug', ...);\r\n * @param message\r\n */\r\nLogger.prototype.debug = function (message) {\r\n this._message(priorities.debug, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('info', ...);\r\n * @param message\r\n */\r\nLogger.prototype.info = function (message) {\r\n this._message(priorities.info, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('report', ...);\r\n * @param message\r\n */\r\nLogger.prototype.report = function (message) {\r\n this._message(priorities.report, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('warn', ...);\r\n * @param message\r\n */\r\nLogger.prototype.warn = function (message) {\r\n this._message(priorities.warn, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('error', ...);\r\n * @param message\r\n */\r\nLogger.prototype.error = function (message) {\r\n this._message(priorities.error, message);\r\n};\r\n\r\n/**\r\n * Add new message with specified priority.\r\n * @param {number} priority - priority of the message\r\n * @param {string} message\r\n * @private\r\n */\r\nLogger.prototype._message = function (priority, message) {\r\n if (priority < this._priority) {\r\n return;\r\n }\r\n const level = _.findKey(priorities, (value) => value === priority);\r\n message = String(message);\r\n if (this.console) {\r\n const output = `miew:${level}: ${message}`;\r\n if (level === 'error') {\r\n console.error(output); // NOSONAR\r\n } else if (level === 'warn') {\r\n console.warn(output); // NOSONAR\r\n } else {\r\n console.log(output); // NOSONAR\r\n }\r\n }\r\n this.dispatchEvent({ type: 'message', level, message });\r\n};\r\n\r\nexport default new Logger();\r\n","import _ from 'lodash';\r\nimport logger from './utils/logger';\r\n\r\nconst browserType = {\r\n DEFAULT: 0,\r\n SAFARI: 1,\r\n};\r\n//----------------------------------------------------------------------------\r\n// Query string\r\n\r\n/**\r\n * Escape only dangerous chars in a query string component, use a plus instead of a space.\r\n *\r\n * [RFC 3986](https://tools.ietf.org/html/rfc3986) allows the following chars in the query (see 3.4):\r\n *\r\n * A-Z a-z 0-9 - _ . ~ ! $ & ' ( ) * + , ; = : @ / ?\r\n *\r\n * For query string elements we need to escape ampersand, equal sign, and plus,\r\n * but encodeURIComponent() function encodes anything except for the following:\r\n *\r\n * A-Z a-z 0-9 - _ . ~ ! ' ( ) *\r\n *\r\n * @param {string} text - key or value to encode\r\n * @param {string} excludeExp - regexp for symbols to exclude from encoding\r\n * @returns {string} encoded string\r\n */\r\nfunction encodeQueryComponent(text, excludeExp) {\r\n const encode = (code) => String.fromCharCode(parseInt(code.substr(1), 16));\r\n return encodeURIComponent(text).replace(excludeExp, encode).replace(/%20/g, '+');\r\n}\r\n\r\n/**\r\n * Unescape dangerous chars in a query string component.\r\n *\r\n * @param {string} text - encoded key or value\r\n * @returns {string} decoded string\r\n * @see {@link encodeQueryComponent}\r\n */\r\nfunction decodeQueryComponent(text) {\r\n return decodeURIComponent(text.replace(/\\+/g, ' '));\r\n}\r\n\r\n/**\r\n * Parse URL and extract an array of parameters.\r\n * @param {string?} url - URL or query string to parse\r\n * @returns {Array} array of (key, value) pairs.\r\n */\r\nfunction getUrlParameters(url) {\r\n url = url || window.location.search;\r\n\r\n const query = url.substring(url.indexOf('?') + 1);\r\n const search = /([^&=]+)=?([^&]*)/g;\r\n const result = [];\r\n let match;\r\n\r\n while ((match = search.exec(query)) !== null) { // eslint-disable-line no-cond-assign\r\n result.push([decodeQueryComponent(match[1]), decodeQueryComponent(match[2])]);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Parse URL and extract an array of parameters as a hash.\r\n * @param {string?} url - URL or query string to parse\r\n * @returns {Object}\r\n */\r\nfunction getUrlParametersAsDict(url) {\r\n const result = {};\r\n const a = getUrlParameters(url);\r\n for (let i = 0; i < a.length; ++i) {\r\n const [key, value] = a[i];\r\n result[key] = value;\r\n }\r\n return result;\r\n}\r\n\r\nfunction resolveURL(str) {\r\n if (typeof URL !== 'undefined') {\r\n try {\r\n if (typeof window !== 'undefined') {\r\n return new URL(str, window.location).href;\r\n }\r\n return new URL(str).href;\r\n } catch (error) {\r\n // IE 11 has a URL object with no constructor available so just try a different approach instead\r\n }\r\n }\r\n if (typeof document !== 'undefined') {\r\n const anchor = document.createElement('a');\r\n anchor.href = str;\r\n return anchor.href;\r\n }\r\n return str;\r\n}\r\n\r\n/**\r\n * Generates regular expression object that includes all symbols\r\n * listed in the argument\r\n * @param symbolStr {string} - String containing characters list.\r\n * @returns {RegExp} - Regular expression.\r\n */\r\nfunction generateRegExp(symbolStr) {\r\n const symbolList = [];\r\n\r\n for (let i = 0, n = symbolStr.length; i < n; ++i) {\r\n symbolList[symbolList.length] = symbolStr[i].charCodeAt(0).toString(16);\r\n }\r\n\r\n const listStr = symbolList.join('|');\r\n\r\n return new RegExp(`%(?:${listStr})`, 'gi');\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Create HTML element\r\n\r\nfunction createElement(tag, attrs, content) {\r\n const element = document.createElement(tag);\r\n let i;\r\n let n;\r\n if (attrs) {\r\n const keys = Object.keys(attrs);\r\n for (i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n element.setAttribute(key, attrs[key]);\r\n }\r\n }\r\n if (content) {\r\n if (!(content instanceof Array)) {\r\n content = [content];\r\n }\r\n for (i = 0, n = content.length; i < n; ++i) {\r\n const child = content[i];\r\n if (typeof child === 'string') {\r\n element.appendChild(document.createTextNode(child));\r\n } else if (child instanceof HTMLElement) {\r\n element.appendChild(child);\r\n }\r\n }\r\n }\r\n return element;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Easy inheritance\r\n\r\n/**\r\n * Derive the class from the base.\r\n * @param cls {function} - Class (constructor) to derive.\r\n * @param base {function} - Class (constructor) to derive from.\r\n * @param members {object=} - Optional instance members to add.\r\n * @param statics {object=} - Optional static class members to add.\r\n * @returns {function} Original class.\r\n */\r\nfunction deriveClass(cls, base, members, statics) {\r\n cls.prototype = _.assign(Object.create(base.prototype), { constructor: cls }, members);\r\n if (statics) {\r\n _.assign(cls, statics);\r\n }\r\n return cls;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Deep prototyping\r\n\r\nfunction deriveDeep(obj, needZeroOwnProperties) {\r\n let res = obj;\r\n let i;\r\n let n;\r\n if (obj instanceof Array) {\r\n res = new Array(obj.length);\r\n for (i = 0, n = obj.length; i < n; ++i) {\r\n res[i] = deriveDeep(obj[i]);\r\n }\r\n } else if (obj instanceof Object) {\r\n res = Object.create(obj);\r\n const keys = Object.keys(obj);\r\n for (i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n const value = obj[key];\r\n const copy = deriveDeep(value);\r\n if (copy !== value) {\r\n res[key] = copy;\r\n }\r\n }\r\n if (needZeroOwnProperties && Object.keys(res).length > 0) {\r\n res = Object.create(res);\r\n }\r\n }\r\n return res;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Colors\r\n\r\nfunction hexColor(color) {\r\n const hex = (`0000000${color.toString(16)}`).substr(-6);\r\n return `#${hex}`;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Debug tracing\r\n\r\nfunction DebugTracer(namespace) {\r\n let enabled = false;\r\n\r\n this.enable = function (on) {\r\n enabled = on;\r\n };\r\n\r\n let indent = 0;\r\n const methods = Object.keys(namespace);\r\n\r\n function wrap(method_, name_) {\r\n return function (...args) {\r\n const spaces = DebugTracer.spaces.substr(0, indent * 2);\r\n if (enabled) {\r\n logger.debug(`${spaces + name_} {`);\r\n }\r\n indent++;\r\n const result = method_.apply(this, args); // eslint-disable-line no-invalid-this\r\n indent--;\r\n if (enabled) {\r\n logger.debug(`${spaces}} // ${name_}`);\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n for (let i = 0, n = methods.length; i < n; ++i) {\r\n const name = methods[i];\r\n const method = namespace[name];\r\n if (method instanceof Function && name !== 'constructor') {\r\n namespace[name] = wrap(method, name);\r\n }\r\n }\r\n}\r\n\r\nDebugTracer.spaces = ' ';\r\n\r\nclass OutOfMemoryError extends Error {\r\n constructor(message) {\r\n super();\r\n this.name = 'OutOfMemoryError';\r\n this.message = message;\r\n }\r\n}\r\n\r\nfunction allocateTyped(TypedArrayName, size) {\r\n let result = null;\r\n try {\r\n result = new TypedArrayName(size);\r\n } catch (e) {\r\n if (e instanceof RangeError) {\r\n throw new OutOfMemoryError(e.message);\r\n } else {\r\n throw e;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Float array conversion\r\n\r\nfunction bytesToBase64(/** ArrayBuffer */ buffer) {\r\n const bytes = new Uint8Array(buffer);\r\n let binary = '';\r\n for (let i = 0; i < bytes.byteLength; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return window.btoa(binary);\r\n}\r\n\r\nfunction bytesFromBase64(/** string */ str) {\r\n const binary = window.atob(str);\r\n const bytes = new Uint8Array(binary.length);\r\n for (let i = 0; i < bytes.length; ++i) {\r\n bytes[i] = binary[i].charCodeAt(0);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\nfunction arrayToBase64(/** number[] */ array, /** function */ TypedArrayClass) {\r\n return bytesToBase64(new TypedArrayClass(array).buffer);\r\n}\r\n\r\nfunction arrayFromBase64(/** string */ str, /** function */ TypedArrayClass) {\r\n return Array.prototype.slice.call(new TypedArrayClass(bytesFromBase64(str)));\r\n}\r\n\r\n// NOTE: this is 1-level comparison\r\nfunction compareOptionsWithDefaults(opts, defOpts) {\r\n const optsStr = [];\r\n if (defOpts && opts) {\r\n const keys = Object.keys(opts);\r\n for (let p = 0; p < keys.length; ++p) {\r\n const key = keys[p];\r\n const value = opts[key];\r\n // TODO add processing for tree structure\r\n if (!(value instanceof Object) && typeof defOpts[key] !== 'undefined' && defOpts[key] !== value) {\r\n optsStr.push(`${key}:${value}`);\r\n }\r\n }\r\n if (optsStr.length > 0) {\r\n return `!${optsStr.join()}`;\r\n }\r\n }\r\n return '';\r\n}\r\n\r\nfunction isAlmostPlainObject(o) {\r\n if (_.isPlainObject(o)) {\r\n return true;\r\n }\r\n const proto = o && Object.getPrototypeOf(o);\r\n return !!proto && !proto.hasOwnProperty('constructor') && isAlmostPlainObject(proto);\r\n}\r\n\r\n/**\r\n * Build an object that contains properties (and subproperties) of `src` different from those\r\n * in `dst`. Objects are parsed recursively, other values (including arrays) are compared for\r\n * equality using `_.isEqual()`.\r\n * @param {!object} src - a new object to compare, may contain changed or new properties\r\n * @param {!object} dst - an old reference object\r\n */\r\nfunction objectsDiff(src, dst) {\r\n const diff = {};\r\n _.forIn(src, (srcValue, key) => {\r\n const dstValue = dst[key];\r\n if (isAlmostPlainObject(srcValue) && isAlmostPlainObject(dstValue)) {\r\n const deepDiff = objectsDiff(srcValue, dstValue);\r\n if (!_.isEmpty(deepDiff)) {\r\n diff[key] = deepDiff;\r\n }\r\n } else if (!_.isEqual(srcValue, dstValue)) {\r\n diff[key] = srcValue;\r\n }\r\n });\r\n return diff;\r\n}\r\n\r\nfunction forInRecursive(object, callback) {\r\n function iterateThrough(obj, prefix) {\r\n _.forIn(obj, (value, key) => {\r\n const newPref = prefix + (prefix.length > 0 ? '.' : '');\r\n if (value instanceof Object) {\r\n iterateThrough(value, newPref + key);\r\n } else if (value !== undefined) {\r\n callback(value, newPref + key);\r\n }\r\n });\r\n }\r\n iterateThrough(object, '');\r\n}\r\n\r\nfunction enquoteString(value) {\r\n if (_.isString(value)) {\r\n return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\r\n }\r\n return value;\r\n}\r\n\r\nfunction unquoteString(value) {\r\n if (!_.isString(value)) {\r\n return value;\r\n }\r\n if (value[0] === '\"' && value[value.length - 1] === '\"') {\r\n value = value.slice(1, value.length - 1);\r\n return value.replace(/\\\\\"/g, '\"');\r\n }\r\n if (value[0] === \"'\" && value[value.length - 1] === \"'\") {\r\n value = value.slice(1, value.length - 1);\r\n return value.replace(/\\\\'/g, \"'\");\r\n }\r\n throw new SyntaxError('Incorrect string format, can\\'t unqute it');\r\n}\r\n\r\nfunction getFileExtension(fileName) {\r\n return fileName.slice((Math.max(0, fileName.lastIndexOf('.')) || Infinity));\r\n}\r\n\r\nfunction splitFileName(fileName) {\r\n const ext = getFileExtension(fileName);\r\n const name = fileName.slice(0, fileName.length - ext.length);\r\n return [name, ext];\r\n}\r\n\r\nfunction dataUrlToBlob(url) {\r\n const parts = url.split(/[:;,]/);\r\n const partsCount = parts.length;\r\n if (partsCount >= 3 && parts[partsCount - 2] === 'base64') {\r\n return new Blob([bytesFromBase64(parts[partsCount - 1])]);\r\n }\r\n return null;\r\n}\r\n\r\nfunction getBrowser() {\r\n if (navigator.vendor && navigator.vendor.indexOf('Apple') > -1\r\n && navigator.userAgent\r\n && navigator.userAgent.indexOf('CriOS') === -1\r\n && navigator.userAgent.indexOf('FxiOS') === -1) {\r\n return browserType.SAFARI;\r\n }\r\n return browserType.DEFAULT;\r\n}\r\n\r\nfunction shotOpen(url) {\r\n if (typeof window !== 'undefined') {\r\n window.open().document.write(``);\r\n }\r\n}\r\n\r\nfunction shotDownload(dataUrl, filename) {\r\n if (!dataUrl || dataUrl.substr(0, 5) !== 'data:') {\r\n return;\r\n }\r\n if (!filename) {\r\n filename = ['screenshot-', +new Date(), '.png'].join('');\r\n }\r\n if (typeof window !== 'undefined' && window.navigator && window.navigator.msSaveBlob) {\r\n window.navigator.msSaveBlob(dataUrlToBlob(dataUrl), filename);\r\n } else if (typeof document !== 'undefined') {\r\n const link = document.createElement('a');\r\n link.download = filename;\r\n link.innerHTML = 'download';\r\n link.href = window.URL.createObjectURL(dataUrlToBlob(dataUrl));\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n}\r\n\r\nfunction download(data, filename, type) {\r\n const blobData = new Blob([data]);\r\n\r\n if (!filename) {\r\n filename = ['data', +new Date()].join('');\r\n }\r\n\r\n if (!type) {\r\n filename += blobData.type || '.bin';\r\n } else {\r\n filename += `.${type}`;\r\n }\r\n\r\n if (typeof window !== 'undefined' && window.navigator && window.navigator.msSaveBlob) {\r\n window.navigator.msSaveBlob(blobData, filename);\r\n } else if (typeof document !== 'undefined') {\r\n const link = document.createElement('a');\r\n link.download = filename;\r\n link.innerHTML = 'download';\r\n link.href = window.URL.createObjectURL(blobData);\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n}\r\n\r\nfunction copySubArrays(src, dst, indices, itemSize) {\r\n for (let i = 0, n = indices.length; i < n; ++i) {\r\n for (let j = 0; j < itemSize; ++j) {\r\n dst[i * itemSize + j] = src[indices[i] * itemSize + j];\r\n }\r\n }\r\n}\r\n\r\nfunction shallowCloneNode(node) {\r\n const newNode = node.cloneNode(true);\r\n newNode.worldPos = node.worldPos;\r\n // .style property is readonly, so \"newNode.style = node.style;\" won't work (and we don't need it, right?)\r\n return newNode;\r\n}\r\n\r\nconst unquotedStringRE = /^[a-zA-Z0-9_]*$/;\r\nconst enquoteHelper = ['\"', '', '\"'];\r\n\r\n// verify and correct if needed selctor identifier\r\nfunction correctSelectorIdentifier(value) {\r\n if (unquotedStringRE.test(value)) {\r\n return value;\r\n }\r\n // quote incorrect identifier\r\n enquoteHelper[1] = value;\r\n return enquoteHelper.join('');\r\n}\r\n\r\n/**\r\n * Concatenates two TypedArray. Doesn't check null refs o type equality\r\n * Attention! It must be use very rarely because requires memory reallocation every time. Use MergeTypedArraysUnsafe to\r\n * unite array of subarrays.\r\n * @param{TypedArray} first - destination array\r\n * @param{TypedArray} second - source array\r\n * @returns{TypedArray} resulting concatenated array\r\n */\r\nfunction concatTypedArraysUnsafe(first, second) {\r\n const result = new first.constructor(first.length + second.length);\r\n result.set(first);\r\n result.set(second, first.length);\r\n return result;\r\n}\r\n\r\n/**\r\n * Merges array of TypedArray into TypedArray. Doesn't check null refs o type equality\r\n * @param{array} array - source array of subarrays\r\n * @returns{TypedArray} resulting merged array\r\n */\r\nfunction mergeTypedArraysUnsafe(array) {\r\n if (array.length <= 0) {\r\n return null;\r\n }\r\n // count the size\r\n const size = array.reduce((acc, cur) => acc + cur.length, 0);\r\n // create combined array\r\n const result = new array[0].constructor(size);\r\n for (let i = 0, start = 0; i < array.length; i++) {\r\n const count = array[i].length;\r\n result.set(array[i], start);\r\n start += count;\r\n }\r\n return result;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Exports\r\n\r\nexport default {\r\n browserType,\r\n encodeQueryComponent,\r\n decodeQueryComponent,\r\n getUrlParameters,\r\n getUrlParametersAsDict,\r\n resolveURL,\r\n generateRegExp,\r\n createElement,\r\n deriveClass,\r\n deriveDeep,\r\n hexColor,\r\n DebugTracer,\r\n OutOfMemoryError,\r\n allocateTyped,\r\n bytesFromBase64,\r\n bytesToBase64,\r\n arrayFromBase64,\r\n arrayToBase64,\r\n compareOptionsWithDefaults,\r\n objectsDiff,\r\n forInRecursive,\r\n enquoteString,\r\n unquoteString,\r\n getBrowser,\r\n shotOpen,\r\n shotDownload,\r\n copySubArrays,\r\n shallowCloneNode,\r\n correctSelectorIdentifier,\r\n getFileExtension,\r\n splitFileName,\r\n download,\r\n concatTypedArraysUnsafe,\r\n mergeTypedArraysUnsafe,\r\n};\r\n","import EventDispatcher from './EventDispatcher';\r\n\r\nexport default class JobHandle extends EventDispatcher {\r\n constructor() {\r\n super();\r\n this._shouldCancel = false;\r\n }\r\n\r\n cancel() {\r\n this._shouldCancel = true;\r\n this.dispatchEvent({ type: 'cancel' });\r\n }\r\n\r\n shouldCancel() {\r\n return this._shouldCancel;\r\n }\r\n\r\n // slaves use this to notify master about their events\r\n // master routes these notifications to a single event slot\r\n notify(event) {\r\n this.dispatchEvent({ type: 'notification', slaveEvent: event });\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport utils from './utils';\r\nimport EventDispatcher from './utils/EventDispatcher';\r\n\r\nconst VERSION = 0;\r\n\r\n//----------------------------------------------------------------------------\r\n// DEFAULT SETTINGS\r\n//----------------------------------------------------------------------------\r\n\r\n/**\r\n * Polygonal complexity settings.\r\n *\r\n * @typedef PolyComplexity\r\n * @property {number} poor\r\n * @property {number} low\r\n * @property {number} medium\r\n * @property {number} high\r\n * @property {number} ultra\r\n */\r\n\r\n/**\r\n * @alias SettingsObject\r\n * @namespace\r\n */\r\nconst defaults = {\r\n /**\r\n * Default options for all available modes.\r\n * Use {@link Mode.id} as a dictionary key to access mode options.\r\n *\r\n * Usually you don't need to override these settings. You may specify mode options as a parameter during\r\n * {@link Mode} construction.\r\n *\r\n * @memberof SettingsObject#\r\n * @type {Object.}\r\n *\r\n * @property {LinesModeOptions} LN - Lines mode options.\r\n * @property {LicoriceModeOptions} LC - Licorice mode options.\r\n * @property {BallsAndSticksModeOptions} BS - Balls and Sticks mode options.\r\n * @property {VanDerWaalsModeOptions} VW - Van der Waals mode options.\r\n * @property {TraceModeOptions} TR - Trace mode options.\r\n * @property {TubeModeOptions} TU - Tube mode options.\r\n * @property {CartoonModeOptions} CA - Cartoon mode options.\r\n * @property {QuickSurfaceModeOptions} QS - Contact Surface mode options.\r\n * @property {IsoSurfaceSASModeOptions} SA - Solvent Accessible Surface mode options.\r\n * @property {IsoSurfaceSESModeOptions} SE - Solvent Excluded Surface mode options.\r\n * @property {ContactSurfaceModeOptions} CS - Contact Surface mode options.\r\n * @property {TextModeOptions} TX - Text mode options.\r\n * @property {VolumeDensityModeOptions} VD - Volume Density mode options.\r\n */\r\n modes: {\r\n //----------------------------------------------------------------------------\r\n // BALLS AND STICKS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Balls and Sticks mode options.\r\n *\r\n * @typedef BallsAndSticksModeOptions\r\n *\r\n * @property {number} atom - Sphere radius as a fraction of Van der Waals atom radius.\r\n * @property {number} bond - Cylinder radius in angstroms.\r\n * @property {number} space - Fraction of the space around one cylinder. Zero means that cylinder fills all\r\n * available space.\r\n * @property {boolean} multibond - Toggles rendering of multiple ordered bonds.\r\n * @property {number} aromrad - Minor radius of a torus for aromatic loops.\r\n * @property {boolean} showarom - Toggles rendering of aromatic loops.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n BS: {\r\n atom: 0.23,\r\n bond: 0.15,\r\n space: 0.5,\r\n multibond: true,\r\n aromrad: 0.1,\r\n showarom: true,\r\n polyComplexity: {\r\n poor: 3,\r\n low: 4,\r\n medium: 6,\r\n high: 12,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // VAN DER WAALS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Van der Waals mode options.\r\n *\r\n * @typedef VanDerWaalsModeOptions\r\n *\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n VW: {\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 8,\r\n high: 16,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // LINES\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Lines mode options.\r\n *\r\n * @typedef LinesModeOptions\r\n *\r\n * @property {boolean} multibond - Flag, that toggles rendering of multiple ordered bonds.\r\n * @property {boolean} showarom - Flag, that toggles rendering of aromatic loops.\r\n * @property {number} offsarom - Offset between bonds and aromatic cycle.\r\n * @property {number} chunkarom - Number of pieces in a-loop arc, corresponding to atom.\r\n * @property {number} atom - Collision radius for atoms picking.\r\n * @property {number} lineWidth - Line width in pixels (not used in thin lines).\r\n */\r\n LN: {\r\n multibond: true,\r\n showarom: true,\r\n offsarom: 0.2,\r\n chunkarom: 10,\r\n atom: 0.23,\r\n lineWidth: 2,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // LICORICE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Licorice mode options.\r\n *\r\n * @typedef LicoriceModeOptions\r\n *\r\n * @property {number} bond - Bond cylinder radius.\r\n * @property {number} space - Fraction of the space around one cylinder. Zero means that cylinder fills all\r\n * available space.\r\n * @property {boolean} multibond - Flag, that toggles rendering of multiple ordered bonds.\r\n * @property {number} aromrad - Minor radius of a torus for aromatic loops.\r\n * @property {boolean} showarom - Flag, that toggles rendering of aromatic loops.\r\n * @property {PolyComplexity} polyComplexity - Poly complexity values for render modes.\r\n */\r\n LC: {\r\n bond: 0.20,\r\n space: 0.0,\r\n multibond: true,\r\n aromrad: 0.1,\r\n showarom: true,\r\n polyComplexity: {\r\n poor: 3,\r\n low: 4,\r\n medium: 6,\r\n high: 12,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // SURFACE SAS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Solvent Accessible Surface mode options.\r\n *\r\n * @typedef IsoSurfaceSASModeOptions\r\n *\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {number} probeRadius - Radius of the probe.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n SA: {\r\n zClip: false,\r\n probeRadius: 1.5,\r\n subset: '',\r\n wireframe: false,\r\n polyComplexity: {\r\n poor: 6,\r\n low: 8,\r\n medium: 16,\r\n high: 30,\r\n ultra: 60,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // SURFACE SES\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Solvent Excluded Surface mode options.\r\n *\r\n * @typedef IsoSurfaceSESModeOptions\r\n *\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {number} probeRadius - Radius of the probe.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n SE: {\r\n zClip: false,\r\n probeRadius: 1.5,\r\n subset: '',\r\n wireframe: false,\r\n polyComplexity: {\r\n poor: 6,\r\n low: 8,\r\n medium: 16,\r\n high: 30,\r\n ultra: 60,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // QUICK SURFACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Quick Surface mode options.\r\n *\r\n * @typedef QuickSurfaceModeOptions\r\n *\r\n * @property {number} isoValue - Isovalue of the surface to extract.\r\n * @property {number} scale - Radius scale for the surface being built.\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} gaussLim - Gauss lim for coloring the bigger the value, the smoother our colors are.\r\n * @property {PolyComplexity} gridSpacing - Poly complexity values for render modes. In this case the value\r\n * corresponds to the grid density.\r\n */\r\n QS: {\r\n isoValue: 0.5,\r\n gaussLim: {\r\n poor: 1.5,\r\n low: 2.0,\r\n medium: 2.5,\r\n high: 3.0,\r\n ultra: 4.0,\r\n },\r\n scale: 1.0,\r\n wireframe: false,\r\n gridSpacing: {\r\n poor: 2,\r\n low: 1.5,\r\n medium: 1,\r\n high: 0.5,\r\n ultra: 0.25,\r\n },\r\n subset: '',\r\n zClip: false,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // CONTACT SURFACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Contact Surface mode options.\r\n *\r\n * @typedef ContactSurfaceModeOptions\r\n *\r\n * @property {number} isoValue - Isovalue of the surface to extract.\r\n * @property {number} probeRadius - Probe radius.\r\n * @property {number} probePositions\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Radius scale for the surface being built.\r\n * Poly complexity values for render modes. In this case the value corresponds to the grid density.\r\n */\r\n CS: {\r\n probeRadius: 1.4,\r\n isoValue: 1.5,\r\n wireframe: false,\r\n probePositions: 30,\r\n polyComplexity: {\r\n poor: 0.5,\r\n low: 1.0,\r\n medium: 1.5,\r\n high: 1.75,\r\n ultra: 2.0,\r\n },\r\n subset: '',\r\n zClip: false,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TRACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Trace mode options.\r\n *\r\n * @typedef TraceModeOptions\r\n *\r\n * @property {number} radius - Cylinder radius.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n TR: {\r\n radius: 0.30,\r\n polyComplexity: {\r\n poor: 12,\r\n low: 16,\r\n medium: 32,\r\n high: 64,\r\n ultra: 64,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TUBE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Tube mode options.\r\n *\r\n * @typedef TubeModeOptions\r\n *\r\n * @property {number} radius - Cylinder radius.\r\n * @property {number} tension - Tension for interpolation.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n * @property {number} heightSegmentsRatio - Poly complexity multiplier for height segments.\r\n */\r\n TU: {\r\n radius: 0.30,\r\n heightSegmentsRatio: 1.5,\r\n tension: -0.7,\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 10,\r\n high: 18,\r\n ultra: 34,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // CARTOON\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Cartoon mode options.\r\n *\r\n * @typedef CartoonModeOptions\r\n *\r\n * @property {number} radius - Standard tube radius.\r\n * @property {number} depth - Height of the secondary structure ribbon.\r\n * @property {number} tension - Tension for interpolation.\r\n * @proprety {object} ss - Secondary structure parameters.\r\n * @proprety {object} ss.helix - Options for helices render.\r\n * @proprety {number} ss.helix.width - Width of the secondary structure ribbon.\r\n * @proprety {number} ss.helix.arrow - Secondary structure's arrow width.\r\n * @proprety {object} ss.strand - Options for strands render.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n * polyComplexity must be even for producing symmetric arrows.\r\n * @property {number} heightSegmentsRatio - Poly complexity multiplier for height segments.\r\n */\r\n CA: {\r\n radius: 0.30,\r\n depth: 0.25,\r\n ss: {\r\n helix: {\r\n width: 1.0,\r\n arrow: 2.0,\r\n },\r\n strand: {\r\n width: 1.0,\r\n arrow: 2.0,\r\n },\r\n },\r\n heightSegmentsRatio: 1.5,\r\n tension: -0.7,\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 10,\r\n high: 18,\r\n ultra: 34,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TEXT\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Text mode options.\r\n *\r\n * @typedef TextModeOptions\r\n *\r\n * @property {string} template - Format string for building output text.\r\n * @property {string} horizontalAlign - Text alignment ('left', 'right', 'center').\r\n * @property {string} verticalAlign - Vertical text box alignment ('top', 'bottom', 'middle').\r\n * @property {number} dx - Text offset x in angstroms.\r\n * @property {number} dy - Text offset y in angstroms.\r\n * @property {number} dz - Text offset z in angstroms.\r\n * @property {string} fg - Color rule for foreground.\r\n * @property {string} bg - Color rule for background.\r\n * @property {boolean} showBg - Flag, that toggles background rendering.\r\n *\r\n */\r\n TX: {\r\n template: '{{Chain}}.{{Residue}}{{Sequence}}.{{Name}}',\r\n horizontalAlign: 'center',\r\n verticalAlign: 'middle',\r\n dx: 0,\r\n dy: 0,\r\n dz: 1,\r\n fg: 'none',\r\n bg: '0x202020',\r\n showBg: true,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // VOLUME DENSITY\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Volume density mode options.\r\n *\r\n * @typedef VolumeDensityModeOptions\r\n *\r\n * @property {number} kSigma - Noise threshold coefficient.\r\n * @property {boolean} frame - flag, that turns on box frame painting.\r\n * @property {boolean} isoMode - flag, that turns on IsoSurface mode instead of Volume Rendering.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n VD: {\r\n kSigma: 1.0,\r\n kSigmaMed: 2.0,\r\n kSigmaMax: 4.0,\r\n frame: true,\r\n isoMode: false,\r\n polyComplexity: {\r\n poor: 2,\r\n low: 3,\r\n medium: 4,\r\n high: 8,\r\n ultra: 10,\r\n },\r\n },\r\n },\r\n\r\n /**\r\n * Default options for all available colorers.\r\n * Use {@link Colorer.id} as a dictionary key to access colorer options.\r\n *\r\n * Usually you don't need to override these settings. You may specify colorer options as a parameter during\r\n * {@link Colorer} construction.\r\n *\r\n * Not all colorers have options.\r\n *\r\n * @memberof SettingsObject#\r\n * @type {Object.}\r\n *\r\n * @property {ElementColorerOptions} EL - Element colorer options.\r\n * @property {SequenceColorerOptions} SQ - Sequence colorer options.\r\n * @property {MoleculeColorerOptions} MO - Molecule colorer options.\r\n * @property {UniformColorerOptions} UN - Uniform colorer options.\r\n * @property {ConditionalColorerOptions} CO - Conditional colorer options.\r\n * @property {TemperatureColorerOptions} TM - Temperature colorer options.\r\n * @property {OccupancyColorerOptions} OC - Occupancy colorer options.\r\n * @property {HydrophobicityColorerOptions} HY - Hydrophobicity colorer options.\r\n */\r\n colorers: {\r\n /**\r\n * Element colorer options.\r\n *\r\n * @typedef ElementColorerOptions\r\n *\r\n * @property {number} carbon - Carbon color or -1 to use default.\r\n */\r\n EL: {\r\n carbon: -1,\r\n },\r\n\r\n /**\r\n * Uniform colorer options.\r\n *\r\n * @typedef UniformColorerOptions\r\n *\r\n * @property {number} color - Single color to paint with.\r\n */\r\n UN: {\r\n color: 0xFFFFFF,\r\n },\r\n\r\n /**\r\n * Conditional colorer options.\r\n *\r\n * @typedef ConditionalColorerOptions\r\n *\r\n * @property {string} subset - Selector string.\r\n * @property {number} color - Color of selected atoms.\r\n * @property {number} baseColor - Color of other atoms.\r\n */\r\n CO: {\r\n subset: 'charged',\r\n color: 0xFF0000,\r\n baseColor: 0xFFFFFF,\r\n },\r\n\r\n /**\r\n * Carbon colorer options.\r\n *\r\n * @typedef CarbonColorerOptions\r\n *\r\n * @property {number} color - Single color to paint carbons\r\n * @property {number} factor - Color factor for not carbon atoms.\r\n */\r\n CB: {\r\n color: 0x909090,\r\n factor: 0.6,\r\n },\r\n\r\n /**\r\n * Sequence colorer options.\r\n *\r\n * @typedef SequenceColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n SQ: {\r\n gradient: 'rainbow',\r\n },\r\n\r\n /**\r\n * Temperature colorer options.\r\n *\r\n * @typedef TemperatureColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n * @property {number} min - Minimal temperature.\r\n * @property {number} max - Maximal temperature.\r\n */\r\n TM: {\r\n gradient: 'temp',\r\n min: 5,\r\n max: 40,\r\n },\r\n\r\n /**\r\n * Occupancy colorer options.\r\n *\r\n * @typedef OccupancyColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n OC: {\r\n gradient: 'reds',\r\n },\r\n\r\n /**\r\n * Hydrophobicity colorer options.\r\n *\r\n * @typedef HydrophobicityColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n HY: {\r\n gradient: 'blue-red',\r\n },\r\n\r\n /**\r\n * Molecule colorer options.\r\n *\r\n * @typedef MoleculeColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n MO: {\r\n gradient: 'rainbow',\r\n },\r\n },\r\n\r\n /*\r\n * Use antialiasing in WebGL.\r\n * @type {boolean}\r\n */\r\n antialias: true,\r\n\r\n /*\r\n * Camera field of view in degrees.\r\n * @type {number}\r\n */\r\n camFov: 45.0,\r\n\r\n /*\r\n * Camera near plane distance.\r\n * @type {number}\r\n */\r\n camNear: 0.5,\r\n\r\n /*\r\n * Camera far plane distance.\r\n * @type {number}\r\n */\r\n camFar: 100.0,\r\n\r\n camDistance: 2.5,\r\n\r\n radiusToFit: 1.0,\r\n\r\n /**\r\n * @type {number}\r\n * @instance\r\n */\r\n fogNearFactor: 0.5, // [0, 1]\r\n\r\n /**\r\n * @type {number}\r\n * @instance\r\n */\r\n fogFarFactor: 1, // [0, 1]\r\n fogAlpha: 1.0,\r\n fogColor: 0x000000,\r\n fogColorEnable: false,\r\n\r\n /**\r\n * Palette used for molecule coloring.\r\n * @type {string}\r\n */\r\n palette: 'JM',\r\n\r\n /*\r\n * Geometry resolution.\r\n * @type {string}\r\n */\r\n resolution: 'medium',\r\n\r\n autoResolution: false/* true */,\r\n\r\n autoPreset: true,\r\n\r\n preset: 'default', // TODO: remove 'preset' from settings, implement autodetection\r\n\r\n presets: {\r\n // Default\r\n default: [{\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n empty: [],\r\n\r\n // Wireframe\r\n wire: [{\r\n mode: 'LN',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n // Small molecules\r\n small: [{\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n // Proteins, nucleic acids etc.\r\n macro: [{\r\n mode: 'CA',\r\n colorer: 'SS',\r\n selector: 'not hetatm',\r\n material: 'SF',\r\n }, {\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'hetatm and not water',\r\n material: 'SF',\r\n }],\r\n },\r\n\r\n objects: {\r\n line: {\r\n color: 0xFFFFFFFF,\r\n dashSize: 0.3,\r\n gapSize: 0.05,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n\r\n bg: {\r\n color: 0x202020,\r\n transparent: false,\r\n },\r\n\r\n draft: {\r\n clipPlane: false,\r\n clipPlaneFactor: 0.5,\r\n clipPlaneSpeed: 0.00003,\r\n },\r\n\r\n /*\r\n * Separate group for plugins.\r\n * Each plugin handles its field by itself.\r\n */\r\n plugins: {\r\n\r\n },\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n axes: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fog: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fps: true,\r\n\r\n /**\r\n * Switch using of z-sprites for sphere and cylinder geometry\r\n * @type {boolean}\r\n * @instance\r\n */\r\n zSprites: true,\r\n\r\n isoSurfaceFakeOpacity: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n suspendRender: true,\r\n\r\n nowater: false,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n autobuild: true,\r\n\r\n /**\r\n * Anti-aliasing.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fxaa: true,\r\n /**\r\n * Outline depths\r\n * @type {boolean}\r\n * @instance\r\n */\r\n outline: {\r\n on: false,\r\n color: 0x000000,\r\n threshold: 0.1,\r\n thickness: 1,\r\n },\r\n\r\n /**\r\n * Ambient Occlusion special effect.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n ao: false,\r\n\r\n /**\r\n * Shadows options.\r\n *\r\n * @property {boolean} shadowMap - enable/disable.\r\n * @property {string} basic/percentage-closer filtering/non-uniform randomizing pcf.\r\n * @property {number} radius for percentage-closer filtering.\r\n */\r\n shadow: {\r\n on: false,\r\n type: 'random'/* basic, pcf, random */,\r\n radius: 1.0,\r\n },\r\n\r\n /**\r\n * Auto-rotation with constant speed.\r\n * @type {number}\r\n * @instance\r\n */\r\n autoRotation: 0.0,\r\n\r\n /**\r\n * Set maximum fps for animation.\r\n * @type {number}\r\n * @instance\r\n */\r\n maxfps: 30,\r\n\r\n /**\r\n * Set fbx output precision.\r\n * @type {number}\r\n * @instance\r\n */\r\n fbxprec: 4,\r\n\r\n /**\r\n * Auto-rotation axis.\r\n *\r\n * - true: complex auto-rotation is about vertical axis\r\n * - false: rotation axis is defined by last user rotation\r\n *\r\n * @type {boolean}\r\n * @instance\r\n */\r\n autoRotationAxisFixed: true,\r\n\r\n /**\r\n * Enable zooming with mouse wheel or pinch gesture.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n zooming: true,\r\n\r\n /**\r\n * Enable picking atoms & residues with left mouse button or touch.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n picking: true,\r\n\r\n /**\r\n * Set picking mode ('atom', 'residue', 'chain', 'molecule').\r\n * @type {string}\r\n * @instance\r\n */\r\n pick: 'atom',\r\n\r\n /**\r\n * Make \"component\" and \"fragment\" editing modes available.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n editing: false,\r\n\r\n /**\r\n * Detect aromatic loops.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n aromatic: false,\r\n\r\n /**\r\n * Load only one biological unit from all those described in PDB file.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n singleUnit: true,\r\n\r\n /**\r\n * Set stereo mode ('NONE', 'SIMPLE', 'DISTORTED', 'ANAGLYPH', 'WEBVR').\r\n * @type {string}\r\n * @instance\r\n */\r\n stereo: 'NONE',\r\n\r\n /**\r\n * Enable smooth transition between views\r\n * @type {boolean}\r\n * @instance\r\n */\r\n interpolateViews: true,\r\n\r\n /**\r\n * Set transparency mode ('standard', 'prepass').\r\n * @type {string}\r\n * @instance\r\n */\r\n transparency: 'prepass',\r\n\r\n /**\r\n * Mouse translation speed.\r\n * @type {number}\r\n * @instance\r\n */\r\n translationSpeed: 2,\r\n\r\n debug: {\r\n example: 3.5,\r\n text: 'hello!',\r\n good: true,\r\n ssaoKernelRadius: 0.7,\r\n ssaoFactor: 0.7,\r\n stereoBarrel: 0.25,\r\n },\r\n use: {\r\n multiFile: false,\r\n },\r\n};\r\n\r\n//----------------------------------------------------------------------------\r\n// SETTINGS CLASS\r\n//----------------------------------------------------------------------------\r\n\r\nfunction Settings() {\r\n EventDispatcher.call(this);\r\n\r\n this.old = null;\r\n this.now = {};\r\n this._changed = {};\r\n\r\n this.reset();\r\n}\r\n\r\nutils.deriveClass(Settings, EventDispatcher, {\r\n defaults,\r\n\r\n set(path, value) {\r\n if (_.isString(path)) {\r\n const oldValue = _.get(this.now, path);\r\n if (oldValue !== value) {\r\n _.set(this.now, path, value);\r\n this._notifyChange(path, value);\r\n }\r\n } else {\r\n const diff = utils.objectsDiff(path, this.now);\r\n if (!_.isEmpty(diff)) {\r\n _.merge(this.now, diff);\r\n this._notifyChanges(diff);\r\n }\r\n }\r\n },\r\n\r\n get(path, defaultValue) {\r\n return _.get(this.now, path, defaultValue);\r\n },\r\n\r\n reset() {\r\n const diff = utils.objectsDiff(defaults, this.now);\r\n this.now = _.cloneDeep(defaults);\r\n this.old = null;\r\n this._notifyChanges(diff);\r\n this._changed = {};\r\n },\r\n\r\n checkpoint() {\r\n this.old = _.cloneDeep(this.now);\r\n this._changed = {};\r\n },\r\n\r\n _notifyChange(path, value) {\r\n this._changed[path] = true;\r\n this.dispatchEvent({ type: `change:${path}`, value });\r\n },\r\n\r\n _notifyChanges(diff) {\r\n utils.forInRecursive(diff, (deepValue, deepPath) => {\r\n this._notifyChange(deepPath, deepValue);\r\n });\r\n },\r\n\r\n changed() {\r\n if (!this.old) {\r\n return [];\r\n }\r\n const { old, now } = this;\r\n const keys = _.filter(Object.keys(this._changed), (key) => _.get(old, key) !== _.get(now, key));\r\n return keys;\r\n },\r\n\r\n applyDiffs(diffs) {\r\n if (diffs.hasOwnProperty('VERSION') && diffs.VERSION !== VERSION) {\r\n throw new Error('Settings version does not match!');\r\n }\r\n // VERSION shouldn't be presented inside settings structure\r\n delete diffs.VERSION;\r\n this.reset();\r\n this.set(diffs);\r\n },\r\n\r\n getDiffs(versioned) {\r\n const diffs = utils.objectsDiff(this.now, defaults);\r\n if (versioned) {\r\n diffs.VERSION = VERSION;\r\n }\r\n return diffs;\r\n },\r\n\r\n setPluginOpts(plugin, opts) {\r\n defaults.plugins[plugin] = _.cloneDeep(opts);\r\n this.now.plugins[plugin] = _.cloneDeep(opts);\r\n },\r\n});\r\n\r\nexport default new Settings();\r\n","import _ from 'lodash';\r\nimport settings from './settings';\r\nimport utils from './utils';\r\nimport logger from './utils/logger';\r\n\r\nlet repIndex = 0;\r\n\r\nfunction asBoolean(value) {\r\n return !(!value || value === '0' || (_.isString(value) && value.toLowerCase() === 'false'));\r\n}\r\n\r\nconst adapters = {\r\n string: String,\r\n number: Number,\r\n boolean: asBoolean,\r\n};\r\n\r\n// Level 1 assignment symbol\r\nconst cL1Ass = '=';\r\n\r\nconst cOptsSep = '!';\r\n// Level 2 (options) assignment symbol\r\nconst cL2Ass = ':';\r\n// Level 2 (options) separator symbol\r\nconst cLSep = ',';\r\n\r\nconst cCommonIgnoreSymbols = '$;@/?';\r\n/**\r\n * We may (and should) leave as is for better readability:\r\n *\r\n * $ , ; : @ / ?\r\n */\r\n/**\r\n * Generate regular expression for symbols excluded for first level encryption\r\n */\r\nfunction getLevel1ExcludedExpr() {\r\n const cLevel1Ignores = ':,';\r\n return utils.generateRegExp(cCommonIgnoreSymbols + cLevel1Ignores);\r\n}\r\n\r\n/**\r\n * Generate regular expression for symbols excluded for first level encryption\r\n * (options, etc, ..)\r\n */\r\nfunction getLevel2ExcludedExpr() {\r\n const cLevel2Ignores = ' ';\r\n return utils.generateRegExp(cCommonIgnoreSymbols + cLevel2Ignores);\r\n}\r\n\r\nconst cL1ExclExpr = getLevel1ExcludedExpr();\r\nfunction encodeQueryComponentL1(value) {\r\n return utils.encodeQueryComponent(value, cL1ExclExpr);\r\n}\r\n\r\nconst cL2ExclExpr = getLevel2ExcludedExpr();\r\nfunction encodeQueryComponentL2(value) {\r\n return utils.encodeQueryComponent(value, cL2ExclExpr);\r\n}\r\n\r\nfunction ensureRepList(opts) {\r\n let { reps } = opts;\r\n if (!reps) {\r\n const { presets } = settings.now;\r\n let preset = opts.preset || settings.now.preset;\r\n reps = presets[preset];\r\n if (!reps) {\r\n logger.warn(`Unknown preset \"${preset}\"`);\r\n [preset] = Object.keys(presets);\r\n reps = presets[preset]; // fall back to any preset\r\n }\r\n opts.preset = preset;\r\n opts.reps = utils.deriveDeep(reps, true);\r\n }\r\n}\r\n\r\nfunction ensureRepAssign(opts, prop, value) {\r\n ensureRepList(opts);\r\n const rep = opts.reps[repIndex];\r\n // prop specified twice therefore start new rep by cloning the current\r\n if (rep.hasOwnProperty(prop)) {\r\n repIndex = opts.reps.length;\r\n opts.reps[repIndex] = utils.deriveDeep(rep, true);\r\n }\r\n if (value !== undefined) {\r\n opts.reps[repIndex][prop] = value;\r\n }\r\n}\r\n\r\nfunction addObject(opts, params, options) {\r\n if (opts._objects === undefined) {\r\n opts._objects = [];\r\n }\r\n\r\n const [type, newOpts] = options;\r\n const newObj = {\r\n type,\r\n params,\r\n };\r\n\r\n if (newOpts !== undefined) {\r\n newObj.opts = newOpts;\r\n }\r\n\r\n opts._objects[opts._objects.length] = newObj;\r\n}\r\n\r\nfunction parseParams(str, params) {\r\n const sep = str.indexOf(',');\r\n if (sep >= 0) {\r\n params.push(str.substr(sep + 1).split(','));\r\n return str.substr(0, sep);\r\n }\r\n // keep this untouched if no params were extracted\r\n return str;\r\n}\r\n\r\nfunction extractArgs(input, defaultsDict, params) {\r\n if (input) {\r\n const bang = input.indexOf(cOptsSep);\r\n const inputVal = parseParams(input.substr(0, bang >= 0 ? bang : undefined), params);\r\n if (bang >= 0) {\r\n const args = input.substr(bang + 1).split(cLSep);\r\n input = inputVal;\r\n if (defaultsDict) {\r\n const defaults = defaultsDict[input];\r\n const opts = utils.deriveDeep(defaults, true);\r\n args.forEach((arg) => {\r\n const pair = arg.split(cL2Ass, 2);\r\n const key = decodeURIComponent(pair[0]);\r\n const value = decodeURIComponent(pair[1]);\r\n const adapter = adapters[typeof _.get(defaults, key)];\r\n if (adapter) {\r\n _.set(opts, key, adapter(value));\r\n } else {\r\n logger.warn(`Unknown argument \"${key}\" for option \"${input}\"`);\r\n }\r\n });\r\n if (Object.keys(opts).length > 0) {\r\n input = [input, opts];\r\n }\r\n }\r\n } else {\r\n input = inputVal;\r\n }\r\n }\r\n return input;\r\n}\r\n\r\nconst actions = {\r\n\r\n l: 'load',\r\n load: String,\r\n t: 'type',\r\n type: String,\r\n v: 'view',\r\n view: String,\r\n u: 'unit',\r\n unit: Number,\r\n menu: asBoolean,\r\n\r\n // Commands\r\n\r\n o: 'object',\r\n object(value, opts) {\r\n const params = [];\r\n let options = extractArgs(value, settings.defaults.objects, params);\r\n if (!Array.isArray(options)) {\r\n options = [options];\r\n }\r\n addObject(opts, params[0], options);\r\n },\r\n\r\n p: 'preset',\r\n preset(value, opts) {\r\n opts.preset = value;\r\n opts.reps = null;\r\n ensureRepList(opts);\r\n },\r\n\r\n r: 'rep',\r\n rep(value, opts) {\r\n ensureRepList(opts);\r\n repIndex = Number(value);\r\n // clamp the index to one greater than the last\r\n repIndex = repIndex <= opts.reps.length ? (repIndex < 0 ? 0 : repIndex) : opts.reps.length;\r\n // create a new rep if it is adjacent to the existing ones\r\n if (repIndex === opts.reps.length) {\r\n // if there is no rep to derive from, derive from the first rep of the default\r\n opts.reps[repIndex] = repIndex > 0 ? utils.deriveDeep(opts.reps[repIndex - 1], true)\r\n : utils.deriveDeep(settings.defaults.presets.default[0], true);\r\n }\r\n },\r\n\r\n s: 'select',\r\n select(value, opts) {\r\n ensureRepAssign(opts, 'selector', value);\r\n },\r\n\r\n m: 'mode',\r\n mode(value, opts) {\r\n ensureRepAssign(opts, 'mode', extractArgs(value, settings.defaults.modes));\r\n },\r\n\r\n c: 'color',\r\n color(value, opts) {\r\n ensureRepAssign(opts, 'colorer', extractArgs(value, settings.defaults.colorers));\r\n },\r\n\r\n mt: 'material',\r\n material(value, opts) {\r\n ensureRepAssign(opts, 'material', extractArgs(value, settings.defaults.materials));\r\n },\r\n\r\n dup(value, opts) {\r\n ensureRepList(opts);\r\n const { reps } = opts;\r\n const rep = reps[repIndex];\r\n repIndex = reps.length;\r\n reps[repIndex] = utils.deriveDeep(rep, true);\r\n },\r\n\r\n // Settings shortcuts\r\n\r\n ar: 'autoResolution',\r\n};\r\n\r\nfunction _fromArray(entries) {\r\n repIndex = 0;\r\n\r\n const opts = {};\r\n for (let i = 0, n = entries.length; i < n; ++i) {\r\n const /** string[] */ entry = entries[i];\r\n let /** string? */ key = entry[0];\r\n const /** string? */ value = entry[1];\r\n let /** function|string? */ action = actions[key];\r\n\r\n // unwind shortcuts and aliases\r\n while (_.isString(action)) {\r\n key = action;\r\n action = actions[key];\r\n }\r\n\r\n // either set a property or use specialized parser\r\n if (!action) {\r\n const adapter = adapters[typeof _.get(settings.defaults, key)];\r\n if (adapter) {\r\n _.set(opts, `settings.${key}`, adapter(value));\r\n } else {\r\n logger.warn(`Unknown option \"${key}\"`);\r\n }\r\n } else if (_.isFunction(action)) {\r\n const result = action(value, opts);\r\n if (result !== undefined) {\r\n opts[key] = result;\r\n }\r\n }\r\n }\r\n\r\n return opts;\r\n}\r\n\r\nfunction fromAttr(attr) {\r\n return _fromArray(utils.getUrlParameters(`?${attr || ''}`));\r\n}\r\n\r\nfunction fromURL(url) {\r\n return _fromArray(utils.getUrlParameters(url));\r\n}\r\n\r\nfunction _processOptsForURL(opts) {\r\n const str = [];\r\n let i = 0;\r\n utils.forInRecursive(opts, (value, key) => {\r\n str[i++] = encodeQueryComponentL2(key) + cL2Ass + encodeQueryComponentL2(value);\r\n });\r\n return str.join(cLSep);\r\n}\r\n\r\nfunction _processArgsForURL(args) {\r\n if (!_.isArray(args)) {\r\n return args;\r\n }\r\n if (args.length < 2) {\r\n return args[0];\r\n }\r\n return `${args[0]}${cOptsSep}${_processOptsForURL(args[1])}`;\r\n}\r\n\r\nfunction _processObjForURL(objOpts) {\r\n if (!objOpts || !objOpts.type) {\r\n return undefined;\r\n }\r\n let res = objOpts.type;\r\n if (_.isArray(objOpts.params) && objOpts.params.length > 0) {\r\n res += `,${objOpts.params.join(',')}`;\r\n }\r\n if (objOpts.opts) {\r\n res += cOptsSep + _processOptsForURL(objOpts.opts);\r\n }\r\n return res;\r\n}\r\n\r\nfunction toURL(opts) {\r\n const stringList = [];\r\n let idx = 0;\r\n\r\n function checkAndAdd(prefix, value) {\r\n if (value !== null && value !== undefined) {\r\n stringList[idx++] = encodeQueryComponentL1(prefix)\r\n + cL1Ass + encodeQueryComponentL1(value);\r\n }\r\n }\r\n\r\n function addReps(repList) {\r\n if (!repList) {\r\n return;\r\n }\r\n for (let i = 0, n = repList.length; i < n; ++i) {\r\n if (_.isEmpty(repList[i])) {\r\n continue;\r\n }\r\n checkAndAdd('r', i);\r\n checkAndAdd('s', repList[i].selector);\r\n checkAndAdd('m', _processArgsForURL(repList[i].mode));\r\n checkAndAdd('c', _processArgsForURL(repList[i].colorer));\r\n checkAndAdd('mt', _processArgsForURL(repList[i].material));\r\n }\r\n }\r\n\r\n function addObjects(objList) {\r\n if (!objList) {\r\n return;\r\n }\r\n for (let i = 0, n = objList.length; i < n; ++i) {\r\n checkAndAdd('o', _processObjForURL(objList[i]));\r\n }\r\n }\r\n\r\n checkAndAdd('l', opts.load);\r\n checkAndAdd('u', opts.unit);\r\n checkAndAdd('p', opts.preset);\r\n addReps(opts.reps);\r\n addObjects(opts._objects);\r\n\r\n checkAndAdd('v', opts.view);\r\n\r\n utils.forInRecursive(opts.settings, (value, key) => {\r\n // I heard these lines in the whispers of the Gods\r\n // Handle preset setting in reps\r\n if (key === 'preset') {\r\n return;\r\n }\r\n checkAndAdd(key, value);\r\n });\r\n\r\n let url = '';\r\n if (typeof window !== 'undefined') {\r\n const { location } = window;\r\n url = `${location.protocol}//${location.host}${location.pathname}`;\r\n }\r\n if (stringList.length > 0) {\r\n url += `?${stringList.join('&')}`;\r\n }\r\n\r\n return url;\r\n}\r\n\r\nfunction _processOptsForScript(opts) {\r\n const str = [];\r\n let i = 0;\r\n utils.forInRecursive(opts, (value, key) => {\r\n str[i++] = `${key}=${utils.enquoteString(value)}`;\r\n });\r\n return str.join(' ');\r\n}\r\n\r\nfunction _processArgsForScript(args) {\r\n if (!_.isArray(args)) {\r\n return args;\r\n }\r\n if (args.length < 2) {\r\n return args[0];\r\n }\r\n return `${args[0]} ${_processOptsForScript(args[1])}`;\r\n}\r\n\r\nfunction _processObjForScript(objOpts) {\r\n if (!objOpts || !objOpts.type) {\r\n return undefined;\r\n }\r\n let res = objOpts.type;\r\n if (_.isArray(objOpts.params) && objOpts.params.length > 0) {\r\n res += ` ${objOpts.params.map(utils.enquoteString).join(' ')}`;\r\n }\r\n if (objOpts.opts) {\r\n res += ` ${_processOptsForScript(objOpts.opts)}`;\r\n }\r\n return res;\r\n}\r\n\r\nfunction _processRepsForScript(rep, index) {\r\n const repString = [];\r\n let strIdx = 0;\r\n function localAdd(prefix, value) {\r\n if (value !== null && value !== undefined) {\r\n repString[strIdx++] = prefix + value;\r\n }\r\n }\r\n if (_.isEmpty(rep)) {\r\n return null;\r\n }\r\n localAdd('', index);\r\n localAdd('s=', utils.enquoteString(rep.selector));\r\n localAdd('m=', _processArgsForScript(rep.mode));\r\n localAdd('c=', _processArgsForScript(rep.colorer));\r\n localAdd('mt=', _processArgsForScript(rep.material));\r\n return repString.join(' ');\r\n}\r\n\r\nfunction toScript(opts) {\r\n const commandsList = [];\r\n let idx = 0;\r\n function checkAndAdd(command, value, saveQuotes) {\r\n if (value !== null && value !== undefined) {\r\n const quote = (typeof value === 'string' && saveQuotes) ? '\"' : '';\r\n commandsList[idx++] = `${command} ${quote}${value}${quote}`.trim();\r\n }\r\n }\r\n\r\n function addReps(repList) {\r\n if (!repList) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = repList.length; i < n; ++i) {\r\n checkAndAdd('rep', _processRepsForScript(repList[i], i));\r\n }\r\n }\r\n\r\n function addObjects(objList) {\r\n if (!objList) {\r\n return;\r\n }\r\n for (let i = 0, n = objList.length; i < n; ++i) {\r\n checkAndAdd('', _processObjForScript(objList[i]));\r\n }\r\n }\r\n\r\n checkAndAdd('set', 'autobuild false');\r\n checkAndAdd('load', opts.load, true);\r\n checkAndAdd('unit', opts.unit);\r\n checkAndAdd('preset', opts.preset);\r\n addReps(opts.reps);\r\n addObjects(opts._objects);\r\n\r\n utils.forInRecursive(opts.settings, (value, key) => {\r\n // I heard these lines in the whispers of the Gods\r\n // Handle preset setting in reps\r\n if (key === 'preset') {\r\n return;\r\n }\r\n checkAndAdd(`set ${key}`, value, true);\r\n });\r\n checkAndAdd('view', opts.view);\r\n checkAndAdd('set', 'autobuild true');\r\n return commandsList.join('\\n');\r\n}\r\n\r\nexport default {\r\n fromURL,\r\n fromAttr,\r\n adapters,\r\n toURL,\r\n toScript,\r\n};\r\n","/**\r\n * Atom measurements.\r\n *\r\n * @param {Residue} residue - (required) Residue containing the atom\r\n * @param {string} name - (required) Name, unique in the residue\r\n * @param {Element} type - (required) Chemical element reference\r\n * @param {THREE.Vector3} position - Registered coordinates\r\n *\r\n * @param {number} role - Role of atom inside monomer: Lead and wing are particularity interesting\r\n * @param {boolean} het - Non-standard residue indicator\r\n *\r\n * @param {number} serial - Serial number, unique in the model\r\n * @param {string} location - Alternative location indicator (usually space or A-Z)\r\n * @param {number} occupancy - Occupancy percentage, from 0 to 1\r\n * @param {number} temperature - Temperature\r\n * @param {number} charge - Charge\r\n *\r\n * @exports Atom\r\n * @constructor\r\n */\r\n\r\nclass Atom {\r\n constructor(residue, name, type, position, role, het, serial, location, occupancy, temperature, charge) {\r\n this.index = -1;\r\n this.residue = residue;\r\n this.name = name;\r\n this.element = type;\r\n this.position = position;\r\n this.role = role;\r\n this.mask = 1 | 0;\r\n\r\n this.het = het;\r\n\r\n this.serial = serial;\r\n this.location = (location || ' ').charCodeAt(0);\r\n this.occupancy = occupancy || 1;\r\n this.temperature = temperature;\r\n this.charge = charge;\r\n this.hydrogenCount = -1; // explicitly invalid\r\n this.radicalCount = 0;\r\n this.valence = -1; // explicitly invalid\r\n\r\n this.bonds = [];\r\n\r\n this.flags = 0x0000;\r\n if (type.name === 'H') {\r\n this.flags |= Atom.Flags.HYDROGEN;\r\n } else if (type.name === 'C') {\r\n this.flags |= Atom.Flags.CARBON;\r\n }\r\n }\r\n\r\n isHet() {\r\n return this.het;\r\n }\r\n\r\n isHydrogen() {\r\n return this.element.number === 1;\r\n }\r\n\r\n getVisualName() {\r\n const { name } = this;\r\n if (name.length > 0) {\r\n return name;\r\n }\r\n return this.element.name.trim();\r\n }\r\n\r\n forEachBond(process) {\r\n const { bonds } = this;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]);\r\n }\r\n }\r\n\r\n getFullName() {\r\n let name = '';\r\n if (this.residue !== null) {\r\n if (this.residue._chain !== null) {\r\n name += `${this.residue._chain.getName()}.`;\r\n }\r\n name += `${this.residue._sequence}.`;\r\n }\r\n name += this.name;\r\n return name;\r\n }\r\n\r\n /**\r\n * Enumeration of atom flag values.\r\n *\r\n * @enum {number}\r\n * @readonly\r\n */\r\n static Flags = {\r\n CARBON: 0x0001,\r\n // OXYGEN: 0x0002,\r\n // NITROGEN: 0x0004,\r\n HYDROGEN: 0x0008,\r\n /** Non-polar hydrogen (it is also a HYDROGEN) */\r\n NONPOLARH: 0x1008,\r\n };\r\n}\r\n\r\nexport default Atom;\r\n","class Element {\r\n constructor(number, name, fullName, weight, radius, radiusBonding, hValency) {\r\n this.number = number;\r\n this.name = name;\r\n this.fullName = fullName;\r\n this.weight = weight;\r\n this.radius = radius;\r\n this.radiusBonding = radiusBonding;\r\n this.hydrogenValency = hValency;\r\n }\r\n\r\n static Constants = {\r\n /* eslint-disable no-magic-numbers */\r\n U1: 1,\r\n Lead: 2,\r\n U2: 3,\r\n Wing: 4,\r\n U18: 18,\r\n /* eslint-enable no-magic-numbers */\r\n };\r\n\r\n static Role = {\r\n /* eslint-disable no-magic-numbers */\r\n N: Element.Constants.U1,\r\n CA: Element.Constants.Lead,\r\n C: Element.Constants.U2,\r\n O: Element.Constants.Wing,\r\n SG: Element.Constants.U18,\r\n /* eslint-enable no-magic-numbers */\r\n };\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\n static ByAtomicNumber = [\r\n /* eslint-disable no-magic-numbers */\r\n null,\r\n new Element(1, 'H', 'Hydrogen', 1.008, 1.2, 0.23, [1]),\r\n new Element(2, 'HE', 'Helium', 4.003, 1.4, 0.93, [0]),\r\n new Element(3, 'LI', 'Lithium', 6.941, 1.82, 0.68, [1]),\r\n new Element(4, 'BE', 'Beryllium', 9.012, 1.7, 0.35, [2]),\r\n new Element(5, 'B', 'Boron', 10.81, 2.08, 0.83, [3]),\r\n new Element(6, 'C', 'Carbon', 12.011, 1.95, 0.68, [4]),\r\n new Element(7, 'N', 'Nitrogen', 14.007, 1.85, 0.68, [3, 5]),\r\n new Element(8, 'O', 'Oxygen', 15.999, 1.7, 0.68, [2, 4]),\r\n new Element(9, 'F', 'Fluorine', 18.998, 1.73, 0.64, [1]),\r\n new Element(10, 'NE', 'Neon', 20.18, 1.54, 1.12, [0]),\r\n new Element(11, 'NA', 'Sodium', 22.99, 2.27, 0.97, [1]),\r\n new Element(12, 'MG', 'Magnesium', 24.305, 1.73, 1.1, [2]),\r\n new Element(13, 'AL', 'Aluminum', 26.981, 2.05, 1.35, [3]),\r\n new Element(14, 'SI', 'Silicon', 28.086, 2.1, 1.2, [4]),\r\n new Element(15, 'P', 'Phosphorus', 30.974, 2.08, 0.75, [3, 5]),\r\n new Element(16, 'S', 'Sulfur', 32.07, 2, 1.02, [2, 4, 6]),\r\n new Element(17, 'CL', 'Chlorine', 35.453, 1.97, 0.99, [1, 3, 5, 7]),\r\n new Element(18, 'AR', 'Argon', 39.948, 1.88, 1.57, [0]),\r\n new Element(19, 'K', 'Potassium', 39.1, 2.75, 1.33, [1]),\r\n new Element(20, 'CA', 'Calcium', 40.08, 1.973, 0.99, [2]),\r\n new Element(21, 'SC', 'Scandium', 44.956, 1.7, 1.44, [0]),\r\n new Element(22, 'TI', 'Titanium', 47.88, 1.7, 1.47, [0]),\r\n new Element(23, 'V', 'Vanadium', 50.941, 1.7, 1.33, [0]),\r\n new Element(24, 'CR', 'Chromium', 52, 1.7, 1.35, [0]),\r\n new Element(25, 'MN', 'Manganese', 54.938, 1.7, 1.35, [0]),\r\n new Element(26, 'FE', 'Iron', 55.847, 1.7, 1.34, [0]),\r\n new Element(27, 'CO', 'Cobalt', 58.93, 1.7, 1.33, [0]),\r\n new Element(28, 'NI', 'Nickel', 58.69, 1.63, 1.5, [0]),\r\n new Element(29, 'CU', 'Copper', 63.55, 1.4, 1.52, [0]),\r\n new Element(30, 'ZN', 'Zinc', 65.39, 1.39, 1.45, [0]),\r\n new Element(31, 'GA', 'Gallium', 69.72, 1.87, 1.22, [3]),\r\n new Element(32, 'GE', 'Germanium', 72.61, 1.7, 1.17, [4]),\r\n new Element(33, 'AS', 'Arsenic', 74.92, 1.85, 1.21, [3, 5]),\r\n new Element(34, 'SE', 'Selenium', 78.96, 1.9, 1.22, [2, 4, 6]),\r\n new Element(35, 'BR', 'Bromine', 79.9, 2.1, 1.21, [1, 3, 5, 7]),\r\n new Element(36, 'KR', 'Krypton', 83.8, 2.02, 1.91, [0]),\r\n new Element(37, 'RB', 'Rubidium', 85.47, 1.7, 1.47, [1]),\r\n new Element(38, 'SR', 'Strontium', 87.62, 1.7, 1.12, [2]),\r\n new Element(39, 'Y', 'Yttrium', 88.91, 1.7, 1.78, [0]),\r\n new Element(40, 'ZR', 'Zirconium', 91.22, 1.7, 1.56, [0]),\r\n new Element(41, 'NB', 'Niobium', 92.91, 1.7, 1.48, [0]),\r\n new Element(42, 'MO', 'Molybdenum', 95.94, 1.7, 1.47, [0]),\r\n new Element(43, 'TC', 'Technetium', 98.91, 1.7, 1.35, [0]),\r\n new Element(44, 'RU', 'Ruthenium', 101.07, 1.7, 1.4, [0]),\r\n new Element(45, 'RH', 'Rhodium', 102.91, 1.7, 1.45, [0]),\r\n new Element(46, 'PD', 'Palladium', 106.42, 1.63, 1.5, [0]),\r\n new Element(47, 'AG', 'Silver', 107.87, 1.72, 1.59, [0]),\r\n new Element(48, 'CD', 'Cadmium', 112.41, 1.58, 1.69, [0]),\r\n new Element(49, 'IN', 'Indium', 114.82, 1.93, 1.63, [3]),\r\n new Element(50, 'SN', 'Tin', 118.71, 2.17, 1.46, [2, 4]),\r\n new Element(51, 'SB', 'Antimony', 121.75, 2.2, 1.46, [3, 5]),\r\n new Element(52, 'TE', 'Tellurium', 127.6, 2.06, 1.47, [2, 4, 6]),\r\n new Element(53, 'I', 'Iodine', 126.91, 2.15, 1.4, [1, 3, 5, 7]),\r\n new Element(54, 'XE', 'Xenon', 131.29, 2.16, 1.98, [0]),\r\n new Element(55, 'CS', 'Cesium', 132.91, 1.7, 1.67, [1]),\r\n new Element(56, 'BA', 'Barium', 137.33, 1.7, 1.34, [2]),\r\n new Element(57, 'LA', 'Lanthanum', 138.91, 1.7, 1.87, [0]),\r\n new Element(58, 'CE', 'Cerium', 140.12, 1.7, 1.83, [0]),\r\n new Element(59, 'PR', 'Praseodymium', 140.91, 1.7, 1.82, [0]),\r\n new Element(60, 'ND', 'Neodymium', 144.24, 1.7, 1.81, [0]),\r\n new Element(61, 'PM', 'Promethium', 144.9, 1.7, 1.8, [0]),\r\n new Element(62, 'SM', 'Samarium', 150.36, 1.7, 1.8, [0]),\r\n new Element(63, 'EU', 'Europium', 151.96, 1.7, 1.99, [0]),\r\n new Element(64, 'GD', 'Gadolinium', 157.25, 1.7, 1.79, [0]),\r\n new Element(65, 'TB', 'Terbium', 158.93, 1.7, 1.76, [0]),\r\n new Element(66, 'DY', 'Dysprosium', 162.5, 1.7, 1.75, [0]),\r\n new Element(67, 'HO', 'Holmium', 164.93, 1.7, 1.74, [0]),\r\n new Element(68, 'ER', 'Erbium', 167.26, 1.7, 1.73, [0]),\r\n new Element(69, 'TM', 'Thulium', 168.93, 1.7, 1.72, [0]),\r\n new Element(70, 'YB', 'Ytterbium', 173.04, 1.7, 1.94, [0]),\r\n new Element(71, 'LU', 'Lutetium', 174.97, 1.7, 1.72, [0]),\r\n new Element(72, 'HF', 'Hafnium', 178.49, 1.7, 1.57, [0]),\r\n new Element(73, 'TA', 'Tantalum', 180.95, 1.7, 1.43, [0]),\r\n new Element(74, 'W', 'Tungsten', 183.85, 1.7, 1.37, [0]),\r\n new Element(75, 'RE', 'Rhenium', 186.21, 1.7, 1.35, [0]),\r\n new Element(76, 'OS', 'Osmium', 190.2, 1.7, 1.37, [0]),\r\n new Element(77, 'IR', 'Iridium', 192.22, 1.7, 1.32, [0]),\r\n new Element(78, 'PT', 'Platinum', 195.08, 1.72, 1.5, [0]),\r\n new Element(79, 'AU', 'Gold', 196.97, 1.66, 1.5, [0]),\r\n new Element(80, 'HG', 'Mercury', 200.59, 1.55, 1.7, [0]),\r\n new Element(81, 'TL', 'Thallium', 204.38, 1.96, 1.55, [1, 3]),\r\n new Element(82, 'PB', 'Lead', 207.2, 2.02, 1.54, [2, 4]),\r\n new Element(83, 'BI', 'Bismuth', 208.98, 1.7, 1.54, [3, 5]),\r\n new Element(84, 'PO', 'Polonium', 210, 1.7, 1.68, [2, 4, 6]),\r\n new Element(85, 'AT', 'Astatine', 210, 1.7, 1.7, [1, 3, 5, 7]),\r\n new Element(86, 'RN', 'Radon', 222, 1.7, 2.4, [0]),\r\n new Element(87, 'FR', 'Francium', 223, 1.7, 2, [1]),\r\n new Element(88, 'RA', 'Radium', 226.03, 1.7, 1.9, [2]),\r\n new Element(89, 'AC', 'Actinium', 227.03, 1.7, 1.88, [0]),\r\n new Element(90, 'TH', 'Thorium', 232.04, 1.7, 1.79, [0]),\r\n new Element(91, 'PA', 'Protactinium', 231.04, 1.7, 1.61, [0]),\r\n new Element(92, 'U', 'Uranium', 238.03, 1.86, 1.58, [0]),\r\n new Element(93, 'NP', 'Neptunium', 237.05, 1.7, 1.55, [0]),\r\n new Element(94, 'PU', 'Plutonium', 239.1, 1.7, 1.53, [0]),\r\n new Element(95, 'AM', 'Americium', 243.1, 1.7, 1.51, [0]),\r\n new Element(96, 'CM', 'Curium', 247.1, 1.7, 1.5, [0]),\r\n new Element(97, 'BK', 'Berkelium', 247.1, 1.7, 1.5, [0]),\r\n new Element(98, 'CF', 'Californium', 252.1, 1.7, 1.5, [0]),\r\n new Element(99, 'ES', 'Einsteinium', 252.1, 1.7, 1.5, [0]),\r\n new Element(100, 'FM', 'Fermium', 257.1, 1.7, 1.5, [0]),\r\n new Element(101, 'MD', 'Mendelevium', 256.1, 1.7, 1.5, [0]),\r\n new Element(102, 'NO', 'Nobelium', 259.1, 1.7, 1.5, [0]),\r\n new Element(103, 'LR', 'Lawrencium', 260.1, 1.7, 1.5, [0]),\r\n new Element(104, 'RF', 'Rutherfordium', 261, 1.7, 1.6, [0]),\r\n new Element(105, 'DB', 'Dubnium', 262, 1.7, 1.6, [0]),\r\n new Element(106, 'SG', 'Seaborgium', 263, 1.7, 1.6, [0]),\r\n new Element(107, 'BH', 'Bohrium', 262, 1.7, 1.6, [0]),\r\n new Element(108, 'HS', 'Hassium', 265, 1.7, 1.6, [0]),\r\n new Element(109, 'MT', 'Meitnerium', 268, 1.7, 1.6, [0]),\r\n /* eslint-enable no-magic-numbers */\r\n ];\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\n static ByName = {\r\n // Duplicate atomic numbers (isotopes)\r\n /* eslint-disable no-magic-numbers */\r\n D: new Element(1, 'D', 'Deuterium', 2.014, 1.2, 0.23, [1]),\r\n T: new Element(1, 'T', 'Tritium', 3.016, 1.2, 0.23, [1]),\r\n /* eslint-enable no-magic-numbers */\r\n\r\n // All regular elements will be added later, automatically\r\n };\r\n}\r\n\r\n(function () {\r\n const byAtomicNumber = Element.ByAtomicNumber;\r\n const byName = Element.ByName;\r\n for (let i = 0, n = byAtomicNumber.length; i < n; ++i) {\r\n const element = byAtomicNumber[i];\r\n if (element) {\r\n byName[element.name] = element;\r\n }\r\n }\r\n}());\r\n\r\n// find atom type by chemical element (or create if missing)\r\nElement.getByName = function (element) {\r\n let type = Element.ByName[element];\r\n if (!type) {\r\n type = Element.ByName[element] = new Element(0, element, 'Unknown', 0, 1.0, 0.01, [0]);\r\n }\r\n return type;\r\n};\r\n\r\nexport default Element;\r\n","const cBondTypes = {\r\n /** Was generated manually */\r\n UNKNOWN: 0,\r\n /** Simple covalent bond */\r\n COVALENT: 1,\r\n /** Aromatic bond */\r\n AROMATIC: 2,\r\n};\r\n\r\nfunction getAtomPos(atom) {\r\n return atom.position;\r\n}\r\n\r\n/**\r\n * Bond between atoms.\r\n *\r\n * @param {Atom} left - The first atom.\r\n * @param {Atom} right - The second atom.\r\n * @param {number} order - Order of current bond.\r\n * @param {number} type - Bond type.\r\n * @param {boolean} fixed - Indicator of a pre-specified connection (in contrast with guessed one).\r\n *\r\n * @exports Bond\r\n * @constructor\r\n */\r\nclass Bond {\r\n constructor(left, right, order, type, fixed) {\r\n this._left = left;\r\n this._right = right;\r\n this._fixed = fixed;\r\n this._index = -1;\r\n if (left > right) {\r\n throw new Error('In a bond atom indices must be in increasing order');\r\n }\r\n this._order = order;\r\n this._type = type;\r\n }\r\n\r\n getLeft() {\r\n return this._left;\r\n }\r\n\r\n getRight() {\r\n return this._right;\r\n }\r\n\r\n getOrder() {\r\n return this._order;\r\n }\r\n\r\n calcLength() {\r\n return this._left.position.distanceTo(this._right.position);\r\n }\r\n\r\n _forEachNeighbour(currAtom, process) {\r\n const { bonds } = currAtom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]._left !== currAtom ? bonds[i]._left : bonds[i]._right);\r\n }\r\n }\r\n\r\n forEachLevelOne(process) {\r\n const left = this._left;\r\n const right = this._right;\r\n this._forEachNeighbour(left, (atom) => {\r\n if (atom === right) {\r\n return;\r\n }\r\n process(atom);\r\n });\r\n this._forEachNeighbour(right, (atom) => {\r\n if (atom === left) {\r\n return;\r\n }\r\n process(atom);\r\n });\r\n }\r\n\r\n forEachLevelTwo(process) {\r\n // TODO refactor this piece of an art?\r\n const left = this._left;\r\n const right = this._right;\r\n const self = this;\r\n self._forEachNeighbour(left, (atom) => {\r\n if (atom === right) {\r\n return;\r\n }\r\n self._forEachNeighbour(atom, (l2Atom) => {\r\n if (l2Atom === left) {\r\n return;\r\n }\r\n process(l2Atom);\r\n });\r\n });\r\n self._forEachNeighbour(right, (atom) => {\r\n if (atom === left) {\r\n return;\r\n }\r\n self._forEachNeighbour(atom, (l2Atom) => {\r\n if (l2Atom === right) {\r\n return;\r\n }\r\n process(l2Atom);\r\n });\r\n });\r\n }\r\n\r\n _fixDir(refPoint, currDir, posGetter) {\r\n // count atoms to the right and to the left of the current plane\r\n let rightCount = 0;\r\n let leftCount = 0;\r\n const tmpVec = refPoint.clone();\r\n function checkDir(atom) {\r\n tmpVec.copy(posGetter(atom));\r\n tmpVec.sub(refPoint);\r\n const dotProd = currDir.dot(tmpVec);\r\n if (dotProd > 0) {\r\n ++rightCount;\r\n } else {\r\n ++leftCount;\r\n }\r\n }\r\n function checkCarbon(atom) {\r\n if (atom.element.name === 'C') {\r\n checkDir(atom);\r\n }\r\n }\r\n // count all atoms to the left and right of our plane, start from level 1 and carbons\r\n const stages = [\r\n [this.forEachLevelOne, checkCarbon],\r\n [this.forEachLevelOne, checkDir],\r\n [this.forEachLevelTwo, checkCarbon],\r\n [this.forEachLevelTwo, checkDir],\r\n ];\r\n\r\n for (let stageId = 0; stageId < stages.length; ++stageId) {\r\n stages[stageId][0].call(this, stages[stageId][1]);\r\n if (leftCount > rightCount) {\r\n return currDir.multiplyScalar(-1);\r\n }\r\n if (leftCount < rightCount) {\r\n return currDir;\r\n }\r\n }\r\n return currDir;\r\n }\r\n\r\n calcNormalDir(posGetter) {\r\n const left = this._left;\r\n const right = this._right;\r\n let first = left;\r\n let second = right;\r\n posGetter = posGetter === undefined ? getAtomPos : posGetter;\r\n if (left.bonds.length > right.bonds.length) {\r\n first = right;\r\n second = left;\r\n }\r\n let third = first;\r\n let maxNeibs = 0;\r\n const { bonds } = second;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n let another = bonds[i]._left;\r\n if (bonds[i]._left === second) {\r\n another = bonds[i]._right;\r\n }\r\n if (another.bonds.length > maxNeibs && another !== first) {\r\n third = another;\r\n maxNeibs = another.bonds.length;\r\n }\r\n }\r\n const secondPos = posGetter(second);\r\n const firstV = posGetter(first).clone().sub(secondPos);\r\n const secondV = posGetter(third).clone().sub(secondPos);\r\n secondV.crossVectors(firstV, secondV);\r\n if (secondV.lengthSq() < 0.0001) {\r\n secondV.set(0, 1, 0);\r\n }\r\n firstV.normalize();\r\n secondV.normalize();\r\n firstV.crossVectors(secondV, firstV);\r\n if (firstV.lengthSq() < 0.0001) {\r\n firstV.set(0, 1, 0);\r\n }\r\n firstV.normalize();\r\n return this._fixDir(secondPos, firstV, posGetter);\r\n }\r\n\r\n static BondType = cBondTypes;\r\n}\r\n\r\nBond.prototype.BondType = cBondTypes;\r\n\r\nexport default Bond;\r\n","import * as THREE from 'three';\r\nimport Atom from './Atom';\r\nimport Element from './Element';\r\n\r\nconst cNucleicControlNames = ['C3\\'', 'C3*', 'P', 'H5T', 'H3T'];\r\nconst cNucleicWing1Names = ['OP1', 'O1P'];\r\nconst cNucleicWing2Names = ['OP2', 'O2P'];\r\n\r\nconst cCylinderSource = ['C3\\'', 'C3*', 'C1', 'C1\\'', 'C1*', 'P'];\r\nconst cCylinderTarget = [{\r\n types: ['A', 'DA', 'G', 'DG'],\r\n atoms: ['N1'],\r\n}, {\r\n types: ['C', 'DC'],\r\n atoms: ['N3'],\r\n}, {\r\n types: ['T', 'DT', 'U', 'DU'],\r\n atoms: ['O4'],\r\n}];\r\n\r\n/**\r\n * Residue instance.\r\n *\r\n * @param {Chain} chain - Chain this residue belongs to.\r\n * @param {ResidueType} type - Generic residue instance type.\r\n * @param {number} sequence - Sequence ID.\r\n * @param {string} icode - One character insertion code (usually space or A-Z).\r\n *\r\n * @exports Residue\r\n * @constructor\r\n */\r\nclass Residue {\r\n constructor(chain, type, sequence, icode) {\r\n this._chain = chain;\r\n this._component = null;\r\n this._type = type;\r\n this._sequence = sequence;\r\n this._icode = icode;\r\n this._mask = 1 | 0;\r\n this._index = -1;\r\n\r\n this._atoms = [];\r\n this._secondary = null;\r\n this._firstAtom = null;\r\n this._leadAtom = null;\r\n this._wingAtom = null;\r\n this._lastAtom = null;\r\n this._controlPoint = null;\r\n this._midPoint = null;\r\n this._wingVector = null;\r\n this._cylinders = null;\r\n this._isValid = true;\r\n this._het = false;\r\n this._molecule = null;\r\n this.temperature = null;\r\n this.occupancy = null;\r\n }\r\n\r\n // Getters and setters\r\n getChain() {\r\n return this._chain;\r\n }\r\n\r\n getMolecule() {\r\n return this._molecule;\r\n }\r\n\r\n getType() {\r\n return this._type;\r\n }\r\n\r\n getSequence() {\r\n return this._sequence;\r\n }\r\n\r\n getSecondary() {\r\n return this._secondary;\r\n }\r\n\r\n getICode() {\r\n return this._icode;\r\n }\r\n\r\n // Other methods\r\n\r\n addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge) {\r\n const atom = new Atom(this, name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n const complex = this._chain.getComplex();\r\n complex.addAtom(atom);\r\n this._atoms.push(atom);\r\n this._het = this._het || het;\r\n return atom;\r\n }\r\n\r\n getAtomCount() {\r\n return this._atoms.length;\r\n }\r\n\r\n forEachAtom(process) {\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n if (process(atoms[i])) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n _findAtomByName(name) {\r\n let res = null;\r\n this.forEachAtom((atom) => {\r\n if (atom.name === name) {\r\n res = atom;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return res;\r\n }\r\n\r\n _findFirstAtomInList(names) {\r\n let res = null;\r\n for (let i = 0; i < names.length; ++i) {\r\n res = this._findAtomByName(names[i]);\r\n if (res !== null) {\r\n return res;\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n mask &= atoms[i].mask;\r\n }\r\n this._mask = mask;\r\n }\r\n\r\n getCylinderTargetList() {\r\n const type = this._type._name;\r\n for (let i = 0, n = cCylinderTarget.length; i < n; ++i) {\r\n for (let j = 0, m = cCylinderTarget[i].types.length; j < m; ++j) {\r\n if (type === cCylinderTarget[i].types[j]) {\r\n return cCylinderTarget[i].atoms;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _detectLeadWing(dst, next, getAtomPosition) {\r\n const leadAtom = this._findFirstAtomInList(cNucleicControlNames);\r\n let wingStart = this._findFirstAtomInList(cNucleicWing1Names);\r\n let wingEnd = this._findFirstAtomInList(cNucleicWing2Names);\r\n\r\n if (wingStart === null && next !== null) {\r\n wingStart = next._findFirstAtomInList(cNucleicWing1Names);\r\n }\r\n\r\n if (wingEnd === null && next !== null) {\r\n wingEnd = next._findFirstAtomInList(cNucleicWing2Names);\r\n }\r\n\r\n if (leadAtom === null || wingStart === null || wingEnd === null) {\r\n return;\r\n }\r\n\r\n dst._leadAtom = leadAtom;\r\n dst._controlPoint = getAtomPosition(leadAtom);\r\n dst._wingVector = getAtomPosition(wingEnd).clone().sub(getAtomPosition(wingStart));\r\n dst._isValid = true;\r\n\r\n const cylSource = this._findFirstAtomInList(cCylinderSource);\r\n const targetList = this.getCylinderTargetList();\r\n const cylTarget = targetList !== null ? this._findFirstAtomInList(targetList) : null;\r\n if (cylSource === null || cylTarget === null) {\r\n return;\r\n }\r\n dst._cylinders = [getAtomPosition(cylSource), getAtomPosition(cylTarget)];\r\n }\r\n\r\n calcWing(prevLeadPos, currLeadPos, prevWingPos, prevWing) {\r\n const vectorA = currLeadPos.clone().sub(prevLeadPos);\r\n const vectorB = prevLeadPos.clone().sub(prevWingPos);\r\n vectorB.crossVectors(vectorA, vectorB);\r\n vectorB.crossVectors(vectorA, vectorB).normalize();\r\n if (prevWing !== null && prevWing.length() > 0.0001) {\r\n const needToNegate = vectorB.length() > 0.0001 && Math.abs(prevWing.angleTo(vectorB)) > Math.PI / 2;\r\n if (needToNegate) {\r\n vectorB.negate();\r\n }\r\n }\r\n return vectorB;\r\n }\r\n\r\n _innerFinalize(prevRes, prev, nextRes, dst, chainAsNucleic, getAtomPosition) {\r\n const bFirstInChain = prev === null;\r\n\r\n const lp = getAtomPosition(this._leadAtom);\r\n const currLeadPos = new THREE.Vector3(lp.x, lp.y, lp.z);\r\n if (chainAsNucleic) {\r\n this._detectLeadWing(dst, nextRes, getAtomPosition);\r\n return;\r\n }\r\n\r\n if (bFirstInChain) { // for first one in chain\r\n dst._midPoint = getAtomPosition(this._firstAtom).clone();\r\n } else {\r\n const prevLeadPos = prev._controlPoint; // lead point of previous monomer\r\n dst._midPoint = prevLeadPos.clone().lerp(currLeadPos, 0.5);\r\n dst._wingVector = this.calcWing(prevLeadPos, currLeadPos, getAtomPosition(prevRes._wingAtom), prev._wingVector);\r\n }\r\n dst._controlPoint = currLeadPos;\r\n }\r\n\r\n _finalize2(prev, next, asNucleic) {\r\n // Should be called AFTER first finalize\r\n this._innerFinalize(prev, prev, next, this, asNucleic, (atom) => atom.position);\r\n }\r\n\r\n isConnected(anotherResidue) {\r\n if (this._chain !== anotherResidue._chain) {\r\n return false;\r\n }\r\n if (this === anotherResidue) {\r\n return true;\r\n }\r\n let res = false;\r\n this.forEachAtom((atom) => {\r\n const { bonds } = atom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n const bond = bonds[i];\r\n if (bond._left.residue === anotherResidue || bond._right.residue === anotherResidue) {\r\n res = true;\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n return res;\r\n }\r\n\r\n _finalize() {\r\n const self = this;\r\n [this._firstAtom] = this._atoms;\r\n this._lastAtom = this._atoms[this._atoms.length - 1];\r\n\r\n this._leadAtom = null;\r\n this._wingAtom = null;\r\n\r\n let tempCount = 0;\r\n let temperature = 0; // average temperature\r\n let occupCount = 0;\r\n let occupancy = 0; // average occupancy\r\n this.forEachAtom((a) => {\r\n if (self._leadAtom === null) {\r\n if (a.role === Element.Constants.Lead) {\r\n self._leadAtom = a;\r\n }\r\n }\r\n if (self._wingAtom === null) {\r\n if (a.role === Element.Constants.Wing) {\r\n self._wingAtom = a;\r\n }\r\n }\r\n if (a.temperature) {\r\n temperature += a.temperature;\r\n tempCount++;\r\n }\r\n if (a.occupancy) {\r\n occupancy += a.occupancy;\r\n occupCount++;\r\n }\r\n return (self._leadAtom !== null && self._wingAtom !== null);\r\n });\r\n\r\n if (tempCount > 0) {\r\n this.temperature = temperature / tempCount;\r\n }\r\n if (occupCount > 0) {\r\n this.occupancy = occupancy / occupCount;\r\n }\r\n\r\n // Still try to make monomer look valid\r\n if (this._leadAtom === null || this._wingAtom === null) {\r\n this._isValid = false;\r\n }\r\n if (this._leadAtom === null) {\r\n this._leadAtom = this._firstAtom;\r\n }\r\n if (this._wingAtom === null) {\r\n this._wingAtom = this._lastAtom;\r\n }\r\n }\r\n}\r\n\r\nexport default Residue;\r\n","/**\r\n * Residue type.\r\n *\r\n * Predefined acid or created with HET, HETNAM, etc.\r\n *\r\n * @param {string} name - Short name, either standard (ALA, MET, etc.) or non-standard one.\r\n * @param {string} fullName - Full residue name.\r\n * @param {string} letterCode - 1-letter symbol.\r\n *\r\n * @exports ResidueType\r\n * @constructor\r\n */\r\nclass ResidueType {\r\n constructor(name, fullName, letterCode) {\r\n this._name = name;\r\n this._fullName = fullName;\r\n this.letterCode = letterCode;\r\n this.flags = 0x0000;\r\n }\r\n\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\n static StandardTypes = {\r\n /* eslint-disable no-magic-numbers */\r\n ALA: new ResidueType('ALA', 'Alanine', 'A'),\r\n ARG: new ResidueType('ARG', 'Arginine', 'R'),\r\n ASN: new ResidueType('ASN', 'Asparagine', 'N'),\r\n ASP: new ResidueType('ASP', 'Aspartic Acid', 'D'),\r\n CYS: new ResidueType('CYS', 'Cysteine', 'C'),\r\n GLN: new ResidueType('GLN', 'Glutamine', 'Q'),\r\n GLU: new ResidueType('GLU', 'Glutamic Acid', 'E'),\r\n GLY: new ResidueType('GLY', 'Glycine', 'G'),\r\n HIS: new ResidueType('HIS', 'Histidine', 'H'),\r\n ILE: new ResidueType('ILE', 'Isoleucine', 'I'),\r\n LEU: new ResidueType('LEU', 'Leucine', 'L'),\r\n LYS: new ResidueType('LYS', 'Lysine', 'K'),\r\n MET: new ResidueType('MET', 'Methionine', 'M'),\r\n PHE: new ResidueType('PHE', 'Phenylalanine', 'F'),\r\n PRO: new ResidueType('PRO', 'Proline', 'P'),\r\n PYL: new ResidueType('PYL', 'Pyrrolysine', 'O'),\r\n SEC: new ResidueType('SEC', 'Selenocysteine', 'U'),\r\n SER: new ResidueType('SER', 'Serine', 'S'),\r\n THR: new ResidueType('THR', 'Threonine', 'T'),\r\n TRP: new ResidueType('TRP', 'Tryptophan', 'W'),\r\n TYR: new ResidueType('TYR', 'Tyrosine', 'Y'),\r\n VAL: new ResidueType('VAL', 'Valine', 'V'),\r\n A: new ResidueType('A', 'Adenine', 'A'),\r\n C: new ResidueType('C', 'Cytosine', 'C'),\r\n G: new ResidueType('G', 'Guanine', 'G'),\r\n I: new ResidueType('I', 'Inosine', 'I'),\r\n T: new ResidueType('T', 'Thymine', 'T'),\r\n U: new ResidueType('U', 'Uracil', 'U'),\r\n DA: new ResidueType('DA', 'Adenine', 'A'),\r\n DC: new ResidueType('DC', 'Cytosine', 'C'),\r\n DG: new ResidueType('DG', 'Guanine', 'G'),\r\n DI: new ResidueType('DI', 'Inosine', 'I'),\r\n DT: new ResidueType('DT', 'Thymine', 'T'),\r\n DU: new ResidueType('DU', 'Uracil', 'U'),\r\n '+A': new ResidueType('+A', 'Adenine', 'A'),\r\n '+C': new ResidueType('+C', 'Cytosine', 'C'),\r\n '+G': new ResidueType('+G', 'Guanine', 'G'),\r\n '+I': new ResidueType('+I', 'Inosine', 'I'),\r\n '+T': new ResidueType('+T', 'Thymine', 'T'),\r\n '+U': new ResidueType('+U', 'Uracil', 'U'),\r\n WAT: new ResidueType('WAT', 'Water', ''),\r\n H2O: new ResidueType('H2O', 'Water', ''),\r\n HOH: new ResidueType('HOH', 'Water', ''),\r\n DOD: new ResidueType('DOD', 'Water', ''),\r\n UNK: new ResidueType('UNK', 'Unknown', ''),\r\n UNL: new ResidueType('UNL', 'Unknown Ligand', ''),\r\n /* eslint-enable no-magic-numbers */\r\n };\r\n\r\n /**\r\n * Enumeration of residue flag values.\r\n *\r\n * @enum {number}\r\n * @readonly\r\n */\r\n static Flags = {\r\n // Amino acids\r\n /** Amino acid residue */\r\n PROTEIN: 0x0001,\r\n /** Basic amino acid residue */\r\n BASIC: 0x0002,\r\n /** Acidic amino acid residue */\r\n ACIDIC: 0x0004,\r\n /** Polar uncharged side chain amino acid residue */\r\n POLAR: 0x0008,\r\n /** Non-polar hydrophobic side chain amino acid residue */\r\n NONPOLAR: 0x0010,\r\n /** Aromatic amino acid residue */\r\n AROMATIC: 0x0020,\r\n\r\n // Nucleic acids\r\n\r\n /** Nucleic residue */\r\n NUCLEIC: 0x0100,\r\n /** Purine nucleic residue */\r\n PURINE: 0x0200,\r\n /** Pyrimidine nucleic residue */\r\n PYRIMIDINE: 0x0400,\r\n /** DNA */\r\n DNA: 0x0800,\r\n /** RNA */\r\n RNA: 0x1000,\r\n\r\n /** Water */\r\n WATER: 0x10000,\r\n };\r\n}\r\n\r\n// Flag combinations\r\nfunction _addFlag(flag, list) {\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n const res = ResidueType.StandardTypes[list[i]];\r\n if (res) {\r\n res.flags |= flag;\r\n }\r\n }\r\n}\r\n\r\nconst { Flags } = ResidueType;\r\n_addFlag(Flags.WATER, ['WAT', 'H2O', 'HOH', 'DOD']);\r\n\r\n_addFlag(Flags.PROTEIN, [\r\n 'ALA', 'ARG', 'ASN', 'ASP', 'CYS', 'GLY', 'GLU', 'GLN', 'HIS', 'ILE',\r\n 'LEU', 'LYS', 'MET', 'PHE', 'PRO', 'PYL', 'SEC', 'SER', 'THR', 'TRP',\r\n 'TYR', 'VAL',\r\n]);\r\n_addFlag(Flags.BASIC, ['ARG', 'HIS', 'LYS']);\r\n_addFlag(Flags.ACIDIC, ['ASP', 'GLU']);\r\n_addFlag(Flags.POLAR, ['ASN', 'CYS', 'GLN', 'SER', 'THR', 'TYR']);\r\n_addFlag(Flags.NONPOLAR, ['ALA', 'ILE', 'LEU', 'MET', 'PHE', 'PRO', 'TRP', 'VAL', 'GLY']);\r\n_addFlag(Flags.AROMATIC, ['PHE', 'TRP', 'TYR']);\r\n\r\n_addFlag(Flags.NUCLEIC, [\r\n 'A', 'G', 'I', 'DA', 'DG', 'DI', '+A', '+G', '+I',\r\n 'C', 'T', 'U', 'DC', 'DT', 'DU', '+C', '+T', '+U',\r\n]);\r\n_addFlag(Flags.PURINE, ['A', 'G', 'I', 'DA', 'DG', 'DI', '+A', '+G', '+I']);\r\n_addFlag(Flags.PYRIMIDINE, ['C', 'T', 'U', 'DC', 'DT', 'DU', '+C', '+T', '+U']);\r\n_addFlag(Flags.DNA, ['DA', 'DG', 'DI', 'DC', 'DT', 'DU']);\r\n_addFlag(Flags.RNA, ['A', 'G', 'I', 'C', 'T', 'U']);\r\n// Table of kdHydrophobicity\r\nconst hydro = {\r\n ILE: 4.5,\r\n VAL: 4.2,\r\n LEU: 3.8,\r\n PHE: 2.8,\r\n CYS: 2.5,\r\n MET: 1.9,\r\n ALA: 1.8,\r\n GLY: -0.4,\r\n THR: -0.7,\r\n SER: -0.8,\r\n TRP: -0.9,\r\n TYR: -1.3,\r\n PRO: -1.6,\r\n HIS: -3.2,\r\n GLU: -3.5,\r\n GLN: -3.5,\r\n ASP: -3.5,\r\n ASN: -3.5,\r\n LYS: -3.9,\r\n ARG: -4.5,\r\n};\r\n\r\nfunction _addParam(param, list) {\r\n const keys = Object.keys(list);\r\n for (let i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n const value = list[key];\r\n ResidueType.StandardTypes[key][param] = value;\r\n }\r\n}\r\n\r\n_addParam('hydrophobicity', hydro);\r\n\r\nexport default ResidueType;\r\n","import * as THREE from 'three';\r\nimport Residue from './Residue';\r\nimport ResidueType from './ResidueType';\r\n\r\n/**\r\n * Residues in chain are either amino acid either nucleic acid (and water)\r\n * There might be some modified/mutated residues, which type could not be determined by their name (nucleic or amino); In this\r\n * case firstly program definites the chain type (by well-known residues) and then definites modified/mutated residues\r\n */\r\nconst ChainType = {\r\n UNKNOWN: 0,\r\n PROTEIN: 1,\r\n NUCLEIC: 2,\r\n};\r\n\r\n/**\r\n * Residue chain.\r\n *\r\n * @param {Complex} complex - Molecular complex this chain belongs to.\r\n * @param {string} name - One character identifier (usually space, A-Z, 0-9, or a-z).\r\n *\r\n * @exports Chain\r\n * @constructor\r\n */\r\nclass Chain {\r\n constructor(complex, name) {\r\n this._complex = complex;\r\n this._name = name;\r\n this._mask = 1 | 0;\r\n this._index = -1;\r\n this._residues = [];\r\n\r\n this.minSequence = Number.POSITIVE_INFINITY;\r\n this.maxSequence = Number.NEGATIVE_INFINITY;\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getResidues() {\r\n return this._residues;\r\n }\r\n\r\n _determineType() {\r\n const residues = this._residues;\r\n\r\n const { PROTEIN, NUCLEIC } = ResidueType.Flags;\r\n\r\n this.type = ChainType.UNKNOWN;\r\n\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const { flags } = residues[i]._type;\r\n\r\n if ((flags & NUCLEIC) !== 0) {\r\n this.type = ChainType.NUCLEIC;\r\n break;\r\n } else if ((flags & PROTEIN) !== 0) {\r\n this.type = ChainType.PROTEIN;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Finds thre residue with specified sequence number and inserion code\r\n * @param {Number} seqNum sequence number\r\n * @param {string} iCode insertion code\r\n * @returns {*} Residue or null if not found\r\n */\r\n findResidue(seqNum, iCode) {\r\n const residues = this._residues;\r\n\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const res = residues[i];\r\n if (res._sequence === seqNum && res._icode === iCode) {\r\n return [res, i];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _finalize() {\r\n this._determineType();\r\n\r\n const residues = this._residues;\r\n\r\n let prev = null;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const next = (i + 1 < n) ? residues[i + 1] : null;\r\n const curr = residues[i];\r\n // TODO: skip invalid residues\r\n if (1 /* curr._isValid */) { // eslint-disable-line no-constant-condition\r\n curr._finalize2(prev, next, this.type === ChainType.NUCLEIC);\r\n prev = curr;\r\n }\r\n }\r\n\r\n // fix very first wing\r\n if (residues.length > 1 && residues[1]._wingVector) {\r\n const p = residues[1]._wingVector;\r\n residues[0]._wingVector = new THREE.Vector3(p.x, p.y, p.z);\r\n } else if (residues.length > 0) {\r\n residues[0]._wingVector = new THREE.Vector3(1, 0, 0);\r\n }\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const residues = this._residues;\r\n let prev = null;\r\n let prevData = null;\r\n const frameRes = frameData._residues;\r\n const n = residues.length;\r\n function getAtomPos(atom) {\r\n return frameData.getAtomPos(atom.index);\r\n }\r\n\r\n for (let i = 0; i < n; ++i) {\r\n const curr = residues[i];\r\n const currData = frameRes[curr._index];\r\n const nextRes = (i + 1 < n) ? residues[i + 1] : null;\r\n curr._innerFinalize(prev, prevData, nextRes, currData, this.type === ChainType.NUCLEIC, getAtomPos);\r\n prev = curr;\r\n prevData = currData;\r\n }\r\n\r\n frameRes[residues[0]._index]._wingVector = n > 1\r\n ? frameRes[residues[1]._index]._wingVector\r\n : new THREE.Vector3(1, 0, 0);\r\n }\r\n\r\n /**\r\n * Create a new residue.\r\n *\r\n * @param {string} name - Residue name.\r\n * @param {number} sequence - Residue sequence number.\r\n * @param {string} iCode - Insertion code.\r\n * @returns {Residue} - Newly created residue instance.\r\n */\r\n addResidue(name, sequence, iCode) {\r\n let type = this._complex.getResidueType(name);\r\n if (type === null) {\r\n type = this._complex.addResidueType(name);\r\n }\r\n const residue = new Residue(this, type, sequence, iCode);\r\n this._complex.addResidue(residue);\r\n this._residues.push(residue);\r\n\r\n if (type.flags & (ResidueType.Flags.NUCLEIC | ResidueType.Flags.PROTEIN)) {\r\n if (this.maxSequence < sequence) {\r\n this.maxSequence = sequence;\r\n }\r\n if (this.minSequence > sequence) {\r\n this.minSequence = sequence;\r\n }\r\n }\r\n\r\n return residue;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residues.length;\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n mask &= residues[i]._mask;\r\n }\r\n this._mask = mask;\r\n }\r\n}\r\n\r\nexport default Chain;\r\n","import Residue from './Residue';\r\n\r\n/** An element of protein secondary structure. */\r\nclass StructuralElement {\r\n /**\r\n * Create a secondary structural element of the specified type.\r\n *\r\n * @param {StructuralElement.Type} type Secondary structure type.\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n */\r\n constructor(type, init, term) {\r\n /**\r\n * Secondary structure type.\r\n * @type {StructuralElement.Type}\r\n */\r\n this.type = type;\r\n /**\r\n * Generic secondary structure type.\r\n * @type {StructuralElement.Generic}\r\n */\r\n this.generic = StructuralElement.genericByType[this.type] || 'loop';\r\n /**\r\n * Initial residue.\r\n * @type Residue\r\n */\r\n this.init = init;\r\n /**\r\n * Terminal residue.\r\n * @type Residue\r\n */\r\n this.term = term;\r\n }\r\n\r\n /**\r\n * An internal method for making a final pass over the complex to set all required references.\r\n *\r\n * **NOTE:** I'm sorry. It's a legacy code waiting for refactoring.\r\n * Just copying it as-is right now and hoping for the best.\r\n *\r\n * @param {object} serialAtomMap A dictionary of atoms\r\n * @param {object} residueHash A dictionary of hashed residues to check.\r\n * @param {Complex} complex The molecular complex this element belongs to.\r\n */\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n if (this.init instanceof Residue && this.term instanceof Residue) {\r\n return;\r\n }\r\n\r\n // Link all intermediate residues to this structural element\r\n const start = complex.splitUnifiedSerial(this.init);\r\n const end = complex.splitUnifiedSerial(this.term);\r\n for (let chainId = start.chain; chainId <= end.chain; chainId++) {\r\n for (let serialId = start.serial; serialId <= end.serial; serialId++) {\r\n for (let { iCode } = start; iCode <= end.iCode; iCode++) {\r\n const hashCode = complex.getUnifiedSerial(chainId, serialId, iCode);\r\n if (residueHash[hashCode]) {\r\n residueHash[hashCode]._secondary = this;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Replace unfined serials by objects\r\n this.init = residueHash[this.init];\r\n this.term = residueHash[this.term];\r\n }\r\n}\r\n\r\n/**\r\n * Specific type of a secondary structural element.\r\n * @enum {string}\r\n * @see StructuralElement.Generic\r\n */\r\nStructuralElement.Type = {\r\n /** A strand of a [beta-sheet](https://en.wikipedia.org/wiki/Beta_sheet). */\r\n STRAND: 'E',\r\n /** An isolated beta-bridge (too small for a beta-sheet). */\r\n BRIDGE: 'B',\r\n\r\n /** A [3/10 helix](https://en.wikipedia.org/wiki/310_helix) (hydrogen bonding is 3 residues apart). */\r\n HELIX_310: 'G',\r\n /** An [alpha-helix](https://en.wikipedia.org/wiki/Alpha_helix) (hydrogen bonding is 4 residues apart). */\r\n HELIX_ALPHA: 'H',\r\n /** A [pi-helix](https://en.wikipedia.org/wiki/Pi_helix) (hydrogen bonding is 5 residues apart). */\r\n HELIX_PI: 'I',\r\n /** A generic helix of unspecified bonding distance. */\r\n HELIX: 'X',\r\n\r\n /** An isolated 3/10-like helical turn. */\r\n TURN_310: '3',\r\n /** An isolated alpha-like helical turn. */\r\n TURN_ALPHA: '4',\r\n /** An isolated pi-like helical turn. */\r\n TURN_PI: '5',\r\n /** An isolated helical [turn](https://en.wikipedia.org/wiki/Turn_(biochemistry)) of unspecified bonding distance. */\r\n TURN: 'T',\r\n\r\n /** A bend (a region of high curvature). */\r\n BEND: 'S',\r\n /** Just a protein section with no particular conformation. */\r\n COIL: 'C',\r\n};\r\n\r\n/**\r\n * Generic type of a secondary structural element.\r\n * @enum {string}\r\n * @see StructuralElement.Type\r\n */\r\nStructuralElement.Generic = {\r\n /** A strand of a sheet. */\r\n STRAND: 'strand',\r\n /** A helix. */\r\n HELIX: 'helix',\r\n /** Just a protein section with no particular conformation. */\r\n LOOP: 'loop',\r\n};\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\nconst StructuralElementGeneric = StructuralElement.Generic;\r\n\r\n/**\r\n * A mapping from specific types to generic ones.\r\n * @type {Object}\r\n */\r\nStructuralElement.genericByType = {\r\n [StructuralElementType.STRAND]: StructuralElementGeneric.STRAND,\r\n [StructuralElementType.HELIX_310]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX_ALPHA]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX_PI]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX]: StructuralElementGeneric.HELIX,\r\n};\r\n\r\nexport default StructuralElement;\r\n","import StructuralElement from './StructuralElement';\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\nexport const typeByPDBHelixClass = {\r\n 1: StructuralElementType.HELIX_ALPHA,\r\n 3: StructuralElementType.HELIX_PI,\r\n 5: StructuralElementType.HELIX_310,\r\n};\r\n\r\n/**\r\n * Helical secondary structure of a protein.\r\n * @extends StructuralElement\r\n */\r\nclass Helix extends StructuralElement {\r\n /**\r\n * Create a helix.\r\n *\r\n * @param {number} helixClass A helix class according to the\r\n * [PDB Format](http://www.wwpdb.org/documentation/file-format-content/format33/sect5.html#HELIX).\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n * @param {number} serial Serial number of the helix (see PDB Format).\r\n * @param {string} name Helix identifier (see PDB Format).\r\n * @param {string} comment Comment about this helix (see PDB Format).\r\n * @param {number} length Length of this helix, in residues (see PDB Format).\r\n */\r\n constructor(helixClass, init, term, serial, name, comment, length) {\r\n super(typeByPDBHelixClass[helixClass] || StructuralElement.Type.HELIX, init, term);\r\n\r\n /**\r\n * Serial number of the helix (see PDB Format).\r\n * @type {number}\r\n */\r\n this.serial = serial;\r\n /**\r\n * Helix identifier (see PDB Format).\r\n * @type {string}\r\n */\r\n this.name = name;\r\n /**\r\n * Comment about this helix (see PDB Format).\r\n * @type {string}\r\n */\r\n this.comment = comment;\r\n /**\r\n * Length of this helix, in residues (see PDB Format).\r\n * @type {number}\r\n */\r\n this.length = length;\r\n }\r\n}\r\n\r\nexport default Helix;\r\n","import StructuralElement from './StructuralElement';\r\n\r\n/**\r\n * A single strand of a sheet in a protein secondary structure.\r\n * @extends StructuralElement\r\n */\r\nclass Strand extends StructuralElement {\r\n /**\r\n * Create a strand.\r\n *\r\n * @param {Sheet} sheet Parent sheet this strand belongs to.\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n * @param {number} sense Sense of strand with respect to previous strand in the sheet.\r\n * - 0 if the first strand,\r\n * - 1 if parallel, and\r\n * - -1 if anti-parallel.\r\n * @param {Atom} atomCur Atom in current strand (see PDB Format).\r\n * @param {Atom} atomPrev Atom in previous strand (see PDB Format).\r\n */\r\n constructor(sheet, init, term, sense, atomCur, atomPrev) {\r\n super(StructuralElement.Type.STRAND, init, term);\r\n\r\n /**\r\n * Parent sheet this strand belongs to.\r\n * @type {Sheet}\r\n */\r\n this.sheet = sheet;\r\n /**\r\n * Sense of strand with respect to previous strand in the sheet.\r\n * - 0 if the first strand,\r\n * - 1 if parallel, and\r\n * - -1 if anti-parallel.\r\n * @type {number}\r\n */\r\n this.sense = sense;\r\n /**\r\n * Atom in current strand (see PDB Format).\r\n * @type {Atom}\r\n */\r\n this.atomCur = atomCur;\r\n /**\r\n * Atom in previous strand (see PDB Format).\r\n * @type {Atom}\r\n */\r\n this.atomPrev = atomPrev;\r\n }\r\n\r\n /**\r\n * An internal method for making a final pass over the complex to set all required references.\r\n *\r\n * **NOTE:** I'm sorry. It's a legacy code waiting for refactoring.\r\n * Just copying it as-is right now and hoping for the best.\r\n *\r\n * @param {object} serialAtomMap A dictionary of atoms\r\n * @param {object} residueHash A dictionary of hashed residues to check.\r\n * @param {Complex} complex The molecular complex this element belongs to.\r\n *\r\n * @override\r\n */\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n super._finalize(serialAtomMap, residueHash, complex);\r\n\r\n let as = this.atomCur;\r\n if (as !== null && !Number.isNaN(as)) {\r\n this.atomCur = serialAtomMap[as];\r\n }\r\n as = this.atomPrev;\r\n if (as !== null && !Number.isNaN(as)) {\r\n this.atomPrev = serialAtomMap[as];\r\n }\r\n }\r\n}\r\n\r\nexport default Strand;\r\n","import Strand from './Strand';\r\n\r\n/**\r\n * Sheet secondary structure of a protein.\r\n *\r\n * @param {string} name -\r\n * @param {number} width -\r\n *\r\n * @exports Sheet\r\n * @constructor\r\n */\r\nclass Sheet {\r\n constructor(name, width) {\r\n this._name = name;\r\n this._width = width;\r\n\r\n this._strands = [];\r\n }\r\n\r\n // Getters and setters\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getWidth() {\r\n return this._width;\r\n }\r\n\r\n addStrand(strand) {\r\n this._strands.push(strand);\r\n this._width = this._strands.length;\r\n }\r\n\r\n addEmptyStrand() {\r\n this._strands.push(new Strand(null, null, null, null, null, null));\r\n }\r\n\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n const s = this._strands;\r\n for (let i = 0, n = s.length; i < n; ++i) {\r\n s[i]._finalize(serialAtomMap, residueHash, complex);\r\n }\r\n if (!this._width) {\r\n this._width = s.length;\r\n }\r\n if (s.length !== this._width) {\r\n throw new Error(`Sheet ${this._name} is inconsistent.`);\r\n }\r\n }\r\n}\r\n\r\nexport default Sheet;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Atom measurements.\r\n *\r\n * @param {string} id - SGroup id\r\n * @param {string} name - Name of the group\r\n * @param {THREE.Vector3} position - Registered coordinates\r\n * @param {array} atoms - Atoms group consists of\r\n * @param {object} saveNode - XML node from file for saving\r\n *\r\n * @exports SGroup\r\n * @constructor\r\n */\r\nclass SGroup {\r\n constructor(id, name, position, atoms, saveNode) {\r\n this._id = id;\r\n this._name = name;\r\n this._position = position || new THREE.Vector3();\r\n this._atoms = atoms || [];\r\n this._charge = 0; // default group charge\r\n this._repeat = 1; // how many times group repeated: always > 0\r\n this._center = null;\r\n this.xmlNodeRef = saveNode || null;\r\n }\r\n\r\n /**\r\n * Get atom full name.\r\n * @returns {string} Atom full name.\r\n */\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getPosition() {\r\n return this._position;\r\n }\r\n\r\n getCentralPoint() {\r\n return this._center;\r\n }\r\n\r\n _rebuildSGroupOnAtomChange() {\r\n const nLimon = 100000000;\r\n if (this._center === null) {\r\n return; // nothing to do if we are not relative\r\n }\r\n\r\n const bLow = new THREE.Vector3(nLimon, nLimon, nLimon);\r\n const bHight = new THREE.Vector3(-nLimon, -nLimon, -nLimon);\r\n for (let j = 0, n = this._atoms.length; j < n; j++) {\r\n const aPos = this._atoms[j].position;\r\n bLow.set(Math.min(bLow.x, aPos.x), Math.min(bLow.y, aPos.y), Math.min(bLow.z, aPos.z));\r\n bHight.set(Math.max(bHight.x, aPos.x), Math.max(bHight.y, aPos.y), Math.max(bHight.z, aPos.z));\r\n }\r\n this._center.addVectors(bLow, bHight);\r\n this._center.multiplyScalar(0.5);\r\n }\r\n}\r\n\r\nexport default SGroup;\r\n","import utils from '../../utils';\r\n\r\n//----------------------------------------------------------------------------\r\nclass Range {\r\n constructor(min, max) {\r\n this.min = min;\r\n this.max = typeof max === 'undefined' ? min : max;\r\n }\r\n\r\n includes(value) {\r\n return this.min <= value && value <= this.max;\r\n }\r\n\r\n toString() {\r\n const { min, max } = this;\r\n return min === max ? String(min) : [min, max].join(':');\r\n }\r\n\r\n toJSON() {\r\n return [this.min, this.max];\r\n }\r\n}\r\n\r\n// ////////////////////////////////////////////////////////////////////////////\r\n\r\nclass List {\r\n constructor(arg) {\r\n if (arg instanceof this.constructor) {\r\n // delegate construction to a different class\r\n // eslint-disable-next-line no-constructor-return\r\n return arg;\r\n }\r\n if (arg instanceof Array) {\r\n this._values = arg.slice(0);\r\n } else if (arg) {\r\n this._values = [arg];\r\n } else {\r\n this._values = [];\r\n }\r\n }\r\n\r\n append(value) {\r\n const values = this._values;\r\n values[values.length] = value;\r\n return this;\r\n }\r\n\r\n remove(value) {\r\n const values = this._values;\r\n const index = values.indexOf(value);\r\n if (index >= 0) {\r\n values.splice(index, 1);\r\n }\r\n return this;\r\n }\r\n\r\n toString() {\r\n return this._values.join(',');\r\n }\r\n\r\n toJSON() {\r\n const values = this._values;\r\n const result = [];\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n const value = values[i];\r\n result[i] = value.toJSON ? value.toJSON() : value;\r\n }\r\n return result;\r\n }\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n\r\nclass RangeList extends List {\r\n includes(value) {\r\n const list = this._values;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n if (list[i].includes(value)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n\r\nconst valuesArray = [];\r\n\r\nclass ValueList extends List {\r\n constructor(arg, upperOnly) {\r\n const list = super(arg);\r\n if (upperOnly) {\r\n this.upperOnly = true;\r\n const values = list._values;\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n const value = values[i];\r\n if (typeof value === 'string') {\r\n values[i] = value.toUpperCase();\r\n }\r\n }\r\n } else {\r\n this.upperOnly = false;\r\n }\r\n // return constructed object\r\n // eslint-disable-next-line no-constructor-return\r\n return list;\r\n }\r\n\r\n includes(value) {\r\n // we do not convert to upper case here for perfomance reasons\r\n // if list is upper case only, value must be converted before it is sent up to here\r\n return this._values.indexOf(value) !== -1;\r\n }\r\n\r\n toString() {\r\n // Quote values that are not correct identifiers\r\n const values = this._values;\r\n valuesArray.length = 0;\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n valuesArray[i] = utils.correctSelectorIdentifier(String(values[i]));\r\n }\r\n return valuesArray.join(',');\r\n }\r\n\r\n _validate(value) {\r\n return (this.upperOnly && typeof value === 'string') ? value.toUpperCase() : value;\r\n }\r\n\r\n append(value) {\r\n super.append(this._validate(value));\r\n return this;\r\n }\r\n\r\n remove(value) {\r\n super.remove(this._validate(value));\r\n return this;\r\n }\r\n}\r\n\r\nexport {\r\n Range,\r\n List,\r\n RangeList,\r\n ValueList,\r\n};\r\n","import { RangeList, ValueList } from './selectArgs';\r\n\r\n/** Base class for atom selectors. */\r\nclass Selector {\r\n toString() {\r\n return this.keyword;\r\n }\r\n\r\n toJSON() {\r\n return [this.name];\r\n }\r\n}\r\n\r\nSelector.prototype.name = 'Error';\r\nSelector.prototype.keyword = 'error';\r\n\r\n/** Base class for list-based atom selectors. */\r\nclass ListSelector extends Selector {\r\n constructor(list) {\r\n super();\r\n this.list = list;\r\n }\r\n\r\n toString() {\r\n return `${this.keyword} ${this.list}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.list.toJSON()];\r\n }\r\n}\r\n\r\nclass RangeListSelector extends ListSelector {\r\n constructor(arg) {\r\n super(new RangeList(arg));\r\n }\r\n}\r\n\r\nclass ValueListSelector extends ListSelector {\r\n constructor(arg, caseSensitive) {\r\n super(new ValueList(arg, !caseSensitive));\r\n }\r\n}\r\n\r\nclass NoneSelector extends Selector {\r\n includesAtom(_atom) {\r\n return false;\r\n }\r\n}\r\n\r\nNoneSelector.prototype.name = 'None';\r\nNoneSelector.prototype.keyword = 'none';\r\n\r\nclass AllSelector extends Selector {\r\n includesAtom(_atom) {\r\n return true;\r\n }\r\n}\r\n\r\nAllSelector.prototype.name = 'All';\r\nAllSelector.prototype.keyword = 'all';\r\n\r\nexport {\r\n Selector,\r\n ListSelector,\r\n RangeListSelector,\r\n ValueListSelector,\r\n NoneSelector,\r\n AllSelector,\r\n};\r\n","import { Selector, NoneSelector } from './selectorsBase';\r\n\r\n//----------------------------------------------------------------------------\r\n// Operators\r\n//----------------------------------------------------------------------------\r\nconst none = new NoneSelector();\r\n\r\nclass PrefixOperator extends Selector {\r\n constructor(rhs) {\r\n super();\r\n this.rhs = rhs || none;\r\n }\r\n\r\n toString() {\r\n const rhs = this.rhs.priority && this.rhs.priority > this.priority ? `(${this.rhs})` : this.rhs;\r\n return `${this.keyword} ${rhs}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.rhs.toJSON()];\r\n }\r\n}\r\n\r\nPrefixOperator.prototype.priority = 1;\r\n\r\nclass InfixOperator extends Selector {\r\n constructor(lhs, rhs) {\r\n super();\r\n this.lhs = lhs || none;\r\n this.rhs = rhs || none;\r\n }\r\n\r\n toString() {\r\n const lhs = this.lhs.priority && this.lhs.priority > this.priority ? `(${this.lhs})` : this.lhs;\r\n const rhs = this.rhs.priority && this.rhs.priority > this.priority ? `(${this.rhs})` : this.rhs;\r\n return `${lhs} ${this.keyword} ${rhs}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.lhs.toJSON(), this.rhs.toJSON()];\r\n }\r\n}\r\n\r\nInfixOperator.prototype.priority = 1000;\r\n\r\nexport { PrefixOperator, InfixOperator };\r\n","import Atom from './Atom';\r\nimport ResidueType from './ResidueType';\r\nimport { parser } from '../utils/SelectionParser';\r\nimport { Range, RangeList, ValueList } from './selectors/selectArgs';\r\nimport { PrefixOperator, InfixOperator } from './selectors/selectOps';\r\nimport {\r\n Selector,\r\n RangeListSelector,\r\n ValueListSelector,\r\n NoneSelector,\r\n AllSelector,\r\n} from './selectors/selectorsBase';\r\n\r\nconst keywords = {};\r\n\r\n//----------------------------------------------------------------------------\r\n// Named selectors\r\n//----------------------------------------------------------------------------\r\n\r\nfunction defineSelector(name, SelectorClass) {\r\n const keyword = name.toLowerCase();\r\n SelectorClass.prototype.keyword = keyword;\r\n SelectorClass.prototype.name = name;\r\n\r\n const factory = ((...args) => new SelectorClass(...args));\r\n factory.SelectorClass = SelectorClass;\r\n keywords[keyword] = factory;\r\n\r\n return SelectorClass;\r\n}\r\n\r\ndefineSelector('Serial', class SerialSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.serial);\r\n }\r\n});\r\n\r\ndefineSelector('Name', class NameSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.name);\r\n }\r\n});\r\n\r\ndefineSelector('AltLoc', class AltLocSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(String.fromCharCode(atom.location));\r\n }\r\n});\r\n\r\ndefineSelector('Elem', class ElemSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.element.name);\r\n }\r\n});\r\n\r\ndefineSelector('Residue', class ResidueSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._type._name);\r\n }\r\n});\r\n\r\ndefineSelector('Sequence', class SequenceSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._sequence);\r\n }\r\n});\r\n\r\ndefineSelector('ICode', class ICodeSelector extends ValueListSelector {\r\n constructor(arg) {\r\n super(arg, true);\r\n }\r\n\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._icode);\r\n }\r\n});\r\n\r\ndefineSelector('ResIdx', class ResIdxSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._index);\r\n }\r\n});\r\n\r\ndefineSelector('Chain', class ChainSelector extends ValueListSelector {\r\n constructor(arg) {\r\n super(arg, true);\r\n }\r\n\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._chain._name);\r\n }\r\n});\r\n\r\ndefineSelector('Hetatm', class HetatmSelector extends Selector {\r\n includesAtom(atom) {\r\n return atom.het;\r\n }\r\n});\r\n\r\ndefineSelector('PolarH', class PolarHSelector extends Selector {\r\n includesAtom(atom) {\r\n return (atom.flags & Atom.Flags.NONPOLARH) === Atom.Flags.HYDROGEN;\r\n }\r\n});\r\n\r\ndefineSelector('NonPolarH', class NonPolarHSelector extends Selector {\r\n includesAtom(atom) {\r\n return (atom.flags & Atom.Flags.NONPOLARH) === Atom.Flags.NONPOLARH;\r\n }\r\n});\r\n\r\ndefineSelector('All', AllSelector);\r\n\r\ndefineSelector('None', NoneSelector);\r\n\r\nconst NULL_SELECTOR = keywords.none();\r\n\r\n//----------------------------------------------------------------------------\r\n// Named operators\r\n//----------------------------------------------------------------------------\r\n\r\nfunction defineOperator(name, priority, OperatorClass) {\r\n OperatorClass.prototype.priority = priority;\r\n return defineSelector(name, OperatorClass);\r\n}\r\ndefineOperator('Not', 1, class NotOperator extends PrefixOperator {\r\n includesAtom(atom) {\r\n return !this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\ndefineOperator('And', 2, class AndOperator extends InfixOperator {\r\n includesAtom(atom) {\r\n return this.lhs.includesAtom(atom) && this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\ndefineOperator('Or', 3, class OrOperator extends InfixOperator {\r\n includesAtom(atom) {\r\n return this.lhs.includesAtom(atom) || this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\n//----------------------------------------------------------------------------\r\n// Flag selectors\r\n//----------------------------------------------------------------------------\r\n\r\nfunction byResidueTypeFlag(flag, name) {\r\n return defineSelector(name, class extends Selector {\r\n includesAtom(atom) {\r\n return (atom.residue._type.flags & flag) !== 0;\r\n }\r\n });\r\n}\r\n\r\nbyResidueTypeFlag(ResidueType.Flags.PROTEIN, 'Protein');\r\nbyResidueTypeFlag(ResidueType.Flags.BASIC, 'Basic');\r\nbyResidueTypeFlag(ResidueType.Flags.ACIDIC, 'Acidic');\r\nbyResidueTypeFlag(ResidueType.Flags.BASIC | ResidueType.Flags.ACIDIC, 'Charged');\r\nbyResidueTypeFlag(ResidueType.Flags.POLAR, 'Polar');\r\nbyResidueTypeFlag(ResidueType.Flags.NONPOLAR, 'NonPolar');\r\nbyResidueTypeFlag(ResidueType.Flags.AROMATIC, 'Aromatic');\r\nbyResidueTypeFlag(ResidueType.Flags.NUCLEIC, 'Nucleic');\r\nbyResidueTypeFlag(ResidueType.Flags.PURINE, 'Purine');\r\nbyResidueTypeFlag(ResidueType.Flags.PYRIMIDINE, 'Pyrimidine');\r\nbyResidueTypeFlag(ResidueType.Flags.WATER, 'Water');\r\n\r\n//----------------------------------------------------------------------------\r\nconst selectors = Object.create(keywords);\r\n\r\nselectors.Selector = Selector;\r\nselectors.RangeListSelector = RangeListSelector;\r\nselectors.ValueListSelector = ValueListSelector;\r\nselectors.Range = Range;\r\nselectors.RangeList = RangeList;\r\nselectors.ValueList = ValueList;\r\nselectors.PrefixOperator = PrefixOperator;\r\nselectors.InfixOperator = InfixOperator;\r\nselectors.Context = Object.create({});\r\n\r\nselectors.GetSelector = function (key) {\r\n if (!selectors.Context.hasOwnProperty(key)) {\r\n const exc = { message: `selector ${key} is not registered` };\r\n throw exc;\r\n }\r\n return selectors.Context[key] || NULL_SELECTOR;\r\n};\r\n\r\nselectors.ClearContext = function () {\r\n Object.keys(selectors.Context).forEach((k) => { delete selectors.Context[k]; });\r\n};\r\n\r\nselectors.keyword = function (key) {\r\n return keywords[key.toLowerCase()] || keywords.none;\r\n};\r\n\r\nselectors.parse = function (str) {\r\n const res = {};\r\n try {\r\n res.selector = parser.parse(str);\r\n } catch (e) {\r\n res.selector = NULL_SELECTOR;\r\n res.error = e.message;\r\n }\r\n return res;\r\n};\r\n\r\nparser.yy = selectors;\r\nparser.yy.parseError = parser.parseError; // workaround for incorrect JISON parser generator for AMD module\r\n\r\nexport default selectors;\r\n","import * as THREE from 'three';\r\nimport selectors from './selectors';\r\n\r\n/**\r\n * Basic biological unit class.\r\n *\r\n * @exports BiologicalUnit\r\n * @constructor\r\n */\r\nclass BiologicalUnit {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._selector = selectors.keyword('All')();\r\n this._boundaries = {\r\n boundingBox: new THREE.Box3(),\r\n boundingSphere: new THREE.Sphere(),\r\n };\r\n }\r\n\r\n computeBoundaries() {\r\n const atoms = this._complex._atoms;\r\n const n = atoms.length;\r\n const selector = this._selector;\r\n\r\n const { boundingBox } = this._boundaries;\r\n boundingBox.makeEmpty();\r\n if (n === 1) {\r\n boundingBox.expandByPoint(atoms[0].position);\r\n const bbc = new THREE.Vector3();\r\n boundingBox.getCenter(bbc);\r\n const s = 2 * atoms[0].element.radius;\r\n boundingBox.setFromCenterAndSize(bbc, new THREE.Vector3(s, s, s));\r\n } else {\r\n for (let i = 0; i < n; ++i) {\r\n if (selector.includesAtom(atoms[i])) {\r\n boundingBox.expandByPoint(atoms[i].position);\r\n }\r\n }\r\n }\r\n\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n if (n === 1) {\r\n this._boundaries.boundingSphere.set(center, atoms[0].element.radius);\r\n } else {\r\n for (let i = 0; i < n; ++i) {\r\n if (!selector.includesAtom(atoms[i])) {\r\n continue;\r\n }\r\n const pos = atoms[i].position;\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n this._boundaries.boundingSphere.set(center, Math.sqrt(radiusSquared));\r\n }\r\n }\r\n\r\n getTransforms() {\r\n return [];\r\n }\r\n\r\n getSelector() {\r\n return this._selector;\r\n }\r\n\r\n getBoundaries() {\r\n return this._boundaries;\r\n }\r\n\r\n finalize() {\r\n }\r\n}\r\n\r\nexport default BiologicalUnit;\r\n","import * as THREE from 'three';\r\nimport selectors from './selectors';\r\nimport BiologicalUnit from './BiologicalUnit';\r\n\r\n/**\r\n * Biological assembly.\r\n *\r\n * @exports Assembly\r\n * @constructor\r\n */\r\n\r\nclass Assembly extends BiologicalUnit {\r\n constructor(complex) {\r\n super(complex);\r\n this.chains = [];\r\n this.matrices = [];\r\n }\r\n\r\n computeBoundaries() {\r\n super.computeBoundaries();\r\n // fix up the boundaries\r\n const { matrices } = this;\r\n const oldCenter = this._boundaries.boundingSphere.center;\r\n const oldRad = this._boundaries.boundingSphere.radius;\r\n const boundingBox = this._boundaries.boundingBox = new THREE.Box3();\r\n boundingBox.makeEmpty();\r\n for (let i = 0, n = matrices.length; i < n; ++i) {\r\n boundingBox.expandByPoint(oldCenter.clone().applyMatrix4(matrices[i]));\r\n }\r\n\r\n const newRad = boundingBox.max.distanceTo(boundingBox.min) / 2 + oldRad;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n this._boundaries.boundingSphere = new THREE.Sphere().set(center, newRad);\r\n boundingBox.max.addScalar(oldRad);\r\n boundingBox.min.subScalar(oldRad);\r\n }\r\n\r\n /**\r\n * Mark a chain as belonging to this biological assembly.\r\n * @param {string} chain - chain identifier, usually a single letter\r\n */\r\n addChain(chain) {\r\n this.chains[this.chains.length] = chain;\r\n }\r\n\r\n /**\r\n * Add a transformation matrix.\r\n * @param {THREE.Matrix4} matrix - transformation matrix\r\n */\r\n addMatrix(matrix) {\r\n this.matrices[this.matrices.length] = matrix;\r\n }\r\n\r\n getTransforms() {\r\n return this.matrices;\r\n }\r\n\r\n finalize() {\r\n if (this.chains.length > 0) {\r\n this._selector = selectors.keyword('Chain')(this.chains);\r\n } else {\r\n this._selector = selectors.keyword('None')();\r\n }\r\n }\r\n}\r\n\r\nexport default Assembly;\r\n","/**\r\n * This class represents connected component as a part of a complex.\r\n * WARNING! The whole component entity is build under the assumption that residues\r\n * are placed in the chains and complex in ascending order of indices\r\n *\r\n * @param {Complex} complex - Molecular complex this chain belongs to.\r\n *\r\n * @exports Component\r\n * @constructor\r\n */\r\nclass Component {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._index = -1;\r\n this._residueIndices = [];\r\n this._cycles = [];\r\n this._subDivs = [];\r\n this._residueCount = 0;\r\n }\r\n\r\n getResidues() {\r\n return this._complex._residues;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residueCount;\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._complex._residues;\r\n const resIdc = this._residueIndices;\r\n for (let idIdc = 0, idCount = resIdc.length; idIdc < idCount; ++idIdc) {\r\n for (let idx = resIdc[idIdc].start, last = resIdc[idIdc].end; idx <= last; ++idx) {\r\n process(residues[idx]);\r\n }\r\n }\r\n }\r\n\r\n setSubDivs(subDivs) {\r\n this._subDivs = subDivs;\r\n let curr = 0;\r\n const resIdc = [];\r\n let resCnt = 0;\r\n for (let i = 0, n = subDivs.length; i < n; ++i) {\r\n if (i === n - 1 || subDivs[i].end + 1 !== subDivs[i + 1].start) {\r\n const { start } = subDivs[curr];\r\n const { end } = subDivs[i];\r\n resIdc[resIdc.length] = {\r\n start,\r\n end,\r\n };\r\n resCnt += end - start + 1;\r\n curr = i + 1;\r\n }\r\n }\r\n\r\n this._residueIndices = resIdc;\r\n this._residueCount = resCnt;\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n forEachBond(process) {\r\n const bonds = this._complex._bonds;\r\n\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n const bond = bonds[i];\r\n if (bond._left.residue._component === this) {\r\n process(bond);\r\n }\r\n }\r\n }\r\n\r\n update() {\r\n this.forEachCycle((cycle) => {\r\n cycle.update();\r\n });\r\n }\r\n\r\n forEachAtom(process) {\r\n this.forEachResidue((residue) => {\r\n residue.forEachAtom(process);\r\n });\r\n }\r\n\r\n addCycle(cycle) {\r\n this._cycles.push(cycle);\r\n }\r\n\r\n forEachCycle(process) {\r\n const cycles = this._cycles;\r\n for (let i = 0, n = cycles.length; i < n; ++i) {\r\n process(cycles[i]);\r\n }\r\n }\r\n\r\n markResidues() {\r\n const self = this;\r\n self.forEachResidue((residue) => {\r\n residue._component = self;\r\n });\r\n }\r\n\r\n _forEachSubChain(mask, process) {\r\n const residues = this._complex._residues;\r\n const subs = this._subDivs;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n for (let idx = subs[i].start, last = subs[i].end; idx <= last; ++idx) {\r\n const currRes = residues[idx];\r\n if (mask & currRes._mask && currRes._isValid) {\r\n let end = idx + 1;\r\n for (; end <= last; ++end) {\r\n const endRes = residues[end];\r\n if (!(mask & endRes._mask && endRes._isValid)) {\r\n break;\r\n }\r\n }\r\n process(i, idx, end - 1);\r\n idx = end;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getMaskedSequences(mask) {\r\n const subs = [];\r\n let idx = 0;\r\n this._forEachSubChain(mask, (_subIdx, start, end) => {\r\n subs[idx++] = { start, end };\r\n });\r\n\r\n return subs;\r\n }\r\n\r\n getMaskedSubdivSequences(mask) {\r\n const subs = [];\r\n let currIdx = -1;\r\n let lastSubIdx = -1;\r\n const subDivs = this._subDivs;\r\n\r\n this._forEachSubChain(mask, (subIdx, start, end) => {\r\n if (lastSubIdx !== subIdx) {\r\n ++currIdx;\r\n subs[currIdx] = {\r\n arr: [],\r\n boundaries: subDivs[subIdx],\r\n };\r\n lastSubIdx = subIdx;\r\n }\r\n subs[currIdx].arr[subs[currIdx].arr.length] = { start, end };\r\n });\r\n\r\n return subs;\r\n }\r\n}\r\n\r\nexport default Component;\r\n","import utils from '../utils';\r\n\r\nconst cMaxPairsForHashCode = 32;\r\nconst cHashTableSize = 1024 * 1024;\r\nconst cNumbersPerPair = 4;\r\nconst cMaxNeighbours = 14;\r\nconst cInvalidVal = -1;\r\n// 89237 is a large simple number, can be used for pseudo random hash code create\r\nconst cBigPrime = 89237;\r\n\r\nclass AtomPairs {\r\n constructor(maxPairsEstimate) {\r\n this.numPairs = 0;\r\n this.numMaxPairs = maxPairsEstimate;\r\n this.intBuffer = utils.allocateTyped(Int32Array, maxPairsEstimate * cNumbersPerPair);\r\n for (let i = 0; i < maxPairsEstimate * cNumbersPerPair; i++) {\r\n this.intBuffer[i] = cInvalidVal;\r\n }\r\n this.hashBuffer = utils.allocateTyped(Int32Array, cHashTableSize * cMaxPairsForHashCode);\r\n for (let i = 0; i < cHashTableSize * cMaxPairsForHashCode; i++) {\r\n this.hashBuffer[i] = cInvalidVal;\r\n }\r\n }\r\n\r\n /**\r\n * Destroy all pairs memory\r\n */\r\n destroy() {\r\n this.intBuffer = null;\r\n this.hashBuffer = null;\r\n }\r\n\r\n /**\r\n * Add pair of atoms to collection\r\n * @param {number} indexA - Index of the 1st vertex.\r\n * @param {number} indexB - Index of the 2nd vertex.\r\n */\r\n addPair(indexA, indexB) {\r\n const ia = (indexA < indexB) ? indexA : indexB;\r\n const ib = (indexA > indexB) ? indexA : indexB;\r\n const codeToAdd = ia + (ib << cMaxNeighbours);\r\n\r\n const hashCode = (ia + (ib * cBigPrime)) & (cHashTableSize - 1);\r\n let j = hashCode * cMaxPairsForHashCode;\r\n let apI = 0;\r\n for (; apI < cMaxPairsForHashCode; apI++) {\r\n const code = this.hashBuffer[j + apI];\r\n if (code === cInvalidVal) {\r\n break;\r\n }\r\n if (code === codeToAdd) {\r\n return false;\r\n }\r\n }\r\n // add this new hash code\r\n if (apI >= cMaxPairsForHashCode) {\r\n throw new Error('addPair: increase cMaxPairsForHashCode');\r\n }\r\n this.hashBuffer[j + apI] = codeToAdd;\r\n\r\n // actually add\r\n if (this.numPairs >= this.numMaxPairs) {\r\n throw new Error('addPair: increase num pairs');\r\n }\r\n j = this.numPairs * cNumbersPerPair;\r\n this.intBuffer[j] = ia;\r\n this.intBuffer[j + 1] = ib;\r\n this.intBuffer[j + 2] = codeToAdd;\r\n this.numPairs++;\r\n return true;\r\n }\r\n}\r\n\r\nexport default AtomPairs;\r\n","import AtomPairs from './AtomPairs';\r\nimport Bond from './Bond';\r\n\r\nconst cProfileBondBuilder = false;\r\nconst cEstBondsMultiplier = 4;\r\nconst cSpaceCode = 32;\r\nconst cBondTolerance = 0.45;\r\nconst cVMDTolerance = 0.6;\r\nconst cBondRadInJMOL = true;\r\nconst cEpsilon = 0.001;\r\n\r\n/**\r\n * Get radius used for building bonds.\r\n *\r\n * @param {Atom} atom - Atom object.\r\n * @returns {number} special value for bonding radius for this atom\r\n */\r\nfunction _getBondingRadius(atom) {\r\n const { element } = atom;\r\n if (element) {\r\n return element.radiusBonding;\r\n }\r\n throw new Error('_getBondingRadius: Logic error.');\r\n}\r\n\r\nfunction _isAtomEligible(atom) {\r\n // build for all non-hetatm and for hetatm without bonds\r\n return !atom.isHet() || (atom.bonds && atom.bonds.length === 0);\r\n}\r\n\r\n/**\r\n * Bond between atoms.\r\n *\r\n * @param {Complex} complex molecular complex\r\n\r\n * @exports AutoBond\r\n * @constructor\r\n */\r\nclass AutoBond {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._maxRad = 1.8;\r\n const bBox = this._complex.getDefaultBoundaries().boundingBox;\r\n this._vBoxMin = bBox.min.clone();\r\n this._vBoxMax = bBox.max.clone();\r\n\r\n this._pairCollection = null;\r\n }\r\n\r\n /**\r\n * Add existing pairs of connectors (from pdb file after its reading)\r\n * @returns {number} 0\r\n */\r\n _addExistingPairs() {\r\n const atoms = this._complex.getAtoms();\r\n const numAtoms = atoms.length;\r\n let aInd = 0;\r\n const collection = this._pairCollection;\r\n\r\n for (; aInd < numAtoms; aInd++) {\r\n const { bonds } = atoms[aInd];\r\n const numBondsForAtom = bonds.length;\r\n for (let bInd = 0; bInd < numBondsForAtom; bInd++) {\r\n const bond = bonds[bInd];\r\n const indTo = bond._left.index;\r\n if (indTo === aInd) {\r\n collection.addPair(aInd, bond._right.index);\r\n }\r\n } // for (b) all bonds in atom\r\n } // for (a)\r\n return 0;\r\n }\r\n\r\n _findPairs() {\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return;\r\n }\r\n\r\n const atoms = this._complex._atoms;\r\n const atomsNum = atoms.length;\r\n const self = this;\r\n\r\n let rA;\r\n let isHydrogenA;\r\n let posA;\r\n let locationA;\r\n let atomA;\r\n\r\n const processAtom = function (atomB) {\r\n if (isHydrogenA && atomB.isHydrogen()) {\r\n return;\r\n }\r\n\r\n const locationB = atomB.location;\r\n if ((locationA !== cSpaceCode)\r\n && (locationB !== cSpaceCode)\r\n && (locationA !== locationB)) {\r\n return;\r\n }\r\n\r\n const dist2 = posA.distanceToSquared(atomB.position);\r\n const rB = atomB.element.radiusBonding;\r\n const maxAcceptable = cBondRadInJMOL ? rA + rB + cBondTolerance : cVMDTolerance * (rA + rB);\r\n\r\n if (dist2 > (maxAcceptable * maxAcceptable)) {\r\n return;\r\n }\r\n\r\n if (dist2 < cEpsilon) {\r\n return;\r\n }\r\n\r\n self._pairCollection.addPair(atomA.index, atomB.index);\r\n };\r\n\r\n for (let i = 0; i < atomsNum; ++i) {\r\n atomA = atoms[i];\r\n if (!_isAtomEligible(atomA)) {\r\n continue;\r\n }\r\n\r\n rA = atomA.element.radiusBonding;\r\n isHydrogenA = atomA.isHydrogen();\r\n posA = atomA.position;\r\n locationA = atomA.location;\r\n\r\n vw.forEachAtomWithinRadius(posA, 2 * this._maxRad + cBondTolerance, processAtom);\r\n }\r\n }\r\n\r\n _addPairs() {\r\n const atoms = this._complex._atoms;\r\n\r\n for (let i = 0, k = 0; i < this._pairCollection.numPairs; i++, k += 4) {\r\n const iA = this._pairCollection.intBuffer[k];\r\n const iB = this._pairCollection.intBuffer[k + 1];\r\n this._addPair(atoms[iA], atoms[iB]);\r\n }\r\n }\r\n\r\n _addPair(atomA, atomB) {\r\n const bondsA = atomA.bonds;\r\n const indexA = atomA.index;\r\n const indexB = atomB.index;\r\n for (let j = 0, numBonds = bondsA.length; j < numBonds; ++j) {\r\n const bond = bondsA[j];\r\n if (bond._left.index === indexB || bond._right.index === indexB) {\r\n return;\r\n }\r\n }\r\n const left = indexA < indexB ? atomA : atomB;\r\n const right = indexA < indexB ? atomB : atomA;\r\n const newBond = this._complex.addBond(left, right, 0, Bond.BondType.UNKNOWN, false);\r\n bondsA.push(newBond);\r\n atomB.bonds.push(newBond);\r\n }\r\n\r\n build() {\r\n if (cProfileBondBuilder) {\r\n console.time('Bonds Builder');\r\n }\r\n this._buildInner();\r\n\r\n if (cProfileBondBuilder) {\r\n console.timeEnd('Bonds Builder');\r\n }\r\n }\r\n\r\n _buildInner() {\r\n const atoms = this._complex._atoms;\r\n if (atoms.length < 2) {\r\n return;\r\n }\r\n if (atoms[0].index < 0) {\r\n throw new Error('AutoBond: Atoms in complex were not indexed.');\r\n }\r\n\r\n this._calcBoundingBox();\r\n this._pairCollection = new AtomPairs(atoms.length * cEstBondsMultiplier);\r\n this._addExistingPairs();\r\n this._findPairs();\r\n this._addPairs();\r\n }\r\n\r\n _calcBoundingBox() {\r\n const atoms = this._complex._atoms;\r\n const nAtoms = atoms.length;\r\n let maxRad = _getBondingRadius(atoms[0]);\r\n for (let i = 1; i < nAtoms; ++i) {\r\n maxRad = Math.max(maxRad, _getBondingRadius(atoms[i]));\r\n }\r\n this._vBoxMax.addScalar(maxRad);\r\n this._vBoxMin.addScalar(-maxRad);\r\n this._maxRad = maxRad * 1.2;\r\n }\r\n\r\n destroy() {\r\n if (this._pairCollection) {\r\n this._pairCollection.destroy();\r\n }\r\n }\r\n}\r\n\r\nexport default AutoBond;\r\n","import * as THREE from 'three';\r\nimport Bond from './Bond';\r\nimport Element from './Element';\r\n\r\nconst cCrossThresh = 0.1;\r\nconst cAromaticType = Bond.BondType.AROMATIC;\r\nconst cAromaticAtoms = [\r\n Element.ByName.C.number,\r\n Element.ByName.N.number,\r\n // Element.ByName.O.number,\r\n // Element.ByName.S.number,\r\n];\r\n\r\n/** Conditions for bonds:\r\n * - Cross product with each subsequent bond to add is collinear and point to the same direction\r\n * - Each pair of a adjacent bonds belong to not more than one cycle\r\n * - If there is more than one candidates we try them in ascending order of angle values\r\n */\r\n\r\nconst _coDirVectors = (function () {\r\n const v1Tmp = new THREE.Vector3();\r\n const v2Tmp = new THREE.Vector3();\r\n const cp = new THREE.Vector3();\r\n return function (v1, v2) {\r\n v1Tmp.copy(v1).normalize();\r\n v2Tmp.copy(v2).normalize();\r\n cp.crossVectors(v1Tmp, v2Tmp);\r\n if (cp.length() > cCrossThresh) {\r\n return false;\r\n }\r\n // zero vector in out terms must be collinear to any\r\n return v1Tmp.dot(v2Tmp) >= 0;\r\n };\r\n}());\r\n\r\nfunction _insertAscending(arr, val) {\r\n let idx = 0;\r\n while (idx < arr.length && arr[idx] < val) {\r\n ++idx;\r\n }\r\n arr.splice(idx, 0, val);\r\n}\r\n\r\nfunction _anotherAtom(bond, currAtom) {\r\n return bond._left === currAtom ? bond._right : bond._left;\r\n}\r\n\r\nfunction _cosBetween(v1, v2) {\r\n const theta = v1.dot(v2) / (Math.sqrt(v1.lengthSq() * v2.lengthSq()));\r\n return THREE.MathUtils.clamp(theta, -1, 1);\r\n}\r\n\r\nfunction _markAromatic(bond) {\r\n bond._type = cAromaticType;\r\n}\r\n\r\nclass Cycle {\r\n constructor(atomsList) {\r\n this.atoms = atomsList;\r\n this.update();\r\n }\r\n\r\n update() {\r\n const { atoms } = this;\r\n const center = new THREE.Vector3();\r\n const nA = atoms.length;\r\n for (let j = 0; j < nA; ++j) {\r\n center.add(atoms[j].position);\r\n }\r\n center.multiplyScalar(1.0 / nA);\r\n this.center = center;\r\n this.radius = center.distanceTo(atoms[0].position.clone().lerp(atoms[1].position, 0.5));\r\n }\r\n\r\n forEachBond(process) {\r\n const { atoms } = this;\r\n const nA = atoms.length;\r\n let currAtom = atoms[0];\r\n let nextAtom;\r\n\r\n function checkBond(bond) {\r\n if (bond._left === nextAtom || bond._right === nextAtom) {\r\n process(bond);\r\n }\r\n }\r\n\r\n for (let i = 0; i < nA; ++i) {\r\n nextAtom = atoms[(i + 1) % nA];\r\n currAtom.forEachBond(checkBond);\r\n currAtom = nextAtom;\r\n }\r\n }\r\n}\r\n\r\nfunction _isAromatic(bond) {\r\n return bond._type === cAromaticType;\r\n}\r\n\r\nfunction _isPossibleAromatic(bond) {\r\n if (bond.type === cAromaticType) {\r\n return true;\r\n }\r\n const rightIdx = cAromaticAtoms.indexOf(bond._right.element.number);\r\n const leftIdx = cAromaticAtoms.indexOf(bond._left.element.number);\r\n return rightIdx !== -1 && leftIdx !== -1;\r\n}\r\n\r\nfunction _checkCycleSimple(cycle) {\r\n return cycle.length > 3;\r\n}\r\n\r\nfunction _checkCycleComplex(cycle) {\r\n console.assert(cycle.length > 2);\r\n return true;\r\n}\r\n\r\nclass AromaticLoopsMarker {\r\n constructor(complex) {\r\n this._complex = complex;\r\n const bondsData = new Array(complex._bonds.length);\r\n const bondMarks = new Array(complex._bonds.length);\r\n for (let i = 0, n = bondsData.length; i < n; ++i) {\r\n bondsData[i] = [];\r\n bondMarks[i] = false;\r\n }\r\n this._bondsData = bondsData;\r\n this._bondMarks = bondMarks;\r\n this._resetCycles();\r\n }\r\n\r\n _resetCycles() {\r\n this._cycles = [];\r\n this._currIdx = -1;\r\n }\r\n\r\n _haveSameCycle(bondsData, bond1, bond2) {\r\n const arr1 = bondsData[bond1._index];\r\n const arr2 = bondsData[bond2._index];\r\n const n1 = arr1.length;\r\n const n2 = arr2.length;\r\n let i1 = 0;\r\n let i2 = 0;\r\n while (i1 < n1 && i2 < n2) {\r\n if (arr1[i1] === arr2[i2]) {\r\n return true;\r\n }\r\n if (arr1[i1] > arr2[i2]) {\r\n ++i2;\r\n } else {\r\n ++i1;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n _tryBond(prevBond, currRight, currDir) {\r\n const bondsOrder = [];\r\n const bondsData = this._bondsData;\r\n const currLeft = _anotherAtom(prevBond, currRight);\r\n const currVec = currRight.position.clone().sub(currLeft.position);\r\n const startAtomRef = this._currStart;\r\n const self = this;\r\n const bondMarks = this._bondMarks;\r\n let checkAromatic = this._checkBond;\r\n bondMarks[prevBond._index] = true;\r\n checkAromatic = checkAromatic === undefined ? _isAromatic : checkAromatic;\r\n currRight.forEachBond((newBond) => {\r\n if (!checkAromatic(newBond)\r\n || newBond === prevBond\r\n || bondMarks[newBond._index]\r\n || self._haveSameCycle(bondsData, prevBond, newBond)) {\r\n return;\r\n }\r\n const anotherAtom = _anotherAtom(newBond, currRight);\r\n const anotherVec = anotherAtom.position.clone().sub(currRight.position);\r\n const val = anotherAtom === startAtomRef ? -2.0 : 1 - _cosBetween(currVec, anotherVec);\r\n const newDir = anotherVec.cross(currVec);\r\n if (!_coDirVectors(newDir, currDir)) {\r\n return;\r\n }\r\n let idx = 0;\r\n while (idx < bondsOrder.length && bondsOrder[idx].val < val) {\r\n ++idx;\r\n }\r\n bondsOrder.splice(idx, 0, { bond: newBond, val, dir: newDir });\r\n });\r\n\r\n for (let i = 0, n = bondsOrder.length; i < n; ++i) {\r\n const { bond } = bondsOrder[i];\r\n const newRight = bond._left === currRight ? bond._right : bond._left;\r\n if (newRight === startAtomRef) {\r\n ++this._currIdx;\r\n this._cycles.push([currRight]);\r\n bondMarks[prevBond._index] = false;\r\n return true;\r\n }\r\n if (this._tryBond(bond, newRight, bondsOrder[i].dir)) {\r\n _insertAscending(bondsData[bond._index], this._currIdx);\r\n this._cycles[this._currIdx].push(currRight);\r\n bondMarks[prevBond._index] = false;\r\n return true;\r\n }\r\n }\r\n bondMarks[prevBond._index] = false;\r\n return false;\r\n }\r\n\r\n _startCycle(bond) {\r\n // start from left to right\r\n this._currStart = bond._left;\r\n if (this._tryBond(bond, bond._right, new THREE.Vector3())) {\r\n _insertAscending(this._bondsData[bond._index], this._currIdx);\r\n this._cycles[this._currIdx].push(bond._left);\r\n }\r\n }\r\n\r\n _findLoops(checkBond, checkCycle) {\r\n this._checkBond = checkBond;\r\n const complex = this._complex;\r\n const self = this;\r\n\r\n complex.forEachComponent((component) => {\r\n self._resetCycles();\r\n component.forEachBond((bond) => {\r\n if (checkBond(bond)) {\r\n self._startCycle(bond);\r\n }\r\n });\r\n const cycles = self._cycles;\r\n for (let i = 0, n = cycles.length; i < n; ++i) {\r\n const cycle = cycles[i];\r\n if (!checkCycle(cycle)) {\r\n continue;\r\n }\r\n const newCycle = new Cycle(cycle);\r\n newCycle.forEachBond(_markAromatic);\r\n component.addCycle(newCycle);\r\n }\r\n });\r\n }\r\n\r\n markCycles() {\r\n this._findLoops(_isAromatic, _checkCycleSimple);\r\n }\r\n\r\n detectCycles() {\r\n this._findLoops(_isPossibleAromatic, _checkCycleComplex);\r\n }\r\n}\r\n\r\nexport default AromaticLoopsMarker;\r\n","import * as THREE from 'three';\r\nimport utils from '../utils';\r\n\r\n/**\r\n * Calculate min & max radius of a sphere slice between zMin & zMax\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {number} zMin - lower bound of the slice\r\n * @param {number} zMax - upper bound of the slice\r\n */\r\nfunction _getSphereSliceRadiusRange(center, radius, zMin, zMax) {\r\n const dzMin = zMin - center.z;\r\n const dzMax = zMax - center.z;\r\n const rzMin = Math.sqrt(Math.max(radius * radius - dzMin * dzMin, 0.0));\r\n const rzMax = Math.sqrt(Math.max(radius * radius - dzMax * dzMax, 0.0));\r\n\r\n const rMin = Math.min(rzMin, rzMax);\r\n let rMax;\r\n\r\n if (zMin <= center.z && zMax >= center.z) {\r\n // sphere's main diameter is inside slice\r\n rMax = radius;\r\n } else {\r\n rMax = Math.max(rzMin, rzMax);\r\n }\r\n\r\n return [rMin, rMax];\r\n}\r\n\r\n/**\r\n * Calculate min & max radius of a circle slice between yMin & yMax.\r\n *\r\n * To maintain analogy with _getSphereSliceRadiusRange we call radius what in fact is\r\n * half-width (along X axis) of the slice, i.e. 1D-sphere radius.\r\n *\r\n * @param {Vector3} center - center of the circle (z can be ignored)\r\n * @param {number} radius - circle radius\r\n * @param {number} yMin - lower bound of the slice\r\n * @param {number} yMax - upper bound of the slice\r\n * @returns {Array} - array of two numbers (min & max radius, or half-width)\r\n */\r\nfunction _getCircleSliceRadiusRange(center, radius, yMin, yMax) {\r\n const dyMin = yMin - center.y;\r\n const dyMax = yMax - center.y;\r\n const ryMin = Math.sqrt(Math.max(radius * radius - dyMin * dyMin, 0.0));\r\n const ryMax = Math.sqrt(Math.max(radius * radius - dyMax * dyMax, 0.0));\r\n\r\n const rMin = Math.min(ryMin, ryMax);\r\n let rMax;\r\n\r\n if (yMin <= center.y && yMax >= center.y) {\r\n // slice's main diameter is inside slice\r\n rMax = radius;\r\n } else {\r\n rMax = Math.max(ryMin, ryMax);\r\n }\r\n\r\n return [rMin, rMax];\r\n}\r\n\r\n/**\r\n * VoxelWorld constructor\r\n *\r\n * @param {Box3} box - bounding box of the volume to be partitioned\r\n * @param {Vector3} vCellSizeHint - target voxel size (actual voxel size may differ from this)\r\n */\r\nclass VoxelWorld {\r\n constructor(box, vCellSizeHint) {\r\n this._box = box.clone();\r\n const size = new THREE.Vector3();\r\n box.getSize(size);\r\n this._count = size.clone().divide(vCellSizeHint).floor().max(new THREE.Vector3(1, 1, 1));\r\n this._last = this._count.clone().subScalar(1);\r\n this._cellSize = size.clone().divide(this._count);\r\n this._cellInnerR = 0.5 * Math.min(Math.min(this._cellSize.x, this._cellSize.y), this._cellSize.z);\r\n this._cellOuterR = 0.5 * Math.sqrt(this._cellSize.dot(this._cellSize));\r\n\r\n // array of voxels, each element contains index of first atom in voxel\r\n const numVoxels = this._count.x * this._count.y * this._count.z;\r\n this._voxels = utils.allocateTyped(Int32Array, numVoxels);\r\n for (let i = 0; i < numVoxels; ++i) {\r\n this._voxels[i] = -1;\r\n }\r\n\r\n // array of atoms that stores multiple single-linked lists\r\n // two elements for each atom: Atom ref, index of next atom (in this array\r\n this._atoms = [];\r\n }\r\n\r\n /**\r\n * Add all atoms from a complex to voxel world\r\n *\r\n * @param {Complex} complex - complex\r\n */\r\n addAtoms(complex) {\r\n const self = this;\r\n\r\n let idx = this._atoms.length;\r\n\r\n // resize array of atoms\r\n this._atoms.length += 2 * complex.getAtomCount();\r\n\r\n complex.forEachAtom((atom) => {\r\n // find which voxel contains this atom\r\n const voxelIdx = self._findVoxel(atom.position);\r\n\r\n // push current atom to the head of voxel's atom list\r\n self._atoms[idx] = atom;\r\n self._atoms[idx + 1] = self._voxels[voxelIdx];\r\n self._voxels[voxelIdx] = idx;\r\n\r\n idx += 2;\r\n });\r\n }\r\n\r\n /**\r\n * Get voxel that contains specified 3D point (we use clamp at the edges)\r\n *\r\n * @param {Vector3} point - a point in 3D\r\n * @returns {number} - index of voxel\r\n */\r\n static _zero = new THREE.Vector3(0, 0, 0);\r\n\r\n static _voxel = new THREE.Vector3();\r\n\r\n _findVoxel(point) {\r\n const zero = VoxelWorld._zero;\r\n const voxel = VoxelWorld._voxel;\r\n voxel.copy(point)\r\n .sub(this._box.min)\r\n .divide(this._cellSize)\r\n .floor()\r\n .clamp(zero, this._last);\r\n return voxel.x + this._count.x * (voxel.y + this._count.y * voxel.z);\r\n }\r\n\r\n /**\r\n * Call a function for each atom in voxel\r\n *\r\n * @param {number} voxel - index of voxel\r\n * @param {function(Atom)} process - function to call\r\n */\r\n _forEachAtomInVoxel(voxel, process) {\r\n for (let i = this._voxels[voxel]; i >= 0; i = this._atoms[i + 1]) {\r\n process(this._atoms[i]);\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each voxel that is touched by given sphere. Callback also takes flag\r\n * isInside specifying whether voxel lies inside the sphere entirely.\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside\r\n */\r\n\r\n static _xRange = new THREE.Vector2();\r\n\r\n static _yRange = new THREE.Vector2();\r\n\r\n static _zRange = new THREE.Vector2();\r\n\r\n _forEachVoxelWithinRadius(center, radius, process) {\r\n const xRange = VoxelWorld._xRange;\r\n const yRange = VoxelWorld._yRange;\r\n const zRange = VoxelWorld._zRange;\r\n\r\n // switch to a faster method unless cell size is much smaller than sphere radius\r\n if (radius / this._cellInnerR < 10) {\r\n this._forEachVoxelWithinRadiusSimple(center, radius, process);\r\n return;\r\n }\r\n\r\n let rRangeXY;\r\n let rRangeX;\r\n let xVal;\r\n let yVal;\r\n let zVal;\r\n let isInsideX;\r\n let isInsideY;\r\n let isInsideZ;\r\n\r\n zRange.set(center.z - radius, center.z + radius);\r\n zRange.subScalar(this._box.min.z)\r\n .divideScalar(this._cellSize.z)\r\n .floor()\r\n .clampScalar(0, this._count.z - 1);\r\n\r\n for (let z = zRange.x; z <= zRange.y; ++z) {\r\n zVal = [this._box.min.z + z * this._cellSize.z,\r\n this._box.min.z + (z + 1) * this._cellSize.z];\r\n\r\n isInsideZ = (center.z - radius <= zVal[0]) && (zVal[1] <= center.z + radius);\r\n\r\n rRangeXY = _getSphereSliceRadiusRange(center, radius, zVal[0], zVal[1]);\r\n\r\n yRange.set(center.y - rRangeXY[1], center.y + rRangeXY[1]);\r\n yRange.subScalar(this._box.min.y)\r\n .divideScalar(this._cellSize.y)\r\n .floor()\r\n .clampScalar(0, this._count.y - 1);\r\n\r\n for (let y = yRange.x; y <= yRange.y; ++y) {\r\n yVal = [this._box.min.y + y * this._cellSize.y,\r\n this._box.min.y + (y + 1) * this._cellSize.y];\r\n\r\n isInsideY = (center.y - rRangeXY[0] <= yVal[0]) && (yVal[1] <= center.y + rRangeXY[0]);\r\n\r\n rRangeX = _getCircleSliceRadiusRange(center, rRangeXY[1], yVal[0], yVal[1]);\r\n\r\n xRange.set(center.x - rRangeX[1], center.x + rRangeX[1]);\r\n xRange.subScalar(this._box.min.x)\r\n .divideScalar(this._cellSize.x)\r\n .floor()\r\n .clampScalar(0, this._count.x - 1);\r\n\r\n for (let { x } = xRange; x <= xRange.y; ++x) {\r\n xVal = [this._box.min.x + x * this._cellSize.x,\r\n this._box.min.x + (x + 1) * this._cellSize.x];\r\n isInsideX = (center.x - rRangeX[0] <= xVal[0]) && (xVal[1] <= center.x + rRangeX[0]);\r\n\r\n process(x + this._count.x * (y + this._count.y * z), isInsideX && isInsideY && isInsideZ);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each voxel that is touched by given sphere. Callback also takes flag\r\n * isInside specifying whether voxel lies inside the sphere entirely.\r\n * This is a version of method that doesn't try to \"calculate\" what voxels fall inside radius\r\n * but instead just checks all voxels inside sphere's bounding box. This should be faster\r\n * unless cell size is much smaller than sphere radius.\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside\r\n */\r\n\r\n static _vCenter = new THREE.Vector3();\r\n\r\n _forEachVoxelWithinRadiusSimple(center, radius, process) {\r\n const xRange = VoxelWorld._xRange;\r\n const yRange = VoxelWorld._yRange;\r\n const zRange = VoxelWorld._zRange;\r\n const vCenter = VoxelWorld._vCenter;\r\n\r\n const distTouch2 = (radius + this._cellOuterR) * (radius + this._cellOuterR);\r\n let distInside2 = -1.0;\r\n if (radius > this._cellOuterR) {\r\n distInside2 = (radius - this._cellOuterR) * (radius - this._cellOuterR);\r\n }\r\n\r\n // calculate bounding box for the sphere\r\n xRange.set(center.x - radius, center.x + radius);\r\n xRange.subScalar(this._box.min.x)\r\n .divideScalar(this._cellSize.x)\r\n .floor();\r\n xRange.x = Math.min(Math.max(xRange.x, 0), this._count.x - 1);\r\n xRange.y = Math.min(Math.max(xRange.y, 0), this._count.x - 1);\r\n\r\n yRange.set(center.y - radius, center.y + radius);\r\n yRange.subScalar(this._box.min.y)\r\n .divideScalar(this._cellSize.y)\r\n .floor();\r\n yRange.x = Math.min(Math.max(yRange.x, 0), this._count.y - 1);\r\n yRange.y = Math.min(Math.max(yRange.y, 0), this._count.y - 1);\r\n\r\n zRange.set(center.z - radius, center.z + radius);\r\n zRange.subScalar(this._box.min.z)\r\n .divideScalar(this._cellSize.z)\r\n .floor();\r\n zRange.x = Math.min(Math.max(zRange.x, 0), this._count.z - 1);\r\n zRange.y = Math.min(Math.max(zRange.y, 0), this._count.z - 1);\r\n\r\n for (let z = zRange.x; z <= zRange.y; ++z) {\r\n const zVal = [this._box.min.z + z * this._cellSize.z,\r\n this._box.min.z + (z + 1) * this._cellSize.z];\r\n vCenter.z = 0.5 * (zVal[0] + zVal[1]);\r\n\r\n for (let y = yRange.x; y <= yRange.y; ++y) {\r\n const yVal = [this._box.min.y + y * this._cellSize.y,\r\n this._box.min.y + (y + 1) * this._cellSize.y];\r\n vCenter.y = 0.5 * (yVal[0] + yVal[1]);\r\n\r\n for (let { x } = xRange; x <= xRange.y; ++x) {\r\n const xVal = [this._box.min.x + x * this._cellSize.x,\r\n this._box.min.x + (x + 1) * this._cellSize.x];\r\n vCenter.x = 0.5 * (xVal[0] + xVal[1]);\r\n\r\n const d2 = center.distanceToSquared(vCenter);\r\n if (d2 <= distTouch2) {\r\n process(x + this._count.x * (y + this._count.y * z), d2 <= distInside2);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each atom within given sphere\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinRadius(center, radius, process) {\r\n const self = this;\r\n const r2 = radius * radius;\r\n\r\n self._forEachVoxelWithinRadius(center, radius, (voxel, isInside) => {\r\n if (isInside) {\r\n self._forEachAtomInVoxel(voxel, process);\r\n } else {\r\n self._forEachAtomInVoxel(voxel, (atom) => {\r\n if (center.distanceToSquared(atom.position) <= r2) {\r\n process(atom);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms defined by mask\r\n *\r\n * @param {Complex} complex - complex\r\n * @param {number} mask - bit mask\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinDistFromMasked(complex, mask, dist, process) {\r\n this._forEachAtomWithinDistFromGroup((atomProc) => {\r\n complex.forEachAtom((atom) => {\r\n if ((atom.mask & mask) !== 0) {\r\n atomProc(atom);\r\n }\r\n });\r\n }, dist, process);\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms defined by selector\r\n *\r\n * @param {Complex} complex - complex\r\n * @param {number} selector - selector\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinDistFromSelected(complex, selector, dist, process) {\r\n this._forEachAtomWithinDistFromGroup((atomProc) => {\r\n complex.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom)) {\r\n atomProc(atom);\r\n }\r\n });\r\n }, dist, process);\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms\r\n *\r\n * @param {function} forEachAtom - enumerator of atoms in the group\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n _forEachAtomWithinDistFromGroup(forEachAtom, dist, process) {\r\n const self = this;\r\n const r2 = dist * dist;\r\n\r\n const voxels = [];\r\n const atoms = [];\r\n let idx = 0;\r\n\r\n // build \"within radius\" atom list for each voxel\r\n forEachAtom((atom) => {\r\n self._forEachVoxelWithinRadius(atom.position, dist, (voxel, isInside) => {\r\n if (isInside) {\r\n // this voxel is inside circle -- no check will be required\r\n voxels[voxel] = -1;\r\n } else if (typeof voxels[voxel] === 'undefined') {\r\n // this voxel isn't covered yet -- start building list of atoms\r\n atoms.push(atom);\r\n atoms.push(-1);\r\n voxels[voxel] = idx;\r\n idx += 2;\r\n } else if (voxels[voxel] !== -1) {\r\n // this voxel has a list of atoms required for distance check -- add atom to the list\r\n atoms.push(atom);\r\n atoms.push(voxels[voxel]);\r\n voxels[voxel] = idx;\r\n idx += 2;\r\n }\r\n });\r\n });\r\n\r\n let voxel;\r\n\r\n const processIfWithin = function (atom) {\r\n if (typeof voxels[voxel] === 'undefined') {\r\n return;\r\n }\r\n\r\n idx = voxels[voxel];\r\n if (idx === -1) {\r\n // this voxel is fully covered\r\n process(atom);\r\n return;\r\n }\r\n\r\n // check distance to each atom within radius from this voxel\r\n for (; idx >= 0; idx = atoms[idx + 1]) {\r\n if (atom.position.distanceToSquared(atoms[idx].position) < r2) {\r\n process(atom);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n // for each marked voxel\r\n for (voxel in voxels) {\r\n if (voxels.hasOwnProperty(voxel)) {\r\n self._forEachAtomInVoxel(voxel, processIfWithin);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default VoxelWorld;\r\n","import ResidueType from './ResidueType';\r\nimport PairCollection from './AtomPairs';\r\n\r\nconst MINIMAL_DISTANCE = 0.5;\r\nconst MIN_HBOND_ENERGY = -9.9;\r\nconst MAX_HBOND_ENERGY = -0.5;\r\nconst COUPLING_CONSTANT = -27.888; // = -332 * 0.42 * 0.2\r\nconst MAX_COUPLING_DISTANCE = 5.0; // how far is the closest atom of a potential partner residue from CA atom\r\nconst MAX_RESIDUES_THRESHOLD = 1000;\r\n\r\nexport default class HBondInfo {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._hbonds = []; // array of bond info for each residue\r\n if (this._complex._residues.length > MAX_RESIDUES_THRESHOLD) {\r\n this._buildVW(); // optimized version using voxel grid\r\n } else {\r\n this._build(); // test all pairs of residues\r\n }\r\n }\r\n\r\n isBond(from, to) {\r\n if (this._hbonds[from]) {\r\n const [acc0, acc1] = this._hbonds[from].acceptor;\r\n if (acc0 && acc0.residue === to && acc0.energy < MAX_HBOND_ENERGY) {\r\n return true;\r\n }\r\n if (acc1 && acc1.residue === to && acc1.energy < MAX_HBOND_ENERGY) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n _build() {\r\n const self = this;\r\n\r\n for (let i = 0; i < this._complex._residues.length - 1; ++i) {\r\n const ri = this._complex._residues[i];\r\n if ((ri.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n let preri = null;\r\n if (i > 0 && (this._complex._residues[i - 1].getType().flags & ResidueType.Flags.PROTEIN)\r\n && ri._sequence === this._complex._residues[i - 1]._sequence + 1) {\r\n preri = this._complex._residues[i - 1];\r\n }\r\n\r\n for (let j = i + 1; j < this._complex._residues.length; ++j) {\r\n const rj = this._complex._residues[j];\r\n if ((rj.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n let prerj = null;\r\n if ((this._complex._residues[j - 1].getType().flags & ResidueType.Flags.PROTEIN)\r\n && rj._sequence === this._complex._residues[j - 1]._sequence + 1) {\r\n prerj = this._complex._residues[j - 1];\r\n }\r\n\r\n self._calcHBondEnergy(preri, ri, rj);\r\n if (j !== i + 1) {\r\n self._calcHBondEnergy(prerj, rj, ri);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _buildVW() {\r\n const self = this;\r\n const residues = this._complex._residues;\r\n let ri;\r\n let preri;\r\n\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return;\r\n }\r\n\r\n const pairs = new PairCollection(this._complex._residues.length * this._complex._residues.length / 2);\r\n\r\n function processAtom(atom) {\r\n const rj = atom.residue;\r\n\r\n if (rj._index === ri._index) {\r\n return;\r\n }\r\n\r\n if ((rj.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n return;\r\n }\r\n\r\n if (!pairs.addPair(ri._index, rj._index)) {\r\n // we've seen this pair\r\n return;\r\n }\r\n\r\n // get predecessor in chain\r\n let prerj = rj._index > 0 ? residues[rj._index - 1] : null;\r\n if (prerj\r\n && ((prerj.getType().flags & ResidueType.Flags.PROTEIN) === 0 || rj._sequence !== prerj._sequence + 1)) {\r\n prerj = null;\r\n }\r\n\r\n self._calcHBondEnergy(preri, ri, rj);\r\n if (rj._index !== ri._index + 1) {\r\n self._calcHBondEnergy(prerj, rj, ri);\r\n }\r\n }\r\n\r\n for (let i = 0; i < residues.length - 1; ++i) {\r\n ri = residues[i];\r\n if ((ri.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n preri = i > 0 ? residues[i - 1] : null;\r\n if (preri\r\n && ((preri.getType().flags & ResidueType.Flags.PROTEIN) === 0 || ri._sequence !== preri._sequence + 1)) {\r\n preri = null;\r\n }\r\n\r\n vw.forEachAtomWithinRadius(this._residueGetCAlpha(ri), MAX_COUPLING_DISTANCE, processAtom);\r\n }\r\n }\r\n\r\n _residueGetCAlpha(res) {\r\n for (let i = 0; i < res._atoms.length; ++i) {\r\n const { name } = res._atoms[i];\r\n if (name === 'CA'\r\n || name === 'C1') {\r\n return res._atoms[i].position;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _residueGetCO(res) {\r\n let c = null;\r\n let o = null;\r\n\r\n res.forEachAtom((a) => {\r\n if (a.name === 'C') {\r\n c = a.position;\r\n } else if (a.name === 'O') {\r\n o = a.position;\r\n }\r\n });\r\n\r\n return [c, o];\r\n }\r\n\r\n // TODO Support hydrogen defined in complex\r\n _residueGetNH(prev, res) {\r\n const [c, o] = this._residueGetCO(prev);\r\n\r\n let n;\r\n res.forEachAtom((a) => {\r\n if (a.name === 'N') {\r\n n = a.position;\r\n }\r\n });\r\n\r\n if (c && o && n) {\r\n // calculate hydrogen position\r\n const h = c.clone();\r\n h.sub(o);\r\n h.multiplyScalar(1.0 / h.length());\r\n h.add(n);\r\n\r\n return [n, h];\r\n }\r\n\r\n return [null, null];\r\n }\r\n\r\n _calcHBondEnergy(predonor, donor, acceptor) {\r\n let result = 0;\r\n\r\n if (predonor === null) {\r\n return result;\r\n }\r\n\r\n if (donor.getType().getName() !== 'PRO') {\r\n const [n, h] = this._residueGetNH(predonor, donor);\r\n const [c, o] = this._residueGetCO(acceptor);\r\n\r\n if (n === null || h === null || c === null || o === null) {\r\n return result;\r\n }\r\n\r\n const distanceHO = h.distanceTo(o);\r\n const distanceHC = h.distanceTo(c);\r\n const distanceNC = n.distanceTo(c);\r\n const distanceNO = n.distanceTo(o);\r\n\r\n if (distanceHO < MINIMAL_DISTANCE || distanceHC < MINIMAL_DISTANCE\r\n || distanceNC < MINIMAL_DISTANCE || distanceNO < MINIMAL_DISTANCE) {\r\n result = MIN_HBOND_ENERGY;\r\n } else {\r\n result = COUPLING_CONSTANT / distanceHO - COUPLING_CONSTANT / distanceHC\r\n + COUPLING_CONSTANT / distanceNC - COUPLING_CONSTANT / distanceNO;\r\n }\r\n\r\n // DSSP compatibility mode:\r\n result = Math.round(result * 1000) / 1000;\r\n\r\n if (result < MIN_HBOND_ENERGY) {\r\n result = MIN_HBOND_ENERGY;\r\n }\r\n }\r\n\r\n // update donor\r\n if (typeof this._hbonds[donor._index] === 'undefined') {\r\n this._hbonds[donor._index] = {\r\n donor: [],\r\n acceptor: [],\r\n };\r\n }\r\n const donorInfo = this._hbonds[donor._index];\r\n\r\n if (donorInfo.acceptor.length < 2) {\r\n donorInfo.acceptor.push({\r\n residue: acceptor._index,\r\n energy: result,\r\n });\r\n }\r\n\r\n if (donorInfo.acceptor.length > 1) {\r\n if (result < donorInfo.acceptor[0].energy) {\r\n donorInfo.acceptor[1].residue = donorInfo.acceptor[0].residue;\r\n donorInfo.acceptor[1].energy = donorInfo.acceptor[0].energy;\r\n donorInfo.acceptor[0].residue = acceptor._index;\r\n donorInfo.acceptor[0].energy = result;\r\n } else if (result < donorInfo.acceptor[1].energy) {\r\n donorInfo.acceptor[1].residue = acceptor._index;\r\n donorInfo.acceptor[1].energy = result;\r\n }\r\n }\r\n\r\n // update acceptor\r\n if (typeof this._hbonds[acceptor._index] === 'undefined') {\r\n this._hbonds[acceptor._index] = {\r\n donor: [],\r\n acceptor: [],\r\n };\r\n }\r\n const accInfo = this._hbonds[acceptor._index];\r\n\r\n if (accInfo.donor.length < 2) {\r\n accInfo.donor.push({\r\n residue: donor._index,\r\n energy: result,\r\n });\r\n }\r\n\r\n if (accInfo.donor.length > 1) {\r\n if (result < accInfo.donor[0].energy) {\r\n accInfo.donor[1].residue = accInfo.donor[0].residue;\r\n accInfo.donor[1].energy = accInfo.donor[0].energy;\r\n accInfo.donor[0].residue = donor._index;\r\n accInfo.donor[0].energy = result;\r\n } else if (result < accInfo.donor[1].energy) {\r\n accInfo.donor[1].residue = donor._index;\r\n accInfo.donor[1].energy = result;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import HBondInfo from './HBondInfo';\r\nimport ResidueType from './ResidueType';\r\n\r\nconst BridgeType = Object.freeze({\r\n NO_BRIDGE: 0,\r\n PARALLEL: 1,\r\n ANTI_PARALLEL: 2,\r\n});\r\n\r\nconst HelixFlag = Object.freeze({\r\n START: 1,\r\n MIDDLE: 2,\r\n END: 3,\r\n START_AND_END: 4,\r\n});\r\n\r\nconst StructureType = Object.freeze({\r\n STRAND: 'E',\r\n BRIDGE: 'B',\r\n HELIX_310: 'G',\r\n HELIX_ALPHA: 'H',\r\n HELIX_PI: 'I',\r\n TURN: 'T',\r\n BEND: 'S',\r\n LOOP: ' ',\r\n});\r\n\r\nexport default class SecondaryStructureMap {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._build();\r\n }\r\n\r\n _build() {\r\n const self = this;\r\n this._hbonds = new HBondInfo(this._complex);\r\n this._ss = []; // DSSP map by residue\r\n\r\n // auxilliary data\r\n this._sheet = [];\r\n this._betaPartners = [];\r\n this._bend = [];\r\n for (let i = 0; i < this._complex.getResidues().length; ++i) {\r\n this._betaPartners[i] = [];\r\n }\r\n this._helixFlags = [];\r\n this._helixFlags[3] = [];\r\n this._helixFlags[4] = [];\r\n this._helixFlags[5] = [];\r\n\r\n // calculate peptide chain lengths\r\n this._chainLengths = [];\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i].getResidues();\r\n let len = 0;\r\n for (; len < chain.length; ++len) {\r\n if ((chain[len].getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n break;\r\n }\r\n }\r\n this._chainLengths[i] = len;\r\n }\r\n\r\n this._buildBetaSheets();\r\n\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n self._buildAlphaHelices(this._complex._chains[i].getResidues(), this._chainLengths[i], false);\r\n }\r\n }\r\n\r\n _buildAlphaHelices(inResidues, chainLength, inPreferPiHelices) {\r\n // Helix and Turn\r\n for (let stride = 3; stride <= 5; ++stride) {\r\n if (inResidues.length < stride) {\r\n break;\r\n }\r\n\r\n for (let i = 0; i + stride < chainLength; ++i) {\r\n if (this._hbonds.isBond(inResidues[i + stride]._index, inResidues[i]._index)\r\n /* && NoChainBreak(res[i], res[i + stride]) */) {\r\n this._helixFlags[stride][inResidues[i + stride]._index] = HelixFlag.END;\r\n for (let j = i + 1; j < i + stride; ++j) {\r\n if (typeof this._helixFlags[stride][inResidues[j]._index] === 'undefined') {\r\n this._helixFlags[stride][inResidues[j]._index] = HelixFlag.MIDDLE;\r\n }\r\n }\r\n\r\n if (this._helixFlags[stride][inResidues[i]._index] === HelixFlag.END) {\r\n this._helixFlags[stride][inResidues[i]._index] = HelixFlag.START_AND_END;\r\n } else {\r\n this._helixFlags[stride][inResidues[i]._index] = HelixFlag.START;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 2; i < chainLength - 2; ++i) {\r\n const kappa = this._kappa(inResidues[i - 2], inResidues[i], inResidues[i + 2]);\r\n this._bend[inResidues[i]._index] = (kappa !== 360 && kappa > 70);\r\n }\r\n\r\n for (let i = 1; i + 4 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 4) && this._isHelixStart(inResidues[i - 1]._index, 4)) {\r\n for (let j = i; j <= i + 3; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_ALPHA;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 3 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 3) && this._isHelixStart(inResidues[i - 1]._index, 3)) {\r\n let empty = true;\r\n for (let j = i; empty && j <= i + 2; ++j) {\r\n empty = typeof this._ss[inResidues[j]._index] === 'undefined'\r\n || this._ss[inResidues[j]._index] === StructureType.HELIX_310;\r\n }\r\n if (empty) {\r\n for (let j = i; j <= i + 2; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_310;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 5 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 5) && this._isHelixStart(inResidues[i - 1]._index, 5)) {\r\n let empty = true;\r\n for (let j = i; empty && j <= i + 4; ++j) {\r\n empty = typeof this._ss[inResidues[j]._index] === 'undefined'\r\n || this._ss[inResidues[j]._index] === StructureType.HELIX_PI\r\n || (inPreferPiHelices && this._ss[inResidues[j]._index] === StructureType.HELIX_ALPHA);\r\n }\r\n if (empty) {\r\n for (let j = i; j <= i + 4; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_PI;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 1 < chainLength; ++i) {\r\n if (typeof this._ss[inResidues[i]._index] === 'undefined') {\r\n let isTurn = false;\r\n for (let stride = 3; stride <= 5 && !isTurn; ++stride) {\r\n for (let k = 1; k < stride && !isTurn; ++k) {\r\n isTurn = (i >= k) && this._isHelixStart(inResidues[i - k]._index, stride);\r\n }\r\n }\r\n\r\n if (isTurn) {\r\n this._ss[inResidues[i]._index] = StructureType.TURN;\r\n } else if (this._bend[inResidues[i]._index]) {\r\n this._ss[inResidues[i]._index] = StructureType.BEND;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _residueGetCAlpha(res) {\r\n for (let i = 0; i < res._atoms.length; ++i) {\r\n const { name } = res._atoms[i];\r\n if (name === 'CA'\r\n || name === 'C1') {\r\n return res._atoms[i].position;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _cosinusAngle(p1, p2, p3, p4) {\r\n const v12 = p1.clone().sub(p2);\r\n const v34 = p3.clone().sub(p4);\r\n\r\n let result = 0;\r\n\r\n const x = v12.dot(v12) * v34.dot(v34);\r\n if (x > 0) {\r\n result = v12.dot(v34) / Math.sqrt(x);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _kappa(prevPrev, res, nextNext) {\r\n const curCA = this._residueGetCAlpha(res);\r\n const ppCA = this._residueGetCAlpha(prevPrev);\r\n const nnCA = this._residueGetCAlpha(nextNext);\r\n if (curCA === null || ppCA === null || nnCA === null) {\r\n return 180;\r\n }\r\n\r\n const ckap = this._cosinusAngle(curCA, ppCA, nnCA, curCA);\r\n const skap = Math.sqrt(1 - ckap * ckap);\r\n return Math.atan2(skap, ckap) * 180 / Math.PI;\r\n }\r\n\r\n _isHelixStart(res, stride) {\r\n return (this._helixFlags[stride][res] === HelixFlag.START\r\n || this._helixFlags[stride][res] === HelixFlag.START_AND_END);\r\n }\r\n\r\n _buildBetaSheets() {\r\n // find bridges\r\n // check each chain against each other chain, and against itself\r\n const bridges = [];\r\n for (let a = 0; a < this._complex._chains.length; ++a) {\r\n const lenA = this._chainLengths[a];\r\n if (lenA <= 4) {\r\n continue;\r\n }\r\n\r\n const chainA = this._complex._chains[a].getResidues();\r\n\r\n for (let b = a; b < this._complex._chains.length; ++b) {\r\n const lenB = this._chainLengths[b];\r\n if (lenB <= 4) {\r\n continue;\r\n }\r\n\r\n const chainB = this._complex._chains[b].getResidues();\r\n\r\n for (let i = 1; i + 1 < lenA; ++i) {\r\n const ri = chainA[i];\r\n\r\n let j = 1;\r\n if (b === a) {\r\n j = i + 3; // check for self-bridges forward down the chain\r\n }\r\n\r\n for (; j + 1 < lenB; ++j) {\r\n const rj = chainB[j];\r\n\r\n const type = this._testBridge(chainA, i, chainB, j);\r\n if (type === BridgeType.NO_BRIDGE) {\r\n continue;\r\n }\r\n\r\n // there is a bridge, try to attach it to previously found sequence\r\n let found = false;\r\n for (const bridge of bridges) {\r\n if (type !== bridge.type || ri._index !== bridge.i[bridge.i.length - 1] + 1) {\r\n continue;\r\n }\r\n\r\n if (type === BridgeType.PARALLEL && bridge.j[bridge.j.length - 1] + 1 === rj._index) {\r\n bridge.i.push(ri._index);\r\n bridge.j.push(rj._index);\r\n found = true;\r\n break;\r\n }\r\n\r\n if (type === BridgeType.ANTI_PARALLEL && bridge.j[0] - 1 === rj._index) {\r\n bridge.i.push(ri._index);\r\n bridge.j.unshift(rj._index);\r\n found = true;\r\n break;\r\n }\r\n }\r\n\r\n // this bridge cannot be attached anywhere, start a new sequence\r\n if (!found) {\r\n bridges.push({\r\n type,\r\n i: [ri._index],\r\n chainI: ri.getChain()._index,\r\n j: [rj._index],\r\n chainJ: rj.getChain()._index,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // extend ladders\r\n bridges.sort((a, b) => {\r\n if (a.chainI < b.chainI || (a.chainI === b.chainI && a.i[0] < b.i[0])) {\r\n return -1;\r\n }\r\n return 1;\r\n });\r\n\r\n for (let i = 0; i < bridges.length; ++i) {\r\n for (let j = i + 1; j < bridges.length; ++j) {\r\n const ibi = bridges[i].i[0];\r\n const iei = bridges[i].i[bridges[i].i.length - 1];\r\n const jbi = bridges[i].j[0];\r\n const jei = bridges[i].j[bridges[i].j.length - 1];\r\n const ibj = bridges[j].i[0];\r\n const iej = bridges[j].i[bridges[j].i.length - 1];\r\n const jbj = bridges[j].j[0];\r\n const jej = bridges[j].j[bridges[j].j.length - 1];\r\n\r\n if (bridges[i].type !== bridges[j].type\r\n || this._hasChainBreak(Math.min(ibi, ibj), Math.max(iei, iej))\r\n || this._hasChainBreak(Math.min(jbi, jbj), Math.max(jei, jej))\r\n || ibj - iei >= 6 || (iei >= ibj && ibi <= iej)) {\r\n continue;\r\n }\r\n\r\n let bulge = false;\r\n if (bridges[i].type === BridgeType.PARALLEL) {\r\n bulge = ((jbj - jei < 6 && ibj - iei < 3) || (jbj - jei < 3));\r\n } else {\r\n bulge = ((jbi - jej < 6 && ibj - iei < 3) || (jbi - jej < 3));\r\n }\r\n\r\n if (bulge) {\r\n bridges[i].i = bridges[i].i.concat(bridges[j].i);\r\n if (bridges[i].type === BridgeType.PARALLEL) {\r\n bridges[i].j = bridges[i].j.concat(bridges[j].j);\r\n } else {\r\n bridges[i].j = bridges[j].j.concat(bridges[i].j);\r\n }\r\n bridges.splice(j--, 1);\r\n }\r\n }\r\n }\r\n\r\n // Sheet\r\n const ladderset = new Set();\r\n for (let i = 0; i < bridges.length; ++i) {\r\n ladderset.add(bridges[i]);\r\n }\r\n\r\n let sheet = 1;\r\n let ladder = 0;\r\n while (ladderset.size > 0) {\r\n let bridge = ladderset.values().next().value;\r\n ladderset.delete(bridge);\r\n\r\n const sheetset = new Set();\r\n sheetset.add(bridge);\r\n\r\n let toMove;\r\n do {\r\n toMove = new Set();\r\n for (const a of sheetset.values()) {\r\n for (const b of ladderset.values()) {\r\n if (this._areBridgesLinked(a, b)) {\r\n toMove.add(b);\r\n }\r\n }\r\n }\r\n for (bridge of toMove.values()) {\r\n sheetset.add(bridge);\r\n ladderset.delete(bridge);\r\n }\r\n } while (toMove.size > 0);\r\n\r\n for (bridge of sheetset.values()) {\r\n bridge.ladder = ladder;\r\n bridge.sheet = sheet;\r\n bridge.link = sheetset;\r\n ++ladder;\r\n }\r\n\r\n ++sheet;\r\n }\r\n\r\n for (let i = 0; i < bridges.length; ++i) {\r\n const bridge = bridges[i];\r\n\r\n // find out if any of the i and j set members already have\r\n // a bridge assigned, if so, we're assigning bridge 2\r\n\r\n let betai = 0;\r\n let betaj = 0;\r\n\r\n for (let l = 0; l < bridge.i.length; ++l) {\r\n if (this._betaPartners[bridge.i[l]][0]) {\r\n betai = 1;\r\n break;\r\n }\r\n }\r\n\r\n for (let l = 0; l < bridge.j.length; ++l) {\r\n if (this._betaPartners[bridge.j[l]][0]) {\r\n betaj = 1;\r\n break;\r\n }\r\n }\r\n\r\n let ss = StructureType.BRIDGE;\r\n if (bridge.i.length > 1) {\r\n ss = StructureType.STRAND;\r\n }\r\n\r\n if (bridge.type === BridgeType.PARALLEL) {\r\n let j = 0;\r\n for (let k = 0; k < bridge.i.length; ++k) {\r\n this._betaPartners[bridge.i[k]][betai] = {\r\n residue: bridge.j[j++],\r\n ladder: bridge.ladder,\r\n parallel: true,\r\n };\r\n }\r\n\r\n j = 0;\r\n for (let k = 0; k < bridge.j.length; ++k) {\r\n this._betaPartners[bridge.j[k]][betaj] = {\r\n residue: bridge.i[j++],\r\n ladder: bridge.ladder,\r\n parallel: true,\r\n };\r\n }\r\n } else {\r\n let j = bridge.j.length - 1;\r\n for (let k = 0; k < bridge.i.length; ++k) {\r\n this._betaPartners[bridge.i[k]][betai] = {\r\n residue: bridge.j[j--],\r\n ladder: bridge.ladder,\r\n parallel: false,\r\n };\r\n }\r\n\r\n j = bridge.i.length - 1;\r\n for (let k = 0; k < bridge.j.length; ++k) {\r\n this._betaPartners[bridge.j[k]][betaj] = {\r\n residue: bridge.i[j--],\r\n ladder: bridge.ladder,\r\n parallel: false,\r\n };\r\n }\r\n }\r\n\r\n for (let k = bridge.i[0]; k <= bridge.i[bridge.i.length - 1]; ++k) {\r\n if (this._ss[k] !== StructureType.STRAND) {\r\n this._ss[k] = ss;\r\n this._sheet[k] = bridge.sheet;\r\n }\r\n }\r\n\r\n for (let k = bridge.j[0]; k <= bridge.j[bridge.j.length - 1]; ++k) {\r\n if (this._ss[k] !== StructureType.STRAND) {\r\n this._ss[k] = ss;\r\n this._sheet[k] = bridge.sheet;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _testBridge(chainA, from, chainB, to) {\r\n let result = BridgeType.NO_BRIDGE;\r\n\r\n const a = chainA[from - 1]._index;\r\n const b = chainA[from]._index;\r\n const c = chainA[from + 1]._index;\r\n const d = chainB[to - 1]._index;\r\n const e = chainB[to]._index;\r\n const f = chainB[to + 1]._index;\r\n\r\n const isBond = this._hbonds.isBond.bind(this._hbonds);\r\n if ((isBond(c, e) && isBond(e, a)) || (isBond(f, b) && isBond(b, d))) {\r\n result = BridgeType.PARALLEL;\r\n } else if ((isBond(c, d) && isBond(f, a)) || (isBond(e, b) && isBond(b, e))) {\r\n result = BridgeType.ANTI_PARALLEL;\r\n }\r\n return result;\r\n }\r\n\r\n // return true if any of the residues in bridge a is identical to any of the residues in bridge b\r\n _areBridgesLinked(a, b) {\r\n const ai = new Set(a.i);\r\n const aj = new Set(a.j);\r\n\r\n for (const i of b.i) {\r\n if (ai.has(i) || aj.has(i)) {\r\n return true;\r\n }\r\n }\r\n\r\n for (const i of b.j) {\r\n if (ai.has(i) || aj.has(i)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _hasChainBreak(from, to) {\r\n for (let i = from + 1; i <= to; ++i) {\r\n if (this._complex._residues[i]._sequence !== this._complex._residues[i - 1]._sequence + 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nSecondaryStructureMap.StructureType = StructureType;\r\n","import * as THREE from 'three';\r\nimport logger from '../utils/logger';\r\nimport Atom from './Atom';\r\nimport Chain from './Chain';\r\nimport Helix from './Helix';\r\nimport Strand from './Strand';\r\nimport Sheet from './Sheet';\r\nimport Component from './Component';\r\nimport ResidueType from './ResidueType';\r\nimport Bond from './Bond';\r\nimport AutoBond from './AutoBond';\r\nimport AromaticLoopsMarker from './AromaticLoopsMarker';\r\nimport BiologicalUnit from './BiologicalUnit';\r\nimport selectors from './selectors';\r\nimport VoxelWorld from './VoxelWorld';\r\nimport SecondaryStructureMap from './SecondaryStructureMap';\r\nimport StructuralElement from './StructuralElement';\r\n\r\nconst VOXEL_SIZE = 5.0;\r\n\r\nconst { StructureType } = SecondaryStructureMap;\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\n// see http://www.wwpdb.org/documentation/file-format-content/format33/sect5.html#HELIX\r\nconst helixClassMap = {\r\n [StructureType.HELIX_ALPHA]: 1,\r\n [StructureType.HELIX_PI]: 3,\r\n [StructureType.HELIX_310]: 5,\r\n};\r\n\r\nconst loopMap = {\r\n [StructureType.BRIDGE]: StructuralElementType.BRIDGE,\r\n [StructureType.TURN]: StructuralElementType.TURN,\r\n [StructureType.BEND]: StructuralElementType.BEND,\r\n [StructureType.LOOP]: StructuralElementType.COIL,\r\n};\r\n\r\n/**\r\n * The entire complex of the molecules under study.\r\n *\r\n * @exports Complex\r\n * @constructor\r\n */\r\nclass Complex {\r\n constructor() {\r\n this._chains = [];\r\n this._components = [];\r\n this._helices = [];\r\n this._sheets = [];\r\n this.structures = [];\r\n\r\n this._residueTypes = Object.create(ResidueType.StandardTypes);\r\n this._atoms = [];\r\n this._residues = [];\r\n this._bonds = [];\r\n this._sgroups = [];\r\n this._molecules = [];\r\n this._maskNeedsUpdate = false;\r\n\r\n this.metadata = {};\r\n\r\n this.symmetry = [];\r\n this.units = [new BiologicalUnit(this)];\r\n this._currentUnit = 0; // default biological unit is the asymmetric unit\r\n }\r\n\r\n addAtom(atom) {\r\n const index = this._atoms.length;\r\n this._atoms.push(atom);\r\n return index;\r\n }\r\n\r\n addSheet(sheet) {\r\n const index = this._sheets.length;\r\n this._sheets.push(sheet);\r\n return index;\r\n }\r\n\r\n addHelix(helix) {\r\n const index = this._helices.length;\r\n this._helices.push(helix);\r\n return index;\r\n }\r\n\r\n getAtoms() {\r\n return this._atoms;\r\n }\r\n\r\n getBonds() {\r\n return this._bonds;\r\n }\r\n\r\n getAtomCount() {\r\n return this._atoms.length;\r\n }\r\n\r\n addResidue(residue) {\r\n const index = this._residues.length;\r\n this._residues.push(residue);\r\n return index;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n this.forEachChain((chain) => {\r\n chain.updateToFrame(frameData);\r\n });\r\n }\r\n\r\n addResidueType(resName) {\r\n const rt = this._residueTypes[resName] = new ResidueType(resName, 'Unknown', '');\r\n return rt;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residues.length;\r\n }\r\n\r\n getResidues() {\r\n return this._residues;\r\n }\r\n\r\n getSGroupCount() {\r\n return this._sgroups.length;\r\n }\r\n\r\n getSGroups() {\r\n return this._sgroups;\r\n }\r\n\r\n /*\r\n Extract atom by its fullname: #chainName#.#residueId#.#atomName#\r\n */\r\n getAtomByFullname(fullName) {\r\n const parts = fullName.split('.');\r\n if (parts.length !== 3) {\r\n return null;\r\n }\r\n\r\n const chainName = parts[0];\r\n const resId = parseInt(parts[1], 10);\r\n if (Number.isNaN(resId)) {\r\n return null;\r\n }\r\n const atomName = parts[2].toUpperCase();\r\n\r\n let currAtom = null;\r\n this.forEachChain((chain) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (chain._name.localeCompare(chainName) === 0) {\r\n chain.forEachResidue((residue) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (residue._sequence === resId) {\r\n residue.forEachAtom((atom) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (atomName.localeCompare(atom.name) === 0) {\r\n currAtom = atom;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n return currAtom;\r\n }\r\n\r\n /**\r\n * Create a new chain.\r\n *\r\n * @param {string} name - Chain name.\r\n * @returns {Chain} - Newly created chain.\r\n */\r\n addChain(name) {\r\n const result = new Chain(this, name);\r\n this._chains.push(result);\r\n return result;\r\n }\r\n\r\n getChain(name) {\r\n for (let i = 0, n = this._chains.length; i < n; ++i) {\r\n const chain = this._chains[i];\r\n if (chain.getName() === name) {\r\n return chain;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getChainCount() {\r\n return this._chains.length;\r\n }\r\n\r\n getMolecules() {\r\n return this._molecules;\r\n }\r\n\r\n getMoleculeCount() {\r\n return this._molecules.length;\r\n }\r\n\r\n forEachAtom(process) {\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n process(atoms[i]);\r\n }\r\n }\r\n\r\n forEachBond(process) {\r\n const bonds = this._bonds;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]);\r\n }\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n forEachChain(process) {\r\n const chains = this._chains;\r\n for (let i = 0, n = chains.length; i < n; ++i) {\r\n process(chains[i]);\r\n }\r\n }\r\n\r\n forEachMolecule(process) {\r\n const molecules = this._molecules;\r\n const n = molecules.length;\r\n for (let i = 0; i < n; ++i) {\r\n process(molecules[i]);\r\n }\r\n }\r\n\r\n forEachSGroup(process) {\r\n const groups = this._sgroups;\r\n for (let i = 0, n = groups.length; i < n; ++i) {\r\n process(groups[i]);\r\n }\r\n }\r\n\r\n forEachComponent(process) {\r\n const components = this._components;\r\n for (let i = 0, n = components.length; i < n; ++i) {\r\n process(components[i]);\r\n }\r\n }\r\n\r\n forEachVisibleComponent(process) {\r\n const components = this._components;\r\n for (let i = 0, n = components.length; i < n; ++i) {\r\n process(components[i]);\r\n }\r\n }\r\n\r\n addBond(left, right, order, type, fixed) {\r\n const bond = new Bond(left, right, order, type, fixed);\r\n this._bonds.push(bond);\r\n return bond;\r\n }\r\n\r\n getBondCount() {\r\n return this._bonds.length;\r\n }\r\n\r\n getResidueType(name) {\r\n return this._residueTypes[name] || null;\r\n }\r\n\r\n getUnifiedSerial(chain, serial, iCode) {\r\n /* eslint-disable no-magic-numbers */\r\n const maxSerial = 65536;\r\n const chainShift = maxSerial * 256;\r\n /* eslint-enable no-magic-numbers */\r\n return serial + iCode * maxSerial + chain * chainShift;\r\n }\r\n\r\n splitUnifiedSerial(uniSerial) {\r\n /* eslint-disable no-magic-numbers */\r\n const maxSerial = 65536;\r\n const chainShift = maxSerial * 256;\r\n /* eslint-enable no-magic-numbers */\r\n const chainId = Math.floor(uniSerial / chainShift);\r\n const remnant = uniSerial - chainId * chainShift;\r\n const insCode = Math.floor(remnant / maxSerial);\r\n const ser = remnant - insCode * maxSerial;\r\n return { chain: chainId, serial: ser, iCode: insCode };\r\n }\r\n\r\n _fillCmpEdit() {\r\n const self = this;\r\n const components = this._components;\r\n\r\n function addComp() {\r\n const comp = new Component(self);\r\n comp._index = components.length;\r\n components[comp._index] = comp;\r\n return comp;\r\n }\r\n\r\n this.forEachChain((chain) => {\r\n const residues = chain._residues;\r\n const resCount = residues.length;\r\n if (resCount < 1) {\r\n return;\r\n }\r\n let comp = addComp();\r\n let currStart = residues[0]._index;\r\n\r\n for (let i = 0; i < resCount; ++i) {\r\n const currRes = residues[i];\r\n currRes._component = comp;\r\n\r\n const nextRes = i === resCount - 1 ? null : residues[i + 1];\r\n if (!nextRes\r\n || !currRes.isConnected(nextRes)\r\n || currRes._index !== nextRes._index - 1) {\r\n // the last condition is broken and incorrect\r\n // the refactoring of the Component is required in order to fix this issue\r\n comp.setSubDivs([{\r\n start: currStart,\r\n end: currRes._index,\r\n }]);\r\n if (nextRes) {\r\n currStart = nextRes._index;\r\n comp = addComp();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n // This function was added in the moment of despair\r\n // It was the dark times for miew\r\n _fillCmpNoedit() {\r\n const comp = new Component(this);\r\n comp._index = 0;\r\n\r\n const residues = this._residues;\r\n const resCount = residues.length;\r\n if (resCount === 0) {\r\n return;\r\n }\r\n\r\n const currSubDivs = [];\r\n let currStart = 0;\r\n for (let i = 0; i < resCount; ++i) {\r\n const currRes = residues[i];\r\n currRes._component = comp;\r\n\r\n const nextRes = i === resCount - 1 ? null : residues[i + 1];\r\n if (!nextRes\r\n || !currRes.isConnected(nextRes)) {\r\n // wrap up this interval\r\n currSubDivs[currSubDivs.length] = {\r\n start: currStart,\r\n end: i,\r\n };\r\n if (nextRes) {\r\n currStart = i + 1;\r\n }\r\n }\r\n }\r\n\r\n comp.setSubDivs(currSubDivs);\r\n this._components[comp._index] = comp;\r\n }\r\n\r\n /**\r\n * Fill components information.\r\n * @param {boolean} enableEditing - Restructure Complex to enable per-component editing.\r\n */\r\n _fillComponents(enableEditing) {\r\n if (enableEditing) {\r\n this._fillCmpEdit();\r\n } else {\r\n this._fillCmpNoedit();\r\n }\r\n }\r\n\r\n getCurrentUnit() {\r\n return this._currentUnit;\r\n }\r\n\r\n getDefaultBoundaries() {\r\n return this.units[0].getBoundaries();\r\n }\r\n\r\n getBoundaries() {\r\n return this.units[this._currentUnit].getBoundaries();\r\n }\r\n\r\n getTransforms() {\r\n return this.units[this._currentUnit].getTransforms();\r\n }\r\n\r\n getSelector() {\r\n return this.units[this._currentUnit].getSelector();\r\n }\r\n\r\n resetCurrentUnit() {\r\n this._currentUnit = 0;\r\n this.setCurrentUnit(1);\r\n }\r\n\r\n setCurrentUnit(newUnit) {\r\n if (newUnit !== null && newUnit !== undefined\r\n && newUnit !== this._currentUnit\r\n && newUnit >= 0\r\n && newUnit < this.units.length) {\r\n this._currentUnit = newUnit;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n _computeBounds() {\r\n const { units } = this;\r\n for (let i = 0, n = units.length; i < n; ++i) {\r\n units[i].computeBoundaries();\r\n }\r\n }\r\n\r\n onAtomPositionChanged() {\r\n this.forEachChain((a) => {\r\n a._finalize();\r\n });\r\n this.forEachComponent((c) => {\r\n c.update();\r\n });\r\n // Update bounding sphere and box\r\n this._computeBounds();\r\n this._finalizeBonds();\r\n this.forEachSGroup((s) => {\r\n s._rebuildSGroupOnAtomChange();\r\n });\r\n }\r\n\r\n update() {\r\n if (this._maskNeedsUpdate) {\r\n this.updateStructuresMask();\r\n this._maskNeedsUpdate = false;\r\n }\r\n }\r\n\r\n _finalizeBonds() {\r\n const bonds = this.getBonds();\r\n const n = bonds.length;\r\n for (let i = 0; i < n; ++i) {\r\n bonds[i]._index = i;\r\n }\r\n }\r\n\r\n /**\r\n * Finalizes complex's inner data(i.e. after parsing).\r\n * @param {objects} opts - Build bonds automatically.\r\n * @param {boolean} opts.needAutoBonding - Build bonds automatically.\r\n * @param {boolean} opts.detectAromaticLoops - Find/mark aromatic loops.\r\n * @param {boolean} opts.enableEditing - Restructure Complex to enable per-component editing.\r\n * @param {Array} [opts.serialAtomMap] - Array of atoms ordered by their serials.\r\n */\r\n finalize(opts) {\r\n opts = opts || {};\r\n // Put bonds into atoms\r\n const bonds = this._bonds;\r\n let i;\r\n let n;\r\n // remove invalid bonds\r\n for (i = bonds.length - 1; i >= 0; i--) {\r\n const bond = bonds[i];\r\n if (bond._left === null || bond._right === null) {\r\n bonds.splice(i, 1);\r\n } else {\r\n bond._left.bonds.push(bond);\r\n bond._right.bonds.push(bond);\r\n }\r\n }\r\n\r\n const residues = this._residues;\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n residues[i]._finalize();\r\n }\r\n\r\n this.forEachChain((a) => {\r\n a._finalize();\r\n });\r\n\r\n // WARNING! this MUST be done BEFORE computeBounds is called\r\n const { units } = this;\r\n for (i = 0, n = units.length; i < n; ++i) {\r\n units[i].finalize();\r\n }\r\n // try setting first biomolecule by defaults\r\n this.setCurrentUnit(1);\r\n\r\n const residueHash = {};\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n const res = residues[i];\r\n // This code is extremely dangerous for non-PDB formats\r\n residueHash[this.getUnifiedSerial(\r\n res.getChain().getName().charCodeAt(0),\r\n res.getSequence(),\r\n res.getICode().charCodeAt(0),\r\n )] = res;\r\n }\r\n\r\n const { structures } = this;\r\n for (i = 0, n = structures.length; i < n; ++i) {\r\n structures[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n const helices = this._helices;\r\n for (i = 0, n = helices.length; i < n; ++i) {\r\n helices[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n const sheets = this._sheets;\r\n for (i = 0, n = sheets.length; i < n; ++i) {\r\n sheets[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n // Update bounding sphere and box\r\n this._computeBounds();\r\n\r\n const atoms = this._atoms;\r\n for (i = 0, n = atoms.length; i < n; ++i) {\r\n const currAtom = atoms[i];\r\n currAtom.index = i;\r\n }\r\n\r\n if (opts.needAutoBonding) {\r\n // Ignore errors during autobonding\r\n try {\r\n const autoConnector = new AutoBond(this);\r\n autoConnector.build();\r\n autoConnector.destroy();\r\n } catch (e) {\r\n console.warn('Autobonding failed:', e);\r\n }\r\n }\r\n\r\n const chains = this._chains;\r\n for (i = 0, n = chains.length; i < n; ++i) {\r\n chains[i]._index = i;\r\n }\r\n\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n residues[i]._index = i;\r\n }\r\n\r\n // mark non-polar hydrogens\r\n for (i = 0, n = atoms.length; i < n; ++i) {\r\n const atom = atoms[i];\r\n if (atom.flags & Atom.Flags.HYDROGEN && atom.bonds.length === 1) {\r\n const bond = atom.bonds[0];\r\n const other = (bond._left !== atom && bond._left) || bond._right;\r\n if (other.flags & Atom.Flags.CARBON) {\r\n atom.flags |= Atom.Flags.NONPOLARH;\r\n }\r\n }\r\n }\r\n\r\n this._finalizeBonds();\r\n this._fillComponents(opts.enableEditing);\r\n\r\n const marker = new AromaticLoopsMarker(this);\r\n marker.markCycles();\r\n if (opts.detectAromaticLoops) { // TODO remove this condition clause, it is for debug purposes only!\r\n marker.detectCycles(); // TODO add conditional detection\r\n }\r\n\r\n this._finalizeMolecules();\r\n }\r\n\r\n _finalizeMolecules() {\r\n // add reference to molecule into residue\r\n for (let i = 0; i < this._molecules.length; i++) {\r\n const molecule = this._molecules[i];\r\n const count = molecule.residues.length;\r\n for (let j = 0; j < count; j++) {\r\n const residue = molecule.residues[j];\r\n residue._molecule = molecule;\r\n }\r\n }\r\n }\r\n\r\n updateStructuresMask() {\r\n const updater = (structure) => structure.collectMask();\r\n this.forEachResidue(updater);\r\n this.forEachChain(updater);\r\n this.forEachMolecule(updater);\r\n }\r\n\r\n countAtomsByMask(mask) {\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if ((atom.mask & mask) !== 0) {\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n getNumAtomsBySelector(selector) {\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom)) {\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n resetAtomMask(mask) {\r\n this.forEachAtom((atom) => {\r\n atom.mask = mask;\r\n });\r\n }\r\n\r\n markAtoms(selector, mask) {\r\n const setMask = mask;\r\n const clearMask = ~setMask;\r\n let count = 0;\r\n const totalSelector = selectors.keyword('And')(selector, this.getSelector());\r\n\r\n this.forEachAtom((atom) => {\r\n if (totalSelector.includesAtom(atom)) {\r\n atom.mask |= setMask;\r\n count++;\r\n } else {\r\n atom.mask &= clearMask;\r\n }\r\n });\r\n this._maskNeedsUpdate = true;\r\n\r\n return count;\r\n }\r\n\r\n markAtomsAdditionally(selector, mask) {\r\n const setMask = mask;\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom) && (atom.mask & mask) !== mask) {\r\n atom.mask |= setMask;\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n clearAtomBits(mask) {\r\n const clearMask = ~mask;\r\n this.forEachAtom((atom) => {\r\n atom.mask &= clearMask;\r\n });\r\n const reseter = (a) => {\r\n a._mask &= clearMask;\r\n };\r\n this.forEachAtom(reseter);\r\n this.forEachResidue(reseter);\r\n this.forEachChain(reseter);\r\n this.forEachMolecule(reseter);\r\n }\r\n\r\n getAtomNames() {\r\n if (this.hasOwnProperty('_atomNames')) {\r\n return this._atomNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[atom.name] = 1;\r\n });\r\n this._atomNames = Object.keys(dict);\r\n\r\n return this._atomNames;\r\n }\r\n\r\n getElements() {\r\n if (this.hasOwnProperty('_elements')) {\r\n return this._elements;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[atom.element.name] = 1;\r\n });\r\n this._elements = Object.keys(dict);\r\n\r\n return this._elements;\r\n }\r\n\r\n getResidueNames() {\r\n if (this.hasOwnProperty('_residueNames')) {\r\n return this._residueNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachResidue((res) => {\r\n dict[res._type._name] = 1;\r\n });\r\n this._residueNames = Object.keys(dict);\r\n\r\n return this._residueNames;\r\n }\r\n\r\n getChainNames() {\r\n if (this.hasOwnProperty('_chainNames')) {\r\n return this._chainNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachChain((chain) => {\r\n dict[chain._name] = 1;\r\n });\r\n this._chainNames = Object.keys(dict);\r\n\r\n return this._chainNames;\r\n }\r\n\r\n getAltLocNames() {\r\n if (this.hasOwnProperty('_altlocNames')) {\r\n return this._altlocNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[String.fromCharCode(atom.location)] = 1;\r\n });\r\n this._altlocNames = Object.keys(dict);\r\n\r\n return this._altlocNames;\r\n }\r\n\r\n getVoxelWorld() {\r\n if (!this.hasOwnProperty('_voxelWorld')) {\r\n try {\r\n this._voxelWorld = new VoxelWorld(\r\n this.getDefaultBoundaries().boundingBox,\r\n new THREE.Vector3(VOXEL_SIZE, VOXEL_SIZE, VOXEL_SIZE),\r\n );\r\n this._voxelWorld.addAtoms(this);\r\n } catch (e) {\r\n logger.warn('Unable to create voxel world');\r\n this._voxelWorld = null;\r\n }\r\n }\r\n\r\n return this._voxelWorld;\r\n }\r\n\r\n /**\r\n * Simple function to make unified routine procedure without code duplication.\r\n * @param {Array} srcArray - Source chemical structure array (will be part of resulting chemical structure array).\r\n * @param {Array} dstArray - Resulting chemical structure array.\r\n * @param {number} param - Parameter for processor.\r\n * @param {function} functor - Processor for every element in array.\r\n */\r\n addElement(srcArray, dstArray, param, functor) {\r\n const { length } = srcArray;\r\n for (let i = 0; i < length; ++i) {\r\n const elem = srcArray[i];\r\n functor(elem, param);\r\n dstArray.push(elem);\r\n }\r\n }\r\n\r\n // this function joins multiple complexes into one (this)\r\n // atom, bond, ... objects are reused -- so input complexes are no longer valid\r\n joinComplexes(complexes) {\r\n // clear target complex\r\n this._chains = [];\r\n this._components = [];\r\n this._helices = [];\r\n this._sheets = [];\r\n this.structures = [];\r\n this._atoms = [];\r\n this._residues = [];\r\n this._bonds = [];\r\n this._sgroups = [];\r\n\r\n const self = this;\r\n let atomBias = 0;\r\n let bondBias = 0;\r\n let residueBias = 0;\r\n let chainBias = 0;\r\n let componentBias = 0;\r\n\r\n function processAtom(atom, bias) {\r\n atom.serial += bias;\r\n atom.index += bias;\r\n }\r\n\r\n function processBond(bond, bias) {\r\n bond._index += bias;\r\n }\r\n\r\n function processResidue(residue, bias) {\r\n residue._index += bias;\r\n }\r\n\r\n function processChain(chain, bias) {\r\n chain._complex = self;\r\n chain._index += bias;\r\n }\r\n\r\n function processComponent(component, bias) {\r\n component._complex = self;\r\n component._index += bias;\r\n }\r\n\r\n /**\r\n * Simple function to do nothing.\r\n */\r\n function doNothing() {\r\n }\r\n\r\n for (let i = 0; i < complexes.length; ++i) {\r\n const c = complexes[i];\r\n this.addElement(c._atoms, this._atoms, atomBias, processAtom);\r\n this.addElement(c._bonds, this._bonds, bondBias, processBond);\r\n this.addElement(c._residues, this._residues, residueBias, processResidue);\r\n this.addElement(c._chains, this._chains, chainBias, processChain);\r\n this.addElement(c._sheets, this._sheets, 0, doNothing);\r\n this.addElement(c._helices, this._helices, 0, doNothing);\r\n this.addElement(c._sgroups, this._sgroups, 0, doNothing);\r\n this.addElement(c._components, this._components, componentBias, processComponent);\r\n this.addElement(c.structures, this.structures, 0, doNothing);\r\n // merge residue types\r\n for (const rt in c._residueTypes) {\r\n if (c._residueTypes.hasOwnProperty(rt)) {\r\n this._residueTypes[rt] = c._residueTypes[rt];\r\n }\r\n }\r\n\r\n atomBias += c._atoms.length;\r\n bondBias += c._bonds.length;\r\n residueBias += c._residues.length;\r\n chainBias += c._chains.length;\r\n componentBias += c._components.length;\r\n }\r\n\r\n this._computeBounds();\r\n }\r\n\r\n /**\r\n * Replace secondary structure with calculated one.\r\n *\r\n * DSSP algorithm implementation is used.\r\n *\r\n * Kabsch W, Sander C. 1983. Dictionary of protein secondary structure: pattern recognition of hydrogen-bonded and\r\n * geometrical features. Biopolymers. 22(12):2577-2637. doi:10.1002/bip.360221211.\r\n */\r\n dssp() {\r\n const ssMap = new SecondaryStructureMap(this);\r\n\r\n const structures = this.structures = [];\r\n const helices = this._helices = [];\r\n const sheets = this._sheets = [];\r\n\r\n const getSheet = (index) => {\r\n let item = sheets[index];\r\n if (!item) {\r\n item = sheets[index] = new Sheet(String(index), 0);\r\n }\r\n return item;\r\n };\r\n\r\n let lastCode;\r\n let lastSheetIndex;\r\n let lastHelixIndex = 0;\r\n let curStructure = null;\r\n for (let i = 0, n = this._residues.length; i < n; ++i) {\r\n const curCode = ssMap._ss[i];\r\n const curResidue = this._residues[i];\r\n const curSheetIndex = ssMap._sheet[i];\r\n\r\n // expand the last structure\r\n if (curCode === lastCode && curSheetIndex === lastSheetIndex) {\r\n curResidue._secondary = curStructure;\r\n if (curStructure) {\r\n curStructure.term = curResidue;\r\n }\r\n if (curStructure instanceof Helix) {\r\n curStructure.length++;\r\n }\r\n continue;\r\n }\r\n\r\n // create a new structure\r\n const helixClass = helixClassMap[curCode];\r\n const loopType = loopMap[curCode];\r\n if (curCode === StructureType.STRAND) {\r\n const curSheet = getSheet(curSheetIndex);\r\n curStructure = new Strand(curSheet, curResidue, curResidue, 0, null, null);\r\n curSheet.addStrand(curStructure);\r\n } else if (helixClass !== undefined) {\r\n lastHelixIndex++;\r\n curStructure = new Helix(helixClass, curResidue, curResidue, lastHelixIndex, String(lastHelixIndex), '', 1);\r\n helices.push(curStructure);\r\n } else if (loopType !== undefined) {\r\n curStructure = new StructuralElement(loopType, curResidue, curResidue);\r\n } else {\r\n curStructure = null;\r\n }\r\n\r\n if (curStructure) {\r\n structures.push(curStructure);\r\n }\r\n\r\n curResidue._secondary = curStructure;\r\n\r\n lastCode = curCode;\r\n lastSheetIndex = curSheetIndex;\r\n }\r\n\r\n this._sheets = sheets.filter((_sheet) => true); // squeeze sheets array\r\n }\r\n}\r\n\r\nComplex.prototype.id = 'Complex';\r\nComplex.prototype.name = '';\r\n\r\nexport default Complex;\r\n","import * as THREE from 'three';\r\nimport utils from '../utils';\r\n\r\nfunction pow2ceil(v) {\r\n let p = 2;\r\n v = (v - 1) >> 1;\r\n while (v) {\r\n p <<= 1;\r\n v >>= 1;\r\n }\r\n return p;\r\n}\r\n\r\n/**\r\n * Volume constructor\r\n *\r\n * @param {Object} type - Float32Array, Int8Array, etc...\r\n * @param {Object|Array} dimensions - number of data points on each axis (x, y, z)\r\n * @param {Box3} box - bounding box defining data place in metric space,\r\n * it's corners correspond to extreme data points\r\n * @param {Number} vecSize - dimension of the field data point (1 = scalar, 3 = 3D vector)\r\n * @param {Object} data - typed array of the same type as specified by the 1st parameter,\r\n * layout: point by point along X,\r\n * row by row along Y,\r\n * plane by plane along Z\r\n * @param {Number} volumeInfo - volume info values to define threshold to filter the noise\r\n */\r\n\r\nclass Volume {\r\n constructor(type, dimensions, box, vecSize, data, volumeInfo) {\r\n this._box = box.clone();\r\n this._dimVec = Math.max(Math.floor(vecSize || 1), 1);\r\n this._volumeInfo = volumeInfo;\r\n\r\n if (dimensions instanceof Array) {\r\n [this._dimX, this._dimY, this._dimZ] = dimensions;\r\n } else {\r\n this._dimX = dimensions.x;\r\n this._dimY = dimensions.y;\r\n this._dimZ = dimensions.z;\r\n }\r\n this._dimX = Math.max(Math.floor(this._dimX), 1);\r\n this._dimY = Math.max(Math.floor(this._dimY), 1);\r\n this._dimZ = Math.max(Math.floor(this._dimZ), 1);\r\n\r\n this._rowElements = this._dimVec * this._dimX;\r\n this._planeElements = this._rowElements * this._dimY;\r\n this._totalElements = this._planeElements * this._dimZ;\r\n\r\n this._data = data || utils.allocateTyped(type, this._totalElements);\r\n\r\n // override getter/setter for vector fields\r\n switch (this._dimVec) {\r\n case 1:\r\n break;\r\n\r\n case 2:\r\n this.getValue = function (x, y, z) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n return [this._data[idx], this._data[idx + 1]];\r\n };\r\n\r\n this.setValue = function (x, y, z, a, b) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] = a;\r\n this._data[idx + 1] = b;\r\n };\r\n\r\n this.addValue = function (x, y, z, a, b) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] += a;\r\n this._data[idx + 1] += b;\r\n };\r\n break;\r\n\r\n case 3:\r\n this.getValue = function (x, y, z) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n return [this._data[idx], this._data[idx + 1], this._data[idx + 2]];\r\n };\r\n\r\n this.setValue = function (x, y, z, a, b, c) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] = a;\r\n this._data[idx + 1] = b;\r\n this._data[idx + 2] = c;\r\n };\r\n\r\n this.addValue = function (x, y, z, a, b, c) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] += a;\r\n this._data[idx + 1] += b;\r\n this._data[idx + 2] += c;\r\n };\r\n break;\r\n\r\n default:\r\n throw new Error('Volume: invalid vector dimension');\r\n }\r\n }\r\n\r\n // default getter assumes it's a scalar field\r\n getValue(x, y, z) {\r\n return this._data[x + y * this._rowElements + z * this._planeElements];\r\n }\r\n\r\n // default setter assumes it's a scalar field\r\n setValue(x, y, z, val) {\r\n this._data[x + y * this._rowElements + z * this._planeElements] = val;\r\n }\r\n\r\n // default adder assumes it's a scalar field\r\n addValue(x, y, z, val) {\r\n this._data[x + y * this._rowElements + z * this._planeElements] += val;\r\n }\r\n\r\n getDimensions() {\r\n return [this._dimX, this._dimY, this._dimZ];\r\n }\r\n\r\n getBox() {\r\n return this._box;\r\n }\r\n\r\n getVolumeInfo() {\r\n return this._volumeInfo;\r\n }\r\n\r\n getCellSize() {\r\n const boxSize = new THREE.Vector3();\r\n this._box.getSize(boxSize);\r\n const res = new THREE.Vector3();\r\n res.x = this._dimX > 1 ? boxSize.x / (this._dimX - 1) : 0;\r\n res.y = this._dimY > 1 ? boxSize.y / (this._dimY - 1) : 0;\r\n res.z = this._dimZ > 1 ? boxSize.z / (this._dimZ - 1) : 0;\r\n return res;\r\n }\r\n\r\n computeGradient() {\r\n if (this._dimVec !== 1) {\r\n // gradient can only be computed for scalar fields\r\n return null;\r\n }\r\n\r\n // create a 3D vector field of gradients\r\n const gradient = new Volume(Float32Array, [this._dimX, this._dimY, this._dimZ], this._box, 3);\r\n\r\n // calculate cell side lengths\r\n const vl = this.getCellSize();\r\n\r\n // gradient axis scaling values and averaging factors, to correctly\r\n // calculate the gradient for volumes with irregular cell spacing\r\n const vs = new THREE.Vector3(-0.5 / vl.x, -0.5 / vl.y, -0.5 / vl.z);\r\n\r\n // TODO Check for intended bug in VMD (min is zero)\r\n function clamp(val, min, max) {\r\n return Math.min(max, Math.max(min, val));\r\n }\r\n\r\n const xSize = this._dimX;\r\n const ySize = this._dimY;\r\n const zSize = this._dimZ;\r\n const volMap = this._data;\r\n\r\n function _voxelValue(x, y, z) {\r\n return volMap[z * xSize * ySize + y * xSize + x];\r\n }\r\n\r\n for (let zi = 0; zi < zSize; ++zi) {\r\n const zm = clamp(zi - 1, 0, zSize - 1);\r\n const zp = clamp(zi + 1, 0, zSize - 1);\r\n\r\n for (let yi = 0; yi < ySize; ++yi) {\r\n const ym = clamp(yi - 1, 0, ySize - 1);\r\n const yp = clamp(yi + 1, 0, ySize - 1);\r\n\r\n for (let xi = 0; xi < xSize; ++xi) {\r\n const xm = clamp(xi - 1, 0, xSize - 1);\r\n const xp = clamp(xi + 1, 0, xSize - 1);\r\n\r\n // Calculate the volume gradient at each grid cell.\r\n // Gradients are now stored unnormalized, since we need them in pure\r\n // form in order to draw field lines etc. Shading code will now have\r\n // to do renormalization for itself on-the-fly.\r\n\r\n // XXX this gradient is only correct for orthogonal grids, since\r\n // we're using the array index offsets rather to calculate the gradient\r\n // rather than voxel coordinate offsets. This will have to be\r\n // re-worked for non-orthogonal datasets.\r\n\r\n gradient.setValue(\r\n xi,\r\n yi,\r\n zi,\r\n (_voxelValue(xp, yi, zi) - _voxelValue(xm, yi, zi)) * vs.x,\r\n (_voxelValue(xi, yp, zi) - _voxelValue(xi, ym, zi)) * vs.y,\r\n (_voxelValue(xi, yi, zp) - _voxelValue(xi, yi, zm)) * vs.z,\r\n );\r\n }\r\n }\r\n }\r\n\r\n return gradient;\r\n }\r\n\r\n normalize() {\r\n const data = this._data;\r\n\r\n // get min/max\r\n let min = data[0];\r\n let max = data[0];\r\n for (let i = 1; i < data.length; ++i) {\r\n min = Math.min(min, data[i]);\r\n max = Math.max(max, data[i]);\r\n }\r\n\r\n const d = 1.0 / (max - min);\r\n if (d === 0) {\r\n return;\r\n }\r\n\r\n // normalize\r\n for (let i = 0; i < data.length; ++i) {\r\n data[i] = d * (data[i] - min);\r\n }\r\n }\r\n\r\n getTiledTextureStride() {\r\n return [this._dimX + 2, this._dimY + 2];\r\n }\r\n\r\n buildTiledTexture() {\r\n let tilesX = Math.ceil(Math.sqrt(this._dimZ * this._dimY / this._dimX));\r\n\r\n let width = tilesX * (this._dimX + 2) - 1;\r\n width = pow2ceil(width);\r\n tilesX = Math.floor(width / (this._dimX + 2));\r\n\r\n const tilesY = Math.ceil(this._dimZ / tilesX);\r\n let height = tilesY * (this._dimY + 2) - 1;\r\n height = pow2ceil(height);\r\n\r\n const data = new Uint8Array(width * height);\r\n\r\n let src;\r\n let dst;\r\n for (let tileRow = 0; tileRow < tilesY; ++tileRow) {\r\n // process each pixel row of this tile row\r\n for (let row = 0; row < this._dimY; ++row) {\r\n src = tileRow * tilesX * this._planeElements + row * this._rowElements;\r\n dst = width * (tileRow * (this._dimY + 2) + row);\r\n // copy a series of rows through several XY planes\r\n for (let t = 0; t < tilesX; ++t) {\r\n // copy one row of one XY plane\r\n for (let x = 0; x < this._dimX; ++x) {\r\n data[dst++] = 255.0 * this._data[src++];\r\n }\r\n\r\n // repeat last pixel of previous tile\r\n data[dst++] = 255.0 * this._data[src - 1];\r\n\r\n if (t < tilesX - 1) {\r\n // skip to the same row of next XY plane\r\n src += this._planeElements - this._rowElements;\r\n // repeat first pixel of next tile\r\n data[dst++] = 255.0 * this._data[src];\r\n }\r\n }\r\n }\r\n }\r\n\r\n // fill pixels between tile rows with copy of edge pixels\r\n for (let tileRow = 0; tileRow < tilesY; ++tileRow) {\r\n // copy last pixel row of this tile row to the following pixel row of the texture\r\n src = width * (tileRow * (this._dimY + 2) + this._dimY - 1);\r\n dst = src + width;\r\n for (let x = 0; x < width; ++x) {\r\n data[dst++] = data[src++];\r\n }\r\n if (tileRow < tilesY - 1) {\r\n // copy first pixel row of next tile row to the preceding pixel row of the texture\r\n src = width * (tileRow + 1) * (this._dimY + 2);\r\n dst = src - width;\r\n for (let x = 0; x < width; ++x) {\r\n data[dst++] = data[src++];\r\n }\r\n }\r\n }\r\n\r\n const texture = new THREE.DataTexture(\r\n data,\r\n width,\r\n height,\r\n THREE.LuminanceFormat,\r\n THREE.UnsignedByteType,\r\n THREE.UVMapping,\r\n THREE.ClampToEdgeWrapping,\r\n THREE.ClampToEdgeWrapping,\r\n THREE.LinearFilter,\r\n THREE.LinearFilter,\r\n );\r\n texture.needsUpdate = true;\r\n return texture;\r\n }\r\n\r\n /* ********************************************************************************\r\n *\r\n * Methods that provide direct access to internal array (for better performance)\r\n *\r\n ******************************************************************************** */\r\n\r\n getData() {\r\n return this._data;\r\n }\r\n\r\n getDirectIdx(x, y, z) {\r\n return x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n }\r\n\r\n getStrideX() {\r\n return this._dimVec;\r\n }\r\n\r\n getStrideY() {\r\n return this._rowElements;\r\n }\r\n\r\n getStrideZ() {\r\n return this._planeElements;\r\n }\r\n}\r\n\r\nVolume.prototype.id = 'Volume';\r\n\r\nexport default Volume;\r\n","/**\r\n * Residue Molecule.\r\n *\r\n * @param {Complex} complex - Molecular complex this Molecule belongs to.\r\n * @param {String} name - Molecule's name.\r\n * @param {Integer} index - Molecule's index in file.\r\n *\r\n * @exports Molecule\r\n * @constructor\r\n */\r\nclass Molecule {\r\n constructor(complex, name, index) {\r\n this.complex = complex;\r\n this.name = name || '';\r\n this.residues = [];\r\n this.mask = 1 | 0;\r\n this.index = index || -1; // start with 1\r\n }\r\n\r\n forEachResidue(process) {\r\n const { residues } = this;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const { residues } = this;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n mask &= residues[i]._mask;\r\n }\r\n this.mask = mask;\r\n }\r\n}\r\n\r\nexport default Molecule;\r\n","import Atom from './chem/Atom';\r\nimport Element from './chem/Element';\r\nimport Bond from './chem/Bond';\r\nimport Residue from './chem/Residue';\r\nimport ResidueType from './chem/ResidueType';\r\nimport Chain from './chem/Chain';\r\nimport Helix from './chem/Helix';\r\nimport Strand from './chem/Strand';\r\nimport Sheet from './chem/Sheet';\r\nimport SGroup from './chem/SGroup';\r\nimport Assembly from './chem/Assembly';\r\nimport Complex from './chem/Complex';\r\nimport Volume from './chem/Volume';\r\nimport VoxelWorld from './chem/VoxelWorld';\r\nimport selectors from './chem/selectors';\r\nimport Molecule from './chem/Molecule';\r\n\r\nexport default {\r\n Atom,\r\n Element,\r\n Bond,\r\n Residue,\r\n ResidueType,\r\n Chain,\r\n Helix,\r\n Strand,\r\n Sheet,\r\n SGroup,\r\n Assembly,\r\n Complex,\r\n Volume,\r\n VoxelWorld,\r\n selectors,\r\n Molecule,\r\n};\r\n","/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nimport * as THREE from 'three';\r\n\r\nclass CSS2DObject extends THREE.Object3D {\r\n constructor(element) {\r\n super();\r\n const self = this;\r\n this._element = element;\r\n this._element.style.position = 'absolute';\r\n this.addEventListener('removed', () => {\r\n if (self._element.parentNode !== null) {\r\n self._element.parentNode.removeChild(self._element);\r\n }\r\n });\r\n }\r\n\r\n getElement() {\r\n return this._element;\r\n }\r\n\r\n /**\r\n * Sets label transparency.\r\n *\r\n * @param {number} transp - in [0; 1] 1 means fully transparent\r\n */\r\n setTransparency(transp) {\r\n const el = this.getElement();\r\n if (el === null) {\r\n return;\r\n }\r\n if (transp === 1.0) {\r\n el.style.display = 'none';\r\n return;\r\n }\r\n el.style.display = 'inline';\r\n const op = 1.0 - transp;\r\n const top = op.toString();\r\n const op100 = op * 100;\r\n el.style.opacity = top;\r\n el.style.filter = `alpha(opacity=${op100})`; // IE fallback\r\n }\r\n\r\n clone() {\r\n const obj = new CSS2DObject(this._element);\r\n obj.copy(this);\r\n return obj;\r\n }\r\n}\r\n\r\nexport default CSS2DObject;\r\n","import * as THREE from 'three';\r\n\r\nclass RCGroup extends THREE.Group {\r\n raycast(raycaster, intersects) {\r\n if (!this.visible) {\r\n return;\r\n }\r\n\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n children[i].raycast(raycaster, intersects);\r\n }\r\n }\r\n\r\n enableSubset(mask, innerOnly) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].enableSubset) {\r\n children[i].enableSubset(mask, innerOnly);\r\n }\r\n }\r\n }\r\n\r\n disableSubset(mask, innerOnly) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].disableSubset) {\r\n children[i].disableSubset(mask, innerOnly);\r\n }\r\n }\r\n }\r\n\r\n isEmpty() {\r\n return this.children.length === 0;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].updateToFrame) {\r\n children[i].updateToFrame(frameData);\r\n }\r\n }\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n Array.prototype.push.apply(totalSubset, children[i].getSubset(mask, innerOnly));\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default RCGroup;\r\n","/* eslint-disable no-magic-numbers */\r\nimport * as THREE from 'three';\r\nimport logger from '../utils/logger';\r\nimport CSS2DObject from './CSS2DObject';\r\nimport RCGroup from './RCGroup';\r\nimport vertexScreenQuadShader from './shaders/ScreenQuad.vert';\r\nimport fragmentScreenQuadFromTex from './shaders/ScreenQuadFromTex.frag';\r\nimport fragmentScreenQuadFromTexWithDistortion from './shaders/ScreenQuadFromTexWithDistortion.frag';\r\n\r\nconst LAYERS = {\r\n DEFAULT: 0, VOLUME: 1, TRANSPARENT: 2, PREPASS_TRANSPARENT: 3, VOLUME_BFPLANE: 4, COLOR_FROM_POSITION: 5, SHADOWMAP: 6,\r\n};\r\n\r\nconst SELECTION_LAYERS = [ // These layers, that are used in the selection by ray casting\r\n LAYERS.DEFAULT, LAYERS.TRANSPARENT,\r\n];\r\n\r\nTHREE.Object3D.prototype.resetTransform = function () {\r\n this.position.set(0, 0, 0);\r\n this.quaternion.set(0, 0, 0, 1);\r\n this.scale.set(1, 1, 1);\r\n};\r\n\r\n// update world matrix of this object and all its ancestors\r\nTHREE.Object3D.prototype.updateMatrixWorldRecursive = function () {\r\n if (this.parent != null) {\r\n this.parent.updateMatrixWorldRecursive();\r\n }\r\n this.updateMatrixWorld();\r\n};\r\n// add object to parent, saving objects' world transform\r\nTHREE.Object3D.prototype.addSavingWorldTransform = (function () {\r\n const _worldMatrixInverse = new THREE.Matrix4();\r\n\r\n return function (object) {\r\n if (object instanceof THREE.Object3D) {\r\n _worldMatrixInverse.copy(this.matrixWorld).invert();\r\n _worldMatrixInverse.multiply(object.matrixWorld);\r\n object.matrix.copy(_worldMatrixInverse);\r\n object.matrix.decompose(object.position, object.quaternion, object.scale);\r\n this.add(object);\r\n }\r\n };\r\n}());\r\n\r\n// render a tiny transparent quad in the center of the screen\r\nTHREE.WebGLRenderer.prototype.renderDummyQuad = (function () {\r\n const _material = new THREE.MeshBasicMaterial({ transparent: true, opacity: 0.0, depthWrite: false });\r\n\r\n const _scene = new THREE.Scene();\r\n const _quad = new THREE.Mesh(new THREE.PlaneGeometry(0.01, 0.01), _material);\r\n _scene.add(_quad);\r\n\r\n const _camera = new THREE.OrthographicCamera(-0.5, 0.5, 0.5, -0.5, -10000, 10000);\r\n _camera.position.z = 100;\r\n\r\n return function () {\r\n this.render(_scene, _camera);\r\n };\r\n}());\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuad = (function () {\r\n const _scene = new THREE.Scene();\r\n const _quad = new THREE.Mesh(new THREE.PlaneGeometry(1.0, 1.0));\r\n _scene.add(_quad);\r\n\r\n const _camera = new THREE.OrthographicCamera(-0.5, 0.5, 0.5, -0.5, -10000, 10000);\r\n _camera.position.z = 100;\r\n\r\n return function (material) {\r\n _quad.material = material;\r\n this.render(_scene, _camera);\r\n };\r\n}());\r\n\r\nTHREE.Matrix4.prototype.isIdentity = (function () {\r\n const identity = new THREE.Matrix4();\r\n return function () {\r\n return identity.equals(this);\r\n };\r\n}());\r\n\r\nTHREE.Matrix4.prototype.applyToPointsArray = function (array, stride, w) {\r\n if (!array || !stride || stride < 3) {\r\n return array;\r\n }\r\n w = w || 0; // use point as normal by default\r\n const e = this.elements;\r\n for (let i = 0; i < array.length; i += stride) {\r\n const x = array[i];\r\n const y = array[i + 1];\r\n const z = array[i + 2];\r\n\r\n const persp = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\r\n\r\n array[i] = (e[0] * x + e[4] * y + e[8] * z + e[12] * w) * persp;\r\n array[i + 1] = (e[1] * x + e[5] * y + e[9] * z + e[13] * w) * persp;\r\n array[i + 2] = (e[2] * x + e[6] * y + e[10] * z + e[14] * w) * persp;\r\n }\r\n return array;\r\n};\r\n\r\nclass ScreenQuadMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n if (params.uniforms === undefined) {\r\n params.uniforms = {};\r\n }\r\n params.uniforms.srcTex = { type: 't', value: null };\r\n params.vertexShader = vertexScreenQuadShader;\r\n params.transparent = false;\r\n params.depthTest = false;\r\n params.depthWrite = false;\r\n super(params);\r\n }\r\n}\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuadFromTex = (function () {\r\n const _material = new ScreenQuadMaterial({\r\n uniforms: { opacity: { type: 'f', value: 1.0 } },\r\n fragmentShader: fragmentScreenQuadFromTex,\r\n transparent: true,\r\n });\r\n\r\n return function (srcTex, opacity) {\r\n _material.uniforms.srcTex.value = srcTex;\r\n _material.transparent = (opacity < 1.0);\r\n _material.uniforms.opacity.value = opacity;\r\n this.renderScreenQuad(_material);\r\n };\r\n}());\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuadFromTexWithDistortion = (function () {\r\n const _material = new ScreenQuadMaterial({\r\n uniforms: { coef: { type: 'f', value: 1.0 } },\r\n fragmentShader: fragmentScreenQuadFromTexWithDistortion,\r\n });\r\n\r\n return function (srcTex, coef) {\r\n _material.uniforms.srcTex.value = srcTex;\r\n _material.uniforms.coef.value = coef;\r\n this.renderScreenQuad(_material);\r\n };\r\n}());\r\n\r\n/**\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.PerspectiveCamera.prototype.setMinimalFov = function (angle) {\r\n if (this.aspect >= 1.0) {\r\n this.fov = angle;\r\n } else {\r\n this.fov = THREE.MathUtils.radToDeg(2 * Math.atan(Math.tan(THREE.MathUtils.degToRad(angle) * 0.5) / this.aspect));\r\n }\r\n};\r\n\r\n/**\r\n * @param {THREE.PerspectiveCamera} camera - Base camera for this stereo camera.\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.StereoCamera.prototype.updateHalfSized = function (camera, angle) {\r\n const originalAspect = camera.aspect;\r\n const originalFov = camera.fov;\r\n\r\n camera.aspect = originalAspect / 2.0;\r\n camera.setMinimalFov(angle);\r\n camera.updateProjectionMatrix();\r\n\r\n this.update(camera);\r\n\r\n camera.aspect = originalAspect;\r\n camera.fov = originalFov;\r\n camera.updateProjectionMatrix();\r\n};\r\n\r\n/**\r\n * @param {number} radius - Radius of bounding sphere in angstroms to fit on screen.\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.PerspectiveCamera.prototype.setDistanceToFit = function (radius, angle) {\r\n this.position.z = radius / Math.sin(0.5 * THREE.MathUtils.degToRad(angle));\r\n};\r\n\r\n/**\r\n * @param {RCGroup} gfxObj - All objects on scene.\r\n * @param {THREE.PerspectiveCamera} camera - Camera used for rendering.\r\n * @param {number} clipPlane - Distance to clip plane.\r\n * @param {number} fogFarPlane - Distance to fog far plane.\r\n */\r\nTHREE.Raycaster.prototype.intersectVisibleObject = function (gfxObj, camera, clipPlane, fogFarPlane) {\r\n const intersects = this.intersectObject(gfxObj, false);\r\n if (intersects.length === 0) {\r\n return null;\r\n }\r\n\r\n // find point closest to camera that doesn't get clipped by camera near plane or clipPlane (if it exists)\r\n const nearPlane = Math.min(camera.near, clipPlane);\r\n let i;\r\n let p = intersects[0];\r\n const v = new THREE.Vector3();\r\n for (i = 0; i < intersects.length; ++i) {\r\n p = intersects[i];\r\n v.copy(p.point);\r\n v.applyMatrix4(camera.matrixWorldInverse);\r\n if (v.z <= -nearPlane) {\r\n break;\r\n }\r\n }\r\n if (i === intersects.length) {\r\n return null;\r\n }\r\n\r\n // check that selected intersection point is not clipped by camera far plane or occluded by fog (if it exists)\r\n const farPlane = Math.min(camera.far, fogFarPlane);\r\n v.copy(p.point);\r\n v.applyMatrix4(camera.matrixWorldInverse);\r\n if (v.z <= -farPlane) {\r\n return null;\r\n }\r\n return p;\r\n};\r\n\r\nTHREE.Matrix4.prototype.extractScale = (function () {\r\n const _v = new THREE.Vector3();\r\n\r\n return function (scale) {\r\n if (scale === undefined) {\r\n logger.debug('extractScale(): new is too expensive operation to do it on-the-fly');\r\n scale = _v.clone();\r\n }\r\n\r\n const te = this.elements;\r\n scale.x = _v.set(te[0], te[1], te[2]).length();\r\n scale.y = _v.set(te[4], te[5], te[6]).length();\r\n scale.z = _v.set(te[8], te[9], te[10]).length();\r\n\r\n // if determine is negative, we need to invert one scale\r\n const det = this.determinant();\r\n if (det < 0) {\r\n scale.x = -scale.x;\r\n }\r\n return scale;\r\n };\r\n}());\r\n\r\nfunction _calcCylinderMatrix(posBegin, posEnd, radius) {\r\n const posCenter = posBegin.clone().lerp(posEnd, 0.5);\r\n const matScale = new THREE.Matrix4();\r\n matScale.makeScale(radius, posBegin.distanceTo(posEnd), radius);\r\n\r\n const matRotHalf = new THREE.Matrix4();\r\n matRotHalf.makeRotationX(Math.PI / 2);\r\n\r\n const matRotLook = new THREE.Matrix4();\r\n const vUp = new THREE.Vector3(0, 1, 0);\r\n matRotLook.lookAt(posCenter, posEnd, vUp);\r\n\r\n matRotLook.multiply(matRotHalf);\r\n matRotLook.multiply(matScale);\r\n matRotLook.setPosition(posCenter);\r\n return matRotLook;\r\n}\r\n\r\nfunction _calcChunkMatrix(eye, target, up, rad) {\r\n const matScale = new THREE.Matrix4();\r\n matScale.makeScale(rad.x, rad.y, 0);\r\n\r\n const matRotLook = new THREE.Matrix4();\r\n matRotLook.lookAt(eye, target, up);\r\n matRotLook.multiply(matScale);\r\n matRotLook.setPosition(eye);\r\n\r\n return matRotLook;\r\n}\r\n\r\nfunction _groupHasGeometryToRender(group) {\r\n let hasGeoms = false;\r\n group.traverse((node) => {\r\n if (node.hasOwnProperty('geometry') || node instanceof CSS2DObject) {\r\n hasGeoms = true;\r\n }\r\n });\r\n return hasGeoms;\r\n}\r\n\r\nfunction _buildDistorionMesh(widthSegments, heightSegements, coef) {\r\n // solve equation r_u = r_d * (1 + k * r_d^2)\r\n // for r_d using iterations\r\n // takes: r_u^2\r\n // returns: r_d / r_u factor that can be used to distort point coords\r\n function calcInverseBarrel(r2) {\r\n const epsilon = 1e-5;\r\n let prevR2 = 0.0;\r\n let curR2 = r2;\r\n let dr = 1.0;\r\n while (Math.abs(curR2 - prevR2) > epsilon) {\r\n dr = 1.0 + coef * curR2;\r\n prevR2 = curR2;\r\n curR2 = r2 / (dr * dr);\r\n }\r\n\r\n return 1.0 / dr;\r\n }\r\n\r\n const geo = new THREE.PlaneGeometry(2.0, 2.0, widthSegments, heightSegements);\r\n\r\n const pos = geo.getAttribute('position');\r\n for (let i = 0; i < pos.count; ++i) {\r\n const x = pos.array[3 * i];\r\n const y = pos.array[3 * i + 1];\r\n const c = calcInverseBarrel(x * x + y * y);\r\n pos.setXY(i, c * x, c * y);\r\n }\r\n\r\n return geo;\r\n}\r\n\r\nTHREE.BufferAttribute.prototype.copyAtList = function (attribute, indexList) {\r\n console.assert(\r\n this.itemSize === attribute.itemSize,\r\n 'DEBUG: BufferAttribute.copyAtList buffers have different item size.',\r\n );\r\n const { itemSize } = this;\r\n for (let i = 0, n = indexList.length; i < n; ++i) {\r\n for (let j = 0; j < itemSize; ++j) {\r\n this.array[i * itemSize + j] = attribute.array[indexList[i] * itemSize + j];\r\n }\r\n }\r\n return this;\r\n};\r\n\r\nfunction fillArray(array, value, startIndex, endIndex) {\r\n startIndex = (typeof startIndex !== 'undefined') ? startIndex : 0;\r\n endIndex = (typeof endIndex !== 'undefined') ? endIndex : array.length;\r\n for (let i = startIndex; i < endIndex; ++i) {\r\n array[i] = value;\r\n }\r\n}\r\n\r\n/** @param {THREE.Object3D} object - Parent object. */\r\nfunction removeChildren(object) {\r\n const { children } = object;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n child.parent = null;\r\n child.dispatchEvent({ type: 'removed' });\r\n }\r\n object.children = [];\r\n}\r\n\r\nfunction clearTree(object) {\r\n object.traverse((obj) => {\r\n if (obj instanceof THREE.Mesh || obj instanceof THREE.LineSegments || obj instanceof THREE.Line) {\r\n obj.geometry.dispose();\r\n }\r\n });\r\n removeChildren(object);\r\n}\r\n\r\nfunction destroyObject(object) {\r\n clearTree(object);\r\n if (object.parent) {\r\n object.parent.remove(object);\r\n } else {\r\n object.dispatchEvent({ type: 'removed' });\r\n }\r\n}\r\n\r\nfunction belongToSelectLayers(object) {\r\n for (let i = 0; i < SELECTION_LAYERS.length; i++) {\r\n if (((object.layers.mask >> SELECTION_LAYERS[i]) & 1) === 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction processObjRenderOrder(root, idMaterial) {\r\n // set renderOrder to 0 for Backdrop and to 1 in other cases to render Backdrop earlier all other materials\r\n const renderOrder = +(idMaterial !== 'BA');\r\n root.traverse((object) => {\r\n if (object.isGroup) {\r\n object.renderOrder = renderOrder;\r\n }\r\n });\r\n}\r\n\r\nfunction applySelectionMaterial(geo) {\r\n geo.traverse((node) => {\r\n if ('material' in node) {\r\n node.material = node.material.clone(true);\r\n // using z-offset to magically fix selection rendering artifact (on z-sprites)\r\n node.material.setValues({\r\n depthFunc: THREE.LessEqualDepth,\r\n overrideColor: true,\r\n fog: false,\r\n lights: false,\r\n shadowmap: false,\r\n });\r\n node.material.setUberOptions({ fixedColor: new THREE.Color(0xFFFF00), zOffset: -1e-6 });\r\n }\r\n });\r\n}\r\n\r\nfunction getMiddlePoint(point1, point2, optionalTarget) {\r\n const result = optionalTarget || new THREE.Vector3();\r\n\r\n result.set(0, 0, 0);\r\n result.addScaledVector(point1, 0.5);\r\n result.addScaledVector(point2, 0.5);\r\n\r\n return result;\r\n}\r\n\r\n// Monkey-patch for \"InstancedBufferGeometry.instanceCount becomes undefined after copy()\"\r\n// https://github.com/mrdoob/three.js/issues/22151\r\nconst _oldInstancedBufferGeometryCopy = THREE.InstancedBufferGeometry.prototype.copy;\r\n\r\nTHREE.InstancedBufferGeometry.prototype.copy = function (source) {\r\n _oldInstancedBufferGeometryCopy.call(this, source);\r\n if (this.instanceCount === undefined) {\r\n this.instanceCount = Infinity;\r\n }\r\n};\r\n\r\nexport default {\r\n calcCylinderMatrix: _calcCylinderMatrix,\r\n calcChunkMatrix: _calcChunkMatrix,\r\n groupHasGeometryToRender: _groupHasGeometryToRender,\r\n buildDistorionMesh: _buildDistorionMesh,\r\n RCGroup,\r\n fillArray,\r\n clearTree,\r\n destroyObject,\r\n belongToSelectLayers,\r\n processObjRenderOrder,\r\n applySelectionMaterial,\r\n getMiddlePoint,\r\n LAYERS,\r\n};\r\n","import * as THREE from 'three';\r\nimport gfxutils from './gfx/gfxutils';\r\n\r\nconst _defaultBoundaries = {\r\n boundingBox: new THREE.Box3(new THREE.Vector3(-1, -1, -1), new THREE.Vector3(1, 1, 1)),\r\n boundingSphere: new THREE.Sphere(new THREE.Vector3(0, 0, 0), 1),\r\n};\r\n\r\nclass Visual extends gfxutils.RCGroup {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this.name = name;\r\n this._dataSource = dataSource;\r\n }\r\n\r\n release() {\r\n if (this.parent) {\r\n this.parent.remove(this);\r\n }\r\n }\r\n\r\n getDataSource() {\r\n return this._dataSource;\r\n }\r\n\r\n getBoundaries() {\r\n return _defaultBoundaries;\r\n }\r\n}\r\n\r\nexport default Visual;\r\n","function _ensureArray(x) {\r\n if (x === null || x === undefined || Array.isArray(x)) {\r\n return x;\r\n }\r\n return [x];\r\n}\r\n\r\n/** An indexed list of objects or classes. */\r\nclass EntityList {\r\n /**\r\n * Create a list of objects.\r\n * The objects can be indexed by one or more properties for the later retrieval.\r\n *\r\n * @param {!Array=} entities A list of objects to automatically register at creation time.\r\n * @param {!Array=} indices A list of property names to use for case-insensitive indexing.\r\n * By default, a single `.id` property is used.\r\n * @see EntityList#register\r\n */\r\n constructor(entities = [], indices = ['id']) {\r\n this._list = [];\r\n this._dict = {};\r\n this._indices = [...indices];\r\n this._indices.forEach((index) => {\r\n this._dict[index] = {};\r\n });\r\n\r\n entities.forEach((entity) => this.register(entity));\r\n }\r\n\r\n /**\r\n * Add a value to the end of a list.\r\n * The list will contain only one copy of the value.\r\n *\r\n * @param {!Array} list An array.\r\n * @param {*} value A value to add.\r\n * @see EntityList.unregisterFromList\r\n * @see EntityList.registerInDict\r\n */\r\n static registerInList(list, value) {\r\n if (!list.includes(value)) {\r\n list.push(value);\r\n }\r\n }\r\n\r\n /**\r\n * Remove a value from a list if it is there.\r\n *\r\n * @param {!Array} list An array.\r\n * @param {*} value A value to remove.\r\n * @see EntityList.registerInList\r\n */\r\n static unregisterFromList(list, value) {\r\n const pos = list.indexOf(value);\r\n if (pos !== -1) {\r\n list.splice(pos, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Add a value to a dictionary.\r\n * The value may be stored under multiple different keys (aliases).\r\n * There might be multiples values stored under the same key.\r\n *\r\n * @param {!Object} dict A dictionary.\r\n * @param {!Array} keys An array of keys.\r\n * @param {*} value A value to add.\r\n * @see EntityList.unregisterFromDict\r\n * @see EntityList.registerInList\r\n */\r\n static registerInDict(dict, keys, value) {\r\n keys.forEach((key) => {\r\n key = key.toLowerCase();\r\n const list = dict[key] = dict[key] || [];\r\n if (!list.includes(value)) {\r\n list.push(value);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove a value from a dictionary.\r\n * The value may be stored under multiple different keys (aliases).\r\n * There might be multiples values stored under the same key.\r\n *\r\n * @param {!Object} dict A dictionary.\r\n * @param {!Array} keys An array of keys.\r\n * @param {*} value A value to add.\r\n * @see EntityList.registerInDict\r\n */\r\n static unregisterFromDict(dict, keys, value) {\r\n keys.forEach((key) => {\r\n key = key.toLowerCase();\r\n const list = dict[key];\r\n if (list) {\r\n const pos = list.indexOf(value);\r\n if (pos !== -1) {\r\n list.splice(pos, 1);\r\n }\r\n if (list.length === 0) {\r\n delete dict[key];\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Add an entity to this list.\r\n *\r\n * @param {!Object} entity An object or a class to register. The object must include all\r\n * properties specified as indices on construction.\r\n * @see EntityList#unregister\r\n */\r\n register(entity) {\r\n EntityList.registerInList(this._list, entity);\r\n this._indices.forEach((index) => {\r\n EntityList.registerInDict(this._dict[index], _ensureArray(entity[index]), entity);\r\n });\r\n }\r\n\r\n /**\r\n * Remove an entity from this list.\r\n *\r\n * @param {!Object} entity An object or a class to unregister. The object may be\r\n * missing from the list but it must include all properties specified as indices\r\n * on construction.\r\n * @see EntityList#register\r\n */\r\n unregister(entity) {\r\n EntityList.unregisterFromList(this._list, entity);\r\n this._indices.forEach((index) => {\r\n EntityList.unregisterFromDict(this._dict[index], _ensureArray(entity[index]), entity);\r\n });\r\n }\r\n\r\n /**\r\n * An ordered list of all registered entities.\r\n * It is a read-only copy, use {@link EntityList#register} and {@link EntityList#unregister}\r\n * to modify it.\r\n *\r\n * @type {!Array}\r\n */\r\n get all() {\r\n return [...this._list];\r\n }\r\n\r\n /**\r\n * The first registered entity.\r\n * Use it if you do not care which entity you are referring to.\r\n *\r\n * @type {Object=}\r\n */\r\n get first() {\r\n return this._list[0];\r\n }\r\n\r\n /**\r\n * Retrieve a list of keys for the index.\r\n *\r\n * @param {string=} index One of the indices specified during the list construction. If omitted,\r\n * the first of the indices is used.\r\n * @returns {!Array} An unordered list of keys in the index, i.e. particular property\r\n * values for all registered entities.\r\n */\r\n keys(index) {\r\n return Object.keys(this._dict[index || this._indices[0]]);\r\n }\r\n\r\n /**\r\n * Retrieve an entity by its key.\r\n *\r\n * @param {string} key A case-insensitive property value to look-up.\r\n * @param {string=} index One of the indices specified during the list construction. If omitted,\r\n * the first of the indices is used.\r\n * @returns {Object=} An object registered in the index under the key. If there are multiple\r\n * objects under the same key, the first one is returned.\r\n */\r\n get(key, index) {\r\n const dict = this._dict[index || this._indices[0]];\r\n if (dict) {\r\n const values = dict[key && key.toLowerCase()];\r\n return values && values.length > 0 ? values[0] : undefined;\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nexport default EntityList;\r\n","import settings from '../settings';\r\nimport logger from './logger';\r\n\r\nfunction makeContextDependent(prototype) {\r\n Object.defineProperties(prototype, {\r\n logger: {\r\n get() {\r\n return this.context && this.context.logger ? this.context.logger : logger;\r\n },\r\n },\r\n settings: {\r\n get() {\r\n return this.context && this.context.settings ? this.context.settings : settings;\r\n },\r\n },\r\n });\r\n}\r\n\r\nexport default makeContextDependent;\r\n","import * as THREE from 'three';\r\n\r\nclass CollisionSphere {\r\n constructor(position, radius) {\r\n this._position = position;\r\n this._radius = radius;\r\n }\r\n\r\n static _sphere = new THREE.Sphere();\r\n\r\n raycast(raycaster) {\r\n const sphere = CollisionSphere._sphere;\r\n sphere.set(this._position, this._radius);\r\n\r\n const p = new THREE.Vector3();\r\n if (raycaster.ray.intersectSphere(sphere, p)) {\r\n return {\r\n distance: raycaster.ray.origin.distanceTo(p),\r\n point: p,\r\n };\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nconst SphereCollisionGeo = (base) => class extends base {\r\n constructor(count, ...args) {\r\n super(...args);\r\n this._objects = new Array(count);\r\n this.boundingSphere = null;\r\n this.boundingBox = null;\r\n }\r\n\r\n setSphere(idx, position, radius) {\r\n this._objects[idx] = new CollisionSphere(position, radius);\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n // TODO raycast with bounding sphere? How to deal with updates?\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const inters = this._objects[i].raycast(raycaster);\r\n if (inters) {\r\n inters.chunkIdx = i;\r\n intersects.push(inters);\r\n }\r\n }\r\n }\r\n\r\n computeBoundingBox() {\r\n const objects = this._objects;\r\n let { boundingBox } = this;\r\n if (boundingBox === null) {\r\n this.boundingBox = boundingBox = new THREE.Box3();\r\n }\r\n boundingBox.makeEmpty();\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n boundingBox.expandByPoint(objects[i]._position);\r\n }\r\n }\r\n\r\n computeBoundingSphere() {\r\n this.computeBoundingBox();\r\n const objects = this._objects;\r\n const { boundingBox } = this;\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n const pos = objects[i]._position;\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n if (this.boundingSphere === null) {\r\n this.boundingSphere = new THREE.Sphere();\r\n }\r\n this.boundingSphere.set(center, Math.sqrt(radiusSquared));\r\n }\r\n};\r\nexport default SphereCollisionGeo;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst tmpColor = new THREE.Color();\r\n\r\nconst OFFSET_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst { copySubArrays } = utils;\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\nclass InstancedSpheresGeometry extends SphereCollisionGeo(THREE.InstancedBufferGeometry) {\r\n constructor(spheresCount, sphereComplexity, useZSprites) {\r\n super(spheresCount);\r\n this._sphGeometry = useZSprites ? new THREE.PlaneGeometry(2, 2, 1, 1)\r\n : new THREE.SphereBufferGeometry(1, sphereComplexity * 2, sphereComplexity, 0, Math.PI * 2, 0, Math.PI);\r\n this._init(spheresCount, this._sphGeometry);\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n setArrayXYZW(this._offsets, itemIdx * OFFSET_SIZE, itemPos.x, itemPos.y, itemPos.z, itemRad);\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n }\r\n\r\n setColor(itemIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n setArrayXYZ(this._colors, itemIdx * COLOR_SIZE, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('offset').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n alphaArr[chunkIndices[i]] = value;\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const geom = new THREE.InstancedBufferGeometry();\r\n this._init.call(geom, instanceCount, this._sphGeometry);\r\n\r\n copySubArrays(this._offsets, geom._offsets, chunkIndices, OFFSET_SIZE);\r\n copySubArrays(this._colors, geom._colors, chunkIndices, COLOR_SIZE);\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n _init(spheresCount, sphereGeo) {\r\n this.copy(sphereGeo);\r\n\r\n this._offsets = utils.allocateTyped(Float32Array, spheresCount * OFFSET_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, spheresCount * COLOR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, spheresCount);\r\n _.fill(alpha, 1.0);\r\n\r\n this.setAttribute('offset', new THREE.InstancedBufferAttribute(this._offsets, OFFSET_SIZE, false, 1));\r\n this.setAttribute('color', new THREE.InstancedBufferAttribute(this._colors, COLOR_SIZE, false, 1));\r\n this.setAttribute('alphaColor', new THREE.InstancedBufferAttribute(alpha, 1, false, 1));\r\n }\r\n}\r\nexport default InstancedSpheresGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_IDC_16BIT = 65535;\r\nconst VEC_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\n\r\n/**\r\n * This class represents geometry which consists of separate chunks.\r\n * Each chunk has same index and similar geometry with equal points and faces count.\r\n * Each chunk has by default only one color.\r\n * @constructor\r\n */\r\n\r\nclass ChunkedObjectsGeometry extends THREE.BufferGeometry {\r\n constructor(chunkGeo, chunksCount) {\r\n super();\r\n\r\n if (this.constructor === ChunkedObjectsGeometry) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n\r\n this._chunkGeo = chunkGeo;\r\n\r\n this._init(chunkGeo, chunksCount);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('position').needsUpdate = true;\r\n this.getAttribute('normal').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n const colors = this._colors;\r\n const chunkSize = this._chunkSize;\r\n for (let i = chunkIdx * chunkSize, end = i + chunkSize; i < end; ++i) {\r\n const idx = i * VEC_SIZE;\r\n colors[idx] = tmpColor.r;\r\n colors[idx + 1] = tmpColor.g;\r\n colors[idx + 2] = tmpColor.b;\r\n }\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n const chunkSize = this._chunkSize;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const left = chunkIndices[i] * chunkSize;\r\n _.fill(alphaArr, value, left, left + chunkSize);\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const inters = [];\r\n // use THREE.Mesh raycasting interface for the Geometry. The Mesh is\r\n // created with existed geometry and default material, so it doesn't slowdown.\r\n const mesh = new THREE.Mesh();\r\n mesh.geometry = this;\r\n mesh.raycast(raycaster, inters);\r\n\r\n const facesPerChunk = this._chunkGeo.index.count / 3;\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('faceIndex')) {\r\n continue;\r\n }\r\n inters[i].chunkIdx = Math.floor(inters[i].faceIndex / facesPerChunk);\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const geom = new THREE.BufferGeometry();\r\n this._init.call(geom, this._chunkGeo, instanceCount);\r\n\r\n const srcPos = this._positions;\r\n const srcNorm = this._normals;\r\n const srcColor = this._colors;\r\n\r\n const dstPos = geom._positions;\r\n const dstNorm = geom._normals;\r\n const dstColor = geom._colors;\r\n\r\n const chunkSize = this._chunkSize * VEC_SIZE;\r\n\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const dstPtOffset = i * chunkSize;\r\n const ptIdxBegin = chunkIndices[i] * chunkSize;\r\n const ptIdxEnd = ptIdxBegin + chunkSize;\r\n dstPos.set(srcPos.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n dstNorm.set(srcNorm.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n dstColor.set(srcColor.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n }\r\n\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n _init(chunkGeo, chunksCount) {\r\n const chunkSize = this._chunkSize = chunkGeo.attributes.position.count;\r\n const chunkIndex = chunkGeo.index.array;\r\n const chunkIndexSize = chunkIndex.length;\r\n const pointsCount = this._chunkSize * chunksCount;\r\n const use32bitIndex = pointsCount > MAX_IDC_16BIT;\r\n const indexSize = chunkIndexSize * chunksCount;\r\n const index = this._index = utils.allocateTyped(use32bitIndex ? Uint32Array : Uint16Array, indexSize);\r\n this._positions = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n this._normals = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, pointsCount);\r\n _.fill(alpha, 1.0);\r\n\r\n for (let i = 0; i < chunksCount; ++i) {\r\n const offset = i * chunkIndexSize;\r\n const posOffset = i * chunkSize;\r\n index.set(chunkIndex, offset);\r\n for (let j = 0; j < chunkIndexSize; ++j) {\r\n index[offset + j] += posOffset;\r\n }\r\n }\r\n\r\n this.setIndex(new THREE.BufferAttribute(this._index, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(this._positions, VEC_SIZE));\r\n this.setAttribute('normal', new THREE.BufferAttribute(this._normals, VEC_SIZE));\r\n this.setAttribute('color', new THREE.BufferAttribute(this._colors, VEC_SIZE));\r\n this.setAttribute('alphaColor', new THREE.BufferAttribute(alpha, 1));\r\n }\r\n}\r\nexport default ChunkedObjectsGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst VEC_SIZE = 3;\r\n\r\nclass SimpleSpheresGeometry extends SphereCollisionGeo(ChunkedObjectsGeometry) {\r\n constructor(spheresCount, sphereComplexity) {\r\n const sphGeometry = new THREE.SphereBufferGeometry(\r\n 1,\r\n sphereComplexity * 2,\r\n sphereComplexity,\r\n 0,\r\n Math.PI * 2,\r\n 0,\r\n Math.PI,\r\n );\r\n super(spheresCount, sphGeometry, spheresCount);\r\n\r\n const normals = this._normals;\r\n const geoNormals = sphGeometry.attributes.normal.array;\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._tmpPositions = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n for (let i = 0; i < spheresCount; ++i) {\r\n normals.set(geoNormals, chunkSize * VEC_SIZE * i);\r\n }\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n const tmpPos = this._tmpPositions;\r\n const chunkSize = this._chunkSize;\r\n const geoPos = this._chunkPos;\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n const idx = i * 3;\r\n tmpPos[idx] = itemPos.x + geoPos[idx] * itemRad;\r\n tmpPos[idx + 1] = itemPos.y + geoPos[idx + 1] * itemRad;\r\n tmpPos[idx + 2] = itemPos.z + geoPos[idx + 2] * itemRad;\r\n }\r\n\r\n this._positions.set(tmpPos, chunkSize * itemIdx * VEC_SIZE);\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n }\r\n}\r\nexport default SimpleSpheresGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst centerPos = new THREE.Vector3();\r\nconst tmpVector = new THREE.Vector3();\r\nconst normMtx = new THREE.Matrix3();\r\n\r\nclass Simple2CCylindersGeometry extends ChunkedObjectsGeometry {\r\n constructor(instanceCount, polyComplexity) {\r\n const cylGeometry = new THREE.CylinderGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, true);\r\n super(cylGeometry, 2 * instanceCount);\r\n\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._chunkNorms = this._chunkGeo.attributes.normal.array;\r\n this._tmpVector = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const chunkSize = this._chunkSize;\r\n const firstOffset = chunkSize * 2 * itemIdx * VEC_SIZE;\r\n const secondOffset = firstOffset + chunkSize * VEC_SIZE;\r\n\r\n const tmpArray = this._tmpVector;\r\n const geoPos = this._chunkPos;\r\n const geoNorm = this._chunkNorms;\r\n\r\n centerPos.lerpVectors(botPos, topPos, 0.5);\r\n const mtx1 = gfxutils.calcCylinderMatrix(botPos, centerPos, itemRad);\r\n normMtx.getNormalMatrix(mtx1);\r\n\r\n let idx;\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoPos, idx);\r\n tmpVector.applyMatrix4(mtx1);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._positions.set(tmpArray, firstOffset);\r\n\r\n // now shift center to get another part of the cylinder\r\n centerPos.sub(botPos);\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpArray[idx] += centerPos.x;\r\n tmpArray[idx + 1] += centerPos.y;\r\n tmpArray[idx + 2] += centerPos.z;\r\n }\r\n this._positions.set(tmpArray, secondOffset);\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoNorm, idx);\r\n tmpVector.applyMatrix3(normMtx);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._normals.set(tmpArray, firstOffset);\r\n this._normals.set(tmpArray, secondOffset);\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const first = 2 * itemIdx;\r\n super.setColor(first, colorVal1);\r\n\r\n const second = first + 1;\r\n super.setColor(second, colorVal2);\r\n }\r\n}\r\n\r\nexport default Simple2CCylindersGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_POINTS_COUNT_16BIT = 65536;\r\nconst PTS_PER_TRIANGLE = 3;\r\n\r\nclass CylinderBufferGeometry extends THREE.BufferGeometry {\r\n constructor(\r\n radiusTop,\r\n radiusBottom,\r\n height,\r\n radialSegments,\r\n heightSegments,\r\n openEnded,\r\n ) {\r\n super();\r\n\r\n const thetaStart = 0;\r\n const thetaLength = 2 * Math.PI;\r\n\r\n this.type = 'CylinderBufferGeometry';\r\n\r\n this.parameters = {\r\n radiusTop,\r\n radiusBottom,\r\n height,\r\n radialSegments,\r\n heightSegments,\r\n openEnded,\r\n };\r\n\r\n const hasTop = openEnded === false && radiusTop > 0;\r\n const hasBottom = openEnded === false && radiusBottom > 0;\r\n const vertexCount = (heightSegments + 1) * radialSegments\r\n + hasTop * (radialSegments + 1)\r\n + hasBottom * (radialSegments + 1);\r\n const facesCount = (2 * heightSegments + hasTop + hasBottom) * radialSegments;\r\n\r\n const heightHalf = height / 2;\r\n\r\n /* eslint-disable no-magic-numbers */\r\n const positions = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3);\r\n const normals = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3);\r\n const indices = new THREE.Uint16BufferAttribute(utils.allocateTyped(Uint16Array, facesCount * PTS_PER_TRIANGLE), 1);\r\n /* eslint-enable no-magic-numbers */\r\n\r\n const uvs = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 2), 2);\r\n console.assert(vertexCount < MAX_POINTS_COUNT_16BIT, 'DEBUG: Cylinder Geometry has too many vertices (65536 max).');\r\n\r\n let currVtxIdx = 0;\r\n let currFaceIdx = 0;\r\n const tanTheta = -(radiusBottom - radiusTop) / height;\r\n\r\n // setup cylinder data\r\n for (let y = 0; y <= heightSegments; y++) {\r\n // faces\r\n if (y !== heightSegments) {\r\n for (let i = 0; i < radialSegments; i++) {\r\n const v1 = currVtxIdx + i;\r\n const v2 = currVtxIdx + radialSegments + i;\r\n const v3 = currVtxIdx + radialSegments + ((i + 1) % radialSegments);\r\n const v4 = currVtxIdx + ((i + 1) % radialSegments);\r\n\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, v1, v4, v2);\r\n currFaceIdx++;\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, v2, v4, v3);\r\n currFaceIdx++;\r\n }\r\n }\r\n\r\n // vertices\r\n const v = y / heightSegments;\r\n const radius = v * (radiusBottom - radiusTop) + radiusTop;\r\n\r\n for (let x = 0; x < radialSegments; x++) {\r\n const u = x / radialSegments;\r\n\r\n const vx = radius * Math.sin(u * thetaLength + thetaStart);\r\n const vy = v * height - heightHalf;\r\n const vz = radius * Math.cos(u * thetaLength + thetaStart);\r\n\r\n const normal = new THREE.Vector3(\r\n vx,\r\n Math.sqrt(vx * vx + vz * vz) * tanTheta,\r\n vz,\r\n ).normalize();\r\n\r\n positions.setXYZ(currVtxIdx, vx, vy, vz);\r\n normals.setXYZ(currVtxIdx, normal.x, normal.y, normal.z);\r\n uvs.setXY(currVtxIdx, u, v);\r\n ++currVtxIdx;\r\n }\r\n }\r\n\r\n // top cap\r\n if (hasTop) {\r\n const startTIdx = currVtxIdx;\r\n const lastIdx = currVtxIdx + radialSegments;\r\n for (let fTIdx = 0; fTIdx < radialSegments; ++fTIdx) {\r\n const currSrcIdx = currVtxIdx - radialSegments;\r\n positions.setXYZ(\r\n currVtxIdx,\r\n positions.getX(currSrcIdx),\r\n positions.getY(currSrcIdx),\r\n positions.getZ(currSrcIdx),\r\n );\r\n normals.setXYZ(currVtxIdx, 0, 1, 0);\r\n uvs.setXY(currVtxIdx, 1, 1);\r\n\r\n const nextTVtx = startTIdx + ((fTIdx + 1) % radialSegments);\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, currVtxIdx, nextTVtx, lastIdx);\r\n currFaceIdx++;\r\n currVtxIdx++;\r\n }\r\n\r\n positions.setXYZ(currVtxIdx, 0, heightHalf, 0);\r\n normals.setXYZ(currVtxIdx, 0, 1, 0);\r\n uvs.setXY(currVtxIdx, 1, 1);\r\n ++currVtxIdx;\r\n }\r\n\r\n // bottom cap\r\n if (hasBottom) {\r\n const startBIdx = currVtxIdx;\r\n const lastBIdx = currVtxIdx + radialSegments;\r\n for (let fBIdx = 0; fBIdx < radialSegments; ++fBIdx) {\r\n const currSrcBIdx = fBIdx;\r\n positions.setXYZ(\r\n currVtxIdx,\r\n positions.getX(currSrcBIdx),\r\n positions.getY(currSrcBIdx),\r\n positions.getZ(currSrcBIdx),\r\n );\r\n normals.setXYZ(currVtxIdx, 0, -1, 0);\r\n uvs.setXY(currVtxIdx, 0, 0);\r\n\r\n const nextBVtx = startBIdx + ((fBIdx + 1) % radialSegments);\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, nextBVtx, currVtxIdx, lastBIdx);\r\n currFaceIdx++;\r\n currVtxIdx++;\r\n }\r\n\r\n positions.setXYZ(currVtxIdx, 0, -heightHalf, 0);\r\n normals.setXYZ(currVtxIdx, 0, -1, 0);\r\n uvs.setXY(currVtxIdx, 0, 0);\r\n }\r\n\r\n this.setIndex(indices);\r\n this.setAttribute('position', positions);\r\n this.setAttribute('normal', normals);\r\n this.setAttribute('uv', uvs);\r\n }\r\n\r\n clone() {\r\n const { parameters } = this;\r\n\r\n return new CylinderBufferGeometry(\r\n parameters.radiusTop,\r\n parameters.radiusBottom,\r\n parameters.height,\r\n parameters.radialSegments,\r\n parameters.heightSegments,\r\n parameters.openEnded,\r\n );\r\n }\r\n}\r\n\r\nexport default CylinderBufferGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\nimport CylinderBufferGeometry from './CylinderBufferGeometry';\r\n\r\nconst tmpColor = new THREE.Color();\r\nconst invMatrix = new THREE.Matrix4();\r\n\r\nconst OFFSET_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst { copySubArrays } = utils;\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\n\r\nfunction sortNumber(a, b) {\r\n return a - b;\r\n}\r\n\r\nfunction _prepareCylinderInfo(chunkIndices) {\r\n chunkIndices.sort(sortNumber);\r\n const chunksIdx = [];\r\n const cylinderInfo = [];\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const val = chunkIndices[i];\r\n const even = (val | 0) % 2 === 0;\r\n const newPar = {\r\n first: false,\r\n second: false,\r\n };\r\n if (even) {\r\n newPar.first = true;\r\n newPar.second = i + 1 < n && chunkIndices[i + 1] === chunkIndices[i] + 1;\r\n if (newPar.second) {\r\n ++i;\r\n }\r\n } else {\r\n newPar.second = true;\r\n }\r\n chunksIdx.push(Math.floor(val / 2));\r\n cylinderInfo.push(newPar);\r\n }\r\n return { indices: chunksIdx, cylinderInfo };\r\n}\r\n\r\nfunction _assignOpacity(cylinderInfo, color1, color2) {\r\n for (let i = 0, n = cylinderInfo.length; i < n; ++i) {\r\n const info = cylinderInfo[i];\r\n if (!info.first) {\r\n color1[COLOR_SIZE * i] = -0.5;\r\n }\r\n if (!info.second) {\r\n color2[COLOR_SIZE * i] = -0.5;\r\n }\r\n }\r\n}\r\nclass Instanced2CCylindersGeometry extends THREE.InstancedBufferGeometry {\r\n constructor(instanceCount, polyComplexity, useZSprites, openEnded) {\r\n super();\r\n this._useZSprites = useZSprites;\r\n this._cylGeometry = useZSprites ? new THREE.PlaneGeometry(2, 2, 1, 1)\r\n : new CylinderBufferGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, openEnded);\r\n this._init(instanceCount, this._cylGeometry, this._useZSprites);\r\n\r\n this._collisionGeo = new Simple2CCylindersGeometry(instanceCount, 3);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const matrix = gfxutils.calcCylinderMatrix(botPos, topPos, itemRad);\r\n let me = matrix.elements;\r\n const mtxOffset = itemIdx * OFFSET_SIZE;\r\n\r\n this._collisionGeo.setItem(itemIdx, botPos, topPos, itemRad);\r\n setArrayXYZW(this._matVector1, mtxOffset, me[0], me[4], me[8], me[12]);\r\n setArrayXYZW(this._matVector2, mtxOffset, me[1], me[5], me[9], me[13]);\r\n setArrayXYZW(this._matVector3, mtxOffset, me[2], me[6], me[10], me[14]);\r\n\r\n if (this._useZSprites) {\r\n invMatrix.copy(matrix).invert();\r\n me = invMatrix.elements;\r\n setArrayXYZW(this._invmatVector1, mtxOffset, me[0], me[4], me[8], me[12]);\r\n setArrayXYZW(this._invmatVector2, mtxOffset, me[1], me[5], me[9], me[13]);\r\n setArrayXYZW(this._invmatVector3, mtxOffset, me[2], me[6], me[10], me[14]);\r\n }\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const colorIdx = itemIdx * COLOR_SIZE;\r\n tmpColor.set(colorVal1);\r\n setArrayXYZ(this._color1, colorIdx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n tmpColor.set(colorVal2);\r\n setArrayXYZ(this._color2, colorIdx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n computeBoundingSphere() {\r\n this._collisionGeo.computeBoundingSphere();\r\n this.boundingSphere = this._collisionGeo.boundingSphere;\r\n }\r\n\r\n computeBoundingBox() {\r\n this._collisionGeo.computeBoundingBox();\r\n this.boundingBox = this._collisionGeo.boundingBox;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('matVector1').needsUpdate = true;\r\n this.getAttribute('matVector2').needsUpdate = true;\r\n this.getAttribute('matVector3').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n this.getAttribute('color2').needsUpdate = true;\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n if (this._useZSprites) {\r\n this.getAttribute('invmatVector1').needsUpdate = true;\r\n this.getAttribute('invmatVector2').needsUpdate = true;\r\n this.getAttribute('invmatVector3').needsUpdate = true;\r\n }\r\n\r\n this._collisionGeo.finishUpdate();\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n alphaArr[Math.floor(chunkIndices[i] / 2)] = value;\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const info = _prepareCylinderInfo(chunkIndices);\r\n const cylinderIndices = info.indices;\r\n const instanceCount = cylinderIndices.length;\r\n const geom = new THREE.InstancedBufferGeometry();\r\n this._init.call(geom, instanceCount, this._cylGeometry, this._useZSprites);\r\n\r\n copySubArrays(this._matVector1, geom._matVector1, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._matVector2, geom._matVector2, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._matVector3, geom._matVector3, cylinderIndices, OFFSET_SIZE);\r\n\r\n if (this._useZSprites) {\r\n copySubArrays(this._invmatVector1, geom._invmatVector1, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._invmatVector2, geom._invmatVector2, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._invmatVector3, geom._invmatVector3, cylinderIndices, OFFSET_SIZE);\r\n }\r\n\r\n copySubArrays(this._color1, geom._color1, cylinderIndices, COLOR_SIZE);\r\n copySubArrays(this._color2, geom._color2, cylinderIndices, COLOR_SIZE);\r\n _assignOpacity(info.cylinderInfo, geom._color1, geom._color2);\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n getGeoParams() {\r\n return this._cylGeometry.parameters;\r\n }\r\n\r\n _init(instanceCount, cylinderGeo, useZSprites) {\r\n this.copy(cylinderGeo);\r\n this._matVector1 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._matVector2 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._matVector3 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._color1 = utils.allocateTyped(Float32Array, instanceCount * COLOR_SIZE);\r\n this._color2 = utils.allocateTyped(Float32Array, instanceCount * COLOR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, instanceCount);\r\n _.fill(alpha, 1.0);\r\n\r\n this.setAttribute('matVector1', new THREE.InstancedBufferAttribute(this._matVector1, OFFSET_SIZE, false, 1));\r\n this.setAttribute('matVector2', new THREE.InstancedBufferAttribute(this._matVector2, OFFSET_SIZE, false, 1));\r\n this.setAttribute('matVector3', new THREE.InstancedBufferAttribute(this._matVector3, OFFSET_SIZE, false, 1));\r\n this.setAttribute('color', new THREE.InstancedBufferAttribute(this._color1, COLOR_SIZE, false, 1));\r\n this.setAttribute('color2', new THREE.InstancedBufferAttribute(this._color2, COLOR_SIZE, false, 1));\r\n\r\n this.setAttribute('alphaColor', new THREE.InstancedBufferAttribute(this._alpha, 1, false, 1));\r\n\r\n if (useZSprites) {\r\n this._invmatVector1 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._invmatVector2 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._invmatVector3 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n\r\n this.setAttribute(\r\n 'invmatVector1',\r\n new THREE.InstancedBufferAttribute(this._invmatVector1, OFFSET_SIZE, false, 1),\r\n );\r\n this.setAttribute(\r\n 'invmatVector2',\r\n new THREE.InstancedBufferAttribute(this._invmatVector2, OFFSET_SIZE, false, 1),\r\n );\r\n this.setAttribute(\r\n 'invmatVector3',\r\n new THREE.InstancedBufferAttribute(this._invmatVector3, OFFSET_SIZE, false, 1),\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport default Instanced2CCylindersGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst TRI_SIZE = 3;\r\nconst tmpPrev = new THREE.Vector3();\r\nconst tmpNext = new THREE.Vector3();\r\nconst tmpRes = new THREE.Vector3();\r\nconst simpleNormal = new THREE.Vector3(1.0, 0.0, 0.0);\r\nconst normalOnCut = new THREE.Vector3();\r\nconst nearRingPt = new THREE.Vector3();\r\n\r\nfunction _createExtrudedChunkGeometry(shape, ringsCount) {\r\n const geo = new THREE.BufferGeometry();\r\n const ptsCount = shape.length;\r\n const totalPts = ptsCount * ringsCount;\r\n const type = totalPts <= 65536 ? Uint16Array : Uint32Array;\r\n const facesPerChunk = (ringsCount - 1) * ptsCount * 2;\r\n const indices = new THREE.BufferAttribute(utils.allocateTyped(type, facesPerChunk * TRI_SIZE), 1);\r\n\r\n let currVtxIdx = 0;\r\n let currFaceIdx = 0;\r\n for (let y = 0; y < ringsCount; y++) {\r\n // faces\r\n if (y !== ringsCount - 1) {\r\n for (let i = 0; i < ptsCount; i++) {\r\n const v1 = currVtxIdx + i;\r\n const v2 = currVtxIdx + ptsCount + i;\r\n const v3 = currVtxIdx + ptsCount + ((i + 1) % ptsCount);\r\n const v4 = currVtxIdx + ((i + 1) % ptsCount);\r\n\r\n indices.setXYZ(currFaceIdx * TRI_SIZE, v1, v4, v2);\r\n currFaceIdx++;\r\n indices.setXYZ(currFaceIdx * TRI_SIZE, v2, v4, v3);\r\n currFaceIdx++;\r\n }\r\n }\r\n\r\n currVtxIdx += ptsCount;\r\n }\r\n\r\n geo.setIndex(indices);\r\n const pos = utils.allocateTyped(Float32Array, totalPts * VEC_SIZE);\r\n geo.setAttribute('position', new THREE.BufferAttribute(pos, VEC_SIZE));\r\n\r\n geo._positions = shape;\r\n\r\n return geo;\r\n}\r\n\r\nclass ExtrudedObjectsGeometry extends ChunkedObjectsGeometry {\r\n constructor(shape, ringsCount, chunksCount) {\r\n const chunkGeo = _createExtrudedChunkGeometry(shape, ringsCount);\r\n super(chunkGeo, chunksCount);\r\n this._ringsCount = ringsCount;\r\n\r\n const tmpShape = this._tmpShape = [];\r\n for (let i = 0; i < shape.length; ++i) {\r\n tmpShape[i] = new THREE.Vector3();\r\n }\r\n }\r\n\r\n setItem(itemIdx, matrices, hasSlope = false, hasCut = false) {\r\n const ptsCount = this._chunkGeo._positions.length;\r\n const ringsCount = this._ringsCount;\r\n const chunkStartIdx = ptsCount * this._ringsCount * itemIdx * VEC_SIZE;\r\n\r\n this._setPoints(matrices, ptsCount, ringsCount, chunkStartIdx);\r\n\r\n if (hasSlope) {\r\n this._setSlopeNormals(ptsCount, ringsCount, chunkStartIdx);\r\n } else {\r\n this._setBaseNormals(ptsCount, ringsCount, chunkStartIdx);\r\n }\r\n\r\n if (hasCut) {\r\n this._addCut(ptsCount, ringsCount, chunkStartIdx);\r\n }\r\n }\r\n\r\n _setPoints(matrices, ptsCount, ringsCount, chunkStartIdx) {\r\n const tmpShape = this._tmpShape;\r\n const positions = this._positions;\r\n const shape = this._chunkGeo._positions;\r\n\r\n for (let i = 0, vtxIdx = chunkStartIdx; i < ringsCount; ++i) {\r\n const mtx = matrices[i];\r\n\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpShape[j].copy(shape[j]).applyMatrix4(mtx).toArray(positions, vtxIdx);\r\n }\r\n }\r\n }\r\n\r\n _setBaseNormals(ptsCount, ringsCount, chunkStartIdx) {\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n for (let i = 0, vtxIdx = chunkStartIdx; i < ringsCount; ++i, vtxIdx += nPtsInRing) {\r\n this._countNormalsInRing(ptsCount, vtxIdx, false);\r\n }\r\n }\r\n\r\n _setSlopeNormals(ptsCount, ringsCount, chunkStartIdx) {\r\n const normals = this._normals;\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n let vtxIdx = chunkStartIdx;\r\n // First ring\r\n // In all cases, besides cut, second ring is coincident to first. So values of first ring's normals doesn't\r\n // matter (In the cut case special handler will be applied later and will set them to correct values)\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n simpleNormal.toArray(normals, vtxIdx);\r\n }\r\n // second ring\r\n // If it isn't first Item we take normals' values from the last ring of the previous item (these rings are coincident)\r\n // else we count normals' values based on next ring information\r\n if (vtxIdx - 2 * nPtsInRing > 0) {\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpRes.fromArray(normals, vtxIdx - 2 * nPtsInRing).toArray(normals, vtxIdx);\r\n }\r\n } else {\r\n this._countNormalsInRing(ptsCount, vtxIdx, true, +nPtsInRing);\r\n vtxIdx += nPtsInRing;\r\n }\r\n // other rings\r\n // we count normals' values based on previous ring information\r\n for (let i = 2; i < ringsCount; ++i, vtxIdx += nPtsInRing) {\r\n this._countNormalsInRing(ptsCount, vtxIdx, true, -nPtsInRing);\r\n }\r\n }\r\n\r\n // Counting normals:\r\n // - Slope\r\n // Radius changes throught part => normals aren't parallel with the plane contains section points\r\n // normal = vTangentInSectionPlane x vToSuchPointInPrevSection (all vectors are scaled for being 1 in length)\r\n // - No slope\r\n // Radius doesn't change throught part => normals are parallel with the plane contains section points\r\n // normal = vToPrevPointInSection + vToNextPointInSection (all vectors are scaled for being 1 in length)\r\n _countNormalsInRing(ptsCount, vtxIdx, isSlope, shiftToExtraPt) {\r\n const tmpShape = this._tmpShape;\r\n const normals = this._normals;\r\n\r\n tmpShape[0].fromArray(this._positions, vtxIdx);\r\n tmpShape[ptsCount - 1].fromArray(this._positions, vtxIdx + (ptsCount - 1) * VEC_SIZE);\r\n\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n if (j < ptsCount - 1) {\r\n tmpShape[j + 1].fromArray(this._positions, vtxIdx + VEC_SIZE);\r\n }\r\n\r\n if (isSlope) {\r\n nearRingPt.fromArray(this._positions, vtxIdx + shiftToExtraPt);\r\n\r\n tmpPrev.subVectors(tmpShape[(j + ptsCount - 1) % ptsCount], tmpShape[(j + 1) % ptsCount]).normalize();\r\n tmpNext.subVectors(tmpShape[j], nearRingPt).normalize();\r\n tmpRes.crossVectors(tmpNext, tmpPrev).normalize().toArray(normals, vtxIdx);\r\n } else {\r\n tmpPrev.subVectors(tmpShape[j], tmpShape[(j + ptsCount - 1) % ptsCount]).normalize();\r\n tmpNext.subVectors(tmpShape[j], tmpShape[(j + 1) % ptsCount]).normalize();\r\n tmpRes.addVectors(tmpPrev, tmpNext).normalize().toArray(normals, vtxIdx);\r\n }\r\n }\r\n }\r\n\r\n _addCut(ptsCount, ringsCount, chunkStartIdx) {\r\n // Nothing to do if item is flat or only line\r\n if (ptsCount < 3 || ringsCount < 2) {\r\n return;\r\n }\r\n const positions = this._positions;\r\n const normals = this._normals;\r\n const tmpShape = this._tmpShape;\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n // Normal to the cut plane is equal to cross product of two vectors which are lying in it\r\n tmpShape[0].fromArray(positions, chunkStartIdx);\r\n tmpShape[1].fromArray(positions, chunkStartIdx + VEC_SIZE);\r\n tmpShape[2].fromArray(positions, chunkStartIdx + 2 * VEC_SIZE);\r\n\r\n tmpPrev.subVectors(tmpShape[1], tmpShape[0]).normalize();\r\n tmpNext.subVectors(tmpShape[1], tmpShape[2]).normalize();\r\n normalOnCut.crossVectors(tmpPrev, tmpNext).normalize();\r\n\r\n let vtxIdx = chunkStartIdx;\r\n // First and second rings normals' values are equal to value of normal to the cutting plane\r\n for (let j = 0; j < ptsCount * 2; ++j, vtxIdx += VEC_SIZE) {\r\n normalOnCut.toArray(normals, vtxIdx);\r\n }\r\n if (ringsCount > 2) {\r\n // Third ring points are coincident to first ring points, but have different normals. It makes sharp angle near cut\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpRes.fromArray(positions, vtxIdx - nPtsInRing).toArray(positions, vtxIdx);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default ExtrudedObjectsGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_IDC_16BIT = 65535;\r\nconst VERTEX_PER_SEGMENT = 4;\r\nconst POS_SIZE = 4;\r\nconst DIR_SIZE = 3;\r\nconst COL_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\nconst direction = new THREE.Vector3();\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\n\r\nfunction getSubset(arr, startSegmentIdx, segmentsCount, elemSize) {\r\n const start = startSegmentIdx * VERTEX_PER_SEGMENT;\r\n const end = start + segmentsCount * VERTEX_PER_SEGMENT;\r\n return arr.subarray(start * elemSize, end * elemSize);\r\n}\r\n\r\n/**\r\n * This class represents lines geometry which consists of screen-aligned narrow quad of variable width.\r\n *\r\n * @constructor\r\n *\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n * collision geometry.\r\n */\r\n\r\nclass ThickLinesGeometry extends THREE.BufferGeometry {\r\n constructor(segmentsCount) {\r\n super();\r\n this._initVertices(segmentsCount);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('position').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n this.getAttribute('direction').needsUpdate = true;\r\n }\r\n\r\n setColor(segmentIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n let idx = segmentIdx * VERTEX_PER_SEGMENT * COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n setSegment(segmentIdx, pos1, pos2) {\r\n direction.subVectors(pos1, pos2);\r\n direction.normalize();\r\n const positions = this._positions;\r\n const directions = this._directions;\r\n let idx = segmentIdx * VERTEX_PER_SEGMENT * POS_SIZE;\r\n let dirIdx = segmentIdx * VERTEX_PER_SEGMENT * DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos1.x, pos1.y, pos1.z, 0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos1.x, pos1.y, pos1.z, -0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos2.x, pos2.y, pos2.z, 0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos2.x, pos2.y, pos2.z, -0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n }\r\n\r\n setOpacity(startSegIdx, endSegIdx, value) {\r\n const start = startSegIdx * VERTEX_PER_SEGMENT;\r\n const end = endSegIdx * VERTEX_PER_SEGMENT;\r\n _.fill(this.alpha, value, end, start);\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubsetSegments(startSegmentIdx, segmentsCount) {\r\n return [\r\n getSubset(this._positions, startSegmentIdx, segmentsCount, POS_SIZE),\r\n getSubset(this._directions, startSegmentIdx, segmentsCount, DIR_SIZE),\r\n ];\r\n }\r\n\r\n getSubsetColors(startSegmentIdx, segmentsCount) {\r\n return getSubset(this._colors, startSegmentIdx, segmentsCount, COL_SIZE);\r\n }\r\n\r\n getSubsetOpacities(startSegmentIdx, segmentsCount) {\r\n return getSubset(this._alpha, startSegmentIdx, segmentsCount, 1);\r\n }\r\n\r\n getNumVertexPerSegment() {\r\n return VERTEX_PER_SEGMENT;\r\n }\r\n\r\n getPositionSize() {\r\n return POS_SIZE;\r\n }\r\n\r\n setSegments(startSegmentIdx, positions) {\r\n const startPos = startSegmentIdx * VERTEX_PER_SEGMENT * POS_SIZE;\r\n if (positions instanceof Array && positions.length === 2) {\r\n this._positions.set(positions[0], startPos);\r\n const startDir = startSegmentIdx * VERTEX_PER_SEGMENT * DIR_SIZE;\r\n this._directions.set(positions[1], startDir); // dirs are geo part of vertex\r\n } else {\r\n this._positions.set(positions, startPos);\r\n }\r\n }\r\n\r\n setColors(startSegmentIdx, colors) {\r\n const start = startSegmentIdx * VERTEX_PER_SEGMENT * COL_SIZE;\r\n this._colors.set(colors, start);\r\n }\r\n\r\n _initVertices(segmentsCount) {\r\n this._buffersSize = segmentsCount * VERTEX_PER_SEGMENT;\r\n const pointsCount = this._buffersSize;\r\n const use32bitIndex = pointsCount > MAX_IDC_16BIT;\r\n this._index = utils.allocateTyped(use32bitIndex ? Uint32Array : Uint16Array, segmentsCount * 6);\r\n this._positions = utils.allocateTyped(Float32Array, pointsCount * POS_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, pointsCount * COL_SIZE);\r\n this._directions = utils.allocateTyped(Float32Array, pointsCount * DIR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, pointsCount);\r\n _.fill(alpha, 1.0);\r\n\r\n const index = this._index;\r\n let indexOffset = 0;\r\n let pointOffset = 0;\r\n for (let j = 0; j < segmentsCount; j++, indexOffset += 6, pointOffset += VERTEX_PER_SEGMENT) {\r\n index[indexOffset] = pointOffset;\r\n index[indexOffset + 1] = pointOffset + 1;\r\n index[indexOffset + 2] = pointOffset + 3;\r\n index[indexOffset + 3] = pointOffset;\r\n index[indexOffset + 4] = pointOffset + 2;\r\n index[indexOffset + 5] = pointOffset + 3;\r\n }\r\n this.setIndex(new THREE.BufferAttribute(this._index, 1));\r\n\r\n this.setAttribute('position', new THREE.BufferAttribute(this._positions, POS_SIZE));\r\n this.setAttribute('color', new THREE.BufferAttribute(this._colors, COL_SIZE));\r\n this.setAttribute('alphaColor', new THREE.BufferAttribute(alpha, 1));\r\n this.setAttribute('direction', new THREE.BufferAttribute(this._directions, DIR_SIZE));\r\n }\r\n}\r\n\r\nexport default ThickLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport BaseLinesGeometry from './ThickLinesGeometry';\r\n\r\n/**\r\n * This class represents geometry which consists lines. This can build bounding volumes\r\n * @constructor\r\n *\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n */\r\nclass LinesGeometry extends BaseLinesGeometry {\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n computeBoundingSphere() {\r\n const { boundingBox } = this;\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n if (boundingBox) {\r\n boundingBox.getCenter(center);\r\n }\r\n const positions = this._positions;\r\n const sphere = this.boundingSphere || new THREE.Sphere();\r\n const size = this._positions.length;\r\n const pos = new THREE.Vector3();\r\n const posSize = this.getPositionSize();\r\n for (let i = 0; i < size; i += posSize) {\r\n pos.set(positions[i], positions[i + 1], positions[i + 2]);\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n sphere.set(center, Math.sqrt(radiusSquared));\r\n this.boundingSphere = sphere;\r\n }\r\n\r\n computeBoundingBox() {\r\n const positions = this._positions;\r\n const box = new THREE.Box3();\r\n const size = this._positions.length;\r\n const tmpVec = new THREE.Vector3();\r\n const posSize = this.getPositionSize();\r\n for (let i = 0; i < size; i += posSize) {\r\n tmpVec.set(positions[i], positions[i + 1], positions[i + 2]);\r\n box.expandByPoint(tmpVec);\r\n }\r\n this.boundingBox = box;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n}\r\n\r\nexport default LinesGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst tmpVector = new THREE.Vector3();\r\nconst normMtx = new THREE.Matrix3();\r\n\r\nclass CylinderCollisionGeo extends ChunkedObjectsGeometry {\r\n constructor(instanceCount, polyComplexity) {\r\n const cylGeometry = new THREE.CylinderGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, true);\r\n super(cylGeometry, instanceCount);\r\n\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._chunkNorms = this._chunkGeo.attributes.normal.array;\r\n this._tmpVector = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const chunkSize = this._chunkSize;\r\n const itemOffset = chunkSize * itemIdx * VEC_SIZE;\r\n\r\n const tmpArray = this._tmpVector;\r\n const geoPos = this._chunkPos;\r\n const geoNorm = this._chunkNorms;\r\n\r\n const mtx1 = gfxutils.calcCylinderMatrix(botPos, topPos, itemRad);\r\n normMtx.getNormalMatrix(mtx1);\r\n let idx;\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoPos, idx);\r\n tmpVector.applyMatrix4(mtx1);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._positions.set(tmpArray, itemOffset);\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoNorm, idx);\r\n tmpVector.applyMatrix3(normMtx);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._normals.set(tmpArray, itemOffset);\r\n }\r\n}\r\nexport default CylinderCollisionGeo;\r\n","import LinesGeometry from './LinesGeometry';\r\nimport CylinderCollisionGeo from './CylinderCollisionGeo';\r\n\r\nconst COLLISION_RAD = 0.1;\r\n\r\n/**\r\n * This class represents geometry which consists of separate chunks.\r\n * Each chunk has same index and similar geometry with equal points and faces count.\r\n * Each chunk has by default only one color.\r\n * @constructor\r\n *\r\n * @param {number} chunksCount Total chunks count.\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n * @param {boolean} enableCollision Enable or disable collision where each segment is\r\n * a collidable cylinder.\r\n * collision geometry.\r\n */\r\nclass ChunkedLinesGeometry extends LinesGeometry {\r\n constructor(chunksCount, segmentsCount, enableCollision) {\r\n super(chunksCount * segmentsCount);\r\n this._init(segmentsCount);\r\n this._collisionGeo = enableCollision ? new CylinderCollisionGeo(chunksCount * segmentsCount, 3) : null;\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n computeBoundingSphere() {\r\n const collisionGeo = this._collisionGeo;\r\n if (collisionGeo) {\r\n collisionGeo.computeBoundingSphere();\r\n this.boundingSphere = collisionGeo.boundingSphere;\r\n return;\r\n }\r\n super.computeBoundingSphere();\r\n }\r\n\r\n computeBoundingBox() {\r\n const collisionGeo = this._collisionGeo;\r\n if (collisionGeo) {\r\n collisionGeo.computeBoundingBox();\r\n this.boundingBox = collisionGeo.boundingBox;\r\n return;\r\n }\r\n super.computeBoundingBox();\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const collisionGeo = this._collisionGeo;\r\n if (!collisionGeo) {\r\n return;\r\n }\r\n const segCount = this._chunkSize;\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n for (let i = 0, n = intersects.length; i < n; ++i) {\r\n let { chunkIdx } = intersects[i];\r\n if (chunkIdx === undefined) {\r\n continue;\r\n }\r\n chunkIdx = (chunkIdx / segCount) | 0;\r\n intersects[i].chunkIdx = chunkIdx;\r\n }\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n const chunkSize = this._chunkSize;\r\n for (let i = chunkIdx * chunkSize, end = i + chunkSize; i < end; ++i) {\r\n super.setColor(i, colorVal);\r\n }\r\n }\r\n\r\n setSegment(chunkIdx, segIdx, pos1, pos2) {\r\n const chunkSize = this._chunkSize;\r\n const idx = chunkIdx * chunkSize + segIdx;\r\n super.setSegment(idx, pos1, pos2);\r\n if (this._collisionGeo) {\r\n this._collisionGeo.setItem(chunkIdx * chunkSize + segIdx, pos1, pos2, COLLISION_RAD);\r\n }\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const chunkSize = this._chunkSize;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const left = chunkIndices[i] * chunkSize;\r\n super.setOpacity(left, left + chunkSize - 1, value);\r\n }\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const chunkSize = this._chunkSize;\r\n const subset = new ChunkedLinesGeometry(instanceCount, chunkSize, false);\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const dstPtOffset = i * chunkSize;\r\n const startSegIdx = chunkIndices[i] * chunkSize;\r\n subset.setSegments(dstPtOffset, this.getSubsetSegments(startSegIdx, chunkSize));\r\n subset.setColors(dstPtOffset, this.getSubsetColors(startSegIdx, chunkSize));\r\n }\r\n\r\n subset.boundingSphere = this.boundingSphere;\r\n subset.boundingBox = this.boundingBox;\r\n return [subset];\r\n }\r\n\r\n _init(chunkSize) {\r\n this._chunkSize = chunkSize;\r\n }\r\n}\r\n\r\nexport default ChunkedLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport LinesGeometry from './LinesGeometry';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\n\r\nconst COLLISION_RAD = 0.3;\r\nconst tmpVector = new THREE.Vector3();\r\n\r\nclass TwoColorLinesGeometry extends LinesGeometry {\r\n constructor(segmentsCount) {\r\n super(segmentsCount * 2);\r\n this._init(segmentsCount);\r\n this._collisionGeo = new Simple2CCylindersGeometry(segmentsCount, 3);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos) {\r\n this._collisionGeo.setItem(itemIdx, botPos, topPos, COLLISION_RAD);\r\n const offset = 2 * itemIdx;// there are two points per segment\r\n tmpVector.lerpVectors(botPos, topPos, 0.5);\r\n super.setSegment(offset, botPos, tmpVector);\r\n super.setSegment(offset + 1, tmpVector, topPos);\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const offset = 2 * itemIdx;// there are two points per segment\r\n super.setColor(offset, colorVal1);\r\n super.setColor(offset + 1, colorVal2);\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n if (this._collisionGeo) {\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n }\r\n }\r\n\r\n getSubset(segmentIndices) {\r\n const instanceCount = segmentIndices.length;\r\n const subset = new TwoColorLinesGeometry(instanceCount, false);\r\n for (let i = 0, n = instanceCount; i < n; ++i) {\r\n const startSegIdx = segmentIndices[i];\r\n subset.setSegments(i, this.getSubsetSegments(startSegIdx, 1));\r\n subset.setColors(i, this.getSubsetColors(startSegIdx, 1));\r\n }\r\n\r\n subset.boundingSphere = this.boundingSphere;\r\n subset.boundingBox = this.boundingBox;\r\n return [subset];\r\n }\r\n\r\n _init(segmentsCount) {\r\n this._segCounts = segmentsCount * 2;\r\n }\r\n}\r\n// (???)parent = LinesGeometry.prototype;\r\n\r\nexport default TwoColorLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport ChunkedLinesGeometry from './ChunkedLinesGeometry';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst vectors = [\r\n new THREE.Vector3(1, 0, 0),\r\n new THREE.Vector3(-1, 0, 0),\r\n new THREE.Vector3(0, 1, 0),\r\n new THREE.Vector3(0, -1, 0),\r\n new THREE.Vector3(0, 0, 1),\r\n new THREE.Vector3(0, 0, -1),\r\n];\r\nconst vecCount = vectors.length;\r\nconst tempPos1 = new THREE.Vector3();\r\nconst tempPos2 = new THREE.Vector3();\r\n\r\nclass CrossGeometry extends SphereCollisionGeo(ChunkedLinesGeometry) {\r\n constructor(chunksCount) {\r\n super(chunksCount, chunksCount, (vecCount / 2) | 0, false);\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n\r\n for (let i = 0; i < vecCount / 2; ++i) {\r\n const first = i * 2;\r\n tempPos1.x = itemPos.x + vectors[first].x * itemRad;\r\n tempPos1.y = itemPos.y + vectors[first].y * itemRad;\r\n tempPos1.z = itemPos.z + vectors[first].z * itemRad;\r\n const second = first + 1;\r\n tempPos2.x = itemPos.x + vectors[second].x * itemRad;\r\n tempPos2.y = itemPos.y + vectors[second].y * itemRad;\r\n tempPos2.z = itemPos.z + vectors[second].z * itemRad;\r\n this.setSegment(itemIdx, i, tempPos1, tempPos2);\r\n }\r\n }\r\n}\r\nexport default CrossGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst POS_RAD_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\n\r\n/**\r\n * This is a base class for isosurface algorithms.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\nclass IsoSurfaceGeometry extends THREE.BufferGeometry {\r\n constructor(spheresCount, opts) {\r\n super();\r\n\r\n this._opts = opts;\r\n this.zClip = this._opts.zClip;\r\n this._posRad = utils.allocateTyped(Float32Array, spheresCount * POS_RAD_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, spheresCount * COLOR_SIZE);\r\n }\r\n\r\n setItem(chunkIdx, pos, radius) {\r\n const posRad = this._posRad;\r\n let idx = POS_RAD_SIZE * chunkIdx;\r\n posRad[idx++] = pos.x;\r\n posRad[idx++] = pos.y;\r\n posRad[idx++] = pos.z;\r\n posRad[idx] = radius;\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n const colors = this._colors;\r\n let idx = COLOR_SIZE * chunkIdx;\r\n colors[idx++] = tmpColor.r;\r\n colors[idx++] = tmpColor.g;\r\n colors[idx] = tmpColor.b;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n finishUpdate() {\r\n this._build();\r\n }\r\n\r\n setOpacity() {\r\n // not implemented\r\n }\r\n\r\n raycast() {\r\n }\r\n\r\n getSubset() {\r\n return [];\r\n }\r\n}\r\nexport default IsoSurfaceGeometry;\r\n","import utils from '../../utils';\r\n\r\n/**\r\n * Class for marching cube\r\n * Stores 8 points and 8 float values are stored together in linear array\r\n * Int values for has intersection or not - in integer32 linear array\r\n * Int values for bits flags - in integer32 linear array\r\n *\r\n */\r\nclass IsoSurfaceMarchCube {\r\n constructor() {\r\n this.pointsValuesLinear = null;\r\n this.hasIntersection = null;\r\n this.bitsInside = null;\r\n }\r\n\r\n create(numCellsPerSide) {\r\n const vx7000000 = 0x7000000;\r\n const n3 = numCellsPerSide * numCellsPerSide * numCellsPerSide;\r\n if (n3 > vx7000000) {\r\n throw new Error('Too large cube dimension: lead to memory huge uasge');\r\n }\r\n this.pointsValuesLinear = utils.allocateTyped(Float32Array, (2 << (2 + 2)) * n3);\r\n this.hasIntersection = utils.allocateTyped(Int32Array, n3);\r\n this.bitsInside = utils.allocateTyped(Int32Array, n3);\r\n return 0;\r\n }\r\n\r\n destroy() {\r\n this.bitsInside = null;\r\n this.hasIntersection = null;\r\n this.pointsValuesLinear = null;\r\n }\r\n}\r\n\r\n/* eslint-disable no-magic-numbers */\r\nIsoSurfaceMarchCube.prototype.striIndicesMarchCube = [\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1,\r\n 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1,\r\n 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1,\r\n 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1,\r\n 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1,\r\n 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1,\r\n 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1,\r\n 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1,\r\n 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1,\r\n 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1,\r\n 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1,\r\n 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1,\r\n 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1,\r\n 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1,\r\n 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1,\r\n 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1,\r\n 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1,\r\n 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1,\r\n 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1,\r\n 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1,\r\n 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1,\r\n 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1,\r\n 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1,\r\n 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1,\r\n 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1,\r\n 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1,\r\n 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1,\r\n 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1,\r\n 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1,\r\n 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1,\r\n 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1,\r\n 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1,\r\n 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1,\r\n 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1,\r\n 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1,\r\n 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1,\r\n 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1,\r\n 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1,\r\n 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1,\r\n 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1,\r\n 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1,\r\n 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1,\r\n 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1,\r\n 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1,\r\n 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1,\r\n 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1,\r\n 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1,\r\n 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1,\r\n 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1,\r\n 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1,\r\n 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1,\r\n 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1,\r\n 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1,\r\n 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1,\r\n 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1,\r\n 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1,\r\n 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1,\r\n 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1,\r\n 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1,\r\n 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1,\r\n 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1,\r\n 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1,\r\n 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1,\r\n 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1,\r\n 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1,\r\n 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1,\r\n 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1,\r\n 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1,\r\n 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1,\r\n 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1,\r\n 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1,\r\n 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1,\r\n 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1,\r\n 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1,\r\n 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1,\r\n 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1,\r\n 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1,\r\n 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1,\r\n 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1,\r\n 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1,\r\n 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1,\r\n 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1,\r\n 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1,\r\n 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1,\r\n 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1,\r\n 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1,\r\n 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1,\r\n 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1,\r\n 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1,\r\n 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1,\r\n 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1,\r\n 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1,\r\n 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1,\r\n 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1,\r\n 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1,\r\n 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1,\r\n 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1,\r\n 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1,\r\n 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1,\r\n 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1,\r\n 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1,\r\n 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1,\r\n 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1,\r\n 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1,\r\n 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1,\r\n 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1,\r\n 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1,\r\n 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1,\r\n 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n];\r\n/* eslint-enable no-magic-numbers */\r\n\r\nexport default IsoSurfaceMarchCube;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceMarchCube from './IsoSurfaceMarchCube';\r\nimport utils from '../../utils';\r\n\r\nconst edgeTable = [\r\n 0x0, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c,\r\n 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,\r\n 0x190, 0x99, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c,\r\n 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,\r\n 0x230, 0x339, 0x33, 0x13a, 0x636, 0x73f, 0x435, 0x53c,\r\n 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,\r\n 0x3a0, 0x2a9, 0x1a3, 0xaa, 0x7a6, 0x6af, 0x5a5, 0x4ac,\r\n 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,\r\n 0x460, 0x569, 0x663, 0x76a, 0x66, 0x16f, 0x265, 0x36c,\r\n 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,\r\n 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff, 0x3f5, 0x2fc,\r\n 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,\r\n 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55, 0x15c,\r\n 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,\r\n 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc,\r\n 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,\r\n 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc,\r\n 0xcc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,\r\n 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c,\r\n 0x15c, 0x55, 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,\r\n 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc,\r\n 0x2fc, 0x3f5, 0xff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,\r\n 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c,\r\n 0x36c, 0x265, 0x16f, 0x66, 0x76a, 0x663, 0x569, 0x460,\r\n 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac,\r\n 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa, 0x1a3, 0x2a9, 0x3a0,\r\n 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c,\r\n 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33, 0x339, 0x230,\r\n 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c,\r\n 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99, 0x190,\r\n 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c,\r\n 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0];\r\n\r\nfunction _voxelGradientFast(v, point, grad) {\r\n const g = v.getValue(point.x, point.y, point.z);\r\n grad.set(g[0], g[1], g[2]);\r\n}\r\n\r\n// Helper class GridCell\r\nclass GridCell {\r\n constructor() {\r\n this._arrSize = 8;\r\n this.p = new Array(this._arrSize);\r\n this.g = new Array(this._arrSize);\r\n this.val = new Array(this._arrSize);\r\n for (let i = 0; i < this._arrSize; ++i) {\r\n this.p[i] = new THREE.Vector3();\r\n this.g[i] = new THREE.Vector3();\r\n }\r\n this.cubeIndex = 0;\r\n }\r\n}\r\n\r\n// Helper class Triangle\r\nclass Triangle {\r\n constructor() {\r\n this.a = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n\r\n this.b = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n\r\n this.c = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n }\r\n}\r\n\r\nfunction createArray(arrSize) {\r\n const arr = new Array(arrSize);\r\n for (let i = 0; i < arrSize; ++i) {\r\n arr[i] = new THREE.Vector3();\r\n }\r\n\r\n return arr;\r\n}\r\n\r\nclass IsoSurface {\r\n constructor() {\r\n this._numTriangles = 0;\r\n this._numVertices = 0;\r\n this._position = [];\r\n this._normals = [];\r\n this._colors = null;\r\n this._indices = [];\r\n this._volumetricData = null;\r\n this._xAxis = new THREE.Vector3();\r\n this._yAxis = new THREE.Vector3();\r\n this._zAxis = new THREE.Vector3();\r\n this._xDir = new THREE.Vector3();\r\n this._yDir = new THREE.Vector3();\r\n this._zDir = new THREE.Vector3();\r\n }\r\n\r\n _prepareAxesAndDirs() {\r\n const volData = this._volumetricData;\r\n\r\n const cellSize = volData.getCellSize();\r\n\r\n // calculate cell axes\r\n const xAxis = this._xAxis;\r\n const yAxis = this._yAxis;\r\n const zAxis = this._zAxis;\r\n const xDir = this._xDir;\r\n const yDir = this._yDir;\r\n const zDir = this._zDir;\r\n\r\n xAxis.set(cellSize.x, 0, 0);\r\n yAxis.set(0, cellSize.y, 0);\r\n zAxis.set(0, 0, cellSize.z);\r\n\r\n xDir.set(1, 0, 0);\r\n yDir.set(0, 1, 0);\r\n zDir.set(0, 0, 1);\r\n\r\n // flip normals if coordinate system is in the wrong handedness\r\n const tmp = new THREE.Vector3();\r\n tmp.crossVectors(xDir, yDir);\r\n if (tmp.dot(zDir) < 0) {\r\n xDir.negate();\r\n yDir.negate();\r\n zDir.negate();\r\n }\r\n\r\n // check that the grid is in the all-positive octant of the coordinate system\r\n if (xDir.x < 0 || xDir.y < 0 || xDir.z < 0\r\n || yDir.x < 0 || yDir.y < 0 || yDir.z < 0\r\n || zDir.x < 0 || zDir.y < 0 || zDir.z < 0) {\r\n return false;\r\n }\r\n\r\n // check that the grid is axis-aligned\r\n const notZero = (axe) => Math.abs(axe) > Number.EPSILON;\r\n return !(notZero(xAxis.y) || notZero(xAxis.z)\r\n || notZero(yAxis.x) || notZero(yAxis.z)\r\n || notZero(zAxis.x) || notZero(zAxis.y));\r\n }\r\n\r\n _vertexInterp(isoLevel, grid, ind1, ind2, vertex, normal) {\r\n const p1 = grid.p[ind1];\r\n const p2 = grid.p[ind2];\r\n const n1 = grid.g[ind1];\r\n const n2 = grid.g[ind2];\r\n const valP1 = grid.val[ind1];\r\n const valP2 = grid.val[ind2];\r\n const isoDiffP1 = isoLevel - valP1;\r\n const diffValP2P1 = valP2 - valP1;\r\n\r\n let mu = 0.0;\r\n\r\n if (Math.abs(diffValP2P1) > 0.0) {\r\n mu = isoDiffP1 / diffValP2P1;\r\n }\r\n mu = mu > 1.0 ? 1.0 : mu;\r\n vertex.lerpVectors(p1, p2, mu);\r\n normal.lerpVectors(n1, n2, mu);\r\n }\r\n\r\n static _triTable = IsoSurfaceMarchCube.prototype.striIndicesMarchCube;\r\n\r\n static _arrSize = 12;\r\n\r\n static _firstIndices = [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3];\r\n\r\n static _secondIndices = [1, 2, 3, 0, 5, 6, 7, 4, 4, 5, 6, 7];\r\n\r\n static _vertexList = createArray(IsoSurface._arrSize);\r\n\r\n static _normalList = createArray(IsoSurface._arrSize);\r\n\r\n _polygonize(grid, isoLevel, triangles) {\r\n const { cubeIndex } = grid;\r\n let i = 0;\r\n const arrSize = IsoSurface._arrSize;\r\n const firstIndices = IsoSurface._firstIndices;\r\n const secondIndices = IsoSurface._secondIndices;\r\n const vertexList = IsoSurface._vertexList;\r\n const normalList = IsoSurface._normalList;\r\n\r\n for (; i < arrSize; ++i) {\r\n if (edgeTable[cubeIndex] & (1 << i)) {\r\n this._vertexInterp(\r\n isoLevel,\r\n grid,\r\n firstIndices[i],\r\n secondIndices[i],\r\n vertexList[i],\r\n normalList[i],\r\n );\r\n }\r\n }\r\n\r\n let triCount = 0;\r\n const triTblIdx = cubeIndex * 16;\r\n const triTable = IsoSurface._triTable;\r\n\r\n for (i = 0; triTable[triTblIdx + i] !== -1; i += 3) {\r\n triangles[triCount].a.p.copy(vertexList[triTable[triTblIdx + i]]);\r\n triangles[triCount].a.n.copy(normalList[triTable[triTblIdx + i]]);\r\n\r\n triangles[triCount].b.p.copy(vertexList[triTable[triTblIdx + i + 1]]);\r\n triangles[triCount].b.n.copy(normalList[triTable[triTblIdx + i + 1]]);\r\n\r\n triangles[triCount].c.p.copy(vertexList[triTable[triTblIdx + i + 2]]);\r\n triangles[triCount].c.n.copy(normalList[triTable[triTblIdx + i + 2]]);\r\n ++triCount;\r\n }\r\n\r\n return triCount;\r\n }\r\n\r\n _doGridPosNorms(isoValue, step, appendSimple) {\r\n const vol = this._volumetricData;\r\n const volData = this._volumetricData.getData();\r\n const dim = vol.getDimensions();\r\n const xSize = dim[0];\r\n const ySize = dim[1];\r\n const zSize = dim[2];\r\n const stepX = step * vol.getStrideX();\r\n const stepY = step * vol.getStrideY();\r\n const stepZ = step * vol.getStrideZ();\r\n\r\n const gc = new GridCell();\r\n const gcVal = gc.val;\r\n const gcValSize = gc.val.length;\r\n const additions = [\r\n new THREE.Vector3(0, 0, 0), // 0\r\n new THREE.Vector3(step, 0, 0), // 1\r\n new THREE.Vector3(step, step, 0), // 2\r\n new THREE.Vector3(0, step, 0), // 3\r\n new THREE.Vector3(0, 0, step), // 4\r\n new THREE.Vector3(step, 0, step), // 5\r\n new THREE.Vector3(step, step, step), // 6\r\n new THREE.Vector3(0, step, step), // 7\r\n ];\r\n\r\n const tmpTriCount = 5;\r\n const triangles = new Array(tmpTriCount);\r\n for (let j = 0; j < tmpTriCount; ++j) {\r\n triangles[j] = new Triangle();\r\n }\r\n\r\n let appendVertex;\r\n const self = this;\r\n const positions = this._position;\r\n const normals = this._normals;\r\n if (appendSimple) {\r\n // Special case for axis-aligned grid with positive unit vector normals\r\n appendVertex = (function () {\r\n const axis = new THREE.Vector3(self._xAxis.x, self._yAxis.y, self._zAxis.z);\r\n return function (triVertex) {\r\n const vertex = triVertex.p.clone();\r\n vertex.multiply(axis);\r\n positions.push(vertex.add(self._origin));\r\n normals.push(triVertex.n.clone());\r\n };\r\n }());\r\n } else {\r\n appendVertex = (function () {\r\n const posMtx = new THREE.Matrix3();\r\n posMtx.set(\r\n self._xAxis.x,\r\n self._yAxis.x,\r\n self._zAxis.x,\r\n self._xAxis.y,\r\n self._yAxis.y,\r\n self._zAxis.y,\r\n self._xAxis.z,\r\n self._yAxis.z,\r\n self._zAxis.z,\r\n );\r\n const normMtx = new THREE.Matrix3();\r\n normMtx.set(\r\n self._xDir.x,\r\n self._yDir.x,\r\n self._zDir.x,\r\n self._xDir.y,\r\n self._yDir.y,\r\n self._zDir.y,\r\n self._xDir.z,\r\n self._yDir.z,\r\n self._zDir.z,\r\n );\r\n\r\n return function (triVertex) {\r\n positions.push(triVertex.p.clone().applyMatrix3(posMtx).add(self._origin));\r\n normals.push(triVertex.n.clone().applyMatrix3(normMtx));\r\n };\r\n }());\r\n }\r\n const indices = this._indices;\r\n\r\n let globTriCount = 0;\r\n\r\n for (let z = 0; z < (zSize - step); z += step) {\r\n for (let y = 0; y < (ySize - step); y += step) {\r\n let idx = vol.getDirectIdx(0, y, z);\r\n for (let x = 0; x < (xSize - step); x += step, idx += stepX) {\r\n /* eslint-disable no-multi-spaces */\r\n /* eslint-disable computed-property-spacing */\r\n gcVal[0] = volData[idx];\r\n gcVal[1] = volData[idx + stepX];\r\n gcVal[3] = volData[idx + stepY];\r\n gcVal[2] = volData[idx + stepX + stepY];\r\n gcVal[4] = volData[idx + stepZ];\r\n gcVal[5] = volData[idx + stepX + stepZ];\r\n gcVal[7] = volData[idx + stepY + stepZ];\r\n gcVal[6] = volData[idx + stepX + stepY + stepZ];\r\n /* eslint-enable no-multi-spaces */\r\n /* eslint-enable computed-property-spacing */\r\n\r\n // Determine the index into the edge table which\r\n // tells us which vertices are inside of the surface\r\n let cubeIndex = 0;\r\n let i = 0;\r\n for (; i < gcValSize; ++i) {\r\n if (gcVal[i] < isoValue) {\r\n cubeIndex |= (1 << i);\r\n }\r\n }\r\n\r\n if (edgeTable[cubeIndex] === 0) {\r\n continue;\r\n }\r\n\r\n gc.cubeIndex = cubeIndex;\r\n for (i = 0; i < gcValSize; ++i) {\r\n gc.p[i].set(x + additions[i].x, y + additions[i].y, z + additions[i].z);\r\n _voxelGradientFast(this._gradient, gc.p[i], gc.g[i]);\r\n }\r\n\r\n // calculate vertices and facets for this cube,\r\n // calculate normals by interpolating between the negated\r\n // normalized volume gradients for the 8 reference voxels\r\n const triCount = this._polygonize(gc, isoValue, triangles);\r\n globTriCount += triCount;\r\n\r\n // append triangles using different techniques\r\n for (i = 0; i < triCount; ++i) {\r\n indices.push(this._numTriangles * 3);\r\n indices.push(this._numTriangles * 3 + 1);\r\n indices.push(this._numTriangles * 3 + 2);\r\n ++this._numTriangles;\r\n\r\n appendVertex(triangles[i].a);\r\n appendVertex(triangles[i].b);\r\n appendVertex(triangles[i].c);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return globTriCount;\r\n }\r\n\r\n compute(volData, origin, isoValue, step) {\r\n this._volumetricData = volData;\r\n this._origin = origin;\r\n\r\n this._gradient = volData.computeGradient();\r\n\r\n this._doGridPosNorms(isoValue, step, this._prepareAxesAndDirs());\r\n }\r\n\r\n _remapIndices(vertexMap, idcCount) {\r\n const indices = this._indices;\r\n const newIndices = utils.allocateTyped(Uint32Array, idcCount);\r\n for (let i = 0; i < idcCount; ++i) {\r\n indices[i] = vertexMap[indices[i]];\r\n newIndices[i] = indices[i];\r\n }\r\n this._indices = newIndices;\r\n }\r\n\r\n _remapVertices(vertices, normals, count) {\r\n const newPositions = utils.allocateTyped(Float32Array, count * 3);\r\n const newNormals = utils.allocateTyped(Float32Array, count * 3);\r\n for (let i = 0; i < count; ++i) {\r\n const pos = vertices[i];\r\n newPositions[i * 3] = pos.x;\r\n newPositions[i * 3 + 1] = pos.y;\r\n newPositions[i * 3 + 2] = pos.z;\r\n const norm = normals[i].normalize();\r\n newNormals[i * 3] = norm.x;\r\n newNormals[i * 3 + 1] = norm.y;\r\n newNormals[i * 3 + 2] = norm.z;\r\n }\r\n this._position = newPositions;\r\n this._normals = newNormals;\r\n }\r\n\r\n vertexFusion(offset, len) {\r\n const faceVer = this._indices.length;\r\n const vertices = this._position;\r\n const normals = this._normals;\r\n const oldVerCount = vertices.length | 0;\r\n if (faceVer === 0 || oldVerCount === 0) {\r\n return;\r\n }\r\n const vMap = utils.allocateTyped(Uint32Array, oldVerCount);\r\n vMap[0] = 0;\r\n let newVer = 1;\r\n\r\n let i = 1;\r\n for (; i < oldVerCount; ++i) {\r\n const start = newVer - offset < 0 ? 0 : newVer - offset;\r\n const end = start + len > newVer ? newVer : start + len;\r\n let matchedIndex = -1;\r\n\r\n for (let j = start; j < end; ++j) {\r\n if (Math.abs(vertices[i] - vertices[j]) < Number.EPSILON) {\r\n matchedIndex = j;\r\n break;\r\n }\r\n }\r\n\r\n if (matchedIndex !== -1) {\r\n vMap[i] = matchedIndex;\r\n } else {\r\n vertices[newVer].copy(vertices[i]);\r\n normals[newVer].copy(normals[i]);\r\n vMap[i] = newVer;\r\n ++newVer;\r\n }\r\n }\r\n\r\n this._remapIndices(vMap, faceVer);\r\n this._remapVertices(vertices, normals, newVer);\r\n }\r\n\r\n // Assign per-vertex colors from a volumetric texture map (same dimensions as the original volumetric data).\r\n // Along with color dominating atom is determined for each vertex\r\n // and vertices with atom out of \"visible\" subset get filtered out.\r\n // XXX only handles orthogonal volumes currently\r\n setColorVolTex(colorMap, atomMap, atomWeightMap, visibilitySelector) {\r\n let i;\r\n let idx;\r\n const numVerts = this._position.length / 3;\r\n const vertices = this._position;\r\n const origin = this._origin;\r\n const dim = this._volumetricData.getDimensions();\r\n const xs = dim[0] - 1;\r\n const ys = dim[1] - 1;\r\n const zs = dim[2] - 1;\r\n\r\n const colorData = colorMap.getData();\r\n const strideX = colorMap.getStrideX();\r\n const strideY = colorMap.getStrideY();\r\n const strideZ = colorMap.getStrideZ();\r\n\r\n let atomWeightData;\r\n let atomStrideX;\r\n let atomStrideY;\r\n let atomStrideZ;\r\n\r\n if (visibilitySelector !== null) {\r\n atomWeightData = atomWeightMap.getData();\r\n atomStrideX = atomWeightMap.getStrideX();\r\n atomStrideY = atomWeightMap.getStrideY();\r\n atomStrideZ = atomWeightMap.getStrideZ();\r\n }\r\n\r\n const xInv = 1.0 / this._xAxis.x;\r\n const yInv = 1.0 / this._yAxis.y;\r\n const zInv = 1.0 / this._zAxis.z;\r\n\r\n let atomLookup = [];\r\n let atomWeights = [];\r\n const colors = utils.allocateTyped(Float32Array, numVerts * 3);\r\n\r\n function interp(mu, idx1, idx2, c) {\r\n c[0] = (1 - mu) * colorData[idx1] + mu * colorData[idx2];\r\n c[1] = (1 - mu) * colorData[idx1 + 1] + mu * colorData[idx2 + 1];\r\n c[2] = (1 - mu) * colorData[idx1 + 2] + mu * colorData[idx2 + 2];\r\n }\r\n\r\n function collectWeight(ai, coefX, coefY, coefZ) {\r\n const a = atomMap[ai]; // atomWeightMap is a scalar field, so index into atom map should be the same\r\n if (a != null) {\r\n atomLookup[a.index] = a;\r\n const w = coefX * coefY * coefZ * atomWeightData[ai];\r\n if (typeof atomWeights[a.index] === 'undefined') {\r\n atomWeights[a.index] = w;\r\n } else {\r\n atomWeights[a.index] += w;\r\n }\r\n }\r\n }\r\n\r\n const vMap = utils.allocateTyped(Int32Array, numVerts);\r\n let newVerCount = 0;\r\n\r\n for (i = 0; i < numVerts; i++) {\r\n const ind = i * 3;\r\n const vx = (vertices[ind] - origin.x) * xInv;\r\n const vy = (vertices[ind + 1] - origin.y) * yInv;\r\n const vz = (vertices[ind + 2] - origin.z) * zInv;\r\n const x = Math.min(Math.max(vx, 0), xs) | 0;\r\n const y = Math.min(Math.max(vy, 0), ys) | 0;\r\n const z = Math.min(Math.max(vz, 0), zs) | 0;\r\n\r\n const mux = (vx - x);\r\n const muy = (vy - y);\r\n const muz = (vz - z);\r\n\r\n if (visibilitySelector != null) {\r\n // collect atom weights\r\n atomLookup = [];\r\n atomWeights = [];\r\n idx = atomWeightMap.getDirectIdx(x, y, z);\r\n collectWeight(idx, 1 - mux, 1 - muy, 1 - muz);\r\n collectWeight(idx + atomStrideX, mux, 1 - muy, 1 - muz);\r\n collectWeight(idx + atomStrideY, 1 - mux, muy, 1 - muz);\r\n collectWeight(idx + atomStrideX + atomStrideY, mux, muy, 1 - muz);\r\n collectWeight(idx + atomStrideZ, 1 - mux, 1 - muy, muz);\r\n collectWeight(idx + atomStrideX + atomStrideZ, mux, 1 - muy, muz);\r\n collectWeight(idx + atomStrideY + atomStrideZ, 1 - mux, muy, muz);\r\n collectWeight(idx + atomStrideX + atomStrideY + atomStrideZ, mux, muy, muz);\r\n\r\n // find dominant atom\r\n let maxWeight = 0.0;\r\n let dominantIdx = -1;\r\n for (const atomIdx in atomWeights) {\r\n if (atomWeights[atomIdx] > maxWeight) {\r\n dominantIdx = atomIdx;\r\n maxWeight = atomWeights[atomIdx];\r\n }\r\n }\r\n\r\n if (dominantIdx < 0 || !visibilitySelector.includesAtom(atomLookup[dominantIdx])) {\r\n // this vertex doesn't belong to visible subset and will be skipped\r\n vMap[i] = -1;\r\n continue;\r\n }\r\n }\r\n\r\n vMap[i] = newVerCount++;\r\n\r\n // color tri-linear interpolation\r\n const dx = (x < xs) ? strideX : 0;\r\n const dy = (y < ys) ? strideY : 0;\r\n const dz = (z < zs) ? strideZ : 0;\r\n\r\n const c0 = [0, 0, 0];\r\n const c1 = [0, 0, 0];\r\n const c2 = [0, 0, 0];\r\n const c3 = [0, 0, 0];\r\n\r\n idx = colorMap.getDirectIdx(x, y, z);\r\n interp(mux, idx, idx + dx, c0);\r\n interp(mux, idx + dy, idx + dx + dy, c1);\r\n interp(mux, idx + dz, idx + dx + dz, c2);\r\n interp(mux, idx + dy + dz, idx + dx + dy + dz, c3);\r\n\r\n const cz0 = [0, 0, 0];\r\n cz0[0] = (1 - muy) * c0[0] + muy * c1[0];\r\n cz0[1] = (1 - muy) * c0[1] + muy * c1[1];\r\n cz0[2] = (1 - muy) * c0[2] + muy * c1[2];\r\n\r\n const cz1 = [0, 0, 0];\r\n cz1[0] = (1 - muy) * c2[0] + muy * c3[0];\r\n cz1[1] = (1 - muy) * c2[1] + muy * c3[1];\r\n cz1[2] = (1 - muy) * c2[2] + muy * c3[2];\r\n\r\n colors[ind] = (1 - muz) * cz0[0] + muz * cz1[0];\r\n colors[ind + 1] = (1 - muz) * cz0[1] + muz * cz1[1];\r\n colors[ind + 2] = (1 - muz) * cz0[2] + muz * cz1[2];\r\n }\r\n this._colors = colors;\r\n\r\n if (visibilitySelector != null) {\r\n // shift visible vertices towards beginning of array\r\n for (i = 0; i < numVerts; ++i) {\r\n const j = vMap[i];\r\n if (j < 0) {\r\n continue;\r\n }\r\n\r\n // assert: j <= i\r\n this._position[j * 3] = this._position[i * 3];\r\n this._position[j * 3 + 1] = this._position[i * 3 + 1];\r\n this._position[j * 3 + 2] = this._position[i * 3 + 2];\r\n this._normals[j * 3] = this._normals[i * 3];\r\n this._normals[j * 3 + 1] = this._normals[i * 3 + 1];\r\n this._normals[j * 3 + 2] = this._normals[i * 3 + 2];\r\n this._colors[j * 3] = this._colors[i * 3];\r\n this._colors[j * 3 + 1] = this._colors[i * 3 + 1];\r\n this._colors[j * 3 + 2] = this._colors[i * 3 + 2];\r\n }\r\n\r\n // rebuild index list\r\n const numTriangles = this._indices.length / 3;\r\n let newTriCount = 0;\r\n for (i = 0; i < numTriangles; ++i) {\r\n const i0 = vMap[this._indices[3 * i]];\r\n const i1 = vMap[this._indices[3 * i + 1]];\r\n const i2 = vMap[this._indices[3 * i + 2]];\r\n if (i0 >= 0 && i1 >= 0 && i2 >= 0) {\r\n this._indices[3 * newTriCount] = i0;\r\n this._indices[3 * newTriCount + 1] = i1;\r\n this._indices[3 * newTriCount + 2] = i2;\r\n ++newTriCount;\r\n }\r\n }\r\n\r\n // shrink arrays to data size\r\n this._position = new Float32Array(this._position.buffer.slice(0, newVerCount * 3 * 4));\r\n this._normals = new Float32Array(this._normals.buffer.slice(0, newVerCount * 3 * 4));\r\n this._colors = new Float32Array(this._colors.buffer.slice(0, newVerCount * 3 * 4));\r\n this._indices = new Uint32Array(this._indices.buffer.slice(0, newTriCount * 3 * 4));\r\n }\r\n }\r\n\r\n toMesh() {\r\n const geo = new THREE.BufferGeometry();\r\n geo.setIndex(new THREE.BufferAttribute(this._indices, 1));\r\n geo.setAttribute('position', new THREE.BufferAttribute(this._position, 3));\r\n geo.setAttribute('normal', new THREE.BufferAttribute(this._normals, 3));\r\n geo.setAttribute('color', new THREE.BufferAttribute(this._colors, 3));\r\n geo.computeBoundingSphere();\r\n return geo;\r\n }\r\n}\r\nexport default IsoSurface;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceGeometry from './IsoSurfaceGeometry';\r\nimport IsoSurface from './IsoSurface';\r\nimport utils from '../../utils';\r\n\r\n/**\r\n * This is a base class for volumetric maps based isosurface algorithms.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass VolumeSurfaceGeometry extends IsoSurfaceGeometry {\r\n _build() {\r\n const params = this._opts;\r\n this.numVoxels = [128, 128, 128];\r\n this.xAxis = new THREE.Vector3(1.0, 0.0, 0.0);\r\n this.yAxis = new THREE.Vector3(0.0, 1.0, 0.0);\r\n this.zAxis = new THREE.Vector3(0.0, 0.0, 1.0);\r\n\r\n this.origin = new THREE.Vector3(0.0, 0.0, 0.0);\r\n this._visibilitySelector = params.visibilitySelector;\r\n\r\n this._calcSurface(params);\r\n }\r\n\r\n _findMinMax(posRadArray) {\r\n const itemSize = 4;\r\n const itemsCount = posRadArray.length / itemSize;\r\n const maxPosRad = [posRadArray[0], posRadArray[1], posRadArray[2], posRadArray[3]];\r\n const minPosRad = [posRadArray[0], posRadArray[1], posRadArray[2], posRadArray[3]];\r\n for (let i = 1; i < itemsCount; ++i) {\r\n const ind = i * itemSize;\r\n\r\n for (let itemIdx = 0; itemIdx < itemSize; ++itemIdx) {\r\n const tmpVal = posRadArray[ind + itemIdx];\r\n maxPosRad[itemIdx] = Math.max(tmpVal, maxPosRad[itemIdx]);\r\n minPosRad[itemIdx] = Math.min(tmpVal, minPosRad[itemIdx]);\r\n }\r\n }\r\n return { maxPosRad, minPosRad };\r\n }\r\n\r\n _findNumVoxels(posRadArray, params) {\r\n const { numVoxels } = this;\r\n const minMaxValues = this._findMinMax(posRadArray);\r\n const minCoordRad = minMaxValues.minPosRad;\r\n const maxCoordRad = minMaxValues.maxPosRad;\r\n\r\n // minrad\r\n if (minCoordRad[3] > 4.0) {\r\n params.gridSpacing *= minCoordRad[3];\r\n }\r\n\r\n let gridPadding = params.radScale * maxCoordRad[3] * 1.7;\r\n let padRad = gridPadding;\r\n padRad = 0.65 * Math.sqrt(4.0 / 3.0 * Math.PI * padRad * padRad * padRad);\r\n gridPadding = Math.max(gridPadding, padRad);\r\n\r\n let i = 0;\r\n for (; i < 3; ++i) {\r\n minCoordRad[i] -= gridPadding;\r\n maxCoordRad[i] += gridPadding;\r\n }\r\n\r\n for (i = 0; i < 3; ++i) {\r\n numVoxels[i] = Math.ceil((maxCoordRad[i] - minCoordRad[i]) / params.gridSpacing);\r\n }\r\n this.xAxis.x = (numVoxels[0] - 1) * params.gridSpacing;\r\n this.yAxis.y = (numVoxels[1] - 1) * params.gridSpacing;\r\n this.zAxis.z = (numVoxels[2] - 1) * params.gridSpacing;\r\n\r\n [this.origin.x, this.origin.y, this.origin.z] = minCoordRad;\r\n\r\n return { bbox: minMaxValues, dim: numVoxels };\r\n }\r\n\r\n _makeSurface(surface, params) {\r\n const isoSurf = new IsoSurface();\r\n isoSurf.compute(surface.volMap, this.origin, params.isoValue, 1);\r\n isoSurf.vertexFusion(9, 9);// normalization is included\r\n\r\n if (isoSurf._numTriangles > 0) {\r\n isoSurf.setColorVolTex(surface.volTexMap, surface.atomMap, surface.atomWeightMap, this._visibilitySelector);\r\n this.setIndex(new THREE.BufferAttribute(isoSurf._indices, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(isoSurf._position, 3));\r\n this.setAttribute('normal', new THREE.BufferAttribute(isoSurf._normals, 3));\r\n this.setAttribute('color', new THREE.BufferAttribute(isoSurf._colors, 3));\r\n } else { // geometry should have at least empty position attributes to be processed in wireframe mode by three.js\r\n this.setAttribute('position', new THREE.BufferAttribute(utils.allocateTyped(Float32Array, 0), 3));\r\n }\r\n }\r\n\r\n _calcSurface(params) {\r\n const packedArrays = {\r\n posRad: this._posRad,\r\n colors: this._colors,\r\n atoms: this._opts.atoms,\r\n };\r\n\r\n if (packedArrays.posRad.length === 0) {\r\n return;\r\n }\r\n const boundaries = this._findNumVoxels(packedArrays.posRad, params);\r\n\r\n const box = new THREE.Box3(\r\n this.origin,\r\n new THREE.Vector3(this.xAxis.x, this.yAxis.y, this.zAxis.z).add(this.origin),\r\n );\r\n const surface = this._computeSurface(packedArrays, box, boundaries, params);\r\n\r\n this._makeSurface(surface, params);\r\n }\r\n}\r\n\r\nexport default VolumeSurfaceGeometry;\r\n","import VolumeSurfaceGeometry from './VolumeSurfaceGeometry';\r\nimport chem from '../../chem';\r\n\r\nconst { Volume } = chem;\r\n\r\n/**\r\n * This class implements 'quick' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass QuickSurfGeometry extends VolumeSurfaceGeometry {\r\n _computeSurface(packedArrays, box, boundaries, params) {\r\n // beware of shifting this multiple times!\r\n this._shiftByOrigin(packedArrays.posRad);\r\n\r\n const surface = {\r\n volMap: new Volume(Float32Array, this.numVoxels, box),\r\n volTexMap: new Volume(Float32Array, this.numVoxels, box, 3),\r\n };\r\n\r\n if (this._visibilitySelector != null) {\r\n surface.atomMap = [];\r\n surface.atomWeightMap = new Volume(Float32Array, this.numVoxels, box);\r\n }\r\n\r\n this.gaussdensity(surface, packedArrays, null, params);\r\n return surface;\r\n }\r\n\r\n gaussdensity(surface, packedArrays, atomicNum, params) {\r\n const numAtoms = packedArrays.posRad.length / 4;\r\n const { posRad, colors } = packedArrays;\r\n const { numVoxels } = this;\r\n const { radScale, gaussLim, gridSpacing } = params;\r\n const invIsoValue = 1.0 / params.isoValue;\r\n const invGridSpacing = 1.0 / gridSpacing;\r\n const maxVoxelX = numVoxels[0] - 1;\r\n const maxVoxelY = numVoxels[1] - 1;\r\n const maxVoxelZ = numVoxels[2] - 1;\r\n // TODO is densityMap and volTexMap initialized?\r\n\r\n const { volMap, volTexMap } = surface;\r\n const volData = volMap.getData();\r\n const strideX = volMap.getStrideX();\r\n\r\n const volTexData = volTexMap.getData();\r\n const texStrideX = volTexMap.getStrideX();\r\n\r\n let atomWeightData;\r\n if (this._visibilitySelector != null) {\r\n atomWeightData = surface.atomWeightMap.getData();\r\n }\r\n\r\n const { atomMap } = surface;\r\n\r\n for (let i = 0; i < numAtoms; ++i) {\r\n const ind = i * 4;\r\n const scaledRad = posRad[ind + 3] * radScale;\r\n const atomicNumFactor = atomicNum === null ? 1.0 : atomicNum[i];\r\n const radInv = 1 / (2 * scaledRad * scaledRad);\r\n let radLim = gaussLim * scaledRad;\r\n const radLim2 = radLim * radLim;\r\n radLim *= invGridSpacing;\r\n\r\n let tmp = posRad[ind] * invGridSpacing;\r\n const xMin = Math.max((tmp - radLim) | 0, 0);\r\n const xMax = Math.min((tmp + radLim) | 0, maxVoxelX);\r\n tmp = posRad[ind + 1] * invGridSpacing;\r\n const yMin = Math.max((tmp - radLim) | 0, 0);\r\n const yMax = Math.min((tmp + radLim) | 0, maxVoxelY);\r\n tmp = posRad[ind + 2] * invGridSpacing;\r\n const zMin = Math.max((tmp - radLim) | 0, 0);\r\n const zMax = Math.min((tmp + radLim) | 0, maxVoxelZ);\r\n\r\n let dz = zMin * gridSpacing - posRad[ind + 2];\r\n for (let z = zMin; z <= zMax; ++z, dz += gridSpacing) {\r\n let dy = yMin * gridSpacing - posRad[ind + 1];\r\n for (let y = yMin; y <= yMax; ++y, dy += gridSpacing) {\r\n const dy2dz2 = dy * dy + dz * dz;\r\n\r\n if (dy2dz2 >= radLim2) {\r\n continue;\r\n }\r\n\r\n let addr = volMap.getDirectIdx(xMin, y, z);\r\n let texAddr = volTexMap.getDirectIdx(xMin, y, z);\r\n let dx = xMin * gridSpacing - posRad[ind];\r\n for (let x = xMin; x <= xMax; ++x, dx += gridSpacing, addr += strideX, texAddr += texStrideX) {\r\n const r2 = dx * dx + dy2dz2;\r\n const expVal = -r2 * radInv;\r\n\r\n let density = Math.exp(expVal) * atomicNumFactor;\r\n\r\n // store most relevant atom (with highest density)\r\n if (this._visibilitySelector != null\r\n && density > atomWeightData[addr]) { // NOSONAR\r\n atomWeightData[addr] = density;\r\n // we use same index into atom map and atomWeightMap\r\n atomMap[addr] = packedArrays.atoms[i];\r\n }\r\n\r\n volData[addr] += density;\r\n\r\n // TODO check for volTexMap routine?\r\n density *= invIsoValue;\r\n const colInd = i * 3;\r\n volTexData[texAddr] += density * colors[colInd];\r\n volTexData[texAddr + 1] += density * colors[colInd + 1];\r\n volTexData[texAddr + 2] += density * colors[colInd + 2];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _shiftByOrigin(posRadArray) {\r\n const originX = this.origin.x;\r\n const originY = this.origin.y;\r\n const originZ = this.origin.z;\r\n\r\n const itemSize = 4;\r\n const itemsCount = posRadArray.length / itemSize;\r\n for (let i = 0; i < itemsCount; ++i) {\r\n const ind = i * itemSize;\r\n\r\n posRadArray[ind] -= originX;\r\n posRadArray[ind + 1] -= originY;\r\n posRadArray[ind + 2] -= originZ;\r\n }\r\n }\r\n}\r\n\r\nexport default QuickSurfGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\n/**\r\n * Modifed from SpatialHash\r\n *\r\n * Main differences are:\r\n * - Optimized grid size to ensure we only ever need to look +/-1 cell\r\n * - Aware of atomic radii and will only output atoms within rAtom + rExtra\r\n * (see withinRadii method)\r\n *\r\n * (Uses rounding rather than bitshifting as consequence of arbitrary grid size)\r\n * @class\r\n * @param {Float32Array} posRad - x, y, z coordinates and radiuses\r\n * @param {Float32Array} min - xyz min coordinates\r\n * @param {Float32Array} max - xyz max coordinates\r\n * @param {number} maxDistance - max distance\r\n */\r\nfunction AVHash(posRad, min, max, maxDistance) {\r\n const itemSize = 4;\r\n const nAtoms = posRad.length / itemSize;\r\n\r\n const minX = min[0];\r\n const minY = min[1];\r\n const minZ = min[2];\r\n\r\n const maxX = max[0];\r\n const maxY = max[1];\r\n const maxZ = max[2];\r\n\r\n function hashFunc(w, minW) {\r\n return Math.floor((w - minW) / maxDistance);\r\n }\r\n\r\n const iDim = hashFunc(maxX, minX) + 1;\r\n const jDim = hashFunc(maxY, minY) + 1;\r\n const kDim = hashFunc(maxZ, minZ) + 1;\r\n\r\n const nCells = iDim * jDim * kDim;\r\n\r\n const jkDim = jDim * kDim;\r\n\r\n /* Get cellID for cartesian x,y,z */\r\n const cellID = function (x, y, z) {\r\n return (((hashFunc(x, minX) * jDim) + hashFunc(y, minY)) * kDim) + hashFunc(z, minZ);\r\n };\r\n\r\n /* Initial building, could probably be optimized further */\r\n const preHash = [];\r\n let i;\r\n let cid;\r\n for (i = 0; i < nAtoms; i++) {\r\n const iIdx = itemSize * i;\r\n cid = cellID(posRad[iIdx], posRad[iIdx + 1], posRad[iIdx + 2]);\r\n\r\n if (preHash[cid] === undefined) {\r\n preHash[cid] = [i];\r\n } else {\r\n preHash[cid].push(i);\r\n }\r\n }\r\n\r\n const cellOffsets = utils.allocateTyped(Uint32Array, nCells);\r\n const cellLengths = utils.allocateTyped(Uint16Array, nCells);\r\n const data = utils.allocateTyped(Uint32Array, nAtoms);\r\n\r\n let offset = 0;\r\n let maxCellLength = 0;\r\n let j;\r\n for (i = 0; i < nCells; i++) {\r\n const start = cellOffsets[i] = offset;\r\n\r\n const subArray = preHash[i];\r\n\r\n if (subArray !== undefined) {\r\n for (j = 0; j < subArray.length; j++) {\r\n data[offset] = subArray[j];\r\n offset++;\r\n }\r\n }\r\n\r\n const cellLength = offset - start;\r\n cellLengths[i] = cellLength;\r\n\r\n if (cellLength > maxCellLength) {\r\n maxCellLength = cellLength;\r\n }\r\n }\r\n\r\n // Maximum number of neighbours we could ever produce (27 adjacent cells of equal population)\r\n this.neighbourListLength = (27 * maxCellLength) + 1;\r\n\r\n /**\r\n * Populate the supplied out array with atom indices that are within rAtom + rExtra\r\n * of x,y,z\r\n *\r\n * -1 in out array indicates the end of the list\r\n *\r\n * @param {number} x - x coordinate\r\n * @param {number} y - y coordinate\r\n * @param {number} z - z coordinate\r\n * @param {number} rExtra - additional radius\r\n * @param {Float32Array} out - pre-allocated output array\r\n * @return {undefined}\r\n */\r\n this.withinRadii = function (x, y, z, rExtra, out) {\r\n let outIdx = 0;\r\n\r\n const nearI = hashFunc(x, minX);\r\n const nearJ = hashFunc(y, minY);\r\n const nearK = hashFunc(z, minZ);\r\n\r\n const loI = Math.max(0, nearI - 1);\r\n const loJ = Math.max(0, nearJ - 1);\r\n const loK = Math.max(0, nearK - 1);\r\n\r\n const hiI = Math.min(iDim - 1, nearI + 1);\r\n const hiJ = Math.min(jDim - 1, nearJ + 1);\r\n const hiK = Math.min(kDim - 1, nearK + 1);\r\n\r\n for (i = loI; i <= hiI; ++i) {\r\n const iOffset = i * jkDim;\r\n\r\n for (j = loJ; j <= hiJ; ++j) {\r\n const jOffset = j * kDim;\r\n\r\n for (let k = loK; k <= hiK; ++k) {\r\n cid = iOffset + jOffset + k;\r\n\r\n const cellStart = cellOffsets[cid];\r\n const cellEnd = cellStart + cellLengths[cid];\r\n\r\n for (let dataIndex = cellStart; dataIndex < cellEnd; dataIndex++) {\r\n const atomIndex = data[dataIndex];\r\n const baseIndex = itemSize * atomIndex;\r\n const dx = posRad[baseIndex] - x;\r\n const dy = posRad[baseIndex + 1] - y;\r\n const dz = posRad[baseIndex + 2] - z;\r\n const rSum = posRad[baseIndex + 3] + rExtra;\r\n\r\n if ((dx * dx + dy * dy + dz * dz) <= (rSum * rSum)) {\r\n out[outIdx++] = data[dataIndex];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // Add terminator\r\n out[outIdx] = -1;\r\n };\r\n}\r\nfunction ContactSurface(packedArrays, boundaries, params, _indexList) {\r\n // Field generation method adapted from AstexViewer (Mike Hartshorn)\r\n // by Fred Ludlow.\r\n // Other parts based heavily on NGL (Alexander Rose) EDT Surface class\r\n //\r\n // Should work as a drop-in alternative to EDTSurface (though some of\r\n // the EDT paramters are not relevant in this method).\r\n\r\n const itemSize = 4;\r\n const { posRad, colors, atoms } = packedArrays;\r\n const nAtoms = posRad.length / itemSize;\r\n\r\n const { bbox } = boundaries;\r\n\r\n const min = bbox.minPosRad;\r\n const max = bbox.maxPosRad;\r\n\r\n let r2; // Atom positions, expanded radii (squared)\r\n let maxRadius;\r\n\r\n // Parameters\r\n let probeRadius;\r\n let scaleFactor;\r\n let probePositions;\r\n\r\n // Cache last value for obscured test\r\n let lastClip = -1;\r\n\r\n // Grid params\r\n let dim;\r\n let grid;\r\n let volTex;\r\n let weights;\r\n let weightsMap = null;\r\n let atomMap = null;\r\n let visibilitySelector = null;\r\n\r\n // grid indices -> xyz coords\r\n let gridx;\r\n let gridy;\r\n let gridz;\r\n\r\n // Lookup tables:\r\n let sinTable;\r\n let cosTable;\r\n\r\n // Spatial Hash\r\n let hash;\r\n\r\n // Neighbour array to be filled by hash\r\n let neighbours;\r\n\r\n // Vectors for Torus Projection\r\n const mid = new THREE.Vector3(0.0, 0.0, 0.0);\r\n const n1 = new THREE.Vector3(0.0, 0.0, 0.0);\r\n const n2 = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n let ngTorus;\r\n\r\n function uniformArray(TypeName, n, a) {\r\n const array = utils.allocateTyped(TypeName, n);\r\n for (let innI = 0; innI < n; ++innI) {\r\n array[innI] = a;\r\n }\r\n\r\n return array;\r\n }\r\n\r\n function fillGridDim(a, start, step) {\r\n for (let innI = 0; innI < a.length; innI++) {\r\n a[innI] = start + (step * innI);\r\n }\r\n }\r\n\r\n function initializeGrid() {\r\n ({ scaleFactor } = params);\r\n ({ dim } = boundaries);\r\n\r\n ngTorus = Math.min(5, 2 + Math.floor(probeRadius * scaleFactor));\r\n\r\n const gridSize = dim[0] * dim[1] * dim[2];\r\n grid = uniformArray(Float32Array, gridSize, -1001.0);\r\n volTex = utils.allocateTyped(Float32Array, gridSize * 3);\r\n weights = utils.allocateTyped(Float32Array, gridSize);\r\n if (visibilitySelector) {\r\n weightsMap = utils.allocateTyped(Float32Array, gridSize);\r\n atomMap = [];\r\n }\r\n\r\n gridx = utils.allocateTyped(Float32Array, dim[0]);\r\n gridy = utils.allocateTyped(Float32Array, dim[1]);\r\n gridz = utils.allocateTyped(Float32Array, dim[2]);\r\n\r\n fillGridDim(gridx, min[0], 1 / scaleFactor);\r\n fillGridDim(gridy, min[1], 1 / scaleFactor);\r\n fillGridDim(gridz, min[2], 1 / scaleFactor);\r\n }\r\n\r\n function initializeAngleTables() {\r\n let theta = 0.0;\r\n const step = 2 * Math.PI / probePositions;\r\n\r\n cosTable = utils.allocateTyped(Float32Array, probePositions);\r\n sinTable = utils.allocateTyped(Float32Array, probePositions);\r\n for (let innI = 0; innI < probePositions; innI++) {\r\n cosTable[innI] = Math.cos(theta);\r\n sinTable[innI] = Math.sin(theta);\r\n theta += step;\r\n }\r\n }\r\n\r\n function initializeHash() {\r\n hash = new AVHash(posRad, min, max, 2.01 * maxRadius);\r\n neighbours = new Int32Array(hash.neighbourListLength);\r\n }\r\n\r\n function init() {\r\n ({\r\n probeRadius,\r\n scaleFactor,\r\n probePositions,\r\n visibilitySelector,\r\n } = params);\r\n r2 = utils.allocateTyped(Float32Array, nAtoms);\r\n maxRadius = 0;\r\n for (let innI = 0; innI < nAtoms; ++innI) {\r\n const rExt = posRad[innI * itemSize + 3] += probeRadius;\r\n if (rExt > maxRadius) {\r\n maxRadius = rExt;\r\n }\r\n r2[innI] = rExt * rExt;\r\n }\r\n\r\n initializeGrid();\r\n initializeAngleTables();\r\n initializeHash();\r\n\r\n lastClip = -1;\r\n }\r\n\r\n function singleAtomObscures(ai, innX, innY, innZ) {\r\n const innCI = itemSize * ai;\r\n const ra2 = r2[ai];\r\n const dx = posRad[innCI] - innX;\r\n const dy = posRad[innCI + 1] - innY;\r\n const dz = posRad[innCI + 2] - innZ;\r\n const d2 = dx * dx + dy * dy + dz * dz;\r\n\r\n return d2 < ra2;\r\n }\r\n\r\n function obscured(innX, innY, innZ, a, b) {\r\n // Is the point at x,y,z obscured by any of the atoms\r\n // specifeid by indices in neighbours. Ignore indices\r\n // a and b (these are the relevant atoms in projectPoints/Torii)\r\n\r\n // Cache the last clipped atom (as very often the same one in\r\n // subsequent calls)\r\n let ai;\r\n\r\n if (lastClip !== -1) {\r\n ai = lastClip;\r\n if (ai !== a && ai !== b && singleAtomObscures(ai, innX, innY, innZ)) {\r\n return ai;\r\n }\r\n lastClip = -1;\r\n }\r\n\r\n let ni = 0;\r\n ai = neighbours[ni];\r\n while (ai >= 0) {\r\n if (ai !== a && ai !== b && singleAtomObscures(ai, innX, innY, innZ)) {\r\n lastClip = ai;\r\n return ai;\r\n }\r\n ai = neighbours[++ni];\r\n }\r\n\r\n lastClip = -1;\r\n\r\n return -1;\r\n }\r\n\r\n function projectPoints() {\r\n // For each atom:\r\n // Iterate over a subsection of the grid, for each point:\r\n // If current value < 0.0, unvisited, set positive\r\n //\r\n // In any case: Project this point onto surface of the atomic sphere\r\n // If this projected point is not obscured by any other atom\r\n // Calcualte delta distance and set grid value to minimum of\r\n // itself and delta\r\n\r\n // Should we alias frequently accessed closure constiables??\r\n // Assume JS engine capable of optimizing this\r\n // anyway...\r\n const maxRad = 4.0;\r\n const sigma = (maxRad) / 3;\r\n const sigma2Inv = 1 / (2 * sigma * sigma);\r\n\r\n for (let innI = 0; innI < nAtoms; innI++) {\r\n const innCI = itemSize * innI;\r\n const ax = posRad[innCI];\r\n const ay = posRad[innCI + 1];\r\n const az = posRad[innCI + 2];\r\n const ar = posRad[innCI + 3];\r\n const ar2 = r2[innI];\r\n\r\n hash.withinRadii(ax, ay, az, ar, neighbours);\r\n\r\n // Number of grid points, round this up...\r\n const ng = Math.ceil(ar * scaleFactor);\r\n\r\n // Center of the atom, mapped to grid points (take floor)\r\n const iax = Math.floor(scaleFactor * (ax - min[0]));\r\n const iay = Math.floor(scaleFactor * (ay - min[1]));\r\n const iaz = Math.floor(scaleFactor * (az - min[2]));\r\n\r\n // Extents of grid to consider for this atom\r\n const minx = Math.max(0, iax - ng);\r\n const miny = Math.max(0, iay - ng);\r\n const minz = Math.max(0, iaz - ng);\r\n\r\n // Add two to these points:\r\n // - iax are floor'd values so this ensures coverage\r\n // - these are loop limits (exclusive)\r\n const maxx = Math.min(dim[0], iax + ng + 2);\r\n const maxy = Math.min(dim[1], iay + ng + 2);\r\n const maxz = Math.min(dim[2], iaz + ng + 2);\r\n\r\n const colIdx = innI * 3;\r\n const cr = colors[colIdx];\r\n const cg = colors[colIdx + 1];\r\n const cb = colors[colIdx + 2];\r\n\r\n for (let iz = minz; iz < maxz; iz++) {\r\n const dz = gridz[iz] - az;\r\n const zOffset = dim[1] * dim[0] * iz;\r\n\r\n for (let iy = miny; iy < maxy; iy++) {\r\n const dy = gridy[iy] - ay;\r\n const dzy2 = dz * dz + dy * dy;\r\n const zyOffset = zOffset + dim[0] * iy;\r\n\r\n for (let ix = minx; ix < maxx; ix++) {\r\n const idx = ix + zyOffset;\r\n const dx = gridx[ix] - ax;\r\n const d2 = dzy2 + dx * dx;\r\n\r\n if (d2 < ar2) {\r\n const w = Math.exp(-d2 * sigma2Inv);\r\n const cIdx = idx * 3;\r\n volTex[cIdx] += cr * w;\r\n volTex[cIdx + 1] += cg * w;\r\n volTex[cIdx + 2] += cb * w;\r\n weights[idx] += w;\r\n if (visibilitySelector !== null && w > weightsMap[idx]) {\r\n weightsMap[idx] = w;\r\n atomMap[idx] = atoms[innI];\r\n }\r\n\r\n if (grid[idx] < 0.0) {\r\n // Unvisited, make positive\r\n grid[idx] = -grid[idx];\r\n }\r\n // Project on to the surface of the sphere\r\n // sp is the projected point ( dx, dy, dz ) * ( ra / d )\r\n const d = Math.sqrt(d2);\r\n const ap = ar / d;\r\n let spx = dx * ap;\r\n let spy = dy * ap;\r\n let spz = dz * ap;\r\n\r\n spx += ax;\r\n spy += ay;\r\n spz += az;\r\n\r\n if (obscured(spx, spy, spz, innI, -1) === -1) {\r\n const dd = ar - d;\r\n if (dd < grid[idx]) {\r\n grid[idx] = dd;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function normalToLine(out, p) {\r\n out.x = out.y = out.z = 1.0;\r\n if (p.x !== 0) {\r\n out.x = (p.y + p.z) / -p.x;\r\n } else if (p.y !== 0) {\r\n out.y = (p.x + p.z) / -p.y;\r\n } else if (p.z !== 0) {\r\n out.z = (p.x + p.y) / -p.z;\r\n }\r\n return out;\r\n }\r\n\r\n function projectTorus(a, b) {\r\n const aIdx = itemSize * a;\r\n const bIdx = itemSize * b;\r\n const xa = posRad[aIdx];\r\n const ya = posRad[aIdx + 1];\r\n const za = posRad[aIdx + 2];\r\n const r1 = posRad[aIdx + 3];\r\n let dx = mid.x = posRad[bIdx] - xa;\r\n let dy = mid.y = posRad[bIdx + 1] - ya;\r\n let dz = mid.z = posRad[bIdx + 2] - za;\r\n const innR2 = posRad[bIdx + 3];\r\n let d2 = dx * dx + dy * dy + dz * dz;\r\n\r\n // This check now redundant as already done in AVHash.withinRadii\r\n // if( d2 > (( r1 + r2 ) * ( r1 + r2 )) ){ return; }\r\n\r\n const d = Math.sqrt(d2);\r\n\r\n // Find angle between a->b vector and the circle\r\n // of their intersection by cosine rule\r\n const cosA = (r1 * r1 + d * d - innR2 * innR2) / (2.0 * r1 * d);\r\n\r\n // distance along a->b at intersection\r\n const dmp = r1 * cosA;\r\n\r\n mid.normalize();\r\n\r\n // Create normal to line\r\n normalToLine(n1, mid);\r\n n1.normalize();\r\n\r\n // Cross together for second normal vector\r\n n2.crossVectors(mid, n1);\r\n n2.normalize();\r\n\r\n // r is radius of circle of intersection\r\n const rInt = Math.sqrt(r1 * r1 - dmp * dmp);\r\n\r\n n1.multiplyScalar(rInt);\r\n n2.multiplyScalar(rInt);\r\n mid.multiplyScalar(dmp);\r\n\r\n mid.x += xa;\r\n mid.y += ya;\r\n mid.z += za;\r\n\r\n lastClip = -1;\r\n\r\n const ng = ngTorus;\r\n\r\n for (let innI = 0; innI < probePositions; innI++) {\r\n const cost = cosTable[innI];\r\n const sint = sinTable[innI];\r\n\r\n const px = mid.x + cost * n1.x + sint * n2.x;\r\n const py = mid.y + cost * n1.y + sint * n2.y;\r\n const pz = mid.z + cost * n1.z + sint * n2.z;\r\n\r\n if (obscured(px, py, pz, a, b) === -1) {\r\n // As above, iterate over our grid...\r\n // px, py, pz in grid coords\r\n const iax = Math.floor(scaleFactor * (px - min[0]));\r\n const iay = Math.floor(scaleFactor * (py - min[1]));\r\n const iaz = Math.floor(scaleFactor * (pz - min[2]));\r\n\r\n const minx = Math.max(0, iax - ng);\r\n const miny = Math.max(0, iay - ng);\r\n const minz = Math.max(0, iaz - ng);\r\n\r\n const maxx = Math.min(dim[0], iax + ng + 2);\r\n const maxy = Math.min(dim[1], iay + ng + 2);\r\n const maxz = Math.min(dim[2], iaz + ng + 2);\r\n\r\n for (let iz = minz; iz < maxz; iz++) {\r\n dz = pz - gridz[iz];\r\n const zOffset = dim[1] * dim[0] * iz;\r\n for (let iy = miny; iy < maxy; iy++) {\r\n dy = py - gridy[iy];\r\n const dzy2 = dz * dz + dy * dy;\r\n const zyOffset = zOffset + dim[0] * iy;\r\n for (let ix = minx; ix < maxx; ix++) {\r\n dx = px - gridx[ix];\r\n d2 = dzy2 + dx * dx;\r\n const idx = ix + zyOffset;\r\n const current = grid[idx];\r\n\r\n if (current > 0.0 && d2 < (current * current)) {\r\n grid[idx] = Math.sqrt(d2);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function projectTorii() {\r\n for (let innI = 0; innI < nAtoms; innI++) {\r\n const innIdx = itemSize * innI;\r\n hash.withinRadii(\r\n posRad[innIdx],\r\n posRad[innIdx + 1],\r\n posRad[innIdx + 2],\r\n posRad[innIdx + 3],\r\n neighbours,\r\n );\r\n let ia = 0;\r\n let ni = neighbours[ia];\r\n while (ni >= 0) {\r\n if (innI < ni) {\r\n projectTorus(innI, ni);\r\n }\r\n ni = neighbours[++ia];\r\n }\r\n }\r\n }\r\n\r\n function fixNegatives() {\r\n for (let innI = 0, n = grid.length; innI < n; innI++) {\r\n if (grid[innI] < 0) grid[innI] = 0;\r\n let w = weights[innI];\r\n if (w > 0) {\r\n w = 1 / w;\r\n const innInnI = innI * 3;\r\n volTex[innInnI] *= w;\r\n volTex[innInnI + 1] *= w;\r\n volTex[innInnI + 2] *= w;\r\n }\r\n }\r\n }\r\n\r\n function getVolume() {\r\n // Basic steps are:\r\n // 1) Initialize\r\n // 2) Project points\r\n // 3) Project torii\r\n console.time('ContactSurface.getVolume');\r\n\r\n console.time('ContactSurface.init');\r\n init();\r\n console.timeEnd('ContactSurface.init');\r\n\r\n console.time('ContactSurface.projectPoints');\r\n projectPoints();\r\n console.timeEnd('ContactSurface.projectPoints');\r\n\r\n console.time('ContactSurface.projectTorii');\r\n projectTorii();\r\n console.timeEnd('ContactSurface.projectTorii');\r\n fixNegatives();\r\n console.timeEnd('ContactSurface.getVolume');\r\n }\r\n\r\n this.build = function () {\r\n // type and cutoff left in for compatibility with EDTSurface.getSurface\r\n // function signature\r\n getVolume();\r\n this.volTexMap = volTex;\r\n this.weightsMap = weightsMap;\r\n this.atomMap = atomMap;\r\n this.volMap = grid;\r\n };\r\n}\r\nexport default ContactSurface;\r\n","import VolumeSurfaceGeometry from './VolumeSurfaceGeometry';\r\nimport ContactSurface from './ContactSurface';\r\nimport chem from '../../chem';\r\n\r\nconst { Volume } = chem;\r\n\r\n/**\r\n * This class implements 'contact' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass ContactSurfaceGeometry extends VolumeSurfaceGeometry {\r\n _computeSurface(packedArrays, box, boundaries, params) {\r\n const contactSurface = new ContactSurface(packedArrays, boundaries, params);\r\n contactSurface.build();\r\n\r\n const surface = {\r\n volMap: new Volume(Float32Array, this.numVoxels, box, 1, contactSurface.volMap),\r\n volTexMap: new Volume(Float32Array, this.numVoxels, box, 3, contactSurface.volTexMap),\r\n atomMap: contactSurface.atomMap,\r\n atomWeightMap: new Volume(Float32Array, this.numVoxels, box, 1, contactSurface.weightsMap),\r\n };\r\n return surface;\r\n }\r\n}\r\n\r\nexport default ContactSurfaceGeometry;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Class for colored atom. Need for atom structure clusterization\r\n *\r\n * @param {Vector3} vCenter Center of atom\r\n * @param {number} radiusAt Radius of atom\r\n */\r\nclass IsoSurfaceAtomColored {\r\n constructor(vCenter, radiusAt) {\r\n this.coord = new THREE.Vector3();\r\n this.coord.copy(vCenter);\r\n this.radius = radiusAt;\r\n this.colorX = 0.99999;\r\n this.colorY = 0.0;\r\n this.colorZ = 0.0;\r\n this.atomType = 0;\r\n this.srcAtom = null;\r\n }\r\n}\r\nexport default IsoSurfaceAtomColored;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\n// suppress some JSHint warnings\r\n/* jshint bitwise: false */\r\n\r\n/**\r\n * Build normals for isosurface, using atoms information\r\n *\r\n * @param {number} numAtoms - Number of atoms in molecule\r\n * @param {Element} atoms - Array of atoms\r\n * @param {Vector3} vBoxMin - Bounding box min\r\n * @param {Vector3} vBoxMax - Bounding box max\r\n * @param {number} probeRadius - Normals for output\r\n *\r\n */\r\nclass IsosurfaceBuildNormals {\r\n constructor(numAtoms, atoms, vBoxMin, vBoxMax, probeRadius) {\r\n this._numAtoms = numAtoms;\r\n this._atoms = atoms;\r\n this._vBoxMin = new THREE.Vector3();\r\n this._vBoxMax = new THREE.Vector3();\r\n this._vBoxMin.copy(vBoxMin);\r\n this._vBoxMax.copy(vBoxMax);\r\n this._probeRadius = probeRadius;\r\n\r\n this._atomsList = null;\r\n this._voxelList = null;\r\n }\r\n\r\n createVoxels() {\r\n let numAtomsRefs;\r\n let rad;\r\n const ATOM_VOXEL_REF_SCALE = 4.5;\r\n\r\n const numAtoms = this._numAtoms | 0;\r\n const atoms = this._atoms;\r\n const dx = this._vBoxMax.x - this._vBoxMin.x;\r\n const dy = this._vBoxMax.y - this._vBoxMin.y;\r\n const dz = this._vBoxMax.z - this._vBoxMin.z;\r\n let w = (dx < dy) ? dx : dy;\r\n w = (dz < w) ? dz : w;\r\n let maxRad = 0.0;\r\n let aveRad = 0.0;\r\n\r\n let i;\r\n for (i = 0; i < numAtoms; i++) {\r\n rad = (atoms[i].radius + this._probeRadius) * 2.0;\r\n maxRad = (rad > maxRad) ? rad : maxRad;\r\n aveRad += rad;\r\n }\r\n let numCells = Math.floor(w / maxRad);\r\n if (numCells < 2) {\r\n numCells = 2;\r\n }\r\n aveRad /= numAtoms;\r\n\r\n this._numCells = numCells;\r\n this._aveRad = aveRad;\r\n this._maxRad = maxRad;\r\n\r\n const side = numCells;\r\n const side2 = numCells * numCells;\r\n const side3 = numCells * numCells * numCells;\r\n\r\n const xScale = this._xScale = 1.0 / (this._vBoxMax.x - this._vBoxMin.x);\r\n const yScale = this._yScale = 1.0 / (this._vBoxMax.y - this._vBoxMin.y);\r\n const zScale = this._zScale = 1.0 / (this._vBoxMax.z - this._vBoxMin.z);\r\n\r\n // estimate number of individual atom refs in each voxel list\r\n let maxAtomsRefs = 0;\r\n\r\n const xNumVoxMult = xScale * numCells;\r\n const yNumVoxMult = yScale * numCells;\r\n const zNumVoxMult = zScale * numCells;\r\n\r\n for (i = 0; i < numAtoms; i++) {\r\n const radAffect = (atoms[i].radius + this._probeRadius) * ATOM_VOXEL_REF_SCALE;\r\n const diaAffect = radAffect * 2.0;\r\n let numVoxX = Math.floor(xNumVoxMult * diaAffect + 0.8);\r\n let numVoxY = Math.floor(yNumVoxMult * diaAffect + 0.8);\r\n let numVoxZ = Math.floor(zNumVoxMult * diaAffect + 0.8);\r\n // avoid case numVox? == 0\r\n // also use loop i <=\r\n numVoxX++;\r\n numVoxY++;\r\n numVoxZ++;\r\n maxAtomsRefs += numVoxX * numVoxY * numVoxZ;\r\n } // for (i)\r\n // maxAtomsRefs = numAtoms * MAX_ATOMS_IN_SINGLE_VOXEL;\r\n\r\n this._voxelList = utils.allocateTyped(Int32Array, side3);\r\n const atomsList = [];\r\n atomsList.length = maxAtomsRefs;\r\n if ((this._voxelList === null) || (atomsList === null)) {\r\n return 0 - 1;\r\n }\r\n // init voxel list\r\n for (i = 0; i < side3; i++) {\r\n this._voxelList[i] = -1;\r\n }\r\n numAtomsRefs = 0;\r\n\r\n // create voxel lists\r\n for (i = 0; i < numAtoms; i++) {\r\n // use multiplier 4 to locate this atom in different voxels\r\n rad = (atoms[i].radius + this._probeRadius) * ATOM_VOXEL_REF_SCALE;\r\n let xIndMin = Math.floor((atoms[i].coord.x - this._vBoxMin.x - rad) * numCells * xScale);\r\n let yIndMin = Math.floor((atoms[i].coord.y - this._vBoxMin.y - rad) * numCells * yScale);\r\n let zIndMin = Math.floor((atoms[i].coord.z - this._vBoxMin.z - rad) * numCells * zScale);\r\n let xIndMax = Math.floor((atoms[i].coord.x - this._vBoxMin.x + rad) * numCells * xScale);\r\n let yIndMax = Math.floor((atoms[i].coord.y - this._vBoxMin.y + rad) * numCells * yScale);\r\n let zIndMax = Math.floor((atoms[i].coord.z - this._vBoxMin.z + rad) * numCells * zScale);\r\n\r\n xIndMin = (xIndMin >= 0) ? xIndMin : 0;\r\n yIndMin = (yIndMin >= 0) ? yIndMin : 0;\r\n zIndMin = (zIndMin >= 0) ? zIndMin : 0;\r\n\r\n xIndMax = (xIndMax < numCells) ? xIndMax : (numCells - 1);\r\n yIndMax = (yIndMax < numCells) ? yIndMax : (numCells - 1);\r\n zIndMax = (zIndMax < numCells) ? zIndMax : (numCells - 1);\r\n\r\n for (let z = zIndMin; z <= zIndMax; z++) {\r\n for (let y = yIndMin; y <= yIndMax; y++) {\r\n for (let x = xIndMin; x <= xIndMax; x++) {\r\n // add atom with index \"i\" to this voxel list\r\n const indVoxel = x + y * side + z * side2;\r\n // assert indVoxel >= 0\r\n // assert indVoxel < side3\r\n\r\n // add first\r\n if (this._voxelList[indVoxel] < 0) {\r\n atomsList[numAtomsRefs * 2 + 0] = i;\r\n atomsList[numAtomsRefs * 2 + 1] = 0 - 1;\r\n this._voxelList[indVoxel] = numAtomsRefs;\r\n numAtomsRefs++;\r\n // assert numAtomsRefs < maxAtomsRefs - 1\r\n continue;\r\n }\r\n // insert into head of list\r\n const indexNext = this._voxelList[indVoxel];\r\n this._voxelList[indVoxel] = numAtomsRefs;\r\n atomsList[numAtomsRefs * 2 + 0] = i;\r\n atomsList[numAtomsRefs * 2 + 1] = indexNext;\r\n numAtomsRefs++;\r\n } // for (x)\r\n } // for (y)\r\n } // for (z)\r\n } // for (i)\r\n\r\n // convert Array to Int32Array\r\n this._atomsList = Int32Array.from(atomsList);\r\n\r\n return 0;\r\n }\r\n\r\n destroyVoxels() {\r\n this._atomsList = null;\r\n this._voxelList = null;\r\n\r\n this._atoms = null;\r\n this._vertices = null;\r\n this._vBoxMin = null;\r\n this._vBoxMax = null;\r\n }\r\n\r\n /**\r\n * Enumerate all atoms affecting specified point\r\n *\r\n * @param {Vector3} point - point in 3D\r\n * @param {func(atom)} process - function to call for each atom\r\n */\r\n forEachRelatedAtom(point, process) {\r\n // find corresponding voxel\r\n const xInd = Math.floor((point.x - this._vBoxMin.x) * this._numCells * this._xScale);\r\n const yInd = Math.floor((point.y - this._vBoxMin.y) * this._numCells * this._yScale);\r\n const zInd = Math.floor((point.z - this._vBoxMin.z) * this._numCells * this._zScale);\r\n const indVoxel = xInd + yInd * this._numCells + zInd * this._numCells * this._numCells;\r\n\r\n // run through atoms affecting this voxel\r\n const atoms = this._atoms;\r\n for (let ref = this._voxelList[indVoxel]; ref >= 0; ref = this._atomsList[ref * 2 + 1]) {\r\n const indexAtom = this._atomsList[ref * 2];\r\n process(atoms[indexAtom]);\r\n }\r\n }\r\n\r\n /**\r\n * Get atom closest to specified point\r\n *\r\n * @param {Vector3} point - point in 3D\r\n *\r\n * @returns {IsoSurfaceAtomColored} atom, or null if not found\r\n */\r\n getClosestAtom(point) {\r\n let closest = null;\r\n let minDist2 = Number.MAX_VALUE;\r\n\r\n this.forEachRelatedAtom(point, (atom) => {\r\n const dist2 = point.distanceToSquared(atom.coord);\r\n if (dist2 < minDist2) {\r\n minDist2 = dist2;\r\n closest = atom;\r\n }\r\n });\r\n\r\n return closest;\r\n }\r\n\r\n /**\r\n * Build normals for isosurface, using atoms information\r\n *\r\n * @param {number} numVertices - Number of vertices in final geometry (to render)\r\n * @param {Vector3} vertices - Geometry vertices (3d coordinates array)\r\n * @param {Vector3} normals - Normals for output\r\n *\r\n * @returns {number} 0, if success\r\n */\r\n buildNormals(numVertices, vertices, normals) {\r\n const self = this;\r\n let numCloseAtoms = 0;\r\n let vx = 0;\r\n let vy = 0;\r\n let vz = 0;\r\n let dist2;\r\n let vNormalX = 0;\r\n let vNormalY = 0;\r\n let vNormalZ = 0;\r\n let koef = 0;\r\n let w = 0;\r\n const r25 = 2.5;\r\n const r01 = 0.1;\r\n\r\n const maxRadAffect = this._aveRad * r25;\r\n const maxRadAffect2 = maxRadAffect * maxRadAffect;\r\n const expScale = -this._aveRad * r01;\r\n\r\n // some stats\r\n // numSlowAtoms = 0;\r\n\r\n const gatherNormals = function (atom) {\r\n const dx = vx - atom.coord.x;\r\n const dy = vy - atom.coord.y;\r\n const dz = vz - atom.coord.z;\r\n dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 > maxRadAffect2) {\r\n return;\r\n }\r\n\r\n // get weight for gaussian smoothing\r\n const rad = atom.radius + self._probeRadius;\r\n koef = dist2 - (rad * rad);\r\n if (koef < 0.0) {\r\n koef = -koef;\r\n }\r\n w = Math.exp(expScale * koef);\r\n\r\n vNormalX += dx * w;\r\n vNormalY += dy * w;\r\n vNormalZ += dz * w;\r\n numCloseAtoms++;\r\n };\r\n\r\n let maxClosedAtoms = 0;\r\n // process all vertices, one by one\r\n for (let i = 0; i < numVertices; i++) {\r\n vx = vertices[i].x;\r\n vy = vertices[i].y;\r\n vz = vertices[i].z;\r\n\r\n numCloseAtoms = 0;\r\n vNormalX = vNormalY = vNormalZ = 0.0;\r\n\r\n this.forEachRelatedAtom(vertices[i], gatherNormals);\r\n\r\n maxClosedAtoms = (numCloseAtoms > maxClosedAtoms) ? numCloseAtoms : maxClosedAtoms;\r\n\r\n // normalize vNormal\r\n dist2 = vNormalX * vNormalX + vNormalY * vNormalY + vNormalZ * vNormalZ;\r\n if (numCloseAtoms > 0) {\r\n koef = 1.0 / Math.sqrt(dist2);\r\n vNormalX *= koef;\r\n vNormalY *= koef;\r\n vNormalZ *= koef;\r\n }\r\n normals[i].x = vNormalX;\r\n normals[i].y = vNormalY;\r\n normals[i].z = vNormalZ;\r\n } // for (i) all vertices\r\n\r\n return 0;\r\n }\r\n\r\n /**\r\n * Build vertex colors for isosurface, using atoms information\r\n *\r\n * @param {number} numVertices - Number of vertices in final geometry (to render)\r\n * @param {Vector3} vertices - Geometry vertices (3d coordinates array)\r\n * @param {Vector3} colors - Colors for output\r\n * @param {number} radiusColorSmoothness - Radius of smoothness sphere\r\n *\r\n * @returns {number} 0, if success\r\n */\r\n buildColors(numVertices, vertices, colors, radiusColorSmoothness) {\r\n const self = this;\r\n let vx = 0.0;\r\n let vy = 0.0;\r\n let vz = 0.0;\r\n let koef = 0.0;\r\n let w = 0.0;\r\n const KOEF_ADD = 0.8;\r\n\r\n const maxRadAffect = radiusColorSmoothness;\r\n const maxRadAffect2 = maxRadAffect * maxRadAffect;\r\n\r\n let colorsClose = [];\r\n let weights = [];\r\n let weightsSum = 0;\r\n\r\n const gatherColors = function (atom) {\r\n const dx = vx - atom.coord.x;\r\n const dy = vy - atom.coord.y;\r\n const dz = vz - atom.coord.z;\r\n const dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 > maxRadAffect2) {\r\n return;\r\n }\r\n\r\n // get weight for gaussian smoothing\r\n const rad = atom.radius + self._probeRadius;\r\n koef = dist2 - (rad * rad);\r\n if (koef < 0.0) {\r\n koef = -koef;\r\n }\r\n w = 1.0 / (KOEF_ADD + koef);\r\n\r\n colorsClose.push([atom.colorX, atom.colorY, atom.colorZ]);\r\n weights.push(w); // save weights for use\r\n weightsSum += w; // calc sum of weights fo further normalization\r\n };\r\n\r\n // process all vertices, one by one\r\n for (let i = 0; i < numVertices; i++) {\r\n vx = vertices[i].x;\r\n vy = vertices[i].y;\r\n vz = vertices[i].z;\r\n\r\n colorsClose = [];\r\n weights = [];\r\n weightsSum = 0;\r\n\r\n this.forEachRelatedAtom(vertices[i], gatherColors);\r\n\r\n // normalized weighted sum of colors\r\n for (let j = 0; j < colorsClose.length; ++j) {\r\n const weightNormalized = weights[j] / weightsSum;\r\n colors[i].x += colorsClose[j][0] * weightNormalized;\r\n colors[i].y += colorsClose[j][1] * weightNormalized;\r\n colors[i].z += colorsClose[j][2] * weightNormalized;\r\n }\r\n } // for (i) all vertices\r\n return 0;\r\n }\r\n}\r\nexport default IsosurfaceBuildNormals;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Class for geometry (triangle mesh) representation\r\n *\r\n *\r\n * @param {number} maxNumVertices Maximum possible number of vertices in mesh\r\n * @param {number} maxNumTriangles Maximum possible number of triangles in mesh\r\n * @param {boolean} needVertexColors Obvious\r\n */\r\nclass IsoSurfaceGeo {\r\n constructor(maxNumVertices, maxNumTriangles, needVertexColors) {\r\n this._maxNumVertices = maxNumVertices;\r\n this._maxNumTriangles = maxNumTriangles;\r\n this._vertices = new Array(maxNumVertices);\r\n this._normals = new Array(maxNumVertices);\r\n this._colors = null;\r\n if (needVertexColors) {\r\n this._colors = new Array(maxNumVertices);\r\n }\r\n this._indices = new Array(maxNumTriangles * (1 + 2));\r\n this._numVertices = 0;\r\n this._numTriangles = 0;\r\n\r\n let i;\r\n for (i = 0; i < maxNumVertices; i++) {\r\n this._vertices[i] = new THREE.Vector3();\r\n this._normals[i] = new THREE.Vector3();\r\n }\r\n for (i = 0; i < maxNumTriangles * (1 + 2); i++) {\r\n this._indices[i] = -1;\r\n }\r\n if (needVertexColors) {\r\n for (i = 0; i < maxNumVertices; i++) {\r\n this._colors[i] = new THREE.Vector3();\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n this._vertices = null;\r\n this._normals = null;\r\n this._indices = null;\r\n }\r\n}\r\nexport default IsoSurfaceGeo;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceGeometry from './IsoSurfaceGeometry';\r\nimport IsoSurfaceAtomColored from './IsoSurfaceAtomColored';\r\nimport IsosurfaceBuildNormals from './IsosurfaceBuildNormals';\r\nimport IsoSurfaceMarchCube from './IsoSurfaceMarchCube';\r\nimport IsoSurfaceGeo from './IsoSurfaceGeo';\r\nimport chem from '../../chem';\r\nimport utils from '../../utils';\r\n\r\nconst COLOR_SIZE = 3;\r\nconst HASH_SIZE = 32768;\r\nconst { Element } = chem;\r\n\r\n/**\r\n * This class implements 'quick' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass SSIsosurfaceGeometry extends IsoSurfaceGeometry {\r\n _build() {\r\n // convert geoOut into arrays of positions, indices, normals\r\n this._innerBuild();\r\n const geoOut = this.getGeo();\r\n this.destroy();\r\n this._fromGeo(geoOut);\r\n }\r\n\r\n _fromGeo(geoOut) {\r\n let colors = null;\r\n const positions = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n const normals = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n if (geoOut._colors !== null) {\r\n colors = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n }\r\n const indices = utils.allocateTyped(Uint32Array, (1 + 2) * geoOut._numTriangles);\r\n\r\n for (let i = 0, j = 0; i < geoOut._numVertices; i++) {\r\n positions[j + 0] = (geoOut._vertices[i].x);\r\n positions[j + 1] = (geoOut._vertices[i].y);\r\n positions[j + 2] = (geoOut._vertices[i].z);\r\n normals[j + 0] = geoOut._normals[i].x;\r\n normals[j + 1] = geoOut._normals[i].y;\r\n normals[j + 2] = geoOut._normals[i].z;\r\n j += 3;\r\n }\r\n if (colors !== null) {\r\n for (let i = 0, j = 0; i < geoOut._numVertices; i++, j += 3) {\r\n colors[j + 0] = geoOut._colors[i].x;\r\n colors[j + 1] = geoOut._colors[i].y;\r\n colors[j + 2] = geoOut._colors[i].z;\r\n }\r\n }\r\n\r\n const numTri3 = geoOut._numTriangles * (1 + 2);\r\n for (let i = 0; i < numTri3; i++) {\r\n indices[i] = geoOut._indices[i];\r\n }\r\n\r\n this.setIndex(new THREE.BufferAttribute(indices, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(positions, 3));\r\n this.setAttribute('normal', new THREE.BufferAttribute(normals, 3));\r\n this.setAttribute('color', new THREE.BufferAttribute(colors, 3));\r\n this.computeBoundingBox();\r\n this.computeBoundingSphere();\r\n\r\n geoOut.destroy();\r\n }\r\n\r\n convertToAtomsColored(packedArrays, atomsColored) {\r\n const { atoms, colors } = packedArrays;\r\n for (let i = 0, numAtoms = atoms.length; i < numAtoms; i++) {\r\n const vCenter = atoms[i].position;\r\n const { radius } = atoms[i].element;\r\n atomsColored[i] = new IsoSurfaceAtomColored(vCenter, radius);\r\n const nm = atoms[i].element.number;\r\n atomsColored[i].atomType = this.getType(nm);\r\n let cIdx = COLOR_SIZE * i;\r\n atomsColored[i].colorX = colors[cIdx++];\r\n atomsColored[i].colorY = colors[cIdx++];\r\n atomsColored[i].colorZ = colors[cIdx];\r\n atomsColored[i].srcAtom = atoms[i];\r\n }\r\n }\r\n\r\n getGeo() {\r\n return this.geoOut;\r\n }\r\n\r\n destroy() {\r\n this.atoms = null;\r\n\r\n this.hashLines = null;\r\n this.hashEntries = null;\r\n }\r\n\r\n /**\r\n * Calculates bounding box for array with spheres (atoms)\r\n *\r\n * @param {Object} atoms Atoms array\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n */\r\n getBoundingBox(atoms, vBoxMin, vBoxMax) {\r\n const bigNum = 10000000.0;\r\n\r\n vBoxMin.x = vBoxMin.y = vBoxMin.z = bigNum;\r\n vBoxMax.x = vBoxMax.y = vBoxMax.z = 0 - bigNum;\r\n\r\n const probeRadius2 = this.probeRadius * this.atomRadiusScale;\r\n let radMax = 0.0;\r\n for (let i = 0, num = atoms.length; i < num; i++) {\r\n const vCenter = atoms[i].coord;\r\n const rad = atoms[i].radius + probeRadius2;\r\n radMax = (rad > radMax) ? rad : radMax;\r\n if (vCenter.x - rad < vBoxMin.x) {\r\n vBoxMin.x = vCenter.x - rad;\r\n }\r\n if (vCenter.y - rad < vBoxMin.y) {\r\n vBoxMin.y = vCenter.y - rad;\r\n }\r\n if (vCenter.z - rad < vBoxMin.z) {\r\n vBoxMin.z = vCenter.z - rad;\r\n }\r\n if (vCenter.x + rad > vBoxMax.x) {\r\n vBoxMax.x = vCenter.x + rad;\r\n }\r\n if (vCenter.y + rad > vBoxMax.y) {\r\n vBoxMax.y = vCenter.y + rad;\r\n }\r\n if (vCenter.z + rad > vBoxMax.z) {\r\n vBoxMax.z = vCenter.z + rad;\r\n }\r\n }\r\n vBoxMin.x -= radMax;\r\n vBoxMin.y -= radMax;\r\n vBoxMin.z -= radMax;\r\n vBoxMax.x += radMax;\r\n vBoxMax.y += radMax;\r\n vBoxMax.z += radMax;\r\n }\r\n\r\n /**\r\n * Calculate (x,y,z) cordinate of the cell corner point\r\n *\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n * @param {number} x Cell integer x coordinate\r\n * @param {number} y Cell integer y coordinate\r\n * @param {number} z Cell integer z coordinate\r\n * @param {number} numPoints NUm points in cell on side\r\n * @param {Vector3} vOut Output vector\r\n */\r\n getCornerCoord(vBoxMin, vBoxMax, x, y, z, numPoints, vOut) {\r\n const invNP = 1.0 / (numPoints - 1.0);\r\n const tx = x * invNP;\r\n const ty = y * invNP;\r\n const tz = z * invNP;\r\n\r\n vOut.x = vBoxMin.x * (1.0 - tx) + vBoxMax.x * tx;\r\n vOut.y = vBoxMin.y * (1.0 - ty) + vBoxMax.y * ty;\r\n vOut.z = vBoxMin.z * (1.0 - tz) + vBoxMax.z * tz;\r\n }\r\n\r\n /**\r\n * Calculate point of intersection of sphere surface\r\n * and cell edge, given by [indexA, indexB] line\r\n *\r\n * @param {number} indexA Cell vertex index in [0..11]\r\n * @param {number} indexB Cell vertex index in [0..11]\r\n * @param {array} sign Sign array for all 8 vertices\r\n * @param {object} cube Cube\r\n * @param {number} indexPointValue for value placement\r\n * @param {Vector3} vOut Point of intersection\r\n */\r\n buildEdgePoint(indexA, indexB, sign, cube, indexPointValue, vOut) {\r\n if (sign[indexA] ^ sign[indexB]) {\r\n const cTwentyFour = 24;\r\n const t = (0 - cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexA])\r\n / (cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexB]\r\n - cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexA]);\r\n const xa = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 0];\r\n const ya = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 1];\r\n const za = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 2];\r\n const xb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 0];\r\n const yb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 1];\r\n const zb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 2];\r\n\r\n vOut.x = xa * (1.0 - t) + xb * t;\r\n vOut.y = ya * (1.0 - t) + yb * t;\r\n vOut.z = za * (1.0 - t) + zb * t;\r\n }\r\n }\r\n\r\n /**\r\n * Check if triangle is visible (vertices are close to atoms included in visibility set)\r\n *\r\n * @param {Vector3} v0 Vertex #0\r\n * @param {Vector3} v1 Vertex #1\r\n * @param {Vector3} v2 Vertex #2\r\n * @returns {boolean} true if triangle is visible\r\n */\r\n isTriangleVisible(v0, v1, v2) {\r\n const a0 = this.voxelWorld.getClosestAtom(v0);\r\n const a1 = this.voxelWorld.getClosestAtom(v1);\r\n const a2 = this.voxelWorld.getClosestAtom(v2);\r\n if (a0 === null || a1 === null || a2 === null\r\n || a0.srcAtom === null || a1.srcAtom === null || a2.srcAtom === null) {\r\n return false;\r\n }\r\n\r\n return this.visibilitySelector.includesAtom(a0.srcAtom)\r\n && this.visibilitySelector.includesAtom(a1.srcAtom)\r\n && this.visibilitySelector.includesAtom(a2.srcAtom);\r\n }\r\n\r\n /**\r\n * Add triangle to result geometry\r\n *\r\n * @param {Vector3} v0 Vertex #0\r\n * @param {Vector3} v1 Vertex #1\r\n * @param {Vector3} v2 Vertex #2\r\n * @returns {boolean} false if no more triangles can be added\r\n */\r\n addTriangle(v0, v1, v2) {\r\n if (this.visibilitySelector && !this.isTriangleVisible(v0, v1, v2)) {\r\n return true;\r\n }\r\n\r\n const geo = this.geoOut;\r\n\r\n if (geo._numTriangles >= this.maxNumTriangles) {\r\n return false;\r\n }\r\n\r\n // Add vertex with optimize\r\n const indInGeo0 = this.addVertexToGeo(geo, v0);\r\n const indInGeo1 = this.addVertexToGeo(geo, v1);\r\n const indInGeo2 = this.addVertexToGeo(geo, v2);\r\n if ((indInGeo0 | indInGeo1 | indInGeo2) < 0) {\r\n return false;\r\n }\r\n\r\n const itr = 3 * geo._numTriangles;\r\n geo._indices[itr + 0] = indInGeo0;\r\n geo._indices[itr + 1] = indInGeo1;\r\n geo._indices[itr + 2] = indInGeo2;\r\n geo._numTriangles++;\r\n return true;\r\n }\r\n\r\n /**\r\n * Build result geometry (triangle mesh) from marching cube cells\r\n *\r\n * @param {number} meshRes Marchnig cube vertex count on each side\r\n * @param {Vector3} vBoxMin Bounding box point min\r\n * @param {Vector3} vBoxMax Bounding box point max\r\n * @param {number} corners float values array for each cube point\r\n * @param {Vector3} vCellStep vector to next cube cell diagonal point\r\n * @param {object} cube IsoSurfaceMarchCube object\r\n * @returns {number} 0, if success (<0) is error\r\n */\r\n buildGeoFromCorners(meshRes, vBoxMin, vBoxMax, corners, vCellStep, cube) {\r\n const arrSize = 12;\r\n const cNumVerts = 8;\r\n const numCells = meshRes - 1;\r\n const side = meshRes;\r\n const side2 = meshRes * meshRes;\r\n\r\n const vaEdges = new Array(arrSize);\r\n for (let i = 0; i < arrSize; i++) {\r\n vaEdges[i] = new THREE.Vector3();\r\n }\r\n const sign = [];\r\n for (let i = 0; i < cNumVerts; i++) {\r\n sign[i] = 1.0;\r\n }\r\n const vCorner = new THREE.Vector3();\r\n let indCell = 0;\r\n let indY = 0;\r\n for (let y = 0; y < numCells; y++, indY += side2) {\r\n let indZ = 0;\r\n for (let z = 0; z < numCells; z++, indZ += side) {\r\n for (let x = 0; x < numCells; x++) {\r\n if (!cube.hasIntersection[indCell]) {\r\n // next cell\r\n indCell++;\r\n continue;\r\n }\r\n const bitsInside = cube.bitsInside[indCell];\r\n\r\n this.getCornerCoord(vBoxMin, vBoxMax, x, y, z, meshRes, vCorner);\r\n\r\n const indPointValues = indCell * (2 << (2 + 2));\r\n for (let i = 0, j = 0; i < cNumVerts; i++) {\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.x;\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.y;\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.z;\r\n }\r\n\r\n cube.pointsValuesLinear[indPointValues + 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 2 * 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 5 * 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3] += vCellStep.x;\r\n\r\n cube.pointsValuesLinear[indPointValues + 2 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 3 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 7 * 3 + 2] += vCellStep.z;\r\n\r\n cube.pointsValuesLinear[indPointValues + 4 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 5 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 7 * 3 + 1] += vCellStep.y;\r\n\r\n // now current cell has intersections (from -x to +x) on some cube edges\r\n const indValues = indPointValues + 24;\r\n for (let i = 0; i < cNumVerts; ++i) {\r\n sign[i] = (cube.pointsValuesLinear[indValues + i] < 0.0) ? 1 : 0;\r\n }\r\n\r\n this.buildEdgePoint(0, 1, sign, cube, indPointValues, vaEdges[0]);\r\n this.buildEdgePoint(1, 2, sign, cube, indPointValues, vaEdges[1]);\r\n this.buildEdgePoint(2, 3, sign, cube, indPointValues, vaEdges[2]);\r\n this.buildEdgePoint(3, 0, sign, cube, indPointValues, vaEdges[3]);\r\n\r\n this.buildEdgePoint(4, 5, sign, cube, indPointValues, vaEdges[4]);\r\n this.buildEdgePoint(5, 6, sign, cube, indPointValues, vaEdges[5]);\r\n this.buildEdgePoint(6, 7, sign, cube, indPointValues, vaEdges[6]);\r\n this.buildEdgePoint(7, 4, sign, cube, indPointValues, vaEdges[7]);\r\n\r\n this.buildEdgePoint(0, 4, sign, cube, indPointValues, vaEdges[8]);\r\n this.buildEdgePoint(1, 5, sign, cube, indPointValues, vaEdges[9]);\r\n this.buildEdgePoint(2, 6, sign, cube, indPointValues, vaEdges[10]);\r\n this.buildEdgePoint(3, 7, sign, cube, indPointValues, vaEdges[11]);\r\n\r\n const offs = bitsInside * (2 << (1 + 2));\r\n for (let numTri = 0, indTri = 0; numTri < (2 + 2 + 2); numTri++, indTri += 3) {\r\n // s_triIndicesMarchCube is external array, defined in mold_ind.js\r\n const i0 = cube.striIndicesMarchCube[offs + indTri];\r\n if (i0 < 0) {\r\n break;\r\n }\r\n const i1 = cube.striIndicesMarchCube[offs + indTri + 1];\r\n const i2 = cube.striIndicesMarchCube[offs + indTri + 2];\r\n\r\n if (!this.addTriangle(vaEdges[i0], vaEdges[i1], vaEdges[i2])) {\r\n return 0 - 2;\r\n }\r\n } // for numTri\r\n\r\n // next cell (cube)\r\n indCell++;\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n return 0;\r\n }\r\n\r\n /**\r\n * Returns number of cell with intersection with at least one sphere.\r\n * Using this number, we can estimate required number of vertices\r\n * and triangles to build result mesh.\r\n *\r\n * @param {number} side Number of points in cube voxels\r\n * @param {number} numCells Number of cells in cube voxels (per direction)\r\n * @param {array} corners Array of float values for cube corner points\r\n * @param {object} cube IsoSurfaceMarchCube object\r\n * @returns {number} numIntersectedCells\r\n */\r\n getNumIntersectedCells(side, numCells, corners, cube) {\r\n const side2 = side * side;\r\n const cNumVerts = 8;\r\n let numIntersectedCells = 0;\r\n\r\n let indCell = 0;\r\n let indY = 0;\r\n for (let y = 0; y < numCells; y++, indY += side2) {\r\n let indZ = 0;\r\n for (let z = 0; z < numCells; z++, indZ += side) {\r\n for (let x = 0; x < numCells; x++) {\r\n const cubeValuesIndex = indCell * (2 << (2 + 2)) + 24;\r\n const indCorner = x + indZ + indY;\r\n\r\n cube.pointsValuesLinear[cubeValuesIndex] = corners[indCorner];\r\n cube.pointsValuesLinear[cubeValuesIndex + 1] = corners[indCorner + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 2] = corners[indCorner + side + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 3] = corners[indCorner + side];\r\n cube.pointsValuesLinear[cubeValuesIndex + 4] = corners[side2 + indCorner];\r\n cube.pointsValuesLinear[cubeValuesIndex + 5] = corners[side2 + indCorner + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 6] = corners[side2 + indCorner + side + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 7] = corners[side2 + indCorner + side];\r\n\r\n // check read exception\r\n // assert(side2 + indCorner + side + 1 < side3);\r\n\r\n // get bit flags inside\r\n let bitsInside = 0;\r\n for (let i = 0; i < cNumVerts; ++i) {\r\n if (cube.pointsValuesLinear[cubeValuesIndex + i] < 0.0) {\r\n bitsInside |= (1 << i);\r\n }\r\n }\r\n\r\n if ((bitsInside === 0) || (bitsInside === ((1 << cNumVerts) - 1))) {\r\n cube.hasIntersection[indCell] = false;\r\n } else {\r\n cube.hasIntersection[indCell] = true;\r\n numIntersectedCells++;\r\n }\r\n cube.bitsInside[indCell] = bitsInside;\r\n // next cell\r\n indCell++;\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n return numIntersectedCells;\r\n }\r\n\r\n getType(letter) {\r\n /* eslint-disable no-magic-numbers */\r\n const atomT = [0, 0, 1, 1, 2, 6, 3, 6, 4, 6, 5, 6, 6, 0, 7, 3, 8, 2, 9, 6, 10, 6, 11, 6, 12, 6, 13, 6, 14, 6, 15, 4,\r\n 16, 5, 17, 6, 18, 6, 19, 6, 20, 6, 21, 6, 22, 6, 23, 6, 24, 6, 25, 6, 26, 6, 27, 6, 28, 6, 29, 6, 30, 6, 31, 6,\r\n 32, 6, 33, 6, 34, 6, 35, 6, 36, 6, 37, 6, 38, 6, 39, 6, 40, 6, 41, 6, 42, 6, 43, 6, 44, 6, 45, 6, 46, 6, 47, 6,\r\n 48, 6, 49, 6, 50, 6, 51, 6, 52, 6, 53, 6, 54, 6, 55, 6, 56, 6, 57, 6, 58, 6, 59, 6, 60, 6, 61, 6, 62, 6, 63, 6,\r\n 64, 6, 65, 6, 66, 6, 67, 6, 68, 6, 69, 6, 70, 6, 71, 6, 72, 6, 73, 6, 74, 6, 75, 6, 76, 6, 77, 6, 78, 6, 79, 6,\r\n 80, 6, 81, 6, 82, 6, 83, 6, 84, 6, 85, 6, 86, 6, 87, 6, 88, 6, 89, 6, 90, 6, 91, 6, 92, 6, 93, 6, 94, 6, 95, 6,\r\n 96, 6, 97, 6, 98, 6, 99, 6, 100, 6, 101, 6, 102, 6, 103, 6, 104, 6, 105, 6, 106, 6, 107, 6, 108, 6, 109, 6];\r\n /* eslint-enable no-magic-numbers */\r\n\r\n if (letter < 1 || letter > atomT.length / 2\r\n || (Object.keys(Element.ByAtomicNumber).length * 2) !== atomT.length) {\r\n throw new Error('atomT.length should be equal Element.ByAtomicNumber.length * 2');\r\n }\r\n return atomT[letter * 2];\r\n }\r\n\r\n /**\r\n * Calculate values for marching cube grid points\r\n * positive values are outside sphere, negative - is inside\r\n *\r\n * @param {array} corners array of float values\r\n * @param {number} side Number of point in cube in 1 dimennsion\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n * @param {array} atoms Array of input atoms\r\n * @param {number} probeRad radius for atom probing\r\n */\r\n calculateGridCorners(corners, side, vBoxMin, vBoxMax, atoms, probeRad) {\r\n const side2 = side * side;\r\n const side3 = side2 * side;\r\n const vCorner = new THREE.Vector3();\r\n const vDif = new THREE.Vector3();\r\n /* eslint-disable no-magic-numbers */\r\n const aLot = +1.0e12;\r\n /* eslint-enable no-magic-numbers */\r\n\r\n for (let i = 0; i < side3; i++) {\r\n corners[i] = aLot; // to large value\r\n }\r\n\r\n const xScale = (side - 1) / (vBoxMax.x - vBoxMin.x);\r\n const yScale = (side - 1) / (vBoxMax.y - vBoxMin.y);\r\n const zScale = (side - 1) / (vBoxMax.z - vBoxMin.z);\r\n\r\n for (let s = 0, numAtoms = atoms.length; s < numAtoms; s++) {\r\n const atom = atoms[s];\r\n const radius = atom.radius + probeRad;\r\n\r\n const fx = ((atom.coord.x - radius) - vBoxMin.x) * xScale;\r\n const fy = ((atom.coord.y - radius) - vBoxMin.y) * yScale;\r\n const fz = ((atom.coord.z - radius) - vBoxMin.z) * zScale;\r\n\r\n const indXMin = Math.floor(fx);\r\n const indYMin = Math.floor(fy);\r\n const indZMin = Math.floor(fz);\r\n\r\n let indXMax = Math.floor(((atom.coord.x + radius) - vBoxMin.x) * xScale);\r\n let indYMax = Math.floor(((atom.coord.y + radius) - vBoxMin.y) * yScale);\r\n let indZMax = Math.floor(((atom.coord.z + radius) - vBoxMin.z) * zScale);\r\n\r\n indXMax++;\r\n indYMax++;\r\n indZMax++;\r\n indXMax = (indXMax <= (side - 1)) ? indXMax : (side - 1);\r\n indYMax = (indYMax <= (side - 1)) ? indYMax : (side - 1);\r\n indZMax = (indZMax <= (side - 1)) ? indZMax : (side - 1);\r\n\r\n for (let y = indYMin; y <= indYMax; y++) {\r\n const indY = y * side2;\r\n for (let z = indZMin; z <= indZMax; z++) {\r\n const indZ = z * side;\r\n for (let x = indXMin; x <= indXMax; x++) {\r\n const ind = indY + indZ + x;\r\n this.getCornerCoord(vBoxMin, vBoxMax, x, y, z, side, vCorner);\r\n vDif.x = vCorner.x - atom.coord.x;\r\n vDif.y = vCorner.y - atom.coord.y;\r\n vDif.z = vCorner.z - atom.coord.z;\r\n const distToSphere = Math.sqrt(vDif.x * vDif.x + vDif.y * vDif.y + vDif.z * vDif.z);\r\n // val: < 0, if inside sphere\r\n // val: > 0, if outside sphere\r\n const val = distToSphere - radius;\r\n if (val < corners[ind]) {\r\n corners[ind] = val;\r\n }\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n } // for (s)\r\n }\r\n\r\n /**\r\n * Create memory pool for vertex hash management\r\n *\r\n * @param {number} maxNumVertices Maximum possible number of vertices (that will be build)\r\n * @param {number} maxNumTriangles Maximum possible number of triangles (that will be build)\r\n * @returns {number} 0, if success. (<0) is non memory\r\n */\r\n createVertexHash(maxNumVertices, maxNumTriangles) {\r\n this.hashLines = utils.allocateTyped(Int32Array, HASH_SIZE * 2);\r\n if (this.hashLines === null) {\r\n return 0 - 1;\r\n }\r\n for (let i = 0, j = 0; i < HASH_SIZE; i++) {\r\n this.hashLines[j++] = 0; // num vertices in this hash line\r\n this.hashLines[j++] = 0 - 1; // index of the first entry\r\n }\r\n\r\n this.maxNumVertices = maxNumVertices;\r\n this.maxNumTriangles = maxNumTriangles;\r\n\r\n this.numHashEtriesAllocated = maxNumVertices;\r\n this.hashEntries = utils.allocateTyped(Int32Array, 2 * this.numHashEtriesAllocated);\r\n if (this.hashEntries === null) {\r\n return 0 - 1;\r\n }\r\n for (let i = 0, j = 0; i < this.numHashEtriesAllocated; i++) {\r\n this.hashEntries[j++] = 0 - 1; // index of vertex\r\n this.hashEntries[j++] = 0 - 1; // next hash entry index\r\n }\r\n this.numHashEntryIndex = 0;\r\n return 0;\r\n }\r\n\r\n /**\r\n * Allocate and return new hash entry. Just check possible amount.\r\n *\r\n * @returns {number} index of hash entry, that can be used for geometry add vertex functionality\r\n */\r\n getNewHashEntry() {\r\n if (this.numHashEntryIndex < this.numHashEtriesAllocated) {\r\n const i = this.numHashEntryIndex;\r\n this.numHashEntryIndex++;\r\n return i;\r\n }\r\n return 0 - 1;\r\n }\r\n\r\n /**\r\n * Add vertex to geometry structure\r\n * using vertex hash table to quickly check, is this vertex already exist in geometry\r\n *\r\n * @param {object} geoOut Geometry to build\r\n * @param {Vector3} vAdd Vertex to add\r\n * @returns {number} index of added (or existing) vertex in geometry.\r\n */\r\n addVertexToGeo(geoOut, vAdd) {\r\n let entry;\r\n const oneHynberes = 0.01;\r\n const n815851 = 815851;\r\n const n37633 = 37633;\r\n const n2453543 = 2453543;\r\n const r106 = 1.0e-6;\r\n\r\n const hashResolution = this.marCubeResoultion << 2;\r\n const v = new THREE.Vector3();\r\n const ix = Math.floor(hashResolution * (vAdd.x - this.vBoxMin.x) / (this.vBoxMax.x + oneHynberes - this.vBoxMin.x));\r\n const iy = Math.floor(hashResolution * (vAdd.y - this.vBoxMin.y) / (this.vBoxMax.y + oneHynberes - this.vBoxMin.y));\r\n const iz = Math.floor(hashResolution * (vAdd.z - this.vBoxMin.z) / (this.vBoxMax.z + oneHynberes - this.vBoxMin.z));\r\n let iHash = ix * n815851 + iz * n37633 + iy * n2453543;\r\n iHash &= (HASH_SIZE - 1);\r\n const hLineIndex = iHash + iHash;\r\n\r\n // search vertex via hash\r\n // search in hash list\r\n if (this.vBoxMin !== null && this.vBoxMax !== null) {\r\n for (entry = this.hashLines[hLineIndex + 1]; entry >= 0; entry = this.hashEntries[entry * 2 + 1]) {\r\n const ind = this.hashEntries[entry * 2 + 0]; // vertex index\r\n v.copy(geoOut._vertices[ind]);\r\n v.x -= vAdd.x;\r\n v.y -= vAdd.y;\r\n v.z -= vAdd.z;\r\n const dot2 = v.x * v.x + v.y * v.y + v.z * v.z;\r\n if (dot2 < r106) {\r\n return ind;\r\n } // if (found)\r\n } // for (entry)\r\n } // search\r\n\r\n // add new vertex to geometry\r\n if (geoOut._numVertices >= this.maxNumVertices) {\r\n return 0 - 1;\r\n }\r\n\r\n const iVertAdd = geoOut._numVertices;\r\n geoOut._vertices[iVertAdd].copy(vAdd);\r\n\r\n // add to hash\r\n if (this.vBoxMin !== null && this.vBoxMax !== null) {\r\n entry = this.getNewHashEntry();\r\n if (entry < 0) {\r\n return 0 - 1;\r\n }\r\n const entryFirst = this.hashLines[hLineIndex + 1];\r\n this.hashLines[hLineIndex + 1] = entry;\r\n this.hashEntries[entry * 2 + 0] = iVertAdd;\r\n this.hashEntries[entry * 2 + 1] = entryFirst;\r\n\r\n this.hashLines[hLineIndex + 0]++; // num vertices in line ++\r\n }\r\n geoOut._numVertices++;\r\n return iVertAdd;\r\n }\r\n\r\n /**\r\n *\r\n * @param {number} side some placeholder description\r\n * @param {number} probeSphereRadius some placeholder description\r\n * @param {object} vBoxMin some placeholder description\r\n * @param {object} vBoxMax some placeholder description\r\n * @param {object} geoOut some placeholder description\r\n * @param {object} corners some placeholder description\r\n * @returns {number} always 0\r\n */\r\n modifyExcludedFromGeo(\r\n side,\r\n probeSphereRadius,\r\n vBoxMin,\r\n vBoxMax,\r\n geoOut,\r\n corners,\r\n ) {\r\n let ind;\r\n let distToSphere;\r\n let distToBorder;\r\n const r11 = 1.1;\r\n\r\n function innerBlockWorkAround() {\r\n if (distToBorder > 0.0) {\r\n // point is inside probe sphere\r\n if (corners[ind] < 0.0) {\r\n corners[ind] = distToBorder; // was inside surface, now is oustide ( > 0)\r\n }\r\n if (distToBorder > corners[ind]) {\r\n corners[ind] = distToBorder; // find positive maximum\r\n }\r\n } else if (distToBorder > corners[ind]) { // point is outside sphere\r\n corners[ind] = distToBorder; // find negative maximum\r\n }\r\n }\r\n\r\n const side2 = side * side;\r\n const xScale = (side - 1) / (vBoxMax.x - vBoxMin.x);\r\n const yScale = (side - 1) / (vBoxMax.y - vBoxMin.y);\r\n const zScale = (side - 1) / (vBoxMax.z - vBoxMin.z);\r\n\r\n const probeSpRad2 = (probeSphereRadius * 2) * (probeSphereRadius * 2);\r\n const sideInv = 1.0 / (side - 1);\r\n\r\n for (let i = 0; i < geoOut._numVertices; i++) {\r\n const vCenter = geoOut._vertices[i];\r\n\r\n const radEst = probeSphereRadius * r11;\r\n\r\n let indXMin = Math.floor(((vCenter.x - radEst) - vBoxMin.x) * xScale);\r\n let indYMin = Math.floor(((vCenter.y - radEst) - vBoxMin.y) * yScale);\r\n let indZMin = Math.floor(((vCenter.z - radEst) - vBoxMin.z) * zScale);\r\n\r\n let indXMax = Math.floor(((vCenter.x + radEst) - vBoxMin.x) * xScale);\r\n let indYMax = Math.floor(((vCenter.y + radEst) - vBoxMin.y) * yScale);\r\n let indZMax = Math.floor(((vCenter.z + radEst) - vBoxMin.z) * zScale);\r\n\r\n indXMin = (indXMin >= 0) ? indXMin : 0;\r\n indYMin = (indYMin >= 0) ? indYMin : 0;\r\n indZMin = (indZMin >= 0) ? indZMin : 0;\r\n indXMax = (indXMax <= (side - 1)) ? indXMax : (side - 1);\r\n indYMax = (indYMax <= (side - 1)) ? indYMax : (side - 1);\r\n indZMax = (indZMax <= (side - 1)) ? indZMax : (side - 1);\r\n\r\n for (let iy = indYMin; iy <= indYMax; iy++) {\r\n const indY = iy * side2;\r\n for (let iz = indZMin; iz <= indZMax; iz++) {\r\n const indZ = iz * side;\r\n for (let ix = indXMin; ix <= indXMax; ix++) {\r\n ind = indY + indZ + ix;\r\n // getCornerCoord(vBoxMin, vBoxMax, ix, iy, iz, side, &vCorner);\r\n let t = ix * sideInv;\r\n const xCorner = vBoxMin.x * (1.0 - t) + vBoxMax.x * t;\r\n t = iy * sideInv;\r\n const yCorner = vBoxMin.y * (1.0 - t) + vBoxMax.y * t;\r\n t = iz * sideInv;\r\n const zCorner = vBoxMin.z * (1.0 - t) + vBoxMax.z * t;\r\n\r\n const dx = xCorner - vCenter.x;\r\n const dy = yCorner - vCenter.y;\r\n const dz = zCorner - vCenter.z;\r\n const dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 < probeSpRad2) {\r\n distToSphere = Math.sqrt(dist2);\r\n distToBorder = -(distToSphere - probeSphereRadius);\r\n innerBlockWorkAround();\r\n } // if (dist from corner point to sphere center more 2 radiuses)\r\n } // for (ix)\r\n } // for (iz)\r\n } // for (iy)\r\n } // for (i) all geo vertices\r\n return 0;\r\n }\r\n\r\n _innerBuild() {\r\n let ok;\r\n const expandFactor = 1.2;\r\n\r\n // performance test\r\n // this.performanceTest();\r\n\r\n // Create temporary atoms (but colored)\r\n const packedArrays = {\r\n posRad: this._posRad,\r\n colors: this._colors,\r\n atoms: this._opts.atoms,\r\n };\r\n this.complex = this._opts.parent;\r\n this.atoms = packedArrays.atoms;\r\n this.meshResolution = this._opts.gridSpacing;\r\n this.atomRadiusScale = this._opts.radScale;\r\n this.colorMode = this._opts.colorMode;\r\n this.probeRadius = this._opts.probeRadius;\r\n this.useVertexColors = true;\r\n this.excludeProbe = this._opts.excludeProbe;\r\n this.visibilitySelector = this._opts.visibilitySelector;\r\n\r\n this.geoOut = null;\r\n\r\n this.hashLines = null;\r\n this.hashEntries = null;\r\n this.numHashEtriesAllocated = 0;\r\n this.numHashEntryIndex = 0;\r\n this.maxNumVertices = 0;\r\n this.maxNumTriangles = 0;\r\n\r\n const atomsColored = new Array(this.atoms.length);\r\n this.convertToAtomsColored(packedArrays, atomsColored);\r\n\r\n // find bbox for spheres scene\r\n const vBoxMin = this.vBoxMin = new THREE.Vector3();\r\n const vBoxMax = this.vBoxMax = new THREE.Vector3();\r\n this.getBoundingBox(atomsColored, vBoxMin, vBoxMax);\r\n\r\n const marCubeResoultion = this.marCubeResoultion = this.meshResolution * (2 + 2);\r\n\r\n // build grid corners for Marching cube algorithm\r\n const side = marCubeResoultion;\r\n const side2 = side * side;\r\n const side3 = side2 * side;\r\n const corners = utils.allocateTyped(Float32Array, side3);\r\n const rProbeRadius = this.probeRadius * this.atomRadiusScale;\r\n\r\n this.calculateGridCorners(corners, side, vBoxMin, vBoxMax, atomsColored, rProbeRadius);\r\n\r\n const numCells = marCubeResoultion - 1;\r\n const cube = new IsoSurfaceMarchCube();\r\n ok = cube.create(numCells);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n // copy corners to cells\r\n const vCellStep = new THREE.Vector3();\r\n vCellStep.x = (vBoxMax.x - vBoxMin.x) / numCells;\r\n vCellStep.y = (vBoxMax.y - vBoxMin.y) / numCells;\r\n vCellStep.z = (vBoxMax.z - vBoxMin.z) / numCells;\r\n\r\n let numIntersectedCellsEstim = this.getNumIntersectedCells(side, numCells, corners, cube);\r\n let maxNumVertices = Math.floor(numIntersectedCellsEstim * expandFactor);\r\n let maxNumTriangles = Math.floor(numIntersectedCellsEstim * expandFactor * 2);\r\n\r\n this.geoOut = new IsoSurfaceGeo(maxNumVertices, maxNumTriangles, this.useVertexColors);\r\n\r\n ok = this.createVertexHash(maxNumVertices, maxNumTriangles);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n\r\n // build voxel world (used to check triangle-to-atom tie and to calculate normals and colors)\r\n let probeRadForNormalsColors = rProbeRadius;\r\n if (this.excludeProbe) {\r\n probeRadForNormalsColors = 0.01;\r\n }\r\n this.voxelWorld = new IsosurfaceBuildNormals(\r\n atomsColored.length,\r\n atomsColored,\r\n vBoxMin,\r\n vBoxMax,\r\n probeRadForNormalsColors,\r\n );\r\n this.voxelWorld.createVoxels();\r\n\r\n ok = this.buildGeoFromCorners(marCubeResoultion, vBoxMin, vBoxMax, corners, vCellStep, cube);\r\n if (this.excludeProbe) {\r\n // using 3d mesh (geoOut) as a surface points\r\n // move probe sphere and try to minimuze corners values\r\n this.modifyExcludedFromGeo(side, rProbeRadius, vBoxMin, vBoxMax, this.geoOut, corners);\r\n\r\n // delete old builded geo\r\n this.geoOut._vertices = null;\r\n this.geoOut._colors = null;\r\n this.geoOut._indices = null;\r\n this.geoOut._normals = null;\r\n this.geoOut._numVertices = 0;\r\n this.geoOut._numTriangles = 0;\r\n this.geoOut = null;\r\n\r\n // estimage geo vertices budget again\r\n numIntersectedCellsEstim = this.getNumIntersectedCells(side, numCells, corners, cube);\r\n maxNumVertices = Math.floor(numIntersectedCellsEstim * expandFactor);\r\n maxNumTriangles = Math.floor(numIntersectedCellsEstim * expandFactor * 2);\r\n\r\n // creates empty new geometry\r\n this.geoOut = new IsoSurfaceGeo(maxNumVertices, maxNumTriangles, this.useVertexColors);\r\n ok = this.createVertexHash(maxNumVertices, maxNumTriangles);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n // build vertices and triangles from corners values\r\n ok = this.buildGeoFromCorners(side, vBoxMin, vBoxMax, corners, vCellStep, cube);\r\n }\r\n\r\n // build vertex normals\r\n this.voxelWorld.buildNormals(this.geoOut._vertices.length, this.geoOut._vertices, this.geoOut._normals);\r\n // More value : more smooth color mixing\r\n // value about 0.7: very rough colors borders\r\n let radiusColorSmoothness = 6.5;\r\n if (this.excludeProbe) {\r\n radiusColorSmoothness -= 1.5;\r\n }\r\n if (this.useVertexColors) {\r\n this.voxelWorld.buildColors(\r\n this.geoOut._vertices.length,\r\n this.geoOut._vertices,\r\n this.geoOut._colors,\r\n radiusColorSmoothness,\r\n );\r\n }\r\n this.voxelWorld.destroyVoxels();\r\n this.voxelWorld = null;\r\n\r\n // remove objects\r\n cube.destroy();\r\n\r\n return ok;\r\n }\r\n}\r\n\r\n// All code below must be erased from every device and each developer's memory\r\n\r\nexport default SSIsosurfaceGeometry;\r\n","import * as THREE from 'three';\r\nimport EventDispatcher from '../../utils/EventDispatcher';\r\n\r\nfunction createLabel(fieldTxt, className) {\r\n const text = document.createElement('div');\r\n text.className = className;\r\n\r\n if (typeof fieldTxt === 'string') {\r\n const spanText = document.createElement('span');\r\n spanText.style.fontSize = '150%';\r\n const strings = fieldTxt.split('\\n');\r\n\r\n for (let i = 0, n = strings.length; i < n; ++i) {\r\n const spanNodeP = document.createElement('span');\r\n const spanNodeText = document.createTextNode(strings[i]);\r\n spanNodeP.appendChild(spanNodeText);\r\n spanText.appendChild(spanNodeP);\r\n if (i < n - 1) {\r\n spanText.appendChild(document.createElement('br'));\r\n }\r\n }\r\n\r\n text.appendChild(spanText);\r\n } else {\r\n text.appendChild(fieldTxt);\r\n }\r\n text.worldPos = new THREE.Vector3();\r\n return text;\r\n}\r\nclass LabelsGeometry extends EventDispatcher {\r\n constructor(instanceCount, opts) {\r\n super();\r\n this._opts = opts;\r\n this.items = [];\r\n this.needsUpdate = false;\r\n\r\n let xTranslation = -50;\r\n let yTranslation = -50;\r\n switch (opts.horizontalAlign) {\r\n case 'left':\r\n xTranslation = 0;\r\n break;\r\n case 'right':\r\n xTranslation = -100;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n switch (opts.verticalAlign) {\r\n case 'top':\r\n yTranslation = -100;\r\n break;\r\n case 'bottom':\r\n yTranslation = 0;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n const deltaPos = new THREE.Vector3(opts.dx || 0, opts.dy || 0, opts.dz || 0);\r\n this.userData = {\r\n translation: `translate(${xTranslation}%, ${yTranslation}%)`,\r\n offset: deltaPos,\r\n };\r\n }\r\n\r\n setItem(itemIdx, itemPos, fieldTxt) {\r\n const opts = this._opts;\r\n const text = this.items[itemIdx] || createLabel(fieldTxt, 'label');\r\n\r\n text.worldPos.copy(itemPos);\r\n text.style.textAlign = opts.horizontalAlign;\r\n text.style.verticalAlign = opts.verticalAlign;\r\n this.items[itemIdx] = text;\r\n }\r\n\r\n setColor(itemIdx, fColor, bColor) {\r\n const text = this.items[itemIdx];\r\n text.opts = {\r\n color: fColor,\r\n background: bColor,\r\n };\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.needsUpdate = true;\r\n this.dispatchEvent({ type: 'update' });\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n }\r\n\r\n // unimplemented functions\r\n raycast() {\r\n }\r\n\r\n setOpacity() {\r\n\r\n }\r\n\r\n getSubset() {\r\n return [];\r\n }\r\n}\r\n\r\nexport default LabelsGeometry;\r\n","import InstancedSpheresGeometry from './InstancedSpheresGeometry';\r\nimport SimpleSpheresGeometry from './SimpleSpheresGeometry';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\nimport Instanced2CCylindersGeometry from './Instanced2CCylindersGeometry';\r\nimport ExtrudedObjectsGeometry from './ExtrudedObjectsGeometry';\r\nimport ChunkedLinesGeometry from './ChunkedLinesGeometry';\r\nimport TwoColorLinesGeometry from './TwoColorLinesGeometry';\r\nimport CrossGeometry from './CrossGeometry';\r\nimport QuickSurfGeometry from './QuickSurfGeometry';\r\nimport ContactSurfaceGeometry from './ContactSurfaceGeometry';\r\nimport SSIsosurfaceGeometry from './SSIsosurfaceGeometry';\r\nimport LabelsGeometry from './LabelsGeometry';\r\n\r\nexport default {\r\n InstancedSpheresGeometry,\r\n SimpleSpheresGeometry,\r\n Simple2CCylindersGeometry,\r\n Instanced2CCylindersGeometry,\r\n ExtrudedObjectsGeometry,\r\n ChunkedLinesGeometry,\r\n TwoColorLinesGeometry,\r\n CrossGeometry,\r\n QuickSurfGeometry,\r\n ContactSurfaceGeometry,\r\n SSIsosurfaceGeometry,\r\n LabelsGeometry,\r\n};\r\n","export default {\r\n\r\n precision: 'mediump',\r\n\r\n /**\r\n *\r\n * @param {THREE.WebGLRenderer} renderer\r\n */\r\n init(renderer) {\r\n this.precision = renderer.capabilities.getMaxPrecision('highp');\r\n },\r\n};\r\n","import * as THREE from 'three';\r\n\r\nconst noiseWidth = 4;\r\nconst noiseHeight = 4;\r\nconst _noiseData = new Uint8Array([\r\n 24, 52, 0, 255, 254, 145, 0, 255, 122, 0, 0, 255, 7, 170, 0, 255,\r\n 34, 214, 0, 255, 173, 8, 0, 255, 86, 249, 0, 255, 160, 4, 0, 255,\r\n 226, 46, 0, 255, 224, 211, 0, 255, 3, 157, 0, 255, 174, 247, 0, 255,\r\n 12, 182, 0, 255, 220, 216, 0, 255, 1, 109, 0, 255, 253, 154, 0, 255,\r\n]);\r\nconst _noiseWrapS = THREE.RepeatWrapping;\r\nconst _noiseWrapT = THREE.RepeatWrapping;\r\nconst _noiseMinFilter = THREE.NearestFilter;\r\nconst _noiseMagFilter = THREE.NearestFilter;\r\nconst _noiseMapping = THREE.UVMapping;\r\nconst noiseTexture = new THREE.DataTexture(\r\n _noiseData,\r\n noiseWidth,\r\n noiseHeight,\r\n THREE.RGBAFormat,\r\n THREE.UnsignedByteType,\r\n _noiseMapping,\r\n _noiseWrapS,\r\n _noiseWrapT,\r\n _noiseMagFilter,\r\n _noiseMinFilter,\r\n 1,\r\n);\r\nnoiseTexture.needsUpdate = true;\r\n\r\nexport default {\r\n noiseWidth,\r\n noiseHeight,\r\n noiseTexture,\r\n};\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './Uber.vert';\r\nimport fragmentShader from './Uber.frag';\r\nimport capabilities from '../capabilities';\r\nimport noise from '../noiseTexture';\r\n\r\n// Length of _samplesKernel is used in Uber.frag\r\n// If you want to change length of _samplesKernel, please, remember change it in Uber.frag too.\r\n// You can easy find places for replace using word:_samplesKernel\r\nconst _samplesKernel = [\r\n new THREE.Vector2(-0.541978, 0.840393),\r\n new THREE.Vector2(0.125533, -0.992089),\r\n new THREE.Vector2(0.374329, 0.927296),\r\n new THREE.Vector2(-0.105475, 0.994422),\r\n];\r\n\r\nconst defaultUniforms = THREE.UniformsUtils.merge([\r\n\r\n THREE.UniformsLib.fog,\r\n THREE.UniformsLib.lights,\r\n\r\n {\r\n // are updated automatically by three.js (see THREE.ShaderLib.common)\r\n diffuse: { value: new THREE.Color(0xeeeeee) },\r\n opacity: { value: 1.0 },\r\n\r\n specular: { type: 'c', value: new THREE.Color(0x111111) },\r\n shininess: { type: 'f', value: 30 },\r\n fixedColor: { type: 'c', value: new THREE.Color(0xffffff) },\r\n zOffset: { type: 'f', value: 0.0 },\r\n zClipValue: { type: 'f', value: 0.0 },\r\n clipPlaneValue: { type: 'f', value: 0.0 },\r\n nearPlaneValue: { type: 'f', value: -0.5 },\r\n invModelViewMatrix: { type: '4fv', value: new THREE.Matrix4() },\r\n world2colorMatrix: { type: '4fv', value: new THREE.Matrix4() },\r\n dashedLineSize: { type: 'f', value: 0.1 },\r\n dashedLinePeriod: { type: 'f', value: 0.2 },\r\n projMatrixInv: { type: '4fv', value: new THREE.Matrix4() },\r\n viewport: { type: 'v2', value: new THREE.Vector2() },\r\n lineWidth: { type: 'f', value: 2.0 },\r\n // default value must be the same as settings\r\n fogAlpha: { type: 'f', value: 1.0 },\r\n samplesKernel: { type: 'v2v', value: null },\r\n noiseTex: { type: 't', value: null },\r\n noiseTexelSize: { type: 'v2', value: null },\r\n srcTexelSize: { type: 'v2', value: null },\r\n },\r\n\r\n]);\r\n\r\nconst uberOptionNames = [\r\n 'shininess',\r\n 'opacity',\r\n 'zOffset',\r\n 'diffuse',\r\n 'specular',\r\n 'fixedColor',\r\n 'zClipCoef',\r\n 'zClipValue',\r\n 'clipPlaneValue',\r\n 'world2colorMatrix',\r\n 'dashedLineSize',\r\n 'dashedLinePeriod',\r\n 'projMatrixInv',\r\n 'viewport',\r\n 'lineWidth',\r\n 'fogAlpha',\r\n 'samplesKernel',\r\n 'noiseTex',\r\n 'noiseTexelSize',\r\n 'srcTexelSize',\r\n];\r\n\r\n// properties that convert to uniforms\r\nconst uberOptions = {\r\n diffuse: new THREE.Color(0xffffff), // used in phong lighting\r\n specular: new THREE.Color(0x111111), // used in phong lighting\r\n shininess: 30, // used in phong lighting\r\n opacity: 1, // set mesh opacity\r\n fixedColor: new THREE.Color(0xffffff), // color to override (see OVERRIDE_COLOR)\r\n zOffset: 0.0, // used fo zsprites (see SPHERE_SPRITE CYLINDER_SPRITE)\r\n zClipCoef: 2.0, // use for Surfs clipping (mesh param, isn't used in shader) FIXME move to representation param\r\n zClipValue: 0.0, // value to clip Surfs in shader (see ZCLIP)\r\n clipPlaneValue: 0.0, // value to clip scene globally (see CLIPPLANE)\r\n world2colorMatrix: new THREE.Matrix4(),\r\n dashedLineSize: 0.1,\r\n dashedLinePeriod: 0.3,\r\n projMatrixInv: new THREE.Matrix4(),\r\n viewport: new THREE.Vector2(800, 600),\r\n lineWidth: 2.0,\r\n fogAlpha: 1.0,\r\n samplesKernel: _samplesKernel,\r\n noiseTex: noise.noiseTexture,\r\n noiseTexelSize: new THREE.Vector2(1.0 / noise.noiseWidth, 1.0 / noise.noiseHeight),\r\n srcTexelSize: new THREE.Vector2(1.0 / 800.0, 1.0 / 600.0),\r\n copy(source) {\r\n this.diffuse.copy(source.diffuse);\r\n this.specular.copy(source.specular);\r\n this.shininess = source.shininess;\r\n this.opacity = source.opacity;\r\n this.fixedColor.copy(source.fixedColor);\r\n this.zOffset = source.zOffset;\r\n this.zClipCoef = source.zClipCoef;\r\n this.zClipValue = source.zClipValue;\r\n this.clipPlaneValue = source.clipPlaneValue;\r\n this.world2colorMatrix.copy(source.world2colorMatrix);\r\n this.dashedLineSize = source.dashedLineSize;\r\n this.dashedLinePeriod = source.dashedLinePeriod;\r\n this.projMatrixInv = source.projMatrixInv;\r\n this.viewport = source.viewport;\r\n this.lineWidth = source.lineWidth; // used for thick lines only\r\n this.toonShading = source.toonShading;\r\n this.fogAlpha = source.fogAlpha;\r\n this.samplesKernel = source.samplesKernel;\r\n this.noiseTex = source.noiseTex;\r\n this.noiseTexelSize = source.noiseTexelSize;\r\n this.srcTexelSize = source.srcTexelSize;\r\n },\r\n};\r\n\r\nclass UberMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // add fog\r\n this.fog = true;\r\n // used for instanced geometry\r\n this.instancedPos = false;\r\n this.instancedMatrix = false;\r\n // atoms and links color\r\n this.attrColor = false;\r\n // second link color for cylinders\r\n this.attrColor2 = false;\r\n //\r\n this.attrAlphaColor = false;\r\n // overrides color for all vertices (used in selection)\r\n this.overrideColor = false;\r\n // zsrpites\r\n this.sphereSprite = false;\r\n this.cylinderSprite = false;\r\n // clip Surfs individually\r\n this.zClip = false;\r\n // clip scene with global clip plane\r\n this.clipPlane = false;\r\n // enable fake (chess-like) opacity\r\n this.fakeOpacity = false;\r\n // render only depth, don't take care about the pixel color (used for transparency depth prepass)\r\n this.prepassTransparancy = false;\r\n // used to render pixel positions\r\n this.colorFromPos = false;\r\n // used to render shadowmap\r\n this.shadowmap = false;\r\n // used to describe shadowmap type\r\n this.shadowmapType = 'random';\r\n // used to render pixel view deph\r\n this.colorFromDepth = false;\r\n // mark that rendering is for orthographic camera\r\n this.orthoCam = false;\r\n // used to render dashed line\r\n this.dashedLine = false;\r\n // mark as transparent\r\n this.transparent = true;\r\n // mark as thick lines\r\n this.thickLine = false;\r\n // makes fog begin transparency (required for transparent background)\r\n this.fogTransparent = false;\r\n // used to render surface normals to G buffer for ssao effect\r\n this.normalsToGBuffer = false;\r\n // used for toon material\r\n this.toonShading = false;\r\n\r\n // uber options of \"root\" materials are inherited from single uber-options object that resides in prototype\r\n this.uberOptions = Object.create(UberMaterial.prototype.uberOptions);\r\n\r\n // set default values\r\n super.setValues({\r\n uniforms: THREE.UniformsUtils.clone(defaultUniforms),\r\n vertexShader: this.precisionString() + vertexShader,\r\n fragmentShader: this.precisionString() + fragmentShader,\r\n lights: true,\r\n fog: true,\r\n side: THREE.DoubleSide,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n precisionString() {\r\n const { precision } = capabilities;\r\n const str = `precision ${precision} float;\\n`\r\n + `precision ${precision} int;\\n\\n`;\r\n return str;\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n\r\n this.fragmentShader = source.fragmentShader;\r\n this.vertexShader = source.vertexShader;\r\n\r\n this.uniforms = THREE.UniformsUtils.clone(source.uniforms);\r\n this.defines = { ...source.defines };\r\n this.extensions = source.extensions;\r\n\r\n this.fog = source.fog;\r\n this.instancedPos = source.instancedPos;\r\n this.instancedMatrix = source.instancedMatrix;\r\n this.attrColor = source.attrColor;\r\n this.attrColor2 = source.attrColor2;\r\n this.attrAlphaColor = source.attrAlphaColor;\r\n this.overrideColor = source.overrideColor;\r\n this.sphereSprite = source.sphereSprite;\r\n this.cylinderSprite = source.cylinderSprite;\r\n this.zClip = source.zClip;\r\n this.clipPlane = source.clipPlane;\r\n this.fakeOpacity = source.fakeOpacity;\r\n this.colorFromPos = source.colorFromPos;\r\n this.shadowmap = source.shadowmap;\r\n this.shadowmapType = source.shadowmapType;\r\n this.colorFromDepth = source.colorFromDepth;\r\n this.orthoCam = source.orthoCam;\r\n this.prepassTransparancy = source.prepassTransparancy;\r\n this.dashedLine = source.dashedLine;\r\n this.thickLine = source.thickLine;\r\n this.fogTransparent = source.fogTransparent;\r\n this.normalsToGBuffer = source.normalsToGBuffer;\r\n this.toonShading = source.toonShading;\r\n\r\n this.uberOptions.copy(source.uberOptions);\r\n\r\n return this;\r\n }\r\n\r\n // create copy of this material\r\n // its options are prototyped after this material's options\r\n createInstance() {\r\n const inst = new UberMaterial();\r\n inst.copy(this);\r\n inst.uberOptions = Object.create(this.uberOptions);\r\n return inst;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n const extensions = {};\r\n\r\n if (this.fog) {\r\n defines.USE_FOG = 1;\r\n }\r\n if (this.instancedPos) {\r\n defines.INSTANCED_POS = 1;\r\n }\r\n if (this.instancedMatrix) {\r\n defines.INSTANCED_MATRIX = 1;\r\n }\r\n if (this.attrColor) {\r\n defines.ATTR_COLOR = 1;\r\n }\r\n if (this.attrColor2) {\r\n defines.ATTR_COLOR2 = 1;\r\n }\r\n if (this.attrAlphaColor) {\r\n defines.ATTR_ALPHA_COLOR = 1;\r\n }\r\n if (this.overrideColor) {\r\n defines.OVERRIDE_COLOR = 1;\r\n }\r\n if (this.sphereSprite) {\r\n defines.SPHERE_SPRITE = 1;\r\n extensions.fragDepth = true;\r\n }\r\n if (this.cylinderSprite) {\r\n defines.CYLINDER_SPRITE = 1;\r\n extensions.fragDepth = true;\r\n }\r\n if (this.zClip) {\r\n defines.ZCLIP = 1;\r\n }\r\n if (this.clipPlane) {\r\n defines.CLIP_PLANE = 1;\r\n }\r\n if (this.fakeOpacity) {\r\n defines.FAKE_OPACITY = 1;\r\n }\r\n if (this.lights) {\r\n defines.USE_LIGHTS = 1;\r\n }\r\n if (this.colorFromPos) {\r\n defines.COLOR_FROM_POS = 1;\r\n }\r\n if (this.shadowmap) {\r\n defines.SHADOWMAP = 1;\r\n if (this.shadowmapType === 'pcf') {\r\n defines.SHADOWMAP_PCF_SHARP = 1;\r\n } else if (this.shadowmapType === 'random') {\r\n defines.SHADOWMAP_PCF_RAND = 1;\r\n } else {\r\n defines.SHADOWMAP_BASIC = 1;\r\n }\r\n }\r\n if (this.colorFromDepth) {\r\n defines.COLOR_FROM_DEPTH = 1;\r\n }\r\n if (this.orthoCam) {\r\n defines.ORTHOGRAPHIC_CAMERA = 1;\r\n }\r\n if (this.prepassTransparancy) {\r\n defines.PREPASS_TRANSP = 1;\r\n }\r\n if (this.dashedLine) {\r\n defines.DASHED_LINE = 1;\r\n }\r\n if (this.thickLine) {\r\n defines.THICK_LINE = 1;\r\n }\r\n if (this.fogTransparent) {\r\n defines.FOG_TRANSPARENT = 1;\r\n }\r\n if (this.normalsToGBuffer) {\r\n extensions.drawBuffers = true;\r\n defines.NORMALS_TO_G_BUFFER = 1;\r\n }\r\n if (this.toonShading) {\r\n defines.TOON_SHADING = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n this.extensions = extensions;\r\n }\r\n\r\n setUberOptions(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n for (const key in values) {\r\n if (!values.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n\r\n if (this.uberOptions[key] instanceof THREE.Color) {\r\n this.uberOptions[key] = values[key].clone();\r\n } else {\r\n this.uberOptions[key] = values[key];\r\n }\r\n }\r\n }\r\n\r\n clone(shallow) {\r\n if (!shallow) {\r\n return super.clone();\r\n }\r\n return this.createInstance();\r\n }\r\n\r\n updateUniforms() {\r\n const self = this;\r\n\r\n uberOptionNames.forEach((p) => {\r\n if (self.uniforms.hasOwnProperty(p)) {\r\n if (self.uberOptions[p] instanceof THREE.Color\r\n || self.uberOptions[p] instanceof THREE.Matrix4) {\r\n self.uniforms[p].value = self.uberOptions[p].clone();\r\n } else {\r\n self.uniforms[p].value = self.uberOptions[p];\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\nUberMaterial.prototype.uberOptions = uberOptions;\r\n\r\nexport default UberMaterial;\r\n","import UberMaterial from '../shaders/UberMaterial';\r\n\r\nexport default function (SuperClass) {\r\n class NewObjectType extends SuperClass {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.onBeforeRender = NewObjectType.prototype.onBeforeRender;\r\n }\r\n\r\n onBeforeRender(renderer, scene, camera, geometry, material, group) {\r\n this._onBeforeRender(renderer, scene, camera, geometry, material, group);\r\n this._update();\r\n }\r\n\r\n _onBeforeRender() {\r\n }\r\n\r\n _update() {\r\n const { material } = this;\r\n if (!material) {\r\n return;\r\n }\r\n\r\n if (material instanceof UberMaterial) {\r\n material.updateUniforms();\r\n }\r\n }\r\n }\r\n\r\n return NewObjectType;\r\n}\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass ZSpriteMesh extends Mesh {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n\r\n _onBeforeRender(renderer, scene, camera, _geometry, _material, _group) {\r\n Mesh.prototype._onBeforeRender.call(this, renderer, scene, camera);\r\n const { material } = this;\r\n if (!material) {\r\n return;\r\n }\r\n\r\n if (material.uniforms.invModelViewMatrix) {\r\n // NOTE: update of modelViewMatrix inside threejs is done after onBeforeRender call,\r\n // so we have to do it manually in that place\r\n this.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, this.matrixWorld);\r\n // get inverse matrix\r\n material.uniforms.invModelViewMatrix.value.copy(this.modelViewMatrix).invert();\r\n material.uniforms.nearPlaneValue.value = camera.near;\r\n material.uniformsNeedUpdate = true;\r\n }\r\n }\r\n}\r\n\r\nexport default ZSpriteMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass ZClippedMesh extends Mesh {\r\n constructor(geometry, material) {\r\n super(geometry, material);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n\r\n static _mvLength = new THREE.Vector3();\r\n\r\n static _center = new THREE.Vector3();\r\n\r\n static _modelView = new THREE.Matrix4();\r\n\r\n _onBeforeRender(renderer, scene, camera) {\r\n Mesh.prototype._onBeforeRender.call(this, renderer, scene, camera);\r\n\r\n const geo = this.geometry;\r\n const { material } = this;\r\n if (!geo.zClip || !material.uberOptions) {\r\n return;\r\n }\r\n\r\n const zClipCoef = 0.5;\r\n\r\n const modelView = ZClippedMesh._modelView;\r\n const mvLength = ZClippedMesh._mvLength;\r\n const center = ZClippedMesh._center;\r\n\r\n modelView.multiplyMatrices(this.matrixWorld, camera.matrixWorldInverse);\r\n const s = mvLength.setFromMatrixColumn(modelView, 0).length();\r\n center.copy(geo.boundingSphere.center);\r\n\r\n this.localToWorld(center);\r\n material.uberOptions.zClipValue = camera.position.z - center.z\r\n - s * (zClipCoef * geo.boundingSphere.radius);\r\n }\r\n}\r\n\r\nexport default ZClippedMesh;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport CSS2DObject from '../CSS2DObject';\r\nimport utils from '../../utils';\r\n\r\nclass TextMesh extends THREE.Group {\r\n constructor(geometry, _material) {\r\n super();\r\n this.geometry = geometry;\r\n\r\n const self = this;\r\n self.initialized = false;\r\n this.geometry.addEventListener('update', () => {\r\n self.update();\r\n });\r\n }\r\n\r\n init() {\r\n const { children } = this;\r\n for (let i = children.length - 1; i >= 0; --i) {\r\n this.remove(children[i]);\r\n }\r\n\r\n const { items, userData } = this.geometry;\r\n for (let i = 0, n = items.length; i < n; ++i) {\r\n const srcItem = items[i];\r\n if (!srcItem) {\r\n continue;\r\n }\r\n const item = utils.shallowCloneNode(srcItem);\r\n const label = new CSS2DObject(item);\r\n label.userData = _.clone(userData);\r\n const el = label.getElement();\r\n el.style.visibility = 'visible';\r\n label.source = srcItem;\r\n this.add(label);\r\n }\r\n this.initialized = true;\r\n }\r\n\r\n update() {\r\n const geo = this.geometry;\r\n if (!geo.needsUpdate) {\r\n return;\r\n }\r\n const { children } = this;\r\n if (!this.initialized) {\r\n this.init();\r\n }\r\n\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n const item = child.source;\r\n child.position.copy(item.worldPos);\r\n child.userData.color = item.opts.color;\r\n child.userData.background = item.opts.background;\r\n }\r\n }\r\n}\r\n\r\nexport default TextMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass SimpleMesh extends Mesh {\r\n constructor(geometry, material) {\r\n super(geometry, material);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n}\r\n\r\nexport default SimpleMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\nconst _viewport = new THREE.Vector2();\r\n\r\nclass ThickLineMesh extends Mesh {\r\n _onBeforeRender(renderer, scene, camera, _geometry, _material, _group) {\r\n const { material } = this;\r\n if (!material.uberOptions) {\r\n return;\r\n }\r\n\r\n material.uberOptions.projMatrixInv.copy(camera.projectionMatrix).invert();\r\n renderer.getSize(_viewport);\r\n material.uberOptions.viewport.set(_viewport.width, _viewport.height);\r\n }\r\n}\r\n\r\nexport default ThickLineMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass InstancedMesh extends Mesh {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n}\r\n\r\nexport default InstancedMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\nimport ZSpriteMesh from './ZSpriteMesh';\r\nimport ZClippedMesh from './ZClippedMesh';\r\nimport TextMesh from './TextMesh';\r\nimport SimpleMesh from './SimpleMesh';\r\nimport ThickLineMesh from './ThickLineMesh';\r\nimport InstancedMesh from './InstancedMesh';\r\n\r\nexport default {\r\n ZClipped: ZClippedMesh,\r\n ZSprite: ZSpriteMesh,\r\n Text: TextMesh,\r\n Line: UberObject(THREE.Line),\r\n LineSegments: UberObject(THREE.LineSegments),\r\n Mesh: SimpleMesh,\r\n ThickLineMesh,\r\n Instanced: InstancedMesh,\r\n};\r\n","import geometries from '../geometries/geometries';\r\nimport meshes from './meshes';\r\nimport ThickLinesGeometry from '../geometries/ThickLinesGeometry';\r\n\r\nfunction setMatParams(params, uniforms) {\r\n return function (material) {\r\n material.setValues(params);\r\n material.setUberOptions(uniforms);\r\n };\r\n}\r\n\r\nfunction _createInstancedCylinders(useZSprites, openEnded) {\r\n function Geometry(a, b) {\r\n return new geometries.Instanced2CCylindersGeometry(a, b, useZSprites, openEnded);\r\n }\r\n return {\r\n Geometry,\r\n Object: useZSprites ? meshes.ZSprite : meshes.Instanced,\r\n initMaterial: setMatParams({\r\n instancedMatrix: true,\r\n attrColor: true,\r\n attrColor2: true,\r\n attrAlphaColor: true,\r\n cylinderSprite: useZSprites,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createLineSegmentsGeoTriplet(geo, renderParams) {\r\n const thickLines = geo.prototype instanceof ThickLinesGeometry;\r\n const lineWidth = renderParams.lineWidth || 0;\r\n return {\r\n Geometry: geo,\r\n Object: thickLines ? meshes.ThickLineMesh : meshes.LineSegments,\r\n initMaterial: setMatParams({\r\n lights: false,\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n thickLine: thickLines,\r\n }, {\r\n lineWidth,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createSimpleGeoTriplet(geoClass) {\r\n return {\r\n Geometry: geoClass,\r\n Object: meshes.Mesh,\r\n initMaterial: setMatParams({\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createIsoSurfaceGeoTriplet(geoClass, caps, settings, renderParams) {\r\n const surfaceOpts = {\r\n wireframe: !!renderParams.wireframe,\r\n fakeOpacity: settings.now.isoSurfaceFakeOpacity,\r\n zClip: renderParams.zClip,\r\n };\r\n return {\r\n Geometry: geoClass,\r\n Object: meshes.ZClipped,\r\n initMaterial: setMatParams({\r\n attrColor: true,\r\n attrAlphaColor: false,\r\n wireframe: surfaceOpts.wireframe,\r\n fakeOpacity: surfaceOpts.fakeOpacity,\r\n zClip: surfaceOpts.zClip,\r\n }),\r\n };\r\n}\r\n\r\nclass MeshCreator {\r\n static createSpheres(caps, settings) {\r\n const useZSprites = settings.now.zSprites;\r\n function Geometry(a, b) {\r\n return new geometries.InstancedSpheresGeometry(a, b, useZSprites);\r\n }\r\n return {\r\n Geometry,\r\n Object: useZSprites ? meshes.ZSprite : meshes.Instanced,\r\n initMaterial: setMatParams({\r\n instancedPos: true,\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n sphereSprite: useZSprites,\r\n }),\r\n };\r\n }\r\n\r\n static create2CClosedCylinders(_caps, _settings) {\r\n return _createInstancedCylinders(false, false);\r\n }\r\n\r\n static create2CCylinders(caps, settings) {\r\n return _createInstancedCylinders(settings.now.zSprites, true);\r\n }\r\n\r\n static create2CLines(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.TwoColorLinesGeometry, renderParams);\r\n }\r\n\r\n static createCrosses(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.CrossGeometry, renderParams);\r\n }\r\n\r\n static createExtrudedChains(_caps, _settings) {\r\n return _createSimpleGeoTriplet(geometries.ExtrudedObjectsGeometry);\r\n }\r\n\r\n static createChunkedLines(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.ChunkedLinesGeometry, renderParams);\r\n }\r\n\r\n static createQuickSurface(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.QuickSurfGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createContactSurface(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.ContactSurfaceGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createSASSES(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.SSIsosurfaceGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createLabels(_caps, _settings) {\r\n return {\r\n Geometry: geometries.LabelsGeometry,\r\n Object: meshes.Text,\r\n initMaterial() {\r\n },\r\n };\r\n }\r\n}\r\n\r\nexport default MeshCreator;\r\n","import * as THREE from 'three';\r\nimport gfxutils from '../gfxutils';\r\n\r\nclass TransformGroup extends THREE.Object3D {\r\n static _inverseMatrix = new THREE.Matrix4();\r\n\r\n static _ray = new THREE.Ray();\r\n\r\n constructor(geometry, geoParams, material, transforms) {\r\n super();\r\n this._geometry = geometry;\r\n this._geoParams = geoParams;\r\n const mat = material.createInstance();\r\n geoParams.initMaterial(mat);\r\n this._material = mat;\r\n this._transforms = transforms.length > 0 ? transforms : [new THREE.Matrix4()];\r\n const meshes = this._createMeshes(geometry);\r\n for (let i = 0, n = meshes.length; i < n; ++i) {\r\n this.add(meshes[i]);\r\n }\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const ray = TransformGroup._ray;\r\n const inverseMatrix = TransformGroup._inverseMatrix;\r\n const { children } = this;\r\n ray.copy(raycaster.ray);\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n\r\n if (!gfxutils.belongToSelectLayers(child)) {\r\n continue;\r\n }\r\n\r\n child.updateMatrixWorld();\r\n const mtx = child.matrixWorld;\r\n inverseMatrix.copy(mtx).invert();\r\n raycaster.ray.copy(ray).applyMatrix4(inverseMatrix);\r\n const childIntersects = [];\r\n this._geometry.raycast(raycaster, childIntersects);\r\n\r\n for (let j = 0, ciCount = childIntersects.length; j < ciCount; ++j) {\r\n const inters = childIntersects[j];\r\n if (inters.point) {\r\n inters.point.applyMatrix4(mtx);\r\n inters.distance = ray.origin.distanceTo(inters.point);\r\n }\r\n inters.object = child;\r\n intersects[intersects.length] = inters;\r\n }\r\n }\r\n raycaster.ray.copy(ray);\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const geos = this._geometry.getSubset(chunkIndices);\r\n const subset = [];\r\n let subIdx = 0;\r\n\r\n for (let i = 0, n = geos.length; i < n; ++i) {\r\n const meshes = this._createMeshes(geos[i]);\r\n for (let j = 0, meshCnt = meshes.length; j < meshCnt; ++j) {\r\n subset[subIdx++] = meshes[j];\r\n }\r\n }\r\n\r\n return subset;\r\n }\r\n\r\n _createMeshes(geometry) {\r\n const transforms = this._transforms;\r\n const Mesh = this._geoParams.Object;\r\n const material = this._material;\r\n const meshes = [];\r\n for (let i = 0, n = transforms.length; i < n; ++i) {\r\n const mesh = new Mesh(geometry, material);\r\n mesh.applyMatrix4(transforms[i]);\r\n meshes[i] = mesh;\r\n }\r\n\r\n return meshes;\r\n }\r\n}\r\n\r\nexport default TransformGroup;\r\n","import RCGroup from '../../RCGroup';\r\nimport TransformGroup from '../../meshes/TransformGroup';\r\n\r\nfunction wrapper(Name, args) {\r\n const params = [Name].concat(args);\r\n return Name.bind(...params);\r\n}\r\n\r\nclass ChemGroup extends RCGroup {\r\n constructor(geoParams, selection, colorer, mode, transforms, polyComplexity, material) {\r\n super();\r\n if (this.constructor === ChemGroup) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n this._selection = selection;\r\n this._mode = mode;\r\n this._colorer = colorer;\r\n this._chunksIdc = selection.chunks;\r\n this._polyComplexity = polyComplexity;\r\n this._geo = new (wrapper(geoParams.Geometry, this._makeGeoArgs()))();\r\n this._mesh = new TransformGroup(this._geo, geoParams, material, transforms);\r\n this.add(this._mesh);\r\n this._build();\r\n }\r\n\r\n _makeGeoArgs() {\r\n throw new Error('ChemGroup subclass must override _makeGeoArgs() method');\r\n }\r\n\r\n /**\r\n * Builds subset geometry by ATOMS index list\r\n *\r\n * @param {Number} mask - Representation mask\r\n * @param {Boolean} innerOnly - if true returns inner bonds only - without halves\r\n * @returns {Array} Subset geometry\r\n */\r\n getSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : false;\r\n const chunksList = this._calcChunksList(mask, innerOnly);\r\n if (chunksList.length === 0) {\r\n return [];\r\n }\r\n return this._mesh.getSubset(chunksList);\r\n }\r\n\r\n _changeSubsetOpacity(mask, value, innerOnly) {\r\n const chunksList = this._calcChunksList(mask, innerOnly);\r\n if (chunksList.length === 0) {\r\n return;\r\n }\r\n this._geo.setOpacity(chunksList, value);\r\n }\r\n\r\n enableSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : true;\r\n this._changeSubsetOpacity(mask, 1.0, innerOnly);\r\n }\r\n\r\n disableSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : true;\r\n this._changeSubsetOpacity(mask, 0.0, innerOnly);\r\n }\r\n}\r\n\r\nexport default ChemGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass AtomsGroup extends ChemGroup {\r\n raycast(raycaster, intersects) {\r\n const { atoms } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const atomsIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const atomIdx = atomsIdc[inters[i].chunkIdx];\r\n if (atomIdx < atoms.length) {\r\n inters[i].atom = atoms[atomIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const { atoms } = this._selection;\r\n const atomsIdc = this._chunksIdc;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n if ((atom.mask & mask) !== 0) {\r\n chunksList.push(i);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default AtomsGroup;\r\n","import AtomsGroup from './AtomsGroup';\r\n\r\nclass AtomsSphereGroup extends AtomsGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length, this._polyComplexity];\r\n }\r\n\r\n _build() {\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n geo.setItem(i, atom.position, mode.calcAtomRadius(atom));\r\n geo.setColor(i, colorer.getAtomColor(atom, parent));\r\n }\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n geo.setItem(i, frameData.getAtomPos(atomsIdc[i]), mode.calcAtomRadius(atom));\r\n if (updateColor) {\r\n geo.setColor(i, frameData.getAtomColor(colorer, atom));\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default AtomsSphereGroup;\r\n","import AtomsSphereGroup from './AtomsSphereGroup';\r\n\r\nclass AtomsSurfaceGroup extends AtomsSphereGroup {\r\n _makeGeoArgs() {\r\n const selectedAtoms = [];\r\n const { atoms, chunks } = this._selection;\r\n const n = chunks.length;\r\n for (let i = 0; i < n; ++i) {\r\n selectedAtoms[i] = atoms[chunks[i]];\r\n }\r\n const opts = this._mode.getSurfaceOpts();\r\n opts.atoms = selectedAtoms;\r\n return [n, opts];\r\n }\r\n}\r\nexport default AtomsSurfaceGroup;\r\n","/* This is a stub class keep it until SAS/SES is refactored */\r\n\r\nimport AtomsSphereGroup from './AtomsSphereGroup';\r\n\r\nclass AtomsSASSESGroupStub extends AtomsSphereGroup {\r\n _makeGeoArgs() {\r\n const selectedAtoms = [];\r\n const { atoms, chunks } = this._selection;\r\n const n = chunks.length;\r\n for (let i = 0; i < n; ++i) {\r\n selectedAtoms[i] = atoms[chunks[i]];\r\n }\r\n const opts = this._mode.getSurfaceOpts();\r\n opts.atoms = selectedAtoms;\r\n opts.selection = this._selection;\r\n opts.colorMode = this._colorer;\r\n return [n, opts];\r\n }\r\n}\r\n\r\nexport default AtomsSASSESGroupStub;\r\n","import AtomsGroup from './AtomsGroup';\r\nimport utils from '../../../utils';\r\n\r\nfunction adjustColor(color) {\r\n let r = (color >> 16) & 255;\r\n let g = (color >> 8) & 255;\r\n let b = color & 255;\r\n\r\n if (0.2126 * r + 0.7152 * g + 0.0722 * b > 127) {\r\n r = r * 3 / 10;\r\n g = g * 3 / 10;\r\n b = b * 3 / 10;\r\n } else {\r\n r = 255 - ((255 - r) * 3 / 10);\r\n g = 255 - ((255 - g) * 3 / 10);\r\n b = 255 - ((255 - b) * 3 / 10);\r\n }\r\n\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\nfunction inverseColor(color) {\r\n const r = (color >> 16) & 255;\r\n const g = (color >> 8) & 255;\r\n const b = color & 255;\r\n\r\n return ((255 - r) << 16) | ((255 - g) << 8) | (255 - b);\r\n}\r\n\r\nfunction getAtomText(atom) {\r\n if (atom.name.getNode() !== null) {\r\n return atom.name.getNode();\r\n }\r\n\r\n return atom.getVisualName();\r\n}\r\n\r\nconst colorMappings = {\r\n none(c) {\r\n return c;\r\n },\r\n adjust: adjustColor,\r\n inverse: inverseColor,\r\n};\r\n\r\nfunction propagateColor(color, rule) {\r\n let result;\r\n if (colorMappings.hasOwnProperty(rule)) {\r\n result = utils.hexColor(colorMappings[rule](color));\r\n } else {\r\n const val = parseInt(rule, 16);\r\n if (!Number.isNaN(val) && rule.toLowerCase().startsWith('0x')) {\r\n result = utils.hexColor(val);\r\n } else {\r\n result = '#000000';\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nconst templateMappings = {\r\n serial(a) {\r\n return a.serial;\r\n },\r\n name(a) {\r\n return a.getVisualName();\r\n },\r\n elem(a) {\r\n return a.element.name;\r\n },\r\n residue(a) {\r\n return a.residue.getType().getName();\r\n },\r\n sequence(a) {\r\n return a.residue.getSequence();\r\n },\r\n chain(a) {\r\n return a.residue.getChain().getName();\r\n },\r\n hetatm(a) {\r\n return a.isHet();\r\n },\r\n water(a) {\r\n return a.residue.getType().getName() === 'HOH' || a.residue.getType().getName() === 'WAT';\r\n },\r\n};\r\n\r\nconst parseTemplate = function (atom, str) {\r\n return str.replace(/\\{\\{(\\s*\\w+\\s*)\\}\\}/g, (m) => {\r\n let key = m.replace(/\\s+/g, '');\r\n key = key.substring(2, key.length - 2).toLowerCase();\r\n\r\n if (templateMappings.hasOwnProperty(key)) {\r\n return templateMappings[key](atom);\r\n }\r\n return 'null';\r\n });\r\n};\r\n\r\nclass AtomsTextGroup extends AtomsGroup {\r\n _makeGeoArgs() {\r\n const opts = this._mode.getLabelOpts();\r\n return [this._selection.chunks.length, opts];\r\n }\r\n\r\n _build() {\r\n const opts = this._mode.getLabelOpts();\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms, parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n const text = opts.template ? parseTemplate(atom, opts.template) : getAtomText(atom);\r\n if (!text) {\r\n continue;\r\n }\r\n const color = colorer.getAtomColor(atom, parent);\r\n const fgColor = parseInt(propagateColor(color, opts.fg).substring(1), 16);\r\n const bgColor = opts.showBg ? parseInt(propagateColor(color, opts.bg).substring(1), 16) : 'transparent';\r\n geo.setItem(i, atom.position, text);\r\n geo.setColor(i, fgColor, bgColor);\r\n }\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const opts = this._mode.getLabelOpts();\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n const text = opts.template ? parseTemplate(atom, opts.template) : getAtomText(atom);\r\n if (!text) {\r\n continue;\r\n }\r\n const color = frameData.getAtomColor(colorer, atom);\r\n const fgColor = parseInt(propagateColor(color, opts.fg).substring(1), 16);\r\n const bgColor = opts.showBg ? parseInt(propagateColor(color, opts.bg).substring(1), 16) : 'transparent';\r\n geo.setItem(i, frameData.getAtomPos(atomsIdc[i]), text);\r\n if (updateColor) {\r\n geo.setColor(i, fgColor, bgColor);\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default AtomsTextGroup;\r\n","import * as THREE from 'three';\r\nimport AtomsGroup from './AtomsGroup';\r\n\r\nfunction _slerp(omega, v1, v2, t) {\r\n const oSin = Math.sin(omega);\r\n return v1.clone().multiplyScalar(Math.sin((1 - t) * omega) / oSin).addScaledVector(v2, Math.sin(t * omega) / oSin);\r\n}\r\n\r\nclass AromaticGroup extends AtomsGroup {\r\n _buildInner(radOffset, addChunk) {\r\n const chunksToIdx = this._selection.chunks;\r\n\r\n const prevVector = new THREE.Vector3();\r\n const currVector = new THREE.Vector3();\r\n const segmentsHeight = this._segmentsHeight;\r\n const leprStep = 1.0 / segmentsHeight;\r\n const colorer = this._colorer;\r\n\r\n const { cycles, parent } = this._selection;\r\n let chunkIdx = 0;\r\n let currAtomIdx = chunksToIdx[chunkIdx];\r\n\r\n for (let cIdx = 0, cCount = cycles.length; cIdx < cCount; ++cIdx) {\r\n const cycle = cycles[cIdx];\r\n const cycAtoms = cycle.atoms;\r\n const chunkPoints = [];\r\n const tmpDir = [];\r\n const { center } = cycle;\r\n const cycleRad = cycle.radius - radOffset;\r\n const n = cycAtoms.length;\r\n let i = 0;\r\n const prevPos = cycAtoms[n - 1].position;\r\n let currPos = cycAtoms[i].position;\r\n prevVector.subVectors(prevPos, center);\r\n currVector.subVectors(currPos, center);\r\n const upDir = currVector.clone().cross(prevVector).normalize();\r\n\r\n for (; i < n; ++i) {\r\n const omega = prevVector.angleTo(currVector);\r\n tmpDir[i] = _slerp(omega, prevVector, currVector, 0.5).normalize();\r\n currPos = cycAtoms[(i + 1) % n].position;\r\n prevVector.copy(currVector);\r\n currVector.subVectors(currPos, center);\r\n }\r\n\r\n for (i = 0; i < n; ++i) {\r\n if (cycAtoms[i].index !== currAtomIdx) {\r\n continue;\r\n }\r\n const start = tmpDir[i];\r\n const end = tmpDir[(i + 1) % n];\r\n const color = colorer.getAtomColor(cycAtoms[i], parent);\r\n const currAngle = start.angleTo(end);\r\n\r\n for (let j = 0; j <= segmentsHeight; ++j) {\r\n chunkPoints[j] = _slerp(currAngle, start, end, j * leprStep).multiplyScalar(cycleRad).add(center);\r\n }\r\n\r\n addChunk(chunkIdx++, color, chunkPoints, center, upDir);\r\n currAtomIdx = chunksToIdx[chunkIdx];\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default AromaticGroup;\r\n","import * as THREE from 'three';\r\nimport gfxutils from '../../gfxutils';\r\nimport AromaticGroup from './AromaticGroup';\r\n\r\nfunction _createShape(rad, parts) {\r\n const pts = [];\r\n for (let i = 0; i < parts; ++i) {\r\n const a = -2 * i / parts * Math.PI;\r\n pts.push(new THREE.Vector3(Math.cos(a) * rad, Math.sin(a) * rad, 0));\r\n }\r\n return pts;\r\n}\r\nconst { calcChunkMatrix } = gfxutils;\r\n\r\nclass AromaticTorusGroup extends AromaticGroup {\r\n _build() {\r\n const segmentsHeight = this._segmentsHeight;\r\n const torusRad = this._mode.getAromRadius();\r\n const radiusV = new THREE.Vector2(torusRad, torusRad);\r\n const radOffset = this._mode.calcStickRadius() + 2 * torusRad;\r\n const lookAtVector = new THREE.Vector3();\r\n const mtc = [];\r\n const geo = this._geo;\r\n this._buildInner(radOffset, (chunkIdx, color, points, center, upDir) => {\r\n for (let j = 0; j <= segmentsHeight; ++j) {\r\n const currPoint = points[j];\r\n const currDir = currPoint.clone().sub(center).cross(upDir);\r\n lookAtVector.addVectors(currPoint, currDir);\r\n mtc[j] = calcChunkMatrix(currPoint, lookAtVector, upDir, radiusV);\r\n }\r\n geo.setItem(chunkIdx, mtc);\r\n geo.setColor(chunkIdx, color);\r\n });\r\n geo.finalize();\r\n }\r\n\r\n _makeGeoArgs() {\r\n this._segmentsHeight = this._polyComplexity;\r\n return [_createShape(1.0, this._polyComplexity), this._segmentsHeight + 1, this._selection.chunks.length];\r\n }\r\n}\r\n\r\nexport default AromaticTorusGroup;\r\n","import AromaticGroup from './AromaticGroup';\r\n\r\nclass AromaticLinesGroup extends AromaticGroup {\r\n _build() {\r\n const geo = this._geo;\r\n const radOffset = this._mode.getAromaticOffset();\r\n this._buildInner(radOffset, (chunkIdx, color, points) => {\r\n let prevPt = points[0];// do not replace with start\r\n for (let j = 1; j <= this._segmentsHeight; ++j) {\r\n const currPoint = points[j];\r\n geo.setSegment(chunkIdx, j - 1, prevPt, currPoint);\r\n prevPt = currPoint;\r\n }\r\n geo.setColor(chunkIdx, color);\r\n });\r\n geo.finalize();\r\n }\r\n\r\n _makeGeoArgs() {\r\n this._segmentsHeight = this._mode.getAromaticArcChunks();\r\n return [this._selection.chunks.length, this._segmentsHeight, true];\r\n }\r\n}\r\n\r\nexport default AromaticLinesGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass ResiduesGroup extends ChemGroup {\r\n raycast(raycaster, intersects) {\r\n const { residues } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const resIdx = chunksIdc[inters[i].chunkIdx];\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const { residues } = this._selection;\r\n const resIdc = this._chunksIdc;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n if ((res._mask & mask) !== 0) {\r\n chunksList.push(i);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default ResiduesGroup;\r\n","import ResiduesGroup from './ResiduesGroup';\r\n\r\nclass NucleicItemGroup extends ResiduesGroup {\r\n raycast(raycaster, intersects) {\r\n const { residues } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const resIdx = chunksIdc[Math.floor(inters[i].chunkIdx / 2)];\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const stickRad = this._mode.calcStickRadius();\r\n let chunkIdx = 0;\r\n\r\n const resIdc = this._selection.chunks;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n const color = colorer.getResidueColor(res, parent);\r\n this._processItem(chunkIdx++, res._cylinders[0], res._cylinders[1], stickRad, color);\r\n }\r\n geo.finalize();\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n let chunkIdx = 0;\r\n const { residues } = this._selection;\r\n const resIdc = this._chunksIdc;\r\n\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n if ((res._mask & mask) !== 0) {\r\n chunksList[chunkIdx++] = 2 * i;\r\n chunksList[chunkIdx++] = 2 * i + 1;\r\n }\r\n }\r\n return chunksList;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const residues = frameData.getResidues();\r\n const { parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const stickRad = this._mode.calcStickRadius();\r\n let chunkIdx = 0;\r\n\r\n const resIdc = this._selection.chunks;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n const color = colorer.getResidueColor(res, parent);\r\n this._processItem(chunkIdx++, res._cylinders[0], res._cylinders[1], stickRad, color);\r\n }\r\n geo.finishUpdate();\r\n }\r\n}\r\n\r\nexport default NucleicItemGroup;\r\n","import NucleicItemGroup from './NucleicItemGroup';\r\n\r\nclass NucleicCylindersGroup extends NucleicItemGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length, this._polyComplexity];\r\n }\r\n\r\n _processItem(chunkIdx, cyl1, cyl2, stickRad, color) {\r\n const geo = this._geo;\r\n geo.setItem(chunkIdx, cyl1, cyl2, stickRad);\r\n geo.setColor(chunkIdx, color, color);\r\n }\r\n}\r\n\r\nexport default NucleicCylindersGroup;\r\n","import NucleicItemGroup from './NucleicItemGroup';\r\n\r\nclass NucleicSpheresGroup extends NucleicItemGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length * 2, this._polyComplexity];\r\n }\r\n\r\n _processItem(chunkIdx, cyl1, cyl2, stickRad, color) {\r\n const geo = this._geo;\r\n let idx = chunkIdx * 2;\r\n geo.setItem(idx, cyl1, stickRad);\r\n geo.setColor(idx, color);\r\n idx++;\r\n geo.setItem(idx, cyl2, stickRad);\r\n geo.setColor(idx, color);\r\n }\r\n}\r\n\r\nexport default NucleicSpheresGroup;\r\n","import * as THREE from 'three';\r\nimport { Smooth } from '../../../../vendor/js/Smooth';\r\nimport gfxutils from '../../gfxutils';\r\nimport chem from '../../../chem';\r\n\r\nconst { ResidueType } = chem;\r\n\r\nconst calcMatrix = gfxutils.calcChunkMatrix;\r\n\r\nfunction _buildStructureInterpolator(points, tension) {\r\n const path = Smooth(points, {\r\n method: Smooth.METHOD_CUBIC,\r\n clip: Smooth.CLIP_CLAMP,\r\n cubicTension: tension,\r\n scaleTo: 1,\r\n });\r\n\r\n return function (t, argTrans) {\r\n let transformT = argTrans;\r\n if (transformT === null) {\r\n // map our range to the [second .. last but one]\r\n transformT = function (tt) {\r\n return (tt * ((points.length - 1) - 2) + 1) / (points.length - 1);\r\n };\r\n }\r\n const newt = transformT(t);\r\n const ans = path(newt);\r\n return new THREE.Vector3(ans[0], ans[1], ans[2]);\r\n };\r\n}\r\n\r\nfunction _addPoints(centerPoints, topPoints, idx, residue) {\r\n if (!residue._isValid) {\r\n centerPoints[idx] = centerPoints[idx - 1];\r\n topPoints[idx] = topPoints[idx - 1];\r\n return;\r\n }\r\n const cp = residue._controlPoint;\r\n centerPoints[idx] = [cp.x, cp.y, cp.z];\r\n const tp = cp.clone().add(residue._wingVector);\r\n topPoints[idx] = [tp.x, tp.y, tp.z];\r\n}\r\n\r\nfunction _addPointsForLoneResidue(centerPoints, topPoints, idx, residue) {\r\n const nucleic = (residue._type.flags & ResidueType.Flags.NUCLEIC) !== 0;\r\n const nameFrom = nucleic ? 'C5\\'' : 'N';\r\n const nameTo = nucleic ? 'C3\\'' : 'C';\r\n\r\n let posFrom;\r\n let posTo;\r\n residue.forEachAtom((atom) => {\r\n const name = atom.getVisualName();\r\n if (!posFrom && name === nameFrom) {\r\n posFrom = atom.position;\r\n } else if (!posTo && name === nameTo) {\r\n posTo = atom.position;\r\n }\r\n });\r\n\r\n // provide a fallback for unknown residues\r\n if (!(posFrom && posTo)) {\r\n posFrom = residue._firstAtom.position;\r\n posTo = residue._lastAtom.position;\r\n }\r\n\r\n if (posFrom && posTo) {\r\n const shift = posTo.clone().sub(posFrom);\r\n\r\n const wing = residue._wingVector;\r\n const cp = residue._controlPoint;\r\n const tp = cp.clone().add(wing);\r\n\r\n const cpPrev = cp.clone().sub(shift);\r\n const tpPrev = cpPrev.clone().add(wing);\r\n centerPoints[idx] = [cpPrev.x, cpPrev.y, cpPrev.z];\r\n topPoints[idx] = [tpPrev.x, tpPrev.y, tpPrev.z];\r\n ++idx;\r\n centerPoints[idx] = [cpPrev.x, cpPrev.y, cpPrev.z];\r\n topPoints[idx] = [tpPrev.x, tpPrev.y, tpPrev.z];\r\n ++idx;\r\n\r\n centerPoints[idx] = [cp.x, cp.y, cp.z];\r\n topPoints[idx] = [tp.x, tp.y, tp.z];\r\n ++idx;\r\n\r\n const cpNext = cp.clone().add(shift);\r\n const tpNext = cpNext.clone().add(wing);\r\n centerPoints[idx] = [cpNext.x, cpNext.y, cpNext.z];\r\n topPoints[idx] = [tpNext.x, tpNext.y, tpNext.z];\r\n ++idx;\r\n centerPoints[idx] = [cpNext.x, cpNext.y, cpNext.z];\r\n topPoints[idx] = [tpNext.x, tpNext.y, tpNext.z];\r\n }\r\n}\r\n\r\nfunction _calcPoints(residues, firstIdx, lastIdx, boundaries) {\r\n const left = boundaries.start;\r\n const right = boundaries.end;\r\n function _prevIdx(idx) {\r\n return idx > left && residues[idx - 1]._isValid ? idx - 1 : idx;\r\n }\r\n function _nextIdx(idx) {\r\n return idx < right && residues[idx + 1]._isValid ? idx + 1 : idx;\r\n }\r\n\r\n const topPoints = [];\r\n const centerPoints = [];\r\n let arrIdx = 0;\r\n function _extrapolate2(currIdx, otherIdx) {\r\n const cp = residues[currIdx]._controlPoint.clone().lerp(residues[otherIdx]._controlPoint, -0.25);\r\n const tp = cp.clone().add(residues[currIdx]._wingVector);\r\n centerPoints[arrIdx] = [cp.x, cp.y, cp.z];\r\n topPoints[arrIdx++] = [tp.x, tp.y, tp.z];\r\n centerPoints[arrIdx] = [cp.x, cp.y, cp.z];\r\n topPoints[arrIdx++] = [tp.x, tp.y, tp.z];\r\n }\r\n\r\n // a single disconnected residue\r\n const prevIdx = _prevIdx(firstIdx);\r\n const nextIdx = _nextIdx(lastIdx);\r\n if (prevIdx === nextIdx) {\r\n _addPointsForLoneResidue(centerPoints, topPoints, arrIdx, residues[firstIdx]);\r\n return { centerPoints, topPoints };\r\n }\r\n\r\n // Two points (prev-prev and next-next) are added to support edge conditions for cubic splines, they are ignored\r\n // Another two (prev and next) were added to support the outside of the sub chain\r\n\r\n // prev and prev-prev\r\n if (firstIdx === prevIdx) {\r\n // do the extrapolation\r\n _extrapolate2(firstIdx, _nextIdx(firstIdx));\r\n } else {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[_prevIdx(prevIdx)]);\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[prevIdx]);\r\n }\r\n\r\n // main loop\r\n for (let idx = firstIdx; idx <= lastIdx; ++idx) {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[idx]);\r\n }\r\n\r\n // next and next-next\r\n if (nextIdx === _nextIdx(nextIdx)) {\r\n // do the extrapolation\r\n _extrapolate2(lastIdx, _prevIdx(lastIdx));\r\n } else {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[nextIdx]);\r\n _addPoints(centerPoints, topPoints, arrIdx, residues[_nextIdx(nextIdx)]);\r\n }\r\n return { centerPoints, topPoints };\r\n}\r\n\r\nclass CartoonHelper {\r\n constructor(residues, startIdx, endIdx, segmentsCount, tension, boundaries) {\r\n const pointsArrays = _calcPoints(residues, startIdx, endIdx, boundaries);\r\n this._topInterp = _buildStructureInterpolator(pointsArrays.topPoints, tension);\r\n this._centerInterp = _buildStructureInterpolator(pointsArrays.centerPoints, tension);\r\n\r\n this._shift = 0.5 / (endIdx - startIdx + 2);\r\n this._valueStep = (1.0 - 2 * this._shift) / (2 * (endIdx - startIdx + 1) * (segmentsCount - 1));\r\n this._segmentsCount = segmentsCount;\r\n }\r\n\r\n prepareMatrices(idx, firstRad, secondRad) {\r\n const mtcCount = this._segmentsCount;\r\n const outMtc = new Array(mtcCount);\r\n const currRad = new THREE.Vector2(0, 0);\r\n\r\n const topInterp = this._topInterp;\r\n const cenInterp = this._centerInterp;\r\n\r\n let currentValue = this._shift + this._valueStep * (mtcCount - 1) * idx;\r\n\r\n for (let mtxIdx = 0; mtxIdx < mtcCount; ++mtxIdx) {\r\n const lerpVal = Math.min(1.0, mtxIdx / (mtcCount - 1));\r\n currRad.lerpVectors(firstRad, secondRad, lerpVal);\r\n\r\n const currTop = topInterp(currentValue, null);\r\n const currCenter = cenInterp(currentValue, null);\r\n currentValue += this._valueStep;\r\n const nextCenter = cenInterp(currentValue, null);\r\n\r\n outMtc[mtxIdx] = calcMatrix(currCenter.clone(), nextCenter.clone(), currTop.clone().sub(currCenter), currRad);\r\n }\r\n\r\n return outMtc;\r\n }\r\n}\r\n\r\nexport default CartoonHelper;\r\n","import * as THREE from 'three';\r\nimport ResiduesGroup from './ResiduesGroup';\r\nimport CartoonHelper from './CartoonHelper';\r\n\r\nfunction _createShape(rad, parts) {\r\n const pts = [];\r\n\r\n for (let i = 0; i < parts; ++i) {\r\n // starts from pi/2 because it's important that points are lied on the angles of arrows (visual issues if not)\r\n const a = Math.PI / 2.0 - 2 * Math.PI * i / parts;\r\n\r\n pts.push(new THREE.Vector3(Math.cos(a) * rad, Math.sin(a) * rad, 0));\r\n }\r\n return pts;\r\n}\r\n\r\nfunction _loopThrough(subDiv, residues, segmentsHeight, tension, mode, callback) {\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n const { boundaries } = subDiv[subDivI];\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const idc = [subs[i].start, subs[i].end];\r\n const matrixHelper = new CartoonHelper(residues, idc[0], idc[1], segmentsHeight, tension, boundaries);\r\n let prevLast = null;\r\n const startIdx = subs[i].start * 2;\r\n const endIdx = subs[i].end * 2 + 1;\r\n let prevSecondRad = mode.getResidueRadius(residues[0], 0);\r\n for (let idx = startIdx; idx <= endIdx; ++idx) {\r\n const resIdx = (idx / 2 | 0);\r\n const currRes = residues[resIdx];\r\n const firstRad = mode.getResidueRadius(currRes, idx % 2);\r\n const secondRad = mode.getResidueRadius(currRes, 1 + (idx % 2));\r\n\r\n const mtc = matrixHelper.prepareMatrices(idx - idc[0] * 2, firstRad, secondRad);\r\n mtc.unshift(prevLast === null ? mtc[0] : prevLast);\r\n\r\n // Slope - radius is changed along this residue part\r\n const hasSlope = (firstRad.x !== secondRad.x) || (firstRad.y !== secondRad.y);\r\n // Cut - end radius of previous part not equal to start radius of this part. First section of this part lies in the orthogonal plane\r\n const hasCut = (firstRad.x !== prevSecondRad.x) || (firstRad.y !== prevSecondRad.y);\r\n\r\n callback(currRes, mtc, hasSlope, hasCut);\r\n\r\n prevLast = mtc[segmentsHeight];\r\n prevSecondRad = secondRad;\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass ResiduesSubseqGroup extends ResiduesGroup {\r\n _makeGeoArgs() {\r\n const cmpMultiplier = this._mode.getHeightSegmentsRatio();\r\n this._segmentsHeight = this._polyComplexity * cmpMultiplier | 0;\r\n return [_createShape(1.0, this._polyComplexity), this._segmentsHeight + 1, this._selection.chunks.length * 2];\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const tension = mode.getTension();\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const chunkIdc = [];\r\n _loopThrough(this._selection.subdivs, residues, this._segmentsHeight, tension, mode, (currRes, mtc, hasSlope = false, hasCut = false) => {\r\n const color = colorer.getResidueColor(currRes, parent);\r\n chunkIdc[chunkIdx] = currRes._index;\r\n geo.setItem(chunkIdx, mtc, hasSlope, hasCut);\r\n geo.setColor(chunkIdx++, color);\r\n });\r\n this._chunksIdc = chunkIdc;\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const { parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const tension = mode.getTension();\r\n const geo = this._geo;\r\n const frameRes = frameData.getResidues();\r\n let chunkIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n _loopThrough(this._selection.subdivs, frameRes, this._segmentsHeight, tension, mode, (currRes, mtc) => {\r\n geo.setItem(chunkIdx, mtc);\r\n if (updateColor) {\r\n geo.setColor(chunkIdx, colorer.getResidueColor(currRes, parent));\r\n }\r\n chunkIdx++;\r\n });\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default ResiduesSubseqGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass ResiduesTraceGroup extends ChemGroup {\r\n _makeGeoArgs() {\r\n const subDiv = this._selection.subdivs;\r\n let chunksCount = 0;\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n chunksCount += subs[i].end - subs[i].start;\r\n }\r\n }\r\n return [chunksCount, this._polyComplexity];\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const chunkIdc = [];\r\n const subDiv = this._selection.subdivs;\r\n const stickRad = mode.calcStickRadius();\r\n\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const startIdx = subs[i].start;\r\n const endIdx = subs[i].end;\r\n let prevRes = residues[startIdx];\r\n for (let idx = startIdx + 1; idx <= endIdx; ++idx) {\r\n const currRes = residues[idx];\r\n chunkIdc[chunkIdx] = { first: prevRes._index, second: currRes._index };\r\n geo.setItem(chunkIdx, prevRes._controlPoint, currRes._controlPoint, stickRad);\r\n geo.setColor(chunkIdx, colorer.getResidueColor(prevRes, parent), colorer.getResidueColor(currRes, parent));\r\n chunkIdx++;\r\n prevRes = currRes;\r\n }\r\n }\r\n }\r\n\r\n this._chunksIdc = chunkIdc;\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n\r\n const residues = frameData.getResidues();\r\n const { parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const subDiv = this._selection.subdivs;\r\n const stickRad = mode.calcStickRadius();\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const startIdx = subs[i].start;\r\n const endIdx = subs[i].end;\r\n let prevRes = residues[startIdx];\r\n for (let idx = startIdx + 1; idx <= endIdx; ++idx) {\r\n const currRes = residues[idx];\r\n geo.setItem(chunkIdx, prevRes._controlPoint, currRes._controlPoint, stickRad);\r\n if (updateColor) {\r\n geo.setColor(chunkIdx, colorer.getResidueColor(prevRes, parent), colorer.getResidueColor(currRes, parent));\r\n }\r\n chunkIdx++;\r\n prevRes = currRes;\r\n }\r\n }\r\n }\r\n\r\n geo.finalize();\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const inters = [];\r\n const { residues } = this._selection;\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksToIdx = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const { chunkIdx } = inters[i];\r\n const chunk = chunksToIdx[Math.floor(chunkIdx / 2)];\r\n const resIdx = chunkIdx % 2 === 0 ? chunk.first : chunk.second;\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const chunksToIdx = this._chunksIdc;\r\n const { residues } = this._selection;\r\n for (let i = 0, n = chunksToIdx.length; i < n; ++i) {\r\n const chunk = chunksToIdx[i];\r\n if (residues[chunk.first]._mask & mask) {\r\n chunksList.push(i * 2);\r\n }\r\n if (residues[chunk.second]._mask & mask) {\r\n chunksList.push(i * 2 + 1);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default ResiduesTraceGroup;\r\n","import ChemGroup from './ChemGroup';\r\nimport Bond from '../../../chem/Bond';\r\n\r\nfunction getCylinderCount(bondOrder) {\r\n return bondOrder < 2 ? 1 : bondOrder;\r\n}\r\n\r\nclass BondsGroup extends ChemGroup {\r\n _makeGeoArgs() {\r\n const drawMultiple = this._mode.drawMultiorderBonds();\r\n const showAromatic = this._mode.showAromaticLoops();\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n let bondsCount = 0;\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n bondsCount += this.getBondOrder(bonds[bondsIdc[i]], drawMultiple, showAromatic);\r\n }\r\n return [bondsCount, this._polyComplexity];\r\n }\r\n\r\n getBondOrder(bond, drawMultiple, showAromatic) {\r\n let bondOrder = 1;\r\n if (drawMultiple && (!showAromatic || bond._type !== Bond.BondType.AROMATIC)) {\r\n bondOrder = getCylinderCount(bond._order);\r\n }\r\n return bondOrder;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const { bonds } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const bondsIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const { chunkIdx } = inters[i];\r\n const bondIdx = bondsIdc[Math.floor(chunkIdx / 2)];\r\n if (bondIdx < bonds.length) {\r\n const bond = bonds[bondIdx];\r\n inters[i].atom = chunkIdx % 2 === 0 ? bond._left : bond._right;\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask, innerOnly) {\r\n const chunksList = [];\r\n const { bonds } = this._selection;\r\n const chunksToIdx = this._chunksIdc;\r\n for (let i = 0, n = chunksToIdx.length; i < n; ++i) {\r\n const bond = bonds[chunksToIdx[i]];\r\n if ((bond._left.mask & mask) && (!innerOnly || (bond._right.mask & mask))) {\r\n chunksList.push(2 * i);\r\n }\r\n if ((bond._right.mask & mask) && (!innerOnly || (bond._left.mask & mask))) {\r\n chunksList.push(2 * i + 1);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default BondsGroup;\r\n","import * as THREE from 'three';\r\nimport BondsGroup from './BondsGroup';\r\n\r\nclass BondsCylinderGroup extends BondsGroup {\r\n _build() {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const stickRad = mode.calcStickRadius();\r\n const emptyOffset = mode.calcSpaceFraction();\r\n let normDir;\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const chunksToIdx = [];\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = atom1.position;\r\n const a2Pos = atom2.position;\r\n normDir = bond.calcNormalDir();\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n const minRad = Math.min(mode.calcAtomRadius(atom1), mode.calcAtomRadius(atom2));\r\n const dist = 2 * minRad / order;\r\n const currStickRad = drawMultiple ? Math.min(stickRad, dist * 0.5 * (1.0 - emptyOffset)) : stickRad;\r\n\r\n for (let j = 0; j < order; ++j) {\r\n const scale = dist * (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n chunksToIdx[currBondIdx] = bond._index;\r\n leftPos.copy(a1Pos);\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.copy(a2Pos);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos, currStickRad);\r\n geo.setColor(currBondIdx++, colorer.getAtomColor(atom1, parent), colorer.getAtomColor(atom2, parent));\r\n }\r\n }\r\n\r\n geo.finalize();\r\n this._chunksIdc = chunksToIdx;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const stickRad = mode.calcStickRadius();\r\n const emptyOffset = mode.calcSpaceFraction();\r\n let normDir;\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = frameData.getAtomPos(atom1.index).clone();\r\n const a2Pos = frameData.getAtomPos(atom2.index);\r\n normDir = bond.calcNormalDir();\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n const minRad = Math.min(mode.calcAtomRadius(atom1), mode.calcAtomRadius(atom2));\r\n const dist = 2 * minRad / order;\r\n const currStickRad = drawMultiple ? Math.min(stickRad, dist * 0.5 * (1.0 - emptyOffset)) : stickRad;\r\n\r\n for (let j = 0; j < order; ++j) {\r\n const scale = dist * (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n leftPos.copy(a1Pos);\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.copy(a2Pos);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos, currStickRad);\r\n if (updateColor) {\r\n geo.setColor(currBondIdx, frameData.getAtomColor(colorer, atom1), frameData.getAtomColor(colorer, atom2));\r\n }\r\n currBondIdx++;\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default BondsCylinderGroup;\r\n","import * as THREE from 'three';\r\nimport BondsGroup from './BondsGroup';\r\n\r\nconst STEP_SIZE = 0.15;\r\n\r\nclass BondsLinesGroup extends BondsGroup {\r\n _build() {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const bondDir = new THREE.Vector3();\r\n\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const chunksToIdx = [];\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = atom1.position;\r\n const a2Pos = atom2.position;\r\n const a1Hangs = atom1.bonds.length === 1;\r\n const a2Hangs = atom2.bonds.length === 1;\r\n bondDir.subVectors(a2Pos, a1Pos);\r\n const len = bondDir.length();\r\n const normDir = bond.calcNormalDir();\r\n\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n\r\n for (let j = 0; j < order; ++j) {\r\n leftPos.copy(a1Pos);\r\n rightPos.copy(a2Pos);\r\n let scale = (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n chunksToIdx[currBondIdx] = bond._index;\r\n if (order === 2 && (!a1Hangs && !a2Hangs)) {\r\n scale -= 0.5;\r\n scale *= -1;\r\n }\r\n\r\n if (!a1Hangs && !a2Hangs && order > 1 && scale !== 0) {\r\n leftPos.lerpVectors(a1Pos, a2Pos, STEP_SIZE / (len));\r\n rightPos.lerpVectors(a1Pos, a2Pos, 1.0 - STEP_SIZE / (len));\r\n }\r\n\r\n scale *= STEP_SIZE;\r\n\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos);\r\n geo.setColor(currBondIdx++, colorer.getAtomColor(atom1, parent), colorer.getAtomColor(atom2, parent));\r\n }\r\n }\r\n geo.finalize();\r\n this._chunksIdc = chunksToIdx;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const bondDir = new THREE.Vector3();\r\n\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = frameData.getAtomPos(atom1.index).clone();\r\n const a2Pos = frameData.getAtomPos(atom2.index);\r\n const a1Hangs = atom1.bonds.length === 1;\r\n const a2Hangs = atom2.bonds.length === 1;\r\n bondDir.subVectors(a2Pos, a1Pos);\r\n const len = bondDir.length();\r\n const normDir = bond.calcNormalDir();\r\n\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n\r\n for (let j = 0; j < order; ++j) {\r\n leftPos.copy(a1Pos);\r\n rightPos.copy(a2Pos);\r\n let scale = (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n if (order === 2 && (!a1Hangs && !a2Hangs)) {\r\n scale -= 0.5;\r\n scale *= -1;\r\n }\r\n\r\n if (!a1Hangs && !a2Hangs && order > 1 && scale !== 0) {\r\n leftPos.lerpVectors(a1Pos, a2Pos, STEP_SIZE / (len));\r\n rightPos.lerpVectors(a1Pos, a2Pos, 1.0 - STEP_SIZE / (len));\r\n }\r\n\r\n scale *= STEP_SIZE;\r\n\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos);\r\n if (updateColor) {\r\n geo.setColor(currBondIdx, frameData.getAtomColor(colorer, atom1), frameData.getAtomColor(colorer, atom2));\r\n }\r\n currBondIdx++;\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default BondsLinesGroup;\r\n","import AtomsSphereGroup from './AtomsSphereGroup';\r\nimport AtomsSurfaceGroup from './AtomsSurfaceGroup';\r\nimport AtomsSASSESGroupStub from './AtomsSASSESGroupStub';\r\nimport AtomsTextGroup from './AtomsTextGroup';\r\nimport AromaticTorusGroup from './AromaticTorusGroup';\r\nimport AromaticLinesGroup from './AromaticLinesGroup';\r\nimport NucleicCylindersGroup from './NucleicCylindersGroup';\r\nimport NucleicSpheresGroup from './NucleicSpheresGroup';\r\nimport ResiduesSubseqGroup from './ResiduesSubseqGroup';\r\nimport ResiduesTraceGroup from './ResiduesTraceGroup';\r\nimport BondsCylinderGroup from './BondsCylinderGroup';\r\nimport BondsLinesGroup from './BondsLinesGroup';\r\n\r\nexport default {\r\n AtomsSphereGroup,\r\n AtomsSurfaceGroup,\r\n AtomsSASSESGroupStub,\r\n AtomsTextGroup,\r\n AromaticTorusGroup,\r\n AromaticLinesGroup,\r\n NucleicCylindersGroup,\r\n NucleicSpheresGroup,\r\n ResiduesSubseqGroup,\r\n ResiduesTraceGroup,\r\n BondsCylinderGroup,\r\n BondsLinesGroup,\r\n};\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass AtomsProcessor extends RCGroup {\r\n constructor(AtomsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n this._mode = mode;\r\n const atoms = complex.getAtoms();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const atomsIdc = [];\r\n let atomCount = 0;\r\n component.forEachAtom((atom) => {\r\n if (!self._checkAtom(atom, mask)) {\r\n return;\r\n }\r\n atomsIdc[atomCount++] = atom.index;\r\n });\r\n if (atomCount === 0) {\r\n return;\r\n }\r\n const atomsGroup = new AtomsGroup(geoParams, {\r\n atoms,\r\n chunks: atomsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n atomsGroup._component = component;\r\n self.add(atomsGroup);\r\n });\r\n }\r\n\r\n _checkAtom(atom, mask) {\r\n return atom.mask & mask;\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default AtomsProcessor;\r\n","import AtomsProcessor from './AtomsProcessor';\r\n\r\nclass OrphanAtomsProcessor extends AtomsProcessor {\r\n _checkAtom(atom, mask) {\r\n if (!(atom.mask & mask)) {\r\n return false;\r\n }\r\n\r\n const { bonds } = atom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n if ((bonds[i]._left.mask & mask) && (bonds[i]._right.mask & mask)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\nexport default OrphanAtomsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass ResiduesProcessor extends RCGroup {\r\n constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const residues = complex.getResidues();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n let chunksCount = 0;\r\n const resIdc = [];\r\n component.forEachResidue((residue) => {\r\n if (self._checkResidue(residue, mask)) {\r\n resIdc[chunksCount++] = residue._index;\r\n }\r\n });\r\n\r\n if (chunksCount === 0) {\r\n return;\r\n }\r\n const residuesGroup = new ResidueGroup(geoParams, {\r\n residues,\r\n chunks: resIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n residuesGroup._component = component;\r\n self.add(residuesGroup);\r\n });\r\n }\r\n\r\n checkResidue(residue, mask) {\r\n return residue._mask & mask;\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default ResiduesProcessor;\r\n","import ResidueProcessor from './ResiduesProcessor';\r\n\r\nclass NucleicProcessor extends ResidueProcessor {\r\n _checkResidue(residue, mask) {\r\n return mask & residue._mask && residue._cylinders !== null;\r\n }\r\n}\r\nexport default NucleicProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass SubseqsProcessor extends RCGroup {\r\n constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const residues = complex.getResidues();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const subDivs = component.getMaskedSubdivSequences(mask);\r\n\r\n let chunksCount = 0;\r\n const resIdc = [];\r\n for (let subDivI = 0, subDivN = subDivs.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDivs[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n for (let j = subs[i].start, jEnd = subs[i].end; j <= jEnd; ++j) {\r\n resIdc[chunksCount++] = residues[j]._index;\r\n }\r\n }\r\n }\r\n\r\n if (chunksCount === 0) {\r\n return;\r\n }\r\n const residuesGroup = new ResidueGroup(geoParams, {\r\n residues,\r\n chunks: resIdc,\r\n subdivs: subDivs,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n residuesGroup._component = component;\r\n self.add(residuesGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default SubseqsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass BondsProcessor extends RCGroup {\r\n constructor(BondsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const bonds = complex.getBonds();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const bondsIdc = [];\r\n let bondsCount = 0;\r\n component.forEachBond((bond) => {\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n if (!(atom1.mask & mask) || !(atom2.mask & mask)) {\r\n return;\r\n }\r\n bondsIdc[bondsCount++] = bond._index;\r\n });\r\n if (bondsCount === 0) {\r\n return;\r\n }\r\n const bondsGroup = new BondsGroup(geoParams, {\r\n bonds,\r\n chunks: bondsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n bondsGroup._component = component;\r\n self.add(bondsGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default BondsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass AromaticProcessor extends RCGroup {\r\n constructor(AromaticGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const atoms = complex.getAtoms();\r\n const transforms = complex.getTransforms();\r\n if (!mode.showAromaticLoops()) {\r\n return;\r\n }\r\n\r\n complex.forEachComponent((component) => {\r\n const atomsIdc = [];\r\n let chunksCount = 0;\r\n const cycles = [];\r\n let cycleIdx = 0;\r\n component.forEachCycle((cycle) => {\r\n const cycAtoms = cycle.atoms;\r\n let perCycle = 0;\r\n for (let i = 0, n = cycAtoms.length; i < n; ++i) {\r\n if ((cycAtoms[i].mask & mask) !== 0) {\r\n ++perCycle;\r\n atomsIdc[chunksCount++] = cycAtoms[i].index;\r\n }\r\n }\r\n if (perCycle > 0) {\r\n cycles[cycleIdx++] = cycle;\r\n }\r\n });\r\n\r\n const atomsGroup = new AromaticGroup(geoParams, {\r\n cycles,\r\n atoms,\r\n chunks: atomsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n atomsGroup._component = component;\r\n self.add(atomsGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default AromaticProcessor;\r\n","import AtomsProcessor from './AtomsProcessor';\r\nimport OrphanAtomsProcessor from './OrphanAtomsProcessor';\r\nimport ResiduesProcessor from './ResiduesProcessor';\r\nimport NucleicProcessor from './NucleicProcessor';\r\nimport SubseqsProcessor from './SubseqsProcessor';\r\nimport BondsProcessor from './BondsProcessor';\r\nimport AromaticProcessor from './AromaticProcessor';\r\n\r\nexport default {\r\n Atoms: AtomsProcessor,\r\n OrphanAtoms: OrphanAtomsProcessor,\r\n Residues: ResiduesProcessor,\r\n Nucleic: NucleicProcessor,\r\n Subseqs: SubseqsProcessor,\r\n Bonds: BondsProcessor,\r\n Aromatic: AromaticProcessor,\r\n};\r\n","import MeshCreator from '../../meshes/MeshCreator';\r\nimport groups from './groups';\r\nimport processors from '../processors/processors';\r\n\r\nfunction _bakeGroup(triplet, Processor, Group) {\r\n return function (complex, colorer, mode, polyComplexity, mask, material) {\r\n return new Processor(Group, triplet, complex, colorer, mode, polyComplexity, mask, material);\r\n };\r\n}\r\n\r\nclass GroupsFactory {\r\n static AtomsSpheres(caps, settings) {\r\n const gfxTriplet = MeshCreator.createSpheres(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSphereGroup);\r\n }\r\n\r\n static OrphanedAtomsCrosses(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createCrosses(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.OrphanAtoms, groups.AtomsSphereGroup);\r\n }\r\n\r\n static BondsCylinders(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Bonds, groups.BondsCylinderGroup);\r\n }\r\n\r\n static BondsLines(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.create2CLines(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Bonds, groups.BondsLinesGroup);\r\n }\r\n\r\n static CartoonChains(caps, settings) {\r\n const gfxTriplet = MeshCreator.createExtrudedChains(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Subseqs, groups.ResiduesSubseqGroup);\r\n }\r\n\r\n static TraceChains(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CClosedCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Subseqs, groups.ResiduesTraceGroup);\r\n }\r\n\r\n static NucleicSpheres(caps, settings) {\r\n const gfxTriplet = MeshCreator.createSpheres(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Nucleic, groups.NucleicSpheresGroup);\r\n }\r\n\r\n static NucleicCylinders(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Nucleic, groups.NucleicCylindersGroup);\r\n }\r\n\r\n static ALoopsTorus(caps, settings) {\r\n const gfxTriplet = MeshCreator.createExtrudedChains(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Aromatic, groups.AromaticTorusGroup);\r\n }\r\n\r\n static ALoopsLines(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createChunkedLines(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Aromatic, groups.AromaticLinesGroup);\r\n }\r\n\r\n static QuickSurfGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createQuickSurface(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSurfaceGroup);\r\n }\r\n\r\n static ContactSurfaceGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createContactSurface(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSurfaceGroup);\r\n }\r\n\r\n static SASSESSurfaceGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createSASSES(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSASSESGroupStub);\r\n }\r\n\r\n static TextLabelsGeo(caps, settings) {\r\n const gfxTriplet = MeshCreator.createLabels(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsTextGroup);\r\n }\r\n}\r\n\r\nexport default GroupsFactory;\r\n","import _ from 'lodash';\r\nimport makeContextDependent from '../../utils/makeContextDependent';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport factory from './groups/GroupsFactory';\r\n\r\n/**\r\n * Create new mode.\r\n *\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the mode after its creation.\r\n *\r\n * @exports Mode\r\n * @this Mode\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all available modes used for building and displaying molecule geometry.\r\n */\r\nclass Mode {\r\n constructor(opts) {\r\n if (this.constructor === Mode) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Mode options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.opts = _.merge(utils.deriveDeep(this.settings.now.modes[this.id], true), opts);\r\n }\r\n\r\n /**\r\n * Get mode identification, probably with options.\r\n * @returns {string|Array} Mode identifier string ({@link Mode#id}) or two-element array containing both mode\r\n * identifier and options ({@link Mode#opts}).\r\n * Options are returned if they were changed during or after the mode creation.\r\n */\r\n identify() {\r\n const diff = utils.objectsDiff(this.opts, this.settings.now.modes[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n return [this.id, diff];\r\n }\r\n return this.id;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const polyComplexity = this.opts.polyComplexity ? this.opts.polyComplexity[this.settings.now.resolution] : 0;\r\n const groupList = this.depGroups;\r\n const groupCount = groupList.length;\r\n const group = new gfxutils.RCGroup();\r\n const self = this;\r\n for (let i = 0; i < groupCount; ++i) {\r\n let currGroup = groupList[i];\r\n let renderParams = {};\r\n if (_.isArray(currGroup)) {\r\n renderParams = currGroup[1].call(this);\r\n [currGroup] = currGroup;\r\n }\r\n const Group = factory[currGroup](null, this.settings, renderParams);\r\n const newGroup = new Group(complex, colorer, self, polyComplexity, mask, material);\r\n if (newGroup.children.length > 0) {\r\n group.add(newGroup);\r\n }\r\n }\r\n return group;\r\n }\r\n}\r\n\r\nmakeContextDependent(Mode.prototype);\r\n\r\n/**\r\n* Mode identifier.\r\n* @type {string}\r\n*/\r\nMode.prototype.id = '__';\r\n\r\n/**\r\n * Mode geo groups.\r\n * @type {Array}\r\n */\r\nMode.prototype.depGroups = [];\r\n\r\nexport default Mode;\r\n","import Mode from './Mode';\r\n\r\nfunction getRenderParams() {\r\n return {\r\n lineWidth: this.opts.lineWidth,\r\n };\r\n}\r\n\r\nclass LinesMode extends Mode {\r\n static id = 'LN';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n this.depGroups = this.depGroups.slice(0); // clone depGroups to prevent prototype edits\r\n const groups = this.depGroups;\r\n for (let i = 0, n = groups.length; i < n; ++i) {\r\n groups[i] = [groups[i], getRenderParams];\r\n }\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n\r\n calcAtomRadius() {\r\n return this.opts.atom;\r\n }\r\n\r\n getAromaticOffset() {\r\n return this.opts.offsarom;\r\n }\r\n\r\n getAromaticArcChunks() {\r\n return this.opts.chunkarom;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n}\r\n\r\nLinesMode.prototype.id = 'LN';\r\nLinesMode.prototype.name = 'Lines';\r\nLinesMode.prototype.shortName = 'Lines';\r\nLinesMode.prototype.depGroups = [\r\n 'ALoopsLines',\r\n 'BondsLines',\r\n 'OrphanedAtomsCrosses',\r\n];\r\n\r\nexport default LinesMode;\r\n","/* eslint-disable no-magic-numbers */\r\nimport Mode from './Mode';\r\n\r\nclass LicoriceMode extends Mode {\r\n static id = 'LC';\r\n\r\n calcAtomRadius(_atom) {\r\n return this.opts.bond;\r\n }\r\n\r\n calcStickRadius() {\r\n return this.opts.bond;\r\n }\r\n\r\n calcSpaceFraction() {\r\n return this.opts.space;\r\n }\r\n\r\n getAromRadius() {\r\n return this.opts.aromrad;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n}\r\n\r\nLicoriceMode.prototype.id = 'LC';\r\nLicoriceMode.prototype.name = 'Licorice';\r\nLicoriceMode.prototype.shortName = 'Licorice';\r\nLicoriceMode.prototype.depGroups = [\r\n 'AtomsSpheres',\r\n 'BondsCylinders',\r\n 'ALoopsTorus',\r\n];\r\n\r\nexport default LicoriceMode;\r\n","/* eslint-disable no-magic-numbers */\r\nimport Mode from './Mode';\r\n\r\nclass BallsAndSticksMode extends Mode {\r\n static id = 'BS';\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius * this.opts.atom;\r\n }\r\n\r\n calcStickRadius() {\r\n return this.opts.bond;\r\n }\r\n\r\n getAromRadius() {\r\n return this.opts.aromrad;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n\r\n calcSpaceFraction() {\r\n return this.opts.space;\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n}\r\n\r\nBallsAndSticksMode.prototype.id = 'BS';\r\nBallsAndSticksMode.prototype.name = 'Balls and Sticks';\r\nBallsAndSticksMode.prototype.shortName = 'Balls';\r\nBallsAndSticksMode.prototype.depGroups = [\r\n 'AtomsSpheres',\r\n 'BondsCylinders',\r\n 'ALoopsTorus',\r\n];\r\n\r\nexport default BallsAndSticksMode;\r\n","import Mode from './Mode';\r\n\r\nclass VanDerWaalsMode extends Mode {\r\n static id = 'VW';\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n}\r\n\r\nVanDerWaalsMode.prototype.id = 'VW';\r\nVanDerWaalsMode.prototype.name = 'Van der Waals';\r\nVanDerWaalsMode.prototype.shortName = 'VDW';\r\nVanDerWaalsMode.prototype.depGroups = ['AtomsSpheres'];\r\n\r\nexport default VanDerWaalsMode;\r\n","import Mode from './Mode';\r\n\r\nclass TraceMode extends Mode {\r\n static id = 'TR';\r\n\r\n calcStickRadius() {\r\n return this.opts.radius;\r\n }\r\n}\r\n\r\nTraceMode.prototype.id = 'TR';\r\nTraceMode.prototype.name = 'Trace';\r\nTraceMode.prototype.shortName = 'Trace';\r\nTraceMode.prototype.depGroups = ['TraceChains'];\r\n\r\nexport default TraceMode;\r\n","import * as THREE from 'three';\r\nimport Mode from './Mode';\r\n\r\nclass TubeMode extends Mode {\r\n static id = 'TU';\r\n\r\n getResidueRadius(_residue) {\r\n return this.TUBE_RADIUS;\r\n }\r\n\r\n getHeightSegmentsRatio() {\r\n return this.opts.heightSegmentsRatio;\r\n }\r\n\r\n getTension() {\r\n return this.opts.tension;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const rad = this.opts.radius;\r\n this.TUBE_RADIUS = new THREE.Vector2(rad, rad);\r\n\r\n return Mode.prototype.buildGeometry.call(this, complex, colorer, mask, material);\r\n }\r\n}\r\n\r\nTubeMode.prototype.id = 'TU';\r\nTubeMode.prototype.name = 'Tube';\r\nTubeMode.prototype.shortName = 'Tube';\r\nTubeMode.prototype.depGroups = ['CartoonChains'];\r\n\r\nexport default TubeMode;\r\n","import * as THREE from 'three';\r\nimport Mode from './Mode';\r\n\r\nclass CartoonMode extends Mode {\r\n static id = 'CA';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n // cache for secondary structure options\r\n this.secCache = {};\r\n }\r\n\r\n getResidueStartRadius(residue) {\r\n const second = residue.getSecondary();\r\n if (!second || !second.generic) {\r\n return this.TUBE_RADIUS;\r\n }\r\n const secOpts = this.secCache[second.generic];\r\n if (!secOpts) {\r\n return this.TUBE_RADIUS;\r\n }\r\n if (second.term === residue) {\r\n return secOpts.start;\r\n }\r\n return secOpts.center;\r\n }\r\n\r\n getResidueEndRadius(residue) {\r\n const second = residue.getSecondary();\r\n if (second === null || !second.generic) {\r\n return this.TUBE_RADIUS;\r\n }\r\n const secOpts = this.secCache[second.generic];\r\n if (!secOpts) {\r\n return this.TUBE_RADIUS;\r\n }\r\n if (second.term === residue) {\r\n return this.ARROW_END;\r\n }\r\n return secOpts.center;\r\n }\r\n\r\n getResidueRadius(residue, val) {\r\n const startRad = this.getResidueStartRadius(residue);\r\n if (val === 0) {\r\n return startRad;\r\n }\r\n\r\n const endRad = this.getResidueEndRadius(residue);\r\n if (val === 2) {\r\n return endRad;\r\n }\r\n\r\n return startRad.clone().lerp(endRad, val / 2.0);\r\n }\r\n\r\n calcStickRadius(_res) {\r\n return this.opts.radius;\r\n }\r\n\r\n getHeightSegmentsRatio() {\r\n return this.opts.heightSegmentsRatio;\r\n }\r\n\r\n getTension() {\r\n return this.opts.tension;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const tubeRad = this.opts.radius;\r\n const secHeight = this.opts.depth;\r\n\r\n this.TUBE_RADIUS = new THREE.Vector2(tubeRad, tubeRad);\r\n this.ARROW_END = new THREE.Vector2(secHeight, tubeRad);\r\n const secCache = {};\r\n const secData = this.opts.ss;\r\n /* eslint-disable guard-for-in */\r\n for (const prop in secData) {\r\n secCache[prop] = {\r\n center: new THREE.Vector2(secHeight, secData[prop].width),\r\n start: new THREE.Vector2(secHeight, secData[prop].arrow),\r\n };\r\n }\r\n this.secCache = secCache;\r\n /* eslint-enable guard-for-in */\r\n\r\n return Mode.prototype.buildGeometry.call(this, complex, colorer, mask, material);\r\n }\r\n}\r\n\r\nCartoonMode.prototype.id = 'CA';\r\nCartoonMode.prototype.name = 'Cartoon';\r\nCartoonMode.prototype.shortName = 'Cartoon';\r\nCartoonMode.prototype.depGroups = [\r\n 'CartoonChains',\r\n 'NucleicSpheres',\r\n 'NucleicCylinders',\r\n];\r\n\r\nexport default CartoonMode;\r\n","import chem from '../../chem';\r\nimport Mode from './Mode';\r\n\r\nconst { selectors } = chem;\r\n\r\nfunction getRenderParams() {\r\n return {\r\n wireframe: this.opts.wireframe,\r\n zClip: this.opts.zClip,\r\n };\r\n}\r\n\r\nclass SurfaceMode extends Mode {\r\n constructor(opts) {\r\n super(opts);\r\n this.depGroups = this.depGroups.slice(0); // clone depGroups to prevent prototype edits\r\n const surfaces = this.surfaceNames;\r\n const groups = this.depGroups;\r\n for (let i = 0, n = surfaces.length; i < n; ++i) {\r\n groups[groups.length] = [surfaces[i], getRenderParams];\r\n }\r\n }\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n\r\n getVisibilitySelector() {\r\n let visibilitySelector = null;\r\n if (this.opts.subset !== '') {\r\n const res = selectors.parse(this.opts.subset);\r\n if (!res.error) {\r\n visibilitySelector = res.selector;\r\n }\r\n }\r\n return visibilitySelector;\r\n }\r\n}\r\n\r\nSurfaceMode.prototype.isSurface = true;\r\nSurfaceMode.prototype.surfaceNames = [];\r\n\r\nexport default SurfaceMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass QuickSurfaceMode extends SurfaceMode {\r\n static id = 'QS';\r\n\r\n getSurfaceOpts() {\r\n return {\r\n useBeads: false,\r\n isoValue: this.opts.isoValue,\r\n gaussLim: this.opts.gaussLim[this.settings.now.resolution],\r\n radScale: this.opts.scale,\r\n gridSpacing: this.opts.gridSpacing[this.settings.now.resolution],\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n };\r\n }\r\n}\r\n\r\nQuickSurfaceMode.prototype.id = 'QS';\r\nQuickSurfaceMode.prototype.name = 'Quick Surface';\r\nQuickSurfaceMode.prototype.shortName = 'Quick Surf';\r\nQuickSurfaceMode.prototype.surfaceNames = ['QuickSurfGeo'];\r\n\r\nexport default QuickSurfaceMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass IsoSurfaceMode extends SurfaceMode {\r\n constructor(excludeProbe, opts) {\r\n super(opts);\r\n this._excludeProbe = excludeProbe;\r\n }\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n\r\n getSurfaceOpts() {\r\n return {\r\n gridSpacing: this.opts.polyComplexity[this.settings.now.resolution],\r\n radScale: this._radScale,\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n probeRadius: this.opts.probeRadius,\r\n excludeProbe: this._excludeProbe,\r\n };\r\n }\r\n}\r\n\r\nIsoSurfaceMode.prototype.id = 'SU';\r\nIsoSurfaceMode.prototype.name = 'Surface';\r\nIsoSurfaceMode.prototype.shortName = 'Surface';\r\nIsoSurfaceMode.prototype.surfaceNames = ['SASSESSurfaceGeo'];\r\n\r\nIsoSurfaceMode.prototype._radScale = 1;\r\nIsoSurfaceMode.prototype._excludeProbe = false;\r\n\r\nexport default IsoSurfaceMode;\r\n","import IsoSurfaceMode from './IsoSurfaceMode';\r\n\r\nclass IsoSurfaceSASMode extends IsoSurfaceMode {\r\n static id = 'SA';\r\n\r\n constructor(opts) {\r\n super(false, opts);\r\n }\r\n}\r\n\r\nIsoSurfaceSASMode.prototype.id = 'SA';\r\nIsoSurfaceSASMode.prototype.name = 'Solvent Accessible Surface';\r\nIsoSurfaceSASMode.prototype.shortName = 'SAS';\r\n\r\nexport default IsoSurfaceSASMode;\r\n","import IsoSurfaceMode from './IsoSurfaceMode';\r\n\r\nclass IsoSurfaceSESMode extends IsoSurfaceMode {\r\n static id = 'SE';\r\n\r\n constructor(opts) {\r\n super(true, opts);\r\n }\r\n}\r\n\r\nIsoSurfaceSESMode.prototype.id = 'SE';\r\nIsoSurfaceSESMode.prototype.name = 'Solvent Excluded Surface';\r\nIsoSurfaceSESMode.prototype.shortName = 'SES';\r\n\r\nexport default IsoSurfaceSESMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass ContactSurfaceMode extends SurfaceMode {\r\n static id = 'CS';\r\n\r\n getSurfaceOpts() {\r\n return {\r\n probeRadius: this.opts.probeRadius,\r\n radScale: this.opts.polyComplexity[this.settings.now.resolution],\r\n scaleFactor: this.opts.polyComplexity[this.settings.now.resolution],\r\n gridSpacing: 1.0 / this.opts.polyComplexity[this.settings.now.resolution],\r\n isoValue: this.opts.isoValue,\r\n probePositions: this.opts.probePositions,\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n };\r\n }\r\n}\r\n\r\nContactSurfaceMode.prototype.id = 'CS';\r\nContactSurfaceMode.prototype.name = 'Contact Surface';\r\nContactSurfaceMode.prototype.shortName = 'Contact Surf';\r\nContactSurfaceMode.prototype.isSurface = true;\r\nContactSurfaceMode.prototype.surfaceNames = ['ContactSurfaceGeo'];\r\n\r\nexport default ContactSurfaceMode;\r\n","import _ from 'lodash';\r\nimport Mode from './Mode';\r\n\r\nclass TextMode extends Mode {\r\n static id = 'TX';\r\n\r\n getTemplateOptions() {\r\n return this.opts.template;\r\n }\r\n\r\n getLabelOpts() {\r\n return _.merge(this.opts, {\r\n colors: true,\r\n adjustColor: true,\r\n transparent: true,\r\n });\r\n }\r\n}\r\n\r\nTextMode.prototype.id = 'TX';\r\nTextMode.prototype.name = 'Text mode';\r\nTextMode.prototype.shortName = 'Text';\r\nTextMode.prototype.depGroups = ['TextLabelsGeo'];\r\n\r\nexport default TextMode;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport LinesMode from './modes/LinesMode';\r\nimport LicoriceMode from './modes/LicoriceMode';\r\nimport BallsAndSticksMode from './modes/BallsAndSticksMode';\r\nimport VanDerWaalsMode from './modes/VanDerWaalsMode';\r\nimport TraceMode from './modes/TraceMode';\r\nimport TubeMode from './modes/TubeMode';\r\nimport CartoonMode from './modes/CartoonMode';\r\nimport QuickSurfaceMode from './modes/QuickSurfaceMode';\r\nimport IsoSurfaceSASMode from './modes/IsoSurfaceSASMode';\r\nimport IsoSurfaceSESMode from './modes/IsoSurfaceSESMode';\r\nimport ContactSurfaceMode from './modes/ContactSurfaceMode';\r\nimport TextMode from './modes/TextMode';\r\n\r\nconst modes = new EntityList([\r\n LinesMode,\r\n LicoriceMode,\r\n BallsAndSticksMode,\r\n VanDerWaalsMode,\r\n TraceMode,\r\n TubeMode,\r\n CartoonMode,\r\n QuickSurfaceMode,\r\n IsoSurfaceSASMode,\r\n IsoSurfaceSESMode,\r\n ContactSurfaceMode,\r\n TextMode,\r\n]);\r\n\r\nexport default modes;\r\n","import _ from 'lodash';\r\n\r\nfunction clamp(x, a, b) {\r\n return x <= b ? x < 0 ? 0 : x : b;\r\n}\r\n\r\nfunction lerpColor(c1, c2, alpha) {\r\n const beta = 1 - alpha;\r\n const r1 = (c1 >> 16) & 0xff;\r\n const g1 = (c1 >> 8) & 0xff;\r\n const b1 = c1 & 0xff;\r\n const r2 = (c2 >> 16) & 0xff;\r\n const g2 = (c2 >> 8) & 0xff;\r\n const b2 = c2 & 0xff;\r\n const r = beta * r1 + alpha * r2;\r\n const g = beta * g1 + alpha * g2;\r\n const b = beta * b1 + alpha * b2;\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\nclass Palette {\r\n constructor(name, id) {\r\n this.name = name || 'Custom';\r\n this.id = id || 'CP';\r\n }\r\n\r\n getElementColor(name, asIs = false) {\r\n const color = this.elementColors[name];\r\n return color === undefined && !asIs ? this.defaultElementColor : color;\r\n }\r\n\r\n getResidueColor(name, asIs = false) {\r\n const color = this.residueColors[name];\r\n return color === undefined && !asIs ? this.defaultResidueColor : color;\r\n }\r\n\r\n getChainColor(name) {\r\n let chain = name.charCodeAt(0);\r\n chain = ((chain < 0 ? 0 : chain >= 256 ? chain - 256 : chain) & 0x1F)\r\n % this.chainColors.length;\r\n return this.chainColors[chain];\r\n }\r\n\r\n getSecondaryColor(type, asIs = false) {\r\n const color = this.secondaryColors[type];\r\n return color === undefined && !asIs ? this.defaultSecondaryColor : color;\r\n }\r\n\r\n getSequentialColor(index) {\r\n const { colors } = this;\r\n const len = colors.length;\r\n return index < 0 ? colors[(index % len) + len] : colors[index % len];\r\n }\r\n\r\n getGradientColor(value, gradientName) {\r\n const gradient = this.gradients[gradientName];\r\n if (!gradient) {\r\n return this.defaultNamedColor;\r\n }\r\n const count = gradient.length;\r\n const index = value * (count - 1);\r\n let left = Math.floor(index);\r\n const right = clamp(left + 1, 0, count - 1);\r\n left = clamp(left, 0, count - 1);\r\n return lerpColor(gradient[left], gradient[right], index - left);\r\n }\r\n\r\n getNamedColor(name, asIs = false) {\r\n const color = this.namedColors[name];\r\n return color === undefined && !asIs ? this.defaultNamedColor : color;\r\n }\r\n}\r\n\r\n_.assign(Palette.prototype, {\r\n colors: [0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0x808080],\r\n\r\n minRangeColor: 0x000000,\r\n midRangeColor: 0x7F7F7F,\r\n maxRangeColor: 0xFFFFFF,\r\n\r\n defaultElementColor: 0xFFFFFF,\r\n elementColors: {},\r\n\r\n defaultResidueColor: 0xFFFFFF,\r\n residueColors: {},\r\n\r\n chainColors: [0xFFFFFF],\r\n\r\n defaultSecondaryColor: 0xFFFFFF,\r\n secondaryColors: {},\r\n\r\n defaultGradientColor: 0x000000,\r\n\r\n defaultNamedColor: 0xFFFFFF,\r\n namedColorsArray: [\r\n /* eslint-disable no-multi-spaces */\r\n ['indianred', 0xcd5c5c],\r\n ['lightcoral', 0xf08080],\r\n ['salmon', 0xfa8072],\r\n ['darksalmon', 0xe9967a],\r\n ['lightsalmon', 0xffa07a],\r\n ['crimson', 0xdc143c],\r\n ['red', 0xff0000],\r\n ['firebrick', 0xb22222],\r\n ['darkred', 0x8b0000],\r\n ['pink', 0xffc0cb],\r\n ['lightpink', 0xffb6c1],\r\n ['hotpink', 0xff69b4],\r\n ['deeppink', 0xff1493],\r\n ['mediumvioletred', 0xc71585],\r\n ['palevioletred', 0xdb7093],\r\n ['coral', 0xff7f50],\r\n ['tomato', 0xff6347],\r\n ['orangered', 0xff4500],\r\n ['darkorange', 0xff8c00],\r\n ['orange', 0xffa500],\r\n ['gold', 0xffd700],\r\n ['yellow', 0xffff00],\r\n ['lightyellow', 0xffffe0],\r\n ['lemonchiffon', 0xfffacd],\r\n ['lightgoldenrodyellow', 0xfafad2],\r\n ['papayawhip', 0xffefd5],\r\n ['moccasin', 0xffe4b5],\r\n ['peachpuff', 0xffdab9],\r\n ['palegoldenrod', 0xeee8aa],\r\n ['khaki', 0xf0e68c],\r\n ['darkkhaki', 0xbdb76b],\r\n ['lavender', 0xe6e6fa],\r\n ['thistle', 0xd8bfd8],\r\n ['plum', 0xdda0dd],\r\n ['violet', 0xee82ee],\r\n ['orchid', 0xda70d6],\r\n ['fuchsia', 0xff00ff],\r\n ['magenta', 0xff00ff],\r\n ['mediumorchid', 0xba55d3],\r\n ['mediumpurple', 0x9370db],\r\n ['rebeccapurple', 0x663399],\r\n ['blueviolet', 0x8a2be2],\r\n ['darkviolet', 0x9400d3],\r\n ['darkorchid', 0x9932cc],\r\n ['darkmagenta', 0x8b008b],\r\n ['purple', 0x800080],\r\n ['indigo', 0x4b0082],\r\n ['slateblue', 0x6a5acd],\r\n ['mediumslateblue', 0x7b68ee],\r\n ['darkslateblue', 0x483d8b],\r\n ['greenyellow', 0xadff2f],\r\n ['chartreuse', 0x7fff00],\r\n ['lawngreen', 0x7cfc00],\r\n ['lime', 0x00ff00],\r\n ['limegreen', 0x32cd32],\r\n ['palegreen', 0x98fb98],\r\n ['lightgreen', 0x90ee90],\r\n ['mediumspringgreen', 0x00fa9a],\r\n ['springgreen', 0x00ff7f],\r\n ['mediumseagreen', 0x3cb371],\r\n ['seagreen', 0x2e8b57],\r\n ['forestgreen', 0x228b22],\r\n ['green', 0x008000],\r\n ['darkgreen', 0x006400],\r\n ['yellowgreen', 0x9acd32],\r\n ['olivedrab', 0x6b8e23],\r\n ['olive', 0x808000],\r\n ['darkolivegreen', 0x556b2f],\r\n ['mediumaquamarine', 0x66cdaa],\r\n ['darkseagreen', 0x8fbc8f],\r\n ['lightseagreen', 0x20b2aa],\r\n ['darkcyan', 0x008b8b],\r\n ['teal', 0x008080],\r\n ['aqua', 0x00ffff],\r\n ['cyan', 0x00ffff],\r\n ['lightcyan', 0xe0ffff],\r\n ['paleturquoise', 0xafeeee],\r\n ['aquamarine', 0x7fffd4],\r\n ['turquoise', 0x40e0d0],\r\n ['mediumturquoise', 0x48d1cc],\r\n ['darkturquoise', 0x00ced1],\r\n ['cadetblue', 0x5f9ea0],\r\n ['steelblue', 0x4682b4],\r\n ['lightsteelblue', 0xb0c4de],\r\n ['powderblue', 0xb0e0e6],\r\n ['lightblue', 0xadd8e6],\r\n ['skyblue', 0x87ceeb],\r\n ['lightskyblue', 0x87cefa],\r\n ['deepskyblue', 0x00bfff],\r\n ['dodgerblue', 0x1e90ff],\r\n ['cornflowerblue', 0x6495ed],\r\n ['royalblue', 0x4169e1],\r\n ['blue', 0x0000ff],\r\n ['mediumblue', 0x0000cd],\r\n ['darkblue', 0x00008b],\r\n ['navy', 0x000080],\r\n ['midnightblue', 0x191970],\r\n ['cornsilk', 0xfff8dc],\r\n ['blanchedalmond', 0xffebcd],\r\n ['bisque', 0xffe4c4],\r\n ['navajowhite', 0xffdead],\r\n ['wheat', 0xf5deb3],\r\n ['burlywood', 0xdeb887],\r\n ['tan', 0xd2b48c],\r\n ['rosybrown', 0xbc8f8f],\r\n ['sandybrown', 0xf4a460],\r\n ['goldenrod', 0xdaa520],\r\n ['darkgoldenrod', 0xb8860b],\r\n ['peru', 0xcd853f],\r\n ['chocolate', 0xd2691e],\r\n ['saddlebrown', 0x8b4513],\r\n ['sienna', 0xa0522d],\r\n ['brown', 0xa52a2a],\r\n ['maroon', 0x800000],\r\n ['white', 0xffffff],\r\n ['snow', 0xfffafa],\r\n ['honeydew', 0xf0fff0],\r\n ['mintcream', 0xf5fffa],\r\n ['azure', 0xf0ffff],\r\n ['aliceblue', 0xf0f8ff],\r\n ['ghostwhite', 0xf8f8ff],\r\n ['whitesmoke', 0xf5f5f5],\r\n ['seashell', 0xfff5ee],\r\n ['beige', 0xf5f5dc],\r\n ['oldlace', 0xfdf5e6],\r\n ['floralwhite', 0xfffaf0],\r\n ['ivory', 0xfffff0],\r\n ['antiquewhite', 0xfaebd7],\r\n ['linen', 0xfaf0e6],\r\n ['lavenderblush', 0xfff0f5],\r\n ['mistyrose', 0xffe4e1],\r\n ['gainsboro', 0xdcdcdc],\r\n ['lightgray', 0xd3d3d3],\r\n ['silver', 0xc0c0c0],\r\n ['darkgray', 0xa9a9a9],\r\n ['gray', 0x808080],\r\n ['dimgray', 0x696969],\r\n ['lightslategray', 0x778899],\r\n ['slategray', 0x708090],\r\n ['darkslategray', 0x2f4f4f],\r\n ['black', 0x000000],\r\n /* eslint-enable no-multi-spaces */\r\n ],\r\n\r\n namedColors: {},\r\n /* eslint-enable no-magic-numbers */\r\n\r\n gradients: {\r\n rainbow: [\r\n 0x0000ff, // blue\r\n 0x00ffff, // cyan\r\n 0x00ff00, // green\r\n 0xffff00, // yellow\r\n 0xff0000, // red\r\n ],\r\n temp: [\r\n 0x0000ff, // blue\r\n 0x007fff, // light-blue\r\n 0xffffff, // white\r\n 0xff7f00, // orange\r\n 0xff0000, // red\r\n ],\r\n hot: [\r\n 0xffffff, // white\r\n 0xff7f00, // orange\r\n 0xff0000, // red\r\n ],\r\n cold: [\r\n 0xffffff, // white\r\n 0x007fff, // light-blue\r\n 0x0000ff, // blue\r\n ],\r\n 'blue-red': [\r\n 0x0000ff, // blue\r\n 0xffffff, // white\r\n 0xff0000, // red\r\n ],\r\n reds: [\r\n 0xffffff, // white\r\n 0xff0000, // red\r\n ],\r\n blues: [\r\n 0xffffff, // white\r\n 0x0000ff, // blue\r\n ],\r\n },\r\n});\r\n\r\nconst { namedColorsArray, namedColors } = Palette.prototype;\r\n\r\nfor (let i = 0, { length } = namedColorsArray; i < length; ++i) {\r\n const [name, value] = namedColorsArray[i];\r\n namedColors[name] = value;\r\n}\r\n\r\nexport default Palette;\r\n","import Palette from './Palette';\r\n\r\nconst palette = new Palette('CPK', 'CP');\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n /* eslint-disable no-magic-numbers */\r\n H: 0xFFFFFF,\r\n C: 0x202020,\r\n N: 0x2060FF,\r\n O: 0xEE2010,\r\n F: 0x00FF00,\r\n P: 0x8020FF,\r\n S: 0xFFFF00,\r\n CL: 0x00BB00,\r\n FE: 0xD0D0D0,\r\n CO: 0xD0D0D0,\r\n NI: 0xD0D0D0,\r\n CU: 0xD0D0D0,\r\n BR: 0x008800,\r\n I: 0x005500,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\nexport default palette;\r\n","import Palette from './Palette';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst palette = new Palette('Jmol', 'JM');\r\n\r\npalette.colors = [\r\n /* eslint-disable no-magic-numbers */\r\n 0x0000FF, // blue\r\n 0x0055FF, //\r\n 0x00ABFF, //\r\n 0x00FFFF, // cyan\r\n 0x00FFAB, //\r\n 0x00FF55, //\r\n 0x00FF00, // green\r\n 0x55FF00, //\r\n 0xABFF00, //\r\n 0xFFFF00, // yellow\r\n 0xFFAB00, //\r\n 0xFF5500, //\r\n 0xFF0000, // red\r\n 0xFF0055, //\r\n 0xFF00AB, //\r\n 0xFF00FF, // magenta\r\n 0xAB00FF, //\r\n 0x5500FF, //\r\n /* eslint-enable no-magic-numbers */\r\n];\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n /* eslint-disable no-magic-numbers */\r\n H: 0xFFFFFF,\r\n D: 0xFFFFC0,\r\n T: 0xFFFFA0,\r\n HE: 0xD9FFFF,\r\n LI: 0xCC80FF,\r\n BE: 0xC2FF00,\r\n B: 0xFFB5B5,\r\n C: 0x909090,\r\n N: 0x3050F8,\r\n O: 0xFF0D0D,\r\n F: 0x90E050,\r\n NE: 0xB3E3F5,\r\n NA: 0xAB5CF2,\r\n MG: 0x8AFF00,\r\n AL: 0xBFA6A6,\r\n SI: 0xF0C8A0,\r\n P: 0xFF8000,\r\n S: 0xFFFF30,\r\n CL: 0x1FF01F,\r\n AR: 0x80D1E3,\r\n K: 0x8F40D4,\r\n CA: 0x3DFF00,\r\n SC: 0xE6E6E6,\r\n TI: 0xBFC2C7,\r\n V: 0xA6A6AB,\r\n CR: 0x8A99C7,\r\n MN: 0x9C7AC7,\r\n FE: 0xE06633,\r\n CO: 0xF090A0,\r\n NI: 0x50D050,\r\n CU: 0xC88033,\r\n ZN: 0x7D80B0,\r\n GA: 0xC28F8F,\r\n GE: 0x668F8F,\r\n AS: 0xBD80E3,\r\n SE: 0xFFA100,\r\n BR: 0xA62929,\r\n KR: 0x5CB8D1,\r\n RB: 0x702EB0,\r\n SR: 0x00FF00,\r\n Y: 0x94FFFF,\r\n ZR: 0x94E0E0,\r\n NB: 0x73C2C9,\r\n MO: 0x54B5B5,\r\n TC: 0x3B9E9E,\r\n RU: 0x248F8F,\r\n RH: 0x0A7D8C,\r\n PD: 0x006985,\r\n AG: 0xC0C0C0,\r\n CD: 0xFFD98F,\r\n IN: 0xA67573,\r\n SN: 0x668080,\r\n SB: 0x9E63B5,\r\n TE: 0xD47A00,\r\n I: 0x940094,\r\n XE: 0x429EB0,\r\n CS: 0x57178F,\r\n BA: 0x00C900,\r\n LA: 0x70D4FF,\r\n CE: 0xFFFFC7,\r\n PR: 0xD9FFC7,\r\n ND: 0xC7FFC7,\r\n PM: 0xA3FFC7,\r\n SM: 0x8FFFC7,\r\n EU: 0x61FFC7,\r\n GD: 0x45FFC7,\r\n TB: 0x30FFC7,\r\n DY: 0x1FFFC7,\r\n HO: 0x00FF9C,\r\n ER: 0x00E675,\r\n TM: 0x00D452,\r\n YB: 0x00BF38,\r\n LU: 0x00AB24,\r\n HF: 0x4DC2FF,\r\n TA: 0x4DA6FF,\r\n W: 0x2194D6,\r\n RE: 0x267DAB,\r\n OS: 0x266696,\r\n IR: 0x175487,\r\n PT: 0xD0D0E0,\r\n AU: 0xFFD123,\r\n HG: 0xB8B8D0,\r\n TL: 0xA6544D,\r\n PB: 0x575961,\r\n BI: 0x9E4FB5,\r\n PO: 0xAB5C00,\r\n AT: 0x754F45,\r\n RN: 0x428296,\r\n FR: 0x420066,\r\n RA: 0x007D00,\r\n AC: 0x70ABFA,\r\n TH: 0x00BAFF,\r\n PA: 0x00A1FF,\r\n U: 0x008FFF,\r\n NP: 0x0080FF,\r\n PU: 0x006BFF,\r\n AM: 0x545CF2,\r\n CM: 0x785CE3,\r\n BK: 0x8A4FE3,\r\n CF: 0xA136D4,\r\n ES: 0xB31FD4,\r\n FM: 0xB31FBA,\r\n MD: 0xB30DA6,\r\n NO: 0xBD0D87,\r\n LR: 0xC70066,\r\n RF: 0xCC0059,\r\n DB: 0xD1004F,\r\n SG: 0xD90045,\r\n BH: 0xE00038,\r\n HS: 0xE6002E,\r\n MT: 0xEB0026,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\npalette.defaultResidueColor = 0xBEA06E;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\npalette.residueColors = {\r\n /* eslint-disable no-magic-numbers */\r\n ALA: 0xC8C8C8,\r\n ARG: 0x145AFF,\r\n ASN: 0x00DCDC,\r\n ASP: 0xE60A0A,\r\n CYS: 0xE6E600,\r\n GLN: 0x00DCDC,\r\n GLU: 0xE60A0A,\r\n GLY: 0xEBEBEB,\r\n HIS: 0x8282D2,\r\n ILE: 0x0F820F,\r\n LEU: 0x0F820F,\r\n LYS: 0x145AFF,\r\n MET: 0xE6E600,\r\n PHE: 0x3232AA,\r\n PRO: 0xDC9682,\r\n SER: 0xFA9600,\r\n THR: 0xFA9600,\r\n TRP: 0xB45AB4,\r\n TYR: 0x3232AA,\r\n VAL: 0x0F820F,\r\n A: 0xA0A0FF,\r\n C: 0xFF8C4B,\r\n G: 0xFF7070,\r\n I: 0x80FFFF,\r\n T: 0xA0FFA0,\r\n U: 0xFF8080,\r\n DA: 0xA0A0FF,\r\n DC: 0xFF8C4B,\r\n DG: 0xFF7070,\r\n DI: 0x80FFFF,\r\n DT: 0xA0FFA0,\r\n DU: 0xFF8080,\r\n '+A': 0xA0A0FF,\r\n '+C': 0xFF8C4B,\r\n '+G': 0xFF7070,\r\n '+I': 0x80FFFF,\r\n '+T': 0xA0FFA0,\r\n '+U': 0xFF8080,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\npalette.chainColors = [\r\n // ' '->0 'A'->1, 'B'->2\r\n 0xFFffffff, // ' ' & '0' white\r\n //\r\n 0xFFC0D0FF, // skyblue\r\n 0xFFB0FFB0, // pastel green\r\n 0xFFFFC0C8, // pink\r\n 0xFFFFFF80, // pastel yellow\r\n 0xFFFFC0FF, // pastel magenta\r\n 0xFFB0F0F0, // pastel cyan\r\n 0xFFFFD070, // pastel gold\r\n 0xFFF08080, // lightcoral\r\n\r\n 0xFFF5DEB3, // wheat\r\n 0xFF00BFFF, // deepskyblue\r\n 0xFFCD5C5C, // indianred\r\n 0xFF66CDAA, // mediumaquamarine\r\n 0xFF9ACD32, // yellowgreen\r\n 0xFFEE82EE, // violet\r\n 0xFF00CED1, // darkturquoise\r\n 0xFF00FF7F, // springgreen\r\n 0xFF3CB371, // mediumseagreen\r\n\r\n 0xFF00008B, // darkblue\r\n 0xFFBDB76B, // darkkhaki\r\n 0xFF006400, // darkgreen\r\n 0xFF800000, // maroon\r\n 0xFF808000, // olive\r\n 0xFF800080, // purple\r\n 0xFF008080, // teal\r\n 0xFFB8860B, // darkgoldenrod\r\n 0xFFB22222, // firebrick\r\n];\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\npalette.secondaryColors = {\r\n [StructuralElementType.HELIX_ALPHA]: 0xFF0080,\r\n [StructuralElementType.HELIX_PI]: 0x600080,\r\n [StructuralElementType.HELIX_310]: 0xA00080,\r\n [StructuralElementType.STRAND]: 0xFFC800,\r\n [StructuralElementType.TURN]: 0x6080FF,\r\n dna: 0xAE00FE,\r\n rna: 0xFD0162,\r\n};\r\n\r\nexport default palette;\r\n","import Palette from './Palette';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst palette = new Palette('VMD', 'VM');\r\n\r\npalette.colors = [\r\n /* eslint-disable no-magic-numbers */\r\n 0x0000FF, // blue\r\n 0xFF0000, // red\r\n 0x606060, // gray\r\n 0xFF8000, // orange\r\n 0xFFFF00, // yellow\r\n 0x808033, // tan\r\n 0x999999, // silver\r\n 0x00FF00, // green\r\n 0xFFFFFF, // white\r\n 0xFF9999, // pink\r\n 0x40C0C0, // cyan\r\n 0xA600A6, // purple\r\n 0x80E666, // lime\r\n 0xE666B3, // mauve\r\n 0x804D00, // ochre\r\n 0x8080C0, // ice blue\r\n /* eslint-enable no-magic-numbers */\r\n];\r\n\r\npalette.defaultElementColor = 0x804D00;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n /* eslint-disable no-magic-numbers */\r\n H: 0xFFFFFF,\r\n C: 0x40BFBF,\r\n N: 0x0000FF,\r\n O: 0xFF0000,\r\n P: 0x808033,\r\n S: 0xFFFF00,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\npalette.defaultResidueColor = 0x40C0C0;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\npalette.residueColors = {\r\n /* eslint-disable no-magic-numbers */\r\n ALA: 0x0000FF,\r\n ARG: 0xFFFFFF,\r\n ASN: 0x808033,\r\n ASP: 0xFF0000,\r\n CYS: 0xFFFF00,\r\n GLN: 0xFF8000,\r\n GLU: 0xFF9999,\r\n GLY: 0xFFFFFF,\r\n HIS: 0x40C0C0,\r\n ILE: 0x00FF00,\r\n LEU: 0xFF9999,\r\n LYS: 0x40C0C0,\r\n MET: 0xFFFF00,\r\n PHE: 0xA600A6,\r\n PRO: 0x804C00,\r\n SER: 0xFFFF00,\r\n THR: 0xE666B3,\r\n TRP: 0x999999,\r\n TYR: 0x00FF00,\r\n VAL: 0x808033,\r\n A: 0x0000FF,\r\n C: 0xFF8000,\r\n G: 0xFFFF00,\r\n T: 0xA600A6,\r\n U: 0x00FF00,\r\n DA: 0x0000FF,\r\n DC: 0xFF8000,\r\n DG: 0xFFFF00,\r\n DT: 0xA600A6,\r\n DU: 0x00FF00,\r\n '+A': 0x0000FF,\r\n '+C': 0xFF8000,\r\n '+G': 0xFFFF00,\r\n '+T': 0xA600A6,\r\n '+U': 0x00FF00,\r\n WAT: 0x40C0C0,\r\n H2O: 0x40C0C0,\r\n HOH: 0x40C0C0,\r\n /* eslint-enable no-magic-numbers */\r\n};\r\n\r\npalette.chainColors = [0xFFFFFF].concat(palette.colors);\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\npalette.secondaryColors = {\r\n [StructuralElementType.HELIX_ALPHA]: 0xA600A6,\r\n [StructuralElementType.HELIX_310]: 0x0000FF,\r\n [StructuralElementType.HELIX_PI]: 0xFF0000,\r\n [StructuralElementType.STRAND]: 0xFFFF00,\r\n [StructuralElementType.BRIDGE]: 0x808033,\r\n [StructuralElementType.TURN]: 0x40C0C0,\r\n};\r\n\r\nexport default palette;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport cpkPalette from './palettes/cpkPalette';\r\nimport jmolPalette from './palettes/jmolPalette';\r\nimport vmdPalette from './palettes/vmdPalette';\r\n\r\nconst palettes = new EntityList([\r\n cpkPalette,\r\n jmolPalette,\r\n vmdPalette,\r\n]);\r\n\r\nexport default palettes;\r\n","import _ from 'lodash';\r\nimport settings from '../../settings';\r\nimport utils from '../../utils';\r\nimport palettes from '../palettes';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the colorer after its creation.\r\n *\r\n * @exports Colorer\r\n * @this Colorer\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all available coloring algorithms used for building and displaying molecule geometry.\r\n */\r\nclass Colorer {\r\n constructor(opts) {\r\n if (this.constructor === Colorer) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Colorer options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.opts = _.merge(utils.deriveDeep(settings.now.colorers[this.id], true), opts);\r\n /**\r\n * Palette in use.\r\n * @type {Palette}\r\n */\r\n this.palette = palettes.first;\r\n }\r\n\r\n /**\r\n * Get Colorer identification, probably with options.\r\n * @returns {string|Array} Colorer identifier string ({@link Colorer#id}) or two-element array containing both colorer\r\n * identifier and options ({@link Colorer#opts}).\r\n * Options are returned if they were changed during or after colorer creation.\r\n */\r\n identify() {\r\n const diff = utils.objectsDiff(this.opts, settings.now.colorers[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n return [this.id, diff];\r\n }\r\n return this.id;\r\n }\r\n}\r\n\r\n/**\r\n * Colorer identifier.\r\n * @type {string}\r\n */\r\n\r\nColorer.prototype.id = '__';\r\n\r\nexport default Colorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Element\r\n *\r\n * @exports ElementColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Coloring algorithm based on chemical element.\r\n */\r\nclass ElementColorer extends Colorer {\r\n static id = 'EL';\r\n\r\n getAtomColor(atom, _complex) {\r\n const type = atom.element.name;\r\n if (type === 'C' && this.opts.carbon >= 0) {\r\n return this.opts.carbon;\r\n }\r\n return this.palette.getElementColor(type);\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.palette.defaultResidueColor;\r\n }\r\n}\r\n\r\nElementColorer.prototype.id = 'EL';\r\nElementColorer.prototype.name = 'Element';\r\nElementColorer.prototype.shortName = 'Element';\r\n\r\nexport default ElementColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Coloring algorithm based on residue type.\r\n *\r\n * @see ResidueType\r\n *\r\n * @exports ResidueTypeColorer\r\n * @constructor\r\n */\r\nclass ResidueTypeColorer extends Colorer {\r\n static id = 'RT';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n return this.palette.getResidueColor(residue._type._name);\r\n }\r\n}\r\n\r\nResidueTypeColorer.prototype.id = 'RT';\r\nResidueTypeColorer.prototype.name = 'Residue Type';\r\nResidueTypeColorer.prototype.shortName = 'Residue';\r\n\r\nexport default ResidueTypeColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass SequenceColorer extends Colorer {\r\n static id = 'SQ';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const chain = residue._chain;\r\n if (chain.minSequence === Number.POSITIVE_INFINITY && chain.maxSequence === Number.NEGATIVE_INFINITY) {\r\n return this.palette.defaultNamedColor;\r\n }\r\n const min = chain.minSequence;\r\n const max = chain.maxSequence > min ? chain.maxSequence : min + 1;\r\n return this.palette.getGradientColor((residue._sequence - min) / (max - min), this.opts.gradient);\r\n }\r\n}\r\n\r\nSequenceColorer.prototype.id = 'SQ';\r\nSequenceColorer.prototype.name = 'Sequence';\r\nSequenceColorer.prototype.shortName = 'Sequence';\r\n\r\nexport default SequenceColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass ChainColorer extends Colorer {\r\n static id = 'CH';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n return this.palette.getChainColor(residue.getChain()._name);\r\n }\r\n}\r\n\r\nChainColorer.prototype.id = 'CH';\r\nChainColorer.prototype.name = 'Chain';\r\nChainColorer.prototype.shortName = 'Chain';\r\n\r\nexport default ChainColorer;\r\n","import Colorer from './Colorer';\r\nimport ResidueType from '../../chem/ResidueType';\r\n\r\nclass SecondaryStructureColorer extends Colorer {\r\n static id = 'SS';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n if (residue._type.flags & ResidueType.Flags.DNA) {\r\n return this.palette.getSecondaryColor('dna');\r\n }\r\n if (residue._type.flags & ResidueType.Flags.RNA) {\r\n return this.palette.getSecondaryColor('rna');\r\n }\r\n const secondary = residue.getSecondary();\r\n if (secondary) {\r\n let color = this.palette.getSecondaryColor(secondary.type, true);\r\n if (color === undefined) {\r\n color = this.palette.getSecondaryColor(secondary.generic);\r\n }\r\n return color;\r\n }\r\n return this.palette.defaultSecondaryColor;\r\n }\r\n}\r\n\r\nSecondaryStructureColorer.prototype.id = 'SS';\r\nSecondaryStructureColorer.prototype.name = 'Secondary Structure';\r\nSecondaryStructureColorer.prototype.shortName = 'Structure';\r\n\r\nexport default SecondaryStructureColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass UniformColorer extends Colorer {\r\n static id = 'UN';\r\n\r\n getAtomColor(_atom, _complex) {\r\n return this.opts.color;\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nUniformColorer.prototype.id = 'UN';\r\nUniformColorer.prototype.name = 'Uniform';\r\nUniformColorer.prototype.shortName = 'Uniform';\r\n\r\nexport default UniformColorer;\r\n","import Colorer from './Colorer';\r\nimport selectors from '../../chem/selectors';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @exports ConditionalColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Bicolor coloring algorithm based on a selector string used as a condition.\r\n */\r\nclass ConditionalColorer extends Colorer {\r\n static id = 'CO';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n const parsed = selectors.parse(this.opts.subset);\r\n this._subsetCached = parsed.error ? selectors.none() : parsed.selector;\r\n }\r\n\r\n getAtomColor(atom, _complex) {\r\n return this._subsetCached.includesAtom(atom) ? this.opts.color : this.opts.baseColor;\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const subset = this._subsetCached;\r\n const atoms = residue._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n if (!subset.includesAtom(atoms[i])) {\r\n return this.opts.baseColor;\r\n }\r\n }\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nConditionalColorer.prototype.id = 'CO';\r\nConditionalColorer.prototype.name = 'Conditional';\r\nConditionalColorer.prototype.shortName = 'Conditional';\r\n\r\nexport default ConditionalColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass ConformationColorer extends Colorer {\r\n static id = 'CF';\r\n\r\n getAtomColor(atom, _complex) {\r\n return this.palette.getChainColor(String.fromCharCode(atom.location));\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.palette.defaultResidueColor;\r\n }\r\n}\r\n\r\nConformationColorer.prototype.id = 'CF';\r\nConformationColorer.prototype.name = 'Conformation';\r\nConformationColorer.prototype.shortName = 'Conformation';\r\n\r\nexport default ConformationColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Temperature\r\n *\r\n * @exports TemperatureColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Coloring algorithm based on temperature of chemical element.\r\n */\r\nclass TemperatureColorer extends Colorer {\r\n static id = 'TM';\r\n\r\n getAtomColor(atom, _complex) {\r\n const { opts } = this;\r\n let factor = 1;\r\n if (atom.temperature && opts) {\r\n if (opts.min === opts.max) {\r\n factor = atom.temperature > opts.max ? 1 : 0;\r\n } else {\r\n factor = (atom.temperature - opts.min) / (opts.max - opts.min);\r\n }\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const { opts } = this;\r\n if (!opts) {\r\n return this.palette.defaultGradientColor;\r\n }\r\n if (residue.temperature) {\r\n let factor = 0;\r\n if (opts.min === opts.max) {\r\n factor = residue.temperature > opts.max ? 1 : 0;\r\n } else {\r\n factor = (residue.temperature - opts.min) / (opts.max - opts.min);\r\n }\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n}\r\n\r\nTemperatureColorer.prototype.id = 'TM'; // [T]e[M]perature\r\nTemperatureColorer.prototype.name = 'Temperature';\r\nTemperatureColorer.prototype.shortName = 'Temperature';\r\n\r\nexport default TemperatureColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Occupancy\r\n *\r\n * @exports OccupancyColorer\r\n * @augments Occupancy\r\n * @constructor\r\n * @classdesc Coloring algorithm based on occupancy of chemical element.\r\n */\r\nclass OccupancyColorer extends Colorer {\r\n static id = 'OC';\r\n\r\n _getColorByOccupancy(occupancy, opts) {\r\n if (occupancy !== undefined) {\r\n const factor = 1 - occupancy;\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n\r\n getAtomColor(atom, _complex) {\r\n const { opts } = this;\r\n return this._getColorByOccupancy(atom.occupancy, opts);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const { opts } = this;\r\n return this._getColorByOccupancy(residue.occupancy, opts);\r\n }\r\n}\r\n\r\nOccupancyColorer.prototype.id = 'OC'; // [OC]cupancy\r\nOccupancyColorer.prototype.name = 'Occupancy';\r\nOccupancyColorer.prototype.shortName = 'Occupancy';\r\n\r\nexport default OccupancyColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass HydrophobicityColorer extends Colorer {\r\n static id = 'HY';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n let color = this.palette.defaultResidueColor;\r\n if (residue._type.hydrophobicity !== undefined) {\r\n // Kyte Doolitle hydro [-4.5,4.5]->[0.1]\r\n const min = -4.5;\r\n const max = 4.5;\r\n color = this.palette.getGradientColor((residue._type.hydrophobicity - min) / (max - min), this.opts.gradient);\r\n }\r\n return color;\r\n }\r\n}\r\n\r\nHydrophobicityColorer.prototype.id = 'HY';\r\nHydrophobicityColorer.prototype.name = 'Hydrophobicity';\r\nHydrophobicityColorer.prototype.shortName = 'Hydrophobicity';\r\n\r\nexport default HydrophobicityColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass MoleculeColorer extends Colorer {\r\n static id = 'MO';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const molecule = residue._molecule;\r\n const count = _complex.getMoleculeCount();\r\n if (count > 1) {\r\n return this.palette.getGradientColor((molecule.index - 1) / (count - 1), this.opts.gradient);\r\n }\r\n return this.palette.getGradientColor(0, this.opts.gradient);\r\n }\r\n}\r\n\r\nMoleculeColorer.prototype.id = 'MO';\r\nMoleculeColorer.prototype.name = 'Molecule';\r\nMoleculeColorer.prototype.shortName = 'Molecule';\r\n\r\nexport default MoleculeColorer;\r\n","import Colorer from './Colorer';\r\nimport Atom from '../../chem/Atom';\r\n\r\nfunction scaleColor(c, factor) {\r\n const r1 = (c >> 16) & 0xff;\r\n const g1 = (c >> 8) & 0xff;\r\n const b1 = c & 0xff;\r\n const r = factor * r1;\r\n const g = factor * g1;\r\n const b = factor * b1;\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @exports CarbonColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Bicolor coloring algorithm based on selection carbon atoms.\r\n */\r\nclass CarbonColorer extends Colorer {\r\n static id = 'CB';\r\n\r\n getAtomColor(atom, _complex) {\r\n const colorCarbon = this.opts.color;\r\n const colorNotCarbon = scaleColor(colorCarbon, this.opts.factor);\r\n return (atom.flags & Atom.Flags.CARBON) ? colorCarbon : colorNotCarbon;\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nCarbonColorer.prototype.id = 'CB';\r\nCarbonColorer.prototype.name = 'Carbon';\r\nCarbonColorer.prototype.shortName = 'Carbon';\r\n\r\nexport default CarbonColorer;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport ElementColorer from './colorers/ElementColorer';\r\nimport ResidueTypeColorer from './colorers/ResidueTypeColorer';\r\nimport SequenceColorer from './colorers/SequenceColorer';\r\nimport ChainColorer from './colorers/ChainColorer';\r\nimport SecondaryStructureColorer from './colorers/SecondaryStructureColorer';\r\nimport UniformColorer from './colorers/UniformColorer';\r\nimport ConditionalColorer from './colorers/ConditionalColorer';\r\nimport ConformationColorer from './colorers/ConformationColorer';\r\nimport TemperatureColorer from './colorers/TemperatureColorer';\r\nimport OccupancyColorer from './colorers/OccupancyColorer';\r\nimport HydrophobicityColorer from './colorers/HydrophobicityColorer';\r\nimport MoleculeColorer from './colorers/MoleculeColorer';\r\nimport CarbonColorer from './colorers/CarbonColorer';\r\n\r\nconst colorers = new EntityList([\r\n ElementColorer,\r\n ResidueTypeColorer,\r\n SequenceColorer,\r\n ChainColorer,\r\n SecondaryStructureColorer,\r\n UniformColorer,\r\n ConditionalColorer,\r\n ConformationColorer,\r\n TemperatureColorer,\r\n OccupancyColorer,\r\n HydrophobicityColorer,\r\n MoleculeColorer,\r\n CarbonColorer,\r\n]);\r\n\r\nexport default colorers;\r\n","import * as THREE from 'three';\r\nimport EntityList from '../utils/EntityList';\r\n\r\nfunction neutralColor(intensity) {\r\n return new THREE.Color(intensity, intensity, intensity);\r\n}\r\n\r\nconst materialList = [\r\n {\r\n id: 'DF',\r\n name: 'Diffuse',\r\n shortName: 'Diffuse',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'SF',\r\n name: 'Soft Plastic',\r\n shortName: 'Soft',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.1),\r\n shininess: 30,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'PL',\r\n name: 'Glossy Plastic',\r\n shortName: 'Glossy',\r\n uberOptions: {\r\n diffuse: neutralColor(0.56),\r\n specular: neutralColor(0.28),\r\n shininess: 100,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'ME',\r\n name: 'Metal',\r\n shortName: 'Metal',\r\n uberOptions: {\r\n diffuse: neutralColor(0.56),\r\n specular: neutralColor(0.55),\r\n shininess: 30,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'TR',\r\n name: 'Transparent',\r\n shortName: 'Transparent',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 0.5,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: true,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'GL',\r\n name: 'Glass',\r\n shortName: 'Glass',\r\n uberOptions: {\r\n diffuse: neutralColor(0.50),\r\n specular: neutralColor(0.65),\r\n shininess: 100,\r\n opacity: 0.5,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: true,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'BA',\r\n name: 'Backdrop',\r\n shortName: 'Backdrop',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: false,\r\n fog: false,\r\n depthWrite: false,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'TN',\r\n name: 'Toon',\r\n shortName: 'Toon',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: true,\r\n },\r\n }, {\r\n id: 'FL',\r\n name: 'Flat',\r\n shortName: 'Flat',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 0,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: false,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n },\r\n },\r\n];\r\n\r\nconst materials = new EntityList(materialList);\r\n\r\nexport default materials;\r\n","/**\r\n * Utils functions which is worked with meshes\r\n *\r\n * functions for doing something with all/specified meshes\r\n * functions for traversihg tree and create auxiliary meshes for transparency/shadowmaps...\r\n * functions for calculating data connected with meshes\r\n */\r\nimport * as THREE from 'three';\r\nimport UberMaterial from './shaders/UberMaterial';\r\nimport gfxutils from './gfxutils';\r\n\r\nfunction _gatherObjects(root, meshTypes) {\r\n const meshes = [];\r\n root.traverse((object) => {\r\n for (let i = 0; i < meshTypes.length; i++) {\r\n if (object instanceof meshTypes[i]) {\r\n meshes[meshes.length] = object;\r\n break;\r\n }\r\n }\r\n });\r\n return meshes;\r\n}\r\n\r\n// new mesh with the same geometry and specified material values and layer\r\nfunction createDerivativeMesh(mesh, values, layer) {\r\n const material = mesh.material.createInstance();\r\n material.setValues(values);\r\n\r\n const newMesh = new mesh.constructor(mesh.geometry, material);\r\n newMesh.material.needsUpdate = true;\r\n newMesh.applyMatrix4(mesh.matrix);\r\n newMesh.layers.set(layer);\r\n return newMesh;\r\n}\r\n\r\nfunction traverseMeshes(root, meshTypes, func) {\r\n const meshes = _gatherObjects(root, meshTypes);\r\n\r\n for (let i = 0, n = meshes.length; i < n; ++i) {\r\n const mesh = meshes[i];\r\n if (!mesh.parent) {\r\n continue;\r\n }\r\n func(mesh);\r\n }\r\n}\r\n\r\nfunction applyTransformsToMeshes(root, mtc) {\r\n const mtcCount = mtc.length;\r\n if (mtcCount < 1) {\r\n return;\r\n }\r\n\r\n const meshTypes = [THREE.Mesh, THREE.LineSegments, THREE.Line];\r\n traverseMeshes(root, meshTypes, (mesh) => {\r\n mesh.applyMatrix4(mtc[0]);\r\n for (let j = 1; j < mtcCount; ++j) {\r\n const newMesh = new mesh.constructor(mesh.geometry, mesh.material);\r\n mesh.parent.add(newMesh);\r\n newMesh.applyMatrix4(mtc[j]);\r\n }\r\n });\r\n}\r\n\r\nconst processTransparentMaterial = (function () {\r\n const matValues = {\r\n prepassTransparancy: true,\r\n fakeOpacity: false,\r\n transparent: false,\r\n colorFromDepth: false,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n mesh.material.setValues({ prepassTransparancy: false, fakeOpacity: false });\r\n mesh.material.needsUpdate = true;\r\n mesh.layers.set(gfxutils.LAYERS.TRANSPARENT);\r\n\r\n const prepassTranspMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.PREPASS_TRANSPARENT);\r\n mesh.parent.add(prepassTranspMesh);\r\n });\r\n };\r\n}());\r\n\r\nconst processColFromPosMaterial = (function () {\r\n const matValues = {\r\n colorFromPos: true,\r\n transparent: false,\r\n colorFromDepth: false,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n overrideColor: false,\r\n fogTransparent: false,\r\n attrColor: false,\r\n attrColor2: false,\r\n attrAlphaColor: false,\r\n fakeOpacity: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n const colFromPosMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.COLOR_FROM_POSITION);\r\n mesh.parent.add(colFromPosMesh);\r\n });\r\n };\r\n}());\r\n\r\nconst createShadowmapMaterial = (function () {\r\n const matValues = {\r\n colorFromDepth: true,\r\n orthoCam: true,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n if (!mesh.receiveShadow && mesh.material.shadowmap) { // remove shadow from non-receivers\r\n mesh.material.setValues({ shadowmap: false });\r\n }\r\n if (!mesh.material.lights) { // skip creating shadowmap meshes for materials without lighting\r\n return;\r\n }\r\n if (!mesh.castShadow) { // skip creating shadowmap meshes for non-casters\r\n return;\r\n }\r\n if (!gfxutils.belongToSelectLayers(mesh)) { // skip creating shadowmap meshes for selection layer\r\n return;\r\n }\r\n\r\n const shadowmapMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.SHADOWMAP);\r\n shadowmapMesh.isShadowmapMesh = true;\r\n mesh.parent.add(shadowmapMesh);\r\n });\r\n };\r\n}());\r\n\r\nfunction removeShadowmapMaterial(root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n if (mesh.isShadowmapMesh) {\r\n mesh.parent.remove(mesh);\r\n }\r\n });\r\n}\r\n\r\nfunction forEachMeshInGroup(group, process) {\r\n function processObj(object) {\r\n if (object instanceof THREE.Mesh) {\r\n process(object);\r\n }\r\n for (let i = 0, l = object.children.length; i < l; i++) {\r\n processObj(object.children[i]);\r\n }\r\n }\r\n processObj(group);\r\n}\r\n\r\nfunction _countMeshTriangles(mesh) {\r\n const geom = mesh.geometry;\r\n if (geom instanceof THREE.InstancedBufferGeometry) {\r\n const attribs = geom.attributes;\r\n for (const property in attribs) {\r\n if (attribs.hasOwnProperty(property) && attribs[property] instanceof THREE.InstancedBufferAttribute) {\r\n const currAttr = attribs[property];\r\n const indexSize = geom.index ? geom.index.array.length / 3 : 0;\r\n return indexSize * currAttr.array.length / currAttr.itemSize;\r\n }\r\n }\r\n return 0;\r\n }\r\n if (geom instanceof THREE.BufferGeometry) {\r\n return geom.index ? geom.index.array.length / 3 : 0;\r\n }\r\n return geom.faces ? geom.faces.length : 0;\r\n}\r\n\r\nfunction countTriangles(group) {\r\n let totalCount = 0;\r\n forEachMeshInGroup(group, (mesh) => {\r\n totalCount += _countMeshTriangles(mesh);\r\n });\r\n return totalCount;\r\n}\r\n\r\nexport default {\r\n applyTransformsToMeshes,\r\n processTransparentMaterial,\r\n processColFromPosMaterial,\r\n createShadowmapMaterial,\r\n removeShadowmapMaterial,\r\n forEachMeshInGroup,\r\n countTriangles,\r\n};\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport UberMaterial from './shaders/UberMaterial';\r\nimport gfxutils from './gfxutils';\r\nimport meshutils from './meshutils';\r\nimport settings from '../settings';\r\nimport materials from './materials';\r\nimport chem from '../chem';\r\n\r\nconst { selectors } = chem;\r\n\r\nclass Representation {\r\n constructor(index, mode, colorer, selector) {\r\n const startMaterialValues = {\r\n clipPlane: settings.now.draft.clipPlane,\r\n fogTransparent: settings.now.bg.transparent,\r\n shadowmap: settings.now.shadow.on,\r\n shadowmapType: settings.now.shadow.type,\r\n };\r\n this.index = index;\r\n this.mode = mode;\r\n this.colorer = colorer;\r\n this.selector = selector;\r\n this.selectorString = '';\r\n this.count = 0;\r\n this.material = new UberMaterial();\r\n this.material.setValues(startMaterialValues);\r\n this.material.setUberOptions({ fogAlpha: settings.now.fogAlpha });\r\n this.materialPreset = materials.first;\r\n this.needsRebuild = true;\r\n this.visible = true;\r\n\r\n // apply mode params & preset\r\n this.setMode(mode);\r\n }\r\n\r\n markAtoms(complex) {\r\n this.count = complex.markAtoms(this.selector, 1 << this.index);\r\n this.needsRebuild = true;\r\n return this.count;\r\n }\r\n\r\n unmarkAtoms(complex) {\r\n complex.clearAtomBits(1 << this.index);\r\n this.count = 0;\r\n }\r\n\r\n setMode(mode) {\r\n this.mode = mode;\r\n }\r\n\r\n setMaterialPreset(preset) {\r\n this.materialPreset = preset;\r\n this.material.setUberOptions(preset.uberOptions);\r\n this.material.setValues(preset.values);\r\n }\r\n\r\n reset() {\r\n this.geo = null;\r\n this.selectionGeo = null;\r\n }\r\n\r\n buildGeometry(complex) {\r\n this.reset();\r\n this.needsRebuild = false;\r\n\r\n if (settings.now.ao) {\r\n this.material.setValues({ normalsToGBuffer: settings.now.ao });\r\n }\r\n\r\n this.geo = this.mode.buildGeometry(complex, this.colorer, 1 << this.index, this.material);\r\n\r\n if (this.material.uberOptions.opacity < 0.99 && settings.now.transparency === 'prepass') {\r\n meshutils.processTransparentMaterial(this.geo, this.material);\r\n }\r\n this.geo.visible = this.visible;\r\n\r\n gfxutils.processObjRenderOrder(this.geo, this.materialPreset.id);\r\n meshutils.processColFromPosMaterial(this.geo, this.material);\r\n\r\n if (settings.now.shadow.on) {\r\n meshutils.createShadowmapMaterial(this.geo, this.material);\r\n }\r\n\r\n return this.geo;\r\n }\r\n\r\n buildSelectionGeometry(mask) {\r\n let sg = null;\r\n\r\n if (this.geo && ('getSubset' in this.geo)) {\r\n const meshes = this.geo.getSubset(mask);\r\n if (meshes && meshes.length > 0) {\r\n sg = new THREE.Group();\r\n sg.matrixAutoUpdate = false;\r\n sg.matrix = this.geo.matrix;\r\n\r\n for (let j = 0; j < meshes.length; j++) {\r\n const m = meshes[j];\r\n sg.add(m);\r\n }\r\n }\r\n }\r\n\r\n if (sg) {\r\n sg.visible = this.visible;\r\n }\r\n\r\n this.selectionGeo = sg;\r\n return this.selectionGeo;\r\n }\r\n\r\n /**\r\n * Create object that represents difference between current and another rep\r\n * anotherRep could be undefined. In this case everything is reported.\r\n */\r\n compare(repSettings) {\r\n const diff = {};\r\n\r\n const selStr = String(this.selector);\r\n if (!repSettings || selStr.valueOf() !== String(repSettings.selector).valueOf()) {\r\n diff.selector = selStr;\r\n }\r\n\r\n const modeDiff = this.mode.identify();\r\n if (!repSettings || Array.isArray(modeDiff) || modeDiff !== repSettings.mode) {\r\n diff.mode = modeDiff;\r\n }\r\n\r\n const colorerDiff = this.colorer.identify();\r\n if (!repSettings || Array.isArray(colorerDiff) || colorerDiff !== repSettings.colorer) {\r\n diff.colorer = colorerDiff;\r\n }\r\n\r\n if (!repSettings || this.materialPreset.id !== repSettings.material) {\r\n diff.material = this.materialPreset.id;\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n /**\r\n * Change representation. Write fields what was changed into new object, return it.\r\n */\r\n change(repSettings, complex, mode, color) {\r\n const diff = {};\r\n\r\n // modify selector\r\n if (repSettings.selector) {\r\n const newSelectorObject = selectors.parse(repSettings.selector).selector;\r\n const newSelector = String(newSelectorObject);\r\n if (this.selectorString !== newSelector) {\r\n diff.selector = newSelector;\r\n this.selectorString = newSelector;\r\n this.selector = newSelectorObject;\r\n this.markAtoms(complex);\r\n }\r\n }\r\n\r\n // modify mode\r\n if (repSettings.mode) {\r\n const newMode = repSettings.mode;\r\n if (!_.isEqual(this.mode.identify(), newMode)) {\r\n diff.mode = newMode;\r\n this.setMode(mode);\r\n }\r\n }\r\n\r\n // modify colorer\r\n if (repSettings.colorer) {\r\n const newColorer = repSettings.colorer;\r\n if (!_.isEqual(this.colorer.identify(), newColorer)) {\r\n diff.colorer = newColorer;\r\n this.colorer = color;\r\n }\r\n }\r\n\r\n // modify material\r\n if (repSettings.material) {\r\n const newMaterial = repSettings.material;\r\n if (!_.isEqual(this.materialPreset.id, newMaterial)) {\r\n diff.material = newMaterial;\r\n this.setMaterialPreset(materials.get(repSettings.material));\r\n }\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n show(visible) {\r\n this.visible = visible;\r\n if (this.geo) {\r\n this.geo.visible = visible;\r\n }\r\n if (this.selectionGeo) {\r\n this.selectionGeo.visible = visible;\r\n }\r\n }\r\n}\r\n\r\nexport default Representation;\r\n","import * as THREE from 'three';\r\nimport logger from './utils/logger';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport './gfx/modes';\r\n\r\nfunction _traverseComponentGroups(root, component, callback) {\r\n const { children } = root;\r\n if (!children) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n if (child._component === component) {\r\n callback(child);\r\n }\r\n if (child instanceof gfxutils.RCGroup) {\r\n _traverseComponentGroups(child, component, callback);\r\n }\r\n }\r\n}\r\n\r\nfunction ComplexEditor() {\r\n}\r\n\r\nclass ComplexComponentEditor extends ComplexEditor {\r\n constructor(complexVisual) {\r\n super();\r\n this._complexVisual = complexVisual;\r\n this._inProgress = false;\r\n }\r\n\r\n begin() {\r\n const complex = this._complexVisual.getComplex();\r\n\r\n // init component matrices\r\n this._componentTransforms = [];\r\n for (let i = 0; i < complex._components.length; ++i) {\r\n const component = complex._components[i];\r\n this._componentTransforms[component._index] = new THREE.Object3D();\r\n }\r\n\r\n this._inProgress = true;\r\n\r\n return true;\r\n }\r\n\r\n apply() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const complex = this._complexVisual.getComplex();\r\n\r\n for (let i = 0; i < complex._components.length; ++i) {\r\n this._bakeComponentTransform(complex._components[i]);\r\n }\r\n\r\n complex.onAtomPositionChanged();\r\n\r\n this._resetComponentTransform();\r\n\r\n this._complexVisual.finalizeEdit();\r\n }\r\n\r\n discard() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n this._resetComponentTransform();\r\n\r\n this._complexVisual.finalizeEdit();\r\n }\r\n\r\n getAltObj() {\r\n const res = {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n\r\n const visual = this._complexVisual;\r\n const component = visual.getSelectedComponent();\r\n\r\n if (component === null) {\r\n return res;\r\n }\r\n\r\n const selection = this._complexVisual.getSelectionGeo();\r\n const selectionMask = 1 << visual.getSelectionBit();\r\n let i;\r\n let j;\r\n let reprNode;\r\n let geo;\r\n\r\n // find all geo nodes for this component\r\n _traverseComponentGroups(visual, component, (child) => {\r\n res.objects.push(child);\r\n });\r\n\r\n // find all selection nodes for this component\r\n for (i = 0; i < selection.children.length; ++i) {\r\n reprNode = selection.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component') && geo._component === component) {\r\n res.objects.push(geo);\r\n }\r\n }\r\n }\r\n\r\n // add dummy object that stores component transformation\r\n res.objects.push(this._componentTransforms[component._index]);\r\n\r\n const bbmin = new THREE.Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n const bbmax = new THREE.Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n\r\n component.forEachResidue((residue) => {\r\n const atoms = residue._atoms;\r\n for (j = 0; j < atoms.length; ++j) {\r\n if (atoms[j].mask & selectionMask) {\r\n bbmin.min(atoms[j].position);\r\n bbmax.max(atoms[j].position);\r\n }\r\n }\r\n });\r\n\r\n res.pivot.lerpVectors(bbmin, bbmax, 0.5);\r\n return res;\r\n }\r\n\r\n _bakeComponentTransform(component) {\r\n const t = this._componentTransforms[component._index];\r\n if (t && (!(t.position.x === 0 && t.position.y === 0 && t.position.z === 0)\r\n || !(t.quaternion.x === 0 && t.quaternion.y === 0 && t.quaternion.z === 0 && t.quaternion.w === 1))) {\r\n t.updateMatrix();\r\n\r\n component.forEachResidue((residue) => {\r\n const atoms = residue._atoms;\r\n for (let j = 0; j < atoms.length; ++j) {\r\n atoms[j].position.applyMatrix4(t.matrix);\r\n }\r\n });\r\n }\r\n }\r\n\r\n _resetComponentTransform() {\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n let i;\r\n let j;\r\n let reprNode;\r\n let geo;\r\n\r\n for (i = 0; i < this._componentTransforms.length; ++i) {\r\n geo = this._componentTransforms[i];\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n\r\n // reset all geo nodes\r\n for (i = 0; i < visual.children.length; ++i) {\r\n reprNode = visual.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component')) {\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n }\r\n }\r\n\r\n // reset all selection nodes\r\n for (i = 0; i < selection.children.length; ++i) {\r\n reprNode = selection.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component')) {\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass ComplexFragmentEditor extends ComplexEditor {\r\n constructor(complexVisual) {\r\n super();\r\n this._complexVisual = complexVisual;\r\n this._inProgress = false;\r\n }\r\n\r\n begin() {\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n\r\n const atoms = this._getSelectionBorderAtoms();\r\n if (atoms.length < 1 || atoms.length > 2) {\r\n logger.error('Can only edit fragments with one or two bound atoms.');\r\n return false;\r\n }\r\n\r\n this._fragmentBoundAtoms = atoms;\r\n\r\n const selectionMask = 1 << visual.getSelectionBit();\r\n\r\n // hide selected fragment in main model\r\n visual.disableSubset(selectionMask, true);\r\n\r\n // hide selection geo in main model\r\n for (let k = 0; k < selection.children.length; ++k) {\r\n selection.children[k].visible = false;\r\n }\r\n\r\n // create visible fragment representation to rotate\r\n const pivotPos = atoms[0].position.clone();\r\n\r\n if (atoms.length === 2) {\r\n pivotPos.lerp(atoms[1].position, 0.5);\r\n }\r\n\r\n this._fragmentGeo = new THREE.Group();\r\n visual.add(this._fragmentGeo);\r\n this._fragmentGeo.position.copy(pivotPos);\r\n\r\n this._fragmentSelectionGeo = new THREE.Group();\r\n selection.add(this._fragmentSelectionGeo);\r\n this._fragmentSelectionGeo.position.copy(pivotPos);\r\n\r\n const offset = pivotPos.clone();\r\n offset.negate();\r\n\r\n for (let i = 0; i < visual.children.length; ++i) {\r\n const g = visual.children[i];\r\n if (!('getSubset' in g)) {\r\n continue;\r\n }\r\n\r\n const vg = new THREE.Group();\r\n this._fragmentGeo.add(vg);\r\n\r\n const sg = new THREE.Group();\r\n this._fragmentSelectionGeo.add(sg);\r\n\r\n const meshes = g.getSubset(selectionMask, true);\r\n for (let j = 0; j < meshes.length; j++) {\r\n const m = meshes[j];\r\n vg.add(m);\r\n m.position.copy(offset);\r\n }\r\n\r\n const smeshes = g.getSubset(selectionMask, true);\r\n for (let h = 0; h < smeshes.length; h++) {\r\n const sm = smeshes[h];\r\n sg.add(sm);\r\n sm.position.copy(offset);\r\n }\r\n }\r\n\r\n gfxutils.applySelectionMaterial(this._fragmentSelectionGeo);\r\n\r\n this._inProgress = true;\r\n return true;\r\n }\r\n\r\n apply() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const visual = this._complexVisual;\r\n const selectionBit = visual.getSelectionBit();\r\n\r\n const p = this._fragmentGeo.position;\r\n const m = this._fragmentGeo.matrix.clone();\r\n m.multiply(new THREE.Matrix4().makeTranslation(-p.x, -p.y, -p.z));\r\n\r\n this._bakeAtomTransform(m, 1 << selectionBit);\r\n\r\n // show selected fragment in main model\r\n visual.enableSubset(1 << selectionBit, true);\r\n\r\n visual.getComplex().onAtomPositionChanged();\r\n\r\n visual.finalizeEdit();\r\n }\r\n\r\n discard() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n\r\n this._fragmentGeo.parent.remove(this._fragmentGeo);\r\n\r\n // show selected fragment in main model\r\n visual.enableSubset(1 << visual.getSelectionBit(), true);\r\n\r\n // show selection geo in main model (+ remove fragment selection geo)\r\n for (let i = 0; i < selection.children.length; ++i) {\r\n const node = selection.children[i];\r\n if (node.visible) {\r\n selection.remove(node);\r\n } else {\r\n node.visible = true;\r\n }\r\n }\r\n\r\n visual.finalizeEdit();\r\n }\r\n\r\n isFreeRotationAllowed() {\r\n return (this._fragmentBoundAtoms.length < 2);\r\n }\r\n\r\n getAltObj() {\r\n const res = {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n\r\n res.objects.push(this._fragmentGeo, this._fragmentSelectionGeo);\r\n\r\n const boundAtoms = this._fragmentBoundAtoms;\r\n if (boundAtoms.length === 1) {\r\n if (boundAtoms[0].bonds.length === 1) {\r\n // single external bond allows rotation about bond axis\r\n const bond = boundAtoms[0].bonds[0];\r\n res.axis = new THREE.Vector3().subVectors(bond._right.position, bond._left.position);\r\n res.axis.normalize();\r\n res.axis.transformDirection(this._complexVisual.matrixWorld);\r\n }\r\n } else if (boundAtoms.length === 2) {\r\n // two bound atoms allow rotation only about axis running through their centers\r\n res.axis = new THREE.Vector3().subVectors(boundAtoms[1].position, boundAtoms[0].position);\r\n res.axis.normalize();\r\n res.axis.transformDirection(this._complexVisual.matrixWorld);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n _getSelectionBorderAtoms() {\r\n const complex = this._complexVisual.getComplex();\r\n\r\n const selectionMask = 1 << this._complexVisual.getSelectionBit();\r\n const atomHash = {};\r\n\r\n complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n atomHash[bond._left.index] = 1;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n atomHash[bond._right.index] = 1;\r\n }\r\n });\r\n\r\n const atoms = [];\r\n const keys = Object.keys(atomHash);\r\n for (let i = 0, n = keys.length; i < n; ++i) {\r\n const idx = keys[i];\r\n atoms.push(complex._atoms[idx]);\r\n }\r\n\r\n return atoms;\r\n }\r\n\r\n _bakeAtomTransform(matrix, mask) {\r\n this._complexVisual.getComplex().forEachAtom((atom) => {\r\n if (atom.mask & mask) {\r\n atom.position.applyMatrix4(matrix);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default {\r\n ComponentEditor: ComplexComponentEditor,\r\n FragmentEditor: ComplexFragmentEditor,\r\n};\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from './utils';\r\nimport logger from './utils/logger';\r\nimport chem from './chem';\r\nimport settings from './settings';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport modes from './gfx/modes';\r\nimport colorers from './gfx/colorers';\r\nimport palettes from './gfx/palettes';\r\nimport materials from './gfx/materials';\r\nimport Representation from './gfx/Representation';\r\nimport Visual from './Visual';\r\nimport ComplexVisualEdit from './ComplexVisualEdit';\r\nimport meshutils from './gfx/meshutils';\r\n\r\nconst { selectors } = chem;\r\n\r\nfunction lookupAndCreate(entityList, specs) {\r\n if (!Array.isArray(specs)) {\r\n specs = [specs];\r\n }\r\n const [id, opts] = specs;\r\n const Entity = entityList.get(id) || entityList.first;\r\n return new Entity(opts);\r\n}\r\n\r\nclass ComplexVisual extends Visual {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this._complex = dataSource;\r\n\r\n /** @type {Representation[]} */\r\n this._reprList = [];\r\n /** @type {?Representation} */\r\n this._repr = null;\r\n this._reprListChanged = true;\r\n\r\n this._selectionBit = 0;\r\n this._reprUsedBits = 0;\r\n this._selectionCount = 0;\r\n\r\n this._selectionGeometry = new THREE.Group();\r\n }\r\n\r\n getBoundaries() {\r\n return this._complex.getBoundaries();\r\n }\r\n\r\n release() {\r\n if (this._selectionGeometry.parent) {\r\n this._selectionGeometry.remove(this._selectionGeometry);\r\n }\r\n Visual.prototype.release.call(this);\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n getSelectionCount() {\r\n return this._selectionCount;\r\n }\r\n\r\n getSelectionGeo() {\r\n return this._selectionGeometry;\r\n }\r\n\r\n getSelectionBit() {\r\n return this._selectionBit;\r\n }\r\n\r\n getEditor() {\r\n return this._editor;\r\n }\r\n\r\n resetReps(reps) {\r\n // Create all necessary representations\r\n if (this._complex) {\r\n this._complex.clearAtomBits(~0);\r\n }\r\n this._reprListChanged = true;\r\n this._reprUsedBits = 0;\r\n this._reprList.length = reps.length;\r\n for (let i = 0, n = reps.length; i < n; ++i) {\r\n const rep = reps[i];\r\n\r\n let selector;\r\n let selectorString;\r\n if (typeof rep.selector === 'string') {\r\n selectorString = rep.selector;\r\n ({ selector } = selectors.parse(selectorString));\r\n } else if (typeof rep.selector === 'undefined') {\r\n selectorString = settings.now.presets.default[0].selector;\r\n ({ selector } = selectors.parse(selectorString));\r\n } else {\r\n ({ selector } = rep);\r\n selectorString = selector.toString();\r\n }\r\n const mode = lookupAndCreate(modes, rep.mode);\r\n const colorer = lookupAndCreate(colorers, rep.colorer);\r\n const material = materials.get(rep.material) || materials.first;\r\n\r\n this._reprList[i] = new Representation(i, mode, colorer, selector);\r\n this._reprList[i].setMaterialPreset(material);\r\n this._reprList[i].selectorString = selectorString;\r\n\r\n if (this._complex) {\r\n this._complex.markAtoms(selector, 1 << i);\r\n }\r\n\r\n this._reprUsedBits |= 1 << i;\r\n }\r\n this._repr = reps.length > 0 ? this._reprList[0] : null;\r\n\r\n this._selectionBit = reps.length;\r\n this._reprUsedBits |= 1 << this._selectionBit; // selection uses one bit\r\n this._selectionCount = 0;\r\n\r\n if (this._complex) {\r\n this._complex.update();\r\n }\r\n }\r\n\r\n /**\r\n * Get number of representations created so far.\r\n * @returns {number} Number of reps.\r\n */\r\n repCount() {\r\n return this._reprList.length;\r\n }\r\n\r\n /**\r\n * Get or set the current representation index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @returns {number} The current index.\r\n */\r\n repCurrent(index) {\r\n if (index >= 0 && index < this._reprList.length) {\r\n this._repr = this._reprList[index];\r\n } else {\r\n index = this._reprList.indexOf(this._repr);\r\n }\r\n return index;\r\n }\r\n\r\n /**\r\n * Get or set representation by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @param {object=} rep - Optional representation description.\r\n * @param {string=} rep.selector - Selector string.\r\n * @param {string=} rep.mode - Mode id.\r\n * @param {string=} rep.colorer - Colorer id.\r\n * @param {string=} rep.material - Material id.\r\n * @returns {Object} {desc, index, status} field desc contains rep description, index - index of correspondent rep,\r\n * status - one of three strings: 'created', 'changed', ''. 'created' means new rep was created during this function,\r\n * 'changed' - rep was changed during this function. '' - something else.\r\n */\r\n rep(index, rep) {\r\n // if index is missing then it is the current\r\n if (!rep && (index === undefined || index instanceof Object)) {\r\n rep = index;\r\n index = this.repCurrent();\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index > this._reprList.length) {\r\n logger.error(`Rep ${index} does not exist!`);\r\n return null;\r\n }\r\n\r\n // a special case of adding just after the end\r\n if (index === this._reprList.length) {\r\n const res = this.repAdd(rep);\r\n logger.warn(`Rep ${index} does not exist! New representation was created.`);\r\n return { desc: res.desc, index, status: 'created' };\r\n }\r\n\r\n // gather description\r\n const target = this._reprList[index];\r\n const desc = {\r\n selector: target.selectorString,\r\n mode: target.mode.identify(),\r\n colorer: target.colorer.identify(),\r\n material: target.materialPreset.id,\r\n };\r\n\r\n // modification is requested\r\n if (rep) {\r\n // modify\r\n const diff = target.change(\r\n rep,\r\n this._complex,\r\n lookupAndCreate(modes, rep.mode),\r\n lookupAndCreate(colorers, rep.colorer),\r\n );\r\n\r\n // something was changed\r\n if (!_.isEmpty(diff)) {\r\n target.needsRebuild = true;\r\n for (const key in diff) {\r\n if (diff.hasOwnProperty(key)) {\r\n desc[key] = diff[key];\r\n logger.debug(`rep[${index}].${key} changed to ${diff[key]}`);\r\n }\r\n }\r\n\r\n // safety trick: lower resolution for surface modes\r\n if (diff.mode && target.mode.isSurface\r\n && (settings.now.resolution === 'ultra' || settings.now.resolution === 'high')) {\r\n logger.report('Surface resolution was changed to \"medium\" to avoid hang-ups.');\r\n settings.set('resolution', 'medium');\r\n }\r\n return { desc, index, status: 'changed' };\r\n }\r\n }\r\n return { desc, index, status: '' };\r\n }\r\n\r\n /**\r\n * Get representation (not just description) by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @returns {?object} Representation.\r\n */\r\n repGet(index) {\r\n // if index is missing then it is the current\r\n if (index === undefined || index instanceof Object) {\r\n index = this.repCurrent();\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index >= this._reprList.length) {\r\n return null;\r\n }\r\n\r\n return this._reprList[index];\r\n }\r\n\r\n _getFreeReprIdx() {\r\n let bits = this._reprUsedBits;\r\n for (let i = 0; i <= ComplexVisual.NUM_REPRESENTATION_BITS; ++i, bits >>= 1) {\r\n if ((bits & 1) === 0) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * Add new representation.\r\n * @param {object=} rep - Representation description.\r\n * @returns {Object} {desc, index} field desc contains added rep description, index - index of this rep.\r\n */\r\n repAdd(rep) {\r\n if (this._reprList.length >= ComplexVisual.NUM_REPRESENTATION_BITS) {\r\n return null;\r\n }\r\n\r\n const newSelectionBit = this._getFreeReprIdx();\r\n if (newSelectionBit < 0) {\r\n return null; // no more slots for representations\r\n }\r\n\r\n const originalSelection = this.buildSelectorFromMask(1 << this._selectionBit);\r\n\r\n // Fill in default values\r\n const def = settings.now.presets.default[0];\r\n const desc = _.merge({\r\n selector: def.selector,\r\n mode: def.mode,\r\n colorer: def.colorer,\r\n material: def.material,\r\n }, rep);\r\n\r\n const selector = (typeof desc.selector === 'string') ? selectors.parse(desc.selector).selector : desc.selector;\r\n const target = new Representation(\r\n this._selectionBit,\r\n lookupAndCreate(modes, desc.mode),\r\n lookupAndCreate(colorers, desc.colorer),\r\n selector,\r\n );\r\n target.selectorString = selector.toString();\r\n target.setMaterialPreset(materials.get(desc.material));\r\n target.markAtoms(this._complex);\r\n this._reprList.push(target);\r\n\r\n // change selection bit\r\n this._selectionBit = newSelectionBit;\r\n this._reprUsedBits |= 1 << this._selectionBit;\r\n\r\n // restore selection using new selection bit\r\n this._complex.markAtoms(originalSelection, 1 << this._selectionBit);\r\n\r\n return { desc, index: this._reprList.length - 1 };\r\n }\r\n\r\n /**\r\n * Remove representation.\r\n * @param {number=} index - Zero-based representation index.\r\n */\r\n repRemove(index) {\r\n if (index === undefined) {\r\n index = this.repCurrent();\r\n }\r\n\r\n // catch out of bounds case\r\n let count = this._reprList.length;\r\n if (index < 0 || index >= count || count <= 1) { // do not allow to remove the single rep\r\n return;\r\n }\r\n\r\n const target = this._reprList[index];\r\n target.unmarkAtoms(this._complex);\r\n this._reprUsedBits &= ~(1 << target.index);\r\n\r\n this._reprList.splice(index, 1);\r\n\r\n // update current rep\r\n if (target === this._repr) {\r\n --count;\r\n index = index < count ? index : count - 1;\r\n this._repr = this._reprList[index];\r\n }\r\n this._reprListChanged = true;\r\n }\r\n\r\n /**\r\n * Hide representation.\r\n * @param {number} index - Zero-based representation index.\r\n * @param {boolean=} hide - Specify false to make rep visible, true to hide (by default).\r\n */\r\n repHide(index, hide) {\r\n if (hide === undefined) {\r\n hide = true;\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index >= this._reprList.length) {\r\n return;\r\n }\r\n\r\n const target = this._reprList[index];\r\n target.show(!hide);\r\n }\r\n\r\n /**\r\n * Select atoms with selector\r\n * @param {Selector} selector - selector\r\n * @param {boolean=} append - true to append selection atoms to current selection, false to rewrite selection\r\n */\r\n select(selector, append) {\r\n if (append) {\r\n this._selectionCount += this._complex.markAtomsAdditionally(selector, 1 << this._selectionBit);\r\n } else {\r\n this._selectionCount = this._complex.markAtoms(selector, 1 << this._selectionBit);\r\n }\r\n this._complex.updateStructuresMask();\r\n this.rebuildSelectionGeometry();\r\n }\r\n\r\n resetSelectionMask() {\r\n if (this._selectionCount !== 0) {\r\n this._selectionCount = 0;\r\n if (this._complex) {\r\n this._complex.clearAtomBits(1 << this._selectionBit);\r\n }\r\n }\r\n }\r\n\r\n updateSelectionMask(pickedObj) {\r\n const self = this;\r\n const { atom } = pickedObj;\r\n let { residue, chain, molecule } = pickedObj;\r\n const setMask = 1 << this._selectionBit;\r\n const clearMask = ~setMask;\r\n\r\n if (atom) {\r\n residue = atom.residue;\r\n chain = residue._chain;\r\n molecule = residue._molecule;\r\n\r\n if (atom.mask & setMask) {\r\n atom.mask &= clearMask;\r\n residue._mask &= clearMask;\r\n chain._mask &= clearMask;\r\n if (molecule) {\r\n molecule.mask &= clearMask;\r\n }\r\n this._selectionCount--;\r\n } else {\r\n atom.mask |= setMask;\r\n this._selectionCount++;\r\n\r\n // select residue if all atoms in it are selected\r\n residue.collectMask();\r\n // select chain and molecule if all residues in it are selected\r\n chain.collectMask();\r\n if (molecule) {\r\n molecule.collectMask();\r\n }\r\n }\r\n } else if (residue) {\r\n chain = residue._chain;\r\n molecule = residue._molecule;\r\n\r\n if (residue._mask & setMask) {\r\n residue._mask &= clearMask;\r\n chain._mask &= clearMask;\r\n residue.forEachAtom((a) => {\r\n if (a.mask & setMask) {\r\n a.mask &= clearMask;\r\n self._selectionCount--;\r\n }\r\n });\r\n } else {\r\n residue._mask |= setMask;\r\n residue.forEachAtom((a) => {\r\n if (!(a.mask & setMask)) {\r\n a.mask |= setMask;\r\n self._selectionCount++;\r\n }\r\n });\r\n\r\n // select chain and molecule if all residues in it are selected\r\n chain.collectMask();\r\n if (molecule) {\r\n molecule.collectMask();\r\n }\r\n }\r\n } else if (chain || molecule) {\r\n const obj = chain || molecule;\r\n if (obj._mask & setMask) {\r\n obj._mask &= clearMask;\r\n obj.forEachResidue((r) => {\r\n if (r._mask & setMask) {\r\n r._mask &= clearMask;\r\n r.forEachAtom((a) => {\r\n if (a.mask & setMask) {\r\n a.mask &= clearMask;\r\n self._selectionCount--;\r\n }\r\n });\r\n r._mask &= clearMask;\r\n }\r\n });\r\n } else {\r\n obj._mask |= setMask;\r\n obj.forEachResidue((r) => {\r\n if (!(r._mask & setMask)) {\r\n r._mask |= setMask;\r\n r.forEachAtom((a) => {\r\n if (!(a.mask & setMask)) {\r\n a.mask |= setMask;\r\n self._selectionCount++;\r\n }\r\n });\r\n const otherObj = chain ? r.getMolecule() : r.getChain();\r\n if (otherObj) {\r\n otherObj.collectMask();\r\n }\r\n }\r\n });\r\n }\r\n } else {\r\n this.resetSelectionMask();\r\n }\r\n }\r\n\r\n expandSelection() {\r\n const self = this;\r\n const selectionMask = 1 << this._selectionBit;\r\n const tmpMask = 1 << 31;\r\n\r\n // mark atoms to add\r\n this._complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n bond._right.mask |= tmpMask;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n bond._left.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // select marked atoms\r\n const deselectionMask = ~tmpMask;\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & tmpMask) {\r\n atom.mask = (atom.mask & deselectionMask) | selectionMask;\r\n ++self._selectionCount;\r\n }\r\n });\r\n\r\n this._complex.updateStructuresMask();\r\n }\r\n\r\n shrinkSelection() {\r\n const self = this;\r\n const selectionMask = 1 << this._selectionBit;\r\n const tmpMask = 1 << 31;\r\n\r\n // mark atoms neighbouring to unselected ones\r\n this._complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n bond._left.mask |= tmpMask;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n bond._right.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // mark hanging atoms\r\n this._complex.forEachAtom((atom) => {\r\n if ((atom.mask & selectionMask) && (atom.bonds.length === 1)) {\r\n atom.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // deselect marked atoms\r\n const deselectionMask = ~(selectionMask | tmpMask);\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & tmpMask) {\r\n atom.mask &= deselectionMask;\r\n --self._selectionCount;\r\n }\r\n });\r\n\r\n this._complex.updateStructuresMask();\r\n }\r\n\r\n getSelectedComponent() {\r\n const selectionMask = 1 << this._selectionBit;\r\n\r\n let component = null;\r\n let multiple = false;\r\n\r\n // find which component is selected (exclusively)\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & selectionMask) {\r\n if (component === null) {\r\n component = atom.residue._component;\r\n } else if (component !== atom.residue._component) {\r\n multiple = true;\r\n }\r\n }\r\n });\r\n\r\n return multiple ? null : component;\r\n }\r\n\r\n getSelectionCenter(center, includesAtom, selRule) {\r\n center.set(0.0, 0.0, 0.0);\r\n let count = 0;\r\n\r\n this._complex.forEachAtom((atom) => {\r\n if (includesAtom(atom, selRule)) {\r\n center.add(atom.position);\r\n count++;\r\n }\r\n });\r\n if (count === 0) {\r\n return false;\r\n }\r\n center.divideScalar(count);\r\n center.applyMatrix4(this.matrix);\r\n return true;\r\n }\r\n\r\n needsRebuild() {\r\n if (this._reprListChanged) {\r\n return true;\r\n }\r\n const reprList = this._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n if (repr.needsRebuild) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Rebuild molecule geometry asynchronously.\r\n */\r\n rebuild() {\r\n const self = this;\r\n\r\n // Destroy current geometry\r\n gfxutils.clearTree(this);\r\n\r\n return new Promise(((resolve) => {\r\n // Nothing to do?\r\n const complex = self._complex;\r\n if (!complex) {\r\n resolve();\r\n return;\r\n }\r\n\r\n let errorOccured = false;\r\n setTimeout(() => {\r\n console.time('build');\r\n const reprList = self._reprList;\r\n const palette = palettes.get(settings.now.palette) || palettes.first;\r\n let hasGeometry = false;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n repr.colorer.palette = palette;\r\n\r\n if (repr.needsRebuild) {\r\n repr.reset();\r\n\r\n try {\r\n repr.buildGeometry(complex);\r\n } catch (e) {\r\n if (e instanceof utils.OutOfMemoryError) {\r\n repr.needsRebuild = false;\r\n repr.reset();\r\n logger.error(`Not enough memory to build geometry for representation ${repr.index + 1}`);\r\n errorOccured = true;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n\r\n if (DEBUG && !errorOccured) {\r\n logger.debug(`Triangles count: ${meshutils.countTriangles(repr.geo)}`);\r\n }\r\n }\r\n\r\n hasGeometry = errorOccured || hasGeometry || gfxutils.groupHasGeometryToRender(repr.geo);\r\n\r\n if (repr.geo) {\r\n self.add(repr.geo);\r\n }\r\n }\r\n\r\n self._reprListChanged = false;\r\n\r\n console.timeEnd('build');\r\n resolve();\r\n }, 10);\r\n }));\r\n }\r\n\r\n setNeedsRebuild() {\r\n // invalidate all representations\r\n const reprList = this._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n reprList[i].needsRebuild = true;\r\n }\r\n }\r\n\r\n rebuildSelectionGeometry() {\r\n const mask = 1 << this._selectionBit;\r\n\r\n gfxutils.clearTree(this._selectionGeometry);\r\n\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const repr = this._reprList[i];\r\n const sg = repr.buildSelectionGeometry(mask);\r\n if (!sg) {\r\n continue;\r\n }\r\n\r\n this._selectionGeometry.add(sg);\r\n for (let j = 0; j < sg.children.length; j++) {\r\n const m = sg.children[j];\r\n\r\n // copy component transform (that's not applied yet)\r\n // TODO make this code obsolete, accessing editor is bad\r\n if (this._editor && this._editor._componentTransforms) {\r\n const t = this._editor._componentTransforms[m._component._index];\r\n if (t) {\r\n m.position.copy(t.position);\r\n m.quaternion.copy(t.quaternion);\r\n }\r\n }\r\n }\r\n\r\n gfxutils.applySelectionMaterial(sg);\r\n }\r\n }\r\n\r\n _buildSelectorFromSortedLists(atoms, residues, chains) {\r\n const complex = this._complex;\r\n\r\n function optimizeList(list) {\r\n const result = [];\r\n let k = 0;\r\n let first = NaN;\r\n let last = NaN;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n const value = list[i];\r\n if (value === last + 1) {\r\n last = value;\r\n } else {\r\n if (!Number.isNaN(first)) {\r\n result[k++] = new selectors.Range(first, last);\r\n }\r\n first = last = value;\r\n }\r\n }\r\n if (!Number.isNaN(first)) {\r\n result[k] = new selectors.Range(first, last);\r\n }\r\n return result;\r\n }\r\n\r\n let expression = null;\r\n if (chains.length === complex._chains.length) {\r\n expression = selectors.all();\r\n } else {\r\n let selector;\r\n if (chains.length > 0) {\r\n selector = selectors.chain(chains);\r\n expression = expression ? selectors.or(expression, selector) : selector;// NOSONAR\r\n }\r\n if (Object.keys(residues).length > 0) {\r\n for (const ch in residues) {\r\n if (residues.hasOwnProperty(ch)) {\r\n selector = selectors.and(\r\n selectors.chain(ch),\r\n selectors.residx(optimizeList(residues[ch])),\r\n );\r\n expression = expression ? selectors.or(expression, selector) : selector;\r\n }\r\n }\r\n }\r\n if (atoms.length > 0) {\r\n selector = selectors.serial(optimizeList(atoms));\r\n expression = expression ? selectors.or(expression, selector) : selector;\r\n }\r\n\r\n if (!expression) {\r\n expression = selectors.none();\r\n }\r\n }\r\n\r\n return expression;\r\n }\r\n\r\n buildSelectorFromMask(mask) {\r\n const complex = this._complex;\r\n const chains = [];\r\n const residues = {};\r\n const atoms = [];\r\n\r\n complex.forEachChain((chain) => {\r\n if (chain._mask & mask) {\r\n chains.push(chain._name);\r\n }\r\n });\r\n\r\n complex.forEachResidue((residue) => {\r\n if (residue._mask & mask && !(residue._chain._mask & mask)) {\r\n const c = residue._chain._name;\r\n if (!(c in residues)) {\r\n residues[c] = [residue._index];\r\n } else {\r\n residues[c].push(residue._index);\r\n }\r\n }\r\n });\r\n\r\n complex.forEachAtom((atom) => {\r\n if (atom.mask & mask && !(atom.residue._mask & mask)) {\r\n atoms.push(atom.serial);\r\n }\r\n });\r\n\r\n return this._buildSelectorFromSortedLists(atoms, residues, chains);\r\n }\r\n\r\n forSelectedResidues(process) {\r\n const selectionMask = 1 << this._selectionBit;\r\n this._complex.forEachResidue((residue) => {\r\n if (residue._mask & selectionMask) {\r\n process(residue);\r\n }\r\n });\r\n }\r\n\r\n beginComponentEdit() {\r\n if (this._editor) {\r\n return null;\r\n }\r\n\r\n const editor = new ComplexVisualEdit.ComponentEditor(this);\r\n if (!editor.begin()) {\r\n return null;\r\n }\r\n\r\n this._editor = editor;\r\n return editor;\r\n }\r\n\r\n beginFragmentEdit() {\r\n if (this._editor) {\r\n return null;\r\n }\r\n\r\n const editor = new ComplexVisualEdit.FragmentEditor(this);\r\n if (!editor.begin()) {\r\n return null;\r\n }\r\n\r\n this._editor = editor;\r\n return editor;\r\n }\r\n\r\n // should only be called by editors\r\n finalizeEdit() {\r\n this._editor = null;\r\n }\r\n\r\n setMaterialValues(values, needTraverse = false, process = undefined) {\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const rep = this._reprList[i];\r\n rep.material.setValues(values);\r\n if (needTraverse) {\r\n rep.geo.traverse((object) => {\r\n if (object instanceof THREE.Mesh) {\r\n object.material.setValues(values);\r\n\r\n if (process !== undefined) {\r\n process(object);\r\n }\r\n\r\n object.material.needsUpdate = true;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n setUberOptions(values) {\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const rep = this._reprList[i];\r\n rep.material.setUberOptions(values);\r\n }\r\n }\r\n\r\n /**\r\n * Build selector that contains all atoms within given distance from group of atoms\r\n * @param {Selector} selector - selector describing source group of atoms\r\n * @param {number} radius - distance\r\n * @returns {Selector} selector describing result group of atoms\r\n */\r\n within(selector, radius) {\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return false;\r\n }\r\n\r\n // mark atoms of the group as selected\r\n const selectionMask = 1 << this._selectionBit;\r\n this._complex.markAtoms(selector, selectionMask);\r\n\r\n // mark all atoms within distance as selected\r\n if (vw) {\r\n vw.forEachAtomWithinDistFromMasked(this._complex, selectionMask, Number(radius), (atom) => {\r\n atom.mask |= selectionMask;\r\n });\r\n }\r\n\r\n // update selection count\r\n this._selectionCount = this._complex.countAtomsByMask(selectionMask);\r\n\r\n // update secondary structure mask\r\n this._complex.updateStructuresMask();\r\n\r\n return this.buildSelectorFromMask(selectionMask);\r\n }\r\n}\r\n// 32 bits = 30 bits for reps + 1 for selection + 1 for selection expansion\r\nComplexVisual.NUM_REPRESENTATION_BITS = 30;\r\n\r\nexport default ComplexVisual;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexVolumeFaces from './VolumeFaces.vert';\r\nimport fragmentVolumeFaces from './VolumeFaces.frag';\r\nimport vertexVolume from './Volume.vert';\r\nimport fragmentVolume from './Volume.frag';\r\nimport vertexFarPlane from './VolumeFarPlane.vert';\r\nimport fragmentFarPlane from './VolumeFarPlane.frag';\r\nimport settings from '../../settings';\r\n\r\nconst volumeUniforms = THREE.UniformsUtils.merge([\r\n {\r\n volumeDim: { type: 'v3', value: new THREE.Vector3(512, 512, 512) },\r\n tileTex: { type: 't', value: null },\r\n tileTexSize: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n tileStride: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n\r\n boxAngles: { type: 'v3', value: new THREE.Vector3(1, 1, 1) },\r\n delta: { type: 'v3', value: new THREE.Vector3(0, 0, 0) },\r\n\r\n _isoLevel0: { type: 'v2', value: new THREE.Vector3(0.5, 0.75, 1.0) },\r\n _flipV: { type: 'f', value: 0.0 },\r\n _BFLeft: { type: 't', value: null },\r\n _BFRight: { type: 't', value: null },\r\n _FFLeft: { type: 't', value: null },\r\n _FFRight: { type: 't', value: null },\r\n _WFFLeft: { type: 't', value: null },\r\n _WFFRight: { type: 't', value: null },\r\n },\r\n]);\r\n\r\nfunction overrideUniforms(params, defUniforms) {\r\n const uniforms = THREE.UniformsUtils.clone(defUniforms);\r\n for (const p in params) {\r\n if (uniforms.hasOwnProperty(p)) {\r\n uniforms[p].value = params[p];\r\n }\r\n }\r\n return uniforms;\r\n}\r\n\r\nfunction facesPosMaterialParams(params, sideType) {\r\n return {\r\n uniforms: overrideUniforms(params, {}),\r\n vertexShader: vertexVolumeFaces,\r\n fragmentShader: fragmentVolumeFaces,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n side: sideType,\r\n };\r\n}\r\n\r\nclass BackFacePosMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const backFaceParams = facesPosMaterialParams(params, THREE.BackSide);\r\n super(backFaceParams);\r\n }\r\n}\r\n\r\nclass ShaderParams {\r\n constructor(params, uniforms, vertexShader, fragmentShader) {\r\n this.uniforms = overrideUniforms(params, uniforms);\r\n this.vertexShader = vertexShader;\r\n this.fragmentShader = fragmentShader;\r\n this.transparent = false;\r\n this.depthTest = false;\r\n this.depthWrite = false;\r\n this.side = THREE.FrontSide;\r\n }\r\n}\r\n\r\nclass BackFacePosMaterialFarPlane extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const matUniforms = THREE.UniformsUtils.merge([\r\n {\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n farZ: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n matWorld2Volume: { type: '4fv', value: new THREE.Matrix4() },\r\n },\r\n ]);\r\n\r\n const shaderParams = new ShaderParams(params, matUniforms, vertexFarPlane, fragmentFarPlane);\r\n super(shaderParams);\r\n }\r\n}\r\n\r\nclass FrontFacePosMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const frontFaceParams = facesPosMaterialParams(params, THREE.FrontSide);\r\n super(frontFaceParams);\r\n }\r\n}\r\n\r\nclass VolumeMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const shaderParams = new ShaderParams(params, volumeUniforms, vertexVolume, fragmentVolume);\r\n shaderParams.transparent = true;\r\n shaderParams.depthTest = true;\r\n\r\n super(shaderParams);\r\n this.updateDefines();\r\n }\r\n\r\n updateDefines() {\r\n this.defines = {\r\n ISO_MODE: settings.now.modes.VD.isoMode,\r\n STEPS_COUNT: settings.now.modes.VD.polyComplexity[settings.now.resolution] * 100,\r\n };\r\n this.needsUpdate = true;\r\n }\r\n}\r\n\r\nexport default {\r\n BackFacePosMaterial,\r\n BackFacePosMaterialFarPlane,\r\n FrontFacePosMaterial,\r\n VolumeMaterial,\r\n};\r\n","import * as THREE from 'three';\r\nimport VolumeMaterial from './shaders/VolumeMaterial';\r\nimport settings from '../settings';\r\n\r\nclass VolumeMesh extends THREE.Mesh {\r\n volumeInfo = {}; // data for noise filter\r\n\r\n constructor() {\r\n const geo = new THREE.BufferGeometry();\r\n super(geo);\r\n this.clipPlane = new THREE.Plane();\r\n const size = new THREE.Vector3(0.5, 0.5, 0.5);\r\n this.size = size;\r\n\r\n this.cullFlag = [\r\n true, true, true, true,\r\n true, true, true, true,\r\n false, false, false, false, false, false,\r\n ];\r\n\r\n this.faces = [\r\n { indices: [], norm: new THREE.Vector3(0, 0, -1) },\r\n { indices: [], norm: new THREE.Vector3(0, 0, 1) },\r\n { indices: [], norm: new THREE.Vector3(0, -1, 0) },\r\n { indices: [], norm: new THREE.Vector3(0, 1, 0) },\r\n { indices: [], norm: new THREE.Vector3(-1, 0, 0) },\r\n { indices: [], norm: new THREE.Vector3(1, 0, 0) },\r\n { indices: [], norm: new THREE.Vector3(0, 0, 0) },\r\n ];\r\n\r\n this.vertices = [\r\n new THREE.Vector3(-size.x, -size.y, -size.z),\r\n new THREE.Vector3(-size.x, size.y, -size.z),\r\n new THREE.Vector3(size.x, -size.y, -size.z),\r\n new THREE.Vector3(size.x, size.y, -size.z),\r\n new THREE.Vector3(-size.x, -size.y, size.z),\r\n new THREE.Vector3(-size.x, size.y, size.z),\r\n new THREE.Vector3(size.x, -size.y, size.z),\r\n new THREE.Vector3(size.x, size.y, size.z),\r\n new THREE.Vector3(0.0, 0.0, 0.0), // Placeholder for section\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n ];\r\n\r\n geo.setAttribute('position', new THREE.BufferAttribute(new Float32Array(this.vertices.length * 3), 3));\r\n\r\n this.name = 'VolumeMesh';\r\n }\r\n\r\n static _corners = [\r\n // x, y, z, edge1, edge2, edge3\r\n [-1, -1, -1, 0, 4, 8],\r\n [1, -1, -1, 0, 5, 9],\r\n [1, 1, -1, 1, 5, 10],\r\n [-1, 1, -1, 1, 4, 11],\r\n [-1, -1, 1, 2, 6, 8],\r\n [1, -1, 1, 2, 7, 9],\r\n [1, 1, 1, 3, 7, 10],\r\n [-1, 1, 1, 3, 6, 11],\r\n ];\r\n\r\n static _edges = [\r\n // corner1, corner2, center_x, center_y, center_z\r\n [0, 1, 0, -1, -1],\r\n [2, 3, 0, 1, -1],\r\n [4, 5, 0, -1, 1],\r\n [6, 7, 0, 1, 1],\r\n [0, 3, -1, 0, -1],\r\n [1, 2, 1, 0, -1],\r\n [4, 7, -1, 0, 1],\r\n [5, 6, 1, 0, 1],\r\n [0, 4, -1, -1, 0],\r\n [1, 5, 1, -1, 0],\r\n [2, 6, -1, 1, 0],\r\n [3, 7, 1, 1, 0],\r\n ];\r\n\r\n static _edgeIntersections = (function () {\r\n const edgeIntersections = [];\r\n for (let j = 0; j < 12; ++j) {\r\n edgeIntersections.push(new THREE.Vector3());\r\n }\r\n return edgeIntersections;\r\n }());\r\n\r\n _updateVertices() {\r\n // Algorithm:\r\n // 1. Get plane parameters\r\n // 2. Compute culling flags for all vertices\r\n // 3. If intersection occurs => compute from 3 to 6 intersection points\r\n const corners = VolumeMesh._corners;\r\n const edges = VolumeMesh._edges;\r\n const edgeIntersections = VolumeMesh._edgeIntersections;\r\n\r\n let i;\r\n\r\n const norm = this.clipPlane.normal;\r\n const D = this.clipPlane.constant;\r\n\r\n const vert = this.vertices;\r\n const { size } = this;\r\n\r\n const cornerMark = [0, 0, 0, 0, 0, 0, 0, 0];\r\n const edgeMark = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\r\n\r\n const curEdge = new THREE.Vector3();\r\n let curEdgeInter = null;\r\n\r\n function CheckX() {\r\n if (norm.x === 0) return 0;\r\n const x = -(norm.dot(curEdge) + D) / norm.x;\r\n if (-size.x <= x && x <= size.x) {\r\n curEdgeInter.set(x, curEdge.y, curEdge.z);\r\n if (x === size.x) return 2;\r\n if (x === -size.x) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n function CheckY() {\r\n if (norm.y === 0) return 0;\r\n const y = -(norm.dot(curEdge) + D) / norm.y;\r\n if (-size.y <= y && y <= size.y) {\r\n curEdgeInter.set(curEdge.x, y, curEdge.z);\r\n if (y === size.y) return 2;\r\n if (y === -size.y) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n function CheckZ() {\r\n if (norm.z === 0) return 0;\r\n const z = -(norm.dot(curEdge) + D) / norm.z;\r\n if (-size.z <= z && z <= size.z) {\r\n curEdgeInter.set(curEdge.x, curEdge.y, z);\r\n if (z === size.z) return 2;\r\n if (z === -size.z) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n // for each edge\r\n for (let curEdgeIdx = 0; curEdgeIdx < 12; ++curEdgeIdx) {\r\n const curEdgeSource = edges[curEdgeIdx];\r\n curEdgeInter = edgeIntersections[curEdgeIdx];\r\n\r\n curEdge.set(curEdgeSource[2], curEdgeSource[3], curEdgeSource[4]);\r\n curEdge.multiply(size);\r\n\r\n // calculate intersection point\r\n let flag = 0;\r\n if (curEdgeSource[2] === 0) flag = CheckX();\r\n if (curEdgeSource[3] === 0) flag = CheckY();\r\n if (curEdgeSource[4] === 0) flag = CheckZ();\r\n\r\n // mark corresponding corner (if plane cuts through one)\r\n if (flag === -2) {\r\n cornerMark[curEdgeSource[0]] = 1;\r\n } else if (flag === 2) {\r\n cornerMark[curEdgeSource[1]] = 1;\r\n } else if (flag === 0) {\r\n // edge is not intersected by the plane (doesn't produce a vertex)\r\n edgeMark[curEdgeIdx] = 0;\r\n }\r\n }\r\n\r\n const face = {\r\n indices: [],\r\n norm: norm.clone().negate(),\r\n };\r\n\r\n let nextVertex = 8;\r\n\r\n // for each marked corner\r\n for (i = 0; i < 8; ++i) {\r\n if (cornerMark[i] === 1) {\r\n // add corner as vertex to the face\r\n vert[nextVertex].set(corners[i][0], corners[i][1], corners[i][2]).multiply(size);\r\n face.indices.push(nextVertex++);\r\n // skip adjacent edges\r\n edgeMark[corners[i][3]] = 0;\r\n edgeMark[corners[i][4]] = 0;\r\n edgeMark[corners[i][5]] = 0;\r\n }\r\n }\r\n\r\n // for each edge that has internal intersection\r\n for (i = 0; i < 12; ++i) {\r\n if (edgeMark[i] === 1) {\r\n // add intersection point as vertex to the face\r\n vert[nextVertex].copy(edgeIntersections[i]);\r\n face.indices.push(nextVertex++);\r\n }\r\n }\r\n\r\n this.faces[6] = face;\r\n\r\n const diff = new THREE.Vector3();\r\n const coplanarPoint = new THREE.Vector3();\r\n this.clipPlane.coplanarPoint(coplanarPoint);\r\n for (i = 0; i < vert.length; ++i) {\r\n this.cullFlag[i] = false;\r\n if (i < 8) {\r\n // corners should be culled by clipping plane\r\n diff.subVectors(vert[i], coplanarPoint);\r\n this.cullFlag[i] = (norm.dot(diff) >= 0.0);\r\n } else if (i < 8 + face.indices.length) {\r\n // cross section vertices don't get culled\r\n this.cullFlag[i] = true;\r\n }\r\n }\r\n\r\n // write data to vertex buffer\r\n const positions = this.geometry.getAttribute('position');\r\n let idx = 0;\r\n for (i = 0; i < vert.length; ++i) {\r\n positions.array[idx++] = vert[i].x;\r\n positions.array[idx++] = vert[i].y;\r\n positions.array[idx++] = vert[i].z;\r\n }\r\n positions.needsUpdate = true;\r\n }\r\n\r\n _collectVertices(face, filter) {\r\n let i;\r\n const vert = this.vertices;\r\n face.indices = [];\r\n for (i = 0; i < vert.length; ++i) {\r\n if (this.cullFlag[i] && filter(vert[i])) {\r\n face.indices.push(i);\r\n }\r\n }\r\n }\r\n\r\n _sortIndices(face, right) {\r\n let i;\r\n let j;\r\n const vert = this.vertices;\r\n const angle = [];\r\n\r\n const dir = new THREE.Vector3();\r\n for (i = 1; i < face.indices.length; ++i) {\r\n dir.subVectors(vert[face.indices[i]], vert[face.indices[0]]);\r\n dir.normalize();\r\n dir.cross(right);\r\n dir.negate();\r\n angle[i] = face.norm.dot(dir);\r\n }\r\n\r\n // Exchange sort\r\n for (i = 1; i < face.indices.length - 1; ++i) {\r\n for (j = i + 1; j < face.indices.length; ++j) {\r\n if (angle[j] < angle[i]) {\r\n // swap\r\n let t = angle[i];\r\n angle[i] = angle[j];\r\n angle[j] = t;\r\n\r\n t = face.indices[i];\r\n face.indices[i] = face.indices[j];\r\n face.indices[j] = t;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _updateIndices() {\r\n // Algorithm:\r\n // 1. Get plane vertices (from 3 to 6 vertices)\r\n // 2. Get \"right\" vector in plane\r\n // 3. Sort vertices using Graham-like method\r\n // 4. Create indices\r\n\r\n let i;\r\n let faceIdx;\r\n let face;\r\n const vert = this.vertices;\r\n const { size } = this;\r\n\r\n this._collectVertices(this.faces[0], (vertex) => vertex.z === -size.z);\r\n this._collectVertices(this.faces[1], (vertex) => vertex.z === size.z);\r\n this._collectVertices(this.faces[2], (vertex) => vertex.y === -size.y);\r\n this._collectVertices(this.faces[3], (vertex) => vertex.y === size.y);\r\n this._collectVertices(this.faces[4], (vertex) => vertex.x === -size.x);\r\n this._collectVertices(this.faces[5], (vertex) => vertex.x === size.x);\r\n\r\n const vCenter = new THREE.Vector3();\r\n const vRight = new THREE.Vector3();\r\n const vDir = new THREE.Vector3();\r\n\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n\r\n if (face.indices.length === 0) continue;\r\n\r\n vCenter.set(0, 0, 0);\r\n for (i = 0; i < face.indices.length; ++i) {\r\n vCenter.add(vert[face.indices[i]]);\r\n }\r\n vCenter.multiplyScalar(1.0 / face.indices.length);\r\n vRight.subVectors(vert[face.indices[0]], vCenter);\r\n vRight.normalize();\r\n\r\n const rightProj = [];\r\n for (i = 0; i < face.indices.length; ++i) {\r\n vDir.subVectors(vert[face.indices[i]], vCenter);\r\n rightProj[i] = vDir.dot(vRight);\r\n }\r\n for (i = 1; i < face.indices.length; ++i) {\r\n if (rightProj[i] < rightProj[0]) {\r\n // swap\r\n let t = rightProj[0];\r\n rightProj[0] = rightProj[i];\r\n rightProj[i] = t;\r\n\r\n [t] = face.indices;\r\n face.indices[0] = face.indices[i];\r\n face.indices[i] = t;\r\n }\r\n }\r\n\r\n this._sortIndices(face, vRight);\r\n }\r\n\r\n let numIndices = 0;\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n if (face.indices.length >= 3) {\r\n numIndices += 3 * (face.indices.length - 2);\r\n }\r\n }\r\n let offset = 0;\r\n const indices = new Uint16Array(numIndices);\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n for (i = 0; i < face.indices.length - 2; ++i) {\r\n indices[offset] = face.indices[0]; // eslint-disable-line prefer-destructuring\r\n indices[offset + 1] = face.indices[i + 1];\r\n indices[offset + 2] = face.indices[i + 2];\r\n offset += 3;\r\n }\r\n }\r\n\r\n this.geometry.setIndex(new THREE.BufferAttribute(indices, 1));\r\n }\r\n\r\n setDataSource(dataSource) {\r\n const vm = new VolumeMaterial.VolumeMaterial();\r\n const dim = dataSource.getDimensions();\r\n const stride = dataSource.getTiledTextureStride();\r\n const texture = dataSource.buildTiledTexture();\r\n const bbox = dataSource.getBox();\r\n vm.uniforms.volumeDim.value.set(dim[0], dim[1], dim[2]);\r\n vm.uniforms.tileTex.value = texture;\r\n vm.uniforms.tileTexSize.value.set(texture.image.width, texture.image.height);\r\n vm.uniforms.tileStride.value.set(stride[0], stride[1]);\r\n Object.assign(this.volumeInfo, dataSource.getVolumeInfo());\r\n\r\n const volInfo = this.volumeInfo;\r\n vm.uniforms.delta.value.copy(volInfo.delta);\r\n vm.uniforms.boxAngles.value.set(volInfo.obtuseAngle[0], volInfo.obtuseAngle[1], volInfo.obtuseAngle[2]);\r\n\r\n this.material = vm;\r\n\r\n bbox.getSize(this.scale);\r\n bbox.getCenter(this.position);\r\n }\r\n\r\n _updateIsoLevel() {\r\n const { kSigma, kSigmaMed, kSigmaMax } = settings.now.modes.VD;\r\n const volInfo = this.volumeInfo;\r\n const mean = volInfo.dmean - volInfo.dmin;\r\n const span = volInfo.dmax - volInfo.dmin;\r\n const level = (k) => (mean + k * volInfo.sd) / span;\r\n this.material.uniforms._isoLevel0.value.set(level(kSigma), level(kSigmaMed), level(kSigmaMax));\r\n }\r\n\r\n static _nearClipPlaneOffset = 0.2;\r\n\r\n static _pos = new THREE.Vector3();\r\n\r\n static _norm = new THREE.Vector3();\r\n\r\n static _norm4D = new THREE.Vector4();\r\n\r\n static _matrixWorldToLocal = new THREE.Matrix4();\r\n\r\n static _clipPlane = new THREE.Plane();\r\n\r\n rebuild(camera) {\r\n const nearClipPlaneOffset = VolumeMesh._nearClipPlaneOffset;\r\n const pos = VolumeMesh._pos;\r\n const norm = VolumeMesh._norm;\r\n const norm4D = VolumeMesh._norm4D;\r\n const matrixWorldToLocal = VolumeMesh._matrixWorldToLocal;\r\n const clipPlane = VolumeMesh._clipPlane;\r\n\r\n this._updateIsoLevel();\r\n\r\n // get clip plane in local space\r\n camera.getWorldDirection(norm);\r\n camera.getWorldPosition(pos);\r\n pos.addScaledVector(norm, camera.near + nearClipPlaneOffset);\r\n\r\n // transform pos to local CS\r\n matrixWorldToLocal.copy(this.matrixWorld).invert();\r\n pos.applyMatrix4(matrixWorldToLocal);\r\n\r\n // transform norm to local CS\r\n norm4D.set(norm.x, norm.y, norm.z, 0.0); // NOTE: use homogeneous norm for proper transformation\r\n norm4D.applyMatrix4(matrixWorldToLocal);\r\n norm.copy(norm4D);\r\n norm.normalize();\r\n\r\n clipPlane.setFromNormalAndCoplanarPoint(norm, pos);\r\n\r\n if (!this.clipPlane.equals(clipPlane)) {\r\n this.clipPlane = clipPlane.clone();\r\n this._updateVertices();\r\n this._updateIndices();\r\n }\r\n }\r\n}\r\n\r\nexport default VolumeMesh;\r\n","import * as THREE from 'three';\r\nimport gfxutils from './gfxutils';\r\n\r\nfunction _flattenArray(input) {\r\n const n = input.length;\r\n const output = new Float32Array(n * 3);\r\n for (let i = 0; i < n; ++i) {\r\n const j = 3 * i;\r\n const v = input[i];\r\n output[j] = v.x;\r\n output[j + 1] = v.y;\r\n output[j + 2] = v.z;\r\n }\r\n return output;\r\n}\r\n\r\nclass VolumeBounds {\r\n static _projectionTable = { // corresponds between (origin axes and angles between them) and between saving vector coordinates\r\n XY: ['x', 2],\r\n XZ: ['y', 1],\r\n YZ: ['z', 0],\r\n };\r\n\r\n constructor(bBox, volInfo) {\r\n const { delta } = volInfo; // {x: XY, y : XZ, z: YZ}\r\n const { obtuseAngle } = volInfo; // 1 - obtuse, 0 - acute\r\n\r\n const bSize = new THREE.Vector3();\r\n bBox.getSize(bSize);\r\n bSize.multiplyScalar(0.5);\r\n\r\n const offsetVert = this._getBaseVertices(delta, obtuseAngle);\r\n\r\n const geometry = new THREE.BufferGeometry();\r\n const vertices = [];\r\n\r\n for (let i = 0; i < 4; i++) {\r\n vertices.push(offsetVert[i].clone().multiply(bSize));\r\n vertices.push(offsetVert[(i + 1) % 4].clone().multiply(bSize));\r\n }\r\n const translation = new THREE.Vector3(2 * bSize.x * (1 - delta.x - delta.y), 0, 0);\r\n for (let i = 0; i < 8; i++) {\r\n vertices.push(vertices[i].clone().add(translation));\r\n }\r\n for (let i = 0; i < 4; i++) {\r\n vertices.push(vertices[i * 2].clone());\r\n vertices.push(vertices[i * 2 + 8].clone());\r\n }\r\n const center = new THREE.Vector3();\r\n bBox.getCenter(center);\r\n vertices.forEach((vertex) => vertex.add(center)); // pivot shift\r\n\r\n const flatVertices = _flattenArray(vertices);\r\n geometry.setAttribute('position', new THREE.BufferAttribute(flatVertices, 3));\r\n\r\n this._lines = new THREE.LineSegments(geometry, new THREE.LineBasicMaterial({ color: 0xFFFFFF }));\r\n this._lines.layers.set(gfxutils.LAYERS.VOLUME);\r\n }\r\n\r\n // Set one edge (4 points) of frame, from which with parallel transfer the rest of the frame points can be obtained\r\n _getBaseVertices(delta, obtuseAngle) {\r\n const projTable = VolumeBounds._projectionTable;\r\n\r\n const proj = ((index, inv) => { // tricky function to take account of projections: their position(related to box) and sign\r\n const currDelta = delta[projTable[index][0]];\r\n const angleValue = -0.5 * (inv - 1) + inv * obtuseAngle[projTable[index][1]];// inv = 1: alpha; inv = -1: 1 - alpha\r\n return angleValue * currDelta;\r\n });\r\n\r\n const offsetVert = [\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', 1) + proj('XY', 1)), -1 + 2 * proj('YZ', 1), -1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', -1) + proj('XY', 1)), -1 + 2 * proj('YZ', -1), 1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', -1) + proj('XY', -1)), 1 - 2 * proj('YZ', 1), 1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', 1) + proj('XY', -1)), 1 - 2 * proj('YZ', -1), -1),\r\n ];\r\n\r\n return offsetVert;\r\n }\r\n\r\n getMesh() {\r\n return this._lines;\r\n }\r\n}\r\n\r\nexport default VolumeBounds;\r\n","import * as THREE from 'three';\r\nimport VolumeMaterial from './shaders/VolumeMaterial';\r\nimport meshes from './meshes/meshes';\r\nimport gfxutils from './gfxutils';\r\n\r\n// Thes geometric far plane is required for correct filling in the BFTexture in case, when far plane cuts the volume\r\n// cube. In cut place of cube there is no correct data in BFTexture and volume rendering integral is calculated\r\n// with errors.\r\n// Far plane cuts the cube in case of large volume scale (zoom), because farplane doesn't change\r\nclass VolumeFarPlane {\r\n // create plane with unit corners coords (for future rescale in vshader according to camera properties)\r\n constructor(volume, width, height) {\r\n const planeGeo = this._initPlaneGeo(width, height);\r\n\r\n const mat = new VolumeMaterial.BackFacePosMaterialFarPlane();\r\n this._plane = new meshes.Mesh(planeGeo, mat);\r\n this._plane.frustumCulled = false;\r\n this._plane.doubleSided = true;\r\n const matWorldToVolume = new THREE.Matrix4();\r\n\r\n this._plane._onBeforeRender = function (_renderer, _scene, camera, _geometry, _material, _group) {\r\n const { material } = this;\r\n if (!volume || !material) {\r\n return;\r\n }\r\n\r\n // count point in world at farplane place\r\n const planeCamPos = new THREE.Vector4(0, 0, -(camera.far - 0.1), 1);\r\n planeCamPos.applyMatrix4(camera.matrixWorld);\r\n\r\n // recalc matrices to make plane be placed as farplane in the World relative to camera\r\n this.matrix.identity();\r\n this.matrix.makeTranslation(planeCamPos.x, planeCamPos.y, planeCamPos.z);\r\n this.matrixWorld.copy(this.matrix);\r\n this.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, this.matrixWorld);\r\n this.normalMatrix.getNormalMatrix(this.modelViewMatrix);\r\n\r\n // build worldToVolume matrix to transform plane into volumeCS (volumeCS coords are written to BackFaceTexture)\r\n const volumeMatrix = volume.matrixWorld;\r\n matWorldToVolume.copy(volumeMatrix).invert();\r\n\r\n // update material props\r\n material.uniforms.aspectRatio.value = camera.aspect;\r\n material.uniforms.farZ.value = camera.far;\r\n material.uniforms.tanHalfFOV.value = Math.tan(THREE.MathUtils.DEG2RAD * 0.5 * camera.fov);\r\n material.uniforms.matWorld2Volume.value = matWorldToVolume;\r\n };\r\n\r\n // set it to special layer to draw only into BFTexture\r\n this._plane.layers.set(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n }\r\n\r\n _initPlaneGeo(width, height) {\r\n const planeGeo = new THREE.BufferGeometry();\r\n\r\n width = width || 1;\r\n height = height || 1;\r\n\r\n const vertices = new Float32Array([\r\n -0.5 * width, 0.5 * height, 0,\r\n 0.5 * width, 0.5 * height, 0,\r\n -0.5 * width, -0.5 * height, 0,\r\n 0.5 * width, -0.5 * height, 0,\r\n ]);\r\n\r\n planeGeo.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n planeGeo.setIndex([0, 2, 1, 2, 3, 1]);\r\n\r\n return planeGeo;\r\n }\r\n\r\n getMesh() {\r\n return this._plane;\r\n }\r\n}\r\n\r\nexport default VolumeFarPlane;\r\n","import * as THREE from 'three';\r\nimport VolumeMesh from './gfx/VolumeMesh';\r\nimport VolumeBounds from './gfx/VolumeBounds';\r\nimport VolumeFarPlane from './gfx/VolumeFarPlane';\r\nimport Visual from './Visual';\r\nimport settings from './settings';\r\n\r\nclass VolumeVisual extends Visual {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this._mesh = new VolumeMesh();\r\n this._mesh.setDataSource(dataSource);\r\n this.add(this._mesh);\r\n\r\n this._frame = new VolumeBounds(this.getBoundaries().boundingBox, this._mesh.volumeInfo);\r\n this.add(this._frame.getMesh());\r\n this.showFrame(settings.now.modes.VD.frame);\r\n\r\n this._farPlane = new VolumeFarPlane(this._mesh, 2, 2);\r\n this.add(this._farPlane.getMesh());\r\n }\r\n\r\n getBoundaries() {\r\n const box = this._dataSource.getBox();\r\n const sphere = new THREE.Sphere();\r\n box.getBoundingSphere(sphere);\r\n\r\n return {\r\n boundingBox: box,\r\n boundingSphere: sphere,\r\n };\r\n }\r\n\r\n getMesh() {\r\n return this._mesh;\r\n }\r\n\r\n showFrame(needShow) {\r\n this._frame.getMesh().material.visible = needShow;\r\n }\r\n}\r\n\r\nexport default VolumeVisual;\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available loaders.\r\n * @extends EntityList\r\n */\r\nclass LoaderList extends EntityList {\r\n /**\r\n * Create a list of loaders.\r\n * The loaders are indexed by supported source types (`.types` property of a Loader\r\n * subclass).\r\n * The loaders can be retrieved later by matching against specs (see {@link LoaderList#find}).\r\n *\r\n * @param {!Array=} someLoaders A list of {@link Loader} subclasses to\r\n * automatically register at creation time.\r\n * @see LoaderList#register\r\n */\r\n constructor(someLoaders = []) {\r\n super(someLoaders, ['types']);\r\n }\r\n\r\n /**\r\n * Find a suitable loader for a source type.\r\n *\r\n * @param {Object} specs Loader specifications.\r\n * @param {string=} specs.type Supported source type.\r\n * @param {*=} specs.source Source to load from.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.type) {\r\n list = this._dict.types[specs.type.toLowerCase()] || [];\r\n } else if (specs.source) {\r\n return this._list.filter((SomeLoader) => SomeLoader.canProbablyLoad && SomeLoader.canProbablyLoad(specs.source));\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default LoaderList;\r\n","import EventDispatcher from '../../utils/EventDispatcher';\r\nimport makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Loader extends EventDispatcher {\r\n constructor(source, options) {\r\n super();\r\n this._source = source;\r\n this._options = options || {};\r\n this._abort = false;\r\n this._agent = null;\r\n }\r\n\r\n load() {\r\n return Promise.reject(new Error('Loading from this source is not implemented'));\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n if (this._agent) {\r\n this._agent.abort();\r\n }\r\n }\r\n\r\n static extractName(_source) {\r\n return undefined;\r\n }\r\n}\r\n\r\nmakeContextDependent(Loader.prototype);\r\n","import Loader from './Loader';\r\n\r\nexport default class FileLoader extends Loader {\r\n constructor(source, options) {\r\n super(source, options);\r\n\r\n options = this._options;\r\n this._binary = options.binary === true;\r\n }\r\n\r\n load() {\r\n return new Promise((resolve, reject) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n\r\n const blob = this._source;\r\n const reader = this._agent = new FileReader();\r\n\r\n reader.addEventListener('load', () => {\r\n resolve(reader.result);\r\n });\r\n reader.addEventListener('error', () => {\r\n reject(reader.error);\r\n });\r\n reader.addEventListener('abort', () => {\r\n reject(new Error('Loading aborted'));\r\n });\r\n reader.addEventListener('progress', (event) => {\r\n this.dispatchEvent(event);\r\n });\r\n\r\n if (this._binary) {\r\n reader.readAsArrayBuffer(blob);\r\n } else {\r\n reader.readAsText(blob);\r\n }\r\n });\r\n }\r\n\r\n static canProbablyLoad(source) {\r\n return (File && source instanceof File) || (Blob && source instanceof Blob);\r\n }\r\n\r\n static extractName(source) {\r\n return source && source.name;\r\n }\r\n}\r\n\r\nFileLoader.types = ['file', 'blob'];\r\n","import _ from 'lodash';\r\nimport Loader from './Loader';\r\n\r\n// we don't need to detect all kinds of URLs, just the evident ones\r\nconst urlStartRegexp = /^(https?|ftp):\\/\\//i;\r\n\r\nexport default class XHRLoader extends Loader {\r\n constructor(source, options) {\r\n super(source, options);\r\n\r\n options = this._options;\r\n this._binary = (options.binary === true);\r\n }\r\n\r\n load() {\r\n return new Promise((resolve, reject) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n\r\n const url = this._source;\r\n const request = this._agent = new XMLHttpRequest();\r\n\r\n request.addEventListener('load', () => {\r\n if (request.status === 200) {\r\n resolve(request.response);\r\n } else {\r\n reject(new Error(`HTTP ${request.status} while fetching ${url}`));\r\n }\r\n });\r\n request.addEventListener('error', () => {\r\n reject(new Error('HTTP request failed'));\r\n });\r\n request.addEventListener('abort', () => {\r\n reject(new Error('Loading aborted'));\r\n });\r\n request.addEventListener('progress', (event) => {\r\n this.dispatchEvent(event);\r\n });\r\n\r\n request.open('GET', url);\r\n if (this._binary) {\r\n request.responseType = 'arraybuffer';\r\n } else {\r\n request.responseType = 'text';\r\n }\r\n request.send();\r\n });\r\n }\r\n\r\n static canProbablyLoad(source) {\r\n return _.isString(source) && urlStartRegexp.test(source);\r\n }\r\n\r\n static extractName(source) {\r\n if (source) {\r\n const last = (source.indexOf('?') + 1 || source.lastIndexOf('#') + 1 || source.length + 1) - 1;\r\n return source.slice(source.lastIndexOf('/', last) + 1, last);\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nXHRLoader.types = ['url'];\r\n","import Loader from './Loader';\r\n\r\nexport default class ImmediateLoader extends Loader {\r\n load() {\r\n return new Promise((resolve) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n resolve(this._source);\r\n });\r\n }\r\n\r\n static canProbablyLoad(_source) {\r\n return false;\r\n }\r\n}\r\n\r\nImmediateLoader.types = ['immediate'];\r\n","import LoaderList from './loaders/LoaderList';\r\n\r\nimport FileLoader from './loaders/FileLoader';\r\nimport XHRLoader from './loaders/XHRLoader';\r\nimport ImmediateLoader from './loaders/ImmediateLoader';\r\n\r\nexport default new LoaderList([\r\n // note: order might be important\r\n FileLoader,\r\n XHRLoader,\r\n ImmediateLoader,\r\n]);\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available parsers.\r\n * @extends EntityList\r\n */\r\nclass ParserList extends EntityList {\r\n /**\r\n * Create a list of parsers.\r\n * The parsers are indexed by supported data formats and file extensions (`.formats` and\r\n * `.extensions` properties of a Parser subclass).\r\n * The parsers can be retrieved later by matching against specs (see {@link ParsrerList#find}).\r\n *\r\n * @param {!Array=} someParsers A list of {@link Parser} subclasses to\r\n * automatically register at creation time.\r\n * @see ParserList#register\r\n */\r\n constructor(someParsers = []) {\r\n super(someParsers, ['formats', 'extensions']);\r\n }\r\n\r\n /**\r\n * Find a suitable parser for data.\r\n *\r\n * @param {Object} specs Parser specifications.\r\n * @param {string=} specs.format Supported data format.\r\n * @param {string=} specs.ext Supported filename extension.\r\n * @param {*=} specs.data Data to parse.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.format) {\r\n list = this._dict.formats[specs.format.toLowerCase()] || [];\r\n } else if (specs.ext) {\r\n list = this._dict.extensions[specs.ext.toLowerCase()] || [];\r\n }\r\n // autodetect only if no format is forced\r\n if (list.length === 0 && !specs.format && specs.data) {\r\n return this._list.filter((SomeParser) => SomeParser.canProbablyParse && SomeParser.canProbablyParse(specs.data));\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default ParserList;\r\n","import makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Parser {\r\n constructor(data, options) {\r\n this._data = data;\r\n this._options = options || {};\r\n this._abort = false;\r\n }\r\n\r\n parseSync() {\r\n throw new Error('Parsing this type of data is not implemented');\r\n }\r\n\r\n parse() {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n try {\r\n if (this._abort) {\r\n return reject(new Error('Parsing aborted'));\r\n }\r\n return resolve(this.parseSync());\r\n } catch (error) {\r\n return reject(error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // only for volume Parsers\r\n getModel() {\r\n this.model._parseHeader(this._data);\r\n return this.model;\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n }\r\n}\r\n\r\nmakeContextDependent(Parser.prototype);\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Parser helper for PDB tag \"REMARK 290\".\r\n *\r\n * @exports Remark290\r\n * @constructor\r\n */\r\nclass Remark290 {\r\n constructor() {\r\n /** @type {THREE.Matrix4[]} */\r\n this.matrices = [];\r\n\r\n /** @type {?THREE.Matrix4} */\r\n this._matrix = null;\r\n /** @type {number} */\r\n this._matrixIndex = -1;\r\n }\r\n\r\n /**\r\n * Parse a single line of a stream.\r\n * @param {PDBStream} stream - stream to parse\r\n */\r\n\r\n parse(stream) {\r\n /** @type {?THREE.Matrix4} */\r\n let matrix = this._matrix;\r\n\r\n if (stream.readString(12, 18) === ' SMTRY') {\r\n const matrixRow = stream.readCharCode(19) - 49; // convert '1', '2', or '3' -> 0, 1, or 2\r\n const matrixData = stream.readString(20, 80).trim().split(/\\s+/);\r\n const matrixIndex = parseInt(matrixData[0], 10);\r\n if (this._matrix === null || matrixIndex !== this._matrixIndex) {\r\n // TODO: assert(matrixIndex === this.matrices.length + 1);\r\n this._matrixIndex = matrixIndex;\r\n this._matrix = matrix = new THREE.Matrix4();\r\n this.matrices[this.matrices.length] = matrix;\r\n }\r\n\r\n const { elements } = matrix;\r\n elements[matrixRow] = parseFloat(matrixData[1]);\r\n elements[matrixRow + 4] = parseFloat(matrixData[2]);\r\n elements[matrixRow + 8] = parseFloat(matrixData[3]);\r\n elements[matrixRow + 12] = parseFloat(matrixData[4]);\r\n }\r\n }\r\n}\r\n\r\nRemark290.prototype.id = 290;\r\n\r\nexport default Remark290;\r\n","import * as THREE from 'three';\r\nimport chem from '../../../chem';\r\n\r\nconst { Assembly } = chem;\r\n\r\n/**\r\n * Parser helper for PDB tag \"REMARK 350\".\r\n *\r\n * @exports Remark350\r\n * @constructor\r\n */\r\nclass Remark350 {\r\n constructor(complex) {\r\n /** @type {Complex} */\r\n this._complex = complex;\r\n /** @type {Assembly[]} */\r\n this.assemblies = [];\r\n\r\n /** @type {?Assembly} */\r\n this._assembly = null;\r\n /** @type {?THREE.Matrix4} */\r\n this._matrix = null;\r\n /** @type {number} */\r\n this._matrixIndex = -1;\r\n }\r\n\r\n /**\r\n * Parse a single line of a stream.\r\n * @param {PDBStream} stream - stream to parse\r\n */\r\n\r\n parse(stream) {\r\n /** @type {?Assembly} */\r\n let assembly = this._assembly;\r\n /** @type {?THREE.Matrix4} */\r\n let matrix = this._matrix;\r\n\r\n if (assembly && stream.readString(12, 18) === ' BIOMT') {\r\n const matrixRow = stream.readCharCode(19) - 49; // convert '1', '2', or '3' -> 0, 1, or 2\r\n const matrixData = stream.readString(20, 80).trim().split(/\\s+/);\r\n const matrixIndex = parseInt(matrixData[0], 10);\r\n if (this._matrix === null || matrixIndex !== this._matrixIndex) {\r\n // TODO: assert(matrixIndex === assembly.matrices.length + 1);\r\n this._matrixIndex = matrixIndex;\r\n this._matrix = matrix = new THREE.Matrix4();\r\n assembly.addMatrix(matrix);\r\n }\r\n\r\n const { elements } = matrix;\r\n elements[matrixRow] = parseFloat(matrixData[1]);\r\n elements[matrixRow + 4] = parseFloat(matrixData[2]);\r\n elements[matrixRow + 8] = parseFloat(matrixData[3]);\r\n elements[matrixRow + 12] = parseFloat(matrixData[4]);\r\n } else if (assembly && stream.readString(35, 41) === 'CHAINS:') {\r\n const entries = stream.readString(42, 80).split(',');\r\n for (let i = 0, n = entries.length; i < n; ++i) {\r\n const chain = entries[i].trim();\r\n if (chain.length > 0) {\r\n assembly.addChain(chain);\r\n }\r\n }\r\n } else if (stream.readString(12, 23) === 'BIOMOLECULE:') {\r\n // assert molIndex === this.assemblies.length + 1\r\n this._matrix = null;\r\n this._matrixIndex = -1;\r\n this._assembly = assembly = new Assembly(this._complex);\r\n this.assemblies.push(assembly);\r\n }\r\n }\r\n}\r\n\r\nRemark350.prototype.id = 350;\r\n\r\nexport default Remark350;\r\n","/** Helper class for stream-like reading input files. */\r\nclass PDBStream {\r\n /**\r\n * Create a stream\r\n * @param {String} data Input data\r\n */\r\n constructor(data) {\r\n /** @type String */\r\n this._data = data; // Input file\r\n /** @type Number */\r\n this._start = 0; // Starting position of line\r\n /** @type Number */\r\n this._nextCR = -1; // Position of next CR (0x0D)\r\n /** @type Number */\r\n this._nextLF = -1; // Position of next LF (0x0A)\r\n /** @type Number */\r\n this._next = -1; // End position of line\r\n /** @type Number */\r\n this._end = data.length; // End of data\r\n\r\n this.next();\r\n }\r\n\r\n /**\r\n * Reading next line.\r\n * @returns {String} Next line in data (ending with LF or CR)\r\n */\r\n readLine() {\r\n return this._data.slice(this._start, this._next);\r\n }\r\n\r\n /**\r\n * Reading character from position.\r\n * @param {Number} pos - Position in current line.\r\n * @returns {String} Character from position\r\n */\r\n readChar(pos) {\r\n pos = this._start + pos - 1;\r\n return pos < this._next ? this._data[pos] : ' ';\r\n }\r\n\r\n /**\r\n * Reading character code from position.\r\n * @param {Number} pos - Position in current line.\r\n * @returns {Number} Character code from position\r\n */\r\n readCharCode(pos) {\r\n pos = this._start + pos - 1;\r\n return pos < this._next ? this._data.charCodeAt(pos) : 32;\r\n }\r\n\r\n /**\r\n * Reading string from begin to end points.\r\n * For a reason unknown, numbering assumed not to start from 0, but from 1.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {String} String from begin to end\r\n */\r\n readString(begin, end) {\r\n const from = this._start + begin - 1;\r\n const to = this._start + end;\r\n return this._data.slice(from, to < this._next ? to : this._next);\r\n }\r\n\r\n /**\r\n * Reading integer from begin to end points.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {Number} Integer from begin to end\r\n */\r\n readInt(begin, end) {\r\n return parseInt(this.readString(begin, end), 10);\r\n }\r\n\r\n /**\r\n * Reading float from begin to end points.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {Number} Float from begin to end\r\n */\r\n readFloat(begin, end) {\r\n return parseFloat(this.readString(begin, end));\r\n }\r\n\r\n /**\r\n * Checking for end of data.\r\n * @returns {boolean} True if data is ended, false otherwise\r\n */\r\n end() {\r\n return this._start >= this._end;\r\n }\r\n\r\n /**\r\n * Procedure to re-arrange current pointers in data.\r\n */\r\n next() {\r\n const start = this._next + 1;\r\n this._start = start < this._end ? start : this._end;\r\n\r\n // support CR, LF, CR+LF line endings\r\n // do not support LF+CR, CR+CR+LF, and other strange combinations\r\n\r\n if (this._start > this._nextCR) {\r\n this._nextCR = (this._data.indexOf('\\r', this._start) + 1 || this._end + 1) - 1;\r\n }\r\n if (this._start > this._nextLF) {\r\n this._nextLF = (this._data.indexOf('\\n', this._start) + 1 || this._end + 1) - 1;\r\n }\r\n this._next = this._nextCR + 1 < this._nextLF ? this._nextCR : this._nextLF;\r\n }\r\n}\r\n\r\nexport default PDBStream;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport Remark290 from './pdb/Remark290';\r\nimport Remark350 from './pdb/Remark350';\r\nimport PDBStream from './PDBStream';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst TAG_LENGTH = 6;\r\n\r\nfunction nameToElement(name) {\r\n // http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM\r\n //\r\n // http://www.cgl.ucsf.edu/chimera/docs/UsersGuide/tutorials/pdbintro.html#note1\r\n //\r\n // Atom names start with element symbols right-justified in columns 13-14\r\n // as permitted by the length of the name. For example, the symbol FE for\r\n // iron appears in columns 13-14, whereas the symbol C for carbon appears\r\n // in column 14 (see Misaligned Atom Names). If an atom name has four\r\n // characters, however, it must start in column 13 even if the element\r\n // symbol is a single character (for example, see Hydrogen Atoms).\r\n\r\n const veryLong = name.trim().length === 4;\r\n return name.slice(0, veryLong ? 1 : 2).trim();\r\n}\r\n\r\n// the most frequently used beginnings; although HEADER is mandatory, it is often missing in handmade files\r\nconst pdbStartRegexp = /^(HEADER\\s|COMPND\\s|REMARK\\s|ATOM {2}|HETATM|MODEL )/i;\r\n\r\nconst remarkParsers = {\r\n // NOTE: please forget the idea to build the method name in runtime, it can be obfuscated.\r\n 290: Remark290,\r\n 350: Remark350,\r\n};\r\n\r\nclass PDBParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._sheet = null;\r\n this._serialAtomMap = null;\r\n this._modelId = 1;\r\n this._compaundFound = false;\r\n this._biomoleculeFound = false;\r\n this._allowedChainsIDs = null;\r\n this._lastMolId = -1;\r\n\r\n this._remarks = {};\r\n this._remark = null;\r\n\r\n this._molecules = [];\r\n this._molecule = null;\r\n this._compndCurrToken = '';\r\n\r\n this._options.fileType = 'pdb';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && pdbStartRegexp.test(data);\r\n }\r\n\r\n _finalize() {\r\n this._fixBondsArray();\r\n this._fixChains();\r\n\r\n // keep crystallographic symmetry transformations\r\n const remark290 = this._remarks[290];\r\n this._complex.symmetry = _.isUndefined(remark290) ? [] : remark290.matrices;\r\n\r\n // add loaded biological assemblies\r\n const remark350 = this._remarks[350];\r\n this._complex.units = this._complex.units.concat(_.isUndefined(remark350) ? [] : remark350.assemblies);\r\n\r\n // add loaded macromolecules\r\n this._finalizeMolecules();\r\n\r\n // create secondary structure etc.\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n _finalizeMolecules() {\r\n // get chains from complex\r\n const chainDict = {};\r\n let i;\r\n const chains = this._complex._chains;\r\n for (i = 0; i < chains.length; ++i) {\r\n const chainObj = chains[i];\r\n const chainName = chainObj._name;\r\n chainDict[chainName] = chainObj;\r\n }\r\n\r\n // aggregate residues from chains\r\n for (i = 0; i < this._molecules.length; i++) {\r\n const m = this._molecules[i];\r\n let residues = [];\r\n for (let j = 0; j < m._chains.length; j++) {\r\n const name = m._chains[j];\r\n const chain = chainDict[name];\r\n residues = residues.concat(chain._residues.slice());\r\n }\r\n const molecule = new Molecule(this._complex, m._name, i + 1);\r\n molecule.residues = residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n _fixChains() {\r\n const idChainMap = {};\r\n const complex = this._complex;\r\n\r\n // prepare\r\n for (let i = 0; i < complex._chains.length; i++) {\r\n const chain = complex._chains[i];\r\n idChainMap[chain._name.charCodeAt(0)] = chain;\r\n }\r\n }\r\n\r\n // FIXME: This function is redundant, CONECT records always follow ATOM and HETATM. Build the map online.\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const complex = this._complex;\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, ni = atoms.length; i < ni; ++i) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n const bonds = complex._bonds;\r\n const { logger } = this;\r\n for (let j = 0, nj = bonds.length; j < nj; ++j) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n logger.debug('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _parseATOM(stream) {\r\n if (this._modelId !== 1) {\r\n return;\r\n }\r\n\r\n /* eslint-disable no-magic-numbers */\r\n const het = stream.readCharCode(1) === 0x48;\r\n\r\n // field names according to wwPDB Format\r\n // NOTE: Chimera allows (nonstandard) use of columns 6-11 for the integer atom serial number in ATOM records.\r\n const serial = het ? stream.readInt(7, 11) : stream.readInt(6, 11);\r\n let name = stream.readString(13, 16);\r\n const altLoc = stream.readChar(17);\r\n const resName = stream.readString(18, 20).trim();\r\n const chainID = stream.readChar(22);\r\n const resSeq = stream.readInt(23, 26);\r\n const iCode = stream.readChar(27);\r\n const x = stream.readFloat(31, 38);\r\n const y = stream.readFloat(39, 46);\r\n const z = stream.readFloat(47, 54);\r\n const occupancy = stream.readFloat(55, 60);\r\n const tempFactor = stream.readFloat(61, 66);\r\n const element = stream.readString(77, 78).trim() || nameToElement(name);\r\n const charge = stream.readInt(79, 80) || 0;\r\n /* eslint-enable no-magic-numbers */\r\n // skip waters (there may be lots of them)\r\n if (this.settings.now.nowater) {\r\n if (resName === 'HOH' || resName === 'WAT') {\r\n return;\r\n }\r\n }\r\n\r\n // PDB uses positional system for atom names. It helps derive element type from the name\r\n // but names may include extra spaces. From this point on we don't need those spaces anymore.\r\n name = name.trim();\r\n\r\n const type = Element.getByName(element);\r\n const role = Element.Role[name]; // FIXME: Maybe should use type as additional index (\" CA \" vs. \"CA \")\r\n\r\n // NOTE: Residues of a particular chain are not required to be listed next to each other.\r\n // https://github.com/biasmv/pv/commit/7319b898b7473ba380c26699e3b028b2b1a7e1a1\r\n let chain = this._chain;\r\n if (!chain || chain.getName() !== chainID) {\r\n this._chain = chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = null;\r\n }\r\n\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n this._residue = residue = chain.addResidue(resName, resSeq, iCode);\r\n }\r\n\r\n const xyz = new THREE.Vector3(x, y, z);\r\n residue.addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n _parseENDMDL() {\r\n this._modelId += 1;\r\n }\r\n\r\n _parseCONECT(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const serial0 = stream.readInt(7, 11);\r\n const serial1 = stream.readInt(12, 16);\r\n const serial2 = stream.readInt(17, 21);\r\n const serial3 = stream.readInt(22, 26);\r\n const serial4 = stream.readInt(27, 31);\r\n /* eslint-enable no-magic-numbers */\r\n\r\n const complex = this._complex;\r\n\r\n // Keep bonds ordered by atom serial\r\n if (serial1 && serial1 > serial0) {\r\n complex.addBond(serial0, serial1, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial2 && serial2 > serial0) {\r\n complex.addBond(serial0, serial2, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial3 && serial3 > serial0) {\r\n complex.addBond(serial0, serial3, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial4 && serial4 > serial0) {\r\n complex.addBond(serial0, serial4, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n }\r\n\r\n _parseCOMPND(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const str = stream.readString(11, 80);\r\n const tokenIdx = str.indexOf(':');\r\n this._compndCurrToken = tokenIdx > 0 ? str.substring(0, tokenIdx).trim() : this._compndCurrToken;\r\n /* eslint-enable no-magic-numbers */\r\n\r\n // start reading new molecule\r\n if (this._compndCurrToken === 'MOL_ID') {\r\n this._molecule = { _index: '', _chains: [] };\r\n this._molecule._index = parseInt(str.substring(tokenIdx + 1, str.indexOf(';')), 10);\r\n this._molecules.push(this._molecule);\r\n // parse molecule name\r\n } else if (this._compndCurrToken === 'MOLECULE' && this._molecule != null) {\r\n this._molecule._name = str.substring(tokenIdx + 1, str.indexOf(';')).trim();\r\n // parse molecule chains\r\n } else if (this._compndCurrToken === 'CHAIN' && this._molecule != null) {\r\n let chainStr = str.substring(tokenIdx + 1, 80).trim();\r\n const lastChar = chainStr[chainStr.length - 1];\r\n if (lastChar === ';' || lastChar === ',') {\r\n chainStr = chainStr.slice(0, -1);\r\n }\r\n chainStr = chainStr.replace(/\\s+/g, '');\r\n const chains = chainStr.split(',');\r\n this._molecule._chains = this._molecule._chains.concat(chains);\r\n }\r\n }\r\n\r\n _parseREMARK(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const remarkNum = stream.readInt(8, 10);\r\n /* eslint-enable no-magic-numbers */\r\n\r\n // create remark parser if needed\r\n let remark = this._remarks[remarkNum];\r\n if (_.isUndefined(remark)) {\r\n const RemarkParser = remarkParsers[remarkNum];\r\n if (_.isFunction(RemarkParser)) {\r\n this._remarks[remarkNum] = remark = new RemarkParser(this._complex);\r\n }\r\n }\r\n\r\n // delegate parsing\r\n if (!_.isUndefined(remark)) {\r\n remark.parse(stream);\r\n }\r\n }\r\n\r\n _parseHELIX(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const fields = [20, 22, 32, 34];\r\n /* eslint-enable no-magic-numbers */\r\n this._parseSTRUCTURE(stream, fields, (obj) => {\r\n this._complex.addHelix(obj);\r\n this._complex.structures.push(obj);\r\n });\r\n }\r\n\r\n _parseSHEET(stream) {\r\n /* eslint-disable no-magic-numbers */\r\n const fields = [22, 23, 33, 34];\r\n /* eslint-enable no-magic-numbers */\r\n this._parseSTRUCTURE(stream, fields, (obj) => {\r\n this._complex.addSheet(obj);\r\n });\r\n }\r\n\r\n _parseSTRUCTURE(stream, pars, adder) {\r\n const startId = 0;\r\n const startIndex = 1;\r\n const endId = 2;\r\n const endIndex = 3;\r\n\r\n // identify fields: debugging and stuff\r\n /* eslint-disable no-magic-numbers */\r\n const codeOfS = 0x53;\r\n const serialNumber = stream.readInt(8, 10);\r\n const structureName = stream.readString(12, 14).trim(); // FIXME: LString(3) forbids trim()\r\n const comment = stream.readString(41, 70).trim();\r\n const helLength = stream.readInt(72, 76);\r\n const helixClass = stream.readInt(39, 40);\r\n const shWidth = stream.readInt(15, 16);\r\n const shCur = stream.readInt(42, 45);\r\n const shPrev = stream.readInt(57, 60);\r\n /* eslint-enable no-magic-numbers */\r\n // file fields\r\n const startChainID = stream.readString(pars[startId], pars[endId] + 1).charCodeAt(0);\r\n const endChainID = stream.readString(pars[endId], pars[endId] + 1).charCodeAt(0);\r\n const startSequenceNumber = stream.readInt(pars[startIndex], pars[startIndex] + 3);\r\n let iCodeStr = stream.readString(pars[startIndex] + 4, pars[startIndex] + 4);\r\n let startICode = 0;\r\n\r\n if (iCodeStr.length > 0) {\r\n startICode = iCodeStr.charCodeAt(0);\r\n }\r\n const endSequenceNumber = stream.readInt(pars[endIndex], pars[endIndex] + 3);\r\n iCodeStr = stream.readString(pars[endIndex] + 4, pars[endIndex] + 4);\r\n let endICode = 0;\r\n if (iCodeStr.length > 0) {\r\n endICode = iCodeStr.charCodeAt(0);\r\n }\r\n\r\n let obj;\r\n let cs = this._sheet;\r\n if (stream.readCharCode(1) === codeOfS) {\r\n if (cs !== null && cs.getName() !== structureName) {\r\n cs = null;\r\n this._sheet = null;\r\n }\r\n if (cs === null) {\r\n this._sheet = obj = new Sheet(structureName, shWidth);\r\n adder(obj);\r\n } else {\r\n obj = cs;\r\n }\r\n const strand = new Strand(\r\n obj,\r\n this._complex.getUnifiedSerial(startChainID, startSequenceNumber, startICode),\r\n this._complex.getUnifiedSerial(endChainID, endSequenceNumber, endICode),\r\n helixClass,\r\n shCur,\r\n shPrev,\r\n );\r\n obj.addStrand(strand);\r\n this._complex.structures.push(strand);\r\n } else {\r\n obj = new Helix(\r\n helixClass,\r\n this._complex.getUnifiedSerial(startChainID, startSequenceNumber, startICode),\r\n this._complex.getUnifiedSerial(endChainID, endSequenceNumber, endICode),\r\n serialNumber,\r\n structureName,\r\n comment,\r\n helLength,\r\n );\r\n adder(obj);\r\n }\r\n }\r\n\r\n _parseHEADER(stream) {\r\n const { metadata } = this._complex;\r\n metadata.classification = stream.readString(11, 50).trim();\r\n metadata.date = stream.readString(51, 59).trim();\r\n\r\n const id = stream.readString(63, 66).trim();\r\n metadata.id = id;\r\n if (id) {\r\n this._complex.name = id;\r\n }\r\n metadata.format = 'pdb';\r\n }\r\n\r\n _parseTITLE(stream) {\r\n const { metadata } = this._complex;\r\n metadata.title = metadata.title || [];\r\n\r\n const line = stream.readInt(9, 10) || 1;\r\n metadata.title[line - 1] = stream.readString(11, 80).trim();\r\n }\r\n\r\n static tagParsers = {\r\n HEADER: PDBParser.prototype._parseHEADER,\r\n 'TITLE ': PDBParser.prototype._parseTITLE,\r\n 'ATOM ': PDBParser.prototype._parseATOM,\r\n HETATM: PDBParser.prototype._parseATOM,\r\n ENDMDL: PDBParser.prototype._parseENDMDL,\r\n CONECT: PDBParser.prototype._parseCONECT,\r\n COMPND: PDBParser.prototype._parseCOMPND,\r\n REMARK: PDBParser.prototype._parseREMARK,\r\n // 'SOURCE': PDBParser.prototype._parseSOURCE,\r\n 'HELIX ': PDBParser.prototype._parseHELIX,\r\n 'SHEET ': PDBParser.prototype._parseSHEET,\r\n\r\n // nonstandard extension to allow range 100,000 - 999,999\r\n 'ATOM 1': PDBParser.prototype._parseATOM,\r\n 'ATOM 2': PDBParser.prototype._parseATOM,\r\n 'ATOM 3': PDBParser.prototype._parseATOM,\r\n 'ATOM 4': PDBParser.prototype._parseATOM,\r\n 'ATOM 5': PDBParser.prototype._parseATOM,\r\n 'ATOM 6': PDBParser.prototype._parseATOM,\r\n 'ATOM 7': PDBParser.prototype._parseATOM,\r\n 'ATOM 8': PDBParser.prototype._parseATOM,\r\n 'ATOM 9': PDBParser.prototype._parseATOM,\r\n };\r\n\r\n parseSync() {\r\n const stream = new PDBStream(this._data);\r\n const result = this._complex = new Complex();\r\n\r\n // parse PDB line by line\r\n while (!stream.end()) {\r\n const tag = stream.readString(1, TAG_LENGTH);\r\n const func = PDBParser.tagParsers[tag];\r\n if (_.isFunction(func)) {\r\n func.call(this, stream);\r\n }\r\n stream.next();\r\n }\r\n\r\n // Resolve indices and serials to objects\r\n this._finalize();\r\n\r\n // cleanup\r\n this._serialAtomMap = null;\r\n this._sheet = null;\r\n this._residue = null;\r\n this._chain = null;\r\n this._complex = null;\r\n\r\n if (result.getAtomCount() === 0) {\r\n throw new Error('The data does not contain valid atoms');\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nPDBParser.formats = ['pdb'];\r\nPDBParser.extensions = ['.pdb', '.ent'];\r\n\r\nexport default PDBParser;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n SGroup,\r\n Bond,\r\n} = chem;\r\n\r\nconst cOrderCharCodes = {\r\n A: 0,\r\n S: 1,\r\n D: 2,\r\n T: 3,\r\n};\r\n\r\nconst cmlStartRegexp = /\\s*<\\?xml\\b[^?>]*\\?>\\s*<(?:cml|molecule)\\b/i;\r\n\r\nclass CMLParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._complex = null;\r\n this._residue = null;\r\n this._serialAtomMap = null;\r\n this._modelId = 1;\r\n this._lastMolId = -1;\r\n this._readOnlyOneMolecule = false;\r\n this._options.fileType = 'cml';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && cmlStartRegexp.test(data);\r\n }\r\n\r\n _rebuidBondIndexes(atoms, bonds) {\r\n const count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n const atomId = atoms[i].id;\r\n\r\n const countBonds = bonds.length;\r\n for (let j = 0; j < countBonds; j++) {\r\n const idxs = bonds[j].atomRefs2.split(' ');\r\n if (idxs[0] === atomId) {\r\n bonds[j].start = i;\r\n }\r\n\r\n if (idxs[1] === atomId) {\r\n bonds[j].end = i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _createSGroup(molecule, moleculeArr) {\r\n const newGroup = new SGroup(\r\n molecule.id,\r\n molecule.fieldData,\r\n new THREE.Vector3(parseFloat(molecule.x), parseFloat(molecule.y), 0),\r\n molecule.atomRefs,\r\n molecule,\r\n );\r\n if (molecule.placement === 'Relative') {\r\n newGroup._center = new THREE.Vector3(0, 0, 0);\r\n }\r\n if (molecule.fieldName === 'MDLBG_FRAGMENT_CHARGE') {\r\n newGroup._charge = parseInt(molecule.fieldData, 10) || 0;\r\n }\r\n if (molecule.fieldName === 'MDLBG_FRAGMENT_COEFFICIENT') {\r\n newGroup._repeat = parseInt(molecule.fieldData, 10) || 1;\r\n }\r\n moleculeArr.push(newGroup);\r\n }\r\n\r\n _extractSGroup(molecule, moleculeArr) {\r\n if (!Array.isArray(moleculeArr)) {\r\n moleculeArr = [];\r\n }\r\n\r\n if (molecule) {\r\n if (Array.isArray(molecule)) {\r\n const count = molecule.length;\r\n for (let i = 0; i < count; i++) {\r\n if (molecule[i].molecule) {\r\n moleculeArr = moleculeArr.concat(this._extractSGroup(molecule[i].molecule));\r\n }\r\n this._createSGroup(molecule[i], moleculeArr);\r\n }\r\n } else {\r\n if (molecule.molecule) {\r\n if (molecule.molecule) {\r\n moleculeArr = moleculeArr.concat(this._extractSGroup(molecule.molecule));\r\n }\r\n }\r\n this._createSGroup(molecule, moleculeArr);\r\n }\r\n }\r\n\r\n return moleculeArr;\r\n }\r\n\r\n _extractSGroups(molecule, atoms) {\r\n const moleculeArr = this._extractSGroup(molecule);\r\n\r\n const count = atoms.length;\r\n let i;\r\n let j;\r\n\r\n for (i = 0; i < count; i++) {\r\n const atomId = atoms[i].id;\r\n for (j = 0; j < moleculeArr.length; j++) {\r\n const firstAtomRef = moleculeArr[j]._atoms.split(' ')[0];\r\n if (firstAtomRef === atomId) {\r\n if (!atoms[i].sgroupRef) {\r\n atoms[i].sgroupRef = [];\r\n }\r\n atoms[i].sgroupRef.push(moleculeArr[j]);\r\n }\r\n }\r\n }\r\n // build sGroups centers\r\n let atomMap = {}; // sgrpmap cache\r\n let mapEntry = null;\r\n const nLimon = 100000000;\r\n const bLow = new THREE.Vector3(nLimon, nLimon, nLimon);\r\n const bHight = new THREE.Vector3(-nLimon, -nLimon, -nLimon);\r\n\r\n function cycleFuncInner(e) {\r\n mapEntry = atomMap[e];\r\n if (mapEntry) {\r\n moleculeArr[j]._atoms.push(mapEntry.a);\r\n }\r\n }\r\n\r\n function cycleFunc(e) {\r\n mapEntry = atomMap[e];\r\n if (mapEntry) {\r\n bLow.set(Math.min(bLow.x, mapEntry.x), Math.min(bLow.y, mapEntry.y), Math.min(bLow.z, mapEntry.z));\r\n bHight.set(Math.max(bHight.x, mapEntry.x), Math.max(bHight.y, mapEntry.y), Math.max(bHight.z, mapEntry.z));\r\n cycleFuncInner(e);\r\n }\r\n }\r\n\r\n for (i = 0; i < atoms.length; i++) {\r\n atomMap[atoms[i].id] = {};\r\n atomMap[atoms[i].id].x = atoms[i].x2;\r\n if (atoms[i].x3) {\r\n atomMap[atoms[i].id].x = atoms[i].x3;\r\n }\r\n atomMap[atoms[i].id].x = parseFloat(atomMap[atoms[i].id].x);\r\n atomMap[atoms[i].id].y = atoms[i].y2;\r\n if (atoms[i].y3) {\r\n atomMap[atoms[i].id].y = atoms[i].y3;\r\n }\r\n atomMap[atoms[i].id].y = parseFloat(atomMap[atoms[i].id].y);\r\n atomMap[atoms[i].id].z = '0.0';\r\n if (atoms[i].z3) {\r\n atomMap[atoms[i].id].z = atoms[i].z3;\r\n }\r\n atomMap[atoms[i].id].z = parseFloat(atomMap[atoms[i].id].z);\r\n atomMap[atoms[i].id].a = atoms[i];\r\n }\r\n\r\n let atomsRef;\r\n for (j = 0; j < moleculeArr.length; j++) {\r\n if (moleculeArr[j]._center !== null) {\r\n bLow.set(nLimon, nLimon, nLimon);\r\n bHight.set(-nLimon, -nLimon, -nLimon);\r\n atomsRef = moleculeArr[j]._atoms.split(' ');\r\n moleculeArr[j]._atoms = [];\r\n atomsRef.forEach(cycleFunc);\r\n\r\n moleculeArr[j]._center.addVectors(bLow, bHight);\r\n moleculeArr[j]._center.multiplyScalar(0.5);\r\n } else {\r\n atomsRef = moleculeArr[j]._atoms.split(' ');\r\n moleculeArr[j]._atoms = [];\r\n atomsRef.forEach(cycleFuncInner);\r\n }\r\n }\r\n atomMap = null;\r\n }\r\n\r\n _traverseData(dom) {\r\n function isArray(o) {\r\n return Object.prototype.toString.apply(o) === '[object Array]';\r\n }\r\n\r\n function parseNode(xmlNode, result) {\r\n if (xmlNode.nodeName === '#text' && xmlNode.nodeValue.trim() === '') {\r\n return;\r\n }\r\n\r\n const jsonNode = {};\r\n jsonNode.xmlNode = xmlNode;\r\n const existing = result[xmlNode.nodeName];\r\n if (existing) {\r\n if (!isArray(existing)) {\r\n result[xmlNode.nodeName] = [existing, jsonNode];\r\n } else {\r\n result[xmlNode.nodeName].push(jsonNode);\r\n }\r\n } else {\r\n result[xmlNode.nodeName] = jsonNode;\r\n }\r\n\r\n let length;\r\n let i;\r\n if (xmlNode.attributes) {\r\n ({ length } = xmlNode.attributes);\r\n for (i = 0; i < length; i++) {\r\n const attribute = xmlNode.attributes[i];\r\n jsonNode[attribute.nodeName] = attribute.nodeValue;\r\n }\r\n }\r\n\r\n ({ length } = xmlNode.childNodes);\r\n for (i = 0; i < length; i++) {\r\n parseNode(xmlNode.childNodes[i], jsonNode);\r\n }\r\n }\r\n\r\n const result = {};\r\n if (dom.childNodes.length) {\r\n parseNode(dom.childNodes[0], result);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _findSuitableMolecule(data, molSet) {\r\n for (const key in data) {\r\n if (key === 'xmlNode') {\r\n continue;\r\n } else if (key === 'molecule') {\r\n if (data.molecule) {\r\n if (data.molecule.atomArray && data.molecule.atomArray.atom) {\r\n molSet.push(data);\r\n }\r\n if (Array.isArray(data.molecule)) {\r\n for (let i = 0; i < data.molecule.length; i++) {\r\n if (data.molecule[i].atomArray && data.molecule[i].atomArray.atom) {\r\n molSet.push({ molecule: data.molecule[i] });\r\n }\r\n }\r\n }\r\n }\r\n } else if (data[key] && data[key] !== null && typeof (data[key]) === 'object') {\r\n this._findSuitableMolecule(data[key], molSet);\r\n }\r\n }\r\n }\r\n\r\n _selectComponents(text) {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(text, 'application/xml');\r\n const traversedData = this._traverseData(doc);\r\n let rawData;\r\n const self = this;\r\n\r\n function prepareComponentCompound(data) {\r\n let atoms = [];\r\n if (data.molecule && data.molecule.atomArray && data.molecule.atomArray.atom) {\r\n if (!Array.isArray(data.molecule.atomArray.atom)) {\r\n atoms.push(data.molecule.atomArray.atom);\r\n } else {\r\n atoms = data.molecule.atomArray.atom;\r\n }\r\n } else if (!data.molecule) {\r\n const ret = {};\r\n ret.atomLabels = null;\r\n ret.labelsCount = 1;\r\n return ret;\r\n }\r\n\r\n if (data.molecule.molecule) {\r\n self._extractSGroups(data.molecule.molecule, atoms);\r\n }\r\n\r\n let atom;\r\n let count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n atom = atoms[i];\r\n atom.edges = [];\r\n }\r\n\r\n let localBond = [];\r\n if (data.molecule.bondArray && data.molecule.bondArray.bond) {\r\n if (!Array.isArray(data.molecule.bondArray.bond)) {\r\n localBond.push(data.molecule.bondArray.bond);\r\n } else {\r\n localBond = data.molecule.bondArray.bond;\r\n }\r\n }\r\n let bond;\r\n count = localBond.length;\r\n self._rebuidBondIndexes(atoms, localBond);\r\n\r\n function addCurrBond(index) {\r\n bond = localBond[index];\r\n atom = atoms[bond.start];\r\n if (!atom) {\r\n return false;\r\n }\r\n atom.edges.push(bond.end);\r\n atom = atoms[bond.end];\r\n if (!atom) {\r\n return false;\r\n }\r\n atom.edges.push(bond.start);\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < count; i++) {\r\n if (!addCurrBond(i)) {\r\n // ignore invalid bond\r\n continue;\r\n }\r\n const orderAttr = bond.xmlNode.getAttribute('order');\r\n const tc = parseInt(orderAttr, 10);\r\n // the default bond order is unknown\r\n localBond[i].order = 0;\r\n localBond[i].type = Bond.BondType.UNKNOWN;\r\n if (tc > 1) {\r\n localBond[i].order = tc;\r\n } else {\r\n // another option - bond order is a string\r\n const order = cOrderCharCodes[orderAttr];\r\n if (order !== undefined) {\r\n localBond[i].order = order;\r\n if (orderAttr === 'A') {\r\n localBond[i].type = Bond.BondType.AROMATIC;\r\n }\r\n }\r\n }\r\n }\r\n\r\n count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n atom = atoms[i];\r\n atom.edges.sort();\r\n }\r\n\r\n const labels = self._breadWidthSearch(atoms, 0); // for now\r\n\r\n const retStruct = {};\r\n retStruct.atoms = atoms;\r\n retStruct.bonds = localBond;\r\n retStruct.labels = labels.atomLabels;\r\n retStruct.count = Math.min(1, labels.labelsCount); // for now\r\n retStruct.curr = -1;\r\n retStruct.originalCML = doc;\r\n\r\n return retStruct;\r\n }\r\n\r\n if (traversedData.cml) {\r\n rawData = traversedData.cml;\r\n } else {\r\n rawData = traversedData;\r\n }\r\n const retData = [];\r\n const filteredData = [];\r\n this._findSuitableMolecule(rawData, filteredData);\r\n if (this._readOnlyOneMolecule && filteredData.length > 1) {\r\n filteredData.splice(1, filteredData.length - 1);\r\n }\r\n filteredData.forEach((d) => {\r\n const rd = prepareComponentCompound(d);\r\n if (rd.atoms.length > 0) {\r\n retData.push(rd);\r\n }\r\n });\r\n return retData;\r\n }\r\n\r\n _packLabel(compId, molId) {\r\n const shift = 16;\r\n return (molId << shift) + compId;\r\n }\r\n\r\n _unpackLabel(l) {\r\n const shift = 16;\r\n const mask = (1 << shift) - 1;\r\n return { molId: l >>> shift, compId: l & mask };\r\n }\r\n\r\n _breadWidthSearch(atoms, molID) {\r\n const atomLabels = new Array(atoms.length);\r\n\r\n let id;\r\n for (id = 0; id < atomLabels.length; id++) {\r\n atomLabels[id] = this._packLabel(0, molID);\r\n }\r\n\r\n const breadthQueue = [];\r\n let componentID = 0;\r\n let labeledAtoms = atoms.length;\r\n\r\n while (labeledAtoms > 0) {\r\n componentID++;\r\n\r\n let startID = -1;\r\n for (id = 0; id < atomLabels.length; id++) {\r\n if (this._unpackLabel(atomLabels[id]).compId === 0) {\r\n startID = id;\r\n break;\r\n }\r\n }\r\n\r\n if (startID < 0) {\r\n break;\r\n }\r\n\r\n // Bread first search\r\n breadthQueue.push(atoms[startID]);\r\n atomLabels[startID] = this._packLabel(componentID, molID);\r\n labeledAtoms--;\r\n\r\n while (breadthQueue.length > 0) {\r\n const curr = breadthQueue.shift();\r\n if (!curr) {\r\n continue;\r\n }\r\n\r\n for (let i = 0; i < curr.edges.length; i++) {\r\n if (atomLabels[curr.edges[i]] !== componentID) {\r\n breadthQueue.push(atoms[curr.edges[i]]);\r\n atomLabels[curr.edges[i]] = componentID;\r\n labeledAtoms--;\r\n }\r\n }\r\n }\r\n }\r\n const ret = {};\r\n ret.atomLabels = atomLabels;\r\n ret.labelsCount = componentID;\r\n return ret;\r\n }\r\n\r\n _parseBond(eAtom, mainAtom, order, type) {\r\n if (eAtom >= 0) {\r\n const h = [Math.min(eAtom, mainAtom), Math.max(eAtom, mainAtom)];\r\n this._complex.addBond(h[0], h[1], order, type, true);\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const complex = this._complex;\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, ni = atoms.length; i < ni; ++i) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n const bonds = complex._bonds;\r\n const { logger } = this;\r\n for (let j = 0, nj = bonds.length; j < nj; ++j) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n logger.debug('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _parseSet(varData) {\r\n const complex = this._complex = new Complex();\r\n const data = varData;\r\n const currentLabel = data.curr;\r\n const { atoms, labels } = data;\r\n let atom = null;\r\n let i;\r\n let j;\r\n const count = atoms.length;\r\n\r\n function addFunc(a) {\r\n a.xmlNodeRef = atom;\r\n if (atom.x2) {\r\n atom.x3 = atom.x2;\r\n delete atom.x2;\r\n }\r\n if (atom.y2) {\r\n atom.y3 = atom.y2;\r\n delete atom.y2;\r\n }\r\n if (!(atom.z3)) {\r\n atom.z3 = '0.0';\r\n }\r\n atom.complexAtom = a;\r\n }\r\n\r\n let chains = {};\r\n // parse atoms in label order\r\n const reorder = [];\r\n for (i = 0; i < count; i++) {\r\n reorder.push(i);\r\n }\r\n reorder.sort((a, b) => labels[a] - labels[b]);\r\n for (i = 0; i < count; i++) {\r\n const atomCharge = 0;\r\n const lLabel = labels[reorder[i]];\r\n if (this._unpackLabel(lLabel).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[reorder[i]];\r\n const atomFullNameStruct = atom.elementType;\r\n\r\n if (atom.sgroupRef) {\r\n const countRef = atom.sgroupRef.length;\r\n for (let k = 0; k < countRef; ++k) {\r\n complex._sgroups.push(atom.sgroupRef[k]);\r\n }\r\n }\r\n\r\n if (atom.x3 || atom.x2) {\r\n const currAtomComp = this._unpackLabel(lLabel).compId;\r\n // use ' ' by default instead of synthetic creation of chain names\r\n const chainID = ' '; //= String.fromCharCode('A'.charCodeAt(0) + currAtomComp);\r\n const resSeq = currAtomComp;\r\n const iCode = ' ';\r\n let strLabel = currAtomComp.toString();\r\n if (strLabel.length === 1) {\r\n strLabel = `0${strLabel}`;\r\n }\r\n const resName = `N${strLabel}`;\r\n let chain = chains[chainID];\r\n if (!chain || chain.getName() !== chainID) {\r\n chains[chainID] = chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = null;\r\n }\r\n\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n this._residue = residue = chain.addResidue(resName, resSeq, iCode);\r\n }\r\n\r\n // _x, _y, _z, mname, mindex, atomNameFull, atomName, chainID, serial, isHet, atlLocInd, atomNameToTypeF\r\n let xyz = null;\r\n if (atom.x3) {\r\n xyz = new THREE.Vector3(parseFloat(atom.x3), parseFloat(atom.y3), parseFloat(atom.z3));\r\n } else if (atom.x2) {\r\n xyz = new THREE.Vector3(parseFloat(atom.x2), parseFloat(atom.y2), 0);\r\n }\r\n let element = Element.ByName[atom.elementType.toUpperCase()];\r\n if (!element) {\r\n element = (JSON.parse(JSON.stringify(Element.ByName[\r\n Object.keys(Element.ByName)[Object.keys(Element.ByName).length - 1]])));\r\n element.number += 1;\r\n element.name = atom.elementType.toUpperCase();\r\n element.fullName = 'Unknown';\r\n Element.ByName[atom.elementType.toUpperCase()] = element;\r\n }\r\n const atomSerial = parseInt(atom.id.replace(/[^0-9]/, ''), 10);\r\n const added = residue.addAtom(\r\n atomFullNameStruct,\r\n element,\r\n xyz,\r\n Element.Role.SG,\r\n true,\r\n atomSerial,\r\n ' ',\r\n 1.0,\r\n 0.0,\r\n atomCharge,\r\n );\r\n if (atom.hydrogenCount) {\r\n added.hydrogenCount = parseInt(atom.hydrogenCount, 10);\r\n }\r\n if (atom.mrvValence) {\r\n added.valence = parseInt(atom.mrvValence, 10);\r\n }\r\n addFunc(added);\r\n }\r\n }\r\n }\r\n chains = null;// NOSONAR\r\n for (i = 0; i < data.bonds.length; i++) {\r\n const cb = data.bonds[i];\r\n if (this._unpackLabel(labels[cb.start]).molId === this._unpackLabel(currentLabel).molId\r\n && this._unpackLabel(labels[cb.end]).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[cb.start];\r\n if (!atom || !(atoms[cb.end])) {\r\n continue; // skip invalid\r\n }\r\n this._parseBond(\r\n parseInt(atom.id.replace(/[^0-9]/, ''), 10),\r\n parseInt(atoms[cb.end].id.replace(/[^0-9]/, ''), 10),\r\n cb.order,\r\n cb.type,\r\n );\r\n }\r\n }\r\n\r\n for (i = 0; i < this._complex.getSGroupCount(); i++) {\r\n const sGrp = this._complex.getSGroups()[i];\r\n for (j = 0; j < sGrp._atoms.length; j++) {\r\n sGrp._atoms[j] = sGrp._atoms[j].complexAtom;\r\n }\r\n }\r\n for (i = 0; i < count; i++) {\r\n if (this._unpackLabel(labels[i]).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[i];\r\n atom.complexAtom = null;\r\n delete atom.complexAtom;\r\n }\r\n }\r\n this._complex.originalCML = data.originalCML;\r\n this._fixBondsArray();\r\n complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n this._serialAtomMap = null;\r\n this._complex = null;\r\n return complex;\r\n }\r\n\r\n parseSync() {\r\n const complexes = [];\r\n const self = this;\r\n const moleculaSet = this._selectComponents(this._data);\r\n moleculaSet.forEach((molSet) => {\r\n molSet.curr = 2;\r\n if (molSet.count === 0) {\r\n molSet.count = 1;\r\n }\r\n for (let i = 0; i < molSet.count; i++) {\r\n molSet.curr = (i + 1);\r\n complexes.push(self._parseSet(molSet, false));\r\n }\r\n });\r\n\r\n let totalAtomsParsed = 0;\r\n complexes.forEach((c) => {\r\n totalAtomsParsed += c.getAtomCount();\r\n });\r\n if (totalAtomsParsed <= 0) {\r\n throw new Error('The data does not contain valid atoms');\r\n }\r\n\r\n if (complexes.length > 1) {\r\n const joinedComplex = new Complex();\r\n joinedComplex.joinComplexes(complexes);\r\n joinedComplex.originalCML = complexes[0].originalCML;\r\n return joinedComplex;\r\n }\r\n if (complexes.length === 1) {\r\n return complexes[0];\r\n }\r\n return new Complex();\r\n }\r\n}\r\n\r\nCMLParser.formats = ['cml'];\r\nCMLParser.extensions = ['.cml'];\r\n\r\nexport default CMLParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport MMTF from '../../../vendor/js/mmtf';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst {\r\n Complex,\r\n Chain,\r\n Atom,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Bond,\r\n Assembly,\r\n Molecule,\r\n} = chem;\r\n\r\nclass ArrayComparator {\r\n constructor(original) {\r\n this._original = Array.from(original);\r\n this._original.sort();\r\n\r\n this._sum = 0;\r\n for (let i = 0; i < this._original.length; ++i) {\r\n this._sum += this._original[i];\r\n }\r\n }\r\n\r\n compare(candidate) {\r\n const len = candidate.length;\r\n if (len !== this._original.length) {\r\n return false;\r\n }\r\n\r\n let sum = 0;\r\n let i;\r\n for (i = 0; i < len; ++i) {\r\n sum += candidate[i];\r\n }\r\n\r\n if (sum !== this._sum) {\r\n return false;\r\n }\r\n\r\n const sorted = Array.from(candidate);\r\n sorted.sort();\r\n\r\n for (i = 0; i < len; ++i) {\r\n if (sorted[i] !== this._original[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nArrayComparator.prototype.constructor = ArrayComparator;\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\n// see https://github.com/rcsb/mmtf-javascript/blob/master/src/mmtf-traverse.js\r\nconst secStructToType = [\r\n StructuralElementType.HELIX_PI, // 0\r\n StructuralElementType.BEND, // 1\r\n StructuralElementType.HELIX_ALPHA, // 2\r\n StructuralElementType.STRAND, // 3\r\n StructuralElementType.HELIX_310, // 4\r\n StructuralElementType.BRIDGE, // 5\r\n StructuralElementType.TURN, // 6\r\n StructuralElementType.COIL, // 7\r\n];\r\n\r\nfunction getFirstByte(buf) {\r\n const bytes = new Uint8Array(buf, 0, 1);\r\n return bytes[0];\r\n}\r\n\r\nclass MMTFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'mmtf';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n // check if it's binary MessagePack format containing a map (dictionary)\r\n // see https://github.com/msgpack/msgpack/blob/master/spec.md\r\n return _.isArrayBuffer(data) && ((getFirstByte(data) | 1) === 0xDF);\r\n }\r\n\r\n _onModel(_modelData) {\r\n }\r\n\r\n _onChain(chainData) {\r\n if (chainData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n const chain = new Chain(this._complex, chainData.chainName);\r\n this._complex._chains[chainData.chainIndex] = chain;\r\n chain._index = chainData.chainIndex;\r\n }\r\n\r\n _onGroup(groupData) {\r\n if (groupData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n if (this.settings.now.nowater) {\r\n // skip water\r\n if (groupData.groupName === 'HOH' || groupData.groupName === 'WAT') {\r\n return;\r\n }\r\n }\r\n\r\n const chain = this._complex._chains[groupData.chainIndex];\r\n const icode = !groupData.insCode.charCodeAt(0) ? '' : groupData.insCode;\r\n const residue = chain.addResidue(groupData.groupName, groupData.groupId, icode);\r\n residue._index = groupData.groupIndex;\r\n\r\n this._updateSecStructure(this._complex, residue, groupData);\r\n }\r\n\r\n _onAtom(atomData) {\r\n if (atomData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n const altLoc = !atomData.altLoc.charCodeAt(0) ? '' : atomData.altLoc;\r\n const atom = new Atom(\r\n atomData.groupIndex, // we store residue index here to replace it later with actual reference\r\n atomData.atomName,\r\n Element.getByName(atomData.element.toUpperCase()),\r\n new THREE.Vector3(atomData.xCoord, atomData.yCoord, atomData.zCoord),\r\n Element.Role[atomData.atomName],\r\n false, // hetero atoms will be marked later\r\n atomData.atomId,\r\n altLoc,\r\n atomData.occupancy,\r\n atomData.bFactor,\r\n atomData.formalCharge,\r\n );\r\n\r\n this._complex._atoms[atomData.atomIndex] = atom;\r\n atom.index = atomData.atomIndex;\r\n\r\n this._serialAtomMap[atomData.atomId] = atom;\r\n }\r\n\r\n _onBond(bondData) {\r\n const right = Math.max(bondData.atomIndex1, bondData.atomIndex2);\r\n if (right >= this._complex._atoms.length) {\r\n return;\r\n }\r\n const left = Math.min(bondData.atomIndex1, bondData.atomIndex2);\r\n this._complex.addBond(\r\n this._complex._atoms[left],\r\n this._complex._atoms[right],\r\n bondData.bondOrder,\r\n Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n\r\n _updateSecStructure(complex, residue, groupData) {\r\n const helixClasses = [3, -1, 1, -1, 5];\r\n\r\n if (!_.isUndefined(groupData) && groupData.secStruct === this._ssType) {\r\n residue._secondary = this._ssStruct;\r\n if (this._ssStruct) {\r\n this._ssStruct.term = residue;\r\n }\r\n return;\r\n }\r\n\r\n if (!_.isUndefined(groupData)) {\r\n // start new secondary structure\r\n const type = secStructToType[groupData.secStruct];\r\n this._ssType = groupData.secStruct;\r\n this._ssStart = residue;\r\n\r\n let struct = null;\r\n switch (this._ssType) {\r\n case -1: // undefined\r\n case 7: // coil\r\n break;\r\n case 0: // pi helix\r\n case 2: // alpha helix\r\n case 4: // 3-10 helix\r\n struct = new Helix(helixClasses[this._ssType], residue, residue, 0, '', '', 0);\r\n complex._helices.push(struct);\r\n break;\r\n case 3: { // extended\r\n const sheet = new Sheet('', 0);\r\n complex._sheets.push(sheet);\r\n struct = new Strand(sheet, residue, residue, 0, null, null);\r\n break;\r\n }\r\n default:\r\n if (type !== undefined) {\r\n struct = new StructuralElement(type, residue, residue);\r\n }\r\n break;\r\n }\r\n\r\n this._ssStruct = struct;\r\n residue._secondary = struct;\r\n if (struct) {\r\n complex.structures.push(struct);\r\n }\r\n }\r\n }\r\n\r\n _updateMolecules(mmtfData) {\r\n const entities = mmtfData.entityList;\r\n if (!entities) {\r\n return;\r\n }\r\n\r\n const chainsInModel0 = mmtfData.chainsPerModel[0];\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const chains = entity.chainIndexList;\r\n let residues = [];\r\n for (let j = 0; j < chains.length; j++) {\r\n const chainIndex = chains[j];\r\n // skip chains in models other than the first one\r\n if (chainIndex >= chainsInModel0) {\r\n continue;\r\n }\r\n const chain = this._complex._chains[chainIndex];\r\n residues = residues.concat(chain._residues.slice());\r\n }\r\n const molecule = new Molecule(this._complex, entity.description, i + 1);\r\n molecule.residues = residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n // populate complex with chains, residues and atoms\r\n _traverse(mmtfData) {\r\n const self = this;\r\n\r\n // get metadata\r\n const { metadata } = this._complex;\r\n metadata.id = mmtfData.structureId;\r\n metadata.title = [];\r\n metadata.title[0] = mmtfData.title;\r\n metadata.date = mmtfData.releaseDate;\r\n metadata.format = 'mmtf';\r\n\r\n // create event callback functions\r\n const eventCallbacks = {\r\n onModel(modelData) {\r\n self._onModel(modelData);\r\n },\r\n onChain(chainData) {\r\n self._onChain(chainData);\r\n },\r\n onGroup(groupData) {\r\n self._onGroup(groupData);\r\n },\r\n onAtom(atomData) {\r\n self._onAtom(atomData);\r\n },\r\n onBond(bondData) {\r\n self._onBond(bondData);\r\n },\r\n };\r\n\r\n // temporary variables used during traversal to track secondary structures\r\n this._ssType = -1;\r\n this._ssStruct = null;\r\n this._ssStart = null;\r\n\r\n // traverse the structure and listen to the events\r\n MMTF.traverse(mmtfData, eventCallbacks);\r\n\r\n this._updateSecStructure(this._complex);\r\n this._updateMolecules(mmtfData);\r\n }\r\n\r\n // During traversal atoms and residues don't come sequentially\r\n // so a residue for certain atom can be unavailable. Thus we\r\n // store residue index in atom.\r\n // This function being called after traversal replaces the index\r\n // with actual reference, and also populates atom lists in residues.\r\n _linkAtomsToResidues() {\r\n for (let i = 0; i < this._complex._atoms.length; ++i) {\r\n const atom = this._complex._atoms[i];\r\n const residue = this._complex._residues[atom.residue];\r\n atom.residue = residue;\r\n residue._atoms.push(atom);\r\n }\r\n }\r\n\r\n _findSynonymousChains() {\r\n const named = {};\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i];\r\n const name = chain.getName();\r\n if (!named.hasOwnProperty(name)) {\r\n named[name] = [];\r\n }\r\n\r\n named[name].push(chain._index);\r\n }\r\n\r\n return named;\r\n }\r\n\r\n // NOTE: This function relies on original chain indices, so it must be called before any magic happens to chains.\r\n _parseAssemblyInfo(mmtfData) {\r\n let i;\r\n let j;\r\n let k;\r\n const assemblies = [];\r\n const { logger } = this;\r\n\r\n for (i = 0; i < mmtfData.bioAssemblyList.length; ++i) {\r\n const baInfo = mmtfData.bioAssemblyList[i];\r\n if (baInfo.transformList.length === 0) {\r\n continue;\r\n }\r\n\r\n const chains = baInfo.transformList[0].chainIndexList;\r\n const chainListCheck = new ArrayComparator(chains);\r\n\r\n // build list of chain names\r\n const chainNames = {};\r\n for (j = 0; j < chains.length; ++j) {\r\n chainNames[this._complex._chains[chains[j]].getName()] = 1;\r\n }\r\n\r\n // all chains with the same name should belong to assembly if one of them belongs\r\n const allChains = [];\r\n let name;\r\n for (name in chainNames) {\r\n if (chainNames.hasOwnProperty(name)) {\r\n // just concat arrays -- there should be no duplicates\r\n Array.prototype.push.apply(allChains, this._chainsByName[name]);\r\n }\r\n }\r\n if (!chainListCheck.compare(allChains)) {\r\n // assembly is missing some of the chains\r\n logger.debug('MMTF: Assembly is missing some of the synonymous chains. Skipping...');\r\n }\r\n\r\n const a = new Assembly(this._complex);\r\n\r\n // add chains to assembly\r\n for (name in chainNames) {\r\n if (chainNames.hasOwnProperty(name)) {\r\n a.addChain(name);\r\n }\r\n }\r\n\r\n // add unique matrices to assembly\r\n a.addMatrix(new THREE.Matrix4().fromArray(baInfo.transformList[0].matrix).transpose());\r\n for (j = 1; j < baInfo.transformList.length; ++j) {\r\n const transform = baInfo.transformList[j];\r\n\r\n if (!chainListCheck.compare(transform.chainIndexList)) {\r\n // list of chains for this transform doesn't match that for other transforms\r\n // this is illegal in our structure\r\n logger.debug('MMTF: Chain lists differ for different transforms in one assembly. Skipping...');\r\n continue;\r\n }\r\n\r\n const m = new THREE.Matrix4().fromArray(transform.matrix).transpose();\r\n\r\n // check if matrix is already in the list\r\n for (k = 0; k < a.matrices.length; ++k) {\r\n if (a.matrices[k].equals(m)) {\r\n break;\r\n }\r\n }\r\n\r\n if (k === a.matrices.length) {\r\n a.addMatrix(m);\r\n }\r\n }\r\n\r\n a.finalize();\r\n assemblies.push(a);\r\n }\r\n\r\n return assemblies;\r\n }\r\n\r\n // NOTE: This function relies on original chain indices, so it must be called before any magic happens to chains.\r\n _markHeteroAtoms(mmtfData) {\r\n const chainsInModel0 = mmtfData.chainsPerModel[0];\r\n for (let i = 0; i < mmtfData.entityList.length; ++i) {\r\n const entity = mmtfData.entityList[i];\r\n if (entity.type !== 'polymer') {\r\n for (let j = 0; j < entity.chainIndexList.length; ++j) {\r\n const chainIndex = entity.chainIndexList[j];\r\n // skip chains in models other than the first one\r\n if (chainIndex >= chainsInModel0) {\r\n continue;\r\n }\r\n const chain = this._complex._chains[chainIndex];\r\n for (let k = 0; k < chain._residues.length; ++k) {\r\n const res = chain._residues[k];\r\n for (let m = 0; m < res._atoms.length; ++m) {\r\n res._atoms[m].het = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // joins chains with the same name into single chain\r\n _joinSynonymousChains() {\r\n let i;\r\n let j;\r\n\r\n const primaryChainsArray = [];\r\n const primaryChainsHash = {};\r\n\r\n // join chains\r\n for (i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i];\r\n const name = chain.getName();\r\n if (!primaryChainsHash.hasOwnProperty(name)) {\r\n // new name -- this is a primary chain\r\n primaryChainsHash[name] = chain;\r\n chain._index = primaryChainsArray.length; // update index as this array will later replace original chain list\r\n primaryChainsArray.push(chain);\r\n continue;\r\n }\r\n\r\n // this chain should be joined with the primary chain of the same name\r\n const primary = primaryChainsHash[name];\r\n for (j = 0; j < chain._residues.length; ++j) {\r\n const residue = chain._residues[j];\r\n primary._residues.push(residue);\r\n residue._chain = primary;\r\n }\r\n }\r\n\r\n // replace chains list with one containing only primary chains\r\n // dropping references to all chains but primary\r\n this._complex._chains = primaryChainsArray;\r\n }\r\n\r\n parseSync() {\r\n const mmtfData = MMTF.decode(this._data);\r\n\r\n this._complex = new Complex();\r\n this._serialAtomMap = {}; // filled during traversal\r\n\r\n this._traverse(mmtfData);\r\n this._linkAtomsToResidues();\r\n this._markHeteroAtoms(mmtfData);\r\n this._chainsByName = this._findSynonymousChains();\r\n Array.prototype.push.apply(this._complex.units, this._parseAssemblyInfo(mmtfData));\r\n this._joinSynonymousChains();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n\r\n return this._complex;\r\n }\r\n}\r\n\r\nMMTFParser.formats = ['mmtf'];\r\nMMTFParser.extensions = ['.mmtf'];\r\nMMTFParser.binary = true;\r\n\r\nexport default MMTFParser;\r\n","class ParsingError extends Error {\r\n constructor(message, line, column) {\r\n super(`data:${line}:${column}: ${message}`);\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, ParsingError);\r\n }\r\n\r\n this.name = 'ParsingError';\r\n this.parseLine = line;\r\n this.parseColumn = column;\r\n }\r\n}\r\n\r\nexport default ParsingError;\r\n","import _ from 'lodash';\r\nimport ParsingError from './ParsingError';\r\n\r\n// Implemented and being tested against: https://www.iucr.org/resources/cif/spec/version1.1/cifsyntax\r\n\r\nfunction _isWhitespace(ch) {\r\n return ch === 32 || ch === 10 || ch === 13 || ch === 9;\r\n}\r\n\r\nfunction _inlineIndexOf(ch0, str, idx) {\r\n const len = str.length;\r\n let ch = -1;\r\n while (idx < len) {\r\n ch = str.charCodeAt(idx);\r\n if (ch === ch0 || ch === 10) {\r\n break;\r\n }\r\n ++idx;\r\n }\r\n return ch === ch0 ? idx : -1;\r\n}\r\n\r\nexport default function readCIF(source) {\r\n let i = 0;\r\n let j = 0;\r\n const n = source.length;\r\n let code = NaN;\r\n let newline = true;\r\n let line = 1;\r\n let column = 1;\r\n let begin;\r\n let state = 0; // 0 - start, 1 - block, 2 - item, 3 - loop, 4 - values, 5 - value\r\n const result = {};\r\n let block = {};\r\n let keys = [];\r\n let keysCount = 0;\r\n let key = '';\r\n let values = [];\r\n let valuesCount = 0;\r\n let value;\r\n\r\n function _parseValue() {\r\n let val;\r\n if ((code === 46 || code === 63) && (i + 1 >= n || _isWhitespace(source.charCodeAt(i + 1)))) { // '.' or '?' .....\r\n // it's a missing value\r\n ++column;\r\n ++i;\r\n return undefined;\r\n }\r\n if (newline && code === 59) { // ';' ......................................................................\r\n // parse multi-line string\r\n j = i;\r\n let lines = 0;\r\n do {\r\n j = _inlineIndexOf(10, source, j + 1); // '\\n'\r\n if (j === -1) {\r\n throw new ParsingError('Unterminated text block found', line, column);\r\n }\r\n ++lines;\r\n } while ((j + 1 < n && source.charCodeAt(j + 1) !== code) || j + 1 >= n);\r\n val = source.substring(i + 1, j).replace(/\\r/g, '');\r\n i = j + 2;\r\n line += lines;\r\n column = 1;\r\n newline = false;\r\n return val;\r\n }\r\n if (code === 39 || code === 34) { // ''' or '\"' ...........................................................\r\n // parse quoted string\r\n j = i;\r\n do {\r\n j = _inlineIndexOf(code, source, j + 1);\r\n if (j === -1) {\r\n throw new ParsingError('Unterminated quoted string found', line, column);\r\n }\r\n } while (j + 1 < n && !_isWhitespace(source.charCodeAt(j + 1)));\r\n val = source.substring(i + 1, j);\r\n column += j - i + 1;\r\n i = j + 1;\r\n return val;\r\n } // ......................................................................................................\r\n // parse until the first whitespace\r\n j = i;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n val = source.substring(i, j);\r\n column += j - i;\r\n i = j;\r\n // try to convert to a number\r\n const num = Number(val);\r\n if (!Number.isNaN(num)) {\r\n return num;\r\n }\r\n // or leave as an unquoted string\r\n return val;\r\n }\r\n\r\n function _storeKey(tag) {\r\n keys[keysCount++] = tag;\r\n }\r\n\r\n function _storeValue(val) {\r\n const keyIndex = valuesCount % keysCount;\r\n values[keyIndex].push(val);\r\n ++valuesCount;\r\n return val;\r\n }\r\n\r\n while (i <= n) {\r\n code = source.charCodeAt(i); // 'NaN' in place of ''\r\n if (code === 13) { // '\\r' .......................................................................................\r\n // just ignore\r\n } else if (code === 10) { // '\\n' ................................................................................\r\n // take note of new lines\r\n newline = true;\r\n ++line;\r\n column = 1;\r\n } else {\r\n // process inline characters\r\n if (code === 32 || code === 9) { // ' ' or '\\t' ................................................................\r\n // just ignore\r\n } else if (code === 35) { // '#' ...............................................................................\r\n // skip the comment until before the end of the line\r\n i = _inlineIndexOf(10, source, i + 1); // '\\n'\r\n if (i === -1) {\r\n break;\r\n } else {\r\n continue; // don't forget to process the new line\r\n }\r\n } else if (state === 0) { // start =============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n j = i + 5;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // add new data block\r\n result[source.substring(begin, i)] = block = {};\r\n state = 1; // block\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Data block name missing', line, column);\r\n }\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n break;\r\n } else { // ..................................................................................................\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n }\r\n } else if (state === 1) { // block =============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n state = 0; // start\r\n continue; // parse again in a different state\r\n } else if (code === 95) { // '_' .............................................................................\r\n j = i + 1;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // start new item\r\n key = source.substring(begin, i);\r\n state = 2; // item\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Tag name missing', line, column);\r\n }\r\n } else if ((code === 76 || code === 108) && source.substr(i + 1, 4).toLowerCase() === 'oop_') { // 'loop_' ...\r\n i += 5;\r\n column += 5;\r\n if (i < n && !_isWhitespace(source.charCodeAt(i))) {\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n } else {\r\n // start new loop\r\n keys = [];\r\n keysCount = 0;\r\n values = [];\r\n valuesCount = 0;\r\n state = 3; // loop\r\n continue; // don't forget to process the whitespace\r\n }\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n break;\r\n } else { // ..................................................................................................\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n }\r\n } else if (state === 2) { // item ==============================================================================\r\n if (Number.isNaN(code)) {\r\n break;\r\n }\r\n value = _parseValue();\r\n _.set(block, key, value);\r\n state = 1; // block\r\n continue;\r\n } else if (state === 3) { // loop ==============================================================================\r\n if (code === 95) { // '_' ....................................................................................\r\n j = i + 1;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // add new key\r\n _storeKey(source.substring(begin, i));\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Tag name missing', line, column);\r\n }\r\n } else { // ..................................................................................................\r\n if (keysCount > 0) {\r\n for (let keyIndex = 0; keyIndex < keysCount; ++keyIndex) {\r\n value = [];\r\n values[keyIndex] = value;\r\n _.set(block, keys[keyIndex], value);\r\n }\r\n state = 4;\r\n continue; // parse again in a different state\r\n }\r\n throw new ParsingError('Data tags are missing inside a loop', line, column);\r\n }\r\n } else if (state === 4) { // values ============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n state = 0; // start\r\n } else if (code === 95) { // '_' .............................................................................\r\n state = 1; // block\r\n } else if ((code === 76 || code === 108) && source.substr(i + 1, 4).toLowerCase() === 'oop_') { // 'loop_' ...\r\n state = 1; // block\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n state = 0;\r\n } else { // ..................................................................................................\r\n _storeValue(_parseValue());\r\n }\r\n continue; // parse again in a different state\r\n } else { // ====================================================================================================\r\n throw new ParsingError(`Unexpected internal state ${state}`, line, column);\r\n }\r\n\r\n newline = false;\r\n ++column;\r\n }\r\n ++i;\r\n }\r\n\r\n if (state === 2) { // item\r\n throw new ParsingError(`Unexpected end of file in state ${state}`, line, column);\r\n }\r\n\r\n return result;\r\n}\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\nimport readCIF from './readCIF';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Assembly,\r\n Molecule,\r\n} = chem;\r\n\r\nconst cRequiredAtomFields = [\r\n 'auth_seq_id',\r\n 'Cartn_x',\r\n 'Cartn_y',\r\n 'Cartn_z',\r\n 'label_atom_id',\r\n];\r\n\r\nconst cSecondaryCoding = {\r\n helx: 'helix',\r\n turn: 'turn',\r\n strn: 'strand',\r\n};\r\n\r\nfunction getTypeFromId(string) {\r\n const typeId = /[A-Za-z]+/.exec(string);\r\n if (!typeId) {\r\n return null;\r\n }\r\n\r\n return cSecondaryCoding[typeId[0].toLowerCase()];\r\n}\r\n\r\n/**\r\n * Make valid object an array\r\n * @param arrayLikeObject\r\n * @return {array, object} array or object\r\n */\r\nfunction arrize(arrayLikeObject) {\r\n if (arrayLikeObject === null || arrayLikeObject === undefined || _.isArray(arrayLikeObject)) {\r\n return arrayLikeObject;\r\n }\r\n return [arrayLikeObject];\r\n}\r\n\r\nfunction nameToElement(name) {\r\n // http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM\r\n //\r\n // http://www.cgl.ucsf.edu/chimera/docs/UsersGuide/tutorials/pdbintro.html#note1\r\n //\r\n // Atom names start with element symbols right-justified in columns 13-14\r\n // as permitted by the length of the name. For example, the symbol FE for\r\n // iron appears in columns 13-14, whereas the symbol C for carbon appears\r\n // in column 14 (see Misaligned Atom Names). If an atom name has four\r\n // characters, however, it must start in column 13 even if the element\r\n // symbol is a single character (for example, see Hydrogen Atoms).\r\n\r\n const veryLong = name.trim().length === 4;\r\n return name.slice(0, veryLong ? 1 : 2).trim();\r\n}\r\n\r\nclass AtomDataError extends Error {\r\n constructor(message) {\r\n super();\r\n this.name = 'AtomDataError';\r\n this.message = message;\r\n }\r\n}\r\n\r\nfunction _getOperations(operList) {\r\n if (!operList) {\r\n return null;\r\n }\r\n const idc = arrize(operList.id);\r\n const { matrix, vector } = operList;\r\n if (!idc || !matrix || !vector) {\r\n return null;\r\n }\r\n\r\n const ops = [];\r\n for (let i = 0, n = idc.length; i < n; ++i) {\r\n const mtx = new THREE.Matrix4();\r\n const { elements } = mtx;\r\n\r\n for (let row = 0; row < 3; ++row) {\r\n const matrixData = matrix[row + 1];\r\n elements[row] = arrize(matrixData[1])[i];\r\n elements[row + 4] = arrize(matrixData[2])[i];\r\n elements[row + 8] = arrize(matrixData[3])[i];\r\n elements[row + 12] = arrize(vector[row + 1])[i];\r\n }\r\n ops[idc[i]] = mtx;\r\n }\r\n return ops;\r\n}\r\n\r\nfunction _extractOperations(assemblyGen, opsDict) {\r\n assemblyGen = _.isString(assemblyGen) ? assemblyGen : `${assemblyGen}`;\r\n const l = assemblyGen.replace(/\\)\\s*\\(/g, '!').replace(/[()']/g, '');\r\n const groupStr = l.split('!');\r\n const gps = [];\r\n\r\n for (let grIdx = 0, grCount = groupStr.length; grIdx < grCount; ++grIdx) {\r\n const gr = groupStr[grIdx].split(',');\r\n const gp = [];\r\n let idx = 0;\r\n for (let i = 0, n = gr.length; i < n; ++i) {\r\n const s = gr[i];\r\n if (s.includes('-')) {\r\n const es = s.split('-');\r\n let j = parseInt(es[0], 10);\r\n const m = parseInt(es[1], 10);\r\n for (; j <= m; ++j) {\r\n gp[idx++] = opsDict[j];\r\n }\r\n } else {\r\n gp[idx++] = opsDict[s];\r\n }\r\n }\r\n gps.push(gp);\r\n }\r\n\r\n // traverse all groups from the end of array and make all mults\r\n const matrices = [];\r\n let cnt = 0;\r\n function traverse(level, mtx) {\r\n for (let ii = 0, nn = gps[level].length; ii < nn; ++ii) {\r\n const newMtx = mtx ? mtx.clone() : new THREE.Matrix4();\r\n newMtx.multiplyMatrices(gps[level][ii], newMtx);\r\n if (level === 0) {\r\n matrices[cnt++] = newMtx;\r\n } else {\r\n traverse(level - 1, newMtx);\r\n }\r\n }\r\n }\r\n traverse(gps.length - 1);\r\n return matrices;\r\n}\r\n\r\nclass CIFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this.asymDict = {};\r\n this.molecules = [];\r\n this._options.fileType = 'cif';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && /^\\s*data_/i.test(data);\r\n }\r\n\r\n parseSync() {\r\n this.logger.info('Parsing CIF file..');\r\n const data = readCIF(this._data);\r\n return this._toComplex(data);\r\n }\r\n\r\n /**\r\n * Convert intermediate structure into our valid Complex object\r\n * @param cifData intermediate CIF object\r\n * @returns {Complex} complex\r\n * @private\r\n */\r\n _toComplex(cifData) {\r\n const complex = new Complex();\r\n const complexData = cifData[Object.keys(cifData)[0]];\r\n this._extractAtoms(complex, complexData);\r\n this._extractSecondary(complex, complexData);\r\n this._extractAssemblies(complex, complexData);\r\n this._extractMolecules(complex, complexData);\r\n this._extractMetadata(complex, complexData);\r\n complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n });\r\n\r\n return complex;\r\n }\r\n\r\n /**\r\n * Extract metadata\r\n * @param complex structure to fill\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n\r\n _extractMetadata(complex, complexData) {\r\n const { metadata } = complex;\r\n metadata.id = complexData.entry.id;\r\n metadata.classification = complexData.struct_keywords.pdbx_keywords;\r\n const databaserev = complexData.database_PDB_rev;\r\n metadata.date = (databaserev && databaserev.date_original) ? databaserev.date_original : '';\r\n metadata.format = 'cif';\r\n metadata.title = [];\r\n metadata.title[0] = complexData.struct.title;\r\n }\r\n\r\n /**\r\n * Extract molecules information from CIF structure (should be called strictly after _extractAtoms)\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractMolecules(complex, complexData) {\r\n const molData = complexData.entity;\r\n const names = arrize(molData.pdbx_description);\r\n const count = names.length;\r\n let i;\r\n\r\n // molecules names from cif\r\n for (i = 0; i < count; i++) {\r\n if (this.molecules[i]) { // molecule was created during atoms processing\r\n this.molecules[i].name = names[i];\r\n } else { // molecule wasn't created, because there is no atom which is contained\r\n this.molecules[i] = { name: names[i], residues: [] };\r\n }\r\n }\r\n\r\n // reorganize molecules for complex and check chains\r\n const molecules = complex.getMolecules();\r\n for (i = 0; i < count; i++) {\r\n const molecule = this.molecules[i];\r\n molecules[i] = new Molecule(complex, molecule.name, i + 1);\r\n molecules[i].residues = molecule.residues;\r\n }\r\n }\r\n\r\n /**\r\n * Extract atom information from CIF structure and fill complex\r\n * @param {Complex} complex\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractAtoms(complex, complexData) {\r\n const atomData = complexData.atom_site;\r\n if (!atomData) {\r\n throw new AtomDataError('CIF parsing error: atom_site is not specified!');\r\n }\r\n\r\n for (let f = 0, n = cRequiredAtomFields.length; f < n; ++f) {\r\n if (!atomData[cRequiredAtomFields[f]]) {\r\n throw new AtomDataError(`CIF parsing error: requires field ${cRequiredAtomFields[f]} not found!`);\r\n }\r\n }\r\n\r\n const { asymDict } = this;\r\n // required fields\r\n const resIdc = arrize(atomData.auth_seq_id);\r\n const x = arrize(atomData.Cartn_x);\r\n const y = arrize(atomData.Cartn_y);\r\n const z = arrize(atomData.Cartn_z);\r\n const names = arrize(atomData.label_atom_id);\r\n const count = names.length;\r\n // optional fields\r\n const group = arrize(atomData.group_PDB) || [];\r\n const chainIdc = arrize(atomData.auth_asym_id) || [];\r\n const chainLabelIdc = arrize(atomData.label_asym_id) || [];\r\n const serials = arrize(atomData.id) || [];\r\n const iCodes = arrize(atomData.pdbx_PDB_ins_code) || [];\r\n const resNames = arrize(atomData.label_comp_id) || [];\r\n const elements = arrize(atomData.type_symbol) || [];\r\n const tempFactors = arrize(atomData.B_iso_or_equiv) || [];\r\n const occupancies = arrize(atomData.occupancy) || [];\r\n const charges = arrize(atomData.pdbx_formal_charge) || [];\r\n const altLocs = arrize(atomData.label_alt_id) || [];\r\n const models = arrize(atomData.pdbx_PDB_model_num) || [];\r\n const molecules = arrize(atomData.label_entity_id) || [];\r\n\r\n let chain = null;\r\n let residue = null;\r\n for (let i = 0; i < count; ++i) {\r\n const model = models[i] || 1;\r\n if (model !== 1) {\r\n continue;\r\n }\r\n const chainID = String(chainIdc[i] || ' ');\r\n\r\n if (!chain || chain.getName() !== chainID) {\r\n chain = complex.getChain(chainID) || complex.addChain(chainID);\r\n }\r\n asymDict[String(chainLabelIdc[i] || ' ')] = chainID;\r\n const resSeq = resIdc[i];\r\n const iCode = String(iCodes[i] || ' ');\r\n const resName = String(resNames[i] || '');\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n residue = chain.addResidue(resName, resSeq, iCode);\r\n\r\n // store residue in appropriate molecule\r\n const moleculeIdx = molecules[i] - 1;\r\n let entity = this.molecules[moleculeIdx];\r\n if (!entity) { // create new molecule if it hasn't been created\r\n this.molecules[moleculeIdx] = { name: '', residues: [] };\r\n entity = this.molecules[moleculeIdx];\r\n }\r\n entity.residues.push(residue);\r\n }\r\n\r\n const name = names[i];\r\n const element = elements[i] || nameToElement(name);\r\n const type = Element.getByName(element);\r\n const role = Element.Role[name.trim()];\r\n const xyz = new THREE.Vector3(x[i], y[i], z[i]);\r\n const het = group[i] === 'HETATM' || false;\r\n const serial = serials[i] || i;\r\n const tempFactor = tempFactors[i] || 0.0;\r\n const occupancy = occupancies[i] || 0.0;\r\n const altLoc = String(altLocs[i] || '');\r\n const charge = charges[i] || 0;\r\n\r\n residue.addAtom(\r\n name,\r\n type,\r\n xyz,\r\n role,\r\n het,\r\n serial,\r\n altLoc,\r\n occupancy,\r\n tempFactor,\r\n charge,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Extracts secondary structure information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex - complex to fill\r\n * @param complexData - CIF complex data\r\n * @private\r\n */\r\n _extractSecondary(complex, complexData) {\r\n if (complexData.struct_conf) {\r\n this._extractConfs(complex, complexData.struct_conf);\r\n }\r\n if (complexData.struct_sheet_range) {\r\n this._extractSheets(complex, complexData.struct_sheet_range);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts sheets information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex\r\n * @param sheetData\r\n * @private\r\n */\r\n _extractSheets(complex, sheetData) {\r\n const { asymDict } = this;\r\n if (!sheetData.sheet_id || !sheetData.id || !sheetData.beg_label_seq_id || !sheetData.end_label_seq_id\r\n || !sheetData.beg_label_asym_id) {\r\n return;\r\n }\r\n // Strand(sheet, start, end, sense, cur, prev)\r\n const sheets = complex._sheets;\r\n\r\n function getSheet(name) {\r\n const n = sheets.length;\r\n for (let i = 0; i < n; ++i) {\r\n if (sheets[i]._name === name) {\r\n return sheets[i];\r\n }\r\n }\r\n sheets[n] = new Sheet(name, 0);\r\n return sheets[n];\r\n }\r\n\r\n const sheetNames = arrize(sheetData.sheet_id);\r\n const strandNames = arrize(sheetData.id);\r\n const starts = arrize(sheetData.beg_auth_seq_id);\r\n const ends = arrize(sheetData.end_auth_seq_id);\r\n const chains = arrize(sheetData.beg_label_asym_id);\r\n const stICodes = arrize(sheetData.pdbx_beg_PDB_ins_code) || [];\r\n const endICodes = arrize(sheetData.pdbx_end_PDB_ins_code) || [];\r\n\r\n for (let i = 0, n = strandNames.length; i < n; ++i) {\r\n const chain = complex.getChain(asymDict[chains[i]]);\r\n const sheet = getSheet(sheetNames[i]);\r\n const startIdx = starts[i];\r\n const endIdx = ends[i];\r\n const startICode = stICodes[i] || ' ';\r\n const endICode = endICodes[i] || ' ';\r\n\r\n const start = chain.findResidue(startIdx, startICode);\r\n const end = chain.findResidue(endIdx, endICode);\r\n\r\n // TODO think about last condition\r\n if (!start || !end) {\r\n continue;\r\n }\r\n\r\n const strand = new Strand(sheet, start[0], end[0], 0, null, null);\r\n const residues = chain.getResidues();\r\n for (let r = start[1]; r <= end[1]; ++r) {\r\n residues[r]._secondary = strand;\r\n }\r\n sheet.addStrand(strand);\r\n complex.structures.push(strand);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts helix/turn/strand(?) information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex\r\n * @param helicesData\r\n * @private\r\n */\r\n _extractConfs(complex, helicesData) {\r\n const { asymDict } = this;\r\n if (!helicesData.conf_type_id || !helicesData.beg_label_seq_id || !helicesData.end_label_seq_id\r\n || !helicesData.beg_label_asym_id) {\r\n return;\r\n }\r\n\r\n const types = arrize(helicesData.conf_type_id);\r\n const starts = arrize(helicesData.beg_auth_seq_id);\r\n const stICodes = arrize(helicesData.pdbx_beg_PDB_ins_code) || [];\r\n const ends = arrize(helicesData.end_auth_seq_id);\r\n const endICodes = arrize(helicesData.pdbx_end_PDB_ins_code) || [];\r\n const comments = arrize(helicesData.details) || [];\r\n const lengths = arrize(helicesData.pdbx_PDB_helix_length) || [];\r\n const helixClasses = arrize(helicesData.pdbx_PDB_helix_class) || [];\r\n const names = arrize(helicesData.id) || [];\r\n const chains = arrize(helicesData.beg_label_asym_id);\r\n\r\n for (let i = 0, n = types.length; i < n; ++i) {\r\n const type = getTypeFromId(types[i]);\r\n if (!type) {\r\n continue;\r\n }\r\n const name = names[i] || types[i];\r\n const chain = complex.getChain(asymDict[chains[i]]);\r\n\r\n const startIdx = starts[i];\r\n const endIdx = ends[i];\r\n const startICode = stICodes[i] || ' ';\r\n const endICode = endICodes[i] || ' ';\r\n\r\n const start = chain.findResidue(startIdx, startICode);\r\n const end = chain.findResidue(endIdx, endICode);\r\n\r\n // TODO think about last condition\r\n if (!start || !end) {\r\n continue;\r\n }\r\n const comment = comments[i] || '';\r\n const length = lengths[i] || 0;\r\n const helixClass = helixClasses[i] || ' ';\r\n let struct;\r\n if (type === 'helix') {\r\n const idx = complex._helices.length;\r\n struct = new Helix(helixClass, start[0], end[0], idx, name, comment, length);\r\n complex.addHelix(struct);\r\n complex.structures.push(struct);\r\n } else if (type === 'turn') {\r\n struct = new StructuralElement(StructuralElement.Type.TURN, start[0], end[0]);\r\n complex.structures.push(struct);\r\n } else {\r\n struct = null;\r\n }\r\n if (!struct) {\r\n continue;\r\n }\r\n const residues = chain.getResidues();\r\n for (let r = start[1]; r <= end[1]; ++r) {\r\n residues[r]._secondary = struct;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Extract biological assemblies information from CIF structure and fill complex\r\n * @param {Complex} complex\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractAssemblies(complex, complexData) {\r\n const { asymDict } = this;\r\n const asmGen = complexData.pdbx_struct_assembly_gen;\r\n if (!asmGen) {\r\n return;\r\n }\r\n\r\n const asmIdx = arrize(asmGen.assembly_id);\r\n const asmOper = arrize(asmGen.oper_expression);\r\n const asmList = arrize(asmGen.asym_id_list);\r\n if (!asmIdx || !asmOper || !asmList) {\r\n return;\r\n }\r\n\r\n const operList = _getOperations(complexData.pdbx_struct_oper_list);\r\n if (!operList) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = asmIdx.length; i < n; ++i) {\r\n const asm = new Assembly(complex);\r\n const assemblyOps = _extractOperations(asmOper[i], operList);\r\n const entries = asmList[i].split(',');\r\n for (let ii = 0, nn = entries.length; ii < nn; ++ii) {\r\n const chain = entries[ii].trim();\r\n if (chain.length > 0) {\r\n asm.addChain(asymDict[chain]);\r\n }\r\n }\r\n asm.matrices = assemblyOps;\r\n complex.units.push(asm);\r\n }\r\n }\r\n}\r\n\r\nCIFParser.formats = ['cif', 'mmcif'];\r\nCIFParser.extensions = ['.cif', '.mmcif'];\r\n\r\nexport default CIFParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Volume from '../../chem/Volume';\r\n\r\nexport const valueType = {\r\n singular: 0,\r\n vector: 1,\r\n array: 2,\r\n buffer: 3,\r\n};\r\n\r\nclass VolumeModel {\r\n _xyz2crs = [];\r\n\r\n _origin = new THREE.Vector3(0, 0, 0);\r\n\r\n constructor() {\r\n this._header = {};\r\n this._boxSize = new THREE.Vector3();\r\n this._boxStart = new THREE.Vector3();\r\n this._header.delta = {};\r\n this._header.extent = [];\r\n this._header.nstart = [];\r\n this._header.grid = [];\r\n this._header.crs2xyz = [];\r\n this._header.cellDims = new THREE.Vector3();\r\n this._header.angles = [];\r\n this._header.origin = new THREE.Vector3(0, 0, 0);\r\n this._header.dmin = 0;\r\n this._header.dmean = 0;\r\n this._header.dmax = 0;\r\n }\r\n\r\n _typedCheck() {\r\n if (_.isTypedArray(this._buff)) {\r\n this._buff = this._buff.buffer;\r\n } else if (!_.isArrayBuffer(this._buff)) {\r\n throw new TypeError('Expected ArrayBuffer or TypedArray');\r\n }\r\n }\r\n\r\n _fillHeader(headerFormat, arrays) {\r\n for (const key in headerFormat) {\r\n if (headerFormat.hasOwnProperty(key)) {\r\n switch (headerFormat[key][0]) {\r\n case valueType.singular:\r\n this._header[key] = arrays[headerFormat[key][1]][headerFormat[key][2]];\r\n break;\r\n\r\n case valueType.array:\r\n this._parseArray(this._header[key], arrays[headerFormat[key][1]], headerFormat[key][2]);\r\n break;\r\n\r\n case valueType.vector:\r\n this._parseVector(this._header[key], arrays[headerFormat[key][1]], headerFormat[key][2]);\r\n break;\r\n\r\n case valueType.buffer:\r\n this._header[key] = new Uint8Array(\r\n arrays[headerFormat[key][1]],\r\n [headerFormat[key][2]] * 4,\r\n [headerFormat[key][3]] * 4,\r\n );\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _parseVector(vector, arr, pos) {\r\n [vector.x, vector.y, vector.z] = [arr[pos], arr[pos + 1], arr[pos + 2]];\r\n }\r\n\r\n _parseArray(vector, arr, pos) {\r\n vector[0] = arr[pos];\r\n vector[1] = arr[pos + 1];\r\n vector[2] = arr[pos + 2];\r\n }\r\n\r\n _parseHeader(_buffer) {}\r\n\r\n _setAxisIndices() {}\r\n\r\n _setOrigins() {}\r\n\r\n _getAxis() {\r\n const header = this._header;\r\n\r\n const xScale = header.cellDims.x / header.grid[0];\r\n const yScale = header.cellDims.y / header.grid[1];\r\n const zScale = header.cellDims.z / header.grid[2];\r\n\r\n const [alpha, beta, gamma] = header.angles;\r\n\r\n const z1 = Math.cos(beta);\r\n const z2 = (Math.cos(alpha) - Math.cos(beta)\r\n * Math.cos(gamma)) / Math.sin(gamma);\r\n const z3 = Math.sqrt(1.0 - z1 * z1 - z2 * z2);\r\n\r\n const xaxis = new THREE.Vector3(xScale, 0, 0);\r\n const yaxis = new THREE.Vector3(Math.cos(gamma) * yScale, Math.sin(gamma) * yScale, 0);\r\n const zaxis = new THREE.Vector3(z1 * zScale, z2 * zScale, z3 * zScale);\r\n\r\n return [xaxis, yaxis, zaxis];\r\n }\r\n\r\n _getXYZdim() {\r\n return [this._header.extent[this._xyz2crs[0]],\r\n this._header.extent[this._xyz2crs[1]],\r\n this._header.extent[this._xyz2crs[2]]];\r\n }\r\n\r\n _getVolumeInfo() {\r\n const volInfo = _.pick(this._header, ['dmean', 'dmin', 'dmax', 'sd', 'delta']);\r\n volInfo.obtuseAngle = this._header.angles.map((angle) => Number(angle >= (Math.PI / 2)));\r\n return volInfo;\r\n }\r\n\r\n _setBoxParams(xaxis, yaxis, zaxis) {\r\n // if axes are not orthogonal, the origins might not match with box coordinates - need to make shift\r\n let shiftX = 0;\r\n let shiftY = 0;\r\n const [alpha, beta, gamma] = this._header.angles;\r\n\r\n if (gamma >= Math.PI / 2) {\r\n shiftX += Math.abs(yaxis.x);\r\n }\r\n if (beta >= Math.PI / 2) {\r\n shiftX += Math.abs(zaxis.x);\r\n }\r\n if (alpha >= Math.PI / 2) {\r\n shiftY += Math.abs(zaxis.y);\r\n }\r\n\r\n this._boxStart = new THREE.Vector3(this._origin.x - shiftX, this._origin.y - shiftY, this._origin.z);\r\n this._boxSize = new THREE.Vector3(\r\n Math.abs(xaxis.x) + Math.abs(yaxis.x) + Math.abs(zaxis.x),\r\n Math.abs(yaxis.y) + Math.abs(zaxis.y),\r\n Math.abs(zaxis.z),\r\n );\r\n\r\n const delta = (axe, proj) => (Math.abs(axe[proj]) / this._boxSize[proj]);\r\n this._header.delta.x = delta(yaxis, 'x');\r\n this._header.delta.y = delta(zaxis, 'x');\r\n this._header.delta.z = delta(zaxis, 'y');\r\n }\r\n\r\n _getXYZbox() {\r\n return new THREE.Box3(this._boxStart.clone(), this._boxStart.clone().add(this._boxSize));\r\n }\r\n\r\n _toXYZData() {}\r\n\r\n parse(data) {\r\n this._parseHeader(data);\r\n this._setOrigins();\r\n return new Volume(Float32Array, this._getXYZdim(), this._getXYZbox(), 1, this._toXYZData(), this._getVolumeInfo());\r\n }\r\n}\r\n\r\nexport default VolumeModel;\r\n","import Parser from './Parser';\r\nimport VolumeModel, { valueType } from './VolumeModel';\r\n\r\nconst CCP4Header = {\r\n extent: [valueType.array, 'u32', 0],\r\n type: [valueType.singular, 'u32', 3],\r\n nstart: [valueType.array, 'i32', 4],\r\n grid: [valueType.array, 'u32', 7],\r\n cellDims: [valueType.vector, 'f32', 10],\r\n angles: [valueType.array, 'f32', 13],\r\n crs2xyz: [valueType.array, 'i32', 16],\r\n dmin: [valueType.singular, 'f32', 19],\r\n dmax: [valueType.singular, 'f32', 20],\r\n dmean: [valueType.singular, 'f32', 21],\r\n ispg: [valueType.singular, 'u32', 22],\r\n nsymbt: [valueType.singular, 'u32', 23],\r\n lksflg: [valueType.singular, 'u32', 24],\r\n customData: [valueType.buffer, 'buffer', 25, 9],\r\n origin: [valueType.vector, 'f32', 34],\r\n map: [valueType.buffer, 'buffer', 52, 1],\r\n machine: [valueType.singular, 'u32', 53],\r\n sd: [valueType.singular, 'f32', 54],\r\n nlabel: [valueType.singular, 'f32', 55],\r\n label: [valueType.buffer, 'buffer', 56, 200],\r\n};\r\n\r\nclass Ccp4Model extends VolumeModel {\r\n // read header (http://www.ccp4.ac.uk/html/maplib.html)\r\n _parseHeader(_buffer) {\r\n this._buff = _buffer;\r\n this._typedCheck();\r\n const arrays = {};\r\n arrays.u32 = new Uint32Array(this._buff, 0, 56);\r\n arrays.i32 = new Int32Array(this._buff, 0, 56);\r\n arrays.f32 = new Float32Array(this._buff, 0, 56);\r\n arrays.buffer = this._buff;\r\n const header = this._header;\r\n\r\n this._fillHeader(CCP4Header, arrays);\r\n\r\n // calculate non-orthogonal unit cell coordinates\r\n header.angles.forEach((angle, i, a) => { a[i] *= Math.PI / 180.0; });\r\n }\r\n\r\n _setAxisIndices() {\r\n const header = this._header;\r\n\r\n if (header.cellDims.x === 0.0 && header.cellDims.y === 0.0 && header.cellDims.z === 0.0) {\r\n header.cellDims.set(1.0, 1.0, 1.0);\r\n }\r\n // Apply header conversion\r\n // Mapping between CCP4 column, row, section and VMD x, y, z.\r\n const { crs2xyz } = this._header;\r\n if (crs2xyz[0] === 0 && crs2xyz[1] === 0 && crs2xyz[2] === 0) {\r\n crs2xyz[0] = 1;\r\n crs2xyz[1] = 2;\r\n crs2xyz[2] = 3;\r\n }\r\n\r\n const xyz2crs = this._xyz2crs;\r\n xyz2crs[crs2xyz[0] - 1] = 0; // column\r\n xyz2crs[crs2xyz[1] - 1] = 1; // row\r\n xyz2crs[crs2xyz[2] - 1] = 2; // section\r\n }\r\n\r\n _setOrigins() {\r\n const [xaxis, yaxis, zaxis] = this._getAxis();\r\n this._setAxisIndices();\r\n\r\n const header = this._header;\r\n const xyz2crs = this._xyz2crs;\r\n // Handle both MRC-2000 and older format maps\r\n if (header.origin.x === 0.0 && header.origin.y === 0.0 && header.origin.z === 0.0) {\r\n this._origin.addScaledVector(xaxis, header.nstart[xyz2crs[0]]);\r\n this._origin.addScaledVector(yaxis, header.nstart[xyz2crs[1]]);\r\n this._origin.addScaledVector(zaxis, header.nstart[xyz2crs[2]]);\r\n } else {\r\n this._origin = header.origin;\r\n // Use ORIGIN records rather than old n[xyz]start records\r\n // http://www2.mrc-lmb.cam.ac.uk/image2000.html\r\n // XXX the ORIGIN field is only used by the EM community, and\r\n // has undefined meaning for non-orthogonal maps and/or non-cubic voxels, etc.\r\n }\r\n xaxis.multiplyScalar(header.extent[xyz2crs[0]] - 1);\r\n yaxis.multiplyScalar(header.extent[xyz2crs[1]] - 1);\r\n zaxis.multiplyScalar(header.extent[xyz2crs[2]] - 1);\r\n\r\n if (header.type === 2) {\r\n this._data = new Float32Array(\r\n this._buff,\r\n 1024 + header.nsymbt,\r\n header.extent[0] * header.extent[1] * header.extent[2],\r\n );\r\n } else {\r\n throw new Error(`CCP4: Unsupported format ${header.type}`);\r\n }\r\n\r\n this._setBoxParams(xaxis, yaxis, zaxis);\r\n }\r\n\r\n _toXYZData() {\r\n const header = this._header;\r\n const data = this._data;\r\n const xyz2crs = this._xyz2crs;\r\n const xyzData = new Float32Array(data.length);\r\n\r\n const dim = this._getXYZdim();\r\n const xSize = dim[0];\r\n const ySize = dim[1];\r\n\r\n let crsIdx = 0;\r\n const coord = [];\r\n let x;\r\n let y;\r\n let z;\r\n for (coord[2] = 0; coord[2] < header.extent[2]; coord[2]++) { // Site\r\n for (coord[1] = 0; coord[1] < header.extent[1]; coord[1]++) { // Row\r\n for (coord[0] = 0; coord[0] < header.extent[0]; coord[0]++, crsIdx++) { // Column\r\n x = coord[xyz2crs[0]];\r\n y = coord[xyz2crs[1]];\r\n z = coord[xyz2crs[2]];\r\n xyzData[x + xSize * (y + ySize * z)] = data[crsIdx];\r\n }\r\n }\r\n }\r\n\r\n return xyzData;\r\n }\r\n}\r\n\r\nclass CCP4Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'ccp4';\r\n this.model = new Ccp4Model();\r\n }\r\n\r\n static canProbablyParse(_data) {\r\n return false; // Autodetection is not implemented yet\r\n }\r\n\r\n parseSync() {\r\n return this.model.parse(this._data);\r\n }\r\n}\r\n\r\nCCP4Parser.formats = ['ccp4'];\r\nCCP4Parser.extensions = ['.ccp4', '.map', '.mrc'];\r\nCCP4Parser.binary = true;\r\n\r\nexport default CCP4Parser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst { Complex, Element, Molecule } = chem;\r\n\r\nclass XYZParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._atomsInf = null;\r\n\r\n this._options.fileType = 'xyz';\r\n this._fileName = options.name;\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && /^\\s*\\d+ *\\n[^\\n]*\\n\\s*\\w{1,3}\\s+-?\\d/.test(data);\r\n }\r\n\r\n _parseToAtomsInf(source) {\r\n const endnAtoms = source.indexOf('\\n');\r\n const nAtoms = parseInt(source.substring(0, endnAtoms), 10);\r\n const endComment = source.indexOf('\\n', endnAtoms + 1);\r\n let comment = source.slice(endnAtoms + 1, endComment).trim();\r\n if (comment.length === 0) {\r\n comment = this._fileName;\r\n }\r\n\r\n const startAtomsInf = endComment + source.substring(endComment).search(/\\S/);\r\n this._atomsInf = source.substring(startAtomsInf).split(/[\\s,]*\\n[\\s,]*/);\r\n if (!Number.isNaN(nAtoms) && (this._atomsInf.length - 1 !== nAtoms)) {\r\n this._complex.error = {\r\n message: 'wrong number of atoms',\r\n };\r\n return;\r\n }\r\n\r\n this._complex.metadata.format = 'xyz';\r\n this._complex.name = comment;\r\n }\r\n\r\n _parseAtomsInf() {\r\n const het = true;\r\n const altLoc = ' ';\r\n const occupancy = 1;\r\n const tempFactor = 1;\r\n const charge = 0;\r\n\r\n const chain = this._complex.addChain('A');\r\n const residue = chain.addResidue('UNK', 1, ' ');\r\n\r\n for (let i = 0; i < this._atomsInf.length - 1; i++) {\r\n const words = this._atomsInf[i].split(/[\\s,]+/);\r\n\r\n if (words.length !== 4) {\r\n this._complex.error = {\r\n message: 'missed parameters',\r\n };\r\n break;\r\n }\r\n\r\n const serial = i + 1;\r\n const name = words[0];\r\n const xyz = new THREE.Vector3(parseFloat(words[1]), parseFloat(words[2]), parseFloat(words[3]));\r\n const type = Element.getByName(name);\r\n const role = undefined;\r\n\r\n residue.addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n const molecule = new Molecule(this._complex, this._complex.name, 1);\r\n molecule.residues = residue;\r\n this._complex._molecules[0] = molecule;\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n\r\n this._parseToAtomsInf(this._data);\r\n this._parseAtomsInf();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n\r\n this._complex = null;\r\n this._atomsInf = null;\r\n\r\n if (result.error) {\r\n throw new Error(result.error.message);\r\n }\r\n return result;\r\n }\r\n\r\n static formats = ['xyz'];\r\n\r\n static extensions = ['.xyz'];\r\n}\r\n\r\nexport default XYZParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst { Complex, Element } = chem;\r\n\r\nclass PubChemParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'pubchem+json';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && data[0] === '{';\r\n }\r\n\r\n parseSync() {\r\n this.logger.info('Parsing PubChem JSON file...');\r\n return this._toComplex(JSON.parse(this._data));\r\n }\r\n\r\n _toComplex(jsonData) {\r\n const complex = new Complex();\r\n const complexData = jsonData.PC_Compounds && jsonData.PC_Compounds[0];\r\n if (complexData) {\r\n this._extractAtoms(complex, complexData);\r\n complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n });\r\n }\r\n return complex;\r\n }\r\n\r\n _extractAtoms(complex, complexData) {\r\n let aids = complexData.atoms && complexData.atoms.aid;\r\n let elements = aids && complexData.atoms.element;\r\n if (!elements || aids.length !== elements.length) {\r\n throw new Error('Unable to parse atom elements');\r\n }\r\n elements = _.fromPairs(_.zip(aids, elements));\r\n const atoms = {};\r\n\r\n const coords = complexData.coords && complexData.coords[0];\r\n const model = coords && coords.conformers && coords.conformers[0];\r\n const xs = model && model.x;\r\n const ys = model && model.y;\r\n const zs = (model && model.z) || [];\r\n aids = coords && coords.aid;\r\n if (!aids || !xs || !ys) {\r\n throw new Error('Coordinates are not found in the file');\r\n }\r\n\r\n const chain = complex.addChain(' ');\r\n const residue = chain.addResidue('UNK', 1, ' ');\r\n\r\n for (let i = 0, n = aids.length; i < n; ++i) {\r\n const aid = aids[i];\r\n const element = Element.ByAtomicNumber[elements[aid]];\r\n const xyz = new THREE.Vector3(xs[i], ys[i], zs[i] || 0.0);\r\n atoms[aid] = residue.addAtom(element.name, element, xyz, undefined, true, aid, ' ', 1.0, 0.0, 0);\r\n }\r\n\r\n const aids1 = complexData.bonds && complexData.bonds.aid1;\r\n const aids2 = complexData.bonds && complexData.bonds.aid2;\r\n const orders = (complexData.bonds && complexData.bonds.order) || [];\r\n if (!aids1 || !aids2 || aids1.length !== aids2.length) {\r\n return;\r\n }\r\n\r\n for (let j = 0, m = aids1.length; j < m; ++j) {\r\n complex.addBond(atoms[aids1[j]], atoms[aids2[j]], orders[j] || 1, 0, true);\r\n }\r\n }\r\n}\r\n\r\nPubChemParser.formats = ['pubchem', 'pubchem+json', 'pc'];\r\nPubChemParser.extensions = ['.json'];\r\n\r\nexport default PubChemParser;\r\n","import _ from 'lodash';\r\n\r\nexport default class SDFStream {\r\n constructor(data) {\r\n this._strings = data.split(/\\r?\\n|\\r/);\r\n this._currentStart = 0;\r\n this._currentStringIndx = 0;\r\n }\r\n\r\n setStart(start) {\r\n if (start >= this._strings.length) {\r\n this._currentStart = this._strings.length - 1;\r\n this._currentStringIndx = this._strings.length - 1;\r\n } else {\r\n this._currentStart = start;\r\n this._currentStringIndx = start;\r\n }\r\n }\r\n\r\n getNextString() {\r\n return this._strings[++this._currentStringIndx];\r\n }\r\n\r\n getCurrentString() {\r\n return this._strings[this._currentStringIndx];\r\n }\r\n\r\n getStringFromStart(numb) {\r\n this._currentStringIndx = this._currentStart + numb;\r\n return this._strings[this._currentStart + numb];\r\n }\r\n\r\n findNextDataItem() {\r\n let curStr = this.getNextString();\r\n let res = false;\r\n while (!_.isUndefined(curStr) && curStr.trim() !== '$$$$') {\r\n if (curStr.match(/>\\s+<(.*)>/)) {\r\n res = true;\r\n break;\r\n }\r\n curStr = this.getNextString();\r\n }\r\n\r\n return res;\r\n }\r\n\r\n findNextCompoundStart() {\r\n let curStr = this.getCurrentString();\r\n while (!_.isUndefined(curStr) && curStr.trim() !== '$$$$') {\r\n curStr = this.getNextString();\r\n }\r\n this.setStart(++this._currentStringIndx);\r\n return this.probablyHaveDataToParse();\r\n }\r\n\r\n probablyHaveDataToParse() {\r\n return this._currentStringIndx < this._strings.length - 2;\r\n }\r\n}\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport SDFStream from './SDFStream';\r\nimport Assembly from '../../chem/Assembly';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst chargeMap = [0, 3, 2, 1, 0, -1, -2, -3];\r\nconst orderMap = [0, 1, 2, 3, 1, 1, 1, 2];\r\nconst typeMap = [\r\n Bond.BondType.UNKNOWN, // 0 - error\r\n Bond.BondType.COVALENT, // 1 - single\r\n Bond.BondType.COVALENT, // 2 - double\r\n Bond.BondType.COVALENT, // 3 - triple\r\n Bond.BondType.AROMATIC, // 4 - aromatic\r\n Bond.BondType.UNKNOWN, // 5 - single or double\r\n Bond.BondType.AROMATIC, // 6 - single or aromatic\r\n Bond.BondType.AROMATIC, // 7 - double or aromatic\r\n // 8 - any\r\n // 9 - coordination\r\n // 10 - hydrogen\r\n];\r\n\r\nconst sdfAndMolRegexp = /.*(M\\s\\sEND).*|.*(^$$$$).*|.*>\\s+<(.+)>.*/;\r\nconst sdfRegExp = /.*($$$$).*|.*>\\s+<(.+)>.*/;\r\n\r\nconst fileFormat = { SDF: 'sdf', MOL: 'mol' };\r\n\r\nconst possibleNameTags = ['PUBCHEM_IUPAC_TRADITIONAL_NAME', /PUBCHEM_(.+)_NAME/, /(.+)name/, /(.+)NAME/];\r\nconst possibleIDTags = ['PUBCHEM_COMPOUND_CID', 'id', 'ID', /.*CID/, /.*ID/, /.*id/];\r\nconst possibleTitleTags = ['msg', 'MSG', 'message', 'title', 'description', 'desc'];\r\nconst tagsNames = ['name', 'id', 'title'];\r\nconst tags = { name: possibleNameTags, id: possibleIDTags, title: possibleTitleTags };\r\n\r\nfunction buildChainID(index) {\r\n if (!index) {\r\n return 'A';\r\n }\r\n\r\n const codes = [];\r\n while (index) {\r\n codes.push(65 + (index % 26));\r\n index = Math.trunc(index / 26);\r\n }\r\n if (codes.length > 1) {\r\n codes.reverse();\r\n codes[0] -= 1;\r\n }\r\n\r\n return String.fromCharCode(...codes);\r\n}\r\n\r\nexport default class SDFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._format = 'sdf';\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._molecules = null;\r\n this._metadata = {};\r\n this._metadata.molecules = [];\r\n this._currentMolProps = {};\r\n this._compoundIndx = -1;\r\n this._assemblies = [];\r\n this._atomsParsed = 0;\r\n this._atomsIndexes = [];\r\n }\r\n\r\n canProbablyParse(data) {\r\n return _.isString(data) && sdfAndMolRegexp.test(data);\r\n }\r\n\r\n _parseHeader(stream) {\r\n const molecule = {};\r\n molecule.name = stream.getStringFromStart(0);\r\n const date = parseInt(stream.getStringFromStart(1).substr(10, 6).trim(), 10);\r\n molecule.date = date.toString() || '';\r\n molecule.title = stream.getStringFromStart(2);\r\n this._metadata.molecules.push(molecule);\r\n }\r\n\r\n _parseAtoms(stream, atomsNum) {\r\n let curStr;\r\n let serial = this._atomsParsed;\r\n\r\n // each molecule = chain\\residue\r\n const chainID = buildChainID(this._compoundIndx);\r\n const resName = 'UNK';\r\n const resSeq = 1;\r\n\r\n this._chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = this._chain.addResidue(resName, resSeq, ' ');\r\n\r\n for (let i = 0; i < atomsNum; i++) {\r\n curStr = stream.getNextString();\r\n serial++;\r\n const x = parseFloat(curStr.substr(0, 10));\r\n const y = parseFloat(curStr.substr(10, 10));\r\n const z = parseFloat(curStr.substr(20, 10));\r\n const charge = chargeMap[parseInt(curStr.substr(36, 3), 10)];\r\n const xyz = new THREE.Vector3(x, y, z);\r\n let name = curStr.substr(31, 3).trim().toUpperCase();\r\n const type = Element.getByName(name);\r\n if (!this._atomsIndexes[name]) {\r\n this._atomsIndexes[name] = 0;\r\n }\r\n this._atomsIndexes[name] += 1;\r\n name += this._atomsIndexes[name]; // every atom need to have unique name.\r\n\r\n this._residue.addAtom(name, type, xyz, undefined, true, serial, ' ', 1.0, 0.0, charge);\r\n }\r\n }\r\n\r\n _parseBonds(stream, bondsNum) {\r\n let curStr;\r\n\r\n for (let i = 0; i < bondsNum; i++) {\r\n curStr = stream.getNextString();\r\n let atom1 = parseInt(curStr.substr(0, 3), 10) + this._atomsParsed;\r\n let atom2 = parseInt(curStr.substr(3, 3), 10) + this._atomsParsed;\r\n const bondType = parseInt(curStr.substr(6, 3), 10);\r\n\r\n if (atom1 > atom2) {\r\n [atom1, atom2] = [atom2, atom1];\r\n }\r\n this._complex.addBond(\r\n atom1,\r\n atom2,\r\n orderMap[bondType] || 1,\r\n typeMap[bondType] || Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n }\r\n\r\n _parseMOL(stream) {\r\n this._compoundIndx++;\r\n\r\n this._parseHeader(stream);\r\n const countsLine = stream.getStringFromStart(3);\r\n const atomsNum = parseInt(countsLine.substr(0, 3), 10);\r\n const bondsNum = parseInt(countsLine.substr(3, 3), 10);\r\n this._parseAtoms(stream, atomsNum);\r\n this._parseBonds(stream, bondsNum);\r\n\r\n this._atomsParsed += atomsNum;\r\n\r\n this._metadata.molecules[this._compoundIndx]._residues = [];\r\n this._metadata.molecules[this._compoundIndx]._residues.push(this._residue);\r\n }\r\n\r\n _parseDataItem(stream) {\r\n const tag = stream.getCurrentString();\r\n\r\n let data = [];\r\n let curStr = stream.getNextString();\r\n\r\n // read data\r\n while (curStr.trim() !== '') {\r\n data.push(curStr);\r\n curStr = stream.getNextString();\r\n }\r\n if (data.length === 1) {\r\n [data] = data;\r\n }\r\n this._currentMolProps[tag.replace(/[<>]/g, '').trim()] = data;\r\n }\r\n\r\n _parseCompound(stream) {\r\n this._parseMOL(stream);\r\n\r\n // parse data items block\r\n if (this._format === fileFormat.SDF) {\r\n this._currentMolProps = {};\r\n while (stream.findNextDataItem()) {\r\n this._parseDataItem(stream);\r\n }\r\n if (Object.keys(this._currentMolProps).length !== 0) {\r\n const molecule = this._metadata.molecules[this._compoundIndx];\r\n molecule.props = this._currentMolProps;\r\n this._tryToUpdateMoleculeData(molecule);\r\n }\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap;\r\n const complex = this._complex;\r\n\r\n const bonds = complex._bonds;\r\n for (let j = 0; j < bonds.length; j++) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n console.log('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _buildAssemblies() {\r\n const chains = this._complex._chains;\r\n\r\n if (chains.length === 1) {\r\n return this._assemblies;\r\n }\r\n\r\n for (let i = 0; i < chains.length; i++) {\r\n const assembly = new Assembly(this._complex);\r\n const matrix = new THREE.Matrix4();\r\n assembly.addMatrix(matrix);\r\n assembly.addChain(chains[i]._name);\r\n this._assemblies.push(assembly);\r\n }\r\n\r\n return this._assemblies;\r\n }\r\n\r\n _buildMolecules() {\r\n this._complex._molecules = [];\r\n const { molecules } = this._metadata;\r\n for (let i = 0; i < molecules.length; i++) {\r\n const molecule = new Molecule(this._complex, molecules[i].name, i + 1);\r\n molecule.residues = molecules[i]._residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n\r\n return this._complex._molecules;\r\n }\r\n\r\n _searchTag(tag, props) {\r\n for (let i = 0; i < props.length; i++) {\r\n if ((tag instanceof RegExp && tag.test(props[i].tag)) || tag === props[i].tag) {\r\n return props[i].data;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n _tryToFind(tagsList, props) {\r\n for (let j = 0; j < tagsList.length; j++) {\r\n const res = this._searchTag(tagsList[j], props);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n _tryToUpdateMoleculeData(molecule) {\r\n let res = false;\r\n for (let i = 0; i < tagsNames.length; i++) {\r\n const tagPossibleNames = tags[tagsNames[i]];\r\n const data = this._tryToFind(tagPossibleNames, molecule.props);\r\n if (data) {\r\n molecule[tagsNames[i]] = data;\r\n res = true;\r\n }\r\n }\r\n\r\n molecule.name = molecule.name || molecule.id;\r\n if (molecule.name.match(/^\\d+$/)) {\r\n molecule.name = `CID: ${molecule.name}`;\r\n }\r\n\r\n return res;\r\n }\r\n\r\n _finalizeMetadata() {\r\n const { molecules } = this._metadata;\r\n const { metadata } = this._complex;\r\n const complex = this._complex;\r\n\r\n if (molecules.length === 1) {\r\n complex.name = molecules[0].name;\r\n metadata.title = molecules[0].title;\r\n metadata.date = molecules[0].date;\r\n metadata.properties = molecules[0].props;\r\n } else if (molecules.length > 1) {\r\n metadata.molecules = [];\r\n for (let i = 0; i < molecules.length; i++) {\r\n metadata.molecules.push({\r\n name: molecules[i].name, date: molecules[i].date, title: molecules[i].title, properties: molecules[i].props,\r\n });\r\n }\r\n }\r\n }\r\n\r\n _finalize() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const atoms = this._complex._atoms;\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n this._complex._finalizeBonds();\r\n this._fixBondsArray();\r\n this._finalizeMetadata();\r\n this._buildAssemblies();\r\n this._complex.units = this._complex.units.concat(this._assemblies);\r\n this._buildMolecules();\r\n this._complex.finalize({\r\n needAutoBonding: false, detectAromaticLoops: false, enableEditing: false, serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n defineFormat(data) {\r\n let format;\r\n if (sdfRegExp.test(data)) {\r\n format = fileFormat.SDF;\r\n } else {\r\n format = fileFormat.MOL;\r\n }\r\n\r\n return format;\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n const stream = new SDFStream(this._data);\r\n\r\n this._format = this.defineFormat(this._data);\r\n result.metadata.format = this._format;\r\n\r\n do {\r\n this._parseCompound(stream);\r\n } while (stream.findNextCompoundStart());\r\n\r\n this._finalize();\r\n\r\n return result;\r\n }\r\n}\r\n\r\nSDFParser.formats = ['mol', 'sdf'];\r\nSDFParser.extensions = ['.mol', '.sdf'];\r\n","import * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport VolumeModel, { valueType } from './VolumeModel';\r\n\r\n// http://www.uoxray.uoregon.edu/tnt/manual/node104.html\r\nconst DSN6Header = {\r\n nstart: [valueType.array, 'i16', 0],\r\n extent: [valueType.array, 'i16', 3],\r\n grid: [valueType.array, 'i16', 6],\r\n cellDims: [valueType.vector, 'i16', 9],\r\n angles: [valueType.array, 'i16', 12],\r\n div: [valueType.singular, 'i16', 15],\r\n adder: [valueType.singular, 'i16', 16],\r\n scaleFactor: [valueType.singular, 'i16', 17],\r\n};\r\n\r\nclass DSN6Model extends VolumeModel {\r\n _parseHeader(_buffer) {\r\n this._buff = _buffer;\r\n this._typedCheck();\r\n\r\n const arrays = {};\r\n arrays.i16 = new Int16Array(this._buff);\r\n\r\n // check and reverse if big endian\r\n if (arrays.i16[18] !== 100) {\r\n for (let i = 0, n = arrays.i16.length; i < n; ++i) {\r\n const val = arrays.i16[i];\r\n arrays.i16[i] = ((val & 0xff) << 8) | ((val >> 8) & 0xff);\r\n }\r\n }\r\n if (arrays.i16[18] !== 100) {\r\n throw new Error('DSN6: Incorrect format ');\r\n }\r\n\r\n const header = this._header;\r\n\r\n this._fillHeader(DSN6Header, arrays);\r\n header.cellDims.multiplyScalar(1.0 / header.scaleFactor);\r\n header.angles.forEach((angle, i, a) => { a[i] *= (Math.PI / 180.0) / header.scaleFactor; });\r\n header.div /= 100;\r\n }\r\n\r\n _setAxisIndices() {\r\n this._xyz2crs[0] = 0;\r\n this._xyz2crs[1] = 1;\r\n this._xyz2crs[2] = 2;\r\n }\r\n\r\n _setOrigins() {\r\n const header = this._header;\r\n const [xaxis, yaxis, zaxis] = this._getAxis();\r\n this._setAxisIndices();\r\n\r\n this._origin.addScaledVector(xaxis, header.nstart[0]);\r\n this._origin.addScaledVector(yaxis, header.nstart[1]);\r\n this._origin.addScaledVector(zaxis, header.nstart[2]);\r\n\r\n xaxis.multiplyScalar(header.extent[0]);\r\n yaxis.multiplyScalar(header.extent[1]);\r\n zaxis.multiplyScalar(header.extent[2]);\r\n\r\n this._setBoxParams(xaxis, yaxis, zaxis);\r\n }\r\n\r\n _pointCalculate(xyzData, byteBuffer, z, y, x, pos, i) {\r\n const header = this._header;\r\n\r\n if (x < header.extent[0] && y < header.extent[1] && z < header.extent[2]) {\r\n const idx = x + header.extent[0] * (y + header.extent[1] * z);\r\n xyzData[idx] = (byteBuffer[pos.counter] - header.adder) / header.div;\r\n ++pos.counter;\r\n } else {\r\n pos.counter += 8 - i;\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n _blockCalculate(xyzData, byteBuffer, zBlock, yBlock, xBlock, pos) {\r\n for (let k = 0; k < 8; ++k) {\r\n const z = 8 * zBlock + k;\r\n for (let j = 0; j < 8; ++j) {\r\n const y = 8 * yBlock + j;\r\n let inRange = true;\r\n let i = 0;\r\n while (inRange && i < 8) {\r\n const x = 8 * xBlock + i;\r\n inRange = this._pointCalculate(xyzData, byteBuffer, z, y, x, pos, i);\r\n i++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _toXYZData() {\r\n const header = this._header;\r\n const byteBuffer = new Uint8Array(this._buff);\r\n const xyzData = new Float32Array(header.extent[0] * header.extent[1] * header.extent[2]);\r\n\r\n const blocks = new THREE.Vector3(header.extent[0] / 8, header.extent[1] / 8, header.extent[2] / 8);\r\n\r\n const pos = {};\r\n pos.counter = 512;\r\n\r\n for (let zBlock = 0; zBlock < blocks.z; ++zBlock) {\r\n for (let yBlock = 0; yBlock < blocks.y; ++yBlock) {\r\n for (let xBlock = 0; xBlock < blocks.x; ++xBlock) {\r\n this._blockCalculate(xyzData, byteBuffer, zBlock, yBlock, xBlock, pos);\r\n }\r\n }\r\n }\r\n this._calculateInfoParams(xyzData);\r\n return xyzData;\r\n }\r\n\r\n _calculateInfoParams(xyzData) {\r\n this._header.dmean /= xyzData.length;\r\n let dispersion = 0;\r\n let minDensity = xyzData[0];\r\n let maxDensity = xyzData[0];\r\n for (let j = 0; j < xyzData.length; j++) {\r\n dispersion += (this._header.dmean - xyzData[j]) ** 2;\r\n\r\n if (xyzData[j] < minDensity) {\r\n minDensity = xyzData[j];\r\n }\r\n if (xyzData[j] > maxDensity) {\r\n maxDensity = xyzData[j];\r\n }\r\n }\r\n this._header.sd = Math.sqrt(dispersion / xyzData.length);\r\n this._header.dmax = maxDensity;\r\n this._header.dmin = minDensity;\r\n }\r\n}\r\n\r\nclass DSN6Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'dsn6';\r\n this.model = new DSN6Model();\r\n }\r\n\r\n static canParse(data, options) {\r\n if (!data) {\r\n return false;\r\n }\r\n return data instanceof ArrayBuffer && Parser.checkDataTypeOptions(options, 'dsn6');\r\n }\r\n\r\n static canProbablyParse(_data) {\r\n return false;\r\n }\r\n\r\n parseSync() {\r\n return this.model.parse(this._data);\r\n }\r\n}\r\n\r\nDSN6Parser.formats = ['dsn6'];\r\nDSN6Parser.extensions = ['.dsn6', '.omap'];\r\nDSN6Parser.binary = true;\r\n\r\nexport default DSN6Parser;\r\n","import PDBStream from './PDBStream';\r\n\r\n/**\r\n * Little helper class for GRO Parser usage.\r\n * @extends PDBStream\r\n */\r\nclass GROReader extends PDBStream {\r\n constructor(data) {\r\n super(data);\r\n /** @type Number */\r\n this._next = -1; // End position of line\r\n this.next();\r\n }\r\n\r\n /**\r\n * Getting end of string.\r\n * @returns {Number} Pointer to end of string\r\n */\r\n getNext() {\r\n return this._next;\r\n }\r\n}\r\n\r\nexport default GROReader;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport GROReader from './GROReader';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Molecule,\r\n} = chem;\r\n\r\n/**\r\n * Gromos87 file format parser.\r\n * @extends Parser\r\n */\r\nclass GROParser extends Parser {\r\n /**\r\n * Create parser for .gro file format\r\n *\r\n * @param {String} data Input file\r\n * @param {String} options Input options (optional field)\r\n */\r\n constructor(data, options) {\r\n super(data, options);\r\n /** @type Date */\r\n this._time = null; // Time in ps, optional field for animations\r\n /** @type Number */\r\n this._numAtoms = null; // Number of atoms in complex\r\n /** @type Number */\r\n this._residueNumber = null; // Number of exact residue\r\n /** @type String */\r\n this._residueName = ''; // Scientific name of exact residue\r\n /** @type String */\r\n this._atomName = ''; // Scientific name of exact atom\r\n /** @type Number */\r\n this._atomNumber = null; // Sorted number of exact atom\r\n /** @type Array */\r\n this._atomPosition = []; // Array which contains x, y, z position of exact atom\r\n /** @type Array */\r\n this._atomVelocity = []; // Array which contains x, y, z velocity of exact atom (optional)\r\n /** @type Complex */\r\n this._complex = null; // Complex structure for unified molecule representation\r\n /** @type Vector3 */\r\n this._molecules = []; // Molecules array\r\n /** @type Molecule */\r\n this._molecule = null; // Single molecule\r\n /** @type String */\r\n this._options.filetype = 'gro'; // Extension of data file.\r\n }\r\n\r\n /**\r\n * General check for possibility of parsing.\r\n * @param {String} data - Input file\r\n * @returns {boolean} true if this file is in ascii, false otherwise\r\n */\r\n canProbablyParse(data) {\r\n return _.isString(this._data) && /^\\s*[^\\n]*\\n\\s*\\d+ *\\n\\s*\\d+[^\\n\\d]{3}\\s*\\w+\\s*\\d+\\s*-?\\d/.test(data);\r\n }\r\n\r\n /**\r\n * Parsing title of molecule complex.\r\n * NOTE: that names are ESTIMATES, there is no strict rules in Gromos87 standard for first line in input file.\r\n * @param {GROReader} line - Line containing title and time.\r\n */\r\n _parseTitle(line) {\r\n const { metadata } = this._complex;\r\n metadata.id = line.readLine().trim();\r\n metadata.name = metadata.id.slice(metadata.id.lastIndexOf('\\\\') + 1, metadata.id.lastIndexOf('.'));\r\n metadata.format = 'gro';\r\n }\r\n\r\n /**\r\n * Parsing line containing number of atoms information.\r\n * @param {GROReader} line - Line containing number of atoms.\r\n */\r\n _parseNumberOfAtoms(line) {\r\n this._numAtoms = line.readInt(0, line.getNext());\r\n if (Number.isNaN(this._numAtoms)) {\r\n throw new Error('Line 2 is not representing atom number. Consider checking input file');\r\n }\r\n }\r\n\r\n /**\r\n * Parsing line containing information about residues, atoms etc. Also information about box vectors.\r\n * Format of atoms MUST (by Gromos87 standard) be this: (note that numbering starts not from 0, but from 1!)\r\n * ResidueNumber[1 - 5] ResidueName[6 - 10] AtomName[11 - 15] AtomNumber[16 - 20] Position[21 - 45] Velocity[46 - 69]\r\n * @param {GROReader} line - Line containing information about atom.\r\n */\r\n _parseAtom(line) {\r\n this._residueNumber = line.readInt(1, 5);\r\n this._residueName = line.readString(6, 10).trim();\r\n this._atomName = line.readString(11, 15).trim();\r\n this._atomNumber = line.readInt(16, 20);\r\n const positionX = line.readFloat(21, 28) * 10;\r\n const positionY = line.readFloat(29, 36) * 10;\r\n const positionZ = line.readFloat(37, 45) * 10;\r\n if (Number.isNaN(positionX) || Number.isNaN(positionY) || Number.isNaN(positionZ)) {\r\n this._complex.error = {\r\n message: `Atom position is invalid in \"${line.readLine()}\"`,\r\n };\r\n return;\r\n }\r\n /* const velocityX = line.readFloat(46, 53);\r\n const velocityY = line.readFloat(54, 61);\r\n const velocityZ = line.readFloat(62, 69); */\r\n /* Adding residue and atom to complex structure */\r\n const type = Element.getByName(this._atomName[0]); /* MAGIC 0. REASONS: This name is something like \"CA\", where\r\n C - is an element an A is something else. But what about Calcium? */\r\n if (type.fullName === 'Unknown') {\r\n this._complex.error = {\r\n message: `${this._atomName[0]} hasn't been recognised as an atom name.`,\r\n };\r\n return;\r\n }\r\n const role = Element.Role[this._atomName];\r\n /* Firstly, create a dummy chain */\r\n let chain = this._chain;\r\n if (!chain) {\r\n this._chain = chain = this._complex.addChain('A');\r\n }\r\n /* Secondly, add residue to that chain */\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== this._residueNumber) {\r\n this._residue = residue = chain.addResidue(this._residueName, this._residueNumber, ' ');\r\n }\r\n /* Lastly, add atom to that residue */\r\n this._atomPosition = new THREE.Vector3(positionX, positionY, positionZ);\r\n /* Adding default constants to correct atom addition process */\r\n const het = true;\r\n const altLoc = ' ';\r\n const occupancy = 1;\r\n const tempFactor = 1;\r\n const charge = 0;\r\n residue.addAtom(this._atomName, type, this._atomPosition, role, het, this._atomNumber, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n /**\r\n * Some finalizing procedures. In '.gro' file format there is only 1 chain and 1 molecule.\r\n */\r\n _finalize() {\r\n const molecule = new Molecule(this._complex, this._complex.metadata.name, 1);\r\n // aggregate residues from chain\r\n molecule.residues = this._chain._residues;\r\n molecule._chains = this._chain;\r\n this._complex._molecules[0] = molecule;\r\n this._molecules.push(molecule);\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n /**\r\n * Main parsing procedure.\r\n * @returns {Complex} Complex structure for visualizing.\r\n */\r\n parseSync() {\r\n /* Create \"Complex\" variable */\r\n const result = this._complex = new Complex();\r\n /* Parse input file line-by-line */\r\n const reader = new GROReader(this._data);\r\n let counter = 0; /* Simple counter regarding to format of .gro file */\r\n /* First two lines - technical information, other lines - Atoms */\r\n this._parseTitle(reader);\r\n reader.next();\r\n this._parseNumberOfAtoms(reader);\r\n reader.next();\r\n for (counter = 0; counter < this._numAtoms; ++counter) {\r\n if (!reader.end()) {\r\n this._parseAtom(reader);\r\n reader.next();\r\n } else break;\r\n }\r\n /* If number of atoms in second line is less then actual atoms in file */\r\n if (counter < this._numAtoms) {\r\n this._complex.error = {\r\n message: 'File ended unexpectedly.',\r\n };\r\n }\r\n /* Catch errors occurred in parsing process */\r\n if (result.error) {\r\n throw new Error(result.error.message);\r\n }\r\n\r\n /* Finalizing data */\r\n this._finalize();\r\n\r\n /* Cleaning up */\r\n this._atomPosition = null;\r\n this._complex = null;\r\n this._molecules = null;\r\n this._molecule = null;\r\n\r\n /* Return resulting Complex variable */\r\n return result;\r\n }\r\n}\r\n\r\nGROParser.formats = ['gro'];\r\nGROParser.extensions = ['.gro'];\r\n\r\nexport default GROParser;\r\n","import * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst orderMap = {\r\n un: 0,\r\n 1: 1,\r\n 2: 2,\r\n 3: 3,\r\n ar: 1,\r\n am: 1,\r\n nc: 0,\r\n du: 1,\r\n};\r\nconst typeMap = {\r\n un: Bond.BondType.UNKNOWN, // unknown (cannot be determined from the parameter tables)\r\n 1: Bond.BondType.COVALENT, // single\r\n 2: Bond.BondType.COVALENT, // double\r\n 3: Bond.BondType.COVALENT, // triple\r\n ar: Bond.BondType.AROMATIC, // aromatic\r\n am: Bond.BondType.COVALENT, // amide\r\n nc: Bond.BondType.UNKNOWN, // not connected\r\n du: Bond.BondType.COVALENT, // dummy\r\n};\r\n\r\nconst resNumberRegex = /\\d+$/;\r\nconst spacesRegex = /\\s+/;\r\n\r\nfunction splitToFields(str) {\r\n return str.trim().split(spacesRegex);\r\n}\r\n/* There is no jsdoc documentation because of eslint corrections:\r\n * not all Parser methods are implemented\r\n */\r\n\r\nclass MOL2Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._compoundIndx = -1;\r\n\r\n this._molecules = [];\r\n this._molecule = null;\r\n\r\n this._currPosIdx = 0;\r\n this._currStartIdx = 0;\r\n\r\n this._serialAtomMap = {};\r\n\r\n this._options.fileType = 'mol2';\r\n }\r\n\r\n _parseRawStrings(data) {\r\n return data.split(/\\r?\\n|\\r/);\r\n }\r\n\r\n _toStringFromStart(numb, MOL2Data) {\r\n const newPosIdx = this._currStartIdx + numb;\r\n this._currPosIdx = (newPosIdx < MOL2Data.length) ? newPosIdx : this._currStartIdx;\r\n }\r\n\r\n _toHeaderString(header, MOL2Data) {\r\n this._toStringFromStart(0, MOL2Data);\r\n while (this._currPosIdx < MOL2Data.length) {\r\n if (MOL2Data[this._currPosIdx].match(`@${header}`)) {\r\n return;\r\n }\r\n this._currPosIdx++;\r\n }\r\n this._toStringFromStart(0, MOL2Data);\r\n }\r\n\r\n _toStringFromHeader(header, numb, MOL2Data) {\r\n this._toHeaderString(header, MOL2Data);\r\n const newPosIdx = this._currPosIdx + numb;\r\n\r\n if (MOL2Data[this._currPosIdx].match(`@${header}`) && newPosIdx < MOL2Data.length) {\r\n this._currPosIdx = newPosIdx;\r\n }\r\n }\r\n\r\n _setStart(startPos, MOL2Data) {\r\n if (startPos >= MOL2Data.length) {\r\n this._currStartIdx = this._currPosIdx = MOL2Data.length - 1;\r\n } else {\r\n this._currStartIdx = this._currPosIdx = startPos;\r\n }\r\n }\r\n\r\n _probablyHaveDataToParse(MOL2Data) {\r\n return this._currPosIdx < MOL2Data.length - 2;\r\n }\r\n\r\n _findNextCompoundStart(MOL2Data) {\r\n while (this._currPosIdx < MOL2Data.length && MOL2Data[this._currPosIdx].trim() !== '@MOLECULE>') {\r\n this._currPosIdx++;\r\n }\r\n this._setStart(++this._currPosIdx, MOL2Data);\r\n return this._probablyHaveDataToParse(MOL2Data);\r\n }\r\n\r\n _parseMolecule(MOL2Data) {\r\n this._toHeaderString('MOLECULE', MOL2Data);\r\n\r\n const { metadata } = this._complex;\r\n metadata.name = MOL2Data[++this._currPosIdx];\r\n metadata.format = 'mol2';\r\n\r\n this._molecule = { _index: '', _chains: [] };\r\n this._molecule._index = this._compoundIndx + 1;\r\n this._molecules.push(this._molecule);\r\n }\r\n\r\n /* Atom format description:\r\n * atomId atomName x y z element [resSeq [resName [charge [statusBit]]]]\r\n * statusBits is the internal SYBYL status bits associated with the atom.\r\n * These should never be set by the user.\r\n * Source: http://chemyang.ccnu.edu.cn/ccb/server/AIMMS/mol2.pdf\r\n */\r\n _parseAtoms(atomsNum, MOL2Data) {\r\n this._toHeaderString('ATOM', MOL2Data);\r\n\r\n for (let i = 0; i < atomsNum; i++) {\r\n const parsedStr = splitToFields(MOL2Data[++this._currPosIdx]);\r\n\r\n if (parsedStr.length < 6) {\r\n throw new Error('MOL2 parsing error: Not enough information to create atom!');\r\n }\r\n const atomId = parseInt(parsedStr[0], 10);\r\n const atomName = parsedStr[1];\r\n\r\n const x = parseFloat(parsedStr[2]);\r\n const y = parseFloat(parsedStr[3]);\r\n const z = parseFloat(parsedStr[4]);\r\n\r\n const element = parsedStr[5].split('.')[0].toUpperCase();\r\n\r\n let charge = 0;\r\n if (parsedStr.length >= 9) {\r\n charge = parseFloat(parsedStr[8]) || 0.0;\r\n }\r\n\r\n let chain = this._chain;\r\n if (!chain) {\r\n // .mol2 may contain information about multiple molecules, but they can't be visualized\r\n // at the same time now. There is no need to create different chain IDs then.\r\n this._chain = chain = this._complex.getChain('A') || this._complex.addChain('A');\r\n this._residue = null;\r\n }\r\n if (!this._setResidue(parsedStr)) {\r\n continue;\r\n }\r\n\r\n // These fields are not listed in mol2 format. Set them default.\r\n // Atoms and het atoms doesn't differ in .mol2,\r\n // but het atoms have special residues. It can be used in next updates\r\n const het = false;\r\n const altLoc = ' ';\r\n const occupancy = 1.0;\r\n const tempFactor = 0.0;\r\n const type = Element.getByName(element);\r\n const role = Element.Role[atomName];\r\n\r\n const xyz = new THREE.Vector3(x, y, z);\r\n this._residue.addAtom(atomName, type, xyz, role, het, atomId, altLoc, occupancy, tempFactor, charge);\r\n }\r\n }\r\n\r\n _setResidue(parsedStr) {\r\n let resSeq = 1;\r\n let resName = 'UNK'; // The same meaning has '<0>' in some mol2 files\r\n\r\n if (parsedStr.length >= 7) {\r\n resSeq = parseInt(parsedStr[6], 10);\r\n }\r\n if (parsedStr.length >= 8 && parsedStr[7] !== '<0>') {\r\n resName = parsedStr[7].replace(resNumberRegex, '');\r\n }\r\n if (this.settings.now.nowater) {\r\n if (resName === 'HOH' || resName === 'WAT') {\r\n return false;\r\n }\r\n }\r\n const residue = this._residue;\r\n const chain = this._chain;\r\n if (!residue || residue.getSequence() !== resSeq) {\r\n this._residue = chain.addResidue(resName, resSeq, 'A');\r\n }\r\n return true;\r\n }\r\n\r\n /* Bond format description\r\n * bondId originAtomId targetAtomId bondType [statusBits]\r\n */\r\n _parseBonds(bondsNum, MOL2Data) {\r\n this._toHeaderString('BOND', MOL2Data);\r\n\r\n for (let i = 0; i < bondsNum; i++) {\r\n const parsedStr = splitToFields(MOL2Data[++this._currPosIdx]);\r\n\r\n if (parsedStr.length < 3) {\r\n throw new Error('MOL2 parsing error: Missing information about bonds!');\r\n }\r\n\r\n let originAtomId = parseInt(parsedStr[1], 10);\r\n let targetAtomId = parseInt(parsedStr[2], 10);\r\n const bondType = parsedStr[3];\r\n\r\n if (originAtomId > targetAtomId) {\r\n [originAtomId, targetAtomId] = [targetAtomId, originAtomId];\r\n }\r\n this._complex.addBond(\r\n originAtomId,\r\n targetAtomId,\r\n orderMap[bondType] || 0,\r\n typeMap[bondType] || Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n }\r\n\r\n _fixSerialAtoms() {\r\n const atoms = this._complex._atoms;\r\n for (let i = 0; i < atoms.length; i++) {\r\n const atom = atoms[i];\r\n this._serialAtomMap[atom.serial] = atom;\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap;\r\n const complex = this._complex;\r\n\r\n if (Object.keys(serialAtomMap).length === 0) {\r\n throw new Error('MOL2 parsing error: Missing atom information!');\r\n }\r\n\r\n const bonds = complex._bonds;\r\n for (let j = 0; j < bonds.length; j++) {\r\n const bond = bonds[j];\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _finalizeMolecules() {\r\n // Get chain from complex\r\n const chain = this._complex._chains[0];\r\n this._complex._molecules = [];\r\n\r\n // Aggregate residues from chains\r\n // (to be precise from the chain 'A')\r\n for (let i = 0; i < this._molecules.length; i++) {\r\n const currMolecule = this._molecules[i];\r\n const molResidues = chain._residues;\r\n const molecule = new Molecule(this._complex, currMolecule._name, i + 1);\r\n molecule.residues = molResidues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n _finalize() {\r\n this._complex._finalizeBonds();\r\n this._fixSerialAtoms();\r\n this._fixBondsArray();\r\n this._finalizeMolecules();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n _parseCompound(MOL2Data) {\r\n this._compoundIndx++;\r\n this._parseMolecule(MOL2Data);\r\n\r\n // Ignoring comments and everything before @MOLECULE block\r\n this._toStringFromHeader('MOLECULE', 2, MOL2Data);\r\n\r\n const parsedStr = MOL2Data[this._currPosIdx].trim().split(spacesRegex);\r\n const atomsNum = parsedStr[0];\r\n const bondsNum = parsedStr[1];\r\n\r\n this._parseAtoms(atomsNum, MOL2Data);\r\n this._parseBonds(bondsNum, MOL2Data);\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n const MOL2Data = this._parseRawStrings(this._data);\r\n do {\r\n this._parseCompound(MOL2Data);\r\n } while (this._findNextCompoundStart(MOL2Data));\r\n\r\n this._finalize();\r\n\r\n return result;\r\n }\r\n}\r\n\r\nMOL2Parser.formats = ['mol2'];\r\nMOL2Parser.extensions = ['.mol2', '.ml2', '.sy2'];\r\n\r\nexport default MOL2Parser;\r\n","import ParserList from './parsers/ParserList';\r\n\r\nimport PDBParser from './parsers/PDBParser';\r\nimport CMLParser from './parsers/CMLParser';\r\nimport MMTFParser from './parsers/MMTFParser';\r\nimport CIFParser from './parsers/CIFParser';\r\nimport CCP4Parser from './parsers/CCP4Parser';\r\nimport XYZParser from './parsers/XYZParser';\r\nimport PubChemParser from './parsers/PubChemParser';\r\nimport SDFParser from './parsers/SDFParser';\r\nimport DSN6Parser from './parsers/DSN6Parser';\r\nimport GROParser from './parsers/GROParser';\r\nimport MOL2Parser from './parsers/MOL2Parser';\r\n\r\nexport default new ParserList([\r\n // note: order might be important\r\n PDBParser,\r\n CIFParser,\r\n MMTFParser,\r\n XYZParser,\r\n CMLParser,\r\n PubChemParser,\r\n SDFParser,\r\n CCP4Parser,\r\n DSN6Parser,\r\n GROParser,\r\n MOL2Parser,\r\n]);\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available exporters.\r\n * @extends EntityList\r\n */\r\nclass ExporterList extends EntityList {\r\n /**\r\n * Create a list of exporters.\r\n * The exporters are indexed by supported data formats (`.formats` and\r\n * `.extensions` properties of a Exporter subclass).\r\n * The Exporters can be retrieved later by matching against specs (see {@link ExporterList#find}).\r\n *\r\n * @param {!Array=} someExporters A list of {@link Exporter} subclasses to\r\n * automatically register at creation time.\r\n * @see ExporterList#register\r\n */\r\n constructor(someExporters = []) {\r\n super(someExporters, ['formats']);\r\n }\r\n\r\n /**\r\n * Find a suitable exporter for data.\r\n *\r\n * @param {Object} specs Exporter specifications.\r\n * @param {string=} specs.format Supported data format.\r\n * @param {*=} specs.data Data to export.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.format) {\r\n list = this._dict.formats[specs.format.toLowerCase()] || [];\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default ExporterList;\r\n","import makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Exporter {\r\n constructor(source, options) {\r\n this._source = source;\r\n this._options = options || {};\r\n this._abort = false;\r\n }\r\n\r\n exportSync() {\r\n throw new Error('Exporting to this source is not implemented');\r\n }\r\n\r\n export() {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n try {\r\n if (this._abort) {\r\n return reject(new Error('Export aborted'));\r\n }\r\n return resolve(this.exportSync());\r\n } catch (error) {\r\n return reject(error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n }\r\n}\r\n\r\nmakeContextDependent(Exporter.prototype);\r\n","import _ from 'lodash';\r\nimport { Matrix4 } from 'three';\r\n\r\nexport default class PDBResult {\r\n constructor() {\r\n this._resultArray = [];\r\n this._currentStr = -1;\r\n this._tag = null;\r\n this._fixedNumeration = false;\r\n this._numeration = false;\r\n this._tagStrNum = 0;\r\n }\r\n\r\n getResult() {\r\n this.writeString('\\n', 81, 81);\r\n return this._resultArray.join('');\r\n }\r\n\r\n _currentStrLength() {\r\n const curStr = this._resultArray[this._currentStr];\r\n return curStr ? curStr.length : 0;\r\n }\r\n\r\n // numeration can be number or boolean\r\n // if numeration is number then just put this number to 8-10 pos in string\r\n // if numeration is boolean then increase number for all new strings\r\n newTag(tag, numeration) {\r\n if (!tag) {\r\n this._tag = null;\r\n } else {\r\n this._tag = tag;\r\n }\r\n if (!_.isUndefined(numeration)) {\r\n if (_.isNumber(numeration)) {\r\n this._tagStrNum = numeration;\r\n this._numeration = true;\r\n this._fixedNumeration = true;\r\n } else if (_.isBoolean(numeration)) {\r\n this._tagStrNum = 0;\r\n this._numeration = numeration;\r\n this._fixedNumeration = false;\r\n }\r\n } else {\r\n this._numeration = false;\r\n this._fixedNumeration = false;\r\n this._tagStrNum = 0;\r\n }\r\n }\r\n\r\n newString(tag) {\r\n this.writeString('\\n', 81, 81);\r\n this._currentStr++;\r\n this._resultArray.push('');\r\n\r\n if (tag) {\r\n this.writeString(tag, 1, 6);\r\n } else if (this._tag) {\r\n this.writeString(this._tag, 1, 6);\r\n }\r\n\r\n if (this._numeration) {\r\n if (!this._fixedNumeration) {\r\n this._tagStrNum++;\r\n }\r\n if (this._tagStrNum !== 1) {\r\n this.writeString(this._tagStrNum.toString(), 10, 8);\r\n }\r\n }\r\n }\r\n\r\n writeEntireString(string, maxStrPos, concat) {\r\n if (!maxStrPos) {\r\n maxStrPos = 81;\r\n }\r\n for (let j = 0; j < string.length; j++) {\r\n if (this._currentStrLength() === maxStrPos && j !== string.length - 1) {\r\n this.newString();\r\n if (concat) { // pretty hardcoddy\r\n this.writeString(concat.tag, concat.begin, concat.end);\r\n }\r\n }\r\n if (string[j] === '\\n') {\r\n this.newString();\r\n } else {\r\n this.writeString(string[j]);\r\n }\r\n }\r\n }\r\n\r\n writeString(string, begin, end) {\r\n let curStr = this._resultArray[this._currentStr];\r\n let str;\r\n\r\n const curStrLength = curStr ? curStr.length : 0;\r\n\r\n if (_.isUndefined(string)) {\r\n return;\r\n }\r\n\r\n if (!_.isNumber(begin)) {\r\n begin = curStrLength + 1;\r\n }\r\n\r\n if (!_.isNumber(end)) {\r\n end = curStrLength + string.length;\r\n }\r\n\r\n if (!_.isString(string)) {\r\n str = string.toString();\r\n } else {\r\n str = string;\r\n }\r\n\r\n const finish = begin < end ? end : begin;\r\n const start = begin < end ? begin : end;\r\n\r\n if (str.length > Math.abs(begin - end) + 1) {\r\n str = str.substr(0, Math.abs(begin - end + 1));\r\n }\r\n\r\n // spaces before start of new data\r\n if (start > curStrLength + 1) {\r\n this._resultArray[this._currentStr] += ' '.repeat(start - curStrLength - 1);\r\n } else if (start <= curStrLength) {\r\n const cStr = this._resultArray[this._currentStr];\r\n this._resultArray[this._currentStr] = cStr.slice(0, start - 1);\r\n }\r\n\r\n // if reverse order\r\n // reverse order of end and begin means that user wants to align text right\r\n if (end < begin) {\r\n const len = begin - end + 1;\r\n str = ' '.repeat(len - str.length) + str;\r\n }\r\n\r\n // some hardcode fix for space between string numeration and data\r\n // (see pdb file format description)\r\n if (start === 11 && this._numeration && this._tagStrNum !== 1) {\r\n str = ` ${str}`;\r\n }\r\n\r\n // append new data to string\r\n this._resultArray[this._currentStr] += str;\r\n curStr = this._resultArray[this._currentStr];\r\n\r\n if (finish > curStr.length) {\r\n this._resultArray[this._currentStr] += ' '.repeat(finish - curStr.length);\r\n }\r\n }\r\n\r\n writeBondsArray(bonds, atom) {\r\n const bondsArrays = this._getSubArrays(bonds, 4);\r\n\r\n for (let k = 0; k < bondsArrays.length; k++) {\r\n this.newString();\r\n this.writeString(atom.serial, 11, 7);\r\n\r\n for (let j = 0; j < bondsArrays[k].length; j++) {\r\n const serial = (bondsArrays[k][j]._left.serial === atom.serial)\r\n ? bondsArrays[k][j]._right.serial : bondsArrays[k][j]._left.serial;\r\n\r\n this.writeString(serial, 16 + 5 * j, 12 + 5 * j);\r\n }\r\n }\r\n }\r\n\r\n _getSubArrays(arr, subArraySize) {\r\n const subArrays = [];\r\n for (let i = 0; i < arr.length; i += subArraySize) {\r\n subArrays.push(arr.slice(i, i + subArraySize));\r\n }\r\n return subArrays;\r\n }\r\n\r\n // function for writing matrix in Remark290 and Remark350 tags\r\n // (see pdb file description)\r\n writeMatrix(matrix, matrixIndx, tag) {\r\n for (let j = 0; j < 3; j++) {\r\n this.newString();\r\n this.writeString(tag, 14, 18);\r\n this.writeString((j + 1).toString(), 19, 19);\r\n this.writeString(matrixIndx.toString(), 23, 20);\r\n for (let k = 0; k < 3; k++) {\r\n const numb = parseFloat(matrix.elements[j * 4 + k]).toFixed(6);\r\n this.writeString(numb.toString(), 33 + k * 10, 24 + k * 10);\r\n }\r\n\r\n const numb = parseFloat(matrix.elements[j * 4 + 3]).toFixed(5);\r\n this.writeString(numb.toString(), 68, 55);\r\n }\r\n }\r\n\r\n writeMatrices(matrices, string) {\r\n if (!matrices) {\r\n return;\r\n }\r\n const matrix = new Matrix4();\r\n for (let j = 0; j < matrices.length; j++) {\r\n matrix.copy(matrices[j]).transpose();\r\n this.writeMatrix(matrix, j + 1, string);\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport Complex from '../../chem/Complex';\r\nimport Exporter from './Exporter';\r\nimport PDBResult from './PDBResult';\r\nimport Assembly from '../../chem/Assembly';\r\nimport { typeByPDBHelixClass } from '../../chem/Helix';\r\n\r\nexport default class PDBExporter extends Exporter {\r\n constructor(source, options) {\r\n super(source, options);\r\n this._tags = ['HEADER', 'TITLE', 'COMPND', 'REMARK', 'HELIX', 'SHEET', 'ATOM and HETATM', 'CONECT'];\r\n this._result = null;\r\n this._tagExtractors = {\r\n HEADER: this._extractHEADER,\r\n TITLE: this._extractTITLE,\r\n 'ATOM and HETATM': this._extractATOM,\r\n CONECT: this._extractCONECT,\r\n COMPND: this._extractCOMPND,\r\n REMARK: this._extractREMARK,\r\n HELIX: this._extractHELIX,\r\n SHEET: this._extractSHEET,\r\n };\r\n this._stringForRemark350 = 'COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN\\n'\r\n + 'BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE\\n'\r\n + 'MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS\\n'\r\n + 'GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND\\n'\r\n + 'CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN.';\r\n\r\n this._stringForRemark290 = 'CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS\\n'\r\n + 'THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM\\n'\r\n + 'RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY\\n'\r\n + 'RELATED MOLECULES.';\r\n }\r\n\r\n exportSync() {\r\n const result = new PDBResult();\r\n if (!this._source) {\r\n return this._result;\r\n }\r\n\r\n for (let i = 0; i < this._tags.length; i++) {\r\n const tag = this._tags[i];\r\n const func = this._tagExtractors[tag];\r\n if (_.isFunction(func)) {\r\n func.call(this, result);\r\n }\r\n }\r\n\r\n this._result = result.getResult();\r\n\r\n return this._result;\r\n }\r\n\r\n _extractHEADER(result) {\r\n if (!this._source.metadata) {\r\n return;\r\n }\r\n const { metadata } = this._source;\r\n result.newTag('HEADER');\r\n result.newString();\r\n if (metadata.classification) {\r\n result.writeString(metadata.classification, 11, 50);\r\n }\r\n if (metadata.date) {\r\n result.writeString(metadata.date, 51, 59);\r\n }\r\n if (metadata.id) {\r\n result.writeString(metadata.id, 63, 66);\r\n }\r\n }\r\n\r\n _extractTITLE(result) {\r\n if (!this._source.metadata) {\r\n return;\r\n }\r\n const { metadata } = this._source;\r\n if (!metadata.title) {\r\n return;\r\n }\r\n result.newTag('TITLE', true);\r\n for (let i = 0; i < metadata.title.length; i++) {\r\n result.newString();\r\n result.writeString(metadata.title[i], 11, 80);\r\n }\r\n }\r\n\r\n _extractCONECT(result) {\r\n if (!this._source._atoms) {\r\n return;\r\n }\r\n\r\n const atoms = this._source._atoms;\r\n result.newTag('CONECT');\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const fixedBonds = atoms[i].bonds.filter((bond) => bond._fixed);\r\n if (fixedBonds.length !== 0) {\r\n result.writeBondsArray(fixedBonds.reverse(), atoms[i]);\r\n }\r\n }\r\n }\r\n\r\n _extractSHEET(result) {\r\n if (!this._source._sheets) {\r\n return;\r\n }\r\n\r\n result.newTag('SHEET');\r\n\r\n const sheets = this._source._sheets;\r\n for (let i = 0; i < sheets.length; i++) {\r\n if (sheets[i]._strands) {\r\n const strands = sheets[i]._strands;\r\n for (let j = 0; j < strands.length; j++) {\r\n result.newString();\r\n result.writeString(j + 1, 10, 8);\r\n result.writeString(sheets[i]._name, 14, 12);\r\n result.writeString(strands.length, 16, 15);\r\n result.writeString(strands[j].init._type._name, 18, 20);\r\n result.writeString(strands[j].init._chain._name, 22, 22);\r\n result.writeString(strands[j].init._sequence, 26, 23);\r\n result.writeString(strands[j].init._icode, 27, 27);\r\n result.writeString(strands[j].term._type._name, 29, 31);\r\n result.writeString(strands[j].init._chain._name, 33, 33);\r\n result.writeString(strands[j].term._sequence, 37, 34);\r\n result.writeString(strands[j].term._icode, 38, 38);\r\n result.writeString(strands[j].sense, 40, 39);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _extractHELIX(result) {\r\n if (!this._source._helices) {\r\n return;\r\n }\r\n\r\n result.newTag('HELIX');\r\n const helices = this._source._helices;\r\n for (let i = 0; i < helices.length; i++) {\r\n const helix = helices[i];\r\n const helixClass = _.invert(typeByPDBHelixClass);\r\n result.newString();\r\n result.writeString(helix.serial, 10, 8);\r\n result.writeString(helix.name, 14, 12);\r\n result.writeString(helix.init._type._name, 16, 18);\r\n result.writeString(helix.init._chain._name, 20, 20);\r\n result.writeString(helix.init._sequence, 25, 22);\r\n result.writeString(helix.init._icode, 26, 26);\r\n result.writeString(helix.term._type._name, 28, 30);\r\n result.writeString(helix.term._chain._name, 32, 32);\r\n result.writeString(helix.term._sequence, 37, 34);\r\n result.writeString(helix.term._icode, 38, 38);\r\n result.writeString(helixClass[helix.type], 40, 39);\r\n result.writeString(helix.comment, 41, 70);\r\n result.writeString(helix.length, 76, 72);\r\n }\r\n }\r\n\r\n _extractATOM(result) {\r\n if (!this._source._atoms) {\r\n return;\r\n }\r\n const atoms = this._source._atoms;\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const tag = atoms[i].het ? 'HETATM' : 'ATOM';\r\n result.newString(tag);\r\n const startIndx = (atoms[i].element.name.length > 1 || atoms[i].name.length > 3) ? 13 : 14;\r\n result.writeString(atoms[i].serial, 11, 7);\r\n result.writeString(atoms[i].name, startIndx, 16);\r\n result.writeString(String.fromCharCode(atoms[i].location), 17, 17);\r\n result.writeString(atoms[i].residue._type._name, 20, 18);\r\n result.writeString(atoms[i].residue._chain._name, 22, 22);\r\n result.writeString(atoms[i].residue._sequence, 26, 23);\r\n result.writeString(atoms[i].residue._icode, 27, 27);\r\n result.writeString(atoms[i].position.x.toFixed(3), 38, 31);\r\n result.writeString(atoms[i].position.y.toFixed(3), 46, 39);\r\n result.writeString(atoms[i].position.z.toFixed(3), 54, 47);\r\n result.writeString(atoms[i].occupancy.toFixed(2), 60, 55);\r\n result.writeString(atoms[i].temperature.toFixed(2), 66, 61);\r\n result.writeString(atoms[i].element.name, 78, 77);\r\n if (atoms[i].charge) {\r\n result.writeString(atoms[i].charge, 79, 80);\r\n }\r\n }\r\n }\r\n\r\n _extractCOMPND(result) {\r\n if (!this._source._molecules) {\r\n return;\r\n }\r\n const molecules = this._source._molecules;\r\n result.newTag('COMPND', true);\r\n\r\n for (let i = 0; i < molecules.length; i++) {\r\n const chains = this._getMoleculeChains(molecules[i]);\r\n result.newString();\r\n result.writeString(`MOL_ID: ${molecules[i].index};`, 11, 80);\r\n result.newString();\r\n result.writeString(`MOLECULE: ${molecules[i].name};`, 11, 80);\r\n result.newString();\r\n result.writeString('CHAIN: ', 11, 18);\r\n const chainsString = `${chains.join(', ')};`;\r\n result.writeEntireString(chainsString, 81);\r\n }\r\n }\r\n\r\n _extractREMARK(result) {\r\n this._Remark290(result);\r\n this._Remark350(result);\r\n }\r\n\r\n _Remark290(result) {\r\n if (!this._source.symmetry) {\r\n return;\r\n }\r\n\r\n if (this._source.symmetry.length !== 0) {\r\n const matrices = this._source.symmetry;\r\n result.newTag('REMARK', 290);\r\n result.newString();\r\n result.newString();\r\n result.writeEntireString(this._stringForRemark290);\r\n result.writeMatrices(matrices, 'SMTRY');\r\n result.newString();\r\n result.newString();\r\n result.writeString('REMARK: NULL', 11, 80);\r\n }\r\n }\r\n\r\n _Remark350(result) {\r\n if (!this._source.units) {\r\n return;\r\n }\r\n const { units } = this._source;\r\n let biomolIndx = 0;\r\n\r\n result.newTag('REMARK', 350);\r\n result.newString();\r\n result.newString();\r\n result.writeEntireString(this._stringForRemark350);\r\n\r\n const assemblies = units.filter((unit) => unit instanceof Assembly);\r\n\r\n for (let i = 0; i < assemblies.length; i++) {\r\n result.newString();\r\n result.newString();\r\n biomolIndx++;\r\n result.writeString(`BIOMOLECULE: ${biomolIndx}`, 11, 80);\r\n const chains = assemblies[i].chains.join(', ');\r\n result.newString();\r\n result.writeString('APPLY THE FOLLOWING TO CHAINS: ');\r\n result.writeEntireString(chains, 69, { tag: 'AND CHAINS: ', begin: 31, end: 42 });\r\n\r\n const { matrices } = assemblies[i];\r\n result.writeMatrices(matrices, 'BIOMT');\r\n }\r\n }\r\n\r\n _getMoleculeChains(molecule) {\r\n function getChainName(residue) {\r\n return residue._chain._name;\r\n }\r\n const chainNames = molecule.residues.map(getChainName);\r\n return chainNames.filter((item, pos) => chainNames.indexOf(item) === pos);\r\n }\r\n}\r\n\r\nPDBExporter.formats = ['pdb'];\r\nPDBExporter.SourceClass = Complex;\r\n","import * as THREE from 'three';\r\n\r\nconst FBX_POS_SIZE = 3;\r\nconst FBX_NORM_SIZE = 3;\r\nconst FBX_COL_SIZE = 4;\r\n\r\nfunction copyFbxPoint3(src, srcIdx, dst, dstIdx) {\r\n dst[dstIdx] = src[srcIdx];\r\n dst[dstIdx + 1] = src[srcIdx + 1];\r\n dst[dstIdx + 2] = src[srcIdx + 2];\r\n}\r\n\r\nfunction copyFbxPoint4(src, srcIdx, dst, dstIdx, value) {\r\n dst[dstIdx] = src[srcIdx];\r\n dst[dstIdx + 1] = src[srcIdx + 1];\r\n dst[dstIdx + 2] = src[srcIdx + 2];\r\n dst[dstIdx + 3] = value;\r\n}\r\n\r\nconst vector4 = new THREE.Vector4();\r\nfunction copyTransformedPoint3(src, srcIdx, dst, dstIdx, opts) {\r\n vector4.set(src[srcIdx], src[srcIdx + 1], src[srcIdx + 2], opts.w);\r\n vector4.applyMatrix4(opts.matrix);\r\n dst[dstIdx] = vector4.x;\r\n dst[dstIdx + 1] = vector4.y;\r\n dst[dstIdx + 2] = vector4.z;\r\n}\r\n\r\nfunction setSubArray(src, dst, count, copyFunctor, functorOpts) {\r\n if ((dst.array.length - dst.start) / dst.stride < count\r\n || (src.array.length - src.start) / src.stride < count) {\r\n return; // we've got no space\r\n }\r\n if (src.stride === dst.stride) { // stride is the same\r\n dst.array.set(src.array, dst.start);\r\n } else {\r\n let idx = dst.start;\r\n let arridx = src.start;\r\n for (let i = 0; i < count; ++i, idx += dst.stride, arridx += src.stride) {\r\n copyFunctor(src.array, arridx, dst.array, idx, functorOpts);\r\n }\r\n }\r\n}\r\n\r\nexport default class FBXModel {\r\n constructor() {\r\n this.positions = null;\r\n this.normals = null;\r\n this.colors = null;\r\n this.indices = null;\r\n this.lastPos = 0;\r\n this.lastNorm = 0;\r\n this.lastCol = 0;\r\n this.lastIdx = 0;\r\n }\r\n\r\n init(vertsCount, indsCount) {\r\n this.positions = new Float32Array(vertsCount * FBX_POS_SIZE);\r\n this.normals = new Float32Array(vertsCount * FBX_NORM_SIZE);\r\n this.colors = new Float32Array(vertsCount * FBX_COL_SIZE);\r\n this.indices = new Int32Array(indsCount);\r\n }\r\n\r\n setPositions(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.positions,\r\n start: this.lastPos,\r\n stride: FBX_POS_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint3);\r\n this.lastPos += count * FBX_POS_SIZE;\r\n }\r\n\r\n setTransformedPositions(array, start, count, stride, matrix) {\r\n let idx = this.lastPos;\r\n let arrIdx = start;\r\n const opts = { matrix, w: 1 };\r\n for (let i = 0; i < count; ++i, arrIdx += stride, idx += FBX_POS_SIZE) {\r\n copyTransformedPoint3(array, arrIdx, this.positions, idx, opts);\r\n }\r\n this.lastPos += count * FBX_POS_SIZE;\r\n }\r\n\r\n setNormals(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.normals,\r\n start: this.lastNorm,\r\n stride: FBX_NORM_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint3);\r\n this.lastNorm += count * FBX_NORM_SIZE;\r\n }\r\n\r\n setTransformedNormals(array, start, count, stride, matrix) {\r\n let idx = this.lastNorm;\r\n let arrIdx = start;\r\n const opts = { matrix, w: 0 };\r\n for (let i = 0; i < count; ++i, arrIdx += stride, idx += FBX_NORM_SIZE) {\r\n copyTransformedPoint3(array, arrIdx, this.normals, idx, opts);\r\n }\r\n this.lastNorm += count * FBX_NORM_SIZE;\r\n }\r\n\r\n setColors(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.colors,\r\n start: this.lastCol,\r\n stride: FBX_COL_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint4, 1);\r\n this.lastCol += count * FBX_COL_SIZE;\r\n }\r\n\r\n setIndices(array, start, count) {\r\n this.indices.set(array, this.lastIdx);\r\n this.lastIdx += count;\r\n }\r\n\r\n setShiftedIndices(array, count, shift) {\r\n const shifted = array.map((x) => x + shift);\r\n this.setIndices(shifted, 0, count);\r\n }\r\n\r\n getVerticesNumber() {\r\n return this.lastPos / FBX_POS_SIZE;\r\n }\r\n\r\n addInstance(matrix, geo) {\r\n // add indices at first to take old number of vertices for shift\r\n const currentCount = this.getVerticesNumber();\r\n this.setShiftedIndices(geo.indices, geo.indices.length, currentCount);\r\n // simply write vertices at empty space\r\n const size = geo.itemSize;\r\n this.setTransformedPositions(geo.positions, 0, geo.vertsCount, size.position, matrix);\r\n this.setTransformedNormals(geo.normals, 0, geo.vertsCount, size.normal, matrix);\r\n this.setColors(geo.colors, 0, geo.vertsCount, size.color);\r\n }\r\n}\r\n","/** Base class for fbx geometry contains simply organized attributes: positions+normals+colors, indices. */\r\nexport default class FBXGeometry {\r\n /**\r\n * Create a base geo with necessary members.\r\n */\r\n constructor() {\r\n this.positions = null;\r\n this.normals = null;\r\n this.colors = null;\r\n this.indices = null;\r\n this.vertsCount = 0;\r\n this.itemSize = null;\r\n }\r\n\r\n /**\r\n * Initialize base geo storing items info from attributes.\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n */\r\n init(geo, _info) {\r\n const { attributes } = geo;\r\n // save item size\r\n this.itemSize = {\r\n position: attributes.position.itemSize,\r\n normal: attributes.normal.itemSize,\r\n color: attributes.color.itemSize,\r\n };\r\n }\r\n}\r\n","import FBXGeometry from './FBXGeometry';\r\n\r\n/**\r\n * Fbx geometry, that copies positions+normals, indexes and creates colors filled with defined value.\r\n * @extends FBXGeometry\r\n */\r\nexport default class FBX1CGeometry extends FBXGeometry {\r\n /**\r\n * Initialize geo storing positions, normals, indices and create colors.\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n */\r\n init(geo, _info) {\r\n super.init(geo, _info);\r\n const {\r\n attributes: {\r\n position,\r\n normal,\r\n },\r\n index,\r\n } = geo;\r\n // copy vertices attributes\r\n this.vertsCount = position.count;\r\n this.positions = position.array;\r\n this.normals = normal.array;\r\n // create color array\r\n this.colors = new Float32Array(this.vertsCount * this.itemSize.color);\r\n // indices\r\n this.indices = index.array;\r\n }\r\n\r\n /**\r\n * Set defined color for all items in color attribute\r\n * @param {Object} color - THREE.Color.\r\n */\r\n setColors(color) {\r\n let offset = 0;\r\n for (let i = 0, l = this.colors.length, cl = this.itemSize.color; i < l; i += cl) {\r\n this.colors[offset++] = color.r;\r\n this.colors[offset++] = color.g;\r\n this.colors[offset++] = color.b;\r\n }\r\n }\r\n}\r\n","import FBXGeometry from './FBXGeometry';\r\n\r\n/**\r\n * Fbx geometry, that copies positions+normals, indexes from cylinder geometry and creates colors filled with two\r\n * defined values.\r\n * @extends FBXGeometry\r\n */\r\nexport default class FBX2CCylinder extends FBXGeometry {\r\n constructor() {\r\n super();\r\n this._cutRawStart = 0;\r\n this._cutRawEnd = 0;\r\n this._facesPerSlice = 0;\r\n }\r\n\r\n /**\r\n * Initialize geo by creating new attributes, because we extend number of vertices to make cylinder two-colored.\r\n * Indices remain the same. We process open- end close-ended cylinders and consider cylinders od 2 segments\r\n * in height ONLY.\r\n * NOTE: cylinder consists of 2 height segments and stores parts in the order: tube, topCap, bottomCap\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n * @param {Object} info - information needed for geo extend\r\n */\r\n init(geo, info) {\r\n super.init(geo, info);\r\n const {\r\n attributes: {\r\n position,\r\n },\r\n index,\r\n } = geo;\r\n // extend vertices arrays\r\n this.vertsCount = position.count + info.addPerCylinder;\r\n this._facesPerSlice = info.addPerCylinder;\r\n this.positions = new Float32Array(this.vertsCount * position.itemSize);\r\n this.normals = new Float32Array(this.vertsCount * this.itemSize.normal);\r\n this.colors = new Float32Array(this.vertsCount * this.itemSize.color);\r\n this._extendVertices(geo, info);\r\n // number of indices stays the same\r\n this.indices = new Uint32Array(index.count);\r\n this._extendIndices(geo, info);\r\n }\r\n\r\n /** Extend vertex attributes to have one more slice to make sharp middle startColor-endColor line. */\r\n _extendVertices(geo, info) {\r\n const { position } = geo.attributes;\r\n const { normal } = geo.attributes;\r\n const geoParams = geo.getGeoParams();\r\n const cutRaw = 1; // we expect cylinders of 2 segments in height => so half segment = 1\r\n this._cutRawStart = cutRaw * geoParams.radialSegments;\r\n this._cutRawEnd = this._cutRawStart + info.addPerCylinder;\r\n { // write first half of cylinder\r\n let temp = position.array.slice(0, this._cutRawEnd * position.itemSize);\r\n this.positions.set(temp, 0);\r\n temp = normal.array.slice(0, this._cutRawEnd * normal.itemSize);\r\n this.normals.set(temp, 0);\r\n }\r\n { // write second part of cylinder\r\n let temp = position.array.slice(this._cutRawStart * position.itemSize, position.array.length);\r\n this.positions.set(temp, this._cutRawEnd * position.itemSize);\r\n temp = normal.array.slice(this._cutRawStart * normal.itemSize, normal.array.length);\r\n this.normals.set(temp, this._cutRawEnd * normal.itemSize);\r\n }\r\n }\r\n\r\n /** Shift values of second part (+caps) indices by newly added vertices count. Number of faces remains the same. */\r\n _extendIndices(geo, info) {\r\n const { index } = geo;\r\n const indicesPerQuad = 6; // quad = 2 triangles => 6 indices\r\n const startToShift = info.addPerCylinder * indicesPerQuad;\r\n const shift = info.addPerCylinder;\r\n let shifted = index.array.slice(startToShift, index.count);\r\n shifted = shifted.map((x) => x + shift); // shift only the endings\r\n this.indices.set(index.array, 0);\r\n this.indices.set(shifted, startToShift);\r\n }\r\n\r\n /**\r\n * Set defined colors: (first part + bottom cap), (second part + top cap)\r\n * @param {number} start - start color index\r\n * @param {number} end - start color index\r\n * @param {array} array - array of colors\r\n * @param {array} color - color value components\r\n */\r\n _setColorRange(start, end, array, color) {\r\n const colorSize = color.length;\r\n for (let i = start; i < end; i += colorSize) {\r\n array.set(color, i);\r\n }\r\n }\r\n\r\n /**\r\n * Set defined colors: (first part + bottom cap), (second part + top cap)\r\n * @param {Object} color1 - THREE.Color.\r\n * @param {Object} color2 - THREE.Color.\r\n */\r\n setColors(color1, color2) {\r\n const colorSize = this.itemSize.color;\r\n const part1End = this._cutRawEnd * colorSize;\r\n const part2End = part1End * 2;\r\n this._setColorRange(0, part1End, this.colors, color1.toArray());\r\n this._setColorRange(part1End, part2End, this.colors, color2.toArray());\r\n if (part2End < this.colors.length) { // cylinder has caps, lets paint them\r\n const capSize = (this._facesPerSlice + 1) * colorSize;\r\n const cap1End = part2End + capSize;\r\n this._setColorRange(part2End, cap1End, this.colors, color2.toArray());\r\n const cap2End = cap1End + capSize; // should be equal to this.colors.length;\r\n this._setColorRange(cap1End, cap2End, this.colors, color1.toArray());\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\n\r\nimport utils from '../../../utils';\r\nimport gfxutils from '../../../gfx/gfxutils';\r\nimport logger from '../../../utils/logger';\r\n\r\nimport FBXModel from './FBXModel';\r\nimport ThickLineMesh from '../../../gfx/meshes/ThickLineMesh';\r\nimport ZSpriteMesh from '../../../gfx/meshes/ZSpriteMesh';\r\nimport InstancedSpheresGeometry from '../../../gfx/geometries/InstancedSpheresGeometry';\r\nimport Instanced2CCylindersGeometry from '../../../gfx/geometries/Instanced2CCylindersGeometry';\r\nimport FBX1CGeometry from './FBX1CGeometry';\r\nimport FBX2CCylinder from './FBX2CCylinder';\r\n\r\nexport default class FBXInfoExtractor {\r\n constructor() {\r\n this._materials = [];\r\n this._models = [];\r\n }\r\n\r\n process(data) {\r\n this._extractModelsAndMaterials(data);\r\n const models = this._flattenModels();\r\n\r\n return {\r\n name: data.name,\r\n models,\r\n materials: this._materials,\r\n };\r\n }\r\n\r\n /**\r\n * Extract fbx object information from ComplexVisual\r\n * @param {object} data - complexVisual to get geometry info from\r\n */\r\n _extractModelsAndMaterials(data) {\r\n const layersOfInterest = new THREE.Layers();\r\n layersOfInterest.set(gfxutils.LAYERS.DEFAULT);\r\n layersOfInterest.enable(gfxutils.LAYERS.TRANSPARENT);\r\n data.traverse((object) => {\r\n if (object instanceof THREE.Mesh && object.layers.test(layersOfInterest) && this.checkExportAbility(object)) {\r\n if (object.geometry.type === 'InstancedBufferGeometry') {\r\n this._collectInstancedGeoInfo(object);\r\n } else {\r\n this._collectGeoInfo(object);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Reworking indices buffer, see https://banexdevblog.wordpress.com/2014/06/23/a-quick-tutorial-about-the-fbx-ascii-format/\r\n * basically, every triangle in Miew has been represented hat way (e.g.) : 0,1,7, but we must (for FBX) rework that\r\n * into: 0,1,-8.\r\n * @param {array} indices - belongs to [0, maxVertIndex]\r\n */\r\n _reworkIndices(indices) {\r\n const faceSize = 3;\r\n for (let i = faceSize - 1; i < indices.length; i += faceSize) {\r\n indices[i] *= -1;\r\n indices[i]--;\r\n }\r\n }\r\n\r\n /**\r\n * Combine geometry from several models having the same material into one Model and finally prepare indices\r\n * @returns {array} models, combined by material id\r\n */\r\n _flattenModels() {\r\n let overallVertsCount = 0;\r\n function shift(x) {\r\n return x + overallVertsCount;\r\n }\r\n const combined = [];\r\n // flatten models geometry\r\n for (let i = 0, n = this._models.length; i < n; i++) {\r\n const models = this._models[i];\r\n let indices = [];\r\n let positions = [];\r\n let normals = [];\r\n let colors = [];\r\n // reorganize every attributes as array of arrays\r\n overallVertsCount = 0;\r\n for (let j = 0; j < models.length; j++) {\r\n const m = models[j];\r\n indices.push(m.indices.map(shift));\r\n overallVertsCount += m.getVerticesNumber();\r\n positions.push(m.positions);\r\n normals.push(m.normals);\r\n colors.push(m.colors);\r\n }\r\n // join all subarrays into one\r\n indices = utils.mergeTypedArraysUnsafe(indices);\r\n this._reworkIndices(indices);\r\n positions = utils.mergeTypedArraysUnsafe(positions);\r\n normals = utils.mergeTypedArraysUnsafe(normals);\r\n colors = utils.mergeTypedArraysUnsafe(colors);\r\n combined.push({\r\n indices,\r\n positions,\r\n normals,\r\n colors,\r\n verticesCount: overallVertsCount,\r\n });\r\n }\r\n return combined;\r\n }\r\n\r\n /**\r\n * Check ability to export the kind of mesh.\r\n * @param {object} mesh - given mesh to check\r\n * @returns {boolean} result of check\r\n */\r\n checkExportAbility(mesh) {\r\n // check mesh on not being empty\r\n if (mesh.geometry.attributes.position.count === 0) {\r\n return false;\r\n }\r\n // check type of mesh\r\n // if (mesh.geometry.isInstancedBufferGeometry && settings.now.zSprites) {\r\n if (mesh instanceof ZSpriteMesh) {\r\n logger.warn('Currently we cannot export \\'sprites\\' modes, like BS, WV, LC. Please turn of settings \\'zSprites\\' and try again');\r\n return false;\r\n }\r\n if (mesh instanceof ThickLineMesh) {\r\n logger.warn('Currently we cannot export Lines mode');\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Save geometry info from common mesh, like Surface or Cartoon\r\n */\r\n _collectGeoInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n normal,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const vertCount = position.count;\r\n model.init(vertCount, index.count);\r\n if (matrix.isIdentity()) {\r\n model.setPositions(position.array, 0, vertCount, position.itemSize);\r\n model.setNormals(normal.array, 0, vertCount, normal.itemSize);\r\n } else {\r\n model.setTransformedPositions(position.array, 0, vertCount, position.itemSize, matrix);\r\n model.setTransformedNormals(normal.array, 0, vertCount, normal.itemSize, matrix);\r\n }\r\n model.setColors(color.array, 0, vertCount, color.itemSize);\r\n model.setIndices(index.array, 0, index.count);\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Collect instanced spheres geometry and materials.\r\n * @param {object} mesh - mesh with instanced spheres info\r\n */\r\n _collectSpheresInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const instCount = mesh.geometry.instanceCount;\r\n const vertCount = position.count;\r\n const indsCount = index.count;\r\n model.init(instCount * vertCount, instCount * indsCount);\r\n const geo = new FBX1CGeometry();\r\n geo.init(mesh.geometry);\r\n const instMatrix = new THREE.Matrix4();\r\n const objMatrix = new THREE.Matrix4();\r\n const sphereColor = new THREE.Color();\r\n for (let instanceIndex = 0; instanceIndex < instCount; ++instanceIndex) {\r\n // update colors in geometry\r\n const colorIdx = instanceIndex * color.itemSize;\r\n sphereColor.fromArray(color.array, colorIdx);\r\n geo.setColors(sphereColor);\r\n // add instance to the model\r\n this._getSphereInstanceMatrix(mesh.geometry, instanceIndex, instMatrix);\r\n objMatrix.multiplyMatrices(matrix, instMatrix);\r\n model.addInstance(objMatrix, geo);\r\n }\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Getting all instanced cylinders from given mesh.\r\n * Divide cylinder (add additional vertexes) for prettiness therefore algorithm is a bit complicated\r\n * @param {object} mesh - given mesh with instanced cylinders\r\n */\r\n _collectCylindersInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n color2,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const instCount = mesh.geometry.instanceCount;\r\n const oneCCylinder = new FBX1CGeometry();\r\n oneCCylinder.init(mesh.geometry);\r\n const splittingInfo = this._gatherCylindersColoringInfo(mesh.geometry);\r\n let twoCCylinder = null;\r\n if (splittingInfo.needToSplit > 0) {\r\n twoCCylinder = new FBX2CCylinder();\r\n twoCCylinder.init(mesh.geometry, splittingInfo);\r\n }\r\n const additionalVertsCount = splittingInfo.addPerCylinder * splittingInfo.needToSplit;\r\n const vertCount = position.count;\r\n const indsCount = index.count;\r\n model.init(instCount * vertCount + additionalVertsCount, instCount * indsCount);\r\n const instMatrix = new THREE.Matrix4();\r\n const objMatrix = new THREE.Matrix4();\r\n const colorStart = new THREE.Color();\r\n const colorEnd = new THREE.Color();\r\n let geo = {};\r\n for (let instanceIndex = 0; instanceIndex < instCount; ++instanceIndex) {\r\n // update colors in geometry\r\n const colorIdx = instanceIndex * color.itemSize;\r\n if (splittingInfo.is2Colored[instanceIndex]) {\r\n // .color2 contains starting color, and .color contains starting color (see uber.frag ATTR_COLOR2)\r\n colorStart.fromArray(color2.array, colorIdx);\r\n colorEnd.fromArray(color.array, colorIdx);\r\n if (twoCCylinder) {\r\n twoCCylinder.setColors(colorStart, colorEnd);\r\n geo = twoCCylinder;\r\n }\r\n } else {\r\n // has one color per cylinder\r\n colorStart.fromArray(color.array, colorIdx);\r\n oneCCylinder.setColors(colorStart);\r\n geo = oneCCylinder;\r\n }\r\n // add instance to the model\r\n this._getCylinderInstanceMatrix(mesh.geometry, instanceIndex, instMatrix);\r\n objMatrix.multiplyMatrices(matrix, instMatrix);\r\n model.addInstance(objMatrix, geo);\r\n }\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Adding model to pool of models or extend existing ones\r\n * @param {object} model - model to add\r\n * @param {object} material - material to add\r\n */\r\n _addToPool(model, material) {\r\n const materialIdx = this._checkExistingMaterial(material);\r\n if (materialIdx < 0) { // new model-material pair\r\n this._models.push([model]);\r\n this._materials.push(material);\r\n } else { // add model to existing model-material pair\r\n const models = this._models[materialIdx];\r\n models.push(model);\r\n }\r\n }\r\n\r\n /**\r\n * Checking if given material already was registered in materials pool (no need to create new one)\r\n * @param {object} material - given material\r\n * @returns {number} number of model-material pair\r\n */\r\n _checkExistingMaterial(material) {\r\n return _.findIndex(this._materials, (m) => _.isEqual(m, material));\r\n }\r\n\r\n _gatherCylindersColoringInfo(geo) {\r\n const instCount = geo.instanceCount;\r\n const color1 = geo.attributes.color.array;\r\n const color2 = geo.attributes.color2.array;\r\n const stride = geo.attributes.color.itemSize;\r\n const is2Colored = new Array(instCount);\r\n // analyze color instance attributes\r\n let needToSplit = 0;\r\n let colIdx = 0;\r\n for (let i = 0; i < instCount; i++, colIdx += stride) {\r\n const differs = (Math.abs(color1[colIdx] - color2[colIdx]) > 0.0000001) // compare ending colors\r\n || (Math.abs(color1[colIdx + 1] - color2[colIdx + 1]) > 0.0000001)\r\n || (Math.abs(color1[colIdx + 2] - color2[colIdx + 2]) > 0.0000001);\r\n is2Colored[i] = differs;\r\n needToSplit += differs; // count number of 2-colored cylinders\r\n }\r\n // calc number of vertices to add into 2-colored\r\n const geoParams = geo.getGeoParams();\r\n const addPerCylinder = geoParams.radialSegments;\r\n return { is2Colored, needToSplit, addPerCylinder };\r\n }\r\n\r\n /**\r\n * Collect instanced models and materials.\r\n * @param {object} mesh - given mesh with instanced something (spheres or cylinders)\r\n */\r\n _collectInstancedGeoInfo(mesh) {\r\n if (mesh.geometry instanceof InstancedSpheresGeometry) {\r\n this._collectSpheresInfo(mesh);\r\n } else if (mesh.geometry instanceof Instanced2CCylindersGeometry) {\r\n this._collectCylindersInfo(mesh);\r\n }\r\n }\r\n\r\n /**\r\n * Collect Material info from given mesh.\r\n * @param {object} mesh - given mesh with material info\r\n * @returns {object} material\r\n */\r\n _collectMaterialInfo(mesh) {\r\n const { uberOptions } = mesh.material;\r\n return ({\r\n diffuse: uberOptions.diffuse.toArray(),\r\n opacity: uberOptions.opacity,\r\n shininess: uberOptions.shininess,\r\n specular: uberOptions.specular.toArray(),\r\n });\r\n }\r\n\r\n _getCylinderInstanceMatrix(geo, instIdx, matrix) {\r\n const matVector1 = geo.attributes.matVector1.array;\r\n const matVector2 = geo.attributes.matVector2.array;\r\n const matVector3 = geo.attributes.matVector3.array;\r\n const idxOffset = instIdx * 4; // used 4 because offset arrays are stored in quads\r\n matrix.set(\r\n matVector1[idxOffset],\r\n matVector1[idxOffset + 1],\r\n matVector1[idxOffset + 2],\r\n matVector1[idxOffset + 3],\r\n matVector2[idxOffset],\r\n matVector2[idxOffset + 1],\r\n matVector2[idxOffset + 2],\r\n matVector2[idxOffset + 3],\r\n matVector3[idxOffset],\r\n matVector3[idxOffset + 1],\r\n matVector3[idxOffset + 2],\r\n matVector3[idxOffset + 3],\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n );\r\n }\r\n\r\n _getSphereInstanceMatrix(geo, instIdx, matrix) {\r\n const { offset } = geo.attributes;\r\n const idx = instIdx * offset.itemSize;\r\n const x = offset.array[idx];\r\n const y = offset.array[idx + 1];\r\n const z = offset.array[idx + 2];\r\n const scale = offset.array[idx + 3];\r\n matrix.set(\r\n scale,\r\n 0,\r\n 0,\r\n x,\r\n 0,\r\n scale,\r\n 0,\r\n y,\r\n 0,\r\n 0,\r\n scale,\r\n z,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n );\r\n }\r\n}\r\n","// Forming default definitions block\r\nconst defaultDefinitions = `\r\nDefinitions: {\r\n Version: 100\r\n Count: 3\r\n ObjectType: \"Model\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Geometry\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Material\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Pose\" {\r\n Count: 1\r\n }\r\n ObjectType: \"GlobalSettings\" {\r\n Count: 1\r\n }\r\n} `;\r\n\r\n// Default model properties\r\nconst defaultProperties = `Properties60: {\r\n Property: \"QuaternionInterpolate\", \"bool\", \"\",0\r\n Property: \"Visibility\", \"Visibility\", \"A\",1\r\n Property: \"Lcl Translation\", \"Lcl Translation\", \"A\",0.000000000000000,0.000000000000000,-1789.238037109375000\r\n Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A\",0.000009334667643,-0.000000000000000,0.000000000000000\r\n Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A\",1.000000000000000,1.000000000000000,1.000000000000000\r\n Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\r\n Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\r\n Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationActive\", \"bool\", \"\",0\r\n Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationMinX\", \"bool\", \"\",0\r\n Property: \"TranslationMinY\", \"bool\", \"\",0\r\n Property: \"TranslationMinZ\", \"bool\", \"\",0\r\n Property: \"TranslationMaxX\", \"bool\", \"\",0\r\n Property: \"TranslationMaxY\", \"bool\", \"\",0\r\n Property: \"TranslationMaxZ\", \"bool\", \"\",0\r\n Property: \"RotationOrder\", \"enum\", \"\",0\r\n Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\r\n Property: \"AxisLen\", \"double\", \"\",10\r\n Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationActive\", \"bool\", \"\",0\r\n Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationMinX\", \"bool\", \"\",0\r\n Property: \"RotationMinY\", \"bool\", \"\",0\r\n Property: \"RotationMinZ\", \"bool\", \"\",0\r\n Property: \"RotationMaxX\", \"bool\", \"\",0\r\n Property: \"RotationMaxY\", \"bool\", \"\",0\r\n Property: \"RotationMaxZ\", \"bool\", \"\",0\r\n Property: \"RotationStiffnessX\", \"double\", \"\",0\r\n Property: \"RotationStiffnessY\", \"double\", \"\",0\r\n Property: \"RotationStiffnessZ\", \"double\", \"\",0\r\n Property: \"MinDampRangeX\", \"double\", \"\",0\r\n Property: \"MinDampRangeY\", \"double\", \"\",0\r\n Property: \"MinDampRangeZ\", \"double\", \"\",0\r\n Property: \"MaxDampRangeX\", \"double\", \"\",0\r\n Property: \"MaxDampRangeY\", \"double\", \"\",0\r\n Property: \"MaxDampRangeZ\", \"double\", \"\",0\r\n Property: \"MinDampStrengthX\", \"double\", \"\",0\r\n Property: \"MinDampStrengthY\", \"double\", \"\",0\r\n Property: \"MinDampStrengthZ\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthX\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthY\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthZ\", \"double\", \"\",0\r\n Property: \"PreferedAngleX\", \"double\", \"\",0\r\n Property: \"PreferedAngleY\", \"double\", \"\",0\r\n Property: \"PreferedAngleZ\", \"double\", \"\",0\r\n Property: \"InheritType\", \"enum\", \"\",0\r\n Property: \"ScalingActive\", \"bool\", \"\",0\r\n Property: \"ScalingMin\", \"Vector3D\", \"\",1,1,1\r\n Property: \"ScalingMax\", \"Vector3D\", \"\",1,1,1\r\n Property: \"ScalingMinX\", \"bool\", \"\",0\r\n Property: \"ScalingMinY\", \"bool\", \"\",0\r\n Property: \"ScalingMinZ\", \"bool\", \"\",0\r\n Property: \"ScalingMaxX\", \"bool\", \"\",0\r\n Property: \"ScalingMaxY\", \"bool\", \"\",0\r\n Property: \"ScalingMaxZ\", \"bool\", \"\",0\r\n Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\r\n Property: \"LookAtProperty\", \"object\", \"\"\r\n Property: \"UpVectorProperty\", \"object\", \"\"\r\n Property: \"Show\", \"bool\", \"\",1\r\n Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\r\n Property: \"DefaultAttributeIndex\", \"int\", \"\",0\r\n Property: \"Color\", \"Color\", \"A+\",0,0,0\r\n Property: \"Size\", \"double\", \"\",100\r\n Property: \"Look\", \"enum\", \"\",1\r\n }`;\r\n\r\n// Default materials layer\r\nconst defaultMaterialLayer = `\r\n LayerElementMaterial: 0 {\r\n Version: 101\r\n Name: \"\"\r\n MappingInformationType: \"AllSame\"\r\n ReferenceInformationType: \"Direct\"\r\n Materials: 0\r\n }`;\r\n\r\n// Default layers block\r\nconst defaultLayerBlock = `\r\n Layer: 0 {\r\n Version: 100\r\n LayerElement: {\r\n Type: \"LayerElementNormal\"\r\n TypedIndex: 0\r\n }\r\n LayerElement: {\r\n Type: \"LayerElementColor\"\r\n TypedIndex: 0\r\n }\r\n LayerElement: {\r\n Type: \"LayerElementMaterial\"\r\n TypedIndex: 0\r\n }\r\n }`;\r\n\r\n/**\r\n * globalSettings info in output file.\r\n */\r\nconst globalSettings = `GlobalSettings: {\r\n Version: 1000\r\n Properties60: {\r\n Property: \"UpAxis\", \"int\", \"\",1\r\n Property: \"UpAxisSign\", \"int\", \"\",1\r\n Property: \"FrontAxis\", \"int\", \"\",2\r\n Property: \"FrontAxisSign\", \"int\", \"\",1\r\n Property: \"CoordAxis\", \"int\", \"\",0\r\n Property: \"CoordAxisSign\", \"int\", \"\",1\r\n Property: \"UnitScaleFactor\", \"double\", \"\",1\r\n }\r\n }`;\r\n\r\nexport default class FBXResult {\r\n constructor() {\r\n this._resultArray = [];\r\n this._info = null;\r\n }\r\n\r\n getResult(info) {\r\n this._info = info;\r\n this._resultArray.push(this._writeHeader());\r\n this._resultArray.push(this._writeDefinitions());\r\n this._resultArray.push(this._writeObjects(info.models, info.materials));\r\n this._resultArray.push(this._writeRelations());\r\n this._resultArray.push(this._writeConnections()); // connections between models and materials)\r\n this._info = null;\r\n return this._resultArray.join('');\r\n }\r\n\r\n /**\r\n * Add FBXHeader info to output file.\r\n * Some fields are really confusing, but it seems that all listed fields are very informative\r\n */\r\n _writeHeader() {\r\n const FBXHeaderVersion = 1003; // 1003 is some number which appears to present in many 6.1 ASCII files\r\n const FBXVersion = 6100; // Mandatory and only supported version\r\n const date = new Date();\r\n const timeStampVersion = 1000;\r\n const creator = `Miew FBX Exporter v${this._info.version}`; // Supposed to be an engine\r\n\r\n return `; FBX 6.1.0 project file\r\n; Created by ${creator} Copyright (c) 2015-2024 EPAM Systems, Inc.\r\n; For support please contact miew@epam.com\r\n; ----------------------------------------------------\r\n\r\nFBXHeaderExtension: {\r\n FBXHeaderVersion: ${FBXHeaderVersion}\r\n FBXVersion: ${FBXVersion}\r\n CreationTimeStamp: {\r\n Version: ${timeStampVersion}\r\n Year: ${date.getFullYear()}\r\n Month: ${date.getMonth() + 1}\r\n Day: ${date.getDate()}\r\n Hour: ${date.getHours()}\r\n Minute: ${date.getMinutes()}\r\n Second: ${date.getSeconds()}\r\n Millisecond: ${date.getMilliseconds()}\r\n }\r\n Creator: \"${creator}\"\r\n OtherFlags: {\r\n FlagPLE: 0\r\n }\r\n}\r\nCreationTime: \"${date}\"\r\nCreator: \"${creator}\"\r\n`;\r\n }\r\n\r\n /**\r\n * Add Definitions info to output file.\r\n * Not exactly sure if this section is template section (as it is in 7.4+) or it should every time be like this\r\n */\r\n _writeDefinitions() {\r\n return `\r\n; Object definitions\r\n;------------------------------------------------------------------\r\n\r\n${defaultDefinitions}\r\n`;\r\n }\r\n\r\n /**\r\n * Adding gathered information about Models to resulting string.\r\n * Reminder - there may be more then 1 model in scene, but we must place materials after ALL models.\r\n * @returns {string} string containing all models (vertices, indices, colors, normals etc)\r\n */\r\n _models() {\r\n const modelVersion = 232;\r\n let allModels = '';\r\n const { models } = this._info;\r\n for (let i = 0; i < models.length; ++i) {\r\n const model = models[i];\r\n const vertCount = model.verticesCount;\r\n allModels += `\r\n Model: \"Model::${this._info.name}_${i}\", \"Mesh\" {\r\n Version: ${modelVersion}\r\n ${defaultProperties}\r\n ${this._verticesIndices(model.positions, model.indices)}\r\n ${this._normalLayer(model.normals)}\r\n ${this._colorLayer(model.colors, vertCount)}\r\n ${defaultMaterialLayer}\r\n ${defaultLayerBlock}\r\n }`;\r\n }\r\n return allModels;\r\n }\r\n\r\n /**\r\n * Add Material info to result\r\n */\r\n _materials() {\r\n const materialVersion = 102;\r\n let allMaterials = '';\r\n const { materials } = this._info;\r\n for (let i = 0; i < materials.length; ++i) {\r\n const material = materials[i];\r\n allMaterials += `\r\n Material: \"Material::${this._info.name}_${i}_default\", \"\" {\r\n Version: ${materialVersion}\r\n ShadingModel: \"lambert\"\r\n MultiLayer: 0\r\n ${this._materialProperties(material)}\r\n }`;\r\n }\r\n return allMaterials;\r\n }\r\n\r\n /**\r\n * Add Objects info to output file.\r\n */\r\n _writeObjects() {\r\n return `\r\n; Object properties\r\n;------------------------------------------------------------------\r\n\r\nObjects: {\r\n ${this._models()}\r\n ${this._materials()}\r\n ${globalSettings}\r\n}\r\n`;\r\n }\r\n\r\n /**\r\n * Add Relations info to output file.\r\n */\r\n _writeRelations() {\r\n let modelsList = '';\r\n for (let i = 0; i < this._info.models.length; ++i) {\r\n modelsList += `\r\n Model: \"Model::${this._info.name}_${i}\", \"Mesh\" {\r\n }`;\r\n }\r\n let materialList = '';\r\n for (let i = 0; i < this._info.materials.length; ++i) {\r\n materialList += `\r\n Material: \"Material::${this._info.name}_${i}_default\", \"\" {\r\n }`;\r\n }\r\n\r\n return `\r\n; Object relations\r\n;------------------------------------------------------------------\r\n\r\nRelations: {\r\n ${modelsList}\r\n Model: \"Model::Producer Perspective\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Top\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Bottom\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Front\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Back\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Right\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Left\", \"Camera\" {\r\n }\r\n Model: \"Model::Camera Switcher\", \"CameraSwitcher\" {\r\n }\r\n ${materialList}\r\n}`;\r\n }\r\n\r\n /**\r\n * Add Connections info to output file.\r\n */\r\n _writeConnections() {\r\n let modelsList = '';\r\n const { name } = this._info;\r\n for (let i = 0; i < this._info.models.length; ++i) {\r\n modelsList += `\r\n Connect: \"OO\", \"Model::${name}_${i}\", \"Model::Scene\"`;\r\n }\r\n\r\n let materialList = '';\r\n for (let i = 0; i < this._info.materials.length; ++i) {\r\n materialList += `\r\n Connect: \"OO\", \"Material::${name}_${i}_default\", \"Model::${name}_${i}\"`;\r\n }\r\n\r\n return `\r\n; Object connections\r\n;------------------------------------------------------------------\r\n\r\nConnections: {\r\n ${modelsList}\r\n ${materialList}\r\n}`;\r\n }\r\n\r\n /**\r\n * Write float array to string with limited precision\r\n * @param {Float32Array} array - array to be fixed\r\n * @returns {String} String with fixed floats\r\n */\r\n _floatArrayToString(array) {\r\n const str = [];\r\n for (let i = 0; i < array.length; ++i) {\r\n str[i] = array[i].toFixed(6);\r\n }\r\n return str.join(',');\r\n }\r\n\r\n /**\r\n * Adding color layer to resulting file\r\n * @param {Float32Array} colorArray attribute\r\n * @param {number} vertCount - number of vertices in the model\r\n * @returns {string} color layer info\r\n */\r\n _colorLayer(colorArray, vertCount) {\r\n const layerElementColorNumber = 0;\r\n const layerElementColorVersion = 101;\r\n const layerElementColorName = '';\r\n const colorsStr = this._floatArrayToString(colorArray);\r\n // Mapping Information type and Reference Information type are mandatory for our Miew! Must not be changed\r\n // As said [..Array(...)] - fastest and easiest way to produce [0, 1, .....] array\r\n const colorIndices = [...Array(vertCount).keys()];\r\n return `\r\n LayerElementColor: ${layerElementColorNumber} {\r\n Version: ${layerElementColorVersion}\r\n Name: \"${layerElementColorName}\"\r\n MappingInformationType: \"ByVertice\"\r\n ReferenceInformationType: \"Direct\"\r\n Colors: ${colorsStr}\r\n ColorIndex: ${colorIndices}\r\n }`;\r\n }\r\n\r\n /**\r\n * Adding normal layer to resulting file\r\n * @param {Float32Array} normalArray attribute\r\n * @returns {string} normal layer info\r\n */\r\n _normalLayer(normalArray) {\r\n const layerElementNormalNumber = 0;\r\n const layerElementNormalVersion = 101;\r\n const layerElementNormalName = '';\r\n const normalsStr = this._floatArrayToString(normalArray);\r\n // Mapping Information type and Reference Information type are mandatory for our Miew! Must not be changed\r\n return `\r\n LayerElementNormal: ${layerElementNormalNumber} {\r\n Version: ${layerElementNormalVersion}\r\n Name: \"${layerElementNormalName}\"\r\n MappingInformationType: \"ByVertice\"\r\n ReferenceInformationType: \"Direct\"\r\n Normals: ${normalsStr}\r\n }`;\r\n }\r\n\r\n /**\r\n * Adding vertices and indices to resulting string\r\n * @return {string} resulting string in FBX notation\r\n */\r\n _verticesIndices(positions, indices) {\r\n const multiLayer = 0;\r\n const multiTake = 1;\r\n const shading = 'Y';\r\n const culling = 'CullingOff';\r\n const geometryVersion = 124;\r\n const vertStr = this._floatArrayToString(positions);\r\n /* About _correctArrayNotation: Float32Arrays will contains only Float32 numbers, which implies that it will be floating points with 17 numbers after point.\r\n * We cannot (and it's logically incorrect) save all this information, so we convert this Float32Array into Array-like object with numbers with only 6 numbers after point\r\n * Reminder - this is big memory loss (as we must save at one moment two arrays with similar information) */\r\n return `MultiLayer: ${multiLayer}\r\n MultiTake: ${multiTake}\r\n Shading: ${shading}\r\n Culling: \"${culling}\"\r\n Vertices: ${vertStr}\r\n PolygonVertexIndex: ${indices}\r\n GeometryVersion: ${geometryVersion}`;\r\n }\r\n\r\n /**\r\n * Forming material properties block.\r\n * @param {Object} material - given material of model\r\n * @returns {String} material properties string\r\n */\r\n _materialProperties(material) {\r\n return `Properties60: {\r\n Property: \"ShadingModel\", \"KString\", \"\", \"Lambert\"\r\n Property: \"MultiLayer\", \"bool\", \"\",0\r\n Property: \"EmissiveColor\", \"ColorRGB\", \"\",0,0,0\r\n Property: \"EmissiveFactor\", \"double\", \"\",0.0000\r\n Property: \"AmbientColor\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"AmbientFactor\", \"double\", \"\",0.0000\r\n Property: \"DiffuseColor\", \"ColorRGB\", \"\",${material.diffuse}\r\n Property: \"DiffuseFactor\", \"double\", \"\",1.0000\r\n Property: \"Bump\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TransparentColor\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"TransparencyFactor\", \"double\", \"\",0.0000\r\n Property: \"SpecularColor\", \"ColorRGB\", \"\",${material.specular}\r\n Property: \"SpecularFactor\", \"double\", \"\",1.0000\r\n Property: \"ShininessExponent\", \"double\", \"\",${material.shininess}\r\n Property: \"ReflectionColor\", \"ColorRGB\", \"\",0,0,0\r\n Property: \"ReflectionFactor\", \"double\", \"\",1\r\n Property: \"Ambient\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"Diffuse\", \"ColorRGB\", \"\",${material.diffuse}\r\n Property: \"Specular\", \"ColorRGB\", \"\",${material.specular}\r\n Property: \"Shininess\", \"double\", \"\",${material.shininess}\r\n Property: \"Opacity\", \"double\", \"\",${material.opacity}\r\n Property: \"Reflectivity\", \"double\", \"\",0\r\n }`;\r\n }\r\n}\r\n","import Exporter from './Exporter';\r\nimport FBXInfoExtractor from './fbx/FBXInfoExtractor';\r\nimport FBXResult from './fbx/FBXResult';\r\nimport ComplexVisual from '../../ComplexVisual';\r\n\r\nexport default class FBXExporter extends Exporter {\r\n constructor(source, options) {\r\n super(source, options);\r\n // Data\r\n this._data = source;\r\n this._version = options.miewVersion || '0.0-UNSPECIFIED';\r\n this._extractor = new FBXInfoExtractor();\r\n }\r\n\r\n /**\r\n * Entry point to exporter.\r\n */\r\n exportSync() {\r\n // Creating mandatory blocks\r\n const result = new FBXResult();\r\n if (!this._source) {\r\n return this._result;\r\n }\r\n\r\n const info = this._extractor.process(this._data);\r\n info.version = this._version;\r\n this._result = result.getResult(info);\r\n return this._result;\r\n }\r\n}\r\n\r\nFBXExporter.formats = ['fbx'];\r\nFBXExporter.SourceClass = ComplexVisual;\r\n","import ExporterList from './exporters/ExporterList';\r\n\r\nimport PDBExporter from './exporters/PDBExporter';\r\nimport FBXExporter from './exporters/FBXExporter';\r\n\r\nexport default new ExporterList([\r\n PDBExporter,\r\n FBXExporter,\r\n]);\r\n","import loaders from './loaders';\r\nimport parsers from './parsers';\r\nimport exporters from './exporters';\r\n\r\nexport default {\r\n loaders,\r\n parsers,\r\n exporters,\r\n};\r\n","/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nimport * as THREE from 'three';\r\nimport CSS2DObject from './CSS2DObject';\r\n\r\nconst tempColor = new THREE.Color();\r\n\r\nclass CSS2DRenderer {\r\n constructor() {\r\n this._width = 0;\r\n this._height = 0;\r\n this._widthHalf = 0;\r\n this._heightHalf = 0;\r\n\r\n this._vector = new THREE.Vector3();\r\n this._viewMatrix = new THREE.Matrix4();\r\n this._projectionMatrix = new THREE.Matrix4();\r\n\r\n this._domElement = document.createElement('div');\r\n this._domElement.style.overflow = 'hidden';\r\n this._domElement.style.position = 'absolute';\r\n this._domElement.style.top = '0';\r\n this._domElement.style.zIndex = '0'; // start a new Stacking Context to enclose all z-ordered children\r\n this._domElement.style.pointerEvents = 'none';\r\n }\r\n\r\n getElement() {\r\n return this._domElement;\r\n }\r\n\r\n reset() {\r\n const myNode = this.getElement();\r\n while (myNode.firstChild) {\r\n myNode.removeChild(myNode.firstChild);\r\n }\r\n }\r\n\r\n setSize(width, height) {\r\n this._width = width;\r\n this._height = height;\r\n\r\n this._widthHalf = this._width / 2;\r\n this._heightHalf = this._height / 2;\r\n\r\n this._domElement.style.width = `${width}px`;\r\n this._domElement.style.height = `${height}px`;\r\n }\r\n\r\n _renderObject(object, camera, scene) {\r\n function lerpColorAsHex(a, b, t) {\r\n tempColor.setHex(a);\r\n tempColor.lerp(b, t);\r\n return `#${tempColor.getHexString()}`;\r\n }\r\n\r\n function colorAsHex(a) {\r\n tempColor.setHex(a);\r\n return `#${tempColor.getHexString()}`;\r\n }\r\n\r\n if (object instanceof CSS2DObject) {\r\n this._vector.setFromMatrixPosition(object.matrixWorld);\r\n\r\n if (object.userData !== undefined && object.userData.offset !== undefined) {\r\n const localOffset = new THREE.Vector3(object.userData.offset.x, object.userData.offset.y, 0);\r\n this._vector.add(localOffset.multiplyScalar(object.matrixWorld.getMaxScaleOnAxis()));\r\n }\r\n\r\n this._vector.applyMatrix4(this._viewMatrix);\r\n\r\n const visibility = this._vector.z > -camera.near ? 'hidden' : 'visible';\r\n const zIndex = 10000 * (camera.far - (-this._vector.z)) / (camera.far - camera.near);\r\n\r\n const element = object.getElement();\r\n if (typeof scene.fog === 'undefined') {\r\n element.style.color = colorAsHex(object.userData.color);\r\n if (object.userData.background !== 'transparent') {\r\n element.style.background = colorAsHex(object.userData.background);\r\n }\r\n } else {\r\n const fogFactor = THREE.MathUtils.smoothstep(-this._vector.z, scene.fog.near, scene.fog.far);\r\n element.style.color = lerpColorAsHex(object.userData.color, scene.fog.color, fogFactor);\r\n if (object.userData.background !== 'transparent') {\r\n element.style.background = lerpColorAsHex(object.userData.background, scene.fog.color, fogFactor);\r\n }\r\n }\r\n\r\n this._vector.applyMatrix4(this._projectionMatrix);\r\n\r\n const style = `${object.userData !== {} ? object.userData.translation : 'translate(-50%, -50%) '\r\n }translate(${this._vector.x * this._widthHalf + this._widthHalf}px,${\r\n -this._vector.y * this._heightHalf + this._heightHalf}px)`;\r\n element.style.visibility = visibility;\r\n element.style.WebkitTransform = style;\r\n element.style.MozTransform = style;\r\n element.style.oTransform = style;\r\n element.style.transform = style;\r\n element.style.zIndex = Number(zIndex).toFixed(0);\r\n\r\n if (element.parentNode !== this._domElement) {\r\n this._domElement.appendChild(element);\r\n }\r\n }\r\n\r\n for (let i = 0, l = object.children.length; i < l; i++) {\r\n this._renderObject(object.children[i], camera, scene);\r\n }\r\n }\r\n\r\n render(scene, camera) {\r\n scene.updateMatrixWorld();\r\n\r\n if (camera.parent === null) {\r\n camera.updateMatrixWorld();\r\n }\r\n\r\n camera.matrixWorldInverse.copy(camera.matrixWorld).invert();\r\n\r\n this._viewMatrix.copy(camera.matrixWorldInverse);\r\n this._projectionMatrix.copy(camera.projectionMatrix);\r\n\r\n this._renderObject(scene, camera, scene);\r\n }\r\n}\r\nexport default CSS2DRenderer;\r\n","export default function getTopWindow() {\r\n // intercept the exception if we have cross-origin iframe\r\n try {\r\n if (window.top.location.href !== undefined) {\r\n return window.top;\r\n }\r\n } catch (e) {\r\n // provide fallback\r\n }\r\n return window;\r\n}\r\n","import * as THREE from 'three';\r\nimport Timer from '../Timer';\r\nimport settings from '../settings';\r\nimport EventDispatcher from '../utils/EventDispatcher';\r\nimport getTopWindow from '../utils/getTopWindow';\r\n\r\nconst VK_LEFT = 37;\r\nconst VK_UP = 38;\r\nconst VK_RIGHT = 39;\r\nconst VK_DOWN = 40;\r\n\r\nconst STATE = {\r\n NONE: -1, ROTATE: 0, TRANSLATE: 1, SCALE: 2, TRANSLATE_PIVOT: 3,\r\n};\r\n\r\n// pausing for this amount of time before releasing mouse button prevents inertial rotation (seconds)\r\nconst FULL_STOP_THRESHOLD = 0.1;\r\n\r\nconst quaternion = new THREE.Quaternion();\r\nconst matrix4 = new THREE.Matrix4();\r\n\r\n// pivot -- local offset of the rotation pivot point\r\nfunction ObjectHandler(objects, camera, pivot, options) {\r\n this.objects = objects;\r\n [this.object] = objects;\r\n this.camera = camera;\r\n this.pivot = pivot;\r\n this.axis = new THREE.Vector3(0, 0, 1);\r\n this.options = options;\r\n\r\n this.lastRotation = {\r\n axis: new THREE.Vector3(),\r\n angle: 0.0,\r\n };\r\n}\r\n\r\nObjectHandler.prototype._rotate = (function () {\r\n const p = new THREE.Vector3();\r\n const q = new THREE.Quaternion();\r\n const s = new THREE.Vector3();\r\n\r\n const m = new THREE.Matrix4();\r\n\r\n return function (quat) {\r\n const zeroPivot = (this.pivot.x === 0.0 && this.pivot.y === 0.0 && this.pivot.z === 0.0);\r\n\r\n m.copy(this.object.matrix);\r\n\r\n if (zeroPivot) {\r\n m.multiply(matrix4.makeRotationFromQuaternion(quat));\r\n } else {\r\n m.multiply(matrix4.makeTranslation(this.pivot.x, this.pivot.y, this.pivot.z));\r\n m.multiply(matrix4.makeRotationFromQuaternion(quat));\r\n m.multiply(matrix4.makeTranslation(-this.pivot.x, -this.pivot.y, -this.pivot.z));\r\n }\r\n\r\n m.decompose(p, q, s);\r\n\r\n // update objects\r\n if (!zeroPivot) {\r\n for (let i = 0; i < this.objects.length; ++i) {\r\n this.objects[i].position.copy(p);\r\n }\r\n }\r\n\r\n for (let j = 0; j < this.objects.length; ++j) {\r\n this.objects[j].quaternion.copy(q);\r\n this.objects[j].updateMatrix();\r\n }\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.setObjects = function (objects) {\r\n this.objects = objects;\r\n [this.object] = objects;\r\n};\r\n\r\nObjectHandler.prototype.rotate = (function () {\r\n const rot = {\r\n axis: new THREE.Vector3(),\r\n angle: 0.0,\r\n };\r\n\r\n return function (quat, mousePrevPos, mouseCurPos, aboutAxis) {\r\n this.mouse2rotation(rot, mousePrevPos, mouseCurPos, aboutAxis);\r\n quat.setFromAxisAngle(rot.axis, rot.angle);\r\n\r\n if (rot.angle) {\r\n this._rotate(quat);\r\n }\r\n\r\n this.lastRotation = rot;\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.translate = (function () {\r\n const dir = new THREE.Vector3();\r\n const pivot = new THREE.Vector3();\r\n\r\n return function (delta) {\r\n // reverse-project viewport movement to view coords (compensate for screen aspect ratio)\r\n dir.set(\r\n delta.x / this.camera.projectionMatrix.elements[0],\r\n delta.y / this.camera.projectionMatrix.elements[5],\r\n 0,\r\n );\r\n let dist = dir.length();\r\n dir.normalize();\r\n\r\n // transform movement direction to object local coords\r\n dir.transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n // visible translate distance shouldn't depend on camera-to-object distance\r\n pivot.copy(this.pivot);\r\n this.object.localToWorld(pivot);\r\n dist *= Math.abs(pivot.z - this.camera.position.z);\r\n\r\n // visible translate distance shouldn't depend on object scale\r\n dist /= this.object.matrixWorld.getMaxScaleOnAxis();\r\n\r\n // all objects are translated similar to principal object\r\n // (we assume they all have identical pivot and scale)\r\n for (let i = 0; i < this.objects.length; ++i) {\r\n this.objects[i].translateOnAxis(dir, dist);\r\n }\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.update = (function () {\r\n const axis = new THREE.Vector3();\r\n\r\n return function (timeSinceLastUpdate, timeSinceMove) {\r\n if (settings.now.autoRotation !== 0.0) {\r\n // auto-rotation with constant speed\r\n\r\n // if rotation axis is fixed or hasn't been defined yet\r\n if (settings.now.autoRotationAxisFixed || this.lastRotation.axis.length() === 0.0) {\r\n // use Y-axis (transformed to local object coords)\r\n axis.set(0, 1, 0).transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n } else {\r\n // use axis defined by last user rotation\r\n axis.copy(this.lastRotation.axis);\r\n }\r\n\r\n this._rotate(quaternion.setFromAxisAngle(axis, settings.now.autoRotation * timeSinceLastUpdate));\r\n return true;\r\n }\r\n\r\n if (this.options.intertia && this.lastRotation.angle) {\r\n // inertial object rotation\r\n const angle = this.lastRotation.angle * ((1.0 - this.options.dynamicDampingFactor) ** (40.0 * timeSinceMove));\r\n\r\n if (Math.abs(angle) <= this.options.intertiaThreshold) {\r\n this.lastRotation.angle = 0.0;\r\n } else {\r\n this._rotate(quaternion.setFromAxisAngle(this.lastRotation.axis, angle));\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.stop = function () {\r\n this.lastRotation.angle = 0.0;\r\n};\r\n\r\n// calculate (axis, angle) pair from mouse/touch movement\r\nObjectHandler.prototype.mouse2rotation = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n const eye = new THREE.Vector3();\r\n const eyeDirection = new THREE.Vector3();\r\n\r\n const cameraUpDirection = new THREE.Vector3();\r\n const cameraSidewaysDirection = new THREE.Vector3();\r\n\r\n const moveDirection = new THREE.Vector3();\r\n\r\n const mouseDelta = new THREE.Vector2();\r\n\r\n return function (rot, mousePrev, mouseCur, aboutAxis) {\r\n if (aboutAxis) {\r\n rot.axis.copy(this.axis);\r\n rot.angle = this.options.axisRotateFactor * (mouseCur.y - mousePrev.y);\r\n\r\n /* cool method that allows rotation around Z axis to be \"tied\" to mouse cursor\r\n\r\n res.axis.copy(this.axis);\r\n\r\n var pivot = this.pivot.clone();\r\n this.object.localToWorld(pivot);\r\n pivot.project(this.camera);\r\n\r\n var v1 = new THREE.Vector3(mousePrev.x, mousePrev.y, this.camera.position.z);\r\n v1.sub(pivot);\r\n var v2 = new THREE.Vector3(mouseCur.x, mouseCur.y, this.camera.position.z);\r\n v2.sub(pivot);\r\n\r\n v1.sub(res.axis.clone().multiplyScalar(v1.dot(res.axis)));\r\n v2.sub(res.axis.clone().multiplyScalar(v2.dot(res.axis)));\r\n\r\n var abs = v1.length() * v2.length();\r\n if (abs > 0) {\r\n res.angle = res.axis.dot(v1.cross(v2)) / abs;\r\n }\r\n */\r\n } else {\r\n mouseDelta.subVectors(mouseCur, mousePrev);\r\n const angle = mouseDelta.length();\r\n if (angle === 0.0) {\r\n return;\r\n }\r\n\r\n center.copy(this.pivot);\r\n this.object.localToWorld(center);\r\n eye.subVectors(this.camera.position, center);\r\n eyeDirection.copy(eye).normalize();\r\n\r\n cameraUpDirection.copy(this.camera.up).normalize();\r\n cameraSidewaysDirection.crossVectors(cameraUpDirection, eyeDirection).normalize();\r\n\r\n cameraUpDirection.setLength(mouseDelta.y);\r\n cameraSidewaysDirection.setLength(mouseDelta.x);\r\n\r\n moveDirection.copy(cameraUpDirection.add(cameraSidewaysDirection));\r\n\r\n rot.axis.crossVectors(moveDirection, eye);\r\n\r\n rot.angle = -angle * this.options.rotateFactor;\r\n }\r\n\r\n rot.axis.transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n // make sure angle is always positive (thus 'axis' defines both axis and direction of rotation)\r\n if (rot.angle < 0.0) {\r\n rot.axis.negate();\r\n rot.angle = -rot.angle;\r\n }\r\n };\r\n}());\r\n\r\nfunction ObjectControls(object, objectPivot, camera, domElement, getAltObj) {\r\n EventDispatcher.call(this);\r\n const self = this;\r\n\r\n this.object = object;\r\n this.objectPivot = objectPivot;\r\n this.camera = camera;\r\n this.domElement = (typeof domElement !== 'undefined') ? domElement : document;\r\n this.getAltObj = getAltObj;\r\n\r\n // API\r\n\r\n this.enabled = true;\r\n this.hotkeysEnabled = true;\r\n\r\n this.screen = {\r\n left: 0, top: 0, width: 0, height: 0,\r\n };\r\n\r\n this.options = {\r\n rotateFactor: Math.PI, // full screen slide (along short side) would roughly mean 180 deg. rotation\r\n axisRotateFactor: 4 * Math.PI, // full screen slide (along short side) would roughly mean 720 deg. rotation\r\n intertia: true,\r\n dynamicDampingFactor: 0.1,\r\n intertiaThreshold: 1e-3,\r\n };\r\n\r\n // internals\r\n\r\n this._state = STATE.NONE;\r\n\r\n this._mousePrevPos = new THREE.Vector2();\r\n this._mouseCurPos = new THREE.Vector2();\r\n\r\n this._mainObj = new ObjectHandler([this.object], this.camera, new THREE.Vector3(0, 0, 0), this.options);\r\n this._altObj = new ObjectHandler([this.object], this.camera, new THREE.Vector3(0, 0, 0), this.options);\r\n this._affectedObj = this._mainObj;\r\n this._isAltObjFreeRotationAllowed = true;\r\n this._isTranslationAllowed = true;\r\n this._isKeysTranslatingObj = false;\r\n\r\n this._pressedKeys = [];\r\n\r\n this._clock = new Timer();\r\n this._clock.start();\r\n this._lastUpdateTime = this._clock.getElapsedTime();\r\n\r\n // events\r\n this._listeners = [\r\n {\r\n obj: self.domElement,\r\n type: 'mousedown',\r\n handler(e) {\r\n self.mousedown(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseup',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousemove',\r\n handler(e) {\r\n self.mousemove(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousewheel',\r\n handler(e) {\r\n self.mousewheel(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'DOMMouseScroll',\r\n handler(e) {\r\n self.mousewheel(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseout',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchstart',\r\n handler(e) {\r\n self.touchstartend(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchend',\r\n handler(e) {\r\n self.touchstartend(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchmove',\r\n handler(e) {\r\n self.touchmove(e);\r\n },\r\n },\r\n {\r\n obj: self.getKeyBindObject(),\r\n type: 'keydown',\r\n handler(e) {\r\n self.keydownup(e);\r\n },\r\n },\r\n {\r\n obj: self.getKeyBindObject(),\r\n type: 'keyup',\r\n handler(e) {\r\n self.keydownup(e);\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'resize',\r\n handler() {\r\n self.handleResize();\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'blur',\r\n handler() {\r\n self.resetKeys();\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'contextmenu',\r\n handler(e) {\r\n self.contextmenu(e);\r\n },\r\n }];\r\n\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.addEventListener(l.type, l.handler);\r\n }\r\n\r\n this.handleResize();\r\n\r\n this.resetKeys();\r\n\r\n // force an update at start\r\n this.update();\r\n}\r\n\r\n// methods\r\n\r\nObjectControls.prototype = Object.create(EventDispatcher.prototype);\r\nObjectControls.prototype.constructor = ObjectControls;\r\n\r\nObjectControls.prototype.resetKeys = function () {\r\n this._pressedKeys[VK_LEFT] = false;\r\n this._pressedKeys[VK_UP] = false;\r\n this._pressedKeys[VK_RIGHT] = false;\r\n this._pressedKeys[VK_DOWN] = false;\r\n};\r\n\r\nObjectControls.prototype.contextmenu = function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n};\r\n\r\nObjectControls.prototype.handleResize = function () {\r\n if (this.domElement === document) {\r\n this.screen.left = 0;\r\n this.screen.top = 0;\r\n this.screen.width = window.innerWidth;\r\n this.screen.height = window.innerHeight;\r\n } else {\r\n const box = this.domElement.getBoundingClientRect();\r\n // adjustments come from similar code in the jquery offset() function\r\n const d = this.domElement.ownerDocument.documentElement;\r\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\r\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\r\n this.screen.width = box.width;\r\n this.screen.height = box.height;\r\n }\r\n};\r\n\r\nObjectControls.prototype.enable = function (enable) {\r\n this.enabled = enable;\r\n};\r\n\r\nObjectControls.prototype.enableHotkeys = function (enable) {\r\n this.hotkeysEnabled = enable;\r\n};\r\n\r\nObjectControls.prototype.allowTranslation = function (allow) {\r\n this._isTranslationAllowed = allow;\r\n};\r\n\r\nObjectControls.prototype.allowAltObjFreeRotation = function (allow) {\r\n this._isAltObjFreeRotationAllowed = allow;\r\n};\r\n\r\nObjectControls.prototype.keysTranslateObj = function (on) {\r\n this._isKeysTranslatingObj = on;\r\n};\r\n\r\nObjectControls.prototype.isEditingAltObj = function () {\r\n return ((this._state === STATE.ROTATE) || (this._state === STATE.TRANSLATE))\r\n && (this._affectedObj === this._altObj);\r\n};\r\n\r\n// convert page coords of mouse/touch to uniform coords with smaller side being [-0.5, 0.5]\r\n// (uniform coords keep direct proportion with screen distance travelled by mouse regardless of screen aspect ratio)\r\nObjectControls.prototype.convertMouseToOnCircle = function (coords, pageX, pageY) {\r\n const screenSize = Math.min(this.screen.width, this.screen.height);\r\n\r\n if (screenSize === 0) {\r\n coords.set(0, 0);\r\n return;\r\n }\r\n\r\n coords.set(\r\n ((pageX - this.screen.width * 0.5 - this.screen.left) / screenSize),\r\n ((0.5 * this.screen.height + this.screen.top - pageY) / screenSize),\r\n );\r\n};\r\n\r\n// convert page coords of mouse/touch to viewport coords with both sides being [-1, 1]\r\n// (those are non-uniform coords affected by screen aspect ratio)\r\nObjectControls.prototype.convertMouseToViewport = function (coords, pageX, pageY) {\r\n if (this.screen.width === 0 || this.screen.height === 0) {\r\n coords.set(0, 0);\r\n return;\r\n }\r\n\r\n coords.set(\r\n (2.0 * (pageX - this.screen.width * 0.5 - this.screen.left) / this.screen.width),\r\n (2.0 * (0.5 * this.screen.height + this.screen.top - pageY) / this.screen.height),\r\n );\r\n};\r\n\r\nObjectControls.prototype.stop = function () {\r\n this._mainObj.stop();\r\n this._altObj.stop();\r\n};\r\n\r\n// rotate object based on latest mouse/touch movement\r\nObjectControls.prototype.rotateByMouse = (function () {\r\n const quat = new THREE.Quaternion();\r\n\r\n return function (aboutZAxis) {\r\n this._affectedObj.rotate(quat, this._mousePrevPos, this._mouseCurPos, aboutZAxis);\r\n this.dispatchEvent({ type: 'change', action: 'rotate', quaternion: quat });\r\n };\r\n}());\r\n\r\n// rotate object by specified quaternion\r\nObjectControls.prototype.rotate = function (quat) {\r\n this.object.quaternion.multiply(quat);\r\n this.dispatchEvent({ type: 'change', action: 'rotate', quaternion: quat });\r\n};\r\n\r\n// get object's orientation\r\nObjectControls.prototype.getOrientation = function () {\r\n return this.object.quaternion;\r\n};\r\n\r\n// set object's orientation\r\nObjectControls.prototype.setOrientation = function (quat) {\r\n this.object.quaternion.copy(quat);\r\n};\r\n\r\n// translate object based on latest mouse/touch movement\r\nObjectControls.prototype.translate = (function () {\r\n const delta = new THREE.Vector2();\r\n return function () {\r\n delta.subVectors(this._mouseCurPos, this._mousePrevPos);\r\n this._affectedObj.translate(delta);\r\n this.dispatchEvent({ type: 'change', action: 'translate' });\r\n };\r\n}());\r\n\r\n// get object scale\r\nObjectControls.prototype.getScale = function () {\r\n return this.object.scale.x;\r\n};\r\n\r\n// set uniform object scale\r\nObjectControls.prototype.setScale = function (scale) {\r\n this.object.scale.set(scale, scale, scale);\r\n};\r\n\r\n// scale object by factor (factor should be greater than zero)\r\nObjectControls.prototype.scale = function (factor) {\r\n if (factor <= 0) {\r\n return;\r\n }\r\n this.setScale(this.object.scale.x * factor);\r\n this.dispatchEvent({ type: 'change', action: 'zoom', factor });\r\n};\r\n\r\nObjectControls.prototype.update = (function () {\r\n const shift = new THREE.Vector2();\r\n\r\n return function () {\r\n const curTime = this._clock.getElapsedTime();\r\n const timeSinceLastUpdate = curTime - this._lastUpdateTime;\r\n\r\n // update object handler\r\n if (this._state === STATE.NONE) {\r\n const timeSinceMove = curTime - this._lastMouseMoveTime;\r\n if (this._mainObj.update(timeSinceLastUpdate, timeSinceMove)\r\n || this._altObj.update(timeSinceLastUpdate, timeSinceMove)) {\r\n this.dispatchEvent({ type: 'change', action: 'auto' });\r\n }\r\n }\r\n\r\n // apply arrow keys\r\n if (this._isKeysTranslatingObj) {\r\n const speedX = Number(this._pressedKeys[VK_RIGHT]) - Number(this._pressedKeys[VK_LEFT]);\r\n const speedY = Number(this._pressedKeys[VK_UP]) - Number(this._pressedKeys[VK_DOWN]);\r\n if (speedX !== 0.0 || speedY !== 0.0) {\r\n const delta = timeSinceLastUpdate;\r\n\r\n // update object translation\r\n const altObj = this.getAltObj();\r\n if (altObj.objects.length > 0) {\r\n this._altObj.setObjects(altObj.objects);\r\n this._altObj.pivot = altObj.pivot;\r\n\r\n if ('axis' in altObj) {\r\n this._altObj.axis = altObj.axis.clone();\r\n } else {\r\n this._altObj.axis.set(0, 0, 1);\r\n }\r\n\r\n shift.set(delta * speedX, delta * speedY);\r\n this._altObj.translate(shift);\r\n this.dispatchEvent({ type: 'change', action: 'translate' });\r\n }\r\n }\r\n }\r\n\r\n this._lastUpdateTime = curTime;\r\n };\r\n}());\r\n\r\nObjectControls.prototype.reset = function () {\r\n this._state = STATE.NONE;\r\n\r\n this.object.quaternion.copy(quaternion.set(0, 0, 0, 1));\r\n};\r\n\r\n// listeners\r\n\r\nObjectControls.prototype.mousedown = function (event) {\r\n if (this.enabled === false || this._state !== STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this._state === STATE.NONE) {\r\n if (event.button === 0) {\r\n this._affectedObj.stop(); // can edit only one object at a time\r\n\r\n let workWithAltObj = false;\r\n\r\n if (event.altKey) {\r\n const altObj = this.getAltObj();\r\n workWithAltObj = (altObj.objects.length > 0);\r\n if (workWithAltObj) {\r\n this._altObj.setObjects(altObj.objects);\r\n this._altObj.pivot = altObj.pivot;\r\n\r\n if ('axis' in altObj) {\r\n this._altObj.axis = altObj.axis.clone();\r\n } else {\r\n this._altObj.axis.set(0, 0, 1);\r\n }\r\n }\r\n }\r\n\r\n this._affectedObj = workWithAltObj ? this._altObj : this._mainObj;\r\n\r\n this._state = (workWithAltObj && event.ctrlKey && this._isTranslationAllowed) ? STATE.TRANSLATE : STATE.ROTATE;\r\n } else if (event.button === 2) {\r\n this._state = STATE.TRANSLATE_PIVOT;\r\n }\r\n }\r\n\r\n if (this._state === STATE.ROTATE) {\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.pageX, event.pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n }\r\n\r\n if (this._state === STATE.TRANSLATE || this._state === STATE.TRANSLATE_PIVOT) {\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n }\r\n};\r\n\r\nObjectControls.prototype.mousemove = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (this._state) {\r\n case STATE.ROTATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.pageX, event.pageY);\r\n this.rotateByMouse((event.altKey && !this._isAltObjFreeRotationAllowed) || event.shiftKey);\r\n this._lastMouseMoveTime = this._clock.getElapsedTime();\r\n break;\r\n\r\n case STATE.TRANSLATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this.translate();\r\n break;\r\n\r\n case STATE.TRANSLATE_PIVOT:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this.translatePivotByMouse();\r\n break;\r\n\r\n default: break;\r\n }\r\n};\r\n\r\nObjectControls.prototype.mousewheel = function (event) {\r\n if (this.enabled === false || !settings.now.zooming || this._state !== STATE.NONE || event.shiftKey) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n let delta = 0;\r\n\r\n if (event.wheelDelta) {\r\n // WebKit / Opera / Explorer 9\r\n delta = event.wheelDelta / 40;\r\n } else if (event.detail) {\r\n // Firefox\r\n delta = -event.detail / 3;\r\n }\r\n\r\n let factor = 1.0 + delta * 0.05;\r\n factor = Math.max(factor, 0.01);\r\n this.scale(factor);\r\n};\r\n\r\nObjectControls.prototype.mouseup = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this._state = STATE.NONE;\r\n\r\n if (this._clock.getElapsedTime() - this._lastMouseMoveTime > FULL_STOP_THRESHOLD) {\r\n this._affectedObj.stop();\r\n }\r\n};\r\n\r\nObjectControls.prototype.touchstartend = function (event) {\r\n if (this.enabled === false) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (event.touches.length) {\r\n case 1:\r\n this._state = STATE.ROTATE;\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.touches[0].pageX, event.touches[0].pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n break;\r\n\r\n case 2: {\r\n // prevent inertial rotation\r\n this._mainObj.stop();\r\n this._altObj.stop();\r\n\r\n this._state = STATE.SCALE;\r\n const dx = event.touches[0].pageX - event.touches[1].pageX;\r\n const dy = event.touches[0].pageY - event.touches[1].pageY;\r\n this._touchDistanceCur = this._touchDistanceStart = Math.sqrt(dx * dx + dy * dy);\r\n this._scaleStart = this.object.scale.x;\r\n break;\r\n }\r\n\r\n default:\r\n this._state = STATE.NONE;\r\n }\r\n};\r\n\r\nObjectControls.prototype.touchmove = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (this._state) {\r\n case STATE.ROTATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.touches[0].pageX, event.touches[0].pageY);\r\n this.rotateByMouse(false);\r\n\r\n this._lastMouseMoveTime = this._clock.getElapsedTime();\r\n break;\r\n\r\n case STATE.SCALE:\r\n if (settings.now.zooming) {\r\n // update scale\r\n const dx = event.touches[0].pageX - event.touches[1].pageX;\r\n const dy = event.touches[0].pageY - event.touches[1].pageY;\r\n this._touchDistanceCur = Math.sqrt(dx * dx + dy * dy);\r\n const newScale = this._scaleStart * this._touchDistanceCur / this._touchDistanceStart;\r\n const factor = newScale / this.object.scale.x;\r\n this.scale(factor);\r\n }\r\n break;\r\n\r\n default:\r\n }\r\n};\r\n\r\nObjectControls.prototype.keydownup = function (event) {\r\n if (this.enabled === false || this.hotkeysEnabled === false) {\r\n return;\r\n }\r\n\r\n switch (event.keyCode) {\r\n case VK_LEFT:\r\n case VK_UP:\r\n case VK_RIGHT:\r\n case VK_DOWN:\r\n this._pressedKeys[event.keyCode] = (event.type === 'keydown');\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n default:\r\n }\r\n};\r\n\r\nObjectControls.prototype.getKeyBindObject = function () {\r\n return getTopWindow();\r\n};\r\n\r\nObjectControls.prototype.dispose = function () {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.removeEventListener(l.type, l.handler);\r\n }\r\n};\r\n\r\nObjectControls.prototype.translatePivotByMouse = (function () {\r\n const delta = new THREE.Vector2();\r\n return function () {\r\n delta.subVectors(this._mouseCurPos, this._mousePrevPos);\r\n this.translatePivotInWorld(settings.now.translationSpeed * delta.x, settings.now.translationSpeed * delta.y, 0);\r\n };\r\n}());\r\n\r\n// Translate in WorldCS, translation is scaled with root scale matrix\r\nObjectControls.prototype.translatePivotInWorld = function (x, y, z) {\r\n const pos = this.objectPivot.position;\r\n pos.applyMatrix4(this.object.matrixWorld);\r\n pos.setX(pos.x + x);\r\n pos.setY(pos.y + y);\r\n pos.setZ(pos.z + z);\r\n pos.applyMatrix4(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\n// Translate in ModelCS, x, y, z are Ang\r\nObjectControls.prototype.translatePivot = function (x, y, z) {\r\n const pos = this.objectPivot.position;\r\n pos.setX(pos.x + x);\r\n pos.setY(pos.y + y);\r\n pos.setZ(pos.z + z);\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\n// Set pivot\r\nObjectControls.prototype.setPivot = function (newPivot) {\r\n this.objectPivot.position.copy(newPivot);\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\nexport default ObjectControls;\r\n","import * as THREE from 'three';\r\nimport settings from '../settings';\r\nimport Timer from '../Timer';\r\nimport EventDispatcher from '../utils/EventDispatcher';\r\n\r\nfunction Picker(gfxObj, camera, domElement) {\r\n EventDispatcher.call(this);\r\n const self = this;\r\n\r\n this.gfxObj = gfxObj;\r\n this.camera = camera;\r\n this.domElement = (typeof domElement !== 'undefined') ? domElement : document;\r\n this.screen = {\r\n left: 0, top: 0, width: 0, height: 0,\r\n };\r\n this._lastMousePos = new THREE.Vector2(0, 0);\r\n this._mouseTotalDist = 0.0;\r\n this._lastClickBeginTime = -1000.0;\r\n this._lastClickPos = new THREE.Vector2(0, 0);\r\n this._clickBeginTime = 0.0;\r\n\r\n this._clock = new Timer();\r\n this._clock.start();\r\n\r\n this._listeners = [\r\n {\r\n obj: self.domElement,\r\n type: 'mousedown',\r\n handler(e) {\r\n self.mousedown(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseup',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousemove',\r\n handler(e) {\r\n self.mousemove(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchstart',\r\n handler(e) {\r\n self.touchstart(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchend',\r\n handler(e) {\r\n self.touchend(e);\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'resize',\r\n handler() {\r\n self.handleResize();\r\n },\r\n }];\r\n\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.addEventListener(l.type, l.handler);\r\n }\r\n\r\n this.handleResize();\r\n}\r\n\r\nPicker.prototype = Object.create(EventDispatcher.prototype);\r\nPicker.prototype.constructor = Picker;\r\n\r\nPicker.prototype.reset = function () {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n};\r\n\r\nPicker.prototype.handleResize = function () {\r\n if (this.domElement === document) {\r\n this.screen.left = 0;\r\n this.screen.top = 0;\r\n this.screen.width = window.innerWidth;\r\n this.screen.height = window.innerHeight;\r\n } else {\r\n const box = this.domElement.getBoundingClientRect();\r\n // adjustments come from similar code in the jquery offset() function\r\n const d = this.domElement.ownerDocument.documentElement;\r\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\r\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\r\n this.screen.width = box.width;\r\n this.screen.height = box.height;\r\n }\r\n};\r\n\r\nPicker.prototype.pickObject = function (screenPos) {\r\n if (!this.gfxObj) {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n return;\r\n }\r\n\r\n const { gfxObj } = this;\r\n const rayCaster = new THREE.Raycaster();\r\n rayCaster.ray.origin.setFromMatrixPosition(this.camera.matrixWorld);\r\n rayCaster.ray.direction.set(screenPos.x, screenPos.y, 0.5).unproject(this.camera).sub(rayCaster.ray.origin).normalize();\r\n\r\n const clipPlane = (settings.now.draft.clipPlane && this.clipPlaneValue) ? this.clipPlaneValue : Infinity;\r\n const fogFarPlane = (settings.now.fog && this.fogFarValue) ? this.fogFarValue : Infinity;\r\n const point = rayCaster.intersectVisibleObject(gfxObj, this.camera, clipPlane, fogFarPlane);\r\n if (!point) {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n return;\r\n }\r\n\r\n let picked = {};\r\n if (point.residue || point.atom) {\r\n const residue = point.residue || point.atom.residue;\r\n if (settings.now.pick === 'chain') {\r\n picked = { chain: residue.getChain() };\r\n } else if (settings.now.pick === 'molecule') {\r\n picked = { molecule: residue.getMolecule() };\r\n } else if (point.residue || settings.now.pick === 'residue') {\r\n picked = { residue };\r\n } else if (point.atom) {\r\n picked = { atom: point.atom };\r\n }\r\n }\r\n this.picked = picked;\r\n this.dispatchEvent({ type: 'newpick', obj: picked });\r\n};\r\n\r\nPicker.prototype.getMouseInViewport = function (pageX, pageY) {\r\n return new THREE.Vector2(\r\n (pageX - this.screen.left) / this.screen.width * 2 - 1,\r\n -(pageY - this.screen.top) / this.screen.height * 2 + 1,\r\n );\r\n};\r\n\r\nPicker.prototype.mousedown = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.button === 0) {\r\n this._lastMousePos = this.getMouseInViewport(event.pageX, event.pageY);\r\n this._mouseTotalDist = 0.0;\r\n this._clickBeginTime = this._clock.getElapsedTime();\r\n }\r\n};\r\n\r\nPicker.prototype.mousemove = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const pos = this.getMouseInViewport(event.pageX, event.pageY);\r\n this._mouseTotalDist += pos.sub(this._lastMousePos).length();\r\n};\r\n\r\nPicker.prototype.mouseup = function (event) {\r\n const self = this;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.button === 0) {\r\n if (this._mouseTotalDist < 0.01) {\r\n const curTime = this._clock.getElapsedTime();\r\n const curPos = this.getMouseInViewport(event.pageX, event.pageY);\r\n\r\n const timeSinceLastClickBegin = curTime - this._lastClickBeginTime;\r\n if (timeSinceLastClickBegin < 0.7) {\r\n const clickDist = new THREE.Vector2().subVectors(curPos, this._lastClickPos);\r\n if (clickDist.length() < 0.01) {\r\n // it's a double click\r\n this.dispatchEvent({ type: 'dblclick', obj: this.picked });\r\n\r\n this._lastClickPos = curPos;\r\n this._lastClickBeginTime = -1000; // this click cannot serve as first click in double-click\r\n return;\r\n }\r\n }\r\n\r\n setTimeout(() => {\r\n self.pickObject(curPos);\r\n }, 0);\r\n\r\n this._lastClickPos = curPos;\r\n this._lastClickBeginTime = this._clickBeginTime;\r\n }\r\n }\r\n};\r\n\r\nPicker.prototype.touchstart = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.touches.length === 1) {\r\n this._lastTouchdownPos = this.getMouseInViewport(event.touches[0].pageX, event.touches[0].pageY);\r\n }\r\n};\r\n\r\nPicker.prototype.touchend = function (event) {\r\n const self = this;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.touches.length === 0\r\n && event.changedTouches.length === 1) {\r\n const pos = this.getMouseInViewport(event.changedTouches[0].pageX, event.changedTouches[0].pageY);\r\n const dist = pos.sub(this._lastTouchdownPos).length();\r\n if (dist < 0.01) {\r\n setTimeout(() => {\r\n self.pickObject(self._lastTouchdownPos);\r\n }, 0);\r\n }\r\n }\r\n};\r\n\r\nPicker.prototype.dispose = function () {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.removeEventListener(l.type, l.handler);\r\n }\r\n};\r\n\r\nexport default Picker;\r\n","import * as THREE from 'three';\r\n\r\nclass Axes {\r\n constructor(target, targetCamera) {\r\n this._target = target;\r\n this._targetCamera = targetCamera;\r\n this._camera = new THREE.PerspectiveCamera(targetCamera.fov, targetCamera.aspect, 1, 100);\r\n this._object = new THREE.AxesHelper(1);\r\n this._scene = new THREE.Scene();\r\n this._scene.add(this._object);\r\n this._full = new THREE.Vector2();\r\n\r\n this._update();\r\n }\r\n\r\n _update() {\r\n const { fov } = this._targetCamera;\r\n const camera = this._camera;\r\n camera.aspect = this._targetCamera.aspect;\r\n camera.setMinimalFov(fov);\r\n camera.setDistanceToFit(1.0, fov);\r\n camera.updateProjectionMatrix();\r\n\r\n this._object.quaternion.copy(this._target.quaternion);\r\n }\r\n\r\n render(renderer) {\r\n this._update();\r\n\r\n renderer.getSize(this._full);\r\n const width = this._full.width * 0.25;\r\n const height = this._full.height * 0.25;\r\n\r\n const { autoClear } = renderer;\r\n renderer.autoClear = false;\r\n renderer.setViewport(0.0, 0.0, width, height);\r\n renderer.clear(false, true, false);\r\n renderer.render(this._scene, this._camera);\r\n renderer.setViewport(0, 0, this._full.width, this._full.height);\r\n renderer.autoClear = autoClear;\r\n }\r\n}\r\nexport default Axes;\r\n","import * as THREE from 'three';\r\nimport SecondaryStructureColorer from './colorers/SecondaryStructureColorer';\r\n\r\nconst cDataOffset = 12;\r\nconst cFirstMask = 0x0FFFFF00;\r\nconst cFirstShift = 8;\r\nconst cSecMask1 = 0x000000FF;\r\nconst cSecShift1 = 12;\r\nconst cSecMask2 = 0xFFF00000;\r\nconst cSecShift2 = 20;\r\nconst cThirdMask = 0x000FFFFF;\r\nconst cStrMask = 0xF0000000;\r\nconst cStrShift = 28;\r\nconst c219 = 1 << 19;\r\nconst c220 = 1 << 20;\r\n\r\nconst cHelixIdx = 1;\r\nconst cSheetIdx = 2;\r\nconst secTypes = ['helix', 'strand'];\r\nconst cSecNames = ['fs', 'ps', 'ns', 'us'];\r\n\r\nfunction _createSecondary(strArray, complex) {\r\n const residues = complex._residues;\r\n const nRes = residues.length;\r\n const resid = new Uint8Array(nRes);\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, n = strArray.length; i < n; ++i) {\r\n const atom = atoms[i];\r\n resid[atom.residue._index] = strArray[i];\r\n }\r\n\r\n const secondary = [];\r\n let rIdx = 0;\r\n while (rIdx < nRes) {\r\n if (resid[rIdx] !== 0) {\r\n const start = rIdx;\r\n const val = resid[rIdx];\r\n while (rIdx < nRes - 1 && resid[rIdx + 1] === val\r\n && residues[rIdx].isConnected(residues[rIdx + 1])) {\r\n ++rIdx;\r\n }\r\n secondary.push({ start, end: rIdx, type: secTypes[val - 1] });\r\n }\r\n ++rIdx;\r\n }\r\n return secondary;\r\n}\r\n\r\nfunction fromUInt20ToInt20(uint20) {\r\n return uint20 >= c219 ? uint20 - c220 : uint20;\r\n}\r\n\r\nclass FrameInfo {\r\n constructor(complex, payload, callbacks) {\r\n this._complex = complex;\r\n this._secondary = null;\r\n this.isLoading = false;\r\n this._framesRange = {\r\n start: 0,\r\n end: -1,\r\n };\r\n this.frameIsReady = false;\r\n this._buffer = null;\r\n this._frameRequest = null;\r\n this._callbacks = callbacks;\r\n if (typeof payload === 'function') {\r\n this._framesRequestLength = 1;\r\n this._downloadDataFn = payload;\r\n } else {\r\n this.parseBinaryData(payload, true);\r\n }\r\n this.reset();\r\n this.setFrame(0);\r\n }\r\n\r\n _prepareBuffer(framesStart, framesEnd) {\r\n if (framesStart === undefined || framesStart === null) {\r\n framesStart = 0;\r\n }\r\n if (framesEnd === undefined || framesEnd === null) {\r\n framesEnd = framesStart + this._framesRequestLength;\r\n }\r\n if (this._framesCount !== undefined) {\r\n framesEnd = Math.min(this._framesCount - 1, framesEnd);\r\n }\r\n if (this._downloadDataFn) {\r\n const self = this;\r\n const onDone = function (data) {\r\n self.isLoading = false;\r\n if (self._callbacks && typeof self._callbacks.onLoadStatusChanged === 'function') {\r\n self._callbacks.onLoadStatusChanged();\r\n }\r\n self._buffer = {\r\n data,\r\n state: 'ready',\r\n start: framesStart,\r\n end: framesEnd,\r\n };\r\n if (self._frameRequest !== null) {\r\n const idx = self._frameRequest;\r\n self._frameRequest = null;\r\n self.setFrame(idx);\r\n }\r\n };\r\n const onFail = function () {\r\n self.isLoading = false;\r\n if (self._callbacks && typeof self._callbacks.onError === 'function') {\r\n self._callbacks.onError('Streaming failed');\r\n }\r\n };\r\n if (!this._buffer) {\r\n this._buffer = {};\r\n }\r\n this._buffer.state = 'downloading';\r\n this.isLoading = true;\r\n if (self._callbacks && typeof self._callbacks.onLoadStatusChanged === 'function') {\r\n self._callbacks.onLoadStatusChanged();\r\n }\r\n this._downloadDataFn({ start: framesStart, end: framesEnd + 1 }, onDone, onFail);\r\n }\r\n }\r\n\r\n _parseBuffer() {\r\n if (this._buffer && this._buffer.state === 'ready') {\r\n this._framesRange = {\r\n start: this._buffer.start,\r\n end: this._buffer.end,\r\n };\r\n this.parseBinaryData(this._buffer.data, false);\r\n let _bufferRequestStart = (this._buffer.end + 1) % this._framesCount;\r\n if (_bufferRequestStart >= this._framesCount) {\r\n _bufferRequestStart = 0;\r\n }\r\n this._buffer = {\r\n state: 'none',\r\n };\r\n this._prepareBuffer(_bufferRequestStart, _bufferRequestStart + this._framesRequestLength);\r\n if (this._frameRequest !== null) {\r\n const idx = this._frameRequest;\r\n this._frameRequest = null;\r\n this.setFrame(idx);\r\n }\r\n }\r\n }\r\n\r\n parseBinaryData(arrayBuffer) {\r\n const dataView = new DataView(arrayBuffer);\r\n let offset = 0;\r\n const atomsCount = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const framesCount = dataView.getUint32(offset, true);\r\n this._framesCount = framesCount;\r\n this._framesRange.end = this._framesRange.end > 0\r\n ? Math.min(this._framesRange.end, framesCount - 1) : framesCount - 1;\r\n offset += 4;\r\n this._atomsCount = atomsCount;\r\n const maxSize = 1024 * 1024; // 1 MB\r\n this._framesRequestLength = Math.ceil(maxSize / (atomsCount * 8));\r\n const chunkedFramesCount = this._framesRange.end - this._framesRange.start + 1;\r\n if (atomsCount !== this._complex._atoms.length\r\n || arrayBuffer.byteLength !== cDataOffset + chunkedFramesCount * atomsCount * 8) {\r\n throw new Error();\r\n }\r\n const complex = this._complex;\r\n let timeStep = dataView.getUint32(offset, true);\r\n let iName = 0;\r\n while (timeStep > 1000 && iName < cSecNames.length - 1) {\r\n timeStep /= 1000;\r\n ++iName;\r\n }\r\n\r\n this._timeStep = `${timeStep.toString()} ${cSecNames[iName]}`;\r\n offset += 4;\r\n const secondary = [];\r\n const posData = new Float32Array(chunkedFramesCount * atomsCount * 3);\r\n let coordIdx = 0;\r\n const secondaryArr = new Int8Array(atomsCount);\r\n for (let j = 0; j < chunkedFramesCount; ++j) {\r\n for (let i = 0; i < atomsCount; ++i) {\r\n const hiWord = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const loWord = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const str = (loWord & cStrMask) >>> cStrShift;\r\n const x = fromUInt20ToInt20(((loWord & cFirstMask) >>> cFirstShift) >> 0);\r\n const y = fromUInt20ToInt20((((loWord & cSecMask1) << cSecShift1)\r\n | ((hiWord & cSecMask2) >>> cSecShift2)) >> 0);\r\n const z = fromUInt20ToInt20((hiWord & cThirdMask) >> 0);\r\n secondaryArr[i] = 0;\r\n if (str > 0 && str < 4) {\r\n secondaryArr[i] = cHelixIdx;\r\n } else if (str === 4) {\r\n secondaryArr[i] = cSheetIdx;\r\n }\r\n posData[coordIdx++] = x / 100;\r\n posData[coordIdx++] = y / 100;\r\n posData[coordIdx++] = z / 100;\r\n }\r\n secondary.push(_createSecondary(secondaryArr, complex));\r\n }\r\n this._secondaryData = secondary;\r\n this._data = posData;\r\n }\r\n\r\n nextFrame() {\r\n this.setFrame((this._currFrame + 1) % this._framesCount);\r\n }\r\n\r\n needsColorUpdate(colorer) {\r\n return colorer instanceof SecondaryStructureColorer;\r\n }\r\n\r\n getAtomColor(colorer, atom) {\r\n return colorer.getResidueColor(this._residues[atom.residue._index], this._complex);\r\n }\r\n\r\n getResidueColor(colorer, residue) {\r\n return colorer.getResidueColor(this._residues[residue._index], this._complex);\r\n }\r\n\r\n _updateSecondary() {\r\n let i;\r\n const myResidues = this._residues;\r\n let n = myResidues.length;\r\n for (i = 0; i < n; ++i) {\r\n myResidues[i]._secondary = null;\r\n }\r\n const sec = this._secondaryData[this._currFrame - this._framesRange.start];\r\n for (i = 0, n = sec.length; i < n; ++i) {\r\n const oldSec = sec[i];\r\n const { start, end } = oldSec;\r\n const nSec = {\r\n _start: myResidues[start],\r\n _end: myResidues[end],\r\n type: oldSec.type,\r\n generic: oldSec.generic,\r\n };\r\n for (let j = start; j <= end; ++j) {\r\n myResidues[j]._secondary = nSec;\r\n }\r\n }\r\n }\r\n\r\n reset() {\r\n const compRes = this._complex._residues;\r\n const n = compRes.length;\r\n this._residues = new Array(n);\r\n const myResidues = this._residues;\r\n const getSec = function () {\r\n return this._secondary;\r\n };\r\n for (let i = 0; i < n; ++i) {\r\n myResidues[i] = {\r\n _type: compRes[i]._type,\r\n _isValid: compRes[i]._isValid,\r\n _controlPoint: null,\r\n _wingVector: null,\r\n _secondary: null,\r\n getSecondary: getSec,\r\n };\r\n }\r\n }\r\n\r\n setFrame(frameIdx) {\r\n this.frameIsReady = false;\r\n if (frameIdx >= this._framesRange.start && frameIdx <= this._framesRange.end) {\r\n this._currFrame = frameIdx;\r\n this._cachedResidues = false;\r\n this._updateSecondary();\r\n this.frameIsReady = true;\r\n } else {\r\n this._frameRequest = frameIdx;\r\n if (!this._buffer) {\r\n this._prepareBuffer(frameIdx);\r\n } else {\r\n const self = this;\r\n switch (this._buffer.state) {\r\n case 'none':\r\n this._prepareBuffer(frameIdx);\r\n break;\r\n case 'ready':\r\n self._parseBuffer();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n disableEvents() {\r\n this._callbacks = null;\r\n }\r\n\r\n /**\r\n * Returns link to atom pos vector, clone it if needed\r\n */\r\n\r\n static _vec = new THREE.Vector3();\r\n\r\n getAtomPos(atomIdx) {\r\n const vec = FrameInfo._vec;\r\n const self = this;\r\n const data = self._data;\r\n const idx = (self._atomsCount * (self._currFrame - self._framesRange.start) + atomIdx) * 3;\r\n vec.set(data[idx], data[idx + 1], data[idx + 2]);\r\n return vec;\r\n }\r\n\r\n getResidues() {\r\n if (this._cachedResidues) {\r\n return this._residues;\r\n }\r\n this._complex.updateToFrame(this);\r\n return this._residues;\r\n }\r\n}\r\nexport default FrameInfo;\r\n","import _ from 'lodash';\r\nimport settings from '../../settings';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\n\r\n/**\r\n * Create new scene object.\r\n *\r\n * @param {array=} params - Object required params.\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the colorer after its creation.\r\n *\r\n * @exports SceneObject\r\n * @this SceneObject\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all scene objects that are not reps.\r\n */\r\nclass SceneObject {\r\n constructor(params, opts) {\r\n if (this.constructor === SceneObject) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Object's options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.params = params;\r\n this.opts = _.merge(utils.deriveDeep(settings.now.objects[this.type], true), opts);\r\n this.needsRebuild = false;\r\n this._mesh = null;\r\n this.id = null;\r\n }\r\n\r\n /**\r\n * Get object identification, probably with options.\r\n * @returns {Object} field type contains type information, params - object's formal parameters,\r\n * opts - changed options\r\n * Options are returned if they were changed during or after object creation.\r\n */\r\n identify() {\r\n const result = {\r\n type: this.type,\r\n params: this.params,\r\n };\r\n const diff = utils.objectsDiff(this.opts, settings.now.modes[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n result.opts = diff;\r\n }\r\n return result;\r\n }\r\n\r\n toString() {\r\n const paramsStr = `o=${this.type},${this.params.join(',')}`;\r\n const optsStr = utils.compareOptionsWithDefaults(this.opts, settings.defaults.objects[this.type]);\r\n return paramsStr + optsStr;\r\n }\r\n\r\n getGeometry() {\r\n return this._mesh;\r\n }\r\n\r\n destroy() {\r\n if (this._mesh) {\r\n gfxutils.destroyObject(this._mesh);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Scene object identifier.\r\n * @type {string}\r\n */\r\nSceneObject.prototype.type = '__';\r\n\r\nexport default SceneObject;\r\n","import * as THREE from 'three';\r\nimport SceneObject from './SceneObject';\r\nimport meshutils from '../meshutils';\r\nimport UberMaterial from '../shaders/UberMaterial';\r\nimport meshes from '../meshes/meshes';\r\nimport settings from '../../settings';\r\n\r\nclass LinesObj extends SceneObject {\r\n constructor(params, opts) {\r\n super(params, opts);\r\n if (params.length < 2) {\r\n throw new Error('Wrong number of argumets on line object creation!');\r\n }\r\n [this._id1, this._id2] = params;\r\n }\r\n\r\n _getAtomFromName(complex, atomId) {\r\n const err = ' - Wrong atom format it must be \\'#CHAIN_NAME.#RESIDUE_NUMBER.#ATOM_NAME\\' (e.g. \\'A.38.CO1\\')';\r\n const atom1 = complex.getAtomByFullname(atomId);\r\n if (!atom1) {\r\n throw new Error(atomId + err);\r\n }\r\n return atom1;\r\n }\r\n\r\n build(complex) {\r\n const geom = new THREE.BufferGeometry();\r\n this._atom1 = this._getAtomFromName(complex, this._id1);\r\n this._atom2 = this._getAtomFromName(complex, this._id2);\r\n\r\n const p1 = this._atom1.position;\r\n const p2 = this._atom2.position;\r\n const vertices = new Float32Array([\r\n p1.x, p1.y, p1.z,\r\n p2.x, p2.y, p2.z,\r\n ]);\r\n\r\n geom.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n geom.computeBoundingBox();\r\n\r\n this._line = new meshes.Line(geom, new UberMaterial({\r\n lights: false,\r\n overrideColor: true,\r\n dashedLine: true,\r\n fogTransparent: settings.now.bg.transparent,\r\n }));\r\n this._line.computeLineDistances();\r\n this._line.material.setUberOptions({\r\n fixedColor: new THREE.Color(this.opts.color),\r\n dashedLineSize: this.opts.dashSize,\r\n dashedLinePeriod: this.opts.dashSize + this.opts.gapSize,\r\n });\r\n this._line.material.updateUniforms();\r\n\r\n this._line.raycast = function (_raycaster, _intersects) {};\r\n this._mesh = this._line;\r\n const transforms = complex.getTransforms();\r\n if (transforms.length > 0) {\r\n this._mesh = new THREE.Group();\r\n this._mesh.add(this._line);\r\n meshutils.applyTransformsToMeshes(this._mesh, transforms);\r\n }\r\n }\r\n\r\n updateToFrame(frameData) {\r\n if (!this._atom1 || !this._atom2 || !this._line) {\r\n return;\r\n }\r\n\r\n const geo = this._line.geometry;\r\n geo.vertices[0].copy(frameData.getAtomPos(this._atom1.index));\r\n geo.vertices[1].copy(frameData.getAtomPos(this._atom2.index));\r\n this._line.computeLineDistances();\r\n geo.computeBoundingSphere();\r\n\r\n geo.verticesNeedUpdate = true;\r\n }\r\n}\r\n\r\nLinesObj.prototype.constructor = LinesObj;\r\nLinesObj.prototype.type = 'line';\r\n\r\nexport default LinesObj;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './Outline.frag';\r\n\r\nclass OutlineMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n // add depth outline\r\n super(params);\r\n\r\n const settings = {\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n srcDepthTex: { type: 't', value: null },\r\n srcTexSize: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n color: { type: 'v3', value: null },\r\n threshold: { type: 'f', value: null },\r\n opacity: { type: 'f', value: 1.0 },\r\n thickness: { type: 'v2', value: new THREE.Vector2(1, 1) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: true,\r\n depthTest: false,\r\n depthWrite: false,\r\n };\r\n\r\n this.setValues(settings);\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n this.depth = source.depth;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n const defines = {};\r\n\r\n if (this.depth) {\r\n defines.DEPTH_OUTLINE = 1;\r\n }\r\n\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nOutlineMaterial.prototype.depth = false;\r\n\r\nexport default OutlineMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './FXAA.frag';\r\n\r\nclass FXAAMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n bgColor: { type: 'c', value: new THREE.Color(0xffffff) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n this.depth = source.depth;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n\r\n if (this.bgTransparent) {\r\n defines.BG_TRANSPARENT = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nFXAAMaterial.prototype.bgTransparent = false;\r\n\r\nexport default FXAAMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AO.frag';\r\nimport noise from '../noiseTexture';\r\n\r\nconst _samplesKernel = [\r\n // hemisphere samples adopted to sphere\r\n new THREE.Vector3(0.295184, 0.077723, 0.068429),\r\n new THREE.Vector3(-0.271976, -0.365221, 0.838363),\r\n new THREE.Vector3(0.547713, 0.467576, 0.488515),\r\n new THREE.Vector3(0.662808, -0.031733, 0.584758),\r\n new THREE.Vector3(-0.025717, 0.218955, 0.657094),\r\n new THREE.Vector3(-0.310153, -0.365223, 0.370701),\r\n new THREE.Vector3(-0.101407, -0.006313, 0.747665),\r\n new THREE.Vector3(-0.769138, 0.360399, 0.086847),\r\n new THREE.Vector3(-0.271988, -0.275140, 0.905353),\r\n new THREE.Vector3(0.096740, -0.566901, 0.700151),\r\n new THREE.Vector3(0.562872, -0.735136, 0.094647),\r\n new THREE.Vector3(0.379877, 0.359278, 0.190061),\r\n new THREE.Vector3(0.519064, -0.023055, 0.405068),\r\n new THREE.Vector3(-0.301036, 0.114696, 0.088885),\r\n new THREE.Vector3(-0.282922, 0.598305, 0.487214),\r\n new THREE.Vector3(-0.181859, 0.251670, 0.679702),\r\n new THREE.Vector3(-0.191463, -0.635818, 0.512919),\r\n new THREE.Vector3(-0.293655, 0.427423, 0.078921),\r\n new THREE.Vector3(-0.267983, 0.680534, 0.132880),\r\n new THREE.Vector3(0.139611, 0.319637, 0.477439),\r\n new THREE.Vector3(-0.352086, 0.311040, 0.653913),\r\n new THREE.Vector3(0.321032, 0.805279, 0.487345),\r\n new THREE.Vector3(0.073516, 0.820734, 0.414183),\r\n new THREE.Vector3(-0.155324, 0.589983, 0.411460),\r\n new THREE.Vector3(0.335976, 0.170782, 0.527627),\r\n new THREE.Vector3(0.463460, -0.355658, 0.167689),\r\n new THREE.Vector3(0.222654, 0.596550, 0.769406),\r\n new THREE.Vector3(0.922138, -0.042070, 0.147555),\r\n new THREE.Vector3(-0.727050, -0.329192, 0.369826),\r\n new THREE.Vector3(-0.090731, 0.533820, 0.463767),\r\n new THREE.Vector3(-0.323457, -0.876559, 0.238524),\r\n new THREE.Vector3(-0.663277, -0.372384, 0.342856),\r\n];\r\n\r\nclass AOMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n noiseTexture: { type: 't', value: noise.noiseTexture },\r\n noiseTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / noise.noiseWidth, 1.0 / noise.noiseHeight) },\r\n diffuseTexture: { type: 't', value: null },\r\n normalTexture: { type: 't', value: null },\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n camNearFar: { type: 'v2', value: new THREE.Vector2(1.0, 10.0) },\r\n projMatrix: { type: 'mat4', value: new THREE.Matrix4() },\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n samplesKernel: { type: 'v3v', value: _samplesKernel },\r\n kernelRadius: { type: 'f', value: 1.0 },\r\n depthThreshold: { type: 'f', value: 1.0 },\r\n factor: { type: 'f', value: 1.0 },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n }\r\n}\r\n\r\nexport default AOMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AOHorBlur.frag';\r\n\r\nconst _kernelOffsets = [-2.0, -1.0, 0.0, 1.0, 2.0];\r\n\r\nclass AOHorBlurMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n aoMap: { type: 't', value: null },\r\n samplesOffsets: { type: 'fv1', value: _kernelOffsets },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n }\r\n}\r\n\r\nexport default AOHorBlurMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AOVertBlurWithBlend.frag';\r\n\r\nconst _kernelOffsets = [-2.0, -1.0, 0.0, 1.0, 2.0];\r\n\r\nclass AOVertBlurWithBlendMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n diffuseTexture: { type: 't', value: null },\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n aoMap: { type: 't', value: null },\r\n samplesOffsets: { type: 'fv1', value: _kernelOffsets },\r\n projMatrix: { type: 'mat4', value: new THREE.Matrix4() },\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n fogNearFar: { type: 'v2', value: new THREE.Vector2(100.0, 100.0) },\r\n fogColor: { type: 'v4', value: new THREE.Vector4(0.0, 0.5, 0.0, 1.0) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n\r\n if (this.useFog) {\r\n defines.USE_FOG = 1;\r\n }\r\n if (this.fogTransparent) {\r\n defines.FOG_TRANSPARENT = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nAOVertBlurWithBlendMaterial.prototype.useFog = true;\r\nAOVertBlurWithBlendMaterial.prototype.fogTransparent = false;\r\n\r\nexport default AOVertBlurWithBlendMaterial;\r\n","/* eslint-disable no-magic-numbers */\r\n/* eslint-disable guard-for-in */\r\nimport * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './Anaglyph.frag';\r\n\r\nclass AnaglyphMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n const settings = {\r\n uniforms: {\r\n srcL: { type: 't', value: null },\r\n srcR: { type: 't', value: null },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n };\r\n this.setValues(settings);\r\n }\r\n}\r\n\r\nexport default AnaglyphMaterial;\r\n","import * as THREE from 'three';\r\nimport settings from '../settings';\r\n\r\nclass View {\r\n constructor() {\r\n this.position = new THREE.Vector3(0, 0, 0);\r\n this.scale = 1;\r\n this.orientation = new THREE.Quaternion(0, 0, 0, 1);\r\n }\r\n\r\n set(position, scale, orientation) {\r\n this.position = position;\r\n this.scale = scale;\r\n this.orientation = orientation;\r\n }\r\n}\r\n\r\nconst _transitionTime = 1.5; // in seconds\r\n\r\nexport default class ViewInterpolator {\r\n setup(startView, endView) {\r\n this._startTime = undefined;\r\n this._endTime = undefined;\r\n this._isPaused = false;\r\n\r\n this._srcView = startView;\r\n this._dstView = endView;\r\n this._isMoving = false;\r\n }\r\n\r\n isMoving() {\r\n return this._isMoving;\r\n }\r\n\r\n wasStarted() {\r\n return typeof this._startTime !== 'undefined' && typeof this._endTime !== 'undefined';\r\n }\r\n\r\n start() {\r\n this._startTime = Date.now();\r\n const transTime = settings.now.interpolateViews ? _transitionTime * 1000 : 0;\r\n this._endTime = this._startTime + transTime;\r\n this._isMoving = true;\r\n }\r\n\r\n getCurrentView() {\r\n if (typeof this._srcView === 'undefined' || typeof this._dstView === 'undefined'\r\n || !this._isMoving || !this.wasStarted()) {\r\n return { success: false };\r\n }\r\n\r\n let view = this.createView();\r\n const time = Date.now();\r\n if (time > this._endTime) {\r\n view = this._dstView;\r\n this.reset();\r\n return { success: true, view };\r\n }\r\n\r\n const factor = (time - this._startTime) / (this._endTime - this._startTime);\r\n view.position.copy(this._srcView.position);\r\n view.position.lerp(this._dstView.position, factor);\r\n view.scale = (1 - factor) * this._srcView.scale + factor * this._dstView.scale;\r\n view.orientation.copy(this._srcView.orientation);\r\n view.orientation.slerp(this._dstView.orientation, factor);\r\n return { success: true, view };\r\n }\r\n\r\n reset() {\r\n this._startTime = this._endTime = 0;\r\n this._isMoving = false;\r\n }\r\n\r\n pause() {\r\n if (!this._isPaused) {\r\n this.setup(this.getCurrentView().view, this._dstView);\r\n this._isPaused = true;\r\n }\r\n }\r\n\r\n resume() {\r\n this._isPaused = false;\r\n }\r\n\r\n createView() {\r\n return new View();\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport makeContextDependent from './makeContextDependent';\r\n\r\nconst MAX_COOKIE_LEN = 4000;\r\nconst COUNT_SUFFIX = 'Cnt';\r\n\r\nfunction _chunkString(string, chunkLen) {\r\n const l = string.length;\r\n const chunks = [];\r\n for (let c = 0, lc = 0; lc < l; c++, lc += chunkLen) {\r\n chunks[c] = string.slice(lc, lc + chunkLen);\r\n }\r\n return chunks;\r\n}\r\n\r\n/**\r\n * Create new context dependent Cookie holder object.\r\n * @param context\r\n * @param {Object} opts - options\r\n * @param {string} opts.path - cookie path\r\n * @constructor\r\n */\r\nfunction Cookies(context, opts) {\r\n this.context = context;\r\n this._opts = _.merge({\r\n path: '/',\r\n }, opts);\r\n}\r\n\r\nmakeContextDependent(Cookies.prototype);\r\n\r\n/**\r\n * Remove cookie by the name.\r\n * @param key\r\n */\r\nCookies.prototype.removeCookie = function (key) {\r\n const cntKey = this._toCount(key);\r\n let cntVal = this._getSimpleCookie(cntKey);\r\n if (!cntVal) {\r\n this._removeSimpleCookie(key);\r\n return;\r\n }\r\n this._removeSimpleCookie(cntKey);\r\n cntVal = parseInt(cntVal, 10);\r\n for (let i = 0; i < cntVal; ++i) {\r\n this._removeSimpleCookie(key + i);\r\n }\r\n};\r\n\r\n/**\r\n * Set new cookie value. Automatically splits\r\n * values that are too large into multiple cookies.\r\n * @param key\r\n * @param value\r\n */\r\nCookies.prototype.setCookie = function (key, value) {\r\n this.removeCookie(key);\r\n value = encodeURIComponent(value);\r\n const values = _chunkString(value, MAX_COOKIE_LEN - key.length - 1);\r\n const cntVal = values.length;\r\n if (cntVal === 1) {\r\n this._setSimpleCookie(key, value);\r\n return;\r\n }\r\n const cntKey = this._toCount(key);\r\n this._setSimpleCookie(cntKey, cntVal.toString());\r\n for (let i = 0; i < cntVal; ++i) {\r\n this._setSimpleCookie(key + i, values[i]);\r\n }\r\n};\r\n\r\n/**\r\n * Obtain the value of a compound cookie.\r\n * @param key\r\n */\r\nCookies.prototype.getCookie = function (key) {\r\n const cntKey = this._toCount(key);\r\n let cntVal = this._getSimpleCookie(cntKey);\r\n if (!cntVal) {\r\n return this._getSimpleCookie(key);\r\n }\r\n cntVal = parseInt(cntVal, 10);\r\n const value = [];\r\n for (let i = 0; i < cntVal; ++i) {\r\n value[i] = this._getSimpleCookie(key + i);\r\n }\r\n return value.join('');\r\n};\r\n\r\nCookies.prototype._toCount = function (key) {\r\n return key + COUNT_SUFFIX;\r\n};\r\n\r\nCookies.prototype._removeSimpleCookie = function (key) {\r\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;\r\n};\r\n\r\nCookies.prototype._getExpirationDate = function () {\r\n const today = new Date();\r\n const EXP_PERIOD_YEARS = 10;\r\n today.setFullYear(today.getFullYear() + EXP_PERIOD_YEARS);\r\n return today;\r\n};\r\n\r\nCookies.prototype._setSimpleCookie = function (key, value) {\r\n document.cookie = `${key}=${value\r\n };expires=${this._getExpirationDate().toUTCString()\r\n };path=${this._opts.path}`;\r\n};\r\n\r\nCookies.prototype._getSimpleCookie = function (key) {\r\n const matches = document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`));\r\n return matches ? decodeURIComponent(matches[1]) : '';\r\n};\r\n\r\nCookies.prototype._exists = function (key) {\r\n return document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`));\r\n};\r\n\r\nexport default Cookies;\r\n","/*\r\n * Toggling WebVR is done through button.click because of limitations on calling requestPresent in webVR:\r\n * VRDisplay::requestPresent should be called from user gesture:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestPresent\r\n */\r\nexport default function (webVRPoC) {\r\n function showEnterVR(button) {\r\n button.style.display = '';\r\n button.style.cursor = 'pointer';\r\n button.style.left = 'calc(50% - 50px)';\r\n button.style.width = '100px';\r\n\r\n button.textContent = 'ENTER VR';\r\n\r\n let currentSession = null;\r\n\r\n function onSessionEnded(/* event */) {\r\n currentSession.removeEventListener('end', onSessionEnded);\r\n button.textContent = 'ENTER VR';\r\n currentSession = null;\r\n }\r\n\r\n function onSessionStarted(session) {\r\n session.addEventListener('end', onSessionEnded);\r\n webVRPoC._gfx.renderer.xr.setReferenceSpaceType('local');\r\n webVRPoC._gfx.renderer.xr.setSession(session);\r\n button.textContent = 'EXIT VR';\r\n currentSession = session;\r\n }\r\n\r\n button.onmouseenter = function () { button.style.opacity = '1.0'; };\r\n button.onmouseleave = function () { button.style.opacity = '0.5'; };\r\n\r\n button.onclick = function () {\r\n if (currentSession === null) {\r\n // WebXR's requestReferenceSpace only works if the corresponding feature\r\n // was requested at session creation time. For simplicity, just ask for\r\n // the interesting ones as optional features, but be aware that the\r\n // requestReferenceSpace call will fail if it turns out to be unavailable.\r\n // ('local' is always available for immersive sessions and doesn't need to\r\n // be requested separately.)\r\n\r\n const sessionInit = { optionalFeatures: ['local-floor', 'bounded-floor'] };\r\n navigator.xr.requestSession('immersive-vr', sessionInit).then(onSessionStarted);\r\n webVRPoC.moveSceneBehindHeadset();\r\n } else {\r\n currentSession.end();\r\n }\r\n };\r\n }\r\n\r\n function showWebXRNotFound(button) {\r\n button.style.display = '';\r\n button.style.cursor = 'auto';\r\n button.style.left = 'calc(50% - 75px)';\r\n button.style.width = '150px';\r\n button.textContent = 'VR NOT FOUND';\r\n button.onmouseenter = null;\r\n button.onmouseleave = null;\r\n button.onclick = null;\r\n }\r\n\r\n function stylizeElement(element) {\r\n element.style.position = 'absolute';\r\n element.style.bottom = '20px';\r\n element.style.padding = '12px 6px';\r\n element.style.border = '1px solid #fff';\r\n element.style.borderRadius = '4px';\r\n element.style.background = 'transparent';\r\n element.style.color = '#fff';\r\n element.style.font = 'normal 13px sans-serif';\r\n element.style.textAlign = 'center';\r\n element.style.opacity = '0.5';\r\n element.style.outline = 'none';\r\n element.style.zIndex = '999';\r\n }\r\n\r\n if ('xr' in navigator) {\r\n const button = document.createElement('button');\r\n button.style.display = 'none';\r\n stylizeElement(button);\r\n navigator.xr.isSessionSupported('immersive-vr').then((supported) => (\r\n supported ? showEnterVR(button) : showWebXRNotFound(button)\r\n ));\r\n return button;\r\n }\r\n const message = document.createElement('a');\r\n message.href = 'https://webvr.info';\r\n message.innerHTML = 'WEBXR NOT SUPPORTED';\r\n message.style.left = 'calc(50% - 90px)';\r\n message.style.width = '180px';\r\n message.style.textDecoration = 'none';\r\n stylizeElement(message);\r\n return message;\r\n}\r\n","import * as THREE from 'three';\r\nimport createWebVRButton from './createWebVRButton';\r\nimport gfxutils from '../gfxutils';\r\nimport logger from '../../utils/logger';\r\nimport settings from '../../settings';\r\nimport UberMaterial from '../shaders/UberMaterial';\r\n\r\nexport default class WebVRPoC {\r\n constructor(onToggle) {\r\n this._mainCamera = new THREE.PerspectiveCamera();\r\n this._button = null;\r\n this._onToggle = onToggle;\r\n\r\n this._molContainer = new gfxutils.RCGroup();\r\n this._user = new gfxutils.RCGroup();\r\n this._scalingPivot = new THREE.Object3D();\r\n this._user.add(this._scalingPivot);\r\n\r\n this._controller1 = null;\r\n this._controller2 = null;\r\n this._pressedGripsCounter = 0;\r\n this._distance = 0;\r\n\r\n this._gfx = null;\r\n }\r\n\r\n startScalingByControllers() {\r\n // reset scale\r\n this._distance = this._controller1.position.distanceTo(this._controller2.position);\r\n gfxutils.getMiddlePoint(this._controller1.position, this._controller2.position, this._scalingPivot.position);\r\n this._scalingPivot.scale.set(1, 1, 1);\r\n this._scalingPivot.updateMatrix();\r\n this._scalingPivot.updateMatrixWorld();\r\n // link molecule to pivot\r\n this._scalingPivot.addSavingWorldTransform(this._molContainer);\r\n }\r\n\r\n stopScalingByControllers() {\r\n this._gfx.scene.addSavingWorldTransform(this._molContainer);\r\n }\r\n\r\n handleGripsDown(event) {\r\n this._pressedGripsCounter++;\r\n if (this._pressedGripsCounter === 2) {\r\n this.startScalingByControllers();\r\n } else if (this._pressedGripsCounter === 1) {\r\n event.target.addSavingWorldTransform(this._molContainer);\r\n }\r\n }\r\n\r\n handleGripsUp(event) {\r\n this._pressedGripsCounter--;\r\n if (this._pressedGripsCounter === 1) {\r\n this.stopScalingByControllers();\r\n // reattach molecule to other controller\r\n const anotherController = event.target === this._controller1 ? this._controller2 : this._controller1;\r\n anotherController.addSavingWorldTransform(this._molContainer);\r\n } else if (this._pressedGripsCounter === 0) {\r\n this._gfx.scene.addSavingWorldTransform(this._molContainer);\r\n }\r\n }\r\n\r\n enable(gfx) {\r\n if (!gfx) {\r\n logger.warn('WebVR couldn\\'t be enabled, because gfx is not defined');\r\n return;\r\n }\r\n this._gfx = gfx;\r\n const { renderer, camera } = gfx;\r\n if (!renderer) {\r\n throw new Error('No renderer is available to toggle WebVR');\r\n }\r\n if (!camera) {\r\n throw new Error('No camera is available to toggle WebVR');\r\n }\r\n\r\n // enable xr in renderer\r\n renderer.xr.enabled = true;\r\n // add button for turning vr mode\r\n if (!this._button) {\r\n this._button = createWebVRButton(this);\r\n document.body.appendChild(this._button);\r\n } else {\r\n this._button.style.display = 'block';\r\n }\r\n // store fog setting\r\n this._mainFog = settings.now.fog;\r\n settings.set('fog', false);\r\n\r\n this._plugVRNodesIntoScene(gfx, renderer);\r\n this._setControllersListeners();\r\n\r\n // make some Miew job\r\n if (this._onToggle) {\r\n this._onToggle(true);\r\n }\r\n }\r\n\r\n _plugVRNodesIntoScene(gfx, renderer) {\r\n // store common scene camera\r\n this._mainCamera.copy(gfx.camera);\r\n // add hierarchical structure for webVR into scene\r\n gfx.scene.add(this._user);\r\n // turn on webvr transformation\r\n gfx.scene.add(this._molContainer);\r\n this._molContainer.add(gfx.root);\r\n\r\n this._controller1 = renderer.xr.getController(0);\r\n this._controller2 = renderer.xr.getController(1);\r\n const mesh = this._createControllerMesh();\r\n this._controller1.add(mesh);\r\n this._controller2.add(mesh.clone());\r\n this._user.add(this._controller1);\r\n this._user.add(this._controller2);\r\n }\r\n\r\n _setControllersListeners() {\r\n this._controller1.addEventListener('selectstart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller1.addEventListener('selectend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n this._controller2.addEventListener('selectstart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller2.addEventListener('selectend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n\r\n this._controller1.addEventListener('squeezestart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller1.addEventListener('squeezeend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n this._controller2.addEventListener('squeezestart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller2.addEventListener('squeezeend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n }\r\n\r\n disable() {\r\n if (!this._gfx) {\r\n return;\r\n }\r\n const { renderer, camera } = this._gfx;\r\n if (!renderer) {\r\n throw new Error('No renderer is available to toggle WebVR');\r\n }\r\n\r\n // nullify webxr callback for animation frame\r\n renderer.setAnimationLoop(null);\r\n const session = renderer.xr.getSession();\r\n if (session) {\r\n session.end();\r\n }\r\n renderer.xr.enabled = false;\r\n // remove button of VR entering\r\n if (this._button) {\r\n this._button.style.display = 'none';\r\n }\r\n // restore fog param\r\n settings.set('fog', this._mainFog);\r\n\r\n this._unplugVRNodesFromScene(camera);\r\n\r\n // make some Miew job\r\n if (this._onToggle) {\r\n this._onToggle(false);\r\n }\r\n }\r\n\r\n _unplugVRNodesFromScene(camera) {\r\n // restore common camera\r\n if (this._mainCamera && camera) {\r\n camera.copy(this._mainCamera);\r\n }\r\n // turn off webvr transformation\r\n const root = this._molContainer.children[0];\r\n if (root) {\r\n this._gfx.scene.add(root);\r\n }\r\n this._molContainer.parent.remove(this._molContainer);\r\n if (this._user) {\r\n this._gfx.scene.remove(this._user);\r\n }\r\n // free scene nodes\r\n this._molContainer = null;\r\n this._user = null;\r\n this._scalingPivot = null;\r\n this._user = null;\r\n this._controller1 = null;\r\n this._controller2 = null;\r\n }\r\n\r\n _createControllerMesh() {\r\n // visualize controllers with cylinders\r\n const geometry = new THREE.CylinderGeometry(0.04, 0.04, 0.3);\r\n const material = new UberMaterial({ lights: false, overrideColor: true });\r\n material.setUberOptions({ fixedColor: new THREE.Color(0x4444ff) });\r\n material.updateUniforms();\r\n const cylinder = new THREE.Mesh(geometry, material);\r\n cylinder.rotateX(-Math.PI / 2);\r\n return cylinder;\r\n }\r\n\r\n updateMoleculeScale() {\r\n if (!this._controller1 || !this._controller2) {\r\n return;\r\n }\r\n\r\n const self = this;\r\n // update molecule scaling by controllers\r\n if (self._pressedGripsCounter === 2) {\r\n // recalc scaling pivot\r\n gfxutils.getMiddlePoint(self._controller1.position, self._controller2.position, self._scalingPivot.position);\r\n // recalc scaler\r\n const dist = self._controller1.position.distanceTo(self._controller2.position);\r\n const scaler = dist / self._distance;\r\n self._scalingPivot.scale.multiplyScalar(scaler);\r\n // save cur distance for next frame\r\n self._distance = dist;\r\n }\r\n }\r\n\r\n /**\r\n * Reposition molecule right before the camera.\r\n * @note The proper way is to initiate headset in the place of common Miew's camera.\r\n * But threejs limitations on setting new XRReferenceSpace enforce the molecule repositioning\r\n * Hope, something will change.\r\n */\r\n moveSceneBehindHeadset() {\r\n const gfx = this._gfx;\r\n const { camera } = gfx;\r\n\r\n // set container position in camera space\r\n const container = this._molContainer;\r\n container.matrix.identity();\r\n container.position.set(0, 0, -4.0);\r\n container.updateMatrix();\r\n\r\n // update container world matrix\r\n container.matrixWorld.multiplyMatrices(camera.matrixWorld, container.matrix);\r\n // readd to scene\r\n gfx.scene.addSavingWorldTransform(container);\r\n if (this._onToggle) {\r\n this._onToggle(true);\r\n }\r\n }\r\n\r\n getCanvas() {\r\n const gfx = this._gfx;\r\n return (gfx && gfx.renderer) ? gfx.renderer.domElement : null;\r\n }\r\n}\r\n","/* global PACKAGE_VERSION:false */\r\nimport _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport { Spinner } from 'spin.js';\r\nimport Stats from './gfx/Stats';\r\nimport utils from './utils';\r\nimport JobHandle from './utils/JobHandle';\r\nimport options from './options';\r\nimport settings from './settings';\r\nimport chem from './chem';\r\nimport Visual from './Visual';\r\nimport ComplexVisual from './ComplexVisual';\r\nimport Complex from './chem/Complex';\r\nimport VolumeVisual from './VolumeVisual';\r\nimport io from './io/io';\r\nimport modes from './gfx/modes';\r\nimport colorers from './gfx/colorers';\r\nimport palettes from './gfx/palettes';\r\nimport materials from './gfx/materials';\r\nimport Representation from './gfx/Representation';\r\nimport CSS2DRenderer from './gfx/CSS2DRenderer';\r\nimport ObjectControls from './ui/ObjectControls';\r\nimport Picker from './ui/Picker';\r\nimport Axes from './gfx/Axes';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport meshutils from './gfx/meshutils';\r\nimport FrameInfo from './gfx/FrameInfo';\r\nimport meshes from './gfx/meshes/meshes';\r\nimport LinesObject from './gfx/objects/LinesObj';\r\nimport UberMaterial from './gfx/shaders/UberMaterial';\r\nimport OutlineMaterial from './gfx/shaders/OutlineMaterial';\r\nimport FXAAMaterial from './gfx/shaders/FXAAMaterial';\r\nimport AOMaterial from './gfx/shaders/AOMaterial';\r\nimport AOHorBlurMaterial from './gfx/shaders/AOHorBlurMaterial';\r\nimport AOVertBlurWithBlendMaterial from './gfx/shaders/AOVertBlurWithBlendMaterial';\r\nimport AnaglyphMaterial from './gfx/shaders/AnaglyphMaterial';\r\nimport VolumeMaterial from './gfx/shaders/VolumeMaterial';\r\nimport ViewInterpolator from './gfx/ViewInterpolator';\r\nimport EventDispatcher from './utils/EventDispatcher';\r\nimport logger from './utils/logger';\r\nimport Cookies from './utils/Cookies';\r\nimport capabilities from './gfx/capabilities';\r\nimport WebVRPoC from './gfx/vr/WebVRPoC';\r\nimport vertexScreenQuadShader from './gfx/shaders/ScreenQuad.vert';\r\nimport fragmentScreenQuadFromDistTex from './gfx/shaders/ScreenQuadFromDistortionTex.frag';\r\nimport getTopWindow from './utils/getTopWindow';\r\n\r\nconst {\r\n selectors,\r\n Atom,\r\n Residue,\r\n Chain,\r\n Molecule,\r\n} = chem;\r\n\r\nconst EDIT_MODE = { COMPLEX: 0, COMPONENT: 1, FRAGMENT: 2 };\r\n\r\nconst LOADER_NOT_FOUND = 'Could not find suitable loader for this source';\r\nconst PARSER_NOT_FOUND = 'Could not find suitable parser for this source';\r\n\r\n// Color management changed a lot in threejs 152+ version.\r\n// To keep miew colors we disable the new color management system\r\nTHREE.ColorManagement.enabled = false;\r\n\r\nconst { createElement } = utils;\r\n\r\nfunction updateFogRange(fog, center, radius) {\r\n fog.near = center - radius * settings.now.fogNearFactor;\r\n fog.far = center + radius * settings.now.fogFarFactor;\r\n}\r\n\r\nfunction removeExtension(fileName) {\r\n const dot = fileName.lastIndexOf('.');\r\n if (dot >= 0) {\r\n fileName = fileName.substr(0, dot);\r\n }\r\n return fileName;\r\n}\r\n\r\nfunction hasValidResidues(complex) {\r\n let hasValidRes = false;\r\n complex.forEachComponent((component) => {\r\n component.forEachResidue((residue) => {\r\n if (residue._isValid) {\r\n hasValidRes = true;\r\n }\r\n });\r\n });\r\n return hasValidRes;\r\n}\r\n\r\nfunction reportProgress(log, action, percent) {\r\n const TOTAL_PERCENT = 100;\r\n if (percent !== undefined) {\r\n log.debug(`${action}... ${Math.floor(percent * TOTAL_PERCENT)}%`);\r\n } else {\r\n log.debug(`${action}...`);\r\n }\r\n}\r\n\r\nfunction chooseFogColor() {\r\n return settings.now.fogColorEnable ? settings.now.fogColor : settings.now.bg.color;\r\n}\r\n\r\n// ////////////////////////////////////////////////////////////////////////////\r\n\r\n/**\r\n * Main 3D Molecular Viewer class.\r\n *\r\n * @param {object} opts - Viewer options.\r\n * @param {HTMLElement=} opts.container - DOM element that serves as a viewer container.\r\n * @param {object=} opts.settings - An object with properties to override default settings.\r\n * @param {string=} opts.settingsCookie='settings' - The name of the cookie to save current settings to.\r\n * @param {string=} opts.cookiePath='/' - The path option for cookies. Defaults to root.\r\n *\r\n * @exports Miew\r\n * @constructor\r\n */\r\nfunction Miew(opts) {\r\n EventDispatcher.call(this);\r\n this._opts = _.merge({\r\n settingsCookie: 'settings',\r\n cookiePath: '/',\r\n }, opts);\r\n /** @type {?object} */\r\n this._gfx = null;\r\n /** @type {ViewInterpolator} */\r\n this._interpolator = new ViewInterpolator();\r\n /** @type {HTMLElement} */\r\n this._container = (opts && opts.container)\r\n || document.getElementById('miew-container')\r\n || _.head(document.getElementsByClassName('miew-container'))\r\n || document.body;\r\n /** @type {HTMLElement} */\r\n this._containerRoot = this._container;\r\n\r\n /** @type {boolean} */\r\n this._running = false;\r\n /** @type {boolean} */\r\n this._halting = false;\r\n /** @type {boolean} */\r\n this._building = false;\r\n /** @type {boolean} */\r\n this._needRender = true;\r\n /** @type {boolean} */\r\n this._hotKeysEnabled = true;\r\n\r\n /** @type {Settings} */\r\n this.settings = settings;\r\n const log = logger;\r\n log.console = DEBUG;\r\n log.level = DEBUG ? 'debug' : 'info';\r\n /**\r\n * @type {Logger}\r\n * @example\r\n * miew.logger.addEventListener('message', function _onLogMessage(evt) {\r\n * console.log(evt.message);\r\n * });\r\n */\r\n this.logger = log;\r\n\r\n this._cookies = new Cookies(this);\r\n this.restoreSettings();\r\n if (opts && opts.settings) {\r\n this.settings.set(opts.settings);\r\n }\r\n\r\n /** @type {?Spinner} */\r\n this._spinner = null;\r\n /** @type {JobHandle[]} */\r\n this._loading = [];\r\n /** @type {?number}\r\n * @deprecated until Animation system refactoring\r\n */\r\n this._animInterval = null;\r\n\r\n /** @type {object} */\r\n this._visuals = {};\r\n /** @type {?string} */\r\n this._curVisualName = null;\r\n\r\n /** @type {array} */\r\n this._objects = [];\r\n\r\n /** @type {object} */\r\n this._sourceWindow = null;\r\n\r\n this.reset();\r\n\r\n if (this._repr) {\r\n log.debug(`Selected ${this._repr.mode.name} mode with ${this._repr.colorer.name} colorer.`);\r\n }\r\n\r\n const self = this;\r\n Miew.registeredPlugins.forEach((plugin) => {\r\n plugin.call(self);\r\n });\r\n\r\n this._initOnSettingsChanged();\r\n}\r\n\r\nMiew.prototype = Object.create(EventDispatcher.prototype);\r\nMiew.prototype.constructor = Miew;\r\n\r\nMiew.prototype.getMaxRepresentationCount = function () {\r\n return ComplexVisual.NUM_REPRESENTATION_BITS;\r\n};\r\n\r\n/**\r\n * Replace viewer container contents with a DOM element.\r\n * @param {HTMLElement} container - parent container.\r\n * @param {HTMLElement} element - DOM element to show.\r\n * @private\r\n */\r\nfunction _setContainerContents(container, element) {\r\n const parent = container;\r\n while (parent.firstChild) {\r\n parent.removeChild(parent.firstChild);\r\n }\r\n parent.appendChild(element);\r\n}\r\n\r\n/**\r\n * Update Shadow Camera target position and frustum.\r\n * @private\r\n */\r\nMiew.prototype._updateShadowCamera = (function () {\r\n const shadowMatrix = new THREE.Matrix4();\r\n const direction = new THREE.Vector3();\r\n const OBB = { center: new THREE.Vector3(), halfSize: new THREE.Vector3() };\r\n\r\n return function () {\r\n this._gfx.scene.updateMatrixWorld();\r\n for (let i = 0; i < this._gfx.scene.children.length; i++) {\r\n if (this._gfx.scene.children[i].type === 'DirectionalLight') {\r\n const light = this._gfx.scene.children[i];\r\n shadowMatrix.copy(light.shadow.camera.matrixWorldInverse);\r\n this.getOBB(shadowMatrix, OBB);\r\n\r\n direction.subVectors(light.target.position, light.position);\r\n light.position.subVectors(OBB.center, direction);\r\n light.target.position.copy(OBB.center);\r\n\r\n light.shadow.bias = 0.09;\r\n light.shadow.camera.bottom = -OBB.halfSize.y;\r\n light.shadow.camera.top = OBB.halfSize.y;\r\n light.shadow.camera.right = OBB.halfSize.x;\r\n light.shadow.camera.left = -OBB.halfSize.x;\r\n light.shadow.camera.near = direction.length() - OBB.halfSize.z;\r\n light.shadow.camera.far = direction.length() + OBB.halfSize.z;\r\n\r\n light.shadow.camera.updateProjectionMatrix();\r\n }\r\n }\r\n };\r\n}());\r\n\r\n/**\r\n * Initialize the viewer.\r\n * @returns {boolean} true on success.\r\n * @throws Forwards exception raised during initialization.\r\n * @see Miew#term\r\n */\r\nMiew.prototype.init = function () {\r\n const container = this._container;\r\n const elem = utils.createElement('div', { class: 'miew-canvas' });\r\n _setContainerContents(container, elem);\r\n this._container = elem;\r\n\r\n const frag = document.createDocumentFragment();\r\n frag.appendChild(this._msgMode = createElement(\r\n 'div',\r\n { class: 'mode-message overlay' },\r\n createElement('p', {}, 'COMPONENT EDIT MODE'),\r\n ));\r\n frag.appendChild(this._msgAtomInfo = createElement(\r\n 'div',\r\n { class: 'atom-info overlay' },\r\n createElement('p', {}, ''),\r\n ));\r\n container.appendChild(frag);\r\n\r\n if (this._gfx !== null) { // block double init\r\n return true;\r\n }\r\n\r\n const self = this;\r\n this._showMessage('Viewer is being initialized...');\r\n try {\r\n this._initGfx();\r\n\r\n this._initListeners();\r\n this._spinner = new Spinner({\r\n lines: 13,\r\n length: 28,\r\n width: 14,\r\n radius: 42,\r\n color: '#fff',\r\n zIndex: 700,\r\n });\r\n\r\n const target = getTopWindow();\r\n target.addEventListener('keydown', (event) => {\r\n self._onKeyDown(event);\r\n });\r\n\r\n target.addEventListener('keyup', (event) => {\r\n self._onKeyUp(event);\r\n });\r\n\r\n this._objectControls = new ObjectControls(\r\n this._gfx.root,\r\n this._gfx.pivot,\r\n this._gfx.camera,\r\n this._gfx.renderer.domElement,\r\n () => self._getAltObj(),\r\n );\r\n this._objectControls.addEventListener('change', (e) => {\r\n if (settings.now.shadow.on) {\r\n self._updateShadowCamera();\r\n }\r\n // route rotate, zoom, translate and translatePivot events to the external API\r\n switch (e.action) {\r\n case 'rotate':\r\n self.dispatchEvent({ type: 'rotate', quaternion: e.quaternion });\r\n break;\r\n case 'zoom':\r\n self.dispatchEvent({ type: 'zoom', factor: e.factor });\r\n break;\r\n default:\r\n self.dispatchEvent({ type: e.action });\r\n }\r\n self.dispatchEvent({ type: 'transform' });\r\n self._needRender = true;\r\n });\r\n\r\n const gfx = this._gfx;\r\n this._picker = new Picker(gfx.root, gfx.camera, gfx.renderer.domElement);\r\n this._picker.addEventListener('newpick', (event) => {\r\n self._onPick(event);\r\n });\r\n this._picker.addEventListener('dblclick', (event) => {\r\n self.center(event);\r\n });\r\n } catch (error) {\r\n if (error.name === 'TypeError' && error.message === 'Cannot read property \\'getExtension\\' of null') {\r\n this._showMessage('Could not create WebGL context.');\r\n } else if (error.message.search(/webgl/i) > 1) {\r\n this._showMessage(error.message);\r\n } else {\r\n this._showMessage('Viewer initialization failed.');\r\n throw error;\r\n }\r\n return false;\r\n }\r\n\r\n // automatically load default file\r\n const file = this._opts && this._opts.load;\r\n if (file) {\r\n const type = this._opts && this._opts.type;\r\n this.load(file, { fileType: type, keepRepsInfo: true });\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Terminate the viewer completely.\r\n * @see Miew#init\r\n */\r\nMiew.prototype.term = function () {\r\n this._showMessage('Viewer has been terminated.');\r\n this._loading.forEach((job) => {\r\n job.cancel();\r\n });\r\n this._loading.length = 0;\r\n this.halt();\r\n this._gfx = null;\r\n};\r\n\r\n/**\r\n * Display message inside the viewer container, hiding WebGL canvas.\r\n * @param {string} msg - Message to show.\r\n * @private\r\n */\r\nMiew.prototype._showMessage = function (msg) {\r\n const element = document.createElement('div');\r\n element.setAttribute('class', 'miew-message');\r\n element.appendChild(document.createElement('p')).appendChild(document.createTextNode(msg));\r\n _setContainerContents(this._container, element);\r\n};\r\n\r\n/**\r\n * Display WebGL canvas inside the viewer container, hiding any message shown.\r\n * @private\r\n */\r\nMiew.prototype._showCanvas = function () {\r\n _setContainerContents(this._container, this._gfx.renderer.domElement);\r\n};\r\n\r\nMiew.prototype._requestAnimationFrame = function (callback) {\r\n const { xr } = this._gfx.renderer;\r\n if (xr && xr.enabled) {\r\n this._gfx.renderer.setAnimationLoop(callback);\r\n return;\r\n }\r\n requestAnimationFrame(callback);\r\n};\r\n\r\nfunction arezSpritesSupported(context) {\r\n return context.getExtension('EXT_frag_depth');\r\n}\r\n\r\nfunction isAOSupported(context) {\r\n return (context.getExtension('WEBGL_depth_texture')\r\n && context.getExtension('WEBGL_draw_buffers'));\r\n}\r\n\r\n/**\r\n * Initialize WebGL and set 3D scene up.\r\n * @private\r\n */\r\nMiew.prototype._initGfx = function () {\r\n const gfx = {\r\n width: this._container.clientWidth,\r\n height: this._container.clientHeight,\r\n };\r\n\r\n const webGLOptions = { preserveDrawingBuffer: true, alpha: true, premultipliedAlpha: false };\r\n if (settings.now.antialias) {\r\n webGLOptions.antialias = true;\r\n }\r\n\r\n gfx.renderer2d = new CSS2DRenderer();\r\n\r\n gfx.renderer = new THREE.WebGL1Renderer(webGLOptions);\r\n gfx.renderer.shadowMap.enabled = settings.now.shadow.on;\r\n gfx.renderer.shadowMap.autoUpdate = false;\r\n gfx.renderer.shadowMap.type = THREE.PCFShadowMap;\r\n capabilities.init(gfx.renderer);\r\n\r\n // z-sprites and ambient occlusion possibility\r\n if (!arezSpritesSupported(gfx.renderer.getContext())) {\r\n settings.set('zSprites', false);\r\n }\r\n if (!isAOSupported(gfx.renderer.getContext())) {\r\n settings.set('ao', false);\r\n }\r\n\r\n gfx.renderer.autoClear = false;\r\n gfx.renderer.setPixelRatio(window.devicePixelRatio);\r\n gfx.renderer.setSize(gfx.width, gfx.height);\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.clearColor();\r\n\r\n gfx.renderer2d.setSize(gfx.width, gfx.height);\r\n\r\n gfx.camera = new THREE.PerspectiveCamera(\r\n settings.now.camFov,\r\n gfx.width / gfx.height,\r\n settings.now.camNear,\r\n settings.now.camFar,\r\n );\r\n gfx.camera.setMinimalFov(settings.now.camFov);\r\n gfx.camera.position.z = settings.now.camDistance;\r\n gfx.camera.updateProjectionMatrix();\r\n gfx.camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n gfx.camera.layers.enable(gfxutils.LAYERS.VOLUME);\r\n gfx.camera.layers.enable(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n\r\n gfx.stereoCam = new THREE.StereoCamera();\r\n\r\n gfx.scene = new THREE.Scene();\r\n\r\n const color = chooseFogColor();\r\n gfx.scene.fog = new THREE.Fog(color, settings.now.camNear, settings.now.camFar);\r\n\r\n gfx.root = new gfxutils.RCGroup();\r\n gfx.scene.add(gfx.root);\r\n\r\n gfx.pivot = new gfxutils.RCGroup();\r\n gfx.root.add(gfx.pivot);\r\n\r\n gfx.selectionScene = new THREE.Scene();\r\n gfx.selectionRoot = new THREE.Group();\r\n gfx.selectionRoot.matrixAutoUpdate = false;\r\n gfx.selectionScene.add(gfx.selectionRoot);\r\n\r\n gfx.selectionPivot = new THREE.Group();\r\n gfx.selectionPivot.matrixAutoUpdate = false;\r\n gfx.selectionRoot.add(gfx.selectionPivot);\r\n\r\n const light12 = new THREE.DirectionalLight(0xffffff, 0.45);\r\n light12.position.set(0, 0.414, 1);\r\n light12.layers.enable(gfxutils.LAYERS.TRANSPARENT);\r\n light12.castShadow = true;\r\n light12.shadow.bias = 0.09;\r\n light12.shadow.radius = settings.now.shadow.radius;\r\n light12.shadow.camera.layers.set(gfxutils.LAYERS.SHADOWMAP);\r\n\r\n const pixelRatio = gfx.renderer.getPixelRatio();\r\n const shadowMapSize = Math.max(gfx.width, gfx.height) * pixelRatio;\r\n light12.shadow.mapSize.width = shadowMapSize;\r\n light12.shadow.mapSize.height = shadowMapSize;\r\n light12.target.position.set(0.0, 0.0, 0.0);\r\n gfx.scene.add(light12);\r\n gfx.scene.add(light12.target);\r\n\r\n const light3 = new THREE.AmbientLight(0x666666);\r\n light3.layers.enable(gfxutils.LAYERS.TRANSPARENT);\r\n gfx.scene.add(light3);\r\n\r\n // add axes\r\n gfx.axes = new Axes(gfx.root, gfx.camera);\r\n const deviceWidth = gfx.width * pixelRatio;\r\n const deviceHeight = gfx.height * pixelRatio;\r\n\r\n gfx.offscreenBuf = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat, depthBuffer: true,\r\n },\r\n );\r\n\r\n if (gfx.renderer.getContext().getExtension('WEBGL_depth_texture')) {\r\n gfx.offscreenBuf.depthTexture = new THREE.DepthTexture();\r\n gfx.offscreenBuf.depthTexture.type = THREE.UnsignedShortType;\r\n }\r\n\r\n gfx.offscreenBuf2 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf3 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf4 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.volBFTex = gfx.offscreenBuf3;\r\n gfx.volFFTex = gfx.offscreenBuf4;\r\n gfx.volWFFTex = gfx.offscreenBuf;\r\n\r\n // use float textures for volume rendering if possible\r\n if (gfx.renderer.getContext().getExtension('OES_texture_float')) {\r\n gfx.offscreenBuf5 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf6 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf7 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: true,\r\n },\r\n );\r\n\r\n gfx.volBFTex = gfx.offscreenBuf5;\r\n gfx.volFFTex = gfx.offscreenBuf6;\r\n gfx.volWFFTex = gfx.offscreenBuf7;\r\n } else {\r\n this.logger.warn('Device doesn\\'t support OES_texture_float extension');\r\n }\r\n\r\n gfx.stereoBufL = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.stereoBufR = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n this._gfx = gfx;\r\n this._showCanvas();\r\n\r\n this._embedWebXR(settings.now.stereo === 'WEBVR');\r\n\r\n this._container.appendChild(gfx.renderer2d.getElement());\r\n\r\n // add FPS counter\r\n const stats = new Stats();\r\n stats.domElement.style.position = 'absolute';\r\n stats.domElement.style.right = '0';\r\n stats.domElement.style.bottom = '0';\r\n this._container.appendChild(stats.domElement);\r\n this._fps = stats;\r\n this._fps.show(settings.now.fps);\r\n};\r\n\r\n/**\r\n * Setup event listeners.\r\n * @private\r\n */\r\nMiew.prototype._initListeners = function () {\r\n const self = this;\r\n window.addEventListener('resize', () => {\r\n self._onResize();\r\n });\r\n};\r\n\r\n/**\r\n * Try to add numbers to the base name to make it unique among visuals\r\n * @private\r\n */\r\nMiew.prototype._makeUniqueVisualName = function (baseName) {\r\n if (!baseName) {\r\n return Math.random().toString();\r\n }\r\n\r\n let name = baseName;\r\n let suffix = 1;\r\n while (this._visuals.hasOwnProperty(name)) {\r\n name = `${baseName} (${suffix.toString()})`;\r\n suffix++;\r\n }\r\n\r\n return name;\r\n};\r\n\r\n/**\r\n * Add visual to the viewer\r\n * @private\r\n */\r\nMiew.prototype._addVisual = function (visual) {\r\n if (!visual) {\r\n return null;\r\n }\r\n\r\n // change visual name in order to make it unique\r\n const name = this._makeUniqueVisualName(visual.name);\r\n visual.name = name;\r\n\r\n this._visuals[name] = visual;\r\n this._gfx.pivot.add(visual);\r\n if (visual.getSelectionGeo) {\r\n this._gfx.selectionPivot.add(visual.getSelectionGeo());\r\n }\r\n\r\n return name;\r\n};\r\n\r\n/**\r\n * Remove visual from the viewer\r\n * @private\r\n */\r\nMiew.prototype._removeVisual = function (visual) {\r\n let name = '';\r\n let obj = null;\r\n if (visual instanceof Visual) {\r\n ({ name } = visual);\r\n obj = visual;\r\n } else if (typeof visual === 'string') {\r\n name = visual;\r\n obj = this._visuals[name];\r\n }\r\n\r\n if (!obj || !this._visuals.hasOwnProperty(name) || this._visuals[name] !== obj) {\r\n return;\r\n }\r\n\r\n if (name === this._curVisualName) {\r\n this._curVisualName = undefined;\r\n }\r\n\r\n delete this._visuals[name];\r\n obj.release(); // removes nodes from scene\r\n\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Call specified function for each Visual\r\n * @private\r\n */\r\nMiew.prototype._forEachVisual = function (callback) {\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)) {\r\n callback(this._visuals[name]);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Release (destroy) all visuals in the scene\r\n * @private\r\n */\r\nMiew.prototype._releaseAllVisuals = function () {\r\n if (!this._gfx || !this._gfx.pivot) {\r\n return;\r\n }\r\n\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)) {\r\n this._visuals[name].release();\r\n }\r\n }\r\n\r\n this._visuals = {};\r\n};\r\n\r\n/**\r\n * Call specified function for each ComplexVisual\r\n * @private\r\n */\r\nMiew.prototype._forEachComplexVisual = function (callback) {\r\n if (!this._gfx || !this._gfx.pivot) {\r\n return;\r\n }\r\n\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)\r\n && this._visuals[name] instanceof ComplexVisual) {\r\n callback(this._visuals[name]);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Returns ComplexVisual with specified name, or current (if not found), or any, or null\r\n * @private\r\n */\r\nMiew.prototype._getComplexVisual = function (name) {\r\n name = name || this._curVisualName;\r\n let any = null;\r\n let named = null;\r\n this._forEachComplexVisual((visual) => {\r\n any = visual;\r\n if (visual.name === name) {\r\n named = visual;\r\n }\r\n });\r\n return named || any;\r\n};\r\n\r\n/**\r\n * Returns first found VolumeVisual (no more than one should be present actually)\r\n * @private\r\n */\r\nMiew.prototype._getVolumeVisual = function () {\r\n let any = null;\r\n this._forEachVisual((visual) => {\r\n if (visual instanceof VolumeVisual) {\r\n any = visual;\r\n }\r\n });\r\n return any;\r\n};\r\n\r\n/**\r\n * Returns ComplexVisual corresponding to specified complex\r\n * @private\r\n */\r\nMiew.prototype._getVisualForComplex = function (complex) {\r\n if (!complex) {\r\n return null;\r\n }\r\n\r\n let found = null;\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getComplex() === complex) {\r\n found = visual;\r\n }\r\n });\r\n return found;\r\n};\r\n\r\n/*\r\n * Get a list of names of visuals currently shown by the viewer\r\n */\r\nMiew.prototype.getVisuals = function () {\r\n return Object.keys(this._visuals);\r\n};\r\n\r\n/*\r\n * Get complex visuals count\r\n */\r\nMiew.prototype.getComplexVisualsCount = function () {\r\n let count = 0;\r\n this._forEachComplexVisual(() => count++);\r\n return count;\r\n};\r\n\r\n/*\r\n * Get current visual\r\n */\r\nMiew.prototype.getCurrentVisual = function () {\r\n return this._curVisualName;\r\n};\r\n\r\n/*\r\n * Set current visual.\r\n * All further operations will be performed on this visual (complex) if not stated otherwise.\r\n */\r\nMiew.prototype.setCurrentVisual = function (name) {\r\n if (!this._visuals[name]) {\r\n return;\r\n }\r\n\r\n this._curVisualName = name;\r\n};\r\n\r\n/**\r\n * Run the viewer, start processing update/render frames periodically.\r\n * Has no effect if already running.\r\n * @see Miew#halt\r\n */\r\nMiew.prototype.run = function () {\r\n if (!this._running) {\r\n this._running = true;\r\n if (this._halting) {\r\n this._halting = false;\r\n return;\r\n }\r\n\r\n this._objectControls.enable(true);\r\n this._interpolator.resume();\r\n\r\n this._requestAnimationFrame(() => this._onTick());\r\n }\r\n};\r\n\r\n/**\r\n * Request the viewer to stop.\r\n * Will be processed during the next frame.\r\n * @see Miew#run\r\n */\r\nMiew.prototype.halt = function () {\r\n if (this._running) {\r\n this._discardComponentEdit();\r\n this._discardFragmentEdit();\r\n this._objectControls.enable(false);\r\n this._interpolator.pause();\r\n this._halting = true;\r\n }\r\n};\r\n\r\n/**\r\n * Request the viewer to start / stop responsing\r\n * on hot keys.\r\n * @param enabled - start (true) or stop (false) response on hot keys.\r\n */\r\nMiew.prototype.enableHotKeys = function (enabled) {\r\n this._hotKeysEnabled = enabled;\r\n this._objectControls.enableHotkeys(enabled);\r\n};\r\n\r\n/**\r\n * Callback which processes window resize.\r\n * @private\r\n */\r\nMiew.prototype._onResize = function () {\r\n const gfx = this._gfx;\r\n if (!gfx) {\r\n return;\r\n }\r\n\r\n this._needRender = true;\r\n\r\n gfx.width = this._container.clientWidth;\r\n gfx.height = this._container.clientHeight;\r\n\r\n gfx.camera.aspect = gfx.width / gfx.height;\r\n gfx.camera.setMinimalFov(settings.now.camFov);\r\n gfx.camera.updateProjectionMatrix();\r\n\r\n gfx.renderer.setSize(gfx.width, gfx.height);\r\n gfx.renderer2d.setSize(gfx.width, gfx.height);\r\n\r\n this.dispatchEvent({ type: 'resize' });\r\n};\r\n\r\nMiew.prototype._resizeOffscreenBuffers = function (width, height, stereo) {\r\n const gfx = this._gfx;\r\n stereo = stereo || 'NONE';\r\n const isAnaglyph = (stereo === 'NONE' || stereo === 'ANAGLYPH');\r\n const multi = isAnaglyph ? 1 : 0.5;\r\n gfx.offscreenBuf.setSize(multi * width, height);\r\n gfx.offscreenBuf2.setSize(multi * width, height);\r\n gfx.offscreenBuf3.setSize(multi * width, height);\r\n gfx.offscreenBuf4.setSize(multi * width, height);\r\n if (gfx.offscreenBuf5) {\r\n gfx.offscreenBuf5.setSize(multi * width, height);\r\n }\r\n if (gfx.offscreenBuf6) {\r\n gfx.offscreenBuf6.setSize(multi * width, height);\r\n }\r\n if (gfx.offscreenBuf7) {\r\n gfx.offscreenBuf7.setSize(multi * width, height);\r\n }\r\n if (isAnaglyph) {\r\n gfx.stereoBufL.setSize(width, height);\r\n gfx.stereoBufR.setSize(width, height);\r\n }\r\n};\r\n\r\n/**\r\n * Callback which processes update/render frames.\r\n * @private\r\n */\r\nMiew.prototype._onTick = function () {\r\n if (this._halting) {\r\n this._running = false;\r\n this._halting = false;\r\n return;\r\n }\r\n\r\n this._fps.update();\r\n\r\n this._requestAnimationFrame(() => this._onTick());\r\n\r\n this._onUpdate();\r\n if (this._needRender) {\r\n this._onRender();\r\n this._needRender = !settings.now.suspendRender || settings.now.stereo === 'WEBVR';\r\n }\r\n};\r\n\r\nMiew.prototype._getBSphereRadius = function () {\r\n // calculate radius that would include all visuals\r\n let radius = 0;\r\n this._forEachVisual((visual) => {\r\n radius = Math.max(radius, visual.getBoundaries().boundingSphere.radius);\r\n });\r\n return radius * this._objectControls.getScale();\r\n};\r\n\r\n/**\r\n * Calculate bounding box that would include all visuals and being axis aligned in world defined by\r\n * transformation matrix: matrix\r\n * @param {Matrix4} matrix - transformation matrix.\r\n * @param {object} OBB - calculating bounding box.\r\n * @param {Vector3} OBB.center - OBB center.\r\n * @param {Vector3} OBB.halfSize - half magnitude of OBB sizes.\r\n */\r\nMiew.prototype.getOBB = (function () {\r\n const _bSphereForOneVisual = new THREE.Sphere();\r\n const _bBoxForOneVisual = new THREE.Box3();\r\n const _bBox = new THREE.Box3();\r\n\r\n const _invMatrix = new THREE.Matrix4();\r\n\r\n const _points = [\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n ];\r\n\r\n return function (matrix, OBB) {\r\n _bBox.makeEmpty();\r\n\r\n this._forEachVisual((visual) => {\r\n _bSphereForOneVisual.copy(visual.getBoundaries().boundingSphere);\r\n _bSphereForOneVisual.applyMatrix4(visual.matrixWorld).applyMatrix4(matrix);\r\n _bSphereForOneVisual.getBoundingBox(_bBoxForOneVisual);\r\n _bBox.union(_bBoxForOneVisual);\r\n });\r\n _bBox.getCenter(OBB.center);\r\n\r\n _invMatrix.copy(matrix).invert();\r\n OBB.center.applyMatrix4(_invMatrix);\r\n\r\n const { min } = _bBox;\r\n const { max } = _bBox;\r\n _points[0].set(min.x, min.y, min.z); // 000\r\n _points[1].set(max.x, min.y, min.z); // 100\r\n _points[2].set(min.x, max.y, min.z); // 010\r\n _points[3].set(min.x, min.y, max.z); // 001\r\n for (let i = 0, l = _points.length; i < l; i++) {\r\n _points[i].applyMatrix4(_invMatrix);\r\n }\r\n\r\n OBB.halfSize.set(\r\n Math.abs(_points[0].x - _points[1].x),\r\n Math.abs(_points[0].y - _points[2].y),\r\n Math.abs(_points[0].z - _points[3].z),\r\n ).multiplyScalar(0.5);\r\n };\r\n}());\r\n\r\nMiew.prototype._updateFog = function () {\r\n const gfx = this._gfx;\r\n\r\n if (settings.now.fog) {\r\n if (typeof gfx.scene.fog === 'undefined' || gfx.scene.fog === null) {\r\n const color = chooseFogColor();\r\n gfx.scene.fog = new THREE.Fog(color);\r\n this._setUberMaterialValues({ fog: settings.now.fog });\r\n }\r\n updateFogRange(gfx.scene.fog, gfx.camera.position.z, this._getBSphereRadius());\r\n } else if (gfx.scene.fog) {\r\n gfx.scene.fog = undefined;\r\n this._setUberMaterialValues({ fog: settings.now.fog });\r\n }\r\n};\r\n\r\nMiew.prototype._onUpdate = function () {\r\n if (this.isScriptingCommandAvailable !== undefined && this.isScriptingCommandAvailable() && !this._building) {\r\n this.callNextCmd();\r\n }\r\n\r\n this._objectControls.update();\r\n\r\n this._forEachComplexVisual((visual) => {\r\n visual.getComplex().update();\r\n });\r\n\r\n if (settings.now.autobuild && !this._loading.length && !this._building && this._needRebuild()) {\r\n this.rebuild();\r\n }\r\n\r\n if (!this._loading.length && !this._building && !this._needRebuild()) {\r\n this._updateView();\r\n }\r\n\r\n this._updateFog();\r\n\r\n if (this._gfx.renderer.xr.enabled) {\r\n this.webVR.updateMoleculeScale();\r\n }\r\n};\r\n\r\nMiew.prototype._onRender = function () {\r\n const gfx = this._gfx;\r\n\r\n // update all matrices\r\n gfx.scene.updateMatrixWorld();\r\n gfx.camera.updateMatrixWorld();\r\n\r\n this._clipPlaneUpdateValue(this._getBSphereRadius());\r\n this._fogFarUpdateValue();\r\n\r\n gfx.renderer.setRenderTarget(null);\r\n gfx.renderer.clear();\r\n\r\n this._renderFrame(settings.now.stereo);\r\n};\r\n\r\nMiew.prototype._renderFrame = (function () {\r\n const _anaglyphMat = new AnaglyphMaterial();\r\n const _size = new THREE.Vector2();\r\n\r\n return function (stereo) {\r\n const gfx = this._gfx;\r\n const { renderer } = gfx;\r\n\r\n renderer.getSize(_size);\r\n\r\n if (stereo !== 'NONE') {\r\n gfx.camera.focus = gfx.camera.position.z; // set focus to the center of the object\r\n gfx.stereoCam.aspect = 1.0;\r\n\r\n // in anaglyph mode we render full-size image for each eye\r\n // while in other stereo modes only half-size (two images on the screen)\r\n if (stereo === 'ANAGLYPH') {\r\n gfx.stereoCam.update(gfx.camera);\r\n } else {\r\n gfx.stereoCam.updateHalfSized(gfx.camera, settings.now.camFov);\r\n }\r\n }\r\n\r\n // resize offscreen buffers to match the target\r\n const pixelRatio = gfx.renderer.getPixelRatio();\r\n this._resizeOffscreenBuffers(_size.width * pixelRatio, _size.height * pixelRatio, stereo);\r\n\r\n this._renderShadowMap();\r\n\r\n switch (stereo) {\r\n case 'WEBVR':\r\n case 'NONE':\r\n this._renderScene(gfx.camera, false);\r\n break;\r\n case 'SIMPLE':\r\n case 'DISTORTED':\r\n renderer.setScissorTest(true);\r\n\r\n renderer.setScissor(0, 0, _size.width / 2, _size.height);\r\n renderer.setViewport(0, 0, _size.width / 2, _size.height);\r\n this._renderScene(this._gfx.stereoCam.cameraL, stereo === 'DISTORTED');\r\n\r\n renderer.setScissor(_size.width / 2, 0, _size.width / 2, _size.height);\r\n renderer.setViewport(_size.width / 2, 0, _size.width / 2, _size.height);\r\n this._renderScene(this._gfx.stereoCam.cameraR, stereo === 'DISTORTED');\r\n\r\n renderer.setScissorTest(false);\r\n break;\r\n case 'ANAGLYPH':\r\n this._renderScene(this._gfx.stereoCam.cameraL, false, gfx.stereoBufL);\r\n this._renderScene(this._gfx.stereoCam.cameraR, false, gfx.stereoBufR);\r\n renderer.setRenderTarget(null);\r\n _anaglyphMat.uniforms.srcL.value = gfx.stereoBufL.texture;\r\n _anaglyphMat.uniforms.srcR.value = gfx.stereoBufR.texture;\r\n gfx.renderer.renderScreenQuad(_anaglyphMat);\r\n break;\r\n default:\r\n }\r\n\r\n gfx.renderer2d.render(gfx.scene, gfx.camera);\r\n\r\n if (settings.now.axes && gfx.axes && !gfx.renderer.xr.enabled) {\r\n gfx.axes.render(renderer);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._onBgColorChanged = function () {\r\n const gfx = this._gfx;\r\n const color = chooseFogColor();\r\n if (gfx) {\r\n if (gfx.scene.fog) {\r\n gfx.scene.fog.color.set(color);\r\n }\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._onFogColorChanged = function () {\r\n const gfx = this._gfx;\r\n const color = chooseFogColor();\r\n if (gfx && gfx.scene.fog) {\r\n gfx.scene.fog.color.set(color);\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._setUberMaterialValues = function (values) {\r\n this._gfx.root.traverse((obj) => {\r\n if ((obj instanceof THREE.Mesh || obj instanceof THREE.LineSegments || obj instanceof THREE.Line)\r\n && obj.material instanceof UberMaterial) {\r\n obj.material.setValues(values);\r\n obj.material.needsUpdate = true;\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype._enableMRT = function (on, renderBuffer, textureBuffer) {\r\n const gfx = this._gfx;\r\n const gl = gfx.renderer.getContext();\r\n const ext = gl.getExtension('WEBGL_draw_buffers');\r\n const { properties } = gfx.renderer;\r\n\r\n if (!on) {\r\n ext.drawBuffersWEBGL([gl.COLOR_ATTACHMENT0, null]);\r\n return;\r\n }\r\n\r\n // take extra texture from Texture Buffer\r\n gfx.renderer.setRenderTarget(textureBuffer);\r\n const tx8 = properties.get(textureBuffer.texture).__webglTexture;\r\n gl.bindTexture(gl.TEXTURE_2D, tx8);\r\n\r\n // take texture and framebuffer from renderbuffer\r\n gfx.renderer.setRenderTarget(renderBuffer);\r\n const fb = properties.get(renderBuffer).__webglFramebuffer;\r\n const tx = properties.get(renderBuffer.texture).__webglTexture;\r\n\r\n // set framebuffer\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb);\r\n fb.width = renderBuffer.width;\r\n fb.height = renderBuffer.height;\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tx, 0);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, ext.COLOR_ATTACHMENT1_WEBGL, gl.TEXTURE_2D, tx8, 0);\r\n\r\n // mapping textures\r\n ext.drawBuffersWEBGL([gl.COLOR_ATTACHMENT0, ext.COLOR_ATTACHMENT1_WEBGL]);\r\n};\r\n\r\nMiew.prototype._renderScene = (function () {\r\n return function (camera, distortion, target) {\r\n distortion = distortion || false;\r\n target = target || null;\r\n\r\n const gfx = this._gfx;\r\n\r\n // render to offscreen buffer\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(target);\r\n gfx.renderer.clear();\r\n if (gfx.renderer.xr.enabled) {\r\n gfx.renderer.render(gfx.scene, camera);\r\n return;\r\n }\r\n\r\n // clean buffer for normals texture\r\n gfx.renderer.setClearColor(0x000000, 0.0);\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf4);\r\n gfx.renderer.clearColor();\r\n\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.clear();\r\n\r\n const bHaveComplexes = (this._getComplexVisual() !== null);\r\n const volumeVisual = this._getVolumeVisual();\r\n const ssao = bHaveComplexes && settings.now.ao;\r\n\r\n if (ssao) {\r\n this._enableMRT(true, gfx.offscreenBuf, gfx.offscreenBuf4);\r\n }\r\n\r\n if (settings.now.transparency === 'prepass') {\r\n this._renderWithPrepassTransparency(camera, gfx.offscreenBuf);\r\n } else if (settings.now.transparency === 'standard') {\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.render(gfx.scene, camera);\r\n }\r\n\r\n if (ssao) {\r\n this._enableMRT(false, null, null);\r\n }\r\n\r\n // when fxaa we should get resulting image in temp off-screen buff2 for further postprocessing with fxaa filter\r\n // otherwise we render to canvas\r\n const outline = bHaveComplexes && settings.now.outline.on;\r\n const fxaa = bHaveComplexes && settings.now.fxaa;\r\n const volume = (volumeVisual !== null) && (volumeVisual.getMesh().material != null);\r\n let dstBuffer = (ssao || outline || volume || fxaa || distortion) ? gfx.offscreenBuf2 : target;\r\n let srcBuffer = gfx.offscreenBuf;\r\n\r\n if (ssao) {\r\n this._performAO(\r\n srcBuffer,\r\n gfx.offscreenBuf4,\r\n gfx.offscreenBuf.depthTexture,\r\n dstBuffer,\r\n gfx.offscreenBuf3,\r\n gfx.offscreenBuf2,\r\n );\r\n if (!fxaa && !distortion && !volume && !outline) {\r\n srcBuffer = dstBuffer;\r\n dstBuffer = target;\r\n gfx.renderer.setRenderTarget(dstBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 1.0);\r\n }\r\n } else {\r\n // just copy color buffer to dst buffer\r\n gfx.renderer.setRenderTarget(dstBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 1.0);\r\n }\r\n\r\n // outline\r\n if (outline) {\r\n srcBuffer = dstBuffer;\r\n dstBuffer = (volume || fxaa || distortion) ? gfx.offscreenBuf3 : target;\r\n if (srcBuffer != null) {\r\n this._renderOutline(camera, gfx.offscreenBuf, srcBuffer, dstBuffer);\r\n }\r\n }\r\n\r\n // render selected part with outline material\r\n this._renderSelection(camera, gfx.offscreenBuf, dstBuffer);\r\n\r\n if (volume) {\r\n // copy current picture to the buffer that retains depth-data of the original molecule render\r\n // so that volume renderer could use depth-test\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.renderScreenQuadFromTex(dstBuffer.texture, 1.0);\r\n dstBuffer = gfx.offscreenBuf;\r\n this._renderVolume(volumeVisual, camera, dstBuffer, gfx.volBFTex, gfx.volFFTex, gfx.volWFFTex);\r\n\r\n // if this is the last stage -- copy image to target\r\n if (!fxaa && !distortion) {\r\n gfx.renderer.setRenderTarget(target);\r\n gfx.renderer.renderScreenQuadFromTex(dstBuffer.texture, 1.0);\r\n }\r\n }\r\n\r\n srcBuffer = dstBuffer;\r\n\r\n if (fxaa) {\r\n dstBuffer = distortion ? gfx.offscreenBuf4 : target;\r\n this._performFXAA(srcBuffer, dstBuffer);\r\n srcBuffer = dstBuffer;\r\n }\r\n\r\n if (distortion) {\r\n dstBuffer = target;\r\n this._performDistortion(srcBuffer, dstBuffer, true);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._performDistortion = (function () {\r\n const _scene = new THREE.Scene();\r\n const _camera = new THREE.OrthographicCamera(-1.0, 1.0, 1.0, -1.0, -500, 1000);\r\n\r\n const _material = new THREE.RawShaderMaterial({\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n aberration: { type: 'fv3', value: new THREE.Vector3(1.0) },\r\n },\r\n vertexShader: vertexScreenQuadShader,\r\n fragmentShader: fragmentScreenQuadFromDistTex,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n const _geo = gfxutils.buildDistorionMesh(10, 10, settings.now.debug.stereoBarrel);\r\n _scene.add(new meshes.Mesh(_geo, _material));\r\n\r\n return function (srcBuffer, targetBuffer, mesh) {\r\n this._gfx.renderer.setRenderTarget(targetBuffer);\r\n this._gfx.renderer.clear();\r\n\r\n if (mesh) {\r\n _material.uniforms.srcTex.value = srcBuffer.texture;\r\n _material.uniforms.aberration.value.set(0.995, 1.0, 1.01);\r\n this._gfx.renderer.render(_scene, _camera);\r\n } else {\r\n this._gfx.renderer.renderScreenQuadFromTexWithDistortion(srcBuffer, settings.now.debug.stereoBarrel);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._renderOutline = (function () {\r\n const _outlineMaterial = new OutlineMaterial({ depth: true });\r\n\r\n return function (camera, srcDepthBuffer, srcColorBuffer, targetBuffer) {\r\n const self = this;\r\n const gfx = self._gfx;\r\n\r\n // apply Sobel filter -- draw outline\r\n _outlineMaterial.uniforms.srcTex.value = srcColorBuffer.texture;\r\n _outlineMaterial.uniforms.srcDepthTex.value = srcDepthBuffer.depthTexture;\r\n _outlineMaterial.uniforms.srcTexSize.value.set(srcDepthBuffer.width, srcDepthBuffer.height);\r\n _outlineMaterial.uniforms.color.value = new THREE.Color(settings.now.outline.color);\r\n _outlineMaterial.uniforms.threshold.value = settings.now.outline.threshold;\r\n _outlineMaterial.uniforms.thickness.value = new THREE.Vector2(\r\n settings.now.outline.thickness,\r\n settings.now.outline.thickness,\r\n );\r\n\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuad(_outlineMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._renderShadowMap = (function () {\r\n const pars = { minFilter: THREE.NearestFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat };\r\n\r\n return function () {\r\n if (!settings.now.shadow.on) {\r\n return;\r\n }\r\n\r\n const gfx = this._gfx;\r\n const currentRenderTarget = gfx.renderer.getRenderTarget();\r\n const activeCubeFace = gfx.renderer.getActiveCubeFace();\r\n const activeMipmapLevel = gfx.renderer.getActiveMipmapLevel();\r\n\r\n const _state = gfx.renderer.state;\r\n\r\n // Set GL state for depth map.\r\n _state.setBlending(THREE.NoBlending);\r\n _state.buffers.color.setClear(1, 1, 1, 1);\r\n _state.buffers.depth.setTest(true);\r\n _state.setScissorTest(false);\r\n\r\n for (let i = 0; i < gfx.scene.children.length; i++) {\r\n if (gfx.scene.children[i].type === 'DirectionalLight') {\r\n const light = gfx.scene.children[i];\r\n\r\n if (light.shadow.map == null) {\r\n light.shadow.map = new THREE.WebGLRenderTarget(light.shadow.mapSize.width, light.shadow.mapSize.height, pars);\r\n light.shadow.camera.updateProjectionMatrix();\r\n }\r\n light.shadow.updateMatrices(light);\r\n\r\n gfx.renderer.setRenderTarget(light.shadow.map);\r\n gfx.renderer.clear();\r\n\r\n gfx.renderer.render(gfx.scene, light.shadow.camera);\r\n }\r\n }\r\n gfx.renderer.setRenderTarget(currentRenderTarget, activeCubeFace, activeMipmapLevel);\r\n };\r\n}());\r\n\r\n/**\r\n * Check if there is selection which must be rendered or not.\r\n * @private\r\n * @returns {boolean} true on existing selection to render\r\n */\r\nMiew.prototype._hasSelectionToRender = function () {\r\n const selPivot = this._gfx.selectionPivot;\r\n\r\n for (let i = 0; i < selPivot.children.length; i++) {\r\n const selPivotChild = selPivot.children[i];\r\n if (selPivotChild.children.length > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nMiew.prototype._renderSelection = (function () {\r\n const _outlineMaterial = new OutlineMaterial();\r\n\r\n return function (camera, srcBuffer, targetBuffer) {\r\n const self = this;\r\n const gfx = self._gfx;\r\n\r\n // clear offscreen buffer (leave z-buffer intact)\r\n gfx.renderer.setClearColor('black', 0);\r\n\r\n // render selection to offscreen buffer\r\n gfx.renderer.setRenderTarget(srcBuffer);\r\n gfx.renderer.clear(true, false, false);\r\n if (self._hasSelectionToRender()) {\r\n gfx.selectionRoot.matrix = gfx.root.matrix;\r\n gfx.selectionPivot.matrix = gfx.pivot.matrix;\r\n gfx.renderer.render(gfx.selectionScene, camera);\r\n } else {\r\n // just render something to force \"target clear\" operation to finish\r\n gfx.renderer.renderDummyQuad();\r\n }\r\n\r\n // overlay to screen\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 0.6);\r\n\r\n // apply Sobel filter -- draw outline\r\n _outlineMaterial.uniforms.srcTex.value = srcBuffer.texture;\r\n _outlineMaterial.uniforms.srcTexSize.value.set(srcBuffer.width, srcBuffer.height);\r\n gfx.renderer.renderScreenQuad(_outlineMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._checkVolumeRenderingSupport = function (renderTarget) {\r\n if (!renderTarget) {\r\n return false;\r\n }\r\n const gfx = this._gfx;\r\n const oldRT = gfx.renderer.getRenderTarget();\r\n\r\n gfx.renderer.setRenderTarget(renderTarget);\r\n const context = gfx.renderer.getContext();\r\n const result = context.checkFramebufferStatus(context.FRAMEBUFFER);\r\n gfx.renderer.setRenderTarget(oldRT);\r\n if (result !== context.FRAMEBUFFER_COMPLETE) {\r\n // floatFrameBufferWarning = ;\r\n this.logger.warn('Device doesn\\'t support electron density rendering');\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nMiew.prototype._renderVolume = (function () {\r\n const volumeBFMat = new VolumeMaterial.BackFacePosMaterial();\r\n const volumeFFMat = new VolumeMaterial.FrontFacePosMaterial();\r\n const cubeOffsetMat = new THREE.Matrix4().makeTranslation(0.5, 0.5, 0.5);\r\n const world2colorMat = new THREE.Matrix4();\r\n\r\n let volumeRenderingSupported;\r\n\r\n return function (volumeVisual, camera, dstBuf, tmpBuf1, tmpBuf2, tmpBuf3) {\r\n const gfx = this._gfx;\r\n\r\n if (typeof volumeRenderingSupported === 'undefined') {\r\n volumeRenderingSupported = this._checkVolumeRenderingSupport(tmpBuf1);\r\n }\r\n\r\n if (!volumeRenderingSupported) {\r\n return;\r\n }\r\n\r\n const mesh = volumeVisual.getMesh();\r\n\r\n mesh.rebuild(gfx.camera);\r\n\r\n // use main camera to prepare special textures to be used by volumetric rendering\r\n // these textures have the size of the window and are stored in offscreen buffers\r\n gfx.renderer.setClearColor('black', 0);\r\n gfx.renderer.setRenderTarget(tmpBuf1);\r\n gfx.renderer.clear();\r\n gfx.renderer.setRenderTarget(tmpBuf2);\r\n gfx.renderer.clear();\r\n gfx.renderer.setRenderTarget(tmpBuf3);\r\n gfx.renderer.clear();\r\n\r\n gfx.renderer.setRenderTarget(tmpBuf1);\r\n // draw plane with its own material, because it differs slightly from volumeBFMat\r\n camera.layers.set(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.scene.overrideMaterial = volumeBFMat;\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n gfx.renderer.setRenderTarget(tmpBuf2);\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.scene.overrideMaterial = volumeFFMat;\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n gfx.scene.overrideMaterial = null;\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n\r\n // prepare texture that contains molecule positions\r\n world2colorMat.copy(mesh.matrixWorld).invert();\r\n UberMaterial.prototype.uberOptions.world2colorMatrix.multiplyMatrices(cubeOffsetMat, world2colorMat);\r\n camera.layers.set(gfxutils.LAYERS.COLOR_FROM_POSITION);\r\n gfx.renderer.setRenderTarget(tmpBuf3);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // render volume\r\n const vm = mesh.material;\r\n vm.uniforms._BFRight.value = tmpBuf1.texture;\r\n vm.uniforms._FFRight.value = tmpBuf2.texture;\r\n vm.uniforms._WFFRight.value = tmpBuf3.texture;\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.renderer.setRenderTarget(dstBuf);\r\n gfx.renderer.render(gfx.scene, camera);\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n };\r\n}());\r\n\r\n/* Render scene with 'ZPrepass transparency Effect'\r\n * Idea: transparent objects are rendered in two passes. The first one writes result only into depth buffer.\r\n * The second pass reads depth buffer and writes only to color buffer. The method results in\r\n * correct image of front part of the semi-transparent objects, but we can see only front transparent objects\r\n * and opaque objects inside, there is no transparent objects inside.\r\n * Notes: 1. Opaque objects should be rendered strictly before semi-transparent ones.\r\n * 2. Realization doesn't use camera layers because scene traversing is used for material changes and\r\n * we can use it to select needed meshes and don't complicate meshes builders with layers\r\n */\r\nMiew.prototype._renderWithPrepassTransparency = (function () {\r\n return function (camera, targetBuffer) {\r\n const gfx = this._gfx;\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n\r\n // opaque objects\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // transparent objects z prepass\r\n camera.layers.set(gfxutils.LAYERS.PREPASS_TRANSPARENT);\r\n gfx.renderer.getContext().colorMask(false, false, false, false); // don't update color buffer\r\n gfx.renderer.render(gfx.scene, camera);\r\n gfx.renderer.getContext().colorMask(true, true, true, true); // update color buffer\r\n\r\n // transparent objects color pass\r\n camera.layers.set(gfxutils.LAYERS.TRANSPARENT);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // restore default layer\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n };\r\n}());\r\n\r\nMiew.prototype._performFXAA = (function () {\r\n const _fxaaMaterial = new FXAAMaterial();\r\n\r\n return function (srcBuffer, targetBuffer) {\r\n if (typeof srcBuffer === 'undefined' || typeof targetBuffer === 'undefined') {\r\n return;\r\n }\r\n\r\n const gfx = this._gfx;\r\n\r\n // clear canvas\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.clear();\r\n\r\n // do fxaa processing of offscreen buff2\r\n _fxaaMaterial.uniforms.srcTex.value = srcBuffer.texture;\r\n _fxaaMaterial.uniforms.srcTexelSize.value.set(1.0 / srcBuffer.width, 1.0 / srcBuffer.height);\r\n _fxaaMaterial.uniforms.bgColor.value.set(settings.now.bg.color);\r\n\r\n if (_fxaaMaterial.bgTransparent !== settings.now.bg.transparent) {\r\n _fxaaMaterial.setValues({ bgTransparent: settings.now.bg.transparent });\r\n _fxaaMaterial.needsUpdate = true;\r\n }\r\n gfx.renderer.renderScreenQuad(_fxaaMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._performAO = (function () {\r\n const _aoMaterial = new AOMaterial();\r\n const _horBlurMaterial = new AOHorBlurMaterial();\r\n const _vertBlurMaterial = new AOVertBlurWithBlendMaterial();\r\n\r\n const _scale = new THREE.Vector3();\r\n return function (srcColorBuffer, normalBuffer, srcDepthTexture, targetBuffer, tempBuffer, tempBuffer1) {\r\n if (!srcColorBuffer || !normalBuffer || !srcDepthTexture || !targetBuffer || !tempBuffer || !tempBuffer1) {\r\n return;\r\n }\r\n const gfx = this._gfx;\r\n const tanHalfFOV = Math.tan(THREE.MathUtils.DEG2RAD * 0.5 * gfx.camera.fov);\r\n\r\n _aoMaterial.uniforms.diffuseTexture.value = srcColorBuffer.texture;\r\n _aoMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n _aoMaterial.uniforms.normalTexture.value = normalBuffer.texture;\r\n _aoMaterial.uniforms.srcTexelSize.value.set(1.0 / srcColorBuffer.width, 1.0 / srcColorBuffer.height);\r\n _aoMaterial.uniforms.camNearFar.value.set(gfx.camera.near, gfx.camera.far);\r\n _aoMaterial.uniforms.projMatrix.value = gfx.camera.projectionMatrix;\r\n _aoMaterial.uniforms.aspectRatio.value = gfx.camera.aspect;\r\n _aoMaterial.uniforms.tanHalfFOV.value = tanHalfFOV;\r\n gfx.root.matrix.extractScale(_scale);\r\n _aoMaterial.uniforms.kernelRadius.value = settings.now.debug.ssaoKernelRadius * _scale.x;\r\n _aoMaterial.uniforms.depthThreshold.value = 2.0 * this._getBSphereRadius(); // diameter\r\n _aoMaterial.uniforms.factor.value = settings.now.debug.ssaoFactor;\r\n // N: should be tempBuffer1 for proper use of buffers (see buffers using outside the function)\r\n gfx.renderer.setRenderTarget(tempBuffer1);\r\n gfx.renderer.renderScreenQuad(_aoMaterial);\r\n\r\n _horBlurMaterial.uniforms.aoMap.value = tempBuffer1.texture;\r\n _horBlurMaterial.uniforms.srcTexelSize.value.set(1.0 / tempBuffer1.width, 1.0 / tempBuffer1.height);\r\n _horBlurMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n gfx.renderer.setRenderTarget(tempBuffer);\r\n gfx.renderer.renderScreenQuad(_horBlurMaterial);\r\n\r\n _vertBlurMaterial.uniforms.aoMap.value = tempBuffer.texture;\r\n _vertBlurMaterial.uniforms.diffuseTexture.value = srcColorBuffer.texture;\r\n _vertBlurMaterial.uniforms.srcTexelSize.value.set(1.0 / tempBuffer.width, 1.0 / tempBuffer.height);\r\n _vertBlurMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n _vertBlurMaterial.uniforms.projMatrix.value = gfx.camera.projectionMatrix;\r\n _vertBlurMaterial.uniforms.aspectRatio.value = gfx.camera.aspect;\r\n _vertBlurMaterial.uniforms.tanHalfFOV.value = tanHalfFOV;\r\n const { fog } = gfx.scene;\r\n if (fog) {\r\n _vertBlurMaterial.uniforms.fogNearFar.value.set(fog.near, fog.far);\r\n _vertBlurMaterial.uniforms.fogColor.value.set(fog.color.r, fog.color.g, fog.color.b, settings.now.fogAlpha);\r\n }\r\n if ((_vertBlurMaterial.useFog !== settings.now.fog)\r\n || (_vertBlurMaterial.fogTransparent !== settings.now.bg.transparent)) {\r\n _vertBlurMaterial.setValues({ useFog: settings.now.fog, fogTransparent: settings.now.bg.transparent });\r\n _vertBlurMaterial.needsUpdate = true;\r\n }\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuad(_vertBlurMaterial);\r\n };\r\n}());\r\n\r\n/**\r\n * Reset the viewer, unload molecules.\r\n * @param {boolean=} keepReps - Keep representations while resetting viewer state.\r\n */\r\nMiew.prototype.reset = function (/* keepReps */) {\r\n if (this._picker) {\r\n this._picker.reset();\r\n }\r\n this._lastPick = null;\r\n\r\n this._releaseAllVisuals();\r\n\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this._resetObjects();\r\n\r\n if (this._gfx) {\r\n gfxutils.clearTree(this._gfx.pivot);\r\n this._gfx.renderer2d.reset();\r\n }\r\n\r\n this.setNeedRender();\r\n};\r\n\r\nMiew.prototype._resetScene = function () {\r\n this._objectControls.reset();\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n this.resetReps();\r\n this.resetPivot();\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype.resetView = function () {\r\n // reset controls\r\n if (this._picker) {\r\n this._picker.reset();\r\n }\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._resetScene();\r\n\r\n // reset selection\r\n this._forEachComplexVisual((visual) => {\r\n visual.updateSelectionMask({});\r\n visual.rebuildSelectionGeometry();\r\n });\r\n};\r\n\r\nMiew.prototype._export = function (format) {\r\n const TheExporter = _.head(io.exporters.find({ format }));\r\n if (!TheExporter) {\r\n this.logger.error('Could not find suitable exporter for this source');\r\n return Promise.reject(new Error('Could not find suitable exporter for this source'));\r\n }\r\n this.dispatchEvent({ type: 'exporting' });\r\n\r\n if (this._visuals[this._curVisualName] instanceof ComplexVisual) {\r\n let dataSource = null;\r\n if (TheExporter.SourceClass === ComplexVisual) {\r\n dataSource = this._visuals[this._curVisualName];\r\n } else if (TheExporter.SourceClass === Complex) {\r\n dataSource = this._visuals[this._curVisualName]._complex;\r\n }\r\n const exporter = new TheExporter(dataSource, { miewVersion: Miew.VERSION });\r\n return exporter.export().then((data) => data);\r\n }\r\n if (this._visuals[this._curVisualName] instanceof VolumeVisual) {\r\n return Promise.reject(new Error('Sorry, exporter for volume data not implemented yet'));\r\n }\r\n return Promise.reject(new Error('Unexpected format of data'));\r\n};\r\n\r\nconst rePdbId = /^(?:(pdb|cif|ccp4|dsn6):\\s*)?(\\d[a-z\\d]{3})$/i;\r\nconst rePubchem = /^(?:pc|pubchem):\\s*([a-z]+)$/i;\r\nconst reUrlScheme = /^([a-z][a-z\\d\\-+.]*):/i;\r\n\r\nfunction resolveSourceShortcut(source, opts) {\r\n if (!_.isString(source)) {\r\n return source;\r\n }\r\n\r\n // e.g. \"cif:1CRN\"\r\n const matchesPdbId = rePdbId.exec(source);\r\n if (matchesPdbId) {\r\n let [, format = 'pdb', id] = matchesPdbId;\r\n\r\n format = format.toLowerCase();\r\n id = id.toUpperCase();\r\n\r\n switch (format) {\r\n case 'pdb':\r\n source = `https://files.rcsb.org/download/${id}.pdb`;\r\n break;\r\n case 'cif':\r\n source = `https://files.rcsb.org/download/${id}.cif`;\r\n break;\r\n case 'ccp4':\r\n source = `https://www.ebi.ac.uk/pdbe/coordinates/files/${id.toLowerCase()}.ccp4`;\r\n break;\r\n case 'dsn6':\r\n source = `https://edmaps.rcsb.org/maps/${id.toLowerCase()}_2fofc.dsn6`;\r\n break;\r\n default:\r\n throw new Error('Unexpected data format shortcut');\r\n }\r\n\r\n opts.fileType = format;\r\n opts.fileName = `${id}.${format}`;\r\n opts.sourceType = 'url';\r\n return source;\r\n }\r\n\r\n // e.g. \"pc:aspirin\"\r\n const matchesPubchem = rePubchem.exec(source);\r\n if (matchesPubchem) {\r\n const compound = matchesPubchem[1].toLowerCase();\r\n source = `https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/${compound}/JSON?record_type=3d`;\r\n opts.fileType = 'pubchem';\r\n opts.fileName = `${compound}.json`;\r\n opts.sourceType = 'url';\r\n return source;\r\n }\r\n\r\n // otherwise is should be an URL\r\n if (opts.sourceType === 'url' || opts.sourceType === undefined) {\r\n opts.sourceType = 'url';\r\n\r\n // e.g. \"./data/1CRN.pdb\"\r\n if (!reUrlScheme.test(source)) {\r\n source = utils.resolveURL(source);\r\n }\r\n }\r\n\r\n return source;\r\n}\r\n\r\nfunction updateBinaryMode(opts) {\r\n let { binary } = opts;\r\n\r\n // detect by format\r\n if (opts.fileType !== undefined) {\r\n const TheParser = _.head(io.parsers.find({ format: opts.fileType }));\r\n if (TheParser) {\r\n binary = TheParser.binary || false;\r\n } else {\r\n throw new Error('Could not find suitable parser for this format');\r\n }\r\n }\r\n\r\n // detect by file extension\r\n if (binary === undefined && opts.fileExt !== undefined) {\r\n const TheParser = _.head(io.parsers.find({ ext: opts.fileExt }));\r\n if (TheParser) {\r\n binary = TheParser.binary || false;\r\n }\r\n }\r\n\r\n // temporary workaround for animation\r\n if (opts.fileExt !== undefined && opts.fileExt.toLowerCase() === '.man') {\r\n opts.binary = true;\r\n opts.animation = true; // who cares?\r\n }\r\n\r\n // update if detected\r\n if (binary !== undefined) {\r\n if (opts.binary !== undefined && opts.binary !== binary) {\r\n opts.context.logger.warn('Overriding incorrect binary mode');\r\n }\r\n }\r\n\r\n opts.binary = binary || false;\r\n}\r\n\r\nfunction _fetchData(source, opts, job) {\r\n return new Promise(((resolve) => {\r\n if (job.shouldCancel()) {\r\n throw new Error('Operation cancelled');\r\n }\r\n job.notify({ type: 'fetching' });\r\n\r\n // allow for source shortcuts\r\n source = resolveSourceShortcut(source, opts);\r\n\r\n // detect a proper loader\r\n const TheLoader = _.head(io.loaders.find({ type: opts.sourceType, source }));\r\n if (!TheLoader) {\r\n throw new Error(LOADER_NOT_FOUND);\r\n }\r\n\r\n // split file name\r\n const fileName = opts.fileName || TheLoader.extractName(source);\r\n if (fileName) {\r\n const [name, fileExt] = utils.splitFileName(fileName);\r\n _.defaults(opts, { name, fileExt, fileName });\r\n }\r\n\r\n // should it be text or binary?\r\n updateBinaryMode(opts);\r\n\r\n // FIXME: All new settings retrieved from server are applied after the loading is complete. However, we need some\r\n // flags to alter the loading process itself. Here we apply them in advance. Dirty hack. Kill the server, remove\r\n // all hacks and everybody's happy.\r\n let newOptions = _.get(opts, 'preset.expression');\r\n if (!_.isUndefined(newOptions)) {\r\n newOptions = JSON.parse(newOptions);\r\n if (newOptions && newOptions.settings) {\r\n const keys = ['singleUnit'];\r\n for (let keyIndex = 0, keyCount = keys.length; keyIndex < keyCount; ++keyIndex) {\r\n const key = keys[keyIndex];\r\n const value = _.get(newOptions.settings, key);\r\n if (!_.isUndefined(value)) {\r\n settings.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // create a loader\r\n const loader = new TheLoader(source, opts);\r\n loader.context = opts.context;\r\n job.addEventListener('cancel', () => loader.abort());\r\n\r\n loader.addEventListener('progress', (event) => {\r\n if (event.lengthComputable && event.total > 0) {\r\n reportProgress(loader.logger, 'Fetching', event.loaded / event.total);\r\n } else {\r\n reportProgress(loader.logger, 'Fetching');\r\n }\r\n });\r\n\r\n console.time('fetch');\r\n const promise = loader.load()\r\n .then((data) => {\r\n console.timeEnd('fetch');\r\n opts.context.logger.info('Fetching finished');\r\n job.notify({ type: 'fetchingDone', data });\r\n return data;\r\n })\r\n .catch((error) => {\r\n console.timeEnd('fetch');\r\n opts.context.logger.debug(error.message);\r\n if (error.stack) {\r\n opts.context.logger.debug(error.stack);\r\n }\r\n opts.context.logger.error('Fetching failed');\r\n job.notify({ type: 'fetchingDone', error });\r\n throw error;\r\n });\r\n resolve(promise);\r\n }));\r\n}\r\n\r\nfunction _parseData(data, opts, job) {\r\n if (job.shouldCancel()) {\r\n return Promise.reject(new Error('Operation cancelled'));\r\n }\r\n\r\n job.notify({ type: 'parsing' });\r\n\r\n const TheParser = _.head(io.parsers.find({ format: opts.fileType, ext: opts.fileExt, data }));\r\n if (!TheParser) {\r\n return Promise.reject(new Error('Could not find suitable parser'));\r\n }\r\n\r\n const parser = new TheParser(data, opts);\r\n parser.context = opts.context;\r\n job.addEventListener('cancel', () => parser.abort());\r\n\r\n console.time('parse');\r\n return parser.parse()\r\n .then((dataSet) => {\r\n console.timeEnd('parse');\r\n job.notify({ type: 'parsingDone', data: dataSet });\r\n return dataSet;\r\n })\r\n .catch((error) => {\r\n console.timeEnd('parse');\r\n opts.error = error;\r\n opts.context.logger.debug(error.message);\r\n if (error.stack) {\r\n opts.context.logger.debug(error.stack);\r\n }\r\n opts.context.logger.error('Parsing failed');\r\n job.notify({ type: 'parsingDone', error });\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * Load molecule asynchronously.\r\n * @param {string|File} source - Molecule source to load (e.g. PDB ID, URL or File object).\r\n * @param {object=} opts - Options.\r\n * @param {string=} opts.sourceType - Data source type (e.g. 'url', 'file').\r\n * @param {string=} opts.fileType - Data contents type (e.g. 'pdb', 'cml').\r\n * @param {string=} opts.mdFile - .nc file path.\r\n * @param {boolean=} opts.keepRepsInfo - prevent reset of object and reps information.\r\n * @returns {Promise} name of the visual that was added to the viewer\r\n */\r\nMiew.prototype.load = function (source, opts) {\r\n opts = _.merge({}, opts, {\r\n context: this,\r\n });\r\n\r\n // for a single-file scenario\r\n if (!this.settings.now.use.multiFile) {\r\n // abort all loaders in progress\r\n if (this._loading.length) {\r\n this._loading.forEach((job) => {\r\n job.cancel();\r\n });\r\n this._loading.length = 0;\r\n }\r\n\r\n // reset\r\n if (!opts.animation) { // FIXME: sometimes it is set AFTERWARDS!\r\n this.reset(true);\r\n }\r\n }\r\n\r\n this._interpolator.reset();\r\n\r\n this.dispatchEvent({ type: 'loading', options: opts, source });\r\n\r\n const job = new JobHandle();\r\n this._loading.push(job);\r\n job.addEventListener('notification', (e) => {\r\n this.dispatchEvent(e.slaveEvent);\r\n });\r\n\r\n this._spinner.spin(this._container);\r\n\r\n const onLoadEnd = (anything) => {\r\n const jobIndex = this._loading.indexOf(job);\r\n if (jobIndex !== -1) {\r\n this._loading.splice(jobIndex, 1);\r\n }\r\n this._spinner.stop();\r\n this._refreshTitle();\r\n job.notify({ type: 'loadingDone', anything });\r\n return anything;\r\n };\r\n\r\n return _fetchData(source, opts, job)\r\n .then((data) => _parseData(data, opts, job))\r\n .then((object) => {\r\n const name = this._onLoad(object, opts);\r\n return onLoadEnd(name);\r\n })\r\n .catch((err) => {\r\n this.logger.error('Could not load data');\r\n this.logger.debug(err);\r\n throw onLoadEnd(err);\r\n });\r\n};\r\n\r\n/**\r\n * Unload molecule (delete corresponding visual).\r\n * @param {string=} name - name of the visual\r\n */\r\nMiew.prototype.unload = function (name) {\r\n this._removeVisual(name || this.getCurrentVisual());\r\n this.resetPivot();\r\n if (settings.now.shadow.on) {\r\n this._updateShadowCamera();\r\n }\r\n};\r\n\r\n/**\r\n * Start new animation. Now is broken.\r\n * @param fileData - new data to animate\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._startAnimation = function (fileData) {\r\n this._stopAnimation();\r\n const self = this;\r\n const visual = this._getComplexVisual();\r\n if (visual === null) {\r\n this.logger.error('Unable to start animation - no molecule is loaded.');\r\n return;\r\n }\r\n try {\r\n this._frameInfo = new FrameInfo(\r\n visual.getComplex(),\r\n fileData,\r\n {\r\n onLoadStatusChanged() {\r\n self.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: self._isAnimating,\r\n isLoading: self._frameInfo ? self._frameInfo.isLoading : true,\r\n },\r\n });\r\n },\r\n onError(message) {\r\n self._stopAnimation();\r\n self.logger.error(message);\r\n },\r\n },\r\n );\r\n } catch (e) {\r\n this.logger.error('Animation file does not fit to current complex!');\r\n return;\r\n }\r\n this._continueAnimation();\r\n};\r\n\r\n/**\r\n * Pause current animation. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._pauseAnimation = function () {\r\n if (this._animInterval === null) {\r\n return;\r\n }\r\n this._isAnimating = false;\r\n clearInterval(this._animInterval);\r\n this._animInterval = null;\r\n if (this._frameInfo) {\r\n this.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: this._isAnimating,\r\n isLoading: this._frameInfo.isLoading,\r\n },\r\n });\r\n }\r\n};\r\n\r\n/**\r\n * Continue current animation after pausing. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._continueAnimation = function () {\r\n this._isAnimating = true;\r\n let minFrameTime = 1000 / settings.now.maxfps;\r\n minFrameTime = Number.isNaN(minFrameTime) ? 0 : minFrameTime;\r\n const self = this;\r\n const { pivot } = self._gfx;\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n visual.resetSelectionMask();\r\n visual.rebuildSelectionGeometry();\r\n this._msgAtomInfo.style.opacity = 0.0;\r\n }\r\n this._animInterval = setInterval(() => {\r\n self.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: self._isAnimating,\r\n isLoading: self._frameInfo.isLoading,\r\n },\r\n });\r\n if (self._frameInfo.frameIsReady) {\r\n pivot.updateToFrame(self._frameInfo);\r\n self._updateObjsToFrame(self._frameInfo);\r\n self._refreshTitle(` Frame ${self._frameInfo._currFrame} of ${self._frameInfo._framesCount\r\n } time interval - ${self._frameInfo._timeStep}`);\r\n try {\r\n self._frameInfo.nextFrame();\r\n } catch (e) {\r\n self.logger.error('Error during animation');\r\n self._stopAnimation();\r\n return;\r\n }\r\n self._needRender = true;\r\n }\r\n }, minFrameTime);\r\n};\r\n\r\n/**\r\n * Stop current animation. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._stopAnimation = function () {\r\n if (this._animInterval === null) {\r\n return;\r\n }\r\n clearInterval(this._animInterval);\r\n this._frameInfo.disableEvents();\r\n this._frameInfo = null;\r\n this._animInterval = null;\r\n this.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: null,\r\n });\r\n};\r\n\r\n/**\r\n * Invoked upon successful loading of some data source\r\n * @param {DataSource} dataSource - Data source for visualization (molecular complex or other)\r\n * @param {object} opts - Options.\r\n * @private\r\n */\r\nMiew.prototype._onLoad = function (dataSource, opts) {\r\n const gfx = this._gfx;\r\n let visualName = null;\r\n\r\n if (opts.animation) {\r\n this._refreshTitle();\r\n this._startAnimation(dataSource);\r\n return null;\r\n }\r\n this._stopAnimation();\r\n if (!opts || !opts.keepRepsInfo) {\r\n this._opts.reps = null;\r\n this._opts._objects = null;\r\n }\r\n\r\n if (dataSource.id === 'Complex') {\r\n const complex = dataSource;\r\n\r\n // update title\r\n if (opts.fileName) {\r\n complex.name = complex.name || removeExtension(opts.fileName).toUpperCase();\r\n } else if (opts.amberFileName) {\r\n complex.name = complex.name || removeExtension(opts.amberFileName).toUpperCase();\r\n } else {\r\n complex.name = `Dynamic ${opts.fileType} molecule`;\r\n }\r\n\r\n visualName = this._addVisual(new ComplexVisual(complex.name, complex));\r\n this._curVisualName = visualName;\r\n\r\n const desc = this.info();\r\n this.logger.info(`Parsed ${opts.fileName} (${\r\n desc.atoms} atoms, ${\r\n desc.bonds} bonds, ${\r\n desc.residues} residues, ${\r\n desc.chains} chains).`);\r\n\r\n if (_.isNumber(this._opts.unit)) {\r\n complex.setCurrentUnit(this._opts.unit);\r\n }\r\n\r\n if (opts.preset) {\r\n // ...removed server access...\r\n } else if (settings.now.autoPreset) {\r\n switch (opts.fileType) {\r\n case 'cml':\r\n this.resetReps('small');\r\n break;\r\n case 'pdb':\r\n case 'mmtf':\r\n case 'cif':\r\n if (hasValidResidues(complex)) {\r\n this.resetReps('macro');\r\n } else {\r\n this.resetReps('small');\r\n }\r\n break;\r\n default:\r\n this.resetReps('default');\r\n break;\r\n }\r\n } else {\r\n this.resetReps('default');\r\n }\r\n } else if (dataSource.id === 'Volume') {\r\n this.resetEd();\r\n visualName = this._onLoadEd(dataSource);\r\n }\r\n\r\n gfx.camera.updateProjectionMatrix();\r\n this._updateFog();\r\n\r\n // reset global transform\r\n gfx.root.resetTransform();\r\n this.resetPivot();\r\n\r\n // set scale to fit everything on the screen\r\n this._objectControls.setScale(settings.now.radiusToFit / this._getBSphereRadius());\r\n\r\n this._resetObjects();\r\n\r\n if (settings.now.autoResolution) {\r\n this._tweakResolution();\r\n }\r\n\r\n if (settings.now.shadow.on) {\r\n this._updateShadowCamera();\r\n }\r\n\r\n if (this._opts.view) {\r\n this.view(this._opts.view);\r\n delete this._opts.view;\r\n }\r\n\r\n this._refreshTitle();\r\n\r\n return visualName;\r\n};\r\n\r\nMiew.prototype.resetEd = function () {\r\n if (this._edLoader) {\r\n this._edLoader.abort();\r\n this._edLoader = null;\r\n }\r\n\r\n // free all resources\r\n this._removeVisual(this._getVolumeVisual());\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype.loadEd = function (source) {\r\n this.resetEd();\r\n\r\n const TheLoader = _.head(io.loaders.find({ source }));\r\n if (!TheLoader) {\r\n this.logger.error(LOADER_NOT_FOUND);\r\n return Promise.reject(new Error(LOADER_NOT_FOUND));\r\n }\r\n\r\n const loader = this._edLoader = new TheLoader(source, { binary: true });\r\n loader.context = this;\r\n return loader.load().then((data) => {\r\n const TheParser = _.head(io.parsers.find({ format: 'ccp4' }));\r\n if (!TheParser) {\r\n throw new Error(PARSER_NOT_FOUND);\r\n }\r\n const parser = new TheParser(data);\r\n parser.context = this;\r\n return parser.parse().then((dataSource) => {\r\n this._onLoadEd(dataSource);\r\n });\r\n }).catch((error) => {\r\n this.logger.error('Could not load ED data');\r\n this.logger.debug(error);\r\n });\r\n};\r\n\r\nMiew.prototype._onLoadEd = function (dataSource) {\r\n dataSource.normalize();\r\n\r\n const volumeVisual = new VolumeVisual('volume', dataSource);\r\n volumeVisual.getMesh().layers.set(gfxutils.LAYERS.VOLUME); // volume mesh is not visible to common render\r\n const visualName = this._addVisual(volumeVisual);\r\n\r\n this._needRender = true;\r\n return visualName;\r\n};\r\n\r\nMiew.prototype._needRebuild = function () {\r\n let needsRebuild = false;\r\n this._forEachComplexVisual((visual) => {\r\n needsRebuild = needsRebuild || visual.needsRebuild();\r\n });\r\n return needsRebuild;\r\n};\r\n\r\nMiew.prototype._rebuildObjects = function () {\r\n const self = this;\r\n const gfx = this._gfx;\r\n let i;\r\n let n;\r\n\r\n // remove old object geometry\r\n const toRemove = [];\r\n for (i = 0; i < gfx.pivot.children.length; ++i) {\r\n const child = gfx.pivot.children[i];\r\n if (!(child instanceof Visual)) {\r\n toRemove.push(child);\r\n }\r\n }\r\n for (i = 0; i < toRemove.length; ++i) {\r\n toRemove[i].parent.remove(toRemove[i]);\r\n }\r\n\r\n setTimeout(() => {\r\n const objList = self._objects;\r\n for (i = 0, n = objList.length; i < n; ++i) {\r\n const obj = objList[i];\r\n if (obj.needsRebuild) {\r\n obj.build();\r\n }\r\n if (obj.getGeometry()) {\r\n gfx.pivot.add(obj.getGeometry());\r\n }\r\n }\r\n }, 10);\r\n};\r\n\r\nMiew.prototype.changeUnit = function (unitIdx, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n throw new Error('There is no complex to change!');\r\n }\r\n\r\n function currentUnitInfo() {\r\n const unit = visual ? visual.getComplex().getCurrentUnit() : 0;\r\n const type = unit > 0 ? (`Bio molecule ${unit}`) : 'Asymmetric unit';\r\n return `Current unit: ${unit} (${type})`;\r\n }\r\n\r\n if (unitIdx === undefined) {\r\n return currentUnitInfo();\r\n }\r\n if (_.isString(unitIdx)) {\r\n unitIdx = Math.max(parseInt(unitIdx, 10), 0);\r\n }\r\n if (visual.getComplex().setCurrentUnit(unitIdx)) {\r\n this._resetScene();\r\n this._updateInfoPanel();\r\n }\r\n return currentUnitInfo();\r\n};\r\n\r\n/**\r\n * Start to rebuild geometry asynchronously.\r\n */\r\nMiew.prototype.rebuild = function () {\r\n if (this._building) {\r\n this.logger.warn('Miew.rebuild(): already building!');\r\n return;\r\n }\r\n this._building = true;\r\n\r\n this.dispatchEvent({ type: 'rebuilding' });\r\n\r\n this._rebuildObjects();\r\n\r\n this._gfx.renderer2d.reset();\r\n\r\n const rebuildActions = [];\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.needsRebuild()) {\r\n rebuildActions.push(visual.rebuild().then(() => new Promise(((resolve) => {\r\n visual.rebuildSelectionGeometry();\r\n resolve();\r\n }))));\r\n }\r\n });\r\n\r\n // Start asynchronous rebuild\r\n const self = this;\r\n this._spinner.spin(this._container);\r\n Promise.all(rebuildActions).then(() => {\r\n self._spinner.stop();\r\n\r\n self._needRender = true;\r\n\r\n self._refreshTitle();\r\n this.dispatchEvent({ type: 'buildingDone' });\r\n self._building = false;\r\n });\r\n};\r\n\r\n/** Mark all representations for rebuilding */\r\nMiew.prototype.rebuildAll = function () {\r\n this._forEachComplexVisual((visual) => {\r\n visual.setNeedsRebuild();\r\n });\r\n};\r\n\r\nMiew.prototype._refreshTitle = function (appendix) {\r\n let title;\r\n appendix = appendix === undefined ? '' : appendix;\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n title = visual.getComplex().name;\r\n const rep = visual.repGet(visual.repCurrent());\r\n title += (rep ? ` – ${rep.mode.name} Mode` : '');\r\n } else {\r\n title = Object.keys(this._visuals).length > 0 ? 'Unknown' : 'No Data';\r\n }\r\n title += appendix;\r\n\r\n this.dispatchEvent({ type: 'titleChanged', data: title });\r\n};\r\n\r\nMiew.prototype.setNeedRender = function () {\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._extractRepresentation = function () {\r\n const changed = [];\r\n\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getSelectionCount() === 0) {\r\n return;\r\n }\r\n\r\n const selector = visual.buildSelectorFromMask(1 << visual.getSelectionBit());\r\n const defPreset = settings.now.presets.default;\r\n const res = visual.repAdd({\r\n selector,\r\n mode: defPreset[0].mode.id,\r\n colorer: defPreset[0].colorer.id,\r\n material: defPreset[0].material.id,\r\n });\r\n if (!res) {\r\n if (visual.repCount() === ComplexVisual.NUM_REPRESENTATION_BITS) {\r\n this.logger.warn(`Number of representations is limited to ${ComplexVisual.NUM_REPRESENTATION_BITS}`);\r\n }\r\n return;\r\n }\r\n\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name: visual.name });\r\n visual.repCurrent(res.index);\r\n\r\n changed.push(visual.name);\r\n });\r\n\r\n if (changed.length > 0) {\r\n this.logger.report(`New representation from selection for complexes: ${changed.join(', ')}`);\r\n }\r\n};\r\n\r\n/**\r\n * Change current representation list.\r\n * @param {array} reps - Representation list.\r\n */\r\nMiew.prototype._setReps = function (reps) {\r\n reps = reps || (this._opts && this._opts.reps) || [];\r\n this._forEachComplexVisual((visual) => visual.resetReps(reps));\r\n};\r\n\r\n/**\r\n * Apply existing preset to current scene.\r\n * @param preset\r\n */\r\nMiew.prototype.applyPreset = function (preset) {\r\n const { presets } = settings.now;\r\n const presList = [\r\n preset || settings.defaults.preset,\r\n settings.defaults.preset,\r\n Object.keys(presets)[0],\r\n ];\r\n let reps = null;\r\n for (let i = 0; !reps && i < presList.length; ++i) {\r\n settings.set('preset', presList[i]);\r\n reps = presets[settings.now.preset];\r\n if (!reps) {\r\n this.logger.warn(`Unknown preset \"${settings.now.preset}\"`);\r\n }\r\n }\r\n this._setReps(reps);\r\n};\r\n\r\n/**\r\n * Reset current representation list to initial values.\r\n * @param {string} [preset] - The source preset in case of uninitialized representation list.\r\n */\r\nMiew.prototype.resetReps = function (preset) {\r\n const reps = this._opts && this._opts.reps;\r\n if (reps) {\r\n this._setReps(reps);\r\n } else {\r\n this.applyPreset(preset);\r\n }\r\n};\r\n\r\n/**\r\n * Get number of representations created so far.\r\n * @returns {number} Number of reps.\r\n */\r\nMiew.prototype.repCount = function (name) {\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repCount() : 0;\r\n};\r\n\r\n/**\r\n * Get or set the current representation index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @param {string=} [name] - Complex name. Defaults to the current one.\r\n * @returns {number} The current index.\r\n */\r\nMiew.prototype.repCurrent = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n const newIdx = visual ? visual.repCurrent(index) : -1;\r\n if (index && newIdx !== index) {\r\n this.logger.warn(`Representation ${index} was not found. Current rep remains unchanged.`);\r\n }\r\n return newIdx;\r\n};\r\n\r\n/**\r\n * Get or set representation by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount}(). Defaults to the current one.\r\n * @param {object=} rep - Optional representation description.\r\n * @param {string=} rep.selector - Selector string.\r\n * @param {string=} rep.mode - Mode id.\r\n * @param {string=} rep.colorer - Colorer id.\r\n * @param {string=} rep.material - Material id.\r\n * @returns {?object} Representation description.\r\n */\r\nMiew.prototype.rep = function (index, rep) {\r\n const visual = this._getComplexVisual('');\r\n if (!visual) {\r\n return null;\r\n }\r\n const res = visual.rep(index, rep);\r\n if (res.status === 'created') {\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name: visual.name });\r\n } else if (res.status === 'changed') {\r\n this.dispatchEvent({ type: 'repChanged', index: res.index, name: visual.name });\r\n }\r\n return res.desc;\r\n};\r\n\r\n/**\r\n * Get representation (not just description) by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount}(). Defaults to the current one.\r\n * @returns {?object} Representation.\r\n */\r\nMiew.prototype.repGet = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repGet(index) : null;\r\n};\r\n\r\n/**\r\n * Add new representation.\r\n * @param {object=} rep - Representation description.\r\n * @returns {number} Index of the new representation.\r\n */\r\nMiew.prototype.repAdd = function (rep, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return -1;\r\n }\r\n\r\n const res = visual.repAdd(rep);\r\n if (res) {\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name });\r\n return res.index;\r\n }\r\n return -1;\r\n};\r\n\r\n/**\r\n * Remove representation.\r\n * @param {number=} index - Zero-based representation index.\r\n */\r\nMiew.prototype.repRemove = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n visual.repRemove(index);\r\n this.dispatchEvent({ type: 'repRemoved', index, name });\r\n};\r\n\r\n/**\r\n * Hide representation.\r\n * @param {number} index - Zero-based representation index.\r\n * @param {boolean=} hide - Specify false to make rep visible, true to hide (by default).\r\n */\r\nMiew.prototype.repHide = function (index, hide, name) {\r\n this._needRender = true;\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repHide(index, hide) : null;\r\n};\r\n\r\nMiew.prototype._setEditMode = function (mode) {\r\n this._editMode = mode;\r\n\r\n const elem = this._msgMode;\r\n if (elem) {\r\n elem.style.opacity = (mode === EDIT_MODE.COMPLEX) ? 0.0 : 1.0;\r\n\r\n if (mode !== EDIT_MODE.COMPLEX) {\r\n const t = elem.getElementsByTagName('p')[0];\r\n t.innerHTML = (mode === EDIT_MODE.COMPONENT) ? 'COMPONENT EDIT MODE' : 'FRAGMENT EDIT MODE';\r\n }\r\n }\r\n\r\n this.dispatchEvent({ type: 'editModeChanged', data: mode === EDIT_MODE.COMPLEX });\r\n};\r\n\r\nMiew.prototype._enterComponentEditMode = function () {\r\n if (this._editMode !== EDIT_MODE.COMPLEX) {\r\n return;\r\n }\r\n\r\n const editors = [];\r\n this._forEachComplexVisual((visual) => {\r\n const editor = visual.beginComponentEdit();\r\n if (editor) {\r\n editors.push(editor);\r\n }\r\n });\r\n\r\n if (editors === []) {\r\n return;\r\n }\r\n\r\n this._editors = editors;\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- ON');\r\n this._setEditMode(EDIT_MODE.COMPONENT);\r\n this._objectControls.keysTranslateObj(true);\r\n};\r\n\r\nMiew.prototype._applyComponentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.COMPONENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n this._objectControls.keysTranslateObj(false);\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].apply();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- OFF (applied)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._discardComponentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.COMPONENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n this._objectControls.keysTranslateObj(false);\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].discard();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- OFF (discarded)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this._needRender = true;\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._enterFragmentEditMode = function () {\r\n if (this._editMode !== EDIT_MODE.COMPLEX) {\r\n return;\r\n }\r\n\r\n const selectedVisuals = [];\r\n this._forEachComplexVisual((visual) => {\r\n if (visual instanceof ComplexVisual\r\n && visual.getSelectionCount() > 0) {\r\n selectedVisuals.push(visual);\r\n }\r\n });\r\n\r\n if (selectedVisuals.length !== 1) {\r\n // either we have no selection or\r\n // we have selected atoms in two or more visuals -- not supported\r\n return;\r\n }\r\n\r\n const editor = selectedVisuals[0].beginFragmentEdit();\r\n if (!editor) {\r\n return;\r\n }\r\n this._editors = [editor];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- ON (single bond)');\r\n this._setEditMode(EDIT_MODE.FRAGMENT);\r\n this._objectControls.allowTranslation(false);\r\n this._objectControls.allowAltObjFreeRotation(editor.isFreeRotationAllowed());\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._applyFragmentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.FRAGMENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].apply();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- OFF (applied)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._discardFragmentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.FRAGMENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].discard();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- OFF (discarded)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._onPick = function (event) {\r\n if (!settings.now.picking) {\r\n // picking is disabled\r\n return;\r\n }\r\n\r\n if (this._animInterval !== null) {\r\n // animation playback is on\r\n return;\r\n }\r\n\r\n if (this._editMode === EDIT_MODE.FRAGMENT) {\r\n // prevent picking in fragment edit mode\r\n return;\r\n }\r\n\r\n if (this._objectControls.isEditingAltObj()) {\r\n // prevent picking during component rotation\r\n return;\r\n }\r\n\r\n // update last pick & find complex\r\n let complex = null;\r\n if (event.obj.atom) {\r\n complex = event.obj.atom.residue.getChain().getComplex();\r\n this._lastPick = event.obj.atom;\r\n } else if (event.obj.residue) {\r\n complex = event.obj.residue.getChain().getComplex();\r\n this._lastPick = event.obj.residue;\r\n } else if (event.obj.chain) {\r\n complex = event.obj.chain.getComplex();\r\n this._lastPick = event.obj.chain;\r\n } else if (event.obj.molecule) {\r\n complex = event.obj.molecule.complex;\r\n this._lastPick = event.obj.molecule;\r\n } else {\r\n this._lastPick = null;\r\n }\r\n\r\n function _updateSelection(visual) {\r\n visual.updateSelectionMask(event.obj);\r\n visual.rebuildSelectionGeometry();\r\n }\r\n\r\n // update visual\r\n if (complex) {\r\n const visual = this._getVisualForComplex(complex);\r\n if (visual) {\r\n _updateSelection(visual);\r\n this._needRender = true;\r\n }\r\n } else {\r\n this._forEachComplexVisual(_updateSelection);\r\n this._needRender = true;\r\n }\r\n\r\n this._updateInfoPanel();\r\n this.dispatchEvent(event);\r\n};\r\n\r\nMiew.prototype._onKeyDown = function (event) {\r\n if (!this._running || !this._hotKeysEnabled) {\r\n return;\r\n }\r\n\r\n // editing keys\r\n if (settings.now.editing) {\r\n switch (event.code) {\r\n case 'KeyC':\r\n this._enterComponentEditMode();\r\n break;\r\n case 'KeyF':\r\n this._enterFragmentEditMode();\r\n break;\r\n case 'KeyA':\r\n switch (this._editMode) {\r\n case EDIT_MODE.COMPONENT:\r\n this._applyComponentEdit();\r\n break;\r\n case EDIT_MODE.FRAGMENT:\r\n this._applyFragmentEdit();\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n case 'KeyD':\r\n switch (this._editMode) {\r\n case EDIT_MODE.COMPONENT:\r\n this._discardComponentEdit();\r\n break;\r\n case EDIT_MODE.FRAGMENT:\r\n this._discardFragmentEdit();\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n default:\r\n }\r\n }\r\n\r\n // other keys\r\n switch (event.code) {\r\n case 'NumpadAdd':\r\n if (event.altKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._forEachComplexVisual((visual) => {\r\n visual.expandSelection();\r\n visual.rebuildSelectionGeometry();\r\n });\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n }\r\n break;\r\n case 'NumpadSubtract':\r\n if (event.altKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._forEachComplexVisual((visual) => {\r\n visual.shrinkSelection();\r\n visual.rebuildSelectionGeometry();\r\n });\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n }\r\n break;\r\n default:\r\n }\r\n};\r\n\r\nMiew.prototype._onKeyUp = function (event) {\r\n if (!this._running || !this._hotKeysEnabled) {\r\n return;\r\n }\r\n\r\n if (event.code === 'KeyX') {\r\n this._extractRepresentation();\r\n }\r\n};\r\n\r\nMiew.prototype._updateInfoPanel = function () {\r\n const info = this._msgAtomInfo.getElementsByTagName('p')[0];\r\n let atom;\r\n let residue;\r\n\r\n let count = 0;\r\n this._forEachComplexVisual((visual) => {\r\n count += visual.getSelectionCount();\r\n });\r\n\r\n while (info.firstChild) {\r\n info.removeChild(info.firstChild);\r\n }\r\n\r\n if (count === 0) {\r\n this._msgAtomInfo.style.opacity = 0.0;\r\n return;\r\n }\r\n\r\n let firstLine = `${String(count)} atom${count !== 1 ? 's' : ''} selected`;\r\n if (this._lastPick !== null) {\r\n firstLine += ', the last pick:';\r\n }\r\n let secondLine = '';\r\n let aName = '';\r\n let coordLine = '';\r\n\r\n if (this._lastPick instanceof Atom) {\r\n atom = this._lastPick;\r\n residue = atom.residue;\r\n\r\n aName = atom.name;\r\n const location = (atom.location !== 32) ? String.fromCharCode(atom.location) : ''; // 32 is code of white-space\r\n secondLine = `${atom.element.fullName} #${atom.serial}${location}: \\\r\n ${residue._chain._name}.${residue._type._name}${residue._sequence}${residue._icode.trim()}.`;\r\n secondLine += aName;\r\n\r\n coordLine = `Coord: (${atom.position.x.toFixed(2).toString()},\\\r\n ${atom.position.y.toFixed(2).toString()},\\\r\n ${atom.position.z.toFixed(2).toString()})`;\r\n } else if (this._lastPick instanceof Residue) {\r\n residue = this._lastPick;\r\n\r\n secondLine = `${residue._type._fullName}: \\\r\n ${residue._chain._name}.${residue._type._name}${residue._sequence}${residue._icode.trim()}`;\r\n } else if (this._lastPick instanceof Chain) {\r\n secondLine = `chain ${this._lastPick._name}`;\r\n } else if (this._lastPick instanceof Molecule) {\r\n secondLine = `molecule ${this._lastPick._name}`;\r\n }\r\n\r\n info.appendChild(document.createTextNode(firstLine));\r\n\r\n if (secondLine !== '') {\r\n info.appendChild(document.createElement('br'));\r\n info.appendChild(document.createTextNode(secondLine));\r\n }\r\n\r\n if (coordLine !== '') {\r\n info.appendChild(document.createElement('br'));\r\n info.appendChild(document.createTextNode(coordLine));\r\n }\r\n\r\n this._msgAtomInfo.style.opacity = 1.0;\r\n};\r\n\r\nMiew.prototype._getAltObj = function () {\r\n if (this._editors) {\r\n let altObj = null;\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n const nextAltObj = this._editors[i].getAltObj();\r\n if (nextAltObj.objects.length > 0) {\r\n if (altObj) {\r\n // we have selected atoms in two or more visuals -- not supported\r\n altObj = null;\r\n break;\r\n }\r\n altObj = nextAltObj;\r\n }\r\n }\r\n if (altObj) {\r\n return altObj;\r\n }\r\n }\r\n\r\n return {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n};\r\n\r\nMiew.prototype.resetPivot = (function () {\r\n const boundingBox = new THREE.Box3();\r\n const center = new THREE.Vector3();\r\n\r\n return function () {\r\n boundingBox.makeEmpty();\r\n this._forEachVisual((visual) => {\r\n boundingBox.union(visual.getBoundaries().boundingBox);\r\n });\r\n\r\n boundingBox.getCenter(center);\r\n this._objectControls.setPivot(center.negate());\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotResidue = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n return function (residue) {\r\n const visual = this._getVisualForComplex(residue.getChain().getComplex());\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n if (residue._controlPoint) {\r\n center.copy(residue._controlPoint);\r\n } else {\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n const amount = residue._atoms.length;\r\n for (let i = 0; i < amount; ++i) {\r\n const p = residue._atoms[i].position;\r\n x += p.x / amount;\r\n y += p.y / amount;\r\n z += p.z / amount;\r\n }\r\n center.set(x, y, z);\r\n }\r\n center.applyMatrix4(visual.matrix).negate();\r\n this._objectControls.setPivot(center);\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotAtom = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n return function (atom) {\r\n const visual = this._getVisualForComplex(atom.residue.getChain().getComplex());\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n center.copy(atom.position);\r\n center.applyMatrix4(visual.matrix).negate();\r\n this._objectControls.setPivot(center);\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.getSelectionCenter = (function () {\r\n const _centerInVisual = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n return function (center, includesAtom, selector) {\r\n center.set(0.0, 0.0, 0.0);\r\n let count = 0;\r\n\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getSelectionCenter(_centerInVisual, includesAtom, selector || visual.getSelectionBit())) {\r\n center.add(_centerInVisual);\r\n count++;\r\n }\r\n });\r\n if (count === 0) {\r\n return false;\r\n }\r\n center.divideScalar(count);\r\n center.negate();\r\n return true;\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotSubset = (function () {\r\n const _center = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n function _includesInCurSelection(atom, selectionBit) {\r\n return atom.mask & (1 << selectionBit);\r\n }\r\n\r\n function _includesInSelector(atom, selector) {\r\n return selector.selector.includesAtom(atom);\r\n }\r\n\r\n return function (selector) {\r\n const includesAtom = (selector) ? _includesInSelector : _includesInCurSelection;\r\n\r\n if (this.getSelectionCenter(_center, includesAtom, selector)) {\r\n this._objectControls.setPivot(_center);\r\n this.dispatchEvent({ type: 'transform' });\r\n } else {\r\n this.logger.warn('selection is empty. Center operation not performed');\r\n }\r\n };\r\n}());\r\n\r\n/**\r\n * Makes a screenshot.\r\n * @param {number} [width] - Width of an image. Defaults to the canvas width.\r\n * @param {number} [height] - Height of an image. Defaults to the width (square) or canvas height,\r\n * if width is omitted too.\r\n * @returns {string} Data URL representing the image contents.\r\n */\r\nMiew.prototype.screenshot = function (width, height) {\r\n const gfx = this._gfx;\r\n const deviceWidth = gfx.renderer.domElement.width;\r\n const deviceHeight = gfx.renderer.domElement.height;\r\n\r\n function fov2Tan(fov) {\r\n return Math.tan(THREE.MathUtils.degToRad(0.5 * fov));\r\n }\r\n\r\n function tan2Fov(tan) {\r\n return THREE.MathUtils.radToDeg(Math.atan(tan)) * 2.0;\r\n }\r\n\r\n function getDataURL() {\r\n let dataURL;\r\n const currBrowser = utils.getBrowser();\r\n\r\n if (currBrowser === utils.browserType.SAFARI) {\r\n const canvas = document.createElement('canvas');\r\n const canvasContext = canvas.getContext('2d');\r\n\r\n canvas.width = width === undefined ? deviceWidth : width;\r\n canvas.height = height === undefined ? deviceHeight : height;\r\n\r\n canvasContext.drawImage(gfx.renderer.domElement, 0, 0, canvas.width, canvas.height);\r\n dataURL = canvas.toDataURL('image/png');\r\n } else {\r\n // Copy current canvas to screenshot\r\n dataURL = gfx.renderer.domElement.toDataURL('image/png');\r\n }\r\n return dataURL;\r\n }\r\n height = height || width;\r\n\r\n let screenshotURI;\r\n if ((width === undefined && height === undefined)\r\n || (width === deviceWidth && height === deviceHeight)) {\r\n // renderer.domElement.toDataURL('image/png') returns flipped image in Safari\r\n // It hasn't been resolved yet, but getScreenshotSafari()\r\n // fixes it using an extra canvas.\r\n screenshotURI = getDataURL();\r\n } else {\r\n const originalAspect = gfx.camera.aspect;\r\n const originalFov = gfx.camera.fov;\r\n const originalTanFov2 = fov2Tan(gfx.camera.fov);\r\n\r\n // screenshot should contain the principal area of interest (a centered square touching screen sides)\r\n const areaOfInterestSize = Math.min(gfx.width, gfx.height);\r\n const areaOfInterestTanFov2 = originalTanFov2 * areaOfInterestSize / gfx.height;\r\n\r\n // set appropriate camera aspect & FOV\r\n const shotAspect = width / height;\r\n gfx.renderer.setPixelRatio(1);\r\n gfx.camera.aspect = shotAspect;\r\n gfx.camera.fov = tan2Fov(areaOfInterestTanFov2 / Math.min(shotAspect, 1.0));\r\n gfx.camera.updateProjectionMatrix();\r\n\r\n // resize canvas to the required size of screenshot\r\n gfx.renderer.setDrawingBufferSize(width, height, 1);\r\n\r\n // make screenshot\r\n this._renderFrame(settings.now.stereo);\r\n screenshotURI = getDataURL();\r\n\r\n // restore original camera & canvas proportions\r\n gfx.renderer.setPixelRatio(window.devicePixelRatio);\r\n gfx.camera.aspect = originalAspect;\r\n gfx.camera.fov = originalFov;\r\n gfx.camera.updateProjectionMatrix();\r\n gfx.renderer.setDrawingBufferSize(gfx.width, gfx.height, window.devicePixelRatio);\r\n this._needRender = true;\r\n }\r\n\r\n return screenshotURI;\r\n};\r\n\r\n/**\r\n * Makes screenshot and initiates a download.\r\n * @param {string} [filename] - Name of a file. Default to a 'screenshot-XXXXX.png', where XXXXX is a current\r\n * date/time in seconds.\r\n * @param {number} [width] - Width of an image. Defaults to the canvas width.\r\n * @param {number} [height] - Height of an image. Defaults to the width (square) or canvas height,\r\n * if width is omitted too.\r\n */\r\nMiew.prototype.screenshotSave = function (filename, width, height) {\r\n const uri = this.screenshot(width, height);\r\n utils.shotDownload(uri, filename);\r\n};\r\n\r\nMiew.prototype.save = function (opts) {\r\n this._export(opts.fileType).then((dataString) => {\r\n const filename = this._visuals[this._curVisualName]._complex.name;\r\n utils.download(dataString, filename, opts.fileType);\r\n this._refreshTitle();\r\n this.dispatchEvent({ type: 'exportingDone' });\r\n }).catch((error) => {\r\n this.logger.error('Could not export data');\r\n this.logger.debug(error);\r\n this._refreshTitle();\r\n this.dispatchEvent({ type: 'exportingDone', error });\r\n });\r\n};\r\n\r\nMiew.prototype._tweakResolution = function () {\r\n const maxPerf = [\r\n ['poor', 100],\r\n ['low', 500],\r\n ['medium', 1000],\r\n ['high', 5000],\r\n ['ultra', Number.MAX_VALUE],\r\n ];\r\n\r\n let atomCount = 0;\r\n this._forEachComplexVisual((visual) => {\r\n atomCount += visual.getComplex().getAtomCount();\r\n });\r\n\r\n if (atomCount > 0) {\r\n const performance = this._gfxScore * 10e5 / atomCount;\r\n // set resolution based on estimated performance\r\n for (let i = 0; i < maxPerf.length; ++i) {\r\n if (performance < maxPerf[i][1]) {\r\n this._autoChangeResolution(maxPerf[i][0]);\r\n break;\r\n }\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._autoChangeResolution = function (resolution) {\r\n if (resolution !== settings.now.resolution) {\r\n this.logger.report(`Your rendering resolution was changed to \"${resolution}\" for best performance.`);\r\n }\r\n settings.now.resolution = resolution;\r\n};\r\n\r\n/**\r\n * Save current settings to cookies.\r\n */\r\nMiew.prototype.saveSettings = function () {\r\n this._cookies.setCookie(this._opts.settingsCookie, JSON.stringify(this.settings.getDiffs(true)));\r\n};\r\n\r\n/**\r\n * Load settings from cookies.\r\n */\r\nMiew.prototype.restoreSettings = function () {\r\n try {\r\n const cookie = this._cookies.getCookie(this._opts.settingsCookie);\r\n const diffs = cookie ? JSON.parse(cookie) : {};\r\n this.settings.applyDiffs(diffs, true);\r\n } catch (e) {\r\n this.logger.error(`Cookies parse error: ${e.message}`);\r\n }\r\n};\r\n\r\n/**\r\n * Reset current settings to the defaults.\r\n */\r\nMiew.prototype.resetSettings = function () {\r\n this.settings.reset();\r\n};\r\n\r\n/*\r\n * DANGEROUS and TEMPORARY. The method should change or disappear in future versions.\r\n * @param {string|object} opts - See {@link Miew} constructor.\r\n * @see {@link Miew#set}, {@link Miew#repAdd}, {@link Miew#rep}.\r\n */\r\nMiew.prototype.setOptions = function (opts) {\r\n if (typeof opts === 'string') {\r\n opts = Miew.options.fromAttr(opts);\r\n }\r\n if (opts.reps) {\r\n this._opts.reps = null;\r\n }\r\n _.merge(this._opts, opts);\r\n if (opts.settings) {\r\n this.set(opts.settings);\r\n }\r\n\r\n this._opts._objects = opts._objects;\r\n this._resetObjects();\r\n\r\n if (opts.load) {\r\n this.load(opts.load, { fileType: opts.type });\r\n }\r\n\r\n if (opts.preset) {\r\n settings.now.preset = opts.preset;\r\n }\r\n\r\n if (opts.reps) {\r\n this.resetReps(opts.preset);\r\n }\r\n\r\n if (this._opts.view) {\r\n this.view(this._opts.view);\r\n delete this._opts.view;\r\n }\r\n\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n visual.getComplex().resetCurrentUnit();\r\n if (_.isNumber(opts.unit)) {\r\n visual.getComplex().setCurrentUnit(opts.unit);\r\n }\r\n this.resetView();\r\n this.rebuildAll();\r\n }\r\n};\r\n\r\nMiew.prototype.info = function (name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return {};\r\n }\r\n const complex = visual.getComplex();\r\n const { metadata } = complex;\r\n return {\r\n id: metadata.id || complex.name || 'UNKNOWN',\r\n title: (metadata.title && metadata.title.join(' ')) || 'UNKNOWN DATA',\r\n atoms: complex.getAtomCount(),\r\n bonds: complex.getBondCount(),\r\n residues: complex.getResidueCount(),\r\n chains: complex.getChainCount(),\r\n };\r\n};\r\n\r\n/*\r\n * OBJECTS SEGMENT\r\n */\r\n\r\nMiew.prototype.addObject = function (objData, bThrow) {\r\n let Ctor = null;\r\n\r\n if (objData.type === LinesObject.prototype.type) {\r\n Ctor = LinesObject;\r\n }\r\n\r\n if (Ctor === null) {\r\n throw new Error(`Unknown scene object type - ${objData.type}`);\r\n }\r\n\r\n try {\r\n const newObj = new Ctor(objData.params, objData.opts);\r\n this._addSceneObject(newObj);\r\n } catch (error) {\r\n if (!bThrow) {\r\n this.logger.debug(`Error during scene object creation: ${error.message}`);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._addSceneObject = function (sceneObject) {\r\n const visual = this._getComplexVisual();\r\n if (sceneObject.build && visual) {\r\n sceneObject.build(visual.getComplex());\r\n this._gfx.pivot.add(sceneObject.getGeometry());\r\n }\r\n const objects = this._objects;\r\n objects[objects.length] = sceneObject;\r\n};\r\n\r\nMiew.prototype._updateObjsToFrame = function (frameData) {\r\n const objs = this._objects;\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n if (objs[i].updateToFrame) {\r\n objs[i].updateToFrame(frameData);\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._resetObjects = function () {\r\n const objs = this._opts._objects;\r\n\r\n this._objects = [];\r\n if (objs) {\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n this.addObject(objs[i], false);\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype.removeObject = function (index) {\r\n const obj = this._objects[index];\r\n if (!obj) {\r\n throw new Error(`Scene object with index ${index} does not exist`);\r\n }\r\n obj.destroy();\r\n this._objects.splice(index, 1);\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Get a string with a URL to reproduce the current scene.\r\n *\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=false] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=false] - when this flag is true, a view information is included\r\n * @returns {string} URL\r\n */\r\nMiew.prototype.getURL = function (opts) {\r\n return options.toURL(this.getState(_.defaults(opts, {\r\n compact: true,\r\n settings: false,\r\n view: false,\r\n })));\r\n};\r\n\r\n/**\r\n * Get a string with a script to reproduce the current scene.\r\n *\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=true] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=true] - when this flag is true, a view information is included\r\n * @returns {string} script\r\n */\r\nMiew.prototype.getScript = function (opts) {\r\n return options.toScript(this.getState(_.defaults(opts, {\r\n compact: true,\r\n settings: true,\r\n view: true,\r\n })));\r\n};\r\n\r\n/*\r\n * Generates object that represents the current state of representations list\r\n * @param {boolean} compareWithDefaults - when this flag is true, reps list is compared (if possible)\r\n * to preset's defaults and only diffs are generated\r\n */\r\nMiew.prototype._compareReps = function (complexVisual, compareWithDefaults) {\r\n const ans = {};\r\n let repCount = 0;\r\n\r\n if (complexVisual) {\r\n repCount = complexVisual.repCount();\r\n }\r\n\r\n const currPreset = settings.defaults.presets[settings.now.preset];\r\n let compare = compareWithDefaults;\r\n if (currPreset === undefined || currPreset.length > repCount) {\r\n compare = false;\r\n ans.preset = 'empty';\r\n } else if (settings.now.preset !== settings.defaults.preset) {\r\n ans.preset = settings.now.preset;\r\n }\r\n\r\n const repsDiff = [];\r\n let emptyReps = true;\r\n for (let i = 0, n = repCount; i < n; ++i) {\r\n repsDiff[i] = complexVisual.repGet(i).compare(compare ? currPreset[i] : null);\r\n if (!_.isEmpty(repsDiff[i])) {\r\n emptyReps = false;\r\n }\r\n }\r\n if (!emptyReps) {\r\n ans.reps = repsDiff;\r\n }\r\n return ans;\r\n};\r\n\r\n/*\r\n * Obtain object that represents current state of miew (might be used as options in constructor).\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=false] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=false] - when this flag is true, a view information is included\r\n * @returns {Object} State object.\r\n */\r\nMiew.prototype.getState = function (opts) {\r\n const state = {};\r\n\r\n opts = _.defaults(opts, {\r\n compact: true,\r\n settings: false,\r\n view: false,\r\n });\r\n\r\n // load\r\n const visual = this._getComplexVisual();\r\n if (visual !== null) {\r\n const complex = visual.getComplex();\r\n const { metadata } = complex;\r\n if (metadata.id) {\r\n const format = metadata.format ? `${metadata.format}:` : '';\r\n state.load = format + metadata.id;\r\n }\r\n const unit = complex.getCurrentUnit();\r\n if (unit !== 1) {\r\n state.unit = unit;\r\n }\r\n }\r\n\r\n // representations\r\n const repsInfo = this._compareReps(visual, opts.compact);\r\n if (repsInfo.preset) {\r\n state.preset = repsInfo.preset;\r\n }\r\n\r\n if (repsInfo.reps) {\r\n state.reps = repsInfo.reps;\r\n }\r\n\r\n // objects\r\n const objects = this._objects;\r\n const objectsState = [];\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n objectsState[i] = objects[i].identify();\r\n }\r\n if (objects.length > 0) {\r\n state._objects = objectsState;\r\n }\r\n\r\n // view\r\n if (opts.view) {\r\n state.view = this.view();\r\n }\r\n\r\n // settings\r\n if (opts.settings) {\r\n const diff = this.settings.getDiffs(false);\r\n if (!_.isEmpty(diff)) {\r\n state.settings = diff;\r\n }\r\n }\r\n\r\n return state;\r\n};\r\n\r\n/**\r\n * Get parameter value.\r\n * @param {string} param - Parameter name or path (e.g. 'modes.BS.atom').\r\n * @param {*=} value - Default value.\r\n * @returns {*} Parameter value.\r\n */\r\nMiew.prototype.get = function (param, value) {\r\n return settings.get(param, value);\r\n};\r\n\r\nMiew.prototype._clipPlaneUpdateValue = function (radius) {\r\n const clipPlaneValue = Math.max(\r\n this._gfx.camera.position.z - radius * settings.now.draft.clipPlaneFactor,\r\n settings.now.camNear,\r\n );\r\n\r\n const opts = { clipPlaneValue };\r\n this._forEachComplexVisual((visual) => {\r\n visual.setUberOptions(opts);\r\n });\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const obj = this._objects[i];\r\n if (obj._line) {\r\n obj._line.material.setUberOptions(opts);\r\n }\r\n }\r\n if (this._picker !== null) {\r\n this._picker.clipPlaneValue = clipPlaneValue;\r\n }\r\n};\r\n\r\nMiew.prototype._fogFarUpdateValue = function () {\r\n if (this._picker !== null) {\r\n if (this._gfx.scene.fog) {\r\n this._picker.fogFarValue = this._gfx.scene.fog.far;\r\n } else {\r\n this._picker.fogFarValue = undefined;\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._updateShadowmapMeshes = function (process) {\r\n this._forEachComplexVisual((visual) => {\r\n const reprList = visual._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n process(repr.geo, repr.material);\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype._updateMaterials = function (values, needTraverse = false, process = undefined) {\r\n this._forEachComplexVisual((visual) => visual.setMaterialValues(values, needTraverse, process));\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const obj = this._objects[i];\r\n if (obj._line) {\r\n obj._line.material.setValues(values);\r\n obj._line.material.needsUpdate = true;\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._fogAlphaChanged = function () {\r\n this._forEachComplexVisual((visual) => {\r\n visual.setUberOptions({\r\n fogAlpha: settings.now.fogAlpha,\r\n });\r\n });\r\n};\r\n\r\nMiew.prototype._embedWebXR = function () {\r\n // switch off\r\n if (settings.now.stereo !== 'WEBVR') {\r\n if (this.webVR) {\r\n this.webVR.disable();\r\n }\r\n this.webVR = null;\r\n return;\r\n }\r\n // switch on\r\n if (!this.webVR) {\r\n this.webVR = new WebVRPoC(() => {\r\n this._requestAnimationFrame(() => this._onTick());\r\n this._needRender = true;\r\n this._onResize();\r\n });\r\n }\r\n this.webVR.enable(this._gfx);\r\n};\r\n\r\nMiew.prototype._initOnSettingsChanged = function () {\r\n const on = (props, func) => {\r\n props = _.isArray(props) ? props : [props];\r\n props.forEach((prop) => {\r\n this.settings.addEventListener(`change:${prop}`, func);\r\n });\r\n };\r\n\r\n on('modes.VD.frame', () => {\r\n const volume = this._getVolumeVisual();\r\n if (volume === null) return;\r\n\r\n volume.showFrame(settings.now.modes.VD.frame);\r\n this._needRender = true;\r\n });\r\n\r\n on('modes.VD.isoMode', () => {\r\n const volume = this._getVolumeVisual();\r\n if (volume === null) return;\r\n\r\n volume.getMesh().material.updateDefines();\r\n this._needRender = true;\r\n });\r\n\r\n on('bg.color', () => {\r\n this._onBgColorChanged();\r\n });\r\n\r\n on('ao', () => {\r\n if (settings.now.ao && !isAOSupported(this._gfx.renderer.getContext())) {\r\n this.logger.warn('Your device or browser does not support ao');\r\n settings.set('ao', false);\r\n } else {\r\n const values = { normalsToGBuffer: settings.now.ao };\r\n this._setUberMaterialValues(values);\r\n }\r\n });\r\n\r\n on('zSprites', () => {\r\n if (settings.now.zSprites && !arezSpritesSupported(this._gfx.renderer.getContext())) {\r\n this.logger.warn('Your device or browser does not support zSprites');\r\n settings.set('zSprites', false);\r\n }\r\n this.rebuildAll();\r\n });\r\n\r\n on('fogColor', () => {\r\n this._onFogColorChanged();\r\n });\r\n\r\n on('fogColorEnable', () => {\r\n this._onFogColorChanged();\r\n });\r\n\r\n on('bg.transparent', (evt) => {\r\n const gfx = this._gfx;\r\n if (gfx) {\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n }\r\n // update materials\r\n this._updateMaterials({ fogTransparent: evt.value });\r\n this.rebuildAll();\r\n });\r\n\r\n on('draft.clipPlane', (evt) => {\r\n // update materials\r\n this._updateMaterials({ clipPlane: evt.value });\r\n this.rebuildAll();\r\n });\r\n\r\n on('shadow.on', (evt) => {\r\n // update materials\r\n const values = { shadowmap: evt.value, shadowmapType: settings.now.shadow.type };\r\n const gfx = this._gfx;\r\n if (gfx) {\r\n gfx.renderer.shadowMap.enabled = Boolean(values.shadowmap);\r\n }\r\n this._updateMaterials(values, true);\r\n if (values.shadowmap) {\r\n this._updateShadowCamera();\r\n this._updateShadowmapMeshes(meshutils.createShadowmapMaterial);\r\n } else {\r\n this._updateShadowmapMeshes(meshutils.removeShadowmapMaterial);\r\n }\r\n this._needRender = true;\r\n });\r\n\r\n on('shadow.type', (evt) => {\r\n // update materials if shadowmap is enable\r\n if (settings.now.shadow.on) {\r\n this._updateMaterials({ shadowmapType: evt.value }, true);\r\n this._needRender = true;\r\n }\r\n });\r\n\r\n on('shadow.radius', (evt) => {\r\n for (let i = 0; i < this._gfx.scene.children.length; i++) {\r\n if (this._gfx.scene.children[i].shadow !== undefined) {\r\n const light = this._gfx.scene.children[i];\r\n light.shadow.radius = evt.value;\r\n this._needRender = true;\r\n }\r\n }\r\n });\r\n\r\n on('fps', () => {\r\n this._fps.show(settings.now.fps);\r\n });\r\n\r\n on(['fog', 'fogNearFactor', 'fogFarFactor'], () => {\r\n this._updateFog();\r\n this._needRender = true;\r\n });\r\n\r\n on('fogAlpha', () => {\r\n const { fogAlpha } = settings.now;\r\n if (fogAlpha < 0 || fogAlpha > 1) {\r\n this.logger.warn('fogAlpha must belong range [0,1]');\r\n }\r\n this._fogAlphaChanged();\r\n this._needRender = true;\r\n });\r\n\r\n on('autoResolution', (evt) => {\r\n if (evt.value && !this._gfxScore) {\r\n this.logger.warn('Benchmarks are missed, autoresolution will not work! '\r\n + 'Autoresolution should be set during miew startup.');\r\n }\r\n });\r\n\r\n on('stereo', () => {\r\n this._embedWebXR(settings.now.stereo === 'WEBVR');\r\n this._needRender = true;\r\n });\r\n\r\n on(['transparency', 'palette'], () => {\r\n this.rebuildAll();\r\n });\r\n\r\n on('resolution', () => {\r\n // update complex visuals\r\n this.rebuildAll();\r\n\r\n // update volume visual\r\n const volume = this._getVolumeVisual();\r\n if (volume) {\r\n volume.getMesh().material.updateDefines();\r\n this._needRender = true;\r\n }\r\n });\r\n\r\n on(['axes', 'fxaa', 'ao',\r\n 'outline.on', 'outline.color', 'outline.threshold', 'outline.thickness'], () => {\r\n this._needRender = true;\r\n });\r\n};\r\n\r\n/**\r\n * Set parameter value.\r\n * @param {string|object} params - Parameter name or path (e.g. 'modes.BS.atom') or even settings object.\r\n * @param {*=} value - Value.\r\n */\r\nMiew.prototype.set = function (params, value) {\r\n settings.set(params, value);\r\n};\r\n\r\n/**\r\n * Select atoms with selection string.\r\n * @param {string} expression - string expression of selection\r\n * @param {boolean=} append - true to append selection atoms to current selection, false to rewrite selection\r\n */\r\nMiew.prototype.select = function (expression, append) {\r\n const visual = this._getComplexVisual();\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n let sel = expression;\r\n if (_.isString(expression)) {\r\n sel = selectors.parse(expression).selector;\r\n }\r\n\r\n visual.select(sel, append);\r\n this._lastPick = null;\r\n\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n};\r\n\r\nconst VIEW_VERSION = '1';\r\n\r\n/**\r\n * Get or set view info packed into string.\r\n *\r\n * **Note:** view is stored for *left-handed* cs, euler angles are stored in radians and *ZXY-order*,\r\n *\r\n * @param {string=} expression - Optional string encoded the view\r\n */\r\nMiew.prototype.view = function (expression) {\r\n const self = this;\r\n const { pivot } = this._gfx;\r\n let transform = [];\r\n const eulerOrder = 'ZXY';\r\n\r\n function encode() {\r\n const pos = pivot.position;\r\n const scale = self._objectControls.getScale() / settings.now.radiusToFit;\r\n const euler = new THREE.Euler();\r\n euler.setFromQuaternion(self._objectControls.getOrientation(), eulerOrder);\r\n transform = [\r\n pos.x, pos.y, pos.z,\r\n scale,\r\n euler.x, euler.y, euler.z,\r\n ];\r\n return VIEW_VERSION + utils.arrayToBase64(transform, Float32Array);\r\n }\r\n\r\n function decode() {\r\n // backwards compatible: old non-versioned view is the 0th version\r\n if (expression.length === 40) {\r\n expression = `0${expression}`;\r\n }\r\n\r\n const version = expression[0];\r\n transform = utils.arrayFromBase64(expression.substr(1), Float32Array);\r\n\r\n // apply adapter for old versions\r\n if (version !== VIEW_VERSION) {\r\n if (version === '0') {\r\n // cancel radiusToFit included in old views\r\n transform[3] /= 8.0;\r\n } else {\r\n // do nothing\r\n self.logger.warn(`Encoded view version mismatch, stored as ${version} vs ${VIEW_VERSION} expected`);\r\n return;\r\n }\r\n }\r\n\r\n const interpolator = self._interpolator;\r\n const srcView = interpolator.createView();\r\n srcView.position.copy(pivot.position);\r\n srcView.scale = self._objectControls.getScale();\r\n srcView.orientation.copy(self._objectControls.getOrientation());\r\n\r\n const dstView = interpolator.createView();\r\n dstView.position.set(transform[0], transform[1], transform[2]);\r\n\r\n // hack to make preset views work after we moved centering offset to visual nodes\r\n // FIXME should only store main pivot offset in preset\r\n if (self._getComplexVisual()) {\r\n dstView.position.sub(self._getComplexVisual().position);\r\n }\r\n\r\n dstView.scale = transform[3]; // eslint-disable-line prefer-destructuring\r\n dstView.orientation.setFromEuler(new THREE.Euler(transform[4], transform[5], transform[6], eulerOrder));\r\n\r\n interpolator.setup(srcView, dstView);\r\n }\r\n\r\n if (typeof expression === 'undefined') {\r\n return encode();\r\n }\r\n decode();\r\n\r\n return expression;\r\n};\r\n\r\n/*\r\n * Update current view due to viewinterpolator state\r\n */\r\nMiew.prototype._updateView = function () {\r\n const self = this;\r\n const { pivot } = this._gfx;\r\n\r\n const interpolator = this._interpolator;\r\n if (!interpolator.wasStarted()) {\r\n interpolator.start();\r\n }\r\n\r\n if (!interpolator.isMoving()) {\r\n return;\r\n }\r\n\r\n const res = interpolator.getCurrentView();\r\n if (res.success) {\r\n const curr = res.view;\r\n pivot.position.copy(curr.position);\r\n self._objectControls.setScale(curr.scale * settings.now.radiusToFit);\r\n self._objectControls.setOrientation(curr.orientation);\r\n this.dispatchEvent({ type: 'transform' });\r\n self._needRender = true;\r\n }\r\n};\r\n\r\n/**\r\n * Translate object by vector\r\n * @param {number} x - translation value (Ang) along model's X axis\r\n * @param {number} y - translation value (Ang) along model's Y axis\r\n * @param {number} z - translation value (Ang) along model's Z axis\r\n */\r\nMiew.prototype.translate = function (x, y, z) {\r\n this._objectControls.translatePivot(x, y, z);\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Rotate object by Euler angles\r\n * @param {number} x - rotation angle around X axis in radians\r\n * @param {number} y - rotation angle around Y axis in radians\r\n * @param {number} z - rotation angle around Z axis in radians\r\n */\r\nMiew.prototype.rotate = function (x, y, z) {\r\n this._objectControls.rotate(new THREE.Quaternion().setFromEuler(new THREE.Euler(x, y, z, 'XYZ')));\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Scale object by factor\r\n * @param {number} factor - scale multiplier, should greater than zero\r\n */\r\nMiew.prototype.scale = function (factor) {\r\n if (factor <= 0) {\r\n throw new RangeError('Scale should be greater than zero');\r\n }\r\n this._objectControls.scale(factor);\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Center view on selection\r\n * @param {empty | subset | string} selector - defines part of molecule which must be centered (\r\n * empty - center on current selection;\r\n * subset - center on picked atom/residue/molecule;\r\n * string - center on atoms correspond to selection string)\r\n */\r\nMiew.prototype.center = function (selector) {\r\n // no arguments - center on current selection;\r\n if (selector === undefined) {\r\n this.setPivotSubset();\r\n this._needRender = true;\r\n return;\r\n }\r\n // subset with atom or residue - center on picked atom/residue;\r\n if (selector.obj !== undefined && ('atom' in selector.obj || 'residue' in selector.obj)) { // from event with selection\r\n if ('atom' in selector.obj) {\r\n this.setPivotAtom(selector.obj.atom);\r\n } else {\r\n this.setPivotResidue(selector.obj.residue);\r\n }\r\n this._needRender = true;\r\n return;\r\n }\r\n // string - center on atoms correspond to selection string\r\n if (selector.obj === undefined && selector !== '') {\r\n const sel = selectors.parse(selector);\r\n if (sel.error === undefined) {\r\n this.setPivotSubset(sel);\r\n this._needRender = true;\r\n return;\r\n }\r\n }\r\n // empty subset or incorrect/empty string - center on all molecule;\r\n this.resetPivot();\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Build selector that contains all atoms within given distance from group of atoms\r\n * @param {Selector} selector - selector describing source group of atoms\r\n * @param {number} radius - distance\r\n * @returns {Selector} selector describing result group of atoms\r\n */\r\nMiew.prototype.within = function (selector, radius) {\r\n const visual = this._getComplexVisual();\r\n if (!visual) {\r\n return selectors.None();\r\n }\r\n\r\n if (selector instanceof String) {\r\n selector = selectors.parse(selector);\r\n }\r\n\r\n const res = visual.within(selector, radius);\r\n if (res) {\r\n visual.rebuildSelectionGeometry();\r\n this._needRender = true;\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Get atom position in 2D canvas coords\r\n * @param {string} fullAtomName - full atom name, like A.38.CG\r\n * @returns {Object} {x, y} or false if atom not found\r\n */\r\nMiew.prototype.projected = function (fullAtomName, complexName) {\r\n const visual = this._getComplexVisual(complexName);\r\n if (!visual) {\r\n return false;\r\n }\r\n\r\n const atom = visual.getComplex().getAtomByFullname(fullAtomName);\r\n if (atom === null) {\r\n return false;\r\n }\r\n\r\n const pos = atom.position.clone();\r\n // we consider atom position to be affected only by common complex transform\r\n // ignoring any transformations that may add during editing\r\n this._gfx.pivot.updateMatrixWorldRecursive();\r\n this._gfx.camera.updateMatrixWorldRecursive();\r\n this._gfx.pivot.localToWorld(pos);\r\n pos.project(this._gfx.camera);\r\n\r\n return {\r\n x: (pos.x + 1.0) * 0.5 * this._gfx.width,\r\n y: (1.0 - pos.y) * 0.5 * this._gfx.height,\r\n };\r\n};\r\n\r\n/**\r\n * Replace secondary structure with calculated one.\r\n *\r\n * DSSP algorithm implementation is used.\r\n *\r\n * Kabsch W, Sander C. 1983. Dictionary of protein secondary structure: pattern recognition of hydrogen-bonded and\r\n * geometrical features. Biopolymers. 22(12):2577-2637. doi:10.1002/bip.360221211.\r\n *\r\n * @param {string=} complexName - complex name\r\n */\r\nMiew.prototype.dssp = function (complexName) {\r\n const visual = this._getComplexVisual(complexName);\r\n if (!visual) {\r\n return;\r\n }\r\n visual.getComplex().dssp();\r\n\r\n // rebuild dependent representations (cartoon or ss-colored)\r\n visual._reprList.forEach((rep) => {\r\n if (rep.mode.id === 'CA' || rep.colorer.id === 'SS') {\r\n rep.needsRebuild = true;\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype.exportCML = function () {\r\n const self = this;\r\n\r\n function extractRotation(m) {\r\n const xAxis = new THREE.Vector3();\r\n const yAxis = new THREE.Vector3();\r\n const zAxis = new THREE.Vector3();\r\n m.extractBasis(xAxis, yAxis, zAxis);\r\n xAxis.normalize();\r\n yAxis.normalize();\r\n zAxis.normalize();\r\n const retMat = new THREE.Matrix4();\r\n retMat.identity();\r\n retMat.makeBasis(xAxis, yAxis, zAxis);\r\n return retMat;\r\n }\r\n\r\n function updateCMLData(complex) {\r\n const { root } = self._gfx;\r\n const mat = extractRotation(root.matrixWorld);\r\n const v4 = new THREE.Vector4(0, 0, 0, 0);\r\n const vCenter = new THREE.Vector4(0, 0, 0, 0);\r\n let xml = null;\r\n let ap = null;\r\n\r\n // update atoms in cml\r\n complex.forEachAtom((atom) => {\r\n if (atom.xmlNodeRef && atom.xmlNodeRef.xmlNode) {\r\n xml = atom.xmlNodeRef.xmlNode;\r\n ap = atom.position;\r\n v4.set(ap.x, ap.y, ap.z, 1.0);\r\n v4.applyMatrix4(mat);\r\n xml.setAttribute('x3', v4.x.toString());\r\n xml.setAttribute('y3', v4.y.toString());\r\n xml.setAttribute('z3', v4.z.toString());\r\n xml.removeAttribute('x2');\r\n xml.removeAttribute('y2');\r\n }\r\n });\r\n // update stereo groups in cml\r\n complex.forEachSGroup((sGroup) => {\r\n if (sGroup.xmlNodeRef && sGroup.xmlNodeRef.xmlNode) {\r\n xml = sGroup.xmlNodeRef.xmlNode;\r\n ap = sGroup.getPosition();\r\n v4.set(ap.x, ap.y, ap.z, 1.0);\r\n const cp = sGroup.getCentralPoint();\r\n if (cp === null) {\r\n v4.applyMatrix4(mat);\r\n } else {\r\n vCenter.set(cp.x, cp.y, cp.z, 0.0);\r\n v4.add(vCenter);\r\n v4.applyMatrix4(mat); // pos in global space\r\n vCenter.set(cp.x, cp.y, cp.z, 1.0);\r\n vCenter.applyMatrix4(mat);\r\n v4.sub(vCenter);\r\n }\r\n xml.setAttribute('x', v4.x.toString());\r\n xml.setAttribute('y', v4.y.toString());\r\n xml.setAttribute('z', v4.z.toString());\r\n }\r\n });\r\n }\r\n\r\n const visual = self._getComplexVisual();\r\n const complex = visual ? visual.getComplex() : null;\r\n if (complex && complex.originalCML) {\r\n updateCMLData(complex);\r\n\r\n // serialize xml structure to string\r\n const oSerializer = new XMLSerializer();\r\n return oSerializer.serializeToString(complex.originalCML);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Reproduce the RCSB PDB Molecule of the Month style by David S. Goodsell\r\n *\r\n * @see http://pdb101.rcsb.org/motm/motm-about\r\n */\r\nMiew.prototype.motm = function () {\r\n settings.set({\r\n fogColorEnable: true,\r\n fogColor: 0x000000,\r\n outline: { on: true, threshold: 0.01 },\r\n bg: { color: 0xffffff },\r\n });\r\n\r\n this._forEachComplexVisual((visual) => {\r\n const rep = [];\r\n const complex = visual.getComplex();\r\n const palette = palettes.get(settings.now.palette);\r\n for (let i = 0; i < complex.getChainCount(); i++) {\r\n const curChainName = complex._chains[i]._name;\r\n const curChainColor = palette.getChainColor(curChainName);\r\n rep[i] = {\r\n selector: `chain ${curChainName}`,\r\n mode: 'VW',\r\n colorer: ['CB', { color: curChainColor, factor: 0.9 }],\r\n material: 'FL',\r\n };\r\n }\r\n visual.resetReps(rep);\r\n });\r\n};\r\n\r\nMiew.prototype.VERSION = (typeof PACKAGE_VERSION !== 'undefined' && PACKAGE_VERSION) || '0.0.0-dev';\r\n\r\n// Uncomment this to get debug trace:\r\n// Miew.prototype.debugTracer = new utils.DebugTracer(Miew.prototype);\r\n\r\n_.assign(Miew, /** @lends Miew */ {\r\n VERSION: Miew.prototype.VERSION,\r\n\r\n registeredPlugins: [],\r\n\r\n // export namespaces // TODO: WIP: refactoring external interface\r\n chem,\r\n io,\r\n modes,\r\n colorers,\r\n materials,\r\n palettes,\r\n options,\r\n settings,\r\n utils,\r\n gfx: {\r\n Representation,\r\n },\r\n\r\n /**\r\n * Third-party libraries packaged together with Miew.\r\n *\r\n * @property {object} lodash - [Lodash](https://lodash.com/), a modern JavaScript utility library delivering\r\n * modularity, performance & extras.\r\n * @property {object} three - [three.js](https://threejs.org/), JavaScript 3D library.\r\n *\r\n * @example\r\n * var _ = Miew.thirdParty.lodash;\r\n * var opts = _.merge({ ... }, Miew.options.fromURL(window.location.search));\r\n * var miew = new Miew(opts);\r\n */\r\n thirdParty: {\r\n lodash: _,\r\n three: THREE,\r\n },\r\n});\r\n\r\nexport default Miew;\r\n","import palettes from '../gfx/palettes';\r\nimport settings from '../settings';\r\n\r\nconst modeIdDesc = {\r\n $help: [\r\n 'Rendering mode shortcut',\r\n ' BS - balls and sticks mode',\r\n ' LN - lines mode',\r\n ' LC - licorice mode',\r\n ' VW - van der waals mode',\r\n ' TR - trace mode',\r\n ' TU - tube mode',\r\n ' CA - cartoon mode',\r\n ' SA - isosurface mode',\r\n ' QS - quick surface mode',\r\n ' SE - solvent excluded mode',\r\n ' TX - text mode',\r\n ],\r\n BS: {\r\n $help: [\r\n ' Balls and sticks',\r\n ' aromrad = #aromatic radius',\r\n ' atom = #atom radius',\r\n ' bond = #bond radius',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' space = #space value\\n',\r\n ],\r\n },\r\n CA: {\r\n $help: [\r\n ' Cartoon',\r\n ' arrow = #arrow size',\r\n ' depth = #depth of surface',\r\n ' heightSegmentsRatio = ',\r\n ' radius = #tube radius',\r\n ' tension = #',\r\n ' width = #secondary width\\n',\r\n ],\r\n },\r\n LN: {\r\n $help: [\r\n ' Lines',\r\n ' atom = #atom radius',\r\n ' chunkarom = ',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' offsarom = \\n',\r\n ],\r\n },\r\n LC: {\r\n $help: [\r\n ' Licorice',\r\n ' aromrad = #aromatic radius',\r\n ' bond = #bond radius',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' space = #space value\\n',\r\n ],\r\n },\r\n VW: {\r\n $help: [\r\n ' Van der Waals',\r\n ' nothing\\n',\r\n ],\r\n },\r\n TR: {\r\n $help: [\r\n ' Trace',\r\n ' radius = #tube radius\\n',\r\n ],\r\n },\r\n TU: {\r\n $help: [\r\n ' Tube',\r\n ' heightSegmentsRatio = ',\r\n ' radius = #tube radius',\r\n ' tension = \\n',\r\n ],\r\n },\r\n SA: {\r\n $help: [\r\n ' Surface',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n QS: {\r\n $help: [\r\n ' Quick surface',\r\n ' isoValue = ',\r\n ' scale = ',\r\n ' wireframe = ',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n SE: {\r\n $help: [\r\n ' Solvent excluded surface',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n TX: {\r\n $help: [\r\n ' Text mode',\r\n ' template = string that can include \"{{ id }}\"',\r\n ' it will be replaced by value, id can be one of next:',\r\n ' serial, name, type, sequence, residue, chain, hetatm, water\\n',\r\n ' horizontalAlign = {\"left\", \"right\", \"center\"}',\r\n ' verticalAlign = {\"top\", \"bottom\", \"middle\"}',\r\n ' dx = #offset along x',\r\n ' dy = #offset along y',\r\n ' dz = #offset along z',\r\n ' fg = #text color modificator',\r\n ' could be keyword, named color or hex',\r\n ' fg = #back color modificator',\r\n ' could be keyword, named color or hex',\r\n ' showBg = #if set show background',\r\n ' plate under text',\r\n ],\r\n },\r\n};\r\n\r\nconst colorDesc = {\r\n $help: [\r\n 'Coloring mode shortcut',\r\n ' EL - color by element',\r\n ' CH - color by chain',\r\n ' SQ - color by sequence',\r\n ' RT - color by residue type',\r\n ' SS - color by secondary structure',\r\n ' UN - uniform',\r\n ],\r\n UN: {\r\n $help: [\r\n 'Parameters of coloring modes customization',\r\n ' Uniform',\r\n ' color = #RGB->HEX->dec\\n',\r\n ],\r\n color: {\r\n $help: Object.keys(palettes.get(settings.now.palette).namedColors).sort().join('\\n'),\r\n },\r\n },\r\n};\r\n\r\nconst materialDesc = {\r\n $help: [\r\n 'Material shortcut',\r\n ' DF - diffuse',\r\n ' TR - transparent',\r\n ' SF - soft plastic',\r\n ' PL - glossy plastic',\r\n ' ME - metal',\r\n ' GL - glass',\r\n ],\r\n};\r\n\r\nconst addRepDesc = {\r\n $help: [\r\n 'Short (packed) representation description as a set of variables',\r\n ' s=',\r\n ' selector property',\r\n ' m=[!:[,...]]',\r\n ' render mode property',\r\n ' c=[!:[,...]]',\r\n ' color mode property',\r\n ' mt=',\r\n ' material property',\r\n ],\r\n s: {\r\n $help: 'Selection expression string as it is in menu->representations->selection',\r\n },\r\n m: modeIdDesc,\r\n c: colorDesc,\r\n mt: materialDesc,\r\n};\r\n\r\nconst setGetParameterDesc = {\r\n $help: [\r\n 'Parameters of rendering modes customization: modes',\r\n 'Parameters of colorer customization: colorers',\r\n 'Autobuild: autobuild = (|)',\r\n ],\r\n modes: modeIdDesc,\r\n colorers: colorDesc,\r\n};\r\n\r\nconst help = {\r\n $help: [\r\n 'help (| )',\r\n 'You can get detailed information about command options',\r\n ' using \"help cmd.opt.opt.[...]\"\\n',\r\n ' you can use one line comments',\r\n ' everything started from (#|//) will be skipped',\r\n ' Example: >build //some comment\\n',\r\n 'List of available commands:',\r\n ],\r\n reset: {\r\n $help: [\r\n 'Reload current object, delete all representations',\r\n ' Nothing will work until load new object',\r\n ],\r\n },\r\n load: {\r\n $help: [\r\n 'load (||-f [<*.NC FILE URL STRING>])',\r\n ' Load new pdb object from selected source',\r\n ],\r\n PDBID: {\r\n $help: 'pdb id in remote molecule database',\r\n },\r\n URL: {\r\n $help: 'url to source file',\r\n },\r\n f: {\r\n $help: [\r\n 'open file system dialog to fetch local file',\r\n 'optionally you can determine trajectory file',\r\n 'via URL for *.top model',\r\n ],\r\n },\r\n },\r\n clear: {\r\n $help: 'No args. Clear terminal',\r\n },\r\n add: {\r\n $help: [\r\n 'add [] []',\r\n ' Add new item to representation set with',\r\n ' default or params',\r\n ],\r\n REP_NAME: {\r\n $help: 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n },\r\n DESCRIPTION: addRepDesc,\r\n },\r\n rep: {\r\n $help: [\r\n 'rep [|] []',\r\n ' set current representation by name or index',\r\n ' edit current representation by ',\r\n ],\r\n REP_NAME: {\r\n $help: [\r\n 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n 'Must be declared before',\r\n ],\r\n },\r\n REP_INDEX: {\r\n $help: 'Index of available representation',\r\n },\r\n DESCRIPTION: addRepDesc,\r\n },\r\n remove: {\r\n $help: [\r\n 'remove (|)',\r\n 'Remove representation by name or index',\r\n ],\r\n REP_NAME: {\r\n $help: [\r\n 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n 'Must be declared before',\r\n ],\r\n },\r\n REP_INDEX: {\r\n $help: 'Index of available representation',\r\n },\r\n },\r\n selector: {\r\n $help: [\r\n 'selector ',\r\n ' set selector from EXPRESSION to current representation',\r\n ],\r\n EXPRESSION: {\r\n $help: 'Selection expression string as it is in menu->representations->selection',\r\n },\r\n },\r\n mode: {\r\n $help: [\r\n 'mode [=...]',\r\n ' set rendering mode and apply parameters to current representation',\r\n ],\r\n MODE_ID: modeIdDesc,\r\n },\r\n color: {\r\n $help: [\r\n 'color [=...]',\r\n ' set colorer and apply parameters to current representation',\r\n ],\r\n COLORER_ID: colorDesc,\r\n },\r\n material: {\r\n $help: [\r\n 'material ',\r\n ' set material to current representation',\r\n ],\r\n MATERIAL_ID: materialDesc,\r\n },\r\n build: {\r\n $help: 'build help str',\r\n add: {\r\n $help: 'build.add',\r\n new: {\r\n $help: [\r\n 'add.new',\r\n 'add.new new line 1',\r\n 'add.new new line 2',\r\n 'add.new new line 3',\r\n ],\r\n },\r\n },\r\n del: {\r\n $help: 'build.del',\r\n },\r\n },\r\n list: {\r\n $help: [\r\n 'list [-e|-s||]',\r\n 'Print representations if no args print list of representations',\r\n ' -e expand list and show all representations',\r\n ' -s show all user-registered selectors',\r\n ' | show only current representation',\r\n ],\r\n },\r\n hide: {\r\n $help: [\r\n 'hide (|)',\r\n 'Hide representation referenced in args',\r\n ],\r\n },\r\n show: {\r\n $help: [\r\n 'show (|)',\r\n 'Show representation referenced in args',\r\n ],\r\n },\r\n get: {\r\n $help: [\r\n 'get ',\r\n 'Print value',\r\n ' - path to option use get.PARAMETER to get more info',\r\n ],\r\n PARAMETER: setGetParameterDesc,\r\n },\r\n set: {\r\n $help: [\r\n 'set ',\r\n 'Set with ',\r\n ' - path to option use set.PARAMETER to get more info',\r\n ],\r\n PARAMETER: setGetParameterDesc,\r\n },\r\n set_save: {\r\n $help: [\r\n 'set_save',\r\n 'Save current settings to cookie',\r\n ],\r\n },\r\n set_restore: {\r\n $help: [\r\n 'set_restore',\r\n 'Load and apply settings from cookie',\r\n ],\r\n },\r\n set_reset: {\r\n $help: [\r\n 'set_reset',\r\n 'Reset current settings to the defaults',\r\n ],\r\n },\r\n preset: {\r\n $help: [\r\n 'preset []',\r\n 'Reset current representation or set preset to ',\r\n ],\r\n PRESET: {\r\n $help: [\r\n 'default',\r\n 'wire',\r\n 'small',\r\n 'macro',\r\n ],\r\n },\r\n },\r\n unit: {\r\n $help: [\r\n 'unit []',\r\n 'Change current biological structure view. Zero value means asymmetric unit,',\r\n 'positive values set an assembly with corresponding number.',\r\n 'Being called with no parameters command prints current unit information.',\r\n ],\r\n },\r\n view: {\r\n $help: [\r\n 'view []',\r\n 'Get current encoded view or set if ENCODED_VIEW placed as argument',\r\n ],\r\n ENCODED_VIEW: {\r\n $help: [\r\n 'encoded view matrix string (binary code)',\r\n ],\r\n },\r\n },\r\n rotate: {\r\n $help: [\r\n 'rotate (x|y|z) [] [(x|y|z) []]...',\r\n 'Rotate scene',\r\n ],\r\n },\r\n scale: {\r\n $help: [\r\n 'scale ',\r\n 'Scale scene',\r\n ],\r\n },\r\n select: {\r\n $help: [\r\n 'select [as ]',\r\n 'Select atoms using selector defined in SELECTOR_STRING',\r\n ' and if SELECTOR_NAME is defined register it in viewer',\r\n ' you can use it later as a complex selector',\r\n ],\r\n },\r\n within: {\r\n $help: [\r\n 'within of as ',\r\n 'Build within named selector',\r\n ' DISTANCE ',\r\n ' SELECTOR_STRING ',\r\n ' SELECTOR_NAME ',\r\n ],\r\n },\r\n url: {\r\n $help: [\r\n 'url [-s] [-v]',\r\n 'Report URL encoded scene',\r\n ' if -s set that include settings in the URL',\r\n ' if -v set that include view in the URL',\r\n ],\r\n },\r\n screenshot: {\r\n $help: [\r\n 'screenshot [ []]',\r\n 'Make a screenshot of the scene',\r\n ' WIDTH in pixels',\r\n ' HEIGHT in pixels, equal to WIDTH by default',\r\n ],\r\n },\r\n line: {\r\n $help: [\r\n 'line [=]',\r\n 'Draw dashed line between two specified atoms',\r\n ],\r\n },\r\n removeobj: {\r\n $help: [\r\n 'removeobj ',\r\n 'Remove scene object by its index. Indices could be obtained by command',\r\n ],\r\n },\r\n listobj: {\r\n $help: [\r\n 'listobj',\r\n 'Display the list of all existing scene objects',\r\n ],\r\n },\r\n};\r\n\r\nexport default help;\r\n","import _ from 'lodash';\r\nimport Miew from './Miew';\r\nimport { parser as parsercli } from './utils/MiewCLIParser';\r\nimport clihelp from './utils/MiewCLIHelp';\r\nimport logger from './utils/logger';\r\nimport utils from './utils';\r\n\r\nconst {\r\n chem: { selectors },\r\n modes,\r\n colorers,\r\n materials,\r\n palettes,\r\n options,\r\n settings,\r\n} = Miew;\r\n\r\nfunction None() {\r\n}\r\n\r\nconst NULL = (function () {\r\n const obj = new None();\r\n return function () {\r\n return obj;\r\n };\r\n}());\r\n\r\nclass RepresentationMap {\r\n constructor() {\r\n this.representationMap = {};\r\n this.representationID = {};\r\n }\r\n\r\n get(strId) {\r\n return this.representationMap[strId] || this.representationID[strId] || '';\r\n }\r\n\r\n add(strId, index) {\r\n if (strId === -1) {\r\n return 'Can not create representation: there is no data';\r\n }\r\n\r\n if (index !== undefined) {\r\n if (!this.representationMap.hasOwnProperty(strId)) {\r\n this.representationMap[strId.toString()] = index;\r\n this.representationID[index] = strId.toString();\r\n } else {\r\n return 'This name has already existed, registered without name';\r\n }\r\n }\r\n return `Representation ${strId} successfully added`;\r\n }\r\n\r\n remove(index) {\r\n if (index && this.representationID.hasOwnProperty(index)) {\r\n delete this.representationMap[this.representationID[index]];\r\n delete this.representationID[index];\r\n }\r\n\r\n const sortedKeys = Object.keys(this.representationID).sort();\r\n for (const i in sortedKeys) {\r\n if (sortedKeys.hasOwnProperty(i)) {\r\n const id = sortedKeys[i];\r\n if (id > index) {\r\n this.representationID[id - 1] = this.representationID[id];\r\n this.representationMap[this.representationID[id]] -= 1;\r\n delete this.representationID[id];\r\n }\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n this.representationMap = {};\r\n this.representationID = {};\r\n }\r\n}\r\n\r\nconst representationsStorage = new RepresentationMap();\r\n\r\nfunction keyRemap(key) {\r\n const keys = {\r\n s: 'selector',\r\n m: 'mode',\r\n c: 'colorer',\r\n mt: 'material',\r\n mode: 'modes',\r\n color: 'colorers',\r\n colorer: 'colorers',\r\n select: 'selector',\r\n material: 'materials',\r\n selector: 'selector',\r\n };\r\n const ans = keys[key];\r\n return ans === undefined ? key : ans;\r\n}\r\n\r\nclass CLIUtils {\r\n list(miew, repMap, key) {\r\n let ret = '';\r\n if (miew && repMap !== undefined) {\r\n if (key === undefined || key === '-e') {\r\n const count = miew.repCount();\r\n\r\n for (let i = 0; i < count; i++) {\r\n ret += this.listRep(miew, repMap, i, key);\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n listRep(miew, repMap, repIndex, key) {\r\n let ret = '';\r\n const rep = miew.repGet(repIndex);\r\n if (!rep) {\r\n logger.warn(`Rep ${repIndex} does not exist!`);\r\n return ret;\r\n }\r\n const index = repIndex;\r\n const repName = repMap.get(index);\r\n\r\n const { mode, colorer } = rep;\r\n const selectionStr = rep.selectorString;\r\n const material = rep.materialPreset;\r\n\r\n ret += `#${index} : ${mode.name}${repName === '' ? '' : `, ${repName}`}\\n`;\r\n\r\n if (key !== undefined) {\r\n ret += ` selection : \"${selectionStr}\"\\n`;\r\n ret += ` mode : (${mode.id}), ${mode.name}\\n`;\r\n ret += ` colorer : (${colorer.id}), ${colorer.name}\\n`;\r\n ret += ` material : (${material.id}), ${material.name}\\n`;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n listSelector(miew, context) {\r\n let ret = '';\r\n\r\n for (const k in context) {\r\n if (context.hasOwnProperty(k)) {\r\n ret += `${k} : \"${context[k]}\"\\n`;\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n listObjs(miew) {\r\n const objs = miew._objects;\r\n\r\n if (!objs || !Array.isArray(objs) || objs.length === 0) {\r\n return 'There are no objects on the scene';\r\n }\r\n\r\n const strList = [];\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n strList[i] = `${i}: ${objs[i].toString()}`;\r\n }\r\n\r\n return strList.join('\\n');\r\n }\r\n\r\n joinHelpStr(helpData) {\r\n if (helpData instanceof Array) {\r\n return helpData.join('\\n');\r\n }\r\n return helpData;\r\n }\r\n\r\n help(path) {\r\n if (_.isUndefined(path)) {\r\n return `${this.joinHelpStr(clihelp.$help)}\\n${_.slice(_.sortBy(_.keys(clihelp)), 1).join(', ')}\\n`;\r\n }\r\n\r\n const helpItem = _.get(clihelp, path);\r\n return _.isUndefined(helpItem) ? this.help() : `${this.joinHelpStr(helpItem.$help)}\\n`;\r\n }\r\n\r\n load(miew, arg) {\r\n if (miew === undefined || arg === undefined || arg === '-f') {\r\n return;\r\n }\r\n miew.awaitWhileCMDisInProcess();\r\n const finish = () => miew.finishAwaitingCMDInProcess();\r\n miew.load(arg).then(finish, finish);\r\n }\r\n\r\n checkArg(key, arg, modificate) {\r\n if (key !== undefined && arg !== undefined) {\r\n if (keyRemap(key) === 'selector') {\r\n const res = selectors.parse(arg);\r\n\r\n if (res.error !== undefined) {\r\n const selExc = { message: res.error };\r\n throw selExc;\r\n }\r\n\r\n if (modificate !== undefined && modificate) {\r\n return res.selector;\r\n }\r\n return arg;\r\n }\r\n\r\n const modificators = {\r\n colorers,\r\n modes,\r\n materials,\r\n };\r\n\r\n let modificator = key;\r\n let temp;\r\n while (modificator !== temp) {\r\n temp = modificator;\r\n modificator = keyRemap(temp);\r\n }\r\n\r\n if (modificators[modificator].get(arg) === undefined) {\r\n const exc = { message: `${arg} is not existed in ${modificator}` };\r\n throw exc;\r\n }\r\n return arg;\r\n }\r\n return NULL;\r\n }\r\n\r\n propagateProp(path, arg) {\r\n if (path !== undefined) {\r\n let argExc = {};\r\n const adapter = options.adapters[typeof _.get(settings.defaults, path)];\r\n if (adapter === undefined) {\r\n const pathExc = { message: `${path} is not existed` };\r\n throw pathExc;\r\n }\r\n\r\n if ((path.endsWith('.color') || path.endsWith('.baseColor')\r\n || path.endsWith('.EL.carbon')) && typeof arg !== 'number') {\r\n arg = palettes.get(settings.now.palette).getNamedColor(arg);\r\n }\r\n\r\n if (path.endsWith('.fg') || path.endsWith('.bg')) {\r\n if (typeof arg !== 'number') {\r\n const val = palettes.get(settings.now.palette).getNamedColor(arg, true);\r\n if (val !== undefined) {\r\n arg = `0x${val.toString(16)}`;\r\n }\r\n } else {\r\n arg = `0x${arg.toString(16)}`;\r\n }\r\n }\r\n\r\n if (path.endsWith('.template')) {\r\n arg = arg.replace(/\\\\n/g, '\\n');// NOSONAR\r\n }\r\n\r\n if (arg !== undefined && adapter(arg) !== arg && adapter(arg) !== (arg > 0)) {\r\n argExc = { message: `${path} must be a \"${typeof _.get(settings.defaults, path)}\"` };\r\n throw argExc;\r\n }\r\n }\r\n return arg;\r\n }\r\n\r\n unquoteString(value) {\r\n return utils.unquoteString(value);\r\n }\r\n}\r\n// repIndexOrRepMap could be RepresentationMap or index\r\n\r\nconst utilFunctions = new CLIUtils();\r\n\r\nfunction CreateObjectPair(a, b) {\r\n const obj = {};\r\n obj[a] = b;\r\n return obj;\r\n}\r\n\r\nfunction ArgList(arg) {\r\n if (arg instanceof this.constructor) {\r\n return arg;\r\n }\r\n if (arg instanceof Array) {\r\n this._values = arg.slice(0);\r\n } else if (arg) {\r\n this._values = [arg];\r\n } else {\r\n this._values = [];\r\n }\r\n}\r\n\r\nArgList.prototype.append = function (value) {\r\n const values = this._values;\r\n values[values.length] = value;\r\n return this;\r\n};\r\n\r\nArgList.prototype.remove = function (value) {\r\n const values = this._values;\r\n const index = values.indexOf(value);\r\n if (index >= 0) {\r\n values.splice(index, 1);\r\n }\r\n return this;\r\n};\r\n\r\nArgList.prototype.toJSO = function (cliUtils, cmd, arg) {\r\n const res = {};\r\n\r\n const list = this._values;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n _.set(res, list[i].id, cliUtils.propagateProp(`${keyRemap(cmd)}.${arg}.${list[i].id}`, list[i].val));\r\n }\r\n\r\n return res;\r\n};\r\n\r\nfunction Arg(_id, _val) {\r\n this.id = _id;\r\n this.val = _val;\r\n}\r\n\r\nconst cliutils = Object.create({});\r\n\r\ncliutils.Arg = Arg;\r\ncliutils.ArgList = ArgList;\r\n\r\ncliutils.miew = null;\r\ncliutils.echo = null;\r\ncliutils.representations = representationsStorage;\r\ncliutils.utils = utilFunctions;\r\n\r\ncliutils._ = _;\r\ncliutils.CreateObjectPair = CreateObjectPair;\r\ncliutils.keyRemap = keyRemap;\r\ncliutils.Context = selectors.Context;\r\ncliutils.ClearContext = selectors.ClearContext;\r\n\r\ncliutils.NULL = NULL;\r\n\r\ncliutils.notimplemented = function () {\r\n return this.NULL;\r\n};\r\n\r\nMiew.prototype.script = function (script, _printCallback, _errorCallback) {\r\n parsercli.yy.miew = this;\r\n parsercli.yy.echo = _printCallback;\r\n parsercli.yy.error = _errorCallback;\r\n if (this.cmdQueue === undefined) {\r\n this.cmdQueue = [];\r\n }\r\n\r\n if (this.commandInAction === undefined) {\r\n this.commandInAction = false;\r\n }\r\n\r\n this.cmdQueue = this.cmdQueue.concat(script.split('\\n'));\r\n};\r\n\r\nMiew.prototype.awaitWhileCMDisInProcess = function () {\r\n this.commandInAction = true;\r\n};\r\n\r\nMiew.prototype.finishAwaitingCMDInProcess = function () {\r\n this.commandInAction = false;\r\n};\r\n\r\nMiew.prototype.isScriptingCommandAvailable = function () {\r\n return this.commandInAction !== undefined\r\n && !this.commandInAction\r\n && this.cmdQueue !== undefined\r\n && this.cmdQueue.length > 0;\r\n};\r\n\r\nMiew.prototype.callNextCmd = function () {\r\n if (this.isScriptingCommandAvailable()) {\r\n const cmd = this.cmdQueue.shift();\r\n\r\n const res = {};\r\n res.success = false;\r\n try {\r\n parsercli.parse(cmd);\r\n res.success = true;\r\n } catch (e) {\r\n res.error = e.message;\r\n parsercli.yy.error(res.error);\r\n this.finishAwaitingCMDInProcess();\r\n }\r\n return res;\r\n }\r\n return '';\r\n};\r\n\r\nparsercli.yy = cliutils;\r\n// workaround for incorrect JISON parser generator for AMD module\r\nparsercli.yy.parseError = parsercli.parseError;\r\n","import Miew from './Miew';\r\nimport './Miew-cli';\r\n\r\nexport default Miew;\r\n"],"names":["parser","o","k","v","l","length","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","$VV","$VW","$VX","$VY","$VZ","$V_","$V$","$V01","$V11","$V21","$V31","$V41","$V51","$V61","trace","yy","symbols_","terminals_","productions_","performAction","anonymous","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","miew","reset","ClearContext","resetReps","rebuild","rebuildAll","echo","utils","help","toString","motm","propagateProp","get","set","saveSettings","restoreSettings","resetSettings","applyPreset","repRemove","representations","remove","repHide","listRep","list","listSelector","Context","select","checkArg","toLowerCase","rep","repCurrent","selector","within","Number","material","toUpperCase","view","changeUnit","dssp","scale","i","n","rotate","Math","PI","translate","center","addObject","type","params","opts","toJSO","listObjs","removeObject","getURL","settings","screenshotSave","load","clear","add","repAdd","mode","Array","colorer","_","assign","CreateObjectPair","key","val","Object","create","keyRemap","concat","ArgList","append","Arg","parseInt","JSON","parse","String","table","defaultActions","parseError","str","hash","recoverable","error","Error","input","self","stack","tstack","vstack","lstack","recovering","TERROR","EOF","args","slice","call","arguments","lexer","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","push","ranges","options","getPrototypeOf","popStack","lex","token","pop","symbol","preErrorSymbol","state","action","a","r","yyval","p","len","newState","expected","errStr","showPosition","join","text","match","line","loc","first_line","last_line","first_column","last_column","range","apply","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","lines","unput","split","substr","oldLines","more","reject","backtrack_lexer","less","pastInput","past","replace","upcomingInput","next","pre","c","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","flex","begin","condition","popState","conditions","topState","abs","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","YYSTATE","unquoteString","Parser","module","exports","keyword","GetSelector","RangeList","Range","ValueList","AbstractInterpolator","CubicInterpolator","Enum","LinearInterpolator","NearestInterpolator","SincFilterInterpolator","Smooth","clipClamp","clipMirror","clipPeriodic","defaultConfig","getColumn","getType","isValidNumber","makeLanczosWindow","makeScaledFunction","makeSincKernel","normalizeScaleTo","shallowCopy","sin","sinc","validateNumber","validateVector","__hasProp","__extends","child","parent","ctor","constructor","__super__","METHOD_NEAREST","METHOD_LINEAR","METHOD_CUBIC","METHOD_LANCZOS","METHOD_SINC","CLIP_CLAMP","CLIP_ZERO","CLIP_PERIODIC","CLIP_MIRROR","CUBIC_TENSION_DEFAULT","CUBIC_TENSION_CATMULL_ROM","method","cubicTension","clip","scaleTo","sincFilterSize","sincWindow","max","min","period","array","config","clipHelper","clamp","clipHelperClamp","zero","clipHelperZero","periodic","clipHelperPeriodic","mirror","clipHelperMirror","getClippedInput","interpolate","t","_super","round","floor","tangentFactor","getTangent","m","t2","t3","x","window","kernel","sum","_ref","_ref2","arr","row","_i","_len","_results","f","baseScale","scaleRange","scaleFactor","translation","isNaN","isFinite","dimension","s","invalidErr","obj","copy","baseDomainEnd","interpolator","interpolatorClass","interpolators","properties","smoothFunc","lanczosFilterSize","nearest","linear","cubic","lanczos","count","_j","_len2","deepValidation","_k","_len3","domain","sort","define","amd","MMTF","e","byteLength","charCodeAt","setUint8","u","setUint16","setUint32","Uint8Array","buffer","setFloat64","setInt8","setInt16","setInt32","isArray","d","keys","ArrayBuffer","DataView","byteOffset","Int8Array","Int32Array","Float32Array","Int16Array","g","L","h","setFloat32","getFloat32","y","U","b","I","w","C","ceil","A","M","F","S","E","N","O","T","getInt32","subarray","j","q","D","P","z","B","V","G","R","rr","forEach","bondAtomList","bondOrderList","xCoordList","yCoordList","zCoordList","bFactorList","atomIdList","altLocList","occupancyList","groupIdList","groupTypeList","secStructList","insCodeList","sequenceIndexList","chainIdList","chainNameList","H","fromCharCode","getInt8","getUint8","getUint16","getUint32","getFloat64","getInt16","W","X","ignoreFields","nr","indexOf","J","K","firstModelOnly","onModel","onChain","onGroup","onAtom","onBond","chainsPerModel","chainCount","modelIndex","groupsPerChain","groupCount","chainIndex","chainId","chainName","groupList","atomNameList","atomCount","groupIndex","groupId","groupType","groupName","singleLetterCode","chemCompType","secStruct","insCode","sequenceIndex","atomIndex","atomId","element","elementList","atomName","formalCharge","formalChargeList","xCoord","yCoord","zCoord","bFactor","altLoc","occupancy","atomIndex1","atomIndex2","bondOrder","Q","Y","Z","response","XMLHttpRequest","addEventListener","responseType","open","send","or","ar","tr","er","ir","encode","decode","traverse","fetch","fetchReduced","version","fetchUrl","fetchReducedUrl","encodeMsgpack","encodeMmtf","decodeMsgpack","decodeMmtf","__assign","defaults","width","radius","corners","color","fadeColor","animation","direction","speed","zIndex","className","top","left","shadow","position","Spinner","spin","target","stop","el","document","createElement","setAttribute","style","transform","insertBefore","firstChild","drawLines","parentNode","removeChild","undefined","getColor","idx","borderRadius","shadows","parseBoxShadow","degrees","backgroundLine","height","background","transformOrigin","delay","boxShadow","normalizeShadow","appendChild","regex","_a","xUnits","yUnits","prefix","end","normalized","shadows_1","xy","convertOffset","radians","cos","Timer","startTime","oldTime","elapsedTime","running","start","now","getElapsedTime","update","delta","newTime","performance","bind","Date","tag","id","css","cssText","Stats","domElement","_text","_startTime","_prevTime","_deltas","_index","_total","_count","time","ms","fps","textContent","toPrecision","show","on","display","isUndefOrEqual","param","value","EventDispatcher","_handlers","callback","context","handlers","_checkPar","par","find","removeEventListener","handler","ev","values","omitBy","dispatchEvent","event","priorities","debug","info","report","warn","Logger","console","_priority","instantiate","verify","number","isNumber","defineProperty","findKey","level","levels","message","priority","_message","output","log","logger","browserType","DEFAULT","SAFARI","encodeQueryComponent","excludeExp","code","encodeURIComponent","decodeQueryComponent","decodeURIComponent","getUrlParameters","url","location","search","query","substring","result","exec","getUrlParametersAsDict","resolveURL","URL","href","anchor","generateRegExp","symbolStr","symbolList","listStr","RegExp","attrs","content","createTextNode","HTMLElement","deriveClass","cls","base","members","statics","deriveDeep","needZeroOwnProperties","res","hexColor","hex","DebugTracer","namespace","enabled","enable","indent","methods","wrap","method_","name_","spaces","_key","name","Function","OutOfMemoryError","allocateTyped","TypedArrayName","size","RangeError","bytesToBase64","bytes","binary","btoa","bytesFromBase64","atob","arrayToBase64","TypedArrayClass","arrayFromBase64","compareOptionsWithDefaults","defOpts","optsStr","isAlmostPlainObject","isPlainObject","proto","objectsDiff","src","dst","diff","forIn","srcValue","dstValue","deepDiff","isEmpty","isEqual","forInRecursive","object","iterateThrough","newPref","enquoteString","isString","SyntaxError","getFileExtension","fileName","lastIndexOf","Infinity","splitFileName","ext","dataUrlToBlob","parts","partsCount","Blob","getBrowser","navigator","vendor","userAgent","shotOpen","write","shotDownload","dataUrl","filename","msSaveBlob","link","download","innerHTML","createObjectURL","body","click","data","blobData","copySubArrays","indices","itemSize","shallowCloneNode","node","newNode","cloneNode","worldPos","unquotedStringRE","enquoteHelper","correctSelectorIdentifier","test","concatTypedArraysUnsafe","first","second","mergeTypedArraysUnsafe","reduce","acc","cur","JobHandle","_shouldCancel","cancel","shouldCancel","notify","slaveEvent","VERSION","modes","BS","atom","bond","space","multibond","aromrad","showarom","polyComplexity","poor","low","medium","high","ultra","VW","LN","offsarom","chunkarom","lineWidth","LC","SA","zClip","probeRadius","subset","wireframe","SE","QS","isoValue","gaussLim","gridSpacing","CS","probePositions","TR","TU","heightSegmentsRatio","tension","CA","depth","ss","helix","arrow","strand","TX","template","horizontalAlign","verticalAlign","dx","dy","dz","fg","bg","showBg","VD","kSigma","kSigmaMed","kSigmaMax","frame","isoMode","colorers","EL","carbon","UN","CO","baseColor","CB","factor","SQ","gradient","TM","OC","HY","MO","antialias","camFov","camNear","camFar","camDistance","radiusToFit","fogNearFactor","fogFarFactor","fogAlpha","fogColor","fogColorEnable","palette","resolution","autoResolution","autoPreset","preset","presets","default","empty","wire","small","macro","objects","dashSize","gapSize","transparent","draft","clipPlane","clipPlaneFactor","clipPlaneSpeed","plugins","axes","fog","zSprites","isoSurfaceFakeOpacity","suspendRender","nowater","autobuild","fxaa","outline","threshold","thickness","ao","autoRotation","maxfps","fbxprec","autoRotationAxisFixed","zooming","picking","pick","editing","aromatic","singleUnit","stereo","interpolateViews","transparency","translationSpeed","example","good","ssaoKernelRadius","ssaoFactor","stereoBarrel","use","multiFile","Settings","old","_changed","path","oldValue","_notifyChange","merge","_notifyChanges","defaultValue","cloneDeep","checkpoint","deepValue","deepPath","changed","filter","applyDiffs","diffs","getDiffs","versioned","setPluginOpts","plugin","repIndex","asBoolean","adapters","string","boolean","cL1Ass","cOptsSep","cL2Ass","cLSep","cCommonIgnoreSymbols","getLevel1ExcludedExpr","cLevel1Ignores","getLevel2ExcludedExpr","cLevel2Ignores","cL1ExclExpr","encodeQueryComponentL1","cL2ExclExpr","encodeQueryComponentL2","ensureRepList","reps","ensureRepAssign","prop","_objects","newOpts","newObj","parseParams","sep","extractArgs","defaultsDict","bang","inputVal","arg","pair","adapter","actions","unit","menu","mt","materials","dup","_fromArray","entries","entry","isFunction","fromAttr","attr","fromURL","_processOptsForURL","_processArgsForURL","_processObjForURL","objOpts","toURL","stringList","checkAndAdd","addReps","repList","addObjects","objList","protocol","host","pathname","_processOptsForScript","_processArgsForScript","_processObjForScript","map","_processRepsForScript","repString","strIdx","localAdd","toScript","commandsList","command","saveQuotes","quote","trim","Atom","residue","role","het","serial","temperature","charge","mask","hydrogenCount","radicalCount","valence","bonds","flags","Flags","HYDROGEN","CARBON","isHet","isHydrogen","getVisualName","forEachBond","process","getFullName","_chain","getName","_sequence","NONPOLARH","Element","fullName","weight","radiusBonding","hValency","hydrogenValency","Constants","U1","Lead","U2","Wing","U18","Role","SG","ByAtomicNumber","ByName","byAtomicNumber","byName","getByName","cBondTypes","UNKNOWN","COVALENT","AROMATIC","getAtomPos","Bond","right","order","fixed","_left","_right","_fixed","_order","_type","getLeft","getRight","getOrder","calcLength","distanceTo","_forEachNeighbour","currAtom","forEachLevelOne","forEachLevelTwo","l2Atom","_fixDir","refPoint","currDir","posGetter","rightCount","leftCount","tmpVec","clone","checkDir","sub","dotProd","dot","checkCarbon","stages","stageId","multiplyScalar","calcNormalDir","third","maxNeibs","another","secondPos","firstV","secondV","crossVectors","lengthSq","normalize","BondType","THREE","cNucleicControlNames","cNucleicWing1Names","cNucleicWing2Names","cCylinderSource","cCylinderTarget","types","atoms","Residue","chain","sequence","icode","_component","_icode","_mask","_atoms","_secondary","_firstAtom","_leadAtom","_wingAtom","_lastAtom","_controlPoint","_midPoint","_wingVector","_cylinders","_isValid","_het","_molecule","getChain","getMolecule","getSequence","getSecondary","getICode","addAtom","xyz","tempFactor","complex","getComplex","getAtomCount","forEachAtom","_findAtomByName","_findFirstAtomInList","names","collectMask","getCylinderTargetList","_name","_detectLeadWing","getAtomPosition","leadAtom","wingStart","wingEnd","cylSource","targetList","cylTarget","calcWing","prevLeadPos","currLeadPos","prevWingPos","prevWing","vectorA","vectorB","needToNegate","angleTo","negate","_innerFinalize","prevRes","prev","nextRes","chainAsNucleic","bFirstInChain","lp","Vector3","lerp","_finalize2","asNucleic","isConnected","anotherResidue","_finalize","tempCount","occupCount","ResidueType","letterCode","_fullName","StandardTypes","ALA","ARG","ASN","ASP","CYS","GLN","GLU","GLY","HIS","ILE","LEU","LYS","MET","PHE","PRO","PYL","SEC","SER","THR","TRP","TYR","VAL","DA","DC","DG","DI","DT","DU","WAT","H2O","HOH","DOD","UNK","UNL","PROTEIN","BASIC","ACIDIC","POLAR","NONPOLAR","NUCLEIC","PURINE","PYRIMIDINE","DNA","RNA","WATER","_addFlag","flag","hydro","_addParam","ChainType","Chain","_complex","_residues","minSequence","POSITIVE_INFINITY","maxSequence","NEGATIVE_INFINITY","getResidues","_determineType","residues","findResidue","seqNum","iCode","curr","updateToFrame","frameData","prevData","frameRes","currData","addResidue","getResidueType","addResidueType","getResidueCount","forEachResidue","StructuralElement","init","term","generic","genericByType","serialAtomMap","residueHash","splitUnifiedSerial","serialId","hashCode","getUnifiedSerial","Type","STRAND","BRIDGE","HELIX_310","HELIX_ALPHA","HELIX_PI","HELIX","TURN_310","TURN_ALPHA","TURN_PI","TURN","BEND","COIL","Generic","LOOP","StructuralElementType","StructuralElementGeneric","typeByPDBHelixClass","Helix","helixClass","comment","Strand","sheet","sense","atomCur","atomPrev","as","Sheet","_width","_strands","getWidth","addStrand","addEmptyStrand","SGroup","saveNode","_id","_position","_charge","_repeat","_center","xmlNodeRef","getPosition","getCentralPoint","_rebuildSGroupOnAtomChange","nLimon","bLow","bHight","aPos","addVectors","includes","toJSON","List","_values","splice","valuesArray","upperOnly","_validate","Selector","ListSelector","RangeListSelector","ValueListSelector","caseSensitive","NoneSelector","includesAtom","_atom","AllSelector","none","PrefixOperator","rhs","InfixOperator","lhs","keywords","defineSelector","SelectorClass","factory","SerialSelector","NameSelector","AltLocSelector","ElemSelector","ResidueSelector","SequenceSelector","ICodeSelector","ResIdxSelector","ChainSelector","HetatmSelector","PolarHSelector","NonPolarHSelector","NULL_SELECTOR","defineOperator","OperatorClass","NotOperator","AndOperator","OrOperator","byResidueTypeFlag","selectors","exc","BiologicalUnit","_selector","_boundaries","boundingBox","Box3","boundingSphere","Sphere","computeBoundaries","makeEmpty","expandByPoint","bbc","getCenter","setFromCenterAndSize","radiusSquared","pos","lengthSquared","distanceToSquared","sqrt","getTransforms","getSelector","getBoundaries","finalize","Assembly","chains","matrices","oldCenter","oldRad","applyMatrix4","newRad","addScalar","subScalar","addChain","addMatrix","matrix","Component","_residueIndices","_cycles","_subDivs","_residueCount","resIdc","idIdc","idCount","last","setSubDivs","subDivs","resCnt","_bonds","forEachCycle","cycle","addCycle","cycles","markResidues","_forEachSubChain","subs","currRes","endRes","getMaskedSequences","_subIdx","getMaskedSubdivSequences","currIdx","lastSubIdx","subIdx","boundaries","cMaxPairsForHashCode","cHashTableSize","cNumbersPerPair","cMaxNeighbours","cInvalidVal","cBigPrime","AtomPairs","maxPairsEstimate","numPairs","numMaxPairs","intBuffer","hashBuffer","destroy","addPair","indexA","indexB","ia","ib","codeToAdd","apI","cProfileBondBuilder","cEstBondsMultiplier","cSpaceCode","cBondTolerance","cVMDTolerance","cBondRadInJMOL","cEpsilon","_getBondingRadius","_isAtomEligible","AutoBond","_maxRad","bBox","getDefaultBoundaries","_vBoxMin","_vBoxMax","_pairCollection","_addExistingPairs","getAtoms","numAtoms","aInd","collection","numBondsForAtom","bInd","indTo","_findPairs","vw","getVoxelWorld","atomsNum","rA","isHydrogenA","posA","locationA","atomA","processAtom","atomB","locationB","dist2","rB","maxAcceptable","forEachAtomWithinRadius","_addPairs","iA","iB","_addPair","bondsA","numBonds","newBond","addBond","build","_buildInner","timeEnd","_calcBoundingBox","nAtoms","maxRad","cCrossThresh","cAromaticType","cAromaticAtoms","_coDirVectors","v1Tmp","v2Tmp","cp","v1","v2","_insertAscending","_anotherAtom","_cosBetween","theta","MathUtils","_markAromatic","Cycle","atomsList","nA","nextAtom","checkBond","_isAromatic","_isPossibleAromatic","rightIdx","leftIdx","_checkCycleSimple","_checkCycleComplex","assert","AromaticLoopsMarker","bondsData","bondMarks","_bondsData","_bondMarks","_resetCycles","_currIdx","_haveSameCycle","bond1","bond2","arr1","arr2","n1","n2","i1","i2","_tryBond","prevBond","currRight","bondsOrder","currLeft","currVec","startAtomRef","_currStart","checkAromatic","_checkBond","anotherAtom","anotherVec","newDir","cross","dir","newRight","_startCycle","_findLoops","checkCycle","forEachComponent","component","newCycle","markCycles","detectCycles","_getSphereSliceRadiusRange","zMin","zMax","dzMin","dzMax","rzMin","rzMax","rMin","rMax","_getCircleSliceRadiusRange","yMin","yMax","dyMin","dyMax","ryMin","ryMax","VoxelWorld","box","vCellSizeHint","_box","getSize","divide","_last","_cellSize","_cellInnerR","_cellOuterR","numVoxels","_voxels","addAtoms","voxelIdx","_findVoxel","_zero","_voxel","point","voxel","_forEachAtomInVoxel","_xRange","Vector2","_yRange","_zRange","_forEachVoxelWithinRadius","xRange","yRange","zRange","_forEachVoxelWithinRadiusSimple","rRangeXY","rRangeX","xVal","yVal","zVal","isInsideX","isInsideY","isInsideZ","divideScalar","clampScalar","_vCenter","vCenter","distTouch2","distInside2","d2","r2","isInside","forEachAtomWithinDistFromMasked","dist","_forEachAtomWithinDistFromGroup","atomProc","forEachAtomWithinDistFromSelected","voxels","processIfWithin","PairCollection","MINIMAL_DISTANCE","MIN_HBOND_ENERGY","MAX_HBOND_ENERGY","COUPLING_CONSTANT","MAX_COUPLING_DISTANCE","MAX_RESIDUES_THRESHOLD","HBondInfo","_hbonds","_buildVW","_build","isBond","from","to","acc0","acc1","acceptor","energy","ri","preri","rj","prerj","_calcHBondEnergy","pairs","_residueGetCAlpha","_residueGetCO","_residueGetNH","predonor","donor","distanceHO","distanceHC","distanceNC","distanceNO","donorInfo","accInfo","BridgeType","freeze","NO_BRIDGE","PARALLEL","ANTI_PARALLEL","HelixFlag","START","MIDDLE","END","START_AND_END","StructureType","SecondaryStructureMap","_ss","_sheet","_betaPartners","_bend","_helixFlags","_chainLengths","_chains","_buildBetaSheets","_buildAlphaHelices","inResidues","chainLength","inPreferPiHelices","stride","kappa","_kappa","_isHelixStart","isTurn","_cosinusAngle","p1","p2","p3","p4","v12","v34","prevPrev","nextNext","curCA","ppCA","nnCA","ckap","skap","atan2","bridges","lenA","chainA","lenB","chainB","_testBridge","found","bridge","unshift","chainI","chainJ","ibi","iei","jbi","jei","ibj","iej","jbj","jej","_hasChainBreak","bulge","ladderset","Set","ladder","delete","sheetset","toMove","_areBridgesLinked","betai","betaj","parallel","ai","aj","has","VOXEL_SIZE","helixClassMap","loopMap","Complex","_components","_helices","_sheets","structures","_residueTypes","_sgroups","_molecules","_maskNeedsUpdate","metadata","symmetry","units","_currentUnit","addSheet","addHelix","getBonds","forEachChain","resName","rt","getSGroupCount","getSGroups","getAtomByFullname","resId","localeCompare","getChainCount","getMolecules","getMoleculeCount","forEachMolecule","molecules","forEachSGroup","groups","components","forEachVisibleComponent","getBondCount","maxSerial","chainShift","uniSerial","remnant","ser","_fillCmpEdit","addComp","comp","resCount","currStart","_fillCmpNoedit","currSubDivs","_fillComponents","enableEditing","getCurrentUnit","resetCurrentUnit","setCurrentUnit","newUnit","_computeBounds","onAtomPositionChanged","_finalizeBonds","updateStructuresMask","helices","sheets","needAutoBonding","autoConnector","other","marker","detectAromaticLoops","_finalizeMolecules","molecule","updater","structure","countAtomsByMask","getNumAtomsBySelector","resetAtomMask","markAtoms","setMask","clearMask","totalSelector","markAtomsAdditionally","clearAtomBits","reseter","getAtomNames","_atomNames","dict","getElements","_elements","getResidueNames","_residueNames","getChainNames","_chainNames","getAltLocNames","_altlocNames","_voxelWorld","addElement","srcArray","dstArray","functor","elem","joinComplexes","complexes","atomBias","bondBias","residueBias","chainBias","componentBias","bias","processBond","processResidue","processChain","processComponent","doNothing","ssMap","getSheet","item","lastCode","lastSheetIndex","lastHelixIndex","curStructure","curCode","curResidue","curSheetIndex","loopType","curSheet","pow2ceil","Volume","dimensions","vecSize","volumeInfo","_dimVec","_volumeInfo","_dimX","_dimY","_dimZ","_rowElements","_planeElements","_totalElements","_data","getValue","setValue","addValue","getDimensions","getBox","getVolumeInfo","getCellSize","boxSize","computeGradient","vl","vs","xSize","ySize","zSize","volMap","_voxelValue","zi","zm","zp","yi","ym","yp","xi","xm","xp","getTiledTextureStride","buildTiledTexture","tilesX","tilesY","tileRow","texture","DataTexture","LuminanceFormat","UnsignedByteType","UVMapping","ClampToEdgeWrapping","LinearFilter","needsUpdate","getData","getDirectIdx","getStrideX","getStrideY","getStrideZ","Molecule","CSS2DObject","Object3D","_element","getElement","setTransparency","transp","op","op100","opacity","RCGroup","Group","raycast","raycaster","intersects","visible","children","enableSubset","innerOnly","disableSubset","getSubset","totalSubset","vertexScreenQuadShader","fragmentScreenQuadFromTex","fragmentScreenQuadFromTexWithDistortion","LAYERS","VOLUME","TRANSPARENT","PREPASS_TRANSPARENT","VOLUME_BFPLANE","COLOR_FROM_POSITION","SHADOWMAP","SELECTION_LAYERS","resetTransform","quaternion","updateMatrixWorldRecursive","updateMatrixWorld","addSavingWorldTransform","_worldMatrixInverse","Matrix4","matrixWorld","invert","multiply","decompose","WebGLRenderer","renderDummyQuad","_material","MeshBasicMaterial","depthWrite","_scene","Scene","_quad","Mesh","PlaneGeometry","_camera","OrthographicCamera","render","renderScreenQuad","isIdentity","identity","equals","applyToPointsArray","elements","persp","ScreenQuadMaterial","RawShaderMaterial","uniforms","srcTex","vertexShader","depthTest","renderScreenQuadFromTex","fragmentShader","renderScreenQuadFromTexWithDistortion","coef","PerspectiveCamera","setMinimalFov","angle","aspect","fov","radToDeg","atan","tan","degToRad","StereoCamera","updateHalfSized","camera","originalAspect","originalFov","updateProjectionMatrix","setDistanceToFit","Raycaster","intersectVisibleObject","gfxObj","fogFarPlane","intersectObject","nearPlane","near","matrixWorldInverse","farPlane","far","extractScale","_v","te","det","determinant","_calcCylinderMatrix","posBegin","posEnd","posCenter","matScale","makeScale","matRotHalf","makeRotationX","matRotLook","vUp","lookAt","setPosition","_calcChunkMatrix","eye","up","rad","_groupHasGeometryToRender","group","hasGeoms","_buildDistorionMesh","widthSegments","heightSegements","calcInverseBarrel","epsilon","prevR2","curR2","dr","geo","getAttribute","setXY","BufferAttribute","copyAtList","attribute","indexList","fillArray","startIndex","endIndex","removeChildren","clearTree","LineSegments","Line","geometry","dispose","destroyObject","belongToSelectLayers","layers","processObjRenderOrder","root","idMaterial","renderOrder","isGroup","applySelectionMaterial","setValues","depthFunc","LessEqualDepth","overrideColor","lights","shadowmap","setUberOptions","fixedColor","Color","zOffset","getMiddlePoint","point1","point2","optionalTarget","addScaledVector","_oldInstancedBufferGeometryCopy","InstancedBufferGeometry","source","instanceCount","calcCylinderMatrix","calcChunkMatrix","groupHasGeometryToRender","buildDistorionMesh","gfxutils","_defaultBoundaries","Visual","dataSource","_dataSource","release","getDataSource","_ensureArray","EntityList","entities","_list","_dict","_indices","entity","register","registerInList","unregisterFromList","registerInDict","unregisterFromDict","unregister","all","makeContextDependent","defineProperties","CollisionSphere","_radius","_sphere","sphere","ray","intersectSphere","distance","origin","SphereCollisionGeo","setSphere","inters","chunkIdx","computeBoundingBox","computeBoundingSphere","tmpColor","OFFSET_SIZE","COLOR_SIZE","setArrayXYZ","setArrayXYZW","InstancedSpheresGeometry","spheresCount","sphereComplexity","useZSprites","_sphGeometry","SphereBufferGeometry","_init","setItem","itemIdx","itemPos","itemRad","_offsets","setColor","colorVal","_colors","startUpdate","finishUpdate","setOpacity","chunkIndices","alphaArr","_alpha","geom","sphereGeo","alpha","fill","InstancedBufferAttribute","MAX_IDC_16BIT","VEC_SIZE","ChunkedObjectsGeometry","BufferGeometry","chunkGeo","chunksCount","_chunkGeo","colors","chunkSize","_chunkSize","mesh","facesPerChunk","faceIndex","srcPos","_positions","srcNorm","_normals","srcColor","dstPos","dstNorm","dstColor","dstPtOffset","ptIdxBegin","ptIdxEnd","attributes","chunkIndex","chunkIndexSize","pointsCount","use32bitIndex","indexSize","Uint32Array","Uint16Array","posOffset","setIndex","SimpleSpheresGeometry","sphGeometry","normals","geoNormals","normal","_chunkPos","_tmpPositions","tmpPos","geoPos","centerPos","tmpVector","normMtx","Matrix3","Simple2CCylindersGeometry","cylGeometry","CylinderGeometry","_chunkNorms","_tmpVector","botPos","topPos","firstOffset","secondOffset","tmpArray","geoNorm","lerpVectors","mtx1","getNormalMatrix","fromArray","toArray","applyMatrix3","colorVal1","colorVal2","MAX_POINTS_COUNT_16BIT","PTS_PER_TRIANGLE","CylinderBufferGeometry","radiusTop","radiusBottom","radialSegments","heightSegments","openEnded","thetaStart","thetaLength","parameters","hasTop","hasBottom","vertexCount","facesCount","heightHalf","positions","Uint16BufferAttribute","uvs","currVtxIdx","currFaceIdx","tanTheta","v3","v4","setXYZ","vx","vy","vz","startTIdx","lastIdx","fTIdx","currSrcIdx","getX","getY","getZ","nextTVtx","startBIdx","lastBIdx","fBIdx","currSrcBIdx","nextBVtx","invMatrix","sortNumber","_prepareCylinderInfo","chunksIdx","cylinderInfo","even","newPar","_assignOpacity","color1","color2","Instanced2CCylindersGeometry","_useZSprites","_cylGeometry","_collisionGeo","me","mtxOffset","_matVector1","_matVector2","_matVector3","_invmatVector1","_invmatVector2","_invmatVector3","colorIdx","_color1","_color2","cylinderIndices","getGeoParams","cylinderGeo","TRI_SIZE","tmpPrev","tmpNext","tmpRes","simpleNormal","normalOnCut","nearRingPt","_createExtrudedChunkGeometry","shape","ringsCount","ptsCount","totalPts","ExtrudedObjectsGeometry","_ringsCount","tmpShape","_tmpShape","hasSlope","hasCut","chunkStartIdx","_setPoints","_setSlopeNormals","_setBaseNormals","_addCut","vtxIdx","mtx","nPtsInRing","_countNormalsInRing","isSlope","shiftToExtraPt","subVectors","VERTEX_PER_SEGMENT","POS_SIZE","DIR_SIZE","COL_SIZE","startSegmentIdx","segmentsCount","elemSize","ThickLinesGeometry","_initVertices","segmentIdx","setSegment","pos1","pos2","directions","_directions","dirIdx","startSegIdx","endSegIdx","getSubsetSegments","getSubsetColors","getSubsetOpacities","getNumVertexPerSegment","getPositionSize","setSegments","startPos","startDir","setColors","_buffersSize","indexOffset","pointOffset","BaseLinesGeometry","LinesGeometry","posSize","CylinderCollisionGeo","itemOffset","COLLISION_RAD","ChunkedLinesGeometry","enableCollision","collisionGeo","segCount","segIdx","TwoColorLinesGeometry","segmentIndices","_segCounts","vectors","vecCount","tempPos1","tempPos2","CrossGeometry","POS_RAD_SIZE","IsoSurfaceGeometry","_opts","_posRad","posRad","IsoSurfaceMarchCube","pointsValuesLinear","hasIntersection","bitsInside","numCellsPerSide","vx7000000","n3","striIndicesMarchCube","edgeTable","_voxelGradientFast","grad","GridCell","_arrSize","cubeIndex","Triangle","createArray","arrSize","IsoSurface","_numTriangles","_numVertices","_volumetricData","_xAxis","_yAxis","_zAxis","_xDir","_yDir","_zDir","_prepareAxesAndDirs","volData","cellSize","xAxis","yAxis","zAxis","xDir","yDir","zDir","tmp","notZero","axe","EPSILON","_vertexInterp","isoLevel","grid","ind1","ind2","vertex","valP1","valP2","isoDiffP1","diffValP2P1","mu","_triTable","_firstIndices","_secondIndices","_vertexList","_normalList","_polygonize","triangles","firstIndices","secondIndices","vertexList","normalList","triCount","triTblIdx","triTable","_doGridPosNorms","step","appendSimple","vol","dim","stepX","stepY","stepZ","gc","gcVal","gcValSize","additions","tmpTriCount","appendVertex","axis","triVertex","_origin","posMtx","globTriCount","_gradient","compute","_remapIndices","vertexMap","idcCount","newIndices","_remapVertices","vertices","newPositions","newNormals","norm","vertexFusion","faceVer","oldVerCount","vMap","newVer","matchedIndex","setColorVolTex","colorMap","atomMap","atomWeightMap","visibilitySelector","numVerts","xs","ys","zs","colorData","strideX","strideY","strideZ","atomWeightData","atomStrideX","atomStrideY","atomStrideZ","xInv","yInv","zInv","atomLookup","atomWeights","interp","idx1","idx2","collectWeight","coefX","coefY","coefZ","newVerCount","ind","mux","muy","muz","maxWeight","dominantIdx","atomIdx","c0","c1","c2","c3","cz0","cz1","numTriangles","newTriCount","i0","toMesh","VolumeSurfaceGeometry","_visibilitySelector","_calcSurface","_findMinMax","posRadArray","itemsCount","maxPosRad","minPosRad","tmpVal","_findNumVoxels","minMaxValues","minCoordRad","maxCoordRad","gridPadding","radScale","padRad","bbox","_makeSurface","surface","isoSurf","volTexMap","packedArrays","_computeSurface","chem","QuickSurfGeometry","_shiftByOrigin","gaussdensity","atomicNum","invIsoValue","invGridSpacing","maxVoxelX","maxVoxelY","maxVoxelZ","volTexData","texStrideX","scaledRad","atomicNumFactor","radInv","radLim","radLim2","xMin","xMax","dy2dz2","addr","texAddr","expVal","density","exp","colInd","originX","originY","originZ","AVHash","maxDistance","minX","minY","minZ","maxX","maxY","maxZ","hashFunc","minW","iDim","jDim","kDim","nCells","jkDim","cellID","preHash","cid","iIdx","cellOffsets","cellLengths","maxCellLength","subArray","cellLength","neighbourListLength","withinRadii","rExtra","out","outIdx","nearI","nearJ","nearK","loI","loJ","loK","hiI","hiJ","hiK","iOffset","jOffset","cellStart","cellEnd","dataIndex","baseIndex","rSum","ContactSurface","_indexList","maxRadius","lastClip","volTex","weights","weightsMap","gridx","gridy","gridz","sinTable","cosTable","neighbours","mid","ngTorus","uniformArray","TypeName","innI","fillGridDim","initializeGrid","gridSize","initializeAngleTables","initializeHash","rExt","singleAtomObscures","innX","innY","innZ","innCI","ra2","obscured","ni","projectPoints","sigma","sigma2Inv","ax","ay","az","ar2","ng","iax","iay","iaz","minx","miny","minz","maxx","maxy","maxz","colIdx","cr","cg","cb","iz","iy","dzy2","zyOffset","ix","cIdx","ap","spx","spy","spz","dd","normalToLine","projectTorus","aIdx","bIdx","xa","ya","za","r1","innR2","cosA","dmp","rInt","cost","sint","px","py","pz","current","projectTorii","innIdx","fixNegatives","innInnI","getVolume","ContactSurfaceGeometry","contactSurface","IsoSurfaceAtomColored","radiusAt","coord","colorX","colorY","colorZ","atomType","srcAtom","IsosurfaceBuildNormals","vBoxMin","vBoxMax","_numAtoms","_probeRadius","_atomsList","_voxelList","createVoxels","numAtomsRefs","ATOM_VOXEL_REF_SCALE","aveRad","numCells","_numCells","_aveRad","side","side2","side3","xScale","_xScale","yScale","_yScale","zScale","_zScale","maxAtomsRefs","xNumVoxMult","yNumVoxMult","zNumVoxMult","radAffect","diaAffect","numVoxX","numVoxY","numVoxZ","xIndMin","yIndMin","zIndMin","xIndMax","yIndMax","zIndMax","indVoxel","indexNext","destroyVoxels","_vertices","forEachRelatedAtom","xInd","yInd","zInd","ref","indexAtom","getClosestAtom","closest","minDist2","MAX_VALUE","buildNormals","numVertices","numCloseAtoms","vNormalX","vNormalY","vNormalZ","koef","r25","r01","maxRadAffect","maxRadAffect2","expScale","gatherNormals","maxClosedAtoms","buildColors","radiusColorSmoothness","KOEF_ADD","colorsClose","weightsSum","gatherColors","weightNormalized","IsoSurfaceGeo","maxNumVertices","maxNumTriangles","needVertexColors","_maxNumVertices","_maxNumTriangles","HASH_SIZE","SSIsosurfaceGeometry","_innerBuild","geoOut","getGeo","_fromGeo","numTri3","convertToAtomsColored","atomsColored","nm","hashLines","hashEntries","getBoundingBox","bigNum","probeRadius2","atomRadiusScale","radMax","num","getCornerCoord","numPoints","vOut","invNP","tx","ty","tz","buildEdgePoint","sign","cube","indexPointValue","cTwentyFour","xb","yb","zb","isTriangleVisible","v0","a0","voxelWorld","a1","a2","addTriangle","indInGeo0","addVertexToGeo","indInGeo1","indInGeo2","itr","buildGeoFromCorners","meshRes","vCellStep","cNumVerts","vaEdges","vCorner","indCell","indY","indZ","indPointValues","indValues","offs","numTri","indTri","getNumIntersectedCells","numIntersectedCells","cubeValuesIndex","indCorner","letter","atomT","calculateGridCorners","probeRad","vDif","aLot","fx","fy","fz","indXMin","indYMin","indZMin","indXMax","indYMax","indZMax","distToSphere","createVertexHash","numHashEtriesAllocated","numHashEntryIndex","getNewHashEntry","vAdd","oneHynberes","n815851","n37633","n2453543","r106","hashResolution","marCubeResoultion","iHash","hLineIndex","dot2","iVertAdd","entryFirst","modifyExcludedFromGeo","probeSphereRadius","distToBorder","r11","innerBlockWorkAround","probeSpRad2","sideInv","radEst","xCorner","yCorner","zCorner","ok","expandFactor","meshResolution","colorMode","useVertexColors","excludeProbe","rProbeRadius","numIntersectedCellsEstim","probeRadForNormalsColors","createLabel","fieldTxt","spanText","fontSize","strings","spanNodeP","spanNodeText","LabelsGeometry","items","xTranslation","yTranslation","deltaPos","userData","textAlign","fColor","bColor","precision","renderer","capabilities","getMaxPrecision","noiseWidth","noiseHeight","_noiseData","_noiseWrapS","RepeatWrapping","_noiseWrapT","_noiseMinFilter","NearestFilter","_noiseMagFilter","_noiseMapping","noiseTexture","RGBAFormat","noise","_samplesKernel","defaultUniforms","UniformsUtils","UniformsLib","diffuse","specular","shininess","zClipValue","clipPlaneValue","nearPlaneValue","invModelViewMatrix","world2colorMatrix","dashedLineSize","dashedLinePeriod","projMatrixInv","viewport","samplesKernel","noiseTex","noiseTexelSize","srcTexelSize","uberOptionNames","uberOptions","zClipCoef","toonShading","UberMaterial","instancedPos","instancedMatrix","attrColor","attrColor2","attrAlphaColor","sphereSprite","cylinderSprite","fakeOpacity","prepassTransparancy","colorFromPos","shadowmapType","colorFromDepth","orthoCam","dashedLine","thickLine","fogTransparent","normalsToGBuffer","precisionString","DoubleSide","defines","extensions","createInstance","inst","USE_FOG","INSTANCED_POS","INSTANCED_MATRIX","ATTR_COLOR","ATTR_COLOR2","ATTR_ALPHA_COLOR","OVERRIDE_COLOR","SPHERE_SPRITE","fragDepth","CYLINDER_SPRITE","ZCLIP","CLIP_PLANE","FAKE_OPACITY","USE_LIGHTS","COLOR_FROM_POS","SHADOWMAP_PCF_SHARP","SHADOWMAP_PCF_RAND","SHADOWMAP_BASIC","COLOR_FROM_DEPTH","ORTHOGRAPHIC_CAMERA","PREPASS_TRANSP","DASHED_LINE","THICK_LINE","FOG_TRANSPARENT","drawBuffers","NORMALS_TO_G_BUFFER","TOON_SHADING","shallow","updateUniforms","SuperClass","NewObjectType","onBeforeRender","scene","_onBeforeRender","_update","UberObject","ZSpriteMesh","castShadow","receiveShadow","_geometry","_group","modelViewMatrix","multiplyMatrices","uniformsNeedUpdate","ZClippedMesh","_mvLength","_modelView","modelView","mvLength","setFromMatrixColumn","localToWorld","TextMesh","initialized","srcItem","label","visibility","SimpleMesh","_viewport","ThickLineMesh","projectionMatrix","InstancedMesh","ZClipped","ZSprite","Text","Instanced","geometries","meshes","setMatParams","_createInstancedCylinders","Geometry","initMaterial","_createLineSegmentsGeoTriplet","renderParams","thickLines","_createSimpleGeoTriplet","geoClass","_createIsoSurfaceGeoTriplet","caps","surfaceOpts","MeshCreator","createSpheres","create2CClosedCylinders","_caps","_settings","create2CCylinders","create2CLines","createCrosses","createExtrudedChains","createChunkedLines","createQuickSurface","createContactSurface","createSASSES","createLabels","TransformGroup","_inverseMatrix","_ray","Ray","geoParams","transforms","_geoParams","mat","_transforms","_createMeshes","inverseMatrix","childIntersects","ciCount","geos","meshCnt","wrapper","Name","ChemGroup","selection","_selection","_mode","_colorer","_chunksIdc","chunks","_polyComplexity","_geo","_makeGeoArgs","_mesh","chunksList","_calcChunksList","_changeSubsetOpacity","AtomsGroup","atomsIdc","AtomsSphereGroup","calcAtomRadius","getAtomColor","updateColor","needsColorUpdate","AtomsSurfaceGroup","selectedAtoms","getSurfaceOpts","AtomsSASSESGroupStub","adjustColor","inverseColor","getAtomText","getNode","colorMappings","adjust","inverse","propagateColor","rule","startsWith","templateMappings","hetatm","water","parseTemplate","AtomsTextGroup","getLabelOpts","fgColor","bgColor","_slerp","omega","oSin","AromaticGroup","radOffset","addChunk","chunksToIdx","prevVector","currVector","segmentsHeight","_segmentsHeight","leprStep","currAtomIdx","cCount","cycAtoms","chunkPoints","tmpDir","cycleRad","prevPos","currPos","upDir","currAngle","_createShape","pts","AromaticTorusGroup","torusRad","getAromRadius","radiusV","calcStickRadius","lookAtVector","mtc","points","currPoint","AromaticLinesGroup","getAromaticOffset","prevPt","getAromaticArcChunks","ResiduesGroup","chunksIdc","resIdx","NucleicItemGroup","stickRad","getResidueColor","_processItem","NucleicCylindersGroup","cyl1","cyl2","NucleicSpheresGroup","calcMatrix","_buildStructureInterpolator","argTrans","transformT","tt","newt","ans","_addPoints","centerPoints","topPoints","tp","_addPointsForLoneResidue","nucleic","nameFrom","nameTo","posFrom","posTo","shift","wing","cpPrev","tpPrev","cpNext","tpNext","_calcPoints","firstIdx","_prevIdx","_nextIdx","arrIdx","_extrapolate2","otherIdx","prevIdx","nextIdx","CartoonHelper","startIdx","endIdx","pointsArrays","_topInterp","_centerInterp","_shift","_valueStep","_segmentsCount","prepareMatrices","firstRad","secondRad","mtcCount","outMtc","currRad","topInterp","cenInterp","currentValue","mtxIdx","lerpVal","currTop","currCenter","nextCenter","_loopThrough","subDiv","subDivI","subDivN","idc","matrixHelper","prevLast","prevSecondRad","getResidueRadius","ResiduesSubseqGroup","cmpMultiplier","getHeightSegmentsRatio","getTension","chunkIdc","subdivs","ResiduesTraceGroup","chunk","getCylinderCount","BondsGroup","drawMultiple","drawMultiorderBonds","showAromatic","showAromaticLoops","bondsIdc","bondsCount","getBondOrder","bondIdx","BondsCylinderGroup","emptyOffset","calcSpaceFraction","normDir","leftPos","rightPos","currBondIdx","atom1","atom2","a1Pos","a2Pos","minRad","currStickRad","STEP_SIZE","BondsLinesGroup","bondDir","a1Hangs","a2Hangs","AtomsProcessor","_checkAtom","atomsGroup","meshIdx","chSubset","subsetEl","OrphanAtomsProcessor","ResiduesProcessor","ResidueGroup","_checkResidue","residuesGroup","checkResidue","ResidueProcessor","NucleicProcessor","SubseqsProcessor","jEnd","BondsProcessor","bondsGroup","AromaticProcessor","cycleIdx","perCycle","Atoms","OrphanAtoms","Residues","Nucleic","Subseqs","Bonds","Aromatic","processors","_bakeGroup","triplet","Processor","GroupsFactory","AtomsSpheres","gfxTriplet","OrphanedAtomsCrosses","BondsCylinders","BondsLines","CartoonChains","TraceChains","NucleicSpheres","NucleicCylinders","ALoopsTorus","ALoopsLines","QuickSurfGeo","ContactSurfaceGeo","SASSESSurfaceGeo","TextLabelsGeo","Mode","identify","buildGeometry","depGroups","currGroup","newGroup","getRenderParams","LinesMode","shortName","LicoriceMode","BallsAndSticksMode","VanDerWaalsMode","TraceMode","TubeMode","_residue","TUBE_RADIUS","CartoonMode","secCache","getResidueStartRadius","secOpts","getResidueEndRadius","ARROW_END","startRad","endRad","_res","tubeRad","secHeight","secData","SurfaceMode","surfaces","surfaceNames","getVisibilitySelector","isSurface","QuickSurfaceMode","useBeads","IsoSurfaceMode","_excludeProbe","_radScale","IsoSurfaceSASMode","IsoSurfaceSESMode","ContactSurfaceMode","TextMode","getTemplateOptions","lerpColor","beta","g1","b1","g2","b2","Palette","getElementColor","asIs","elementColors","defaultElementColor","residueColors","defaultResidueColor","getChainColor","chainColors","getSecondaryColor","secondaryColors","defaultSecondaryColor","getSequentialColor","getGradientColor","gradientName","gradients","defaultNamedColor","getNamedColor","namedColors","minRangeColor","midRangeColor","maxRangeColor","defaultGradientColor","namedColorsArray","rainbow","temp","hot","cold","reds","blues","CL","FE","NI","CU","BR","HE","LI","BE","NE","NA","MG","AL","SI","AR","SC","TI","CR","MN","ZN","GA","GE","AS","KR","RB","SR","ZR","NB","TC","RU","RH","PD","AG","CD","IN","SN","SB","TE","XE","BA","LA","CE","PR","ND","PM","SM","EU","GD","TB","DY","HO","ER","YB","LU","HF","TA","RE","OS","IR","PT","AU","HG","TL","PB","BI","PO","AT","RN","FR","RA","AC","TH","PA","NP","PU","AM","CM","BK","CF","ES","FM","MD","NO","LR","RF","DB","BH","HS","MT","dna","rna","cpkPalette","jmolPalette","vmdPalette","palettes","Colorer","ElementColorer","ResidueTypeColorer","SequenceColorer","ChainColorer","SecondaryStructureColorer","secondary","UniformColorer","ConditionalColorer","parsed","_subsetCached","ConformationColorer","TemperatureColorer","OccupancyColorer","_getColorByOccupancy","HydrophobicityColorer","hydrophobicity","MoleculeColorer","scaleColor","CarbonColorer","colorCarbon","colorNotCarbon","neutralColor","intensity","materialList","_gatherObjects","meshTypes","createDerivativeMesh","layer","newMesh","traverseMeshes","func","applyTransformsToMeshes","processTransparentMaterial","matValues","prepassTranspMesh","processColFromPosMaterial","colFromPosMesh","createShadowmapMaterial","shadowmapMesh","isShadowmapMesh","removeShadowmapMaterial","forEachMeshInGroup","processObj","_countMeshTriangles","attribs","property","currAttr","faces","countTriangles","totalCount","meshutils","Representation","startMaterialValues","selectorString","materialPreset","needsRebuild","setMode","unmarkAtoms","setMaterialPreset","selectionGeo","buildSelectionGeometry","sg","matrixAutoUpdate","compare","repSettings","selStr","valueOf","modeDiff","colorerDiff","change","newSelectorObject","newSelector","newMode","newColorer","newMaterial","_traverseComponentGroups","ComplexEditor","ComplexComponentEditor","complexVisual","_complexVisual","_inProgress","_componentTransforms","_bakeComponentTransform","_resetComponentTransform","finalizeEdit","discard","getAltObj","pivot","visual","getSelectedComponent","getSelectionGeo","selectionMask","getSelectionBit","reprNode","bbmin","bbmax","updateMatrix","ComplexFragmentEditor","_getSelectionBorderAtoms","_fragmentBoundAtoms","pivotPos","_fragmentGeo","_fragmentSelectionGeo","vg","smeshes","sm","selectionBit","makeTranslation","_bakeAtomTransform","isFreeRotationAllowed","boundAtoms","transformDirection","atomHash","ComponentEditor","FragmentEditor","ComplexVisualEdit","lookupAndCreate","entityList","specs","Entity","ComplexVisual","_reprList","_repr","_reprListChanged","_selectionBit","_reprUsedBits","_selectionCount","_selectionGeometry","getSelectionCount","getEditor","_editor","repCount","desc","status","repGet","_getFreeReprIdx","bits","NUM_REPRESENTATION_BITS","newSelectionBit","originalSelection","buildSelectorFromMask","def","hide","rebuildSelectionGeometry","resetSelectionMask","updateSelectionMask","pickedObj","otherObj","expandSelection","tmpMask","deselectionMask","shrinkSelection","multiple","getSelectionCenter","selRule","reprList","repr","Promise","resolve","errorOccured","setTimeout","hasGeometry","DEBUG","setNeedsRebuild","_buildSelectorFromSortedLists","optimizeList","NaN","expression","and","residx","forSelectedResidues","beginComponentEdit","editor","beginFragmentEdit","setMaterialValues","needTraverse","vertexVolumeFaces","fragmentVolumeFaces","vertexVolume","fragmentVolume","vertexFarPlane","fragmentFarPlane","volumeUniforms","volumeDim","tileTex","tileTexSize","tileStride","boxAngles","_isoLevel0","_flipV","_BFLeft","_BFRight","_FFLeft","_FFRight","_WFFLeft","_WFFRight","overrideUniforms","defUniforms","facesPosMaterialParams","sideType","BackFacePosMaterial","ShaderMaterial","backFaceParams","BackSide","ShaderParams","FrontSide","BackFacePosMaterialFarPlane","matUniforms","aspectRatio","farZ","tanHalfFOV","matWorld2Volume","shaderParams","FrontFacePosMaterial","frontFaceParams","VolumeMaterial","updateDefines","ISO_MODE","STEPS_COUNT","VolumeMesh","Plane","cullFlag","_corners","_edges","_edgeIntersections","edgeIntersections","_updateVertices","edges","constant","vert","cornerMark","edgeMark","curEdge","curEdgeInter","CheckX","CheckY","CheckZ","curEdgeIdx","curEdgeSource","face","nextVertex","coplanarPoint","_collectVertices","_sortIndices","_updateIndices","faceIdx","vRight","vDir","rightProj","numIndices","setDataSource","vm","image","volInfo","obtuseAngle","_updateIsoLevel","mean","dmean","dmin","span","dmax","sd","_nearClipPlaneOffset","_pos","_norm","_norm4D","Vector4","_matrixWorldToLocal","_clipPlane","nearClipPlaneOffset","norm4D","matrixWorldToLocal","getWorldDirection","getWorldPosition","setFromNormalAndCoplanarPoint","_flattenArray","VolumeBounds","_projectionTable","XY","XZ","YZ","bSize","offsetVert","_getBaseVertices","flatVertices","_lines","LineBasicMaterial","projTable","proj","inv","currDelta","angleValue","getMesh","VolumeFarPlane","volume","planeGeo","_initPlaneGeo","_plane","frustumCulled","doubleSided","matWorldToVolume","_renderer","planeCamPos","normalMatrix","volumeMatrix","DEG2RAD","VolumeVisual","_frame","showFrame","_farPlane","getBoundingSphere","needShow","LoaderList","someLoaders","SomeLoader","canProbablyLoad","Loader","_source","_options","_abort","_agent","abort","extractName","FileLoader","_binary","blob","reader","FileReader","readAsArrayBuffer","readAsText","File","urlStartRegexp","XHRLoader","request","ImmediateLoader","ParserList","someParsers","format","formats","SomeParser","canProbablyParse","parseSync","getModel","model","_parseHeader","Remark290","_matrix","_matrixIndex","stream","readString","matrixRow","readCharCode","matrixData","matrixIndex","parseFloat","Remark350","assemblies","_assembly","assembly","PDBStream","_start","_nextCR","_nextLF","_next","_end","readLine","readChar","readInt","readFloat","TAG_LENGTH","nameToElement","veryLong","pdbStartRegexp","remarkParsers","PDBParser","_serialAtomMap","_modelId","_compaundFound","_biomoleculeFound","_allowedChainsIDs","_lastMolId","_remarks","_remark","_compndCurrToken","fileType","_fixBondsArray","_fixChains","remark290","isUndefined","remark350","chainDict","chainObj","idChainMap","nj","_parseATOM","chainID","resSeq","_parseENDMDL","_parseCONECT","serial0","serial1","serial2","serial3","serial4","_parseCOMPND","tokenIdx","chainStr","lastChar","_parseREMARK","remarkNum","remark","RemarkParser","_parseHELIX","fields","_parseSTRUCTURE","_parseSHEET","pars","adder","startId","endId","codeOfS","serialNumber","structureName","helLength","shWidth","shCur","shPrev","startChainID","endChainID","startSequenceNumber","iCodeStr","startICode","endSequenceNumber","endICode","cs","_parseHEADER","classification","date","_parseTITLE","title","tagParsers","HEADER","HETATM","ENDMDL","CONECT","COMPND","REMARK","cOrderCharCodes","cmlStartRegexp","CMLParser","_readOnlyOneMolecule","_rebuidBondIndexes","countBonds","idxs","atomRefs2","_createSGroup","moleculeArr","fieldData","atomRefs","placement","fieldName","_extractSGroup","_extractSGroups","firstAtomRef","sgroupRef","mapEntry","cycleFuncInner","cycleFunc","x2","x3","y2","y3","z3","atomsRef","_traverseData","dom","parseNode","xmlNode","nodeName","nodeValue","jsonNode","existing","childNodes","_findSuitableMolecule","molSet","atomArray","_selectComponents","DOMParser","doc","parseFromString","traversedData","rawData","prepareComponentCompound","ret","atomLabels","labelsCount","localBond","bondArray","addCurrBond","orderAttr","tc","labels","_breadWidthSearch","retStruct","originalCML","cml","retData","filteredData","rd","_packLabel","compId","molId","_unpackLabel","molID","breadthQueue","componentID","labeledAtoms","startID","_parseBond","eAtom","mainAtom","_parseSet","varData","currentLabel","addFunc","complexAtom","reorder","atomCharge","lLabel","atomFullNameStruct","elementType","countRef","currAtomComp","strLabel","stringify","atomSerial","added","mrvValence","sGrp","moleculaSet","totalAtomsParsed","joinedComplex","ArrayComparator","original","_original","_sum","candidate","sorted","secStructToType","getFirstByte","buf","MMTFParser","isArrayBuffer","_onModel","_modelData","_onChain","chainData","_onGroup","groupData","_updateSecStructure","_onAtom","atomData","_onBond","bondData","helixClasses","_ssType","_ssStruct","_ssStart","struct","_updateMolecules","mmtfData","chainsInModel0","chainIndexList","description","_traverse","structureId","releaseDate","eventCallbacks","modelData","_linkAtomsToResidues","_findSynonymousChains","named","_parseAssemblyInfo","bioAssemblyList","baInfo","transformList","chainListCheck","chainNames","allChains","_chainsByName","transpose","_markHeteroAtoms","_joinSynonymousChains","primaryChainsArray","primaryChainsHash","primary","ParsingError","column","captureStackTrace","parseLine","parseColumn","_isWhitespace","_inlineIndexOf","ch0","readCIF","newline","block","keysCount","valuesCount","_parseValue","_storeKey","_storeValue","keyIndex","cRequiredAtomFields","cSecondaryCoding","helx","turn","strn","getTypeFromId","typeId","arrize","arrayLikeObject","AtomDataError","_getOperations","operList","vector","ops","_extractOperations","assemblyGen","opsDict","groupStr","gps","grIdx","grCount","gr","gp","es","cnt","ii","nn","newMtx","CIFParser","asymDict","_toComplex","cifData","complexData","_extractAtoms","_extractSecondary","_extractAssemblies","_extractMolecules","_extractMetadata","struct_keywords","pdbx_keywords","databaserev","database_PDB_rev","date_original","molData","pdbx_description","atom_site","auth_seq_id","Cartn_x","Cartn_y","Cartn_z","label_atom_id","group_PDB","chainIdc","auth_asym_id","chainLabelIdc","label_asym_id","serials","iCodes","pdbx_PDB_ins_code","resNames","label_comp_id","type_symbol","tempFactors","B_iso_or_equiv","occupancies","charges","pdbx_formal_charge","altLocs","label_alt_id","models","pdbx_PDB_model_num","label_entity_id","moleculeIdx","struct_conf","_extractConfs","struct_sheet_range","_extractSheets","sheetData","sheet_id","beg_label_seq_id","end_label_seq_id","beg_label_asym_id","sheetNames","strandNames","starts","beg_auth_seq_id","ends","end_auth_seq_id","stICodes","pdbx_beg_PDB_ins_code","endICodes","pdbx_end_PDB_ins_code","helicesData","conf_type_id","comments","details","lengths","pdbx_PDB_helix_length","pdbx_PDB_helix_class","asmGen","pdbx_struct_assembly_gen","asmIdx","assembly_id","asmOper","oper_expression","asmList","asym_id_list","pdbx_struct_oper_list","asm","assemblyOps","valueType","singular","VolumeModel","_xyz2crs","_header","_boxSize","_boxStart","extent","nstart","crs2xyz","cellDims","angles","_typedCheck","isTypedArray","_buff","TypeError","_fillHeader","headerFormat","arrays","_parseArray","_parseVector","_buffer","_setAxisIndices","_setOrigins","_getAxis","header","gamma","z1","z2","xaxis","yaxis","zaxis","_getXYZdim","_getVolumeInfo","_setBoxParams","shiftX","shiftY","_getXYZbox","_toXYZData","CCP4Header","ispg","nsymbt","lksflg","customData","machine","nlabel","Ccp4Model","u32","i32","f32","xyz2crs","xyzData","crsIdx","CCP4Parser","XYZParser","_atomsInf","_fileName","_parseToAtomsInf","endnAtoms","endComment","startAtomsInf","_parseAtomsInf","words","PubChemParser","jsonData","PC_Compounds","aids","aid","fromPairs","zip","coords","conformers","aids1","aid1","aids2","aid2","orders","SDFStream","_strings","_currentStart","_currentStringIndx","setStart","getNextString","getCurrentString","getStringFromStart","numb","findNextDataItem","curStr","findNextCompoundStart","probablyHaveDataToParse","chargeMap","orderMap","typeMap","sdfAndMolRegexp","sdfRegExp","fileFormat","SDF","MOL","possibleNameTags","possibleIDTags","possibleTitleTags","tagsNames","tags","buildChainID","codes","trunc","reverse","SDFParser","_format","_metadata","_currentMolProps","_compoundIndx","_assemblies","_atomsParsed","_atomsIndexes","_parseAtoms","_parseBonds","bondsNum","bondType","_parseMOL","countsLine","_parseDataItem","_parseCompound","props","_tryToUpdateMoleculeData","_buildAssemblies","_buildMolecules","_searchTag","_tryToFind","tagsList","tagPossibleNames","_finalizeMetadata","defineFormat","DSN6Header","div","DSN6Model","i16","_pointCalculate","byteBuffer","counter","_blockCalculate","zBlock","yBlock","xBlock","inRange","blocks","_calculateInfoParams","dispersion","minDensity","maxDensity","DSN6Parser","canParse","checkDataTypeOptions","GROReader","getNext","GROParser","_time","_residueNumber","_residueName","_atomName","_atomNumber","_atomPosition","_atomVelocity","filetype","_parseTitle","_parseNumberOfAtoms","_parseAtom","positionX","positionY","positionZ","un","am","nc","du","resNumberRegex","spacesRegex","splitToFields","MOL2Parser","_currPosIdx","_currStartIdx","_parseRawStrings","_toStringFromStart","MOL2Data","newPosIdx","_toHeaderString","_toStringFromHeader","_setStart","_probablyHaveDataToParse","_findNextCompoundStart","_parseMolecule","parsedStr","_setResidue","originAtomId","targetAtomId","_fixSerialAtoms","currMolecule","molResidues","ExporterList","someExporters","Exporter","exportSync","export","PDBResult","_resultArray","_currentStr","_tag","_fixedNumeration","_numeration","_tagStrNum","getResult","writeString","_currentStrLength","newTag","numeration","isBoolean","newString","writeEntireString","maxStrPos","curStrLength","finish","repeat","cStr","writeBondsArray","bondsArrays","_getSubArrays","subArraySize","subArrays","writeMatrix","matrixIndx","toFixed","writeMatrices","PDBExporter","_tags","_result","_tagExtractors","_extractHEADER","TITLE","_extractTITLE","_extractATOM","_extractCONECT","_extractCOMPND","_extractREMARK","_extractHELIX","SHEET","_extractSHEET","_stringForRemark350","_stringForRemark290","fixedBonds","strands","startIndx","_getMoleculeChains","chainsString","_Remark290","_Remark350","biomolIndx","getChainName","SourceClass","FBX_POS_SIZE","FBX_NORM_SIZE","FBX_COL_SIZE","copyFbxPoint3","srcIdx","dstIdx","copyFbxPoint4","vector4","copyTransformedPoint3","setSubArray","copyFunctor","functorOpts","arridx","FBXModel","lastPos","lastNorm","lastCol","vertsCount","indsCount","setPositions","setTransformedPositions","setNormals","setTransformedNormals","setIndices","setShiftedIndices","shifted","getVerticesNumber","addInstance","currentCount","FBXGeometry","_info","FBX1CGeometry","cl","FBX2CCylinder","_cutRawStart","_cutRawEnd","_facesPerSlice","addPerCylinder","_extendVertices","_extendIndices","cutRaw","indicesPerQuad","startToShift","_setColorRange","colorSize","part1End","part2End","capSize","cap1End","cap2End","FBXInfoExtractor","_materials","_models","_extractModelsAndMaterials","_flattenModels","layersOfInterest","Layers","checkExportAbility","_collectInstancedGeoInfo","_collectGeoInfo","_reworkIndices","faceSize","overallVertsCount","combined","verticesCount","vertCount","_collectMaterialInfo","_addToPool","_collectSpheresInfo","instCount","instMatrix","objMatrix","sphereColor","instanceIndex","_getSphereInstanceMatrix","_collectCylindersInfo","oneCCylinder","splittingInfo","_gatherCylindersColoringInfo","twoCCylinder","needToSplit","additionalVertsCount","colorStart","colorEnd","is2Colored","_getCylinderInstanceMatrix","materialIdx","_checkExistingMaterial","findIndex","differs","instIdx","matVector1","matVector2","matVector3","idxOffset","defaultDefinitions","defaultProperties","defaultMaterialLayer","defaultLayerBlock","globalSettings","FBXResult","_writeHeader","_writeDefinitions","_writeObjects","_writeRelations","_writeConnections","FBXHeaderVersion","FBXVersion","timeStampVersion","creator","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","modelVersion","allModels","_verticesIndices","_normalLayer","_colorLayer","materialVersion","allMaterials","_materialProperties","modelsList","_floatArrayToString","colorArray","layerElementColorNumber","layerElementColorVersion","layerElementColorName","colorsStr","colorIndices","normalArray","layerElementNormalNumber","layerElementNormalVersion","layerElementNormalName","normalsStr","multiLayer","multiTake","shading","culling","geometryVersion","vertStr","FBXExporter","_version","miewVersion","_extractor","loaders","parsers","exporters","tempColor","CSS2DRenderer","_height","_widthHalf","_heightHalf","_vector","_viewMatrix","_projectionMatrix","_domElement","overflow","pointerEvents","myNode","setSize","_renderObject","lerpColorAsHex","setHex","getHexString","colorAsHex","setFromMatrixPosition","localOffset","getMaxScaleOnAxis","fogFactor","smoothstep","WebkitTransform","MozTransform","oTransform","getTopWindow","VK_LEFT","VK_UP","VK_RIGHT","VK_DOWN","STATE","NONE","ROTATE","TRANSLATE","SCALE","TRANSLATE_PIVOT","FULL_STOP_THRESHOLD","Quaternion","matrix4","ObjectHandler","lastRotation","_rotate","quat","zeroPivot","makeRotationFromQuaternion","setObjects","rot","mousePrevPos","mouseCurPos","aboutAxis","mouse2rotation","setFromAxisAngle","translateOnAxis","timeSinceLastUpdate","timeSinceMove","intertia","dynamicDampingFactor","intertiaThreshold","eyeDirection","cameraUpDirection","cameraSidewaysDirection","moveDirection","mouseDelta","mousePrev","mouseCur","axisRotateFactor","setLength","rotateFactor","ObjectControls","objectPivot","hotkeysEnabled","screen","_state","_mousePrevPos","_mouseCurPos","_mainObj","_altObj","_affectedObj","_isAltObjFreeRotationAllowed","_isTranslationAllowed","_isKeysTranslatingObj","_pressedKeys","_clock","_lastUpdateTime","_listeners","mousedown","mouseup","mousemove","mousewheel","touchstartend","touchmove","getKeyBindObject","keydownup","handleResize","resetKeys","contextmenu","stopPropagation","preventDefault","innerWidth","innerHeight","getBoundingClientRect","ownerDocument","documentElement","pageXOffset","clientLeft","pageYOffset","clientTop","enableHotkeys","allowTranslation","allow","allowAltObjFreeRotation","keysTranslateObj","isEditingAltObj","convertMouseToOnCircle","pageX","pageY","screenSize","convertMouseToViewport","rotateByMouse","aboutZAxis","getOrientation","setOrientation","getScale","setScale","curTime","_lastMouseMoveTime","speedX","speedY","altObj","button","workWithAltObj","altKey","ctrlKey","shiftKey","translatePivotByMouse","wheelDelta","detail","touches","_touchDistanceCur","_touchDistanceStart","_scaleStart","newScale","keyCode","translatePivotInWorld","setX","setY","setZ","translatePivot","setPivot","newPivot","Picker","_lastMousePos","_mouseTotalDist","_lastClickBeginTime","_lastClickPos","_clickBeginTime","touchstart","touchend","picked","pickObject","screenPos","rayCaster","unproject","fogFarValue","getMouseInViewport","curPos","timeSinceLastClickBegin","clickDist","_lastTouchdownPos","changedTouches","Axes","targetCamera","_target","_targetCamera","_object","AxesHelper","_full","autoClear","setViewport","cDataOffset","cFirstMask","cFirstShift","cSecMask1","cSecShift1","cSecMask2","cSecShift2","cThirdMask","cStrMask","cStrShift","c219","c220","cHelixIdx","cSheetIdx","secTypes","cSecNames","_createSecondary","strArray","nRes","resid","rIdx","fromUInt20ToInt20","uint20","FrameInfo","payload","callbacks","isLoading","_framesRange","frameIsReady","_frameRequest","_callbacks","_framesRequestLength","_downloadDataFn","parseBinaryData","setFrame","_prepareBuffer","framesStart","framesEnd","_framesCount","onDone","onLoadStatusChanged","onFail","onError","_parseBuffer","_bufferRequestStart","arrayBuffer","dataView","atomsCount","framesCount","_atomsCount","maxSize","chunkedFramesCount","timeStep","iName","_timeStep","posData","coordIdx","secondaryArr","hiWord","loWord","_secondaryData","nextFrame","_currFrame","_updateSecondary","myResidues","sec","oldSec","nSec","compRes","getSec","frameIdx","_cachedResidues","disableEvents","_vec","vec","SceneObject","paramsStr","getGeometry","LinesObj","_id1","_id2","_getAtomFromName","err","_atom1","_atom2","_line","computeLineDistances","_raycaster","_intersects","verticesNeedUpdate","OutlineMaterial","srcDepthTex","srcTexSize","DEPTH_OUTLINE","FXAAMaterial","bgTransparent","BG_TRANSPARENT","AOMaterial","diffuseTexture","normalTexture","depthTexture","camNearFar","projMatrix","kernelRadius","depthThreshold","_kernelOffsets","AOHorBlurMaterial","aoMap","samplesOffsets","AOVertBlurWithBlendMaterial","fogNearFar","useFog","AnaglyphMaterial","srcL","srcR","View","orientation","_transitionTime","ViewInterpolator","setup","startView","endView","_endTime","_isPaused","_srcView","_dstView","_isMoving","isMoving","wasStarted","transTime","getCurrentView","success","createView","slerp","pause","resume","MAX_COOKIE_LEN","COUNT_SUFFIX","_chunkString","chunkLen","lc","Cookies","removeCookie","cntKey","_toCount","cntVal","_getSimpleCookie","_removeSimpleCookie","setCookie","_setSimpleCookie","getCookie","cookie","_getExpirationDate","today","EXP_PERIOD_YEARS","setFullYear","toUTCString","_exists","webVRPoC","showEnterVR","cursor","currentSession","onSessionEnded","onSessionStarted","session","_gfx","xr","setReferenceSpaceType","setSession","onmouseenter","onmouseleave","onclick","sessionInit","optionalFeatures","requestSession","then","moveSceneBehindHeadset","showWebXRNotFound","stylizeElement","bottom","padding","border","font","isSessionSupported","supported","textDecoration","createWebVRButton","WebVRPoC","onToggle","_mainCamera","_button","_onToggle","_molContainer","_user","_scalingPivot","_controller1","_controller2","_pressedGripsCounter","_distance","startScalingByControllers","stopScalingByControllers","handleGripsDown","handleGripsUp","anotherController","gfx","_mainFog","_plugVRNodesIntoScene","_setControllersListeners","getController","_createControllerMesh","disable","setAnimationLoop","getSession","_unplugVRNodesFromScene","cylinder","rotateX","updateMoleculeScale","scaler","container","getCanvas","io","LinesObject","fragmentScreenQuadFromDistTex","EDIT_MODE","COMPLEX","COMPONENT","FRAGMENT","LOADER_NOT_FOUND","PARSER_NOT_FOUND","ColorManagement","updateFogRange","removeExtension","hasValidResidues","hasValidRes","reportProgress","percent","TOTAL_PERCENT","chooseFogColor","Miew","settingsCookie","cookiePath","_interpolator","_container","getElementById","head","getElementsByClassName","_containerRoot","_running","_halting","_building","_needRender","_hotKeysEnabled","_cookies","_spinner","_loading","_animInterval","_visuals","_curVisualName","_sourceWindow","registeredPlugins","_initOnSettingsChanged","getMaxRepresentationCount","_setContainerContents","_updateShadowCamera","shadowMatrix","OBB","halfSize","light","getOBB","class","frag","createDocumentFragment","_msgMode","_msgAtomInfo","_showMessage","_initGfx","_initListeners","_onKeyDown","_onKeyUp","_objectControls","_getAltObj","_picker","_onPick","file","keepRepsInfo","job","halt","msg","_showCanvas","_requestAnimationFrame","requestAnimationFrame","arezSpritesSupported","getExtension","isAOSupported","clientWidth","clientHeight","webGLOptions","preserveDrawingBuffer","premultipliedAlpha","renderer2d","WebGL1Renderer","shadowMap","autoUpdate","PCFShadowMap","getContext","setPixelRatio","devicePixelRatio","setClearColor","clearColor","stereoCam","Fog","selectionScene","selectionRoot","selectionPivot","light12","DirectionalLight","pixelRatio","getPixelRatio","shadowMapSize","mapSize","light3","AmbientLight","deviceWidth","deviceHeight","offscreenBuf","WebGLRenderTarget","minFilter","magFilter","depthBuffer","DepthTexture","UnsignedShortType","offscreenBuf2","offscreenBuf3","offscreenBuf4","volBFTex","volFFTex","volWFFTex","offscreenBuf5","FloatType","offscreenBuf6","offscreenBuf7","stereoBufL","stereoBufR","_embedWebXR","stats","_fps","_onResize","_makeUniqueVisualName","baseName","random","suffix","_addVisual","_removeVisual","_forEachVisual","_releaseAllVisuals","_forEachComplexVisual","_getComplexVisual","any","_getVolumeVisual","_getVisualForComplex","getVisuals","getComplexVisualsCount","getCurrentVisual","setCurrentVisual","run","_onTick","_discardComponentEdit","_discardFragmentEdit","enableHotKeys","_resizeOffscreenBuffers","isAnaglyph","multi","_onUpdate","_onRender","_getBSphereRadius","_bSphereForOneVisual","_bBoxForOneVisual","_bBox","_invMatrix","_points","union","_updateFog","_setUberMaterialValues","isScriptingCommandAvailable","callNextCmd","_needRebuild","_updateView","webVR","_clipPlaneUpdateValue","_fogFarUpdateValue","setRenderTarget","_renderFrame","_anaglyphMat","_size","focus","_renderShadowMap","_renderScene","setScissorTest","setScissor","cameraL","cameraR","_onBgColorChanged","_onFogColorChanged","_enableMRT","renderBuffer","textureBuffer","gl","drawBuffersWEBGL","COLOR_ATTACHMENT0","tx8","__webglTexture","bindTexture","TEXTURE_2D","fb","__webglFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT1_WEBGL","distortion","bHaveComplexes","volumeVisual","ssao","_renderWithPrepassTransparency","dstBuffer","srcBuffer","_performAO","_renderOutline","_renderSelection","_renderVolume","_performFXAA","_performDistortion","aberration","targetBuffer","_outlineMaterial","srcDepthBuffer","srcColorBuffer","currentRenderTarget","getRenderTarget","activeCubeFace","getActiveCubeFace","activeMipmapLevel","getActiveMipmapLevel","setBlending","NoBlending","buffers","setClear","setTest","updateMatrices","_hasSelectionToRender","selPivot","selPivotChild","_checkVolumeRenderingSupport","renderTarget","oldRT","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","volumeBFMat","volumeFFMat","cubeOffsetMat","world2colorMat","volumeRenderingSupported","dstBuf","tmpBuf1","tmpBuf2","tmpBuf3","overrideMaterial","colorMask","_fxaaMaterial","_aoMaterial","_horBlurMaterial","_vertBlurMaterial","_scale","normalBuffer","srcDepthTexture","tempBuffer","tempBuffer1","_lastPick","_setEditMode","_resetObjects","setNeedRender","_resetScene","resetPivot","resetView","_export","TheExporter","exporter","rePdbId","rePubchem","reUrlScheme","resolveSourceShortcut","matchesPdbId","sourceType","matchesPubchem","compound","updateBinaryMode","TheParser","fileExt","_fetchData","TheLoader","newOptions","keyCount","loader","lengthComputable","total","loaded","promise","catch","_parseData","dataSet","onLoadEnd","anything","jobIndex","_refreshTitle","_onLoad","unload","_startAnimation","fileData","_stopAnimation","_frameInfo","isPlaying","_isAnimating","_continueAnimation","_pauseAnimation","clearInterval","minFrameTime","setInterval","_updateObjsToFrame","visualName","amberFileName","resetEd","_onLoadEd","_tweakResolution","_edLoader","loadEd","_rebuildObjects","toRemove","unitIdx","currentUnitInfo","_updateInfoPanel","rebuildActions","appendix","_extractRepresentation","defPreset","_setReps","presList","newIdx","_editMode","getElementsByTagName","_enterComponentEditMode","editors","_editors","_applyComponentEdit","_enterFragmentEditMode","selectedVisuals","_applyFragmentEdit","_updateSelection","firstLine","secondLine","aName","coordLine","nextAltObj","setPivotResidue","amount","setPivotAtom","_centerInVisual","setPivotSubset","_includesInCurSelection","_includesInSelector","screenshot","fov2Tan","tan2Fov","getDataURL","dataURL","currBrowser","canvas","canvasContext","drawImage","toDataURL","screenshotURI","originalTanFov2","areaOfInterestSize","areaOfInterestTanFov2","shotAspect","setDrawingBufferSize","uri","save","dataString","maxPerf","_gfxScore","_autoChangeResolution","setOptions","objData","bThrow","Ctor","_addSceneObject","sceneObject","objs","getState","compact","getScript","_compareReps","compareWithDefaults","currPreset","repsDiff","emptyReps","repsInfo","objectsState","_updateShadowmapMeshes","_updateMaterials","_fogAlphaChanged","evt","Boolean","sel","VIEW_VERSION","eulerOrder","euler","Euler","setFromQuaternion","srcView","dstView","setFromEuler","None","projected","fullAtomName","complexName","project","exportCML","extractRotation","extractBasis","retMat","makeBasis","updateCMLData","xml","removeAttribute","sGroup","oSerializer","XMLSerializer","serializeToString","curChainName","curChainColor","PACKAGE_VERSION","thirdParty","lodash","three","modeIdDesc","$help","colorDesc","materialDesc","addRepDesc","setGetParameterDesc","PDBID","REP_NAME","DESCRIPTION","REP_INDEX","EXPRESSION","MODE_ID","COLORER_ID","MATERIAL_ID","new","del","PARAMETER","set_save","set_restore","set_reset","PRESET","ENCODED_VIEW","removeobj","listobj","parsercli","clihelp","NULL","RepresentationMap","representationMap","representationID","strId","sortedKeys","representationsStorage","CLIUtils","repMap","repName","selectionStr","strList","joinHelpStr","helpData","sortBy","helpItem","awaitWhileCMDisInProcess","finishAwaitingCMDInProcess","modificate","selExc","modificators","modificator","argExc","pathExc","endsWith","utilFunctions","cliUtils","cmd","_val","cliutils","notimplemented","script","_printCallback","_errorCallback","cmdQueue","commandInAction"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"dist/Miew.module.js","mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAIA,MAAM,GAAI,YAAU;EACxB,IAAIC,CAAC,GAAC,SAAAA,CAASC,CAAC,EAACC,CAAC,EAACF,CAAC,EAACG,CAAC,EAAC;MAAC,KAAIH,CAAC,GAACA,CAAC,IAAE,CAAC,CAAC,EAACG,CAAC,GAACF,CAAC,CAACG,MAAM,EAACD,CAAC,EAAE,EAACH,CAAC,CAACC,CAAC,CAACE,CAAC,CAAC,CAAC,GAACD,CAAC,CAAC;MAAC,OAAOF,CAAC;IAAA,CAAC;IAACK,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,EAAE,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,GAAG,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,CAAC;IAACC,IAAI,GAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,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C,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,EAA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,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,CAAC,EAACtK,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAACrD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAACrD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACD,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACD,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACD,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACA;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC7D,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACS,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACJ,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,GAAG,EAACI;IAAI,CAAC,EAACrE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAACvE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACsE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACtE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAACvE,CAAC,CAACuE,IAAI,EAAC,CAA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C,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,CAAC,EAACjD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACI,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC;MAAC,CAAC,EAACjD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE;IAAC,CAAC,EAAC;MAAC,CAAC,EAACrD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,GAAG;IAAC,CAAC,EAAC1D,CAAC,CAAC0E,IAAI,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAAC1E,CAAC,CAAC0E,IAAI,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,CAAC,EAACrE,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAAC,EAAE;MAAC,EAAE,EAACI,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC;IAAG,CAAC,EAAC;MAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,CAAC,EAACjD,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,CAAC,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAAC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAAE,EAACC,GAAG;MAAC,EAA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AAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,EAAE,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,GAAG,CAAC;MAAC,GAAG,EAAC,CAAC,CAAC,EAAC,EAAE,CAAC;MAAC,G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AAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KAAK,EAAE;YAAC,OAAO,EAAE;YACjB;AAAM;UACN,KA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AC,CAAC;EACxC;EAEAmrB,YAAYA,CAAA,EAAG;IACb,OAAO,IAAI,CAACF,aAAa;EAC3B;;EAEA;EACA;EACAG,MAAMA,CAACpK,KAAK,EAAE;IACZ,IAAI,CAACD,aAAa,CAAC;MAAE/gB,IAAI,EAAE,cAAc;MAAEqrB,UAAU,EAAErK;IAAM,CAAC,CAAC;EACjE;AACF,C;;ACtBuB;AACK;AAC0B;AAEtD,MAAMsK,OAAO,GAAG,CAAC;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAMnR,iBAAQ,GAAG;EACf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEoR,KAAK,EAAE;IACL;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFC,IAAI,EAAE,IAAI;MACVC,IAAI,EAAE,IAAI;MACVC,KAAK,EAAE,GAAG;MACVC,SAAS,EAAE,IAAI;MACfC,OAAO,EAAE,GAAG;MACZC,QAAQ,EAAE,IAAI;MACdC,cAAc,EAAE;QACdC,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE,CAAC;QACTC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT;IACF,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFN,cAAc,EAAE;QACdC,IAAI,EAAE,CAAC;QACPC,GAAG,EAAE,CAAC;QACNC,MAAM,EAAE,CAAC;QACTC,IAAI,EAAE,EAAE;QACRC,KAAK,EAAE;MACT;IACF,CAAC;IAED;IACA;IACA;;IAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIE,EAAE,EAAE;MACFV,SAAS,EAAE,IAAI;MACfE,QAAQ,EAAE,IAAI;MACdS,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A;AACA;AACA;AACA;AACA;AACA;AACA;EACE6C,QAAQ,EAAE;IACR;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFC,MAAM,EAAE,CAAC;IACX,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACF7U,KAAK,EAAE;IACT,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACI8U,EAAE,EAAE;MACFvC,MAAM,EAAE,SAAS;MACjBvS,KAAK,EAAE,QAAQ;MACf+U,SAAS,EAAE;IACb,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFhV,KAAK,EAAE,QAAQ;MACfiV,MAAM,EAAE;IACV,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFC,QAAQ,EAAE;IACZ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,EAAE,EAAE;MACFD,QAAQ,EAAE,MAAM;MAChBxjB,GAAG,EAAE,CAAC;MACND,GAAG,EAAE;IACP,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACI2jB,EAAE,EAAE;MACFF,QAAQ,EAAE;IACZ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACIG,EAAE,EAAE;MACFH,QAAQ,EAAE;IACZ,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;IACII,EAAE,EAAE;MACFJ,QAAQ,EAAE;IACZ;EACF,CAAC;EAED;AACF;AACA;AACA;EACEK,SAAS,EAAE,IAAI;EAEf;AACF;AACA;AACA;EACEC,MAAM,EAAE,IAAI;EAEZ;AACF;AACA;AACA;EACEC,OAAO,EAAE,GAAG;EAEZ;AACF;AACA;AACA;EACEC,MAAM,EAAE,KAAK;EAEbC,WAAW,EAAE,GAAG;EAEhBC,WAAW,EAAE,GAAG;EAEhB;AACF;AACA;AACA;EACEC,aAAa,EAAE,GAAG;EAAE;;EAEpB;AACF;AACA;AACA;EACEC,YAAY,EAAE,CAAC;EAAE;EACjBC,QAAQ,EAAE,GAAG;EACbC,QAAQ,EAAE,QAAQ;EAClBC,cAAc,EAAE,KAAK;EAErB;AACF;AACA;AACA;EACEC,OAAO,EAAE,IAAI;EAEb;AACF;AACA;AACA;EACEC,UAAU,EAAE,QAAQ;EAEpBC,cAAc,EAAE,KAAK;;EAErBC,UAAU,EAAE,IAAI;EAEhBC,MAAM,EAAE,SAAS;EAAE;;EAEnBC,OAAO,EAAE;IACP;IACAC,OAAO,EAAE,CAAC;MACRnwB,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,KAAK;MACfG,QAAQ,EAAE;IACZ,CAAC,CAAC;IAEF+xB,KAAK,EAAE,EAAE;IAET;IACAC,IAAI,EAAE,CAAC;MACLrwB,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,KAAK;MACfG,QAAQ,EAAE;IACZ,CAAC,CAAC;IAEF;IACAiyB,KAAK,EAAE,CAAC;MACNtwB,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,KAAK;MACfG,QAAQ,EAAE;IACZ,CAAC,CAAC;IAEF;IACAkyB,KAAK,EAAE,CAAC;MACNvwB,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,YAAY;MACtBG,QAAQ,EAAE;IACZ,CAAC,EAAE;MACD2B,IAAI,EAAE,IAAI;MACVE,OAAO,EAAE,IAAI;MACbhC,QAAQ,EAAE,sBAAsB;MAChCG,QAAQ,EAAE;IACZ,CAAC;EACH,CAAC;EAEDmyB,OAAO,EAAE;IACPjsB,IAAI,EAAE;MACJmV,KAAK,EAAE,UAAU;MACjB+W,QAAQ,EAAE,GAAG;MACbC,OAAO,EAAE;IACX;EACF,CAAC;EAED;;EAEA9C,EAAE,EAAE;IACFlU,KAAK,EAAE,QAAQ;IACfiX,WAAW,EAAE;EACf,CAAC;EAEDC,KAAK,EAAE;IACLC,SAAS,EAAE,KAAK;IAChBC,eAAe,EAAE,GAAG;IACpBC,cAAc,EAAE;EAClB,CAAC;EAED;AACF;AACA;AACA;EACEC,OAAO,EAAE,CAET,CAAC;EAED;AACF;AACA;AACA;EACEC,IAAI,EAAE,IAAI;EAEV;AACF;AACA;AACA;EACEC,GAAG,EAAE,IAAI;EAET;AACF;AACA;AACA;EACEtS,GAAG,EAAE,IAAI;EAET;AACF;AACA;AACA;AACA;EACEuS,QAAQ,EAAE,IAAI;EAEdC,qBAAqB,EAAE,IAAI;EAE3B;AACF;AACA;AACA;EACEC,aAAa,EAAE,IAAI;EAEnBC,OAAO,EAAE,KAAK;EAEd;AACF;AACA;AACA;EACEC,SAAS,EAAE,IAAI;EAEf;AACF;AACA;AACA;AACA;EACEC,IAAI,EAAE,IAAI;EACV;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE;IACPzS,EAAE,EAAE,KAAK;IACTtF,KAAK,EAAE,QAAQ;IACfgY,SAAS,EAAE,GAAG;IACdC,SAAS,EAAE;EACb,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,EAAE,EAAE,KAAK;EAET;AACF;AACA;AACA;AACA;AACA;AACA;EACEzX,MAAM,EAAE;IACN6E,EAAE,EAAE,KAAK;IACT7f,IAAI,EAAE,QAAQ;IACdqa,MAAM,EAAE;EACV,CAAC;EAED;AACF;AACA;AACA;AACA;EACEqY,YAAY,EAAE,GAAG;EAEjB;AACF;AACA;AACA;AACA;EACEC,MAAM,EAAE,EAAE;EAEV;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,CAAC;EAEV;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,qBAAqB,EAAE,IAAI;EAE3B;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,IAAI;EAEb;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,IAAI;EAEb;AACF;AACA;AACA;AACA;EACEC,IAAI,EAAE,MAAM;EAEZ;AACF;AACA;AACA;AACA;EACEC,OAAO,EAAE,KAAK;EAEd;AACF;AACA;AACA;AACA;EACEC,QAAQ,EAAE,KAAK;EAEf;AACF;AACA;AACA;AACA;EACEC,UAAU,EAAE,IAAI;EAEhB;AACF;AACA;AACA;AACA;EACEC,MAAM,EAAE,MAAM;EAEd;AACF;AACA;AACA;AACA;EACEC,gBAAgB,EAAE,IA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CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAChD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACnD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC1D,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACvD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACzD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC5D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EACxD,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAC3D,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAC/D;AAED,qEAAeP,mBAAmB,E;;ACtSH;AACyB;AACxB;AAEhC,MAAMQ,SAAS,GAAG,CAChB,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACpD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EACrD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EACtD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC;AAEvD,SAASC,kBAAkBA,CAACl6E,CAAC,EAAE8nD,KAAK,EAAEqyB,IAAI,EAAE;EAC1C,MAAM5/D,CAAC,GAAGva,CAAC,CAAC25D,QAAQ,CAAC7R,KAAK,CAAC3xC,CAAC,EAAE2xC,KAAK,CAACltC,CAAC,EAAEktC,KAAK,CAAC7rC,CAAC,CAAC;EAC/Ck+D,IAAI,CAAC7zE,GAAG,CAACiU,CAAC,CAAC,CAAC,CAAC,EAAEA,CAAC,CAAC,CAAC,CAAC,EAAEA,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5B;;AAEA;AACA,MAAM6/D,QAAQ,CAAC;EACb7mE,WAAWA,CAAA,EAAG;IACZ,IAAI,CAAC8mE,QAAQ,GAAG,CAAC;IACjB,IAAI,CAACjtE,CAAC,GAAG,IAAI7D,KAAK,CAAC,IAAI,CAAC8wE,QAAQ,CAAC;IACjC,IAAI,CAAC9/D,CAAC,GAAG,IAAIhR,KAAK,CAAC,IAAI,CAAC8wE,QAAQ,CAAC;IACjC,IAAI,CAACxwE,GAAG,GAAG,IAAIN,KAAK,CAAC,IAAI,CAAC8wE,QAAQ,CAAC;IACnC,KAAK,IAAIpyE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACoyE,QAAQ,EAAE,EAAEpyE,CAAC,EAAE;MACtC,IAAI,CAACmF,CAAC,CAACnF,CAAC,CAAC,GAAG,IAAIugC,iGAAa,CAAC,CAAC;MAC/B,IAAI,CAACjuB,CAAC,CAACtS,CAAC,CAAC,GAAG,IAAIugC,iGAAa,CAAC,CAAC;IACjC;IACA,IAAI,CAAC8xC,SAAS,GAAG,CAAC;EACpB;AACF;;AAEA;AACA,MAAMC,QAAQ,CAAC;EACbhnE,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACtG,CAAC,GAAG;MACPG,CAAC,EAAE,IAAIo7B,iGAAa,CAAC,CAAC;MACtBtgC,CAAC,EAAE,IAAIsgC,iGAAa,CAAC;IACvB,CAAC;IAED,IAAI,CAAC1tB,CAAC,GAAG;MACP1N,CAAC,EAAE,IAAIo7B,iGAAa,CAAC,CAAC;MACtBtgC,CAAC,EAAE,IAAIsgC,iGAAa,CAAC;IACvB,CAAC;IAED,IAAI,CAAC54B,CAAC,GAAG;MACPxC,CAAC,EAAE,IAAIo7B,iGAAa,CAAC,CAAC;MACtBtgC,CAAC,EAAE,IAAIsgC,iGAAa,CAAC;IACvB,CAAC;EACH;AACF;AAEA,SAASgyC,WAAWA,CAACC,OAAO,EAAE;EAC5B,MAAMhkE,GAAG,GAAG,IAAIlN,KAAK,CAACkxE,OAAO,CAAC;EAC9B,KAAK,IAAIxyE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwyE,OAAO,EAAE,EAAExyE,CAAC,EAAE;IAChCwO,GAAG,CAACxO,CAAC,CAAC,GAAG,IAAIugC,iGAAa,CAAC,CAAC;EAC9B;EAEA,OAAO/xB,GAAG;AACZ;AAEA,MAAMikE,UAAU,CAAC;EACfnnE,WAAWA,CAAA,EAAG;IACZ,IAAI,CAAConE,aAAa,GAAG,CAAC;IACtB,IAAI,CAACC,YAAY,GAAG,CAAC;IACrB,IAAI,CAACvlC,SAAS,GAAG,EAAE;IACnB,IAAI,CAACy3B,QAAQ,GAAG,EAAE;IAClB,IAAI,CAAC5B,OAAO,GAAG,IAAI;IACnB,IAAI,CAAC5C,QAAQ,GAAG,EAAE;IAClB,IAAI,CAACuS,eAAe,GAAG,IAAI;IAC3B,IAAI,CAACC,MAAM,GAAG,IAAItyC,iGAAa,CAAC,CAAC;IACjC,IAAI,CAACuyC,MAAM,GAAG,IAAIvyC,iGAAa,CAAC,CAAC;IACjC,IAAI,CAACwyC,MAAM,GAAG,IAAIxyC,iGAAa,CAAC,CAAC;IACjC,IAAI,CAACyyC,KAAK,GAAG,IAAIzyC,iGAAa,CAAC,CAAC;IAChC,IAAI,CAAC0yC,KAAK,GAAG,IAAI1yC,iGAAa,CAAC,CAAC;IAChC,IAAI,CAAC2yC,KAAK,GAAG,IAAI3yC,iGAAa,CAAC,CAAC;EAClC;EAEA4yC,mBAAmBA,CAAA,EAAG;IACpB,MAAMC,OAAO,GAAG,IAAI,CAACR,eAAe;IAEpC,MAAMS,QAAQ,GAAGD,OAAO,CAACphB,WAAW,CAAC,CAAC;;IAEtC;IACA,MAAMshB,KAAK,GAAG,IAAI,CAACT,MAAM;IACzB,MAAMU,KAAK,GAAG,IAAI,CAACT,MAAM;IACzB,MAAMU,KAAK,GAAG,IAAI,CAACT,MAAM;IACzB,MAAMU,IAAI,GAAG,IAAI,CAACT,KAAK;IACvB,MAAMU,IAAI,GAAG,IAAI,CAACT,KAAK;IACvB,MAAMU,IAAI,GAAG,IAAI,CAACT,KAAK;IAEvBI,KAAK,CAACj1E,GAAG,CAACg1E,QAAQ,CAACnlE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3BqlE,KAAK,CAACl1E,GAAG,CAAC,CAAC,EAAEg1E,QAAQ,CAAC1gE,CAAC,EAAE,CAAC,CAAC;IAC3B6gE,KAAK,CAACn1E,GAAG,CAAC,CAAC,EAAE,CAAC,EAAEg1E,QAAQ,CAACr/D,CAAC,CAAC;IAE3By/D,IAAI,CAACp1E,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjBq1E,IAAI,CAACr1E,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjBs1E,IAAI,CAACt1E,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;IAEjB;IACA,MAAMu1E,GAAG,GAAG,IAAIrzC,iGAAa,CAAC,CAAC;IAC/BqzC,GAAG,CAACzzC,YAAY,CAACszC,IAAI,EAAEC,IAAI,CAAC;IAC5B,IAAIE,GAAG,CAACr0C,GAAG,CAACo0C,IAAI,CAAC,GAAG,CAAC,EAAE;MACrBF,IAAI,CAACnvC,MAAM,CAAC,CAAC;MACbovC,IAAI,CAACpvC,MAAM,CAAC,CAAC;MACbqvC,IAAI,CAACrvC,MAAM,CAAC,CAAC;IACf;;IAEA;IACA,IAAImvC,IAAI,CAACvlE,CAAC,GAAG,CAAC,IAAIulE,IAAI,CAAC9gE,CAAC,GAAG,CAAC,IAAI8gE,IAAI,CAACz/D,CAAC,GAAG,CAAC,IACrC0/D,IAAI,CAACxlE,CAAC,GAAG,CAAC,IAAIwlE,IAAI,CAAC/gE,CAAC,GAAG,CAAC,IAAI+gE,IAAI,CAAC1/D,CAAC,GAAG,CAAC,IACtC2/D,IAAI,CAACzlE,CAAC,GAAG,CAAC,IAAIylE,IAAI,CAAChhE,CAAC,GAAG,CAAC,IAAIghE,IAAI,CAAC3/D,CAAC,GAAG,CAAC,EAAE;MAC3C,OAAO,KAAK;IACd;;IAEA;IACA,MAAM6/D,OAAO,GAAIC,GAAG,IAAK3zE,IAAI,CAACuI,GAAG,CAACorE,GAAG,CAAC,GAAGr0E,MAAM,CAACs0E,OAAO;IACvD,OAAO,EAAEF,OAAO,CAACP,KAAK,CAAC3gE,CAAC,CAAC,IAAIkhE,OAAO,CAACP,KAAK,CAACt/D,CAAC,CAAC,IACpC6/D,OAAO,CAACN,KAAK,CAACrlE,CAAC,CAAC,IAAI2lE,OAAO,CAACN,KAAK,CAACv/D,CAAC,CAAC,IACpC6/D,OAAO,CAACL,KAAK,CAACtlE,CAAC,CAAC,IAAI2lE,OAAO,CAACL,KAAK,CAAC7gE,CAAC,CAAC,CAAC;EAChD;EAEAqhE,aAAaA,CAACC,QAAQ,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEC,MAAM,EAAElO,MAAM,EAAE;IACxD,MAAMjgB,EAAE,GAAGguB,IAAI,CAAC/uE,CAAC,CAACgvE,IAAI,CAAC;IACvB,MAAMhuB,EAAE,GAAG+tB,IAAI,CAAC/uE,CAAC,CAACivE,IAAI,CAAC;IACvB,MAAMp4B,EAAE,GAAGk4B,IAAI,CAAC5hE,CAAC,CAAC6hE,IAAI,CAAC;IACvB,MAAMl4B,EAAE,GAAGi4B,IAAI,CAAC5hE,CAAC,CAAC8hE,IAAI,CAAC;IACvB,MAAME,KAAK,GAAGJ,IAAI,CAACtyE,GAAG,CAACuyE,IAAI,CAAC;IAC5B,MAAMI,KAAK,GAAGL,IAAI,CAACtyE,GAAG,CAACwyE,IAAI,CAAC;IAC5B,MAAMI,SAAS,GAAGP,QAAQ,GAAGK,KAAK;IAClC,MAAMG,WAAW,GAAGF,KAAK,GAAGD,KAAK;IAEjC,IAAII,EAAE,GAAG,GAAG;IAEZ,IAAIv0E,IAAI,CAACuI,GAAG,CAAC+rE,WAAW,CAAC,GAAG,GAAG,EAAE;MAC/BC,EAAE,GAAGF,SAAS,GAAGC,WAAW;IAC9B;IACAC,EAAE,GAAGA,EAAE,GAAG,GAAG,GAAG,GAAG,GAAGA,EAAE;IACxBL,MAAM,CAAC9M,WAAW,CAACrhB,EAAE,EAAEC,EAAE,EAAEuuB,EAAE,CAAC;IAC9BvO,MAAM,CAACoB,WAAW,CAACvrB,EAAE,EAAEC,EAAE,EAAEy4B,EAAE,CAAC;EAChC;EAEA,OAAOC,SAAS,GAAGnD,8BAAmB,CAACztE,SAAS,CAACguE,oBAAoB;EAErE,OAAOK,QAAQ,GAAG,EAAE;EAEpB,OAAOwC,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EAE3D,OAAOC,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EAE5D,OAAOC,WAAW,GAAGvC,WAAW,CAACE,UAAU,CAACL,QAAQ,CAAC;EAErD,OAAO2C,WAAW,GAAGxC,WAAW,CAACE,UAAU,CAACL,QAAQ,CAAC;EAErD4C,WAAWA,CAACd,IAAI,EAAED,QAAQ,EAAEgB,SAAS,EAAE;IACrC,MAAM;MAAE5C;IAAU,CAAC,GAAG6B,IAAI;IAC1B,IAAIl0E,CAAC,GAAG,CAAC;IACT,MAAMwyE,OAAO,GAAGC,UAAU,CAACL,QAAQ;IACnC,MAAM8C,YAAY,GAAGzC,UAAU,CAACmC,aAAa;IAC7C,MAAMO,aAAa,GAAG1C,UAAU,CAACoC,cAAc;IAC/C,MAAMO,UAAU,GAAG3C,UAAU,CAACqC,WAAW;IACzC,MAAMO,UAAU,GAAG5C,UAAU,CAACsC,WAAW;IAEzC,OAAO/0E,CAAC,GAAGwyE,OAAO,EAAE,EAAExyE,CAAC,EAAE;MACvB,IAAIgyE,SAAS,CAACK,SAAS,CAAC,GAAI,CAAC,IAAIryE,CAAE,EAAE;QACnC,IAAI,CAACg0E,aAAa,CAChBC,QAAQ,EACRC,IAAI,EACJgB,YAAY,CAACl1E,CAAC,CAAC,EACfm1E,aAAa,CAACn1E,CAAC,CAAC,EAChBo1E,UAAU,CAACp1E,CAAC,CAAC,EACbq1E,UAAU,CAACr1E,CAAC,CACd,CAAC;MACH;IACF;IAEA,IAAIs1E,QAAQ,GAAG,CAAC;IAChB,MAAMC,SAAS,GAAGlD,SAAS,GAAG,EAAE;IAChC,MAAMmD,QAAQ,GAAG/C,UAAU,CAACkC,SAAS;IAErC,KAAK30E,CAAC,GAAG,CAAC,EAAEw1E,QAAQ,CAACD,SAAS,GAAGv1E,CAAC,CAAC,KAAK,CAAC,CAAC,EAAEA,CAAC,IAAI,CAAC,EAAE;MAClDi1E,SAAS,CAACK,QAAQ,CAAC,CAACtwE,CAAC,CAACG,CAAC,CAACqK,IAAI,CAAC4lE,UAAU,CAACI,QAAQ,CAACD,SAAS,GAAGv1E,CAAC,CAAC,CAAC,CAAC;MACjEi1E,SAAS,CAACK,QAAQ,CAAC,CAACtwE,CAAC,CAAC/E,CAAC,CAACuP,IAAI,CAAC6lE,UAAU,CAACG,QAAQ,CAACD,SAAS,GAAGv1E,CAAC,CAAC,CAAC,CAAC;MAEjEi1E,SAAS,CAACK,QAAQ,CAAC,CAACziE,CAAC,CAAC1N,CAAC,CAACqK,IAAI,CAAC4lE,UAAU,CAACI,QAAQ,CAACD,SAAS,GAAGv1E,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MACrEi1E,SAAS,CAACK,QAAQ,CAAC,CAACziE,CAAC,CAAC5S,CAAC,CAACuP,IAAI,CAAC6lE,UAAU,CAACG,QAAQ,CAACD,SAAS,GAAGv1E,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MAErEi1E,SAAS,CAACK,QAAQ,CAAC,CAAC3tE,CAAC,CAACxC,CAAC,CAACqK,IAAI,CAAC4lE,UAAU,CAACI,QAAQ,CAACD,SAAS,GAAGv1E,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MACrEi1E,SAAS,CAACK,QAAQ,CAAC,CAAC3tE,CAAC,CAAC1H,CAAC,CAACuP,IAAI,CAAC6lE,UAAU,CAACG,QAAQ,CAACD,SAAS,GAAGv1E,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MACrE,EAAEs1E,QAAQ;IACZ;IAEA,OAAOA,QAAQ;EACjB;EAEAG,eAAeA,CAAC/nD,QAAQ,EAAEgoD,IAAI,EAAEC,YAAY,EAAE;IAC5C,MAAMC,GAAG,GAAG,IAAI,CAAChD,eAAe;IAChC,MAAMQ,OAAO,GAAG,IAAI,CAACR,eAAe,CAAC5e,OAAO,CAAC,CAAC;IAC9C,MAAM6hB,GAAG,GAAGD,GAAG,CAAC/jB,aAAa,CAAC,CAAC;IAC/B,MAAMQ,KAAK,GAAGwjB,GAAG,CAAC,CAAC,CAAC;IACpB,MAAMvjB,KAAK,GAAGujB,GAAG,CAAC,CAAC,CAAC;IACpB,MAAMtjB,KAAK,GAAGsjB,GAAG,CAAC,CAAC,CAAC;IACpB,MAAMC,KAAK,GAAGJ,IAAI,GAAGE,GAAG,CAAC1hB,UAAU,CAAC,CAAC;IACrC,MAAM6hB,KAAK,GAAGL,IAAI,GAAGE,GAAG,CAACzhB,UAAU,CAAC,CAAC;IACrC,MAAM6hB,KAAK,GAAGN,IAAI,GAAGE,GAAG,CAACxhB,UAAU,CAAC,CAAC;IAErC,MAAM6hB,EAAE,GAAG,IAAI9D,QAAQ,CAAC,CAAC;IACzB,MAAM+D,KAAK,GAAGD,EAAE,CAACr0E,GAAG;IACpB,MAAMu0E,SAAS,GAAGF,EAAE,CAACr0E,GAAG,CAAC3J,MAAM;IAC/B,MAAMm+E,SAAS,GAAG,CAChB,IAAI71C,iGAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAAE;IAC5B,IAAIA,iGAAa,CAACm1C,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAAE;IAC/B,IAAIn1C,iGAAa,CAACm1C,IAAI,EAAEA,IAAI,EAAE,CAAC,CAAC;IAAE;IAClC,IAAIn1C,iGAAa,CAAC,CAAC,EAAEm1C,IAAI,EAAE,CAAC,CAAC;IAAE;IAC/B,IAAIn1C,iGAAa,CAAC,CAAC,EAAE,CAAC,EAAEm1C,IAAI,CAAC;IAAE;IAC/B,IAAIn1C,iGAAa,CAACm1C,IAAI,EAAE,CAAC,EAAEA,IAAI,CAAC;IAAE;IAClC,IAAIn1C,iGAAa,CAACm1C,IAAI,EAAEA,IAAI,EAAEA,IAAI,CAAC;IAAE;IACrC,IAAIn1C,iGAAa,CAAC,CAAC,EAAEm1C,IAAI,EAAEA,IAAI,CAAC,CAAE;IAAA,CACnC;IAED,MAAMW,WAAW,GAAG,CAAC;IACrB,MAAMpB,SAAS,GAAG,IAAI3zE,KAAK,CAAC+0E,WAAW,CAAC;IACxC,KAAK,IAAIziE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyiE,WAAW,EAAE,EAAEziE,CAAC,EAAE;MACpCqhE,SAAS,CAACrhE,CAAC,CAAC,GAAG,IAAI0+D,QAAQ,CAAC,CAAC;IAC/B;IAEA,IAAIgE,YAAY;IAChB,MAAMrzE,IAAI,GAAG,IAAI;IACjB,MAAM8lE,SAAS,GAAG,IAAI,CAAC37B,SAAS;IAChC,MAAM64B,OAAO,GAAG,IAAI,CAACpB,QAAQ;IAC7B,IAAI8Q,YAAY,EAAE;MAChB;MACAW,YAAY,GAAI,YAAY;QAC1B,MAAMC,IAAI,GAAG,IAAIh2C,iGAAa,CAACt9B,IAAI,CAAC4vE,MAAM,CAAC3kE,CAAC,EAAEjL,IAAI,CAAC6vE,MAAM,CAACngE,CAAC,EAAE1P,IAAI,CAAC8vE,MAAM,CAAC/+D,CAAC,CAAC;QAC3E,OAAO,UAAUwiE,SAAS,EAAE;UAC1B,MAAMnC,MAAM,GAAGmC,SAAS,CAACrxE,CAAC,CAACg6B,KAAK,CAAC,CAAC;UAClCk1C,MAAM,CAACtd,QAAQ,CAACwf,IAAI,CAAC;UACrBxN,SAAS,CAAC3kE,IAAI,CAACiwE,MAAM,CAAClzE,GAAG,CAAC8B,IAAI,CAACwzE,OAAO,CAAC,CAAC;UACxCxQ,OAAO,CAAC7hE,IAAI,CAACoyE,SAAS,CAACv2E,CAAC,CAACk/B,KAAK,CAAC,CAAC,CAAC;QACnC,CAAC;MACH,CAAC,CAAC,CAAE;IACN,CAAC,MAAM;MACLm3C,YAAY,GAAI,YAAY;QAC1B,MAAMI,MAAM,GAAG,IAAIn2C,iGAAa,CAAC,CAAC;QAClCm2C,MAAM,CAACr4E,GAAG,CACR4E,IAAI,CAAC4vE,MAAM,CAAC3kE,CAAC,EACbjL,IAAI,CAAC6vE,MAAM,CAAC5kE,CAAC,EACbjL,IAAI,CAAC8vE,MAAM,CAAC7kE,CAAC,EACbjL,IAAI,CAAC4vE,MAAM,CAAClgE,CAAC,EACb1P,IAAI,CAAC6vE,MAAM,CAACngE,CAAC,EACb1P,IAAI,CAAC8vE,MAAM,CAACpgE,CAAC,EACb1P,IAAI,CAAC4vE,MAAM,CAAC7+D,CAAC,EACb/Q,IAAI,CAAC6vE,MAAM,CAAC9+D,CAAC,EACb/Q,IAAI,CAAC8vE,MAAM,CAAC/+D,CACd,CAAC;QACD,MAAM0yD,OAAO,GAAG,IAAInmC,iGAAa,CAAC,CAAC;QACnCmmC,OAAO,CAACroE,GAAG,CACT4E,IAAI,CAAC+vE,KAAK,CAAC9kE,CAAC,EACZjL,IAAI,CAACgwE,KAAK,CAAC/kE,CAAC,EACZjL,IAAI,CAACiwE,KAAK,CAAChlE,CAAC,EACZjL,IAAI,CAAC+vE,KAAK,CAACrgE,CAAC,EACZ1P,IAAI,CAACgwE,KAAK,CAACtgE,CAAC,EACZ1P,IAAI,CAACiwE,KAAK,CAACvgE,CAAC,EACZ1P,IAAI,CAAC+vE,KAAK,CAACh/D,CAAC,EACZ/Q,IAAI,CAACgwE,KAAK,CAACj/D,CAAC,EACZ/Q,IAAI,CAACiwE,KAAK,CAACl/D,CACb,CAAC;QAED,OAAO,UAAUwiE,SAAS,EAAE;UAC1BzN,SAAS,CAAC3kE,IAAI,CAACoyE,SAAS,CAACrxE,CAAC,CAACg6B,KAAK,CAAC,CAAC,CAACyoC,YAAY,CAAC8O,MAAM,CAAC,CAACv1E,GAAG,CAAC8B,IAAI,CAACwzE,OAAO,CAAC,CAAC;UAC1ExQ,OAAO,CAAC7hE,IAAI,CAACoyE,SAAS,CAACv2E,CAAC,CAACk/B,KAAK,CAAC,CAAC,CAACyoC,YAAY,CAAClB,OAAO,CAAC,CAAC;QACzD,CAAC;MACH,CAAC,CAAC,CAAE;IACN;IACA,MAAMp8C,OAAO,GAAG,IAAI,CAAC+1C,QAAQ;IAE7B,IAAIsW,YAAY,GAAG,CAAC;IAEpB,KAAK,IAAI3iE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAIu+C,KAAK,GAAGmjB,IAAK,EAAE1hE,CAAC,IAAI0hE,IAAI,EAAE;MAC7C,KAAK,IAAI/iE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAI2/C,KAAK,GAAGojB,IAAK,EAAE/iE,CAAC,IAAI+iE,IAAI,EAAE;QAC7C,IAAI/4D,GAAG,GAAGi5D,GAAG,CAAC3hB,YAAY,CAAC,CAAC,EAAEthD,CAAC,EAAEqB,CAAC,CAAC;QACnC,KAAK,IAAI9F,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAImkD,KAAK,GAAGqjB,IAAK,EAAExnE,CAAC,IAAIwnE,IAAI,EAAE/4D,GAAG,IAAIm5D,KAAK,EAAE;UAC3DI,KAAK,CAAC,CAAC,CAAC,GAAG9C,OAAO,CAACz2D,GAAG,CAAC;UACvBu5D,KAAK,CAAC,CAAC,CAAC,GAAG9C,OAAO,CAACz2D,GAAG,GAAGm5D,KAAK,CAAC;UAC/BI,KAAK,CAAC,CAAC,CAAC,GAAG9C,OAAO,CAACz2D,GAAG,GAAGo5D,KAAK,CAAC;UAC/BG,KAAK,CAAC,CAAC,CAAC,GAAG9C,OAAO,CAACz2D,GAAG,GAAGm5D,KAAK,GAAGC,KAAK,CAAC;UACvCG,KAAK,CAAC,CAAC,CAAC,GAAG9C,OAAO,CAACz2D,GAAG,GAAGq5D,KAAK,CAAC;UAC/BE,KAAK,CAAC,CAAC,CAAC,GAAG9C,OAAO,CAACz2D,GAAG,GAAGm5D,KAAK,GAAGE,KAAK,CAAC;UACvCE,KAAK,CAAC,CAAC,CAAC,GAAG9C,OAAO,CAACz2D,GAAG,GAAGo5D,KAAK,GAAGC,KAAK,CAAC;UACvCE,KAAK,CAAC,CAAC,CAAC,GAAG9C,OAAO,CAACz2D,GAAG,GAAGm5D,KAAK,GAAGC,KAAK,GAAGC,KAAK,CAAC;;UAE/C;UACA;UACA,IAAI3D,SAAS,GAAG,CAAC;UACjB,IAAIryE,CAAC,GAAG,CAAC;UACT,OAAOA,CAAC,GAAGm2E,SAAS,EAAE,EAAEn2E,CAAC,EAAE;YACzB,IAAIk2E,KAAK,CAACl2E,CAAC,CAAC,GAAG0tB,QAAQ,EAAE;cACvB2kD,SAAS,IAAK,CAAC,IAAIryE,CAAE;YACvB;UACF;UAEA,IAAIgyE,SAAS,CAACK,SAAS,CAAC,KAAK,CAAC,EAAE;YAC9B;UACF;UAEA4D,EAAE,CAAC5D,SAAS,GAAGA,SAAS;UACxB,KAAKryE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGm2E,SAAS,EAAE,EAAEn2E,CAAC,EAAE;YAC9Bi2E,EAAE,CAAC9wE,CAAC,CAACnF,CAAC,CAAC,CAAC3B,GAAG,CAAC6P,CAAC,GAAGkoE,SAAS,CAACp2E,CAAC,CAAC,CAACkO,CAAC,EAAEyE,CAAC,GAAGyjE,SAAS,CAACp2E,CAAC,CAAC,CAAC2S,CAAC,EAAEqB,CAAC,GAAGoiE,SAAS,CAACp2E,CAAC,CAAC,CAACgU,CAAC,CAAC;YACvEi+D,kBAAkB,CAAC,IAAI,CAAC2E,SAAS,EAAEX,EAAE,CAAC9wE,CAAC,CAACnF,CAAC,CAAC,EAAEi2E,EAAE,CAAC3jE,CAAC,CAACtS,CAAC,CAAC,CAAC;UACtD;;UAEA;UACA;UACA;UACA,MAAMs1E,QAAQ,GAAG,IAAI,CAACN,WAAW,CAACiB,EAAE,EAAEvoD,QAAQ,EAAEunD,SAAS,CAAC;UAC1D0B,YAAY,IAAIrB,QAAQ;;UAExB;UACA,KAAKt1E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGs1E,QAAQ,EAAE,EAAEt1E,CAAC,EAAE;YAC7BsqB,OAAO,CAAClmB,IAAI,CAAC,IAAI,CAACsuE,aAAa,GAAG,CAAC,CAAC;YACpCpoD,OAAO,CAAClmB,IAAI,CAAC,IAAI,CAACsuE,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC;YACxCpoD,OAAO,CAAClmB,IAAI,CAAC,IAAI,CAACsuE,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC;YACxC,EAAE,IAAI,CAACA,aAAa;YAEpB4D,YAAY,CAACrB,SAAS,CAACj1E,CAAC,CAAC,CAACgF,CAAC,CAAC;YAC5BsxE,YAAY,CAACrB,SAAS,CAACj1E,CAAC,CAAC,CAAC6S,CAAC,CAAC;YAC5ByjE,YAAY,CAACrB,SAAS,CAACj1E,CAAC,CAAC,CAAC2H,CAAC,CAAC;UAC9B;QACF;MACF;IACF;IAEA,OAAOgvE,YAAY;EACrB;EAEAE,OAAOA,CAACzD,OAAO,EAAE7R,MAAM,EAAE7zC,QAAQ,EAAEgoD,IAAI,EAAE;IACvC,IAAI,CAAC9C,eAAe,GAAGQ,OAAO;IAC9B,IAAI,CAACqD,OAAO,GAAGlV,MAAM;IAErB,IAAI,CAACqV,SAAS,GAAGxD,OAAO,CAAClhB,eAAe,CAAC,CAAC;IAE1C,IAAI,CAACujB,eAAe,CAAC/nD,QAAQ,EAAEgoD,IAAI,EAAE,IAAI,CAACvC,mBAAmB,CAAC,CAAC,CAAC;EAClE;EAEA2D,aAAaA,CAACC,SAAS,EAAEC,QAAQ,EAAE;IACjC,MAAM1sD,OAAO,GAAG,IAAI,CAAC+1C,QAAQ;IAC7B,MAAM4W,UAAU,GAAGl5E,KAAK,CAACsoB,aAAa,CAACs/C,WAAW,EAAEqR,QAAQ,CAAC;IAC7D,KAAK,IAAIh3E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGg3E,QAAQ,EAAE,EAAEh3E,CAAC,EAAE;MACjCsqB,OAAO,CAACtqB,CAAC,CAAC,GAAG+2E,SAAS,CAACzsD,OAAO,CAACtqB,CAAC,CAAC,CAAC;MAClCi3E,UAAU,CAACj3E,CAAC,CAAC,GAAGsqB,OAAO,CAACtqB,CAAC,CAAC;IAC5B;IACA,IAAI,CAACqgE,QAAQ,GAAG4W,UAAU;EAC5B;EAEAC,cAAcA,CAACC,QAAQ,EAAElR,OAAO,EAAE71D,KAAK,EAAE;IACvC,MAAMgnE,YAAY,GAAGr5E,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAEhC,KAAK,GAAG,CAAC,CAAC;IACjE,MAAMinE,UAAU,GAAGt5E,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAEhC,KAAK,GAAG,CAAC,CAAC;IAC/D,KAAK,IAAIpQ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGoQ,KAAK,EAAE,EAAEpQ,CAAC,EAAE;MAC9B,MAAM8xC,GAAG,GAAGqlC,QAAQ,CAACn3E,CAAC,CAAC;MACvBo3E,YAAY,CAACp3E,CAAC,GAAG,CAAC,CAAC,GAAG8xC,GAAG,CAAC5jC,CAAC;MAC3BkpE,YAAY,CAACp3E,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG8xC,GAAG,CAACn/B,CAAC;MAC/BykE,YAAY,CAACp3E,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG8xC,GAAG,CAAC99B,CAAC;MAC/B,MAAMsjE,IAAI,GAAGrR,OAAO,CAACjmE,CAAC,CAAC,CAACqgC,SAAS,CAAC,CAAC;MACnCg3C,UAAU,CAACr3E,CAAC,GAAG,CAAC,CAAC,GAAGs3E,IAAI,CAACppE,CAAC;MAC1BmpE,UAAU,CAACr3E,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAGs3E,IAAI,CAAC3kE,CAAC;MAC9B0kE,UAAU,CAACr3E,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAGs3E,IAAI,CAACtjE,CAAC;IAChC;IACA,IAAI,CAACo5B,SAAS,GAAGgqC,YAAY;IAC7B,IAAI,CAACvS,QAAQ,GAAGwS,UAAU;EAC5B;EAEAE,YAAYA,CAAC7wE,MAAM,EAAEtB,GAAG,EAAE;IACxB,MAAMoyE,OAAO,GAAG,IAAI,CAACnX,QAAQ,CAACpoE,MAAM;IACpC,MAAMk/E,QAAQ,GAAG,IAAI,CAAC/pC,SAAS;IAC/B,MAAM64B,OAAO,GAAG,IAAI,CAACpB,QAAQ;IAC7B,MAAM4S,WAAW,GAAGN,QAAQ,CAACl/E,MAAM,GAAG,CAAC;IACvC,IAAIu/E,OAAO,KAAK,CAAC,IAAIC,WAAW,KAAK,CAAC,EAAE;MACtC;IACF;IACA,MAAMC,IAAI,GAAG35E,KAAK,CAACsoB,aAAa,CAACs/C,WAAW,EAAE8R,WAAW,CAAC;IAC1DC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IACX,IAAIC,MAAM,GAAG,CAAC;IAEd,IAAI33E,CAAC,GAAG,CAAC;IACT,OAAOA,CAAC,GAAGy3E,WAAW,EAAE,EAAEz3E,CAAC,EAAE;MAC3B,MAAMye,KAAK,GAAGk5D,MAAM,GAAGjxE,MAAM,GAAG,CAAC,GAAG,CAAC,GAAGixE,MAAM,GAAGjxE,MAAM;MACvD,MAAMmX,GAAG,GAAGY,KAAK,GAAGrZ,GAAG,GAAGuyE,MAAM,GAAGA,MAAM,GAAGl5D,KAAK,GAAGrZ,GAAG;MACvD,IAAIwyE,YAAY,GAAG,CAAC,CAAC;MAErB,KAAK,IAAIhkE,CAAC,GAAG6K,KAAK,EAAE7K,CAAC,GAAGiK,GAAG,EAAE,EAAEjK,CAAC,EAAE;QAChC,IAAIzT,IAAI,CAACuI,GAAG,CAACyuE,QAAQ,CAACn3E,CAAC,CAAC,GAAGm3E,QAAQ,CAACvjE,CAAC,CAAC,CAAC,GAAGnU,MAAM,CAACs0E,OAAO,EAAE;UACxD6D,YAAY,GAAGhkE,CAAC;UAChB;QACF;MACF;MAEA,IAAIgkE,YAAY,KAAK,CAAC,CAAC,EAAE;QACvBF,IAAI,CAAC13E,CAAC,CAAC,GAAG43E,YAAY;MACxB,CAAC,MAAM;QACLT,QAAQ,CAACQ,MAAM,CAAC,CAACnoE,IAAI,CAAC2nE,QAAQ,CAACn3E,CAAC,CAAC,CAAC;QAClCimE,OAAO,CAAC0R,MAAM,CAAC,CAACnoE,IAAI,CAACy2D,OAAO,CAACjmE,CAAC,CAAC,CAAC;QAChC03E,IAAI,CAAC13E,CAAC,CAAC,GAAG23E,MAAM;QAChB,EAAEA,MAAM;MACV;IACF;IAEA,IAAI,CAACb,aAAa,CAACY,IAAI,EAAEF,OAAO,CAAC;IACjC,IAAI,CAACN,cAAc,CAACC,QAAQ,EAAElR,OAAO,EAAE0R,MAAM,CAAC;EAChD;;EAEA;EACA;EACA;EACA;EACAE,cAAcA,CAACC,QAAQ,EAAEC,OAAO,EAAEC,aAAa,EAAEC,kBAAkB,EAAE;IACnE,IAAIj4E,CAAC;IACL,IAAI2c,GAAG;IACP,MAAMu7D,QAAQ,GAAG,IAAI,CAAC9qC,SAAS,CAACn1C,MAAM,GAAG,CAAC;IAC1C,MAAMk/E,QAAQ,GAAG,IAAI,CAAC/pC,SAAS;IAC/B,MAAMm0B,MAAM,GAAG,IAAI,CAACkV,OAAO;IAC3B,MAAMZ,GAAG,GAAG,IAAI,CAACjD,eAAe,CAAC/gB,aAAa,CAAC,CAAC;IAChD,MAAMsmB,EAAE,GAAGtC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACrB,MAAMuC,EAAE,GAAGvC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACrB,MAAMwC,EAAE,GAAGxC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAErB,MAAMyC,SAAS,GAAGR,QAAQ,CAAC9jB,OAAO,CAAC,CAAC;IACpC,MAAMukB,OAAO,GAAGT,QAAQ,CAAC5jB,UAAU,CAAC,CAAC;IACrC,MAAMskB,OAAO,GAAGV,QAAQ,CAAC3jB,UAAU,CAAC,CAAC;IACrC,MAAMskB,OAAO,GAAGX,QAAQ,CAAC1jB,UAAU,CAAC,CAAC;IAErC,IAAIskB,cAAc;IAClB,IAAIC,WAAW;IACf,IAAIC,WAAW;IACf,IAAIC,WAAW;IAEf,IAAIZ,kBAAkB,KAAK,IAAI,EAAE;MAC/BS,cAAc,GAAGV,aAAa,CAAChkB,OAAO,CAAC,CAAC;MACxC2kB,WAAW,GAAGX,aAAa,CAAC9jB,UAAU,CAAC,CAAC;MACxC0kB,WAAW,GAAGZ,aAAa,CAAC7jB,UAAU,CAAC,CAAC;MACxC0kB,WAAW,GAAGb,aAAa,CAAC5jB,UAAU,CAAC,CAAC;IAC1C;IAEA,MAAM0kB,IAAI,GAAG,GAAG,GAAG,IAAI,CAACjG,MAAM,CAAC3kE,CAAC;IAChC,MAAM6qE,IAAI,GAAG,GAAG,GAAG,IAAI,CAACjG,MAAM,CAACngE,CAAC;IAChC,MAAMqmE,IAAI,GAAG,GAAG,GAAG,IAAI,CAACjG,MAAM,CAAC/+D,CAAC;IAEhC,IAAIilE,UAAU,GAAG,EAAE;IACnB,IAAIC,WAAW,GAAG,EAAE;IACpB,MAAM9U,MAAM,GAAGrmE,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAE8lE,QAAQ,GAAG,CAAC,CAAC;IAE9D,SAASiB,MAAMA,CAACzE,EAAE,EAAE0E,IAAI,EAAEC,IAAI,EAAE1xE,CAAC,EAAE;MACjCA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG+sE,EAAE,IAAI4D,SAAS,CAACc,IAAI,CAAC,GAAG1E,EAAE,GAAG4D,SAAS,CAACe,IAAI,CAAC;MACxD1xE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG+sE,EAAE,IAAI4D,SAAS,CAACc,IAAI,GAAG,CAAC,CAAC,GAAG1E,EAAE,GAAG4D,SAAS,CAACe,IAAI,GAAG,CAAC,CAAC;MAChE1xE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG+sE,EAAE,IAAI4D,SAAS,CAACc,IAAI,GAAG,CAAC,CAAC,GAAG1E,EAAE,GAAG4D,SAAS,CAACe,IAAI,GAAG,CAAC,CAAC;IAClE;IAEA,SAASC,aAAaA,CAACvwB,EAAE,EAAEwwB,KAAK,EAAEC,KAAK,EAAEC,KAAK,EAAE;MAC9C,MAAMz0E,CAAC,GAAG+yE,OAAO,CAAChvB,EAAE,CAAC,CAAC,CAAC;MACvB,IAAI/jD,CAAC,IAAI,IAAI,EAAE;QACbi0E,UAAU,CAACj0E,CAAC,CAACiD,KAAK,CAAC,GAAGjD,CAAC;QACvB,MAAM+N,CAAC,GAAGwmE,KAAK,GAAGC,KAAK,GAAGC,KAAK,GAAGf,cAAc,CAAC3vB,EAAE,CAAC;QACpD,IAAI,OAAOmwB,WAAW,CAACl0E,CAAC,CAACiD,KAAK,CAAC,KAAK,WAAW,EAAE;UAC/CixE,WAAW,CAACl0E,CAAC,CAACiD,KAAK,CAAC,GAAG8K,CAAC;QAC1B,CAAC,MAAM;UACLmmE,WAAW,CAACl0E,CAAC,CAACiD,KAAK,CAAC,IAAI8K,CAAC;QAC3B;MACF;IACF;IAEA,MAAM2kE,IAAI,GAAG35E,KAAK,CAACsoB,aAAa,CAAClU,UAAU,EAAE+lE,QAAQ,CAAC;IACtD,IAAIwB,WAAW,GAAG,CAAC;IAEnB,KAAK15E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGk4E,QAAQ,EAAEl4E,CAAC,EAAE,EAAE;MAC7B,MAAM25E,GAAG,GAAG35E,CAAC,GAAG,CAAC;MACjB,MAAMwpE,EAAE,GAAG,CAAC2N,QAAQ,CAACwC,GAAG,CAAC,GAAGpY,MAAM,CAACrzD,CAAC,IAAI4qE,IAAI;MAC5C,MAAMrP,EAAE,GAAG,CAAC0N,QAAQ,CAACwC,GAAG,GAAG,CAAC,CAAC,GAAGpY,MAAM,CAAC5uD,CAAC,IAAIomE,IAAI;MAChD,MAAMrP,EAAE,GAAG,CAACyN,QAAQ,CAACwC,GAAG,GAAG,CAAC,CAAC,GAAGpY,MAAM,CAACvtD,CAAC,IAAIglE,IAAI;MAChD,MAAM9qE,CAAC,GAAG/N,IAAI,CAACuM,GAAG,CAACvM,IAAI,CAACsM,GAAG,CAAC+8D,EAAE,EAAE,CAAC,CAAC,EAAE2O,EAAE,CAAC,GAAG,CAAC;MAC3C,MAAMxlE,CAAC,GAAGxS,IAAI,CAACuM,GAAG,CAACvM,IAAI,CAACsM,GAAG,CAACg9D,EAAE,EAAE,CAAC,CAAC,EAAE2O,EAAE,CAAC,GAAG,CAAC;MAC3C,MAAMpkE,CAAC,GAAG7T,IAAI,CAACuM,GAAG,CAACvM,IAAI,CAACsM,GAAG,CAACi9D,EAAE,EAAE,CAAC,CAAC,EAAE2O,EAAE,CAAC,GAAG,CAAC;MAE3C,MAAMuB,GAAG,GAAIpQ,EAAE,GAAGt7D,CAAE;MACpB,MAAM2rE,GAAG,GAAIpQ,EAAE,GAAG92D,CAAE;MACpB,MAAMmnE,GAAG,GAAIpQ,EAAE,GAAG11D,CAAE;MAEpB,IAAIikE,kBAAkB,IAAI,IAAI,EAAE;QAC9B;QACAgB,UAAU,GAAG,EAAE;QACfC,WAAW,GAAG,EAAE;QAChBv8D,GAAG,GAAGq7D,aAAa,CAAC/jB,YAAY,CAAC/lD,CAAC,EAAEyE,CAAC,EAAEqB,CAAC,CAAC;QACzCslE,aAAa,CAAC38D,GAAG,EAAE,CAAC,GAAGi9D,GAAG,EAAE,CAAC,GAAGC,GAAG,EAAE,CAAC,GAAGC,GAAG,CAAC;QAC7CR,aAAa,CAAC38D,GAAG,GAAGg8D,WAAW,EAAEiB,GAAG,EAAE,CAAC,GAAGC,GAAG,EAAE,CAAC,GAAGC,GAAG,CAAC;QACvDR,aAAa,CAAC38D,GAAG,GAAGi8D,WAAW,EAAE,CAAC,GAAGgB,GAAG,EAAEC,GAAG,EAAE,CAAC,GAAGC,GAAG,CAAC;QACvDR,aAAa,CAAC38D,GAAG,GAAGg8D,WAAW,GAAGC,WAAW,EAAEgB,GAAG,EAAEC,GAAG,EAAE,CAAC,GAAGC,GAAG,CAAC;QACjER,aAAa,CAAC38D,GAAG,GAAGk8D,WAAW,EAAE,CAAC,GAAGe,GAAG,EAAE,CAAC,GAAGC,GAAG,EAAEC,GAAG,CAAC;QACvDR,aAAa,CAAC38D,GAAG,GAAGg8D,WAAW,GAAGE,WAAW,EAAEe,GAAG,EAAE,CAAC,GAAGC,GAAG,EAAEC,GAAG,CAAC;QACjER,aAAa,CAAC38D,GAAG,GAAGi8D,WAAW,GAAGC,WAAW,EAAE,CAAC,GAAGe,GAAG,EAAEC,GAAG,EAAEC,GAAG,CAAC;QACjER,aAAa,CAAC38D,GAAG,GAAGg8D,WAAW,GAAGC,WAAW,GAAGC,WAAW,EAAEe,GAAG,EAAEC,GAAG,EAAEC,GAAG,CAAC;;QAE3E;QACA,IAAIC,SAAS,GAAG,GAAG;QACnB,IAAIC,WAAW,GAAG,CAAC,CAAC;QACpB,KAAK,MAAMC,OAAO,IAAIf,WAAW,EAAE;UACjC,IAAIA,WAAW,CAACe,OAAO,CAAC,GAAGF,SAAS,EAAE;YACpCC,WAAW,GAAGC,OAAO;YACrBF,SAAS,GAAGb,WAAW,CAACe,OAAO,CAAC;UAClC;QACF;QAEA,IAAID,WAAW,GAAG,CAAC,IAAI,CAAC/B,kBAAkB,CAAClpC,YAAY,CAACkqC,UAAU,CAACe,WAAW,CAAC,CAAC,EAAE;UAChF;UACAtC,IAAI,CAAC13E,CAAC,CAAC,GAAG,CAAC,CAAC;UACZ;QACF;MACF;MAEA03E,IAAI,CAAC13E,CAAC,CAAC,GAAG05E,WAAW,EAAE;;MAEvB;MACA,MAAM7qD,EAAE,GAAI3gB,CAAC,GAAGiqE,EAAE,GAAII,OAAO,GAAG,CAAC;MACjC,MAAMzpD,EAAE,GAAInc,CAAC,GAAGylE,EAAE,GAAII,OAAO,GAAG,CAAC;MACjC,MAAMzpD,EAAE,GAAI/a,CAAC,GAAGqkE,EAAE,GAAII,OAAO,GAAG,CAAC;MAEjC,MAAMyB,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MACpB,MAAMC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MACpB,MAAMC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MACpB,MAAMC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MAEpB19D,GAAG,GAAGm7D,QAAQ,CAAC7jB,YAAY,CAAC/lD,CAAC,EAAEyE,CAAC,EAAEqB,CAAC,CAAC;MACpCmlE,MAAM,CAACS,GAAG,EAAEj9D,GAAG,EAAEA,GAAG,GAAGkS,EAAE,EAAEqrD,EAAE,CAAC;MAC9Bf,MAAM,CAACS,GAAG,EAAEj9D,GAAG,GAAGmS,EAAE,EAAEnS,GAAG,GAAGkS,EAAE,GAAGC,EAAE,EAAEqrD,EAAE,CAAC;MACxChB,MAAM,CAACS,GAAG,EAAEj9D,GAAG,GAAGoS,EAAE,EAAEpS,GAAG,GAAGkS,EAAE,GAAGE,EAAE,EAAEqrD,EAAE,CAAC;MACxCjB,MAAM,CAACS,GAAG,EAAEj9D,GAAG,GAAGmS,EAAE,GAAGC,EAAE,EAAEpS,GAAG,GAAGkS,EAAE,GAAGC,EAAE,GAAGC,EAAE,EAAEsrD,EAAE,CAAC;MAElD,MAAMC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MACrBA,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGT,GAAG,IAAIK,EAAE,CAAC,CAAC,CAAC,GAAGL,GAAG,GAAGM,EAAE,CAAC,CAAC,CAAC;MACxCG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGT,GAAG,IAAIK,EAAE,CAAC,CAAC,CAAC,GAAGL,GAAG,GAAGM,EAAE,CAAC,CAAC,CAAC;MACxCG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGT,GAAG,IAAIK,EAAE,CAAC,CAAC,CAAC,GAAGL,GAAG,GAAGM,EAAE,CAAC,CAAC,CAAC;MAExC,MAAMI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MACrBA,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGV,GAAG,IAAIO,EAAE,CAAC,CAAC,CAAC,GAAGP,GAAG,GAAGQ,EAAE,CAAC,CAAC,CAAC;MACxCE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGV,GAAG,IAAIO,EAAE,CAAC,CAAC,CAAC,GAAGP,GAAG,GAAGQ,EAAE,CAAC,CAAC,CAAC;MACxCE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGV,GAAG,IAAIO,EAAE,CAAC,CAAC,CAAC,GAAGP,GAAG,GAAGQ,EAAE,CAAC,CAAC,CAAC;MAExCjW,MAAM,CAACuV,GAAG,CAAC,GAAG,CAAC,CAAC,GAAGG,GAAG,IAAIQ,GAAG,CAAC,CAAC,CAAC,GAAGR,GAAG,GAAGS,GAAG,CAAC,CAAC,CAAC;MAC/CnW,MAAM,CAACuV,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGG,GAAG,IAAIQ,GAAG,CAAC,CAAC,CAAC,GAAGR,GAAG,GAAGS,GAAG,CAAC,CAAC,CAAC;MACnDnW,MAAM,CAACuV,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGG,GAAG,IAAIQ,GAAG,CAAC,CAAC,CAAC,GAAGR,GAAG,GAAGS,GAAG,CAAC,CAAC,CAAC;IACrD;IACA,IAAI,CAACtX,OAAO,GAAGmB,MAAM;IAErB,IAAI6T,kBAAkB,IAAI,IAAI,EAAE;MAC9B;MACA,KAAKj4E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGk4E,QAAQ,EAAE,EAAEl4E,CAAC,EAAE;QAC7B,MAAM4T,CAAC,GAAG8jE,IAAI,CAAC13E,CAAC,CAAC;QACjB,IAAI4T,CAAC,GAAG,CAAC,EAAE;UACT;QACF;;QAEA;QACA,IAAI,CAACw5B,SAAS,CAACx5B,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAACw5B,SAAS,CAACptC,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAACotC,SAAS,CAACx5B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAACw5B,SAAS,CAACptC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,CAACotC,SAAS,CAACx5B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAACw5B,SAAS,CAACptC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC6kE,QAAQ,CAACjxD,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAACixD,QAAQ,CAAC7kE,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC6kE,QAAQ,CAACjxD,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAACixD,QAAQ,CAAC7kE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC6kE,QAAQ,CAACjxD,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAACixD,QAAQ,CAAC7kE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnD,IAAI,CAACijE,OAAO,CAACrvD,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAACqvD,OAAO,CAACjjE,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAACijE,OAAO,CAACrvD,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAACqvD,OAAO,CAACjjE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,CAACijE,OAAO,CAACrvD,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAACqvD,OAAO,CAACjjE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;MACnD;;MAEA;MACA,MAAMw6E,YAAY,GAAG,IAAI,CAACna,QAAQ,CAACpoE,MAAM,GAAG,CAAC;MAC7C,IAAIwiF,WAAW,GAAG,CAAC;MACnB,KAAKz6E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGw6E,YAAY,EAAE,EAAEx6E,CAAC,EAAE;QACjC,MAAM06E,EAAE,GAAGhD,IAAI,CAAC,IAAI,CAACrX,QAAQ,CAAC,CAAC,GAAGrgE,CAAC,CAAC,CAAC;QACrC,MAAMk8C,EAAE,GAAGw7B,IAAI,CAAC,IAAI,CAACrX,QAAQ,CAAC,CAAC,GAAGrgE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,MAAMm8C,EAAE,GAAGu7B,IAAI,CAAC,IAAI,CAACrX,QAAQ,CAAC,CAAC,GAAGrgE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI06E,EAAE,IAAI,CAAC,IAAIx+B,EAAE,IAAI,CAAC,IAAIC,EAAE,IAAI,CAAC,EAAE;UACjC,IAAI,CAACkkB,QAAQ,CAAC,CAAC,GAAGoa,WAAW,CAAC,GAAGC,EAAE;UACnC,IAAI,CAACra,QAAQ,CAAC,CAAC,GAAGoa,WAAW,GAAG,CAAC,CAAC,GAAGv+B,EAAE;UACvC,IAAI,CAACmkB,QAAQ,CAAC,CAAC,GAAGoa,WAAW,GAAG,CAAC,CAAC,GAAGt+B,EAAE;UACvC,EAAEs+B,WAAW;QACf;MACF;;MAEA;MACA,IAAI,CAACrtC,SAAS,GAAG,IAAIh7B,YAAY,CAAC,IAAI,CAACg7B,SAAS,CAAC77B,MAAM,CAAC7N,KAAK,CAAC,CAAC,EAAEg2E,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;MACtF,IAAI,CAAC7U,QAAQ,GAAG,IAAIzyD,YAAY,CAAC,IAAI,CAACyyD,QAAQ,CAACtzD,MAAM,CAAC7N,KAAK,CAAC,CAAC,EAAEg2E,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;MACpF,IAAI,CAACzW,OAAO,GAAG,IAAI7wD,YAAY,CAAC,IAAI,CAAC6wD,OAAO,CAAC1xD,MAAM,CAAC7N,KAAK,CAAC,CAAC,EAAEg2E,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;MAClF,IAAI,CAACrZ,QAAQ,GAAG,IAAIsF,WAAW,CAAC,IAAI,CAACtF,QAAQ,CAAC9uD,MAAM,CAAC7N,KAAK,CAAC,CAAC,EAAE+2E,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACrF;EACF;EAEAE,MAAMA,CAAA,EAAG;IACP,MAAMle,GAAG,GAAG,IAAIl8B,wGAAoB,CAAC,CAAC;IACtCk8B,GAAG,CAACqJ,QAAQ,CAAC,IAAIvlC,yGAAqB,CAAC,IAAI,CAAC8/B,QAAQ,EAAE,CAAC,CAAC,CAAC;IACzD5D,GAAG,CAACxgD,YAAY,CAAC,UAAU,EAAE,IAAIskB,yGAAqB,CAAC,IAAI,CAAC6M,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1EqvB,GAAG,CAACxgD,YAAY,CAAC,QAAQ,EAAE,IAAIskB,yGAAqB,CAAC,IAAI,CAACskC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACvEpI,GAAG,CAACxgD,YAAY,CAAC,OAAO,EAAE,IAAIskB,yGAAqB,CAAC,IAAI,CAAC0iC,OAAO,EAAE,CAAC,CAAC,CAAC;IACrExG,GAAG,CAACoF,qBAAqB,CAAC,CAAC;IAC3B,OAAOpF,GAAG;EACZ;AACF;AACA,4DAAegW,UAAU,E;;ACrnBM;AACuB;AAChB;AACN;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMmI,qBAAqB,SAASxJ,6BAAkB,CAAC;EACrDzuB,MAAMA,CAAA,EAAG;IACP,MAAMliD,MAAM,GAAG,IAAI,CAAC4wE,KAAK;IACzB,IAAI,CAAC/xB,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAChC,IAAI,CAACg0B,KAAK,GAAG,IAAI/yC,iGAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC7C,IAAI,CAACgzC,KAAK,GAAG,IAAIhzC,iGAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC7C,IAAI,CAACizC,KAAK,GAAG,IAAIjzC,iGAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAE7C,IAAI,CAACghC,MAAM,GAAG,IAAIhhC,iGAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAC9C,IAAI,CAACs6C,mBAAmB,GAAGp6E,MAAM,CAACw3E,kBAAkB;IAEpD,IAAI,CAAC6C,YAAY,CAACr6E,MAAM,CAAC;EAC3B;EAEAs6E,WAAWA,CAACC,WAAW,EAAE;IACvB,MAAMzwD,QAAQ,GAAG,CAAC;IAClB,MAAM0wD,UAAU,GAAGD,WAAW,CAAC/iF,MAAM,GAAGsyB,QAAQ;IAChD,MAAM2wD,SAAS,GAAG,CAACF,WAAW,CAAC,CAAC,CAAC,EAAEA,WAAW,CAAC,CAAC,CAAC,EAAEA,WAAW,CAAC,CAAC,CAAC,EAAEA,WAAW,CAAC,CAAC,CAAC,CAAC;IAClF,MAAMG,SAAS,GAAG,CAACH,WAAW,CAAC,CAAC,CAAC,EAAEA,WAAW,CAAC,CAAC,CAAC,EAAEA,WAAW,CAAC,CAAC,CAAC,EAAEA,WAAW,CAAC,CAAC,CAAC,CAAC;IAClF,KAAK,IAAIh7E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGi7E,UAAU,EAAE,EAAEj7E,CAAC,EAAE;MACnC,MAAM25E,GAAG,GAAG35E,CAAC,GAAGuqB,QAAQ;MAExB,KAAK,IAAIo4C,OAAO,GAAG,CAAC,EAAEA,OAAO,GAAGp4C,QAAQ,EAAE,EAAEo4C,OAAO,EAAE;QACnD,MAAMyY,MAAM,GAAGJ,WAAW,CAACrB,GAAG,GAAGhX,OAAO,CAAC;QACzCuY,SAAS,CAACvY,OAAO,CAAC,GAAGxiE,IAAI,CAACsM,GAAG,CAAC2uE,MAAM,EAAEF,SAAS,CAACvY,OAAO,CAAC,CAAC;QACzDwY,SAAS,CAACxY,OAAO,CAAC,GAAGxiE,IAAI,CAACuM,GAAG,CAAC0uE,MAAM,EAAED,SAAS,CAACxY,OAAO,CAAC,CAAC;MAC3D;IACF;IACA,OAAO;MAAEuY,SAAS;MAAEC;IAAU,CAAC;EACjC;EAEAE,cAAcA,CAACL,WAAW,EAAEv6E,MAAM,EAAE;IAClC,MAAM;MAAE6+C;IAAU,CAAC,GAAG,IAAI;IAC1B,MAAMg8B,YAAY,GAAG,IAAI,CAACP,WAAW,CAACC,WAAW,CAAC;IAClD,MAAMO,WAAW,GAAGD,YAAY,CAACH,SAAS;IAC1C,MAAMK,WAAW,GAAGF,YAAY,CAACJ,SAAS;;IAE1C;IACA,IAAIK,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE;MACxB96E,MAAM,CAACmtB,WAAW,IAAI2tD,WAAW,CAAC,CAAC,CAAC;IACtC;IAEA,IAAIE,WAAW,GAAGh7E,MAAM,CAACi7E,QAAQ,GAAGF,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG;IACxD,IAAIG,MAAM,GAAGF,WAAW;IACxBE,MAAM,GAAG,IAAI,GAAGx7E,IAAI,CAAC8xC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG9xC,IAAI,CAACC,EAAE,GAAGu7E,MAAM,GAAGA,MAAM,GAAGA,MAAM,CAAC;IACzEF,WAAW,GAAGt7E,IAAI,CAACsM,GAAG,CAACgvE,WAAW,EAAEE,MAAM,CAAC;IAE3C,IAAI37E,CAAC,GAAG,CAAC;IACT,OAAOA,CAAC,GAAG,CAAC,EAAE,EAAEA,CAAC,EAAE;MACjBu7E,WAAW,CAACv7E,CAAC,CAAC,IAAIy7E,WAAW;MAC7BD,WAAW,CAACx7E,CAAC,CAAC,IAAIy7E,WAAW;IAC/B;IAEA,KAAKz7E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAE,EAAEA,CAAC,EAAE;MACtBs/C,SAAS,CAACt/C,CAAC,CAAC,GAAGG,IAAI,CAAC8S,IAAI,CAAC,CAACuoE,WAAW,CAACx7E,CAAC,CAAC,GAAGu7E,WAAW,CAACv7E,CAAC,CAAC,IAAIS,MAAM,CAACmtB,WAAW,CAAC;IAClF;IACA,IAAI,CAAC0lD,KAAK,CAACplE,CAAC,GAAG,CAACoxC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI7+C,MAAM,CAACmtB,WAAW;IACtD,IAAI,CAAC2lD,KAAK,CAAC5gE,CAAC,GAAG,CAAC2sC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI7+C,MAAM,CAACmtB,WAAW;IACtD,IAAI,CAAC4lD,KAAK,CAACx/D,CAAC,GAAG,CAACsrC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI7+C,MAAM,CAACmtB,WAAW;IAEtD,CAAC,IAAI,CAAC2zC,MAAM,CAACrzD,CAAC,EAAE,IAAI,CAACqzD,MAAM,CAAC5uD,CAAC,EAAE,IAAI,CAAC4uD,MAAM,CAACvtD,CAAC,CAAC,GAAGunE,WAAW;IAE3D,OAAO;MAAEK,IAAI,EAAEN,YAAY;MAAEzF,GAAG,EAAEv2B;IAAU,CAAC;EAC/C;EAEAu8B,YAAYA,CAACC,OAAO,EAAEr7E,MAAM,EAAE;IAC5B,MAAMs7E,OAAO,GAAG,IAAItJ,qBAAU,CAAC,CAAC;IAChCsJ,OAAO,CAAClF,OAAO,CAACiF,OAAO,CAACtpB,MAAM,EAAE,IAAI,CAAC+O,MAAM,EAAE9gE,MAAM,CAACitB,QAAQ,EAAE,CAAC,CAAC;IAChEquD,OAAO,CAACxE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;IAE3B,IAAIwE,OAAO,CAACrJ,aAAa,GAAG,CAAC,EAAE;MAC7BqJ,OAAO,CAAClE,cAAc,CAACiE,OAAO,CAACE,SAAS,EAAEF,OAAO,CAAC/D,OAAO,EAAE+D,OAAO,CAAC9D,aAAa,EAAE,IAAI,CAAC6C,mBAAmB,CAAC;MAC3G,IAAI,CAAC/U,QAAQ,CAAC,IAAIvlC,yGAAqB,CAACw7C,OAAO,CAAC1b,QAAQ,EAAE,CAAC,CAAC,CAAC;MAC7D,IAAI,CAACpkD,YAAY,CAAC,UAAU,EAAE,IAAIskB,yGAAqB,CAACw7C,OAAO,CAAC3uC,SAAS,EAAE,CAAC,CAAC,CAAC;MAC9E,IAAI,CAACnxB,YAAY,CAAC,QAAQ,EAAE,IAAIskB,yGAAqB,CAACw7C,OAAO,CAAClX,QAAQ,EAAE,CAAC,CAAC,CAAC;MAC3E,IAAI,CAAC5oD,YAAY,CAAC,OAAO,EAAE,IAAIskB,yGAAqB,CAACw7C,OAAO,CAAC9Y,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC,MAAM;MAAE;MACP,IAAI,CAAChnD,YAAY,CAAC,UAAU,EAAE,IAAIskB,yGAAqB,CAACxiC,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnG;EACF;EAEA0oE,YAAYA,CAACr6E,MAAM,EAAE;IACnB,MAAMw7E,YAAY,GAAG;MACnB1K,MAAM,EAAE,IAAI,CAACD,OAAO;MACpBlN,MAAM,EAAE,IAAI,CAACnB,OAAO;MACpBniC,KAAK,EAAE,IAAI,CAACuwC,KAAK,CAACvwC;IACpB,CAAC;IAED,IAAIm7C,YAAY,CAAC1K,MAAM,CAACt5E,MAAM,KAAK,CAAC,EAAE;MACpC;IACF;IACA,MAAM68C,UAAU,GAAG,IAAI,CAACumC,cAAc,CAACY,YAAY,CAAC1K,MAAM,EAAE9wE,MAAM,CAAC;IAEnE,MAAMo+C,GAAG,GAAG,IAAIte,8FAAU,CACxB,IAAI,CAACghC,MAAM,EACX,IAAIhhC,iGAAa,CAAC,IAAI,CAAC+yC,KAAK,CAACplE,CAAC,EAAE,IAAI,CAACqlE,KAAK,CAAC5gE,CAAC,EAAE,IAAI,CAAC6gE,KAAK,CAACx/D,CAAC,CAAC,CAAC7S,GAAG,CAAC,IAAI,CAACogE,MAAM,CAC7E,CAAC;IACD,MAAMua,OAAO,GAAG,IAAI,CAACI,eAAe,CAACD,YAAY,EAAEp9B,GAAG,EAAE/J,UAAU,EAAEr0C,MAAM,CAAC;IAE3E,IAAI,CAACo7E,YAAY,CAACC,OAAO,EAAEr7E,MAAM,CAAC;EACpC;AACF;AAEA,uEAAem6E,qBAAqB,E;;ACnHwB;AAC9B;AAE9B,MAAM;EAAE/pB,MAAMA,0BAAAA;AAAC,CAAC,GAAGsrB,IAAI;;AAEvB;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,iBAAiB,SAASxB,gCAAqB,CAAC;EACpDsB,eAAeA,CAACD,YAAY,EAAEp9B,GAAG,EAAE/J,UAAU,EAAEr0C,MAAM,EAAE;IACrD;IACA,IAAI,CAAC47E,cAAc,CAACJ,YAAY,CAAC1K,MAAM,CAAC;IAExC,MAAMuK,OAAO,GAAG;MACdtpB,MAAM,EAAE,IAAI3B,wBAAM,CAACz+C,YAAY,EAAE,IAAI,CAACktC,SAAS,EAAET,GAAG,CAAC;MACrDm9B,SAAS,EAAE,IAAInrB,wBAAM,CAACz+C,YAAY,EAAE,IAAI,CAACktC,SAAS,EAAET,GAAG,EAAE,CAAC;IAC5D,CAAC;IAED,IAAI,IAAI,CAACg8B,mBAAmB,IAAI,IAAI,EAAE;MACpCiB,OAAO,CAAC/D,OAAO,GAAG,EAAE;MACpB+D,OAAO,CAAC9D,aAAa,GAAG,IAAInnB,wBAAM,CAACz+C,YAAY,EAAE,IAAI,CAACktC,SAAS,EAAET,GAAG,CAAC;IACvE;IAEA,IAAI,CAACy9B,YAAY,CAACR,OAAO,EAAEG,YAAY,EAAE,IAAI,EAAEx7E,MAAM,CAAC;IACtD,OAAOq7E,OAAO;EAChB;EAEAQ,YAAYA,CAACR,OAAO,EAAEG,YAAY,EAAEM,SAAS,EAAE97E,MAAM,EAAE;IACrD,MAAM42C,QAAQ,GAAG4kC,YAAY,CAAC1K,MAAM,CAACt5E,MAAM,GAAG,CAAC;IAC/C,MAAM;MAAEs5E,MAAM;MAAEnN;IAAO,CAAC,GAAG6X,YAAY;IACvC,MAAM;MAAE38B;IAAU,CAAC,GAAG,IAAI;IAC1B,MAAM;MAAEo8B,QAAQ;MAAE/tD,QAAQ;MAAEC;IAAY,CAAC,GAAGntB,MAAM;IAClD,MAAM+7E,WAAW,GAAG,GAAG,GAAG/7E,MAAM,CAACitB,QAAQ;IACzC,MAAM+uD,cAAc,GAAG,GAAG,GAAG7uD,WAAW;IACxC,MAAM8uD,SAAS,GAAGp9B,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IAClC,MAAMq9B,SAAS,GAAGr9B,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IAClC,MAAMs9B,SAAS,GAAGt9B,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IAClC;;IAEA,MAAM;MAAEkT,MAAM;MAAEwpB;IAAU,CAAC,GAAGF,OAAO;IACrC,MAAM1I,OAAO,GAAG5gB,MAAM,CAACwB,OAAO,CAAC,CAAC;IAChC,MAAMukB,OAAO,GAAG/lB,MAAM,CAAC0B,UAAU,CAAC,CAAC;IAEnC,MAAM2oB,UAAU,GAAGb,SAAS,CAAChoB,OAAO,CAAC,CAAC;IACtC,MAAM8oB,UAAU,GAAGd,SAAS,CAAC9nB,UAAU,CAAC,CAAC;IAEzC,IAAIwkB,cAAc;IAClB,IAAI,IAAI,CAACmC,mBAAmB,IAAI,IAAI,EAAE;MACpCnC,cAAc,GAAGoD,OAAO,CAAC9D,aAAa,CAAChkB,OAAO,CAAC,CAAC;IAClD;IAEA,MAAM;MAAE+jB;IAAQ,CAAC,GAAG+D,OAAO;IAE3B,KAAK,IAAI97E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGq3C,QAAQ,EAAE,EAAEr3C,CAAC,EAAE;MACjC,MAAM25E,GAAG,GAAG35E,CAAC,GAAG,CAAC;MACjB,MAAM+8E,SAAS,GAAGxL,MAAM,CAACoI,GAAG,GAAG,CAAC,CAAC,GAAG+B,QAAQ;MAC5C,MAAMsB,eAAe,GAAGT,SAAS,KAAK,IAAI,GAAG,GAAG,GAAGA,SAAS,CAACv8E,CAAC,CAAC;MAC/D,MAAMi9E,MAAM,GAAG,CAAC,IAAI,CAAC,GAAGF,SAAS,GAAGA,SAAS,CAAC;MAC9C,IAAIG,MAAM,GAAGvvD,QAAQ,GAAGovD,SAAS;MACjC,MAAMI,OAAO,GAAGD,MAAM,GAAGA,MAAM;MAC/BA,MAAM,IAAIT,cAAc;MAExB,IAAI7I,GAAG,GAAGrC,MAAM,CAACoI,GAAG,CAAC,GAAG8C,cAAc;MACtC,MAAMW,IAAI,GAAGj9E,IAAI,CAACsM,GAAG,CAAEmnE,GAAG,GAAGsJ,MAAM,GAAI,CAAC,EAAE,CAAC,CAAC;MAC5C,MAAMG,IAAI,GAAGl9E,IAAI,CAACuM,GAAG,CAAEknE,GAAG,GAAGsJ,MAAM,GAAI,CAAC,EAAER,SAAS,CAAC;MACpD9I,GAAG,GAAGrC,MAAM,CAACoI,GAAG,GAAG,CAAC,CAAC,GAAG8C,cAAc;MACtC,MAAMn+B,IAAI,GAAGn+C,IAAI,CAACsM,GAAG,CAAEmnE,GAAG,GAAGsJ,MAAM,GAAI,CAAC,EAAE,CAAC,CAAC;MAC5C,MAAM3+B,IAAI,GAAGp+C,IAAI,CAACuM,GAAG,CAAEknE,GAAG,GAAGsJ,MAAM,GAAI,CAAC,EAAEP,SAAS,CAAC;MACpD/I,GAAG,GAAGrC,MAAM,CAACoI,GAAG,GAAG,CAAC,CAAC,GAAG8C,cAAc;MACtC,MAAM5+B,IAAI,GAAG19C,IAAI,CAACsM,GAAG,CAAEmnE,GAAG,GAAGsJ,MAAM,GAAI,CAAC,EAAE,CAAC,CAAC;MAC5C,MAAMp/B,IAAI,GAAG39C,IAAI,CAACuM,GAAG,CAAEknE,GAAG,GAAGsJ,MAAM,GAAI,CAAC,EAAEN,SAAS,CAAC;MAEpD,IAAI7tD,EAAE,GAAG8uB,IAAI,GAAGjwB,WAAW,GAAG2jD,MAAM,CAACoI,GAAG,GAAG,CAAC,CAAC;MAC7C,KAAK,IAAI3lE,CAAC,GAAG6pC,IAAI,EAAE7pC,CAAC,IAAI8pC,IAAI,EAAE,EAAE9pC,CAAC,EAAE+a,EAAE,IAAInB,WAAW,EAAE;QACpD,IAAIkB,EAAE,GAAGwvB,IAAI,GAAG1wB,WAAW,GAAG2jD,MAAM,CAACoI,GAAG,GAAG,CAAC,CAAC;QAC7C,KAAK,IAAIhnE,CAAC,GAAG2rC,IAAI,EAAE3rC,CAAC,IAAI4rC,IAAI,EAAE,EAAE5rC,CAAC,EAAEmc,EAAE,IAAIlB,WAAW,EAAE;UACpD,MAAM0vD,MAAM,GAAGxuD,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE;UAEhC,IAAIuuD,MAAM,IAAIH,OAAO,EAAE;YACrB;UACF;UAEA,IAAII,IAAI,GAAG/qB,MAAM,CAACyB,YAAY,CAACmpB,IAAI,EAAEzqE,CAAC,EAAEqB,CAAC,CAAC;UAC1C,IAAIwpE,OAAO,GAAGxB,SAAS,CAAC/nB,YAAY,CAACmpB,IAAI,EAAEzqE,CAAC,EAAEqB,CAAC,CAAC;UAChD,IAAI6a,EAAE,GAAGuuD,IAAI,GAAGxvD,WAAW,GAAG2jD,MAAM,CAACoI,GAAG,CAAC;UACzC,KAAK,IAAIzrE,CAAC,GAAGkvE,IAAI,EAAElvE,CAAC,IAAImvE,IAAI,EAAE,EAAEnvE,CAAC,EAAE2gB,EAAE,IAAIjB,WAAW,EAAE2vD,IAAI,IAAIhF,OAAO,EAAEiF,OAAO,IAAIV,UAAU,EAAE;YAC5F,MAAMt7B,EAAE,GAAG3yB,EAAE,GAAGA,EAAE,GAAGyuD,MAAM;YAC3B,MAAMG,MAAM,GAAG,CAACj8B,EAAE,GAAGy7B,MAAM;YAE3B,IAAIS,OAAO,GAAGv9E,IAAI,CAACw9E,GAAG,CAACF,MAAM,CAAC,GAAGT,eAAe;;YAEhD;YACA,IAAI,IAAI,CAACnC,mBAAmB,IAAI,IAAI,IAC/B6C,OAAO,GAAGhF,cAAc,CAAC6E,IAAI,CAAC,EAAE;cAAE;cACrC7E,cAAc,CAAC6E,IAAI,CAAC,GAAGG,OAAO;cAC9B;cACA3F,OAAO,CAACwF,IAAI,CAAC,GAAGtB,YAAY,CAACn7C,KAAK,CAAC9gC,CAAC,CAAC;YACvC;YAEAozE,OAAO,CAACmK,IAAI,CAAC,IAAIG,OAAO;;YAExB;YACAA,OAAO,IAAIlB,WAAW;YACtB,MAAMoB,MAAM,GAAG59E,CAAC,GAAG,CAAC;YACpB68E,UAAU,CAACW,OAAO,CAAC,IAAIE,OAAO,GAAGtZ,MAAM,CAACwZ,MAAM,CAAC;YAC/Cf,UAAU,CAACW,OAAO,GAAG,CAAC,CAAC,IAAIE,OAAO,GAAGtZ,MAAM,CAACwZ,MAAM,GAAG,CAAC,CAAC;YACvDf,UAAU,CAACW,OAAO,GAAG,CAAC,CAAC,IAAIE,OAAO,GAAGtZ,MAAM,CAACwZ,MAAM,GAAG,CAAC,CAAC;UACzD;QACF;MACF;IACF;EACF;EAEAvB,cAAcA,CAACrB,WAAW,EAAE;IAC1B,MAAM6C,OAAO,GAAG,IAAI,CAACtc,MAAM,CAACrzD,CAAC;IAC7B,MAAM4vE,OAAO,GAAG,IAAI,CAACvc,MAAM,CAAC5uD,CAAC;IAC7B,MAAMorE,OAAO,GAAG,IAAI,CAACxc,MAAM,CAACvtD,CAAC;IAE7B,MAAMuW,QAAQ,GAAG,CAAC;IAClB,MAAM0wD,UAAU,GAAGD,WAAW,CAAC/iF,MAAM,GAAGsyB,QAAQ;IAChD,KAAK,IAAIvqB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGi7E,UAAU,EAAE,EAAEj7E,CAAC,EAAE;MACnC,MAAM25E,GAAG,GAAG35E,CAAC,GAAGuqB,QAAQ;MAExBywD,WAAW,CAACrB,GAAG,CAAC,IAAIkE,OAAO;MAC3B7C,WAAW,CAACrB,GAAG,GAAG,CAAC,CAAC,IAAImE,OAAO;MAC/B9C,WAAW,CAACrB,GAAG,GAAG,CAAC,CAAC,IAAIoE,OAAO;IACjC;EACF;AACF;AAEA,mEAAe3B,iBAAiB,E;;ACtID;AACC;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS4B,MAAMA,CAACzM,MAAM,EAAE7kE,GAAG,EAAED,GAAG,EAAEwxE,WAAW,EAAE;EAC7C,MAAM1zD,QAAQ,GAAG,CAAC;EAClB,MAAMgvB,MAAM,GAAGg4B,MAAM,CAACt5E,MAAM,GAAGsyB,QAAQ;EAEvC,MAAM2zD,IAAI,GAAGxxE,GAAG,CAAC,CAAC,CAAC;EACnB,MAAMyxE,IAAI,GAAGzxE,GAAG,CAAC,CAAC,CAAC;EACnB,MAAM0xE,IAAI,GAAG1xE,GAAG,CAAC,CAAC,CAAC;EAEnB,MAAM2xE,IAAI,GAAG5xE,GAAG,CAAC,CAAC,CAAC;EACnB,MAAM6xE,IAAI,GAAG7xE,GAAG,CAAC,CAAC,CAAC;EACnB,MAAM8xE,IAAI,GAAG9xE,GAAG,CAAC,CAAC,CAAC;EAEnB,SAAS+xE,QAAQA,CAACzrE,CAAC,EAAE0rE,IAAI,EAAE;IACzB,OAAOt+E,IAAI,CAACyN,KAAK,CAAC,CAACmF,CAAC,GAAG0rE,IAAI,IAAIR,WAAW,CAAC;EAC7C;EAEA,MAAMS,IAAI,GAAGF,QAAQ,CAACH,IAAI,EAAEH,IAAI,CAAC,GAAG,CAAC;EACrC,MAAMS,IAAI,GAAGH,QAAQ,CAACF,IAAI,EAAEH,IAAI,CAAC,GAAG,CAAC;EACrC,MAAMS,IAAI,GAAGJ,QAAQ,CAACD,IAAI,EAAEH,IAAI,CAAC,GAAG,CAAC;EAErC,MAAMS,MAAM,GAAGH,IAAI,GAAGC,IAAI,GAAGC,IAAI;EAEjC,MAAME,KAAK,GAAGH,IAAI,GAAGC,IAAI;;EAEzB;EACA,MAAMG,MAAM,GAAG,SAAAA,CAAU7wE,CAAC,EAAEyE,CAAC,EAAEqB,CAAC,EAAE;IAChC,OAAQ,CAAEwqE,QAAQ,CAACtwE,CAAC,EAAEgwE,IAAI,CAAC,GAAGS,IAAI,GAAIH,QAAQ,CAAC7rE,CAAC,EAAEwrE,IAAI,CAAC,IAAIS,IAAI,GAAIJ,QAAQ,CAACxqE,CAAC,EAAEoqE,IAAI,CAAC;EACtF,CAAC;;EAED;EACA,MAAMY,OAAO,GAAG,EAAE;EAClB,IAAIh/E,CAAC;EACL,IAAIi/E,GAAG;EACP,KAAKj/E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGu5C,MAAM,EAAEv5C,CAAC,EAAE,EAAE;IAC3B,MAAMk/E,IAAI,GAAG30D,QAAQ,GAAGvqB,CAAC;IACzBi/E,GAAG,GAAGF,MAAM,CAACxN,MAAM,CAAC2N,IAAI,CAAC,EAAE3N,MAAM,CAAC2N,IAAI,GAAG,CAAC,CAAC,EAAE3N,MAAM,CAAC2N,IAAI,GAAG,CAAC,CAAC,CAAC;IAE9D,IAAIF,OAAO,CAACC,GAAG,CAAC,KAAKxiE,SAAS,EAAE;MAC9BuiE,OAAO,CAACC,GAAG,CAAC,GAAG,CAACj/E,CAAC,CAAC;IACpB,CAAC,MAAM;MACLg/E,OAAO,CAACC,GAAG,CAAC,CAAC76E,IAAI,CAACpE,CAAC,CAAC;IACtB;EACF;EAEA,MAAMm/E,WAAW,GAAGphF,KAAK,CAACsoB,aAAa,CAACs/C,WAAW,EAAEkZ,MAAM,CAAC;EAC5D,MAAMO,WAAW,GAAGrhF,KAAK,CAACsoB,aAAa,CAACu/C,WAAW,EAAEiZ,MAAM,CAAC;EAC5D,MAAM10D,IAAI,GAAGpsB,KAAK,CAACsoB,aAAa,CAACs/C,WAAW,EAAEpsB,MAAM,CAAC;EAErD,IAAI7yC,MAAM,GAAG,CAAC;EACd,IAAI24E,aAAa,GAAG,CAAC;EACrB,IAAIzrE,CAAC;EACL,KAAK5T,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6+E,MAAM,EAAE7+E,CAAC,EAAE,EAAE;IAC3B,MAAMye,KAAK,GAAG0gE,WAAW,CAACn/E,CAAC,CAAC,GAAG0G,MAAM;IAErC,MAAM44E,QAAQ,GAAGN,OAAO,CAACh/E,CAAC,CAAC;IAE3B,IAAIs/E,QAAQ,KAAK7iE,SAAS,EAAE;MAC1B,KAAK7I,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG0rE,QAAQ,CAACrnF,MAAM,EAAE2b,CAAC,EAAE,EAAE;QACpCuW,IAAI,CAACzjB,MAAM,CAAC,GAAG44E,QAAQ,CAAC1rE,CAAC,CAAC;QAC1BlN,MAAM,EAAE;MACV;IACF;IAEA,MAAM64E,UAAU,GAAG74E,MAAM,GAAG+X,KAAK;IACjC2gE,WAAW,CAACp/E,CAAC,CAAC,GAAGu/E,UAAU;IAE3B,IAAIA,UAAU,GAAGF,aAAa,EAAE;MAC9BA,aAAa,GAAGE,UAAU;IAC5B;EACF;;EAEA;EACA,IAAI,CAACC,mBAAmB,GAAI,EAAE,GAAGH,aAAa,GAAI,CAAC;;EAEnD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAI,CAACI,WAAW,GAAG,UAAUvxE,CAAC,EAAEyE,CAAC,EAAEqB,CAAC,EAAE0rE,MAAM,EAAEC,GAAG,EAAE;IACjD,IAAIC,MAAM,GAAG,CAAC;IAEd,MAAMC,KAAK,GAAGrB,QAAQ,CAACtwE,CAAC,EAAEgwE,IAAI,CAAC;IAC/B,MAAM4B,KAAK,GAAGtB,QAAQ,CAAC7rE,CAAC,EAAEwrE,IAAI,CAAC;IAC/B,MAAM4B,KAAK,GAAGvB,QAAQ,CAACxqE,CAAC,EAAEoqE,IAAI,CAAC;IAE/B,MAAM4B,GAAG,GAAG7/E,IAAI,CAACsM,GAAG,CAAC,CAAC,EAAEozE,KAAK,GAAG,CAAC,CAAC;IAClC,MAAMI,GAAG,GAAG9/E,IAAI,CAACsM,GAAG,CAAC,CAAC,EAAEqzE,KAAK,GAAG,CAAC,CAAC;IAClC,MAAMI,GAAG,GAAG//E,IAAI,CAACsM,GAAG,CAAC,CAAC,EAAEszE,KAAK,GAAG,CAAC,CAAC;IAElC,MAAMI,GAAG,GAAGhgF,IAAI,CAACuM,GAAG,CAACgyE,IAAI,GAAG,CAAC,EAAEmB,KAAK,GAAG,CAAC,CAAC;IACzC,MAAMO,GAAG,GAAGjgF,IAAI,CAACuM,GAAG,CAACiyE,IAAI,GAAG,CAAC,EAAEmB,KAAK,GAAG,CAAC,CAAC;IACzC,MAAMO,GAAG,GAAGlgF,IAAI,CAACuM,GAAG,CAACkyE,IAAI,GAAG,CAAC,EAAEmB,KAAK,GAAG,CAAC,CAAC;IAEzC,KAAK//E,CAAC,GAAGggF,GAAG,EAAEhgF,CAAC,IAAImgF,GAAG,EAAE,EAAEngF,CAAC,EAAE;MAC3B,MAAMsgF,OAAO,GAAGtgF,CAAC,GAAG8+E,KAAK;MAEzB,KAAKlrE,CAAC,GAAGqsE,GAAG,EAAErsE,CAAC,IAAIwsE,GAAG,EAAE,EAAExsE,CAAC,EAAE;QAC3B,MAAM2sE,OAAO,GAAG3sE,CAAC,GAAGgrE,IAAI;QAExB,KAAK,IAAI9mF,CAAC,GAAGooF,GAAG,EAAEpoF,CAAC,IAAIuoF,GAAG,EAAE,EAAEvoF,CAAC,EAAE;UAC/BmnF,GAAG,GAAGqB,OAAO,GAAGC,OAAO,GAAGzoF,CAAC;UAE3B,MAAM0oF,SAAS,GAAGrB,WAAW,CAACF,GAAG,CAAC;UAClC,MAAMwB,OAAO,GAAGD,SAAS,GAAGpB,WAAW,CAACH,GAAG,CAAC;UAE5C,KAAK,IAAIyB,SAAS,GAAGF,SAAS,EAAEE,SAAS,GAAGD,OAAO,EAAEC,SAAS,EAAE,EAAE;YAChE,MAAM1oE,SAAS,GAAGmS,IAAI,CAACu2D,SAAS,CAAC;YACjC,MAAMC,SAAS,GAAGp2D,QAAQ,GAAGvS,SAAS;YACtC,MAAM6W,EAAE,GAAG0iD,MAAM,CAACoP,SAAS,CAAC,GAAGzyE,CAAC;YAChC,MAAM4gB,EAAE,GAAGyiD,MAAM,CAACoP,SAAS,GAAG,CAAC,CAAC,GAAGhuE,CAAC;YACpC,MAAMoc,EAAE,GAAGwiD,MAAM,CAACoP,SAAS,GAAG,CAAC,CAAC,GAAG3sE,CAAC;YACpC,MAAM4sE,IAAI,GAAGrP,MAAM,CAACoP,SAAS,GAAG,CAAC,CAAC,GAAGjB,MAAM;YAE3C,IAAK7wD,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE,IAAM6xD,IAAI,GAAGA,IAAK,EAAE;cAClDjB,GAAG,CAACC,MAAM,EAAE,CAAC,GAAGz1D,IAAI,CAACu2D,SAAS,CAAC;YACjC;UACF;QACF;MACF;IACF;IACA;IACAf,GAAG,CAACC,MAAM,CAAC,GAAG,CAAC,CAAC;EAClB,CAAC;AACH;AACA,SAASiB,cAAcA,CAAC5E,YAAY,EAAEnnC,UAAU,EAAEr0C,MAAM,EAAEqgF,UAAU,EAAE;EACpE;EACA;EACA;EACA;EACA;EACA;;EAEA,MAAMv2D,QAAQ,GAAG,CAAC;EAClB,MAAM;IAAEgnD,MAAM;IAAEnN,MAAM;IAAEtjC;EAAM,CAAC,GAAGm7C,YAAY;EAC9C,MAAM1iC,MAAM,GAAGg4B,MAAM,CAACt5E,MAAM,GAAGsyB,QAAQ;EAEvC,MAAM;IAAEqxD;EAAK,CAAC,GAAG9mC,UAAU;EAE3B,MAAMpoC,GAAG,GAAGkvE,IAAI,CAACT,SAAS;EAC1B,MAAM1uE,GAAG,GAAGmvE,IAAI,CAACV,SAAS;EAE1B,IAAI15B,EAAE,CAAC,CAAC;EACR,IAAIu/B,SAAS;;EAEb;EACA,IAAI1zD,WAAW;EACf,IAAIre,WAAW;EACf,IAAI8e,cAAc;;EAElB;EACA,IAAIkzD,QAAQ,GAAG,CAAC,CAAC;;EAEjB;EACA,IAAInL,GAAG;EACP,IAAI3B,IAAI;EACR,IAAI+M,MAAM;EACV,IAAIC,OAAO;EACX,IAAIC,UAAU,GAAG,IAAI;EACrB,IAAIpJ,OAAO,GAAG,IAAI;EAClB,IAAIE,kBAAkB,GAAG,IAAI;;EAE7B;EACA,IAAImJ,KAAK;EACT,IAAIC,KAAK;EACT,IAAIC,KAAK;;EAET;EACA,IAAIC,QAAQ;EACZ,IAAIC,QAAQ;;EAEZ;EACA,IAAI5+E,IAAI;;EAER;EACA,IAAI6+E,UAAU;;EAEd;EACA,MAAMC,GAAG,GAAG,IAAInhD,iGAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;EAC5C,MAAMyb,EAAE,GAAG,IAAIzb,iGAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;EAC3C,MAAM0b,EAAE,GAAG,IAAI1b,iGAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;EAE3C,IAAIohD,OAAO;EAEX,SAASC,YAAYA,CAACC,QAAQ,EAAE5hF,CAAC,EAAE+E,CAAC,EAAE;IACpC,MAAM4H,KAAK,GAAG7O,KAAK,CAACsoB,aAAa,CAACw7D,QAAQ,EAAE5hF,CAAC,CAAC;IAC9C,KAAK,IAAI6hF,IAAI,GAAG,CAAC,EAAEA,IAAI,GAAG7hF,CAAC,EAAE,EAAE6hF,IAAI,EAAE;MACnCl1E,KAAK,CAACk1E,IAAI,CAAC,GAAG98E,CAAC;IACjB;IAEA,OAAO4H,KAAK;EACd;EAEA,SAASm1E,WAAWA,CAAC/8E,CAAC,EAAEyZ,KAAK,EAAEi3D,IAAI,EAAE;IACnC,KAAK,IAAIoM,IAAI,GAAG,CAAC,EAAEA,IAAI,GAAG98E,CAAC,CAAC/M,MAAM,EAAE6pF,IAAI,EAAE,EAAE;MAC1C98E,CAAC,CAAC88E,IAAI,CAAC,GAAGrjE,KAAK,GAAIi3D,IAAI,GAAGoM,IAAK;IACjC;EACF;EAEA,SAASE,cAAcA,CAAA,EAAG;IACxB,CAAC;MAAEhzE;IAAY,CAAC,GAAGvO,MAAM;IACzB,CAAC;MAAEo1E;IAAI,CAAC,GAAG/gC,UAAU;IAErB6sC,OAAO,GAAGxhF,IAAI,CAACuM,GAAG,CAAC,CAAC,EAAE,CAAC,GAAGvM,IAAI,CAACyN,KAAK,CAACyf,WAAW,GAAGre,WAAW,CAAC,CAAC;IAEhE,MAAMizE,QAAQ,GAAGpM,GAAG,CAAC,CAAC,CAAC,GAAGA,GAAG,CAAC,CAAC,CAAC,GAAGA,GAAG,CAAC,CAAC,CAAC;IACzC3B,IAAI,GAAG0N,YAAY,CAACxvE,YAAY,EAAE6vE,QAAQ,EAAE,CAAC,MAAM,CAAC;IACpDhB,MAAM,GAAGljF,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAE6vE,QAAQ,GAAG,CAAC,CAAC;IACxDf,OAAO,GAAGnjF,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAE6vE,QAAQ,CAAC;IACrD,IAAIhK,kBAAkB,EAAE;MACtBkJ,UAAU,GAAGpjF,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAE6vE,QAAQ,CAAC;MACxDlK,OAAO,GAAG,EAAE;IACd;IAEAqJ,KAAK,GAAGrjF,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAEyjE,GAAG,CAAC,CAAC,CAAC,CAAC;IACjDwL,KAAK,GAAGtjF,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAEyjE,GAAG,CAAC,CAAC,CAAC,CAAC;IACjDyL,KAAK,GAAGvjF,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAEyjE,GAAG,CAAC,CAAC,CAAC,CAAC;IAEjDkM,WAAW,CAACX,KAAK,EAAE10E,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAGsC,WAAW,CAAC;IAC3C+yE,WAAW,CAACV,KAAK,EAAE30E,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAGsC,WAAW,CAAC;IAC3C+yE,WAAW,CAACT,KAAK,EAAE50E,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAGsC,WAAW,CAAC;EAC7C;EAEA,SAASkzE,qBAAqBA,CAAA,EAAG;IAC/B,IAAI7nC,KAAK,GAAG,GAAG;IACf,MAAMq7B,IAAI,GAAG,CAAC,GAAGv1E,IAAI,CAACC,EAAE,GAAG0tB,cAAc;IAEzC0zD,QAAQ,GAAGzjF,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAE0b,cAAc,CAAC;IAC5DyzD,QAAQ,GAAGxjF,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAE0b,cAAc,CAAC;IAC5D,KAAK,IAAIg0D,IAAI,GAAG,CAAC,EAAEA,IAAI,GAAGh0D,cAAc,EAAEg0D,IAAI,EAAE,EAAE;MAChDN,QAAQ,CAACM,IAAI,CAAC,GAAG3hF,IAAI,CAACge,GAAG,CAACk8B,KAAK,CAAC;MAChCknC,QAAQ,CAACO,IAAI,CAAC,GAAG3hF,IAAI,CAAC0K,GAAG,CAACwvC,KAAK,CAAC;MAChCA,KAAK,IAAIq7B,IAAI;IACf;EACF;EAEA,SAASyM,cAAcA,CAAA,EAAG;IACxBv/E,IAAI,GAAG,IAAIo7E,MAAM,CAACzM,MAAM,EAAE7kE,GAAG,EAAED,GAAG,EAAE,IAAI,GAAGs0E,SAAS,CAAC;IACrDU,UAAU,GAAG,IAAItvE,UAAU,CAACvP,IAAI,CAAC48E,mBAAmB,CAAC;EACvD;EAEA,SAASl1C,IAAIA,CAAA,EAAG;IACd,CAAC;MACCjd,WAAW;MACXre,WAAW;MACX8e,cAAc;MACdmqD;IACF,CAAC,GAAGx3E,MAAM;IACV+gD,EAAE,GAAGzjD,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAEmnC,MAAM,CAAC;IAC9CwnC,SAAS,GAAG,CAAC;IACb,KAAK,IAAIe,IAAI,GAAG,CAAC,EAAEA,IAAI,GAAGvoC,MAAM,EAAE,EAAEuoC,IAAI,EAAE;MACxC,MAAMM,IAAI,GAAG7Q,MAAM,CAACuQ,IAAI,GAAGv3D,QAAQ,GAAG,CAAC,CAAC,IAAI8C,WAAW;MACvD,IAAI+0D,IAAI,GAAGrB,SAAS,EAAE;QACpBA,SAAS,GAAGqB,IAAI;MAClB;MACA5gC,EAAE,CAACsgC,IAAI,CAAC,GAAGM,IAAI,GAAGA,IAAI;IACxB;IAEAJ,cAAc,CAAC,CAAC;IAChBE,qBAAqB,CAAC,CAAC;IACvBC,cAAc,CAAC,CAAC;IAEhBnB,QAAQ,GAAG,CAAC,CAAC;EACf;EAEA,SAASqB,kBAAkBA,CAACt5B,EAAE,EAAEu5B,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAE;IAChD,MAAMC,KAAK,GAAGl4D,QAAQ,GAAGw+B,EAAE;IAC3B,MAAM25B,GAAG,GAAGlhC,EAAE,CAACuH,EAAE,CAAC;IAClB,MAAMl6B,EAAE,GAAG0iD,MAAM,CAACkR,KAAK,CAAC,GAAGH,IAAI;IAC/B,MAAMxzD,EAAE,GAAGyiD,MAAM,CAACkR,KAAK,GAAG,CAAC,CAAC,GAAGF,IAAI;IACnC,MAAMxzD,EAAE,GAAGwiD,MAAM,CAACkR,KAAK,GAAG,CAAC,CAAC,GAAGD,IAAI;IACnC,MAAMjhC,EAAE,GAAG1yB,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE;IAEtC,OAAOwyB,EAAE,GAAGmhC,GAAG;EACjB;EAEA,SAASC,QAAQA,CAACL,IAAI,EAAEC,IAAI,EAAEC,IAAI,EAAEx9E,CAAC,EAAE6N,CAAC,EAAE;IACxC;IACA;IACA;;IAEA;IACA;IACA,IAAIk2C,EAAE;IAEN,IAAIi4B,QAAQ,KAAK,CAAC,CAAC,EAAE;MACnBj4B,EAAE,GAAGi4B,QAAQ;MACb,IAAIj4B,EAAE,KAAK/jD,CAAC,IAAI+jD,EAAE,KAAKl2C,CAAC,IAAIwvE,kBAAkB,CAACt5B,EAAE,EAAEu5B,IAAI,EAAEC,IAAI,EAAEC,IAAI,CAAC,EAAE;QACpE,OAAOz5B,EAAE;MACX;MACAi4B,QAAQ,GAAG,CAAC,CAAC;IACf;IAEA,IAAI4B,EAAE,GAAG,CAAC;IACV75B,EAAE,GAAG04B,UAAU,CAACmB,EAAE,CAAC;IACnB,OAAO75B,EAAE,IAAI,CAAC,EAAE;MACd,IAAIA,EAAE,KAAK/jD,CAAC,IAAI+jD,EAAE,KAAKl2C,CAAC,IAAIwvE,kBAAkB,CAACt5B,EAAE,EAAEu5B,IAAI,EAAEC,IAAI,EAAEC,IAAI,CAAC,EAAE;QACpExB,QAAQ,GAAGj4B,EAAE;QACb,OAAOA,EAAE;MACX;MACAA,EAAE,GAAG04B,UAAU,CAAC,EAAEmB,EAAE,CAAC;IACvB;IAEA5B,QAAQ,GAAG,CAAC,CAAC;IAEb,OAAO,CAAC,CAAC;EACX;EAEA,SAAS6B,aAAaA,CAAA,EAAG;IACvB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA,MAAMrpC,MAAM,GAAG,GAAG;IAClB,MAAMspC,KAAK,GAAItpC,MAAM,GAAI,CAAC;IAC1B,MAAMupC,SAAS,GAAG,CAAC,IAAI,CAAC,GAAGD,KAAK,GAAGA,KAAK,CAAC;IAEzC,KAAK,IAAIhB,IAAI,GAAG,CAAC,EAAEA,IAAI,GAAGvoC,MAAM,EAAEuoC,IAAI,EAAE,EAAE;MACxC,MAAMW,KAAK,GAAGl4D,QAAQ,GAAGu3D,IAAI;MAC7B,MAAMkB,EAAE,GAAGzR,MAAM,CAACkR,KAAK,CAAC;MACxB,MAAMQ,EAAE,GAAG1R,MAAM,CAACkR,KAAK,GAAG,CAAC,CAAC;MAC5B,MAAMS,EAAE,GAAG3R,MAAM,CAACkR,KAAK,GAAG,CAAC,CAAC;MAC5B,MAAM/oE,EAAE,GAAG63D,MAAM,CAACkR,KAAK,GAAG,CAAC,CAAC;MAC5B,MAAMU,GAAG,GAAG3hC,EAAE,CAACsgC,IAAI,CAAC;MAEpBl/E,IAAI,CAAC68E,WAAW,CAACuD,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAExpE,EAAE,EAAE+nE,UAAU,CAAC;;MAE5C;MACA,MAAM2B,EAAE,GAAGjjF,IAAI,CAAC8S,IAAI,CAACyG,EAAE,GAAG1K,WAAW,CAAC;;MAEtC;MACA,MAAMq0E,GAAG,GAAGljF,IAAI,CAACyN,KAAK,CAACoB,WAAW,IAAIg0E,EAAE,GAAGt2E,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;MACnD,MAAM42E,GAAG,GAAGnjF,IAAI,CAACyN,KAAK,CAACoB,WAAW,IAAIi0E,EAAE,GAAGv2E,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;MACnD,MAAM62E,GAAG,GAAGpjF,IAAI,CAACyN,KAAK,CAACoB,WAAW,IAAIk0E,EAAE,GAAGx2E,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;MAEnD;MACA,MAAM82E,IAAI,GAAGrjF,IAAI,CAACsM,GAAG,CAAC,CAAC,EAAE42E,GAAG,GAAGD,EAAE,CAAC;MAClC,MAAMK,IAAI,GAAGtjF,IAAI,CAACsM,GAAG,CAAC,CAAC,EAAE62E,GAAG,GAAGF,EAAE,CAAC;MAClC,MAAMM,IAAI,GAAGvjF,IAAI,CAACsM,GAAG,CAAC,CAAC,EAAE82E,GAAG,GAAGH,EAAE,CAAC;;MAElC;MACA;MACA;MACA,MAAMO,IAAI,GAAGxjF,IAAI,CAACuM,GAAG,CAACmpE,GAAG,CAAC,CAAC,CAAC,EAAEwN,GAAG,GAAGD,EAAE,GAAG,CAAC,CAAC;MAC3C,MAAMQ,IAAI,GAAGzjF,IAAI,CAACuM,GAAG,CAACmpE,GAAG,CAAC,CAAC,CAAC,EAAEyN,GAAG,GAAGF,EAAE,GAAG,CAAC,CAAC;MAC3C,MAAMS,IAAI,GAAG1jF,IAAI,CAACuM,GAAG,CAACmpE,GAAG,CAAC,CAAC,CAAC,EAAE0N,GAAG,GAAGH,EAAE,GAAG,CAAC,CAAC;MAE3C,MAAMU,MAAM,GAAGhC,IAAI,GAAG,CAAC;MACvB,MAAMiC,EAAE,GAAG3f,MAAM,CAAC0f,MAAM,CAAC;MACzB,MAAME,EAAE,GAAG5f,MAAM,CAAC0f,MAAM,GAAG,CAAC,CAAC;MAC7B,MAAMG,EAAE,GAAG7f,MAAM,CAAC0f,MAAM,GAAG,CAAC,CAAC;MAE7B,KAAK,IAAII,EAAE,GAAGR,IAAI,EAAEQ,EAAE,GAAGL,IAAI,EAAEK,EAAE,EAAE,EAAE;QACnC,MAAMn1D,EAAE,GAAGuyD,KAAK,CAAC4C,EAAE,CAAC,GAAGhB,EAAE;QACzB,MAAMvkB,OAAO,GAAGkX,GAAG,CAAC,CAAC,CAAC,GAAGA,GAAG,CAAC,CAAC,CAAC,GAAGqO,EAAE;QAEpC,KAAK,IAAIC,EAAE,GAAGV,IAAI,EAAEU,EAAE,GAAGP,IAAI,EAAEO,EAAE,EAAE,EAAE;UACnC,MAAMr1D,EAAE,GAAGuyD,KAAK,CAAC8C,EAAE,CAAC,GAAGlB,EAAE;UACzB,MAAMmB,IAAI,GAAGr1D,EAAE,GAAGA,EAAE,GAAGD,EAAE,GAAGA,EAAE;UAC9B,MAAMu1D,QAAQ,GAAG1lB,OAAO,GAAGkX,GAAG,CAAC,CAAC,CAAC,GAAGsO,EAAE;UAEtC,KAAK,IAAIG,EAAE,GAAGd,IAAI,EAAEc,EAAE,GAAGX,IAAI,EAAEW,EAAE,EAAE,EAAE;YACnC,MAAM3nE,GAAG,GAAG2nE,EAAE,GAAGD,QAAQ;YACzB,MAAMx1D,EAAE,GAAGuyD,KAAK,CAACkD,EAAE,CAAC,GAAGtB,EAAE;YACzB,MAAMzhC,EAAE,GAAG6iC,IAAI,GAAGv1D,EAAE,GAAGA,EAAE;YAEzB,IAAI0yB,EAAE,GAAG4hC,GAAG,EAAE;cACZ,MAAMpwE,CAAC,GAAG5S,IAAI,CAACw9E,GAAG,CAAC,CAACp8B,EAAE,GAAGwhC,SAAS,CAAC;cACnC,MAAMwB,IAAI,GAAG5nE,GAAG,GAAG,CAAC;cACpBskE,MAAM,CAACsD,IAAI,CAAC,IAAIR,EAAE,GAAGhxE,CAAC;cACtBkuE,MAAM,CAACsD,IAAI,GAAG,CAAC,CAAC,IAAIP,EAAE,GAAGjxE,CAAC;cAC1BkuE,MAAM,CAACsD,IAAI,GAAG,CAAC,CAAC,IAAIN,EAAE,GAAGlxE,CAAC;cAC1BmuE,OAAO,CAACvkE,GAAG,CAAC,IAAI5J,CAAC;cACjB,IAAIklE,kBAAkB,KAAK,IAAI,IAAIllE,CAAC,GAAGouE,UAAU,CAACxkE,GAAG,CAAC,EAAE;gBACtDwkE,UAAU,CAACxkE,GAAG,CAAC,GAAG5J,CAAC;gBACnBglE,OAAO,CAACp7D,GAAG,CAAC,GAAGmkB,KAAK,CAACghD,IAAI,CAAC;cAC5B;cAEA,IAAI5N,IAAI,CAACv3D,GAAG,CAAC,GAAG,GAAG,EAAE;gBACnB;gBACAu3D,IAAI,CAACv3D,GAAG,CAAC,GAAG,CAACu3D,IAAI,CAACv3D,GAAG,CAAC;cACxB;cACA;cACA;cACA,MAAM9K,CAAC,GAAG1R,IAAI,CAAC8xC,IAAI,CAACsP,EAAE,CAAC;cACvB,MAAMijC,EAAE,GAAG9qE,EAAE,GAAG7H,CAAC;cACjB,IAAI4yE,GAAG,GAAG51D,EAAE,GAAG21D,EAAE;cACjB,IAAIE,GAAG,GAAG51D,EAAE,GAAG01D,EAAE;cACjB,IAAIG,GAAG,GAAG51D,EAAE,GAAGy1D,EAAE;cAEjBC,GAAG,IAAIzB,EAAE;cACT0B,GAAG,IAAIzB,EAAE;cACT0B,GAAG,IAAIzB,EAAE;cAET,IAAIP,QAAQ,CAAC8B,GAAG,EAAEC,GAAG,EAAEC,GAAG,EAAE7C,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC5C,MAAM8C,EAAE,GAAGlrE,EAAE,GAAG7H,CAAC;gBACjB,IAAI+yE,EAAE,GAAG1Q,IAAI,CAACv3D,GAAG,CAAC,EAAE;kBAClBu3D,IAAI,CAACv3D,GAAG,CAAC,GAAGioE,EAAE;gBAChB;cACF;YACF;UACF;QACF;MACF;IACF;EACF;EAEA,SAASC,YAAYA,CAAClF,GAAG,EAAEx6E,CAAC,EAAE;IAC5Bw6E,GAAG,CAACzxE,CAAC,GAAGyxE,GAAG,CAAChtE,CAAC,GAAGgtE,GAAG,CAAC3rE,CAAC,GAAG,GAAG;IAC3B,IAAI7O,CAAC,CAAC+I,CAAC,KAAK,CAAC,EAAE;MACbyxE,GAAG,CAACzxE,CAAC,GAAG,CAAC/I,CAAC,CAACwN,CAAC,GAAGxN,CAAC,CAAC6O,CAAC,IAAI,CAAC7O,CAAC,CAAC+I,CAAC;IAC5B,CAAC,MAAM,IAAI/I,CAAC,CAACwN,CAAC,KAAK,CAAC,EAAE;MACpBgtE,GAAG,CAAChtE,CAAC,GAAG,CAACxN,CAAC,CAAC+I,CAAC,GAAG/I,CAAC,CAAC6O,CAAC,IAAI,CAAC7O,CAAC,CAACwN,CAAC;IAC5B,CAAC,MAAM,IAAIxN,CAAC,CAAC6O,CAAC,KAAK,CAAC,EAAE;MACpB2rE,GAAG,CAAC3rE,CAAC,GAAG,CAAC7O,CAAC,CAAC+I,CAAC,GAAG/I,CAAC,CAACwN,CAAC,IAAI,CAACxN,CAAC,CAAC6O,CAAC;IAC5B;IACA,OAAO2rE,GAAG;EACZ;EAEA,SAASmF,YAAYA,CAAC9/E,CAAC,EAAE6N,CAAC,EAAE;IAC1B,MAAMkyE,IAAI,GAAGx6D,QAAQ,GAAGvlB,CAAC;IACzB,MAAMggF,IAAI,GAAGz6D,QAAQ,GAAG1X,CAAC;IACzB,MAAMoyE,EAAE,GAAG1T,MAAM,CAACwT,IAAI,CAAC;IACvB,MAAMG,EAAE,GAAG3T,MAAM,CAACwT,IAAI,GAAG,CAAC,CAAC;IAC3B,MAAMI,EAAE,GAAG5T,MAAM,CAACwT,IAAI,GAAG,CAAC,CAAC;IAC3B,MAAMK,EAAE,GAAG7T,MAAM,CAACwT,IAAI,GAAG,CAAC,CAAC;IAC3B,IAAIl2D,EAAE,GAAG6yD,GAAG,CAACxzE,CAAC,GAAGqjE,MAAM,CAACyT,IAAI,CAAC,GAAGC,EAAE;IAClC,IAAIn2D,EAAE,GAAG4yD,GAAG,CAAC/uE,CAAC,GAAG4+D,MAAM,CAACyT,IAAI,GAAG,CAAC,CAAC,GAAGE,EAAE;IACtC,IAAIn2D,EAAE,GAAG2yD,GAAG,CAAC1tE,CAAC,GAAGu9D,MAAM,CAACyT,IAAI,GAAG,CAAC,CAAC,GAAGG,EAAE;IACtC,MAAME,KAAK,GAAG9T,MAAM,CAACyT,IAAI,GAAG,CAAC,CAAC;IAC9B,IAAIzjC,EAAE,GAAG1yB,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE;;IAEpC;IACA;;IAEA,MAAMld,CAAC,GAAG1R,IAAI,CAAC8xC,IAAI,CAACsP,EAAE,CAAC;;IAEvB;IACA;IACA,MAAM+jC,IAAI,GAAG,CAACF,EAAE,GAAGA,EAAE,GAAGvzE,CAAC,GAAGA,CAAC,GAAGwzE,KAAK,GAAGA,KAAK,KAAK,GAAG,GAAGD,EAAE,GAAGvzE,CAAC,CAAC;;IAE/D;IACA,MAAM0zE,GAAG,GAAGH,EAAE,GAAGE,IAAI;IAErB5D,GAAG,CAACrhD,SAAS,CAAC,CAAC;;IAEf;IACAwkD,YAAY,CAAC7oC,EAAE,EAAE0lC,GAAG,CAAC;IACrB1lC,EAAE,CAAC3b,SAAS,CAAC,CAAC;;IAEd;IACA4b,EAAE,CAAC9b,YAAY,CAACuhD,GAAG,EAAE1lC,EAAE,CAAC;IACxBC,EAAE,CAAC5b,SAAS,CAAC,CAAC;;IAEd;IACA,MAAMmlD,IAAI,GAAGrlF,IAAI,CAAC8xC,IAAI,CAACmzC,EAAE,GAAGA,EAAE,GAAGG,GAAG,GAAGA,GAAG,CAAC;IAE3CvpC,EAAE,CAACrc,cAAc,CAAC6lD,IAAI,CAAC;IACvBvpC,EAAE,CAACtc,cAAc,CAAC6lD,IAAI,CAAC;IACvB9D,GAAG,CAAC/hD,cAAc,CAAC4lD,GAAG,CAAC;IAEvB7D,GAAG,CAACxzE,CAAC,IAAI+2E,EAAE;IACXvD,GAAG,CAAC/uE,CAAC,IAAIuyE,EAAE;IACXxD,GAAG,CAAC1tE,CAAC,IAAImxE,EAAE;IAEXnE,QAAQ,GAAG,CAAC,CAAC;IAEb,MAAMoC,EAAE,GAAGzB,OAAO;IAElB,KAAK,IAAIG,IAAI,GAAG,CAAC,EAAEA,IAAI,GAAGh0D,cAAc,EAAEg0D,IAAI,EAAE,EAAE;MAChD,MAAM2D,IAAI,GAAGjE,QAAQ,CAACM,IAAI,CAAC;MAC3B,MAAM4D,IAAI,GAAGnE,QAAQ,CAACO,IAAI,CAAC;MAE3B,MAAM6D,EAAE,GAAGjE,GAAG,CAACxzE,CAAC,GAAGu3E,IAAI,GAAGzpC,EAAE,CAAC9tC,CAAC,GAAGw3E,IAAI,GAAGzpC,EAAE,CAAC/tC,CAAC;MAC5C,MAAM03E,EAAE,GAAGlE,GAAG,CAAC/uE,CAAC,GAAG8yE,IAAI,GAAGzpC,EAAE,CAACrpC,CAAC,GAAG+yE,IAAI,GAAGzpC,EAAE,CAACtpC,CAAC;MAC5C,MAAMkzE,EAAE,GAAGnE,GAAG,CAAC1tE,CAAC,GAAGyxE,IAAI,GAAGzpC,EAAE,CAAChoC,CAAC,GAAG0xE,IAAI,GAAGzpC,EAAE,CAACjoC,CAAC;MAE5C,IAAI2uE,QAAQ,CAACgD,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAE7gF,CAAC,EAAE6N,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;QACrC;QACA;QACA,MAAMwwE,GAAG,GAAGljF,IAAI,CAACyN,KAAK,CAACoB,WAAW,IAAI22E,EAAE,GAAGj5E,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM42E,GAAG,GAAGnjF,IAAI,CAACyN,KAAK,CAACoB,WAAW,IAAI42E,EAAE,GAAGl5E,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM62E,GAAG,GAAGpjF,IAAI,CAACyN,KAAK,CAACoB,WAAW,IAAI62E,EAAE,GAAGn5E,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,MAAM82E,IAAI,GAAGrjF,IAAI,CAACsM,GAAG,CAAC,CAAC,EAAE42E,GAAG,GAAGD,EAAE,CAAC;QAClC,MAAMK,IAAI,GAAGtjF,IAAI,CAACsM,GAAG,CAAC,CAAC,EAAE62E,GAAG,GAAGF,EAAE,CAAC;QAClC,MAAMM,IAAI,GAAGvjF,IAAI,CAACsM,GAAG,CAAC,CAAC,EAAE82E,GAAG,GAAGH,EAAE,CAAC;QAElC,MAAMO,IAAI,GAAGxjF,IAAI,CAACuM,GAAG,CAACmpE,GAAG,CAAC,CAAC,CAAC,EAAEwN,GAAG,GAAGD,EAAE,GAAG,CAAC,CAAC;QAC3C,MAAMQ,IAAI,GAAGzjF,IAAI,CAACuM,GAAG,CAACmpE,GAAG,CAAC,CAAC,CAAC,EAAEyN,GAAG,GAAGF,EAAE,GAAG,CAAC,CAAC;QAC3C,MAAMS,IAAI,GAAG1jF,IAAI,CAACuM,GAAG,CAACmpE,GAAG,CAAC,CAAC,CAAC,EAAE0N,GAAG,GAAGH,EAAE,GAAG,CAAC,CAAC;QAE3C,KAAK,IAAIc,EAAE,GAAGR,IAAI,EAAEQ,EAAE,GAAGL,IAAI,EAAEK,EAAE,EAAE,EAAE;UACnCn1D,EAAE,GAAG82D,EAAE,GAAGvE,KAAK,CAAC4C,EAAE,CAAC;UACnB,MAAMvlB,OAAO,GAAGkX,GAAG,CAAC,CAAC,CAAC,GAAGA,GAAG,CAAC,CAAC,CAAC,GAAGqO,EAAE;UACpC,KAAK,IAAIC,EAAE,GAAGV,IAAI,EAAEU,EAAE,GAAGP,IAAI,EAAEO,EAAE,EAAE,EAAE;YACnCr1D,EAAE,GAAG82D,EAAE,GAAGvE,KAAK,CAAC8C,EAAE,CAAC;YACnB,MAAMC,IAAI,GAAGr1D,EAAE,GAAGA,EAAE,GAAGD,EAAE,GAAGA,EAAE;YAC9B,MAAMu1D,QAAQ,GAAG1lB,OAAO,GAAGkX,GAAG,CAAC,CAAC,CAAC,GAAGsO,EAAE;YACtC,KAAK,IAAIG,EAAE,GAAGd,IAAI,EAAEc,EAAE,GAAGX,IAAI,EAAEW,EAAE,EAAE,EAAE;cACnCz1D,EAAE,GAAG82D,EAAE,GAAGvE,KAAK,CAACkD,EAAE,CAAC;cACnB/iC,EAAE,GAAG6iC,IAAI,GAAGv1D,EAAE,GAAGA,EAAE;cACnB,MAAMlS,GAAG,GAAG2nE,EAAE,GAAGD,QAAQ;cACzB,MAAMyB,OAAO,GAAG5R,IAAI,CAACv3D,GAAG,CAAC;cAEzB,IAAImpE,OAAO,GAAG,GAAG,IAAIvkC,EAAE,GAAIukC,OAAO,GAAGA,OAAQ,EAAE;gBAC7C5R,IAAI,CAACv3D,GAAG,CAAC,GAAGxc,IAAI,CAAC8xC,IAAI,CAACsP,EAAE,CAAC;cAC3B;YACF;UACF;QACF;MACF;IACF;EACF;EAEA,SAASwkC,YAAYA,CAAA,EAAG;IACtB,KAAK,IAAIjE,IAAI,GAAG,CAAC,EAAEA,IAAI,GAAGvoC,MAAM,EAAEuoC,IAAI,EAAE,EAAE;MACxC,MAAMkE,MAAM,GAAGz7D,QAAQ,GAAGu3D,IAAI;MAC9Bl/E,IAAI,CAAC68E,WAAW,CACdlO,MAAM,CAACyU,MAAM,CAAC,EACdzU,MAAM,CAACyU,MAAM,GAAG,CAAC,CAAC,EAClBzU,MAAM,CAACyU,MAAM,GAAG,CAAC,CAAC,EAClBzU,MAAM,CAACyU,MAAM,GAAG,CAAC,CAAC,EAClBvE,UACF,CAAC;MACD,IAAI1rC,EAAE,GAAG,CAAC;MACV,IAAI6sC,EAAE,GAAGnB,UAAU,CAAC1rC,EAAE,CAAC;MACvB,OAAO6sC,EAAE,IAAI,CAAC,EAAE;QACd,IAAId,IAAI,GAAGc,EAAE,EAAE;UACbkC,YAAY,CAAChD,IAAI,EAAEc,EAAE,CAAC;QACxB;QACAA,EAAE,GAAGnB,UAAU,CAAC,EAAE1rC,EAAE,CAAC;MACvB;IACF;EACF;EAEA,SAASkwC,YAAYA,CAAA,EAAG;IACtB,KAAK,IAAInE,IAAI,GAAG,CAAC,EAAE7hF,CAAC,GAAGi0E,IAAI,CAACj8E,MAAM,EAAE6pF,IAAI,GAAG7hF,CAAC,EAAE6hF,IAAI,EAAE,EAAE;MACpD,IAAI5N,IAAI,CAAC4N,IAAI,CAAC,GAAG,CAAC,EAAE5N,IAAI,CAAC4N,IAAI,CAAC,GAAG,CAAC;MAClC,IAAI/uE,CAAC,GAAGmuE,OAAO,CAACY,IAAI,CAAC;MACrB,IAAI/uE,CAAC,GAAG,CAAC,EAAE;QACTA,CAAC,GAAG,CAAC,GAAGA,CAAC;QACT,MAAMmzE,OAAO,GAAGpE,IAAI,GAAG,CAAC;QACxBb,MAAM,CAACiF,OAAO,CAAC,IAAInzE,CAAC;QACpBkuE,MAAM,CAACiF,OAAO,GAAG,CAAC,CAAC,IAAInzE,CAAC;QACxBkuE,MAAM,CAACiF,OAAO,GAAG,CAAC,CAAC,IAAInzE,CAAC;MAC1B;IACF;EACF;EAEA,SAASozE,SAASA,CAAA,EAAG;IACnB;IACA;IACA;IACA;IACApkE,OAAO,CAAChC,IAAI,CAAC,0BAA0B,CAAC;IAExCgC,OAAO,CAAChC,IAAI,CAAC,qBAAqB,CAAC;IACnCuqB,IAAI,CAAC,CAAC;IACNvoB,OAAO,CAACs3B,OAAO,CAAC,qBAAqB,CAAC;IAEtCt3B,OAAO,CAAChC,IAAI,CAAC,8BAA8B,CAAC;IAC5C8iE,aAAa,CAAC,CAAC;IACf9gE,OAAO,CAACs3B,OAAO,CAAC,8BAA8B,CAAC;IAE/Ct3B,OAAO,CAAChC,IAAI,CAAC,6BAA6B,CAAC;IAC3CgmE,YAAY,CAAC,CAAC;IACdhkE,OAAO,CAACs3B,OAAO,CAAC,6BAA6B,CAAC;IAC9C4sC,YAAY,CAAC,CAAC;IACdlkE,OAAO,CAACs3B,OAAO,CAAC,0BAA0B,CAAC;EAC7C;EAEA,IAAI,CAACF,KAAK,GAAG,YAAY;IACvB;IACA;IACAgtC,SAAS,CAAC,CAAC;IACX,IAAI,CAACnK,SAAS,GAAGiF,MAAM;IACvB,IAAI,CAACE,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACpJ,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACvlB,MAAM,GAAG0hB,IAAI;EACpB,CAAC;AACH;AACA,gEAAe2M,cAAc,E;;ACxmB+B;AACd;AAChB;AAE9B,MAAM;EAAEhwB,MAAMA,+BAAAA;AAAC,CAAC,GAAGsrB,IAAI;;AAEvB;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMiK,sBAAsB,SAASxL,gCAAqB,CAAC;EACzDsB,eAAeA,CAACD,YAAY,EAAEp9B,GAAG,EAAE/J,UAAU,EAAEr0C,MAAM,EAAE;IACrD,MAAM4lF,cAAc,GAAG,IAAIxF,yBAAc,CAAC5E,YAAY,EAAEnnC,UAAU,EAAEr0C,MAAM,CAAC;IAC3E4lF,cAAc,CAACltC,KAAK,CAAC,CAAC;IAEtB,MAAM2iC,OAAO,GAAG;MACdtpB,MAAM,EAAE,IAAI3B,6BAAM,CAACz+C,YAAY,EAAE,IAAI,CAACktC,SAAS,EAAET,GAAG,EAAE,CAAC,EAAEwnC,cAAc,CAAC7zB,MAAM,CAAC;MAC/EwpB,SAAS,EAAE,IAAInrB,6BAAM,CAACz+C,YAAY,EAAE,IAAI,CAACktC,SAAS,EAAET,GAAG,EAAE,CAAC,EAAEwnC,cAAc,CAACrK,SAAS,CAAC;MACrFjE,OAAO,EAAEsO,cAAc,CAACtO,OAAO;MAC/BC,aAAa,EAAE,IAAInnB,6BAAM,CAACz+C,YAAY,EAAE,IAAI,CAACktC,SAAS,EAAET,GAAG,EAAE,CAAC,EAAEwnC,cAAc,CAAClF,UAAU;IAC3F,CAAC;IACD,OAAOrF,OAAO;EAChB;AACF;AAEA,wEAAesK,sBAAsB,E;;AC5BN;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA,MAAME,qBAAqB,CAAC;EAC1Bh7E,WAAWA,CAAC81C,OAAO,EAAEmlC,QAAQ,EAAE;IAC7B,IAAI,CAACC,KAAK,GAAG,IAAIjmD,iGAAa,CAAC,CAAC;IAChC,IAAI,CAACimD,KAAK,CAACh3E,IAAI,CAAC4xC,OAAO,CAAC;IACxB,IAAI,CAACvmC,MAAM,GAAG0rE,QAAQ;IACtB,IAAI,CAACE,MAAM,GAAG,OAAO;IACrB,IAAI,CAACC,MAAM,GAAG,GAAG;IACjB,IAAI,CAACC,MAAM,GAAG,GAAG;IACjB,IAAI,CAACC,QAAQ,GAAG,CAAC;IACjB,IAAI,CAACC,OAAO,GAAG,IAAI;EACrB;AACF;AACA,uEAAeP,qBAAqB,E;;ACpBL;AACC;;AAEhC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMQ,sBAAsB,CAAC;EAC3Bx7E,WAAWA,CAAC+rC,QAAQ,EAAEvW,KAAK,EAAEimD,OAAO,EAAEC,OAAO,EAAE35D,WAAW,EAAE;IAC1D,IAAI,CAAC45D,SAAS,GAAG5vC,QAAQ;IACzB,IAAI,CAAC/V,MAAM,GAAGR,KAAK;IACnB,IAAI,CAACkW,QAAQ,GAAG,IAAIzW,iGAAa,CAAC,CAAC;IACnC,IAAI,CAAC0W,QAAQ,GAAG,IAAI1W,iGAAa,CAAC,CAAC;IACnC,IAAI,CAACyW,QAAQ,CAACxnC,IAAI,CAACu3E,OAAO,CAAC;IAC3B,IAAI,CAAC9vC,QAAQ,CAACznC,IAAI,CAACw3E,OAAO,CAAC;IAC3B,IAAI,CAACE,YAAY,GAAG75D,WAAW;IAE/B,IAAI,CAAC85D,UAAU,GAAG,IAAI;IACtB,IAAI,CAACC,UAAU,GAAG,IAAI;EACxB;EAEAC,YAAYA,CAAA,EAAG;IACb,IAAIC,YAAY;IAChB,IAAIzrB,GAAG;IACP,MAAM0rB,oBAAoB,GAAG,GAAG;IAEhC,MAAMlwC,QAAQ,GAAG,IAAI,CAAC4vC,SAAS,GAAG,CAAC;IACnC,MAAMnmD,KAAK,GAAG,IAAI,CAACQ,MAAM;IACzB,MAAMzS,EAAE,GAAG,IAAI,CAACooB,QAAQ,CAAC/oC,CAAC,GAAG,IAAI,CAAC8oC,QAAQ,CAAC9oC,CAAC;IAC5C,MAAM4gB,EAAE,GAAG,IAAI,CAACmoB,QAAQ,CAACtkC,CAAC,GAAG,IAAI,CAACqkC,QAAQ,CAACrkC,CAAC;IAC5C,MAAMoc,EAAE,GAAG,IAAI,CAACkoB,QAAQ,CAACjjC,CAAC,GAAG,IAAI,CAACgjC,QAAQ,CAAChjC,CAAC;IAC5C,IAAIjB,CAAC,GAAI8b,EAAE,GAAGC,EAAE,GAAID,EAAE,GAAGC,EAAE;IAC3B/b,CAAC,GAAIgc,EAAE,GAAGhc,CAAC,GAAIgc,EAAE,GAAGhc,CAAC;IACrB,IAAIymC,MAAM,GAAG,GAAG;IAChB,IAAIguC,MAAM,GAAG,GAAG;IAEhB,IAAIxnF,CAAC;IACL,KAAKA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGq3C,QAAQ,EAAEr3C,CAAC,EAAE,EAAE;MAC7B67D,GAAG,GAAG,CAAC/6B,KAAK,CAAC9gC,CAAC,CAAC,CAAC6a,MAAM,GAAG,IAAI,CAACqsE,YAAY,IAAI,GAAG;MACjD1tC,MAAM,GAAIqiB,GAAG,GAAGriB,MAAM,GAAIqiB,GAAG,GAAGriB,MAAM;MACtCguC,MAAM,IAAI3rB,GAAG;IACf;IACA,IAAI4rB,QAAQ,GAAGtnF,IAAI,CAACyN,KAAK,CAACmF,CAAC,GAAGymC,MAAM,CAAC;IACrC,IAAIiuC,QAAQ,GAAG,CAAC,EAAE;MAChBA,QAAQ,GAAG,CAAC;IACd;IACAD,MAAM,IAAInwC,QAAQ;IAElB,IAAI,CAACqwC,SAAS,GAAGD,QAAQ;IACzB,IAAI,CAACE,OAAO,GAAGH,MAAM;IACrB,IAAI,CAAC3wC,OAAO,GAAG2C,MAAM;IAErB,MAAMouC,IAAI,GAAGH,QAAQ;IACrB,MAAMI,KAAK,GAAGJ,QAAQ,GAAGA,QAAQ;IACjC,MAAMK,KAAK,GAAGL,QAAQ,GAAGA,QAAQ,GAAGA,QAAQ;IAE5C,MAAMM,MAAM,GAAG,IAAI,CAACC,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC/wC,QAAQ,CAAC/oC,CAAC,GAAG,IAAI,CAAC8oC,QAAQ,CAAC9oC,CAAC,CAAC;IACvE,MAAM+5E,MAAM,GAAG,IAAI,CAACC,OAAO,GAAG,GAAG,IAAI,IAAI,CAACjxC,QAAQ,CAACtkC,CAAC,GAAG,IAAI,CAACqkC,QAAQ,CAACrkC,CAAC,CAAC;IACvE,MAAMw1E,MAAM,GAAG,IAAI,CAACC,OAAO,GAAG,GAAG,IAAI,IAAI,CAACnxC,QAAQ,CAACjjC,CAAC,GAAG,IAAI,CAACgjC,QAAQ,CAAChjC,CAAC,CAAC;;IAEvE;IACA,IAAIq0E,YAAY,GAAG,CAAC;IAEpB,MAAMC,WAAW,GAAGP,MAAM,GAAGN,QAAQ;IACrC,MAAMc,WAAW,GAAGN,MAAM,GAAGR,QAAQ;IACrC,MAAMe,WAAW,GAAGL,MAAM,GAAGV,QAAQ;IAErC,KAAKznF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGq3C,QAAQ,EAAEr3C,CAAC,EAAE,EAAE;MAC7B,MAAMyoF,SAAS,GAAG,CAAC3nD,KAAK,CAAC9gC,CAAC,CAAC,CAAC6a,MAAM,GAAG,IAAI,CAACqsE,YAAY,IAAIK,oBAAoB;MAC9E,MAAMmB,SAAS,GAAGD,SAAS,GAAG,GAAG;MACjC,IAAIE,OAAO,GAAGxoF,IAAI,CAACyN,KAAK,CAAC06E,WAAW,GAAGI,SAAS,GAAG,GAAG,CAAC;MACvD,IAAIE,OAAO,GAAGzoF,IAAI,CAACyN,KAAK,CAAC26E,WAAW,GAAGG,SAAS,GAAG,GAAG,CAAC;MACvD,IAAIG,OAAO,GAAG1oF,IAAI,CAACyN,KAAK,CAAC46E,WAAW,GAAGE,SAAS,GAAG,GAAG,CAAC;MACvD;MACA;MACAC,OAAO,EAAE;MACTC,OAAO,EAAE;MACTC,OAAO,EAAE;MACTR,YAAY,IAAIM,OAAO,GAAGC,OAAO,GAAGC,OAAO;IAC7C,CAAC,CAAC;IACF;;IAEA,IAAI,CAACzB,UAAU,GAAGrpF,KAAK,CAACsoB,aAAa,CAAClU,UAAU,EAAE21E,KAAK,CAAC;IACxD,MAAMrtC,SAAS,GAAG,EAAE;IACpBA,SAAS,CAACxiD,MAAM,GAAGowF,YAAY;IAC/B,IAAK,IAAI,CAACjB,UAAU,KAAK,IAAI,IAAM3sC,SAAS,KAAK,IAAK,EAAE;MACtD,OAAO,CAAC,GAAG,CAAC;IACd;IACA;IACA,KAAKz6C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8nF,KAAK,EAAE9nF,CAAC,EAAE,EAAE;MAC1B,IAAI,CAAConF,UAAU,CAACpnF,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB;IACAsnF,YAAY,GAAG,CAAC;;IAEhB;IACA,KAAKtnF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGq3C,QAAQ,EAAEr3C,CAAC,EAAE,EAAE;MAC7B;MACA67D,GAAG,GAAG,CAAC/6B,KAAK,CAAC9gC,CAAC,CAAC,CAAC6a,MAAM,GAAG,IAAI,CAACqsE,YAAY,IAAIK,oBAAoB;MAClE,IAAIuB,OAAO,GAAG3oF,IAAI,CAACyN,KAAK,CAAC,CAACkzB,KAAK,CAAC9gC,CAAC,CAAC,CAACwmF,KAAK,CAACt4E,CAAC,GAAG,IAAI,CAAC8oC,QAAQ,CAAC9oC,CAAC,GAAG2tD,GAAG,IAAI4rB,QAAQ,GAAGM,MAAM,CAAC;MACxF,IAAIgB,OAAO,GAAG5oF,IAAI,CAACyN,KAAK,CAAC,CAACkzB,KAAK,CAAC9gC,CAAC,CAAC,CAACwmF,KAAK,CAAC7zE,CAAC,GAAG,IAAI,CAACqkC,QAAQ,CAACrkC,CAAC,GAAGkpD,GAAG,IAAI4rB,QAAQ,GAAGQ,MAAM,CAAC;MACxF,IAAIe,OAAO,GAAG7oF,IAAI,CAACyN,KAAK,CAAC,CAACkzB,KAAK,CAAC9gC,CAAC,CAAC,CAACwmF,KAAK,CAACxyE,CAAC,GAAG,IAAI,CAACgjC,QAAQ,CAAChjC,CAAC,GAAG6nD,GAAG,IAAI4rB,QAAQ,GAAGU,MAAM,CAAC;MACxF,IAAIc,OAAO,GAAG9oF,IAAI,CAACyN,KAAK,CAAC,CAACkzB,KAAK,CAAC9gC,CAAC,CAAC,CAACwmF,KAAK,CAACt4E,CAAC,GAAG,IAAI,CAAC8oC,QAAQ,CAAC9oC,CAAC,GAAG2tD,GAAG,IAAI4rB,QAAQ,GAAGM,MAAM,CAAC;MACxF,IAAImB,OAAO,GAAG/oF,IAAI,CAACyN,KAAK,CAAC,CAACkzB,KAAK,CAAC9gC,CAAC,CAAC,CAACwmF,KAAK,CAAC7zE,CAAC,GAAG,IAAI,CAACqkC,QAAQ,CAACrkC,CAAC,GAAGkpD,GAAG,IAAI4rB,QAAQ,GAAGQ,MAAM,CAAC;MACxF,IAAIkB,OAAO,GAAGhpF,IAAI,CAACyN,KAAK,CAAC,CAACkzB,KAAK,CAAC9gC,CAAC,CAAC,CAACwmF,KAAK,CAACxyE,CAAC,GAAG,IAAI,CAACgjC,QAAQ,CAAChjC,CAAC,GAAG6nD,GAAG,IAAI4rB,QAAQ,GAAGU,MAAM,CAAC;MAExFW,OAAO,GAAIA,OAAO,IAAI,CAAC,GAAIA,OAAO,GAAG,CAAC;MACtCC,OAAO,GAAIA,OAAO,IAAI,CAAC,GAAIA,OAAO,GAAG,CAAC;MACtCC,OAAO,GAAIA,OAAO,IAAI,CAAC,GAAIA,OAAO,GAAG,CAAC;MAEtCC,OAAO,GAAIA,OAAO,GAAGxB,QAAQ,GAAIwB,OAAO,GAAIxB,QAAQ,GAAG,CAAE;MACzDyB,OAAO,GAAIA,OAAO,GAAGzB,QAAQ,GAAIyB,OAAO,GAAIzB,QAAQ,GAAG,CAAE;MACzD0B,OAAO,GAAIA,OAAO,GAAG1B,QAAQ,GAAI0B,OAAO,GAAI1B,QAAQ,GAAG,CAAE;MAEzD,KAAK,IAAIzzE,CAAC,GAAGg1E,OAAO,EAAEh1E,CAAC,IAAIm1E,OAAO,EAAEn1E,CAAC,EAAE,EAAE;QACvC,KAAK,IAAIrB,CAAC,GAAGo2E,OAAO,EAAEp2E,CAAC,IAAIu2E,OAAO,EAAEv2E,CAAC,EAAE,EAAE;UACvC,KAAK,IAAIzE,CAAC,GAAG46E,OAAO,EAAE56E,CAAC,IAAI+6E,OAAO,EAAE/6E,CAAC,EAAE,EAAE;YACvC;YACA,MAAMk7E,QAAQ,GAAGl7E,CAAC,GAAGyE,CAAC,GAAGi1E,IAAI,GAAG5zE,CAAC,GAAG6zE,KAAK;YACzC;YACA;;YAEA;YACA,IAAI,IAAI,CAACT,UAAU,CAACgC,QAAQ,CAAC,GAAG,CAAC,EAAE;cACjC3uC,SAAS,CAAC6sC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,GAAGtnF,CAAC;cACnCy6C,SAAS,CAAC6sC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;cACvC,IAAI,CAACF,UAAU,CAACgC,QAAQ,CAAC,GAAG9B,YAAY;cACxCA,YAAY,EAAE;cACd;cACA;YACF;YACA;YACA,MAAM+B,SAAS,GAAG,IAAI,CAACjC,UAAU,CAACgC,QAAQ,CAAC;YAC3C,IAAI,CAAChC,UAAU,CAACgC,QAAQ,CAAC,GAAG9B,YAAY;YACxC7sC,SAAS,CAAC6sC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,GAAGtnF,CAAC;YACnCy6C,SAAS,CAAC6sC,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG+B,SAAS;YAC3C/B,YAAY,EAAE;UAChB,CAAC,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;;IAEF;IACA,IAAI,CAACH,UAAU,GAAGh1E,UAAU,CAAC0wC,IAAI,CAACpI,SAAS,CAAC;IAE5C,OAAO,CAAC;EACV;EAEA6uC,aAAaA,CAAA,EAAG;IACd,IAAI,CAACnC,UAAU,GAAG,IAAI;IACtB,IAAI,CAACC,UAAU,GAAG,IAAI;IAEtB,IAAI,CAAC9lD,MAAM,GAAG,IAAI;IAClB,IAAI,CAACioD,SAAS,GAAG,IAAI;IACrB,IAAI,CAACvyC,QAAQ,GAAG,IAAI;IACpB,IAAI,CAACC,QAAQ,GAAG,IAAI;EACtB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEuyC,kBAAkBA,CAAC3pC,KAAK,EAAElkB,OAAO,EAAE;IACjC;IACA,MAAM8tD,IAAI,GAAGtpF,IAAI,CAACyN,KAAK,CAAC,CAACiyC,KAAK,CAAC3xC,CAAC,GAAG,IAAI,CAAC8oC,QAAQ,CAAC9oC,CAAC,IAAI,IAAI,CAACw5E,SAAS,GAAG,IAAI,CAACM,OAAO,CAAC;IACpF,MAAM0B,IAAI,GAAGvpF,IAAI,CAACyN,KAAK,CAAC,CAACiyC,KAAK,CAACltC,CAAC,GAAG,IAAI,CAACqkC,QAAQ,CAACrkC,CAAC,IAAI,IAAI,CAAC+0E,SAAS,GAAG,IAAI,CAACQ,OAAO,CAAC;IACpF,MAAMyB,IAAI,GAAGxpF,IAAI,CAACyN,KAAK,CAAC,CAACiyC,KAAK,CAAC7rC,CAAC,GAAG,IAAI,CAACgjC,QAAQ,CAAChjC,CAAC,IAAI,IAAI,CAAC0zE,SAAS,GAAG,IAAI,CAACU,OAAO,CAAC;IACpF,MAAMgB,QAAQ,GAAGK,IAAI,GAAGC,IAAI,GAAG,IAAI,CAAChC,SAAS,GAAGiC,IAAI,GAAG,IAAI,CAACjC,SAAS,GAAG,IAAI,CAACA,SAAS;;IAEtF;IACA,MAAM5mD,KAAK,GAAG,IAAI,CAACQ,MAAM;IACzB,KAAK,IAAIsoD,GAAG,GAAG,IAAI,CAACxC,UAAU,CAACgC,QAAQ,CAAC,EAAEQ,GAAG,IAAI,CAAC,EAAEA,GAAG,GAAG,IAAI,CAACzC,UAAU,CAACyC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;MACtF,MAAMC,SAAS,GAAG,IAAI,CAAC1C,UAAU,CAACyC,GAAG,GAAG,CAAC,CAAC;MAC1CjuD,OAAO,CAACmF,KAAK,CAAC+oD,SAAS,CAAC,CAAC;IAC3B;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,cAAcA,CAACjqC,KAAK,EAAE;IACpB,IAAIkqC,OAAO,GAAG,IAAI;IAClB,IAAIC,QAAQ,GAAGvqF,MAAM,CAACwqF,SAAS;IAE/B,IAAI,CAACT,kBAAkB,CAAC3pC,KAAK,EAAG5zB,IAAI,IAAK;MACvC,MAAMssB,KAAK,GAAGsH,KAAK,CAAC7N,iBAAiB,CAAC/lB,IAAI,CAACu6D,KAAK,CAAC;MACjD,IAAIjuC,KAAK,GAAGyxC,QAAQ,EAAE;QACpBA,QAAQ,GAAGzxC,KAAK;QAChBwxC,OAAO,GAAG99D,IAAI;MAChB;IACF,CAAC,CAAC;IAEF,OAAO89D,OAAO;EAChB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEG,YAAYA,CAACC,WAAW,EAAEhT,QAAQ,EAAElR,OAAO,EAAE;IAC3C,MAAMhjE,IAAI,GAAG,IAAI;IACjB,IAAImnF,aAAa,GAAG,CAAC;IACrB,IAAI5gB,EAAE,GAAG,CAAC;IACV,IAAIC,EAAE,GAAG,CAAC;IACV,IAAIC,EAAE,GAAG,CAAC;IACV,IAAInxB,KAAK;IACT,IAAI8xC,QAAQ,GAAG,CAAC;IAChB,IAAIC,QAAQ,GAAG,CAAC;IAChB,IAAIC,QAAQ,GAAG,CAAC;IAChB,IAAIC,IAAI,GAAG,CAAC;IACZ,IAAIz3E,CAAC,GAAG,CAAC;IACT,MAAM03E,GAAG,GAAG,GAAG;IACf,MAAMC,GAAG,GAAG,GAAG;IAEf,MAAMC,YAAY,GAAG,IAAI,CAAChD,OAAO,GAAG8C,GAAG;IACvC,MAAMG,aAAa,GAAGD,YAAY,GAAGA,YAAY;IACjD,MAAME,QAAQ,GAAG,CAAC,IAAI,CAAClD,OAAO,GAAG+C,GAAG;;IAEpC;IACA;;IAEA,MAAMI,aAAa,GAAG,SAAAA,CAAU7+D,IAAI,EAAE;MACpC,MAAM4C,EAAE,GAAG26C,EAAE,GAAGv9C,IAAI,CAACu6D,KAAK,CAACt4E,CAAC;MAC5B,MAAM4gB,EAAE,GAAG26C,EAAE,GAAGx9C,IAAI,CAACu6D,KAAK,CAAC7zE,CAAC;MAC5B,MAAMoc,EAAE,GAAG26C,EAAE,GAAGz9C,IAAI,CAACu6D,KAAK,CAACxyE,CAAC;MAC5BukC,KAAK,GAAG1pB,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE;MACnC,IAAIwpB,KAAK,GAAGqyC,aAAa,EAAE;QACzB;MACF;;MAEA;MACA,MAAM/uB,GAAG,GAAG5vC,IAAI,CAACpR,MAAM,GAAG5X,IAAI,CAACikF,YAAY;MAC3CsD,IAAI,GAAGjyC,KAAK,GAAIsjB,GAAG,GAAGA,GAAI;MAC1B,IAAI2uB,IAAI,GAAG,GAAG,EAAE;QACdA,IAAI,GAAG,CAACA,IAAI;MACd;MACAz3E,CAAC,GAAG5S,IAAI,CAACw9E,GAAG,CAACkN,QAAQ,GAAGL,IAAI,CAAC;MAE7BH,QAAQ,IAAIx7D,EAAE,GAAG9b,CAAC;MAClBu3E,QAAQ,IAAIx7D,EAAE,GAAG/b,CAAC;MAClBw3E,QAAQ,IAAIx7D,EAAE,GAAGhc,CAAC;MAClBq3E,aAAa,EAAE;IACjB,CAAC;IAED,IAAIW,cAAc,GAAG,CAAC;IACtB;IACA,KAAK,IAAI/qF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmqF,WAAW,EAAEnqF,CAAC,EAAE,EAAE;MACpCwpE,EAAE,GAAG2N,QAAQ,CAACn3E,CAAC,CAAC,CAACkO,CAAC;MAClBu7D,EAAE,GAAG0N,QAAQ,CAACn3E,CAAC,CAAC,CAAC2S,CAAC;MAClB+2D,EAAE,GAAGyN,QAAQ,CAACn3E,CAAC,CAAC,CAACgU,CAAC;MAElBo2E,aAAa,GAAG,CAAC;MACjBC,QAAQ,GAAGC,QAAQ,GAAGC,QAAQ,GAAG,GAAG;MAEpC,IAAI,CAACf,kBAAkB,CAACrS,QAAQ,CAACn3E,CAAC,CAAC,EAAE8qF,aAAa,CAAC;MAEnDC,cAAc,GAAIX,aAAa,GAAGW,cAAc,GAAIX,aAAa,GAAGW,cAAc;;MAElF;MACAxyC,KAAK,GAAG8xC,QAAQ,GAAGA,QAAQ,GAAGC,QAAQ,GAAGA,QAAQ,GAAGC,QAAQ,GAAGA,QAAQ;MACvE,IAAIH,aAAa,GAAG,CAAC,EAAE;QACrBI,IAAI,GAAG,GAAG,GAAGrqF,IAAI,CAAC8xC,IAAI,CAACsG,KAAK,CAAC;QAC7B8xC,QAAQ,IAAIG,IAAI;QAChBF,QAAQ,IAAIE,IAAI;QAChBD,QAAQ,IAAIC,IAAI;MAClB;MACAvkB,OAAO,CAACjmE,CAAC,CAAC,CAACkO,CAAC,GAAGm8E,QAAQ;MACvBpkB,OAAO,CAACjmE,CAAC,CAAC,CAAC2S,CAAC,GAAG23E,QAAQ;MACvBrkB,OAAO,CAACjmE,CAAC,CAAC,CAACgU,CAAC,GAAGu2E,QAAQ;IACzB,CAAC,CAAC;;IAEF,OAAO,CAAC;EACV;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACES,WAAWA,CAACb,WAAW,EAAEhT,QAAQ,EAAE/S,MAAM,EAAE6mB,qBAAqB,EAAE;IAChE,MAAMhoF,IAAI,GAAG,IAAI;IACjB,IAAIumE,EAAE,GAAG,GAAG;IACZ,IAAIC,EAAE,GAAG,GAAG;IACZ,IAAIC,EAAE,GAAG,GAAG;IACZ,IAAI8gB,IAAI,GAAG,GAAG;IACd,IAAIz3E,CAAC,GAAG,GAAG;IACX,MAAMm4E,QAAQ,GAAG,GAAG;IAEpB,MAAMP,YAAY,GAAGM,qBAAqB;IAC1C,MAAML,aAAa,GAAGD,YAAY,GAAGA,YAAY;IAEjD,IAAIQ,WAAW,GAAG,EAAE;IACpB,IAAIjK,OAAO,GAAG,EAAE;IAChB,IAAIkK,UAAU,GAAG,CAAC;IAElB,MAAMC,YAAY,GAAG,SAAAA,CAAUp/D,IAAI,EAAE;MACnC,MAAM4C,EAAE,GAAG26C,EAAE,GAAGv9C,IAAI,CAACu6D,KAAK,CAACt4E,CAAC;MAC5B,MAAM4gB,EAAE,GAAG26C,EAAE,GAAGx9C,IAAI,CAACu6D,KAAK,CAAC7zE,CAAC;MAC5B,MAAMoc,EAAE,GAAG26C,EAAE,GAAGz9C,IAAI,CAACu6D,KAAK,CAACxyE,CAAC;MAC5B,MAAMukC,KAAK,GAAG1pB,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE;MACzC,IAAIwpB,KAAK,GAAGqyC,aAAa,EAAE;QACzB;MACF;;MAEA;MACA,MAAM/uB,GAAG,GAAG5vC,IAAI,CAACpR,MAAM,GAAG5X,IAAI,CAACikF,YAAY;MAC3CsD,IAAI,GAAGjyC,KAAK,GAAIsjB,GAAG,GAAGA,GAAI;MAC1B,IAAI2uB,IAAI,GAAG,GAAG,EAAE;QACdA,IAAI,GAAG,CAACA,IAAI;MACd;MACAz3E,CAAC,GAAG,GAAG,IAAIm4E,QAAQ,GAAGV,IAAI,CAAC;MAE3BW,WAAW,CAAC/mF,IAAI,CAAC,CAAC6nB,IAAI,CAACw6D,MAAM,EAAEx6D,IAAI,CAACy6D,MAAM,EAAEz6D,IAAI,CAAC06D,MAAM,CAAC,CAAC;MACzDzF,OAAO,CAAC98E,IAAI,CAAC2O,CAAC,CAAC,CAAC,CAAC;MACjBq4E,UAAU,IAAIr4E,CAAC,CAAC,CAAC;IACnB,CAAC;;IAED;IACA,KAAK,IAAI/S,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmqF,WAAW,EAAEnqF,CAAC,EAAE,EAAE;MACpCwpE,EAAE,GAAG2N,QAAQ,CAACn3E,CAAC,CAAC,CAACkO,CAAC;MAClBu7D,EAAE,GAAG0N,QAAQ,CAACn3E,CAAC,CAAC,CAAC2S,CAAC;MAClB+2D,EAAE,GAAGyN,QAAQ,CAACn3E,CAAC,CAAC,CAACgU,CAAC;MAElBm3E,WAAW,GAAG,EAAE;MAChBjK,OAAO,GAAG,EAAE;MACZkK,UAAU,GAAG,CAAC;MAEd,IAAI,CAAC5B,kBAAkB,CAACrS,QAAQ,CAACn3E,CAAC,CAAC,EAAEqrF,YAAY,CAAC;;MAElD;MACA,KAAK,IAAIz3E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGu3E,WAAW,CAAClzF,MAAM,EAAE,EAAE2b,CAAC,EAAE;QAC3C,MAAM03E,gBAAgB,GAAGpK,OAAO,CAACttE,CAAC,CAAC,GAAGw3E,UAAU;QAChDhnB,MAAM,CAACpkE,CAAC,CAAC,CAACkO,CAAC,IAAIi9E,WAAW,CAACv3E,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG03E,gBAAgB;QACnDlnB,MAAM,CAACpkE,CAAC,CAAC,CAAC2S,CAAC,IAAIw4E,WAAW,CAACv3E,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG03E,gBAAgB;QACnDlnB,MAAM,CAACpkE,CAAC,CAAC,CAACgU,CAAC,IAAIm3E,WAAW,CAACv3E,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG03E,gBAAgB;MACrD;IACF,CAAC,CAAC;IACF,OAAO,CAAC;EACV;AACF;AACA,wEAAexE,sBAAsB,E;;AC5WN;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMyE,aAAa,CAAC;EAClBjgF,WAAWA,CAACkgF,cAAc,EAAEC,eAAe,EAAEC,gBAAgB,EAAE;IAC7D,IAAI,CAACC,eAAe,GAAGH,cAAc;IACrC,IAAI,CAACI,gBAAgB,GAAGH,eAAe;IACvC,IAAI,CAAClC,SAAS,GAAG,IAAIjoF,KAAK,CAACkqF,cAAc,CAAC;IAC1C,IAAI,CAAC3mB,QAAQ,GAAG,IAAIvjE,KAAK,CAACkqF,cAAc,CAAC;IACzC,IAAI,CAACvoB,OAAO,GAAG,IAAI;IACnB,IAAIyoB,gBAAgB,EAAE;MACpB,IAAI,CAACzoB,OAAO,GAAG,IAAI3hE,KAAK,CAACkqF,cAAc,CAAC;IAC1C;IACA,IAAI,CAACnrB,QAAQ,GAAG,IAAI/+D,KAAK,CAACmqF,eAAe,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,IAAI,CAAC9Y,YAAY,GAAG,CAAC;IACrB,IAAI,CAACD,aAAa,GAAG,CAAC;IAEtB,IAAI1yE,CAAC;IACL,KAAKA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwrF,cAAc,EAAExrF,CAAC,EAAE,EAAE;MACnC,IAAI,CAACupF,SAAS,CAACvpF,CAAC,CAAC,GAAG,IAAIugC,iGAAa,CAAC,CAAC;MACvC,IAAI,CAACskC,QAAQ,CAAC7kE,CAAC,CAAC,GAAG,IAAIugC,iGAAa,CAAC,CAAC;IACxC;IACA,KAAKvgC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyrF,eAAe,IAAI,CAAC,GAAG,CAAC,CAAC,EAAEzrF,CAAC,EAAE,EAAE;MAC9C,IAAI,CAACqgE,QAAQ,CAACrgE,CAAC,CAAC,GAAG,CAAC,CAAC;IACvB;IACA,IAAI0rF,gBAAgB,EAAE;MACpB,KAAK1rF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwrF,cAAc,EAAExrF,CAAC,EAAE,EAAE;QACnC,IAAI,CAACijE,OAAO,CAACjjE,CAAC,CAAC,GAAG,IAAIugC,iGAAa,CAAC,CAAC;MACvC;IACF;EACF;EAEAoV,OAAOA,CAAA,EAAG;IACR,IAAI,CAAC4zC,SAAS,GAAG,IAAI;IACrB,IAAI,CAAC1kB,QAAQ,GAAG,IAAI;IACpB,IAAI,CAACxE,QAAQ,GAAG,IAAI;EACtB;AACF;AACA,+DAAekrB,aAAa,E;;AC7CG;AACuB;AACM;AACE;AACN;AACZ;AACd;AACE;AAEhC,MAAMvpB,+BAAU,GAAG,CAAC;AACpB,MAAM6pB,SAAS,GAAG,KAAK;AACvB,MAAM;EAAE5vD,OAAOA,8BAAAA;AAAC,CAAC,GAAGkgD,IAAI;;AAExB;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM2P,oBAAoB,SAAS1a,6BAAkB,CAAC;EACpDzuB,MAAMA,CAAA,EAAG;IACP;IACA,IAAI,CAACopC,WAAW,CAAC,CAAC;IAClB,MAAMC,MAAM,GAAG,IAAI,CAACC,MAAM,CAAC,CAAC;IAC5B,IAAI,CAACt2C,OAAO,CAAC,CAAC;IACd,IAAI,CAACu2C,QAAQ,CAACF,MAAM,CAAC;EACvB;EAEAE,QAAQA,CAACF,MAAM,EAAE;IACf,IAAI5nB,MAAM,GAAG,IAAI;IACjB,MAAM2E,SAAS,GAAGhrE,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI45E,MAAM,CAACrZ,YAAY,CAAC;IAClF,MAAM1M,OAAO,GAAGloE,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI45E,MAAM,CAACrZ,YAAY,CAAC;IAChF,IAAIqZ,MAAM,CAAC/oB,OAAO,KAAK,IAAI,EAAE;MAC3BmB,MAAM,GAAGrmE,KAAK,CAACsoB,aAAa,CAACjU,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI45E,MAAM,CAACrZ,YAAY,CAAC;IAC3E;IACA,MAAMroD,OAAO,GAAGvsB,KAAK,CAACsoB,aAAa,CAACs/C,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,IAAIqmB,MAAM,CAACtZ,aAAa,CAAC;IAEhF,KAAK,IAAI1yE,CAAC,GAAG,CAAC,EAAE4T,CAAC,GAAG,CAAC,EAAE5T,CAAC,GAAGgsF,MAAM,CAACrZ,YAAY,EAAE3yE,CAAC,EAAE,EAAE;MACnD+oE,SAAS,CAACn1D,CAAC,GAAG,CAAC,CAAC,GAAIo4E,MAAM,CAACzC,SAAS,CAACvpF,CAAC,CAAC,CAACkO,CAAE;MAC1C66D,SAAS,CAACn1D,CAAC,GAAG,CAAC,CAAC,GAAIo4E,MAAM,CAACzC,SAAS,CAACvpF,CAAC,CAAC,CAAC2S,CAAE;MAC1Co2D,SAAS,CAACn1D,CAAC,GAAG,CAAC,CAAC,GAAIo4E,MAAM,CAACzC,SAAS,CAACvpF,CAAC,CAAC,CAACgU,CAAE;MAC1CiyD,OAAO,CAACryD,CAAC,GAAG,CAAC,CAAC,GAAGo4E,MAAM,CAACnnB,QAAQ,CAAC7kE,CAAC,CAAC,CAACkO,CAAC;MACrC+3D,OAAO,CAACryD,CAAC,GAAG,CAAC,CAAC,GAAGo4E,MAAM,CAACnnB,QAAQ,CAAC7kE,CAAC,CAAC,CAAC2S,CAAC;MACrCszD,OAAO,CAACryD,CAAC,GAAG,CAAC,CAAC,GAAGo4E,MAAM,CAACnnB,QAAQ,CAAC7kE,CAAC,CAAC,CAACgU,CAAC;MACrCJ,CAAC,IAAI,CAAC;IACR;IACA,IAAIwwD,MAAM,KAAK,IAAI,EAAE;MACnB,KAAK,IAAIpkE,CAAC,GAAG,CAAC,EAAE4T,CAAC,GAAG,CAAC,EAAE5T,CAAC,GAAGgsF,MAAM,CAACrZ,YAAY,EAAE3yE,CAAC,EAAE,EAAE4T,CAAC,IAAI,CAAC,EAAE;QAC3DwwD,MAAM,CAACxwD,CAAC,GAAG,CAAC,CAAC,GAAGo4E,MAAM,CAAC/oB,OAAO,CAACjjE,CAAC,CAAC,CAACkO,CAAC;QACnCk2D,MAAM,CAACxwD,CAAC,GAAG,CAAC,CAAC,GAAGo4E,MAAM,CAAC/oB,OAAO,CAACjjE,CAAC,CAAC,CAAC2S,CAAC;QACnCyxD,MAAM,CAACxwD,CAAC,GAAG,CAAC,CAAC,GAAGo4E,MAAM,CAAC/oB,OAAO,CAACjjE,CAAC,CAAC,CAACgU,CAAC;MACrC;IACF;IAEA,MAAMm4E,OAAO,GAAGH,MAAM,CAACtZ,aAAa,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,KAAK,IAAI1yE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmsF,OAAO,EAAEnsF,CAAC,EAAE,EAAE;MAChCsqB,OAAO,CAACtqB,CAAC,CAAC,GAAGgsF,MAAM,CAAC3rB,QAAQ,CAACrgE,CAAC,CAAC;IACjC;IAEA,IAAI,CAAC8lE,QAAQ,CAAC,IAAIvlC,yGAAqB,CAACjW,OAAO,EAAE,CAAC,CAAC,CAAC;IACpD,IAAI,CAACrO,YAAY,CAAC,UAAU,EAAE,IAAIskB,yGAAqB,CAACwoC,SAAS,EAAE,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC9sD,YAAY,CAAC,QAAQ,EAAE,IAAIskB,yGAAqB,CAAC0lC,OAAO,EAAE,CAAC,CAAC,CAAC;IAClE,IAAI,CAAChqD,YAAY,CAAC,OAAO,EAAE,IAAIskB,yGAAqB,CAAC6jC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChE,IAAI,CAACxC,kBAAkB,CAAC,CAAC;IACzB,IAAI,CAACC,qBAAqB,CAAC,CAAC;IAE5BmqB,MAAM,CAACr2C,OAAO,CAAC,CAAC;EAClB;EAEAy2C,qBAAqBA,CAACnQ,YAAY,EAAEoQ,YAAY,EAAE;IAChD,MAAM;MAAEvrD,KAAK;MAAEsjC;IAAO,CAAC,GAAG6X,YAAY;IACtC,KAAK,IAAIj8E,CAAC,GAAG,CAAC,EAAEq3C,QAAQ,GAAGvW,KAAK,CAAC7oC,MAAM,EAAE+H,CAAC,GAAGq3C,QAAQ,EAAEr3C,CAAC,EAAE,EAAE;MAC1D,MAAMohD,OAAO,GAAGtgB,KAAK,CAAC9gC,CAAC,CAAC,CAACyb,QAAQ;MACjC,MAAM;QAAEZ;MAAO,CAAC,GAAGimB,KAAK,CAAC9gC,CAAC,CAAC,CAACkY,OAAO;MACnCm0E,YAAY,CAACrsF,CAAC,CAAC,GAAG,IAAIsmF,gCAAqB,CAACllC,OAAO,EAAEvmC,MAAM,CAAC;MAC5D,MAAMyxE,EAAE,GAAGxrD,KAAK,CAAC9gC,CAAC,CAAC,CAACkY,OAAO,CAACiK,MAAM;MAClCkqE,YAAY,CAACrsF,CAAC,CAAC,CAAC4mF,QAAQ,GAAG,IAAI,CAACt8E,OAAO,CAACgiF,EAAE,CAAC;MAC3C,IAAI/H,IAAI,GAAGviB,+BAAU,GAAGhiE,CAAC;MACzBqsF,YAAY,CAACrsF,CAAC,CAAC,CAACymF,MAAM,GAAGriB,MAAM,CAACmgB,IAAI,EAAE,CAAC;MACvC8H,YAAY,CAACrsF,CAAC,CAAC,CAAC0mF,MAAM,GAAGtiB,MAAM,CAACmgB,IAAI,EAAE,CAAC;MACvC8H,YAAY,CAACrsF,CAAC,CAAC,CAAC2mF,MAAM,GAAGviB,MAAM,CAACmgB,IAAI,CAAC;MACrC8H,YAAY,CAACrsF,CAAC,CAAC,CAAC6mF,OAAO,GAAG/lD,KAAK,CAAC9gC,CAAC,CAAC;IACpC;EACF;EAEAisF,MAAMA,CAAA,EAAG;IACP,OAAO,IAAI,CAACD,MAAM;EACpB;EAEAr2C,OAAOA,CAAA,EAAG;IACR,IAAI,CAAC7U,KAAK,GAAG,IAAI;IAEjB,IAAI,CAACyrD,SAAS,GAAG,IAAI;IACrB,IAAI,CAACC,WAAW,GAAG,IAAI;EACzB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,cAAcA,CAAC3rD,KAAK,EAAEimD,OAAO,EAAEC,OAAO,EAAE;IACtC,MAAM0F,MAAM,GAAG,UAAU;IAEzB3F,OAAO,CAAC74E,CAAC,GAAG64E,OAAO,CAACp0E,CAAC,GAAGo0E,OAAO,CAAC/yE,CAAC,GAAG04E,MAAM;IAC1C1F,OAAO,CAAC94E,CAAC,GAAG84E,OAAO,CAACr0E,CAAC,GAAGq0E,OAAO,CAAChzE,CAAC,GAAG,CAAC,GAAG04E,MAAM;IAE9C,MAAMC,YAAY,GAAG,IAAI,CAACt/D,WAAW,GAAG,IAAI,CAACu/D,eAAe;IAC5D,IAAIC,MAAM,GAAG,GAAG;IAChB,KAAK,IAAI7sF,CAAC,GAAG,CAAC,EAAE8sF,GAAG,GAAGhsD,KAAK,CAAC7oC,MAAM,EAAE+H,CAAC,GAAG8sF,GAAG,EAAE9sF,CAAC,EAAE,EAAE;MAChD,MAAMohD,OAAO,GAAGtgB,KAAK,CAAC9gC,CAAC,CAAC,CAACwmF,KAAK;MAC9B,MAAM3qB,GAAG,GAAG/6B,KAAK,CAAC9gC,CAAC,CAAC,CAAC6a,MAAM,GAAG8xE,YAAY;MAC1CE,MAAM,GAAIhxB,GAAG,GAAGgxB,MAAM,GAAIhxB,GAAG,GAAGgxB,MAAM;MACtC,IAAIzrC,OAAO,CAAClzC,CAAC,GAAG2tD,GAAG,GAAGkrB,OAAO,CAAC74E,CAAC,EAAE;QAC/B64E,OAAO,CAAC74E,CAAC,GAAGkzC,OAAO,CAAClzC,CAAC,GAAG2tD,GAAG;MAC7B;MACA,IAAIza,OAAO,CAACzuC,CAAC,GAAGkpD,GAAG,GAAGkrB,OAAO,CAACp0E,CAAC,EAAE;QAC/Bo0E,OAAO,CAACp0E,CAAC,GAAGyuC,OAAO,CAACzuC,CAAC,GAAGkpD,GAAG;MAC7B;MACA,IAAIza,OAAO,CAACptC,CAAC,GAAG6nD,GAAG,GAAGkrB,OAAO,CAAC/yE,CAAC,EAAE;QAC/B+yE,OAAO,CAAC/yE,CAAC,GAAGotC,OAAO,CAACptC,CAAC,GAAG6nD,GAAG;MAC7B;MACA,IAAIza,OAAO,CAAClzC,CAAC,GAAG2tD,GAAG,GAAGmrB,OAAO,CAAC94E,CAAC,EAAE;QAC/B84E,OAAO,CAAC94E,CAAC,GAAGkzC,OAAO,CAAClzC,CAAC,GAAG2tD,GAAG;MAC7B;MACA,IAAIza,OAAO,CAACzuC,CAAC,GAAGkpD,GAAG,GAAGmrB,OAAO,CAACr0E,CAAC,EAAE;QAC/Bq0E,OAAO,CAACr0E,CAAC,GAAGyuC,OAAO,CAACzuC,CAAC,GAAGkpD,GAAG;MAC7B;MACA,IAAIza,OAAO,CAACptC,CAAC,GAAG6nD,GAAG,GAAGmrB,OAAO,CAAChzE,CAAC,EAAE;QAC/BgzE,OAAO,CAAChzE,CAAC,GAAGotC,OAAO,CAACptC,CAAC,GAAG6nD,GAAG;MAC7B;IACF;IACAkrB,OAAO,CAAC74E,CAAC,IAAI2+E,MAAM;IACnB9F,OAAO,CAACp0E,CAAC,IAAIk6E,MAAM;IACnB9F,OAAO,CAAC/yE,CAAC,IAAI64E,MAAM;IACnB7F,OAAO,CAAC94E,CAAC,IAAI2+E,MAAM;IACnB7F,OAAO,CAACr0E,CAAC,IAAIk6E,MAAM;IACnB7F,OAAO,CAAChzE,CAAC,IAAI64E,MAAM;EACrB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEE,cAAcA,CAAChG,OAAO,EAAEC,OAAO,EAAE94E,CAAC,EAAEyE,CAAC,EAAEqB,CAAC,EAAEg5E,SAAS,EAAEC,IAAI,EAAE;IACzD,MAAMC,KAAK,GAAG,GAAG,IAAIF,SAAS,GAAG,GAAG,CAAC;IACrC,MAAMG,EAAE,GAAGj/E,CAAC,GAAGg/E,KAAK;IACpB,MAAME,EAAE,GAAGz6E,CAAC,GAAGu6E,KAAK;IACpB,MAAMG,EAAE,GAAGr5E,CAAC,GAAGk5E,KAAK;IAEpBD,IAAI,CAAC/+E,CAAC,GAAG64E,OAAO,CAAC74E,CAAC,IAAI,GAAG,GAAGi/E,EAAE,CAAC,GAAGnG,OAAO,CAAC94E,CAAC,GAAGi/E,EAAE;IAChDF,IAAI,CAACt6E,CAAC,GAAGo0E,OAAO,CAACp0E,CAAC,IAAI,GAAG,GAAGy6E,EAAE,CAAC,GAAGpG,OAAO,CAACr0E,CAAC,GAAGy6E,EAAE;IAChDH,IAAI,CAACj5E,CAAC,GAAG+yE,OAAO,CAAC/yE,CAAC,IAAI,GAAG,GAAGq5E,EAAE,CAAC,GAAGrG,OAAO,CAAChzE,CAAC,GAAGq5E,EAAE;EAClD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,cAAcA,CAACz3C,MAAM,EAAEC,MAAM,EAAEy3C,IAAI,EAAEC,IAAI,EAAEC,eAAe,EAAER,IAAI,EAAE;IAChE,IAAIM,IAAI,CAAC13C,MAAM,CAAC,GAAG03C,IAAI,CAACz3C,MAAM,CAAC,EAAE;MAC/B,MAAM43C,WAAW,GAAG,EAAE;MACtB,MAAMjgF,CAAC,GAAG,CAAC,CAAC,GAAG+/E,IAAI,CAAC/b,kBAAkB,CAACgc,eAAe,GAAGC,WAAW,GAAG73C,MAAM,CAAC,KACzE23C,IAAI,CAAC/b,kBAAkB,CAACgc,eAAe,GAAGC,WAAW,GAAG53C,MAAM,CAAC,GAC9D03C,IAAI,CAAC/b,kBAAkB,CAACgc,eAAe,GAAGC,WAAW,GAAG73C,MAAM,CAAC,CAAC;MACtE,MAAMovC,EAAE,GAAGuI,IAAI,CAAC/b,kBAAkB,CAACgc,eAAe,GAAG53C,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;MAC1E,MAAMqvC,EAAE,GAAGsI,IAAI,CAAC/b,kBAAkB,CAACgc,eAAe,GAAG53C,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;MAC1E,MAAMsvC,EAAE,GAAGqI,IAAI,CAAC/b,kBAAkB,CAACgc,eAAe,GAAG53C,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;MAC1E,MAAM83C,EAAE,GAAGH,IAAI,CAAC/b,kBAAkB,CAACgc,eAAe,GAAG33C,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;MAC1E,MAAM83C,EAAE,GAAGJ,IAAI,CAAC/b,kBAAkB,CAACgc,eAAe,GAAG33C,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;MAC1E,MAAM+3C,EAAE,GAAGL,IAAI,CAAC/b,kBAAkB,CAACgc,eAAe,GAAG33C,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;MAE1Em3C,IAAI,CAAC/+E,CAAC,GAAG+2E,EAAE,IAAI,GAAG,GAAGx3E,CAAC,CAAC,GAAGkgF,EAAE,GAAGlgF,CAAC;MAChCw/E,IAAI,CAACt6E,CAAC,GAAGuyE,EAAE,IAAI,GAAG,GAAGz3E,CAAC,CAAC,GAAGmgF,EAAE,GAAGngF,CAAC;MAChCw/E,IAAI,CAACj5E,CAAC,GAAGmxE,EAAE,IAAI,GAAG,GAAG13E,CAAC,CAAC,GAAGogF,EAAE,GAAGpgF,CAAC;IAClC;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEqgF,iBAAiBA,CAACC,EAAE,EAAE/zC,EAAE,EAAEC,EAAE,EAAE;IAC5B,MAAM+zC,EAAE,GAAG,IAAI,CAACC,UAAU,CAACnE,cAAc,CAACiE,EAAE,CAAC;IAC7C,MAAMG,EAAE,GAAG,IAAI,CAACD,UAAU,CAACnE,cAAc,CAAC9vC,EAAE,CAAC;IAC7C,MAAMm0C,EAAE,GAAG,IAAI,CAACF,UAAU,CAACnE,cAAc,CAAC7vC,EAAE,CAAC;IAC7C,IAAI+zC,EAAE,KAAK,IAAI,IAAIE,EAAE,KAAK,IAAI,IAAIC,EAAE,KAAK,IAAI,IACxCH,EAAE,CAACnH,OAAO,KAAK,IAAI,IAAIqH,EAAE,CAACrH,OAAO,KAAK,IAAI,IAAIsH,EAAE,CAACtH,OAAO,KAAK,IAAI,EAAE;MACtE,OAAO,KAAK;IACd;IAEA,OAAO,IAAI,CAAC5O,kBAAkB,CAAClpC,YAAY,CAACi/C,EAAE,CAACnH,OAAO,CAAC,IAClD,IAAI,CAAC5O,kBAAkB,CAAClpC,YAAY,CAACm/C,EAAE,CAACrH,OAAO,CAAC,IAChD,IAAI,CAAC5O,kBAAkB,CAAClpC,YAAY,CAACo/C,EAAE,CAACtH,OAAO,CAAC;EACvD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEuH,WAAWA,CAACL,EAAE,EAAE/zC,EAAE,EAAEC,EAAE,EAAE;IACtB,IAAI,IAAI,CAACg+B,kBAAkB,IAAI,CAAC,IAAI,CAAC6V,iBAAiB,CAACC,EAAE,EAAE/zC,EAAE,EAAEC,EAAE,CAAC,EAAE;MAClE,OAAO,IAAI;IACb;IAEA,MAAMwiB,GAAG,GAAG,IAAI,CAACuvB,MAAM;IAEvB,IAAIvvB,GAAG,CAACiW,aAAa,IAAI,IAAI,CAAC+Y,eAAe,EAAE;MAC7C,OAAO,KAAK;IACd;;IAEA;IACA,MAAM4C,SAAS,GAAG,IAAI,CAACC,cAAc,CAAC7xB,GAAG,EAAEsxB,EAAE,CAAC;IAC9C,MAAMQ,SAAS,GAAG,IAAI,CAACD,cAAc,CAAC7xB,GAAG,EAAEziB,EAAE,CAAC;IAC9C,MAAMw0C,SAAS,GAAG,IAAI,CAACF,cAAc,CAAC7xB,GAAG,EAAExiB,EAAE,CAAC;IAC9C,IAAI,CAACo0C,SAAS,GAAGE,SAAS,GAAGC,SAAS,IAAI,CAAC,EAAE;MAC3C,OAAO,KAAK;IACd;IAEA,MAAMC,GAAG,GAAG,CAAC,GAAGhyB,GAAG,CAACiW,aAAa;IACjCjW,GAAG,CAAC4D,QAAQ,CAACouB,GAAG,GAAG,CAAC,CAAC,GAAGJ,SAAS;IACjC5xB,GAAG,CAAC4D,QAAQ,CAACouB,GAAG,GAAG,CAAC,CAAC,GAAGF,SAAS;IACjC9xB,GAAG,CAAC4D,QAAQ,CAACouB,GAAG,GAAG,CAAC,CAAC,GAAGD,SAAS;IACjC/xB,GAAG,CAACiW,aAAa,EAAE;IACnB,OAAO,IAAI;EACb;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEgc,mBAAmBA,CAACC,OAAO,EAAE5H,OAAO,EAAEC,OAAO,EAAElsE,OAAO,EAAE8zE,SAAS,EAAEpB,IAAI,EAAE;IACvE,MAAMhb,OAAO,GAAG,EAAE;IAClB,MAAMqc,SAAS,GAAG,CAAC;IACnB,MAAMpH,QAAQ,GAAGkH,OAAO,GAAG,CAAC;IAC5B,MAAM/G,IAAI,GAAG+G,OAAO;IACpB,MAAM9G,KAAK,GAAG8G,OAAO,GAAGA,OAAO;IAE/B,MAAMG,OAAO,GAAG,IAAIxtF,KAAK,CAACkxE,OAAO,CAAC;IAClC,KAAK,IAAIxyE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwyE,OAAO,EAAExyE,CAAC,EAAE,EAAE;MAChC8uF,OAAO,CAAC9uF,CAAC,CAAC,GAAG,IAAIugC,iGAAa,CAAC,CAAC;IAClC;IACA,MAAMgtD,IAAI,GAAG,EAAE;IACf,KAAK,IAAIvtF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6uF,SAAS,EAAE7uF,CAAC,EAAE,EAAE;MAClCutF,IAAI,CAACvtF,CAAC,CAAC,GAAG,GAAG;IACf;IACA,MAAM+uF,OAAO,GAAG,IAAIxuD,iGAAa,CAAC,CAAC;IACnC,IAAIyuD,OAAO,GAAG,CAAC;IACf,IAAIC,IAAI,GAAG,CAAC;IACZ,KAAK,IAAIt8E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG80E,QAAQ,EAAE90E,CAAC,EAAE,EAAEs8E,IAAI,IAAIpH,KAAK,EAAE;MAChD,IAAIqH,IAAI,GAAG,CAAC;MACZ,KAAK,IAAIl7E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyzE,QAAQ,EAAEzzE,CAAC,EAAE,EAAEk7E,IAAI,IAAItH,IAAI,EAAE;QAC/C,KAAK,IAAI15E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGu5E,QAAQ,EAAEv5E,CAAC,EAAE,EAAE;UACjC,IAAI,CAACs/E,IAAI,CAAC9b,eAAe,CAACsd,OAAO,CAAC,EAAE;YAClC;YACAA,OAAO,EAAE;YACT;UACF;UACA,MAAMrd,UAAU,GAAG6b,IAAI,CAAC7b,UAAU,CAACqd,OAAO,CAAC;UAE3C,IAAI,CAACjC,cAAc,CAAChG,OAAO,EAAEC,OAAO,EAAE94E,CAAC,EAAEyE,CAAC,EAAEqB,CAAC,EAAE26E,OAAO,EAAEI,OAAO,CAAC;UAEhE,MAAMI,cAAc,GAAGH,OAAO,IAAI,CAAC,IAAK,CAAC,GAAG,CAAE,CAAC;UAC/C,KAAK,IAAIhvF,CAAC,GAAG,CAAC,EAAE4T,CAAC,GAAG,CAAC,EAAE5T,CAAC,GAAG6uF,SAAS,EAAE7uF,CAAC,EAAE,EAAE;YACzCwtF,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAGv7E,CAAC,EAAE,CAAC,GAAGm7E,OAAO,CAAC7gF,CAAC;YACzDs/E,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAGv7E,CAAC,EAAE,CAAC,GAAGm7E,OAAO,CAACp8E,CAAC;YACzD66E,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAGv7E,CAAC,EAAE,CAAC,GAAGm7E,OAAO,CAAC/6E,CAAC;UAC3D;UAEAw5E,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAG,CAAC,CAAC,IAAIP,SAAS,CAAC1gF,CAAC;UAC1Ds/E,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC,IAAIP,SAAS,CAAC1gF,CAAC;UAC9Ds/E,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC,IAAIP,SAAS,CAAC1gF,CAAC;UAC9Ds/E,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC,IAAIP,SAAS,CAAC1gF,CAAC;UAE9Ds/E,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAIP,SAAS,CAAC56E,CAAC;UAClEw5E,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAIP,SAAS,CAAC56E,CAAC;UAClEw5E,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAIP,SAAS,CAAC56E,CAAC;UAClEw5E,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAIP,SAAS,CAAC56E,CAAC;UAElEw5E,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAIP,SAAS,CAACj8E,CAAC;UAClE66E,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAIP,SAAS,CAACj8E,CAAC;UAClE66E,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAIP,SAAS,CAACj8E,CAAC;UAClE66E,IAAI,CAAC/b,kBAAkB,CAAC0d,cAAc,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAIP,SAAS,CAACj8E,CAAC;;UAElE;UACA,MAAMy8E,SAAS,GAAGD,cAAc,GAAG,EAAE;UACrC,KAAK,IAAInvF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6uF,SAAS,EAAE,EAAE7uF,CAAC,EAAE;YAClCutF,IAAI,CAACvtF,CAAC,CAAC,GAAIwtF,IAAI,CAAC/b,kBAAkB,CAAC2d,SAAS,GAAGpvF,CAAC,CAAC,GAAG,GAAG,GAAI,CAAC,GAAG,CAAC;UAClE;UAEA,IAAI,CAACstF,cAAc,CAAC,CAAC,EAAE,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAE2B,cAAc,EAAEL,OAAO,CAAC,CAAC,CAAC,CAAC;UACjE,IAAI,CAACxB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAE2B,cAAc,EAAEL,OAAO,CAAC,CAAC,CAAC,CAAC;UACjE,IAAI,CAACxB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAE2B,cAAc,EAAEL,OAAO,CAAC,CAAC,CAAC,CAAC;UACjE,IAAI,CAACxB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAE2B,cAAc,EAAEL,OAAO,CAAC,CAAC,CAAC,CAAC;UAEjE,IAAI,CAACxB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAE2B,cAAc,EAAEL,OAAO,CAAC,CAAC,CAAC,CAAC;UACjE,IAAI,CAACxB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAE2B,cAAc,EAAEL,OAAO,CAAC,CAAC,CAAC,CAAC;UACjE,IAAI,CAACxB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAE2B,cAAc,EAAEL,OAAO,CAAC,CAAC,CAAC,CAAC;UACjE,IAAI,CAACxB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAE2B,cAAc,EAAEL,OAAO,CAAC,CAAC,CAAC,CAAC;UAEjE,IAAI,CAACxB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAE2B,cAAc,EAAEL,OAAO,CAAC,CAAC,CAAC,CAAC;UACjE,IAAI,CAACxB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAE2B,cAAc,EAAEL,OAAO,CAAC,CAAC,CAAC,CAAC;UACjE,IAAI,CAACxB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAE2B,cAAc,EAAEL,OAAO,CAAC,EAAE,CAAC,CAAC;UAClE,IAAI,CAACxB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAEC,IAAI,EAAEC,IAAI,EAAE2B,cAAc,EAAEL,OAAO,CAAC,EAAE,CAAC,CAAC;UAElE,MAAMO,IAAI,GAAG1d,UAAU,IAAI,CAAC,IAAK,CAAC,GAAG,CAAE,CAAC;UACxC,KAAK,IAAI2d,MAAM,GAAG,CAAC,EAAEC,MAAM,GAAG,CAAC,EAAED,MAAM,GAAI,CAAC,GAAG,CAAC,GAAG,CAAE,EAAEA,MAAM,EAAE,EAAEC,MAAM,IAAI,CAAC,EAAE;YAC5E;YACA,MAAM7U,EAAE,GAAG8S,IAAI,CAACzb,oBAAoB,CAACsd,IAAI,GAAGE,MAAM,CAAC;YACnD,IAAI7U,EAAE,GAAG,CAAC,EAAE;cACV;YACF;YACA,MAAMx+B,EAAE,GAAGsxC,IAAI,CAACzb,oBAAoB,CAACsd,IAAI,GAAGE,MAAM,GAAG,CAAC,CAAC;YACvD,MAAMpzC,EAAE,GAAGqxC,IAAI,CAACzb,oBAAoB,CAACsd,IAAI,GAAGE,MAAM,GAAG,CAAC,CAAC;YAEvD,IAAI,CAAC,IAAI,CAACnB,WAAW,CAACU,OAAO,CAACpU,EAAE,CAAC,EAAEoU,OAAO,CAAC5yC,EAAE,CAAC,EAAE4yC,OAAO,CAAC3yC,EAAE,CAAC,CAAC,EAAE;cAC5D,OAAO,CAAC,GAAG,CAAC;YACd;UACF,CAAC,CAAC;;UAEF;UACA6yC,OAAO,EAAE;QACX,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IACF,OAAO,CAAC;EACV;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEQ,sBAAsBA,CAAC5H,IAAI,EAAEH,QAAQ,EAAE3sE,OAAO,EAAE0yE,IAAI,EAAE;IACpD,MAAM3F,KAAK,GAAGD,IAAI,GAAGA,IAAI;IACzB,MAAMiH,SAAS,GAAG,CAAC;IACnB,IAAIY,mBAAmB,GAAG,CAAC;IAE3B,IAAIT,OAAO,GAAG,CAAC;IACf,IAAIC,IAAI,GAAG,CAAC;IACZ,KAAK,IAAIt8E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG80E,QAAQ,EAAE90E,CAAC,EAAE,EAAEs8E,IAAI,IAAIpH,KAAK,EAAE;MAChD,IAAIqH,IAAI,GAAG,CAAC;MACZ,KAAK,IAAIl7E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyzE,QAAQ,EAAEzzE,CAAC,EAAE,EAAEk7E,IAAI,IAAItH,IAAI,EAAE;QAC/C,KAAK,IAAI15E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGu5E,QAAQ,EAAEv5E,CAAC,EAAE,EAAE;UACjC,MAAMwhF,eAAe,GAAGV,OAAO,IAAI,CAAC,IAAK,CAAC,GAAG,CAAE,CAAC,GAAG,EAAE;UACrD,MAAMW,SAAS,GAAGzhF,CAAC,GAAGghF,IAAI,GAAGD,IAAI;UAEjCzB,IAAI,CAAC/b,kBAAkB,CAACie,eAAe,CAAC,GAAG50E,OAAO,CAAC60E,SAAS,CAAC;UAC7DnC,IAAI,CAAC/b,kBAAkB,CAACie,eAAe,GAAG,CAAC,CAAC,GAAG50E,OAAO,CAAC60E,SAAS,GAAG,CAAC,CAAC;UACrEnC,IAAI,CAAC/b,kBAAkB,CAACie,eAAe,GAAG,CAAC,CAAC,GAAG50E,OAAO,CAAC60E,SAAS,GAAG/H,IAAI,GAAG,CAAC,CAAC;UAC5E4F,IAAI,CAAC/b,kBAAkB,CAACie,eAAe,GAAG,CAAC,CAAC,GAAG50E,OAAO,CAAC60E,SAAS,GAAG/H,IAAI,CAAC;UACxE4F,IAAI,CAAC/b,kBAAkB,CAACie,eAAe,GAAG,CAAC,CAAC,GAAG50E,OAAO,CAAC+sE,KAAK,GAAG8H,SAAS,CAAC;UACzEnC,IAAI,CAAC/b,kBAAkB,CAACie,eAAe,GAAG,CAAC,CAAC,GAAG50E,OAAO,CAAC+sE,KAAK,GAAG8H,SAAS,GAAG,CAAC,CAAC;UAC7EnC,IAAI,CAAC/b,kBAAkB,CAACie,eAAe,GAAG,CAAC,CAAC,GAAG50E,OAAO,CAAC+sE,KAAK,GAAG8H,SAAS,GAAG/H,IAAI,GAAG,CAAC,CAAC;UACpF4F,IAAI,CAAC/b,kBAAkB,CAACie,eAAe,GAAG,CAAC,CAAC,GAAG50E,OAAO,CAAC+sE,KAAK,GAAG8H,SAAS,GAAG/H,IAAI,CAAC;;UAEhF;UACA;;UAEA;UACA,IAAIjW,UAAU,GAAG,CAAC;UAClB,KAAK,IAAI3xE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6uF,SAAS,EAAE,EAAE7uF,CAAC,EAAE;YAClC,IAAIwtF,IAAI,CAAC/b,kBAAkB,CAACie,eAAe,GAAG1vF,CAAC,CAAC,GAAG,GAAG,EAAE;cACtD2xE,UAAU,IAAK,CAAC,IAAI3xE,CAAE;YACxB;UACF;UAEA,IAAK2xE,UAAU,KAAK,CAAC,IAAMA,UAAU,KAAM,CAAC,CAAC,IAAIkd,SAAS,IAAI,CAAG,EAAE;YACjErB,IAAI,CAAC9b,eAAe,CAACsd,OAAO,CAAC,GAAG,KAAK;UACvC,CAAC,MAAM;YACLxB,IAAI,CAAC9b,eAAe,CAACsd,OAAO,CAAC,GAAG,IAAI;YACpCS,mBAAmB,EAAE;UACvB;UACAjC,IAAI,CAAC7b,UAAU,CAACqd,OAAO,CAAC,GAAGrd,UAAU;UACrC;UACAqd,OAAO,EAAE;QACX,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,CAAC;IACF,OAAOS,mBAAmB;EAC5B;EAEAnlF,OAAOA,CAACslF,MAAM,EAAE;IACd,MAAMC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EACjH,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAC9G,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,C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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,MAAMC,iBAAiB,GAAG;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA,MAAMC,oBAAoB,GAAG;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA,MAAMC,iBAAiB,GAAG;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;AACA,MAAMC,cAAc,GAAG;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AAEW,MAAMC,SAAS,CAAC;EAC7BlxI,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACwnI,YAAY,GAAG,EAAE;IACtB,IAAI,CAACoF,KAAK,GAAG,IAAI;EACnB;EAEA9E,SAASA,CAACzxH,IAAI,EAAE;IACd,IAAI,CAACu2H,KAAK,GAAGv2H,IAAI;IACjB,IAAI,CAACmxH,YAAY,CAAC1uI,IAAI,CAAC,IAAI,CAACq4I,YAAY,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC3J,YAAY,CAAC1uI,IAAI,CAAC,IAAI,CAACs4I,iBAAiB,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC5J,YAAY,CAAC1uI,IAAI,CAAC,IAAI,CAACu4I,aAAa,CAACh7H,IAAI,CAAC+hH,MAAM,EAAE/hH,IAAI,CAACuW,SAAS,CAAC,CAAC;IACvE,IAAI,CAAC46G,YAAY,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","sources":["webpack://miew/./src/utils/MiewCLIParser.js","webpack://miew/./src/utils/SelectionParser.js","webpack://miew/./vendor/js/Smooth.js","webpack://miew/./vendor/js/mmtf.js","webpack://miew/webpack/bootstrap","webpack://miew/webpack/runtime/compat get default export","webpack://miew/webpack/runtime/define property getters","webpack://miew/webpack/runtime/hasOwnProperty shorthand","webpack://miew/external module {\"module\":\"lodash\",\"commonjs\":\"lodash\",\"commonjs2\":\"lodash\",\"amd\":\"lodash\",\"root\":\"_\"}","webpack://miew/external module {\"module\":\"three\",\"commonjs\":\"three\",\"commonjs2\":\"three\",\"amd\":\"three\",\"root\":\"THREE\"}","webpack://miew/../../node_modules/spin.js/spin.js","webpack://miew/./src/Timer.js","webpack://miew/./src/gfx/Stats.js","webpack://miew/./src/utils/EventDispatcher.js","webpack://miew/./src/utils/logger.js","webpack://miew/./src/utils.js","webpack://miew/./src/utils/JobHandle.js","webpack://miew/./src/settings.js","webpack://miew/./src/options.js","webpack://miew/./src/chem/Atom.js","webpack://miew/./src/chem/Element.js","webpack://miew/./src/chem/Bond.js","webpack://miew/./src/chem/Residue.js","webpack://miew/./src/chem/ResidueType.js","webpack://miew/./src/chem/Chain.js","webpack://miew/./src/chem/StructuralElement.js","webpack://miew/./src/chem/Helix.js","webpack://miew/./src/chem/Strand.js","webpack://miew/./src/chem/Sheet.js","webpack://miew/./src/chem/SGroup.js","webpack://miew/./src/chem/selectors/selectArgs.js","webpack://miew/./src/chem/selectors/selectorsBase.js","webpack://miew/./src/chem/selectors/selectOps.js","webpack://miew/./src/chem/selectors.js","webpack://miew/./src/chem/BiologicalUnit.js","webpack://miew/./src/chem/Assembly.js","webpack://miew/./src/chem/Component.js","webpack://miew/./src/chem/AtomPairs.js","webpack://miew/./src/chem/AutoBond.js","webpack://miew/./src/chem/AromaticLoopsMarker.js","webpack://miew/./src/chem/VoxelWorld.js","webpack://miew/./src/chem/HBondInfo.js","webpack://miew/./src/chem/SecondaryStructureMap.js","webpack://miew/./src/chem/Complex.js","webpack://miew/./src/chem/Volume.js","webpack://miew/./src/chem/Molecule.js","webpack://miew/./src/chem.js","webpack://miew/./src/gfx/CSS2DObject.js","webpack://miew/./src/gfx/RCGroup.js","webpack://miew/./src/gfx/gfxutils.js","webpack://miew/./src/Visual.js","webpack://miew/./src/utils/EntityList.js","webpack://miew/./src/utils/makeContextDependent.js","webpack://miew/./src/gfx/geometries/SphereCollisionGeo.js","webpack://miew/./src/gfx/geometries/InstancedSpheresGeometry.js","webpack://miew/./src/gfx/geometries/ChunkedObjectsGeometry.js","webpack://miew/./src/gfx/geometries/SimpleSpheresGeometry.js","webpack://miew/./src/gfx/geometries/Simple2CCylindersGeometry.js","webpack://miew/./src/gfx/geometries/CylinderBufferGeometry.js","webpack://miew/./src/gfx/geometries/Instanced2CCylindersGeometry.js","webpack://miew/./src/gfx/geometries/ExtrudedObjectsGeometry.js","webpack://miew/./src/gfx/geometries/ThickLinesGeometry.js","webpack://miew/./src/gfx/geometries/LinesGeometry.js","webpack://miew/./src/gfx/geometries/CylinderCollisionGeo.js","webpack://miew/./src/gfx/geometries/ChunkedLinesGeometry.js","webpack://miew/./src/gfx/geometries/TwoColorLinesGeometry.js","webpack://miew/./src/gfx/geometries/CrossGeometry.js","webpack://miew/./src/gfx/geometries/IsoSurfaceGeometry.js","webpack://miew/./src/gfx/geometries/IsoSurfaceMarchCube.js","webpack://miew/./src/gfx/geometries/IsoSurface.js","webpack://miew/./src/gfx/geometries/VolumeSurfaceGeometry.js","webpack://miew/./src/gfx/geometries/QuickSurfGeometry.js","webpack://miew/./src/gfx/geometries/ContactSurface.js","webpack://miew/./src/gfx/geometries/ContactSurfaceGeometry.js","webpack://miew/./src/gfx/geometries/IsoSurfaceAtomColored.js","webpack://miew/./src/gfx/geometries/IsosurfaceBuildNormals.js","webpack://miew/./src/gfx/geometries/IsoSurfaceGeo.js","webpack://miew/./src/gfx/geometries/SSIsosurfaceGeometry.js","webpack://miew/./src/gfx/geometries/LabelsGeometry.js","webpack://miew/./src/gfx/geometries/geometries.js","webpack://miew/./src/gfx/capabilities.js","webpack://miew/./src/gfx/noiseTexture.js","webpack://miew/./src/gfx/shaders/UberMaterial.js","webpack://miew/./src/gfx/meshes/UberObject.js","webpack://miew/./src/gfx/meshes/ZSpriteMesh.js","webpack://miew/./src/gfx/meshes/ZClippedMesh.js","webpack://miew/./src/gfx/meshes/TextMesh.js","webpack://miew/./src/gfx/meshes/SimpleMesh.js","webpack://miew/./src/gfx/meshes/ThickLineMesh.js","webpack://miew/./src/gfx/meshes/InstancedMesh.js","webpack://miew/./src/gfx/meshes/meshes.js","webpack://miew/./src/gfx/meshes/MeshCreator.js","webpack://miew/./src/gfx/meshes/TransformGroup.js","webpack://miew/./src/gfx/modes/groups/ChemGroup.js","webpack://miew/./src/gfx/modes/groups/AtomsGroup.js","webpack://miew/./src/gfx/modes/groups/AtomsSphereGroup.js","webpack://miew/./src/gfx/modes/groups/AtomsSurfaceGroup.js","webpack://miew/./src/gfx/modes/groups/AtomsSASSESGroupStub.js","webpack://miew/./src/gfx/modes/groups/AtomsTextGroup.js","webpack://miew/./src/gfx/modes/groups/AromaticGroup.js","webpack://miew/./src/gfx/modes/groups/AromaticTorusGroup.js","webpack://miew/./src/gfx/modes/groups/AromaticLinesGroup.js","webpack://miew/./src/gfx/modes/groups/ResiduesGroup.js","webpack://miew/./src/gfx/modes/groups/NucleicItemGroup.js","webpack://miew/./src/gfx/modes/groups/NucleicCylindersGroup.js","webpack://miew/./src/gfx/modes/groups/NucleicSpheresGroup.js","webpack://miew/./src/gfx/modes/groups/CartoonHelper.js","webpack://miew/./src/gfx/modes/groups/ResiduesSubseqGroup.js","webpack://miew/./src/gfx/modes/groups/ResiduesTraceGroup.js","webpack://miew/./src/gfx/modes/groups/BondsGroup.js","webpack://miew/./src/gfx/modes/groups/BondsCylinderGroup.js","webpack://miew/./src/gfx/modes/groups/BondsLinesGroup.js","webpack://miew/./src/gfx/modes/groups/groups.js","webpack://miew/./src/gfx/modes/processors/AtomsProcessor.js","webpack://miew/./src/gfx/modes/processors/OrphanAtomsProcessor.js","webpack://miew/./src/gfx/modes/processors/ResiduesProcessor.js","webpack://miew/./src/gfx/modes/processors/NucleicProcessor.js","webpack://miew/./src/gfx/modes/processors/SubseqsProcessor.js","webpack://miew/./src/gfx/modes/processors/BondsProcessor.js","webpack://miew/./src/gfx/modes/processors/AromaticProcessor.js","webpack://miew/./src/gfx/modes/processors/processors.js","webpack://miew/./src/gfx/modes/groups/GroupsFactory.js","webpack://miew/./src/gfx/modes/Mode.js","webpack://miew/./src/gfx/modes/LinesMode.js","webpack://miew/./src/gfx/modes/LicoriceMode.js","webpack://miew/./src/gfx/modes/BallsAndSticksMode.js","webpack://miew/./src/gfx/modes/VanDerWaalsMode.js","webpack://miew/./src/gfx/modes/TraceMode.js","webpack://miew/./src/gfx/modes/TubeMode.js","webpack://miew/./src/gfx/modes/CartoonMode.js","webpack://miew/./src/gfx/modes/SurfaceMode.js","webpack://miew/./src/gfx/modes/QuickSurfaceMode.js","webpack://miew/./src/gfx/modes/IsoSurfaceMode.js","webpack://miew/./src/gfx/modes/IsoSurfaceSASMode.js","webpack://miew/./src/gfx/modes/IsoSurfaceSESMode.js","webpack://miew/./src/gfx/modes/ContactSurfaceMode.js","webpack://miew/./src/gfx/modes/TextMode.js","webpack://miew/./src/gfx/modes.js","webpack://miew/./src/gfx/palettes/Palette.js","webpack://miew/./src/gfx/palettes/cpkPalette.js","webpack://miew/./src/gfx/palettes/jmolPalette.js","webpack://miew/./src/gfx/palettes/vmdPalette.js","webpack://miew/./src/gfx/palettes.js","webpack://miew/./src/gfx/colorers/Colorer.js","webpack://miew/./src/gfx/colorers/ElementColorer.js","webpack://miew/./src/gfx/colorers/ResidueTypeColorer.js","webpack://miew/./src/gfx/colorers/SequenceColorer.js","webpack://miew/./src/gfx/colorers/ChainColorer.js","webpack://miew/./src/gfx/colorers/SecondaryStructureColorer.js","webpack://miew/./src/gfx/colorers/UniformColorer.js","webpack://miew/./src/gfx/colorers/ConditionalColorer.js","webpack://miew/./src/gfx/colorers/ConformationColorer.js","webpack://miew/./src/gfx/colorers/TemperatureColorer.js","webpack://miew/./src/gfx/colorers/OccupancyColorer.js","webpack://miew/./src/gfx/colorers/HydrophobicityColorer.js","webpack://miew/./src/gfx/colorers/MoleculeColorer.js","webpack://miew/./src/gfx/colorers/CarbonColorer.js","webpack://miew/./src/gfx/colorers.js","webpack://miew/./src/gfx/materials.js","webpack://miew/./src/gfx/meshutils.js","webpack://miew/./src/gfx/Representation.js","webpack://miew/./src/ComplexVisualEdit.js","webpack://miew/./src/ComplexVisual.js","webpack://miew/./src/gfx/shaders/VolumeMaterial.js","webpack://miew/./src/gfx/VolumeMesh.js","webpack://miew/./src/gfx/VolumeBounds.js","webpack://miew/./src/gfx/VolumeFarPlane.js","webpack://miew/./src/VolumeVisual.js","webpack://miew/./src/io/loaders/LoaderList.js","webpack://miew/./src/io/loaders/Loader.js","webpack://miew/./src/io/loaders/FileLoader.js","webpack://miew/./src/io/loaders/XHRLoader.js","webpack://miew/./src/io/loaders/ImmediateLoader.js","webpack://miew/./src/io/loaders.js","webpack://miew/./src/io/parsers/ParserList.js","webpack://miew/./src/io/parsers/Parser.js","webpack://miew/./src/io/parsers/pdb/Remark290.js","webpack://miew/./src/io/parsers/pdb/Remark350.js","webpack://miew/./src/io/parsers/PDBStream.js","webpack://miew/./src/io/parsers/PDBParser.js","webpack://miew/./src/io/parsers/CMLParser.js","webpack://miew/./src/io/parsers/MMTFParser.js","webpack://miew/./src/io/parsers/ParsingError.js","webpack://miew/./src/io/parsers/readCIF.js","webpack://miew/./src/io/parsers/CIFParser.js","webpack://miew/./src/io/parsers/VolumeModel.js","webpack://miew/./src/io/parsers/CCP4Parser.js","webpack://miew/./src/io/parsers/XYZParser.js","webpack://miew/./src/io/parsers/PubChemParser.js","webpack://miew/./src/io/parsers/SDFStream.js","webpack://miew/./src/io/parsers/SDFParser.js","webpack://miew/./src/io/parsers/DSN6Parser.js","webpack://miew/./src/io/parsers/GROReader.js","webpack://miew/./src/io/parsers/GROParser.js","webpack://miew/./src/io/parsers/MOL2Parser.js","webpack://miew/./src/io/parsers.js","webpack://miew/./src/io/exporters/ExporterList.js","webpack://miew/./src/io/exporters/Exporter.js","webpack://miew/./src/io/exporters/PDBResult.js","webpack://miew/./src/io/exporters/PDBExporter.js","webpack://miew/./src/io/exporters/fbx/FBXModel.js","webpack://miew/./src/io/exporters/fbx/FBXGeometry.js","webpack://miew/./src/io/exporters/fbx/FBX1CGeometry.js","webpack://miew/./src/io/exporters/fbx/FBX2CCylinder.js","webpack://miew/./src/io/exporters/fbx/FBXInfoExtractor.js","webpack://miew/./src/io/exporters/fbx/FBXResult.js","webpack://miew/./src/io/exporters/FBXExporter.js","webpack://miew/./src/io/exporters.js","webpack://miew/./src/io/io.js","webpack://miew/./src/gfx/CSS2DRenderer.js","webpack://miew/./src/utils/getTopWindow.js","webpack://miew/./src/ui/ObjectControls.js","webpack://miew/./src/ui/Picker.js","webpack://miew/./src/gfx/Axes.js","webpack://miew/./src/gfx/FrameInfo.js","webpack://miew/./src/gfx/objects/SceneObject.js","webpack://miew/./src/gfx/objects/LinesObj.js","webpack://miew/./src/gfx/shaders/OutlineMaterial.js","webpack://miew/./src/gfx/shaders/FXAAMaterial.js","webpack://miew/./src/gfx/shaders/AOMaterial.js","webpack://miew/./src/gfx/shaders/AOHorBlurMaterial.js","webpack://miew/./src/gfx/shaders/AOVertBlurWithBlendMaterial.js","webpack://miew/./src/gfx/shaders/AnaglyphMaterial.js","webpack://miew/./src/gfx/ViewInterpolator.js","webpack://miew/./src/utils/Cookies.js","webpack://miew/./src/gfx/vr/createWebVRButton.js","webpack://miew/./src/gfx/vr/WebVRPoC.js","webpack://miew/./src/Miew.js","webpack://miew/./src/utils/MiewCLIHelp.js","webpack://miew/./src/Miew-cli.js","webpack://miew/./src/index.js"],"sourcesContent":["/* eslint-disable */\r\n// DO NOT EDIT! Automatically generated from .jison\r\n/* parser generated by jison 0.4.18 */\r\n/*\r\n Returns a Parser object of the following structure:\r\n\r\n Parser: {\r\n yy: {}\r\n }\r\n\r\n Parser.prototype: {\r\n yy: {},\r\n trace: function(),\r\n symbols_: {associative list: name ==> number},\r\n terminals_: {associative list: number ==> name},\r\n productions_: [...],\r\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\r\n table: [...],\r\n defaultActions: {...},\r\n parseError: function(str, hash),\r\n parse: function(input),\r\n\r\n lexer: {\r\n EOF: 1,\r\n parseError: function(str, hash),\r\n setInput: function(input),\r\n input: function(),\r\n unput: function(str),\r\n more: function(),\r\n less: function(n),\r\n pastInput: function(),\r\n upcomingInput: function(),\r\n showPosition: function(),\r\n test_match: function(regex_match_array, rule_index),\r\n next: function(),\r\n lex: function(),\r\n begin: function(condition),\r\n popState: function(),\r\n _currentRules: function(),\r\n topState: function(),\r\n pushState: function(condition),\r\n\r\n options: {\r\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\r\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\r\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\r\n },\r\n\r\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\r\n rules: [...],\r\n conditions: {associative list: name ==> set},\r\n }\r\n }\r\n\r\n\r\n token location info (@$, _$, etc.): {\r\n first_line: n,\r\n last_line: n,\r\n first_column: n,\r\n last_column: n,\r\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\r\n }\r\n\r\n\r\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\r\n text: (matched text)\r\n token: (the produced terminal token, if any)\r\n line: (yylineno)\r\n }\r\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\r\n loc: (yylloc)\r\n expected: (string describing the set of expected tokens)\r\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\r\n }\r\n*/\r\nvar parser = (function(){\r\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,60],$V1=[1,62],$V2=[1,63],$V3=[1,65],$V4=[1,66],$V5=[1,67],$V6=[1,68],$V7=[1,69],$V8=[1,80],$V9=[1,72],$Va=[1,73],$Vb=[1,74],$Vc=[1,75],$Vd=[1,99],$Ve=[1,76],$Vf=[1,100],$Vg=[1,79],$Vh=[1,51],$Vi=[1,81],$Vj=[1,82],$Vk=[1,84],$Vl=[1,83],$Vm=[1,85],$Vn=[1,96],$Vo=[1,97],$Vp=[1,98],$Vq=[1,86],$Vr=[1,87],$Vs=[1,64],$Vt=[1,70],$Vu=[1,71],$Vv=[1,77],$Vw=[1,78],$Vx=[1,53],$Vy=[1,54],$Vz=[1,55],$VA=[1,61],$VB=[1,88],$VC=[1,89],$VD=[1,90],$VE=[1,91],$VF=[1,92],$VG=[1,93],$VH=[1,94],$VI=[1,95],$VJ=[1,101],$VK=[1,102],$VL=[1,103],$VM=[1,104],$VN=[1,105],$VO=[1,56],$VP=[1,57],$VQ=[1,58],$VR=[1,59],$VS=[1,115],$VT=[1,111],$VU=[1,114],$VV=[1,112],$VW=[1,113],$VX=[1,118],$VY=[1,117],$VZ=[1,134],$V_=[1,149],$V$=[1,150],$V01=[1,157],$V11=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],$V21=[5,6,7,9,13,14,15,17,18,19,20,23,25,26,27,30,33,34,35,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,71,72,74,77,78,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101],$V31=[5,6,7,9,13,15,17,18,19,20,23,25,26,27,30,33,34,37,38,41,43,45,46,49,52,54,55,56,58,59,62,64,65,66,70,72,82,83,84,85,86,87,88,89,90,91,92,93,94,95],$V41=[5,70,72],$V51=[5,74],$V61=[71,101];\r\nvar parser = {trace: function trace () { },\r\nyy: {},\r\nsymbols_: {\"error\":2,\"Program\":3,\"Command\":4,\"EOF\":5,\"RESET\":6,\"BUILD\":7,\"ALL\":8,\"HELP\":9,\"Path\":10,\"MOTM\":11,\"OneArgCommand\":12,\"GET\":13,\"STRING\":14,\"SET\":15,\"Value\":16,\"SET_SAVE\":17,\"SET_RESTORE\":18,\"SET_RESET\":19,\"PRESET\":20,\"AddRepresentation\":21,\"EditRepresentation\":22,\"REMOVE\":23,\"RepresentationReference\":24,\"HIDE\":25,\"SHOW\":26,\"LIST\":27,\"EXPAND_KEY\":28,\"SELECTOR_KEY\":29,\"SELECT\":30,\"AS\":31,\"WordAll\":32,\"SELECTOR\":33,\"WITHIN\":34,\"NUMBER\":35,\"OF\":36,\"MATERIAL\":37,\"IDENTIFIER\":38,\"ModeCMD\":39,\"ColorCMD\":40,\"VIEW\":41,\"BASE_64\":42,\"UNIT\":43,\"DSSP\":44,\"SCALE\":45,\"ROTATE\":46,\"AxesList\":47,\"TRANSLATE\":48,\"CENTER\":49,\"GetURLBranch\":50,\"Screenshot\":51,\"LINE\":52,\"ArgList\":53,\"LISTOBJ\":54,\"REMOVEOBJ\":55,\"URL\":56,\"VIEW_KEY\":57,\"SCREENSHOT\":58,\"LOAD\":59,\"Url\":60,\"FILE_KEY\":61,\"ADD\":62,\"Description\":63,\"REP\":64,\"MODE\":65,\"COLOR\":66,\"Descriptor\":67,\"RepresentationOwnProperty\":68,\"RepresentationOwnPropertyOpts\":69,\"DESC_KEY\":70,\"=\":71,\"DESC_KEY_OPTS\":72,\"AxesArg\":73,\"DESC_KEY_AXES\":74,\"Arg\":75,\"PathWoDescKey\":76,\"HEX\":77,\"BOOL\":78,\"Word\":79,\"CommandSetWoDESC_KEY\":80,\"DescKeys\":81,\"CLEAR\":82,\"FILE_LIST\":83,\"FILE_REGISTER\":84,\"FILE_DELETE\":85,\"PRESET_ADD\":86,\"PRESET_DELETE\":87,\"PRESET_UPDATE\":88,\"PRESET_RENAME\":89,\"PRESET_OPEN\":90,\"CREATE_SCENARIO\":91,\"RESET_SCENARIO\":92,\"DELETE_SCENARIO\":93,\"ADD_SCENARIO_ITEM\":94,\"LIST_SCENARIO\":95,\"PDB_KEY\":96,\"DELAY_KEY\":97,\"PRST_KEY\":98,\"DESCRIPTION_KEY\":99,\"CommandSet\":100,\".\":101,\"PresetPath\":102,\"/\":103,\"HexOrNumber\":104,\"$accept\":0,\"$end\":1},\r\nterminals_: {2:\"error\",5:\"EOF\",6:\"RESET\",7:\"BUILD\",8:\"ALL\",9:\"HELP\",11:\"MOTM\",13:\"GET\",14:\"STRING\",15:\"SET\",17:\"SET_SAVE\",18:\"SET_RESTORE\",19:\"SET_RESET\",20:\"PRESET\",23:\"REMOVE\",25:\"HIDE\",26:\"SHOW\",27:\"LIST\",28:\"EXPAND_KEY\",29:\"SELECTOR_KEY\",30:\"SELECT\",31:\"AS\",33:\"SELECTOR\",34:\"WITHIN\",35:\"NUMBER\",36:\"OF\",37:\"MATERIAL\",38:\"IDENTIFIER\",41:\"VIEW\",42:\"BASE_64\",43:\"UNIT\",44:\"DSSP\",45:\"SCALE\",46:\"ROTATE\",48:\"TRANSLATE\",49:\"CENTER\",52:\"LINE\",54:\"LISTOBJ\",55:\"REMOVEOBJ\",56:\"URL\",57:\"VIEW_KEY\",58:\"SCREENSHOT\",59:\"LOAD\",61:\"FILE_KEY\",62:\"ADD\",64:\"REP\",65:\"MODE\",66:\"COLOR\",70:\"DESC_KEY\",71:\"=\",72:\"DESC_KEY_OPTS\",74:\"DESC_KEY_AXES\",77:\"HEX\",78:\"BOOL\",82:\"CLEAR\",83:\"FILE_LIST\",84:\"FILE_REGISTER\",85:\"FILE_DELETE\",86:\"PRESET_ADD\",87:\"PRESET_DELETE\",88:\"PRESET_UPDATE\",89:\"PRESET_RENAME\",90:\"PRESET_OPEN\",91:\"CREATE_SCENARIO\",92:\"RESET_SCENARIO\",93:\"DELETE_SCENARIO\",94:\"ADD_SCENARIO_ITEM\",95:\"LIST_SCENARIO\",96:\"PDB_KEY\",97:\"DELAY_KEY\",98:\"PRST_KEY\",99:\"DESCRIPTION_KEY\",101:\".\",103:\"/\"},\r\nproductions_: [0,[3,2],[3,1],[4,1],[4,1],[4,2],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,3],[4,3],[4,1],[4,1],[4,1],[4,1],[4,2],[4,1],[4,1],[4,2],[4,2],[4,2],[4,2],[4,1],[4,2],[4,2],[4,2],[4,4],[4,2],[4,6],[4,2],[4,1],[4,1],[4,1],[4,2],[4,2],[4,1],[4,2],[4,1],[4,2],[4,2],[4,2],[4,1],[4,2],[4,1],[4,1],[4,3],[4,3],[4,4],[4,4],[4,1],[4,2],[50,1],[50,2],[50,2],[50,3],[50,3],[51,1],[51,2],[51,3],[12,2],[12,2],[12,2],[21,1],[21,2],[21,2],[21,3],[22,2],[22,3],[39,2],[39,3],[40,2],[40,3],[24,1],[24,1],[63,1],[63,2],[63,3],[63,4],[67,1],[67,1],[67,2],[68,3],[69,3],[47,1],[47,2],[73,2],[53,1],[53,2],[75,3],[16,1],[16,1],[16,1],[16,1],[16,1],[79,1],[79,1],[32,1],[32,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[80,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[81,1],[100,1],[100,1],[76,1],[76,3],[76,3],[10,1],[10,1],[10,3],[10,3],[10,3],[60,1],[102,1],[102,3],[104,1],[104,1]],\r\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\r\n/* this == yyval */\r\n\r\nvar $0 = $$.length - 1;\r\nswitch (yystate) {\r\ncase 1:\r\n return $$[$0-1]; \r\nbreak;\r\ncase 3:\r\nthis.$ = yy.miew.reset(false); yy.ClearContext(); yy.miew.resetReps(\"empty\");\r\nbreak;\r\ncase 4:\r\nthis.$ = yy.miew.rebuild();\r\nbreak;\r\ncase 5:\r\nthis.$ = yy.miew.rebuildAll(); yy.miew.rebuild();\r\nbreak;\r\ncase 6:\r\nthis.$ = yy.echo(yy.utils.help().toString());\r\nbreak;\r\ncase 7:\r\nthis.$ = yy.echo(yy.utils.help($$[$0]).toString());\r\nbreak;\r\ncase 8:\r\nthis.$ = yy.miew.motm();\r\nbreak;\r\ncase 10: case 11:\r\nthis.$ = yy.utils.propagateProp($$[$0]); yy.echo(yy.miew.get($$[$0]).toString());\r\nbreak;\r\ncase 12: case 13:\r\nthis.$ = yy.miew.set($$[$0-1], yy.utils.propagateProp($$[$0-1], $$[$0]));;\r\nbreak;\r\ncase 14:\r\nthis.$ = yy.miew.saveSettings();;\r\nbreak;\r\ncase 15:\r\nthis.$ = yy.miew.restoreSettings();;\r\nbreak;\r\ncase 16:\r\nthis.$ = yy.miew.resetSettings();;\r\nbreak;\r\ncase 17:\r\nthis.$ = yy.miew.resetReps();\r\nbreak;\r\ncase 18:\r\nthis.$ = yy.miew.applyPreset($$[$0]);\r\nbreak;\r\ncase 21:\r\nthis.$ = yy.miew.repRemove($$[$0]); yy.representations.remove($$[$0]);\r\nbreak;\r\ncase 22:\r\nthis.$ = yy.miew.repHide($$[$0]);\r\nbreak;\r\ncase 23:\r\nthis.$ = yy.miew.repHide($$[$0], false);\r\nbreak;\r\ncase 24:\r\nthis.$ = yy.echo(yy.utils.listRep(yy.miew, yy.representations, $$[$0], '-e'));\r\nbreak;\r\ncase 25:\r\nthis.$ = yy.echo(yy.utils.list(yy.miew, yy.representations));\r\nbreak;\r\ncase 26:\r\nthis.$ = yy.echo(yy.utils.list(yy.miew, yy.representations, $$[$0]));\r\nbreak;\r\ncase 27:\r\nthis.$ = yy.echo(yy.utils.listSelector(yy.miew, yy.Context));\r\nbreak;\r\ncase 28:\r\nthis.$ = yy.miew.select(yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0], true));\r\nbreak;\r\ncase 29:\r\nthis.$ = yy.Context[$$[$0].toLowerCase()] = yy.utils.checkArg($$[$0-3].toLowerCase(), $$[$0-2], true); yy.miew.select(yy.Context[$$[$0].toLowerCase()]);\r\nbreak;\r\ncase 30:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {selector : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0])});\r\nbreak;\r\ncase 31:\r\nthis.$ = yy.Context[$$[$0].toLowerCase()] = yy.miew.within(yy.utils.checkArg(\"select\", $$[$0-2], true), Number($$[$0-4]));\r\nbreak;\r\ncase 32:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {material : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 35:\r\nthis.$ = yy.echo(yy.miew.view());\r\nbreak;\r\ncase 36: case 37:\r\nthis.$ = yy.miew.view($$[$0]);\r\nbreak;\r\ncase 38:\r\nthis.$ = yy.echo(yy.miew.changeUnit());\r\nbreak;\r\ncase 39:\r\nthis.$ = yy.echo(yy.miew.changeUnit($$[$0]));\r\nbreak;\r\ncase 40:\r\nthis.$ = yy.miew.dssp();\r\nbreak;\r\ncase 41:\r\nthis.$ = yy.miew.scale($$[$0]);\r\nbreak;\r\ncase 42:\r\n for (var i = 0, n = $$[$0].length; i < n; i++) {yy.miew.rotate($$[$0][i]['x'] * Math.PI / 180.0, $$[$0][i]['y'] * Math.PI / 180.0, $$[$0][i]['z'] * Math.PI / 180.0)} \r\nbreak;\r\ncase 43:\r\n for (var i = 0, n = $$[$0].length; i < n; i++) {yy.miew.translate($$[$0][i]['x'] || 0, $$[$0][i]['y'] || 0, $$[$0][i]['z'] || 0)} \r\nbreak;\r\ncase 44:\r\nthis.$ = yy.miew.center();\r\nbreak;\r\ncase 45:\r\nthis.$ = yy.miew.center($$[$0]);\r\nbreak;\r\ncase 48: case 49:\r\nthis.$ = yy.miew.addObject({type: 'line', params: [$$[$0-1], $$[$0]]}, true);\r\nbreak;\r\ncase 50: case 51:\r\nthis.$ = yy.miew.addObject({type: 'line', params: [$$[$0-2], $$[$0-1]], opts:$$[$0].toJSO(yy.utils, 'objects', 'line')}, true);\r\nbreak;\r\ncase 52:\r\nthis.$ = yy.echo(yy.utils.listObjs(yy.miew));\r\nbreak;\r\ncase 53:\r\nthis.$ = yy.miew.removeObject($$[$0]);\r\nbreak;\r\ncase 54:\r\nthis.$ = yy.echo(yy.miew.getURL({view: false, settings: false}));\r\nbreak;\r\ncase 55:\r\nthis.$ = yy.echo(yy.miew.getURL({view: false, settings: true}));\r\nbreak;\r\ncase 56:\r\nthis.$ = yy.echo(yy.miew.getURL({view: true, settings: false}));\r\nbreak;\r\ncase 57: case 58:\r\nthis.$ = yy.echo(yy.miew.getURL({view: true, settings: true}));\r\nbreak;\r\ncase 59:\r\nthis.$ = yy.miew.screenshotSave();\r\nbreak;\r\ncase 60:\r\nthis.$ = yy.miew.screenshotSave('', Number($$[$0]));\r\nbreak;\r\ncase 61:\r\nthis.$ = yy.miew.screenshotSave('', Number($$[$0-1]), Number($$[$0]));\r\nbreak;\r\ncase 62: case 63: case 64:\r\nthis.$ = yy.utils.load(yy.miew, $$[$0]); yy.representations.clear();\r\nbreak;\r\ncase 65:\r\nthis.$ = yy.echo(yy.representations.add(yy.miew.repAdd()));\r\nbreak;\r\ncase 66:\r\nthis.$ = yy.echo(yy.representations.add($$[$0], yy.miew.repAdd()));\r\nbreak;\r\ncase 67:\r\nthis.$ = yy.echo(yy.representations.add(yy.miew.repAdd($$[$0])));\r\nbreak;\r\ncase 68:\r\nthis.$ = yy.echo(yy.representations.add($$[$0-1], yy.miew.repAdd($$[$0])));\r\nbreak;\r\ncase 69:\r\nthis.$ = yy.miew.rep($$[$0]); yy.miew.repCurrent($$[$0]);\r\nbreak;\r\ncase 70:\r\nthis.$ = yy.miew.rep($$[$0-1], $$[$0]); yy.miew.repCurrent($$[$0-1]);\r\nbreak;\r\ncase 71:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {mode : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 72:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {mode : new Array(yy.utils.checkArg($$[$0-2].toLowerCase(), $$[$0-1].toUpperCase()), $$[$0].toJSO(yy.utils, $$[$0-2], $$[$0-1].toUpperCase()))});\r\nbreak;\r\ncase 73:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {colorer : yy.utils.checkArg($$[$0-1].toLowerCase(), $$[$0].toUpperCase())});\r\nbreak;\r\ncase 74:\r\nthis.$ = yy.miew.rep(yy.miew.repCurrent(), {colorer : new Array(yy.utils.checkArg($$[$0-2].toLowerCase(), $$[$0-1].toUpperCase()), $$[$0].toJSO(yy.utils, $$[$0-2], $$[$0-1].toUpperCase()))});\r\nbreak;\r\ncase 75:\r\nthis.$ = Number(yy.representations.get($$[$0]));\r\nbreak;\r\ncase 76: case 92:\r\nthis.$ = Number($$[$0]);\r\nbreak;\r\ncase 77:\r\nthis.$ = $$[$0];\r\nbreak;\r\ncase 78:\r\nthis.$ = yy._.assign($$[$0-1], $$[$0]);\r\nbreak;\r\ncase 79:\r\nthis.$ = yy._.assign($$[$0-2], $$[$0-1], $$[$0]);\r\nbreak;\r\ncase 80:\r\nthis.$ = yy._.assign($$[$0-3], $$[$0-2], $$[$0-1], $$[$0]);\r\nbreak;\r\ncase 81: case 82:\r\nthis.$ = yy.CreateObjectPair($$[$0].key, $$[$0].val);\r\nbreak;\r\ncase 83:\r\nthis.$ = yy.CreateObjectPair($$[$0-1].key, new Array($$[$0-1].val, $$[$0].toJSO(yy.utils, $$[$0-1].key, $$[$0-1].val)));\r\nbreak;\r\ncase 84: case 85:\r\nthis.$ = Object.create({'key': yy.keyRemap($$[$0-2]), 'val': yy.utils.checkArg($$[$0-2], $$[$0])});\r\nbreak;\r\ncase 86:\r\nthis.$ = [$$[$0]];\r\nbreak;\r\ncase 87:\r\nthis.$ = $$[$0-1].concat($$[$0]);\r\nbreak;\r\ncase 88:\r\nthis.$ = yy.CreateObjectPair($$[$0-1].toLowerCase(), Number($$[$0]));\r\nbreak;\r\ncase 89:\r\nthis.$ = new yy.ArgList($$[$0]);\r\nbreak;\r\ncase 90:\r\nthis.$ = $$[$0-1].append($$[$0]);\r\nbreak;\r\ncase 91:\r\nthis.$ = new yy.Arg($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 93:\r\nthis.$ = parseInt($$[$0]);\r\nbreak;\r\ncase 94:\r\nthis.$ = JSON.parse($$[$0]);\r\nbreak;\r\ncase 95: case 96:\r\nthis.$ = String($$[$0]);\r\nbreak;\r\ncase 157: case 158: case 161: case 162: case 163:\r\nthis.$ = $$[$0-2] + $$[$0-1] + $$[$0] //cause of could be color word in path;\r\nbreak;\r\ncase 166:\r\nthis.$ = $$[$0-2] = $$[$0-2] + $$[$0-1] + $$[$0];\r\nbreak;\r\n}\r\n},\r\ntable: [{3:1,4:2,5:[1,3],6:[1,4],7:[1,5],9:[1,6],11:[1,7],12:8,13:[1,9],15:[1,10],17:[1,11],18:[1,12],19:[1,13],20:[1,14],21:15,22:16,23:[1,17],25:[1,18],26:[1,19],27:[1,20],30:[1,21],33:[1,22],34:[1,23],37:[1,24],39:25,40:26,41:[1,27],43:[1,28],44:[1,29],45:[1,30],46:[1,31],48:[1,32],49:[1,33],50:34,51:35,52:[1,36],54:[1,37],55:[1,38],56:[1,44],58:[1,45],59:[1,39],62:[1,40],64:[1,41],65:[1,42],66:[1,43]},{1:[3]},{5:[1,46]},{1:[2,2]},{5:[2,3]},{5:[2,4],8:[1,47]},{5:[2,6],6:$V0,7:$V1,9:$V2,10:48,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,8]},{5:[2,9]},{6:$V0,7:$V1,9:$V2,10:106,13:$V3,14:[1,107],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{6:$V0,7:$V1,9:$V2,10:108,13:$V3,14:[1,109],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,14]},{5:[2,15]},{5:[2,16]},{5:[2,17],14:$VS,16:110,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,19]},{5:[2,20]},{24:116,35:$VX,38:$VY},{24:119,35:$VX,38:$VY},{24:120,35:$VX,38:$VY},{5:[2,25],24:121,28:[1,122],29:[1,123],35:$VX,38:$VY},{14:[1,124]},{14:[1,125]},{35:[1,126]},{38:[1,127]},{5:[2,33]},{5:[2,34]},{5:[2,35],14:[1,128],42:[1,129]},{5:[2,38],35:[1,130]},{5:[2,40]},{35:[1,131]},{47:132,73:133,74:$VZ},{47:135,73:133,74:$VZ},{5:[2,44],14:[1,136]},{5:[2,46]},{5:[2,47]},{6:$V0,7:$V1,9:$V2,10:138,13:$V3,14:[1,137],15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,52]},{35:[1,139]},{14:[1,143],38:[1,141],60:140,61:[1,142]},{5:[2,65],38:[1,144],63:145,67:146,68:147,69:148,70:$V_,72:$V$},{24:151,35:$VX,38:$VY},{38:[1,152]},{38:[1,153]},{5:[2,54],29:[1,154],57:[1,155]},{5:[2,59],35:[1,156]},{1:[2,1]},{5:[2,5]},{5:[2,7],101:$V01},o($V11,[2,159]),o($V11,[2,160]),o($V21,[2,97]),o($V21,[2,98]),o($V11,[2,147]),o($V11,[2,148]),o($V11,[2,149]),o($V11,[2,150]),o($V11,[2,151]),o($V11,[2,152]),o($V11,[2,153]),o($V21,[2,101]),o($V21,[2,102]),o($V21,[2,103]),o($V21,[2,104]),o($V21,[2,105]),o($V21,[2,106]),o($V21,[2,107]),o($V21,[2,108]),o($V21,[2,109]),o($V21,[2,110]),o($V21,[2,111]),o($V21,[2,112]),o($V21,[2,113]),o($V21,[2,114]),o($V21,[2,115]),o($V21,[2,116]),o($V21,[2,117]),o($V21,[2,118]),o($V21,[2,119]),o($V21,[2,120]),o($V21,[2,121]),o($V21,[2,122]),o($V21,[2,123]),o($V21,[2,124]),o($V21,[2,125]),o($V21,[2,126]),o($V21,[2,127]),o($V21,[2,128]),o($V21,[2,129]),o($V21,[2,130]),o($V21,[2,131]),o($V21,[2,132]),o($V21,[2,133]),o($V21,[2,134]),o($V21,[2,135]),o($V21,[2,136]),o($V21,[2,137]),o($V21,[2,138]),o($V21,[2,139]),o($V21,[2,140]),o($V21,[2,141]),o($V21,[2,142]),o($V21,[2,143]),o($V21,[2,144]),o($V21,[2,145]),o($V21,[2,146]),{5:[2,10],101:$V01},{5:[2,11]},{14:$VS,16:158,35:$VT,38:$VU,77:$VV,78:$VW,101:$V01},{14:$VS,16:159,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,18]},o($V31,[2,92]),o($V31,[2,93]),o($V31,[2,94]),o($V31,[2,95]),o($V31,[2,96]),{5:[2,21]},o($V41,[2,75]),o($V41,[2,76]),{5:[2,22]},{5:[2,23]},{5:[2,24]},{5:[2,26]},{5:[2,27]},{5:[2,28],31:[1,160]},{5:[2,30]},{36:[1,161]},{5:[2,32]},{5:[2,36]},{5:[2,37]},{5:[2,39]},{5:[2,41]},{5:[2,42],73:162,74:$VZ},o($V51,[2,86]),{35:[1,163]},{5:[2,43],73:162,74:$VZ},{5:[2,45]},{14:[1,164]},{6:$V0,7:$V1,9:$V2,10:165,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:49,80:52,81:50,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR,101:$V01},{5:[2,53]},{5:[2,62]},{5:[2,63]},{5:[2,64]},{5:[2,164]},{5:[2,66],63:166,67:146,68:147,69:148,70:$V_,72:$V$},{5:[2,67]},{5:[2,77],67:167,68:147,69:148,70:$V_,72:$V$},o($V41,[2,81]),o($V41,[2,82],{80:52,53:168,75:169,76:170,79:171,6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN}),{71:[1,172]},{71:[1,173]},{5:[2,69],63:174,67:146,68:147,69:148,70:$V_,72:$V$},{5:[2,71],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:175,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,73],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:176,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,55],57:[1,177]},{5:[2,56],29:[1,178]},{5:[2,60],35:[1,179]},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,35:[1,181],37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:180,80:52,81:182,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,12]},{5:[2,13]},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,32:183,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:184,80:52,81:185,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{14:[1,186]},o($V51,[2,87]),o($V51,[2,88]),{5:[2,48],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:187,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,49],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,53:188,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:169,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,101:$V01},{5:[2,68]},{5:[2,78],67:189,68:147,69:148,70:$V_,72:$V$},o($V41,[2,83],{80:52,76:170,79:171,75:190,6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN}),o($V31,[2,89]),{71:[1,191],101:[1,192]},o($V61,[2,156]),{14:$VS,16:193,35:$VT,38:$VU,77:$VV,78:$VW},{14:$VS,16:194,35:$VT,38:$VU,77:$VV,78:$VW},{5:[2,70]},{5:[2,72],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,74],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,57]},{5:[2,58]},{5:[2,61]},o($V11,[2,161]),o($V11,[2,162]),o($V11,[2,163]),{5:[2,29]},{5:[2,99]},{5:[2,100]},{31:[1,195]},{5:[2,50],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,51],6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,75:190,76:170,79:171,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},{5:[2,79],67:196,68:147,69:148,70:$V_,72:$V$},o($V31,[2,90]),{14:$VS,16:197,35:$VT,38:$VU,77:$VV,78:$VW},{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,33:$Ve,34:$Vf,35:[1,199],37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,79:198,80:52,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN},o($V41,[2,84]),o($V31,[2,85]),{6:$V0,7:$V1,9:$V2,13:$V3,15:$V4,17:$V5,18:$V6,19:$V7,20:$V8,23:$V9,25:$Va,26:$Vb,27:$Vc,30:$Vd,32:200,33:$Ve,34:$Vf,37:$Vg,38:$Vh,41:$Vi,43:$Vj,45:$Vk,46:$Vl,49:$Vm,52:$Vn,54:$Vo,55:$Vp,56:$Vq,58:$Vr,59:$Vs,62:$Vt,64:$Vu,65:$Vv,66:$Vw,70:$Vx,72:$Vy,74:$Vz,79:184,80:52,81:185,82:$VA,83:$VB,84:$VC,85:$VD,86:$VE,87:$VF,88:$VG,89:$VH,90:$VI,91:$VJ,92:$VK,93:$VL,94:$VM,95:$VN,96:$VO,97:$VP,98:$VQ,99:$VR},{5:[2,80]},o($V31,[2,91]),o($V61,[2,157]),o($V61,[2,158]),{5:[2,31]}],\r\ndefaultActions: {3:[2,2],4:[2,3],7:[2,8],8:[2,9],11:[2,14],12:[2,15],13:[2,16],15:[2,19],16:[2,20],25:[2,33],26:[2,34],29:[2,40],34:[2,46],35:[2,47],37:[2,52],46:[2,1],47:[2,5],107:[2,11],110:[2,18],116:[2,21],119:[2,22],120:[2,23],121:[2,24],122:[2,26],123:[2,27],125:[2,30],127:[2,32],128:[2,36],129:[2,37],130:[2,39],131:[2,41],136:[2,45],139:[2,53],140:[2,62],141:[2,63],142:[2,64],143:[2,164],145:[2,67],158:[2,12],159:[2,13],166:[2,68],174:[2,70],177:[2,57],178:[2,58],179:[2,61],183:[2,29],184:[2,99],185:[2,100],196:[2,80],200:[2,31]},\r\nparseError: function parseError (str, hash) {\r\n if (hash.recoverable) {\r\n this.trace(str);\r\n } else {\r\n var error = new Error(str);\r\n error.hash = hash;\r\n throw error;\r\n }\r\n},\r\nparse: function parse(input) {\r\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\r\n var args = lstack.slice.call(arguments, 1);\r\n var lexer = Object.create(this.lexer);\r\n var sharedState = { yy: {} };\r\n for (var k in this.yy) {\r\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\r\n sharedState.yy[k] = this.yy[k];\r\n }\r\n }\r\n lexer.setInput(input, sharedState.yy);\r\n sharedState.yy.lexer = lexer;\r\n sharedState.yy.parser = this;\r\n if (typeof lexer.yylloc == 'undefined') {\r\n lexer.yylloc = {};\r\n }\r\n var yyloc = lexer.yylloc;\r\n lstack.push(yyloc);\r\n var ranges = lexer.options && lexer.options.ranges;\r\n if (typeof sharedState.yy.parseError === 'function') {\r\n this.parseError = sharedState.yy.parseError;\r\n } else {\r\n this.parseError = Object.getPrototypeOf(this).parseError;\r\n }\r\n function popStack(n) {\r\n stack.length = stack.length - 2 * n;\r\n vstack.length = vstack.length - n;\r\n lstack.length = lstack.length - n;\r\n }\r\n function lex() {\r\n var token;\r\n token = tstack.pop() || lexer.lex() || EOF;\r\n if (typeof token !== 'number') {\r\n if (token instanceof Array) {\r\n tstack = token;\r\n token = tstack.pop();\r\n }\r\n token = self.symbols_[token] || token;\r\n }\r\n return token;\r\n }\r\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\r\n while (true) {\r\n state = stack[stack.length - 1];\r\n if (this.defaultActions[state]) {\r\n action = this.defaultActions[state];\r\n } else {\r\n if (symbol === null || typeof symbol == 'undefined') {\r\n symbol = lex();\r\n }\r\n action = table[state] && table[state][symbol];\r\n }\r\n if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n var errStr = '';\r\n expected = [];\r\n for (p in table[state]) {\r\n if (this.terminals_[p] && p > TERROR) {\r\n expected.push('\\'' + this.terminals_[p] + '\\'');\r\n }\r\n }\r\n if (lexer.showPosition) {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\r\n } else {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\r\n }\r\n this.parseError(errStr, {\r\n text: lexer.match,\r\n token: this.terminals_[symbol] || symbol,\r\n line: lexer.yylineno,\r\n loc: yyloc,\r\n expected: expected\r\n });\r\n }\r\n if (action[0] instanceof Array && action.length > 1) {\r\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\r\n }\r\n switch (action[0]) {\r\n case 1:\r\n stack.push(symbol);\r\n vstack.push(lexer.yytext);\r\n lstack.push(lexer.yylloc);\r\n stack.push(action[1]);\r\n symbol = null;\r\n if (!preErrorSymbol) {\r\n yyleng = lexer.yyleng;\r\n yytext = lexer.yytext;\r\n yylineno = lexer.yylineno;\r\n yyloc = lexer.yylloc;\r\n if (recovering > 0) {\r\n recovering--;\r\n }\r\n } else {\r\n symbol = preErrorSymbol;\r\n preErrorSymbol = null;\r\n }\r\n break;\r\n case 2:\r\n len = this.productions_[action[1]][1];\r\n yyval.$ = vstack[vstack.length - len];\r\n yyval._$ = {\r\n first_line: lstack[lstack.length - (len || 1)].first_line,\r\n last_line: lstack[lstack.length - 1].last_line,\r\n first_column: lstack[lstack.length - (len || 1)].first_column,\r\n last_column: lstack[lstack.length - 1].last_column\r\n };\r\n if (ranges) {\r\n yyval._$.range = [\r\n lstack[lstack.length - (len || 1)].range[0],\r\n lstack[lstack.length - 1].range[1]\r\n ];\r\n }\r\n r = this.performAction.apply(yyval, [\r\n yytext,\r\n yyleng,\r\n yylineno,\r\n sharedState.yy,\r\n action[1],\r\n vstack,\r\n lstack\r\n ].concat(args));\r\n if (typeof r !== 'undefined') {\r\n return r;\r\n }\r\n if (len) {\r\n stack = stack.slice(0, -1 * len * 2);\r\n vstack = vstack.slice(0, -1 * len);\r\n lstack = lstack.slice(0, -1 * len);\r\n }\r\n stack.push(this.productions_[action[1]][0]);\r\n vstack.push(yyval.$);\r\n lstack.push(yyval._$);\r\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\r\n stack.push(newState);\r\n break;\r\n case 3:\r\n return true;\r\n }\r\n }\r\n return true;\r\n}};\r\n\r\n\r\n/* generated by jison-lex 0.3.4 */\r\nvar lexer = (function(){\r\nvar lexer = ({\r\n\r\nEOF:1,\r\n\r\nparseError:function parseError(str, hash) {\r\n if (this.yy.parser) {\r\n this.yy.parser.parseError(str, hash);\r\n } else {\r\n throw new Error(str);\r\n }\r\n },\r\n\r\n// resets the lexer, sets new input\r\nsetInput:function (input, yy) {\r\n this.yy = yy || this.yy || {};\r\n this._input = input;\r\n this._more = this._backtrack = this.done = false;\r\n this.yylineno = this.yyleng = 0;\r\n this.yytext = this.matched = this.match = '';\r\n this.conditionStack = ['INITIAL'];\r\n this.yylloc = {\r\n first_line: 1,\r\n first_column: 0,\r\n last_line: 1,\r\n last_column: 0\r\n };\r\n if (this.options.ranges) {\r\n this.yylloc.range = [0,0];\r\n }\r\n this.offset = 0;\r\n return this;\r\n },\r\n\r\n// consumes and returns one char from the input\r\ninput:function () {\r\n var ch = this._input[0];\r\n this.yytext += ch;\r\n this.yyleng++;\r\n this.offset++;\r\n this.match += ch;\r\n this.matched += ch;\r\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno++;\r\n this.yylloc.last_line++;\r\n } else {\r\n this.yylloc.last_column++;\r\n }\r\n if (this.options.ranges) {\r\n this.yylloc.range[1]++;\r\n }\r\n\r\n this._input = this._input.slice(1);\r\n return ch;\r\n },\r\n\r\n// unshifts one char (or a string) into the input\r\nunput:function (ch) {\r\n var len = ch.length;\r\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\r\n\r\n this._input = ch + this._input;\r\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\r\n //this.yyleng -= len;\r\n this.offset -= len;\r\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\r\n this.match = this.match.substr(0, this.match.length - 1);\r\n this.matched = this.matched.substr(0, this.matched.length - 1);\r\n\r\n if (lines.length - 1) {\r\n this.yylineno -= lines.length - 1;\r\n }\r\n var r = this.yylloc.range;\r\n\r\n this.yylloc = {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.first_column,\r\n last_column: lines ?\r\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\r\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\r\n this.yylloc.first_column - len\r\n };\r\n\r\n if (this.options.ranges) {\r\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\r\n }\r\n this.yyleng = this.yytext.length;\r\n return this;\r\n },\r\n\r\n// When called from action, caches matched text and appends it on next action\r\nmore:function () {\r\n this._more = true;\r\n return this;\r\n },\r\n\r\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\r\nreject:function () {\r\n if (this.options.backtrack_lexer) {\r\n this._backtrack = true;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n\r\n }\r\n return this;\r\n },\r\n\r\n// retain first n characters of the match\r\nless:function (n) {\r\n this.unput(this.match.slice(n));\r\n },\r\n\r\n// displays already matched input, i.e. for error messages\r\npastInput:function () {\r\n var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays upcoming input, i.e. for error messages\r\nupcomingInput:function () {\r\n var next = this.match;\r\n if (next.length < 20) {\r\n next += this._input.substr(0, 20-next.length);\r\n }\r\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays the character position where the lexing error occurred, i.e. for error messages\r\nshowPosition:function () {\r\n var pre = this.pastInput();\r\n var c = new Array(pre.length + 1).join(\"-\");\r\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\r\n },\r\n\r\n// test the lexed token: return FALSE when not a match, otherwise return token\r\ntest_match:function(match, indexed_rule) {\r\n var token,\r\n lines,\r\n backup;\r\n\r\n if (this.options.backtrack_lexer) {\r\n // save context\r\n backup = {\r\n yylineno: this.yylineno,\r\n yylloc: {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.last_line,\r\n first_column: this.yylloc.first_column,\r\n last_column: this.yylloc.last_column\r\n },\r\n yytext: this.yytext,\r\n match: this.match,\r\n matches: this.matches,\r\n matched: this.matched,\r\n yyleng: this.yyleng,\r\n offset: this.offset,\r\n _more: this._more,\r\n _input: this._input,\r\n yy: this.yy,\r\n conditionStack: this.conditionStack.slice(0),\r\n done: this.done\r\n };\r\n if (this.options.ranges) {\r\n backup.yylloc.range = this.yylloc.range.slice(0);\r\n }\r\n }\r\n\r\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno += lines.length;\r\n }\r\n this.yylloc = {\r\n first_line: this.yylloc.last_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.last_column,\r\n last_column: lines ?\r\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\r\n this.yylloc.last_column + match[0].length\r\n };\r\n this.yytext += match[0];\r\n this.match += match[0];\r\n this.matches = match;\r\n this.yyleng = this.yytext.length;\r\n if (this.options.ranges) {\r\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\r\n }\r\n this._more = false;\r\n this._backtrack = false;\r\n this._input = this._input.slice(match[0].length);\r\n this.matched += match[0];\r\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\r\n if (this.done && this._input) {\r\n this.done = false;\r\n }\r\n if (token) {\r\n return token;\r\n } else if (this._backtrack) {\r\n // recover context\r\n for (var k in backup) {\r\n this[k] = backup[k];\r\n }\r\n return false; // rule action called reject() implying the next rule should be tested instead.\r\n }\r\n return false;\r\n },\r\n\r\n// return next match in input\r\nnext:function () {\r\n if (this.done) {\r\n return this.EOF;\r\n }\r\n if (!this._input) {\r\n this.done = true;\r\n }\r\n\r\n var token,\r\n match,\r\n tempMatch,\r\n index;\r\n if (!this._more) {\r\n this.yytext = '';\r\n this.match = '';\r\n }\r\n var rules = this._currentRules();\r\n for (var i = 0; i < rules.length; i++) {\r\n tempMatch = this._input.match(this.rules[rules[i]]);\r\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n match = tempMatch;\r\n index = i;\r\n if (this.options.backtrack_lexer) {\r\n token = this.test_match(tempMatch, rules[i]);\r\n if (token !== false) {\r\n return token;\r\n } else if (this._backtrack) {\r\n match = false;\r\n continue; // rule action called reject() implying a rule MISmatch.\r\n } else {\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n } else if (!this.options.flex) {\r\n break;\r\n }\r\n }\r\n }\r\n if (match) {\r\n token = this.test_match(match, rules[index]);\r\n if (token !== false) {\r\n return token;\r\n }\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n if (this._input === \"\") {\r\n return this.EOF;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n }\r\n },\r\n\r\n// return next match that has a token\r\nlex:function lex () {\r\n var r = this.next();\r\n if (r) {\r\n return r;\r\n } else {\r\n return this.lex();\r\n }\r\n },\r\n\r\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\r\nbegin:function begin (condition) {\r\n this.conditionStack.push(condition);\r\n },\r\n\r\n// pop the previously active lexer condition state off the condition stack\r\npopState:function popState () {\r\n var n = this.conditionStack.length - 1;\r\n if (n > 0) {\r\n return this.conditionStack.pop();\r\n } else {\r\n return this.conditionStack[0];\r\n }\r\n },\r\n\r\n// produce the lexer rule set which is active for the currently active lexer condition state\r\n_currentRules:function _currentRules () {\r\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\r\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\r\n } else {\r\n return this.conditions[\"INITIAL\"].rules;\r\n }\r\n },\r\n\r\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\r\ntopState:function topState (n) {\r\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\r\n if (n >= 0) {\r\n return this.conditionStack[n];\r\n } else {\r\n return \"INITIAL\";\r\n }\r\n },\r\n\r\n// alias for begin(condition)\r\npushState:function pushState (condition) {\r\n this.begin(condition);\r\n },\r\n\r\n// return the number of states currently on the stack\r\nstateStackSize:function stateStackSize() {\r\n return this.conditionStack.length;\r\n },\r\noptions: {\"case-insensitive\":true},\r\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\nvar YYSTATE=YY_START;\r\nswitch($avoiding_name_collisions) {\r\ncase 0:/* ignore whitespace */\r\nbreak;\r\ncase 1:return '';\r\nbreak;\r\ncase 2:return '';\r\nbreak;\r\ncase 3:return 42;\r\nbreak;\r\ncase 4:return 35;\r\nbreak;\r\ncase 5:return 77;\r\nbreak;\r\ncase 6:return 78;\r\nbreak;\r\ncase 7:return 78;\r\nbreak;\r\ncase 8:return 8;\r\nbreak;\r\ncase 9:return 6;\r\nbreak;\r\ncase 10:return 82;\r\nbreak;\r\ncase 11:return 7;\r\nbreak;\r\ncase 12:return 9;\r\nbreak;\r\ncase 13:return 59;\r\nbreak;\r\ncase 14:return 13\r\nbreak;\r\ncase 15:return 15\r\nbreak;\r\ncase 16:return 17\r\nbreak;\r\ncase 17:return 18\r\nbreak;\r\ncase 18:return 19\r\nbreak;\r\ncase 19:return 20\r\nbreak;\r\ncase 20:return 11\r\nbreak;\r\ncase 21:return 62\r\nbreak;\r\ncase 22:return 64\r\nbreak;\r\ncase 23:return 23\r\nbreak;\r\ncase 24:return 25\r\nbreak;\r\ncase 25:return 26\r\nbreak;\r\ncase 26:return 27\r\nbreak;\r\ncase 27:return 30\r\nbreak;\r\ncase 28:return 34\r\nbreak;\r\ncase 29:return 33\r\nbreak;\r\ncase 30:return 65\r\nbreak;\r\ncase 31:return 66\r\nbreak;\r\ncase 32:return 37\r\nbreak;\r\ncase 33:return 41\r\nbreak;\r\ncase 34:return 43\r\nbreak;\r\ncase 35:return 52\r\nbreak;\r\ncase 36:return 54\r\nbreak;\r\ncase 37:return 55\r\nbreak;\r\ncase 38:return 46\r\nbreak;\r\ncase 39:return 48\r\nbreak;\r\ncase 40:return 45\r\nbreak;\r\ncase 41:return 49\r\nbreak;\r\ncase 42:return 56\r\nbreak;\r\ncase 43:return 58;\r\nbreak;\r\ncase 44:return 44\r\nbreak;\r\ncase 45:return 83\r\nbreak;\r\ncase 46:return 84\r\nbreak;\r\ncase 47:return 85\r\nbreak;\r\ncase 48:return 86\r\nbreak;\r\ncase 49:return 87\r\nbreak;\r\ncase 50:return 88\r\nbreak;\r\ncase 51:return 89\r\nbreak;\r\ncase 52:return 90\r\nbreak;\r\ncase 53:return 91\r\nbreak;\r\ncase 54:return 92\r\nbreak;\r\ncase 55:return 93\r\nbreak;\r\ncase 56:return 94\r\nbreak;\r\ncase 57:return 95\r\nbreak;\r\ncase 58:return 70\r\nbreak;\r\ncase 59:return 70\r\nbreak;\r\ncase 60:return 72\r\nbreak;\r\ncase 61:return 72\r\nbreak;\r\ncase 62:return 74\r\nbreak;\r\ncase 63:return 74\r\nbreak;\r\ncase 64:return 74\r\nbreak;\r\ncase 65:return 31\r\nbreak;\r\ncase 66:return 36\r\nbreak;\r\ncase 67:return 96\r\nbreak;\r\ncase 68:return 97\r\nbreak;\r\ncase 69:return 98\r\nbreak;\r\ncase 70:return 99\r\nbreak;\r\ncase 71:yy_.yytext = yy.utils.unquoteString(yy_.yytext); return 14;\r\nbreak;\r\ncase 72:return 38;\r\nbreak;\r\ncase 73:return 5;\r\nbreak;\r\ncase 74:return 101;\r\nbreak;\r\ncase 75:return 103;\r\nbreak;\r\ncase 76:return '\\\\';\r\nbreak;\r\ncase 77:return 28\r\nbreak;\r\ncase 78:return 61\r\nbreak;\r\ncase 79:return 29\r\nbreak;\r\ncase 80:return 57\r\nbreak;\r\ncase 81:return 71\r\nbreak;\r\n}\r\n},\r\nrules: [/^(?:\\s+)/i,/^(?:[#].*)/i,/^(?:\\/\\/.*)/i,/^(?:([_A-Z0-9\\/\\+]+==))/i,/^(?:-?[0-9]+(\\.[0-9]+)?\\b)/i,/^(?:0[xX][0-9A-F]+\\b)/i,/^(?:false\\b)/i,/^(?:true\\b)/i,/^(?:all\\b)/i,/^(?:reset\\b)/i,/^(?:clear\\b)/i,/^(?:build\\b)/i,/^(?:help\\b)/i,/^(?:load\\b)/i,/^(?:get\\b)/i,/^(?:set\\b)/i,/^(?:set_save\\b)/i,/^(?:set_restore\\b)/i,/^(?:set_reset\\b)/i,/^(?:preset\\b)/i,/^(?:motm\\b)/i,/^(?:add\\b)/i,/^(?:rep\\b)/i,/^(?:remove\\b)/i,/^(?:hide\\b)/i,/^(?:show\\b)/i,/^(?:list\\b)/i,/^(?:select\\b)/i,/^(?:within\\b)/i,/^(?:selector\\b)/i,/^(?:mode\\b)/i,/^(?:color\\b)/i,/^(?:material\\b)/i,/^(?:view\\b)/i,/^(?:unit\\b)/i,/^(?:line\\b)/i,/^(?:listobj\\b)/i,/^(?:removeobj\\b)/i,/^(?:rotate\\b)/i,/^(?:translate\\b)/i,/^(?:scale\\b)/i,/^(?:center\\b)/i,/^(?:url\\b)/i,/^(?:screenshot\\b)/i,/^(?:dssp\\b)/i,/^(?:file_list\\b)/i,/^(?:file_register\\b)/i,/^(?:file_delete\\b)/i,/^(?:preset_add\\b)/i,/^(?:preset_delete\\b)/i,/^(?:preset_update\\b)/i,/^(?:preset_rename\\b)/i,/^(?:preset_open\\b)/i,/^(?:create_scenario\\b)/i,/^(?:reset_scenario\\b)/i,/^(?:delete_scenario\\b)/i,/^(?:add_scenario_item\\b)/i,/^(?:list_scenario\\b)/i,/^(?:s\\b)/i,/^(?:mt\\b)/i,/^(?:m\\b)/i,/^(?:c\\b)/i,/^(?:x\\b)/i,/^(?:y\\b)/i,/^(?:z\\b)/i,/^(?:as\\b)/i,/^(?:of\\b)/i,/^(?:pdb\\b)/i,/^(?:delay\\b)/i,/^(?:prst\\b)/i,/^(?:desc\\b)/i,/^(?:((?:\"(?:\\\\.|[^\\\\\"])*\"|'(?:\\\\.|[^\\\\'])*')))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:\\.)/i,/^(?:\\/)/i,/^(?:\\\\)/i,/^(?:-e\\b)/i,/^(?:-f\\b)/i,/^(?:-s\\b)/i,/^(?:-v\\b)/i,/^(?:=)/i],\r\nconditions: {\"INITIAL\":{\"rules\":[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,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,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81],\"inclusive\":true}}\r\n});\r\nreturn lexer;\r\n})();\r\nparser.lexer = lexer;\r\nfunction Parser () {\r\n this.yy = {};\r\n}\r\nParser.prototype = parser;parser.Parser = Parser;\r\nreturn new Parser;\r\n})();\r\n\r\nmodule.exports = {parser: parser};\r\n","/* eslint-disable */\r\n// DO NOT EDIT! Automatically generated from .jison\r\n/* parser generated by jison 0.4.18 */\r\n/*\r\n Returns a Parser object of the following structure:\r\n\r\n Parser: {\r\n yy: {}\r\n }\r\n\r\n Parser.prototype: {\r\n yy: {},\r\n trace: function(),\r\n symbols_: {associative list: name ==> number},\r\n terminals_: {associative list: number ==> name},\r\n productions_: [...],\r\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\r\n table: [...],\r\n defaultActions: {...},\r\n parseError: function(str, hash),\r\n parse: function(input),\r\n\r\n lexer: {\r\n EOF: 1,\r\n parseError: function(str, hash),\r\n setInput: function(input),\r\n input: function(),\r\n unput: function(str),\r\n more: function(),\r\n less: function(n),\r\n pastInput: function(),\r\n upcomingInput: function(),\r\n showPosition: function(),\r\n test_match: function(regex_match_array, rule_index),\r\n next: function(),\r\n lex: function(),\r\n begin: function(condition),\r\n popState: function(),\r\n _currentRules: function(),\r\n topState: function(),\r\n pushState: function(condition),\r\n\r\n options: {\r\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\r\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\r\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\r\n },\r\n\r\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\r\n rules: [...],\r\n conditions: {associative list: name ==> set},\r\n }\r\n }\r\n\r\n\r\n token location info (@$, _$, etc.): {\r\n first_line: n,\r\n last_line: n,\r\n first_column: n,\r\n last_column: n,\r\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\r\n }\r\n\r\n\r\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\r\n text: (matched text)\r\n token: (the produced terminal token, if any)\r\n line: (yylineno)\r\n }\r\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\r\n loc: (yylloc)\r\n expected: (string describing the set of expected tokens)\r\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\r\n }\r\n*/\r\nvar parser = (function(){\r\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,4],$V1=[1,5],$V2=[1,6],$V3=[1,7],$V4=[1,8],$V5=[1,9],$V6=[1,11],$V7=[1,12],$V8=[5,7,8,11],$V9=[1,17],$Va=[1,22],$Vb=[1,20],$Vc=[1,21],$Vd=[5,7,8,11,19];\r\nvar parser = {trace: function trace() { },\r\nyy: {},\r\nsymbols_: {\"error\":2,\"Program\":3,\"Expression\":4,\"EOF\":5,\"Selector\":6,\"OR\":7,\"AND\":8,\"NOT\":9,\"(\":10,\")\":11,\"SELECTOR\":12,\"NAMED_SELECTOR\":13,\"SELECTOR_RANGED\":14,\"RangeList\":15,\"SELECTOR_NAMED\":16,\"NameList\":17,\"Range\":18,\",\":19,\"NUMBER\":20,\":\":21,\"Name\":22,\"IDENTIFIER\":23,\"STRING\":24,\"$accept\":0,\"$end\":1},\r\nterminals_: {2:\"error\",5:\"EOF\",7:\"OR\",8:\"AND\",9:\"NOT\",10:\"(\",11:\")\",12:\"SELECTOR\",13:\"NAMED_SELECTOR\",14:\"SELECTOR_RANGED\",16:\"SELECTOR_NAMED\",19:\",\",20:\"NUMBER\",21:\":\",23:\"IDENTIFIER\",24:\"STRING\"},\r\nproductions_: [0,[3,2],[4,1],[4,3],[4,3],[4,2],[4,3],[6,1],[6,1],[6,2],[6,2],[15,1],[15,3],[18,1],[18,3],[17,1],[17,3],[22,1],[22,1],[22,1]],\r\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\r\n/* this == yyval */\r\n\r\nvar $0 = $$.length - 1;\r\nswitch (yystate) {\r\ncase 1:\r\n return $$[$0-1]; \r\nbreak;\r\ncase 3:\r\nthis.$ = yy.keyword('or')($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 4:\r\nthis.$ = yy.keyword('and')($$[$0-2], $$[$0]);\r\nbreak;\r\ncase 5:\r\nthis.$ = yy.keyword('not')($$[$0]);\r\nbreak;\r\ncase 6:\r\nthis.$ = $$[$0-1];\r\nbreak;\r\ncase 7:\r\nthis.$ = yy.keyword($$[$0])();\r\nbreak;\r\ncase 8:\r\nthis.$ = yy.GetSelector($$[$0].toLowerCase().slice(1, $$[$0].length));\r\nbreak;\r\ncase 9: case 10:\r\nthis.$ = yy.keyword($$[$0-1])($$[$0]);\r\nbreak;\r\ncase 11:\r\nthis.$ = new yy.RangeList($$[$0]);\r\nbreak;\r\ncase 12: case 16:\r\nthis.$ = $$[$0-2].append($$[$0]);\r\nbreak;\r\ncase 13:\r\nthis.$ = new yy.Range(Number($$[$0]));\r\nbreak;\r\ncase 14:\r\nthis.$ = new yy.Range(Number($$[$0-2]), Number($$[$0]));\r\nbreak;\r\ncase 15:\r\nthis.$ = new yy.ValueList($$[$0]);\r\nbreak;\r\n}\r\n},\r\ntable: [{3:1,4:2,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{1:[3]},{5:[1,10],7:$V6,8:$V7},o($V8,[2,2]),{4:13,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{4:14,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},o($V8,[2,7]),o($V8,[2,8]),{15:15,18:16,20:$V9},{17:18,20:$Va,22:19,23:$Vb,24:$Vc},{1:[2,1]},{4:23,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},{4:24,6:3,9:$V0,10:$V1,12:$V2,13:$V3,14:$V4,16:$V5},o($V8,[2,5]),{7:$V6,8:$V7,11:[1,25]},o($V8,[2,9],{19:[1,26]}),o($Vd,[2,11]),o($Vd,[2,13],{21:[1,27]}),o($V8,[2,10],{19:[1,28]}),o($Vd,[2,15]),o($Vd,[2,17]),o($Vd,[2,18]),o($Vd,[2,19]),o([5,7,11],[2,3],{8:$V7}),o($V8,[2,4]),o($V8,[2,6]),{18:29,20:$V9},{20:[1,30]},{20:$Va,22:31,23:$Vb,24:$Vc},o($Vd,[2,12]),o($Vd,[2,14]),o($Vd,[2,16])],\r\ndefaultActions: {10:[2,1]},\r\nparseError: function parseError(str, hash) {\r\n if (hash.recoverable) {\r\n this.trace(str);\r\n } else {\r\n var error = new Error(str);\r\n error.hash = hash;\r\n throw error;\r\n }\r\n},\r\nparse: function parse(input) {\r\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\r\n var args = lstack.slice.call(arguments, 1);\r\n var lexer = Object.create(this.lexer);\r\n var sharedState = { yy: {} };\r\n for (var k in this.yy) {\r\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\r\n sharedState.yy[k] = this.yy[k];\r\n }\r\n }\r\n lexer.setInput(input, sharedState.yy);\r\n sharedState.yy.lexer = lexer;\r\n sharedState.yy.parser = this;\r\n if (typeof lexer.yylloc == 'undefined') {\r\n lexer.yylloc = {};\r\n }\r\n var yyloc = lexer.yylloc;\r\n lstack.push(yyloc);\r\n var ranges = lexer.options && lexer.options.ranges;\r\n if (typeof sharedState.yy.parseError === 'function') {\r\n this.parseError = sharedState.yy.parseError;\r\n } else {\r\n this.parseError = Object.getPrototypeOf(this).parseError;\r\n }\r\n function popStack(n) {\r\n stack.length = stack.length - 2 * n;\r\n vstack.length = vstack.length - n;\r\n lstack.length = lstack.length - n;\r\n }\r\n function lex() {\r\n var token;\r\n token = tstack.pop() || lexer.lex() || EOF;\r\n if (typeof token !== 'number') {\r\n if (token instanceof Array) {\r\n tstack = token;\r\n token = tstack.pop();\r\n }\r\n token = self.symbols_[token] || token;\r\n }\r\n return token;\r\n }\r\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\r\n while (true) {\r\n state = stack[stack.length - 1];\r\n if (this.defaultActions[state]) {\r\n action = this.defaultActions[state];\r\n } else {\r\n if (symbol === null || typeof symbol == 'undefined') {\r\n symbol = lex();\r\n }\r\n action = table[state] && table[state][symbol];\r\n }\r\n if (typeof action === 'undefined' || !action.length || !action[0]) {\r\n var errStr = '';\r\n expected = [];\r\n for (p in table[state]) {\r\n if (this.terminals_[p] && p > TERROR) {\r\n expected.push('\\'' + this.terminals_[p] + '\\'');\r\n }\r\n }\r\n if (lexer.showPosition) {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\r\n } else {\r\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\r\n }\r\n this.parseError(errStr, {\r\n text: lexer.match,\r\n token: this.terminals_[symbol] || symbol,\r\n line: lexer.yylineno,\r\n loc: yyloc,\r\n expected: expected\r\n });\r\n }\r\n if (action[0] instanceof Array && action.length > 1) {\r\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\r\n }\r\n switch (action[0]) {\r\n case 1:\r\n stack.push(symbol);\r\n vstack.push(lexer.yytext);\r\n lstack.push(lexer.yylloc);\r\n stack.push(action[1]);\r\n symbol = null;\r\n if (!preErrorSymbol) {\r\n yyleng = lexer.yyleng;\r\n yytext = lexer.yytext;\r\n yylineno = lexer.yylineno;\r\n yyloc = lexer.yylloc;\r\n if (recovering > 0) {\r\n recovering--;\r\n }\r\n } else {\r\n symbol = preErrorSymbol;\r\n preErrorSymbol = null;\r\n }\r\n break;\r\n case 2:\r\n len = this.productions_[action[1]][1];\r\n yyval.$ = vstack[vstack.length - len];\r\n yyval._$ = {\r\n first_line: lstack[lstack.length - (len || 1)].first_line,\r\n last_line: lstack[lstack.length - 1].last_line,\r\n first_column: lstack[lstack.length - (len || 1)].first_column,\r\n last_column: lstack[lstack.length - 1].last_column\r\n };\r\n if (ranges) {\r\n yyval._$.range = [\r\n lstack[lstack.length - (len || 1)].range[0],\r\n lstack[lstack.length - 1].range[1]\r\n ];\r\n }\r\n r = this.performAction.apply(yyval, [\r\n yytext,\r\n yyleng,\r\n yylineno,\r\n sharedState.yy,\r\n action[1],\r\n vstack,\r\n lstack\r\n ].concat(args));\r\n if (typeof r !== 'undefined') {\r\n return r;\r\n }\r\n if (len) {\r\n stack = stack.slice(0, -1 * len * 2);\r\n vstack = vstack.slice(0, -1 * len);\r\n lstack = lstack.slice(0, -1 * len);\r\n }\r\n stack.push(this.productions_[action[1]][0]);\r\n vstack.push(yyval.$);\r\n lstack.push(yyval._$);\r\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\r\n stack.push(newState);\r\n break;\r\n case 3:\r\n return true;\r\n }\r\n }\r\n return true;\r\n}};\r\n\r\n\r\n/* generated by jison-lex 0.3.4 */\r\nvar lexer = (function(){\r\nvar lexer = ({\r\n\r\nEOF:1,\r\n\r\nparseError:function parseError(str, hash) {\r\n if (this.yy.parser) {\r\n this.yy.parser.parseError(str, hash);\r\n } else {\r\n throw new Error(str);\r\n }\r\n },\r\n\r\n// resets the lexer, sets new input\r\nsetInput:function (input, yy) {\r\n this.yy = yy || this.yy || {};\r\n this._input = input;\r\n this._more = this._backtrack = this.done = false;\r\n this.yylineno = this.yyleng = 0;\r\n this.yytext = this.matched = this.match = '';\r\n this.conditionStack = ['INITIAL'];\r\n this.yylloc = {\r\n first_line: 1,\r\n first_column: 0,\r\n last_line: 1,\r\n last_column: 0\r\n };\r\n if (this.options.ranges) {\r\n this.yylloc.range = [0,0];\r\n }\r\n this.offset = 0;\r\n return this;\r\n },\r\n\r\n// consumes and returns one char from the input\r\ninput:function () {\r\n var ch = this._input[0];\r\n this.yytext += ch;\r\n this.yyleng++;\r\n this.offset++;\r\n this.match += ch;\r\n this.matched += ch;\r\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno++;\r\n this.yylloc.last_line++;\r\n } else {\r\n this.yylloc.last_column++;\r\n }\r\n if (this.options.ranges) {\r\n this.yylloc.range[1]++;\r\n }\r\n\r\n this._input = this._input.slice(1);\r\n return ch;\r\n },\r\n\r\n// unshifts one char (or a string) into the input\r\nunput:function (ch) {\r\n var len = ch.length;\r\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\r\n\r\n this._input = ch + this._input;\r\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\r\n //this.yyleng -= len;\r\n this.offset -= len;\r\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\r\n this.match = this.match.substr(0, this.match.length - 1);\r\n this.matched = this.matched.substr(0, this.matched.length - 1);\r\n\r\n if (lines.length - 1) {\r\n this.yylineno -= lines.length - 1;\r\n }\r\n var r = this.yylloc.range;\r\n\r\n this.yylloc = {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.first_column,\r\n last_column: lines ?\r\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\r\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\r\n this.yylloc.first_column - len\r\n };\r\n\r\n if (this.options.ranges) {\r\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\r\n }\r\n this.yyleng = this.yytext.length;\r\n return this;\r\n },\r\n\r\n// When called from action, caches matched text and appends it on next action\r\nmore:function () {\r\n this._more = true;\r\n return this;\r\n },\r\n\r\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\r\nreject:function () {\r\n if (this.options.backtrack_lexer) {\r\n this._backtrack = true;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n\r\n }\r\n return this;\r\n },\r\n\r\n// retain first n characters of the match\r\nless:function (n) {\r\n this.unput(this.match.slice(n));\r\n },\r\n\r\n// displays already matched input, i.e. for error messages\r\npastInput:function () {\r\n var past = this.matched.substr(0, this.matched.length - this.match.length);\r\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays upcoming input, i.e. for error messages\r\nupcomingInput:function () {\r\n var next = this.match;\r\n if (next.length < 20) {\r\n next += this._input.substr(0, 20-next.length);\r\n }\r\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\r\n },\r\n\r\n// displays the character position where the lexing error occurred, i.e. for error messages\r\nshowPosition:function () {\r\n var pre = this.pastInput();\r\n var c = new Array(pre.length + 1).join(\"-\");\r\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\r\n },\r\n\r\n// test the lexed token: return FALSE when not a match, otherwise return token\r\ntest_match:function (match, indexed_rule) {\r\n var token,\r\n lines,\r\n backup;\r\n\r\n if (this.options.backtrack_lexer) {\r\n // save context\r\n backup = {\r\n yylineno: this.yylineno,\r\n yylloc: {\r\n first_line: this.yylloc.first_line,\r\n last_line: this.last_line,\r\n first_column: this.yylloc.first_column,\r\n last_column: this.yylloc.last_column\r\n },\r\n yytext: this.yytext,\r\n match: this.match,\r\n matches: this.matches,\r\n matched: this.matched,\r\n yyleng: this.yyleng,\r\n offset: this.offset,\r\n _more: this._more,\r\n _input: this._input,\r\n yy: this.yy,\r\n conditionStack: this.conditionStack.slice(0),\r\n done: this.done\r\n };\r\n if (this.options.ranges) {\r\n backup.yylloc.range = this.yylloc.range.slice(0);\r\n }\r\n }\r\n\r\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\r\n if (lines) {\r\n this.yylineno += lines.length;\r\n }\r\n this.yylloc = {\r\n first_line: this.yylloc.last_line,\r\n last_line: this.yylineno + 1,\r\n first_column: this.yylloc.last_column,\r\n last_column: lines ?\r\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\r\n this.yylloc.last_column + match[0].length\r\n };\r\n this.yytext += match[0];\r\n this.match += match[0];\r\n this.matches = match;\r\n this.yyleng = this.yytext.length;\r\n if (this.options.ranges) {\r\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\r\n }\r\n this._more = false;\r\n this._backtrack = false;\r\n this._input = this._input.slice(match[0].length);\r\n this.matched += match[0];\r\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\r\n if (this.done && this._input) {\r\n this.done = false;\r\n }\r\n if (token) {\r\n return token;\r\n } else if (this._backtrack) {\r\n // recover context\r\n for (var k in backup) {\r\n this[k] = backup[k];\r\n }\r\n return false; // rule action called reject() implying the next rule should be tested instead.\r\n }\r\n return false;\r\n },\r\n\r\n// return next match in input\r\nnext:function () {\r\n if (this.done) {\r\n return this.EOF;\r\n }\r\n if (!this._input) {\r\n this.done = true;\r\n }\r\n\r\n var token,\r\n match,\r\n tempMatch,\r\n index;\r\n if (!this._more) {\r\n this.yytext = '';\r\n this.match = '';\r\n }\r\n var rules = this._currentRules();\r\n for (var i = 0; i < rules.length; i++) {\r\n tempMatch = this._input.match(this.rules[rules[i]]);\r\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\r\n match = tempMatch;\r\n index = i;\r\n if (this.options.backtrack_lexer) {\r\n token = this.test_match(tempMatch, rules[i]);\r\n if (token !== false) {\r\n return token;\r\n } else if (this._backtrack) {\r\n match = false;\r\n continue; // rule action called reject() implying a rule MISmatch.\r\n } else {\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n } else if (!this.options.flex) {\r\n break;\r\n }\r\n }\r\n }\r\n if (match) {\r\n token = this.test_match(match, rules[index]);\r\n if (token !== false) {\r\n return token;\r\n }\r\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\r\n return false;\r\n }\r\n if (this._input === \"\") {\r\n return this.EOF;\r\n } else {\r\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\r\n text: \"\",\r\n token: null,\r\n line: this.yylineno\r\n });\r\n }\r\n },\r\n\r\n// return next match that has a token\r\nlex:function lex() {\r\n var r = this.next();\r\n if (r) {\r\n return r;\r\n } else {\r\n return this.lex();\r\n }\r\n },\r\n\r\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\r\nbegin:function begin(condition) {\r\n this.conditionStack.push(condition);\r\n },\r\n\r\n// pop the previously active lexer condition state off the condition stack\r\npopState:function popState() {\r\n var n = this.conditionStack.length - 1;\r\n if (n > 0) {\r\n return this.conditionStack.pop();\r\n } else {\r\n return this.conditionStack[0];\r\n }\r\n },\r\n\r\n// produce the lexer rule set which is active for the currently active lexer condition state\r\n_currentRules:function _currentRules() {\r\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\r\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\r\n } else {\r\n return this.conditions[\"INITIAL\"].rules;\r\n }\r\n },\r\n\r\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\r\ntopState:function topState(n) {\r\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\r\n if (n >= 0) {\r\n return this.conditionStack[n];\r\n } else {\r\n return \"INITIAL\";\r\n }\r\n },\r\n\r\n// alias for begin(condition)\r\npushState:function pushState(condition) {\r\n this.begin(condition);\r\n },\r\n\r\n// return the number of states currently on the stack\r\nstateStackSize:function stateStackSize() {\r\n return this.conditionStack.length;\r\n },\r\noptions: {\"case-insensitive\":true},\r\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\r\nvar YYSTATE=YY_START;\r\nswitch($avoiding_name_collisions) {\r\ncase 0:/* skip whitespace */\r\nbreak;\r\ncase 1:return 20;\r\nbreak;\r\ncase 2:return 7;\r\nbreak;\r\ncase 3:return 8;\r\nbreak;\r\ncase 4:return 9;\r\nbreak;\r\ncase 5:return 12;\r\nbreak;\r\ncase 6:return 16;\r\nbreak;\r\ncase 7:return 14;\r\nbreak;\r\ncase 8:return 10;\r\nbreak;\r\ncase 9:return 11;\r\nbreak;\r\ncase 10:return 19;\r\nbreak;\r\ncase 11:return 21;\r\nbreak;\r\ncase 12:return '<=';\r\nbreak;\r\ncase 13:return '>=';\r\nbreak;\r\ncase 14:return '<';\r\nbreak;\r\ncase 15:return '>';\r\nbreak;\r\ncase 16:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 24;\r\nbreak;\r\ncase 17:return 13;\r\nbreak;\r\ncase 18:return 23;\r\nbreak;\r\ncase 19:return 5;\r\nbreak;\r\ncase 20:return 'INVALID';\r\nbreak;\r\n}\r\n},\r\nrules: [/^(?:\\s+)/i,/^(?:(-?(?:[1-9][0-9]+|[0-9]))\\b)/i,/^(?:OR\\b)/i,/^(?:AND\\b)/i,/^(?:NOT\\b)/i,/^(?:((ALL|NONE|HETATM|PROTEIN|BASIC|ACIDIC|CHARGED|POLAR|NONPOLAR|AROMATIC|NUCLEIC|PURINE|PYRIMIDINE|WATER|POLARH|NONPOLARH))\\b)/i,/^(?:((NAME|ELEM|TYPE|RESIDUE|ICODE|CHAIN|ALTLOC))\\b)/i,/^(?:((SERIAL|SEQUENCE|RESIDX))\\b)/i,/^(?:\\()/i,/^(?:\\))/i,/^(?:,)/i,/^(?::)/i,/^(?:<=)/i,/^(?:>=)/i,/^(?:<)/i,/^(?:>)/i,/^(?:((?:\"(?:\\\\.|[^\\\\\"])*\"|'(?:\\\\.|[^\\\\'])*')))/i,/^(?:(@[_A-Z0-9]+))/i,/^(?:([_A-Z0-9]+))/i,/^(?:$)/i,/^(?:.)/i],\r\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],\"inclusive\":true}}\r\n});\r\nreturn lexer;\r\n})();\r\nparser.lexer = lexer;\r\nfunction Parser () {\r\n this.yy = {};\r\n}\r\nParser.prototype = parser;parser.Parser = Parser;\r\nreturn new Parser;\r\n})();\r\n\r\nmodule.exports = {parser: parser};\r\n","\r\n/*\r\nSmooth.js version 0.1.7\r\n\r\nTurn arrays into smooth functions.\r\n\r\nCopyright 2012 Spencer Cohen\r\nLicensed under MIT license (see \"Smooth.js MIT license.txt\")\r\n*/\r\n\r\n/*Constants (these are accessible by Smooth.WHATEVER in user space)\r\n*/\r\n\r\n(function() {\r\n var AbstractInterpolator, CubicInterpolator, Enum, LinearInterpolator, NearestInterpolator, PI, SincFilterInterpolator, Smooth, clipClamp, clipMirror, clipPeriodic, defaultConfig, getColumn, getType, isValidNumber, k, makeLanczosWindow, makeScaledFunction, makeSincKernel, normalizeScaleTo, shallowCopy, sin, sinc, v, validateNumber, validateVector,\r\n __hasProp = Object.prototype.hasOwnProperty,\r\n __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; };\r\n\r\n Enum = {\r\n /*Interpolation methods\r\n */\r\n METHOD_NEAREST: 'nearest',\r\n METHOD_LINEAR: 'linear',\r\n METHOD_CUBIC: 'cubic',\r\n METHOD_LANCZOS: 'lanczos',\r\n METHOD_SINC: 'sinc',\r\n /*Input clipping modes\r\n */\r\n CLIP_CLAMP: 'clamp',\r\n CLIP_ZERO: 'zero',\r\n CLIP_PERIODIC: 'periodic',\r\n CLIP_MIRROR: 'mirror',\r\n /* Constants for control over the cubic interpolation tension\r\n */\r\n CUBIC_TENSION_DEFAULT: 0,\r\n CUBIC_TENSION_CATMULL_ROM: 0\r\n };\r\n\r\n defaultConfig = {\r\n method: Enum.METHOD_CUBIC,\r\n cubicTension: Enum.CUBIC_TENSION_DEFAULT,\r\n clip: Enum.CLIP_CLAMP,\r\n scaleTo: 0,\r\n sincFilterSize: 2,\r\n sincWindow: void 0\r\n };\r\n\r\n /*Index clipping functions\r\n */\r\n\r\n clipClamp = function(i, n) {\r\n return Math.max(0, Math.min(i, n - 1));\r\n };\r\n\r\n clipPeriodic = function(i, n) {\r\n i = i % n;\r\n if (i < 0) i += n;\r\n return i;\r\n };\r\n\r\n clipMirror = function(i, n) {\r\n var period;\r\n period = 2 * (n - 1);\r\n i = clipPeriodic(i, period);\r\n if (i > n - 1) i = period - i;\r\n return i;\r\n };\r\n\r\n /*\r\n Abstract scalar interpolation class which provides common functionality for all interpolators\r\n \r\n Subclasses must override interpolate().\r\n */\r\n\r\n AbstractInterpolator = (function() {\r\n\r\n function AbstractInterpolator(array, config) {\r\n this.array = array.slice(0);\r\n this.length = this.array.length;\r\n if (!(this.clipHelper = {\r\n clamp: this.clipHelperClamp,\r\n zero: this.clipHelperZero,\r\n periodic: this.clipHelperPeriodic,\r\n mirror: this.clipHelperMirror\r\n }[config.clip])) {\r\n throw \"Invalid clip: \" + config.clip;\r\n }\r\n }\r\n\r\n AbstractInterpolator.prototype.getClippedInput = function(i) {\r\n if ((0 <= i && i < this.length)) {\r\n return this.array[i];\r\n } else {\r\n return this.clipHelper(i);\r\n }\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperClamp = function(i) {\r\n return this.array[clipClamp(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperZero = function(i) {\r\n return 0;\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperPeriodic = function(i) {\r\n return this.array[clipPeriodic(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.clipHelperMirror = function(i) {\r\n return this.array[clipMirror(i, this.length)];\r\n };\r\n\r\n AbstractInterpolator.prototype.interpolate = function(t) {\r\n throw 'Subclasses of AbstractInterpolator must override the interpolate() method.';\r\n };\r\n\r\n return AbstractInterpolator;\r\n\r\n })();\r\n\r\n NearestInterpolator = (function(_super) {\r\n\r\n __extends(NearestInterpolator, _super);\r\n\r\n function NearestInterpolator() {\r\n NearestInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n NearestInterpolator.prototype.interpolate = function(t) {\r\n return this.getClippedInput(Math.round(t));\r\n };\r\n\r\n return NearestInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n LinearInterpolator = (function(_super) {\r\n\r\n __extends(LinearInterpolator, _super);\r\n\r\n function LinearInterpolator() {\r\n LinearInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n LinearInterpolator.prototype.interpolate = function(t) {\r\n var k;\r\n k = Math.floor(t);\r\n t -= k;\r\n return (1 - t) * this.getClippedInput(k) + t * this.getClippedInput(k + 1);\r\n };\r\n\r\n return LinearInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n CubicInterpolator = (function(_super) {\r\n\r\n __extends(CubicInterpolator, _super);\r\n\r\n function CubicInterpolator(array, config) {\r\n this.tangentFactor = 1 - Math.max(-1, Math.min(1, config.cubicTension));\r\n CubicInterpolator.__super__.constructor.apply(this, arguments);\r\n }\r\n\r\n CubicInterpolator.prototype.getTangent = function(k) {\r\n return this.tangentFactor * (this.getClippedInput(k + 1) - this.getClippedInput(k - 1)) / 2;\r\n };\r\n\r\n CubicInterpolator.prototype.interpolate = function(t) {\r\n var k, m, p, t2, t3;\r\n k = Math.floor(t);\r\n m = [this.getTangent(k), this.getTangent(k + 1)];\r\n p = [this.getClippedInput(k), this.getClippedInput(k + 1)];\r\n t -= k;\r\n t2 = t * t;\r\n t3 = t * t2;\r\n return (2 * t3 - 3 * t2 + 1) * p[0] + (t3 - 2 * t2 + t) * m[0] + (-2 * t3 + 3 * t2) * p[1] + (t3 - t2) * m[1];\r\n };\r\n\r\n return CubicInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n sin = Math.sin, PI = Math.PI;\r\n\r\n sinc = function(x) {\r\n if (x === 0) {\r\n return 1;\r\n } else {\r\n return sin(PI * x) / (PI * x);\r\n }\r\n };\r\n\r\n makeLanczosWindow = function(a) {\r\n return function(x) {\r\n return sinc(x / a);\r\n };\r\n };\r\n\r\n makeSincKernel = function(window) {\r\n return function(x) {\r\n return sinc(x) * window(x);\r\n };\r\n };\r\n\r\n SincFilterInterpolator = (function(_super) {\r\n\r\n __extends(SincFilterInterpolator, _super);\r\n\r\n function SincFilterInterpolator(array, config) {\r\n SincFilterInterpolator.__super__.constructor.apply(this, arguments);\r\n this.a = config.sincFilterSize;\r\n if (!config.sincWindow) throw 'No sincWindow provided';\r\n this.kernel = makeSincKernel(config.sincWindow);\r\n }\r\n\r\n SincFilterInterpolator.prototype.interpolate = function(t) {\r\n var k, n, sum, _ref, _ref2;\r\n k = Math.floor(t);\r\n sum = 0;\r\n for (n = _ref = k - this.a + 1, _ref2 = k + this.a; _ref <= _ref2 ? n <= _ref2 : n >= _ref2; _ref <= _ref2 ? n++ : n--) {\r\n sum += this.kernel(t - n) * this.getClippedInput(n);\r\n }\r\n return sum;\r\n };\r\n\r\n return SincFilterInterpolator;\r\n\r\n })(AbstractInterpolator);\r\n\r\n getColumn = function(arr, i) {\r\n var row, _i, _len, _results;\r\n _results = [];\r\n for (_i = 0, _len = arr.length; _i < _len; _i++) {\r\n row = arr[_i];\r\n _results.push(row[i]);\r\n }\r\n return _results;\r\n };\r\n\r\n makeScaledFunction = function(f, baseScale, scaleRange) {\r\n var scaleFactor, translation;\r\n if (scaleRange.join === '0,1') {\r\n return f;\r\n } else {\r\n scaleFactor = baseScale / (scaleRange[1] - scaleRange[0]);\r\n translation = scaleRange[0];\r\n return function(t) {\r\n return f(scaleFactor * (t - translation));\r\n };\r\n }\r\n };\r\n\r\n getType = function(x) {\r\n return Object.prototype.toString.call(x).slice('[object '.length, -1);\r\n };\r\n\r\n validateNumber = function(n) {\r\n if (isNaN(n)) throw 'NaN in Smooth() input';\r\n if (getType(n) !== 'Number') throw 'Non-number in Smooth() input';\r\n if (!isFinite(n)) throw 'Infinity in Smooth() input';\r\n };\r\n\r\n validateVector = function(v, dimension) {\r\n var n, _i, _len;\r\n if (getType(v) !== 'Array') throw 'Non-vector in Smooth() input';\r\n if (v.length !== dimension) throw 'Inconsistent dimension in Smooth() input';\r\n for (_i = 0, _len = v.length; _i < _len; _i++) {\r\n n = v[_i];\r\n validateNumber(n);\r\n }\r\n };\r\n\r\n isValidNumber = function(n) {\r\n return (getType(n) === 'Number') && isFinite(n) && !isNaN(n);\r\n };\r\n\r\n normalizeScaleTo = function(s) {\r\n var invalidErr;\r\n invalidErr = \"scaleTo param must be number or array of two numbers\";\r\n switch (getType(s)) {\r\n case 'Number':\r\n if (!isValidNumber(s)) throw invalidErr;\r\n s = [0, s];\r\n break;\r\n case 'Array':\r\n if (s.length !== 2) throw invalidErr;\r\n if (!(isValidNumber(s[0]) && isValidNumber(s[1]))) throw invalidErr;\r\n break;\r\n default:\r\n throw invalidErr;\r\n }\r\n return s;\r\n };\r\n\r\n shallowCopy = function(obj) {\r\n var copy, k, v;\r\n copy = {};\r\n for (k in obj) {\r\n if (!__hasProp.call(obj, k)) continue;\r\n v = obj[k];\r\n copy[k] = v;\r\n }\r\n return copy;\r\n };\r\n\r\n Smooth = function(arr, config) {\r\n var baseDomainEnd, dimension, i, interpolator, interpolatorClass, interpolators, k, n, properties, smoothFunc, v;\r\n if (config == null) config = {};\r\n properties = {};\r\n config = shallowCopy(config);\r\n properties.config = shallowCopy(config);\r\n if (config.scaleTo == null) config.scaleTo = config.period;\r\n if (config.sincFilterSize == null) {\r\n config.sincFilterSize = config.lanczosFilterSize;\r\n }\r\n for (k in defaultConfig) {\r\n if (!__hasProp.call(defaultConfig, k)) continue;\r\n v = defaultConfig[k];\r\n if (config[k] == null) config[k] = v;\r\n }\r\n if (!(interpolatorClass = {\r\n nearest: NearestInterpolator,\r\n linear: LinearInterpolator,\r\n cubic: CubicInterpolator,\r\n lanczos: SincFilterInterpolator,\r\n sinc: SincFilterInterpolator\r\n }[config.method])) {\r\n throw \"Invalid method: \" + config.method;\r\n }\r\n if (config.method === 'lanczos') {\r\n config.sincWindow = makeLanczosWindow(config.sincFilterSize);\r\n }\r\n if (arr.length < 2) throw 'Array must have at least two elements';\r\n properties.count = arr.length;\r\n smoothFunc = (function() {\r\n var _i, _j, _len, _len2;\r\n switch (getType(arr[0])) {\r\n case 'Number':\r\n properties.dimension = 'scalar';\r\n if (Smooth.deepValidation) {\r\n for (_i = 0, _len = arr.length; _i < _len; _i++) {\r\n n = arr[_i];\r\n validateNumber(n);\r\n }\r\n }\r\n interpolator = new interpolatorClass(arr, config);\r\n return function(t) {\r\n return interpolator.interpolate(t);\r\n };\r\n case 'Array':\r\n properties.dimension = dimension = arr[0].length;\r\n if (!dimension) throw 'Vectors must be non-empty';\r\n if (Smooth.deepValidation) {\r\n for (_j = 0, _len2 = arr.length; _j < _len2; _j++) {\r\n v = arr[_j];\r\n validateVector(v, dimension);\r\n }\r\n }\r\n interpolators = (function() {\r\n var _results;\r\n _results = [];\r\n for (i = 0; 0 <= dimension ? i < dimension : i > dimension; 0 <= dimension ? i++ : i--) {\r\n _results.push(new interpolatorClass(getColumn(arr, i), config));\r\n }\r\n return _results;\r\n })();\r\n return function(t) {\r\n var interpolator, _k, _len3, _results;\r\n _results = [];\r\n for (_k = 0, _len3 = interpolators.length; _k < _len3; _k++) {\r\n interpolator = interpolators[_k];\r\n _results.push(interpolator.interpolate(t));\r\n }\r\n return _results;\r\n };\r\n default:\r\n throw \"Invalid element type: \" + (getType(arr[0]));\r\n }\r\n })();\r\n if (config.clip === 'periodic') {\r\n baseDomainEnd = arr.length;\r\n } else {\r\n baseDomainEnd = arr.length - 1;\r\n }\r\n config.scaleTo || (config.scaleTo = baseDomainEnd);\r\n properties.domain = normalizeScaleTo(config.scaleTo);\r\n smoothFunc = makeScaledFunction(smoothFunc, baseDomainEnd, properties.domain);\r\n properties.domain.sort();\r\n /*copy properties\r\n */\r\n for (k in properties) {\r\n if (!__hasProp.call(properties, k)) continue;\r\n v = properties[k];\r\n smoothFunc[k] = v;\r\n }\r\n return smoothFunc;\r\n };\r\n\r\n for (k in Enum) {\r\n if (!__hasProp.call(Enum, k)) continue;\r\n v = Enum[k];\r\n Smooth[k] = v;\r\n }\r\n\r\n Smooth.deepValidation = true;\r\n\r\n (typeof exports !== \"undefined\" && exports !== null ? exports : window).Smooth = Smooth;\r\n\r\n}).call(this);\r\n","!function(r,t){if(\"function\"==typeof define&&define.amd)define([\"exports\"],t);else if(\"object\"==typeof exports&&\"undefined\"!=typeof module)t(exports);else t(r.MMTF=r.MMTF||{})}(this,function(r){\"use strict\";function t(r,t,n){for(var e=(r.byteLength,0),i=n.length;i>e;e++){var o=n.charCodeAt(e);if(128>o)r.setUint8(t++,o>>>0&127|0);else if(2048>o)r.setUint8(t++,o>>>6&31|192),r.setUint8(t++,o>>>0&63|128);else if(65536>o)r.setUint8(t++,o>>>12&15|224),r.setUint8(t++,o>>>6&63|128),r.setUint8(t++,o>>>0&63|128);else{if(!(1114112>o))throw new Error(\"bad codepoint \"+o);r.setUint8(t++,o>>>18&7|240),r.setUint8(t++,o>>>12&63|128),r.setUint8(t++,o>>>6&63|128),r.setUint8(t++,o>>>0&63|128)}}}function n(r){for(var t=0,n=0,e=r.length;e>n;n++){var i=r.charCodeAt(n);if(128>i)t+=1;else if(2048>i)t+=2;else if(65536>i)t+=3;else{if(!(1114112>i))throw new Error(\"bad codepoint \"+i);t+=4}}return t}function e(r,i,o){var a=typeof r;if(\"string\"===a){var u=n(r);if(32>u)return i.setUint8(o,160|u),t(i,o+1,r),1+u;if(256>u)return i.setUint8(o,217),i.setUint8(o+1,u),t(i,o+2,r),2+u;if(65536>u)return i.setUint8(o,218),i.setUint16(o+1,u),t(i,o+3,r),3+u;if(4294967296>u)return i.setUint8(o,219),i.setUint32(o+1,u),t(i,o+5,r),5+u}if(r instanceof Uint8Array){var u=r.byteLength,s=new Uint8Array(i.buffer);if(256>u)return i.setUint8(o,196),i.setUint8(o+1,u),s.set(r,o+2),2+u;if(65536>u)return i.setUint8(o,197),i.setUint16(o+1,u),s.set(r,o+3),3+u;if(4294967296>u)return i.setUint8(o,198),i.setUint32(o+1,u),s.set(r,o+5),5+u}if(\"number\"===a){if(!isFinite(r))throw new Error(\"Number not finite: \"+r);if(Math.floor(r)!==r)return i.setUint8(o,203),i.setFloat64(o+1,r),9;if(r>=0){if(128>r)return i.setUint8(o,r),1;if(256>r)return i.setUint8(o,204),i.setUint8(o+1,r),2;if(65536>r)return i.setUint8(o,205),i.setUint16(o+1,r),3;if(4294967296>r)return i.setUint8(o,206),i.setUint32(o+1,r),5;throw new Error(\"Number too big 0x\"+r.toString(16))}if(r>=-32)return i.setInt8(o,r),1;if(r>=-128)return i.setUint8(o,208),i.setInt8(o+1,r),2;if(r>=-32768)return i.setUint8(o,209),i.setInt16(o+1,r),3;if(r>=-2147483648)return i.setUint8(o,210),i.setInt32(o+1,r),5;throw new Error(\"Number too small -0x\"+(-r).toString(16).substr(1))}if(null===r)return i.setUint8(o,192),1;if(\"boolean\"===a)return i.setUint8(o,r?195:194),1;if(\"object\"===a){var u,f=0,c=Array.isArray(r);if(c)u=r.length;else{var d=Object.keys(r);u=d.length}var f;if(16>u?(i.setUint8(o,u|(c?144:128)),f=1):65536>u?(i.setUint8(o,c?220:222),i.setUint16(o+1,u),f=3):4294967296>u&&(i.setUint8(o,c?221:223),i.setUint32(o+1,u),f=5),c)for(var l=0;u>l;l++)f+=e(r[l],i,o+f);else for(var l=0;u>l;l++){var v=d[l];f+=e(v,i,o+f),f+=e(r[v],i,o+f)}return f}throw new Error(\"Unknown type \"+a)}function i(r){var t=typeof r;if(\"string\"===t){var e=n(r);if(32>e)return 1+e;if(256>e)return 2+e;if(65536>e)return 3+e;if(4294967296>e)return 5+e}if(r instanceof Uint8Array){var e=r.byteLength;if(256>e)return 2+e;if(65536>e)return 3+e;if(4294967296>e)return 5+e}if(\"number\"===t){if(Math.floor(r)!==r)return 9;if(r>=0){if(128>r)return 1;if(256>r)return 2;if(65536>r)return 3;if(4294967296>r)return 5;throw new Error(\"Number too big 0x\"+r.toString(16))}if(r>=-32)return 1;if(r>=-128)return 2;if(r>=-32768)return 3;if(r>=-2147483648)return 5;throw new Error(\"Number too small -0x\"+r.toString(16).substr(1))}if(\"boolean\"===t||null===r)return 1;if(\"object\"===t){var e,o=0;if(Array.isArray(r)){e=r.length;for(var a=0;e>a;a++)o+=i(r[a])}else{var u=Object.keys(r);e=u.length;for(var a=0;e>a;a++){var s=u[a];o+=i(s)+i(r[s])}}if(16>e)return 1+o;if(65536>e)return 3+o;if(4294967296>e)return 5+o;throw new Error(\"Array or object too long 0x\"+e.toString(16))}throw new Error(\"Unknown type \"+t)}function o(r){var t=new ArrayBuffer(i(r)),n=new DataView(t);return e(r,n,0),new Uint8Array(t)}function a(r,t,n){return t?new r(t.buffer,t.byteOffset,t.byteLength/(n||1)):void 0}function u(r){return a(DataView,r)}function s(r){return a(Uint8Array,r)}function f(r){return a(Int8Array,r)}function c(r){return a(Int32Array,r,4)}function d(r){return a(Float32Array,r,4)}function l(r,t){var n=r.length/2;t||(t=new Int16Array(n));for(var e=0,i=0;n>e;++e,i+=2)t[e]=r[i]<<8^r[i+1]<<0;return t}function v(r,t){var n=r.length;t||(t=new Uint8Array(2*n));for(var e=u(t),i=0;n>i;++i)e.setInt16(2*i,r[i]);return s(t)}function g(r,t){var n=r.length/4;t||(t=new Int32Array(n));for(var e=0,i=0;n>e;++e,i+=4)t[e]=r[i]<<24^r[i+1]<<16^r[i+2]<<8^r[i+3]<<0;return t}function L(r,t){var n=r.length;t||(t=new Uint8Array(4*n));for(var e=u(t),i=0;n>i;++i)e.setInt32(4*i,r[i]);return s(t)}function h(r,t){var n=r.length;t||(t=new Float32Array(n/4));for(var e=u(t),i=u(r),o=0,a=0,s=n/4;s>o;++o,a+=4)e.setFloat32(a,i.getFloat32(a),!0);return t}function y(r,t,n){var e=r.length,i=1/t;n||(n=new Float32Array(e));for(var o=0;e>o;++o)n[o]=r[o]*i;return n}function m(r,t,n){var e=r.length;n||(n=new Int32Array(e));for(var i=0;e>i;++i)n[i]=Math.round(r[i]*t);return n}function p(r,t){var n,e;if(!t){var i=0;for(n=0,e=r.length;e>n;n+=2)i+=r[n+1];t=new r.constructor(i)}var o=0;for(n=0,e=r.length;e>n;n+=2)for(var a=r[n],u=r[n+1],s=0;u>s;++s)t[o]=a,++o;return t}function U(r){if(0===r.length)return new Int32Array;var t,n,e=2;for(t=1,n=r.length;n>t;++t)r[t-1]!==r[t]&&(e+=2);var i=new Int32Array(e),o=0,a=1;for(t=1,n=r.length;n>t;++t)r[t-1]!==r[t]?(i[o]=r[t-1],i[o+1]=a,a=1,o+=2):++a;return i[o]=r[r.length-1],i[o+1]=a,i}function b(r,t){var n=r.length;t||(t=new r.constructor(n)),n&&(t[0]=r[0]);for(var e=1;n>e;++e)t[e]=r[e]+t[e-1];return t}function I(r,t){var n=r.length;t||(t=new r.constructor(n)),t[0]=r[0];for(var e=1;n>e;++e)t[e]=r[e]-r[e-1];return t}function w(r,t){var n,e,i=r instanceof Int8Array?127:32767,o=-i-1,a=r.length;if(!t){var u=0;for(n=0;a>n;++n)r[n]o&&++u;t=new Int32Array(u)}for(n=0,e=0;a>n;){for(var s=0;r[n]===i||r[n]===o;)s+=r[n],++n;s+=r[n],++n,t[e]=s,++e}return t}function C(r,t){var n,e=t?127:32767,i=-e-1,o=r.length,a=0;for(n=0;o>n;++n){var u=r[n];0===u?++a:a+=u===e||u===i?2:u>0?Math.ceil(u/e):Math.ceil(u/i)}var s=t?new Int8Array(a):new Int16Array(a),f=0;for(n=0;o>n;++n){var u=r[n];if(u>=0)for(;u>=e;)s[f]=e,++f,u-=e;else for(;i>=u;)s[f]=i,++f,u-=i;s[f]=u,++f}return s}function A(r,t){return b(p(r),t)}function x(r){return U(I(r))}function M(r,t,n){return y(p(r,c(n)),t,n)}function F(r,t){return U(m(r,t))}function S(r,t,n){return y(b(r,c(n)),t,n)}function E(r,t,n){return I(m(r,t),n)}function N(r,t,n){return y(w(r,c(n)),t,n)}function O(r,t,n){var e=w(r,c(n));return S(e,t,d(e))}function T(r,t,n){return C(E(r,t),n)}function k(r){var t=u(r),n=t.getInt32(0),e=t.getInt32(4),i=r.subarray(8,12),r=r.subarray(12);return[n,r,e,i]}function j(r,t,n,e){var i=new ArrayBuffer(12+e.byteLength),o=new Uint8Array(i),a=new DataView(i);return a.setInt32(0,r),a.setInt32(4,t),n&&o.set(n,8),o.set(e,12),o}function q(r){var t=r.length,n=s(r);return j(2,t,void 0,n)}function D(r){var t=r.length,n=L(r);return j(4,t,void 0,n)}function P(r,t){var n=r.length/t,e=L([t]),i=s(r);return j(5,n,e,i)}function z(r){var t=r.length,n=L(U(r));return j(6,t,void 0,n)}function B(r){var t=r.length,n=L(x(r));return j(8,t,void 0,n)}function V(r,t){var n=r.length,e=L([t]),i=L(F(r,t));return j(9,n,e,i)}function G(r,t){var n=r.length,e=L([t]),i=v(T(r,t));return j(10,n,e,i)}function R(r){var t={};return rr.forEach(function(n){void 0!==r[n]&&(t[n]=r[n])}),r.bondAtomList&&(t.bondAtomList=D(r.bondAtomList)),r.bondOrderList&&(t.bondOrderList=q(r.bondOrderList)),t.xCoordList=G(r.xCoordList,1e3),t.yCoordList=G(r.yCoordList,1e3),t.zCoordList=G(r.zCoordList,1e3),r.bFactorList&&(t.bFactorList=G(r.bFactorList,100)),r.atomIdList&&(t.atomIdList=B(r.atomIdList)),r.altLocList&&(t.altLocList=z(r.altLocList)),r.occupancyList&&(t.occupancyList=V(r.occupancyList,100)),t.groupIdList=B(r.groupIdList),t.groupTypeList=D(r.groupTypeList),r.secStructList&&(t.secStructList=q(r.secStructList,1)),r.insCodeList&&(t.insCodeList=z(r.insCodeList)),r.sequenceIndexList&&(t.sequenceIndexList=B(r.sequenceIndexList)),t.chainIdList=P(r.chainIdList,4),r.chainNameList&&(t.chainNameList=P(r.chainNameList,4)),t}function H(r){function t(r){for(var t={},n=0;r>n;n++){var e=o();t[e]=o()}return t}function n(t){var n=r.subarray(a,a+t);return a+=t,n}function e(t){var n=r.subarray(a,a+t);a+=t;var e=65535;if(t>e){for(var i=[],o=0;on;n++)t[n]=o();return t}function o(){var o,s,f=r[a];if(0===(128&f))return a++,f;if(128===(240&f))return s=15&f,a++,t(s);if(144===(240&f))return s=15&f,a++,i(s);if(160===(224&f))return s=31&f,a++,e(s);if(224===(224&f))return o=u.getInt8(a),a++,o;switch(f){case 192:return a++,null;case 194:return a++,!1;case 195:return a++,!0;case 196:return s=u.getUint8(a+1),a+=2,n(s);case 197:return s=u.getUint16(a+1),a+=3,n(s);case 198:return s=u.getUint32(a+1),a+=5,n(s);case 202:return o=u.getFloat32(a+1),a+=5,o;case 203:return o=u.getFloat64(a+1),a+=9,o;case 204:return o=r[a+1],a+=2,o;case 205:return o=u.getUint16(a+1),a+=3,o;case 206:return o=u.getUint32(a+1),a+=5,o;case 208:return o=u.getInt8(a+1),a+=2,o;case 209:return o=u.getInt16(a+1),a+=3,o;case 210:return o=u.getInt32(a+1),a+=5,o;case 217:return s=u.getUint8(a+1),a+=2,e(s);case 218:return s=u.getUint16(a+1),a+=3,e(s);case 219:return s=u.getUint32(a+1),a+=5,e(s);case 220:return s=u.getUint16(a+1),a+=3,i(s);case 221:return s=u.getUint32(a+1),a+=5,i(s);case 222:return s=u.getUint16(a+1),a+=3,t(s);case 223:return s=u.getUint32(a+1),a+=5,t(s)}throw new Error(\"Unknown type 0x\"+f.toString(16))}var a=0,u=new DataView(r.buffer);return o()}function W(r,t,n,e){switch(r){case 1:return h(t);case 2:return f(t);case 3:return l(t);case 4:return g(t);case 5:return s(t);case 6:return p(g(t),new Uint8Array(n));case 7:return p(g(t));case 8:return A(g(t));case 9:return M(g(t),g(e)[0]);case 10:return O(l(t),g(e)[0]);case 11:return y(l(t),g(e)[0]);case 12:return N(l(t),g(e)[0]);case 13:return N(f(t),g(e)[0]);case 14:return w(l(t));case 15:return w(f(t))}}function X(r,t){t=t||{};var n=t.ignoreFields,e={};return nr.forEach(function(t){var i=n?-1!==n.indexOf(t):!1,o=r[t];i||void 0===o||(o instanceof Uint8Array?e[t]=W.apply(null,k(o)):e[t]=o)}),e}function J(r){return String.fromCharCode.apply(null,r).replace(/\\0/g,\"\")}function K(r,t,n){n=n||{};var e,i,o,a,u,s,f=n.firstModelOnly,c=t.onModel,d=t.onChain,l=t.onGroup,v=t.onAtom,g=t.onBond,L=0,h=0,y=0,m=0,p=0,U=-1,b=r.chainNameList,I=r.secStructList,w=r.insCodeList,C=r.sequenceIndexList,A=r.atomIdList,x=r.bFactorList,M=r.altLocList,F=r.occupancyList,S=r.bondAtomList,E=r.bondOrderList;for(e=0,i=r.chainsPerModel.length;i>e&&!(f&&L>0);++e){var N=r.chainsPerModel[L];for(c&&c({chainCount:N,modelIndex:L}),o=0;N>o;++o){var O=r.groupsPerChain[h];if(d){var T=J(r.chainIdList.subarray(4*h,4*h+4)),k=null;b&&(k=J(b.subarray(4*h,4*h+4))),d({groupCount:O,chainIndex:h,modelIndex:L,chainId:T,chainName:k})}for(a=0;O>a;++a){var j=r.groupList[r.groupTypeList[y]],q=j.atomNameList.length;if(l){var D=null;I&&(D=I[y]);var P=null;r.insCodeList&&(P=String.fromCharCode(w[y]));var z=null;C&&(z=C[y]),l({atomCount:q,groupIndex:y,chainIndex:h,modelIndex:L,groupId:r.groupIdList[y],groupType:r.groupTypeList[y],groupName:j.groupName,singleLetterCode:j.singleLetterCode,chemCompType:j.chemCompType,secStruct:D,insCode:P,sequenceIndex:z})}for(u=0;q>u;++u){if(v){var B=null;A&&(B=A[m]);var V=null;x&&(V=x[m]);var G=null;M&&(G=String.fromCharCode(M[m]));var R=null;F&&(R=F[m]),v({atomIndex:m,groupIndex:y,chainIndex:h,modelIndex:L,atomId:B,element:j.elementList[u],atomName:j.atomNameList[u],formalCharge:j.formalChargeList[u],xCoord:r.xCoordList[m],yCoord:r.yCoordList[m],zCoord:r.zCoordList[m],bFactor:V,altLoc:G,occupancy:R})}m+=1}if(g){var H=j.bondAtomList;for(u=0,s=j.bondOrderList.length;s>u;++u)g({atomIndex1:m-q+H[2*u],atomIndex2:m-q+H[2*u+1],bondOrder:j.bondOrderList[u]})}y+=1}h+=1}if(p=U+1,U=m-1,g&&S)for(u=0,s=S.length;s>u;u+=2){var W=S[u],X=S[u+1];(W>=p&&U>=W||X>=p&&U>=X)&&g({atomIndex1:W,atomIndex2:X,bondOrder:E?E[u/2]:null})}L+=1}}function Q(r){return o(R(r))}function Y(r,t){r instanceof ArrayBuffer&&(r=new Uint8Array(r));var n;return n=r instanceof Uint8Array?H(r):r,X(n,t)}function Z(r,t,n,e){function i(){try{var r=Y(o.response);n(r)}catch(t){e(t)}}var o=new XMLHttpRequest;o.addEventListener(\"load\",i,!0),o.addEventListener(\"error\",e,!0),o.responseType=\"arraybuffer\",o.open(\"GET\",t+r.toUpperCase()),o.send()}function $(r,t,n){Z(r,or,t,n)}function _(r,t,n){Z(r,ar,t,n)}var rr=[\"mmtfVersion\",\"mmtfProducer\",\"unitCell\",\"spaceGroup\",\"structureId\",\"title\",\"depositionDate\",\"releaseDate\",\"experimentalMethods\",\"resolution\",\"rFree\",\"rWork\",\"bioAssemblyList\",\"ncsOperatorList\",\"entityList\",\"groupList\",\"numBonds\",\"numAtoms\",\"numGroups\",\"numChains\",\"numModels\",\"groupsPerChain\",\"chainsPerModel\"],tr=[\"xCoordList\",\"yCoordList\",\"zCoordList\",\"groupIdList\",\"groupTypeList\",\"chainIdList\",\"bFactorList\",\"atomIdList\",\"altLocList\",\"occupancyList\",\"secStructList\",\"insCodeList\",\"sequenceIndexList\",\"chainNameList\",\"bondAtomList\",\"bondOrderList\"],nr=rr.concat(tr),er=\"v1.1.0dev\",ir=\"//mmtf.rcsb.org/v1.0/\",or=ir+\"full/\",ar=ir+\"reduced/\";r.encode=Q,r.decode=Y,r.traverse=K,r.fetch=$,r.fetchReduced=_,r.version=er,r.fetchUrl=or,r.fetchReducedUrl=ar,r.encodeMsgpack=o,r.encodeMmtf=R,r.decodeMsgpack=H,r.decodeMmtf=X});","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","","const __WEBPACK_NAMESPACE_OBJECT__ = __WEBPACK_EXTERNAL_MODULE_three__;","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar defaults = {\n lines: 12,\n length: 7,\n width: 5,\n radius: 10,\n scale: 1.0,\n corners: 1,\n color: '#000',\n fadeColor: 'transparent',\n animation: 'spinner-line-fade-default',\n rotate: 0,\n direction: 1,\n speed: 1,\n zIndex: 2e9,\n className: 'spinner',\n top: '50%',\n left: '50%',\n shadow: '0 0 1px transparent', // prevent aliased lines\n position: 'absolute',\n};\nvar Spinner = /** @class */ (function () {\n function Spinner(opts) {\n if (opts === void 0) { opts = {}; }\n this.opts = __assign(__assign({}, defaults), opts);\n }\n /**\n * Adds the spinner to the given target element. If this instance is already\n * spinning, it is automatically removed from its previous target by calling\n * stop() internally.\n */\n Spinner.prototype.spin = function (target) {\n this.stop();\n this.el = document.createElement('div');\n this.el.className = this.opts.className;\n this.el.setAttribute('role', 'progressbar');\n this.el.style.position = this.opts.position;\n this.el.style.width = \"0\";\n this.el.style.zIndex = this.opts.zIndex.toString();\n this.el.style.left = this.opts.left;\n this.el.style.top = this.opts.top;\n this.el.style.transform = \"scale(\".concat(this.opts.scale, \")\");\n if (target) {\n target.insertBefore(this.el, target.firstChild || null);\n }\n drawLines(this.el, this.opts);\n return this;\n };\n /**\n * Stops and removes the Spinner.\n * Stopped spinners may be reused by calling spin() again.\n */\n Spinner.prototype.stop = function () {\n if (this.el) {\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n this.el = undefined;\n }\n return this;\n };\n return Spinner;\n}());\nexport { Spinner };\n/**\n * Returns the line color from the given string or array.\n */\nfunction getColor(color, idx) {\n return typeof color == 'string' ? color : color[idx % color.length];\n}\n/**\n * Internal method that draws the individual lines.\n */\nfunction drawLines(el, opts) {\n var borderRadius = (Math.round(opts.corners * opts.width * 500) / 1000) + 'px';\n var shadow = 'none';\n if (opts.shadow === true) {\n shadow = '0 2px 4px #000'; // default shadow\n }\n else if (typeof opts.shadow === 'string') {\n shadow = opts.shadow;\n }\n var shadows = parseBoxShadow(shadow);\n for (var i = 0; i < opts.lines; i++) {\n var degrees = ~~(360 / opts.lines * i + opts.rotate);\n var backgroundLine = document.createElement('div');\n backgroundLine.style.position = 'absolute';\n backgroundLine.style.top = \"\".concat(-opts.width / 2, \"px\");\n backgroundLine.style.width = (opts.length + opts.width) + 'px';\n backgroundLine.style.height = opts.width + 'px';\n backgroundLine.style.background = getColor(opts.fadeColor, i);\n backgroundLine.style.borderRadius = borderRadius;\n backgroundLine.style.transformOrigin = 'left';\n backgroundLine.style.transform = \"rotate(\".concat(degrees, \"deg) translateX(\").concat(opts.radius, \"px)\");\n var delay = i * opts.direction / opts.lines / opts.speed;\n delay -= 1 / opts.speed; // so initial animation state will include trail\n var line = document.createElement('div');\n line.style.width = '100%';\n line.style.height = '100%';\n line.style.background = getColor(opts.color, i);\n line.style.borderRadius = borderRadius;\n line.style.boxShadow = normalizeShadow(shadows, degrees);\n line.style.animation = \"\".concat(1 / opts.speed, \"s linear \").concat(delay, \"s infinite \").concat(opts.animation);\n backgroundLine.appendChild(line);\n el.appendChild(backgroundLine);\n }\n}\nfunction parseBoxShadow(boxShadow) {\n var regex = /^\\s*([a-zA-Z]+\\s+)?(-?\\d+(\\.\\d+)?)([a-zA-Z]*)\\s+(-?\\d+(\\.\\d+)?)([a-zA-Z]*)(.*)$/;\n var shadows = [];\n for (var _i = 0, _a = boxShadow.split(','); _i < _a.length; _i++) {\n var shadow = _a[_i];\n var matches = shadow.match(regex);\n if (matches === null) {\n continue; // invalid syntax\n }\n var x = +matches[2];\n var y = +matches[5];\n var xUnits = matches[4];\n var yUnits = matches[7];\n if (x === 0 && !xUnits) {\n xUnits = yUnits;\n }\n if (y === 0 && !yUnits) {\n yUnits = xUnits;\n }\n if (xUnits !== yUnits) {\n continue; // units must match to use as coordinates\n }\n shadows.push({\n prefix: matches[1] || '', // could have value of 'inset' or undefined\n x: x,\n y: y,\n xUnits: xUnits,\n yUnits: yUnits,\n end: matches[8],\n });\n }\n return shadows;\n}\n/**\n * Modify box-shadow x/y offsets to counteract rotation\n */\nfunction normalizeShadow(shadows, degrees) {\n var normalized = [];\n for (var _i = 0, shadows_1 = shadows; _i < shadows_1.length; _i++) {\n var shadow = shadows_1[_i];\n var xy = convertOffset(shadow.x, shadow.y, degrees);\n normalized.push(shadow.prefix + xy[0] + shadow.xUnits + ' ' + xy[1] + shadow.yUnits + shadow.end);\n }\n return normalized.join(', ');\n}\nfunction convertOffset(x, y, degrees) {\n var radians = degrees * Math.PI / 180;\n var sin = Math.sin(radians);\n var cos = Math.cos(radians);\n return [\n Math.round((x * cos + y * sin) * 1000) / 1000,\n Math.round((-x * sin + y * cos) * 1000) / 1000,\n ];\n}\n","//----------------------------------------------------------------------------\r\n// Timer\r\n\r\nexport default class Timer {\r\n constructor() {\r\n this.startTime = 0;\r\n this.oldTime = 0;\r\n this.elapsedTime = 0;\r\n this.running = false;\r\n }\r\n\r\n start() {\r\n this.startTime = Timer.now();\r\n this.oldTime = this.startTime;\r\n this.running = true;\r\n }\r\n\r\n stop() {\r\n this.getElapsedTime();\r\n this.running = false;\r\n }\r\n\r\n getElapsedTime() {\r\n this.update();\r\n return this.elapsedTime;\r\n }\r\n\r\n update() {\r\n let delta = 0;\r\n if (this.running) {\r\n const newTime = Timer.now();\r\n delta = 0.001 * (newTime - this.oldTime);\r\n this.oldTime = newTime;\r\n this.elapsedTime += delta;\r\n }\r\n\r\n return delta;\r\n }\r\n}\r\n\r\nTimer.now = (function () {\r\n const p = typeof window !== 'undefined' && window.performance;\r\n return (p && p.now) ? p.now.bind(p) : Date.now;\r\n}());\r\n","import Timer from '../Timer';\r\n\r\nconst { now } = Timer;\r\n\r\nfunction createElement(tag, id, css) {\r\n const element = document.createElement(tag);\r\n element.id = id;\r\n element.style.cssText = css;\r\n return element;\r\n}\r\n\r\nclass Stats {\r\n constructor() {\r\n this.domElement = createElement('div', 'stats', 'padding:8px');\r\n this._text = createElement('p', 'fps', 'margin:0;color:silver;font-size:large');\r\n this.domElement.appendChild(this._text);\r\n\r\n this._startTime = now();\r\n this._prevTime = this._startTime;\r\n\r\n this._deltas = new Array(20);\r\n this._index = 0;\r\n this._total = 0.0;\r\n this._count = 0;\r\n }\r\n\r\n end() {\r\n const time = now();\r\n const delta = time - this._startTime;\r\n\r\n if (this._count < this._deltas.length) {\r\n this._count++;\r\n } else {\r\n this._total -= this._deltas[this._index];\r\n }\r\n this._total += delta;\r\n this._deltas[this._index] = delta;\r\n this._index = (this._index + 1) % this._deltas.length;\r\n\r\n this.ms = this._total / this._count;\r\n this.fps = 1000 / this.ms;\r\n\r\n if (time > this._prevTime + 1000) {\r\n this._text.textContent = this.fps.toPrecision(2);\r\n this._prevTime = time;\r\n }\r\n\r\n return time;\r\n }\r\n\r\n update() {\r\n this._startTime = this.end();\r\n }\r\n\r\n show(on) {\r\n if (on === undefined) {\r\n on = true;\r\n }\r\n this.domElement.style.display = on ? 'block' : 'none';\r\n }\r\n}\r\n\r\nexport default Stats;\r\n","/**\r\n * This class introduces the simplest event system.\r\n */\r\n\r\nimport _ from 'lodash';\r\n\r\nfunction isUndefOrEqual(param, value) {\r\n return !param || param === value;\r\n}\r\n\r\n/**\r\n * Creates empty dispatcher.\r\n *\r\n * @exports EventDispatcher\r\n * @constructor\r\n */\r\nfunction EventDispatcher() {\r\n this._handlers = {};\r\n}\r\n\r\n/**\r\n * Binds callback on specific event type. Optional `context` parameter\r\n * could be used as 'this' for the `callback`.\r\n * @param {string} type Event name.\r\n * @param {function} callback Callback function.\r\n * @param {Object} [context] 'This' object for the callback.\r\n */\r\nEventDispatcher.prototype.addEventListener = function (type, callback, context) {\r\n let handlers = this._handlers[type];\r\n\r\n if (!handlers) {\r\n this._handlers[type] = [];\r\n handlers = this._handlers[type];\r\n }\r\n\r\n const params = [callback, context];\r\n function _checkPar(par) {\r\n return par[0] === params[0] && par[1] === params[1];\r\n }\r\n\r\n if (_.find(handlers, _checkPar) === undefined) {\r\n handlers.push(params);\r\n }\r\n};\r\n\r\n/**\r\n * Removes a previously-bound callback function from an object.\r\n * If no `context` is specified, all versions of the `callback` with different\r\n * contexts will be removed.\r\n * If no `callback` is specified, all callbacks of the `type` will be removed.\r\n * If no `type` is specified, callbacks for all events will be removed.\r\n * @param {?string} [type] Event type.\r\n * @param {function} [callback] Callback function.\r\n * @param {Object} [context] 'This' object for the callback.\r\n */\r\nEventDispatcher.prototype.removeEventListener = function (type, callback, context) {\r\n const self = this;\r\n _.forEach(self._handlers, (handler, ev) => {\r\n _.remove(handler, (values) => isUndefOrEqual(type, ev)\r\n && isUndefOrEqual(callback, values[0])\r\n && isUndefOrEqual(context, values[1] || self));\r\n });\r\n\r\n this._handlers = _.omitBy(self._handlers, (handler) => handler.length === 0);\r\n};\r\n\r\n/**\r\n * Makes all the callbacks for the specific `event` to trigger.\r\n * @param {Object} event Event.\r\n * @param {string} event.type Type of the event.\r\n */\r\nEventDispatcher.prototype.dispatchEvent = function (event) {\r\n const self = this;\r\n\r\n _.forEach(this._handlers[event.type], (callback) => {\r\n const context = callback[1] || self;\r\n callback[0].apply(context, [event]);\r\n });\r\n};\r\n\r\nexport default EventDispatcher;\r\n","/**\r\n * This module contains class for logging.\r\n * Returns an instance of a logger that have already been created.\r\n * Allows users to log messages for five different levels,\r\n * enable console output and catch signal on each message.\r\n */\r\nimport _ from 'lodash';\r\nimport EventDispatcher from './EventDispatcher';\r\n\r\nconst priorities = {\r\n debug: 0,\r\n info: 1,\r\n report: 2,\r\n warn: 3,\r\n error: 4,\r\n};\r\n\r\n/**\r\n * Create new Logger.\r\n *\r\n * @exports Logger\r\n * @extends EventDispatcher\r\n * @constructor\r\n */\r\nfunction Logger() {\r\n EventDispatcher.call(this);\r\n /** Boolean flag that toggles output to browser console.\r\n * @type {boolean}\r\n */\r\n this.console = false;\r\n this._priority = priorities.warn;\r\n}\r\n\r\nLogger.prototype = Object.create(EventDispatcher.prototype);\r\nLogger.prototype.constructor = Logger;\r\n\r\n/**\r\n * Create new clean instance of the logger.\r\n * @returns {Logger}\r\n */\r\nLogger.prototype.instantiate = function () {\r\n return new Logger();\r\n};\r\n\r\nfunction verify(number) {\r\n if (!_.isNumber(number)) {\r\n throw new Error('Wrong log level specified!');\r\n }\r\n return number;\r\n}\r\n\r\n/**\r\n * @property {string} current threshold for signals and console output.\r\n * @name Logger#level\r\n */\r\nObject.defineProperty(Logger.prototype, 'level', {\r\n get() {\r\n return _.findKey(priorities, (value) => value === this._priority);\r\n },\r\n set(level) {\r\n this._priority = verify(priorities[level]);\r\n },\r\n});\r\n\r\n/**\r\n * Returns the list of all possible level values.\r\n * @returns {Array}\r\n */\r\nLogger.prototype.levels = function () {\r\n return Object.keys(priorities);\r\n};\r\n\r\n/**\r\n * Add new message with specified level.\r\n * @param {string} level - level of the message, must be one of the\r\n * {'debug' | 'info' | 'report' | 'warn' | 'error'}\r\n * @param {string} message\r\n */\r\nLogger.prototype.message = function (level, message) {\r\n const priority = verify(priorities[level]);\r\n this._message(priority, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('debug', ...);\r\n * @param message\r\n */\r\nLogger.prototype.debug = function (message) {\r\n this._message(priorities.debug, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('info', ...);\r\n * @param message\r\n */\r\nLogger.prototype.info = function (message) {\r\n this._message(priorities.info, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('report', ...);\r\n * @param message\r\n */\r\nLogger.prototype.report = function (message) {\r\n this._message(priorities.report, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('warn', ...);\r\n * @param message\r\n */\r\nLogger.prototype.warn = function (message) {\r\n this._message(priorities.warn, message);\r\n};\r\n\r\n/**\r\n * Shortcut for message('error', ...);\r\n * @param message\r\n */\r\nLogger.prototype.error = function (message) {\r\n this._message(priorities.error, message);\r\n};\r\n\r\n/**\r\n * Add new message with specified priority.\r\n * @param {number} priority - priority of the message\r\n * @param {string} message\r\n * @private\r\n */\r\nLogger.prototype._message = function (priority, message) {\r\n if (priority < this._priority) {\r\n return;\r\n }\r\n const level = _.findKey(priorities, (value) => value === priority);\r\n message = String(message);\r\n if (this.console) {\r\n const output = `miew:${level}: ${message}`;\r\n if (level === 'error') {\r\n console.error(output); // NOSONAR\r\n } else if (level === 'warn') {\r\n console.warn(output); // NOSONAR\r\n } else {\r\n console.log(output); // NOSONAR\r\n }\r\n }\r\n this.dispatchEvent({ type: 'message', level, message });\r\n};\r\n\r\nexport default new Logger();\r\n","import _ from 'lodash';\r\nimport logger from './utils/logger';\r\n\r\nconst browserType = {\r\n DEFAULT: 0,\r\n SAFARI: 1,\r\n};\r\n//----------------------------------------------------------------------------\r\n// Query string\r\n\r\n/**\r\n * Escape only dangerous chars in a query string component, use a plus instead of a space.\r\n *\r\n * [RFC 3986](https://tools.ietf.org/html/rfc3986) allows the following chars in the query (see 3.4):\r\n *\r\n * A-Z a-z 0-9 - _ . ~ ! $ & ' ( ) * + , ; = : @ / ?\r\n *\r\n * For query string elements we need to escape ampersand, equal sign, and plus,\r\n * but encodeURIComponent() function encodes anything except for the following:\r\n *\r\n * A-Z a-z 0-9 - _ . ~ ! ' ( ) *\r\n *\r\n * @param {string} text - key or value to encode\r\n * @param {string} excludeExp - regexp for symbols to exclude from encoding\r\n * @returns {string} encoded string\r\n */\r\nfunction encodeQueryComponent(text, excludeExp) {\r\n const encode = (code) => String.fromCharCode(parseInt(code.substr(1), 16));\r\n return encodeURIComponent(text).replace(excludeExp, encode).replace(/%20/g, '+');\r\n}\r\n\r\n/**\r\n * Unescape dangerous chars in a query string component.\r\n *\r\n * @param {string} text - encoded key or value\r\n * @returns {string} decoded string\r\n * @see {@link encodeQueryComponent}\r\n */\r\nfunction decodeQueryComponent(text) {\r\n return decodeURIComponent(text.replace(/\\+/g, ' '));\r\n}\r\n\r\n/**\r\n * Parse URL and extract an array of parameters.\r\n * @param {string?} url - URL or query string to parse\r\n * @returns {Array} array of (key, value) pairs.\r\n */\r\nfunction getUrlParameters(url) {\r\n url = url || window.location.search;\r\n\r\n const query = url.substring(url.indexOf('?') + 1);\r\n const search = /([^&=]+)=?([^&]*)/g;\r\n const result = [];\r\n let match;\r\n\r\n while ((match = search.exec(query)) !== null) { // eslint-disable-line no-cond-assign\r\n result.push([decodeQueryComponent(match[1]), decodeQueryComponent(match[2])]);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Parse URL and extract an array of parameters as a hash.\r\n * @param {string?} url - URL or query string to parse\r\n * @returns {Object}\r\n */\r\nfunction getUrlParametersAsDict(url) {\r\n const result = {};\r\n const a = getUrlParameters(url);\r\n for (let i = 0; i < a.length; ++i) {\r\n const [key, value] = a[i];\r\n result[key] = value;\r\n }\r\n return result;\r\n}\r\n\r\nfunction resolveURL(str) {\r\n if (typeof URL !== 'undefined') {\r\n try {\r\n if (typeof window !== 'undefined') {\r\n return new URL(str, window.location).href;\r\n }\r\n return new URL(str).href;\r\n } catch {\r\n // IE 11 has a URL object with no constructor available so just try a different approach instead\r\n }\r\n }\r\n if (typeof document !== 'undefined') {\r\n const anchor = document.createElement('a');\r\n anchor.href = str;\r\n return anchor.href;\r\n }\r\n return str;\r\n}\r\n\r\n/**\r\n * Generates regular expression object that includes all symbols\r\n * listed in the argument\r\n * @param symbolStr {string} - String containing characters list.\r\n * @returns {RegExp} - Regular expression.\r\n */\r\nfunction generateRegExp(symbolStr) {\r\n const symbolList = [];\r\n\r\n for (let i = 0, n = symbolStr.length; i < n; ++i) {\r\n symbolList[symbolList.length] = symbolStr[i].charCodeAt(0).toString(16);\r\n }\r\n\r\n const listStr = symbolList.join('|');\r\n\r\n return new RegExp(`%(?:${listStr})`, 'gi');\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Create HTML element\r\n\r\nfunction createElement(tag, attrs, content) {\r\n const element = document.createElement(tag);\r\n let i;\r\n let n;\r\n if (attrs) {\r\n const keys = Object.keys(attrs);\r\n for (i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n element.setAttribute(key, attrs[key]);\r\n }\r\n }\r\n if (content) {\r\n if (!(content instanceof Array)) {\r\n content = [content];\r\n }\r\n for (i = 0, n = content.length; i < n; ++i) {\r\n const child = content[i];\r\n if (typeof child === 'string') {\r\n element.appendChild(document.createTextNode(child));\r\n } else if (child instanceof HTMLElement) {\r\n element.appendChild(child);\r\n }\r\n }\r\n }\r\n return element;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Easy inheritance\r\n\r\n/**\r\n * Derive the class from the base.\r\n * @param cls {function} - Class (constructor) to derive.\r\n * @param base {function} - Class (constructor) to derive from.\r\n * @param members {object=} - Optional instance members to add.\r\n * @param statics {object=} - Optional static class members to add.\r\n * @returns {function} Original class.\r\n */\r\nfunction deriveClass(cls, base, members, statics) {\r\n cls.prototype = _.assign(Object.create(base.prototype), { constructor: cls }, members);\r\n if (statics) {\r\n _.assign(cls, statics);\r\n }\r\n return cls;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Deep prototyping\r\n\r\nfunction deriveDeep(obj, needZeroOwnProperties) {\r\n let res = obj;\r\n let i;\r\n let n;\r\n if (obj instanceof Array) {\r\n res = new Array(obj.length);\r\n for (i = 0, n = obj.length; i < n; ++i) {\r\n res[i] = deriveDeep(obj[i]);\r\n }\r\n } else if (obj instanceof Object) {\r\n res = Object.create(obj);\r\n const keys = Object.keys(obj);\r\n for (i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n const value = obj[key];\r\n const copy = deriveDeep(value);\r\n if (copy !== value) {\r\n res[key] = copy;\r\n }\r\n }\r\n if (needZeroOwnProperties && Object.keys(res).length > 0) {\r\n res = Object.create(res);\r\n }\r\n }\r\n return res;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Colors\r\n\r\nfunction hexColor(color) {\r\n const hex = (`0000000${color.toString(16)}`).substr(-6);\r\n return `#${hex}`;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Debug tracing\r\n\r\nfunction DebugTracer(namespace) {\r\n let enabled = false;\r\n\r\n this.enable = function (on) {\r\n enabled = on;\r\n };\r\n\r\n let indent = 0;\r\n const methods = Object.keys(namespace);\r\n\r\n function wrap(method_, name_) {\r\n return function (...args) {\r\n const spaces = DebugTracer.spaces.substr(0, indent * 2);\r\n if (enabled) {\r\n logger.debug(`${spaces + name_} {`);\r\n }\r\n indent++;\r\n const result = method_.apply(this, args);\r\n indent--;\r\n if (enabled) {\r\n logger.debug(`${spaces}} // ${name_}`);\r\n }\r\n return result;\r\n };\r\n }\r\n\r\n for (let i = 0, n = methods.length; i < n; ++i) {\r\n const name = methods[i];\r\n const method = namespace[name];\r\n if (method instanceof Function && name !== 'constructor') {\r\n namespace[name] = wrap(method, name);\r\n }\r\n }\r\n}\r\n\r\nDebugTracer.spaces = ' ';\r\n\r\nclass OutOfMemoryError extends Error {\r\n constructor(message) {\r\n super();\r\n this.name = 'OutOfMemoryError';\r\n this.message = message;\r\n }\r\n}\r\n\r\nfunction allocateTyped(TypedArrayName, size) {\r\n let result = null;\r\n try {\r\n result = new TypedArrayName(size);\r\n } catch (e) {\r\n if (e instanceof RangeError) {\r\n throw new OutOfMemoryError(e.message);\r\n } else {\r\n throw e;\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Float array conversion\r\n\r\nfunction bytesToBase64(/** ArrayBuffer */ buffer) {\r\n const bytes = new Uint8Array(buffer);\r\n let binary = '';\r\n for (let i = 0; i < bytes.byteLength; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return window.btoa(binary);\r\n}\r\n\r\nfunction bytesFromBase64(/** string */ str) {\r\n const binary = window.atob(str);\r\n const bytes = new Uint8Array(binary.length);\r\n for (let i = 0; i < bytes.length; ++i) {\r\n bytes[i] = binary[i].charCodeAt(0);\r\n }\r\n return bytes.buffer;\r\n}\r\n\r\nfunction arrayToBase64(/** number[] */ array, /** function */ TypedArrayClass) {\r\n return bytesToBase64(new TypedArrayClass(array).buffer);\r\n}\r\n\r\nfunction arrayFromBase64(/** string */ str, /** function */ TypedArrayClass) {\r\n return Array.prototype.slice.call(new TypedArrayClass(bytesFromBase64(str)));\r\n}\r\n\r\n// NOTE: this is 1-level comparison\r\nfunction compareOptionsWithDefaults(opts, defOpts) {\r\n const optsStr = [];\r\n if (defOpts && opts) {\r\n const keys = Object.keys(opts);\r\n for (let p = 0; p < keys.length; ++p) {\r\n const key = keys[p];\r\n const value = opts[key];\r\n // TODO add processing for tree structure\r\n if (!(value instanceof Object) && typeof defOpts[key] !== 'undefined' && defOpts[key] !== value) {\r\n optsStr.push(`${key}:${value}`);\r\n }\r\n }\r\n if (optsStr.length > 0) {\r\n return `!${optsStr.join()}`;\r\n }\r\n }\r\n return '';\r\n}\r\n\r\nfunction isAlmostPlainObject(o) {\r\n if (_.isPlainObject(o)) {\r\n return true;\r\n }\r\n const proto = o && Object.getPrototypeOf(o);\r\n return !!proto && !proto.hasOwnProperty('constructor') && isAlmostPlainObject(proto);\r\n}\r\n\r\n/**\r\n * Build an object that contains properties (and subproperties) of `src` different from those\r\n * in `dst`. Objects are parsed recursively, other values (including arrays) are compared for\r\n * equality using `_.isEqual()`.\r\n * @param {!object} src - a new object to compare, may contain changed or new properties\r\n * @param {!object} dst - an old reference object\r\n */\r\nfunction objectsDiff(src, dst) {\r\n const diff = {};\r\n _.forIn(src, (srcValue, key) => {\r\n const dstValue = dst[key];\r\n if (isAlmostPlainObject(srcValue) && isAlmostPlainObject(dstValue)) {\r\n const deepDiff = objectsDiff(srcValue, dstValue);\r\n if (!_.isEmpty(deepDiff)) {\r\n diff[key] = deepDiff;\r\n }\r\n } else if (!_.isEqual(srcValue, dstValue)) {\r\n diff[key] = srcValue;\r\n }\r\n });\r\n return diff;\r\n}\r\n\r\nfunction forInRecursive(object, callback) {\r\n function iterateThrough(obj, prefix) {\r\n _.forIn(obj, (value, key) => {\r\n const newPref = prefix + (prefix.length > 0 ? '.' : '');\r\n if (value instanceof Object) {\r\n iterateThrough(value, newPref + key);\r\n } else if (value !== undefined) {\r\n callback(value, newPref + key);\r\n }\r\n });\r\n }\r\n iterateThrough(object, '');\r\n}\r\n\r\nfunction enquoteString(value) {\r\n if (_.isString(value)) {\r\n return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\r\n }\r\n return value;\r\n}\r\n\r\nfunction unquoteString(value) {\r\n if (!_.isString(value)) {\r\n return value;\r\n }\r\n if (value[0] === '\"' && value[value.length - 1] === '\"') {\r\n value = value.slice(1, value.length - 1);\r\n return value.replace(/\\\\\"/g, '\"');\r\n }\r\n if (value[0] === \"'\" && value[value.length - 1] === \"'\") {\r\n value = value.slice(1, value.length - 1);\r\n return value.replace(/\\\\'/g, \"'\");\r\n }\r\n throw new SyntaxError('Incorrect string format, can\\'t unqute it');\r\n}\r\n\r\nfunction getFileExtension(fileName) {\r\n return fileName.slice((Math.max(0, fileName.lastIndexOf('.')) || Infinity));\r\n}\r\n\r\nfunction splitFileName(fileName) {\r\n const ext = getFileExtension(fileName);\r\n const name = fileName.slice(0, fileName.length - ext.length);\r\n return [name, ext];\r\n}\r\n\r\nfunction dataUrlToBlob(url) {\r\n const parts = url.split(/[:;,]/);\r\n const partsCount = parts.length;\r\n if (partsCount >= 3 && parts[partsCount - 2] === 'base64') {\r\n return new Blob([bytesFromBase64(parts[partsCount - 1])]);\r\n }\r\n return null;\r\n}\r\n\r\nfunction getBrowser() {\r\n if (navigator.vendor && navigator.vendor.indexOf('Apple') > -1\r\n && navigator.userAgent\r\n && navigator.userAgent.indexOf('CriOS') === -1\r\n && navigator.userAgent.indexOf('FxiOS') === -1) {\r\n return browserType.SAFARI;\r\n }\r\n return browserType.DEFAULT;\r\n}\r\n\r\nfunction shotOpen(url) {\r\n if (typeof window !== 'undefined') {\r\n window.open().document.write(``);\r\n }\r\n}\r\n\r\nfunction shotDownload(dataUrl, filename) {\r\n if (!dataUrl || dataUrl.substr(0, 5) !== 'data:') {\r\n return;\r\n }\r\n if (!filename) {\r\n filename = ['screenshot-', +new Date(), '.png'].join('');\r\n }\r\n if (typeof window !== 'undefined' && window.navigator && window.navigator.msSaveBlob) {\r\n window.navigator.msSaveBlob(dataUrlToBlob(dataUrl), filename);\r\n } else if (typeof document !== 'undefined') {\r\n const link = document.createElement('a');\r\n link.download = filename;\r\n link.innerHTML = 'download';\r\n link.href = window.URL.createObjectURL(dataUrlToBlob(dataUrl));\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n}\r\n\r\nfunction download(data, filename, type) {\r\n const blobData = new Blob([data]);\r\n\r\n if (!filename) {\r\n filename = ['data', +new Date()].join('');\r\n }\r\n\r\n if (!type) {\r\n filename += blobData.type || '.bin';\r\n } else {\r\n filename += `.${type}`;\r\n }\r\n\r\n if (typeof window !== 'undefined' && window.navigator && window.navigator.msSaveBlob) {\r\n window.navigator.msSaveBlob(blobData, filename);\r\n } else if (typeof document !== 'undefined') {\r\n const link = document.createElement('a');\r\n link.download = filename;\r\n link.innerHTML = 'download';\r\n link.href = window.URL.createObjectURL(blobData);\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n}\r\n\r\nfunction copySubArrays(src, dst, indices, itemSize) {\r\n for (let i = 0, n = indices.length; i < n; ++i) {\r\n for (let j = 0; j < itemSize; ++j) {\r\n dst[i * itemSize + j] = src[indices[i] * itemSize + j];\r\n }\r\n }\r\n}\r\n\r\nfunction shallowCloneNode(node) {\r\n const newNode = node.cloneNode(true);\r\n newNode.worldPos = node.worldPos;\r\n // .style property is readonly, so \"newNode.style = node.style;\" won't work (and we don't need it, right?)\r\n return newNode;\r\n}\r\n\r\nconst unquotedStringRE = /^[a-zA-Z0-9_]*$/;\r\nconst enquoteHelper = ['\"', '', '\"'];\r\n\r\n// verify and correct if needed selctor identifier\r\nfunction correctSelectorIdentifier(value) {\r\n if (unquotedStringRE.test(value)) {\r\n return value;\r\n }\r\n // quote incorrect identifier\r\n enquoteHelper[1] = value;\r\n return enquoteHelper.join('');\r\n}\r\n\r\n/**\r\n * Concatenates two TypedArray. Doesn't check null refs o type equality\r\n * Attention! It must be use very rarely because requires memory reallocation every time. Use MergeTypedArraysUnsafe to\r\n * unite array of subarrays.\r\n * @param{TypedArray} first - destination array\r\n * @param{TypedArray} second - source array\r\n * @returns{TypedArray} resulting concatenated array\r\n */\r\nfunction concatTypedArraysUnsafe(first, second) {\r\n const result = new first.constructor(first.length + second.length);\r\n result.set(first);\r\n result.set(second, first.length);\r\n return result;\r\n}\r\n\r\n/**\r\n * Merges array of TypedArray into TypedArray. Doesn't check null refs o type equality\r\n * @param{array} array - source array of subarrays\r\n * @returns{TypedArray} resulting merged array\r\n */\r\nfunction mergeTypedArraysUnsafe(array) {\r\n if (array.length <= 0) {\r\n return null;\r\n }\r\n // count the size\r\n const size = array.reduce((acc, cur) => acc + cur.length, 0);\r\n // create combined array\r\n const result = new array[0].constructor(size);\r\n for (let i = 0, start = 0; i < array.length; i++) {\r\n const count = array[i].length;\r\n result.set(array[i], start);\r\n start += count;\r\n }\r\n return result;\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n// Exports\r\n\r\nexport default {\r\n browserType,\r\n encodeQueryComponent,\r\n decodeQueryComponent,\r\n getUrlParameters,\r\n getUrlParametersAsDict,\r\n resolveURL,\r\n generateRegExp,\r\n createElement,\r\n deriveClass,\r\n deriveDeep,\r\n hexColor,\r\n DebugTracer,\r\n OutOfMemoryError,\r\n allocateTyped,\r\n bytesFromBase64,\r\n bytesToBase64,\r\n arrayFromBase64,\r\n arrayToBase64,\r\n compareOptionsWithDefaults,\r\n objectsDiff,\r\n forInRecursive,\r\n enquoteString,\r\n unquoteString,\r\n getBrowser,\r\n shotOpen,\r\n shotDownload,\r\n copySubArrays,\r\n shallowCloneNode,\r\n correctSelectorIdentifier,\r\n getFileExtension,\r\n splitFileName,\r\n download,\r\n concatTypedArraysUnsafe,\r\n mergeTypedArraysUnsafe,\r\n};\r\n","import EventDispatcher from './EventDispatcher';\r\n\r\nexport default class JobHandle extends EventDispatcher {\r\n constructor() {\r\n super();\r\n this._shouldCancel = false;\r\n }\r\n\r\n cancel() {\r\n this._shouldCancel = true;\r\n this.dispatchEvent({ type: 'cancel' });\r\n }\r\n\r\n shouldCancel() {\r\n return this._shouldCancel;\r\n }\r\n\r\n // slaves use this to notify master about their events\r\n // master routes these notifications to a single event slot\r\n notify(event) {\r\n this.dispatchEvent({ type: 'notification', slaveEvent: event });\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport utils from './utils';\r\nimport EventDispatcher from './utils/EventDispatcher';\r\n\r\nconst VERSION = 0;\r\n\r\n//----------------------------------------------------------------------------\r\n// DEFAULT SETTINGS\r\n//----------------------------------------------------------------------------\r\n\r\n/**\r\n * Polygonal complexity settings.\r\n *\r\n * @typedef PolyComplexity\r\n * @property {number} poor\r\n * @property {number} low\r\n * @property {number} medium\r\n * @property {number} high\r\n * @property {number} ultra\r\n */\r\n\r\n/**\r\n * @alias SettingsObject\r\n * @namespace\r\n */\r\nconst defaults = {\r\n /**\r\n * Default options for all available modes.\r\n * Use {@link Mode.id} as a dictionary key to access mode options.\r\n *\r\n * Usually you don't need to override these settings. You may specify mode options as a parameter during\r\n * {@link Mode} construction.\r\n *\r\n * @memberof SettingsObject#\r\n * @type {Object.}\r\n *\r\n * @property {LinesModeOptions} LN - Lines mode options.\r\n * @property {LicoriceModeOptions} LC - Licorice mode options.\r\n * @property {BallsAndSticksModeOptions} BS - Balls and Sticks mode options.\r\n * @property {VanDerWaalsModeOptions} VW - Van der Waals mode options.\r\n * @property {TraceModeOptions} TR - Trace mode options.\r\n * @property {TubeModeOptions} TU - Tube mode options.\r\n * @property {CartoonModeOptions} CA - Cartoon mode options.\r\n * @property {QuickSurfaceModeOptions} QS - Contact Surface mode options.\r\n * @property {IsoSurfaceSASModeOptions} SA - Solvent Accessible Surface mode options.\r\n * @property {IsoSurfaceSESModeOptions} SE - Solvent Excluded Surface mode options.\r\n * @property {ContactSurfaceModeOptions} CS - Contact Surface mode options.\r\n * @property {TextModeOptions} TX - Text mode options.\r\n * @property {VolumeDensityModeOptions} VD - Volume Density mode options.\r\n */\r\n modes: {\r\n //----------------------------------------------------------------------------\r\n // BALLS AND STICKS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Balls and Sticks mode options.\r\n *\r\n * @typedef BallsAndSticksModeOptions\r\n *\r\n * @property {number} atom - Sphere radius as a fraction of Van der Waals atom radius.\r\n * @property {number} bond - Cylinder radius in angstroms.\r\n * @property {number} space - Fraction of the space around one cylinder. Zero means that cylinder fills all\r\n * available space.\r\n * @property {boolean} multibond - Toggles rendering of multiple ordered bonds.\r\n * @property {number} aromrad - Minor radius of a torus for aromatic loops.\r\n * @property {boolean} showarom - Toggles rendering of aromatic loops.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n BS: {\r\n atom: 0.23,\r\n bond: 0.15,\r\n space: 0.5,\r\n multibond: true,\r\n aromrad: 0.1,\r\n showarom: true,\r\n polyComplexity: {\r\n poor: 3,\r\n low: 4,\r\n medium: 6,\r\n high: 12,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // VAN DER WAALS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Van der Waals mode options.\r\n *\r\n * @typedef VanDerWaalsModeOptions\r\n *\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n VW: {\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 8,\r\n high: 16,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // LINES\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Lines mode options.\r\n *\r\n * @typedef LinesModeOptions\r\n *\r\n * @property {boolean} multibond - Flag, that toggles rendering of multiple ordered bonds.\r\n * @property {boolean} showarom - Flag, that toggles rendering of aromatic loops.\r\n * @property {number} offsarom - Offset between bonds and aromatic cycle.\r\n * @property {number} chunkarom - Number of pieces in a-loop arc, corresponding to atom.\r\n * @property {number} atom - Collision radius for atoms picking.\r\n * @property {number} lineWidth - Line width in pixels (not used in thin lines).\r\n */\r\n LN: {\r\n multibond: true,\r\n showarom: true,\r\n offsarom: 0.2,\r\n chunkarom: 10,\r\n atom: 0.23,\r\n lineWidth: 2,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // LICORICE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Licorice mode options.\r\n *\r\n * @typedef LicoriceModeOptions\r\n *\r\n * @property {number} bond - Bond cylinder radius.\r\n * @property {number} space - Fraction of the space around one cylinder. Zero means that cylinder fills all\r\n * available space.\r\n * @property {boolean} multibond - Flag, that toggles rendering of multiple ordered bonds.\r\n * @property {number} aromrad - Minor radius of a torus for aromatic loops.\r\n * @property {boolean} showarom - Flag, that toggles rendering of aromatic loops.\r\n * @property {PolyComplexity} polyComplexity - Poly complexity values for render modes.\r\n */\r\n LC: {\r\n bond: 0.20,\r\n space: 0.0,\r\n multibond: true,\r\n aromrad: 0.1,\r\n showarom: true,\r\n polyComplexity: {\r\n poor: 3,\r\n low: 4,\r\n medium: 6,\r\n high: 12,\r\n ultra: 32,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // SURFACE SAS\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Solvent Accessible Surface mode options.\r\n *\r\n * @typedef IsoSurfaceSASModeOptions\r\n *\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {number} probeRadius - Radius of the probe.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n SA: {\r\n zClip: false,\r\n probeRadius: 1.5,\r\n subset: '',\r\n wireframe: false,\r\n polyComplexity: {\r\n poor: 6,\r\n low: 8,\r\n medium: 16,\r\n high: 30,\r\n ultra: 60,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // SURFACE SES\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Solvent Excluded Surface mode options.\r\n *\r\n * @typedef IsoSurfaceSESModeOptions\r\n *\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {number} probeRadius - Radius of the probe.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n SE: {\r\n zClip: false,\r\n probeRadius: 1.5,\r\n subset: '',\r\n wireframe: false,\r\n polyComplexity: {\r\n poor: 6,\r\n low: 8,\r\n medium: 16,\r\n high: 30,\r\n ultra: 60,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // QUICK SURFACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Quick Surface mode options.\r\n *\r\n * @typedef QuickSurfaceModeOptions\r\n *\r\n * @property {number} isoValue - Isovalue of the surface to extract.\r\n * @property {number} scale - Radius scale for the surface being built.\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} gaussLim - Gauss lim for coloring the bigger the value, the smoother our colors are.\r\n * @property {PolyComplexity} gridSpacing - Poly complexity values for render modes. In this case the value\r\n * corresponds to the grid density.\r\n */\r\n QS: {\r\n isoValue: 0.5,\r\n gaussLim: {\r\n poor: 1.5,\r\n low: 2.0,\r\n medium: 2.5,\r\n high: 3.0,\r\n ultra: 4.0,\r\n },\r\n scale: 1.0,\r\n wireframe: false,\r\n gridSpacing: {\r\n poor: 2,\r\n low: 1.5,\r\n medium: 1,\r\n high: 0.5,\r\n ultra: 0.25,\r\n },\r\n subset: '',\r\n zClip: false,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // CONTACT SURFACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Contact Surface mode options.\r\n *\r\n * @typedef ContactSurfaceModeOptions\r\n *\r\n * @property {number} isoValue - Isovalue of the surface to extract.\r\n * @property {number} probeRadius - Probe radius.\r\n * @property {number} probePositions\r\n * @property {boolean} zClip - Flag, that toggles z-clipping.\r\n * @property {string} subset - Only parts of surface close to selected atoms will be visible.\r\n * Empty string means whole surface is visible.\r\n * @property {boolean} wireframe - Flag that specifies whether or not surface rendered in wireframe mode.\r\n * @property {PolyComplexity} polyComplexity - Radius scale for the surface being built.\r\n * Poly complexity values for render modes. In this case the value corresponds to the grid density.\r\n */\r\n CS: {\r\n probeRadius: 1.4,\r\n isoValue: 1.5,\r\n wireframe: false,\r\n probePositions: 30,\r\n polyComplexity: {\r\n poor: 0.5,\r\n low: 1.0,\r\n medium: 1.5,\r\n high: 1.75,\r\n ultra: 2.0,\r\n },\r\n subset: '',\r\n zClip: false,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TRACE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Trace mode options.\r\n *\r\n * @typedef TraceModeOptions\r\n *\r\n * @property {number} radius - Cylinder radius.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n TR: {\r\n radius: 0.30,\r\n polyComplexity: {\r\n poor: 12,\r\n low: 16,\r\n medium: 32,\r\n high: 64,\r\n ultra: 64,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TUBE\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Tube mode options.\r\n *\r\n * @typedef TubeModeOptions\r\n *\r\n * @property {number} radius - Cylinder radius.\r\n * @property {number} tension - Tension for interpolation.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n * @property {number} heightSegmentsRatio - Poly complexity multiplier for height segments.\r\n */\r\n TU: {\r\n radius: 0.30,\r\n heightSegmentsRatio: 1.5,\r\n tension: -0.7,\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 10,\r\n high: 18,\r\n ultra: 34,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // CARTOON\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Cartoon mode options.\r\n *\r\n * @typedef CartoonModeOptions\r\n *\r\n * @property {number} radius - Standard tube radius.\r\n * @property {number} depth - Height of the secondary structure ribbon.\r\n * @property {number} tension - Tension for interpolation.\r\n * @proprety {object} ss - Secondary structure parameters.\r\n * @proprety {object} ss.helix - Options for helices render.\r\n * @proprety {number} ss.helix.width - Width of the secondary structure ribbon.\r\n * @proprety {number} ss.helix.arrow - Secondary structure's arrow width.\r\n * @proprety {object} ss.strand - Options for strands render.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n * polyComplexity must be even for producing symmetric arrows.\r\n * @property {number} heightSegmentsRatio - Poly complexity multiplier for height segments.\r\n */\r\n CA: {\r\n radius: 0.30,\r\n depth: 0.25,\r\n ss: {\r\n helix: {\r\n width: 1.0,\r\n arrow: 2.0,\r\n },\r\n strand: {\r\n width: 1.0,\r\n arrow: 2.0,\r\n },\r\n },\r\n heightSegmentsRatio: 1.5,\r\n tension: -0.7,\r\n polyComplexity: {\r\n poor: 4,\r\n low: 6,\r\n medium: 10,\r\n high: 18,\r\n ultra: 34,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // TEXT\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Text mode options.\r\n *\r\n * @typedef TextModeOptions\r\n *\r\n * @property {string} template - Format string for building output text.\r\n * @property {string} horizontalAlign - Text alignment ('left', 'right', 'center').\r\n * @property {string} verticalAlign - Vertical text box alignment ('top', 'bottom', 'middle').\r\n * @property {number} dx - Text offset x in angstroms.\r\n * @property {number} dy - Text offset y in angstroms.\r\n * @property {number} dz - Text offset z in angstroms.\r\n * @property {string} fg - Color rule for foreground.\r\n * @property {string} bg - Color rule for background.\r\n * @property {boolean} showBg - Flag, that toggles background rendering.\r\n *\r\n */\r\n TX: {\r\n template: '{{Chain}}.{{Residue}}{{Sequence}}.{{Name}}',\r\n horizontalAlign: 'center',\r\n verticalAlign: 'middle',\r\n dx: 0,\r\n dy: 0,\r\n dz: 1,\r\n fg: 'none',\r\n bg: '0x202020',\r\n showBg: true,\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n // VOLUME DENSITY\r\n //----------------------------------------------------------------------------\r\n\r\n /**\r\n * Volume density mode options.\r\n *\r\n * @typedef VolumeDensityModeOptions\r\n *\r\n * @property {number} kSigma - Noise threshold coefficient.\r\n * @property {boolean} frame - flag, that turns on box frame painting.\r\n * @property {boolean} isoMode - flag, that turns on IsoSurface mode instead of Volume Rendering.\r\n * @property {PolyComplexity} polyComplexity - Polygonal complexity settings for different resolutions.\r\n */\r\n VD: {\r\n kSigma: 1.0,\r\n kSigmaMed: 2.0,\r\n kSigmaMax: 4.0,\r\n frame: true,\r\n isoMode: false,\r\n polyComplexity: {\r\n poor: 2,\r\n low: 3,\r\n medium: 4,\r\n high: 8,\r\n ultra: 10,\r\n },\r\n },\r\n },\r\n\r\n /**\r\n * Default options for all available colorers.\r\n * Use {@link Colorer.id} as a dictionary key to access colorer options.\r\n *\r\n * Usually you don't need to override these settings. You may specify colorer options as a parameter during\r\n * {@link Colorer} construction.\r\n *\r\n * Not all colorers have options.\r\n *\r\n * @memberof SettingsObject#\r\n * @type {Object.}\r\n *\r\n * @property {ElementColorerOptions} EL - Element colorer options.\r\n * @property {SequenceColorerOptions} SQ - Sequence colorer options.\r\n * @property {MoleculeColorerOptions} MO - Molecule colorer options.\r\n * @property {UniformColorerOptions} UN - Uniform colorer options.\r\n * @property {ConditionalColorerOptions} CO - Conditional colorer options.\r\n * @property {TemperatureColorerOptions} TM - Temperature colorer options.\r\n * @property {OccupancyColorerOptions} OC - Occupancy colorer options.\r\n * @property {HydrophobicityColorerOptions} HY - Hydrophobicity colorer options.\r\n */\r\n colorers: {\r\n /**\r\n * Element colorer options.\r\n *\r\n * @typedef ElementColorerOptions\r\n *\r\n * @property {number} carbon - Carbon color or -1 to use default.\r\n */\r\n EL: {\r\n carbon: -1,\r\n },\r\n\r\n /**\r\n * Uniform colorer options.\r\n *\r\n * @typedef UniformColorerOptions\r\n *\r\n * @property {number} color - Single color to paint with.\r\n */\r\n UN: {\r\n color: 0xFFFFFF,\r\n },\r\n\r\n /**\r\n * Conditional colorer options.\r\n *\r\n * @typedef ConditionalColorerOptions\r\n *\r\n * @property {string} subset - Selector string.\r\n * @property {number} color - Color of selected atoms.\r\n * @property {number} baseColor - Color of other atoms.\r\n */\r\n CO: {\r\n subset: 'charged',\r\n color: 0xFF0000,\r\n baseColor: 0xFFFFFF,\r\n },\r\n\r\n /**\r\n * Carbon colorer options.\r\n *\r\n * @typedef CarbonColorerOptions\r\n *\r\n * @property {number} color - Single color to paint carbons\r\n * @property {number} factor - Color factor for not carbon atoms.\r\n */\r\n CB: {\r\n color: 0x909090,\r\n factor: 0.6,\r\n },\r\n\r\n /**\r\n * Sequence colorer options.\r\n *\r\n * @typedef SequenceColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n SQ: {\r\n gradient: 'rainbow',\r\n },\r\n\r\n /**\r\n * Temperature colorer options.\r\n *\r\n * @typedef TemperatureColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n * @property {number} min - Minimal temperature.\r\n * @property {number} max - Maximal temperature.\r\n */\r\n TM: {\r\n gradient: 'temp',\r\n min: 5,\r\n max: 40,\r\n },\r\n\r\n /**\r\n * Occupancy colorer options.\r\n *\r\n * @typedef OccupancyColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n OC: {\r\n gradient: 'reds',\r\n },\r\n\r\n /**\r\n * Hydrophobicity colorer options.\r\n *\r\n * @typedef HydrophobicityColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n HY: {\r\n gradient: 'blue-red',\r\n },\r\n\r\n /**\r\n * Molecule colorer options.\r\n *\r\n * @typedef MoleculeColorerOptions\r\n *\r\n * @property {string} gradient - Name of gradient to use.\r\n */\r\n MO: {\r\n gradient: 'rainbow',\r\n },\r\n },\r\n\r\n /*\r\n * Use antialiasing in WebGL.\r\n * @type {boolean}\r\n */\r\n antialias: true,\r\n\r\n /*\r\n * Camera field of view in degrees.\r\n * @type {number}\r\n */\r\n camFov: 45.0,\r\n\r\n /*\r\n * Camera near plane distance.\r\n * @type {number}\r\n */\r\n camNear: 0.5,\r\n\r\n /*\r\n * Camera far plane distance.\r\n * @type {number}\r\n */\r\n camFar: 100.0,\r\n\r\n camDistance: 2.5,\r\n\r\n radiusToFit: 1.0,\r\n\r\n /**\r\n * @type {number}\r\n * @instance\r\n */\r\n fogNearFactor: 0.5, // [0, 1]\r\n\r\n /**\r\n * @type {number}\r\n * @instance\r\n */\r\n fogFarFactor: 1, // [0, 1]\r\n fogAlpha: 1.0,\r\n fogColor: 0x000000,\r\n fogColorEnable: false,\r\n\r\n /**\r\n * Palette used for molecule coloring.\r\n * @type {string}\r\n */\r\n palette: 'JM',\r\n\r\n /*\r\n * Geometry resolution.\r\n * @type {string}\r\n */\r\n resolution: 'medium',\r\n\r\n autoResolution: false/* true */,\r\n\r\n autoPreset: true,\r\n\r\n preset: 'default', // TODO: remove 'preset' from settings, implement autodetection\r\n\r\n presets: {\r\n // Default\r\n default: [{\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n empty: [],\r\n\r\n // Wireframe\r\n wire: [{\r\n mode: 'LN',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n // Small molecules\r\n small: [{\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'all',\r\n material: 'SF',\r\n }],\r\n\r\n // Proteins, nucleic acids etc.\r\n macro: [{\r\n mode: 'CA',\r\n colorer: 'SS',\r\n selector: 'not hetatm',\r\n material: 'SF',\r\n }, {\r\n mode: 'BS',\r\n colorer: 'EL',\r\n selector: 'hetatm and not water',\r\n material: 'SF',\r\n }],\r\n },\r\n\r\n objects: {\r\n line: {\r\n color: 0xFFFFFFFF,\r\n dashSize: 0.3,\r\n gapSize: 0.05,\r\n },\r\n },\r\n\r\n //----------------------------------------------------------------------------\r\n\r\n bg: {\r\n color: 0x202020,\r\n transparent: false,\r\n },\r\n\r\n draft: {\r\n clipPlane: false,\r\n clipPlaneFactor: 0.5,\r\n clipPlaneSpeed: 0.00003,\r\n },\r\n\r\n /*\r\n * Separate group for plugins.\r\n * Each plugin handles its field by itself.\r\n */\r\n plugins: {\r\n\r\n },\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n axes: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fog: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fps: true,\r\n\r\n /**\r\n * Switch using of z-sprites for sphere and cylinder geometry\r\n * @type {boolean}\r\n * @instance\r\n */\r\n zSprites: true,\r\n\r\n isoSurfaceFakeOpacity: true,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n suspendRender: true,\r\n\r\n nowater: false,\r\n\r\n /**\r\n * @type {boolean}\r\n * @instance\r\n */\r\n autobuild: true,\r\n\r\n /**\r\n * Anti-aliasing.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n fxaa: true,\r\n /**\r\n * Outline depths\r\n * @type {boolean}\r\n * @instance\r\n */\r\n outline: {\r\n on: false,\r\n color: 0x000000,\r\n threshold: 0.1,\r\n thickness: 1,\r\n },\r\n\r\n /**\r\n * Ambient Occlusion special effect.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n ao: false,\r\n\r\n /**\r\n * Shadows options.\r\n *\r\n * @property {boolean} shadowMap - enable/disable.\r\n * @property {string} basic/percentage-closer filtering/non-uniform randomizing pcf.\r\n * @property {number} radius for percentage-closer filtering.\r\n */\r\n shadow: {\r\n on: false,\r\n type: 'random'/* basic, pcf, random */,\r\n radius: 1.0,\r\n },\r\n\r\n /**\r\n * Auto-rotation with constant speed.\r\n * @type {number}\r\n * @instance\r\n */\r\n autoRotation: 0.0,\r\n\r\n /**\r\n * Set maximum fps for animation.\r\n * @type {number}\r\n * @instance\r\n */\r\n maxfps: 30,\r\n\r\n /**\r\n * Set fbx output precision.\r\n * @type {number}\r\n * @instance\r\n */\r\n fbxprec: 4,\r\n\r\n /**\r\n * Auto-rotation axis.\r\n *\r\n * - true: complex auto-rotation is about vertical axis\r\n * - false: rotation axis is defined by last user rotation\r\n *\r\n * @type {boolean}\r\n * @instance\r\n */\r\n autoRotationAxisFixed: true,\r\n\r\n /**\r\n * Enable zooming with mouse wheel or pinch gesture.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n zooming: true,\r\n\r\n /**\r\n * Enable picking atoms & residues with left mouse button or touch.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n picking: true,\r\n\r\n /**\r\n * Set picking mode ('atom', 'residue', 'chain', 'molecule').\r\n * @type {string}\r\n * @instance\r\n */\r\n pick: 'atom',\r\n\r\n /**\r\n * Make \"component\" and \"fragment\" editing modes available.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n editing: false,\r\n\r\n /**\r\n * Detect aromatic loops.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n aromatic: false,\r\n\r\n /**\r\n * Load only one biological unit from all those described in PDB file.\r\n * @type {boolean}\r\n * @instance\r\n */\r\n singleUnit: true,\r\n\r\n /**\r\n * Set stereo mode ('NONE', 'SIMPLE', 'DISTORTED', 'ANAGLYPH', 'WEBVR').\r\n * @type {string}\r\n * @instance\r\n */\r\n stereo: 'NONE',\r\n\r\n /**\r\n * Enable smooth transition between views\r\n * @type {boolean}\r\n * @instance\r\n */\r\n interpolateViews: true,\r\n\r\n /**\r\n * Set transparency mode ('standard', 'prepass').\r\n * @type {string}\r\n * @instance\r\n */\r\n transparency: 'prepass',\r\n\r\n /**\r\n * Mouse translation speed.\r\n * @type {number}\r\n * @instance\r\n */\r\n translationSpeed: 2,\r\n\r\n debug: {\r\n example: 3.5,\r\n text: 'hello!',\r\n good: true,\r\n ssaoKernelRadius: 0.7,\r\n ssaoFactor: 0.7,\r\n stereoBarrel: 0.25,\r\n },\r\n use: {\r\n multiFile: false,\r\n },\r\n};\r\n\r\n//----------------------------------------------------------------------------\r\n// SETTINGS CLASS\r\n//----------------------------------------------------------------------------\r\n\r\nfunction Settings() {\r\n EventDispatcher.call(this);\r\n\r\n this.old = null;\r\n this.now = {};\r\n this._changed = {};\r\n\r\n this.reset();\r\n}\r\n\r\nutils.deriveClass(Settings, EventDispatcher, {\r\n defaults,\r\n\r\n set(path, value) {\r\n if (_.isString(path)) {\r\n const oldValue = _.get(this.now, path);\r\n if (oldValue !== value) {\r\n _.set(this.now, path, value);\r\n this._notifyChange(path, value);\r\n }\r\n } else {\r\n const diff = utils.objectsDiff(path, this.now);\r\n if (!_.isEmpty(diff)) {\r\n _.merge(this.now, diff);\r\n this._notifyChanges(diff);\r\n }\r\n }\r\n },\r\n\r\n get(path, defaultValue) {\r\n return _.get(this.now, path, defaultValue);\r\n },\r\n\r\n reset() {\r\n const diff = utils.objectsDiff(defaults, this.now);\r\n this.now = _.cloneDeep(defaults);\r\n this.old = null;\r\n this._notifyChanges(diff);\r\n this._changed = {};\r\n },\r\n\r\n checkpoint() {\r\n this.old = _.cloneDeep(this.now);\r\n this._changed = {};\r\n },\r\n\r\n _notifyChange(path, value) {\r\n this._changed[path] = true;\r\n this.dispatchEvent({ type: `change:${path}`, value });\r\n },\r\n\r\n _notifyChanges(diff) {\r\n utils.forInRecursive(diff, (deepValue, deepPath) => {\r\n this._notifyChange(deepPath, deepValue);\r\n });\r\n },\r\n\r\n changed() {\r\n if (!this.old) {\r\n return [];\r\n }\r\n const { old, now } = this;\r\n const keys = _.filter(Object.keys(this._changed), (key) => _.get(old, key) !== _.get(now, key));\r\n return keys;\r\n },\r\n\r\n applyDiffs(diffs) {\r\n if (diffs.hasOwnProperty('VERSION') && diffs.VERSION !== VERSION) {\r\n throw new Error('Settings version does not match!');\r\n }\r\n // VERSION shouldn't be presented inside settings structure\r\n delete diffs.VERSION;\r\n this.reset();\r\n this.set(diffs);\r\n },\r\n\r\n getDiffs(versioned) {\r\n const diffs = utils.objectsDiff(this.now, defaults);\r\n if (versioned) {\r\n diffs.VERSION = VERSION;\r\n }\r\n return diffs;\r\n },\r\n\r\n setPluginOpts(plugin, opts) {\r\n defaults.plugins[plugin] = _.cloneDeep(opts);\r\n this.now.plugins[plugin] = _.cloneDeep(opts);\r\n },\r\n});\r\n\r\nexport default new Settings();\r\n","import _ from 'lodash';\r\nimport settings from './settings';\r\nimport utils from './utils';\r\nimport logger from './utils/logger';\r\n\r\nlet repIndex = 0;\r\n\r\nfunction asBoolean(value) {\r\n return !(!value || value === '0' || (_.isString(value) && value.toLowerCase() === 'false'));\r\n}\r\n\r\nconst adapters = {\r\n string: String,\r\n number: Number,\r\n boolean: asBoolean,\r\n};\r\n\r\n// Level 1 assignment symbol\r\nconst cL1Ass = '=';\r\n\r\nconst cOptsSep = '!';\r\n// Level 2 (options) assignment symbol\r\nconst cL2Ass = ':';\r\n// Level 2 (options) separator symbol\r\nconst cLSep = ',';\r\n\r\nconst cCommonIgnoreSymbols = '$;@/?';\r\n/**\r\n * We may (and should) leave as is for better readability:\r\n *\r\n * $ , ; : @ / ?\r\n */\r\n/**\r\n * Generate regular expression for symbols excluded for first level encryption\r\n */\r\nfunction getLevel1ExcludedExpr() {\r\n const cLevel1Ignores = ':,';\r\n return utils.generateRegExp(cCommonIgnoreSymbols + cLevel1Ignores);\r\n}\r\n\r\n/**\r\n * Generate regular expression for symbols excluded for first level encryption\r\n * (options, etc, ..)\r\n */\r\nfunction getLevel2ExcludedExpr() {\r\n const cLevel2Ignores = ' ';\r\n return utils.generateRegExp(cCommonIgnoreSymbols + cLevel2Ignores);\r\n}\r\n\r\nconst cL1ExclExpr = getLevel1ExcludedExpr();\r\nfunction encodeQueryComponentL1(value) {\r\n return utils.encodeQueryComponent(value, cL1ExclExpr);\r\n}\r\n\r\nconst cL2ExclExpr = getLevel2ExcludedExpr();\r\nfunction encodeQueryComponentL2(value) {\r\n return utils.encodeQueryComponent(value, cL2ExclExpr);\r\n}\r\n\r\nfunction ensureRepList(opts) {\r\n let { reps } = opts;\r\n if (!reps) {\r\n const { presets } = settings.now;\r\n let preset = opts.preset || settings.now.preset;\r\n reps = presets[preset];\r\n if (!reps) {\r\n logger.warn(`Unknown preset \"${preset}\"`);\r\n [preset] = Object.keys(presets);\r\n reps = presets[preset]; // fall back to any preset\r\n }\r\n opts.preset = preset;\r\n opts.reps = utils.deriveDeep(reps, true);\r\n }\r\n}\r\n\r\nfunction ensureRepAssign(opts, prop, value) {\r\n ensureRepList(opts);\r\n const rep = opts.reps[repIndex];\r\n // prop specified twice therefore start new rep by cloning the current\r\n if (rep.hasOwnProperty(prop)) {\r\n repIndex = opts.reps.length;\r\n opts.reps[repIndex] = utils.deriveDeep(rep, true);\r\n }\r\n if (value !== undefined) {\r\n opts.reps[repIndex][prop] = value;\r\n }\r\n}\r\n\r\nfunction addObject(opts, params, options) {\r\n if (opts._objects === undefined) {\r\n opts._objects = [];\r\n }\r\n\r\n const [type, newOpts] = options;\r\n const newObj = {\r\n type,\r\n params,\r\n };\r\n\r\n if (newOpts !== undefined) {\r\n newObj.opts = newOpts;\r\n }\r\n\r\n opts._objects[opts._objects.length] = newObj;\r\n}\r\n\r\nfunction parseParams(str, params) {\r\n const sep = str.indexOf(',');\r\n if (sep >= 0) {\r\n params.push(str.substr(sep + 1).split(','));\r\n return str.substr(0, sep);\r\n }\r\n // keep this untouched if no params were extracted\r\n return str;\r\n}\r\n\r\nfunction extractArgs(input, defaultsDict, params) {\r\n if (input) {\r\n const bang = input.indexOf(cOptsSep);\r\n const inputVal = parseParams(input.substr(0, bang >= 0 ? bang : undefined), params);\r\n if (bang >= 0) {\r\n const args = input.substr(bang + 1).split(cLSep);\r\n input = inputVal;\r\n if (defaultsDict) {\r\n const defaults = defaultsDict[input];\r\n const opts = utils.deriveDeep(defaults, true);\r\n args.forEach((arg) => {\r\n const pair = arg.split(cL2Ass, 2);\r\n const key = decodeURIComponent(pair[0]);\r\n const value = decodeURIComponent(pair[1]);\r\n const adapter = adapters[typeof _.get(defaults, key)];\r\n if (adapter) {\r\n _.set(opts, key, adapter(value));\r\n } else {\r\n logger.warn(`Unknown argument \"${key}\" for option \"${input}\"`);\r\n }\r\n });\r\n if (Object.keys(opts).length > 0) {\r\n input = [input, opts];\r\n }\r\n }\r\n } else {\r\n input = inputVal;\r\n }\r\n }\r\n return input;\r\n}\r\n\r\nconst actions = {\r\n\r\n l: 'load',\r\n load: String,\r\n t: 'type',\r\n type: String,\r\n v: 'view',\r\n view: String,\r\n u: 'unit',\r\n unit: Number,\r\n menu: asBoolean,\r\n\r\n // Commands\r\n\r\n o: 'object',\r\n object(value, opts) {\r\n const params = [];\r\n let options = extractArgs(value, settings.defaults.objects, params);\r\n if (!Array.isArray(options)) {\r\n options = [options];\r\n }\r\n addObject(opts, params[0], options);\r\n },\r\n\r\n p: 'preset',\r\n preset(value, opts) {\r\n opts.preset = value;\r\n opts.reps = null;\r\n ensureRepList(opts);\r\n },\r\n\r\n r: 'rep',\r\n rep(value, opts) {\r\n ensureRepList(opts);\r\n repIndex = Number(value);\r\n // clamp the index to one greater than the last\r\n repIndex = repIndex <= opts.reps.length ? (repIndex < 0 ? 0 : repIndex) : opts.reps.length;\r\n // create a new rep if it is adjacent to the existing ones\r\n if (repIndex === opts.reps.length) {\r\n // if there is no rep to derive from, derive from the first rep of the default\r\n opts.reps[repIndex] = repIndex > 0 ? utils.deriveDeep(opts.reps[repIndex - 1], true)\r\n : utils.deriveDeep(settings.defaults.presets.default[0], true);\r\n }\r\n },\r\n\r\n s: 'select',\r\n select(value, opts) {\r\n ensureRepAssign(opts, 'selector', value);\r\n },\r\n\r\n m: 'mode',\r\n mode(value, opts) {\r\n ensureRepAssign(opts, 'mode', extractArgs(value, settings.defaults.modes));\r\n },\r\n\r\n c: 'color',\r\n color(value, opts) {\r\n ensureRepAssign(opts, 'colorer', extractArgs(value, settings.defaults.colorers));\r\n },\r\n\r\n mt: 'material',\r\n material(value, opts) {\r\n ensureRepAssign(opts, 'material', extractArgs(value, settings.defaults.materials));\r\n },\r\n\r\n dup(value, opts) {\r\n ensureRepList(opts);\r\n const { reps } = opts;\r\n const rep = reps[repIndex];\r\n repIndex = reps.length;\r\n reps[repIndex] = utils.deriveDeep(rep, true);\r\n },\r\n\r\n // Settings shortcuts\r\n\r\n ar: 'autoResolution',\r\n};\r\n\r\nfunction _fromArray(entries) {\r\n repIndex = 0;\r\n\r\n const opts = {};\r\n for (let i = 0, n = entries.length; i < n; ++i) {\r\n const /** string[] */ entry = entries[i];\r\n let /** string? */ key = entry[0];\r\n const /** string? */ value = entry[1];\r\n let /** function|string? */ action = actions[key];\r\n\r\n // unwind shortcuts and aliases\r\n while (_.isString(action)) {\r\n key = action;\r\n action = actions[key];\r\n }\r\n\r\n // either set a property or use specialized parser\r\n if (!action) {\r\n const adapter = adapters[typeof _.get(settings.defaults, key)];\r\n if (adapter) {\r\n _.set(opts, `settings.${key}`, adapter(value));\r\n } else {\r\n logger.warn(`Unknown option \"${key}\"`);\r\n }\r\n } else if (_.isFunction(action)) {\r\n const result = action(value, opts);\r\n if (result !== undefined) {\r\n opts[key] = result;\r\n }\r\n }\r\n }\r\n\r\n return opts;\r\n}\r\n\r\nfunction fromAttr(attr) {\r\n return _fromArray(utils.getUrlParameters(`?${attr || ''}`));\r\n}\r\n\r\nfunction fromURL(url) {\r\n return _fromArray(utils.getUrlParameters(url));\r\n}\r\n\r\nfunction _processOptsForURL(opts) {\r\n const str = [];\r\n let i = 0;\r\n utils.forInRecursive(opts, (value, key) => {\r\n str[i++] = encodeQueryComponentL2(key) + cL2Ass + encodeQueryComponentL2(value);\r\n });\r\n return str.join(cLSep);\r\n}\r\n\r\nfunction _processArgsForURL(args) {\r\n if (!_.isArray(args)) {\r\n return args;\r\n }\r\n if (args.length < 2) {\r\n return args[0];\r\n }\r\n return `${args[0]}${cOptsSep}${_processOptsForURL(args[1])}`;\r\n}\r\n\r\nfunction _processObjForURL(objOpts) {\r\n if (!objOpts || !objOpts.type) {\r\n return undefined;\r\n }\r\n let res = objOpts.type;\r\n if (_.isArray(objOpts.params) && objOpts.params.length > 0) {\r\n res += `,${objOpts.params.join(',')}`;\r\n }\r\n if (objOpts.opts) {\r\n res += cOptsSep + _processOptsForURL(objOpts.opts);\r\n }\r\n return res;\r\n}\r\n\r\nfunction toURL(opts) {\r\n const stringList = [];\r\n let idx = 0;\r\n\r\n function checkAndAdd(prefix, value) {\r\n if (value !== null && value !== undefined) {\r\n stringList[idx++] = encodeQueryComponentL1(prefix)\r\n + cL1Ass + encodeQueryComponentL1(value);\r\n }\r\n }\r\n\r\n function addReps(repList) {\r\n if (!repList) {\r\n return;\r\n }\r\n for (let i = 0, n = repList.length; i < n; ++i) {\r\n if (_.isEmpty(repList[i])) {\r\n continue;\r\n }\r\n checkAndAdd('r', i);\r\n checkAndAdd('s', repList[i].selector);\r\n checkAndAdd('m', _processArgsForURL(repList[i].mode));\r\n checkAndAdd('c', _processArgsForURL(repList[i].colorer));\r\n checkAndAdd('mt', _processArgsForURL(repList[i].material));\r\n }\r\n }\r\n\r\n function addObjects(objList) {\r\n if (!objList) {\r\n return;\r\n }\r\n for (let i = 0, n = objList.length; i < n; ++i) {\r\n checkAndAdd('o', _processObjForURL(objList[i]));\r\n }\r\n }\r\n\r\n checkAndAdd('l', opts.load);\r\n checkAndAdd('u', opts.unit);\r\n checkAndAdd('p', opts.preset);\r\n addReps(opts.reps);\r\n addObjects(opts._objects);\r\n\r\n checkAndAdd('v', opts.view);\r\n\r\n utils.forInRecursive(opts.settings, (value, key) => {\r\n // I heard these lines in the whispers of the Gods\r\n // Handle preset setting in reps\r\n if (key === 'preset') {\r\n return;\r\n }\r\n checkAndAdd(key, value);\r\n });\r\n\r\n let url = '';\r\n if (typeof window !== 'undefined') {\r\n const { location } = window;\r\n url = `${location.protocol}//${location.host}${location.pathname}`;\r\n }\r\n if (stringList.length > 0) {\r\n url += `?${stringList.join('&')}`;\r\n }\r\n\r\n return url;\r\n}\r\n\r\nfunction _processOptsForScript(opts) {\r\n const str = [];\r\n let i = 0;\r\n utils.forInRecursive(opts, (value, key) => {\r\n str[i++] = `${key}=${utils.enquoteString(value)}`;\r\n });\r\n return str.join(' ');\r\n}\r\n\r\nfunction _processArgsForScript(args) {\r\n if (!_.isArray(args)) {\r\n return args;\r\n }\r\n if (args.length < 2) {\r\n return args[0];\r\n }\r\n return `${args[0]} ${_processOptsForScript(args[1])}`;\r\n}\r\n\r\nfunction _processObjForScript(objOpts) {\r\n if (!objOpts || !objOpts.type) {\r\n return undefined;\r\n }\r\n let res = objOpts.type;\r\n if (_.isArray(objOpts.params) && objOpts.params.length > 0) {\r\n res += ` ${objOpts.params.map(utils.enquoteString).join(' ')}`;\r\n }\r\n if (objOpts.opts) {\r\n res += ` ${_processOptsForScript(objOpts.opts)}`;\r\n }\r\n return res;\r\n}\r\n\r\nfunction _processRepsForScript(rep, index) {\r\n const repString = [];\r\n let strIdx = 0;\r\n function localAdd(prefix, value) {\r\n if (value !== null && value !== undefined) {\r\n repString[strIdx++] = prefix + value;\r\n }\r\n }\r\n if (_.isEmpty(rep)) {\r\n return null;\r\n }\r\n localAdd('', index);\r\n localAdd('s=', utils.enquoteString(rep.selector));\r\n localAdd('m=', _processArgsForScript(rep.mode));\r\n localAdd('c=', _processArgsForScript(rep.colorer));\r\n localAdd('mt=', _processArgsForScript(rep.material));\r\n return repString.join(' ');\r\n}\r\n\r\nfunction toScript(opts) {\r\n const commandsList = [];\r\n let idx = 0;\r\n function checkAndAdd(command, value, saveQuotes) {\r\n if (value !== null && value !== undefined) {\r\n const quote = (typeof value === 'string' && saveQuotes) ? '\"' : '';\r\n commandsList[idx++] = `${command} ${quote}${value}${quote}`.trim();\r\n }\r\n }\r\n\r\n function addReps(repList) {\r\n if (!repList) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = repList.length; i < n; ++i) {\r\n checkAndAdd('rep', _processRepsForScript(repList[i], i));\r\n }\r\n }\r\n\r\n function addObjects(objList) {\r\n if (!objList) {\r\n return;\r\n }\r\n for (let i = 0, n = objList.length; i < n; ++i) {\r\n checkAndAdd('', _processObjForScript(objList[i]));\r\n }\r\n }\r\n\r\n checkAndAdd('set', 'autobuild false');\r\n checkAndAdd('load', opts.load, true);\r\n checkAndAdd('unit', opts.unit);\r\n checkAndAdd('preset', opts.preset);\r\n addReps(opts.reps);\r\n addObjects(opts._objects);\r\n\r\n utils.forInRecursive(opts.settings, (value, key) => {\r\n // I heard these lines in the whispers of the Gods\r\n // Handle preset setting in reps\r\n if (key === 'preset') {\r\n return;\r\n }\r\n checkAndAdd(`set ${key}`, value, true);\r\n });\r\n checkAndAdd('view', opts.view);\r\n checkAndAdd('set', 'autobuild true');\r\n return commandsList.join('\\n');\r\n}\r\n\r\nexport default {\r\n fromURL,\r\n fromAttr,\r\n adapters,\r\n toURL,\r\n toScript,\r\n};\r\n","/**\r\n * Atom measurements.\r\n *\r\n * @param {Residue} residue - (required) Residue containing the atom\r\n * @param {string} name - (required) Name, unique in the residue\r\n * @param {Element} type - (required) Chemical element reference\r\n * @param {THREE.Vector3} position - Registered coordinates\r\n *\r\n * @param {number} role - Role of atom inside monomer: Lead and wing are particularity interesting\r\n * @param {boolean} het - Non-standard residue indicator\r\n *\r\n * @param {number} serial - Serial number, unique in the model\r\n * @param {string} location - Alternative location indicator (usually space or A-Z)\r\n * @param {number} occupancy - Occupancy percentage, from 0 to 1\r\n * @param {number} temperature - Temperature\r\n * @param {number} charge - Charge\r\n *\r\n * @exports Atom\r\n * @constructor\r\n */\r\n\r\nclass Atom {\r\n constructor(residue, name, type, position, role, het, serial, location, occupancy, temperature, charge) {\r\n this.index = -1;\r\n this.residue = residue;\r\n this.name = name;\r\n this.element = type;\r\n this.position = position;\r\n this.role = role;\r\n this.mask = 1 | 0;\r\n\r\n this.het = het;\r\n\r\n this.serial = serial;\r\n this.location = (location || ' ').charCodeAt(0);\r\n this.occupancy = occupancy || 1;\r\n this.temperature = temperature;\r\n this.charge = charge;\r\n this.hydrogenCount = -1; // explicitly invalid\r\n this.radicalCount = 0;\r\n this.valence = -1; // explicitly invalid\r\n\r\n this.bonds = [];\r\n\r\n this.flags = 0x0000;\r\n if (type.name === 'H') {\r\n this.flags |= Atom.Flags.HYDROGEN;\r\n } else if (type.name === 'C') {\r\n this.flags |= Atom.Flags.CARBON;\r\n }\r\n }\r\n\r\n isHet() {\r\n return this.het;\r\n }\r\n\r\n isHydrogen() {\r\n return this.element.number === 1;\r\n }\r\n\r\n getVisualName() {\r\n const { name } = this;\r\n if (name.length > 0) {\r\n return name;\r\n }\r\n return this.element.name.trim();\r\n }\r\n\r\n forEachBond(process) {\r\n const { bonds } = this;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]);\r\n }\r\n }\r\n\r\n getFullName() {\r\n let name = '';\r\n if (this.residue !== null) {\r\n if (this.residue._chain !== null) {\r\n name += `${this.residue._chain.getName()}.`;\r\n }\r\n name += `${this.residue._sequence}.`;\r\n }\r\n name += this.name;\r\n return name;\r\n }\r\n\r\n /**\r\n * Enumeration of atom flag values.\r\n *\r\n * @enum {number}\r\n * @readonly\r\n */\r\n static Flags = {\r\n CARBON: 0x0001,\r\n // OXYGEN: 0x0002,\r\n // NITROGEN: 0x0004,\r\n HYDROGEN: 0x0008,\r\n /** Non-polar hydrogen (it is also a HYDROGEN) */\r\n NONPOLARH: 0x1008,\r\n };\r\n}\r\n\r\nexport default Atom;\r\n","class Element {\r\n constructor(number, name, fullName, weight, radius, radiusBonding, hValency) {\r\n this.number = number;\r\n this.name = name;\r\n this.fullName = fullName;\r\n this.weight = weight;\r\n this.radius = radius;\r\n this.radiusBonding = radiusBonding;\r\n this.hydrogenValency = hValency;\r\n }\r\n\r\n static Constants = {\r\n\r\n U1: 1,\r\n Lead: 2,\r\n U2: 3,\r\n Wing: 4,\r\n U18: 18,\r\n\r\n };\r\n\r\n static Role = {\r\n\r\n N: Element.Constants.U1,\r\n CA: Element.Constants.Lead,\r\n C: Element.Constants.U2,\r\n O: Element.Constants.Wing,\r\n SG: Element.Constants.U18,\r\n\r\n };\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\n static ByAtomicNumber = [\r\n\r\n null,\r\n new Element(1, 'H', 'Hydrogen', 1.008, 1.2, 0.23, [1]),\r\n new Element(2, 'HE', 'Helium', 4.003, 1.4, 0.93, [0]),\r\n new Element(3, 'LI', 'Lithium', 6.941, 1.82, 0.68, [1]),\r\n new Element(4, 'BE', 'Beryllium', 9.012, 1.7, 0.35, [2]),\r\n new Element(5, 'B', 'Boron', 10.81, 2.08, 0.83, [3]),\r\n new Element(6, 'C', 'Carbon', 12.011, 1.95, 0.68, [4]),\r\n new Element(7, 'N', 'Nitrogen', 14.007, 1.85, 0.68, [3, 5]),\r\n new Element(8, 'O', 'Oxygen', 15.999, 1.7, 0.68, [2, 4]),\r\n new Element(9, 'F', 'Fluorine', 18.998, 1.73, 0.64, [1]),\r\n new Element(10, 'NE', 'Neon', 20.18, 1.54, 1.12, [0]),\r\n new Element(11, 'NA', 'Sodium', 22.99, 2.27, 0.97, [1]),\r\n new Element(12, 'MG', 'Magnesium', 24.305, 1.73, 1.1, [2]),\r\n new Element(13, 'AL', 'Aluminum', 26.981, 2.05, 1.35, [3]),\r\n new Element(14, 'SI', 'Silicon', 28.086, 2.1, 1.2, [4]),\r\n new Element(15, 'P', 'Phosphorus', 30.974, 2.08, 0.75, [3, 5]),\r\n new Element(16, 'S', 'Sulfur', 32.07, 2, 1.02, [2, 4, 6]),\r\n new Element(17, 'CL', 'Chlorine', 35.453, 1.97, 0.99, [1, 3, 5, 7]),\r\n new Element(18, 'AR', 'Argon', 39.948, 1.88, 1.57, [0]),\r\n new Element(19, 'K', 'Potassium', 39.1, 2.75, 1.33, [1]),\r\n new Element(20, 'CA', 'Calcium', 40.08, 1.973, 0.99, [2]),\r\n new Element(21, 'SC', 'Scandium', 44.956, 1.7, 1.44, [0]),\r\n new Element(22, 'TI', 'Titanium', 47.88, 1.7, 1.47, [0]),\r\n new Element(23, 'V', 'Vanadium', 50.941, 1.7, 1.33, [0]),\r\n new Element(24, 'CR', 'Chromium', 52, 1.7, 1.35, [0]),\r\n new Element(25, 'MN', 'Manganese', 54.938, 1.7, 1.35, [0]),\r\n new Element(26, 'FE', 'Iron', 55.847, 1.7, 1.34, [0]),\r\n new Element(27, 'CO', 'Cobalt', 58.93, 1.7, 1.33, [0]),\r\n new Element(28, 'NI', 'Nickel', 58.69, 1.63, 1.5, [0]),\r\n new Element(29, 'CU', 'Copper', 63.55, 1.4, 1.52, [0]),\r\n new Element(30, 'ZN', 'Zinc', 65.39, 1.39, 1.45, [0]),\r\n new Element(31, 'GA', 'Gallium', 69.72, 1.87, 1.22, [3]),\r\n new Element(32, 'GE', 'Germanium', 72.61, 1.7, 1.17, [4]),\r\n new Element(33, 'AS', 'Arsenic', 74.92, 1.85, 1.21, [3, 5]),\r\n new Element(34, 'SE', 'Selenium', 78.96, 1.9, 1.22, [2, 4, 6]),\r\n new Element(35, 'BR', 'Bromine', 79.9, 2.1, 1.21, [1, 3, 5, 7]),\r\n new Element(36, 'KR', 'Krypton', 83.8, 2.02, 1.91, [0]),\r\n new Element(37, 'RB', 'Rubidium', 85.47, 1.7, 1.47, [1]),\r\n new Element(38, 'SR', 'Strontium', 87.62, 1.7, 1.12, [2]),\r\n new Element(39, 'Y', 'Yttrium', 88.91, 1.7, 1.78, [0]),\r\n new Element(40, 'ZR', 'Zirconium', 91.22, 1.7, 1.56, [0]),\r\n new Element(41, 'NB', 'Niobium', 92.91, 1.7, 1.48, [0]),\r\n new Element(42, 'MO', 'Molybdenum', 95.94, 1.7, 1.47, [0]),\r\n new Element(43, 'TC', 'Technetium', 98.91, 1.7, 1.35, [0]),\r\n new Element(44, 'RU', 'Ruthenium', 101.07, 1.7, 1.4, [0]),\r\n new Element(45, 'RH', 'Rhodium', 102.91, 1.7, 1.45, [0]),\r\n new Element(46, 'PD', 'Palladium', 106.42, 1.63, 1.5, [0]),\r\n new Element(47, 'AG', 'Silver', 107.87, 1.72, 1.59, [0]),\r\n new Element(48, 'CD', 'Cadmium', 112.41, 1.58, 1.69, [0]),\r\n new Element(49, 'IN', 'Indium', 114.82, 1.93, 1.63, [3]),\r\n new Element(50, 'SN', 'Tin', 118.71, 2.17, 1.46, [2, 4]),\r\n new Element(51, 'SB', 'Antimony', 121.75, 2.2, 1.46, [3, 5]),\r\n new Element(52, 'TE', 'Tellurium', 127.6, 2.06, 1.47, [2, 4, 6]),\r\n new Element(53, 'I', 'Iodine', 126.91, 2.15, 1.4, [1, 3, 5, 7]),\r\n new Element(54, 'XE', 'Xenon', 131.29, 2.16, 1.98, [0]),\r\n new Element(55, 'CS', 'Cesium', 132.91, 1.7, 1.67, [1]),\r\n new Element(56, 'BA', 'Barium', 137.33, 1.7, 1.34, [2]),\r\n new Element(57, 'LA', 'Lanthanum', 138.91, 1.7, 1.87, [0]),\r\n new Element(58, 'CE', 'Cerium', 140.12, 1.7, 1.83, [0]),\r\n new Element(59, 'PR', 'Praseodymium', 140.91, 1.7, 1.82, [0]),\r\n new Element(60, 'ND', 'Neodymium', 144.24, 1.7, 1.81, [0]),\r\n new Element(61, 'PM', 'Promethium', 144.9, 1.7, 1.8, [0]),\r\n new Element(62, 'SM', 'Samarium', 150.36, 1.7, 1.8, [0]),\r\n new Element(63, 'EU', 'Europium', 151.96, 1.7, 1.99, [0]),\r\n new Element(64, 'GD', 'Gadolinium', 157.25, 1.7, 1.79, [0]),\r\n new Element(65, 'TB', 'Terbium', 158.93, 1.7, 1.76, [0]),\r\n new Element(66, 'DY', 'Dysprosium', 162.5, 1.7, 1.75, [0]),\r\n new Element(67, 'HO', 'Holmium', 164.93, 1.7, 1.74, [0]),\r\n new Element(68, 'ER', 'Erbium', 167.26, 1.7, 1.73, [0]),\r\n new Element(69, 'TM', 'Thulium', 168.93, 1.7, 1.72, [0]),\r\n new Element(70, 'YB', 'Ytterbium', 173.04, 1.7, 1.94, [0]),\r\n new Element(71, 'LU', 'Lutetium', 174.97, 1.7, 1.72, [0]),\r\n new Element(72, 'HF', 'Hafnium', 178.49, 1.7, 1.57, [0]),\r\n new Element(73, 'TA', 'Tantalum', 180.95, 1.7, 1.43, [0]),\r\n new Element(74, 'W', 'Tungsten', 183.85, 1.7, 1.37, [0]),\r\n new Element(75, 'RE', 'Rhenium', 186.21, 1.7, 1.35, [0]),\r\n new Element(76, 'OS', 'Osmium', 190.2, 1.7, 1.37, [0]),\r\n new Element(77, 'IR', 'Iridium', 192.22, 1.7, 1.32, [0]),\r\n new Element(78, 'PT', 'Platinum', 195.08, 1.72, 1.5, [0]),\r\n new Element(79, 'AU', 'Gold', 196.97, 1.66, 1.5, [0]),\r\n new Element(80, 'HG', 'Mercury', 200.59, 1.55, 1.7, [0]),\r\n new Element(81, 'TL', 'Thallium', 204.38, 1.96, 1.55, [1, 3]),\r\n new Element(82, 'PB', 'Lead', 207.2, 2.02, 1.54, [2, 4]),\r\n new Element(83, 'BI', 'Bismuth', 208.98, 1.7, 1.54, [3, 5]),\r\n new Element(84, 'PO', 'Polonium', 210, 1.7, 1.68, [2, 4, 6]),\r\n new Element(85, 'AT', 'Astatine', 210, 1.7, 1.7, [1, 3, 5, 7]),\r\n new Element(86, 'RN', 'Radon', 222, 1.7, 2.4, [0]),\r\n new Element(87, 'FR', 'Francium', 223, 1.7, 2, [1]),\r\n new Element(88, 'RA', 'Radium', 226.03, 1.7, 1.9, [2]),\r\n new Element(89, 'AC', 'Actinium', 227.03, 1.7, 1.88, [0]),\r\n new Element(90, 'TH', 'Thorium', 232.04, 1.7, 1.79, [0]),\r\n new Element(91, 'PA', 'Protactinium', 231.04, 1.7, 1.61, [0]),\r\n new Element(92, 'U', 'Uranium', 238.03, 1.86, 1.58, [0]),\r\n new Element(93, 'NP', 'Neptunium', 237.05, 1.7, 1.55, [0]),\r\n new Element(94, 'PU', 'Plutonium', 239.1, 1.7, 1.53, [0]),\r\n new Element(95, 'AM', 'Americium', 243.1, 1.7, 1.51, [0]),\r\n new Element(96, 'CM', 'Curium', 247.1, 1.7, 1.5, [0]),\r\n new Element(97, 'BK', 'Berkelium', 247.1, 1.7, 1.5, [0]),\r\n new Element(98, 'CF', 'Californium', 252.1, 1.7, 1.5, [0]),\r\n new Element(99, 'ES', 'Einsteinium', 252.1, 1.7, 1.5, [0]),\r\n new Element(100, 'FM', 'Fermium', 257.1, 1.7, 1.5, [0]),\r\n new Element(101, 'MD', 'Mendelevium', 256.1, 1.7, 1.5, [0]),\r\n new Element(102, 'NO', 'Nobelium', 259.1, 1.7, 1.5, [0]),\r\n new Element(103, 'LR', 'Lawrencium', 260.1, 1.7, 1.5, [0]),\r\n new Element(104, 'RF', 'Rutherfordium', 261, 1.7, 1.6, [0]),\r\n new Element(105, 'DB', 'Dubnium', 262, 1.7, 1.6, [0]),\r\n new Element(106, 'SG', 'Seaborgium', 263, 1.7, 1.6, [0]),\r\n new Element(107, 'BH', 'Bohrium', 262, 1.7, 1.6, [0]),\r\n new Element(108, 'HS', 'Hassium', 265, 1.7, 1.6, [0]),\r\n new Element(109, 'MT', 'Meitnerium', 268, 1.7, 1.6, [0]),\r\n\r\n ];\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\n static ByName = {\r\n // Duplicate atomic numbers (isotopes)\r\n\r\n D: new Element(1, 'D', 'Deuterium', 2.014, 1.2, 0.23, [1]),\r\n T: new Element(1, 'T', 'Tritium', 3.016, 1.2, 0.23, [1]),\r\n\r\n // All regular elements will be added later, automatically\r\n };\r\n}\r\n\r\n(function () {\r\n const byAtomicNumber = Element.ByAtomicNumber;\r\n const byName = Element.ByName;\r\n for (let i = 0, n = byAtomicNumber.length; i < n; ++i) {\r\n const element = byAtomicNumber[i];\r\n if (element) {\r\n byName[element.name] = element;\r\n }\r\n }\r\n}());\r\n\r\n// find atom type by chemical element (or create if missing)\r\nElement.getByName = function (element) {\r\n let type = Element.ByName[element];\r\n if (!type) {\r\n type = Element.ByName[element] = new Element(0, element, 'Unknown', 0, 1.0, 0.01, [0]);\r\n }\r\n return type;\r\n};\r\n\r\nexport default Element;\r\n","const cBondTypes = {\r\n /** Was generated manually */\r\n UNKNOWN: 0,\r\n /** Simple covalent bond */\r\n COVALENT: 1,\r\n /** Aromatic bond */\r\n AROMATIC: 2,\r\n};\r\n\r\nfunction getAtomPos(atom) {\r\n return atom.position;\r\n}\r\n\r\n/**\r\n * Bond between atoms.\r\n *\r\n * @param {Atom} left - The first atom.\r\n * @param {Atom} right - The second atom.\r\n * @param {number} order - Order of current bond.\r\n * @param {number} type - Bond type.\r\n * @param {boolean} fixed - Indicator of a pre-specified connection (in contrast with guessed one).\r\n *\r\n * @exports Bond\r\n * @constructor\r\n */\r\nclass Bond {\r\n constructor(left, right, order, type, fixed) {\r\n this._left = left;\r\n this._right = right;\r\n this._fixed = fixed;\r\n this._index = -1;\r\n if (left > right) {\r\n throw new Error('In a bond atom indices must be in increasing order');\r\n }\r\n this._order = order;\r\n this._type = type;\r\n }\r\n\r\n getLeft() {\r\n return this._left;\r\n }\r\n\r\n getRight() {\r\n return this._right;\r\n }\r\n\r\n getOrder() {\r\n return this._order;\r\n }\r\n\r\n calcLength() {\r\n return this._left.position.distanceTo(this._right.position);\r\n }\r\n\r\n _forEachNeighbour(currAtom, process) {\r\n const { bonds } = currAtom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]._left !== currAtom ? bonds[i]._left : bonds[i]._right);\r\n }\r\n }\r\n\r\n forEachLevelOne(process) {\r\n const left = this._left;\r\n const right = this._right;\r\n this._forEachNeighbour(left, (atom) => {\r\n if (atom === right) {\r\n return;\r\n }\r\n process(atom);\r\n });\r\n this._forEachNeighbour(right, (atom) => {\r\n if (atom === left) {\r\n return;\r\n }\r\n process(atom);\r\n });\r\n }\r\n\r\n forEachLevelTwo(process) {\r\n // TODO refactor this piece of an art?\r\n const left = this._left;\r\n const right = this._right;\r\n const self = this;\r\n self._forEachNeighbour(left, (atom) => {\r\n if (atom === right) {\r\n return;\r\n }\r\n self._forEachNeighbour(atom, (l2Atom) => {\r\n if (l2Atom === left) {\r\n return;\r\n }\r\n process(l2Atom);\r\n });\r\n });\r\n self._forEachNeighbour(right, (atom) => {\r\n if (atom === left) {\r\n return;\r\n }\r\n self._forEachNeighbour(atom, (l2Atom) => {\r\n if (l2Atom === right) {\r\n return;\r\n }\r\n process(l2Atom);\r\n });\r\n });\r\n }\r\n\r\n _fixDir(refPoint, currDir, posGetter) {\r\n // count atoms to the right and to the left of the current plane\r\n let rightCount = 0;\r\n let leftCount = 0;\r\n const tmpVec = refPoint.clone();\r\n function checkDir(atom) {\r\n tmpVec.copy(posGetter(atom));\r\n tmpVec.sub(refPoint);\r\n const dotProd = currDir.dot(tmpVec);\r\n if (dotProd > 0) {\r\n ++rightCount;\r\n } else {\r\n ++leftCount;\r\n }\r\n }\r\n function checkCarbon(atom) {\r\n if (atom.element.name === 'C') {\r\n checkDir(atom);\r\n }\r\n }\r\n // count all atoms to the left and right of our plane, start from level 1 and carbons\r\n const stages = [\r\n [this.forEachLevelOne, checkCarbon],\r\n [this.forEachLevelOne, checkDir],\r\n [this.forEachLevelTwo, checkCarbon],\r\n [this.forEachLevelTwo, checkDir],\r\n ];\r\n\r\n for (let stageId = 0; stageId < stages.length; ++stageId) {\r\n stages[stageId][0].call(this, stages[stageId][1]);\r\n if (leftCount > rightCount) {\r\n return currDir.multiplyScalar(-1);\r\n }\r\n if (leftCount < rightCount) {\r\n return currDir;\r\n }\r\n }\r\n return currDir;\r\n }\r\n\r\n calcNormalDir(posGetter) {\r\n const left = this._left;\r\n const right = this._right;\r\n let first = left;\r\n let second = right;\r\n posGetter = posGetter === undefined ? getAtomPos : posGetter;\r\n if (left.bonds.length > right.bonds.length) {\r\n first = right;\r\n second = left;\r\n }\r\n let third = first;\r\n let maxNeibs = 0;\r\n const { bonds } = second;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n let another = bonds[i]._left;\r\n if (bonds[i]._left === second) {\r\n another = bonds[i]._right;\r\n }\r\n if (another.bonds.length > maxNeibs && another !== first) {\r\n third = another;\r\n maxNeibs = another.bonds.length;\r\n }\r\n }\r\n const secondPos = posGetter(second);\r\n const firstV = posGetter(first).clone().sub(secondPos);\r\n const secondV = posGetter(third).clone().sub(secondPos);\r\n secondV.crossVectors(firstV, secondV);\r\n if (secondV.lengthSq() < 0.0001) {\r\n secondV.set(0, 1, 0);\r\n }\r\n firstV.normalize();\r\n secondV.normalize();\r\n firstV.crossVectors(secondV, firstV);\r\n if (firstV.lengthSq() < 0.0001) {\r\n firstV.set(0, 1, 0);\r\n }\r\n firstV.normalize();\r\n return this._fixDir(secondPos, firstV, posGetter);\r\n }\r\n\r\n static BondType = cBondTypes;\r\n}\r\n\r\nBond.prototype.BondType = cBondTypes;\r\n\r\nexport default Bond;\r\n","import * as THREE from 'three';\r\nimport Atom from './Atom';\r\nimport Element from './Element';\r\n\r\nconst cNucleicControlNames = ['C3\\'', 'C3*', 'P', 'H5T', 'H3T'];\r\nconst cNucleicWing1Names = ['OP1', 'O1P'];\r\nconst cNucleicWing2Names = ['OP2', 'O2P'];\r\n\r\nconst cCylinderSource = ['C3\\'', 'C3*', 'C1', 'C1\\'', 'C1*', 'P'];\r\nconst cCylinderTarget = [{\r\n types: ['A', 'DA', 'G', 'DG'],\r\n atoms: ['N1'],\r\n}, {\r\n types: ['C', 'DC'],\r\n atoms: ['N3'],\r\n}, {\r\n types: ['T', 'DT', 'U', 'DU'],\r\n atoms: ['O4'],\r\n}];\r\n\r\n/**\r\n * Residue instance.\r\n *\r\n * @param {Chain} chain - Chain this residue belongs to.\r\n * @param {ResidueType} type - Generic residue instance type.\r\n * @param {number} sequence - Sequence ID.\r\n * @param {string} icode - One character insertion code (usually space or A-Z).\r\n *\r\n * @exports Residue\r\n * @constructor\r\n */\r\nclass Residue {\r\n constructor(chain, type, sequence, icode) {\r\n this._chain = chain;\r\n this._component = null;\r\n this._type = type;\r\n this._sequence = sequence;\r\n this._icode = icode;\r\n this._mask = 1 | 0;\r\n this._index = -1;\r\n\r\n this._atoms = [];\r\n this._secondary = null;\r\n this._firstAtom = null;\r\n this._leadAtom = null;\r\n this._wingAtom = null;\r\n this._lastAtom = null;\r\n this._controlPoint = null;\r\n this._midPoint = null;\r\n this._wingVector = null;\r\n this._cylinders = null;\r\n this._isValid = true;\r\n this._het = false;\r\n this._molecule = null;\r\n this.temperature = null;\r\n this.occupancy = null;\r\n }\r\n\r\n // Getters and setters\r\n getChain() {\r\n return this._chain;\r\n }\r\n\r\n getMolecule() {\r\n return this._molecule;\r\n }\r\n\r\n getType() {\r\n return this._type;\r\n }\r\n\r\n getSequence() {\r\n return this._sequence;\r\n }\r\n\r\n getSecondary() {\r\n return this._secondary;\r\n }\r\n\r\n getICode() {\r\n return this._icode;\r\n }\r\n\r\n // Other methods\r\n\r\n addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge) {\r\n const atom = new Atom(this, name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n const complex = this._chain.getComplex();\r\n complex.addAtom(atom);\r\n this._atoms.push(atom);\r\n this._het = this._het || het;\r\n return atom;\r\n }\r\n\r\n getAtomCount() {\r\n return this._atoms.length;\r\n }\r\n\r\n forEachAtom(process) {\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n if (process(atoms[i])) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n _findAtomByName(name) {\r\n let res = null;\r\n this.forEachAtom((atom) => {\r\n if (atom.name === name) {\r\n res = atom;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return res;\r\n }\r\n\r\n _findFirstAtomInList(names) {\r\n let res = null;\r\n for (let i = 0; i < names.length; ++i) {\r\n res = this._findAtomByName(names[i]);\r\n if (res !== null) {\r\n return res;\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n mask &= atoms[i].mask;\r\n }\r\n this._mask = mask;\r\n }\r\n\r\n getCylinderTargetList() {\r\n const type = this._type._name;\r\n for (let i = 0, n = cCylinderTarget.length; i < n; ++i) {\r\n for (let j = 0, m = cCylinderTarget[i].types.length; j < m; ++j) {\r\n if (type === cCylinderTarget[i].types[j]) {\r\n return cCylinderTarget[i].atoms;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n _detectLeadWing(dst, next, getAtomPosition) {\r\n const leadAtom = this._findFirstAtomInList(cNucleicControlNames);\r\n let wingStart = this._findFirstAtomInList(cNucleicWing1Names);\r\n let wingEnd = this._findFirstAtomInList(cNucleicWing2Names);\r\n\r\n if (wingStart === null && next !== null) {\r\n wingStart = next._findFirstAtomInList(cNucleicWing1Names);\r\n }\r\n\r\n if (wingEnd === null && next !== null) {\r\n wingEnd = next._findFirstAtomInList(cNucleicWing2Names);\r\n }\r\n\r\n if (leadAtom === null || wingStart === null || wingEnd === null) {\r\n return;\r\n }\r\n\r\n dst._leadAtom = leadAtom;\r\n dst._controlPoint = getAtomPosition(leadAtom);\r\n dst._wingVector = getAtomPosition(wingEnd).clone().sub(getAtomPosition(wingStart));\r\n dst._isValid = true;\r\n\r\n const cylSource = this._findFirstAtomInList(cCylinderSource);\r\n const targetList = this.getCylinderTargetList();\r\n const cylTarget = targetList !== null ? this._findFirstAtomInList(targetList) : null;\r\n if (cylSource === null || cylTarget === null) {\r\n return;\r\n }\r\n dst._cylinders = [getAtomPosition(cylSource), getAtomPosition(cylTarget)];\r\n }\r\n\r\n calcWing(prevLeadPos, currLeadPos, prevWingPos, prevWing) {\r\n const vectorA = currLeadPos.clone().sub(prevLeadPos);\r\n const vectorB = prevLeadPos.clone().sub(prevWingPos);\r\n vectorB.crossVectors(vectorA, vectorB);\r\n vectorB.crossVectors(vectorA, vectorB).normalize();\r\n if (prevWing !== null && prevWing.length() > 0.0001) {\r\n const needToNegate = vectorB.length() > 0.0001 && Math.abs(prevWing.angleTo(vectorB)) > Math.PI / 2;\r\n if (needToNegate) {\r\n vectorB.negate();\r\n }\r\n }\r\n return vectorB;\r\n }\r\n\r\n _innerFinalize(prevRes, prev, nextRes, dst, chainAsNucleic, getAtomPosition) {\r\n const bFirstInChain = prev === null;\r\n\r\n const lp = getAtomPosition(this._leadAtom);\r\n const currLeadPos = new THREE.Vector3(lp.x, lp.y, lp.z);\r\n if (chainAsNucleic) {\r\n this._detectLeadWing(dst, nextRes, getAtomPosition);\r\n return;\r\n }\r\n\r\n if (bFirstInChain) { // for first one in chain\r\n dst._midPoint = getAtomPosition(this._firstAtom).clone();\r\n } else {\r\n const prevLeadPos = prev._controlPoint; // lead point of previous monomer\r\n dst._midPoint = prevLeadPos.clone().lerp(currLeadPos, 0.5);\r\n dst._wingVector = this.calcWing(prevLeadPos, currLeadPos, getAtomPosition(prevRes._wingAtom), prev._wingVector);\r\n }\r\n dst._controlPoint = currLeadPos;\r\n }\r\n\r\n _finalize2(prev, next, asNucleic) {\r\n // Should be called AFTER first finalize\r\n this._innerFinalize(prev, prev, next, this, asNucleic, (atom) => atom.position);\r\n }\r\n\r\n isConnected(anotherResidue) {\r\n if (this._chain !== anotherResidue._chain) {\r\n return false;\r\n }\r\n if (this === anotherResidue) {\r\n return true;\r\n }\r\n let res = false;\r\n this.forEachAtom((atom) => {\r\n const { bonds } = atom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n const bond = bonds[i];\r\n if (bond._left.residue === anotherResidue || bond._right.residue === anotherResidue) {\r\n res = true;\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n return res;\r\n }\r\n\r\n _finalize() {\r\n const self = this;\r\n [this._firstAtom] = this._atoms;\r\n this._lastAtom = this._atoms[this._atoms.length - 1];\r\n\r\n this._leadAtom = null;\r\n this._wingAtom = null;\r\n\r\n let tempCount = 0;\r\n let temperature = 0; // average temperature\r\n let occupCount = 0;\r\n let occupancy = 0; // average occupancy\r\n this.forEachAtom((a) => {\r\n if (self._leadAtom === null) {\r\n if (a.role === Element.Constants.Lead) {\r\n self._leadAtom = a;\r\n }\r\n }\r\n if (self._wingAtom === null) {\r\n if (a.role === Element.Constants.Wing) {\r\n self._wingAtom = a;\r\n }\r\n }\r\n if (a.temperature) {\r\n temperature += a.temperature;\r\n tempCount++;\r\n }\r\n if (a.occupancy) {\r\n occupancy += a.occupancy;\r\n occupCount++;\r\n }\r\n return (self._leadAtom !== null && self._wingAtom !== null);\r\n });\r\n\r\n if (tempCount > 0) {\r\n this.temperature = temperature / tempCount;\r\n }\r\n if (occupCount > 0) {\r\n this.occupancy = occupancy / occupCount;\r\n }\r\n\r\n // Still try to make monomer look valid\r\n if (this._leadAtom === null || this._wingAtom === null) {\r\n this._isValid = false;\r\n }\r\n if (this._leadAtom === null) {\r\n this._leadAtom = this._firstAtom;\r\n }\r\n if (this._wingAtom === null) {\r\n this._wingAtom = this._lastAtom;\r\n }\r\n }\r\n}\r\n\r\nexport default Residue;\r\n","/**\r\n * Residue type.\r\n *\r\n * Predefined acid or created with HET, HETNAM, etc.\r\n *\r\n * @param {string} name - Short name, either standard (ALA, MET, etc.) or non-standard one.\r\n * @param {string} fullName - Full residue name.\r\n * @param {string} letterCode - 1-letter symbol.\r\n *\r\n * @exports ResidueType\r\n * @constructor\r\n */\r\nclass ResidueType {\r\n constructor(name, fullName, letterCode) {\r\n this._name = name;\r\n this._fullName = fullName;\r\n this.letterCode = letterCode;\r\n this.flags = 0x0000;\r\n }\r\n\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n // DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\n static StandardTypes = {\r\n\r\n ALA: new ResidueType('ALA', 'Alanine', 'A'),\r\n ARG: new ResidueType('ARG', 'Arginine', 'R'),\r\n ASN: new ResidueType('ASN', 'Asparagine', 'N'),\r\n ASP: new ResidueType('ASP', 'Aspartic Acid', 'D'),\r\n CYS: new ResidueType('CYS', 'Cysteine', 'C'),\r\n GLN: new ResidueType('GLN', 'Glutamine', 'Q'),\r\n GLU: new ResidueType('GLU', 'Glutamic Acid', 'E'),\r\n GLY: new ResidueType('GLY', 'Glycine', 'G'),\r\n HIS: new ResidueType('HIS', 'Histidine', 'H'),\r\n ILE: new ResidueType('ILE', 'Isoleucine', 'I'),\r\n LEU: new ResidueType('LEU', 'Leucine', 'L'),\r\n LYS: new ResidueType('LYS', 'Lysine', 'K'),\r\n MET: new ResidueType('MET', 'Methionine', 'M'),\r\n PHE: new ResidueType('PHE', 'Phenylalanine', 'F'),\r\n PRO: new ResidueType('PRO', 'Proline', 'P'),\r\n PYL: new ResidueType('PYL', 'Pyrrolysine', 'O'),\r\n SEC: new ResidueType('SEC', 'Selenocysteine', 'U'),\r\n SER: new ResidueType('SER', 'Serine', 'S'),\r\n THR: new ResidueType('THR', 'Threonine', 'T'),\r\n TRP: new ResidueType('TRP', 'Tryptophan', 'W'),\r\n TYR: new ResidueType('TYR', 'Tyrosine', 'Y'),\r\n VAL: new ResidueType('VAL', 'Valine', 'V'),\r\n A: new ResidueType('A', 'Adenine', 'A'),\r\n C: new ResidueType('C', 'Cytosine', 'C'),\r\n G: new ResidueType('G', 'Guanine', 'G'),\r\n I: new ResidueType('I', 'Inosine', 'I'),\r\n T: new ResidueType('T', 'Thymine', 'T'),\r\n U: new ResidueType('U', 'Uracil', 'U'),\r\n DA: new ResidueType('DA', 'Adenine', 'A'),\r\n DC: new ResidueType('DC', 'Cytosine', 'C'),\r\n DG: new ResidueType('DG', 'Guanine', 'G'),\r\n DI: new ResidueType('DI', 'Inosine', 'I'),\r\n DT: new ResidueType('DT', 'Thymine', 'T'),\r\n DU: new ResidueType('DU', 'Uracil', 'U'),\r\n '+A': new ResidueType('+A', 'Adenine', 'A'),\r\n '+C': new ResidueType('+C', 'Cytosine', 'C'),\r\n '+G': new ResidueType('+G', 'Guanine', 'G'),\r\n '+I': new ResidueType('+I', 'Inosine', 'I'),\r\n '+T': new ResidueType('+T', 'Thymine', 'T'),\r\n '+U': new ResidueType('+U', 'Uracil', 'U'),\r\n WAT: new ResidueType('WAT', 'Water', ''),\r\n H2O: new ResidueType('H2O', 'Water', ''),\r\n HOH: new ResidueType('HOH', 'Water', ''),\r\n DOD: new ResidueType('DOD', 'Water', ''),\r\n UNK: new ResidueType('UNK', 'Unknown', ''),\r\n UNL: new ResidueType('UNL', 'Unknown Ligand', ''),\r\n\r\n };\r\n\r\n /**\r\n * Enumeration of residue flag values.\r\n *\r\n * @enum {number}\r\n * @readonly\r\n */\r\n static Flags = {\r\n // Amino acids\r\n /** Amino acid residue */\r\n PROTEIN: 0x0001,\r\n /** Basic amino acid residue */\r\n BASIC: 0x0002,\r\n /** Acidic amino acid residue */\r\n ACIDIC: 0x0004,\r\n /** Polar uncharged side chain amino acid residue */\r\n POLAR: 0x0008,\r\n /** Non-polar hydrophobic side chain amino acid residue */\r\n NONPOLAR: 0x0010,\r\n /** Aromatic amino acid residue */\r\n AROMATIC: 0x0020,\r\n\r\n // Nucleic acids\r\n\r\n /** Nucleic residue */\r\n NUCLEIC: 0x0100,\r\n /** Purine nucleic residue */\r\n PURINE: 0x0200,\r\n /** Pyrimidine nucleic residue */\r\n PYRIMIDINE: 0x0400,\r\n /** DNA */\r\n DNA: 0x0800,\r\n /** RNA */\r\n RNA: 0x1000,\r\n\r\n /** Water */\r\n WATER: 0x10000,\r\n };\r\n}\r\n\r\n// Flag combinations\r\nfunction _addFlag(flag, list) {\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n const res = ResidueType.StandardTypes[list[i]];\r\n if (res) {\r\n res.flags |= flag;\r\n }\r\n }\r\n}\r\n\r\nconst { Flags } = ResidueType;\r\n_addFlag(Flags.WATER, ['WAT', 'H2O', 'HOH', 'DOD']);\r\n\r\n_addFlag(Flags.PROTEIN, [\r\n 'ALA', 'ARG', 'ASN', 'ASP', 'CYS', 'GLY', 'GLU', 'GLN', 'HIS', 'ILE',\r\n 'LEU', 'LYS', 'MET', 'PHE', 'PRO', 'PYL', 'SEC', 'SER', 'THR', 'TRP',\r\n 'TYR', 'VAL',\r\n]);\r\n_addFlag(Flags.BASIC, ['ARG', 'HIS', 'LYS']);\r\n_addFlag(Flags.ACIDIC, ['ASP', 'GLU']);\r\n_addFlag(Flags.POLAR, ['ASN', 'CYS', 'GLN', 'SER', 'THR', 'TYR']);\r\n_addFlag(Flags.NONPOLAR, ['ALA', 'ILE', 'LEU', 'MET', 'PHE', 'PRO', 'TRP', 'VAL', 'GLY']);\r\n_addFlag(Flags.AROMATIC, ['PHE', 'TRP', 'TYR']);\r\n\r\n_addFlag(Flags.NUCLEIC, [\r\n 'A', 'G', 'I', 'DA', 'DG', 'DI', '+A', '+G', '+I',\r\n 'C', 'T', 'U', 'DC', 'DT', 'DU', '+C', '+T', '+U',\r\n]);\r\n_addFlag(Flags.PURINE, ['A', 'G', 'I', 'DA', 'DG', 'DI', '+A', '+G', '+I']);\r\n_addFlag(Flags.PYRIMIDINE, ['C', 'T', 'U', 'DC', 'DT', 'DU', '+C', '+T', '+U']);\r\n_addFlag(Flags.DNA, ['DA', 'DG', 'DI', 'DC', 'DT', 'DU']);\r\n_addFlag(Flags.RNA, ['A', 'G', 'I', 'C', 'T', 'U']);\r\n// Table of kdHydrophobicity\r\nconst hydro = {\r\n ILE: 4.5,\r\n VAL: 4.2,\r\n LEU: 3.8,\r\n PHE: 2.8,\r\n CYS: 2.5,\r\n MET: 1.9,\r\n ALA: 1.8,\r\n GLY: -0.4,\r\n THR: -0.7,\r\n SER: -0.8,\r\n TRP: -0.9,\r\n TYR: -1.3,\r\n PRO: -1.6,\r\n HIS: -3.2,\r\n GLU: -3.5,\r\n GLN: -3.5,\r\n ASP: -3.5,\r\n ASN: -3.5,\r\n LYS: -3.9,\r\n ARG: -4.5,\r\n};\r\n\r\nfunction _addParam(param, list) {\r\n const keys = Object.keys(list);\r\n for (let i = 0, n = keys.length; i < n; ++i) {\r\n const key = keys[i];\r\n const value = list[key];\r\n ResidueType.StandardTypes[key][param] = value;\r\n }\r\n}\r\n\r\n_addParam('hydrophobicity', hydro);\r\n\r\nexport default ResidueType;\r\n","import * as THREE from 'three';\r\nimport Residue from './Residue';\r\nimport ResidueType from './ResidueType';\r\n\r\n/**\r\n * Residues in chain are either amino acid either nucleic acid (and water)\r\n * There might be some modified/mutated residues, which type could not be determined by their name (nucleic or amino); In this\r\n * case firstly program definites the chain type (by well-known residues) and then definites modified/mutated residues\r\n */\r\nconst ChainType = {\r\n UNKNOWN: 0,\r\n PROTEIN: 1,\r\n NUCLEIC: 2,\r\n};\r\n\r\n/**\r\n * Residue chain.\r\n *\r\n * @param {Complex} complex - Molecular complex this chain belongs to.\r\n * @param {string} name - One character identifier (usually space, A-Z, 0-9, or a-z).\r\n *\r\n * @exports Chain\r\n * @constructor\r\n */\r\nclass Chain {\r\n constructor(complex, name) {\r\n this._complex = complex;\r\n this._name = name;\r\n this._mask = 1 | 0;\r\n this._index = -1;\r\n this._residues = [];\r\n\r\n this.minSequence = Number.POSITIVE_INFINITY;\r\n this.maxSequence = Number.NEGATIVE_INFINITY;\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getResidues() {\r\n return this._residues;\r\n }\r\n\r\n _determineType() {\r\n const residues = this._residues;\r\n\r\n const { PROTEIN, NUCLEIC } = ResidueType.Flags;\r\n\r\n this.type = ChainType.UNKNOWN;\r\n\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const { flags } = residues[i]._type;\r\n\r\n if ((flags & NUCLEIC) !== 0) {\r\n this.type = ChainType.NUCLEIC;\r\n break;\r\n } else if ((flags & PROTEIN) !== 0) {\r\n this.type = ChainType.PROTEIN;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Finds thre residue with specified sequence number and inserion code\r\n * @param {Number} seqNum sequence number\r\n * @param {string} iCode insertion code\r\n * @returns {*} Residue or null if not found\r\n */\r\n findResidue(seqNum, iCode) {\r\n const residues = this._residues;\r\n\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const res = residues[i];\r\n if (res._sequence === seqNum && res._icode === iCode) {\r\n return [res, i];\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _finalize() {\r\n this._determineType();\r\n\r\n const residues = this._residues;\r\n\r\n let prev = null;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n const next = (i + 1 < n) ? residues[i + 1] : null;\r\n const curr = residues[i];\r\n // TODO: skip invalid residues\r\n if (1 /* curr._isValid */) { // eslint-disable-line no-constant-condition\r\n curr._finalize2(prev, next, this.type === ChainType.NUCLEIC);\r\n prev = curr;\r\n }\r\n }\r\n\r\n // fix very first wing\r\n if (residues.length > 1 && residues[1]._wingVector) {\r\n const p = residues[1]._wingVector;\r\n residues[0]._wingVector = new THREE.Vector3(p.x, p.y, p.z);\r\n } else if (residues.length > 0) {\r\n residues[0]._wingVector = new THREE.Vector3(1, 0, 0);\r\n }\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const residues = this._residues;\r\n let prev = null;\r\n let prevData = null;\r\n const frameRes = frameData._residues;\r\n const n = residues.length;\r\n function getAtomPos(atom) {\r\n return frameData.getAtomPos(atom.index);\r\n }\r\n\r\n for (let i = 0; i < n; ++i) {\r\n const curr = residues[i];\r\n const currData = frameRes[curr._index];\r\n const nextRes = (i + 1 < n) ? residues[i + 1] : null;\r\n curr._innerFinalize(prev, prevData, nextRes, currData, this.type === ChainType.NUCLEIC, getAtomPos);\r\n prev = curr;\r\n prevData = currData;\r\n }\r\n\r\n frameRes[residues[0]._index]._wingVector = n > 1\r\n ? frameRes[residues[1]._index]._wingVector\r\n : new THREE.Vector3(1, 0, 0);\r\n }\r\n\r\n /**\r\n * Create a new residue.\r\n *\r\n * @param {string} name - Residue name.\r\n * @param {number} sequence - Residue sequence number.\r\n * @param {string} iCode - Insertion code.\r\n * @returns {Residue} - Newly created residue instance.\r\n */\r\n addResidue(name, sequence, iCode) {\r\n let type = this._complex.getResidueType(name);\r\n if (type === null) {\r\n type = this._complex.addResidueType(name);\r\n }\r\n const residue = new Residue(this, type, sequence, iCode);\r\n this._complex.addResidue(residue);\r\n this._residues.push(residue);\r\n\r\n if (type.flags & (ResidueType.Flags.NUCLEIC | ResidueType.Flags.PROTEIN)) {\r\n if (this.maxSequence < sequence) {\r\n this.maxSequence = sequence;\r\n }\r\n if (this.minSequence > sequence) {\r\n this.minSequence = sequence;\r\n }\r\n }\r\n\r\n return residue;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residues.length;\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n mask &= residues[i]._mask;\r\n }\r\n this._mask = mask;\r\n }\r\n}\r\n\r\nexport default Chain;\r\n","import Residue from './Residue';\r\n\r\n/** An element of protein secondary structure. */\r\nclass StructuralElement {\r\n /**\r\n * Create a secondary structural element of the specified type.\r\n *\r\n * @param {StructuralElement.Type} type Secondary structure type.\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n */\r\n constructor(type, init, term) {\r\n /**\r\n * Secondary structure type.\r\n * @type {StructuralElement.Type}\r\n */\r\n this.type = type;\r\n /**\r\n * Generic secondary structure type.\r\n * @type {StructuralElement.Generic}\r\n */\r\n this.generic = StructuralElement.genericByType[this.type] || 'loop';\r\n /**\r\n * Initial residue.\r\n * @type Residue\r\n */\r\n this.init = init;\r\n /**\r\n * Terminal residue.\r\n * @type Residue\r\n */\r\n this.term = term;\r\n }\r\n\r\n /**\r\n * An internal method for making a final pass over the complex to set all required references.\r\n *\r\n * **NOTE:** I'm sorry. It's a legacy code waiting for refactoring.\r\n * Just copying it as-is right now and hoping for the best.\r\n *\r\n * @param {object} serialAtomMap A dictionary of atoms\r\n * @param {object} residueHash A dictionary of hashed residues to check.\r\n * @param {Complex} complex The molecular complex this element belongs to.\r\n */\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n if (this.init instanceof Residue && this.term instanceof Residue) {\r\n return;\r\n }\r\n\r\n // Link all intermediate residues to this structural element\r\n const start = complex.splitUnifiedSerial(this.init);\r\n const end = complex.splitUnifiedSerial(this.term);\r\n for (let chainId = start.chain; chainId <= end.chain; chainId++) {\r\n for (let serialId = start.serial; serialId <= end.serial; serialId++) {\r\n for (let { iCode } = start; iCode <= end.iCode; iCode++) {\r\n const hashCode = complex.getUnifiedSerial(chainId, serialId, iCode);\r\n if (residueHash[hashCode]) {\r\n residueHash[hashCode]._secondary = this;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Replace unfined serials by objects\r\n this.init = residueHash[this.init];\r\n this.term = residueHash[this.term];\r\n }\r\n}\r\n\r\n/**\r\n * Specific type of a secondary structural element.\r\n * @enum {string}\r\n * @see StructuralElement.Generic\r\n */\r\nStructuralElement.Type = {\r\n /** A strand of a [beta-sheet](https://en.wikipedia.org/wiki/Beta_sheet). */\r\n STRAND: 'E',\r\n /** An isolated beta-bridge (too small for a beta-sheet). */\r\n BRIDGE: 'B',\r\n\r\n /** A [3/10 helix](https://en.wikipedia.org/wiki/310_helix) (hydrogen bonding is 3 residues apart). */\r\n HELIX_310: 'G',\r\n /** An [alpha-helix](https://en.wikipedia.org/wiki/Alpha_helix) (hydrogen bonding is 4 residues apart). */\r\n HELIX_ALPHA: 'H',\r\n /** A [pi-helix](https://en.wikipedia.org/wiki/Pi_helix) (hydrogen bonding is 5 residues apart). */\r\n HELIX_PI: 'I',\r\n /** A generic helix of unspecified bonding distance. */\r\n HELIX: 'X',\r\n\r\n /** An isolated 3/10-like helical turn. */\r\n TURN_310: '3',\r\n /** An isolated alpha-like helical turn. */\r\n TURN_ALPHA: '4',\r\n /** An isolated pi-like helical turn. */\r\n TURN_PI: '5',\r\n /** An isolated helical [turn](https://en.wikipedia.org/wiki/Turn_(biochemistry)) of unspecified bonding distance. */\r\n TURN: 'T',\r\n\r\n /** A bend (a region of high curvature). */\r\n BEND: 'S',\r\n /** Just a protein section with no particular conformation. */\r\n COIL: 'C',\r\n};\r\n\r\n/**\r\n * Generic type of a secondary structural element.\r\n * @enum {string}\r\n * @see StructuralElement.Type\r\n */\r\nStructuralElement.Generic = {\r\n /** A strand of a sheet. */\r\n STRAND: 'strand',\r\n /** A helix. */\r\n HELIX: 'helix',\r\n /** Just a protein section with no particular conformation. */\r\n LOOP: 'loop',\r\n};\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\nconst StructuralElementGeneric = StructuralElement.Generic;\r\n\r\n/**\r\n * A mapping from specific types to generic ones.\r\n * @type {Object}\r\n */\r\nStructuralElement.genericByType = {\r\n [StructuralElementType.STRAND]: StructuralElementGeneric.STRAND,\r\n [StructuralElementType.HELIX_310]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX_ALPHA]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX_PI]: StructuralElementGeneric.HELIX,\r\n [StructuralElementType.HELIX]: StructuralElementGeneric.HELIX,\r\n};\r\n\r\nexport default StructuralElement;\r\n","import StructuralElement from './StructuralElement';\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\nexport const typeByPDBHelixClass = {\r\n 1: StructuralElementType.HELIX_ALPHA,\r\n 3: StructuralElementType.HELIX_PI,\r\n 5: StructuralElementType.HELIX_310,\r\n};\r\n\r\n/**\r\n * Helical secondary structure of a protein.\r\n * @extends StructuralElement\r\n */\r\nclass Helix extends StructuralElement {\r\n /**\r\n * Create a helix.\r\n *\r\n * @param {number} helixClass A helix class according to the\r\n * [PDB Format](http://www.wwpdb.org/documentation/file-format-content/format33/sect5.html#HELIX).\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n * @param {number} serial Serial number of the helix (see PDB Format).\r\n * @param {string} name Helix identifier (see PDB Format).\r\n * @param {string} comment Comment about this helix (see PDB Format).\r\n * @param {number} length Length of this helix, in residues (see PDB Format).\r\n */\r\n constructor(helixClass, init, term, serial, name, comment, length) {\r\n super(typeByPDBHelixClass[helixClass] || StructuralElement.Type.HELIX, init, term);\r\n\r\n /**\r\n * Serial number of the helix (see PDB Format).\r\n * @type {number}\r\n */\r\n this.serial = serial;\r\n /**\r\n * Helix identifier (see PDB Format).\r\n * @type {string}\r\n */\r\n this.name = name;\r\n /**\r\n * Comment about this helix (see PDB Format).\r\n * @type {string}\r\n */\r\n this.comment = comment;\r\n /**\r\n * Length of this helix, in residues (see PDB Format).\r\n * @type {number}\r\n */\r\n this.length = length;\r\n }\r\n}\r\n\r\nexport default Helix;\r\n","import StructuralElement from './StructuralElement';\r\n\r\n/**\r\n * A single strand of a sheet in a protein secondary structure.\r\n * @extends StructuralElement\r\n */\r\nclass Strand extends StructuralElement {\r\n /**\r\n * Create a strand.\r\n *\r\n * @param {Sheet} sheet Parent sheet this strand belongs to.\r\n * @param {Residue} init Initial residue.\r\n * @param {Residue} term Terminal residue.\r\n * @param {number} sense Sense of strand with respect to previous strand in the sheet.\r\n * - 0 if the first strand,\r\n * - 1 if parallel, and\r\n * - -1 if anti-parallel.\r\n * @param {Atom} atomCur Atom in current strand (see PDB Format).\r\n * @param {Atom} atomPrev Atom in previous strand (see PDB Format).\r\n */\r\n constructor(sheet, init, term, sense, atomCur, atomPrev) {\r\n super(StructuralElement.Type.STRAND, init, term);\r\n\r\n /**\r\n * Parent sheet this strand belongs to.\r\n * @type {Sheet}\r\n */\r\n this.sheet = sheet;\r\n /**\r\n * Sense of strand with respect to previous strand in the sheet.\r\n * - 0 if the first strand,\r\n * - 1 if parallel, and\r\n * - -1 if anti-parallel.\r\n * @type {number}\r\n */\r\n this.sense = sense;\r\n /**\r\n * Atom in current strand (see PDB Format).\r\n * @type {Atom}\r\n */\r\n this.atomCur = atomCur;\r\n /**\r\n * Atom in previous strand (see PDB Format).\r\n * @type {Atom}\r\n */\r\n this.atomPrev = atomPrev;\r\n }\r\n\r\n /**\r\n * An internal method for making a final pass over the complex to set all required references.\r\n *\r\n * **NOTE:** I'm sorry. It's a legacy code waiting for refactoring.\r\n * Just copying it as-is right now and hoping for the best.\r\n *\r\n * @param {object} serialAtomMap A dictionary of atoms\r\n * @param {object} residueHash A dictionary of hashed residues to check.\r\n * @param {Complex} complex The molecular complex this element belongs to.\r\n *\r\n * @override\r\n */\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n super._finalize(serialAtomMap, residueHash, complex);\r\n\r\n let as = this.atomCur;\r\n if (as !== null && !Number.isNaN(as)) {\r\n this.atomCur = serialAtomMap[as];\r\n }\r\n as = this.atomPrev;\r\n if (as !== null && !Number.isNaN(as)) {\r\n this.atomPrev = serialAtomMap[as];\r\n }\r\n }\r\n}\r\n\r\nexport default Strand;\r\n","import Strand from './Strand';\r\n\r\n/**\r\n * Sheet secondary structure of a protein.\r\n *\r\n * @param {string} name -\r\n * @param {number} width -\r\n *\r\n * @exports Sheet\r\n * @constructor\r\n */\r\nclass Sheet {\r\n constructor(name, width) {\r\n this._name = name;\r\n this._width = width;\r\n\r\n this._strands = [];\r\n }\r\n\r\n // Getters and setters\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getWidth() {\r\n return this._width;\r\n }\r\n\r\n addStrand(strand) {\r\n this._strands.push(strand);\r\n this._width = this._strands.length;\r\n }\r\n\r\n addEmptyStrand() {\r\n this._strands.push(new Strand(null, null, null, null, null, null));\r\n }\r\n\r\n _finalize(serialAtomMap, residueHash, complex) {\r\n const s = this._strands;\r\n for (let i = 0, n = s.length; i < n; ++i) {\r\n s[i]._finalize(serialAtomMap, residueHash, complex);\r\n }\r\n if (!this._width) {\r\n this._width = s.length;\r\n }\r\n if (s.length !== this._width) {\r\n throw new Error(`Sheet ${this._name} is inconsistent.`);\r\n }\r\n }\r\n}\r\n\r\nexport default Sheet;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Atom measurements.\r\n *\r\n * @param {string} id - SGroup id\r\n * @param {string} name - Name of the group\r\n * @param {THREE.Vector3} position - Registered coordinates\r\n * @param {array} atoms - Atoms group consists of\r\n * @param {object} saveNode - XML node from file for saving\r\n *\r\n * @exports SGroup\r\n * @constructor\r\n */\r\nclass SGroup {\r\n constructor(id, name, position, atoms, saveNode) {\r\n this._id = id;\r\n this._name = name;\r\n this._position = position || new THREE.Vector3();\r\n this._atoms = atoms || [];\r\n this._charge = 0; // default group charge\r\n this._repeat = 1; // how many times group repeated: always > 0\r\n this._center = null;\r\n this.xmlNodeRef = saveNode || null;\r\n }\r\n\r\n /**\r\n * Get atom full name.\r\n * @returns {string} Atom full name.\r\n */\r\n getName() {\r\n return this._name;\r\n }\r\n\r\n getPosition() {\r\n return this._position;\r\n }\r\n\r\n getCentralPoint() {\r\n return this._center;\r\n }\r\n\r\n _rebuildSGroupOnAtomChange() {\r\n const nLimon = 100000000;\r\n if (this._center === null) {\r\n return; // nothing to do if we are not relative\r\n }\r\n\r\n const bLow = new THREE.Vector3(nLimon, nLimon, nLimon);\r\n const bHight = new THREE.Vector3(-nLimon, -nLimon, -nLimon);\r\n for (let j = 0, n = this._atoms.length; j < n; j++) {\r\n const aPos = this._atoms[j].position;\r\n bLow.set(Math.min(bLow.x, aPos.x), Math.min(bLow.y, aPos.y), Math.min(bLow.z, aPos.z));\r\n bHight.set(Math.max(bHight.x, aPos.x), Math.max(bHight.y, aPos.y), Math.max(bHight.z, aPos.z));\r\n }\r\n this._center.addVectors(bLow, bHight);\r\n this._center.multiplyScalar(0.5);\r\n }\r\n}\r\n\r\nexport default SGroup;\r\n","import utils from '../../utils';\r\n\r\n//----------------------------------------------------------------------------\r\nclass Range {\r\n constructor(min, max) {\r\n this.min = min;\r\n this.max = typeof max === 'undefined' ? min : max;\r\n }\r\n\r\n includes(value) {\r\n return this.min <= value && value <= this.max;\r\n }\r\n\r\n toString() {\r\n const { min, max } = this;\r\n return min === max ? String(min) : [min, max].join(':');\r\n }\r\n\r\n toJSON() {\r\n return [this.min, this.max];\r\n }\r\n}\r\n\r\n// ////////////////////////////////////////////////////////////////////////////\r\n\r\nclass List {\r\n constructor(arg) {\r\n if (arg instanceof this.constructor) {\r\n // delegate construction to a different class\r\n // eslint-disable-next-line no-constructor-return\r\n return arg;\r\n }\r\n if (arg instanceof Array) {\r\n this._values = arg.slice(0);\r\n } else if (arg) {\r\n this._values = [arg];\r\n } else {\r\n this._values = [];\r\n }\r\n }\r\n\r\n append(value) {\r\n const values = this._values;\r\n values[values.length] = value;\r\n return this;\r\n }\r\n\r\n remove(value) {\r\n const values = this._values;\r\n const index = values.indexOf(value);\r\n if (index >= 0) {\r\n values.splice(index, 1);\r\n }\r\n return this;\r\n }\r\n\r\n toString() {\r\n return this._values.join(',');\r\n }\r\n\r\n toJSON() {\r\n const values = this._values;\r\n const result = [];\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n const value = values[i];\r\n result[i] = value.toJSON ? value.toJSON() : value;\r\n }\r\n return result;\r\n }\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n\r\nclass RangeList extends List {\r\n includes(value) {\r\n const list = this._values;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n if (list[i].includes(value)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n//----------------------------------------------------------------------------\r\n\r\nconst valuesArray = [];\r\n\r\nclass ValueList extends List {\r\n constructor(arg, upperOnly) {\r\n const list = super(arg);\r\n if (upperOnly) {\r\n this.upperOnly = true;\r\n const values = list._values;\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n const value = values[i];\r\n if (typeof value === 'string') {\r\n values[i] = value.toUpperCase();\r\n }\r\n }\r\n } else {\r\n this.upperOnly = false;\r\n }\r\n // return constructed object\r\n // eslint-disable-next-line no-constructor-return\r\n return list;\r\n }\r\n\r\n includes(value) {\r\n // we do not convert to upper case here for perfomance reasons\r\n // if list is upper case only, value must be converted before it is sent up to here\r\n return this._values.indexOf(value) !== -1;\r\n }\r\n\r\n toString() {\r\n // Quote values that are not correct identifiers\r\n const values = this._values;\r\n valuesArray.length = 0;\r\n for (let i = 0, n = values.length; i < n; ++i) {\r\n valuesArray[i] = utils.correctSelectorIdentifier(String(values[i]));\r\n }\r\n return valuesArray.join(',');\r\n }\r\n\r\n _validate(value) {\r\n return (this.upperOnly && typeof value === 'string') ? value.toUpperCase() : value;\r\n }\r\n\r\n append(value) {\r\n super.append(this._validate(value));\r\n return this;\r\n }\r\n\r\n remove(value) {\r\n super.remove(this._validate(value));\r\n return this;\r\n }\r\n}\r\n\r\nexport {\r\n Range,\r\n List,\r\n RangeList,\r\n ValueList,\r\n};\r\n","import { RangeList, ValueList } from './selectArgs';\r\n\r\n/** Base class for atom selectors. */\r\nclass Selector {\r\n toString() {\r\n return this.keyword;\r\n }\r\n\r\n toJSON() {\r\n return [this.name];\r\n }\r\n}\r\n\r\nSelector.prototype.name = 'Error';\r\nSelector.prototype.keyword = 'error';\r\n\r\n/** Base class for list-based atom selectors. */\r\nclass ListSelector extends Selector {\r\n constructor(list) {\r\n super();\r\n this.list = list;\r\n }\r\n\r\n toString() {\r\n return `${this.keyword} ${this.list}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.list.toJSON()];\r\n }\r\n}\r\n\r\nclass RangeListSelector extends ListSelector {\r\n constructor(arg) {\r\n super(new RangeList(arg));\r\n }\r\n}\r\n\r\nclass ValueListSelector extends ListSelector {\r\n constructor(arg, caseSensitive) {\r\n super(new ValueList(arg, !caseSensitive));\r\n }\r\n}\r\n\r\nclass NoneSelector extends Selector {\r\n includesAtom(_atom) {\r\n return false;\r\n }\r\n}\r\n\r\nNoneSelector.prototype.name = 'None';\r\nNoneSelector.prototype.keyword = 'none';\r\n\r\nclass AllSelector extends Selector {\r\n includesAtom(_atom) {\r\n return true;\r\n }\r\n}\r\n\r\nAllSelector.prototype.name = 'All';\r\nAllSelector.prototype.keyword = 'all';\r\n\r\nexport {\r\n Selector,\r\n ListSelector,\r\n RangeListSelector,\r\n ValueListSelector,\r\n NoneSelector,\r\n AllSelector,\r\n};\r\n","import { Selector, NoneSelector } from './selectorsBase';\r\n\r\n//----------------------------------------------------------------------------\r\n// Operators\r\n//----------------------------------------------------------------------------\r\nconst none = new NoneSelector();\r\n\r\nclass PrefixOperator extends Selector {\r\n constructor(rhs) {\r\n super();\r\n this.rhs = rhs || none;\r\n }\r\n\r\n toString() {\r\n const rhs = this.rhs.priority && this.rhs.priority > this.priority ? `(${this.rhs})` : this.rhs;\r\n return `${this.keyword} ${rhs}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.rhs.toJSON()];\r\n }\r\n}\r\n\r\nPrefixOperator.prototype.priority = 1;\r\n\r\nclass InfixOperator extends Selector {\r\n constructor(lhs, rhs) {\r\n super();\r\n this.lhs = lhs || none;\r\n this.rhs = rhs || none;\r\n }\r\n\r\n toString() {\r\n const lhs = this.lhs.priority && this.lhs.priority > this.priority ? `(${this.lhs})` : this.lhs;\r\n const rhs = this.rhs.priority && this.rhs.priority > this.priority ? `(${this.rhs})` : this.rhs;\r\n return `${lhs} ${this.keyword} ${rhs}`;\r\n }\r\n\r\n toJSON() {\r\n return [this.name, this.lhs.toJSON(), this.rhs.toJSON()];\r\n }\r\n}\r\n\r\nInfixOperator.prototype.priority = 1000;\r\n\r\nexport { PrefixOperator, InfixOperator };\r\n","import Atom from './Atom';\r\nimport ResidueType from './ResidueType';\r\nimport { parser } from '../utils/SelectionParser';\r\nimport { Range, RangeList, ValueList } from './selectors/selectArgs';\r\nimport { PrefixOperator, InfixOperator } from './selectors/selectOps';\r\nimport {\r\n Selector,\r\n RangeListSelector,\r\n ValueListSelector,\r\n NoneSelector,\r\n AllSelector,\r\n} from './selectors/selectorsBase';\r\n\r\nconst keywords = {};\r\n\r\n//----------------------------------------------------------------------------\r\n// Named selectors\r\n//----------------------------------------------------------------------------\r\n\r\nfunction defineSelector(name, SelectorClass) {\r\n const keyword = name.toLowerCase();\r\n SelectorClass.prototype.keyword = keyword;\r\n SelectorClass.prototype.name = name;\r\n\r\n const factory = ((...args) => new SelectorClass(...args));\r\n factory.SelectorClass = SelectorClass;\r\n keywords[keyword] = factory;\r\n\r\n return SelectorClass;\r\n}\r\n\r\ndefineSelector('Serial', class SerialSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.serial);\r\n }\r\n});\r\n\r\ndefineSelector('Name', class NameSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.name);\r\n }\r\n});\r\n\r\ndefineSelector('AltLoc', class AltLocSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(String.fromCharCode(atom.location));\r\n }\r\n});\r\n\r\ndefineSelector('Elem', class ElemSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.element.name);\r\n }\r\n});\r\n\r\ndefineSelector('Residue', class ResidueSelector extends ValueListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._type._name);\r\n }\r\n});\r\n\r\ndefineSelector('Sequence', class SequenceSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._sequence);\r\n }\r\n});\r\n\r\ndefineSelector('ICode', class ICodeSelector extends ValueListSelector {\r\n constructor(arg) {\r\n super(arg, true);\r\n }\r\n\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._icode);\r\n }\r\n});\r\n\r\ndefineSelector('ResIdx', class ResIdxSelector extends RangeListSelector {\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._index);\r\n }\r\n});\r\n\r\ndefineSelector('Chain', class ChainSelector extends ValueListSelector {\r\n constructor(arg) {\r\n super(arg, true);\r\n }\r\n\r\n includesAtom(atom) {\r\n return this.list.includes(atom.residue._chain._name);\r\n }\r\n});\r\n\r\ndefineSelector('Hetatm', class HetatmSelector extends Selector {\r\n includesAtom(atom) {\r\n return atom.het;\r\n }\r\n});\r\n\r\ndefineSelector('PolarH', class PolarHSelector extends Selector {\r\n includesAtom(atom) {\r\n return (atom.flags & Atom.Flags.NONPOLARH) === Atom.Flags.HYDROGEN;\r\n }\r\n});\r\n\r\ndefineSelector('NonPolarH', class NonPolarHSelector extends Selector {\r\n includesAtom(atom) {\r\n return (atom.flags & Atom.Flags.NONPOLARH) === Atom.Flags.NONPOLARH;\r\n }\r\n});\r\n\r\ndefineSelector('All', AllSelector);\r\n\r\ndefineSelector('None', NoneSelector);\r\n\r\nconst NULL_SELECTOR = keywords.none();\r\n\r\n//----------------------------------------------------------------------------\r\n// Named operators\r\n//----------------------------------------------------------------------------\r\n\r\nfunction defineOperator(name, priority, OperatorClass) {\r\n OperatorClass.prototype.priority = priority;\r\n return defineSelector(name, OperatorClass);\r\n}\r\ndefineOperator('Not', 1, class NotOperator extends PrefixOperator {\r\n includesAtom(atom) {\r\n return !this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\ndefineOperator('And', 2, class AndOperator extends InfixOperator {\r\n includesAtom(atom) {\r\n return this.lhs.includesAtom(atom) && this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\ndefineOperator('Or', 3, class OrOperator extends InfixOperator {\r\n includesAtom(atom) {\r\n return this.lhs.includesAtom(atom) || this.rhs.includesAtom(atom);\r\n }\r\n});\r\n\r\n//----------------------------------------------------------------------------\r\n// Flag selectors\r\n//----------------------------------------------------------------------------\r\n\r\nfunction byResidueTypeFlag(flag, name) {\r\n return defineSelector(name, class extends Selector {\r\n includesAtom(atom) {\r\n return (atom.residue._type.flags & flag) !== 0;\r\n }\r\n });\r\n}\r\n\r\nbyResidueTypeFlag(ResidueType.Flags.PROTEIN, 'Protein');\r\nbyResidueTypeFlag(ResidueType.Flags.BASIC, 'Basic');\r\nbyResidueTypeFlag(ResidueType.Flags.ACIDIC, 'Acidic');\r\nbyResidueTypeFlag(ResidueType.Flags.BASIC | ResidueType.Flags.ACIDIC, 'Charged');\r\nbyResidueTypeFlag(ResidueType.Flags.POLAR, 'Polar');\r\nbyResidueTypeFlag(ResidueType.Flags.NONPOLAR, 'NonPolar');\r\nbyResidueTypeFlag(ResidueType.Flags.AROMATIC, 'Aromatic');\r\nbyResidueTypeFlag(ResidueType.Flags.NUCLEIC, 'Nucleic');\r\nbyResidueTypeFlag(ResidueType.Flags.PURINE, 'Purine');\r\nbyResidueTypeFlag(ResidueType.Flags.PYRIMIDINE, 'Pyrimidine');\r\nbyResidueTypeFlag(ResidueType.Flags.WATER, 'Water');\r\n\r\n//----------------------------------------------------------------------------\r\nconst selectors = Object.create(keywords);\r\n\r\nselectors.Selector = Selector;\r\nselectors.RangeListSelector = RangeListSelector;\r\nselectors.ValueListSelector = ValueListSelector;\r\nselectors.Range = Range;\r\nselectors.RangeList = RangeList;\r\nselectors.ValueList = ValueList;\r\nselectors.PrefixOperator = PrefixOperator;\r\nselectors.InfixOperator = InfixOperator;\r\nselectors.Context = Object.create({});\r\n\r\nselectors.GetSelector = function (key) {\r\n if (!selectors.Context.hasOwnProperty(key)) {\r\n const exc = { message: `selector ${key} is not registered` };\r\n throw exc;\r\n }\r\n return selectors.Context[key] || NULL_SELECTOR;\r\n};\r\n\r\nselectors.ClearContext = function () {\r\n Object.keys(selectors.Context).forEach((k) => { delete selectors.Context[k]; });\r\n};\r\n\r\nselectors.keyword = function (key) {\r\n return keywords[key.toLowerCase()] || keywords.none;\r\n};\r\n\r\nselectors.parse = function (str) {\r\n const res = {};\r\n try {\r\n res.selector = parser.parse(str);\r\n } catch (e) {\r\n res.selector = NULL_SELECTOR;\r\n res.error = e.message;\r\n }\r\n return res;\r\n};\r\n\r\nparser.yy = selectors;\r\nparser.yy.parseError = parser.parseError; // workaround for incorrect JISON parser generator for AMD module\r\n\r\nexport default selectors;\r\n","import * as THREE from 'three';\r\nimport selectors from './selectors';\r\n\r\n/**\r\n * Basic biological unit class.\r\n *\r\n * @exports BiologicalUnit\r\n * @constructor\r\n */\r\nclass BiologicalUnit {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._selector = selectors.keyword('All')();\r\n this._boundaries = {\r\n boundingBox: new THREE.Box3(),\r\n boundingSphere: new THREE.Sphere(),\r\n };\r\n }\r\n\r\n computeBoundaries() {\r\n const atoms = this._complex._atoms;\r\n const n = atoms.length;\r\n const selector = this._selector;\r\n\r\n const { boundingBox } = this._boundaries;\r\n boundingBox.makeEmpty();\r\n if (n === 1) {\r\n boundingBox.expandByPoint(atoms[0].position);\r\n const bbc = new THREE.Vector3();\r\n boundingBox.getCenter(bbc);\r\n const s = 2 * atoms[0].element.radius;\r\n boundingBox.setFromCenterAndSize(bbc, new THREE.Vector3(s, s, s));\r\n } else {\r\n for (let i = 0; i < n; ++i) {\r\n if (selector.includesAtom(atoms[i])) {\r\n boundingBox.expandByPoint(atoms[i].position);\r\n }\r\n }\r\n }\r\n\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n if (n === 1) {\r\n this._boundaries.boundingSphere.set(center, atoms[0].element.radius);\r\n } else {\r\n for (let i = 0; i < n; ++i) {\r\n if (!selector.includesAtom(atoms[i])) {\r\n continue;\r\n }\r\n const pos = atoms[i].position;\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n this._boundaries.boundingSphere.set(center, Math.sqrt(radiusSquared));\r\n }\r\n }\r\n\r\n getTransforms() {\r\n return [];\r\n }\r\n\r\n getSelector() {\r\n return this._selector;\r\n }\r\n\r\n getBoundaries() {\r\n return this._boundaries;\r\n }\r\n\r\n finalize() {\r\n }\r\n}\r\n\r\nexport default BiologicalUnit;\r\n","import * as THREE from 'three';\r\nimport selectors from './selectors';\r\nimport BiologicalUnit from './BiologicalUnit';\r\n\r\n/**\r\n * Biological assembly.\r\n *\r\n * @exports Assembly\r\n * @constructor\r\n */\r\n\r\nclass Assembly extends BiologicalUnit {\r\n constructor(complex) {\r\n super(complex);\r\n this.chains = [];\r\n this.matrices = [];\r\n }\r\n\r\n computeBoundaries() {\r\n super.computeBoundaries();\r\n // fix up the boundaries\r\n const { matrices } = this;\r\n const oldCenter = this._boundaries.boundingSphere.center;\r\n const oldRad = this._boundaries.boundingSphere.radius;\r\n const boundingBox = this._boundaries.boundingBox = new THREE.Box3();\r\n boundingBox.makeEmpty();\r\n for (let i = 0, n = matrices.length; i < n; ++i) {\r\n boundingBox.expandByPoint(oldCenter.clone().applyMatrix4(matrices[i]));\r\n }\r\n\r\n const newRad = boundingBox.max.distanceTo(boundingBox.min) / 2 + oldRad;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n this._boundaries.boundingSphere = new THREE.Sphere().set(center, newRad);\r\n boundingBox.max.addScalar(oldRad);\r\n boundingBox.min.subScalar(oldRad);\r\n }\r\n\r\n /**\r\n * Mark a chain as belonging to this biological assembly.\r\n * @param {string} chain - chain identifier, usually a single letter\r\n */\r\n addChain(chain) {\r\n this.chains[this.chains.length] = chain;\r\n }\r\n\r\n /**\r\n * Add a transformation matrix.\r\n * @param {THREE.Matrix4} matrix - transformation matrix\r\n */\r\n addMatrix(matrix) {\r\n this.matrices[this.matrices.length] = matrix;\r\n }\r\n\r\n getTransforms() {\r\n return this.matrices;\r\n }\r\n\r\n finalize() {\r\n if (this.chains.length > 0) {\r\n this._selector = selectors.keyword('Chain')(this.chains);\r\n } else {\r\n this._selector = selectors.keyword('None')();\r\n }\r\n }\r\n}\r\n\r\nexport default Assembly;\r\n","/**\r\n * This class represents connected component as a part of a complex.\r\n * WARNING! The whole component entity is build under the assumption that residues\r\n * are placed in the chains and complex in ascending order of indices\r\n *\r\n * @param {Complex} complex - Molecular complex this chain belongs to.\r\n *\r\n * @exports Component\r\n * @constructor\r\n */\r\nclass Component {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._index = -1;\r\n this._residueIndices = [];\r\n this._cycles = [];\r\n this._subDivs = [];\r\n this._residueCount = 0;\r\n }\r\n\r\n getResidues() {\r\n return this._complex._residues;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residueCount;\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._complex._residues;\r\n const resIdc = this._residueIndices;\r\n for (let idIdc = 0, idCount = resIdc.length; idIdc < idCount; ++idIdc) {\r\n for (let idx = resIdc[idIdc].start, last = resIdc[idIdc].end; idx <= last; ++idx) {\r\n process(residues[idx]);\r\n }\r\n }\r\n }\r\n\r\n setSubDivs(subDivs) {\r\n this._subDivs = subDivs;\r\n let curr = 0;\r\n const resIdc = [];\r\n let resCnt = 0;\r\n for (let i = 0, n = subDivs.length; i < n; ++i) {\r\n if (i === n - 1 || subDivs[i].end + 1 !== subDivs[i + 1].start) {\r\n const { start } = subDivs[curr];\r\n const { end } = subDivs[i];\r\n resIdc[resIdc.length] = {\r\n start,\r\n end,\r\n };\r\n resCnt += end - start + 1;\r\n curr = i + 1;\r\n }\r\n }\r\n\r\n this._residueIndices = resIdc;\r\n this._residueCount = resCnt;\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n forEachBond(process) {\r\n const bonds = this._complex._bonds;\r\n\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n const bond = bonds[i];\r\n if (bond._left.residue._component === this) {\r\n process(bond);\r\n }\r\n }\r\n }\r\n\r\n update() {\r\n this.forEachCycle((cycle) => {\r\n cycle.update();\r\n });\r\n }\r\n\r\n forEachAtom(process) {\r\n this.forEachResidue((residue) => {\r\n residue.forEachAtom(process);\r\n });\r\n }\r\n\r\n addCycle(cycle) {\r\n this._cycles.push(cycle);\r\n }\r\n\r\n forEachCycle(process) {\r\n const cycles = this._cycles;\r\n for (let i = 0, n = cycles.length; i < n; ++i) {\r\n process(cycles[i]);\r\n }\r\n }\r\n\r\n markResidues() {\r\n const self = this;\r\n self.forEachResidue((residue) => {\r\n residue._component = self;\r\n });\r\n }\r\n\r\n _forEachSubChain(mask, process) {\r\n const residues = this._complex._residues;\r\n const subs = this._subDivs;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n for (let idx = subs[i].start, last = subs[i].end; idx <= last; ++idx) {\r\n const currRes = residues[idx];\r\n if (mask & currRes._mask && currRes._isValid) {\r\n let end = idx + 1;\r\n for (; end <= last; ++end) {\r\n const endRes = residues[end];\r\n if (!(mask & endRes._mask && endRes._isValid)) {\r\n break;\r\n }\r\n }\r\n process(i, idx, end - 1);\r\n idx = end;\r\n }\r\n }\r\n }\r\n }\r\n\r\n getMaskedSequences(mask) {\r\n const subs = [];\r\n let idx = 0;\r\n this._forEachSubChain(mask, (_subIdx, start, end) => {\r\n subs[idx++] = { start, end };\r\n });\r\n\r\n return subs;\r\n }\r\n\r\n getMaskedSubdivSequences(mask) {\r\n const subs = [];\r\n let currIdx = -1;\r\n let lastSubIdx = -1;\r\n const subDivs = this._subDivs;\r\n\r\n this._forEachSubChain(mask, (subIdx, start, end) => {\r\n if (lastSubIdx !== subIdx) {\r\n ++currIdx;\r\n subs[currIdx] = {\r\n arr: [],\r\n boundaries: subDivs[subIdx],\r\n };\r\n lastSubIdx = subIdx;\r\n }\r\n subs[currIdx].arr[subs[currIdx].arr.length] = { start, end };\r\n });\r\n\r\n return subs;\r\n }\r\n}\r\n\r\nexport default Component;\r\n","import utils from '../utils';\r\n\r\nconst cMaxPairsForHashCode = 32;\r\nconst cHashTableSize = 1024 * 1024;\r\nconst cNumbersPerPair = 4;\r\nconst cMaxNeighbours = 14;\r\nconst cInvalidVal = -1;\r\n// 89237 is a large simple number, can be used for pseudo random hash code create\r\nconst cBigPrime = 89237;\r\n\r\nclass AtomPairs {\r\n constructor(maxPairsEstimate) {\r\n this.numPairs = 0;\r\n this.numMaxPairs = maxPairsEstimate;\r\n this.intBuffer = utils.allocateTyped(Int32Array, maxPairsEstimate * cNumbersPerPair);\r\n for (let i = 0; i < maxPairsEstimate * cNumbersPerPair; i++) {\r\n this.intBuffer[i] = cInvalidVal;\r\n }\r\n this.hashBuffer = utils.allocateTyped(Int32Array, cHashTableSize * cMaxPairsForHashCode);\r\n for (let i = 0; i < cHashTableSize * cMaxPairsForHashCode; i++) {\r\n this.hashBuffer[i] = cInvalidVal;\r\n }\r\n }\r\n\r\n /**\r\n * Destroy all pairs memory\r\n */\r\n destroy() {\r\n this.intBuffer = null;\r\n this.hashBuffer = null;\r\n }\r\n\r\n /**\r\n * Add pair of atoms to collection\r\n * @param {number} indexA - Index of the 1st vertex.\r\n * @param {number} indexB - Index of the 2nd vertex.\r\n */\r\n addPair(indexA, indexB) {\r\n const ia = (indexA < indexB) ? indexA : indexB;\r\n const ib = (indexA > indexB) ? indexA : indexB;\r\n const codeToAdd = ia + (ib << cMaxNeighbours);\r\n\r\n const hashCode = (ia + (ib * cBigPrime)) & (cHashTableSize - 1);\r\n let j = hashCode * cMaxPairsForHashCode;\r\n let apI = 0;\r\n for (; apI < cMaxPairsForHashCode; apI++) {\r\n const code = this.hashBuffer[j + apI];\r\n if (code === cInvalidVal) {\r\n break;\r\n }\r\n if (code === codeToAdd) {\r\n return false;\r\n }\r\n }\r\n // add this new hash code\r\n if (apI >= cMaxPairsForHashCode) {\r\n throw new Error('addPair: increase cMaxPairsForHashCode');\r\n }\r\n this.hashBuffer[j + apI] = codeToAdd;\r\n\r\n // actually add\r\n if (this.numPairs >= this.numMaxPairs) {\r\n throw new Error('addPair: increase num pairs');\r\n }\r\n j = this.numPairs * cNumbersPerPair;\r\n this.intBuffer[j] = ia;\r\n this.intBuffer[j + 1] = ib;\r\n this.intBuffer[j + 2] = codeToAdd;\r\n this.numPairs++;\r\n return true;\r\n }\r\n}\r\n\r\nexport default AtomPairs;\r\n","import AtomPairs from './AtomPairs';\r\nimport Bond from './Bond';\r\n\r\nconst cProfileBondBuilder = false;\r\nconst cEstBondsMultiplier = 4;\r\nconst cSpaceCode = 32;\r\nconst cBondTolerance = 0.45;\r\nconst cVMDTolerance = 0.6;\r\nconst cBondRadInJMOL = true;\r\nconst cEpsilon = 0.001;\r\n\r\n/**\r\n * Get radius used for building bonds.\r\n *\r\n * @param {Atom} atom - Atom object.\r\n * @returns {number} special value for bonding radius for this atom\r\n */\r\nfunction _getBondingRadius(atom) {\r\n const { element } = atom;\r\n if (element) {\r\n return element.radiusBonding;\r\n }\r\n throw new Error('_getBondingRadius: Logic error.');\r\n}\r\n\r\nfunction _isAtomEligible(atom) {\r\n // build for all non-hetatm and for hetatm without bonds\r\n return !atom.isHet() || (atom.bonds && atom.bonds.length === 0);\r\n}\r\n\r\n/**\r\n * Bond between atoms.\r\n *\r\n * @param {Complex} complex molecular complex\r\n\r\n * @exports AutoBond\r\n * @constructor\r\n */\r\nclass AutoBond {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._maxRad = 1.8;\r\n const bBox = this._complex.getDefaultBoundaries().boundingBox;\r\n this._vBoxMin = bBox.min.clone();\r\n this._vBoxMax = bBox.max.clone();\r\n\r\n this._pairCollection = null;\r\n }\r\n\r\n /**\r\n * Add existing pairs of connectors (from pdb file after its reading)\r\n * @returns {number} 0\r\n */\r\n _addExistingPairs() {\r\n const atoms = this._complex.getAtoms();\r\n const numAtoms = atoms.length;\r\n let aInd = 0;\r\n const collection = this._pairCollection;\r\n\r\n for (; aInd < numAtoms; aInd++) {\r\n const { bonds } = atoms[aInd];\r\n const numBondsForAtom = bonds.length;\r\n for (let bInd = 0; bInd < numBondsForAtom; bInd++) {\r\n const bond = bonds[bInd];\r\n const indTo = bond._left.index;\r\n if (indTo === aInd) {\r\n collection.addPair(aInd, bond._right.index);\r\n }\r\n } // for (b) all bonds in atom\r\n } // for (a)\r\n return 0;\r\n }\r\n\r\n _findPairs() {\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return;\r\n }\r\n\r\n const atoms = this._complex._atoms;\r\n const atomsNum = atoms.length;\r\n const self = this;\r\n\r\n let rA;\r\n let isHydrogenA;\r\n let posA;\r\n let locationA;\r\n let atomA;\r\n\r\n const processAtom = function (atomB) {\r\n if (isHydrogenA && atomB.isHydrogen()) {\r\n return;\r\n }\r\n\r\n const locationB = atomB.location;\r\n if ((locationA !== cSpaceCode)\r\n && (locationB !== cSpaceCode)\r\n && (locationA !== locationB)) {\r\n return;\r\n }\r\n\r\n const dist2 = posA.distanceToSquared(atomB.position);\r\n const rB = atomB.element.radiusBonding;\r\n const maxAcceptable = cBondRadInJMOL ? rA + rB + cBondTolerance : cVMDTolerance * (rA + rB);\r\n\r\n if (dist2 > (maxAcceptable * maxAcceptable)) {\r\n return;\r\n }\r\n\r\n if (dist2 < cEpsilon) {\r\n return;\r\n }\r\n\r\n self._pairCollection.addPair(atomA.index, atomB.index);\r\n };\r\n\r\n for (let i = 0; i < atomsNum; ++i) {\r\n atomA = atoms[i];\r\n if (!_isAtomEligible(atomA)) {\r\n continue;\r\n }\r\n\r\n rA = atomA.element.radiusBonding;\r\n isHydrogenA = atomA.isHydrogen();\r\n posA = atomA.position;\r\n locationA = atomA.location;\r\n\r\n vw.forEachAtomWithinRadius(posA, 2 * this._maxRad + cBondTolerance, processAtom);\r\n }\r\n }\r\n\r\n _addPairs() {\r\n const atoms = this._complex._atoms;\r\n\r\n for (let i = 0, k = 0; i < this._pairCollection.numPairs; i++, k += 4) {\r\n const iA = this._pairCollection.intBuffer[k];\r\n const iB = this._pairCollection.intBuffer[k + 1];\r\n this._addPair(atoms[iA], atoms[iB]);\r\n }\r\n }\r\n\r\n _addPair(atomA, atomB) {\r\n const bondsA = atomA.bonds;\r\n const indexA = atomA.index;\r\n const indexB = atomB.index;\r\n for (let j = 0, numBonds = bondsA.length; j < numBonds; ++j) {\r\n const bond = bondsA[j];\r\n if (bond._left.index === indexB || bond._right.index === indexB) {\r\n return;\r\n }\r\n }\r\n const left = indexA < indexB ? atomA : atomB;\r\n const right = indexA < indexB ? atomB : atomA;\r\n const newBond = this._complex.addBond(left, right, 0, Bond.BondType.UNKNOWN, false);\r\n bondsA.push(newBond);\r\n atomB.bonds.push(newBond);\r\n }\r\n\r\n build() {\r\n if (cProfileBondBuilder) {\r\n console.time('Bonds Builder');\r\n }\r\n this._buildInner();\r\n\r\n if (cProfileBondBuilder) {\r\n console.timeEnd('Bonds Builder');\r\n }\r\n }\r\n\r\n _buildInner() {\r\n const atoms = this._complex._atoms;\r\n if (atoms.length < 2) {\r\n return;\r\n }\r\n if (atoms[0].index < 0) {\r\n throw new Error('AutoBond: Atoms in complex were not indexed.');\r\n }\r\n\r\n this._calcBoundingBox();\r\n this._pairCollection = new AtomPairs(atoms.length * cEstBondsMultiplier);\r\n this._addExistingPairs();\r\n this._findPairs();\r\n this._addPairs();\r\n }\r\n\r\n _calcBoundingBox() {\r\n const atoms = this._complex._atoms;\r\n const nAtoms = atoms.length;\r\n let maxRad = _getBondingRadius(atoms[0]);\r\n for (let i = 1; i < nAtoms; ++i) {\r\n maxRad = Math.max(maxRad, _getBondingRadius(atoms[i]));\r\n }\r\n this._vBoxMax.addScalar(maxRad);\r\n this._vBoxMin.addScalar(-maxRad);\r\n this._maxRad = maxRad * 1.2;\r\n }\r\n\r\n destroy() {\r\n if (this._pairCollection) {\r\n this._pairCollection.destroy();\r\n }\r\n }\r\n}\r\n\r\nexport default AutoBond;\r\n","import * as THREE from 'three';\r\nimport Bond from './Bond';\r\nimport Element from './Element';\r\n\r\nconst cCrossThresh = 0.1;\r\nconst cAromaticType = Bond.BondType.AROMATIC;\r\nconst cAromaticAtoms = [\r\n Element.ByName.C.number,\r\n Element.ByName.N.number,\r\n // Element.ByName.O.number,\r\n // Element.ByName.S.number,\r\n];\r\n\r\n/** Conditions for bonds:\r\n * - Cross product with each subsequent bond to add is collinear and point to the same direction\r\n * - Each pair of a adjacent bonds belong to not more than one cycle\r\n * - If there is more than one candidates we try them in ascending order of angle values\r\n */\r\n\r\nconst _coDirVectors = (function () {\r\n const v1Tmp = new THREE.Vector3();\r\n const v2Tmp = new THREE.Vector3();\r\n const cp = new THREE.Vector3();\r\n return function (v1, v2) {\r\n v1Tmp.copy(v1).normalize();\r\n v2Tmp.copy(v2).normalize();\r\n cp.crossVectors(v1Tmp, v2Tmp);\r\n if (cp.length() > cCrossThresh) {\r\n return false;\r\n }\r\n // zero vector in out terms must be collinear to any\r\n return v1Tmp.dot(v2Tmp) >= 0;\r\n };\r\n}());\r\n\r\nfunction _insertAscending(arr, val) {\r\n let idx = 0;\r\n while (idx < arr.length && arr[idx] < val) {\r\n ++idx;\r\n }\r\n arr.splice(idx, 0, val);\r\n}\r\n\r\nfunction _anotherAtom(bond, currAtom) {\r\n return bond._left === currAtom ? bond._right : bond._left;\r\n}\r\n\r\nfunction _cosBetween(v1, v2) {\r\n const theta = v1.dot(v2) / (Math.sqrt(v1.lengthSq() * v2.lengthSq()));\r\n return THREE.MathUtils.clamp(theta, -1, 1);\r\n}\r\n\r\nfunction _markAromatic(bond) {\r\n bond._type = cAromaticType;\r\n}\r\n\r\nclass Cycle {\r\n constructor(atomsList) {\r\n this.atoms = atomsList;\r\n this.update();\r\n }\r\n\r\n update() {\r\n const { atoms } = this;\r\n const center = new THREE.Vector3();\r\n const nA = atoms.length;\r\n for (let j = 0; j < nA; ++j) {\r\n center.add(atoms[j].position);\r\n }\r\n center.multiplyScalar(1.0 / nA);\r\n this.center = center;\r\n this.radius = center.distanceTo(atoms[0].position.clone().lerp(atoms[1].position, 0.5));\r\n }\r\n\r\n forEachBond(process) {\r\n const { atoms } = this;\r\n const nA = atoms.length;\r\n let currAtom = atoms[0];\r\n let nextAtom;\r\n\r\n function checkBond(bond) {\r\n if (bond._left === nextAtom || bond._right === nextAtom) {\r\n process(bond);\r\n }\r\n }\r\n\r\n for (let i = 0; i < nA; ++i) {\r\n nextAtom = atoms[(i + 1) % nA];\r\n currAtom.forEachBond(checkBond);\r\n currAtom = nextAtom;\r\n }\r\n }\r\n}\r\n\r\nfunction _isAromatic(bond) {\r\n return bond._type === cAromaticType;\r\n}\r\n\r\nfunction _isPossibleAromatic(bond) {\r\n if (bond.type === cAromaticType) {\r\n return true;\r\n }\r\n const rightIdx = cAromaticAtoms.indexOf(bond._right.element.number);\r\n const leftIdx = cAromaticAtoms.indexOf(bond._left.element.number);\r\n return rightIdx !== -1 && leftIdx !== -1;\r\n}\r\n\r\nfunction _checkCycleSimple(cycle) {\r\n return cycle.length > 3;\r\n}\r\n\r\nfunction _checkCycleComplex(cycle) {\r\n console.assert(cycle.length > 2);\r\n return true;\r\n}\r\n\r\nclass AromaticLoopsMarker {\r\n constructor(complex) {\r\n this._complex = complex;\r\n const bondsData = new Array(complex._bonds.length);\r\n const bondMarks = new Array(complex._bonds.length);\r\n for (let i = 0, n = bondsData.length; i < n; ++i) {\r\n bondsData[i] = [];\r\n bondMarks[i] = false;\r\n }\r\n this._bondsData = bondsData;\r\n this._bondMarks = bondMarks;\r\n this._resetCycles();\r\n }\r\n\r\n _resetCycles() {\r\n this._cycles = [];\r\n this._currIdx = -1;\r\n }\r\n\r\n _haveSameCycle(bondsData, bond1, bond2) {\r\n const arr1 = bondsData[bond1._index];\r\n const arr2 = bondsData[bond2._index];\r\n const n1 = arr1.length;\r\n const n2 = arr2.length;\r\n let i1 = 0;\r\n let i2 = 0;\r\n while (i1 < n1 && i2 < n2) {\r\n if (arr1[i1] === arr2[i2]) {\r\n return true;\r\n }\r\n if (arr1[i1] > arr2[i2]) {\r\n ++i2;\r\n } else {\r\n ++i1;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n _tryBond(prevBond, currRight, currDir) {\r\n const bondsOrder = [];\r\n const bondsData = this._bondsData;\r\n const currLeft = _anotherAtom(prevBond, currRight);\r\n const currVec = currRight.position.clone().sub(currLeft.position);\r\n const startAtomRef = this._currStart;\r\n const self = this;\r\n const bondMarks = this._bondMarks;\r\n let checkAromatic = this._checkBond;\r\n bondMarks[prevBond._index] = true;\r\n checkAromatic = checkAromatic === undefined ? _isAromatic : checkAromatic;\r\n currRight.forEachBond((newBond) => {\r\n if (!checkAromatic(newBond)\r\n || newBond === prevBond\r\n || bondMarks[newBond._index]\r\n || self._haveSameCycle(bondsData, prevBond, newBond)) {\r\n return;\r\n }\r\n const anotherAtom = _anotherAtom(newBond, currRight);\r\n const anotherVec = anotherAtom.position.clone().sub(currRight.position);\r\n const val = anotherAtom === startAtomRef ? -2.0 : 1 - _cosBetween(currVec, anotherVec);\r\n const newDir = anotherVec.cross(currVec);\r\n if (!_coDirVectors(newDir, currDir)) {\r\n return;\r\n }\r\n let idx = 0;\r\n while (idx < bondsOrder.length && bondsOrder[idx].val < val) {\r\n ++idx;\r\n }\r\n bondsOrder.splice(idx, 0, { bond: newBond, val, dir: newDir });\r\n });\r\n\r\n for (let i = 0, n = bondsOrder.length; i < n; ++i) {\r\n const { bond } = bondsOrder[i];\r\n const newRight = bond._left === currRight ? bond._right : bond._left;\r\n if (newRight === startAtomRef) {\r\n ++this._currIdx;\r\n this._cycles.push([currRight]);\r\n bondMarks[prevBond._index] = false;\r\n return true;\r\n }\r\n if (this._tryBond(bond, newRight, bondsOrder[i].dir)) {\r\n _insertAscending(bondsData[bond._index], this._currIdx);\r\n this._cycles[this._currIdx].push(currRight);\r\n bondMarks[prevBond._index] = false;\r\n return true;\r\n }\r\n }\r\n bondMarks[prevBond._index] = false;\r\n return false;\r\n }\r\n\r\n _startCycle(bond) {\r\n // start from left to right\r\n this._currStart = bond._left;\r\n if (this._tryBond(bond, bond._right, new THREE.Vector3())) {\r\n _insertAscending(this._bondsData[bond._index], this._currIdx);\r\n this._cycles[this._currIdx].push(bond._left);\r\n }\r\n }\r\n\r\n _findLoops(checkBond, checkCycle) {\r\n this._checkBond = checkBond;\r\n const complex = this._complex;\r\n const self = this;\r\n\r\n complex.forEachComponent((component) => {\r\n self._resetCycles();\r\n component.forEachBond((bond) => {\r\n if (checkBond(bond)) {\r\n self._startCycle(bond);\r\n }\r\n });\r\n const cycles = self._cycles;\r\n for (let i = 0, n = cycles.length; i < n; ++i) {\r\n const cycle = cycles[i];\r\n if (!checkCycle(cycle)) {\r\n continue;\r\n }\r\n const newCycle = new Cycle(cycle);\r\n newCycle.forEachBond(_markAromatic);\r\n component.addCycle(newCycle);\r\n }\r\n });\r\n }\r\n\r\n markCycles() {\r\n this._findLoops(_isAromatic, _checkCycleSimple);\r\n }\r\n\r\n detectCycles() {\r\n this._findLoops(_isPossibleAromatic, _checkCycleComplex);\r\n }\r\n}\r\n\r\nexport default AromaticLoopsMarker;\r\n","import * as THREE from 'three';\r\nimport utils from '../utils';\r\n\r\n/**\r\n * Calculate min & max radius of a sphere slice between zMin & zMax\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {number} zMin - lower bound of the slice\r\n * @param {number} zMax - upper bound of the slice\r\n */\r\nfunction _getSphereSliceRadiusRange(center, radius, zMin, zMax) {\r\n const dzMin = zMin - center.z;\r\n const dzMax = zMax - center.z;\r\n const rzMin = Math.sqrt(Math.max(radius * radius - dzMin * dzMin, 0.0));\r\n const rzMax = Math.sqrt(Math.max(radius * radius - dzMax * dzMax, 0.0));\r\n\r\n const rMin = Math.min(rzMin, rzMax);\r\n let rMax;\r\n\r\n if (zMin <= center.z && zMax >= center.z) {\r\n // sphere's main diameter is inside slice\r\n rMax = radius;\r\n } else {\r\n rMax = Math.max(rzMin, rzMax);\r\n }\r\n\r\n return [rMin, rMax];\r\n}\r\n\r\n/**\r\n * Calculate min & max radius of a circle slice between yMin & yMax.\r\n *\r\n * To maintain analogy with _getSphereSliceRadiusRange we call radius what in fact is\r\n * half-width (along X axis) of the slice, i.e. 1D-sphere radius.\r\n *\r\n * @param {Vector3} center - center of the circle (z can be ignored)\r\n * @param {number} radius - circle radius\r\n * @param {number} yMin - lower bound of the slice\r\n * @param {number} yMax - upper bound of the slice\r\n * @returns {Array} - array of two numbers (min & max radius, or half-width)\r\n */\r\nfunction _getCircleSliceRadiusRange(center, radius, yMin, yMax) {\r\n const dyMin = yMin - center.y;\r\n const dyMax = yMax - center.y;\r\n const ryMin = Math.sqrt(Math.max(radius * radius - dyMin * dyMin, 0.0));\r\n const ryMax = Math.sqrt(Math.max(radius * radius - dyMax * dyMax, 0.0));\r\n\r\n const rMin = Math.min(ryMin, ryMax);\r\n let rMax;\r\n\r\n if (yMin <= center.y && yMax >= center.y) {\r\n // slice's main diameter is inside slice\r\n rMax = radius;\r\n } else {\r\n rMax = Math.max(ryMin, ryMax);\r\n }\r\n\r\n return [rMin, rMax];\r\n}\r\n\r\n/**\r\n * VoxelWorld constructor\r\n *\r\n * @param {Box3} box - bounding box of the volume to be partitioned\r\n * @param {Vector3} vCellSizeHint - target voxel size (actual voxel size may differ from this)\r\n */\r\nclass VoxelWorld {\r\n constructor(box, vCellSizeHint) {\r\n this._box = box.clone();\r\n const size = new THREE.Vector3();\r\n box.getSize(size);\r\n this._count = size.clone().divide(vCellSizeHint).floor().max(new THREE.Vector3(1, 1, 1));\r\n this._last = this._count.clone().subScalar(1);\r\n this._cellSize = size.clone().divide(this._count);\r\n this._cellInnerR = 0.5 * Math.min(Math.min(this._cellSize.x, this._cellSize.y), this._cellSize.z);\r\n this._cellOuterR = 0.5 * Math.sqrt(this._cellSize.dot(this._cellSize));\r\n\r\n // array of voxels, each element contains index of first atom in voxel\r\n const numVoxels = this._count.x * this._count.y * this._count.z;\r\n this._voxels = utils.allocateTyped(Int32Array, numVoxels);\r\n for (let i = 0; i < numVoxels; ++i) {\r\n this._voxels[i] = -1;\r\n }\r\n\r\n // array of atoms that stores multiple single-linked lists\r\n // two elements for each atom: Atom ref, index of next atom (in this array\r\n this._atoms = [];\r\n }\r\n\r\n /**\r\n * Add all atoms from a complex to voxel world\r\n *\r\n * @param {Complex} complex - complex\r\n */\r\n addAtoms(complex) {\r\n const self = this;\r\n\r\n let idx = this._atoms.length;\r\n\r\n // resize array of atoms\r\n this._atoms.length += 2 * complex.getAtomCount();\r\n\r\n complex.forEachAtom((atom) => {\r\n // find which voxel contains this atom\r\n const voxelIdx = self._findVoxel(atom.position);\r\n\r\n // push current atom to the head of voxel's atom list\r\n self._atoms[idx] = atom;\r\n self._atoms[idx + 1] = self._voxels[voxelIdx];\r\n self._voxels[voxelIdx] = idx;\r\n\r\n idx += 2;\r\n });\r\n }\r\n\r\n /**\r\n * Get voxel that contains specified 3D point (we use clamp at the edges)\r\n *\r\n * @param {Vector3} point - a point in 3D\r\n * @returns {number} - index of voxel\r\n */\r\n static _zero = new THREE.Vector3(0, 0, 0);\r\n\r\n static _voxel = new THREE.Vector3();\r\n\r\n _findVoxel(point) {\r\n const zero = VoxelWorld._zero;\r\n const voxel = VoxelWorld._voxel;\r\n voxel.copy(point)\r\n .sub(this._box.min)\r\n .divide(this._cellSize)\r\n .floor()\r\n .clamp(zero, this._last);\r\n return voxel.x + this._count.x * (voxel.y + this._count.y * voxel.z);\r\n }\r\n\r\n /**\r\n * Call a function for each atom in voxel\r\n *\r\n * @param {number} voxel - index of voxel\r\n * @param {function(Atom)} process - function to call\r\n */\r\n _forEachAtomInVoxel(voxel, process) {\r\n for (let i = this._voxels[voxel]; i >= 0; i = this._atoms[i + 1]) {\r\n process(this._atoms[i]);\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each voxel that is touched by given sphere. Callback also takes flag\r\n * isInside specifying whether voxel lies inside the sphere entirely.\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside\r\n */\r\n\r\n static _xRange = new THREE.Vector2();\r\n\r\n static _yRange = new THREE.Vector2();\r\n\r\n static _zRange = new THREE.Vector2();\r\n\r\n _forEachVoxelWithinRadius(center, radius, process) {\r\n const xRange = VoxelWorld._xRange;\r\n const yRange = VoxelWorld._yRange;\r\n const zRange = VoxelWorld._zRange;\r\n\r\n // switch to a faster method unless cell size is much smaller than sphere radius\r\n if (radius / this._cellInnerR < 10) {\r\n this._forEachVoxelWithinRadiusSimple(center, radius, process);\r\n return;\r\n }\r\n\r\n let rRangeXY;\r\n let rRangeX;\r\n let xVal;\r\n let yVal;\r\n let zVal;\r\n let isInsideX;\r\n let isInsideY;\r\n let isInsideZ;\r\n\r\n zRange.set(center.z - radius, center.z + radius);\r\n zRange.subScalar(this._box.min.z)\r\n .divideScalar(this._cellSize.z)\r\n .floor()\r\n .clampScalar(0, this._count.z - 1);\r\n\r\n for (let z = zRange.x; z <= zRange.y; ++z) {\r\n zVal = [this._box.min.z + z * this._cellSize.z,\r\n this._box.min.z + (z + 1) * this._cellSize.z];\r\n\r\n isInsideZ = (center.z - radius <= zVal[0]) && (zVal[1] <= center.z + radius);\r\n\r\n rRangeXY = _getSphereSliceRadiusRange(center, radius, zVal[0], zVal[1]);\r\n\r\n yRange.set(center.y - rRangeXY[1], center.y + rRangeXY[1]);\r\n yRange.subScalar(this._box.min.y)\r\n .divideScalar(this._cellSize.y)\r\n .floor()\r\n .clampScalar(0, this._count.y - 1);\r\n\r\n for (let y = yRange.x; y <= yRange.y; ++y) {\r\n yVal = [this._box.min.y + y * this._cellSize.y,\r\n this._box.min.y + (y + 1) * this._cellSize.y];\r\n\r\n isInsideY = (center.y - rRangeXY[0] <= yVal[0]) && (yVal[1] <= center.y + rRangeXY[0]);\r\n\r\n rRangeX = _getCircleSliceRadiusRange(center, rRangeXY[1], yVal[0], yVal[1]);\r\n\r\n xRange.set(center.x - rRangeX[1], center.x + rRangeX[1]);\r\n xRange.subScalar(this._box.min.x)\r\n .divideScalar(this._cellSize.x)\r\n .floor()\r\n .clampScalar(0, this._count.x - 1);\r\n\r\n for (let { x } = xRange; x <= xRange.y; ++x) {\r\n xVal = [this._box.min.x + x * this._cellSize.x,\r\n this._box.min.x + (x + 1) * this._cellSize.x];\r\n isInsideX = (center.x - rRangeX[0] <= xVal[0]) && (xVal[1] <= center.x + rRangeX[0]);\r\n\r\n process(x + this._count.x * (y + this._count.y * z), isInsideX && isInsideY && isInsideZ);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each voxel that is touched by given sphere. Callback also takes flag\r\n * isInside specifying whether voxel lies inside the sphere entirely.\r\n * This is a version of method that doesn't try to \"calculate\" what voxels fall inside radius\r\n * but instead just checks all voxels inside sphere's bounding box. This should be faster\r\n * unless cell size is much smaller than sphere radius.\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(number,bool)} process - function to call that takes voxel index and boolean isInside\r\n */\r\n\r\n static _vCenter = new THREE.Vector3();\r\n\r\n _forEachVoxelWithinRadiusSimple(center, radius, process) {\r\n const xRange = VoxelWorld._xRange;\r\n const yRange = VoxelWorld._yRange;\r\n const zRange = VoxelWorld._zRange;\r\n const vCenter = VoxelWorld._vCenter;\r\n\r\n const distTouch2 = (radius + this._cellOuterR) * (radius + this._cellOuterR);\r\n let distInside2 = -1.0;\r\n if (radius > this._cellOuterR) {\r\n distInside2 = (radius - this._cellOuterR) * (radius - this._cellOuterR);\r\n }\r\n\r\n // calculate bounding box for the sphere\r\n xRange.set(center.x - radius, center.x + radius);\r\n xRange.subScalar(this._box.min.x)\r\n .divideScalar(this._cellSize.x)\r\n .floor();\r\n xRange.x = Math.min(Math.max(xRange.x, 0), this._count.x - 1);\r\n xRange.y = Math.min(Math.max(xRange.y, 0), this._count.x - 1);\r\n\r\n yRange.set(center.y - radius, center.y + radius);\r\n yRange.subScalar(this._box.min.y)\r\n .divideScalar(this._cellSize.y)\r\n .floor();\r\n yRange.x = Math.min(Math.max(yRange.x, 0), this._count.y - 1);\r\n yRange.y = Math.min(Math.max(yRange.y, 0), this._count.y - 1);\r\n\r\n zRange.set(center.z - radius, center.z + radius);\r\n zRange.subScalar(this._box.min.z)\r\n .divideScalar(this._cellSize.z)\r\n .floor();\r\n zRange.x = Math.min(Math.max(zRange.x, 0), this._count.z - 1);\r\n zRange.y = Math.min(Math.max(zRange.y, 0), this._count.z - 1);\r\n\r\n for (let z = zRange.x; z <= zRange.y; ++z) {\r\n const zVal = [this._box.min.z + z * this._cellSize.z,\r\n this._box.min.z + (z + 1) * this._cellSize.z];\r\n vCenter.z = 0.5 * (zVal[0] + zVal[1]);\r\n\r\n for (let y = yRange.x; y <= yRange.y; ++y) {\r\n const yVal = [this._box.min.y + y * this._cellSize.y,\r\n this._box.min.y + (y + 1) * this._cellSize.y];\r\n vCenter.y = 0.5 * (yVal[0] + yVal[1]);\r\n\r\n for (let { x } = xRange; x <= xRange.y; ++x) {\r\n const xVal = [this._box.min.x + x * this._cellSize.x,\r\n this._box.min.x + (x + 1) * this._cellSize.x];\r\n vCenter.x = 0.5 * (xVal[0] + xVal[1]);\r\n\r\n const d2 = center.distanceToSquared(vCenter);\r\n if (d2 <= distTouch2) {\r\n process(x + this._count.x * (y + this._count.y * z), d2 <= distInside2);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Call a function for each atom within given sphere\r\n *\r\n * @param {Vector3} center - center of the sphere\r\n * @param {number} radius - sphere radius\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinRadius(center, radius, process) {\r\n const self = this;\r\n const r2 = radius * radius;\r\n\r\n self._forEachVoxelWithinRadius(center, radius, (voxel, isInside) => {\r\n if (isInside) {\r\n self._forEachAtomInVoxel(voxel, process);\r\n } else {\r\n self._forEachAtomInVoxel(voxel, (atom) => {\r\n if (center.distanceToSquared(atom.position) <= r2) {\r\n process(atom);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms defined by mask\r\n *\r\n * @param {Complex} complex - complex\r\n * @param {number} mask - bit mask\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinDistFromMasked(complex, mask, dist, process) {\r\n this._forEachAtomWithinDistFromGroup((atomProc) => {\r\n complex.forEachAtom((atom) => {\r\n if ((atom.mask & mask) !== 0) {\r\n atomProc(atom);\r\n }\r\n });\r\n }, dist, process);\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms defined by selector\r\n *\r\n * @param {Complex} complex - complex\r\n * @param {number} selector - selector\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n forEachAtomWithinDistFromSelected(complex, selector, dist, process) {\r\n this._forEachAtomWithinDistFromGroup((atomProc) => {\r\n complex.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom)) {\r\n atomProc(atom);\r\n }\r\n });\r\n }, dist, process);\r\n }\r\n\r\n /**\r\n * Call a function for each atom of given complex within given distance from group of atoms\r\n *\r\n * @param {function} forEachAtom - enumerator of atoms in the group\r\n * @param {number} dist - distance\r\n * @param {function(Atom)} process - function to call\r\n */\r\n _forEachAtomWithinDistFromGroup(forEachAtom, dist, process) {\r\n const self = this;\r\n const r2 = dist * dist;\r\n\r\n const voxels = [];\r\n const atoms = [];\r\n let idx = 0;\r\n\r\n // build \"within radius\" atom list for each voxel\r\n forEachAtom((atom) => {\r\n self._forEachVoxelWithinRadius(atom.position, dist, (voxel, isInside) => {\r\n if (isInside) {\r\n // this voxel is inside circle -- no check will be required\r\n voxels[voxel] = -1;\r\n } else if (typeof voxels[voxel] === 'undefined') {\r\n // this voxel isn't covered yet -- start building list of atoms\r\n atoms.push(atom);\r\n atoms.push(-1);\r\n voxels[voxel] = idx;\r\n idx += 2;\r\n } else if (voxels[voxel] !== -1) {\r\n // this voxel has a list of atoms required for distance check -- add atom to the list\r\n atoms.push(atom);\r\n atoms.push(voxels[voxel]);\r\n voxels[voxel] = idx;\r\n idx += 2;\r\n }\r\n });\r\n });\r\n\r\n let voxel;\r\n\r\n const processIfWithin = function (atom) {\r\n if (typeof voxels[voxel] === 'undefined') {\r\n return;\r\n }\r\n\r\n idx = voxels[voxel];\r\n if (idx === -1) {\r\n // this voxel is fully covered\r\n process(atom);\r\n return;\r\n }\r\n\r\n // check distance to each atom within radius from this voxel\r\n for (; idx >= 0; idx = atoms[idx + 1]) {\r\n if (atom.position.distanceToSquared(atoms[idx].position) < r2) {\r\n process(atom);\r\n break;\r\n }\r\n }\r\n };\r\n\r\n // for each marked voxel\r\n for (voxel in voxels) {\r\n if (voxels.hasOwnProperty(voxel)) {\r\n self._forEachAtomInVoxel(voxel, processIfWithin);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default VoxelWorld;\r\n","import ResidueType from './ResidueType';\r\nimport PairCollection from './AtomPairs';\r\n\r\nconst MINIMAL_DISTANCE = 0.5;\r\nconst MIN_HBOND_ENERGY = -9.9;\r\nconst MAX_HBOND_ENERGY = -0.5;\r\nconst COUPLING_CONSTANT = -27.888; // = -332 * 0.42 * 0.2\r\nconst MAX_COUPLING_DISTANCE = 5.0; // how far is the closest atom of a potential partner residue from CA atom\r\nconst MAX_RESIDUES_THRESHOLD = 1000;\r\n\r\nexport default class HBondInfo {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._hbonds = []; // array of bond info for each residue\r\n if (this._complex._residues.length > MAX_RESIDUES_THRESHOLD) {\r\n this._buildVW(); // optimized version using voxel grid\r\n } else {\r\n this._build(); // test all pairs of residues\r\n }\r\n }\r\n\r\n isBond(from, to) {\r\n if (this._hbonds[from]) {\r\n const [acc0, acc1] = this._hbonds[from].acceptor;\r\n if (acc0 && acc0.residue === to && acc0.energy < MAX_HBOND_ENERGY) {\r\n return true;\r\n }\r\n if (acc1 && acc1.residue === to && acc1.energy < MAX_HBOND_ENERGY) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n _build() {\r\n const self = this;\r\n\r\n for (let i = 0; i < this._complex._residues.length - 1; ++i) {\r\n const ri = this._complex._residues[i];\r\n if ((ri.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n let preri = null;\r\n if (i > 0 && (this._complex._residues[i - 1].getType().flags & ResidueType.Flags.PROTEIN)\r\n && ri._sequence === this._complex._residues[i - 1]._sequence + 1) {\r\n preri = this._complex._residues[i - 1];\r\n }\r\n\r\n for (let j = i + 1; j < this._complex._residues.length; ++j) {\r\n const rj = this._complex._residues[j];\r\n if ((rj.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n let prerj = null;\r\n if ((this._complex._residues[j - 1].getType().flags & ResidueType.Flags.PROTEIN)\r\n && rj._sequence === this._complex._residues[j - 1]._sequence + 1) {\r\n prerj = this._complex._residues[j - 1];\r\n }\r\n\r\n self._calcHBondEnergy(preri, ri, rj);\r\n if (j !== i + 1) {\r\n self._calcHBondEnergy(prerj, rj, ri);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _buildVW() {\r\n const self = this;\r\n const residues = this._complex._residues;\r\n let ri;\r\n let preri;\r\n\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return;\r\n }\r\n\r\n const pairs = new PairCollection(this._complex._residues.length * this._complex._residues.length / 2);\r\n\r\n function processAtom(atom) {\r\n const rj = atom.residue;\r\n\r\n if (rj._index === ri._index) {\r\n return;\r\n }\r\n\r\n if ((rj.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n return;\r\n }\r\n\r\n if (!pairs.addPair(ri._index, rj._index)) {\r\n // we've seen this pair\r\n return;\r\n }\r\n\r\n // get predecessor in chain\r\n let prerj = rj._index > 0 ? residues[rj._index - 1] : null;\r\n if (prerj\r\n && ((prerj.getType().flags & ResidueType.Flags.PROTEIN) === 0 || rj._sequence !== prerj._sequence + 1)) {\r\n prerj = null;\r\n }\r\n\r\n self._calcHBondEnergy(preri, ri, rj);\r\n if (rj._index !== ri._index + 1) {\r\n self._calcHBondEnergy(prerj, rj, ri);\r\n }\r\n }\r\n\r\n for (let i = 0; i < residues.length - 1; ++i) {\r\n ri = residues[i];\r\n if ((ri.getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n continue;\r\n }\r\n\r\n // get predecessor in chain\r\n preri = i > 0 ? residues[i - 1] : null;\r\n if (preri\r\n && ((preri.getType().flags & ResidueType.Flags.PROTEIN) === 0 || ri._sequence !== preri._sequence + 1)) {\r\n preri = null;\r\n }\r\n\r\n vw.forEachAtomWithinRadius(this._residueGetCAlpha(ri), MAX_COUPLING_DISTANCE, processAtom);\r\n }\r\n }\r\n\r\n _residueGetCAlpha(res) {\r\n for (let i = 0; i < res._atoms.length; ++i) {\r\n const { name } = res._atoms[i];\r\n if (name === 'CA'\r\n || name === 'C1') {\r\n return res._atoms[i].position;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _residueGetCO(res) {\r\n let c = null;\r\n let o = null;\r\n\r\n res.forEachAtom((a) => {\r\n if (a.name === 'C') {\r\n c = a.position;\r\n } else if (a.name === 'O') {\r\n o = a.position;\r\n }\r\n });\r\n\r\n return [c, o];\r\n }\r\n\r\n // TODO Support hydrogen defined in complex\r\n _residueGetNH(prev, res) {\r\n const [c, o] = this._residueGetCO(prev);\r\n\r\n let n;\r\n res.forEachAtom((a) => {\r\n if (a.name === 'N') {\r\n n = a.position;\r\n }\r\n });\r\n\r\n if (c && o && n) {\r\n // calculate hydrogen position\r\n const h = c.clone();\r\n h.sub(o);\r\n h.multiplyScalar(1.0 / h.length());\r\n h.add(n);\r\n\r\n return [n, h];\r\n }\r\n\r\n return [null, null];\r\n }\r\n\r\n _calcHBondEnergy(predonor, donor, acceptor) {\r\n let result = 0;\r\n\r\n if (predonor === null) {\r\n return result;\r\n }\r\n\r\n if (donor.getType().getName() !== 'PRO') {\r\n const [n, h] = this._residueGetNH(predonor, donor);\r\n const [c, o] = this._residueGetCO(acceptor);\r\n\r\n if (n === null || h === null || c === null || o === null) {\r\n return result;\r\n }\r\n\r\n const distanceHO = h.distanceTo(o);\r\n const distanceHC = h.distanceTo(c);\r\n const distanceNC = n.distanceTo(c);\r\n const distanceNO = n.distanceTo(o);\r\n\r\n if (distanceHO < MINIMAL_DISTANCE || distanceHC < MINIMAL_DISTANCE\r\n || distanceNC < MINIMAL_DISTANCE || distanceNO < MINIMAL_DISTANCE) {\r\n result = MIN_HBOND_ENERGY;\r\n } else {\r\n result = COUPLING_CONSTANT / distanceHO - COUPLING_CONSTANT / distanceHC\r\n + COUPLING_CONSTANT / distanceNC - COUPLING_CONSTANT / distanceNO;\r\n }\r\n\r\n // DSSP compatibility mode:\r\n result = Math.round(result * 1000) / 1000;\r\n\r\n if (result < MIN_HBOND_ENERGY) {\r\n result = MIN_HBOND_ENERGY;\r\n }\r\n }\r\n\r\n // update donor\r\n if (typeof this._hbonds[donor._index] === 'undefined') {\r\n this._hbonds[donor._index] = {\r\n donor: [],\r\n acceptor: [],\r\n };\r\n }\r\n const donorInfo = this._hbonds[donor._index];\r\n\r\n if (donorInfo.acceptor.length < 2) {\r\n donorInfo.acceptor.push({\r\n residue: acceptor._index,\r\n energy: result,\r\n });\r\n }\r\n\r\n if (donorInfo.acceptor.length > 1) {\r\n if (result < donorInfo.acceptor[0].energy) {\r\n donorInfo.acceptor[1].residue = donorInfo.acceptor[0].residue;\r\n donorInfo.acceptor[1].energy = donorInfo.acceptor[0].energy;\r\n donorInfo.acceptor[0].residue = acceptor._index;\r\n donorInfo.acceptor[0].energy = result;\r\n } else if (result < donorInfo.acceptor[1].energy) {\r\n donorInfo.acceptor[1].residue = acceptor._index;\r\n donorInfo.acceptor[1].energy = result;\r\n }\r\n }\r\n\r\n // update acceptor\r\n if (typeof this._hbonds[acceptor._index] === 'undefined') {\r\n this._hbonds[acceptor._index] = {\r\n donor: [],\r\n acceptor: [],\r\n };\r\n }\r\n const accInfo = this._hbonds[acceptor._index];\r\n\r\n if (accInfo.donor.length < 2) {\r\n accInfo.donor.push({\r\n residue: donor._index,\r\n energy: result,\r\n });\r\n }\r\n\r\n if (accInfo.donor.length > 1) {\r\n if (result < accInfo.donor[0].energy) {\r\n accInfo.donor[1].residue = accInfo.donor[0].residue;\r\n accInfo.donor[1].energy = accInfo.donor[0].energy;\r\n accInfo.donor[0].residue = donor._index;\r\n accInfo.donor[0].energy = result;\r\n } else if (result < accInfo.donor[1].energy) {\r\n accInfo.donor[1].residue = donor._index;\r\n accInfo.donor[1].energy = result;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import HBondInfo from './HBondInfo';\r\nimport ResidueType from './ResidueType';\r\n\r\nconst BridgeType = Object.freeze({\r\n NO_BRIDGE: 0,\r\n PARALLEL: 1,\r\n ANTI_PARALLEL: 2,\r\n});\r\n\r\nconst HelixFlag = Object.freeze({\r\n START: 1,\r\n MIDDLE: 2,\r\n END: 3,\r\n START_AND_END: 4,\r\n});\r\n\r\nconst StructureType = Object.freeze({\r\n STRAND: 'E',\r\n BRIDGE: 'B',\r\n HELIX_310: 'G',\r\n HELIX_ALPHA: 'H',\r\n HELIX_PI: 'I',\r\n TURN: 'T',\r\n BEND: 'S',\r\n LOOP: ' ',\r\n});\r\n\r\nexport default class SecondaryStructureMap {\r\n constructor(complex) {\r\n this._complex = complex;\r\n this._build();\r\n }\r\n\r\n _build() {\r\n const self = this;\r\n this._hbonds = new HBondInfo(this._complex);\r\n this._ss = []; // DSSP map by residue\r\n\r\n // auxilliary data\r\n this._sheet = [];\r\n this._betaPartners = [];\r\n this._bend = [];\r\n for (let i = 0; i < this._complex.getResidues().length; ++i) {\r\n this._betaPartners[i] = [];\r\n }\r\n this._helixFlags = [];\r\n this._helixFlags[3] = [];\r\n this._helixFlags[4] = [];\r\n this._helixFlags[5] = [];\r\n\r\n // calculate peptide chain lengths\r\n this._chainLengths = [];\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i].getResidues();\r\n let len = 0;\r\n for (; len < chain.length; ++len) {\r\n if ((chain[len].getType().flags & ResidueType.Flags.PROTEIN) === 0) {\r\n break;\r\n }\r\n }\r\n this._chainLengths[i] = len;\r\n }\r\n\r\n this._buildBetaSheets();\r\n\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n self._buildAlphaHelices(this._complex._chains[i].getResidues(), this._chainLengths[i], false);\r\n }\r\n }\r\n\r\n _buildAlphaHelices(inResidues, chainLength, inPreferPiHelices) {\r\n // Helix and Turn\r\n for (let stride = 3; stride <= 5; ++stride) {\r\n if (inResidues.length < stride) {\r\n break;\r\n }\r\n\r\n for (let i = 0; i + stride < chainLength; ++i) {\r\n if (this._hbonds.isBond(inResidues[i + stride]._index, inResidues[i]._index)\r\n /* && NoChainBreak(res[i], res[i + stride]) */) {\r\n this._helixFlags[stride][inResidues[i + stride]._index] = HelixFlag.END;\r\n for (let j = i + 1; j < i + stride; ++j) {\r\n if (typeof this._helixFlags[stride][inResidues[j]._index] === 'undefined') {\r\n this._helixFlags[stride][inResidues[j]._index] = HelixFlag.MIDDLE;\r\n }\r\n }\r\n\r\n if (this._helixFlags[stride][inResidues[i]._index] === HelixFlag.END) {\r\n this._helixFlags[stride][inResidues[i]._index] = HelixFlag.START_AND_END;\r\n } else {\r\n this._helixFlags[stride][inResidues[i]._index] = HelixFlag.START;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 2; i < chainLength - 2; ++i) {\r\n const kappa = this._kappa(inResidues[i - 2], inResidues[i], inResidues[i + 2]);\r\n this._bend[inResidues[i]._index] = (kappa !== 360 && kappa > 70);\r\n }\r\n\r\n for (let i = 1; i + 4 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 4) && this._isHelixStart(inResidues[i - 1]._index, 4)) {\r\n for (let j = i; j <= i + 3; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_ALPHA;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 3 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 3) && this._isHelixStart(inResidues[i - 1]._index, 3)) {\r\n let empty = true;\r\n for (let j = i; empty && j <= i + 2; ++j) {\r\n empty = typeof this._ss[inResidues[j]._index] === 'undefined'\r\n || this._ss[inResidues[j]._index] === StructureType.HELIX_310;\r\n }\r\n if (empty) {\r\n for (let j = i; j <= i + 2; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_310;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 5 < chainLength; ++i) {\r\n if (this._isHelixStart(inResidues[i]._index, 5) && this._isHelixStart(inResidues[i - 1]._index, 5)) {\r\n let empty = true;\r\n for (let j = i; empty && j <= i + 4; ++j) {\r\n empty = typeof this._ss[inResidues[j]._index] === 'undefined'\r\n || this._ss[inResidues[j]._index] === StructureType.HELIX_PI\r\n || (inPreferPiHelices && this._ss[inResidues[j]._index] === StructureType.HELIX_ALPHA);\r\n }\r\n if (empty) {\r\n for (let j = i; j <= i + 4; ++j) {\r\n this._ss[inResidues[j]._index] = StructureType.HELIX_PI;\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (let i = 1; i + 1 < chainLength; ++i) {\r\n if (typeof this._ss[inResidues[i]._index] === 'undefined') {\r\n let isTurn = false;\r\n for (let stride = 3; stride <= 5 && !isTurn; ++stride) {\r\n for (let k = 1; k < stride && !isTurn; ++k) {\r\n isTurn = (i >= k) && this._isHelixStart(inResidues[i - k]._index, stride);\r\n }\r\n }\r\n\r\n if (isTurn) {\r\n this._ss[inResidues[i]._index] = StructureType.TURN;\r\n } else if (this._bend[inResidues[i]._index]) {\r\n this._ss[inResidues[i]._index] = StructureType.BEND;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _residueGetCAlpha(res) {\r\n for (let i = 0; i < res._atoms.length; ++i) {\r\n const { name } = res._atoms[i];\r\n if (name === 'CA'\r\n || name === 'C1') {\r\n return res._atoms[i].position;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n _cosinusAngle(p1, p2, p3, p4) {\r\n const v12 = p1.clone().sub(p2);\r\n const v34 = p3.clone().sub(p4);\r\n\r\n let result = 0;\r\n\r\n const x = v12.dot(v12) * v34.dot(v34);\r\n if (x > 0) {\r\n result = v12.dot(v34) / Math.sqrt(x);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _kappa(prevPrev, res, nextNext) {\r\n const curCA = this._residueGetCAlpha(res);\r\n const ppCA = this._residueGetCAlpha(prevPrev);\r\n const nnCA = this._residueGetCAlpha(nextNext);\r\n if (curCA === null || ppCA === null || nnCA === null) {\r\n return 180;\r\n }\r\n\r\n const ckap = this._cosinusAngle(curCA, ppCA, nnCA, curCA);\r\n const skap = Math.sqrt(1 - ckap * ckap);\r\n return Math.atan2(skap, ckap) * 180 / Math.PI;\r\n }\r\n\r\n _isHelixStart(res, stride) {\r\n return (this._helixFlags[stride][res] === HelixFlag.START\r\n || this._helixFlags[stride][res] === HelixFlag.START_AND_END);\r\n }\r\n\r\n _buildBetaSheets() {\r\n // find bridges\r\n // check each chain against each other chain, and against itself\r\n const bridges = [];\r\n for (let a = 0; a < this._complex._chains.length; ++a) {\r\n const lenA = this._chainLengths[a];\r\n if (lenA <= 4) {\r\n continue;\r\n }\r\n\r\n const chainA = this._complex._chains[a].getResidues();\r\n\r\n for (let b = a; b < this._complex._chains.length; ++b) {\r\n const lenB = this._chainLengths[b];\r\n if (lenB <= 4) {\r\n continue;\r\n }\r\n\r\n const chainB = this._complex._chains[b].getResidues();\r\n\r\n for (let i = 1; i + 1 < lenA; ++i) {\r\n const ri = chainA[i];\r\n\r\n let j = 1;\r\n if (b === a) {\r\n j = i + 3; // check for self-bridges forward down the chain\r\n }\r\n\r\n for (; j + 1 < lenB; ++j) {\r\n const rj = chainB[j];\r\n\r\n const type = this._testBridge(chainA, i, chainB, j);\r\n if (type === BridgeType.NO_BRIDGE) {\r\n continue;\r\n }\r\n\r\n // there is a bridge, try to attach it to previously found sequence\r\n let found = false;\r\n for (const bridge of bridges) {\r\n if (type !== bridge.type || ri._index !== bridge.i[bridge.i.length - 1] + 1) {\r\n continue;\r\n }\r\n\r\n if (type === BridgeType.PARALLEL && bridge.j[bridge.j.length - 1] + 1 === rj._index) {\r\n bridge.i.push(ri._index);\r\n bridge.j.push(rj._index);\r\n found = true;\r\n break;\r\n }\r\n\r\n if (type === BridgeType.ANTI_PARALLEL && bridge.j[0] - 1 === rj._index) {\r\n bridge.i.push(ri._index);\r\n bridge.j.unshift(rj._index);\r\n found = true;\r\n break;\r\n }\r\n }\r\n\r\n // this bridge cannot be attached anywhere, start a new sequence\r\n if (!found) {\r\n bridges.push({\r\n type,\r\n i: [ri._index],\r\n chainI: ri.getChain()._index,\r\n j: [rj._index],\r\n chainJ: rj.getChain()._index,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // extend ladders\r\n bridges.sort((a, b) => {\r\n if (a.chainI < b.chainI || (a.chainI === b.chainI && a.i[0] < b.i[0])) {\r\n return -1;\r\n }\r\n return 1;\r\n });\r\n\r\n for (let i = 0; i < bridges.length; ++i) {\r\n for (let j = i + 1; j < bridges.length; ++j) {\r\n const ibi = bridges[i].i[0];\r\n const iei = bridges[i].i[bridges[i].i.length - 1];\r\n const jbi = bridges[i].j[0];\r\n const jei = bridges[i].j[bridges[i].j.length - 1];\r\n const ibj = bridges[j].i[0];\r\n const iej = bridges[j].i[bridges[j].i.length - 1];\r\n const jbj = bridges[j].j[0];\r\n const jej = bridges[j].j[bridges[j].j.length - 1];\r\n\r\n if (bridges[i].type !== bridges[j].type\r\n || this._hasChainBreak(Math.min(ibi, ibj), Math.max(iei, iej))\r\n || this._hasChainBreak(Math.min(jbi, jbj), Math.max(jei, jej))\r\n || ibj - iei >= 6 || (iei >= ibj && ibi <= iej)) {\r\n continue;\r\n }\r\n\r\n let bulge = false;\r\n if (bridges[i].type === BridgeType.PARALLEL) {\r\n bulge = ((jbj - jei < 6 && ibj - iei < 3) || (jbj - jei < 3));\r\n } else {\r\n bulge = ((jbi - jej < 6 && ibj - iei < 3) || (jbi - jej < 3));\r\n }\r\n\r\n if (bulge) {\r\n bridges[i].i = bridges[i].i.concat(bridges[j].i);\r\n if (bridges[i].type === BridgeType.PARALLEL) {\r\n bridges[i].j = bridges[i].j.concat(bridges[j].j);\r\n } else {\r\n bridges[i].j = bridges[j].j.concat(bridges[i].j);\r\n }\r\n bridges.splice(j--, 1);\r\n }\r\n }\r\n }\r\n\r\n // Sheet\r\n const ladderset = new Set();\r\n for (let i = 0; i < bridges.length; ++i) {\r\n ladderset.add(bridges[i]);\r\n }\r\n\r\n let sheet = 1;\r\n let ladder = 0;\r\n while (ladderset.size > 0) {\r\n let bridge = ladderset.values().next().value;\r\n ladderset.delete(bridge);\r\n\r\n const sheetset = new Set();\r\n sheetset.add(bridge);\r\n\r\n let toMove;\r\n do {\r\n toMove = new Set();\r\n for (const a of sheetset.values()) {\r\n for (const b of ladderset.values()) {\r\n if (this._areBridgesLinked(a, b)) {\r\n toMove.add(b);\r\n }\r\n }\r\n }\r\n for (bridge of toMove.values()) {\r\n sheetset.add(bridge);\r\n ladderset.delete(bridge);\r\n }\r\n } while (toMove.size > 0);\r\n\r\n for (bridge of sheetset.values()) {\r\n bridge.ladder = ladder;\r\n bridge.sheet = sheet;\r\n bridge.link = sheetset;\r\n ++ladder;\r\n }\r\n\r\n ++sheet;\r\n }\r\n\r\n for (let i = 0; i < bridges.length; ++i) {\r\n const bridge = bridges[i];\r\n\r\n // find out if any of the i and j set members already have\r\n // a bridge assigned, if so, we're assigning bridge 2\r\n\r\n let betai = 0;\r\n let betaj = 0;\r\n\r\n for (let l = 0; l < bridge.i.length; ++l) {\r\n if (this._betaPartners[bridge.i[l]][0]) {\r\n betai = 1;\r\n break;\r\n }\r\n }\r\n\r\n for (let l = 0; l < bridge.j.length; ++l) {\r\n if (this._betaPartners[bridge.j[l]][0]) {\r\n betaj = 1;\r\n break;\r\n }\r\n }\r\n\r\n let ss = StructureType.BRIDGE;\r\n if (bridge.i.length > 1) {\r\n ss = StructureType.STRAND;\r\n }\r\n\r\n if (bridge.type === BridgeType.PARALLEL) {\r\n let j = 0;\r\n for (let k = 0; k < bridge.i.length; ++k) {\r\n this._betaPartners[bridge.i[k]][betai] = {\r\n residue: bridge.j[j++],\r\n ladder: bridge.ladder,\r\n parallel: true,\r\n };\r\n }\r\n\r\n j = 0;\r\n for (let k = 0; k < bridge.j.length; ++k) {\r\n this._betaPartners[bridge.j[k]][betaj] = {\r\n residue: bridge.i[j++],\r\n ladder: bridge.ladder,\r\n parallel: true,\r\n };\r\n }\r\n } else {\r\n let j = bridge.j.length - 1;\r\n for (let k = 0; k < bridge.i.length; ++k) {\r\n this._betaPartners[bridge.i[k]][betai] = {\r\n residue: bridge.j[j--],\r\n ladder: bridge.ladder,\r\n parallel: false,\r\n };\r\n }\r\n\r\n j = bridge.i.length - 1;\r\n for (let k = 0; k < bridge.j.length; ++k) {\r\n this._betaPartners[bridge.j[k]][betaj] = {\r\n residue: bridge.i[j--],\r\n ladder: bridge.ladder,\r\n parallel: false,\r\n };\r\n }\r\n }\r\n\r\n for (let k = bridge.i[0]; k <= bridge.i[bridge.i.length - 1]; ++k) {\r\n if (this._ss[k] !== StructureType.STRAND) {\r\n this._ss[k] = ss;\r\n this._sheet[k] = bridge.sheet;\r\n }\r\n }\r\n\r\n for (let k = bridge.j[0]; k <= bridge.j[bridge.j.length - 1]; ++k) {\r\n if (this._ss[k] !== StructureType.STRAND) {\r\n this._ss[k] = ss;\r\n this._sheet[k] = bridge.sheet;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _testBridge(chainA, from, chainB, to) {\r\n let result = BridgeType.NO_BRIDGE;\r\n\r\n const a = chainA[from - 1]._index;\r\n const b = chainA[from]._index;\r\n const c = chainA[from + 1]._index;\r\n const d = chainB[to - 1]._index;\r\n const e = chainB[to]._index;\r\n const f = chainB[to + 1]._index;\r\n\r\n const isBond = this._hbonds.isBond.bind(this._hbonds);\r\n if ((isBond(c, e) && isBond(e, a)) || (isBond(f, b) && isBond(b, d))) {\r\n result = BridgeType.PARALLEL;\r\n } else if ((isBond(c, d) && isBond(f, a)) || (isBond(e, b) && isBond(b, e))) {\r\n result = BridgeType.ANTI_PARALLEL;\r\n }\r\n return result;\r\n }\r\n\r\n // return true if any of the residues in bridge a is identical to any of the residues in bridge b\r\n _areBridgesLinked(a, b) {\r\n const ai = new Set(a.i);\r\n const aj = new Set(a.j);\r\n\r\n for (const i of b.i) {\r\n if (ai.has(i) || aj.has(i)) {\r\n return true;\r\n }\r\n }\r\n\r\n for (const i of b.j) {\r\n if (ai.has(i) || aj.has(i)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n _hasChainBreak(from, to) {\r\n for (let i = from + 1; i <= to; ++i) {\r\n if (this._complex._residues[i]._sequence !== this._complex._residues[i - 1]._sequence + 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nSecondaryStructureMap.StructureType = StructureType;\r\n","import * as THREE from 'three';\r\nimport logger from '../utils/logger';\r\nimport Atom from './Atom';\r\nimport Chain from './Chain';\r\nimport Helix from './Helix';\r\nimport Strand from './Strand';\r\nimport Sheet from './Sheet';\r\nimport Component from './Component';\r\nimport ResidueType from './ResidueType';\r\nimport Bond from './Bond';\r\nimport AutoBond from './AutoBond';\r\nimport AromaticLoopsMarker from './AromaticLoopsMarker';\r\nimport BiologicalUnit from './BiologicalUnit';\r\nimport selectors from './selectors';\r\nimport VoxelWorld from './VoxelWorld';\r\nimport SecondaryStructureMap from './SecondaryStructureMap';\r\nimport StructuralElement from './StructuralElement';\r\n\r\nconst VOXEL_SIZE = 5.0;\r\n\r\nconst { StructureType } = SecondaryStructureMap;\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\n// see http://www.wwpdb.org/documentation/file-format-content/format33/sect5.html#HELIX\r\nconst helixClassMap = {\r\n [StructureType.HELIX_ALPHA]: 1,\r\n [StructureType.HELIX_PI]: 3,\r\n [StructureType.HELIX_310]: 5,\r\n};\r\n\r\nconst loopMap = {\r\n [StructureType.BRIDGE]: StructuralElementType.BRIDGE,\r\n [StructureType.TURN]: StructuralElementType.TURN,\r\n [StructureType.BEND]: StructuralElementType.BEND,\r\n [StructureType.LOOP]: StructuralElementType.COIL,\r\n};\r\n\r\n/**\r\n * The entire complex of the molecules under study.\r\n *\r\n * @exports Complex\r\n * @constructor\r\n */\r\nclass Complex {\r\n constructor() {\r\n this._chains = [];\r\n this._components = [];\r\n this._helices = [];\r\n this._sheets = [];\r\n this.structures = [];\r\n\r\n this._residueTypes = Object.create(ResidueType.StandardTypes);\r\n this._atoms = [];\r\n this._residues = [];\r\n this._bonds = [];\r\n this._sgroups = [];\r\n this._molecules = [];\r\n this._maskNeedsUpdate = false;\r\n\r\n this.metadata = {};\r\n\r\n this.symmetry = [];\r\n this.units = [new BiologicalUnit(this)];\r\n this._currentUnit = 0; // default biological unit is the asymmetric unit\r\n }\r\n\r\n addAtom(atom) {\r\n const index = this._atoms.length;\r\n this._atoms.push(atom);\r\n return index;\r\n }\r\n\r\n addSheet(sheet) {\r\n const index = this._sheets.length;\r\n this._sheets.push(sheet);\r\n return index;\r\n }\r\n\r\n addHelix(helix) {\r\n const index = this._helices.length;\r\n this._helices.push(helix);\r\n return index;\r\n }\r\n\r\n getAtoms() {\r\n return this._atoms;\r\n }\r\n\r\n getBonds() {\r\n return this._bonds;\r\n }\r\n\r\n getAtomCount() {\r\n return this._atoms.length;\r\n }\r\n\r\n addResidue(residue) {\r\n const index = this._residues.length;\r\n this._residues.push(residue);\r\n return index;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n this.forEachChain((chain) => {\r\n chain.updateToFrame(frameData);\r\n });\r\n }\r\n\r\n addResidueType(resName) {\r\n const rt = this._residueTypes[resName] = new ResidueType(resName, 'Unknown', '');\r\n return rt;\r\n }\r\n\r\n getResidueCount() {\r\n return this._residues.length;\r\n }\r\n\r\n getResidues() {\r\n return this._residues;\r\n }\r\n\r\n getSGroupCount() {\r\n return this._sgroups.length;\r\n }\r\n\r\n getSGroups() {\r\n return this._sgroups;\r\n }\r\n\r\n /*\r\n Extract atom by its fullname: #chainName#.#residueId#.#atomName#\r\n */\r\n getAtomByFullname(fullName) {\r\n const parts = fullName.split('.');\r\n if (parts.length !== 3) {\r\n return null;\r\n }\r\n\r\n const chainName = parts[0];\r\n const resId = parseInt(parts[1], 10);\r\n if (Number.isNaN(resId)) {\r\n return null;\r\n }\r\n const atomName = parts[2].toUpperCase();\r\n\r\n let currAtom = null;\r\n this.forEachChain((chain) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (chain._name.localeCompare(chainName) === 0) {\r\n chain.forEachResidue((residue) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (residue._sequence === resId) {\r\n residue.forEachAtom((atom) => {\r\n if (currAtom) {\r\n return;\r\n }\r\n if (atomName.localeCompare(atom.name) === 0) {\r\n currAtom = atom;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n });\r\n\r\n return currAtom;\r\n }\r\n\r\n /**\r\n * Create a new chain.\r\n *\r\n * @param {string} name - Chain name.\r\n * @returns {Chain} - Newly created chain.\r\n */\r\n addChain(name) {\r\n const result = new Chain(this, name);\r\n this._chains.push(result);\r\n return result;\r\n }\r\n\r\n getChain(name) {\r\n for (let i = 0, n = this._chains.length; i < n; ++i) {\r\n const chain = this._chains[i];\r\n if (chain.getName() === name) {\r\n return chain;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getChainCount() {\r\n return this._chains.length;\r\n }\r\n\r\n getMolecules() {\r\n return this._molecules;\r\n }\r\n\r\n getMoleculeCount() {\r\n return this._molecules.length;\r\n }\r\n\r\n forEachAtom(process) {\r\n const atoms = this._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n process(atoms[i]);\r\n }\r\n }\r\n\r\n forEachBond(process) {\r\n const bonds = this._bonds;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n process(bonds[i]);\r\n }\r\n }\r\n\r\n forEachResidue(process) {\r\n const residues = this._residues;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n forEachChain(process) {\r\n const chains = this._chains;\r\n for (let i = 0, n = chains.length; i < n; ++i) {\r\n process(chains[i]);\r\n }\r\n }\r\n\r\n forEachMolecule(process) {\r\n const molecules = this._molecules;\r\n const n = molecules.length;\r\n for (let i = 0; i < n; ++i) {\r\n process(molecules[i]);\r\n }\r\n }\r\n\r\n forEachSGroup(process) {\r\n const groups = this._sgroups;\r\n for (let i = 0, n = groups.length; i < n; ++i) {\r\n process(groups[i]);\r\n }\r\n }\r\n\r\n forEachComponent(process) {\r\n const components = this._components;\r\n for (let i = 0, n = components.length; i < n; ++i) {\r\n process(components[i]);\r\n }\r\n }\r\n\r\n forEachVisibleComponent(process) {\r\n const components = this._components;\r\n for (let i = 0, n = components.length; i < n; ++i) {\r\n process(components[i]);\r\n }\r\n }\r\n\r\n addBond(left, right, order, type, fixed) {\r\n const bond = new Bond(left, right, order, type, fixed);\r\n this._bonds.push(bond);\r\n return bond;\r\n }\r\n\r\n getBondCount() {\r\n return this._bonds.length;\r\n }\r\n\r\n getResidueType(name) {\r\n return this._residueTypes[name] || null;\r\n }\r\n\r\n getUnifiedSerial(chain, serial, iCode) {\r\n const maxSerial = 65536;\r\n const chainShift = maxSerial * 256;\r\n return serial + iCode * maxSerial + chain * chainShift;\r\n }\r\n\r\n splitUnifiedSerial(uniSerial) {\r\n const maxSerial = 65536;\r\n const chainShift = maxSerial * 256;\r\n const chainId = Math.floor(uniSerial / chainShift);\r\n const remnant = uniSerial - chainId * chainShift;\r\n const insCode = Math.floor(remnant / maxSerial);\r\n const ser = remnant - insCode * maxSerial;\r\n return { chain: chainId, serial: ser, iCode: insCode };\r\n }\r\n\r\n _fillCmpEdit() {\r\n const self = this;\r\n const components = this._components;\r\n\r\n function addComp() {\r\n const comp = new Component(self);\r\n comp._index = components.length;\r\n components[comp._index] = comp;\r\n return comp;\r\n }\r\n\r\n this.forEachChain((chain) => {\r\n const residues = chain._residues;\r\n const resCount = residues.length;\r\n if (resCount < 1) {\r\n return;\r\n }\r\n let comp = addComp();\r\n let currStart = residues[0]._index;\r\n\r\n for (let i = 0; i < resCount; ++i) {\r\n const currRes = residues[i];\r\n currRes._component = comp;\r\n\r\n const nextRes = i === resCount - 1 ? null : residues[i + 1];\r\n if (!nextRes\r\n || !currRes.isConnected(nextRes)\r\n || currRes._index !== nextRes._index - 1) {\r\n // the last condition is broken and incorrect\r\n // the refactoring of the Component is required in order to fix this issue\r\n comp.setSubDivs([{\r\n start: currStart,\r\n end: currRes._index,\r\n }]);\r\n if (nextRes) {\r\n currStart = nextRes._index;\r\n comp = addComp();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n // This function was added in the moment of despair\r\n // It was the dark times for miew\r\n _fillCmpNoedit() {\r\n const comp = new Component(this);\r\n comp._index = 0;\r\n\r\n const residues = this._residues;\r\n const resCount = residues.length;\r\n if (resCount === 0) {\r\n return;\r\n }\r\n\r\n const currSubDivs = [];\r\n let currStart = 0;\r\n for (let i = 0; i < resCount; ++i) {\r\n const currRes = residues[i];\r\n currRes._component = comp;\r\n\r\n const nextRes = i === resCount - 1 ? null : residues[i + 1];\r\n if (!nextRes\r\n || !currRes.isConnected(nextRes)) {\r\n // wrap up this interval\r\n currSubDivs[currSubDivs.length] = {\r\n start: currStart,\r\n end: i,\r\n };\r\n if (nextRes) {\r\n currStart = i + 1;\r\n }\r\n }\r\n }\r\n\r\n comp.setSubDivs(currSubDivs);\r\n this._components[comp._index] = comp;\r\n }\r\n\r\n /**\r\n * Fill components information.\r\n * @param {boolean} enableEditing - Restructure Complex to enable per-component editing.\r\n */\r\n _fillComponents(enableEditing) {\r\n if (enableEditing) {\r\n this._fillCmpEdit();\r\n } else {\r\n this._fillCmpNoedit();\r\n }\r\n }\r\n\r\n getCurrentUnit() {\r\n return this._currentUnit;\r\n }\r\n\r\n getDefaultBoundaries() {\r\n return this.units[0].getBoundaries();\r\n }\r\n\r\n getBoundaries() {\r\n return this.units[this._currentUnit].getBoundaries();\r\n }\r\n\r\n getTransforms() {\r\n return this.units[this._currentUnit].getTransforms();\r\n }\r\n\r\n getSelector() {\r\n return this.units[this._currentUnit].getSelector();\r\n }\r\n\r\n resetCurrentUnit() {\r\n this._currentUnit = 0;\r\n this.setCurrentUnit(1);\r\n }\r\n\r\n setCurrentUnit(newUnit) {\r\n if (newUnit !== null && newUnit !== undefined\r\n && newUnit !== this._currentUnit\r\n && newUnit >= 0\r\n && newUnit < this.units.length) {\r\n this._currentUnit = newUnit;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n _computeBounds() {\r\n const { units } = this;\r\n for (let i = 0, n = units.length; i < n; ++i) {\r\n units[i].computeBoundaries();\r\n }\r\n }\r\n\r\n onAtomPositionChanged() {\r\n this.forEachChain((a) => {\r\n a._finalize();\r\n });\r\n this.forEachComponent((c) => {\r\n c.update();\r\n });\r\n // Update bounding sphere and box\r\n this._computeBounds();\r\n this._finalizeBonds();\r\n this.forEachSGroup((s) => {\r\n s._rebuildSGroupOnAtomChange();\r\n });\r\n }\r\n\r\n update() {\r\n if (this._maskNeedsUpdate) {\r\n this.updateStructuresMask();\r\n this._maskNeedsUpdate = false;\r\n }\r\n }\r\n\r\n _finalizeBonds() {\r\n const bonds = this.getBonds();\r\n const n = bonds.length;\r\n for (let i = 0; i < n; ++i) {\r\n bonds[i]._index = i;\r\n }\r\n }\r\n\r\n /**\r\n * Finalizes complex's inner data(i.e. after parsing).\r\n * @param {objects} opts - Build bonds automatically.\r\n * @param {boolean} opts.needAutoBonding - Build bonds automatically.\r\n * @param {boolean} opts.detectAromaticLoops - Find/mark aromatic loops.\r\n * @param {boolean} opts.enableEditing - Restructure Complex to enable per-component editing.\r\n * @param {Array} [opts.serialAtomMap] - Array of atoms ordered by their serials.\r\n */\r\n finalize(opts) {\r\n opts = opts || {};\r\n // Put bonds into atoms\r\n const bonds = this._bonds;\r\n let i;\r\n let n;\r\n // remove invalid bonds\r\n for (i = bonds.length - 1; i >= 0; i--) {\r\n const bond = bonds[i];\r\n if (bond._left === null || bond._right === null) {\r\n bonds.splice(i, 1);\r\n } else {\r\n bond._left.bonds.push(bond);\r\n bond._right.bonds.push(bond);\r\n }\r\n }\r\n\r\n const residues = this._residues;\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n residues[i]._finalize();\r\n }\r\n\r\n this.forEachChain((a) => {\r\n a._finalize();\r\n });\r\n\r\n // WARNING! this MUST be done BEFORE computeBounds is called\r\n const { units } = this;\r\n for (i = 0, n = units.length; i < n; ++i) {\r\n units[i].finalize();\r\n }\r\n // try setting first biomolecule by defaults\r\n this.setCurrentUnit(1);\r\n\r\n const residueHash = {};\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n const res = residues[i];\r\n // This code is extremely dangerous for non-PDB formats\r\n residueHash[this.getUnifiedSerial(\r\n res.getChain().getName().charCodeAt(0),\r\n res.getSequence(),\r\n res.getICode().charCodeAt(0),\r\n )] = res;\r\n }\r\n\r\n const { structures } = this;\r\n for (i = 0, n = structures.length; i < n; ++i) {\r\n structures[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n const helices = this._helices;\r\n for (i = 0, n = helices.length; i < n; ++i) {\r\n helices[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n const sheets = this._sheets;\r\n for (i = 0, n = sheets.length; i < n; ++i) {\r\n sheets[i]._finalize(opts.serialAtomMap, residueHash, this);\r\n }\r\n\r\n // Update bounding sphere and box\r\n this._computeBounds();\r\n\r\n const atoms = this._atoms;\r\n for (i = 0, n = atoms.length; i < n; ++i) {\r\n const currAtom = atoms[i];\r\n currAtom.index = i;\r\n }\r\n\r\n if (opts.needAutoBonding) {\r\n // Ignore errors during autobonding\r\n try {\r\n const autoConnector = new AutoBond(this);\r\n autoConnector.build();\r\n autoConnector.destroy();\r\n } catch (e) {\r\n console.warn('Autobonding failed:', e);\r\n }\r\n }\r\n\r\n const chains = this._chains;\r\n for (i = 0, n = chains.length; i < n; ++i) {\r\n chains[i]._index = i;\r\n }\r\n\r\n for (i = 0, n = residues.length; i < n; ++i) {\r\n residues[i]._index = i;\r\n }\r\n\r\n // mark non-polar hydrogens\r\n for (i = 0, n = atoms.length; i < n; ++i) {\r\n const atom = atoms[i];\r\n if (atom.flags & Atom.Flags.HYDROGEN && atom.bonds.length === 1) {\r\n const bond = atom.bonds[0];\r\n const other = (bond._left !== atom && bond._left) || bond._right;\r\n if (other.flags & Atom.Flags.CARBON) {\r\n atom.flags |= Atom.Flags.NONPOLARH;\r\n }\r\n }\r\n }\r\n\r\n this._finalizeBonds();\r\n this._fillComponents(opts.enableEditing);\r\n\r\n const marker = new AromaticLoopsMarker(this);\r\n marker.markCycles();\r\n if (opts.detectAromaticLoops) { // TODO remove this condition clause, it is for debug purposes only!\r\n marker.detectCycles(); // TODO add conditional detection\r\n }\r\n\r\n this._finalizeMolecules();\r\n }\r\n\r\n _finalizeMolecules() {\r\n // add reference to molecule into residue\r\n for (let i = 0; i < this._molecules.length; i++) {\r\n const molecule = this._molecules[i];\r\n const count = molecule.residues.length;\r\n for (let j = 0; j < count; j++) {\r\n const residue = molecule.residues[j];\r\n residue._molecule = molecule;\r\n }\r\n }\r\n }\r\n\r\n updateStructuresMask() {\r\n const updater = (structure) => structure.collectMask();\r\n this.forEachResidue(updater);\r\n this.forEachChain(updater);\r\n this.forEachMolecule(updater);\r\n }\r\n\r\n countAtomsByMask(mask) {\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if ((atom.mask & mask) !== 0) {\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n getNumAtomsBySelector(selector) {\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom)) {\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n resetAtomMask(mask) {\r\n this.forEachAtom((atom) => {\r\n atom.mask = mask;\r\n });\r\n }\r\n\r\n markAtoms(selector, mask) {\r\n const setMask = mask;\r\n const clearMask = ~setMask;\r\n let count = 0;\r\n const totalSelector = selectors.keyword('And')(selector, this.getSelector());\r\n\r\n this.forEachAtom((atom) => {\r\n if (totalSelector.includesAtom(atom)) {\r\n atom.mask |= setMask;\r\n count++;\r\n } else {\r\n atom.mask &= clearMask;\r\n }\r\n });\r\n this._maskNeedsUpdate = true;\r\n\r\n return count;\r\n }\r\n\r\n markAtomsAdditionally(selector, mask) {\r\n const setMask = mask;\r\n let count = 0;\r\n\r\n this.forEachAtom((atom) => {\r\n if (selector.includesAtom(atom) && (atom.mask & mask) !== mask) {\r\n atom.mask |= setMask;\r\n count++;\r\n }\r\n });\r\n\r\n return count;\r\n }\r\n\r\n clearAtomBits(mask) {\r\n const clearMask = ~mask;\r\n this.forEachAtom((atom) => {\r\n atom.mask &= clearMask;\r\n });\r\n const reseter = (a) => {\r\n a._mask &= clearMask;\r\n };\r\n this.forEachAtom(reseter);\r\n this.forEachResidue(reseter);\r\n this.forEachChain(reseter);\r\n this.forEachMolecule(reseter);\r\n }\r\n\r\n getAtomNames() {\r\n if (this.hasOwnProperty('_atomNames')) {\r\n return this._atomNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[atom.name] = 1;\r\n });\r\n this._atomNames = Object.keys(dict);\r\n\r\n return this._atomNames;\r\n }\r\n\r\n getElements() {\r\n if (this.hasOwnProperty('_elements')) {\r\n return this._elements;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[atom.element.name] = 1;\r\n });\r\n this._elements = Object.keys(dict);\r\n\r\n return this._elements;\r\n }\r\n\r\n getResidueNames() {\r\n if (this.hasOwnProperty('_residueNames')) {\r\n return this._residueNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachResidue((res) => {\r\n dict[res._type._name] = 1;\r\n });\r\n this._residueNames = Object.keys(dict);\r\n\r\n return this._residueNames;\r\n }\r\n\r\n getChainNames() {\r\n if (this.hasOwnProperty('_chainNames')) {\r\n return this._chainNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachChain((chain) => {\r\n dict[chain._name] = 1;\r\n });\r\n this._chainNames = Object.keys(dict);\r\n\r\n return this._chainNames;\r\n }\r\n\r\n getAltLocNames() {\r\n if (this.hasOwnProperty('_altlocNames')) {\r\n return this._altlocNames;\r\n }\r\n\r\n const dict = {};\r\n this.forEachAtom((atom) => {\r\n dict[String.fromCharCode(atom.location)] = 1;\r\n });\r\n this._altlocNames = Object.keys(dict);\r\n\r\n return this._altlocNames;\r\n }\r\n\r\n getVoxelWorld() {\r\n if (!this.hasOwnProperty('_voxelWorld')) {\r\n try {\r\n this._voxelWorld = new VoxelWorld(\r\n this.getDefaultBoundaries().boundingBox,\r\n new THREE.Vector3(VOXEL_SIZE, VOXEL_SIZE, VOXEL_SIZE),\r\n );\r\n this._voxelWorld.addAtoms(this);\r\n } catch {\r\n logger.warn('Unable to create voxel world');\r\n this._voxelWorld = null;\r\n }\r\n }\r\n\r\n return this._voxelWorld;\r\n }\r\n\r\n /**\r\n * Simple function to make unified routine procedure without code duplication.\r\n * @param {Array} srcArray - Source chemical structure array (will be part of resulting chemical structure array).\r\n * @param {Array} dstArray - Resulting chemical structure array.\r\n * @param {number} param - Parameter for processor.\r\n * @param {function} functor - Processor for every element in array.\r\n */\r\n addElement(srcArray, dstArray, param, functor) {\r\n const { length } = srcArray;\r\n for (let i = 0; i < length; ++i) {\r\n const elem = srcArray[i];\r\n functor(elem, param);\r\n dstArray.push(elem);\r\n }\r\n }\r\n\r\n // this function joins multiple complexes into one (this)\r\n // atom, bond, ... objects are reused -- so input complexes are no longer valid\r\n joinComplexes(complexes) {\r\n // clear target complex\r\n this._chains = [];\r\n this._components = [];\r\n this._helices = [];\r\n this._sheets = [];\r\n this.structures = [];\r\n this._atoms = [];\r\n this._residues = [];\r\n this._bonds = [];\r\n this._sgroups = [];\r\n\r\n const self = this;\r\n let atomBias = 0;\r\n let bondBias = 0;\r\n let residueBias = 0;\r\n let chainBias = 0;\r\n let componentBias = 0;\r\n\r\n function processAtom(atom, bias) {\r\n atom.serial += bias;\r\n atom.index += bias;\r\n }\r\n\r\n function processBond(bond, bias) {\r\n bond._index += bias;\r\n }\r\n\r\n function processResidue(residue, bias) {\r\n residue._index += bias;\r\n }\r\n\r\n function processChain(chain, bias) {\r\n chain._complex = self;\r\n chain._index += bias;\r\n }\r\n\r\n function processComponent(component, bias) {\r\n component._complex = self;\r\n component._index += bias;\r\n }\r\n\r\n /**\r\n * Simple function to do nothing.\r\n */\r\n function doNothing() {\r\n }\r\n\r\n for (let i = 0; i < complexes.length; ++i) {\r\n const c = complexes[i];\r\n this.addElement(c._atoms, this._atoms, atomBias, processAtom);\r\n this.addElement(c._bonds, this._bonds, bondBias, processBond);\r\n this.addElement(c._residues, this._residues, residueBias, processResidue);\r\n this.addElement(c._chains, this._chains, chainBias, processChain);\r\n this.addElement(c._sheets, this._sheets, 0, doNothing);\r\n this.addElement(c._helices, this._helices, 0, doNothing);\r\n this.addElement(c._sgroups, this._sgroups, 0, doNothing);\r\n this.addElement(c._components, this._components, componentBias, processComponent);\r\n this.addElement(c.structures, this.structures, 0, doNothing);\r\n // merge residue types\r\n for (const rt in c._residueTypes) {\r\n if (c._residueTypes.hasOwnProperty(rt)) {\r\n this._residueTypes[rt] = c._residueTypes[rt];\r\n }\r\n }\r\n\r\n atomBias += c._atoms.length;\r\n bondBias += c._bonds.length;\r\n residueBias += c._residues.length;\r\n chainBias += c._chains.length;\r\n componentBias += c._components.length;\r\n }\r\n\r\n this._computeBounds();\r\n }\r\n\r\n /**\r\n * Replace secondary structure with calculated one.\r\n *\r\n * DSSP algorithm implementation is used.\r\n *\r\n * Kabsch W, Sander C. 1983. Dictionary of protein secondary structure: pattern recognition of hydrogen-bonded and\r\n * geometrical features. Biopolymers. 22(12):2577-2637. doi:10.1002/bip.360221211.\r\n */\r\n dssp() {\r\n const ssMap = new SecondaryStructureMap(this);\r\n\r\n const structures = this.structures = [];\r\n const helices = this._helices = [];\r\n const sheets = this._sheets = [];\r\n\r\n const getSheet = (index) => {\r\n let item = sheets[index];\r\n if (!item) {\r\n item = sheets[index] = new Sheet(String(index), 0);\r\n }\r\n return item;\r\n };\r\n\r\n let lastCode;\r\n let lastSheetIndex;\r\n let lastHelixIndex = 0;\r\n let curStructure = null;\r\n for (let i = 0, n = this._residues.length; i < n; ++i) {\r\n const curCode = ssMap._ss[i];\r\n const curResidue = this._residues[i];\r\n const curSheetIndex = ssMap._sheet[i];\r\n\r\n // expand the last structure\r\n if (curCode === lastCode && curSheetIndex === lastSheetIndex) {\r\n curResidue._secondary = curStructure;\r\n if (curStructure) {\r\n curStructure.term = curResidue;\r\n }\r\n if (curStructure instanceof Helix) {\r\n curStructure.length++;\r\n }\r\n continue;\r\n }\r\n\r\n // create a new structure\r\n const helixClass = helixClassMap[curCode];\r\n const loopType = loopMap[curCode];\r\n if (curCode === StructureType.STRAND) {\r\n const curSheet = getSheet(curSheetIndex);\r\n curStructure = new Strand(curSheet, curResidue, curResidue, 0, null, null);\r\n curSheet.addStrand(curStructure);\r\n } else if (helixClass !== undefined) {\r\n lastHelixIndex++;\r\n curStructure = new Helix(helixClass, curResidue, curResidue, lastHelixIndex, String(lastHelixIndex), '', 1);\r\n helices.push(curStructure);\r\n } else if (loopType !== undefined) {\r\n curStructure = new StructuralElement(loopType, curResidue, curResidue);\r\n } else {\r\n curStructure = null;\r\n }\r\n\r\n if (curStructure) {\r\n structures.push(curStructure);\r\n }\r\n\r\n curResidue._secondary = curStructure;\r\n\r\n lastCode = curCode;\r\n lastSheetIndex = curSheetIndex;\r\n }\r\n\r\n this._sheets = sheets.filter((_sheet) => true); // squeeze sheets array\r\n }\r\n}\r\n\r\nComplex.prototype.id = 'Complex';\r\nComplex.prototype.name = '';\r\n\r\nexport default Complex;\r\n","import * as THREE from 'three';\r\nimport utils from '../utils';\r\n\r\nfunction pow2ceil(v) {\r\n let p = 2;\r\n v = (v - 1) >> 1;\r\n while (v) {\r\n p <<= 1;\r\n v >>= 1;\r\n }\r\n return p;\r\n}\r\n\r\n/**\r\n * Volume constructor\r\n *\r\n * @param {Object} type - Float32Array, Int8Array, etc...\r\n * @param {Object|Array} dimensions - number of data points on each axis (x, y, z)\r\n * @param {Box3} box - bounding box defining data place in metric space,\r\n * it's corners correspond to extreme data points\r\n * @param {Number} vecSize - dimension of the field data point (1 = scalar, 3 = 3D vector)\r\n * @param {Object} data - typed array of the same type as specified by the 1st parameter,\r\n * layout: point by point along X,\r\n * row by row along Y,\r\n * plane by plane along Z\r\n * @param {Number} volumeInfo - volume info values to define threshold to filter the noise\r\n */\r\n\r\nclass Volume {\r\n constructor(type, dimensions, box, vecSize, data, volumeInfo) {\r\n this._box = box.clone();\r\n this._dimVec = Math.max(Math.floor(vecSize || 1), 1);\r\n this._volumeInfo = volumeInfo;\r\n\r\n if (dimensions instanceof Array) {\r\n [this._dimX, this._dimY, this._dimZ] = dimensions;\r\n } else {\r\n this._dimX = dimensions.x;\r\n this._dimY = dimensions.y;\r\n this._dimZ = dimensions.z;\r\n }\r\n this._dimX = Math.max(Math.floor(this._dimX), 1);\r\n this._dimY = Math.max(Math.floor(this._dimY), 1);\r\n this._dimZ = Math.max(Math.floor(this._dimZ), 1);\r\n\r\n this._rowElements = this._dimVec * this._dimX;\r\n this._planeElements = this._rowElements * this._dimY;\r\n this._totalElements = this._planeElements * this._dimZ;\r\n\r\n this._data = data || utils.allocateTyped(type, this._totalElements);\r\n\r\n // override getter/setter for vector fields\r\n switch (this._dimVec) {\r\n case 1:\r\n break;\r\n\r\n case 2:\r\n this.getValue = function (x, y, z) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n return [this._data[idx], this._data[idx + 1]];\r\n };\r\n\r\n this.setValue = function (x, y, z, a, b) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] = a;\r\n this._data[idx + 1] = b;\r\n };\r\n\r\n this.addValue = function (x, y, z, a, b) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] += a;\r\n this._data[idx + 1] += b;\r\n };\r\n break;\r\n\r\n case 3:\r\n this.getValue = function (x, y, z) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n return [this._data[idx], this._data[idx + 1], this._data[idx + 2]];\r\n };\r\n\r\n this.setValue = function (x, y, z, a, b, c) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] = a;\r\n this._data[idx + 1] = b;\r\n this._data[idx + 2] = c;\r\n };\r\n\r\n this.addValue = function (x, y, z, a, b, c) {\r\n const idx = x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n this._data[idx] += a;\r\n this._data[idx + 1] += b;\r\n this._data[idx + 2] += c;\r\n };\r\n break;\r\n\r\n default:\r\n throw new Error('Volume: invalid vector dimension');\r\n }\r\n }\r\n\r\n // default getter assumes it's a scalar field\r\n getValue(x, y, z) {\r\n return this._data[x + y * this._rowElements + z * this._planeElements];\r\n }\r\n\r\n // default setter assumes it's a scalar field\r\n setValue(x, y, z, val) {\r\n this._data[x + y * this._rowElements + z * this._planeElements] = val;\r\n }\r\n\r\n // default adder assumes it's a scalar field\r\n addValue(x, y, z, val) {\r\n this._data[x + y * this._rowElements + z * this._planeElements] += val;\r\n }\r\n\r\n getDimensions() {\r\n return [this._dimX, this._dimY, this._dimZ];\r\n }\r\n\r\n getBox() {\r\n return this._box;\r\n }\r\n\r\n getVolumeInfo() {\r\n return this._volumeInfo;\r\n }\r\n\r\n getCellSize() {\r\n const boxSize = new THREE.Vector3();\r\n this._box.getSize(boxSize);\r\n const res = new THREE.Vector3();\r\n res.x = this._dimX > 1 ? boxSize.x / (this._dimX - 1) : 0;\r\n res.y = this._dimY > 1 ? boxSize.y / (this._dimY - 1) : 0;\r\n res.z = this._dimZ > 1 ? boxSize.z / (this._dimZ - 1) : 0;\r\n return res;\r\n }\r\n\r\n computeGradient() {\r\n if (this._dimVec !== 1) {\r\n // gradient can only be computed for scalar fields\r\n return null;\r\n }\r\n\r\n // create a 3D vector field of gradients\r\n const gradient = new Volume(Float32Array, [this._dimX, this._dimY, this._dimZ], this._box, 3);\r\n\r\n // calculate cell side lengths\r\n const vl = this.getCellSize();\r\n\r\n // gradient axis scaling values and averaging factors, to correctly\r\n // calculate the gradient for volumes with irregular cell spacing\r\n const vs = new THREE.Vector3(-0.5 / vl.x, -0.5 / vl.y, -0.5 / vl.z);\r\n\r\n // TODO Check for intended bug in VMD (min is zero)\r\n function clamp(val, min, max) {\r\n return Math.min(max, Math.max(min, val));\r\n }\r\n\r\n const xSize = this._dimX;\r\n const ySize = this._dimY;\r\n const zSize = this._dimZ;\r\n const volMap = this._data;\r\n\r\n function _voxelValue(x, y, z) {\r\n return volMap[z * xSize * ySize + y * xSize + x];\r\n }\r\n\r\n for (let zi = 0; zi < zSize; ++zi) {\r\n const zm = clamp(zi - 1, 0, zSize - 1);\r\n const zp = clamp(zi + 1, 0, zSize - 1);\r\n\r\n for (let yi = 0; yi < ySize; ++yi) {\r\n const ym = clamp(yi - 1, 0, ySize - 1);\r\n const yp = clamp(yi + 1, 0, ySize - 1);\r\n\r\n for (let xi = 0; xi < xSize; ++xi) {\r\n const xm = clamp(xi - 1, 0, xSize - 1);\r\n const xp = clamp(xi + 1, 0, xSize - 1);\r\n\r\n // Calculate the volume gradient at each grid cell.\r\n // Gradients are now stored unnormalized, since we need them in pure\r\n // form in order to draw field lines etc. Shading code will now have\r\n // to do renormalization for itself on-the-fly.\r\n\r\n // XXX this gradient is only correct for orthogonal grids, since\r\n // we're using the array index offsets rather to calculate the gradient\r\n // rather than voxel coordinate offsets. This will have to be\r\n // re-worked for non-orthogonal datasets.\r\n\r\n gradient.setValue(\r\n xi,\r\n yi,\r\n zi,\r\n (_voxelValue(xp, yi, zi) - _voxelValue(xm, yi, zi)) * vs.x,\r\n (_voxelValue(xi, yp, zi) - _voxelValue(xi, ym, zi)) * vs.y,\r\n (_voxelValue(xi, yi, zp) - _voxelValue(xi, yi, zm)) * vs.z,\r\n );\r\n }\r\n }\r\n }\r\n\r\n return gradient;\r\n }\r\n\r\n normalize() {\r\n const data = this._data;\r\n\r\n // get min/max\r\n let min = data[0];\r\n let max = data[0];\r\n for (let i = 1; i < data.length; ++i) {\r\n min = Math.min(min, data[i]);\r\n max = Math.max(max, data[i]);\r\n }\r\n\r\n const d = 1.0 / (max - min);\r\n if (d === 0) {\r\n return;\r\n }\r\n\r\n // normalize\r\n for (let i = 0; i < data.length; ++i) {\r\n data[i] = d * (data[i] - min);\r\n }\r\n }\r\n\r\n getTiledTextureStride() {\r\n return [this._dimX + 2, this._dimY + 2];\r\n }\r\n\r\n buildTiledTexture() {\r\n let tilesX = Math.ceil(Math.sqrt(this._dimZ * this._dimY / this._dimX));\r\n\r\n let width = tilesX * (this._dimX + 2) - 1;\r\n width = pow2ceil(width);\r\n tilesX = Math.floor(width / (this._dimX + 2));\r\n\r\n const tilesY = Math.ceil(this._dimZ / tilesX);\r\n let height = tilesY * (this._dimY + 2) - 1;\r\n height = pow2ceil(height);\r\n\r\n const data = new Uint8Array(width * height);\r\n\r\n let src;\r\n let dst;\r\n for (let tileRow = 0; tileRow < tilesY; ++tileRow) {\r\n // process each pixel row of this tile row\r\n for (let row = 0; row < this._dimY; ++row) {\r\n src = tileRow * tilesX * this._planeElements + row * this._rowElements;\r\n dst = width * (tileRow * (this._dimY + 2) + row);\r\n // copy a series of rows through several XY planes\r\n for (let t = 0; t < tilesX; ++t) {\r\n // copy one row of one XY plane\r\n for (let x = 0; x < this._dimX; ++x) {\r\n data[dst++] = 255.0 * this._data[src++];\r\n }\r\n\r\n // repeat last pixel of previous tile\r\n data[dst++] = 255.0 * this._data[src - 1];\r\n\r\n if (t < tilesX - 1) {\r\n // skip to the same row of next XY plane\r\n src += this._planeElements - this._rowElements;\r\n // repeat first pixel of next tile\r\n data[dst++] = 255.0 * this._data[src];\r\n }\r\n }\r\n }\r\n }\r\n\r\n // fill pixels between tile rows with copy of edge pixels\r\n for (let tileRow = 0; tileRow < tilesY; ++tileRow) {\r\n // copy last pixel row of this tile row to the following pixel row of the texture\r\n src = width * (tileRow * (this._dimY + 2) + this._dimY - 1);\r\n dst = src + width;\r\n for (let x = 0; x < width; ++x) {\r\n data[dst++] = data[src++];\r\n }\r\n if (tileRow < tilesY - 1) {\r\n // copy first pixel row of next tile row to the preceding pixel row of the texture\r\n src = width * (tileRow + 1) * (this._dimY + 2);\r\n dst = src - width;\r\n for (let x = 0; x < width; ++x) {\r\n data[dst++] = data[src++];\r\n }\r\n }\r\n }\r\n\r\n const texture = new THREE.DataTexture(\r\n data,\r\n width,\r\n height,\r\n THREE.RedFormat,\r\n THREE.UnsignedByteType,\r\n THREE.UVMapping,\r\n THREE.ClampToEdgeWrapping,\r\n THREE.ClampToEdgeWrapping,\r\n THREE.LinearFilter,\r\n THREE.LinearFilter,\r\n );\r\n texture.needsUpdate = true;\r\n return texture;\r\n }\r\n\r\n /* ********************************************************************************\r\n *\r\n * Methods that provide direct access to internal array (for better performance)\r\n *\r\n ******************************************************************************** */\r\n\r\n getData() {\r\n return this._data;\r\n }\r\n\r\n getDirectIdx(x, y, z) {\r\n return x * this._dimVec + y * this._rowElements + z * this._planeElements;\r\n }\r\n\r\n getStrideX() {\r\n return this._dimVec;\r\n }\r\n\r\n getStrideY() {\r\n return this._rowElements;\r\n }\r\n\r\n getStrideZ() {\r\n return this._planeElements;\r\n }\r\n}\r\n\r\nVolume.prototype.id = 'Volume';\r\n\r\nexport default Volume;\r\n","/**\r\n * Residue Molecule.\r\n *\r\n * @param {Complex} complex - Molecular complex this Molecule belongs to.\r\n * @param {String} name - Molecule's name.\r\n * @param {Integer} index - Molecule's index in file.\r\n *\r\n * @exports Molecule\r\n * @constructor\r\n */\r\nclass Molecule {\r\n constructor(complex, name, index) {\r\n this.complex = complex;\r\n this.name = name || '';\r\n this.residues = [];\r\n this.mask = 1 | 0;\r\n this.index = index || -1; // start with 1\r\n }\r\n\r\n forEachResidue(process) {\r\n const { residues } = this;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n process(residues[i]);\r\n }\r\n }\r\n\r\n collectMask() {\r\n let mask = 0xffffffff;\r\n const { residues } = this;\r\n for (let i = 0, n = residues.length; i < n; ++i) {\r\n mask &= residues[i]._mask;\r\n }\r\n this.mask = mask;\r\n }\r\n}\r\n\r\nexport default Molecule;\r\n","import Atom from './chem/Atom';\r\nimport Element from './chem/Element';\r\nimport Bond from './chem/Bond';\r\nimport Residue from './chem/Residue';\r\nimport ResidueType from './chem/ResidueType';\r\nimport Chain from './chem/Chain';\r\nimport Helix from './chem/Helix';\r\nimport Strand from './chem/Strand';\r\nimport Sheet from './chem/Sheet';\r\nimport SGroup from './chem/SGroup';\r\nimport Assembly from './chem/Assembly';\r\nimport Complex from './chem/Complex';\r\nimport Volume from './chem/Volume';\r\nimport VoxelWorld from './chem/VoxelWorld';\r\nimport selectors from './chem/selectors';\r\nimport Molecule from './chem/Molecule';\r\n\r\nexport default {\r\n Atom,\r\n Element,\r\n Bond,\r\n Residue,\r\n ResidueType,\r\n Chain,\r\n Helix,\r\n Strand,\r\n Sheet,\r\n SGroup,\r\n Assembly,\r\n Complex,\r\n Volume,\r\n VoxelWorld,\r\n selectors,\r\n Molecule,\r\n};\r\n","/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nimport * as THREE from 'three';\r\n\r\nclass CSS2DObject extends THREE.Object3D {\r\n constructor(element) {\r\n super();\r\n const self = this;\r\n this._element = element;\r\n this._element.style.position = 'absolute';\r\n this.addEventListener('removed', () => {\r\n if (self._element.parentNode !== null) {\r\n self._element.parentNode.removeChild(self._element);\r\n }\r\n });\r\n }\r\n\r\n getElement() {\r\n return this._element;\r\n }\r\n\r\n /**\r\n * Sets label transparency.\r\n *\r\n * @param {number} transp - in [0; 1] 1 means fully transparent\r\n */\r\n setTransparency(transp) {\r\n const el = this.getElement();\r\n if (el === null) {\r\n return;\r\n }\r\n if (transp === 1.0) {\r\n el.style.display = 'none';\r\n return;\r\n }\r\n el.style.display = 'inline';\r\n const op = 1.0 - transp;\r\n const top = op.toString();\r\n const op100 = op * 100;\r\n el.style.opacity = top;\r\n el.style.filter = `alpha(opacity=${op100})`; // IE fallback\r\n }\r\n\r\n clone() {\r\n const obj = new CSS2DObject(this._element);\r\n obj.copy(this);\r\n return obj;\r\n }\r\n}\r\n\r\nexport default CSS2DObject;\r\n","import * as THREE from 'three';\r\n\r\nclass RCGroup extends THREE.Group {\r\n raycast(raycaster, intersects) {\r\n if (!this.visible) {\r\n return;\r\n }\r\n\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n children[i].raycast(raycaster, intersects);\r\n }\r\n }\r\n\r\n enableSubset(mask, innerOnly) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].enableSubset) {\r\n children[i].enableSubset(mask, innerOnly);\r\n }\r\n }\r\n }\r\n\r\n disableSubset(mask, innerOnly) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].disableSubset) {\r\n children[i].disableSubset(mask, innerOnly);\r\n }\r\n }\r\n }\r\n\r\n isEmpty() {\r\n return this.children.length === 0;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].updateToFrame) {\r\n children[i].updateToFrame(frameData);\r\n }\r\n }\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n Array.prototype.push.apply(totalSubset, children[i].getSubset(mask, innerOnly));\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default RCGroup;\r\n","import * as THREE from 'three';\r\nimport logger from '../utils/logger';\r\nimport CSS2DObject from './CSS2DObject';\r\nimport RCGroup from './RCGroup';\r\nimport vertexScreenQuadShader from './shaders/ScreenQuad.vert';\r\nimport fragmentScreenQuadFromTex from './shaders/ScreenQuadFromTex.frag';\r\nimport fragmentScreenQuadFromTexWithDistortion from './shaders/ScreenQuadFromTexWithDistortion.frag';\r\n\r\nconst LAYERS = {\r\n DEFAULT: 0, VOLUME: 1, TRANSPARENT: 2, PREPASS_TRANSPARENT: 3, VOLUME_BFPLANE: 4, COLOR_FROM_POSITION: 5, SHADOWMAP: 6,\r\n};\r\n\r\nconst SELECTION_LAYERS = [ // These layers, that are used in the selection by ray casting\r\n LAYERS.DEFAULT, LAYERS.TRANSPARENT,\r\n];\r\n\r\nTHREE.Object3D.prototype.resetTransform = function () {\r\n this.position.set(0, 0, 0);\r\n this.quaternion.set(0, 0, 0, 1);\r\n this.scale.set(1, 1, 1);\r\n};\r\n\r\n// update world matrix of this object and all its ancestors\r\nTHREE.Object3D.prototype.updateMatrixWorldRecursive = function () {\r\n if (this.parent != null) {\r\n this.parent.updateMatrixWorldRecursive();\r\n }\r\n this.updateMatrixWorld();\r\n};\r\n// add object to parent, saving objects' world transform\r\nTHREE.Object3D.prototype.addSavingWorldTransform = (function () {\r\n const _worldMatrixInverse = new THREE.Matrix4();\r\n\r\n return function (object) {\r\n if (object instanceof THREE.Object3D) {\r\n _worldMatrixInverse.copy(this.matrixWorld).invert();\r\n _worldMatrixInverse.multiply(object.matrixWorld);\r\n object.matrix.copy(_worldMatrixInverse);\r\n object.matrix.decompose(object.position, object.quaternion, object.scale);\r\n this.add(object);\r\n }\r\n };\r\n}());\r\n\r\n// render a tiny transparent quad in the center of the screen\r\nTHREE.WebGLRenderer.prototype.renderDummyQuad = (function () {\r\n const _material = new THREE.MeshBasicMaterial({ transparent: true, opacity: 0.0, depthWrite: false });\r\n\r\n const _scene = new THREE.Scene();\r\n const _quad = new THREE.Mesh(new THREE.PlaneGeometry(0.01, 0.01), _material);\r\n _scene.add(_quad);\r\n\r\n const _camera = new THREE.OrthographicCamera(-0.5, 0.5, 0.5, -0.5, -10000, 10000);\r\n _camera.position.z = 100;\r\n\r\n return function () {\r\n this.render(_scene, _camera);\r\n };\r\n}());\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuad = (function () {\r\n const _scene = new THREE.Scene();\r\n const _quad = new THREE.Mesh(new THREE.PlaneGeometry(1.0, 1.0));\r\n _scene.add(_quad);\r\n\r\n const _camera = new THREE.OrthographicCamera(-0.5, 0.5, 0.5, -0.5, -10000, 10000);\r\n _camera.position.z = 100;\r\n\r\n return function (material) {\r\n _quad.material = material;\r\n this.render(_scene, _camera);\r\n };\r\n}());\r\n\r\nTHREE.Matrix4.prototype.isIdentity = (function () {\r\n const identity = new THREE.Matrix4();\r\n return function () {\r\n return identity.equals(this);\r\n };\r\n}());\r\n\r\nTHREE.Matrix4.prototype.applyToPointsArray = function (array, stride, w) {\r\n if (!array || !stride || stride < 3) {\r\n return array;\r\n }\r\n w = w || 0; // use point as normal by default\r\n const e = this.elements;\r\n for (let i = 0; i < array.length; i += stride) {\r\n const x = array[i];\r\n const y = array[i + 1];\r\n const z = array[i + 2];\r\n\r\n const persp = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\r\n\r\n array[i] = (e[0] * x + e[4] * y + e[8] * z + e[12] * w) * persp;\r\n array[i + 1] = (e[1] * x + e[5] * y + e[9] * z + e[13] * w) * persp;\r\n array[i + 2] = (e[2] * x + e[6] * y + e[10] * z + e[14] * w) * persp;\r\n }\r\n return array;\r\n};\r\n\r\nclass ScreenQuadMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n if (params.uniforms === undefined) {\r\n params.uniforms = {};\r\n }\r\n params.uniforms.srcTex = { type: 't', value: null };\r\n params.vertexShader = vertexScreenQuadShader;\r\n params.transparent = false;\r\n params.depthTest = false;\r\n params.depthWrite = false;\r\n super(params);\r\n }\r\n}\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuadFromTex = (function () {\r\n const _material = new ScreenQuadMaterial({\r\n uniforms: { opacity: { type: 'f', value: 1.0 } },\r\n fragmentShader: fragmentScreenQuadFromTex,\r\n transparent: true,\r\n });\r\n\r\n return function (srcTex, opacity) {\r\n _material.uniforms.srcTex.value = srcTex;\r\n _material.transparent = (opacity < 1.0);\r\n _material.uniforms.opacity.value = opacity;\r\n this.renderScreenQuad(_material);\r\n };\r\n}());\r\n\r\nTHREE.WebGLRenderer.prototype.renderScreenQuadFromTexWithDistortion = (function () {\r\n const _material = new ScreenQuadMaterial({\r\n uniforms: { coef: { type: 'f', value: 1.0 } },\r\n fragmentShader: fragmentScreenQuadFromTexWithDistortion,\r\n });\r\n\r\n return function (srcTex, coef) {\r\n _material.uniforms.srcTex.value = srcTex;\r\n _material.uniforms.coef.value = coef;\r\n this.renderScreenQuad(_material);\r\n };\r\n}());\r\n\r\n/**\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.PerspectiveCamera.prototype.setMinimalFov = function (angle) {\r\n if (this.aspect >= 1.0) {\r\n this.fov = angle;\r\n } else {\r\n this.fov = THREE.MathUtils.radToDeg(2 * Math.atan(Math.tan(THREE.MathUtils.degToRad(angle) * 0.5) / this.aspect));\r\n }\r\n};\r\n\r\n/**\r\n * @param {THREE.PerspectiveCamera} camera - Base camera for this stereo camera.\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.StereoCamera.prototype.updateHalfSized = function (camera, angle) {\r\n const originalAspect = camera.aspect;\r\n const originalFov = camera.fov;\r\n\r\n camera.aspect = originalAspect / 2.0;\r\n camera.setMinimalFov(angle);\r\n camera.updateProjectionMatrix();\r\n\r\n this.update(camera);\r\n\r\n camera.aspect = originalAspect;\r\n camera.fov = originalFov;\r\n camera.updateProjectionMatrix();\r\n};\r\n\r\n/**\r\n * @param {number} radius - Radius of bounding sphere in angstroms to fit on screen.\r\n * @param {number} angle - Field of view in degrees.\r\n */\r\nTHREE.PerspectiveCamera.prototype.setDistanceToFit = function (radius, angle) {\r\n this.position.z = radius / Math.sin(0.5 * THREE.MathUtils.degToRad(angle));\r\n};\r\n\r\n/**\r\n * @param {RCGroup} gfxObj - All objects on scene.\r\n * @param {THREE.PerspectiveCamera} camera - Camera used for rendering.\r\n * @param {number} clipPlane - Distance to clip plane.\r\n * @param {number} fogFarPlane - Distance to fog far plane.\r\n */\r\nTHREE.Raycaster.prototype.intersectVisibleObject = function (gfxObj, camera, clipPlane, fogFarPlane) {\r\n const intersects = this.intersectObject(gfxObj, false);\r\n if (intersects.length === 0) {\r\n return null;\r\n }\r\n\r\n // find point closest to camera that doesn't get clipped by camera near plane or clipPlane (if it exists)\r\n const nearPlane = Math.min(camera.near, clipPlane);\r\n let i;\r\n let p = intersects[0];\r\n const v = new THREE.Vector3();\r\n for (i = 0; i < intersects.length; ++i) {\r\n p = intersects[i];\r\n v.copy(p.point);\r\n v.applyMatrix4(camera.matrixWorldInverse);\r\n if (v.z <= -nearPlane) {\r\n break;\r\n }\r\n }\r\n if (i === intersects.length) {\r\n return null;\r\n }\r\n\r\n // check that selected intersection point is not clipped by camera far plane or occluded by fog (if it exists)\r\n const farPlane = Math.min(camera.far, fogFarPlane);\r\n v.copy(p.point);\r\n v.applyMatrix4(camera.matrixWorldInverse);\r\n if (v.z <= -farPlane) {\r\n return null;\r\n }\r\n return p;\r\n};\r\n\r\nTHREE.Matrix4.prototype.extractScale = (function () {\r\n const _v = new THREE.Vector3();\r\n\r\n return function (scale) {\r\n if (scale === undefined) {\r\n logger.debug('extractScale(): new is too expensive operation to do it on-the-fly');\r\n scale = _v.clone();\r\n }\r\n\r\n const te = this.elements;\r\n scale.x = _v.set(te[0], te[1], te[2]).length();\r\n scale.y = _v.set(te[4], te[5], te[6]).length();\r\n scale.z = _v.set(te[8], te[9], te[10]).length();\r\n\r\n // if determine is negative, we need to invert one scale\r\n const det = this.determinant();\r\n if (det < 0) {\r\n scale.x = -scale.x;\r\n }\r\n return scale;\r\n };\r\n}());\r\n\r\nfunction _calcCylinderMatrix(posBegin, posEnd, radius) {\r\n const posCenter = posBegin.clone().lerp(posEnd, 0.5);\r\n const matScale = new THREE.Matrix4();\r\n matScale.makeScale(radius, posBegin.distanceTo(posEnd), radius);\r\n\r\n const matRotHalf = new THREE.Matrix4();\r\n matRotHalf.makeRotationX(Math.PI / 2);\r\n\r\n const matRotLook = new THREE.Matrix4();\r\n const vUp = new THREE.Vector3(0, 1, 0);\r\n matRotLook.lookAt(posCenter, posEnd, vUp);\r\n\r\n matRotLook.multiply(matRotHalf);\r\n matRotLook.multiply(matScale);\r\n matRotLook.setPosition(posCenter);\r\n return matRotLook;\r\n}\r\n\r\nfunction _calcChunkMatrix(eye, target, up, rad) {\r\n const matScale = new THREE.Matrix4();\r\n matScale.makeScale(rad.x, rad.y, 0);\r\n\r\n const matRotLook = new THREE.Matrix4();\r\n matRotLook.lookAt(eye, target, up);\r\n matRotLook.multiply(matScale);\r\n matRotLook.setPosition(eye);\r\n\r\n return matRotLook;\r\n}\r\n\r\nfunction _groupHasGeometryToRender(group) {\r\n let hasGeoms = false;\r\n group.traverse((node) => {\r\n if (node.hasOwnProperty('geometry') || node instanceof CSS2DObject) {\r\n hasGeoms = true;\r\n }\r\n });\r\n return hasGeoms;\r\n}\r\n\r\nfunction _buildDistorionMesh(widthSegments, heightSegements, coef) {\r\n // solve equation r_u = r_d * (1 + k * r_d^2)\r\n // for r_d using iterations\r\n // takes: r_u^2\r\n // returns: r_d / r_u factor that can be used to distort point coords\r\n function calcInverseBarrel(r2) {\r\n const epsilon = 1e-5;\r\n let prevR2 = 0.0;\r\n let curR2 = r2;\r\n let dr = 1.0;\r\n while (Math.abs(curR2 - prevR2) > epsilon) {\r\n dr = 1.0 + coef * curR2;\r\n prevR2 = curR2;\r\n curR2 = r2 / (dr * dr);\r\n }\r\n\r\n return 1.0 / dr;\r\n }\r\n\r\n const geo = new THREE.PlaneGeometry(2.0, 2.0, widthSegments, heightSegements);\r\n\r\n const pos = geo.getAttribute('position');\r\n for (let i = 0; i < pos.count; ++i) {\r\n const x = pos.array[3 * i];\r\n const y = pos.array[3 * i + 1];\r\n const c = calcInverseBarrel(x * x + y * y);\r\n pos.setXY(i, c * x, c * y);\r\n }\r\n\r\n return geo;\r\n}\r\n\r\nTHREE.BufferAttribute.prototype.copyAtList = function (attribute, indexList) {\r\n console.assert(\r\n this.itemSize === attribute.itemSize,\r\n 'DEBUG: BufferAttribute.copyAtList buffers have different item size.',\r\n );\r\n const { itemSize } = this;\r\n for (let i = 0, n = indexList.length; i < n; ++i) {\r\n for (let j = 0; j < itemSize; ++j) {\r\n this.array[i * itemSize + j] = attribute.array[indexList[i] * itemSize + j];\r\n }\r\n }\r\n return this;\r\n};\r\n\r\nfunction fillArray(array, value, startIndex, endIndex) {\r\n startIndex = (typeof startIndex !== 'undefined') ? startIndex : 0;\r\n endIndex = (typeof endIndex !== 'undefined') ? endIndex : array.length;\r\n for (let i = startIndex; i < endIndex; ++i) {\r\n array[i] = value;\r\n }\r\n}\r\n\r\n/** @param {THREE.Object3D} object - Parent object. */\r\nfunction removeChildren(object) {\r\n const { children } = object;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n child.parent = null;\r\n child.dispatchEvent({ type: 'removed' });\r\n }\r\n object.children = [];\r\n}\r\n\r\nfunction clearTree(object) {\r\n object.traverse((obj) => {\r\n if (obj instanceof THREE.Mesh || obj instanceof THREE.LineSegments || obj instanceof THREE.Line) {\r\n obj.geometry.dispose();\r\n }\r\n });\r\n removeChildren(object);\r\n}\r\n\r\nfunction destroyObject(object) {\r\n clearTree(object);\r\n if (object.parent) {\r\n object.parent.remove(object);\r\n } else {\r\n object.dispatchEvent({ type: 'removed' });\r\n }\r\n}\r\n\r\nfunction belongToSelectLayers(object) {\r\n for (let i = 0; i < SELECTION_LAYERS.length; i++) {\r\n if (((object.layers.mask >> SELECTION_LAYERS[i]) & 1) === 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction processObjRenderOrder(root, idMaterial) {\r\n // set renderOrder to 0 for Backdrop and to 1 in other cases to render Backdrop earlier all other materials\r\n const renderOrder = +(idMaterial !== 'BA');\r\n root.traverse((object) => {\r\n if (object.isGroup) {\r\n object.renderOrder = renderOrder;\r\n }\r\n });\r\n}\r\n\r\nfunction applySelectionMaterial(geo) {\r\n geo.traverse((node) => {\r\n if ('material' in node) {\r\n node.material = node.material.clone(true);\r\n // using z-offset to magically fix selection rendering artifact (on z-sprites)\r\n node.material.setValues({\r\n depthFunc: THREE.LessEqualDepth,\r\n overrideColor: true,\r\n fog: false,\r\n lights: false,\r\n shadowmap: false,\r\n });\r\n node.material.setUberOptions({ fixedColor: new THREE.Color(0xFFFF00), zOffset: -1e-6 });\r\n }\r\n });\r\n}\r\n\r\nfunction getMiddlePoint(point1, point2, optionalTarget) {\r\n const result = optionalTarget || new THREE.Vector3();\r\n\r\n result.set(0, 0, 0);\r\n result.addScaledVector(point1, 0.5);\r\n result.addScaledVector(point2, 0.5);\r\n\r\n return result;\r\n}\r\n\r\n// Monkey-patch for \"InstancedBufferGeometry.instanceCount becomes undefined after copy()\"\r\n// https://github.com/mrdoob/three.js/issues/22151\r\nconst _oldInstancedBufferGeometryCopy = THREE.InstancedBufferGeometry.prototype.copy;\r\n\r\nTHREE.InstancedBufferGeometry.prototype.copy = function (source) {\r\n _oldInstancedBufferGeometryCopy.call(this, source);\r\n if (this.instanceCount === undefined) {\r\n this.instanceCount = Infinity;\r\n }\r\n};\r\n\r\nexport default {\r\n calcCylinderMatrix: _calcCylinderMatrix,\r\n calcChunkMatrix: _calcChunkMatrix,\r\n groupHasGeometryToRender: _groupHasGeometryToRender,\r\n buildDistorionMesh: _buildDistorionMesh,\r\n RCGroup,\r\n fillArray,\r\n clearTree,\r\n destroyObject,\r\n belongToSelectLayers,\r\n processObjRenderOrder,\r\n applySelectionMaterial,\r\n getMiddlePoint,\r\n LAYERS,\r\n};\r\n","import * as THREE from 'three';\r\nimport gfxutils from './gfx/gfxutils';\r\n\r\nconst _defaultBoundaries = {\r\n boundingBox: new THREE.Box3(new THREE.Vector3(-1, -1, -1), new THREE.Vector3(1, 1, 1)),\r\n boundingSphere: new THREE.Sphere(new THREE.Vector3(0, 0, 0), 1),\r\n};\r\n\r\nclass Visual extends gfxutils.RCGroup {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this.name = name;\r\n this._dataSource = dataSource;\r\n }\r\n\r\n release() {\r\n if (this.parent) {\r\n this.parent.remove(this);\r\n }\r\n }\r\n\r\n getDataSource() {\r\n return this._dataSource;\r\n }\r\n\r\n getBoundaries() {\r\n return _defaultBoundaries;\r\n }\r\n}\r\n\r\nexport default Visual;\r\n","function _ensureArray(x) {\r\n if (x === null || x === undefined || Array.isArray(x)) {\r\n return x;\r\n }\r\n return [x];\r\n}\r\n\r\n/** An indexed list of objects or classes. */\r\nclass EntityList {\r\n /**\r\n * Create a list of objects.\r\n * The objects can be indexed by one or more properties for the later retrieval.\r\n *\r\n * @param {!Array=} entities A list of objects to automatically register at creation time.\r\n * @param {!Array=} indices A list of property names to use for case-insensitive indexing.\r\n * By default, a single `.id` property is used.\r\n * @see EntityList#register\r\n */\r\n constructor(entities = [], indices = ['id']) {\r\n this._list = [];\r\n this._dict = {};\r\n this._indices = [...indices];\r\n this._indices.forEach((index) => {\r\n this._dict[index] = {};\r\n });\r\n\r\n entities.forEach((entity) => this.register(entity));\r\n }\r\n\r\n /**\r\n * Add a value to the end of a list.\r\n * The list will contain only one copy of the value.\r\n *\r\n * @param {!Array} list An array.\r\n * @param {*} value A value to add.\r\n * @see EntityList.unregisterFromList\r\n * @see EntityList.registerInDict\r\n */\r\n static registerInList(list, value) {\r\n if (!list.includes(value)) {\r\n list.push(value);\r\n }\r\n }\r\n\r\n /**\r\n * Remove a value from a list if it is there.\r\n *\r\n * @param {!Array} list An array.\r\n * @param {*} value A value to remove.\r\n * @see EntityList.registerInList\r\n */\r\n static unregisterFromList(list, value) {\r\n const pos = list.indexOf(value);\r\n if (pos !== -1) {\r\n list.splice(pos, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Add a value to a dictionary.\r\n * The value may be stored under multiple different keys (aliases).\r\n * There might be multiples values stored under the same key.\r\n *\r\n * @param {!Object} dict A dictionary.\r\n * @param {!Array} keys An array of keys.\r\n * @param {*} value A value to add.\r\n * @see EntityList.unregisterFromDict\r\n * @see EntityList.registerInList\r\n */\r\n static registerInDict(dict, keys, value) {\r\n keys.forEach((key) => {\r\n key = key.toLowerCase();\r\n const list = dict[key] = dict[key] || [];\r\n if (!list.includes(value)) {\r\n list.push(value);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove a value from a dictionary.\r\n * The value may be stored under multiple different keys (aliases).\r\n * There might be multiples values stored under the same key.\r\n *\r\n * @param {!Object} dict A dictionary.\r\n * @param {!Array} keys An array of keys.\r\n * @param {*} value A value to add.\r\n * @see EntityList.registerInDict\r\n */\r\n static unregisterFromDict(dict, keys, value) {\r\n keys.forEach((key) => {\r\n key = key.toLowerCase();\r\n const list = dict[key];\r\n if (list) {\r\n const pos = list.indexOf(value);\r\n if (pos !== -1) {\r\n list.splice(pos, 1);\r\n }\r\n if (list.length === 0) {\r\n delete dict[key];\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Add an entity to this list.\r\n *\r\n * @param {!Object} entity An object or a class to register. The object must include all\r\n * properties specified as indices on construction.\r\n * @see EntityList#unregister\r\n */\r\n register(entity) {\r\n EntityList.registerInList(this._list, entity);\r\n this._indices.forEach((index) => {\r\n EntityList.registerInDict(this._dict[index], _ensureArray(entity[index]), entity);\r\n });\r\n }\r\n\r\n /**\r\n * Remove an entity from this list.\r\n *\r\n * @param {!Object} entity An object or a class to unregister. The object may be\r\n * missing from the list but it must include all properties specified as indices\r\n * on construction.\r\n * @see EntityList#register\r\n */\r\n unregister(entity) {\r\n EntityList.unregisterFromList(this._list, entity);\r\n this._indices.forEach((index) => {\r\n EntityList.unregisterFromDict(this._dict[index], _ensureArray(entity[index]), entity);\r\n });\r\n }\r\n\r\n /**\r\n * An ordered list of all registered entities.\r\n * It is a read-only copy, use {@link EntityList#register} and {@link EntityList#unregister}\r\n * to modify it.\r\n *\r\n * @type {!Array}\r\n */\r\n get all() {\r\n return [...this._list];\r\n }\r\n\r\n /**\r\n * The first registered entity.\r\n * Use it if you do not care which entity you are referring to.\r\n *\r\n * @type {Object=}\r\n */\r\n get first() {\r\n return this._list[0];\r\n }\r\n\r\n /**\r\n * Retrieve a list of keys for the index.\r\n *\r\n * @param {string=} index One of the indices specified during the list construction. If omitted,\r\n * the first of the indices is used.\r\n * @returns {!Array} An unordered list of keys in the index, i.e. particular property\r\n * values for all registered entities.\r\n */\r\n keys(index) {\r\n return Object.keys(this._dict[index || this._indices[0]]);\r\n }\r\n\r\n /**\r\n * Retrieve an entity by its key.\r\n *\r\n * @param {string} key A case-insensitive property value to look-up.\r\n * @param {string=} index One of the indices specified during the list construction. If omitted,\r\n * the first of the indices is used.\r\n * @returns {Object=} An object registered in the index under the key. If there are multiple\r\n * objects under the same key, the first one is returned.\r\n */\r\n get(key, index) {\r\n const dict = this._dict[index || this._indices[0]];\r\n if (dict) {\r\n const values = dict[key && key.toLowerCase()];\r\n return values && values.length > 0 ? values[0] : undefined;\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nexport default EntityList;\r\n","import settings from '../settings';\r\nimport logger from './logger';\r\n\r\nfunction makeContextDependent(prototype) {\r\n Object.defineProperties(prototype, {\r\n logger: {\r\n get() {\r\n return this.context && this.context.logger ? this.context.logger : logger;\r\n },\r\n },\r\n settings: {\r\n get() {\r\n return this.context && this.context.settings ? this.context.settings : settings;\r\n },\r\n },\r\n });\r\n}\r\n\r\nexport default makeContextDependent;\r\n","import * as THREE from 'three';\r\n\r\nclass CollisionSphere {\r\n constructor(position, radius) {\r\n this._position = position;\r\n this._radius = radius;\r\n }\r\n\r\n static _sphere = new THREE.Sphere();\r\n\r\n raycast(raycaster) {\r\n const sphere = CollisionSphere._sphere;\r\n sphere.set(this._position, this._radius);\r\n\r\n const p = new THREE.Vector3();\r\n if (raycaster.ray.intersectSphere(sphere, p)) {\r\n return {\r\n distance: raycaster.ray.origin.distanceTo(p),\r\n point: p,\r\n };\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nconst SphereCollisionGeo = (base) => class extends base {\r\n constructor(count, ...args) {\r\n super(...args);\r\n this._objects = new Array(count);\r\n this.boundingSphere = null;\r\n this.boundingBox = null;\r\n }\r\n\r\n setSphere(idx, position, radius) {\r\n this._objects[idx] = new CollisionSphere(position, radius);\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n // TODO raycast with bounding sphere? How to deal with updates?\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const inters = this._objects[i].raycast(raycaster);\r\n if (inters) {\r\n inters.chunkIdx = i;\r\n intersects.push(inters);\r\n }\r\n }\r\n }\r\n\r\n computeBoundingBox() {\r\n const objects = this._objects;\r\n let { boundingBox } = this;\r\n if (boundingBox === null) {\r\n this.boundingBox = boundingBox = new THREE.Box3();\r\n }\r\n boundingBox.makeEmpty();\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n boundingBox.expandByPoint(objects[i]._position);\r\n }\r\n }\r\n\r\n computeBoundingSphere() {\r\n this.computeBoundingBox();\r\n const objects = this._objects;\r\n const { boundingBox } = this;\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n boundingBox.getCenter(center);\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n const pos = objects[i]._position;\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n if (this.boundingSphere === null) {\r\n this.boundingSphere = new THREE.Sphere();\r\n }\r\n this.boundingSphere.set(center, Math.sqrt(radiusSquared));\r\n }\r\n};\r\nexport default SphereCollisionGeo;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst tmpColor = new THREE.Color();\r\n\r\nconst OFFSET_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst { copySubArrays } = utils;\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\nclass InstancedSpheresGeometry extends SphereCollisionGeo(THREE.InstancedBufferGeometry) {\r\n constructor(spheresCount, sphereComplexity, useZSprites) {\r\n super(spheresCount);\r\n this._sphGeometry = useZSprites ? new THREE.PlaneGeometry(2, 2, 1, 1)\r\n : new THREE.SphereGeometry(1, sphereComplexity * 2, sphereComplexity, 0, Math.PI * 2, 0, Math.PI);\r\n this._init(spheresCount, this._sphGeometry);\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n setArrayXYZW(this._offsets, itemIdx * OFFSET_SIZE, itemPos.x, itemPos.y, itemPos.z, itemRad);\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n }\r\n\r\n setColor(itemIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n setArrayXYZ(this._colors, itemIdx * COLOR_SIZE, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('offset').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n alphaArr[chunkIndices[i]] = value;\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const geom = new THREE.InstancedBufferGeometry();\r\n this._init.call(geom, instanceCount, this._sphGeometry);\r\n\r\n copySubArrays(this._offsets, geom._offsets, chunkIndices, OFFSET_SIZE);\r\n copySubArrays(this._colors, geom._colors, chunkIndices, COLOR_SIZE);\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n _init(spheresCount, sphereGeo) {\r\n this.copy(sphereGeo);\r\n\r\n this._offsets = utils.allocateTyped(Float32Array, spheresCount * OFFSET_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, spheresCount * COLOR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, spheresCount);\r\n _.fill(alpha, 1.0);\r\n\r\n this.setAttribute('offset', new THREE.InstancedBufferAttribute(this._offsets, OFFSET_SIZE, false, 1));\r\n this.setAttribute('color', new THREE.InstancedBufferAttribute(this._colors, COLOR_SIZE, false, 1));\r\n this.setAttribute('alphaColor', new THREE.InstancedBufferAttribute(alpha, 1, false, 1));\r\n }\r\n}\r\nexport default InstancedSpheresGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_IDC_16BIT = 65535;\r\nconst VEC_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\n\r\n/**\r\n * This class represents geometry which consists of separate chunks.\r\n * Each chunk has same index and similar geometry with equal points and faces count.\r\n * Each chunk has by default only one color.\r\n * @constructor\r\n */\r\n\r\nclass ChunkedObjectsGeometry extends THREE.BufferGeometry {\r\n constructor(chunkGeo, chunksCount) {\r\n super();\r\n\r\n if (this.constructor === ChunkedObjectsGeometry) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n\r\n this._chunkGeo = chunkGeo;\r\n\r\n this._init(chunkGeo, chunksCount);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('position').needsUpdate = true;\r\n this.getAttribute('normal').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n const colors = this._colors;\r\n const chunkSize = this._chunkSize;\r\n for (let i = chunkIdx * chunkSize, end = i + chunkSize; i < end; ++i) {\r\n const idx = i * VEC_SIZE;\r\n colors[idx] = tmpColor.r;\r\n colors[idx + 1] = tmpColor.g;\r\n colors[idx + 2] = tmpColor.b;\r\n }\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n const chunkSize = this._chunkSize;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const left = chunkIndices[i] * chunkSize;\r\n _.fill(alphaArr, value, left, left + chunkSize);\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const inters = [];\r\n // use THREE.Mesh raycasting interface for the Geometry. The Mesh is\r\n // created with existed geometry and default material, so it doesn't slowdown.\r\n const mesh = new THREE.Mesh();\r\n mesh.geometry = this;\r\n mesh.raycast(raycaster, inters);\r\n\r\n const facesPerChunk = this._chunkGeo.index.count / 3;\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('faceIndex')) {\r\n continue;\r\n }\r\n inters[i].chunkIdx = Math.floor(inters[i].faceIndex / facesPerChunk);\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const geom = new THREE.BufferGeometry();\r\n this._init.call(geom, this._chunkGeo, instanceCount);\r\n\r\n const srcPos = this._positions;\r\n const srcNorm = this._normals;\r\n const srcColor = this._colors;\r\n\r\n const dstPos = geom._positions;\r\n const dstNorm = geom._normals;\r\n const dstColor = geom._colors;\r\n\r\n const chunkSize = this._chunkSize * VEC_SIZE;\r\n\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const dstPtOffset = i * chunkSize;\r\n const ptIdxBegin = chunkIndices[i] * chunkSize;\r\n const ptIdxEnd = ptIdxBegin + chunkSize;\r\n dstPos.set(srcPos.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n dstNorm.set(srcNorm.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n dstColor.set(srcColor.subarray(ptIdxBegin, ptIdxEnd), dstPtOffset);\r\n }\r\n\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n _init(chunkGeo, chunksCount) {\r\n const chunkSize = this._chunkSize = chunkGeo.attributes.position.count;\r\n const chunkIndex = chunkGeo.index.array;\r\n const chunkIndexSize = chunkIndex.length;\r\n const pointsCount = this._chunkSize * chunksCount;\r\n const use32bitIndex = pointsCount > MAX_IDC_16BIT;\r\n const indexSize = chunkIndexSize * chunksCount;\r\n const index = this._index = utils.allocateTyped(use32bitIndex ? Uint32Array : Uint16Array, indexSize);\r\n this._positions = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n this._normals = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, pointsCount * VEC_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, pointsCount);\r\n _.fill(alpha, 1.0);\r\n\r\n for (let i = 0; i < chunksCount; ++i) {\r\n const offset = i * chunkIndexSize;\r\n const posOffset = i * chunkSize;\r\n index.set(chunkIndex, offset);\r\n for (let j = 0; j < chunkIndexSize; ++j) {\r\n index[offset + j] += posOffset;\r\n }\r\n }\r\n\r\n this.setIndex(new THREE.BufferAttribute(this._index, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(this._positions, VEC_SIZE));\r\n this.setAttribute('normal', new THREE.BufferAttribute(this._normals, VEC_SIZE));\r\n this.setAttribute('color', new THREE.BufferAttribute(this._colors, VEC_SIZE));\r\n this.setAttribute('alphaColor', new THREE.BufferAttribute(alpha, 1));\r\n }\r\n}\r\nexport default ChunkedObjectsGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst VEC_SIZE = 3;\r\n\r\nclass SimpleSpheresGeometry extends SphereCollisionGeo(ChunkedObjectsGeometry) {\r\n constructor(spheresCount, sphereComplexity) {\r\n const sphGeometry = new THREE.SphereGeometry(\r\n 1,\r\n sphereComplexity * 2,\r\n sphereComplexity,\r\n 0,\r\n Math.PI * 2,\r\n 0,\r\n Math.PI,\r\n );\r\n super(spheresCount, sphGeometry, spheresCount);\r\n\r\n const normals = this._normals;\r\n const geoNormals = sphGeometry.attributes.normal.array;\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._tmpPositions = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n for (let i = 0; i < spheresCount; ++i) {\r\n normals.set(geoNormals, chunkSize * VEC_SIZE * i);\r\n }\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n const tmpPos = this._tmpPositions;\r\n const chunkSize = this._chunkSize;\r\n const geoPos = this._chunkPos;\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n const idx = i * 3;\r\n tmpPos[idx] = itemPos.x + geoPos[idx] * itemRad;\r\n tmpPos[idx + 1] = itemPos.y + geoPos[idx + 1] * itemRad;\r\n tmpPos[idx + 2] = itemPos.z + geoPos[idx + 2] * itemRad;\r\n }\r\n\r\n this._positions.set(tmpPos, chunkSize * itemIdx * VEC_SIZE);\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n }\r\n}\r\nexport default SimpleSpheresGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst centerPos = new THREE.Vector3();\r\nconst tmpVector = new THREE.Vector3();\r\nconst normMtx = new THREE.Matrix3();\r\n\r\nclass Simple2CCylindersGeometry extends ChunkedObjectsGeometry {\r\n constructor(instanceCount, polyComplexity) {\r\n const cylGeometry = new THREE.CylinderGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, true);\r\n super(cylGeometry, 2 * instanceCount);\r\n\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._chunkNorms = this._chunkGeo.attributes.normal.array;\r\n this._tmpVector = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const chunkSize = this._chunkSize;\r\n const firstOffset = chunkSize * 2 * itemIdx * VEC_SIZE;\r\n const secondOffset = firstOffset + chunkSize * VEC_SIZE;\r\n\r\n const tmpArray = this._tmpVector;\r\n const geoPos = this._chunkPos;\r\n const geoNorm = this._chunkNorms;\r\n\r\n centerPos.lerpVectors(botPos, topPos, 0.5);\r\n const mtx1 = gfxutils.calcCylinderMatrix(botPos, centerPos, itemRad);\r\n normMtx.getNormalMatrix(mtx1);\r\n\r\n let idx;\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoPos, idx);\r\n tmpVector.applyMatrix4(mtx1);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._positions.set(tmpArray, firstOffset);\r\n\r\n // now shift center to get another part of the cylinder\r\n centerPos.sub(botPos);\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpArray[idx] += centerPos.x;\r\n tmpArray[idx + 1] += centerPos.y;\r\n tmpArray[idx + 2] += centerPos.z;\r\n }\r\n this._positions.set(tmpArray, secondOffset);\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoNorm, idx);\r\n tmpVector.applyMatrix3(normMtx);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._normals.set(tmpArray, firstOffset);\r\n this._normals.set(tmpArray, secondOffset);\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const first = 2 * itemIdx;\r\n super.setColor(first, colorVal1);\r\n\r\n const second = first + 1;\r\n super.setColor(second, colorVal2);\r\n }\r\n}\r\n\r\nexport default Simple2CCylindersGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_POINTS_COUNT_16BIT = 65536;\r\nconst PTS_PER_TRIANGLE = 3;\r\n\r\nclass CylinderBufferGeometry extends THREE.BufferGeometry {\r\n constructor(\r\n radiusTop,\r\n radiusBottom,\r\n height,\r\n radialSegments,\r\n heightSegments,\r\n openEnded,\r\n ) {\r\n super();\r\n\r\n const thetaStart = 0;\r\n const thetaLength = 2 * Math.PI;\r\n\r\n this.type = 'CylinderBufferGeometry';\r\n\r\n this.parameters = {\r\n radiusTop,\r\n radiusBottom,\r\n height,\r\n radialSegments,\r\n heightSegments,\r\n openEnded,\r\n };\r\n\r\n const hasTop = openEnded === false && radiusTop > 0;\r\n const hasBottom = openEnded === false && radiusBottom > 0;\r\n const vertexCount = (heightSegments + 1) * radialSegments\r\n + hasTop * (radialSegments + 1)\r\n + hasBottom * (radialSegments + 1);\r\n const facesCount = (2 * heightSegments + hasTop + hasBottom) * radialSegments;\r\n\r\n const heightHalf = height / 2;\r\n\r\n const positions = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3);\r\n const normals = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 3), 3);\r\n const indices = new THREE.Uint16BufferAttribute(utils.allocateTyped(Uint16Array, facesCount * PTS_PER_TRIANGLE), 1);\r\n\r\n const uvs = new THREE.BufferAttribute(utils.allocateTyped(Float32Array, vertexCount * 2), 2);\r\n console.assert(vertexCount < MAX_POINTS_COUNT_16BIT, 'DEBUG: Cylinder Geometry has too many vertices (65536 max).');\r\n\r\n let currVtxIdx = 0;\r\n let currFaceIdx = 0;\r\n const tanTheta = -(radiusBottom - radiusTop) / height;\r\n\r\n // setup cylinder data\r\n for (let y = 0; y <= heightSegments; y++) {\r\n // faces\r\n if (y !== heightSegments) {\r\n for (let i = 0; i < radialSegments; i++) {\r\n const v1 = currVtxIdx + i;\r\n const v2 = currVtxIdx + radialSegments + i;\r\n const v3 = currVtxIdx + radialSegments + ((i + 1) % radialSegments);\r\n const v4 = currVtxIdx + ((i + 1) % radialSegments);\r\n\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, v1, v4, v2);\r\n currFaceIdx++;\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, v2, v4, v3);\r\n currFaceIdx++;\r\n }\r\n }\r\n\r\n // vertices\r\n const v = y / heightSegments;\r\n const radius = v * (radiusBottom - radiusTop) + radiusTop;\r\n\r\n for (let x = 0; x < radialSegments; x++) {\r\n const u = x / radialSegments;\r\n\r\n const vx = radius * Math.sin(u * thetaLength + thetaStart);\r\n const vy = v * height - heightHalf;\r\n const vz = radius * Math.cos(u * thetaLength + thetaStart);\r\n\r\n const normal = new THREE.Vector3(\r\n vx,\r\n Math.sqrt(vx * vx + vz * vz) * tanTheta,\r\n vz,\r\n ).normalize();\r\n\r\n positions.setXYZ(currVtxIdx, vx, vy, vz);\r\n normals.setXYZ(currVtxIdx, normal.x, normal.y, normal.z);\r\n uvs.setXY(currVtxIdx, u, v);\r\n ++currVtxIdx;\r\n }\r\n }\r\n\r\n // top cap\r\n if (hasTop) {\r\n const startTIdx = currVtxIdx;\r\n const lastIdx = currVtxIdx + radialSegments;\r\n for (let fTIdx = 0; fTIdx < radialSegments; ++fTIdx) {\r\n const currSrcIdx = currVtxIdx - radialSegments;\r\n positions.setXYZ(\r\n currVtxIdx,\r\n positions.getX(currSrcIdx),\r\n positions.getY(currSrcIdx),\r\n positions.getZ(currSrcIdx),\r\n );\r\n normals.setXYZ(currVtxIdx, 0, 1, 0);\r\n uvs.setXY(currVtxIdx, 1, 1);\r\n\r\n const nextTVtx = startTIdx + ((fTIdx + 1) % radialSegments);\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, currVtxIdx, nextTVtx, lastIdx);\r\n currFaceIdx++;\r\n currVtxIdx++;\r\n }\r\n\r\n positions.setXYZ(currVtxIdx, 0, heightHalf, 0);\r\n normals.setXYZ(currVtxIdx, 0, 1, 0);\r\n uvs.setXY(currVtxIdx, 1, 1);\r\n ++currVtxIdx;\r\n }\r\n\r\n // bottom cap\r\n if (hasBottom) {\r\n const startBIdx = currVtxIdx;\r\n const lastBIdx = currVtxIdx + radialSegments;\r\n for (let fBIdx = 0; fBIdx < radialSegments; ++fBIdx) {\r\n const currSrcBIdx = fBIdx;\r\n positions.setXYZ(\r\n currVtxIdx,\r\n positions.getX(currSrcBIdx),\r\n positions.getY(currSrcBIdx),\r\n positions.getZ(currSrcBIdx),\r\n );\r\n normals.setXYZ(currVtxIdx, 0, -1, 0);\r\n uvs.setXY(currVtxIdx, 0, 0);\r\n\r\n const nextBVtx = startBIdx + ((fBIdx + 1) % radialSegments);\r\n indices.setXYZ(currFaceIdx * PTS_PER_TRIANGLE, nextBVtx, currVtxIdx, lastBIdx);\r\n currFaceIdx++;\r\n currVtxIdx++;\r\n }\r\n\r\n positions.setXYZ(currVtxIdx, 0, -heightHalf, 0);\r\n normals.setXYZ(currVtxIdx, 0, -1, 0);\r\n uvs.setXY(currVtxIdx, 0, 0);\r\n }\r\n\r\n this.setIndex(indices);\r\n this.setAttribute('position', positions);\r\n this.setAttribute('normal', normals);\r\n this.setAttribute('uv', uvs);\r\n }\r\n\r\n clone() {\r\n const { parameters } = this;\r\n\r\n return new CylinderBufferGeometry(\r\n parameters.radiusTop,\r\n parameters.radiusBottom,\r\n parameters.height,\r\n parameters.radialSegments,\r\n parameters.heightSegments,\r\n parameters.openEnded,\r\n );\r\n }\r\n}\r\n\r\nexport default CylinderBufferGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\nimport CylinderBufferGeometry from './CylinderBufferGeometry';\r\n\r\nconst tmpColor = new THREE.Color();\r\nconst invMatrix = new THREE.Matrix4();\r\n\r\nconst OFFSET_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst { copySubArrays } = utils;\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\n\r\nfunction sortNumber(a, b) {\r\n return a - b;\r\n}\r\n\r\nfunction _prepareCylinderInfo(chunkIndices) {\r\n chunkIndices.sort(sortNumber);\r\n const chunksIdx = [];\r\n const cylinderInfo = [];\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const val = chunkIndices[i];\r\n const even = (val | 0) % 2 === 0;\r\n const newPar = {\r\n first: false,\r\n second: false,\r\n };\r\n if (even) {\r\n newPar.first = true;\r\n newPar.second = i + 1 < n && chunkIndices[i + 1] === chunkIndices[i] + 1;\r\n if (newPar.second) {\r\n ++i;\r\n }\r\n } else {\r\n newPar.second = true;\r\n }\r\n chunksIdx.push(Math.floor(val / 2));\r\n cylinderInfo.push(newPar);\r\n }\r\n return { indices: chunksIdx, cylinderInfo };\r\n}\r\n\r\nfunction _assignOpacity(cylinderInfo, color1, color2) {\r\n for (let i = 0, n = cylinderInfo.length; i < n; ++i) {\r\n const info = cylinderInfo[i];\r\n if (!info.first) {\r\n color1[COLOR_SIZE * i] = -0.5;\r\n }\r\n if (!info.second) {\r\n color2[COLOR_SIZE * i] = -0.5;\r\n }\r\n }\r\n}\r\nclass Instanced2CCylindersGeometry extends THREE.InstancedBufferGeometry {\r\n constructor(instanceCount, polyComplexity, useZSprites, openEnded) {\r\n super();\r\n this._useZSprites = useZSprites;\r\n this._cylGeometry = useZSprites ? new THREE.PlaneGeometry(2, 2, 1, 1)\r\n : new CylinderBufferGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, openEnded);\r\n this._init(instanceCount, this._cylGeometry, this._useZSprites);\r\n\r\n this._collisionGeo = new Simple2CCylindersGeometry(instanceCount, 3);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const matrix = gfxutils.calcCylinderMatrix(botPos, topPos, itemRad);\r\n let me = matrix.elements;\r\n const mtxOffset = itemIdx * OFFSET_SIZE;\r\n\r\n this._collisionGeo.setItem(itemIdx, botPos, topPos, itemRad);\r\n setArrayXYZW(this._matVector1, mtxOffset, me[0], me[4], me[8], me[12]);\r\n setArrayXYZW(this._matVector2, mtxOffset, me[1], me[5], me[9], me[13]);\r\n setArrayXYZW(this._matVector3, mtxOffset, me[2], me[6], me[10], me[14]);\r\n\r\n if (this._useZSprites) {\r\n invMatrix.copy(matrix).invert();\r\n me = invMatrix.elements;\r\n setArrayXYZW(this._invmatVector1, mtxOffset, me[0], me[4], me[8], me[12]);\r\n setArrayXYZW(this._invmatVector2, mtxOffset, me[1], me[5], me[9], me[13]);\r\n setArrayXYZW(this._invmatVector3, mtxOffset, me[2], me[6], me[10], me[14]);\r\n }\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const colorIdx = itemIdx * COLOR_SIZE;\r\n tmpColor.set(colorVal1);\r\n setArrayXYZ(this._color1, colorIdx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n tmpColor.set(colorVal2);\r\n setArrayXYZ(this._color2, colorIdx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n computeBoundingSphere() {\r\n this._collisionGeo.computeBoundingSphere();\r\n this.boundingSphere = this._collisionGeo.boundingSphere;\r\n }\r\n\r\n computeBoundingBox() {\r\n this._collisionGeo.computeBoundingBox();\r\n this.boundingBox = this._collisionGeo.boundingBox;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('matVector1').needsUpdate = true;\r\n this.getAttribute('matVector2').needsUpdate = true;\r\n this.getAttribute('matVector3').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n this.getAttribute('color2').needsUpdate = true;\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n if (this._useZSprites) {\r\n this.getAttribute('invmatVector1').needsUpdate = true;\r\n this.getAttribute('invmatVector2').needsUpdate = true;\r\n this.getAttribute('invmatVector3').needsUpdate = true;\r\n }\r\n\r\n this._collisionGeo.finishUpdate();\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const alphaArr = this._alpha;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n alphaArr[Math.floor(chunkIndices[i] / 2)] = value;\r\n }\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const info = _prepareCylinderInfo(chunkIndices);\r\n const cylinderIndices = info.indices;\r\n const instanceCount = cylinderIndices.length;\r\n const geom = new THREE.InstancedBufferGeometry();\r\n this._init.call(geom, instanceCount, this._cylGeometry, this._useZSprites);\r\n\r\n copySubArrays(this._matVector1, geom._matVector1, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._matVector2, geom._matVector2, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._matVector3, geom._matVector3, cylinderIndices, OFFSET_SIZE);\r\n\r\n if (this._useZSprites) {\r\n copySubArrays(this._invmatVector1, geom._invmatVector1, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._invmatVector2, geom._invmatVector2, cylinderIndices, OFFSET_SIZE);\r\n copySubArrays(this._invmatVector3, geom._invmatVector3, cylinderIndices, OFFSET_SIZE);\r\n }\r\n\r\n copySubArrays(this._color1, geom._color1, cylinderIndices, COLOR_SIZE);\r\n copySubArrays(this._color2, geom._color2, cylinderIndices, COLOR_SIZE);\r\n _assignOpacity(info.cylinderInfo, geom._color1, geom._color2);\r\n geom.boundingSphere = this.boundingSphere;\r\n geom.boundingBox = this.boundingBox;\r\n return [geom];\r\n }\r\n\r\n getGeoParams() {\r\n return this._cylGeometry.parameters;\r\n }\r\n\r\n _init(instanceCount, cylinderGeo, useZSprites) {\r\n this.copy(cylinderGeo);\r\n this._matVector1 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._matVector2 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._matVector3 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._color1 = utils.allocateTyped(Float32Array, instanceCount * COLOR_SIZE);\r\n this._color2 = utils.allocateTyped(Float32Array, instanceCount * COLOR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, instanceCount);\r\n _.fill(alpha, 1.0);\r\n\r\n this.setAttribute('matVector1', new THREE.InstancedBufferAttribute(this._matVector1, OFFSET_SIZE, false, 1));\r\n this.setAttribute('matVector2', new THREE.InstancedBufferAttribute(this._matVector2, OFFSET_SIZE, false, 1));\r\n this.setAttribute('matVector3', new THREE.InstancedBufferAttribute(this._matVector3, OFFSET_SIZE, false, 1));\r\n this.setAttribute('color', new THREE.InstancedBufferAttribute(this._color1, COLOR_SIZE, false, 1));\r\n this.setAttribute('color2', new THREE.InstancedBufferAttribute(this._color2, COLOR_SIZE, false, 1));\r\n\r\n this.setAttribute('alphaColor', new THREE.InstancedBufferAttribute(this._alpha, 1, false, 1));\r\n\r\n if (useZSprites) {\r\n this._invmatVector1 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._invmatVector2 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n this._invmatVector3 = utils.allocateTyped(Float32Array, instanceCount * OFFSET_SIZE);\r\n\r\n this.setAttribute(\r\n 'invmatVector1',\r\n new THREE.InstancedBufferAttribute(this._invmatVector1, OFFSET_SIZE, false, 1),\r\n );\r\n this.setAttribute(\r\n 'invmatVector2',\r\n new THREE.InstancedBufferAttribute(this._invmatVector2, OFFSET_SIZE, false, 1),\r\n );\r\n this.setAttribute(\r\n 'invmatVector3',\r\n new THREE.InstancedBufferAttribute(this._invmatVector3, OFFSET_SIZE, false, 1),\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport default Instanced2CCylindersGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst TRI_SIZE = 3;\r\nconst tmpPrev = new THREE.Vector3();\r\nconst tmpNext = new THREE.Vector3();\r\nconst tmpRes = new THREE.Vector3();\r\nconst simpleNormal = new THREE.Vector3(1.0, 0.0, 0.0);\r\nconst normalOnCut = new THREE.Vector3();\r\nconst nearRingPt = new THREE.Vector3();\r\n\r\nfunction _createExtrudedChunkGeometry(shape, ringsCount) {\r\n const geo = new THREE.BufferGeometry();\r\n const ptsCount = shape.length;\r\n const totalPts = ptsCount * ringsCount;\r\n const type = totalPts <= 65536 ? Uint16Array : Uint32Array;\r\n const facesPerChunk = (ringsCount - 1) * ptsCount * 2;\r\n const indices = new THREE.BufferAttribute(utils.allocateTyped(type, facesPerChunk * TRI_SIZE), 1);\r\n\r\n let currVtxIdx = 0;\r\n let currFaceIdx = 0;\r\n for (let y = 0; y < ringsCount; y++) {\r\n // faces\r\n if (y !== ringsCount - 1) {\r\n for (let i = 0; i < ptsCount; i++) {\r\n const v1 = currVtxIdx + i;\r\n const v2 = currVtxIdx + ptsCount + i;\r\n const v3 = currVtxIdx + ptsCount + ((i + 1) % ptsCount);\r\n const v4 = currVtxIdx + ((i + 1) % ptsCount);\r\n\r\n indices.setXYZ(currFaceIdx * TRI_SIZE, v1, v4, v2);\r\n currFaceIdx++;\r\n indices.setXYZ(currFaceIdx * TRI_SIZE, v2, v4, v3);\r\n currFaceIdx++;\r\n }\r\n }\r\n\r\n currVtxIdx += ptsCount;\r\n }\r\n\r\n geo.setIndex(indices);\r\n const pos = utils.allocateTyped(Float32Array, totalPts * VEC_SIZE);\r\n geo.setAttribute('position', new THREE.BufferAttribute(pos, VEC_SIZE));\r\n\r\n geo._positions = shape;\r\n\r\n return geo;\r\n}\r\n\r\nclass ExtrudedObjectsGeometry extends ChunkedObjectsGeometry {\r\n constructor(shape, ringsCount, chunksCount) {\r\n const chunkGeo = _createExtrudedChunkGeometry(shape, ringsCount);\r\n super(chunkGeo, chunksCount);\r\n this._ringsCount = ringsCount;\r\n\r\n const tmpShape = this._tmpShape = [];\r\n for (let i = 0; i < shape.length; ++i) {\r\n tmpShape[i] = new THREE.Vector3();\r\n }\r\n }\r\n\r\n setItem(itemIdx, matrices, hasSlope = false, hasCut = false) {\r\n const ptsCount = this._chunkGeo._positions.length;\r\n const ringsCount = this._ringsCount;\r\n const chunkStartIdx = ptsCount * this._ringsCount * itemIdx * VEC_SIZE;\r\n\r\n this._setPoints(matrices, ptsCount, ringsCount, chunkStartIdx);\r\n\r\n if (hasSlope) {\r\n this._setSlopeNormals(ptsCount, ringsCount, chunkStartIdx);\r\n } else {\r\n this._setBaseNormals(ptsCount, ringsCount, chunkStartIdx);\r\n }\r\n\r\n if (hasCut) {\r\n this._addCut(ptsCount, ringsCount, chunkStartIdx);\r\n }\r\n }\r\n\r\n _setPoints(matrices, ptsCount, ringsCount, chunkStartIdx) {\r\n const tmpShape = this._tmpShape;\r\n const positions = this._positions;\r\n const shape = this._chunkGeo._positions;\r\n\r\n for (let i = 0, vtxIdx = chunkStartIdx; i < ringsCount; ++i) {\r\n const mtx = matrices[i];\r\n\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpShape[j].copy(shape[j]).applyMatrix4(mtx).toArray(positions, vtxIdx);\r\n }\r\n }\r\n }\r\n\r\n _setBaseNormals(ptsCount, ringsCount, chunkStartIdx) {\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n for (let i = 0, vtxIdx = chunkStartIdx; i < ringsCount; ++i, vtxIdx += nPtsInRing) {\r\n this._countNormalsInRing(ptsCount, vtxIdx, false);\r\n }\r\n }\r\n\r\n _setSlopeNormals(ptsCount, ringsCount, chunkStartIdx) {\r\n const normals = this._normals;\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n let vtxIdx = chunkStartIdx;\r\n // First ring\r\n // In all cases, besides cut, second ring is coincident to first. So values of first ring's normals doesn't\r\n // matter (In the cut case special handler will be applied later and will set them to correct values)\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n simpleNormal.toArray(normals, vtxIdx);\r\n }\r\n // second ring\r\n // If it isn't first Item we take normals' values from the last ring of the previous item (these rings are coincident)\r\n // else we count normals' values based on next ring information\r\n if (vtxIdx - 2 * nPtsInRing > 0) {\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpRes.fromArray(normals, vtxIdx - 2 * nPtsInRing).toArray(normals, vtxIdx);\r\n }\r\n } else {\r\n this._countNormalsInRing(ptsCount, vtxIdx, true, +nPtsInRing);\r\n vtxIdx += nPtsInRing;\r\n }\r\n // other rings\r\n // we count normals' values based on previous ring information\r\n for (let i = 2; i < ringsCount; ++i, vtxIdx += nPtsInRing) {\r\n this._countNormalsInRing(ptsCount, vtxIdx, true, -nPtsInRing);\r\n }\r\n }\r\n\r\n // Counting normals:\r\n // - Slope\r\n // Radius changes throught part => normals aren't parallel with the plane contains section points\r\n // normal = vTangentInSectionPlane x vToSuchPointInPrevSection (all vectors are scaled for being 1 in length)\r\n // - No slope\r\n // Radius doesn't change throught part => normals are parallel with the plane contains section points\r\n // normal = vToPrevPointInSection + vToNextPointInSection (all vectors are scaled for being 1 in length)\r\n _countNormalsInRing(ptsCount, vtxIdx, isSlope, shiftToExtraPt) {\r\n const tmpShape = this._tmpShape;\r\n const normals = this._normals;\r\n\r\n tmpShape[0].fromArray(this._positions, vtxIdx);\r\n tmpShape[ptsCount - 1].fromArray(this._positions, vtxIdx + (ptsCount - 1) * VEC_SIZE);\r\n\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n if (j < ptsCount - 1) {\r\n tmpShape[j + 1].fromArray(this._positions, vtxIdx + VEC_SIZE);\r\n }\r\n\r\n if (isSlope) {\r\n nearRingPt.fromArray(this._positions, vtxIdx + shiftToExtraPt);\r\n\r\n tmpPrev.subVectors(tmpShape[(j + ptsCount - 1) % ptsCount], tmpShape[(j + 1) % ptsCount]).normalize();\r\n tmpNext.subVectors(tmpShape[j], nearRingPt).normalize();\r\n tmpRes.crossVectors(tmpNext, tmpPrev).normalize().toArray(normals, vtxIdx);\r\n } else {\r\n tmpPrev.subVectors(tmpShape[j], tmpShape[(j + ptsCount - 1) % ptsCount]).normalize();\r\n tmpNext.subVectors(tmpShape[j], tmpShape[(j + 1) % ptsCount]).normalize();\r\n tmpRes.addVectors(tmpPrev, tmpNext).normalize().toArray(normals, vtxIdx);\r\n }\r\n }\r\n }\r\n\r\n _addCut(ptsCount, ringsCount, chunkStartIdx) {\r\n // Nothing to do if item is flat or only line\r\n if (ptsCount < 3 || ringsCount < 2) {\r\n return;\r\n }\r\n const positions = this._positions;\r\n const normals = this._normals;\r\n const tmpShape = this._tmpShape;\r\n const nPtsInRing = ptsCount * VEC_SIZE;\r\n\r\n // Normal to the cut plane is equal to cross product of two vectors which are lying in it\r\n tmpShape[0].fromArray(positions, chunkStartIdx);\r\n tmpShape[1].fromArray(positions, chunkStartIdx + VEC_SIZE);\r\n tmpShape[2].fromArray(positions, chunkStartIdx + 2 * VEC_SIZE);\r\n\r\n tmpPrev.subVectors(tmpShape[1], tmpShape[0]).normalize();\r\n tmpNext.subVectors(tmpShape[1], tmpShape[2]).normalize();\r\n normalOnCut.crossVectors(tmpPrev, tmpNext).normalize();\r\n\r\n let vtxIdx = chunkStartIdx;\r\n // First and second rings normals' values are equal to value of normal to the cutting plane\r\n for (let j = 0; j < ptsCount * 2; ++j, vtxIdx += VEC_SIZE) {\r\n normalOnCut.toArray(normals, vtxIdx);\r\n }\r\n if (ringsCount > 2) {\r\n // Third ring points are coincident to first ring points, but have different normals. It makes sharp angle near cut\r\n for (let j = 0; j < ptsCount; ++j, vtxIdx += VEC_SIZE) {\r\n tmpRes.fromArray(positions, vtxIdx - nPtsInRing).toArray(positions, vtxIdx);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default ExtrudedObjectsGeometry;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst MAX_IDC_16BIT = 65535;\r\nconst VERTEX_PER_SEGMENT = 4;\r\nconst POS_SIZE = 4;\r\nconst DIR_SIZE = 3;\r\nconst COL_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\nconst direction = new THREE.Vector3();\r\n\r\nfunction setArrayXYZ(arr, idx, x, y, z) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n}\r\n\r\nfunction setArrayXYZW(arr, idx, x, y, z, w) {\r\n arr[idx] = x;\r\n arr[idx + 1] = y;\r\n arr[idx + 2] = z;\r\n arr[idx + 3] = w;\r\n}\r\n\r\nfunction getSubset(arr, startSegmentIdx, segmentsCount, elemSize) {\r\n const start = startSegmentIdx * VERTEX_PER_SEGMENT;\r\n const end = start + segmentsCount * VERTEX_PER_SEGMENT;\r\n return arr.subarray(start * elemSize, end * elemSize);\r\n}\r\n\r\n/**\r\n * This class represents lines geometry which consists of screen-aligned narrow quad of variable width.\r\n *\r\n * @constructor\r\n *\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n * collision geometry.\r\n */\r\n\r\nclass ThickLinesGeometry extends THREE.BufferGeometry {\r\n constructor(segmentsCount) {\r\n super();\r\n this._initVertices(segmentsCount);\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.getAttribute('position').needsUpdate = true;\r\n this.getAttribute('color').needsUpdate = true;\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n this.getAttribute('direction').needsUpdate = true;\r\n }\r\n\r\n setColor(segmentIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n let idx = segmentIdx * VERTEX_PER_SEGMENT * COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n idx += COL_SIZE;\r\n setArrayXYZ(this._colors, idx, tmpColor.r, tmpColor.g, tmpColor.b);\r\n }\r\n\r\n setSegment(segmentIdx, pos1, pos2) {\r\n direction.subVectors(pos1, pos2);\r\n direction.normalize();\r\n const positions = this._positions;\r\n const directions = this._directions;\r\n let idx = segmentIdx * VERTEX_PER_SEGMENT * POS_SIZE;\r\n let dirIdx = segmentIdx * VERTEX_PER_SEGMENT * DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos1.x, pos1.y, pos1.z, 0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos1.x, pos1.y, pos1.z, -0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos2.x, pos2.y, pos2.z, 0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n idx += POS_SIZE;\r\n dirIdx += DIR_SIZE;\r\n setArrayXYZW(positions, idx, pos2.x, pos2.y, pos2.z, -0.5);\r\n setArrayXYZ(directions, dirIdx, direction.x, direction.y, direction.z);\r\n }\r\n\r\n setOpacity(startSegIdx, endSegIdx, value) {\r\n const start = startSegIdx * VERTEX_PER_SEGMENT;\r\n const end = endSegIdx * VERTEX_PER_SEGMENT;\r\n _.fill(this.alpha, value, end, start);\r\n this.getAttribute('alphaColor').needsUpdate = true;\r\n }\r\n\r\n getSubsetSegments(startSegmentIdx, segmentsCount) {\r\n return [\r\n getSubset(this._positions, startSegmentIdx, segmentsCount, POS_SIZE),\r\n getSubset(this._directions, startSegmentIdx, segmentsCount, DIR_SIZE),\r\n ];\r\n }\r\n\r\n getSubsetColors(startSegmentIdx, segmentsCount) {\r\n return getSubset(this._colors, startSegmentIdx, segmentsCount, COL_SIZE);\r\n }\r\n\r\n getSubsetOpacities(startSegmentIdx, segmentsCount) {\r\n return getSubset(this._alpha, startSegmentIdx, segmentsCount, 1);\r\n }\r\n\r\n getNumVertexPerSegment() {\r\n return VERTEX_PER_SEGMENT;\r\n }\r\n\r\n getPositionSize() {\r\n return POS_SIZE;\r\n }\r\n\r\n setSegments(startSegmentIdx, positions) {\r\n const startPos = startSegmentIdx * VERTEX_PER_SEGMENT * POS_SIZE;\r\n if (positions instanceof Array && positions.length === 2) {\r\n this._positions.set(positions[0], startPos);\r\n const startDir = startSegmentIdx * VERTEX_PER_SEGMENT * DIR_SIZE;\r\n this._directions.set(positions[1], startDir); // dirs are geo part of vertex\r\n } else {\r\n this._positions.set(positions, startPos);\r\n }\r\n }\r\n\r\n setColors(startSegmentIdx, colors) {\r\n const start = startSegmentIdx * VERTEX_PER_SEGMENT * COL_SIZE;\r\n this._colors.set(colors, start);\r\n }\r\n\r\n _initVertices(segmentsCount) {\r\n this._buffersSize = segmentsCount * VERTEX_PER_SEGMENT;\r\n const pointsCount = this._buffersSize;\r\n const use32bitIndex = pointsCount > MAX_IDC_16BIT;\r\n this._index = utils.allocateTyped(use32bitIndex ? Uint32Array : Uint16Array, segmentsCount * 6);\r\n this._positions = utils.allocateTyped(Float32Array, pointsCount * POS_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, pointsCount * COL_SIZE);\r\n this._directions = utils.allocateTyped(Float32Array, pointsCount * DIR_SIZE);\r\n const alpha = this._alpha = utils.allocateTyped(Float32Array, pointsCount);\r\n _.fill(alpha, 1.0);\r\n\r\n const index = this._index;\r\n let indexOffset = 0;\r\n let pointOffset = 0;\r\n for (let j = 0; j < segmentsCount; j++, indexOffset += 6, pointOffset += VERTEX_PER_SEGMENT) {\r\n index[indexOffset] = pointOffset;\r\n index[indexOffset + 1] = pointOffset + 1;\r\n index[indexOffset + 2] = pointOffset + 3;\r\n index[indexOffset + 3] = pointOffset;\r\n index[indexOffset + 4] = pointOffset + 2;\r\n index[indexOffset + 5] = pointOffset + 3;\r\n }\r\n this.setIndex(new THREE.BufferAttribute(this._index, 1));\r\n\r\n this.setAttribute('position', new THREE.BufferAttribute(this._positions, POS_SIZE));\r\n this.setAttribute('color', new THREE.BufferAttribute(this._colors, COL_SIZE));\r\n this.setAttribute('alphaColor', new THREE.BufferAttribute(alpha, 1));\r\n this.setAttribute('direction', new THREE.BufferAttribute(this._directions, DIR_SIZE));\r\n }\r\n}\r\n\r\nexport default ThickLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport BaseLinesGeometry from './ThickLinesGeometry';\r\n\r\n/**\r\n * This class represents geometry which consists lines. This can build bounding volumes\r\n * @constructor\r\n *\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n */\r\nclass LinesGeometry extends BaseLinesGeometry {\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n computeBoundingSphere() {\r\n const { boundingBox } = this;\r\n // Build bounding sphere\r\n let radiusSquared = 0.0;\r\n const center = new THREE.Vector3();\r\n if (boundingBox) {\r\n boundingBox.getCenter(center);\r\n }\r\n const positions = this._positions;\r\n const sphere = this.boundingSphere || new THREE.Sphere();\r\n const size = this._positions.length;\r\n const pos = new THREE.Vector3();\r\n const posSize = this.getPositionSize();\r\n for (let i = 0; i < size; i += posSize) {\r\n pos.set(positions[i], positions[i + 1], positions[i + 2]);\r\n const lengthSquared = center.distanceToSquared(pos);\r\n if (radiusSquared < lengthSquared) {\r\n radiusSquared = lengthSquared;\r\n }\r\n }\r\n sphere.set(center, Math.sqrt(radiusSquared));\r\n this.boundingSphere = sphere;\r\n }\r\n\r\n computeBoundingBox() {\r\n const positions = this._positions;\r\n const box = new THREE.Box3();\r\n const size = this._positions.length;\r\n const tmpVec = new THREE.Vector3();\r\n const posSize = this.getPositionSize();\r\n for (let i = 0; i < size; i += posSize) {\r\n tmpVec.set(positions[i], positions[i + 1], positions[i + 2]);\r\n box.expandByPoint(tmpVec);\r\n }\r\n this.boundingBox = box;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n}\r\n\r\nexport default LinesGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport ChunkedObjectsGeometry from './ChunkedObjectsGeometry';\r\n\r\nconst VEC_SIZE = 3;\r\nconst tmpVector = new THREE.Vector3();\r\nconst normMtx = new THREE.Matrix3();\r\n\r\nclass CylinderCollisionGeo extends ChunkedObjectsGeometry {\r\n constructor(instanceCount, polyComplexity) {\r\n const cylGeometry = new THREE.CylinderGeometry(1, 1, 1.0, Math.max(3, polyComplexity), 2, true);\r\n super(cylGeometry, instanceCount);\r\n\r\n const chunkSize = this._chunkSize;\r\n this._chunkPos = this._chunkGeo.attributes.position.array;\r\n this._chunkNorms = this._chunkGeo.attributes.normal.array;\r\n this._tmpVector = utils.allocateTyped(Float32Array, chunkSize * VEC_SIZE);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos, itemRad) {\r\n const chunkSize = this._chunkSize;\r\n const itemOffset = chunkSize * itemIdx * VEC_SIZE;\r\n\r\n const tmpArray = this._tmpVector;\r\n const geoPos = this._chunkPos;\r\n const geoNorm = this._chunkNorms;\r\n\r\n const mtx1 = gfxutils.calcCylinderMatrix(botPos, topPos, itemRad);\r\n normMtx.getNormalMatrix(mtx1);\r\n let idx;\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoPos, idx);\r\n tmpVector.applyMatrix4(mtx1);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._positions.set(tmpArray, itemOffset);\r\n\r\n for (let i = 0; i < chunkSize; ++i) {\r\n idx = i * VEC_SIZE;\r\n tmpVector.fromArray(geoNorm, idx);\r\n tmpVector.applyMatrix3(normMtx);\r\n tmpVector.toArray(tmpArray, idx);\r\n }\r\n this._normals.set(tmpArray, itemOffset);\r\n }\r\n}\r\nexport default CylinderCollisionGeo;\r\n","import LinesGeometry from './LinesGeometry';\r\nimport CylinderCollisionGeo from './CylinderCollisionGeo';\r\n\r\nconst COLLISION_RAD = 0.1;\r\n\r\n/**\r\n * This class represents geometry which consists of separate chunks.\r\n * Each chunk has same index and similar geometry with equal points and faces count.\r\n * Each chunk has by default only one color.\r\n * @constructor\r\n *\r\n * @param {number} chunksCount Total chunks count.\r\n * @param {number} segmentsCount Number of segments per chunk.\r\n * @param {boolean} enableCollision Enable or disable collision where each segment is\r\n * a collidable cylinder.\r\n * collision geometry.\r\n */\r\nclass ChunkedLinesGeometry extends LinesGeometry {\r\n constructor(chunksCount, segmentsCount, enableCollision) {\r\n super(chunksCount * segmentsCount);\r\n this._init(segmentsCount);\r\n this._collisionGeo = enableCollision ? new CylinderCollisionGeo(chunksCount * segmentsCount, 3) : null;\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n computeBoundingSphere() {\r\n const collisionGeo = this._collisionGeo;\r\n if (collisionGeo) {\r\n collisionGeo.computeBoundingSphere();\r\n this.boundingSphere = collisionGeo.boundingSphere;\r\n return;\r\n }\r\n super.computeBoundingSphere();\r\n }\r\n\r\n computeBoundingBox() {\r\n const collisionGeo = this._collisionGeo;\r\n if (collisionGeo) {\r\n collisionGeo.computeBoundingBox();\r\n this.boundingBox = collisionGeo.boundingBox;\r\n return;\r\n }\r\n super.computeBoundingBox();\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const collisionGeo = this._collisionGeo;\r\n if (!collisionGeo) {\r\n return;\r\n }\r\n const segCount = this._chunkSize;\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n for (let i = 0, n = intersects.length; i < n; ++i) {\r\n let { chunkIdx } = intersects[i];\r\n if (chunkIdx === undefined) {\r\n continue;\r\n }\r\n chunkIdx = (chunkIdx / segCount) | 0;\r\n intersects[i].chunkIdx = chunkIdx;\r\n }\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n const chunkSize = this._chunkSize;\r\n for (let i = chunkIdx * chunkSize, end = i + chunkSize; i < end; ++i) {\r\n super.setColor(i, colorVal);\r\n }\r\n }\r\n\r\n setSegment(chunkIdx, segIdx, pos1, pos2) {\r\n const chunkSize = this._chunkSize;\r\n const idx = chunkIdx * chunkSize + segIdx;\r\n super.setSegment(idx, pos1, pos2);\r\n if (this._collisionGeo) {\r\n this._collisionGeo.setItem(chunkIdx * chunkSize + segIdx, pos1, pos2, COLLISION_RAD);\r\n }\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n setOpacity(chunkIndices, value) {\r\n const chunkSize = this._chunkSize;\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const left = chunkIndices[i] * chunkSize;\r\n super.setOpacity(left, left + chunkSize - 1, value);\r\n }\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const instanceCount = chunkIndices.length;\r\n const chunkSize = this._chunkSize;\r\n const subset = new ChunkedLinesGeometry(instanceCount, chunkSize, false);\r\n for (let i = 0, n = chunkIndices.length; i < n; ++i) {\r\n const dstPtOffset = i * chunkSize;\r\n const startSegIdx = chunkIndices[i] * chunkSize;\r\n subset.setSegments(dstPtOffset, this.getSubsetSegments(startSegIdx, chunkSize));\r\n subset.setColors(dstPtOffset, this.getSubsetColors(startSegIdx, chunkSize));\r\n }\r\n\r\n subset.boundingSphere = this.boundingSphere;\r\n subset.boundingBox = this.boundingBox;\r\n return [subset];\r\n }\r\n\r\n _init(chunkSize) {\r\n this._chunkSize = chunkSize;\r\n }\r\n}\r\n\r\nexport default ChunkedLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport LinesGeometry from './LinesGeometry';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\n\r\nconst COLLISION_RAD = 0.3;\r\nconst tmpVector = new THREE.Vector3();\r\n\r\nclass TwoColorLinesGeometry extends LinesGeometry {\r\n constructor(segmentsCount) {\r\n super(segmentsCount * 2);\r\n this._init(segmentsCount);\r\n this._collisionGeo = new Simple2CCylindersGeometry(segmentsCount, 3);\r\n }\r\n\r\n setItem(itemIdx, botPos, topPos) {\r\n this._collisionGeo.setItem(itemIdx, botPos, topPos, COLLISION_RAD);\r\n const offset = 2 * itemIdx;// there are two points per segment\r\n tmpVector.lerpVectors(botPos, topPos, 0.5);\r\n super.setSegment(offset, botPos, tmpVector);\r\n super.setSegment(offset + 1, tmpVector, topPos);\r\n }\r\n\r\n setColor(itemIdx, colorVal1, colorVal2) {\r\n const offset = 2 * itemIdx;// there are two points per segment\r\n super.setColor(offset, colorVal1);\r\n super.setColor(offset + 1, colorVal2);\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n if (this._collisionGeo) {\r\n this._collisionGeo.raycast(raycaster, intersects);\r\n }\r\n }\r\n\r\n getSubset(segmentIndices) {\r\n const instanceCount = segmentIndices.length;\r\n const subset = new TwoColorLinesGeometry(instanceCount, false);\r\n for (let i = 0, n = instanceCount; i < n; ++i) {\r\n const startSegIdx = segmentIndices[i];\r\n subset.setSegments(i, this.getSubsetSegments(startSegIdx, 1));\r\n subset.setColors(i, this.getSubsetColors(startSegIdx, 1));\r\n }\r\n\r\n subset.boundingSphere = this.boundingSphere;\r\n subset.boundingBox = this.boundingBox;\r\n return [subset];\r\n }\r\n\r\n _init(segmentsCount) {\r\n this._segCounts = segmentsCount * 2;\r\n }\r\n}\r\n// (???)parent = LinesGeometry.prototype;\r\n\r\nexport default TwoColorLinesGeometry;\r\n","import * as THREE from 'three';\r\nimport ChunkedLinesGeometry from './ChunkedLinesGeometry';\r\nimport SphereCollisionGeo from './SphereCollisionGeo';\r\n\r\nconst vectors = [\r\n new THREE.Vector3(1, 0, 0),\r\n new THREE.Vector3(-1, 0, 0),\r\n new THREE.Vector3(0, 1, 0),\r\n new THREE.Vector3(0, -1, 0),\r\n new THREE.Vector3(0, 0, 1),\r\n new THREE.Vector3(0, 0, -1),\r\n];\r\nconst vecCount = vectors.length;\r\nconst tempPos1 = new THREE.Vector3();\r\nconst tempPos2 = new THREE.Vector3();\r\n\r\nclass CrossGeometry extends SphereCollisionGeo(ChunkedLinesGeometry) {\r\n constructor(chunksCount) {\r\n super(chunksCount, chunksCount, (vecCount / 2) | 0, false);\r\n }\r\n\r\n setItem(itemIdx, itemPos, itemRad) {\r\n this.setSphere(itemIdx, itemPos, itemRad);\r\n\r\n for (let i = 0; i < vecCount / 2; ++i) {\r\n const first = i * 2;\r\n tempPos1.x = itemPos.x + vectors[first].x * itemRad;\r\n tempPos1.y = itemPos.y + vectors[first].y * itemRad;\r\n tempPos1.z = itemPos.z + vectors[first].z * itemRad;\r\n const second = first + 1;\r\n tempPos2.x = itemPos.x + vectors[second].x * itemRad;\r\n tempPos2.y = itemPos.y + vectors[second].y * itemRad;\r\n tempPos2.z = itemPos.z + vectors[second].z * itemRad;\r\n this.setSegment(itemIdx, i, tempPos1, tempPos2);\r\n }\r\n }\r\n}\r\nexport default CrossGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\nconst POS_RAD_SIZE = 4;\r\nconst COLOR_SIZE = 3;\r\nconst tmpColor = new THREE.Color();\r\n\r\n/**\r\n * This is a base class for isosurface algorithms.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\nclass IsoSurfaceGeometry extends THREE.BufferGeometry {\r\n constructor(spheresCount, opts) {\r\n super();\r\n\r\n this._opts = opts;\r\n this.zClip = this._opts.zClip;\r\n this._posRad = utils.allocateTyped(Float32Array, spheresCount * POS_RAD_SIZE);\r\n this._colors = utils.allocateTyped(Float32Array, spheresCount * COLOR_SIZE);\r\n }\r\n\r\n setItem(chunkIdx, pos, radius) {\r\n const posRad = this._posRad;\r\n let idx = POS_RAD_SIZE * chunkIdx;\r\n posRad[idx++] = pos.x;\r\n posRad[idx++] = pos.y;\r\n posRad[idx++] = pos.z;\r\n posRad[idx] = radius;\r\n }\r\n\r\n setColor(chunkIdx, colorVal) {\r\n tmpColor.set(colorVal);\r\n const colors = this._colors;\r\n let idx = COLOR_SIZE * chunkIdx;\r\n colors[idx++] = tmpColor.r;\r\n colors[idx++] = tmpColor.g;\r\n colors[idx] = tmpColor.b;\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n this.computeBoundingSphere();\r\n }\r\n\r\n finishUpdate() {\r\n this._build();\r\n }\r\n\r\n setOpacity() {\r\n // not implemented\r\n }\r\n\r\n raycast() {\r\n }\r\n\r\n getSubset() {\r\n return [];\r\n }\r\n}\r\nexport default IsoSurfaceGeometry;\r\n","import utils from '../../utils';\r\n\r\n/**\r\n * Class for marching cube\r\n * Stores 8 points and 8 float values are stored together in linear array\r\n * Int values for has intersection or not - in integer32 linear array\r\n * Int values for bits flags - in integer32 linear array\r\n *\r\n */\r\nclass IsoSurfaceMarchCube {\r\n constructor() {\r\n this.pointsValuesLinear = null;\r\n this.hasIntersection = null;\r\n this.bitsInside = null;\r\n }\r\n\r\n create(numCellsPerSide) {\r\n const vx7000000 = 0x7000000;\r\n const n3 = numCellsPerSide * numCellsPerSide * numCellsPerSide;\r\n if (n3 > vx7000000) {\r\n throw new Error('Too large cube dimension: lead to memory huge uasge');\r\n }\r\n this.pointsValuesLinear = utils.allocateTyped(Float32Array, (2 << (2 + 2)) * n3);\r\n this.hasIntersection = utils.allocateTyped(Int32Array, n3);\r\n this.bitsInside = utils.allocateTyped(Int32Array, n3);\r\n return 0;\r\n }\r\n\r\n destroy() {\r\n this.bitsInside = null;\r\n this.hasIntersection = null;\r\n this.pointsValuesLinear = null;\r\n }\r\n}\r\n\r\nIsoSurfaceMarchCube.prototype.striIndicesMarchCube = [\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 2, 10, 0, 2, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 8, 3, 2, 10, 8, 10, 9, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 11, 2, 8, 11, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 11, 2, 1, 9, 11, 9, 8, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 10, 1, 11, 10, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 10, 1, 0, 8, 10, 8, 11, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 9, 0, 3, 11, 9, 11, 10, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 3, 0, 7, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 1, 9, 4, 7, 1, 7, 3, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 4, 7, 3, 0, 4, 1, 2, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 2, 10, 9, 0, 2, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 10, 9, 2, 9, 7, 2, 7, 3, 7, 9, 4, -1, -1, -1, -1,\r\n 8, 4, 7, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 4, 7, 11, 2, 4, 2, 0, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 1, 8, 4, 7, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 7, 11, 9, 4, 11, 9, 11, 2, 9, 2, 1, -1, -1, -1, -1,\r\n 3, 10, 1, 3, 11, 10, 7, 8, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 11, 10, 1, 4, 11, 1, 0, 4, 7, 11, 4, -1, -1, -1, -1,\r\n 4, 7, 8, 9, 0, 11, 9, 11, 10, 11, 0, 3, -1, -1, -1, -1,\r\n 4, 7, 11, 4, 11, 9, 9, 11, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 5, 4, 1, 5, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 5, 4, 8, 3, 5, 3, 1, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 1, 2, 10, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 2, 10, 5, 4, 2, 4, 0, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 10, 5, 3, 2, 5, 3, 5, 4, 3, 4, 8, -1, -1, -1, -1,\r\n 9, 5, 4, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 11, 2, 0, 8, 11, 4, 9, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 5, 4, 0, 1, 5, 2, 3, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 1, 5, 2, 5, 8, 2, 8, 11, 4, 8, 5, -1, -1, -1, -1,\r\n 10, 3, 11, 10, 1, 3, 9, 5, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 5, 0, 8, 1, 8, 10, 1, 8, 11, 10, -1, -1, -1, -1,\r\n 5, 4, 0, 5, 0, 11, 5, 11, 10, 11, 0, 3, -1, -1, -1, -1,\r\n 5, 4, 8, 5, 8, 10, 10, 8, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 7, 8, 5, 7, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 3, 0, 9, 5, 3, 5, 7, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 7, 8, 0, 1, 7, 1, 5, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 7, 8, 9, 5, 7, 10, 1, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 1, 2, 9, 5, 0, 5, 3, 0, 5, 7, 3, -1, -1, -1, -1,\r\n 8, 0, 2, 8, 2, 5, 8, 5, 7, 10, 5, 2, -1, -1, -1, -1,\r\n 2, 10, 5, 2, 5, 3, 3, 5, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 9, 5, 7, 8, 9, 3, 11, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 7, 9, 7, 2, 9, 2, 0, 2, 7, 11, -1, -1, -1, -1,\r\n 2, 3, 11, 0, 1, 8, 1, 7, 8, 1, 5, 7, -1, -1, -1, -1,\r\n 11, 2, 1, 11, 1, 7, 7, 1, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 8, 8, 5, 7, 10, 1, 3, 10, 3, 11, -1, -1, -1, -1,\r\n 5, 7, 0, 5, 0, 9, 7, 11, 0, 1, 0, 10, 11, 10, 0, -1,\r\n 11, 10, 0, 11, 0, 3, 10, 5, 0, 8, 0, 7, 5, 7, 0, -1,\r\n 11, 10, 5, 7, 11, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 1, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 8, 3, 1, 9, 8, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 5, 2, 6, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 5, 1, 2, 6, 3, 0, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 6, 5, 9, 0, 6, 0, 2, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 9, 8, 5, 8, 2, 5, 2, 6, 3, 2, 8, -1, -1, -1, -1,\r\n 2, 3, 11, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 0, 8, 11, 2, 0, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 1, 9, 2, 9, 11, 2, 9, 8, 11, -1, -1, -1, -1,\r\n 6, 3, 11, 6, 5, 3, 5, 1, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 11, 0, 11, 5, 0, 5, 1, 5, 11, 6, -1, -1, -1, -1,\r\n 3, 11, 6, 0, 3, 6, 0, 6, 5, 0, 5, 9, -1, -1, -1, -1,\r\n 6, 5, 9, 6, 9, 11, 11, 9, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 3, 0, 4, 7, 3, 6, 5, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 5, 10, 6, 8, 4, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 6, 5, 1, 9, 7, 1, 7, 3, 7, 9, 4, -1, -1, -1, -1,\r\n 6, 1, 2, 6, 5, 1, 4, 7, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 5, 5, 2, 6, 3, 0, 4, 3, 4, 7, -1, -1, -1, -1,\r\n 8, 4, 7, 9, 0, 5, 0, 6, 5, 0, 2, 6, -1, -1, -1, -1,\r\n 7, 3, 9, 7, 9, 4, 3, 2, 9, 5, 9, 6, 2, 6, 9, -1,\r\n 3, 11, 2, 7, 8, 4, 10, 6, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 10, 6, 4, 7, 2, 4, 2, 0, 2, 7, 11, -1, -1, -1, -1,\r\n 0, 1, 9, 4, 7, 8, 2, 3, 11, 5, 10, 6, -1, -1, -1, -1,\r\n 9, 2, 1, 9, 11, 2, 9, 4, 11, 7, 11, 4, 5, 10, 6, -1,\r\n 8, 4, 7, 3, 11, 5, 3, 5, 1, 5, 11, 6, -1, -1, -1, -1,\r\n 5, 1, 11, 5, 11, 6, 1, 0, 11, 7, 11, 4, 0, 4, 11, -1,\r\n 0, 5, 9, 0, 6, 5, 0, 3, 6, 11, 6, 3, 8, 4, 7, -1,\r\n 6, 5, 9, 6, 9, 11, 4, 7, 9, 7, 11, 9, -1, -1, -1, -1,\r\n 10, 4, 9, 6, 4, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 10, 6, 4, 9, 10, 0, 8, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 0, 1, 10, 6, 0, 6, 4, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 3, 1, 8, 1, 6, 8, 6, 4, 6, 1, 10, -1, -1, -1, -1,\r\n 1, 4, 9, 1, 2, 4, 2, 6, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 1, 2, 9, 2, 4, 9, 2, 6, 4, -1, -1, -1, -1,\r\n 0, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 3, 2, 8, 2, 4, 4, 2, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 4, 9, 10, 6, 4, 11, 2, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 2, 2, 8, 11, 4, 9, 10, 4, 10, 6, -1, -1, -1, -1,\r\n 3, 11, 2, 0, 1, 6, 0, 6, 4, 6, 1, 10, -1, -1, -1, -1,\r\n 6, 4, 1, 6, 1, 10, 4, 8, 1, 2, 1, 11, 8, 11, 1, -1,\r\n 9, 6, 4, 9, 3, 6, 9, 1, 3, 11, 6, 3, -1, -1, -1, -1,\r\n 8, 11, 1, 8, 1, 0, 11, 6, 1, 9, 1, 4, 6, 4, 1, -1,\r\n 3, 11, 6, 3, 6, 0, 0, 6, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 4, 8, 11, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 10, 6, 7, 8, 10, 8, 9, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 7, 3, 0, 10, 7, 0, 9, 10, 6, 7, 10, -1, -1, -1, -1,\r\n 10, 6, 7, 1, 10, 7, 1, 7, 8, 1, 8, 0, -1, -1, -1, -1,\r\n 10, 6, 7, 10, 7, 1, 1, 7, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 6, 1, 6, 8, 1, 8, 9, 8, 6, 7, -1, -1, -1, -1,\r\n 2, 6, 9, 2, 9, 1, 6, 7, 9, 0, 9, 3, 7, 3, 9, -1,\r\n 7, 8, 0, 7, 0, 6, 6, 0, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 3, 2, 6, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 11, 10, 6, 8, 10, 8, 9, 8, 6, 7, -1, -1, -1, -1,\r\n 2, 0, 7, 2, 7, 11, 0, 9, 7, 6, 7, 10, 9, 10, 7, -1,\r\n 1, 8, 0, 1, 7, 8, 1, 10, 7, 6, 7, 10, 2, 3, 11, -1,\r\n 11, 2, 1, 11, 1, 7, 10, 6, 1, 6, 7, 1, -1, -1, -1, -1,\r\n 8, 9, 6, 8, 6, 7, 9, 1, 6, 11, 6, 3, 1, 3, 6, -1,\r\n 0, 9, 1, 11, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 8, 0, 7, 0, 6, 3, 11, 0, 11, 6, 0, -1, -1, -1, -1,\r\n 7, 11, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 8, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 9, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 1, 9, 8, 3, 1, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 1, 2, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 3, 0, 8, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 9, 0, 2, 10, 9, 6, 11, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 11, 7, 2, 10, 3, 10, 8, 3, 10, 9, 8, -1, -1, -1, -1,\r\n 7, 2, 3, 6, 2, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 7, 0, 8, 7, 6, 0, 6, 2, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 7, 6, 2, 3, 7, 0, 1, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 6, 2, 1, 8, 6, 1, 9, 8, 8, 7, 6, -1, -1, -1, -1,\r\n 10, 7, 6, 10, 1, 7, 1, 3, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 7, 6, 1, 7, 10, 1, 8, 7, 1, 0, 8, -1, -1, -1, -1,\r\n 0, 3, 7, 0, 7, 10, 0, 10, 9, 6, 10, 7, -1, -1, -1, -1,\r\n 7, 6, 10, 7, 10, 8, 8, 10, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 8, 4, 11, 8, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 6, 11, 3, 0, 6, 0, 4, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 6, 11, 8, 4, 6, 9, 0, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 4, 6, 9, 6, 3, 9, 3, 1, 11, 3, 6, -1, -1, -1, -1,\r\n 6, 8, 4, 6, 11, 8, 2, 10, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 3, 0, 11, 0, 6, 11, 0, 4, 6, -1, -1, -1, -1,\r\n 4, 11, 8, 4, 6, 11, 0, 2, 9, 2, 10, 9, -1, -1, -1, -1,\r\n 10, 9, 3, 10, 3, 2, 9, 4, 3, 11, 3, 6, 4, 6, 3, -1,\r\n 8, 2, 3, 8, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 4, 2, 4, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 9, 0, 2, 3, 4, 2, 4, 6, 4, 3, 8, -1, -1, -1, -1,\r\n 1, 9, 4, 1, 4, 2, 2, 4, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 1, 3, 8, 6, 1, 8, 4, 6, 6, 10, 1, -1, -1, -1, -1,\r\n 10, 1, 0, 10, 0, 6, 6, 0, 4, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 6, 3, 4, 3, 8, 6, 10, 3, 0, 3, 9, 10, 9, 3, -1,\r\n 10, 9, 4, 6, 10, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 5, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 4, 9, 5, 11, 7, 6, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 0, 1, 5, 4, 0, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 7, 6, 8, 3, 4, 3, 5, 4, 3, 1, 5, -1, -1, -1, -1,\r\n 9, 5, 4, 10, 1, 2, 7, 6, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 6, 11, 7, 1, 2, 10, 0, 8, 3, 4, 9, 5, -1, -1, -1, -1,\r\n 7, 6, 11, 5, 4, 10, 4, 2, 10, 4, 0, 2, -1, -1, -1, -1,\r\n 3, 4, 8, 3, 5, 4, 3, 2, 5, 10, 5, 2, 11, 7, 6, -1,\r\n 7, 2, 3, 7, 6, 2, 5, 4, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 5, 4, 0, 8, 6, 0, 6, 2, 6, 8, 7, -1, -1, -1, -1,\r\n 3, 6, 2, 3, 7, 6, 1, 5, 0, 5, 4, 0, -1, -1, -1, -1,\r\n 6, 2, 8, 6, 8, 7, 2, 1, 8, 4, 8, 5, 1, 5, 8, -1,\r\n 9, 5, 4, 10, 1, 6, 1, 7, 6, 1, 3, 7, -1, -1, -1, -1,\r\n 1, 6, 10, 1, 7, 6, 1, 0, 7, 8, 7, 0, 9, 5, 4, -1,\r\n 4, 0, 10, 4, 10, 5, 0, 3, 10, 6, 10, 7, 3, 7, 10, -1,\r\n 7, 6, 10, 7, 10, 8, 5, 4, 10, 4, 8, 10, -1, -1, -1, -1,\r\n 6, 9, 5, 6, 11, 9, 11, 8, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 6, 11, 0, 6, 3, 0, 5, 6, 0, 9, 5, -1, -1, -1, -1,\r\n 0, 11, 8, 0, 5, 11, 0, 1, 5, 5, 6, 11, -1, -1, -1, -1,\r\n 6, 11, 3, 6, 3, 5, 5, 3, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 10, 9, 5, 11, 9, 11, 8, 11, 5, 6, -1, -1, -1, -1,\r\n 0, 11, 3, 0, 6, 11, 0, 9, 6, 5, 6, 9, 1, 2, 10, -1,\r\n 11, 8, 5, 11, 5, 6, 8, 0, 5, 10, 5, 2, 0, 2, 5, -1,\r\n 6, 11, 3, 6, 3, 5, 2, 10, 3, 10, 5, 3, -1, -1, -1, -1,\r\n 5, 8, 9, 5, 2, 8, 5, 6, 2, 3, 8, 2, -1, -1, -1, -1,\r\n 9, 5, 6, 9, 6, 0, 0, 6, 2, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 5, 8, 1, 8, 0, 5, 6, 8, 3, 8, 2, 6, 2, 8, -1,\r\n 1, 5, 6, 2, 1, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 3, 6, 1, 6, 10, 3, 8, 6, 5, 6, 9, 8, 9, 6, -1,\r\n 10, 1, 0, 10, 0, 6, 9, 5, 0, 5, 6, 0, -1, -1, -1, -1,\r\n 0, 3, 8, 5, 6, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 5, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 5, 10, 7, 5, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 5, 10, 11, 7, 5, 8, 3, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 11, 7, 5, 10, 11, 1, 9, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 10, 7, 5, 10, 11, 7, 9, 8, 1, 8, 3, 1, -1, -1, -1, -1,\r\n 11, 1, 2, 11, 7, 1, 7, 5, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 1, 2, 7, 1, 7, 5, 7, 2, 11, -1, -1, -1, -1,\r\n 9, 7, 5, 9, 2, 7, 9, 0, 2, 2, 11, 7, -1, -1, -1, -1,\r\n 7, 5, 2, 7, 2, 11, 5, 9, 2, 3, 2, 8, 9, 8, 2, -1,\r\n 2, 5, 10, 2, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 2, 0, 8, 5, 2, 8, 7, 5, 10, 2, 5, -1, -1, -1, -1,\r\n 9, 0, 1, 5, 10, 3, 5, 3, 7, 3, 10, 2, -1, -1, -1, -1,\r\n 9, 8, 2, 9, 2, 1, 8, 7, 2, 10, 2, 5, 7, 5, 2, -1,\r\n 1, 3, 5, 3, 7, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 7, 0, 7, 1, 1, 7, 5, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 0, 3, 9, 3, 5, 5, 3, 7, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 8, 7, 5, 9, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 8, 4, 5, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 5, 0, 4, 5, 11, 0, 5, 10, 11, 11, 3, 0, -1, -1, -1, -1,\r\n 0, 1, 9, 8, 4, 10, 8, 10, 11, 10, 4, 5, -1, -1, -1, -1,\r\n 10, 11, 4, 10, 4, 5, 11, 3, 4, 9, 4, 1, 3, 1, 4, -1,\r\n 2, 5, 1, 2, 8, 5, 2, 11, 8, 4, 5, 8, -1, -1, -1, -1,\r\n 0, 4, 11, 0, 11, 3, 4, 5, 11, 2, 11, 1, 5, 1, 11, -1,\r\n 0, 2, 5, 0, 5, 9, 2, 11, 5, 4, 5, 8, 11, 8, 5, -1,\r\n 9, 4, 5, 2, 11, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 5, 10, 3, 5, 2, 3, 4, 5, 3, 8, 4, -1, -1, -1, -1,\r\n 5, 10, 2, 5, 2, 4, 4, 2, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 10, 2, 3, 5, 10, 3, 8, 5, 4, 5, 8, 0, 1, 9, -1,\r\n 5, 10, 2, 5, 2, 4, 1, 9, 2, 9, 4, 2, -1, -1, -1, -1,\r\n 8, 4, 5, 8, 5, 3, 3, 5, 1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 4, 5, 1, 0, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 8, 4, 5, 8, 5, 3, 9, 0, 5, 0, 3, 5, -1, -1, -1, -1,\r\n 9, 4, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 11, 7, 4, 9, 11, 9, 10, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 8, 3, 4, 9, 7, 9, 11, 7, 9, 10, 11, -1, -1, -1, -1,\r\n 1, 10, 11, 1, 11, 4, 1, 4, 0, 7, 4, 11, -1, -1, -1, -1,\r\n 3, 1, 4, 3, 4, 8, 1, 10, 4, 7, 4, 11, 10, 11, 4, -1,\r\n 4, 11, 7, 9, 11, 4, 9, 2, 11, 9, 1, 2, -1, -1, -1, -1,\r\n 9, 7, 4, 9, 11, 7, 9, 1, 11, 2, 11, 1, 0, 8, 3, -1,\r\n 11, 7, 4, 11, 4, 2, 2, 4, 0, -1, -1, -1, -1, -1, -1, -1,\r\n 11, 7, 4, 11, 4, 2, 8, 3, 4, 3, 2, 4, -1, -1, -1, -1,\r\n 2, 9, 10, 2, 7, 9, 2, 3, 7, 7, 4, 9, -1, -1, -1, -1,\r\n 9, 10, 7, 9, 7, 4, 10, 2, 7, 8, 7, 0, 2, 0, 7, -1,\r\n 3, 7, 10, 3, 10, 2, 7, 4, 10, 1, 10, 0, 4, 0, 10, -1,\r\n 1, 10, 2, 8, 7, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 1, 4, 1, 7, 7, 1, 3, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 9, 1, 4, 1, 7, 0, 8, 1, 8, 7, 1, -1, -1, -1, -1,\r\n 4, 0, 3, 7, 4, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 4, 8, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 10, 8, 10, 11, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 9, 3, 9, 11, 11, 9, 10, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 1, 10, 0, 10, 8, 8, 10, 11, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 1, 10, 11, 3, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 2, 11, 1, 11, 9, 9, 11, 8, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 0, 9, 3, 9, 11, 1, 2, 9, 2, 11, 9, -1, -1, -1, -1,\r\n 0, 2, 11, 8, 0, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 3, 2, 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 8, 2, 8, 10, 10, 8, 9, -1, -1, -1, -1, -1, -1, -1,\r\n 9, 10, 2, 0, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 2, 3, 8, 2, 8, 10, 0, 1, 8, 1, 10, 8, -1, -1, -1, -1,\r\n 1, 10, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 1, 3, 8, 9, 1, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 9, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n 0, 3, 8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\r\n];\r\n\r\nexport default IsoSurfaceMarchCube;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceMarchCube from './IsoSurfaceMarchCube';\r\nimport utils from '../../utils';\r\n\r\nconst edgeTable = [\r\n 0x0, 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c,\r\n 0x80c, 0x905, 0xa0f, 0xb06, 0xc0a, 0xd03, 0xe09, 0xf00,\r\n 0x190, 0x99, 0x393, 0x29a, 0x596, 0x49f, 0x795, 0x69c,\r\n 0x99c, 0x895, 0xb9f, 0xa96, 0xd9a, 0xc93, 0xf99, 0xe90,\r\n 0x230, 0x339, 0x33, 0x13a, 0x636, 0x73f, 0x435, 0x53c,\r\n 0xa3c, 0xb35, 0x83f, 0x936, 0xe3a, 0xf33, 0xc39, 0xd30,\r\n 0x3a0, 0x2a9, 0x1a3, 0xaa, 0x7a6, 0x6af, 0x5a5, 0x4ac,\r\n 0xbac, 0xaa5, 0x9af, 0x8a6, 0xfaa, 0xea3, 0xda9, 0xca0,\r\n 0x460, 0x569, 0x663, 0x76a, 0x66, 0x16f, 0x265, 0x36c,\r\n 0xc6c, 0xd65, 0xe6f, 0xf66, 0x86a, 0x963, 0xa69, 0xb60,\r\n 0x5f0, 0x4f9, 0x7f3, 0x6fa, 0x1f6, 0xff, 0x3f5, 0x2fc,\r\n 0xdfc, 0xcf5, 0xfff, 0xef6, 0x9fa, 0x8f3, 0xbf9, 0xaf0,\r\n 0x650, 0x759, 0x453, 0x55a, 0x256, 0x35f, 0x55, 0x15c,\r\n 0xe5c, 0xf55, 0xc5f, 0xd56, 0xa5a, 0xb53, 0x859, 0x950,\r\n 0x7c0, 0x6c9, 0x5c3, 0x4ca, 0x3c6, 0x2cf, 0x1c5, 0xcc,\r\n 0xfcc, 0xec5, 0xdcf, 0xcc6, 0xbca, 0xac3, 0x9c9, 0x8c0,\r\n 0x8c0, 0x9c9, 0xac3, 0xbca, 0xcc6, 0xdcf, 0xec5, 0xfcc,\r\n 0xcc, 0x1c5, 0x2cf, 0x3c6, 0x4ca, 0x5c3, 0x6c9, 0x7c0,\r\n 0x950, 0x859, 0xb53, 0xa5a, 0xd56, 0xc5f, 0xf55, 0xe5c,\r\n 0x15c, 0x55, 0x35f, 0x256, 0x55a, 0x453, 0x759, 0x650,\r\n 0xaf0, 0xbf9, 0x8f3, 0x9fa, 0xef6, 0xfff, 0xcf5, 0xdfc,\r\n 0x2fc, 0x3f5, 0xff, 0x1f6, 0x6fa, 0x7f3, 0x4f9, 0x5f0,\r\n 0xb60, 0xa69, 0x963, 0x86a, 0xf66, 0xe6f, 0xd65, 0xc6c,\r\n 0x36c, 0x265, 0x16f, 0x66, 0x76a, 0x663, 0x569, 0x460,\r\n 0xca0, 0xda9, 0xea3, 0xfaa, 0x8a6, 0x9af, 0xaa5, 0xbac,\r\n 0x4ac, 0x5a5, 0x6af, 0x7a6, 0xaa, 0x1a3, 0x2a9, 0x3a0,\r\n 0xd30, 0xc39, 0xf33, 0xe3a, 0x936, 0x83f, 0xb35, 0xa3c,\r\n 0x53c, 0x435, 0x73f, 0x636, 0x13a, 0x33, 0x339, 0x230,\r\n 0xe90, 0xf99, 0xc93, 0xd9a, 0xa96, 0xb9f, 0x895, 0x99c,\r\n 0x69c, 0x795, 0x49f, 0x596, 0x29a, 0x393, 0x99, 0x190,\r\n 0xf00, 0xe09, 0xd03, 0xc0a, 0xb06, 0xa0f, 0x905, 0x80c,\r\n 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0];\r\n\r\nfunction _voxelGradientFast(v, point, grad) {\r\n const g = v.getValue(point.x, point.y, point.z);\r\n grad.set(g[0], g[1], g[2]);\r\n}\r\n\r\n// Helper class GridCell\r\nclass GridCell {\r\n constructor() {\r\n this._arrSize = 8;\r\n this.p = new Array(this._arrSize);\r\n this.g = new Array(this._arrSize);\r\n this.val = new Array(this._arrSize);\r\n for (let i = 0; i < this._arrSize; ++i) {\r\n this.p[i] = new THREE.Vector3();\r\n this.g[i] = new THREE.Vector3();\r\n }\r\n this.cubeIndex = 0;\r\n }\r\n}\r\n\r\n// Helper class Triangle\r\nclass Triangle {\r\n constructor() {\r\n this.a = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n\r\n this.b = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n\r\n this.c = {\r\n p: new THREE.Vector3(),\r\n n: new THREE.Vector3(),\r\n };\r\n }\r\n}\r\n\r\nfunction createArray(arrSize) {\r\n const arr = new Array(arrSize);\r\n for (let i = 0; i < arrSize; ++i) {\r\n arr[i] = new THREE.Vector3();\r\n }\r\n\r\n return arr;\r\n}\r\n\r\nclass IsoSurface {\r\n constructor() {\r\n this._numTriangles = 0;\r\n this._numVertices = 0;\r\n this._position = [];\r\n this._normals = [];\r\n this._colors = null;\r\n this._indices = [];\r\n this._volumetricData = null;\r\n this._xAxis = new THREE.Vector3();\r\n this._yAxis = new THREE.Vector3();\r\n this._zAxis = new THREE.Vector3();\r\n this._xDir = new THREE.Vector3();\r\n this._yDir = new THREE.Vector3();\r\n this._zDir = new THREE.Vector3();\r\n }\r\n\r\n _prepareAxesAndDirs() {\r\n const volData = this._volumetricData;\r\n\r\n const cellSize = volData.getCellSize();\r\n\r\n // calculate cell axes\r\n const xAxis = this._xAxis;\r\n const yAxis = this._yAxis;\r\n const zAxis = this._zAxis;\r\n const xDir = this._xDir;\r\n const yDir = this._yDir;\r\n const zDir = this._zDir;\r\n\r\n xAxis.set(cellSize.x, 0, 0);\r\n yAxis.set(0, cellSize.y, 0);\r\n zAxis.set(0, 0, cellSize.z);\r\n\r\n xDir.set(1, 0, 0);\r\n yDir.set(0, 1, 0);\r\n zDir.set(0, 0, 1);\r\n\r\n // flip normals if coordinate system is in the wrong handedness\r\n const tmp = new THREE.Vector3();\r\n tmp.crossVectors(xDir, yDir);\r\n if (tmp.dot(zDir) < 0) {\r\n xDir.negate();\r\n yDir.negate();\r\n zDir.negate();\r\n }\r\n\r\n // check that the grid is in the all-positive octant of the coordinate system\r\n if (xDir.x < 0 || xDir.y < 0 || xDir.z < 0\r\n || yDir.x < 0 || yDir.y < 0 || yDir.z < 0\r\n || zDir.x < 0 || zDir.y < 0 || zDir.z < 0) {\r\n return false;\r\n }\r\n\r\n // check that the grid is axis-aligned\r\n const notZero = (axe) => Math.abs(axe) > Number.EPSILON;\r\n return !(notZero(xAxis.y) || notZero(xAxis.z)\r\n || notZero(yAxis.x) || notZero(yAxis.z)\r\n || notZero(zAxis.x) || notZero(zAxis.y));\r\n }\r\n\r\n _vertexInterp(isoLevel, grid, ind1, ind2, vertex, normal) {\r\n const p1 = grid.p[ind1];\r\n const p2 = grid.p[ind2];\r\n const n1 = grid.g[ind1];\r\n const n2 = grid.g[ind2];\r\n const valP1 = grid.val[ind1];\r\n const valP2 = grid.val[ind2];\r\n const isoDiffP1 = isoLevel - valP1;\r\n const diffValP2P1 = valP2 - valP1;\r\n\r\n let mu = 0.0;\r\n\r\n if (Math.abs(diffValP2P1) > 0.0) {\r\n mu = isoDiffP1 / diffValP2P1;\r\n }\r\n mu = mu > 1.0 ? 1.0 : mu;\r\n vertex.lerpVectors(p1, p2, mu);\r\n normal.lerpVectors(n1, n2, mu);\r\n }\r\n\r\n static _triTable = IsoSurfaceMarchCube.prototype.striIndicesMarchCube;\r\n\r\n static _arrSize = 12;\r\n\r\n static _firstIndices = [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3];\r\n\r\n static _secondIndices = [1, 2, 3, 0, 5, 6, 7, 4, 4, 5, 6, 7];\r\n\r\n static _vertexList = createArray(IsoSurface._arrSize);\r\n\r\n static _normalList = createArray(IsoSurface._arrSize);\r\n\r\n _polygonize(grid, isoLevel, triangles) {\r\n const { cubeIndex } = grid;\r\n let i = 0;\r\n const arrSize = IsoSurface._arrSize;\r\n const firstIndices = IsoSurface._firstIndices;\r\n const secondIndices = IsoSurface._secondIndices;\r\n const vertexList = IsoSurface._vertexList;\r\n const normalList = IsoSurface._normalList;\r\n\r\n for (; i < arrSize; ++i) {\r\n if (edgeTable[cubeIndex] & (1 << i)) {\r\n this._vertexInterp(\r\n isoLevel,\r\n grid,\r\n firstIndices[i],\r\n secondIndices[i],\r\n vertexList[i],\r\n normalList[i],\r\n );\r\n }\r\n }\r\n\r\n let triCount = 0;\r\n const triTblIdx = cubeIndex * 16;\r\n const triTable = IsoSurface._triTable;\r\n\r\n for (i = 0; triTable[triTblIdx + i] !== -1; i += 3) {\r\n triangles[triCount].a.p.copy(vertexList[triTable[triTblIdx + i]]);\r\n triangles[triCount].a.n.copy(normalList[triTable[triTblIdx + i]]);\r\n\r\n triangles[triCount].b.p.copy(vertexList[triTable[triTblIdx + i + 1]]);\r\n triangles[triCount].b.n.copy(normalList[triTable[triTblIdx + i + 1]]);\r\n\r\n triangles[triCount].c.p.copy(vertexList[triTable[triTblIdx + i + 2]]);\r\n triangles[triCount].c.n.copy(normalList[triTable[triTblIdx + i + 2]]);\r\n ++triCount;\r\n }\r\n\r\n return triCount;\r\n }\r\n\r\n _doGridPosNorms(isoValue, step, appendSimple) {\r\n const vol = this._volumetricData;\r\n const volData = this._volumetricData.getData();\r\n const dim = vol.getDimensions();\r\n const xSize = dim[0];\r\n const ySize = dim[1];\r\n const zSize = dim[2];\r\n const stepX = step * vol.getStrideX();\r\n const stepY = step * vol.getStrideY();\r\n const stepZ = step * vol.getStrideZ();\r\n\r\n const gc = new GridCell();\r\n const gcVal = gc.val;\r\n const gcValSize = gc.val.length;\r\n const additions = [\r\n new THREE.Vector3(0, 0, 0), // 0\r\n new THREE.Vector3(step, 0, 0), // 1\r\n new THREE.Vector3(step, step, 0), // 2\r\n new THREE.Vector3(0, step, 0), // 3\r\n new THREE.Vector3(0, 0, step), // 4\r\n new THREE.Vector3(step, 0, step), // 5\r\n new THREE.Vector3(step, step, step), // 6\r\n new THREE.Vector3(0, step, step), // 7\r\n ];\r\n\r\n const tmpTriCount = 5;\r\n const triangles = new Array(tmpTriCount);\r\n for (let j = 0; j < tmpTriCount; ++j) {\r\n triangles[j] = new Triangle();\r\n }\r\n\r\n let appendVertex;\r\n const self = this;\r\n const positions = this._position;\r\n const normals = this._normals;\r\n if (appendSimple) {\r\n // Special case for axis-aligned grid with positive unit vector normals\r\n appendVertex = (function () {\r\n const axis = new THREE.Vector3(self._xAxis.x, self._yAxis.y, self._zAxis.z);\r\n return function (triVertex) {\r\n const vertex = triVertex.p.clone();\r\n vertex.multiply(axis);\r\n positions.push(vertex.add(self._origin));\r\n normals.push(triVertex.n.clone());\r\n };\r\n }());\r\n } else {\r\n appendVertex = (function () {\r\n const posMtx = new THREE.Matrix3();\r\n posMtx.set(\r\n self._xAxis.x,\r\n self._yAxis.x,\r\n self._zAxis.x,\r\n self._xAxis.y,\r\n self._yAxis.y,\r\n self._zAxis.y,\r\n self._xAxis.z,\r\n self._yAxis.z,\r\n self._zAxis.z,\r\n );\r\n const normMtx = new THREE.Matrix3();\r\n normMtx.set(\r\n self._xDir.x,\r\n self._yDir.x,\r\n self._zDir.x,\r\n self._xDir.y,\r\n self._yDir.y,\r\n self._zDir.y,\r\n self._xDir.z,\r\n self._yDir.z,\r\n self._zDir.z,\r\n );\r\n\r\n return function (triVertex) {\r\n positions.push(triVertex.p.clone().applyMatrix3(posMtx).add(self._origin));\r\n normals.push(triVertex.n.clone().applyMatrix3(normMtx));\r\n };\r\n }());\r\n }\r\n const indices = this._indices;\r\n\r\n let globTriCount = 0;\r\n\r\n for (let z = 0; z < (zSize - step); z += step) {\r\n for (let y = 0; y < (ySize - step); y += step) {\r\n let idx = vol.getDirectIdx(0, y, z);\r\n for (let x = 0; x < (xSize - step); x += step, idx += stepX) {\r\n gcVal[0] = volData[idx];\r\n gcVal[1] = volData[idx + stepX];\r\n gcVal[3] = volData[idx + stepY];\r\n gcVal[2] = volData[idx + stepX + stepY];\r\n gcVal[4] = volData[idx + stepZ];\r\n gcVal[5] = volData[idx + stepX + stepZ];\r\n gcVal[7] = volData[idx + stepY + stepZ];\r\n gcVal[6] = volData[idx + stepX + stepY + stepZ];\r\n\r\n // Determine the index into the edge table which\r\n // tells us which vertices are inside of the surface\r\n let cubeIndex = 0;\r\n let i = 0;\r\n for (; i < gcValSize; ++i) {\r\n if (gcVal[i] < isoValue) {\r\n cubeIndex |= (1 << i);\r\n }\r\n }\r\n\r\n if (edgeTable[cubeIndex] === 0) {\r\n continue;\r\n }\r\n\r\n gc.cubeIndex = cubeIndex;\r\n for (i = 0; i < gcValSize; ++i) {\r\n gc.p[i].set(x + additions[i].x, y + additions[i].y, z + additions[i].z);\r\n _voxelGradientFast(this._gradient, gc.p[i], gc.g[i]);\r\n }\r\n\r\n // calculate vertices and facets for this cube,\r\n // calculate normals by interpolating between the negated\r\n // normalized volume gradients for the 8 reference voxels\r\n const triCount = this._polygonize(gc, isoValue, triangles);\r\n globTriCount += triCount;\r\n\r\n // append triangles using different techniques\r\n for (i = 0; i < triCount; ++i) {\r\n indices.push(this._numTriangles * 3);\r\n indices.push(this._numTriangles * 3 + 1);\r\n indices.push(this._numTriangles * 3 + 2);\r\n ++this._numTriangles;\r\n\r\n appendVertex(triangles[i].a);\r\n appendVertex(triangles[i].b);\r\n appendVertex(triangles[i].c);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return globTriCount;\r\n }\r\n\r\n compute(volData, origin, isoValue, step) {\r\n this._volumetricData = volData;\r\n this._origin = origin;\r\n\r\n this._gradient = volData.computeGradient();\r\n\r\n this._doGridPosNorms(isoValue, step, this._prepareAxesAndDirs());\r\n }\r\n\r\n _remapIndices(vertexMap, idcCount) {\r\n const indices = this._indices;\r\n const newIndices = utils.allocateTyped(Uint32Array, idcCount);\r\n for (let i = 0; i < idcCount; ++i) {\r\n indices[i] = vertexMap[indices[i]];\r\n newIndices[i] = indices[i];\r\n }\r\n this._indices = newIndices;\r\n }\r\n\r\n _remapVertices(vertices, normals, count) {\r\n const newPositions = utils.allocateTyped(Float32Array, count * 3);\r\n const newNormals = utils.allocateTyped(Float32Array, count * 3);\r\n for (let i = 0; i < count; ++i) {\r\n const pos = vertices[i];\r\n newPositions[i * 3] = pos.x;\r\n newPositions[i * 3 + 1] = pos.y;\r\n newPositions[i * 3 + 2] = pos.z;\r\n const norm = normals[i].normalize();\r\n newNormals[i * 3] = norm.x;\r\n newNormals[i * 3 + 1] = norm.y;\r\n newNormals[i * 3 + 2] = norm.z;\r\n }\r\n this._position = newPositions;\r\n this._normals = newNormals;\r\n }\r\n\r\n vertexFusion(offset, len) {\r\n const faceVer = this._indices.length;\r\n const vertices = this._position;\r\n const normals = this._normals;\r\n const oldVerCount = vertices.length | 0;\r\n if (faceVer === 0 || oldVerCount === 0) {\r\n return;\r\n }\r\n const vMap = utils.allocateTyped(Uint32Array, oldVerCount);\r\n vMap[0] = 0;\r\n let newVer = 1;\r\n\r\n let i = 1;\r\n for (; i < oldVerCount; ++i) {\r\n const start = newVer - offset < 0 ? 0 : newVer - offset;\r\n const end = start + len > newVer ? newVer : start + len;\r\n let matchedIndex = -1;\r\n\r\n for (let j = start; j < end; ++j) {\r\n if (Math.abs(vertices[i] - vertices[j]) < Number.EPSILON) {\r\n matchedIndex = j;\r\n break;\r\n }\r\n }\r\n\r\n if (matchedIndex !== -1) {\r\n vMap[i] = matchedIndex;\r\n } else {\r\n vertices[newVer].copy(vertices[i]);\r\n normals[newVer].copy(normals[i]);\r\n vMap[i] = newVer;\r\n ++newVer;\r\n }\r\n }\r\n\r\n this._remapIndices(vMap, faceVer);\r\n this._remapVertices(vertices, normals, newVer);\r\n }\r\n\r\n // Assign per-vertex colors from a volumetric texture map (same dimensions as the original volumetric data).\r\n // Along with color dominating atom is determined for each vertex\r\n // and vertices with atom out of \"visible\" subset get filtered out.\r\n // XXX only handles orthogonal volumes currently\r\n setColorVolTex(colorMap, atomMap, atomWeightMap, visibilitySelector) {\r\n let i;\r\n let idx;\r\n const numVerts = this._position.length / 3;\r\n const vertices = this._position;\r\n const origin = this._origin;\r\n const dim = this._volumetricData.getDimensions();\r\n const xs = dim[0] - 1;\r\n const ys = dim[1] - 1;\r\n const zs = dim[2] - 1;\r\n\r\n const colorData = colorMap.getData();\r\n const strideX = colorMap.getStrideX();\r\n const strideY = colorMap.getStrideY();\r\n const strideZ = colorMap.getStrideZ();\r\n\r\n let atomWeightData;\r\n let atomStrideX;\r\n let atomStrideY;\r\n let atomStrideZ;\r\n\r\n if (visibilitySelector !== null) {\r\n atomWeightData = atomWeightMap.getData();\r\n atomStrideX = atomWeightMap.getStrideX();\r\n atomStrideY = atomWeightMap.getStrideY();\r\n atomStrideZ = atomWeightMap.getStrideZ();\r\n }\r\n\r\n const xInv = 1.0 / this._xAxis.x;\r\n const yInv = 1.0 / this._yAxis.y;\r\n const zInv = 1.0 / this._zAxis.z;\r\n\r\n let atomLookup = [];\r\n let atomWeights = [];\r\n const colors = utils.allocateTyped(Float32Array, numVerts * 3);\r\n\r\n function interp(mu, idx1, idx2, c) {\r\n c[0] = (1 - mu) * colorData[idx1] + mu * colorData[idx2];\r\n c[1] = (1 - mu) * colorData[idx1 + 1] + mu * colorData[idx2 + 1];\r\n c[2] = (1 - mu) * colorData[idx1 + 2] + mu * colorData[idx2 + 2];\r\n }\r\n\r\n function collectWeight(ai, coefX, coefY, coefZ) {\r\n const a = atomMap[ai]; // atomWeightMap is a scalar field, so index into atom map should be the same\r\n if (a != null) {\r\n atomLookup[a.index] = a;\r\n const w = coefX * coefY * coefZ * atomWeightData[ai];\r\n if (typeof atomWeights[a.index] === 'undefined') {\r\n atomWeights[a.index] = w;\r\n } else {\r\n atomWeights[a.index] += w;\r\n }\r\n }\r\n }\r\n\r\n const vMap = utils.allocateTyped(Int32Array, numVerts);\r\n let newVerCount = 0;\r\n\r\n for (i = 0; i < numVerts; i++) {\r\n const ind = i * 3;\r\n const vx = (vertices[ind] - origin.x) * xInv;\r\n const vy = (vertices[ind + 1] - origin.y) * yInv;\r\n const vz = (vertices[ind + 2] - origin.z) * zInv;\r\n const x = Math.min(Math.max(vx, 0), xs) | 0;\r\n const y = Math.min(Math.max(vy, 0), ys) | 0;\r\n const z = Math.min(Math.max(vz, 0), zs) | 0;\r\n\r\n const mux = (vx - x);\r\n const muy = (vy - y);\r\n const muz = (vz - z);\r\n\r\n if (visibilitySelector != null) {\r\n // collect atom weights\r\n atomLookup = [];\r\n atomWeights = [];\r\n idx = atomWeightMap.getDirectIdx(x, y, z);\r\n collectWeight(idx, 1 - mux, 1 - muy, 1 - muz);\r\n collectWeight(idx + atomStrideX, mux, 1 - muy, 1 - muz);\r\n collectWeight(idx + atomStrideY, 1 - mux, muy, 1 - muz);\r\n collectWeight(idx + atomStrideX + atomStrideY, mux, muy, 1 - muz);\r\n collectWeight(idx + atomStrideZ, 1 - mux, 1 - muy, muz);\r\n collectWeight(idx + atomStrideX + atomStrideZ, mux, 1 - muy, muz);\r\n collectWeight(idx + atomStrideY + atomStrideZ, 1 - mux, muy, muz);\r\n collectWeight(idx + atomStrideX + atomStrideY + atomStrideZ, mux, muy, muz);\r\n\r\n // find dominant atom\r\n let maxWeight = 0.0;\r\n let dominantIdx = -1;\r\n for (const atomIdx in atomWeights) {\r\n if (atomWeights[atomIdx] > maxWeight) {\r\n dominantIdx = atomIdx;\r\n maxWeight = atomWeights[atomIdx];\r\n }\r\n }\r\n\r\n if (dominantIdx < 0 || !visibilitySelector.includesAtom(atomLookup[dominantIdx])) {\r\n // this vertex doesn't belong to visible subset and will be skipped\r\n vMap[i] = -1;\r\n continue;\r\n }\r\n }\r\n\r\n vMap[i] = newVerCount++;\r\n\r\n // color tri-linear interpolation\r\n const dx = (x < xs) ? strideX : 0;\r\n const dy = (y < ys) ? strideY : 0;\r\n const dz = (z < zs) ? strideZ : 0;\r\n\r\n const c0 = [0, 0, 0];\r\n const c1 = [0, 0, 0];\r\n const c2 = [0, 0, 0];\r\n const c3 = [0, 0, 0];\r\n\r\n idx = colorMap.getDirectIdx(x, y, z);\r\n interp(mux, idx, idx + dx, c0);\r\n interp(mux, idx + dy, idx + dx + dy, c1);\r\n interp(mux, idx + dz, idx + dx + dz, c2);\r\n interp(mux, idx + dy + dz, idx + dx + dy + dz, c3);\r\n\r\n const cz0 = [0, 0, 0];\r\n cz0[0] = (1 - muy) * c0[0] + muy * c1[0];\r\n cz0[1] = (1 - muy) * c0[1] + muy * c1[1];\r\n cz0[2] = (1 - muy) * c0[2] + muy * c1[2];\r\n\r\n const cz1 = [0, 0, 0];\r\n cz1[0] = (1 - muy) * c2[0] + muy * c3[0];\r\n cz1[1] = (1 - muy) * c2[1] + muy * c3[1];\r\n cz1[2] = (1 - muy) * c2[2] + muy * c3[2];\r\n\r\n colors[ind] = (1 - muz) * cz0[0] + muz * cz1[0];\r\n colors[ind + 1] = (1 - muz) * cz0[1] + muz * cz1[1];\r\n colors[ind + 2] = (1 - muz) * cz0[2] + muz * cz1[2];\r\n }\r\n this._colors = colors;\r\n\r\n if (visibilitySelector != null) {\r\n // shift visible vertices towards beginning of array\r\n for (i = 0; i < numVerts; ++i) {\r\n const j = vMap[i];\r\n if (j < 0) {\r\n continue;\r\n }\r\n\r\n // assert: j <= i\r\n this._position[j * 3] = this._position[i * 3];\r\n this._position[j * 3 + 1] = this._position[i * 3 + 1];\r\n this._position[j * 3 + 2] = this._position[i * 3 + 2];\r\n this._normals[j * 3] = this._normals[i * 3];\r\n this._normals[j * 3 + 1] = this._normals[i * 3 + 1];\r\n this._normals[j * 3 + 2] = this._normals[i * 3 + 2];\r\n this._colors[j * 3] = this._colors[i * 3];\r\n this._colors[j * 3 + 1] = this._colors[i * 3 + 1];\r\n this._colors[j * 3 + 2] = this._colors[i * 3 + 2];\r\n }\r\n\r\n // rebuild index list\r\n const numTriangles = this._indices.length / 3;\r\n let newTriCount = 0;\r\n for (i = 0; i < numTriangles; ++i) {\r\n const i0 = vMap[this._indices[3 * i]];\r\n const i1 = vMap[this._indices[3 * i + 1]];\r\n const i2 = vMap[this._indices[3 * i + 2]];\r\n if (i0 >= 0 && i1 >= 0 && i2 >= 0) {\r\n this._indices[3 * newTriCount] = i0;\r\n this._indices[3 * newTriCount + 1] = i1;\r\n this._indices[3 * newTriCount + 2] = i2;\r\n ++newTriCount;\r\n }\r\n }\r\n\r\n // shrink arrays to data size\r\n this._position = new Float32Array(this._position.buffer.slice(0, newVerCount * 3 * 4));\r\n this._normals = new Float32Array(this._normals.buffer.slice(0, newVerCount * 3 * 4));\r\n this._colors = new Float32Array(this._colors.buffer.slice(0, newVerCount * 3 * 4));\r\n this._indices = new Uint32Array(this._indices.buffer.slice(0, newTriCount * 3 * 4));\r\n }\r\n }\r\n\r\n toMesh() {\r\n const geo = new THREE.BufferGeometry();\r\n geo.setIndex(new THREE.BufferAttribute(this._indices, 1));\r\n geo.setAttribute('position', new THREE.BufferAttribute(this._position, 3));\r\n geo.setAttribute('normal', new THREE.BufferAttribute(this._normals, 3));\r\n geo.setAttribute('color', new THREE.BufferAttribute(this._colors, 3));\r\n geo.computeBoundingSphere();\r\n return geo;\r\n }\r\n}\r\nexport default IsoSurface;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceGeometry from './IsoSurfaceGeometry';\r\nimport IsoSurface from './IsoSurface';\r\nimport utils from '../../utils';\r\n\r\n/**\r\n * This is a base class for volumetric maps based isosurface algorithms.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass VolumeSurfaceGeometry extends IsoSurfaceGeometry {\r\n _build() {\r\n const params = this._opts;\r\n this.numVoxels = [128, 128, 128];\r\n this.xAxis = new THREE.Vector3(1.0, 0.0, 0.0);\r\n this.yAxis = new THREE.Vector3(0.0, 1.0, 0.0);\r\n this.zAxis = new THREE.Vector3(0.0, 0.0, 1.0);\r\n\r\n this.origin = new THREE.Vector3(0.0, 0.0, 0.0);\r\n this._visibilitySelector = params.visibilitySelector;\r\n\r\n this._calcSurface(params);\r\n }\r\n\r\n _findMinMax(posRadArray) {\r\n const itemSize = 4;\r\n const itemsCount = posRadArray.length / itemSize;\r\n const maxPosRad = [posRadArray[0], posRadArray[1], posRadArray[2], posRadArray[3]];\r\n const minPosRad = [posRadArray[0], posRadArray[1], posRadArray[2], posRadArray[3]];\r\n for (let i = 1; i < itemsCount; ++i) {\r\n const ind = i * itemSize;\r\n\r\n for (let itemIdx = 0; itemIdx < itemSize; ++itemIdx) {\r\n const tmpVal = posRadArray[ind + itemIdx];\r\n maxPosRad[itemIdx] = Math.max(tmpVal, maxPosRad[itemIdx]);\r\n minPosRad[itemIdx] = Math.min(tmpVal, minPosRad[itemIdx]);\r\n }\r\n }\r\n return { maxPosRad, minPosRad };\r\n }\r\n\r\n _findNumVoxels(posRadArray, params) {\r\n const { numVoxels } = this;\r\n const minMaxValues = this._findMinMax(posRadArray);\r\n const minCoordRad = minMaxValues.minPosRad;\r\n const maxCoordRad = minMaxValues.maxPosRad;\r\n\r\n // minrad\r\n if (minCoordRad[3] > 4.0) {\r\n params.gridSpacing *= minCoordRad[3];\r\n }\r\n\r\n let gridPadding = params.radScale * maxCoordRad[3] * 1.7;\r\n let padRad = gridPadding;\r\n padRad = 0.65 * Math.sqrt(4.0 / 3.0 * Math.PI * padRad * padRad * padRad);\r\n gridPadding = Math.max(gridPadding, padRad);\r\n\r\n let i = 0;\r\n for (; i < 3; ++i) {\r\n minCoordRad[i] -= gridPadding;\r\n maxCoordRad[i] += gridPadding;\r\n }\r\n\r\n for (i = 0; i < 3; ++i) {\r\n numVoxels[i] = Math.ceil((maxCoordRad[i] - minCoordRad[i]) / params.gridSpacing);\r\n }\r\n this.xAxis.x = (numVoxels[0] - 1) * params.gridSpacing;\r\n this.yAxis.y = (numVoxels[1] - 1) * params.gridSpacing;\r\n this.zAxis.z = (numVoxels[2] - 1) * params.gridSpacing;\r\n\r\n [this.origin.x, this.origin.y, this.origin.z] = minCoordRad;\r\n\r\n return { bbox: minMaxValues, dim: numVoxels };\r\n }\r\n\r\n _makeSurface(surface, params) {\r\n const isoSurf = new IsoSurface();\r\n isoSurf.compute(surface.volMap, this.origin, params.isoValue, 1);\r\n isoSurf.vertexFusion(9, 9);// normalization is included\r\n\r\n if (isoSurf._numTriangles > 0) {\r\n isoSurf.setColorVolTex(surface.volTexMap, surface.atomMap, surface.atomWeightMap, this._visibilitySelector);\r\n this.setIndex(new THREE.BufferAttribute(isoSurf._indices, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(isoSurf._position, 3));\r\n this.setAttribute('normal', new THREE.BufferAttribute(isoSurf._normals, 3));\r\n this.setAttribute('color', new THREE.BufferAttribute(isoSurf._colors, 3));\r\n } else { // geometry should have at least empty position attributes to be processed in wireframe mode by three.js\r\n this.setAttribute('position', new THREE.BufferAttribute(utils.allocateTyped(Float32Array, 0), 3));\r\n }\r\n }\r\n\r\n _calcSurface(params) {\r\n const packedArrays = {\r\n posRad: this._posRad,\r\n colors: this._colors,\r\n atoms: this._opts.atoms,\r\n };\r\n\r\n if (packedArrays.posRad.length === 0) {\r\n return;\r\n }\r\n const boundaries = this._findNumVoxels(packedArrays.posRad, params);\r\n\r\n const box = new THREE.Box3(\r\n this.origin,\r\n new THREE.Vector3(this.xAxis.x, this.yAxis.y, this.zAxis.z).add(this.origin),\r\n );\r\n const surface = this._computeSurface(packedArrays, box, boundaries, params);\r\n\r\n this._makeSurface(surface, params);\r\n }\r\n}\r\n\r\nexport default VolumeSurfaceGeometry;\r\n","import VolumeSurfaceGeometry from './VolumeSurfaceGeometry';\r\nimport chem from '../../chem';\r\n\r\nconst { Volume } = chem;\r\n\r\n/**\r\n * This class implements 'quick' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass QuickSurfGeometry extends VolumeSurfaceGeometry {\r\n _computeSurface(packedArrays, box, boundaries, params) {\r\n // beware of shifting this multiple times!\r\n this._shiftByOrigin(packedArrays.posRad);\r\n\r\n const surface = {\r\n volMap: new Volume(Float32Array, this.numVoxels, box),\r\n volTexMap: new Volume(Float32Array, this.numVoxels, box, 3),\r\n };\r\n\r\n if (this._visibilitySelector != null) {\r\n surface.atomMap = [];\r\n surface.atomWeightMap = new Volume(Float32Array, this.numVoxels, box);\r\n }\r\n\r\n this.gaussdensity(surface, packedArrays, null, params);\r\n return surface;\r\n }\r\n\r\n gaussdensity(surface, packedArrays, atomicNum, params) {\r\n const numAtoms = packedArrays.posRad.length / 4;\r\n const { posRad, colors } = packedArrays;\r\n const { numVoxels } = this;\r\n const { radScale, gaussLim, gridSpacing } = params;\r\n const invIsoValue = 1.0 / params.isoValue;\r\n const invGridSpacing = 1.0 / gridSpacing;\r\n const maxVoxelX = numVoxels[0] - 1;\r\n const maxVoxelY = numVoxels[1] - 1;\r\n const maxVoxelZ = numVoxels[2] - 1;\r\n // TODO is densityMap and volTexMap initialized?\r\n\r\n const { volMap, volTexMap } = surface;\r\n const volData = volMap.getData();\r\n const strideX = volMap.getStrideX();\r\n\r\n const volTexData = volTexMap.getData();\r\n const texStrideX = volTexMap.getStrideX();\r\n\r\n let atomWeightData;\r\n if (this._visibilitySelector != null) {\r\n atomWeightData = surface.atomWeightMap.getData();\r\n }\r\n\r\n const { atomMap } = surface;\r\n\r\n for (let i = 0; i < numAtoms; ++i) {\r\n const ind = i * 4;\r\n const scaledRad = posRad[ind + 3] * radScale;\r\n const atomicNumFactor = atomicNum === null ? 1.0 : atomicNum[i];\r\n const radInv = 1 / (2 * scaledRad * scaledRad);\r\n let radLim = gaussLim * scaledRad;\r\n const radLim2 = radLim * radLim;\r\n radLim *= invGridSpacing;\r\n\r\n let tmp = posRad[ind] * invGridSpacing;\r\n const xMin = Math.max((tmp - radLim) | 0, 0);\r\n const xMax = Math.min((tmp + radLim) | 0, maxVoxelX);\r\n tmp = posRad[ind + 1] * invGridSpacing;\r\n const yMin = Math.max((tmp - radLim) | 0, 0);\r\n const yMax = Math.min((tmp + radLim) | 0, maxVoxelY);\r\n tmp = posRad[ind + 2] * invGridSpacing;\r\n const zMin = Math.max((tmp - radLim) | 0, 0);\r\n const zMax = Math.min((tmp + radLim) | 0, maxVoxelZ);\r\n\r\n let dz = zMin * gridSpacing - posRad[ind + 2];\r\n for (let z = zMin; z <= zMax; ++z, dz += gridSpacing) {\r\n let dy = yMin * gridSpacing - posRad[ind + 1];\r\n for (let y = yMin; y <= yMax; ++y, dy += gridSpacing) {\r\n const dy2dz2 = dy * dy + dz * dz;\r\n\r\n if (dy2dz2 >= radLim2) {\r\n continue;\r\n }\r\n\r\n let addr = volMap.getDirectIdx(xMin, y, z);\r\n let texAddr = volTexMap.getDirectIdx(xMin, y, z);\r\n let dx = xMin * gridSpacing - posRad[ind];\r\n for (let x = xMin; x <= xMax; ++x, dx += gridSpacing, addr += strideX, texAddr += texStrideX) {\r\n const r2 = dx * dx + dy2dz2;\r\n const expVal = -r2 * radInv;\r\n\r\n let density = Math.exp(expVal) * atomicNumFactor;\r\n\r\n // store most relevant atom (with highest density)\r\n if (this._visibilitySelector != null\r\n && density > atomWeightData[addr]) { // NOSONAR\r\n atomWeightData[addr] = density;\r\n // we use same index into atom map and atomWeightMap\r\n atomMap[addr] = packedArrays.atoms[i];\r\n }\r\n\r\n volData[addr] += density;\r\n\r\n // TODO check for volTexMap routine?\r\n density *= invIsoValue;\r\n const colInd = i * 3;\r\n volTexData[texAddr] += density * colors[colInd];\r\n volTexData[texAddr + 1] += density * colors[colInd + 1];\r\n volTexData[texAddr + 2] += density * colors[colInd + 2];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n _shiftByOrigin(posRadArray) {\r\n const originX = this.origin.x;\r\n const originY = this.origin.y;\r\n const originZ = this.origin.z;\r\n\r\n const itemSize = 4;\r\n const itemsCount = posRadArray.length / itemSize;\r\n for (let i = 0; i < itemsCount; ++i) {\r\n const ind = i * itemSize;\r\n\r\n posRadArray[ind] -= originX;\r\n posRadArray[ind + 1] -= originY;\r\n posRadArray[ind + 2] -= originZ;\r\n }\r\n }\r\n}\r\n\r\nexport default QuickSurfGeometry;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\n/**\r\n * Modifed from SpatialHash\r\n *\r\n * Main differences are:\r\n * - Optimized grid size to ensure we only ever need to look +/-1 cell\r\n * - Aware of atomic radii and will only output atoms within rAtom + rExtra\r\n * (see withinRadii method)\r\n *\r\n * (Uses rounding rather than bitshifting as consequence of arbitrary grid size)\r\n * @class\r\n * @param {Float32Array} posRad - x, y, z coordinates and radiuses\r\n * @param {Float32Array} min - xyz min coordinates\r\n * @param {Float32Array} max - xyz max coordinates\r\n * @param {number} maxDistance - max distance\r\n */\r\nfunction AVHash(posRad, min, max, maxDistance) {\r\n const itemSize = 4;\r\n const nAtoms = posRad.length / itemSize;\r\n\r\n const minX = min[0];\r\n const minY = min[1];\r\n const minZ = min[2];\r\n\r\n const maxX = max[0];\r\n const maxY = max[1];\r\n const maxZ = max[2];\r\n\r\n function hashFunc(w, minW) {\r\n return Math.floor((w - minW) / maxDistance);\r\n }\r\n\r\n const iDim = hashFunc(maxX, minX) + 1;\r\n const jDim = hashFunc(maxY, minY) + 1;\r\n const kDim = hashFunc(maxZ, minZ) + 1;\r\n\r\n const nCells = iDim * jDim * kDim;\r\n\r\n const jkDim = jDim * kDim;\r\n\r\n /* Get cellID for cartesian x,y,z */\r\n const cellID = function (x, y, z) {\r\n return (((hashFunc(x, minX) * jDim) + hashFunc(y, minY)) * kDim) + hashFunc(z, minZ);\r\n };\r\n\r\n /* Initial building, could probably be optimized further */\r\n const preHash = [];\r\n let i;\r\n let cid;\r\n for (i = 0; i < nAtoms; i++) {\r\n const iIdx = itemSize * i;\r\n cid = cellID(posRad[iIdx], posRad[iIdx + 1], posRad[iIdx + 2]);\r\n\r\n if (preHash[cid] === undefined) {\r\n preHash[cid] = [i];\r\n } else {\r\n preHash[cid].push(i);\r\n }\r\n }\r\n\r\n const cellOffsets = utils.allocateTyped(Uint32Array, nCells);\r\n const cellLengths = utils.allocateTyped(Uint16Array, nCells);\r\n const data = utils.allocateTyped(Uint32Array, nAtoms);\r\n\r\n let offset = 0;\r\n let maxCellLength = 0;\r\n let j;\r\n for (i = 0; i < nCells; i++) {\r\n const start = cellOffsets[i] = offset;\r\n\r\n const subArray = preHash[i];\r\n\r\n if (subArray !== undefined) {\r\n for (j = 0; j < subArray.length; j++) {\r\n data[offset] = subArray[j];\r\n offset++;\r\n }\r\n }\r\n\r\n const cellLength = offset - start;\r\n cellLengths[i] = cellLength;\r\n\r\n if (cellLength > maxCellLength) {\r\n maxCellLength = cellLength;\r\n }\r\n }\r\n\r\n // Maximum number of neighbours we could ever produce (27 adjacent cells of equal population)\r\n this.neighbourListLength = (27 * maxCellLength) + 1;\r\n\r\n /**\r\n * Populate the supplied out array with atom indices that are within rAtom + rExtra\r\n * of x,y,z\r\n *\r\n * -1 in out array indicates the end of the list\r\n *\r\n * @param {number} x - x coordinate\r\n * @param {number} y - y coordinate\r\n * @param {number} z - z coordinate\r\n * @param {number} rExtra - additional radius\r\n * @param {Float32Array} out - pre-allocated output array\r\n * @return {undefined}\r\n */\r\n this.withinRadii = function (x, y, z, rExtra, out) {\r\n let outIdx = 0;\r\n\r\n const nearI = hashFunc(x, minX);\r\n const nearJ = hashFunc(y, minY);\r\n const nearK = hashFunc(z, minZ);\r\n\r\n const loI = Math.max(0, nearI - 1);\r\n const loJ = Math.max(0, nearJ - 1);\r\n const loK = Math.max(0, nearK - 1);\r\n\r\n const hiI = Math.min(iDim - 1, nearI + 1);\r\n const hiJ = Math.min(jDim - 1, nearJ + 1);\r\n const hiK = Math.min(kDim - 1, nearK + 1);\r\n\r\n for (i = loI; i <= hiI; ++i) {\r\n const iOffset = i * jkDim;\r\n\r\n for (j = loJ; j <= hiJ; ++j) {\r\n const jOffset = j * kDim;\r\n\r\n for (let k = loK; k <= hiK; ++k) {\r\n cid = iOffset + jOffset + k;\r\n\r\n const cellStart = cellOffsets[cid];\r\n const cellEnd = cellStart + cellLengths[cid];\r\n\r\n for (let dataIndex = cellStart; dataIndex < cellEnd; dataIndex++) {\r\n const atomIndex = data[dataIndex];\r\n const baseIndex = itemSize * atomIndex;\r\n const dx = posRad[baseIndex] - x;\r\n const dy = posRad[baseIndex + 1] - y;\r\n const dz = posRad[baseIndex + 2] - z;\r\n const rSum = posRad[baseIndex + 3] + rExtra;\r\n\r\n if ((dx * dx + dy * dy + dz * dz) <= (rSum * rSum)) {\r\n out[outIdx++] = data[dataIndex];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n // Add terminator\r\n out[outIdx] = -1;\r\n };\r\n}\r\nfunction ContactSurface(packedArrays, boundaries, params, _indexList) {\r\n // Field generation method adapted from AstexViewer (Mike Hartshorn)\r\n // by Fred Ludlow.\r\n // Other parts based heavily on NGL (Alexander Rose) EDT Surface class\r\n //\r\n // Should work as a drop-in alternative to EDTSurface (though some of\r\n // the EDT paramters are not relevant in this method).\r\n\r\n const itemSize = 4;\r\n const { posRad, colors, atoms } = packedArrays;\r\n const nAtoms = posRad.length / itemSize;\r\n\r\n const { bbox } = boundaries;\r\n\r\n const min = bbox.minPosRad;\r\n const max = bbox.maxPosRad;\r\n\r\n let r2; // Atom positions, expanded radii (squared)\r\n let maxRadius;\r\n\r\n // Parameters\r\n let probeRadius;\r\n let scaleFactor;\r\n let probePositions;\r\n\r\n // Cache last value for obscured test\r\n let lastClip = -1;\r\n\r\n // Grid params\r\n let dim;\r\n let grid;\r\n let volTex;\r\n let weights;\r\n let weightsMap = null;\r\n let atomMap = null;\r\n let visibilitySelector = null;\r\n\r\n // grid indices -> xyz coords\r\n let gridx;\r\n let gridy;\r\n let gridz;\r\n\r\n // Lookup tables:\r\n let sinTable;\r\n let cosTable;\r\n\r\n // Spatial Hash\r\n let hash;\r\n\r\n // Neighbour array to be filled by hash\r\n let neighbours;\r\n\r\n // Vectors for Torus Projection\r\n const mid = new THREE.Vector3(0.0, 0.0, 0.0);\r\n const n1 = new THREE.Vector3(0.0, 0.0, 0.0);\r\n const n2 = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n let ngTorus;\r\n\r\n function uniformArray(TypeName, n, a) {\r\n const array = utils.allocateTyped(TypeName, n);\r\n for (let innI = 0; innI < n; ++innI) {\r\n array[innI] = a;\r\n }\r\n\r\n return array;\r\n }\r\n\r\n function fillGridDim(a, start, step) {\r\n for (let innI = 0; innI < a.length; innI++) {\r\n a[innI] = start + (step * innI);\r\n }\r\n }\r\n\r\n function initializeGrid() {\r\n ({ scaleFactor } = params);\r\n ({ dim } = boundaries);\r\n\r\n ngTorus = Math.min(5, 2 + Math.floor(probeRadius * scaleFactor));\r\n\r\n const gridSize = dim[0] * dim[1] * dim[2];\r\n grid = uniformArray(Float32Array, gridSize, -1001.0);\r\n volTex = utils.allocateTyped(Float32Array, gridSize * 3);\r\n weights = utils.allocateTyped(Float32Array, gridSize);\r\n if (visibilitySelector) {\r\n weightsMap = utils.allocateTyped(Float32Array, gridSize);\r\n atomMap = [];\r\n }\r\n\r\n gridx = utils.allocateTyped(Float32Array, dim[0]);\r\n gridy = utils.allocateTyped(Float32Array, dim[1]);\r\n gridz = utils.allocateTyped(Float32Array, dim[2]);\r\n\r\n fillGridDim(gridx, min[0], 1 / scaleFactor);\r\n fillGridDim(gridy, min[1], 1 / scaleFactor);\r\n fillGridDim(gridz, min[2], 1 / scaleFactor);\r\n }\r\n\r\n function initializeAngleTables() {\r\n let theta = 0.0;\r\n const step = 2 * Math.PI / probePositions;\r\n\r\n cosTable = utils.allocateTyped(Float32Array, probePositions);\r\n sinTable = utils.allocateTyped(Float32Array, probePositions);\r\n for (let innI = 0; innI < probePositions; innI++) {\r\n cosTable[innI] = Math.cos(theta);\r\n sinTable[innI] = Math.sin(theta);\r\n theta += step;\r\n }\r\n }\r\n\r\n function initializeHash() {\r\n hash = new AVHash(posRad, min, max, 2.01 * maxRadius);\r\n neighbours = new Int32Array(hash.neighbourListLength);\r\n }\r\n\r\n function init() {\r\n ({\r\n probeRadius,\r\n scaleFactor,\r\n probePositions,\r\n visibilitySelector,\r\n } = params);\r\n r2 = utils.allocateTyped(Float32Array, nAtoms);\r\n maxRadius = 0;\r\n for (let innI = 0; innI < nAtoms; ++innI) {\r\n const rExt = posRad[innI * itemSize + 3] += probeRadius;\r\n if (rExt > maxRadius) {\r\n maxRadius = rExt;\r\n }\r\n r2[innI] = rExt * rExt;\r\n }\r\n\r\n initializeGrid();\r\n initializeAngleTables();\r\n initializeHash();\r\n\r\n lastClip = -1;\r\n }\r\n\r\n function singleAtomObscures(ai, innX, innY, innZ) {\r\n const innCI = itemSize * ai;\r\n const ra2 = r2[ai];\r\n const dx = posRad[innCI] - innX;\r\n const dy = posRad[innCI + 1] - innY;\r\n const dz = posRad[innCI + 2] - innZ;\r\n const d2 = dx * dx + dy * dy + dz * dz;\r\n\r\n return d2 < ra2;\r\n }\r\n\r\n function obscured(innX, innY, innZ, a, b) {\r\n // Is the point at x,y,z obscured by any of the atoms\r\n // specifeid by indices in neighbours. Ignore indices\r\n // a and b (these are the relevant atoms in projectPoints/Torii)\r\n\r\n // Cache the last clipped atom (as very often the same one in\r\n // subsequent calls)\r\n let ai;\r\n\r\n if (lastClip !== -1) {\r\n ai = lastClip;\r\n if (ai !== a && ai !== b && singleAtomObscures(ai, innX, innY, innZ)) {\r\n return ai;\r\n }\r\n lastClip = -1;\r\n }\r\n\r\n let ni = 0;\r\n ai = neighbours[ni];\r\n while (ai >= 0) {\r\n if (ai !== a && ai !== b && singleAtomObscures(ai, innX, innY, innZ)) {\r\n lastClip = ai;\r\n return ai;\r\n }\r\n ai = neighbours[++ni];\r\n }\r\n\r\n lastClip = -1;\r\n\r\n return -1;\r\n }\r\n\r\n function projectPoints() {\r\n // For each atom:\r\n // Iterate over a subsection of the grid, for each point:\r\n // If current value < 0.0, unvisited, set positive\r\n //\r\n // In any case: Project this point onto surface of the atomic sphere\r\n // If this projected point is not obscured by any other atom\r\n // Calcualte delta distance and set grid value to minimum of\r\n // itself and delta\r\n\r\n // Should we alias frequently accessed closure constiables??\r\n // Assume JS engine capable of optimizing this\r\n // anyway...\r\n const maxRad = 4.0;\r\n const sigma = (maxRad) / 3;\r\n const sigma2Inv = 1 / (2 * sigma * sigma);\r\n\r\n for (let innI = 0; innI < nAtoms; innI++) {\r\n const innCI = itemSize * innI;\r\n const ax = posRad[innCI];\r\n const ay = posRad[innCI + 1];\r\n const az = posRad[innCI + 2];\r\n const ar = posRad[innCI + 3];\r\n const ar2 = r2[innI];\r\n\r\n hash.withinRadii(ax, ay, az, ar, neighbours);\r\n\r\n // Number of grid points, round this up...\r\n const ng = Math.ceil(ar * scaleFactor);\r\n\r\n // Center of the atom, mapped to grid points (take floor)\r\n const iax = Math.floor(scaleFactor * (ax - min[0]));\r\n const iay = Math.floor(scaleFactor * (ay - min[1]));\r\n const iaz = Math.floor(scaleFactor * (az - min[2]));\r\n\r\n // Extents of grid to consider for this atom\r\n const minx = Math.max(0, iax - ng);\r\n const miny = Math.max(0, iay - ng);\r\n const minz = Math.max(0, iaz - ng);\r\n\r\n // Add two to these points:\r\n // - iax are floor'd values so this ensures coverage\r\n // - these are loop limits (exclusive)\r\n const maxx = Math.min(dim[0], iax + ng + 2);\r\n const maxy = Math.min(dim[1], iay + ng + 2);\r\n const maxz = Math.min(dim[2], iaz + ng + 2);\r\n\r\n const colIdx = innI * 3;\r\n const cr = colors[colIdx];\r\n const cg = colors[colIdx + 1];\r\n const cb = colors[colIdx + 2];\r\n\r\n for (let iz = minz; iz < maxz; iz++) {\r\n const dz = gridz[iz] - az;\r\n const zOffset = dim[1] * dim[0] * iz;\r\n\r\n for (let iy = miny; iy < maxy; iy++) {\r\n const dy = gridy[iy] - ay;\r\n const dzy2 = dz * dz + dy * dy;\r\n const zyOffset = zOffset + dim[0] * iy;\r\n\r\n for (let ix = minx; ix < maxx; ix++) {\r\n const idx = ix + zyOffset;\r\n const dx = gridx[ix] - ax;\r\n const d2 = dzy2 + dx * dx;\r\n\r\n if (d2 < ar2) {\r\n const w = Math.exp(-d2 * sigma2Inv);\r\n const cIdx = idx * 3;\r\n volTex[cIdx] += cr * w;\r\n volTex[cIdx + 1] += cg * w;\r\n volTex[cIdx + 2] += cb * w;\r\n weights[idx] += w;\r\n if (visibilitySelector !== null && w > weightsMap[idx]) {\r\n weightsMap[idx] = w;\r\n atomMap[idx] = atoms[innI];\r\n }\r\n\r\n if (grid[idx] < 0.0) {\r\n // Unvisited, make positive\r\n grid[idx] = -grid[idx];\r\n }\r\n // Project on to the surface of the sphere\r\n // sp is the projected point ( dx, dy, dz ) * ( ra / d )\r\n const d = Math.sqrt(d2);\r\n const ap = ar / d;\r\n let spx = dx * ap;\r\n let spy = dy * ap;\r\n let spz = dz * ap;\r\n\r\n spx += ax;\r\n spy += ay;\r\n spz += az;\r\n\r\n if (obscured(spx, spy, spz, innI, -1) === -1) {\r\n const dd = ar - d;\r\n if (dd < grid[idx]) {\r\n grid[idx] = dd;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function normalToLine(out, p) {\r\n out.x = out.y = out.z = 1.0;\r\n if (p.x !== 0) {\r\n out.x = (p.y + p.z) / -p.x;\r\n } else if (p.y !== 0) {\r\n out.y = (p.x + p.z) / -p.y;\r\n } else if (p.z !== 0) {\r\n out.z = (p.x + p.y) / -p.z;\r\n }\r\n return out;\r\n }\r\n\r\n function projectTorus(a, b) {\r\n const aIdx = itemSize * a;\r\n const bIdx = itemSize * b;\r\n const xa = posRad[aIdx];\r\n const ya = posRad[aIdx + 1];\r\n const za = posRad[aIdx + 2];\r\n const r1 = posRad[aIdx + 3];\r\n let dx = mid.x = posRad[bIdx] - xa;\r\n let dy = mid.y = posRad[bIdx + 1] - ya;\r\n let dz = mid.z = posRad[bIdx + 2] - za;\r\n const innR2 = posRad[bIdx + 3];\r\n let d2 = dx * dx + dy * dy + dz * dz;\r\n\r\n // This check now redundant as already done in AVHash.withinRadii\r\n // if( d2 > (( r1 + r2 ) * ( r1 + r2 )) ){ return; }\r\n\r\n const d = Math.sqrt(d2);\r\n\r\n // Find angle between a->b vector and the circle\r\n // of their intersection by cosine rule\r\n const cosA = (r1 * r1 + d * d - innR2 * innR2) / (2.0 * r1 * d);\r\n\r\n // distance along a->b at intersection\r\n const dmp = r1 * cosA;\r\n\r\n mid.normalize();\r\n\r\n // Create normal to line\r\n normalToLine(n1, mid);\r\n n1.normalize();\r\n\r\n // Cross together for second normal vector\r\n n2.crossVectors(mid, n1);\r\n n2.normalize();\r\n\r\n // r is radius of circle of intersection\r\n const rInt = Math.sqrt(r1 * r1 - dmp * dmp);\r\n\r\n n1.multiplyScalar(rInt);\r\n n2.multiplyScalar(rInt);\r\n mid.multiplyScalar(dmp);\r\n\r\n mid.x += xa;\r\n mid.y += ya;\r\n mid.z += za;\r\n\r\n lastClip = -1;\r\n\r\n const ng = ngTorus;\r\n\r\n for (let innI = 0; innI < probePositions; innI++) {\r\n const cost = cosTable[innI];\r\n const sint = sinTable[innI];\r\n\r\n const px = mid.x + cost * n1.x + sint * n2.x;\r\n const py = mid.y + cost * n1.y + sint * n2.y;\r\n const pz = mid.z + cost * n1.z + sint * n2.z;\r\n\r\n if (obscured(px, py, pz, a, b) === -1) {\r\n // As above, iterate over our grid...\r\n // px, py, pz in grid coords\r\n const iax = Math.floor(scaleFactor * (px - min[0]));\r\n const iay = Math.floor(scaleFactor * (py - min[1]));\r\n const iaz = Math.floor(scaleFactor * (pz - min[2]));\r\n\r\n const minx = Math.max(0, iax - ng);\r\n const miny = Math.max(0, iay - ng);\r\n const minz = Math.max(0, iaz - ng);\r\n\r\n const maxx = Math.min(dim[0], iax + ng + 2);\r\n const maxy = Math.min(dim[1], iay + ng + 2);\r\n const maxz = Math.min(dim[2], iaz + ng + 2);\r\n\r\n for (let iz = minz; iz < maxz; iz++) {\r\n dz = pz - gridz[iz];\r\n const zOffset = dim[1] * dim[0] * iz;\r\n for (let iy = miny; iy < maxy; iy++) {\r\n dy = py - gridy[iy];\r\n const dzy2 = dz * dz + dy * dy;\r\n const zyOffset = zOffset + dim[0] * iy;\r\n for (let ix = minx; ix < maxx; ix++) {\r\n dx = px - gridx[ix];\r\n d2 = dzy2 + dx * dx;\r\n const idx = ix + zyOffset;\r\n const current = grid[idx];\r\n\r\n if (current > 0.0 && d2 < (current * current)) {\r\n grid[idx] = Math.sqrt(d2);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function projectTorii() {\r\n for (let innI = 0; innI < nAtoms; innI++) {\r\n const innIdx = itemSize * innI;\r\n hash.withinRadii(\r\n posRad[innIdx],\r\n posRad[innIdx + 1],\r\n posRad[innIdx + 2],\r\n posRad[innIdx + 3],\r\n neighbours,\r\n );\r\n let ia = 0;\r\n let ni = neighbours[ia];\r\n while (ni >= 0) {\r\n if (innI < ni) {\r\n projectTorus(innI, ni);\r\n }\r\n ni = neighbours[++ia];\r\n }\r\n }\r\n }\r\n\r\n function fixNegatives() {\r\n for (let innI = 0, n = grid.length; innI < n; innI++) {\r\n if (grid[innI] < 0) grid[innI] = 0;\r\n let w = weights[innI];\r\n if (w > 0) {\r\n w = 1 / w;\r\n const innInnI = innI * 3;\r\n volTex[innInnI] *= w;\r\n volTex[innInnI + 1] *= w;\r\n volTex[innInnI + 2] *= w;\r\n }\r\n }\r\n }\r\n\r\n function getVolume() {\r\n // Basic steps are:\r\n // 1) Initialize\r\n // 2) Project points\r\n // 3) Project torii\r\n console.time('ContactSurface.getVolume');\r\n\r\n console.time('ContactSurface.init');\r\n init();\r\n console.timeEnd('ContactSurface.init');\r\n\r\n console.time('ContactSurface.projectPoints');\r\n projectPoints();\r\n console.timeEnd('ContactSurface.projectPoints');\r\n\r\n console.time('ContactSurface.projectTorii');\r\n projectTorii();\r\n console.timeEnd('ContactSurface.projectTorii');\r\n fixNegatives();\r\n console.timeEnd('ContactSurface.getVolume');\r\n }\r\n\r\n this.build = function () {\r\n // type and cutoff left in for compatibility with EDTSurface.getSurface\r\n // function signature\r\n getVolume();\r\n this.volTexMap = volTex;\r\n this.weightsMap = weightsMap;\r\n this.atomMap = atomMap;\r\n this.volMap = grid;\r\n };\r\n}\r\nexport default ContactSurface;\r\n","import VolumeSurfaceGeometry from './VolumeSurfaceGeometry';\r\nimport ContactSurface from './ContactSurface';\r\nimport chem from '../../chem';\r\n\r\nconst { Volume } = chem;\r\n\r\n/**\r\n * This class implements 'contact' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass ContactSurfaceGeometry extends VolumeSurfaceGeometry {\r\n _computeSurface(packedArrays, box, boundaries, params) {\r\n const contactSurface = new ContactSurface(packedArrays, boundaries, params);\r\n contactSurface.build();\r\n\r\n const surface = {\r\n volMap: new Volume(Float32Array, this.numVoxels, box, 1, contactSurface.volMap),\r\n volTexMap: new Volume(Float32Array, this.numVoxels, box, 3, contactSurface.volTexMap),\r\n atomMap: contactSurface.atomMap,\r\n atomWeightMap: new Volume(Float32Array, this.numVoxels, box, 1, contactSurface.weightsMap),\r\n };\r\n return surface;\r\n }\r\n}\r\n\r\nexport default ContactSurfaceGeometry;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Class for colored atom. Need for atom structure clusterization\r\n *\r\n * @param {Vector3} vCenter Center of atom\r\n * @param {number} radiusAt Radius of atom\r\n */\r\nclass IsoSurfaceAtomColored {\r\n constructor(vCenter, radiusAt) {\r\n this.coord = new THREE.Vector3();\r\n this.coord.copy(vCenter);\r\n this.radius = radiusAt;\r\n this.colorX = 0.99999;\r\n this.colorY = 0.0;\r\n this.colorZ = 0.0;\r\n this.atomType = 0;\r\n this.srcAtom = null;\r\n }\r\n}\r\nexport default IsoSurfaceAtomColored;\r\n","import * as THREE from 'three';\r\nimport utils from '../../utils';\r\n\r\n// suppress some JSHint warnings\r\n/* jshint bitwise: false */\r\n\r\n/**\r\n * Build normals for isosurface, using atoms information\r\n *\r\n * @param {number} numAtoms - Number of atoms in molecule\r\n * @param {Element} atoms - Array of atoms\r\n * @param {Vector3} vBoxMin - Bounding box min\r\n * @param {Vector3} vBoxMax - Bounding box max\r\n * @param {number} probeRadius - Normals for output\r\n *\r\n */\r\nclass IsosurfaceBuildNormals {\r\n constructor(numAtoms, atoms, vBoxMin, vBoxMax, probeRadius) {\r\n this._numAtoms = numAtoms;\r\n this._atoms = atoms;\r\n this._vBoxMin = new THREE.Vector3();\r\n this._vBoxMax = new THREE.Vector3();\r\n this._vBoxMin.copy(vBoxMin);\r\n this._vBoxMax.copy(vBoxMax);\r\n this._probeRadius = probeRadius;\r\n\r\n this._atomsList = null;\r\n this._voxelList = null;\r\n }\r\n\r\n createVoxels() {\r\n let numAtomsRefs;\r\n let rad;\r\n const ATOM_VOXEL_REF_SCALE = 4.5;\r\n\r\n const numAtoms = this._numAtoms | 0;\r\n const atoms = this._atoms;\r\n const dx = this._vBoxMax.x - this._vBoxMin.x;\r\n const dy = this._vBoxMax.y - this._vBoxMin.y;\r\n const dz = this._vBoxMax.z - this._vBoxMin.z;\r\n let w = (dx < dy) ? dx : dy;\r\n w = (dz < w) ? dz : w;\r\n let maxRad = 0.0;\r\n let aveRad = 0.0;\r\n\r\n let i;\r\n for (i = 0; i < numAtoms; i++) {\r\n rad = (atoms[i].radius + this._probeRadius) * 2.0;\r\n maxRad = (rad > maxRad) ? rad : maxRad;\r\n aveRad += rad;\r\n }\r\n let numCells = Math.floor(w / maxRad);\r\n if (numCells < 2) {\r\n numCells = 2;\r\n }\r\n aveRad /= numAtoms;\r\n\r\n this._numCells = numCells;\r\n this._aveRad = aveRad;\r\n this._maxRad = maxRad;\r\n\r\n const side = numCells;\r\n const side2 = numCells * numCells;\r\n const side3 = numCells * numCells * numCells;\r\n\r\n const xScale = this._xScale = 1.0 / (this._vBoxMax.x - this._vBoxMin.x);\r\n const yScale = this._yScale = 1.0 / (this._vBoxMax.y - this._vBoxMin.y);\r\n const zScale = this._zScale = 1.0 / (this._vBoxMax.z - this._vBoxMin.z);\r\n\r\n // estimate number of individual atom refs in each voxel list\r\n let maxAtomsRefs = 0;\r\n\r\n const xNumVoxMult = xScale * numCells;\r\n const yNumVoxMult = yScale * numCells;\r\n const zNumVoxMult = zScale * numCells;\r\n\r\n for (i = 0; i < numAtoms; i++) {\r\n const radAffect = (atoms[i].radius + this._probeRadius) * ATOM_VOXEL_REF_SCALE;\r\n const diaAffect = radAffect * 2.0;\r\n let numVoxX = Math.floor(xNumVoxMult * diaAffect + 0.8);\r\n let numVoxY = Math.floor(yNumVoxMult * diaAffect + 0.8);\r\n let numVoxZ = Math.floor(zNumVoxMult * diaAffect + 0.8);\r\n // avoid case numVox? == 0\r\n // also use loop i <=\r\n numVoxX++;\r\n numVoxY++;\r\n numVoxZ++;\r\n maxAtomsRefs += numVoxX * numVoxY * numVoxZ;\r\n } // for (i)\r\n // maxAtomsRefs = numAtoms * MAX_ATOMS_IN_SINGLE_VOXEL;\r\n\r\n this._voxelList = utils.allocateTyped(Int32Array, side3);\r\n const atomsList = [];\r\n atomsList.length = maxAtomsRefs;\r\n if ((this._voxelList === null) || (atomsList === null)) {\r\n return 0 - 1;\r\n }\r\n // init voxel list\r\n for (i = 0; i < side3; i++) {\r\n this._voxelList[i] = -1;\r\n }\r\n numAtomsRefs = 0;\r\n\r\n // create voxel lists\r\n for (i = 0; i < numAtoms; i++) {\r\n // use multiplier 4 to locate this atom in different voxels\r\n rad = (atoms[i].radius + this._probeRadius) * ATOM_VOXEL_REF_SCALE;\r\n let xIndMin = Math.floor((atoms[i].coord.x - this._vBoxMin.x - rad) * numCells * xScale);\r\n let yIndMin = Math.floor((atoms[i].coord.y - this._vBoxMin.y - rad) * numCells * yScale);\r\n let zIndMin = Math.floor((atoms[i].coord.z - this._vBoxMin.z - rad) * numCells * zScale);\r\n let xIndMax = Math.floor((atoms[i].coord.x - this._vBoxMin.x + rad) * numCells * xScale);\r\n let yIndMax = Math.floor((atoms[i].coord.y - this._vBoxMin.y + rad) * numCells * yScale);\r\n let zIndMax = Math.floor((atoms[i].coord.z - this._vBoxMin.z + rad) * numCells * zScale);\r\n\r\n xIndMin = (xIndMin >= 0) ? xIndMin : 0;\r\n yIndMin = (yIndMin >= 0) ? yIndMin : 0;\r\n zIndMin = (zIndMin >= 0) ? zIndMin : 0;\r\n\r\n xIndMax = (xIndMax < numCells) ? xIndMax : (numCells - 1);\r\n yIndMax = (yIndMax < numCells) ? yIndMax : (numCells - 1);\r\n zIndMax = (zIndMax < numCells) ? zIndMax : (numCells - 1);\r\n\r\n for (let z = zIndMin; z <= zIndMax; z++) {\r\n for (let y = yIndMin; y <= yIndMax; y++) {\r\n for (let x = xIndMin; x <= xIndMax; x++) {\r\n // add atom with index \"i\" to this voxel list\r\n const indVoxel = x + y * side + z * side2;\r\n // assert indVoxel >= 0\r\n // assert indVoxel < side3\r\n\r\n // add first\r\n if (this._voxelList[indVoxel] < 0) {\r\n atomsList[numAtomsRefs * 2 + 0] = i;\r\n atomsList[numAtomsRefs * 2 + 1] = 0 - 1;\r\n this._voxelList[indVoxel] = numAtomsRefs;\r\n numAtomsRefs++;\r\n // assert numAtomsRefs < maxAtomsRefs - 1\r\n continue;\r\n }\r\n // insert into head of list\r\n const indexNext = this._voxelList[indVoxel];\r\n this._voxelList[indVoxel] = numAtomsRefs;\r\n atomsList[numAtomsRefs * 2 + 0] = i;\r\n atomsList[numAtomsRefs * 2 + 1] = indexNext;\r\n numAtomsRefs++;\r\n } // for (x)\r\n } // for (y)\r\n } // for (z)\r\n } // for (i)\r\n\r\n // convert Array to Int32Array\r\n this._atomsList = Int32Array.from(atomsList);\r\n\r\n return 0;\r\n }\r\n\r\n destroyVoxels() {\r\n this._atomsList = null;\r\n this._voxelList = null;\r\n\r\n this._atoms = null;\r\n this._vertices = null;\r\n this._vBoxMin = null;\r\n this._vBoxMax = null;\r\n }\r\n\r\n /**\r\n * Enumerate all atoms affecting specified point\r\n *\r\n * @param {Vector3} point - point in 3D\r\n * @param {func(atom)} process - function to call for each atom\r\n */\r\n forEachRelatedAtom(point, process) {\r\n // find corresponding voxel\r\n const xInd = Math.floor((point.x - this._vBoxMin.x) * this._numCells * this._xScale);\r\n const yInd = Math.floor((point.y - this._vBoxMin.y) * this._numCells * this._yScale);\r\n const zInd = Math.floor((point.z - this._vBoxMin.z) * this._numCells * this._zScale);\r\n const indVoxel = xInd + yInd * this._numCells + zInd * this._numCells * this._numCells;\r\n\r\n // run through atoms affecting this voxel\r\n const atoms = this._atoms;\r\n for (let ref = this._voxelList[indVoxel]; ref >= 0; ref = this._atomsList[ref * 2 + 1]) {\r\n const indexAtom = this._atomsList[ref * 2];\r\n process(atoms[indexAtom]);\r\n }\r\n }\r\n\r\n /**\r\n * Get atom closest to specified point\r\n *\r\n * @param {Vector3} point - point in 3D\r\n *\r\n * @returns {IsoSurfaceAtomColored} atom, or null if not found\r\n */\r\n getClosestAtom(point) {\r\n let closest = null;\r\n let minDist2 = Number.MAX_VALUE;\r\n\r\n this.forEachRelatedAtom(point, (atom) => {\r\n const dist2 = point.distanceToSquared(atom.coord);\r\n if (dist2 < minDist2) {\r\n minDist2 = dist2;\r\n closest = atom;\r\n }\r\n });\r\n\r\n return closest;\r\n }\r\n\r\n /**\r\n * Build normals for isosurface, using atoms information\r\n *\r\n * @param {number} numVertices - Number of vertices in final geometry (to render)\r\n * @param {Vector3} vertices - Geometry vertices (3d coordinates array)\r\n * @param {Vector3} normals - Normals for output\r\n *\r\n * @returns {number} 0, if success\r\n */\r\n buildNormals(numVertices, vertices, normals) {\r\n const self = this;\r\n let numCloseAtoms = 0;\r\n let vx = 0;\r\n let vy = 0;\r\n let vz = 0;\r\n let dist2;\r\n let vNormalX = 0;\r\n let vNormalY = 0;\r\n let vNormalZ = 0;\r\n let koef = 0;\r\n let w = 0;\r\n const r25 = 2.5;\r\n const r01 = 0.1;\r\n\r\n const maxRadAffect = this._aveRad * r25;\r\n const maxRadAffect2 = maxRadAffect * maxRadAffect;\r\n const expScale = -this._aveRad * r01;\r\n\r\n // some stats\r\n // numSlowAtoms = 0;\r\n\r\n const gatherNormals = function (atom) {\r\n const dx = vx - atom.coord.x;\r\n const dy = vy - atom.coord.y;\r\n const dz = vz - atom.coord.z;\r\n dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 > maxRadAffect2) {\r\n return;\r\n }\r\n\r\n // get weight for gaussian smoothing\r\n const rad = atom.radius + self._probeRadius;\r\n koef = dist2 - (rad * rad);\r\n if (koef < 0.0) {\r\n koef = -koef;\r\n }\r\n w = Math.exp(expScale * koef);\r\n\r\n vNormalX += dx * w;\r\n vNormalY += dy * w;\r\n vNormalZ += dz * w;\r\n numCloseAtoms++;\r\n };\r\n\r\n let maxClosedAtoms = 0;\r\n // process all vertices, one by one\r\n for (let i = 0; i < numVertices; i++) {\r\n vx = vertices[i].x;\r\n vy = vertices[i].y;\r\n vz = vertices[i].z;\r\n\r\n numCloseAtoms = 0;\r\n vNormalX = vNormalY = vNormalZ = 0.0;\r\n\r\n this.forEachRelatedAtom(vertices[i], gatherNormals);\r\n\r\n maxClosedAtoms = (numCloseAtoms > maxClosedAtoms) ? numCloseAtoms : maxClosedAtoms;\r\n\r\n // normalize vNormal\r\n dist2 = vNormalX * vNormalX + vNormalY * vNormalY + vNormalZ * vNormalZ;\r\n if (numCloseAtoms > 0) {\r\n koef = 1.0 / Math.sqrt(dist2);\r\n vNormalX *= koef;\r\n vNormalY *= koef;\r\n vNormalZ *= koef;\r\n }\r\n normals[i].x = vNormalX;\r\n normals[i].y = vNormalY;\r\n normals[i].z = vNormalZ;\r\n } // for (i) all vertices\r\n\r\n return 0;\r\n }\r\n\r\n /**\r\n * Build vertex colors for isosurface, using atoms information\r\n *\r\n * @param {number} numVertices - Number of vertices in final geometry (to render)\r\n * @param {Vector3} vertices - Geometry vertices (3d coordinates array)\r\n * @param {Vector3} colors - Colors for output\r\n * @param {number} radiusColorSmoothness - Radius of smoothness sphere\r\n *\r\n * @returns {number} 0, if success\r\n */\r\n buildColors(numVertices, vertices, colors, radiusColorSmoothness) {\r\n const self = this;\r\n let vx = 0.0;\r\n let vy = 0.0;\r\n let vz = 0.0;\r\n let koef = 0.0;\r\n let w = 0.0;\r\n const KOEF_ADD = 0.8;\r\n\r\n const maxRadAffect = radiusColorSmoothness;\r\n const maxRadAffect2 = maxRadAffect * maxRadAffect;\r\n\r\n let colorsClose = [];\r\n let weights = [];\r\n let weightsSum = 0;\r\n\r\n const gatherColors = function (atom) {\r\n const dx = vx - atom.coord.x;\r\n const dy = vy - atom.coord.y;\r\n const dz = vz - atom.coord.z;\r\n const dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 > maxRadAffect2) {\r\n return;\r\n }\r\n\r\n // get weight for gaussian smoothing\r\n const rad = atom.radius + self._probeRadius;\r\n koef = dist2 - (rad * rad);\r\n if (koef < 0.0) {\r\n koef = -koef;\r\n }\r\n w = 1.0 / (KOEF_ADD + koef);\r\n\r\n colorsClose.push([atom.colorX, atom.colorY, atom.colorZ]);\r\n weights.push(w); // save weights for use\r\n weightsSum += w; // calc sum of weights fo further normalization\r\n };\r\n\r\n // process all vertices, one by one\r\n for (let i = 0; i < numVertices; i++) {\r\n vx = vertices[i].x;\r\n vy = vertices[i].y;\r\n vz = vertices[i].z;\r\n\r\n colorsClose = [];\r\n weights = [];\r\n weightsSum = 0;\r\n\r\n this.forEachRelatedAtom(vertices[i], gatherColors);\r\n\r\n // normalized weighted sum of colors\r\n for (let j = 0; j < colorsClose.length; ++j) {\r\n const weightNormalized = weights[j] / weightsSum;\r\n colors[i].x += colorsClose[j][0] * weightNormalized;\r\n colors[i].y += colorsClose[j][1] * weightNormalized;\r\n colors[i].z += colorsClose[j][2] * weightNormalized;\r\n }\r\n } // for (i) all vertices\r\n return 0;\r\n }\r\n}\r\nexport default IsosurfaceBuildNormals;\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Class for geometry (triangle mesh) representation\r\n *\r\n *\r\n * @param {number} maxNumVertices Maximum possible number of vertices in mesh\r\n * @param {number} maxNumTriangles Maximum possible number of triangles in mesh\r\n * @param {boolean} needVertexColors Obvious\r\n */\r\nclass IsoSurfaceGeo {\r\n constructor(maxNumVertices, maxNumTriangles, needVertexColors) {\r\n this._maxNumVertices = maxNumVertices;\r\n this._maxNumTriangles = maxNumTriangles;\r\n this._vertices = new Array(maxNumVertices);\r\n this._normals = new Array(maxNumVertices);\r\n this._colors = null;\r\n if (needVertexColors) {\r\n this._colors = new Array(maxNumVertices);\r\n }\r\n this._indices = new Array(maxNumTriangles * (1 + 2));\r\n this._numVertices = 0;\r\n this._numTriangles = 0;\r\n\r\n let i;\r\n for (i = 0; i < maxNumVertices; i++) {\r\n this._vertices[i] = new THREE.Vector3();\r\n this._normals[i] = new THREE.Vector3();\r\n }\r\n for (i = 0; i < maxNumTriangles * (1 + 2); i++) {\r\n this._indices[i] = -1;\r\n }\r\n if (needVertexColors) {\r\n for (i = 0; i < maxNumVertices; i++) {\r\n this._colors[i] = new THREE.Vector3();\r\n }\r\n }\r\n }\r\n\r\n destroy() {\r\n this._vertices = null;\r\n this._normals = null;\r\n this._indices = null;\r\n }\r\n}\r\nexport default IsoSurfaceGeo;\r\n","import * as THREE from 'three';\r\nimport IsoSurfaceGeometry from './IsoSurfaceGeometry';\r\nimport IsoSurfaceAtomColored from './IsoSurfaceAtomColored';\r\nimport IsosurfaceBuildNormals from './IsosurfaceBuildNormals';\r\nimport IsoSurfaceMarchCube from './IsoSurfaceMarchCube';\r\nimport IsoSurfaceGeo from './IsoSurfaceGeo';\r\nimport chem from '../../chem';\r\nimport utils from '../../utils';\r\n\r\nconst COLOR_SIZE = 3;\r\nconst HASH_SIZE = 32768;\r\nconst { Element } = chem;\r\n\r\n/**\r\n * This class implements 'quick' isosurface geometry generation algorithm.\r\n * @param spheresCount - number of atoms/spheres\r\n * @param opts - geometry specific options\r\n * @constructor\r\n */\r\n\r\nclass SSIsosurfaceGeometry extends IsoSurfaceGeometry {\r\n _build() {\r\n // convert geoOut into arrays of positions, indices, normals\r\n this._innerBuild();\r\n const geoOut = this.getGeo();\r\n this.destroy();\r\n this._fromGeo(geoOut);\r\n }\r\n\r\n _fromGeo(geoOut) {\r\n let colors = null;\r\n const positions = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n const normals = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n if (geoOut._colors !== null) {\r\n colors = utils.allocateTyped(Float32Array, (1 + 2) * geoOut._numVertices);\r\n }\r\n const indices = utils.allocateTyped(Uint32Array, (1 + 2) * geoOut._numTriangles);\r\n\r\n for (let i = 0, j = 0; i < geoOut._numVertices; i++) {\r\n positions[j + 0] = (geoOut._vertices[i].x);\r\n positions[j + 1] = (geoOut._vertices[i].y);\r\n positions[j + 2] = (geoOut._vertices[i].z);\r\n normals[j + 0] = geoOut._normals[i].x;\r\n normals[j + 1] = geoOut._normals[i].y;\r\n normals[j + 2] = geoOut._normals[i].z;\r\n j += 3;\r\n }\r\n if (colors !== null) {\r\n for (let i = 0, j = 0; i < geoOut._numVertices; i++, j += 3) {\r\n colors[j + 0] = geoOut._colors[i].x;\r\n colors[j + 1] = geoOut._colors[i].y;\r\n colors[j + 2] = geoOut._colors[i].z;\r\n }\r\n }\r\n\r\n const numTri3 = geoOut._numTriangles * (1 + 2);\r\n for (let i = 0; i < numTri3; i++) {\r\n indices[i] = geoOut._indices[i];\r\n }\r\n\r\n this.setIndex(new THREE.BufferAttribute(indices, 1));\r\n this.setAttribute('position', new THREE.BufferAttribute(positions, 3));\r\n this.setAttribute('normal', new THREE.BufferAttribute(normals, 3));\r\n this.setAttribute('color', new THREE.BufferAttribute(colors, 3));\r\n this.computeBoundingBox();\r\n this.computeBoundingSphere();\r\n\r\n geoOut.destroy();\r\n }\r\n\r\n convertToAtomsColored(packedArrays, atomsColored) {\r\n const { atoms, colors } = packedArrays;\r\n for (let i = 0, numAtoms = atoms.length; i < numAtoms; i++) {\r\n const vCenter = atoms[i].position;\r\n const { radius } = atoms[i].element;\r\n atomsColored[i] = new IsoSurfaceAtomColored(vCenter, radius);\r\n const nm = atoms[i].element.number;\r\n atomsColored[i].atomType = this.getType(nm);\r\n let cIdx = COLOR_SIZE * i;\r\n atomsColored[i].colorX = colors[cIdx++];\r\n atomsColored[i].colorY = colors[cIdx++];\r\n atomsColored[i].colorZ = colors[cIdx];\r\n atomsColored[i].srcAtom = atoms[i];\r\n }\r\n }\r\n\r\n getGeo() {\r\n return this.geoOut;\r\n }\r\n\r\n destroy() {\r\n this.atoms = null;\r\n\r\n this.hashLines = null;\r\n this.hashEntries = null;\r\n }\r\n\r\n /**\r\n * Calculates bounding box for array with spheres (atoms)\r\n *\r\n * @param {Object} atoms Atoms array\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n */\r\n getBoundingBox(atoms, vBoxMin, vBoxMax) {\r\n const bigNum = 10000000.0;\r\n\r\n vBoxMin.x = vBoxMin.y = vBoxMin.z = bigNum;\r\n vBoxMax.x = vBoxMax.y = vBoxMax.z = 0 - bigNum;\r\n\r\n const probeRadius2 = this.probeRadius * this.atomRadiusScale;\r\n let radMax = 0.0;\r\n for (let i = 0, num = atoms.length; i < num; i++) {\r\n const vCenter = atoms[i].coord;\r\n const rad = atoms[i].radius + probeRadius2;\r\n radMax = (rad > radMax) ? rad : radMax;\r\n if (vCenter.x - rad < vBoxMin.x) {\r\n vBoxMin.x = vCenter.x - rad;\r\n }\r\n if (vCenter.y - rad < vBoxMin.y) {\r\n vBoxMin.y = vCenter.y - rad;\r\n }\r\n if (vCenter.z - rad < vBoxMin.z) {\r\n vBoxMin.z = vCenter.z - rad;\r\n }\r\n if (vCenter.x + rad > vBoxMax.x) {\r\n vBoxMax.x = vCenter.x + rad;\r\n }\r\n if (vCenter.y + rad > vBoxMax.y) {\r\n vBoxMax.y = vCenter.y + rad;\r\n }\r\n if (vCenter.z + rad > vBoxMax.z) {\r\n vBoxMax.z = vCenter.z + rad;\r\n }\r\n }\r\n vBoxMin.x -= radMax;\r\n vBoxMin.y -= radMax;\r\n vBoxMin.z -= radMax;\r\n vBoxMax.x += radMax;\r\n vBoxMax.y += radMax;\r\n vBoxMax.z += radMax;\r\n }\r\n\r\n /**\r\n * Calculate (x,y,z) cordinate of the cell corner point\r\n *\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n * @param {number} x Cell integer x coordinate\r\n * @param {number} y Cell integer y coordinate\r\n * @param {number} z Cell integer z coordinate\r\n * @param {number} numPoints NUm points in cell on side\r\n * @param {Vector3} vOut Output vector\r\n */\r\n getCornerCoord(vBoxMin, vBoxMax, x, y, z, numPoints, vOut) {\r\n const invNP = 1.0 / (numPoints - 1.0);\r\n const tx = x * invNP;\r\n const ty = y * invNP;\r\n const tz = z * invNP;\r\n\r\n vOut.x = vBoxMin.x * (1.0 - tx) + vBoxMax.x * tx;\r\n vOut.y = vBoxMin.y * (1.0 - ty) + vBoxMax.y * ty;\r\n vOut.z = vBoxMin.z * (1.0 - tz) + vBoxMax.z * tz;\r\n }\r\n\r\n /**\r\n * Calculate point of intersection of sphere surface\r\n * and cell edge, given by [indexA, indexB] line\r\n *\r\n * @param {number} indexA Cell vertex index in [0..11]\r\n * @param {number} indexB Cell vertex index in [0..11]\r\n * @param {array} sign Sign array for all 8 vertices\r\n * @param {object} cube Cube\r\n * @param {number} indexPointValue for value placement\r\n * @param {Vector3} vOut Point of intersection\r\n */\r\n buildEdgePoint(indexA, indexB, sign, cube, indexPointValue, vOut) {\r\n if (sign[indexA] ^ sign[indexB]) {\r\n const cTwentyFour = 24;\r\n const t = (0 - cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexA])\r\n / (cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexB]\r\n - cube.pointsValuesLinear[indexPointValue + cTwentyFour + indexA]);\r\n const xa = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 0];\r\n const ya = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 1];\r\n const za = cube.pointsValuesLinear[indexPointValue + indexA * (2 + 1) + 2];\r\n const xb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 0];\r\n const yb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 1];\r\n const zb = cube.pointsValuesLinear[indexPointValue + indexB * (2 + 1) + 2];\r\n\r\n vOut.x = xa * (1.0 - t) + xb * t;\r\n vOut.y = ya * (1.0 - t) + yb * t;\r\n vOut.z = za * (1.0 - t) + zb * t;\r\n }\r\n }\r\n\r\n /**\r\n * Check if triangle is visible (vertices are close to atoms included in visibility set)\r\n *\r\n * @param {Vector3} v0 Vertex #0\r\n * @param {Vector3} v1 Vertex #1\r\n * @param {Vector3} v2 Vertex #2\r\n * @returns {boolean} true if triangle is visible\r\n */\r\n isTriangleVisible(v0, v1, v2) {\r\n const a0 = this.voxelWorld.getClosestAtom(v0);\r\n const a1 = this.voxelWorld.getClosestAtom(v1);\r\n const a2 = this.voxelWorld.getClosestAtom(v2);\r\n if (a0 === null || a1 === null || a2 === null\r\n || a0.srcAtom === null || a1.srcAtom === null || a2.srcAtom === null) {\r\n return false;\r\n }\r\n\r\n return this.visibilitySelector.includesAtom(a0.srcAtom)\r\n && this.visibilitySelector.includesAtom(a1.srcAtom)\r\n && this.visibilitySelector.includesAtom(a2.srcAtom);\r\n }\r\n\r\n /**\r\n * Add triangle to result geometry\r\n *\r\n * @param {Vector3} v0 Vertex #0\r\n * @param {Vector3} v1 Vertex #1\r\n * @param {Vector3} v2 Vertex #2\r\n * @returns {boolean} false if no more triangles can be added\r\n */\r\n addTriangle(v0, v1, v2) {\r\n if (this.visibilitySelector && !this.isTriangleVisible(v0, v1, v2)) {\r\n return true;\r\n }\r\n\r\n const geo = this.geoOut;\r\n\r\n if (geo._numTriangles >= this.maxNumTriangles) {\r\n return false;\r\n }\r\n\r\n // Add vertex with optimize\r\n const indInGeo0 = this.addVertexToGeo(geo, v0);\r\n const indInGeo1 = this.addVertexToGeo(geo, v1);\r\n const indInGeo2 = this.addVertexToGeo(geo, v2);\r\n if ((indInGeo0 | indInGeo1 | indInGeo2) < 0) {\r\n return false;\r\n }\r\n\r\n const itr = 3 * geo._numTriangles;\r\n geo._indices[itr + 0] = indInGeo0;\r\n geo._indices[itr + 1] = indInGeo1;\r\n geo._indices[itr + 2] = indInGeo2;\r\n geo._numTriangles++;\r\n return true;\r\n }\r\n\r\n /**\r\n * Build result geometry (triangle mesh) from marching cube cells\r\n *\r\n * @param {number} meshRes Marchnig cube vertex count on each side\r\n * @param {Vector3} vBoxMin Bounding box point min\r\n * @param {Vector3} vBoxMax Bounding box point max\r\n * @param {number} corners float values array for each cube point\r\n * @param {Vector3} vCellStep vector to next cube cell diagonal point\r\n * @param {object} cube IsoSurfaceMarchCube object\r\n * @returns {number} 0, if success (<0) is error\r\n */\r\n buildGeoFromCorners(meshRes, vBoxMin, vBoxMax, corners, vCellStep, cube) {\r\n const arrSize = 12;\r\n const cNumVerts = 8;\r\n const numCells = meshRes - 1;\r\n const side = meshRes;\r\n const side2 = meshRes * meshRes;\r\n\r\n const vaEdges = new Array(arrSize);\r\n for (let i = 0; i < arrSize; i++) {\r\n vaEdges[i] = new THREE.Vector3();\r\n }\r\n const sign = [];\r\n for (let i = 0; i < cNumVerts; i++) {\r\n sign[i] = 1.0;\r\n }\r\n const vCorner = new THREE.Vector3();\r\n let indCell = 0;\r\n let indY = 0;\r\n for (let y = 0; y < numCells; y++, indY += side2) {\r\n let indZ = 0;\r\n for (let z = 0; z < numCells; z++, indZ += side) {\r\n for (let x = 0; x < numCells; x++) {\r\n if (!cube.hasIntersection[indCell]) {\r\n // next cell\r\n indCell++;\r\n continue;\r\n }\r\n const bitsInside = cube.bitsInside[indCell];\r\n\r\n this.getCornerCoord(vBoxMin, vBoxMax, x, y, z, meshRes, vCorner);\r\n\r\n const indPointValues = indCell * (2 << (2 + 2));\r\n for (let i = 0, j = 0; i < cNumVerts; i++) {\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.x;\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.y;\r\n cube.pointsValuesLinear[indPointValues + j++] = vCorner.z;\r\n }\r\n\r\n cube.pointsValuesLinear[indPointValues + 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 2 * 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 5 * 3] += vCellStep.x;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3] += vCellStep.x;\r\n\r\n cube.pointsValuesLinear[indPointValues + 2 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 3 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3 + 2] += vCellStep.z;\r\n cube.pointsValuesLinear[indPointValues + 7 * 3 + 2] += vCellStep.z;\r\n\r\n cube.pointsValuesLinear[indPointValues + 4 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 5 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 6 * 3 + 1] += vCellStep.y;\r\n cube.pointsValuesLinear[indPointValues + 7 * 3 + 1] += vCellStep.y;\r\n\r\n // now current cell has intersections (from -x to +x) on some cube edges\r\n const indValues = indPointValues + 24;\r\n for (let i = 0; i < cNumVerts; ++i) {\r\n sign[i] = (cube.pointsValuesLinear[indValues + i] < 0.0) ? 1 : 0;\r\n }\r\n\r\n this.buildEdgePoint(0, 1, sign, cube, indPointValues, vaEdges[0]);\r\n this.buildEdgePoint(1, 2, sign, cube, indPointValues, vaEdges[1]);\r\n this.buildEdgePoint(2, 3, sign, cube, indPointValues, vaEdges[2]);\r\n this.buildEdgePoint(3, 0, sign, cube, indPointValues, vaEdges[3]);\r\n\r\n this.buildEdgePoint(4, 5, sign, cube, indPointValues, vaEdges[4]);\r\n this.buildEdgePoint(5, 6, sign, cube, indPointValues, vaEdges[5]);\r\n this.buildEdgePoint(6, 7, sign, cube, indPointValues, vaEdges[6]);\r\n this.buildEdgePoint(7, 4, sign, cube, indPointValues, vaEdges[7]);\r\n\r\n this.buildEdgePoint(0, 4, sign, cube, indPointValues, vaEdges[8]);\r\n this.buildEdgePoint(1, 5, sign, cube, indPointValues, vaEdges[9]);\r\n this.buildEdgePoint(2, 6, sign, cube, indPointValues, vaEdges[10]);\r\n this.buildEdgePoint(3, 7, sign, cube, indPointValues, vaEdges[11]);\r\n\r\n const offs = bitsInside * (2 << (1 + 2));\r\n for (let numTri = 0, indTri = 0; numTri < (2 + 2 + 2); numTri++, indTri += 3) {\r\n // s_triIndicesMarchCube is external array, defined in mold_ind.js\r\n const i0 = cube.striIndicesMarchCube[offs + indTri];\r\n if (i0 < 0) {\r\n break;\r\n }\r\n const i1 = cube.striIndicesMarchCube[offs + indTri + 1];\r\n const i2 = cube.striIndicesMarchCube[offs + indTri + 2];\r\n\r\n if (!this.addTriangle(vaEdges[i0], vaEdges[i1], vaEdges[i2])) {\r\n return 0 - 2;\r\n }\r\n } // for numTri\r\n\r\n // next cell (cube)\r\n indCell++;\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n return 0;\r\n }\r\n\r\n /**\r\n * Returns number of cell with intersection with at least one sphere.\r\n * Using this number, we can estimate required number of vertices\r\n * and triangles to build result mesh.\r\n *\r\n * @param {number} side Number of points in cube voxels\r\n * @param {number} numCells Number of cells in cube voxels (per direction)\r\n * @param {array} corners Array of float values for cube corner points\r\n * @param {object} cube IsoSurfaceMarchCube object\r\n * @returns {number} numIntersectedCells\r\n */\r\n getNumIntersectedCells(side, numCells, corners, cube) {\r\n const side2 = side * side;\r\n const cNumVerts = 8;\r\n let numIntersectedCells = 0;\r\n\r\n let indCell = 0;\r\n let indY = 0;\r\n for (let y = 0; y < numCells; y++, indY += side2) {\r\n let indZ = 0;\r\n for (let z = 0; z < numCells; z++, indZ += side) {\r\n for (let x = 0; x < numCells; x++) {\r\n const cubeValuesIndex = indCell * (2 << (2 + 2)) + 24;\r\n const indCorner = x + indZ + indY;\r\n\r\n cube.pointsValuesLinear[cubeValuesIndex] = corners[indCorner];\r\n cube.pointsValuesLinear[cubeValuesIndex + 1] = corners[indCorner + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 2] = corners[indCorner + side + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 3] = corners[indCorner + side];\r\n cube.pointsValuesLinear[cubeValuesIndex + 4] = corners[side2 + indCorner];\r\n cube.pointsValuesLinear[cubeValuesIndex + 5] = corners[side2 + indCorner + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 6] = corners[side2 + indCorner + side + 1];\r\n cube.pointsValuesLinear[cubeValuesIndex + 7] = corners[side2 + indCorner + side];\r\n\r\n // check read exception\r\n // assert(side2 + indCorner + side + 1 < side3);\r\n\r\n // get bit flags inside\r\n let bitsInside = 0;\r\n for (let i = 0; i < cNumVerts; ++i) {\r\n if (cube.pointsValuesLinear[cubeValuesIndex + i] < 0.0) {\r\n bitsInside |= (1 << i);\r\n }\r\n }\r\n\r\n if ((bitsInside === 0) || (bitsInside === ((1 << cNumVerts) - 1))) {\r\n cube.hasIntersection[indCell] = false;\r\n } else {\r\n cube.hasIntersection[indCell] = true;\r\n numIntersectedCells++;\r\n }\r\n cube.bitsInside[indCell] = bitsInside;\r\n // next cell\r\n indCell++;\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n return numIntersectedCells;\r\n }\r\n\r\n getType(letter) {\r\n const atomT = [0, 0, 1, 1, 2, 6, 3, 6, 4, 6, 5, 6, 6, 0, 7, 3, 8, 2, 9, 6, 10, 6, 11, 6, 12, 6, 13, 6, 14, 6, 15, 4,\r\n 16, 5, 17, 6, 18, 6, 19, 6, 20, 6, 21, 6, 22, 6, 23, 6, 24, 6, 25, 6, 26, 6, 27, 6, 28, 6, 29, 6, 30, 6, 31, 6,\r\n 32, 6, 33, 6, 34, 6, 35, 6, 36, 6, 37, 6, 38, 6, 39, 6, 40, 6, 41, 6, 42, 6, 43, 6, 44, 6, 45, 6, 46, 6, 47, 6,\r\n 48, 6, 49, 6, 50, 6, 51, 6, 52, 6, 53, 6, 54, 6, 55, 6, 56, 6, 57, 6, 58, 6, 59, 6, 60, 6, 61, 6, 62, 6, 63, 6,\r\n 64, 6, 65, 6, 66, 6, 67, 6, 68, 6, 69, 6, 70, 6, 71, 6, 72, 6, 73, 6, 74, 6, 75, 6, 76, 6, 77, 6, 78, 6, 79, 6,\r\n 80, 6, 81, 6, 82, 6, 83, 6, 84, 6, 85, 6, 86, 6, 87, 6, 88, 6, 89, 6, 90, 6, 91, 6, 92, 6, 93, 6, 94, 6, 95, 6,\r\n 96, 6, 97, 6, 98, 6, 99, 6, 100, 6, 101, 6, 102, 6, 103, 6, 104, 6, 105, 6, 106, 6, 107, 6, 108, 6, 109, 6];\r\n\r\n if (letter < 1 || letter > atomT.length / 2\r\n || (Object.keys(Element.ByAtomicNumber).length * 2) !== atomT.length) {\r\n throw new Error('atomT.length should be equal Element.ByAtomicNumber.length * 2');\r\n }\r\n return atomT[letter * 2];\r\n }\r\n\r\n /**\r\n * Calculate values for marching cube grid points\r\n * positive values are outside sphere, negative - is inside\r\n *\r\n * @param {array} corners array of float values\r\n * @param {number} side Number of point in cube in 1 dimennsion\r\n * @param {Vector3} vBoxMin Bounding box min point\r\n * @param {Vector3} vBoxMax Bounding box max point\r\n * @param {array} atoms Array of input atoms\r\n * @param {number} probeRad radius for atom probing\r\n */\r\n calculateGridCorners(corners, side, vBoxMin, vBoxMax, atoms, probeRad) {\r\n const side2 = side * side;\r\n const side3 = side2 * side;\r\n const vCorner = new THREE.Vector3();\r\n const vDif = new THREE.Vector3();\r\n\r\n const aLot = +1.0e12;\r\n\r\n for (let i = 0; i < side3; i++) {\r\n corners[i] = aLot; // to large value\r\n }\r\n\r\n const xScale = (side - 1) / (vBoxMax.x - vBoxMin.x);\r\n const yScale = (side - 1) / (vBoxMax.y - vBoxMin.y);\r\n const zScale = (side - 1) / (vBoxMax.z - vBoxMin.z);\r\n\r\n for (let s = 0, numAtoms = atoms.length; s < numAtoms; s++) {\r\n const atom = atoms[s];\r\n const radius = atom.radius + probeRad;\r\n\r\n const fx = ((atom.coord.x - radius) - vBoxMin.x) * xScale;\r\n const fy = ((atom.coord.y - radius) - vBoxMin.y) * yScale;\r\n const fz = ((atom.coord.z - radius) - vBoxMin.z) * zScale;\r\n\r\n const indXMin = Math.floor(fx);\r\n const indYMin = Math.floor(fy);\r\n const indZMin = Math.floor(fz);\r\n\r\n let indXMax = Math.floor(((atom.coord.x + radius) - vBoxMin.x) * xScale);\r\n let indYMax = Math.floor(((atom.coord.y + radius) - vBoxMin.y) * yScale);\r\n let indZMax = Math.floor(((atom.coord.z + radius) - vBoxMin.z) * zScale);\r\n\r\n indXMax++;\r\n indYMax++;\r\n indZMax++;\r\n indXMax = (indXMax <= (side - 1)) ? indXMax : (side - 1);\r\n indYMax = (indYMax <= (side - 1)) ? indYMax : (side - 1);\r\n indZMax = (indZMax <= (side - 1)) ? indZMax : (side - 1);\r\n\r\n for (let y = indYMin; y <= indYMax; y++) {\r\n const indY = y * side2;\r\n for (let z = indZMin; z <= indZMax; z++) {\r\n const indZ = z * side;\r\n for (let x = indXMin; x <= indXMax; x++) {\r\n const ind = indY + indZ + x;\r\n this.getCornerCoord(vBoxMin, vBoxMax, x, y, z, side, vCorner);\r\n vDif.x = vCorner.x - atom.coord.x;\r\n vDif.y = vCorner.y - atom.coord.y;\r\n vDif.z = vCorner.z - atom.coord.z;\r\n const distToSphere = Math.sqrt(vDif.x * vDif.x + vDif.y * vDif.y + vDif.z * vDif.z);\r\n // val: < 0, if inside sphere\r\n // val: > 0, if outside sphere\r\n const val = distToSphere - radius;\r\n if (val < corners[ind]) {\r\n corners[ind] = val;\r\n }\r\n } // for (x)\r\n } // for (z)\r\n } // for (y)\r\n } // for (s)\r\n }\r\n\r\n /**\r\n * Create memory pool for vertex hash management\r\n *\r\n * @param {number} maxNumVertices Maximum possible number of vertices (that will be build)\r\n * @param {number} maxNumTriangles Maximum possible number of triangles (that will be build)\r\n * @returns {number} 0, if success. (<0) is non memory\r\n */\r\n createVertexHash(maxNumVertices, maxNumTriangles) {\r\n this.hashLines = utils.allocateTyped(Int32Array, HASH_SIZE * 2);\r\n if (this.hashLines === null) {\r\n return 0 - 1;\r\n }\r\n for (let i = 0, j = 0; i < HASH_SIZE; i++) {\r\n this.hashLines[j++] = 0; // num vertices in this hash line\r\n this.hashLines[j++] = 0 - 1; // index of the first entry\r\n }\r\n\r\n this.maxNumVertices = maxNumVertices;\r\n this.maxNumTriangles = maxNumTriangles;\r\n\r\n this.numHashEtriesAllocated = maxNumVertices;\r\n this.hashEntries = utils.allocateTyped(Int32Array, 2 * this.numHashEtriesAllocated);\r\n if (this.hashEntries === null) {\r\n return 0 - 1;\r\n }\r\n for (let i = 0, j = 0; i < this.numHashEtriesAllocated; i++) {\r\n this.hashEntries[j++] = 0 - 1; // index of vertex\r\n this.hashEntries[j++] = 0 - 1; // next hash entry index\r\n }\r\n this.numHashEntryIndex = 0;\r\n return 0;\r\n }\r\n\r\n /**\r\n * Allocate and return new hash entry. Just check possible amount.\r\n *\r\n * @returns {number} index of hash entry, that can be used for geometry add vertex functionality\r\n */\r\n getNewHashEntry() {\r\n if (this.numHashEntryIndex < this.numHashEtriesAllocated) {\r\n const i = this.numHashEntryIndex;\r\n this.numHashEntryIndex++;\r\n return i;\r\n }\r\n return 0 - 1;\r\n }\r\n\r\n /**\r\n * Add vertex to geometry structure\r\n * using vertex hash table to quickly check, is this vertex already exist in geometry\r\n *\r\n * @param {object} geoOut Geometry to build\r\n * @param {Vector3} vAdd Vertex to add\r\n * @returns {number} index of added (or existing) vertex in geometry.\r\n */\r\n addVertexToGeo(geoOut, vAdd) {\r\n let entry;\r\n const oneHynberes = 0.01;\r\n const n815851 = 815851;\r\n const n37633 = 37633;\r\n const n2453543 = 2453543;\r\n const r106 = 1.0e-6;\r\n\r\n const hashResolution = this.marCubeResoultion << 2;\r\n const v = new THREE.Vector3();\r\n const ix = Math.floor(hashResolution * (vAdd.x - this.vBoxMin.x) / (this.vBoxMax.x + oneHynberes - this.vBoxMin.x));\r\n const iy = Math.floor(hashResolution * (vAdd.y - this.vBoxMin.y) / (this.vBoxMax.y + oneHynberes - this.vBoxMin.y));\r\n const iz = Math.floor(hashResolution * (vAdd.z - this.vBoxMin.z) / (this.vBoxMax.z + oneHynberes - this.vBoxMin.z));\r\n let iHash = ix * n815851 + iz * n37633 + iy * n2453543;\r\n iHash &= (HASH_SIZE - 1);\r\n const hLineIndex = iHash + iHash;\r\n\r\n // search vertex via hash\r\n // search in hash list\r\n if (this.vBoxMin !== null && this.vBoxMax !== null) {\r\n for (entry = this.hashLines[hLineIndex + 1]; entry >= 0; entry = this.hashEntries[entry * 2 + 1]) {\r\n const ind = this.hashEntries[entry * 2 + 0]; // vertex index\r\n v.copy(geoOut._vertices[ind]);\r\n v.x -= vAdd.x;\r\n v.y -= vAdd.y;\r\n v.z -= vAdd.z;\r\n const dot2 = v.x * v.x + v.y * v.y + v.z * v.z;\r\n if (dot2 < r106) {\r\n return ind;\r\n } // if (found)\r\n } // for (entry)\r\n } // search\r\n\r\n // add new vertex to geometry\r\n if (geoOut._numVertices >= this.maxNumVertices) {\r\n return 0 - 1;\r\n }\r\n\r\n const iVertAdd = geoOut._numVertices;\r\n geoOut._vertices[iVertAdd].copy(vAdd);\r\n\r\n // add to hash\r\n if (this.vBoxMin !== null && this.vBoxMax !== null) {\r\n entry = this.getNewHashEntry();\r\n if (entry < 0) {\r\n return 0 - 1;\r\n }\r\n const entryFirst = this.hashLines[hLineIndex + 1];\r\n this.hashLines[hLineIndex + 1] = entry;\r\n this.hashEntries[entry * 2 + 0] = iVertAdd;\r\n this.hashEntries[entry * 2 + 1] = entryFirst;\r\n\r\n this.hashLines[hLineIndex + 0]++; // num vertices in line ++\r\n }\r\n geoOut._numVertices++;\r\n return iVertAdd;\r\n }\r\n\r\n /**\r\n *\r\n * @param {number} side some placeholder description\r\n * @param {number} probeSphereRadius some placeholder description\r\n * @param {object} vBoxMin some placeholder description\r\n * @param {object} vBoxMax some placeholder description\r\n * @param {object} geoOut some placeholder description\r\n * @param {object} corners some placeholder description\r\n * @returns {number} always 0\r\n */\r\n modifyExcludedFromGeo(\r\n side,\r\n probeSphereRadius,\r\n vBoxMin,\r\n vBoxMax,\r\n geoOut,\r\n corners,\r\n ) {\r\n let ind;\r\n let distToSphere;\r\n let distToBorder;\r\n const r11 = 1.1;\r\n\r\n function innerBlockWorkAround() {\r\n if (distToBorder > 0.0) {\r\n // point is inside probe sphere\r\n if (corners[ind] < 0.0) {\r\n corners[ind] = distToBorder; // was inside surface, now is oustide ( > 0)\r\n }\r\n if (distToBorder > corners[ind]) {\r\n corners[ind] = distToBorder; // find positive maximum\r\n }\r\n } else if (distToBorder > corners[ind]) { // point is outside sphere\r\n corners[ind] = distToBorder; // find negative maximum\r\n }\r\n }\r\n\r\n const side2 = side * side;\r\n const xScale = (side - 1) / (vBoxMax.x - vBoxMin.x);\r\n const yScale = (side - 1) / (vBoxMax.y - vBoxMin.y);\r\n const zScale = (side - 1) / (vBoxMax.z - vBoxMin.z);\r\n\r\n const probeSpRad2 = (probeSphereRadius * 2) * (probeSphereRadius * 2);\r\n const sideInv = 1.0 / (side - 1);\r\n\r\n for (let i = 0; i < geoOut._numVertices; i++) {\r\n const vCenter = geoOut._vertices[i];\r\n\r\n const radEst = probeSphereRadius * r11;\r\n\r\n let indXMin = Math.floor(((vCenter.x - radEst) - vBoxMin.x) * xScale);\r\n let indYMin = Math.floor(((vCenter.y - radEst) - vBoxMin.y) * yScale);\r\n let indZMin = Math.floor(((vCenter.z - radEst) - vBoxMin.z) * zScale);\r\n\r\n let indXMax = Math.floor(((vCenter.x + radEst) - vBoxMin.x) * xScale);\r\n let indYMax = Math.floor(((vCenter.y + radEst) - vBoxMin.y) * yScale);\r\n let indZMax = Math.floor(((vCenter.z + radEst) - vBoxMin.z) * zScale);\r\n\r\n indXMin = (indXMin >= 0) ? indXMin : 0;\r\n indYMin = (indYMin >= 0) ? indYMin : 0;\r\n indZMin = (indZMin >= 0) ? indZMin : 0;\r\n indXMax = (indXMax <= (side - 1)) ? indXMax : (side - 1);\r\n indYMax = (indYMax <= (side - 1)) ? indYMax : (side - 1);\r\n indZMax = (indZMax <= (side - 1)) ? indZMax : (side - 1);\r\n\r\n for (let iy = indYMin; iy <= indYMax; iy++) {\r\n const indY = iy * side2;\r\n for (let iz = indZMin; iz <= indZMax; iz++) {\r\n const indZ = iz * side;\r\n for (let ix = indXMin; ix <= indXMax; ix++) {\r\n ind = indY + indZ + ix;\r\n // getCornerCoord(vBoxMin, vBoxMax, ix, iy, iz, side, &vCorner);\r\n let t = ix * sideInv;\r\n const xCorner = vBoxMin.x * (1.0 - t) + vBoxMax.x * t;\r\n t = iy * sideInv;\r\n const yCorner = vBoxMin.y * (1.0 - t) + vBoxMax.y * t;\r\n t = iz * sideInv;\r\n const zCorner = vBoxMin.z * (1.0 - t) + vBoxMax.z * t;\r\n\r\n const dx = xCorner - vCenter.x;\r\n const dy = yCorner - vCenter.y;\r\n const dz = zCorner - vCenter.z;\r\n const dist2 = dx * dx + dy * dy + dz * dz;\r\n if (dist2 < probeSpRad2) {\r\n distToSphere = Math.sqrt(dist2);\r\n distToBorder = -(distToSphere - probeSphereRadius);\r\n innerBlockWorkAround();\r\n } // if (dist from corner point to sphere center more 2 radiuses)\r\n } // for (ix)\r\n } // for (iz)\r\n } // for (iy)\r\n } // for (i) all geo vertices\r\n return 0;\r\n }\r\n\r\n _innerBuild() {\r\n let ok;\r\n const expandFactor = 1.2;\r\n\r\n // performance test\r\n // this.performanceTest();\r\n\r\n // Create temporary atoms (but colored)\r\n const packedArrays = {\r\n posRad: this._posRad,\r\n colors: this._colors,\r\n atoms: this._opts.atoms,\r\n };\r\n this.complex = this._opts.parent;\r\n this.atoms = packedArrays.atoms;\r\n this.meshResolution = this._opts.gridSpacing;\r\n this.atomRadiusScale = this._opts.radScale;\r\n this.colorMode = this._opts.colorMode;\r\n this.probeRadius = this._opts.probeRadius;\r\n this.useVertexColors = true;\r\n this.excludeProbe = this._opts.excludeProbe;\r\n this.visibilitySelector = this._opts.visibilitySelector;\r\n\r\n this.geoOut = null;\r\n\r\n this.hashLines = null;\r\n this.hashEntries = null;\r\n this.numHashEtriesAllocated = 0;\r\n this.numHashEntryIndex = 0;\r\n this.maxNumVertices = 0;\r\n this.maxNumTriangles = 0;\r\n\r\n const atomsColored = new Array(this.atoms.length);\r\n this.convertToAtomsColored(packedArrays, atomsColored);\r\n\r\n // find bbox for spheres scene\r\n const vBoxMin = this.vBoxMin = new THREE.Vector3();\r\n const vBoxMax = this.vBoxMax = new THREE.Vector3();\r\n this.getBoundingBox(atomsColored, vBoxMin, vBoxMax);\r\n\r\n const marCubeResoultion = this.marCubeResoultion = this.meshResolution * (2 + 2);\r\n\r\n // build grid corners for Marching cube algorithm\r\n const side = marCubeResoultion;\r\n const side2 = side * side;\r\n const side3 = side2 * side;\r\n const corners = utils.allocateTyped(Float32Array, side3);\r\n const rProbeRadius = this.probeRadius * this.atomRadiusScale;\r\n\r\n this.calculateGridCorners(corners, side, vBoxMin, vBoxMax, atomsColored, rProbeRadius);\r\n\r\n const numCells = marCubeResoultion - 1;\r\n const cube = new IsoSurfaceMarchCube();\r\n ok = cube.create(numCells);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n // copy corners to cells\r\n const vCellStep = new THREE.Vector3();\r\n vCellStep.x = (vBoxMax.x - vBoxMin.x) / numCells;\r\n vCellStep.y = (vBoxMax.y - vBoxMin.y) / numCells;\r\n vCellStep.z = (vBoxMax.z - vBoxMin.z) / numCells;\r\n\r\n let numIntersectedCellsEstim = this.getNumIntersectedCells(side, numCells, corners, cube);\r\n let maxNumVertices = Math.floor(numIntersectedCellsEstim * expandFactor);\r\n let maxNumTriangles = Math.floor(numIntersectedCellsEstim * expandFactor * 2);\r\n\r\n this.geoOut = new IsoSurfaceGeo(maxNumVertices, maxNumTriangles, this.useVertexColors);\r\n\r\n ok = this.createVertexHash(maxNumVertices, maxNumTriangles);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n\r\n // build voxel world (used to check triangle-to-atom tie and to calculate normals and colors)\r\n let probeRadForNormalsColors = rProbeRadius;\r\n if (this.excludeProbe) {\r\n probeRadForNormalsColors = 0.01;\r\n }\r\n this.voxelWorld = new IsosurfaceBuildNormals(\r\n atomsColored.length,\r\n atomsColored,\r\n vBoxMin,\r\n vBoxMax,\r\n probeRadForNormalsColors,\r\n );\r\n this.voxelWorld.createVoxels();\r\n\r\n ok = this.buildGeoFromCorners(marCubeResoultion, vBoxMin, vBoxMax, corners, vCellStep, cube);\r\n if (this.excludeProbe) {\r\n // using 3d mesh (geoOut) as a surface points\r\n // move probe sphere and try to minimuze corners values\r\n this.modifyExcludedFromGeo(side, rProbeRadius, vBoxMin, vBoxMax, this.geoOut, corners);\r\n\r\n // delete old builded geo\r\n this.geoOut._vertices = null;\r\n this.geoOut._colors = null;\r\n this.geoOut._indices = null;\r\n this.geoOut._normals = null;\r\n this.geoOut._numVertices = 0;\r\n this.geoOut._numTriangles = 0;\r\n this.geoOut = null;\r\n\r\n // estimage geo vertices budget again\r\n numIntersectedCellsEstim = this.getNumIntersectedCells(side, numCells, corners, cube);\r\n maxNumVertices = Math.floor(numIntersectedCellsEstim * expandFactor);\r\n maxNumTriangles = Math.floor(numIntersectedCellsEstim * expandFactor * 2);\r\n\r\n // creates empty new geometry\r\n this.geoOut = new IsoSurfaceGeo(maxNumVertices, maxNumTriangles, this.useVertexColors);\r\n ok = this.createVertexHash(maxNumVertices, maxNumTriangles);\r\n if (ok < 0) {\r\n return ok;\r\n }\r\n // build vertices and triangles from corners values\r\n ok = this.buildGeoFromCorners(side, vBoxMin, vBoxMax, corners, vCellStep, cube);\r\n }\r\n\r\n // build vertex normals\r\n this.voxelWorld.buildNormals(this.geoOut._vertices.length, this.geoOut._vertices, this.geoOut._normals);\r\n // More value : more smooth color mixing\r\n // value about 0.7: very rough colors borders\r\n let radiusColorSmoothness = 6.5;\r\n if (this.excludeProbe) {\r\n radiusColorSmoothness -= 1.5;\r\n }\r\n if (this.useVertexColors) {\r\n this.voxelWorld.buildColors(\r\n this.geoOut._vertices.length,\r\n this.geoOut._vertices,\r\n this.geoOut._colors,\r\n radiusColorSmoothness,\r\n );\r\n }\r\n this.voxelWorld.destroyVoxels();\r\n this.voxelWorld = null;\r\n\r\n // remove objects\r\n cube.destroy();\r\n\r\n return ok;\r\n }\r\n}\r\n\r\n// All code below must be erased from every device and each developer's memory\r\n\r\nexport default SSIsosurfaceGeometry;\r\n","import * as THREE from 'three';\r\nimport EventDispatcher from '../../utils/EventDispatcher';\r\n\r\nfunction createLabel(fieldTxt, className) {\r\n const text = document.createElement('div');\r\n text.className = className;\r\n\r\n if (typeof fieldTxt === 'string') {\r\n const spanText = document.createElement('span');\r\n spanText.style.fontSize = '150%';\r\n const strings = fieldTxt.split('\\n');\r\n\r\n for (let i = 0, n = strings.length; i < n; ++i) {\r\n const spanNodeP = document.createElement('span');\r\n const spanNodeText = document.createTextNode(strings[i]);\r\n spanNodeP.appendChild(spanNodeText);\r\n spanText.appendChild(spanNodeP);\r\n if (i < n - 1) {\r\n spanText.appendChild(document.createElement('br'));\r\n }\r\n }\r\n\r\n text.appendChild(spanText);\r\n } else {\r\n text.appendChild(fieldTxt);\r\n }\r\n text.worldPos = new THREE.Vector3();\r\n return text;\r\n}\r\nclass LabelsGeometry extends EventDispatcher {\r\n constructor(instanceCount, opts) {\r\n super();\r\n this._opts = opts;\r\n this.items = [];\r\n this.needsUpdate = false;\r\n\r\n let xTranslation = -50;\r\n let yTranslation = -50;\r\n switch (opts.horizontalAlign) {\r\n case 'left':\r\n xTranslation = 0;\r\n break;\r\n case 'right':\r\n xTranslation = -100;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n switch (opts.verticalAlign) {\r\n case 'top':\r\n yTranslation = -100;\r\n break;\r\n case 'bottom':\r\n yTranslation = 0;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n const deltaPos = new THREE.Vector3(opts.dx || 0, opts.dy || 0, opts.dz || 0);\r\n this.userData = {\r\n translation: `translate(${xTranslation}%, ${yTranslation}%)`,\r\n offset: deltaPos,\r\n };\r\n }\r\n\r\n setItem(itemIdx, itemPos, fieldTxt) {\r\n const opts = this._opts;\r\n const text = this.items[itemIdx] || createLabel(fieldTxt, 'label');\r\n\r\n text.worldPos.copy(itemPos);\r\n text.style.textAlign = opts.horizontalAlign;\r\n text.style.verticalAlign = opts.verticalAlign;\r\n this.items[itemIdx] = text;\r\n }\r\n\r\n setColor(itemIdx, fColor, bColor) {\r\n const text = this.items[itemIdx];\r\n text.opts = {\r\n color: fColor,\r\n background: bColor,\r\n };\r\n }\r\n\r\n startUpdate() {\r\n return true;\r\n }\r\n\r\n finishUpdate() {\r\n this.needsUpdate = true;\r\n this.dispatchEvent({ type: 'update' });\r\n }\r\n\r\n finalize() {\r\n this.finishUpdate();\r\n }\r\n\r\n // unimplemented functions\r\n raycast() {\r\n }\r\n\r\n setOpacity() {\r\n\r\n }\r\n\r\n getSubset() {\r\n return [];\r\n }\r\n}\r\n\r\nexport default LabelsGeometry;\r\n","import InstancedSpheresGeometry from './InstancedSpheresGeometry';\r\nimport SimpleSpheresGeometry from './SimpleSpheresGeometry';\r\nimport Simple2CCylindersGeometry from './Simple2CCylindersGeometry';\r\nimport Instanced2CCylindersGeometry from './Instanced2CCylindersGeometry';\r\nimport ExtrudedObjectsGeometry from './ExtrudedObjectsGeometry';\r\nimport ChunkedLinesGeometry from './ChunkedLinesGeometry';\r\nimport TwoColorLinesGeometry from './TwoColorLinesGeometry';\r\nimport CrossGeometry from './CrossGeometry';\r\nimport QuickSurfGeometry from './QuickSurfGeometry';\r\nimport ContactSurfaceGeometry from './ContactSurfaceGeometry';\r\nimport SSIsosurfaceGeometry from './SSIsosurfaceGeometry';\r\nimport LabelsGeometry from './LabelsGeometry';\r\n\r\nexport default {\r\n InstancedSpheresGeometry,\r\n SimpleSpheresGeometry,\r\n Simple2CCylindersGeometry,\r\n Instanced2CCylindersGeometry,\r\n ExtrudedObjectsGeometry,\r\n ChunkedLinesGeometry,\r\n TwoColorLinesGeometry,\r\n CrossGeometry,\r\n QuickSurfGeometry,\r\n ContactSurfaceGeometry,\r\n SSIsosurfaceGeometry,\r\n LabelsGeometry,\r\n};\r\n","export default {\r\n\r\n precision: 'mediump',\r\n\r\n /**\r\n *\r\n * @param {THREE.WebGLRenderer} renderer\r\n */\r\n init(renderer) {\r\n this.precision = renderer.capabilities.getMaxPrecision('highp');\r\n },\r\n};\r\n","import * as THREE from 'three';\r\n\r\nconst noiseWidth = 4;\r\nconst noiseHeight = 4;\r\nconst _noiseData = new Uint8Array([\r\n 24, 52, 0, 255, 254, 145, 0, 255, 122, 0, 0, 255, 7, 170, 0, 255,\r\n 34, 214, 0, 255, 173, 8, 0, 255, 86, 249, 0, 255, 160, 4, 0, 255,\r\n 226, 46, 0, 255, 224, 211, 0, 255, 3, 157, 0, 255, 174, 247, 0, 255,\r\n 12, 182, 0, 255, 220, 216, 0, 255, 1, 109, 0, 255, 253, 154, 0, 255,\r\n]);\r\nconst _noiseWrapS = THREE.RepeatWrapping;\r\nconst _noiseWrapT = THREE.RepeatWrapping;\r\nconst _noiseMinFilter = THREE.NearestFilter;\r\nconst _noiseMagFilter = THREE.NearestFilter;\r\nconst _noiseMapping = THREE.UVMapping;\r\nconst noiseTexture = new THREE.DataTexture(\r\n _noiseData,\r\n noiseWidth,\r\n noiseHeight,\r\n THREE.RGBAFormat,\r\n THREE.UnsignedByteType,\r\n _noiseMapping,\r\n _noiseWrapS,\r\n _noiseWrapT,\r\n _noiseMagFilter,\r\n _noiseMinFilter,\r\n 1,\r\n);\r\nnoiseTexture.needsUpdate = true;\r\n\r\nexport default {\r\n noiseWidth,\r\n noiseHeight,\r\n noiseTexture,\r\n};\r\n","import * as THREE from 'three';\r\nimport vertexShader from './Uber.vert';\r\nimport fragmentShader from './Uber.frag';\r\nimport capabilities from '../capabilities';\r\nimport noise from '../noiseTexture';\r\n\r\n// Length of _samplesKernel is used in Uber.frag\r\n// If you want to change length of _samplesKernel, please, remember change it in Uber.frag too.\r\n// You can easy find places for replace using word:_samplesKernel\r\nconst _samplesKernel = [\r\n new THREE.Vector2(-0.541978, 0.840393),\r\n new THREE.Vector2(0.125533, -0.992089),\r\n new THREE.Vector2(0.374329, 0.927296),\r\n new THREE.Vector2(-0.105475, 0.994422),\r\n];\r\n\r\nconst defaultUniforms = THREE.UniformsUtils.merge([\r\n\r\n THREE.UniformsLib.fog,\r\n THREE.UniformsLib.lights,\r\n\r\n {\r\n // are updated automatically by three.js (see THREE.ShaderLib.common)\r\n diffuse: { value: new THREE.Color(0xeeeeee) },\r\n opacity: { value: 1.0 },\r\n\r\n specular: { type: 'c', value: new THREE.Color(0x111111) },\r\n shininess: { type: 'f', value: 30 },\r\n fixedColor: { type: 'c', value: new THREE.Color(0xffffff) },\r\n zOffset: { type: 'f', value: 0.0 },\r\n zClipValue: { type: 'f', value: 0.0 },\r\n clipPlaneValue: { type: 'f', value: 0.0 },\r\n nearPlaneValue: { type: 'f', value: -0.5 },\r\n invModelViewMatrix: { type: '4fv', value: new THREE.Matrix4() },\r\n world2colorMatrix: { type: '4fv', value: new THREE.Matrix4() },\r\n dashedLineSize: { type: 'f', value: 0.1 },\r\n dashedLinePeriod: { type: 'f', value: 0.2 },\r\n projMatrixInv: { type: '4fv', value: new THREE.Matrix4() },\r\n viewport: { type: 'v2', value: new THREE.Vector2() },\r\n lineWidth: { type: 'f', value: 2.0 },\r\n // default value must be the same as settings\r\n fogAlpha: { type: 'f', value: 1.0 },\r\n samplesKernel: { type: 'v2v', value: null },\r\n noiseTex: { type: 't', value: null },\r\n noiseTexelSize: { type: 'v2', value: null },\r\n srcTexelSize: { type: 'v2', value: null },\r\n },\r\n\r\n]);\r\n\r\nconst uberOptionNames = [\r\n 'shininess',\r\n 'opacity',\r\n 'zOffset',\r\n 'diffuse',\r\n 'specular',\r\n 'fixedColor',\r\n 'zClipCoef',\r\n 'zClipValue',\r\n 'clipPlaneValue',\r\n 'world2colorMatrix',\r\n 'dashedLineSize',\r\n 'dashedLinePeriod',\r\n 'projMatrixInv',\r\n 'viewport',\r\n 'lineWidth',\r\n 'fogAlpha',\r\n 'samplesKernel',\r\n 'noiseTex',\r\n 'noiseTexelSize',\r\n 'srcTexelSize',\r\n];\r\n\r\n// properties that convert to uniforms\r\nconst uberOptions = {\r\n diffuse: new THREE.Color(0xffffff), // used in phong lighting\r\n specular: new THREE.Color(0x111111), // used in phong lighting\r\n shininess: 30, // used in phong lighting\r\n opacity: 1, // set mesh opacity\r\n fixedColor: new THREE.Color(0xffffff), // color to override (see OVERRIDE_COLOR)\r\n zOffset: 0.0, // used fo zsprites (see SPHERE_SPRITE CYLINDER_SPRITE)\r\n zClipCoef: 2.0, // use for Surfs clipping (mesh param, isn't used in shader) FIXME move to representation param\r\n zClipValue: 0.0, // value to clip Surfs in shader (see ZCLIP)\r\n clipPlaneValue: 0.0, // value to clip scene globally (see CLIPPLANE)\r\n world2colorMatrix: new THREE.Matrix4(),\r\n dashedLineSize: 0.1,\r\n dashedLinePeriod: 0.3,\r\n projMatrixInv: new THREE.Matrix4(),\r\n viewport: new THREE.Vector2(800, 600),\r\n lineWidth: 2.0,\r\n fogAlpha: 1.0,\r\n samplesKernel: _samplesKernel,\r\n noiseTex: noise.noiseTexture,\r\n noiseTexelSize: new THREE.Vector2(1.0 / noise.noiseWidth, 1.0 / noise.noiseHeight),\r\n srcTexelSize: new THREE.Vector2(1.0 / 800.0, 1.0 / 600.0),\r\n copy(source) {\r\n this.diffuse.copy(source.diffuse);\r\n this.specular.copy(source.specular);\r\n this.shininess = source.shininess;\r\n this.opacity = source.opacity;\r\n this.fixedColor.copy(source.fixedColor);\r\n this.zOffset = source.zOffset;\r\n this.zClipCoef = source.zClipCoef;\r\n this.zClipValue = source.zClipValue;\r\n this.clipPlaneValue = source.clipPlaneValue;\r\n this.world2colorMatrix.copy(source.world2colorMatrix);\r\n this.dashedLineSize = source.dashedLineSize;\r\n this.dashedLinePeriod = source.dashedLinePeriod;\r\n this.projMatrixInv = source.projMatrixInv;\r\n this.viewport = source.viewport;\r\n this.lineWidth = source.lineWidth; // used for thick lines only\r\n this.toonShading = source.toonShading;\r\n this.fogAlpha = source.fogAlpha;\r\n this.samplesKernel = source.samplesKernel;\r\n this.noiseTex = source.noiseTex;\r\n this.noiseTexelSize = source.noiseTexelSize;\r\n this.srcTexelSize = source.srcTexelSize;\r\n },\r\n};\r\n\r\nclass UberMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // add fog\r\n this.fog = true;\r\n // used for instanced geometry\r\n this.instancedPos = false;\r\n this.instancedMatrix = false;\r\n // atoms and links color\r\n this.attrColor = false;\r\n // second link color for cylinders\r\n this.attrColor2 = false;\r\n //\r\n this.attrAlphaColor = false;\r\n // overrides color for all vertices (used in selection)\r\n this.overrideColor = false;\r\n // zsrpites\r\n this.sphereSprite = false;\r\n this.cylinderSprite = false;\r\n // clip Surfs individually\r\n this.zClip = false;\r\n // clip scene with global clip plane\r\n this.clipPlane = false;\r\n // enable fake (chess-like) opacity\r\n this.fakeOpacity = false;\r\n // render only depth, don't take care about the pixel color (used for transparency depth prepass)\r\n this.prepassTransparancy = false;\r\n // used to render pixel positions\r\n this.colorFromPos = false;\r\n // used to render shadowmap\r\n this.shadowmap = false;\r\n // used to describe shadowmap type\r\n this.shadowmapType = 'random';\r\n // used to render pixel view deph\r\n this.colorFromDepth = false;\r\n // mark that rendering is for orthographic camera\r\n this.orthoCam = false;\r\n // used to render dashed line\r\n this.dashedLine = false;\r\n // mark as transparent\r\n this.transparent = true;\r\n // mark as thick lines\r\n this.thickLine = false;\r\n // makes fog begin transparency (required for transparent background)\r\n this.fogTransparent = false;\r\n // used to render surface normals to G buffer for ssao effect\r\n this.normalsToGBuffer = false;\r\n // used for toon material\r\n this.toonShading = false;\r\n\r\n // uber options of \"root\" materials are inherited from single uber-options object that resides in prototype\r\n this.uberOptions = Object.create(UberMaterial.prototype.uberOptions);\r\n\r\n // set default values\r\n super.setValues({\r\n glslVersion: THREE.GLSL3,\r\n vertexShader: this.precisionString() + vertexShader,\r\n fragmentShader: this.precisionString() + fragmentShader,\r\n uniforms: THREE.UniformsUtils.clone(defaultUniforms),\r\n lights: true,\r\n fog: true,\r\n side: THREE.DoubleSide,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n precisionString() {\r\n const { precision } = capabilities;\r\n const str = `precision ${precision} float;\\n`\r\n + `precision ${precision} int;\\n\\n`;\r\n return str;\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n\r\n this.fragmentShader = source.fragmentShader;\r\n this.vertexShader = source.vertexShader;\r\n\r\n this.uniforms = THREE.UniformsUtils.clone(source.uniforms);\r\n this.defines = { ...source.defines };\r\n this.extensions = source.extensions;\r\n\r\n this.fog = source.fog;\r\n this.instancedPos = source.instancedPos;\r\n this.instancedMatrix = source.instancedMatrix;\r\n this.attrColor = source.attrColor;\r\n this.attrColor2 = source.attrColor2;\r\n this.attrAlphaColor = source.attrAlphaColor;\r\n this.overrideColor = source.overrideColor;\r\n this.sphereSprite = source.sphereSprite;\r\n this.cylinderSprite = source.cylinderSprite;\r\n this.zClip = source.zClip;\r\n this.clipPlane = source.clipPlane;\r\n this.fakeOpacity = source.fakeOpacity;\r\n this.colorFromPos = source.colorFromPos;\r\n this.shadowmap = source.shadowmap;\r\n this.shadowmapType = source.shadowmapType;\r\n this.colorFromDepth = source.colorFromDepth;\r\n this.orthoCam = source.orthoCam;\r\n this.prepassTransparancy = source.prepassTransparancy;\r\n this.dashedLine = source.dashedLine;\r\n this.thickLine = source.thickLine;\r\n this.fogTransparent = source.fogTransparent;\r\n this.normalsToGBuffer = source.normalsToGBuffer;\r\n this.toonShading = source.toonShading;\r\n\r\n this.uberOptions.copy(source.uberOptions);\r\n\r\n return this;\r\n }\r\n\r\n // create copy of this material\r\n // its options are prototyped after this material's options\r\n createInstance() {\r\n const inst = new UberMaterial();\r\n inst.copy(this);\r\n inst.uberOptions = Object.create(this.uberOptions);\r\n return inst;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n const extensions = {};\r\n\r\n if (this.fog) {\r\n defines.USE_FOG = 1;\r\n }\r\n if (this.instancedPos) {\r\n defines.INSTANCED_POS = 1;\r\n }\r\n if (this.instancedMatrix) {\r\n defines.INSTANCED_MATRIX = 1;\r\n }\r\n if (this.attrColor) {\r\n defines.ATTR_COLOR = 1;\r\n }\r\n if (this.attrColor2) {\r\n defines.ATTR_COLOR2 = 1;\r\n }\r\n if (this.attrAlphaColor) {\r\n defines.ATTR_ALPHA_COLOR = 1;\r\n }\r\n if (this.overrideColor) {\r\n defines.OVERRIDE_COLOR = 1;\r\n }\r\n if (this.sphereSprite) {\r\n defines.SPHERE_SPRITE = 1;\r\n extensions.fragDepth = true;\r\n }\r\n if (this.cylinderSprite) {\r\n defines.CYLINDER_SPRITE = 1;\r\n extensions.fragDepth = true;\r\n }\r\n if (this.zClip) {\r\n defines.ZCLIP = 1;\r\n }\r\n if (this.clipPlane) {\r\n defines.CLIP_PLANE = 1;\r\n }\r\n if (this.fakeOpacity) {\r\n defines.FAKE_OPACITY = 1;\r\n }\r\n if (this.lights) {\r\n defines.USE_LIGHTS = 1;\r\n }\r\n if (this.colorFromPos) {\r\n defines.COLOR_FROM_POS = 1;\r\n }\r\n if (this.shadowmap) {\r\n defines.SHADOWMAP = 1;\r\n if (this.shadowmapType === 'pcf') {\r\n defines.SHADOWMAP_PCF_SHARP = 1;\r\n } else if (this.shadowmapType === 'random') {\r\n defines.SHADOWMAP_PCF_RAND = 1;\r\n } else {\r\n defines.SHADOWMAP_BASIC = 1;\r\n }\r\n }\r\n if (this.colorFromDepth) {\r\n defines.COLOR_FROM_DEPTH = 1;\r\n }\r\n if (this.orthoCam) {\r\n defines.ORTHOGRAPHIC_CAMERA = 1;\r\n }\r\n if (this.prepassTransparancy) {\r\n defines.PREPASS_TRANSP = 1;\r\n }\r\n if (this.dashedLine) {\r\n defines.DASHED_LINE = 1;\r\n }\r\n if (this.thickLine) {\r\n defines.THICK_LINE = 1;\r\n }\r\n if (this.fogTransparent) {\r\n defines.FOG_TRANSPARENT = 1;\r\n }\r\n if (this.normalsToGBuffer) {\r\n extensions.drawBuffers = true;\r\n defines.NORMALS_TO_G_BUFFER = 1;\r\n }\r\n if (this.toonShading) {\r\n defines.TOON_SHADING = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n this.extensions = extensions;\r\n }\r\n\r\n setUberOptions(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n for (const key in values) {\r\n if (!values.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n\r\n if (this.uberOptions[key] instanceof THREE.Color) {\r\n this.uberOptions[key] = values[key].clone();\r\n } else {\r\n this.uberOptions[key] = values[key];\r\n }\r\n }\r\n }\r\n\r\n clone(shallow) {\r\n if (!shallow) {\r\n return super.clone();\r\n }\r\n return this.createInstance();\r\n }\r\n\r\n updateUniforms() {\r\n const self = this;\r\n\r\n uberOptionNames.forEach((p) => {\r\n if (self.uniforms.hasOwnProperty(p)) {\r\n if (self.uberOptions[p] instanceof THREE.Color\r\n || self.uberOptions[p] instanceof THREE.Matrix4) {\r\n self.uniforms[p].value = self.uberOptions[p].clone();\r\n } else {\r\n self.uniforms[p].value = self.uberOptions[p];\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\nUberMaterial.prototype.uberOptions = uberOptions;\r\n\r\nexport default UberMaterial;\r\n","import UberMaterial from '../shaders/UberMaterial';\r\n\r\nexport default function (SuperClass) {\r\n class NewObjectType extends SuperClass {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.onBeforeRender = NewObjectType.prototype.onBeforeRender;\r\n }\r\n\r\n onBeforeRender(renderer, scene, camera, geometry, material, group) {\r\n this._onBeforeRender(renderer, scene, camera, geometry, material, group);\r\n this._update();\r\n }\r\n\r\n _onBeforeRender() {\r\n }\r\n\r\n _update() {\r\n const { material } = this;\r\n if (!material) {\r\n return;\r\n }\r\n\r\n if (material instanceof UberMaterial) {\r\n material.updateUniforms();\r\n }\r\n }\r\n }\r\n\r\n return NewObjectType;\r\n}\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass ZSpriteMesh extends Mesh {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n\r\n _onBeforeRender(renderer, scene, camera, _geometry, _material, _group) {\r\n Mesh.prototype._onBeforeRender.call(this, renderer, scene, camera);\r\n const { material } = this;\r\n if (!material) {\r\n return;\r\n }\r\n\r\n if (material.uniforms.invModelViewMatrix) {\r\n // NOTE: update of modelViewMatrix inside threejs is done after onBeforeRender call,\r\n // so we have to do it manually in that place\r\n this.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, this.matrixWorld);\r\n // get inverse matrix\r\n material.uniforms.invModelViewMatrix.value.copy(this.modelViewMatrix).invert();\r\n material.uniforms.nearPlaneValue.value = camera.near;\r\n material.uniformsNeedUpdate = true;\r\n }\r\n }\r\n}\r\n\r\nexport default ZSpriteMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass ZClippedMesh extends Mesh {\r\n constructor(geometry, material) {\r\n super(geometry, material);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n\r\n static _mvLength = new THREE.Vector3();\r\n\r\n static _center = new THREE.Vector3();\r\n\r\n static _modelView = new THREE.Matrix4();\r\n\r\n _onBeforeRender(renderer, scene, camera) {\r\n Mesh.prototype._onBeforeRender.call(this, renderer, scene, camera);\r\n\r\n const geo = this.geometry;\r\n const { material } = this;\r\n if (!geo.zClip || !material.uberOptions) {\r\n return;\r\n }\r\n\r\n const zClipCoef = 0.5;\r\n\r\n const modelView = ZClippedMesh._modelView;\r\n const mvLength = ZClippedMesh._mvLength;\r\n const center = ZClippedMesh._center;\r\n\r\n modelView.multiplyMatrices(this.matrixWorld, camera.matrixWorldInverse);\r\n const s = mvLength.setFromMatrixColumn(modelView, 0).length();\r\n center.copy(geo.boundingSphere.center);\r\n\r\n this.localToWorld(center);\r\n material.uberOptions.zClipValue = camera.position.z - center.z\r\n - s * (zClipCoef * geo.boundingSphere.radius);\r\n }\r\n}\r\n\r\nexport default ZClippedMesh;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport CSS2DObject from '../CSS2DObject';\r\nimport utils from '../../utils';\r\n\r\nclass TextMesh extends THREE.Group {\r\n constructor(geometry, _material) {\r\n super();\r\n this.geometry = geometry;\r\n\r\n const self = this;\r\n self.initialized = false;\r\n this.geometry.addEventListener('update', () => {\r\n self.update();\r\n });\r\n }\r\n\r\n init() {\r\n const { children } = this;\r\n for (let i = children.length - 1; i >= 0; --i) {\r\n this.remove(children[i]);\r\n }\r\n\r\n const { items, userData } = this.geometry;\r\n for (let i = 0, n = items.length; i < n; ++i) {\r\n const srcItem = items[i];\r\n if (!srcItem) {\r\n continue;\r\n }\r\n const item = utils.shallowCloneNode(srcItem);\r\n const label = new CSS2DObject(item);\r\n label.userData = _.clone(userData);\r\n const el = label.getElement();\r\n el.style.visibility = 'visible';\r\n label.source = srcItem;\r\n this.add(label);\r\n }\r\n this.initialized = true;\r\n }\r\n\r\n update() {\r\n const geo = this.geometry;\r\n if (!geo.needsUpdate) {\r\n return;\r\n }\r\n const { children } = this;\r\n if (!this.initialized) {\r\n this.init();\r\n }\r\n\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n const item = child.source;\r\n child.position.copy(item.worldPos);\r\n child.userData.color = item.opts.color;\r\n child.userData.background = item.opts.background;\r\n }\r\n }\r\n}\r\n\r\nexport default TextMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass SimpleMesh extends Mesh {\r\n constructor(geometry, material) {\r\n super(geometry, material);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n}\r\n\r\nexport default SimpleMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\nconst _viewport = new THREE.Vector2();\r\n\r\nclass ThickLineMesh extends Mesh {\r\n _onBeforeRender(renderer, scene, camera, _geometry, _material, _group) {\r\n const { material } = this;\r\n if (!material.uberOptions) {\r\n return;\r\n }\r\n\r\n material.uberOptions.projMatrixInv.copy(camera.projectionMatrix).invert();\r\n renderer.getSize(_viewport);\r\n material.uberOptions.viewport.set(_viewport.width, _viewport.height);\r\n }\r\n}\r\n\r\nexport default ThickLineMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\n\r\nconst Mesh = UberObject(THREE.Mesh);\r\n\r\nclass InstancedMesh extends Mesh {\r\n constructor(...rest) {\r\n super(...rest);\r\n this.castShadow = true;\r\n this.receiveShadow = true;\r\n }\r\n}\r\n\r\nexport default InstancedMesh;\r\n","import * as THREE from 'three';\r\nimport UberObject from './UberObject';\r\nimport ZSpriteMesh from './ZSpriteMesh';\r\nimport ZClippedMesh from './ZClippedMesh';\r\nimport TextMesh from './TextMesh';\r\nimport SimpleMesh from './SimpleMesh';\r\nimport ThickLineMesh from './ThickLineMesh';\r\nimport InstancedMesh from './InstancedMesh';\r\n\r\nexport default {\r\n ZClipped: ZClippedMesh,\r\n ZSprite: ZSpriteMesh,\r\n Text: TextMesh,\r\n Line: UberObject(THREE.Line),\r\n LineSegments: UberObject(THREE.LineSegments),\r\n Mesh: SimpleMesh,\r\n ThickLineMesh,\r\n Instanced: InstancedMesh,\r\n};\r\n","import geometries from '../geometries/geometries';\r\nimport meshes from './meshes';\r\nimport ThickLinesGeometry from '../geometries/ThickLinesGeometry';\r\n\r\nfunction setMatParams(params, uniforms) {\r\n return function (material) {\r\n material.setValues(params);\r\n material.setUberOptions(uniforms);\r\n };\r\n}\r\n\r\nfunction _createInstancedCylinders(useZSprites, openEnded) {\r\n function Geometry(a, b) {\r\n return new geometries.Instanced2CCylindersGeometry(a, b, useZSprites, openEnded);\r\n }\r\n return {\r\n Geometry,\r\n Object: useZSprites ? meshes.ZSprite : meshes.Instanced,\r\n initMaterial: setMatParams({\r\n instancedMatrix: true,\r\n attrColor: true,\r\n attrColor2: true,\r\n attrAlphaColor: true,\r\n cylinderSprite: useZSprites,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createLineSegmentsGeoTriplet(geo, renderParams) {\r\n const thickLines = geo.prototype instanceof ThickLinesGeometry;\r\n const lineWidth = renderParams.lineWidth || 0;\r\n return {\r\n Geometry: geo,\r\n Object: thickLines ? meshes.ThickLineMesh : meshes.LineSegments,\r\n initMaterial: setMatParams({\r\n lights: false,\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n thickLine: thickLines,\r\n }, {\r\n lineWidth,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createSimpleGeoTriplet(geoClass) {\r\n return {\r\n Geometry: geoClass,\r\n Object: meshes.Mesh,\r\n initMaterial: setMatParams({\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n }),\r\n };\r\n}\r\n\r\nfunction _createIsoSurfaceGeoTriplet(geoClass, caps, settings, renderParams) {\r\n const surfaceOpts = {\r\n wireframe: !!renderParams.wireframe,\r\n fakeOpacity: settings.now.isoSurfaceFakeOpacity,\r\n zClip: renderParams.zClip,\r\n };\r\n return {\r\n Geometry: geoClass,\r\n Object: meshes.ZClipped,\r\n initMaterial: setMatParams({\r\n attrColor: true,\r\n attrAlphaColor: false,\r\n wireframe: surfaceOpts.wireframe,\r\n fakeOpacity: surfaceOpts.fakeOpacity,\r\n zClip: surfaceOpts.zClip,\r\n }),\r\n };\r\n}\r\n\r\nclass MeshCreator {\r\n static createSpheres(caps, settings) {\r\n const useZSprites = settings.now.zSprites;\r\n function Geometry(a, b) {\r\n return new geometries.InstancedSpheresGeometry(a, b, useZSprites);\r\n }\r\n return {\r\n Geometry,\r\n Object: useZSprites ? meshes.ZSprite : meshes.Instanced,\r\n initMaterial: setMatParams({\r\n instancedPos: true,\r\n attrColor: true,\r\n attrAlphaColor: true,\r\n sphereSprite: useZSprites,\r\n }),\r\n };\r\n }\r\n\r\n static create2CClosedCylinders(_caps, _settings) {\r\n return _createInstancedCylinders(false, false);\r\n }\r\n\r\n static create2CCylinders(caps, settings) {\r\n return _createInstancedCylinders(settings.now.zSprites, true);\r\n }\r\n\r\n static create2CLines(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.TwoColorLinesGeometry, renderParams);\r\n }\r\n\r\n static createCrosses(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.CrossGeometry, renderParams);\r\n }\r\n\r\n static createExtrudedChains(_caps, _settings) {\r\n return _createSimpleGeoTriplet(geometries.ExtrudedObjectsGeometry);\r\n }\r\n\r\n static createChunkedLines(_caps, _settings, renderParams) {\r\n return _createLineSegmentsGeoTriplet(geometries.ChunkedLinesGeometry, renderParams);\r\n }\r\n\r\n static createQuickSurface(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.QuickSurfGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createContactSurface(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.ContactSurfaceGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createSASSES(caps, settings, renderParams) {\r\n return _createIsoSurfaceGeoTriplet(geometries.SSIsosurfaceGeometry, caps, settings, renderParams);\r\n }\r\n\r\n static createLabels(_caps, _settings) {\r\n return {\r\n Geometry: geometries.LabelsGeometry,\r\n Object: meshes.Text,\r\n initMaterial() {\r\n },\r\n };\r\n }\r\n}\r\n\r\nexport default MeshCreator;\r\n","import * as THREE from 'three';\r\nimport gfxutils from '../gfxutils';\r\n\r\nclass TransformGroup extends THREE.Object3D {\r\n static _inverseMatrix = new THREE.Matrix4();\r\n\r\n static _ray = new THREE.Ray();\r\n\r\n constructor(geometry, geoParams, material, transforms) {\r\n super();\r\n this._geometry = geometry;\r\n this._geoParams = geoParams;\r\n const mat = material.createInstance();\r\n geoParams.initMaterial(mat);\r\n this._material = mat;\r\n this._transforms = transforms.length > 0 ? transforms : [new THREE.Matrix4()];\r\n const meshes = this._createMeshes(geometry);\r\n for (let i = 0, n = meshes.length; i < n; ++i) {\r\n this.add(meshes[i]);\r\n }\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const ray = TransformGroup._ray;\r\n const inverseMatrix = TransformGroup._inverseMatrix;\r\n const { children } = this;\r\n ray.copy(raycaster.ray);\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n\r\n if (!gfxutils.belongToSelectLayers(child)) {\r\n continue;\r\n }\r\n\r\n child.updateMatrixWorld();\r\n const mtx = child.matrixWorld;\r\n inverseMatrix.copy(mtx).invert();\r\n raycaster.ray.copy(ray).applyMatrix4(inverseMatrix);\r\n const childIntersects = [];\r\n this._geometry.raycast(raycaster, childIntersects);\r\n\r\n for (let j = 0, ciCount = childIntersects.length; j < ciCount; ++j) {\r\n const inters = childIntersects[j];\r\n if (inters.point) {\r\n inters.point.applyMatrix4(mtx);\r\n inters.distance = ray.origin.distanceTo(inters.point);\r\n }\r\n inters.object = child;\r\n intersects[intersects.length] = inters;\r\n }\r\n }\r\n raycaster.ray.copy(ray);\r\n }\r\n\r\n getSubset(chunkIndices) {\r\n const geos = this._geometry.getSubset(chunkIndices);\r\n const subset = [];\r\n let subIdx = 0;\r\n\r\n for (let i = 0, n = geos.length; i < n; ++i) {\r\n const meshes = this._createMeshes(geos[i]);\r\n for (let j = 0, meshCnt = meshes.length; j < meshCnt; ++j) {\r\n subset[subIdx++] = meshes[j];\r\n }\r\n }\r\n\r\n return subset;\r\n }\r\n\r\n _createMeshes(geometry) {\r\n const transforms = this._transforms;\r\n const Mesh = this._geoParams.Object;\r\n const material = this._material;\r\n const meshes = [];\r\n for (let i = 0, n = transforms.length; i < n; ++i) {\r\n const mesh = new Mesh(geometry, material);\r\n mesh.applyMatrix4(transforms[i]);\r\n meshes[i] = mesh;\r\n }\r\n\r\n return meshes;\r\n }\r\n}\r\n\r\nexport default TransformGroup;\r\n","import RCGroup from '../../RCGroup';\r\nimport TransformGroup from '../../meshes/TransformGroup';\r\n\r\nfunction wrapper(Name, args) {\r\n const params = [Name].concat(args);\r\n return Name.bind(...params);\r\n}\r\n\r\nclass ChemGroup extends RCGroup {\r\n constructor(geoParams, selection, colorer, mode, transforms, polyComplexity, material) {\r\n super();\r\n if (this.constructor === ChemGroup) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n this._selection = selection;\r\n this._mode = mode;\r\n this._colorer = colorer;\r\n this._chunksIdc = selection.chunks;\r\n this._polyComplexity = polyComplexity;\r\n this._geo = new (wrapper(geoParams.Geometry, this._makeGeoArgs()))();\r\n this._mesh = new TransformGroup(this._geo, geoParams, material, transforms);\r\n this.add(this._mesh);\r\n this._build();\r\n }\r\n\r\n _makeGeoArgs() {\r\n throw new Error('ChemGroup subclass must override _makeGeoArgs() method');\r\n }\r\n\r\n /**\r\n * Builds subset geometry by ATOMS index list\r\n *\r\n * @param {Number} mask - Representation mask\r\n * @param {Boolean} innerOnly - if true returns inner bonds only - without halves\r\n * @returns {Array} Subset geometry\r\n */\r\n getSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : false;\r\n const chunksList = this._calcChunksList(mask, innerOnly);\r\n if (chunksList.length === 0) {\r\n return [];\r\n }\r\n return this._mesh.getSubset(chunksList);\r\n }\r\n\r\n _changeSubsetOpacity(mask, value, innerOnly) {\r\n const chunksList = this._calcChunksList(mask, innerOnly);\r\n if (chunksList.length === 0) {\r\n return;\r\n }\r\n this._geo.setOpacity(chunksList, value);\r\n }\r\n\r\n enableSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : true;\r\n this._changeSubsetOpacity(mask, 1.0, innerOnly);\r\n }\r\n\r\n disableSubset(mask, innerOnly) {\r\n innerOnly = innerOnly !== undefined ? innerOnly : true;\r\n this._changeSubsetOpacity(mask, 0.0, innerOnly);\r\n }\r\n}\r\n\r\nexport default ChemGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass AtomsGroup extends ChemGroup {\r\n raycast(raycaster, intersects) {\r\n const { atoms } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const atomsIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const atomIdx = atomsIdc[inters[i].chunkIdx];\r\n if (atomIdx < atoms.length) {\r\n inters[i].atom = atoms[atomIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const { atoms } = this._selection;\r\n const atomsIdc = this._chunksIdc;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n if ((atom.mask & mask) !== 0) {\r\n chunksList.push(i);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default AtomsGroup;\r\n","import AtomsGroup from './AtomsGroup';\r\n\r\nclass AtomsSphereGroup extends AtomsGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length, this._polyComplexity];\r\n }\r\n\r\n _build() {\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n geo.setItem(i, atom.position, mode.calcAtomRadius(atom));\r\n geo.setColor(i, colorer.getAtomColor(atom, parent));\r\n }\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n geo.setItem(i, frameData.getAtomPos(atomsIdc[i]), mode.calcAtomRadius(atom));\r\n if (updateColor) {\r\n geo.setColor(i, frameData.getAtomColor(colorer, atom));\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default AtomsSphereGroup;\r\n","import AtomsSphereGroup from './AtomsSphereGroup';\r\n\r\nclass AtomsSurfaceGroup extends AtomsSphereGroup {\r\n _makeGeoArgs() {\r\n const selectedAtoms = [];\r\n const { atoms, chunks } = this._selection;\r\n const n = chunks.length;\r\n for (let i = 0; i < n; ++i) {\r\n selectedAtoms[i] = atoms[chunks[i]];\r\n }\r\n const opts = this._mode.getSurfaceOpts();\r\n opts.atoms = selectedAtoms;\r\n return [n, opts];\r\n }\r\n}\r\nexport default AtomsSurfaceGroup;\r\n","/* This is a stub class keep it until SAS/SES is refactored */\r\n\r\nimport AtomsSphereGroup from './AtomsSphereGroup';\r\n\r\nclass AtomsSASSESGroupStub extends AtomsSphereGroup {\r\n _makeGeoArgs() {\r\n const selectedAtoms = [];\r\n const { atoms, chunks } = this._selection;\r\n const n = chunks.length;\r\n for (let i = 0; i < n; ++i) {\r\n selectedAtoms[i] = atoms[chunks[i]];\r\n }\r\n const opts = this._mode.getSurfaceOpts();\r\n opts.atoms = selectedAtoms;\r\n opts.selection = this._selection;\r\n opts.colorMode = this._colorer;\r\n return [n, opts];\r\n }\r\n}\r\n\r\nexport default AtomsSASSESGroupStub;\r\n","import AtomsGroup from './AtomsGroup';\r\nimport utils from '../../../utils';\r\n\r\nfunction adjustColor(color) {\r\n let r = (color >> 16) & 255;\r\n let g = (color >> 8) & 255;\r\n let b = color & 255;\r\n\r\n if (0.2126 * r + 0.7152 * g + 0.0722 * b > 127) {\r\n r = r * 3 / 10;\r\n g = g * 3 / 10;\r\n b = b * 3 / 10;\r\n } else {\r\n r = 255 - ((255 - r) * 3 / 10);\r\n g = 255 - ((255 - g) * 3 / 10);\r\n b = 255 - ((255 - b) * 3 / 10);\r\n }\r\n\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\nfunction inverseColor(color) {\r\n const r = (color >> 16) & 255;\r\n const g = (color >> 8) & 255;\r\n const b = color & 255;\r\n\r\n return ((255 - r) << 16) | ((255 - g) << 8) | (255 - b);\r\n}\r\n\r\nfunction getAtomText(atom) {\r\n if (atom.name.getNode() !== null) {\r\n return atom.name.getNode();\r\n }\r\n\r\n return atom.getVisualName();\r\n}\r\n\r\nconst colorMappings = {\r\n none(c) {\r\n return c;\r\n },\r\n adjust: adjustColor,\r\n inverse: inverseColor,\r\n};\r\n\r\nfunction propagateColor(color, rule) {\r\n let result;\r\n if (colorMappings.hasOwnProperty(rule)) {\r\n result = utils.hexColor(colorMappings[rule](color));\r\n } else {\r\n const val = parseInt(rule, 16);\r\n if (!Number.isNaN(val) && rule.toLowerCase().startsWith('0x')) {\r\n result = utils.hexColor(val);\r\n } else {\r\n result = '#000000';\r\n }\r\n }\r\n return result;\r\n}\r\n\r\nconst templateMappings = {\r\n serial(a) {\r\n return a.serial;\r\n },\r\n name(a) {\r\n return a.getVisualName();\r\n },\r\n elem(a) {\r\n return a.element.name;\r\n },\r\n residue(a) {\r\n return a.residue.getType().getName();\r\n },\r\n sequence(a) {\r\n return a.residue.getSequence();\r\n },\r\n chain(a) {\r\n return a.residue.getChain().getName();\r\n },\r\n hetatm(a) {\r\n return a.isHet();\r\n },\r\n water(a) {\r\n return a.residue.getType().getName() === 'HOH' || a.residue.getType().getName() === 'WAT';\r\n },\r\n};\r\n\r\nconst parseTemplate = function (atom, str) {\r\n return str.replace(/\\{\\{(\\s*\\w+\\s*)\\}\\}/g, (m) => {\r\n let key = m.replace(/\\s+/g, '');\r\n key = key.substring(2, key.length - 2).toLowerCase();\r\n\r\n if (templateMappings.hasOwnProperty(key)) {\r\n return templateMappings[key](atom);\r\n }\r\n return 'null';\r\n });\r\n};\r\n\r\nclass AtomsTextGroup extends AtomsGroup {\r\n _makeGeoArgs() {\r\n const opts = this._mode.getLabelOpts();\r\n return [this._selection.chunks.length, opts];\r\n }\r\n\r\n _build() {\r\n const opts = this._mode.getLabelOpts();\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms, parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n const text = opts.template ? parseTemplate(atom, opts.template) : getAtomText(atom);\r\n if (!text) {\r\n continue;\r\n }\r\n const color = colorer.getAtomColor(atom, parent);\r\n const fgColor = parseInt(propagateColor(color, opts.fg).substring(1), 16);\r\n const bgColor = opts.showBg ? parseInt(propagateColor(color, opts.bg).substring(1), 16) : 'transparent';\r\n geo.setItem(i, atom.position, text);\r\n geo.setColor(i, fgColor, bgColor);\r\n }\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const opts = this._mode.getLabelOpts();\r\n const atomsIdc = this._selection.chunks;\r\n const { atoms } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = atomsIdc.length; i < n; ++i) {\r\n const atom = atoms[atomsIdc[i]];\r\n const text = opts.template ? parseTemplate(atom, opts.template) : getAtomText(atom);\r\n if (!text) {\r\n continue;\r\n }\r\n const color = frameData.getAtomColor(colorer, atom);\r\n const fgColor = parseInt(propagateColor(color, opts.fg).substring(1), 16);\r\n const bgColor = opts.showBg ? parseInt(propagateColor(color, opts.bg).substring(1), 16) : 'transparent';\r\n geo.setItem(i, frameData.getAtomPos(atomsIdc[i]), text);\r\n if (updateColor) {\r\n geo.setColor(i, fgColor, bgColor);\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default AtomsTextGroup;\r\n","import * as THREE from 'three';\r\nimport AtomsGroup from './AtomsGroup';\r\n\r\nfunction _slerp(omega, v1, v2, t) {\r\n const oSin = Math.sin(omega);\r\n return v1.clone().multiplyScalar(Math.sin((1 - t) * omega) / oSin).addScaledVector(v2, Math.sin(t * omega) / oSin);\r\n}\r\n\r\nclass AromaticGroup extends AtomsGroup {\r\n _buildInner(radOffset, addChunk) {\r\n const chunksToIdx = this._selection.chunks;\r\n\r\n const prevVector = new THREE.Vector3();\r\n const currVector = new THREE.Vector3();\r\n const segmentsHeight = this._segmentsHeight;\r\n const leprStep = 1.0 / segmentsHeight;\r\n const colorer = this._colorer;\r\n\r\n const { cycles, parent } = this._selection;\r\n let chunkIdx = 0;\r\n let currAtomIdx = chunksToIdx[chunkIdx];\r\n\r\n for (let cIdx = 0, cCount = cycles.length; cIdx < cCount; ++cIdx) {\r\n const cycle = cycles[cIdx];\r\n const cycAtoms = cycle.atoms;\r\n const chunkPoints = [];\r\n const tmpDir = [];\r\n const { center } = cycle;\r\n const cycleRad = cycle.radius - radOffset;\r\n const n = cycAtoms.length;\r\n let i = 0;\r\n const prevPos = cycAtoms[n - 1].position;\r\n let currPos = cycAtoms[i].position;\r\n prevVector.subVectors(prevPos, center);\r\n currVector.subVectors(currPos, center);\r\n const upDir = currVector.clone().cross(prevVector).normalize();\r\n\r\n for (; i < n; ++i) {\r\n const omega = prevVector.angleTo(currVector);\r\n tmpDir[i] = _slerp(omega, prevVector, currVector, 0.5).normalize();\r\n currPos = cycAtoms[(i + 1) % n].position;\r\n prevVector.copy(currVector);\r\n currVector.subVectors(currPos, center);\r\n }\r\n\r\n for (i = 0; i < n; ++i) {\r\n if (cycAtoms[i].index !== currAtomIdx) {\r\n continue;\r\n }\r\n const start = tmpDir[i];\r\n const end = tmpDir[(i + 1) % n];\r\n const color = colorer.getAtomColor(cycAtoms[i], parent);\r\n const currAngle = start.angleTo(end);\r\n\r\n for (let j = 0; j <= segmentsHeight; ++j) {\r\n chunkPoints[j] = _slerp(currAngle, start, end, j * leprStep).multiplyScalar(cycleRad).add(center);\r\n }\r\n\r\n addChunk(chunkIdx++, color, chunkPoints, center, upDir);\r\n currAtomIdx = chunksToIdx[chunkIdx];\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default AromaticGroup;\r\n","import * as THREE from 'three';\r\nimport gfxutils from '../../gfxutils';\r\nimport AromaticGroup from './AromaticGroup';\r\n\r\nfunction _createShape(rad, parts) {\r\n const pts = [];\r\n for (let i = 0; i < parts; ++i) {\r\n const a = -2 * i / parts * Math.PI;\r\n pts.push(new THREE.Vector3(Math.cos(a) * rad, Math.sin(a) * rad, 0));\r\n }\r\n return pts;\r\n}\r\nconst { calcChunkMatrix } = gfxutils;\r\n\r\nclass AromaticTorusGroup extends AromaticGroup {\r\n _build() {\r\n const segmentsHeight = this._segmentsHeight;\r\n const torusRad = this._mode.getAromRadius();\r\n const radiusV = new THREE.Vector2(torusRad, torusRad);\r\n const radOffset = this._mode.calcStickRadius() + 2 * torusRad;\r\n const lookAtVector = new THREE.Vector3();\r\n const mtc = [];\r\n const geo = this._geo;\r\n this._buildInner(radOffset, (chunkIdx, color, points, center, upDir) => {\r\n for (let j = 0; j <= segmentsHeight; ++j) {\r\n const currPoint = points[j];\r\n const currDir = currPoint.clone().sub(center).cross(upDir);\r\n lookAtVector.addVectors(currPoint, currDir);\r\n mtc[j] = calcChunkMatrix(currPoint, lookAtVector, upDir, radiusV);\r\n }\r\n geo.setItem(chunkIdx, mtc);\r\n geo.setColor(chunkIdx, color);\r\n });\r\n geo.finalize();\r\n }\r\n\r\n _makeGeoArgs() {\r\n this._segmentsHeight = this._polyComplexity;\r\n return [_createShape(1.0, this._polyComplexity), this._segmentsHeight + 1, this._selection.chunks.length];\r\n }\r\n}\r\n\r\nexport default AromaticTorusGroup;\r\n","import AromaticGroup from './AromaticGroup';\r\n\r\nclass AromaticLinesGroup extends AromaticGroup {\r\n _build() {\r\n const geo = this._geo;\r\n const radOffset = this._mode.getAromaticOffset();\r\n this._buildInner(radOffset, (chunkIdx, color, points) => {\r\n let prevPt = points[0];// do not replace with start\r\n for (let j = 1; j <= this._segmentsHeight; ++j) {\r\n const currPoint = points[j];\r\n geo.setSegment(chunkIdx, j - 1, prevPt, currPoint);\r\n prevPt = currPoint;\r\n }\r\n geo.setColor(chunkIdx, color);\r\n });\r\n geo.finalize();\r\n }\r\n\r\n _makeGeoArgs() {\r\n this._segmentsHeight = this._mode.getAromaticArcChunks();\r\n return [this._selection.chunks.length, this._segmentsHeight, true];\r\n }\r\n}\r\n\r\nexport default AromaticLinesGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass ResiduesGroup extends ChemGroup {\r\n raycast(raycaster, intersects) {\r\n const { residues } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const resIdx = chunksIdc[inters[i].chunkIdx];\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const { residues } = this._selection;\r\n const resIdc = this._chunksIdc;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n if ((res._mask & mask) !== 0) {\r\n chunksList.push(i);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default ResiduesGroup;\r\n","import ResiduesGroup from './ResiduesGroup';\r\n\r\nclass NucleicItemGroup extends ResiduesGroup {\r\n raycast(raycaster, intersects) {\r\n const { residues } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const resIdx = chunksIdc[Math.floor(inters[i].chunkIdx / 2)];\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const stickRad = this._mode.calcStickRadius();\r\n let chunkIdx = 0;\r\n\r\n const resIdc = this._selection.chunks;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n const color = colorer.getResidueColor(res, parent);\r\n this._processItem(chunkIdx++, res._cylinders[0], res._cylinders[1], stickRad, color);\r\n }\r\n geo.finalize();\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n let chunkIdx = 0;\r\n const { residues } = this._selection;\r\n const resIdc = this._chunksIdc;\r\n\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n if ((res._mask & mask) !== 0) {\r\n chunksList[chunkIdx++] = 2 * i;\r\n chunksList[chunkIdx++] = 2 * i + 1;\r\n }\r\n }\r\n return chunksList;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const residues = frameData.getResidues();\r\n const { parent } = this._selection;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const stickRad = this._mode.calcStickRadius();\r\n let chunkIdx = 0;\r\n\r\n const resIdc = this._selection.chunks;\r\n for (let i = 0, n = resIdc.length; i < n; ++i) {\r\n const res = residues[resIdc[i]];\r\n const color = colorer.getResidueColor(res, parent);\r\n this._processItem(chunkIdx++, res._cylinders[0], res._cylinders[1], stickRad, color);\r\n }\r\n geo.finishUpdate();\r\n }\r\n}\r\n\r\nexport default NucleicItemGroup;\r\n","import NucleicItemGroup from './NucleicItemGroup';\r\n\r\nclass NucleicCylindersGroup extends NucleicItemGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length, this._polyComplexity];\r\n }\r\n\r\n _processItem(chunkIdx, cyl1, cyl2, stickRad, color) {\r\n const geo = this._geo;\r\n geo.setItem(chunkIdx, cyl1, cyl2, stickRad);\r\n geo.setColor(chunkIdx, color, color);\r\n }\r\n}\r\n\r\nexport default NucleicCylindersGroup;\r\n","import NucleicItemGroup from './NucleicItemGroup';\r\n\r\nclass NucleicSpheresGroup extends NucleicItemGroup {\r\n _makeGeoArgs() {\r\n return [this._selection.chunks.length * 2, this._polyComplexity];\r\n }\r\n\r\n _processItem(chunkIdx, cyl1, cyl2, stickRad, color) {\r\n const geo = this._geo;\r\n let idx = chunkIdx * 2;\r\n geo.setItem(idx, cyl1, stickRad);\r\n geo.setColor(idx, color);\r\n idx++;\r\n geo.setItem(idx, cyl2, stickRad);\r\n geo.setColor(idx, color);\r\n }\r\n}\r\n\r\nexport default NucleicSpheresGroup;\r\n","import * as THREE from 'three';\r\nimport { Smooth } from '../../../../vendor/js/Smooth';\r\nimport gfxutils from '../../gfxutils';\r\nimport chem from '../../../chem';\r\n\r\nconst { ResidueType } = chem;\r\n\r\nconst calcMatrix = gfxutils.calcChunkMatrix;\r\n\r\nfunction _buildStructureInterpolator(points, tension) {\r\n const path = Smooth(points, {\r\n method: Smooth.METHOD_CUBIC,\r\n clip: Smooth.CLIP_CLAMP,\r\n cubicTension: tension,\r\n scaleTo: 1,\r\n });\r\n\r\n return function (t, argTrans) {\r\n let transformT = argTrans;\r\n if (transformT === null) {\r\n // map our range to the [second .. last but one]\r\n transformT = function (tt) {\r\n return (tt * ((points.length - 1) - 2) + 1) / (points.length - 1);\r\n };\r\n }\r\n const newt = transformT(t);\r\n const ans = path(newt);\r\n return new THREE.Vector3(ans[0], ans[1], ans[2]);\r\n };\r\n}\r\n\r\nfunction _addPoints(centerPoints, topPoints, idx, residue) {\r\n if (!residue._isValid) {\r\n centerPoints[idx] = centerPoints[idx - 1];\r\n topPoints[idx] = topPoints[idx - 1];\r\n return;\r\n }\r\n const cp = residue._controlPoint;\r\n centerPoints[idx] = [cp.x, cp.y, cp.z];\r\n const tp = cp.clone().add(residue._wingVector);\r\n topPoints[idx] = [tp.x, tp.y, tp.z];\r\n}\r\n\r\nfunction _addPointsForLoneResidue(centerPoints, topPoints, idx, residue) {\r\n const nucleic = (residue._type.flags & ResidueType.Flags.NUCLEIC) !== 0;\r\n const nameFrom = nucleic ? 'C5\\'' : 'N';\r\n const nameTo = nucleic ? 'C3\\'' : 'C';\r\n\r\n let posFrom;\r\n let posTo;\r\n residue.forEachAtom((atom) => {\r\n const name = atom.getVisualName();\r\n if (!posFrom && name === nameFrom) {\r\n posFrom = atom.position;\r\n } else if (!posTo && name === nameTo) {\r\n posTo = atom.position;\r\n }\r\n });\r\n\r\n // provide a fallback for unknown residues\r\n if (!(posFrom && posTo)) {\r\n posFrom = residue._firstAtom.position;\r\n posTo = residue._lastAtom.position;\r\n }\r\n\r\n if (posFrom && posTo) {\r\n const shift = posTo.clone().sub(posFrom);\r\n\r\n const wing = residue._wingVector;\r\n const cp = residue._controlPoint;\r\n const tp = cp.clone().add(wing);\r\n\r\n const cpPrev = cp.clone().sub(shift);\r\n const tpPrev = cpPrev.clone().add(wing);\r\n centerPoints[idx] = [cpPrev.x, cpPrev.y, cpPrev.z];\r\n topPoints[idx] = [tpPrev.x, tpPrev.y, tpPrev.z];\r\n ++idx;\r\n centerPoints[idx] = [cpPrev.x, cpPrev.y, cpPrev.z];\r\n topPoints[idx] = [tpPrev.x, tpPrev.y, tpPrev.z];\r\n ++idx;\r\n\r\n centerPoints[idx] = [cp.x, cp.y, cp.z];\r\n topPoints[idx] = [tp.x, tp.y, tp.z];\r\n ++idx;\r\n\r\n const cpNext = cp.clone().add(shift);\r\n const tpNext = cpNext.clone().add(wing);\r\n centerPoints[idx] = [cpNext.x, cpNext.y, cpNext.z];\r\n topPoints[idx] = [tpNext.x, tpNext.y, tpNext.z];\r\n ++idx;\r\n centerPoints[idx] = [cpNext.x, cpNext.y, cpNext.z];\r\n topPoints[idx] = [tpNext.x, tpNext.y, tpNext.z];\r\n }\r\n}\r\n\r\nfunction _calcPoints(residues, firstIdx, lastIdx, boundaries) {\r\n const left = boundaries.start;\r\n const right = boundaries.end;\r\n function _prevIdx(idx) {\r\n return idx > left && residues[idx - 1]._isValid ? idx - 1 : idx;\r\n }\r\n function _nextIdx(idx) {\r\n return idx < right && residues[idx + 1]._isValid ? idx + 1 : idx;\r\n }\r\n\r\n const topPoints = [];\r\n const centerPoints = [];\r\n let arrIdx = 0;\r\n function _extrapolate2(currIdx, otherIdx) {\r\n const cp = residues[currIdx]._controlPoint.clone().lerp(residues[otherIdx]._controlPoint, -0.25);\r\n const tp = cp.clone().add(residues[currIdx]._wingVector);\r\n centerPoints[arrIdx] = [cp.x, cp.y, cp.z];\r\n topPoints[arrIdx++] = [tp.x, tp.y, tp.z];\r\n centerPoints[arrIdx] = [cp.x, cp.y, cp.z];\r\n topPoints[arrIdx++] = [tp.x, tp.y, tp.z];\r\n }\r\n\r\n // a single disconnected residue\r\n const prevIdx = _prevIdx(firstIdx);\r\n const nextIdx = _nextIdx(lastIdx);\r\n if (prevIdx === nextIdx) {\r\n _addPointsForLoneResidue(centerPoints, topPoints, arrIdx, residues[firstIdx]);\r\n return { centerPoints, topPoints };\r\n }\r\n\r\n // Two points (prev-prev and next-next) are added to support edge conditions for cubic splines, they are ignored\r\n // Another two (prev and next) were added to support the outside of the sub chain\r\n\r\n // prev and prev-prev\r\n if (firstIdx === prevIdx) {\r\n // do the extrapolation\r\n _extrapolate2(firstIdx, _nextIdx(firstIdx));\r\n } else {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[_prevIdx(prevIdx)]);\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[prevIdx]);\r\n }\r\n\r\n // main loop\r\n for (let idx = firstIdx; idx <= lastIdx; ++idx) {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[idx]);\r\n }\r\n\r\n // next and next-next\r\n if (nextIdx === _nextIdx(nextIdx)) {\r\n // do the extrapolation\r\n _extrapolate2(lastIdx, _prevIdx(lastIdx));\r\n } else {\r\n _addPoints(centerPoints, topPoints, arrIdx++, residues[nextIdx]);\r\n _addPoints(centerPoints, topPoints, arrIdx, residues[_nextIdx(nextIdx)]);\r\n }\r\n return { centerPoints, topPoints };\r\n}\r\n\r\nclass CartoonHelper {\r\n constructor(residues, startIdx, endIdx, segmentsCount, tension, boundaries) {\r\n const pointsArrays = _calcPoints(residues, startIdx, endIdx, boundaries);\r\n this._topInterp = _buildStructureInterpolator(pointsArrays.topPoints, tension);\r\n this._centerInterp = _buildStructureInterpolator(pointsArrays.centerPoints, tension);\r\n\r\n this._shift = 0.5 / (endIdx - startIdx + 2);\r\n this._valueStep = (1.0 - 2 * this._shift) / (2 * (endIdx - startIdx + 1) * (segmentsCount - 1));\r\n this._segmentsCount = segmentsCount;\r\n }\r\n\r\n prepareMatrices(idx, firstRad, secondRad) {\r\n const mtcCount = this._segmentsCount;\r\n const outMtc = new Array(mtcCount);\r\n const currRad = new THREE.Vector2(0, 0);\r\n\r\n const topInterp = this._topInterp;\r\n const cenInterp = this._centerInterp;\r\n\r\n let currentValue = this._shift + this._valueStep * (mtcCount - 1) * idx;\r\n\r\n for (let mtxIdx = 0; mtxIdx < mtcCount; ++mtxIdx) {\r\n const lerpVal = Math.min(1.0, mtxIdx / (mtcCount - 1));\r\n currRad.lerpVectors(firstRad, secondRad, lerpVal);\r\n\r\n const currTop = topInterp(currentValue, null);\r\n const currCenter = cenInterp(currentValue, null);\r\n currentValue += this._valueStep;\r\n const nextCenter = cenInterp(currentValue, null);\r\n\r\n outMtc[mtxIdx] = calcMatrix(currCenter.clone(), nextCenter.clone(), currTop.clone().sub(currCenter), currRad);\r\n }\r\n\r\n return outMtc;\r\n }\r\n}\r\n\r\nexport default CartoonHelper;\r\n","import * as THREE from 'three';\r\nimport ResiduesGroup from './ResiduesGroup';\r\nimport CartoonHelper from './CartoonHelper';\r\n\r\nfunction _createShape(rad, parts) {\r\n const pts = [];\r\n\r\n for (let i = 0; i < parts; ++i) {\r\n // starts from pi/2 because it's important that points are lied on the angles of arrows (visual issues if not)\r\n const a = Math.PI / 2.0 - 2 * Math.PI * i / parts;\r\n\r\n pts.push(new THREE.Vector3(Math.cos(a) * rad, Math.sin(a) * rad, 0));\r\n }\r\n return pts;\r\n}\r\n\r\nfunction _loopThrough(subDiv, residues, segmentsHeight, tension, mode, callback) {\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n const { boundaries } = subDiv[subDivI];\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const idc = [subs[i].start, subs[i].end];\r\n const matrixHelper = new CartoonHelper(residues, idc[0], idc[1], segmentsHeight, tension, boundaries);\r\n let prevLast = null;\r\n const startIdx = subs[i].start * 2;\r\n const endIdx = subs[i].end * 2 + 1;\r\n let prevSecondRad = mode.getResidueRadius(residues[0], 0);\r\n for (let idx = startIdx; idx <= endIdx; ++idx) {\r\n const resIdx = (idx / 2 | 0);\r\n const currRes = residues[resIdx];\r\n const firstRad = mode.getResidueRadius(currRes, idx % 2);\r\n const secondRad = mode.getResidueRadius(currRes, 1 + (idx % 2));\r\n\r\n const mtc = matrixHelper.prepareMatrices(idx - idc[0] * 2, firstRad, secondRad);\r\n mtc.unshift(prevLast === null ? mtc[0] : prevLast);\r\n\r\n // Slope - radius is changed along this residue part\r\n const hasSlope = (firstRad.x !== secondRad.x) || (firstRad.y !== secondRad.y);\r\n // Cut - end radius of previous part not equal to start radius of this part. First section of this part lies in the orthogonal plane\r\n const hasCut = (firstRad.x !== prevSecondRad.x) || (firstRad.y !== prevSecondRad.y);\r\n\r\n callback(currRes, mtc, hasSlope, hasCut);\r\n\r\n prevLast = mtc[segmentsHeight];\r\n prevSecondRad = secondRad;\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass ResiduesSubseqGroup extends ResiduesGroup {\r\n _makeGeoArgs() {\r\n const cmpMultiplier = this._mode.getHeightSegmentsRatio();\r\n this._segmentsHeight = this._polyComplexity * cmpMultiplier | 0;\r\n return [_createShape(1.0, this._polyComplexity), this._segmentsHeight + 1, this._selection.chunks.length * 2];\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const tension = mode.getTension();\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const chunkIdc = [];\r\n _loopThrough(this._selection.subdivs, residues, this._segmentsHeight, tension, mode, (currRes, mtc, hasSlope = false, hasCut = false) => {\r\n const color = colorer.getResidueColor(currRes, parent);\r\n chunkIdc[chunkIdx] = currRes._index;\r\n geo.setItem(chunkIdx, mtc, hasSlope, hasCut);\r\n geo.setColor(chunkIdx++, color);\r\n });\r\n this._chunksIdc = chunkIdc;\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const { parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const tension = mode.getTension();\r\n const geo = this._geo;\r\n const frameRes = frameData.getResidues();\r\n let chunkIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n _loopThrough(this._selection.subdivs, frameRes, this._segmentsHeight, tension, mode, (currRes, mtc) => {\r\n geo.setItem(chunkIdx, mtc);\r\n if (updateColor) {\r\n geo.setColor(chunkIdx, colorer.getResidueColor(currRes, parent));\r\n }\r\n chunkIdx++;\r\n });\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default ResiduesSubseqGroup;\r\n","import ChemGroup from './ChemGroup';\r\n\r\nclass ResiduesTraceGroup extends ChemGroup {\r\n _makeGeoArgs() {\r\n const subDiv = this._selection.subdivs;\r\n let chunksCount = 0;\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n chunksCount += subs[i].end - subs[i].start;\r\n }\r\n }\r\n return [chunksCount, this._polyComplexity];\r\n }\r\n\r\n _build() {\r\n const { residues, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const chunkIdc = [];\r\n const subDiv = this._selection.subdivs;\r\n const stickRad = mode.calcStickRadius();\r\n\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const startIdx = subs[i].start;\r\n const endIdx = subs[i].end;\r\n let prevRes = residues[startIdx];\r\n for (let idx = startIdx + 1; idx <= endIdx; ++idx) {\r\n const currRes = residues[idx];\r\n chunkIdc[chunkIdx] = { first: prevRes._index, second: currRes._index };\r\n geo.setItem(chunkIdx, prevRes._controlPoint, currRes._controlPoint, stickRad);\r\n geo.setColor(chunkIdx, colorer.getResidueColor(prevRes, parent), colorer.getResidueColor(currRes, parent));\r\n chunkIdx++;\r\n prevRes = currRes;\r\n }\r\n }\r\n }\r\n\r\n this._chunksIdc = chunkIdc;\r\n geo.finalize();\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n\r\n const residues = frameData.getResidues();\r\n const { parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n let chunkIdx = 0;\r\n const subDiv = this._selection.subdivs;\r\n const stickRad = mode.calcStickRadius();\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n\r\n for (let subDivI = 0, subDivN = subDiv.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDiv[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n const startIdx = subs[i].start;\r\n const endIdx = subs[i].end;\r\n let prevRes = residues[startIdx];\r\n for (let idx = startIdx + 1; idx <= endIdx; ++idx) {\r\n const currRes = residues[idx];\r\n geo.setItem(chunkIdx, prevRes._controlPoint, currRes._controlPoint, stickRad);\r\n if (updateColor) {\r\n geo.setColor(chunkIdx, colorer.getResidueColor(prevRes, parent), colorer.getResidueColor(currRes, parent));\r\n }\r\n chunkIdx++;\r\n prevRes = currRes;\r\n }\r\n }\r\n }\r\n\r\n geo.finalize();\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const inters = [];\r\n const { residues } = this._selection;\r\n this._mesh.raycast(raycaster, inters);\r\n const chunksToIdx = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const { chunkIdx } = inters[i];\r\n const chunk = chunksToIdx[Math.floor(chunkIdx / 2)];\r\n const resIdx = chunkIdx % 2 === 0 ? chunk.first : chunk.second;\r\n if (resIdx < residues.length) {\r\n inters[i].residue = residues[resIdx];\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask) {\r\n const chunksList = [];\r\n const chunksToIdx = this._chunksIdc;\r\n const { residues } = this._selection;\r\n for (let i = 0, n = chunksToIdx.length; i < n; ++i) {\r\n const chunk = chunksToIdx[i];\r\n if (residues[chunk.first]._mask & mask) {\r\n chunksList.push(i * 2);\r\n }\r\n if (residues[chunk.second]._mask & mask) {\r\n chunksList.push(i * 2 + 1);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default ResiduesTraceGroup;\r\n","import ChemGroup from './ChemGroup';\r\nimport Bond from '../../../chem/Bond';\r\n\r\nfunction getCylinderCount(bondOrder) {\r\n return bondOrder < 2 ? 1 : bondOrder;\r\n}\r\n\r\nclass BondsGroup extends ChemGroup {\r\n _makeGeoArgs() {\r\n const drawMultiple = this._mode.drawMultiorderBonds();\r\n const showAromatic = this._mode.showAromaticLoops();\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n let bondsCount = 0;\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n bondsCount += this.getBondOrder(bonds[bondsIdc[i]], drawMultiple, showAromatic);\r\n }\r\n return [bondsCount, this._polyComplexity];\r\n }\r\n\r\n getBondOrder(bond, drawMultiple, showAromatic) {\r\n let bondOrder = 1;\r\n if (drawMultiple && (!showAromatic || bond._type !== Bond.BondType.AROMATIC)) {\r\n bondOrder = getCylinderCount(bond._order);\r\n }\r\n return bondOrder;\r\n }\r\n\r\n raycast(raycaster, intersects) {\r\n const { bonds } = this._selection;\r\n const inters = [];\r\n this._mesh.raycast(raycaster, inters);\r\n const bondsIdc = this._chunksIdc;\r\n // process inters array - arr object references\r\n for (let i = 0, n = inters.length; i < n; ++i) {\r\n if (!inters[i].hasOwnProperty('chunkIdx')) {\r\n continue;\r\n }\r\n const { chunkIdx } = inters[i];\r\n const bondIdx = bondsIdc[Math.floor(chunkIdx / 2)];\r\n if (bondIdx < bonds.length) {\r\n const bond = bonds[bondIdx];\r\n inters[i].atom = chunkIdx % 2 === 0 ? bond._left : bond._right;\r\n intersects.push(inters[i]);\r\n }\r\n }\r\n }\r\n\r\n _calcChunksList(mask, innerOnly) {\r\n const chunksList = [];\r\n const { bonds } = this._selection;\r\n const chunksToIdx = this._chunksIdc;\r\n for (let i = 0, n = chunksToIdx.length; i < n; ++i) {\r\n const bond = bonds[chunksToIdx[i]];\r\n if ((bond._left.mask & mask) && (!innerOnly || (bond._right.mask & mask))) {\r\n chunksList.push(2 * i);\r\n }\r\n if ((bond._right.mask & mask) && (!innerOnly || (bond._left.mask & mask))) {\r\n chunksList.push(2 * i + 1);\r\n }\r\n }\r\n return chunksList;\r\n }\r\n}\r\n\r\nexport default BondsGroup;\r\n","import * as THREE from 'three';\r\nimport BondsGroup from './BondsGroup';\r\n\r\nclass BondsCylinderGroup extends BondsGroup {\r\n _build() {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const stickRad = mode.calcStickRadius();\r\n const emptyOffset = mode.calcSpaceFraction();\r\n let normDir;\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const chunksToIdx = [];\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = atom1.position;\r\n const a2Pos = atom2.position;\r\n normDir = bond.calcNormalDir();\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n const minRad = Math.min(mode.calcAtomRadius(atom1), mode.calcAtomRadius(atom2));\r\n const dist = 2 * minRad / order;\r\n const currStickRad = drawMultiple ? Math.min(stickRad, dist * 0.5 * (1.0 - emptyOffset)) : stickRad;\r\n\r\n for (let j = 0; j < order; ++j) {\r\n const scale = dist * (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n chunksToIdx[currBondIdx] = bond._index;\r\n leftPos.copy(a1Pos);\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.copy(a2Pos);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos, currStickRad);\r\n geo.setColor(currBondIdx++, colorer.getAtomColor(atom1, parent), colorer.getAtomColor(atom2, parent));\r\n }\r\n }\r\n\r\n geo.finalize();\r\n this._chunksIdc = chunksToIdx;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const stickRad = mode.calcStickRadius();\r\n const emptyOffset = mode.calcSpaceFraction();\r\n let normDir;\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = frameData.getAtomPos(atom1.index).clone();\r\n const a2Pos = frameData.getAtomPos(atom2.index);\r\n normDir = bond.calcNormalDir();\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n const minRad = Math.min(mode.calcAtomRadius(atom1), mode.calcAtomRadius(atom2));\r\n const dist = 2 * minRad / order;\r\n const currStickRad = drawMultiple ? Math.min(stickRad, dist * 0.5 * (1.0 - emptyOffset)) : stickRad;\r\n\r\n for (let j = 0; j < order; ++j) {\r\n const scale = dist * (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n leftPos.copy(a1Pos);\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.copy(a2Pos);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos, currStickRad);\r\n if (updateColor) {\r\n geo.setColor(currBondIdx, frameData.getAtomColor(colorer, atom1), frameData.getAtomColor(colorer, atom2));\r\n }\r\n currBondIdx++;\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default BondsCylinderGroup;\r\n","import * as THREE from 'three';\r\nimport BondsGroup from './BondsGroup';\r\n\r\nconst STEP_SIZE = 0.15;\r\n\r\nclass BondsLinesGroup extends BondsGroup {\r\n _build() {\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds, parent } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const bondDir = new THREE.Vector3();\r\n\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const chunksToIdx = [];\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = atom1.position;\r\n const a2Pos = atom2.position;\r\n const a1Hangs = atom1.bonds.length === 1;\r\n const a2Hangs = atom2.bonds.length === 1;\r\n bondDir.subVectors(a2Pos, a1Pos);\r\n const len = bondDir.length();\r\n const normDir = bond.calcNormalDir();\r\n\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n\r\n for (let j = 0; j < order; ++j) {\r\n leftPos.copy(a1Pos);\r\n rightPos.copy(a2Pos);\r\n let scale = (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n chunksToIdx[currBondIdx] = bond._index;\r\n if (order === 2 && (!a1Hangs && !a2Hangs)) {\r\n scale -= 0.5;\r\n scale *= -1;\r\n }\r\n\r\n if (!a1Hangs && !a2Hangs && order > 1 && scale !== 0) {\r\n leftPos.lerpVectors(a1Pos, a2Pos, STEP_SIZE / (len));\r\n rightPos.lerpVectors(a1Pos, a2Pos, 1.0 - STEP_SIZE / (len));\r\n }\r\n\r\n scale *= STEP_SIZE;\r\n\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos);\r\n geo.setColor(currBondIdx++, colorer.getAtomColor(atom1, parent), colorer.getAtomColor(atom2, parent));\r\n }\r\n }\r\n geo.finalize();\r\n this._chunksIdc = chunksToIdx;\r\n }\r\n\r\n updateToFrame(frameData) {\r\n // This method looks like a copy paste. However, it\r\n // was decided to postpone animation refactoring until GFX is fixed.\r\n const bondsIdc = this._selection.chunks;\r\n const { bonds } = this._selection;\r\n const mode = this._mode;\r\n const colorer = this._colorer;\r\n const geo = this._geo;\r\n const drawMultiple = mode.drawMultiorderBonds();\r\n const showAromatic = mode.showAromaticLoops();\r\n\r\n const bondDir = new THREE.Vector3();\r\n\r\n const leftPos = new THREE.Vector3();\r\n const rightPos = new THREE.Vector3();\r\n let currBondIdx = 0;\r\n const updateColor = frameData.needsColorUpdate(colorer);\r\n for (let i = 0, n = bondsIdc.length; i < n; ++i) {\r\n const bond = bonds[bondsIdc[i]];\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n const a1Pos = frameData.getAtomPos(atom1.index).clone();\r\n const a2Pos = frameData.getAtomPos(atom2.index);\r\n const a1Hangs = atom1.bonds.length === 1;\r\n const a2Hangs = atom2.bonds.length === 1;\r\n bondDir.subVectors(a2Pos, a1Pos);\r\n const len = bondDir.length();\r\n const normDir = bond.calcNormalDir();\r\n\r\n const order = this.getBondOrder(bond, drawMultiple, showAromatic);\r\n\r\n for (let j = 0; j < order; ++j) {\r\n leftPos.copy(a1Pos);\r\n rightPos.copy(a2Pos);\r\n let scale = (order % 2 === 0\r\n ? (((j / 2) | 0) + 0.5) * (1 - 2 * (j % 2))\r\n : (((j + 1) / 2) | 0) * (-1 + 2 * (j % 2)));\r\n if (order === 2 && (!a1Hangs && !a2Hangs)) {\r\n scale -= 0.5;\r\n scale *= -1;\r\n }\r\n\r\n if (!a1Hangs && !a2Hangs && order > 1 && scale !== 0) {\r\n leftPos.lerpVectors(a1Pos, a2Pos, STEP_SIZE / (len));\r\n rightPos.lerpVectors(a1Pos, a2Pos, 1.0 - STEP_SIZE / (len));\r\n }\r\n\r\n scale *= STEP_SIZE;\r\n\r\n leftPos.addScaledVector(normDir, scale);\r\n rightPos.addScaledVector(normDir, scale);\r\n geo.setItem(currBondIdx, leftPos, rightPos);\r\n if (updateColor) {\r\n geo.setColor(currBondIdx, frameData.getAtomColor(colorer, atom1), frameData.getAtomColor(colorer, atom2));\r\n }\r\n currBondIdx++;\r\n }\r\n }\r\n geo.finalize();\r\n }\r\n}\r\n\r\nexport default BondsLinesGroup;\r\n","import AtomsSphereGroup from './AtomsSphereGroup';\r\nimport AtomsSurfaceGroup from './AtomsSurfaceGroup';\r\nimport AtomsSASSESGroupStub from './AtomsSASSESGroupStub';\r\nimport AtomsTextGroup from './AtomsTextGroup';\r\nimport AromaticTorusGroup from './AromaticTorusGroup';\r\nimport AromaticLinesGroup from './AromaticLinesGroup';\r\nimport NucleicCylindersGroup from './NucleicCylindersGroup';\r\nimport NucleicSpheresGroup from './NucleicSpheresGroup';\r\nimport ResiduesSubseqGroup from './ResiduesSubseqGroup';\r\nimport ResiduesTraceGroup from './ResiduesTraceGroup';\r\nimport BondsCylinderGroup from './BondsCylinderGroup';\r\nimport BondsLinesGroup from './BondsLinesGroup';\r\n\r\nexport default {\r\n AtomsSphereGroup,\r\n AtomsSurfaceGroup,\r\n AtomsSASSESGroupStub,\r\n AtomsTextGroup,\r\n AromaticTorusGroup,\r\n AromaticLinesGroup,\r\n NucleicCylindersGroup,\r\n NucleicSpheresGroup,\r\n ResiduesSubseqGroup,\r\n ResiduesTraceGroup,\r\n BondsCylinderGroup,\r\n BondsLinesGroup,\r\n};\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass AtomsProcessor extends RCGroup {\r\n constructor(AtomsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n this._mode = mode;\r\n const atoms = complex.getAtoms();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const atomsIdc = [];\r\n let atomCount = 0;\r\n component.forEachAtom((atom) => {\r\n if (!self._checkAtom(atom, mask)) {\r\n return;\r\n }\r\n atomsIdc[atomCount++] = atom.index;\r\n });\r\n if (atomCount === 0) {\r\n return;\r\n }\r\n const atomsGroup = new AtomsGroup(geoParams, {\r\n atoms,\r\n chunks: atomsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n atomsGroup._component = component;\r\n self.add(atomsGroup);\r\n });\r\n }\r\n\r\n _checkAtom(atom, mask) {\r\n return atom.mask & mask;\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default AtomsProcessor;\r\n","import AtomsProcessor from './AtomsProcessor';\r\n\r\nclass OrphanAtomsProcessor extends AtomsProcessor {\r\n _checkAtom(atom, mask) {\r\n if (!(atom.mask & mask)) {\r\n return false;\r\n }\r\n\r\n const { bonds } = atom;\r\n for (let i = 0, n = bonds.length; i < n; ++i) {\r\n if ((bonds[i]._left.mask & mask) && (bonds[i]._right.mask & mask)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\nexport default OrphanAtomsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass ResiduesProcessor extends RCGroup {\r\n constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const residues = complex.getResidues();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n let chunksCount = 0;\r\n const resIdc = [];\r\n component.forEachResidue((residue) => {\r\n if (self._checkResidue(residue, mask)) {\r\n resIdc[chunksCount++] = residue._index;\r\n }\r\n });\r\n\r\n if (chunksCount === 0) {\r\n return;\r\n }\r\n const residuesGroup = new ResidueGroup(geoParams, {\r\n residues,\r\n chunks: resIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n residuesGroup._component = component;\r\n self.add(residuesGroup);\r\n });\r\n }\r\n\r\n checkResidue(residue, mask) {\r\n return residue._mask & mask;\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default ResiduesProcessor;\r\n","import ResidueProcessor from './ResiduesProcessor';\r\n\r\nclass NucleicProcessor extends ResidueProcessor {\r\n _checkResidue(residue, mask) {\r\n return mask & residue._mask && residue._cylinders !== null;\r\n }\r\n}\r\nexport default NucleicProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass SubseqsProcessor extends RCGroup {\r\n constructor(ResidueGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const residues = complex.getResidues();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const subDivs = component.getMaskedSubdivSequences(mask);\r\n\r\n let chunksCount = 0;\r\n const resIdc = [];\r\n for (let subDivI = 0, subDivN = subDivs.length; subDivI < subDivN; ++subDivI) {\r\n const subs = subDivs[subDivI].arr;\r\n for (let i = 0, n = subs.length; i < n; ++i) {\r\n for (let j = subs[i].start, jEnd = subs[i].end; j <= jEnd; ++j) {\r\n resIdc[chunksCount++] = residues[j]._index;\r\n }\r\n }\r\n }\r\n\r\n if (chunksCount === 0) {\r\n return;\r\n }\r\n const residuesGroup = new ResidueGroup(geoParams, {\r\n residues,\r\n chunks: resIdc,\r\n subdivs: subDivs,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n residuesGroup._component = component;\r\n self.add(residuesGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default SubseqsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass BondsProcessor extends RCGroup {\r\n constructor(BondsGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const bonds = complex.getBonds();\r\n const transforms = complex.getTransforms();\r\n\r\n complex.forEachComponent((component) => {\r\n const bondsIdc = [];\r\n let bondsCount = 0;\r\n component.forEachBond((bond) => {\r\n const atom1 = bond._left;\r\n const atom2 = bond._right;\r\n if (!(atom1.mask & mask) || !(atom2.mask & mask)) {\r\n return;\r\n }\r\n bondsIdc[bondsCount++] = bond._index;\r\n });\r\n if (bondsCount === 0) {\r\n return;\r\n }\r\n const bondsGroup = new BondsGroup(geoParams, {\r\n bonds,\r\n chunks: bondsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n bondsGroup._component = component;\r\n self.add(bondsGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default BondsProcessor;\r\n","import RCGroup from '../../RCGroup';\r\n\r\nclass AromaticProcessor extends RCGroup {\r\n constructor(AromaticGroup, geoParams, complex, colorer, mode, polyComplexity, mask, material) {\r\n super();\r\n const self = this;\r\n this._complex = complex;\r\n const atoms = complex.getAtoms();\r\n const transforms = complex.getTransforms();\r\n if (!mode.showAromaticLoops()) {\r\n return;\r\n }\r\n\r\n complex.forEachComponent((component) => {\r\n const atomsIdc = [];\r\n let chunksCount = 0;\r\n const cycles = [];\r\n let cycleIdx = 0;\r\n component.forEachCycle((cycle) => {\r\n const cycAtoms = cycle.atoms;\r\n let perCycle = 0;\r\n for (let i = 0, n = cycAtoms.length; i < n; ++i) {\r\n if ((cycAtoms[i].mask & mask) !== 0) {\r\n ++perCycle;\r\n atomsIdc[chunksCount++] = cycAtoms[i].index;\r\n }\r\n }\r\n if (perCycle > 0) {\r\n cycles[cycleIdx++] = cycle;\r\n }\r\n });\r\n\r\n const atomsGroup = new AromaticGroup(geoParams, {\r\n cycles,\r\n atoms,\r\n chunks: atomsIdc,\r\n parent: complex,\r\n }, colorer, mode, transforms, polyComplexity, material);\r\n atomsGroup._component = component;\r\n self.add(atomsGroup);\r\n });\r\n }\r\n\r\n getSubset(mask, innerOnly) {\r\n const totalSubset = [];\r\n const { children } = this;\r\n let meshIdx = 0;\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n if (children[i].getSubset) {\r\n const chSubset = children[i].getSubset(mask, innerOnly);\r\n for (let j = 0, m = chSubset.length; j < m; ++j) {\r\n const subsetEl = chSubset[j];\r\n subsetEl._component = children[i]._component;\r\n totalSubset[meshIdx++] = subsetEl;\r\n }\r\n }\r\n }\r\n return totalSubset;\r\n }\r\n}\r\n\r\nexport default AromaticProcessor;\r\n","import AtomsProcessor from './AtomsProcessor';\r\nimport OrphanAtomsProcessor from './OrphanAtomsProcessor';\r\nimport ResiduesProcessor from './ResiduesProcessor';\r\nimport NucleicProcessor from './NucleicProcessor';\r\nimport SubseqsProcessor from './SubseqsProcessor';\r\nimport BondsProcessor from './BondsProcessor';\r\nimport AromaticProcessor from './AromaticProcessor';\r\n\r\nexport default {\r\n Atoms: AtomsProcessor,\r\n OrphanAtoms: OrphanAtomsProcessor,\r\n Residues: ResiduesProcessor,\r\n Nucleic: NucleicProcessor,\r\n Subseqs: SubseqsProcessor,\r\n Bonds: BondsProcessor,\r\n Aromatic: AromaticProcessor,\r\n};\r\n","import MeshCreator from '../../meshes/MeshCreator';\r\nimport groups from './groups';\r\nimport processors from '../processors/processors';\r\n\r\nfunction _bakeGroup(triplet, Processor, Group) {\r\n return function (complex, colorer, mode, polyComplexity, mask, material) {\r\n return new Processor(Group, triplet, complex, colorer, mode, polyComplexity, mask, material);\r\n };\r\n}\r\n\r\nclass GroupsFactory {\r\n static AtomsSpheres(caps, settings) {\r\n const gfxTriplet = MeshCreator.createSpheres(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSphereGroup);\r\n }\r\n\r\n static OrphanedAtomsCrosses(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createCrosses(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.OrphanAtoms, groups.AtomsSphereGroup);\r\n }\r\n\r\n static BondsCylinders(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Bonds, groups.BondsCylinderGroup);\r\n }\r\n\r\n static BondsLines(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.create2CLines(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Bonds, groups.BondsLinesGroup);\r\n }\r\n\r\n static CartoonChains(caps, settings) {\r\n const gfxTriplet = MeshCreator.createExtrudedChains(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Subseqs, groups.ResiduesSubseqGroup);\r\n }\r\n\r\n static TraceChains(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CClosedCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Subseqs, groups.ResiduesTraceGroup);\r\n }\r\n\r\n static NucleicSpheres(caps, settings) {\r\n const gfxTriplet = MeshCreator.createSpheres(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Nucleic, groups.NucleicSpheresGroup);\r\n }\r\n\r\n static NucleicCylinders(caps, settings) {\r\n const gfxTriplet = MeshCreator.create2CCylinders(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Nucleic, groups.NucleicCylindersGroup);\r\n }\r\n\r\n static ALoopsTorus(caps, settings) {\r\n const gfxTriplet = MeshCreator.createExtrudedChains(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Aromatic, groups.AromaticTorusGroup);\r\n }\r\n\r\n static ALoopsLines(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createChunkedLines(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Aromatic, groups.AromaticLinesGroup);\r\n }\r\n\r\n static QuickSurfGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createQuickSurface(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSurfaceGroup);\r\n }\r\n\r\n static ContactSurfaceGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createContactSurface(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSurfaceGroup);\r\n }\r\n\r\n static SASSESSurfaceGeo(caps, settings, renderParams) {\r\n const gfxTriplet = MeshCreator.createSASSES(caps, settings, renderParams);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsSASSESGroupStub);\r\n }\r\n\r\n static TextLabelsGeo(caps, settings) {\r\n const gfxTriplet = MeshCreator.createLabels(caps, settings);\r\n\r\n return _bakeGroup(gfxTriplet, processors.Atoms, groups.AtomsTextGroup);\r\n }\r\n}\r\n\r\nexport default GroupsFactory;\r\n","import _ from 'lodash';\r\nimport makeContextDependent from '../../utils/makeContextDependent';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\nimport factory from './groups/GroupsFactory';\r\n\r\n/**\r\n * Create new mode.\r\n *\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the mode after its creation.\r\n *\r\n * @exports Mode\r\n * @this Mode\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all available modes used for building and displaying molecule geometry.\r\n */\r\nclass Mode {\r\n constructor(opts) {\r\n if (this.constructor === Mode) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Mode options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.opts = _.merge(utils.deriveDeep(this.settings.now.modes[this.id], true), opts);\r\n }\r\n\r\n /**\r\n * Get mode identification, probably with options.\r\n * @returns {string|Array} Mode identifier string ({@link Mode#id}) or two-element array containing both mode\r\n * identifier and options ({@link Mode#opts}).\r\n * Options are returned if they were changed during or after the mode creation.\r\n */\r\n identify() {\r\n const diff = utils.objectsDiff(this.opts, this.settings.now.modes[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n return [this.id, diff];\r\n }\r\n return this.id;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const polyComplexity = this.opts.polyComplexity ? this.opts.polyComplexity[this.settings.now.resolution] : 0;\r\n const groupList = this.depGroups;\r\n const groupCount = groupList.length;\r\n const group = new gfxutils.RCGroup();\r\n const self = this;\r\n for (let i = 0; i < groupCount; ++i) {\r\n let currGroup = groupList[i];\r\n let renderParams = {};\r\n if (_.isArray(currGroup)) {\r\n renderParams = currGroup[1].call(this);\r\n [currGroup] = currGroup;\r\n }\r\n const Group = factory[currGroup](null, this.settings, renderParams);\r\n const newGroup = new Group(complex, colorer, self, polyComplexity, mask, material);\r\n if (newGroup.children.length > 0) {\r\n group.add(newGroup);\r\n }\r\n }\r\n return group;\r\n }\r\n}\r\n\r\nmakeContextDependent(Mode.prototype);\r\n\r\n/**\r\n* Mode identifier.\r\n* @type {string}\r\n*/\r\nMode.prototype.id = '__';\r\n\r\n/**\r\n * Mode geo groups.\r\n * @type {Array}\r\n */\r\nMode.prototype.depGroups = [];\r\n\r\nexport default Mode;\r\n","import Mode from './Mode';\r\n\r\nfunction getRenderParams() {\r\n return {\r\n lineWidth: this.opts.lineWidth,\r\n };\r\n}\r\n\r\nclass LinesMode extends Mode {\r\n static id = 'LN';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n this.depGroups = this.depGroups.slice(0); // clone depGroups to prevent prototype edits\r\n const groups = this.depGroups;\r\n for (let i = 0, n = groups.length; i < n; ++i) {\r\n groups[i] = [groups[i], getRenderParams];\r\n }\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n\r\n calcAtomRadius() {\r\n return this.opts.atom;\r\n }\r\n\r\n getAromaticOffset() {\r\n return this.opts.offsarom;\r\n }\r\n\r\n getAromaticArcChunks() {\r\n return this.opts.chunkarom;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n}\r\n\r\nLinesMode.prototype.id = 'LN';\r\nLinesMode.prototype.name = 'Lines';\r\nLinesMode.prototype.shortName = 'Lines';\r\nLinesMode.prototype.depGroups = [\r\n 'ALoopsLines',\r\n 'BondsLines',\r\n 'OrphanedAtomsCrosses',\r\n];\r\n\r\nexport default LinesMode;\r\n","import Mode from './Mode';\r\n\r\nclass LicoriceMode extends Mode {\r\n static id = 'LC';\r\n\r\n calcAtomRadius(_atom) {\r\n return this.opts.bond;\r\n }\r\n\r\n calcStickRadius() {\r\n return this.opts.bond;\r\n }\r\n\r\n calcSpaceFraction() {\r\n return this.opts.space;\r\n }\r\n\r\n getAromRadius() {\r\n return this.opts.aromrad;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n}\r\n\r\nLicoriceMode.prototype.id = 'LC';\r\nLicoriceMode.prototype.name = 'Licorice';\r\nLicoriceMode.prototype.shortName = 'Licorice';\r\nLicoriceMode.prototype.depGroups = [\r\n 'AtomsSpheres',\r\n 'BondsCylinders',\r\n 'ALoopsTorus',\r\n];\r\n\r\nexport default LicoriceMode;\r\n","import Mode from './Mode';\r\n\r\nclass BallsAndSticksMode extends Mode {\r\n static id = 'BS';\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius * this.opts.atom;\r\n }\r\n\r\n calcStickRadius() {\r\n return this.opts.bond;\r\n }\r\n\r\n getAromRadius() {\r\n return this.opts.aromrad;\r\n }\r\n\r\n showAromaticLoops() {\r\n return this.opts.showarom;\r\n }\r\n\r\n calcSpaceFraction() {\r\n return this.opts.space;\r\n }\r\n\r\n drawMultiorderBonds() {\r\n return this.opts.multibond;\r\n }\r\n}\r\n\r\nBallsAndSticksMode.prototype.id = 'BS';\r\nBallsAndSticksMode.prototype.name = 'Balls and Sticks';\r\nBallsAndSticksMode.prototype.shortName = 'Balls';\r\nBallsAndSticksMode.prototype.depGroups = [\r\n 'AtomsSpheres',\r\n 'BondsCylinders',\r\n 'ALoopsTorus',\r\n];\r\n\r\nexport default BallsAndSticksMode;\r\n","import Mode from './Mode';\r\n\r\nclass VanDerWaalsMode extends Mode {\r\n static id = 'VW';\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n}\r\n\r\nVanDerWaalsMode.prototype.id = 'VW';\r\nVanDerWaalsMode.prototype.name = 'Van der Waals';\r\nVanDerWaalsMode.prototype.shortName = 'VDW';\r\nVanDerWaalsMode.prototype.depGroups = ['AtomsSpheres'];\r\n\r\nexport default VanDerWaalsMode;\r\n","import Mode from './Mode';\r\n\r\nclass TraceMode extends Mode {\r\n static id = 'TR';\r\n\r\n calcStickRadius() {\r\n return this.opts.radius;\r\n }\r\n}\r\n\r\nTraceMode.prototype.id = 'TR';\r\nTraceMode.prototype.name = 'Trace';\r\nTraceMode.prototype.shortName = 'Trace';\r\nTraceMode.prototype.depGroups = ['TraceChains'];\r\n\r\nexport default TraceMode;\r\n","import * as THREE from 'three';\r\nimport Mode from './Mode';\r\n\r\nclass TubeMode extends Mode {\r\n static id = 'TU';\r\n\r\n getResidueRadius(_residue) {\r\n return this.TUBE_RADIUS;\r\n }\r\n\r\n getHeightSegmentsRatio() {\r\n return this.opts.heightSegmentsRatio;\r\n }\r\n\r\n getTension() {\r\n return this.opts.tension;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const rad = this.opts.radius;\r\n this.TUBE_RADIUS = new THREE.Vector2(rad, rad);\r\n\r\n return Mode.prototype.buildGeometry.call(this, complex, colorer, mask, material);\r\n }\r\n}\r\n\r\nTubeMode.prototype.id = 'TU';\r\nTubeMode.prototype.name = 'Tube';\r\nTubeMode.prototype.shortName = 'Tube';\r\nTubeMode.prototype.depGroups = ['CartoonChains'];\r\n\r\nexport default TubeMode;\r\n","import * as THREE from 'three';\r\nimport Mode from './Mode';\r\n\r\nclass CartoonMode extends Mode {\r\n static id = 'CA';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n // cache for secondary structure options\r\n this.secCache = {};\r\n }\r\n\r\n getResidueStartRadius(residue) {\r\n const second = residue.getSecondary();\r\n if (!second || !second.generic) {\r\n return this.TUBE_RADIUS;\r\n }\r\n const secOpts = this.secCache[second.generic];\r\n if (!secOpts) {\r\n return this.TUBE_RADIUS;\r\n }\r\n if (second.term === residue) {\r\n return secOpts.start;\r\n }\r\n return secOpts.center;\r\n }\r\n\r\n getResidueEndRadius(residue) {\r\n const second = residue.getSecondary();\r\n if (second === null || !second.generic) {\r\n return this.TUBE_RADIUS;\r\n }\r\n const secOpts = this.secCache[second.generic];\r\n if (!secOpts) {\r\n return this.TUBE_RADIUS;\r\n }\r\n if (second.term === residue) {\r\n return this.ARROW_END;\r\n }\r\n return secOpts.center;\r\n }\r\n\r\n getResidueRadius(residue, val) {\r\n const startRad = this.getResidueStartRadius(residue);\r\n if (val === 0) {\r\n return startRad;\r\n }\r\n\r\n const endRad = this.getResidueEndRadius(residue);\r\n if (val === 2) {\r\n return endRad;\r\n }\r\n\r\n return startRad.clone().lerp(endRad, val / 2.0);\r\n }\r\n\r\n calcStickRadius(_res) {\r\n return this.opts.radius;\r\n }\r\n\r\n getHeightSegmentsRatio() {\r\n return this.opts.heightSegmentsRatio;\r\n }\r\n\r\n getTension() {\r\n return this.opts.tension;\r\n }\r\n\r\n buildGeometry(complex, colorer, mask, material) {\r\n const tubeRad = this.opts.radius;\r\n const secHeight = this.opts.depth;\r\n\r\n this.TUBE_RADIUS = new THREE.Vector2(tubeRad, tubeRad);\r\n this.ARROW_END = new THREE.Vector2(secHeight, tubeRad);\r\n const secCache = {};\r\n const secData = this.opts.ss;\r\n /* eslint-disable guard-for-in */\r\n for (const prop in secData) {\r\n secCache[prop] = {\r\n center: new THREE.Vector2(secHeight, secData[prop].width),\r\n start: new THREE.Vector2(secHeight, secData[prop].arrow),\r\n };\r\n }\r\n this.secCache = secCache;\r\n /* eslint-enable guard-for-in */\r\n\r\n return Mode.prototype.buildGeometry.call(this, complex, colorer, mask, material);\r\n }\r\n}\r\n\r\nCartoonMode.prototype.id = 'CA';\r\nCartoonMode.prototype.name = 'Cartoon';\r\nCartoonMode.prototype.shortName = 'Cartoon';\r\nCartoonMode.prototype.depGroups = [\r\n 'CartoonChains',\r\n 'NucleicSpheres',\r\n 'NucleicCylinders',\r\n];\r\n\r\nexport default CartoonMode;\r\n","import chem from '../../chem';\r\nimport Mode from './Mode';\r\n\r\nconst { selectors } = chem;\r\n\r\nfunction getRenderParams() {\r\n return {\r\n wireframe: this.opts.wireframe,\r\n zClip: this.opts.zClip,\r\n };\r\n}\r\n\r\nclass SurfaceMode extends Mode {\r\n constructor(opts) {\r\n super(opts);\r\n this.depGroups = this.depGroups.slice(0); // clone depGroups to prevent prototype edits\r\n const surfaces = this.surfaceNames;\r\n const groups = this.depGroups;\r\n for (let i = 0, n = surfaces.length; i < n; ++i) {\r\n groups[groups.length] = [surfaces[i], getRenderParams];\r\n }\r\n }\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n\r\n getVisibilitySelector() {\r\n let visibilitySelector = null;\r\n if (this.opts.subset !== '') {\r\n const res = selectors.parse(this.opts.subset);\r\n if (!res.error) {\r\n visibilitySelector = res.selector;\r\n }\r\n }\r\n return visibilitySelector;\r\n }\r\n}\r\n\r\nSurfaceMode.prototype.isSurface = true;\r\nSurfaceMode.prototype.surfaceNames = [];\r\n\r\nexport default SurfaceMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass QuickSurfaceMode extends SurfaceMode {\r\n static id = 'QS';\r\n\r\n getSurfaceOpts() {\r\n return {\r\n useBeads: false,\r\n isoValue: this.opts.isoValue,\r\n gaussLim: this.opts.gaussLim[this.settings.now.resolution],\r\n radScale: this.opts.scale,\r\n gridSpacing: this.opts.gridSpacing[this.settings.now.resolution],\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n };\r\n }\r\n}\r\n\r\nQuickSurfaceMode.prototype.id = 'QS';\r\nQuickSurfaceMode.prototype.name = 'Quick Surface';\r\nQuickSurfaceMode.prototype.shortName = 'Quick Surf';\r\nQuickSurfaceMode.prototype.surfaceNames = ['QuickSurfGeo'];\r\n\r\nexport default QuickSurfaceMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass IsoSurfaceMode extends SurfaceMode {\r\n constructor(excludeProbe, opts) {\r\n super(opts);\r\n this._excludeProbe = excludeProbe;\r\n }\r\n\r\n calcAtomRadius(atom) {\r\n return atom.element.radius;\r\n }\r\n\r\n getSurfaceOpts() {\r\n return {\r\n gridSpacing: this.opts.polyComplexity[this.settings.now.resolution],\r\n radScale: this._radScale,\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n probeRadius: this.opts.probeRadius,\r\n excludeProbe: this._excludeProbe,\r\n };\r\n }\r\n}\r\n\r\nIsoSurfaceMode.prototype.id = 'SU';\r\nIsoSurfaceMode.prototype.name = 'Surface';\r\nIsoSurfaceMode.prototype.shortName = 'Surface';\r\nIsoSurfaceMode.prototype.surfaceNames = ['SASSESSurfaceGeo'];\r\n\r\nIsoSurfaceMode.prototype._radScale = 1;\r\nIsoSurfaceMode.prototype._excludeProbe = false;\r\n\r\nexport default IsoSurfaceMode;\r\n","import IsoSurfaceMode from './IsoSurfaceMode';\r\n\r\nclass IsoSurfaceSASMode extends IsoSurfaceMode {\r\n static id = 'SA';\r\n\r\n constructor(opts) {\r\n super(false, opts);\r\n }\r\n}\r\n\r\nIsoSurfaceSASMode.prototype.id = 'SA';\r\nIsoSurfaceSASMode.prototype.name = 'Solvent Accessible Surface';\r\nIsoSurfaceSASMode.prototype.shortName = 'SAS';\r\n\r\nexport default IsoSurfaceSASMode;\r\n","import IsoSurfaceMode from './IsoSurfaceMode';\r\n\r\nclass IsoSurfaceSESMode extends IsoSurfaceMode {\r\n static id = 'SE';\r\n\r\n constructor(opts) {\r\n super(true, opts);\r\n }\r\n}\r\n\r\nIsoSurfaceSESMode.prototype.id = 'SE';\r\nIsoSurfaceSESMode.prototype.name = 'Solvent Excluded Surface';\r\nIsoSurfaceSESMode.prototype.shortName = 'SES';\r\n\r\nexport default IsoSurfaceSESMode;\r\n","import SurfaceMode from './SurfaceMode';\r\n\r\nclass ContactSurfaceMode extends SurfaceMode {\r\n static id = 'CS';\r\n\r\n getSurfaceOpts() {\r\n return {\r\n probeRadius: this.opts.probeRadius,\r\n radScale: this.opts.polyComplexity[this.settings.now.resolution],\r\n scaleFactor: this.opts.polyComplexity[this.settings.now.resolution],\r\n gridSpacing: 1.0 / this.opts.polyComplexity[this.settings.now.resolution],\r\n isoValue: this.opts.isoValue,\r\n probePositions: this.opts.probePositions,\r\n zClip: this.opts.zClip,\r\n visibilitySelector: this.getVisibilitySelector(),\r\n };\r\n }\r\n}\r\n\r\nContactSurfaceMode.prototype.id = 'CS';\r\nContactSurfaceMode.prototype.name = 'Contact Surface';\r\nContactSurfaceMode.prototype.shortName = 'Contact Surf';\r\nContactSurfaceMode.prototype.isSurface = true;\r\nContactSurfaceMode.prototype.surfaceNames = ['ContactSurfaceGeo'];\r\n\r\nexport default ContactSurfaceMode;\r\n","import _ from 'lodash';\r\nimport Mode from './Mode';\r\n\r\nclass TextMode extends Mode {\r\n static id = 'TX';\r\n\r\n getTemplateOptions() {\r\n return this.opts.template;\r\n }\r\n\r\n getLabelOpts() {\r\n return _.merge(this.opts, {\r\n colors: true,\r\n adjustColor: true,\r\n transparent: true,\r\n });\r\n }\r\n}\r\n\r\nTextMode.prototype.id = 'TX';\r\nTextMode.prototype.name = 'Text mode';\r\nTextMode.prototype.shortName = 'Text';\r\nTextMode.prototype.depGroups = ['TextLabelsGeo'];\r\n\r\nexport default TextMode;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport LinesMode from './modes/LinesMode';\r\nimport LicoriceMode from './modes/LicoriceMode';\r\nimport BallsAndSticksMode from './modes/BallsAndSticksMode';\r\nimport VanDerWaalsMode from './modes/VanDerWaalsMode';\r\nimport TraceMode from './modes/TraceMode';\r\nimport TubeMode from './modes/TubeMode';\r\nimport CartoonMode from './modes/CartoonMode';\r\nimport QuickSurfaceMode from './modes/QuickSurfaceMode';\r\nimport IsoSurfaceSASMode from './modes/IsoSurfaceSASMode';\r\nimport IsoSurfaceSESMode from './modes/IsoSurfaceSESMode';\r\nimport ContactSurfaceMode from './modes/ContactSurfaceMode';\r\nimport TextMode from './modes/TextMode';\r\n\r\nconst modes = new EntityList([\r\n LinesMode,\r\n LicoriceMode,\r\n BallsAndSticksMode,\r\n VanDerWaalsMode,\r\n TraceMode,\r\n TubeMode,\r\n CartoonMode,\r\n QuickSurfaceMode,\r\n IsoSurfaceSASMode,\r\n IsoSurfaceSESMode,\r\n ContactSurfaceMode,\r\n TextMode,\r\n]);\r\n\r\nexport default modes;\r\n","import _ from 'lodash';\r\n\r\nfunction clamp(x, a, b) {\r\n return x <= b ? x < 0 ? 0 : x : b;\r\n}\r\n\r\nfunction lerpColor(c1, c2, alpha) {\r\n const beta = 1 - alpha;\r\n const r1 = (c1 >> 16) & 0xff;\r\n const g1 = (c1 >> 8) & 0xff;\r\n const b1 = c1 & 0xff;\r\n const r2 = (c2 >> 16) & 0xff;\r\n const g2 = (c2 >> 8) & 0xff;\r\n const b2 = c2 & 0xff;\r\n const r = beta * r1 + alpha * r2;\r\n const g = beta * g1 + alpha * g2;\r\n const b = beta * b1 + alpha * b2;\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\nclass Palette {\r\n constructor(name, id) {\r\n this.name = name || 'Custom';\r\n this.id = id || 'CP';\r\n }\r\n\r\n getElementColor(name, asIs = false) {\r\n const color = this.elementColors[name];\r\n return color === undefined && !asIs ? this.defaultElementColor : color;\r\n }\r\n\r\n getResidueColor(name, asIs = false) {\r\n const color = this.residueColors[name];\r\n return color === undefined && !asIs ? this.defaultResidueColor : color;\r\n }\r\n\r\n getChainColor(name) {\r\n let chain = name.charCodeAt(0);\r\n chain = ((chain < 0 ? 0 : chain >= 256 ? chain - 256 : chain) & 0x1F)\r\n % this.chainColors.length;\r\n return this.chainColors[chain];\r\n }\r\n\r\n getSecondaryColor(type, asIs = false) {\r\n const color = this.secondaryColors[type];\r\n return color === undefined && !asIs ? this.defaultSecondaryColor : color;\r\n }\r\n\r\n getSequentialColor(index) {\r\n const { colors } = this;\r\n const len = colors.length;\r\n return index < 0 ? colors[(index % len) + len] : colors[index % len];\r\n }\r\n\r\n getGradientColor(value, gradientName) {\r\n const gradient = this.gradients[gradientName];\r\n if (!gradient) {\r\n return this.defaultNamedColor;\r\n }\r\n const count = gradient.length;\r\n const index = value * (count - 1);\r\n let left = Math.floor(index);\r\n const right = clamp(left + 1, 0, count - 1);\r\n left = clamp(left, 0, count - 1);\r\n return lerpColor(gradient[left], gradient[right], index - left);\r\n }\r\n\r\n getNamedColor(name, asIs = false) {\r\n const color = this.namedColors[name];\r\n return color === undefined && !asIs ? this.defaultNamedColor : color;\r\n }\r\n}\r\n\r\n_.assign(Palette.prototype, {\r\n colors: [0xFFFFFF, 0xFF0000, 0x00FF00, 0x0000FF, 0x808080],\r\n\r\n minRangeColor: 0x000000,\r\n midRangeColor: 0x7F7F7F,\r\n maxRangeColor: 0xFFFFFF,\r\n\r\n defaultElementColor: 0xFFFFFF,\r\n elementColors: {},\r\n\r\n defaultResidueColor: 0xFFFFFF,\r\n residueColors: {},\r\n\r\n chainColors: [0xFFFFFF],\r\n\r\n defaultSecondaryColor: 0xFFFFFF,\r\n secondaryColors: {},\r\n\r\n defaultGradientColor: 0x000000,\r\n\r\n defaultNamedColor: 0xFFFFFF,\r\n namedColorsArray: [\r\n /* eslint-disable no-multi-spaces */\r\n ['indianred', 0xcd5c5c],\r\n ['lightcoral', 0xf08080],\r\n ['salmon', 0xfa8072],\r\n ['darksalmon', 0xe9967a],\r\n ['lightsalmon', 0xffa07a],\r\n ['crimson', 0xdc143c],\r\n ['red', 0xff0000],\r\n ['firebrick', 0xb22222],\r\n ['darkred', 0x8b0000],\r\n ['pink', 0xffc0cb],\r\n ['lightpink', 0xffb6c1],\r\n ['hotpink', 0xff69b4],\r\n ['deeppink', 0xff1493],\r\n ['mediumvioletred', 0xc71585],\r\n ['palevioletred', 0xdb7093],\r\n ['coral', 0xff7f50],\r\n ['tomato', 0xff6347],\r\n ['orangered', 0xff4500],\r\n ['darkorange', 0xff8c00],\r\n ['orange', 0xffa500],\r\n ['gold', 0xffd700],\r\n ['yellow', 0xffff00],\r\n ['lightyellow', 0xffffe0],\r\n ['lemonchiffon', 0xfffacd],\r\n ['lightgoldenrodyellow', 0xfafad2],\r\n ['papayawhip', 0xffefd5],\r\n ['moccasin', 0xffe4b5],\r\n ['peachpuff', 0xffdab9],\r\n ['palegoldenrod', 0xeee8aa],\r\n ['khaki', 0xf0e68c],\r\n ['darkkhaki', 0xbdb76b],\r\n ['lavender', 0xe6e6fa],\r\n ['thistle', 0xd8bfd8],\r\n ['plum', 0xdda0dd],\r\n ['violet', 0xee82ee],\r\n ['orchid', 0xda70d6],\r\n ['fuchsia', 0xff00ff],\r\n ['magenta', 0xff00ff],\r\n ['mediumorchid', 0xba55d3],\r\n ['mediumpurple', 0x9370db],\r\n ['rebeccapurple', 0x663399],\r\n ['blueviolet', 0x8a2be2],\r\n ['darkviolet', 0x9400d3],\r\n ['darkorchid', 0x9932cc],\r\n ['darkmagenta', 0x8b008b],\r\n ['purple', 0x800080],\r\n ['indigo', 0x4b0082],\r\n ['slateblue', 0x6a5acd],\r\n ['mediumslateblue', 0x7b68ee],\r\n ['darkslateblue', 0x483d8b],\r\n ['greenyellow', 0xadff2f],\r\n ['chartreuse', 0x7fff00],\r\n ['lawngreen', 0x7cfc00],\r\n ['lime', 0x00ff00],\r\n ['limegreen', 0x32cd32],\r\n ['palegreen', 0x98fb98],\r\n ['lightgreen', 0x90ee90],\r\n ['mediumspringgreen', 0x00fa9a],\r\n ['springgreen', 0x00ff7f],\r\n ['mediumseagreen', 0x3cb371],\r\n ['seagreen', 0x2e8b57],\r\n ['forestgreen', 0x228b22],\r\n ['green', 0x008000],\r\n ['darkgreen', 0x006400],\r\n ['yellowgreen', 0x9acd32],\r\n ['olivedrab', 0x6b8e23],\r\n ['olive', 0x808000],\r\n ['darkolivegreen', 0x556b2f],\r\n ['mediumaquamarine', 0x66cdaa],\r\n ['darkseagreen', 0x8fbc8f],\r\n ['lightseagreen', 0x20b2aa],\r\n ['darkcyan', 0x008b8b],\r\n ['teal', 0x008080],\r\n ['aqua', 0x00ffff],\r\n ['cyan', 0x00ffff],\r\n ['lightcyan', 0xe0ffff],\r\n ['paleturquoise', 0xafeeee],\r\n ['aquamarine', 0x7fffd4],\r\n ['turquoise', 0x40e0d0],\r\n ['mediumturquoise', 0x48d1cc],\r\n ['darkturquoise', 0x00ced1],\r\n ['cadetblue', 0x5f9ea0],\r\n ['steelblue', 0x4682b4],\r\n ['lightsteelblue', 0xb0c4de],\r\n ['powderblue', 0xb0e0e6],\r\n ['lightblue', 0xadd8e6],\r\n ['skyblue', 0x87ceeb],\r\n ['lightskyblue', 0x87cefa],\r\n ['deepskyblue', 0x00bfff],\r\n ['dodgerblue', 0x1e90ff],\r\n ['cornflowerblue', 0x6495ed],\r\n ['royalblue', 0x4169e1],\r\n ['blue', 0x0000ff],\r\n ['mediumblue', 0x0000cd],\r\n ['darkblue', 0x00008b],\r\n ['navy', 0x000080],\r\n ['midnightblue', 0x191970],\r\n ['cornsilk', 0xfff8dc],\r\n ['blanchedalmond', 0xffebcd],\r\n ['bisque', 0xffe4c4],\r\n ['navajowhite', 0xffdead],\r\n ['wheat', 0xf5deb3],\r\n ['burlywood', 0xdeb887],\r\n ['tan', 0xd2b48c],\r\n ['rosybrown', 0xbc8f8f],\r\n ['sandybrown', 0xf4a460],\r\n ['goldenrod', 0xdaa520],\r\n ['darkgoldenrod', 0xb8860b],\r\n ['peru', 0xcd853f],\r\n ['chocolate', 0xd2691e],\r\n ['saddlebrown', 0x8b4513],\r\n ['sienna', 0xa0522d],\r\n ['brown', 0xa52a2a],\r\n ['maroon', 0x800000],\r\n ['white', 0xffffff],\r\n ['snow', 0xfffafa],\r\n ['honeydew', 0xf0fff0],\r\n ['mintcream', 0xf5fffa],\r\n ['azure', 0xf0ffff],\r\n ['aliceblue', 0xf0f8ff],\r\n ['ghostwhite', 0xf8f8ff],\r\n ['whitesmoke', 0xf5f5f5],\r\n ['seashell', 0xfff5ee],\r\n ['beige', 0xf5f5dc],\r\n ['oldlace', 0xfdf5e6],\r\n ['floralwhite', 0xfffaf0],\r\n ['ivory', 0xfffff0],\r\n ['antiquewhite', 0xfaebd7],\r\n ['linen', 0xfaf0e6],\r\n ['lavenderblush', 0xfff0f5],\r\n ['mistyrose', 0xffe4e1],\r\n ['gainsboro', 0xdcdcdc],\r\n ['lightgray', 0xd3d3d3],\r\n ['silver', 0xc0c0c0],\r\n ['darkgray', 0xa9a9a9],\r\n ['gray', 0x808080],\r\n ['dimgray', 0x696969],\r\n ['lightslategray', 0x778899],\r\n ['slategray', 0x708090],\r\n ['darkslategray', 0x2f4f4f],\r\n ['black', 0x000000],\r\n /* eslint-enable no-multi-spaces */\r\n ],\r\n\r\n namedColors: {},\r\n\r\n gradients: {\r\n rainbow: [\r\n 0x0000ff, // blue\r\n 0x00ffff, // cyan\r\n 0x00ff00, // green\r\n 0xffff00, // yellow\r\n 0xff0000, // red\r\n ],\r\n temp: [\r\n 0x0000ff, // blue\r\n 0x007fff, // light-blue\r\n 0xffffff, // white\r\n 0xff7f00, // orange\r\n 0xff0000, // red\r\n ],\r\n hot: [\r\n 0xffffff, // white\r\n 0xff7f00, // orange\r\n 0xff0000, // red\r\n ],\r\n cold: [\r\n 0xffffff, // white\r\n 0x007fff, // light-blue\r\n 0x0000ff, // blue\r\n ],\r\n 'blue-red': [\r\n 0x0000ff, // blue\r\n 0xffffff, // white\r\n 0xff0000, // red\r\n ],\r\n reds: [\r\n 0xffffff, // white\r\n 0xff0000, // red\r\n ],\r\n blues: [\r\n 0xffffff, // white\r\n 0x0000ff, // blue\r\n ],\r\n },\r\n});\r\n\r\nconst { namedColorsArray, namedColors } = Palette.prototype;\r\n\r\nfor (let i = 0, { length } = namedColorsArray; i < length; ++i) {\r\n const [name, value] = namedColorsArray[i];\r\n namedColors[name] = value;\r\n}\r\n\r\nexport default Palette;\r\n","import Palette from './Palette';\r\n\r\nconst palette = new Palette('CPK', 'CP');\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n\r\n H: 0xFFFFFF,\r\n C: 0x202020,\r\n N: 0x2060FF,\r\n O: 0xEE2010,\r\n F: 0x00FF00,\r\n P: 0x8020FF,\r\n S: 0xFFFF00,\r\n CL: 0x00BB00,\r\n FE: 0xD0D0D0,\r\n CO: 0xD0D0D0,\r\n NI: 0xD0D0D0,\r\n CU: 0xD0D0D0,\r\n BR: 0x008800,\r\n I: 0x005500,\r\n\r\n};\r\n\r\nexport default palette;\r\n","import Palette from './Palette';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst palette = new Palette('Jmol', 'JM');\r\n\r\npalette.colors = [\r\n\r\n 0x0000FF, // blue\r\n 0x0055FF, //\r\n 0x00ABFF, //\r\n 0x00FFFF, // cyan\r\n 0x00FFAB, //\r\n 0x00FF55, //\r\n 0x00FF00, // green\r\n 0x55FF00, //\r\n 0xABFF00, //\r\n 0xFFFF00, // yellow\r\n 0xFFAB00, //\r\n 0xFF5500, //\r\n 0xFF0000, // red\r\n 0xFF0055, //\r\n 0xFF00AB, //\r\n 0xFF00FF, // magenta\r\n 0xAB00FF, //\r\n 0x5500FF, //\r\n\r\n];\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n\r\n H: 0xFFFFFF,\r\n D: 0xFFFFC0,\r\n T: 0xFFFFA0,\r\n HE: 0xD9FFFF,\r\n LI: 0xCC80FF,\r\n BE: 0xC2FF00,\r\n B: 0xFFB5B5,\r\n C: 0x909090,\r\n N: 0x3050F8,\r\n O: 0xFF0D0D,\r\n F: 0x90E050,\r\n NE: 0xB3E3F5,\r\n NA: 0xAB5CF2,\r\n MG: 0x8AFF00,\r\n AL: 0xBFA6A6,\r\n SI: 0xF0C8A0,\r\n P: 0xFF8000,\r\n S: 0xFFFF30,\r\n CL: 0x1FF01F,\r\n AR: 0x80D1E3,\r\n K: 0x8F40D4,\r\n CA: 0x3DFF00,\r\n SC: 0xE6E6E6,\r\n TI: 0xBFC2C7,\r\n V: 0xA6A6AB,\r\n CR: 0x8A99C7,\r\n MN: 0x9C7AC7,\r\n FE: 0xE06633,\r\n CO: 0xF090A0,\r\n NI: 0x50D050,\r\n CU: 0xC88033,\r\n ZN: 0x7D80B0,\r\n GA: 0xC28F8F,\r\n GE: 0x668F8F,\r\n AS: 0xBD80E3,\r\n SE: 0xFFA100,\r\n BR: 0xA62929,\r\n KR: 0x5CB8D1,\r\n RB: 0x702EB0,\r\n SR: 0x00FF00,\r\n Y: 0x94FFFF,\r\n ZR: 0x94E0E0,\r\n NB: 0x73C2C9,\r\n MO: 0x54B5B5,\r\n TC: 0x3B9E9E,\r\n RU: 0x248F8F,\r\n RH: 0x0A7D8C,\r\n PD: 0x006985,\r\n AG: 0xC0C0C0,\r\n CD: 0xFFD98F,\r\n IN: 0xA67573,\r\n SN: 0x668080,\r\n SB: 0x9E63B5,\r\n TE: 0xD47A00,\r\n I: 0x940094,\r\n XE: 0x429EB0,\r\n CS: 0x57178F,\r\n BA: 0x00C900,\r\n LA: 0x70D4FF,\r\n CE: 0xFFFFC7,\r\n PR: 0xD9FFC7,\r\n ND: 0xC7FFC7,\r\n PM: 0xA3FFC7,\r\n SM: 0x8FFFC7,\r\n EU: 0x61FFC7,\r\n GD: 0x45FFC7,\r\n TB: 0x30FFC7,\r\n DY: 0x1FFFC7,\r\n HO: 0x00FF9C,\r\n ER: 0x00E675,\r\n TM: 0x00D452,\r\n YB: 0x00BF38,\r\n LU: 0x00AB24,\r\n HF: 0x4DC2FF,\r\n TA: 0x4DA6FF,\r\n W: 0x2194D6,\r\n RE: 0x267DAB,\r\n OS: 0x266696,\r\n IR: 0x175487,\r\n PT: 0xD0D0E0,\r\n AU: 0xFFD123,\r\n HG: 0xB8B8D0,\r\n TL: 0xA6544D,\r\n PB: 0x575961,\r\n BI: 0x9E4FB5,\r\n PO: 0xAB5C00,\r\n AT: 0x754F45,\r\n RN: 0x428296,\r\n FR: 0x420066,\r\n RA: 0x007D00,\r\n AC: 0x70ABFA,\r\n TH: 0x00BAFF,\r\n PA: 0x00A1FF,\r\n U: 0x008FFF,\r\n NP: 0x0080FF,\r\n PU: 0x006BFF,\r\n AM: 0x545CF2,\r\n CM: 0x785CE3,\r\n BK: 0x8A4FE3,\r\n CF: 0xA136D4,\r\n ES: 0xB31FD4,\r\n FM: 0xB31FBA,\r\n MD: 0xB30DA6,\r\n NO: 0xBD0D87,\r\n LR: 0xC70066,\r\n RF: 0xCC0059,\r\n DB: 0xD1004F,\r\n SG: 0xD90045,\r\n BH: 0xE00038,\r\n HS: 0xE6002E,\r\n MT: 0xEB0026,\r\n\r\n};\r\n\r\npalette.defaultResidueColor = 0xBEA06E;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\npalette.residueColors = {\r\n\r\n ALA: 0xC8C8C8,\r\n ARG: 0x145AFF,\r\n ASN: 0x00DCDC,\r\n ASP: 0xE60A0A,\r\n CYS: 0xE6E600,\r\n GLN: 0x00DCDC,\r\n GLU: 0xE60A0A,\r\n GLY: 0xEBEBEB,\r\n HIS: 0x8282D2,\r\n ILE: 0x0F820F,\r\n LEU: 0x0F820F,\r\n LYS: 0x145AFF,\r\n MET: 0xE6E600,\r\n PHE: 0x3232AA,\r\n PRO: 0xDC9682,\r\n SER: 0xFA9600,\r\n THR: 0xFA9600,\r\n TRP: 0xB45AB4,\r\n TYR: 0x3232AA,\r\n VAL: 0x0F820F,\r\n A: 0xA0A0FF,\r\n C: 0xFF8C4B,\r\n G: 0xFF7070,\r\n I: 0x80FFFF,\r\n T: 0xA0FFA0,\r\n U: 0xFF8080,\r\n DA: 0xA0A0FF,\r\n DC: 0xFF8C4B,\r\n DG: 0xFF7070,\r\n DI: 0x80FFFF,\r\n DT: 0xA0FFA0,\r\n DU: 0xFF8080,\r\n '+A': 0xA0A0FF,\r\n '+C': 0xFF8C4B,\r\n '+G': 0xFF7070,\r\n '+I': 0x80FFFF,\r\n '+T': 0xA0FFA0,\r\n '+U': 0xFF8080,\r\n\r\n};\r\n\r\npalette.chainColors = [\r\n // ' '->0 'A'->1, 'B'->2\r\n 0xFFffffff, // ' ' & '0' white\r\n //\r\n 0xFFC0D0FF, // skyblue\r\n 0xFFB0FFB0, // pastel green\r\n 0xFFFFC0C8, // pink\r\n 0xFFFFFF80, // pastel yellow\r\n 0xFFFFC0FF, // pastel magenta\r\n 0xFFB0F0F0, // pastel cyan\r\n 0xFFFFD070, // pastel gold\r\n 0xFFF08080, // lightcoral\r\n\r\n 0xFFF5DEB3, // wheat\r\n 0xFF00BFFF, // deepskyblue\r\n 0xFFCD5C5C, // indianred\r\n 0xFF66CDAA, // mediumaquamarine\r\n 0xFF9ACD32, // yellowgreen\r\n 0xFFEE82EE, // violet\r\n 0xFF00CED1, // darkturquoise\r\n 0xFF00FF7F, // springgreen\r\n 0xFF3CB371, // mediumseagreen\r\n\r\n 0xFF00008B, // darkblue\r\n 0xFFBDB76B, // darkkhaki\r\n 0xFF006400, // darkgreen\r\n 0xFF800000, // maroon\r\n 0xFF808000, // olive\r\n 0xFF800080, // purple\r\n 0xFF008080, // teal\r\n 0xFFB8860B, // darkgoldenrod\r\n 0xFFB22222, // firebrick\r\n];\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\npalette.secondaryColors = {\r\n [StructuralElementType.HELIX_ALPHA]: 0xFF0080,\r\n [StructuralElementType.HELIX_PI]: 0x600080,\r\n [StructuralElementType.HELIX_310]: 0xA00080,\r\n [StructuralElementType.STRAND]: 0xFFC800,\r\n [StructuralElementType.TURN]: 0x6080FF,\r\n dna: 0xAE00FE,\r\n rna: 0xFD0162,\r\n};\r\n\r\nexport default palette;\r\n","import Palette from './Palette';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst palette = new Palette('VMD', 'VM');\r\n\r\npalette.colors = [\r\n\r\n 0x0000FF, // blue\r\n 0xFF0000, // red\r\n 0x606060, // gray\r\n 0xFF8000, // orange\r\n 0xFFFF00, // yellow\r\n 0x808033, // tan\r\n 0x999999, // silver\r\n 0x00FF00, // green\r\n 0xFFFFFF, // white\r\n 0xFF9999, // pink\r\n 0x40C0C0, // cyan\r\n 0xA600A6, // purple\r\n 0x80E666, // lime\r\n 0xE666B3, // mauve\r\n 0x804D00, // ochre\r\n 0x8080C0, // ice blue\r\n\r\n];\r\n\r\npalette.defaultElementColor = 0x804D00;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from atom_types.csv by atom_types.py.\r\npalette.elementColors = {\r\n\r\n H: 0xFFFFFF,\r\n C: 0x40BFBF,\r\n N: 0x0000FF,\r\n O: 0xFF0000,\r\n P: 0x808033,\r\n S: 0xFFFF00,\r\n\r\n};\r\n\r\npalette.defaultResidueColor = 0x40C0C0;\r\n\r\n// DO NOT EDIT MANUALLY! Autogenerated from residue_types.csv by residue_types.py.\r\npalette.residueColors = {\r\n\r\n ALA: 0x0000FF,\r\n ARG: 0xFFFFFF,\r\n ASN: 0x808033,\r\n ASP: 0xFF0000,\r\n CYS: 0xFFFF00,\r\n GLN: 0xFF8000,\r\n GLU: 0xFF9999,\r\n GLY: 0xFFFFFF,\r\n HIS: 0x40C0C0,\r\n ILE: 0x00FF00,\r\n LEU: 0xFF9999,\r\n LYS: 0x40C0C0,\r\n MET: 0xFFFF00,\r\n PHE: 0xA600A6,\r\n PRO: 0x804C00,\r\n SER: 0xFFFF00,\r\n THR: 0xE666B3,\r\n TRP: 0x999999,\r\n TYR: 0x00FF00,\r\n VAL: 0x808033,\r\n A: 0x0000FF,\r\n C: 0xFF8000,\r\n G: 0xFFFF00,\r\n T: 0xA600A6,\r\n U: 0x00FF00,\r\n DA: 0x0000FF,\r\n DC: 0xFF8000,\r\n DG: 0xFFFF00,\r\n DT: 0xA600A6,\r\n DU: 0x00FF00,\r\n '+A': 0x0000FF,\r\n '+C': 0xFF8000,\r\n '+G': 0xFFFF00,\r\n '+T': 0xA600A6,\r\n '+U': 0x00FF00,\r\n WAT: 0x40C0C0,\r\n H2O: 0x40C0C0,\r\n HOH: 0x40C0C0,\r\n\r\n};\r\n\r\npalette.chainColors = [0xFFFFFF].concat(palette.colors);\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\npalette.secondaryColors = {\r\n [StructuralElementType.HELIX_ALPHA]: 0xA600A6,\r\n [StructuralElementType.HELIX_310]: 0x0000FF,\r\n [StructuralElementType.HELIX_PI]: 0xFF0000,\r\n [StructuralElementType.STRAND]: 0xFFFF00,\r\n [StructuralElementType.BRIDGE]: 0x808033,\r\n [StructuralElementType.TURN]: 0x40C0C0,\r\n};\r\n\r\nexport default palette;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport cpkPalette from './palettes/cpkPalette';\r\nimport jmolPalette from './palettes/jmolPalette';\r\nimport vmdPalette from './palettes/vmdPalette';\r\n\r\nconst palettes = new EntityList([\r\n cpkPalette,\r\n jmolPalette,\r\n vmdPalette,\r\n]);\r\n\r\nexport default palettes;\r\n","import _ from 'lodash';\r\nimport settings from '../../settings';\r\nimport utils from '../../utils';\r\nimport palettes from '../palettes';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the colorer after its creation.\r\n *\r\n * @exports Colorer\r\n * @this Colorer\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all available coloring algorithms used for building and displaying molecule geometry.\r\n */\r\nclass Colorer {\r\n constructor(opts) {\r\n if (this.constructor === Colorer) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Colorer options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.opts = _.merge(utils.deriveDeep(settings.now.colorers[this.id], true), opts);\r\n /**\r\n * Palette in use.\r\n * @type {Palette}\r\n */\r\n this.palette = palettes.first;\r\n }\r\n\r\n /**\r\n * Get Colorer identification, probably with options.\r\n * @returns {string|Array} Colorer identifier string ({@link Colorer#id}) or two-element array containing both colorer\r\n * identifier and options ({@link Colorer#opts}).\r\n * Options are returned if they were changed during or after colorer creation.\r\n */\r\n identify() {\r\n const diff = utils.objectsDiff(this.opts, settings.now.colorers[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n return [this.id, diff];\r\n }\r\n return this.id;\r\n }\r\n}\r\n\r\n/**\r\n * Colorer identifier.\r\n * @type {string}\r\n */\r\n\r\nColorer.prototype.id = '__';\r\n\r\nexport default Colorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Element\r\n *\r\n * @exports ElementColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Coloring algorithm based on chemical element.\r\n */\r\nclass ElementColorer extends Colorer {\r\n static id = 'EL';\r\n\r\n getAtomColor(atom, _complex) {\r\n const type = atom.element.name;\r\n if (type === 'C' && this.opts.carbon >= 0) {\r\n return this.opts.carbon;\r\n }\r\n return this.palette.getElementColor(type);\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.palette.defaultResidueColor;\r\n }\r\n}\r\n\r\nElementColorer.prototype.id = 'EL';\r\nElementColorer.prototype.name = 'Element';\r\nElementColorer.prototype.shortName = 'Element';\r\n\r\nexport default ElementColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Coloring algorithm based on residue type.\r\n *\r\n * @see ResidueType\r\n *\r\n * @exports ResidueTypeColorer\r\n * @constructor\r\n */\r\nclass ResidueTypeColorer extends Colorer {\r\n static id = 'RT';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n return this.palette.getResidueColor(residue._type._name);\r\n }\r\n}\r\n\r\nResidueTypeColorer.prototype.id = 'RT';\r\nResidueTypeColorer.prototype.name = 'Residue Type';\r\nResidueTypeColorer.prototype.shortName = 'Residue';\r\n\r\nexport default ResidueTypeColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass SequenceColorer extends Colorer {\r\n static id = 'SQ';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const chain = residue._chain;\r\n if (chain.minSequence === Number.POSITIVE_INFINITY && chain.maxSequence === Number.NEGATIVE_INFINITY) {\r\n return this.palette.defaultNamedColor;\r\n }\r\n const min = chain.minSequence;\r\n const max = chain.maxSequence > min ? chain.maxSequence : min + 1;\r\n return this.palette.getGradientColor((residue._sequence - min) / (max - min), this.opts.gradient);\r\n }\r\n}\r\n\r\nSequenceColorer.prototype.id = 'SQ';\r\nSequenceColorer.prototype.name = 'Sequence';\r\nSequenceColorer.prototype.shortName = 'Sequence';\r\n\r\nexport default SequenceColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass ChainColorer extends Colorer {\r\n static id = 'CH';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n return this.palette.getChainColor(residue.getChain()._name);\r\n }\r\n}\r\n\r\nChainColorer.prototype.id = 'CH';\r\nChainColorer.prototype.name = 'Chain';\r\nChainColorer.prototype.shortName = 'Chain';\r\n\r\nexport default ChainColorer;\r\n","import Colorer from './Colorer';\r\nimport ResidueType from '../../chem/ResidueType';\r\n\r\nclass SecondaryStructureColorer extends Colorer {\r\n static id = 'SS';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n if (residue._type.flags & ResidueType.Flags.DNA) {\r\n return this.palette.getSecondaryColor('dna');\r\n }\r\n if (residue._type.flags & ResidueType.Flags.RNA) {\r\n return this.palette.getSecondaryColor('rna');\r\n }\r\n const secondary = residue.getSecondary();\r\n if (secondary) {\r\n let color = this.palette.getSecondaryColor(secondary.type, true);\r\n if (color === undefined) {\r\n color = this.palette.getSecondaryColor(secondary.generic);\r\n }\r\n return color;\r\n }\r\n return this.palette.defaultSecondaryColor;\r\n }\r\n}\r\n\r\nSecondaryStructureColorer.prototype.id = 'SS';\r\nSecondaryStructureColorer.prototype.name = 'Secondary Structure';\r\nSecondaryStructureColorer.prototype.shortName = 'Structure';\r\n\r\nexport default SecondaryStructureColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass UniformColorer extends Colorer {\r\n static id = 'UN';\r\n\r\n getAtomColor(_atom, _complex) {\r\n return this.opts.color;\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nUniformColorer.prototype.id = 'UN';\r\nUniformColorer.prototype.name = 'Uniform';\r\nUniformColorer.prototype.shortName = 'Uniform';\r\n\r\nexport default UniformColorer;\r\n","import Colorer from './Colorer';\r\nimport selectors from '../../chem/selectors';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @exports ConditionalColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Bicolor coloring algorithm based on a selector string used as a condition.\r\n */\r\nclass ConditionalColorer extends Colorer {\r\n static id = 'CO';\r\n\r\n constructor(opts) {\r\n super(opts);\r\n const parsed = selectors.parse(this.opts.subset);\r\n this._subsetCached = parsed.error ? selectors.none() : parsed.selector;\r\n }\r\n\r\n getAtomColor(atom, _complex) {\r\n return this._subsetCached.includesAtom(atom) ? this.opts.color : this.opts.baseColor;\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const subset = this._subsetCached;\r\n const atoms = residue._atoms;\r\n for (let i = 0, n = atoms.length; i < n; ++i) {\r\n if (!subset.includesAtom(atoms[i])) {\r\n return this.opts.baseColor;\r\n }\r\n }\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nConditionalColorer.prototype.id = 'CO';\r\nConditionalColorer.prototype.name = 'Conditional';\r\nConditionalColorer.prototype.shortName = 'Conditional';\r\n\r\nexport default ConditionalColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass ConformationColorer extends Colorer {\r\n static id = 'CF';\r\n\r\n getAtomColor(atom, _complex) {\r\n return this.palette.getChainColor(String.fromCharCode(atom.location));\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.palette.defaultResidueColor;\r\n }\r\n}\r\n\r\nConformationColorer.prototype.id = 'CF';\r\nConformationColorer.prototype.name = 'Conformation';\r\nConformationColorer.prototype.shortName = 'Conformation';\r\n\r\nexport default ConformationColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Temperature\r\n *\r\n * @exports TemperatureColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Coloring algorithm based on temperature of chemical element.\r\n */\r\nclass TemperatureColorer extends Colorer {\r\n static id = 'TM';\r\n\r\n getAtomColor(atom, _complex) {\r\n const { opts } = this;\r\n let factor = 1;\r\n if (atom.temperature && opts) {\r\n if (opts.min === opts.max) {\r\n factor = atom.temperature > opts.max ? 1 : 0;\r\n } else {\r\n factor = (atom.temperature - opts.min) / (opts.max - opts.min);\r\n }\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const { opts } = this;\r\n if (!opts) {\r\n return this.palette.defaultGradientColor;\r\n }\r\n if (residue.temperature) {\r\n let factor = 0;\r\n if (opts.min === opts.max) {\r\n factor = residue.temperature > opts.max ? 1 : 0;\r\n } else {\r\n factor = (residue.temperature - opts.min) / (opts.max - opts.min);\r\n }\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n}\r\n\r\nTemperatureColorer.prototype.id = 'TM'; // [T]e[M]perature\r\nTemperatureColorer.prototype.name = 'Temperature';\r\nTemperatureColorer.prototype.shortName = 'Temperature';\r\n\r\nexport default TemperatureColorer;\r\n","import Colorer from './Colorer';\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @see Occupancy\r\n *\r\n * @exports OccupancyColorer\r\n * @augments Occupancy\r\n * @constructor\r\n * @classdesc Coloring algorithm based on occupancy of chemical element.\r\n */\r\nclass OccupancyColorer extends Colorer {\r\n static id = 'OC';\r\n\r\n _getColorByOccupancy(occupancy, opts) {\r\n if (occupancy !== undefined) {\r\n const factor = 1 - occupancy;\r\n return this.palette.getGradientColor(factor, opts.gradient);\r\n }\r\n return this.palette.defaultGradientColor;\r\n }\r\n\r\n getAtomColor(atom, _complex) {\r\n const { opts } = this;\r\n return this._getColorByOccupancy(atom.occupancy, opts);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const { opts } = this;\r\n return this._getColorByOccupancy(residue.occupancy, opts);\r\n }\r\n}\r\n\r\nOccupancyColorer.prototype.id = 'OC'; // [OC]cupancy\r\nOccupancyColorer.prototype.name = 'Occupancy';\r\nOccupancyColorer.prototype.shortName = 'Occupancy';\r\n\r\nexport default OccupancyColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass HydrophobicityColorer extends Colorer {\r\n static id = 'HY';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n let color = this.palette.defaultResidueColor;\r\n if (residue._type.hydrophobicity !== undefined) {\r\n // Kyte Doolitle hydro [-4.5,4.5]->[0.1]\r\n const min = -4.5;\r\n const max = 4.5;\r\n color = this.palette.getGradientColor((residue._type.hydrophobicity - min) / (max - min), this.opts.gradient);\r\n }\r\n return color;\r\n }\r\n}\r\n\r\nHydrophobicityColorer.prototype.id = 'HY';\r\nHydrophobicityColorer.prototype.name = 'Hydrophobicity';\r\nHydrophobicityColorer.prototype.shortName = 'Hydrophobicity';\r\n\r\nexport default HydrophobicityColorer;\r\n","import Colorer from './Colorer';\r\n\r\nclass MoleculeColorer extends Colorer {\r\n static id = 'MO';\r\n\r\n getAtomColor(atom, complex) {\r\n return this.getResidueColor(atom.residue, complex);\r\n }\r\n\r\n getResidueColor(residue, _complex) {\r\n const molecule = residue._molecule;\r\n const count = _complex.getMoleculeCount();\r\n if (count > 1) {\r\n return this.palette.getGradientColor((molecule.index - 1) / (count - 1), this.opts.gradient);\r\n }\r\n return this.palette.getGradientColor(0, this.opts.gradient);\r\n }\r\n}\r\n\r\nMoleculeColorer.prototype.id = 'MO';\r\nMoleculeColorer.prototype.name = 'Molecule';\r\nMoleculeColorer.prototype.shortName = 'Molecule';\r\n\r\nexport default MoleculeColorer;\r\n","import Colorer from './Colorer';\r\nimport Atom from '../../chem/Atom';\r\n\r\nfunction scaleColor(c, factor) {\r\n const r1 = (c >> 16) & 0xff;\r\n const g1 = (c >> 8) & 0xff;\r\n const b1 = c & 0xff;\r\n const r = factor * r1;\r\n const g = factor * g1;\r\n const b = factor * b1;\r\n return (r << 16) | (g << 8) | b;\r\n}\r\n\r\n/**\r\n * Create new colorer.\r\n *\r\n * @param {object=} opts - Options to override defaults with. See {@link Colorer}.\r\n *\r\n * @exports CarbonColorer\r\n * @augments Colorer\r\n * @constructor\r\n * @classdesc Bicolor coloring algorithm based on selection carbon atoms.\r\n */\r\nclass CarbonColorer extends Colorer {\r\n static id = 'CB';\r\n\r\n getAtomColor(atom, _complex) {\r\n const colorCarbon = this.opts.color;\r\n const colorNotCarbon = scaleColor(colorCarbon, this.opts.factor);\r\n return (atom.flags & Atom.Flags.CARBON) ? colorCarbon : colorNotCarbon;\r\n }\r\n\r\n getResidueColor(_residue, _complex) {\r\n return this.opts.color;\r\n }\r\n}\r\n\r\nCarbonColorer.prototype.id = 'CB';\r\nCarbonColorer.prototype.name = 'Carbon';\r\nCarbonColorer.prototype.shortName = 'Carbon';\r\n\r\nexport default CarbonColorer;\r\n","import EntityList from '../utils/EntityList';\r\n\r\nimport ElementColorer from './colorers/ElementColorer';\r\nimport ResidueTypeColorer from './colorers/ResidueTypeColorer';\r\nimport SequenceColorer from './colorers/SequenceColorer';\r\nimport ChainColorer from './colorers/ChainColorer';\r\nimport SecondaryStructureColorer from './colorers/SecondaryStructureColorer';\r\nimport UniformColorer from './colorers/UniformColorer';\r\nimport ConditionalColorer from './colorers/ConditionalColorer';\r\nimport ConformationColorer from './colorers/ConformationColorer';\r\nimport TemperatureColorer from './colorers/TemperatureColorer';\r\nimport OccupancyColorer from './colorers/OccupancyColorer';\r\nimport HydrophobicityColorer from './colorers/HydrophobicityColorer';\r\nimport MoleculeColorer from './colorers/MoleculeColorer';\r\nimport CarbonColorer from './colorers/CarbonColorer';\r\n\r\nconst colorers = new EntityList([\r\n ElementColorer,\r\n ResidueTypeColorer,\r\n SequenceColorer,\r\n ChainColorer,\r\n SecondaryStructureColorer,\r\n UniformColorer,\r\n ConditionalColorer,\r\n ConformationColorer,\r\n TemperatureColorer,\r\n OccupancyColorer,\r\n HydrophobicityColorer,\r\n MoleculeColorer,\r\n CarbonColorer,\r\n]);\r\n\r\nexport default colorers;\r\n","import * as THREE from 'three';\r\nimport EntityList from '../utils/EntityList';\r\n\r\nfunction neutralColor(intensity) {\r\n return new THREE.Color(intensity, intensity, intensity);\r\n}\r\n\r\nconst materialList = [\r\n {\r\n id: 'DF',\r\n name: 'Diffuse',\r\n shortName: 'Diffuse',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'SF',\r\n name: 'Soft Plastic',\r\n shortName: 'Soft',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.1),\r\n shininess: 30,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'PL',\r\n name: 'Glossy Plastic',\r\n shortName: 'Glossy',\r\n uberOptions: {\r\n diffuse: neutralColor(0.56),\r\n specular: neutralColor(0.28),\r\n shininess: 100,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'ME',\r\n name: 'Metal',\r\n shortName: 'Metal',\r\n uberOptions: {\r\n diffuse: neutralColor(0.56),\r\n specular: neutralColor(0.55),\r\n shininess: 30,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'TR',\r\n name: 'Transparent',\r\n shortName: 'Transparent',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 0.5,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: true,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'GL',\r\n name: 'Glass',\r\n shortName: 'Glass',\r\n uberOptions: {\r\n diffuse: neutralColor(0.50),\r\n specular: neutralColor(0.65),\r\n shininess: 100,\r\n opacity: 0.5,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: true,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'BA',\r\n name: 'Backdrop',\r\n shortName: 'Backdrop',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: false,\r\n fog: false,\r\n depthWrite: false,\r\n transparent: false,\r\n toonShading: false,\r\n },\r\n }, {\r\n id: 'TN',\r\n name: 'Toon',\r\n shortName: 'Toon',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 1,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: true,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n toonShading: true,\r\n },\r\n }, {\r\n id: 'FL',\r\n name: 'Flat',\r\n shortName: 'Flat',\r\n uberOptions: {\r\n diffuse: neutralColor(1.0),\r\n specular: neutralColor(0.0),\r\n shininess: 0,\r\n opacity: 1.0,\r\n },\r\n values: {\r\n lights: false,\r\n fog: true,\r\n depthWrite: true,\r\n transparent: false,\r\n },\r\n },\r\n];\r\n\r\nconst materials = new EntityList(materialList);\r\n\r\nexport default materials;\r\n","/**\r\n * Utils functions which is worked with meshes\r\n *\r\n * functions for doing something with all/specified meshes\r\n * functions for traversihg tree and create auxiliary meshes for transparency/shadowmaps...\r\n * functions for calculating data connected with meshes\r\n */\r\nimport * as THREE from 'three';\r\nimport UberMaterial from './shaders/UberMaterial';\r\nimport gfxutils from './gfxutils';\r\n\r\nfunction _gatherObjects(root, meshTypes) {\r\n const meshes = [];\r\n root.traverse((object) => {\r\n for (let i = 0; i < meshTypes.length; i++) {\r\n if (object instanceof meshTypes[i]) {\r\n meshes[meshes.length] = object;\r\n break;\r\n }\r\n }\r\n });\r\n return meshes;\r\n}\r\n\r\n// new mesh with the same geometry and specified material values and layer\r\nfunction createDerivativeMesh(mesh, values, layer) {\r\n const material = mesh.material.createInstance();\r\n material.setValues(values);\r\n\r\n const newMesh = new mesh.constructor(mesh.geometry, material);\r\n newMesh.material.needsUpdate = true;\r\n newMesh.applyMatrix4(mesh.matrix);\r\n newMesh.layers.set(layer);\r\n return newMesh;\r\n}\r\n\r\nfunction traverseMeshes(root, meshTypes, func) {\r\n const meshes = _gatherObjects(root, meshTypes);\r\n\r\n for (let i = 0, n = meshes.length; i < n; ++i) {\r\n const mesh = meshes[i];\r\n if (!mesh.parent) {\r\n continue;\r\n }\r\n func(mesh);\r\n }\r\n}\r\n\r\nfunction applyTransformsToMeshes(root, mtc) {\r\n const mtcCount = mtc.length;\r\n if (mtcCount < 1) {\r\n return;\r\n }\r\n\r\n const meshTypes = [THREE.Mesh, THREE.LineSegments, THREE.Line];\r\n traverseMeshes(root, meshTypes, (mesh) => {\r\n mesh.applyMatrix4(mtc[0]);\r\n for (let j = 1; j < mtcCount; ++j) {\r\n const newMesh = new mesh.constructor(mesh.geometry, mesh.material);\r\n mesh.parent.add(newMesh);\r\n newMesh.applyMatrix4(mtc[j]);\r\n }\r\n });\r\n}\r\n\r\nconst processTransparentMaterial = (function () {\r\n const matValues = {\r\n prepassTransparancy: true,\r\n fakeOpacity: false,\r\n transparent: false,\r\n colorFromDepth: false,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n mesh.material.setValues({ prepassTransparancy: false, fakeOpacity: false });\r\n mesh.material.needsUpdate = true;\r\n mesh.layers.set(gfxutils.LAYERS.TRANSPARENT);\r\n\r\n const prepassTranspMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.PREPASS_TRANSPARENT);\r\n mesh.parent.add(prepassTranspMesh);\r\n });\r\n };\r\n}());\r\n\r\nconst processColFromPosMaterial = (function () {\r\n const matValues = {\r\n colorFromPos: true,\r\n transparent: false,\r\n colorFromDepth: false,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n overrideColor: false,\r\n fogTransparent: false,\r\n attrColor: false,\r\n attrColor2: false,\r\n attrAlphaColor: false,\r\n fakeOpacity: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n const colFromPosMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.COLOR_FROM_POSITION);\r\n mesh.parent.add(colFromPosMesh);\r\n });\r\n };\r\n}());\r\n\r\nconst createShadowmapMaterial = (function () {\r\n const matValues = {\r\n colorFromDepth: true,\r\n orthoCam: true,\r\n lights: false,\r\n shadowmap: false,\r\n fog: false,\r\n };\r\n\r\n return function (root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n if (!mesh.receiveShadow && mesh.material.shadowmap) { // remove shadow from non-receivers\r\n mesh.material.setValues({ shadowmap: false });\r\n }\r\n if (!mesh.material.lights) { // skip creating shadowmap meshes for materials without lighting\r\n return;\r\n }\r\n if (!mesh.castShadow) { // skip creating shadowmap meshes for non-casters\r\n return;\r\n }\r\n if (!gfxutils.belongToSelectLayers(mesh)) { // skip creating shadowmap meshes for selection layer\r\n return;\r\n }\r\n\r\n const shadowmapMesh = createDerivativeMesh(mesh, matValues, gfxutils.LAYERS.SHADOWMAP);\r\n shadowmapMesh.isShadowmapMesh = true;\r\n mesh.parent.add(shadowmapMesh);\r\n });\r\n };\r\n}());\r\n\r\nfunction removeShadowmapMaterial(root, material) {\r\n if (!(material instanceof UberMaterial)) {\r\n return;\r\n }\r\n\r\n traverseMeshes(root, [THREE.Mesh, THREE.LineSegments], (mesh) => {\r\n if (mesh.isShadowmapMesh) {\r\n mesh.parent.remove(mesh);\r\n }\r\n });\r\n}\r\n\r\nfunction forEachMeshInGroup(group, process) {\r\n function processObj(object) {\r\n if (object instanceof THREE.Mesh) {\r\n process(object);\r\n }\r\n for (let i = 0, l = object.children.length; i < l; i++) {\r\n processObj(object.children[i]);\r\n }\r\n }\r\n processObj(group);\r\n}\r\n\r\nfunction _countMeshTriangles(mesh) {\r\n const geom = mesh.geometry;\r\n if (geom instanceof THREE.InstancedBufferGeometry) {\r\n const attribs = geom.attributes;\r\n for (const property in attribs) {\r\n if (attribs.hasOwnProperty(property) && attribs[property] instanceof THREE.InstancedBufferAttribute) {\r\n const currAttr = attribs[property];\r\n const indexSize = geom.index ? geom.index.array.length / 3 : 0;\r\n return indexSize * currAttr.array.length / currAttr.itemSize;\r\n }\r\n }\r\n return 0;\r\n }\r\n if (geom instanceof THREE.BufferGeometry) {\r\n return geom.index ? geom.index.array.length / 3 : 0;\r\n }\r\n return geom.faces ? geom.faces.length : 0;\r\n}\r\n\r\nfunction countTriangles(group) {\r\n let totalCount = 0;\r\n forEachMeshInGroup(group, (mesh) => {\r\n totalCount += _countMeshTriangles(mesh);\r\n });\r\n return totalCount;\r\n}\r\n\r\nexport default {\r\n applyTransformsToMeshes,\r\n processTransparentMaterial,\r\n processColFromPosMaterial,\r\n createShadowmapMaterial,\r\n removeShadowmapMaterial,\r\n forEachMeshInGroup,\r\n countTriangles,\r\n};\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport UberMaterial from './shaders/UberMaterial';\r\nimport gfxutils from './gfxutils';\r\nimport meshutils from './meshutils';\r\nimport settings from '../settings';\r\nimport materials from './materials';\r\nimport chem from '../chem';\r\n\r\nconst { selectors } = chem;\r\n\r\nclass Representation {\r\n constructor(index, mode, colorer, selector) {\r\n const startMaterialValues = {\r\n clipPlane: settings.now.draft.clipPlane,\r\n fogTransparent: settings.now.bg.transparent,\r\n shadowmap: settings.now.shadow.on,\r\n shadowmapType: settings.now.shadow.type,\r\n };\r\n this.index = index;\r\n this.mode = mode;\r\n this.colorer = colorer;\r\n this.selector = selector;\r\n this.selectorString = '';\r\n this.count = 0;\r\n this.material = new UberMaterial();\r\n this.material.setValues(startMaterialValues);\r\n this.material.setUberOptions({ fogAlpha: settings.now.fogAlpha });\r\n this.materialPreset = materials.first;\r\n this.needsRebuild = true;\r\n this.visible = true;\r\n\r\n // apply mode params & preset\r\n this.setMode(mode);\r\n }\r\n\r\n markAtoms(complex) {\r\n this.count = complex.markAtoms(this.selector, 1 << this.index);\r\n this.needsRebuild = true;\r\n return this.count;\r\n }\r\n\r\n unmarkAtoms(complex) {\r\n complex.clearAtomBits(1 << this.index);\r\n this.count = 0;\r\n }\r\n\r\n setMode(mode) {\r\n this.mode = mode;\r\n }\r\n\r\n setMaterialPreset(preset) {\r\n this.materialPreset = preset;\r\n this.material.setUberOptions(preset.uberOptions);\r\n this.material.setValues(preset.values);\r\n }\r\n\r\n reset() {\r\n this.geo = null;\r\n this.selectionGeo = null;\r\n }\r\n\r\n buildGeometry(complex) {\r\n this.reset();\r\n this.needsRebuild = false;\r\n\r\n if (settings.now.ao) {\r\n this.material.setValues({ normalsToGBuffer: settings.now.ao });\r\n }\r\n\r\n this.geo = this.mode.buildGeometry(complex, this.colorer, 1 << this.index, this.material);\r\n\r\n if (this.material.uberOptions.opacity < 0.99 && settings.now.transparency === 'prepass') {\r\n meshutils.processTransparentMaterial(this.geo, this.material);\r\n }\r\n this.geo.visible = this.visible;\r\n\r\n gfxutils.processObjRenderOrder(this.geo, this.materialPreset.id);\r\n meshutils.processColFromPosMaterial(this.geo, this.material);\r\n\r\n if (settings.now.shadow.on) {\r\n meshutils.createShadowmapMaterial(this.geo, this.material);\r\n }\r\n\r\n return this.geo;\r\n }\r\n\r\n buildSelectionGeometry(mask) {\r\n let sg = null;\r\n\r\n if (this.geo && ('getSubset' in this.geo)) {\r\n const meshes = this.geo.getSubset(mask);\r\n if (meshes && meshes.length > 0) {\r\n sg = new THREE.Group();\r\n sg.matrixAutoUpdate = false;\r\n sg.matrix = this.geo.matrix;\r\n\r\n for (let j = 0; j < meshes.length; j++) {\r\n const m = meshes[j];\r\n sg.add(m);\r\n }\r\n }\r\n }\r\n\r\n if (sg) {\r\n sg.visible = this.visible;\r\n }\r\n\r\n this.selectionGeo = sg;\r\n return this.selectionGeo;\r\n }\r\n\r\n /**\r\n * Create object that represents difference between current and another rep\r\n * anotherRep could be undefined. In this case everything is reported.\r\n */\r\n compare(repSettings) {\r\n const diff = {};\r\n\r\n const selStr = String(this.selector);\r\n if (!repSettings || selStr.valueOf() !== String(repSettings.selector).valueOf()) {\r\n diff.selector = selStr;\r\n }\r\n\r\n const modeDiff = this.mode.identify();\r\n if (!repSettings || Array.isArray(modeDiff) || modeDiff !== repSettings.mode) {\r\n diff.mode = modeDiff;\r\n }\r\n\r\n const colorerDiff = this.colorer.identify();\r\n if (!repSettings || Array.isArray(colorerDiff) || colorerDiff !== repSettings.colorer) {\r\n diff.colorer = colorerDiff;\r\n }\r\n\r\n if (!repSettings || this.materialPreset.id !== repSettings.material) {\r\n diff.material = this.materialPreset.id;\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n /**\r\n * Change representation. Write fields what was changed into new object, return it.\r\n */\r\n change(repSettings, complex, mode, color) {\r\n const diff = {};\r\n\r\n // modify selector\r\n if (repSettings.selector) {\r\n const newSelectorObject = selectors.parse(repSettings.selector).selector;\r\n const newSelector = String(newSelectorObject);\r\n if (this.selectorString !== newSelector) {\r\n diff.selector = newSelector;\r\n this.selectorString = newSelector;\r\n this.selector = newSelectorObject;\r\n this.markAtoms(complex);\r\n }\r\n }\r\n\r\n // modify mode\r\n if (repSettings.mode) {\r\n const newMode = repSettings.mode;\r\n if (!_.isEqual(this.mode.identify(), newMode)) {\r\n diff.mode = newMode;\r\n this.setMode(mode);\r\n }\r\n }\r\n\r\n // modify colorer\r\n if (repSettings.colorer) {\r\n const newColorer = repSettings.colorer;\r\n if (!_.isEqual(this.colorer.identify(), newColorer)) {\r\n diff.colorer = newColorer;\r\n this.colorer = color;\r\n }\r\n }\r\n\r\n // modify material\r\n if (repSettings.material) {\r\n const newMaterial = repSettings.material;\r\n if (!_.isEqual(this.materialPreset.id, newMaterial)) {\r\n diff.material = newMaterial;\r\n this.setMaterialPreset(materials.get(repSettings.material));\r\n }\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n show(visible) {\r\n this.visible = visible;\r\n if (this.geo) {\r\n this.geo.visible = visible;\r\n }\r\n if (this.selectionGeo) {\r\n this.selectionGeo.visible = visible;\r\n }\r\n }\r\n}\r\n\r\nexport default Representation;\r\n","import * as THREE from 'three';\r\nimport logger from './utils/logger';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport './gfx/modes';\r\n\r\nfunction _traverseComponentGroups(root, component, callback) {\r\n const { children } = root;\r\n if (!children) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = children.length; i < n; ++i) {\r\n const child = children[i];\r\n if (child._component === component) {\r\n callback(child);\r\n }\r\n if (child instanceof gfxutils.RCGroup) {\r\n _traverseComponentGroups(child, component, callback);\r\n }\r\n }\r\n}\r\n\r\nfunction ComplexEditor() {\r\n}\r\n\r\nclass ComplexComponentEditor extends ComplexEditor {\r\n constructor(complexVisual) {\r\n super();\r\n this._complexVisual = complexVisual;\r\n this._inProgress = false;\r\n }\r\n\r\n begin() {\r\n const complex = this._complexVisual.getComplex();\r\n\r\n // init component matrices\r\n this._componentTransforms = [];\r\n for (let i = 0; i < complex._components.length; ++i) {\r\n const component = complex._components[i];\r\n this._componentTransforms[component._index] = new THREE.Object3D();\r\n }\r\n\r\n this._inProgress = true;\r\n\r\n return true;\r\n }\r\n\r\n apply() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const complex = this._complexVisual.getComplex();\r\n\r\n for (let i = 0; i < complex._components.length; ++i) {\r\n this._bakeComponentTransform(complex._components[i]);\r\n }\r\n\r\n complex.onAtomPositionChanged();\r\n\r\n this._resetComponentTransform();\r\n\r\n this._complexVisual.finalizeEdit();\r\n }\r\n\r\n discard() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n this._resetComponentTransform();\r\n\r\n this._complexVisual.finalizeEdit();\r\n }\r\n\r\n getAltObj() {\r\n const res = {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n\r\n const visual = this._complexVisual;\r\n const component = visual.getSelectedComponent();\r\n\r\n if (component === null) {\r\n return res;\r\n }\r\n\r\n const selection = this._complexVisual.getSelectionGeo();\r\n const selectionMask = 1 << visual.getSelectionBit();\r\n let i;\r\n let j;\r\n let reprNode;\r\n let geo;\r\n\r\n // find all geo nodes for this component\r\n _traverseComponentGroups(visual, component, (child) => {\r\n res.objects.push(child);\r\n });\r\n\r\n // find all selection nodes for this component\r\n for (i = 0; i < selection.children.length; ++i) {\r\n reprNode = selection.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component') && geo._component === component) {\r\n res.objects.push(geo);\r\n }\r\n }\r\n }\r\n\r\n // add dummy object that stores component transformation\r\n res.objects.push(this._componentTransforms[component._index]);\r\n\r\n const bbmin = new THREE.Vector3(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);\r\n const bbmax = new THREE.Vector3(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);\r\n\r\n component.forEachResidue((residue) => {\r\n const atoms = residue._atoms;\r\n for (j = 0; j < atoms.length; ++j) {\r\n if (atoms[j].mask & selectionMask) {\r\n bbmin.min(atoms[j].position);\r\n bbmax.max(atoms[j].position);\r\n }\r\n }\r\n });\r\n\r\n res.pivot.lerpVectors(bbmin, bbmax, 0.5);\r\n return res;\r\n }\r\n\r\n _bakeComponentTransform(component) {\r\n const t = this._componentTransforms[component._index];\r\n if (t && (!(t.position.x === 0 && t.position.y === 0 && t.position.z === 0)\r\n || !(t.quaternion.x === 0 && t.quaternion.y === 0 && t.quaternion.z === 0 && t.quaternion.w === 1))) {\r\n t.updateMatrix();\r\n\r\n component.forEachResidue((residue) => {\r\n const atoms = residue._atoms;\r\n for (let j = 0; j < atoms.length; ++j) {\r\n atoms[j].position.applyMatrix4(t.matrix);\r\n }\r\n });\r\n }\r\n }\r\n\r\n _resetComponentTransform() {\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n let i;\r\n let j;\r\n let reprNode;\r\n let geo;\r\n\r\n for (i = 0; i < this._componentTransforms.length; ++i) {\r\n geo = this._componentTransforms[i];\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n\r\n // reset all geo nodes\r\n for (i = 0; i < visual.children.length; ++i) {\r\n reprNode = visual.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component')) {\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n }\r\n }\r\n\r\n // reset all selection nodes\r\n for (i = 0; i < selection.children.length; ++i) {\r\n reprNode = selection.children[i];\r\n for (j = 0; j < reprNode.children.length; ++j) {\r\n geo = reprNode.children[j];\r\n if (geo.hasOwnProperty('_component')) {\r\n geo.position.set(0, 0, 0);\r\n geo.quaternion.set(0, 0, 0, 1);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass ComplexFragmentEditor extends ComplexEditor {\r\n constructor(complexVisual) {\r\n super();\r\n this._complexVisual = complexVisual;\r\n this._inProgress = false;\r\n }\r\n\r\n begin() {\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n\r\n const atoms = this._getSelectionBorderAtoms();\r\n if (atoms.length < 1 || atoms.length > 2) {\r\n logger.error('Can only edit fragments with one or two bound atoms.');\r\n return false;\r\n }\r\n\r\n this._fragmentBoundAtoms = atoms;\r\n\r\n const selectionMask = 1 << visual.getSelectionBit();\r\n\r\n // hide selected fragment in main model\r\n visual.disableSubset(selectionMask, true);\r\n\r\n // hide selection geo in main model\r\n for (let k = 0; k < selection.children.length; ++k) {\r\n selection.children[k].visible = false;\r\n }\r\n\r\n // create visible fragment representation to rotate\r\n const pivotPos = atoms[0].position.clone();\r\n\r\n if (atoms.length === 2) {\r\n pivotPos.lerp(atoms[1].position, 0.5);\r\n }\r\n\r\n this._fragmentGeo = new THREE.Group();\r\n visual.add(this._fragmentGeo);\r\n this._fragmentGeo.position.copy(pivotPos);\r\n\r\n this._fragmentSelectionGeo = new THREE.Group();\r\n selection.add(this._fragmentSelectionGeo);\r\n this._fragmentSelectionGeo.position.copy(pivotPos);\r\n\r\n const offset = pivotPos.clone();\r\n offset.negate();\r\n\r\n for (let i = 0; i < visual.children.length; ++i) {\r\n const g = visual.children[i];\r\n if (!('getSubset' in g)) {\r\n continue;\r\n }\r\n\r\n const vg = new THREE.Group();\r\n this._fragmentGeo.add(vg);\r\n\r\n const sg = new THREE.Group();\r\n this._fragmentSelectionGeo.add(sg);\r\n\r\n const meshes = g.getSubset(selectionMask, true);\r\n for (let j = 0; j < meshes.length; j++) {\r\n const m = meshes[j];\r\n vg.add(m);\r\n m.position.copy(offset);\r\n }\r\n\r\n const smeshes = g.getSubset(selectionMask, true);\r\n for (let h = 0; h < smeshes.length; h++) {\r\n const sm = smeshes[h];\r\n sg.add(sm);\r\n sm.position.copy(offset);\r\n }\r\n }\r\n\r\n gfxutils.applySelectionMaterial(this._fragmentSelectionGeo);\r\n\r\n this._inProgress = true;\r\n return true;\r\n }\r\n\r\n apply() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const visual = this._complexVisual;\r\n const selectionBit = visual.getSelectionBit();\r\n\r\n const p = this._fragmentGeo.position;\r\n const m = this._fragmentGeo.matrix.clone();\r\n m.multiply(new THREE.Matrix4().makeTranslation(-p.x, -p.y, -p.z));\r\n\r\n this._bakeAtomTransform(m, 1 << selectionBit);\r\n\r\n // show selected fragment in main model\r\n visual.enableSubset(1 << selectionBit, true);\r\n\r\n visual.getComplex().onAtomPositionChanged();\r\n\r\n visual.finalizeEdit();\r\n }\r\n\r\n discard() {\r\n if (!this._inProgress) {\r\n return;\r\n }\r\n\r\n const visual = this._complexVisual;\r\n const selection = this._complexVisual.getSelectionGeo();\r\n\r\n this._fragmentGeo.parent.remove(this._fragmentGeo);\r\n\r\n // show selected fragment in main model\r\n visual.enableSubset(1 << visual.getSelectionBit(), true);\r\n\r\n // show selection geo in main model (+ remove fragment selection geo)\r\n for (let i = 0; i < selection.children.length; ++i) {\r\n const node = selection.children[i];\r\n if (node.visible) {\r\n selection.remove(node);\r\n } else {\r\n node.visible = true;\r\n }\r\n }\r\n\r\n visual.finalizeEdit();\r\n }\r\n\r\n isFreeRotationAllowed() {\r\n return (this._fragmentBoundAtoms.length < 2);\r\n }\r\n\r\n getAltObj() {\r\n const res = {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n\r\n res.objects.push(this._fragmentGeo, this._fragmentSelectionGeo);\r\n\r\n const boundAtoms = this._fragmentBoundAtoms;\r\n if (boundAtoms.length === 1) {\r\n if (boundAtoms[0].bonds.length === 1) {\r\n // single external bond allows rotation about bond axis\r\n const bond = boundAtoms[0].bonds[0];\r\n res.axis = new THREE.Vector3().subVectors(bond._right.position, bond._left.position);\r\n res.axis.normalize();\r\n res.axis.transformDirection(this._complexVisual.matrixWorld);\r\n }\r\n } else if (boundAtoms.length === 2) {\r\n // two bound atoms allow rotation only about axis running through their centers\r\n res.axis = new THREE.Vector3().subVectors(boundAtoms[1].position, boundAtoms[0].position);\r\n res.axis.normalize();\r\n res.axis.transformDirection(this._complexVisual.matrixWorld);\r\n }\r\n\r\n return res;\r\n }\r\n\r\n _getSelectionBorderAtoms() {\r\n const complex = this._complexVisual.getComplex();\r\n\r\n const selectionMask = 1 << this._complexVisual.getSelectionBit();\r\n const atomHash = {};\r\n\r\n complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n atomHash[bond._left.index] = 1;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n atomHash[bond._right.index] = 1;\r\n }\r\n });\r\n\r\n const atoms = [];\r\n const keys = Object.keys(atomHash);\r\n for (let i = 0, n = keys.length; i < n; ++i) {\r\n const idx = keys[i];\r\n atoms.push(complex._atoms[idx]);\r\n }\r\n\r\n return atoms;\r\n }\r\n\r\n _bakeAtomTransform(matrix, mask) {\r\n this._complexVisual.getComplex().forEachAtom((atom) => {\r\n if (atom.mask & mask) {\r\n atom.position.applyMatrix4(matrix);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default {\r\n ComponentEditor: ComplexComponentEditor,\r\n FragmentEditor: ComplexFragmentEditor,\r\n};\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport utils from './utils';\r\nimport logger from './utils/logger';\r\nimport chem from './chem';\r\nimport settings from './settings';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport modes from './gfx/modes';\r\nimport colorers from './gfx/colorers';\r\nimport palettes from './gfx/palettes';\r\nimport materials from './gfx/materials';\r\nimport Representation from './gfx/Representation';\r\nimport Visual from './Visual';\r\nimport ComplexVisualEdit from './ComplexVisualEdit';\r\nimport meshutils from './gfx/meshutils';\r\n\r\nconst { selectors } = chem;\r\n\r\nfunction lookupAndCreate(entityList, specs) {\r\n if (!Array.isArray(specs)) {\r\n specs = [specs];\r\n }\r\n const [id, opts] = specs;\r\n const Entity = entityList.get(id) || entityList.first;\r\n return new Entity(opts);\r\n}\r\n\r\nclass ComplexVisual extends Visual {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this._complex = dataSource;\r\n\r\n /** @type {Representation[]} */\r\n this._reprList = [];\r\n /** @type {?Representation} */\r\n this._repr = null;\r\n this._reprListChanged = true;\r\n\r\n this._selectionBit = 0;\r\n this._reprUsedBits = 0;\r\n this._selectionCount = 0;\r\n\r\n this._selectionGeometry = new THREE.Group();\r\n }\r\n\r\n getBoundaries() {\r\n return this._complex.getBoundaries();\r\n }\r\n\r\n release() {\r\n if (this._selectionGeometry.parent) {\r\n this._selectionGeometry.remove(this._selectionGeometry);\r\n }\r\n Visual.prototype.release.call(this);\r\n }\r\n\r\n getComplex() {\r\n return this._complex;\r\n }\r\n\r\n getSelectionCount() {\r\n return this._selectionCount;\r\n }\r\n\r\n getSelectionGeo() {\r\n return this._selectionGeometry;\r\n }\r\n\r\n getSelectionBit() {\r\n return this._selectionBit;\r\n }\r\n\r\n getEditor() {\r\n return this._editor;\r\n }\r\n\r\n resetReps(reps) {\r\n // Create all necessary representations\r\n if (this._complex) {\r\n this._complex.clearAtomBits(~0);\r\n }\r\n this._reprListChanged = true;\r\n this._reprUsedBits = 0;\r\n this._reprList.length = reps.length;\r\n for (let i = 0, n = reps.length; i < n; ++i) {\r\n const rep = reps[i];\r\n\r\n let selector;\r\n let selectorString;\r\n if (typeof rep.selector === 'string') {\r\n selectorString = rep.selector;\r\n ({ selector } = selectors.parse(selectorString));\r\n } else if (typeof rep.selector === 'undefined') {\r\n selectorString = settings.now.presets.default[0].selector;\r\n ({ selector } = selectors.parse(selectorString));\r\n } else {\r\n ({ selector } = rep);\r\n selectorString = selector.toString();\r\n }\r\n const mode = lookupAndCreate(modes, rep.mode);\r\n const colorer = lookupAndCreate(colorers, rep.colorer);\r\n const material = materials.get(rep.material) || materials.first;\r\n\r\n this._reprList[i] = new Representation(i, mode, colorer, selector);\r\n this._reprList[i].setMaterialPreset(material);\r\n this._reprList[i].selectorString = selectorString;\r\n\r\n if (this._complex) {\r\n this._complex.markAtoms(selector, 1 << i);\r\n }\r\n\r\n this._reprUsedBits |= 1 << i;\r\n }\r\n this._repr = reps.length > 0 ? this._reprList[0] : null;\r\n\r\n this._selectionBit = reps.length;\r\n this._reprUsedBits |= 1 << this._selectionBit; // selection uses one bit\r\n this._selectionCount = 0;\r\n\r\n if (this._complex) {\r\n this._complex.update();\r\n }\r\n }\r\n\r\n /**\r\n * Get number of representations created so far.\r\n * @returns {number} Number of reps.\r\n */\r\n repCount() {\r\n return this._reprList.length;\r\n }\r\n\r\n /**\r\n * Get or set the current representation index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @returns {number} The current index.\r\n */\r\n repCurrent(index) {\r\n if (index >= 0 && index < this._reprList.length) {\r\n this._repr = this._reprList[index];\r\n } else {\r\n index = this._reprList.indexOf(this._repr);\r\n }\r\n return index;\r\n }\r\n\r\n /**\r\n * Get or set representation by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @param {object=} rep - Optional representation description.\r\n * @param {string=} rep.selector - Selector string.\r\n * @param {string=} rep.mode - Mode id.\r\n * @param {string=} rep.colorer - Colorer id.\r\n * @param {string=} rep.material - Material id.\r\n * @returns {Object} {desc, index, status} field desc contains rep description, index - index of correspondent rep,\r\n * status - one of three strings: 'created', 'changed', ''. 'created' means new rep was created during this function,\r\n * 'changed' - rep was changed during this function. '' - something else.\r\n */\r\n rep(index, rep) {\r\n // if index is missing then it is the current\r\n if (!rep && (index === undefined || index instanceof Object)) {\r\n rep = index;\r\n index = this.repCurrent();\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index > this._reprList.length) {\r\n logger.error(`Rep ${index} does not exist!`);\r\n return null;\r\n }\r\n\r\n // a special case of adding just after the end\r\n if (index === this._reprList.length) {\r\n const res = this.repAdd(rep);\r\n logger.warn(`Rep ${index} does not exist! New representation was created.`);\r\n return { desc: res.desc, index, status: 'created' };\r\n }\r\n\r\n // gather description\r\n const target = this._reprList[index];\r\n const desc = {\r\n selector: target.selectorString,\r\n mode: target.mode.identify(),\r\n colorer: target.colorer.identify(),\r\n material: target.materialPreset.id,\r\n };\r\n\r\n // modification is requested\r\n if (rep) {\r\n // modify\r\n const diff = target.change(\r\n rep,\r\n this._complex,\r\n lookupAndCreate(modes, rep.mode),\r\n lookupAndCreate(colorers, rep.colorer),\r\n );\r\n\r\n // something was changed\r\n if (!_.isEmpty(diff)) {\r\n target.needsRebuild = true;\r\n for (const key in diff) {\r\n if (diff.hasOwnProperty(key)) {\r\n desc[key] = diff[key];\r\n logger.debug(`rep[${index}].${key} changed to ${diff[key]}`);\r\n }\r\n }\r\n\r\n // safety trick: lower resolution for surface modes\r\n if (diff.mode && target.mode.isSurface\r\n && (settings.now.resolution === 'ultra' || settings.now.resolution === 'high')) {\r\n logger.report('Surface resolution was changed to \"medium\" to avoid hang-ups.');\r\n settings.set('resolution', 'medium');\r\n }\r\n return { desc, index, status: 'changed' };\r\n }\r\n }\r\n return { desc, index, status: '' };\r\n }\r\n\r\n /**\r\n * Get representation (not just description) by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @returns {?object} Representation.\r\n */\r\n repGet(index) {\r\n // if index is missing then it is the current\r\n if (index === undefined || index instanceof Object) {\r\n index = this.repCurrent();\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index >= this._reprList.length) {\r\n return null;\r\n }\r\n\r\n return this._reprList[index];\r\n }\r\n\r\n _getFreeReprIdx() {\r\n let bits = this._reprUsedBits;\r\n for (let i = 0; i <= ComplexVisual.NUM_REPRESENTATION_BITS; ++i, bits >>= 1) {\r\n if ((bits & 1) === 0) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n /**\r\n * Add new representation.\r\n * @param {object=} rep - Representation description.\r\n * @returns {Object} {desc, index} field desc contains added rep description, index - index of this rep.\r\n */\r\n repAdd(rep) {\r\n if (this._reprList.length >= ComplexVisual.NUM_REPRESENTATION_BITS) {\r\n return null;\r\n }\r\n\r\n const newSelectionBit = this._getFreeReprIdx();\r\n if (newSelectionBit < 0) {\r\n return null; // no more slots for representations\r\n }\r\n\r\n const originalSelection = this.buildSelectorFromMask(1 << this._selectionBit);\r\n\r\n // Fill in default values\r\n const def = settings.now.presets.default[0];\r\n const desc = _.merge({\r\n selector: def.selector,\r\n mode: def.mode,\r\n colorer: def.colorer,\r\n material: def.material,\r\n }, rep);\r\n\r\n const selector = (typeof desc.selector === 'string') ? selectors.parse(desc.selector).selector : desc.selector;\r\n const target = new Representation(\r\n this._selectionBit,\r\n lookupAndCreate(modes, desc.mode),\r\n lookupAndCreate(colorers, desc.colorer),\r\n selector,\r\n );\r\n target.selectorString = selector.toString();\r\n target.setMaterialPreset(materials.get(desc.material));\r\n target.markAtoms(this._complex);\r\n this._reprList.push(target);\r\n\r\n // change selection bit\r\n this._selectionBit = newSelectionBit;\r\n this._reprUsedBits |= 1 << this._selectionBit;\r\n\r\n // restore selection using new selection bit\r\n this._complex.markAtoms(originalSelection, 1 << this._selectionBit);\r\n\r\n return { desc, index: this._reprList.length - 1 };\r\n }\r\n\r\n /**\r\n * Remove representation.\r\n * @param {number=} index - Zero-based representation index.\r\n */\r\n repRemove(index) {\r\n if (index === undefined) {\r\n index = this.repCurrent();\r\n }\r\n\r\n // catch out of bounds case\r\n let count = this._reprList.length;\r\n if (index < 0 || index >= count || count <= 1) { // do not allow to remove the single rep\r\n return;\r\n }\r\n\r\n const target = this._reprList[index];\r\n target.unmarkAtoms(this._complex);\r\n this._reprUsedBits &= ~(1 << target.index);\r\n\r\n this._reprList.splice(index, 1);\r\n\r\n // update current rep\r\n if (target === this._repr) {\r\n --count;\r\n index = index < count ? index : count - 1;\r\n this._repr = this._reprList[index];\r\n }\r\n this._reprListChanged = true;\r\n }\r\n\r\n /**\r\n * Hide representation.\r\n * @param {number} index - Zero-based representation index.\r\n * @param {boolean=} hide - Specify false to make rep visible, true to hide (by default).\r\n */\r\n repHide(index, hide) {\r\n if (hide === undefined) {\r\n hide = true;\r\n }\r\n\r\n // fail if out of bounds\r\n if (index < 0 || index >= this._reprList.length) {\r\n return;\r\n }\r\n\r\n const target = this._reprList[index];\r\n target.show(!hide);\r\n }\r\n\r\n /**\r\n * Select atoms with selector\r\n * @param {Selector} selector - selector\r\n * @param {boolean=} append - true to append selection atoms to current selection, false to rewrite selection\r\n */\r\n select(selector, append) {\r\n if (append) {\r\n this._selectionCount += this._complex.markAtomsAdditionally(selector, 1 << this._selectionBit);\r\n } else {\r\n this._selectionCount = this._complex.markAtoms(selector, 1 << this._selectionBit);\r\n }\r\n this._complex.updateStructuresMask();\r\n this.rebuildSelectionGeometry();\r\n }\r\n\r\n resetSelectionMask() {\r\n if (this._selectionCount !== 0) {\r\n this._selectionCount = 0;\r\n if (this._complex) {\r\n this._complex.clearAtomBits(1 << this._selectionBit);\r\n }\r\n }\r\n }\r\n\r\n updateSelectionMask(pickedObj) {\r\n const self = this;\r\n const { atom } = pickedObj;\r\n let { residue, chain, molecule } = pickedObj;\r\n const setMask = 1 << this._selectionBit;\r\n const clearMask = ~setMask;\r\n\r\n if (atom) {\r\n residue = atom.residue;\r\n chain = residue._chain;\r\n molecule = residue._molecule;\r\n\r\n if (atom.mask & setMask) {\r\n atom.mask &= clearMask;\r\n residue._mask &= clearMask;\r\n chain._mask &= clearMask;\r\n if (molecule) {\r\n molecule.mask &= clearMask;\r\n }\r\n this._selectionCount--;\r\n } else {\r\n atom.mask |= setMask;\r\n this._selectionCount++;\r\n\r\n // select residue if all atoms in it are selected\r\n residue.collectMask();\r\n // select chain and molecule if all residues in it are selected\r\n chain.collectMask();\r\n if (molecule) {\r\n molecule.collectMask();\r\n }\r\n }\r\n } else if (residue) {\r\n chain = residue._chain;\r\n molecule = residue._molecule;\r\n\r\n if (residue._mask & setMask) {\r\n residue._mask &= clearMask;\r\n chain._mask &= clearMask;\r\n residue.forEachAtom((a) => {\r\n if (a.mask & setMask) {\r\n a.mask &= clearMask;\r\n self._selectionCount--;\r\n }\r\n });\r\n } else {\r\n residue._mask |= setMask;\r\n residue.forEachAtom((a) => {\r\n if (!(a.mask & setMask)) {\r\n a.mask |= setMask;\r\n self._selectionCount++;\r\n }\r\n });\r\n\r\n // select chain and molecule if all residues in it are selected\r\n chain.collectMask();\r\n if (molecule) {\r\n molecule.collectMask();\r\n }\r\n }\r\n } else if (chain || molecule) {\r\n const obj = chain || molecule;\r\n if (obj._mask & setMask) {\r\n obj._mask &= clearMask;\r\n obj.forEachResidue((r) => {\r\n if (r._mask & setMask) {\r\n r._mask &= clearMask;\r\n r.forEachAtom((a) => {\r\n if (a.mask & setMask) {\r\n a.mask &= clearMask;\r\n self._selectionCount--;\r\n }\r\n });\r\n r._mask &= clearMask;\r\n }\r\n });\r\n } else {\r\n obj._mask |= setMask;\r\n obj.forEachResidue((r) => {\r\n if (!(r._mask & setMask)) {\r\n r._mask |= setMask;\r\n r.forEachAtom((a) => {\r\n if (!(a.mask & setMask)) {\r\n a.mask |= setMask;\r\n self._selectionCount++;\r\n }\r\n });\r\n const otherObj = chain ? r.getMolecule() : r.getChain();\r\n if (otherObj) {\r\n otherObj.collectMask();\r\n }\r\n }\r\n });\r\n }\r\n } else {\r\n this.resetSelectionMask();\r\n }\r\n }\r\n\r\n expandSelection() {\r\n const self = this;\r\n const selectionMask = 1 << this._selectionBit;\r\n const tmpMask = 1 << 31;\r\n\r\n // mark atoms to add\r\n this._complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n bond._right.mask |= tmpMask;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n bond._left.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // select marked atoms\r\n const deselectionMask = ~tmpMask;\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & tmpMask) {\r\n atom.mask = (atom.mask & deselectionMask) | selectionMask;\r\n ++self._selectionCount;\r\n }\r\n });\r\n\r\n this._complex.updateStructuresMask();\r\n }\r\n\r\n shrinkSelection() {\r\n const self = this;\r\n const selectionMask = 1 << this._selectionBit;\r\n const tmpMask = 1 << 31;\r\n\r\n // mark atoms neighbouring to unselected ones\r\n this._complex.forEachBond((bond) => {\r\n if (bond._left.mask & selectionMask) {\r\n if ((bond._right.mask & selectionMask) === 0) {\r\n bond._left.mask |= tmpMask;\r\n }\r\n } else if (bond._right.mask & selectionMask) {\r\n bond._right.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // mark hanging atoms\r\n this._complex.forEachAtom((atom) => {\r\n if ((atom.mask & selectionMask) && (atom.bonds.length === 1)) {\r\n atom.mask |= tmpMask;\r\n }\r\n });\r\n\r\n // deselect marked atoms\r\n const deselectionMask = ~(selectionMask | tmpMask);\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & tmpMask) {\r\n atom.mask &= deselectionMask;\r\n --self._selectionCount;\r\n }\r\n });\r\n\r\n this._complex.updateStructuresMask();\r\n }\r\n\r\n getSelectedComponent() {\r\n const selectionMask = 1 << this._selectionBit;\r\n\r\n let component = null;\r\n let multiple = false;\r\n\r\n // find which component is selected (exclusively)\r\n this._complex.forEachAtom((atom) => {\r\n if (atom.mask & selectionMask) {\r\n if (component === null) {\r\n component = atom.residue._component;\r\n } else if (component !== atom.residue._component) {\r\n multiple = true;\r\n }\r\n }\r\n });\r\n\r\n return multiple ? null : component;\r\n }\r\n\r\n getSelectionCenter(center, includesAtom, selRule) {\r\n center.set(0.0, 0.0, 0.0);\r\n let count = 0;\r\n\r\n this._complex.forEachAtom((atom) => {\r\n if (includesAtom(atom, selRule)) {\r\n center.add(atom.position);\r\n count++;\r\n }\r\n });\r\n if (count === 0) {\r\n return false;\r\n }\r\n center.divideScalar(count);\r\n center.applyMatrix4(this.matrix);\r\n return true;\r\n }\r\n\r\n needsRebuild() {\r\n if (this._reprListChanged) {\r\n return true;\r\n }\r\n const reprList = this._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n if (repr.needsRebuild) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Rebuild molecule geometry asynchronously.\r\n */\r\n rebuild() {\r\n const self = this;\r\n\r\n // Destroy current geometry\r\n gfxutils.clearTree(this);\r\n\r\n return new Promise(((resolve) => {\r\n // Nothing to do?\r\n const complex = self._complex;\r\n if (!complex) {\r\n resolve();\r\n return;\r\n }\r\n\r\n let errorOccured = false;\r\n setTimeout(() => {\r\n console.time('build');\r\n const reprList = self._reprList;\r\n const palette = palettes.get(settings.now.palette) || palettes.first;\r\n let hasGeometry = false;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n repr.colorer.palette = palette;\r\n\r\n if (repr.needsRebuild) {\r\n repr.reset();\r\n\r\n try {\r\n repr.buildGeometry(complex);\r\n } catch (e) {\r\n if (e instanceof utils.OutOfMemoryError) {\r\n repr.needsRebuild = false;\r\n repr.reset();\r\n logger.error(`Not enough memory to build geometry for representation ${repr.index + 1}`);\r\n errorOccured = true;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n\r\n if (DEBUG && !errorOccured) {\r\n logger.debug(`Triangles count: ${meshutils.countTriangles(repr.geo)}`);\r\n }\r\n }\r\n\r\n hasGeometry = errorOccured || hasGeometry || gfxutils.groupHasGeometryToRender(repr.geo);\r\n\r\n if (repr.geo) {\r\n self.add(repr.geo);\r\n }\r\n }\r\n\r\n self._reprListChanged = false;\r\n\r\n console.timeEnd('build');\r\n resolve();\r\n }, 10);\r\n }));\r\n }\r\n\r\n setNeedsRebuild() {\r\n // invalidate all representations\r\n const reprList = this._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n reprList[i].needsRebuild = true;\r\n }\r\n }\r\n\r\n rebuildSelectionGeometry() {\r\n const mask = 1 << this._selectionBit;\r\n\r\n gfxutils.clearTree(this._selectionGeometry);\r\n\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const repr = this._reprList[i];\r\n const sg = repr.buildSelectionGeometry(mask);\r\n if (!sg) {\r\n continue;\r\n }\r\n\r\n this._selectionGeometry.add(sg);\r\n for (let j = 0; j < sg.children.length; j++) {\r\n const m = sg.children[j];\r\n\r\n // copy component transform (that's not applied yet)\r\n // TODO make this code obsolete, accessing editor is bad\r\n if (this._editor && this._editor._componentTransforms) {\r\n const t = this._editor._componentTransforms[m._component._index];\r\n if (t) {\r\n m.position.copy(t.position);\r\n m.quaternion.copy(t.quaternion);\r\n }\r\n }\r\n }\r\n\r\n gfxutils.applySelectionMaterial(sg);\r\n }\r\n }\r\n\r\n _buildSelectorFromSortedLists(atoms, residues, chains) {\r\n const complex = this._complex;\r\n\r\n function optimizeList(list) {\r\n const result = [];\r\n let k = 0;\r\n let first = NaN;\r\n let last = NaN;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n const value = list[i];\r\n if (value === last + 1) {\r\n last = value;\r\n } else {\r\n if (!Number.isNaN(first)) {\r\n result[k++] = new selectors.Range(first, last);\r\n }\r\n first = last = value;\r\n }\r\n }\r\n if (!Number.isNaN(first)) {\r\n result[k] = new selectors.Range(first, last);\r\n }\r\n return result;\r\n }\r\n\r\n let expression = null;\r\n if (chains.length === complex._chains.length) {\r\n expression = selectors.all();\r\n } else {\r\n let selector;\r\n if (chains.length > 0) {\r\n selector = selectors.chain(chains);\r\n expression = expression ? selectors.or(expression, selector) : selector;// NOSONAR\r\n }\r\n if (Object.keys(residues).length > 0) {\r\n for (const ch in residues) {\r\n if (residues.hasOwnProperty(ch)) {\r\n selector = selectors.and(\r\n selectors.chain(ch),\r\n selectors.residx(optimizeList(residues[ch])),\r\n );\r\n expression = expression ? selectors.or(expression, selector) : selector;\r\n }\r\n }\r\n }\r\n if (atoms.length > 0) {\r\n selector = selectors.serial(optimizeList(atoms));\r\n expression = expression ? selectors.or(expression, selector) : selector;\r\n }\r\n\r\n if (!expression) {\r\n expression = selectors.none();\r\n }\r\n }\r\n\r\n return expression;\r\n }\r\n\r\n buildSelectorFromMask(mask) {\r\n const complex = this._complex;\r\n const chains = [];\r\n const residues = {};\r\n const atoms = [];\r\n\r\n complex.forEachChain((chain) => {\r\n if (chain._mask & mask) {\r\n chains.push(chain._name);\r\n }\r\n });\r\n\r\n complex.forEachResidue((residue) => {\r\n if (residue._mask & mask && !(residue._chain._mask & mask)) {\r\n const c = residue._chain._name;\r\n if (!(c in residues)) {\r\n residues[c] = [residue._index];\r\n } else {\r\n residues[c].push(residue._index);\r\n }\r\n }\r\n });\r\n\r\n complex.forEachAtom((atom) => {\r\n if (atom.mask & mask && !(atom.residue._mask & mask)) {\r\n atoms.push(atom.serial);\r\n }\r\n });\r\n\r\n return this._buildSelectorFromSortedLists(atoms, residues, chains);\r\n }\r\n\r\n forSelectedResidues(process) {\r\n const selectionMask = 1 << this._selectionBit;\r\n this._complex.forEachResidue((residue) => {\r\n if (residue._mask & selectionMask) {\r\n process(residue);\r\n }\r\n });\r\n }\r\n\r\n beginComponentEdit() {\r\n if (this._editor) {\r\n return null;\r\n }\r\n\r\n const editor = new ComplexVisualEdit.ComponentEditor(this);\r\n if (!editor.begin()) {\r\n return null;\r\n }\r\n\r\n this._editor = editor;\r\n return editor;\r\n }\r\n\r\n beginFragmentEdit() {\r\n if (this._editor) {\r\n return null;\r\n }\r\n\r\n const editor = new ComplexVisualEdit.FragmentEditor(this);\r\n if (!editor.begin()) {\r\n return null;\r\n }\r\n\r\n this._editor = editor;\r\n return editor;\r\n }\r\n\r\n // should only be called by editors\r\n finalizeEdit() {\r\n this._editor = null;\r\n }\r\n\r\n setMaterialValues(values, needTraverse = false, process = undefined) {\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const rep = this._reprList[i];\r\n rep.material.setValues(values);\r\n if (needTraverse) {\r\n rep.geo.traverse((object) => {\r\n if (object instanceof THREE.Mesh) {\r\n object.material.setValues(values);\r\n\r\n if (process !== undefined) {\r\n process(object);\r\n }\r\n\r\n object.material.needsUpdate = true;\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n setUberOptions(values) {\r\n for (let i = 0, n = this._reprList.length; i < n; ++i) {\r\n const rep = this._reprList[i];\r\n rep.material.setUberOptions(values);\r\n }\r\n }\r\n\r\n /**\r\n * Build selector that contains all atoms within given distance from group of atoms\r\n * @param {Selector} selector - selector describing source group of atoms\r\n * @param {number} radius - distance\r\n * @returns {Selector} selector describing result group of atoms\r\n */\r\n within(selector, radius) {\r\n const vw = this._complex.getVoxelWorld();\r\n if (vw === null) {\r\n return false;\r\n }\r\n\r\n // mark atoms of the group as selected\r\n const selectionMask = 1 << this._selectionBit;\r\n this._complex.markAtoms(selector, selectionMask);\r\n\r\n // mark all atoms within distance as selected\r\n if (vw) {\r\n vw.forEachAtomWithinDistFromMasked(this._complex, selectionMask, Number(radius), (atom) => {\r\n atom.mask |= selectionMask;\r\n });\r\n }\r\n\r\n // update selection count\r\n this._selectionCount = this._complex.countAtomsByMask(selectionMask);\r\n\r\n // update secondary structure mask\r\n this._complex.updateStructuresMask();\r\n\r\n return this.buildSelectorFromMask(selectionMask);\r\n }\r\n}\r\n// 32 bits = 30 bits for reps + 1 for selection + 1 for selection expansion\r\nComplexVisual.NUM_REPRESENTATION_BITS = 30;\r\n\r\nexport default ComplexVisual;\r\n","import * as THREE from 'three';\r\nimport vertexVolumeFaces from './VolumeFaces.vert';\r\nimport fragmentVolumeFaces from './VolumeFaces.frag';\r\nimport vertexVolume from './Volume.vert';\r\nimport fragmentVolume from './Volume.frag';\r\nimport vertexFarPlane from './VolumeFarPlane.vert';\r\nimport fragmentFarPlane from './VolumeFarPlane.frag';\r\nimport settings from '../../settings';\r\n\r\nconst volumeUniforms = THREE.UniformsUtils.merge([\r\n {\r\n volumeDim: { type: 'v3', value: new THREE.Vector3(512, 512, 512) },\r\n tileTex: { type: 't', value: null },\r\n tileTexSize: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n tileStride: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n\r\n boxAngles: { type: 'v3', value: new THREE.Vector3(1, 1, 1) },\r\n delta: { type: 'v3', value: new THREE.Vector3(0, 0, 0) },\r\n\r\n _isoLevel0: { type: 'v2', value: new THREE.Vector3(0.5, 0.75, 1.0) },\r\n _flipV: { type: 'f', value: 0.0 },\r\n _BFLeft: { type: 't', value: null },\r\n _BFRight: { type: 't', value: null },\r\n _FFLeft: { type: 't', value: null },\r\n _FFRight: { type: 't', value: null },\r\n _WFFLeft: { type: 't', value: null },\r\n _WFFRight: { type: 't', value: null },\r\n },\r\n]);\r\n\r\nfunction overrideUniforms(params, defUniforms) {\r\n const uniforms = THREE.UniformsUtils.clone(defUniforms);\r\n for (const p in params) {\r\n if (uniforms.hasOwnProperty(p)) {\r\n uniforms[p].value = params[p];\r\n }\r\n }\r\n return uniforms;\r\n}\r\n\r\nfunction facesPosMaterialParams(params, sideType) {\r\n return {\r\n uniforms: overrideUniforms(params, {}),\r\n vertexShader: vertexVolumeFaces,\r\n fragmentShader: fragmentVolumeFaces,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n side: sideType,\r\n };\r\n}\r\n\r\nclass BackFacePosMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const backFaceParams = facesPosMaterialParams(params, THREE.BackSide);\r\n super(backFaceParams);\r\n }\r\n}\r\n\r\nclass ShaderParams {\r\n constructor(params, uniforms, vertexShader, fragmentShader) {\r\n this.uniforms = overrideUniforms(params, uniforms);\r\n this.vertexShader = vertexShader;\r\n this.fragmentShader = fragmentShader;\r\n this.transparent = false;\r\n this.depthTest = false;\r\n this.depthWrite = false;\r\n this.side = THREE.FrontSide;\r\n }\r\n}\r\n\r\nclass BackFacePosMaterialFarPlane extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const matUniforms = THREE.UniformsUtils.merge([\r\n {\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n farZ: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n matWorld2Volume: { type: '4fv', value: new THREE.Matrix4() },\r\n },\r\n ]);\r\n\r\n const shaderParams = new ShaderParams(params, matUniforms, vertexFarPlane, fragmentFarPlane);\r\n super(shaderParams);\r\n }\r\n}\r\n\r\nclass FrontFacePosMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const frontFaceParams = facesPosMaterialParams(params, THREE.FrontSide);\r\n super(frontFaceParams);\r\n }\r\n}\r\n\r\nclass VolumeMaterial extends THREE.ShaderMaterial {\r\n constructor(params) {\r\n const shaderParams = new ShaderParams(params, volumeUniforms, vertexVolume, fragmentVolume);\r\n shaderParams.transparent = true;\r\n shaderParams.depthTest = true;\r\n\r\n super(shaderParams);\r\n this.updateDefines();\r\n }\r\n\r\n updateDefines() {\r\n this.defines = {\r\n ISO_MODE: settings.now.modes.VD.isoMode,\r\n STEPS_COUNT: settings.now.modes.VD.polyComplexity[settings.now.resolution] * 100,\r\n };\r\n this.needsUpdate = true;\r\n }\r\n}\r\n\r\nexport default {\r\n BackFacePosMaterial,\r\n BackFacePosMaterialFarPlane,\r\n FrontFacePosMaterial,\r\n VolumeMaterial,\r\n};\r\n","import * as THREE from 'three';\r\nimport VolumeMaterial from './shaders/VolumeMaterial';\r\nimport settings from '../settings';\r\n\r\nclass VolumeMesh extends THREE.Mesh {\r\n volumeInfo = {}; // data for noise filter\r\n\r\n constructor() {\r\n const geo = new THREE.BufferGeometry();\r\n super(geo);\r\n this.clipPlane = new THREE.Plane();\r\n const size = new THREE.Vector3(0.5, 0.5, 0.5);\r\n this.size = size;\r\n\r\n this.cullFlag = [\r\n true, true, true, true,\r\n true, true, true, true,\r\n false, false, false, false, false, false,\r\n ];\r\n\r\n this.faces = [\r\n { indices: [], norm: new THREE.Vector3(0, 0, -1) },\r\n { indices: [], norm: new THREE.Vector3(0, 0, 1) },\r\n { indices: [], norm: new THREE.Vector3(0, -1, 0) },\r\n { indices: [], norm: new THREE.Vector3(0, 1, 0) },\r\n { indices: [], norm: new THREE.Vector3(-1, 0, 0) },\r\n { indices: [], norm: new THREE.Vector3(1, 0, 0) },\r\n { indices: [], norm: new THREE.Vector3(0, 0, 0) },\r\n ];\r\n\r\n this.vertices = [\r\n new THREE.Vector3(-size.x, -size.y, -size.z),\r\n new THREE.Vector3(-size.x, size.y, -size.z),\r\n new THREE.Vector3(size.x, -size.y, -size.z),\r\n new THREE.Vector3(size.x, size.y, -size.z),\r\n new THREE.Vector3(-size.x, -size.y, size.z),\r\n new THREE.Vector3(-size.x, size.y, size.z),\r\n new THREE.Vector3(size.x, -size.y, size.z),\r\n new THREE.Vector3(size.x, size.y, size.z),\r\n new THREE.Vector3(0.0, 0.0, 0.0), // Placeholder for section\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n new THREE.Vector3(0.0, 0.0, 0.0),\r\n ];\r\n\r\n geo.setAttribute('position', new THREE.BufferAttribute(new Float32Array(this.vertices.length * 3), 3));\r\n\r\n this.name = 'VolumeMesh';\r\n }\r\n\r\n static _corners = [\r\n // x, y, z, edge1, edge2, edge3\r\n [-1, -1, -1, 0, 4, 8],\r\n [1, -1, -1, 0, 5, 9],\r\n [1, 1, -1, 1, 5, 10],\r\n [-1, 1, -1, 1, 4, 11],\r\n [-1, -1, 1, 2, 6, 8],\r\n [1, -1, 1, 2, 7, 9],\r\n [1, 1, 1, 3, 7, 10],\r\n [-1, 1, 1, 3, 6, 11],\r\n ];\r\n\r\n static _edges = [\r\n // corner1, corner2, center_x, center_y, center_z\r\n [0, 1, 0, -1, -1],\r\n [2, 3, 0, 1, -1],\r\n [4, 5, 0, -1, 1],\r\n [6, 7, 0, 1, 1],\r\n [0, 3, -1, 0, -1],\r\n [1, 2, 1, 0, -1],\r\n [4, 7, -1, 0, 1],\r\n [5, 6, 1, 0, 1],\r\n [0, 4, -1, -1, 0],\r\n [1, 5, 1, -1, 0],\r\n [2, 6, -1, 1, 0],\r\n [3, 7, 1, 1, 0],\r\n ];\r\n\r\n static _edgeIntersections = (function () {\r\n const edgeIntersections = [];\r\n for (let j = 0; j < 12; ++j) {\r\n edgeIntersections.push(new THREE.Vector3());\r\n }\r\n return edgeIntersections;\r\n }());\r\n\r\n _updateVertices() {\r\n // Algorithm:\r\n // 1. Get plane parameters\r\n // 2. Compute culling flags for all vertices\r\n // 3. If intersection occurs => compute from 3 to 6 intersection points\r\n const corners = VolumeMesh._corners;\r\n const edges = VolumeMesh._edges;\r\n const edgeIntersections = VolumeMesh._edgeIntersections;\r\n\r\n let i;\r\n\r\n const norm = this.clipPlane.normal;\r\n const D = this.clipPlane.constant;\r\n\r\n const vert = this.vertices;\r\n const { size } = this;\r\n\r\n const cornerMark = [0, 0, 0, 0, 0, 0, 0, 0];\r\n const edgeMark = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];\r\n\r\n const curEdge = new THREE.Vector3();\r\n let curEdgeInter = null;\r\n\r\n function CheckX() {\r\n if (norm.x === 0) return 0;\r\n const x = -(norm.dot(curEdge) + D) / norm.x;\r\n if (-size.x <= x && x <= size.x) {\r\n curEdgeInter.set(x, curEdge.y, curEdge.z);\r\n if (x === size.x) return 2;\r\n if (x === -size.x) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n function CheckY() {\r\n if (norm.y === 0) return 0;\r\n const y = -(norm.dot(curEdge) + D) / norm.y;\r\n if (-size.y <= y && y <= size.y) {\r\n curEdgeInter.set(curEdge.x, y, curEdge.z);\r\n if (y === size.y) return 2;\r\n if (y === -size.y) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n function CheckZ() {\r\n if (norm.z === 0) return 0;\r\n const z = -(norm.dot(curEdge) + D) / norm.z;\r\n if (-size.z <= z && z <= size.z) {\r\n curEdgeInter.set(curEdge.x, curEdge.y, z);\r\n if (z === size.z) return 2;\r\n if (z === -size.z) return -2;\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n // for each edge\r\n for (let curEdgeIdx = 0; curEdgeIdx < 12; ++curEdgeIdx) {\r\n const curEdgeSource = edges[curEdgeIdx];\r\n curEdgeInter = edgeIntersections[curEdgeIdx];\r\n\r\n curEdge.set(curEdgeSource[2], curEdgeSource[3], curEdgeSource[4]);\r\n curEdge.multiply(size);\r\n\r\n // calculate intersection point\r\n let flag = 0;\r\n if (curEdgeSource[2] === 0) flag = CheckX();\r\n if (curEdgeSource[3] === 0) flag = CheckY();\r\n if (curEdgeSource[4] === 0) flag = CheckZ();\r\n\r\n // mark corresponding corner (if plane cuts through one)\r\n if (flag === -2) {\r\n cornerMark[curEdgeSource[0]] = 1;\r\n } else if (flag === 2) {\r\n cornerMark[curEdgeSource[1]] = 1;\r\n } else if (flag === 0) {\r\n // edge is not intersected by the plane (doesn't produce a vertex)\r\n edgeMark[curEdgeIdx] = 0;\r\n }\r\n }\r\n\r\n const face = {\r\n indices: [],\r\n norm: norm.clone().negate(),\r\n };\r\n\r\n let nextVertex = 8;\r\n\r\n // for each marked corner\r\n for (i = 0; i < 8; ++i) {\r\n if (cornerMark[i] === 1) {\r\n // add corner as vertex to the face\r\n vert[nextVertex].set(corners[i][0], corners[i][1], corners[i][2]).multiply(size);\r\n face.indices.push(nextVertex++);\r\n // skip adjacent edges\r\n edgeMark[corners[i][3]] = 0;\r\n edgeMark[corners[i][4]] = 0;\r\n edgeMark[corners[i][5]] = 0;\r\n }\r\n }\r\n\r\n // for each edge that has internal intersection\r\n for (i = 0; i < 12; ++i) {\r\n if (edgeMark[i] === 1) {\r\n // add intersection point as vertex to the face\r\n vert[nextVertex].copy(edgeIntersections[i]);\r\n face.indices.push(nextVertex++);\r\n }\r\n }\r\n\r\n this.faces[6] = face;\r\n\r\n const diff = new THREE.Vector3();\r\n const coplanarPoint = new THREE.Vector3();\r\n this.clipPlane.coplanarPoint(coplanarPoint);\r\n for (i = 0; i < vert.length; ++i) {\r\n this.cullFlag[i] = false;\r\n if (i < 8) {\r\n // corners should be culled by clipping plane\r\n diff.subVectors(vert[i], coplanarPoint);\r\n this.cullFlag[i] = (norm.dot(diff) >= 0.0);\r\n } else if (i < 8 + face.indices.length) {\r\n // cross section vertices don't get culled\r\n this.cullFlag[i] = true;\r\n }\r\n }\r\n\r\n // write data to vertex buffer\r\n const positions = this.geometry.getAttribute('position');\r\n let idx = 0;\r\n for (i = 0; i < vert.length; ++i) {\r\n positions.array[idx++] = vert[i].x;\r\n positions.array[idx++] = vert[i].y;\r\n positions.array[idx++] = vert[i].z;\r\n }\r\n positions.needsUpdate = true;\r\n }\r\n\r\n _collectVertices(face, filter) {\r\n let i;\r\n const vert = this.vertices;\r\n face.indices = [];\r\n for (i = 0; i < vert.length; ++i) {\r\n if (this.cullFlag[i] && filter(vert[i])) {\r\n face.indices.push(i);\r\n }\r\n }\r\n }\r\n\r\n _sortIndices(face, right) {\r\n let i;\r\n let j;\r\n const vert = this.vertices;\r\n const angle = [];\r\n\r\n const dir = new THREE.Vector3();\r\n for (i = 1; i < face.indices.length; ++i) {\r\n dir.subVectors(vert[face.indices[i]], vert[face.indices[0]]);\r\n dir.normalize();\r\n dir.cross(right);\r\n dir.negate();\r\n angle[i] = face.norm.dot(dir);\r\n }\r\n\r\n // Exchange sort\r\n for (i = 1; i < face.indices.length - 1; ++i) {\r\n for (j = i + 1; j < face.indices.length; ++j) {\r\n if (angle[j] < angle[i]) {\r\n // swap\r\n let t = angle[i];\r\n angle[i] = angle[j];\r\n angle[j] = t;\r\n\r\n t = face.indices[i];\r\n face.indices[i] = face.indices[j];\r\n face.indices[j] = t;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _updateIndices() {\r\n // Algorithm:\r\n // 1. Get plane vertices (from 3 to 6 vertices)\r\n // 2. Get \"right\" vector in plane\r\n // 3. Sort vertices using Graham-like method\r\n // 4. Create indices\r\n\r\n let i;\r\n let faceIdx;\r\n let face;\r\n const vert = this.vertices;\r\n const { size } = this;\r\n\r\n this._collectVertices(this.faces[0], (vertex) => vertex.z === -size.z);\r\n this._collectVertices(this.faces[1], (vertex) => vertex.z === size.z);\r\n this._collectVertices(this.faces[2], (vertex) => vertex.y === -size.y);\r\n this._collectVertices(this.faces[3], (vertex) => vertex.y === size.y);\r\n this._collectVertices(this.faces[4], (vertex) => vertex.x === -size.x);\r\n this._collectVertices(this.faces[5], (vertex) => vertex.x === size.x);\r\n\r\n const vCenter = new THREE.Vector3();\r\n const vRight = new THREE.Vector3();\r\n const vDir = new THREE.Vector3();\r\n\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n\r\n if (face.indices.length === 0) continue;\r\n\r\n vCenter.set(0, 0, 0);\r\n for (i = 0; i < face.indices.length; ++i) {\r\n vCenter.add(vert[face.indices[i]]);\r\n }\r\n vCenter.multiplyScalar(1.0 / face.indices.length);\r\n vRight.subVectors(vert[face.indices[0]], vCenter);\r\n vRight.normalize();\r\n\r\n const rightProj = [];\r\n for (i = 0; i < face.indices.length; ++i) {\r\n vDir.subVectors(vert[face.indices[i]], vCenter);\r\n rightProj[i] = vDir.dot(vRight);\r\n }\r\n for (i = 1; i < face.indices.length; ++i) {\r\n if (rightProj[i] < rightProj[0]) {\r\n // swap\r\n let t = rightProj[0];\r\n rightProj[0] = rightProj[i];\r\n rightProj[i] = t;\r\n\r\n [t] = face.indices;\r\n face.indices[0] = face.indices[i];\r\n face.indices[i] = t;\r\n }\r\n }\r\n\r\n this._sortIndices(face, vRight);\r\n }\r\n\r\n let numIndices = 0;\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n if (face.indices.length >= 3) {\r\n numIndices += 3 * (face.indices.length - 2);\r\n }\r\n }\r\n let offset = 0;\r\n const indices = new Uint16Array(numIndices);\r\n for (faceIdx = 0; faceIdx < this.faces.length; ++faceIdx) {\r\n face = this.faces[faceIdx];\r\n for (i = 0; i < face.indices.length - 2; ++i) {\r\n indices[offset] = face.indices[0]; // eslint-disable-line prefer-destructuring\r\n indices[offset + 1] = face.indices[i + 1];\r\n indices[offset + 2] = face.indices[i + 2];\r\n offset += 3;\r\n }\r\n }\r\n\r\n this.geometry.setIndex(new THREE.BufferAttribute(indices, 1));\r\n }\r\n\r\n setDataSource(dataSource) {\r\n const vm = new VolumeMaterial.VolumeMaterial();\r\n const dim = dataSource.getDimensions();\r\n const stride = dataSource.getTiledTextureStride();\r\n const texture = dataSource.buildTiledTexture();\r\n const bbox = dataSource.getBox();\r\n vm.uniforms.volumeDim.value.set(dim[0], dim[1], dim[2]);\r\n vm.uniforms.tileTex.value = texture;\r\n vm.uniforms.tileTexSize.value.set(texture.image.width, texture.image.height);\r\n vm.uniforms.tileStride.value.set(stride[0], stride[1]);\r\n Object.assign(this.volumeInfo, dataSource.getVolumeInfo());\r\n\r\n const volInfo = this.volumeInfo;\r\n vm.uniforms.delta.value.copy(volInfo.delta);\r\n vm.uniforms.boxAngles.value.set(volInfo.obtuseAngle[0], volInfo.obtuseAngle[1], volInfo.obtuseAngle[2]);\r\n\r\n this.material = vm;\r\n\r\n bbox.getSize(this.scale);\r\n bbox.getCenter(this.position);\r\n }\r\n\r\n _updateIsoLevel() {\r\n const { kSigma, kSigmaMed, kSigmaMax } = settings.now.modes.VD;\r\n const volInfo = this.volumeInfo;\r\n const mean = volInfo.dmean - volInfo.dmin;\r\n const span = volInfo.dmax - volInfo.dmin;\r\n const level = (k) => (mean + k * volInfo.sd) / span;\r\n this.material.uniforms._isoLevel0.value.set(level(kSigma), level(kSigmaMed), level(kSigmaMax));\r\n }\r\n\r\n static _nearClipPlaneOffset = 0.2;\r\n\r\n static _pos = new THREE.Vector3();\r\n\r\n static _norm = new THREE.Vector3();\r\n\r\n static _norm4D = new THREE.Vector4();\r\n\r\n static _matrixWorldToLocal = new THREE.Matrix4();\r\n\r\n static _clipPlane = new THREE.Plane();\r\n\r\n rebuild(camera) {\r\n const nearClipPlaneOffset = VolumeMesh._nearClipPlaneOffset;\r\n const pos = VolumeMesh._pos;\r\n const norm = VolumeMesh._norm;\r\n const norm4D = VolumeMesh._norm4D;\r\n const matrixWorldToLocal = VolumeMesh._matrixWorldToLocal;\r\n const clipPlane = VolumeMesh._clipPlane;\r\n\r\n this._updateIsoLevel();\r\n\r\n // get clip plane in local space\r\n camera.getWorldDirection(norm);\r\n camera.getWorldPosition(pos);\r\n pos.addScaledVector(norm, camera.near + nearClipPlaneOffset);\r\n\r\n // transform pos to local CS\r\n matrixWorldToLocal.copy(this.matrixWorld).invert();\r\n pos.applyMatrix4(matrixWorldToLocal);\r\n\r\n // transform norm to local CS\r\n norm4D.set(norm.x, norm.y, norm.z, 0.0); // NOTE: use homogeneous norm for proper transformation\r\n norm4D.applyMatrix4(matrixWorldToLocal);\r\n norm.copy(norm4D);\r\n norm.normalize();\r\n\r\n clipPlane.setFromNormalAndCoplanarPoint(norm, pos);\r\n\r\n if (!this.clipPlane.equals(clipPlane)) {\r\n this.clipPlane = clipPlane.clone();\r\n this._updateVertices();\r\n this._updateIndices();\r\n }\r\n }\r\n}\r\n\r\nexport default VolumeMesh;\r\n","import * as THREE from 'three';\r\nimport gfxutils from './gfxutils';\r\n\r\nfunction _flattenArray(input) {\r\n const n = input.length;\r\n const output = new Float32Array(n * 3);\r\n for (let i = 0; i < n; ++i) {\r\n const j = 3 * i;\r\n const v = input[i];\r\n output[j] = v.x;\r\n output[j + 1] = v.y;\r\n output[j + 2] = v.z;\r\n }\r\n return output;\r\n}\r\n\r\nclass VolumeBounds {\r\n static _projectionTable = { // corresponds between (origin axes and angles between them) and between saving vector coordinates\r\n XY: ['x', 2],\r\n XZ: ['y', 1],\r\n YZ: ['z', 0],\r\n };\r\n\r\n constructor(bBox, volInfo) {\r\n const { delta } = volInfo; // {x: XY, y : XZ, z: YZ}\r\n const { obtuseAngle } = volInfo; // 1 - obtuse, 0 - acute\r\n\r\n const bSize = new THREE.Vector3();\r\n bBox.getSize(bSize);\r\n bSize.multiplyScalar(0.5);\r\n\r\n const offsetVert = this._getBaseVertices(delta, obtuseAngle);\r\n\r\n const geometry = new THREE.BufferGeometry();\r\n const vertices = [];\r\n\r\n for (let i = 0; i < 4; i++) {\r\n vertices.push(offsetVert[i].clone().multiply(bSize));\r\n vertices.push(offsetVert[(i + 1) % 4].clone().multiply(bSize));\r\n }\r\n const translation = new THREE.Vector3(2 * bSize.x * (1 - delta.x - delta.y), 0, 0);\r\n for (let i = 0; i < 8; i++) {\r\n vertices.push(vertices[i].clone().add(translation));\r\n }\r\n for (let i = 0; i < 4; i++) {\r\n vertices.push(vertices[i * 2].clone());\r\n vertices.push(vertices[i * 2 + 8].clone());\r\n }\r\n const center = new THREE.Vector3();\r\n bBox.getCenter(center);\r\n vertices.forEach((vertex) => vertex.add(center)); // pivot shift\r\n\r\n const flatVertices = _flattenArray(vertices);\r\n geometry.setAttribute('position', new THREE.BufferAttribute(flatVertices, 3));\r\n\r\n this._lines = new THREE.LineSegments(geometry, new THREE.LineBasicMaterial({ color: 0xFFFFFF }));\r\n this._lines.layers.set(gfxutils.LAYERS.VOLUME);\r\n }\r\n\r\n // Set one edge (4 points) of frame, from which with parallel transfer the rest of the frame points can be obtained\r\n _getBaseVertices(delta, obtuseAngle) {\r\n const projTable = VolumeBounds._projectionTable;\r\n\r\n const proj = ((index, inv) => { // tricky function to take account of projections: their position(related to box) and sign\r\n const currDelta = delta[projTable[index][0]];\r\n const angleValue = -0.5 * (inv - 1) + inv * obtuseAngle[projTable[index][1]];// inv = 1: alpha; inv = -1: 1 - alpha\r\n return angleValue * currDelta;\r\n });\r\n\r\n const offsetVert = [\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', 1) + proj('XY', 1)), -1 + 2 * proj('YZ', 1), -1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', -1) + proj('XY', 1)), -1 + 2 * proj('YZ', -1), 1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', -1) + proj('XY', -1)), 1 - 2 * proj('YZ', 1), 1),\r\n new THREE.Vector3(-1 + 2 * (proj('XZ', 1) + proj('XY', -1)), 1 - 2 * proj('YZ', -1), -1),\r\n ];\r\n\r\n return offsetVert;\r\n }\r\n\r\n getMesh() {\r\n return this._lines;\r\n }\r\n}\r\n\r\nexport default VolumeBounds;\r\n","import * as THREE from 'three';\r\nimport VolumeMaterial from './shaders/VolumeMaterial';\r\nimport meshes from './meshes/meshes';\r\nimport gfxutils from './gfxutils';\r\n\r\n// Thes geometric far plane is required for correct filling in the BFTexture in case, when far plane cuts the volume\r\n// cube. In cut place of cube there is no correct data in BFTexture and volume rendering integral is calculated\r\n// with errors.\r\n// Far plane cuts the cube in case of large volume scale (zoom), because farplane doesn't change\r\nclass VolumeFarPlane {\r\n // create plane with unit corners coords (for future rescale in vshader according to camera properties)\r\n constructor(volume, width, height) {\r\n const planeGeo = this._initPlaneGeo(width, height);\r\n\r\n const mat = new VolumeMaterial.BackFacePosMaterialFarPlane();\r\n this._plane = new meshes.Mesh(planeGeo, mat);\r\n this._plane.frustumCulled = false;\r\n this._plane.doubleSided = true;\r\n const matWorldToVolume = new THREE.Matrix4();\r\n\r\n this._plane._onBeforeRender = function (_renderer, _scene, camera, _geometry, _material, _group) {\r\n const { material } = this;\r\n if (!volume || !material) {\r\n return;\r\n }\r\n\r\n // count point in world at farplane place\r\n const planeCamPos = new THREE.Vector4(0, 0, -(camera.far - 0.1), 1);\r\n planeCamPos.applyMatrix4(camera.matrixWorld);\r\n\r\n // recalc matrices to make plane be placed as farplane in the World relative to camera\r\n this.matrix.identity();\r\n this.matrix.makeTranslation(planeCamPos.x, planeCamPos.y, planeCamPos.z);\r\n this.matrixWorld.copy(this.matrix);\r\n this.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, this.matrixWorld);\r\n this.normalMatrix.getNormalMatrix(this.modelViewMatrix);\r\n\r\n // build worldToVolume matrix to transform plane into volumeCS (volumeCS coords are written to BackFaceTexture)\r\n const volumeMatrix = volume.matrixWorld;\r\n matWorldToVolume.copy(volumeMatrix).invert();\r\n\r\n // update material props\r\n material.uniforms.aspectRatio.value = camera.aspect;\r\n material.uniforms.farZ.value = camera.far;\r\n material.uniforms.tanHalfFOV.value = Math.tan(THREE.MathUtils.DEG2RAD * 0.5 * camera.fov);\r\n material.uniforms.matWorld2Volume.value = matWorldToVolume;\r\n };\r\n\r\n // set it to special layer to draw only into BFTexture\r\n this._plane.layers.set(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n }\r\n\r\n _initPlaneGeo(width, height) {\r\n const planeGeo = new THREE.BufferGeometry();\r\n\r\n width = width || 1;\r\n height = height || 1;\r\n\r\n const vertices = new Float32Array([\r\n -0.5 * width, 0.5 * height, 0,\r\n 0.5 * width, 0.5 * height, 0,\r\n -0.5 * width, -0.5 * height, 0,\r\n 0.5 * width, -0.5 * height, 0,\r\n ]);\r\n\r\n planeGeo.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n planeGeo.setIndex([0, 2, 1, 2, 3, 1]);\r\n\r\n return planeGeo;\r\n }\r\n\r\n getMesh() {\r\n return this._plane;\r\n }\r\n}\r\n\r\nexport default VolumeFarPlane;\r\n","import * as THREE from 'three';\r\nimport VolumeMesh from './gfx/VolumeMesh';\r\nimport VolumeBounds from './gfx/VolumeBounds';\r\nimport VolumeFarPlane from './gfx/VolumeFarPlane';\r\nimport Visual from './Visual';\r\nimport settings from './settings';\r\n\r\nclass VolumeVisual extends Visual {\r\n constructor(name, dataSource) {\r\n super(name, dataSource);\r\n this._mesh = new VolumeMesh();\r\n this._mesh.setDataSource(dataSource);\r\n this.add(this._mesh);\r\n\r\n this._frame = new VolumeBounds(this.getBoundaries().boundingBox, this._mesh.volumeInfo);\r\n this.add(this._frame.getMesh());\r\n this.showFrame(settings.now.modes.VD.frame);\r\n\r\n this._farPlane = new VolumeFarPlane(this._mesh, 2, 2);\r\n this.add(this._farPlane.getMesh());\r\n }\r\n\r\n getBoundaries() {\r\n const box = this._dataSource.getBox();\r\n const sphere = new THREE.Sphere();\r\n box.getBoundingSphere(sphere);\r\n\r\n return {\r\n boundingBox: box,\r\n boundingSphere: sphere,\r\n };\r\n }\r\n\r\n getMesh() {\r\n return this._mesh;\r\n }\r\n\r\n showFrame(needShow) {\r\n this._frame.getMesh().material.visible = needShow;\r\n }\r\n}\r\n\r\nexport default VolumeVisual;\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available loaders.\r\n * @extends EntityList\r\n */\r\nclass LoaderList extends EntityList {\r\n /**\r\n * Create a list of loaders.\r\n * The loaders are indexed by supported source types (`.types` property of a Loader\r\n * subclass).\r\n * The loaders can be retrieved later by matching against specs (see {@link LoaderList#find}).\r\n *\r\n * @param {!Array=} someLoaders A list of {@link Loader} subclasses to\r\n * automatically register at creation time.\r\n * @see LoaderList#register\r\n */\r\n constructor(someLoaders = []) {\r\n super(someLoaders, ['types']);\r\n }\r\n\r\n /**\r\n * Find a suitable loader for a source type.\r\n *\r\n * @param {Object} specs Loader specifications.\r\n * @param {string=} specs.type Supported source type.\r\n * @param {*=} specs.source Source to load from.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.type) {\r\n list = this._dict.types[specs.type.toLowerCase()] || [];\r\n } else if (specs.source) {\r\n return this._list.filter((SomeLoader) => SomeLoader.canProbablyLoad && SomeLoader.canProbablyLoad(specs.source));\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default LoaderList;\r\n","import EventDispatcher from '../../utils/EventDispatcher';\r\nimport makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Loader extends EventDispatcher {\r\n constructor(source, options) {\r\n super();\r\n this._source = source;\r\n this._options = options || {};\r\n this._abort = false;\r\n this._agent = null;\r\n }\r\n\r\n load() {\r\n return Promise.reject(new Error('Loading from this source is not implemented'));\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n if (this._agent) {\r\n this._agent.abort();\r\n }\r\n }\r\n\r\n static extractName(_source) {\r\n return undefined;\r\n }\r\n}\r\n\r\nmakeContextDependent(Loader.prototype);\r\n","import Loader from './Loader';\r\n\r\nexport default class FileLoader extends Loader {\r\n constructor(source, options) {\r\n super(source, options);\r\n\r\n options = this._options;\r\n this._binary = options.binary === true;\r\n }\r\n\r\n load() {\r\n return new Promise((resolve, reject) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n\r\n const blob = this._source;\r\n const reader = this._agent = new FileReader();\r\n\r\n reader.addEventListener('load', () => {\r\n resolve(reader.result);\r\n });\r\n reader.addEventListener('error', () => {\r\n reject(reader.error);\r\n });\r\n reader.addEventListener('abort', () => {\r\n reject(new Error('Loading aborted'));\r\n });\r\n reader.addEventListener('progress', (event) => {\r\n this.dispatchEvent(event);\r\n });\r\n\r\n if (this._binary) {\r\n reader.readAsArrayBuffer(blob);\r\n } else {\r\n reader.readAsText(blob);\r\n }\r\n });\r\n }\r\n\r\n static canProbablyLoad(source) {\r\n return (File && source instanceof File) || (Blob && source instanceof Blob);\r\n }\r\n\r\n static extractName(source) {\r\n return source && source.name;\r\n }\r\n}\r\n\r\nFileLoader.types = ['file', 'blob'];\r\n","import _ from 'lodash';\r\nimport Loader from './Loader';\r\n\r\n// we don't need to detect all kinds of URLs, just the evident ones\r\nconst urlStartRegexp = /^(https?|ftp):\\/\\//i;\r\n\r\nexport default class XHRLoader extends Loader {\r\n constructor(source, options) {\r\n super(source, options);\r\n\r\n options = this._options;\r\n this._binary = (options.binary === true);\r\n }\r\n\r\n load() {\r\n return new Promise((resolve, reject) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n\r\n const url = this._source;\r\n const request = this._agent = new XMLHttpRequest();\r\n\r\n request.addEventListener('load', () => {\r\n if (request.status === 200) {\r\n resolve(request.response);\r\n } else {\r\n reject(new Error(`HTTP ${request.status} while fetching ${url}`));\r\n }\r\n });\r\n request.addEventListener('error', () => {\r\n reject(new Error('HTTP request failed'));\r\n });\r\n request.addEventListener('abort', () => {\r\n reject(new Error('Loading aborted'));\r\n });\r\n request.addEventListener('progress', (event) => {\r\n this.dispatchEvent(event);\r\n });\r\n\r\n request.open('GET', url);\r\n if (this._binary) {\r\n request.responseType = 'arraybuffer';\r\n } else {\r\n request.responseType = 'text';\r\n }\r\n request.send();\r\n });\r\n }\r\n\r\n static canProbablyLoad(source) {\r\n return _.isString(source) && urlStartRegexp.test(source);\r\n }\r\n\r\n static extractName(source) {\r\n if (source) {\r\n const last = (source.indexOf('?') + 1 || source.lastIndexOf('#') + 1 || source.length + 1) - 1;\r\n return source.slice(source.lastIndexOf('/', last) + 1, last);\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nXHRLoader.types = ['url'];\r\n","import Loader from './Loader';\r\n\r\nexport default class ImmediateLoader extends Loader {\r\n load() {\r\n return new Promise((resolve) => {\r\n if (this._abort) {\r\n throw new Error('Loading aborted');\r\n }\r\n resolve(this._source);\r\n });\r\n }\r\n\r\n static canProbablyLoad(_source) {\r\n return false;\r\n }\r\n}\r\n\r\nImmediateLoader.types = ['immediate'];\r\n","import LoaderList from './loaders/LoaderList';\r\n\r\nimport FileLoader from './loaders/FileLoader';\r\nimport XHRLoader from './loaders/XHRLoader';\r\nimport ImmediateLoader from './loaders/ImmediateLoader';\r\n\r\nexport default new LoaderList([\r\n // note: order might be important\r\n FileLoader,\r\n XHRLoader,\r\n ImmediateLoader,\r\n]);\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available parsers.\r\n * @extends EntityList\r\n */\r\nclass ParserList extends EntityList {\r\n /**\r\n * Create a list of parsers.\r\n * The parsers are indexed by supported data formats and file extensions (`.formats` and\r\n * `.extensions` properties of a Parser subclass).\r\n * The parsers can be retrieved later by matching against specs (see {@link ParsrerList#find}).\r\n *\r\n * @param {!Array=} someParsers A list of {@link Parser} subclasses to\r\n * automatically register at creation time.\r\n * @see ParserList#register\r\n */\r\n constructor(someParsers = []) {\r\n super(someParsers, ['formats', 'extensions']);\r\n }\r\n\r\n /**\r\n * Find a suitable parser for data.\r\n *\r\n * @param {Object} specs Parser specifications.\r\n * @param {string=} specs.format Supported data format.\r\n * @param {string=} specs.ext Supported filename extension.\r\n * @param {*=} specs.data Data to parse.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.format) {\r\n list = this._dict.formats[specs.format.toLowerCase()] || [];\r\n } else if (specs.ext) {\r\n list = this._dict.extensions[specs.ext.toLowerCase()] || [];\r\n }\r\n // autodetect only if no format is forced\r\n if (list.length === 0 && !specs.format && specs.data) {\r\n return this._list.filter((SomeParser) => SomeParser.canProbablyParse && SomeParser.canProbablyParse(specs.data));\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default ParserList;\r\n","import makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Parser {\r\n constructor(data, options) {\r\n this._data = data;\r\n this._options = options || {};\r\n this._abort = false;\r\n }\r\n\r\n parseSync() {\r\n throw new Error('Parsing this type of data is not implemented');\r\n }\r\n\r\n parse() {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n try {\r\n if (this._abort) {\r\n return reject(new Error('Parsing aborted'));\r\n }\r\n return resolve(this.parseSync());\r\n } catch (error) {\r\n return reject(error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // only for volume Parsers\r\n getModel() {\r\n this.model._parseHeader(this._data);\r\n return this.model;\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n }\r\n}\r\n\r\nmakeContextDependent(Parser.prototype);\r\n","import * as THREE from 'three';\r\n\r\n/**\r\n * Parser helper for PDB tag \"REMARK 290\".\r\n *\r\n * @exports Remark290\r\n * @constructor\r\n */\r\nclass Remark290 {\r\n constructor() {\r\n /** @type {THREE.Matrix4[]} */\r\n this.matrices = [];\r\n\r\n /** @type {?THREE.Matrix4} */\r\n this._matrix = null;\r\n /** @type {number} */\r\n this._matrixIndex = -1;\r\n }\r\n\r\n /**\r\n * Parse a single line of a stream.\r\n * @param {PDBStream} stream - stream to parse\r\n */\r\n\r\n parse(stream) {\r\n /** @type {?THREE.Matrix4} */\r\n let matrix = this._matrix;\r\n\r\n if (stream.readString(12, 18) === ' SMTRY') {\r\n const matrixRow = stream.readCharCode(19) - 49; // convert '1', '2', or '3' -> 0, 1, or 2\r\n const matrixData = stream.readString(20, 80).trim().split(/\\s+/);\r\n const matrixIndex = parseInt(matrixData[0], 10);\r\n if (this._matrix === null || matrixIndex !== this._matrixIndex) {\r\n // TODO: assert(matrixIndex === this.matrices.length + 1);\r\n this._matrixIndex = matrixIndex;\r\n this._matrix = matrix = new THREE.Matrix4();\r\n this.matrices[this.matrices.length] = matrix;\r\n }\r\n\r\n const { elements } = matrix;\r\n elements[matrixRow] = parseFloat(matrixData[1]);\r\n elements[matrixRow + 4] = parseFloat(matrixData[2]);\r\n elements[matrixRow + 8] = parseFloat(matrixData[3]);\r\n elements[matrixRow + 12] = parseFloat(matrixData[4]);\r\n }\r\n }\r\n}\r\n\r\nRemark290.prototype.id = 290;\r\n\r\nexport default Remark290;\r\n","import * as THREE from 'three';\r\nimport chem from '../../../chem';\r\n\r\nconst { Assembly } = chem;\r\n\r\n/**\r\n * Parser helper for PDB tag \"REMARK 350\".\r\n *\r\n * @exports Remark350\r\n * @constructor\r\n */\r\nclass Remark350 {\r\n constructor(complex) {\r\n /** @type {Complex} */\r\n this._complex = complex;\r\n /** @type {Assembly[]} */\r\n this.assemblies = [];\r\n\r\n /** @type {?Assembly} */\r\n this._assembly = null;\r\n /** @type {?THREE.Matrix4} */\r\n this._matrix = null;\r\n /** @type {number} */\r\n this._matrixIndex = -1;\r\n }\r\n\r\n /**\r\n * Parse a single line of a stream.\r\n * @param {PDBStream} stream - stream to parse\r\n */\r\n\r\n parse(stream) {\r\n /** @type {?Assembly} */\r\n let assembly = this._assembly;\r\n /** @type {?THREE.Matrix4} */\r\n let matrix = this._matrix;\r\n\r\n if (assembly && stream.readString(12, 18) === ' BIOMT') {\r\n const matrixRow = stream.readCharCode(19) - 49; // convert '1', '2', or '3' -> 0, 1, or 2\r\n const matrixData = stream.readString(20, 80).trim().split(/\\s+/);\r\n const matrixIndex = parseInt(matrixData[0], 10);\r\n if (this._matrix === null || matrixIndex !== this._matrixIndex) {\r\n // TODO: assert(matrixIndex === assembly.matrices.length + 1);\r\n this._matrixIndex = matrixIndex;\r\n this._matrix = matrix = new THREE.Matrix4();\r\n assembly.addMatrix(matrix);\r\n }\r\n\r\n const { elements } = matrix;\r\n elements[matrixRow] = parseFloat(matrixData[1]);\r\n elements[matrixRow + 4] = parseFloat(matrixData[2]);\r\n elements[matrixRow + 8] = parseFloat(matrixData[3]);\r\n elements[matrixRow + 12] = parseFloat(matrixData[4]);\r\n } else if (assembly && stream.readString(35, 41) === 'CHAINS:') {\r\n const entries = stream.readString(42, 80).split(',');\r\n for (let i = 0, n = entries.length; i < n; ++i) {\r\n const chain = entries[i].trim();\r\n if (chain.length > 0) {\r\n assembly.addChain(chain);\r\n }\r\n }\r\n } else if (stream.readString(12, 23) === 'BIOMOLECULE:') {\r\n // assert molIndex === this.assemblies.length + 1\r\n this._matrix = null;\r\n this._matrixIndex = -1;\r\n this._assembly = assembly = new Assembly(this._complex);\r\n this.assemblies.push(assembly);\r\n }\r\n }\r\n}\r\n\r\nRemark350.prototype.id = 350;\r\n\r\nexport default Remark350;\r\n","/** Helper class for stream-like reading input files. */\r\nclass PDBStream {\r\n /**\r\n * Create a stream\r\n * @param {String} data Input data\r\n */\r\n constructor(data) {\r\n /** @type String */\r\n this._data = data; // Input file\r\n /** @type Number */\r\n this._start = 0; // Starting position of line\r\n /** @type Number */\r\n this._nextCR = -1; // Position of next CR (0x0D)\r\n /** @type Number */\r\n this._nextLF = -1; // Position of next LF (0x0A)\r\n /** @type Number */\r\n this._next = -1; // End position of line\r\n /** @type Number */\r\n this._end = data.length; // End of data\r\n\r\n this.next();\r\n }\r\n\r\n /**\r\n * Reading next line.\r\n * @returns {String} Next line in data (ending with LF or CR)\r\n */\r\n readLine() {\r\n return this._data.slice(this._start, this._next);\r\n }\r\n\r\n /**\r\n * Reading character from position.\r\n * @param {Number} pos - Position in current line.\r\n * @returns {String} Character from position\r\n */\r\n readChar(pos) {\r\n pos = this._start + pos - 1;\r\n return pos < this._next ? this._data[pos] : ' ';\r\n }\r\n\r\n /**\r\n * Reading character code from position.\r\n * @param {Number} pos - Position in current line.\r\n * @returns {Number} Character code from position\r\n */\r\n readCharCode(pos) {\r\n pos = this._start + pos - 1;\r\n return pos < this._next ? this._data.charCodeAt(pos) : 32;\r\n }\r\n\r\n /**\r\n * Reading string from begin to end points.\r\n * For a reason unknown, numbering assumed not to start from 0, but from 1.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {String} String from begin to end\r\n */\r\n readString(begin, end) {\r\n const from = this._start + begin - 1;\r\n const to = this._start + end;\r\n return this._data.slice(from, to < this._next ? to : this._next);\r\n }\r\n\r\n /**\r\n * Reading integer from begin to end points.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {Number} Integer from begin to end\r\n */\r\n readInt(begin, end) {\r\n return parseInt(this.readString(begin, end), 10);\r\n }\r\n\r\n /**\r\n * Reading float from begin to end points.\r\n * @param {Number} begin - Begin point in current line.\r\n * @param {Number} end - End point in current line.\r\n * @returns {Number} Float from begin to end\r\n */\r\n readFloat(begin, end) {\r\n return parseFloat(this.readString(begin, end));\r\n }\r\n\r\n /**\r\n * Checking for end of data.\r\n * @returns {boolean} True if data is ended, false otherwise\r\n */\r\n end() {\r\n return this._start >= this._end;\r\n }\r\n\r\n /**\r\n * Procedure to re-arrange current pointers in data.\r\n */\r\n next() {\r\n const start = this._next + 1;\r\n this._start = start < this._end ? start : this._end;\r\n\r\n // support CR, LF, CR+LF line endings\r\n // do not support LF+CR, CR+CR+LF, and other strange combinations\r\n\r\n if (this._start > this._nextCR) {\r\n this._nextCR = (this._data.indexOf('\\r', this._start) + 1 || this._end + 1) - 1;\r\n }\r\n if (this._start > this._nextLF) {\r\n this._nextLF = (this._data.indexOf('\\n', this._start) + 1 || this._end + 1) - 1;\r\n }\r\n this._next = this._nextCR + 1 < this._nextLF ? this._nextCR : this._nextLF;\r\n }\r\n}\r\n\r\nexport default PDBStream;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport Remark290 from './pdb/Remark290';\r\nimport Remark350 from './pdb/Remark350';\r\nimport PDBStream from './PDBStream';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst TAG_LENGTH = 6;\r\n\r\nfunction nameToElement(name) {\r\n // http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM\r\n //\r\n // http://www.cgl.ucsf.edu/chimera/docs/UsersGuide/tutorials/pdbintro.html#note1\r\n //\r\n // Atom names start with element symbols right-justified in columns 13-14\r\n // as permitted by the length of the name. For example, the symbol FE for\r\n // iron appears in columns 13-14, whereas the symbol C for carbon appears\r\n // in column 14 (see Misaligned Atom Names). If an atom name has four\r\n // characters, however, it must start in column 13 even if the element\r\n // symbol is a single character (for example, see Hydrogen Atoms).\r\n\r\n const veryLong = name.trim().length === 4;\r\n return name.slice(0, veryLong ? 1 : 2).trim();\r\n}\r\n\r\n// the most frequently used beginnings; although HEADER is mandatory, it is often missing in handmade files\r\nconst pdbStartRegexp = /^(HEADER\\s|COMPND\\s|REMARK\\s|ATOM {2}|HETATM|MODEL )/i;\r\n\r\nconst remarkParsers = {\r\n // NOTE: please forget the idea to build the method name in runtime, it can be obfuscated.\r\n 290: Remark290,\r\n 350: Remark350,\r\n};\r\n\r\nclass PDBParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._sheet = null;\r\n this._serialAtomMap = null;\r\n this._modelId = 1;\r\n this._compaundFound = false;\r\n this._biomoleculeFound = false;\r\n this._allowedChainsIDs = null;\r\n this._lastMolId = -1;\r\n\r\n this._remarks = {};\r\n this._remark = null;\r\n\r\n this._molecules = [];\r\n this._molecule = null;\r\n this._compndCurrToken = '';\r\n\r\n this._options.fileType = 'pdb';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && pdbStartRegexp.test(data);\r\n }\r\n\r\n _finalize() {\r\n this._fixBondsArray();\r\n this._fixChains();\r\n\r\n // keep crystallographic symmetry transformations\r\n const remark290 = this._remarks[290];\r\n this._complex.symmetry = _.isUndefined(remark290) ? [] : remark290.matrices;\r\n\r\n // add loaded biological assemblies\r\n const remark350 = this._remarks[350];\r\n this._complex.units = this._complex.units.concat(_.isUndefined(remark350) ? [] : remark350.assemblies);\r\n\r\n // add loaded macromolecules\r\n this._finalizeMolecules();\r\n\r\n // create secondary structure etc.\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n _finalizeMolecules() {\r\n // get chains from complex\r\n const chainDict = {};\r\n let i;\r\n const chains = this._complex._chains;\r\n for (i = 0; i < chains.length; ++i) {\r\n const chainObj = chains[i];\r\n const chainName = chainObj._name;\r\n chainDict[chainName] = chainObj;\r\n }\r\n\r\n // aggregate residues from chains\r\n for (i = 0; i < this._molecules.length; i++) {\r\n const m = this._molecules[i];\r\n let residues = [];\r\n for (let j = 0; j < m._chains.length; j++) {\r\n const name = m._chains[j];\r\n const chain = chainDict[name];\r\n residues = residues.concat(chain._residues.slice());\r\n }\r\n const molecule = new Molecule(this._complex, m._name, i + 1);\r\n molecule.residues = residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n _fixChains() {\r\n const idChainMap = {};\r\n const complex = this._complex;\r\n\r\n // prepare\r\n for (let i = 0; i < complex._chains.length; i++) {\r\n const chain = complex._chains[i];\r\n idChainMap[chain._name.charCodeAt(0)] = chain;\r\n }\r\n }\r\n\r\n // FIXME: This function is redundant, CONECT records always follow ATOM and HETATM. Build the map online.\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const complex = this._complex;\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, ni = atoms.length; i < ni; ++i) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n const bonds = complex._bonds;\r\n const { logger } = this;\r\n for (let j = 0, nj = bonds.length; j < nj; ++j) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n logger.debug('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _parseATOM(stream) {\r\n if (this._modelId !== 1) {\r\n return;\r\n }\r\n\r\n const het = stream.readCharCode(1) === 0x48;\r\n\r\n // field names according to wwPDB Format\r\n // NOTE: Chimera allows (nonstandard) use of columns 6-11 for the integer atom serial number in ATOM records.\r\n const serial = het ? stream.readInt(7, 11) : stream.readInt(6, 11);\r\n let name = stream.readString(13, 16);\r\n const altLoc = stream.readChar(17);\r\n const resName = stream.readString(18, 20).trim();\r\n const chainID = stream.readChar(22);\r\n const resSeq = stream.readInt(23, 26);\r\n const iCode = stream.readChar(27);\r\n const x = stream.readFloat(31, 38);\r\n const y = stream.readFloat(39, 46);\r\n const z = stream.readFloat(47, 54);\r\n const occupancy = stream.readFloat(55, 60);\r\n const tempFactor = stream.readFloat(61, 66);\r\n const element = stream.readString(77, 78).trim() || nameToElement(name);\r\n const charge = stream.readInt(79, 80) || 0;\r\n\r\n // skip waters (there may be lots of them)\r\n if (this.settings.now.nowater) {\r\n if (resName === 'HOH' || resName === 'WAT') {\r\n return;\r\n }\r\n }\r\n\r\n // PDB uses positional system for atom names. It helps derive element type from the name\r\n // but names may include extra spaces. From this point on we don't need those spaces anymore.\r\n name = name.trim();\r\n\r\n const type = Element.getByName(element);\r\n const role = Element.Role[name]; // FIXME: Maybe should use type as additional index (\" CA \" vs. \"CA \")\r\n\r\n // NOTE: Residues of a particular chain are not required to be listed next to each other.\r\n // https://github.com/biasmv/pv/commit/7319b898b7473ba380c26699e3b028b2b1a7e1a1\r\n let chain = this._chain;\r\n if (!chain || chain.getName() !== chainID) {\r\n this._chain = chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = null;\r\n }\r\n\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n this._residue = residue = chain.addResidue(resName, resSeq, iCode);\r\n }\r\n\r\n const xyz = new THREE.Vector3(x, y, z);\r\n residue.addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n _parseENDMDL() {\r\n this._modelId += 1;\r\n }\r\n\r\n _parseCONECT(stream) {\r\n const serial0 = stream.readInt(7, 11);\r\n const serial1 = stream.readInt(12, 16);\r\n const serial2 = stream.readInt(17, 21);\r\n const serial3 = stream.readInt(22, 26);\r\n const serial4 = stream.readInt(27, 31);\r\n\r\n const complex = this._complex;\r\n\r\n // Keep bonds ordered by atom serial\r\n if (serial1 && serial1 > serial0) {\r\n complex.addBond(serial0, serial1, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial2 && serial2 > serial0) {\r\n complex.addBond(serial0, serial2, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial3 && serial3 > serial0) {\r\n complex.addBond(serial0, serial3, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n if (serial4 && serial4 > serial0) {\r\n complex.addBond(serial0, serial4, 0, Bond.BondType.UNKNOWN, true);\r\n }\r\n }\r\n\r\n _parseCOMPND(stream) {\r\n const str = stream.readString(11, 80);\r\n const tokenIdx = str.indexOf(':');\r\n this._compndCurrToken = tokenIdx > 0 ? str.substring(0, tokenIdx).trim() : this._compndCurrToken;\r\n\r\n // start reading new molecule\r\n if (this._compndCurrToken === 'MOL_ID') {\r\n this._molecule = { _index: '', _chains: [] };\r\n this._molecule._index = parseInt(str.substring(tokenIdx + 1, str.indexOf(';')), 10);\r\n this._molecules.push(this._molecule);\r\n // parse molecule name\r\n } else if (this._compndCurrToken === 'MOLECULE' && this._molecule != null) {\r\n this._molecule._name = str.substring(tokenIdx + 1, str.indexOf(';')).trim();\r\n // parse molecule chains\r\n } else if (this._compndCurrToken === 'CHAIN' && this._molecule != null) {\r\n let chainStr = str.substring(tokenIdx + 1, 80).trim();\r\n const lastChar = chainStr[chainStr.length - 1];\r\n if (lastChar === ';' || lastChar === ',') {\r\n chainStr = chainStr.slice(0, -1);\r\n }\r\n chainStr = chainStr.replace(/\\s+/g, '');\r\n const chains = chainStr.split(',');\r\n this._molecule._chains = this._molecule._chains.concat(chains);\r\n }\r\n }\r\n\r\n _parseREMARK(stream) {\r\n const remarkNum = stream.readInt(8, 10);\r\n\r\n // create remark parser if needed\r\n let remark = this._remarks[remarkNum];\r\n if (_.isUndefined(remark)) {\r\n const RemarkParser = remarkParsers[remarkNum];\r\n if (_.isFunction(RemarkParser)) {\r\n this._remarks[remarkNum] = remark = new RemarkParser(this._complex);\r\n }\r\n }\r\n\r\n // delegate parsing\r\n if (!_.isUndefined(remark)) {\r\n remark.parse(stream);\r\n }\r\n }\r\n\r\n _parseHELIX(stream) {\r\n const fields = [20, 22, 32, 34];\r\n\r\n this._parseSTRUCTURE(stream, fields, (obj) => {\r\n this._complex.addHelix(obj);\r\n this._complex.structures.push(obj);\r\n });\r\n }\r\n\r\n _parseSHEET(stream) {\r\n const fields = [22, 23, 33, 34];\r\n\r\n this._parseSTRUCTURE(stream, fields, (obj) => {\r\n this._complex.addSheet(obj);\r\n });\r\n }\r\n\r\n _parseSTRUCTURE(stream, pars, adder) {\r\n const startId = 0;\r\n const startIndex = 1;\r\n const endId = 2;\r\n const endIndex = 3;\r\n\r\n // identify fields: debugging and stuff\r\n\r\n const codeOfS = 0x53;\r\n const serialNumber = stream.readInt(8, 10);\r\n const structureName = stream.readString(12, 14).trim(); // FIXME: LString(3) forbids trim()\r\n const comment = stream.readString(41, 70).trim();\r\n const helLength = stream.readInt(72, 76);\r\n const helixClass = stream.readInt(39, 40);\r\n const shWidth = stream.readInt(15, 16);\r\n const shCur = stream.readInt(42, 45);\r\n const shPrev = stream.readInt(57, 60);\r\n\r\n // file fields\r\n const startChainID = stream.readString(pars[startId], pars[endId] + 1).charCodeAt(0);\r\n const endChainID = stream.readString(pars[endId], pars[endId] + 1).charCodeAt(0);\r\n const startSequenceNumber = stream.readInt(pars[startIndex], pars[startIndex] + 3);\r\n let iCodeStr = stream.readString(pars[startIndex] + 4, pars[startIndex] + 4);\r\n let startICode = 0;\r\n\r\n if (iCodeStr.length > 0) {\r\n startICode = iCodeStr.charCodeAt(0);\r\n }\r\n const endSequenceNumber = stream.readInt(pars[endIndex], pars[endIndex] + 3);\r\n iCodeStr = stream.readString(pars[endIndex] + 4, pars[endIndex] + 4);\r\n let endICode = 0;\r\n if (iCodeStr.length > 0) {\r\n endICode = iCodeStr.charCodeAt(0);\r\n }\r\n\r\n let obj;\r\n let cs = this._sheet;\r\n if (stream.readCharCode(1) === codeOfS) {\r\n if (cs !== null && cs.getName() !== structureName) {\r\n cs = null;\r\n this._sheet = null;\r\n }\r\n if (cs === null) {\r\n this._sheet = obj = new Sheet(structureName, shWidth);\r\n adder(obj);\r\n } else {\r\n obj = cs;\r\n }\r\n const strand = new Strand(\r\n obj,\r\n this._complex.getUnifiedSerial(startChainID, startSequenceNumber, startICode),\r\n this._complex.getUnifiedSerial(endChainID, endSequenceNumber, endICode),\r\n helixClass,\r\n shCur,\r\n shPrev,\r\n );\r\n obj.addStrand(strand);\r\n this._complex.structures.push(strand);\r\n } else {\r\n obj = new Helix(\r\n helixClass,\r\n this._complex.getUnifiedSerial(startChainID, startSequenceNumber, startICode),\r\n this._complex.getUnifiedSerial(endChainID, endSequenceNumber, endICode),\r\n serialNumber,\r\n structureName,\r\n comment,\r\n helLength,\r\n );\r\n adder(obj);\r\n }\r\n }\r\n\r\n _parseHEADER(stream) {\r\n const { metadata } = this._complex;\r\n metadata.classification = stream.readString(11, 50).trim();\r\n metadata.date = stream.readString(51, 59).trim();\r\n\r\n const id = stream.readString(63, 66).trim();\r\n metadata.id = id;\r\n if (id) {\r\n this._complex.name = id;\r\n }\r\n metadata.format = 'pdb';\r\n }\r\n\r\n _parseTITLE(stream) {\r\n const { metadata } = this._complex;\r\n metadata.title = metadata.title || [];\r\n\r\n const line = stream.readInt(9, 10) || 1;\r\n metadata.title[line - 1] = stream.readString(11, 80).trim();\r\n }\r\n\r\n static tagParsers = {\r\n HEADER: PDBParser.prototype._parseHEADER,\r\n 'TITLE ': PDBParser.prototype._parseTITLE,\r\n 'ATOM ': PDBParser.prototype._parseATOM,\r\n HETATM: PDBParser.prototype._parseATOM,\r\n ENDMDL: PDBParser.prototype._parseENDMDL,\r\n CONECT: PDBParser.prototype._parseCONECT,\r\n COMPND: PDBParser.prototype._parseCOMPND,\r\n REMARK: PDBParser.prototype._parseREMARK,\r\n // 'SOURCE': PDBParser.prototype._parseSOURCE,\r\n 'HELIX ': PDBParser.prototype._parseHELIX,\r\n 'SHEET ': PDBParser.prototype._parseSHEET,\r\n\r\n // nonstandard extension to allow range 100,000 - 999,999\r\n 'ATOM 1': PDBParser.prototype._parseATOM,\r\n 'ATOM 2': PDBParser.prototype._parseATOM,\r\n 'ATOM 3': PDBParser.prototype._parseATOM,\r\n 'ATOM 4': PDBParser.prototype._parseATOM,\r\n 'ATOM 5': PDBParser.prototype._parseATOM,\r\n 'ATOM 6': PDBParser.prototype._parseATOM,\r\n 'ATOM 7': PDBParser.prototype._parseATOM,\r\n 'ATOM 8': PDBParser.prototype._parseATOM,\r\n 'ATOM 9': PDBParser.prototype._parseATOM,\r\n };\r\n\r\n parseSync() {\r\n const stream = new PDBStream(this._data);\r\n const result = this._complex = new Complex();\r\n\r\n // parse PDB line by line\r\n while (!stream.end()) {\r\n const tag = stream.readString(1, TAG_LENGTH);\r\n const func = PDBParser.tagParsers[tag];\r\n if (_.isFunction(func)) {\r\n func.call(this, stream);\r\n }\r\n stream.next();\r\n }\r\n\r\n // Resolve indices and serials to objects\r\n this._finalize();\r\n\r\n // cleanup\r\n this._serialAtomMap = null;\r\n this._sheet = null;\r\n this._residue = null;\r\n this._chain = null;\r\n this._complex = null;\r\n\r\n if (result.getAtomCount() === 0) {\r\n throw new Error('The data does not contain valid atoms');\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nPDBParser.formats = ['pdb'];\r\nPDBParser.extensions = ['.pdb', '.ent'];\r\n\r\nexport default PDBParser;\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n SGroup,\r\n Bond,\r\n} = chem;\r\n\r\nconst cOrderCharCodes = {\r\n A: 0,\r\n S: 1,\r\n D: 2,\r\n T: 3,\r\n};\r\n\r\nconst cmlStartRegexp = /\\s*<\\?xml\\b[^?>]*\\?>\\s*<(?:cml|molecule)\\b/i;\r\n\r\nclass CMLParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._complex = null;\r\n this._residue = null;\r\n this._serialAtomMap = null;\r\n this._modelId = 1;\r\n this._lastMolId = -1;\r\n this._readOnlyOneMolecule = false;\r\n this._options.fileType = 'cml';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && cmlStartRegexp.test(data);\r\n }\r\n\r\n _rebuidBondIndexes(atoms, bonds) {\r\n const count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n const atomId = atoms[i].id;\r\n\r\n const countBonds = bonds.length;\r\n for (let j = 0; j < countBonds; j++) {\r\n const idxs = bonds[j].atomRefs2.split(' ');\r\n if (idxs[0] === atomId) {\r\n bonds[j].start = i;\r\n }\r\n\r\n if (idxs[1] === atomId) {\r\n bonds[j].end = i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _createSGroup(molecule, moleculeArr) {\r\n const newGroup = new SGroup(\r\n molecule.id,\r\n molecule.fieldData,\r\n new THREE.Vector3(parseFloat(molecule.x), parseFloat(molecule.y), 0),\r\n molecule.atomRefs,\r\n molecule,\r\n );\r\n if (molecule.placement === 'Relative') {\r\n newGroup._center = new THREE.Vector3(0, 0, 0);\r\n }\r\n if (molecule.fieldName === 'MDLBG_FRAGMENT_CHARGE') {\r\n newGroup._charge = parseInt(molecule.fieldData, 10) || 0;\r\n }\r\n if (molecule.fieldName === 'MDLBG_FRAGMENT_COEFFICIENT') {\r\n newGroup._repeat = parseInt(molecule.fieldData, 10) || 1;\r\n }\r\n moleculeArr.push(newGroup);\r\n }\r\n\r\n _extractSGroup(molecule, moleculeArr) {\r\n if (!Array.isArray(moleculeArr)) {\r\n moleculeArr = [];\r\n }\r\n\r\n if (molecule) {\r\n if (Array.isArray(molecule)) {\r\n const count = molecule.length;\r\n for (let i = 0; i < count; i++) {\r\n if (molecule[i].molecule) {\r\n moleculeArr = moleculeArr.concat(this._extractSGroup(molecule[i].molecule));\r\n }\r\n this._createSGroup(molecule[i], moleculeArr);\r\n }\r\n } else {\r\n if (molecule.molecule) {\r\n if (molecule.molecule) {\r\n moleculeArr = moleculeArr.concat(this._extractSGroup(molecule.molecule));\r\n }\r\n }\r\n this._createSGroup(molecule, moleculeArr);\r\n }\r\n }\r\n\r\n return moleculeArr;\r\n }\r\n\r\n _extractSGroups(molecule, atoms) {\r\n const moleculeArr = this._extractSGroup(molecule);\r\n\r\n const count = atoms.length;\r\n let i;\r\n let j;\r\n\r\n for (i = 0; i < count; i++) {\r\n const atomId = atoms[i].id;\r\n for (j = 0; j < moleculeArr.length; j++) {\r\n const firstAtomRef = moleculeArr[j]._atoms.split(' ')[0];\r\n if (firstAtomRef === atomId) {\r\n if (!atoms[i].sgroupRef) {\r\n atoms[i].sgroupRef = [];\r\n }\r\n atoms[i].sgroupRef.push(moleculeArr[j]);\r\n }\r\n }\r\n }\r\n // build sGroups centers\r\n let atomMap = {}; // sgrpmap cache\r\n let mapEntry = null;\r\n const nLimon = 100000000;\r\n const bLow = new THREE.Vector3(nLimon, nLimon, nLimon);\r\n const bHight = new THREE.Vector3(-nLimon, -nLimon, -nLimon);\r\n\r\n function cycleFuncInner(e) {\r\n mapEntry = atomMap[e];\r\n if (mapEntry) {\r\n moleculeArr[j]._atoms.push(mapEntry.a);\r\n }\r\n }\r\n\r\n function cycleFunc(e) {\r\n mapEntry = atomMap[e];\r\n if (mapEntry) {\r\n bLow.set(Math.min(bLow.x, mapEntry.x), Math.min(bLow.y, mapEntry.y), Math.min(bLow.z, mapEntry.z));\r\n bHight.set(Math.max(bHight.x, mapEntry.x), Math.max(bHight.y, mapEntry.y), Math.max(bHight.z, mapEntry.z));\r\n cycleFuncInner(e);\r\n }\r\n }\r\n\r\n for (i = 0; i < atoms.length; i++) {\r\n atomMap[atoms[i].id] = {};\r\n atomMap[atoms[i].id].x = atoms[i].x2;\r\n if (atoms[i].x3) {\r\n atomMap[atoms[i].id].x = atoms[i].x3;\r\n }\r\n atomMap[atoms[i].id].x = parseFloat(atomMap[atoms[i].id].x);\r\n atomMap[atoms[i].id].y = atoms[i].y2;\r\n if (atoms[i].y3) {\r\n atomMap[atoms[i].id].y = atoms[i].y3;\r\n }\r\n atomMap[atoms[i].id].y = parseFloat(atomMap[atoms[i].id].y);\r\n atomMap[atoms[i].id].z = '0.0';\r\n if (atoms[i].z3) {\r\n atomMap[atoms[i].id].z = atoms[i].z3;\r\n }\r\n atomMap[atoms[i].id].z = parseFloat(atomMap[atoms[i].id].z);\r\n atomMap[atoms[i].id].a = atoms[i];\r\n }\r\n\r\n let atomsRef;\r\n for (j = 0; j < moleculeArr.length; j++) {\r\n if (moleculeArr[j]._center !== null) {\r\n bLow.set(nLimon, nLimon, nLimon);\r\n bHight.set(-nLimon, -nLimon, -nLimon);\r\n atomsRef = moleculeArr[j]._atoms.split(' ');\r\n moleculeArr[j]._atoms = [];\r\n atomsRef.forEach(cycleFunc);\r\n\r\n moleculeArr[j]._center.addVectors(bLow, bHight);\r\n moleculeArr[j]._center.multiplyScalar(0.5);\r\n } else {\r\n atomsRef = moleculeArr[j]._atoms.split(' ');\r\n moleculeArr[j]._atoms = [];\r\n atomsRef.forEach(cycleFuncInner);\r\n }\r\n }\r\n atomMap = null;\r\n }\r\n\r\n _traverseData(dom) {\r\n function isArray(o) {\r\n return Object.prototype.toString.apply(o) === '[object Array]';\r\n }\r\n\r\n function parseNode(xmlNode, result) {\r\n if (xmlNode.nodeName === '#text' && xmlNode.nodeValue.trim() === '') {\r\n return;\r\n }\r\n\r\n const jsonNode = {};\r\n jsonNode.xmlNode = xmlNode;\r\n const existing = result[xmlNode.nodeName];\r\n if (existing) {\r\n if (!isArray(existing)) {\r\n result[xmlNode.nodeName] = [existing, jsonNode];\r\n } else {\r\n result[xmlNode.nodeName].push(jsonNode);\r\n }\r\n } else {\r\n result[xmlNode.nodeName] = jsonNode;\r\n }\r\n\r\n let length;\r\n let i;\r\n if (xmlNode.attributes) {\r\n ({ length } = xmlNode.attributes);\r\n for (i = 0; i < length; i++) {\r\n const attribute = xmlNode.attributes[i];\r\n jsonNode[attribute.nodeName] = attribute.nodeValue;\r\n }\r\n }\r\n\r\n ({ length } = xmlNode.childNodes);\r\n for (i = 0; i < length; i++) {\r\n parseNode(xmlNode.childNodes[i], jsonNode);\r\n }\r\n }\r\n\r\n const result = {};\r\n if (dom.childNodes.length) {\r\n parseNode(dom.childNodes[0], result);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n _findSuitableMolecule(data, molSet) {\r\n for (const key in data) {\r\n if (key === 'xmlNode') {\r\n continue;\r\n } else if (key === 'molecule') {\r\n if (data.molecule) {\r\n if (data.molecule.atomArray && data.molecule.atomArray.atom) {\r\n molSet.push(data);\r\n }\r\n if (Array.isArray(data.molecule)) {\r\n for (let i = 0; i < data.molecule.length; i++) {\r\n if (data.molecule[i].atomArray && data.molecule[i].atomArray.atom) {\r\n molSet.push({ molecule: data.molecule[i] });\r\n }\r\n }\r\n }\r\n }\r\n } else if (data[key] && data[key] !== null && typeof (data[key]) === 'object') {\r\n this._findSuitableMolecule(data[key], molSet);\r\n }\r\n }\r\n }\r\n\r\n _selectComponents(text) {\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(text, 'application/xml');\r\n const traversedData = this._traverseData(doc);\r\n let rawData;\r\n const self = this;\r\n\r\n function prepareComponentCompound(data) {\r\n let atoms = [];\r\n if (data.molecule && data.molecule.atomArray && data.molecule.atomArray.atom) {\r\n if (!Array.isArray(data.molecule.atomArray.atom)) {\r\n atoms.push(data.molecule.atomArray.atom);\r\n } else {\r\n atoms = data.molecule.atomArray.atom;\r\n }\r\n } else if (!data.molecule) {\r\n const ret = {};\r\n ret.atomLabels = null;\r\n ret.labelsCount = 1;\r\n return ret;\r\n }\r\n\r\n if (data.molecule.molecule) {\r\n self._extractSGroups(data.molecule.molecule, atoms);\r\n }\r\n\r\n let atom;\r\n let count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n atom = atoms[i];\r\n atom.edges = [];\r\n }\r\n\r\n let localBond = [];\r\n if (data.molecule.bondArray && data.molecule.bondArray.bond) {\r\n if (!Array.isArray(data.molecule.bondArray.bond)) {\r\n localBond.push(data.molecule.bondArray.bond);\r\n } else {\r\n localBond = data.molecule.bondArray.bond;\r\n }\r\n }\r\n let bond;\r\n count = localBond.length;\r\n self._rebuidBondIndexes(atoms, localBond);\r\n\r\n function addCurrBond(index) {\r\n bond = localBond[index];\r\n atom = atoms[bond.start];\r\n if (!atom) {\r\n return false;\r\n }\r\n atom.edges.push(bond.end);\r\n atom = atoms[bond.end];\r\n if (!atom) {\r\n return false;\r\n }\r\n atom.edges.push(bond.start);\r\n return true;\r\n }\r\n\r\n for (let i = 0; i < count; i++) {\r\n if (!addCurrBond(i)) {\r\n // ignore invalid bond\r\n continue;\r\n }\r\n const orderAttr = bond.xmlNode.getAttribute('order');\r\n const tc = parseInt(orderAttr, 10);\r\n // the default bond order is unknown\r\n localBond[i].order = 0;\r\n localBond[i].type = Bond.BondType.UNKNOWN;\r\n if (tc > 1) {\r\n localBond[i].order = tc;\r\n } else {\r\n // another option - bond order is a string\r\n const order = cOrderCharCodes[orderAttr];\r\n if (order !== undefined) {\r\n localBond[i].order = order;\r\n if (orderAttr === 'A') {\r\n localBond[i].type = Bond.BondType.AROMATIC;\r\n }\r\n }\r\n }\r\n }\r\n\r\n count = atoms.length;\r\n for (let i = 0; i < count; i++) {\r\n atom = atoms[i];\r\n atom.edges.sort();\r\n }\r\n\r\n const labels = self._breadWidthSearch(atoms, 0); // for now\r\n\r\n const retStruct = {};\r\n retStruct.atoms = atoms;\r\n retStruct.bonds = localBond;\r\n retStruct.labels = labels.atomLabels;\r\n retStruct.count = Math.min(1, labels.labelsCount); // for now\r\n retStruct.curr = -1;\r\n retStruct.originalCML = doc;\r\n\r\n return retStruct;\r\n }\r\n\r\n if (traversedData.cml) {\r\n rawData = traversedData.cml;\r\n } else {\r\n rawData = traversedData;\r\n }\r\n const retData = [];\r\n const filteredData = [];\r\n this._findSuitableMolecule(rawData, filteredData);\r\n if (this._readOnlyOneMolecule && filteredData.length > 1) {\r\n filteredData.splice(1, filteredData.length - 1);\r\n }\r\n filteredData.forEach((d) => {\r\n const rd = prepareComponentCompound(d);\r\n if (rd.atoms.length > 0) {\r\n retData.push(rd);\r\n }\r\n });\r\n return retData;\r\n }\r\n\r\n _packLabel(compId, molId) {\r\n const shift = 16;\r\n return (molId << shift) + compId;\r\n }\r\n\r\n _unpackLabel(l) {\r\n const shift = 16;\r\n const mask = (1 << shift) - 1;\r\n return { molId: l >>> shift, compId: l & mask };\r\n }\r\n\r\n _breadWidthSearch(atoms, molID) {\r\n const atomLabels = new Array(atoms.length);\r\n\r\n let id;\r\n for (id = 0; id < atomLabels.length; id++) {\r\n atomLabels[id] = this._packLabel(0, molID);\r\n }\r\n\r\n const breadthQueue = [];\r\n let componentID = 0;\r\n let labeledAtoms = atoms.length;\r\n\r\n while (labeledAtoms > 0) {\r\n componentID++;\r\n\r\n let startID = -1;\r\n for (id = 0; id < atomLabels.length; id++) {\r\n if (this._unpackLabel(atomLabels[id]).compId === 0) {\r\n startID = id;\r\n break;\r\n }\r\n }\r\n\r\n if (startID < 0) {\r\n break;\r\n }\r\n\r\n // Bread first search\r\n breadthQueue.push(atoms[startID]);\r\n atomLabels[startID] = this._packLabel(componentID, molID);\r\n labeledAtoms--;\r\n\r\n while (breadthQueue.length > 0) {\r\n const curr = breadthQueue.shift();\r\n if (!curr) {\r\n continue;\r\n }\r\n\r\n for (let i = 0; i < curr.edges.length; i++) {\r\n if (atomLabels[curr.edges[i]] !== componentID) {\r\n breadthQueue.push(atoms[curr.edges[i]]);\r\n atomLabels[curr.edges[i]] = componentID;\r\n labeledAtoms--;\r\n }\r\n }\r\n }\r\n }\r\n const ret = {};\r\n ret.atomLabels = atomLabels;\r\n ret.labelsCount = componentID;\r\n return ret;\r\n }\r\n\r\n _parseBond(eAtom, mainAtom, order, type) {\r\n if (eAtom >= 0) {\r\n const h = [Math.min(eAtom, mainAtom), Math.max(eAtom, mainAtom)];\r\n this._complex.addBond(h[0], h[1], order, type, true);\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const complex = this._complex;\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, ni = atoms.length; i < ni; ++i) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n const bonds = complex._bonds;\r\n const { logger } = this;\r\n for (let j = 0, nj = bonds.length; j < nj; ++j) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n logger.debug('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _parseSet(varData) {\r\n const complex = this._complex = new Complex();\r\n const data = varData;\r\n const currentLabel = data.curr;\r\n const { atoms, labels } = data;\r\n let atom = null;\r\n let i;\r\n let j;\r\n const count = atoms.length;\r\n\r\n function addFunc(a) {\r\n a.xmlNodeRef = atom;\r\n if (atom.x2) {\r\n atom.x3 = atom.x2;\r\n delete atom.x2;\r\n }\r\n if (atom.y2) {\r\n atom.y3 = atom.y2;\r\n delete atom.y2;\r\n }\r\n if (!(atom.z3)) {\r\n atom.z3 = '0.0';\r\n }\r\n atom.complexAtom = a;\r\n }\r\n\r\n let chains = {};\r\n // parse atoms in label order\r\n const reorder = [];\r\n for (i = 0; i < count; i++) {\r\n reorder.push(i);\r\n }\r\n reorder.sort((a, b) => labels[a] - labels[b]);\r\n for (i = 0; i < count; i++) {\r\n const atomCharge = 0;\r\n const lLabel = labels[reorder[i]];\r\n if (this._unpackLabel(lLabel).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[reorder[i]];\r\n const atomFullNameStruct = atom.elementType;\r\n\r\n if (atom.sgroupRef) {\r\n const countRef = atom.sgroupRef.length;\r\n for (let k = 0; k < countRef; ++k) {\r\n complex._sgroups.push(atom.sgroupRef[k]);\r\n }\r\n }\r\n\r\n if (atom.x3 || atom.x2) {\r\n const currAtomComp = this._unpackLabel(lLabel).compId;\r\n // use ' ' by default instead of synthetic creation of chain names\r\n const chainID = ' '; //= String.fromCharCode('A'.charCodeAt(0) + currAtomComp);\r\n const resSeq = currAtomComp;\r\n const iCode = ' ';\r\n let strLabel = currAtomComp.toString();\r\n if (strLabel.length === 1) {\r\n strLabel = `0${strLabel}`;\r\n }\r\n const resName = `N${strLabel}`;\r\n let chain = chains[chainID];\r\n if (!chain || chain.getName() !== chainID) {\r\n chains[chainID] = chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = null;\r\n }\r\n\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n this._residue = residue = chain.addResidue(resName, resSeq, iCode);\r\n }\r\n\r\n // _x, _y, _z, mname, mindex, atomNameFull, atomName, chainID, serial, isHet, atlLocInd, atomNameToTypeF\r\n let xyz = null;\r\n if (atom.x3) {\r\n xyz = new THREE.Vector3(parseFloat(atom.x3), parseFloat(atom.y3), parseFloat(atom.z3));\r\n } else if (atom.x2) {\r\n xyz = new THREE.Vector3(parseFloat(atom.x2), parseFloat(atom.y2), 0);\r\n }\r\n let element = Element.ByName[atom.elementType.toUpperCase()];\r\n if (!element) {\r\n element = (JSON.parse(JSON.stringify(Element.ByName[\r\n Object.keys(Element.ByName)[Object.keys(Element.ByName).length - 1]])));\r\n element.number += 1;\r\n element.name = atom.elementType.toUpperCase();\r\n element.fullName = 'Unknown';\r\n Element.ByName[atom.elementType.toUpperCase()] = element;\r\n }\r\n const atomSerial = parseInt(atom.id.replace(/[^0-9]/, ''), 10);\r\n const added = residue.addAtom(\r\n atomFullNameStruct,\r\n element,\r\n xyz,\r\n Element.Role.SG,\r\n true,\r\n atomSerial,\r\n ' ',\r\n 1.0,\r\n 0.0,\r\n atomCharge,\r\n );\r\n if (atom.hydrogenCount) {\r\n added.hydrogenCount = parseInt(atom.hydrogenCount, 10);\r\n }\r\n if (atom.mrvValence) {\r\n added.valence = parseInt(atom.mrvValence, 10);\r\n }\r\n addFunc(added);\r\n }\r\n }\r\n }\r\n chains = null;// NOSONAR\r\n for (i = 0; i < data.bonds.length; i++) {\r\n const cb = data.bonds[i];\r\n if (this._unpackLabel(labels[cb.start]).molId === this._unpackLabel(currentLabel).molId\r\n && this._unpackLabel(labels[cb.end]).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[cb.start];\r\n if (!atom || !(atoms[cb.end])) {\r\n continue; // skip invalid\r\n }\r\n this._parseBond(\r\n parseInt(atom.id.replace(/[^0-9]/, ''), 10),\r\n parseInt(atoms[cb.end].id.replace(/[^0-9]/, ''), 10),\r\n cb.order,\r\n cb.type,\r\n );\r\n }\r\n }\r\n\r\n for (i = 0; i < this._complex.getSGroupCount(); i++) {\r\n const sGrp = this._complex.getSGroups()[i];\r\n for (j = 0; j < sGrp._atoms.length; j++) {\r\n sGrp._atoms[j] = sGrp._atoms[j].complexAtom;\r\n }\r\n }\r\n for (i = 0; i < count; i++) {\r\n if (this._unpackLabel(labels[i]).molId === this._unpackLabel(currentLabel).molId) {\r\n atom = atoms[i];\r\n atom.complexAtom = null;\r\n delete atom.complexAtom;\r\n }\r\n }\r\n this._complex.originalCML = data.originalCML;\r\n this._fixBondsArray();\r\n complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n this._serialAtomMap = null;\r\n this._complex = null;\r\n return complex;\r\n }\r\n\r\n parseSync() {\r\n const complexes = [];\r\n const self = this;\r\n const moleculaSet = this._selectComponents(this._data);\r\n moleculaSet.forEach((molSet) => {\r\n molSet.curr = 2;\r\n if (molSet.count === 0) {\r\n molSet.count = 1;\r\n }\r\n for (let i = 0; i < molSet.count; i++) {\r\n molSet.curr = (i + 1);\r\n complexes.push(self._parseSet(molSet, false));\r\n }\r\n });\r\n\r\n let totalAtomsParsed = 0;\r\n complexes.forEach((c) => {\r\n totalAtomsParsed += c.getAtomCount();\r\n });\r\n if (totalAtomsParsed <= 0) {\r\n throw new Error('The data does not contain valid atoms');\r\n }\r\n\r\n if (complexes.length > 1) {\r\n const joinedComplex = new Complex();\r\n joinedComplex.joinComplexes(complexes);\r\n joinedComplex.originalCML = complexes[0].originalCML;\r\n return joinedComplex;\r\n }\r\n if (complexes.length === 1) {\r\n return complexes[0];\r\n }\r\n return new Complex();\r\n }\r\n}\r\n\r\nCMLParser.formats = ['cml'];\r\nCMLParser.extensions = ['.cml'];\r\n\r\nexport default CMLParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport MMTF from '../../../vendor/js/mmtf';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\n\r\nconst {\r\n Complex,\r\n Chain,\r\n Atom,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Bond,\r\n Assembly,\r\n Molecule,\r\n} = chem;\r\n\r\nclass ArrayComparator {\r\n constructor(original) {\r\n this._original = Array.from(original);\r\n this._original.sort();\r\n\r\n this._sum = 0;\r\n for (let i = 0; i < this._original.length; ++i) {\r\n this._sum += this._original[i];\r\n }\r\n }\r\n\r\n compare(candidate) {\r\n const len = candidate.length;\r\n if (len !== this._original.length) {\r\n return false;\r\n }\r\n\r\n let sum = 0;\r\n let i;\r\n for (i = 0; i < len; ++i) {\r\n sum += candidate[i];\r\n }\r\n\r\n if (sum !== this._sum) {\r\n return false;\r\n }\r\n\r\n const sorted = Array.from(candidate);\r\n sorted.sort();\r\n\r\n for (i = 0; i < len; ++i) {\r\n if (sorted[i] !== this._original[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nArrayComparator.prototype.constructor = ArrayComparator;\r\n\r\nconst StructuralElementType = StructuralElement.Type;\r\n\r\n// see https://github.com/rcsb/mmtf-javascript/blob/master/src/mmtf-traverse.js\r\nconst secStructToType = [\r\n StructuralElementType.HELIX_PI, // 0\r\n StructuralElementType.BEND, // 1\r\n StructuralElementType.HELIX_ALPHA, // 2\r\n StructuralElementType.STRAND, // 3\r\n StructuralElementType.HELIX_310, // 4\r\n StructuralElementType.BRIDGE, // 5\r\n StructuralElementType.TURN, // 6\r\n StructuralElementType.COIL, // 7\r\n];\r\n\r\nfunction getFirstByte(buf) {\r\n const bytes = new Uint8Array(buf, 0, 1);\r\n return bytes[0];\r\n}\r\n\r\nclass MMTFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'mmtf';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n // check if it's binary MessagePack format containing a map (dictionary)\r\n // see https://github.com/msgpack/msgpack/blob/master/spec.md\r\n return _.isArrayBuffer(data) && ((getFirstByte(data) | 1) === 0xDF);\r\n }\r\n\r\n _onModel(_modelData) {\r\n }\r\n\r\n _onChain(chainData) {\r\n if (chainData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n const chain = new Chain(this._complex, chainData.chainName);\r\n this._complex._chains[chainData.chainIndex] = chain;\r\n chain._index = chainData.chainIndex;\r\n }\r\n\r\n _onGroup(groupData) {\r\n if (groupData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n if (this.settings.now.nowater) {\r\n // skip water\r\n if (groupData.groupName === 'HOH' || groupData.groupName === 'WAT') {\r\n return;\r\n }\r\n }\r\n\r\n const chain = this._complex._chains[groupData.chainIndex];\r\n const icode = !groupData.insCode.charCodeAt(0) ? '' : groupData.insCode;\r\n const residue = chain.addResidue(groupData.groupName, groupData.groupId, icode);\r\n residue._index = groupData.groupIndex;\r\n\r\n this._updateSecStructure(this._complex, residue, groupData);\r\n }\r\n\r\n _onAtom(atomData) {\r\n if (atomData.modelIndex !== 0) {\r\n return;\r\n }\r\n\r\n const altLoc = !atomData.altLoc.charCodeAt(0) ? '' : atomData.altLoc;\r\n const atom = new Atom(\r\n atomData.groupIndex, // we store residue index here to replace it later with actual reference\r\n atomData.atomName,\r\n Element.getByName(atomData.element.toUpperCase()),\r\n new THREE.Vector3(atomData.xCoord, atomData.yCoord, atomData.zCoord),\r\n Element.Role[atomData.atomName],\r\n false, // hetero atoms will be marked later\r\n atomData.atomId,\r\n altLoc,\r\n atomData.occupancy,\r\n atomData.bFactor,\r\n atomData.formalCharge,\r\n );\r\n\r\n this._complex._atoms[atomData.atomIndex] = atom;\r\n atom.index = atomData.atomIndex;\r\n\r\n this._serialAtomMap[atomData.atomId] = atom;\r\n }\r\n\r\n _onBond(bondData) {\r\n const right = Math.max(bondData.atomIndex1, bondData.atomIndex2);\r\n if (right >= this._complex._atoms.length) {\r\n return;\r\n }\r\n const left = Math.min(bondData.atomIndex1, bondData.atomIndex2);\r\n this._complex.addBond(\r\n this._complex._atoms[left],\r\n this._complex._atoms[right],\r\n bondData.bondOrder,\r\n Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n\r\n _updateSecStructure(complex, residue, groupData) {\r\n const helixClasses = [3, -1, 1, -1, 5];\r\n\r\n if (!_.isUndefined(groupData) && groupData.secStruct === this._ssType) {\r\n residue._secondary = this._ssStruct;\r\n if (this._ssStruct) {\r\n this._ssStruct.term = residue;\r\n }\r\n return;\r\n }\r\n\r\n if (!_.isUndefined(groupData)) {\r\n // start new secondary structure\r\n const type = secStructToType[groupData.secStruct];\r\n this._ssType = groupData.secStruct;\r\n this._ssStart = residue;\r\n\r\n let struct = null;\r\n switch (this._ssType) {\r\n case -1: // undefined\r\n case 7: // coil\r\n break;\r\n case 0: // pi helix\r\n case 2: // alpha helix\r\n case 4: // 3-10 helix\r\n struct = new Helix(helixClasses[this._ssType], residue, residue, 0, '', '', 0);\r\n complex._helices.push(struct);\r\n break;\r\n case 3: { // extended\r\n const sheet = new Sheet('', 0);\r\n complex._sheets.push(sheet);\r\n struct = new Strand(sheet, residue, residue, 0, null, null);\r\n break;\r\n }\r\n default:\r\n if (type !== undefined) {\r\n struct = new StructuralElement(type, residue, residue);\r\n }\r\n break;\r\n }\r\n\r\n this._ssStruct = struct;\r\n residue._secondary = struct;\r\n if (struct) {\r\n complex.structures.push(struct);\r\n }\r\n }\r\n }\r\n\r\n _updateMolecules(mmtfData) {\r\n const entities = mmtfData.entityList;\r\n if (!entities) {\r\n return;\r\n }\r\n\r\n const chainsInModel0 = mmtfData.chainsPerModel[0];\r\n for (let i = 0; i < entities.length; i++) {\r\n const entity = entities[i];\r\n const chains = entity.chainIndexList;\r\n let residues = [];\r\n for (let j = 0; j < chains.length; j++) {\r\n const chainIndex = chains[j];\r\n // skip chains in models other than the first one\r\n if (chainIndex >= chainsInModel0) {\r\n continue;\r\n }\r\n const chain = this._complex._chains[chainIndex];\r\n residues = residues.concat(chain._residues.slice());\r\n }\r\n const molecule = new Molecule(this._complex, entity.description, i + 1);\r\n molecule.residues = residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n // populate complex with chains, residues and atoms\r\n _traverse(mmtfData) {\r\n const self = this;\r\n\r\n // get metadata\r\n const { metadata } = this._complex;\r\n metadata.id = mmtfData.structureId;\r\n metadata.title = [];\r\n metadata.title[0] = mmtfData.title;\r\n metadata.date = mmtfData.releaseDate;\r\n metadata.format = 'mmtf';\r\n\r\n // create event callback functions\r\n const eventCallbacks = {\r\n onModel(modelData) {\r\n self._onModel(modelData);\r\n },\r\n onChain(chainData) {\r\n self._onChain(chainData);\r\n },\r\n onGroup(groupData) {\r\n self._onGroup(groupData);\r\n },\r\n onAtom(atomData) {\r\n self._onAtom(atomData);\r\n },\r\n onBond(bondData) {\r\n self._onBond(bondData);\r\n },\r\n };\r\n\r\n // temporary variables used during traversal to track secondary structures\r\n this._ssType = -1;\r\n this._ssStruct = null;\r\n this._ssStart = null;\r\n\r\n // traverse the structure and listen to the events\r\n MMTF.traverse(mmtfData, eventCallbacks);\r\n\r\n this._updateSecStructure(this._complex);\r\n this._updateMolecules(mmtfData);\r\n }\r\n\r\n // During traversal atoms and residues don't come sequentially\r\n // so a residue for certain atom can be unavailable. Thus we\r\n // store residue index in atom.\r\n // This function being called after traversal replaces the index\r\n // with actual reference, and also populates atom lists in residues.\r\n _linkAtomsToResidues() {\r\n for (let i = 0; i < this._complex._atoms.length; ++i) {\r\n const atom = this._complex._atoms[i];\r\n const residue = this._complex._residues[atom.residue];\r\n atom.residue = residue;\r\n residue._atoms.push(atom);\r\n }\r\n }\r\n\r\n _findSynonymousChains() {\r\n const named = {};\r\n for (let i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i];\r\n const name = chain.getName();\r\n if (!named.hasOwnProperty(name)) {\r\n named[name] = [];\r\n }\r\n\r\n named[name].push(chain._index);\r\n }\r\n\r\n return named;\r\n }\r\n\r\n // NOTE: This function relies on original chain indices, so it must be called before any magic happens to chains.\r\n _parseAssemblyInfo(mmtfData) {\r\n let i;\r\n let j;\r\n let k;\r\n const assemblies = [];\r\n const { logger } = this;\r\n\r\n for (i = 0; i < mmtfData.bioAssemblyList.length; ++i) {\r\n const baInfo = mmtfData.bioAssemblyList[i];\r\n if (baInfo.transformList.length === 0) {\r\n continue;\r\n }\r\n\r\n const chains = baInfo.transformList[0].chainIndexList;\r\n const chainListCheck = new ArrayComparator(chains);\r\n\r\n // build list of chain names\r\n const chainNames = {};\r\n for (j = 0; j < chains.length; ++j) {\r\n chainNames[this._complex._chains[chains[j]].getName()] = 1;\r\n }\r\n\r\n // all chains with the same name should belong to assembly if one of them belongs\r\n const allChains = [];\r\n let name;\r\n for (name in chainNames) {\r\n if (chainNames.hasOwnProperty(name)) {\r\n // just concat arrays -- there should be no duplicates\r\n Array.prototype.push.apply(allChains, this._chainsByName[name]);\r\n }\r\n }\r\n if (!chainListCheck.compare(allChains)) {\r\n // assembly is missing some of the chains\r\n logger.debug('MMTF: Assembly is missing some of the synonymous chains. Skipping...');\r\n }\r\n\r\n const a = new Assembly(this._complex);\r\n\r\n // add chains to assembly\r\n for (name in chainNames) {\r\n if (chainNames.hasOwnProperty(name)) {\r\n a.addChain(name);\r\n }\r\n }\r\n\r\n // add unique matrices to assembly\r\n a.addMatrix(new THREE.Matrix4().fromArray(baInfo.transformList[0].matrix).transpose());\r\n for (j = 1; j < baInfo.transformList.length; ++j) {\r\n const transform = baInfo.transformList[j];\r\n\r\n if (!chainListCheck.compare(transform.chainIndexList)) {\r\n // list of chains for this transform doesn't match that for other transforms\r\n // this is illegal in our structure\r\n logger.debug('MMTF: Chain lists differ for different transforms in one assembly. Skipping...');\r\n continue;\r\n }\r\n\r\n const m = new THREE.Matrix4().fromArray(transform.matrix).transpose();\r\n\r\n // check if matrix is already in the list\r\n for (k = 0; k < a.matrices.length; ++k) {\r\n if (a.matrices[k].equals(m)) {\r\n break;\r\n }\r\n }\r\n\r\n if (k === a.matrices.length) {\r\n a.addMatrix(m);\r\n }\r\n }\r\n\r\n a.finalize();\r\n assemblies.push(a);\r\n }\r\n\r\n return assemblies;\r\n }\r\n\r\n // NOTE: This function relies on original chain indices, so it must be called before any magic happens to chains.\r\n _markHeteroAtoms(mmtfData) {\r\n const chainsInModel0 = mmtfData.chainsPerModel[0];\r\n for (let i = 0; i < mmtfData.entityList.length; ++i) {\r\n const entity = mmtfData.entityList[i];\r\n if (entity.type !== 'polymer') {\r\n for (let j = 0; j < entity.chainIndexList.length; ++j) {\r\n const chainIndex = entity.chainIndexList[j];\r\n // skip chains in models other than the first one\r\n if (chainIndex >= chainsInModel0) {\r\n continue;\r\n }\r\n const chain = this._complex._chains[chainIndex];\r\n for (let k = 0; k < chain._residues.length; ++k) {\r\n const res = chain._residues[k];\r\n for (let m = 0; m < res._atoms.length; ++m) {\r\n res._atoms[m].het = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // joins chains with the same name into single chain\r\n _joinSynonymousChains() {\r\n let i;\r\n let j;\r\n\r\n const primaryChainsArray = [];\r\n const primaryChainsHash = {};\r\n\r\n // join chains\r\n for (i = 0; i < this._complex._chains.length; ++i) {\r\n const chain = this._complex._chains[i];\r\n const name = chain.getName();\r\n if (!primaryChainsHash.hasOwnProperty(name)) {\r\n // new name -- this is a primary chain\r\n primaryChainsHash[name] = chain;\r\n chain._index = primaryChainsArray.length; // update index as this array will later replace original chain list\r\n primaryChainsArray.push(chain);\r\n continue;\r\n }\r\n\r\n // this chain should be joined with the primary chain of the same name\r\n const primary = primaryChainsHash[name];\r\n for (j = 0; j < chain._residues.length; ++j) {\r\n const residue = chain._residues[j];\r\n primary._residues.push(residue);\r\n residue._chain = primary;\r\n }\r\n }\r\n\r\n // replace chains list with one containing only primary chains\r\n // dropping references to all chains but primary\r\n this._complex._chains = primaryChainsArray;\r\n }\r\n\r\n parseSync() {\r\n const mmtfData = MMTF.decode(this._data);\r\n\r\n this._complex = new Complex();\r\n this._serialAtomMap = {}; // filled during traversal\r\n\r\n this._traverse(mmtfData);\r\n this._linkAtomsToResidues();\r\n this._markHeteroAtoms(mmtfData);\r\n this._chainsByName = this._findSynonymousChains();\r\n Array.prototype.push.apply(this._complex.units, this._parseAssemblyInfo(mmtfData));\r\n this._joinSynonymousChains();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n\r\n return this._complex;\r\n }\r\n}\r\n\r\nMMTFParser.formats = ['mmtf'];\r\nMMTFParser.extensions = ['.mmtf'];\r\nMMTFParser.binary = true;\r\n\r\nexport default MMTFParser;\r\n","class ParsingError extends Error {\r\n constructor(message, line, column) {\r\n super(`data:${line}:${column}: ${message}`);\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, ParsingError);\r\n }\r\n\r\n this.name = 'ParsingError';\r\n this.parseLine = line;\r\n this.parseColumn = column;\r\n }\r\n}\r\n\r\nexport default ParsingError;\r\n","import _ from 'lodash';\r\nimport ParsingError from './ParsingError';\r\n\r\n// Implemented and being tested against: https://www.iucr.org/resources/cif/spec/version1.1/cifsyntax\r\n\r\nfunction _isWhitespace(ch) {\r\n return ch === 32 || ch === 10 || ch === 13 || ch === 9;\r\n}\r\n\r\nfunction _inlineIndexOf(ch0, str, idx) {\r\n const len = str.length;\r\n let ch = -1;\r\n while (idx < len) {\r\n ch = str.charCodeAt(idx);\r\n if (ch === ch0 || ch === 10) {\r\n break;\r\n }\r\n ++idx;\r\n }\r\n return ch === ch0 ? idx : -1;\r\n}\r\n\r\nexport default function readCIF(source) {\r\n let i = 0;\r\n let j = 0;\r\n const n = source.length;\r\n let code = NaN;\r\n let newline = true;\r\n let line = 1;\r\n let column = 1;\r\n let begin;\r\n let state = 0; // 0 - start, 1 - block, 2 - item, 3 - loop, 4 - values, 5 - value\r\n const result = {};\r\n let block = {};\r\n let keys = [];\r\n let keysCount = 0;\r\n let key = '';\r\n let values = [];\r\n let valuesCount = 0;\r\n let value;\r\n\r\n function _parseValue() {\r\n let val;\r\n if ((code === 46 || code === 63) && (i + 1 >= n || _isWhitespace(source.charCodeAt(i + 1)))) { // '.' or '?' .....\r\n // it's a missing value\r\n ++column;\r\n ++i;\r\n return undefined;\r\n }\r\n if (newline && code === 59) { // ';' ......................................................................\r\n // parse multi-line string\r\n j = i;\r\n let lines = 0;\r\n do {\r\n j = _inlineIndexOf(10, source, j + 1); // '\\n'\r\n if (j === -1) {\r\n throw new ParsingError('Unterminated text block found', line, column);\r\n }\r\n ++lines;\r\n } while ((j + 1 < n && source.charCodeAt(j + 1) !== code) || j + 1 >= n);\r\n val = source.substring(i + 1, j).replace(/\\r/g, '');\r\n i = j + 2;\r\n line += lines;\r\n column = 1;\r\n newline = false;\r\n return val;\r\n }\r\n if (code === 39 || code === 34) { // ''' or '\"' ...........................................................\r\n // parse quoted string\r\n j = i;\r\n do {\r\n j = _inlineIndexOf(code, source, j + 1);\r\n if (j === -1) {\r\n throw new ParsingError('Unterminated quoted string found', line, column);\r\n }\r\n } while (j + 1 < n && !_isWhitespace(source.charCodeAt(j + 1)));\r\n val = source.substring(i + 1, j);\r\n column += j - i + 1;\r\n i = j + 1;\r\n return val;\r\n } // ......................................................................................................\r\n // parse until the first whitespace\r\n j = i;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n val = source.substring(i, j);\r\n column += j - i;\r\n i = j;\r\n // try to convert to a number\r\n const num = Number(val);\r\n if (!Number.isNaN(num)) {\r\n return num;\r\n }\r\n // or leave as an unquoted string\r\n return val;\r\n }\r\n\r\n function _storeKey(tag) {\r\n keys[keysCount++] = tag;\r\n }\r\n\r\n function _storeValue(val) {\r\n const keyIndex = valuesCount % keysCount;\r\n values[keyIndex].push(val);\r\n ++valuesCount;\r\n return val;\r\n }\r\n\r\n while (i <= n) {\r\n code = source.charCodeAt(i); // 'NaN' in place of ''\r\n if (code === 13) { // '\\r' .......................................................................................\r\n // just ignore\r\n } else if (code === 10) { // '\\n' ................................................................................\r\n // take note of new lines\r\n newline = true;\r\n ++line;\r\n column = 1;\r\n } else {\r\n // process inline characters\r\n if (code === 32 || code === 9) { // ' ' or '\\t' ................................................................\r\n // just ignore\r\n } else if (code === 35) { // '#' ...............................................................................\r\n // skip the comment until before the end of the line\r\n i = _inlineIndexOf(10, source, i + 1); // '\\n'\r\n if (i === -1) {\r\n break;\r\n } else {\r\n continue; // don't forget to process the new line\r\n }\r\n } else if (state === 0) { // start =============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n j = i + 5;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // add new data block\r\n result[source.substring(begin, i)] = block = {};\r\n state = 1; // block\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Data block name missing', line, column);\r\n }\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n break;\r\n } else { // ..................................................................................................\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n }\r\n } else if (state === 1) { // block =============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n state = 0; // start\r\n continue; // parse again in a different state\r\n } else if (code === 95) { // '_' .............................................................................\r\n j = i + 1;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // start new item\r\n key = source.substring(begin, i);\r\n state = 2; // item\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Tag name missing', line, column);\r\n }\r\n } else if ((code === 76 || code === 108) && source.substr(i + 1, 4).toLowerCase() === 'oop_') { // 'loop_' ...\r\n i += 5;\r\n column += 5;\r\n if (i < n && !_isWhitespace(source.charCodeAt(i))) {\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n } else {\r\n // start new loop\r\n keys = [];\r\n keysCount = 0;\r\n values = [];\r\n valuesCount = 0;\r\n state = 3; // loop\r\n continue; // don't forget to process the whitespace\r\n }\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n break;\r\n } else { // ..................................................................................................\r\n throw new ParsingError(`Unexpected character in state ${state}`, line, column);\r\n }\r\n } else if (state === 2) { // item ==============================================================================\r\n if (Number.isNaN(code)) {\r\n break;\r\n }\r\n value = _parseValue();\r\n _.set(block, key, value);\r\n state = 1; // block\r\n continue;\r\n } else if (state === 3) { // loop ==============================================================================\r\n if (code === 95) { // '_' ....................................................................................\r\n j = i + 1;\r\n begin = j;\r\n while (j < n && !_isWhitespace(source.charCodeAt(j))) {\r\n ++j;\r\n }\r\n column += j - i;\r\n i = j;\r\n if (begin < i) {\r\n // add new key\r\n _storeKey(source.substring(begin, i));\r\n continue; // don't forget to process the whitespace\r\n } else {\r\n throw new ParsingError('Tag name missing', line, column);\r\n }\r\n } else { // ..................................................................................................\r\n if (keysCount > 0) {\r\n for (let keyIndex = 0; keyIndex < keysCount; ++keyIndex) {\r\n value = [];\r\n values[keyIndex] = value;\r\n _.set(block, keys[keyIndex], value);\r\n }\r\n state = 4;\r\n continue; // parse again in a different state\r\n }\r\n throw new ParsingError('Data tags are missing inside a loop', line, column);\r\n }\r\n } else if (state === 4) { // values ============================================================================\r\n if ((code === 68 || code === 100) && source.substr(i + 1, 4).toLowerCase() === 'ata_') { // 'data_' ..........\r\n state = 0; // start\r\n } else if (code === 95) { // '_' .............................................................................\r\n state = 1; // block\r\n } else if ((code === 76 || code === 108) && source.substr(i + 1, 4).toLowerCase() === 'oop_') { // 'loop_' ...\r\n state = 1; // block\r\n } else if (Number.isNaN(code)) { // ....................................................................\r\n state = 0;\r\n } else { // ..................................................................................................\r\n _storeValue(_parseValue());\r\n }\r\n continue; // parse again in a different state\r\n } else { // ====================================================================================================\r\n throw new ParsingError(`Unexpected internal state ${state}`, line, column);\r\n }\r\n\r\n newline = false;\r\n ++column;\r\n }\r\n ++i;\r\n }\r\n\r\n if (state === 2) { // item\r\n throw new ParsingError(`Unexpected end of file in state ${state}`, line, column);\r\n }\r\n\r\n return result;\r\n}\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport StructuralElement from '../../chem/StructuralElement';\r\nimport readCIF from './readCIF';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Helix,\r\n Sheet,\r\n Strand,\r\n Assembly,\r\n Molecule,\r\n} = chem;\r\n\r\nconst cRequiredAtomFields = [\r\n 'auth_seq_id',\r\n 'Cartn_x',\r\n 'Cartn_y',\r\n 'Cartn_z',\r\n 'label_atom_id',\r\n];\r\n\r\nconst cSecondaryCoding = {\r\n helx: 'helix',\r\n turn: 'turn',\r\n strn: 'strand',\r\n};\r\n\r\nfunction getTypeFromId(string) {\r\n const typeId = /[A-Za-z]+/.exec(string);\r\n if (!typeId) {\r\n return null;\r\n }\r\n\r\n return cSecondaryCoding[typeId[0].toLowerCase()];\r\n}\r\n\r\n/**\r\n * Make valid object an array\r\n * @param arrayLikeObject\r\n * @return {array, object} array or object\r\n */\r\nfunction arrize(arrayLikeObject) {\r\n if (arrayLikeObject === null || arrayLikeObject === undefined || _.isArray(arrayLikeObject)) {\r\n return arrayLikeObject;\r\n }\r\n return [arrayLikeObject];\r\n}\r\n\r\nfunction nameToElement(name) {\r\n // http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM\r\n //\r\n // http://www.cgl.ucsf.edu/chimera/docs/UsersGuide/tutorials/pdbintro.html#note1\r\n //\r\n // Atom names start with element symbols right-justified in columns 13-14\r\n // as permitted by the length of the name. For example, the symbol FE for\r\n // iron appears in columns 13-14, whereas the symbol C for carbon appears\r\n // in column 14 (see Misaligned Atom Names). If an atom name has four\r\n // characters, however, it must start in column 13 even if the element\r\n // symbol is a single character (for example, see Hydrogen Atoms).\r\n\r\n const veryLong = name.trim().length === 4;\r\n return name.slice(0, veryLong ? 1 : 2).trim();\r\n}\r\n\r\nclass AtomDataError extends Error {\r\n constructor(message) {\r\n super();\r\n this.name = 'AtomDataError';\r\n this.message = message;\r\n }\r\n}\r\n\r\nfunction _getOperations(operList) {\r\n if (!operList) {\r\n return null;\r\n }\r\n const idc = arrize(operList.id);\r\n const { matrix, vector } = operList;\r\n if (!idc || !matrix || !vector) {\r\n return null;\r\n }\r\n\r\n const ops = [];\r\n for (let i = 0, n = idc.length; i < n; ++i) {\r\n const mtx = new THREE.Matrix4();\r\n const { elements } = mtx;\r\n\r\n for (let row = 0; row < 3; ++row) {\r\n const matrixData = matrix[row + 1];\r\n elements[row] = arrize(matrixData[1])[i];\r\n elements[row + 4] = arrize(matrixData[2])[i];\r\n elements[row + 8] = arrize(matrixData[3])[i];\r\n elements[row + 12] = arrize(vector[row + 1])[i];\r\n }\r\n ops[idc[i]] = mtx;\r\n }\r\n return ops;\r\n}\r\n\r\nfunction _extractOperations(assemblyGen, opsDict) {\r\n assemblyGen = _.isString(assemblyGen) ? assemblyGen : `${assemblyGen}`;\r\n const l = assemblyGen.replace(/\\)\\s*\\(/g, '!').replace(/[()']/g, '');\r\n const groupStr = l.split('!');\r\n const gps = [];\r\n\r\n for (let grIdx = 0, grCount = groupStr.length; grIdx < grCount; ++grIdx) {\r\n const gr = groupStr[grIdx].split(',');\r\n const gp = [];\r\n let idx = 0;\r\n for (let i = 0, n = gr.length; i < n; ++i) {\r\n const s = gr[i];\r\n if (s.includes('-')) {\r\n const es = s.split('-');\r\n let j = parseInt(es[0], 10);\r\n const m = parseInt(es[1], 10);\r\n for (; j <= m; ++j) {\r\n gp[idx++] = opsDict[j];\r\n }\r\n } else {\r\n gp[idx++] = opsDict[s];\r\n }\r\n }\r\n gps.push(gp);\r\n }\r\n\r\n // traverse all groups from the end of array and make all mults\r\n const matrices = [];\r\n let cnt = 0;\r\n function traverse(level, mtx) {\r\n for (let ii = 0, nn = gps[level].length; ii < nn; ++ii) {\r\n const newMtx = mtx ? mtx.clone() : new THREE.Matrix4();\r\n newMtx.multiplyMatrices(gps[level][ii], newMtx);\r\n if (level === 0) {\r\n matrices[cnt++] = newMtx;\r\n } else {\r\n traverse(level - 1, newMtx);\r\n }\r\n }\r\n }\r\n traverse(gps.length - 1);\r\n return matrices;\r\n}\r\n\r\nclass CIFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this.asymDict = {};\r\n this.molecules = [];\r\n this._options.fileType = 'cif';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && /^\\s*data_/i.test(data);\r\n }\r\n\r\n parseSync() {\r\n this.logger.info('Parsing CIF file..');\r\n const data = readCIF(this._data);\r\n return this._toComplex(data);\r\n }\r\n\r\n /**\r\n * Convert intermediate structure into our valid Complex object\r\n * @param cifData intermediate CIF object\r\n * @returns {Complex} complex\r\n * @private\r\n */\r\n _toComplex(cifData) {\r\n const complex = new Complex();\r\n const complexData = cifData[Object.keys(cifData)[0]];\r\n this._extractAtoms(complex, complexData);\r\n this._extractSecondary(complex, complexData);\r\n this._extractAssemblies(complex, complexData);\r\n this._extractMolecules(complex, complexData);\r\n this._extractMetadata(complex, complexData);\r\n complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n });\r\n\r\n return complex;\r\n }\r\n\r\n /**\r\n * Extract metadata\r\n * @param complex structure to fill\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n\r\n _extractMetadata(complex, complexData) {\r\n const { metadata } = complex;\r\n metadata.id = complexData.entry.id;\r\n metadata.classification = complexData.struct_keywords.pdbx_keywords;\r\n const databaserev = complexData.database_PDB_rev;\r\n metadata.date = (databaserev && databaserev.date_original) ? databaserev.date_original : '';\r\n metadata.format = 'cif';\r\n metadata.title = [];\r\n metadata.title[0] = complexData.struct.title;\r\n }\r\n\r\n /**\r\n * Extract molecules information from CIF structure (should be called strictly after _extractAtoms)\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractMolecules(complex, complexData) {\r\n const molData = complexData.entity;\r\n const names = arrize(molData.pdbx_description);\r\n const count = names.length;\r\n let i;\r\n\r\n // molecules names from cif\r\n for (i = 0; i < count; i++) {\r\n if (this.molecules[i]) { // molecule was created during atoms processing\r\n this.molecules[i].name = names[i];\r\n } else { // molecule wasn't created, because there is no atom which is contained\r\n this.molecules[i] = { name: names[i], residues: [] };\r\n }\r\n }\r\n\r\n // reorganize molecules for complex and check chains\r\n const molecules = complex.getMolecules();\r\n for (i = 0; i < count; i++) {\r\n const molecule = this.molecules[i];\r\n molecules[i] = new Molecule(complex, molecule.name, i + 1);\r\n molecules[i].residues = molecule.residues;\r\n }\r\n }\r\n\r\n /**\r\n * Extract atom information from CIF structure and fill complex\r\n * @param {Complex} complex\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractAtoms(complex, complexData) {\r\n const atomData = complexData.atom_site;\r\n if (!atomData) {\r\n throw new AtomDataError('CIF parsing error: atom_site is not specified!');\r\n }\r\n\r\n for (let f = 0, n = cRequiredAtomFields.length; f < n; ++f) {\r\n if (!atomData[cRequiredAtomFields[f]]) {\r\n throw new AtomDataError(`CIF parsing error: requires field ${cRequiredAtomFields[f]} not found!`);\r\n }\r\n }\r\n\r\n const { asymDict } = this;\r\n // required fields\r\n const resIdc = arrize(atomData.auth_seq_id);\r\n const x = arrize(atomData.Cartn_x);\r\n const y = arrize(atomData.Cartn_y);\r\n const z = arrize(atomData.Cartn_z);\r\n const names = arrize(atomData.label_atom_id);\r\n const count = names.length;\r\n // optional fields\r\n const group = arrize(atomData.group_PDB) || [];\r\n const chainIdc = arrize(atomData.auth_asym_id) || [];\r\n const chainLabelIdc = arrize(atomData.label_asym_id) || [];\r\n const serials = arrize(atomData.id) || [];\r\n const iCodes = arrize(atomData.pdbx_PDB_ins_code) || [];\r\n const resNames = arrize(atomData.label_comp_id) || [];\r\n const elements = arrize(atomData.type_symbol) || [];\r\n const tempFactors = arrize(atomData.B_iso_or_equiv) || [];\r\n const occupancies = arrize(atomData.occupancy) || [];\r\n const charges = arrize(atomData.pdbx_formal_charge) || [];\r\n const altLocs = arrize(atomData.label_alt_id) || [];\r\n const models = arrize(atomData.pdbx_PDB_model_num) || [];\r\n const molecules = arrize(atomData.label_entity_id) || [];\r\n\r\n let chain = null;\r\n let residue = null;\r\n for (let i = 0; i < count; ++i) {\r\n const model = models[i] || 1;\r\n if (model !== 1) {\r\n continue;\r\n }\r\n const chainID = String(chainIdc[i] || ' ');\r\n\r\n if (!chain || chain.getName() !== chainID) {\r\n chain = complex.getChain(chainID) || complex.addChain(chainID);\r\n }\r\n asymDict[String(chainLabelIdc[i] || ' ')] = chainID;\r\n const resSeq = resIdc[i];\r\n const iCode = String(iCodes[i] || ' ');\r\n const resName = String(resNames[i] || '');\r\n if (!residue || residue.getSequence() !== resSeq || residue.getICode() !== iCode) {\r\n residue = chain.addResidue(resName, resSeq, iCode);\r\n\r\n // store residue in appropriate molecule\r\n const moleculeIdx = molecules[i] - 1;\r\n let entity = this.molecules[moleculeIdx];\r\n if (!entity) { // create new molecule if it hasn't been created\r\n this.molecules[moleculeIdx] = { name: '', residues: [] };\r\n entity = this.molecules[moleculeIdx];\r\n }\r\n entity.residues.push(residue);\r\n }\r\n\r\n const name = names[i];\r\n const element = elements[i] || nameToElement(name);\r\n const type = Element.getByName(element);\r\n const role = Element.Role[name.trim()];\r\n const xyz = new THREE.Vector3(x[i], y[i], z[i]);\r\n const het = group[i] === 'HETATM' || false;\r\n const serial = serials[i] || i;\r\n const tempFactor = tempFactors[i] || 0.0;\r\n const occupancy = occupancies[i] || 0.0;\r\n const altLoc = String(altLocs[i] || '');\r\n const charge = charges[i] || 0;\r\n\r\n residue.addAtom(\r\n name,\r\n type,\r\n xyz,\r\n role,\r\n het,\r\n serial,\r\n altLoc,\r\n occupancy,\r\n tempFactor,\r\n charge,\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Extracts secondary structure information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex - complex to fill\r\n * @param complexData - CIF complex data\r\n * @private\r\n */\r\n _extractSecondary(complex, complexData) {\r\n if (complexData.struct_conf) {\r\n this._extractConfs(complex, complexData.struct_conf);\r\n }\r\n if (complexData.struct_sheet_range) {\r\n this._extractSheets(complex, complexData.struct_sheet_range);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts sheets information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex\r\n * @param sheetData\r\n * @private\r\n */\r\n _extractSheets(complex, sheetData) {\r\n const { asymDict } = this;\r\n if (!sheetData.sheet_id || !sheetData.id || !sheetData.beg_label_seq_id || !sheetData.end_label_seq_id\r\n || !sheetData.beg_label_asym_id) {\r\n return;\r\n }\r\n // Strand(sheet, start, end, sense, cur, prev)\r\n const sheets = complex._sheets;\r\n\r\n function getSheet(name) {\r\n const n = sheets.length;\r\n for (let i = 0; i < n; ++i) {\r\n if (sheets[i]._name === name) {\r\n return sheets[i];\r\n }\r\n }\r\n sheets[n] = new Sheet(name, 0);\r\n return sheets[n];\r\n }\r\n\r\n const sheetNames = arrize(sheetData.sheet_id);\r\n const strandNames = arrize(sheetData.id);\r\n const starts = arrize(sheetData.beg_auth_seq_id);\r\n const ends = arrize(sheetData.end_auth_seq_id);\r\n const chains = arrize(sheetData.beg_label_asym_id);\r\n const stICodes = arrize(sheetData.pdbx_beg_PDB_ins_code) || [];\r\n const endICodes = arrize(sheetData.pdbx_end_PDB_ins_code) || [];\r\n\r\n for (let i = 0, n = strandNames.length; i < n; ++i) {\r\n const chain = complex.getChain(asymDict[chains[i]]);\r\n const sheet = getSheet(sheetNames[i]);\r\n const startIdx = starts[i];\r\n const endIdx = ends[i];\r\n const startICode = stICodes[i] || ' ';\r\n const endICode = endICodes[i] || ' ';\r\n\r\n const start = chain.findResidue(startIdx, startICode);\r\n const end = chain.findResidue(endIdx, endICode);\r\n\r\n // TODO think about last condition\r\n if (!start || !end) {\r\n continue;\r\n }\r\n\r\n const strand = new Strand(sheet, start[0], end[0], 0, null, null);\r\n const residues = chain.getResidues();\r\n for (let r = start[1]; r <= end[1]; ++r) {\r\n residues[r]._secondary = strand;\r\n }\r\n sheet.addStrand(strand);\r\n complex.structures.push(strand);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts helix/turn/strand(?) information from CIF intermediate data\r\n * and adds it into complex\r\n * @param {Complex} complex\r\n * @param helicesData\r\n * @private\r\n */\r\n _extractConfs(complex, helicesData) {\r\n const { asymDict } = this;\r\n if (!helicesData.conf_type_id || !helicesData.beg_label_seq_id || !helicesData.end_label_seq_id\r\n || !helicesData.beg_label_asym_id) {\r\n return;\r\n }\r\n\r\n const types = arrize(helicesData.conf_type_id);\r\n const starts = arrize(helicesData.beg_auth_seq_id);\r\n const stICodes = arrize(helicesData.pdbx_beg_PDB_ins_code) || [];\r\n const ends = arrize(helicesData.end_auth_seq_id);\r\n const endICodes = arrize(helicesData.pdbx_end_PDB_ins_code) || [];\r\n const comments = arrize(helicesData.details) || [];\r\n const lengths = arrize(helicesData.pdbx_PDB_helix_length) || [];\r\n const helixClasses = arrize(helicesData.pdbx_PDB_helix_class) || [];\r\n const names = arrize(helicesData.id) || [];\r\n const chains = arrize(helicesData.beg_label_asym_id);\r\n\r\n for (let i = 0, n = types.length; i < n; ++i) {\r\n const type = getTypeFromId(types[i]);\r\n if (!type) {\r\n continue;\r\n }\r\n const name = names[i] || types[i];\r\n const chain = complex.getChain(asymDict[chains[i]]);\r\n\r\n const startIdx = starts[i];\r\n const endIdx = ends[i];\r\n const startICode = stICodes[i] || ' ';\r\n const endICode = endICodes[i] || ' ';\r\n\r\n const start = chain.findResidue(startIdx, startICode);\r\n const end = chain.findResidue(endIdx, endICode);\r\n\r\n // TODO think about last condition\r\n if (!start || !end) {\r\n continue;\r\n }\r\n const comment = comments[i] || '';\r\n const length = lengths[i] || 0;\r\n const helixClass = helixClasses[i] || ' ';\r\n let struct;\r\n if (type === 'helix') {\r\n const idx = complex._helices.length;\r\n struct = new Helix(helixClass, start[0], end[0], idx, name, comment, length);\r\n complex.addHelix(struct);\r\n complex.structures.push(struct);\r\n } else if (type === 'turn') {\r\n struct = new StructuralElement(StructuralElement.Type.TURN, start[0], end[0]);\r\n complex.structures.push(struct);\r\n } else {\r\n struct = null;\r\n }\r\n if (!struct) {\r\n continue;\r\n }\r\n const residues = chain.getResidues();\r\n for (let r = start[1]; r <= end[1]; ++r) {\r\n residues[r]._secondary = struct;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Extract biological assemblies information from CIF structure and fill complex\r\n * @param {Complex} complex\r\n * @param complexData complex data from CIF file\r\n * @private\r\n */\r\n _extractAssemblies(complex, complexData) {\r\n const { asymDict } = this;\r\n const asmGen = complexData.pdbx_struct_assembly_gen;\r\n if (!asmGen) {\r\n return;\r\n }\r\n\r\n const asmIdx = arrize(asmGen.assembly_id);\r\n const asmOper = arrize(asmGen.oper_expression);\r\n const asmList = arrize(asmGen.asym_id_list);\r\n if (!asmIdx || !asmOper || !asmList) {\r\n return;\r\n }\r\n\r\n const operList = _getOperations(complexData.pdbx_struct_oper_list);\r\n if (!operList) {\r\n return;\r\n }\r\n\r\n for (let i = 0, n = asmIdx.length; i < n; ++i) {\r\n const asm = new Assembly(complex);\r\n const assemblyOps = _extractOperations(asmOper[i], operList);\r\n const entries = asmList[i].split(',');\r\n for (let ii = 0, nn = entries.length; ii < nn; ++ii) {\r\n const chain = entries[ii].trim();\r\n if (chain.length > 0) {\r\n asm.addChain(asymDict[chain]);\r\n }\r\n }\r\n asm.matrices = assemblyOps;\r\n complex.units.push(asm);\r\n }\r\n }\r\n}\r\n\r\nCIFParser.formats = ['cif', 'mmcif'];\r\nCIFParser.extensions = ['.cif', '.mmcif'];\r\n\r\nexport default CIFParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Volume from '../../chem/Volume';\r\n\r\nexport const valueType = {\r\n singular: 0,\r\n vector: 1,\r\n array: 2,\r\n buffer: 3,\r\n};\r\n\r\nclass VolumeModel {\r\n _xyz2crs = [];\r\n\r\n _origin = new THREE.Vector3(0, 0, 0);\r\n\r\n constructor() {\r\n this._header = {};\r\n this._boxSize = new THREE.Vector3();\r\n this._boxStart = new THREE.Vector3();\r\n this._header.delta = {};\r\n this._header.extent = [];\r\n this._header.nstart = [];\r\n this._header.grid = [];\r\n this._header.crs2xyz = [];\r\n this._header.cellDims = new THREE.Vector3();\r\n this._header.angles = [];\r\n this._header.origin = new THREE.Vector3(0, 0, 0);\r\n this._header.dmin = 0;\r\n this._header.dmean = 0;\r\n this._header.dmax = 0;\r\n }\r\n\r\n _typedCheck() {\r\n if (_.isTypedArray(this._buff)) {\r\n this._buff = this._buff.buffer;\r\n } else if (!_.isArrayBuffer(this._buff)) {\r\n throw new TypeError('Expected ArrayBuffer or TypedArray');\r\n }\r\n }\r\n\r\n _fillHeader(headerFormat, arrays) {\r\n for (const key in headerFormat) {\r\n if (headerFormat.hasOwnProperty(key)) {\r\n switch (headerFormat[key][0]) {\r\n case valueType.singular:\r\n this._header[key] = arrays[headerFormat[key][1]][headerFormat[key][2]];\r\n break;\r\n\r\n case valueType.array:\r\n this._parseArray(this._header[key], arrays[headerFormat[key][1]], headerFormat[key][2]);\r\n break;\r\n\r\n case valueType.vector:\r\n this._parseVector(this._header[key], arrays[headerFormat[key][1]], headerFormat[key][2]);\r\n break;\r\n\r\n case valueType.buffer:\r\n this._header[key] = new Uint8Array(\r\n arrays[headerFormat[key][1]],\r\n [headerFormat[key][2]] * 4,\r\n [headerFormat[key][3]] * 4,\r\n );\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _parseVector(vector, arr, pos) {\r\n [vector.x, vector.y, vector.z] = [arr[pos], arr[pos + 1], arr[pos + 2]];\r\n }\r\n\r\n _parseArray(vector, arr, pos) {\r\n vector[0] = arr[pos];\r\n vector[1] = arr[pos + 1];\r\n vector[2] = arr[pos + 2];\r\n }\r\n\r\n _parseHeader(_buffer) {}\r\n\r\n _setAxisIndices() {}\r\n\r\n _setOrigins() {}\r\n\r\n _getAxis() {\r\n const header = this._header;\r\n\r\n const xScale = header.cellDims.x / header.grid[0];\r\n const yScale = header.cellDims.y / header.grid[1];\r\n const zScale = header.cellDims.z / header.grid[2];\r\n\r\n const [alpha, beta, gamma] = header.angles;\r\n\r\n const z1 = Math.cos(beta);\r\n const z2 = (Math.cos(alpha) - Math.cos(beta)\r\n * Math.cos(gamma)) / Math.sin(gamma);\r\n const z3 = Math.sqrt(1.0 - z1 * z1 - z2 * z2);\r\n\r\n const xaxis = new THREE.Vector3(xScale, 0, 0);\r\n const yaxis = new THREE.Vector3(Math.cos(gamma) * yScale, Math.sin(gamma) * yScale, 0);\r\n const zaxis = new THREE.Vector3(z1 * zScale, z2 * zScale, z3 * zScale);\r\n\r\n return [xaxis, yaxis, zaxis];\r\n }\r\n\r\n _getXYZdim() {\r\n return [this._header.extent[this._xyz2crs[0]],\r\n this._header.extent[this._xyz2crs[1]],\r\n this._header.extent[this._xyz2crs[2]]];\r\n }\r\n\r\n _getVolumeInfo() {\r\n const volInfo = _.pick(this._header, ['dmean', 'dmin', 'dmax', 'sd', 'delta']);\r\n volInfo.obtuseAngle = this._header.angles.map((angle) => Number(angle >= (Math.PI / 2)));\r\n return volInfo;\r\n }\r\n\r\n _setBoxParams(xaxis, yaxis, zaxis) {\r\n // if axes are not orthogonal, the origins might not match with box coordinates - need to make shift\r\n let shiftX = 0;\r\n let shiftY = 0;\r\n const [alpha, beta, gamma] = this._header.angles;\r\n\r\n if (gamma >= Math.PI / 2) {\r\n shiftX += Math.abs(yaxis.x);\r\n }\r\n if (beta >= Math.PI / 2) {\r\n shiftX += Math.abs(zaxis.x);\r\n }\r\n if (alpha >= Math.PI / 2) {\r\n shiftY += Math.abs(zaxis.y);\r\n }\r\n\r\n this._boxStart = new THREE.Vector3(this._origin.x - shiftX, this._origin.y - shiftY, this._origin.z);\r\n this._boxSize = new THREE.Vector3(\r\n Math.abs(xaxis.x) + Math.abs(yaxis.x) + Math.abs(zaxis.x),\r\n Math.abs(yaxis.y) + Math.abs(zaxis.y),\r\n Math.abs(zaxis.z),\r\n );\r\n\r\n const delta = (axe, proj) => (Math.abs(axe[proj]) / this._boxSize[proj]);\r\n this._header.delta.x = delta(yaxis, 'x');\r\n this._header.delta.y = delta(zaxis, 'x');\r\n this._header.delta.z = delta(zaxis, 'y');\r\n }\r\n\r\n _getXYZbox() {\r\n return new THREE.Box3(this._boxStart.clone(), this._boxStart.clone().add(this._boxSize));\r\n }\r\n\r\n _toXYZData() {}\r\n\r\n parse(data) {\r\n this._parseHeader(data);\r\n this._setOrigins();\r\n return new Volume(Float32Array, this._getXYZdim(), this._getXYZbox(), 1, this._toXYZData(), this._getVolumeInfo());\r\n }\r\n}\r\n\r\nexport default VolumeModel;\r\n","import Parser from './Parser';\r\nimport VolumeModel, { valueType } from './VolumeModel';\r\n\r\nconst CCP4Header = {\r\n extent: [valueType.array, 'u32', 0],\r\n type: [valueType.singular, 'u32', 3],\r\n nstart: [valueType.array, 'i32', 4],\r\n grid: [valueType.array, 'u32', 7],\r\n cellDims: [valueType.vector, 'f32', 10],\r\n angles: [valueType.array, 'f32', 13],\r\n crs2xyz: [valueType.array, 'i32', 16],\r\n dmin: [valueType.singular, 'f32', 19],\r\n dmax: [valueType.singular, 'f32', 20],\r\n dmean: [valueType.singular, 'f32', 21],\r\n ispg: [valueType.singular, 'u32', 22],\r\n nsymbt: [valueType.singular, 'u32', 23],\r\n lksflg: [valueType.singular, 'u32', 24],\r\n customData: [valueType.buffer, 'buffer', 25, 9],\r\n origin: [valueType.vector, 'f32', 34],\r\n map: [valueType.buffer, 'buffer', 52, 1],\r\n machine: [valueType.singular, 'u32', 53],\r\n sd: [valueType.singular, 'f32', 54],\r\n nlabel: [valueType.singular, 'f32', 55],\r\n label: [valueType.buffer, 'buffer', 56, 200],\r\n};\r\n\r\nclass Ccp4Model extends VolumeModel {\r\n // read header (http://www.ccp4.ac.uk/html/maplib.html)\r\n _parseHeader(_buffer) {\r\n this._buff = _buffer;\r\n this._typedCheck();\r\n const arrays = {};\r\n arrays.u32 = new Uint32Array(this._buff, 0, 56);\r\n arrays.i32 = new Int32Array(this._buff, 0, 56);\r\n arrays.f32 = new Float32Array(this._buff, 0, 56);\r\n arrays.buffer = this._buff;\r\n const header = this._header;\r\n\r\n this._fillHeader(CCP4Header, arrays);\r\n\r\n // calculate non-orthogonal unit cell coordinates\r\n header.angles.forEach((angle, i, a) => { a[i] *= Math.PI / 180.0; });\r\n }\r\n\r\n _setAxisIndices() {\r\n const header = this._header;\r\n\r\n if (header.cellDims.x === 0.0 && header.cellDims.y === 0.0 && header.cellDims.z === 0.0) {\r\n header.cellDims.set(1.0, 1.0, 1.0);\r\n }\r\n // Apply header conversion\r\n // Mapping between CCP4 column, row, section and VMD x, y, z.\r\n const { crs2xyz } = this._header;\r\n if (crs2xyz[0] === 0 && crs2xyz[1] === 0 && crs2xyz[2] === 0) {\r\n crs2xyz[0] = 1;\r\n crs2xyz[1] = 2;\r\n crs2xyz[2] = 3;\r\n }\r\n\r\n const xyz2crs = this._xyz2crs;\r\n xyz2crs[crs2xyz[0] - 1] = 0; // column\r\n xyz2crs[crs2xyz[1] - 1] = 1; // row\r\n xyz2crs[crs2xyz[2] - 1] = 2; // section\r\n }\r\n\r\n _setOrigins() {\r\n const [xaxis, yaxis, zaxis] = this._getAxis();\r\n this._setAxisIndices();\r\n\r\n const header = this._header;\r\n const xyz2crs = this._xyz2crs;\r\n // Handle both MRC-2000 and older format maps\r\n if (header.origin.x === 0.0 && header.origin.y === 0.0 && header.origin.z === 0.0) {\r\n this._origin.addScaledVector(xaxis, header.nstart[xyz2crs[0]]);\r\n this._origin.addScaledVector(yaxis, header.nstart[xyz2crs[1]]);\r\n this._origin.addScaledVector(zaxis, header.nstart[xyz2crs[2]]);\r\n } else {\r\n this._origin = header.origin;\r\n // Use ORIGIN records rather than old n[xyz]start records\r\n // http://www2.mrc-lmb.cam.ac.uk/image2000.html\r\n // XXX the ORIGIN field is only used by the EM community, and\r\n // has undefined meaning for non-orthogonal maps and/or non-cubic voxels, etc.\r\n }\r\n xaxis.multiplyScalar(header.extent[xyz2crs[0]] - 1);\r\n yaxis.multiplyScalar(header.extent[xyz2crs[1]] - 1);\r\n zaxis.multiplyScalar(header.extent[xyz2crs[2]] - 1);\r\n\r\n if (header.type === 2) {\r\n this._data = new Float32Array(\r\n this._buff,\r\n 1024 + header.nsymbt,\r\n header.extent[0] * header.extent[1] * header.extent[2],\r\n );\r\n } else {\r\n throw new Error(`CCP4: Unsupported format ${header.type}`);\r\n }\r\n\r\n this._setBoxParams(xaxis, yaxis, zaxis);\r\n }\r\n\r\n _toXYZData() {\r\n const header = this._header;\r\n const data = this._data;\r\n const xyz2crs = this._xyz2crs;\r\n const xyzData = new Float32Array(data.length);\r\n\r\n const dim = this._getXYZdim();\r\n const xSize = dim[0];\r\n const ySize = dim[1];\r\n\r\n let crsIdx = 0;\r\n const coord = [];\r\n let x;\r\n let y;\r\n let z;\r\n for (coord[2] = 0; coord[2] < header.extent[2]; coord[2]++) { // Site\r\n for (coord[1] = 0; coord[1] < header.extent[1]; coord[1]++) { // Row\r\n for (coord[0] = 0; coord[0] < header.extent[0]; coord[0]++, crsIdx++) { // Column\r\n x = coord[xyz2crs[0]];\r\n y = coord[xyz2crs[1]];\r\n z = coord[xyz2crs[2]];\r\n xyzData[x + xSize * (y + ySize * z)] = data[crsIdx];\r\n }\r\n }\r\n }\r\n\r\n return xyzData;\r\n }\r\n}\r\n\r\nclass CCP4Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'ccp4';\r\n this.model = new Ccp4Model();\r\n }\r\n\r\n static canProbablyParse(_data) {\r\n return false; // Autodetection is not implemented yet\r\n }\r\n\r\n parseSync() {\r\n return this.model.parse(this._data);\r\n }\r\n}\r\n\r\nCCP4Parser.formats = ['ccp4'];\r\nCCP4Parser.extensions = ['.ccp4', '.map', '.mrc'];\r\nCCP4Parser.binary = true;\r\n\r\nexport default CCP4Parser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst { Complex, Element, Molecule } = chem;\r\n\r\nclass XYZParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._atomsInf = null;\r\n\r\n this._options.fileType = 'xyz';\r\n this._fileName = options.name;\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && /^\\s*\\d+ *\\n[^\\n]*\\n\\s*\\w{1,3}\\s+-?\\d/.test(data);\r\n }\r\n\r\n _parseToAtomsInf(source) {\r\n const endnAtoms = source.indexOf('\\n');\r\n const nAtoms = parseInt(source.substring(0, endnAtoms), 10);\r\n const endComment = source.indexOf('\\n', endnAtoms + 1);\r\n let comment = source.slice(endnAtoms + 1, endComment).trim();\r\n if (comment.length === 0) {\r\n comment = this._fileName;\r\n }\r\n\r\n const startAtomsInf = endComment + source.substring(endComment).search(/\\S/);\r\n this._atomsInf = source.substring(startAtomsInf).split(/[\\s,]*\\n[\\s,]*/);\r\n if (!Number.isNaN(nAtoms) && (this._atomsInf.length - 1 !== nAtoms)) {\r\n this._complex.error = {\r\n message: 'wrong number of atoms',\r\n };\r\n return;\r\n }\r\n\r\n this._complex.metadata.format = 'xyz';\r\n this._complex.name = comment;\r\n }\r\n\r\n _parseAtomsInf() {\r\n const het = true;\r\n const altLoc = ' ';\r\n const occupancy = 1;\r\n const tempFactor = 1;\r\n const charge = 0;\r\n\r\n const chain = this._complex.addChain('A');\r\n const residue = chain.addResidue('UNK', 1, ' ');\r\n\r\n for (let i = 0; i < this._atomsInf.length - 1; i++) {\r\n const words = this._atomsInf[i].split(/[\\s,]+/);\r\n\r\n if (words.length !== 4) {\r\n this._complex.error = {\r\n message: 'missed parameters',\r\n };\r\n break;\r\n }\r\n\r\n const serial = i + 1;\r\n const name = words[0];\r\n const xyz = new THREE.Vector3(parseFloat(words[1]), parseFloat(words[2]), parseFloat(words[3]));\r\n const type = Element.getByName(name);\r\n const role = undefined;\r\n\r\n residue.addAtom(name, type, xyz, role, het, serial, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n const molecule = new Molecule(this._complex, this._complex.name, 1);\r\n molecule.residues = residue;\r\n this._complex._molecules[0] = molecule;\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n\r\n this._parseToAtomsInf(this._data);\r\n this._parseAtomsInf();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n\r\n this._complex = null;\r\n this._atomsInf = null;\r\n\r\n if (result.error) {\r\n throw new Error(result.error.message);\r\n }\r\n return result;\r\n }\r\n\r\n static formats = ['xyz'];\r\n\r\n static extensions = ['.xyz'];\r\n}\r\n\r\nexport default XYZParser;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst { Complex, Element } = chem;\r\n\r\nclass PubChemParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'pubchem+json';\r\n }\r\n\r\n static canProbablyParse(data) {\r\n return _.isString(data) && data[0] === '{';\r\n }\r\n\r\n parseSync() {\r\n this.logger.info('Parsing PubChem JSON file...');\r\n return this._toComplex(JSON.parse(this._data));\r\n }\r\n\r\n _toComplex(jsonData) {\r\n const complex = new Complex();\r\n const complexData = jsonData.PC_Compounds && jsonData.PC_Compounds[0];\r\n if (complexData) {\r\n this._extractAtoms(complex, complexData);\r\n complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n });\r\n }\r\n return complex;\r\n }\r\n\r\n _extractAtoms(complex, complexData) {\r\n let aids = complexData.atoms && complexData.atoms.aid;\r\n let elements = aids && complexData.atoms.element;\r\n if (!elements || aids.length !== elements.length) {\r\n throw new Error('Unable to parse atom elements');\r\n }\r\n elements = _.fromPairs(_.zip(aids, elements));\r\n const atoms = {};\r\n\r\n const coords = complexData.coords && complexData.coords[0];\r\n const model = coords && coords.conformers && coords.conformers[0];\r\n const xs = model && model.x;\r\n const ys = model && model.y;\r\n const zs = (model && model.z) || [];\r\n aids = coords && coords.aid;\r\n if (!aids || !xs || !ys) {\r\n throw new Error('Coordinates are not found in the file');\r\n }\r\n\r\n const chain = complex.addChain(' ');\r\n const residue = chain.addResidue('UNK', 1, ' ');\r\n\r\n for (let i = 0, n = aids.length; i < n; ++i) {\r\n const aid = aids[i];\r\n const element = Element.ByAtomicNumber[elements[aid]];\r\n const xyz = new THREE.Vector3(xs[i], ys[i], zs[i] || 0.0);\r\n atoms[aid] = residue.addAtom(element.name, element, xyz, undefined, true, aid, ' ', 1.0, 0.0, 0);\r\n }\r\n\r\n const aids1 = complexData.bonds && complexData.bonds.aid1;\r\n const aids2 = complexData.bonds && complexData.bonds.aid2;\r\n const orders = (complexData.bonds && complexData.bonds.order) || [];\r\n if (!aids1 || !aids2 || aids1.length !== aids2.length) {\r\n return;\r\n }\r\n\r\n for (let j = 0, m = aids1.length; j < m; ++j) {\r\n complex.addBond(atoms[aids1[j]], atoms[aids2[j]], orders[j] || 1, 0, true);\r\n }\r\n }\r\n}\r\n\r\nPubChemParser.formats = ['pubchem', 'pubchem+json', 'pc'];\r\nPubChemParser.extensions = ['.json'];\r\n\r\nexport default PubChemParser;\r\n","import _ from 'lodash';\r\n\r\nexport default class SDFStream {\r\n constructor(data) {\r\n this._strings = data.split(/\\r?\\n|\\r/);\r\n this._currentStart = 0;\r\n this._currentStringIndx = 0;\r\n }\r\n\r\n setStart(start) {\r\n if (start >= this._strings.length) {\r\n this._currentStart = this._strings.length - 1;\r\n this._currentStringIndx = this._strings.length - 1;\r\n } else {\r\n this._currentStart = start;\r\n this._currentStringIndx = start;\r\n }\r\n }\r\n\r\n getNextString() {\r\n return this._strings[++this._currentStringIndx];\r\n }\r\n\r\n getCurrentString() {\r\n return this._strings[this._currentStringIndx];\r\n }\r\n\r\n getStringFromStart(numb) {\r\n this._currentStringIndx = this._currentStart + numb;\r\n return this._strings[this._currentStart + numb];\r\n }\r\n\r\n findNextDataItem() {\r\n let curStr = this.getNextString();\r\n let res = false;\r\n while (!_.isUndefined(curStr) && curStr.trim() !== '$$$$') {\r\n if (curStr.match(/>\\s+<(.*)>/)) {\r\n res = true;\r\n break;\r\n }\r\n curStr = this.getNextString();\r\n }\r\n\r\n return res;\r\n }\r\n\r\n findNextCompoundStart() {\r\n let curStr = this.getCurrentString();\r\n while (!_.isUndefined(curStr) && curStr.trim() !== '$$$$') {\r\n curStr = this.getNextString();\r\n }\r\n this.setStart(++this._currentStringIndx);\r\n return this.probablyHaveDataToParse();\r\n }\r\n\r\n probablyHaveDataToParse() {\r\n return this._currentStringIndx < this._strings.length - 2;\r\n }\r\n}\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport SDFStream from './SDFStream';\r\nimport Assembly from '../../chem/Assembly';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst chargeMap = [0, 3, 2, 1, 0, -1, -2, -3];\r\nconst orderMap = [0, 1, 2, 3, 1, 1, 1, 2];\r\nconst typeMap = [\r\n Bond.BondType.UNKNOWN, // 0 - error\r\n Bond.BondType.COVALENT, // 1 - single\r\n Bond.BondType.COVALENT, // 2 - double\r\n Bond.BondType.COVALENT, // 3 - triple\r\n Bond.BondType.AROMATIC, // 4 - aromatic\r\n Bond.BondType.UNKNOWN, // 5 - single or double\r\n Bond.BondType.AROMATIC, // 6 - single or aromatic\r\n Bond.BondType.AROMATIC, // 7 - double or aromatic\r\n // 8 - any\r\n // 9 - coordination\r\n // 10 - hydrogen\r\n];\r\n\r\nconst sdfAndMolRegexp = /.*(M\\s\\sEND).*|.*(^$$$$).*|.*>\\s+<(.+)>.*/;\r\nconst sdfRegExp = /.*($$$$).*|.*>\\s+<(.+)>.*/;\r\n\r\nconst fileFormat = { SDF: 'sdf', MOL: 'mol' };\r\n\r\nconst possibleNameTags = ['PUBCHEM_IUPAC_TRADITIONAL_NAME', /PUBCHEM_(.+)_NAME/, /(.+)name/, /(.+)NAME/];\r\nconst possibleIDTags = ['PUBCHEM_COMPOUND_CID', 'id', 'ID', /.*CID/, /.*ID/, /.*id/];\r\nconst possibleTitleTags = ['msg', 'MSG', 'message', 'title', 'description', 'desc'];\r\nconst tagsNames = ['name', 'id', 'title'];\r\nconst tags = { name: possibleNameTags, id: possibleIDTags, title: possibleTitleTags };\r\n\r\nfunction buildChainID(index) {\r\n if (!index) {\r\n return 'A';\r\n }\r\n\r\n const codes = [];\r\n while (index) {\r\n codes.push(65 + (index % 26));\r\n index = Math.trunc(index / 26);\r\n }\r\n if (codes.length > 1) {\r\n codes.reverse();\r\n codes[0] -= 1;\r\n }\r\n\r\n return String.fromCharCode(...codes);\r\n}\r\n\r\nexport default class SDFParser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._format = 'sdf';\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._molecules = null;\r\n this._metadata = {};\r\n this._metadata.molecules = [];\r\n this._currentMolProps = {};\r\n this._compoundIndx = -1;\r\n this._assemblies = [];\r\n this._atomsParsed = 0;\r\n this._atomsIndexes = [];\r\n }\r\n\r\n canProbablyParse(data) {\r\n return _.isString(data) && sdfAndMolRegexp.test(data);\r\n }\r\n\r\n _parseHeader(stream) {\r\n const molecule = {};\r\n molecule.name = stream.getStringFromStart(0);\r\n const date = parseInt(stream.getStringFromStart(1).substr(10, 6).trim(), 10);\r\n molecule.date = date.toString() || '';\r\n molecule.title = stream.getStringFromStart(2);\r\n this._metadata.molecules.push(molecule);\r\n }\r\n\r\n _parseAtoms(stream, atomsNum) {\r\n let curStr;\r\n let serial = this._atomsParsed;\r\n\r\n // each molecule = chain\\residue\r\n const chainID = buildChainID(this._compoundIndx);\r\n const resName = 'UNK';\r\n const resSeq = 1;\r\n\r\n this._chain = this._complex.getChain(chainID) || this._complex.addChain(chainID);\r\n this._residue = this._chain.addResidue(resName, resSeq, ' ');\r\n\r\n for (let i = 0; i < atomsNum; i++) {\r\n curStr = stream.getNextString();\r\n serial++;\r\n const x = parseFloat(curStr.substr(0, 10));\r\n const y = parseFloat(curStr.substr(10, 10));\r\n const z = parseFloat(curStr.substr(20, 10));\r\n const charge = chargeMap[parseInt(curStr.substr(36, 3), 10)];\r\n const xyz = new THREE.Vector3(x, y, z);\r\n let name = curStr.substr(31, 3).trim().toUpperCase();\r\n const type = Element.getByName(name);\r\n if (!this._atomsIndexes[name]) {\r\n this._atomsIndexes[name] = 0;\r\n }\r\n this._atomsIndexes[name] += 1;\r\n name += this._atomsIndexes[name]; // every atom need to have unique name.\r\n\r\n this._residue.addAtom(name, type, xyz, undefined, true, serial, ' ', 1.0, 0.0, charge);\r\n }\r\n }\r\n\r\n _parseBonds(stream, bondsNum) {\r\n let curStr;\r\n\r\n for (let i = 0; i < bondsNum; i++) {\r\n curStr = stream.getNextString();\r\n let atom1 = parseInt(curStr.substr(0, 3), 10) + this._atomsParsed;\r\n let atom2 = parseInt(curStr.substr(3, 3), 10) + this._atomsParsed;\r\n const bondType = parseInt(curStr.substr(6, 3), 10);\r\n\r\n if (atom1 > atom2) {\r\n [atom1, atom2] = [atom2, atom1];\r\n }\r\n this._complex.addBond(\r\n atom1,\r\n atom2,\r\n orderMap[bondType] || 1,\r\n typeMap[bondType] || Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n }\r\n\r\n _parseMOL(stream) {\r\n this._compoundIndx++;\r\n\r\n this._parseHeader(stream);\r\n const countsLine = stream.getStringFromStart(3);\r\n const atomsNum = parseInt(countsLine.substr(0, 3), 10);\r\n const bondsNum = parseInt(countsLine.substr(3, 3), 10);\r\n this._parseAtoms(stream, atomsNum);\r\n this._parseBonds(stream, bondsNum);\r\n\r\n this._atomsParsed += atomsNum;\r\n\r\n this._metadata.molecules[this._compoundIndx]._residues = [];\r\n this._metadata.molecules[this._compoundIndx]._residues.push(this._residue);\r\n }\r\n\r\n _parseDataItem(stream) {\r\n const tag = stream.getCurrentString();\r\n\r\n let data = [];\r\n let curStr = stream.getNextString();\r\n\r\n // read data\r\n while (curStr.trim() !== '') {\r\n data.push(curStr);\r\n curStr = stream.getNextString();\r\n }\r\n if (data.length === 1) {\r\n [data] = data;\r\n }\r\n this._currentMolProps[tag.replace(/[<>]/g, '').trim()] = data;\r\n }\r\n\r\n _parseCompound(stream) {\r\n this._parseMOL(stream);\r\n\r\n // parse data items block\r\n if (this._format === fileFormat.SDF) {\r\n this._currentMolProps = {};\r\n while (stream.findNextDataItem()) {\r\n this._parseDataItem(stream);\r\n }\r\n if (Object.keys(this._currentMolProps).length !== 0) {\r\n const molecule = this._metadata.molecules[this._compoundIndx];\r\n molecule.props = this._currentMolProps;\r\n this._tryToUpdateMoleculeData(molecule);\r\n }\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap;\r\n const complex = this._complex;\r\n\r\n const bonds = complex._bonds;\r\n for (let j = 0; j < bonds.length; j++) {\r\n const bond = bonds[j];\r\n if (bond._right < bond._left) {\r\n console.log('_fixBondsArray: Logic error.');\r\n }\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _buildAssemblies() {\r\n const chains = this._complex._chains;\r\n\r\n if (chains.length === 1) {\r\n return this._assemblies;\r\n }\r\n\r\n for (let i = 0; i < chains.length; i++) {\r\n const assembly = new Assembly(this._complex);\r\n const matrix = new THREE.Matrix4();\r\n assembly.addMatrix(matrix);\r\n assembly.addChain(chains[i]._name);\r\n this._assemblies.push(assembly);\r\n }\r\n\r\n return this._assemblies;\r\n }\r\n\r\n _buildMolecules() {\r\n this._complex._molecules = [];\r\n const { molecules } = this._metadata;\r\n for (let i = 0; i < molecules.length; i++) {\r\n const molecule = new Molecule(this._complex, molecules[i].name, i + 1);\r\n molecule.residues = molecules[i]._residues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n\r\n return this._complex._molecules;\r\n }\r\n\r\n _searchTag(tag, props) {\r\n for (let i = 0; i < props.length; i++) {\r\n if ((tag instanceof RegExp && tag.test(props[i].tag)) || tag === props[i].tag) {\r\n return props[i].data;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n _tryToFind(tagsList, props) {\r\n for (let j = 0; j < tagsList.length; j++) {\r\n const res = this._searchTag(tagsList[j], props);\r\n if (res) {\r\n return res;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n _tryToUpdateMoleculeData(molecule) {\r\n let res = false;\r\n for (let i = 0; i < tagsNames.length; i++) {\r\n const tagPossibleNames = tags[tagsNames[i]];\r\n const data = this._tryToFind(tagPossibleNames, molecule.props);\r\n if (data) {\r\n molecule[tagsNames[i]] = data;\r\n res = true;\r\n }\r\n }\r\n\r\n molecule.name = molecule.name || molecule.id;\r\n if (molecule.name.match(/^\\d+$/)) {\r\n molecule.name = `CID: ${molecule.name}`;\r\n }\r\n\r\n return res;\r\n }\r\n\r\n _finalizeMetadata() {\r\n const { molecules } = this._metadata;\r\n const { metadata } = this._complex;\r\n const complex = this._complex;\r\n\r\n if (molecules.length === 1) {\r\n complex.name = molecules[0].name;\r\n metadata.title = molecules[0].title;\r\n metadata.date = molecules[0].date;\r\n metadata.properties = molecules[0].props;\r\n } else if (molecules.length > 1) {\r\n metadata.molecules = [];\r\n for (let i = 0; i < molecules.length; i++) {\r\n metadata.molecules.push({\r\n name: molecules[i].name, date: molecules[i].date, title: molecules[i].title, properties: molecules[i].props,\r\n });\r\n }\r\n }\r\n }\r\n\r\n _finalize() {\r\n const serialAtomMap = this._serialAtomMap = {};\r\n const atoms = this._complex._atoms;\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const atom = atoms[i];\r\n serialAtomMap[atom.serial] = atom;\r\n }\r\n\r\n this._complex._finalizeBonds();\r\n this._fixBondsArray();\r\n this._finalizeMetadata();\r\n this._buildAssemblies();\r\n this._complex.units = this._complex.units.concat(this._assemblies);\r\n this._buildMolecules();\r\n this._complex.finalize({\r\n needAutoBonding: false, detectAromaticLoops: false, enableEditing: false, serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n defineFormat(data) {\r\n let format;\r\n if (sdfRegExp.test(data)) {\r\n format = fileFormat.SDF;\r\n } else {\r\n format = fileFormat.MOL;\r\n }\r\n\r\n return format;\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n const stream = new SDFStream(this._data);\r\n\r\n this._format = this.defineFormat(this._data);\r\n result.metadata.format = this._format;\r\n\r\n do {\r\n this._parseCompound(stream);\r\n } while (stream.findNextCompoundStart());\r\n\r\n this._finalize();\r\n\r\n return result;\r\n }\r\n}\r\n\r\nSDFParser.formats = ['mol', 'sdf'];\r\nSDFParser.extensions = ['.mol', '.sdf'];\r\n","import * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport VolumeModel, { valueType } from './VolumeModel';\r\n\r\n// http://www.uoxray.uoregon.edu/tnt/manual/node104.html\r\nconst DSN6Header = {\r\n nstart: [valueType.array, 'i16', 0],\r\n extent: [valueType.array, 'i16', 3],\r\n grid: [valueType.array, 'i16', 6],\r\n cellDims: [valueType.vector, 'i16', 9],\r\n angles: [valueType.array, 'i16', 12],\r\n div: [valueType.singular, 'i16', 15],\r\n adder: [valueType.singular, 'i16', 16],\r\n scaleFactor: [valueType.singular, 'i16', 17],\r\n};\r\n\r\nclass DSN6Model extends VolumeModel {\r\n _parseHeader(_buffer) {\r\n this._buff = _buffer;\r\n this._typedCheck();\r\n\r\n const arrays = {};\r\n arrays.i16 = new Int16Array(this._buff);\r\n\r\n // check and reverse if big endian\r\n if (arrays.i16[18] !== 100) {\r\n for (let i = 0, n = arrays.i16.length; i < n; ++i) {\r\n const val = arrays.i16[i];\r\n arrays.i16[i] = ((val & 0xff) << 8) | ((val >> 8) & 0xff);\r\n }\r\n }\r\n if (arrays.i16[18] !== 100) {\r\n throw new Error('DSN6: Incorrect format ');\r\n }\r\n\r\n const header = this._header;\r\n\r\n this._fillHeader(DSN6Header, arrays);\r\n header.cellDims.multiplyScalar(1.0 / header.scaleFactor);\r\n header.angles.forEach((angle, i, a) => { a[i] *= (Math.PI / 180.0) / header.scaleFactor; });\r\n header.div /= 100;\r\n }\r\n\r\n _setAxisIndices() {\r\n this._xyz2crs[0] = 0;\r\n this._xyz2crs[1] = 1;\r\n this._xyz2crs[2] = 2;\r\n }\r\n\r\n _setOrigins() {\r\n const header = this._header;\r\n const [xaxis, yaxis, zaxis] = this._getAxis();\r\n this._setAxisIndices();\r\n\r\n this._origin.addScaledVector(xaxis, header.nstart[0]);\r\n this._origin.addScaledVector(yaxis, header.nstart[1]);\r\n this._origin.addScaledVector(zaxis, header.nstart[2]);\r\n\r\n xaxis.multiplyScalar(header.extent[0]);\r\n yaxis.multiplyScalar(header.extent[1]);\r\n zaxis.multiplyScalar(header.extent[2]);\r\n\r\n this._setBoxParams(xaxis, yaxis, zaxis);\r\n }\r\n\r\n _pointCalculate(xyzData, byteBuffer, z, y, x, pos, i) {\r\n const header = this._header;\r\n\r\n if (x < header.extent[0] && y < header.extent[1] && z < header.extent[2]) {\r\n const idx = x + header.extent[0] * (y + header.extent[1] * z);\r\n xyzData[idx] = (byteBuffer[pos.counter] - header.adder) / header.div;\r\n ++pos.counter;\r\n } else {\r\n pos.counter += 8 - i;\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n _blockCalculate(xyzData, byteBuffer, zBlock, yBlock, xBlock, pos) {\r\n for (let k = 0; k < 8; ++k) {\r\n const z = 8 * zBlock + k;\r\n for (let j = 0; j < 8; ++j) {\r\n const y = 8 * yBlock + j;\r\n let inRange = true;\r\n let i = 0;\r\n while (inRange && i < 8) {\r\n const x = 8 * xBlock + i;\r\n inRange = this._pointCalculate(xyzData, byteBuffer, z, y, x, pos, i);\r\n i++;\r\n }\r\n }\r\n }\r\n }\r\n\r\n _toXYZData() {\r\n const header = this._header;\r\n const byteBuffer = new Uint8Array(this._buff);\r\n const xyzData = new Float32Array(header.extent[0] * header.extent[1] * header.extent[2]);\r\n\r\n const blocks = new THREE.Vector3(header.extent[0] / 8, header.extent[1] / 8, header.extent[2] / 8);\r\n\r\n const pos = {};\r\n pos.counter = 512;\r\n\r\n for (let zBlock = 0; zBlock < blocks.z; ++zBlock) {\r\n for (let yBlock = 0; yBlock < blocks.y; ++yBlock) {\r\n for (let xBlock = 0; xBlock < blocks.x; ++xBlock) {\r\n this._blockCalculate(xyzData, byteBuffer, zBlock, yBlock, xBlock, pos);\r\n }\r\n }\r\n }\r\n this._calculateInfoParams(xyzData);\r\n return xyzData;\r\n }\r\n\r\n _calculateInfoParams(xyzData) {\r\n this._header.dmean /= xyzData.length;\r\n let dispersion = 0;\r\n let minDensity = xyzData[0];\r\n let maxDensity = xyzData[0];\r\n for (let j = 0; j < xyzData.length; j++) {\r\n dispersion += (this._header.dmean - xyzData[j]) ** 2;\r\n\r\n if (xyzData[j] < minDensity) {\r\n minDensity = xyzData[j];\r\n }\r\n if (xyzData[j] > maxDensity) {\r\n maxDensity = xyzData[j];\r\n }\r\n }\r\n this._header.sd = Math.sqrt(dispersion / xyzData.length);\r\n this._header.dmax = maxDensity;\r\n this._header.dmin = minDensity;\r\n }\r\n}\r\n\r\nclass DSN6Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n this._options.fileType = 'dsn6';\r\n this.model = new DSN6Model();\r\n }\r\n\r\n static canParse(data, options) {\r\n if (!data) {\r\n return false;\r\n }\r\n return data instanceof ArrayBuffer && Parser.checkDataTypeOptions(options, 'dsn6');\r\n }\r\n\r\n static canProbablyParse(_data) {\r\n return false;\r\n }\r\n\r\n parseSync() {\r\n return this.model.parse(this._data);\r\n }\r\n}\r\n\r\nDSN6Parser.formats = ['dsn6'];\r\nDSN6Parser.extensions = ['.dsn6', '.omap'];\r\nDSN6Parser.binary = true;\r\n\r\nexport default DSN6Parser;\r\n","import PDBStream from './PDBStream';\r\n\r\n/**\r\n * Little helper class for GRO Parser usage.\r\n * @extends PDBStream\r\n */\r\nclass GROReader extends PDBStream {\r\n constructor(data) {\r\n super(data);\r\n /** @type Number */\r\n this._next = -1; // End position of line\r\n this.next();\r\n }\r\n\r\n /**\r\n * Getting end of string.\r\n * @returns {Number} Pointer to end of string\r\n */\r\n getNext() {\r\n return this._next;\r\n }\r\n}\r\n\r\nexport default GROReader;\r\n","import * as THREE from 'three';\r\nimport _ from 'lodash';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\nimport GROReader from './GROReader';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Molecule,\r\n} = chem;\r\n\r\n/**\r\n * Gromos87 file format parser.\r\n * @extends Parser\r\n */\r\nclass GROParser extends Parser {\r\n /**\r\n * Create parser for .gro file format\r\n *\r\n * @param {String} data Input file\r\n * @param {String} options Input options (optional field)\r\n */\r\n constructor(data, options) {\r\n super(data, options);\r\n /** @type Date */\r\n this._time = null; // Time in ps, optional field for animations\r\n /** @type Number */\r\n this._numAtoms = null; // Number of atoms in complex\r\n /** @type Number */\r\n this._residueNumber = null; // Number of exact residue\r\n /** @type String */\r\n this._residueName = ''; // Scientific name of exact residue\r\n /** @type String */\r\n this._atomName = ''; // Scientific name of exact atom\r\n /** @type Number */\r\n this._atomNumber = null; // Sorted number of exact atom\r\n /** @type Array */\r\n this._atomPosition = []; // Array which contains x, y, z position of exact atom\r\n /** @type Array */\r\n this._atomVelocity = []; // Array which contains x, y, z velocity of exact atom (optional)\r\n /** @type Complex */\r\n this._complex = null; // Complex structure for unified molecule representation\r\n /** @type Vector3 */\r\n this._molecules = []; // Molecules array\r\n /** @type Molecule */\r\n this._molecule = null; // Single molecule\r\n /** @type String */\r\n this._options.filetype = 'gro'; // Extension of data file.\r\n }\r\n\r\n /**\r\n * General check for possibility of parsing.\r\n * @param {String} data - Input file\r\n * @returns {boolean} true if this file is in ascii, false otherwise\r\n */\r\n canProbablyParse(data) {\r\n return _.isString(this._data) && /^\\s*[^\\n]*\\n\\s*\\d+ *\\n\\s*\\d+[^\\n\\d]{3}\\s*\\w+\\s*\\d+\\s*-?\\d/.test(data);\r\n }\r\n\r\n /**\r\n * Parsing title of molecule complex.\r\n * NOTE: that names are ESTIMATES, there is no strict rules in Gromos87 standard for first line in input file.\r\n * @param {GROReader} line - Line containing title and time.\r\n */\r\n _parseTitle(line) {\r\n const { metadata } = this._complex;\r\n metadata.id = line.readLine().trim();\r\n metadata.name = metadata.id.slice(metadata.id.lastIndexOf('\\\\') + 1, metadata.id.lastIndexOf('.'));\r\n metadata.format = 'gro';\r\n }\r\n\r\n /**\r\n * Parsing line containing number of atoms information.\r\n * @param {GROReader} line - Line containing number of atoms.\r\n */\r\n _parseNumberOfAtoms(line) {\r\n this._numAtoms = line.readInt(0, line.getNext());\r\n if (Number.isNaN(this._numAtoms)) {\r\n throw new Error('Line 2 is not representing atom number. Consider checking input file');\r\n }\r\n }\r\n\r\n /**\r\n * Parsing line containing information about residues, atoms etc. Also information about box vectors.\r\n * Format of atoms MUST (by Gromos87 standard) be this: (note that numbering starts not from 0, but from 1!)\r\n * ResidueNumber[1 - 5] ResidueName[6 - 10] AtomName[11 - 15] AtomNumber[16 - 20] Position[21 - 45] Velocity[46 - 69]\r\n * @param {GROReader} line - Line containing information about atom.\r\n */\r\n _parseAtom(line) {\r\n this._residueNumber = line.readInt(1, 5);\r\n this._residueName = line.readString(6, 10).trim();\r\n this._atomName = line.readString(11, 15).trim();\r\n this._atomNumber = line.readInt(16, 20);\r\n const positionX = line.readFloat(21, 28) * 10;\r\n const positionY = line.readFloat(29, 36) * 10;\r\n const positionZ = line.readFloat(37, 45) * 10;\r\n if (Number.isNaN(positionX) || Number.isNaN(positionY) || Number.isNaN(positionZ)) {\r\n this._complex.error = {\r\n message: `Atom position is invalid in \"${line.readLine()}\"`,\r\n };\r\n return;\r\n }\r\n /* const velocityX = line.readFloat(46, 53);\r\n const velocityY = line.readFloat(54, 61);\r\n const velocityZ = line.readFloat(62, 69); */\r\n /* Adding residue and atom to complex structure */\r\n const type = Element.getByName(this._atomName[0]); /* MAGIC 0. REASONS: This name is something like \"CA\", where\r\n C - is an element an A is something else. But what about Calcium? */\r\n if (type.fullName === 'Unknown') {\r\n this._complex.error = {\r\n message: `${this._atomName[0]} hasn't been recognised as an atom name.`,\r\n };\r\n return;\r\n }\r\n const role = Element.Role[this._atomName];\r\n /* Firstly, create a dummy chain */\r\n let chain = this._chain;\r\n if (!chain) {\r\n this._chain = chain = this._complex.addChain('A');\r\n }\r\n /* Secondly, add residue to that chain */\r\n let residue = this._residue;\r\n if (!residue || residue.getSequence() !== this._residueNumber) {\r\n this._residue = residue = chain.addResidue(this._residueName, this._residueNumber, ' ');\r\n }\r\n /* Lastly, add atom to that residue */\r\n this._atomPosition = new THREE.Vector3(positionX, positionY, positionZ);\r\n /* Adding default constants to correct atom addition process */\r\n const het = true;\r\n const altLoc = ' ';\r\n const occupancy = 1;\r\n const tempFactor = 1;\r\n const charge = 0;\r\n residue.addAtom(this._atomName, type, this._atomPosition, role, het, this._atomNumber, altLoc, occupancy, tempFactor, charge);\r\n }\r\n\r\n /**\r\n * Some finalizing procedures. In '.gro' file format there is only 1 chain and 1 molecule.\r\n */\r\n _finalize() {\r\n const molecule = new Molecule(this._complex, this._complex.metadata.name, 1);\r\n // aggregate residues from chain\r\n molecule.residues = this._chain._residues;\r\n molecule._chains = this._chain;\r\n this._complex._molecules[0] = molecule;\r\n this._molecules.push(molecule);\r\n this._complex.finalize({\r\n needAutoBonding: true,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n /**\r\n * Main parsing procedure.\r\n * @returns {Complex} Complex structure for visualizing.\r\n */\r\n parseSync() {\r\n /* Create \"Complex\" variable */\r\n const result = this._complex = new Complex();\r\n /* Parse input file line-by-line */\r\n const reader = new GROReader(this._data);\r\n let counter = 0; /* Simple counter regarding to format of .gro file */\r\n /* First two lines - technical information, other lines - Atoms */\r\n this._parseTitle(reader);\r\n reader.next();\r\n this._parseNumberOfAtoms(reader);\r\n reader.next();\r\n for (counter = 0; counter < this._numAtoms; ++counter) {\r\n if (!reader.end()) {\r\n this._parseAtom(reader);\r\n reader.next();\r\n } else break;\r\n }\r\n /* If number of atoms in second line is less then actual atoms in file */\r\n if (counter < this._numAtoms) {\r\n this._complex.error = {\r\n message: 'File ended unexpectedly.',\r\n };\r\n }\r\n /* Catch errors occurred in parsing process */\r\n if (result.error) {\r\n throw new Error(result.error.message);\r\n }\r\n\r\n /* Finalizing data */\r\n this._finalize();\r\n\r\n /* Cleaning up */\r\n this._atomPosition = null;\r\n this._complex = null;\r\n this._molecules = null;\r\n this._molecule = null;\r\n\r\n /* Return resulting Complex variable */\r\n return result;\r\n }\r\n}\r\n\r\nGROParser.formats = ['gro'];\r\nGROParser.extensions = ['.gro'];\r\n\r\nexport default GROParser;\r\n","import * as THREE from 'three';\r\nimport Parser from './Parser';\r\nimport chem from '../../chem';\r\n\r\nconst {\r\n Complex,\r\n Element,\r\n Bond,\r\n Molecule,\r\n} = chem;\r\n\r\nconst orderMap = {\r\n un: 0,\r\n 1: 1,\r\n 2: 2,\r\n 3: 3,\r\n ar: 1,\r\n am: 1,\r\n nc: 0,\r\n du: 1,\r\n};\r\nconst typeMap = {\r\n un: Bond.BondType.UNKNOWN, // unknown (cannot be determined from the parameter tables)\r\n 1: Bond.BondType.COVALENT, // single\r\n 2: Bond.BondType.COVALENT, // double\r\n 3: Bond.BondType.COVALENT, // triple\r\n ar: Bond.BondType.AROMATIC, // aromatic\r\n am: Bond.BondType.COVALENT, // amide\r\n nc: Bond.BondType.UNKNOWN, // not connected\r\n du: Bond.BondType.COVALENT, // dummy\r\n};\r\n\r\nconst resNumberRegex = /\\d+$/;\r\nconst spacesRegex = /\\s+/;\r\n\r\nfunction splitToFields(str) {\r\n return str.trim().split(spacesRegex);\r\n}\r\n/* There is no jsdoc documentation because of eslint corrections:\r\n * not all Parser methods are implemented\r\n */\r\n\r\nclass MOL2Parser extends Parser {\r\n constructor(data, options) {\r\n super(data, options);\r\n\r\n this._complex = null;\r\n this._chain = null;\r\n this._residue = null;\r\n this._compoundIndx = -1;\r\n\r\n this._molecules = [];\r\n this._molecule = null;\r\n\r\n this._currPosIdx = 0;\r\n this._currStartIdx = 0;\r\n\r\n this._serialAtomMap = {};\r\n\r\n this._options.fileType = 'mol2';\r\n }\r\n\r\n _parseRawStrings(data) {\r\n return data.split(/\\r?\\n|\\r/);\r\n }\r\n\r\n _toStringFromStart(numb, MOL2Data) {\r\n const newPosIdx = this._currStartIdx + numb;\r\n this._currPosIdx = (newPosIdx < MOL2Data.length) ? newPosIdx : this._currStartIdx;\r\n }\r\n\r\n _toHeaderString(header, MOL2Data) {\r\n this._toStringFromStart(0, MOL2Data);\r\n while (this._currPosIdx < MOL2Data.length) {\r\n if (MOL2Data[this._currPosIdx].match(`@${header}`)) {\r\n return;\r\n }\r\n this._currPosIdx++;\r\n }\r\n this._toStringFromStart(0, MOL2Data);\r\n }\r\n\r\n _toStringFromHeader(header, numb, MOL2Data) {\r\n this._toHeaderString(header, MOL2Data);\r\n const newPosIdx = this._currPosIdx + numb;\r\n\r\n if (MOL2Data[this._currPosIdx].match(`@${header}`) && newPosIdx < MOL2Data.length) {\r\n this._currPosIdx = newPosIdx;\r\n }\r\n }\r\n\r\n _setStart(startPos, MOL2Data) {\r\n if (startPos >= MOL2Data.length) {\r\n this._currStartIdx = this._currPosIdx = MOL2Data.length - 1;\r\n } else {\r\n this._currStartIdx = this._currPosIdx = startPos;\r\n }\r\n }\r\n\r\n _probablyHaveDataToParse(MOL2Data) {\r\n return this._currPosIdx < MOL2Data.length - 2;\r\n }\r\n\r\n _findNextCompoundStart(MOL2Data) {\r\n while (this._currPosIdx < MOL2Data.length && MOL2Data[this._currPosIdx].trim() !== '@MOLECULE>') {\r\n this._currPosIdx++;\r\n }\r\n this._setStart(++this._currPosIdx, MOL2Data);\r\n return this._probablyHaveDataToParse(MOL2Data);\r\n }\r\n\r\n _parseMolecule(MOL2Data) {\r\n this._toHeaderString('MOLECULE', MOL2Data);\r\n\r\n const { metadata } = this._complex;\r\n metadata.name = MOL2Data[++this._currPosIdx];\r\n metadata.format = 'mol2';\r\n\r\n this._molecule = { _index: '', _chains: [] };\r\n this._molecule._index = this._compoundIndx + 1;\r\n this._molecules.push(this._molecule);\r\n }\r\n\r\n /* Atom format description:\r\n * atomId atomName x y z element [resSeq [resName [charge [statusBit]]]]\r\n * statusBits is the internal SYBYL status bits associated with the atom.\r\n * These should never be set by the user.\r\n * Source: http://chemyang.ccnu.edu.cn/ccb/server/AIMMS/mol2.pdf\r\n */\r\n _parseAtoms(atomsNum, MOL2Data) {\r\n this._toHeaderString('ATOM', MOL2Data);\r\n\r\n for (let i = 0; i < atomsNum; i++) {\r\n const parsedStr = splitToFields(MOL2Data[++this._currPosIdx]);\r\n\r\n if (parsedStr.length < 6) {\r\n throw new Error('MOL2 parsing error: Not enough information to create atom!');\r\n }\r\n const atomId = parseInt(parsedStr[0], 10);\r\n const atomName = parsedStr[1];\r\n\r\n const x = parseFloat(parsedStr[2]);\r\n const y = parseFloat(parsedStr[3]);\r\n const z = parseFloat(parsedStr[4]);\r\n\r\n const element = parsedStr[5].split('.')[0].toUpperCase();\r\n\r\n let charge = 0;\r\n if (parsedStr.length >= 9) {\r\n charge = parseFloat(parsedStr[8]) || 0.0;\r\n }\r\n\r\n let chain = this._chain;\r\n if (!chain) {\r\n // .mol2 may contain information about multiple molecules, but they can't be visualized\r\n // at the same time now. There is no need to create different chain IDs then.\r\n this._chain = chain = this._complex.getChain('A') || this._complex.addChain('A');\r\n this._residue = null;\r\n }\r\n if (!this._setResidue(parsedStr)) {\r\n continue;\r\n }\r\n\r\n // These fields are not listed in mol2 format. Set them default.\r\n // Atoms and het atoms doesn't differ in .mol2,\r\n // but het atoms have special residues. It can be used in next updates\r\n const het = false;\r\n const altLoc = ' ';\r\n const occupancy = 1.0;\r\n const tempFactor = 0.0;\r\n const type = Element.getByName(element);\r\n const role = Element.Role[atomName];\r\n\r\n const xyz = new THREE.Vector3(x, y, z);\r\n this._residue.addAtom(atomName, type, xyz, role, het, atomId, altLoc, occupancy, tempFactor, charge);\r\n }\r\n }\r\n\r\n _setResidue(parsedStr) {\r\n let resSeq = 1;\r\n let resName = 'UNK'; // The same meaning has '<0>' in some mol2 files\r\n\r\n if (parsedStr.length >= 7) {\r\n resSeq = parseInt(parsedStr[6], 10);\r\n }\r\n if (parsedStr.length >= 8 && parsedStr[7] !== '<0>') {\r\n resName = parsedStr[7].replace(resNumberRegex, '');\r\n }\r\n if (this.settings.now.nowater) {\r\n if (resName === 'HOH' || resName === 'WAT') {\r\n return false;\r\n }\r\n }\r\n const residue = this._residue;\r\n const chain = this._chain;\r\n if (!residue || residue.getSequence() !== resSeq) {\r\n this._residue = chain.addResidue(resName, resSeq, 'A');\r\n }\r\n return true;\r\n }\r\n\r\n /* Bond format description\r\n * bondId originAtomId targetAtomId bondType [statusBits]\r\n */\r\n _parseBonds(bondsNum, MOL2Data) {\r\n this._toHeaderString('BOND', MOL2Data);\r\n\r\n for (let i = 0; i < bondsNum; i++) {\r\n const parsedStr = splitToFields(MOL2Data[++this._currPosIdx]);\r\n\r\n if (parsedStr.length < 3) {\r\n throw new Error('MOL2 parsing error: Missing information about bonds!');\r\n }\r\n\r\n let originAtomId = parseInt(parsedStr[1], 10);\r\n let targetAtomId = parseInt(parsedStr[2], 10);\r\n const bondType = parsedStr[3];\r\n\r\n if (originAtomId > targetAtomId) {\r\n [originAtomId, targetAtomId] = [targetAtomId, originAtomId];\r\n }\r\n this._complex.addBond(\r\n originAtomId,\r\n targetAtomId,\r\n orderMap[bondType] || 0,\r\n typeMap[bondType] || Bond.BondType.UNKNOWN,\r\n true,\r\n );\r\n }\r\n }\r\n\r\n _fixSerialAtoms() {\r\n const atoms = this._complex._atoms;\r\n for (let i = 0; i < atoms.length; i++) {\r\n const atom = atoms[i];\r\n this._serialAtomMap[atom.serial] = atom;\r\n }\r\n }\r\n\r\n _fixBondsArray() {\r\n const serialAtomMap = this._serialAtomMap;\r\n const complex = this._complex;\r\n\r\n if (Object.keys(serialAtomMap).length === 0) {\r\n throw new Error('MOL2 parsing error: Missing atom information!');\r\n }\r\n\r\n const bonds = complex._bonds;\r\n for (let j = 0; j < bonds.length; j++) {\r\n const bond = bonds[j];\r\n bond._left = serialAtomMap[bond._left] || null;\r\n bond._right = serialAtomMap[bond._right] || null;\r\n }\r\n }\r\n\r\n _finalizeMolecules() {\r\n // Get chain from complex\r\n const chain = this._complex._chains[0];\r\n this._complex._molecules = [];\r\n\r\n // Aggregate residues from chains\r\n // (to be precise from the chain 'A')\r\n for (let i = 0; i < this._molecules.length; i++) {\r\n const currMolecule = this._molecules[i];\r\n const molResidues = chain._residues;\r\n const molecule = new Molecule(this._complex, currMolecule._name, i + 1);\r\n molecule.residues = molResidues;\r\n this._complex._molecules[i] = molecule;\r\n }\r\n }\r\n\r\n _finalize() {\r\n this._complex._finalizeBonds();\r\n this._fixSerialAtoms();\r\n this._fixBondsArray();\r\n this._finalizeMolecules();\r\n\r\n this._complex.finalize({\r\n needAutoBonding: false,\r\n detectAromaticLoops: this.settings.now.aromatic,\r\n enableEditing: this.settings.now.editing,\r\n serialAtomMap: this._serialAtomMap,\r\n });\r\n }\r\n\r\n _parseCompound(MOL2Data) {\r\n this._compoundIndx++;\r\n this._parseMolecule(MOL2Data);\r\n\r\n // Ignoring comments and everything before @MOLECULE block\r\n this._toStringFromHeader('MOLECULE', 2, MOL2Data);\r\n\r\n const parsedStr = MOL2Data[this._currPosIdx].trim().split(spacesRegex);\r\n const atomsNum = parsedStr[0];\r\n const bondsNum = parsedStr[1];\r\n\r\n this._parseAtoms(atomsNum, MOL2Data);\r\n this._parseBonds(bondsNum, MOL2Data);\r\n }\r\n\r\n parseSync() {\r\n const result = this._complex = new Complex();\r\n const MOL2Data = this._parseRawStrings(this._data);\r\n do {\r\n this._parseCompound(MOL2Data);\r\n } while (this._findNextCompoundStart(MOL2Data));\r\n\r\n this._finalize();\r\n\r\n return result;\r\n }\r\n}\r\n\r\nMOL2Parser.formats = ['mol2'];\r\nMOL2Parser.extensions = ['.mol2', '.ml2', '.sy2'];\r\n\r\nexport default MOL2Parser;\r\n","import ParserList from './parsers/ParserList';\r\n\r\nimport PDBParser from './parsers/PDBParser';\r\nimport CMLParser from './parsers/CMLParser';\r\nimport MMTFParser from './parsers/MMTFParser';\r\nimport CIFParser from './parsers/CIFParser';\r\nimport CCP4Parser from './parsers/CCP4Parser';\r\nimport XYZParser from './parsers/XYZParser';\r\nimport PubChemParser from './parsers/PubChemParser';\r\nimport SDFParser from './parsers/SDFParser';\r\nimport DSN6Parser from './parsers/DSN6Parser';\r\nimport GROParser from './parsers/GROParser';\r\nimport MOL2Parser from './parsers/MOL2Parser';\r\n\r\nexport default new ParserList([\r\n // note: order might be important\r\n PDBParser,\r\n CIFParser,\r\n MMTFParser,\r\n XYZParser,\r\n CMLParser,\r\n PubChemParser,\r\n SDFParser,\r\n CCP4Parser,\r\n DSN6Parser,\r\n GROParser,\r\n MOL2Parser,\r\n]);\r\n","import EntityList from '../../utils/EntityList';\r\n\r\n/**\r\n * A list of available exporters.\r\n * @extends EntityList\r\n */\r\nclass ExporterList extends EntityList {\r\n /**\r\n * Create a list of exporters.\r\n * The exporters are indexed by supported data formats (`.formats` and\r\n * `.extensions` properties of a Exporter subclass).\r\n * The Exporters can be retrieved later by matching against specs (see {@link ExporterList#find}).\r\n *\r\n * @param {!Array=} someExporters A list of {@link Exporter} subclasses to\r\n * automatically register at creation time.\r\n * @see ExporterList#register\r\n */\r\n constructor(someExporters = []) {\r\n super(someExporters, ['formats']);\r\n }\r\n\r\n /**\r\n * Find a suitable exporter for data.\r\n *\r\n * @param {Object} specs Exporter specifications.\r\n * @param {string=} specs.format Supported data format.\r\n * @param {*=} specs.data Data to export.\r\n */\r\n find(specs) {\r\n let list = [];\r\n if (specs.format) {\r\n list = this._dict.formats[specs.format.toLowerCase()] || [];\r\n }\r\n return [...list];\r\n }\r\n}\r\n\r\nexport default ExporterList;\r\n","import makeContextDependent from '../../utils/makeContextDependent';\r\n\r\nexport default class Exporter {\r\n constructor(source, options) {\r\n this._source = source;\r\n this._options = options || {};\r\n this._abort = false;\r\n }\r\n\r\n exportSync() {\r\n throw new Error('Exporting to this source is not implemented');\r\n }\r\n\r\n export() {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n try {\r\n if (this._abort) {\r\n return reject(new Error('Export aborted'));\r\n }\r\n return resolve(this.exportSync());\r\n } catch (error) {\r\n return reject(error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n abort() {\r\n this._abort = true;\r\n }\r\n}\r\n\r\nmakeContextDependent(Exporter.prototype);\r\n","import _ from 'lodash';\r\nimport { Matrix4 } from 'three';\r\n\r\nexport default class PDBResult {\r\n constructor() {\r\n this._resultArray = [];\r\n this._currentStr = -1;\r\n this._tag = null;\r\n this._fixedNumeration = false;\r\n this._numeration = false;\r\n this._tagStrNum = 0;\r\n }\r\n\r\n getResult() {\r\n this.writeString('\\n', 81, 81);\r\n return this._resultArray.join('');\r\n }\r\n\r\n _currentStrLength() {\r\n const curStr = this._resultArray[this._currentStr];\r\n return curStr ? curStr.length : 0;\r\n }\r\n\r\n // numeration can be number or boolean\r\n // if numeration is number then just put this number to 8-10 pos in string\r\n // if numeration is boolean then increase number for all new strings\r\n newTag(tag, numeration) {\r\n if (!tag) {\r\n this._tag = null;\r\n } else {\r\n this._tag = tag;\r\n }\r\n if (!_.isUndefined(numeration)) {\r\n if (_.isNumber(numeration)) {\r\n this._tagStrNum = numeration;\r\n this._numeration = true;\r\n this._fixedNumeration = true;\r\n } else if (_.isBoolean(numeration)) {\r\n this._tagStrNum = 0;\r\n this._numeration = numeration;\r\n this._fixedNumeration = false;\r\n }\r\n } else {\r\n this._numeration = false;\r\n this._fixedNumeration = false;\r\n this._tagStrNum = 0;\r\n }\r\n }\r\n\r\n newString(tag) {\r\n this.writeString('\\n', 81, 81);\r\n this._currentStr++;\r\n this._resultArray.push('');\r\n\r\n if (tag) {\r\n this.writeString(tag, 1, 6);\r\n } else if (this._tag) {\r\n this.writeString(this._tag, 1, 6);\r\n }\r\n\r\n if (this._numeration) {\r\n if (!this._fixedNumeration) {\r\n this._tagStrNum++;\r\n }\r\n if (this._tagStrNum !== 1) {\r\n this.writeString(this._tagStrNum.toString(), 10, 8);\r\n }\r\n }\r\n }\r\n\r\n writeEntireString(string, maxStrPos, concat) {\r\n if (!maxStrPos) {\r\n maxStrPos = 81;\r\n }\r\n for (let j = 0; j < string.length; j++) {\r\n if (this._currentStrLength() === maxStrPos && j !== string.length - 1) {\r\n this.newString();\r\n if (concat) { // pretty hardcoddy\r\n this.writeString(concat.tag, concat.begin, concat.end);\r\n }\r\n }\r\n if (string[j] === '\\n') {\r\n this.newString();\r\n } else {\r\n this.writeString(string[j]);\r\n }\r\n }\r\n }\r\n\r\n writeString(string, begin, end) {\r\n let curStr = this._resultArray[this._currentStr];\r\n let str;\r\n\r\n const curStrLength = curStr ? curStr.length : 0;\r\n\r\n if (_.isUndefined(string)) {\r\n return;\r\n }\r\n\r\n if (!_.isNumber(begin)) {\r\n begin = curStrLength + 1;\r\n }\r\n\r\n if (!_.isNumber(end)) {\r\n end = curStrLength + string.length;\r\n }\r\n\r\n if (!_.isString(string)) {\r\n str = string.toString();\r\n } else {\r\n str = string;\r\n }\r\n\r\n const finish = begin < end ? end : begin;\r\n const start = begin < end ? begin : end;\r\n\r\n if (str.length > Math.abs(begin - end) + 1) {\r\n str = str.substr(0, Math.abs(begin - end + 1));\r\n }\r\n\r\n // spaces before start of new data\r\n if (start > curStrLength + 1) {\r\n this._resultArray[this._currentStr] += ' '.repeat(start - curStrLength - 1);\r\n } else if (start <= curStrLength) {\r\n const cStr = this._resultArray[this._currentStr];\r\n this._resultArray[this._currentStr] = cStr.slice(0, start - 1);\r\n }\r\n\r\n // if reverse order\r\n // reverse order of end and begin means that user wants to align text right\r\n if (end < begin) {\r\n const len = begin - end + 1;\r\n str = ' '.repeat(len - str.length) + str;\r\n }\r\n\r\n // some hardcode fix for space between string numeration and data\r\n // (see pdb file format description)\r\n if (start === 11 && this._numeration && this._tagStrNum !== 1) {\r\n str = ` ${str}`;\r\n }\r\n\r\n // append new data to string\r\n this._resultArray[this._currentStr] += str;\r\n curStr = this._resultArray[this._currentStr];\r\n\r\n if (finish > curStr.length) {\r\n this._resultArray[this._currentStr] += ' '.repeat(finish - curStr.length);\r\n }\r\n }\r\n\r\n writeBondsArray(bonds, atom) {\r\n const bondsArrays = this._getSubArrays(bonds, 4);\r\n\r\n for (let k = 0; k < bondsArrays.length; k++) {\r\n this.newString();\r\n this.writeString(atom.serial, 11, 7);\r\n\r\n for (let j = 0; j < bondsArrays[k].length; j++) {\r\n const serial = (bondsArrays[k][j]._left.serial === atom.serial)\r\n ? bondsArrays[k][j]._right.serial : bondsArrays[k][j]._left.serial;\r\n\r\n this.writeString(serial, 16 + 5 * j, 12 + 5 * j);\r\n }\r\n }\r\n }\r\n\r\n _getSubArrays(arr, subArraySize) {\r\n const subArrays = [];\r\n for (let i = 0; i < arr.length; i += subArraySize) {\r\n subArrays.push(arr.slice(i, i + subArraySize));\r\n }\r\n return subArrays;\r\n }\r\n\r\n // function for writing matrix in Remark290 and Remark350 tags\r\n // (see pdb file description)\r\n writeMatrix(matrix, matrixIndx, tag) {\r\n for (let j = 0; j < 3; j++) {\r\n this.newString();\r\n this.writeString(tag, 14, 18);\r\n this.writeString((j + 1).toString(), 19, 19);\r\n this.writeString(matrixIndx.toString(), 23, 20);\r\n for (let k = 0; k < 3; k++) {\r\n const numb = parseFloat(matrix.elements[j * 4 + k]).toFixed(6);\r\n this.writeString(numb.toString(), 33 + k * 10, 24 + k * 10);\r\n }\r\n\r\n const numb = parseFloat(matrix.elements[j * 4 + 3]).toFixed(5);\r\n this.writeString(numb.toString(), 68, 55);\r\n }\r\n }\r\n\r\n writeMatrices(matrices, string) {\r\n if (!matrices) {\r\n return;\r\n }\r\n const matrix = new Matrix4();\r\n for (let j = 0; j < matrices.length; j++) {\r\n matrix.copy(matrices[j]).transpose();\r\n this.writeMatrix(matrix, j + 1, string);\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport Complex from '../../chem/Complex';\r\nimport Exporter from './Exporter';\r\nimport PDBResult from './PDBResult';\r\nimport Assembly from '../../chem/Assembly';\r\nimport { typeByPDBHelixClass } from '../../chem/Helix';\r\n\r\nexport default class PDBExporter extends Exporter {\r\n constructor(source, options) {\r\n super(source, options);\r\n this._tags = ['HEADER', 'TITLE', 'COMPND', 'REMARK', 'HELIX', 'SHEET', 'ATOM and HETATM', 'CONECT'];\r\n this._result = null;\r\n this._tagExtractors = {\r\n HEADER: this._extractHEADER,\r\n TITLE: this._extractTITLE,\r\n 'ATOM and HETATM': this._extractATOM,\r\n CONECT: this._extractCONECT,\r\n COMPND: this._extractCOMPND,\r\n REMARK: this._extractREMARK,\r\n HELIX: this._extractHELIX,\r\n SHEET: this._extractSHEET,\r\n };\r\n this._stringForRemark350 = 'COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN\\n'\r\n + 'BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE\\n'\r\n + 'MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS\\n'\r\n + 'GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND\\n'\r\n + 'CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN.';\r\n\r\n this._stringForRemark290 = 'CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS\\n'\r\n + 'THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM\\n'\r\n + 'RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY\\n'\r\n + 'RELATED MOLECULES.';\r\n }\r\n\r\n exportSync() {\r\n const result = new PDBResult();\r\n if (!this._source) {\r\n return this._result;\r\n }\r\n\r\n for (let i = 0; i < this._tags.length; i++) {\r\n const tag = this._tags[i];\r\n const func = this._tagExtractors[tag];\r\n if (_.isFunction(func)) {\r\n func.call(this, result);\r\n }\r\n }\r\n\r\n this._result = result.getResult();\r\n\r\n return this._result;\r\n }\r\n\r\n _extractHEADER(result) {\r\n if (!this._source.metadata) {\r\n return;\r\n }\r\n const { metadata } = this._source;\r\n result.newTag('HEADER');\r\n result.newString();\r\n if (metadata.classification) {\r\n result.writeString(metadata.classification, 11, 50);\r\n }\r\n if (metadata.date) {\r\n result.writeString(metadata.date, 51, 59);\r\n }\r\n if (metadata.id) {\r\n result.writeString(metadata.id, 63, 66);\r\n }\r\n }\r\n\r\n _extractTITLE(result) {\r\n if (!this._source.metadata) {\r\n return;\r\n }\r\n const { metadata } = this._source;\r\n if (!metadata.title) {\r\n return;\r\n }\r\n result.newTag('TITLE', true);\r\n for (let i = 0; i < metadata.title.length; i++) {\r\n result.newString();\r\n result.writeString(metadata.title[i], 11, 80);\r\n }\r\n }\r\n\r\n _extractCONECT(result) {\r\n if (!this._source._atoms) {\r\n return;\r\n }\r\n\r\n const atoms = this._source._atoms;\r\n result.newTag('CONECT');\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const fixedBonds = atoms[i].bonds.filter((bond) => bond._fixed);\r\n if (fixedBonds.length !== 0) {\r\n result.writeBondsArray(fixedBonds.reverse(), atoms[i]);\r\n }\r\n }\r\n }\r\n\r\n _extractSHEET(result) {\r\n if (!this._source._sheets) {\r\n return;\r\n }\r\n\r\n result.newTag('SHEET');\r\n\r\n const sheets = this._source._sheets;\r\n for (let i = 0; i < sheets.length; i++) {\r\n if (sheets[i]._strands) {\r\n const strands = sheets[i]._strands;\r\n for (let j = 0; j < strands.length; j++) {\r\n result.newString();\r\n result.writeString(j + 1, 10, 8);\r\n result.writeString(sheets[i]._name, 14, 12);\r\n result.writeString(strands.length, 16, 15);\r\n result.writeString(strands[j].init._type._name, 18, 20);\r\n result.writeString(strands[j].init._chain._name, 22, 22);\r\n result.writeString(strands[j].init._sequence, 26, 23);\r\n result.writeString(strands[j].init._icode, 27, 27);\r\n result.writeString(strands[j].term._type._name, 29, 31);\r\n result.writeString(strands[j].init._chain._name, 33, 33);\r\n result.writeString(strands[j].term._sequence, 37, 34);\r\n result.writeString(strands[j].term._icode, 38, 38);\r\n result.writeString(strands[j].sense, 40, 39);\r\n }\r\n }\r\n }\r\n }\r\n\r\n _extractHELIX(result) {\r\n if (!this._source._helices) {\r\n return;\r\n }\r\n\r\n result.newTag('HELIX');\r\n const helices = this._source._helices;\r\n for (let i = 0; i < helices.length; i++) {\r\n const helix = helices[i];\r\n const helixClass = _.invert(typeByPDBHelixClass);\r\n result.newString();\r\n result.writeString(helix.serial, 10, 8);\r\n result.writeString(helix.name, 14, 12);\r\n result.writeString(helix.init._type._name, 16, 18);\r\n result.writeString(helix.init._chain._name, 20, 20);\r\n result.writeString(helix.init._sequence, 25, 22);\r\n result.writeString(helix.init._icode, 26, 26);\r\n result.writeString(helix.term._type._name, 28, 30);\r\n result.writeString(helix.term._chain._name, 32, 32);\r\n result.writeString(helix.term._sequence, 37, 34);\r\n result.writeString(helix.term._icode, 38, 38);\r\n result.writeString(helixClass[helix.type], 40, 39);\r\n result.writeString(helix.comment, 41, 70);\r\n result.writeString(helix.length, 76, 72);\r\n }\r\n }\r\n\r\n _extractATOM(result) {\r\n if (!this._source._atoms) {\r\n return;\r\n }\r\n const atoms = this._source._atoms;\r\n\r\n for (let i = 0; i < atoms.length; i++) {\r\n const tag = atoms[i].het ? 'HETATM' : 'ATOM';\r\n result.newString(tag);\r\n const startIndx = (atoms[i].element.name.length > 1 || atoms[i].name.length > 3) ? 13 : 14;\r\n result.writeString(atoms[i].serial, 11, 7);\r\n result.writeString(atoms[i].name, startIndx, 16);\r\n result.writeString(String.fromCharCode(atoms[i].location), 17, 17);\r\n result.writeString(atoms[i].residue._type._name, 20, 18);\r\n result.writeString(atoms[i].residue._chain._name, 22, 22);\r\n result.writeString(atoms[i].residue._sequence, 26, 23);\r\n result.writeString(atoms[i].residue._icode, 27, 27);\r\n result.writeString(atoms[i].position.x.toFixed(3), 38, 31);\r\n result.writeString(atoms[i].position.y.toFixed(3), 46, 39);\r\n result.writeString(atoms[i].position.z.toFixed(3), 54, 47);\r\n result.writeString(atoms[i].occupancy.toFixed(2), 60, 55);\r\n result.writeString(atoms[i].temperature.toFixed(2), 66, 61);\r\n result.writeString(atoms[i].element.name, 78, 77);\r\n if (atoms[i].charge) {\r\n result.writeString(atoms[i].charge, 79, 80);\r\n }\r\n }\r\n }\r\n\r\n _extractCOMPND(result) {\r\n if (!this._source._molecules) {\r\n return;\r\n }\r\n const molecules = this._source._molecules;\r\n result.newTag('COMPND', true);\r\n\r\n for (let i = 0; i < molecules.length; i++) {\r\n const chains = this._getMoleculeChains(molecules[i]);\r\n result.newString();\r\n result.writeString(`MOL_ID: ${molecules[i].index};`, 11, 80);\r\n result.newString();\r\n result.writeString(`MOLECULE: ${molecules[i].name};`, 11, 80);\r\n result.newString();\r\n result.writeString('CHAIN: ', 11, 18);\r\n const chainsString = `${chains.join(', ')};`;\r\n result.writeEntireString(chainsString, 81);\r\n }\r\n }\r\n\r\n _extractREMARK(result) {\r\n this._Remark290(result);\r\n this._Remark350(result);\r\n }\r\n\r\n _Remark290(result) {\r\n if (!this._source.symmetry) {\r\n return;\r\n }\r\n\r\n if (this._source.symmetry.length !== 0) {\r\n const matrices = this._source.symmetry;\r\n result.newTag('REMARK', 290);\r\n result.newString();\r\n result.newString();\r\n result.writeEntireString(this._stringForRemark290);\r\n result.writeMatrices(matrices, 'SMTRY');\r\n result.newString();\r\n result.newString();\r\n result.writeString('REMARK: NULL', 11, 80);\r\n }\r\n }\r\n\r\n _Remark350(result) {\r\n if (!this._source.units) {\r\n return;\r\n }\r\n const { units } = this._source;\r\n let biomolIndx = 0;\r\n\r\n result.newTag('REMARK', 350);\r\n result.newString();\r\n result.newString();\r\n result.writeEntireString(this._stringForRemark350);\r\n\r\n const assemblies = units.filter((unit) => unit instanceof Assembly);\r\n\r\n for (let i = 0; i < assemblies.length; i++) {\r\n result.newString();\r\n result.newString();\r\n biomolIndx++;\r\n result.writeString(`BIOMOLECULE: ${biomolIndx}`, 11, 80);\r\n const chains = assemblies[i].chains.join(', ');\r\n result.newString();\r\n result.writeString('APPLY THE FOLLOWING TO CHAINS: ');\r\n result.writeEntireString(chains, 69, { tag: 'AND CHAINS: ', begin: 31, end: 42 });\r\n\r\n const { matrices } = assemblies[i];\r\n result.writeMatrices(matrices, 'BIOMT');\r\n }\r\n }\r\n\r\n _getMoleculeChains(molecule) {\r\n function getChainName(residue) {\r\n return residue._chain._name;\r\n }\r\n const chainNames = molecule.residues.map(getChainName);\r\n return chainNames.filter((item, pos) => chainNames.indexOf(item) === pos);\r\n }\r\n}\r\n\r\nPDBExporter.formats = ['pdb'];\r\nPDBExporter.SourceClass = Complex;\r\n","import * as THREE from 'three';\r\n\r\nconst FBX_POS_SIZE = 3;\r\nconst FBX_NORM_SIZE = 3;\r\nconst FBX_COL_SIZE = 4;\r\n\r\nfunction copyFbxPoint3(src, srcIdx, dst, dstIdx) {\r\n dst[dstIdx] = src[srcIdx];\r\n dst[dstIdx + 1] = src[srcIdx + 1];\r\n dst[dstIdx + 2] = src[srcIdx + 2];\r\n}\r\n\r\nfunction copyFbxPoint4(src, srcIdx, dst, dstIdx, value) {\r\n dst[dstIdx] = src[srcIdx];\r\n dst[dstIdx + 1] = src[srcIdx + 1];\r\n dst[dstIdx + 2] = src[srcIdx + 2];\r\n dst[dstIdx + 3] = value;\r\n}\r\n\r\nconst vector4 = new THREE.Vector4();\r\nfunction copyTransformedPoint3(src, srcIdx, dst, dstIdx, opts) {\r\n vector4.set(src[srcIdx], src[srcIdx + 1], src[srcIdx + 2], opts.w);\r\n vector4.applyMatrix4(opts.matrix);\r\n dst[dstIdx] = vector4.x;\r\n dst[dstIdx + 1] = vector4.y;\r\n dst[dstIdx + 2] = vector4.z;\r\n}\r\n\r\nfunction setSubArray(src, dst, count, copyFunctor, functorOpts) {\r\n if ((dst.array.length - dst.start) / dst.stride < count\r\n || (src.array.length - src.start) / src.stride < count) {\r\n return; // we've got no space\r\n }\r\n if (src.stride === dst.stride) { // stride is the same\r\n dst.array.set(src.array, dst.start);\r\n } else {\r\n let idx = dst.start;\r\n let arridx = src.start;\r\n for (let i = 0; i < count; ++i, idx += dst.stride, arridx += src.stride) {\r\n copyFunctor(src.array, arridx, dst.array, idx, functorOpts);\r\n }\r\n }\r\n}\r\n\r\nexport default class FBXModel {\r\n constructor() {\r\n this.positions = null;\r\n this.normals = null;\r\n this.colors = null;\r\n this.indices = null;\r\n this.lastPos = 0;\r\n this.lastNorm = 0;\r\n this.lastCol = 0;\r\n this.lastIdx = 0;\r\n }\r\n\r\n init(vertsCount, indsCount) {\r\n this.positions = new Float32Array(vertsCount * FBX_POS_SIZE);\r\n this.normals = new Float32Array(vertsCount * FBX_NORM_SIZE);\r\n this.colors = new Float32Array(vertsCount * FBX_COL_SIZE);\r\n this.indices = new Int32Array(indsCount);\r\n }\r\n\r\n setPositions(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.positions,\r\n start: this.lastPos,\r\n stride: FBX_POS_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint3);\r\n this.lastPos += count * FBX_POS_SIZE;\r\n }\r\n\r\n setTransformedPositions(array, start, count, stride, matrix) {\r\n let idx = this.lastPos;\r\n let arrIdx = start;\r\n const opts = { matrix, w: 1 };\r\n for (let i = 0; i < count; ++i, arrIdx += stride, idx += FBX_POS_SIZE) {\r\n copyTransformedPoint3(array, arrIdx, this.positions, idx, opts);\r\n }\r\n this.lastPos += count * FBX_POS_SIZE;\r\n }\r\n\r\n setNormals(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.normals,\r\n start: this.lastNorm,\r\n stride: FBX_NORM_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint3);\r\n this.lastNorm += count * FBX_NORM_SIZE;\r\n }\r\n\r\n setTransformedNormals(array, start, count, stride, matrix) {\r\n let idx = this.lastNorm;\r\n let arrIdx = start;\r\n const opts = { matrix, w: 0 };\r\n for (let i = 0; i < count; ++i, arrIdx += stride, idx += FBX_NORM_SIZE) {\r\n copyTransformedPoint3(array, arrIdx, this.normals, idx, opts);\r\n }\r\n this.lastNorm += count * FBX_NORM_SIZE;\r\n }\r\n\r\n setColors(array, start, count, stride) {\r\n const src = {\r\n array,\r\n start,\r\n stride,\r\n };\r\n const dst = {\r\n array: this.colors,\r\n start: this.lastCol,\r\n stride: FBX_COL_SIZE,\r\n };\r\n setSubArray(src, dst, count, copyFbxPoint4, 1);\r\n this.lastCol += count * FBX_COL_SIZE;\r\n }\r\n\r\n setIndices(array, start, count) {\r\n this.indices.set(array, this.lastIdx);\r\n this.lastIdx += count;\r\n }\r\n\r\n setShiftedIndices(array, count, shift) {\r\n const shifted = array.map((x) => x + shift);\r\n this.setIndices(shifted, 0, count);\r\n }\r\n\r\n getVerticesNumber() {\r\n return this.lastPos / FBX_POS_SIZE;\r\n }\r\n\r\n addInstance(matrix, geo) {\r\n // add indices at first to take old number of vertices for shift\r\n const currentCount = this.getVerticesNumber();\r\n this.setShiftedIndices(geo.indices, geo.indices.length, currentCount);\r\n // simply write vertices at empty space\r\n const size = geo.itemSize;\r\n this.setTransformedPositions(geo.positions, 0, geo.vertsCount, size.position, matrix);\r\n this.setTransformedNormals(geo.normals, 0, geo.vertsCount, size.normal, matrix);\r\n this.setColors(geo.colors, 0, geo.vertsCount, size.color);\r\n }\r\n}\r\n","/** Base class for fbx geometry contains simply organized attributes: positions+normals+colors, indices. */\r\nexport default class FBXGeometry {\r\n /**\r\n * Create a base geo with necessary members.\r\n */\r\n constructor() {\r\n this.positions = null;\r\n this.normals = null;\r\n this.colors = null;\r\n this.indices = null;\r\n this.vertsCount = 0;\r\n this.itemSize = null;\r\n }\r\n\r\n /**\r\n * Initialize base geo storing items info from attributes.\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n */\r\n init(geo, _info) {\r\n const { attributes } = geo;\r\n // save item size\r\n this.itemSize = {\r\n position: attributes.position.itemSize,\r\n normal: attributes.normal.itemSize,\r\n color: attributes.color.itemSize,\r\n };\r\n }\r\n}\r\n","import FBXGeometry from './FBXGeometry';\r\n\r\n/**\r\n * Fbx geometry, that copies positions+normals, indexes and creates colors filled with defined value.\r\n * @extends FBXGeometry\r\n */\r\nexport default class FBX1CGeometry extends FBXGeometry {\r\n /**\r\n * Initialize geo storing positions, normals, indices and create colors.\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n */\r\n init(geo, _info) {\r\n super.init(geo, _info);\r\n const {\r\n attributes: {\r\n position,\r\n normal,\r\n },\r\n index,\r\n } = geo;\r\n // copy vertices attributes\r\n this.vertsCount = position.count;\r\n this.positions = position.array;\r\n this.normals = normal.array;\r\n // create color array\r\n this.colors = new Float32Array(this.vertsCount * this.itemSize.color);\r\n // indices\r\n this.indices = index.array;\r\n }\r\n\r\n /**\r\n * Set defined color for all items in color attribute\r\n * @param {Object} color - THREE.Color.\r\n */\r\n setColors(color) {\r\n let offset = 0;\r\n for (let i = 0, l = this.colors.length, cl = this.itemSize.color; i < l; i += cl) {\r\n this.colors[offset++] = color.r;\r\n this.colors[offset++] = color.g;\r\n this.colors[offset++] = color.b;\r\n }\r\n }\r\n}\r\n","import FBXGeometry from './FBXGeometry';\r\n\r\n/**\r\n * Fbx geometry, that copies positions+normals, indexes from cylinder geometry and creates colors filled with two\r\n * defined values.\r\n * @extends FBXGeometry\r\n */\r\nexport default class FBX2CCylinder extends FBXGeometry {\r\n constructor() {\r\n super();\r\n this._cutRawStart = 0;\r\n this._cutRawEnd = 0;\r\n this._facesPerSlice = 0;\r\n }\r\n\r\n /**\r\n * Initialize geo by creating new attributes, because we extend number of vertices to make cylinder two-colored.\r\n * Indices remain the same. We process open- end close-ended cylinders and consider cylinders od 2 segments\r\n * in height ONLY.\r\n * NOTE: cylinder consists of 2 height segments and stores parts in the order: tube, topCap, bottomCap\r\n * @param {Object} geo - THREE.BufferGeometry.\r\n * @param {Object} info - information needed for geo extend\r\n */\r\n init(geo, info) {\r\n super.init(geo, info);\r\n const {\r\n attributes: {\r\n position,\r\n },\r\n index,\r\n } = geo;\r\n // extend vertices arrays\r\n this.vertsCount = position.count + info.addPerCylinder;\r\n this._facesPerSlice = info.addPerCylinder;\r\n this.positions = new Float32Array(this.vertsCount * position.itemSize);\r\n this.normals = new Float32Array(this.vertsCount * this.itemSize.normal);\r\n this.colors = new Float32Array(this.vertsCount * this.itemSize.color);\r\n this._extendVertices(geo, info);\r\n // number of indices stays the same\r\n this.indices = new Uint32Array(index.count);\r\n this._extendIndices(geo, info);\r\n }\r\n\r\n /** Extend vertex attributes to have one more slice to make sharp middle startColor-endColor line. */\r\n _extendVertices(geo, info) {\r\n const { position } = geo.attributes;\r\n const { normal } = geo.attributes;\r\n const geoParams = geo.getGeoParams();\r\n const cutRaw = 1; // we expect cylinders of 2 segments in height => so half segment = 1\r\n this._cutRawStart = cutRaw * geoParams.radialSegments;\r\n this._cutRawEnd = this._cutRawStart + info.addPerCylinder;\r\n { // write first half of cylinder\r\n let temp = position.array.slice(0, this._cutRawEnd * position.itemSize);\r\n this.positions.set(temp, 0);\r\n temp = normal.array.slice(0, this._cutRawEnd * normal.itemSize);\r\n this.normals.set(temp, 0);\r\n }\r\n { // write second part of cylinder\r\n let temp = position.array.slice(this._cutRawStart * position.itemSize, position.array.length);\r\n this.positions.set(temp, this._cutRawEnd * position.itemSize);\r\n temp = normal.array.slice(this._cutRawStart * normal.itemSize, normal.array.length);\r\n this.normals.set(temp, this._cutRawEnd * normal.itemSize);\r\n }\r\n }\r\n\r\n /** Shift values of second part (+caps) indices by newly added vertices count. Number of faces remains the same. */\r\n _extendIndices(geo, info) {\r\n const { index } = geo;\r\n const indicesPerQuad = 6; // quad = 2 triangles => 6 indices\r\n const startToShift = info.addPerCylinder * indicesPerQuad;\r\n const shift = info.addPerCylinder;\r\n let shifted = index.array.slice(startToShift, index.count);\r\n shifted = shifted.map((x) => x + shift); // shift only the endings\r\n this.indices.set(index.array, 0);\r\n this.indices.set(shifted, startToShift);\r\n }\r\n\r\n /**\r\n * Set defined colors: (first part + bottom cap), (second part + top cap)\r\n * @param {number} start - start color index\r\n * @param {number} end - start color index\r\n * @param {array} array - array of colors\r\n * @param {array} color - color value components\r\n */\r\n _setColorRange(start, end, array, color) {\r\n const colorSize = color.length;\r\n for (let i = start; i < end; i += colorSize) {\r\n array.set(color, i);\r\n }\r\n }\r\n\r\n /**\r\n * Set defined colors: (first part + bottom cap), (second part + top cap)\r\n * @param {Object} color1 - THREE.Color.\r\n * @param {Object} color2 - THREE.Color.\r\n */\r\n setColors(color1, color2) {\r\n const colorSize = this.itemSize.color;\r\n const part1End = this._cutRawEnd * colorSize;\r\n const part2End = part1End * 2;\r\n this._setColorRange(0, part1End, this.colors, color1.toArray());\r\n this._setColorRange(part1End, part2End, this.colors, color2.toArray());\r\n if (part2End < this.colors.length) { // cylinder has caps, lets paint them\r\n const capSize = (this._facesPerSlice + 1) * colorSize;\r\n const cap1End = part2End + capSize;\r\n this._setColorRange(part2End, cap1End, this.colors, color2.toArray());\r\n const cap2End = cap1End + capSize; // should be equal to this.colors.length;\r\n this._setColorRange(cap1End, cap2End, this.colors, color1.toArray());\r\n }\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport * as THREE from 'three';\r\n\r\nimport utils from '../../../utils';\r\nimport gfxutils from '../../../gfx/gfxutils';\r\nimport logger from '../../../utils/logger';\r\n\r\nimport FBXModel from './FBXModel';\r\nimport ThickLineMesh from '../../../gfx/meshes/ThickLineMesh';\r\nimport ZSpriteMesh from '../../../gfx/meshes/ZSpriteMesh';\r\nimport InstancedSpheresGeometry from '../../../gfx/geometries/InstancedSpheresGeometry';\r\nimport Instanced2CCylindersGeometry from '../../../gfx/geometries/Instanced2CCylindersGeometry';\r\nimport FBX1CGeometry from './FBX1CGeometry';\r\nimport FBX2CCylinder from './FBX2CCylinder';\r\n\r\nexport default class FBXInfoExtractor {\r\n constructor() {\r\n this._materials = [];\r\n this._models = [];\r\n }\r\n\r\n process(data) {\r\n this._extractModelsAndMaterials(data);\r\n const models = this._flattenModels();\r\n\r\n return {\r\n name: data.name,\r\n models,\r\n materials: this._materials,\r\n };\r\n }\r\n\r\n /**\r\n * Extract fbx object information from ComplexVisual\r\n * @param {object} data - complexVisual to get geometry info from\r\n */\r\n _extractModelsAndMaterials(data) {\r\n const layersOfInterest = new THREE.Layers();\r\n layersOfInterest.set(gfxutils.LAYERS.DEFAULT);\r\n layersOfInterest.enable(gfxutils.LAYERS.TRANSPARENT);\r\n data.traverse((object) => {\r\n if (object instanceof THREE.Mesh && object.layers.test(layersOfInterest) && this.checkExportAbility(object)) {\r\n if (object.geometry.type === 'InstancedBufferGeometry') {\r\n this._collectInstancedGeoInfo(object);\r\n } else {\r\n this._collectGeoInfo(object);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Reworking indices buffer, see https://banexdevblog.wordpress.com/2014/06/23/a-quick-tutorial-about-the-fbx-ascii-format/\r\n * basically, every triangle in Miew has been represented hat way (e.g.) : 0,1,7, but we must (for FBX) rework that\r\n * into: 0,1,-8.\r\n * @param {array} indices - belongs to [0, maxVertIndex]\r\n */\r\n _reworkIndices(indices) {\r\n const faceSize = 3;\r\n for (let i = faceSize - 1; i < indices.length; i += faceSize) {\r\n indices[i] *= -1;\r\n indices[i]--;\r\n }\r\n }\r\n\r\n /**\r\n * Combine geometry from several models having the same material into one Model and finally prepare indices\r\n * @returns {array} models, combined by material id\r\n */\r\n _flattenModels() {\r\n let overallVertsCount = 0;\r\n function shift(x) {\r\n return x + overallVertsCount;\r\n }\r\n const combined = [];\r\n // flatten models geometry\r\n for (let i = 0, n = this._models.length; i < n; i++) {\r\n const models = this._models[i];\r\n let indices = [];\r\n let positions = [];\r\n let normals = [];\r\n let colors = [];\r\n // reorganize every attributes as array of arrays\r\n overallVertsCount = 0;\r\n for (let j = 0; j < models.length; j++) {\r\n const m = models[j];\r\n indices.push(m.indices.map(shift));\r\n overallVertsCount += m.getVerticesNumber();\r\n positions.push(m.positions);\r\n normals.push(m.normals);\r\n colors.push(m.colors);\r\n }\r\n // join all subarrays into one\r\n indices = utils.mergeTypedArraysUnsafe(indices);\r\n this._reworkIndices(indices);\r\n positions = utils.mergeTypedArraysUnsafe(positions);\r\n normals = utils.mergeTypedArraysUnsafe(normals);\r\n colors = utils.mergeTypedArraysUnsafe(colors);\r\n combined.push({\r\n indices,\r\n positions,\r\n normals,\r\n colors,\r\n verticesCount: overallVertsCount,\r\n });\r\n }\r\n return combined;\r\n }\r\n\r\n /**\r\n * Check ability to export the kind of mesh.\r\n * @param {object} mesh - given mesh to check\r\n * @returns {boolean} result of check\r\n */\r\n checkExportAbility(mesh) {\r\n // check mesh on not being empty\r\n if (mesh.geometry.attributes.position.count === 0) {\r\n return false;\r\n }\r\n // check type of mesh\r\n // if (mesh.geometry.isInstancedBufferGeometry && settings.now.zSprites) {\r\n if (mesh instanceof ZSpriteMesh) {\r\n logger.warn('Currently we cannot export \\'sprites\\' modes, like BS, WV, LC. Please turn of settings \\'zSprites\\' and try again');\r\n return false;\r\n }\r\n if (mesh instanceof ThickLineMesh) {\r\n logger.warn('Currently we cannot export Lines mode');\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Save geometry info from common mesh, like Surface or Cartoon\r\n */\r\n _collectGeoInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n normal,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const vertCount = position.count;\r\n model.init(vertCount, index.count);\r\n if (matrix.isIdentity()) {\r\n model.setPositions(position.array, 0, vertCount, position.itemSize);\r\n model.setNormals(normal.array, 0, vertCount, normal.itemSize);\r\n } else {\r\n model.setTransformedPositions(position.array, 0, vertCount, position.itemSize, matrix);\r\n model.setTransformedNormals(normal.array, 0, vertCount, normal.itemSize, matrix);\r\n }\r\n model.setColors(color.array, 0, vertCount, color.itemSize);\r\n model.setIndices(index.array, 0, index.count);\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Collect instanced spheres geometry and materials.\r\n * @param {object} mesh - mesh with instanced spheres info\r\n */\r\n _collectSpheresInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const instCount = mesh.geometry.instanceCount;\r\n const vertCount = position.count;\r\n const indsCount = index.count;\r\n model.init(instCount * vertCount, instCount * indsCount);\r\n const geo = new FBX1CGeometry();\r\n geo.init(mesh.geometry);\r\n const instMatrix = new THREE.Matrix4();\r\n const objMatrix = new THREE.Matrix4();\r\n const sphereColor = new THREE.Color();\r\n for (let instanceIndex = 0; instanceIndex < instCount; ++instanceIndex) {\r\n // update colors in geometry\r\n const colorIdx = instanceIndex * color.itemSize;\r\n sphereColor.fromArray(color.array, colorIdx);\r\n geo.setColors(sphereColor);\r\n // add instance to the model\r\n this._getSphereInstanceMatrix(mesh.geometry, instanceIndex, instMatrix);\r\n objMatrix.multiplyMatrices(matrix, instMatrix);\r\n model.addInstance(objMatrix, geo);\r\n }\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Getting all instanced cylinders from given mesh.\r\n * Divide cylinder (add additional vertexes) for prettiness therefore algorithm is a bit complicated\r\n * @param {object} mesh - given mesh with instanced cylinders\r\n */\r\n _collectCylindersInfo(mesh) {\r\n const {\r\n geometry: {\r\n attributes: {\r\n position,\r\n color,\r\n color2,\r\n },\r\n index,\r\n },\r\n matrix,\r\n } = mesh;\r\n\r\n const model = new FBXModel();\r\n const instCount = mesh.geometry.instanceCount;\r\n const oneCCylinder = new FBX1CGeometry();\r\n oneCCylinder.init(mesh.geometry);\r\n const splittingInfo = this._gatherCylindersColoringInfo(mesh.geometry);\r\n let twoCCylinder = null;\r\n if (splittingInfo.needToSplit > 0) {\r\n twoCCylinder = new FBX2CCylinder();\r\n twoCCylinder.init(mesh.geometry, splittingInfo);\r\n }\r\n const additionalVertsCount = splittingInfo.addPerCylinder * splittingInfo.needToSplit;\r\n const vertCount = position.count;\r\n const indsCount = index.count;\r\n model.init(instCount * vertCount + additionalVertsCount, instCount * indsCount);\r\n const instMatrix = new THREE.Matrix4();\r\n const objMatrix = new THREE.Matrix4();\r\n const colorStart = new THREE.Color();\r\n const colorEnd = new THREE.Color();\r\n let geo = {};\r\n for (let instanceIndex = 0; instanceIndex < instCount; ++instanceIndex) {\r\n // update colors in geometry\r\n const colorIdx = instanceIndex * color.itemSize;\r\n if (splittingInfo.is2Colored[instanceIndex]) {\r\n // .color2 contains starting color, and .color contains starting color (see uber.frag ATTR_COLOR2)\r\n colorStart.fromArray(color2.array, colorIdx);\r\n colorEnd.fromArray(color.array, colorIdx);\r\n if (twoCCylinder) {\r\n twoCCylinder.setColors(colorStart, colorEnd);\r\n geo = twoCCylinder;\r\n }\r\n } else {\r\n // has one color per cylinder\r\n colorStart.fromArray(color.array, colorIdx);\r\n oneCCylinder.setColors(colorStart);\r\n geo = oneCCylinder;\r\n }\r\n // add instance to the model\r\n this._getCylinderInstanceMatrix(mesh.geometry, instanceIndex, instMatrix);\r\n objMatrix.multiplyMatrices(matrix, instMatrix);\r\n model.addInstance(objMatrix, geo);\r\n }\r\n const material = this._collectMaterialInfo(mesh);\r\n this._addToPool(model, material);\r\n }\r\n\r\n /**\r\n * Adding model to pool of models or extend existing ones\r\n * @param {object} model - model to add\r\n * @param {object} material - material to add\r\n */\r\n _addToPool(model, material) {\r\n const materialIdx = this._checkExistingMaterial(material);\r\n if (materialIdx < 0) { // new model-material pair\r\n this._models.push([model]);\r\n this._materials.push(material);\r\n } else { // add model to existing model-material pair\r\n const models = this._models[materialIdx];\r\n models.push(model);\r\n }\r\n }\r\n\r\n /**\r\n * Checking if given material already was registered in materials pool (no need to create new one)\r\n * @param {object} material - given material\r\n * @returns {number} number of model-material pair\r\n */\r\n _checkExistingMaterial(material) {\r\n return _.findIndex(this._materials, (m) => _.isEqual(m, material));\r\n }\r\n\r\n _gatherCylindersColoringInfo(geo) {\r\n const instCount = geo.instanceCount;\r\n const color1 = geo.attributes.color.array;\r\n const color2 = geo.attributes.color2.array;\r\n const stride = geo.attributes.color.itemSize;\r\n const is2Colored = new Array(instCount);\r\n // analyze color instance attributes\r\n let needToSplit = 0;\r\n let colIdx = 0;\r\n for (let i = 0; i < instCount; i++, colIdx += stride) {\r\n const differs = (Math.abs(color1[colIdx] - color2[colIdx]) > 0.0000001) // compare ending colors\r\n || (Math.abs(color1[colIdx + 1] - color2[colIdx + 1]) > 0.0000001)\r\n || (Math.abs(color1[colIdx + 2] - color2[colIdx + 2]) > 0.0000001);\r\n is2Colored[i] = differs;\r\n needToSplit += differs; // count number of 2-colored cylinders\r\n }\r\n // calc number of vertices to add into 2-colored\r\n const geoParams = geo.getGeoParams();\r\n const addPerCylinder = geoParams.radialSegments;\r\n return { is2Colored, needToSplit, addPerCylinder };\r\n }\r\n\r\n /**\r\n * Collect instanced models and materials.\r\n * @param {object} mesh - given mesh with instanced something (spheres or cylinders)\r\n */\r\n _collectInstancedGeoInfo(mesh) {\r\n if (mesh.geometry instanceof InstancedSpheresGeometry) {\r\n this._collectSpheresInfo(mesh);\r\n } else if (mesh.geometry instanceof Instanced2CCylindersGeometry) {\r\n this._collectCylindersInfo(mesh);\r\n }\r\n }\r\n\r\n /**\r\n * Collect Material info from given mesh.\r\n * @param {object} mesh - given mesh with material info\r\n * @returns {object} material\r\n */\r\n _collectMaterialInfo(mesh) {\r\n const { uberOptions } = mesh.material;\r\n return ({\r\n diffuse: uberOptions.diffuse.toArray(),\r\n opacity: uberOptions.opacity,\r\n shininess: uberOptions.shininess,\r\n specular: uberOptions.specular.toArray(),\r\n });\r\n }\r\n\r\n _getCylinderInstanceMatrix(geo, instIdx, matrix) {\r\n const matVector1 = geo.attributes.matVector1.array;\r\n const matVector2 = geo.attributes.matVector2.array;\r\n const matVector3 = geo.attributes.matVector3.array;\r\n const idxOffset = instIdx * 4; // used 4 because offset arrays are stored in quads\r\n matrix.set(\r\n matVector1[idxOffset],\r\n matVector1[idxOffset + 1],\r\n matVector1[idxOffset + 2],\r\n matVector1[idxOffset + 3],\r\n matVector2[idxOffset],\r\n matVector2[idxOffset + 1],\r\n matVector2[idxOffset + 2],\r\n matVector2[idxOffset + 3],\r\n matVector3[idxOffset],\r\n matVector3[idxOffset + 1],\r\n matVector3[idxOffset + 2],\r\n matVector3[idxOffset + 3],\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n );\r\n }\r\n\r\n _getSphereInstanceMatrix(geo, instIdx, matrix) {\r\n const { offset } = geo.attributes;\r\n const idx = instIdx * offset.itemSize;\r\n const x = offset.array[idx];\r\n const y = offset.array[idx + 1];\r\n const z = offset.array[idx + 2];\r\n const scale = offset.array[idx + 3];\r\n matrix.set(\r\n scale,\r\n 0,\r\n 0,\r\n x,\r\n 0,\r\n scale,\r\n 0,\r\n y,\r\n 0,\r\n 0,\r\n scale,\r\n z,\r\n 0,\r\n 0,\r\n 0,\r\n 1,\r\n );\r\n }\r\n}\r\n","// Forming default definitions block\r\nconst defaultDefinitions = `\r\nDefinitions: {\r\n Version: 100\r\n Count: 3\r\n ObjectType: \"Model\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Geometry\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Material\" {\r\n Count: 1\r\n }\r\n ObjectType: \"Pose\" {\r\n Count: 1\r\n }\r\n ObjectType: \"GlobalSettings\" {\r\n Count: 1\r\n }\r\n} `;\r\n\r\n// Default model properties\r\nconst defaultProperties = `Properties60: {\r\n Property: \"QuaternionInterpolate\", \"bool\", \"\",0\r\n Property: \"Visibility\", \"Visibility\", \"A\",1\r\n Property: \"Lcl Translation\", \"Lcl Translation\", \"A\",0.000000000000000,0.000000000000000,-1789.238037109375000\r\n Property: \"Lcl Rotation\", \"Lcl Rotation\", \"A\",0.000009334667643,-0.000000000000000,0.000000000000000\r\n Property: \"Lcl Scaling\", \"Lcl Scaling\", \"A\",1.000000000000000,1.000000000000000,1.000000000000000\r\n Property: \"RotationOffset\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationPivot\", \"Vector3D\", \"\",0,0,0\r\n Property: \"ScalingOffset\", \"Vector3D\", \"\",0,0,0\r\n Property: \"ScalingPivot\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationActive\", \"bool\", \"\",0\r\n Property: \"TranslationMin\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationMax\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TranslationMinX\", \"bool\", \"\",0\r\n Property: \"TranslationMinY\", \"bool\", \"\",0\r\n Property: \"TranslationMinZ\", \"bool\", \"\",0\r\n Property: \"TranslationMaxX\", \"bool\", \"\",0\r\n Property: \"TranslationMaxY\", \"bool\", \"\",0\r\n Property: \"TranslationMaxZ\", \"bool\", \"\",0\r\n Property: \"RotationOrder\", \"enum\", \"\",0\r\n Property: \"RotationSpaceForLimitOnly\", \"bool\", \"\",0\r\n Property: \"AxisLen\", \"double\", \"\",10\r\n Property: \"PreRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"PostRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationActive\", \"bool\", \"\",0\r\n Property: \"RotationMin\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationMax\", \"Vector3D\", \"\",0,0,0\r\n Property: \"RotationMinX\", \"bool\", \"\",0\r\n Property: \"RotationMinY\", \"bool\", \"\",0\r\n Property: \"RotationMinZ\", \"bool\", \"\",0\r\n Property: \"RotationMaxX\", \"bool\", \"\",0\r\n Property: \"RotationMaxY\", \"bool\", \"\",0\r\n Property: \"RotationMaxZ\", \"bool\", \"\",0\r\n Property: \"RotationStiffnessX\", \"double\", \"\",0\r\n Property: \"RotationStiffnessY\", \"double\", \"\",0\r\n Property: \"RotationStiffnessZ\", \"double\", \"\",0\r\n Property: \"MinDampRangeX\", \"double\", \"\",0\r\n Property: \"MinDampRangeY\", \"double\", \"\",0\r\n Property: \"MinDampRangeZ\", \"double\", \"\",0\r\n Property: \"MaxDampRangeX\", \"double\", \"\",0\r\n Property: \"MaxDampRangeY\", \"double\", \"\",0\r\n Property: \"MaxDampRangeZ\", \"double\", \"\",0\r\n Property: \"MinDampStrengthX\", \"double\", \"\",0\r\n Property: \"MinDampStrengthY\", \"double\", \"\",0\r\n Property: \"MinDampStrengthZ\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthX\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthY\", \"double\", \"\",0\r\n Property: \"MaxDampStrengthZ\", \"double\", \"\",0\r\n Property: \"PreferedAngleX\", \"double\", \"\",0\r\n Property: \"PreferedAngleY\", \"double\", \"\",0\r\n Property: \"PreferedAngleZ\", \"double\", \"\",0\r\n Property: \"InheritType\", \"enum\", \"\",0\r\n Property: \"ScalingActive\", \"bool\", \"\",0\r\n Property: \"ScalingMin\", \"Vector3D\", \"\",1,1,1\r\n Property: \"ScalingMax\", \"Vector3D\", \"\",1,1,1\r\n Property: \"ScalingMinX\", \"bool\", \"\",0\r\n Property: \"ScalingMinY\", \"bool\", \"\",0\r\n Property: \"ScalingMinZ\", \"bool\", \"\",0\r\n Property: \"ScalingMaxX\", \"bool\", \"\",0\r\n Property: \"ScalingMaxY\", \"bool\", \"\",0\r\n Property: \"ScalingMaxZ\", \"bool\", \"\",0\r\n Property: \"GeometricTranslation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"GeometricRotation\", \"Vector3D\", \"\",0,0,0\r\n Property: \"GeometricScaling\", \"Vector3D\", \"\",1,1,1\r\n Property: \"LookAtProperty\", \"object\", \"\"\r\n Property: \"UpVectorProperty\", \"object\", \"\"\r\n Property: \"Show\", \"bool\", \"\",1\r\n Property: \"NegativePercentShapeSupport\", \"bool\", \"\",1\r\n Property: \"DefaultAttributeIndex\", \"int\", \"\",0\r\n Property: \"Color\", \"Color\", \"A+\",0,0,0\r\n Property: \"Size\", \"double\", \"\",100\r\n Property: \"Look\", \"enum\", \"\",1\r\n }`;\r\n\r\n// Default materials layer\r\nconst defaultMaterialLayer = `\r\n LayerElementMaterial: 0 {\r\n Version: 101\r\n Name: \"\"\r\n MappingInformationType: \"AllSame\"\r\n ReferenceInformationType: \"Direct\"\r\n Materials: 0\r\n }`;\r\n\r\n// Default layers block\r\nconst defaultLayerBlock = `\r\n Layer: 0 {\r\n Version: 100\r\n LayerElement: {\r\n Type: \"LayerElementNormal\"\r\n TypedIndex: 0\r\n }\r\n LayerElement: {\r\n Type: \"LayerElementColor\"\r\n TypedIndex: 0\r\n }\r\n LayerElement: {\r\n Type: \"LayerElementMaterial\"\r\n TypedIndex: 0\r\n }\r\n }`;\r\n\r\n/**\r\n * globalSettings info in output file.\r\n */\r\nconst globalSettings = `GlobalSettings: {\r\n Version: 1000\r\n Properties60: {\r\n Property: \"UpAxis\", \"int\", \"\",1\r\n Property: \"UpAxisSign\", \"int\", \"\",1\r\n Property: \"FrontAxis\", \"int\", \"\",2\r\n Property: \"FrontAxisSign\", \"int\", \"\",1\r\n Property: \"CoordAxis\", \"int\", \"\",0\r\n Property: \"CoordAxisSign\", \"int\", \"\",1\r\n Property: \"UnitScaleFactor\", \"double\", \"\",1\r\n }\r\n }`;\r\n\r\nexport default class FBXResult {\r\n constructor() {\r\n this._resultArray = [];\r\n this._info = null;\r\n }\r\n\r\n getResult(info) {\r\n this._info = info;\r\n this._resultArray.push(this._writeHeader());\r\n this._resultArray.push(this._writeDefinitions());\r\n this._resultArray.push(this._writeObjects(info.models, info.materials));\r\n this._resultArray.push(this._writeRelations());\r\n this._resultArray.push(this._writeConnections()); // connections between models and materials)\r\n this._info = null;\r\n return this._resultArray.join('');\r\n }\r\n\r\n /**\r\n * Add FBXHeader info to output file.\r\n * Some fields are really confusing, but it seems that all listed fields are very informative\r\n */\r\n _writeHeader() {\r\n const FBXHeaderVersion = 1003; // 1003 is some number which appears to present in many 6.1 ASCII files\r\n const FBXVersion = 6100; // Mandatory and only supported version\r\n const date = new Date();\r\n const timeStampVersion = 1000;\r\n const creator = `Miew FBX Exporter v${this._info.version}`; // Supposed to be an engine\r\n\r\n return `; FBX 6.1.0 project file\r\n; Created by ${creator} Copyright (c) 2015-2026 EPAM Systems, Inc.\r\n; For support please contact miew@epam.com\r\n; ----------------------------------------------------\r\n\r\nFBXHeaderExtension: {\r\n FBXHeaderVersion: ${FBXHeaderVersion}\r\n FBXVersion: ${FBXVersion}\r\n CreationTimeStamp: {\r\n Version: ${timeStampVersion}\r\n Year: ${date.getFullYear()}\r\n Month: ${date.getMonth() + 1}\r\n Day: ${date.getDate()}\r\n Hour: ${date.getHours()}\r\n Minute: ${date.getMinutes()}\r\n Second: ${date.getSeconds()}\r\n Millisecond: ${date.getMilliseconds()}\r\n }\r\n Creator: \"${creator}\"\r\n OtherFlags: {\r\n FlagPLE: 0\r\n }\r\n}\r\nCreationTime: \"${date}\"\r\nCreator: \"${creator}\"\r\n`;\r\n }\r\n\r\n /**\r\n * Add Definitions info to output file.\r\n * Not exactly sure if this section is template section (as it is in 7.4+) or it should every time be like this\r\n */\r\n _writeDefinitions() {\r\n return `\r\n; Object definitions\r\n;------------------------------------------------------------------\r\n\r\n${defaultDefinitions}\r\n`;\r\n }\r\n\r\n /**\r\n * Adding gathered information about Models to resulting string.\r\n * Reminder - there may be more then 1 model in scene, but we must place materials after ALL models.\r\n * @returns {string} string containing all models (vertices, indices, colors, normals etc)\r\n */\r\n _models() {\r\n const modelVersion = 232;\r\n let allModels = '';\r\n const { models } = this._info;\r\n for (let i = 0; i < models.length; ++i) {\r\n const model = models[i];\r\n const vertCount = model.verticesCount;\r\n allModels += `\r\n Model: \"Model::${this._info.name}_${i}\", \"Mesh\" {\r\n Version: ${modelVersion}\r\n ${defaultProperties}\r\n ${this._verticesIndices(model.positions, model.indices)}\r\n ${this._normalLayer(model.normals)}\r\n ${this._colorLayer(model.colors, vertCount)}\r\n ${defaultMaterialLayer}\r\n ${defaultLayerBlock}\r\n }`;\r\n }\r\n return allModels;\r\n }\r\n\r\n /**\r\n * Add Material info to result\r\n */\r\n _materials() {\r\n const materialVersion = 102;\r\n let allMaterials = '';\r\n const { materials } = this._info;\r\n for (let i = 0; i < materials.length; ++i) {\r\n const material = materials[i];\r\n allMaterials += `\r\n Material: \"Material::${this._info.name}_${i}_default\", \"\" {\r\n Version: ${materialVersion}\r\n ShadingModel: \"lambert\"\r\n MultiLayer: 0\r\n ${this._materialProperties(material)}\r\n }`;\r\n }\r\n return allMaterials;\r\n }\r\n\r\n /**\r\n * Add Objects info to output file.\r\n */\r\n _writeObjects() {\r\n return `\r\n; Object properties\r\n;------------------------------------------------------------------\r\n\r\nObjects: {\r\n ${this._models()}\r\n ${this._materials()}\r\n ${globalSettings}\r\n}\r\n`;\r\n }\r\n\r\n /**\r\n * Add Relations info to output file.\r\n */\r\n _writeRelations() {\r\n let modelsList = '';\r\n for (let i = 0; i < this._info.models.length; ++i) {\r\n modelsList += `\r\n Model: \"Model::${this._info.name}_${i}\", \"Mesh\" {\r\n }`;\r\n }\r\n let materialList = '';\r\n for (let i = 0; i < this._info.materials.length; ++i) {\r\n materialList += `\r\n Material: \"Material::${this._info.name}_${i}_default\", \"\" {\r\n }`;\r\n }\r\n\r\n return `\r\n; Object relations\r\n;------------------------------------------------------------------\r\n\r\nRelations: {\r\n ${modelsList}\r\n Model: \"Model::Producer Perspective\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Top\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Bottom\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Front\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Back\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Right\", \"Camera\" {\r\n }\r\n Model: \"Model::Producer Left\", \"Camera\" {\r\n }\r\n Model: \"Model::Camera Switcher\", \"CameraSwitcher\" {\r\n }\r\n ${materialList}\r\n}`;\r\n }\r\n\r\n /**\r\n * Add Connections info to output file.\r\n */\r\n _writeConnections() {\r\n let modelsList = '';\r\n const { name } = this._info;\r\n for (let i = 0; i < this._info.models.length; ++i) {\r\n modelsList += `\r\n Connect: \"OO\", \"Model::${name}_${i}\", \"Model::Scene\"`;\r\n }\r\n\r\n let materialList = '';\r\n for (let i = 0; i < this._info.materials.length; ++i) {\r\n materialList += `\r\n Connect: \"OO\", \"Material::${name}_${i}_default\", \"Model::${name}_${i}\"`;\r\n }\r\n\r\n return `\r\n; Object connections\r\n;------------------------------------------------------------------\r\n\r\nConnections: {\r\n ${modelsList}\r\n ${materialList}\r\n}`;\r\n }\r\n\r\n /**\r\n * Write float array to string with limited precision\r\n * @param {Float32Array} array - array to be fixed\r\n * @returns {String} String with fixed floats\r\n */\r\n _floatArrayToString(array) {\r\n const str = [];\r\n for (let i = 0; i < array.length; ++i) {\r\n str[i] = array[i].toFixed(6);\r\n }\r\n return str.join(',');\r\n }\r\n\r\n /**\r\n * Adding color layer to resulting file\r\n * @param {Float32Array} colorArray attribute\r\n * @param {number} vertCount - number of vertices in the model\r\n * @returns {string} color layer info\r\n */\r\n _colorLayer(colorArray, vertCount) {\r\n const layerElementColorNumber = 0;\r\n const layerElementColorVersion = 101;\r\n const layerElementColorName = '';\r\n const colorsStr = this._floatArrayToString(colorArray);\r\n // Mapping Information type and Reference Information type are mandatory for our Miew! Must not be changed\r\n // As said [..Array(...)] - fastest and easiest way to produce [0, 1, .....] array\r\n const colorIndices = [...Array(vertCount).keys()];\r\n return `\r\n LayerElementColor: ${layerElementColorNumber} {\r\n Version: ${layerElementColorVersion}\r\n Name: \"${layerElementColorName}\"\r\n MappingInformationType: \"ByVertice\"\r\n ReferenceInformationType: \"Direct\"\r\n Colors: ${colorsStr}\r\n ColorIndex: ${colorIndices}\r\n }`;\r\n }\r\n\r\n /**\r\n * Adding normal layer to resulting file\r\n * @param {Float32Array} normalArray attribute\r\n * @returns {string} normal layer info\r\n */\r\n _normalLayer(normalArray) {\r\n const layerElementNormalNumber = 0;\r\n const layerElementNormalVersion = 101;\r\n const layerElementNormalName = '';\r\n const normalsStr = this._floatArrayToString(normalArray);\r\n // Mapping Information type and Reference Information type are mandatory for our Miew! Must not be changed\r\n return `\r\n LayerElementNormal: ${layerElementNormalNumber} {\r\n Version: ${layerElementNormalVersion}\r\n Name: \"${layerElementNormalName}\"\r\n MappingInformationType: \"ByVertice\"\r\n ReferenceInformationType: \"Direct\"\r\n Normals: ${normalsStr}\r\n }`;\r\n }\r\n\r\n /**\r\n * Adding vertices and indices to resulting string\r\n * @return {string} resulting string in FBX notation\r\n */\r\n _verticesIndices(positions, indices) {\r\n const multiLayer = 0;\r\n const multiTake = 1;\r\n const shading = 'Y';\r\n const culling = 'CullingOff';\r\n const geometryVersion = 124;\r\n const vertStr = this._floatArrayToString(positions);\r\n /* About _correctArrayNotation: Float32Arrays will contains only Float32 numbers, which implies that it will be floating points with 17 numbers after point.\r\n * We cannot (and it's logically incorrect) save all this information, so we convert this Float32Array into Array-like object with numbers with only 6 numbers after point\r\n * Reminder - this is big memory loss (as we must save at one moment two arrays with similar information) */\r\n return `MultiLayer: ${multiLayer}\r\n MultiTake: ${multiTake}\r\n Shading: ${shading}\r\n Culling: \"${culling}\"\r\n Vertices: ${vertStr}\r\n PolygonVertexIndex: ${indices}\r\n GeometryVersion: ${geometryVersion}`;\r\n }\r\n\r\n /**\r\n * Forming material properties block.\r\n * @param {Object} material - given material of model\r\n * @returns {String} material properties string\r\n */\r\n _materialProperties(material) {\r\n return `Properties60: {\r\n Property: \"ShadingModel\", \"KString\", \"\", \"Lambert\"\r\n Property: \"MultiLayer\", \"bool\", \"\",0\r\n Property: \"EmissiveColor\", \"ColorRGB\", \"\",0,0,0\r\n Property: \"EmissiveFactor\", \"double\", \"\",0.0000\r\n Property: \"AmbientColor\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"AmbientFactor\", \"double\", \"\",0.0000\r\n Property: \"DiffuseColor\", \"ColorRGB\", \"\",${material.diffuse}\r\n Property: \"DiffuseFactor\", \"double\", \"\",1.0000\r\n Property: \"Bump\", \"Vector3D\", \"\",0,0,0\r\n Property: \"TransparentColor\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"TransparencyFactor\", \"double\", \"\",0.0000\r\n Property: \"SpecularColor\", \"ColorRGB\", \"\",${material.specular}\r\n Property: \"SpecularFactor\", \"double\", \"\",1.0000\r\n Property: \"ShininessExponent\", \"double\", \"\",${material.shininess}\r\n Property: \"ReflectionColor\", \"ColorRGB\", \"\",0,0,0\r\n Property: \"ReflectionFactor\", \"double\", \"\",1\r\n Property: \"Ambient\", \"ColorRGB\", \"\",1,1,1\r\n Property: \"Diffuse\", \"ColorRGB\", \"\",${material.diffuse}\r\n Property: \"Specular\", \"ColorRGB\", \"\",${material.specular}\r\n Property: \"Shininess\", \"double\", \"\",${material.shininess}\r\n Property: \"Opacity\", \"double\", \"\",${material.opacity}\r\n Property: \"Reflectivity\", \"double\", \"\",0\r\n }`;\r\n }\r\n}\r\n","import Exporter from './Exporter';\r\nimport FBXInfoExtractor from './fbx/FBXInfoExtractor';\r\nimport FBXResult from './fbx/FBXResult';\r\nimport ComplexVisual from '../../ComplexVisual';\r\n\r\nexport default class FBXExporter extends Exporter {\r\n constructor(source, options) {\r\n super(source, options);\r\n // Data\r\n this._data = source;\r\n this._version = options.miewVersion || '0.0-UNSPECIFIED';\r\n this._extractor = new FBXInfoExtractor();\r\n }\r\n\r\n /**\r\n * Entry point to exporter.\r\n */\r\n exportSync() {\r\n // Creating mandatory blocks\r\n const result = new FBXResult();\r\n if (!this._source) {\r\n return this._result;\r\n }\r\n\r\n const info = this._extractor.process(this._data);\r\n info.version = this._version;\r\n this._result = result.getResult(info);\r\n return this._result;\r\n }\r\n}\r\n\r\nFBXExporter.formats = ['fbx'];\r\nFBXExporter.SourceClass = ComplexVisual;\r\n","import ExporterList from './exporters/ExporterList';\r\n\r\nimport PDBExporter from './exporters/PDBExporter';\r\nimport FBXExporter from './exporters/FBXExporter';\r\n\r\nexport default new ExporterList([\r\n PDBExporter,\r\n FBXExporter,\r\n]);\r\n","import loaders from './loaders';\r\nimport parsers from './parsers';\r\nimport exporters from './exporters';\r\n\r\nexport default {\r\n loaders,\r\n parsers,\r\n exporters,\r\n};\r\n","/**\r\n * @author mrdoob / http://mrdoob.com/\r\n */\r\n\r\nimport * as THREE from 'three';\r\nimport CSS2DObject from './CSS2DObject';\r\n\r\nconst tempColor = new THREE.Color();\r\n\r\nclass CSS2DRenderer {\r\n constructor() {\r\n this._width = 0;\r\n this._height = 0;\r\n this._widthHalf = 0;\r\n this._heightHalf = 0;\r\n\r\n this._vector = new THREE.Vector3();\r\n this._viewMatrix = new THREE.Matrix4();\r\n this._projectionMatrix = new THREE.Matrix4();\r\n\r\n this._domElement = document.createElement('div');\r\n this._domElement.style.overflow = 'hidden';\r\n this._domElement.style.position = 'absolute';\r\n this._domElement.style.top = '0';\r\n this._domElement.style.zIndex = '0'; // start a new Stacking Context to enclose all z-ordered children\r\n this._domElement.style.pointerEvents = 'none';\r\n }\r\n\r\n getElement() {\r\n return this._domElement;\r\n }\r\n\r\n reset() {\r\n const myNode = this.getElement();\r\n while (myNode.firstChild) {\r\n myNode.removeChild(myNode.firstChild);\r\n }\r\n }\r\n\r\n setSize(width, height) {\r\n this._width = width;\r\n this._height = height;\r\n\r\n this._widthHalf = this._width / 2;\r\n this._heightHalf = this._height / 2;\r\n\r\n this._domElement.style.width = `${width}px`;\r\n this._domElement.style.height = `${height}px`;\r\n }\r\n\r\n _renderObject(object, camera, scene) {\r\n function lerpColorAsHex(a, b, t) {\r\n tempColor.setHex(a);\r\n tempColor.lerp(b, t);\r\n return `#${tempColor.getHexString()}`;\r\n }\r\n\r\n function colorAsHex(a) {\r\n tempColor.setHex(a);\r\n return `#${tempColor.getHexString()}`;\r\n }\r\n\r\n if (object instanceof CSS2DObject) {\r\n this._vector.setFromMatrixPosition(object.matrixWorld);\r\n\r\n if (object.userData !== undefined && object.userData.offset !== undefined) {\r\n const localOffset = new THREE.Vector3(object.userData.offset.x, object.userData.offset.y, 0);\r\n this._vector.add(localOffset.multiplyScalar(object.matrixWorld.getMaxScaleOnAxis()));\r\n }\r\n\r\n this._vector.applyMatrix4(this._viewMatrix);\r\n\r\n const visibility = this._vector.z > -camera.near ? 'hidden' : 'visible';\r\n const zIndex = 10000 * (camera.far - (-this._vector.z)) / (camera.far - camera.near);\r\n\r\n const element = object.getElement();\r\n if (typeof scene.fog === 'undefined') {\r\n element.style.color = colorAsHex(object.userData.color);\r\n if (object.userData.background !== 'transparent') {\r\n element.style.background = colorAsHex(object.userData.background);\r\n }\r\n } else {\r\n const fogFactor = THREE.MathUtils.smoothstep(-this._vector.z, scene.fog.near, scene.fog.far);\r\n element.style.color = lerpColorAsHex(object.userData.color, scene.fog.color, fogFactor);\r\n if (object.userData.background !== 'transparent') {\r\n element.style.background = lerpColorAsHex(object.userData.background, scene.fog.color, fogFactor);\r\n }\r\n }\r\n\r\n this._vector.applyMatrix4(this._projectionMatrix);\r\n\r\n const style = `${object.userData !== {} ? object.userData.translation : 'translate(-50%, -50%) '\r\n }translate(${this._vector.x * this._widthHalf + this._widthHalf}px,${\r\n -this._vector.y * this._heightHalf + this._heightHalf}px)`;\r\n element.style.visibility = visibility;\r\n element.style.WebkitTransform = style;\r\n element.style.MozTransform = style;\r\n element.style.oTransform = style;\r\n element.style.transform = style;\r\n element.style.zIndex = Number(zIndex).toFixed(0);\r\n\r\n if (element.parentNode !== this._domElement) {\r\n this._domElement.appendChild(element);\r\n }\r\n }\r\n\r\n for (let i = 0, l = object.children.length; i < l; i++) {\r\n this._renderObject(object.children[i], camera, scene);\r\n }\r\n }\r\n\r\n render(scene, camera) {\r\n scene.updateMatrixWorld();\r\n\r\n if (camera.parent === null) {\r\n camera.updateMatrixWorld();\r\n }\r\n\r\n camera.matrixWorldInverse.copy(camera.matrixWorld).invert();\r\n\r\n this._viewMatrix.copy(camera.matrixWorldInverse);\r\n this._projectionMatrix.copy(camera.projectionMatrix);\r\n\r\n this._renderObject(scene, camera, scene);\r\n }\r\n}\r\nexport default CSS2DRenderer;\r\n","export default function getTopWindow() {\r\n // intercept the exception if we have cross-origin iframe\r\n try {\r\n if (window.top.location.href !== undefined) {\r\n return window.top;\r\n }\r\n } catch {\r\n // provide fallback\r\n }\r\n return window;\r\n}\r\n","import * as THREE from 'three';\r\nimport Timer from '../Timer';\r\nimport settings from '../settings';\r\nimport EventDispatcher from '../utils/EventDispatcher';\r\nimport getTopWindow from '../utils/getTopWindow';\r\n\r\nconst VK_LEFT = 37;\r\nconst VK_UP = 38;\r\nconst VK_RIGHT = 39;\r\nconst VK_DOWN = 40;\r\n\r\nconst STATE = {\r\n NONE: -1, ROTATE: 0, TRANSLATE: 1, SCALE: 2, TRANSLATE_PIVOT: 3,\r\n};\r\n\r\n// pausing for this amount of time before releasing mouse button prevents inertial rotation (seconds)\r\nconst FULL_STOP_THRESHOLD = 0.1;\r\n\r\nconst quaternion = new THREE.Quaternion();\r\nconst matrix4 = new THREE.Matrix4();\r\n\r\n// pivot -- local offset of the rotation pivot point\r\nfunction ObjectHandler(objects, camera, pivot, options) {\r\n this.objects = objects;\r\n [this.object] = objects;\r\n this.camera = camera;\r\n this.pivot = pivot;\r\n this.axis = new THREE.Vector3(0, 0, 1);\r\n this.options = options;\r\n\r\n this.lastRotation = {\r\n axis: new THREE.Vector3(),\r\n angle: 0.0,\r\n };\r\n}\r\n\r\nObjectHandler.prototype._rotate = (function () {\r\n const p = new THREE.Vector3();\r\n const q = new THREE.Quaternion();\r\n const s = new THREE.Vector3();\r\n\r\n const m = new THREE.Matrix4();\r\n\r\n return function (quat) {\r\n const zeroPivot = (this.pivot.x === 0.0 && this.pivot.y === 0.0 && this.pivot.z === 0.0);\r\n\r\n m.copy(this.object.matrix);\r\n\r\n if (zeroPivot) {\r\n m.multiply(matrix4.makeRotationFromQuaternion(quat));\r\n } else {\r\n m.multiply(matrix4.makeTranslation(this.pivot.x, this.pivot.y, this.pivot.z));\r\n m.multiply(matrix4.makeRotationFromQuaternion(quat));\r\n m.multiply(matrix4.makeTranslation(-this.pivot.x, -this.pivot.y, -this.pivot.z));\r\n }\r\n\r\n m.decompose(p, q, s);\r\n\r\n // update objects\r\n if (!zeroPivot) {\r\n for (let i = 0; i < this.objects.length; ++i) {\r\n this.objects[i].position.copy(p);\r\n }\r\n }\r\n\r\n for (let j = 0; j < this.objects.length; ++j) {\r\n this.objects[j].quaternion.copy(q);\r\n this.objects[j].updateMatrix();\r\n }\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.setObjects = function (objects) {\r\n this.objects = objects;\r\n [this.object] = objects;\r\n};\r\n\r\nObjectHandler.prototype.rotate = (function () {\r\n const rot = {\r\n axis: new THREE.Vector3(),\r\n angle: 0.0,\r\n };\r\n\r\n return function (quat, mousePrevPos, mouseCurPos, aboutAxis) {\r\n this.mouse2rotation(rot, mousePrevPos, mouseCurPos, aboutAxis);\r\n quat.setFromAxisAngle(rot.axis, rot.angle);\r\n\r\n if (rot.angle) {\r\n this._rotate(quat);\r\n }\r\n\r\n this.lastRotation = rot;\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.translate = (function () {\r\n const dir = new THREE.Vector3();\r\n const pivot = new THREE.Vector3();\r\n\r\n return function (delta) {\r\n // reverse-project viewport movement to view coords (compensate for screen aspect ratio)\r\n dir.set(\r\n delta.x / this.camera.projectionMatrix.elements[0],\r\n delta.y / this.camera.projectionMatrix.elements[5],\r\n 0,\r\n );\r\n let dist = dir.length();\r\n dir.normalize();\r\n\r\n // transform movement direction to object local coords\r\n dir.transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n // visible translate distance shouldn't depend on camera-to-object distance\r\n pivot.copy(this.pivot);\r\n this.object.localToWorld(pivot);\r\n dist *= Math.abs(pivot.z - this.camera.position.z);\r\n\r\n // visible translate distance shouldn't depend on object scale\r\n dist /= this.object.matrixWorld.getMaxScaleOnAxis();\r\n\r\n // all objects are translated similar to principal object\r\n // (we assume they all have identical pivot and scale)\r\n for (let i = 0; i < this.objects.length; ++i) {\r\n this.objects[i].translateOnAxis(dir, dist);\r\n }\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.update = (function () {\r\n const axis = new THREE.Vector3();\r\n\r\n return function (timeSinceLastUpdate, timeSinceMove) {\r\n if (settings.now.autoRotation !== 0.0) {\r\n // auto-rotation with constant speed\r\n\r\n // if rotation axis is fixed or hasn't been defined yet\r\n if (settings.now.autoRotationAxisFixed || this.lastRotation.axis.length() === 0.0) {\r\n // use Y-axis (transformed to local object coords)\r\n axis.set(0, 1, 0).transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n } else {\r\n // use axis defined by last user rotation\r\n axis.copy(this.lastRotation.axis);\r\n }\r\n\r\n this._rotate(quaternion.setFromAxisAngle(axis, settings.now.autoRotation * timeSinceLastUpdate));\r\n return true;\r\n }\r\n\r\n if (this.options.intertia && this.lastRotation.angle) {\r\n // inertial object rotation\r\n const angle = this.lastRotation.angle * ((1.0 - this.options.dynamicDampingFactor) ** (40.0 * timeSinceMove));\r\n\r\n if (Math.abs(angle) <= this.options.intertiaThreshold) {\r\n this.lastRotation.angle = 0.0;\r\n } else {\r\n this._rotate(quaternion.setFromAxisAngle(this.lastRotation.axis, angle));\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n}());\r\n\r\nObjectHandler.prototype.stop = function () {\r\n this.lastRotation.angle = 0.0;\r\n};\r\n\r\n// calculate (axis, angle) pair from mouse/touch movement\r\nObjectHandler.prototype.mouse2rotation = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n const eye = new THREE.Vector3();\r\n const eyeDirection = new THREE.Vector3();\r\n\r\n const cameraUpDirection = new THREE.Vector3();\r\n const cameraSidewaysDirection = new THREE.Vector3();\r\n\r\n const moveDirection = new THREE.Vector3();\r\n\r\n const mouseDelta = new THREE.Vector2();\r\n\r\n return function (rot, mousePrev, mouseCur, aboutAxis) {\r\n if (aboutAxis) {\r\n rot.axis.copy(this.axis);\r\n rot.angle = this.options.axisRotateFactor * (mouseCur.y - mousePrev.y);\r\n\r\n /* cool method that allows rotation around Z axis to be \"tied\" to mouse cursor\r\n\r\n res.axis.copy(this.axis);\r\n\r\n var pivot = this.pivot.clone();\r\n this.object.localToWorld(pivot);\r\n pivot.project(this.camera);\r\n\r\n var v1 = new THREE.Vector3(mousePrev.x, mousePrev.y, this.camera.position.z);\r\n v1.sub(pivot);\r\n var v2 = new THREE.Vector3(mouseCur.x, mouseCur.y, this.camera.position.z);\r\n v2.sub(pivot);\r\n\r\n v1.sub(res.axis.clone().multiplyScalar(v1.dot(res.axis)));\r\n v2.sub(res.axis.clone().multiplyScalar(v2.dot(res.axis)));\r\n\r\n var abs = v1.length() * v2.length();\r\n if (abs > 0) {\r\n res.angle = res.axis.dot(v1.cross(v2)) / abs;\r\n }\r\n */\r\n } else {\r\n mouseDelta.subVectors(mouseCur, mousePrev);\r\n const angle = mouseDelta.length();\r\n if (angle === 0.0) {\r\n return;\r\n }\r\n\r\n center.copy(this.pivot);\r\n this.object.localToWorld(center);\r\n eye.subVectors(this.camera.position, center);\r\n eyeDirection.copy(eye).normalize();\r\n\r\n cameraUpDirection.copy(this.camera.up).normalize();\r\n cameraSidewaysDirection.crossVectors(cameraUpDirection, eyeDirection).normalize();\r\n\r\n cameraUpDirection.setLength(mouseDelta.y);\r\n cameraSidewaysDirection.setLength(mouseDelta.x);\r\n\r\n moveDirection.copy(cameraUpDirection.add(cameraSidewaysDirection));\r\n\r\n rot.axis.crossVectors(moveDirection, eye);\r\n\r\n rot.angle = -angle * this.options.rotateFactor;\r\n }\r\n\r\n rot.axis.transformDirection(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n // make sure angle is always positive (thus 'axis' defines both axis and direction of rotation)\r\n if (rot.angle < 0.0) {\r\n rot.axis.negate();\r\n rot.angle = -rot.angle;\r\n }\r\n };\r\n}());\r\n\r\nfunction ObjectControls(object, objectPivot, camera, domElement, getAltObj) {\r\n EventDispatcher.call(this);\r\n const self = this;\r\n\r\n this.object = object;\r\n this.objectPivot = objectPivot;\r\n this.camera = camera;\r\n this.domElement = (typeof domElement !== 'undefined') ? domElement : document;\r\n this.getAltObj = getAltObj;\r\n\r\n // API\r\n\r\n this.enabled = true;\r\n this.hotkeysEnabled = true;\r\n\r\n this.screen = {\r\n left: 0, top: 0, width: 0, height: 0,\r\n };\r\n\r\n this.options = {\r\n rotateFactor: Math.PI, // full screen slide (along short side) would roughly mean 180 deg. rotation\r\n axisRotateFactor: 4 * Math.PI, // full screen slide (along short side) would roughly mean 720 deg. rotation\r\n intertia: true,\r\n dynamicDampingFactor: 0.1,\r\n intertiaThreshold: 1e-3,\r\n };\r\n\r\n // internals\r\n\r\n this._state = STATE.NONE;\r\n\r\n this._mousePrevPos = new THREE.Vector2();\r\n this._mouseCurPos = new THREE.Vector2();\r\n\r\n this._mainObj = new ObjectHandler([this.object], this.camera, new THREE.Vector3(0, 0, 0), this.options);\r\n this._altObj = new ObjectHandler([this.object], this.camera, new THREE.Vector3(0, 0, 0), this.options);\r\n this._affectedObj = this._mainObj;\r\n this._isAltObjFreeRotationAllowed = true;\r\n this._isTranslationAllowed = true;\r\n this._isKeysTranslatingObj = false;\r\n\r\n this._pressedKeys = [];\r\n\r\n this._clock = new Timer();\r\n this._clock.start();\r\n this._lastUpdateTime = this._clock.getElapsedTime();\r\n\r\n // events\r\n this._listeners = [\r\n {\r\n obj: self.domElement,\r\n type: 'mousedown',\r\n handler(e) {\r\n self.mousedown(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseup',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousemove',\r\n handler(e) {\r\n self.mousemove(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousewheel',\r\n handler(e) {\r\n self.mousewheel(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'DOMMouseScroll',\r\n handler(e) {\r\n self.mousewheel(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseout',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchstart',\r\n handler(e) {\r\n self.touchstartend(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchend',\r\n handler(e) {\r\n self.touchstartend(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchmove',\r\n handler(e) {\r\n self.touchmove(e);\r\n },\r\n },\r\n {\r\n obj: self.getKeyBindObject(),\r\n type: 'keydown',\r\n handler(e) {\r\n self.keydownup(e);\r\n },\r\n },\r\n {\r\n obj: self.getKeyBindObject(),\r\n type: 'keyup',\r\n handler(e) {\r\n self.keydownup(e);\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'resize',\r\n handler() {\r\n self.handleResize();\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'blur',\r\n handler() {\r\n self.resetKeys();\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'contextmenu',\r\n handler(e) {\r\n self.contextmenu(e);\r\n },\r\n }];\r\n\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.addEventListener(l.type, l.handler);\r\n }\r\n\r\n this.handleResize();\r\n\r\n this.resetKeys();\r\n\r\n // force an update at start\r\n this.update();\r\n}\r\n\r\n// methods\r\n\r\nObjectControls.prototype = Object.create(EventDispatcher.prototype);\r\nObjectControls.prototype.constructor = ObjectControls;\r\n\r\nObjectControls.prototype.resetKeys = function () {\r\n this._pressedKeys[VK_LEFT] = false;\r\n this._pressedKeys[VK_UP] = false;\r\n this._pressedKeys[VK_RIGHT] = false;\r\n this._pressedKeys[VK_DOWN] = false;\r\n};\r\n\r\nObjectControls.prototype.contextmenu = function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n};\r\n\r\nObjectControls.prototype.handleResize = function () {\r\n if (this.domElement === document) {\r\n this.screen.left = 0;\r\n this.screen.top = 0;\r\n this.screen.width = window.innerWidth;\r\n this.screen.height = window.innerHeight;\r\n } else {\r\n const box = this.domElement.getBoundingClientRect();\r\n // adjustments come from similar code in the jquery offset() function\r\n const d = this.domElement.ownerDocument.documentElement;\r\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\r\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\r\n this.screen.width = box.width;\r\n this.screen.height = box.height;\r\n }\r\n};\r\n\r\nObjectControls.prototype.enable = function (enable) {\r\n this.enabled = enable;\r\n};\r\n\r\nObjectControls.prototype.enableHotkeys = function (enable) {\r\n this.hotkeysEnabled = enable;\r\n};\r\n\r\nObjectControls.prototype.allowTranslation = function (allow) {\r\n this._isTranslationAllowed = allow;\r\n};\r\n\r\nObjectControls.prototype.allowAltObjFreeRotation = function (allow) {\r\n this._isAltObjFreeRotationAllowed = allow;\r\n};\r\n\r\nObjectControls.prototype.keysTranslateObj = function (on) {\r\n this._isKeysTranslatingObj = on;\r\n};\r\n\r\nObjectControls.prototype.isEditingAltObj = function () {\r\n return ((this._state === STATE.ROTATE) || (this._state === STATE.TRANSLATE))\r\n && (this._affectedObj === this._altObj);\r\n};\r\n\r\n// convert page coords of mouse/touch to uniform coords with smaller side being [-0.5, 0.5]\r\n// (uniform coords keep direct proportion with screen distance travelled by mouse regardless of screen aspect ratio)\r\nObjectControls.prototype.convertMouseToOnCircle = function (coords, pageX, pageY) {\r\n const screenSize = Math.min(this.screen.width, this.screen.height);\r\n\r\n if (screenSize === 0) {\r\n coords.set(0, 0);\r\n return;\r\n }\r\n\r\n coords.set(\r\n ((pageX - this.screen.width * 0.5 - this.screen.left) / screenSize),\r\n ((0.5 * this.screen.height + this.screen.top - pageY) / screenSize),\r\n );\r\n};\r\n\r\n// convert page coords of mouse/touch to viewport coords with both sides being [-1, 1]\r\n// (those are non-uniform coords affected by screen aspect ratio)\r\nObjectControls.prototype.convertMouseToViewport = function (coords, pageX, pageY) {\r\n if (this.screen.width === 0 || this.screen.height === 0) {\r\n coords.set(0, 0);\r\n return;\r\n }\r\n\r\n coords.set(\r\n (2.0 * (pageX - this.screen.width * 0.5 - this.screen.left) / this.screen.width),\r\n (2.0 * (0.5 * this.screen.height + this.screen.top - pageY) / this.screen.height),\r\n );\r\n};\r\n\r\nObjectControls.prototype.stop = function () {\r\n this._mainObj.stop();\r\n this._altObj.stop();\r\n};\r\n\r\n// rotate object based on latest mouse/touch movement\r\nObjectControls.prototype.rotateByMouse = (function () {\r\n const quat = new THREE.Quaternion();\r\n\r\n return function (aboutZAxis) {\r\n this._affectedObj.rotate(quat, this._mousePrevPos, this._mouseCurPos, aboutZAxis);\r\n this.dispatchEvent({ type: 'change', action: 'rotate', quaternion: quat });\r\n };\r\n}());\r\n\r\n// rotate object by specified quaternion\r\nObjectControls.prototype.rotate = function (quat) {\r\n this.object.quaternion.multiply(quat);\r\n this.dispatchEvent({ type: 'change', action: 'rotate', quaternion: quat });\r\n};\r\n\r\n// get object's orientation\r\nObjectControls.prototype.getOrientation = function () {\r\n return this.object.quaternion;\r\n};\r\n\r\n// set object's orientation\r\nObjectControls.prototype.setOrientation = function (quat) {\r\n this.object.quaternion.copy(quat);\r\n};\r\n\r\n// translate object based on latest mouse/touch movement\r\nObjectControls.prototype.translate = (function () {\r\n const delta = new THREE.Vector2();\r\n return function () {\r\n delta.subVectors(this._mouseCurPos, this._mousePrevPos);\r\n this._affectedObj.translate(delta);\r\n this.dispatchEvent({ type: 'change', action: 'translate' });\r\n };\r\n}());\r\n\r\n// get object scale\r\nObjectControls.prototype.getScale = function () {\r\n return this.object.scale.x;\r\n};\r\n\r\n// set uniform object scale\r\nObjectControls.prototype.setScale = function (scale) {\r\n this.object.scale.set(scale, scale, scale);\r\n};\r\n\r\n// scale object by factor (factor should be greater than zero)\r\nObjectControls.prototype.scale = function (factor) {\r\n if (factor <= 0) {\r\n return;\r\n }\r\n this.setScale(this.object.scale.x * factor);\r\n this.dispatchEvent({ type: 'change', action: 'zoom', factor });\r\n};\r\n\r\nObjectControls.prototype.update = (function () {\r\n const shift = new THREE.Vector2();\r\n\r\n return function () {\r\n const curTime = this._clock.getElapsedTime();\r\n const timeSinceLastUpdate = curTime - this._lastUpdateTime;\r\n\r\n // update object handler\r\n if (this._state === STATE.NONE) {\r\n const timeSinceMove = curTime - this._lastMouseMoveTime;\r\n if (this._mainObj.update(timeSinceLastUpdate, timeSinceMove)\r\n || this._altObj.update(timeSinceLastUpdate, timeSinceMove)) {\r\n this.dispatchEvent({ type: 'change', action: 'auto' });\r\n }\r\n }\r\n\r\n // apply arrow keys\r\n if (this._isKeysTranslatingObj) {\r\n const speedX = Number(this._pressedKeys[VK_RIGHT]) - Number(this._pressedKeys[VK_LEFT]);\r\n const speedY = Number(this._pressedKeys[VK_UP]) - Number(this._pressedKeys[VK_DOWN]);\r\n if (speedX !== 0.0 || speedY !== 0.0) {\r\n const delta = timeSinceLastUpdate;\r\n\r\n // update object translation\r\n const altObj = this.getAltObj();\r\n if (altObj.objects.length > 0) {\r\n this._altObj.setObjects(altObj.objects);\r\n this._altObj.pivot = altObj.pivot;\r\n\r\n if ('axis' in altObj) {\r\n this._altObj.axis = altObj.axis.clone();\r\n } else {\r\n this._altObj.axis.set(0, 0, 1);\r\n }\r\n\r\n shift.set(delta * speedX, delta * speedY);\r\n this._altObj.translate(shift);\r\n this.dispatchEvent({ type: 'change', action: 'translate' });\r\n }\r\n }\r\n }\r\n\r\n this._lastUpdateTime = curTime;\r\n };\r\n}());\r\n\r\nObjectControls.prototype.reset = function () {\r\n this._state = STATE.NONE;\r\n\r\n this.object.quaternion.copy(quaternion.set(0, 0, 0, 1));\r\n};\r\n\r\n// listeners\r\n\r\nObjectControls.prototype.mousedown = function (event) {\r\n if (this.enabled === false || this._state !== STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this._state === STATE.NONE) {\r\n if (event.button === 0) {\r\n this._affectedObj.stop(); // can edit only one object at a time\r\n\r\n let workWithAltObj = false;\r\n\r\n if (event.altKey) {\r\n const altObj = this.getAltObj();\r\n workWithAltObj = (altObj.objects.length > 0);\r\n if (workWithAltObj) {\r\n this._altObj.setObjects(altObj.objects);\r\n this._altObj.pivot = altObj.pivot;\r\n\r\n if ('axis' in altObj) {\r\n this._altObj.axis = altObj.axis.clone();\r\n } else {\r\n this._altObj.axis.set(0, 0, 1);\r\n }\r\n }\r\n }\r\n\r\n this._affectedObj = workWithAltObj ? this._altObj : this._mainObj;\r\n\r\n this._state = (workWithAltObj && event.ctrlKey && this._isTranslationAllowed) ? STATE.TRANSLATE : STATE.ROTATE;\r\n } else if (event.button === 2) {\r\n this._state = STATE.TRANSLATE_PIVOT;\r\n }\r\n }\r\n\r\n if (this._state === STATE.ROTATE) {\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.pageX, event.pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n }\r\n\r\n if (this._state === STATE.TRANSLATE || this._state === STATE.TRANSLATE_PIVOT) {\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n }\r\n};\r\n\r\nObjectControls.prototype.mousemove = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (this._state) {\r\n case STATE.ROTATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.pageX, event.pageY);\r\n this.rotateByMouse((event.altKey && !this._isAltObjFreeRotationAllowed) || event.shiftKey);\r\n this._lastMouseMoveTime = this._clock.getElapsedTime();\r\n break;\r\n\r\n case STATE.TRANSLATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this.translate();\r\n break;\r\n\r\n case STATE.TRANSLATE_PIVOT:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToViewport(this._mouseCurPos, event.pageX, event.pageY);\r\n this.translatePivotByMouse();\r\n break;\r\n\r\n default: break;\r\n }\r\n};\r\n\r\nObjectControls.prototype.mousewheel = function (event) {\r\n if (this.enabled === false || !settings.now.zooming || this._state !== STATE.NONE || event.shiftKey) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n let delta = 0;\r\n\r\n if (event.wheelDelta) {\r\n // WebKit / Opera / Explorer 9\r\n delta = event.wheelDelta / 40;\r\n } else if (event.detail) {\r\n // Firefox\r\n delta = -event.detail / 3;\r\n }\r\n\r\n let factor = 1.0 + delta * 0.05;\r\n factor = Math.max(factor, 0.01);\r\n this.scale(factor);\r\n};\r\n\r\nObjectControls.prototype.mouseup = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this._state = STATE.NONE;\r\n\r\n if (this._clock.getElapsedTime() - this._lastMouseMoveTime > FULL_STOP_THRESHOLD) {\r\n this._affectedObj.stop();\r\n }\r\n};\r\n\r\nObjectControls.prototype.touchstartend = function (event) {\r\n if (this.enabled === false) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (event.touches.length) {\r\n case 1:\r\n this._state = STATE.ROTATE;\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.touches[0].pageX, event.touches[0].pageY);\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n break;\r\n\r\n case 2: {\r\n // prevent inertial rotation\r\n this._mainObj.stop();\r\n this._altObj.stop();\r\n\r\n this._state = STATE.SCALE;\r\n const dx = event.touches[0].pageX - event.touches[1].pageX;\r\n const dy = event.touches[0].pageY - event.touches[1].pageY;\r\n this._touchDistanceCur = this._touchDistanceStart = Math.sqrt(dx * dx + dy * dy);\r\n this._scaleStart = this.object.scale.x;\r\n break;\r\n }\r\n\r\n default:\r\n this._state = STATE.NONE;\r\n }\r\n};\r\n\r\nObjectControls.prototype.touchmove = function (event) {\r\n if (this.enabled === false || this._state === STATE.NONE) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n switch (this._state) {\r\n case STATE.ROTATE:\r\n this._mousePrevPos.copy(this._mouseCurPos);\r\n this.convertMouseToOnCircle(this._mouseCurPos, event.touches[0].pageX, event.touches[0].pageY);\r\n this.rotateByMouse(false);\r\n\r\n this._lastMouseMoveTime = this._clock.getElapsedTime();\r\n break;\r\n\r\n case STATE.SCALE:\r\n if (settings.now.zooming) {\r\n // update scale\r\n const dx = event.touches[0].pageX - event.touches[1].pageX;\r\n const dy = event.touches[0].pageY - event.touches[1].pageY;\r\n this._touchDistanceCur = Math.sqrt(dx * dx + dy * dy);\r\n const newScale = this._scaleStart * this._touchDistanceCur / this._touchDistanceStart;\r\n const factor = newScale / this.object.scale.x;\r\n this.scale(factor);\r\n }\r\n break;\r\n\r\n default:\r\n }\r\n};\r\n\r\nObjectControls.prototype.keydownup = function (event) {\r\n if (this.enabled === false || this.hotkeysEnabled === false) {\r\n return;\r\n }\r\n\r\n switch (event.keyCode) {\r\n case VK_LEFT:\r\n case VK_UP:\r\n case VK_RIGHT:\r\n case VK_DOWN:\r\n this._pressedKeys[event.keyCode] = (event.type === 'keydown');\r\n event.preventDefault();\r\n event.stopPropagation();\r\n break;\r\n default:\r\n }\r\n};\r\n\r\nObjectControls.prototype.getKeyBindObject = function () {\r\n return getTopWindow();\r\n};\r\n\r\nObjectControls.prototype.dispose = function () {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.removeEventListener(l.type, l.handler);\r\n }\r\n};\r\n\r\nObjectControls.prototype.translatePivotByMouse = (function () {\r\n const delta = new THREE.Vector2();\r\n return function () {\r\n delta.subVectors(this._mouseCurPos, this._mousePrevPos);\r\n this.translatePivotInWorld(settings.now.translationSpeed * delta.x, settings.now.translationSpeed * delta.y, 0);\r\n };\r\n}());\r\n\r\n// Translate in WorldCS, translation is scaled with root scale matrix\r\nObjectControls.prototype.translatePivotInWorld = function (x, y, z) {\r\n const pos = this.objectPivot.position;\r\n pos.applyMatrix4(this.object.matrixWorld);\r\n pos.setX(pos.x + x);\r\n pos.setY(pos.y + y);\r\n pos.setZ(pos.z + z);\r\n pos.applyMatrix4(matrix4.copy(this.object.matrixWorld).invert());\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\n// Translate in ModelCS, x, y, z are Ang\r\nObjectControls.prototype.translatePivot = function (x, y, z) {\r\n const pos = this.objectPivot.position;\r\n pos.setX(pos.x + x);\r\n pos.setY(pos.y + y);\r\n pos.setZ(pos.z + z);\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\n// Set pivot\r\nObjectControls.prototype.setPivot = function (newPivot) {\r\n this.objectPivot.position.copy(newPivot);\r\n\r\n this.dispatchEvent({ type: 'change', action: 'translatePivot' });\r\n};\r\n\r\nexport default ObjectControls;\r\n","import * as THREE from 'three';\r\nimport settings from '../settings';\r\nimport Timer from '../Timer';\r\nimport EventDispatcher from '../utils/EventDispatcher';\r\n\r\nfunction Picker(gfxObj, camera, domElement) {\r\n EventDispatcher.call(this);\r\n const self = this;\r\n\r\n this.gfxObj = gfxObj;\r\n this.camera = camera;\r\n this.domElement = (typeof domElement !== 'undefined') ? domElement : document;\r\n this.screen = {\r\n left: 0, top: 0, width: 0, height: 0,\r\n };\r\n this._lastMousePos = new THREE.Vector2(0, 0);\r\n this._mouseTotalDist = 0.0;\r\n this._lastClickBeginTime = -1000.0;\r\n this._lastClickPos = new THREE.Vector2(0, 0);\r\n this._clickBeginTime = 0.0;\r\n\r\n this._clock = new Timer();\r\n this._clock.start();\r\n\r\n this._listeners = [\r\n {\r\n obj: self.domElement,\r\n type: 'mousedown',\r\n handler(e) {\r\n self.mousedown(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mouseup',\r\n handler(e) {\r\n self.mouseup(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'mousemove',\r\n handler(e) {\r\n self.mousemove(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchstart',\r\n handler(e) {\r\n self.touchstart(e);\r\n },\r\n },\r\n {\r\n obj: self.domElement,\r\n type: 'touchend',\r\n handler(e) {\r\n self.touchend(e);\r\n },\r\n },\r\n {\r\n obj: window,\r\n type: 'resize',\r\n handler() {\r\n self.handleResize();\r\n },\r\n }];\r\n\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.addEventListener(l.type, l.handler);\r\n }\r\n\r\n this.handleResize();\r\n}\r\n\r\nPicker.prototype = Object.create(EventDispatcher.prototype);\r\nPicker.prototype.constructor = Picker;\r\n\r\nPicker.prototype.reset = function () {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n};\r\n\r\nPicker.prototype.handleResize = function () {\r\n if (this.domElement === document) {\r\n this.screen.left = 0;\r\n this.screen.top = 0;\r\n this.screen.width = window.innerWidth;\r\n this.screen.height = window.innerHeight;\r\n } else {\r\n const box = this.domElement.getBoundingClientRect();\r\n // adjustments come from similar code in the jquery offset() function\r\n const d = this.domElement.ownerDocument.documentElement;\r\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\r\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\r\n this.screen.width = box.width;\r\n this.screen.height = box.height;\r\n }\r\n};\r\n\r\nPicker.prototype.pickObject = function (screenPos) {\r\n if (!this.gfxObj) {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n return;\r\n }\r\n\r\n const { gfxObj } = this;\r\n const rayCaster = new THREE.Raycaster();\r\n rayCaster.ray.origin.setFromMatrixPosition(this.camera.matrixWorld);\r\n rayCaster.ray.direction.set(screenPos.x, screenPos.y, 0.5).unproject(this.camera).sub(rayCaster.ray.origin).normalize();\r\n\r\n const clipPlane = (settings.now.draft.clipPlane && this.clipPlaneValue) ? this.clipPlaneValue : Infinity;\r\n const fogFarPlane = (settings.now.fog && this.fogFarValue) ? this.fogFarValue : Infinity;\r\n const point = rayCaster.intersectVisibleObject(gfxObj, this.camera, clipPlane, fogFarPlane);\r\n if (!point) {\r\n this.picked = {};\r\n this.dispatchEvent({ type: 'newpick', obj: {} });\r\n return;\r\n }\r\n\r\n let picked = {};\r\n if (point.residue || point.atom) {\r\n const residue = point.residue || point.atom.residue;\r\n if (settings.now.pick === 'chain') {\r\n picked = { chain: residue.getChain() };\r\n } else if (settings.now.pick === 'molecule') {\r\n picked = { molecule: residue.getMolecule() };\r\n } else if (point.residue || settings.now.pick === 'residue') {\r\n picked = { residue };\r\n } else if (point.atom) {\r\n picked = { atom: point.atom };\r\n }\r\n }\r\n this.picked = picked;\r\n this.dispatchEvent({ type: 'newpick', obj: picked });\r\n};\r\n\r\nPicker.prototype.getMouseInViewport = function (pageX, pageY) {\r\n return new THREE.Vector2(\r\n (pageX - this.screen.left) / this.screen.width * 2 - 1,\r\n -(pageY - this.screen.top) / this.screen.height * 2 + 1,\r\n );\r\n};\r\n\r\nPicker.prototype.mousedown = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.button === 0) {\r\n this._lastMousePos = this.getMouseInViewport(event.pageX, event.pageY);\r\n this._mouseTotalDist = 0.0;\r\n this._clickBeginTime = this._clock.getElapsedTime();\r\n }\r\n};\r\n\r\nPicker.prototype.mousemove = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const pos = this.getMouseInViewport(event.pageX, event.pageY);\r\n this._mouseTotalDist += pos.sub(this._lastMousePos).length();\r\n};\r\n\r\nPicker.prototype.mouseup = function (event) {\r\n const self = this;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.button === 0) {\r\n if (this._mouseTotalDist < 0.01) {\r\n const curTime = this._clock.getElapsedTime();\r\n const curPos = this.getMouseInViewport(event.pageX, event.pageY);\r\n\r\n const timeSinceLastClickBegin = curTime - this._lastClickBeginTime;\r\n if (timeSinceLastClickBegin < 0.7) {\r\n const clickDist = new THREE.Vector2().subVectors(curPos, this._lastClickPos);\r\n if (clickDist.length() < 0.01) {\r\n // it's a double click\r\n this.dispatchEvent({ type: 'dblclick', obj: this.picked });\r\n\r\n this._lastClickPos = curPos;\r\n this._lastClickBeginTime = -1000; // this click cannot serve as first click in double-click\r\n return;\r\n }\r\n }\r\n\r\n setTimeout(() => {\r\n self.pickObject(curPos);\r\n }, 0);\r\n\r\n this._lastClickPos = curPos;\r\n this._lastClickBeginTime = this._clickBeginTime;\r\n }\r\n }\r\n};\r\n\r\nPicker.prototype.touchstart = function (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.touches.length === 1) {\r\n this._lastTouchdownPos = this.getMouseInViewport(event.touches[0].pageX, event.touches[0].pageY);\r\n }\r\n};\r\n\r\nPicker.prototype.touchend = function (event) {\r\n const self = this;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (event.touches.length === 0\r\n && event.changedTouches.length === 1) {\r\n const pos = this.getMouseInViewport(event.changedTouches[0].pageX, event.changedTouches[0].pageY);\r\n const dist = pos.sub(this._lastTouchdownPos).length();\r\n if (dist < 0.01) {\r\n setTimeout(() => {\r\n self.pickObject(self._lastTouchdownPos);\r\n }, 0);\r\n }\r\n }\r\n};\r\n\r\nPicker.prototype.dispose = function () {\r\n for (let i = 0; i < this._listeners.length; i++) {\r\n const l = this._listeners[i];\r\n l.obj.removeEventListener(l.type, l.handler);\r\n }\r\n};\r\n\r\nexport default Picker;\r\n","import * as THREE from 'three';\r\n\r\nclass Axes {\r\n constructor(target, targetCamera) {\r\n this._target = target;\r\n this._targetCamera = targetCamera;\r\n this._camera = new THREE.PerspectiveCamera(targetCamera.fov, targetCamera.aspect, 1, 100);\r\n this._object = new THREE.AxesHelper(1);\r\n this._scene = new THREE.Scene();\r\n this._scene.add(this._object);\r\n this._full = new THREE.Vector2();\r\n\r\n this._update();\r\n }\r\n\r\n _update() {\r\n const { fov } = this._targetCamera;\r\n const camera = this._camera;\r\n camera.aspect = this._targetCamera.aspect;\r\n camera.setMinimalFov(fov);\r\n camera.setDistanceToFit(1.0, fov);\r\n camera.updateProjectionMatrix();\r\n\r\n this._object.quaternion.copy(this._target.quaternion);\r\n }\r\n\r\n render(renderer) {\r\n this._update();\r\n\r\n renderer.getSize(this._full);\r\n const width = this._full.width * 0.25;\r\n const height = this._full.height * 0.25;\r\n\r\n const { autoClear } = renderer;\r\n renderer.autoClear = false;\r\n renderer.setViewport(0.0, 0.0, width, height);\r\n renderer.clear(false, true, false);\r\n renderer.render(this._scene, this._camera);\r\n renderer.setViewport(0, 0, this._full.width, this._full.height);\r\n renderer.autoClear = autoClear;\r\n }\r\n}\r\nexport default Axes;\r\n","import * as THREE from 'three';\r\nimport SecondaryStructureColorer from './colorers/SecondaryStructureColorer';\r\n\r\nconst cDataOffset = 12;\r\nconst cFirstMask = 0x0FFFFF00;\r\nconst cFirstShift = 8;\r\nconst cSecMask1 = 0x000000FF;\r\nconst cSecShift1 = 12;\r\nconst cSecMask2 = 0xFFF00000;\r\nconst cSecShift2 = 20;\r\nconst cThirdMask = 0x000FFFFF;\r\nconst cStrMask = 0xF0000000;\r\nconst cStrShift = 28;\r\nconst c219 = 1 << 19;\r\nconst c220 = 1 << 20;\r\n\r\nconst cHelixIdx = 1;\r\nconst cSheetIdx = 2;\r\nconst secTypes = ['helix', 'strand'];\r\nconst cSecNames = ['fs', 'ps', 'ns', 'us'];\r\n\r\nfunction _createSecondary(strArray, complex) {\r\n const residues = complex._residues;\r\n const nRes = residues.length;\r\n const resid = new Uint8Array(nRes);\r\n\r\n const atoms = complex._atoms;\r\n for (let i = 0, n = strArray.length; i < n; ++i) {\r\n const atom = atoms[i];\r\n resid[atom.residue._index] = strArray[i];\r\n }\r\n\r\n const secondary = [];\r\n let rIdx = 0;\r\n while (rIdx < nRes) {\r\n if (resid[rIdx] !== 0) {\r\n const start = rIdx;\r\n const val = resid[rIdx];\r\n while (rIdx < nRes - 1 && resid[rIdx + 1] === val\r\n && residues[rIdx].isConnected(residues[rIdx + 1])) {\r\n ++rIdx;\r\n }\r\n secondary.push({ start, end: rIdx, type: secTypes[val - 1] });\r\n }\r\n ++rIdx;\r\n }\r\n return secondary;\r\n}\r\n\r\nfunction fromUInt20ToInt20(uint20) {\r\n return uint20 >= c219 ? uint20 - c220 : uint20;\r\n}\r\n\r\nclass FrameInfo {\r\n constructor(complex, payload, callbacks) {\r\n this._complex = complex;\r\n this._secondary = null;\r\n this.isLoading = false;\r\n this._framesRange = {\r\n start: 0,\r\n end: -1,\r\n };\r\n this.frameIsReady = false;\r\n this._buffer = null;\r\n this._frameRequest = null;\r\n this._callbacks = callbacks;\r\n if (typeof payload === 'function') {\r\n this._framesRequestLength = 1;\r\n this._downloadDataFn = payload;\r\n } else {\r\n this.parseBinaryData(payload, true);\r\n }\r\n this.reset();\r\n this.setFrame(0);\r\n }\r\n\r\n _prepareBuffer(framesStart, framesEnd) {\r\n if (framesStart === undefined || framesStart === null) {\r\n framesStart = 0;\r\n }\r\n if (framesEnd === undefined || framesEnd === null) {\r\n framesEnd = framesStart + this._framesRequestLength;\r\n }\r\n if (this._framesCount !== undefined) {\r\n framesEnd = Math.min(this._framesCount - 1, framesEnd);\r\n }\r\n if (this._downloadDataFn) {\r\n const self = this;\r\n const onDone = function (data) {\r\n self.isLoading = false;\r\n if (self._callbacks && typeof self._callbacks.onLoadStatusChanged === 'function') {\r\n self._callbacks.onLoadStatusChanged();\r\n }\r\n self._buffer = {\r\n data,\r\n state: 'ready',\r\n start: framesStart,\r\n end: framesEnd,\r\n };\r\n if (self._frameRequest !== null) {\r\n const idx = self._frameRequest;\r\n self._frameRequest = null;\r\n self.setFrame(idx);\r\n }\r\n };\r\n const onFail = function () {\r\n self.isLoading = false;\r\n if (self._callbacks && typeof self._callbacks.onError === 'function') {\r\n self._callbacks.onError('Streaming failed');\r\n }\r\n };\r\n if (!this._buffer) {\r\n this._buffer = {};\r\n }\r\n this._buffer.state = 'downloading';\r\n this.isLoading = true;\r\n if (self._callbacks && typeof self._callbacks.onLoadStatusChanged === 'function') {\r\n self._callbacks.onLoadStatusChanged();\r\n }\r\n this._downloadDataFn({ start: framesStart, end: framesEnd + 1 }, onDone, onFail);\r\n }\r\n }\r\n\r\n _parseBuffer() {\r\n if (this._buffer && this._buffer.state === 'ready') {\r\n this._framesRange = {\r\n start: this._buffer.start,\r\n end: this._buffer.end,\r\n };\r\n this.parseBinaryData(this._buffer.data, false);\r\n let _bufferRequestStart = (this._buffer.end + 1) % this._framesCount;\r\n if (_bufferRequestStart >= this._framesCount) {\r\n _bufferRequestStart = 0;\r\n }\r\n this._buffer = {\r\n state: 'none',\r\n };\r\n this._prepareBuffer(_bufferRequestStart, _bufferRequestStart + this._framesRequestLength);\r\n if (this._frameRequest !== null) {\r\n const idx = this._frameRequest;\r\n this._frameRequest = null;\r\n this.setFrame(idx);\r\n }\r\n }\r\n }\r\n\r\n parseBinaryData(arrayBuffer) {\r\n const dataView = new DataView(arrayBuffer);\r\n let offset = 0;\r\n const atomsCount = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const framesCount = dataView.getUint32(offset, true);\r\n this._framesCount = framesCount;\r\n this._framesRange.end = this._framesRange.end > 0\r\n ? Math.min(this._framesRange.end, framesCount - 1) : framesCount - 1;\r\n offset += 4;\r\n this._atomsCount = atomsCount;\r\n const maxSize = 1024 * 1024; // 1 MB\r\n this._framesRequestLength = Math.ceil(maxSize / (atomsCount * 8));\r\n const chunkedFramesCount = this._framesRange.end - this._framesRange.start + 1;\r\n if (atomsCount !== this._complex._atoms.length\r\n || arrayBuffer.byteLength !== cDataOffset + chunkedFramesCount * atomsCount * 8) {\r\n throw new Error();\r\n }\r\n const complex = this._complex;\r\n let timeStep = dataView.getUint32(offset, true);\r\n let iName = 0;\r\n while (timeStep > 1000 && iName < cSecNames.length - 1) {\r\n timeStep /= 1000;\r\n ++iName;\r\n }\r\n\r\n this._timeStep = `${timeStep.toString()} ${cSecNames[iName]}`;\r\n offset += 4;\r\n const secondary = [];\r\n const posData = new Float32Array(chunkedFramesCount * atomsCount * 3);\r\n let coordIdx = 0;\r\n const secondaryArr = new Int8Array(atomsCount);\r\n for (let j = 0; j < chunkedFramesCount; ++j) {\r\n for (let i = 0; i < atomsCount; ++i) {\r\n const hiWord = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const loWord = dataView.getUint32(offset, true);\r\n offset += 4;\r\n const str = (loWord & cStrMask) >>> cStrShift;\r\n const x = fromUInt20ToInt20(((loWord & cFirstMask) >>> cFirstShift) >> 0);\r\n const y = fromUInt20ToInt20((((loWord & cSecMask1) << cSecShift1)\r\n | ((hiWord & cSecMask2) >>> cSecShift2)) >> 0);\r\n const z = fromUInt20ToInt20((hiWord & cThirdMask) >> 0);\r\n secondaryArr[i] = 0;\r\n if (str > 0 && str < 4) {\r\n secondaryArr[i] = cHelixIdx;\r\n } else if (str === 4) {\r\n secondaryArr[i] = cSheetIdx;\r\n }\r\n posData[coordIdx++] = x / 100;\r\n posData[coordIdx++] = y / 100;\r\n posData[coordIdx++] = z / 100;\r\n }\r\n secondary.push(_createSecondary(secondaryArr, complex));\r\n }\r\n this._secondaryData = secondary;\r\n this._data = posData;\r\n }\r\n\r\n nextFrame() {\r\n this.setFrame((this._currFrame + 1) % this._framesCount);\r\n }\r\n\r\n needsColorUpdate(colorer) {\r\n return colorer instanceof SecondaryStructureColorer;\r\n }\r\n\r\n getAtomColor(colorer, atom) {\r\n return colorer.getResidueColor(this._residues[atom.residue._index], this._complex);\r\n }\r\n\r\n getResidueColor(colorer, residue) {\r\n return colorer.getResidueColor(this._residues[residue._index], this._complex);\r\n }\r\n\r\n _updateSecondary() {\r\n let i;\r\n const myResidues = this._residues;\r\n let n = myResidues.length;\r\n for (i = 0; i < n; ++i) {\r\n myResidues[i]._secondary = null;\r\n }\r\n const sec = this._secondaryData[this._currFrame - this._framesRange.start];\r\n for (i = 0, n = sec.length; i < n; ++i) {\r\n const oldSec = sec[i];\r\n const { start, end } = oldSec;\r\n const nSec = {\r\n _start: myResidues[start],\r\n _end: myResidues[end],\r\n type: oldSec.type,\r\n generic: oldSec.generic,\r\n };\r\n for (let j = start; j <= end; ++j) {\r\n myResidues[j]._secondary = nSec;\r\n }\r\n }\r\n }\r\n\r\n reset() {\r\n const compRes = this._complex._residues;\r\n const n = compRes.length;\r\n this._residues = new Array(n);\r\n const myResidues = this._residues;\r\n const getSec = function () {\r\n return this._secondary;\r\n };\r\n for (let i = 0; i < n; ++i) {\r\n myResidues[i] = {\r\n _type: compRes[i]._type,\r\n _isValid: compRes[i]._isValid,\r\n _controlPoint: null,\r\n _wingVector: null,\r\n _secondary: null,\r\n getSecondary: getSec,\r\n };\r\n }\r\n }\r\n\r\n setFrame(frameIdx) {\r\n this.frameIsReady = false;\r\n if (frameIdx >= this._framesRange.start && frameIdx <= this._framesRange.end) {\r\n this._currFrame = frameIdx;\r\n this._cachedResidues = false;\r\n this._updateSecondary();\r\n this.frameIsReady = true;\r\n } else {\r\n this._frameRequest = frameIdx;\r\n if (!this._buffer) {\r\n this._prepareBuffer(frameIdx);\r\n } else {\r\n const self = this;\r\n switch (this._buffer.state) {\r\n case 'none':\r\n this._prepareBuffer(frameIdx);\r\n break;\r\n case 'ready':\r\n self._parseBuffer();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n disableEvents() {\r\n this._callbacks = null;\r\n }\r\n\r\n /**\r\n * Returns link to atom pos vector, clone it if needed\r\n */\r\n\r\n static _vec = new THREE.Vector3();\r\n\r\n getAtomPos(atomIdx) {\r\n const vec = FrameInfo._vec;\r\n const self = this;\r\n const data = self._data;\r\n const idx = (self._atomsCount * (self._currFrame - self._framesRange.start) + atomIdx) * 3;\r\n vec.set(data[idx], data[idx + 1], data[idx + 2]);\r\n return vec;\r\n }\r\n\r\n getResidues() {\r\n if (this._cachedResidues) {\r\n return this._residues;\r\n }\r\n this._complex.updateToFrame(this);\r\n return this._residues;\r\n }\r\n}\r\nexport default FrameInfo;\r\n","import _ from 'lodash';\r\nimport settings from '../../settings';\r\nimport utils from '../../utils';\r\nimport gfxutils from '../gfxutils';\r\n\r\n/**\r\n * Create new scene object.\r\n *\r\n * @param {array=} params - Object required params.\r\n * @param {object=} opts - Options to override defaults with.\r\n *\r\n * These options are copied locally and not kept by reference, so the created instance will not reflect further\r\n * changes to the `opts` object. However, changes in defaults **will** affect the colorer after its creation.\r\n *\r\n * @exports SceneObject\r\n * @this SceneObject\r\n * @abstract\r\n * @constructor\r\n * @classdesc Basic class for all scene objects that are not reps.\r\n */\r\nclass SceneObject {\r\n constructor(params, opts) {\r\n if (this.constructor === SceneObject) {\r\n throw new Error('Can not instantiate abstract class!');\r\n }\r\n /**\r\n * Object's options inherited (prototyped) from defaults.\r\n * @type {object}\r\n */\r\n this.params = params;\r\n this.opts = _.merge(utils.deriveDeep(settings.now.objects[this.type], true), opts);\r\n this.needsRebuild = false;\r\n this._mesh = null;\r\n this.id = null;\r\n }\r\n\r\n /**\r\n * Get object identification, probably with options.\r\n * @returns {Object} field type contains type information, params - object's formal parameters,\r\n * opts - changed options\r\n * Options are returned if they were changed during or after object creation.\r\n */\r\n identify() {\r\n const result = {\r\n type: this.type,\r\n params: this.params,\r\n };\r\n const diff = utils.objectsDiff(this.opts, settings.now.modes[this.id]);\r\n if (!_.isEmpty(diff)) {\r\n result.opts = diff;\r\n }\r\n return result;\r\n }\r\n\r\n toString() {\r\n const paramsStr = `o=${this.type},${this.params.join(',')}`;\r\n const optsStr = utils.compareOptionsWithDefaults(this.opts, settings.defaults.objects[this.type]);\r\n return paramsStr + optsStr;\r\n }\r\n\r\n getGeometry() {\r\n return this._mesh;\r\n }\r\n\r\n destroy() {\r\n if (this._mesh) {\r\n gfxutils.destroyObject(this._mesh);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Scene object identifier.\r\n * @type {string}\r\n */\r\nSceneObject.prototype.type = '__';\r\n\r\nexport default SceneObject;\r\n","import * as THREE from 'three';\r\nimport SceneObject from './SceneObject';\r\nimport meshutils from '../meshutils';\r\nimport UberMaterial from '../shaders/UberMaterial';\r\nimport meshes from '../meshes/meshes';\r\nimport settings from '../../settings';\r\n\r\nclass LinesObj extends SceneObject {\r\n constructor(params, opts) {\r\n super(params, opts);\r\n if (params.length < 2) {\r\n throw new Error('Wrong number of argumets on line object creation!');\r\n }\r\n [this._id1, this._id2] = params;\r\n }\r\n\r\n _getAtomFromName(complex, atomId) {\r\n const err = ' - Wrong atom format it must be \\'#CHAIN_NAME.#RESIDUE_NUMBER.#ATOM_NAME\\' (e.g. \\'A.38.CO1\\')';\r\n const atom1 = complex.getAtomByFullname(atomId);\r\n if (!atom1) {\r\n throw new Error(atomId + err);\r\n }\r\n return atom1;\r\n }\r\n\r\n build(complex) {\r\n const geom = new THREE.BufferGeometry();\r\n this._atom1 = this._getAtomFromName(complex, this._id1);\r\n this._atom2 = this._getAtomFromName(complex, this._id2);\r\n\r\n const p1 = this._atom1.position;\r\n const p2 = this._atom2.position;\r\n const vertices = new Float32Array([\r\n p1.x, p1.y, p1.z,\r\n p2.x, p2.y, p2.z,\r\n ]);\r\n\r\n geom.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n geom.computeBoundingBox();\r\n\r\n this._line = new meshes.Line(geom, new UberMaterial({\r\n lights: false,\r\n overrideColor: true,\r\n dashedLine: true,\r\n fogTransparent: settings.now.bg.transparent,\r\n }));\r\n this._line.computeLineDistances();\r\n this._line.material.setUberOptions({\r\n fixedColor: new THREE.Color(this.opts.color),\r\n dashedLineSize: this.opts.dashSize,\r\n dashedLinePeriod: this.opts.dashSize + this.opts.gapSize,\r\n });\r\n this._line.material.updateUniforms();\r\n\r\n this._line.raycast = function (_raycaster, _intersects) {};\r\n this._mesh = this._line;\r\n const transforms = complex.getTransforms();\r\n if (transforms.length > 0) {\r\n this._mesh = new THREE.Group();\r\n this._mesh.add(this._line);\r\n meshutils.applyTransformsToMeshes(this._mesh, transforms);\r\n }\r\n }\r\n\r\n updateToFrame(frameData) {\r\n if (!this._atom1 || !this._atom2 || !this._line) {\r\n return;\r\n }\r\n\r\n const geo = this._line.geometry;\r\n geo.vertices[0].copy(frameData.getAtomPos(this._atom1.index));\r\n geo.vertices[1].copy(frameData.getAtomPos(this._atom2.index));\r\n this._line.computeLineDistances();\r\n geo.computeBoundingSphere();\r\n\r\n geo.verticesNeedUpdate = true;\r\n }\r\n}\r\n\r\nLinesObj.prototype.constructor = LinesObj;\r\nLinesObj.prototype.type = 'line';\r\n\r\nexport default LinesObj;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './Outline.frag';\r\n\r\nclass OutlineMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n // add depth outline\r\n super(params);\r\n\r\n const settings = {\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n srcDepthTex: { type: 't', value: null },\r\n srcTexSize: { type: 'v2', value: new THREE.Vector2(512, 512) },\r\n color: { type: 'v3', value: null },\r\n threshold: { type: 'f', value: null },\r\n opacity: { type: 'f', value: 1.0 },\r\n thickness: { type: 'v2', value: new THREE.Vector2(1, 1) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: true,\r\n depthTest: false,\r\n depthWrite: false,\r\n };\r\n\r\n this.setValues(settings);\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n this.depth = source.depth;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n const defines = {};\r\n\r\n if (this.depth) {\r\n defines.DEPTH_OUTLINE = 1;\r\n }\r\n\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nOutlineMaterial.prototype.depth = false;\r\n\r\nexport default OutlineMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './FXAA.frag';\r\n\r\nclass FXAAMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n bgColor: { type: 'c', value: new THREE.Color(0xffffff) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n copy(source) {\r\n super.copy(source);\r\n this.depth = source.depth;\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n\r\n if (this.bgTransparent) {\r\n defines.BG_TRANSPARENT = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nFXAAMaterial.prototype.bgTransparent = false;\r\n\r\nexport default FXAAMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AO.frag';\r\nimport noise from '../noiseTexture';\r\n\r\nconst _samplesKernel = [\r\n // hemisphere samples adopted to sphere\r\n new THREE.Vector3(0.295184, 0.077723, 0.068429),\r\n new THREE.Vector3(-0.271976, -0.365221, 0.838363),\r\n new THREE.Vector3(0.547713, 0.467576, 0.488515),\r\n new THREE.Vector3(0.662808, -0.031733, 0.584758),\r\n new THREE.Vector3(-0.025717, 0.218955, 0.657094),\r\n new THREE.Vector3(-0.310153, -0.365223, 0.370701),\r\n new THREE.Vector3(-0.101407, -0.006313, 0.747665),\r\n new THREE.Vector3(-0.769138, 0.360399, 0.086847),\r\n new THREE.Vector3(-0.271988, -0.275140, 0.905353),\r\n new THREE.Vector3(0.096740, -0.566901, 0.700151),\r\n new THREE.Vector3(0.562872, -0.735136, 0.094647),\r\n new THREE.Vector3(0.379877, 0.359278, 0.190061),\r\n new THREE.Vector3(0.519064, -0.023055, 0.405068),\r\n new THREE.Vector3(-0.301036, 0.114696, 0.088885),\r\n new THREE.Vector3(-0.282922, 0.598305, 0.487214),\r\n new THREE.Vector3(-0.181859, 0.251670, 0.679702),\r\n new THREE.Vector3(-0.191463, -0.635818, 0.512919),\r\n new THREE.Vector3(-0.293655, 0.427423, 0.078921),\r\n new THREE.Vector3(-0.267983, 0.680534, 0.132880),\r\n new THREE.Vector3(0.139611, 0.319637, 0.477439),\r\n new THREE.Vector3(-0.352086, 0.311040, 0.653913),\r\n new THREE.Vector3(0.321032, 0.805279, 0.487345),\r\n new THREE.Vector3(0.073516, 0.820734, 0.414183),\r\n new THREE.Vector3(-0.155324, 0.589983, 0.411460),\r\n new THREE.Vector3(0.335976, 0.170782, 0.527627),\r\n new THREE.Vector3(0.463460, -0.355658, 0.167689),\r\n new THREE.Vector3(0.222654, 0.596550, 0.769406),\r\n new THREE.Vector3(0.922138, -0.042070, 0.147555),\r\n new THREE.Vector3(-0.727050, -0.329192, 0.369826),\r\n new THREE.Vector3(-0.090731, 0.533820, 0.463767),\r\n new THREE.Vector3(-0.323457, -0.876559, 0.238524),\r\n new THREE.Vector3(-0.663277, -0.372384, 0.342856),\r\n];\r\n\r\nclass AOMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n noiseTexture: { type: 't', value: noise.noiseTexture },\r\n noiseTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / noise.noiseWidth, 1.0 / noise.noiseHeight) },\r\n diffuseTexture: { type: 't', value: null },\r\n normalTexture: { type: 't', value: null },\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n camNearFar: { type: 'v2', value: new THREE.Vector2(1.0, 10.0) },\r\n projMatrix: { type: 'mat4', value: new THREE.Matrix4() },\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n samplesKernel: { type: 'v3v', value: _samplesKernel },\r\n kernelRadius: { type: 'f', value: 1.0 },\r\n depthThreshold: { type: 'f', value: 1.0 },\r\n factor: { type: 'f', value: 1.0 },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n }\r\n}\r\n\r\nexport default AOMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AOHorBlur.frag';\r\n\r\nconst _kernelOffsets = [-2.0, -1.0, 0.0, 1.0, 2.0];\r\n\r\nclass AOHorBlurMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n aoMap: { type: 't', value: null },\r\n samplesOffsets: { type: 'fv1', value: _kernelOffsets },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n }\r\n}\r\n\r\nexport default AOHorBlurMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './AOVertBlurWithBlend.frag';\r\n\r\nconst _kernelOffsets = [-2.0, -1.0, 0.0, 1.0, 2.0];\r\n\r\nclass AOVertBlurWithBlendMaterial extends THREE.RawShaderMaterial {\r\n constructor(params) {\r\n super(params);\r\n\r\n // set default values\r\n this.setValues.call(this, {\r\n uniforms: {\r\n diffuseTexture: { type: 't', value: null },\r\n depthTexture: { type: 't', value: null },\r\n srcTexelSize: { type: 'v2', value: new THREE.Vector2(1.0 / 512.0, 1.0 / 512.0) },\r\n aoMap: { type: 't', value: null },\r\n samplesOffsets: { type: 'fv1', value: _kernelOffsets },\r\n projMatrix: { type: 'mat4', value: new THREE.Matrix4() },\r\n aspectRatio: { type: 'f', value: 0.0 },\r\n tanHalfFOV: { type: 'f', value: 0.0 },\r\n fogNearFar: { type: 'v2', value: new THREE.Vector2(100.0, 100.0) },\r\n fogColor: { type: 'v4', value: new THREE.Vector4(0.0, 0.5, 0.0, 1.0) },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n this.setValues(params);\r\n }\r\n\r\n setValues(values) {\r\n if (typeof values === 'undefined') {\r\n return;\r\n }\r\n\r\n // set direct values\r\n super.setValues(values);\r\n\r\n const defines = {};\r\n\r\n if (this.useFog) {\r\n defines.USE_FOG = 1;\r\n }\r\n if (this.fogTransparent) {\r\n defines.FOG_TRANSPARENT = 1;\r\n }\r\n // set dependent values\r\n this.defines = defines;\r\n }\r\n}\r\n\r\nAOVertBlurWithBlendMaterial.prototype.useFog = true;\r\nAOVertBlurWithBlendMaterial.prototype.fogTransparent = false;\r\n\r\nexport default AOVertBlurWithBlendMaterial;\r\n","import * as THREE from 'three';\r\nimport vertexShader from './ScreenQuad.vert';\r\nimport fragmentShader from './Anaglyph.frag';\r\n\r\nclass AnaglyphMaterial extends THREE.RawShaderMaterial {\r\n constructor() {\r\n super();\r\n const settings = {\r\n uniforms: {\r\n srcL: { type: 't', value: null },\r\n srcR: { type: 't', value: null },\r\n },\r\n vertexShader,\r\n fragmentShader,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n };\r\n this.setValues(settings);\r\n }\r\n}\r\n\r\nexport default AnaglyphMaterial;\r\n","import * as THREE from 'three';\r\nimport settings from '../settings';\r\n\r\nclass View {\r\n constructor() {\r\n this.position = new THREE.Vector3(0, 0, 0);\r\n this.scale = 1;\r\n this.orientation = new THREE.Quaternion(0, 0, 0, 1);\r\n }\r\n\r\n set(position, scale, orientation) {\r\n this.position = position;\r\n this.scale = scale;\r\n this.orientation = orientation;\r\n }\r\n}\r\n\r\nconst _transitionTime = 1.5; // in seconds\r\n\r\nexport default class ViewInterpolator {\r\n setup(startView, endView) {\r\n this._startTime = undefined;\r\n this._endTime = undefined;\r\n this._isPaused = false;\r\n\r\n this._srcView = startView;\r\n this._dstView = endView;\r\n this._isMoving = false;\r\n }\r\n\r\n isMoving() {\r\n return this._isMoving;\r\n }\r\n\r\n wasStarted() {\r\n return typeof this._startTime !== 'undefined' && typeof this._endTime !== 'undefined';\r\n }\r\n\r\n start() {\r\n this._startTime = Date.now();\r\n const transTime = settings.now.interpolateViews ? _transitionTime * 1000 : 0;\r\n this._endTime = this._startTime + transTime;\r\n this._isMoving = true;\r\n }\r\n\r\n getCurrentView() {\r\n if (typeof this._srcView === 'undefined' || typeof this._dstView === 'undefined'\r\n || !this._isMoving || !this.wasStarted()) {\r\n return { success: false };\r\n }\r\n\r\n let view = this.createView();\r\n const time = Date.now();\r\n if (time > this._endTime) {\r\n view = this._dstView;\r\n this.reset();\r\n return { success: true, view };\r\n }\r\n\r\n const factor = (time - this._startTime) / (this._endTime - this._startTime);\r\n view.position.copy(this._srcView.position);\r\n view.position.lerp(this._dstView.position, factor);\r\n view.scale = (1 - factor) * this._srcView.scale + factor * this._dstView.scale;\r\n view.orientation.copy(this._srcView.orientation);\r\n view.orientation.slerp(this._dstView.orientation, factor);\r\n return { success: true, view };\r\n }\r\n\r\n reset() {\r\n this._startTime = this._endTime = 0;\r\n this._isMoving = false;\r\n }\r\n\r\n pause() {\r\n if (!this._isPaused) {\r\n this.setup(this.getCurrentView().view, this._dstView);\r\n this._isPaused = true;\r\n }\r\n }\r\n\r\n resume() {\r\n this._isPaused = false;\r\n }\r\n\r\n createView() {\r\n return new View();\r\n }\r\n}\r\n","import _ from 'lodash';\r\nimport makeContextDependent from './makeContextDependent';\r\n\r\nconst MAX_COOKIE_LEN = 4000;\r\nconst COUNT_SUFFIX = 'Cnt';\r\n\r\nfunction _chunkString(string, chunkLen) {\r\n const l = string.length;\r\n const chunks = [];\r\n for (let c = 0, lc = 0; lc < l; c++, lc += chunkLen) {\r\n chunks[c] = string.slice(lc, lc + chunkLen);\r\n }\r\n return chunks;\r\n}\r\n\r\n/**\r\n * Create new context dependent Cookie holder object.\r\n * @param context\r\n * @param {Object} opts - options\r\n * @param {string} opts.path - cookie path\r\n * @constructor\r\n */\r\nfunction Cookies(context, opts) {\r\n this.context = context;\r\n this._opts = _.merge({\r\n path: '/',\r\n }, opts);\r\n}\r\n\r\nmakeContextDependent(Cookies.prototype);\r\n\r\n/**\r\n * Remove cookie by the name.\r\n * @param key\r\n */\r\nCookies.prototype.removeCookie = function (key) {\r\n const cntKey = this._toCount(key);\r\n let cntVal = this._getSimpleCookie(cntKey);\r\n if (!cntVal) {\r\n this._removeSimpleCookie(key);\r\n return;\r\n }\r\n this._removeSimpleCookie(cntKey);\r\n cntVal = parseInt(cntVal, 10);\r\n for (let i = 0; i < cntVal; ++i) {\r\n this._removeSimpleCookie(key + i);\r\n }\r\n};\r\n\r\n/**\r\n * Set new cookie value. Automatically splits\r\n * values that are too large into multiple cookies.\r\n * @param key\r\n * @param value\r\n */\r\nCookies.prototype.setCookie = function (key, value) {\r\n this.removeCookie(key);\r\n value = encodeURIComponent(value);\r\n const values = _chunkString(value, MAX_COOKIE_LEN - key.length - 1);\r\n const cntVal = values.length;\r\n if (cntVal === 1) {\r\n this._setSimpleCookie(key, value);\r\n return;\r\n }\r\n const cntKey = this._toCount(key);\r\n this._setSimpleCookie(cntKey, cntVal.toString());\r\n for (let i = 0; i < cntVal; ++i) {\r\n this._setSimpleCookie(key + i, values[i]);\r\n }\r\n};\r\n\r\n/**\r\n * Obtain the value of a compound cookie.\r\n * @param key\r\n */\r\nCookies.prototype.getCookie = function (key) {\r\n const cntKey = this._toCount(key);\r\n let cntVal = this._getSimpleCookie(cntKey);\r\n if (!cntVal) {\r\n return this._getSimpleCookie(key);\r\n }\r\n cntVal = parseInt(cntVal, 10);\r\n const value = [];\r\n for (let i = 0; i < cntVal; ++i) {\r\n value[i] = this._getSimpleCookie(key + i);\r\n }\r\n return value.join('');\r\n};\r\n\r\nCookies.prototype._toCount = function (key) {\r\n return key + COUNT_SUFFIX;\r\n};\r\n\r\nCookies.prototype._removeSimpleCookie = function (key) {\r\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;\r\n};\r\n\r\nCookies.prototype._getExpirationDate = function () {\r\n const today = new Date();\r\n const EXP_PERIOD_YEARS = 10;\r\n today.setFullYear(today.getFullYear() + EXP_PERIOD_YEARS);\r\n return today;\r\n};\r\n\r\nCookies.prototype._setSimpleCookie = function (key, value) {\r\n document.cookie = `${key}=${value\r\n };expires=${this._getExpirationDate().toUTCString()\r\n };path=${this._opts.path}`;\r\n};\r\n\r\nCookies.prototype._getSimpleCookie = function (key) {\r\n const matches = document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`));\r\n return matches ? decodeURIComponent(matches[1]) : '';\r\n};\r\n\r\nCookies.prototype._exists = function (key) {\r\n return document.cookie.match(new RegExp(`(?:^|; )${key}=([^;]*)`));\r\n};\r\n\r\nexport default Cookies;\r\n","/*\r\n * Toggling WebVR is done through button.click because of limitations on calling requestPresent in webVR:\r\n * VRDisplay::requestPresent should be called from user gesture:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestPresent\r\n */\r\nexport default function (webVRPoC) {\r\n function showEnterVR(button) {\r\n button.style.display = '';\r\n button.style.cursor = 'pointer';\r\n button.style.left = 'calc(50% - 50px)';\r\n button.style.width = '100px';\r\n\r\n button.textContent = 'ENTER VR';\r\n\r\n let currentSession = null;\r\n\r\n function onSessionEnded(/* event */) {\r\n currentSession.removeEventListener('end', onSessionEnded);\r\n button.textContent = 'ENTER VR';\r\n currentSession = null;\r\n }\r\n\r\n function onSessionStarted(session) {\r\n session.addEventListener('end', onSessionEnded);\r\n webVRPoC._gfx.renderer.xr.setReferenceSpaceType('local');\r\n webVRPoC._gfx.renderer.xr.setSession(session);\r\n button.textContent = 'EXIT VR';\r\n currentSession = session;\r\n }\r\n\r\n button.onmouseenter = function () { button.style.opacity = '1.0'; };\r\n button.onmouseleave = function () { button.style.opacity = '0.5'; };\r\n\r\n button.onclick = function () {\r\n if (currentSession === null) {\r\n // WebXR's requestReferenceSpace only works if the corresponding feature\r\n // was requested at session creation time. For simplicity, just ask for\r\n // the interesting ones as optional features, but be aware that the\r\n // requestReferenceSpace call will fail if it turns out to be unavailable.\r\n // ('local' is always available for immersive sessions and doesn't need to\r\n // be requested separately.)\r\n\r\n const sessionInit = { optionalFeatures: ['local-floor', 'bounded-floor'] };\r\n navigator.xr.requestSession('immersive-vr', sessionInit).then(onSessionStarted);\r\n webVRPoC.moveSceneBehindHeadset();\r\n } else {\r\n currentSession.end();\r\n }\r\n };\r\n }\r\n\r\n function showWebXRNotFound(button) {\r\n button.style.display = '';\r\n button.style.cursor = 'auto';\r\n button.style.left = 'calc(50% - 75px)';\r\n button.style.width = '150px';\r\n button.textContent = 'VR NOT FOUND';\r\n button.onmouseenter = null;\r\n button.onmouseleave = null;\r\n button.onclick = null;\r\n }\r\n\r\n function stylizeElement(element) {\r\n element.style.position = 'absolute';\r\n element.style.bottom = '20px';\r\n element.style.padding = '12px 6px';\r\n element.style.border = '1px solid #fff';\r\n element.style.borderRadius = '4px';\r\n element.style.background = 'transparent';\r\n element.style.color = '#fff';\r\n element.style.font = 'normal 13px sans-serif';\r\n element.style.textAlign = 'center';\r\n element.style.opacity = '0.5';\r\n element.style.outline = 'none';\r\n element.style.zIndex = '999';\r\n }\r\n\r\n if ('xr' in navigator) {\r\n const button = document.createElement('button');\r\n button.style.display = 'none';\r\n stylizeElement(button);\r\n navigator.xr.isSessionSupported('immersive-vr').then((supported) => (\r\n supported ? showEnterVR(button) : showWebXRNotFound(button)\r\n ));\r\n return button;\r\n }\r\n const message = document.createElement('a');\r\n message.href = 'https://webvr.info';\r\n message.innerHTML = 'WEBXR NOT SUPPORTED';\r\n message.style.left = 'calc(50% - 90px)';\r\n message.style.width = '180px';\r\n message.style.textDecoration = 'none';\r\n stylizeElement(message);\r\n return message;\r\n}\r\n","import * as THREE from 'three';\r\nimport createWebVRButton from './createWebVRButton';\r\nimport gfxutils from '../gfxutils';\r\nimport logger from '../../utils/logger';\r\nimport settings from '../../settings';\r\nimport UberMaterial from '../shaders/UberMaterial';\r\n\r\nexport default class WebVRPoC {\r\n constructor(onToggle) {\r\n this._mainCamera = new THREE.PerspectiveCamera();\r\n this._button = null;\r\n this._onToggle = onToggle;\r\n\r\n this._molContainer = new gfxutils.RCGroup();\r\n this._user = new gfxutils.RCGroup();\r\n this._scalingPivot = new THREE.Object3D();\r\n this._user.add(this._scalingPivot);\r\n\r\n this._controller1 = null;\r\n this._controller2 = null;\r\n this._pressedGripsCounter = 0;\r\n this._distance = 0;\r\n\r\n this._gfx = null;\r\n }\r\n\r\n startScalingByControllers() {\r\n // reset scale\r\n this._distance = this._controller1.position.distanceTo(this._controller2.position);\r\n gfxutils.getMiddlePoint(this._controller1.position, this._controller2.position, this._scalingPivot.position);\r\n this._scalingPivot.scale.set(1, 1, 1);\r\n this._scalingPivot.updateMatrix();\r\n this._scalingPivot.updateMatrixWorld();\r\n // link molecule to pivot\r\n this._scalingPivot.addSavingWorldTransform(this._molContainer);\r\n }\r\n\r\n stopScalingByControllers() {\r\n this._gfx.scene.addSavingWorldTransform(this._molContainer);\r\n }\r\n\r\n handleGripsDown(event) {\r\n this._pressedGripsCounter++;\r\n if (this._pressedGripsCounter === 2) {\r\n this.startScalingByControllers();\r\n } else if (this._pressedGripsCounter === 1) {\r\n event.target.addSavingWorldTransform(this._molContainer);\r\n }\r\n }\r\n\r\n handleGripsUp(event) {\r\n this._pressedGripsCounter--;\r\n if (this._pressedGripsCounter === 1) {\r\n this.stopScalingByControllers();\r\n // reattach molecule to other controller\r\n const anotherController = event.target === this._controller1 ? this._controller2 : this._controller1;\r\n anotherController.addSavingWorldTransform(this._molContainer);\r\n } else if (this._pressedGripsCounter === 0) {\r\n this._gfx.scene.addSavingWorldTransform(this._molContainer);\r\n }\r\n }\r\n\r\n enable(gfx) {\r\n if (!gfx) {\r\n logger.warn('WebVR couldn\\'t be enabled, because gfx is not defined');\r\n return;\r\n }\r\n this._gfx = gfx;\r\n const { renderer, camera } = gfx;\r\n if (!renderer) {\r\n throw new Error('No renderer is available to toggle WebVR');\r\n }\r\n if (!camera) {\r\n throw new Error('No camera is available to toggle WebVR');\r\n }\r\n\r\n // enable xr in renderer\r\n renderer.xr.enabled = true;\r\n // add button for turning vr mode\r\n if (!this._button) {\r\n this._button = createWebVRButton(this);\r\n document.body.appendChild(this._button);\r\n } else {\r\n this._button.style.display = 'block';\r\n }\r\n // store fog setting\r\n this._mainFog = settings.now.fog;\r\n settings.set('fog', false);\r\n\r\n this._plugVRNodesIntoScene(gfx, renderer);\r\n this._setControllersListeners();\r\n\r\n // make some Miew job\r\n if (this._onToggle) {\r\n this._onToggle(true);\r\n }\r\n }\r\n\r\n _plugVRNodesIntoScene(gfx, renderer) {\r\n // store common scene camera\r\n this._mainCamera.copy(gfx.camera);\r\n // add hierarchical structure for webVR into scene\r\n gfx.scene.add(this._user);\r\n // turn on webvr transformation\r\n gfx.scene.add(this._molContainer);\r\n this._molContainer.add(gfx.root);\r\n\r\n this._controller1 = renderer.xr.getController(0);\r\n this._controller2 = renderer.xr.getController(1);\r\n const mesh = this._createControllerMesh();\r\n this._controller1.add(mesh);\r\n this._controller2.add(mesh.clone());\r\n this._user.add(this._controller1);\r\n this._user.add(this._controller2);\r\n }\r\n\r\n _setControllersListeners() {\r\n this._controller1.addEventListener('selectstart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller1.addEventListener('selectend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n this._controller2.addEventListener('selectstart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller2.addEventListener('selectend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n\r\n this._controller1.addEventListener('squeezestart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller1.addEventListener('squeezeend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n this._controller2.addEventListener('squeezestart', (event) => {\r\n this.handleGripsDown(event);\r\n });\r\n this._controller2.addEventListener('squeezeend', (event) => {\r\n this.handleGripsUp(event);\r\n });\r\n }\r\n\r\n disable() {\r\n if (!this._gfx) {\r\n return;\r\n }\r\n const { renderer, camera } = this._gfx;\r\n if (!renderer) {\r\n throw new Error('No renderer is available to toggle WebVR');\r\n }\r\n\r\n // nullify webxr callback for animation frame\r\n renderer.setAnimationLoop(null);\r\n const session = renderer.xr.getSession();\r\n if (session) {\r\n session.end();\r\n }\r\n renderer.xr.enabled = false;\r\n // remove button of VR entering\r\n if (this._button) {\r\n this._button.style.display = 'none';\r\n }\r\n // restore fog param\r\n settings.set('fog', this._mainFog);\r\n\r\n this._unplugVRNodesFromScene(camera);\r\n\r\n // make some Miew job\r\n if (this._onToggle) {\r\n this._onToggle(false);\r\n }\r\n }\r\n\r\n _unplugVRNodesFromScene(camera) {\r\n // restore common camera\r\n if (this._mainCamera && camera) {\r\n camera.copy(this._mainCamera);\r\n }\r\n // turn off webvr transformation\r\n const root = this._molContainer.children[0];\r\n if (root) {\r\n this._gfx.scene.add(root);\r\n }\r\n this._molContainer.parent.remove(this._molContainer);\r\n if (this._user) {\r\n this._gfx.scene.remove(this._user);\r\n }\r\n // free scene nodes\r\n this._molContainer = null;\r\n this._user = null;\r\n this._scalingPivot = null;\r\n this._user = null;\r\n this._controller1 = null;\r\n this._controller2 = null;\r\n }\r\n\r\n _createControllerMesh() {\r\n // visualize controllers with cylinders\r\n const geometry = new THREE.CylinderGeometry(0.04, 0.04, 0.3);\r\n const material = new UberMaterial({ lights: false, overrideColor: true });\r\n material.setUberOptions({ fixedColor: new THREE.Color(0x4444ff) });\r\n material.updateUniforms();\r\n const cylinder = new THREE.Mesh(geometry, material);\r\n cylinder.rotateX(-Math.PI / 2);\r\n return cylinder;\r\n }\r\n\r\n updateMoleculeScale() {\r\n if (!this._controller1 || !this._controller2) {\r\n return;\r\n }\r\n\r\n const self = this;\r\n // update molecule scaling by controllers\r\n if (self._pressedGripsCounter === 2) {\r\n // recalc scaling pivot\r\n gfxutils.getMiddlePoint(self._controller1.position, self._controller2.position, self._scalingPivot.position);\r\n // recalc scaler\r\n const dist = self._controller1.position.distanceTo(self._controller2.position);\r\n const scaler = dist / self._distance;\r\n self._scalingPivot.scale.multiplyScalar(scaler);\r\n // save cur distance for next frame\r\n self._distance = dist;\r\n }\r\n }\r\n\r\n /**\r\n * Reposition molecule right before the camera.\r\n * @note The proper way is to initiate headset in the place of common Miew's camera.\r\n * But threejs limitations on setting new XRReferenceSpace enforce the molecule repositioning\r\n * Hope, something will change.\r\n */\r\n moveSceneBehindHeadset() {\r\n const gfx = this._gfx;\r\n const { camera } = gfx;\r\n\r\n // set container position in camera space\r\n const container = this._molContainer;\r\n container.matrix.identity();\r\n container.position.set(0, 0, -4.0);\r\n container.updateMatrix();\r\n\r\n // update container world matrix\r\n container.matrixWorld.multiplyMatrices(camera.matrixWorld, container.matrix);\r\n // readd to scene\r\n gfx.scene.addSavingWorldTransform(container);\r\n if (this._onToggle) {\r\n this._onToggle(true);\r\n }\r\n }\r\n\r\n getCanvas() {\r\n const gfx = this._gfx;\r\n return (gfx && gfx.renderer) ? gfx.renderer.domElement : null;\r\n }\r\n}\r\n","/* global PACKAGE_VERSION:false */\r\nimport _ from 'lodash';\r\nimport * as THREE from 'three';\r\nimport { Spinner } from 'spin.js';\r\nimport Stats from './gfx/Stats';\r\nimport utils from './utils';\r\nimport JobHandle from './utils/JobHandle';\r\nimport options from './options';\r\nimport settings from './settings';\r\nimport chem from './chem';\r\nimport Visual from './Visual';\r\nimport ComplexVisual from './ComplexVisual';\r\nimport Complex from './chem/Complex';\r\nimport VolumeVisual from './VolumeVisual';\r\nimport io from './io/io';\r\nimport modes from './gfx/modes';\r\nimport colorers from './gfx/colorers';\r\nimport palettes from './gfx/palettes';\r\nimport materials from './gfx/materials';\r\nimport Representation from './gfx/Representation';\r\nimport CSS2DRenderer from './gfx/CSS2DRenderer';\r\nimport ObjectControls from './ui/ObjectControls';\r\nimport Picker from './ui/Picker';\r\nimport Axes from './gfx/Axes';\r\nimport gfxutils from './gfx/gfxutils';\r\nimport meshutils from './gfx/meshutils';\r\nimport FrameInfo from './gfx/FrameInfo';\r\nimport meshes from './gfx/meshes/meshes';\r\nimport LinesObject from './gfx/objects/LinesObj';\r\nimport UberMaterial from './gfx/shaders/UberMaterial';\r\nimport OutlineMaterial from './gfx/shaders/OutlineMaterial';\r\nimport FXAAMaterial from './gfx/shaders/FXAAMaterial';\r\nimport AOMaterial from './gfx/shaders/AOMaterial';\r\nimport AOHorBlurMaterial from './gfx/shaders/AOHorBlurMaterial';\r\nimport AOVertBlurWithBlendMaterial from './gfx/shaders/AOVertBlurWithBlendMaterial';\r\nimport AnaglyphMaterial from './gfx/shaders/AnaglyphMaterial';\r\nimport VolumeMaterial from './gfx/shaders/VolumeMaterial';\r\nimport ViewInterpolator from './gfx/ViewInterpolator';\r\nimport EventDispatcher from './utils/EventDispatcher';\r\nimport logger from './utils/logger';\r\nimport Cookies from './utils/Cookies';\r\nimport capabilities from './gfx/capabilities';\r\nimport WebVRPoC from './gfx/vr/WebVRPoC';\r\nimport vertexScreenQuadShader from './gfx/shaders/ScreenQuad.vert';\r\nimport fragmentScreenQuadFromDistTex from './gfx/shaders/ScreenQuadFromDistortionTex.frag';\r\nimport getTopWindow from './utils/getTopWindow';\r\n\r\nconst {\r\n selectors,\r\n Atom,\r\n Residue,\r\n Chain,\r\n Molecule,\r\n} = chem;\r\n\r\nconst EDIT_MODE = { COMPLEX: 0, COMPONENT: 1, FRAGMENT: 2 };\r\n\r\nconst LOADER_NOT_FOUND = 'Could not find suitable loader for this source';\r\nconst PARSER_NOT_FOUND = 'Could not find suitable parser for this source';\r\n\r\n// Color management changed a lot in threejs 152+ version.\r\n// To keep miew colors we disable the new color management system\r\nTHREE.ColorManagement.enabled = false;\r\n\r\nconst { createElement } = utils;\r\n\r\nfunction updateFogRange(fog, center, radius) {\r\n fog.near = center - radius * settings.now.fogNearFactor;\r\n fog.far = center + radius * settings.now.fogFarFactor;\r\n}\r\n\r\nfunction removeExtension(fileName) {\r\n const dot = fileName.lastIndexOf('.');\r\n if (dot >= 0) {\r\n fileName = fileName.substr(0, dot);\r\n }\r\n return fileName;\r\n}\r\n\r\nfunction hasValidResidues(complex) {\r\n let hasValidRes = false;\r\n complex.forEachComponent((component) => {\r\n component.forEachResidue((residue) => {\r\n if (residue._isValid) {\r\n hasValidRes = true;\r\n }\r\n });\r\n });\r\n return hasValidRes;\r\n}\r\n\r\nfunction reportProgress(log, action, percent) {\r\n const TOTAL_PERCENT = 100;\r\n if (percent !== undefined) {\r\n log.debug(`${action}... ${Math.floor(percent * TOTAL_PERCENT)}%`);\r\n } else {\r\n log.debug(`${action}...`);\r\n }\r\n}\r\n\r\nfunction chooseFogColor() {\r\n return settings.now.fogColorEnable ? settings.now.fogColor : settings.now.bg.color;\r\n}\r\n\r\n// ////////////////////////////////////////////////////////////////////////////\r\n\r\n/**\r\n * Main 3D Molecular Viewer class.\r\n *\r\n * @param {object} opts - Viewer options.\r\n * @param {HTMLElement=} opts.container - DOM element that serves as a viewer container.\r\n * @param {object=} opts.settings - An object with properties to override default settings.\r\n * @param {string=} opts.settingsCookie='settings' - The name of the cookie to save current settings to.\r\n * @param {string=} opts.cookiePath='/' - The path option for cookies. Defaults to root.\r\n *\r\n * @exports Miew\r\n * @constructor\r\n */\r\nfunction Miew(opts) {\r\n EventDispatcher.call(this);\r\n this._opts = _.merge({\r\n settingsCookie: 'settings',\r\n cookiePath: '/',\r\n }, opts);\r\n /** @type {?object} */\r\n this._gfx = null;\r\n /** @type {ViewInterpolator} */\r\n this._interpolator = new ViewInterpolator();\r\n /** @type {HTMLElement} */\r\n this._container = (opts && opts.container)\r\n || document.getElementById('miew-container')\r\n || _.head(document.getElementsByClassName('miew-container'))\r\n || document.body;\r\n /** @type {HTMLElement} */\r\n this._containerRoot = this._container;\r\n\r\n /** @type {boolean} */\r\n this._running = false;\r\n /** @type {boolean} */\r\n this._halting = false;\r\n /** @type {boolean} */\r\n this._building = false;\r\n /** @type {boolean} */\r\n this._needRender = true;\r\n /** @type {boolean} */\r\n this._hotKeysEnabled = true;\r\n\r\n /** @type {Settings} */\r\n this.settings = settings;\r\n const log = logger;\r\n log.console = DEBUG;\r\n log.level = DEBUG ? 'debug' : 'info';\r\n /**\r\n * @type {Logger}\r\n * @example\r\n * miew.logger.addEventListener('message', function _onLogMessage(evt) {\r\n * console.log(evt.message);\r\n * });\r\n */\r\n this.logger = log;\r\n\r\n this._cookies = new Cookies(this);\r\n this.restoreSettings();\r\n if (opts && opts.settings) {\r\n this.settings.set(opts.settings);\r\n }\r\n\r\n /** @type {?Spinner} */\r\n this._spinner = null;\r\n /** @type {JobHandle[]} */\r\n this._loading = [];\r\n /** @type {?number}\r\n * @deprecated until Animation system refactoring\r\n */\r\n this._animInterval = null;\r\n\r\n /** @type {object} */\r\n this._visuals = {};\r\n /** @type {?string} */\r\n this._curVisualName = null;\r\n\r\n /** @type {array} */\r\n this._objects = [];\r\n\r\n /** @type {object} */\r\n this._sourceWindow = null;\r\n\r\n this.reset();\r\n\r\n if (this._repr) {\r\n log.debug(`Selected ${this._repr.mode.name} mode with ${this._repr.colorer.name} colorer.`);\r\n }\r\n\r\n const self = this;\r\n Miew.registeredPlugins.forEach((plugin) => {\r\n plugin.call(self);\r\n });\r\n\r\n this._initOnSettingsChanged();\r\n}\r\n\r\nMiew.prototype = Object.create(EventDispatcher.prototype);\r\nMiew.prototype.constructor = Miew;\r\n\r\nMiew.prototype.getMaxRepresentationCount = function () {\r\n return ComplexVisual.NUM_REPRESENTATION_BITS;\r\n};\r\n\r\n/**\r\n * Replace viewer container contents with a DOM element.\r\n * @param {HTMLElement} container - parent container.\r\n * @param {HTMLElement} element - DOM element to show.\r\n * @private\r\n */\r\nfunction _setContainerContents(container, element) {\r\n const parent = container;\r\n while (parent.firstChild) {\r\n parent.removeChild(parent.firstChild);\r\n }\r\n parent.appendChild(element);\r\n}\r\n\r\n/**\r\n * Update Shadow Camera target position and frustum.\r\n * @private\r\n */\r\nMiew.prototype._updateShadowCamera = (function () {\r\n const shadowMatrix = new THREE.Matrix4();\r\n const direction = new THREE.Vector3();\r\n const OBB = { center: new THREE.Vector3(), halfSize: new THREE.Vector3() };\r\n\r\n return function () {\r\n this._gfx.scene.updateMatrixWorld();\r\n for (let i = 0; i < this._gfx.scene.children.length; i++) {\r\n if (this._gfx.scene.children[i].type === 'DirectionalLight') {\r\n const light = this._gfx.scene.children[i];\r\n shadowMatrix.copy(light.shadow.camera.matrixWorldInverse);\r\n this.getOBB(shadowMatrix, OBB);\r\n\r\n direction.subVectors(light.target.position, light.position);\r\n light.position.subVectors(OBB.center, direction);\r\n light.target.position.copy(OBB.center);\r\n\r\n light.shadow.bias = 0.09;\r\n light.shadow.camera.bottom = -OBB.halfSize.y;\r\n light.shadow.camera.top = OBB.halfSize.y;\r\n light.shadow.camera.right = OBB.halfSize.x;\r\n light.shadow.camera.left = -OBB.halfSize.x;\r\n light.shadow.camera.near = direction.length() - OBB.halfSize.z;\r\n light.shadow.camera.far = direction.length() + OBB.halfSize.z;\r\n\r\n light.shadow.camera.updateProjectionMatrix();\r\n }\r\n }\r\n };\r\n}());\r\n\r\n/**\r\n * Initialize the viewer.\r\n * @returns {boolean} true on success.\r\n * @throws Forwards exception raised during initialization.\r\n * @see Miew#term\r\n */\r\nMiew.prototype.init = function () {\r\n const container = this._container;\r\n const elem = utils.createElement('div', { class: 'miew-canvas' });\r\n _setContainerContents(container, elem);\r\n this._container = elem;\r\n\r\n const frag = document.createDocumentFragment();\r\n frag.appendChild(this._msgMode = createElement(\r\n 'div',\r\n { class: 'mode-message overlay' },\r\n createElement('p', {}, 'COMPONENT EDIT MODE'),\r\n ));\r\n frag.appendChild(this._msgAtomInfo = createElement(\r\n 'div',\r\n { class: 'atom-info overlay' },\r\n createElement('p', {}, ''),\r\n ));\r\n container.appendChild(frag);\r\n\r\n if (this._gfx !== null) { // block double init\r\n return true;\r\n }\r\n\r\n const self = this;\r\n this._showMessage('Viewer is being initialized...');\r\n try {\r\n this._initGfx();\r\n\r\n this._initListeners();\r\n this._spinner = new Spinner({\r\n lines: 13,\r\n length: 28,\r\n width: 14,\r\n radius: 42,\r\n color: '#fff',\r\n zIndex: 700,\r\n });\r\n\r\n const target = getTopWindow();\r\n target.addEventListener('keydown', (event) => {\r\n self._onKeyDown(event);\r\n });\r\n\r\n target.addEventListener('keyup', (event) => {\r\n self._onKeyUp(event);\r\n });\r\n\r\n this._objectControls = new ObjectControls(\r\n this._gfx.root,\r\n this._gfx.pivot,\r\n this._gfx.camera,\r\n this._gfx.renderer.domElement,\r\n () => self._getAltObj(),\r\n );\r\n this._objectControls.addEventListener('change', (e) => {\r\n if (settings.now.shadow.on) {\r\n self._updateShadowCamera();\r\n }\r\n // route rotate, zoom, translate and translatePivot events to the external API\r\n switch (e.action) {\r\n case 'rotate':\r\n self.dispatchEvent({ type: 'rotate', quaternion: e.quaternion });\r\n break;\r\n case 'zoom':\r\n self.dispatchEvent({ type: 'zoom', factor: e.factor });\r\n break;\r\n default:\r\n self.dispatchEvent({ type: e.action });\r\n }\r\n self.dispatchEvent({ type: 'transform' });\r\n self._needRender = true;\r\n });\r\n\r\n const gfx = this._gfx;\r\n this._picker = new Picker(gfx.root, gfx.camera, gfx.renderer.domElement);\r\n this._picker.addEventListener('newpick', (event) => {\r\n self._onPick(event);\r\n });\r\n this._picker.addEventListener('dblclick', (event) => {\r\n self.center(event);\r\n });\r\n } catch (error) {\r\n if (error.name === 'TypeError' && error.message === 'Cannot read property \\'getExtension\\' of null') {\r\n this._showMessage('Could not create WebGL context.');\r\n } else if (error.message.search(/webgl/i) > 1) {\r\n this._showMessage(error.message);\r\n } else {\r\n this._showMessage('Viewer initialization failed.');\r\n throw error;\r\n }\r\n return false;\r\n }\r\n\r\n // automatically load default file\r\n const file = this._opts && this._opts.load;\r\n if (file) {\r\n const type = this._opts && this._opts.type;\r\n this.load(file, { fileType: type, keepRepsInfo: true });\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Terminate the viewer completely.\r\n * @see Miew#init\r\n */\r\nMiew.prototype.term = function () {\r\n this._showMessage('Viewer has been terminated.');\r\n this._loading.forEach((job) => {\r\n job.cancel();\r\n });\r\n this._loading.length = 0;\r\n this.halt();\r\n this._gfx = null;\r\n};\r\n\r\n/**\r\n * Display message inside the viewer container, hiding WebGL canvas.\r\n * @param {string} msg - Message to show.\r\n * @private\r\n */\r\nMiew.prototype._showMessage = function (msg) {\r\n const element = document.createElement('div');\r\n element.setAttribute('class', 'miew-message');\r\n element.appendChild(document.createElement('p')).appendChild(document.createTextNode(msg));\r\n _setContainerContents(this._container, element);\r\n};\r\n\r\n/**\r\n * Display WebGL canvas inside the viewer container, hiding any message shown.\r\n * @private\r\n */\r\nMiew.prototype._showCanvas = function () {\r\n _setContainerContents(this._container, this._gfx.renderer.domElement);\r\n};\r\n\r\nMiew.prototype._requestAnimationFrame = function (callback) {\r\n const { xr } = this._gfx.renderer;\r\n if (xr && xr.enabled) {\r\n this._gfx.renderer.setAnimationLoop(callback);\r\n return;\r\n }\r\n requestAnimationFrame(callback);\r\n};\r\n\r\n/**\r\n * Initialize WebGL and set 3D scene up.\r\n * @private\r\n */\r\nMiew.prototype._initGfx = function () {\r\n const gfx = {\r\n width: this._container.clientWidth,\r\n height: this._container.clientHeight,\r\n };\r\n\r\n const webGLOptions = { preserveDrawingBuffer: true, alpha: true, premultipliedAlpha: false };\r\n if (settings.now.antialias) {\r\n webGLOptions.antialias = true;\r\n }\r\n\r\n gfx.renderer2d = new CSS2DRenderer();\r\n\r\n gfx.renderer = new THREE.WebGLRenderer(webGLOptions);\r\n gfx.renderer.shadowMap.enabled = settings.now.shadow.on;\r\n gfx.renderer.shadowMap.autoUpdate = false;\r\n gfx.renderer.shadowMap.type = THREE.PCFShadowMap;\r\n capabilities.init(gfx.renderer);\r\n\r\n gfx.renderer.autoClear = false;\r\n gfx.renderer.setPixelRatio(window.devicePixelRatio);\r\n gfx.renderer.setSize(gfx.width, gfx.height);\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.clearColor();\r\n\r\n gfx.renderer2d.setSize(gfx.width, gfx.height);\r\n\r\n gfx.camera = new THREE.PerspectiveCamera(\r\n settings.now.camFov,\r\n gfx.width / gfx.height,\r\n settings.now.camNear,\r\n settings.now.camFar,\r\n );\r\n gfx.camera.setMinimalFov(settings.now.camFov);\r\n gfx.camera.position.z = settings.now.camDistance;\r\n gfx.camera.updateProjectionMatrix();\r\n gfx.camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n gfx.camera.layers.enable(gfxutils.LAYERS.VOLUME);\r\n gfx.camera.layers.enable(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n\r\n gfx.stereoCam = new THREE.StereoCamera();\r\n\r\n gfx.scene = new THREE.Scene();\r\n\r\n const color = chooseFogColor();\r\n gfx.scene.fog = new THREE.Fog(color, settings.now.camNear, settings.now.camFar);\r\n\r\n gfx.root = new gfxutils.RCGroup();\r\n gfx.scene.add(gfx.root);\r\n\r\n gfx.pivot = new gfxutils.RCGroup();\r\n gfx.root.add(gfx.pivot);\r\n\r\n gfx.selectionScene = new THREE.Scene();\r\n gfx.selectionRoot = new THREE.Group();\r\n gfx.selectionRoot.matrixAutoUpdate = false;\r\n gfx.selectionScene.add(gfx.selectionRoot);\r\n\r\n gfx.selectionPivot = new THREE.Group();\r\n gfx.selectionPivot.matrixAutoUpdate = false;\r\n gfx.selectionRoot.add(gfx.selectionPivot);\r\n\r\n const light12 = new THREE.DirectionalLight(0xffffff, 0.45);\r\n light12.position.set(0, 0.414, 1);\r\n light12.layers.enable(gfxutils.LAYERS.TRANSPARENT);\r\n light12.castShadow = true;\r\n light12.shadow.bias = 0.09;\r\n light12.shadow.radius = settings.now.shadow.radius;\r\n light12.shadow.camera.layers.set(gfxutils.LAYERS.SHADOWMAP);\r\n\r\n const pixelRatio = gfx.renderer.getPixelRatio();\r\n const shadowMapSize = Math.max(gfx.width, gfx.height) * pixelRatio;\r\n light12.shadow.mapSize.width = shadowMapSize;\r\n light12.shadow.mapSize.height = shadowMapSize;\r\n light12.target.position.set(0.0, 0.0, 0.0);\r\n gfx.scene.add(light12);\r\n gfx.scene.add(light12.target);\r\n\r\n const light3 = new THREE.AmbientLight(0x666666);\r\n light3.layers.enable(gfxutils.LAYERS.TRANSPARENT);\r\n gfx.scene.add(light3);\r\n\r\n // add axes\r\n gfx.axes = new Axes(gfx.root, gfx.camera);\r\n const deviceWidth = gfx.width * pixelRatio;\r\n const deviceHeight = gfx.height * pixelRatio;\r\n\r\n gfx.offscreenBuf = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat, depthBuffer: true,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf.depthTexture = new THREE.DepthTexture();\r\n gfx.offscreenBuf.depthTexture.type = THREE.UnsignedShortType;\r\n\r\n gfx.offscreenBuf2 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf3 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf4 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.volBFTex = gfx.offscreenBuf3;\r\n gfx.volFFTex = gfx.offscreenBuf4;\r\n gfx.volWFFTex = gfx.offscreenBuf;\r\n\r\n // use float textures for volume rendering (WebGL2 core feature)\r\n gfx.offscreenBuf5 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf6 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.offscreenBuf7 = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter,\r\n magFilter: THREE.LinearFilter,\r\n format: THREE.RGBAFormat,\r\n type: THREE.FloatType,\r\n depthBuffer: true,\r\n },\r\n );\r\n\r\n gfx.volBFTex = gfx.offscreenBuf5;\r\n gfx.volFFTex = gfx.offscreenBuf6;\r\n gfx.volWFFTex = gfx.offscreenBuf7;\r\n\r\n gfx.stereoBufL = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n gfx.stereoBufR = new THREE.WebGLRenderTarget(\r\n deviceWidth,\r\n deviceHeight,\r\n {\r\n minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, depthBuffer: false,\r\n },\r\n );\r\n\r\n this._gfx = gfx;\r\n this._showCanvas();\r\n\r\n this._embedWebXR(settings.now.stereo === 'WEBVR');\r\n\r\n this._container.appendChild(gfx.renderer2d.getElement());\r\n\r\n // add FPS counter\r\n const stats = new Stats();\r\n stats.domElement.style.position = 'absolute';\r\n stats.domElement.style.right = '0';\r\n stats.domElement.style.bottom = '0';\r\n this._container.appendChild(stats.domElement);\r\n this._fps = stats;\r\n this._fps.show(settings.now.fps);\r\n};\r\n\r\n/**\r\n * Setup event listeners.\r\n * @private\r\n */\r\nMiew.prototype._initListeners = function () {\r\n const self = this;\r\n window.addEventListener('resize', () => {\r\n self._onResize();\r\n });\r\n};\r\n\r\n/**\r\n * Try to add numbers to the base name to make it unique among visuals\r\n * @private\r\n */\r\nMiew.prototype._makeUniqueVisualName = function (baseName) {\r\n if (!baseName) {\r\n return Math.random().toString();\r\n }\r\n\r\n let name = baseName;\r\n let suffix = 1;\r\n while (this._visuals.hasOwnProperty(name)) {\r\n name = `${baseName} (${suffix.toString()})`;\r\n suffix++;\r\n }\r\n\r\n return name;\r\n};\r\n\r\n/**\r\n * Add visual to the viewer\r\n * @private\r\n */\r\nMiew.prototype._addVisual = function (visual) {\r\n if (!visual) {\r\n return null;\r\n }\r\n\r\n // change visual name in order to make it unique\r\n const name = this._makeUniqueVisualName(visual.name);\r\n visual.name = name;\r\n\r\n this._visuals[name] = visual;\r\n this._gfx.pivot.add(visual);\r\n if (visual.getSelectionGeo) {\r\n this._gfx.selectionPivot.add(visual.getSelectionGeo());\r\n }\r\n\r\n return name;\r\n};\r\n\r\n/**\r\n * Remove visual from the viewer\r\n * @private\r\n */\r\nMiew.prototype._removeVisual = function (visual) {\r\n let name = '';\r\n let obj = null;\r\n if (visual instanceof Visual) {\r\n ({ name } = visual);\r\n obj = visual;\r\n } else if (typeof visual === 'string') {\r\n name = visual;\r\n obj = this._visuals[name];\r\n }\r\n\r\n if (!obj || !this._visuals.hasOwnProperty(name) || this._visuals[name] !== obj) {\r\n return;\r\n }\r\n\r\n if (name === this._curVisualName) {\r\n this._curVisualName = undefined;\r\n }\r\n\r\n delete this._visuals[name];\r\n obj.release(); // removes nodes from scene\r\n\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Call specified function for each Visual\r\n * @private\r\n */\r\nMiew.prototype._forEachVisual = function (callback) {\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)) {\r\n callback(this._visuals[name]);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Release (destroy) all visuals in the scene\r\n * @private\r\n */\r\nMiew.prototype._releaseAllVisuals = function () {\r\n if (!this._gfx || !this._gfx.pivot) {\r\n return;\r\n }\r\n\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)) {\r\n this._visuals[name].release();\r\n }\r\n }\r\n\r\n this._visuals = {};\r\n};\r\n\r\n/**\r\n * Call specified function for each ComplexVisual\r\n * @private\r\n */\r\nMiew.prototype._forEachComplexVisual = function (callback) {\r\n if (!this._gfx || !this._gfx.pivot) {\r\n return;\r\n }\r\n\r\n for (const name in this._visuals) {\r\n if (this._visuals.hasOwnProperty(name)\r\n && this._visuals[name] instanceof ComplexVisual) {\r\n callback(this._visuals[name]);\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Returns ComplexVisual with specified name, or current (if not found), or any, or null\r\n * @private\r\n */\r\nMiew.prototype._getComplexVisual = function (name) {\r\n name = name || this._curVisualName;\r\n let any = null;\r\n let named = null;\r\n this._forEachComplexVisual((visual) => {\r\n any = visual;\r\n if (visual.name === name) {\r\n named = visual;\r\n }\r\n });\r\n return named || any;\r\n};\r\n\r\n/**\r\n * Returns first found VolumeVisual (no more than one should be present actually)\r\n * @private\r\n */\r\nMiew.prototype._getVolumeVisual = function () {\r\n let any = null;\r\n this._forEachVisual((visual) => {\r\n if (visual instanceof VolumeVisual) {\r\n any = visual;\r\n }\r\n });\r\n return any;\r\n};\r\n\r\n/**\r\n * Returns ComplexVisual corresponding to specified complex\r\n * @private\r\n */\r\nMiew.prototype._getVisualForComplex = function (complex) {\r\n if (!complex) {\r\n return null;\r\n }\r\n\r\n let found = null;\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getComplex() === complex) {\r\n found = visual;\r\n }\r\n });\r\n return found;\r\n};\r\n\r\n/*\r\n * Get a list of names of visuals currently shown by the viewer\r\n */\r\nMiew.prototype.getVisuals = function () {\r\n return Object.keys(this._visuals);\r\n};\r\n\r\n/*\r\n * Get complex visuals count\r\n */\r\nMiew.prototype.getComplexVisualsCount = function () {\r\n let count = 0;\r\n this._forEachComplexVisual(() => count++);\r\n return count;\r\n};\r\n\r\n/*\r\n * Get current visual\r\n */\r\nMiew.prototype.getCurrentVisual = function () {\r\n return this._curVisualName;\r\n};\r\n\r\n/*\r\n * Set current visual.\r\n * All further operations will be performed on this visual (complex) if not stated otherwise.\r\n */\r\nMiew.prototype.setCurrentVisual = function (name) {\r\n if (!this._visuals[name]) {\r\n return;\r\n }\r\n\r\n this._curVisualName = name;\r\n};\r\n\r\n/**\r\n * Run the viewer, start processing update/render frames periodically.\r\n * Has no effect if already running.\r\n * @see Miew#halt\r\n */\r\nMiew.prototype.run = function () {\r\n if (!this._running) {\r\n this._running = true;\r\n if (this._halting) {\r\n this._halting = false;\r\n return;\r\n }\r\n\r\n this._objectControls.enable(true);\r\n this._interpolator.resume();\r\n\r\n this._requestAnimationFrame(() => this._onTick());\r\n }\r\n};\r\n\r\n/**\r\n * Request the viewer to stop.\r\n * Will be processed during the next frame.\r\n * @see Miew#run\r\n */\r\nMiew.prototype.halt = function () {\r\n if (this._running) {\r\n this._discardComponentEdit();\r\n this._discardFragmentEdit();\r\n this._objectControls.enable(false);\r\n this._interpolator.pause();\r\n this._halting = true;\r\n }\r\n};\r\n\r\n/**\r\n * Request the viewer to start / stop responsing\r\n * on hot keys.\r\n * @param enabled - start (true) or stop (false) response on hot keys.\r\n */\r\nMiew.prototype.enableHotKeys = function (enabled) {\r\n this._hotKeysEnabled = enabled;\r\n this._objectControls.enableHotkeys(enabled);\r\n};\r\n\r\n/**\r\n * Callback which processes window resize.\r\n * @private\r\n */\r\nMiew.prototype._onResize = function () {\r\n const gfx = this._gfx;\r\n if (!gfx) {\r\n return;\r\n }\r\n\r\n this._needRender = true;\r\n\r\n gfx.width = this._container.clientWidth;\r\n gfx.height = this._container.clientHeight;\r\n\r\n gfx.camera.aspect = gfx.width / gfx.height;\r\n gfx.camera.setMinimalFov(settings.now.camFov);\r\n gfx.camera.updateProjectionMatrix();\r\n\r\n gfx.renderer.setSize(gfx.width, gfx.height);\r\n gfx.renderer2d.setSize(gfx.width, gfx.height);\r\n\r\n this.dispatchEvent({ type: 'resize' });\r\n};\r\n\r\nMiew.prototype._resizeOffscreenBuffers = function (width, height, stereo) {\r\n const gfx = this._gfx;\r\n stereo = stereo || 'NONE';\r\n const isAnaglyph = (stereo === 'NONE' || stereo === 'ANAGLYPH');\r\n const multi = isAnaglyph ? 1 : 0.5;\r\n gfx.offscreenBuf.setSize(multi * width, height);\r\n gfx.offscreenBuf2.setSize(multi * width, height);\r\n gfx.offscreenBuf3.setSize(multi * width, height);\r\n gfx.offscreenBuf4.setSize(multi * width, height);\r\n if (gfx.offscreenBuf5) {\r\n gfx.offscreenBuf5.setSize(multi * width, height);\r\n }\r\n if (gfx.offscreenBuf6) {\r\n gfx.offscreenBuf6.setSize(multi * width, height);\r\n }\r\n if (gfx.offscreenBuf7) {\r\n gfx.offscreenBuf7.setSize(multi * width, height);\r\n }\r\n if (isAnaglyph) {\r\n gfx.stereoBufL.setSize(width, height);\r\n gfx.stereoBufR.setSize(width, height);\r\n }\r\n};\r\n\r\n/**\r\n * Callback which processes update/render frames.\r\n * @private\r\n */\r\nMiew.prototype._onTick = function () {\r\n if (this._halting) {\r\n this._running = false;\r\n this._halting = false;\r\n return;\r\n }\r\n\r\n this._fps.update();\r\n\r\n this._requestAnimationFrame(() => this._onTick());\r\n\r\n this._onUpdate();\r\n if (this._needRender) {\r\n this._onRender();\r\n this._needRender = !settings.now.suspendRender || settings.now.stereo === 'WEBVR';\r\n }\r\n};\r\n\r\nMiew.prototype._getBSphereRadius = function () {\r\n // calculate radius that would include all visuals\r\n let radius = 0;\r\n this._forEachVisual((visual) => {\r\n radius = Math.max(radius, visual.getBoundaries().boundingSphere.radius);\r\n });\r\n return radius * this._objectControls.getScale();\r\n};\r\n\r\n/**\r\n * Calculate bounding box that would include all visuals and being axis aligned in world defined by\r\n * transformation matrix: matrix\r\n * @param {Matrix4} matrix - transformation matrix.\r\n * @param {object} OBB - calculating bounding box.\r\n * @param {Vector3} OBB.center - OBB center.\r\n * @param {Vector3} OBB.halfSize - half magnitude of OBB sizes.\r\n */\r\nMiew.prototype.getOBB = (function () {\r\n const _bSphereForOneVisual = new THREE.Sphere();\r\n const _bBoxForOneVisual = new THREE.Box3();\r\n const _bBox = new THREE.Box3();\r\n\r\n const _invMatrix = new THREE.Matrix4();\r\n\r\n const _points = [\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n new THREE.Vector3(),\r\n ];\r\n\r\n return function (matrix, OBB) {\r\n _bBox.makeEmpty();\r\n\r\n this._forEachVisual((visual) => {\r\n _bSphereForOneVisual.copy(visual.getBoundaries().boundingSphere);\r\n _bSphereForOneVisual.applyMatrix4(visual.matrixWorld).applyMatrix4(matrix);\r\n _bSphereForOneVisual.getBoundingBox(_bBoxForOneVisual);\r\n _bBox.union(_bBoxForOneVisual);\r\n });\r\n _bBox.getCenter(OBB.center);\r\n\r\n _invMatrix.copy(matrix).invert();\r\n OBB.center.applyMatrix4(_invMatrix);\r\n\r\n const { min } = _bBox;\r\n const { max } = _bBox;\r\n _points[0].set(min.x, min.y, min.z); // 000\r\n _points[1].set(max.x, min.y, min.z); // 100\r\n _points[2].set(min.x, max.y, min.z); // 010\r\n _points[3].set(min.x, min.y, max.z); // 001\r\n for (let i = 0, l = _points.length; i < l; i++) {\r\n _points[i].applyMatrix4(_invMatrix);\r\n }\r\n\r\n OBB.halfSize.set(\r\n Math.abs(_points[0].x - _points[1].x),\r\n Math.abs(_points[0].y - _points[2].y),\r\n Math.abs(_points[0].z - _points[3].z),\r\n ).multiplyScalar(0.5);\r\n };\r\n}());\r\n\r\nMiew.prototype._updateFog = function () {\r\n const gfx = this._gfx;\r\n\r\n if (settings.now.fog) {\r\n if (typeof gfx.scene.fog === 'undefined' || gfx.scene.fog === null) {\r\n const color = chooseFogColor();\r\n gfx.scene.fog = new THREE.Fog(color);\r\n this._setUberMaterialValues({ fog: settings.now.fog });\r\n }\r\n updateFogRange(gfx.scene.fog, gfx.camera.position.z, this._getBSphereRadius());\r\n } else if (gfx.scene.fog) {\r\n gfx.scene.fog = undefined;\r\n this._setUberMaterialValues({ fog: settings.now.fog });\r\n }\r\n};\r\n\r\nMiew.prototype._onUpdate = function () {\r\n if (this.isScriptingCommandAvailable !== undefined && this.isScriptingCommandAvailable() && !this._building) {\r\n this.callNextCmd();\r\n }\r\n\r\n this._objectControls.update();\r\n\r\n this._forEachComplexVisual((visual) => {\r\n visual.getComplex().update();\r\n });\r\n\r\n if (settings.now.autobuild && !this._loading.length && !this._building && this._needRebuild()) {\r\n this.rebuild();\r\n }\r\n\r\n if (!this._loading.length && !this._building && !this._needRebuild()) {\r\n this._updateView();\r\n }\r\n\r\n this._updateFog();\r\n\r\n if (this._gfx.renderer.xr.enabled) {\r\n this.webVR.updateMoleculeScale();\r\n }\r\n};\r\n\r\nMiew.prototype._onRender = function () {\r\n const gfx = this._gfx;\r\n\r\n // update all matrices\r\n gfx.scene.updateMatrixWorld();\r\n gfx.camera.updateMatrixWorld();\r\n\r\n this._clipPlaneUpdateValue(this._getBSphereRadius());\r\n this._fogFarUpdateValue();\r\n\r\n gfx.renderer.setRenderTarget(null);\r\n gfx.renderer.clear();\r\n\r\n this._renderFrame(settings.now.stereo);\r\n};\r\n\r\nMiew.prototype._renderFrame = (function () {\r\n const _anaglyphMat = new AnaglyphMaterial();\r\n const _size = new THREE.Vector2();\r\n\r\n return function (stereo) {\r\n const gfx = this._gfx;\r\n const { renderer } = gfx;\r\n\r\n renderer.getSize(_size);\r\n\r\n if (stereo !== 'NONE') {\r\n gfx.camera.focus = gfx.camera.position.z; // set focus to the center of the object\r\n gfx.stereoCam.aspect = 1.0;\r\n\r\n // in anaglyph mode we render full-size image for each eye\r\n // while in other stereo modes only half-size (two images on the screen)\r\n if (stereo === 'ANAGLYPH') {\r\n gfx.stereoCam.update(gfx.camera);\r\n } else {\r\n gfx.stereoCam.updateHalfSized(gfx.camera, settings.now.camFov);\r\n }\r\n }\r\n\r\n // resize offscreen buffers to match the target\r\n const pixelRatio = gfx.renderer.getPixelRatio();\r\n this._resizeOffscreenBuffers(_size.width * pixelRatio, _size.height * pixelRatio, stereo);\r\n\r\n this._renderShadowMap();\r\n\r\n switch (stereo) {\r\n case 'WEBVR':\r\n case 'NONE':\r\n this._renderScene(gfx.camera, false);\r\n break;\r\n case 'SIMPLE':\r\n case 'DISTORTED':\r\n renderer.setScissorTest(true);\r\n\r\n renderer.setScissor(0, 0, _size.width / 2, _size.height);\r\n renderer.setViewport(0, 0, _size.width / 2, _size.height);\r\n this._renderScene(this._gfx.stereoCam.cameraL, stereo === 'DISTORTED');\r\n\r\n renderer.setScissor(_size.width / 2, 0, _size.width / 2, _size.height);\r\n renderer.setViewport(_size.width / 2, 0, _size.width / 2, _size.height);\r\n this._renderScene(this._gfx.stereoCam.cameraR, stereo === 'DISTORTED');\r\n\r\n renderer.setScissorTest(false);\r\n break;\r\n case 'ANAGLYPH':\r\n this._renderScene(this._gfx.stereoCam.cameraL, false, gfx.stereoBufL);\r\n this._renderScene(this._gfx.stereoCam.cameraR, false, gfx.stereoBufR);\r\n renderer.setRenderTarget(null);\r\n _anaglyphMat.uniforms.srcL.value = gfx.stereoBufL.texture;\r\n _anaglyphMat.uniforms.srcR.value = gfx.stereoBufR.texture;\r\n gfx.renderer.renderScreenQuad(_anaglyphMat);\r\n break;\r\n default:\r\n }\r\n\r\n gfx.renderer2d.render(gfx.scene, gfx.camera);\r\n\r\n if (settings.now.axes && gfx.axes && !gfx.renderer.xr.enabled) {\r\n gfx.axes.render(renderer);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._onBgColorChanged = function () {\r\n const gfx = this._gfx;\r\n const color = chooseFogColor();\r\n if (gfx) {\r\n if (gfx.scene.fog) {\r\n gfx.scene.fog.color.set(color);\r\n }\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._onFogColorChanged = function () {\r\n const gfx = this._gfx;\r\n const color = chooseFogColor();\r\n if (gfx && gfx.scene.fog) {\r\n gfx.scene.fog.color.set(color);\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._setUberMaterialValues = function (values) {\r\n this._gfx.root.traverse((obj) => {\r\n if ((obj instanceof THREE.Mesh || obj instanceof THREE.LineSegments || obj instanceof THREE.Line)\r\n && obj.material instanceof UberMaterial) {\r\n obj.material.setValues(values);\r\n obj.material.needsUpdate = true;\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype._enableMRT = function (on, renderBuffer, textureBuffer) {\r\n const gfx = this._gfx;\r\n const gl = gfx.renderer.getContext();\r\n const { properties } = gfx.renderer;\r\n\r\n if (!on) {\r\n gl.drawBuffers([gl.COLOR_ATTACHMENT0, null]);\r\n return;\r\n }\r\n\r\n // take extra texture from Texture Buffer\r\n gfx.renderer.setRenderTarget(textureBuffer);\r\n const tx8 = properties.get(textureBuffer.texture).__webglTexture;\r\n gl.bindTexture(gl.TEXTURE_2D, tx8);\r\n\r\n // take texture and framebuffer from renderbuffer\r\n gfx.renderer.setRenderTarget(renderBuffer);\r\n const fb = properties.get(renderBuffer).__webglFramebuffer;\r\n const tx = properties.get(renderBuffer.texture).__webglTexture;\r\n\r\n // set framebuffer\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, fb);\r\n fb.width = renderBuffer.width;\r\n fb.height = renderBuffer.height;\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tx, 0);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, tx8, 0);\r\n\r\n // mapping textures (MRT is core feature in WebGL2)\r\n gl.drawBuffers([gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]);\r\n};\r\n\r\nMiew.prototype._renderScene = (function () {\r\n return function (camera, distortion, target) {\r\n distortion = distortion || false;\r\n target = target || null;\r\n\r\n const gfx = this._gfx;\r\n\r\n // render to offscreen buffer\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(target);\r\n gfx.renderer.clear();\r\n if (gfx.renderer.xr.enabled) {\r\n gfx.renderer.render(gfx.scene, camera);\r\n return;\r\n }\r\n\r\n // clean buffer for normals texture\r\n gfx.renderer.setClearColor(0x000000, 0.0);\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf4);\r\n gfx.renderer.clearColor();\r\n\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.clear();\r\n\r\n const bHaveComplexes = (this._getComplexVisual() !== null);\r\n const volumeVisual = this._getVolumeVisual();\r\n const ssao = bHaveComplexes && settings.now.ao;\r\n\r\n if (ssao) {\r\n this._enableMRT(true, gfx.offscreenBuf, gfx.offscreenBuf4);\r\n }\r\n\r\n if (settings.now.transparency === 'prepass') {\r\n this._renderWithPrepassTransparency(camera, gfx.offscreenBuf);\r\n } else if (settings.now.transparency === 'standard') {\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.render(gfx.scene, camera);\r\n }\r\n\r\n if (ssao) {\r\n this._enableMRT(false, null, null);\r\n }\r\n\r\n // when fxaa we should get resulting image in temp off-screen buff2 for further postprocessing with fxaa filter\r\n // otherwise we render to canvas\r\n const outline = bHaveComplexes && settings.now.outline.on;\r\n const fxaa = bHaveComplexes && settings.now.fxaa;\r\n const volume = (volumeVisual !== null) && (volumeVisual.getMesh().material != null);\r\n let dstBuffer = (ssao || outline || volume || fxaa || distortion) ? gfx.offscreenBuf2 : target;\r\n let srcBuffer = gfx.offscreenBuf;\r\n\r\n if (ssao) {\r\n this._performAO(\r\n srcBuffer,\r\n gfx.offscreenBuf4,\r\n gfx.offscreenBuf.depthTexture,\r\n dstBuffer,\r\n gfx.offscreenBuf3,\r\n gfx.offscreenBuf2,\r\n );\r\n if (!fxaa && !distortion && !volume && !outline) {\r\n srcBuffer = dstBuffer;\r\n dstBuffer = target;\r\n gfx.renderer.setRenderTarget(dstBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 1.0);\r\n }\r\n } else {\r\n // just copy color buffer to dst buffer\r\n gfx.renderer.setRenderTarget(dstBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 1.0);\r\n }\r\n\r\n // outline\r\n if (outline) {\r\n srcBuffer = dstBuffer;\r\n dstBuffer = (volume || fxaa || distortion) ? gfx.offscreenBuf3 : target;\r\n if (srcBuffer != null) {\r\n this._renderOutline(camera, gfx.offscreenBuf, srcBuffer, dstBuffer);\r\n }\r\n }\r\n\r\n // render selected part with outline material\r\n this._renderSelection(camera, gfx.offscreenBuf, dstBuffer);\r\n\r\n if (volume) {\r\n // copy current picture to the buffer that retains depth-data of the original molecule render\r\n // so that volume renderer could use depth-test\r\n gfx.renderer.setRenderTarget(gfx.offscreenBuf);\r\n gfx.renderer.renderScreenQuadFromTex(dstBuffer.texture, 1.0);\r\n dstBuffer = gfx.offscreenBuf;\r\n this._renderVolume(volumeVisual, camera, dstBuffer, gfx.volBFTex, gfx.volFFTex, gfx.volWFFTex);\r\n\r\n // if this is the last stage -- copy image to target\r\n if (!fxaa && !distortion) {\r\n gfx.renderer.setRenderTarget(target);\r\n gfx.renderer.renderScreenQuadFromTex(dstBuffer.texture, 1.0);\r\n }\r\n }\r\n\r\n srcBuffer = dstBuffer;\r\n\r\n if (fxaa) {\r\n dstBuffer = distortion ? gfx.offscreenBuf4 : target;\r\n this._performFXAA(srcBuffer, dstBuffer);\r\n srcBuffer = dstBuffer;\r\n }\r\n\r\n if (distortion) {\r\n dstBuffer = target;\r\n this._performDistortion(srcBuffer, dstBuffer, true);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._performDistortion = (function () {\r\n const _scene = new THREE.Scene();\r\n const _camera = new THREE.OrthographicCamera(-1.0, 1.0, 1.0, -1.0, -500, 1000);\r\n\r\n const _material = new THREE.RawShaderMaterial({\r\n uniforms: {\r\n srcTex: { type: 't', value: null },\r\n aberration: { type: 'fv3', value: new THREE.Vector3(1.0) },\r\n },\r\n vertexShader: vertexScreenQuadShader,\r\n fragmentShader: fragmentScreenQuadFromDistTex,\r\n transparent: false,\r\n depthTest: false,\r\n depthWrite: false,\r\n });\r\n\r\n const _geo = gfxutils.buildDistorionMesh(10, 10, settings.now.debug.stereoBarrel);\r\n _scene.add(new meshes.Mesh(_geo, _material));\r\n\r\n return function (srcBuffer, targetBuffer, mesh) {\r\n this._gfx.renderer.setRenderTarget(targetBuffer);\r\n this._gfx.renderer.clear();\r\n\r\n if (mesh) {\r\n _material.uniforms.srcTex.value = srcBuffer.texture;\r\n _material.uniforms.aberration.value.set(0.995, 1.0, 1.01);\r\n this._gfx.renderer.render(_scene, _camera);\r\n } else {\r\n this._gfx.renderer.renderScreenQuadFromTexWithDistortion(srcBuffer, settings.now.debug.stereoBarrel);\r\n }\r\n };\r\n}());\r\n\r\nMiew.prototype._renderOutline = (function () {\r\n const _outlineMaterial = new OutlineMaterial({ depth: true });\r\n\r\n return function (camera, srcDepthBuffer, srcColorBuffer, targetBuffer) {\r\n const self = this;\r\n const gfx = self._gfx;\r\n\r\n // apply Sobel filter -- draw outline\r\n _outlineMaterial.uniforms.srcTex.value = srcColorBuffer.texture;\r\n _outlineMaterial.uniforms.srcDepthTex.value = srcDepthBuffer.depthTexture;\r\n _outlineMaterial.uniforms.srcTexSize.value.set(srcDepthBuffer.width, srcDepthBuffer.height);\r\n _outlineMaterial.uniforms.color.value = new THREE.Color(settings.now.outline.color);\r\n _outlineMaterial.uniforms.threshold.value = settings.now.outline.threshold;\r\n _outlineMaterial.uniforms.thickness.value = new THREE.Vector2(\r\n settings.now.outline.thickness,\r\n settings.now.outline.thickness,\r\n );\r\n\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuad(_outlineMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._renderShadowMap = (function () {\r\n const pars = { minFilter: THREE.NearestFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat };\r\n\r\n return function () {\r\n if (!settings.now.shadow.on) {\r\n return;\r\n }\r\n\r\n const gfx = this._gfx;\r\n const currentRenderTarget = gfx.renderer.getRenderTarget();\r\n const activeCubeFace = gfx.renderer.getActiveCubeFace();\r\n const activeMipmapLevel = gfx.renderer.getActiveMipmapLevel();\r\n\r\n const _state = gfx.renderer.state;\r\n\r\n // Set GL state for depth map.\r\n _state.setBlending(THREE.NoBlending);\r\n _state.buffers.color.setClear(1, 1, 1, 1);\r\n _state.buffers.depth.setTest(true);\r\n _state.setScissorTest(false);\r\n\r\n for (let i = 0; i < gfx.scene.children.length; i++) {\r\n if (gfx.scene.children[i].type === 'DirectionalLight') {\r\n const light = gfx.scene.children[i];\r\n\r\n if (light.shadow.map == null) {\r\n light.shadow.map = new THREE.WebGLRenderTarget(light.shadow.mapSize.width, light.shadow.mapSize.height, pars);\r\n light.shadow.camera.updateProjectionMatrix();\r\n }\r\n light.shadow.updateMatrices(light);\r\n\r\n gfx.renderer.setRenderTarget(light.shadow.map);\r\n gfx.renderer.clear();\r\n\r\n gfx.renderer.render(gfx.scene, light.shadow.camera);\r\n }\r\n }\r\n gfx.renderer.setRenderTarget(currentRenderTarget, activeCubeFace, activeMipmapLevel);\r\n };\r\n}());\r\n\r\n/**\r\n * Check if there is selection which must be rendered or not.\r\n * @private\r\n * @returns {boolean} true on existing selection to render\r\n */\r\nMiew.prototype._hasSelectionToRender = function () {\r\n const selPivot = this._gfx.selectionPivot;\r\n\r\n for (let i = 0; i < selPivot.children.length; i++) {\r\n const selPivotChild = selPivot.children[i];\r\n if (selPivotChild.children.length > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nMiew.prototype._renderSelection = (function () {\r\n const _outlineMaterial = new OutlineMaterial();\r\n\r\n return function (camera, srcBuffer, targetBuffer) {\r\n const self = this;\r\n const gfx = self._gfx;\r\n\r\n // clear offscreen buffer (leave z-buffer intact)\r\n gfx.renderer.setClearColor('black', 0);\r\n\r\n // render selection to offscreen buffer\r\n gfx.renderer.setRenderTarget(srcBuffer);\r\n gfx.renderer.clear(true, false, false);\r\n if (self._hasSelectionToRender()) {\r\n gfx.selectionRoot.matrix = gfx.root.matrix;\r\n gfx.selectionPivot.matrix = gfx.pivot.matrix;\r\n gfx.renderer.render(gfx.selectionScene, camera);\r\n } else {\r\n // just render something to force \"target clear\" operation to finish\r\n gfx.renderer.renderDummyQuad();\r\n }\r\n\r\n // overlay to screen\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuadFromTex(srcBuffer.texture, 0.6);\r\n\r\n // apply Sobel filter -- draw outline\r\n _outlineMaterial.uniforms.srcTex.value = srcBuffer.texture;\r\n _outlineMaterial.uniforms.srcTexSize.value.set(srcBuffer.width, srcBuffer.height);\r\n gfx.renderer.renderScreenQuad(_outlineMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._checkVolumeRenderingSupport = function (renderTarget) {\r\n if (!renderTarget) {\r\n return false;\r\n }\r\n const gfx = this._gfx;\r\n const oldRT = gfx.renderer.getRenderTarget();\r\n\r\n gfx.renderer.setRenderTarget(renderTarget);\r\n const context = gfx.renderer.getContext();\r\n const result = context.checkFramebufferStatus(context.FRAMEBUFFER);\r\n gfx.renderer.setRenderTarget(oldRT);\r\n if (result !== context.FRAMEBUFFER_COMPLETE) {\r\n // floatFrameBufferWarning = ;\r\n this.logger.warn('Device doesn\\'t support electron density rendering');\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\nMiew.prototype._renderVolume = (function () {\r\n const volumeBFMat = new VolumeMaterial.BackFacePosMaterial();\r\n const volumeFFMat = new VolumeMaterial.FrontFacePosMaterial();\r\n const cubeOffsetMat = new THREE.Matrix4().makeTranslation(0.5, 0.5, 0.5);\r\n const world2colorMat = new THREE.Matrix4();\r\n\r\n let volumeRenderingSupported;\r\n\r\n return function (volumeVisual, camera, dstBuf, tmpBuf1, tmpBuf2, tmpBuf3) {\r\n const gfx = this._gfx;\r\n\r\n if (typeof volumeRenderingSupported === 'undefined') {\r\n volumeRenderingSupported = this._checkVolumeRenderingSupport(tmpBuf1);\r\n }\r\n\r\n if (!volumeRenderingSupported) {\r\n return;\r\n }\r\n\r\n const mesh = volumeVisual.getMesh();\r\n\r\n mesh.rebuild(gfx.camera);\r\n\r\n // use main camera to prepare special textures to be used by volumetric rendering\r\n // these textures have the size of the window and are stored in offscreen buffers\r\n gfx.renderer.setClearColor('black', 0);\r\n gfx.renderer.setRenderTarget(tmpBuf1);\r\n gfx.renderer.clear();\r\n gfx.renderer.setRenderTarget(tmpBuf2);\r\n gfx.renderer.clear();\r\n gfx.renderer.setRenderTarget(tmpBuf3);\r\n gfx.renderer.clear();\r\n\r\n gfx.renderer.setRenderTarget(tmpBuf1);\r\n // draw plane with its own material, because it differs slightly from volumeBFMat\r\n camera.layers.set(gfxutils.LAYERS.VOLUME_BFPLANE);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.scene.overrideMaterial = volumeBFMat;\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n gfx.renderer.setRenderTarget(tmpBuf2);\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.scene.overrideMaterial = volumeFFMat;\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n gfx.scene.overrideMaterial = null;\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n\r\n // prepare texture that contains molecule positions\r\n world2colorMat.copy(mesh.matrixWorld).invert();\r\n UberMaterial.prototype.uberOptions.world2colorMatrix.multiplyMatrices(cubeOffsetMat, world2colorMat);\r\n camera.layers.set(gfxutils.LAYERS.COLOR_FROM_POSITION);\r\n gfx.renderer.setRenderTarget(tmpBuf3);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // render volume\r\n const vm = mesh.material;\r\n vm.uniforms._BFRight.value = tmpBuf1.texture;\r\n vm.uniforms._FFRight.value = tmpBuf2.texture;\r\n vm.uniforms._WFFRight.value = tmpBuf3.texture;\r\n camera.layers.set(gfxutils.LAYERS.VOLUME);\r\n gfx.renderer.setRenderTarget(dstBuf);\r\n gfx.renderer.render(gfx.scene, camera);\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n };\r\n}());\r\n\r\n/* Render scene with 'ZPrepass transparency Effect'\r\n * Idea: transparent objects are rendered in two passes. The first one writes result only into depth buffer.\r\n * The second pass reads depth buffer and writes only to color buffer. The method results in\r\n * correct image of front part of the semi-transparent objects, but we can see only front transparent objects\r\n * and opaque objects inside, there is no transparent objects inside.\r\n * Notes: 1. Opaque objects should be rendered strictly before semi-transparent ones.\r\n * 2. Realization doesn't use camera layers because scene traversing is used for material changes and\r\n * we can use it to select needed meshes and don't complicate meshes builders with layers\r\n */\r\nMiew.prototype._renderWithPrepassTransparency = (function () {\r\n return function (camera, targetBuffer) {\r\n const gfx = this._gfx;\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n\r\n // opaque objects\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // transparent objects z prepass\r\n camera.layers.set(gfxutils.LAYERS.PREPASS_TRANSPARENT);\r\n gfx.renderer.getContext().colorMask(false, false, false, false); // don't update color buffer\r\n gfx.renderer.render(gfx.scene, camera);\r\n gfx.renderer.getContext().colorMask(true, true, true, true); // update color buffer\r\n\r\n // transparent objects color pass\r\n camera.layers.set(gfxutils.LAYERS.TRANSPARENT);\r\n gfx.renderer.render(gfx.scene, camera);\r\n\r\n // restore default layer\r\n camera.layers.set(gfxutils.LAYERS.DEFAULT);\r\n };\r\n}());\r\n\r\nMiew.prototype._performFXAA = (function () {\r\n const _fxaaMaterial = new FXAAMaterial();\r\n\r\n return function (srcBuffer, targetBuffer) {\r\n if (typeof srcBuffer === 'undefined' || typeof targetBuffer === 'undefined') {\r\n return;\r\n }\r\n\r\n const gfx = this._gfx;\r\n\r\n // clear canvas\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.clear();\r\n\r\n // do fxaa processing of offscreen buff2\r\n _fxaaMaterial.uniforms.srcTex.value = srcBuffer.texture;\r\n _fxaaMaterial.uniforms.srcTexelSize.value.set(1.0 / srcBuffer.width, 1.0 / srcBuffer.height);\r\n _fxaaMaterial.uniforms.bgColor.value.set(settings.now.bg.color);\r\n\r\n if (_fxaaMaterial.bgTransparent !== settings.now.bg.transparent) {\r\n _fxaaMaterial.setValues({ bgTransparent: settings.now.bg.transparent });\r\n _fxaaMaterial.needsUpdate = true;\r\n }\r\n gfx.renderer.renderScreenQuad(_fxaaMaterial);\r\n };\r\n}());\r\n\r\nMiew.prototype._performAO = (function () {\r\n const _aoMaterial = new AOMaterial();\r\n const _horBlurMaterial = new AOHorBlurMaterial();\r\n const _vertBlurMaterial = new AOVertBlurWithBlendMaterial();\r\n\r\n const _scale = new THREE.Vector3();\r\n return function (srcColorBuffer, normalBuffer, srcDepthTexture, targetBuffer, tempBuffer, tempBuffer1) {\r\n if (!srcColorBuffer || !normalBuffer || !srcDepthTexture || !targetBuffer || !tempBuffer || !tempBuffer1) {\r\n return;\r\n }\r\n const gfx = this._gfx;\r\n const tanHalfFOV = Math.tan(THREE.MathUtils.DEG2RAD * 0.5 * gfx.camera.fov);\r\n\r\n _aoMaterial.uniforms.diffuseTexture.value = srcColorBuffer.texture;\r\n _aoMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n _aoMaterial.uniforms.normalTexture.value = normalBuffer.texture;\r\n _aoMaterial.uniforms.srcTexelSize.value.set(1.0 / srcColorBuffer.width, 1.0 / srcColorBuffer.height);\r\n _aoMaterial.uniforms.camNearFar.value.set(gfx.camera.near, gfx.camera.far);\r\n _aoMaterial.uniforms.projMatrix.value = gfx.camera.projectionMatrix;\r\n _aoMaterial.uniforms.aspectRatio.value = gfx.camera.aspect;\r\n _aoMaterial.uniforms.tanHalfFOV.value = tanHalfFOV;\r\n gfx.root.matrix.extractScale(_scale);\r\n _aoMaterial.uniforms.kernelRadius.value = settings.now.debug.ssaoKernelRadius * _scale.x;\r\n _aoMaterial.uniforms.depthThreshold.value = 2.0 * this._getBSphereRadius(); // diameter\r\n _aoMaterial.uniforms.factor.value = settings.now.debug.ssaoFactor;\r\n // N: should be tempBuffer1 for proper use of buffers (see buffers using outside the function)\r\n gfx.renderer.setRenderTarget(tempBuffer1);\r\n gfx.renderer.renderScreenQuad(_aoMaterial);\r\n\r\n _horBlurMaterial.uniforms.aoMap.value = tempBuffer1.texture;\r\n _horBlurMaterial.uniforms.srcTexelSize.value.set(1.0 / tempBuffer1.width, 1.0 / tempBuffer1.height);\r\n _horBlurMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n gfx.renderer.setRenderTarget(tempBuffer);\r\n gfx.renderer.renderScreenQuad(_horBlurMaterial);\r\n\r\n _vertBlurMaterial.uniforms.aoMap.value = tempBuffer.texture;\r\n _vertBlurMaterial.uniforms.diffuseTexture.value = srcColorBuffer.texture;\r\n _vertBlurMaterial.uniforms.srcTexelSize.value.set(1.0 / tempBuffer.width, 1.0 / tempBuffer.height);\r\n _vertBlurMaterial.uniforms.depthTexture.value = srcDepthTexture;\r\n _vertBlurMaterial.uniforms.projMatrix.value = gfx.camera.projectionMatrix;\r\n _vertBlurMaterial.uniforms.aspectRatio.value = gfx.camera.aspect;\r\n _vertBlurMaterial.uniforms.tanHalfFOV.value = tanHalfFOV;\r\n const { fog } = gfx.scene;\r\n if (fog) {\r\n _vertBlurMaterial.uniforms.fogNearFar.value.set(fog.near, fog.far);\r\n _vertBlurMaterial.uniforms.fogColor.value.set(fog.color.r, fog.color.g, fog.color.b, settings.now.fogAlpha);\r\n }\r\n if ((_vertBlurMaterial.useFog !== settings.now.fog)\r\n || (_vertBlurMaterial.fogTransparent !== settings.now.bg.transparent)) {\r\n _vertBlurMaterial.setValues({ useFog: settings.now.fog, fogTransparent: settings.now.bg.transparent });\r\n _vertBlurMaterial.needsUpdate = true;\r\n }\r\n gfx.renderer.setRenderTarget(targetBuffer);\r\n gfx.renderer.renderScreenQuad(_vertBlurMaterial);\r\n };\r\n}());\r\n\r\n/**\r\n * Reset the viewer, unload molecules.\r\n * @param {boolean=} keepReps - Keep representations while resetting viewer state.\r\n */\r\nMiew.prototype.reset = function (/* keepReps */) {\r\n if (this._picker) {\r\n this._picker.reset();\r\n }\r\n this._lastPick = null;\r\n\r\n this._releaseAllVisuals();\r\n\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this._resetObjects();\r\n\r\n if (this._gfx) {\r\n gfxutils.clearTree(this._gfx.pivot);\r\n this._gfx.renderer2d.reset();\r\n }\r\n\r\n this.setNeedRender();\r\n};\r\n\r\nMiew.prototype._resetScene = function () {\r\n this._objectControls.reset();\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n this.resetReps();\r\n this.resetPivot();\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype.resetView = function () {\r\n // reset controls\r\n if (this._picker) {\r\n this._picker.reset();\r\n }\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._resetScene();\r\n\r\n // reset selection\r\n this._forEachComplexVisual((visual) => {\r\n visual.updateSelectionMask({});\r\n visual.rebuildSelectionGeometry();\r\n });\r\n};\r\n\r\nMiew.prototype._export = function (format) {\r\n const TheExporter = _.head(io.exporters.find({ format }));\r\n if (!TheExporter) {\r\n this.logger.error('Could not find suitable exporter for this source');\r\n return Promise.reject(new Error('Could not find suitable exporter for this source'));\r\n }\r\n this.dispatchEvent({ type: 'exporting' });\r\n\r\n if (this._visuals[this._curVisualName] instanceof ComplexVisual) {\r\n let dataSource = null;\r\n if (TheExporter.SourceClass === ComplexVisual) {\r\n dataSource = this._visuals[this._curVisualName];\r\n } else if (TheExporter.SourceClass === Complex) {\r\n dataSource = this._visuals[this._curVisualName]._complex;\r\n }\r\n const exporter = new TheExporter(dataSource, { miewVersion: Miew.VERSION });\r\n return exporter.export().then((data) => data);\r\n }\r\n if (this._visuals[this._curVisualName] instanceof VolumeVisual) {\r\n return Promise.reject(new Error('Sorry, exporter for volume data not implemented yet'));\r\n }\r\n return Promise.reject(new Error('Unexpected format of data'));\r\n};\r\n\r\nconst rePdbId = /^(?:(pdb|cif|ccp4|dsn6):\\s*)?(\\d[a-z\\d]{3})$/i;\r\nconst rePubchem = /^(?:pc|pubchem):\\s*([a-z]+)$/i;\r\nconst reUrlScheme = /^([a-z][a-z\\d\\-+.]*):/i;\r\n\r\nfunction resolveSourceShortcut(source, opts) {\r\n if (!_.isString(source)) {\r\n return source;\r\n }\r\n\r\n // e.g. \"cif:1CRN\"\r\n const matchesPdbId = rePdbId.exec(source);\r\n if (matchesPdbId) {\r\n let [, format = 'pdb', id] = matchesPdbId;\r\n\r\n format = format.toLowerCase();\r\n id = id.toUpperCase();\r\n\r\n switch (format) {\r\n case 'pdb':\r\n source = `https://files.rcsb.org/download/${id}.pdb`;\r\n break;\r\n case 'cif':\r\n source = `https://files.rcsb.org/download/${id}.cif`;\r\n break;\r\n case 'ccp4':\r\n source = `https://www.ebi.ac.uk/pdbe/coordinates/files/${id.toLowerCase()}.ccp4`;\r\n break;\r\n case 'dsn6':\r\n source = `https://edmaps.rcsb.org/maps/${id.toLowerCase()}_2fofc.dsn6`;\r\n break;\r\n default:\r\n throw new Error('Unexpected data format shortcut');\r\n }\r\n\r\n opts.fileType = format;\r\n opts.fileName = `${id}.${format}`;\r\n opts.sourceType = 'url';\r\n return source;\r\n }\r\n\r\n // e.g. \"pc:aspirin\"\r\n const matchesPubchem = rePubchem.exec(source);\r\n if (matchesPubchem) {\r\n const compound = matchesPubchem[1].toLowerCase();\r\n source = `https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/${compound}/JSON?record_type=3d`;\r\n opts.fileType = 'pubchem';\r\n opts.fileName = `${compound}.json`;\r\n opts.sourceType = 'url';\r\n return source;\r\n }\r\n\r\n // otherwise is should be an URL\r\n if (opts.sourceType === 'url' || opts.sourceType === undefined) {\r\n opts.sourceType = 'url';\r\n\r\n // e.g. \"./data/1CRN.pdb\"\r\n if (!reUrlScheme.test(source)) {\r\n source = utils.resolveURL(source);\r\n }\r\n }\r\n\r\n return source;\r\n}\r\n\r\nfunction updateBinaryMode(opts) {\r\n let { binary } = opts;\r\n\r\n // detect by format\r\n if (opts.fileType !== undefined) {\r\n const TheParser = _.head(io.parsers.find({ format: opts.fileType }));\r\n if (TheParser) {\r\n binary = TheParser.binary || false;\r\n } else {\r\n throw new Error('Could not find suitable parser for this format');\r\n }\r\n }\r\n\r\n // detect by file extension\r\n if (binary === undefined && opts.fileExt !== undefined) {\r\n const TheParser = _.head(io.parsers.find({ ext: opts.fileExt }));\r\n if (TheParser) {\r\n binary = TheParser.binary || false;\r\n }\r\n }\r\n\r\n // temporary workaround for animation\r\n if (opts.fileExt !== undefined && opts.fileExt.toLowerCase() === '.man') {\r\n opts.binary = true;\r\n opts.animation = true; // who cares?\r\n }\r\n\r\n // update if detected\r\n if (binary !== undefined) {\r\n if (opts.binary !== undefined && opts.binary !== binary) {\r\n opts.context.logger.warn('Overriding incorrect binary mode');\r\n }\r\n }\r\n\r\n opts.binary = binary || false;\r\n}\r\n\r\nfunction _fetchData(source, opts, job) {\r\n return new Promise(((resolve) => {\r\n if (job.shouldCancel()) {\r\n throw new Error('Operation cancelled');\r\n }\r\n job.notify({ type: 'fetching' });\r\n\r\n // allow for source shortcuts\r\n source = resolveSourceShortcut(source, opts);\r\n\r\n // detect a proper loader\r\n const TheLoader = _.head(io.loaders.find({ type: opts.sourceType, source }));\r\n if (!TheLoader) {\r\n throw new Error(LOADER_NOT_FOUND);\r\n }\r\n\r\n // split file name\r\n const fileName = opts.fileName || TheLoader.extractName(source);\r\n if (fileName) {\r\n const [name, fileExt] = utils.splitFileName(fileName);\r\n _.defaults(opts, { name, fileExt, fileName });\r\n }\r\n\r\n // should it be text or binary?\r\n updateBinaryMode(opts);\r\n\r\n // FIXME: All new settings retrieved from server are applied after the loading is complete. However, we need some\r\n // flags to alter the loading process itself. Here we apply them in advance. Dirty hack. Kill the server, remove\r\n // all hacks and everybody's happy.\r\n let newOptions = _.get(opts, 'preset.expression');\r\n if (!_.isUndefined(newOptions)) {\r\n newOptions = JSON.parse(newOptions);\r\n if (newOptions && newOptions.settings) {\r\n const keys = ['singleUnit'];\r\n for (let keyIndex = 0, keyCount = keys.length; keyIndex < keyCount; ++keyIndex) {\r\n const key = keys[keyIndex];\r\n const value = _.get(newOptions.settings, key);\r\n if (!_.isUndefined(value)) {\r\n settings.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // create a loader\r\n const loader = new TheLoader(source, opts);\r\n loader.context = opts.context;\r\n job.addEventListener('cancel', () => loader.abort());\r\n\r\n loader.addEventListener('progress', (event) => {\r\n if (event.lengthComputable && event.total > 0) {\r\n reportProgress(loader.logger, 'Fetching', event.loaded / event.total);\r\n } else {\r\n reportProgress(loader.logger, 'Fetching');\r\n }\r\n });\r\n\r\n console.time('fetch');\r\n const promise = loader.load()\r\n .then((data) => {\r\n console.timeEnd('fetch');\r\n opts.context.logger.info('Fetching finished');\r\n job.notify({ type: 'fetchingDone', data });\r\n return data;\r\n })\r\n .catch((error) => {\r\n console.timeEnd('fetch');\r\n opts.context.logger.debug(error.message);\r\n if (error.stack) {\r\n opts.context.logger.debug(error.stack);\r\n }\r\n opts.context.logger.error('Fetching failed');\r\n job.notify({ type: 'fetchingDone', error });\r\n throw error;\r\n });\r\n resolve(promise);\r\n }));\r\n}\r\n\r\nfunction _parseData(data, opts, job) {\r\n if (job.shouldCancel()) {\r\n return Promise.reject(new Error('Operation cancelled'));\r\n }\r\n\r\n job.notify({ type: 'parsing' });\r\n\r\n const TheParser = _.head(io.parsers.find({ format: opts.fileType, ext: opts.fileExt, data }));\r\n if (!TheParser) {\r\n return Promise.reject(new Error('Could not find suitable parser'));\r\n }\r\n\r\n const parser = new TheParser(data, opts);\r\n parser.context = opts.context;\r\n job.addEventListener('cancel', () => parser.abort());\r\n\r\n console.time('parse');\r\n return parser.parse()\r\n .then((dataSet) => {\r\n console.timeEnd('parse');\r\n job.notify({ type: 'parsingDone', data: dataSet });\r\n return dataSet;\r\n })\r\n .catch((error) => {\r\n console.timeEnd('parse');\r\n opts.error = error;\r\n opts.context.logger.debug(error.message);\r\n if (error.stack) {\r\n opts.context.logger.debug(error.stack);\r\n }\r\n opts.context.logger.error('Parsing failed');\r\n job.notify({ type: 'parsingDone', error });\r\n throw error;\r\n });\r\n}\r\n\r\n/**\r\n * Load molecule asynchronously.\r\n * @param {string|File} source - Molecule source to load (e.g. PDB ID, URL or File object).\r\n * @param {object=} opts - Options.\r\n * @param {string=} opts.sourceType - Data source type (e.g. 'url', 'file').\r\n * @param {string=} opts.fileType - Data contents type (e.g. 'pdb', 'cml').\r\n * @param {string=} opts.mdFile - .nc file path.\r\n * @param {boolean=} opts.keepRepsInfo - prevent reset of object and reps information.\r\n * @returns {Promise} name of the visual that was added to the viewer\r\n */\r\nMiew.prototype.load = function (source, opts) {\r\n opts = _.merge({}, opts, {\r\n context: this,\r\n });\r\n\r\n // for a single-file scenario\r\n if (!this.settings.now.use.multiFile) {\r\n // abort all loaders in progress\r\n if (this._loading.length) {\r\n this._loading.forEach((job) => {\r\n job.cancel();\r\n });\r\n this._loading.length = 0;\r\n }\r\n\r\n // reset\r\n if (!opts.animation) { // FIXME: sometimes it is set AFTERWARDS!\r\n this.reset(true);\r\n }\r\n }\r\n\r\n this._interpolator.reset();\r\n\r\n this.dispatchEvent({ type: 'loading', options: opts, source });\r\n\r\n const job = new JobHandle();\r\n this._loading.push(job);\r\n job.addEventListener('notification', (e) => {\r\n this.dispatchEvent(e.slaveEvent);\r\n });\r\n\r\n this._spinner.spin(this._container);\r\n\r\n const onLoadEnd = (anything) => {\r\n const jobIndex = this._loading.indexOf(job);\r\n if (jobIndex !== -1) {\r\n this._loading.splice(jobIndex, 1);\r\n }\r\n this._spinner.stop();\r\n this._refreshTitle();\r\n job.notify({ type: 'loadingDone', anything });\r\n return anything;\r\n };\r\n\r\n return _fetchData(source, opts, job)\r\n .then((data) => _parseData(data, opts, job))\r\n .then((object) => {\r\n const name = this._onLoad(object, opts);\r\n return onLoadEnd(name);\r\n })\r\n .catch((err) => {\r\n this.logger.error('Could not load data');\r\n this.logger.debug(err);\r\n throw onLoadEnd(err);\r\n });\r\n};\r\n\r\n/**\r\n * Unload molecule (delete corresponding visual).\r\n * @param {string=} name - name of the visual\r\n */\r\nMiew.prototype.unload = function (name) {\r\n this._removeVisual(name || this.getCurrentVisual());\r\n this.resetPivot();\r\n if (settings.now.shadow.on) {\r\n this._updateShadowCamera();\r\n }\r\n};\r\n\r\n/**\r\n * Start new animation. Now is broken.\r\n * @param fileData - new data to animate\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._startAnimation = function (fileData) {\r\n this._stopAnimation();\r\n const self = this;\r\n const visual = this._getComplexVisual();\r\n if (visual === null) {\r\n this.logger.error('Unable to start animation - no molecule is loaded.');\r\n return;\r\n }\r\n try {\r\n this._frameInfo = new FrameInfo(\r\n visual.getComplex(),\r\n fileData,\r\n {\r\n onLoadStatusChanged() {\r\n self.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: self._isAnimating,\r\n isLoading: self._frameInfo ? self._frameInfo.isLoading : true,\r\n },\r\n });\r\n },\r\n onError(message) {\r\n self._stopAnimation();\r\n self.logger.error(message);\r\n },\r\n },\r\n );\r\n } catch {\r\n this.logger.error('Animation file does not fit to current complex!');\r\n return;\r\n }\r\n this._continueAnimation();\r\n};\r\n\r\n/**\r\n * Pause current animation. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._pauseAnimation = function () {\r\n if (this._animInterval === null) {\r\n return;\r\n }\r\n this._isAnimating = false;\r\n clearInterval(this._animInterval);\r\n this._animInterval = null;\r\n if (this._frameInfo) {\r\n this.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: this._isAnimating,\r\n isLoading: this._frameInfo.isLoading,\r\n },\r\n });\r\n }\r\n};\r\n\r\n/**\r\n * Continue current animation after pausing. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._continueAnimation = function () {\r\n this._isAnimating = true;\r\n let minFrameTime = 1000 / settings.now.maxfps;\r\n minFrameTime = Number.isNaN(minFrameTime) ? 0 : minFrameTime;\r\n const self = this;\r\n const { pivot } = self._gfx;\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n visual.resetSelectionMask();\r\n visual.rebuildSelectionGeometry();\r\n this._msgAtomInfo.style.opacity = 0.0;\r\n }\r\n this._animInterval = setInterval(() => {\r\n self.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: {\r\n isPlaying: self._isAnimating,\r\n isLoading: self._frameInfo.isLoading,\r\n },\r\n });\r\n if (self._frameInfo.frameIsReady) {\r\n pivot.updateToFrame(self._frameInfo);\r\n self._updateObjsToFrame(self._frameInfo);\r\n self._refreshTitle(` Frame ${self._frameInfo._currFrame} of ${self._frameInfo._framesCount\r\n } time interval - ${self._frameInfo._timeStep}`);\r\n try {\r\n self._frameInfo.nextFrame();\r\n } catch {\r\n self.logger.error('Error during animation');\r\n self._stopAnimation();\r\n return;\r\n }\r\n self._needRender = true;\r\n }\r\n }, minFrameTime);\r\n};\r\n\r\n/**\r\n * Stop current animation. Now is broken.\r\n * @private\r\n * @deprecated until animation system refactoring.\r\n */\r\nMiew.prototype._stopAnimation = function () {\r\n if (this._animInterval === null) {\r\n return;\r\n }\r\n clearInterval(this._animInterval);\r\n this._frameInfo.disableEvents();\r\n this._frameInfo = null;\r\n this._animInterval = null;\r\n this.dispatchEvent({\r\n type: 'mdPlayerStateChanged',\r\n state: null,\r\n });\r\n};\r\n\r\n/**\r\n * Invoked upon successful loading of some data source\r\n * @param {DataSource} dataSource - Data source for visualization (molecular complex or other)\r\n * @param {object} opts - Options.\r\n * @private\r\n */\r\nMiew.prototype._onLoad = function (dataSource, opts) {\r\n const gfx = this._gfx;\r\n let visualName = null;\r\n\r\n if (opts.animation) {\r\n this._refreshTitle();\r\n this._startAnimation(dataSource);\r\n return null;\r\n }\r\n this._stopAnimation();\r\n if (!opts || !opts.keepRepsInfo) {\r\n this._opts.reps = null;\r\n this._opts._objects = null;\r\n }\r\n\r\n if (dataSource.id === 'Complex') {\r\n const complex = dataSource;\r\n\r\n // update title\r\n if (opts.fileName) {\r\n complex.name = complex.name || removeExtension(opts.fileName).toUpperCase();\r\n } else if (opts.amberFileName) {\r\n complex.name = complex.name || removeExtension(opts.amberFileName).toUpperCase();\r\n } else {\r\n complex.name = `Dynamic ${opts.fileType} molecule`;\r\n }\r\n\r\n visualName = this._addVisual(new ComplexVisual(complex.name, complex));\r\n this._curVisualName = visualName;\r\n\r\n const desc = this.info();\r\n this.logger.info(`Parsed ${opts.fileName} (${\r\n desc.atoms} atoms, ${\r\n desc.bonds} bonds, ${\r\n desc.residues} residues, ${\r\n desc.chains} chains).`);\r\n\r\n if (_.isNumber(this._opts.unit)) {\r\n complex.setCurrentUnit(this._opts.unit);\r\n }\r\n\r\n if (opts.preset) {\r\n // ...removed server access...\r\n } else if (settings.now.autoPreset) {\r\n switch (opts.fileType) {\r\n case 'cml':\r\n this.resetReps('small');\r\n break;\r\n case 'pdb':\r\n case 'mmtf':\r\n case 'cif':\r\n if (hasValidResidues(complex)) {\r\n this.resetReps('macro');\r\n } else {\r\n this.resetReps('small');\r\n }\r\n break;\r\n default:\r\n this.resetReps('default');\r\n break;\r\n }\r\n } else {\r\n this.resetReps('default');\r\n }\r\n } else if (dataSource.id === 'Volume') {\r\n this.resetEd();\r\n visualName = this._onLoadEd(dataSource);\r\n }\r\n\r\n gfx.camera.updateProjectionMatrix();\r\n this._updateFog();\r\n\r\n // reset global transform\r\n gfx.root.resetTransform();\r\n this.resetPivot();\r\n\r\n // set scale to fit everything on the screen\r\n this._objectControls.setScale(settings.now.radiusToFit / this._getBSphereRadius());\r\n\r\n this._resetObjects();\r\n\r\n if (settings.now.autoResolution) {\r\n this._tweakResolution();\r\n }\r\n\r\n if (settings.now.shadow.on) {\r\n this._updateShadowCamera();\r\n }\r\n\r\n if (this._opts.view) {\r\n this.view(this._opts.view);\r\n delete this._opts.view;\r\n }\r\n\r\n this._refreshTitle();\r\n\r\n return visualName;\r\n};\r\n\r\nMiew.prototype.resetEd = function () {\r\n if (this._edLoader) {\r\n this._edLoader.abort();\r\n this._edLoader = null;\r\n }\r\n\r\n // free all resources\r\n this._removeVisual(this._getVolumeVisual());\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype.loadEd = function (source) {\r\n this.resetEd();\r\n\r\n const TheLoader = _.head(io.loaders.find({ source }));\r\n if (!TheLoader) {\r\n this.logger.error(LOADER_NOT_FOUND);\r\n return Promise.reject(new Error(LOADER_NOT_FOUND));\r\n }\r\n\r\n const loader = this._edLoader = new TheLoader(source, { binary: true });\r\n loader.context = this;\r\n return loader.load().then((data) => {\r\n const TheParser = _.head(io.parsers.find({ format: 'ccp4' }));\r\n if (!TheParser) {\r\n throw new Error(PARSER_NOT_FOUND);\r\n }\r\n const parser = new TheParser(data);\r\n parser.context = this;\r\n return parser.parse().then((dataSource) => {\r\n this._onLoadEd(dataSource);\r\n });\r\n }).catch((error) => {\r\n this.logger.error('Could not load ED data');\r\n this.logger.debug(error);\r\n });\r\n};\r\n\r\nMiew.prototype._onLoadEd = function (dataSource) {\r\n dataSource.normalize();\r\n\r\n const volumeVisual = new VolumeVisual('volume', dataSource);\r\n volumeVisual.getMesh().layers.set(gfxutils.LAYERS.VOLUME); // volume mesh is not visible to common render\r\n const visualName = this._addVisual(volumeVisual);\r\n\r\n this._needRender = true;\r\n return visualName;\r\n};\r\n\r\nMiew.prototype._needRebuild = function () {\r\n let needsRebuild = false;\r\n this._forEachComplexVisual((visual) => {\r\n needsRebuild = needsRebuild || visual.needsRebuild();\r\n });\r\n return needsRebuild;\r\n};\r\n\r\nMiew.prototype._rebuildObjects = function () {\r\n const self = this;\r\n const gfx = this._gfx;\r\n let i;\r\n let n;\r\n\r\n // remove old object geometry\r\n const toRemove = [];\r\n for (i = 0; i < gfx.pivot.children.length; ++i) {\r\n const child = gfx.pivot.children[i];\r\n if (!(child instanceof Visual)) {\r\n toRemove.push(child);\r\n }\r\n }\r\n for (i = 0; i < toRemove.length; ++i) {\r\n toRemove[i].parent.remove(toRemove[i]);\r\n }\r\n\r\n setTimeout(() => {\r\n const objList = self._objects;\r\n for (i = 0, n = objList.length; i < n; ++i) {\r\n const obj = objList[i];\r\n if (obj.needsRebuild) {\r\n obj.build();\r\n }\r\n if (obj.getGeometry()) {\r\n gfx.pivot.add(obj.getGeometry());\r\n }\r\n }\r\n }, 10);\r\n};\r\n\r\nMiew.prototype.changeUnit = function (unitIdx, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n throw new Error('There is no complex to change!');\r\n }\r\n\r\n function currentUnitInfo() {\r\n const unit = visual ? visual.getComplex().getCurrentUnit() : 0;\r\n const type = unit > 0 ? (`Bio molecule ${unit}`) : 'Asymmetric unit';\r\n return `Current unit: ${unit} (${type})`;\r\n }\r\n\r\n if (unitIdx === undefined) {\r\n return currentUnitInfo();\r\n }\r\n if (_.isString(unitIdx)) {\r\n unitIdx = Math.max(parseInt(unitIdx, 10), 0);\r\n }\r\n if (visual.getComplex().setCurrentUnit(unitIdx)) {\r\n this._resetScene();\r\n this._updateInfoPanel();\r\n }\r\n return currentUnitInfo();\r\n};\r\n\r\n/**\r\n * Start to rebuild geometry asynchronously.\r\n */\r\nMiew.prototype.rebuild = function () {\r\n if (this._building) {\r\n this.logger.warn('Miew.rebuild(): already building!');\r\n return;\r\n }\r\n this._building = true;\r\n\r\n this.dispatchEvent({ type: 'rebuilding' });\r\n\r\n this._rebuildObjects();\r\n\r\n this._gfx.renderer2d.reset();\r\n\r\n const rebuildActions = [];\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.needsRebuild()) {\r\n rebuildActions.push(visual.rebuild().then(() => new Promise(((resolve) => {\r\n visual.rebuildSelectionGeometry();\r\n resolve();\r\n }))));\r\n }\r\n });\r\n\r\n // Start asynchronous rebuild\r\n const self = this;\r\n this._spinner.spin(this._container);\r\n Promise.all(rebuildActions).then(() => {\r\n self._spinner.stop();\r\n\r\n self._needRender = true;\r\n\r\n self._refreshTitle();\r\n this.dispatchEvent({ type: 'buildingDone' });\r\n self._building = false;\r\n });\r\n};\r\n\r\n/** Mark all representations for rebuilding */\r\nMiew.prototype.rebuildAll = function () {\r\n this._forEachComplexVisual((visual) => {\r\n visual.setNeedsRebuild();\r\n });\r\n};\r\n\r\nMiew.prototype._refreshTitle = function (appendix) {\r\n let title;\r\n appendix = appendix === undefined ? '' : appendix;\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n title = visual.getComplex().name;\r\n const rep = visual.repGet(visual.repCurrent());\r\n title += (rep ? ` – ${rep.mode.name} Mode` : '');\r\n } else {\r\n title = Object.keys(this._visuals).length > 0 ? 'Unknown' : 'No Data';\r\n }\r\n title += appendix;\r\n\r\n this.dispatchEvent({ type: 'titleChanged', data: title });\r\n};\r\n\r\nMiew.prototype.setNeedRender = function () {\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._extractRepresentation = function () {\r\n const changed = [];\r\n\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getSelectionCount() === 0) {\r\n return;\r\n }\r\n\r\n const selector = visual.buildSelectorFromMask(1 << visual.getSelectionBit());\r\n const defPreset = settings.now.presets.default;\r\n const res = visual.repAdd({\r\n selector,\r\n mode: defPreset[0].mode.id,\r\n colorer: defPreset[0].colorer.id,\r\n material: defPreset[0].material.id,\r\n });\r\n if (!res) {\r\n if (visual.repCount() === ComplexVisual.NUM_REPRESENTATION_BITS) {\r\n this.logger.warn(`Number of representations is limited to ${ComplexVisual.NUM_REPRESENTATION_BITS}`);\r\n }\r\n return;\r\n }\r\n\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name: visual.name });\r\n visual.repCurrent(res.index);\r\n\r\n changed.push(visual.name);\r\n });\r\n\r\n if (changed.length > 0) {\r\n this.logger.report(`New representation from selection for complexes: ${changed.join(', ')}`);\r\n }\r\n};\r\n\r\n/**\r\n * Change current representation list.\r\n * @param {array} reps - Representation list.\r\n */\r\nMiew.prototype._setReps = function (reps) {\r\n reps = reps || (this._opts && this._opts.reps) || [];\r\n this._forEachComplexVisual((visual) => visual.resetReps(reps));\r\n};\r\n\r\n/**\r\n * Apply existing preset to current scene.\r\n * @param preset\r\n */\r\nMiew.prototype.applyPreset = function (preset) {\r\n const { presets } = settings.now;\r\n const presList = [\r\n preset || settings.defaults.preset,\r\n settings.defaults.preset,\r\n Object.keys(presets)[0],\r\n ];\r\n let reps = null;\r\n for (let i = 0; !reps && i < presList.length; ++i) {\r\n settings.set('preset', presList[i]);\r\n reps = presets[settings.now.preset];\r\n if (!reps) {\r\n this.logger.warn(`Unknown preset \"${settings.now.preset}\"`);\r\n }\r\n }\r\n this._setReps(reps);\r\n};\r\n\r\n/**\r\n * Reset current representation list to initial values.\r\n * @param {string} [preset] - The source preset in case of uninitialized representation list.\r\n */\r\nMiew.prototype.resetReps = function (preset) {\r\n const reps = this._opts && this._opts.reps;\r\n if (reps) {\r\n this._setReps(reps);\r\n } else {\r\n this.applyPreset(preset);\r\n }\r\n};\r\n\r\n/**\r\n * Get number of representations created so far.\r\n * @returns {number} Number of reps.\r\n */\r\nMiew.prototype.repCount = function (name) {\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repCount() : 0;\r\n};\r\n\r\n/**\r\n * Get or set the current representation index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount()}. Defaults to the current one.\r\n * @param {string=} [name] - Complex name. Defaults to the current one.\r\n * @returns {number} The current index.\r\n */\r\nMiew.prototype.repCurrent = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n const newIdx = visual ? visual.repCurrent(index) : -1;\r\n if (index && newIdx !== index) {\r\n this.logger.warn(`Representation ${index} was not found. Current rep remains unchanged.`);\r\n }\r\n return newIdx;\r\n};\r\n\r\n/**\r\n * Get or set representation by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount}(). Defaults to the current one.\r\n * @param {object=} rep - Optional representation description.\r\n * @param {string=} rep.selector - Selector string.\r\n * @param {string=} rep.mode - Mode id.\r\n * @param {string=} rep.colorer - Colorer id.\r\n * @param {string=} rep.material - Material id.\r\n * @returns {?object} Representation description.\r\n */\r\nMiew.prototype.rep = function (index, rep) {\r\n const visual = this._getComplexVisual('');\r\n if (!visual) {\r\n return null;\r\n }\r\n const res = visual.rep(index, rep);\r\n if (res.status === 'created') {\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name: visual.name });\r\n } else if (res.status === 'changed') {\r\n this.dispatchEvent({ type: 'repChanged', index: res.index, name: visual.name });\r\n }\r\n return res.desc;\r\n};\r\n\r\n/**\r\n * Get representation (not just description) by index.\r\n * @param {number=} index - Zero-based index, up to {@link Miew#repCount}(). Defaults to the current one.\r\n * @returns {?object} Representation.\r\n */\r\nMiew.prototype.repGet = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repGet(index) : null;\r\n};\r\n\r\n/**\r\n * Add new representation.\r\n * @param {object=} rep - Representation description.\r\n * @returns {number} Index of the new representation.\r\n */\r\nMiew.prototype.repAdd = function (rep, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return -1;\r\n }\r\n\r\n const res = visual.repAdd(rep);\r\n if (res) {\r\n this.dispatchEvent({ type: 'repAdded', index: res.index, name });\r\n return res.index;\r\n }\r\n return -1;\r\n};\r\n\r\n/**\r\n * Remove representation.\r\n * @param {number=} index - Zero-based representation index.\r\n */\r\nMiew.prototype.repRemove = function (index, name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n visual.repRemove(index);\r\n this.dispatchEvent({ type: 'repRemoved', index, name });\r\n};\r\n\r\n/**\r\n * Hide representation.\r\n * @param {number} index - Zero-based representation index.\r\n * @param {boolean=} hide - Specify false to make rep visible, true to hide (by default).\r\n */\r\nMiew.prototype.repHide = function (index, hide, name) {\r\n this._needRender = true;\r\n const visual = this._getComplexVisual(name);\r\n return visual ? visual.repHide(index, hide) : null;\r\n};\r\n\r\nMiew.prototype._setEditMode = function (mode) {\r\n this._editMode = mode;\r\n\r\n const elem = this._msgMode;\r\n if (elem) {\r\n elem.style.opacity = (mode === EDIT_MODE.COMPLEX) ? 0.0 : 1.0;\r\n\r\n if (mode !== EDIT_MODE.COMPLEX) {\r\n const t = elem.getElementsByTagName('p')[0];\r\n t.innerHTML = (mode === EDIT_MODE.COMPONENT) ? 'COMPONENT EDIT MODE' : 'FRAGMENT EDIT MODE';\r\n }\r\n }\r\n\r\n this.dispatchEvent({ type: 'editModeChanged', data: mode === EDIT_MODE.COMPLEX });\r\n};\r\n\r\nMiew.prototype._enterComponentEditMode = function () {\r\n if (this._editMode !== EDIT_MODE.COMPLEX) {\r\n return;\r\n }\r\n\r\n const editors = [];\r\n this._forEachComplexVisual((visual) => {\r\n const editor = visual.beginComponentEdit();\r\n if (editor) {\r\n editors.push(editor);\r\n }\r\n });\r\n\r\n if (editors.length === 0) {\r\n return;\r\n }\r\n\r\n this._editors = editors;\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- ON');\r\n this._setEditMode(EDIT_MODE.COMPONENT);\r\n this._objectControls.keysTranslateObj(true);\r\n};\r\n\r\nMiew.prototype._applyComponentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.COMPONENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n this._objectControls.keysTranslateObj(false);\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].apply();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- OFF (applied)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._discardComponentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.COMPONENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n this._objectControls.keysTranslateObj(false);\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].discard();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('COMPONENT EDIT MODE -- OFF (discarded)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n\r\n this._needRender = true;\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._enterFragmentEditMode = function () {\r\n if (this._editMode !== EDIT_MODE.COMPLEX) {\r\n return;\r\n }\r\n\r\n const selectedVisuals = [];\r\n this._forEachComplexVisual((visual) => {\r\n if (visual instanceof ComplexVisual\r\n && visual.getSelectionCount() > 0) {\r\n selectedVisuals.push(visual);\r\n }\r\n });\r\n\r\n if (selectedVisuals.length !== 1) {\r\n // either we have no selection or\r\n // we have selected atoms in two or more visuals -- not supported\r\n return;\r\n }\r\n\r\n const editor = selectedVisuals[0].beginFragmentEdit();\r\n if (!editor) {\r\n return;\r\n }\r\n this._editors = [editor];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- ON (single bond)');\r\n this._setEditMode(EDIT_MODE.FRAGMENT);\r\n this._objectControls.allowTranslation(false);\r\n this._objectControls.allowAltObjFreeRotation(editor.isFreeRotationAllowed());\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._applyFragmentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.FRAGMENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].apply();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- OFF (applied)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n\r\n this.rebuildAll();\r\n};\r\n\r\nMiew.prototype._discardFragmentEdit = function () {\r\n if (this._editMode !== EDIT_MODE.FRAGMENT) {\r\n return;\r\n }\r\n\r\n this._objectControls.stop();\r\n\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n this._editors[i].discard();\r\n }\r\n this._editors = [];\r\n\r\n this.logger.info('FRAGMENT EDIT MODE -- OFF (discarded)');\r\n this._setEditMode(EDIT_MODE.COMPLEX);\r\n this._objectControls.allowTranslation(true);\r\n this._objectControls.allowAltObjFreeRotation(true);\r\n\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._onPick = function (event) {\r\n if (!settings.now.picking) {\r\n // picking is disabled\r\n return;\r\n }\r\n\r\n if (this._animInterval !== null) {\r\n // animation playback is on\r\n return;\r\n }\r\n\r\n if (this._editMode === EDIT_MODE.FRAGMENT) {\r\n // prevent picking in fragment edit mode\r\n return;\r\n }\r\n\r\n if (this._objectControls.isEditingAltObj()) {\r\n // prevent picking during component rotation\r\n return;\r\n }\r\n\r\n // update last pick & find complex\r\n let complex = null;\r\n if (event.obj.atom) {\r\n complex = event.obj.atom.residue.getChain().getComplex();\r\n this._lastPick = event.obj.atom;\r\n } else if (event.obj.residue) {\r\n complex = event.obj.residue.getChain().getComplex();\r\n this._lastPick = event.obj.residue;\r\n } else if (event.obj.chain) {\r\n complex = event.obj.chain.getComplex();\r\n this._lastPick = event.obj.chain;\r\n } else if (event.obj.molecule) {\r\n complex = event.obj.molecule.complex;\r\n this._lastPick = event.obj.molecule;\r\n } else {\r\n this._lastPick = null;\r\n }\r\n\r\n function _updateSelection(visual) {\r\n visual.updateSelectionMask(event.obj);\r\n visual.rebuildSelectionGeometry();\r\n }\r\n\r\n // update visual\r\n if (complex) {\r\n const visual = this._getVisualForComplex(complex);\r\n if (visual) {\r\n _updateSelection(visual);\r\n this._needRender = true;\r\n }\r\n } else {\r\n this._forEachComplexVisual(_updateSelection);\r\n this._needRender = true;\r\n }\r\n\r\n this._updateInfoPanel();\r\n this.dispatchEvent(event);\r\n};\r\n\r\nMiew.prototype._onKeyDown = function (event) {\r\n if (!this._running || !this._hotKeysEnabled) {\r\n return;\r\n }\r\n\r\n // editing keys\r\n if (settings.now.editing) {\r\n switch (event.code) {\r\n case 'KeyC':\r\n this._enterComponentEditMode();\r\n break;\r\n case 'KeyF':\r\n this._enterFragmentEditMode();\r\n break;\r\n case 'KeyA':\r\n switch (this._editMode) {\r\n case EDIT_MODE.COMPONENT:\r\n this._applyComponentEdit();\r\n break;\r\n case EDIT_MODE.FRAGMENT:\r\n this._applyFragmentEdit();\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n case 'KeyD':\r\n switch (this._editMode) {\r\n case EDIT_MODE.COMPONENT:\r\n this._discardComponentEdit();\r\n break;\r\n case EDIT_MODE.FRAGMENT:\r\n this._discardFragmentEdit();\r\n break;\r\n default:\r\n break;\r\n }\r\n break;\r\n default:\r\n }\r\n }\r\n\r\n // other keys\r\n switch (event.code) {\r\n case 'NumpadAdd':\r\n if (event.altKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._forEachComplexVisual((visual) => {\r\n visual.expandSelection();\r\n visual.rebuildSelectionGeometry();\r\n });\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n }\r\n break;\r\n case 'NumpadSubtract':\r\n if (event.altKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this._forEachComplexVisual((visual) => {\r\n visual.shrinkSelection();\r\n visual.rebuildSelectionGeometry();\r\n });\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n }\r\n break;\r\n default:\r\n }\r\n};\r\n\r\nMiew.prototype._onKeyUp = function (event) {\r\n if (!this._running || !this._hotKeysEnabled) {\r\n return;\r\n }\r\n\r\n if (event.code === 'KeyX') {\r\n this._extractRepresentation();\r\n }\r\n};\r\n\r\nMiew.prototype._updateInfoPanel = function () {\r\n const info = this._msgAtomInfo.getElementsByTagName('p')[0];\r\n let atom;\r\n let residue;\r\n\r\n let count = 0;\r\n this._forEachComplexVisual((visual) => {\r\n count += visual.getSelectionCount();\r\n });\r\n\r\n while (info.firstChild) {\r\n info.removeChild(info.firstChild);\r\n }\r\n\r\n if (count === 0) {\r\n this._msgAtomInfo.style.opacity = 0.0;\r\n return;\r\n }\r\n\r\n let firstLine = `${String(count)} atom${count !== 1 ? 's' : ''} selected`;\r\n if (this._lastPick !== null) {\r\n firstLine += ', the last pick:';\r\n }\r\n let secondLine = '';\r\n let aName = '';\r\n let coordLine = '';\r\n\r\n if (this._lastPick instanceof Atom) {\r\n atom = this._lastPick;\r\n residue = atom.residue;\r\n\r\n aName = atom.name;\r\n const location = (atom.location !== 32) ? String.fromCharCode(atom.location) : ''; // 32 is code of white-space\r\n secondLine = `${atom.element.fullName} #${atom.serial}${location}: \\\r\n ${residue._chain._name}.${residue._type._name}${residue._sequence}${residue._icode.trim()}.`;\r\n secondLine += aName;\r\n\r\n coordLine = `Coord: (${atom.position.x.toFixed(2).toString()},\\\r\n ${atom.position.y.toFixed(2).toString()},\\\r\n ${atom.position.z.toFixed(2).toString()})`;\r\n } else if (this._lastPick instanceof Residue) {\r\n residue = this._lastPick;\r\n\r\n secondLine = `${residue._type._fullName}: \\\r\n ${residue._chain._name}.${residue._type._name}${residue._sequence}${residue._icode.trim()}`;\r\n } else if (this._lastPick instanceof Chain) {\r\n secondLine = `chain ${this._lastPick._name}`;\r\n } else if (this._lastPick instanceof Molecule) {\r\n secondLine = `molecule ${this._lastPick._name}`;\r\n }\r\n\r\n info.appendChild(document.createTextNode(firstLine));\r\n\r\n if (secondLine !== '') {\r\n info.appendChild(document.createElement('br'));\r\n info.appendChild(document.createTextNode(secondLine));\r\n }\r\n\r\n if (coordLine !== '') {\r\n info.appendChild(document.createElement('br'));\r\n info.appendChild(document.createTextNode(coordLine));\r\n }\r\n\r\n this._msgAtomInfo.style.opacity = 1.0;\r\n};\r\n\r\nMiew.prototype._getAltObj = function () {\r\n if (this._editors) {\r\n let altObj = null;\r\n for (let i = 0; i < this._editors.length; ++i) {\r\n const nextAltObj = this._editors[i].getAltObj();\r\n if (nextAltObj.objects.length > 0) {\r\n if (altObj) {\r\n // we have selected atoms in two or more visuals -- not supported\r\n altObj = null;\r\n break;\r\n }\r\n altObj = nextAltObj;\r\n }\r\n }\r\n if (altObj) {\r\n return altObj;\r\n }\r\n }\r\n\r\n return {\r\n objects: [],\r\n pivot: new THREE.Vector3(0, 0, 0),\r\n };\r\n};\r\n\r\nMiew.prototype.resetPivot = (function () {\r\n const boundingBox = new THREE.Box3();\r\n const center = new THREE.Vector3();\r\n\r\n return function () {\r\n boundingBox.makeEmpty();\r\n this._forEachVisual((visual) => {\r\n boundingBox.union(visual.getBoundaries().boundingBox);\r\n });\r\n\r\n boundingBox.getCenter(center);\r\n this._objectControls.setPivot(center.negate());\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotResidue = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n return function (residue) {\r\n const visual = this._getVisualForComplex(residue.getChain().getComplex());\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n if (residue._controlPoint) {\r\n center.copy(residue._controlPoint);\r\n } else {\r\n let x = 0;\r\n let y = 0;\r\n let z = 0;\r\n const amount = residue._atoms.length;\r\n for (let i = 0; i < amount; ++i) {\r\n const p = residue._atoms[i].position;\r\n x += p.x / amount;\r\n y += p.y / amount;\r\n z += p.z / amount;\r\n }\r\n center.set(x, y, z);\r\n }\r\n center.applyMatrix4(visual.matrix).negate();\r\n this._objectControls.setPivot(center);\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotAtom = (function () {\r\n const center = new THREE.Vector3();\r\n\r\n return function (atom) {\r\n const visual = this._getVisualForComplex(atom.residue.getChain().getComplex());\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n center.copy(atom.position);\r\n center.applyMatrix4(visual.matrix).negate();\r\n this._objectControls.setPivot(center);\r\n this.dispatchEvent({ type: 'transform' });\r\n };\r\n}());\r\n\r\nMiew.prototype.getSelectionCenter = (function () {\r\n const _centerInVisual = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n return function (center, includesAtom, selector) {\r\n center.set(0.0, 0.0, 0.0);\r\n let count = 0;\r\n\r\n this._forEachComplexVisual((visual) => {\r\n if (visual.getSelectionCenter(_centerInVisual, includesAtom, selector || visual.getSelectionBit())) {\r\n center.add(_centerInVisual);\r\n count++;\r\n }\r\n });\r\n if (count === 0) {\r\n return false;\r\n }\r\n center.divideScalar(count);\r\n center.negate();\r\n return true;\r\n };\r\n}());\r\n\r\nMiew.prototype.setPivotSubset = (function () {\r\n const _center = new THREE.Vector3(0.0, 0.0, 0.0);\r\n\r\n function _includesInCurSelection(atom, selectionBit) {\r\n return atom.mask & (1 << selectionBit);\r\n }\r\n\r\n function _includesInSelector(atom, selector) {\r\n return selector.selector.includesAtom(atom);\r\n }\r\n\r\n return function (selector) {\r\n const includesAtom = (selector) ? _includesInSelector : _includesInCurSelection;\r\n\r\n if (this.getSelectionCenter(_center, includesAtom, selector)) {\r\n this._objectControls.setPivot(_center);\r\n this.dispatchEvent({ type: 'transform' });\r\n } else {\r\n this.logger.warn('selection is empty. Center operation not performed');\r\n }\r\n };\r\n}());\r\n\r\n/**\r\n * Makes a screenshot.\r\n * @param {number} [width] - Width of an image. Defaults to the canvas width.\r\n * @param {number} [height] - Height of an image. Defaults to the width (square) or canvas height,\r\n * if width is omitted too.\r\n * @returns {string} Data URL representing the image contents.\r\n */\r\nMiew.prototype.screenshot = function (width, height) {\r\n const gfx = this._gfx;\r\n const deviceWidth = gfx.renderer.domElement.width;\r\n const deviceHeight = gfx.renderer.domElement.height;\r\n\r\n function fov2Tan(fov) {\r\n return Math.tan(THREE.MathUtils.degToRad(0.5 * fov));\r\n }\r\n\r\n function tan2Fov(tan) {\r\n return THREE.MathUtils.radToDeg(Math.atan(tan)) * 2.0;\r\n }\r\n\r\n function getDataURL() {\r\n let dataURL;\r\n const currBrowser = utils.getBrowser();\r\n\r\n if (currBrowser === utils.browserType.SAFARI) {\r\n const canvas = document.createElement('canvas');\r\n const canvasContext = canvas.getContext('2d');\r\n\r\n canvas.width = width === undefined ? deviceWidth : width;\r\n canvas.height = height === undefined ? deviceHeight : height;\r\n\r\n canvasContext.drawImage(gfx.renderer.domElement, 0, 0, canvas.width, canvas.height);\r\n dataURL = canvas.toDataURL('image/png');\r\n } else {\r\n // Copy current canvas to screenshot\r\n dataURL = gfx.renderer.domElement.toDataURL('image/png');\r\n }\r\n return dataURL;\r\n }\r\n height = height || width;\r\n\r\n let screenshotURI;\r\n if ((width === undefined && height === undefined)\r\n || (width === deviceWidth && height === deviceHeight)) {\r\n // renderer.domElement.toDataURL('image/png') returns flipped image in Safari\r\n // It hasn't been resolved yet, but getScreenshotSafari()\r\n // fixes it using an extra canvas.\r\n screenshotURI = getDataURL();\r\n } else {\r\n const originalAspect = gfx.camera.aspect;\r\n const originalFov = gfx.camera.fov;\r\n const originalTanFov2 = fov2Tan(gfx.camera.fov);\r\n\r\n // screenshot should contain the principal area of interest (a centered square touching screen sides)\r\n const areaOfInterestSize = Math.min(gfx.width, gfx.height);\r\n const areaOfInterestTanFov2 = originalTanFov2 * areaOfInterestSize / gfx.height;\r\n\r\n // set appropriate camera aspect & FOV\r\n const shotAspect = width / height;\r\n gfx.renderer.setPixelRatio(1);\r\n gfx.camera.aspect = shotAspect;\r\n gfx.camera.fov = tan2Fov(areaOfInterestTanFov2 / Math.min(shotAspect, 1.0));\r\n gfx.camera.updateProjectionMatrix();\r\n\r\n // resize canvas to the required size of screenshot\r\n gfx.renderer.setDrawingBufferSize(width, height, 1);\r\n\r\n // make screenshot\r\n this._renderFrame(settings.now.stereo);\r\n screenshotURI = getDataURL();\r\n\r\n // restore original camera & canvas proportions\r\n gfx.renderer.setPixelRatio(window.devicePixelRatio);\r\n gfx.camera.aspect = originalAspect;\r\n gfx.camera.fov = originalFov;\r\n gfx.camera.updateProjectionMatrix();\r\n gfx.renderer.setDrawingBufferSize(gfx.width, gfx.height, window.devicePixelRatio);\r\n this._needRender = true;\r\n }\r\n\r\n return screenshotURI;\r\n};\r\n\r\n/**\r\n * Makes screenshot and initiates a download.\r\n * @param {string} [filename] - Name of a file. Default to a 'screenshot-XXXXX.png', where XXXXX is a current\r\n * date/time in seconds.\r\n * @param {number} [width] - Width of an image. Defaults to the canvas width.\r\n * @param {number} [height] - Height of an image. Defaults to the width (square) or canvas height,\r\n * if width is omitted too.\r\n */\r\nMiew.prototype.screenshotSave = function (filename, width, height) {\r\n const uri = this.screenshot(width, height);\r\n utils.shotDownload(uri, filename);\r\n};\r\n\r\nMiew.prototype.save = function (opts) {\r\n this._export(opts.fileType).then((dataString) => {\r\n const filename = this._visuals[this._curVisualName]._complex.name;\r\n utils.download(dataString, filename, opts.fileType);\r\n this._refreshTitle();\r\n this.dispatchEvent({ type: 'exportingDone' });\r\n }).catch((error) => {\r\n this.logger.error('Could not export data');\r\n this.logger.debug(error);\r\n this._refreshTitle();\r\n this.dispatchEvent({ type: 'exportingDone', error });\r\n });\r\n};\r\n\r\nMiew.prototype._tweakResolution = function () {\r\n const maxPerf = [\r\n ['poor', 100],\r\n ['low', 500],\r\n ['medium', 1000],\r\n ['high', 5000],\r\n ['ultra', Number.MAX_VALUE],\r\n ];\r\n\r\n let atomCount = 0;\r\n this._forEachComplexVisual((visual) => {\r\n atomCount += visual.getComplex().getAtomCount();\r\n });\r\n\r\n if (atomCount > 0) {\r\n const performance = this._gfxScore * 10e5 / atomCount;\r\n // set resolution based on estimated performance\r\n for (let i = 0; i < maxPerf.length; ++i) {\r\n if (performance < maxPerf[i][1]) {\r\n this._autoChangeResolution(maxPerf[i][0]);\r\n break;\r\n }\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._autoChangeResolution = function (resolution) {\r\n if (resolution !== settings.now.resolution) {\r\n this.logger.report(`Your rendering resolution was changed to \"${resolution}\" for best performance.`);\r\n }\r\n settings.now.resolution = resolution;\r\n};\r\n\r\n/**\r\n * Save current settings to cookies.\r\n */\r\nMiew.prototype.saveSettings = function () {\r\n this._cookies.setCookie(this._opts.settingsCookie, JSON.stringify(this.settings.getDiffs(true)));\r\n};\r\n\r\n/**\r\n * Load settings from cookies.\r\n */\r\nMiew.prototype.restoreSettings = function () {\r\n try {\r\n const cookie = this._cookies.getCookie(this._opts.settingsCookie);\r\n const diffs = cookie ? JSON.parse(cookie) : {};\r\n this.settings.applyDiffs(diffs, true);\r\n } catch (e) {\r\n this.logger.error(`Cookies parse error: ${e.message}`);\r\n }\r\n};\r\n\r\n/**\r\n * Reset current settings to the defaults.\r\n */\r\nMiew.prototype.resetSettings = function () {\r\n this.settings.reset();\r\n};\r\n\r\n/*\r\n * DANGEROUS and TEMPORARY. The method should change or disappear in future versions.\r\n * @param {string|object} opts - See {@link Miew} constructor.\r\n * @see {@link Miew#set}, {@link Miew#repAdd}, {@link Miew#rep}.\r\n */\r\nMiew.prototype.setOptions = function (opts) {\r\n if (typeof opts === 'string') {\r\n opts = Miew.options.fromAttr(opts);\r\n }\r\n if (opts.reps) {\r\n this._opts.reps = null;\r\n }\r\n _.merge(this._opts, opts);\r\n if (opts.settings) {\r\n this.set(opts.settings);\r\n }\r\n\r\n this._opts._objects = opts._objects;\r\n this._resetObjects();\r\n\r\n if (opts.load) {\r\n this.load(opts.load, { fileType: opts.type });\r\n }\r\n\r\n if (opts.preset) {\r\n settings.now.preset = opts.preset;\r\n }\r\n\r\n if (opts.reps) {\r\n this.resetReps(opts.preset);\r\n }\r\n\r\n if (this._opts.view) {\r\n this.view(this._opts.view);\r\n delete this._opts.view;\r\n }\r\n\r\n const visual = this._getComplexVisual();\r\n if (visual) {\r\n visual.getComplex().resetCurrentUnit();\r\n if (_.isNumber(opts.unit)) {\r\n visual.getComplex().setCurrentUnit(opts.unit);\r\n }\r\n this.resetView();\r\n this.rebuildAll();\r\n }\r\n};\r\n\r\nMiew.prototype.info = function (name) {\r\n const visual = this._getComplexVisual(name);\r\n if (!visual) {\r\n return {};\r\n }\r\n const complex = visual.getComplex();\r\n const { metadata } = complex;\r\n return {\r\n id: metadata.id || complex.name || 'UNKNOWN',\r\n title: (metadata.title && metadata.title.join(' ')) || 'UNKNOWN DATA',\r\n atoms: complex.getAtomCount(),\r\n bonds: complex.getBondCount(),\r\n residues: complex.getResidueCount(),\r\n chains: complex.getChainCount(),\r\n };\r\n};\r\n\r\n/*\r\n * OBJECTS SEGMENT\r\n */\r\n\r\nMiew.prototype.addObject = function (objData, bThrow) {\r\n let Ctor = null;\r\n\r\n if (objData.type === LinesObject.prototype.type) {\r\n Ctor = LinesObject;\r\n }\r\n\r\n if (Ctor === null) {\r\n throw new Error(`Unknown scene object type - ${objData.type}`);\r\n }\r\n\r\n try {\r\n const newObj = new Ctor(objData.params, objData.opts);\r\n this._addSceneObject(newObj);\r\n } catch (error) {\r\n if (!bThrow) {\r\n this.logger.debug(`Error during scene object creation: ${error.message}`);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n this._needRender = true;\r\n};\r\n\r\nMiew.prototype._addSceneObject = function (sceneObject) {\r\n const visual = this._getComplexVisual();\r\n if (sceneObject.build && visual) {\r\n sceneObject.build(visual.getComplex());\r\n this._gfx.pivot.add(sceneObject.getGeometry());\r\n }\r\n const objects = this._objects;\r\n objects[objects.length] = sceneObject;\r\n};\r\n\r\nMiew.prototype._updateObjsToFrame = function (frameData) {\r\n const objs = this._objects;\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n if (objs[i].updateToFrame) {\r\n objs[i].updateToFrame(frameData);\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._resetObjects = function () {\r\n const objs = this._opts._objects;\r\n\r\n this._objects = [];\r\n if (objs) {\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n this.addObject(objs[i], false);\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype.removeObject = function (index) {\r\n const obj = this._objects[index];\r\n if (!obj) {\r\n throw new Error(`Scene object with index ${index} does not exist`);\r\n }\r\n obj.destroy();\r\n this._objects.splice(index, 1);\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Get a string with a URL to reproduce the current scene.\r\n *\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=false] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=false] - when this flag is true, a view information is included\r\n * @returns {string} URL\r\n */\r\nMiew.prototype.getURL = function (opts) {\r\n return options.toURL(this.getState(_.defaults(opts, {\r\n compact: true,\r\n settings: false,\r\n view: false,\r\n })));\r\n};\r\n\r\n/**\r\n * Get a string with a script to reproduce the current scene.\r\n *\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=true] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=true] - when this flag is true, a view information is included\r\n * @returns {string} script\r\n */\r\nMiew.prototype.getScript = function (opts) {\r\n return options.toScript(this.getState(_.defaults(opts, {\r\n compact: true,\r\n settings: true,\r\n view: true,\r\n })));\r\n};\r\n\r\n/*\r\n * Generates object that represents the current state of representations list\r\n * @param {boolean} compareWithDefaults - when this flag is true, reps list is compared (if possible)\r\n * to preset's defaults and only diffs are generated\r\n */\r\nMiew.prototype._compareReps = function (complexVisual, compareWithDefaults) {\r\n const ans = {};\r\n let repCount = 0;\r\n\r\n if (complexVisual) {\r\n repCount = complexVisual.repCount();\r\n }\r\n\r\n const currPreset = settings.defaults.presets[settings.now.preset];\r\n let compare = compareWithDefaults;\r\n if (currPreset === undefined || currPreset.length > repCount) {\r\n compare = false;\r\n ans.preset = 'empty';\r\n } else if (settings.now.preset !== settings.defaults.preset) {\r\n ans.preset = settings.now.preset;\r\n }\r\n\r\n const repsDiff = [];\r\n let emptyReps = true;\r\n for (let i = 0, n = repCount; i < n; ++i) {\r\n repsDiff[i] = complexVisual.repGet(i).compare(compare ? currPreset[i] : null);\r\n if (!_.isEmpty(repsDiff[i])) {\r\n emptyReps = false;\r\n }\r\n }\r\n if (!emptyReps) {\r\n ans.reps = repsDiff;\r\n }\r\n return ans;\r\n};\r\n\r\n/*\r\n * Obtain object that represents current state of miew (might be used as options in constructor).\r\n * @param {boolean} [opts.compact=true] - set this flag to false if you want to include full\r\n * preset information regardless of the differences with settings\r\n * @param {boolean} [opts.settings=false] - when this flag is true, changes in settings are included\r\n * @param {boolean} [opts.view=false] - when this flag is true, a view information is included\r\n * @returns {Object} State object.\r\n */\r\nMiew.prototype.getState = function (opts) {\r\n const state = {};\r\n\r\n opts = _.defaults(opts, {\r\n compact: true,\r\n settings: false,\r\n view: false,\r\n });\r\n\r\n // load\r\n const visual = this._getComplexVisual();\r\n if (visual !== null) {\r\n const complex = visual.getComplex();\r\n const { metadata } = complex;\r\n if (metadata.id) {\r\n const format = metadata.format ? `${metadata.format}:` : '';\r\n state.load = format + metadata.id;\r\n }\r\n const unit = complex.getCurrentUnit();\r\n if (unit !== 1) {\r\n state.unit = unit;\r\n }\r\n }\r\n\r\n // representations\r\n const repsInfo = this._compareReps(visual, opts.compact);\r\n if (repsInfo.preset) {\r\n state.preset = repsInfo.preset;\r\n }\r\n\r\n if (repsInfo.reps) {\r\n state.reps = repsInfo.reps;\r\n }\r\n\r\n // objects\r\n const objects = this._objects;\r\n const objectsState = [];\r\n for (let i = 0, n = objects.length; i < n; ++i) {\r\n objectsState[i] = objects[i].identify();\r\n }\r\n if (objects.length > 0) {\r\n state._objects = objectsState;\r\n }\r\n\r\n // view\r\n if (opts.view) {\r\n state.view = this.view();\r\n }\r\n\r\n // settings\r\n if (opts.settings) {\r\n const diff = this.settings.getDiffs(false);\r\n if (!_.isEmpty(diff)) {\r\n state.settings = diff;\r\n }\r\n }\r\n\r\n return state;\r\n};\r\n\r\n/**\r\n * Get parameter value.\r\n * @param {string} param - Parameter name or path (e.g. 'modes.BS.atom').\r\n * @param {*=} value - Default value.\r\n * @returns {*} Parameter value.\r\n */\r\nMiew.prototype.get = function (param, value) {\r\n return settings.get(param, value);\r\n};\r\n\r\nMiew.prototype._clipPlaneUpdateValue = function (radius) {\r\n const clipPlaneValue = Math.max(\r\n this._gfx.camera.position.z - radius * settings.now.draft.clipPlaneFactor,\r\n settings.now.camNear,\r\n );\r\n\r\n const opts = { clipPlaneValue };\r\n this._forEachComplexVisual((visual) => {\r\n visual.setUberOptions(opts);\r\n });\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const obj = this._objects[i];\r\n if (obj._line) {\r\n obj._line.material.setUberOptions(opts);\r\n }\r\n }\r\n if (this._picker !== null) {\r\n this._picker.clipPlaneValue = clipPlaneValue;\r\n }\r\n};\r\n\r\nMiew.prototype._fogFarUpdateValue = function () {\r\n if (this._picker !== null) {\r\n if (this._gfx.scene.fog) {\r\n this._picker.fogFarValue = this._gfx.scene.fog.far;\r\n } else {\r\n this._picker.fogFarValue = undefined;\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._updateShadowmapMeshes = function (process) {\r\n this._forEachComplexVisual((visual) => {\r\n const reprList = visual._reprList;\r\n for (let i = 0, n = reprList.length; i < n; ++i) {\r\n const repr = reprList[i];\r\n process(repr.geo, repr.material);\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype._updateMaterials = function (values, needTraverse = false, process = undefined) {\r\n this._forEachComplexVisual((visual) => visual.setMaterialValues(values, needTraverse, process));\r\n for (let i = 0, n = this._objects.length; i < n; ++i) {\r\n const obj = this._objects[i];\r\n if (obj._line) {\r\n obj._line.material.setValues(values);\r\n obj._line.material.needsUpdate = true;\r\n }\r\n }\r\n};\r\n\r\nMiew.prototype._fogAlphaChanged = function () {\r\n this._forEachComplexVisual((visual) => {\r\n visual.setUberOptions({\r\n fogAlpha: settings.now.fogAlpha,\r\n });\r\n });\r\n};\r\n\r\nMiew.prototype._embedWebXR = function () {\r\n // switch off\r\n if (settings.now.stereo !== 'WEBVR') {\r\n if (this.webVR) {\r\n this.webVR.disable();\r\n }\r\n this.webVR = null;\r\n return;\r\n }\r\n // switch on\r\n if (!this.webVR) {\r\n this.webVR = new WebVRPoC(() => {\r\n this._requestAnimationFrame(() => this._onTick());\r\n this._needRender = true;\r\n this._onResize();\r\n });\r\n }\r\n this.webVR.enable(this._gfx);\r\n};\r\n\r\nMiew.prototype._initOnSettingsChanged = function () {\r\n const on = (props, func) => {\r\n props = _.isArray(props) ? props : [props];\r\n props.forEach((prop) => {\r\n this.settings.addEventListener(`change:${prop}`, func);\r\n });\r\n };\r\n\r\n on('modes.VD.frame', () => {\r\n const volume = this._getVolumeVisual();\r\n if (volume === null) return;\r\n\r\n volume.showFrame(settings.now.modes.VD.frame);\r\n this._needRender = true;\r\n });\r\n\r\n on('modes.VD.isoMode', () => {\r\n const volume = this._getVolumeVisual();\r\n if (volume === null) return;\r\n\r\n volume.getMesh().material.updateDefines();\r\n this._needRender = true;\r\n });\r\n\r\n on('bg.color', () => {\r\n this._onBgColorChanged();\r\n });\r\n\r\n on('ao', () => {\r\n const values = { normalsToGBuffer: settings.now.ao };\r\n this._setUberMaterialValues(values);\r\n });\r\n\r\n on('zSprites', () => {\r\n this.rebuildAll();\r\n });\r\n\r\n on('fogColor', () => {\r\n this._onFogColorChanged();\r\n });\r\n\r\n on('fogColorEnable', () => {\r\n this._onFogColorChanged();\r\n });\r\n\r\n on('bg.transparent', (evt) => {\r\n const gfx = this._gfx;\r\n if (gfx) {\r\n gfx.renderer.setClearColor(settings.now.bg.color, Number(!settings.now.bg.transparent));\r\n }\r\n // update materials\r\n this._updateMaterials({ fogTransparent: evt.value });\r\n this.rebuildAll();\r\n });\r\n\r\n on('draft.clipPlane', (evt) => {\r\n // update materials\r\n this._updateMaterials({ clipPlane: evt.value });\r\n this.rebuildAll();\r\n });\r\n\r\n on('shadow.on', (evt) => {\r\n // update materials\r\n const values = { shadowmap: evt.value, shadowmapType: settings.now.shadow.type };\r\n const gfx = this._gfx;\r\n if (gfx) {\r\n gfx.renderer.shadowMap.enabled = Boolean(values.shadowmap);\r\n }\r\n this._updateMaterials(values, true);\r\n if (values.shadowmap) {\r\n this._updateShadowCamera();\r\n this._updateShadowmapMeshes(meshutils.createShadowmapMaterial);\r\n } else {\r\n this._updateShadowmapMeshes(meshutils.removeShadowmapMaterial);\r\n }\r\n this._needRender = true;\r\n });\r\n\r\n on('shadow.type', (evt) => {\r\n // update materials if shadowmap is enable\r\n if (settings.now.shadow.on) {\r\n this._updateMaterials({ shadowmapType: evt.value }, true);\r\n this._needRender = true;\r\n }\r\n });\r\n\r\n on('shadow.radius', (evt) => {\r\n for (let i = 0; i < this._gfx.scene.children.length; i++) {\r\n if (this._gfx.scene.children[i].shadow !== undefined) {\r\n const light = this._gfx.scene.children[i];\r\n light.shadow.radius = evt.value;\r\n this._needRender = true;\r\n }\r\n }\r\n });\r\n\r\n on('fps', () => {\r\n this._fps.show(settings.now.fps);\r\n });\r\n\r\n on(['fog', 'fogNearFactor', 'fogFarFactor'], () => {\r\n this._updateFog();\r\n this._needRender = true;\r\n });\r\n\r\n on('fogAlpha', () => {\r\n const { fogAlpha } = settings.now;\r\n if (fogAlpha < 0 || fogAlpha > 1) {\r\n this.logger.warn('fogAlpha must belong range [0,1]');\r\n }\r\n this._fogAlphaChanged();\r\n this._needRender = true;\r\n });\r\n\r\n on('autoResolution', (evt) => {\r\n if (evt.value && !this._gfxScore) {\r\n this.logger.warn('Benchmarks are missed, autoresolution will not work! '\r\n + 'Autoresolution should be set during miew startup.');\r\n }\r\n });\r\n\r\n on('stereo', () => {\r\n this._embedWebXR(settings.now.stereo === 'WEBVR');\r\n this._needRender = true;\r\n });\r\n\r\n on(['transparency', 'palette'], () => {\r\n this.rebuildAll();\r\n });\r\n\r\n on('resolution', () => {\r\n // update complex visuals\r\n this.rebuildAll();\r\n\r\n // update volume visual\r\n const volume = this._getVolumeVisual();\r\n if (volume) {\r\n volume.getMesh().material.updateDefines();\r\n this._needRender = true;\r\n }\r\n });\r\n\r\n on(['axes', 'fxaa', 'ao',\r\n 'outline.on', 'outline.color', 'outline.threshold', 'outline.thickness'], () => {\r\n this._needRender = true;\r\n });\r\n};\r\n\r\n/**\r\n * Set parameter value.\r\n * @param {string|object} params - Parameter name or path (e.g. 'modes.BS.atom') or even settings object.\r\n * @param {*=} value - Value.\r\n */\r\nMiew.prototype.set = function (params, value) {\r\n settings.set(params, value);\r\n};\r\n\r\n/**\r\n * Select atoms with selection string.\r\n * @param {string} expression - string expression of selection\r\n * @param {boolean=} append - true to append selection atoms to current selection, false to rewrite selection\r\n */\r\nMiew.prototype.select = function (expression, append) {\r\n const visual = this._getComplexVisual();\r\n if (!visual) {\r\n return;\r\n }\r\n\r\n let sel = expression;\r\n if (_.isString(expression)) {\r\n sel = selectors.parse(expression).selector;\r\n }\r\n\r\n visual.select(sel, append);\r\n this._lastPick = null;\r\n\r\n this._updateInfoPanel();\r\n this._needRender = true;\r\n};\r\n\r\nconst VIEW_VERSION = '1';\r\n\r\n/**\r\n * Get or set view info packed into string.\r\n *\r\n * **Note:** view is stored for *left-handed* cs, euler angles are stored in radians and *ZXY-order*,\r\n *\r\n * @param {string=} expression - Optional string encoded the view\r\n */\r\nMiew.prototype.view = function (expression) {\r\n const self = this;\r\n const { pivot } = this._gfx;\r\n let transform = [];\r\n const eulerOrder = 'ZXY';\r\n\r\n function encode() {\r\n const pos = pivot.position;\r\n const scale = self._objectControls.getScale() / settings.now.radiusToFit;\r\n const euler = new THREE.Euler();\r\n euler.setFromQuaternion(self._objectControls.getOrientation(), eulerOrder);\r\n transform = [\r\n pos.x, pos.y, pos.z,\r\n scale,\r\n euler.x, euler.y, euler.z,\r\n ];\r\n return VIEW_VERSION + utils.arrayToBase64(transform, Float32Array);\r\n }\r\n\r\n function decode() {\r\n // backwards compatible: old non-versioned view is the 0th version\r\n if (expression.length === 40) {\r\n expression = `0${expression}`;\r\n }\r\n\r\n const version = expression[0];\r\n transform = utils.arrayFromBase64(expression.substr(1), Float32Array);\r\n\r\n // apply adapter for old versions\r\n if (version !== VIEW_VERSION) {\r\n if (version === '0') {\r\n // cancel radiusToFit included in old views\r\n transform[3] /= 8.0;\r\n } else {\r\n // do nothing\r\n self.logger.warn(`Encoded view version mismatch, stored as ${version} vs ${VIEW_VERSION} expected`);\r\n return;\r\n }\r\n }\r\n\r\n const interpolator = self._interpolator;\r\n const srcView = interpolator.createView();\r\n srcView.position.copy(pivot.position);\r\n srcView.scale = self._objectControls.getScale();\r\n srcView.orientation.copy(self._objectControls.getOrientation());\r\n\r\n const dstView = interpolator.createView();\r\n dstView.position.set(transform[0], transform[1], transform[2]);\r\n\r\n // hack to make preset views work after we moved centering offset to visual nodes\r\n // FIXME should only store main pivot offset in preset\r\n if (self._getComplexVisual()) {\r\n dstView.position.sub(self._getComplexVisual().position);\r\n }\r\n\r\n dstView.scale = transform[3]; // eslint-disable-line prefer-destructuring\r\n dstView.orientation.setFromEuler(new THREE.Euler(transform[4], transform[5], transform[6], eulerOrder));\r\n\r\n interpolator.setup(srcView, dstView);\r\n }\r\n\r\n if (typeof expression === 'undefined') {\r\n return encode();\r\n }\r\n decode();\r\n\r\n return expression;\r\n};\r\n\r\n/*\r\n * Update current view due to viewinterpolator state\r\n */\r\nMiew.prototype._updateView = function () {\r\n const self = this;\r\n const { pivot } = this._gfx;\r\n\r\n const interpolator = this._interpolator;\r\n if (!interpolator.wasStarted()) {\r\n interpolator.start();\r\n }\r\n\r\n if (!interpolator.isMoving()) {\r\n return;\r\n }\r\n\r\n const res = interpolator.getCurrentView();\r\n if (res.success) {\r\n const curr = res.view;\r\n pivot.position.copy(curr.position);\r\n self._objectControls.setScale(curr.scale * settings.now.radiusToFit);\r\n self._objectControls.setOrientation(curr.orientation);\r\n this.dispatchEvent({ type: 'transform' });\r\n self._needRender = true;\r\n }\r\n};\r\n\r\n/**\r\n * Translate object by vector\r\n * @param {number} x - translation value (Ang) along model's X axis\r\n * @param {number} y - translation value (Ang) along model's Y axis\r\n * @param {number} z - translation value (Ang) along model's Z axis\r\n */\r\nMiew.prototype.translate = function (x, y, z) {\r\n this._objectControls.translatePivot(x, y, z);\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Rotate object by Euler angles\r\n * @param {number} x - rotation angle around X axis in radians\r\n * @param {number} y - rotation angle around Y axis in radians\r\n * @param {number} z - rotation angle around Z axis in radians\r\n */\r\nMiew.prototype.rotate = function (x, y, z) {\r\n this._objectControls.rotate(new THREE.Quaternion().setFromEuler(new THREE.Euler(x, y, z, 'XYZ')));\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Scale object by factor\r\n * @param {number} factor - scale multiplier, should greater than zero\r\n */\r\nMiew.prototype.scale = function (factor) {\r\n if (factor <= 0) {\r\n throw new RangeError('Scale should be greater than zero');\r\n }\r\n this._objectControls.scale(factor);\r\n this.dispatchEvent({ type: 'transform' });\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Center view on selection\r\n * @param {empty | subset | string} selector - defines part of molecule which must be centered (\r\n * empty - center on current selection;\r\n * subset - center on picked atom/residue/molecule;\r\n * string - center on atoms correspond to selection string)\r\n */\r\nMiew.prototype.center = function (selector) {\r\n // no arguments - center on current selection;\r\n if (selector === undefined) {\r\n this.setPivotSubset();\r\n this._needRender = true;\r\n return;\r\n }\r\n // subset with atom or residue - center on picked atom/residue;\r\n if (selector.obj !== undefined && ('atom' in selector.obj || 'residue' in selector.obj)) { // from event with selection\r\n if ('atom' in selector.obj) {\r\n this.setPivotAtom(selector.obj.atom);\r\n } else {\r\n this.setPivotResidue(selector.obj.residue);\r\n }\r\n this._needRender = true;\r\n return;\r\n }\r\n // string - center on atoms correspond to selection string\r\n if (selector.obj === undefined && selector !== '') {\r\n const sel = selectors.parse(selector);\r\n if (sel.error === undefined) {\r\n this.setPivotSubset(sel);\r\n this._needRender = true;\r\n return;\r\n }\r\n }\r\n // empty subset or incorrect/empty string - center on all molecule;\r\n this.resetPivot();\r\n this._needRender = true;\r\n};\r\n\r\n/**\r\n * Build selector that contains all atoms within given distance from group of atoms\r\n * @param {Selector} selector - selector describing source group of atoms\r\n * @param {number} radius - distance\r\n * @returns {Selector} selector describing result group of atoms\r\n */\r\nMiew.prototype.within = function (selector, radius) {\r\n const visual = this._getComplexVisual();\r\n if (!visual) {\r\n return selectors.None();\r\n }\r\n\r\n if (selector instanceof String) {\r\n selector = selectors.parse(selector);\r\n }\r\n\r\n const res = visual.within(selector, radius);\r\n if (res) {\r\n visual.rebuildSelectionGeometry();\r\n this._needRender = true;\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Get atom position in 2D canvas coords\r\n * @param {string} fullAtomName - full atom name, like A.38.CG\r\n * @returns {Object} {x, y} or false if atom not found\r\n */\r\nMiew.prototype.projected = function (fullAtomName, complexName) {\r\n const visual = this._getComplexVisual(complexName);\r\n if (!visual) {\r\n return false;\r\n }\r\n\r\n const atom = visual.getComplex().getAtomByFullname(fullAtomName);\r\n if (atom === null) {\r\n return false;\r\n }\r\n\r\n const pos = atom.position.clone();\r\n // we consider atom position to be affected only by common complex transform\r\n // ignoring any transformations that may add during editing\r\n this._gfx.pivot.updateMatrixWorldRecursive();\r\n this._gfx.camera.updateMatrixWorldRecursive();\r\n this._gfx.pivot.localToWorld(pos);\r\n pos.project(this._gfx.camera);\r\n\r\n return {\r\n x: (pos.x + 1.0) * 0.5 * this._gfx.width,\r\n y: (1.0 - pos.y) * 0.5 * this._gfx.height,\r\n };\r\n};\r\n\r\n/**\r\n * Replace secondary structure with calculated one.\r\n *\r\n * DSSP algorithm implementation is used.\r\n *\r\n * Kabsch W, Sander C. 1983. Dictionary of protein secondary structure: pattern recognition of hydrogen-bonded and\r\n * geometrical features. Biopolymers. 22(12):2577-2637. doi:10.1002/bip.360221211.\r\n *\r\n * @param {string=} complexName - complex name\r\n */\r\nMiew.prototype.dssp = function (complexName) {\r\n const visual = this._getComplexVisual(complexName);\r\n if (!visual) {\r\n return;\r\n }\r\n visual.getComplex().dssp();\r\n\r\n // rebuild dependent representations (cartoon or ss-colored)\r\n visual._reprList.forEach((rep) => {\r\n if (rep.mode.id === 'CA' || rep.colorer.id === 'SS') {\r\n rep.needsRebuild = true;\r\n }\r\n });\r\n};\r\n\r\nMiew.prototype.exportCML = function () {\r\n const self = this;\r\n\r\n function extractRotation(m) {\r\n const xAxis = new THREE.Vector3();\r\n const yAxis = new THREE.Vector3();\r\n const zAxis = new THREE.Vector3();\r\n m.extractBasis(xAxis, yAxis, zAxis);\r\n xAxis.normalize();\r\n yAxis.normalize();\r\n zAxis.normalize();\r\n const retMat = new THREE.Matrix4();\r\n retMat.identity();\r\n retMat.makeBasis(xAxis, yAxis, zAxis);\r\n return retMat;\r\n }\r\n\r\n function updateCMLData(complex) {\r\n const { root } = self._gfx;\r\n const mat = extractRotation(root.matrixWorld);\r\n const v4 = new THREE.Vector4(0, 0, 0, 0);\r\n const vCenter = new THREE.Vector4(0, 0, 0, 0);\r\n let xml = null;\r\n let ap = null;\r\n\r\n // update atoms in cml\r\n complex.forEachAtom((atom) => {\r\n if (atom.xmlNodeRef && atom.xmlNodeRef.xmlNode) {\r\n xml = atom.xmlNodeRef.xmlNode;\r\n ap = atom.position;\r\n v4.set(ap.x, ap.y, ap.z, 1.0);\r\n v4.applyMatrix4(mat);\r\n xml.setAttribute('x3', v4.x.toString());\r\n xml.setAttribute('y3', v4.y.toString());\r\n xml.setAttribute('z3', v4.z.toString());\r\n xml.removeAttribute('x2');\r\n xml.removeAttribute('y2');\r\n }\r\n });\r\n // update stereo groups in cml\r\n complex.forEachSGroup((sGroup) => {\r\n if (sGroup.xmlNodeRef && sGroup.xmlNodeRef.xmlNode) {\r\n xml = sGroup.xmlNodeRef.xmlNode;\r\n ap = sGroup.getPosition();\r\n v4.set(ap.x, ap.y, ap.z, 1.0);\r\n const cp = sGroup.getCentralPoint();\r\n if (cp === null) {\r\n v4.applyMatrix4(mat);\r\n } else {\r\n vCenter.set(cp.x, cp.y, cp.z, 0.0);\r\n v4.add(vCenter);\r\n v4.applyMatrix4(mat); // pos in global space\r\n vCenter.set(cp.x, cp.y, cp.z, 1.0);\r\n vCenter.applyMatrix4(mat);\r\n v4.sub(vCenter);\r\n }\r\n xml.setAttribute('x', v4.x.toString());\r\n xml.setAttribute('y', v4.y.toString());\r\n xml.setAttribute('z', v4.z.toString());\r\n }\r\n });\r\n }\r\n\r\n const visual = self._getComplexVisual();\r\n const complex = visual ? visual.getComplex() : null;\r\n if (complex && complex.originalCML) {\r\n updateCMLData(complex);\r\n\r\n // serialize xml structure to string\r\n const oSerializer = new XMLSerializer();\r\n return oSerializer.serializeToString(complex.originalCML);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Reproduce the RCSB PDB Molecule of the Month style by David S. Goodsell\r\n *\r\n * @see http://pdb101.rcsb.org/motm/motm-about\r\n */\r\nMiew.prototype.motm = function () {\r\n settings.set({\r\n fogColorEnable: true,\r\n fogColor: 0x000000,\r\n outline: { on: true, threshold: 0.01 },\r\n bg: { color: 0xffffff },\r\n });\r\n\r\n this._forEachComplexVisual((visual) => {\r\n const rep = [];\r\n const complex = visual.getComplex();\r\n const palette = palettes.get(settings.now.palette);\r\n for (let i = 0; i < complex.getChainCount(); i++) {\r\n const curChainName = complex._chains[i]._name;\r\n const curChainColor = palette.getChainColor(curChainName);\r\n rep[i] = {\r\n selector: `chain ${curChainName}`,\r\n mode: 'VW',\r\n colorer: ['CB', { color: curChainColor, factor: 0.9 }],\r\n material: 'FL',\r\n };\r\n }\r\n visual.resetReps(rep);\r\n });\r\n};\r\n\r\nMiew.prototype.VERSION = (typeof PACKAGE_VERSION !== 'undefined' && PACKAGE_VERSION) || '0.0.0-dev';\r\n\r\n// Uncomment this to get debug trace:\r\n// Miew.prototype.debugTracer = new utils.DebugTracer(Miew.prototype);\r\n\r\n_.assign(Miew, /** @lends Miew */ {\r\n VERSION: Miew.prototype.VERSION,\r\n\r\n registeredPlugins: [],\r\n\r\n // export namespaces // TODO: WIP: refactoring external interface\r\n chem,\r\n io,\r\n modes,\r\n colorers,\r\n materials,\r\n palettes,\r\n options,\r\n settings,\r\n utils,\r\n gfx: {\r\n Representation,\r\n },\r\n\r\n /**\r\n * Third-party libraries packaged together with Miew.\r\n *\r\n * @property {object} lodash - [Lodash](https://lodash.com/), a modern JavaScript utility library delivering\r\n * modularity, performance & extras.\r\n * @property {object} three - [three.js](https://threejs.org/), JavaScript 3D library.\r\n *\r\n * @example\r\n * var _ = Miew.thirdParty.lodash;\r\n * var opts = _.merge({ ... }, Miew.options.fromURL(window.location.search));\r\n * var miew = new Miew(opts);\r\n */\r\n thirdParty: {\r\n lodash: _,\r\n three: THREE,\r\n },\r\n});\r\n\r\nexport default Miew;\r\n","import palettes from '../gfx/palettes';\r\nimport settings from '../settings';\r\n\r\nconst modeIdDesc = {\r\n $help: [\r\n 'Rendering mode shortcut',\r\n ' BS - balls and sticks mode',\r\n ' LN - lines mode',\r\n ' LC - licorice mode',\r\n ' VW - van der waals mode',\r\n ' TR - trace mode',\r\n ' TU - tube mode',\r\n ' CA - cartoon mode',\r\n ' SA - isosurface mode',\r\n ' QS - quick surface mode',\r\n ' SE - solvent excluded mode',\r\n ' TX - text mode',\r\n ],\r\n BS: {\r\n $help: [\r\n ' Balls and sticks',\r\n ' aromrad = #aromatic radius',\r\n ' atom = #atom radius',\r\n ' bond = #bond radius',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' space = #space value\\n',\r\n ],\r\n },\r\n CA: {\r\n $help: [\r\n ' Cartoon',\r\n ' arrow = #arrow size',\r\n ' depth = #depth of surface',\r\n ' heightSegmentsRatio = ',\r\n ' radius = #tube radius',\r\n ' tension = #',\r\n ' width = #secondary width\\n',\r\n ],\r\n },\r\n LN: {\r\n $help: [\r\n ' Lines',\r\n ' atom = #atom radius',\r\n ' chunkarom = ',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' offsarom = \\n',\r\n ],\r\n },\r\n LC: {\r\n $help: [\r\n ' Licorice',\r\n ' aromrad = #aromatic radius',\r\n ' bond = #bond radius',\r\n ' multibond = #use multibond',\r\n ' showarom = #show aromatic',\r\n ' space = #space value\\n',\r\n ],\r\n },\r\n VW: {\r\n $help: [\r\n ' Van der Waals',\r\n ' nothing\\n',\r\n ],\r\n },\r\n TR: {\r\n $help: [\r\n ' Trace',\r\n ' radius = #tube radius\\n',\r\n ],\r\n },\r\n TU: {\r\n $help: [\r\n ' Tube',\r\n ' heightSegmentsRatio = ',\r\n ' radius = #tube radius',\r\n ' tension = \\n',\r\n ],\r\n },\r\n SA: {\r\n $help: [\r\n ' Surface',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n QS: {\r\n $help: [\r\n ' Quick surface',\r\n ' isoValue = ',\r\n ' scale = ',\r\n ' wireframe = ',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n SE: {\r\n $help: [\r\n ' Solvent excluded surface',\r\n ' zClip = #clip z plane\\n',\r\n ],\r\n },\r\n TX: {\r\n $help: [\r\n ' Text mode',\r\n ' template = string that can include \"{{ id }}\"',\r\n ' it will be replaced by value, id can be one of next:',\r\n ' serial, name, type, sequence, residue, chain, hetatm, water\\n',\r\n ' horizontalAlign = {\"left\", \"right\", \"center\"}',\r\n ' verticalAlign = {\"top\", \"bottom\", \"middle\"}',\r\n ' dx = #offset along x',\r\n ' dy = #offset along y',\r\n ' dz = #offset along z',\r\n ' fg = #text color modificator',\r\n ' could be keyword, named color or hex',\r\n ' fg = #back color modificator',\r\n ' could be keyword, named color or hex',\r\n ' showBg = #if set show background',\r\n ' plate under text',\r\n ],\r\n },\r\n};\r\n\r\nconst colorDesc = {\r\n $help: [\r\n 'Coloring mode shortcut',\r\n ' EL - color by element',\r\n ' CH - color by chain',\r\n ' SQ - color by sequence',\r\n ' RT - color by residue type',\r\n ' SS - color by secondary structure',\r\n ' UN - uniform',\r\n ],\r\n UN: {\r\n $help: [\r\n 'Parameters of coloring modes customization',\r\n ' Uniform',\r\n ' color = #RGB->HEX->dec\\n',\r\n ],\r\n color: {\r\n $help: Object.keys(palettes.get(settings.now.palette).namedColors).sort().join('\\n'),\r\n },\r\n },\r\n};\r\n\r\nconst materialDesc = {\r\n $help: [\r\n 'Material shortcut',\r\n ' DF - diffuse',\r\n ' TR - transparent',\r\n ' SF - soft plastic',\r\n ' PL - glossy plastic',\r\n ' ME - metal',\r\n ' GL - glass',\r\n ],\r\n};\r\n\r\nconst addRepDesc = {\r\n $help: [\r\n 'Short (packed) representation description as a set of variables',\r\n ' s=',\r\n ' selector property',\r\n ' m=[!:[,...]]',\r\n ' render mode property',\r\n ' c=[!:[,...]]',\r\n ' color mode property',\r\n ' mt=',\r\n ' material property',\r\n ],\r\n s: {\r\n $help: 'Selection expression string as it is in menu->representations->selection',\r\n },\r\n m: modeIdDesc,\r\n c: colorDesc,\r\n mt: materialDesc,\r\n};\r\n\r\nconst setGetParameterDesc = {\r\n $help: [\r\n 'Parameters of rendering modes customization: modes',\r\n 'Parameters of colorer customization: colorers',\r\n 'Autobuild: autobuild = (|)',\r\n ],\r\n modes: modeIdDesc,\r\n colorers: colorDesc,\r\n};\r\n\r\nconst help = {\r\n $help: [\r\n 'help (| )',\r\n 'You can get detailed information about command options',\r\n ' using \"help cmd.opt.opt.[...]\"\\n',\r\n ' you can use one line comments',\r\n ' everything started from (#|//) will be skipped',\r\n ' Example: >build //some comment\\n',\r\n 'List of available commands:',\r\n ],\r\n reset: {\r\n $help: [\r\n 'Reload current object, delete all representations',\r\n ' Nothing will work until load new object',\r\n ],\r\n },\r\n load: {\r\n $help: [\r\n 'load (||-f [<*.NC FILE URL STRING>])',\r\n ' Load new pdb object from selected source',\r\n ],\r\n PDBID: {\r\n $help: 'pdb id in remote molecule database',\r\n },\r\n URL: {\r\n $help: 'url to source file',\r\n },\r\n f: {\r\n $help: [\r\n 'open file system dialog to fetch local file',\r\n 'optionally you can determine trajectory file',\r\n 'via URL for *.top model',\r\n ],\r\n },\r\n },\r\n clear: {\r\n $help: 'No args. Clear terminal',\r\n },\r\n add: {\r\n $help: [\r\n 'add [] []',\r\n ' Add new item to representation set with',\r\n ' default or params',\r\n ],\r\n REP_NAME: {\r\n $help: 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n },\r\n DESCRIPTION: addRepDesc,\r\n },\r\n rep: {\r\n $help: [\r\n 'rep [|] []',\r\n ' set current representation by name or index',\r\n ' edit current representation by ',\r\n ],\r\n REP_NAME: {\r\n $help: [\r\n 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n 'Must be declared before',\r\n ],\r\n },\r\n REP_INDEX: {\r\n $help: 'Index of available representation',\r\n },\r\n DESCRIPTION: addRepDesc,\r\n },\r\n remove: {\r\n $help: [\r\n 'remove (|)',\r\n 'Remove representation by name or index',\r\n ],\r\n REP_NAME: {\r\n $help: [\r\n 'Identifier string [_,a-z,A-Z,0-9] can not start from digit',\r\n 'Must be declared before',\r\n ],\r\n },\r\n REP_INDEX: {\r\n $help: 'Index of available representation',\r\n },\r\n },\r\n selector: {\r\n $help: [\r\n 'selector ',\r\n ' set selector from EXPRESSION to current representation',\r\n ],\r\n EXPRESSION: {\r\n $help: 'Selection expression string as it is in menu->representations->selection',\r\n },\r\n },\r\n mode: {\r\n $help: [\r\n 'mode [=...]',\r\n ' set rendering mode and apply parameters to current representation',\r\n ],\r\n MODE_ID: modeIdDesc,\r\n },\r\n color: {\r\n $help: [\r\n 'color [=...]',\r\n ' set colorer and apply parameters to current representation',\r\n ],\r\n COLORER_ID: colorDesc,\r\n },\r\n material: {\r\n $help: [\r\n 'material ',\r\n ' set material to current representation',\r\n ],\r\n MATERIAL_ID: materialDesc,\r\n },\r\n build: {\r\n $help: 'build help str',\r\n add: {\r\n $help: 'build.add',\r\n new: {\r\n $help: [\r\n 'add.new',\r\n 'add.new new line 1',\r\n 'add.new new line 2',\r\n 'add.new new line 3',\r\n ],\r\n },\r\n },\r\n del: {\r\n $help: 'build.del',\r\n },\r\n },\r\n list: {\r\n $help: [\r\n 'list [-e|-s||]',\r\n 'Print representations if no args print list of representations',\r\n ' -e expand list and show all representations',\r\n ' -s show all user-registered selectors',\r\n ' | show only current representation',\r\n ],\r\n },\r\n hide: {\r\n $help: [\r\n 'hide (|)',\r\n 'Hide representation referenced in args',\r\n ],\r\n },\r\n show: {\r\n $help: [\r\n 'show (|)',\r\n 'Show representation referenced in args',\r\n ],\r\n },\r\n get: {\r\n $help: [\r\n 'get ',\r\n 'Print value',\r\n ' - path to option use get.PARAMETER to get more info',\r\n ],\r\n PARAMETER: setGetParameterDesc,\r\n },\r\n set: {\r\n $help: [\r\n 'set ',\r\n 'Set with ',\r\n ' - path to option use set.PARAMETER to get more info',\r\n ],\r\n PARAMETER: setGetParameterDesc,\r\n },\r\n set_save: {\r\n $help: [\r\n 'set_save',\r\n 'Save current settings to cookie',\r\n ],\r\n },\r\n set_restore: {\r\n $help: [\r\n 'set_restore',\r\n 'Load and apply settings from cookie',\r\n ],\r\n },\r\n set_reset: {\r\n $help: [\r\n 'set_reset',\r\n 'Reset current settings to the defaults',\r\n ],\r\n },\r\n preset: {\r\n $help: [\r\n 'preset []',\r\n 'Reset current representation or set preset to ',\r\n ],\r\n PRESET: {\r\n $help: [\r\n 'default',\r\n 'wire',\r\n 'small',\r\n 'macro',\r\n ],\r\n },\r\n },\r\n unit: {\r\n $help: [\r\n 'unit []',\r\n 'Change current biological structure view. Zero value means asymmetric unit,',\r\n 'positive values set an assembly with corresponding number.',\r\n 'Being called with no parameters command prints current unit information.',\r\n ],\r\n },\r\n view: {\r\n $help: [\r\n 'view []',\r\n 'Get current encoded view or set if ENCODED_VIEW placed as argument',\r\n ],\r\n ENCODED_VIEW: {\r\n $help: [\r\n 'encoded view matrix string (binary code)',\r\n ],\r\n },\r\n },\r\n rotate: {\r\n $help: [\r\n 'rotate (x|y|z) [] [(x|y|z) []]...',\r\n 'Rotate scene',\r\n ],\r\n },\r\n scale: {\r\n $help: [\r\n 'scale ',\r\n 'Scale scene',\r\n ],\r\n },\r\n select: {\r\n $help: [\r\n 'select [as ]',\r\n 'Select atoms using selector defined in SELECTOR_STRING',\r\n ' and if SELECTOR_NAME is defined register it in viewer',\r\n ' you can use it later as a complex selector',\r\n ],\r\n },\r\n within: {\r\n $help: [\r\n 'within of as ',\r\n 'Build within named selector',\r\n ' DISTANCE ',\r\n ' SELECTOR_STRING ',\r\n ' SELECTOR_NAME ',\r\n ],\r\n },\r\n url: {\r\n $help: [\r\n 'url [-s] [-v]',\r\n 'Report URL encoded scene',\r\n ' if -s set that include settings in the URL',\r\n ' if -v set that include view in the URL',\r\n ],\r\n },\r\n screenshot: {\r\n $help: [\r\n 'screenshot [ []]',\r\n 'Make a screenshot of the scene',\r\n ' WIDTH in pixels',\r\n ' HEIGHT in pixels, equal to WIDTH by default',\r\n ],\r\n },\r\n line: {\r\n $help: [\r\n 'line [=]',\r\n 'Draw dashed line between two specified atoms',\r\n ],\r\n },\r\n removeobj: {\r\n $help: [\r\n 'removeobj ',\r\n 'Remove scene object by its index. Indices could be obtained by command',\r\n ],\r\n },\r\n listobj: {\r\n $help: [\r\n 'listobj',\r\n 'Display the list of all existing scene objects',\r\n ],\r\n },\r\n};\r\n\r\nexport default help;\r\n","import _ from 'lodash';\r\nimport Miew from './Miew';\r\nimport { parser as parsercli } from './utils/MiewCLIParser';\r\nimport clihelp from './utils/MiewCLIHelp';\r\nimport logger from './utils/logger';\r\nimport utils from './utils';\r\n\r\nconst {\r\n chem: { selectors },\r\n modes,\r\n colorers,\r\n materials,\r\n palettes,\r\n options,\r\n settings,\r\n} = Miew;\r\n\r\nfunction None() {\r\n}\r\n\r\nconst NULL = (function () {\r\n const obj = new None();\r\n return function () {\r\n return obj;\r\n };\r\n}());\r\n\r\nclass RepresentationMap {\r\n constructor() {\r\n this.representationMap = {};\r\n this.representationID = {};\r\n }\r\n\r\n get(strId) {\r\n return this.representationMap[strId] || this.representationID[strId] || '';\r\n }\r\n\r\n add(strId, index) {\r\n if (strId === -1) {\r\n return 'Can not create representation: there is no data';\r\n }\r\n\r\n if (index !== undefined) {\r\n if (!this.representationMap.hasOwnProperty(strId)) {\r\n this.representationMap[strId.toString()] = index;\r\n this.representationID[index] = strId.toString();\r\n } else {\r\n return 'This name has already existed, registered without name';\r\n }\r\n }\r\n return `Representation ${strId} successfully added`;\r\n }\r\n\r\n remove(index) {\r\n if (index && this.representationID.hasOwnProperty(index)) {\r\n delete this.representationMap[this.representationID[index]];\r\n delete this.representationID[index];\r\n }\r\n\r\n const sortedKeys = Object.keys(this.representationID).sort();\r\n for (const i in sortedKeys) {\r\n if (sortedKeys.hasOwnProperty(i)) {\r\n const id = sortedKeys[i];\r\n if (id > index) {\r\n this.representationID[id - 1] = this.representationID[id];\r\n this.representationMap[this.representationID[id]] -= 1;\r\n delete this.representationID[id];\r\n }\r\n }\r\n }\r\n }\r\n\r\n clear() {\r\n this.representationMap = {};\r\n this.representationID = {};\r\n }\r\n}\r\n\r\nconst representationsStorage = new RepresentationMap();\r\n\r\nfunction keyRemap(key) {\r\n const keys = {\r\n s: 'selector',\r\n m: 'mode',\r\n c: 'colorer',\r\n mt: 'material',\r\n mode: 'modes',\r\n color: 'colorers',\r\n colorer: 'colorers',\r\n select: 'selector',\r\n material: 'materials',\r\n selector: 'selector',\r\n };\r\n const ans = keys[key];\r\n return ans === undefined ? key : ans;\r\n}\r\n\r\nclass CLIUtils {\r\n list(miew, repMap, key) {\r\n let ret = '';\r\n if (miew && repMap !== undefined) {\r\n if (key === undefined || key === '-e') {\r\n const count = miew.repCount();\r\n\r\n for (let i = 0; i < count; i++) {\r\n ret += this.listRep(miew, repMap, i, key);\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n listRep(miew, repMap, repIndex, key) {\r\n let ret = '';\r\n const rep = miew.repGet(repIndex);\r\n if (!rep) {\r\n logger.warn(`Rep ${repIndex} does not exist!`);\r\n return ret;\r\n }\r\n const index = repIndex;\r\n const repName = repMap.get(index);\r\n\r\n const { mode, colorer } = rep;\r\n const selectionStr = rep.selectorString;\r\n const material = rep.materialPreset;\r\n\r\n ret += `#${index} : ${mode.name}${repName === '' ? '' : `, ${repName}`}\\n`;\r\n\r\n if (key !== undefined) {\r\n ret += ` selection : \"${selectionStr}\"\\n`;\r\n ret += ` mode : (${mode.id}), ${mode.name}\\n`;\r\n ret += ` colorer : (${colorer.id}), ${colorer.name}\\n`;\r\n ret += ` material : (${material.id}), ${material.name}\\n`;\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n listSelector(miew, context) {\r\n let ret = '';\r\n\r\n for (const k in context) {\r\n if (context.hasOwnProperty(k)) {\r\n ret += `${k} : \"${context[k]}\"\\n`;\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n listObjs(miew) {\r\n const objs = miew._objects;\r\n\r\n if (!objs || !Array.isArray(objs) || objs.length === 0) {\r\n return 'There are no objects on the scene';\r\n }\r\n\r\n const strList = [];\r\n for (let i = 0, n = objs.length; i < n; ++i) {\r\n strList[i] = `${i}: ${objs[i].toString()}`;\r\n }\r\n\r\n return strList.join('\\n');\r\n }\r\n\r\n joinHelpStr(helpData) {\r\n if (helpData instanceof Array) {\r\n return helpData.join('\\n');\r\n }\r\n return helpData;\r\n }\r\n\r\n help(path) {\r\n if (_.isUndefined(path)) {\r\n return `${this.joinHelpStr(clihelp.$help)}\\n${_.slice(_.sortBy(_.keys(clihelp)), 1).join(', ')}\\n`;\r\n }\r\n\r\n const helpItem = _.get(clihelp, path);\r\n return _.isUndefined(helpItem) ? this.help() : `${this.joinHelpStr(helpItem.$help)}\\n`;\r\n }\r\n\r\n load(miew, arg) {\r\n if (miew === undefined || arg === undefined || arg === '-f') {\r\n return;\r\n }\r\n miew.awaitWhileCMDisInProcess();\r\n const finish = () => miew.finishAwaitingCMDInProcess();\r\n miew.load(arg).then(finish, finish);\r\n }\r\n\r\n checkArg(key, arg, modificate) {\r\n if (key !== undefined && arg !== undefined) {\r\n if (keyRemap(key) === 'selector') {\r\n const res = selectors.parse(arg);\r\n\r\n if (res.error !== undefined) {\r\n const selExc = { message: res.error };\r\n throw selExc;\r\n }\r\n\r\n if (modificate !== undefined && modificate) {\r\n return res.selector;\r\n }\r\n return arg;\r\n }\r\n\r\n const modificators = {\r\n colorers,\r\n modes,\r\n materials,\r\n };\r\n\r\n let modificator = key;\r\n let temp;\r\n while (modificator !== temp) {\r\n temp = modificator;\r\n modificator = keyRemap(temp);\r\n }\r\n\r\n if (modificators[modificator].get(arg) === undefined) {\r\n const exc = { message: `${arg} is not existed in ${modificator}` };\r\n throw exc;\r\n }\r\n return arg;\r\n }\r\n return NULL;\r\n }\r\n\r\n propagateProp(path, arg) {\r\n if (path !== undefined) {\r\n let argExc = {};\r\n const adapter = options.adapters[typeof _.get(settings.defaults, path)];\r\n if (adapter === undefined) {\r\n const pathExc = { message: `${path} is not existed` };\r\n throw pathExc;\r\n }\r\n\r\n if ((path.endsWith('.color') || path.endsWith('.baseColor')\r\n || path.endsWith('.EL.carbon')) && typeof arg !== 'number') {\r\n arg = palettes.get(settings.now.palette).getNamedColor(arg);\r\n }\r\n\r\n if (path.endsWith('.fg') || path.endsWith('.bg')) {\r\n if (typeof arg !== 'number') {\r\n const val = palettes.get(settings.now.palette).getNamedColor(arg, true);\r\n if (val !== undefined) {\r\n arg = `0x${val.toString(16)}`;\r\n }\r\n } else {\r\n arg = `0x${arg.toString(16)}`;\r\n }\r\n }\r\n\r\n if (path.endsWith('.template')) {\r\n arg = arg.replace(/\\\\n/g, '\\n');// NOSONAR\r\n }\r\n\r\n if (arg !== undefined && adapter(arg) !== arg && adapter(arg) !== (arg > 0)) {\r\n argExc = { message: `${path} must be a \"${typeof _.get(settings.defaults, path)}\"` };\r\n throw argExc;\r\n }\r\n }\r\n return arg;\r\n }\r\n\r\n unquoteString(value) {\r\n return utils.unquoteString(value);\r\n }\r\n}\r\n// repIndexOrRepMap could be RepresentationMap or index\r\n\r\nconst utilFunctions = new CLIUtils();\r\n\r\nfunction CreateObjectPair(a, b) {\r\n const obj = {};\r\n obj[a] = b;\r\n return obj;\r\n}\r\n\r\nfunction ArgList(arg) {\r\n if (arg instanceof this.constructor) {\r\n return arg;\r\n }\r\n if (arg instanceof Array) {\r\n this._values = arg.slice(0);\r\n } else if (arg) {\r\n this._values = [arg];\r\n } else {\r\n this._values = [];\r\n }\r\n}\r\n\r\nArgList.prototype.append = function (value) {\r\n const values = this._values;\r\n values[values.length] = value;\r\n return this;\r\n};\r\n\r\nArgList.prototype.remove = function (value) {\r\n const values = this._values;\r\n const index = values.indexOf(value);\r\n if (index >= 0) {\r\n values.splice(index, 1);\r\n }\r\n return this;\r\n};\r\n\r\nArgList.prototype.toJSO = function (cliUtils, cmd, arg) {\r\n const res = {};\r\n\r\n const list = this._values;\r\n for (let i = 0, n = list.length; i < n; ++i) {\r\n _.set(res, list[i].id, cliUtils.propagateProp(`${keyRemap(cmd)}.${arg}.${list[i].id}`, list[i].val));\r\n }\r\n\r\n return res;\r\n};\r\n\r\nfunction Arg(_id, _val) {\r\n this.id = _id;\r\n this.val = _val;\r\n}\r\n\r\nconst cliutils = Object.create({});\r\n\r\ncliutils.Arg = Arg;\r\ncliutils.ArgList = ArgList;\r\n\r\ncliutils.miew = null;\r\ncliutils.echo = null;\r\ncliutils.representations = representationsStorage;\r\ncliutils.utils = utilFunctions;\r\n\r\ncliutils._ = _;\r\ncliutils.CreateObjectPair = CreateObjectPair;\r\ncliutils.keyRemap = keyRemap;\r\ncliutils.Context = selectors.Context;\r\ncliutils.ClearContext = selectors.ClearContext;\r\n\r\ncliutils.NULL = NULL;\r\n\r\ncliutils.notimplemented = function () {\r\n return this.NULL;\r\n};\r\n\r\nMiew.prototype.script = function (script, _printCallback, _errorCallback) {\r\n parsercli.yy.miew = this;\r\n parsercli.yy.echo = _printCallback;\r\n parsercli.yy.error = _errorCallback;\r\n if (this.cmdQueue === undefined) {\r\n this.cmdQueue = [];\r\n }\r\n\r\n if (this.commandInAction === undefined) {\r\n this.commandInAction = false;\r\n }\r\n\r\n this.cmdQueue = this.cmdQueue.concat(script.split('\\n'));\r\n};\r\n\r\nMiew.prototype.awaitWhileCMDisInProcess = function () {\r\n this.commandInAction = true;\r\n};\r\n\r\nMiew.prototype.finishAwaitingCMDInProcess = function () {\r\n this.commandInAction = false;\r\n};\r\n\r\nMiew.prototype.isScriptingCommandAvailable = function () {\r\n return this.commandInAction !== undefined\r\n && !this.commandInAction\r\n && this.cmdQueue !== undefined\r\n && this.cmdQueue.length > 0;\r\n};\r\n\r\nMiew.prototype.callNextCmd = function () {\r\n if (this.isScriptingCommandAvailable()) {\r\n const cmd = this.cmdQueue.shift();\r\n\r\n const res = {};\r\n res.success = false;\r\n try {\r\n parsercli.parse(cmd);\r\n res.success = true;\r\n } catch (e) {\r\n res.error = e.message;\r\n parsercli.yy.error(res.error);\r\n this.finishAwaitingCMDInProcess();\r\n }\r\n return res;\r\n }\r\n return '';\r\n};\r\n\r\nparsercli.yy = cliutils;\r\n// workaround for incorrect JISON parser generator for AMD module\r\nparsercli.yy.parseError = parsercli.parseError;\r\n","import Miew from './Miew';\r\nimport './Miew-cli';\r\n\r\nexport default Miew;\r\n"],"names":["parser","o","k","v","l","length","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","$VV","$VW","$VX","$VY","$VZ","$V_","$V$","$V01","$V11","$V21","$V31","$V41","$V51","$V61","trace","yy","symbols_","terminals_","productions_","performAction","anonymous","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","miew","reset","ClearContext","resetReps","rebuild","rebuildAll","echo","utils","help","toString","motm","propagateProp","get","set","saveSettings","restoreSettings","resetSettings","applyPreset","repRemove","representations","remove","repHide","listRep","list","listSelector","Context","select","checkArg","toLowerCase","rep","repCurrent","selector","within","Number","material","toUpperCase","view","changeUnit","dssp","scale","i","n","rotate","Math","PI","translate","center","addObject","type","params","opts","toJSO","listObjs","removeObject","getURL","settings","screenshotSave","load","clear","add","repAdd","mode","Array","colorer","_","assign","CreateObjectPair","key","val","Object","create","keyRemap","concat","ArgList","append","Arg","parseInt","JSON","parse","String","table","defaultActions","parseError","str","hash","recoverable","error","Error","input","self","stack","tstack","vstack","lstack","recovering","TERROR","EOF","args","slice","call","arguments","lexer","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","push","ranges","options","getPrototypeOf","popStack","lex","token","pop","symbol","preErrorSymbol","state","action","a","r","yyval","p","len","newState","expected","errStr","showPosition","join","text","match","line","loc","first_line","last_line","first_column","last_column","range","apply","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","lines","unput","split","substr","oldLines","more","reject","backtrack_lexer","less","pastInput","past","replace","upcomingInput","next","pre","c","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","flex","begin","condition","popState","conditions","topState","abs","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","YYSTATE","unquoteString","Parser","module","exports","keyword","GetSelector","RangeList","Range","ValueList","AbstractInterpolator","CubicInterpolator","Enum","LinearInterpolator","NearestInterpolator","SincFilterInterpolator","Smooth","clipClamp","clipMirror","clipPeriodic","defaultConfig","getColumn","getType","isValidNumber","makeLanczosWindow","makeScaledFunction","makeSincKernel","normalizeScaleTo","shallowCopy","sin","sinc","validateNumber","validateVector","__hasProp","__extends","child","parent","ctor","constructor","__super__","METHOD_NEAREST","METHOD_LINEAR","METHOD_CUBIC","METHOD_LANCZOS","METHOD_SINC","CLIP_CLAMP","CLIP_ZERO","CLIP_PERIODIC","CLIP_MIRROR","CUBIC_TENSION_DEFAULT","CUBIC_TENSION_CATMULL_ROM","method","cubicTension","clip","scaleTo","sincFilterSize","sincWindow","max","min","period","array","config","clipHelper","clamp","clipHelperClamp","zero","clipHelperZero","periodic","clipHelperPeriodic","mirror","clipHelperMirror","getClippedInput","interpolate","t","_super","round","floor","tangentFactor","getTangent","m","t2","t3","x","window","kernel","sum","_ref","_ref2","arr","row","_i","_len","_results","f","baseScale","scaleRange","scaleFactor","translation","isNaN","isFinite","dimension","s","invalidErr","obj","copy","baseDomainEnd","interpolator","interpolatorClass","interpolators","properties","smoothFunc","lanczosFilterSize","nearest","linear","cubic","lanczos","count","_j","_len2","deepValidation","_k","_len3","domain","sort","define","amd","MMTF","e","byteLength","charCodeAt","setUint8","u","setUint16","setUint32","Uint8Array","buffer","setFloat64","setInt8","setInt16","setInt32","isArray","d","keys","ArrayBuffer","DataView","byteOffset","Int8Array","Int32Array","Float32Array","Int16Array","g","L","h","setFloat32","getFloat32","y","U","b","I","w","C","ceil","A","M","F","S","E","N","O","T","getInt32","subarray","j","q","D","P","z","B","V","G","R","rr","forEach","bondAtomList","bondOrderList","xCoordList","yCoordList","zCoordList","bFactorList","atomIdList","altLocList","occupancyList","groupIdList","groupTypeList","secStructList","insCodeList","sequenceIndexList","chainIdList","chainNameList","H","fromCharCode","getInt8","getUint8","getUint16","getUint32","getFloat64","getInt16","W","X","ignoreFields","nr","indexOf","J","K","firstModelOnly","onModel","onChain","onGroup","onAtom","onBond","chainsPerModel","chainCount","modelIndex","groupsPerChain","groupCount","chainIndex","chainId","chainName","groupList","atomNameList","atomCount","groupIndex","groupId","groupType","groupName","singleLetterCode","chemCompType","secStruct","insCode","sequenceIndex","atomIndex","atomId","element","elementList","atomName","formalCharge","formalChargeList","xCoord","yCoord","zCoord","bFactor","altLoc","occupancy","atomIndex1","atomIndex2","bondOrder","Q","Y","Z","response","XMLHttpRequest","addEventListener","responseType","open","send","or","ar","tr","er","ir","encode","decode","traverse","fetch","fetchReduced","version","fetchUrl","fetchReducedUrl","encodeMsgpack","encodeMmtf","decodeMsgpack","decodeMmtf","__assign","defaults","width","radius","corners","color","fadeColor","animation","direction","speed","zIndex","className","top","left","shadow","position","Spinner","spin","target","stop","el","document","createElement","setAttribute","style","transform","insertBefore","firstChild","drawLines","parentNode","removeChild","undefined","getColor","idx","borderRadius","shadows","parseBoxShadow","degrees","backgroundLine","height","background","transformOrigin","delay","boxShadow","normalizeShadow","appendChild","regex","_a","xUnits","yUnits","prefix","end","normalized","shadows_1","xy","convertOffset","radians","cos","Timer","startTime","oldTime","elapsedTime","running","start","now","getElapsedTime","update","delta","newTime","performance","bind","Date","tag","id","css","cssText","Stats","domElement","_text","_startTime","_prevTime","_deltas","_index","_total","_count","time","ms","fps","textContent","toPrecision","show","on","display","isUndefOrEqual","param","value","EventDispatcher","_handlers","callback","context","handlers","_checkPar","par","find","removeEventListener","handler","ev","values","omitBy","dispatchEvent","event","priorities","debug","info","report","warn","Logger","console","_priority","instantiate","verify","number","isNumber","defineProperty","findKey","level","levels","message","priority","_message","output","log","logger","browserType","DEFAULT","SAFARI","encodeQueryComponent","excludeExp","code","encodeURIComponent","decodeQueryComponent","decodeURIComponent","getUrlParameters","url","location","search","query","substring","result","exec","getUrlParametersAsDict","resolveURL","URL","href","anchor","generateRegExp","symbolStr","symbolList","listStr","RegExp","attrs","content","createTextNode","HTMLElement","deriveClass","cls","base","members","statics","deriveDeep","needZeroOwnProperties","res","hexColor","hex","DebugTracer","namespace","enabled","enable","indent","methods","wrap","method_","name_","spaces","name","Function","OutOfMemoryError","allocateTyped","TypedArrayName","size","RangeError","bytesToBase64","bytes","binary","btoa","bytesFromBase64","atob","arrayToBase64","TypedArrayClass","arrayFromBase64","compareOptionsWithDefaults","defOpts","optsStr","isAlmostPlainObject","isPlainObject","proto","objectsDiff","src","dst","diff","forIn","srcValue","dstValue","deepDiff","isEmpty","isEqual","forInRecursive","object","iterateThrough","newPref","enquoteString","isString","SyntaxError","getFileExtension","fileName","lastIndexOf","Infinity","splitFileName","ext","dataUrlToBlob","parts","partsCount","Blob","getBrowser","navigator","vendor","userAgent","shotOpen","write","shotDownload","dataUrl","filename","msSaveBlob","link","download","innerHTML","createObjectURL","body","click","data","blobData","copySubArrays","indices","itemSize","shallowCloneNode","node","newNode","cloneNode","worldPos","unquotedStringRE","enquoteHelper","correctSelectorIdentifier","test","concatTypedArraysUnsafe","first","second","mergeTypedArraysUnsafe","reduce","acc","cur","JobHandle","_shouldCancel","cancel","shouldCancel","notify","slaveEvent","VERSION","modes","BS","atom","bond","space","multibond","aromrad","showarom","polyComplexity","poor","low","medium","high","ultra","VW","LN","offsarom","chunkarom","lineWidth","LC","SA","zClip","probeRadius","subset","wireframe","SE","QS","isoValue","gaussLim","gridSpacing","CS","probePositions","TR","TU","heightSegmentsRatio","tension","CA","depth","ss","helix","arrow","strand","TX","template","horizontalAlign","verticalAlign","dx","dy","dz","fg","bg","showBg","VD","kSigma","kSigmaMed","kSigmaMax","frame","isoMode","colorers","EL","carbon","UN","CO","baseColor","CB","factor","SQ","gradient","TM","OC","HY","MO","antialias","camFov","camNear","camFar","camDistance","radiusToFit","fogNearFactor","fogFarFactor","fogAlpha","fogColor","fogColorEnable","palette","resolution","autoResolution","autoPreset","preset","presets","default","empty","wire","small","macro","objects","dashSize","gapSize","transparent","draft","clipPlane","clipPlaneFactor","clipPlaneSpeed","plugins","axes","fog","zSprites","isoSurfaceFakeOpacity","suspendRender","nowater","autobuild","fxaa","outline","threshold","thickness","ao","autoRotation","maxfps","fbxprec","autoRotationAxisFixed","zooming","picking","pick","editing","aromatic","singleUnit","stereo","interpolateViews","transparency","translationSpeed","example","good","ssaoKernelRadius","ssaoFactor","stereoBarrel","use","multiFile","Settings","old","_changed","path","oldValue","_notifyChange","merge","_notifyChanges","defaultValue","cloneDeep","checkpoint","deepValue","deepPath","changed","filter","applyDiffs","diffs","getDiffs","versioned","setPluginOpts","plugin","repIndex","asBoolean","adapters","string","boolean","cL1Ass","cOptsSep","cL2Ass","cLSep","cCommonIgnoreSymbols","getLevel1ExcludedExpr","cLevel1Ignores","getLevel2ExcludedExpr","cLevel2Ignores","cL1ExclExpr","encodeQueryComponentL1","cL2ExclExpr","encodeQueryComponentL2","ensureRepList","reps","ensureRepAssign","prop","_objects","newOpts","newObj","parseParams","sep","extractArgs","defaultsDict","bang","inputVal","arg","pair","adapter","actions","unit","menu","mt","materials","dup","_fromArray","entries","entry","isFunction","fromAttr","attr","fromURL","_processOptsForURL","_processArgsForURL","_processObjForURL","objOpts","toURL","stringList","checkAndAdd","addReps","repList","addObjects","objList","protocol","host","pathname","_processOptsForScript","_processArgsForScript","_processObjForScript","map","_processRepsForScript","repString","strIdx","localAdd","toScript","commandsList","command","saveQuotes","quote","trim","Atom","residue","role","het","serial","temperature","charge","mask","hydrogenCount","radicalCount","valence","bonds","flags","Flags","HYDROGEN","CARBON","isHet","isHydrogen","getVisualName","forEachBond","process","getFullName","_chain","getName","_sequence","NONPOLARH","Element","fullName","weight","radiusBonding","hValency","hydrogenValency","Constants","U1","Lead","U2","Wing","U18","Role","SG","ByAtomicNumber","ByName","byAtomicNumber","byName","getByName","cBondTypes","UNKNOWN","COVALENT","AROMATIC","getAtomPos","Bond","right","order","fixed","_left","_right","_fixed","_order","_type","getLeft","getRight","getOrder","calcLength","distanceTo","_forEachNeighbour","currAtom","forEachLevelOne","forEachLevelTwo","l2Atom","_fixDir","refPoint","currDir","posGetter","rightCount","leftCount","tmpVec","clone","checkDir","sub","dotProd","dot","checkCarbon","stages","stageId","multiplyScalar","calcNormalDir","third","maxNeibs","another","secondPos","firstV","secondV","crossVectors","lengthSq","normalize","BondType","THREE","cNucleicControlNames","cNucleicWing1Names","cNucleicWing2Names","cCylinderSource","cCylinderTarget","types","atoms","Residue","chain","sequence","icode","_component","_icode","_mask","_atoms","_secondary","_firstAtom","_leadAtom","_wingAtom","_lastAtom","_controlPoint","_midPoint","_wingVector","_cylinders","_isValid","_het","_molecule","getChain","getMolecule","getSequence","getSecondary","getICode","addAtom","xyz","tempFactor","complex","getComplex","getAtomCount","forEachAtom","_findAtomByName","_findFirstAtomInList","names","collectMask","getCylinderTargetList","_name","_detectLeadWing","getAtomPosition","leadAtom","wingStart","wingEnd","cylSource","targetList","cylTarget","calcWing","prevLeadPos","currLeadPos","prevWingPos","prevWing","vectorA","vectorB","needToNegate","angleTo","negate","_innerFinalize","prevRes","prev","nextRes","chainAsNucleic","bFirstInChain","lp","Vector3","lerp","_finalize2","asNucleic","isConnected","anotherResidue","_finalize","tempCount","occupCount","ResidueType","letterCode","_fullName","StandardTypes","ALA","ARG","ASN","ASP","CYS","GLN","GLU","GLY","HIS","ILE","LEU","LYS","MET","PHE","PRO","PYL","SEC","SER","THR","TRP","TYR","VAL","DA","DC","DG","DI","DT","DU","WAT","H2O","HOH","DOD","UNK","UNL","PROTEIN","BASIC","ACIDIC","POLAR","NONPOLAR","NUCLEIC","PURINE","PYRIMIDINE","DNA","RNA","WATER","_addFlag","flag","hydro","_addParam","ChainType","Chain","_complex","_residues","minSequence","POSITIVE_INFINITY","maxSequence","NEGATIVE_INFINITY","getResidues","_determineType","residues","findResidue","seqNum","iCode","curr","updateToFrame","frameData","prevData","frameRes","currData","addResidue","getResidueType","addResidueType","getResidueCount","forEachResidue","StructuralElement","init","term","generic","genericByType","serialAtomMap","residueHash","splitUnifiedSerial","serialId","hashCode","getUnifiedSerial","Type","STRAND","BRIDGE","HELIX_310","HELIX_ALPHA","HELIX_PI","HELIX","TURN_310","TURN_ALPHA","TURN_PI","TURN","BEND","COIL","Generic","LOOP","StructuralElementType","StructuralElementGeneric","typeByPDBHelixClass","Helix","helixClass","comment","Strand","sheet","sense","atomCur","atomPrev","as","Sheet","_width","_strands","getWidth","addStrand","addEmptyStrand","SGroup","saveNode","_id","_position","_charge","_repeat","_center","xmlNodeRef","getPosition","getCentralPoint","_rebuildSGroupOnAtomChange","nLimon","bLow","bHight","aPos","addVectors","includes","toJSON","List","_values","splice","valuesArray","upperOnly","_validate","Selector","ListSelector","RangeListSelector","ValueListSelector","caseSensitive","NoneSelector","includesAtom","_atom","AllSelector","none","PrefixOperator","rhs","InfixOperator","lhs","keywords","defineSelector","SelectorClass","factory","SerialSelector","NameSelector","AltLocSelector","ElemSelector","ResidueSelector","SequenceSelector","ICodeSelector","ResIdxSelector","ChainSelector","HetatmSelector","PolarHSelector","NonPolarHSelector","NULL_SELECTOR","defineOperator","OperatorClass","NotOperator","AndOperator","OrOperator","byResidueTypeFlag","selectors","exc","BiologicalUnit","_selector","_boundaries","boundingBox","Box3","boundingSphere","Sphere","computeBoundaries","makeEmpty","expandByPoint","bbc","getCenter","setFromCenterAndSize","radiusSquared","pos","lengthSquared","distanceToSquared","sqrt","getTransforms","getSelector","getBoundaries","finalize","Assembly","chains","matrices","oldCenter","oldRad","applyMatrix4","newRad","addScalar","subScalar","addChain","addMatrix","matrix","Component","_residueIndices","_cycles","_subDivs","_residueCount","resIdc","idIdc","idCount","last","setSubDivs","subDivs","resCnt","_bonds","forEachCycle","cycle","addCycle","cycles","markResidues","_forEachSubChain","subs","currRes","endRes","getMaskedSequences","_subIdx","getMaskedSubdivSequences","currIdx","lastSubIdx","subIdx","boundaries","cMaxPairsForHashCode","cHashTableSize","cNumbersPerPair","cMaxNeighbours","cInvalidVal","cBigPrime","AtomPairs","maxPairsEstimate","numPairs","numMaxPairs","intBuffer","hashBuffer","destroy","addPair","indexA","indexB","ia","ib","codeToAdd","apI","cProfileBondBuilder","cEstBondsMultiplier","cSpaceCode","cBondTolerance","cVMDTolerance","cBondRadInJMOL","cEpsilon","_getBondingRadius","_isAtomEligible","AutoBond","_maxRad","bBox","getDefaultBoundaries","_vBoxMin","_vBoxMax","_pairCollection","_addExistingPairs","getAtoms","numAtoms","aInd","collection","numBondsForAtom","bInd","indTo","_findPairs","vw","getVoxelWorld","atomsNum","rA","isHydrogenA","posA","locationA","atomA","processAtom","atomB","locationB","dist2","rB","maxAcceptable","forEachAtomWithinRadius","_addPairs","iA","iB","_addPair","bondsA","numBonds","newBond","addBond","build","_buildInner","timeEnd","_calcBoundingBox","nAtoms","maxRad","cCrossThresh","cAromaticType","cAromaticAtoms","_coDirVectors","v1Tmp","v2Tmp","cp","v1","v2","_insertAscending","_anotherAtom","_cosBetween","theta","MathUtils","_markAromatic","Cycle","atomsList","nA","nextAtom","checkBond","_isAromatic","_isPossibleAromatic","rightIdx","leftIdx","_checkCycleSimple","_checkCycleComplex","assert","AromaticLoopsMarker","bondsData","bondMarks","_bondsData","_bondMarks","_resetCycles","_currIdx","_haveSameCycle","bond1","bond2","arr1","arr2","n1","n2","i1","i2","_tryBond","prevBond","currRight","bondsOrder","currLeft","currVec","startAtomRef","_currStart","checkAromatic","_checkBond","anotherAtom","anotherVec","newDir","cross","dir","newRight","_startCycle","_findLoops","checkCycle","forEachComponent","component","newCycle","markCycles","detectCycles","_getSphereSliceRadiusRange","zMin","zMax","dzMin","dzMax","rzMin","rzMax","rMin","rMax","_getCircleSliceRadiusRange","yMin","yMax","dyMin","dyMax","ryMin","ryMax","VoxelWorld","box","vCellSizeHint","_box","getSize","divide","_last","_cellSize","_cellInnerR","_cellOuterR","numVoxels","_voxels","addAtoms","voxelIdx","_findVoxel","_zero","_voxel","point","voxel","_forEachAtomInVoxel","_xRange","Vector2","_yRange","_zRange","_forEachVoxelWithinRadius","xRange","yRange","zRange","_forEachVoxelWithinRadiusSimple","rRangeXY","rRangeX","xVal","yVal","zVal","isInsideX","isInsideY","isInsideZ","divideScalar","clampScalar","_vCenter","vCenter","distTouch2","distInside2","d2","r2","isInside","forEachAtomWithinDistFromMasked","dist","_forEachAtomWithinDistFromGroup","atomProc","forEachAtomWithinDistFromSelected","voxels","processIfWithin","PairCollection","MINIMAL_DISTANCE","MIN_HBOND_ENERGY","MAX_HBOND_ENERGY","COUPLING_CONSTANT","MAX_COUPLING_DISTANCE","MAX_RESIDUES_THRESHOLD","HBondInfo","_hbonds","_buildVW","_build","isBond","from","to","acc0","acc1","acceptor","energy","ri","preri","rj","prerj","_calcHBondEnergy","pairs","_residueGetCAlpha","_residueGetCO","_residueGetNH","predonor","donor","distanceHO","distanceHC","distanceNC","distanceNO","donorInfo","accInfo","BridgeType","freeze","NO_BRIDGE","PARALLEL","ANTI_PARALLEL","HelixFlag","START","MIDDLE","END","START_AND_END","StructureType","SecondaryStructureMap","_ss","_sheet","_betaPartners","_bend","_helixFlags","_chainLengths","_chains","_buildBetaSheets","_buildAlphaHelices","inResidues","chainLength","inPreferPiHelices","stride","kappa","_kappa","_isHelixStart","isTurn","_cosinusAngle","p1","p2","p3","p4","v12","v34","prevPrev","nextNext","curCA","ppCA","nnCA","ckap","skap","atan2","bridges","lenA","chainA","lenB","chainB","_testBridge","found","bridge","unshift","chainI","chainJ","ibi","iei","jbi","jei","ibj","iej","jbj","jej","_hasChainBreak","bulge","ladderset","Set","ladder","delete","sheetset","toMove","_areBridgesLinked","betai","betaj","parallel","ai","aj","has","VOXEL_SIZE","helixClassMap","loopMap","Complex","_components","_helices","_sheets","structures","_residueTypes","_sgroups","_molecules","_maskNeedsUpdate","metadata","symmetry","units","_currentUnit","addSheet","addHelix","getBonds","forEachChain","resName","rt","getSGroupCount","getSGroups","getAtomByFullname","resId","localeCompare","getChainCount","getMolecules","getMoleculeCount","forEachMolecule","molecules","forEachSGroup","groups","components","forEachVisibleComponent","getBondCount","maxSerial","chainShift","uniSerial","remnant","ser","_fillCmpEdit","addComp","comp","resCount","currStart","_fillCmpNoedit","currSubDivs","_fillComponents","enableEditing","getCurrentUnit","resetCurrentUnit","setCurrentUnit","newUnit","_computeBounds","onAtomPositionChanged","_finalizeBonds","updateStructuresMask","helices","sheets","needAutoBonding","autoConnector","other","marker","detectAromaticLoops","_finalizeMolecules","molecule","updater","structure","countAtomsByMask","getNumAtomsBySelector","resetAtomMask","markAtoms","setMask","clearMask","totalSelector","markAtomsAdditionally","clearAtomBits","reseter","getAtomNames","_atomNames","dict","getElements","_elements","getResidueNames","_residueNames","getChainNames","_chainNames","getAltLocNames","_altlocNames","_voxelWorld","addElement","srcArray","dstArray","functor","elem","joinComplexes","complexes","atomBias","bondBias","residueBias","chainBias","componentBias","bias","processBond","processResidue","processChain","processComponent","doNothing","ssMap","getSheet","item","lastCode","lastSheetIndex","lastHelixIndex","curStructure","curCode","curResidue","curSheetIndex","loopType","curSheet","pow2ceil","Volume","dimensions","vecSize","volumeInfo","_dimVec","_volumeInfo","_dimX","_dimY","_dimZ","_rowElements","_planeElements","_totalElements","_data","getValue","setValue","addValue","getDimensions","getBox","getVolumeInfo","getCellSize","boxSize","computeGradient","vl","vs","xSize","ySize","zSize","volMap","_voxelValue","zi","zm","zp","yi","ym","yp","xi","xm","xp","getTiledTextureStride","buildTiledTexture","tilesX","tilesY","tileRow","texture","DataTexture","RedFormat","UnsignedByteType","UVMapping","ClampToEdgeWrapping","LinearFilter","needsUpdate","getData","getDirectIdx","getStrideX","getStrideY","getStrideZ","Molecule","CSS2DObject","Object3D","_element","getElement","setTransparency","transp","op","op100","opacity","RCGroup","Group","raycast","raycaster","intersects","visible","children","enableSubset","innerOnly","disableSubset","getSubset","totalSubset","vertexScreenQuadShader","fragmentScreenQuadFromTex","fragmentScreenQuadFromTexWithDistortion","LAYERS","VOLUME","TRANSPARENT","PREPASS_TRANSPARENT","VOLUME_BFPLANE","COLOR_FROM_POSITION","SHADOWMAP","SELECTION_LAYERS","resetTransform","quaternion","updateMatrixWorldRecursive","updateMatrixWorld","addSavingWorldTransform","_worldMatrixInverse","Matrix4","matrixWorld","invert","multiply","decompose","WebGLRenderer","renderDummyQuad","_material","MeshBasicMaterial","depthWrite","_scene","Scene","_quad","Mesh","PlaneGeometry","_camera","OrthographicCamera","render","renderScreenQuad","isIdentity","identity","equals","applyToPointsArray","elements","persp","ScreenQuadMaterial","RawShaderMaterial","uniforms","srcTex","vertexShader","depthTest","renderScreenQuadFromTex","fragmentShader","renderScreenQuadFromTexWithDistortion","coef","PerspectiveCamera","setMinimalFov","angle","aspect","fov","radToDeg","atan","tan","degToRad","StereoCamera","updateHalfSized","camera","originalAspect","originalFov","updateProjectionMatrix","setDistanceToFit","Raycaster","intersectVisibleObject","gfxObj","fogFarPlane","intersectObject","nearPlane","near","matrixWorldInverse","farPlane","far","extractScale","_v","te","det","determinant","_calcCylinderMatrix","posBegin","posEnd","posCenter","matScale","makeScale","matRotHalf","makeRotationX","matRotLook","vUp","lookAt","setPosition","_calcChunkMatrix","eye","up","rad","_groupHasGeometryToRender","group","hasGeoms","_buildDistorionMesh","widthSegments","heightSegements","calcInverseBarrel","epsilon","prevR2","curR2","dr","geo","getAttribute","setXY","BufferAttribute","copyAtList","attribute","indexList","fillArray","startIndex","endIndex","removeChildren","clearTree","LineSegments","Line","geometry","dispose","destroyObject","belongToSelectLayers","layers","processObjRenderOrder","root","idMaterial","renderOrder","isGroup","applySelectionMaterial","setValues","depthFunc","LessEqualDepth","overrideColor","lights","shadowmap","setUberOptions","fixedColor","Color","zOffset","getMiddlePoint","point1","point2","optionalTarget","addScaledVector","_oldInstancedBufferGeometryCopy","InstancedBufferGeometry","source","instanceCount","calcCylinderMatrix","calcChunkMatrix","groupHasGeometryToRender","buildDistorionMesh","gfxutils","_defaultBoundaries","Visual","dataSource","_dataSource","release","getDataSource","_ensureArray","EntityList","entities","_list","_dict","_indices","entity","register","registerInList","unregisterFromList","registerInDict","unregisterFromDict","unregister","all","makeContextDependent","defineProperties","CollisionSphere","_radius","_sphere","sphere","ray","intersectSphere","distance","origin","SphereCollisionGeo","setSphere","inters","chunkIdx","computeBoundingBox","computeBoundingSphere","tmpColor","OFFSET_SIZE","COLOR_SIZE","setArrayXYZ","setArrayXYZW","InstancedSpheresGeometry","spheresCount","sphereComplexity","useZSprites","_sphGeometry","SphereGeometry","_init","setItem","itemIdx","itemPos","itemRad","_offsets","setColor","colorVal","_colors","startUpdate","finishUpdate","setOpacity","chunkIndices","alphaArr","_alpha","geom","sphereGeo","alpha","fill","InstancedBufferAttribute","MAX_IDC_16BIT","VEC_SIZE","ChunkedObjectsGeometry","BufferGeometry","chunkGeo","chunksCount","_chunkGeo","colors","chunkSize","_chunkSize","mesh","facesPerChunk","faceIndex","srcPos","_positions","srcNorm","_normals","srcColor","dstPos","dstNorm","dstColor","dstPtOffset","ptIdxBegin","ptIdxEnd","attributes","chunkIndex","chunkIndexSize","pointsCount","use32bitIndex","indexSize","Uint32Array","Uint16Array","posOffset","setIndex","SimpleSpheresGeometry","sphGeometry","normals","geoNormals","normal","_chunkPos","_tmpPositions","tmpPos","geoPos","centerPos","tmpVector","normMtx","Matrix3","Simple2CCylindersGeometry","cylGeometry","CylinderGeometry","_chunkNorms","_tmpVector","botPos","topPos","firstOffset","secondOffset","tmpArray","geoNorm","lerpVectors","mtx1","getNormalMatrix","fromArray","toArray","applyMatrix3","colorVal1","colorVal2","MAX_POINTS_COUNT_16BIT","PTS_PER_TRIANGLE","CylinderBufferGeometry","radiusTop","radiusBottom","radialSegments","heightSegments","openEnded","thetaStart","thetaLength","parameters","hasTop","hasBottom","vertexCount","facesCount","heightHalf","positions","Uint16BufferAttribute","uvs","currVtxIdx","currFaceIdx","tanTheta","v3","v4","setXYZ","vx","vy","vz","startTIdx","lastIdx","fTIdx","currSrcIdx","getX","getY","getZ","nextTVtx","startBIdx","lastBIdx","fBIdx","currSrcBIdx","nextBVtx","invMatrix","sortNumber","_prepareCylinderInfo","chunksIdx","cylinderInfo","even","newPar","_assignOpacity","color1","color2","Instanced2CCylindersGeometry","_useZSprites","_cylGeometry","_collisionGeo","me","mtxOffset","_matVector1","_matVector2","_matVector3","_invmatVector1","_invmatVector2","_invmatVector3","colorIdx","_color1","_color2","cylinderIndices","getGeoParams","cylinderGeo","TRI_SIZE","tmpPrev","tmpNext","tmpRes","simpleNormal","normalOnCut","nearRingPt","_createExtrudedChunkGeometry","shape","ringsCount","ptsCount","totalPts","ExtrudedObjectsGeometry","_ringsCount","tmpShape","_tmpShape","hasSlope","hasCut","chunkStartIdx","_setPoints","_setSlopeNormals","_setBaseNormals","_addCut","vtxIdx","mtx","nPtsInRing","_countNormalsInRing","isSlope","shiftToExtraPt","subVectors","VERTEX_PER_SEGMENT","POS_SIZE","DIR_SIZE","COL_SIZE","startSegmentIdx","segmentsCount","elemSize","ThickLinesGeometry","_initVertices","segmentIdx","setSegment","pos1","pos2","directions","_directions","dirIdx","startSegIdx","endSegIdx","getSubsetSegments","getSubsetColors","getSubsetOpacities","getNumVertexPerSegment","getPositionSize","setSegments","startPos","startDir","setColors","_buffersSize","indexOffset","pointOffset","BaseLinesGeometry","LinesGeometry","posSize","CylinderCollisionGeo","itemOffset","COLLISION_RAD","ChunkedLinesGeometry","enableCollision","collisionGeo","segCount","segIdx","TwoColorLinesGeometry","segmentIndices","_segCounts","vectors","vecCount","tempPos1","tempPos2","CrossGeometry","POS_RAD_SIZE","IsoSurfaceGeometry","_opts","_posRad","posRad","IsoSurfaceMarchCube","pointsValuesLinear","hasIntersection","bitsInside","numCellsPerSide","vx7000000","n3","striIndicesMarchCube","edgeTable","_voxelGradientFast","grad","GridCell","_arrSize","cubeIndex","Triangle","createArray","arrSize","IsoSurface","_numTriangles","_numVertices","_volumetricData","_xAxis","_yAxis","_zAxis","_xDir","_yDir","_zDir","_prepareAxesAndDirs","volData","cellSize","xAxis","yAxis","zAxis","xDir","yDir","zDir","tmp","notZero","axe","EPSILON","_vertexInterp","isoLevel","grid","ind1","ind2","vertex","valP1","valP2","isoDiffP1","diffValP2P1","mu","_triTable","_firstIndices","_secondIndices","_vertexList","_normalList","_polygonize","triangles","firstIndices","secondIndices","vertexList","normalList","triCount","triTblIdx","triTable","_doGridPosNorms","step","appendSimple","vol","dim","stepX","stepY","stepZ","gc","gcVal","gcValSize","additions","tmpTriCount","appendVertex","axis","triVertex","_origin","posMtx","globTriCount","_gradient","compute","_remapIndices","vertexMap","idcCount","newIndices","_remapVertices","vertices","newPositions","newNormals","norm","vertexFusion","faceVer","oldVerCount","vMap","newVer","matchedIndex","setColorVolTex","colorMap","atomMap","atomWeightMap","visibilitySelector","numVerts","xs","ys","zs","colorData","strideX","strideY","strideZ","atomWeightData","atomStrideX","atomStrideY","atomStrideZ","xInv","yInv","zInv","atomLookup","atomWeights","interp","idx1","idx2","collectWeight","coefX","coefY","coefZ","newVerCount","ind","mux","muy","muz","maxWeight","dominantIdx","atomIdx","c0","c1","c2","c3","cz0","cz1","numTriangles","newTriCount","i0","toMesh","VolumeSurfaceGeometry","_visibilitySelector","_calcSurface","_findMinMax","posRadArray","itemsCount","maxPosRad","minPosRad","tmpVal","_findNumVoxels","minMaxValues","minCoordRad","maxCoordRad","gridPadding","radScale","padRad","bbox","_makeSurface","surface","isoSurf","volTexMap","packedArrays","_computeSurface","chem","QuickSurfGeometry","_shiftByOrigin","gaussdensity","atomicNum","invIsoValue","invGridSpacing","maxVoxelX","maxVoxelY","maxVoxelZ","volTexData","texStrideX","scaledRad","atomicNumFactor","radInv","radLim","radLim2","xMin","xMax","dy2dz2","addr","texAddr","expVal","density","exp","colInd","originX","originY","originZ","AVHash","maxDistance","minX","minY","minZ","maxX","maxY","maxZ","hashFunc","minW","iDim","jDim","kDim","nCells","jkDim","cellID","preHash","cid","iIdx","cellOffsets","cellLengths","maxCellLength","subArray","cellLength","neighbourListLength","withinRadii","rExtra","out","outIdx","nearI","nearJ","nearK","loI","loJ","loK","hiI","hiJ","hiK","iOffset","jOffset","cellStart","cellEnd","dataIndex","baseIndex","rSum","ContactSurface","_indexList","maxRadius","lastClip","volTex","weights","weightsMap","gridx","gridy","gridz","sinTable","cosTable","neighbours","mid","ngTorus","uniformArray","TypeName","innI","fillGridDim","initializeGrid","gridSize","initializeAngleTables","initializeHash","rExt","singleAtomObscures","innX","innY","innZ","innCI","ra2","obscured","ni","projectPoints","sigma","sigma2Inv","ax","ay","az","ar2","ng","iax","iay","iaz","minx","miny","minz","maxx","maxy","maxz","colIdx","cr","cg","cb","iz","iy","dzy2","zyOffset","ix","cIdx","ap","spx","spy","spz","dd","normalToLine","projectTorus","aIdx","bIdx","xa","ya","za","r1","innR2","cosA","dmp","rInt","cost","sint","px","py","pz","current","projectTorii","innIdx","fixNegatives","innInnI","getVolume","ContactSurfaceGeometry","contactSurface","IsoSurfaceAtomColored","radiusAt","coord","colorX","colorY","colorZ","atomType","srcAtom","IsosurfaceBuildNormals","vBoxMin","vBoxMax","_numAtoms","_probeRadius","_atomsList","_voxelList","createVoxels","numAtomsRefs","ATOM_VOXEL_REF_SCALE","aveRad","numCells","_numCells","_aveRad","side","side2","side3","xScale","_xScale","yScale","_yScale","zScale","_zScale","maxAtomsRefs","xNumVoxMult","yNumVoxMult","zNumVoxMult","radAffect","diaAffect","numVoxX","numVoxY","numVoxZ","xIndMin","yIndMin","zIndMin","xIndMax","yIndMax","zIndMax","indVoxel","indexNext","destroyVoxels","_vertices","forEachRelatedAtom","xInd","yInd","zInd","ref","indexAtom","getClosestAtom","closest","minDist2","MAX_VALUE","buildNormals","numVertices","numCloseAtoms","vNormalX","vNormalY","vNormalZ","koef","r25","r01","maxRadAffect","maxRadAffect2","expScale","gatherNormals","maxClosedAtoms","buildColors","radiusColorSmoothness","KOEF_ADD","colorsClose","weightsSum","gatherColors","weightNormalized","IsoSurfaceGeo","maxNumVertices","maxNumTriangles","needVertexColors","_maxNumVertices","_maxNumTriangles","HASH_SIZE","SSIsosurfaceGeometry","_innerBuild","geoOut","getGeo","_fromGeo","numTri3","convertToAtomsColored","atomsColored","nm","hashLines","hashEntries","getBoundingBox","bigNum","probeRadius2","atomRadiusScale","radMax","num","getCornerCoord","numPoints","vOut","invNP","tx","ty","tz","buildEdgePoint","sign","cube","indexPointValue","cTwentyFour","xb","yb","zb","isTriangleVisible","v0","a0","voxelWorld","a1","a2","addTriangle","indInGeo0","addVertexToGeo","indInGeo1","indInGeo2","itr","buildGeoFromCorners","meshRes","vCellStep","cNumVerts","vaEdges","vCorner","indCell","indY","indZ","indPointValues","indValues","offs","numTri","indTri","getNumIntersectedCells","numIntersectedCells","cubeValuesIndex","indCorner","letter","atomT","calculateGridCorners","probeRad","vDif","aLot","fx","fy","fz","indXMin","indYMin","indZMin","indXMax","indYMax","indZMax","distToSphere","createVertexHash","numHashEtriesAllocated","numHashEntryIndex","getNewHashEntry","vAdd","oneHynberes","n815851","n37633","n2453543","r106","hashResolution","marCubeResoultion","iHash","hLineIndex","dot2","iVertAdd","entryFirst","modifyExcludedFromGeo","probeSphereRadius","distToBorder","r11","innerBlockWorkAround","probeSpRad2","sideInv","radEst","xCorner","yCorner","zCorner","ok","expandFactor","meshResolution","colorMode","useVertexColors","excludeProbe","rProbeRadius","numIntersectedCellsEstim","probeRadForNormalsColors","createLabel","fieldTxt","spanText","fontSize","strings","spanNodeP","spanNodeText","LabelsGeometry","items","xTranslation","yTranslation","deltaPos","userData","textAlign","fColor","bColor","precision","renderer","capabilities","getMaxPrecision","noiseWidth","noiseHeight","_noiseData","_noiseWrapS","RepeatWrapping","_noiseWrapT","_noiseMinFilter","NearestFilter","_noiseMagFilter","_noiseMapping","noiseTexture","RGBAFormat","noise","_samplesKernel","defaultUniforms","UniformsUtils","UniformsLib","diffuse","specular","shininess","zClipValue","clipPlaneValue","nearPlaneValue","invModelViewMatrix","world2colorMatrix","dashedLineSize","dashedLinePeriod","projMatrixInv","viewport","samplesKernel","noiseTex","noiseTexelSize","srcTexelSize","uberOptionNames","uberOptions","zClipCoef","toonShading","UberMaterial","instancedPos","instancedMatrix","attrColor","attrColor2","attrAlphaColor","sphereSprite","cylinderSprite","fakeOpacity","prepassTransparancy","colorFromPos","shadowmapType","colorFromDepth","orthoCam","dashedLine","thickLine","fogTransparent","normalsToGBuffer","glslVersion","GLSL3","precisionString","DoubleSide","defines","extensions","createInstance","inst","USE_FOG","INSTANCED_POS","INSTANCED_MATRIX","ATTR_COLOR","ATTR_COLOR2","ATTR_ALPHA_COLOR","OVERRIDE_COLOR","SPHERE_SPRITE","fragDepth","CYLINDER_SPRITE","ZCLIP","CLIP_PLANE","FAKE_OPACITY","USE_LIGHTS","COLOR_FROM_POS","SHADOWMAP_PCF_SHARP","SHADOWMAP_PCF_RAND","SHADOWMAP_BASIC","COLOR_FROM_DEPTH","ORTHOGRAPHIC_CAMERA","PREPASS_TRANSP","DASHED_LINE","THICK_LINE","FOG_TRANSPARENT","drawBuffers","NORMALS_TO_G_BUFFER","TOON_SHADING","shallow","updateUniforms","SuperClass","NewObjectType","rest","onBeforeRender","scene","_onBeforeRender","_update","UberObject","ZSpriteMesh","castShadow","receiveShadow","_geometry","_group","modelViewMatrix","multiplyMatrices","uniformsNeedUpdate","ZClippedMesh","_mvLength","_modelView","modelView","mvLength","setFromMatrixColumn","localToWorld","TextMesh","initialized","srcItem","label","visibility","SimpleMesh","_viewport","ThickLineMesh","projectionMatrix","InstancedMesh","ZClipped","ZSprite","Text","Instanced","geometries","meshes","setMatParams","_createInstancedCylinders","Geometry","initMaterial","_createLineSegmentsGeoTriplet","renderParams","thickLines","_createSimpleGeoTriplet","geoClass","_createIsoSurfaceGeoTriplet","caps","surfaceOpts","MeshCreator","createSpheres","create2CClosedCylinders","_caps","_settings","create2CCylinders","create2CLines","createCrosses","createExtrudedChains","createChunkedLines","createQuickSurface","createContactSurface","createSASSES","createLabels","TransformGroup","_inverseMatrix","_ray","Ray","geoParams","transforms","_geoParams","mat","_transforms","_createMeshes","inverseMatrix","childIntersects","ciCount","geos","meshCnt","wrapper","Name","ChemGroup","selection","_selection","_mode","_colorer","_chunksIdc","chunks","_polyComplexity","_geo","_makeGeoArgs","_mesh","chunksList","_calcChunksList","_changeSubsetOpacity","AtomsGroup","atomsIdc","AtomsSphereGroup","calcAtomRadius","getAtomColor","updateColor","needsColorUpdate","AtomsSurfaceGroup","selectedAtoms","getSurfaceOpts","AtomsSASSESGroupStub","adjustColor","inverseColor","getAtomText","getNode","colorMappings","adjust","inverse","propagateColor","rule","startsWith","templateMappings","hetatm","water","parseTemplate","AtomsTextGroup","getLabelOpts","fgColor","bgColor","_slerp","omega","oSin","AromaticGroup","radOffset","addChunk","chunksToIdx","prevVector","currVector","segmentsHeight","_segmentsHeight","leprStep","currAtomIdx","cCount","cycAtoms","chunkPoints","tmpDir","cycleRad","prevPos","currPos","upDir","currAngle","_createShape","pts","AromaticTorusGroup","torusRad","getAromRadius","radiusV","calcStickRadius","lookAtVector","mtc","points","currPoint","AromaticLinesGroup","getAromaticOffset","prevPt","getAromaticArcChunks","ResiduesGroup","chunksIdc","resIdx","NucleicItemGroup","stickRad","getResidueColor","_processItem","NucleicCylindersGroup","cyl1","cyl2","NucleicSpheresGroup","calcMatrix","_buildStructureInterpolator","argTrans","transformT","tt","newt","ans","_addPoints","centerPoints","topPoints","tp","_addPointsForLoneResidue","nucleic","nameFrom","nameTo","posFrom","posTo","shift","wing","cpPrev","tpPrev","cpNext","tpNext","_calcPoints","firstIdx","_prevIdx","_nextIdx","arrIdx","_extrapolate2","otherIdx","prevIdx","nextIdx","CartoonHelper","startIdx","endIdx","pointsArrays","_topInterp","_centerInterp","_shift","_valueStep","_segmentsCount","prepareMatrices","firstRad","secondRad","mtcCount","outMtc","currRad","topInterp","cenInterp","currentValue","mtxIdx","lerpVal","currTop","currCenter","nextCenter","_loopThrough","subDiv","subDivI","subDivN","idc","matrixHelper","prevLast","prevSecondRad","getResidueRadius","ResiduesSubseqGroup","cmpMultiplier","getHeightSegmentsRatio","getTension","chunkIdc","subdivs","ResiduesTraceGroup","chunk","getCylinderCount","BondsGroup","drawMultiple","drawMultiorderBonds","showAromatic","showAromaticLoops","bondsIdc","bondsCount","getBondOrder","bondIdx","BondsCylinderGroup","emptyOffset","calcSpaceFraction","normDir","leftPos","rightPos","currBondIdx","atom1","atom2","a1Pos","a2Pos","minRad","currStickRad","STEP_SIZE","BondsLinesGroup","bondDir","a1Hangs","a2Hangs","AtomsProcessor","_checkAtom","atomsGroup","meshIdx","chSubset","subsetEl","OrphanAtomsProcessor","ResiduesProcessor","ResidueGroup","_checkResidue","residuesGroup","checkResidue","ResidueProcessor","NucleicProcessor","SubseqsProcessor","jEnd","BondsProcessor","bondsGroup","AromaticProcessor","cycleIdx","perCycle","Atoms","OrphanAtoms","Residues","Nucleic","Subseqs","Bonds","Aromatic","processors","_bakeGroup","triplet","Processor","GroupsFactory","AtomsSpheres","gfxTriplet","OrphanedAtomsCrosses","BondsCylinders","BondsLines","CartoonChains","TraceChains","NucleicSpheres","NucleicCylinders","ALoopsTorus","ALoopsLines","QuickSurfGeo","ContactSurfaceGeo","SASSESSurfaceGeo","TextLabelsGeo","Mode","identify","buildGeometry","depGroups","currGroup","newGroup","getRenderParams","LinesMode","shortName","LicoriceMode","BallsAndSticksMode","VanDerWaalsMode","TraceMode","TubeMode","_residue","TUBE_RADIUS","CartoonMode","secCache","getResidueStartRadius","secOpts","getResidueEndRadius","ARROW_END","startRad","endRad","_res","tubeRad","secHeight","secData","SurfaceMode","surfaces","surfaceNames","getVisibilitySelector","isSurface","QuickSurfaceMode","useBeads","IsoSurfaceMode","_excludeProbe","_radScale","IsoSurfaceSASMode","IsoSurfaceSESMode","ContactSurfaceMode","TextMode","getTemplateOptions","lerpColor","beta","g1","b1","g2","b2","Palette","getElementColor","asIs","elementColors","defaultElementColor","residueColors","defaultResidueColor","getChainColor","chainColors","getSecondaryColor","secondaryColors","defaultSecondaryColor","getSequentialColor","getGradientColor","gradientName","gradients","defaultNamedColor","getNamedColor","namedColors","minRangeColor","midRangeColor","maxRangeColor","defaultGradientColor","namedColorsArray","rainbow","temp","hot","cold","reds","blues","CL","FE","NI","CU","BR","HE","LI","BE","NE","NA","MG","AL","SI","AR","SC","TI","CR","MN","ZN","GA","GE","AS","KR","RB","SR","ZR","NB","TC","RU","RH","PD","AG","CD","IN","SN","SB","TE","XE","BA","LA","CE","PR","ND","PM","SM","EU","GD","TB","DY","HO","ER","YB","LU","HF","TA","RE","OS","IR","PT","AU","HG","TL","PB","BI","PO","AT","RN","FR","RA","AC","TH","PA","NP","PU","AM","CM","BK","CF","ES","FM","MD","NO","LR","RF","DB","BH","HS","MT","dna","rna","cpkPalette","jmolPalette","vmdPalette","palettes","Colorer","ElementColorer","ResidueTypeColorer","SequenceColorer","ChainColorer","SecondaryStructureColorer","secondary","UniformColorer","ConditionalColorer","parsed","_subsetCached","ConformationColorer","TemperatureColorer","OccupancyColorer","_getColorByOccupancy","HydrophobicityColorer","hydrophobicity","MoleculeColorer","scaleColor","CarbonColorer","colorCarbon","colorNotCarbon","neutralColor","intensity","materialList","_gatherObjects","meshTypes","createDerivativeMesh","layer","newMesh","traverseMeshes","func","applyTransformsToMeshes","processTransparentMaterial","matValues","prepassTranspMesh","processColFromPosMaterial","colFromPosMesh","createShadowmapMaterial","shadowmapMesh","isShadowmapMesh","removeShadowmapMaterial","forEachMeshInGroup","processObj","_countMeshTriangles","attribs","property","currAttr","faces","countTriangles","totalCount","meshutils","Representation","startMaterialValues","selectorString","materialPreset","needsRebuild","setMode","unmarkAtoms","setMaterialPreset","selectionGeo","buildSelectionGeometry","sg","matrixAutoUpdate","compare","repSettings","selStr","valueOf","modeDiff","colorerDiff","change","newSelectorObject","newSelector","newMode","newColorer","newMaterial","_traverseComponentGroups","ComplexEditor","ComplexComponentEditor","complexVisual","_complexVisual","_inProgress","_componentTransforms","_bakeComponentTransform","_resetComponentTransform","finalizeEdit","discard","getAltObj","pivot","visual","getSelectedComponent","getSelectionGeo","selectionMask","getSelectionBit","reprNode","bbmin","bbmax","updateMatrix","ComplexFragmentEditor","_getSelectionBorderAtoms","_fragmentBoundAtoms","pivotPos","_fragmentGeo","_fragmentSelectionGeo","vg","smeshes","sm","selectionBit","makeTranslation","_bakeAtomTransform","isFreeRotationAllowed","boundAtoms","transformDirection","atomHash","ComponentEditor","FragmentEditor","ComplexVisualEdit","lookupAndCreate","entityList","specs","Entity","ComplexVisual","_reprList","_repr","_reprListChanged","_selectionBit","_reprUsedBits","_selectionCount","_selectionGeometry","getSelectionCount","getEditor","_editor","repCount","desc","status","repGet","_getFreeReprIdx","bits","NUM_REPRESENTATION_BITS","newSelectionBit","originalSelection","buildSelectorFromMask","def","hide","rebuildSelectionGeometry","resetSelectionMask","updateSelectionMask","pickedObj","otherObj","expandSelection","tmpMask","deselectionMask","shrinkSelection","multiple","getSelectionCenter","selRule","reprList","repr","Promise","resolve","errorOccured","setTimeout","hasGeometry","DEBUG","setNeedsRebuild","_buildSelectorFromSortedLists","optimizeList","NaN","expression","and","residx","forSelectedResidues","beginComponentEdit","editor","beginFragmentEdit","setMaterialValues","needTraverse","vertexVolumeFaces","fragmentVolumeFaces","vertexVolume","fragmentVolume","vertexFarPlane","fragmentFarPlane","volumeUniforms","volumeDim","tileTex","tileTexSize","tileStride","boxAngles","_isoLevel0","_flipV","_BFLeft","_BFRight","_FFLeft","_FFRight","_WFFLeft","_WFFRight","overrideUniforms","defUniforms","facesPosMaterialParams","sideType","BackFacePosMaterial","ShaderMaterial","backFaceParams","BackSide","ShaderParams","FrontSide","BackFacePosMaterialFarPlane","matUniforms","aspectRatio","farZ","tanHalfFOV","matWorld2Volume","shaderParams","FrontFacePosMaterial","frontFaceParams","VolumeMaterial","updateDefines","ISO_MODE","STEPS_COUNT","VolumeMesh","Plane","cullFlag","_corners","_edges","_edgeIntersections","edgeIntersections","_updateVertices","edges","constant","vert","cornerMark","edgeMark","curEdge","curEdgeInter","CheckX","CheckY","CheckZ","curEdgeIdx","curEdgeSource","face","nextVertex","coplanarPoint","_collectVertices","_sortIndices","_updateIndices","faceIdx","vRight","vDir","rightProj","numIndices","setDataSource","vm","image","volInfo","obtuseAngle","_updateIsoLevel","mean","dmean","dmin","span","dmax","sd","_nearClipPlaneOffset","_pos","_norm","_norm4D","Vector4","_matrixWorldToLocal","_clipPlane","nearClipPlaneOffset","norm4D","matrixWorldToLocal","getWorldDirection","getWorldPosition","setFromNormalAndCoplanarPoint","_flattenArray","VolumeBounds","_projectionTable","XY","XZ","YZ","bSize","offsetVert","_getBaseVertices","flatVertices","_lines","LineBasicMaterial","projTable","proj","inv","currDelta","angleValue","getMesh","VolumeFarPlane","volume","planeGeo","_initPlaneGeo","_plane","frustumCulled","doubleSided","matWorldToVolume","_renderer","planeCamPos","normalMatrix","volumeMatrix","DEG2RAD","VolumeVisual","_frame","showFrame","_farPlane","getBoundingSphere","needShow","LoaderList","someLoaders","SomeLoader","canProbablyLoad","Loader","_source","_options","_abort","_agent","abort","extractName","FileLoader","_binary","blob","reader","FileReader","readAsArrayBuffer","readAsText","File","urlStartRegexp","XHRLoader","request","ImmediateLoader","ParserList","someParsers","format","formats","SomeParser","canProbablyParse","parseSync","getModel","model","_parseHeader","Remark290","_matrix","_matrixIndex","stream","readString","matrixRow","readCharCode","matrixData","matrixIndex","parseFloat","Remark350","assemblies","_assembly","assembly","PDBStream","_start","_nextCR","_nextLF","_next","_end","readLine","readChar","readInt","readFloat","TAG_LENGTH","nameToElement","veryLong","pdbStartRegexp","remarkParsers","PDBParser","_serialAtomMap","_modelId","_compaundFound","_biomoleculeFound","_allowedChainsIDs","_lastMolId","_remarks","_remark","_compndCurrToken","fileType","_fixBondsArray","_fixChains","remark290","isUndefined","remark350","chainDict","chainObj","idChainMap","nj","_parseATOM","chainID","resSeq","_parseENDMDL","_parseCONECT","serial0","serial1","serial2","serial3","serial4","_parseCOMPND","tokenIdx","chainStr","lastChar","_parseREMARK","remarkNum","remark","RemarkParser","_parseHELIX","fields","_parseSTRUCTURE","_parseSHEET","pars","adder","startId","endId","codeOfS","serialNumber","structureName","helLength","shWidth","shCur","shPrev","startChainID","endChainID","startSequenceNumber","iCodeStr","startICode","endSequenceNumber","endICode","cs","_parseHEADER","classification","date","_parseTITLE","title","tagParsers","HEADER","HETATM","ENDMDL","CONECT","COMPND","REMARK","cOrderCharCodes","cmlStartRegexp","CMLParser","_readOnlyOneMolecule","_rebuidBondIndexes","countBonds","idxs","atomRefs2","_createSGroup","moleculeArr","fieldData","atomRefs","placement","fieldName","_extractSGroup","_extractSGroups","firstAtomRef","sgroupRef","mapEntry","cycleFuncInner","cycleFunc","x2","x3","y2","y3","z3","atomsRef","_traverseData","dom","parseNode","xmlNode","nodeName","nodeValue","jsonNode","existing","childNodes","_findSuitableMolecule","molSet","atomArray","_selectComponents","DOMParser","doc","parseFromString","traversedData","rawData","prepareComponentCompound","ret","atomLabels","labelsCount","localBond","bondArray","addCurrBond","orderAttr","tc","labels","_breadWidthSearch","retStruct","originalCML","cml","retData","filteredData","rd","_packLabel","compId","molId","_unpackLabel","molID","breadthQueue","componentID","labeledAtoms","startID","_parseBond","eAtom","mainAtom","_parseSet","varData","currentLabel","addFunc","complexAtom","reorder","atomCharge","lLabel","atomFullNameStruct","elementType","countRef","currAtomComp","strLabel","stringify","atomSerial","added","mrvValence","sGrp","moleculaSet","totalAtomsParsed","joinedComplex","ArrayComparator","original","_original","_sum","candidate","sorted","secStructToType","getFirstByte","buf","MMTFParser","isArrayBuffer","_onModel","_modelData","_onChain","chainData","_onGroup","groupData","_updateSecStructure","_onAtom","atomData","_onBond","bondData","helixClasses","_ssType","_ssStruct","_ssStart","struct","_updateMolecules","mmtfData","chainsInModel0","chainIndexList","description","_traverse","structureId","releaseDate","eventCallbacks","modelData","_linkAtomsToResidues","_findSynonymousChains","named","_parseAssemblyInfo","bioAssemblyList","baInfo","transformList","chainListCheck","chainNames","allChains","_chainsByName","transpose","_markHeteroAtoms","_joinSynonymousChains","primaryChainsArray","primaryChainsHash","primary","ParsingError","column","captureStackTrace","parseLine","parseColumn","_isWhitespace","_inlineIndexOf","ch0","readCIF","newline","block","keysCount","valuesCount","_parseValue","_storeKey","_storeValue","keyIndex","cRequiredAtomFields","cSecondaryCoding","helx","turn","strn","getTypeFromId","typeId","arrize","arrayLikeObject","AtomDataError","_getOperations","operList","vector","ops","_extractOperations","assemblyGen","opsDict","groupStr","gps","grIdx","grCount","gr","gp","es","cnt","ii","nn","newMtx","CIFParser","asymDict","_toComplex","cifData","complexData","_extractAtoms","_extractSecondary","_extractAssemblies","_extractMolecules","_extractMetadata","struct_keywords","pdbx_keywords","databaserev","database_PDB_rev","date_original","molData","pdbx_description","atom_site","auth_seq_id","Cartn_x","Cartn_y","Cartn_z","label_atom_id","group_PDB","chainIdc","auth_asym_id","chainLabelIdc","label_asym_id","serials","iCodes","pdbx_PDB_ins_code","resNames","label_comp_id","type_symbol","tempFactors","B_iso_or_equiv","occupancies","charges","pdbx_formal_charge","altLocs","label_alt_id","models","pdbx_PDB_model_num","label_entity_id","moleculeIdx","struct_conf","_extractConfs","struct_sheet_range","_extractSheets","sheetData","sheet_id","beg_label_seq_id","end_label_seq_id","beg_label_asym_id","sheetNames","strandNames","starts","beg_auth_seq_id","ends","end_auth_seq_id","stICodes","pdbx_beg_PDB_ins_code","endICodes","pdbx_end_PDB_ins_code","helicesData","conf_type_id","comments","details","lengths","pdbx_PDB_helix_length","pdbx_PDB_helix_class","asmGen","pdbx_struct_assembly_gen","asmIdx","assembly_id","asmOper","oper_expression","asmList","asym_id_list","pdbx_struct_oper_list","asm","assemblyOps","valueType","singular","VolumeModel","_xyz2crs","_header","_boxSize","_boxStart","extent","nstart","crs2xyz","cellDims","angles","_typedCheck","isTypedArray","_buff","TypeError","_fillHeader","headerFormat","arrays","_parseArray","_parseVector","_buffer","_setAxisIndices","_setOrigins","_getAxis","header","gamma","z1","z2","xaxis","yaxis","zaxis","_getXYZdim","_getVolumeInfo","_setBoxParams","shiftX","shiftY","_getXYZbox","_toXYZData","CCP4Header","ispg","nsymbt","lksflg","customData","machine","nlabel","Ccp4Model","u32","i32","f32","xyz2crs","xyzData","crsIdx","CCP4Parser","XYZParser","_atomsInf","_fileName","_parseToAtomsInf","endnAtoms","endComment","startAtomsInf","_parseAtomsInf","words","PubChemParser","jsonData","PC_Compounds","aids","aid","fromPairs","zip","coords","conformers","aids1","aid1","aids2","aid2","orders","SDFStream","_strings","_currentStart","_currentStringIndx","setStart","getNextString","getCurrentString","getStringFromStart","numb","findNextDataItem","curStr","findNextCompoundStart","probablyHaveDataToParse","chargeMap","orderMap","typeMap","sdfAndMolRegexp","sdfRegExp","fileFormat","SDF","MOL","possibleNameTags","possibleIDTags","possibleTitleTags","tagsNames","tags","buildChainID","codes","trunc","reverse","SDFParser","_format","_metadata","_currentMolProps","_compoundIndx","_assemblies","_atomsParsed","_atomsIndexes","_parseAtoms","_parseBonds","bondsNum","bondType","_parseMOL","countsLine","_parseDataItem","_parseCompound","props","_tryToUpdateMoleculeData","_buildAssemblies","_buildMolecules","_searchTag","_tryToFind","tagsList","tagPossibleNames","_finalizeMetadata","defineFormat","DSN6Header","div","DSN6Model","i16","_pointCalculate","byteBuffer","counter","_blockCalculate","zBlock","yBlock","xBlock","inRange","blocks","_calculateInfoParams","dispersion","minDensity","maxDensity","DSN6Parser","canParse","checkDataTypeOptions","GROReader","getNext","GROParser","_time","_residueNumber","_residueName","_atomName","_atomNumber","_atomPosition","_atomVelocity","filetype","_parseTitle","_parseNumberOfAtoms","_parseAtom","positionX","positionY","positionZ","un","am","nc","du","resNumberRegex","spacesRegex","splitToFields","MOL2Parser","_currPosIdx","_currStartIdx","_parseRawStrings","_toStringFromStart","MOL2Data","newPosIdx","_toHeaderString","_toStringFromHeader","_setStart","_probablyHaveDataToParse","_findNextCompoundStart","_parseMolecule","parsedStr","_setResidue","originAtomId","targetAtomId","_fixSerialAtoms","currMolecule","molResidues","ExporterList","someExporters","Exporter","exportSync","export","PDBResult","_resultArray","_currentStr","_tag","_fixedNumeration","_numeration","_tagStrNum","getResult","writeString","_currentStrLength","newTag","numeration","isBoolean","newString","writeEntireString","maxStrPos","curStrLength","finish","repeat","cStr","writeBondsArray","bondsArrays","_getSubArrays","subArraySize","subArrays","writeMatrix","matrixIndx","toFixed","writeMatrices","PDBExporter","_tags","_result","_tagExtractors","_extractHEADER","TITLE","_extractTITLE","_extractATOM","_extractCONECT","_extractCOMPND","_extractREMARK","_extractHELIX","SHEET","_extractSHEET","_stringForRemark350","_stringForRemark290","fixedBonds","strands","startIndx","_getMoleculeChains","chainsString","_Remark290","_Remark350","biomolIndx","getChainName","SourceClass","FBX_POS_SIZE","FBX_NORM_SIZE","FBX_COL_SIZE","copyFbxPoint3","srcIdx","dstIdx","copyFbxPoint4","vector4","copyTransformedPoint3","setSubArray","copyFunctor","functorOpts","arridx","FBXModel","lastPos","lastNorm","lastCol","vertsCount","indsCount","setPositions","setTransformedPositions","setNormals","setTransformedNormals","setIndices","setShiftedIndices","shifted","getVerticesNumber","addInstance","currentCount","FBXGeometry","_info","FBX1CGeometry","cl","FBX2CCylinder","_cutRawStart","_cutRawEnd","_facesPerSlice","addPerCylinder","_extendVertices","_extendIndices","cutRaw","indicesPerQuad","startToShift","_setColorRange","colorSize","part1End","part2End","capSize","cap1End","cap2End","FBXInfoExtractor","_materials","_models","_extractModelsAndMaterials","_flattenModels","layersOfInterest","Layers","checkExportAbility","_collectInstancedGeoInfo","_collectGeoInfo","_reworkIndices","faceSize","overallVertsCount","combined","verticesCount","vertCount","_collectMaterialInfo","_addToPool","_collectSpheresInfo","instCount","instMatrix","objMatrix","sphereColor","instanceIndex","_getSphereInstanceMatrix","_collectCylindersInfo","oneCCylinder","splittingInfo","_gatherCylindersColoringInfo","twoCCylinder","needToSplit","additionalVertsCount","colorStart","colorEnd","is2Colored","_getCylinderInstanceMatrix","materialIdx","_checkExistingMaterial","findIndex","differs","instIdx","matVector1","matVector2","matVector3","idxOffset","defaultDefinitions","defaultProperties","defaultMaterialLayer","defaultLayerBlock","globalSettings","FBXResult","_writeHeader","_writeDefinitions","_writeObjects","_writeRelations","_writeConnections","FBXHeaderVersion","FBXVersion","timeStampVersion","creator","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","modelVersion","allModels","_verticesIndices","_normalLayer","_colorLayer","materialVersion","allMaterials","_materialProperties","modelsList","_floatArrayToString","colorArray","layerElementColorNumber","layerElementColorVersion","layerElementColorName","colorsStr","colorIndices","normalArray","layerElementNormalNumber","layerElementNormalVersion","layerElementNormalName","normalsStr","multiLayer","multiTake","shading","culling","geometryVersion","vertStr","FBXExporter","_version","miewVersion","_extractor","loaders","parsers","exporters","tempColor","CSS2DRenderer","_height","_widthHalf","_heightHalf","_vector","_viewMatrix","_projectionMatrix","_domElement","overflow","pointerEvents","myNode","setSize","_renderObject","lerpColorAsHex","setHex","getHexString","colorAsHex","setFromMatrixPosition","localOffset","getMaxScaleOnAxis","fogFactor","smoothstep","WebkitTransform","MozTransform","oTransform","getTopWindow","VK_LEFT","VK_UP","VK_RIGHT","VK_DOWN","STATE","NONE","ROTATE","TRANSLATE","SCALE","TRANSLATE_PIVOT","FULL_STOP_THRESHOLD","Quaternion","matrix4","ObjectHandler","lastRotation","_rotate","quat","zeroPivot","makeRotationFromQuaternion","setObjects","rot","mousePrevPos","mouseCurPos","aboutAxis","mouse2rotation","setFromAxisAngle","translateOnAxis","timeSinceLastUpdate","timeSinceMove","intertia","dynamicDampingFactor","intertiaThreshold","eyeDirection","cameraUpDirection","cameraSidewaysDirection","moveDirection","mouseDelta","mousePrev","mouseCur","axisRotateFactor","setLength","rotateFactor","ObjectControls","objectPivot","hotkeysEnabled","screen","_state","_mousePrevPos","_mouseCurPos","_mainObj","_altObj","_affectedObj","_isAltObjFreeRotationAllowed","_isTranslationAllowed","_isKeysTranslatingObj","_pressedKeys","_clock","_lastUpdateTime","_listeners","mousedown","mouseup","mousemove","mousewheel","touchstartend","touchmove","getKeyBindObject","keydownup","handleResize","resetKeys","contextmenu","stopPropagation","preventDefault","innerWidth","innerHeight","getBoundingClientRect","ownerDocument","documentElement","pageXOffset","clientLeft","pageYOffset","clientTop","enableHotkeys","allowTranslation","allow","allowAltObjFreeRotation","keysTranslateObj","isEditingAltObj","convertMouseToOnCircle","pageX","pageY","screenSize","convertMouseToViewport","rotateByMouse","aboutZAxis","getOrientation","setOrientation","getScale","setScale","curTime","_lastMouseMoveTime","speedX","speedY","altObj","button","workWithAltObj","altKey","ctrlKey","shiftKey","translatePivotByMouse","wheelDelta","detail","touches","_touchDistanceCur","_touchDistanceStart","_scaleStart","newScale","keyCode","translatePivotInWorld","setX","setY","setZ","translatePivot","setPivot","newPivot","Picker","_lastMousePos","_mouseTotalDist","_lastClickBeginTime","_lastClickPos","_clickBeginTime","touchstart","touchend","picked","pickObject","screenPos","rayCaster","unproject","fogFarValue","getMouseInViewport","curPos","timeSinceLastClickBegin","clickDist","_lastTouchdownPos","changedTouches","Axes","targetCamera","_target","_targetCamera","_object","AxesHelper","_full","autoClear","setViewport","cDataOffset","cFirstMask","cFirstShift","cSecMask1","cSecShift1","cSecMask2","cSecShift2","cThirdMask","cStrMask","cStrShift","c219","c220","cHelixIdx","cSheetIdx","secTypes","cSecNames","_createSecondary","strArray","nRes","resid","rIdx","fromUInt20ToInt20","uint20","FrameInfo","payload","callbacks","isLoading","_framesRange","frameIsReady","_frameRequest","_callbacks","_framesRequestLength","_downloadDataFn","parseBinaryData","setFrame","_prepareBuffer","framesStart","framesEnd","_framesCount","onDone","onLoadStatusChanged","onFail","onError","_parseBuffer","_bufferRequestStart","arrayBuffer","dataView","atomsCount","framesCount","_atomsCount","maxSize","chunkedFramesCount","timeStep","iName","_timeStep","posData","coordIdx","secondaryArr","hiWord","loWord","_secondaryData","nextFrame","_currFrame","_updateSecondary","myResidues","sec","oldSec","nSec","compRes","getSec","frameIdx","_cachedResidues","disableEvents","_vec","vec","SceneObject","paramsStr","getGeometry","LinesObj","_id1","_id2","_getAtomFromName","err","_atom1","_atom2","_line","computeLineDistances","_raycaster","_intersects","verticesNeedUpdate","OutlineMaterial","srcDepthTex","srcTexSize","DEPTH_OUTLINE","FXAAMaterial","bgTransparent","BG_TRANSPARENT","AOMaterial","diffuseTexture","normalTexture","depthTexture","camNearFar","projMatrix","kernelRadius","depthThreshold","_kernelOffsets","AOHorBlurMaterial","aoMap","samplesOffsets","AOVertBlurWithBlendMaterial","fogNearFar","useFog","AnaglyphMaterial","srcL","srcR","View","orientation","_transitionTime","ViewInterpolator","setup","startView","endView","_endTime","_isPaused","_srcView","_dstView","_isMoving","isMoving","wasStarted","transTime","getCurrentView","success","createView","slerp","pause","resume","MAX_COOKIE_LEN","COUNT_SUFFIX","_chunkString","chunkLen","lc","Cookies","removeCookie","cntKey","_toCount","cntVal","_getSimpleCookie","_removeSimpleCookie","setCookie","_setSimpleCookie","getCookie","cookie","_getExpirationDate","today","EXP_PERIOD_YEARS","setFullYear","toUTCString","_exists","webVRPoC","showEnterVR","cursor","currentSession","onSessionEnded","onSessionStarted","session","_gfx","xr","setReferenceSpaceType","setSession","onmouseenter","onmouseleave","onclick","sessionInit","optionalFeatures","requestSession","then","moveSceneBehindHeadset","showWebXRNotFound","stylizeElement","bottom","padding","border","font","isSessionSupported","supported","textDecoration","createWebVRButton","WebVRPoC","onToggle","_mainCamera","_button","_onToggle","_molContainer","_user","_scalingPivot","_controller1","_controller2","_pressedGripsCounter","_distance","startScalingByControllers","stopScalingByControllers","handleGripsDown","handleGripsUp","anotherController","gfx","_mainFog","_plugVRNodesIntoScene","_setControllersListeners","getController","_createControllerMesh","disable","setAnimationLoop","getSession","_unplugVRNodesFromScene","cylinder","rotateX","updateMoleculeScale","scaler","container","getCanvas","io","LinesObject","fragmentScreenQuadFromDistTex","EDIT_MODE","COMPLEX","COMPONENT","FRAGMENT","LOADER_NOT_FOUND","PARSER_NOT_FOUND","ColorManagement","updateFogRange","removeExtension","hasValidResidues","hasValidRes","reportProgress","percent","TOTAL_PERCENT","chooseFogColor","Miew","settingsCookie","cookiePath","_interpolator","_container","getElementById","head","getElementsByClassName","_containerRoot","_running","_halting","_building","_needRender","_hotKeysEnabled","_cookies","_spinner","_loading","_animInterval","_visuals","_curVisualName","_sourceWindow","registeredPlugins","_initOnSettingsChanged","getMaxRepresentationCount","_setContainerContents","_updateShadowCamera","shadowMatrix","OBB","halfSize","light","getOBB","class","frag","createDocumentFragment","_msgMode","_msgAtomInfo","_showMessage","_initGfx","_initListeners","_onKeyDown","_onKeyUp","_objectControls","_getAltObj","_picker","_onPick","file","keepRepsInfo","job","halt","msg","_showCanvas","_requestAnimationFrame","requestAnimationFrame","clientWidth","clientHeight","webGLOptions","preserveDrawingBuffer","premultipliedAlpha","renderer2d","shadowMap","autoUpdate","PCFShadowMap","setPixelRatio","devicePixelRatio","setClearColor","clearColor","stereoCam","Fog","selectionScene","selectionRoot","selectionPivot","light12","DirectionalLight","pixelRatio","getPixelRatio","shadowMapSize","mapSize","light3","AmbientLight","deviceWidth","deviceHeight","offscreenBuf","WebGLRenderTarget","minFilter","magFilter","depthBuffer","DepthTexture","UnsignedShortType","offscreenBuf2","offscreenBuf3","offscreenBuf4","volBFTex","volFFTex","volWFFTex","offscreenBuf5","FloatType","offscreenBuf6","offscreenBuf7","stereoBufL","stereoBufR","_embedWebXR","stats","_fps","_onResize","_makeUniqueVisualName","baseName","random","suffix","_addVisual","_removeVisual","_forEachVisual","_releaseAllVisuals","_forEachComplexVisual","_getComplexVisual","any","_getVolumeVisual","_getVisualForComplex","getVisuals","getComplexVisualsCount","getCurrentVisual","setCurrentVisual","run","_onTick","_discardComponentEdit","_discardFragmentEdit","enableHotKeys","_resizeOffscreenBuffers","isAnaglyph","multi","_onUpdate","_onRender","_getBSphereRadius","_bSphereForOneVisual","_bBoxForOneVisual","_bBox","_invMatrix","_points","union","_updateFog","_setUberMaterialValues","isScriptingCommandAvailable","callNextCmd","_needRebuild","_updateView","webVR","_clipPlaneUpdateValue","_fogFarUpdateValue","setRenderTarget","_renderFrame","_anaglyphMat","_size","focus","_renderShadowMap","_renderScene","setScissorTest","setScissor","cameraL","cameraR","_onBgColorChanged","_onFogColorChanged","_enableMRT","renderBuffer","textureBuffer","gl","getContext","COLOR_ATTACHMENT0","tx8","__webglTexture","bindTexture","TEXTURE_2D","fb","__webglFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT1","distortion","bHaveComplexes","volumeVisual","ssao","_renderWithPrepassTransparency","dstBuffer","srcBuffer","_performAO","_renderOutline","_renderSelection","_renderVolume","_performFXAA","_performDistortion","aberration","targetBuffer","_outlineMaterial","srcDepthBuffer","srcColorBuffer","currentRenderTarget","getRenderTarget","activeCubeFace","getActiveCubeFace","activeMipmapLevel","getActiveMipmapLevel","setBlending","NoBlending","buffers","setClear","setTest","updateMatrices","_hasSelectionToRender","selPivot","selPivotChild","_checkVolumeRenderingSupport","renderTarget","oldRT","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","volumeBFMat","volumeFFMat","cubeOffsetMat","world2colorMat","volumeRenderingSupported","dstBuf","tmpBuf1","tmpBuf2","tmpBuf3","overrideMaterial","colorMask","_fxaaMaterial","_aoMaterial","_horBlurMaterial","_vertBlurMaterial","_scale","normalBuffer","srcDepthTexture","tempBuffer","tempBuffer1","_lastPick","_setEditMode","_resetObjects","setNeedRender","_resetScene","resetPivot","resetView","_export","TheExporter","exporter","rePdbId","rePubchem","reUrlScheme","resolveSourceShortcut","matchesPdbId","sourceType","matchesPubchem","compound","updateBinaryMode","TheParser","fileExt","_fetchData","TheLoader","newOptions","keyCount","loader","lengthComputable","total","loaded","promise","catch","_parseData","dataSet","onLoadEnd","anything","jobIndex","_refreshTitle","_onLoad","unload","_startAnimation","fileData","_stopAnimation","_frameInfo","isPlaying","_isAnimating","_continueAnimation","_pauseAnimation","clearInterval","minFrameTime","setInterval","_updateObjsToFrame","visualName","amberFileName","resetEd","_onLoadEd","_tweakResolution","_edLoader","loadEd","_rebuildObjects","toRemove","unitIdx","currentUnitInfo","_updateInfoPanel","rebuildActions","appendix","_extractRepresentation","defPreset","_setReps","presList","newIdx","_editMode","getElementsByTagName","_enterComponentEditMode","editors","_editors","_applyComponentEdit","_enterFragmentEditMode","selectedVisuals","_applyFragmentEdit","_updateSelection","firstLine","secondLine","aName","coordLine","nextAltObj","setPivotResidue","amount","setPivotAtom","_centerInVisual","setPivotSubset","_includesInCurSelection","_includesInSelector","screenshot","fov2Tan","tan2Fov","getDataURL","dataURL","currBrowser","canvas","canvasContext","drawImage","toDataURL","screenshotURI","originalTanFov2","areaOfInterestSize","areaOfInterestTanFov2","shotAspect","setDrawingBufferSize","uri","save","dataString","maxPerf","_gfxScore","_autoChangeResolution","setOptions","objData","bThrow","Ctor","_addSceneObject","sceneObject","objs","getState","compact","getScript","_compareReps","compareWithDefaults","currPreset","repsDiff","emptyReps","repsInfo","objectsState","_updateShadowmapMeshes","_updateMaterials","_fogAlphaChanged","evt","Boolean","sel","VIEW_VERSION","eulerOrder","euler","Euler","setFromQuaternion","srcView","dstView","setFromEuler","None","projected","fullAtomName","complexName","project","exportCML","extractRotation","extractBasis","retMat","makeBasis","updateCMLData","xml","removeAttribute","sGroup","oSerializer","XMLSerializer","serializeToString","curChainName","curChainColor","PACKAGE_VERSION","thirdParty","lodash","three","modeIdDesc","$help","colorDesc","materialDesc","addRepDesc","setGetParameterDesc","PDBID","REP_NAME","DESCRIPTION","REP_INDEX","EXPRESSION","MODE_ID","COLORER_ID","MATERIAL_ID","new","del","PARAMETER","set_save","set_restore","set_reset","PRESET","ENCODED_VIEW","removeobj","listobj","parsercli","clihelp","NULL","RepresentationMap","representationMap","representationID","strId","sortedKeys","representationsStorage","CLIUtils","repMap","repName","selectionStr","strList","joinHelpStr","helpData","sortBy","helpItem","awaitWhileCMDisInProcess","finishAwaitingCMDInProcess","modificate","selExc","modificators","modificator","argExc","pathExc","endsWith","utilFunctions","cliUtils","cmd","_val","cliutils","notimplemented","script","_printCallback","_errorCallback","cmdQueue","commandInAction"],"sourceRoot":""} \ No newline at end of file diff --git a/packages/miew/docs/getting-started-for-dummies.md b/packages/miew/docs/getting-started-for-dummies.md index bd997c4c..81e52edd 100644 --- a/packages/miew/docs/getting-started-for-dummies.md +++ b/packages/miew/docs/getting-started-for-dummies.md @@ -1,6 +1,6 @@ # Getting Started with Miew Development: The Beginner's Guide -Copyright (c) 2015–2025 [EPAM Systems, Inc.](https://www.epam.com/) +Copyright (c) 2015–2026 [EPAM Systems, Inc.](https://www.epam.com/) ![Miew screenshot](https://github.com/epam/miew/raw/master/README.png) diff --git a/packages/miew/docs/tutorials/embed.md b/packages/miew/docs/tutorials/embed.md index 5bb3f833..7a6546aa 100644 --- a/packages/miew/docs/tutorials/embed.md +++ b/packages/miew/docs/tutorials/embed.md @@ -31,11 +31,11 @@ _index.html_ Miew via Global - + - + - +

Use Miew via browser globals

@@ -64,7 +64,7 @@ _index.html_ Miew via Require.js - + @@ -75,11 +75,11 @@ _index.html_ @@ -149,7 +149,7 @@ _package.json_ ```json { "dependencies": { - "miew": "0.9.0" + "miew": "0.12.0" } } ``` @@ -215,7 +215,7 @@ _package.json_ { "dependencies": { "css-loader": "6.8.1", - "miew": "0.9.0", + "miew": "0.12.0", "style-loader": "3.3.3", "webpack": "5.88.2", "webpack-cli": "5.1.4" diff --git a/packages/miew/examples/api.html b/packages/miew/examples/api.html index 074afa5a..eca78ec6 100644 --- a/packages/miew/examples/api.html +++ b/packages/miew/examples/api.html @@ -5,7 +5,7 @@ Miew API - + diff --git a/packages/miew/examples/empty.html b/packages/miew/examples/empty.html index aa6ac3b1..1b06b342 100644 --- a/packages/miew/examples/empty.html +++ b/packages/miew/examples/empty.html @@ -5,7 +5,7 @@ Miew via Global - + diff --git a/packages/miew/examples/events.html b/packages/miew/examples/events.html index 72e33802..e6b855e6 100644 --- a/packages/miew/examples/events.html +++ b/packages/miew/examples/events.html @@ -5,7 +5,7 @@ Miew events - + diff --git a/packages/miew/examples/fullscreen.html b/packages/miew/examples/fullscreen.html index 34543073..811bc0be 100644 --- a/packages/miew/examples/fullscreen.html +++ b/packages/miew/examples/fullscreen.html @@ -37,7 +37,7 @@ } - + diff --git a/packages/miew/examples/grid.html b/packages/miew/examples/grid.html index f58f40d3..a7b71c7a 100644 --- a/packages/miew/examples/grid.html +++ b/packages/miew/examples/grid.html @@ -86,12 +86,12 @@

Adverse effects


- Miew – 3D Molecular Viewer. Copyright (c) 2015–2025 EPAM Systems, Inc. + Miew – 3D Molecular Viewer. Copyright (c) 2015–2026 EPAM Systems, Inc.
- + + diff --git a/packages/miew/examples/load_from_string.html b/packages/miew/examples/load_from_string.html index d39a40d7..f7a345b3 100644 --- a/packages/miew/examples/load_from_string.html +++ b/packages/miew/examples/load_from_string.html @@ -5,7 +5,7 @@ Load serotonin from string - + diff --git a/packages/miew/examples/miew_via_global.html b/packages/miew/examples/miew_via_global.html index 7a8a288c..e9bdb811 100644 --- a/packages/miew/examples/miew_via_global.html +++ b/packages/miew/examples/miew_via_global.html @@ -5,7 +5,7 @@ Miew via Global - + diff --git a/packages/miew/examples/miew_via_require.html b/packages/miew/examples/miew_via_require.html index 8f5ff268..b497bc32 100644 --- a/packages/miew/examples/miew_via_require.html +++ b/packages/miew/examples/miew_via_require.html @@ -14,7 +14,7 @@

Use Miew via Require.js

+ diff --git a/packages/miew/examples/options.html b/packages/miew/examples/options.html index 2d302273..765d9282 100644 --- a/packages/miew/examples/options.html +++ b/packages/miew/examples/options.html @@ -5,7 +5,7 @@ Miew options - + diff --git a/packages/miew/examples/options_fromAttr.html b/packages/miew/examples/options_fromAttr.html index 4a9c3b35..c0fce344 100644 --- a/packages/miew/examples/options_fromAttr.html +++ b/packages/miew/examples/options_fromAttr.html @@ -5,7 +5,7 @@ .options.fromAttr() - Miew API - + diff --git a/packages/miew/examples/options_fromURL.html b/packages/miew/examples/options_fromURL.html index 590ff7df..b0a1c46a 100644 --- a/packages/miew/examples/options_fromURL.html +++ b/packages/miew/examples/options_fromURL.html @@ -5,7 +5,7 @@ .options.fromURL() - Miew API - + diff --git a/packages/miew/examples/projected.html b/packages/miew/examples/projected.html index 37fb9e94..84c8d8f8 100644 --- a/packages/miew/examples/projected.html +++ b/packages/miew/examples/projected.html @@ -25,7 +25,7 @@ } - + diff --git a/packages/miew/examples/sequence.html b/packages/miew/examples/sequence.html index 6a0cb4b6..aa8a0c94 100644 --- a/packages/miew/examples/sequence.html +++ b/packages/miew/examples/sequence.html @@ -5,7 +5,7 @@ Select residues from sequence - +